diff --git a/dist/bundle/Classic.css b/dist/bundle/Classic.css index 1002a57e..d5dc1241 100644 --- a/dist/bundle/Classic.css +++ b/dist/bundle/Classic.css @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */ @@ -55,7 +55,7 @@ * @license Licensed under MIT license * See https://raw.githubusercontent.com/proj4js/proj4js/master/LICENSE.md * @version 2.15.0 - */#GPmapLoading{display:none;height:50px;left:50%;margin-left:-25px;margin-top:-25px;position:absolute;top:50%;width:50px;z-index:50}#GPmapLoading.GPmapLoadingVisible{display:block}#GPmapLoading{background-image:url(data:image/gif;base64,R0lGODlhNAA0AIQSAAFkpSZ5sAGV3k2Ruiao3kOj1/GUBk225pe/B4S83XrK75HH3qrS5szMzNbW1sHe797e3ubm5v///////////////////////////////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAQAfACwAAAAANAA0AAAF5uAnjmRpnmiqrmzrvnAsz3T9FXhh72Ke8zWfDzgT/ogxIw55cjgiJ6XOhKjaII1sNio8Vb8ImnbMXVLBVhl2vI2hvzIHOwt9veGxyLwhu4dlcw59bzVjgjNoPHU2f0yOj5CRkpMocg2HjwaaBitzmZuaKWuGTKCgKHt8SKabqHulrJwno1qYQLGyJ56OrCuWtrChlMPExcbHH4s1ymK1NJZtM4Fxu3mvMXvMLdBj2ip60zG0WoBzENLVJL+66TDj7GQmbOc1EE9N4SURDvSRqcgj/gH8wC0LsGPtAK7pN7Chw4cQSYQAACH5BAUBAB8ALBYABAAaACcAAAVw4PdBTQOJaKquX+k2bJw6b+nIcu3isV7yLFrttioYczWWcVmICYkq5hKolB6pKOsUm9Vyu9JvKiyOls/otHqNQ7gR6ff7LJeX63Mx3n3f0+txeWyDhIVlBmsGiopoi45njo9fkZKTlIhil42RaYsxIQAh+QQFAQAfACwWAAkAGgAnAAAFdOAnjmQZOVCprmTjuikrf289y/Ub32SUuw6e6teICEuO31GVfC1Zxqd0Sq1arYVsAavNUrvdKVgrHm+l5jMazPVe3/C4/IN4I+73Kn5P3fOffn+AgXUqBocGK4QriIiKfoaNjip4LJKTT5eHU5qJnJJWjVUhACH5BAUBAB8ALAkAFgAnABoAAAV04CeOZGmepdM0Duq+5yo3cO2qcwPZPJnLveBvFezhZrsi76cM4lrNqHRKrVpPhmoBZuh2o4VwGOUtK8VoU9lcRKdJazbP/R7Fv236tnQ/If4IJ3pYa36Af4JuLl6Gh4gmYlKOgFclk4+VIpeBmSOTnZaUTSEAIfkEBQEAHwAsBAAWACcAGgAABXfg9xmkIZ5oqq5rWbJwnLqubLP0e+9nTvJAnwnIyxGJtaNyyWw6n1Ao4hmRIa7XpaPBbbCw4OO2y1WBw0Ryt4o6o3cRNdeRcmfTcojZvSr4CytyXntvKH9/gWR6X3cph4crEQ6LSo+IUYaWgJgnmpucIpagjpc3IQAh+QQFAQAfACwEAAkAGgAnAAAFb+AnjqJhkmiamqyhvmjLwrA806p946Tu8isbMNca1ozIpHLJTCKeiCYUupxOlVaqMxvdZqtWqbZJLpvPyEK5wGYz23AlPJ6c0412t9yucjQaDi98KX+FDTBtfYZ/gUmLhUqPf0p+i42Oi00QfxAiIQAh+QQFAQAfACwEAAQAGgAnAAAFc+AnjmRZGqhhrmyasrDounE7o/V64yvi6zuTb4gA0oTEn+lYSg5zSGcROpJOqVUntknc9rzgsHhMLhXOhTEaHV6vwW62N36G09tutbzM7/v/JhFlDYQNDmKFhYdeEYmFYA6OhIJbEJINYZdhlolkEA6UUCEAIfkEAQEAHwAsBAAEACcAGgAABXXgJ45kWSIoYq5sS6apK8swPN9mHeP8p6O9UmG4+qlMhmRryCwUa6uk1LBqMp9A5FQptBKDW2nX6+SFxSRyuXemjpvBz5lljYu2srX9vu/7/4CBgh8NhQ6DK4WKDYgkEIuGjSKQipKElIySj5CHlpSWIw6RoCEAOw==)}.GPwidget{color:#333;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:13px;pointer-events:auto;position:absolute}.GPwidget input[type=button],.GPwidget input[type=text]{-webkit-appearance:none;appearance:none;color:#333}.GPwidget input[type=checkbox]{display:none}.GPwidget select{border-radius:3px;padding-left:3px}.GPwidget form{margin-bottom:0}.GPwidget *{background-repeat:no-repeat;box-sizing:border-box}:root{--size-per-row:32px}#position-container-bottom-left,#position-container-bottom-right,#position-container-top-left,#position-container-top-right{border-style:solid;display:flex;flex-direction:column;justify-content:center;min-height:var(--size-per-row);position:absolute;width:var(--size-per-row)}#position-container-top-left,#position-container-top-right{top:0}#position-container-top-left{float:left;left:0}#position-container-top-right{float:right;right:0}#position-container-bottom-left,#position-container-bottom-right{bottom:0}#position-container-bottom-right{float:right;right:0}#position-container-bottom-left{float:left;left:0}.GPpanel{background-color:#fff;border:unset;border-radius:4px;box-shadow:0 0 6px #000;padding:unset}.GPpanelHeader{background-color:#9db1bd;border-top-left-radius:4px;border-top-right-radius:4px;height:32px;padding:3px;position:relative;width:100%}.GPpanelTitle{background-color:#366291;border-top-left-radius:2px;border-top-right-radius:2px;color:#fff;font-weight:700;height:100%;line-height:26px;text-align:center;width:100%}.GPpanelClose,.GPpanelIcon,.GPpanelInfo,.GPpanelReduce,.GPresetPicto,.GPreturnPicto{background-color:#366291;border:none;cursor:pointer;height:26px;position:absolute;width:26px}.GPpanelClose{background-position:-27px 0;right:3px;top:3px}.GPpanelInfo,.GPreturnPicto{left:3px;top:3px}.GPpanelReduce{right:32px;top:3px}.GPresetPicto,.GPreturnPicto{border-radius:3px;opacity:1}.GPshowAdvancedToolPicto{background-color:hsla(0,0%,100%,.4);border:2px solid hsla(0,0%,100%,.4);border-radius:4px;box-sizing:border-box;cursor:pointer;height:32px;padding:2px;position:relative;width:32px}.GPshowAdvancedToolPicto:hover{background-color:hsla(0,0%,100%,.6)}.GPshowAdvancedToolOpen{background-color:rgba(0,60,136,.5);border-radius:2px;box-sizing:border-box;display:block;height:26px;position:absolute;width:26px}.GPshowAdvancedToolPicto:hover .GPshowAdvancedToolOpen{background-color:rgba(0,60,136,.7)}.GPshowOpen{background-color:rgba(0,60,136,.5)}.GPshowOpen:hover{background-color:rgba(0,60,136,.7)}.GPwaitingContainer{background-color:hsla(0,0%,100%,.9);border-radius:4px;bottom:0;font-size:1.5em;font-weight:700;left:0;overflow:hidden;position:absolute;right:0;top:32px}.GPwaitingContainerVisible{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex}.GPwaitingContainerHidden{display:none}.GPwaitingContainerInfo{margin:auto}.GPflexInput{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;transition:max-height .3s ease-out,opacity .3s ease-out}.GPflexInput>*{border:1px solid #999;border-radius:0;display:block;height:28px;line-height:26px}.GPflexInput :not(:last-child){border-right:none}.GPflexInput :first-child{border-radius:3px 0 0 3px}.GPflexInput :last-child{border-radius:0 3px 3px 0}.GPflexInput>:not(input){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.GPflexInput>input{min-width:0;padding:0 5px}.GPflexInput>input,.GPflexInput>select{-webkit-flex:1;-webkit-box-flex:1;-ms-flex:1;flex:1}.GPflexInput>select{padding-right:7px}.GPflexInput>label{background-color:#f2f2f2;color:#666;cursor:pointer;padding-left:7px;padding-right:9px}input.GPsubmit{background:none;background-color:#366291;border:none;border-radius:3px;color:#fff;cursor:pointer;display:block;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-weight:700;height:28px;line-height:26px;margin:auto;opacity:.8;padding:0;transition:opacity .2s ease-out;width:80px}input.GPsubmit:hover{opacity:1}.GPselect{border:1px solid #999;color:#333;cursor:pointer;display:block;height:28px;line-height:26px;margin:auto}.GPform{padding:15px}.GPelementHidden,.GPelementInvisible{display:none;opacity:0;visibility:hidden}.GPelementShow,.GPelementVisible{display:block;opacity:100%;visibility:visible}.GPadvancedAutoCompleteList,.GPautoCompleteList{z-index:2}.GPadvancedAutoCompleteList{border-top:none;font-size:.9em;width:calc(100% - 28px)}.GPautoCompleteProposal{color:#5e5e5e;cursor:pointer;font-size:1em;height:28px;line-height:16px;overflow:hidden;padding:6px 10px;text-overflow:ellipsis;white-space:nowrap;width:100%}.GPautoCompleteProposal:hover{background-color:#cedbef;color:#000}.GPshowMoreOptionsImage{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAA7ElEQVRIx+3UvUoDQRSG4ffMLhbaLIEFvQSxtN1ALiGymkswpZVoupS6Vt6BYBMWf+s0Kaa1FG9BEBYbDQRnj4UKqTRgtjtPeWaYb4YPBowxpmmyyKbs6PpJVCfVan3wOOzN5te2huVK692dq0jHn+abf53lFrqWMlKRfjKNxu1Bmf6M24MyTabRWEX6KKOlvRAgO77ZQ/UCqBDXdSqzmnAPbKDs+yK/XGrgV+jtNlrfAcn36BVxXX+y89BYh+kbrQ+JrgBiDbsva1SNdhhigi/yzBd5FmKCdfivQIDOYbk+3+HkrPds35kx5lef+y50/JHC/FoAAAAASUVORK5CYII=)}.GPshowMoreOptions{cursor:pointer;display:block;height:28px;position:absolute;transition:all .5s ease-out 0s;width:28px}button[aria-pressed=true].GPshowMoreOptions,input[type=checkbox]:checked+.GPshowMoreOptions{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.gp-feature-info-div{background-color:#fff;border-radius:10px;bottom:17px;box-shadow:0 0 5px #000;color:#002a50;font-family:Open Sans,sans-serif;font-size:.75em;max-width:calc(100vw - 80px);padding:10px;position:relative}.gp-feature-info-div:before{border-left:14px solid transparent;border-right:14px solid transparent;border-top:15px solid #fff;bottom:-15px;content:"";left:50%;margin-left:-14px;position:absolute}.gp-feature-info-div .closer{background-color:#fff;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwYjc5OCIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:14px 14px;border:none;border-bottom-right-radius:10px;border-top-right-radius:10px;cursor:pointer;display:block;height:30px;position:absolute;right:0;top:0;width:30px}.gp-features-content-div{max-height:340px;max-width:420px;min-width:260px;overflow:auto}.gp-features-content-div h5,.gp-features-content-div h6,.gp-features-content-div p,.gp-features-content-div ul{margin:0}.gp-features-content-div ul{list-style-type:none;padding:0}.geoportail-popup-content h5,.geoportail-popup-content h6,.geoportail-popup-content p,.gp-att-description-div,.gp-att-name-div,.gp-att-others-div{padding:0 10px}.geoportail-popup-content h5:not(:last-child),.geoportail-popup-content h6:not(:last-child),.geoportail-popup-content p:not(:last-child),.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){margin-bottom:15px}.geoportail-popup-content h5:last-child,.geoportail-popup-content h6:last-child,.geoportail-popup-content p:last-child,.gp-att-description-div:last-child,.gp-att-name-div,.gp-att-others-div:last-child{margin-bottom:10px}.geoportail-popup-content h5:first-child,.geoportail-popup-content h6:first-child,.geoportail-popup-content p:first-child,.gp-att-description-div:first-child,.gp-att-name-div:first-child,.gp-att-others-div:first-child{margin-top:10px}.gp-att-name-div,.gp-features-content-div h5{color:#0b6ba7;font-size:1.2em;font-weight:700;padding-right:35px;text-transform:uppercase}.gp-features-content-div h6{font-size:1.1em}.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){border-bottom:1px dotted #666;padding-bottom:10px}.gpf-radio-btn-group{display:flex;gap:1em}.gpf-btn-icon{caret-color:transparent}[id^=GPdrawingPanel-]{width:240px}.GPshowDrawingPicto{background-position:1px;background-repeat:no-repeat}.GPdrawingPanelClose,.GPshowDrawingPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGCSURBVFiF7da/Sh1BFMfxuXZa2AuWgkoa0SqP4StoUoi2PklyBZXUNlpZWGmq5AmiYghpAv5pAoKW+rFwFq/D3NXdu5fb7K9ahjPnd757Zs9OCK1atWrVlDCHvzjB5KjrGVg49aKfdaHwGdsYK4np4As26lf8diF7XqsyVIR5iPt3c1AR5muMeWwUCrM4wwEmcZhAHVfM1032b6GTwGwlMd0mYS57Eh9loP5UzFkcpV7tYizpTKGdXBebgEmh9vALczVy94NKuzd0mEL7DXjkoEYCA+cDG4VSqOywyKk0CLMhhO8hhKmSsOsQwvL7y35TnXeuVRMm8Bu3JZ25UuOb6eOXGwC1utTPYBXfsIT/GYMbfBgizE5mrT6U5+vMYnz+mHTqCvNDhinGdnakVzWZxj1metYKqMZgYt7h/1ixGTf+wwwWPB+/iyZhotcnL1ef7GhOOvWI9aomP3rexl08fisYb4zktd9a7FTfaRahulirY3AZoTYxPVC1rVq1ajVKPQEmCKhvk/LblAAAAABJRU5ErkJggg==)}.GPdrawingCoords,.GPdrawingLabel{display:inline-block;line-height:20px}.GPdrawingLabel{font-weight:700;width:80px}.GPdrawingCoords{width:110px}.marker-input-radio{display:none}input.marker-input-radio:checked+label{border:1px solid red}.drawing-tool{background-color:#e9edf0;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MjAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA3MjAgNDAiPjxkZWZzPjxjbGlwUGF0aCBpZD0iYiI+PHBhdGggZD0iTTAgODk2aDg5NlYwSDBaIi8+PC9jbGlwUGF0aD48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGQ9Ik0wIDg5Nmg4OTZWMEgwWiIvPjwvY2xpcFBhdGg+PC9kZWZzPjxwYXRoIGQ9Im04Ny40MyAzMi41MjYgNS0xNSAxNSAxMCA1LTIwIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDBiNzk4O3N0cm9rZS13aWR0aDoyIi8+PHBhdGggZD0iTTg1Ljk0MiAzMC4wNjJ2NGg0di00em00LjgyMy0xNC4xMTZ2NGg0di00em0xNC41MjUgOS4xNzJ2NGg0di00em00Ljc3LTE5LjE4djRoNHYtNHoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNlOWVkZjA7c3Ryb2tlLXdpZHRoOjEuNSIvPjxwYXRoIGQ9Im0xMjcuNDMgMzIuNTI2IDUtMTUgMTUgMTAgNS0yMCIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZmZjtzdHJva2Utd2lkdGg6MiIvPjxwYXRoIGQ9Ik0xMjUuOTQgMzAuMDYydjRoNHYtNHptNC44My0xNC4xMTZ2NGg0di00em0xNC41MiA5LjE3MnY0aDR2LTR6bTQuNzctMTkuMTh2NGg0di00eiIgc3R5bGU9ImZpbGw6I2ZmZjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMmE1MDtzdHJva2Utd2lkdGg6MS41Ii8+PGcgc3R5bGU9ImZpbGw6IzAwYjc5ODtmaWxsLXJ1bGU6ZXZlbm9kZCI+PHBhdGggZD0ibTE2OC4zMSAyOS45MzggMy0xOS44NzUgMTQuNzUtMyA1IDI1Ljg3NXoiIHN0eWxlPSJmaWxsLW9wYWNpdHk6LjQ7c3Ryb2tlOiMwMGI3OTg7c3Ryb2tlLXdpZHRoOjIiLz48cGF0aCBkPSJNMTgzLjk0IDUuMDYzdjRoNHYtNHptLTE0Ljc1IDMuMjV2NGg0di00em0tMi44OCAxOS42MjV2NGg0di00em0yMy4zOCAzdjRoNHYtNHoiIHN0eWxlPSJzdHJva2U6I2U5ZWRmMDtzdHJva2Utd2lkdGg6MS41Ii8+PC9nPjxnIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQiPjxwYXRoIGQ9Im0yMDguMzEgMjkuOTM4IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbC1vcGFjaXR5Oi40O3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDoyIi8+PHBhdGggZD0iTTIyMy45NCA1LjA2M3Y0aDR2LTR6bS0xNC43NSAzLjI1djRoNHYtNHptLTIuODggMTkuNjI1djRoNHYtNHptMjMuMzggM3Y0aDR2LTR6IiBzdHlsZT0ic3Ryb2tlOiMwMDJhNTA7c3Ryb2tlLXdpZHRoOjEuNSIvPjwvZz48cGF0aCBkPSJtMjYxLjgxIDMwLjc0LTEuNTUzLTUuMDk4aC03LjgwN2wtMS41NTMgNS4wOThoLTQuODkzbDcuNTYtMjEuNTA0aDUuNTVsNy41OSAyMS41MDR6bS0yLjYzNy04LjkwNnEtMi4xNTMtNi45My0yLjQzLTcuODM3LS4yNjUtLjkwOC0uMzgyLTEuNDM2LS40ODMgMS44NzYtMi43NjggOS4yNzR6IiBzdHlsZT0iZmlsbDojMDBiNzk4Ii8+PGcgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwYjc5OCI+PHBhdGggZD0iTTI3MS41IDMxLjA0di0yMiIvPjxwYXRoIGQ9Ik0yNjkgOC41Nmg1bS01IDIyLjg4aDUiIHN0eWxlPSJzdHJva2Utd2lkdGg6MS4xMTgwMDAwMyIvPjwvZz48dGV4dCB4PSIyODYiIHk9IjMwLjc1MiIgZm9udC1zaXplPSIxMi41IiBsZXR0ZXItc3BhY2luZz0iMCIgc3R5bGU9ImZvbnQtc2l6ZToxMi41cHg7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowO3dvcmQtc3BhY2luZzowO2ZpbGw6I2ZmZiIgd29yZC1zcGFjaW5nPSIwIj4KICAgIDx0c3BhbiB4PSIyODYiIHk9IjMwLjc1MiIgZm9udC1zaXplPSIzMCIgZm9udC13ZWlnaHQ9ImJvbGQiIHN0eWxlPSJmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjMwcHg7Zm9udC1mYW1pbHk6JnF1b3Q7T3BlbiBTYW5zJnF1b3Q7Ij5BPC90c3Bhbj4KICA8L3RleHQ+PGcgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZmZiI+PHBhdGggZD0iTTMxMS41IDMxLjA0di0yMiIvPjxwYXRoIGQ9Ik0zMDkgOC41Nmg1bS01IDIyLjg4aDUiIHN0eWxlPSJzdHJva2Utd2lkdGg6MS4xMTgwMDAwMyIvPjwvZz48cGF0aCBkPSJtMzU2LjY0IDIxLjc4Mi0zLjQxNi0zLjQxNGExLjIxIDEuMjEgMCAwIDAtMS43MDggMGwtLjg1NC44NTRjLS40Ny40Ny0uNDcgMS4yMzUgMCAxLjcwNmwzLjQxNiAzLjQxNGExLjIxIDEuMjEgMCAwIDAgMS43MDggMGwuODU0LS44NTNhMS4yMDcgMS4yMDcgMCAwIDAgMC0xLjcwOG0tMTAuNzE0IDEwLjkzYy0uMDA1IDAtLjAxMi4wMS0uMDIuMDEzLS4wMDQgMC0uMDEuMDEtLjAxNC4wMS0uMDA1IDAtLjAxLjAxLS4wMTYuMDEtLjAwNSAwLS4wMS4wMS0uMDE3LjAxLS4yLjEyLS43ODMuNDI1LTIuMi45MzdxLS4yNDkuMDktLjUzNC4xOWwtMi4wMTQtMi4wMTNjLjA2Ni0uMTkuMTMtLjM3My4xOS0uNTQuNTEtMS40Mi44MTgtMi4wMDQuOTM2LTIuMjAyLjAwMyAwIC4wMDYtLjAxLjAwOC0uMDEzLjAwNC0uMDEuMDA4LS4wMTMuMDEyLS4wMi4wMDMgMCAuMDA2LS4wMS4wMDgtLjAxMnEuMDA4LS4wMTMuMDEzLS4wMmwuMTQ2LS4xNDcgMy42NSAzLjY0Ny0uMTUuMTV6bTMuODgyLTEwLjkzYTEuMjEgMS4yMSAwIDAgMC0xLjcwOCAwbC0uNDI3LjQyNy01Ljk3NyA1Ljk3M2guMDAybC0uMTkuMTg4cy0uNi42MDUtMS45NTYgNC45NzZxLS4wMTUuMDQ0LS4wMjguMDkyLS4wMzcuMTE3LS4wNzQuMjQtLjAzLjEwNi0uMDY2LjIxNmwtLjA1Ni4xODYtLjEzLjQ0Yy0uMDk4LjMzLS4zMzYgMS4wNzQtLjA2NyAxLjM0My4yNi4yNiAxLjAxNC4wMyAxLjM0My0uMDY2bC40MzctLjEzLjE5NC0uMDZxLjEwNC0uMDMuMjA1LS4wNjJsLjI1LS4wNzdxLjAzOC0uMDEzLjA3My0uMDIzYzQuMTY2LTEuMjk1IDQuOTE0LTEuOTAzIDQuOTc2LTEuOTZoLjAwNGwuMTkzLS4xOTIuMDEyLjAxMyA1Ljk3Ny01Ljk3NC40MjctLjQyN2ExLjIwNiAxLjIwNiAwIDAgMCAwLTEuNzA3bC0zLjQxNi0zLjQxNHoiIHN0eWxlPSJmaWxsOiMwMGI3OTgiLz48cGF0aCBkPSJtMzI5IDgtMiAydjE2bDIgMmgxMGw4LThWMTBsLTItMnoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQiLz48ZyBzdHlsZT0iZmlsbDojZmZmIj48cGF0aCBkPSJtMzk2LjY0IDIxLjc4Mi0zLjQxNi0zLjQxNGExLjIxIDEuMjEgMCAwIDAtMS43MDggMGwtLjg1NC44NTRjLS40Ny40Ny0uNDcgMS4yMzUgMCAxLjcwNmwzLjQxNiAzLjQxNGExLjIxIDEuMjEgMCAwIDAgMS43MDggMGwuODU0LS44NTNhMS4yMDcgMS4yMDcgMCAwIDAgMC0xLjcwOG0tMTAuNzE0IDEwLjkzYy0uMDA1IDAtLjAxMi4wMS0uMDIuMDEzLS4wMDQgMC0uMDEuMDEtLjAxNC4wMS0uMDA1IDAtLjAxLjAxLS4wMTYuMDEtLjAwNSAwLS4wMS4wMS0uMDE3LjAxLS4yLjEyLS43ODMuNDI1LTIuMi45MzdxLS4yNDkuMDktLjUzNC4xOWwtMi4wMTQtMi4wMTNjLjA2Ni0uMTkuMTMtLjM3My4xOS0uNTQuNTEtMS40Mi44MTgtMi4wMDQuOTM2LTIuMjAyLjAwMyAwIC4wMDYtLjAxLjAwOC0uMDEzLjAwNC0uMDEuMDA4LS4wMTMuMDEyLS4wMi4wMDMgMCAuMDA2LS4wMS4wMDgtLjAxMnEuMDA4LS4wMTMuMDEzLS4wMmwuMTQ2LS4xNDcgMy42NSAzLjY0Ny0uMTUuMTV6bTMuODgyLTEwLjkzYTEuMjEgMS4yMSAwIDAgMC0xLjcwOCAwbC0uNDI3LjQyNy01Ljk3NyA1Ljk3M2guMDAybC0uMTkuMTg4cy0uNi42MDUtMS45NTYgNC45NzZxLS4wMTUuMDQ0LS4wMjguMDkyLS4wMzcuMTE3LS4wNzQuMjQtLjAzLjEwNi0uMDY2LjIxNmwtLjA1Ni4xODYtLjEzLjQ0Yy0uMDk4LjMzLS4zMzYgMS4wNzQtLjA2NyAxLjM0My4yNi4yNiAxLjAxNC4wMyAxLjM0My0uMDY2bC40MzctLjEzLjE5NC0uMDZxLjEwNC0uMDMuMjA1LS4wNjJsLjI1LS4wNzdxLjAzOC0uMDEzLjA3My0uMDIzYzQuMTY2LTEuMjk1IDQuOTE0LTEuOTAzIDQuOTc2LTEuOTZoLjAwNGwuMTkzLS4xOTIuMDEyLjAxMyA1Ljk3Ny01Ljk3NC40MjctLjQyN2ExLjIwNiAxLjIwNiAwIDAgMCAwLTEuNzA3bC0zLjQxNi0zLjQxNHoiIHN0eWxlPSJzdHJva2U6I2VmZjtzdHJva2Utd2lkdGg6LjAzIi8+PHBhdGggZD0ibTM2OSA4LTIgMnYxNmwyIDJoMTBsOC04VjEwbC0yLTJ6bTkxLjUzIDE1Ljk3Yy0zLjE2IDEuNjMtMS4xNTcgNS41MzQtNC43NCA2LjgwMy0zLjc2MyAxLjMzNC02Ljg5Mi0zLjQ5Mi03LjY3Ni02Ljk2My0uMy0xLjMzMy0uOTItMTIuMzE0IDExLjEzOC0xNC41OTMgOS40MDctMS43NzggMTIuNjU3IDcuODU0IDEyLjcyIDEwLjg5LjA1OCAyLjg5LjM3IDkuMDQtNC40NCA4Ljk2Mi00LjA2LS4wNjYtMy4yMDMtNC4wNjQtNi44OC01LjAzOC0xLjk1Ni0uNTE4LS4xMjItLjA2Mi0uMTIyLS4wNjJ6IiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQiLz48L2c+PGVsbGlwc2UgY3g9IjQ1NC4xOSIgY3k9IjI0LjgxMiIgcng9IjIuNDM4IiByeT0iMi41IiBzdHlsZT0iZmlsbDojMDAyYTUwIi8+PGcgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMmE1MDtzdHJva2Utd2lkdGg6MS43MzU5OTk5NDtzdHJva2UtbGluZWNhcDpyb3VuZCI+PHBhdGggZD0ibTQ1Mi43OCAxOC41NCA0LjM0LTIuNjA0bS0zLjQ4Ljg3NCAyLjYwNC0xLjczNm0tMS43MzQgMy40NjYgMS43MzYtLjg2OE00NjEuNDcgMTcuMTNsNC4zNC0yLjYwNG0tMy40Ny44NjQgMi42MDQtMS43MzZtLTEuNzM0IDMuNDc2IDEuNzM2LS44NjhNNDY0LjkxIDIzLjIybDQuMzQtMi42MDRtLTMuNDguODY0IDIuNjA0LTEuNzM2bS0xLjczNCAzLjQ3NiAxLjczNi0uODY4Ii8+PC9nPjxwYXRoIGQ9Ik00MjAuNTMgMjMuOTdjLTMuMTYgMS42My0xLjE1NyA1LjUzNC00Ljc0IDYuODAzLTMuNzYzIDEuMzM0LTYuODkyLTMuNDkyLTcuNjc2LTYuOTYzLS4zLTEuMzMzLS45Mi0xMi4zMTQgMTEuMTM4LTE0LjU5MyA5LjQwNy0xLjc3OCAxMi42NTcgNy44NTQgMTIuNzIgMTAuODkuMDU4IDIuODkuMzcgOS4wNC00LjQ0IDguOTYyLTQuMDYtLjA2Ni0zLjIwMy00LjA2NC02Ljg4LTUuMDM4LTEuOTU2LS41MTgtLjEyMi0uMDYyLS4xMjItLjA2MnoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQiLz48ZWxsaXBzZSBjeD0iNDE0LjE5IiBjeT0iMjQuODEyIiByeD0iMi40MzgiIHJ5PSIyLjUiIHN0eWxlPSJmaWxsOiNlOWVkZjAiLz48ZyBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZWRlZmYwO3N0cm9rZS13aWR0aDoxLjczNTk5OTk0O3N0cm9rZS1saW5lY2FwOnJvdW5kIj48cGF0aCBkPSJtNDEyLjc4IDE4LjU0IDQuMzQtMi42MDRtLTMuNDguODc0IDIuNjA0LTEuNzM2bS0xLjczNCAzLjQ2NiAxLjczNi0uODY4TTQyMS40NyAxNy4xM2w0LjM0LTIuNjA0bS0zLjQ3Ljg2NCAyLjYwNC0xLjczNm0tMS43MzQgMy40NzYgMS43MzYtLjg2OE00MjQuOTEgMjMuMjJsNC4zNC0yLjYwNG0tMy40OC44NjQgMi42MDQtMS43MzZtLTEuNzM0IDMuNDc2IDEuNzM2LS44NjgiLz48L2c+PGcgY2xpcC1wYXRoPSJ1cmwoI2EpIiBzdHlsZT0iZmlsbDojMDBiNzk4IiB0cmFuc2Zvcm09Im1hdHJpeCguMDI5NzYgMCAwIC0uMDI5MDIgNi42NjcgMzMpIj48cGF0aCBkPSJNNDQ4IDQ0OGMtNjEuNzcyIDAtMTEyIDUwLjIzLTExMiAxMTJzNTAuMjI4IDExMiAxMTIgMTEyYzYxLjc3IDAgMTEyLTUwLjIzIDExMi0xMTJzLTUwLjIzLTExMi0xMTItMTEybTAgNDQ4Yy0xODUuMjggMC0zMzYtMTUwLjcyLTMzNi0zMzYgMC03MC41ODcgMjEuOTU4LTEzOC4zIDYzLjQyNC0xOTUuODlsOC44MTgtMTIuMzYgMjQxLjM2LTM0MC41NEM0MzAuODk4IDQuMTYgNDM5LjIxMiAwIDQ0OC4wMDIgMGEyOC4wMyAyOC4wMyAwIDAgMSAyMi4zOTQgMTEuMjFsMjM4LjM2IDMzNi40OSAxMS43NiAxNi4zYzQxLjUzIDU3LjY5NyA2My40OSAxMjUuNDEgNjMuNDkgMTk2IDAgMTg1LjI4LTE1MC43MiAzMzYtMzM2IDMzNiIvPjwvZz48ZyBjbGlwLXBhdGg9InVybCgjYikiIHN0eWxlPSJmaWxsOiNmZmYiIHRyYW5zZm9ybT0ibWF0cml4KC4wMjk3NiAwIDAgLS4wMjkwMiA0Ni42NjcgMzMpIj48cGF0aCBkPSJNNDQ4IDQ0OGMtNjEuNzcyIDAtMTEyIDUwLjIzLTExMiAxMTJzNTAuMjI4IDExMiAxMTIgMTEyYzYxLjc3IDAgMTEyLTUwLjIzIDExMi0xMTJzLTUwLjIzLTExMi0xMTItMTEybTAgNDQ4Yy0xODUuMjggMC0zMzYtMTUwLjcyLTMzNi0zMzYgMC03MC41ODcgMjEuOTU4LTEzOC4zIDYzLjQyNC0xOTUuODlsOC44MTgtMTIuMzYgMjQxLjM2LTM0MC41NEM0MzAuODk4IDQuMTYgNDM5LjIxMiAwIDQ0OC4wMDIgMGEyOC4wMyAyOC4wMyAwIDAgMSAyMi4zOTQgMTEuMjFsMjM4LjM2IDMzNi40OSAxMS43NiAxNi4zYzQxLjUzIDU3LjY5NyA2My40OSAxMjUuNDEgNjMuNDkgMTk2IDAgMTg1LjI4LTE1MC43MiAzMzYtMzM2IDMzNiIvPjwvZz48cGF0aCBkPSJtNjExLjkzIDExLjkzIDE2LjE0OCAxNi4xNDhtLS4wMDgtMTYuMTQ4LTE2LjE0OCAxNi4xNDgiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZmY7c3Ryb2tlLXdpZHRoOjMuODEzOTk5ODk7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIi8+PHBhdGggZD0ibTU3MS45MyAxMS45MyAxNi4xNDggMTYuMTQ4bS0uMDA4LTE2LjE0OC0xNi4xNDggMTYuMTQ4IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDBiNzk4O3N0cm9rZS13aWR0aDozLjgxMzk5OTg5O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZCIvPjxwYXRoIGQ9Im00ODcgMzAuMDQgMS4wMDQtNkw0OTMgMjkuMDN6IiBzdHlsZT0iZmlsbDojMDBiNzk4O2ZpbGwtcnVsZTpldmVub2RkIi8+PGcgc3R5bGU9ImZpbGw6IzAwYjc5OCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQ4IC05NzIuMzYpIj48Y2lyY2xlIGN4PSI1NDEiIGN5PSI5ODcuMzYiIHI9IjUiLz48Y2lyY2xlIGN4PSI1NTUiIGN5PSI5ODcuMzYiIHI9IjUiLz48Y2lyY2xlIGN4PSI1NTUiIGN5PSI5OTYuMzYiIHI9IjUiLz48cmVjdCB3aWR0aD0iMTQiIGhlaWdodD0iMTEiIHg9IjU0MSIgeT0iOTgyLjM2IiByeD0iMCIgcnk9IjAiLz48cGF0aCBkPSJNNTUwIDk4Ny4zNmgxMHY5aC0xMHoiLz48cGF0aCBkPSJNNTQ0IDk5My4zNmgxMXY4aC0xMXptLTgtNmg3djZoLTd6Ii8+PHBhdGggZD0ibTUzNiA5OTMuMzYgOCA4di04eiIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkIi8+PC9nPjxwYXRoIGQ9Ik00OTMgMTRoMTV2MWgtMTV6bTAgNGgxNXYxaC0xNXptMyA0aDEydjFoLTEyeiIgc3R5bGU9ImZpbGw6I2VkZWZmMCIvPjxwYXRoIGQ9Im01MjcgMzAgMS4wMDQtNkw1MzMgMjguOTl6IiBzdHlsZT0iZmlsbDojZmZmO2ZpbGwtcnVsZTpldmVub2RkIi8+PGcgc3R5bGU9ImZpbGw6I2ZmZiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTggLTk3Mi4zNikiPjxjaXJjbGUgY3g9IjU0MSIgY3k9Ijk4Ny4zNiIgcj0iNSIvPjxjaXJjbGUgY3g9IjU1NSIgY3k9Ijk4Ny4zNiIgcj0iNSIvPjxjaXJjbGUgY3g9IjU1NSIgY3k9Ijk5Ni4zNiIgcj0iNSIvPjxyZWN0IHdpZHRoPSIxNCIgaGVpZ2h0PSIxMSIgeD0iNTQxIiB5PSI5ODIuMzYiIHJ4PSIwIiByeT0iMCIvPjxwYXRoIGQ9Ik01NTAgOTg3LjM2aDEwdjloLTEweiIvPjxwYXRoIGQ9Ik01NDQgOTkzLjM2aDExdjhoLTExem0tOC02aDd2NmgtN3oiLz48cGF0aCBkPSJtNTM2IDk5My4zNiA4IDh2LTh6IiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQiLz48L2c+PHBhdGggZD0iTTUzMyAxNGgxNXYxaC0xNXptMCA0aDE1djFoLTE1em0zIDRoMTJ2MWgtMTJ6IiBzdHlsZT0iZmlsbDojMDAyYTUwIi8+PHBhdGggZD0ibTY0OC45MjggMjkuNjM1IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbDojMDBiNzk4O2ZpbGwtb3BhY2l0eTouNDtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwYjc5ODtzdHJva2Utd2lkdGg6MiIvPjxnIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQiPjxwYXRoIGQ9Im0yMDguMzEgMjkuOTM4IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbC1vcGFjaXR5Oi40O3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDoyIiB0cmFuc2Zvcm09Im1hdHJpeCguNDg0NzYgMCAwIC40NTk4OSA1NTMuMjgzIDEwLjkzKSIvPjxwYXRoIGQ9Ik0yMjMuOTQgNS4wNjN2NGg0di00em0tMTQuNzUgMy4yNXY0aDR2LTR6bS0yLjg4IDE5LjYyNXY0aDR2LTR6bTIzLjM4IDN2NGg0di00eiIgc3R5bGU9InN0cm9rZTojMDAyYTUwO3N0cm9rZS13aWR0aDoxLjUiIHRyYW5zZm9ybT0ibWF0cml4KC40ODQ3NiAwIDAgLjQ1OTg5IDU1My4yODMgMTAuOTMpIi8+PC9nPjxwYXRoIGQ9Ik02NjEuODU1IDEzLjIxOHYxLjg0NmgxLjk0MXYtMS44NDZ6bS03LjE2IDEuNXYxLjg0N2gxLjk0MnYtMS44NDd6bS0xLjM5OCA5LjA1OXYxLjg0NmgxLjk0MnYtMS44NDZ6bTExLjM0OSAxLjM4NHYxLjg0N2gxLjk0MVYyNS4xNnoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNlOWVkZjA7c3Ryb2tlLXdpZHRoOi43MDk5OTU5MyIvPjxnIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQiPjxwYXRoIGQ9Im0yMDguMzEgMjkuOTM4IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbC1vcGFjaXR5Oi40O3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDoyIiB0cmFuc2Zvcm09Im1hdHJpeCguNDg0NzYgMCAwIC40NTk4OSA1OTEuMjgyIDEwLjk0NCkiLz48cGF0aCBkPSJNMjIzLjk0IDUuMDYzdjRoNHYtNHptLTE0Ljc1IDMuMjV2NGg0di00em0tMi44OCAxOS42MjV2NGg0di00em0yMy4zOCAzdjRoNHYtNHoiIHN0eWxlPSJzdHJva2U6IzAwMmE1MDtzdHJva2Utd2lkdGg6MS41IiB0cmFuc2Zvcm09Im1hdHJpeCguNDg0NzYgMCAwIC40NTk4OSA1OTEuMjgyIDEwLjk0NCkiLz48L2c+PC9zdmc+);background-size:720px 40px;border:unset;border-radius:10px;cursor:pointer;display:block;height:40px;width:40px}.drawing-tool-active{background-color:#002a50}button[id^=drawing-tool-point-]{background-position:0 0}button[id^=drawing-tool-point-].drawing-tool-active{background-position:-40px 0}button[id^=drawing-tool-line-].drawing-tool-active{background-position:-120px 0}button[id^=drawing-tool-line-]{background-position:-80px 0}button[id^=drawing-tool-holes-]{background-position:-640px 0}button[id^=drawing-tool-holes-].drawing-tool-active{background-position:-680px 0}button[id^=drawing-tool-polygon-]{background-position:-160px 0}button[id^=drawing-tool-polygon-].drawing-tool-active{background-position:-200px 0}button[id^=drawing-tool-text-]{background-position:-240px 0}button[id^=drawing-tool-text-].drawing-tool-active{background-position:-280px 0}button[id^=drawing-tool-edit-]{background-position:-320px 0}button[id^=drawing-tool-edit-].drawing-tool-active{background-position:-360px 0}button[id^=drawing-tool-display]{background-position:-400px 0}button[id^=drawing-tool-display-].drawing-tool-active{background-position:-440px 0}button[id^=drawing-tool-tooltip]{background-position:-480px 0}button[id^=drawing-tool-tooltip-].drawing-tool-active{background-position:-520px 0}button[id^=drawing-tool-remove]{background-position:-560px 0}button[id^=drawing-tool-remove-].drawing-tool-active{background-position:-600px 0}div.drawing-tools-flex-display{justify-content:space-between}button[id^=drawing-export-]{background-position:2px 0}.drawing-button{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMCAxMjAiPjxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwYjc5OCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjMiPjxwYXRoIGQ9Ik02ODggMzI2LjR2OGgyMHYtOG0tMTAtMTR2MTQiIHRyYW5zZm9ybT0ibWF0cml4KC42MDg2IDAgMCAuNTU5NSAtNDA5LjggLTEzNikiLz48cGF0aCBkPSJtNjkzIDMyMS40IDUgNSA1LTUiIHRyYW5zZm9ybT0ibWF0cml4KC42MDg2IDAgMCAuNTU5NSAtNDA5LjggLTEzNikiLz48L2c+PGcgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUwNSAtODU3LjQpIj48cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxNCIgeD0iNTEzIiB5PSI5MjUuNCIgcng9IjAiIHJ5PSIwIi8+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iOCIgeD0iNTE0IiB5PSI5MjUuNCIgcng9IjAiIHJ5PSIwIi8+PHBhdGggZD0iTTUxNSA5MzAuNGgxdjNoLTF6bTEgMWg4djJoLTh6Ii8+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTQiIHg9IjUyNiIgeT0iOTI1LjQiIHJ4PSIwIiByeT0iMCIvPjxwYXRoIGQ9Ik01MjUgOTI1LjRoMXY4aC0xem0tMSA1aDF2M2gtMXptLTkgNGgxMHYyaC0xMHptNSAyaDV2M2gtNXptLTMgMWgydjJoLTJ6bS0yLTFoMXYzaC0xem00LTExaDV2NWgtNXptLTMgM2gzdjJoLTN6bTAtM2gxdjNoLTF6bTEgMGgydjFoLTJ6Ii8+PC9nPjxnIGZpbGw9IiMwMGI3OTgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01NDAgLTgyNy40KSI+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTQiIHg9IjU0OCIgeT0iOTI1LjQiIHJ4PSIwIiByeT0iMCIvPjxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjgiIHg9IjU0OSIgeT0iOTI1LjQiIHJ4PSIwIiByeT0iMCIvPjxwYXRoIGQ9Ik01NTAgOTMwLjRoMXYzaC0xem0xIDFoOHYyaC04eiIvPjxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjE0IiB4PSI1NjEiIHk9IjkyNS40IiByeD0iMCIgcnk9IjAiLz48cGF0aCBkPSJNNTYwIDkyNS40aDF2OGgtMXptLTEgNWgxdjNoLTF6bS05IDRoMTB2MmgtMTB6bTUgMmg1djNoLTV6bS0zIDFoMnYyaC0yem0tMi0xaDF2M2gtMXptNC0xMWg1djVoLTV6bS0zIDNoM3YyaC0zem0wLTNoMXYzaC0xem0xIDBoMnYxaC0yeiIvPjwvZz48ZyBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIzIj48cGF0aCBkPSJNNjg4IDMyNi40djhoMjB2LThtLTEwLTE0djE0IiB0cmFuc2Zvcm09Im1hdHJpeCguNjA4NiAwIDAgLjU1OTUgLTQwOS44IC0xNjYpIi8+PHBhdGggZD0ibTY5MyAzMjEuNCA1IDUgNS01IiB0cmFuc2Zvcm09Im1hdHJpeCguNjA4NiAwIDAgLjU1OTUgLTQwOS44IC0xNjYpIi8+PC9nPjwvc3ZnPg==);background-size:30px 120px;font-size:.7em;height:30px;line-height:30px;margin:auto;padding-left:30px;padding-right:15px}.tool-form-submit{background-color:#00b798;border:none;border-radius:20px;color:#fff;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:.9em;text-align:center;text-transform:uppercase}.gp-label-div,.gp-styling-div{background-color:#fff;border:unset;border-radius:10px;box-shadow:0 0 5px #000;box-sizing:border-box;font-size:.75em;position:relative;top:17px}.gp-label-div:before,.gp-styling-div:before{border-bottom:15px solid #fff;border-left:10px solid transparent;border-right:9px solid transparent;content:"";left:50%;margin-left:-10px;position:absolute;top:-15px}.gp-input-label-style,.gp-textarea-att-label-style{border:none}.gp-textarea-att-label-style{height:80px;resize:none;width:240px}.gp-input-measure-style{background-color:#fff;border-radius:10px;font-size:.75em;text-align:center;width:240px}.gp-textarea-att-label-style{display:block}.gp-label-div .closer{background-color:#fff;border-top-right-radius:10px}.gp-input-label-style{width:180px}.gp-label-div{padding:10px}.gp-styling-div{padding:50px 20px 20px;width:340px}.gp-styling-div:after{border-bottom:1px solid #bbb;content:"Modifier le style";display:block;font-size:1.2em;font-variant:small-caps;font-weight:700;height:30px;left:30px;line-height:30px;position:absolute;text-align:center;top:0;width:280px}.gp-label-div .gp-styling-button:not([class*=closer]){display:block;margin:10px auto auto}.gp-styling-button:not([class*=closer]){background-color:#00b798;border:none;border-radius:12px;color:#fff;display:inline-block;font-size:.9em;font-weight:700;height:24px;line-height:24px;margin-top:20px;text-align:center;text-transform:uppercase;width:140px}.gp-styling-button:not([class*=closer]):hover{background-color:#eef2f5;color:#00b798}.gp-styling-button:not([class*=closer])+.gp-styling-button:not([class*=closer]){margin-left:20px}.gp-label-div .closer,.gp-styling-div .closer{background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwYjc5OCIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:14px 14px;border:none;cursor:pointer;display:block;height:30px;position:absolute;right:0;top:0;width:30px}.gp-styling-option{font-size:11px;line-height:30px;padding:0 20px;position:relative}.gp-styling-option input{cursor:pointer;display:block;height:20px;padding:0;position:absolute;top:6px}.gp-styling-option input[type=checkbox]{background:none;border:none;height:10px;padding:0;right:70px}.gp-styling-option input[type=color]{background:none;border:none;padding:0;right:70px;width:30px}.gp-styling-option input[type=text]{background:none;border:1px solid grey;color:#0b6ba7;margin:none;padding:0 5px;right:40px;width:80px}.gp-styling-option input[type=range]{margin:0;right:40px;width:80px}.gp-styling-option input[type=range]:focus{box-shadow:none;outline:none}.gp-styling-option input[type=range]::-webkit-slider-runnable-track{-webkit-appearance:none;background-color:grey;height:1px}.gp-styling-option input[type=range]::-webkit-slider-thumb:before{height:1px;left:-200px;pointer-events:none;position:absolute;right:50%;top:0}.gp-styling-option input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background-color:#0b6ba7;border:none;border-radius:50%;height:13px;position:relative;top:-6px;width:13px}.gp-styling-option input[type=range]::-moz-range-track{background-color:grey;height:1px;width:70px}.gp-styling-option input[type=range]::-moz-range-thumb{background-color:#0b6ba7;border:none;border-radius:50%;box-shadow:0;height:13px;position:relative;width:13px}.gp-styling-option input[type=range]::-ms-track{background-color:grey;border:0;border-color:transparent;border-radius:0;border-width:0;color:transparent;height:1px;width:70px}.gp-styling-option input[type=range]::-ms-fill-lower,.gp-styling-option input[type=range]::-ms-fill-upper{background:transparent;border-radius:0}.gp-styling-option input[type=range]::-ms-thumb{background-color:#0b6ba7;border:none;border-radius:50%;height:13px;width:13px}.gp-styling-option input[type=range]::-ms-tooltip{display:none}.gp-styling-option .marker-input-radio{display:none}.gp-styling-option .marker-label{cursor:pointer;display:inline-block;height:32px;margin-bottom:5px;margin-right:5px;padding:3px}.gp-styling-option .marker-input-radio:checked+.marker-label{background-color:rgba(0,183,152,.5);border:1px solid #002a50;padding:2px}.gp-styling-option .marker-label img{height:24px}.ol-attribution .gp-control-attribution-image{max-height:30px;max-width:inherit;vertical-align:middle}.GPpanelHeader{padding:unset}[id^=GPelevationPathPanelClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAAAaCAYAAABb9hlrAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH4gEQEjITjE0MtwAABGJJREFUaN7tmU1oHGUYx//PZEvSLjHVBLVaerCXSgo5tAqxiqBSxcSLWqknFaNdaYjiwUMOVVGi2EORJg0xtgbx0FKVgmirRU17SUpjPsCVUhQtVOr6ES8mmpqdnwffhekw2dndbMK23T8MzMzzzsz7PP/3+ZjnlaqooooqrlhY7gSol3Rr7tLMTlfNs3gAJqnGncvMJMk3M7+Q5xOB8zsl9Ui6XtI/ktZXzVs6MpmMNTU1rZa0SdJNknLkSNI0MCrpTzPLFkSQmR0FspIGJb1UNXHpHjM3N9dUW1t7u6QHJW2V9KukPyQhqcEt/i8lHctms8Oe5/0WR5SAW4AfgWGgC1ixjEo9AwwAXj7Fgb1AZ6WSMzk56QGbgQPA98AUsBvYAKwCVgJrgV3AKeAccAi4f3x8vCbOSA8AB91xGEguIzlZ/sdgFEmOnF43xq9UkoBrgD7gZ+B13/c3u/uPAG8AbwEdkpTNZjcCLwJngE+AtYV8YEW+VbxESvVxKfa5xBokZ19oTF+lkTMzM+MB9wJngT0hHT8KzP2bkGwHcB54Ktb2wNtAb5EGbgAaFhOzXegKYhDwQp6TwzvLvYgK1CPpwtkZYEtI9iowCowBAyHZeuCEi1pr4j4yBBwscmK7gZ7FJtYFSOq7TMgx4A7gB6AvnU5bSF4H1LtjVVCWSqUMeN550eN59SuWIMf+HDAL3LwEJC0bOSPdCRvpTljwOiT3RroTdQvM3QPanYfcFiHvAj4GjgCvLWDHT4EX8hZnUQQBCRf6tkWMD8bW/WVaiVEkDZZKDmWCI6kmD0FtwNfAugXsetG96qsIeSPwfhRBXoxy10n6XFKXpEPAy7kEDtwl6eHA8CeA5nJ2N2LuxXrEEjiaX2a9YpHvv2ODpFOS7gl84BVHVFLSntAjNZLeXGRLZK+knRHipyUNFONFrT3zlDsExhjZJNVLuqGE16+W1BjX6rmk3JY06v56w9gmaUuufRFCO3C3mZ0oAzmDki4G7nXkytJC+lgj3Qlr7ZnHzIK5JW4V09ozz0h3Yo0zdJOk3yVlHOELkY6kaUnXSnoynU6PNTc3F7RAUqmUSWqX1CLpA0nZ2Bzkqo5ScbKEvBNZSucrwS+zMnsI+DcqB8WV2Uuh6Loix/eGPKdf0g4z880Ml//6A/IO520VhdnZ2b8lHXM2fTQkrg1Eq3AleJ/rzX0mKVNQiFtmTLjk67mw1umIyTVxAXY61+904eS7SiMomUz6wGlJxyU9BswARzzPG5P0oaSfXJ4+m2v1eJ63VdKzzgbHo0J3Ik9MPVfiXM8XVdqYvety3sYwOSGSuhyJ35pZfyX24qampv5qaWl5T9JKSdvN7CHgC0n7JR11dm0Edklqk3Sjy/UHJiYmLsSWfsCQpDoz264qSq5Gi9lu8H0/73ZDmKCTrpq4UI65SnrOzIavRqJyG3ae522KqHinnefEbtiFCWpzJXSmTD91h83sl6vdo7SILe8qqqiiiisY/wFFCbN/sRPwgwAAAABJRU5ErkJggg==);background-position:-27px;background-repeat:no-repeat}[id^=GPelevationPathProfil]{height:150px;width:inherit}[id^=GPelevationPathProfil]>#profileElevationByDefault>svg{left:10px;position:absolute}div[id^=GPelevationPathInformationsContainer]{background-color:hsla(0,0%,100%,.9);border-radius:4px;bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:32px}#profileElevationRaw{padding:unset;resize:none}#profileElevationByDefault{display:-webkit-flex;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%}.altiPathValue{font-weight:700;fill:#5e5e5e}.altiPathCoords{font-style:italic;fill:#5e5e5e}.axis-d3>text{fill:#5e5e5e;font-family:Verdana;font-size:10px;opacity:1;text-anchor:end}.axis-d3{fill:none;stroke:#5e5e5e;stroke-width:1;shape-rendering:crispEdges}.area-d3{fill:#c77a04;stroke:#5e5e5e;stroke-width:0;fill-opacity:.4}.line-d3{fill:none;stroke:#c77a04;stroke-width:1px}.grid-d3 .tick{stroke:#d3d3d3;opacity:.7}.grid-d3 path{stroke-width:0}.overlay-d3{fill:none;pointer-events:all}.focusLine-d3{fill:none;stroke:#c77a04;stroke-width:.5px}.focusCircle-d3{fill:#c77a04}div.tooltip-d3{background:#fff;border:0;border-radius:8px;font:8px sans-serif;height:45px;padding:5px;pointer-events:none;position:inherit;text-align:left;width:80px}[id^=GPelevationPathPanel-]{width:280px}[id^=GPelevationPathPanelInfo]{background-position:-75px}[id^=GPelevationPathPanelInfo],button[id^=GPshowElevationPathPicto-]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAAAaCAYAAABb9hlrAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH4gEQEjITjE0MtwAABGJJREFUaN7tmU1oHGUYx//PZEvSLjHVBLVaerCXSgo5tAqxiqBSxcSLWqknFaNdaYjiwUMOVVGi2EORJg0xtgbx0FKVgmirRU17SUpjPsCVUhQtVOr6ES8mmpqdnwffhekw2dndbMK23T8MzMzzzsz7PP/3+ZjnlaqooooqrlhY7gSol3Rr7tLMTlfNs3gAJqnGncvMJMk3M7+Q5xOB8zsl9Ui6XtI/ktZXzVs6MpmMNTU1rZa0SdJNknLkSNI0MCrpTzPLFkSQmR0FspIGJb1UNXHpHjM3N9dUW1t7u6QHJW2V9KukPyQhqcEt/i8lHctms8Oe5/0WR5SAW4AfgWGgC1ixjEo9AwwAXj7Fgb1AZ6WSMzk56QGbgQPA98AUsBvYAKwCVgJrgV3AKeAccAi4f3x8vCbOSA8AB91xGEguIzlZ/sdgFEmOnF43xq9UkoBrgD7gZ+B13/c3u/uPAG8AbwEdkpTNZjcCLwJngE+AtYV8YEW+VbxESvVxKfa5xBokZ19oTF+lkTMzM+MB9wJngT0hHT8KzP2bkGwHcB54Ktb2wNtAb5EGbgAaFhOzXegKYhDwQp6TwzvLvYgK1CPpwtkZYEtI9iowCowBAyHZeuCEi1pr4j4yBBwscmK7gZ7FJtYFSOq7TMgx4A7gB6AvnU5bSF4H1LtjVVCWSqUMeN550eN59SuWIMf+HDAL3LwEJC0bOSPdCRvpTljwOiT3RroTdQvM3QPanYfcFiHvAj4GjgCvLWDHT4EX8hZnUQQBCRf6tkWMD8bW/WVaiVEkDZZKDmWCI6kmD0FtwNfAugXsetG96qsIeSPwfhRBXoxy10n6XFKXpEPAy7kEDtwl6eHA8CeA5nJ2N2LuxXrEEjiaX2a9YpHvv2ODpFOS7gl84BVHVFLSntAjNZLeXGRLZK+knRHipyUNFONFrT3zlDsExhjZJNVLuqGE16+W1BjX6rmk3JY06v56w9gmaUuufRFCO3C3mZ0oAzmDki4G7nXkytJC+lgj3Qlr7ZnHzIK5JW4V09ozz0h3Yo0zdJOk3yVlHOELkY6kaUnXSnoynU6PNTc3F7RAUqmUSWqX1CLpA0nZ2Bzkqo5ScbKEvBNZSucrwS+zMnsI+DcqB8WV2Uuh6Loix/eGPKdf0g4z880Ml//6A/IO520VhdnZ2b8lHXM2fTQkrg1Eq3AleJ/rzX0mKVNQiFtmTLjk67mw1umIyTVxAXY61+904eS7SiMomUz6wGlJxyU9BswARzzPG5P0oaSfXJ4+m2v1eJ63VdKzzgbHo0J3Ik9MPVfiXM8XVdqYvety3sYwOSGSuhyJ35pZfyX24qampv5qaWl5T9JKSdvN7CHgC0n7JR11dm0Edklqk3Sjy/UHJiYmLsSWfsCQpDoz264qSq5Gi9lu8H0/73ZDmKCTrpq4UI65SnrOzIavRqJyG3ae522KqHinnefEbtiFCWpzJXSmTD91h83sl6vdo7SILe8qqqiiiisY/wFFCbN/sRPwgwAAAABJRU5ErkJggg==);background-repeat:no-repeat}button[id^=GPshowElevationPathPicto-]{background-position:1px}div[id^=GPexportContainer-]{padding:5px}div[id^=GPexportContainer-]>input.GPsubmit{color:#fff}input[id^=GPexportButton-]{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxMy45OTkiIGhlaWdodD0iMTMuOTg4IiB2aWV3Qm94PSItMSAtMSA1LjcwNSA1LjciPjxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjMiPjxwYXRoIGQ9Ik02ODggMzI2LjR2OGgyMHYtOG0tMTAtMTR2MTQiIHRyYW5zZm9ybT0ibWF0cml4KC4xNjEwMyAwIDAgLjE0ODAzIC0xMTAuNTQ0IC00Ni4wMjQpIi8+PHBhdGggZD0ibTY5MyAzMjEuNCA1IDUgNS01IiB0cmFuc2Zvcm09Im1hdHJpeCguMTYxMDMgMCAwIC4xNDgwMyAtMTEwLjU0NCAtNDYuMDI0KSIvPjwvZz48L3N2Zz4=);background-repeat:no-repeat;background-size:25px 25px;min-width:fit-content;padding-left:25px;padding-right:5px}.GPexportMenuHidden{visibility:hidden}.GPexportMenuContainer{display:inline-block;position:relative}.GPexportMenuContent{border-radius:10px;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);display:none;min-width:80px;padding:8px;position:absolute;z-index:1}.GPexportMenuContent,.GPexportMenuContent a:hover{background-color:#f1f1f1}.GPexportMenuContainer:hover .GPexportMenuContent{display:block}.GPexportMenuContent .container{cursor:pointer;display:block;font-size:14px;margin-bottom:5px;padding-left:15px;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.GPexportMenuContent .container input{cursor:pointer;height:0;opacity:0;position:absolute;width:0}.GPexportMenuContent .checkmark{background-color:#eee;border-radius:50%;height:12px;left:0;position:absolute;top:0;width:12px}.GPexportMenuContent .container:hover input~.checkmark{background-color:#ccc}.GPexportMenuContent .container input:checked~.checkmark{background-color:#366291}.GPexportMenuContent .checkmark:after{content:"";display:none;position:absolute}.GPexportMenuContent .container input:checked~.checkmark:after{display:block}.GPexportMenuContent .container .checkmark:after{background:#fff;border-radius:50%;height:4px;left:4px;top:4px;width:4px}button[id^=GPgetFeatureInfoPicto][aria-pressed=true]{background-position:1px;background-repeat:no-repeat}button[id^=GPgetFeatureInfoPicto]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAVgnpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHja7Zpbchy9joTfuYpZQvFOLofXiLODWf58yapuS7Jsn/94Yp5GCkvtVjULBBKJBFhm/fe/tvkvvlJwxYSYS6opXXyFGqprvCjX/dXOT3uF8/N8+fD8zX5+39j2/MHxlteV939Leq5/vW/fC9y/Gq/ih4XKeP7QP/+hPnd25ctCz428LHK8mM9C9VnIu/sP9lmgPZamWvLHLfR1/34+f7uBf0Y/+uvd+Fz85f8h470ZuY93bnnrL356/xjg9S8Y33jh+ak/Y7CPvHavn48lcuQ3fnp/VSzaMjV8e9GnqLxffYnWK8Dma7SCey7xX5yc3r+/fd/Y+H1Ujus/3DmU55X7/P5YNt8WffG+/u09yz57ZhctJFydnk29tnhecV3nFrp1MZiWrsy/yBL5fFe+C6geQGFe4+p8D1utIx7bBjtts9uu83vYgYnBLeMyL5wbzp83i8+uuuEVv6Bvu1321U9fiOI4YQ/evW2x57b1GubcrXDnabnUWRazfOQff5t/+oG9lQrWypfl9hV2OSdnY4Yip59cRkTsfpwaj4Nf31+/FFdPBKO8rBSpOLbfS/RofzCBP4H2XBj5feegzfNZABdx64gx1hMBokZW2GSv7Fy2FkcWAtQwnQRynQjYGN3ESBe8T8SmON2aj2R7LnXR8bbhfciMSESffCY21TeCFUIEPzkUMNSijyHGmGKOJdbYkk8hxZRSTiLFln0OJseccs4l19yKL6HEkkoupdTSqqse0ow11VxLrbU17tlYufHpxgWtddd9Dz2annrupdfeBvAZYcSRRh5l1NGmm37CHzPNPMussy27gNIKK6608iqrrraB2vZmhx132nmXXXd7R+0J60/f/yBq9omaO5HShfkdNd7N+bWEFZ1ExYyAORMsEc8KAYB2itlVbAhOkVPMrurIiugwMipm0ypiRDAs6+K2r9gZd0dUkfuruJkcPsXN/aeRMwrdP4zcz3H7LmpTZWiciN1ZKKdenuzj76tgThC022JBx/1zaaG2XE0cLmQ7Uou1znJXuUXlzmXEU4hihpM2GcM7nqVimNlvpXWcPu8Nb+U9yP664L3dLP4cYMDmMHXZCBQ3PvH/C/2fLhSqH5BfmyN0cAL5UTT4vFSZrzaAR9jUAIriBz+3La0s+Lw54RkTUm+9lDbXXKRQqitS8+zItlXlhjsV1lcXsMWaQEWYNs5L9j3msdhjIJbdJmLg7zdo0IR27L9fyshZ/xtLmdvvf7+UeYXwb5cyP9DwWqohvPuyG0KCKEaMLQTbeBdWgwrzqLlfLU6L2GgpQM4oJGu2m8X2kObYgKK03SjvC6xkmEn4ytC5y2md+5YFJcBUNmjVhRS40mq92WX6BGndpgI6YLgizHVIx/o+OwiJbkBhNqK8tBvV6R6ourotu4qjAlz2Ya5cLJsNaCd2tNdw8CWW+Jg6TLdA61WxKV57+CirWLXzApnFihZSnLLPjIyFYbP30trMI8flrJhvW7e6x8kWbkZ9CdJzj9bgaRfT0y3wYyS6A2/W8M31RYrsEtYeSUFBi8WFQfKKtxULuQt2s18yKW9kWW4rIzNHSrpqOdNYbc39by62mh8+p7lt6kMBJigEZLVp2opztoHtFKy9ewqDyqSuCCRRT1GEeWU5I3bAsf0BmsUyYkoZ6TdnLEPh4J6s2agkiwvKpGKlSkTyptRRfkJOBMD6MT0YSOvyVPZg3ciXI2rUi9wi0i/PIPoah7/oK+a+QZv6DdrkhVjF+DBYzm/Ut/1CfRlGsI9C2exa7lxCBuy1KeG7xA4QVtwTwFKOo8t19wU3Ie18h5PoZ4DhCkb6nvLX1lIQ5XB7M2QNHgSoCYhp4eqQesRCZWNZJ1IHezhb2MsmHvA1gY/K2tuFWGQHWoYYn2X4xTJtvpb5FsAGBL8AQKKV7Ue6EUqy7rL6CD6B3uWo/skW52ZY5I0vC0xVFAoaqI3T1Hih1J8KjUzIb7//5PXr8ftnrz8+N1suv73ywed/XCrOANusCYxnLr3j7IpDg58k4ui9R4jCX114GbXsi1i4kIgKWOH+Y8kPPSsR0olwCR7LqizaU3m+C4uBVX5GgkIibKU3IGwLFyGBuFNZyCTFvCWCNQeaEdc67n6Z0KtXrxcI2m4VBbTrRUJZBznSlhUUU9/9UoXMCKqF3X5wq1LZECyB3INJtqlXykC+I+NinjEv20rabXbienOsrddqFL+KQs1qJ33ulv9IerH/ObRWNeQKFIfOgp3oGO260wE+Qm5dq3dl18lHLoEToVllvaIhwiIIyx3yt9TifPxXA2YVwYSmp/k5aQ0QzynxOxFtZPD5JugOxfkFv+YzgGGhP0AYy35geBeYOJ/PmUPGQRuAipvegoyn9OmU/cIv71UHK6HP8Xqb3HGVmTBJslYZgXGmrwIHXVE5cOFLTJ1w2EI/z1U7AOxwtvNwH4I8VDqGuF1zhMBiT0HIeEKZDIQV3J7kF+wIfCas1ubNTGFXj6t7KBD0aGwPOuk+tytNoOcJuK0jwW8NQCo5vD+eR5ifJaqKM/AXwdK3ZAs4KYsE45oI64Cmr438OjZTZNjJML0EquOm5+gO/QT5T6pMHWj7kEitOjBnkhHhgoVVdWPukRv128kTFaC8MWO//LWPq9dVFU5nJ60XWo2sC82Fhmlt32VbTncBnnBartzLmVJdn9ffsWO8ie3v2VHAMl+Q9YbVXePbqfFfYPUGFR3nG1bmC67+Y1iZL7j6Jaz+BCrzCVXqym5Q3ZCqt3j/ASlCvzvUoJqKMOhXH2WPAQ0hIuqyFY5BQKHYLOiUnq8Xl7YOtxz9vyA43ik5DwKbZM81eXtk/oP9OZu1m6gK6YfTO3+xZQ4oBP5tNAEiYSwoR5XALwshiuuV5Np8nkjEviE3Uzvd6ZrTuZbnGsgmVs0tnyDQK0sG0Yosl2+qp9d1NvmbJ8pj0/b0tNlC7rX2nNQNIyAv7yvuW3UuGYXbfrDOL0gHv9Ou/5ZzhAy47CUln6UkJh8peZaiwBiAxlI48rUUhfMsdWee1BI2dRTV71PIRNXWKJr4VRaRRGRiPeLA3fWR8MH9SC/yqiCpl8Wii3uiuRfAwyfI9At/bWqXKqumjJ0wRmqXBS19ox7Icvfwyp0oYhYTDqUdNoBaoAJMvXPlRUD3hXHe1+VzHTIFt+3S/fLIgD4ug1Nw2ow+9OLm6RM7f8mJqISUosrZpNlM8N6ggWAl9E6NfkQwwRLbZrqWBSARDwgh2ozF3pDNgU4D2kRwasJknRSmnWJB+5EDvzCguZuVTyT42vlDgu+N/8yB7/BR114RVGn8RIM/he+Uxl+yoPn7Gnuj3fx1jaUobeGIzwSpY6SgA2coI/or2oBa6edW3ddwtB6wmEMFovWLW1BORPYguehblkdRQXZGsuoJQFwfShCSnG5yvyYKRBYV06JPZQIYDI9gJBYUTncgo5nlfIRuXaNfhcuvTI84UtD0jCWy6EN89DBa5D6wp38YDUfutY72MjAaFvbSDqMhnGC0FYBZpfPsqFfaTZQjfQG5PgN0ECLqaGL/VaxW2djjxNkowd2pDzo5mI1+lVJwLQ388IkmjZuGthSazgt7TqOE/4dfCD7sCiFHNKWBwgbrIlyXPi2gZ81pbkhckNiRgEUMtO0jAUm+hrio6tTcHVsTPB35JghEtoaAxUVS8sUrv4Hl+oQk8z1xng78t8D82IJrKfMdcT5d+J9g+Yk3zS+0xzPNuusarPQmY7r7m4zVPR0ybhBjQUMe0+788+NRIa4dFRKdCD1c+HXsqs6ahp0GpynV+rFXSN+awBo/HUxKizRpggHvBIiRcnvZq4w9IGckXgblmTrdSXCPtMDtEHD0Eex0jaGHM27UHL0bocV+hXXZ5FADbGLQKDSy5WkEj2+KzR8aQdvEp9M7NYLmdIIaL88ywpnU+vQe1eaR69tRivRHWKGgBKwHVubGlVpuJwn1B1j9olxJ1rxx9Qut9gdQvSFl/p2xzu9F3w0o078h8s88fiAVaZtxNVRIzrJR8a2uhEB8opJOU6RvUH0wBRIMiUQ4AQqsg+7Ldmrcg1eLzy9Kwbc0gNcHSqG8oI/AUXs4hUYMYdNpQQ+lsGc8M6woZTdARWHDDYit4vuCJGexTfiFXaI5DeqEWp2ab4TRpvlf3uooITccHQX3VPuLZB01uaMcHpItCSSnMky9SdZVp9PsQ7K4MbzVMskhbkRZsCsNBOJxKqU454buQJBBn3TZI20osaLXIkU0sakSUl4B1ZFp1ZEPiGyQgk2EujeYGc1dYovw6FjWJpqmWhMdpCNJyYlOKKDbQOdf8PJ+jfAUwHH1DyO8MvmTW7X+GOHRZg1UuntmeE4z8DPDW8ijt676oxpAkoiPftdYfVCiv0b+kaHm13j9okO/x/5rocuEZyHbXgtJ+3yjQX+J/CNCiwH+xe2TyfCaOE7D45B0HoQEGxrpJ3QnbZE9832aAU35s8bNgBM5RjrenK3x9RnhnLMI7nvOIvxzFmGf8V0u/uboGOZ99RX1QgMQFjWWuEJB6/7jVIuzpvdBgyAyCdh31V84dp1hagLKZCQQXgiA+rRWttKKZs2vmzgGssOaRhBRCG0tJJ5DL4Mb2BmBlloU/7cNrCode9eUbafsL9qsQPGHZMFqh/0uepZmJafnPbOybIkQkaplNW8n/sOKfeCsw2daocqrRIGsSrFm6S5bxRwg2KUZzt6LOrUEBZC+5LV4kZ1mtWU9oyI2IR5TiUJTk5ZPJ6h5+zrUMznUHH3e3LctlpbLu3MsKVs6XcPSSakmZNWuc3pbBwXy8q1rDMe+t3pEYuo1W9vgsCXuSUpjCWptKdllxsUN5zUGIAANoKRcwpGjVuyRz5SNjRdxsAJAlb7uscVFwtt7TtH1YrlUFFXaGnsAEJxpWHwPKpZelHok6/4mAT/I+kYjmiyNZooU0pR5TbsOtdDF11k13y9l2iwWKNHCN4AYPonpzyMP86eZx7878jB/mnk8Qr+ipdDcmtHSXtuhXL3Ih3q67Zia6RnAQxJ9jNl7bEeZ0vfTvetog+aSapEi2hP20dAhUtVbQN6newgVZ6W9bya25gb838EhTT0d9v29MpGhJsANZMk5eKIvC47oXqfh7xqSomyPSwbK320wiQnI2hVUh7qdNIxSWGfCeab6tJIj7JsHznr7FopU3WdFg5aHoOdrPVCHnj7r+elZr+x7Chfk3dAODGrUQZWmw3rIJvQQZlBTc7BMAFwOpy8OcQc1BzXbRMsxJ31lSH7AHZck2GLRQXIAjYuoeKVaMMnDN9kNYoV0cyGQyWF7XimTA316cGj76GEM1jltOtA6xywDPGi4VL1ERFRroHqtU7mpvVeaAciAsFE199pkVGUjiwB2qzOY2w70ZoBOSCCasGVmzmCYfjodO7weJ4I7KX5XjsnuSpsjxyx1d4kuLm9AF4CBsI0ZoeWpw0wZESx3bLYCnhQz+ZxPixipfvTfVSzvwsPyGlU9JP+cUd7sbh6e/3BI6fd+Mfx9dHpT/XNK+aON+Sw3za03iSQOweVhdOQDddxNJxFNh+W7s8V5C5jPowm0IihrEhvl3G7tS4U0vx/5KFF/P+RUXxBLv9CQ/VQJqzztJMeAS2HYSIbgFLRZnIGeIpPZvigCsNER3u1AgJQuIjJzHtlSX1Zjv33RzyFhTvjN3w69qQ9SO7btgs1VR5g6ljs9Ds2GAdPwjY0J2YaEopIVooxkwE3n0EEPlbxOdbebHQZAKSEYQ7rHn/dxo3k4F7n6UK4/BpTTAd0Tgk6Xyo3ZcS5tubliWQnJFDRfqpalY45G0pGY6PmBpfNbtlzJHtWirOPKInHUVlJJvSuRvVqnklCgth4VogeCoS+z4Ovt2/ZZH92qichONLKf6zpsCeklRE5Ph4botxIpW0LVgDXp5MQ3NLrxfKDPIXaHqqmKA0Bc7ItMtc8BFb54Mlqlg0wIndRGhYfC1eR+DNksBL1OpgetIQJXAoleTofWoUQBMKRLh8WXmq+wz1HxSo2ypFNdqvzZg3Nm60zvtQlPm4iGeG2Caj4WZfBsggagb21CfQX2z/AcJd9F1JzT5KeKniPj5RoyPQjFCB8Usg4emrgSyQ8ZocIDqbyhix7RJ5oFtlpos+pVEU9Q8TXh/+zUuUDZP4M33OezD3bPUdUP7FLX9g3dG7iH6N/ATTqvpbGNbCTd53W40yEmaAl0WoeegA+TC91QmJccSWxan6d9vc+9qAI0M+9zr0k2oPvqj0OvqXG1uotz6GVSsndB04nXKWj+Sjr1+mZE+EFK6IzwTKg0pUZfOj3uUYLvw1nF6W6+qiZOt/g6M2oamxwU6oxcoy+cmlETOQel59J1ct9MElgSaYDYYHfT6UifjjHlrr4tx0GjQ2Gpo5wncHBYvKftT+SfsJv9RF1PEbQzoH0m81xJ6UEZ3BMaaQWrg817Ml81JQZfeg5kLgSQwecrt5zv1sNrSuZ0lNvYN65CSXu0FzWN1gaUD1tFdOMkubIdBZE97GrO0QIt5q05yXpaZJ2PIrPhZqp8u2U6C54HXwkJSYPstJKdQzPIiLv17DGSgajhtbsTu/pos8I3sx+3d3xLAUVw02XOQuEcJAvafGeYQJ0YlXPoIR1qH8rqFHBQj/OoeaQhO6gQDfpYHfqoKt16UGINVXAqp058zqBIh7rdZJvP0w3oRxCgKkPtQTPdFcdr7ELFRtx3HY9TBIaGf6OwC6sR+2sXhg5FfcprG6h+6t51bwPVurUNKVdBMD7H4GzhxHm/GBp+Ng9Tazo7vVpNq8LXBVYazQW2yEgobtLn9lmrm4FlNbdoyZHAeK8nO4fxkE7VOTR93l1hyt2hgWb4WYBjTwj5mG7JldbpU0qkcbQqZEUw1AChH5sEYvJGSUvh3Kduhh01kYD7cNagijTqO4oEZ/C+RiI4967f24RTOM9Ezn77Gy4ZIhD6kz5IbwdBrYwsaEcWgJOAUGxmBVyL9eckrBz3/PppHGXROWkBkT8cr61BbPeTOM9zOMftI+twBNQGEZmSi8CheVcL2Kau+dKzCJronGdPzqMnZl+PKLDPVO6n33Em+Br8IB8INjWhVKRsU+tKF0YGkLXBbI0Hsro4qlCuxbawIb466LISwlXVB6cTVZff079XVPWYwRNV42j3n7DCDP98IP6ah5tvBuLs+gyPnmMGOo7zBFETB2Z4xebsIesZ1Jt5ElCkabKePgRThwBDlsr54+NDGogIGPfTc/cTLeb1SMunJ1qSn2qKlh7zAtMfHxvCOvrdUVIgHfVoC6JE4yeDeioxZmHjekZGX39jzqzmfwBym86iVhdxsAAAAYRpQ0NQSUNDIHByb2ZpbGUAAHicfZE9SMNAHMVfU6VSqg5WEXHIUJ0siIo4ahWKUCHUCq06mFz6BU0akhQXR8G14ODHYtXBxVlXB1dBEPwAcXZwUnSREv+XFFrEenDcj3f3HnfvAKFWYprVMQ5oum0m4zExnVkVA6/wI4geDKBfZpYxJ0kJtB1f9/Dx9S7Ks9qf+3N0q1mLAT6ReJYZpk28QTy9aRuc94nDrCCrxOfEYyZdkPiR64rHb5zzLgs8M2ymkvPEYWIx38JKC7OCqRFPEUdUTad8Ie2xynmLs1aqsMY9+QtDWX1lmes0hxHHIpYgQYSCCooowUaUVp0UC0naj7XxD7l+iVwKuYpg5FhAGRpk1w/+B7+7tXKTE15SKAZ0vjjOxwgQ2AXqVcf5Pnac+gngfwau9Ka/XANmPkmvNrXIEdC7DVxcNzVlD7jcAQafDNmUXclPU8jlgPcz+qYM0HcLBNe83hr7OH0AUtRV4gY4OARG85S93ubdXa29/Xum0d8PIyFyh3rr/NgAAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjliYzYwZTdiLTQ2YTQtNDBmYi1iNTdlLWM2MGY5ZWYzNTc2YSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMDE5ZDJjNS02YmZkLTQ5YzQtYTczYS0zMGQ3OGE0Y2MyZDUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpkN2U0OWVjNi0wZjQyLTQ5YTEtODQ3NS0zN2Y5N2Y3MGJjZWIiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE3MTAwODA3MjUxNDU4NjUiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxNTAxZWQwNS0xMmQ3LTQzNGMtODY3YS0yYjMyMzIxYTYwYjgiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTAzLTEwVDE1OjI1OjI1KzAxOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PnuaV+YAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAHdElNRQfoAwoOGRnrK4UpAAAB+UlEQVRYw+3YsWoUURTG8TNrikAECYJYiVjFLBhS2GktpPEV8gg+gr2IhbWQRhMQG0stIxaCaNKIjQTExqgBUYOJyc/mLkxmZ3d2dmciSA4sy+58c/73u+fMvXc34iROorXAPFaHCdY1F+vHxIG1Xu6sANLkDGZZlg0wpOFiLWRZtlkKmhSGLKU5HKIZm4M57Oaqc4TTGSPhNO7iHmZafD76OJiLiDcRMR0Re6MkqZw5XMZn7OB6WxUqcgqV+Y2FKs7IrYALuNh2y/U4JWauDOJM1WiB0xFxLiJm0/v3iNgqWwt6t4zZakXObEQ8yLXZ1SzLNtGp5AybOdzHFvZwiNsDdJ2U5qAhzn6+MnU4la2AG/iBDzjThqEc51cy1GemSUPPk+TJEE0Thl7mluU+M40Ywnl8xFcsYqqllruWq8weFsflVIHupMuvcAmfcKtEdyrp/tTlpNWs98wcYmkSTpWhF+nyBrbxCFlThkpOAO8n5VQZuonHeIilITlqGyqY2cezJjhNneXO1jFUtmlOwukMA+ZiA90SXRev88KI+FLDvIh4lzbNSBv1QWOcit8pP7Gc0y6n74qxg294+q85g+AzWMklWin5PFMzZ9nZrHFO1SCKM3VkJicx0wZn1MF08Ta9umPmWEsD3cV8W5zj/nNjdZCZk/jf4y94DaUx429cawAAAABJRU5ErkJggg==);background-position:-25px;border-top-left-radius:0;border-top-right-radius:0}.GPcloseGetFeatureInfo{background-image:url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=);background-position:0}.GPgfiLayerButton{background:unset;border:unset;font-weight:700;text-align:left}button[aria-expanded=true].GPgfiLayerButton span.GPshowGfiLayerFeature{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.GPshowGfiLayerFeature{background-image:url(data:image/png;base64,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ICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmM1NWM2ODRkLWY2OGQtNDExNy04ZGYzLTAwYWMzMjQ4YTY5YSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjNmYWM4YTllLWJkMTUtNGJiOC04ZGQyLTkwZDUyMjE0YmFmOCIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1QOlRpbWVTdGFtcD0iMTcyOTI0NTAwMjg0NjU2OCIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjMwIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjcwMTNhZTFjLTcyMjktNDJmZS1iMzAzLTU3NGFmMWE3ZmQxMyIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMTAtMThUMTE6NTA6MDIrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+UnHxogAAAAZiS0dEAPIA8gDyLkSMzAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+gKEgkyAorMuigAAAIkSURBVFjD7Zc/aBRBFMa/t39EFEMQTrQ2CiIi+K+Q3ZA+CLJ7nqWQwlRJGs3ddUnlZdUiXJEqINjE9e5UjFWag9sEbNRGhGB6MXKgQQPxZp5FLhLCXXbXXSQH8ytnhuF9771v3yygUCgUCkVXKOrB6/dqJzQD42A5DNAZAGBglYA3UlB55ZHztWcFWoXaLTDPAzjW5cgGMUYanlvpOYFtcc8inGVi5A6aSAptS50/761co+QAAOxCba/GH6TJgcaD3HqSoKx89RMx15tH5MTHqdzW7r3zU/6h47+0WSYaCmbcc2F3aftuGhjfpy075asPrI8lTjtjgYlG+zf1JbvoZ3aW7aKf6d/Ul5hoFIyFxBW08tUPAC7Giw3vl2fcS0k1tq3xBEATpN3UmLYkxCsAp8C4G3ju0yj3aCH7pzstNkrO3zbtkLGBNLwTlJznIG1wO2uyLiFWAJggzYoqDgCM8ILE7i9OXL0dDx7+PZH5iast0isAYLDIrh8VTXuyMpeKBwFei28fWkvTg8KACDzXCjzXEgZEXA+GCKTFf/gwv07cnp47DaLbBFxhqb+zCi8uD+ZfXmCpvyXgGhh3As+dTixQCioD2IgR23ezZZYPkgdDB709Wc0ywY8y6Jkpu+w5tTQH9dB9/+RuD9Yf5r6k/lTbFsnzAPV1qxwzjaQt7r8+tu2inwHrY8wYBnC2vbzKoEWzZZbrj298U/8uCoVCoegx/gAQwd9vpqyHDwAAAABJRU5ErkJggg==);background-position:-26px 0;display:inline-block;height:28px;vertical-align:middle;width:28px}[id^=GPisochronPanel-]{width:280px}.GPshowIsochronPicto{background-position:1px;background-repeat:no-repeat}.GPisochronPanelClose,.GPshowIsochronPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIRSURBVFiF7ZbRS1RBFMbPbLq9ldjaY88Zkv1JQRqt+Wf0aCrYBuY/UkRQRFQvQQax+JipEUIoQdHq/nrYb3K8zl33zl20h/vBwnLOmfPNN+fMmWtWoUKFMwPwjiO8Pu/9xOAGDQRqZnYYmLrOuQvD31I51AYJAqbNbNnMfgXm38AyMFV2E8AssKpDy4txwAowX4booogO1WYdYEu/jmwHIqqXEOPzr8VEScwjxXSTREnMSyXZBGaAscA/DtyTOIDnKaKAFsfxGHCB38kWopUiaNVffmC8T9wE8FaxKwk8vpVCrAG1TGU8nsSqeBrJLbXBl5gY4C7wOSNqW+13Y4iistUrLkYE/lTu5PhfAR8ytjmteViYMF9UeTFK3qZ36S9HfJeAP8CDjL2hqq4nkVpfUdFhEcNIjv2ame045/aA22Z2PeMbNbOn4QLn3C6wK38ZxN7Ggd/LKICfwKb+tyMntgGcOAzgO/AjkTM2AJKqFEvuW27s9Oh/aybUch8T+PKmWdaWJiro49kCa+a1ZmFIYvzYjo70ooJu6rS/Ao0B4q8C31TVyYJcZ/aw+iRv+omSmPeKXUrgmeHo0yc6mjOV6gL3i/IYUAdeKMkW0ASuBP6G2mxHMc+A0cJEvVxNVSp3mklUC2imcPgkdSU5CE5nWyK6snXofXUniTkXAFPAIvAJ2Af2gHVgoeidqVChwv+NvxOT737B3Fc7AAAAAElFTkSuQmCC)}button[id^=GPisochronReset]{opacity:.8;transition:opacity .2s ease-out}button[id^=GPisochronReset]:hover{opacity:1}.GPisochronReset{background-color:#366291;background-image:url(data:image/png;base64,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);background-position:-281px}form[id^=GPisochronForm]{padding:15px}div[id^=GPisochronChoice]{-webkit-justify-content:space-between;margin:10px auto 5px;width:160px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}p[id^=GPisochronPointLabelP],p[id^=GPisochronValueChronLabelP]{margin:2px 0 5px}.GPisochronChoiceAlt input:checked+label+span{color:#366291}input[id^=GPisochronChoiceAltChron]+.GPisochronChoiceAltImg{background-position:-56px 0}input[id^=GPisochronChoiceAltChron]:checked+.GPisochronChoiceAltImg{background-position:-84px 0}input[id^=GPisochronChoiceAltDist]+.GPisochronChoiceAltImg{background-position:-112px 0}input[id^=GPisochronChoiceAltDist]:checked+.GPisochronChoiceAltImg{background-position:-140px 0}.GPisochronChoiceAltImg,.GPisochronOriginPointerImg,.GPisochronTransportImg,input[id^=GPisochronChoiceAltChron]{background-image:url(data:image/png;base64,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)}.GPisochronChoiceAltImg,.GPisochronOriginPointerImg,.GPisochronTransportImg{font-size:0}.GPisoExclusionsOption{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAA4CAYAAADuMJi0AAAE60lEQVRYw+2YWWxUZRTHz/fd7y4zzAzTbaAdpgtQWsBiYVxYGpcEMCwRQkx48KHGhKg0WhESNYglwSUgWCKGTaMRBF4MwShpECUshlJqay2U0LCUwrRAp+0Ms997v8UnEl8Gp9Ppg2Z+bzfnn+/knHvud865AFmy/GfZVVZW/vvb9eduNn7Wc+ixGQ3/pm+UcO735VP3/rpsyc39TudHyXQ4maF61cqfZi97ocbjmVi6YGHNxoOeor3JtDskae606uqzFfPmvRqLxFg4EetIpiXJDJqqOHBwEEjIDyXjiVw4t/S1XD34TKs/MX+z4EEAgK0SwhPtjh+qq6tXBjGOtTY11a31D371qEygRxn3F3vWPVE1deN0G82T+m5BbCAIF+8lBttifLoFQeV0Wf7R7XbndsXird19/TUfAhgZeZ8H7eoXHYVWwzdBFTedsmhScfg0wfQPTRF7FfLdmBRRo4Q9RzTS8aeKRaeERAsC8TmRto30HJKqMCrhIcMUMuMcmADQJAQ5GJ4fqUMpFdE2mXgqOe+ewXhJFCHoJNJxu4omz7bhScVMyj/BeFPGUrlZIROOYRT4C0C0S0h8qUhHAAC2yGTFpUka7Skfx9/DZFZGnH2gEHxYwnc6EIguBYnDqtTzT3uDTFb3VdrEcZfWk5GUrgZxaI4QCyyaBAME04sUzTvL+dBD+xnOu8qiwrIgV1leEuf9JxhvTzu6Bgm5ThXkmNcciriaS8R2lXySTHvUqXb/lqsNp3Ju0qstx2Z7sfTZGuKsLAFkV4RK0J5k2s4wXYqYsO6WyYq0HUYN06c9XgX5SxcBuIt4gvJ40sJi7MaVONtVhGHmqIrmyLPzm29tqqf7ilwHUtHvVAjO9tksWbJkyQzehd7xo5ppUqW2tlbzLp380rhxitdB8q/4fD6acnsaKfX19c7Ji+QNJU/at7mmWaaZpklHNSY+irq6urzSxbBBy1PqEoJZfFdYoK2tjY2Jw4aGBpurJvKOmme8xWTTmgjq1DApAwAxoo6fIkieEnoF2+NvUDVqCekRiNIY4ip1eb1ekvEI39/65nOyO7hWtyWc0biOogkDooYOBhhujLEDAIZG4xADAH/4sH796y42ZWBNxBGrCEZMlNBNER1k8fBtdixwwzzY2toaTCtCr9drLXzKthgSiv7ztycfjvQo4O5fpWqR5eGojg2DCX1IBHUf3n2nSey5cOpCXzrfIXp6WZXXMtdYh8pi74JTL3WTijO913tDq2qXVxplA5vijgdTIvE4RO6zYOwO3t5/GhpbTrYMjnh78nq9VlwRfRmVRdewArM6rgJBTLbxErYEAL4J5vetwFJ4jghQxMNSSAyoO42Ttl0Xz58PpzXqS5JE7G5tqrAbM6lMiyljkimoQg1m8VhK7xrFwTpdixcbAaGz2/I+ekba0dzc/iDt3SIUCtH+Lv+lArWwjWPOOeMVJjI1imgRsyXKDas+mxoc83vKUfOC/dO2lst3M7LM3L816LdLBedlTIKU05lUNfJM2ZzEBZORXzuHrtk+vnSu63JGF9LhvmH9/uVAu8s9MUQFnWUSIweHFJ90z7qlq+n6L2OyAQMA918NdLrcrqgwoQrHyAHWqX49PDzMxsohAIAUuZ0YsHJHSO+G5t7eXj+k8ZsEjfCmsQGABgAmAMQBIJEdN7L8//gb3FshBGMt81oAAAAASUVORK5CYII=)}.GPisochronOriginPointerImg{background-color:#f2f2f2;cursor:pointer;width:28px}.GPisochronChoiceAlt input{display:none}.GPisochronChoiceAltImg{cursor:pointer;display:block;height:28px;margin:auto;width:28px}.GPisochronChoiceAlt span{color:#999;cursor:pointer;display:block}.GPisochronModeLabel{display:block;margin-bottom:5px;text-align:center}input[id^=GPisochronTransportCar]+.GPisochronTransportImg{background-position:-168px 0}input[id^=GPisochronTransportCar]+.GPisochronTransportImg,input[id^=GPisochronTransportCar]:checked+.GPisochronTransportImg{background-image:url(data:image/png;base64,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)}input[id^=GPisochronTransportCar]:checked+.GPisochronTransportImg{background-position:-196px 0}input[id^=GPisochronTransportPedestrian]+.GPisochronTransportImg{background-position:-224px 0}input[id^=GPisochronTransportPedestrian]+.GPisochronTransportImg,input[id^=GPisochronTransportPedestrian]:checked+.GPisochronTransportImg{background-image:url(data:image/png;base64,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)}input[id^=GPisochronTransportPedestrian]:checked+.GPisochronTransportImg{background-position:-252px 0}.GPisochronTransportChoice input{display:none}div[id^=GPisochronTransportChoice]>div{justify-content:center;width:100%}div[id^=GPisochronValueChron],div[id^=GPisochronValueDist]{margin:5px auto;width:220px}.GPisochronTransportImg{cursor:pointer;display:inline-block;height:28px;width:28px}.GPisochronTransportImg:first-of-type{margin-left:18px;margin-right:10px}select[id^=GPisochronDirectionSelect]{margin:5px auto;width:80px}.GPshowIsoExclusionsPicto{right:0;top:unset;transition:all .5s ease-out 0s}.GPisoExclusionsLabel{display:block;font-weight:700;line-height:16px;margin-bottom:10px;text-align:center}.GPisoExclusionsOptions{display:-webkit-flex;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.GPisoExclusionsOption{background-color:#fee;border:1px solid #a77;border-radius:3px;color:#a77;cursor:pointer;display:block;height:28px;line-height:26px;padding-left:28px;padding-right:5px}input:checked+.GPisoExclusionsOption{background-color:#efe;background-position:0 -28px;border:1px solid #797;color:#797}input[id^=GPisochronSubmit-]{padding:0 10px;width:fit-content}[id^=GPimportGetCapPanel-],[id^=GPimportMapBoxPanel-],[id^=GPimportPanel-]{width:340px}div[id^=GPimportTypeLine-]{border-bottom:1px solid #999;margin-bottom:15px;padding-bottom:15px}div[id^=GPimportChoice-]{margin-bottom:5px;margin-top:5px}.GPshowImportPicto{background-position:1px;background-repeat:no-repeat}.GPimportGetCapPanelClose,.GPimportMapBoxPanelClose,.GPimportPanelClose,.GPshowImportPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH7SURBVFiF7dY/aBRhEAXwvcN/sRBBkUNsA8JhoZ1gJaIIamV91SUSFCxtU1oJQS9i0lnZWShYpE5pIYFUNoJIsLGIYhC9n8XOcZt175Ldu2CzD7bYmfne+97O7nybJDVq1KhRFZjFWlyz/3s/lYFDeIjvhviJRRyZAv8cXqA5pqaBp3gwqdglvA8TW+jgNj5HbAOXJ+Cfw5/gWi0yFWaeRU2/kikcx2P8DpKXOJXJn8RSbKYfT/hEBZ2e3VhGI2dmOVfTKytyC59i8Udcy+RA5v4KNiP8BXdLag1epSxW0cx1ZoCVoi6OIm9FJ+BXdOhYrmaXoYgdxiPsRPoNzk3BVL57pcx08C0WrqM9ou4fQ5lcO9YKrs6EpqqZCcLtWPgkv3CMSFG3msEB2/vewHhThcOiCNmi50mSSJLkXpIk3TIbyaEbHIKzLBr7jO0N3JB+2PAapwtqCl856dR7FemvuFNSu2gAVOpSnvgM3gbJFm7uZQhXDc+lNZydgpmVglhlUw3M44f0jFnC0bwh6XRblJ5FO9JJV0pwjJnB2C4c6aVNhVgbH4JoAxcyufOGfxCbuFhR4+AP1pzgTIj2o2Pzue71MDMBf9fw16dwNOc61cf9yoYypNcNBwYVPvwx3AvxYEZOszDVw8I0NAekLbyLqzU14ho1atQ4KPwF7C8m4Xa+2v4AAAAASUVORK5CYII=)}.GPimportPanelReturnPicto{background-color:#366291;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4AUXDwQyeFmCzQAAATJJREFUSMftliFLBFEURs/dVUQURJvYLCaLGESz1T9gUJsoWARBEBRM/obFIFgMKxtsNhG2aTUIBqOCySLsHssuTNiVGZ47aU8aZr5537vz3TfvwZAhg0K9UL/U5bLMuuyljFXJYXYOHGVuxcAM1VPg5D+/1sgfZsfAWY9HG+ok0AY+gFfgJSI+UzI7tBht9UHdUqtFzQ5M41GdKZLhQmJMa0A9d6VqqDXT2e41fvQxrQCXQK+X7oGnzvUoMA3MAyvAWEbXjIjVIllW1eseM9/vo59SrzK6ljpXtIGq6k0ew0wcdxntTqGFHxEtYBO4zTPBiBDYBX6SGlAdVRud9baeQ99tunrKz6CizubULnYMn8vczprqW+HdIoEaMF5mhRPqe2kVRsQ30Cj7WLI0PJwNnF82zKAINyZs+wAAAABJRU5ErkJggg==)}.GPimportChoiceAlt input[type=radio]{display:none}.GPimportChoiceAltTxt{color:#bbb;cursor:pointer;display:block;font-weight:700;line-height:28px}input[type=radio]:checked+.GPimportChoiceAltTxt{color:#366291}.GPimportInputLine{display:-ms-flexbox;display:-webkit-box;display:flex;margin-bottom:10px}.GPimportInputLine>*{border:1px solid #999;border-radius:0;display:block;height:28px;line-height:26px}.GPimportInputLine :not(:last-child){border-right:none}.GPimportInputLine :first-child{border-radius:3px 0 0 3px}.GPimportInputLine :last-child{border-radius:0 3px 3px 0}.GPimportInputLine>:not(input){overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.GPimportInputLine>input{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0;padding:0 5px}.GPimportInputLine>select{-webkit-box-flex:1;-ms-flex:1;flex:1;padding-right:7px}.GPimportInputLine>label{background-color:#f2f2f2;color:#666;cursor:pointer;padding-left:7px;padding-right:9px}.GPimportGetCapProposal{color:#5e5e5e;cursor:pointer;font-size:1em;height:28px;line-height:16px;list-style-type:none;overflow:hidden;padding:6px 10px;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap;width:100%}.GPimportGetCapRubriqueTitle,.GPimportMapBoxListSourceTitle,.GPimportMapBoxSourceTitle{color:#5e5e5e}.GPimportGetCapListRubrique,.GPimportGetCapRubrique,.GPimportMapBoxListSource,.GPimportMapBoxSource{list-style-type:none}li.GPimportGetCapListRubrique:before,li.GPimportGetCapRubrique:before,li.GPimportMapBoxListSource:before,li.GPimportMapBoxSource:before{content:"» "}.GPimportGetCapProposal:hover,.GPimportGetCapRubriqueTitle:hover,.GPimportMapBoxSourceTitle:hover{color:#000}.GPimportMapBoxSourceFilter,.GPimportMapBoxSourceScale,.GPimportMapBoxSourceStyle,.GPimportMapBoxSourceVisibility{display:inline-block;margin-left:15px}.GPimportMapBoxJsonEdit{margin:5px;outline:1px solid #ccc;padding:5px}.GPimportMapBoxJsonEdithidden{display:none}.gp-json-string{color:green}.gp-json-number{color:#ff8c00}.gp-json-boolean{color:blue}.gp-json-null{color:#f0f}.gp-json-key{color:red}.GPimportMapBoxSourceVisibilityInput{display:block!important}[id^=GPimportPanelReturnPicto-]{background-position:0 0;border-radius:3px;cursor:pointer;height:26px;opacity:1;position:absolute;width:26px}.GPlayerSwitcher_layer{background-color:#fff}div[id^=GPlayerSwitcher-]{height:32px}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{width:190px}button[id^=GPshowLayersListPicto]{background-image:url(data:image/png;base64,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ZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDoyYjNmZWFlMS1hNzM0LTQ0NjItOTM3ZS1jYmEzM2JiMTY1NGQiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NGQ1NTRhMTgtNjk3NC00NDMyLTk5OTEtMjk5YzU1OTY4NWQ2IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NTA1ZjQ3ZGEtMzNjMy00YjRkLWE3ZWQtODEyMDVkOWRjNTk2IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEwOTM3NTE5MDA3NTY1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6N2Y1MGZlNjEtODdkYS00OWM2LWI5MjQtYTJlMmFmNjM0MmQyIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wMy0yMFQxMzoyNToxOSswMTowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5OxzFdAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AMUDBkTuLyY9QAAAhxJREFUaN7t2bFrFEEUx/GYxiBIYneFNmKZ2uJOCDHY6V8g5m9IZ6UGK1trsbawEQJiISHgYSFKwMrCQpGgNiYYFAOSj4VzYV02d7N3M3dR98GxMDcz7/t+7+3u8HZqqrHGGvvXDPNo/a/BT2MTu2jndjaHuQkH/AcDlv22d5jJ5fQkruMLvuIOTo058CqGFt4HAa7mdlq2sQgxgOFHuL7GdG6nXVxEG2u5hYhgeFIY/5aEoZ/TirlZhIhlwN3w3+eRGeoEnkuImuKfDeX/M7wCh2fACnYKi9+iM0TmOmFtz3awErm2FgMehnn3RmYYJfupqqBm9s9jH99xJlklDiNE6udADAOehfHbSRlwvAZEX6e9vYYQYBDDzcKD71IShnDfrFVsMItb2C44eRp+PdsOc2YrwLtYysAAb5Ix4EIpqDJEVTZi5nRxJVKAGIZH/Q5iozLEQPSycZja9Z3GM5zGxzD2ICfDQCGyOB3MsBeuL3AsKUMhs4+xUBhfxEbFvVa+JzewWFi3EPY6yNKIDM8LvnaTM1QcQtZLEOVsVKodnK4nOggdMOB+GPuUjaFPOS1VVERZ7U7Go/CrcNzdw7ncDFFCJHcax7A1ToZe12W1qiwPKbPV1J0iXA7770+KYWINkdDnexn83Jh0U2bsLTFcCwF+wImj0pYbS1MUM6HBCctHsTGbW+R2eN9vJu3z/WUitDDffPJprLHk9gs8Px9eX9iakAAAAABJRU5ErkJggg==);background-position:-2px;background-repeat:no-repeat}button[id^=GPshowLayersListPicto][aria-pressed=true]{background-position:-35px;border-top-left-radius:0;border-top-right-radius:0}.GPpanelBody{max-height:200px;overflow:auto}button[id^=GPlayerInfoClose]{background-color:unset;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAgCAYAAAAFQMh/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGUSURBVEiJ7ZQxT8JQEMf/hxOsDg6GOGtiYgyy0I4Ormj8BBqpZW9HFhNxRKom8AU0tHFRRx1KYlwcQIkrzM4mGnoOtlJKsa/q2N/4ernfu97dAxISEhJ+CYkEyZq1y8w5O9NRUKk44VFMsm7VHIdf2kdb9aicM0JS8BkIuezH3PxgfekKd3cclEqaeQxQmYg2soXt10H74uGnvKkoMROveHFE2JHelusAkz9C0iwDINU9IErRYlTeyIr79vnNgtybBZB3j9ayhZ5b+S3cSvd9F2nY6a46+VfGEeqx1z9mlL9PmJqE4TsoFZSWps9BbHG4PPBdWBpT7Mkva8zOmJzZabYzT3uiUkBguCbUPAy5LMUsQGC4fEpvZdTgFyJanb5qfxKHSbkB4B6g/JccseQC4nCpne6W+gfKtX/V4sgjeyPppgGGb2VwaleLKkA8uphlAFB8WU/sw82JlviJHC4CHgG408oNO90pj6QAQGxXiyoRvPeZwfQclVcIWWspkm4a409lECZJNw1ZaynTYxISEhL+gU/lu7XSwAzyjAAAAABJRU5ErkJggg==);background-position:-2px;background-repeat:no-repeat}button[id^=GPlayersPanelClose]{background-image:url(data:image/png;base64,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TUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDplZWM2OTBlMi05NGExLTRkOGItYTM4Yy02MjI3ZWFhNmVlMjQiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6YmQ3ZTNjMTUtMzcwNy00MDZjLTgxNTYtZjUxZGM0NDFlYjMxIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MTVhNTdhOTYtMDdjYi00NTVjLTgwODUtY2IzMjFlZTdhNDc2IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzE2MjkwMzk5OTk1NTI1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NGM2Y2U2YjItNDVmYS00Y2U0LWExODItMzNhZmUxNmZhNDc3IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNS0yMVQxMzoxOTo1OSswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4dtuOqAAAABmJLR0QA8gDyAPIuRIzMAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH6AUVCxM7RVVcxQAAAPJJREFUSMftlUEKwjAQAJPiE3yH+Ii81IvgG/IFBRPRWkwLib10exQVhawHLRRbU8QEPGSOmyXDJrsJIZFIJBISsS9nuYEtXy5Hn3I4x+SgYS2zcuFNaq1FRMTc1Gmf/CmtBL7wIlcaJLZQGjacY9KWKg2btxz5s7g5wvbGTeXvlT7XYOe6Ei9ypSsZTOqSB5cOyXMD6bfS5Hs90m6M0mCz3NdIfQ0XXJob2HVjHuWukXGN2t8+IIPNdbrcVohICCGkONZpAXrKGLXNOmPUFtl4okwtmtj5et/6ea+zcq40yHalfVeiNEiRlfP4rUYikaA8AMekzozLtupbAAAAAElFTkSuQmCC);background-position:-2px;background-repeat:no-repeat}.GPpanelIcon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48ZyBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMiIgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBkPSJNMTUuMTkzIDUuNDQ4IDguMSA5LjQ0IDEuMDA5IDUuNDQ4IDguMSAxLjQ1NHpNMS42NTUgMTAuMDc1bC0uODQ3LjQ3OCA3LjA5MSAzLjk5MyA3LjA5Mi0zLjk5My0uODQ4LS40NzgiLz48cGF0aCBkPSJNMS42NTUgNy41MjIuODA4IDhsNy4wOTEgMy45OTRMMTQuOTkxIDhsLS44NDgtLjQ3OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTZ2MTZIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:auto auto}[id^=GPlayerInfoPanel]{right:190px}div[id^=GPlayerInfoTitle]{border-bottom:1px solid #366291;color:#366291}.GPlayerAdvancedTools,.GPlayerBasicTools{height:28px;position:relative;width:100%}.GPlayerExtent,.GPlayerInfo,.GPlayerInfoOpened,.GPlayerRemove,.GPlayerVisibility{cursor:pointer;height:28px;width:28px}.GPlayerExtent,.GPlayerInfo,.GPlayerInfoOpened,.GPlayerName,.GPlayerOpacity,.GPlayerOpacityValue,.GPlayerRemove,.GPlayerVisibility{position:absolute;top:0}.GPghostLayer{opacity:0}.GPlayerBasicTools{background-color:#fff}.GPlayerExtent,.GPlayerInfo,.GPlayerInfoOpened,.GPlayerRemove,.GPlayerVisibility,.GPshowLayerAdvancedTools{background-image:url(data:image/png;base64,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)}.GPlayerOpacity input[type=range]::-webkit-slider-runnable-track{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAECAYAAAAZDrhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAwSURBVDiNY/z379//v3//Mvz9+5fh379/DITYxKobKWYxMYwCisBoAFIIRgOQQgAADrTuhXfc36kAAAAASUVORK5CYII=)}.GPlayerOpacity input[type=range]::-moz-range-track{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAECAYAAAAZDrhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAwSURBVDiNY/z379//v3//Mvz9+5fh379/DITYxKobKWYxMYwCisBoAFIIRgOQQgAADrTuhXfc36kAAAAASUVORK5CYII=)}.GPlayerOpacity input[type=range]::-ms-track{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAECAYAAAAZDrhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAwSURBVDiNY/z379//v3//Mvz9+5fh379/DITYxKobKWYxMYwCisBoAFIIRgOQQgAADrTuhXfc36kAAAAASUVORK5CYII=)}div[id^=GPlayerInfoQuicklook]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJTSURBVEiJ7ZZdSJNRGMd/59Vo9m6jQYKWRV/MQYGBXSStC2/S27YmXYfQZRexZiBhdNE2ke68qq5rY3rRjRFE1Du0KKIcwQYtaGpCH+r01ZrsPV2lc853c0IE+r87z3P+Px7OOc85B7adROFgcHDQAbRWYtR1fdTv9+vF8do1dCFanE7nU6vVagpbWFgglUq1A89NgQB2ux2Hw2EKVBRl45ypswqtq7BYM/oyD8emSE7rgMTVaKPTtac64E99mZtDKRZzeZobVABef55lPDPH6b2W+k0DH72aYjGX51rnEU4csAGQmJhnYCTNmx/qFSBa7DFdw+RXneYGdQUGcLLJxvF6C78M5VQpT5lNkebpzQJdjTaS0zqJifmVWGJynk/fflNXa7wr5Vm3htlsFsMwADjvtDCeEQyMpDm2bzcA6e85LLWwvy434vNFaqLRrnyhf03r9ff3q6qqthXGJhct9W9nrN1LeaUFoK7GeH/YujScmLWGhRCRl5YPl+nrM0oCNyN3INYL3AbxQAtd6AYhAWqqBX6JR14cOndpF8irB90f7Zl45AlssfW0oKdXIu8qQslshbOjba+SneIOxFavGSG6tKAn6u4ZCiBlsHCeFvKu85sd7AkgKg2ZAdCCnpCU3CtXodmNPaqFvF0rVfcMtyINbzlgRa139nrsDDL/DHCAzAL3twQE2kHYQWalFB1ayNuN4FbVwHjYewfkDSlFRzzsHXP3xI6C8rjU3LLv8l9poYurOywJguGjxCn5pz+HNncgFtkoVw2wCfBVUtWO/nP9AYuuwXn+Xm/WAAAAAElFTkSuQmCC)}div[id^=GPlayerInfoClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAgCAYAAAAFQMh/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGUSURBVEiJ7ZQxT8JQEMf/hxOsDg6GOGtiYgyy0I4Ormj8BBqpZW9HFhNxRKom8AU0tHFRRx1KYlwcQIkrzM4mGnoOtlJKsa/q2N/4ernfu97dAxISEhJ+CYkEyZq1y8w5O9NRUKk44VFMsm7VHIdf2kdb9aicM0JS8BkIuezH3PxgfekKd3cclEqaeQxQmYg2soXt10H74uGnvKkoMROveHFE2JHelusAkz9C0iwDINU9IErRYlTeyIr79vnNgtybBZB3j9ayhZ5b+S3cSvd9F2nY6a46+VfGEeqx1z9mlL9PmJqE4TsoFZSWps9BbHG4PPBdWBpT7Mkva8zOmJzZabYzT3uiUkBguCbUPAy5LMUsQGC4fEpvZdTgFyJanb5qfxKHSbkB4B6g/JccseQC4nCpne6W+gfKtX/V4sgjeyPppgGGb2VwaleLKkA8uphlAFB8WU/sw82JlviJHC4CHgG408oNO90pj6QAQGxXiyoRvPeZwfQclVcIWWspkm4a409lECZJNw1ZaynTYxISEhL+gU/lu7XSwAzyjAAAAABJRU5ErkJggg==)}.GPlayerInfoLink,.GPlayerInfoPopup{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJTSURBVEiJ7ZZdSJNRGMd/59Vo9m6jQYKWRV/MQYGBXSStC2/S27YmXYfQZRexZiBhdNE2ke68qq5rY3rRjRFE1Du0KKIcwQYtaGpCH+r01ZrsPV2lc853c0IE+r87z3P+Px7OOc85B7adROFgcHDQAbRWYtR1fdTv9+vF8do1dCFanE7nU6vVagpbWFgglUq1A89NgQB2ux2Hw2EKVBRl45ypswqtq7BYM/oyD8emSE7rgMTVaKPTtac64E99mZtDKRZzeZobVABef55lPDPH6b2W+k0DH72aYjGX51rnEU4csAGQmJhnYCTNmx/qFSBa7DFdw+RXneYGdQUGcLLJxvF6C78M5VQpT5lNkebpzQJdjTaS0zqJifmVWGJynk/fflNXa7wr5Vm3htlsFsMwADjvtDCeEQyMpDm2bzcA6e85LLWwvy434vNFaqLRrnyhf03r9ff3q6qqthXGJhct9W9nrN1LeaUFoK7GeH/YujScmLWGhRCRl5YPl+nrM0oCNyN3INYL3AbxQAtd6AYhAWqqBX6JR14cOndpF8irB90f7Zl45AlssfW0oKdXIu8qQslshbOjba+SneIOxFavGSG6tKAn6u4ZCiBlsHCeFvKu85sd7AkgKg2ZAdCCnpCU3CtXodmNPaqFvF0rVfcMtyINbzlgRa139nrsDDL/DHCAzAL3twQE2kHYQWalFB1ayNuN4FbVwHjYewfkDSlFRzzsHXP3xI6C8rjU3LLv8l9poYurOywJguGjxCn5pz+HNncgFtkoVw2wCfBVUtWO/nP9AYuuwXn+Xm/WAAAAAElFTkSuQmCC)}button[id^=GPinfo_ID_],button[id^=GPremove_ID_],button[id^=GPvisibilityPicto_ID_]{background-color:transparent;border:none}button[id^=GPvisibilityPicto_ID_][aria-pressed=false]{background-position:-28px 0;left:0}button[id^=GPvisibilityPicto_ID_][aria-pressed=true]{background-position:0 0}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{max-height:28px}.GPshowLayerAdvancedTools{background-position:-112px 0;right:0;top:0}.GPlayerInfo{background-position:-55px 0;left:0}.GPlayerInfoOpened{background-position:-83px 0;left:0}.GPlayerOpacity{height:28px;left:28px;padding-left:8px;width:calc(100% - 100px)}.GPlayerOpacityValue{cursor:default;font-size:10px;font-style:italic;left:calc(100% - 60px);line-height:28px;width:32px}.GPlayerRemove{background-position:-140px 0;right:0}.GPlayerOpacity input{-webkit-appearance:none;-moz-appearance:none;background:none;cursor:pointer;display:block;height:100%;margin:0;overflow:hidden;padding:0;width:100%}.GPlayerOpacity input[type=range]:focus{box-shadow:none;outline:none}.GPlayerOpacity input[type=range]::-webkit-slider-runnable-track{-webkit-appearance:none;height:3px}.GPlayerOpacity input[type=range]::-webkit-slider-thumb:before{height:3px;left:-200px;pointer-events:none;position:absolute;right:50%;top:0}.GPlayerOpacity input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background-color:#505050;border:2px solid #fff;height:17px;position:relative;top:-7px;width:9px}.GPlayerOpacity input[type=range]::-moz-range-track{height:3px;width:80px}.GPlayerOpacity input[type=range]::-moz-range-thumb{background-color:#505050;border:2px solid #fff;border-radius:0;box-shadow:0;height:13px;position:relative;width:5px}.GPlayerOpacity input[type=range]::-ms-track{border:0;border-color:transparent;border-radius:0;border-width:0;color:transparent;height:3px;width:80px}.GPlayerOpacity input[type=range]::-ms-fill-lower,.GPlayerOpacity input[type=range]::-ms-fill-upper{background:transparent;border-radius:0}.GPlayerOpacity input[type=range]::-ms-thumb{background-color:#505050;border:2px solid #fff;height:13px;width:5px}.GPlayerOpacity input[type=range]::-ms-tooltip{display:none}[id^=GPlayerInfoPanel]{overflow-y:hidden;padding-bottom:10px;padding-top:10px;position:absolute;top:0}.GPlayerInfoPanelOpened{display:block}.GPlayerInfoPanelClosed{display:none}div[id^=GPlayerInfoTitle]{font-size:1.1em;font-weight:700;margin:auto auto 10px;padding-bottom:5px;text-align:center;width:calc(100% - 52px)}div[id^=GPlayerInfoQuicklook]{cursor:pointer;height:20px;left:10px;position:absolute;top:-2px;width:20px}div[id^=GPlayerInfoClose]{cursor:pointer;height:28px;position:absolute;right:10px;top:-8px;width:28px}div[id^=GPlayerInfoDescription]{font-size:.9em}.GPlayerInfoSubtitle{font-weight:700;margin-bottom:4px;margin-top:10px;padding-left:35px}.GPlayerInfoLink,.GPlayerInfoPopup{background-repeat:no-repeat;color:#999;cursor:pointer;line-height:20px;overflow-x:hidden;padding-left:23px;text-overflow:ellipsis;white-space:nowrap}.GPlayerInfoLink{background-position:0 -20px}.GPlayerInfoLink:hover,.GPlayerInfoPopup:hover{color:#333}.GPlayerInfoLink a,.GPlayerInfoLink a:visited + */#GPmapLoading{display:none;height:50px;left:50%;margin-left:-25px;margin-top:-25px;position:absolute;top:50%;width:50px;z-index:50}#GPmapLoading.GPmapLoadingVisible{display:block}#GPmapLoading{background-image:url(data:image/gif;base64,R0lGODlhNAA0AIQSAAFkpSZ5sAGV3k2Ruiao3kOj1/GUBk225pe/B4S83XrK75HH3qrS5szMzNbW1sHe797e3ubm5v///////////////////////////////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAQAfACwAAAAANAA0AAAF5uAnjmRpnmiqrmzrvnAsz3T9FXhh72Ke8zWfDzgT/ogxIw55cjgiJ6XOhKjaII1sNio8Vb8ImnbMXVLBVhl2vI2hvzIHOwt9veGxyLwhu4dlcw59bzVjgjNoPHU2f0yOj5CRkpMocg2HjwaaBitzmZuaKWuGTKCgKHt8SKabqHulrJwno1qYQLGyJ56OrCuWtrChlMPExcbHH4s1ymK1NJZtM4Fxu3mvMXvMLdBj2ip60zG0WoBzENLVJL+66TDj7GQmbOc1EE9N4SURDvSRqcgj/gH8wC0LsGPtAK7pN7Chw4cQSYQAACH5BAUBAB8ALBYABAAaACcAAAVw4PdBTQOJaKquX+k2bJw6b+nIcu3isV7yLFrttioYczWWcVmICYkq5hKolB6pKOsUm9Vyu9JvKiyOls/otHqNQ7gR6ff7LJeX63Mx3n3f0+txeWyDhIVlBmsGiopoi45njo9fkZKTlIhil42RaYsxIQAh+QQFAQAfACwWAAkAGgAnAAAFdOAnjmQZOVCprmTjuikrf289y/Ub32SUuw6e6teICEuO31GVfC1Zxqd0Sq1arYVsAavNUrvdKVgrHm+l5jMazPVe3/C4/IN4I+73Kn5P3fOffn+AgXUqBocGK4QriIiKfoaNjip4LJKTT5eHU5qJnJJWjVUhACH5BAUBAB8ALAkAFgAnABoAAAV04CeOZGmepdM0Duq+5yo3cO2qcwPZPJnLveBvFezhZrsi76cM4lrNqHRKrVpPhmoBZuh2o4VwGOUtK8VoU9lcRKdJazbP/R7Fv236tnQ/If4IJ3pYa36Af4JuLl6Gh4gmYlKOgFclk4+VIpeBmSOTnZaUTSEAIfkEBQEAHwAsBAAWACcAGgAABXfg9xmkIZ5oqq5rWbJwnLqubLP0e+9nTvJAnwnIyxGJtaNyyWw6n1Ao4hmRIa7XpaPBbbCw4OO2y1WBw0Ryt4o6o3cRNdeRcmfTcojZvSr4CytyXntvKH9/gWR6X3cph4crEQ6LSo+IUYaWgJgnmpucIpagjpc3IQAh+QQFAQAfACwEAAkAGgAnAAAFb+AnjqJhkmiamqyhvmjLwrA806p946Tu8isbMNca1ozIpHLJTCKeiCYUupxOlVaqMxvdZqtWqbZJLpvPyEK5wGYz23AlPJ6c0412t9yucjQaDi98KX+FDTBtfYZ/gUmLhUqPf0p+i42Oi00QfxAiIQAh+QQFAQAfACwEAAQAGgAnAAAFc+AnjmRZGqhhrmyasrDounE7o/V64yvi6zuTb4gA0oTEn+lYSg5zSGcROpJOqVUntknc9rzgsHhMLhXOhTEaHV6vwW62N36G09tutbzM7/v/JhFlDYQNDmKFhYdeEYmFYA6OhIJbEJINYZdhlolkEA6UUCEAIfkEAQEAHwAsBAAEACcAGgAABXXgJ45kWSIoYq5sS6apK8swPN9mHeP8p6O9UmG4+qlMhmRryCwUa6uk1LBqMp9A5FQptBKDW2nX6+SFxSRyuXemjpvBz5lljYu2srX9vu/7/4CBgh8NhQ6DK4WKDYgkEIuGjSKQipKElIySj5CHlpSWIw6RoCEAOw==)}.GPwidget{color:#333;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:13px;pointer-events:auto;position:absolute}.GPwidget input[type=button],.GPwidget input[type=text]{-webkit-appearance:none;appearance:none;color:#333}.GPwidget input[type=checkbox]{display:none}.GPwidget select{border-radius:3px;padding-left:3px}.GPwidget form{margin-bottom:0}.GPwidget *{background-repeat:no-repeat;box-sizing:border-box}:root{--size-per-row:32px}#position-container-bottom-left,#position-container-bottom-right,#position-container-top-left,#position-container-top-right{border-style:solid;display:flex;flex-direction:column;justify-content:center;min-height:var(--size-per-row);position:absolute;width:var(--size-per-row)}#position-container-top-left,#position-container-top-right{top:0}#position-container-top-left{float:left;left:0}#position-container-top-right{float:right;right:0}#position-container-bottom-left,#position-container-bottom-right{bottom:0}#position-container-bottom-right{float:right;right:0}#position-container-bottom-left{float:left;left:0}.GPpanel{background-color:#fff;border:unset;border-radius:4px;box-shadow:0 0 6px #000;padding:unset}.GPpanelHeader{background-color:#9db1bd;border-top-left-radius:4px;border-top-right-radius:4px;height:32px;padding:3px;position:relative;width:100%}.GPpanelTitle{background-color:#366291;border-top-left-radius:2px;border-top-right-radius:2px;color:#fff;font-weight:700;height:100%;line-height:26px;text-align:center;width:100%}.GPpanelClose,.GPpanelIcon,.GPpanelInfo,.GPpanelReduce,.GPresetPicto,.GPreturnPicto{background-color:#366291;border:none;cursor:pointer;height:26px;position:absolute;width:26px}.GPpanelClose{background-position:-27px 0;right:3px;top:3px}.GPpanelInfo,.GPreturnPicto{left:3px;top:3px}.GPpanelReduce{right:32px;top:3px}.GPresetPicto,.GPreturnPicto{border-radius:3px;opacity:1}.GPshowAdvancedToolPicto{background-color:hsla(0,0%,100%,.4);border:2px solid hsla(0,0%,100%,.4);border-radius:4px;box-sizing:border-box;cursor:pointer;height:32px;padding:2px;position:relative;width:32px}.GPshowAdvancedToolPicto:hover{background-color:hsla(0,0%,100%,.6)}.GPshowAdvancedToolOpen{background-color:rgba(0,60,136,.5);border-radius:2px;box-sizing:border-box;display:block;height:26px;position:absolute;width:26px}.GPshowAdvancedToolPicto:hover .GPshowAdvancedToolOpen{background-color:rgba(0,60,136,.7)}.GPshowOpen{background-color:rgba(0,60,136,.5)}.GPshowOpen:hover{background-color:rgba(0,60,136,.7)}.GPwaitingContainer{background-color:hsla(0,0%,100%,.9);border-radius:4px;bottom:0;font-size:1.5em;font-weight:700;left:0;overflow:hidden;position:absolute;right:0;top:32px}.GPwaitingContainerVisible{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex}.GPwaitingContainerHidden{display:none}.GPwaitingContainerInfo{margin:auto}.GPflexInput{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;transition:max-height .3s ease-out,opacity .3s ease-out}.GPflexInput>*{border:1px solid #999;border-radius:0;display:block;height:28px;line-height:26px}.GPflexInput :not(:last-child){border-right:none}.GPflexInput :first-child{border-radius:3px 0 0 3px}.GPflexInput :last-child{border-radius:0 3px 3px 0}.GPflexInput>:not(input){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.GPflexInput>input{min-width:0;padding:0 5px}.GPflexInput>input,.GPflexInput>select{-webkit-flex:1;-webkit-box-flex:1;-ms-flex:1;flex:1}.GPflexInput>select{padding-right:7px}.GPflexInput>label{background-color:#f2f2f2;color:#666;cursor:pointer;padding-left:7px;padding-right:9px}input.GPsubmit{background:none;background-color:#366291;border:none;border-radius:3px;color:#fff;cursor:pointer;display:block;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-weight:700;height:28px;line-height:26px;margin:auto;opacity:.8;padding:0;transition:opacity .2s ease-out;width:80px}input.GPsubmit:hover{opacity:1}.GPselect{border:1px solid #999;color:#333;cursor:pointer;display:block;height:28px;line-height:26px;margin:auto}.GPform{padding:15px}.GPelementHidden,.GPelementInvisible{display:none;opacity:0;visibility:hidden}.GPelementShow,.GPelementVisible{display:block;opacity:100%;visibility:visible}.GPadvancedAutoCompleteList,.GPautoCompleteList{z-index:2}.GPadvancedAutoCompleteList{border-top:none;font-size:.9em;width:calc(100% - 28px)}.GPautoCompleteProposal{color:#5e5e5e;cursor:pointer;font-size:1em;height:28px;line-height:16px;margin-bottom:0;overflow:hidden;padding:6px 10px;text-overflow:ellipsis;white-space:nowrap;width:100%}.GPautoCompleteProposal:hover{background-color:#cedbef;color:#000}.GPshowMoreOptionsImage{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAA7ElEQVRIx+3UvUoDQRSG4ffMLhbaLIEFvQSxtN1ALiGymkswpZVoupS6Vt6BYBMWf+s0Kaa1FG9BEBYbDQRnj4UKqTRgtjtPeWaYb4YPBowxpmmyyKbs6PpJVCfVan3wOOzN5te2huVK692dq0jHn+abf53lFrqWMlKRfjKNxu1Bmf6M24MyTabRWEX6KKOlvRAgO77ZQ/UCqBDXdSqzmnAPbKDs+yK/XGrgV+jtNlrfAcn36BVxXX+y89BYh+kbrQ+JrgBiDbsva1SNdhhigi/yzBd5FmKCdfivQIDOYbk+3+HkrPds35kx5lef+y50/JHC/FoAAAAASUVORK5CYII=)}.GPshowMoreOptions{cursor:pointer;display:block;height:28px;position:absolute;transition:all .5s ease-out 0s;width:28px}button[aria-pressed=true].GPshowMoreOptions,input[type=checkbox]:checked+.GPshowMoreOptions{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.gp-feature-info-div{background-color:#fff;border-radius:10px;bottom:17px;box-shadow:0 0 5px #000;color:#002a50;font-family:Open Sans,sans-serif;font-size:.75em;max-width:calc(100vw - 80px);padding:10px;position:relative}.gp-feature-info-div:before{border-left:14px solid transparent;border-right:14px solid transparent;border-top:15px solid #fff;bottom:-15px;content:"";left:50%;margin-left:-14px;position:absolute}.gp-feature-info-div .closer{background-color:#fff;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwYjc5OCIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:14px 14px;border:none;border-bottom-right-radius:10px;border-top-right-radius:10px;cursor:pointer;display:block;height:30px;position:absolute;right:0;top:0;width:30px}.gp-features-content-div{max-height:340px;max-width:420px;min-width:260px;overflow:auto}.gp-features-content-div h5,.gp-features-content-div h6,.gp-features-content-div p,.gp-features-content-div ul{margin:0}.gp-features-content-div ul{list-style-type:none;padding:0}.geoportail-popup-content h5,.geoportail-popup-content h6,.geoportail-popup-content p,.gp-att-description-div,.gp-att-name-div,.gp-att-others-div{padding:0 10px}.geoportail-popup-content h5:not(:last-child),.geoportail-popup-content h6:not(:last-child),.geoportail-popup-content p:not(:last-child),.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){margin-bottom:15px}.geoportail-popup-content h5:last-child,.geoportail-popup-content h6:last-child,.geoportail-popup-content p:last-child,.gp-att-description-div:last-child,.gp-att-name-div,.gp-att-others-div:last-child{margin-bottom:10px}.geoportail-popup-content h5:first-child,.geoportail-popup-content h6:first-child,.geoportail-popup-content p:first-child,.gp-att-description-div:first-child,.gp-att-name-div:first-child,.gp-att-others-div:first-child{margin-top:10px}.gp-att-name-div,.gp-features-content-div h5{color:#0b6ba7;font-size:1.2em;font-weight:700;padding-right:35px;text-transform:uppercase}.gp-features-content-div h6{font-size:1.1em}.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){border-bottom:1px dotted #666;padding-bottom:10px}.gpf-radio-btn-group{display:flex;gap:1em}.gpf-btn-icon{caret-color:transparent}[id^=GPdrawingPanel-]{width:240px}.GPshowDrawingPicto{background-position:1px;background-repeat:no-repeat}.GPdrawingPanelClose,.GPshowDrawingPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGCSURBVFiF7da/Sh1BFMfxuXZa2AuWgkoa0SqP4StoUoi2PklyBZXUNlpZWGmq5AmiYghpAv5pAoKW+rFwFq/D3NXdu5fb7K9ahjPnd757Zs9OCK1atWrVlDCHvzjB5KjrGVg49aKfdaHwGdsYK4np4As26lf8diF7XqsyVIR5iPt3c1AR5muMeWwUCrM4wwEmcZhAHVfM1032b6GTwGwlMd0mYS57Eh9loP5UzFkcpV7tYizpTKGdXBebgEmh9vALczVy94NKuzd0mEL7DXjkoEYCA+cDG4VSqOywyKk0CLMhhO8hhKmSsOsQwvL7y35TnXeuVRMm8Bu3JZ25UuOb6eOXGwC1utTPYBXfsIT/GYMbfBgizE5mrT6U5+vMYnz+mHTqCvNDhinGdnakVzWZxj1metYKqMZgYt7h/1ixGTf+wwwWPB+/iyZhotcnL1ef7GhOOvWI9aomP3rexl08fisYb4zktd9a7FTfaRahulirY3AZoTYxPVC1rVq1ajVKPQEmCKhvk/LblAAAAABJRU5ErkJggg==)}.GPdrawingCoords,.GPdrawingLabel{display:inline-block;line-height:20px}.GPdrawingLabel{font-weight:700;width:80px}.GPdrawingCoords{width:110px}.marker-input-radio{display:none}input.marker-input-radio:checked+label{border:1px solid red}.drawing-tool{background-color:#e9edf0;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MjAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA3MjAgNDAiPjxkZWZzPjxjbGlwUGF0aCBpZD0iYiI+PHBhdGggZD0iTTAgODk2aDg5NlYwSDBaIi8+PC9jbGlwUGF0aD48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGQ9Ik0wIDg5Nmg4OTZWMEgwWiIvPjwvY2xpcFBhdGg+PC9kZWZzPjxwYXRoIGQ9Im04Ny40MyAzMi41MjYgNS0xNSAxNSAxMCA1LTIwIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDBiNzk4O3N0cm9rZS13aWR0aDoyIi8+PHBhdGggZD0iTTg1Ljk0MiAzMC4wNjJ2NGg0di00em00LjgyMy0xNC4xMTZ2NGg0di00em0xNC41MjUgOS4xNzJ2NGg0di00em00Ljc3LTE5LjE4djRoNHYtNHoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNlOWVkZjA7c3Ryb2tlLXdpZHRoOjEuNSIvPjxwYXRoIGQ9Im0xMjcuNDMgMzIuNTI2IDUtMTUgMTUgMTAgNS0yMCIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZmZjtzdHJva2Utd2lkdGg6MiIvPjxwYXRoIGQ9Ik0xMjUuOTQgMzAuMDYydjRoNHYtNHptNC44My0xNC4xMTZ2NGg0di00em0xNC41MiA5LjE3MnY0aDR2LTR6bTQuNzctMTkuMTh2NGg0di00eiIgc3R5bGU9ImZpbGw6I2ZmZjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMmE1MDtzdHJva2Utd2lkdGg6MS41Ii8+PGcgc3R5bGU9ImZpbGw6IzAwYjc5ODtmaWxsLXJ1bGU6ZXZlbm9kZCI+PHBhdGggZD0ibTE2OC4zMSAyOS45MzggMy0xOS44NzUgMTQuNzUtMyA1IDI1Ljg3NXoiIHN0eWxlPSJmaWxsLW9wYWNpdHk6LjQ7c3Ryb2tlOiMwMGI3OTg7c3Ryb2tlLXdpZHRoOjIiLz48cGF0aCBkPSJNMTgzLjk0IDUuMDYzdjRoNHYtNHptLTE0Ljc1IDMuMjV2NGg0di00em0tMi44OCAxOS42MjV2NGg0di00em0yMy4zOCAzdjRoNHYtNHoiIHN0eWxlPSJzdHJva2U6I2U5ZWRmMDtzdHJva2Utd2lkdGg6MS41Ii8+PC9nPjxnIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQiPjxwYXRoIGQ9Im0yMDguMzEgMjkuOTM4IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbC1vcGFjaXR5Oi40O3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDoyIi8+PHBhdGggZD0iTTIyMy45NCA1LjA2M3Y0aDR2LTR6bS0xNC43NSAzLjI1djRoNHYtNHptLTIuODggMTkuNjI1djRoNHYtNHptMjMuMzggM3Y0aDR2LTR6IiBzdHlsZT0ic3Ryb2tlOiMwMDJhNTA7c3Ryb2tlLXdpZHRoOjEuNSIvPjwvZz48cGF0aCBkPSJtMjYxLjgxIDMwLjc0LTEuNTUzLTUuMDk4aC03LjgwN2wtMS41NTMgNS4wOThoLTQuODkzbDcuNTYtMjEuNTA0aDUuNTVsNy41OSAyMS41MDR6bS0yLjYzNy04LjkwNnEtMi4xNTMtNi45My0yLjQzLTcuODM3LS4yNjUtLjkwOC0uMzgyLTEuNDM2LS40ODMgMS44NzYtMi43NjggOS4yNzR6IiBzdHlsZT0iZmlsbDojMDBiNzk4Ii8+PGcgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwYjc5OCI+PHBhdGggZD0iTTI3MS41IDMxLjA0di0yMiIvPjxwYXRoIGQ9Ik0yNjkgOC41Nmg1bS01IDIyLjg4aDUiIHN0eWxlPSJzdHJva2Utd2lkdGg6MS4xMTgwMDAwMyIvPjwvZz48dGV4dCB4PSIyODYiIHk9IjMwLjc1MiIgZm9udC1zaXplPSIxMi41IiBsZXR0ZXItc3BhY2luZz0iMCIgc3R5bGU9ImZvbnQtc2l6ZToxMi41cHg7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowO3dvcmQtc3BhY2luZzowO2ZpbGw6I2ZmZiIgd29yZC1zcGFjaW5nPSIwIj4KICAgIDx0c3BhbiB4PSIyODYiIHk9IjMwLjc1MiIgZm9udC1zaXplPSIzMCIgZm9udC13ZWlnaHQ9ImJvbGQiIHN0eWxlPSJmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjMwcHg7Zm9udC1mYW1pbHk6JnF1b3Q7T3BlbiBTYW5zJnF1b3Q7Ij5BPC90c3Bhbj4KICA8L3RleHQ+PGcgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZmZiI+PHBhdGggZD0iTTMxMS41IDMxLjA0di0yMiIvPjxwYXRoIGQ9Ik0zMDkgOC41Nmg1bS01IDIyLjg4aDUiIHN0eWxlPSJzdHJva2Utd2lkdGg6MS4xMTgwMDAwMyIvPjwvZz48cGF0aCBkPSJtMzU2LjY0IDIxLjc4Mi0zLjQxNi0zLjQxNGExLjIxIDEuMjEgMCAwIDAtMS43MDggMGwtLjg1NC44NTRjLS40Ny40Ny0uNDcgMS4yMzUgMCAxLjcwNmwzLjQxNiAzLjQxNGExLjIxIDEuMjEgMCAwIDAgMS43MDggMGwuODU0LS44NTNhMS4yMDcgMS4yMDcgMCAwIDAgMC0xLjcwOG0tMTAuNzE0IDEwLjkzYy0uMDA1IDAtLjAxMi4wMS0uMDIuMDEzLS4wMDQgMC0uMDEuMDEtLjAxNC4wMS0uMDA1IDAtLjAxLjAxLS4wMTYuMDEtLjAwNSAwLS4wMS4wMS0uMDE3LjAxLS4yLjEyLS43ODMuNDI1LTIuMi45MzdxLS4yNDkuMDktLjUzNC4xOWwtMi4wMTQtMi4wMTNjLjA2Ni0uMTkuMTMtLjM3My4xOS0uNTQuNTEtMS40Mi44MTgtMi4wMDQuOTM2LTIuMjAyLjAwMyAwIC4wMDYtLjAxLjAwOC0uMDEzLjAwNC0uMDEuMDA4LS4wMTMuMDEyLS4wMi4wMDMgMCAuMDA2LS4wMS4wMDgtLjAxMnEuMDA4LS4wMTMuMDEzLS4wMmwuMTQ2LS4xNDcgMy42NSAzLjY0Ny0uMTUuMTV6bTMuODgyLTEwLjkzYTEuMjEgMS4yMSAwIDAgMC0xLjcwOCAwbC0uNDI3LjQyNy01Ljk3NyA1Ljk3M2guMDAybC0uMTkuMTg4cy0uNi42MDUtMS45NTYgNC45NzZxLS4wMTUuMDQ0LS4wMjguMDkyLS4wMzcuMTE3LS4wNzQuMjQtLjAzLjEwNi0uMDY2LjIxNmwtLjA1Ni4xODYtLjEzLjQ0Yy0uMDk4LjMzLS4zMzYgMS4wNzQtLjA2NyAxLjM0My4yNi4yNiAxLjAxNC4wMyAxLjM0My0uMDY2bC40MzctLjEzLjE5NC0uMDZxLjEwNC0uMDMuMjA1LS4wNjJsLjI1LS4wNzdxLjAzOC0uMDEzLjA3My0uMDIzYzQuMTY2LTEuMjk1IDQuOTE0LTEuOTAzIDQuOTc2LTEuOTZoLjAwNGwuMTkzLS4xOTIuMDEyLjAxMyA1Ljk3Ny01Ljk3NC40MjctLjQyN2ExLjIwNiAxLjIwNiAwIDAgMCAwLTEuNzA3bC0zLjQxNi0zLjQxNHoiIHN0eWxlPSJmaWxsOiMwMGI3OTgiLz48cGF0aCBkPSJtMzI5IDgtMiAydjE2bDIgMmgxMGw4LThWMTBsLTItMnoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQiLz48ZyBzdHlsZT0iZmlsbDojZmZmIj48cGF0aCBkPSJtMzk2LjY0IDIxLjc4Mi0zLjQxNi0zLjQxNGExLjIxIDEuMjEgMCAwIDAtMS43MDggMGwtLjg1NC44NTRjLS40Ny40Ny0uNDcgMS4yMzUgMCAxLjcwNmwzLjQxNiAzLjQxNGExLjIxIDEuMjEgMCAwIDAgMS43MDggMGwuODU0LS44NTNhMS4yMDcgMS4yMDcgMCAwIDAgMC0xLjcwOG0tMTAuNzE0IDEwLjkzYy0uMDA1IDAtLjAxMi4wMS0uMDIuMDEzLS4wMDQgMC0uMDEuMDEtLjAxNC4wMS0uMDA1IDAtLjAxLjAxLS4wMTYuMDEtLjAwNSAwLS4wMS4wMS0uMDE3LjAxLS4yLjEyLS43ODMuNDI1LTIuMi45MzdxLS4yNDkuMDktLjUzNC4xOWwtMi4wMTQtMi4wMTNjLjA2Ni0uMTkuMTMtLjM3My4xOS0uNTQuNTEtMS40Mi44MTgtMi4wMDQuOTM2LTIuMjAyLjAwMyAwIC4wMDYtLjAxLjAwOC0uMDEzLjAwNC0uMDEuMDA4LS4wMTMuMDEyLS4wMi4wMDMgMCAuMDA2LS4wMS4wMDgtLjAxMnEuMDA4LS4wMTMuMDEzLS4wMmwuMTQ2LS4xNDcgMy42NSAzLjY0Ny0uMTUuMTV6bTMuODgyLTEwLjkzYTEuMjEgMS4yMSAwIDAgMC0xLjcwOCAwbC0uNDI3LjQyNy01Ljk3NyA1Ljk3M2guMDAybC0uMTkuMTg4cy0uNi42MDUtMS45NTYgNC45NzZxLS4wMTUuMDQ0LS4wMjguMDkyLS4wMzcuMTE3LS4wNzQuMjQtLjAzLjEwNi0uMDY2LjIxNmwtLjA1Ni4xODYtLjEzLjQ0Yy0uMDk4LjMzLS4zMzYgMS4wNzQtLjA2NyAxLjM0My4yNi4yNiAxLjAxNC4wMyAxLjM0My0uMDY2bC40MzctLjEzLjE5NC0uMDZxLjEwNC0uMDMuMjA1LS4wNjJsLjI1LS4wNzdxLjAzOC0uMDEzLjA3My0uMDIzYzQuMTY2LTEuMjk1IDQuOTE0LTEuOTAzIDQuOTc2LTEuOTZoLjAwNGwuMTkzLS4xOTIuMDEyLjAxMyA1Ljk3Ny01Ljk3NC40MjctLjQyN2ExLjIwNiAxLjIwNiAwIDAgMCAwLTEuNzA3bC0zLjQxNi0zLjQxNHoiIHN0eWxlPSJzdHJva2U6I2VmZjtzdHJva2Utd2lkdGg6LjAzIi8+PHBhdGggZD0ibTM2OSA4LTIgMnYxNmwyIDJoMTBsOC04VjEwbC0yLTJ6bTkxLjUzIDE1Ljk3Yy0zLjE2IDEuNjMtMS4xNTcgNS41MzQtNC43NCA2LjgwMy0zLjc2MyAxLjMzNC02Ljg5Mi0zLjQ5Mi03LjY3Ni02Ljk2My0uMy0xLjMzMy0uOTItMTIuMzE0IDExLjEzOC0xNC41OTMgOS40MDctMS43NzggMTIuNjU3IDcuODU0IDEyLjcyIDEwLjg5LjA1OCAyLjg5LjM3IDkuMDQtNC40NCA4Ljk2Mi00LjA2LS4wNjYtMy4yMDMtNC4wNjQtNi44OC01LjAzOC0xLjk1Ni0uNTE4LS4xMjItLjA2Mi0uMTIyLS4wNjJ6IiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQiLz48L2c+PGVsbGlwc2UgY3g9IjQ1NC4xOSIgY3k9IjI0LjgxMiIgcng9IjIuNDM4IiByeT0iMi41IiBzdHlsZT0iZmlsbDojMDAyYTUwIi8+PGcgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMmE1MDtzdHJva2Utd2lkdGg6MS43MzU5OTk5NDtzdHJva2UtbGluZWNhcDpyb3VuZCI+PHBhdGggZD0ibTQ1Mi43OCAxOC41NCA0LjM0LTIuNjA0bS0zLjQ4Ljg3NCAyLjYwNC0xLjczNm0tMS43MzQgMy40NjYgMS43MzYtLjg2OE00NjEuNDcgMTcuMTNsNC4zNC0yLjYwNG0tMy40Ny44NjQgMi42MDQtMS43MzZtLTEuNzM0IDMuNDc2IDEuNzM2LS44NjhNNDY0LjkxIDIzLjIybDQuMzQtMi42MDRtLTMuNDguODY0IDIuNjA0LTEuNzM2bS0xLjczNCAzLjQ3NiAxLjczNi0uODY4Ii8+PC9nPjxwYXRoIGQ9Ik00MjAuNTMgMjMuOTdjLTMuMTYgMS42My0xLjE1NyA1LjUzNC00Ljc0IDYuODAzLTMuNzYzIDEuMzM0LTYuODkyLTMuNDkyLTcuNjc2LTYuOTYzLS4zLTEuMzMzLS45Mi0xMi4zMTQgMTEuMTM4LTE0LjU5MyA5LjQwNy0xLjc3OCAxMi42NTcgNy44NTQgMTIuNzIgMTAuODkuMDU4IDIuODkuMzcgOS4wNC00LjQ0IDguOTYyLTQuMDYtLjA2Ni0zLjIwMy00LjA2NC02Ljg4LTUuMDM4LTEuOTU2LS41MTgtLjEyMi0uMDYyLS4xMjItLjA2MnoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQiLz48ZWxsaXBzZSBjeD0iNDE0LjE5IiBjeT0iMjQuODEyIiByeD0iMi40MzgiIHJ5PSIyLjUiIHN0eWxlPSJmaWxsOiNlOWVkZjAiLz48ZyBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZWRlZmYwO3N0cm9rZS13aWR0aDoxLjczNTk5OTk0O3N0cm9rZS1saW5lY2FwOnJvdW5kIj48cGF0aCBkPSJtNDEyLjc4IDE4LjU0IDQuMzQtMi42MDRtLTMuNDguODc0IDIuNjA0LTEuNzM2bS0xLjczNCAzLjQ2NiAxLjczNi0uODY4TTQyMS40NyAxNy4xM2w0LjM0LTIuNjA0bS0zLjQ3Ljg2NCAyLjYwNC0xLjczNm0tMS43MzQgMy40NzYgMS43MzYtLjg2OE00MjQuOTEgMjMuMjJsNC4zNC0yLjYwNG0tMy40OC44NjQgMi42MDQtMS43MzZtLTEuNzM0IDMuNDc2IDEuNzM2LS44NjgiLz48L2c+PGcgY2xpcC1wYXRoPSJ1cmwoI2EpIiBzdHlsZT0iZmlsbDojMDBiNzk4IiB0cmFuc2Zvcm09Im1hdHJpeCguMDI5NzYgMCAwIC0uMDI5MDIgNi42NjcgMzMpIj48cGF0aCBkPSJNNDQ4IDQ0OGMtNjEuNzcyIDAtMTEyIDUwLjIzLTExMiAxMTJzNTAuMjI4IDExMiAxMTIgMTEyYzYxLjc3IDAgMTEyLTUwLjIzIDExMi0xMTJzLTUwLjIzLTExMi0xMTItMTEybTAgNDQ4Yy0xODUuMjggMC0zMzYtMTUwLjcyLTMzNi0zMzYgMC03MC41ODcgMjEuOTU4LTEzOC4zIDYzLjQyNC0xOTUuODlsOC44MTgtMTIuMzYgMjQxLjM2LTM0MC41NEM0MzAuODk4IDQuMTYgNDM5LjIxMiAwIDQ0OC4wMDIgMGEyOC4wMyAyOC4wMyAwIDAgMSAyMi4zOTQgMTEuMjFsMjM4LjM2IDMzNi40OSAxMS43NiAxNi4zYzQxLjUzIDU3LjY5NyA2My40OSAxMjUuNDEgNjMuNDkgMTk2IDAgMTg1LjI4LTE1MC43MiAzMzYtMzM2IDMzNiIvPjwvZz48ZyBjbGlwLXBhdGg9InVybCgjYikiIHN0eWxlPSJmaWxsOiNmZmYiIHRyYW5zZm9ybT0ibWF0cml4KC4wMjk3NiAwIDAgLS4wMjkwMiA0Ni42NjcgMzMpIj48cGF0aCBkPSJNNDQ4IDQ0OGMtNjEuNzcyIDAtMTEyIDUwLjIzLTExMiAxMTJzNTAuMjI4IDExMiAxMTIgMTEyYzYxLjc3IDAgMTEyLTUwLjIzIDExMi0xMTJzLTUwLjIzLTExMi0xMTItMTEybTAgNDQ4Yy0xODUuMjggMC0zMzYtMTUwLjcyLTMzNi0zMzYgMC03MC41ODcgMjEuOTU4LTEzOC4zIDYzLjQyNC0xOTUuODlsOC44MTgtMTIuMzYgMjQxLjM2LTM0MC41NEM0MzAuODk4IDQuMTYgNDM5LjIxMiAwIDQ0OC4wMDIgMGEyOC4wMyAyOC4wMyAwIDAgMSAyMi4zOTQgMTEuMjFsMjM4LjM2IDMzNi40OSAxMS43NiAxNi4zYzQxLjUzIDU3LjY5NyA2My40OSAxMjUuNDEgNjMuNDkgMTk2IDAgMTg1LjI4LTE1MC43MiAzMzYtMzM2IDMzNiIvPjwvZz48cGF0aCBkPSJtNjExLjkzIDExLjkzIDE2LjE0OCAxNi4xNDhtLS4wMDgtMTYuMTQ4LTE2LjE0OCAxNi4xNDgiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZmY7c3Ryb2tlLXdpZHRoOjMuODEzOTk5ODk7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIi8+PHBhdGggZD0ibTU3MS45MyAxMS45MyAxNi4xNDggMTYuMTQ4bS0uMDA4LTE2LjE0OC0xNi4xNDggMTYuMTQ4IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDBiNzk4O3N0cm9rZS13aWR0aDozLjgxMzk5OTg5O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZCIvPjxwYXRoIGQ9Im00ODcgMzAuMDQgMS4wMDQtNkw0OTMgMjkuMDN6IiBzdHlsZT0iZmlsbDojMDBiNzk4O2ZpbGwtcnVsZTpldmVub2RkIi8+PGcgc3R5bGU9ImZpbGw6IzAwYjc5OCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQ4IC05NzIuMzYpIj48Y2lyY2xlIGN4PSI1NDEiIGN5PSI5ODcuMzYiIHI9IjUiLz48Y2lyY2xlIGN4PSI1NTUiIGN5PSI5ODcuMzYiIHI9IjUiLz48Y2lyY2xlIGN4PSI1NTUiIGN5PSI5OTYuMzYiIHI9IjUiLz48cmVjdCB3aWR0aD0iMTQiIGhlaWdodD0iMTEiIHg9IjU0MSIgeT0iOTgyLjM2IiByeD0iMCIgcnk9IjAiLz48cGF0aCBkPSJNNTUwIDk4Ny4zNmgxMHY5aC0xMHoiLz48cGF0aCBkPSJNNTQ0IDk5My4zNmgxMXY4aC0xMXptLTgtNmg3djZoLTd6Ii8+PHBhdGggZD0ibTUzNiA5OTMuMzYgOCA4di04eiIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkIi8+PC9nPjxwYXRoIGQ9Ik00OTMgMTRoMTV2MWgtMTV6bTAgNGgxNXYxaC0xNXptMyA0aDEydjFoLTEyeiIgc3R5bGU9ImZpbGw6I2VkZWZmMCIvPjxwYXRoIGQ9Im01MjcgMzAgMS4wMDQtNkw1MzMgMjguOTl6IiBzdHlsZT0iZmlsbDojZmZmO2ZpbGwtcnVsZTpldmVub2RkIi8+PGcgc3R5bGU9ImZpbGw6I2ZmZiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTggLTk3Mi4zNikiPjxjaXJjbGUgY3g9IjU0MSIgY3k9Ijk4Ny4zNiIgcj0iNSIvPjxjaXJjbGUgY3g9IjU1NSIgY3k9Ijk4Ny4zNiIgcj0iNSIvPjxjaXJjbGUgY3g9IjU1NSIgY3k9Ijk5Ni4zNiIgcj0iNSIvPjxyZWN0IHdpZHRoPSIxNCIgaGVpZ2h0PSIxMSIgeD0iNTQxIiB5PSI5ODIuMzYiIHJ4PSIwIiByeT0iMCIvPjxwYXRoIGQ9Ik01NTAgOTg3LjM2aDEwdjloLTEweiIvPjxwYXRoIGQ9Ik01NDQgOTkzLjM2aDExdjhoLTExem0tOC02aDd2NmgtN3oiLz48cGF0aCBkPSJtNTM2IDk5My4zNiA4IDh2LTh6IiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQiLz48L2c+PHBhdGggZD0iTTUzMyAxNGgxNXYxaC0xNXptMCA0aDE1djFoLTE1em0zIDRoMTJ2MWgtMTJ6IiBzdHlsZT0iZmlsbDojMDAyYTUwIi8+PHBhdGggZD0ibTY0OC45MjggMjkuNjM1IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbDojMDBiNzk4O2ZpbGwtb3BhY2l0eTouNDtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwYjc5ODtzdHJva2Utd2lkdGg6MiIvPjxnIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQiPjxwYXRoIGQ9Im0yMDguMzEgMjkuOTM4IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbC1vcGFjaXR5Oi40O3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDoyIiB0cmFuc2Zvcm09Im1hdHJpeCguNDg0NzYgMCAwIC40NTk4OSA1NTMuMjgzIDEwLjkzKSIvPjxwYXRoIGQ9Ik0yMjMuOTQgNS4wNjN2NGg0di00em0tMTQuNzUgMy4yNXY0aDR2LTR6bS0yLjg4IDE5LjYyNXY0aDR2LTR6bTIzLjM4IDN2NGg0di00eiIgc3R5bGU9InN0cm9rZTojMDAyYTUwO3N0cm9rZS13aWR0aDoxLjUiIHRyYW5zZm9ybT0ibWF0cml4KC40ODQ3NiAwIDAgLjQ1OTg5IDU1My4yODMgMTAuOTMpIi8+PC9nPjxwYXRoIGQ9Ik02NjEuODU1IDEzLjIxOHYxLjg0NmgxLjk0MXYtMS44NDZ6bS03LjE2IDEuNXYxLjg0N2gxLjk0MnYtMS44NDd6bS0xLjM5OCA5LjA1OXYxLjg0NmgxLjk0MnYtMS44NDZ6bTExLjM0OSAxLjM4NHYxLjg0N2gxLjk0MVYyNS4xNnoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNlOWVkZjA7c3Ryb2tlLXdpZHRoOi43MDk5OTU5MyIvPjxnIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQiPjxwYXRoIGQ9Im0yMDguMzEgMjkuOTM4IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbC1vcGFjaXR5Oi40O3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDoyIiB0cmFuc2Zvcm09Im1hdHJpeCguNDg0NzYgMCAwIC40NTk4OSA1OTEuMjgyIDEwLjk0NCkiLz48cGF0aCBkPSJNMjIzLjk0IDUuMDYzdjRoNHYtNHptLTE0Ljc1IDMuMjV2NGg0di00em0tMi44OCAxOS42MjV2NGg0di00em0yMy4zOCAzdjRoNHYtNHoiIHN0eWxlPSJzdHJva2U6IzAwMmE1MDtzdHJva2Utd2lkdGg6MS41IiB0cmFuc2Zvcm09Im1hdHJpeCguNDg0NzYgMCAwIC40NTk4OSA1OTEuMjgyIDEwLjk0NCkiLz48L2c+PC9zdmc+);background-size:720px 40px;border:unset;border-radius:10px;cursor:pointer;display:block;height:40px;width:40px}.drawing-tool-active{background-color:#002a50}button[id^=drawing-tool-point-]{background-position:0 0}button[id^=drawing-tool-point-].drawing-tool-active{background-position:-40px 0}button[id^=drawing-tool-line-].drawing-tool-active{background-position:-120px 0}button[id^=drawing-tool-line-]{background-position:-80px 0}button[id^=drawing-tool-holes-]{background-position:-640px 0}button[id^=drawing-tool-holes-].drawing-tool-active{background-position:-680px 0}button[id^=drawing-tool-polygon-]{background-position:-160px 0}button[id^=drawing-tool-polygon-].drawing-tool-active{background-position:-200px 0}button[id^=drawing-tool-text-]{background-position:-240px 0}button[id^=drawing-tool-text-].drawing-tool-active{background-position:-280px 0}button[id^=drawing-tool-edit-]{background-position:-320px 0}button[id^=drawing-tool-edit-].drawing-tool-active{background-position:-360px 0}button[id^=drawing-tool-display]{background-position:-400px 0}button[id^=drawing-tool-display-].drawing-tool-active{background-position:-440px 0}button[id^=drawing-tool-tooltip]{background-position:-480px 0}button[id^=drawing-tool-tooltip-].drawing-tool-active{background-position:-520px 0}button[id^=drawing-tool-remove]{background-position:-560px 0}button[id^=drawing-tool-remove-].drawing-tool-active{background-position:-600px 0}div.drawing-tools-flex-display{justify-content:space-between}button[id^=drawing-export-]{background-position:2px 0}.drawing-button{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMCAxMjAiPjxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwYjc5OCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjMiPjxwYXRoIGQ9Ik02ODggMzI2LjR2OGgyMHYtOG0tMTAtMTR2MTQiIHRyYW5zZm9ybT0ibWF0cml4KC42MDg2IDAgMCAuNTU5NSAtNDA5LjggLTEzNikiLz48cGF0aCBkPSJtNjkzIDMyMS40IDUgNSA1LTUiIHRyYW5zZm9ybT0ibWF0cml4KC42MDg2IDAgMCAuNTU5NSAtNDA5LjggLTEzNikiLz48L2c+PGcgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUwNSAtODU3LjQpIj48cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxNCIgeD0iNTEzIiB5PSI5MjUuNCIgcng9IjAiIHJ5PSIwIi8+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iOCIgeD0iNTE0IiB5PSI5MjUuNCIgcng9IjAiIHJ5PSIwIi8+PHBhdGggZD0iTTUxNSA5MzAuNGgxdjNoLTF6bTEgMWg4djJoLTh6Ii8+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTQiIHg9IjUyNiIgeT0iOTI1LjQiIHJ4PSIwIiByeT0iMCIvPjxwYXRoIGQ9Ik01MjUgOTI1LjRoMXY4aC0xem0tMSA1aDF2M2gtMXptLTkgNGgxMHYyaC0xMHptNSAyaDV2M2gtNXptLTMgMWgydjJoLTJ6bS0yLTFoMXYzaC0xem00LTExaDV2NWgtNXptLTMgM2gzdjJoLTN6bTAtM2gxdjNoLTF6bTEgMGgydjFoLTJ6Ii8+PC9nPjxnIGZpbGw9IiMwMGI3OTgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01NDAgLTgyNy40KSI+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTQiIHg9IjU0OCIgeT0iOTI1LjQiIHJ4PSIwIiByeT0iMCIvPjxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjgiIHg9IjU0OSIgeT0iOTI1LjQiIHJ4PSIwIiByeT0iMCIvPjxwYXRoIGQ9Ik01NTAgOTMwLjRoMXYzaC0xem0xIDFoOHYyaC04eiIvPjxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjE0IiB4PSI1NjEiIHk9IjkyNS40IiByeD0iMCIgcnk9IjAiLz48cGF0aCBkPSJNNTYwIDkyNS40aDF2OGgtMXptLTEgNWgxdjNoLTF6bS05IDRoMTB2MmgtMTB6bTUgMmg1djNoLTV6bS0zIDFoMnYyaC0yem0tMi0xaDF2M2gtMXptNC0xMWg1djVoLTV6bS0zIDNoM3YyaC0zem0wLTNoMXYzaC0xem0xIDBoMnYxaC0yeiIvPjwvZz48ZyBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIzIj48cGF0aCBkPSJNNjg4IDMyNi40djhoMjB2LThtLTEwLTE0djE0IiB0cmFuc2Zvcm09Im1hdHJpeCguNjA4NiAwIDAgLjU1OTUgLTQwOS44IC0xNjYpIi8+PHBhdGggZD0ibTY5MyAzMjEuNCA1IDUgNS01IiB0cmFuc2Zvcm09Im1hdHJpeCguNjA4NiAwIDAgLjU1OTUgLTQwOS44IC0xNjYpIi8+PC9nPjwvc3ZnPg==);background-size:30px 120px;font-size:.7em;height:30px;line-height:30px;margin:auto;padding-left:30px;padding-right:15px}.tool-form-submit{background-color:#00b798;border:none;border-radius:20px;color:#fff;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:.9em;text-align:center;text-transform:uppercase}.gp-label-div,.gp-styling-div{background-color:#fff;border:unset;border-radius:10px;box-shadow:0 0 5px #000;box-sizing:border-box;font-size:.75em;position:relative;top:17px}.gp-label-div:before,.gp-styling-div:before{border-bottom:15px solid #fff;border-left:10px solid transparent;border-right:9px solid transparent;content:"";left:50%;margin-left:-10px;position:absolute;top:-15px}.gp-input-label-style,.gp-textarea-att-label-style{border:none}.gp-textarea-att-label-style{height:80px;resize:none;width:240px}.gp-input-measure-style{background-color:#fff;border-radius:10px;font-size:.75em;text-align:center;width:240px}.gp-textarea-att-label-style{display:block}.gp-label-div .closer{background-color:#fff;border-top-right-radius:10px}.gp-input-label-style{width:180px}.gp-label-div{padding:10px}.gp-styling-div{padding:50px 20px 20px;width:340px}.gp-styling-div:after{border-bottom:1px solid #bbb;content:"Modifier le style";display:block;font-size:1.2em;font-variant:small-caps;font-weight:700;height:30px;left:30px;line-height:30px;position:absolute;text-align:center;top:0;width:280px}.gp-label-div .gp-styling-button:not([class*=closer]){display:block;margin:10px auto auto}.gp-styling-button:not([class*=closer]){background-color:#00b798;border:none;border-radius:12px;color:#fff;display:inline-block;font-size:.9em;font-weight:700;height:24px;line-height:24px;margin-top:20px;text-align:center;text-transform:uppercase;width:140px}.gp-styling-button:not([class*=closer]):hover{background-color:#eef2f5;color:#00b798}.gp-styling-button:not([class*=closer])+.gp-styling-button:not([class*=closer]){margin-left:20px}.gp-label-div .closer,.gp-styling-div .closer{background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwYjc5OCIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:14px 14px;border:none;cursor:pointer;display:block;height:30px;position:absolute;right:0;top:0;width:30px}.gp-styling-option{font-size:11px;line-height:30px;padding:0 20px;position:relative}.gp-styling-option input{cursor:pointer;display:block;height:20px;padding:0;position:absolute;top:6px}.gp-styling-option input[type=checkbox]{background:none;border:none;height:10px;padding:0;right:70px}.gp-styling-option input[type=color]{background:none;border:none;padding:0;right:70px;width:30px}.gp-styling-option input[type=text]{background:none;border:1px solid grey;color:#0b6ba7;margin:none;padding:0 5px;right:40px;width:80px}.gp-styling-option input[type=range]{margin:0;right:40px;width:80px}.gp-styling-option input[type=range]:focus{box-shadow:none;outline:none}.gp-styling-option input[type=range]::-webkit-slider-runnable-track{-webkit-appearance:none;background-color:grey;height:1px}.gp-styling-option input[type=range]::-webkit-slider-thumb:before{height:1px;left:-200px;pointer-events:none;position:absolute;right:50%;top:0}.gp-styling-option input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background-color:#0b6ba7;border:none;border-radius:50%;height:13px;position:relative;top:-6px;width:13px}.gp-styling-option input[type=range]::-moz-range-track{background-color:grey;height:1px;width:70px}.gp-styling-option input[type=range]::-moz-range-thumb{background-color:#0b6ba7;border:none;border-radius:50%;box-shadow:0;height:13px;position:relative;width:13px}.gp-styling-option input[type=range]::-ms-track{background-color:grey;border:0;border-color:transparent;border-radius:0;border-width:0;color:transparent;height:1px;width:70px}.gp-styling-option input[type=range]::-ms-fill-lower,.gp-styling-option input[type=range]::-ms-fill-upper{background:transparent;border-radius:0}.gp-styling-option input[type=range]::-ms-thumb{background-color:#0b6ba7;border:none;border-radius:50%;height:13px;width:13px}.gp-styling-option input[type=range]::-ms-tooltip{display:none}.gp-styling-option .marker-input-radio{display:none}.gp-styling-option .marker-label{cursor:pointer;display:inline-block;height:32px;margin-bottom:5px;margin-right:5px;padding:3px}.gp-styling-option .marker-input-radio:checked+.marker-label{background-color:rgba(0,183,152,.5);border:1px solid #002a50;padding:2px}.gp-styling-option .marker-label img{height:24px}.ol-attribution .gp-control-attribution-image{max-height:30px;max-width:inherit;vertical-align:middle}.GPpanelHeader{padding:unset}[id^=GPelevationPathPanelClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAAAaCAYAAABb9hlrAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH4gEQEjITjE0MtwAABGJJREFUaN7tmU1oHGUYx//PZEvSLjHVBLVaerCXSgo5tAqxiqBSxcSLWqknFaNdaYjiwUMOVVGi2EORJg0xtgbx0FKVgmirRU17SUpjPsCVUhQtVOr6ES8mmpqdnwffhekw2dndbMK23T8MzMzzzsz7PP/3+ZjnlaqooooqrlhY7gSol3Rr7tLMTlfNs3gAJqnGncvMJMk3M7+Q5xOB8zsl9Ui6XtI/ktZXzVs6MpmMNTU1rZa0SdJNknLkSNI0MCrpTzPLFkSQmR0FspIGJb1UNXHpHjM3N9dUW1t7u6QHJW2V9KukPyQhqcEt/i8lHctms8Oe5/0WR5SAW4AfgWGgC1ixjEo9AwwAXj7Fgb1AZ6WSMzk56QGbgQPA98AUsBvYAKwCVgJrgV3AKeAccAi4f3x8vCbOSA8AB91xGEguIzlZ/sdgFEmOnF43xq9UkoBrgD7gZ+B13/c3u/uPAG8AbwEdkpTNZjcCLwJngE+AtYV8YEW+VbxESvVxKfa5xBokZ19oTF+lkTMzM+MB9wJngT0hHT8KzP2bkGwHcB54Ktb2wNtAb5EGbgAaFhOzXegKYhDwQp6TwzvLvYgK1CPpwtkZYEtI9iowCowBAyHZeuCEi1pr4j4yBBwscmK7gZ7FJtYFSOq7TMgx4A7gB6AvnU5bSF4H1LtjVVCWSqUMeN550eN59SuWIMf+HDAL3LwEJC0bOSPdCRvpTljwOiT3RroTdQvM3QPanYfcFiHvAj4GjgCvLWDHT4EX8hZnUQQBCRf6tkWMD8bW/WVaiVEkDZZKDmWCI6kmD0FtwNfAugXsetG96qsIeSPwfhRBXoxy10n6XFKXpEPAy7kEDtwl6eHA8CeA5nJ2N2LuxXrEEjiaX2a9YpHvv2ODpFOS7gl84BVHVFLSntAjNZLeXGRLZK+knRHipyUNFONFrT3zlDsExhjZJNVLuqGE16+W1BjX6rmk3JY06v56w9gmaUuufRFCO3C3mZ0oAzmDki4G7nXkytJC+lgj3Qlr7ZnHzIK5JW4V09ozz0h3Yo0zdJOk3yVlHOELkY6kaUnXSnoynU6PNTc3F7RAUqmUSWqX1CLpA0nZ2Bzkqo5ScbKEvBNZSucrwS+zMnsI+DcqB8WV2Uuh6Loix/eGPKdf0g4z880Ml//6A/IO520VhdnZ2b8lHXM2fTQkrg1Eq3AleJ/rzX0mKVNQiFtmTLjk67mw1umIyTVxAXY61+904eS7SiMomUz6wGlJxyU9BswARzzPG5P0oaSfXJ4+m2v1eJ63VdKzzgbHo0J3Ik9MPVfiXM8XVdqYvety3sYwOSGSuhyJ35pZfyX24qampv5qaWl5T9JKSdvN7CHgC0n7JR11dm0Edklqk3Sjy/UHJiYmLsSWfsCQpDoz264qSq5Gi9lu8H0/73ZDmKCTrpq4UI65SnrOzIavRqJyG3ae522KqHinnefEbtiFCWpzJXSmTD91h83sl6vdo7SILe8qqqiiiisY/wFFCbN/sRPwgwAAAABJRU5ErkJggg==);background-position:-27px;background-repeat:no-repeat}[id^=GPelevationPathProfil]{height:150px;width:inherit}[id^=GPelevationPathProfil]>#profileElevationByDefault>svg{left:10px;position:absolute}div[id^=GPelevationPathInformationsContainer]{background-color:hsla(0,0%,100%,.9);border-radius:4px;bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:32px}#profileElevationRaw{padding:unset;resize:none}#profileElevationByDefault{display:-webkit-flex;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%}.altiPathValue{font-weight:700;fill:#5e5e5e}.altiPathCoords{font-style:italic;fill:#5e5e5e}.axis-d3>text{fill:#5e5e5e;font-family:Verdana;font-size:10px;opacity:1;text-anchor:end}.axis-d3{fill:none;stroke:#5e5e5e;stroke-width:1;shape-rendering:crispEdges}.area-d3{fill:#c77a04;stroke:#5e5e5e;stroke-width:0;fill-opacity:.4}.line-d3{fill:none;stroke:#c77a04;stroke-width:1px}.grid-d3 .tick{stroke:#d3d3d3;opacity:.7}.grid-d3 path{stroke-width:0}.overlay-d3{fill:none;pointer-events:all}.focusLine-d3{fill:none;stroke:#c77a04;stroke-width:.5px}.focusCircle-d3{fill:#c77a04}div.tooltip-d3{background:#fff;border:0;border-radius:8px;font:8px sans-serif;height:45px;padding:5px;pointer-events:none;position:inherit;text-align:left;width:80px}[id^=GPelevationPathPanel-]{width:280px}[id^=GPelevationPathPanelInfo]{background-position:-75px}[id^=GPelevationPathPanelInfo],button[id^=GPshowElevationPathPicto-]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAAAaCAYAAABb9hlrAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH4gEQEjITjE0MtwAABGJJREFUaN7tmU1oHGUYx//PZEvSLjHVBLVaerCXSgo5tAqxiqBSxcSLWqknFaNdaYjiwUMOVVGi2EORJg0xtgbx0FKVgmirRU17SUpjPsCVUhQtVOr6ES8mmpqdnwffhekw2dndbMK23T8MzMzzzsz7PP/3+ZjnlaqooooqrlhY7gSol3Rr7tLMTlfNs3gAJqnGncvMJMk3M7+Q5xOB8zsl9Ui6XtI/ktZXzVs6MpmMNTU1rZa0SdJNknLkSNI0MCrpTzPLFkSQmR0FspIGJb1UNXHpHjM3N9dUW1t7u6QHJW2V9KukPyQhqcEt/i8lHctms8Oe5/0WR5SAW4AfgWGgC1ixjEo9AwwAXj7Fgb1AZ6WSMzk56QGbgQPA98AUsBvYAKwCVgJrgV3AKeAccAi4f3x8vCbOSA8AB91xGEguIzlZ/sdgFEmOnF43xq9UkoBrgD7gZ+B13/c3u/uPAG8AbwEdkpTNZjcCLwJngE+AtYV8YEW+VbxESvVxKfa5xBokZ19oTF+lkTMzM+MB9wJngT0hHT8KzP2bkGwHcB54Ktb2wNtAb5EGbgAaFhOzXegKYhDwQp6TwzvLvYgK1CPpwtkZYEtI9iowCowBAyHZeuCEi1pr4j4yBBwscmK7gZ7FJtYFSOq7TMgx4A7gB6AvnU5bSF4H1LtjVVCWSqUMeN550eN59SuWIMf+HDAL3LwEJC0bOSPdCRvpTljwOiT3RroTdQvM3QPanYfcFiHvAj4GjgCvLWDHT4EX8hZnUQQBCRf6tkWMD8bW/WVaiVEkDZZKDmWCI6kmD0FtwNfAugXsetG96qsIeSPwfhRBXoxy10n6XFKXpEPAy7kEDtwl6eHA8CeA5nJ2N2LuxXrEEjiaX2a9YpHvv2ODpFOS7gl84BVHVFLSntAjNZLeXGRLZK+knRHipyUNFONFrT3zlDsExhjZJNVLuqGE16+W1BjX6rmk3JY06v56w9gmaUuufRFCO3C3mZ0oAzmDki4G7nXkytJC+lgj3Qlr7ZnHzIK5JW4V09ozz0h3Yo0zdJOk3yVlHOELkY6kaUnXSnoynU6PNTc3F7RAUqmUSWqX1CLpA0nZ2Bzkqo5ScbKEvBNZSucrwS+zMnsI+DcqB8WV2Uuh6Loix/eGPKdf0g4z880Ml//6A/IO520VhdnZ2b8lHXM2fTQkrg1Eq3AleJ/rzX0mKVNQiFtmTLjk67mw1umIyTVxAXY61+904eS7SiMomUz6wGlJxyU9BswARzzPG5P0oaSfXJ4+m2v1eJ63VdKzzgbHo0J3Ik9MPVfiXM8XVdqYvety3sYwOSGSuhyJ35pZfyX24qampv5qaWl5T9JKSdvN7CHgC0n7JR11dm0Edklqk3Sjy/UHJiYmLsSWfsCQpDoz264qSq5Gi9lu8H0/73ZDmKCTrpq4UI65SnrOzIavRqJyG3ae522KqHinnefEbtiFCWpzJXSmTD91h83sl6vdo7SILe8qqqiiiisY/wFFCbN/sRPwgwAAAABJRU5ErkJggg==);background-repeat:no-repeat}button[id^=GPshowElevationPathPicto-]{background-position:1px}div[id^=GPexportContainer-]{padding:5px}div[id^=GPexportContainer-]>input.GPsubmit{color:#fff}input[id^=GPexportButton-]{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxMy45OTkiIGhlaWdodD0iMTMuOTg4IiB2aWV3Qm94PSItMSAtMSA1LjcwNSA1LjciPjxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjMiPjxwYXRoIGQ9Ik02ODggMzI2LjR2OGgyMHYtOG0tMTAtMTR2MTQiIHRyYW5zZm9ybT0ibWF0cml4KC4xNjEwMyAwIDAgLjE0ODAzIC0xMTAuNTQ0IC00Ni4wMjQpIi8+PHBhdGggZD0ibTY5MyAzMjEuNCA1IDUgNS01IiB0cmFuc2Zvcm09Im1hdHJpeCguMTYxMDMgMCAwIC4xNDgwMyAtMTEwLjU0NCAtNDYuMDI0KSIvPjwvZz48L3N2Zz4=);background-repeat:no-repeat;background-size:25px 25px;min-width:fit-content;padding-left:25px;padding-right:5px}.GPexportMenuHidden{visibility:hidden}.GPexportMenuContainer{display:inline-block;position:relative}.GPexportMenuContent{border-radius:10px;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);display:none;min-width:80px;padding:8px;position:absolute;z-index:1}.GPexportMenuContent,.GPexportMenuContent a:hover{background-color:#f1f1f1}.GPexportMenuContainer:hover .GPexportMenuContent{display:block}.GPexportMenuContent .container{cursor:pointer;display:block;font-size:14px;margin-bottom:5px;padding-left:15px;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.GPexportMenuContent .container input{cursor:pointer;height:0;opacity:0;position:absolute;width:0}.GPexportMenuContent .checkmark{background-color:#eee;border-radius:50%;height:12px;left:0;position:absolute;top:0;width:12px}.GPexportMenuContent .container:hover input~.checkmark{background-color:#ccc}.GPexportMenuContent .container input:checked~.checkmark{background-color:#366291}.GPexportMenuContent .checkmark:after{content:"";display:none;position:absolute}.GPexportMenuContent .container input:checked~.checkmark:after{display:block}.GPexportMenuContent .container .checkmark:after{background:#fff;border-radius:50%;height:4px;left:4px;top:4px;width:4px}button[id^=GPgetFeatureInfoPicto][aria-pressed=true]{background-position:1px;background-repeat:no-repeat}button[id^=GPgetFeatureInfoPicto]{background-image:url(data:image/png;base64,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cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjliYzYwZTdiLTQ2YTQtNDBmYi1iNTdlLWM2MGY5ZWYzNTc2YSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMDE5ZDJjNS02YmZkLTQ5YzQtYTczYS0zMGQ3OGE0Y2MyZDUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpkN2U0OWVjNi0wZjQyLTQ5YTEtODQ3NS0zN2Y5N2Y3MGJjZWIiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE3MTAwODA3MjUxNDU4NjUiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxNTAxZWQwNS0xMmQ3LTQzNGMtODY3YS0yYjMyMzIxYTYwYjgiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTAzLTEwVDE1OjI1OjI1KzAxOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PnuaV+YAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAHdElNRQfoAwoOGRnrK4UpAAAB+UlEQVRYw+3YsWoUURTG8TNrikAECYJYiVjFLBhS2GktpPEV8gg+gr2IhbWQRhMQG0stIxaCaNKIjQTExqgBUYOJyc/mLkxmZ3d2dmciSA4sy+58c/73u+fMvXc34iROorXAPFaHCdY1F+vHxIG1Xu6sANLkDGZZlg0wpOFiLWRZtlkKmhSGLKU5HKIZm4M57Oaqc4TTGSPhNO7iHmZafD76OJiLiDcRMR0Re6MkqZw5XMZn7OB6WxUqcgqV+Y2FKs7IrYALuNh2y/U4JWauDOJM1WiB0xFxLiJm0/v3iNgqWwt6t4zZakXObEQ8yLXZ1SzLNtGp5AybOdzHFvZwiNsDdJ2U5qAhzn6+MnU4la2AG/iBDzjThqEc51cy1GemSUPPk+TJEE0Thl7mluU+M40Ywnl8xFcsYqqllruWq8weFsflVIHupMuvcAmfcKtEdyrp/tTlpNWs98wcYmkSTpWhF+nyBrbxCFlThkpOAO8n5VQZuonHeIilITlqGyqY2cezJjhNneXO1jFUtmlOwukMA+ZiA90SXRev88KI+FLDvIh4lzbNSBv1QWOcit8pP7Gc0y6n74qxg294+q85g+AzWMklWin5PFMzZ9nZrHFO1SCKM3VkJicx0wZn1MF08Ta9umPmWEsD3cV8W5zj/nNjdZCZk/jf4y94DaUx429cawAAAABJRU5ErkJggg==);background-position:-25px;border-top-left-radius:0;border-top-right-radius:0}.GPcloseGetFeatureInfo{background-image:url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=);background-position:0}.GPgfiLayerButton{background:unset;border:unset;font-weight:700;text-align:left}button[aria-expanded=true].GPgfiLayerButton span.GPshowGfiLayerFeature{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.GPshowGfiLayerFeature{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAAcCAYAAAA0u3w+AAAJ4XpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHja1ZhZkuQ4DkT/eYo+gsAN5HG4gGZzgzl+PyiUWZWbWdfMV0dUhJQKiQThDoezgv33Pyf8xSu2EkMu2mqv9eKVe+5xcNKu12vc33Ll+/t+pbff5OP1IOv5IXIp+Z2vP1t97n+7Lu8DvA6Ds/LbQO0ZSObHH3p+xm+fBopPZB6Rn+9noP4MlOLrB3kGGK9lXbU3/X0J017H5/lXGvgE/8rtY9hf/laytwvzpBgtSbr4TukJIPknhzT8h/u7caPwHqncVzzK12Ak5Ls8vb86ER0PNX970wdU3s8+ofUWfPiMVo7PLelTkuv78dvrQcqnH9L7/PH3mXN7zuLH67v6wjyiT9n3zzm7nXvNrGLkSqrrs6i3Jd5n3DeZwqdugdDqpXwKQ+j97rwbrF5QYV/rmryXdImgciTLliFH7D4uWYSYo4WonMS4YrovtqSxx5Ucv+xvOVFTTzs1QF437DnF91jknrZfK9yzNWbewq1RGEx45I/f4U8fOMdLQcRz2V65Iq4YPdmE4cj5N7eBiJwnqeVO8Nv788txTSBYPMteIp3EztcQs8gvJUg30IkbC8dXDYruZwBSxNSFYKiGLKAmqUiVS2NUERLZAGgQOgUUJwhIKXETZMwpVbChkpiaR1TuW2OJXA5cR8xAoqSaFGx6GoCVc4E/mhscGiWVXEqpRUsrvYyaaq6l1qrVRXFo0hy0aFXVpl1HSy230mrT1lpvo8eeEM3Sa9feeu9jMOdg5MHTgxvGmHGmmWcJs06dbfY5FvRZeZVVl662+ho77rTRj1237rb7HiYGlSxbsWpqzbqNA9VOCiefcurR004/4x21B9Yv7z9ATR7U4o2U36jvqHFV9W0IcTkpjhmA0UUExNUhgNDRMbua5BwdOcfs6pGqKJEgi2O2xREDwWwSy5E37EJ8IerI/V+4Bc0fcIv/K3LBoftD5L7i9h1q29vQuhF7VaEn9UpUH79bG7ENb3ZfjuGnH/70+K8baM58ro1fqaduO2PNkrXXvdZVkhqKrnCwXwZqNc0zNlreeaTsMm2UmGz0CkWzk1Z0IeaWFFrV1W33wUckprYrHwgmObhdGHdf263okFZX0j17R8nbyrp7a/DGJamMM9xNpcIAY5dhms9MJw0pGpL0epA2BXNc1GKeiZZZo6FBPaZecUR4szqVkJuOUlcd08TDyWWWMvvOMayzOqxfucpcO9c1qUUjxG6LNpqpYsgd56gXTIy2tqx0WteVkk5FenVC9kyODM/R56Fk0pwX6pb2lD13hezjUAcZQ0htKbVGx0WM6WAIMR1MJRmVe629w16GpZlGoemqrh80OSs9Z5kz6rwTXLQTxJ28Jns3vZPXZZUtxFxMe9jmp7m4V/t6LCz0tHJKn40gulGem8W1ITufTvjxaqvZKaFIW4PoxuwpYhZY3pR2cqmkzEhBhUCIEitfh1KW0bUmq8NdbCLkO4+xhTXSEVadqwoZjHZHCNIfIhk/RZKZOvpzAT2PfVVGA3bwBdz8eyT6cyRpE0l+AgkIHUxa9qQKOfwpZyQel+S1Eyc0O5i7uXMykBpz0NfaaQoHqKt5EDnt194T0e+jlhxhVjYM8skG3B3aaLJrnavWvnmK4qo8OQN102POs90OfCL+eKwByTqYprKAHdrns436gc97df7Ye220ENHncaTTJOypDT09tokqi9axaDG9l9XoIgc/j8nqUIXMb4alEqQPl3jUvlWzHesc8EjMLjpGXguzCAnEwLHbVfSiYKTTPNJRao8aVszboS6eRGEOsYLp9UcwbUfbz4KErmTUPy7LO+EQd4chbCyOLWtpDTY9XLuGOzbp60ijF/Qxy9ByFiXKN4VBulLuQrbFdaGzm6hUGV1n8X1qifNousahaDdLWsrpLXdyLZzlmJP1CRy5lt3ck3GSsQ5vf2PPEttOeexEa7ykZanhxF3sKdDjdV/2qEjciUb/S2Vuy2u0GXPnntsjNoKioIyOmwqg0Sxp2ZTvQuP6Mu/QfooqHJ/XtOAAUik+L72N3l1OAr/k0yLQaA0DNaJOssPkm3/RNqqMaR8p+RYO/4hCLttajzFUyi5PqyHPI7dTjcBi1rgwIC75ORgV31ZB0ejxpXbM+1ZGnAkJWHC96kSEqiY4A0q+9QK5odcNEvX8AimMth2l7t9QGX1eaEZ6skGFKYpfUINE7yZjYw3fqTA7VgfFmFe55SLA33afYqQ+HQXlz1hWPlQBIn55nzE0Yx+8QJeKjThGsrBpwXd9mfBIshdW4Ro7E4qBW7fSzHAOFwUzKQ4TYU+SDyqvFNI5Ptae91hBz8Hc/RoJtWQIH2vqYSRuZ6QDRZQS8t9gTZs+GDWJS8JY74zRwqb2W3AUetu5flgmtUdHIZ8nehX7gEbCONlX9hIIFD2sOXS5uhNCTUvvehIMbMs5UOgWbNsGKZtZp6VZFPtY6c8YSoWAu/WRLQxCNvqnFnzhIOKCOgsdtuLNaux4tO77ULqrVwrcUYotTlqvUb2uhRmvV4Puc03TOiv32WXXuXSTSdxfpyh5DOG2ujlA1EXds9HHSUMyV6mBzkGjJaFbRaUhDpaj0THZJmZIODhFd9GQklDkgXWhIbK+Bsq2MmyudHiB1rRKUh5a5bmZG+aFqSjDtmj15NNRoeXuxT6INbNxiYeqzataXZLcqRK/zk7JEkyAsvdGiwgVWuMbYI4Tojn6M/dzxuV1IANyYfInOd70Ddiw7BilU/w/LHBsWtmQpUrM4GYHI1Ua2losggw+m+IXG5XG5ioAUK9KKGtp/sWO8Kkq9kDR8QgTG8+jGWih6KrzTUbgKu2qCxglGt10l+FuJcCKetsVhJ+Wy/bwKGjEWX6N2UnQqdi2uYpviSN5XpLN8GCCrC6kJFBnbN8h1ZmS2IiIkBw2SWnSpRTCOEKrtonZg1q0MDQCkeno+SHi3fFCCHLILW1a4vKWMiGQbzuAjiPmB0GjnbEHSjbFXSNyTfdXmmfGFsYMBUuM2ECSjSKiOpU2F+lAmXxSuHi5C99I9Ls1MyyV24M12MRcnU3R/V92RrNmJRJpuSPYe0+g9Tf8MxtucjGvlx8+upAlBNg9CuVDRJNqZavDtJe7bUQJvdTgdrvexejeV7Rgi7GmqOBj8hL7nP7IoAH/Dw4v/LqAJje8ndchnsL3YOLdcPr/lTRHtiwnOx7IN5Ww05uhYBo61sEV0los0BmFcS47Zxb7PlzGKGzr2DuyY8CKTC5SgNAAwntPyNOfIWcF9u/gfyCKdyelCS8MyWE/KW6rKtXZ4RgGC4632aANkcI1knHhQAGXBcO7OAJsoRGwcYSTdua39P8nx/BPb/xXDySH5PfwN4ffmBMhu1llAAABhGlDQ1BJQ0MgcHJvZmlsZQAAeJx9kT1Iw0AcxV9TRS0VQTuIOGSoThZERRy1CkWoEGqFVh1MLv2CJg1Jiouj4Fpw8GOx6uDirKuDqyAIfoA4OzgpukiJ/0sKLWI8OO7Hu3uPu3eAUC8zzeoYBzTdNlOJuJjJropdrwihHz2IQZSZZcxJUhK+4+seAb7exXiW/7k/R6+asxgQEIlnmWHaxBvE05u2wXmfOMKKskp8Tjxm0gWJH7muePzGueCywDMjZjo1TxwhFgttrLQxK5oa8RRxVNV0yhcyHquctzhr5Spr3pO/MJzTV5a5TnMYCSxiCRJEKKiihDJs6qsEnRQLKdqP+/iHXL9ELoVcJTByLKACDbLrB/+D391a+ckJLykcBzpfHOdjBOjaBRo1x/k+dpzGCRB8Bq70lr9SB2Y+Sa+1tOgR0LcNXFy3NGUPuNwBBp8M2ZRdKUhTyOeB9zP6piwwcAuE1rzemvs4fQDS1FXyBjg4BEYLlL3u8+7u9t7+PdPs7weRH3KzYlwNqQAADRppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6ZGYxYzFmMGUtOTRiYy00OTE0LTg4MGItM2ZjNmRhYjM3NDFmIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmM1NWM2ODRkLWY2OGQtNDExNy04ZGYzLTAwYWMzMjQ4YTY5YSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjNmYWM4YTllLWJkMTUtNGJiOC04ZGQyLTkwZDUyMjE0YmFmOCIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1QOlRpbWVTdGFtcD0iMTcyOTI0NTAwMjg0NjU2OCIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjMwIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjcwMTNhZTFjLTcyMjktNDJmZS1iMzAzLTU3NGFmMWE3ZmQxMyIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMTAtMThUMTE6NTA6MDIrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+UnHxogAAAAZiS0dEAPIA8gDyLkSMzAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+gKEgkyAorMuigAAAIkSURBVFjD7Zc/aBRBFMa/t39EFEMQTrQ2CiIi+K+Q3ZA+CLJ7nqWQwlRJGs3ddUnlZdUiXJEqINjE9e5UjFWag9sEbNRGhGB6MXKgQQPxZp5FLhLCXXbXXSQH8ytnhuF9771v3yygUCgUCkVXKOrB6/dqJzQD42A5DNAZAGBglYA3UlB55ZHztWcFWoXaLTDPAzjW5cgGMUYanlvpOYFtcc8inGVi5A6aSAptS50/761co+QAAOxCba/GH6TJgcaD3HqSoKx89RMx15tH5MTHqdzW7r3zU/6h47+0WSYaCmbcc2F3aftuGhjfpy075asPrI8lTjtjgYlG+zf1JbvoZ3aW7aKf6d/Ul5hoFIyFxBW08tUPAC7Giw3vl2fcS0k1tq3xBEATpN3UmLYkxCsAp8C4G3ju0yj3aCH7pzstNkrO3zbtkLGBNLwTlJznIG1wO2uyLiFWAJggzYoqDgCM8ILE7i9OXL0dDx7+PZH5iast0isAYLDIrh8VTXuyMpeKBwFei28fWkvTg8KACDzXCjzXEgZEXA+GCKTFf/gwv07cnp47DaLbBFxhqb+zCi8uD+ZfXmCpvyXgGhh3As+dTixQCioD2IgR23ezZZYPkgdDB709Wc0ywY8y6Jkpu+w5tTQH9dB9/+RuD9Yf5r6k/lTbFsnzAPV1qxwzjaQt7r8+tu2inwHrY8wYBnC2vbzKoEWzZZbrj298U/8uCoVCoegx/gAQwd9vpqyHDwAAAABJRU5ErkJggg==);background-position:-26px 0;display:inline-block;height:28px;vertical-align:middle;width:28px}[id^=GPisochronPanel-]{width:280px}.GPshowIsochronPicto{background-position:1px;background-repeat:no-repeat}.GPisochronPanelClose,.GPshowIsochronPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIRSURBVFiF7ZbRS1RBFMbPbLq9ldjaY88Zkv1JQRqt+Wf0aCrYBuY/UkRQRFQvQQax+JipEUIoQdHq/nrYb3K8zl33zl20h/vBwnLOmfPNN+fMmWtWoUKFMwPwjiO8Pu/9xOAGDQRqZnYYmLrOuQvD31I51AYJAqbNbNnMfgXm38AyMFV2E8AssKpDy4txwAowX4booogO1WYdYEu/jmwHIqqXEOPzr8VEScwjxXSTREnMSyXZBGaAscA/DtyTOIDnKaKAFsfxGHCB38kWopUiaNVffmC8T9wE8FaxKwk8vpVCrAG1TGU8nsSqeBrJLbXBl5gY4C7wOSNqW+13Y4iistUrLkYE/lTu5PhfAR8ytjmteViYMF9UeTFK3qZ36S9HfJeAP8CDjL2hqq4nkVpfUdFhEcNIjv2ame045/aA22Z2PeMbNbOn4QLn3C6wK38ZxN7Ggd/LKICfwKb+tyMntgGcOAzgO/AjkTM2AJKqFEvuW27s9Oh/aybUch8T+PKmWdaWJiro49kCa+a1ZmFIYvzYjo70ooJu6rS/Ao0B4q8C31TVyYJcZ/aw+iRv+omSmPeKXUrgmeHo0yc6mjOV6gL3i/IYUAdeKMkW0ASuBP6G2mxHMc+A0cJEvVxNVSp3mklUC2imcPgkdSU5CE5nWyK6snXofXUniTkXAFPAIvAJ2Af2gHVgoeidqVChwv+NvxOT737B3Fc7AAAAAElFTkSuQmCC)}button[id^=GPisochronReset]{opacity:.8;transition:opacity .2s ease-out}button[id^=GPisochronReset]:hover{opacity:1}.GPisochronReset{background-color:#366291;background-image:url(data:image/png;base64,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);background-position:-281px}form[id^=GPisochronForm]{padding:15px}div[id^=GPisochronChoice]{-webkit-justify-content:space-between;margin:10px auto 5px;width:160px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}p[id^=GPisochronPointLabelP],p[id^=GPisochronValueChronLabelP]{margin:2px 0 5px}.GPisochronChoiceAlt input:checked+label+span{color:#366291}input[id^=GPisochronChoiceAltChron]+.GPisochronChoiceAltImg{background-position:-56px 0}input[id^=GPisochronChoiceAltChron]:checked+.GPisochronChoiceAltImg{background-position:-84px 0}input[id^=GPisochronChoiceAltDist]+.GPisochronChoiceAltImg{background-position:-112px 0}input[id^=GPisochronChoiceAltDist]:checked+.GPisochronChoiceAltImg{background-position:-140px 0}.GPisochronChoiceAltImg,.GPisochronOriginPointerImg,.GPisochronTransportImg,input[id^=GPisochronChoiceAltChron]{background-image:url(data:image/png;base64,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)}.GPisochronChoiceAltImg,.GPisochronOriginPointerImg,.GPisochronTransportImg{font-size:0}.GPisoExclusionsOption{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAA4CAYAAADuMJi0AAAE60lEQVRYw+2YWWxUZRTHz/fd7y4zzAzTbaAdpgtQWsBiYVxYGpcEMCwRQkx48KHGhKg0WhESNYglwSUgWCKGTaMRBF4MwShpECUshlJqay2U0LCUwrRAp+0Ms997v8UnEl8Gp9Ppg2Z+bzfnn+/knHvud865AFmy/GfZVVZW/vvb9eduNn7Wc+ixGQ3/pm+UcO735VP3/rpsyc39TudHyXQ4maF61cqfZi97ocbjmVi6YGHNxoOeor3JtDskae606uqzFfPmvRqLxFg4EetIpiXJDJqqOHBwEEjIDyXjiVw4t/S1XD34TKs/MX+z4EEAgK0SwhPtjh+qq6tXBjGOtTY11a31D371qEygRxn3F3vWPVE1deN0G82T+m5BbCAIF+8lBttifLoFQeV0Wf7R7XbndsXird19/TUfAhgZeZ8H7eoXHYVWwzdBFTedsmhScfg0wfQPTRF7FfLdmBRRo4Q9RzTS8aeKRaeERAsC8TmRto30HJKqMCrhIcMUMuMcmADQJAQ5GJ4fqUMpFdE2mXgqOe+ewXhJFCHoJNJxu4omz7bhScVMyj/BeFPGUrlZIROOYRT4C0C0S0h8qUhHAAC2yGTFpUka7Skfx9/DZFZGnH2gEHxYwnc6EIguBYnDqtTzT3uDTFb3VdrEcZfWk5GUrgZxaI4QCyyaBAME04sUzTvL+dBD+xnOu8qiwrIgV1leEuf9JxhvTzu6Bgm5ThXkmNcciriaS8R2lXySTHvUqXb/lqsNp3Ju0qstx2Z7sfTZGuKsLAFkV4RK0J5k2s4wXYqYsO6WyYq0HUYN06c9XgX5SxcBuIt4gvJ40sJi7MaVONtVhGHmqIrmyLPzm29tqqf7ilwHUtHvVAjO9tksWbJkyQzehd7xo5ppUqW2tlbzLp380rhxitdB8q/4fD6acnsaKfX19c7Ji+QNJU/at7mmWaaZpklHNSY+irq6urzSxbBBy1PqEoJZfFdYoK2tjY2Jw4aGBpurJvKOmme8xWTTmgjq1DApAwAxoo6fIkieEnoF2+NvUDVqCekRiNIY4ip1eb1ekvEI39/65nOyO7hWtyWc0biOogkDooYOBhhujLEDAIZG4xADAH/4sH796y42ZWBNxBGrCEZMlNBNER1k8fBtdixwwzzY2toaTCtCr9drLXzKthgSiv7ztycfjvQo4O5fpWqR5eGojg2DCX1IBHUf3n2nSey5cOpCXzrfIXp6WZXXMtdYh8pi74JTL3WTijO913tDq2qXVxplA5vijgdTIvE4RO6zYOwO3t5/GhpbTrYMjnh78nq9VlwRfRmVRdewArM6rgJBTLbxErYEAL4J5vetwFJ4jghQxMNSSAyoO42Ttl0Xz58PpzXqS5JE7G5tqrAbM6lMiyljkimoQg1m8VhK7xrFwTpdixcbAaGz2/I+ekba0dzc/iDt3SIUCtH+Lv+lArWwjWPOOeMVJjI1imgRsyXKDas+mxoc83vKUfOC/dO2lst3M7LM3L816LdLBedlTIKU05lUNfJM2ZzEBZORXzuHrtk+vnSu63JGF9LhvmH9/uVAu8s9MUQFnWUSIweHFJ90z7qlq+n6L2OyAQMA918NdLrcrqgwoQrHyAHWqX49PDzMxsohAIAUuZ0YsHJHSO+G5t7eXj+k8ZsEjfCmsQGABgAmAMQBIJEdN7L8//gb3FshBGMt81oAAAAASUVORK5CYII=)}.GPisochronOriginPointerImg{background-color:#f2f2f2;cursor:pointer;width:28px}.GPisochronChoiceAlt input{display:none}.GPisochronChoiceAltImg{cursor:pointer;display:block;height:28px;margin:auto;width:28px}.GPisochronChoiceAlt span{color:#999;cursor:pointer;display:block}.GPisochronModeLabel{display:block;margin-bottom:5px;text-align:center}input[id^=GPisochronTransportCar]+.GPisochronTransportImg{background-position:-168px 0}input[id^=GPisochronTransportCar]+.GPisochronTransportImg,input[id^=GPisochronTransportCar]:checked+.GPisochronTransportImg{background-image:url(data:image/png;base64,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)}input[id^=GPisochronTransportCar]:checked+.GPisochronTransportImg{background-position:-196px 0}input[id^=GPisochronTransportPedestrian]+.GPisochronTransportImg{background-position:-224px 0}input[id^=GPisochronTransportPedestrian]+.GPisochronTransportImg,input[id^=GPisochronTransportPedestrian]:checked+.GPisochronTransportImg{background-image:url(data:image/png;base64,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)}input[id^=GPisochronTransportPedestrian]:checked+.GPisochronTransportImg{background-position:-252px 0}.GPisochronTransportChoice input{display:none}div[id^=GPisochronTransportChoice]>div{justify-content:center;width:100%}div[id^=GPisochronValueChron],div[id^=GPisochronValueDist]{margin:5px auto;width:220px}.GPisochronTransportImg{cursor:pointer;display:inline-block;height:28px;width:28px}.GPisochronTransportImg:first-of-type{margin-left:18px;margin-right:10px}select[id^=GPisochronDirectionSelect]{margin:5px auto;width:80px}.GPshowIsoExclusionsPicto{right:0;top:unset;transition:all .5s ease-out 0s}.GPisoExclusionsLabel{display:block;font-weight:700;line-height:16px;margin-bottom:10px;text-align:center}.GPisoExclusionsOptions{display:-webkit-flex;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.GPisoExclusionsOption{background-color:#fee;border:1px solid #a77;border-radius:3px;color:#a77;cursor:pointer;display:block;height:28px;line-height:26px;padding-left:28px;padding-right:5px}input:checked+.GPisoExclusionsOption{background-color:#efe;background-position:0 -28px;border:1px solid #797;color:#797}input[id^=GPisochronSubmit-]{padding:0 10px;width:fit-content}[id^=GPimportGetCapPanel-],[id^=GPimportMapBoxPanel-],[id^=GPimportPanel-]{width:340px}div[id^=GPimportTypeLine-]{border-bottom:1px solid #999;margin-bottom:15px;padding-bottom:15px}div[id^=GPimportChoice-]{margin-bottom:5px;margin-top:5px}.GPshowImportPicto{background-position:1px;background-repeat:no-repeat}.GPimportGetCapPanelClose,.GPimportMapBoxPanelClose,.GPimportPanelClose,.GPshowImportPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH7SURBVFiF7dY/aBRhEAXwvcN/sRBBkUNsA8JhoZ1gJaIIamV91SUSFCxtU1oJQS9i0lnZWShYpE5pIYFUNoJIsLGIYhC9n8XOcZt175Ldu2CzD7bYmfne+97O7nybJDVq1KhRFZjFWlyz/3s/lYFDeIjvhviJRRyZAv8cXqA5pqaBp3gwqdglvA8TW+jgNj5HbAOXJ+Cfw5/gWi0yFWaeRU2/kikcx2P8DpKXOJXJn8RSbKYfT/hEBZ2e3VhGI2dmOVfTKytyC59i8Udcy+RA5v4KNiP8BXdLag1epSxW0cx1ZoCVoi6OIm9FJ+BXdOhYrmaXoYgdxiPsRPoNzk3BVL57pcx08C0WrqM9ou4fQ5lcO9YKrs6EpqqZCcLtWPgkv3CMSFG3msEB2/vewHhThcOiCNmi50mSSJLkXpIk3TIbyaEbHIKzLBr7jO0N3JB+2PAapwtqCl856dR7FemvuFNSu2gAVOpSnvgM3gbJFm7uZQhXDc+lNZydgpmVglhlUw3M44f0jFnC0bwh6XRblJ5FO9JJV0pwjJnB2C4c6aVNhVgbH4JoAxcyufOGfxCbuFhR4+AP1pzgTIj2o2Pzue71MDMBf9fw16dwNOc61cf9yoYypNcNBwYVPvwx3AvxYEZOszDVw8I0NAekLbyLqzU14ho1atQ4KPwF7C8m4Xa+2v4AAAAASUVORK5CYII=)}.GPimportPanelReturnPicto{background-color:#366291;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4AUXDwQyeFmCzQAAATJJREFUSMftliFLBFEURs/dVUQURJvYLCaLGESz1T9gUJsoWARBEBRM/obFIFgMKxtsNhG2aTUIBqOCySLsHssuTNiVGZ47aU8aZr5537vz3TfvwZAhg0K9UL/U5bLMuuyljFXJYXYOHGVuxcAM1VPg5D+/1sgfZsfAWY9HG+ok0AY+gFfgJSI+UzI7tBht9UHdUqtFzQ5M41GdKZLhQmJMa0A9d6VqqDXT2e41fvQxrQCXQK+X7oGnzvUoMA3MAyvAWEbXjIjVIllW1eseM9/vo59SrzK6ljpXtIGq6k0ew0wcdxntTqGFHxEtYBO4zTPBiBDYBX6SGlAdVRud9baeQ99tunrKz6CizubULnYMn8vczprqW+HdIoEaMF5mhRPqe2kVRsQ30Cj7WLI0PJwNnF82zKAINyZs+wAAAABJRU5ErkJggg==)}.GPimportChoiceAlt input[type=radio]{display:none}.GPimportChoiceAltTxt{color:#bbb;cursor:pointer;display:block;font-weight:700;line-height:28px}input[type=radio]:checked+.GPimportChoiceAltTxt{color:#366291}.GPimportInputLine{display:-ms-flexbox;display:-webkit-box;display:flex;margin-bottom:10px}.GPimportInputLine>*{border:1px solid #999;border-radius:0;display:block;height:28px;line-height:26px}.GPimportInputLine :not(:last-child){border-right:none}.GPimportInputLine :first-child{border-radius:3px 0 0 3px}.GPimportInputLine :last-child{border-radius:0 3px 3px 0}.GPimportInputLine>:not(input){overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.GPimportInputLine>input{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0;padding:0 5px}.GPimportInputLine>select{-webkit-box-flex:1;-ms-flex:1;flex:1;padding-right:7px}.GPimportInputLine>label{background-color:#f2f2f2;color:#666;cursor:pointer;padding-left:7px;padding-right:9px}.GPimportGetCapProposal{color:#5e5e5e;cursor:pointer;font-size:1em;height:28px;line-height:16px;list-style-type:none;overflow:hidden;padding:6px 10px;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap;width:100%}.GPimportGetCapRubriqueTitle,.GPimportMapBoxListSourceTitle,.GPimportMapBoxSourceTitle{color:#5e5e5e}.GPimportGetCapListRubrique,.GPimportGetCapRubrique,.GPimportMapBoxListSource,.GPimportMapBoxSource{list-style-type:none}li.GPimportGetCapListRubrique:before,li.GPimportGetCapRubrique:before,li.GPimportMapBoxListSource:before,li.GPimportMapBoxSource:before{content:"» "}.GPimportGetCapProposal:hover,.GPimportGetCapRubriqueTitle:hover,.GPimportMapBoxSourceTitle:hover{color:#000}.GPimportMapBoxSourceFilter,.GPimportMapBoxSourceScale,.GPimportMapBoxSourceStyle,.GPimportMapBoxSourceVisibility{display:inline-block;margin-left:15px}.GPimportMapBoxJsonEdit{margin:5px;outline:1px solid #ccc;padding:5px}.GPimportMapBoxJsonEdithidden{display:none}.gp-json-string{color:green}.gp-json-number{color:#ff8c00}.gp-json-boolean{color:blue}.gp-json-null{color:#f0f}.gp-json-key{color:red}.GPimportMapBoxSourceVisibilityInput{display:block!important}[id^=GPimportPanelReturnPicto-]{background-position:0 0;border-radius:3px;cursor:pointer;height:26px;opacity:1;position:absolute;width:26px}.GPlayerSwitcher_layer{background-color:#fff}div[id^=GPlayerSwitcher-]{height:32px}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{width:190px}button[id^=GPshowLayersListPicto]{background-image:url(data:image/png;base64,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ZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDoyYjNmZWFlMS1hNzM0LTQ0NjItOTM3ZS1jYmEzM2JiMTY1NGQiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NGQ1NTRhMTgtNjk3NC00NDMyLTk5OTEtMjk5YzU1OTY4NWQ2IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NTA1ZjQ3ZGEtMzNjMy00YjRkLWE3ZWQtODEyMDVkOWRjNTk2IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEwOTM3NTE5MDA3NTY1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6N2Y1MGZlNjEtODdkYS00OWM2LWI5MjQtYTJlMmFmNjM0MmQyIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wMy0yMFQxMzoyNToxOSswMTowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5OxzFdAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AMUDBkTuLyY9QAAAhxJREFUaN7t2bFrFEEUx/GYxiBIYneFNmKZ2uJOCDHY6V8g5m9IZ6UGK1trsbawEQJiISHgYSFKwMrCQpGgNiYYFAOSj4VzYV02d7N3M3dR98GxMDcz7/t+7+3u8HZqqrHGGvvXDPNo/a/BT2MTu2jndjaHuQkH/AcDlv22d5jJ5fQkruMLvuIOTo058CqGFt4HAa7mdlq2sQgxgOFHuL7GdG6nXVxEG2u5hYhgeFIY/5aEoZ/TirlZhIhlwN3w3+eRGeoEnkuImuKfDeX/M7wCh2fACnYKi9+iM0TmOmFtz3awErm2FgMehnn3RmYYJfupqqBm9s9jH99xJlklDiNE6udADAOehfHbSRlwvAZEX6e9vYYQYBDDzcKD71IShnDfrFVsMItb2C44eRp+PdsOc2YrwLtYysAAb5Ix4EIpqDJEVTZi5nRxJVKAGIZH/Q5iozLEQPSycZja9Z3GM5zGxzD2ICfDQCGyOB3MsBeuL3AsKUMhs4+xUBhfxEbFvVa+JzewWFi3EPY6yNKIDM8LvnaTM1QcQtZLEOVsVKodnK4nOggdMOB+GPuUjaFPOS1VVERZ7U7Go/CrcNzdw7ncDFFCJHcax7A1ToZe12W1qiwPKbPV1J0iXA7770+KYWINkdDnexn83Jh0U2bsLTFcCwF+wImj0pYbS1MUM6HBCctHsTGbW+R2eN9vJu3z/WUitDDffPJprLHk9gs8Px9eX9iakAAAAABJRU5ErkJggg==);background-position:-2px;background-repeat:no-repeat}button[id^=GPshowLayersListPicto][aria-pressed=true]{background-position:-35px;border-top-left-radius:0;border-top-right-radius:0}.GPpanelBody{max-height:200px;overflow:auto}button[id^=GPlayerInfoClose]{background-color:unset;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAgCAYAAAAFQMh/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGUSURBVEiJ7ZQxT8JQEMf/hxOsDg6GOGtiYgyy0I4Ormj8BBqpZW9HFhNxRKom8AU0tHFRRx1KYlwcQIkrzM4mGnoOtlJKsa/q2N/4ernfu97dAxISEhJ+CYkEyZq1y8w5O9NRUKk44VFMsm7VHIdf2kdb9aicM0JS8BkIuezH3PxgfekKd3cclEqaeQxQmYg2soXt10H74uGnvKkoMROveHFE2JHelusAkz9C0iwDINU9IErRYlTeyIr79vnNgtybBZB3j9ayhZ5b+S3cSvd9F2nY6a46+VfGEeqx1z9mlL9PmJqE4TsoFZSWps9BbHG4PPBdWBpT7Mkva8zOmJzZabYzT3uiUkBguCbUPAy5LMUsQGC4fEpvZdTgFyJanb5qfxKHSbkB4B6g/JccseQC4nCpne6W+gfKtX/V4sgjeyPppgGGb2VwaleLKkA8uphlAFB8WU/sw82JlviJHC4CHgG408oNO90pj6QAQGxXiyoRvPeZwfQclVcIWWspkm4a409lECZJNw1ZaynTYxISEhL+gU/lu7XSwAzyjAAAAABJRU5ErkJggg==);background-position:-2px;background-repeat:no-repeat}button[id^=GPlayersPanelClose]{background-image:url(data:image/png;base64,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TUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDplZWM2OTBlMi05NGExLTRkOGItYTM4Yy02MjI3ZWFhNmVlMjQiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6YmQ3ZTNjMTUtMzcwNy00MDZjLTgxNTYtZjUxZGM0NDFlYjMxIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MTVhNTdhOTYtMDdjYi00NTVjLTgwODUtY2IzMjFlZTdhNDc2IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzE2MjkwMzk5OTk1NTI1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NGM2Y2U2YjItNDVmYS00Y2U0LWExODItMzNhZmUxNmZhNDc3IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNS0yMVQxMzoxOTo1OSswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4dtuOqAAAABmJLR0QA8gDyAPIuRIzMAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH6AUVCxM7RVVcxQAAAPJJREFUSMftlUEKwjAQAJPiE3yH+Ii81IvgG/IFBRPRWkwLib10exQVhawHLRRbU8QEPGSOmyXDJrsJIZFIJBISsS9nuYEtXy5Hn3I4x+SgYS2zcuFNaq1FRMTc1Gmf/CmtBL7wIlcaJLZQGjacY9KWKg2btxz5s7g5wvbGTeXvlT7XYOe6Ei9ypSsZTOqSB5cOyXMD6bfS5Hs90m6M0mCz3NdIfQ0XXJob2HVjHuWukXGN2t8+IIPNdbrcVohICCGkONZpAXrKGLXNOmPUFtl4okwtmtj5et/6ea+zcq40yHalfVeiNEiRlfP4rUYikaA8AMekzozLtupbAAAAAElFTkSuQmCC);background-position:-2px;background-repeat:no-repeat}.GPpanelIcon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48ZyBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMiIgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBkPSJNMTUuMTkzIDUuNDQ4IDguMSA5LjQ0IDEuMDA5IDUuNDQ4IDguMSAxLjQ1NHpNMS42NTUgMTAuMDc1bC0uODQ3LjQ3OCA3LjA5MSAzLjk5MyA3LjA5Mi0zLjk5My0uODQ4LS40NzgiLz48cGF0aCBkPSJNMS42NTUgNy41MjIuODA4IDhsNy4wOTEgMy45OTRMMTQuOTkxIDhsLS44NDgtLjQ3OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTZ2MTZIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:auto auto}[id^=GPlayerInfoPanel]{right:190px}div[id^=GPlayerInfoTitle]{border-bottom:1px solid #366291;color:#366291}.GPlayerAdvancedTools,.GPlayerBasicTools{height:28px;position:relative;width:100%}.GPlayerExtent,.GPlayerInfo,.GPlayerInfoOpened,.GPlayerRemove,.GPlayerVisibility{cursor:pointer;height:28px;width:28px}.GPlayerExtent,.GPlayerInfo,.GPlayerInfoOpened,.GPlayerName,.GPlayerOpacity,.GPlayerOpacityValue,.GPlayerRemove,.GPlayerVisibility{position:absolute;top:0}.GPghostLayer{opacity:0}.GPlayerBasicTools{background-color:#fff}.GPlayerExtent,.GPlayerInfo,.GPlayerInfoOpened,.GPlayerRemove,.GPlayerVisibility,.GPshowLayerAdvancedTools{background-image:url(data:image/png;base64,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)}.GPlayerOpacity input[type=range]::-webkit-slider-runnable-track{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAECAYAAAAZDrhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAwSURBVDiNY/z379//v3//Mvz9+5fh379/DITYxKobKWYxMYwCisBoAFIIRgOQQgAADrTuhXfc36kAAAAASUVORK5CYII=)}.GPlayerOpacity input[type=range]::-moz-range-track{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAECAYAAAAZDrhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAwSURBVDiNY/z379//v3//Mvz9+5fh379/DITYxKobKWYxMYwCisBoAFIIRgOQQgAADrTuhXfc36kAAAAASUVORK5CYII=)}.GPlayerOpacity input[type=range]::-ms-track{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAECAYAAAAZDrhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAwSURBVDiNY/z379//v3//Mvz9+5fh379/DITYxKobKWYxMYwCisBoAFIIRgOQQgAADrTuhXfc36kAAAAASUVORK5CYII=)}div[id^=GPlayerInfoQuicklook]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJTSURBVEiJ7ZZdSJNRGMd/59Vo9m6jQYKWRV/MQYGBXSStC2/S27YmXYfQZRexZiBhdNE2ke68qq5rY3rRjRFE1Du0KKIcwQYtaGpCH+r01ZrsPV2lc853c0IE+r87z3P+Px7OOc85B7adROFgcHDQAbRWYtR1fdTv9+vF8do1dCFanE7nU6vVagpbWFgglUq1A89NgQB2ux2Hw2EKVBRl45ypswqtq7BYM/oyD8emSE7rgMTVaKPTtac64E99mZtDKRZzeZobVABef55lPDPH6b2W+k0DH72aYjGX51rnEU4csAGQmJhnYCTNmx/qFSBa7DFdw+RXneYGdQUGcLLJxvF6C78M5VQpT5lNkebpzQJdjTaS0zqJifmVWGJynk/fflNXa7wr5Vm3htlsFsMwADjvtDCeEQyMpDm2bzcA6e85LLWwvy434vNFaqLRrnyhf03r9ff3q6qqthXGJhct9W9nrN1LeaUFoK7GeH/YujScmLWGhRCRl5YPl+nrM0oCNyN3INYL3AbxQAtd6AYhAWqqBX6JR14cOndpF8irB90f7Zl45AlssfW0oKdXIu8qQslshbOjba+SneIOxFavGSG6tKAn6u4ZCiBlsHCeFvKu85sd7AkgKg2ZAdCCnpCU3CtXodmNPaqFvF0rVfcMtyINbzlgRa139nrsDDL/DHCAzAL3twQE2kHYQWalFB1ayNuN4FbVwHjYewfkDSlFRzzsHXP3xI6C8rjU3LLv8l9poYurOywJguGjxCn5pz+HNncgFtkoVw2wCfBVUtWO/nP9AYuuwXn+Xm/WAAAAAElFTkSuQmCC)}div[id^=GPlayerInfoClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAgCAYAAAAFQMh/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGUSURBVEiJ7ZQxT8JQEMf/hxOsDg6GOGtiYgyy0I4Ormj8BBqpZW9HFhNxRKom8AU0tHFRRx1KYlwcQIkrzM4mGnoOtlJKsa/q2N/4ernfu97dAxISEhJ+CYkEyZq1y8w5O9NRUKk44VFMsm7VHIdf2kdb9aicM0JS8BkIuezH3PxgfekKd3cclEqaeQxQmYg2soXt10H74uGnvKkoMROveHFE2JHelusAkz9C0iwDINU9IErRYlTeyIr79vnNgtybBZB3j9ayhZ5b+S3cSvd9F2nY6a46+VfGEeqx1z9mlL9PmJqE4TsoFZSWps9BbHG4PPBdWBpT7Mkva8zOmJzZabYzT3uiUkBguCbUPAy5LMUsQGC4fEpvZdTgFyJanb5qfxKHSbkB4B6g/JccseQC4nCpne6W+gfKtX/V4sgjeyPppgGGb2VwaleLKkA8uphlAFB8WU/sw82JlviJHC4CHgG408oNO90pj6QAQGxXiyoRvPeZwfQclVcIWWspkm4a409lECZJNw1ZaynTYxISEhL+gU/lu7XSwAzyjAAAAABJRU5ErkJggg==)}.GPlayerInfoLink,.GPlayerInfoPopup{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJTSURBVEiJ7ZZdSJNRGMd/59Vo9m6jQYKWRV/MQYGBXSStC2/S27YmXYfQZRexZiBhdNE2ke68qq5rY3rRjRFE1Du0KKIcwQYtaGpCH+r01ZrsPV2lc853c0IE+r87z3P+Px7OOc85B7adROFgcHDQAbRWYtR1fdTv9+vF8do1dCFanE7nU6vVagpbWFgglUq1A89NgQB2ux2Hw2EKVBRl45ypswqtq7BYM/oyD8emSE7rgMTVaKPTtac64E99mZtDKRZzeZobVABef55lPDPH6b2W+k0DH72aYjGX51rnEU4csAGQmJhnYCTNmx/qFSBa7DFdw+RXneYGdQUGcLLJxvF6C78M5VQpT5lNkebpzQJdjTaS0zqJifmVWGJynk/fflNXa7wr5Vm3htlsFsMwADjvtDCeEQyMpDm2bzcA6e85LLWwvy434vNFaqLRrnyhf03r9ff3q6qqthXGJhct9W9nrN1LeaUFoK7GeH/YujScmLWGhRCRl5YPl+nrM0oCNyN3INYL3AbxQAtd6AYhAWqqBX6JR14cOndpF8irB90f7Zl45AlssfW0oKdXIu8qQslshbOjba+SneIOxFavGSG6tKAn6u4ZCiBlsHCeFvKu85sd7AkgKg2ZAdCCnpCU3CtXodmNPaqFvF0rVfcMtyINbzlgRa139nrsDDL/DHCAzAL3twQE2kHYQWalFB1ayNuN4FbVwHjYewfkDSlFRzzsHXP3xI6C8rjU3LLv8l9poYurOywJguGjxCn5pz+HNncgFtkoVw2wCfBVUtWO/nP9AYuuwXn+Xm/WAAAAAElFTkSuQmCC)}button[id^=GPinfo_ID_],button[id^=GPremove_ID_],button[id^=GPvisibilityPicto_ID_]{background-color:transparent;border:none}button[id^=GPvisibilityPicto_ID_][aria-pressed=false]{background-position:-28px 0;left:0}button[id^=GPvisibilityPicto_ID_][aria-pressed=true]{background-position:0 0}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{max-height:28px}.GPshowLayerAdvancedTools{background-position:-112px 0;right:0;top:0}.GPlayerInfo{background-position:-55px 0;left:0}.GPlayerInfoOpened{background-position:-83px 0;left:0}.GPlayerOpacity{height:28px;left:28px;padding-left:8px;width:calc(100% - 100px)}.GPlayerOpacityValue{cursor:default;font-size:10px;font-style:italic;left:calc(100% - 60px);line-height:28px;width:32px}.GPlayerRemove{background-position:-140px 0;right:0}.GPlayerOpacity input{-webkit-appearance:none;-moz-appearance:none;background:none;cursor:pointer;display:block;height:100%;margin:0;overflow:hidden;padding:0;width:100%}.GPlayerOpacity input[type=range]:focus{box-shadow:none;outline:none}.GPlayerOpacity input[type=range]::-webkit-slider-runnable-track{-webkit-appearance:none;height:3px}.GPlayerOpacity input[type=range]::-webkit-slider-thumb:before{height:3px;left:-200px;pointer-events:none;position:absolute;right:50%;top:0}.GPlayerOpacity input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background-color:#505050;border:2px solid #fff;height:17px;position:relative;top:-7px;width:9px}.GPlayerOpacity input[type=range]::-moz-range-track{height:3px;width:80px}.GPlayerOpacity input[type=range]::-moz-range-thumb{background-color:#505050;border:2px solid #fff;border-radius:0;box-shadow:0;height:13px;position:relative;width:5px}.GPlayerOpacity input[type=range]::-ms-track{border:0;border-color:transparent;border-radius:0;border-width:0;color:transparent;height:3px;width:80px}.GPlayerOpacity input[type=range]::-ms-fill-lower,.GPlayerOpacity input[type=range]::-ms-fill-upper{background:transparent;border-radius:0}.GPlayerOpacity input[type=range]::-ms-thumb{background-color:#505050;border:2px solid #fff;height:13px;width:5px}.GPlayerOpacity input[type=range]::-ms-tooltip{display:none}[id^=GPlayerInfoPanel]{overflow-y:hidden;padding-bottom:10px;padding-top:10px;position:absolute;top:0}.GPlayerInfoPanelOpened{display:block}.GPlayerInfoPanelClosed{display:none}div[id^=GPlayerInfoTitle]{font-size:1.1em;font-weight:700;margin:auto auto 10px;padding-bottom:5px;text-align:center;width:calc(100% - 52px)}div[id^=GPlayerInfoQuicklook]{cursor:pointer;height:20px;left:10px;position:absolute;top:-2px;width:20px}div[id^=GPlayerInfoClose]{cursor:pointer;height:28px;position:absolute;right:10px;top:-8px;width:28px}div[id^=GPlayerInfoDescription]{font-size:.9em}.GPlayerInfoSubtitle{font-weight:700;margin-bottom:4px;margin-top:10px;padding-left:35px}.GPlayerInfoLink,.GPlayerInfoPopup{background-repeat:no-repeat;color:#999;cursor:pointer;line-height:20px;overflow-x:hidden;padding-left:23px;text-overflow:ellipsis;white-space:nowrap}.GPlayerInfoLink{background-position:0 -20px}.GPlayerInfoLink:hover,.GPlayerInfoPopup:hover{color:#333}.GPlayerInfoLink a,.GPlayerInfoLink a:visited .GPlayerInfoLink a:focus -.GPlayerInfoLink a:hover{color:inherit;text-decoration:none}.GPlayerName{cursor:move;left:28px;line-height:28px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 56px)}.outOfRange .GPlayerName{color:#aaa}div[id^=GPlayerInfoContent]{width:280px}[id*=GPlocationOriginPointer]{background-repeat:no-repeat}[id*=GPlocationOriginPointer],[id^=GPlocationStageAdd],[id^=GPlocationStageRemove]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPwAAAAcCAYAAABF79LlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAyySURBVHic7Zx/bFXXfcA/33ufHZjtkKcNhkVVtqpVtGUszUhs3BEFJWo0KYRUCKMqUynY5t2HAZuxdRkqLM5Gl3bVTJ4JPN/nXyyVkDBpGCvTUKOkodmKYtpRJWukTKgr0jY7yeS3wGuKzLv3uz/uffbz8/v9nkFE7yMhP5977vkcR/7e7z3nexyoUaNGjRo1atSoUaPGHYzc7gnUqLEYRKPRVYZhHFfVRtd1u7u7u99bTF/btv5VyUDguOA2utD949F9i+orl8DtnkCNGouBYRg28ISIYJrmK8B9i+lzAqYt6BMgGLDovnIxyrnJtm21bVurPZlctHREtKUjcst8NT4RPJL2+XfvdJ+qfktV46r6YCXj1DJ8BukPskAgsKqzs/N/bud8apSHqraKyDmgEdi82D5RaVXRc0CjVNmnqt8C/tz/tgX4cbljFR3w0Wh0hWEYPcATqTbbti+LyLlAIDDQ0dHxYbmTyMYXvhJdkayf8Xx+CLZ0Ri6Lq+dmMAYuj/VU1XeriMViO1X1wcnJyV19fX1utj6qKrFYbAB4z7KsF2/xFO9obNteA7wkIleAzaFQ6KeL6WvbfnSNY7ovqeoVdd3Nl078SVV9qvrXzAU7VLjvVtTNtm23AyNAU44u11S1MxwOv1zJZFK0dL7Qjkpen6h0vjXWUxVfOouZ4f1gH8RbSg1PTk5amUHvB/tRYDegQE+1gr6/v39pQ0PD28Bn83Q7GQwGt23dutWp1NfW3r/UaQq8DZrbp5xcnWjedvp0+b7BwcE2EflL4I8WDK/6eDgcfrXcsbPR0nGkDYysPjH08beG91XFp6rPAn0ZzXtE5Fi5YxZcw/vBfgpoUtUzqjq7VhGRDSJyFrhbRMYHBwe3lDuRFH6wn8IL9jMqcz5V2YBwFrhbRcdbdwxU7LuVuK77eeb+m3c1Nze/qKqzD10/2I/hBTuAqOrvVMM9Pj5e39DQ8Ar5gx3g6Xg8vuAXuVTua++rd5rMV/IGO4Dw9NW7pyryiciPyBJ8AIZhfK2SsbNj5PS5jlTFp6oHWBjsAJtU9RlV/ZqqblfV9ar6G8WOmzfgo9HoCrzMLsAz4XB4czgc/mHqeigUuhAKhb4EHABEREZGR0eXFyvP5Atfia7wM7ugPDMx2rv50si+Wd+lsZ4LEyO9X1Lfp6IjD+wYKNt3q7Esaw+Qnq13xWKxWF9fn5GW2XelLqrq0NTU1N5quOPx+Bg5fkkzUdXOSn0NjcGifVTBB3wD+KeFQ+sXo9FoSxXGn49k94nwxQc7ByryqeqfAn+T4/LjwDeBvwXGgDeBD1T1h6r6VVU18087D7ZtHwa+rqpnwuFw3o0I27bPAptE5HAoFDqUr28uWjojh1G+DpyZGO3N63uoY+CsoJtE9fBbY/tK9h07dqxxyZIlC37+ZDJ5LfVZRO41TXMys09nZ+f1Un0p0tbne1JthmEMO44zIyLdaf2GpqamwrnW+aVg2/Zx0h4kRTBTV1f3qXL3ZVo6I8fR0nw3VT5V7r6MbdtJy7ICeSpH71iW9fvljJ2Nlo5IcmK0N5CrcqTwzqXR3rJ8qtoDRCqY3r/ixeF0touFXumf9L++UMgiIv0AqrqxpOmlo55PRQv6UDyfIWX5AoHAZDKZvJb5b55C9b1sfUZGRnLtLRRERDQUCvWQluld1+1axGBXSgt2gPqbN2++WY6vpSOiJQY7QH2daFk+n0SO9iv+1zW2bS+rYPwifXIFQGDN2lDZvnvLvC/FHwLfzZXps2b4XE9Ky7Ik/Xrm97n6FyLXk3JitFfSr2d+n6t/Mdi2fR2vZFMygUDg7kqyPHiZfmhoaEBV96S3u647/P777y/YzCuEbdvrVfU5EXm0knnlICEi5xOJxLb9+/f/CqC1I7Je0edgcXzAefO6s+3iac+XD9u2fw48APxfervruq11dXXTjuOMAesBgsFgoNINyZaOyM+dwJIHzOSN+T6R1jqS046as77V15sDpWxI+ns6MaCrkjkCO0TkRGZjrQ5/G0nfsEshIiWXXQYHB9uA74vI0qpMbCGNqrqloaFhGrBaOo60KXwfFs8HbEk2mdOAla/j+Ph4fTwez/b66riu+25XV1cCeNi2bRvYUmmw39feVw9k9TXeZb77xvGeBPDwQx0RW2BLqdUHEVFVtfBic3uWLq8C/+Z/rgOCwGeAdcBdaf1CwIkF4+eT27b9U+B+VX0kfbMuG9FodINhGD8ALluW9Qf5+uaipSPi+UQfSd+sy8a6riMbXNfzTYz2luy7XWt4WFB6y0bWkl0ubNt+g/knvRaLDy3LWtHSEbllvonR3hXFdPRf2dMz7ofBYLC5GuXFbKwN2csyMvyHq683N1dSXkzHfyX/e+CPMy5lLcup6jJgANjmN7nAp0Xkv9P75c3wIvI9Vb3fMIz9QN4A9PsAnMvXL69P9Xsqcr8gBX2uY+xHQMr07d69O+s6zEsEHqZpJioN7kyyBbuqDgEzIpJq62pubqavr6/YoF+TrVFEXr3nnns2xuPxparaJiLPA58vMNbGYDB4fuvWrY5t2+vxdoGL8qny6seJ+MYlwealhnOjTeB5tIBPZOPqayvPnz691fGWCVl9BTFN03ScebG2fHp6+u+AfeWMV4h655emw7xl8vJfNE5WzScijqp+FS+Lby2i/0equh34dbzDcQbejv5Yer+8m3aO4xzFO1TzlG3bf5FqzzxLH4vFDuBt8H1UV1d3tOifKgMzeddR4BrKUw91RGZ9mWfpW3dEDiCeb0albN+tJlewT01NhS3L2sv8kl1Xc3Oz3dfXV8zfO/xLlrZTiUTiqXg8fhV4W0TWJpPJhwuMc0FV743H45dt2/4ZXha/kHY9AaDIAp+InAoknKcamoJXzZs33haXtb92V6CgD9V7f9E0ebmlI/Iz1ey+YnBd95+zzKn32LFjZe3TFPSpmcVH74bu6vlExMHL8K8U2V+BMDDjNy3YAMyb4Xft2vXB4OBgp4iMA8/HYrF1wBFVL/b81/j9qvok4IrIjkqO2P7oO7s+aN0x0Kmi4wLPt3RG1qkrR/DP1q7rOrLBdYz96gW7C+y4k47Y2rb9YvpuPBC1LGu3iGhfXx+q2hOLxUzmdtW7Vq5cOUPuV/8UB/HOWK9MNZimebCxsfGoqqbaDgcCgZmsd6eNIyLpGfawYRiPua77GoB/XJWAKwcdQ+f5DJIHnSbzKLDSXyge/viGk9cncFDhTZlrOIwajyGeT3V2lz0vQ0NDa13XTdW+zwOPAvUAgUCgF69GXzVauyJr1SWr7+NfJavqE5Gkqn4ZOA1sAv6jQP//UtWX8Db9Ppd5vWD2CIfDL4tIO36mV9U3Zm/21uxPAh+pansoFDpT0k+ThbfGel4WtB0/04vM+VzX+EEqs6sh7ROjvRX7biUichnvQYWqDk1OTu7xn8qp6xoKhXYzl+lVRN4tNK5lWe+Ypvkw8B2/abqrq+uKqj6d0TWUb5xgMHgxs23ZsmUXgClVfd0wjG6Aiyf2vmOKM893cWT/FaAk36evNy/wrU785gVgCvT1gOF0Z7ltAY7jzFY6XNd9FtiRdrm3v7+/upuL7lxlxRV5FknzCb1t7dX1ichNvD/IWSUixRzbHfC/fmbBWMVKR0dHlyeTyR5VfQKvBAJwGW8NPWBZ1v8WO1YxPLBjYHk9bo+KzPMJnEsGbg78JPZnVfWlWOy/lrNte5eq/p5lWfOCPR1VFf9t4N8ty4qW64rFYsMZp+YOWJb1zQLzmzenYkurAC0dkWFg1qdw4NJob15fZom1lNJqitScDcN4bOfOna+n2gcHB1/zy5QnLcvK3Pwqm9k5q/HYxNje1+faX3gN5FGUkxNjvVXzlYOqXgRWishvp7cXXZbzX9UPAYfS6vBl7cYXg/+qfgg4lFaHXzRfilJ+wcscPwoQDodz9vEfBIVe4wuSSCT2NjQ0bMJb050IBoPfLuK2g3jlIBM4WYrPvO7sdZpMzyec+K1rzd++VOgm5SAi20FNpDQfwPj4uBmPxwFID3bw9hXwXrerVlFobx83r+IVbtKDHUCQUwqPIrekglGIIbIcz63V4T/B+IdkiiprpbAs6xuUuQb1D8nM+iaKuGdirLdsH0A8Hj/rf7yQ5fIpwAZWlTt+JlebJnP6koElp8zkjar6KuAU8FxmY1n/xxvLsmSxM2E6E6O9Us6rXo1PNsPDw5/F/wMdwzD+KvO6ZVkfVdPX1tk/60MX+n4Sq66vEkTkl8A/ZLbXMnyNO5ZkMrlcRKYNw2jduXPnf+boNiMi/1gNn6OyHJjGMFonhvfm9AFV8VWBscJdatSoUaNGjRo1atSocQfx/wldqBUwtlSMAAAAAElFTkSuQmCC)}[id^=GPlocationStageAdd],[id^=GPlocationStageRemove]{border:none;cursor:pointer;height:28px;width:28px}.GPlocationOpen{background-color:unset}.GPlocationStageRemove{background-position:-84px}.GPlocationStageAdd{background-position:-56px}[id*=GPlocationOriginPointer]+.GPlocationOriginPointerImg{background-position:-1px}[id*=GPlocationOriginPointer]:checked+.GPlocationOriginPointerImg{background-position:-29px}.GPlocationStageFlexInput{max-height:28px;opacity:1}button.GPlocationOriginPointerImg[id*=GPlocationOriginPointerImg]{border-bottom-right-radius:3px;border-right:1px solid #999;border-top-right-radius:3px;width:28px}.GPlocationStageFlexInput{margin-bottom:5px}button[id^=GPshowMeasureAreaPicto-]{background-image:url(data:image/png;base64,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);background-position:-78px;background-repeat:no-repeat}button[id^=GPshowMeasureAreaPicto-][aria-pressed=false]{background-color:rgba(0,60,136,.5)}button[id^=GPshowMeasureAreaPicto-][aria-pressed=true]{background-color:rgba(0,60,136,.7)}button[id^=GPshowMeasureLengthPicto-]{background-image:url(data:image/png;base64,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);background-position:-24px;background-repeat:no-repeat}button[id^=GPshowMeasureLengthPicto-][aria-pressed=false]{background-color:rgba(0,60,136,.5)}button[id^=GPshowMeasureLengthPicto-][aria-pressed=true]{background-color:rgba(0,60,136,.7)}button[id^=GPshowMeasureAzimuthPicto-]{background-image:url(data:image/png;base64,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);background-position:2px;background-repeat:no-repeat}button[id^=GPshowMeasureAzimuthPicto-][aria-pressed=false]{background-color:rgba(0,60,136,.5)}button[id^=GPshowMeasureAzimuthPicto-][aria-pressed=true]{background-color:rgba(0,60,136,.7)}.GPmeasureTooltip{background:rgba(0,0,0,.5);border-radius:4px;color:#fff;padding:4px 8px;position:relative;white-space:nowrap}.GPmeasureTooltip-measure{font-weight:700}.GPmeasureTooltip-info{font-size:.75em;text-align:center}.GPmeasureTooltip-static{background-color:#fc3;border:1px solid #fff;color:#000}.GPmeasureTooltip-hidden{display:none}.GPmeasureTooltip-info:before,.GPmeasureTooltip-measure:before,.GPmeasureTooltip-static:before{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid rgba(0,0,0,.5);bottom:-6px;content:"";left:50%;margin-left:-7px;position:absolute}.GPmeasureTooltip-static:before{border-top-color:#fc3}[id^=GPmousePositionPanel-]{width:280px}button[id^=GPshowMousePositionPicto-]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD2SURBVFiF7ZbRDoIwDEUZ36oPRP9GMVF+k1c5vpQ4l24CFkfITsIDY2l70+6yqirsDITcdcSocxdQKHxhjTMEHIE7ED0CgAMuwNkyt7kgEfOUsJ0mSsRcZc9gLsoSoOWTG+C8707WfNqcNSfxRsmnA+qgMyOP1GjOSaxioCklKuyejRhJOtLLYyZI4muilosJC4y89957P2H/LMEJUapZaGzxpuAmrv3Gn0YuNIBFXZqaUMUodszNwjVbUWuQEDPatmrpueuOQu4fq+WoSbwD76uPas1BpwbgZJV/rctpI52KupmIaoHGMndh86wxcpZs1/4KO+UFLQ+rEigj9BAAAAAASUVORK5CYII=);background-position:1px;background-repeat:no-repeat}.GPmousePositionEditTool{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAYAAAAzI3woAAAB40lEQVR42tWWy07CQBSGi8+gPoJLE4SitqC+AioLF9qLuDC6bKuuSNS4QTo1ConWF4AWgz6IlzdB94A9pVNunZluiDjJJA3MdD7+/z9n4DjGyKh3PZjcrIyZAFrOlxfTKrrmVesDA/nPknmVLNwssPbnNPdI0JxHrlSaoyxL5Az3fl1rnFJflpIrhYxi/WCQ8ckr6Hv1AO3SYETD6WTPmj1Bd2wCVELUnQdYIxpulwgFMLxidfsHWy9J6XYjBNk3N3kVtYLvuiQowXCqcBCeou7WAGAUxq0Nr4E9kTZhZdISMkgZSsnmOVaKYJ9vxciBA6VCZQbAjadIFSEzWBlWRtKy9eqDepmi5WMUqmkLWr0aC8ZXQrG+4BCwiQUE9uGgs0I7DBALhhRekmWs9ZNQzQkoQa/bZGWmDDSeGZheVT0zWoJng4I+41q2Vixv+ZbJ6J1mWRRMRNAJHdkLaD8XqMXMkIzeAqDLuDCQmfHPqFBQ9lDKcBCUNskyXkIXQdm3SWVPKW1aS5gc0OzCxugphasJJtgUKqNYHV4x81NtjGGPkSo7WCnC1dFeOUTbpP2eOkV8dVD6TKgUXB1Z3T2hZgSsgExBaEMQ7xkys7RXmmdfro3j4FcnaKGHNbD2//39+EugX0KgD3FX5kMVAAAAAElFTkSuQmCC)}button[id^=GPmousePositionPanelClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD2SURBVFiF7ZbRDoIwDEUZ36oPRP9GMVF+k1c5vpQ4l24CFkfITsIDY2l70+6yqirsDITcdcSocxdQKHxhjTMEHIE7ED0CgAMuwNkyt7kgEfOUsJ0mSsRcZc9gLsoSoOWTG+C8707WfNqcNSfxRsmnA+qgMyOP1GjOSaxioCklKuyejRhJOtLLYyZI4muilosJC4y89957P2H/LMEJUapZaGzxpuAmrv3Gn0YuNIBFXZqaUMUodszNwjVbUWuQEDPatmrpueuOQu4fq+WoSbwD76uPas1BpwbgZJV/rctpI52KupmIaoHGMndh86wxcpZs1/4KO+UFLQ+rEigj9BAAAAAASUVORK5CYII=)}.GPmousePositionCoords,.GPmousePositionLabel{display:inline-block;line-height:20px}.GPmousePositionLabel{font-weight:700;width:100px}.GPmousePositionCoords{width:110px}.GPshowMousePositionSettingsPicto{bottom:5px;right:0;transition:all .5s ease-out 0s}.GPmousePositionSettingsLabel{display:block;font-weight:700;line-height:16px;margin:auto;text-align:center}.GPmousePositionSettingsSelect{margin-top:5px;margin-inline:auto;width:180px}.GPSexagesimal,.GPSexagesimalsec{border:1px solid #ccc;border-radius:4px;margin:0}input:read-only.GPSexagesimal,input:read-only.GPSexagesimalsec{text-align:right}.GPmousePositionSexagesimalLabel{font-size:1.2em;padding:0;vertical-align:middle}select.GPmousePositionDirection{border:1px solid #999;margin-left:2px}select.GPmousePositionDirection:disabled{-webkit-appearance:none;-moz-appearance:none;background:transparent;border:none;color:#000}select.GPmousePositionDirection:disabled::-ms-expand{display:none}select.GPmousePositionDirection:disabled::-ms-value{color:#000}.GPmousePositionAltitudeUnits,.GPmousePositionUnits{margin-left:5px}.GPmousePositionPanelEditTools{position:absolute;right:5px;top:20px}.GPmousePositionEditTool{cursor:pointer;display:inline-block;height:18px;width:18px}[id^=GPreverseGeocodingPanel-]{width:280px}.GPshowReverseGeocodingPicto{background-position:1px;background-repeat:no-repeat}.GPreverseGeocodingPanelClose,.GPshowReverseGeocodingPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH0SURBVFiF7dY/bE1xFAfwvlZMhFSim0i6mdnNnUWiOqGShqlsSPyJ0VQV+jqUDsQgNrFIECxi0MmmibRTWRph0I/hncfPde9z7/Uakdzv9ju/c77nfN/33vPuwECDBg0a9AsYwUW8wTo+4QUO/evZfgGOYQlfsYpbGM7Je6sY4xX6TUaPwR45LczgdBUhLdyNgdbxEstxXsFoJv8sNvAYV3ENnyP/dQUx36KmnScq5roeORulReF4FD3B7oRsOuLP0Eryd2BfhmOm+4OU7DmbcfZGpkcrYilmywpaCmdGcu7uB9n+P3A8jLzlkj27j1KKNgYzznQxl+diEfkXvCq4mwzCoz3qzyeNr5Rq2ltU1r3yYoJ4Fe9Ty5O7y0E6VlB7IWn8CFtLNy4WVV9MkN6M4ulMfK/OSl7D9py6gzovKzyoKqaEqNxlUYZwWGeb0XlnTuJSiIHxAve6z/m7umISQdl3BuZrCQrSUTzPEK7hCM7gHrZkaubxEe1NEPN3LiXkBzCBMWyL2GKQL2Ko7vAlxczlxOqLKmg8hNtB/sMp7MJh7OmjmO7azl3p/RbVdWohYk/jvFLVOZv5x1pR1AIm4vwhabazItcJPz99cldzxqkNnOqXlqKhzul8YdypWT8VTv22QZOcVuRM1Z+0QYMGDf53fAdKmTphX0Bz5wAAAABJRU5ErkJggg==)}.GPreverseGeocodingReturnPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4AUXDwQyeFmCzQAAATJJREFUSMftliFLBFEURs/dVUQURJvYLCaLGESz1T9gUJsoWARBEBRM/obFIFgMKxtsNhG2aTUIBqOCySLsHssuTNiVGZ47aU8aZr5537vz3TfvwZAhg0K9UL/U5bLMuuyljFXJYXYOHGVuxcAM1VPg5D+/1sgfZsfAWY9HG+ok0AY+gFfgJSI+UzI7tBht9UHdUqtFzQ5M41GdKZLhQmJMa0A9d6VqqDXT2e41fvQxrQCXQK+X7oGnzvUoMA3MAyvAWEbXjIjVIllW1eseM9/vo59SrzK6ljpXtIGq6k0ew0wcdxntTqGFHxEtYBO4zTPBiBDYBX6SGlAdVRud9baeQ99tunrKz6CizubULnYMn8vczprqW+HdIoEaMF5mhRPqe2kVRsQ30Cj7WLI0PJwNnF82zKAINyZs+wAAAABJRU5ErkJggg==);background-position:0;background-repeat:no-repeat}.GPlocationHighlight{background-color:rgba(255,200,0,.25);color:#222}[id^=GProutePanel-]{width:320px}.GPshowRoutePicto{background-position:1px;background-repeat:no-repeat}.GProutePanelClose,.GPshowRoutePicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE3SURBVFiF7ZZBTkJBDEDnE125MhyHHV5FF0RvI58EOIYuTIw79S5wB3lu+vU7tp8Z6IiLectJp+1L/xRCqFQqfwawATan7sMNhFP3McQoPgAugEcilDiLJXCe0wRwI/d+9dOLaYB74C4n8Rh417rsS+wRAngGLjNkPuTeWpMSmbnE7JKlgCerw0whgIfEmm10bwE0kcwiimlThcbAm4NQzoS6T6nPGhjxczIdKwY+Ta2A+YYShQ55Q5ZUPL08mYTCX0LeGFLlZKSoNaFXYOqQ35JSl4WGl/EkhPDilKtJPDuePRO6OjK3tgAOmlJO0SJvyJBZKWe+UiWEBmS6ta2udK/iJYTK/bAmFC8hdM33Xx91NUeT2gG3XsXdhSTvTCZlbjORaoGZZ+EiQp6cZcZvi3RRqVT+DZ/jc6+cH/zb+QAAAABJRU5ErkJggg==)}form[id^=GProuteForm]{padding:15px}.GProuteStageFlexInput{max-height:28px;opacity:1}.GProuteStageFlexInputHidden{max-height:0;opacity:0;overflow:hidden}.GProutePointLabelP{margin:2px 0 5px}.GProuteComputationLabel{margin-bottom:5px}.GProuteOriginPointerImg,.GProuteStageRemove,.GProuteTransportImg,div[id^=GProuteStageAdd]{background-image:url(data:image/png;base64,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);font-size:0}.GProuteFormMini{max-height:58px}.GProuteExclusionsOption{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAA4CAYAAADuMJi0AAAE60lEQVRYw+2YWWxUZRTHz/fd7y4zzAzTbaAdpgtQWsBiYVxYGpcEMCwRQkx48KHGhKg0WhESNYglwSUgWCKGTaMRBF4MwShpECUshlJqay2U0LCUwrRAp+0Ms997v8UnEl8Gp9Ppg2Z+bzfnn+/knHvud865AFmy/GfZVVZW/vvb9eduNn7Wc+ixGQ3/pm+UcO735VP3/rpsyc39TudHyXQ4maF61cqfZi97ocbjmVi6YGHNxoOeor3JtDskae606uqzFfPmvRqLxFg4EetIpiXJDJqqOHBwEEjIDyXjiVw4t/S1XD34TKs/MX+z4EEAgK0SwhPtjh+qq6tXBjGOtTY11a31D371qEygRxn3F3vWPVE1deN0G82T+m5BbCAIF+8lBttifLoFQeV0Wf7R7XbndsXird19/TUfAhgZeZ8H7eoXHYVWwzdBFTedsmhScfg0wfQPTRF7FfLdmBRRo4Q9RzTS8aeKRaeERAsC8TmRto30HJKqMCrhIcMUMuMcmADQJAQ5GJ4fqUMpFdE2mXgqOe+ewXhJFCHoJNJxu4omz7bhScVMyj/BeFPGUrlZIROOYRT4C0C0S0h8qUhHAAC2yGTFpUka7Skfx9/DZFZGnH2gEHxYwnc6EIguBYnDqtTzT3uDTFb3VdrEcZfWk5GUrgZxaI4QCyyaBAME04sUzTvL+dBD+xnOu8qiwrIgV1leEuf9JxhvTzu6Bgm5ThXkmNcciriaS8R2lXySTHvUqXb/lqsNp3Ju0qstx2Z7sfTZGuKsLAFkV4RK0J5k2s4wXYqYsO6WyYq0HUYN06c9XgX5SxcBuIt4gvJ40sJi7MaVONtVhGHmqIrmyLPzm29tqqf7ilwHUtHvVAjO9tksWbJkyQzehd7xo5ppUqW2tlbzLp380rhxitdB8q/4fD6acnsaKfX19c7Ji+QNJU/at7mmWaaZpklHNSY+irq6urzSxbBBy1PqEoJZfFdYoK2tjY2Jw4aGBpurJvKOmme8xWTTmgjq1DApAwAxoo6fIkieEnoF2+NvUDVqCekRiNIY4ip1eb1ekvEI39/65nOyO7hWtyWc0biOogkDooYOBhhujLEDAIZG4xADAH/4sH796y42ZWBNxBGrCEZMlNBNER1k8fBtdixwwzzY2toaTCtCr9drLXzKthgSiv7ztycfjvQo4O5fpWqR5eGojg2DCX1IBHUf3n2nSey5cOpCXzrfIXp6WZXXMtdYh8pi74JTL3WTijO913tDq2qXVxplA5vijgdTIvE4RO6zYOwO3t5/GhpbTrYMjnh78nq9VlwRfRmVRdewArM6rgJBTLbxErYEAL4J5vetwFJ4jghQxMNSSAyoO42Ttl0Xz58PpzXqS5JE7G5tqrAbM6lMiyljkimoQg1m8VhK7xrFwTpdixcbAaGz2/I+ekba0dzc/iDt3SIUCtH+Lv+lArWwjWPOOeMVJjI1imgRsyXKDas+mxoc83vKUfOC/dO2lst3M7LM3L816LdLBedlTIKU05lUNfJM2ZzEBZORXzuHrtk+vnSu63JGF9LhvmH9/uVAu8s9MUQFnWUSIweHFJ90z7qlq+n6L2OyAQMA918NdLrcrqgwoQrHyAHWqX49PDzMxsohAIAUuZ0YsHJHSO+G5t7eXj+k8ZsEjfCmsQGABgAmAMQBIJEdN7L8//gb3FshBGMt81oAAAAASUVORK5CYII=)}.GProuteModeLabel{display:block;margin-bottom:5px;text-align:center}.GProuteTransportImg{content-visibility:hidden;cursor:pointer;display:inline-block;height:28px;width:28px}.GProuteTransportImg:first-of-type{margin-left:18px;margin-right:10px}input[id^=GProuteTransportCar]+.GProuteTransportImg{background-position:-112px 0}input[id^=GProuteTransportCar]:checked+.GProuteTransportImg{background-position:-140px 0}input[id^=GProuteTransportPedestrian]+.GProuteTransportImg{background-position:-168px 0}input[id^=GProuteTransportPedestrian]:checked+.GProuteTransportImg{background-position:-196px 0}div[id^=GProuteTransportChoice] input{display:none}div[id^=GProuteTransportChoice] .gpf-radio-btn-group{justify-content:center}select[id^=GProuteComputationSelect]{width:100px}.GProuteResultsDetailsInstructionHighlight{background-color:rgba(255,200,0,.25);color:#222}.GProuteResultStage{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex}.GProuteResultStageLabel,.GProuteResultStageValue,.GProuteResultsValueLabel{display:inline-block;line-height:18px}.GProuteResultStageLabel,.GProuteResultsValueLabel{color:#666}.GProuteResultStageLabel{width:60px}.GProuteResultsValueLabel{width:65px}.GProuteResultStageValue{-webkit-flex:1;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.GPshowRouteExclusionsPicto{right:0;top:unset;transform:translateY(-100%);transition:all .3s ease-out 0s}.GProuteExclusionsLabel{display:block;font-weight:700;line-height:16px;margin-bottom:8px;margin-top:8px;text-align:center}.GProuteExclusionsOptions{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.GProuteExclusionsOption{background-color:#fee;border:1px solid #a77;border-radius:3px;color:#a77;cursor:pointer;display:block;height:28px;line-height:26px;padding-left:28px;padding-right:5px}input:checked+.GProuteExclusionsOption{background-color:#efe;background-position:0 -28px;border:1px solid #797;color:#797}button[id^=GProuteReset]{background-image:url(data:image/png;base64,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);background-position:-224px;opacity:.8;transition:opacity .2s ease-out}div[id^=GProuteResultsValueDist],div[id^=GProuteResultsValueTime],input[id^=GProuteResultsShowDetails]+label+label:hover,input[id^=GProuteResultsShowDetails]+label:hover{color:#366291}div[id^=GProuteResultsStages]{margin-bottom:15px}div[id^=GProuteResultsValueDist],div[id^=GProuteResultsValueTime]{display:inline-block;font-weight:700;line-height:18px;width:80px}select[id^=GProuteResultsComputationSelect]{width:100px}div[id^=GProuteResultsNew]{background-color:#366291;background-image:url(data:image/png;base64,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);background-position:-224px 0;border-radius:3px;cursor:pointer;height:28px;opacity:.8;position:static;transition:opacity .2s ease-out;width:28px}.GPfakeBorder{border-bottom:1px solid #999;display:inline-block;height:14px;width:60px}.GPfakeBorderLeft{margin-left:15px}input[id^=GProuteResultsShowDetails]+label,input[id^=GProuteResultsShowDetails]+label+label{cursor:pointer;font-weight:700;line-height:28px;text-align:center;transition:color .2s ease-out;vertical-align:top;width:130px}input[id^=GProuteResultsShowDetails]+label,input[id^=GProuteResultsShowDetails]:checked+label+label{display:inline-block}input[id^=GProuteResultsShowDetails]+label+label,input[id^=GProuteResultsShowDetails]:checked+label{display:none}div:has(input[id^=GProuteResultsShowDetails])+div[id^=GProuteResultsDetails]{max-height:0;opacity:0}div:has(input[id^=GProuteResultsShowDetails]:checked)+div[id^=GProuteResultsDetails]{max-height:200px;opacity:1}div[id^=GProuteResultsDetails]{overflow-y:auto;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s}.GProuteResultsDetailsInstruction,.GProuteResultsDetailsNumber{color:#666;display:inline-block;line-height:16px;margin-top:4px}.GProuteResultsDetailsNumber{font-weight:700;text-align:right;vertical-align:top;width:22px}.GProuteResultsDetailsInstruction{padding-left:5px;width:calc(100% - 30px)}input[id^=GProuteSubmit-]{padding:0 10px;width:fit-content}[id^=GPsearchEngine-]{align-items:center;flex-direction:row}.GPshowSearchEnginePicto{background-position:0}.GPsearchRadioContainer,.GPshowSearchEnginePicto{background-image:url(data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWa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);background-repeat:no-repeat}.GPsearchRadioContainer{background-color:rgba(0,60,136,.5);background-position:-26px;border:2px solid hsla(0,0%,100%,.4);border-radius:4px;box-sizing:border-box;color:transparent;cursor:pointer;height:32px;overflow:hidden;padding:2px;position:relative;transition:border-radius .5s ease-out 0s;width:32px}.GPbuttonsContainer{padding-left:5px;padding-right:5px}.GPsearchRadioContainer:hover{background-color:rgba(0,60,136,.7)}.GPshowAdvancedSearch,.GPshowAdvancedSearch:hover{background-color:#fff0}.GPshowGeolocate{background-position:-102px;margin-right:5px}.GPshowGeolocate,.GPshowSearchByCoordinate{background-image:url(data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWa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);background-repeat:no-repeat;transition:border-radius .5s ease-out 0s}.GPshowSearchByCoordinate{background-position:-76px}.GPsearchInputReset{background-image:url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=);background-position:0}button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]{border:none;max-width:0}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]{border-top-right-radius:0}button[id^=GPsearchInputReset]{border-bottom-right-radius:5px;border-top-right-radius:5px;height:32px;width:32px}button[id^=GPadvancedSearchClose],button[id^=GPcoordinateSearchClose],button[id^=GPgeocodeResultsClose]{height:32px;right:0;top:0;width:30px}button[id^=GPcoordinateSearchClose],button[id^=GPgeocodeResultsClose]{background-position:0 0}button[id^=GPadvancedSearchClose]{background-repeat:no-repeat}button[id^=GPcoordinateSearchClose],button[id^=GPgeocodeResultsClose]{background-image:url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=)}button[id^=GPadvancedSearchClose]{background-image:url(data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWa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);background-position:-50px 3px}form[id^=GPsearchInput-]{width:280px}form[id^=GPsearchInput-] input{border:1px solid #999;border-bottom-right-radius:5px;border-top-right-radius:5px;color:#333;display:block;font-size:1em;padding:0 30px 0 5px;width:100%}form[id^=GPsearchInput-] input:disabled{background-color:#ddd;color:#999}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]{max-width:280px}.GPsearchInputText{height:32px}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{margin-left:33px;position:absolute;top:35px;width:310px}[id^=GPautocompleteResults-]{box-shadow:0 0 6px #000}dialog[id^=GPgeocodeResultsList],div[id^=GPautoCompleteList]{background-color:var(--background-default-grey);max-height:140px;position:absolute;width:280px}div[id^=GPautoCompleteList]{top:35px}dialog[id^=GPgeocodeResultsList]{border-radius:4px;overflow:hidden;position:absolute;top:35px}div[id^=GPgeocodeResults-]{background-color:#fff;max-height:140px;overflow-y:auto;position:relative;width:100%}.GPadvancedSearchCodeLabel,.GPadvancedSearchFilterLabel,.GPcoordinateSearchLabel{max-width:105px}.GPadvancedSearchCode,.GPadvancedSearchCodeLabel,.GPcoordinateSearchSystemsLabel,.GPcoordinateSearchSystemsSelect,div[id^=GPadvancedSearchFilters]{margin-top:15px}.GPadvancedSearchFilterInput,.GPadvancedSearchFilterLabel,.GPcoordinateSearchInput,.GPcoordinateSearchLabel,.GPcoordinateSearchSystemsLabel,.GPcoordinateSearchSystemsSelect,.GPcoordinateSearchUnitsLabel,.GPcoordinateSearchUnitsSelect{margin-bottom:5px}.GPshowToolBoxPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAlqAAAJagFGUcfpAAAAB3RJTUUH4AsKDCgkqrnTSAAAAw1JREFUSMe9ll2IlVUUhp9vnEintH+FulAyI+uihClKjSZtQJAJrRnDoKt+oCIIjSIrDCokKXQiCqkuTMFAJtQLCwItMsQbURmjiRIK+pmSoSjJ/JmnC98je6ZzjmVMCzbnO/vstd691nrf9R0YA1NRn2SsTX1E/UM9vVc1OdwC3A7cBLQD1wE/Al8AA0BfVVXf1vFbAmwCjgPjq+oUREsDkBuA3UBfwL4EXgS2AgJLgIPqw2pV+HUCG4B9/yTtF9Rj6pvqBeo4db7apU5N/VGXqofVHeo09Ub1N3Wdeo/6Z1m60SAL1KPqrQnWqR5Qt6pvqYfU1WqbWqnvqt+p89Sf1T61pSmQOkH9Wl2ZLDaru9T2gLapH6mvB6RXHVRvU79Rd6rnqteoH6vHGwEtV7/K4ZXq+qJME9VP1JfzfZU6lMwPqnvVSfltkvpMyl8X6L3ccmIyayuAdqjP5flZ9deA7M7lpqjjC5+eZkAH1AfT5LVxaFUfV39JoGXq72qHul39Qb0ypX5fvaIRUEnv6dHIZGAwe28Ac4DngQeAl4DFeZ4NLAAOAb3ZP1nEG6HREmgAmAEcBmYCTwFTgaXAEPAK0AMsBO4G7gT2A08Aj9YKM+qzbul61Q0hQ7+6L43tCVW71RXqCXVRUaJhdaOnbHIY2d2Mdd3q96F5e0TYFV3dl/4Nq/cHZE7m2avqLQXQeTlzohFQm/q5+k4C3ZFAD6mL4/h0frs6U2FzMpgdoEujq371ZCMg1GvDqjXqkTCuI1mtyZnLQv9dYWItO9VLwsC7GgIVYPfGaYU6K5rZmJtPUPeoAwla85lbALWcEagA61Svyoj5QD0nAbaoP0U71AJFvKoX50J/A2odDVRVFWo/8Fk00p13y2tAJzAv+6cvVmjGYo3QUWudjC4EPgSORjNHgGXAY3kfzcoqbcaZ9NM6eoID24CLMhGGgA5geabFzVn1bBAYBs4HLm/Wm3HqttB2ZtHof7va1U/Ts7oZvQ10AWuB67PO1vYAc+tls9qxsZETtinf/6PV/gX9b/YXjLd1o+WqCcMAAAAASUVORK5CYII=);background-repeat:no-repeat}.GPzoomIn{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHlsZT0ic3Ryb2tlOiMwYjZiYTc7c3Ryb2tlLW9wYWNpdHk6MSIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTcgMTJoMTBNMTIgN3YxMCIgc3R5bGU9InN0cm9rZTojMGI2YmE3O3N0cm9rZS1vcGFjaXR5OjEiLz48L3N2Zz4=);border-bottom:unset;border-bottom-left-radius:0;border-bottom-right-radius:0}.GPzoomIn,.GPzoomOut{background-position:50%;background-repeat:no-repeat;background-size:auto auto;height:32px;width:32px}.GPzoomOut{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHlsZT0iZmlsbDojZmZmO3N0cm9rZTojMGI2YmE3O3N0cm9rZS1vcGFjaXR5OjE7ZmlsbC1vcGFjaXR5OjEiLz48cGF0aCBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwIiBzdHlsZT0iZmlsbDojMGI2YmE3O3N0cm9rZTojMGI2YmE3O3N0cm9rZS1vcGFjaXR5OjE7b3BhY2l0eToxO2ZpbGwtb3BhY2l0eToxIi8+PC9zdmc+);border-top:unset;border-top-left-radius:0;border-top-right-radius:0}.GPzoomIn:hover,.GPzoomOut:hover{cursor:pointer}.ol-custom-full-screen button{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAA8CAYAAABxVAqfAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAxRJREFUWIXtmD9PVEEUxX/XXRaDWlvb8gUsBEMICpKowYbY2Vr4J5JQWWxtZyxsaFEE5Z8xWIDRIAklUT+Bn4FFwSXH4s2D9TEzb9ZEE3FP9+bde8/M27Nz7gx0cNxhxQFJfcCFQPwO8NTMmoWcKnAb6AnkbZjZx+hMJNXlx56kgUjegIvxoV6MPxGdxSEawIiZvQ8FuHeDwHZKwRTifeCGmb0rC3Sf8yrQLIstI94HKsA9Sd1lxSR1AXeBqsv9LeIGMAIsAqPAfIzckb4AxoAV4IqrkQYnrgMhSapJWnIimYnkPXcxS5JqbiwXXD2FeFLSYGGsJmlO0lYkb0vSy5y0ZbxP0kQKca00qE38iZod/IP4W+LybSD3PX+nLkkzkjYjxTddTFdhvB+4k0LcA7xt2UC6gFlgHPgaInbvxoHZnNzVWAPORPIOZpjbYkPSkKQF9/ymbMssxF5yNby2GCOWpGYKaYC82VLnCHGZO1XIXOaxme2WEZvZD+AJh64WRIofV4CFouB8cEJaLiNNJYaC4AKkA2RCOpVS0NfsDQFDgfgd4JGZfS/knAQmCTd7q2a2mjKhDjro4BjDZxYpBlKEd8uU9FnSYrGgpIt4TJ3siDNUiO12zf2XZGLgE3AdeJWTu8JrwGlPfA+wkpO7nHngGhA8BByBpIqkaeelK5JGY6ZeaB5GJC2757liK9QuedTUA81DlDRoi2a2D0yRnXVL/bUFefMw5RqD9oidkF6TnXXbRYXsWBuy16CqcyElmXoAvwiuiCOrcb9LL/AwUHDDM7YKfAvE90r6EPvsHRxP+LrMGlnH6NsawdMxlnSm22Sd6V7pbCT1S9qVH3VPfOgacldZk38E3v+xma3TxvVgAA1g2NVKI3bkG2TXg9EbugD2gbHY3Wdsy6wBD8i2v9K7yRbke/uEshNGOrEjnSNb8SvgMmnXgw0ykT0DhskOe0FyH/F8i7VV3VguuLonvt4qJElVlytJ8z6OkPOcBaaBW/ltvJmtKzuqng+s9EBIZtaUdBPYBc4lrzgGn7m33WV08F/gJ/JO7y3zOGA+AAAAAElFTkSuQmCC);background-repeat:no-repeat}.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=false]{background-position:0 0}.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=true]{background-position:0 -30px}.GPshowOverviewMap{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyA1LjcgOS4zIDNsNS40IDIuNyA1LjY3My0yLjQzMWEuNDUuNDUgMCAwIDEgLjYyNy40MTNWMTguM0wxNC43IDIxbC01LjQtMi43LTUuNjczIDIuNDMxQS40NS40NSAwIDAgMSAzIDIwLjMxN3ptMTIuNiAxMi45NTYgMy42LTEuNTQzVjUuNzNsLTMuNiAxLjU0M3ptLTEuOC0uMTE4VjcuMjYybC0zLjYtMS44djExLjI3NnptLTUuNC0xLjgxVjUuMzQzTDQuOCA2Ljg4N1YxOC4yN3oiLz48L3N2Zz4=);background-position:2px;background-repeat:no-repeat;background-size:auto auto}div[id^=GPlegends-]{display:none}div[id^=GPcatalog-]{display:block}.GPshowCatalogPicto{background-image:url(data:image/png;base64,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bS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDpjMmUxMjdjOC0xOTM1LTQ0OGEtYjYxYy0xY2RkNjI3NWZkYzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTFkYjFmNjktN2M0MC00MDgxLWJkZWEtN2YxMzFjODQ3OTg4IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NzdiZmRhYWMtNmEyNi00MTY5LWEzMWItYmZlN2Q5NThlOGU3IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzI5MTg5ODYxNDQxMDI1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZGI2YWQ2MTUtZWQwYS00MTEyLTljYjQtYTIyZDkwMDkwMGNkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0xMC0xN1QyMDozMTowMSswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5TF0SEAAAABmJLR0QA8gDyAPIuRIzMAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH6AoREh8BMSlSAgAAAXpJREFUWMPtl0FugzAQRf+Peo9ygC57AI7Col1EzR1ortBAKiWLpCdJcoduugoXaX43RnIpYEPdQCW+xMYaBj9G8z0GJk26qvjbBJJiABGAWwAnAAXJYlRAkhKzQVsnkkcrJgKwAxDXpHgG8DYkWBXorJ9KbBi5tRti7zcN68eaNftv+2w2kVSQXHr8wEcA9wDmJC8NMQTwAuCDZBayej7VKXXwgZH0aeK3kmZ1MJIyE3ORtAgJFKubIke+vBK/NtWwYdaVmDwkUNIRKHbko6RV5Z2tpFmlMqU2dVW8WoU8czZB5cFgTK98exwu2KuHHFDBYFy2nXoCJR2/2wS19YXpRWyseO8RmrpMwfOwJ64h00+HSkV3xjjKtbMPVIMB9KpSsPOppgfPPr3U4mbZoFANxtIXZtZm6aMd9wc/WP8A6MEafTYto8/KGn2eul4fUnPHCaGl6xohaQ7gDsCCpFqG0wzAO8nXEOdQX8VjuD7sA36jwKRJk/6NvgB/JgixGmzy6AAAAABJRU5ErkJggg==);background-position:0;background-repeat:no-repeat}dialog[id^=GPcatalogPanel-]{width:280px}.GPcatalogPanelClose{background-image:url(data:image/png;base64,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bS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDpjMmUxMjdjOC0xOTM1LTQ0OGEtYjYxYy0xY2RkNjI3NWZkYzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTFkYjFmNjktN2M0MC00MDgxLWJkZWEtN2YxMzFjODQ3OTg4IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NzdiZmRhYWMtNmEyNi00MTY5LWEzMWItYmZlN2Q5NThlOGU3IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzI5MTg5ODYxNDQxMDI1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZGI2YWQ2MTUtZWQwYS00MTEyLTljYjQtYTIyZDkwMDkwMGNkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0xMC0xN1QyMDozMTowMSswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5TF0SEAAAABmJLR0QA8gDyAPIuRIzMAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH6AoREh8BMSlSAgAAAXpJREFUWMPtl0FugzAQRf+Peo9ygC57AI7Col1EzR1ortBAKiWLpCdJcoduugoXaX43RnIpYEPdQCW+xMYaBj9G8z0GJk26qvjbBJJiABGAWwAnAAXJYlRAkhKzQVsnkkcrJgKwAxDXpHgG8DYkWBXorJ9KbBi5tRti7zcN68eaNftv+2w2kVSQXHr8wEcA9wDmJC8NMQTwAuCDZBayej7VKXXwgZH0aeK3kmZ1MJIyE3ORtAgJFKubIke+vBK/NtWwYdaVmDwkUNIRKHbko6RV5Z2tpFmlMqU2dVW8WoU8czZB5cFgTK98exwu2KuHHFDBYFy2nXoCJR2/2wS19YXpRWyseO8RmrpMwfOwJ64h00+HSkV3xjjKtbMPVIMB9KpSsPOppgfPPr3U4mbZoFANxtIXZtZm6aMd9wc/WP8A6MEafTYto8/KGn2eul4fUnPHCaGl6xohaQ7gDsCCpFqG0wzAO8nXEOdQX8VjuD7sA36jwKRJk/6NvgB/JgixGmzy6AAAAABJRU5ErkJggg==)}.GPtabsList{background-color:#f1f1f1;border:1px solid #ccc;display:flex;list-style-type:none;margin:0;overflow:hidden;padding:0}.GPtabList{flex:1 1 0px}.GPtabButton{background-color:inherit;border:none;cursor:pointer;float:left;outline:none;padding:14px 16px;transition:.3s}.GPtabButtonActive{background-color:#ccc}.GPtabContent{border:1px solid #ccc;border-top:none;display:none;padding:6px 12px}.GPtabContentSelected{display:block}.GPlabelActive:hover{background-color:#ccc}.GPcatalogButtonSection{background:unset;border:unset}button[aria-expanded=true].GPcatalogButtonSection span.GPshowCatalogAdvancedTools{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.GPshowCatalogAdvancedTools{background-image:url(data:image/png;base64,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ICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmM1NWM2ODRkLWY2OGQtNDExNy04ZGYzLTAwYWMzMjQ4YTY5YSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjNmYWM4YTllLWJkMTUtNGJiOC04ZGQyLTkwZDUyMjE0YmFmOCIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1QOlRpbWVTdGFtcD0iMTcyOTI0NTAwMjg0NjU2OCIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjMwIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjcwMTNhZTFjLTcyMjktNDJmZS1iMzAzLTU3NGFmMWE3ZmQxMyIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMTAtMThUMTE6NTA6MDIrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+UnHxogAAAAZiS0dEAPIA8gDyLkSMzAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+gKEgkyAorMuigAAAIkSURBVFjD7Zc/aBRBFMa/t39EFEMQTrQ2CiIi+K+Q3ZA+CLJ7nqWQwlRJGs3ddUnlZdUiXJEqINjE9e5UjFWag9sEbNRGhGB6MXKgQQPxZp5FLhLCXXbXXSQH8ytnhuF9771v3yygUCgUCkVXKOrB6/dqJzQD42A5DNAZAGBglYA3UlB55ZHztWcFWoXaLTDPAzjW5cgGMUYanlvpOYFtcc8inGVi5A6aSAptS50/761co+QAAOxCba/GH6TJgcaD3HqSoKx89RMx15tH5MTHqdzW7r3zU/6h47+0WSYaCmbcc2F3aftuGhjfpy075asPrI8lTjtjgYlG+zf1JbvoZ3aW7aKf6d/Ul5hoFIyFxBW08tUPAC7Giw3vl2fcS0k1tq3xBEATpN3UmLYkxCsAp8C4G3ju0yj3aCH7pzstNkrO3zbtkLGBNLwTlJznIG1wO2uyLiFWAJggzYoqDgCM8ILE7i9OXL0dDx7+PZH5iast0isAYLDIrh8VTXuyMpeKBwFei28fWkvTg8KACDzXCjzXEgZEXA+GCKTFf/gwv07cnp47DaLbBFxhqb+zCi8uD+ZfXmCpvyXgGhh3As+dTixQCioD2IgR23ezZZYPkgdDB709Wc0ywY8y6Jkpu+w5tTQH9dB9/+RuD9Yf5r6k/lTbFsnzAPV1qxwzjaQt7r8+tu2inwHrY8wYBnC2vbzKoEWzZZbrj298U/8uCoVCoegx/gAQwd9vpqyHDwAAAABJRU5ErkJggg==);background-position:-26px 0;display:inline-block;height:28px;vertical-align:middle;width:28px}#header-search>label,div[id^=GPterritories-]{display:none}div[id^=GPcontrolList-] .GPshowOpen>span{color:#fff;display:block;font-size:24px;height:24px;line-height:24px;pointer-events:none}button[id^=GPshowControlListPicto-][aria-pressed=true]+dialog{width:200px}.GPcontrolListPanelClose{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIRSURBVFiF7ZbRS1RBFMbPbLq9ldjaY88Zkv1JQRqt+Wf0aCrYBuY/UkRQRFQvQQax+JipEUIoQdHq/nrYb3K8zl33zl20h/vBwnLOmfPNN+fMmWtWoUKFMwPwjiO8Pu/9xOAGDQRqZnYYmLrOuQvD31I51AYJAqbNbNnMfgXm38AyMFV2E8AssKpDy4txwAowX4booogO1WYdYEu/jmwHIqqXEOPzr8VEScwjxXSTREnMSyXZBGaAscA/DtyTOIDnKaKAFsfxGHCB38kWopUiaNVffmC8T9wE8FaxKwk8vpVCrAG1TGU8nsSqeBrJLbXBl5gY4C7wOSNqW+13Y4iistUrLkYE/lTu5PhfAR8ytjmteViYMF9UeTFK3qZ36S9HfJeAP8CDjL2hqq4nkVpfUdFhEcNIjv2ame045/aA22Z2PeMbNbOn4QLn3C6wK38ZxN7Ggd/LKICfwKb+tyMntgGcOAzgO/AjkTM2AJKqFEvuW27s9Oh/aybUch8T+PKmWdaWJiro49kCa+a1ZmFIYvzYjo70ooJu6rS/Ao0B4q8C31TVyYJcZ/aw+iRv+omSmPeKXUrgmeHo0yc6mjOV6gL3i/IYUAdeKMkW0ASuBP6G2mxHMc+A0cJEvVxNVSp3mklUC2imcPgkdSU5CE5nWyK6snXofXUniTkXAFPAIvAJ2Af2gHVgoeidqVChwv+NvxOT737B3Fc7AAAAAElFTkSuQmCC)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div{align-items:center;column-gap:1rem;display:flex;flex-direction:row;padding:.5rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div:hover{background-color:#eee;cursor:pointer}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button{flex-shrink:0}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button:hover{background-color:rgba(0,60,136,.5)} +.GPlayerInfoLink a:hover{color:inherit;text-decoration:none}.GPlayerName{cursor:move;left:28px;line-height:28px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 56px)}.outOfRange .GPlayerName{color:#aaa}div[id^=GPlayerInfoContent]{width:280px}[id*=GPlocationOriginPointer]{background-repeat:no-repeat}[id*=GPlocationOriginPointer],[id^=GPlocationStageAdd],[id^=GPlocationStageRemove]{background-image:url(data:image/png;base64,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)}[id^=GPlocationStageAdd],[id^=GPlocationStageRemove]{border:none;cursor:pointer;height:28px;width:28px}.GPlocationOpen{background-color:unset}.GPlocationStageRemove{background-position:-84px}.GPlocationStageAdd{background-position:-56px}[id*=GPlocationOriginPointer]+.GPlocationOriginPointerImg{background-position:-1px}[id*=GPlocationOriginPointer]:checked+.GPlocationOriginPointerImg{background-position:-29px}.GPlocationStageFlexInput{max-height:28px;opacity:1}button.GPlocationOriginPointerImg[id*=GPlocationOriginPointerImg]{border-bottom-right-radius:3px;border-right:1px solid #999;border-top-right-radius:3px;width:28px}.GPlocationStageFlexInput{margin-bottom:5px}button[id^=GPshowMeasureAreaPicto-]{background-image:url(data:image/png;base64,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);background-position:-78px;background-repeat:no-repeat}button[id^=GPshowMeasureAreaPicto-][aria-pressed=false]{background-color:rgba(0,60,136,.5)}button[id^=GPshowMeasureAreaPicto-][aria-pressed=true]{background-color:rgba(0,60,136,.7)}button[id^=GPshowMeasureLengthPicto-]{background-image:url(data:image/png;base64,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);background-position:-24px;background-repeat:no-repeat}button[id^=GPshowMeasureLengthPicto-][aria-pressed=false]{background-color:rgba(0,60,136,.5)}button[id^=GPshowMeasureLengthPicto-][aria-pressed=true]{background-color:rgba(0,60,136,.7)}button[id^=GPshowMeasureAzimuthPicto-]{background-image:url(data:image/png;base64,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);background-position:2px;background-repeat:no-repeat}button[id^=GPshowMeasureAzimuthPicto-][aria-pressed=false]{background-color:rgba(0,60,136,.5)}button[id^=GPshowMeasureAzimuthPicto-][aria-pressed=true]{background-color:rgba(0,60,136,.7)}.GPmeasureTooltip{background:rgba(0,0,0,.5);border-radius:4px;color:#fff;padding:4px 8px;position:relative;white-space:nowrap}.GPmeasureTooltip-measure{font-weight:700}.GPmeasureTooltip-info{font-size:.75em;text-align:center}.GPmeasureTooltip-static{background-color:#fc3;border:1px solid #fff;color:#000}.GPmeasureTooltip-hidden{display:none}.GPmeasureTooltip-info:before,.GPmeasureTooltip-measure:before,.GPmeasureTooltip-static:before{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid rgba(0,0,0,.5);bottom:-6px;content:"";left:50%;margin-left:-7px;position:absolute}.GPmeasureTooltip-static:before{border-top-color:#fc3}[id^=GPmousePositionPanel-]{width:280px}button[id^=GPshowMousePositionPicto-]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD2SURBVFiF7ZbRDoIwDEUZ36oPRP9GMVF+k1c5vpQ4l24CFkfITsIDY2l70+6yqirsDITcdcSocxdQKHxhjTMEHIE7ED0CgAMuwNkyt7kgEfOUsJ0mSsRcZc9gLsoSoOWTG+C8707WfNqcNSfxRsmnA+qgMyOP1GjOSaxioCklKuyejRhJOtLLYyZI4muilosJC4y89957P2H/LMEJUapZaGzxpuAmrv3Gn0YuNIBFXZqaUMUodszNwjVbUWuQEDPatmrpueuOQu4fq+WoSbwD76uPas1BpwbgZJV/rctpI52KupmIaoHGMndh86wxcpZs1/4KO+UFLQ+rEigj9BAAAAAASUVORK5CYII=);background-position:1px;background-repeat:no-repeat}.GPmousePositionEditTool{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAYAAAAzI3woAAAB40lEQVR42tWWy07CQBSGi8+gPoJLE4SitqC+AioLF9qLuDC6bKuuSNS4QTo1ConWF4AWgz6IlzdB94A9pVNunZluiDjJJA3MdD7+/z9n4DjGyKh3PZjcrIyZAFrOlxfTKrrmVesDA/nPknmVLNwssPbnNPdI0JxHrlSaoyxL5Az3fl1rnFJflpIrhYxi/WCQ8ckr6Hv1AO3SYETD6WTPmj1Bd2wCVELUnQdYIxpulwgFMLxidfsHWy9J6XYjBNk3N3kVtYLvuiQowXCqcBCeou7WAGAUxq0Nr4E9kTZhZdISMkgZSsnmOVaKYJ9vxciBA6VCZQbAjadIFSEzWBlWRtKy9eqDepmi5WMUqmkLWr0aC8ZXQrG+4BCwiQUE9uGgs0I7DBALhhRekmWs9ZNQzQkoQa/bZGWmDDSeGZheVT0zWoJng4I+41q2Vixv+ZbJ6J1mWRRMRNAJHdkLaD8XqMXMkIzeAqDLuDCQmfHPqFBQ9lDKcBCUNskyXkIXQdm3SWVPKW1aS5gc0OzCxugphasJJtgUKqNYHV4x81NtjGGPkSo7WCnC1dFeOUTbpP2eOkV8dVD6TKgUXB1Z3T2hZgSsgExBaEMQ7xkys7RXmmdfro3j4FcnaKGHNbD2//39+EugX0KgD3FX5kMVAAAAAElFTkSuQmCC)}button[id^=GPmousePositionPanelClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD2SURBVFiF7ZbRDoIwDEUZ36oPRP9GMVF+k1c5vpQ4l24CFkfITsIDY2l70+6yqirsDITcdcSocxdQKHxhjTMEHIE7ED0CgAMuwNkyt7kgEfOUsJ0mSsRcZc9gLsoSoOWTG+C8707WfNqcNSfxRsmnA+qgMyOP1GjOSaxioCklKuyejRhJOtLLYyZI4muilosJC4y89957P2H/LMEJUapZaGzxpuAmrv3Gn0YuNIBFXZqaUMUodszNwjVbUWuQEDPatmrpueuOQu4fq+WoSbwD76uPas1BpwbgZJV/rctpI52KupmIaoHGMndh86wxcpZs1/4KO+UFLQ+rEigj9BAAAAAASUVORK5CYII=)}.GPmousePositionCoords,.GPmousePositionLabel{display:inline-block;line-height:20px}.GPmousePositionLabel{font-weight:700;width:100px}.GPmousePositionCoords{width:110px}.GPshowMousePositionSettingsPicto{bottom:5px;right:0;transition:all .5s ease-out 0s}.GPmousePositionSettingsLabel{display:block;font-weight:700;line-height:16px;margin:auto;text-align:center}.GPmousePositionSettingsSelect{margin-top:5px;margin-inline:auto;width:180px}.GPSexagesimal,.GPSexagesimalsec{border:1px solid #ccc;border-radius:4px;margin:0}input:read-only.GPSexagesimal,input:read-only.GPSexagesimalsec{text-align:right}.GPmousePositionSexagesimalLabel{font-size:1.2em;padding:0;vertical-align:middle}select.GPmousePositionDirection{border:1px solid #999;margin-left:2px}select.GPmousePositionDirection:disabled{-webkit-appearance:none;-moz-appearance:none;background:transparent;border:none;color:#000}select.GPmousePositionDirection:disabled::-ms-expand{display:none}select.GPmousePositionDirection:disabled::-ms-value{color:#000}.GPmousePositionAltitudeUnits,.GPmousePositionUnits{margin-left:5px}.GPmousePositionPanelEditTools{position:absolute;right:5px;top:20px}.GPmousePositionEditTool{cursor:pointer;display:inline-block;height:18px;width:18px}[id^=GPreverseGeocodingPanel-]{width:280px}.GPshowReverseGeocodingPicto{background-position:1px;background-repeat:no-repeat}.GPreverseGeocodingPanelClose,.GPshowReverseGeocodingPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH0SURBVFiF7dY/bE1xFAfwvlZMhFSim0i6mdnNnUWiOqGShqlsSPyJ0VQV+jqUDsQgNrFIECxi0MmmibRTWRph0I/hncfPde9z7/Uakdzv9ju/c77nfN/33vPuwECDBg0a9AsYwUW8wTo+4QUO/evZfgGOYQlfsYpbGM7Je6sY4xX6TUaPwR45LczgdBUhLdyNgdbxEstxXsFoJv8sNvAYV3ENnyP/dQUx36KmnScq5roeORulReF4FD3B7oRsOuLP0Eryd2BfhmOm+4OU7DmbcfZGpkcrYilmywpaCmdGcu7uB9n+P3A8jLzlkj27j1KKNgYzznQxl+diEfkXvCq4mwzCoz3qzyeNr5Rq2ltU1r3yYoJ4Fe9Ty5O7y0E6VlB7IWn8CFtLNy4WVV9MkN6M4ulMfK/OSl7D9py6gzovKzyoKqaEqNxlUYZwWGeb0XlnTuJSiIHxAve6z/m7umISQdl3BuZrCQrSUTzPEK7hCM7gHrZkaubxEe1NEPN3LiXkBzCBMWyL2GKQL2Ko7vAlxczlxOqLKmg8hNtB/sMp7MJh7OmjmO7azl3p/RbVdWohYk/jvFLVOZv5x1pR1AIm4vwhabazItcJPz99cldzxqkNnOqXlqKhzul8YdypWT8VTv22QZOcVuRM1Z+0QYMGDf53fAdKmTphX0Bz5wAAAABJRU5ErkJggg==)}.GPreverseGeocodingReturnPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4AUXDwQyeFmCzQAAATJJREFUSMftliFLBFEURs/dVUQURJvYLCaLGESz1T9gUJsoWARBEBRM/obFIFgMKxtsNhG2aTUIBqOCySLsHssuTNiVGZ47aU8aZr5537vz3TfvwZAhg0K9UL/U5bLMuuyljFXJYXYOHGVuxcAM1VPg5D+/1sgfZsfAWY9HG+ok0AY+gFfgJSI+UzI7tBht9UHdUqtFzQ5M41GdKZLhQmJMa0A9d6VqqDXT2e41fvQxrQCXQK+X7oGnzvUoMA3MAyvAWEbXjIjVIllW1eseM9/vo59SrzK6ljpXtIGq6k0ew0wcdxntTqGFHxEtYBO4zTPBiBDYBX6SGlAdVRud9baeQ99tunrKz6CizubULnYMn8vczprqW+HdIoEaMF5mhRPqe2kVRsQ30Cj7WLI0PJwNnF82zKAINyZs+wAAAABJRU5ErkJggg==);background-position:0;background-repeat:no-repeat}.GPlocationHighlight{background-color:rgba(255,200,0,.25);color:#222}[id^=GProutePanel-]{width:320px}.GPshowRoutePicto{background-position:1px;background-repeat:no-repeat}.GProutePanelClose,.GPshowRoutePicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE3SURBVFiF7ZZBTkJBDEDnE125MhyHHV5FF0RvI58EOIYuTIw79S5wB3lu+vU7tp8Z6IiLectJp+1L/xRCqFQqfwawATan7sMNhFP3McQoPgAugEcilDiLJXCe0wRwI/d+9dOLaYB74C4n8Rh417rsS+wRAngGLjNkPuTeWpMSmbnE7JKlgCerw0whgIfEmm10bwE0kcwiimlThcbAm4NQzoS6T6nPGhjxczIdKwY+Ta2A+YYShQ55Q5ZUPL08mYTCX0LeGFLlZKSoNaFXYOqQ35JSl4WGl/EkhPDilKtJPDuePRO6OjK3tgAOmlJO0SJvyJBZKWe+UiWEBmS6ta2udK/iJYTK/bAmFC8hdM33Xx91NUeT2gG3XsXdhSTvTCZlbjORaoGZZ+EiQp6cZcZvi3RRqVT+DZ/jc6+cH/zb+QAAAABJRU5ErkJggg==)}form[id^=GProuteForm]{padding:15px}.GProuteStageFlexInput{max-height:28px;opacity:1}.GProuteStageFlexInputHidden{max-height:0;opacity:0;overflow:hidden}.GProutePointLabelP{margin:2px 0 5px}.GProuteComputationLabel{margin-bottom:5px}.GProuteOriginPointerImg,.GProuteStageRemove,.GProuteTransportImg,div[id^=GProuteStageAdd]{background-image:url(data:image/png;base64,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);font-size:0}.GProuteFormMini{max-height:58px}.GProuteExclusionsOption{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAA4CAYAAADuMJi0AAAE60lEQVRYw+2YWWxUZRTHz/fd7y4zzAzTbaAdpgtQWsBiYVxYGpcEMCwRQkx48KHGhKg0WhESNYglwSUgWCKGTaMRBF4MwShpECUshlJqay2U0LCUwrRAp+0Ms997v8UnEl8Gp9Ppg2Z+bzfnn+/knHvud865AFmy/GfZVVZW/vvb9eduNn7Wc+ixGQ3/pm+UcO735VP3/rpsyc39TudHyXQ4maF61cqfZi97ocbjmVi6YGHNxoOeor3JtDskae606uqzFfPmvRqLxFg4EetIpiXJDJqqOHBwEEjIDyXjiVw4t/S1XD34TKs/MX+z4EEAgK0SwhPtjh+qq6tXBjGOtTY11a31D371qEygRxn3F3vWPVE1deN0G82T+m5BbCAIF+8lBttifLoFQeV0Wf7R7XbndsXird19/TUfAhgZeZ8H7eoXHYVWwzdBFTedsmhScfg0wfQPTRF7FfLdmBRRo4Q9RzTS8aeKRaeERAsC8TmRto30HJKqMCrhIcMUMuMcmADQJAQ5GJ4fqUMpFdE2mXgqOe+ewXhJFCHoJNJxu4omz7bhScVMyj/BeFPGUrlZIROOYRT4C0C0S0h8qUhHAAC2yGTFpUka7Skfx9/DZFZGnH2gEHxYwnc6EIguBYnDqtTzT3uDTFb3VdrEcZfWk5GUrgZxaI4QCyyaBAME04sUzTvL+dBD+xnOu8qiwrIgV1leEuf9JxhvTzu6Bgm5ThXkmNcciriaS8R2lXySTHvUqXb/lqsNp3Ju0qstx2Z7sfTZGuKsLAFkV4RK0J5k2s4wXYqYsO6WyYq0HUYN06c9XgX5SxcBuIt4gvJ40sJi7MaVONtVhGHmqIrmyLPzm29tqqf7ilwHUtHvVAjO9tksWbJkyQzehd7xo5ppUqW2tlbzLp380rhxitdB8q/4fD6acnsaKfX19c7Ji+QNJU/at7mmWaaZpklHNSY+irq6urzSxbBBy1PqEoJZfFdYoK2tjY2Jw4aGBpurJvKOmme8xWTTmgjq1DApAwAxoo6fIkieEnoF2+NvUDVqCekRiNIY4ip1eb1ekvEI39/65nOyO7hWtyWc0biOogkDooYOBhhujLEDAIZG4xADAH/4sH796y42ZWBNxBGrCEZMlNBNER1k8fBtdixwwzzY2toaTCtCr9drLXzKthgSiv7ztycfjvQo4O5fpWqR5eGojg2DCX1IBHUf3n2nSey5cOpCXzrfIXp6WZXXMtdYh8pi74JTL3WTijO913tDq2qXVxplA5vijgdTIvE4RO6zYOwO3t5/GhpbTrYMjnh78nq9VlwRfRmVRdewArM6rgJBTLbxErYEAL4J5vetwFJ4jghQxMNSSAyoO42Ttl0Xz58PpzXqS5JE7G5tqrAbM6lMiyljkimoQg1m8VhK7xrFwTpdixcbAaGz2/I+ekba0dzc/iDt3SIUCtH+Lv+lArWwjWPOOeMVJjI1imgRsyXKDas+mxoc83vKUfOC/dO2lst3M7LM3L816LdLBedlTIKU05lUNfJM2ZzEBZORXzuHrtk+vnSu63JGF9LhvmH9/uVAu8s9MUQFnWUSIweHFJ90z7qlq+n6L2OyAQMA918NdLrcrqgwoQrHyAHWqX49PDzMxsohAIAUuZ0YsHJHSO+G5t7eXj+k8ZsEjfCmsQGABgAmAMQBIJEdN7L8//gb3FshBGMt81oAAAAASUVORK5CYII=)}.GProuteModeLabel{display:block;margin-bottom:5px;text-align:center}.GProuteTransportImg{content-visibility:hidden;cursor:pointer;display:inline-block;height:28px;width:28px}.GProuteTransportImg:first-of-type{margin-left:18px;margin-right:10px}input[id^=GProuteTransportCar]+.GProuteTransportImg{background-position:-112px 0}input[id^=GProuteTransportCar]:checked+.GProuteTransportImg{background-position:-140px 0}input[id^=GProuteTransportPedestrian]+.GProuteTransportImg{background-position:-168px 0}input[id^=GProuteTransportPedestrian]:checked+.GProuteTransportImg{background-position:-196px 0}div[id^=GProuteTransportChoice] input{display:none}div[id^=GProuteTransportChoice] .gpf-radio-btn-group{justify-content:center}select[id^=GProuteComputationSelect]{width:100px}.GProuteResultsDetailsInstructionHighlight{background-color:rgba(255,200,0,.25);color:#222}.GProuteResultStage{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex}.GProuteResultStageLabel,.GProuteResultStageValue,.GProuteResultsValueLabel{display:inline-block;line-height:18px}.GProuteResultStageLabel,.GProuteResultsValueLabel{color:#666}.GProuteResultStageLabel{width:60px}.GProuteResultsValueLabel{width:65px}.GProuteResultStageValue{-webkit-flex:1;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.GPshowRouteExclusionsPicto{right:0;top:unset;transform:translateY(-100%);transition:all .3s ease-out 0s}.GProuteExclusionsLabel{display:block;font-weight:700;line-height:16px;margin-bottom:8px;margin-top:8px;text-align:center}.GProuteExclusionsOptions{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.GProuteExclusionsOption{background-color:#fee;border:1px solid #a77;border-radius:3px;color:#a77;cursor:pointer;display:block;height:28px;line-height:26px;padding-left:28px;padding-right:5px}input:checked+.GProuteExclusionsOption{background-color:#efe;background-position:0 -28px;border:1px solid #797;color:#797}button[id^=GProuteReset]{background-image:url(data:image/png;base64,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);background-position:-224px;opacity:.8;transition:opacity .2s ease-out}div[id^=GProuteResultsValueDist],div[id^=GProuteResultsValueTime],input[id^=GProuteResultsShowDetails]+label+label:hover,input[id^=GProuteResultsShowDetails]+label:hover{color:#366291}div[id^=GProuteResultsStages]{margin-bottom:15px}div[id^=GProuteResultsValueDist],div[id^=GProuteResultsValueTime]{display:inline-block;font-weight:700;line-height:18px;width:80px}select[id^=GProuteResultsComputationSelect]{width:100px}div[id^=GProuteResultsNew]{background-color:#366291;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPwAAAAcCAYAAABF79LlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAyySURBVHic7Zx/bFXXfcA/33ufHZjtkKcNhkVVtqpVtGUszUhs3BEFJWo0KYRUCKMqUynY5t2HAZuxdRkqLM5Gl3bVTJ4JPN/nXyyVkDBpGCvTUKOkodmKYtpRJWukTKgr0jY7yeS3wGuKzLv3uz/uffbz8/v9nkFE7yMhP5977vkcR/7e7z3nexyoUaNGjRo1atSoUaPGHYzc7gnUqLEYRKPRVYZhHFfVRtd1u7u7u99bTF/btv5VyUDguOA2utD949F9i+orl8DtnkCNGouBYRg28ISIYJrmK8B9i+lzAqYt6BMgGLDovnIxyrnJtm21bVurPZlctHREtKUjcst8NT4RPJL2+XfvdJ+qfktV46r6YCXj1DJ8BukPskAgsKqzs/N/bud8apSHqraKyDmgEdi82D5RaVXRc0CjVNmnqt8C/tz/tgX4cbljFR3w0Wh0hWEYPcATqTbbti+LyLlAIDDQ0dHxYbmTyMYXvhJdkayf8Xx+CLZ0Ri6Lq+dmMAYuj/VU1XeriMViO1X1wcnJyV19fX1utj6qKrFYbAB4z7KsF2/xFO9obNteA7wkIleAzaFQ6KeL6WvbfnSNY7ovqeoVdd3Nl078SVV9qvrXzAU7VLjvVtTNtm23AyNAU44u11S1MxwOv1zJZFK0dL7Qjkpen6h0vjXWUxVfOouZ4f1gH8RbSg1PTk5amUHvB/tRYDegQE+1gr6/v39pQ0PD28Bn83Q7GQwGt23dutWp1NfW3r/UaQq8DZrbp5xcnWjedvp0+b7BwcE2EflL4I8WDK/6eDgcfrXcsbPR0nGkDYysPjH08beG91XFp6rPAn0ZzXtE5Fi5YxZcw/vBfgpoUtUzqjq7VhGRDSJyFrhbRMYHBwe3lDuRFH6wn8IL9jMqcz5V2YBwFrhbRcdbdwxU7LuVuK77eeb+m3c1Nze/qKqzD10/2I/hBTuAqOrvVMM9Pj5e39DQ8Ar5gx3g6Xg8vuAXuVTua++rd5rMV/IGO4Dw9NW7pyryiciPyBJ8AIZhfK2SsbNj5PS5jlTFp6oHWBjsAJtU9RlV/ZqqblfV9ar6G8WOmzfgo9HoCrzMLsAz4XB4czgc/mHqeigUuhAKhb4EHABEREZGR0eXFyvP5Atfia7wM7ugPDMx2rv50si+Wd+lsZ4LEyO9X1Lfp6IjD+wYKNt3q7Esaw+Qnq13xWKxWF9fn5GW2XelLqrq0NTU1N5quOPx+Bg5fkkzUdXOSn0NjcGifVTBB3wD+KeFQ+sXo9FoSxXGn49k94nwxQc7ByryqeqfAn+T4/LjwDeBvwXGgDeBD1T1h6r6VVU18087D7ZtHwa+rqpnwuFw3o0I27bPAptE5HAoFDqUr28uWjojh1G+DpyZGO3N63uoY+CsoJtE9fBbY/tK9h07dqxxyZIlC37+ZDJ5LfVZRO41TXMys09nZ+f1Un0p0tbne1JthmEMO44zIyLdaf2GpqamwrnW+aVg2/Zx0h4kRTBTV1f3qXL3ZVo6I8fR0nw3VT5V7r6MbdtJy7ICeSpH71iW9fvljJ2Nlo5IcmK0N5CrcqTwzqXR3rJ8qtoDRCqY3r/ixeF0touFXumf9L++UMgiIv0AqrqxpOmlo55PRQv6UDyfIWX5AoHAZDKZvJb5b55C9b1sfUZGRnLtLRRERDQUCvWQluld1+1axGBXSgt2gPqbN2++WY6vpSOiJQY7QH2daFk+n0SO9iv+1zW2bS+rYPwifXIFQGDN2lDZvnvLvC/FHwLfzZXps2b4XE9Ky7Ik/Xrm97n6FyLXk3JitFfSr2d+n6t/Mdi2fR2vZFMygUDg7kqyPHiZfmhoaEBV96S3u647/P777y/YzCuEbdvrVfU5EXm0knnlICEi5xOJxLb9+/f/CqC1I7Je0edgcXzAefO6s+3iac+XD9u2fw48APxfervruq11dXXTjuOMAesBgsFgoNINyZaOyM+dwJIHzOSN+T6R1jqS046as77V15sDpWxI+ns6MaCrkjkCO0TkRGZjrQ5/G0nfsEshIiWXXQYHB9uA74vI0qpMbCGNqrqloaFhGrBaOo60KXwfFs8HbEk2mdOAla/j+Ph4fTwez/b66riu+25XV1cCeNi2bRvYUmmw39feVw9k9TXeZb77xvGeBPDwQx0RW2BLqdUHEVFVtfBic3uWLq8C/+Z/rgOCwGeAdcBdaf1CwIkF4+eT27b9U+B+VX0kfbMuG9FodINhGD8ALluW9Qf5+uaipSPi+UQfSd+sy8a6riMbXNfzTYz2luy7XWt4WFB6y0bWkl0ubNt+g/knvRaLDy3LWtHSEbllvonR3hXFdPRf2dMz7ofBYLC5GuXFbKwN2csyMvyHq683N1dSXkzHfyX/e+CPMy5lLcup6jJgANjmN7nAp0Xkv9P75c3wIvI9Vb3fMIz9QN4A9PsAnMvXL69P9Xsqcr8gBX2uY+xHQMr07d69O+s6zEsEHqZpJioN7kyyBbuqDgEzIpJq62pubqavr6/YoF+TrVFEXr3nnns2xuPxparaJiLPA58vMNbGYDB4fuvWrY5t2+vxdoGL8qny6seJ+MYlwealhnOjTeB5tIBPZOPqayvPnz691fGWCVl9BTFN03ScebG2fHp6+u+AfeWMV4h655emw7xl8vJfNE5WzScijqp+FS+Lby2i/0equh34dbzDcQbejv5Yer+8m3aO4xzFO1TzlG3bf5FqzzxLH4vFDuBt8H1UV1d3tOifKgMzeddR4BrKUw91RGZ9mWfpW3dEDiCeb0albN+tJlewT01NhS3L2sv8kl1Xc3Oz3dfXV8zfO/xLlrZTiUTiqXg8fhV4W0TWJpPJhwuMc0FV743H45dt2/4ZXha/kHY9AaDIAp+InAoknKcamoJXzZs33haXtb92V6CgD9V7f9E0ebmlI/Iz1ey+YnBd95+zzKn32LFjZe3TFPSpmcVH74bu6vlExMHL8K8U2V+BMDDjNy3YAMyb4Xft2vXB4OBgp4iMA8/HYrF1wBFVL/b81/j9qvok4IrIjkqO2P7oO7s+aN0x0Kmi4wLPt3RG1qkrR/DP1q7rOrLBdYz96gW7C+y4k47Y2rb9YvpuPBC1LGu3iGhfXx+q2hOLxUzmdtW7Vq5cOUPuV/8UB/HOWK9MNZimebCxsfGoqqbaDgcCgZmsd6eNIyLpGfawYRiPua77GoB/XJWAKwcdQ+f5DJIHnSbzKLDSXyge/viGk9cncFDhTZlrOIwajyGeT3V2lz0vQ0NDa13XTdW+zwOPAvUAgUCgF69GXzVauyJr1SWr7+NfJavqE5Gkqn4ZOA1sAv6jQP//UtWX8Db9Ppd5vWD2CIfDL4tIO36mV9U3Zm/21uxPAh+pansoFDpT0k+ThbfGel4WtB0/04vM+VzX+EEqs6sh7ROjvRX7biUichnvQYWqDk1OTu7xn8qp6xoKhXYzl+lVRN4tNK5lWe+Ypvkw8B2/abqrq+uKqj6d0TWUb5xgMHgxs23ZsmUXgClVfd0wjG6Aiyf2vmOKM893cWT/FaAk36evNy/wrU785gVgCvT1gOF0Z7ltAY7jzFY6XNd9FtiRdrm3v7+/upuL7lxlxRV5FknzCb1t7dX1ichNvD/IWSUixRzbHfC/fmbBWMVKR0dHlyeTyR5VfQKvBAJwGW8NPWBZ1v8WO1YxPLBjYHk9bo+KzPMJnEsGbg78JPZnVfWlWOy/lrNte5eq/p5lWfOCPR1VFf9t4N8ty4qW64rFYsMZp+YOWJb1zQLzmzenYkurAC0dkWFg1qdw4NJob15fZom1lNJqitScDcN4bOfOna+n2gcHB1/zy5QnLcvK3Pwqm9k5q/HYxNje1+faX3gN5FGUkxNjvVXzlYOqXgRWishvp7cXXZbzX9UPAYfS6vBl7cYXg/+qfgg4lFaHXzRfilJ+wcscPwoQDodz9vEfBIVe4wuSSCT2NjQ0bMJb050IBoPfLuK2g3jlIBM4WYrPvO7sdZpMzyec+K1rzd++VOgm5SAi20FNpDQfwPj4uBmPxwFID3bw9hXwXrerVlFobx83r+IVbtKDHUCQUwqPIrekglGIIbIcz63V4T/B+IdkiiprpbAs6xuUuQb1D8nM+iaKuGdirLdsH0A8Hj/rf7yQ5fIpwAZWlTt+JlebJnP6koElp8zkjar6KuAU8FxmY1n/xxvLsmSxM2E6E6O9Us6rXo1PNsPDw5/F/wMdwzD+KvO6ZVkfVdPX1tk/60MX+n4Sq66vEkTkl8A/ZLbXMnyNO5ZkMrlcRKYNw2jduXPnf+boNiMi/1gNn6OyHJjGMFonhvfm9AFV8VWBscJdatSoUaNGjRo1atSocQfx/wldqBUwtlSMAAAAAElFTkSuQmCC);background-position:-224px 0;border-radius:3px;cursor:pointer;height:28px;opacity:.8;position:static;transition:opacity .2s ease-out;width:28px}.GPfakeBorder{border-bottom:1px solid #999;display:inline-block;height:14px;width:60px}.GPfakeBorderLeft{margin-left:15px}input[id^=GProuteResultsShowDetails]+label,input[id^=GProuteResultsShowDetails]+label+label{cursor:pointer;font-weight:700;line-height:28px;text-align:center;transition:color .2s ease-out;vertical-align:top;width:130px}input[id^=GProuteResultsShowDetails]+label,input[id^=GProuteResultsShowDetails]:checked+label+label{display:inline-block}input[id^=GProuteResultsShowDetails]+label+label,input[id^=GProuteResultsShowDetails]:checked+label{display:none}div:has(input[id^=GProuteResultsShowDetails])+div[id^=GProuteResultsDetails]{max-height:0;opacity:0}div:has(input[id^=GProuteResultsShowDetails]:checked)+div[id^=GProuteResultsDetails]{max-height:200px;opacity:1}div[id^=GProuteResultsDetails]{overflow-y:auto;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s}.GProuteResultsDetailsInstruction,.GProuteResultsDetailsNumber{color:#666;display:inline-block;line-height:16px;margin-top:4px}.GProuteResultsDetailsNumber{font-weight:700;text-align:right;vertical-align:top;width:22px}.GProuteResultsDetailsInstruction{padding-left:5px;width:calc(100% - 30px)}input[id^=GProuteSubmit-]{padding:0 10px;width:fit-content}[id^=GPsearchEngine-]{align-items:center;flex-direction:row}.position-container-bottom-left [id^=GPsearchEngine-],.position-container-bottom-right [id^=GPsearchEngine-],.position-container-top-left [id^=GPsearchEngine-],.position-container-top-right [id^=GPsearchEngine-]{align-items:flex-start;flex-direction:column;height:32px}.position-container-bottom-left [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-bottom-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-left [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList]{position:relative;top:unset;width:340px}.GPshowSearchEnginePicto{background-position:0}.GPsearchRadioContainer,.GPshowSearchEnginePicto{background-image:url(data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWa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);background-repeat:no-repeat}.GPsearchRadioContainer{background-color:rgba(0,60,136,.5);background-position:-26px;border:2px solid hsla(0,0%,100%,.4);border-radius:4px;box-sizing:border-box;color:transparent;cursor:pointer;height:32px;overflow:hidden;padding:2px;position:relative;transition:border-radius .5s ease-out 0s;width:32px}.GPbuttonsContainer{padding-left:5px;padding-right:5px}.GPsearchRadioContainer:hover{background-color:rgba(0,60,136,.7)}.GPshowAdvancedSearch,.GPshowAdvancedSearch:hover{background-color:#fff0}.GPshowGeolocate{background-position:-102px;margin-right:5px}.GPshowGeolocate,.GPshowSearchByCoordinate{background-image:url(data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWa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);background-repeat:no-repeat;transition:border-radius .5s ease-out 0s}.GPshowSearchByCoordinate{background-position:-76px}.GPsearchInputReset{background-image:url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=);background-position:0}.gpf-select{background-color:#fff}button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]{border:none;max-width:0}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]{border-top-right-radius:0}button[id^=GPsearchInputReset]{border-bottom-right-radius:5px;border-top-right-radius:5px;height:32px;width:32px}button[id^=GPadvancedSearchClose],button[id^=GPcoordinateSearchClose],button[id^=GPgeocodeResultsClose]{height:32px;right:0;top:0;width:30px}button[id^=GPcoordinateSearchClose],button[id^=GPgeocodeResultsClose]{background-position:0 0}button[id^=GPadvancedSearchClose]{background-repeat:no-repeat}button[id^=GPcoordinateSearchClose],button[id^=GPgeocodeResultsClose]{background-image:url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=)}button[id^=GPadvancedSearchClose]{background-image:url(data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWa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);background-position:-50px 3px}form[id^=GPsearchInput-]{width:280px}form[id^=GPsearchInput-] input{border:1px solid #999;border-bottom-right-radius:5px;border-top-right-radius:5px;color:#333;display:block;font-size:1em;padding:0 30px 0 5px;width:100%}form[id^=GPsearchInput-] input:disabled{background-color:#ddd;color:#999}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]{max-width:280px}.GPsearchInputText{height:32px}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{margin-left:33px;position:absolute;top:35px;width:310px}[id^=GPautocompleteResults-]{box-shadow:0 0 6px #000}dialog[id^=GPgeocodeResultsList],div[id^=GPautoCompleteList]{background-color:var(--background-default-grey);max-height:140px;position:absolute;width:280px}div[id^=GPautoCompleteList]{top:35px}dialog[id^=GPgeocodeResultsList]{border-radius:4px;overflow:hidden;position:absolute;top:35px}div[id^=GPgeocodeResults-]{background-color:#fff;max-height:140px;overflow-y:auto;position:relative;width:100%}.GPadvancedSearchCodeLabel,.GPadvancedSearchFilterLabel,.GPcoordinateSearchLabel{max-width:105px}.GPadvancedSearchCode,.GPadvancedSearchCodeLabel,.GPcoordinateSearchSystemsLabel,.GPcoordinateSearchSystemsSelect,div[id^=GPadvancedSearchFilters]{margin-top:15px}.GPadvancedSearchFilterInput,.GPadvancedSearchFilterLabel,.GPcoordinateSearchInput,.GPcoordinateSearchLabel,.GPcoordinateSearchSystemsLabel,.GPcoordinateSearchSystemsSelect,.GPcoordinateSearchUnitsLabel,.GPcoordinateSearchUnitsSelect{margin-bottom:5px}.GPshowToolBoxPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAlqAAAJagFGUcfpAAAAB3RJTUUH4AsKDCgkqrnTSAAAAw1JREFUSMe9ll2IlVUUhp9vnEintH+FulAyI+uihClKjSZtQJAJrRnDoKt+oCIIjSIrDCokKXQiCqkuTMFAJtQLCwItMsQbURmjiRIK+pmSoSjJ/JmnC98je6ZzjmVMCzbnO/vstd691nrf9R0YA1NRn2SsTX1E/UM9vVc1OdwC3A7cBLQD1wE/Al8AA0BfVVXf1vFbAmwCjgPjq+oUREsDkBuA3UBfwL4EXgS2AgJLgIPqw2pV+HUCG4B9/yTtF9Rj6pvqBeo4db7apU5N/VGXqofVHeo09Ub1N3Wdeo/6Z1m60SAL1KPqrQnWqR5Qt6pvqYfU1WqbWqnvqt+p89Sf1T61pSmQOkH9Wl2ZLDaru9T2gLapH6mvB6RXHVRvU79Rd6rnqteoH6vHGwEtV7/K4ZXq+qJME9VP1JfzfZU6lMwPqnvVSfltkvpMyl8X6L3ccmIyayuAdqjP5flZ9deA7M7lpqjjC5+eZkAH1AfT5LVxaFUfV39JoGXq72qHul39Qb0ypX5fvaIRUEnv6dHIZGAwe28Ac4DngQeAl4DFeZ4NLAAOAb3ZP1nEG6HREmgAmAEcBmYCTwFTgaXAEPAK0AMsBO4G7gT2A08Aj9YKM+qzbul61Q0hQ7+6L43tCVW71RXqCXVRUaJhdaOnbHIY2d2Mdd3q96F5e0TYFV3dl/4Nq/cHZE7m2avqLQXQeTlzohFQm/q5+k4C3ZFAD6mL4/h0frs6U2FzMpgdoEujq371ZCMg1GvDqjXqkTCuI1mtyZnLQv9dYWItO9VLwsC7GgIVYPfGaYU6K5rZmJtPUPeoAwla85lbALWcEagA61Svyoj5QD0nAbaoP0U71AJFvKoX50J/A2odDVRVFWo/8Fk00p13y2tAJzAv+6cvVmjGYo3QUWudjC4EPgSORjNHgGXAY3kfzcoqbcaZ9NM6eoID24CLMhGGgA5geabFzVn1bBAYBs4HLm/Wm3HqttB2ZtHof7va1U/Ts7oZvQ10AWuB67PO1vYAc+tls9qxsZETtinf/6PV/gX9b/YXjLd1o+WqCcMAAAAASUVORK5CYII=);background-repeat:no-repeat}.GPzoomIn{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHlsZT0ic3Ryb2tlOiMwYjZiYTc7c3Ryb2tlLW9wYWNpdHk6MSIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTcgMTJoMTBNMTIgN3YxMCIgc3R5bGU9InN0cm9rZTojMGI2YmE3O3N0cm9rZS1vcGFjaXR5OjEiLz48L3N2Zz4=);border-bottom:unset;border-bottom-left-radius:0;border-bottom-right-radius:0}.GPzoomIn,.GPzoomOut{background-position:50%;background-repeat:no-repeat;background-size:auto auto;height:32px;width:32px}.GPzoomOut{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHlsZT0iZmlsbDojZmZmO3N0cm9rZTojMGI2YmE3O3N0cm9rZS1vcGFjaXR5OjE7ZmlsbC1vcGFjaXR5OjEiLz48cGF0aCBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwIiBzdHlsZT0iZmlsbDojMGI2YmE3O3N0cm9rZTojMGI2YmE3O3N0cm9rZS1vcGFjaXR5OjE7b3BhY2l0eToxO2ZpbGwtb3BhY2l0eToxIi8+PC9zdmc+);border-top:unset;border-top-left-radius:0;border-top-right-radius:0}.GPzoomIn:hover,.GPzoomOut:hover{cursor:pointer}.ol-custom-full-screen button{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAA8CAYAAABxVAqfAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAxRJREFUWIXtmD9PVEEUxX/XXRaDWlvb8gUsBEMICpKowYbY2Vr4J5JQWWxtZyxsaFEE5Z8xWIDRIAklUT+Bn4FFwSXH4s2D9TEzb9ZEE3FP9+bde8/M27Nz7gx0cNxhxQFJfcCFQPwO8NTMmoWcKnAb6AnkbZjZx+hMJNXlx56kgUjegIvxoV6MPxGdxSEawIiZvQ8FuHeDwHZKwRTifeCGmb0rC3Sf8yrQLIstI94HKsA9Sd1lxSR1AXeBqsv9LeIGMAIsAqPAfIzckb4AxoAV4IqrkQYnrgMhSapJWnIimYnkPXcxS5JqbiwXXD2FeFLSYGGsJmlO0lYkb0vSy5y0ZbxP0kQKca00qE38iZod/IP4W+LybSD3PX+nLkkzkjYjxTddTFdhvB+4k0LcA7xt2UC6gFlgHPgaInbvxoHZnNzVWAPORPIOZpjbYkPSkKQF9/ymbMssxF5yNby2GCOWpGYKaYC82VLnCHGZO1XIXOaxme2WEZvZD+AJh64WRIofV4CFouB8cEJaLiNNJYaC4AKkA2RCOpVS0NfsDQFDgfgd4JGZfS/knAQmCTd7q2a2mjKhDjro4BjDZxYpBlKEd8uU9FnSYrGgpIt4TJ3siDNUiO12zf2XZGLgE3AdeJWTu8JrwGlPfA+wkpO7nHngGhA8BByBpIqkaeelK5JGY6ZeaB5GJC2757liK9QuedTUA81DlDRoi2a2D0yRnXVL/bUFefMw5RqD9oidkF6TnXXbRYXsWBuy16CqcyElmXoAvwiuiCOrcb9LL/AwUHDDM7YKfAvE90r6EPvsHRxP+LrMGlnH6NsawdMxlnSm22Sd6V7pbCT1S9qVH3VPfOgacldZk38E3v+xma3TxvVgAA1g2NVKI3bkG2TXg9EbugD2gbHY3Wdsy6wBD8i2v9K7yRbke/uEshNGOrEjnSNb8SvgMmnXgw0ykT0DhskOe0FyH/F8i7VV3VguuLonvt4qJElVlytJ8z6OkPOcBaaBW/ltvJmtKzuqng+s9EBIZtaUdBPYBc4lrzgGn7m33WV08F/gJ/JO7y3zOGA+AAAAAElFTkSuQmCC);background-repeat:no-repeat}.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=false]{background-position:0 0}.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=true]{background-position:0 -30px}.GPshowOverviewMap{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyA1LjcgOS4zIDNsNS40IDIuNyA1LjY3My0yLjQzMWEuNDUuNDUgMCAwIDEgLjYyNy40MTNWMTguM0wxNC43IDIxbC01LjQtMi43LTUuNjczIDIuNDMxQS40NS40NSAwIDAgMSAzIDIwLjMxN3ptMTIuNiAxMi45NTYgMy42LTEuNTQzVjUuNzNsLTMuNiAxLjU0M3ptLTEuOC0uMTE4VjcuMjYybC0zLjYtMS44djExLjI3NnptLTUuNC0xLjgxVjUuMzQzTDQuOCA2Ljg4N1YxOC4yN3oiLz48L3N2Zz4=);background-position:2px;background-repeat:no-repeat;background-size:auto auto}div[id^=GPlegends-]{display:none}div[id^=GPcatalog-]{display:block}.GPshowCatalogPicto{background-image:url(data:image/png;base64,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bS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDpjMmUxMjdjOC0xOTM1LTQ0OGEtYjYxYy0xY2RkNjI3NWZkYzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTFkYjFmNjktN2M0MC00MDgxLWJkZWEtN2YxMzFjODQ3OTg4IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NzdiZmRhYWMtNmEyNi00MTY5LWEzMWItYmZlN2Q5NThlOGU3IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzI5MTg5ODYxNDQxMDI1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZGI2YWQ2MTUtZWQwYS00MTEyLTljYjQtYTIyZDkwMDkwMGNkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0xMC0xN1QyMDozMTowMSswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5TF0SEAAAABmJLR0QA8gDyAPIuRIzMAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH6AoREh8BMSlSAgAAAXpJREFUWMPtl0FugzAQRf+Peo9ygC57AI7Col1EzR1ortBAKiWLpCdJcoduugoXaX43RnIpYEPdQCW+xMYaBj9G8z0GJk26qvjbBJJiABGAWwAnAAXJYlRAkhKzQVsnkkcrJgKwAxDXpHgG8DYkWBXorJ9KbBi5tRti7zcN68eaNftv+2w2kVSQXHr8wEcA9wDmJC8NMQTwAuCDZBayej7VKXXwgZH0aeK3kmZ1MJIyE3ORtAgJFKubIke+vBK/NtWwYdaVmDwkUNIRKHbko6RV5Z2tpFmlMqU2dVW8WoU8czZB5cFgTK98exwu2KuHHFDBYFy2nXoCJR2/2wS19YXpRWyseO8RmrpMwfOwJ64h00+HSkV3xjjKtbMPVIMB9KpSsPOppgfPPr3U4mbZoFANxtIXZtZm6aMd9wc/WP8A6MEafTYto8/KGn2eul4fUnPHCaGl6xohaQ7gDsCCpFqG0wzAO8nXEOdQX8VjuD7sA36jwKRJk/6NvgB/JgixGmzy6AAAAABJRU5ErkJggg==);background-position:0;background-repeat:no-repeat}dialog[id^=GPcatalogPanel-]{width:280px}.GPcatalogPanelClose{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAU83pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjarZpnciRLcoT/5yl4hNTiOCnNeAMen59nFeQMzXbfEpjpBrqrU4WHh3sUzP6f/z7mv/hKyVcTU6m55Wz5ii023/mh2uer30dn4328XyG+77mfrxvX3zc8LwVd+fxa83v9x+vuc4DnqfNT+jZQne8b4+cb7Z3Z118DvRMFrcjzw3oHau9AwT9vuHeA/q40t1q+b2Hs5/n9/HMM/Dd6OB9nUp6n37/HwumtxDzB+x1csDyG8C4g6H80oeuN+1j883LnIsejlv+sRAf5l3P6/Gqs6Gip8a8X/YjK50+/ovWxePM7WtG/l4Rfh5w/n//6unHp71G5R/9t5ljfn/yv1/sTHmN/nf49/LPquXtmFz1mjjq/m/rY4v2J6wZDaepqWFomOhkMVZ713fiuoHoy17LTDr6na84TleOiW6674/Z9nm6yxOi38cTKez99uC9WYtf8VMRC1Lc7voQWVqhEdN6wx+A/1+LutM1Oc2erzLwcl3rHYI6P/Nvf5t/9wDlKBed0lvU5K9blvQ6bZShyeuQyYuDOe6jpHvDH9+8vxTUQwaRTVoo0DnY8Q4zkvpgg3EAHLkw8PznoynoH4IiYOrEYF4gAUXMhuexs8b44x0FWAtRZOgnkBxFw8NZikT6GkIlN9ZqajxR3L/XJ87LhdciMSKSQQyE2LXSCFWMCPyVWMNRTSDGllFNJNbXUc8gxp5xzySLFXkKJpqSSSym1tNJrqLGmmmuptbbam28B0kwtt9Jqa6135uyM3Pl054Lehx9hxJHMyKOMOtroE/jMONPMs8w62+zLr7Dgj5VXWXW11bfbQGnHnXbeZdfddj9A7QRz4kknn3Lqaad/Ru0N6x/f/0bU3Bs1fyOlC8tn1Hi1lI8hnOgkKWYEzJvoiHhRCAC0V8xsdTF6RU4xs82TFcmzyKSYLaeIEcG4nU/HfcTO+Ceiitx/FDdT4o+4+X8aOaPQ/ZuR+zNuf4vaUhmaN2JPFupQbSD7eH/X7mtXsfvj2Xy+0KOw3zczehZYao+tl5amj8XN3FNrqz5VcFPZS53pFqpU4KxDpdVLgblSXCUc5X1aoZwDsZUD/bUNL57uOO8JRlyJS1fNSInkAzHlHaFlMw5J2deYoxDJ7frK2VUPex7PxKnG3jlSC3H72MXjoc2V3VJRTvx7n0369cI/eU57O9Nd2ZN0WaOQSAvs5XNYRpntjJI6ZxB2KieXvVcby4a85mk1hDoh8MooTuEy2m91HFJsG6U0zp5AmIzpvuVqwyy6YrvWytk973s+ncl4zqvzwectc9+77xBg3jnd3kBq0pkXfPYMZPexlZnHHcI27SHsOXY6G1xNw7pZ8/K+l7VPsIiNMag+AyV3ll4rHG0uva02GylwciOuq89WmYZTqc0hrkha11KYSk/LMlN9ZhQqLhguLuxdL5+3912QAdX4Wmaod8kkhKF22jVzC0cbzvb4TAXdZa5DQVxTBbXkTd3UEOUQ/JM7x7ugnsyq94wMsQ1ZOAS8FHYhmfLefrTjxxkMuxEB2w2Sas4bJdemY5QJZGdInfWuYldxPZldW8+Li2ZNriuDU1TW78hukbhkB/RWT3apS1emix7rSMy9W/uATSRp2wnjAzQjL5J6LSJSyIrFDBcujeE4/QuFGcLdJpxwk6UpZ7ZZI51o7yTEN4/RM4HhqGtJYfkyCeXYMxTIcZQ2Rnk2nErJgUrIFDyEZNpJG1A4R8jWqX3Es/KYsWyfBmxEEi7vRoIYxMcnw3c7kYa1RupQ4FCZA2Sz7rmKsP+3XILMO6vy67jGIk8EFCmz0JjPiKnOM5iplb1IWrANvFIEXdtWDtnN2oWYmsTu9kXTkxyN/XEisK91u0AiqRJgN6pRmjpY1o5Zz+SIBuSu/AnFAu8VEVHIGajc2wOlnDdyDGA1wIJhAchAaBHbORmgN4pUTQzAwKsi/jhMSg0MCWIsQ6TSrTDX/KlPBGEtEjbuNW72Hzf75Iw573zqHDO0HubpI3fgXlbbM9s1do6AuSt1987MU1PxEf6z2yaEFqH4vxmrSnjO5FjC2YmiBH49BE6EdpxxMH7qE41jXOwclivIuNJyIiNSWadnIHD22PXyFcRm71aG94cFrx3gafAIvCg75NQw8EoDDGFuCuMa45S22wD/axe3epW8Ja22n9o0bOkBl7cL8UVYnJi0DEuuLWBJDNgMyxI5rJ0sJ0OiNtKD5VE3BHxiJVbtm6VcSFCctndEjSQ7sqKDLGCva95EuxRaM8tGQpCXkw1/JQJnduC+WdJlrQEVByX/KAZOgT3CJIvyyPDH1CUSEzEyHCV6nHVmDs8+2cUtr/b3swkAAnCSR603MLKoa3CKJw0G8GxhUvDR9EDUrcF5ZfRMLL6IKAE/EoEP5obxI6SwE6vpPbejpA7DW/TL3iihh5tgEwSBuIkRTw6JmCzYzpFx0PhsOMgFNasEuSen1luEPvXCGFhTiMDntrYPAlSPGw0FB0LPntMToZlZUQyevCV1ht3Qow9NTJ8HnyCzTiV1j09lkA/Q30UWG28cTEDSLEpBXOijJx/cneWJWRn4m4LuImFyAVutDrdTbfo0KZEZ8h6wquf2Otm5jE08w2B7YIczNRdAe9c66YDEQ0HmBuOCixRQS47aoLpEFRKPA7O57lkH8x+cNZUaJj1P/TPnogrKPCpLl48FKnAqUO3ZpPAsxZj6O1Y5g0zJEBWpCTVCik1xR0NSlhgD3mYxZYWOOsl1q0q3VP2OkCIyXFUEajrFJWXEVOal1m0vIImzzsWktqzKM4tCZSw5TRhmqYHQ42Ryn8NC8G3r244k7Wni4Qr5iBAgi8sP1ZD4KCJRAjtriwMj40hVIN1nTssNiWfeK8HVWQp11l54hZOGQr+pQLANauQHti4PcgWUnVeGruFfVQQrhCx7gy5RWdHZF6JuXogOk6XzF+NcPsVSzyGIBpVb2PQnfj4gyvUXomkJopfyDBitW2z4PaFPjOey++LsOBO4FTmqAuHZHT+PxbTHTyZYtiVQYnzi0hZJeeqtx7vnQHA66dOl37cVWhoEhoqBNS9mYkfgKjEl/Gy8p27UUsJPPClrh37YbKJwMqrUEu6LATxkLtGM5psQWRWnPm2UoD7IDsZRTi+RXqBSddyYheO/WRdUxRzygVpNKKFUNOQgieuAtDjO1Rolce9dDaWibmTiWPERoVXnQtWAbpg6YKs2b3akY/N+WrlRwE6Jo7Dj4ObeVlxn5sC/tVpI1tQ1IZqzXLGctU30VXvORYYN3aJsh+AbixJxACxEzCRpZ+FAErpqTJmiumRrMKDQEtZhL8QFrLdtl9qzBWO/lFAlUC2WjUPKz6JnTNwdxqwYDpa4UgK+3nK6A7mx/Cv07K9nhw2aiQQeqMlAod/DBMqNK0zQUR5lR2DQ1cbhvSZjVIRu11gioRibBEVnZj20AQPXhWuCW4fZTX1BoIXSC5Eyji7YVvZ3B3TZLHDFQWJs0ecFFEjej3pE5nAAp6nrab7gPJzCTVXKiTT/sVBUf4gO0bOWABZqRozNiuAh5amaXcTWi9RMmUjPl3Y9FNDnHueTdjPkgzjfH7SbnbpWSEDRrooc2S/eHcBx8gEOHsuuUZCt8N5GksWDR3duzZhhYJ/i8EEtw62FIfJQBPw/EzVyaQBTTVrjyPhP6aaOYOMw08J7jmi2eTUkvNfWxF6s6RZVnFQPF8ne/DDL46O+3H2Gp7xUaRPtEzC6mlGPKWU4ipRfICQndaq9yfK4lgWgsw7FJeN54KV3lbcKQ6CUA1bZBuFCy+IcqG0lzzyx/E5ngYZEdi1FBws3F07ENyCCkjiYEpAC9ZaxBuy2vYS1WiNI1eHsRUeOB+5QQ3PDOriEJD+CscYO7leGOFgXvkcbj3z7zUilyxmEtkPXP9UmpsbJZJGDAdckiY0vJAC4rgGKWZ4toyLgfEQa2omcYMG1YyeLdCyhO26PZYB9mQKjK5JeOXOyS6YaooZViTmUbjkcS3Z3XCi4hxItmljpeNj3lYRGPInATPCy+qZPL6JR+BrVKEjBVagM7Sr1etmM4NcpW0sxYu5Z+ioj42mRgcx8XGLZsJPIoVeH3fCBegSrREq+jUV9x0nQQclm2Bav6sA/956mRx+BmMYQqBhyNytfO9xXZR6QOAIcJJsey0cOSjOgSSHYQsRfK1ExfgVnhHKgMvbSQfCqyllkTF8ryjKBoVoXSYovdO3J1tJJqoPNIygYzb6bBHsVJ+AwKuDpETWPsMVXrkYuD6ASHpJveY3Fy0E2RWokPSYeeHP+19RQ/KCxa8fJgluY5LB2qZw1scLpnBAzUIjLU7NGJUW6OjsoTnhcngvFlvIUyCciAdMgI4oiH/tYCB4amiNcpN4zQo3BUCQPuwgiBh9zHRymVRVx15TZS6Wc3c8yQnV7ConKiHicdVKpnnXCkeQm60we4zdE0hlyWwsyhl9aDS6phkMYyAhMMOv0RAmOpr5n9s96d+p5QKPIEUzBMug13EnAHsDKY3iiAtHv3oEsnhl6cpefkSPs5Vot29UL6qC4H48spay3YrYfaFBkjvqIhCABA9g++iuVOZ8a1IVsrICch6sRUeEEKtCZRVLiiLL6MV4JqjJB4U7lcqQARni8bN9k0gAdQUADrHJ+sNEAP/FnjnRTHzKIqtn4tI+uHZwhJ4OCIA4NIdK7vzFBEuo2Fyp/hmdKluaurDlRPqxoZe4FfL/qRyA6so6TgkFJx1tCRImSGGGsFW53cHjKdk4Dwe6WPDxKXXCq3+C01OHcZJVE0pa1FFFTSGTLmxtWPWAfpKRCNZKaJaQGY+rw7w0dQeGAjnxQlxBrs6FL8hU2CTKmSrirtxx5Sv+UnzK4uO9eUOX2MYHYcYSxhDvCg/xt7ZsBhLJw/ayLA8NvoyuM89K1ed7aGnKA4sagGGLJKYoFnhpRjWmLrXSQFyhDFJSFmlnxunigQ4Ux52nEDezbSH1TYrIUL4rq5v9ibyPMOdXcgUORcXEiVufTD0B0DVQBbGO6emNaTL/ytIpzAH9WAWndF93IbPiYiC6pCCPVTWlFCo+W+CmZzKd2YgUPT2mhh7Klbs6RuWSVeNfbz84ibyRJGGcCjpBlqYo9aZoC6SPkSNeQM5I2qZz6DdkEFgVlCyeN35DWLcesvjfpWOBKIY2SqBsjpxpUzd0mT30PNq9azy7lgtkfLICoAdBwK19I+1nRFJAvWgDuJNU5RTZkTlCvInvSzR/RGAV3qm2B74+jV6K2HRowiO6jBX+9XClIXWVjnx0186stra70uncz29OVjm8Sf3Q+ekxP5+Oj72H97XuY740Pd9KaCTmCEoMKb1W5VUAttresQL6XdrFKML3ullK9XZnmwrxL2yy17ttxQU3cTPjsQHkiaSjghJDi1g5GK6jWjsG5x0M6sgyQeyJqJC17Xfe2t3s9ZU5Pghm9b8rKQTDZjbqcXAM/y1yS53Oqj4BtBmPOmiidAdB2VC+3qMXIb/dc4KbgHi1QT2VHqAalwKrEIqkjrpb6CUiVRYFUh5y9gjHYQ0T9dLSnfxjaznM5m9zWCKLfAtLK09f2d8uDumQWTzh18jVL7CA/1LE+YAQODWrjIrtxH3K05Uvtqx1CXaYU2YrvWsn0/k3u229yX13Fl0ybbHm/+qdxwk+1s2rOySQmNcqDATZp3JsVh1KmcAX1HsKtLNhSkCsQE8Sq2xwoRM9qGVX3DqgUjBPCKcfIGCIaCxmkLfoin4BdRvUgIcezJfip8m/5c7cE7jLiGvNEAe8xovmptGAnSTUglqcagStexc12nCrfHzczhCki1zCiyHZO+rmNYZ77GFPbgFk7ZHCTGgWtxjMJQ+bJIGEPXYxq6JLWqliDIuPUipptc/gG7Lt8w1owKVcH5yYJpr+yyFA5zl43Q6qK54BPdZ8vPgChsER0Z2ePw2QwD9JYzqT03gY8AkXppyLR+eRtPlxifdvbT3P7bW3rVBrkbf7eVP7oKXPZVJYuKRw1D7EIOT92GQBh5LDPVAfUCK5UPVN1abOX6AWT9zYVDz4/7c3b7MO/Ue8uq1P05E9EK5gBlBapaNQW+N60Sl9NK53L14K/L1fpAQvjE9FjZDS+0cAhdeoewaa2LKwLnFzj7BJsapr4CEH7+kimoz8qQn18NWPe7iLS76PBqGQkeLfBeFvZbx9z7a8mUZRQH2m+PXf1MZHnygVwhM/olZrrNAIe43aa0L9qWcVb/t+WlVXfPgLBt2OFppiD+N6Ole+m6C+Wvm5iPD6Sc+V8NenbX0c1D3EVxwuHHDRZ97qDOAR2z3DFFGp9lWZfKstBjc1/5EYNdvS3G327nTIuiInC4bne0cpvf9HGpJjkt7+IIPEEz1DVUSin3Jt48t38UqXl3kYng8RHbb/9c5igkQ2Q5IOaCnU41IhgQyEoAKjXx/7n66Ly5z24rcXczqvDR3j8bv52By4+d+DMvQX32e0kIe04T7dTOoBp2S4LC5FIDC7Bz3kUJIGf6iREIum27ZjjiCVdt5eVr2a7t2wSWvPHDRvdELvt6Yw89nu+7Wn/iRzzAZ30thcJ/9tgFETLhejTX7wQRe1fiL6t9vEJLvP02tXHFEafVnv3ZBBMFNAKBQXMJ/5yj1+AoqKqu8i6DeeJYvD9qVQxeaIff+iJ51bKp6L4i57QnRTzQ1J8KQqBIRac+LncAyqiZoydX1t6bkuvpL8IeN8w/V5439M7+rwEkz7/2OHPz3+7qvw5sHlG/v75f2X+P6c3/2z+P6c3/2z+KCX07T5NWOaP+zT3rqfr+hOCrpchS17JuMFw20obGXvJpbqHXJLuew/DKBuc39vCSU0mnH5AkMHtSwpo45b2kmYq61dXc1Vy7riI4E7bkDvkivRVg8PhxkwG7eM30scjdEF3kA4mY79u1KiPjU0hB/WHICoN3pCM59FneOGzNBNaeZ++A9SGnqPwHDljKIi9qk2p244wSEbKYynUPMZAma/mlHrKXgPEyQCrq3KxgA2p5IRidxoAGkr+CtmtDqJb+X4ewa6bgZDY+GhmLPt41ebT8wcX6trq1oUSlpr5VILn3kXWHxfUobtAx+DjqC7ZRQxVqgFXnqwKgdXt73vAf/SO//ps/tUL/z8GYsvI3/8FkQmtDR+aj6kAAAGEaUNDUElDQyBwcm9maWxlAAB4nH2RPUjDQBzFX1NFKRVRO4gUzFCdLIiKOGoVilCh1AqtOphc+gVNGpIUF0fBteDgx2LVwcVZVwdXQRD8AHF2cFJ0kRL/lxRaxHhw3I939x537wChXmaq2TEOqJplpOIxMZNdFbteEUAf+hHGsMRMfS6ZTMBzfN3Dx9e7KM/yPvfn6FFyJgN8IvEs0w2LeIN4etPSOe8Th1hRUojPiccMuiDxI9dll984FxwWeGbISKfmiUPEYqGN5TZmRUMlniKOKKpG+ULGZYXzFme1XGXNe/IXBnPayjLXaYYRxyKWkIQIGVWUUIaFKK0aKSZStB/z8A85/iS5ZHKVwMixgApUSI4f/A9+d2vmJyfcpGAM6Hyx7Y8RoGsXaNRs+/vYthsngP8ZuNJa/kodmPkkvdbSIkdA7zZwcd3S5D3gcgcYfNIlQ3IkP00hnwfez+ibssDALRBYc3tr7uP0AUhTV4kb4OAQGC1Q9rrHu7vbe/v3TLO/H3g5cqlxxuCDAAANGmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDpjMmUxMjdjOC0xOTM1LTQ0OGEtYjYxYy0xY2RkNjI3NWZkYzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTFkYjFmNjktN2M0MC00MDgxLWJkZWEtN2YxMzFjODQ3OTg4IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NzdiZmRhYWMtNmEyNi00MTY5LWEzMWItYmZlN2Q5NThlOGU3IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzI5MTg5ODYxNDQxMDI1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZGI2YWQ2MTUtZWQwYS00MTEyLTljYjQtYTIyZDkwMDkwMGNkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0xMC0xN1QyMDozMTowMSswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5TF0SEAAAABmJLR0QA8gDyAPIuRIzMAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH6AoREh8BMSlSAgAAAXpJREFUWMPtl0FugzAQRf+Peo9ygC57AI7Col1EzR1ortBAKiWLpCdJcoduugoXaX43RnIpYEPdQCW+xMYaBj9G8z0GJk26qvjbBJJiABGAWwAnAAXJYlRAkhKzQVsnkkcrJgKwAxDXpHgG8DYkWBXorJ9KbBi5tRti7zcN68eaNftv+2w2kVSQXHr8wEcA9wDmJC8NMQTwAuCDZBayej7VKXXwgZH0aeK3kmZ1MJIyE3ORtAgJFKubIke+vBK/NtWwYdaVmDwkUNIRKHbko6RV5Z2tpFmlMqU2dVW8WoU8czZB5cFgTK98exwu2KuHHFDBYFy2nXoCJR2/2wS19YXpRWyseO8RmrpMwfOwJ64h00+HSkV3xjjKtbMPVIMB9KpSsPOppgfPPr3U4mbZoFANxtIXZtZm6aMd9wc/WP8A6MEafTYto8/KGn2eul4fUnPHCaGl6xohaQ7gDsCCpFqG0wzAO8nXEOdQX8VjuD7sA36jwKRJk/6NvgB/JgixGmzy6AAAAABJRU5ErkJggg==)}.GPtabsList{background-color:#f1f1f1;border:1px solid #ccc;display:flex;list-style-type:none;margin:0;overflow:hidden;padding:0}.GPtabList{flex:1 1 0px}.GPtabButton{background-color:inherit;border:none;cursor:pointer;float:left;outline:none;padding:14px 16px;transition:.3s}.GPtabButtonActive{background-color:#ccc}.GPtabContent{border:1px solid #ccc;border-top:none;display:none;padding:6px 12px}.GPtabContentSelected{display:block}.GPlabelActive:hover{background-color:#ccc}.GPcatalogButtonSection{background:unset;border:unset}button[aria-expanded=true].GPcatalogButtonSection span.GPshowCatalogAdvancedTools{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.GPshowCatalogAdvancedTools{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAAcCAYAAAA0u3w+AAAJ4XpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHja1ZhZkuQ4DkT/eYo+gsAN5HG4gGZzgzl+PyiUWZWbWdfMV0dUhJQKiQThDoezgv33Pyf8xSu2EkMu2mqv9eKVe+5xcNKu12vc33Ll+/t+pbff5OP1IOv5IXIp+Z2vP1t97n+7Lu8DvA6Ds/LbQO0ZSObHH3p+xm+fBopPZB6Rn+9noP4MlOLrB3kGGK9lXbU3/X0J017H5/lXGvgE/8rtY9hf/laytwvzpBgtSbr4TukJIPknhzT8h/u7caPwHqncVzzK12Ak5Ls8vb86ER0PNX970wdU3s8+ofUWfPiMVo7PLelTkuv78dvrQcqnH9L7/PH3mXN7zuLH67v6wjyiT9n3zzm7nXvNrGLkSqrrs6i3Jd5n3DeZwqdugdDqpXwKQ+j97rwbrF5QYV/rmryXdImgciTLliFH7D4uWYSYo4WonMS4YrovtqSxx5Ucv+xvOVFTTzs1QF437DnF91jknrZfK9yzNWbewq1RGEx45I/f4U8fOMdLQcRz2V65Iq4YPdmE4cj5N7eBiJwnqeVO8Nv788txTSBYPMteIp3EztcQs8gvJUg30IkbC8dXDYruZwBSxNSFYKiGLKAmqUiVS2NUERLZAGgQOgUUJwhIKXETZMwpVbChkpiaR1TuW2OJXA5cR8xAoqSaFGx6GoCVc4E/mhscGiWVXEqpRUsrvYyaaq6l1qrVRXFo0hy0aFXVpl1HSy230mrT1lpvo8eeEM3Sa9feeu9jMOdg5MHTgxvGmHGmmWcJs06dbfY5FvRZeZVVl662+ho77rTRj1237rb7HiYGlSxbsWpqzbqNA9VOCiefcurR004/4x21B9Yv7z9ATR7U4o2U36jvqHFV9W0IcTkpjhmA0UUExNUhgNDRMbua5BwdOcfs6pGqKJEgi2O2xREDwWwSy5E37EJ8IerI/V+4Bc0fcIv/K3LBoftD5L7i9h1q29vQuhF7VaEn9UpUH79bG7ENb3ZfjuGnH/70+K8baM58ro1fqaduO2PNkrXXvdZVkhqKrnCwXwZqNc0zNlreeaTsMm2UmGz0CkWzk1Z0IeaWFFrV1W33wUckprYrHwgmObhdGHdf263okFZX0j17R8nbyrp7a/DGJamMM9xNpcIAY5dhms9MJw0pGpL0epA2BXNc1GKeiZZZo6FBPaZecUR4szqVkJuOUlcd08TDyWWWMvvOMayzOqxfucpcO9c1qUUjxG6LNpqpYsgd56gXTIy2tqx0WteVkk5FenVC9kyODM/R56Fk0pwX6pb2lD13hezjUAcZQ0htKbVGx0WM6WAIMR1MJRmVe629w16GpZlGoemqrh80OSs9Z5kz6rwTXLQTxJ28Jns3vZPXZZUtxFxMe9jmp7m4V/t6LCz0tHJKn40gulGem8W1ITufTvjxaqvZKaFIW4PoxuwpYhZY3pR2cqmkzEhBhUCIEitfh1KW0bUmq8NdbCLkO4+xhTXSEVadqwoZjHZHCNIfIhk/RZKZOvpzAT2PfVVGA3bwBdz8eyT6cyRpE0l+AgkIHUxa9qQKOfwpZyQel+S1Eyc0O5i7uXMykBpz0NfaaQoHqKt5EDnt194T0e+jlhxhVjYM8skG3B3aaLJrnavWvnmK4qo8OQN102POs90OfCL+eKwByTqYprKAHdrns436gc97df7Ye220ENHncaTTJOypDT09tokqi9axaDG9l9XoIgc/j8nqUIXMb4alEqQPl3jUvlWzHesc8EjMLjpGXguzCAnEwLHbVfSiYKTTPNJRao8aVszboS6eRGEOsYLp9UcwbUfbz4KErmTUPy7LO+EQd4chbCyOLWtpDTY9XLuGOzbp60ijF/Qxy9ByFiXKN4VBulLuQrbFdaGzm6hUGV1n8X1qifNousahaDdLWsrpLXdyLZzlmJP1CRy5lt3ck3GSsQ5vf2PPEttOeexEa7ykZanhxF3sKdDjdV/2qEjciUb/S2Vuy2u0GXPnntsjNoKioIyOmwqg0Sxp2ZTvQuP6Mu/QfooqHJ/XtOAAUik+L72N3l1OAr/k0yLQaA0DNaJOssPkm3/RNqqMaR8p+RYO/4hCLttajzFUyi5PqyHPI7dTjcBi1rgwIC75ORgV31ZB0ejxpXbM+1ZGnAkJWHC96kSEqiY4A0q+9QK5odcNEvX8AimMth2l7t9QGX1eaEZ6skGFKYpfUINE7yZjYw3fqTA7VgfFmFe55SLA33afYqQ+HQXlz1hWPlQBIn55nzE0Yx+8QJeKjThGsrBpwXd9mfBIshdW4Ro7E4qBW7fSzHAOFwUzKQ4TYU+SDyqvFNI5Ptae91hBz8Hc/RoJtWQIH2vqYSRuZ6QDRZQS8t9gTZs+GDWJS8JY74zRwqb2W3AUetu5flgmtUdHIZ8nehX7gEbCONlX9hIIFD2sOXS5uhNCTUvvehIMbMs5UOgWbNsGKZtZp6VZFPtY6c8YSoWAu/WRLQxCNvqnFnzhIOKCOgsdtuLNaux4tO77ULqrVwrcUYotTlqvUb2uhRmvV4Puc03TOiv32WXXuXSTSdxfpyh5DOG2ujlA1EXds9HHSUMyV6mBzkGjJaFbRaUhDpaj0THZJmZIODhFd9GQklDkgXWhIbK+Bsq2MmyudHiB1rRKUh5a5bmZG+aFqSjDtmj15NNRoeXuxT6INbNxiYeqzataXZLcqRK/zk7JEkyAsvdGiwgVWuMbYI4Tojn6M/dzxuV1IANyYfInOd70Ddiw7BilU/w/LHBsWtmQpUrM4GYHI1Ua2losggw+m+IXG5XG5ioAUK9KKGtp/sWO8Kkq9kDR8QgTG8+jGWih6KrzTUbgKu2qCxglGt10l+FuJcCKetsVhJ+Wy/bwKGjEWX6N2UnQqdi2uYpviSN5XpLN8GCCrC6kJFBnbN8h1ZmS2IiIkBw2SWnSpRTCOEKrtonZg1q0MDQCkeno+SHi3fFCCHLILW1a4vKWMiGQbzuAjiPmB0GjnbEHSjbFXSNyTfdXmmfGFsYMBUuM2ECSjSKiOpU2F+lAmXxSuHi5C99I9Ls1MyyV24M12MRcnU3R/V92RrNmJRJpuSPYe0+g9Tf8MxtucjGvlx8+upAlBNg9CuVDRJNqZavDtJe7bUQJvdTgdrvexejeV7Rgi7GmqOBj8hL7nP7IoAH/Dw4v/LqAJje8ndchnsL3YOLdcPr/lTRHtiwnOx7IN5Ww05uhYBo61sEV0los0BmFcS47Zxb7PlzGKGzr2DuyY8CKTC5SgNAAwntPyNOfIWcF9u/gfyCKdyelCS8MyWE/KW6rKtXZ4RgGC4632aANkcI1knHhQAGXBcO7OAJsoRGwcYSTdua39P8nx/BPb/xXDySH5PfwN4ffmBMhu1llAAABhGlDQ1BJQ0MgcHJvZmlsZQAAeJx9kT1Iw0AcxV9TRS0VQTuIOGSoThZERRy1CkWoEGqFVh1MLv2CJg1Jiouj4Fpw8GOx6uDirKuDqyAIfoA4OzgpukiJ/0sKLWI8OO7Hu3uPu3eAUC8zzeoYBzTdNlOJuJjJropdrwihHz2IQZSZZcxJUhK+4+seAb7exXiW/7k/R6+asxgQEIlnmWHaxBvE05u2wXmfOMKKskp8Tjxm0gWJH7muePzGueCywDMjZjo1TxwhFgttrLQxK5oa8RRxVNV0yhcyHquctzhr5Spr3pO/MJzTV5a5TnMYCSxiCRJEKKiihDJs6qsEnRQLKdqP+/iHXL9ELoVcJTByLKACDbLrB/+D391a+ckJLykcBzpfHOdjBOjaBRo1x/k+dpzGCRB8Bq70lr9SB2Y+Sa+1tOgR0LcNXFy3NGUPuNwBBp8M2ZRdKUhTyOeB9zP6piwwcAuE1rzemvs4fQDS1FXyBjg4BEYLlL3u8+7u9t7+PdPs7weRH3KzYlwNqQAADRppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6ZGYxYzFmMGUtOTRiYy00OTE0LTg4MGItM2ZjNmRhYjM3NDFmIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmM1NWM2ODRkLWY2OGQtNDExNy04ZGYzLTAwYWMzMjQ4YTY5YSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjNmYWM4YTllLWJkMTUtNGJiOC04ZGQyLTkwZDUyMjE0YmFmOCIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1QOlRpbWVTdGFtcD0iMTcyOTI0NTAwMjg0NjU2OCIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjMwIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjcwMTNhZTFjLTcyMjktNDJmZS1iMzAzLTU3NGFmMWE3ZmQxMyIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMTAtMThUMTE6NTA6MDIrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+UnHxogAAAAZiS0dEAPIA8gDyLkSMzAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+gKEgkyAorMuigAAAIkSURBVFjD7Zc/aBRBFMa/t39EFEMQTrQ2CiIi+K+Q3ZA+CLJ7nqWQwlRJGs3ddUnlZdUiXJEqINjE9e5UjFWag9sEbNRGhGB6MXKgQQPxZp5FLhLCXXbXXSQH8ytnhuF9771v3yygUCgUCkVXKOrB6/dqJzQD42A5DNAZAGBglYA3UlB55ZHztWcFWoXaLTDPAzjW5cgGMUYanlvpOYFtcc8inGVi5A6aSAptS50/761co+QAAOxCba/GH6TJgcaD3HqSoKx89RMx15tH5MTHqdzW7r3zU/6h47+0WSYaCmbcc2F3aftuGhjfpy075asPrI8lTjtjgYlG+zf1JbvoZ3aW7aKf6d/Ul5hoFIyFxBW08tUPAC7Giw3vl2fcS0k1tq3xBEATpN3UmLYkxCsAp8C4G3ju0yj3aCH7pzstNkrO3zbtkLGBNLwTlJznIG1wO2uyLiFWAJggzYoqDgCM8ILE7i9OXL0dDx7+PZH5iast0isAYLDIrh8VTXuyMpeKBwFei28fWkvTg8KACDzXCjzXEgZEXA+GCKTFf/gwv07cnp47DaLbBFxhqb+zCi8uD+ZfXmCpvyXgGhh3As+dTixQCioD2IgR23ezZZYPkgdDB709Wc0ywY8y6Jkpu+w5tTQH9dB9/+RuD9Yf5r6k/lTbFsnzAPV1qxwzjaQt7r8+tu2inwHrY8wYBnC2vbzKoEWzZZbrj298U/8uCoVCoegx/gAQwd9vpqyHDwAAAABJRU5ErkJggg==);background-position:-26px 0;display:inline-block;height:28px;vertical-align:middle;width:28px}#header-search>label,div[id^=GPterritories-]{display:none}div[id^=GPcontrolList-] .GPshowOpen>span{color:#fff;display:block;font-size:24px;height:24px;line-height:24px;pointer-events:none}button[id^=GPshowControlListPicto-][aria-pressed=true]+dialog{width:200px}.GPcontrolListPanelClose{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIRSURBVFiF7ZbRS1RBFMbPbLq9ldjaY88Zkv1JQRqt+Wf0aCrYBuY/UkRQRFQvQQax+JipEUIoQdHq/nrYb3K8zl33zl20h/vBwnLOmfPNN+fMmWtWoUKFMwPwjiO8Pu/9xOAGDQRqZnYYmLrOuQvD31I51AYJAqbNbNnMfgXm38AyMFV2E8AssKpDy4txwAowX4booogO1WYdYEu/jmwHIqqXEOPzr8VEScwjxXSTREnMSyXZBGaAscA/DtyTOIDnKaKAFsfxGHCB38kWopUiaNVffmC8T9wE8FaxKwk8vpVCrAG1TGU8nsSqeBrJLbXBl5gY4C7wOSNqW+13Y4iistUrLkYE/lTu5PhfAR8ytjmteViYMF9UeTFK3qZ36S9HfJeAP8CDjL2hqq4nkVpfUdFhEcNIjv2ame045/aA22Z2PeMbNbOn4QLn3C6wK38ZxN7Ggd/LKICfwKb+tyMntgGcOAzgO/AjkTM2AJKqFEvuW27s9Oh/aybUch8T+PKmWdaWJiro49kCa+a1ZmFIYvzYjo70ooJu6rS/Ao0B4q8C31TVyYJcZ/aw+iRv+omSmPeKXUrgmeHo0yc6mjOV6gL3i/IYUAdeKMkW0ASuBP6G2mxHMc+A0cJEvVxNVSp3mklUC2imcPgkdSU5CE5nWyK6snXofXUniTkXAFPAIvAJ2Af2gHVgoeidqVChwv+NvxOT737B3Fc7AAAAAElFTkSuQmCC)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div{align-items:center;column-gap:1rem;display:flex;flex-direction:row;padding:.5rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div:hover{background-color:#eee;cursor:pointer}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button{flex-shrink:0}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button:hover{background-color:rgba(0,60,136,.5)} /*# sourceMappingURL=Classic.css.map*/ \ No newline at end of file diff --git a/dist/bundle/Classic.css.map b/dist/bundle/Classic.css.map index df2684fa..e516a933 100644 --- a/dist/bundle/Classic.css.map +++ b/dist/bundle/Classic.css.map @@ -1 +1 @@ -{"version":3,"file":"Classic.css","mappings":"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","sources":["webpack://Gp/./src/packages/CSS/GPFwaiting.css","webpack://Gp/./src/packages/CSS/GPFgeneralWidget.css","webpack://Gp/./src/packages/CSS/Controls/Drawing/GPFdrawingStyle.css","webpack://Gp/./src/packages/CSS/Controls/Attribution/GPFattributionStyle.css","webpack://Gp/./src/packages/CSS/Controls/ElevationPath/GPFelevationPathStyle.css","webpack://Gp/./src/packages/CSS/Controls/Export/GPFexportStyle.css","webpack://Gp/./src/packages/CSS/Controls/GetFeatureInfo/GPFgetFeatureInfoStyle.css","webpack://Gp/./src/packages/CSS/Controls/Isochron/GPFisochronStyle.css","webpack://Gp/./src/packages/CSS/Controls/LayerImport/GPFlayerImportStyle.css","webpack://Gp/./src/packages/CSS/Controls/LayerSwitcher/GPFlayerSwitcherStyle.css","webpack://Gp/./src/packages/CSS/Controls/LocationSelector/GPFlocationStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureAreaStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureLengthStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureAzimuthStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureToolTip.css","webpack://Gp/./src/packages/CSS/Controls/MousePosition/GPFmousePositionStyle.css","webpack://Gp/./src/packages/CSS/Controls/ReverseGeocoding/GPFreverseGeocodingStyle.css","webpack://Gp/./src/packages/CSS/Controls/Route/GPFrouteStyle.css","webpack://Gp/./src/packages/CSS/Controls/SearchEngine/GPFsearchEngineStyle.css","webpack://Gp/./src/packages/CSS/Controls/ToolBoxMeasure/GPFtoolBoxMeasureStyle.css","webpack://Gp/./src/packages/CSS/Controls/Zoom/GPFzoomStyle.css","webpack://Gp/./src/packages/CSS/Controls/FullScreen/GPFfullScreenStyle.css","webpack://Gp/./src/packages/CSS/Controls/OverviewMap/GPFoverviewMapStyle.css","webpack://Gp/./src/packages/CSS/Controls/Legends/GPFlegendsStyle.css","webpack://Gp/./src/packages/CSS/Controls/Catalog/GPFcatalogStyle.css","webpack://Gp/./src/packages/CSS/Controls/Territories/GPFterritoriesStyle.css","webpack://Gp/./src/packages/CSS/Controls/ControlList/GPFcontrolListStyle.css"],"sourcesContent":["/**\n* Map loading\n* @sample\n* function setMap(map) {\n* var center = this._createLoadingElement();\n* map.getViewport().appendChild(center);\n* center.className = \"\"; // invisible !\n* center.className = \"GPmapLoadingVisible\"; // visible !\n* }\n*\n* function _createLoadingElement() {\n* var div = document.createElement(\"div\");\n* div.id = \"GPmapLoading\";\n* div.className = \"\";\n* return div;\n* }\n*/\n\n#GPmapLoading {\n display: none;\n position: absolute;\n z-index: 50;\n top: 50%;\n left: 50%;\n width: 50px;\n height: 50px;\n margin-top: -25px;\n margin-left: -25px;\n}\n\n#GPmapLoading.GPmapLoadingVisible {\n display: block;\n}\n\n#GPmapLoading {\n background-image: url(\"img/waiting.gif\");\n}\n","/*********************/\r\n/* Widgets : general */\r\n/*********************/\r\n\r\n.GPwidget {\r\n position: absolute;\r\n pointer-events: auto;\r\n font-family: \"Helvetica Neue\",Arial,Helvetica,sans-serif;\r\n font-size: 13px;\r\n color: #333;\r\n}\r\n\r\n.GPwidget input[type='text'],\r\n.GPwidget input[type='button'] {\r\n -webkit-appearance: none;\r\n appearance: none;\r\n color: #333333;\r\n}\r\n\r\n.GPwidget input[type=\"checkbox\"] {\r\n display: none;\r\n}\r\n\r\n.GPwidget select {\r\n padding-left: 3px;\r\n border-radius: 3px;\r\n}\r\n\r\n.GPwidget form {\r\n margin-bottom: 0;\r\n}\r\n\r\n.GPwidget * {\r\n box-sizing: border-box;\r\n background-repeat: no-repeat;\r\n}\r\n\r\n/************/\r\n/* position */\r\n/************/\r\n:root {\r\n --size-per-row: 32px;\r\n}\r\n#position-container-top-left,\r\n#position-container-top-right,\r\n#position-container-bottom-left,\r\n#position-container-bottom-right {\r\n border-style: solid;\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n /* crée un décalage sur le searchEngine */\r\n /* align-items: center; */\r\n width: var(--size-per-row);\r\n min-height: var(--size-per-row);\r\n /* padding: 5px; */\r\n}\r\n\r\n#position-container-top-left,\r\n#position-container-top-right {\r\n top: 0;\r\n}\r\n\r\n#position-container-top-left {\r\n float: left;\r\n left: 0;\r\n}\r\n#position-container-top-right {\r\n float: right;\r\n right: 0;\r\n}\r\n\r\n#position-container-bottom-left,\r\n#position-container-bottom-right {\r\n bottom: 0px;\r\n}\r\n\r\n#position-container-bottom-right {\r\n float: right;\r\n right: 0px;\r\n}\r\n#position-container-bottom-left {\r\n float: left;\r\n left: 0px;\r\n}\r\n\r\n/******************/\r\n/* General panels */\r\n/******************/\r\n\r\n.GPpanel {\r\n box-shadow: 0 0 6px #000;\r\n border-radius: 4px;\r\n padding: unset;\r\n border: unset;\r\n background-color: #FFF;\r\n}\r\n\r\n.GPpanel {\r\n}\r\n\r\n.GPpanelHeader {\r\n position: relative;\r\n width: 100%;\r\n height: 32px;\r\n padding: 3px;\r\n background-color: #9DB1BD;\r\n border-top-left-radius: 4px;\r\n border-top-right-radius: 4px;\r\n}\r\n\r\n.GPpanelTitle {\r\n width: 100%;\r\n height: 100%;\r\n text-align: center;\r\n font-weight: bold;\r\n line-height: 26px;\r\n border-top-left-radius: 2px;\r\n border-top-right-radius: 2px;\r\n background-color: #366291;\r\n color: #FFF;\r\n}\r\n\r\n.GPpanelFooter {}\r\n\r\n.GPpanelIcon,\r\n.GPresetPicto,\r\n.GPreturnPicto,\r\n.GPpanelClose,\r\n.GPpanelReduce,\r\n.GPpanelInfo {\r\n position: absolute;\r\n width: 26px;\r\n height: 26px;\r\n cursor: pointer;\r\n border: none;\r\n background-color: #366291;\r\n}\r\n\r\n.GPpanelClose {\r\n top: 3px;\r\n right: 3px;\r\n background-position: -27px 0;\r\n}\r\n\r\n.GPreturnPicto {\r\n top: 3px;\r\n left: 3px;\r\n}\r\n\r\n.GPpanelInfo {\r\n top: 3px;\r\n left: 3px;\r\n}\r\n\r\n.GPpanelReduce {\r\n top: 3px;\r\n right: 32px;\r\n}\r\n\r\n.GPresetPicto,\r\n.GPreturnPicto {\r\n border-radius: 3px;\r\n opacity: 1;\r\n}\r\n\r\n/**********************************/\r\n/* Showing/hiding advanced panels */\r\n/**********************************/\r\n\r\n.GPshowAdvancedToolPicto {\r\n position: relative;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n width: 32px;\r\n height: 32px;\r\n padding: 2px;\r\n background-color: rgba(255, 255, 255, 0.4);\r\n border-radius: 4px;\r\n border: 2px solid rgba(255, 255, 255, 0.4) ;\r\n}\r\n\r\n.GPshowAdvancedToolPicto:hover {\r\n background-color: rgba(255, 255, 255, 0.6);\r\n}\r\n\r\n.GPshowAdvancedToolOpen {\r\n position: absolute;\r\n display: block;\r\n box-sizing: border-box;\r\n width: 26px;\r\n height: 26px;\r\n background-color: rgba(0,60,136,0.5);\r\n border-radius: 2px;\r\n}\r\n\r\n.GPshowAdvancedToolPicto:hover .GPshowAdvancedToolOpen {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n\r\n.GPshowOpen {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n\r\n.GPshowOpen:hover {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n\r\n/****************/\r\n/* Calc waiting */\r\n/****************/\r\n\r\n.GPwaitingContainer {\r\n position: absolute;\r\n top: 32px;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n background-color: rgba(255,255,255,0.9);\r\n font-size: 1.5em;\r\n font-weight: bold;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n}\r\n\r\n.GPwaitingContainerVisible {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n}\r\n\r\n.GPwaitingContainerHidden {\r\n display: none;\r\n}\r\n\r\n.GPwaitingContainerInfo {\r\n margin: auto;\r\n}\r\n\r\n.GPwaitingContainerVisible,\r\n.GPwaitingContainerHidden {}\r\n\r\n/***************/\r\n/* Flex inputs */\r\n/***************/\r\n\r\n.GPflexInput {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n transition: max-height 0.3s ease-out, opacity 0.3s ease-out;\r\n}\r\n\r\n/* FIXME tempory hack with :not(.GPlocationOriginHidden) !\r\n.GPflexInput > *:not(.GPlocationOriginHidden) */\r\n.GPflexInput > * {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n border: 1px solid #999;\r\n border-radius: 0;\r\n}\r\n\r\n.GPflexInput *:not(:last-child) {\r\n border-right:none;\r\n}\r\n\r\n.GPflexInput *:first-child {\r\n border-radius: 3px 0 0 3px;\r\n}\r\n\r\n.GPflexInput *:last-child {\r\n border-radius: 0 3px 3px 0;\r\n}\r\n\r\n.GPflexInput > *:not(input) {\r\n /* width: 28px; */\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n.GPflexInput > input {\r\n -webkit-flex: 1;\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding: 0 5px;\r\n min-width: 0;\r\n}\r\n\r\n.GPflexInput > select {\r\n -webkit-flex: 1;\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding-right: 7px;\r\n}\r\n\r\n.GPflexInput > label {\r\n background-color: #F2F2F2;\r\n color: #666;\r\n padding-left: 7px;\r\n padding-right: 9px;\r\n cursor: pointer;\r\n}\r\n\r\n/****************/\r\n/* Submit input */\r\n/****************/\r\n\r\ninput.GPsubmit {\r\n display: block;\r\n width: 80px;\r\n margin: auto;\r\n height: 28px;\r\n line-height: 26px;\r\n padding: 0;\r\n background: none;\r\n border: none;\r\n border-radius: 3px;\r\n font-family: \"Helvetica Neue\",Arial,Helvetica,sans-serif;\r\n color: #FFF;\r\n background-color: #366291;\r\n font-weight: bold;\r\n opacity: 0.8;\r\n transition: opacity 0.2s ease-out;\r\n cursor: pointer;\r\n}\r\n\r\ninput.GPsubmit:hover {\r\n opacity: 1;\r\n}\r\n\r\n/************/\r\n/* elements */\r\n/************/\r\n\r\n.GPselect {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n margin: auto;\r\n border: 1px solid #999;\r\n color: #333;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlabel {\r\n\r\n}\r\n\r\n.GPinput {\r\n\r\n}\r\n\r\n.GPform {\r\n padding: 15px;\r\n}\r\n\r\n.GPelementInvisible,\r\n.GPelementHidden {\r\n display: none;\r\n visibility: hidden;\r\n opacity: 0%;\r\n}\r\n\r\n.GPelementVisible,\r\n.GPelementShow {\r\n display: block;\r\n visibility: visible;\r\n opacity: 100%;\r\n}\r\n\r\n/********************************/\r\n/* Autocomplete/geocode results */\r\n/********************************/\r\n\r\n.GPautoCompleteList,\r\n.GPadvancedAutoCompleteList {\r\n z-index: 2;\r\n /* display: none; */\r\n /* position: absolute;\r\n max-height: 140px;\r\n background-color: #FFF;\r\n border: 1px solid #999;\r\n overflow-y: hidden; */\r\n}\r\n\r\n.GPadvancedAutoCompleteList {\r\n width: calc(100% - 28px);\r\n border-top: none;\r\n font-size: 0.9em;\r\n}\r\n\r\n.GPautoCompleteProposal {\r\n width: 100%;\r\n height: 28px;\r\n line-height: 16px;\r\n padding: 6px 10px;\r\n color: #5E5E5E;\r\n font-size: 1.0em;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow:ellipsis;\r\n cursor: pointer;\r\n}\r\n\r\n.GPautoCompleteProposal:hover {\r\n color: #000000;\r\n background-color: #CEDBEF\r\n}\r\n\r\n/*************************************/\r\n/* Showing additional hidden options */\r\n/*************************************/\r\n\r\n.GPshowMoreOptionsImage {\r\n background-image: url(\"img/GPshowMoreOptions.png\");\r\n}\r\n\r\n.GPshowMoreOptions {\r\n display: block;\r\n position: absolute;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n transition: all 0.5s ease-out 0s;\r\n}\r\n\r\nbutton[aria-pressed=\"true\"].GPshowMoreOptions,\r\ninput[type=\"checkbox\"]:checked + .GPshowMoreOptions {\r\n -webkit-transform: rotateX(180deg);\r\n transform: rotateX(180deg);\r\n /* bottom: 90px; */\r\n}\r\n\r\n/**********************/\r\n/* Feature info popup */\r\n/**********************/\r\n\r\n.gp-feature-info-div {\r\n bottom: 17px ;\r\n position: relative;\r\n max-width: calc(100vw - 80px);\r\n padding: 10px;\r\n border-radius: 10px;\r\n font-size: 0.75em;\r\n font-family: \"Open Sans\", sans-serif;\r\n color: #002A50;\r\n background-color: #FFF;\r\n box-shadow: 0 0 5px #000;\r\n}\r\n\r\n.gp-feature-info-div::before {\r\n content: \"\";\r\n position: absolute;\r\n border-top: 15px solid #FFF;\r\n border-right: 14px solid transparent;\r\n border-left: 14px solid transparent;\r\n bottom: -15px;\r\n margin-left: -14px;\r\n left: 50%;\r\n}\r\n\r\n.gp-feature-info-div .closer {\r\n position: absolute;\r\n display: block;\r\n width: 30px;\r\n height: 30px;\r\n top: 0;\r\n right: 0;\r\n border: none;\r\n cursor: pointer;\r\n border-top-right-radius: 10px;\r\n border-bottom-right-radius: 10px;\r\n background-color: #FFF;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/close-emeraud.svg\");\r\n background-size: 14px 14px;\r\n background-position: center;\r\n}\r\n\r\n.gp-features-content-div {\r\n max-width: 420px;\r\n min-width: 260px;\r\n max-height: 340px;\r\n overflow: auto;\r\n}\r\n\r\n.gp-features-content-div h5,\r\n.gp-features-content-div h6,\r\n.gp-features-content-div p,\r\n.gp-features-content-div ul {\r\n margin: 0;\r\n}\r\n\r\n.gp-features-content-div ul {\r\n padding: 0;\r\n list-style-type: none;\r\n}\r\n\r\n.geoportail-popup-content h5,\r\n.geoportail-popup-content h6,\r\n.geoportail-popup-content p,\r\n.gp-att-name-div,\r\n.gp-att-description-div,\r\n.gp-att-others-div {\r\n padding: 0 10px;\r\n}\r\n\r\n.geoportail-popup-content h5:not(:last-child),\r\n.geoportail-popup-content h6:not(:last-child),\r\n.geoportail-popup-content p:not(:last-child),\r\n.gp-att-description-div:not(:last-child),\r\n.gp-att-others-div:not(:last-child) {\r\n margin-bottom: 15px;\r\n}\r\n\r\n.geoportail-popup-content h5:last-child,\r\n.geoportail-popup-content h6:last-child,\r\n.geoportail-popup-content p:last-child,\r\n.gp-att-description-div:last-child,\r\n.gp-att-others-div:last-child,\r\n.gp-att-name-div {\r\n margin-bottom: 10px;\r\n}\r\n\r\n.geoportail-popup-content h5:first-child,\r\n.geoportail-popup-content h6:first-child,\r\n.geoportail-popup-content p:first-child,\r\n.gp-att-name-div:first-child,\r\n.gp-att-description-div:first-child,\r\n.gp-att-others-div:first-child {\r\n margin-top: 10px;\r\n}\r\n\r\n.gp-att-name-div,\r\n.gp-features-content-div h5 {\r\n padding-right: 35px;\r\n font-weight: bold;\r\n font-size: 1.2em;\r\n text-transform: uppercase;\r\n color: #0B6BA7;\r\n}\r\n\r\n.gp-features-content-div h6 {\r\n font-size: 1.1em;\r\n}\r\n\r\n.gp-att-description-div:not(:last-child),\r\n.gp-att-others-div:not(:last-child) {\r\n padding-bottom: 10px;\r\n border-bottom: 1px dotted #666;\r\n}\r\n\r\n.gpf-radio-btn-group {\r\n display: flex;\r\n gap: 1em;\r\n}\r\n\r\n.gpf-btn-icon {\r\n caret-color: transparent;\r\n}\r\n","[id^=GPdrawingPanel-] {\r\n width: 240px;\r\n}\r\n\r\n.GPshowDrawingPicto {\r\n background-image: url(\"img/GPdrawingOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n.GPdrawingPanelClose {\r\n background-image: url(\"img/GPdrawingOpen.png\");\r\n}\r\n\r\n.GPdrawingLabel,\r\n.GPdrawingCoords {\r\n display: inline-block;\r\n line-height: 20px;\r\n}\r\n\r\n.GPdrawingLabel {\r\n width: 80px;\r\n font-weight: bold;\r\n}\r\n\r\n.GPdrawingCoords {\r\n width: 110px;\r\n}\r\n\r\n/* markers selector */\r\n.marker-input-radio {\r\n display : none ;\r\n}\r\n\r\ninput.marker-input-radio:checked + label {\r\n border: 1px solid red;\r\n}\r\n\r\n/* drawing tools */\r\n.drawing-tool {\r\n border-radius: 10px;\r\n cursor: pointer;\r\n display: block;\r\n height: 40px;\r\n width: 40px;\r\n background-image: url(\"img/drawing-tools.svg\");\r\n background-size: 720px 40px;\r\n background-color: #e9edf0;\r\n border: unset;\r\n}\r\n\r\n.drawing-tool-active {\r\n background-color: #002a50;\r\n}\r\n\r\n\r\n/*\r\n* Drawing tools\r\n*/\r\nbutton[id^=drawing-tool-point-] {\r\n background-position: 0 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-point-].drawing-tool-active {\r\n background-position: -40px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-line-].drawing-tool-active {\r\n background-position: -120px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-line-] {\r\n background-position: -80px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-holes-] {\r\n background-position: -640px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-holes-].drawing-tool-active {\r\n background-position: -680px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-polygon-] {\r\n background-position: -160px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-polygon-].drawing-tool-active {\r\n background-position: -200px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-text-] {\r\n background-position: -240px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-text-].drawing-tool-active {\r\n background-position: -280px 0;\r\n}\r\n\r\n/*\r\n* Editing tools\r\n*/\r\nbutton[id^=drawing-tool-edit-] {\r\n background-position: -320px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-edit-].drawing-tool-active {\r\n background-position: -360px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-display] {\r\n background-position: -400px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-display-].drawing-tool-active {\r\n background-position: -440px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-tooltip] {\r\n background-position: -480px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-tooltip-].drawing-tool-active {\r\n background-position: -520px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-remove] {\r\n background-position: -560px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-remove-].drawing-tool-active {\r\n background-position: -600px 0;\r\n}\r\n\r\n/* section d'export */\r\n\r\ndiv.drawing-tools-flex-display {\r\n justify-content: space-between;\r\n}\r\n\r\nbutton[id^=drawing-export-] {\r\n background-position: 2px 0;\r\n}\r\n\r\n.drawing-button {\r\n margin: auto;\r\n font-size: 0.7em;\r\n height: 30px;\r\n line-height: 30px;\r\n padding-left: 30px;\r\n padding-right: 15px;\r\n /* from site colors-chart */\r\n background-image: url(\"img/drawing-save.svg\");\r\n background-size: 30px 120px;\r\n}\r\n\r\n.tool-form-submit {\r\n border: medium none;\r\n border-radius: 20px;\r\n font-family: \"Helvetica Neue\",Arial,Helvetica,sans-serif;\r\n font-size: 0.9em;\r\n text-align: center;\r\n text-transform: uppercase;\r\n /* from site colors-chart */\r\n background-color: #00b798;\r\n color: #fff;\r\n}\r\n\r\n/*\r\n * popups\r\n */\r\n.gp-label-div,\r\n.gp-styling-div {\r\n position: relative;\r\n top: 17px;\r\n border-radius: 10px;\r\n font-size: 0.75em;\r\n background-color: #FFF;\r\n box-shadow: 0 0 5px #000;\r\n box-sizing: border-box;\r\n border: unset;\r\n}\r\n\r\n.gp-label-div::before,\r\n.gp-styling-div::before {\r\n content: \"\";\r\n position: absolute;\r\n border-bottom: 15px solid #FFF;\r\n border-right: 9px solid transparent;\r\n border-left: 10px solid transparent;\r\n top: -15px;\r\n margin-left: -10px;\r\n left: 50%;\r\n}\r\n\r\n.gp-textarea-att-label-style,\r\n.gp-input-label-style {\r\n border: none;\r\n}\r\n\r\n.gp-textarea-att-label-style {\r\n width: 240px;\r\n height: 80px;\r\n resize: none;\r\n}\r\n\r\n.gp-input-measure-style {\r\n width: 240px;\r\n font-size: 0.75em;\r\n background-color: #FFF;\r\n text-align: center;\r\n border-radius: 10px;\r\n}\r\n\r\n.gp-textarea-att-label-style {\r\n display: block;\r\n}\r\n\r\n.gp-label-div .closer {\r\n border-top-right-radius: 10px;\r\n background-color: #FFF;\r\n}\r\n\r\n.gp-input-label-style {\r\n width: 180px;\r\n}\r\n\r\n/* Label popups */\r\n\r\n.gp-label-div {\r\n padding: 10px;\r\n}\r\n\r\n/* Styling popup */\r\n\r\n.gp-styling-div {\r\n width: 340px;\r\n padding: 20px;\r\n padding-top: 50px;\r\n}\r\n\r\n.gp-styling-div::after {\r\n content: \"Modifier le style\";\r\n position: absolute;\r\n display: block;\r\n width: 280px;\r\n height: 30px;\r\n line-height: 30px;\r\n text-align: center;\r\n left: 30px;\r\n top: 0;\r\n border-bottom: 1px solid #BBB;\r\n font-variant: small-caps;\r\n font-size: 1.2em;\r\n font-weight: bold;\r\n}\r\n\r\n.gp-label-div .gp-styling-button:not([class*=\"closer\"]) {\r\n display: block;\r\n margin: auto;\r\n margin-top: 10px;\r\n}\r\n\r\n.gp-styling-button:not([class*=\"closer\"]) {\r\n display: inline-block;\r\n width: 140px;\r\n height: 24px;\r\n line-height: 24px;\r\n margin-top: 20px;\r\n border-radius: 12px;\r\n text-align: center;\r\n color: #FFF;\r\n background-color: #00B798;\r\n font-weight: bold;\r\n font-size: 0.9em;\r\n text-transform: uppercase;\r\n border: none;\r\n}\r\n\r\n.gp-styling-button:not([class*=\"closer\"]):hover {\r\n color: #00B798;\r\n background-color: #EEF2F5;\r\n}\r\n\r\n.gp-styling-button:not([class*=\"closer\"]) + .gp-styling-button:not([class*=\"closer\"]) {\r\n margin-left: 20px;\r\n}\r\n\r\n.gp-label-div .closer,\r\n.gp-styling-div .closer {\r\n cursor: pointer;\r\n position: absolute;\r\n display: block;\r\n width: 30px;\r\n height: 30px;\r\n top: 0;\r\n right: 0;\r\n border: none;\r\n background-color: transparent;\r\n background-repeat: no-repeat;\r\n background-image: url(\"../../img/close-emeraud.svg\");\r\n background-size: 14px 14px;\r\n background-position: center;\r\n}\r\n\r\n.gp-styling-option {\r\n font-size: 11px;\r\n position: relative;\r\n line-height: 30px;\r\n padding: 0 20px;\r\n}\r\n\r\n.gp-styling-option input {\r\n display: block;\r\n position: absolute;\r\n height: 20px;\r\n top: 6px;\r\n cursor: pointer;\r\n padding: 0;\r\n}\r\n\r\n.gp-styling-option input[type=\"checkbox\"] {\r\n height: 10px;\r\n right: 70px;\r\n padding: 0;\r\n border: none;\r\n background: none;\r\n}\r\n\r\n.gp-styling-option input[type=\"color\"] {\r\n width: 30px;\r\n right: 70px;\r\n padding: 0;\r\n border: none;\r\n background: none;\r\n}\r\n\r\n.gp-styling-option input[type=\"text\"] {\r\n width: 80px;\r\n right: 40px;\r\n padding: 0 5px;\r\n margin: none;\r\n background: none;\r\n border: 1px solid #808080;\r\n color: #0B6BA7;\r\n}\r\n\r\n\r\n/* Styling slider : general */\r\n.gp-styling-option input[type=\"range\"] {\r\n margin: 0;\r\n width: 80px;\r\n right: 40px;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]:focus {\r\n box-shadow: none;\r\n outline: none;\r\n}\r\n\r\n/* Styling slider : Chrome, Safari, Opera */\r\n\r\n.gp-styling-option input[type=\"range\"]::-webkit-slider-runnable-track {\r\n -webkit-appearance: none;\r\n height: 1px;\r\n background-color: #808080;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-webkit-slider-thumb:before {\r\n position: absolute;\r\n top: 0;\r\n right: 50%;\r\n left: -200px;\r\n height: 1px;\r\n pointer-events: none;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-webkit-slider-thumb {\r\n width: 13px;\r\n height: 13px;\r\n -webkit-appearance: none;\r\n background-color: #0B6BA7;\r\n border: none;\r\n border-radius: 50%;\r\n position: relative;\r\n top: -6px;\r\n}\r\n\r\n/* Styling slider : Firefox */\r\n\r\n.gp-styling-option input[type=\"range\"]::-moz-range-track {\r\n width: 70px;\r\n height: 1px;\r\n background-color: #808080;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-moz-range-thumb {\r\n width: 13px;\r\n height: 13px;\r\n background-color: #0B6BA7;\r\n border: none;\r\n border-radius: 50%;\r\n box-shadow: 0;\r\n position: relative;\r\n}\r\n\r\n/* Styling slider : IE */\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-track {\r\n border: 0;\r\n border-color: transparent;\r\n border-radius: 0;\r\n border-width: 0;\r\n color: transparent;\r\n height: 1px;\r\n width: 70px;\r\n background-color: #808080;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-fill-lower,\r\n.gp-styling-option input[type=\"range\"]::-ms-fill-upper {\r\n background: transparent;\r\n border-radius: 0;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-thumb {\r\n width: 13px;\r\n height: 13px;\r\n background-color: #0B6BA7;\r\n border: none;\r\n border-radius: 50%;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-tooltip {\r\n display: none;\r\n}\r\n\r\n\r\n.gp-styling-option .marker-input-radio {\r\n display: none;\r\n}\r\n\r\n.gp-styling-option .marker-label {\r\n display: inline-block;\r\n height: 32px;\r\n padding: 3px;\r\n margin-right: 5px;\r\n margin-bottom: 5px;\r\n cursor: pointer;\r\n}\r\n\r\n.gp-styling-option .marker-input-radio:checked + .marker-label {\r\n padding: 2px;\r\n background-color: rgba(0,183,152,0.5);\r\n border: 1px solid #002A50;\r\n}\r\n\r\n.gp-styling-option .marker-label img {\r\n height: 24px;\r\n}\r\n","/* Geoportal Attribution */\n\n.ol-attribution .gp-control-attribution-image {\n max-height: 30px;\n max-width: inherit;\n vertical-align: middle;\n}\n",".GPpanelHeader {\n padding: unset;\n}\n\n\n[id^=GPelevationPathPanelClose] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: -27px center;\n}\n\n[id^=GPelevationPathProfil] {\n height: 150px;\n width: inherit;\n}\n\n[id^=GPelevationPathProfil] > #profileElevationByDefault > svg {\n position: absolute;\n left: 10px;\n}\n\ndiv[id^=GPelevationPathInformationsContainer] {\n position: absolute;\n top: 32px;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(255, 255, 255, 0.9);\n border-radius: 4px;\n overflow: hidden;\n}\n\n/* CSS : Raw */\n\n#profileElevationRaw {\n resize: none;\n padding: unset;\n}\n\n/* CSS : default */\n\n#profileElevationByDefault {\n display:-webkit-flex;\n display:-webkit-box;\n display:-ms-flexbox;\n display:flex;\n -webkit-box-orient:vertical;\n -webkit-box-direction:normal;\n -webkit-flex-direction:column;\n -ms-flex-direction:column;\n flex-direction:column;\n height:100%;\n}\n\n.altiPathValue {\n font-weight: 700;\n fill: #5E5E5E;\n}\n\n.altiPathCoords {\n font-style: italic;\n fill: #5E5E5E;\n}\n\n\n/* CSS : D3 */\n\n.axis-d3 > text {\n fill: rgb(94, 94, 94);\n font-family: Verdana;\n font-size: 10px;\n opacity: 1;\n text-anchor: end;\n}\n\n.axis-d3 {\n fill: none;\n stroke: #5E5E5E;\n stroke-width: 1;\n shape-rendering: crispEdges;\n}\n\n.area-d3 {\n fill: #C77A04;\n stroke: #5E5E5E;\n stroke-width: 0;\n fill-opacity: 0.4;\n}\n\n.line-d3 {\n fill: none;\n stroke: #C77A04;\n stroke-width: 1px;\n}\n\n.grid-d3 .tick {\n stroke: lightgrey;\n opacity: 0.7;\n}\n\n.grid-d3 path {\n stroke-width: 0;\n}\n\n.grid-d3 .tick {\n stroke: lightgrey;\n opacity: 0.7;\n}\n\n.grid-d3 path {\n stroke-width: 0;\n}\n\n.overlay-d3 {\n fill: none;\n pointer-events: all;\n}\n\n.focusLine-d3 {\n fill: none;\n stroke: #C77A04;\n stroke-width: 0.5px;\n}\n\n.focusCircle-d3 {\n fill: #C77A04;\n}\n\ndiv.tooltip-d3 {\n position: inherit;;\n text-align: left;\n width: 80px;\n height: 45px;\n padding: 5px;\n font: 8px sans-serif;\n background: white;\n border: 0px;\n border-radius: 8px;\n pointer-events: none;\n}\n\n[id^=GPelevationPathPanel-] {\n width: 280px;\n}\n\n[id^=GPelevationPathPanelInfo] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: -75px center;\n}\n\nbutton[id^=\"GPshowElevationPathPicto-\"] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: 1px center;\n}\n/*\n@media (min-width:720px) and (min-height:720px) {\n\n[id^=GPelevationPathPanel] {\ntop: 15px;\nleft: 15px;\n}\n\n}\n\n@media (min-width:720px) and (min-height:520px) {\n\n[id^=GPelevationPathPanel] {\nwidth: 460px;\n}\n\n[id^=GPelevationPathProfil] {\nheight: 220px;\n}\n\n}\n\n@media (max-width:560px), (max-height:340px) {\n\n[id^=GPelevationPathPanel] {\ndisplay: none !important;\n}\n\n}\n*/\n","/* main container */\ndiv[id^=GPexportContainer-] {\n padding: 5px;\n}\n\ndiv[id^=GPexportContainer-] > input.GPsubmit {\n color: white;\n}\n\n/* bouton */\ninput[id^=GPexportButton-] {\n min-width: fit-content;\n padding-left: 25px;\n padding-right: 5px;\n background-image: url(\"img/GPexportSave.svg\");\n background-size: 25px 25px;\n background-repeat: no-repeat;\n}\n\n/* menu */\n.GPexportMenuHidden {\n visibility: hidden;\n}\n\n.GPexportMenuContainer {\n position: relative;\n display: inline-block;\n}\n\n.GPexportMenuContent {\n display: none;\n position: absolute;\n background-color: #f1f1f1;\n min-width: 80px;\n padding: 8px;\n border-radius: 10px;\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n z-index: 1;\n}\n\n.GPexportMenuContent a:hover { background-color: #f1f1f1; }\n\n.GPexportMenuContainer:hover .GPexportMenuContent { display: block; }\n\n/* menu des formats */\n.GPexportMenuContent .container {\n display: block;\n position: relative;\n padding-left: 15px;\n margin-bottom: 5px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n \n.GPexportMenuContent .container input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n}\n \n.GPexportMenuContent .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 12px;\n width: 12px;\n background-color: #eee;\n border-radius: 50%;\n}\n \n.GPexportMenuContent .container:hover input ~ .checkmark {\n background-color: #ccc;\n}\n\n.GPexportMenuContent .container input:checked ~ .checkmark {\n background-color: #366291;\n}\n \n.GPexportMenuContent .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n}\n\n.GPexportMenuContent .container input:checked ~ .checkmark:after {\n display: block;\n}\n \n.GPexportMenuContent .container .checkmark:after {\n top: 4px;\n left: 4px;\n width: 4px;\n height: 4px;\n border-radius: 50%;\n background: white;\n}","/* GET FEATURE INFO */\nbutton[id^=GPgetFeatureInfoPicto][aria-pressed=\"true\"] {\n background-repeat: no-repeat;\n background-position: 1px center;\n}\n\nbutton[id^=GPgetFeatureInfoPicto] {\n background-image: url(\"img/GPactivateGfi.png\");\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n background-position: -25px center;\n /* transition: border-radius 0.5s ease-out 0s, opacity 0.5s ease-out 0s; */\n}\n\n.GPcloseGetFeatureInfo {\n background-image: url(\"../../img/GPclose.png\");\n background-position: 0px center;\n}\n\n.GPgfiLayerButton {\n border: unset;\n background: unset;\n text-align: left;\n font-weight: bold;\n}\n\nbutton[aria-expanded=\"true\"].GPgfiLayerButton span.GPshowGfiLayerFeature {\n -webkit-transform: rotateX(180deg);\n transform: rotateX(180deg);\n}\n\n.GPshowGfiLayerFeature {\n display: inline-block;\n width: 28px;\n height: 28px;\n vertical-align: middle;\n background-image: url(\"img/GPgfiDetails.png\");\n background-position: -26px 0;\n}","/* ISOCHRON */\r\n[id^=GPisochronPanel-] {\r\n width: 280px;\r\n}\r\n\r\n.GPshowIsochronPicto {\r\n background-image: url(\"img/GPisochronOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GPisochronPanelClose {\r\n background-image: url(\"img/GPisochronOpen.png\");\r\n}\r\n\r\n/* Reset picto */\r\n\r\nbutton[id^=GPisochronReset] {\r\n opacity: 0.8;\r\n transition: opacity 0.2s ease-out;\r\n}\r\n\r\nbutton[id^=GPisochronReset]:hover {\r\n opacity: 1;\r\n}\r\n\r\n.GPisochronReset {\r\n background-color: #366291;\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -281px center;\r\n}\r\n\r\n/* Isochron form */\r\nform[id^=GPisochronForm] {\r\n padding: 15px;\r\n}\r\n\r\ndiv[id^=GPisochronChoice] {\r\n margin: auto;\r\n margin-top: 10px;\r\n margin-bottom: 5px;\r\n width: 160px;\r\n -webkit-justify-content: space-between;\r\n -webkit-box-pack: justify;\r\n -ms-flex-pack: justify;\r\n justify-content: space-between;\r\n}\r\n\r\np[id^=GPisochronPointLabelP], p[id^=GPisochronValueChronLabelP] {\r\n margin: 2px 0 5px 0;\r\n}\r\n\r\n.GProuteComputationLabel {\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GPisochronChoiceAlt input:checked + label + span {\r\n color: #366291;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron] + .GPisochronChoiceAltImg {\r\n background-position: -56px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron]:checked + .GPisochronChoiceAltImg {\r\n background-position: -84px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltDist] + .GPisochronChoiceAltImg {\r\n background-position: -112px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltDist]:checked + .GPisochronChoiceAltImg {\r\n background-position: -140px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron] {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n}\r\n\r\n.GPisochronOriginPointerImg,\r\n.GPisochronChoiceAltImg,\r\n.GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n font-size: 0;\r\n}\r\n\r\n.GPisoExclusionsOption {\r\n background-image: url(\"img/GPisochronCheck.png\");\r\n}\r\n\r\n.GPisochronOriginPointerImg {\r\n width: 28px;\r\n background-color: #F2F2F2;\r\n cursor: pointer;\r\n}\r\n\r\n.GPisochronChoiceAlt input {\r\n display: none;\r\n}\r\n\r\n.GPisochronChoiceAltImg {\r\n display: block;\r\n width: 28px;\r\n height: 28px;\r\n margin: auto;\r\n cursor: pointer;\r\n}\r\n\r\n.GPisochronChoiceAlt span {\r\n cursor: pointer;\r\n display:block;\r\n color: #999;\r\n}\r\n\r\n.GPisochronModeLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 5px;\r\n}\r\n\r\ninput[id^=GPisochronTransportCar] + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -168px 0;\r\n}\r\n\r\ninput[id^=GPisochronTransportCar]:checked + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -196px 0;\r\n}\r\n\r\ninput[id^=GPisochronTransportPedestrian] + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -224px 0;\r\n}\r\n\r\ninput[id^=GPisochronTransportPedestrian]:checked + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -252px 0;\r\n}\r\n\r\n.GPisochronTransportChoice input {\r\n display: none;\r\n}\r\n\r\ndiv[id^=GPisochronTransportChoice] > div {\r\n width: 100%;\r\n justify-content: center;\r\n}\r\n\r\ndiv[id^=GPisochronValueChron],\r\ndiv[id^=GPisochronValueDist] {\r\n width: 220px;\r\n margin: 5px auto;\r\n}\r\n\r\n.GPisochronTransportImg {\r\n display: inline-block;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n}\r\n\r\n.GPisochronTransportImg:first-of-type {\r\n margin-left: 18px;\r\n margin-right: 10px;\r\n}\r\n\r\nselect[id^=GPisochronDirectionSelect] {\r\n width: 80px;\r\n margin: 5px auto;\r\n}\r\n\r\n.GPshowIsoExclusionsPicto {\r\n top: unset;\r\n right: 0;\r\n transition: all 0.5s ease-out 0s;\r\n}\r\n\r\n.GPisoExclusionsLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 10px;\r\n font-weight: bold;\r\n line-height: 16px;\r\n}\r\n\r\n.GPisoExclusionsOptions {\r\n display: -webkit-flex;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-justify-content: space-around;\r\n -ms-flex-pack: distribute;\r\n justify-content: space-around;\r\n}\r\n\r\n.GPisoExclusionsOption {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n color: #A77;\r\n background-color: #FEE;\r\n padding-left: 28px;\r\n padding-right: 5px;\r\n border: 1px solid #A77;\r\n border-radius: 3px;\r\n cursor: pointer;\r\n}\r\n\r\ninput:checked + .GPisoExclusionsOption {\r\n background-color: #EFE;\r\n background-position: 0 -28px;\r\n color: #797;\r\n border: 1px solid #797;\r\n}\r\n\r\ninput[id^=GPisochronSubmit-] {\r\n width: fit-content;\r\n padding: 0 10px;\r\n}","\r\n/* Import form */\r\n[id^=\"GPimportPanel-\"] {\r\n width: 340px;\r\n}\r\n\r\n[id^=\"GPimportGetCapPanel-\"],\r\n[id^=\"GPimportMapBoxPanel-\"] {\r\n width: 340px;\r\n}\r\n\r\ndiv[id^=\"GPimportTypeLine-\"] {\r\n border-bottom: 1px solid #999;\r\n padding-bottom: 15px;\r\n margin-bottom: 15px;\r\n}\r\n\r\ndiv[id^=\"GPimportChoice-\"] {\r\n margin-top: 5px;\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GPshowImportPicto {\r\n background-image: url(\"img/GPimportOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GPimportPanelClose,\r\n.GPimportGetCapPanelClose,\r\n.GPimportMapBoxPanelClose {\r\n background-image: url(\"img/GPimportOpen.png\");\r\n}\r\n\r\n.GPimportPanelReturnPicto {\r\n background-color: #366291;\r\n background-image: url(\"../../img/GPreturn.png\");\r\n /* background-position: 3px center; */\r\n}\r\n\r\n.GPimportChoiceAlt input[type=\"radio\"] {\r\n display: none;\r\n}\r\n\r\n.GPimportChoiceAltTxt {\r\n display: block;\r\n line-height: 28px;\r\n color: #BBB;\r\n font-weight: bold;\r\n cursor: pointer;\r\n}\r\n\r\ninput[type=\"radio\"]:checked + .GPimportChoiceAltTxt {\r\n color: #366291;\r\n}\r\n\r\n/* Line inputs */\r\n\r\n.GPimportInputLine {\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n margin-bottom: 10px;\r\n}\r\n\r\n.GPimportInputLine > * {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n border: 1px solid #999;\r\n border-radius: 0;\r\n}\r\n\r\n.GPimportInputLine *:not(:last-child) {\r\n border-right:none;\r\n}\r\n\r\n.GPimportInputLine *:first-child {\r\n border-radius: 3px 0 0 3px;\r\n}\r\n\r\n.GPimportInputLine *:last-child {\r\n border-radius: 0 3px 3px 0;\r\n}\r\n\r\n.GPimportInputLine > *:not(input) {\r\n overflow: hidden;\r\n white-space: nowrap;\r\n -o-text-overflow: ellipsis;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n.GPimportInputLine > input {\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding: 0 5px;\r\n min-width: 0;\r\n}\r\n\r\n.GPimportInputLine > select {\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding-right: 7px;\r\n}\r\n\r\n.GPimportInputLine > label {\r\n background-color: #F2F2F2;\r\n color: #666;\r\n padding-left: 7px;\r\n padding-right: 9px;\r\n cursor: pointer;\r\n}\r\n\r\n\r\n\r\n.GPimportGetCapProposal {\r\n width: 100%;\r\n height: 28px;\r\n line-height: 16px;\r\n padding: 6px 10px;\r\n color: #5E5E5E;\r\n font-size: 1.0em;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n -o-text-overflow:ellipsis;\r\n text-overflow:ellipsis;\r\n cursor: pointer;\r\n list-style-type: none;\r\n}\r\n\r\n.GPimportGetCapRubriqueTitle,\r\n.GPimportMapBoxSourceTitle,\r\n.GPimportMapBoxListSourceTitle {\r\n color: #5E5E5E;\r\n}\r\n\r\n.GPimportGetCapRubrique,\r\n.GPimportGetCapListRubrique,\r\n.GPimportMapBoxSource,\r\n.GPimportMapBoxListSource {\r\n list-style-type: none;\r\n}\r\n\r\nli.GPimportGetCapRubrique:before,\r\nli.GPimportGetCapListRubrique:before,\r\nli.GPimportMapBoxSource:before,\r\nli.GPimportMapBoxListSource:before {\r\n\t/* content: \"→ \"; caractère UTF-8 */\r\n content: \"» \";\r\n}\r\n\r\n.GPimportGetCapProposal:hover,\r\n.GPimportGetCapRubrique:hover,\r\n.GPimportMapBoxSource {\r\n\r\n}\r\n\r\n.GPimportGetCapRubriqueTitle:hover,\r\n.GPimportMapBoxSourceTitle:hover {\r\n color: #000000;\r\n}\r\n\r\n.GPimportGetCapProposal:hover {\r\n color: #000000;\r\n}\r\n\r\n.GPimportMapBoxSourceVisibility,\r\n.GPimportMapBoxSourceStyle,\r\n.GPimportMapBoxSourceFilter,\r\n.GPimportMapBoxSourceScale {\r\n display: inline-block;\r\n margin-left: 15px;\r\n}\r\n\r\n.GPimportMapBoxJsonEdit {\r\n outline: 1px solid #ccc;\r\n padding: 5px;\r\n margin: 5px;\r\n}\r\n.GPimportMapBoxJsonEdithidden {\r\n display: none;\r\n}\r\n\r\n.gp-json-string { color: green; }\r\n.gp-json-number { color: darkorange; }\r\n.gp-json-boolean { color: blue; }\r\n.gp-json-null { color: magenta; }\r\n.gp-json-key { color: red; }\r\n\r\n.GPimportMapBoxSourceVisibilityInput {\r\n display: block !important;\r\n}\r\n\r\n.GPimportMapBoxSourceVisibilityLabel {\r\n\r\n}\r\n\r\n.GPimportMapBoxSourceScale {\r\n}\r\n\r\n[id^=\"GPimportPanelReturnPicto-\"] {\r\n position: absolute;\r\n width: 26px;\r\n height: 26px;\r\n border-radius: 3px;\r\n opacity: 1;\r\n background-position: 0 0;\r\n cursor: pointer;\r\n}","/* LAYER SWITCHER */\r\n\r\n.GPlayerSwitcher_layer {\r\n background-color: #FFF;\r\n}\r\n\r\ndiv[id^=GPlayerSwitcher-] {\r\n height: 32px;\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] + dialog[id^=GPlayersList] {\r\n width: 190px;\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto] {\r\n /* transition: opacity 0.5s ease-out 0s, box-shadow 0.5s ease-out 0s, border 0.5s ease-out 0s, border-radius 0.5s ease-out 0s; */\r\n background-position: -2px center;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/GPshowLayersList.png\");\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] {\r\n border-top-right-radius: 0;\r\n border-top-left-radius: 0;\r\n background-position: -35px center;\r\n /* transition: border-radius 0.5s ease-out 0s, opacity 0.5s ease-out 0s; */\r\n}\r\n\r\n/* Layers list */\r\n.GPpanelBody {\r\n overflow: auto;\r\n max-height: 200px;\r\n}\r\n\r\nbutton[id^=GPlayerInfoClose] {\r\n background-position: -2px center;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/GPlayerInfoClose.png\");\r\n background-color: unset;\r\n}\r\nbutton[id^=GPlayersPanelClose] {\r\n background-position: -2px center;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/GPlayerClose.png\");\r\n}\r\n\r\n.GPpanelIcon {\r\n background-image: url(\"img/layers.svg\");\r\n background-repeat: no-repeat;\r\n background-size: auto auto;\r\n background-position: center center;\r\n}\r\n/* Layer info panel */\r\n\r\n[id^=GPlayerInfoPanel] {\r\n right: 190px;\r\n}\r\n\r\ndiv[id^=GPlayerInfoTitle] {\r\n color: #366291;\r\n border-bottom: 1px solid #366291;\r\n}\r\n\r\n\r\n.GPlayerBasicTools,\r\n.GPlayerAdvancedTools {\r\n position: relative;\r\n width: 100%;\r\n height: 28px;\r\n}\r\n\r\n.GPlayerExtent,\r\n.GPlayerVisibility,\r\n.GPlayerInfo,\r\n.GPlayerInfoOpened,\r\n.GPlayerRemove {\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlayerExtent,\r\n.GPlayerVisibility,\r\n.GPlayerName,\r\n.GPlayerInfo,\r\n.GPlayerInfoOpened,\r\n.GPlayerRemove,\r\n.GPlayerOpacity,\r\n.GPlayerOpacityValue {\r\n position: absolute;\r\n top: 0;\r\n}\r\n\r\n.GPghostLayer {\r\n opacity: 0;\r\n}\r\n\r\n/* Layer basic tools */\r\n\r\n.GPlayerBasicTools {\r\n background-color: #FFF;\r\n}\r\n\r\n\r\n/* Layer advanced tools */\r\n\r\n.GPlayerExtent,\r\n.GPlayerVisibility,\r\n.GPshowLayerAdvancedTools,\r\n.GPlayerInfo,\r\n.GPlayerInfoOpened,\r\n.GPlayerRemove {\r\n background-image: url(\"img/GPlayerTools.png\");\r\n}\r\n\r\n/* Opacity slider : Chrome, Safari, Opera */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-runnable-track {\r\n background: url(\"img/GPopacitySlider.png\");\r\n}\r\n\r\n/* Opacity slider : Firefox */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-moz-range-track {\r\n background: url(\"img/GPopacitySlider.png\");\r\n}\r\n\r\n/* Opacity slider : IE */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-track {\r\n background: url(\"img/GPopacitySlider.png\");\r\n}\r\n\r\n\r\ndiv[id^=GPlayerInfoQuicklook] {\r\n background-image: url(\"img/GPlayerInfo.png\");\r\n}\r\n\r\ndiv[id^=GPlayerInfoClose] {\r\n background-image: url(\"img/GPlayerInfoClose.png\");\r\n}\r\n\r\n.GPlayerInfoLink,\r\n.GPlayerInfoPopup {\r\n background-image: url(\"img/GPlayerInfo.png\");\r\n}\r\n\r\nbutton[id^=GPinfo_ID_],\r\nbutton[id^=GPremove_ID_],\r\nbutton[id^=GPvisibilityPicto_ID_] {\r\n border: none;\r\n background-color: transparent;\r\n}\r\n\r\nbutton[id^=GPvisibilityPicto_ID_][aria-pressed=\"false\"] {\r\n left: 0;\r\n background-position: -28px 0;\r\n}\r\n\r\nbutton[id^=GPvisibilityPicto_ID_][aria-pressed=\"true\"] {\r\n background-position: 0 0;\r\n}\r\n\r\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools {\r\n max-height: 28px;\r\n}\r\n\r\n.GPshowLayerAdvancedTools {\r\n top: 0;\r\n right: 0;\r\n background-position: -112px 0;\r\n}\r\n\r\n.GPlayerInfo {\r\n left: 0;\r\n background-position: -55px 0;\r\n}\r\n\r\n.GPlayerInfoOpened {\r\n left: 0;\r\n background-position: -83px 0;\r\n}\r\n\r\n.GPlayerOpacity {\r\n left: 28px;\r\n width: calc(100% - 100px);\r\n height: 28px;\r\n padding-left: 8px;\r\n}\r\n\r\n.GPlayerOpacityValue {\r\n width: 32px;\r\n left: calc(100% - 60px);\r\n line-height: 28px;\r\n font-size: 10px;\r\n font-style: italic;\r\n cursor: default;\r\n}\r\n\r\n.GPlayerRemove {\r\n right: 0;\r\n background-position: -140px 0;\r\n}\r\n\r\n/* Opacity slider : general */\r\n\r\n.GPlayerOpacity input {\r\n -webkit-appearance: none;\r\n -moz-appearance: none;\r\n background: none;\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n margin: 0;\r\n padding: 0;\r\n overflow: hidden;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]:focus {\r\n box-shadow: none;\r\n outline: none;\r\n}\r\n\r\n/* Opacity slider : Chrome, Safari, Opera */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-runnable-track {\r\n -webkit-appearance: none;\r\n height: 3px;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-thumb:before {\r\n position: absolute;\r\n top: 0;\r\n right: 50%;\r\n left: -200px;\r\n height: 3px;\r\n pointer-events: none;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-thumb {\r\n width: 9px;\r\n height: 17px;\r\n -webkit-appearance: none;\r\n border: 2px solid #FFF;\r\n background-color: #505050;\r\n position: relative;\r\n top: -7px;\r\n}\r\n\r\n/* Opacity slider : Firefox */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-moz-range-track {\r\n width: 80px;\r\n height: 3px;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-moz-range-thumb {\r\n width: 5px;\r\n height: 13px;\r\n border: 2px solid #FFF;\r\n border-radius: 0;\r\n box-shadow: 0;\r\n background-color: #505050;\r\n position: relative;\r\n}\r\n\r\n/* Opacity slider : IE */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-track {\r\n border: 0;\r\n border-color: transparent;\r\n border-radius: 0;\r\n border-width: 0;\r\n color: transparent;\r\n height: 3px;\r\n width: 80px;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-fill-lower,\r\n.GPlayerOpacity input[type=\"range\"]::-ms-fill-upper {\r\n background: transparent;\r\n border-radius: 0;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-thumb {\r\n width: 5px;\r\n height: 13px;\r\n border: 2px solid #FFF;\r\n background-color: #505050;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-tooltip {\r\n display: none;\r\n}\r\n\r\n/* Layer info panel */\r\n\r\n[id^=GPlayerInfoPanel] {\r\n position: absolute;\r\n top: 0;\r\n overflow-y: hidden;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n}\r\n\r\n.GPlayerInfoPanelOpened {\r\n display: block;\r\n}\r\n\r\n.GPlayerInfoPanelClosed {\r\n display: none;\r\n}\r\n\r\n/* div[id^=GPlayerInfoContent] {\r\n position: relative;\r\n width: 280px;\r\n max-height: 200px;\r\n overflow-y: auto;\r\n padding-left: 10px;\r\n padding-right: 10px;\r\n} */\r\n\r\ndiv[id^=GPlayerInfoTitle] {\r\n width: calc(100% - 52px);\r\n margin: auto;\r\n margin-bottom: 10px;\r\n padding-bottom: 5px;\r\n text-align: center;\r\n font-size: 1.1em;\r\n font-weight: bold;\r\n}\r\n\r\ndiv[id^=GPlayerInfoQuicklook] {\r\n position: absolute;\r\n top: -2px;\r\n left: 10px;\r\n width: 20px;\r\n height: 20px;\r\n cursor: pointer;\r\n}\r\n\r\ndiv[id^=GPlayerInfoClose] {\r\n position: absolute;\r\n top: -8px;\r\n right: 10px;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n}\r\n\r\ndiv[id^=GPlayerInfoDescription] {\r\n font-size: 0.9em;\r\n}\r\n\r\ndiv[id^=GPlayerInfoLegend] {\r\n\r\n}\r\n\r\ndiv[id^=GPlayerInfoMetadata] {\r\n\r\n}\r\n\r\n.GPlayerInfoSubtitle {\r\n padding-left: 35px;\r\n font-weight: bold;\r\n margin-top: 10px;\r\n margin-bottom: 4px;\r\n}\r\n\r\n.GPlayerInfoLink,\r\n.GPlayerInfoPopup {\r\n line-height: 20px;\r\n padding-left: 23px;\r\n white-space: nowrap;\r\n overflow-x: hidden;\r\n text-overflow: ellipsis;\r\n color: #999999;\r\n background-repeat: no-repeat;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlayerInfoLink {\r\n background-position: 0 -20px;\r\n}\r\n\r\n.GPlayerInfoLink:hover,\r\n.GPlayerInfoPopup:hover {\r\n color: #333;\r\n}\r\n\r\n.GPlayerInfoLink a,\r\n.GPlayerInfoLink a:visited\r\n.GPlayerInfoLink a:focus\r\n.GPlayerInfoLink a:hover {\r\n text-decoration: none;\r\n color: inherit;\r\n}\r\n\r\n\r\n.GPlayerName {\r\n left: 28px;\r\n width: calc(100% - 56px);\r\n line-height: 28px;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n padding-left: 4px;\r\n cursor: move;\r\n}\r\n\r\n.outOfRange .GPlayerName {\r\n color: #AAA;\r\n}\r\n\r\ndiv[id^=GPlayerInfoContent] {\r\n width: 280px;\r\n}","/* Location */\n[id*=\"GPlocationOriginPointer\"] {\n background-image: url(\"img/GPlocationOptions.png\");\n background-repeat: no-repeat;\n}\n\n[id^=GPlocationStageRemove],\n[id^=GPlocationStageAdd] {\n background-image: url(\"img/GPlocationOptions.png\");\n}\n\n[id^=GPlocationStageRemove],\n[id^=GPlocationStageAdd] {\n width: 28px;\n height: 28px;\n border: none;\n cursor: pointer;\n}\n\n.GPlocationOpen {\n background-color: unset;\n}\n.GPlocationOriginLabel {}\n.GPlocationStageRemove {\n background-position: -84px center;\n}\n.GPlocationStageAdd {\n background-position: -56px center;\n}\n\n[id*=\"GPlocationOriginPointer\"] + .GPlocationOriginPointerImg {\n background-position: -1px center;\n}\n\n[id*=\"GPlocationOriginPointer\"]:checked + .GPlocationOriginPointerImg {\n background-position: -29px center;\n}\n\n.GPlocationStageFlexInput {\n max-height: 28px;\n opacity: 1;\n}\n\nbutton.GPlocationOriginPointerImg[id*=\"GPlocationOriginPointerImg\"] {\n width: 28px;\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n border-right: 1px solid #999;\n}\n\n.GPlocationStageFlexInput {\n margin-bottom: 5px;\n}\n\ndiv[id^=GPlocationAutoCompleteList] {\n\n}\n","/* MEASURELENGTH POSITION */\r\n\r\n\r\n/* Showing/hiding measureLength position panel */\r\n\r\nbutton[id^=\"GPshowMeasureAreaPicto-\"] {\r\n background-image: url(\"img/GPmeasuresOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: -78px center;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAreaPicto-\"][aria-pressed=\"false\"] {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAreaPicto-\"][aria-pressed=\"true\"] {\r\n background-color: rgba(0,60,136,0.7);\r\n}","/* MEASURELENGTH POSITION */\r\n\r\n/* Showing/hiding drawing panel */\r\n\r\nbutton[id^=\"GPshowMeasureLengthPicto-\"] {\r\n background-image: url(\"img/GPmeasuresOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: -24px center;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureLengthPicto-\"][aria-pressed=\"false\"] {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureLengthPicto-\"][aria-pressed=\"true\"] {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n","/* MEASURELENGTH POSITION */\r\n\r\n/* Showing/hiding measureLength position panel */\r\n\r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"] {\r\n background-image: url(\"img/GPmeasuresOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 2px center;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"][aria-pressed=\"false\"] {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"][aria-pressed=\"true\"] {\r\n background-color: rgba(0,60,136,0.7);\r\n}","/* MEASURE TOOL */\n\n.GPmeasureTooltip {\n position: relative;\n background: rgba(0, 0, 0, 0.5);\n border-radius: 4px;\n color: white;\n padding: 4px 8px;\n white-space: nowrap;\n}\n\n.GPmeasureTooltip-measure {\n font-weight: bold;\n}\n\n.GPmeasureTooltip-info {\n font-size: 0.75em;\n text-align: center;\n}\n\n.GPmeasureTooltip-static {\n background-color: #ffcc33;\n color: black;\n border: 1px solid white;\n}\n\n.GPmeasureTooltip-hidden {\n display: none;\n}\n\n.GPmeasureTooltip-measure::before,\n.GPmeasureTooltip-info::before,\n.GPmeasureTooltip-static::before {\n border-top: 6px solid rgba(0, 0, 0, 0.5);\n border-right: 6px solid transparent;\n border-left: 6px solid transparent;\n content: \"\";\n position: absolute;\n bottom: -6px;\n margin-left: -7px;\n left: 50%;\n}\n\n.GPmeasureTooltip-static::before {\n border-top-color: #ffcc33;\n}\n","\n/* General panels */\n[id^=GPmousePositionPanel-] {\n width: 280px;\n}\n\nbutton[id^=\"GPshowMousePositionPicto-\"] {\n background-image: url(\"img/GPmousePositionOpen.png\");\n background-repeat: no-repeat;\n background-position: 1px center;\n}\n\n.GPmousePositionEditTool {\n background-image: url(\"img/GPmousePositionEditCoordinates.png\");\n}\n\nbutton[id^=GPmousePositionPanelClose] {\n background-image: url(\"img/GPmousePositionOpen.png\");\n}\n\n/* Map center localisation */\n\n.GPmousePositionLabel,\n.GPmousePositionCoords {\n display: inline-block;\n line-height: 20px;\n}\n\n.GPmousePositionLabel {\n width: 100px;\n font-weight: bold;\n}\n\n.GPmousePositionCoords {\n width: 110px;\n}\n\n/* Showing settings */\n\n.GPshowMousePositionSettingsPicto {\n bottom: 5px;\n right: 0;\n transition: all 0.5s ease-out 0s;\n}\n\n.GPmousePositionSettingsLabel {\n display: block;\n margin: auto;\n text-align: center;\n font-weight: bold;\n line-height: 16px;\n}\n\n.GPmousePositionSettingsSelect {\n width: 180px;\n margin-top: 5px;\n margin-inline: auto;\n}\n\n/* sexagesimal coordinates */\n\n.GPSexagesimal, .GPSexagesimalsec {\n margin:0;\n border: 1px solid rgb(204, 204, 204);\n border-radius: 4px;\n}\n\ninput:read-only.GPSexagesimal, input:read-only.GPSexagesimalsec {\n text-align: right;\n}\n\n\n.GPmousePositionSexagesimalLabel {\n font-size: 1.2em;\n vertical-align: middle;\n padding: 0;\n}\n\n/* direction N/S ou E/O */\nselect.GPmousePositionDirection {\n border: 1px solid #999;\n margin-left: 2px;\n}\n\nselect.GPmousePositionDirection:disabled{\n border: none;\n background: transparent;\n color: black;\n /*For FireFox*/\n -webkit-appearance: none;\n /*For Chrome*/\n -moz-appearance: none;\n}\n\n/*For IE10+*/\nselect.GPmousePositionDirection:disabled::-ms-expand {\n display: none;\n}\nselect.GPmousePositionDirection:disabled::-ms-value {\n color: black;\n}\n\n.GPmousePositionUnits,\n.GPmousePositionAltitudeUnits {\n margin-left: 5px;\n}\n\n/* EDIT COORDINATES TOOLS */\n.GPmousePositionPanelEditTools {\n position: absolute;\n top: 20px;\n right: 5px;\n}\n\n.GPmousePositionEditTool {\n width: 18px;\n height: 18px;\n display: inline-block;\n cursor: pointer;\n}\n","/* REVERSE GEOCODING */\r\n[id^=\"GPreverseGeocodingPanel-\"] {\r\n width: 280px;\r\n}\r\n\r\n.GPshowReverseGeocodingPicto {\r\n background-image: url(\"img/GPreverseGeocodingOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GPreverseGeocodingPanelClose {\r\n background-image: url(\"img/GPreverseGeocodingOpen.png\");\r\n}\r\n\r\n.GPreverseGeocodingReturnPicto {\r\n background-image: url(\"../../img/GPreturn.png\");\r\n background-repeat: no-repeat;\r\n background-position: 0 center;\r\n}\r\n\r\n/* Results panel */\r\n\r\n.GPlocationHighlight {\r\n background-color: rgba(255,200,0,0.25);\r\n color: #222;\r\n}","/* ROUTE */\r\n[id^=GProutePanel-] {\r\n width: 320px;\r\n}\r\n\r\n.GPshowRoutePicto {\r\n background-image: url(\"img/GProuteOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GProutePanelClose {\r\n background-image: url(\"img/GProuteOpen.png\");\r\n}\r\n\r\n/* Route form */\r\nform[id^=GProuteForm] {\r\n padding: 15px;\r\n}\r\n\r\n.GProuteStageFlexInput {\r\n max-height: 28px;\r\n opacity: 1;\r\n}\r\n\r\n.GProuteStageFlexInputHidden {\r\n max-height: 0;\r\n opacity: 0;\r\n overflow: hidden;\r\n}\r\n\r\n.GProutePointLabelP {\r\n margin: 2px 0 5px 0;\r\n}\r\n\r\n.GProuteComputationLabel {\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GProuteOriginPointerImg,\r\n.GProuteStageRemove,\r\ndiv[id^=GProuteStageAdd],\r\n.GProuteTransportImg {\r\n background-image: url(\"img/GProuteOptions.png\");\r\n font-size: 0;\r\n}\r\n\r\n.GProuteFormMini {\r\n max-height: 58px;\r\n}\r\n\r\n.GProuteExclusionsOption {\r\n background-image: url(\"img/GProuteCheck.png\");\r\n}\r\n\r\n.GProuteModeLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GProuteTransportImg {\r\n display: inline-block;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n content-visibility: hidden;\r\n}\r\n\r\n.GProuteTransportImg:first-of-type {\r\n margin-left: 18px;\r\n margin-right: 10px;\r\n}\r\n\r\ninput[id^=GProuteTransportCar] + .GProuteTransportImg {\r\n background-position: -112px 0;\r\n}\r\n\r\ninput[id^=GProuteTransportCar]:checked + .GProuteTransportImg {\r\n background-position: -140px 0;\r\n}\r\n\r\ninput[id^=GProuteTransportPedestrian] + .GProuteTransportImg {\r\n background-position: -168px 0;\r\n}\r\n\r\ninput[id^=GProuteTransportPedestrian]:checked + .GProuteTransportImg {\r\n background-position: -196px 0;\r\n}\r\n\r\ndiv[id^=GProuteTransportChoice] input {\r\n display: none;\r\n}\r\n\r\ndiv[id^=GProuteTransportChoice] .gpf-radio-btn-group {\r\n justify-content: center;\r\n}\r\n\r\nselect[id^=GProuteComputationSelect] {\r\n width: 100px;\r\n}\r\n/* Result panel */\r\n\r\n.GProuteResultsDetailsInstructionHighlight {\r\n background-color: rgba(255,200,0,0.25);\r\n color: #222;\r\n}\r\n\r\n.GProuteResultStage {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n}\r\n\r\n\r\n.GProuteResultStageLabel,\r\n.GProuteResultStageValue,\r\n.GProuteResultsValueLabel {\r\n display: inline-block;\r\n line-height: 18px;\r\n}\r\n\r\n.GProuteResultStageLabel,\r\n.GProuteResultsValueLabel {\r\n color: #666;\r\n}\r\n\r\n.GProuteResultStageLabel {\r\n width: 60px;\r\n}\r\n\r\n.GProuteResultsValueLabel {\r\n width: 65px;\r\n}\r\n\r\n.GProuteResultStageValue {\r\n -webkit-flex: 1;\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n overflow-x: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n/* Exclusions */\r\n\r\n\r\n.GPshowRouteExclusionsPicto {\r\n top: unset;\r\n right: 0;\r\n transition: all 0.3s ease-out 0s;\r\n transform: translateY(-100%);\r\n}\r\n\r\n.GProuteExclusionsLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 8px;\r\n margin-top: 8px;\r\n font-weight: bold;\r\n line-height: 16px;\r\n}\r\n\r\n.GProuteExclusionsOptions {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n -webkit-justify-content: space-around;\r\n -ms-flex-pack: distribute;\r\n justify-content: space-around;\r\n}\r\n\r\n.GProuteExclusionsOption {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n color: #A77;\r\n background-color: #FEE;\r\n padding-left: 28px;\r\n padding-right: 5px;\r\n border: 1px solid #A77;\r\n border-radius: 3px;\r\n cursor: pointer;\r\n}\r\n\r\ninput:checked + .GProuteExclusionsOption {\r\n background-color: #EFE;\r\n background-position: 0 -28px;\r\n color: #797;\r\n border: 1px solid #797;\r\n}\r\n\r\n/* Reset picto */\r\n\r\nbutton[id^=GProuteReset] {\r\n /* background-color: #366291; */\r\n background-image: url(\"img/GProuteOptions.png\");\r\n background-position: -224px center;\r\n opacity: 0.8;\r\n transition: opacity 0.2s ease-out;\r\n}\r\n\r\n/* Results popup */\r\n\r\n.gp-features-content-div {\r\n /* min-width: 240px; */\r\n}\r\n\r\n/* Results details header */\r\ndiv[id^=GProuteResultsValueDist],\r\ndiv[id^=GProuteResultsValueTime] {\r\n color: #366291;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails] + label:hover,\r\ninput[id^=GProuteResultsShowDetails] + label + label:hover {\r\n color: #366291;\r\n}\r\n\r\ndiv[id^=GProuteResultsStages] {\r\n margin-bottom: 15px;\r\n}\r\n\r\ndiv[id^=GProuteResultsValueDist],\r\ndiv[id^=GProuteResultsValueTime] {\r\n display: inline-block;\r\n line-height: 18px;\r\n}\r\n\r\ndiv[id^=GProuteResultsValueDist],\r\ndiv[id^=GProuteResultsValueTime] {\r\n width: 80px;\r\n font-weight: bold;\r\n}\r\n\r\nselect[id^=GProuteResultsComputationSelect] {\r\n width: 100px;\r\n}\r\n\r\ndiv[id^=GProuteResultsNew] {\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 3px;\r\n opacity: 0.8;\r\n background-position: -224px 0;\r\n transition: opacity 0.2s ease-out;\r\n cursor: pointer;\r\n background-color: #366291;\r\n background-image: url(\"img/GProuteOptions.png\");\r\n position: initial;\r\n}\r\n\r\n.GPfakeBorder {\r\n display: inline-block;\r\n height: 14px;\r\n width: 60px;\r\n border-bottom: 1px solid #999;\r\n}\r\n\r\n.GPfakeBorderLeft {\r\n margin-left:15px;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails] + label,\r\ninput[id^=GProuteResultsShowDetails] + label + label {\r\n width: 130px;\r\n line-height: 28px;\r\n vertical-align: top;\r\n text-align: center;\r\n font-weight: bold;\r\n cursor: pointer;\r\n transition: color 0.2s ease-out;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails] + label,\r\ninput[id^=GProuteResultsShowDetails]:checked + label + label {\r\n display: inline-block;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails]:checked + label,\r\ninput[id^=GProuteResultsShowDetails] + label + label {\r\n display: none;\r\n}\r\n\r\ndiv:has(input[id^=GProuteResultsShowDetails]) + div[id^=GProuteResultsDetails] {\r\n max-height: 0;\r\n opacity: 0;\r\n}\r\n\r\ndiv:has(input[id^=GProuteResultsShowDetails]:checked) + div[id^=GProuteResultsDetails] {\r\n max-height: 200px;\r\n opacity: 1;\r\n}\r\n\r\ndiv[id^=GProuteResultsDetails] {\r\n overflow-y: auto;\r\n transition: max-height 0.5s ease-in-out 0.25s, opacity 0.5s ease-in-out 0.25s;\r\n}\r\n\r\n.GProuteResultsDetailsNumber,\r\n.GProuteResultsDetailsInstruction {\r\n display: inline-block;\r\n margin-top: 4px;\r\n line-height: 16px;\r\n color: #666;\r\n}\r\n\r\n.GProuteResultsDetailsNumber {\r\n font-weight: bold;\r\n width: 22px;\r\n text-align: right;\r\n vertical-align: top;\r\n}\r\n\r\n.GProuteResultsDetailsInstruction {\r\n width: calc(100% - 30px);\r\n padding-left: 5px;\r\n}\r\n\r\ninput[id^=GProuteSubmit-] {\r\n width: fit-content;\r\n padding: 0 10px;\r\n}","/* SEARCH ENGINE */\r\n\r\n[id^=\"GPsearchEngine-\"] {\r\n flex-direction: row;\r\n align-items: center;\r\n}\r\n\r\n.GPshowSearchEnginePicto {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 0 center;\r\n}\r\n\r\n.GPsearchRadioContainer {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -26px center;\r\n background-repeat: no-repeat;\r\n transition: border-radius 0.5s ease-out 0s;\r\n color: transparent;\r\n overflow: hidden;\r\n position: relative;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n width: 32px;\r\n height: 32px;\r\n padding: 2px;\r\n background-color: rgba(0,60,136,0.5);\r\n border-radius: 4px;\r\n border: 2px solid rgba(255, 255, 255, 0.4);\r\n}\r\n\r\n.GPbuttonsContainer {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.GPsearchRadioContainer:hover {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n\r\n.GPshowAdvancedSearch {\r\n background-color: #fff0;\r\n}\r\n\r\n.GPshowAdvancedSearch:hover {\r\n background-color: #fff0;\r\n}\r\n\r\n.GPshowGeolocate {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -102px center;\r\n background-repeat: no-repeat;\r\n transition: border-radius 0.5s ease-out 0s;\r\n margin-right: 5px;\r\n}\r\n\r\n.GPshowSearchByCoordinate {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -76px center;\r\n background-repeat: no-repeat;\r\n transition: border-radius 0.5s ease-out 0s;\r\n}\r\n\r\n.GPsearchInputReset {\r\n background-image: url(\"img/GPsearchEngineClose.png\");\r\n background-position: 0 center;\r\n}\r\n\r\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] {\r\n max-width: 0px;\r\n border: none;\r\n}\r\n\r\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] {\r\n border-top-right-radius: 0;\r\n}\r\n\r\nbutton[id^=GPsearchInputReset] {\r\n border-top-right-radius: 5px;\r\n border-bottom-right-radius: 5px;\r\n width: 32px;\r\n height: 32px;\r\n}\r\n\r\nbutton[id^=GPcoordinateSearchClose],\r\nbutton[id^=GPgeocodeResultsClose],\r\nbutton[id^=GPadvancedSearchClose] {\r\n top: 0;\r\n right: 0;\r\n width: 30px;\r\n height: 32px;\r\n}\r\n\r\nbutton[id^=GPcoordinateSearchClose],\r\nbutton[id^=GPgeocodeResultsClose] {\r\n background-position: 0 0;\r\n}\r\n\r\nbutton[id^=GPadvancedSearchClose] {\r\n background-repeat: no-repeat;\r\n}\r\n\r\nbutton[id^=GPcoordinateSearchClose],\r\nbutton[id^=\"GPgeocodeResultsClose\"] {\r\n background-image: url(\"img/GPsearchEngineClose.png\");\r\n}\r\n\r\nbutton[id^=\"GPadvancedSearchClose\"] {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -50px 3px;\r\n}\r\n\r\nform[id^=GPsearchInput-] {\r\n width: 280px;\r\n}\r\n\r\nform[id^=GPsearchInput-] input {\r\n display: block;\r\n width: 100%;\r\n /* height: 100%; */\r\n border: 1px solid #999;\r\n border-top-right-radius: 5px;\r\n border-bottom-right-radius: 5px;\r\n padding: 0;\r\n padding-right: 30px;\r\n padding-left: 5px;\r\n color: #333;\r\n font-size: 1.0em;\r\n}\r\n\r\nform[id^=GPsearchInput-] input:disabled {\r\n background-color: #DDD;\r\n color: #999;\r\n}\r\n\r\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] {\r\n max-width: 280px;\r\n}\r\n\r\n.GPsearchInputText {\r\n height: 32px;\r\n}\r\n\r\ndialog[id^=GPcoordinateSearchPanel],\r\ndialog[id^=GPadvancedSearchPanel] {\r\n width: 310px;\r\n position: absolute;\r\n top: 35px;\r\n margin-left: 33px;\r\n}\r\n\r\n/* Autocomplete list / geocode results */\r\n\r\n[id^=\"GPautocompleteResults-\"] {\r\n box-shadow: 0 0 6px #000;\r\n}\r\n\r\ndiv[id^=GPautoCompleteList],\r\ndialog[id^=GPgeocodeResultsList] {\r\n width: 280px;\r\n position: absolute;\r\n max-height: 140px;\r\n background-color: var(--background-default-grey);\r\n}\r\n\r\ndiv[id^=GPautoCompleteList] {\r\n top: 35px;\r\n}\r\n\r\ndialog[id^=GPgeocodeResultsList] {\r\n position: absolute;\r\n top: 35px;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n}\r\n\r\ndiv[id^=GPgeocodeResults-] {\r\n width: 100%;\r\n position: relative;\r\n background-color: #FFF;\r\n max-height: 140px;\r\n overflow-y: auto;\r\n}\r\n\r\n.GPcoordinateSearchLabel,\r\n.GPadvancedSearchCodeLabel,\r\n.GPadvancedSearchFilterLabel {\r\n max-width: 105px;\r\n}\r\n\r\n.GPcoordinateSearchSystemsSelect,\r\n.GPcoordinateSearchSystemsLabel,\r\n.GPadvancedSearchCodeLabel,\r\n.GPadvancedSearchCode,\r\n div[id^=GPadvancedSearchFilters] {\r\n margin-top: 15px;\r\n}\r\n\r\n.GPcoordinateSearchSystemsLabel,\r\n.GPcoordinateSearchSystemsSelect,\r\n.GPcoordinateSearchUnitsLabel,\r\n.GPcoordinateSearchUnitsSelect,\r\n.GPcoordinateSearchLabel,\r\n.GPcoordinateSearchInput,\r\n.GPadvancedSearchFilterLabel,\r\n.GPadvancedSearchFilterInput {\r\n margin-bottom: 5px;\r\n}\r\n",".GPshowToolBoxPicto {\n background-repeat: no-repeat;\n background-image: url(\"img/GPtoolBoxMeasureOpen.png\");\n}",".GPzoomIn {\n background-image: url(\"img/zoom-in.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center;\n height: 32px;\n width: 32px;\n border-bottom: unset;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.GPzoomOut {\n background-image: url(\"img/zoom-out.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center;\n height: 32px;\n width: 32px;\n border-top: unset;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.GPzoomIn:hover, .GPzoomOut:hover {\n cursor: pointer;\n}",".ol-custom-full-screen button {\n background-image: url(\"img/full-screen-buttons.png\");\n background-repeat: no-repeat;\n}\n.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=\"false\"] {\n background-position: 0 0;\n}\n.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=\"true\"] {\n background-position: 0 -30px;\n}\n",".GPshowOverviewMap {\n background-image: url(\"img/overviewmap.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: 2px center;\n}","div[id^=GPlegends-] {\n display: none;\n}","div[id^=GPcatalog-] {\n display: block;\n}\n\n.GPshowCatalogPicto {\n background-image: url(\"img/GPcatalogOpen.png\");\n background-repeat: no-repeat;\n background-position: 0px center;\n}\n\ndialog[id^=GPcatalogPanel-] {\n width: 280px;\n}\n\n.GPcatalogPanelClose {\n background-image: url(\"img/GPcatalogOpen.png\");\n}\n\n.GPtabs {}\n.GPtabsList {\n overflow: hidden;\n border: 1px solid #ccc;\n background-color: #f1f1f1;\n list-style-type: none;\n margin: 0;\n padding: 0;\n display: flex;\n}\n.GPtabList {\n flex: 1 1 0px;\n}\n.GPtabButton {\n background-color: inherit;\n float: left;\n border: none;\n outline: none;\n cursor: pointer;\n padding: 14px 16px;\n transition: 0.3s;\n}\n.GPtabButtonActive {\n background-color: #ccc;\n}\n.GPtabContent {\n display: none;\n padding: 6px 12px;\n border: 1px solid #ccc;\n border-top: none;\n}\n.GPtabContentSelected {\n display: block;\n}\n.GPlabelActive:hover {\n background-color: #ccc;\n}\n.GPcatalogButtonSection {\n border: unset;\n background: unset;\n}\nbutton[aria-expanded=\"true\"].GPcatalogButtonSection span.GPshowCatalogAdvancedTools {\n -webkit-transform: rotateX(180deg);\n transform: rotateX(180deg);\n}\n\n.GPshowCatalogAdvancedTools {\n display: inline-block;\n width: 28px;\n height: 28px;\n vertical-align: middle;\n background-image: url(\"img/GPcatalogTools.png\");\n background-position: -26px 0;\n}\n\n#header-search > label {\n display: none;\n}","div[id^=GPterritories-] {\n display: none\n}","div[id^=\"GPcontrolList-\"] .GPshowOpen > span {\n font-size: 24px;\n color: white;\n display: block;\n height: 24px;\n line-height: 24px;\n pointer-events: none;\n}\n\nbutton[id^=\"GPshowControlListPicto-\"][aria-pressed=\"true\"] + dialog {\n width: 200px;\n}\n\n.GPcontrolListPanelClose {\n background-image: url(\"img/close.png\");\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div {\n display: flex;\n flex-direction: row;\n column-gap: 1rem;\n align-items: center;\n padding: 0.5rem 0.5rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div:hover {\n background-color: #EEE;\n cursor: pointer;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button {\n flex-shrink: 0;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button:hover {\n background-color: rgba(0,60,136,0.5);\n}"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"Classic.css","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkBA,cACE,YAAa,CAMb,WAAY,CAFZ,QAAS,CAIT,iBAAkB,CADlB,gBAAiB,CANjB,iBAAkB,CAElB,OAAQ,CAER,UAAW,CAHX,UAOF,CAEA,kCACE,aACF,CAEA,cACI,gyDACJ,CChCA,UAKE,UAAW,CAFX,qDAAwD,CACxD,cAAe,CAFf,mBAAoB,CADpB,iBAKF,CAEA,wDAEE,uBAAwB,CACxB,eAAgB,CAChB,UACF,CAEA,+BACE,YACF,CAEA,iBAEE,iBAAkB,CADlB,gBAEF,CAEA,eACE,eACF,CAEA,YAEE,2BAA4B,CAD5B,qBAEF,CAKA,MACE,mBACF,CACA,4HAIE,kBAAmB,CAEnB,YAAa,CACb,qBAAsB,CACtB,sBAAuB,CAIvB,8BAA+B,CAP/B,iBAAkB,CAMlB,yBAGF,CAEA,2DAEE,KACF,CAEA,6BACE,UAAW,CACX,MACF,CACA,8BACE,WAAY,CACZ,OACF,CAEA,iEAEE,QACF,CAEA,iCACE,WAAY,CACZ,OACF,CACA,gCACE,UAAW,CACX,MACF,CAMA,SAKE,qBAAsB,CADtB,YAAa,CAFb,iBAAkB,CADlB,uBAAwB,CAExB,aAGF,CAKA,eAKE,wBAAyB,CACzB,0BAA2B,CAC3B,2BAA4B,CAJ5B,WAAY,CACZ,WAAY,CAHZ,iBAAkB,CAClB,UAMF,CAEA,cAQE,wBAAyB,CAFzB,0BAA2B,CAC3B,2BAA4B,CAE5B,UAAW,CALX,eAAiB,CAFjB,WAAY,CAGZ,gBAAiB,CAFjB,iBAAkB,CAFlB,UASF,CAIA,oFAWE,wBAAyB,CADzB,WAAY,CADZ,cAAe,CADf,WAAY,CAFZ,iBAAkB,CAClB,UAKF,CAEA,cAGE,2BAA4B,CAD5B,SAAU,CADV,OAGF,CAOA,4BAHE,QAAS,CADT,OAOF,CAEA,eAEE,UAAW,CADX,OAEF,CAEA,6BAEE,iBAAkB,CAClB,SACF,CAMA,yBAOE,mCAA0C,CAE1C,mCAA2C,CAD3C,iBAAkB,CANlB,qBAAsB,CACtB,cAAe,CAEf,WAAY,CACZ,WAAY,CALZ,iBAAkB,CAGlB,UAMF,CAEA,+BACE,mCACF,CAEA,wBAME,kCAAoC,CACpC,iBAAkB,CAJlB,qBAAsB,CADtB,aAAc,CAGd,WAAY,CAJZ,iBAAkB,CAGlB,UAIF,CAEA,uDACE,kCACF,CAEA,YACE,kCACF,CAEA,kBACE,kCACF,CAMA,oBAME,mCAAuC,CAGvC,iBAAkB,CANlB,QAAS,CAIT,eAAgB,CAChB,eAAiB,CAJjB,MAAO,CAMP,eAAgB,CAThB,iBAAkB,CAIlB,OAAQ,CAHR,QASF,CAEA,2BACE,oBAAqB,CACrB,mBAAoB,CACpB,mBAAoB,CACpB,YACF,CAEA,0BACE,YACF,CAEA,wBACE,WACF,CASA,aACE,oBAAqB,CACrB,mBAAoB,CACpB,mBAAoB,CACpB,YAAa,CACb,uDACF,CAIA,eAIE,qBAAsB,CACtB,eAAgB,CAJhB,aAAc,CACd,WAAY,CACZ,gBAGF,CAEA,+BACE,iBACF,CAEA,0BACE,yBACF,CAEA,yBACE,yBACF,CAEA,yBAEE,eAAgB,CAEhB,sBAAuB,CADvB,kBAEF,CAEA,mBAME,WAAY,CADZ,aAEF,CAEA,uCARE,cAAe,CACf,kBAAmB,CACf,UAAW,CACP,MAWV,CANA,oBAKE,iBACF,CAEA,mBACE,wBAA0B,CAC1B,UAAW,CAGX,cAAe,CAFf,gBAAiB,CACjB,iBAEF,CAMA,eAOE,eAAgB,CAKhB,wBAAyB,CAJzB,WAAY,CACZ,iBAAkB,CAElB,UAAW,CAKX,cAAe,CAff,aAAc,CASd,qDAAwD,CAGxD,eAAiB,CATjB,WAAY,CACZ,gBAAiB,CAFjB,WAAY,CAWZ,UAAY,CARZ,SAAU,CASV,+BAAiC,CAbjC,UAeF,CAEA,qBACE,SACF,CAMA,UAKE,qBAAsB,CACtB,UAAW,CACX,cAAe,CANf,aAAc,CACd,WAAY,CACZ,gBAAiB,CACjB,WAIF,CAUA,QACE,YACF,CAEA,qCAEE,YAAa,CAEb,SAAW,CADX,iBAEF,CAEA,iCAEE,aAAc,CAEd,YAAa,CADb,kBAEF,CAMA,gDAEE,SAOF,CAEA,4BAEE,eAAgB,CAChB,cAAgB,CAFhB,uBAGF,CAEA,wBAKE,aAAc,CAKd,cAAe,CAJf,aAAgB,CAJhB,WAAY,CACZ,gBAAiB,CAQjB,eAAgB,CAJhB,eAAgB,CAHhB,gBAAiB,CAKjB,sBAAsB,CADtB,kBAAmB,CAPnB,UAWF,CAEA,8BAEE,wBAAwB,CADxB,UAEF,CAMA,wBACE,obACF,CAEA,mBAKE,cAAe,CAJf,aAAc,CAGd,WAAY,CAFZ,iBAAkB,CAIlB,8BAAgC,CAHhC,UAIF,CAEA,4FAEE,iCAAkC,CAClC,yBAEF,CAMA,qBASE,qBAAsB,CAJtB,kBAAmB,CAJnB,WAAa,CASb,uBAAwB,CAFxB,aAAc,CADd,gCAAoC,CADpC,eAAiB,CAHjB,4BAA6B,CAC7B,YAAa,CAFb,iBASF,CAEA,4BAKE,kCAAmC,CADnC,mCAAoC,CADpC,0BAA2B,CAG3B,YAAa,CALb,UAAW,CAOX,QAAS,CADT,iBAAkB,CALlB,iBAOF,CAEA,6BAWE,qBAAsB,CAEtB,ozBAA8C,CAE9C,uBAA2B,CAH3B,2BAA4B,CAE5B,yBAA0B,CAP1B,WAAY,CAGZ,+BAAgC,CADhC,4BAA6B,CAD7B,cAAe,CANf,aAAc,CAEd,WAAY,CAHZ,iBAAkB,CAKlB,OAAQ,CADR,KAAM,CAFN,UAaF,CAEA,yBAGE,gBAAiB,CAFjB,eAAgB,CAChB,eAAgB,CAEhB,aACF,CAEA,+GAIE,QACF,CAEA,4BAEE,oBAAqB,CADrB,SAEF,CAEA,kJAME,cACF,CAEA,sNAKE,kBACF,CAEA,yMAME,kBACF,CAEA,0NAME,eACF,CAEA,6CAME,aAAc,CAFd,eAAgB,CADhB,eAAiB,CADjB,kBAAmB,CAGnB,wBAEF,CAEA,4BACE,eACF,CAEA,6EAGE,6BAA8B,CAD9B,mBAEF,CAEA,qBACE,YAAa,CACb,OACF,CAEA,cACE,uBACF,CCvjBA,sBACE,WACF,CAEA,oBAGE,uBAA+B,CAD/B,2BAEF,CACA,yCAJE,guBAMF,CAEA,iCAEE,oBAAqB,CACrB,gBACF,CAEA,gBAEE,eAAiB,CADjB,UAEF,CAEA,iBACE,WACF,CAGA,oBACE,YACF,CAEA,uCACE,oBACF,CAGA,cAQE,wBAAyB,CAFzB,giXAA8C,CAC9C,0BAA2B,CAE3B,YAAa,CARb,kBAAmB,CACnB,cAAe,CACf,aAAc,CACd,WAAY,CACZ,UAKF,CAEA,qBACE,wBACF,CAMA,gCACE,uBACF,CAEA,oDACE,2BACF,CAEA,mDACE,4BACF,CAEA,+BACE,2BACF,CAEA,gCACE,4BACF,CAEA,oDACE,4BACF,CAEA,kCACE,4BACF,CAEA,sDACE,4BACF,CAEA,+BACE,4BACF,CAEA,mDACE,4BACF,CAKA,+BACE,4BACF,CAEA,mDACE,4BACF,CAEA,iCACE,4BACF,CAEA,sDACE,4BACF,CAEA,iCACE,4BACF,CAEA,sDACE,4BACF,CAEA,gCACE,4BACF,CAEA,qDACE,4BACF,CAIA,+BACI,6BACJ,CAEA,4BACI,yBACJ,CAEA,gBAQI,47DAA6C,CAC7C,0BAA2B,CAP3B,cAAgB,CAChB,WAAY,CACZ,gBAAiB,CAHjB,WAAY,CAIZ,iBAAkB,CAClB,kBAIJ,CAEA,kBAQI,wBAAyB,CAPzB,WAAmB,CACnB,kBAAmB,CAOnB,UAAW,CANX,qDAAwD,CACxD,cAAgB,CAChB,iBAAkB,CAClB,wBAIJ,CAKA,8BAME,qBAAsB,CAGtB,YAAa,CALb,kBAAmB,CAGnB,uBAAwB,CACxB,qBAAsB,CAHtB,eAAiB,CAHjB,iBAAkB,CAClB,QAOF,CAEA,4CAIE,6BAA8B,CAE9B,kCAAmC,CADnC,kCAAmC,CAHnC,UAAW,CAOX,QAAS,CADT,iBAAkB,CALlB,iBAAkB,CAIlB,SAGF,CAEA,mDAEE,WACF,CAEA,6BAEE,WAAY,CACZ,WAAY,CAFZ,WAGF,CAEA,wBAGE,qBAAsB,CAEtB,kBAAmB,CAHnB,eAAiB,CAEjB,iBAAkB,CAHlB,WAKF,CAEA,6BACE,aACF,CAEA,sBAEE,qBAAsB,CADtB,4BAEF,CAEA,sBACE,WACF,CAIA,cACE,YACF,CAIA,gBAGE,sBAAiB,CAFjB,WAGF,CAEA,sBAUE,4BAA6B,CAT7B,2BAA4B,CAE5B,aAAc,CASd,eAAgB,CADhB,uBAAwB,CAExB,eAAiB,CARjB,WAAY,CAGZ,SAAU,CAFV,gBAAiB,CAJjB,iBAAkB,CAKlB,iBAAkB,CAElB,KAAM,CALN,WAUF,CAEA,sDACE,aAAc,CAEd,qBACF,CAEA,wCASE,wBAAyB,CAIzB,WAAY,CAPZ,kBAAmB,CAEnB,UAAW,CAPX,oBAAqB,CAUrB,cAAgB,CADhB,eAAiB,CAPjB,WAAY,CACZ,gBAAiB,CACjB,eAAgB,CAEhB,iBAAkB,CAKlB,wBAAyB,CAVzB,WAYF,CAEA,8CAEE,wBAAyB,CADzB,aAEF,CAEA,gFACE,gBACF,CAEA,8CAUE,4BAA6B,CAE7B,ozBAAoD,CAEpD,uBAA2B,CAH3B,2BAA4B,CAE5B,yBAA0B,CAJ1B,WAAY,CAPZ,cAAe,CAEf,aAAc,CAEd,WAAY,CAHZ,iBAAkB,CAKlB,OAAQ,CADR,KAAM,CAFN,UAUF,CAEA,mBACE,cAAe,CAEf,gBAAiB,CACjB,cAAe,CAFf,iBAGF,CAEA,yBAKE,cAAe,CAJf,aAAc,CAEd,WAAY,CAGZ,SAAU,CAJV,iBAAkB,CAElB,OAGF,CAEA,wCAKE,eAAgB,CADhB,WAAY,CAHZ,WAAY,CAEZ,SAAU,CADV,UAIF,CAEA,qCAKE,eAAgB,CADhB,WAAY,CADZ,SAAU,CADV,UAAW,CADX,UAKF,CAEA,oCAKE,eAAgB,CAChB,qBAAyB,CACzB,aAAc,CAHd,WAAY,CADZ,aAAc,CADd,UAAW,CADX,UAOF,CAIA,qCACE,QAAS,CAET,UAAW,CADX,UAEF,CAEA,2CACE,eAAgB,CAChB,YACF,CAIA,oEACE,uBAAwB,CAExB,qBAAyB,CADzB,UAEF,CAEA,kEAKE,UAAW,CADX,WAAY,CAEZ,mBAAoB,CALpB,iBAAkB,CAElB,SAAU,CADV,KAKF,CAEA,2DAGE,uBAAwB,CACxB,wBAAyB,CACzB,WAAY,CACZ,iBAAkB,CAJlB,WAAY,CAKZ,iBAAkB,CAClB,QAAS,CAPT,UAQF,CAIA,uDAGE,qBAAyB,CADzB,UAAW,CADX,UAGF,CAEA,uDAGE,wBAAyB,CACzB,WAAY,CACZ,iBAAkB,CAClB,YAAa,CAJb,WAAY,CAKZ,iBAAkB,CANlB,UAOF,CAIA,gDAQE,qBAAyB,CAPzB,QAAS,CACT,wBAAyB,CACzB,eAAgB,CAChB,cAAe,CACf,iBAAkB,CAClB,UAAW,CACX,UAEF,CAEA,0GAEE,sBAAuB,CACvB,eACF,CAEA,gDAGE,wBAAyB,CACzB,WAAY,CACZ,iBAAkB,CAHlB,WAAY,CADZ,UAKF,CAEA,kDACE,YACF,CAGA,uCACE,YACF,CAEA,iCAME,cAAe,CALf,oBAAqB,CACrB,WAAY,CAGZ,iBAAkB,CADlB,gBAAiB,CADjB,WAIF,CAEA,6DAEE,mCAAqC,CACrC,wBAAyB,CAFzB,WAGF,CAEA,qCACE,WACF,CCxcA,8CACE,eAAgB,CAChB,iBAAkB,CAClB,qBACF,CCNA,eACE,aACF,CAGA,gCACE,gqDAAoD,CAEpD,yBAAiC,CADjC,2BAEF,CAEA,4BACE,YAAa,CACb,aACF,CAEA,2DAEE,SAAU,CADV,iBAEF,CAEA,8CAME,mCAA0C,CAC1C,iBAAkB,CAJlB,QAAS,CACT,MAAO,CAIP,eAAgB,CAPhB,iBAAkB,CAIlB,OAAQ,CAHR,QAOF,CAIA,qBAEE,aAAc,CADd,WAEF,CAIA,2BACE,oBAAoB,CACpB,mBAAmB,CACnB,mBAAmB,CACnB,YAAY,CACZ,2BAA2B,CAC3B,4BAA4B,CAC5B,6BAA6B,CACzB,yBAAyB,CACrB,qBAAqB,CAC7B,WACF,CAEA,eACE,eAAgB,CAChB,YACF,CAEA,gBACE,iBAAkB,CAClB,YACF,CAKA,cACE,YAAqB,CACrB,mBAAoB,CACpB,cAAe,CACf,SAAU,CACV,eACF,CAEA,SACE,SAAU,CACV,cAAe,CACf,cAAe,CACf,0BACF,CAEA,SACE,YAAa,CACb,cAAe,CACf,cAAe,CACf,eACF,CAEA,SACE,SAAU,CACV,cAAe,CACf,gBACF,CAWA,eACE,cAAiB,CACjB,UACF,CAEA,cACE,cACF,CAEA,YACE,SAAU,CACV,kBACF,CAEA,cACE,SAAU,CACV,cAAe,CACf,iBACF,CAEA,gBACE,YACF,CAEA,eAOI,eAAiB,CACjB,QAAW,CACX,iBAAkB,CAHlB,mBAAoB,CAFpB,WAAY,CACZ,WAAY,CAKZ,mBAAoB,CATpB,gBAAiB,CACjB,eAAgB,CAChB,UAQJ,CAEA,4BACE,WACF,CAEA,+BAGE,yBACF,CAEA,qEALE,gqDAAoD,CACpD,2BAQF,CAJA,sCAGE,uBACF,CC1JA,4BACI,WACJ,CAEA,2CACI,UACJ,CAGA,2BAII,wkBAA6C,CAE7C,2BAA4B,CAD5B,yBAA0B,CAJ1B,qBAAsB,CACtB,iBAAkB,CAClB,iBAIJ,CAGA,oBACI,iBACJ,CAEA,uBAEI,oBAAqB,CADrB,iBAEJ,CAEA,qBAMI,kBAAmB,CACnB,sCAA4C,CAN5C,YAAa,CAGb,cAAe,CACf,WAAY,CAHZ,iBAAkB,CAMlB,SACJ,CAEA,kDARI,wBAQsD,CAE1D,kDAAoD,aAAgB,CAGpE,gCAKI,cAAe,CAJf,aAAc,CAKd,cAAe,CAFf,iBAAkB,CADlB,iBAAkB,CADlB,iBAAkB,CAKlB,wBAAyB,CACzB,qBAAsB,CACtB,oBAAqB,CACrB,gBACJ,CAEA,sCAGI,cAAe,CACf,QAAS,CAFT,SAAU,CADV,iBAAkB,CAIlB,OACJ,CAEA,gCAMI,qBAAsB,CACtB,iBAAkB,CAHlB,WAAY,CADZ,MAAO,CAFP,iBAAkB,CAClB,KAAM,CAGN,UAGJ,CAEA,uDACI,qBACJ,CAEA,yDACI,wBACJ,CAEA,sCACI,UAAW,CAEX,YAAa,CADb,iBAEJ,CAEA,+DACI,aACJ,CAEA,iDAMI,eAAiB,CADjB,iBAAkB,CADlB,UAAW,CAFX,QAAS,CADT,OAAQ,CAER,SAIJ,CCpGA,qDAEE,uBAA+B,CAD/B,2BAEF,CAEA,kCACE,o8ZAA8C,CAG9C,yBAAiC,CADjC,wBAAyB,CADzB,yBAIF,CAEA,uBACI,4rUAA8C,CAC9C,qBACJ,CAEA,kBAEI,gBAAiB,CADjB,YAAa,CAGb,eAAiB,CADjB,eAEJ,CAEA,uEACI,iCAAkC,CAClC,yBACJ,CAEA,uBAKI,4nSAA6C,CAC7C,2BAA4B,CAL5B,oBAAqB,CAErB,WAAY,CACZ,qBAAsB,CAFtB,UAKJ,CCrCA,uBACE,WACF,CAEA,qBAGE,uBAA+B,CAD/B,2BAEF,CAEA,2CALE,45BAOF,CAIA,4BACE,UAAY,CACZ,+BACF,CAEA,kCACE,SACF,CAEA,iBACE,wBAAyB,CACzB,o6OAAkD,CAClD,0BACF,CAGA,yBACE,YACF,CAEA,0BAKE,qCAAsC,CAFtC,oBAAkB,CAClB,WAAY,CAEZ,wBAAyB,CACzB,qBAAsB,CACtB,6BACF,CAEA,+DACE,gBACF,CAMA,8CACE,aACF,CAEA,4DACE,2BACF,CAEA,oEACE,2BACF,CAEA,2DACE,4BACF,CAEA,mEACE,4BACF,CAMA,gHAHE,o6OAQF,CALA,4EAIE,WACF,CAEA,uBACE,wwDACF,CAEA,4BAEE,wBAAyB,CACzB,cAAe,CAFf,UAGF,CAEA,2BACE,YACF,CAEA,wBAKE,cAAe,CAJf,aAAc,CAEd,WAAY,CACZ,WAAY,CAFZ,UAIF,CAEA,0BAGE,UAAW,CAFX,cAAe,CACf,aAEF,CAEA,qBACE,aAAc,CAEd,iBAAkB,CADlB,iBAEF,CAEA,0DAEE,4BACF,CAEA,4HAJE,o6OAOF,CAHA,kEAEE,4BACF,CAEA,iEAEE,4BACF,CAEA,0IAJE,o6OAOF,CAHA,yEAEE,4BACF,CAEA,iCACE,YACF,CAEA,uCAEE,sBAAuB,CADvB,UAEF,CAEA,2DAGE,eAAgB,CADhB,WAEF,CAEA,wBAIE,cAAe,CAHf,oBAAqB,CAErB,WAAY,CADZ,UAGF,CAEA,sCACI,gBAAiB,CACjB,iBACJ,CAEA,sCAEE,eAAgB,CADhB,UAEF,CAEA,0BAEE,OAAQ,CADR,SAAU,CAEV,8BACF,CAEA,sBACE,aAAc,CAGd,eAAiB,CACjB,gBAAiB,CAFjB,kBAAmB,CADnB,iBAIF,CAEA,wBACE,oBAAqB,CACrB,mBAAoB,CACpB,mBAAoB,CACpB,YAAa,CACb,oCAAqC,CACrC,wBAAyB,CACrB,4BACN,CAEA,uBAKE,qBAAsB,CAGtB,qBAAsB,CACtB,iBAAkB,CALlB,UAAW,CAMX,cAAe,CATf,aAAc,CACd,WAAY,CACZ,gBAAiB,CAGjB,iBAAkB,CAClB,iBAIF,CAEA,qCACE,qBAAsB,CACtB,2BAA4B,CAE5B,qBAAsB,CADtB,UAEF,CAEA,6BAEE,cAAe,CADf,iBAEF,CCtNA,2EAEE,WACF,CAEA,2BACE,4BAA6B,CAE7B,kBAAmB,CADnB,mBAEF,CAEA,yBAEE,iBAAkB,CADlB,cAEF,CAEA,mBAGE,uBAA+B,CAD/B,2BAEF,CAEA,2FALE,g4BASF,CAEA,0BACE,wBAAyB,CACzB,gmBAEF,CAEA,qCACE,YACF,CAEA,sBAGE,UAAW,CAEX,cAAe,CAJf,aAAc,CAGd,eAAiB,CAFjB,gBAIF,CAEA,gDACE,aACF,CAIA,mBACE,mBAAoB,CACpB,mBAAoB,CACpB,YAAa,CACb,kBACF,CAEA,qBAIE,qBAAsB,CACtB,eAAgB,CAJhB,aAAc,CACd,WAAY,CACZ,gBAGF,CAEA,qCACE,iBACF,CAEA,gCACE,yBACF,CAEA,+BACE,yBACF,CAEA,+BACE,eAAgB,CAEhB,yBAA0B,CACvB,sBAAuB,CAF1B,kBAGF,CAEA,yBACE,kBAAmB,CACnB,UAAW,CACP,MAAO,CAEX,WAAY,CADZ,aAEF,CAEA,0BACE,kBAAmB,CACnB,UAAW,CACP,MAAO,CACX,iBACF,CAEA,yBACE,wBAA0B,CAC1B,UAAW,CAGX,cAAe,CAFf,gBAAiB,CACjB,iBAEF,CAIA,wBAKE,aAAc,CAMd,cAAe,CALf,aAAgB,CAJhB,WAAY,CACZ,gBAAiB,CASjB,oBAAqB,CALrB,eAAgB,CAHhB,gBAAiB,CAKjB,yBAAyB,CACtB,sBAAsB,CAFzB,kBAAmB,CAPnB,UAYF,CAEA,uFAGI,aACJ,CAEA,oGAII,oBACJ,CAEA,wIAKI,YACJ,CAaA,kGACE,UACF,CAEA,kHAII,oBAAqB,CACrB,gBACJ,CAEA,wBAGI,UAAW,CAFX,sBAAuB,CACvB,WAEJ,CACA,8BACI,YACJ,CAEA,gBAAkB,WAAc,CAChC,gBAAkB,aAAmB,CACrC,iBAAmB,UAAa,CAChC,cAAgB,UAAgB,CAChC,aAAe,SAAY,CAE3B,qCACI,uBACJ,CASA,gCAME,uBAAwB,CAFxB,iBAAkB,CAGlB,cAAe,CAJf,WAAY,CAEZ,SAAU,CAJV,iBAAkB,CAClB,UAMF,CChNA,uBACE,qBACF,CAEA,0BACE,WACF,CAEA,8EACE,WACF,CAEA,kCAIE,4uSAAiD,CAFjD,wBAAgC,CAChC,2BAEF,CAEA,qDAGE,yBAAiC,CADjC,wBAAyB,CADzB,yBAIF,CAGA,aAEE,gBAAiB,CADjB,aAEF,CAEA,6BAIE,sBAAuB,CADvB,wvBAAiD,CAFjD,wBAAgC,CAChC,2BAGF,CACA,+BAGE,wrOAA6C,CAF7C,wBAAgC,CAChC,2BAEF,CAEA,aACE,wrBAAuC,CAGvC,uBAAkC,CAFlC,2BAA4B,CAC5B,yBAEF,CAGA,uBACE,WACF,CAEA,0BAEE,+BAAgC,CADhC,aAEF,CAGA,yCAIE,WAAY,CAFZ,iBAAkB,CAClB,UAEF,CAEA,iFAOE,cAAe,CADf,WAAY,CADZ,UAGF,CAEA,mIAQE,iBAAkB,CAClB,KACF,CAEA,cACE,SACF,CAIA,mBACE,qBACF,CAKA,2GAME,g9FACF,CAIA,iEACE,sRACF,CAIA,oDACE,sRACF,CAIA,6CACE,sRACF,CAGA,8BACE,o/BACF,CAEA,0BACE,wvBACF,CAEA,mCAEE,o/BACF,CAEA,kFAIE,4BAA6B,CAD7B,WAEF,CAEA,sDAEE,2BAA4B,CAD5B,MAEF,CAEA,qDACE,uBACF,CAEA,6EACE,eACF,CAEA,0BAGE,4BAA6B,CAD7B,OAAQ,CADR,KAGF,CAEA,aAEE,2BAA4B,CAD5B,MAEF,CAEA,mBAEE,2BAA4B,CAD5B,MAEF,CAEA,gBAGE,WAAY,CAFZ,SAAU,CAGV,gBAAiB,CAFjB,wBAGF,CAEA,qBAME,cAAe,CAFf,cAAe,CACf,iBAAkB,CAHlB,sBAAuB,CACvB,gBAAiB,CAFjB,UAMF,CAEA,eAEE,4BAA6B,CAD7B,OAEF,CAIA,sBACE,uBAAwB,CACxB,oBAAqB,CACrB,eAAgB,CAOhB,cAAe,CANf,aAAc,CAEd,WAAY,CACZ,QAAS,CAET,eAAgB,CADhB,SAAU,CAHV,UAMF,CAEA,wCACE,eAAgB,CAChB,YACF,CAIA,iEACE,uBAAwB,CACxB,UACF,CAEA,+DAKE,UAAW,CADX,WAAY,CAEZ,mBAAoB,CALpB,iBAAkB,CAElB,SAAU,CADV,KAKF,CAEA,wDAGE,uBAAwB,CAExB,wBAAyB,CADzB,qBAAsB,CAFtB,WAAY,CAIZ,iBAAkB,CAClB,QAAS,CANT,SAOF,CAIA,oDAEE,UAAW,CADX,UAEF,CAEA,oDAME,wBAAyB,CAHzB,qBAAsB,CACtB,eAAgB,CAChB,YAAa,CAHb,WAAY,CAKZ,iBAAkB,CANlB,SAOF,CAIA,6CACE,QAAS,CACT,wBAAyB,CACzB,eAAgB,CAChB,cAAe,CACf,iBAAkB,CAClB,UAAW,CACX,UACF,CAEA,oGAEE,sBAAuB,CACvB,eACF,CAEA,6CAIE,wBAAyB,CADzB,qBAAsB,CADtB,WAAY,CADZ,SAIF,CAEA,+CACE,YACF,CAIA,uBAGE,iBAAkB,CAElB,mBAAoB,CADpB,gBAAiB,CAHjB,iBAAkB,CAClB,KAIF,CAEA,wBACE,aACF,CAEA,wBACE,YACF,CAWA,0BAME,eAAgB,CAChB,eAAiB,CAJjB,qBAAmB,CACnB,kBAAmB,CACnB,iBAAkB,CAJlB,uBAOF,CAEA,8BAME,cAAe,CADf,WAAY,CAFZ,SAAU,CAFV,iBAAkB,CAClB,QAAS,CAET,UAGF,CAEA,0BAME,cAAe,CADf,WAAY,CAJZ,iBAAkB,CAElB,UAAW,CADX,QAAS,CAET,UAGF,CAEA,gCACE,cACF,CAUA,qBAEE,eAAiB,CAEjB,iBAAkB,CADlB,eAAgB,CAFhB,iBAIF,CAEA,mCAQE,2BAA4B,CAD5B,UAAc,CAEd,cAAe,CAPf,gBAAiB,CAGjB,iBAAkB,CAFlB,iBAAkB,CAGlB,sBAAuB,CAFvB,kBAMF,CAEA,iBACE,2BACF,CAEA,+CAEE,UACF,CAEA;;yBAKE,aAAc,CADd,oBAEF,CAGA,aAQE,WAAY,CAPZ,SAAU,CAEV,gBAAiB,CACjB,eAAgB,CAGhB,gBAAiB,CADjB,sBAAuB,CADvB,kBAAmB,CAHnB,uBAOF,CAEA,yBACE,UACF,CAEA,4BACE,WACF,CChaA,8BAEE,2BACF,CAEA,mFAJE,w8IAOF,CAEA,qDAIE,WAAY,CACZ,cAAe,CAFf,WAAY,CADZ,UAIF,CAEA,gBACE,sBACF,CAEA,uBACE,yBACF,CACA,oBACE,yBACF,CAEA,0DACE,wBACF,CAEA,kEACE,yBACF,CAEA,0BACE,eAAgB,CAChB,SACF,CAEA,kEAGE,8BAA+B,CAC/B,2BAA4B,CAF5B,2BAA4B,CAD5B,UAIF,CAEA,0BACI,iBACJ,CC/CA,oCACE,4tEAA+C,CAE/C,yBAAiC,CADjC,2BAEF,CAEA,wDACE,kCACF,CAEA,uDACE,kCACF,CCbA,sCACE,4tEAA+C,CAE/C,yBAAiC,CADjC,2BAEF,CAEA,0DACE,kCACF,CAEA,yDACI,kCACJ,CCZA,uCACE,4tEAA+C,CAE/C,uBAA+B,CAD/B,2BAEF,CAEA,2DACE,kCACF,CAEA,0DACE,kCACF,CCdA,kBAEE,yBAA8B,CAC9B,iBAAkB,CAClB,UAAY,CACZ,eAAgB,CAJhB,iBAAkB,CAKlB,kBACF,CAEA,0BACE,eACF,CAEA,uBACE,eAAiB,CACjB,iBACF,CAEA,yBACE,qBAAyB,CAEzB,qBAAuB,CADvB,UAEF,CAEA,yBACE,YACF,CAEA,+FAKE,iCAAkC,CADlC,kCAAmC,CADnC,mCAAwC,CAKxC,WAAY,CAFZ,UAAW,CAIX,QAAS,CADT,gBAAiB,CAFjB,iBAIF,CAEA,gCACE,qBACF,CC3CA,4BACE,WACF,CAEA,sCACE,oiBAAoD,CAEpD,uBAA+B,CAD/B,2BAEF,CAEA,yBACI,4vBACJ,CAEA,sCACE,oiBACF,CAIA,6CAEE,oBAAqB,CACrB,gBACF,CAEA,sBAEE,eAAiB,CADjB,WAEF,CAEA,uBACE,WACF,CAIA,kCACE,UAAW,CACX,OAAQ,CACR,8BACF,CAEA,8BACE,aAAc,CAGd,eAAiB,CACjB,gBAAiB,CAHjB,WAAY,CACZ,iBAGF,CAEA,+BAEE,cAAe,CACf,kBAAmB,CAFnB,WAGF,CAIA,iCAEE,qBAAoC,CACpC,iBAAkB,CAFlB,QAGF,CAEA,+DACE,gBACF,CAGA,iCACE,eAAgB,CAEhB,SAAU,CADV,qBAEF,CAGA,gCACE,qBAAsB,CACtB,eACF,CAEA,yCAKC,uBAAwB,CAExB,oBAAqB,CALpB,sBAAuB,CADvB,WAAY,CAEZ,UAKF,CAGA,qDACE,YACF,CACA,oDACE,UACF,CAEA,oDAEE,eACF,CAGA,+BACE,iBAAkB,CAElB,SAAU,CADV,QAEF,CAEA,yBAIE,cAAe,CADf,oBAAqB,CADrB,WAAY,CADZ,UAIF,CCtHA,+BACE,WACF,CAEA,6BAGE,uBAA+B,CAD/B,2BAEF,CAEA,2DALE,w3BAOF,CAEA,+BACE,gmBAA+C,CAE/C,qBAA6B,CAD7B,2BAEF,CAIA,qBACI,oCAAsC,CACtC,UACJ,CCzBA,oBACE,WACF,CAEA,kBAGE,uBAA+B,CAD/B,2BAEF,CAEA,qCALE,4nBAOF,CAGA,sBACE,YACF,CAEA,uBACE,eAAgB,CAChB,SACF,CAEA,6BACE,YAAa,CACb,SAAU,CACV,eACF,CAEA,oBACE,gBACF,CAEA,yBACE,iBACF,CAEA,2FAIE,w8IAA+C,CAC/C,WACF,CAEA,iBACE,eACF,CAEA,yBACE,wwDACF,CAEA,kBACE,aAAc,CAEd,iBAAkB,CADlB,iBAEF,CAEA,qBAKE,yBAA0B,CAD1B,cAAe,CAHf,oBAAqB,CAErB,WAAY,CADZ,UAIF,CAEA,mCACI,gBAAiB,CACjB,iBACJ,CAEA,oDACE,4BACF,CAEA,4DACE,4BACF,CAEA,2DACE,4BACF,CAEA,mEACE,4BACF,CAEA,sCACE,YACF,CAEA,qDACE,sBACF,CAEA,qCACE,WACF,CAGA,2CACI,oCAAsC,CACtC,UACJ,CAEA,oBACE,oBAAqB,CACrB,mBAAoB,CACpB,mBAAoB,CACpB,YACF,CAGA,4EAGE,oBAAqB,CACrB,gBACF,CAEA,mDAEE,UACF,CAEA,yBACE,UACF,CAEA,0BACE,UACF,CAEA,yBACE,cAAe,CACf,kBAAmB,CACf,UAAW,CACP,MAAO,CACf,iBAAkB,CAElB,sBAAuB,CADvB,kBAEF,CAKA,4BAEE,OAAQ,CADR,SAAU,CAGV,2BAA4B,CAD5B,8BAEF,CAEA,wBACE,aAAc,CAId,eAAiB,CACjB,gBAAiB,CAHjB,iBAAkB,CAClB,cAAe,CAFf,iBAKF,CAEA,0BACE,oBAAqB,CACrB,mBAAoB,CACpB,mBAAoB,CACpB,YAAa,CACb,oCAAqC,CACrC,wBAAyB,CACrB,4BACN,CAEA,yBAKE,qBAAsB,CAGtB,qBAAsB,CACtB,iBAAkB,CALlB,UAAW,CAMX,cAAe,CATf,aAAc,CACd,WAAY,CACZ,gBAAiB,CAGjB,iBAAkB,CAClB,iBAIF,CAEA,uCACE,qBAAsB,CACtB,2BAA4B,CAE5B,qBAAsB,CADtB,UAEF,CAIA,yBAEE,w8IAA+C,CAC/C,0BAAkC,CAClC,UAAY,CACZ,+BACF,CAcA,0KAEE,aACF,CAEA,8BACE,kBACF,CAEA,kEAEE,oBAAqB,CAOrB,eAAiB,CANjB,gBAAiB,CAKjB,UAJF,CAQA,4CACE,WACF,CAEA,2BAQE,wBAAyB,CACzB,w8IAA+C,CAJ/C,4BAA6B,CAF7B,iBAAkB,CAIlB,cAAe,CALf,WAAY,CAEZ,UAAY,CAMZ,eAAiB,CAJjB,+BAAiC,CALjC,UAUF,CAEA,cAIE,4BAA6B,CAH7B,oBAAqB,CACrB,WAAY,CACZ,UAEF,CAEA,kBACE,gBACF,CAEA,4FAOE,cAAe,CADf,eAAiB,CAHjB,gBAAiB,CAEjB,iBAAkB,CAGlB,6BAA+B,CAJ/B,kBAAmB,CAFnB,WAOF,CAEA,oGAEE,oBACF,CAEA,oGAEE,YACF,CAEA,6EACE,YAAa,CACb,SACF,CAEA,qFACE,gBAAiB,CACjB,SACF,CAEA,+BACE,eAAgB,CAChB,uEACF,CAEA,+DAKE,UAAW,CAHX,oBAAqB,CAErB,gBAAiB,CADjB,cAGF,CAEA,6BACE,eAAiB,CAEjB,gBAAiB,CACjB,kBAAmB,CAFnB,UAGF,CAEA,kCAEE,gBAAiB,CADjB,uBAEF,CAEA,0BAEE,cAAe,CADf,iBAEF,CCnUA,sBAEE,kBAAmB,CADnB,kBAEF,CAEA,oNAKE,sBAAuB,CADvB,qBAAsB,CAEtB,WACF,CAEA,oUAKE,iBAAkB,CAClB,SAAU,CAFV,WAGF,CAEA,yBAGE,qBACF,CAEA,iDALE,43ZAAmD,CACnD,2BAoBF,CAhBA,wBAaE,kCAAoC,CAXpC,yBAAiC,CAajC,mCAA0C,CAD1C,iBAAkB,CANlB,qBAAsB,CAHtB,iBAAkB,CAIlB,cAAe,CAEf,WAAY,CALZ,eAAgB,CAMhB,WAAY,CALZ,iBAAkB,CAHlB,wCAA0C,CAM1C,UAMF,CAEA,oBAEE,gBAAiB,CADjB,iBAEF,CAEA,8BACE,kCACF,CAMA,kDACE,sBACF,CAEA,iBAEE,0BAAkC,CAGlC,gBACF,CAEA,2CAPE,43ZAAmD,CAEnD,2BAA4B,CAC5B,wCASF,CALA,0BAEE,yBAGF,CAEA,oBACE,4rUAAoD,CACpD,qBACF,CAEA,YACE,qBACF,CAEA,kFAEE,WAAY,CADZ,WAEF,CAEA,wDACE,yBACF,CAEA,+BAEE,8BAA+B,CAD/B,2BAA4B,CAG5B,WAAY,CADZ,UAEF,CAEA,wGAME,WAAY,CAFZ,OAAQ,CADR,KAAM,CAEN,UAEF,CAEA,sEAEE,uBACF,CAEA,kCACE,2BACF,CAEA,sEAEE,4rUACF,CAEA,kCACE,43ZAAmD,CACnD,6BACF,CAEA,yBACE,WACF,CAEA,+BAIE,qBAAsB,CAEtB,8BAA+B,CAD/B,2BAA4B,CAK5B,UAAW,CATX,aAAc,CAUd,aAAgB,CAFhB,oBAAiB,CAPjB,UAUF,CAEA,wCACE,qBAAsB,CACtB,UACF,CAEA,iFACE,eACF,CAEA,mBACE,WACF,CAEA,sEAKE,gBAAiB,CAFjB,iBAAkB,CAClB,QAAS,CAFT,WAIF,CAIA,6BACE,uBACF,CAEA,6DAKE,+CAAgD,CADhD,gBAAiB,CADjB,iBAAkB,CADlB,WAIF,CAEA,4BACE,QACF,CAEA,iCAGE,iBAAkB,CAClB,eAAgB,CAHhB,iBAAkB,CAClB,QAGF,CAEA,2BAGE,qBAAsB,CACtB,gBAAiB,CACjB,eAAgB,CAHhB,iBAAkB,CADlB,UAKF,CAEA,iFAGE,eACF,CAEA,mJAKE,eACF,CAEA,0OAQE,iBACF,CCrOA,oBAEI,wtCAAqD,CADrD,2BAEJ,CCHA,UACI,wjBAAwC,CAMxC,mBAAoB,CACpB,2BAA4B,CAC5B,4BACJ,CAEA,qBARI,uBAA2B,CAF3B,2BAA4B,CAC5B,yBAA0B,CAE1B,WAAY,CACZ,UAgBJ,CAVA,WACI,goBAAyC,CAMzC,gBAAiB,CACjB,wBAAyB,CACzB,yBACJ,CAEA,iCACI,cACJ,CC1BA,8BACI,guCAAoD,CACpD,2BACJ,CACA,oEACI,uBACJ,CACA,mEACI,2BACJ,CCTA,mBACI,wfAA4C,CAG5C,uBAA+B,CAF/B,2BAA4B,CAC5B,yBAEJ,CCLA,oBACI,YACJ,CCFA,oBACI,aACJ,CAEA,oBACI,4lZAA8C,CAE9C,qBAA+B,CAD/B,2BAEJ,CAEA,4BACI,WACJ,CAEA,qBACI,4lZACJ,CAGA,YAGI,wBAAyB,CADzB,qBAAsB,CAKtB,YAAa,CAHb,oBAAqB,CACrB,QAAS,CAJT,eAAgB,CAKhB,SAEJ,CACA,WACI,YACJ,CACA,aACI,wBAAyB,CAEzB,WAAY,CAEZ,cAAe,CAHf,UAAW,CAEX,YAAa,CAEb,iBAAkB,CAClB,cACJ,CACA,mBACI,qBACJ,CACA,cAII,qBAAgB,CAAhB,eAAgB,CAHhB,YAAa,CACb,gBAGJ,CACA,sBACI,aACJ,CACA,qBACI,qBACJ,CACA,wBAEI,gBAAiB,CADjB,YAEJ,CACA,kFACI,iCAAkC,CAClC,yBACJ,CAEA,4BAKI,4nSAA+C,CAC/C,2BAA4B,CAL5B,oBAAqB,CAErB,WAAY,CACZ,qBAAsB,CAFtB,UAKJ,CCvEA,6CACI,YACJ,CCFA,yCAEE,UAAY,CACZ,aAAc,CAFd,cAAe,CAGf,WAAY,CACZ,gBAAiB,CACjB,mBACF,CAEA,8DACE,WACF,CAEA,yBACE,45BACF,CAEA,wDAIE,kBAAmB,CADnB,eAAgB,CAFhB,YAAa,CACb,kBAAmB,CAGnB,aACF,CAEA,8DACE,qBAAsB,CACtB,cACF,CAEA,+DACE,aACF,CAEA,qEACE,kCACF","sources":["webpack://Gp/./src/packages/CSS/GPFwaiting.css","webpack://Gp/./src/packages/CSS/GPFgeneralWidget.css","webpack://Gp/./src/packages/CSS/Controls/Drawing/GPFdrawingStyle.css","webpack://Gp/./src/packages/CSS/Controls/Attribution/GPFattributionStyle.css","webpack://Gp/./src/packages/CSS/Controls/ElevationPath/GPFelevationPathStyle.css","webpack://Gp/./src/packages/CSS/Controls/Export/GPFexportStyle.css","webpack://Gp/./src/packages/CSS/Controls/GetFeatureInfo/GPFgetFeatureInfoStyle.css","webpack://Gp/./src/packages/CSS/Controls/Isochron/GPFisochronStyle.css","webpack://Gp/./src/packages/CSS/Controls/LayerImport/GPFlayerImportStyle.css","webpack://Gp/./src/packages/CSS/Controls/LayerSwitcher/GPFlayerSwitcherStyle.css","webpack://Gp/./src/packages/CSS/Controls/LocationSelector/GPFlocationStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureAreaStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureLengthStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureAzimuthStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureToolTip.css","webpack://Gp/./src/packages/CSS/Controls/MousePosition/GPFmousePositionStyle.css","webpack://Gp/./src/packages/CSS/Controls/ReverseGeocoding/GPFreverseGeocodingStyle.css","webpack://Gp/./src/packages/CSS/Controls/Route/GPFrouteStyle.css","webpack://Gp/./src/packages/CSS/Controls/SearchEngine/GPFsearchEngineStyle.css","webpack://Gp/./src/packages/CSS/Controls/ToolBoxMeasure/GPFtoolBoxMeasureStyle.css","webpack://Gp/./src/packages/CSS/Controls/Zoom/GPFzoomStyle.css","webpack://Gp/./src/packages/CSS/Controls/FullScreen/GPFfullScreenStyle.css","webpack://Gp/./src/packages/CSS/Controls/OverviewMap/GPFoverviewMapStyle.css","webpack://Gp/./src/packages/CSS/Controls/Legends/GPFlegendsStyle.css","webpack://Gp/./src/packages/CSS/Controls/Catalog/GPFcatalogStyle.css","webpack://Gp/./src/packages/CSS/Controls/Territories/GPFterritoriesStyle.css","webpack://Gp/./src/packages/CSS/Controls/ControlList/GPFcontrolListStyle.css"],"sourcesContent":["/**\n* Map loading\n* @sample\n* function setMap(map) {\n* var center = this._createLoadingElement();\n* map.getViewport().appendChild(center);\n* center.className = \"\"; // invisible !\n* center.className = \"GPmapLoadingVisible\"; // visible !\n* }\n*\n* function _createLoadingElement() {\n* var div = document.createElement(\"div\");\n* div.id = \"GPmapLoading\";\n* div.className = \"\";\n* return div;\n* }\n*/\n\n#GPmapLoading {\n display: none;\n position: absolute;\n z-index: 50;\n top: 50%;\n left: 50%;\n width: 50px;\n height: 50px;\n margin-top: -25px;\n margin-left: -25px;\n}\n\n#GPmapLoading.GPmapLoadingVisible {\n display: block;\n}\n\n#GPmapLoading {\n background-image: url(\"img/waiting.gif\");\n}\n","/*********************/\r\n/* Widgets : general */\r\n/*********************/\r\n\r\n.GPwidget {\r\n position: absolute;\r\n pointer-events: auto;\r\n font-family: \"Helvetica Neue\",Arial,Helvetica,sans-serif;\r\n font-size: 13px;\r\n color: #333;\r\n}\r\n\r\n.GPwidget input[type='text'],\r\n.GPwidget input[type='button'] {\r\n -webkit-appearance: none;\r\n appearance: none;\r\n color: #333333;\r\n}\r\n\r\n.GPwidget input[type=\"checkbox\"] {\r\n display: none;\r\n}\r\n\r\n.GPwidget select {\r\n padding-left: 3px;\r\n border-radius: 3px;\r\n}\r\n\r\n.GPwidget form {\r\n margin-bottom: 0;\r\n}\r\n\r\n.GPwidget * {\r\n box-sizing: border-box;\r\n background-repeat: no-repeat;\r\n}\r\n\r\n/************/\r\n/* position */\r\n/************/\r\n:root {\r\n --size-per-row: 32px;\r\n}\r\n#position-container-top-left,\r\n#position-container-top-right,\r\n#position-container-bottom-left,\r\n#position-container-bottom-right {\r\n border-style: solid;\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n /* crée un décalage sur le searchEngine */\r\n /* align-items: center; */\r\n width: var(--size-per-row);\r\n min-height: var(--size-per-row);\r\n /* padding: 5px; */\r\n}\r\n\r\n#position-container-top-left,\r\n#position-container-top-right {\r\n top: 0;\r\n}\r\n\r\n#position-container-top-left {\r\n float: left;\r\n left: 0;\r\n}\r\n#position-container-top-right {\r\n float: right;\r\n right: 0;\r\n}\r\n\r\n#position-container-bottom-left,\r\n#position-container-bottom-right {\r\n bottom: 0px;\r\n}\r\n\r\n#position-container-bottom-right {\r\n float: right;\r\n right: 0px;\r\n}\r\n#position-container-bottom-left {\r\n float: left;\r\n left: 0px;\r\n}\r\n\r\n/******************/\r\n/* General panels */\r\n/******************/\r\n\r\n.GPpanel {\r\n box-shadow: 0 0 6px #000;\r\n border-radius: 4px;\r\n padding: unset;\r\n border: unset;\r\n background-color: #FFF;\r\n}\r\n\r\n.GPpanel {\r\n}\r\n\r\n.GPpanelHeader {\r\n position: relative;\r\n width: 100%;\r\n height: 32px;\r\n padding: 3px;\r\n background-color: #9DB1BD;\r\n border-top-left-radius: 4px;\r\n border-top-right-radius: 4px;\r\n}\r\n\r\n.GPpanelTitle {\r\n width: 100%;\r\n height: 100%;\r\n text-align: center;\r\n font-weight: bold;\r\n line-height: 26px;\r\n border-top-left-radius: 2px;\r\n border-top-right-radius: 2px;\r\n background-color: #366291;\r\n color: #FFF;\r\n}\r\n\r\n.GPpanelFooter {}\r\n\r\n.GPpanelIcon,\r\n.GPresetPicto,\r\n.GPreturnPicto,\r\n.GPpanelClose,\r\n.GPpanelReduce,\r\n.GPpanelInfo {\r\n position: absolute;\r\n width: 26px;\r\n height: 26px;\r\n cursor: pointer;\r\n border: none;\r\n background-color: #366291;\r\n}\r\n\r\n.GPpanelClose {\r\n top: 3px;\r\n right: 3px;\r\n background-position: -27px 0;\r\n}\r\n\r\n.GPreturnPicto {\r\n top: 3px;\r\n left: 3px;\r\n}\r\n\r\n.GPpanelInfo {\r\n top: 3px;\r\n left: 3px;\r\n}\r\n\r\n.GPpanelReduce {\r\n top: 3px;\r\n right: 32px;\r\n}\r\n\r\n.GPresetPicto,\r\n.GPreturnPicto {\r\n border-radius: 3px;\r\n opacity: 1;\r\n}\r\n\r\n/**********************************/\r\n/* Showing/hiding advanced panels */\r\n/**********************************/\r\n\r\n.GPshowAdvancedToolPicto {\r\n position: relative;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n width: 32px;\r\n height: 32px;\r\n padding: 2px;\r\n background-color: rgba(255, 255, 255, 0.4);\r\n border-radius: 4px;\r\n border: 2px solid rgba(255, 255, 255, 0.4) ;\r\n}\r\n\r\n.GPshowAdvancedToolPicto:hover {\r\n background-color: rgba(255, 255, 255, 0.6);\r\n}\r\n\r\n.GPshowAdvancedToolOpen {\r\n position: absolute;\r\n display: block;\r\n box-sizing: border-box;\r\n width: 26px;\r\n height: 26px;\r\n background-color: rgba(0,60,136,0.5);\r\n border-radius: 2px;\r\n}\r\n\r\n.GPshowAdvancedToolPicto:hover .GPshowAdvancedToolOpen {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n\r\n.GPshowOpen {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n\r\n.GPshowOpen:hover {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n\r\n/****************/\r\n/* Calc waiting */\r\n/****************/\r\n\r\n.GPwaitingContainer {\r\n position: absolute;\r\n top: 32px;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n background-color: rgba(255,255,255,0.9);\r\n font-size: 1.5em;\r\n font-weight: bold;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n}\r\n\r\n.GPwaitingContainerVisible {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n}\r\n\r\n.GPwaitingContainerHidden {\r\n display: none;\r\n}\r\n\r\n.GPwaitingContainerInfo {\r\n margin: auto;\r\n}\r\n\r\n.GPwaitingContainerVisible,\r\n.GPwaitingContainerHidden {}\r\n\r\n/***************/\r\n/* Flex inputs */\r\n/***************/\r\n\r\n.GPflexInput {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n transition: max-height 0.3s ease-out, opacity 0.3s ease-out;\r\n}\r\n\r\n/* FIXME tempory hack with :not(.GPlocationOriginHidden) !\r\n.GPflexInput > *:not(.GPlocationOriginHidden) */\r\n.GPflexInput > * {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n border: 1px solid #999;\r\n border-radius: 0;\r\n}\r\n\r\n.GPflexInput *:not(:last-child) {\r\n border-right:none;\r\n}\r\n\r\n.GPflexInput *:first-child {\r\n border-radius: 3px 0 0 3px;\r\n}\r\n\r\n.GPflexInput *:last-child {\r\n border-radius: 0 3px 3px 0;\r\n}\r\n\r\n.GPflexInput > *:not(input) {\r\n /* width: 28px; */\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n.GPflexInput > input {\r\n -webkit-flex: 1;\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding: 0 5px;\r\n min-width: 0;\r\n}\r\n\r\n.GPflexInput > select {\r\n -webkit-flex: 1;\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding-right: 7px;\r\n}\r\n\r\n.GPflexInput > label {\r\n background-color: #F2F2F2;\r\n color: #666;\r\n padding-left: 7px;\r\n padding-right: 9px;\r\n cursor: pointer;\r\n}\r\n\r\n/****************/\r\n/* Submit input */\r\n/****************/\r\n\r\ninput.GPsubmit {\r\n display: block;\r\n width: 80px;\r\n margin: auto;\r\n height: 28px;\r\n line-height: 26px;\r\n padding: 0;\r\n background: none;\r\n border: none;\r\n border-radius: 3px;\r\n font-family: \"Helvetica Neue\",Arial,Helvetica,sans-serif;\r\n color: #FFF;\r\n background-color: #366291;\r\n font-weight: bold;\r\n opacity: 0.8;\r\n transition: opacity 0.2s ease-out;\r\n cursor: pointer;\r\n}\r\n\r\ninput.GPsubmit:hover {\r\n opacity: 1;\r\n}\r\n\r\n/************/\r\n/* elements */\r\n/************/\r\n\r\n.GPselect {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n margin: auto;\r\n border: 1px solid #999;\r\n color: #333;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlabel {\r\n\r\n}\r\n\r\n.GPinput {\r\n\r\n}\r\n\r\n.GPform {\r\n padding: 15px;\r\n}\r\n\r\n.GPelementInvisible,\r\n.GPelementHidden {\r\n display: none;\r\n visibility: hidden;\r\n opacity: 0%;\r\n}\r\n\r\n.GPelementVisible,\r\n.GPelementShow {\r\n display: block;\r\n visibility: visible;\r\n opacity: 100%;\r\n}\r\n\r\n/********************************/\r\n/* Autocomplete/geocode results */\r\n/********************************/\r\n\r\n.GPautoCompleteList,\r\n.GPadvancedAutoCompleteList {\r\n z-index: 2;\r\n /* display: none; */\r\n /* position: absolute;\r\n max-height: 140px;\r\n background-color: #FFF;\r\n border: 1px solid #999;\r\n overflow-y: hidden; */\r\n}\r\n\r\n.GPadvancedAutoCompleteList {\r\n width: calc(100% - 28px);\r\n border-top: none;\r\n font-size: 0.9em;\r\n}\r\n\r\n.GPautoCompleteProposal {\r\n width: 100%;\r\n height: 28px;\r\n line-height: 16px;\r\n padding: 6px 10px;\r\n color: #5E5E5E;\r\n font-size: 1.0em;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow:ellipsis;\r\n cursor: pointer;\r\n margin-bottom: 0;\r\n}\r\n\r\n.GPautoCompleteProposal:hover {\r\n color: #000000;\r\n background-color: #CEDBEF\r\n}\r\n\r\n/*************************************/\r\n/* Showing additional hidden options */\r\n/*************************************/\r\n\r\n.GPshowMoreOptionsImage {\r\n background-image: url(\"img/GPshowMoreOptions.png\");\r\n}\r\n\r\n.GPshowMoreOptions {\r\n display: block;\r\n position: absolute;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n transition: all 0.5s ease-out 0s;\r\n}\r\n\r\nbutton[aria-pressed=\"true\"].GPshowMoreOptions,\r\ninput[type=\"checkbox\"]:checked + .GPshowMoreOptions {\r\n -webkit-transform: rotateX(180deg);\r\n transform: rotateX(180deg);\r\n /* bottom: 90px; */\r\n}\r\n\r\n/**********************/\r\n/* Feature info popup */\r\n/**********************/\r\n\r\n.gp-feature-info-div {\r\n bottom: 17px ;\r\n position: relative;\r\n max-width: calc(100vw - 80px);\r\n padding: 10px;\r\n border-radius: 10px;\r\n font-size: 0.75em;\r\n font-family: \"Open Sans\", sans-serif;\r\n color: #002A50;\r\n background-color: #FFF;\r\n box-shadow: 0 0 5px #000;\r\n}\r\n\r\n.gp-feature-info-div::before {\r\n content: \"\";\r\n position: absolute;\r\n border-top: 15px solid #FFF;\r\n border-right: 14px solid transparent;\r\n border-left: 14px solid transparent;\r\n bottom: -15px;\r\n margin-left: -14px;\r\n left: 50%;\r\n}\r\n\r\n.gp-feature-info-div .closer {\r\n position: absolute;\r\n display: block;\r\n width: 30px;\r\n height: 30px;\r\n top: 0;\r\n right: 0;\r\n border: none;\r\n cursor: pointer;\r\n border-top-right-radius: 10px;\r\n border-bottom-right-radius: 10px;\r\n background-color: #FFF;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/close-emeraud.svg\");\r\n background-size: 14px 14px;\r\n background-position: center;\r\n}\r\n\r\n.gp-features-content-div {\r\n max-width: 420px;\r\n min-width: 260px;\r\n max-height: 340px;\r\n overflow: auto;\r\n}\r\n\r\n.gp-features-content-div h5,\r\n.gp-features-content-div h6,\r\n.gp-features-content-div p,\r\n.gp-features-content-div ul {\r\n margin: 0;\r\n}\r\n\r\n.gp-features-content-div ul {\r\n padding: 0;\r\n list-style-type: none;\r\n}\r\n\r\n.geoportail-popup-content h5,\r\n.geoportail-popup-content h6,\r\n.geoportail-popup-content p,\r\n.gp-att-name-div,\r\n.gp-att-description-div,\r\n.gp-att-others-div {\r\n padding: 0 10px;\r\n}\r\n\r\n.geoportail-popup-content h5:not(:last-child),\r\n.geoportail-popup-content h6:not(:last-child),\r\n.geoportail-popup-content p:not(:last-child),\r\n.gp-att-description-div:not(:last-child),\r\n.gp-att-others-div:not(:last-child) {\r\n margin-bottom: 15px;\r\n}\r\n\r\n.geoportail-popup-content h5:last-child,\r\n.geoportail-popup-content h6:last-child,\r\n.geoportail-popup-content p:last-child,\r\n.gp-att-description-div:last-child,\r\n.gp-att-others-div:last-child,\r\n.gp-att-name-div {\r\n margin-bottom: 10px;\r\n}\r\n\r\n.geoportail-popup-content h5:first-child,\r\n.geoportail-popup-content h6:first-child,\r\n.geoportail-popup-content p:first-child,\r\n.gp-att-name-div:first-child,\r\n.gp-att-description-div:first-child,\r\n.gp-att-others-div:first-child {\r\n margin-top: 10px;\r\n}\r\n\r\n.gp-att-name-div,\r\n.gp-features-content-div h5 {\r\n padding-right: 35px;\r\n font-weight: bold;\r\n font-size: 1.2em;\r\n text-transform: uppercase;\r\n color: #0B6BA7;\r\n}\r\n\r\n.gp-features-content-div h6 {\r\n font-size: 1.1em;\r\n}\r\n\r\n.gp-att-description-div:not(:last-child),\r\n.gp-att-others-div:not(:last-child) {\r\n padding-bottom: 10px;\r\n border-bottom: 1px dotted #666;\r\n}\r\n\r\n.gpf-radio-btn-group {\r\n display: flex;\r\n gap: 1em;\r\n}\r\n\r\n.gpf-btn-icon {\r\n caret-color: transparent;\r\n}\r\n","[id^=GPdrawingPanel-] {\r\n width: 240px;\r\n}\r\n\r\n.GPshowDrawingPicto {\r\n background-image: url(\"img/GPdrawingOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n.GPdrawingPanelClose {\r\n background-image: url(\"img/GPdrawingOpen.png\");\r\n}\r\n\r\n.GPdrawingLabel,\r\n.GPdrawingCoords {\r\n display: inline-block;\r\n line-height: 20px;\r\n}\r\n\r\n.GPdrawingLabel {\r\n width: 80px;\r\n font-weight: bold;\r\n}\r\n\r\n.GPdrawingCoords {\r\n width: 110px;\r\n}\r\n\r\n/* markers selector */\r\n.marker-input-radio {\r\n display : none ;\r\n}\r\n\r\ninput.marker-input-radio:checked + label {\r\n border: 1px solid red;\r\n}\r\n\r\n/* drawing tools */\r\n.drawing-tool {\r\n border-radius: 10px;\r\n cursor: pointer;\r\n display: block;\r\n height: 40px;\r\n width: 40px;\r\n background-image: url(\"img/drawing-tools.svg\");\r\n background-size: 720px 40px;\r\n background-color: #e9edf0;\r\n border: unset;\r\n}\r\n\r\n.drawing-tool-active {\r\n background-color: #002a50;\r\n}\r\n\r\n\r\n/*\r\n* Drawing tools\r\n*/\r\nbutton[id^=drawing-tool-point-] {\r\n background-position: 0 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-point-].drawing-tool-active {\r\n background-position: -40px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-line-].drawing-tool-active {\r\n background-position: -120px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-line-] {\r\n background-position: -80px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-holes-] {\r\n background-position: -640px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-holes-].drawing-tool-active {\r\n background-position: -680px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-polygon-] {\r\n background-position: -160px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-polygon-].drawing-tool-active {\r\n background-position: -200px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-text-] {\r\n background-position: -240px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-text-].drawing-tool-active {\r\n background-position: -280px 0;\r\n}\r\n\r\n/*\r\n* Editing tools\r\n*/\r\nbutton[id^=drawing-tool-edit-] {\r\n background-position: -320px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-edit-].drawing-tool-active {\r\n background-position: -360px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-display] {\r\n background-position: -400px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-display-].drawing-tool-active {\r\n background-position: -440px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-tooltip] {\r\n background-position: -480px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-tooltip-].drawing-tool-active {\r\n background-position: -520px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-remove] {\r\n background-position: -560px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-remove-].drawing-tool-active {\r\n background-position: -600px 0;\r\n}\r\n\r\n/* section d'export */\r\n\r\ndiv.drawing-tools-flex-display {\r\n justify-content: space-between;\r\n}\r\n\r\nbutton[id^=drawing-export-] {\r\n background-position: 2px 0;\r\n}\r\n\r\n.drawing-button {\r\n margin: auto;\r\n font-size: 0.7em;\r\n height: 30px;\r\n line-height: 30px;\r\n padding-left: 30px;\r\n padding-right: 15px;\r\n /* from site colors-chart */\r\n background-image: url(\"img/drawing-save.svg\");\r\n background-size: 30px 120px;\r\n}\r\n\r\n.tool-form-submit {\r\n border: medium none;\r\n border-radius: 20px;\r\n font-family: \"Helvetica Neue\",Arial,Helvetica,sans-serif;\r\n font-size: 0.9em;\r\n text-align: center;\r\n text-transform: uppercase;\r\n /* from site colors-chart */\r\n background-color: #00b798;\r\n color: #fff;\r\n}\r\n\r\n/*\r\n * popups\r\n */\r\n.gp-label-div,\r\n.gp-styling-div {\r\n position: relative;\r\n top: 17px;\r\n border-radius: 10px;\r\n font-size: 0.75em;\r\n background-color: #FFF;\r\n box-shadow: 0 0 5px #000;\r\n box-sizing: border-box;\r\n border: unset;\r\n}\r\n\r\n.gp-label-div::before,\r\n.gp-styling-div::before {\r\n content: \"\";\r\n position: absolute;\r\n border-bottom: 15px solid #FFF;\r\n border-right: 9px solid transparent;\r\n border-left: 10px solid transparent;\r\n top: -15px;\r\n margin-left: -10px;\r\n left: 50%;\r\n}\r\n\r\n.gp-textarea-att-label-style,\r\n.gp-input-label-style {\r\n border: none;\r\n}\r\n\r\n.gp-textarea-att-label-style {\r\n width: 240px;\r\n height: 80px;\r\n resize: none;\r\n}\r\n\r\n.gp-input-measure-style {\r\n width: 240px;\r\n font-size: 0.75em;\r\n background-color: #FFF;\r\n text-align: center;\r\n border-radius: 10px;\r\n}\r\n\r\n.gp-textarea-att-label-style {\r\n display: block;\r\n}\r\n\r\n.gp-label-div .closer {\r\n border-top-right-radius: 10px;\r\n background-color: #FFF;\r\n}\r\n\r\n.gp-input-label-style {\r\n width: 180px;\r\n}\r\n\r\n/* Label popups */\r\n\r\n.gp-label-div {\r\n padding: 10px;\r\n}\r\n\r\n/* Styling popup */\r\n\r\n.gp-styling-div {\r\n width: 340px;\r\n padding: 20px;\r\n padding-top: 50px;\r\n}\r\n\r\n.gp-styling-div::after {\r\n content: \"Modifier le style\";\r\n position: absolute;\r\n display: block;\r\n width: 280px;\r\n height: 30px;\r\n line-height: 30px;\r\n text-align: center;\r\n left: 30px;\r\n top: 0;\r\n border-bottom: 1px solid #BBB;\r\n font-variant: small-caps;\r\n font-size: 1.2em;\r\n font-weight: bold;\r\n}\r\n\r\n.gp-label-div .gp-styling-button:not([class*=\"closer\"]) {\r\n display: block;\r\n margin: auto;\r\n margin-top: 10px;\r\n}\r\n\r\n.gp-styling-button:not([class*=\"closer\"]) {\r\n display: inline-block;\r\n width: 140px;\r\n height: 24px;\r\n line-height: 24px;\r\n margin-top: 20px;\r\n border-radius: 12px;\r\n text-align: center;\r\n color: #FFF;\r\n background-color: #00B798;\r\n font-weight: bold;\r\n font-size: 0.9em;\r\n text-transform: uppercase;\r\n border: none;\r\n}\r\n\r\n.gp-styling-button:not([class*=\"closer\"]):hover {\r\n color: #00B798;\r\n background-color: #EEF2F5;\r\n}\r\n\r\n.gp-styling-button:not([class*=\"closer\"]) + .gp-styling-button:not([class*=\"closer\"]) {\r\n margin-left: 20px;\r\n}\r\n\r\n.gp-label-div .closer,\r\n.gp-styling-div .closer {\r\n cursor: pointer;\r\n position: absolute;\r\n display: block;\r\n width: 30px;\r\n height: 30px;\r\n top: 0;\r\n right: 0;\r\n border: none;\r\n background-color: transparent;\r\n background-repeat: no-repeat;\r\n background-image: url(\"../../img/close-emeraud.svg\");\r\n background-size: 14px 14px;\r\n background-position: center;\r\n}\r\n\r\n.gp-styling-option {\r\n font-size: 11px;\r\n position: relative;\r\n line-height: 30px;\r\n padding: 0 20px;\r\n}\r\n\r\n.gp-styling-option input {\r\n display: block;\r\n position: absolute;\r\n height: 20px;\r\n top: 6px;\r\n cursor: pointer;\r\n padding: 0;\r\n}\r\n\r\n.gp-styling-option input[type=\"checkbox\"] {\r\n height: 10px;\r\n right: 70px;\r\n padding: 0;\r\n border: none;\r\n background: none;\r\n}\r\n\r\n.gp-styling-option input[type=\"color\"] {\r\n width: 30px;\r\n right: 70px;\r\n padding: 0;\r\n border: none;\r\n background: none;\r\n}\r\n\r\n.gp-styling-option input[type=\"text\"] {\r\n width: 80px;\r\n right: 40px;\r\n padding: 0 5px;\r\n margin: none;\r\n background: none;\r\n border: 1px solid #808080;\r\n color: #0B6BA7;\r\n}\r\n\r\n\r\n/* Styling slider : general */\r\n.gp-styling-option input[type=\"range\"] {\r\n margin: 0;\r\n width: 80px;\r\n right: 40px;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]:focus {\r\n box-shadow: none;\r\n outline: none;\r\n}\r\n\r\n/* Styling slider : Chrome, Safari, Opera */\r\n\r\n.gp-styling-option input[type=\"range\"]::-webkit-slider-runnable-track {\r\n -webkit-appearance: none;\r\n height: 1px;\r\n background-color: #808080;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-webkit-slider-thumb:before {\r\n position: absolute;\r\n top: 0;\r\n right: 50%;\r\n left: -200px;\r\n height: 1px;\r\n pointer-events: none;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-webkit-slider-thumb {\r\n width: 13px;\r\n height: 13px;\r\n -webkit-appearance: none;\r\n background-color: #0B6BA7;\r\n border: none;\r\n border-radius: 50%;\r\n position: relative;\r\n top: -6px;\r\n}\r\n\r\n/* Styling slider : Firefox */\r\n\r\n.gp-styling-option input[type=\"range\"]::-moz-range-track {\r\n width: 70px;\r\n height: 1px;\r\n background-color: #808080;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-moz-range-thumb {\r\n width: 13px;\r\n height: 13px;\r\n background-color: #0B6BA7;\r\n border: none;\r\n border-radius: 50%;\r\n box-shadow: 0;\r\n position: relative;\r\n}\r\n\r\n/* Styling slider : IE */\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-track {\r\n border: 0;\r\n border-color: transparent;\r\n border-radius: 0;\r\n border-width: 0;\r\n color: transparent;\r\n height: 1px;\r\n width: 70px;\r\n background-color: #808080;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-fill-lower,\r\n.gp-styling-option input[type=\"range\"]::-ms-fill-upper {\r\n background: transparent;\r\n border-radius: 0;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-thumb {\r\n width: 13px;\r\n height: 13px;\r\n background-color: #0B6BA7;\r\n border: none;\r\n border-radius: 50%;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-tooltip {\r\n display: none;\r\n}\r\n\r\n\r\n.gp-styling-option .marker-input-radio {\r\n display: none;\r\n}\r\n\r\n.gp-styling-option .marker-label {\r\n display: inline-block;\r\n height: 32px;\r\n padding: 3px;\r\n margin-right: 5px;\r\n margin-bottom: 5px;\r\n cursor: pointer;\r\n}\r\n\r\n.gp-styling-option .marker-input-radio:checked + .marker-label {\r\n padding: 2px;\r\n background-color: rgba(0,183,152,0.5);\r\n border: 1px solid #002A50;\r\n}\r\n\r\n.gp-styling-option .marker-label img {\r\n height: 24px;\r\n}\r\n","/* Geoportal Attribution */\n\n.ol-attribution .gp-control-attribution-image {\n max-height: 30px;\n max-width: inherit;\n vertical-align: middle;\n}\n",".GPpanelHeader {\n padding: unset;\n}\n\n\n[id^=GPelevationPathPanelClose] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: -27px center;\n}\n\n[id^=GPelevationPathProfil] {\n height: 150px;\n width: inherit;\n}\n\n[id^=GPelevationPathProfil] > #profileElevationByDefault > svg {\n position: absolute;\n left: 10px;\n}\n\ndiv[id^=GPelevationPathInformationsContainer] {\n position: absolute;\n top: 32px;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(255, 255, 255, 0.9);\n border-radius: 4px;\n overflow: hidden;\n}\n\n/* CSS : Raw */\n\n#profileElevationRaw {\n resize: none;\n padding: unset;\n}\n\n/* CSS : default */\n\n#profileElevationByDefault {\n display:-webkit-flex;\n display:-webkit-box;\n display:-ms-flexbox;\n display:flex;\n -webkit-box-orient:vertical;\n -webkit-box-direction:normal;\n -webkit-flex-direction:column;\n -ms-flex-direction:column;\n flex-direction:column;\n height:100%;\n}\n\n.altiPathValue {\n font-weight: 700;\n fill: #5E5E5E;\n}\n\n.altiPathCoords {\n font-style: italic;\n fill: #5E5E5E;\n}\n\n\n/* CSS : D3 */\n\n.axis-d3 > text {\n fill: rgb(94, 94, 94);\n font-family: Verdana;\n font-size: 10px;\n opacity: 1;\n text-anchor: end;\n}\n\n.axis-d3 {\n fill: none;\n stroke: #5E5E5E;\n stroke-width: 1;\n shape-rendering: crispEdges;\n}\n\n.area-d3 {\n fill: #C77A04;\n stroke: #5E5E5E;\n stroke-width: 0;\n fill-opacity: 0.4;\n}\n\n.line-d3 {\n fill: none;\n stroke: #C77A04;\n stroke-width: 1px;\n}\n\n.grid-d3 .tick {\n stroke: lightgrey;\n opacity: 0.7;\n}\n\n.grid-d3 path {\n stroke-width: 0;\n}\n\n.grid-d3 .tick {\n stroke: lightgrey;\n opacity: 0.7;\n}\n\n.grid-d3 path {\n stroke-width: 0;\n}\n\n.overlay-d3 {\n fill: none;\n pointer-events: all;\n}\n\n.focusLine-d3 {\n fill: none;\n stroke: #C77A04;\n stroke-width: 0.5px;\n}\n\n.focusCircle-d3 {\n fill: #C77A04;\n}\n\ndiv.tooltip-d3 {\n position: inherit;;\n text-align: left;\n width: 80px;\n height: 45px;\n padding: 5px;\n font: 8px sans-serif;\n background: white;\n border: 0px;\n border-radius: 8px;\n pointer-events: none;\n}\n\n[id^=GPelevationPathPanel-] {\n width: 280px;\n}\n\n[id^=GPelevationPathPanelInfo] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: -75px center;\n}\n\nbutton[id^=\"GPshowElevationPathPicto-\"] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: 1px center;\n}\n/*\n@media (min-width:720px) and (min-height:720px) {\n\n[id^=GPelevationPathPanel] {\ntop: 15px;\nleft: 15px;\n}\n\n}\n\n@media (min-width:720px) and (min-height:520px) {\n\n[id^=GPelevationPathPanel] {\nwidth: 460px;\n}\n\n[id^=GPelevationPathProfil] {\nheight: 220px;\n}\n\n}\n\n@media (max-width:560px), (max-height:340px) {\n\n[id^=GPelevationPathPanel] {\ndisplay: none !important;\n}\n\n}\n*/\n","/* main container */\ndiv[id^=GPexportContainer-] {\n padding: 5px;\n}\n\ndiv[id^=GPexportContainer-] > input.GPsubmit {\n color: white;\n}\n\n/* bouton */\ninput[id^=GPexportButton-] {\n min-width: fit-content;\n padding-left: 25px;\n padding-right: 5px;\n background-image: url(\"img/GPexportSave.svg\");\n background-size: 25px 25px;\n background-repeat: no-repeat;\n}\n\n/* menu */\n.GPexportMenuHidden {\n visibility: hidden;\n}\n\n.GPexportMenuContainer {\n position: relative;\n display: inline-block;\n}\n\n.GPexportMenuContent {\n display: none;\n position: absolute;\n background-color: #f1f1f1;\n min-width: 80px;\n padding: 8px;\n border-radius: 10px;\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n z-index: 1;\n}\n\n.GPexportMenuContent a:hover { background-color: #f1f1f1; }\n\n.GPexportMenuContainer:hover .GPexportMenuContent { display: block; }\n\n/* menu des formats */\n.GPexportMenuContent .container {\n display: block;\n position: relative;\n padding-left: 15px;\n margin-bottom: 5px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n \n.GPexportMenuContent .container input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n}\n \n.GPexportMenuContent .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 12px;\n width: 12px;\n background-color: #eee;\n border-radius: 50%;\n}\n \n.GPexportMenuContent .container:hover input ~ .checkmark {\n background-color: #ccc;\n}\n\n.GPexportMenuContent .container input:checked ~ .checkmark {\n background-color: #366291;\n}\n \n.GPexportMenuContent .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n}\n\n.GPexportMenuContent .container input:checked ~ .checkmark:after {\n display: block;\n}\n \n.GPexportMenuContent .container .checkmark:after {\n top: 4px;\n left: 4px;\n width: 4px;\n height: 4px;\n border-radius: 50%;\n background: white;\n}","/* GET FEATURE INFO */\nbutton[id^=GPgetFeatureInfoPicto][aria-pressed=\"true\"] {\n background-repeat: no-repeat;\n background-position: 1px center;\n}\n\nbutton[id^=GPgetFeatureInfoPicto] {\n background-image: url(\"img/GPactivateGfi.png\");\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n background-position: -25px center;\n /* transition: border-radius 0.5s ease-out 0s, opacity 0.5s ease-out 0s; */\n}\n\n.GPcloseGetFeatureInfo {\n background-image: url(\"../../img/GPclose.png\");\n background-position: 0px center;\n}\n\n.GPgfiLayerButton {\n border: unset;\n background: unset;\n text-align: left;\n font-weight: bold;\n}\n\nbutton[aria-expanded=\"true\"].GPgfiLayerButton span.GPshowGfiLayerFeature {\n -webkit-transform: rotateX(180deg);\n transform: rotateX(180deg);\n}\n\n.GPshowGfiLayerFeature {\n display: inline-block;\n width: 28px;\n height: 28px;\n vertical-align: middle;\n background-image: url(\"img/GPgfiDetails.png\");\n background-position: -26px 0;\n}","/* ISOCHRON */\r\n[id^=GPisochronPanel-] {\r\n width: 280px;\r\n}\r\n\r\n.GPshowIsochronPicto {\r\n background-image: url(\"img/GPisochronOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GPisochronPanelClose {\r\n background-image: url(\"img/GPisochronOpen.png\");\r\n}\r\n\r\n/* Reset picto */\r\n\r\nbutton[id^=GPisochronReset] {\r\n opacity: 0.8;\r\n transition: opacity 0.2s ease-out;\r\n}\r\n\r\nbutton[id^=GPisochronReset]:hover {\r\n opacity: 1;\r\n}\r\n\r\n.GPisochronReset {\r\n background-color: #366291;\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -281px center;\r\n}\r\n\r\n/* Isochron form */\r\nform[id^=GPisochronForm] {\r\n padding: 15px;\r\n}\r\n\r\ndiv[id^=GPisochronChoice] {\r\n margin: auto;\r\n margin-top: 10px;\r\n margin-bottom: 5px;\r\n width: 160px;\r\n -webkit-justify-content: space-between;\r\n -webkit-box-pack: justify;\r\n -ms-flex-pack: justify;\r\n justify-content: space-between;\r\n}\r\n\r\np[id^=GPisochronPointLabelP], p[id^=GPisochronValueChronLabelP] {\r\n margin: 2px 0 5px 0;\r\n}\r\n\r\n.GProuteComputationLabel {\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GPisochronChoiceAlt input:checked + label + span {\r\n color: #366291;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron] + .GPisochronChoiceAltImg {\r\n background-position: -56px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron]:checked + .GPisochronChoiceAltImg {\r\n background-position: -84px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltDist] + .GPisochronChoiceAltImg {\r\n background-position: -112px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltDist]:checked + .GPisochronChoiceAltImg {\r\n background-position: -140px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron] {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n}\r\n\r\n.GPisochronOriginPointerImg,\r\n.GPisochronChoiceAltImg,\r\n.GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n font-size: 0;\r\n}\r\n\r\n.GPisoExclusionsOption {\r\n background-image: url(\"img/GPisochronCheck.png\");\r\n}\r\n\r\n.GPisochronOriginPointerImg {\r\n width: 28px;\r\n background-color: #F2F2F2;\r\n cursor: pointer;\r\n}\r\n\r\n.GPisochronChoiceAlt input {\r\n display: none;\r\n}\r\n\r\n.GPisochronChoiceAltImg {\r\n display: block;\r\n width: 28px;\r\n height: 28px;\r\n margin: auto;\r\n cursor: pointer;\r\n}\r\n\r\n.GPisochronChoiceAlt span {\r\n cursor: pointer;\r\n display:block;\r\n color: #999;\r\n}\r\n\r\n.GPisochronModeLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 5px;\r\n}\r\n\r\ninput[id^=GPisochronTransportCar] + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -168px 0;\r\n}\r\n\r\ninput[id^=GPisochronTransportCar]:checked + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -196px 0;\r\n}\r\n\r\ninput[id^=GPisochronTransportPedestrian] + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -224px 0;\r\n}\r\n\r\ninput[id^=GPisochronTransportPedestrian]:checked + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -252px 0;\r\n}\r\n\r\n.GPisochronTransportChoice input {\r\n display: none;\r\n}\r\n\r\ndiv[id^=GPisochronTransportChoice] > div {\r\n width: 100%;\r\n justify-content: center;\r\n}\r\n\r\ndiv[id^=GPisochronValueChron],\r\ndiv[id^=GPisochronValueDist] {\r\n width: 220px;\r\n margin: 5px auto;\r\n}\r\n\r\n.GPisochronTransportImg {\r\n display: inline-block;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n}\r\n\r\n.GPisochronTransportImg:first-of-type {\r\n margin-left: 18px;\r\n margin-right: 10px;\r\n}\r\n\r\nselect[id^=GPisochronDirectionSelect] {\r\n width: 80px;\r\n margin: 5px auto;\r\n}\r\n\r\n.GPshowIsoExclusionsPicto {\r\n top: unset;\r\n right: 0;\r\n transition: all 0.5s ease-out 0s;\r\n}\r\n\r\n.GPisoExclusionsLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 10px;\r\n font-weight: bold;\r\n line-height: 16px;\r\n}\r\n\r\n.GPisoExclusionsOptions {\r\n display: -webkit-flex;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-justify-content: space-around;\r\n -ms-flex-pack: distribute;\r\n justify-content: space-around;\r\n}\r\n\r\n.GPisoExclusionsOption {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n color: #A77;\r\n background-color: #FEE;\r\n padding-left: 28px;\r\n padding-right: 5px;\r\n border: 1px solid #A77;\r\n border-radius: 3px;\r\n cursor: pointer;\r\n}\r\n\r\ninput:checked + .GPisoExclusionsOption {\r\n background-color: #EFE;\r\n background-position: 0 -28px;\r\n color: #797;\r\n border: 1px solid #797;\r\n}\r\n\r\ninput[id^=GPisochronSubmit-] {\r\n width: fit-content;\r\n padding: 0 10px;\r\n}","\r\n/* Import form */\r\n[id^=\"GPimportPanel-\"] {\r\n width: 340px;\r\n}\r\n\r\n[id^=\"GPimportGetCapPanel-\"],\r\n[id^=\"GPimportMapBoxPanel-\"] {\r\n width: 340px;\r\n}\r\n\r\ndiv[id^=\"GPimportTypeLine-\"] {\r\n border-bottom: 1px solid #999;\r\n padding-bottom: 15px;\r\n margin-bottom: 15px;\r\n}\r\n\r\ndiv[id^=\"GPimportChoice-\"] {\r\n margin-top: 5px;\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GPshowImportPicto {\r\n background-image: url(\"img/GPimportOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GPimportPanelClose,\r\n.GPimportGetCapPanelClose,\r\n.GPimportMapBoxPanelClose {\r\n background-image: url(\"img/GPimportOpen.png\");\r\n}\r\n\r\n.GPimportPanelReturnPicto {\r\n background-color: #366291;\r\n background-image: url(\"../../img/GPreturn.png\");\r\n /* background-position: 3px center; */\r\n}\r\n\r\n.GPimportChoiceAlt input[type=\"radio\"] {\r\n display: none;\r\n}\r\n\r\n.GPimportChoiceAltTxt {\r\n display: block;\r\n line-height: 28px;\r\n color: #BBB;\r\n font-weight: bold;\r\n cursor: pointer;\r\n}\r\n\r\ninput[type=\"radio\"]:checked + .GPimportChoiceAltTxt {\r\n color: #366291;\r\n}\r\n\r\n/* Line inputs */\r\n\r\n.GPimportInputLine {\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n margin-bottom: 10px;\r\n}\r\n\r\n.GPimportInputLine > * {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n border: 1px solid #999;\r\n border-radius: 0;\r\n}\r\n\r\n.GPimportInputLine *:not(:last-child) {\r\n border-right:none;\r\n}\r\n\r\n.GPimportInputLine *:first-child {\r\n border-radius: 3px 0 0 3px;\r\n}\r\n\r\n.GPimportInputLine *:last-child {\r\n border-radius: 0 3px 3px 0;\r\n}\r\n\r\n.GPimportInputLine > *:not(input) {\r\n overflow: hidden;\r\n white-space: nowrap;\r\n -o-text-overflow: ellipsis;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n.GPimportInputLine > input {\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding: 0 5px;\r\n min-width: 0;\r\n}\r\n\r\n.GPimportInputLine > select {\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding-right: 7px;\r\n}\r\n\r\n.GPimportInputLine > label {\r\n background-color: #F2F2F2;\r\n color: #666;\r\n padding-left: 7px;\r\n padding-right: 9px;\r\n cursor: pointer;\r\n}\r\n\r\n\r\n\r\n.GPimportGetCapProposal {\r\n width: 100%;\r\n height: 28px;\r\n line-height: 16px;\r\n padding: 6px 10px;\r\n color: #5E5E5E;\r\n font-size: 1.0em;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n -o-text-overflow:ellipsis;\r\n text-overflow:ellipsis;\r\n cursor: pointer;\r\n list-style-type: none;\r\n}\r\n\r\n.GPimportGetCapRubriqueTitle,\r\n.GPimportMapBoxSourceTitle,\r\n.GPimportMapBoxListSourceTitle {\r\n color: #5E5E5E;\r\n}\r\n\r\n.GPimportGetCapRubrique,\r\n.GPimportGetCapListRubrique,\r\n.GPimportMapBoxSource,\r\n.GPimportMapBoxListSource {\r\n list-style-type: none;\r\n}\r\n\r\nli.GPimportGetCapRubrique:before,\r\nli.GPimportGetCapListRubrique:before,\r\nli.GPimportMapBoxSource:before,\r\nli.GPimportMapBoxListSource:before {\r\n\t/* content: \"→ \"; caractère UTF-8 */\r\n content: \"» \";\r\n}\r\n\r\n.GPimportGetCapProposal:hover,\r\n.GPimportGetCapRubrique:hover,\r\n.GPimportMapBoxSource {\r\n\r\n}\r\n\r\n.GPimportGetCapRubriqueTitle:hover,\r\n.GPimportMapBoxSourceTitle:hover {\r\n color: #000000;\r\n}\r\n\r\n.GPimportGetCapProposal:hover {\r\n color: #000000;\r\n}\r\n\r\n.GPimportMapBoxSourceVisibility,\r\n.GPimportMapBoxSourceStyle,\r\n.GPimportMapBoxSourceFilter,\r\n.GPimportMapBoxSourceScale {\r\n display: inline-block;\r\n margin-left: 15px;\r\n}\r\n\r\n.GPimportMapBoxJsonEdit {\r\n outline: 1px solid #ccc;\r\n padding: 5px;\r\n margin: 5px;\r\n}\r\n.GPimportMapBoxJsonEdithidden {\r\n display: none;\r\n}\r\n\r\n.gp-json-string { color: green; }\r\n.gp-json-number { color: darkorange; }\r\n.gp-json-boolean { color: blue; }\r\n.gp-json-null { color: magenta; }\r\n.gp-json-key { color: red; }\r\n\r\n.GPimportMapBoxSourceVisibilityInput {\r\n display: block !important;\r\n}\r\n\r\n.GPimportMapBoxSourceVisibilityLabel {\r\n\r\n}\r\n\r\n.GPimportMapBoxSourceScale {\r\n}\r\n\r\n[id^=\"GPimportPanelReturnPicto-\"] {\r\n position: absolute;\r\n width: 26px;\r\n height: 26px;\r\n border-radius: 3px;\r\n opacity: 1;\r\n background-position: 0 0;\r\n cursor: pointer;\r\n}","/* LAYER SWITCHER */\r\n\r\n.GPlayerSwitcher_layer {\r\n background-color: #FFF;\r\n}\r\n\r\ndiv[id^=GPlayerSwitcher-] {\r\n height: 32px;\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] + dialog[id^=GPlayersList] {\r\n width: 190px;\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto] {\r\n /* transition: opacity 0.5s ease-out 0s, box-shadow 0.5s ease-out 0s, border 0.5s ease-out 0s, border-radius 0.5s ease-out 0s; */\r\n background-position: -2px center;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/GPshowLayersList.png\");\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] {\r\n border-top-right-radius: 0;\r\n border-top-left-radius: 0;\r\n background-position: -35px center;\r\n /* transition: border-radius 0.5s ease-out 0s, opacity 0.5s ease-out 0s; */\r\n}\r\n\r\n/* Layers list */\r\n.GPpanelBody {\r\n overflow: auto;\r\n max-height: 200px;\r\n}\r\n\r\nbutton[id^=GPlayerInfoClose] {\r\n background-position: -2px center;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/GPlayerInfoClose.png\");\r\n background-color: unset;\r\n}\r\nbutton[id^=GPlayersPanelClose] {\r\n background-position: -2px center;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/GPlayerClose.png\");\r\n}\r\n\r\n.GPpanelIcon {\r\n background-image: url(\"img/layers.svg\");\r\n background-repeat: no-repeat;\r\n background-size: auto auto;\r\n background-position: center center;\r\n}\r\n/* Layer info panel */\r\n\r\n[id^=GPlayerInfoPanel] {\r\n right: 190px;\r\n}\r\n\r\ndiv[id^=GPlayerInfoTitle] {\r\n color: #366291;\r\n border-bottom: 1px solid #366291;\r\n}\r\n\r\n\r\n.GPlayerBasicTools,\r\n.GPlayerAdvancedTools {\r\n position: relative;\r\n width: 100%;\r\n height: 28px;\r\n}\r\n\r\n.GPlayerExtent,\r\n.GPlayerVisibility,\r\n.GPlayerInfo,\r\n.GPlayerInfoOpened,\r\n.GPlayerRemove {\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlayerExtent,\r\n.GPlayerVisibility,\r\n.GPlayerName,\r\n.GPlayerInfo,\r\n.GPlayerInfoOpened,\r\n.GPlayerRemove,\r\n.GPlayerOpacity,\r\n.GPlayerOpacityValue {\r\n position: absolute;\r\n top: 0;\r\n}\r\n\r\n.GPghostLayer {\r\n opacity: 0;\r\n}\r\n\r\n/* Layer basic tools */\r\n\r\n.GPlayerBasicTools {\r\n background-color: #FFF;\r\n}\r\n\r\n\r\n/* Layer advanced tools */\r\n\r\n.GPlayerExtent,\r\n.GPlayerVisibility,\r\n.GPshowLayerAdvancedTools,\r\n.GPlayerInfo,\r\n.GPlayerInfoOpened,\r\n.GPlayerRemove {\r\n background-image: url(\"img/GPlayerTools.png\");\r\n}\r\n\r\n/* Opacity slider : Chrome, Safari, Opera */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-runnable-track {\r\n background: url(\"img/GPopacitySlider.png\");\r\n}\r\n\r\n/* Opacity slider : Firefox */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-moz-range-track {\r\n background: url(\"img/GPopacitySlider.png\");\r\n}\r\n\r\n/* Opacity slider : IE */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-track {\r\n background: url(\"img/GPopacitySlider.png\");\r\n}\r\n\r\n\r\ndiv[id^=GPlayerInfoQuicklook] {\r\n background-image: url(\"img/GPlayerInfo.png\");\r\n}\r\n\r\ndiv[id^=GPlayerInfoClose] {\r\n background-image: url(\"img/GPlayerInfoClose.png\");\r\n}\r\n\r\n.GPlayerInfoLink,\r\n.GPlayerInfoPopup {\r\n background-image: url(\"img/GPlayerInfo.png\");\r\n}\r\n\r\nbutton[id^=GPinfo_ID_],\r\nbutton[id^=GPremove_ID_],\r\nbutton[id^=GPvisibilityPicto_ID_] {\r\n border: none;\r\n background-color: transparent;\r\n}\r\n\r\nbutton[id^=GPvisibilityPicto_ID_][aria-pressed=\"false\"] {\r\n left: 0;\r\n background-position: -28px 0;\r\n}\r\n\r\nbutton[id^=GPvisibilityPicto_ID_][aria-pressed=\"true\"] {\r\n background-position: 0 0;\r\n}\r\n\r\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools {\r\n max-height: 28px;\r\n}\r\n\r\n.GPshowLayerAdvancedTools {\r\n top: 0;\r\n right: 0;\r\n background-position: -112px 0;\r\n}\r\n\r\n.GPlayerInfo {\r\n left: 0;\r\n background-position: -55px 0;\r\n}\r\n\r\n.GPlayerInfoOpened {\r\n left: 0;\r\n background-position: -83px 0;\r\n}\r\n\r\n.GPlayerOpacity {\r\n left: 28px;\r\n width: calc(100% - 100px);\r\n height: 28px;\r\n padding-left: 8px;\r\n}\r\n\r\n.GPlayerOpacityValue {\r\n width: 32px;\r\n left: calc(100% - 60px);\r\n line-height: 28px;\r\n font-size: 10px;\r\n font-style: italic;\r\n cursor: default;\r\n}\r\n\r\n.GPlayerRemove {\r\n right: 0;\r\n background-position: -140px 0;\r\n}\r\n\r\n/* Opacity slider : general */\r\n\r\n.GPlayerOpacity input {\r\n -webkit-appearance: none;\r\n -moz-appearance: none;\r\n background: none;\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n margin: 0;\r\n padding: 0;\r\n overflow: hidden;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]:focus {\r\n box-shadow: none;\r\n outline: none;\r\n}\r\n\r\n/* Opacity slider : Chrome, Safari, Opera */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-runnable-track {\r\n -webkit-appearance: none;\r\n height: 3px;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-thumb:before {\r\n position: absolute;\r\n top: 0;\r\n right: 50%;\r\n left: -200px;\r\n height: 3px;\r\n pointer-events: none;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-thumb {\r\n width: 9px;\r\n height: 17px;\r\n -webkit-appearance: none;\r\n border: 2px solid #FFF;\r\n background-color: #505050;\r\n position: relative;\r\n top: -7px;\r\n}\r\n\r\n/* Opacity slider : Firefox */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-moz-range-track {\r\n width: 80px;\r\n height: 3px;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-moz-range-thumb {\r\n width: 5px;\r\n height: 13px;\r\n border: 2px solid #FFF;\r\n border-radius: 0;\r\n box-shadow: 0;\r\n background-color: #505050;\r\n position: relative;\r\n}\r\n\r\n/* Opacity slider : IE */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-track {\r\n border: 0;\r\n border-color: transparent;\r\n border-radius: 0;\r\n border-width: 0;\r\n color: transparent;\r\n height: 3px;\r\n width: 80px;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-fill-lower,\r\n.GPlayerOpacity input[type=\"range\"]::-ms-fill-upper {\r\n background: transparent;\r\n border-radius: 0;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-thumb {\r\n width: 5px;\r\n height: 13px;\r\n border: 2px solid #FFF;\r\n background-color: #505050;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-tooltip {\r\n display: none;\r\n}\r\n\r\n/* Layer info panel */\r\n\r\n[id^=GPlayerInfoPanel] {\r\n position: absolute;\r\n top: 0;\r\n overflow-y: hidden;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n}\r\n\r\n.GPlayerInfoPanelOpened {\r\n display: block;\r\n}\r\n\r\n.GPlayerInfoPanelClosed {\r\n display: none;\r\n}\r\n\r\n/* div[id^=GPlayerInfoContent] {\r\n position: relative;\r\n width: 280px;\r\n max-height: 200px;\r\n overflow-y: auto;\r\n padding-left: 10px;\r\n padding-right: 10px;\r\n} */\r\n\r\ndiv[id^=GPlayerInfoTitle] {\r\n width: calc(100% - 52px);\r\n margin: auto;\r\n margin-bottom: 10px;\r\n padding-bottom: 5px;\r\n text-align: center;\r\n font-size: 1.1em;\r\n font-weight: bold;\r\n}\r\n\r\ndiv[id^=GPlayerInfoQuicklook] {\r\n position: absolute;\r\n top: -2px;\r\n left: 10px;\r\n width: 20px;\r\n height: 20px;\r\n cursor: pointer;\r\n}\r\n\r\ndiv[id^=GPlayerInfoClose] {\r\n position: absolute;\r\n top: -8px;\r\n right: 10px;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n}\r\n\r\ndiv[id^=GPlayerInfoDescription] {\r\n font-size: 0.9em;\r\n}\r\n\r\ndiv[id^=GPlayerInfoLegend] {\r\n\r\n}\r\n\r\ndiv[id^=GPlayerInfoMetadata] {\r\n\r\n}\r\n\r\n.GPlayerInfoSubtitle {\r\n padding-left: 35px;\r\n font-weight: bold;\r\n margin-top: 10px;\r\n margin-bottom: 4px;\r\n}\r\n\r\n.GPlayerInfoLink,\r\n.GPlayerInfoPopup {\r\n line-height: 20px;\r\n padding-left: 23px;\r\n white-space: nowrap;\r\n overflow-x: hidden;\r\n text-overflow: ellipsis;\r\n color: #999999;\r\n background-repeat: no-repeat;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlayerInfoLink {\r\n background-position: 0 -20px;\r\n}\r\n\r\n.GPlayerInfoLink:hover,\r\n.GPlayerInfoPopup:hover {\r\n color: #333;\r\n}\r\n\r\n.GPlayerInfoLink a,\r\n.GPlayerInfoLink a:visited\r\n.GPlayerInfoLink a:focus\r\n.GPlayerInfoLink a:hover {\r\n text-decoration: none;\r\n color: inherit;\r\n}\r\n\r\n\r\n.GPlayerName {\r\n left: 28px;\r\n width: calc(100% - 56px);\r\n line-height: 28px;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n padding-left: 4px;\r\n cursor: move;\r\n}\r\n\r\n.outOfRange .GPlayerName {\r\n color: #AAA;\r\n}\r\n\r\ndiv[id^=GPlayerInfoContent] {\r\n width: 280px;\r\n}","/* Location */\n[id*=\"GPlocationOriginPointer\"] {\n background-image: url(\"img/GPlocationOptions.png\");\n background-repeat: no-repeat;\n}\n\n[id^=GPlocationStageRemove],\n[id^=GPlocationStageAdd] {\n background-image: url(\"img/GPlocationOptions.png\");\n}\n\n[id^=GPlocationStageRemove],\n[id^=GPlocationStageAdd] {\n width: 28px;\n height: 28px;\n border: none;\n cursor: pointer;\n}\n\n.GPlocationOpen {\n background-color: unset;\n}\n.GPlocationOriginLabel {}\n.GPlocationStageRemove {\n background-position: -84px center;\n}\n.GPlocationStageAdd {\n background-position: -56px center;\n}\n\n[id*=\"GPlocationOriginPointer\"] + .GPlocationOriginPointerImg {\n background-position: -1px center;\n}\n\n[id*=\"GPlocationOriginPointer\"]:checked + .GPlocationOriginPointerImg {\n background-position: -29px center;\n}\n\n.GPlocationStageFlexInput {\n max-height: 28px;\n opacity: 1;\n}\n\nbutton.GPlocationOriginPointerImg[id*=\"GPlocationOriginPointerImg\"] {\n width: 28px;\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n border-right: 1px solid #999;\n}\n\n.GPlocationStageFlexInput {\n margin-bottom: 5px;\n}\n\ndiv[id^=GPlocationAutoCompleteList] {\n\n}\n","/* MEASURELENGTH POSITION */\r\n\r\n\r\n/* Showing/hiding measureLength position panel */\r\n\r\nbutton[id^=\"GPshowMeasureAreaPicto-\"] {\r\n background-image: url(\"img/GPmeasuresOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: -78px center;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAreaPicto-\"][aria-pressed=\"false\"] {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAreaPicto-\"][aria-pressed=\"true\"] {\r\n background-color: rgba(0,60,136,0.7);\r\n}","/* MEASURELENGTH POSITION */\r\n\r\n/* Showing/hiding drawing panel */\r\n\r\nbutton[id^=\"GPshowMeasureLengthPicto-\"] {\r\n background-image: url(\"img/GPmeasuresOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: -24px center;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureLengthPicto-\"][aria-pressed=\"false\"] {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureLengthPicto-\"][aria-pressed=\"true\"] {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n","/* MEASURELENGTH POSITION */\r\n\r\n/* Showing/hiding measureLength position panel */\r\n\r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"] {\r\n background-image: url(\"img/GPmeasuresOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 2px center;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"][aria-pressed=\"false\"] {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"][aria-pressed=\"true\"] {\r\n background-color: rgba(0,60,136,0.7);\r\n}","/* MEASURE TOOL */\n\n.GPmeasureTooltip {\n position: relative;\n background: rgba(0, 0, 0, 0.5);\n border-radius: 4px;\n color: white;\n padding: 4px 8px;\n white-space: nowrap;\n}\n\n.GPmeasureTooltip-measure {\n font-weight: bold;\n}\n\n.GPmeasureTooltip-info {\n font-size: 0.75em;\n text-align: center;\n}\n\n.GPmeasureTooltip-static {\n background-color: #ffcc33;\n color: black;\n border: 1px solid white;\n}\n\n.GPmeasureTooltip-hidden {\n display: none;\n}\n\n.GPmeasureTooltip-measure::before,\n.GPmeasureTooltip-info::before,\n.GPmeasureTooltip-static::before {\n border-top: 6px solid rgba(0, 0, 0, 0.5);\n border-right: 6px solid transparent;\n border-left: 6px solid transparent;\n content: \"\";\n position: absolute;\n bottom: -6px;\n margin-left: -7px;\n left: 50%;\n}\n\n.GPmeasureTooltip-static::before {\n border-top-color: #ffcc33;\n}\n","\n/* General panels */\n[id^=GPmousePositionPanel-] {\n width: 280px;\n}\n\nbutton[id^=\"GPshowMousePositionPicto-\"] {\n background-image: url(\"img/GPmousePositionOpen.png\");\n background-repeat: no-repeat;\n background-position: 1px center;\n}\n\n.GPmousePositionEditTool {\n background-image: url(\"img/GPmousePositionEditCoordinates.png\");\n}\n\nbutton[id^=GPmousePositionPanelClose] {\n background-image: url(\"img/GPmousePositionOpen.png\");\n}\n\n/* Map center localisation */\n\n.GPmousePositionLabel,\n.GPmousePositionCoords {\n display: inline-block;\n line-height: 20px;\n}\n\n.GPmousePositionLabel {\n width: 100px;\n font-weight: bold;\n}\n\n.GPmousePositionCoords {\n width: 110px;\n}\n\n/* Showing settings */\n\n.GPshowMousePositionSettingsPicto {\n bottom: 5px;\n right: 0;\n transition: all 0.5s ease-out 0s;\n}\n\n.GPmousePositionSettingsLabel {\n display: block;\n margin: auto;\n text-align: center;\n font-weight: bold;\n line-height: 16px;\n}\n\n.GPmousePositionSettingsSelect {\n width: 180px;\n margin-top: 5px;\n margin-inline: auto;\n}\n\n/* sexagesimal coordinates */\n\n.GPSexagesimal, .GPSexagesimalsec {\n margin:0;\n border: 1px solid rgb(204, 204, 204);\n border-radius: 4px;\n}\n\ninput:read-only.GPSexagesimal, input:read-only.GPSexagesimalsec {\n text-align: right;\n}\n\n\n.GPmousePositionSexagesimalLabel {\n font-size: 1.2em;\n vertical-align: middle;\n padding: 0;\n}\n\n/* direction N/S ou E/O */\nselect.GPmousePositionDirection {\n border: 1px solid #999;\n margin-left: 2px;\n}\n\nselect.GPmousePositionDirection:disabled{\n border: none;\n background: transparent;\n color: black;\n /*For FireFox*/\n -webkit-appearance: none;\n /*For Chrome*/\n -moz-appearance: none;\n}\n\n/*For IE10+*/\nselect.GPmousePositionDirection:disabled::-ms-expand {\n display: none;\n}\nselect.GPmousePositionDirection:disabled::-ms-value {\n color: black;\n}\n\n.GPmousePositionUnits,\n.GPmousePositionAltitudeUnits {\n margin-left: 5px;\n}\n\n/* EDIT COORDINATES TOOLS */\n.GPmousePositionPanelEditTools {\n position: absolute;\n top: 20px;\n right: 5px;\n}\n\n.GPmousePositionEditTool {\n width: 18px;\n height: 18px;\n display: inline-block;\n cursor: pointer;\n}\n","/* REVERSE GEOCODING */\r\n[id^=\"GPreverseGeocodingPanel-\"] {\r\n width: 280px;\r\n}\r\n\r\n.GPshowReverseGeocodingPicto {\r\n background-image: url(\"img/GPreverseGeocodingOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GPreverseGeocodingPanelClose {\r\n background-image: url(\"img/GPreverseGeocodingOpen.png\");\r\n}\r\n\r\n.GPreverseGeocodingReturnPicto {\r\n background-image: url(\"../../img/GPreturn.png\");\r\n background-repeat: no-repeat;\r\n background-position: 0 center;\r\n}\r\n\r\n/* Results panel */\r\n\r\n.GPlocationHighlight {\r\n background-color: rgba(255,200,0,0.25);\r\n color: #222;\r\n}","/* ROUTE */\r\n[id^=GProutePanel-] {\r\n width: 320px;\r\n}\r\n\r\n.GPshowRoutePicto {\r\n background-image: url(\"img/GProuteOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GProutePanelClose {\r\n background-image: url(\"img/GProuteOpen.png\");\r\n}\r\n\r\n/* Route form */\r\nform[id^=GProuteForm] {\r\n padding: 15px;\r\n}\r\n\r\n.GProuteStageFlexInput {\r\n max-height: 28px;\r\n opacity: 1;\r\n}\r\n\r\n.GProuteStageFlexInputHidden {\r\n max-height: 0;\r\n opacity: 0;\r\n overflow: hidden;\r\n}\r\n\r\n.GProutePointLabelP {\r\n margin: 2px 0 5px 0;\r\n}\r\n\r\n.GProuteComputationLabel {\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GProuteOriginPointerImg,\r\n.GProuteStageRemove,\r\ndiv[id^=GProuteStageAdd],\r\n.GProuteTransportImg {\r\n background-image: url(\"img/GProuteOptions.png\");\r\n font-size: 0;\r\n}\r\n\r\n.GProuteFormMini {\r\n max-height: 58px;\r\n}\r\n\r\n.GProuteExclusionsOption {\r\n background-image: url(\"img/GProuteCheck.png\");\r\n}\r\n\r\n.GProuteModeLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GProuteTransportImg {\r\n display: inline-block;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n content-visibility: hidden;\r\n}\r\n\r\n.GProuteTransportImg:first-of-type {\r\n margin-left: 18px;\r\n margin-right: 10px;\r\n}\r\n\r\ninput[id^=GProuteTransportCar] + .GProuteTransportImg {\r\n background-position: -112px 0;\r\n}\r\n\r\ninput[id^=GProuteTransportCar]:checked + .GProuteTransportImg {\r\n background-position: -140px 0;\r\n}\r\n\r\ninput[id^=GProuteTransportPedestrian] + .GProuteTransportImg {\r\n background-position: -168px 0;\r\n}\r\n\r\ninput[id^=GProuteTransportPedestrian]:checked + .GProuteTransportImg {\r\n background-position: -196px 0;\r\n}\r\n\r\ndiv[id^=GProuteTransportChoice] input {\r\n display: none;\r\n}\r\n\r\ndiv[id^=GProuteTransportChoice] .gpf-radio-btn-group {\r\n justify-content: center;\r\n}\r\n\r\nselect[id^=GProuteComputationSelect] {\r\n width: 100px;\r\n}\r\n/* Result panel */\r\n\r\n.GProuteResultsDetailsInstructionHighlight {\r\n background-color: rgba(255,200,0,0.25);\r\n color: #222;\r\n}\r\n\r\n.GProuteResultStage {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n}\r\n\r\n\r\n.GProuteResultStageLabel,\r\n.GProuteResultStageValue,\r\n.GProuteResultsValueLabel {\r\n display: inline-block;\r\n line-height: 18px;\r\n}\r\n\r\n.GProuteResultStageLabel,\r\n.GProuteResultsValueLabel {\r\n color: #666;\r\n}\r\n\r\n.GProuteResultStageLabel {\r\n width: 60px;\r\n}\r\n\r\n.GProuteResultsValueLabel {\r\n width: 65px;\r\n}\r\n\r\n.GProuteResultStageValue {\r\n -webkit-flex: 1;\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n overflow-x: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n/* Exclusions */\r\n\r\n\r\n.GPshowRouteExclusionsPicto {\r\n top: unset;\r\n right: 0;\r\n transition: all 0.3s ease-out 0s;\r\n transform: translateY(-100%);\r\n}\r\n\r\n.GProuteExclusionsLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 8px;\r\n margin-top: 8px;\r\n font-weight: bold;\r\n line-height: 16px;\r\n}\r\n\r\n.GProuteExclusionsOptions {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n -webkit-justify-content: space-around;\r\n -ms-flex-pack: distribute;\r\n justify-content: space-around;\r\n}\r\n\r\n.GProuteExclusionsOption {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n color: #A77;\r\n background-color: #FEE;\r\n padding-left: 28px;\r\n padding-right: 5px;\r\n border: 1px solid #A77;\r\n border-radius: 3px;\r\n cursor: pointer;\r\n}\r\n\r\ninput:checked + .GProuteExclusionsOption {\r\n background-color: #EFE;\r\n background-position: 0 -28px;\r\n color: #797;\r\n border: 1px solid #797;\r\n}\r\n\r\n/* Reset picto */\r\n\r\nbutton[id^=GProuteReset] {\r\n /* background-color: #366291; */\r\n background-image: url(\"img/GProuteOptions.png\");\r\n background-position: -224px center;\r\n opacity: 0.8;\r\n transition: opacity 0.2s ease-out;\r\n}\r\n\r\n/* Results popup */\r\n\r\n.gp-features-content-div {\r\n /* min-width: 240px; */\r\n}\r\n\r\n/* Results details header */\r\ndiv[id^=GProuteResultsValueDist],\r\ndiv[id^=GProuteResultsValueTime] {\r\n color: #366291;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails] + label:hover,\r\ninput[id^=GProuteResultsShowDetails] + label + label:hover {\r\n color: #366291;\r\n}\r\n\r\ndiv[id^=GProuteResultsStages] {\r\n margin-bottom: 15px;\r\n}\r\n\r\ndiv[id^=GProuteResultsValueDist],\r\ndiv[id^=GProuteResultsValueTime] {\r\n display: inline-block;\r\n line-height: 18px;\r\n}\r\n\r\ndiv[id^=GProuteResultsValueDist],\r\ndiv[id^=GProuteResultsValueTime] {\r\n width: 80px;\r\n font-weight: bold;\r\n}\r\n\r\nselect[id^=GProuteResultsComputationSelect] {\r\n width: 100px;\r\n}\r\n\r\ndiv[id^=GProuteResultsNew] {\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 3px;\r\n opacity: 0.8;\r\n background-position: -224px 0;\r\n transition: opacity 0.2s ease-out;\r\n cursor: pointer;\r\n background-color: #366291;\r\n background-image: url(\"img/GProuteOptions.png\");\r\n position: initial;\r\n}\r\n\r\n.GPfakeBorder {\r\n display: inline-block;\r\n height: 14px;\r\n width: 60px;\r\n border-bottom: 1px solid #999;\r\n}\r\n\r\n.GPfakeBorderLeft {\r\n margin-left:15px;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails] + label,\r\ninput[id^=GProuteResultsShowDetails] + label + label {\r\n width: 130px;\r\n line-height: 28px;\r\n vertical-align: top;\r\n text-align: center;\r\n font-weight: bold;\r\n cursor: pointer;\r\n transition: color 0.2s ease-out;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails] + label,\r\ninput[id^=GProuteResultsShowDetails]:checked + label + label {\r\n display: inline-block;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails]:checked + label,\r\ninput[id^=GProuteResultsShowDetails] + label + label {\r\n display: none;\r\n}\r\n\r\ndiv:has(input[id^=GProuteResultsShowDetails]) + div[id^=GProuteResultsDetails] {\r\n max-height: 0;\r\n opacity: 0;\r\n}\r\n\r\ndiv:has(input[id^=GProuteResultsShowDetails]:checked) + div[id^=GProuteResultsDetails] {\r\n max-height: 200px;\r\n opacity: 1;\r\n}\r\n\r\ndiv[id^=GProuteResultsDetails] {\r\n overflow-y: auto;\r\n transition: max-height 0.5s ease-in-out 0.25s, opacity 0.5s ease-in-out 0.25s;\r\n}\r\n\r\n.GProuteResultsDetailsNumber,\r\n.GProuteResultsDetailsInstruction {\r\n display: inline-block;\r\n margin-top: 4px;\r\n line-height: 16px;\r\n color: #666;\r\n}\r\n\r\n.GProuteResultsDetailsNumber {\r\n font-weight: bold;\r\n width: 22px;\r\n text-align: right;\r\n vertical-align: top;\r\n}\r\n\r\n.GProuteResultsDetailsInstruction {\r\n width: calc(100% - 30px);\r\n padding-left: 5px;\r\n}\r\n\r\ninput[id^=GProuteSubmit-] {\r\n width: fit-content;\r\n padding: 0 10px;\r\n}","/* SEARCH ENGINE */\r\n\r\n[id^=\"GPsearchEngine-\"] {\r\n flex-direction: row;\r\n align-items: center;\r\n}\r\n\r\n.position-container-top-left [id^=\"GPsearchEngine-\"],\r\n.position-container-bottom-left [id^=\"GPsearchEngine-\"],\r\n.position-container-top-right [id^=\"GPsearchEngine-\"],\r\n.position-container-bottom-right [id^=\"GPsearchEngine-\"] {\r\n flex-direction: column;\r\n align-items: flex-start;\r\n height: 32px;\r\n}\r\n\r\n.position-container-top-left [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\r\n.position-container-bottom-left [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\r\n.position-container-top-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\r\n.position-container-bottom-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList] {\r\n width: 340px;\r\n position: relative;\r\n top: unset;\r\n}\r\n\r\n.GPshowSearchEnginePicto {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 0 center;\r\n}\r\n\r\n.GPsearchRadioContainer {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -26px center;\r\n background-repeat: no-repeat;\r\n transition: border-radius 0.5s ease-out 0s;\r\n color: transparent;\r\n overflow: hidden;\r\n position: relative;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n width: 32px;\r\n height: 32px;\r\n padding: 2px;\r\n background-color: rgba(0,60,136,0.5);\r\n border-radius: 4px;\r\n border: 2px solid rgba(255, 255, 255, 0.4);\r\n}\r\n\r\n.GPbuttonsContainer {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.GPsearchRadioContainer:hover {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n\r\n.GPshowAdvancedSearch {\r\n background-color: #fff0;\r\n}\r\n\r\n.GPshowAdvancedSearch:hover {\r\n background-color: #fff0;\r\n}\r\n\r\n.GPshowGeolocate {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -102px center;\r\n background-repeat: no-repeat;\r\n transition: border-radius 0.5s ease-out 0s;\r\n margin-right: 5px;\r\n}\r\n\r\n.GPshowSearchByCoordinate {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -76px center;\r\n background-repeat: no-repeat;\r\n transition: border-radius 0.5s ease-out 0s;\r\n}\r\n\r\n.GPsearchInputReset {\r\n background-image: url(\"img/GPsearchEngineClose.png\");\r\n background-position: 0 center;\r\n}\r\n\r\n.gpf-select {\r\n background-color: #FFF;\r\n}\r\n\r\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] {\r\n max-width: 0px;\r\n border: none;\r\n}\r\n\r\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] {\r\n border-top-right-radius: 0;\r\n}\r\n\r\nbutton[id^=GPsearchInputReset] {\r\n border-top-right-radius: 5px;\r\n border-bottom-right-radius: 5px;\r\n width: 32px;\r\n height: 32px;\r\n}\r\n\r\nbutton[id^=GPcoordinateSearchClose],\r\nbutton[id^=GPgeocodeResultsClose],\r\nbutton[id^=GPadvancedSearchClose] {\r\n top: 0;\r\n right: 0;\r\n width: 30px;\r\n height: 32px;\r\n}\r\n\r\nbutton[id^=GPcoordinateSearchClose],\r\nbutton[id^=GPgeocodeResultsClose] {\r\n background-position: 0 0;\r\n}\r\n\r\nbutton[id^=GPadvancedSearchClose] {\r\n background-repeat: no-repeat;\r\n}\r\n\r\nbutton[id^=GPcoordinateSearchClose],\r\nbutton[id^=\"GPgeocodeResultsClose\"] {\r\n background-image: url(\"img/GPsearchEngineClose.png\");\r\n}\r\n\r\nbutton[id^=\"GPadvancedSearchClose\"] {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -50px 3px;\r\n}\r\n\r\nform[id^=GPsearchInput-] {\r\n width: 280px;\r\n}\r\n\r\nform[id^=GPsearchInput-] input {\r\n display: block;\r\n width: 100%;\r\n /* height: 100%; */\r\n border: 1px solid #999;\r\n border-top-right-radius: 5px;\r\n border-bottom-right-radius: 5px;\r\n padding: 0;\r\n padding-right: 30px;\r\n padding-left: 5px;\r\n color: #333;\r\n font-size: 1.0em;\r\n}\r\n\r\nform[id^=GPsearchInput-] input:disabled {\r\n background-color: #DDD;\r\n color: #999;\r\n}\r\n\r\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] {\r\n max-width: 280px;\r\n}\r\n\r\n.GPsearchInputText {\r\n height: 32px;\r\n}\r\n\r\ndialog[id^=GPcoordinateSearchPanel],\r\ndialog[id^=GPadvancedSearchPanel] {\r\n width: 310px;\r\n position: absolute;\r\n top: 35px;\r\n margin-left: 33px;\r\n}\r\n\r\n/* Autocomplete list / geocode results */\r\n\r\n[id^=\"GPautocompleteResults-\"] {\r\n box-shadow: 0 0 6px #000;\r\n}\r\n\r\ndiv[id^=GPautoCompleteList],\r\ndialog[id^=GPgeocodeResultsList] {\r\n width: 280px;\r\n position: absolute;\r\n max-height: 140px;\r\n background-color: var(--background-default-grey);\r\n}\r\n\r\ndiv[id^=GPautoCompleteList] {\r\n top: 35px;\r\n}\r\n\r\ndialog[id^=GPgeocodeResultsList] {\r\n position: absolute;\r\n top: 35px;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n}\r\n\r\ndiv[id^=GPgeocodeResults-] {\r\n width: 100%;\r\n position: relative;\r\n background-color: #FFF;\r\n max-height: 140px;\r\n overflow-y: auto;\r\n}\r\n\r\n.GPcoordinateSearchLabel,\r\n.GPadvancedSearchCodeLabel,\r\n.GPadvancedSearchFilterLabel {\r\n max-width: 105px;\r\n}\r\n\r\n.GPcoordinateSearchSystemsSelect,\r\n.GPcoordinateSearchSystemsLabel,\r\n.GPadvancedSearchCodeLabel,\r\n.GPadvancedSearchCode,\r\n div[id^=GPadvancedSearchFilters] {\r\n margin-top: 15px;\r\n}\r\n\r\n.GPcoordinateSearchSystemsLabel,\r\n.GPcoordinateSearchSystemsSelect,\r\n.GPcoordinateSearchUnitsLabel,\r\n.GPcoordinateSearchUnitsSelect,\r\n.GPcoordinateSearchLabel,\r\n.GPcoordinateSearchInput,\r\n.GPadvancedSearchFilterLabel,\r\n.GPadvancedSearchFilterInput {\r\n margin-bottom: 5px;\r\n}\r\n",".GPshowToolBoxPicto {\n background-repeat: no-repeat;\n background-image: url(\"img/GPtoolBoxMeasureOpen.png\");\n}",".GPzoomIn {\n background-image: url(\"img/zoom-in.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center;\n height: 32px;\n width: 32px;\n border-bottom: unset;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.GPzoomOut {\n background-image: url(\"img/zoom-out.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center;\n height: 32px;\n width: 32px;\n border-top: unset;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.GPzoomIn:hover, .GPzoomOut:hover {\n cursor: pointer;\n}",".ol-custom-full-screen button {\n background-image: url(\"img/full-screen-buttons.png\");\n background-repeat: no-repeat;\n}\n.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=\"false\"] {\n background-position: 0 0;\n}\n.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=\"true\"] {\n background-position: 0 -30px;\n}\n",".GPshowOverviewMap {\n background-image: url(\"img/overviewmap.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: 2px center;\n}","div[id^=GPlegends-] {\n display: none;\n}","div[id^=GPcatalog-] {\n display: block;\n}\n\n.GPshowCatalogPicto {\n background-image: url(\"img/GPcatalogOpen.png\");\n background-repeat: no-repeat;\n background-position: 0px center;\n}\n\ndialog[id^=GPcatalogPanel-] {\n width: 280px;\n}\n\n.GPcatalogPanelClose {\n background-image: url(\"img/GPcatalogOpen.png\");\n}\n\n.GPtabs {}\n.GPtabsList {\n overflow: hidden;\n border: 1px solid #ccc;\n background-color: #f1f1f1;\n list-style-type: none;\n margin: 0;\n padding: 0;\n display: flex;\n}\n.GPtabList {\n flex: 1 1 0px;\n}\n.GPtabButton {\n background-color: inherit;\n float: left;\n border: none;\n outline: none;\n cursor: pointer;\n padding: 14px 16px;\n transition: 0.3s;\n}\n.GPtabButtonActive {\n background-color: #ccc;\n}\n.GPtabContent {\n display: none;\n padding: 6px 12px;\n border: 1px solid #ccc;\n border-top: none;\n}\n.GPtabContentSelected {\n display: block;\n}\n.GPlabelActive:hover {\n background-color: #ccc;\n}\n.GPcatalogButtonSection {\n border: unset;\n background: unset;\n}\nbutton[aria-expanded=\"true\"].GPcatalogButtonSection span.GPshowCatalogAdvancedTools {\n -webkit-transform: rotateX(180deg);\n transform: rotateX(180deg);\n}\n\n.GPshowCatalogAdvancedTools {\n display: inline-block;\n width: 28px;\n height: 28px;\n vertical-align: middle;\n background-image: url(\"img/GPcatalogTools.png\");\n background-position: -26px 0;\n}\n\n#header-search > label {\n display: none;\n}","div[id^=GPterritories-] {\n display: none\n}","div[id^=\"GPcontrolList-\"] .GPshowOpen > span {\n font-size: 24px;\n color: white;\n display: block;\n height: 24px;\n line-height: 24px;\n pointer-events: none;\n}\n\nbutton[id^=\"GPshowControlListPicto-\"][aria-pressed=\"true\"] + dialog {\n width: 200px;\n}\n\n.GPcontrolListPanelClose {\n background-image: url(\"img/close.png\");\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div {\n display: flex;\n flex-direction: row;\n column-gap: 1rem;\n align-items: center;\n padding: 0.5rem 0.5rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div:hover {\n background-color: #EEE;\n cursor: pointer;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button {\n flex-shrink: 0;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button:hover {\n background-color: rgba(0,60,136,0.5);\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/bundle/Classic.js b/dist/bundle/Classic.js index e24ce5fa..f18e80b4 100644 --- a/dist/bundle/Classic.js +++ b/dist/bundle/Classic.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */ /*! diff --git a/dist/bundle/Dsfr.css b/dist/bundle/Dsfr.css index 01f2fa64..49dfc988 100644 --- a/dist/bundle/Dsfr.css +++ b/dist/bundle/Dsfr.css @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */ @@ -55,5 +55,5 @@ * @license Licensed under MIT license * See https://raw.githubusercontent.com/proj4js/proj4js/master/LICENSE.md * @version 2.15.0 - */:root{--size-per-row:44px}.gpf-widget{padding:2px;pointer-events:auto;position:absolute}.gpf-widget-button{width:40px}.gpf-panel{background-color:unset;max-height:100%;position:relative;width:max-content}.gpf-panel form{overflow:auto;padding:0 2rem 2rem}.gpf-panel--hidden{display:none}.gpf-panel__body{display:flex;flex:1 1 auto;flex-direction:column;max-height:100%!important;min-height:0;overflow:unset;position:relative}.gpf-panel__title{text-align:left}.gpf-panel__footer{background-color:transparent;justify-content:center;margin-top:0;padding:0}.gpf-panel__footer>input[type=submit]{width:100%}.gpf-panel__content{margin-bottom:unset;padding:unset}.gpf-panel--close,.gpf-panel--info,.gpf-panel--reduce{cursor:pointer;position:relative}.gpf-flex{align-items:center;flex-direction:row}.gpf-flex,.gpf-flex-column{display:flex;justify-content:space-evenly}.gpf-flex-column{flex-direction:column}.gpf-flex-padding{padding:5px}.gpf-hidden{display:none;opacity:0;visibility:hidden}.gpf-visible{display:block;opacity:100%;visibility:visible}.gpf-waiting{background-color:hsla(0,0%,100%,.9);border-radius:4px;bottom:0;font-size:1.5em;font-weight:700;height:inherit;left:0;overflow:hidden;position:absolute;right:0;top:80px}.gpf-waiting--hidden{display:none}.gpf-waiting--visible{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;z-index:4000}.gpf-waiting_info{margin:auto}.gpf-btn-icon.gpf-btn--secondary,.gpf-btn-icon.gpf-btn--tertiary{background-color:var(--background-default-grey)}.gpf-widget>.gpf-btn-icon[aria-pressed=true]{background-color:var(--hover-tint);position:relative}.gpf-widget:has(>.gpf-btn-icon[aria-pressed=true]):after{background-color:var(--background-action-high-blue-france);content:"";height:40px;left:44px;position:absolute;transform:translateY(-40px);width:3px}@supports(-moz-appearance:none){.gpf-widget:has(.gpf-btn-icon[aria-pressed=true]):after{transform:unset}}.gpf-widget>.gpf-btn-icon[aria-label]:hover:before{background-image:conic-gradient(from 56.31deg at 0 50%,transparent 0deg,var(--background-overlap-grey) 0deg,var(--background-overlap-grey) 67.38deg,transparent 67.38deg),conic-gradient(from 56.31deg at 0 50%,transparent 0deg,var(--border-default-grey) 0deg,var(--border-default-grey) 67.38deg,transparent 67.38deg),linear-gradient(90deg,var(--border-default-grey),var(--border-default-grey)),linear-gradient(90deg,var(--background-overlap-grey),var(--background-overlap-grey));background-position:.125rem 50%,0 50%,.375rem 100%,.375rem 100%;background-repeat:no-repeat;background-size:.375rem .5rem,.375rem .5rem,1px,100%,calc(100% - .5rem) 100%;color:var(--text-default-grey);content:attr(aria-label);filter:drop-shadow(0 2px 6px rgba(0,0,18,.16));filter:drop-shadow(var(--overlap-shadow));font-size:.75rem;padding:.5rem .5rem .5rem 1.25rem;position:absolute;top:0;white-space:nowrap;width:fit-content}.position-container-bottom-left .gpf-widget>.gpf-btn-icon[aria-label]:hover:before,.position-container-top-left .gpf-widget>.gpf-btn-icon[aria-label]:hover:before{transform:translateX(24px)}.position-container-bottom-right .gpf-widget>.gpf-btn-icon[aria-label]:hover:before,.position-container-top-right .gpf-widget>.gpf-btn-icon[aria-label]:hover:before{background-image:conic-gradient(from 236.31deg at 100% 50%,transparent 0deg,var(--background-overlap-grey) 0deg,var(--background-overlap-grey) 67.38deg,transparent 67.38deg),conic-gradient(from 236.31deg at 100% 50%,transparent 0deg,var(--border-default-grey) 0deg,var(--border-default-grey) 67.38deg,transparent 67.38deg),linear-gradient(90deg,var(--border-default-grey),var(--border-default-grey)),linear-gradient(90deg,var(--background-overlap-grey),var(--background-overlap-grey));background-position:calc(100% - .125rem) 50%,100% 50%,calc(100% - .375rem) 0,calc(100% - .375rem) 0;background-size:.375rem .5rem,.375rem .5rem,1px 100%,100%;padding:.5rem 1.25rem .5rem .5rem;transform:translateX(calc(-100% - 16px))}.gpf-btn--secondary,.gpf-btn--tertiary{position:relative}.gpf-btn--secondary:after,.gpf-btn--tertiary:after{background-color:var(--text-action-high-blue-france);content:"";height:100%;left:0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask:linear-gradient(#0000,#0000);mask:linear-gradient(#0000,#0000);position:absolute;top:0;width:100%}.gpf-btn--secondary:disabled:after,.gpf-btn--tertiary:disabled:after{background-color:var(--text-disabled-grey)}.position-container-top-left .gpf-button-no-gutter,.position-container-top-right .gpf-button-no-gutter{margin-bottom:-5px}.position-container-bottom-left .gpf-button-no-gutter,.position-container-bottom-right .gpf-button-no-gutter{margin-top:-5px}.gpf-btn-icon-close{float:right;position:absolute;right:.5rem;top:.5rem}.gpf-btn-icon-return{float:left;left:.5rem;position:absolute;top:.5rem}.gpf-btn-icon-return:after{-webkit-mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAANVJREFUKJGd07EuREEYxfGzK0hsQSOhkKxoZButR9B5FJ3Gc2gUKPU6CkGx0XgGuhsaDVH5aSxjc+9u9p7kK74z8/9OJjPTQdqq25qcAPeTDKbSGK8BhjitWftX48nbSU6S7CZZSbKaZDnJ3LTkLdz50xsecYsz7GGxTC7hY3xp1ieO0K2D13FTbH7BPR5Q/QyusFMHBxvFgAvMYwE9HOIDB01wsFmcs/SXcInzSXCwhn6Nv4/rpqsaqUryVOMPkzyPmlmf52uSq1HTMfvH6CV5bwv/6htI1GwnhVkfqAAAAABJRU5ErkJggg==) center no-repeat;mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAANVJREFUKJGd07EuREEYxfGzK0hsQSOhkKxoZButR9B5FJ3Gc2gUKPU6CkGx0XgGuhsaDVH5aSxjc+9u9p7kK74z8/9OJjPTQdqq25qcAPeTDKbSGK8BhjitWftX48nbSU6S7CZZSbKaZDnJ3LTkLdz50xsecYsz7GGxTC7hY3xp1ieO0K2D13FTbH7BPR5Q/QyusFMHBxvFgAvMYwE9HOIDB01wsFmcs/SXcInzSXCwhn6Nv4/rpqsaqUryVOMPkzyPmlmf52uSq1HTMfvH6CV5bwv/6htI1GwnhVkfqAAAAABJRU5ErkJggg==) center no-repeat}.gpf-btn-icon{caret-color:transparent;width:inherit}.gpf-btn-icon-reset:after{background-color:var(--text-action-high-blue-france);-webkit-mask:linear-gradient(#fff 0 0) top /100% 1px,linear-gradient(#fff 0 0) bottom/100% 1px,linear-gradient(#fff 0 0) left /1px 100%,linear-gradient(#fff 0 0) right /1px 100%,url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=) -25px center;mask:linear-gradient(#fff 0 0) top /100% 1px,linear-gradient(#fff 0 0) bottom/100% 1px,linear-gradient(#fff 0 0) left /1px 100%,linear-gradient(#fff 0 0) right /1px 100%,url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=) -25px center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.gpf-btn-icon-info{height:40px;width:40px}.gpf-input{padding-left:5px}.gpf-radio-btn-group{display:flex;gap:1em}.gpf-panel__advancedlist,.gpf-panel__list{background-color:#fff;border:1px solid #999;max-height:140px;overflow-y:hidden;position:absolute;width:inherit;z-index:2}.gpf-panel__advancedlist{border-top:none;font-size:.9em;width:calc(100% - 28px)}.gpf-panel__items:hover{background-color:#cedbef;color:#000}.gpf-panel__items{color:#5e5e5e;cursor:pointer;font-size:1em;height:28px;line-height:16px;overflow:hidden;padding:6px 10px;text-overflow:ellipsis;white-space:nowrap;width:100%}.gpf-panel:after,.gpf-panel:before{flex:0;height:unset}:root{--size-per-row:50px}.position-container-bottom-left,.position-container-bottom-right,.position-container-top-left,.position-container-top-right{display:flex;flex-direction:column;height:calc(100% - 8px);justify-content:flex-start;min-height:var(--size-per-row);position:absolute;width:calc(var(--size-per-row) + 4px)}.position-container-top-left,.position-container-top-right{top:4px}.position-container-top-left{float:left;left:8px}.position-container-top-right{float:right;right:4px}.position-container-bottom-left,.position-container-bottom-right{bottom:4px;justify-content:flex-end}.position-container-bottom-right{float:right;right:4px}.position-container-bottom-left{float:left;left:8px}.gp-feature-info-div{background-color:var(--background-default-grey);bottom:17px;box-shadow:0 0 5px var(--text-default-grey);font-size:.75em;max-width:calc(100vw - 80px);padding:10px;position:relative}.gp-feature-info-div:before{border-left:14px solid transparent;border-right:14px solid transparent;border-top:15px solid var(--background-default-grey);bottom:-15px;content:"";left:50%;margin-left:-14px;position:absolute}.gp-feature-info-div .closer{background-color:var(--background-default-grey);border:none;border-bottom-right-radius:10px;border-top-right-radius:10px;cursor:pointer;display:block;height:30px;position:absolute;right:0;top:0;width:30px}.gp-feature-info-div .closer:after{background-color:var(--text-action-high-blue-france);content:"";height:100%;left:0;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwMDA5MSIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwMDA5MSIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=) center no-repeat;-webkit-mask-size:14px 14px;mask-size:14px 14px;position:absolute;top:0;width:100%}.gp-features-content-div{max-height:340px;max-width:420px;min-width:260px;overflow:auto}.gp-features-content-div h5,.gp-features-content-div h6,.gp-features-content-div p,.gp-features-content-div ul{margin:0}.gp-features-content-div ul{list-style-type:none;padding:0}.geoportail-popup-content h5,.geoportail-popup-content h6,.geoportail-popup-content p,.gp-att-description-div,.gp-att-name-div,.gp-att-others-div{padding:0 10px}.geoportail-popup-content h5:not(:last-child),.geoportail-popup-content h6:not(:last-child),.geoportail-popup-content p:not(:last-child),.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){margin-bottom:15px}.geoportail-popup-content h5:last-child,.geoportail-popup-content h6:last-child,.geoportail-popup-content p:last-child,.gp-att-description-div:last-child,.gp-att-name-div,.gp-att-others-div:last-child{margin-bottom:10px}.geoportail-popup-content h5:first-child,.geoportail-popup-content h6:first-child,.geoportail-popup-content p:first-child,.gp-att-description-div:first-child,.gp-att-name-div:first-child,.gp-att-others-div:first-child{margin-top:10px}.gp-att-name-div,.gp-features-content-div h5{color:#0b6ba7;font-size:1.2em;font-weight:700;padding-right:35px;text-transform:uppercase}.gp-features-content-div h6{font-size:1.1em}.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){border-bottom:1px dotted #666;padding-bottom:10px}.ol-disabled{--idle:transparent;--hover:var(--background-disabled-grey-hover);--active:var(--background-disabled-grey-active);background-color:var(--background-disabled-grey);color:var(--text-disabled-grey);cursor:not-allowed;display:block}.ol-scale-bar,.ol-scale-line{z-index:-1}.fr-collapse{--collapse-max-height:none}.fr-collapse:not(.fr-collapse--expanded):not(.fr-collapsing){--collapse-max-height:0}@media (max-width:576px){.gpf-mobile-fullscreen>button[aria-pressed=true]~dialog{width:100vw!important}.gpf-mobile-fullscreen form div,.gpf-mobile-fullscreen form p{margin:auto;text-align:center}.gpf-mobile-fullscreen .gpf-mobile-form{height:100vh;max-height:unset}.position-container-bottom-left .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-bottom-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-top-left .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-top-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog{left:-8px!important;right:unset!important;top:-4px!important}.position-container-bottom-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-top-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog{left:unset!important;right:-4px!important}}.gpf-btn-icon-drawing:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI1Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTUuMDQgOS40MzcgMTMuNzA0IDguMWwtOC44MTEgOC44MXYxLjMzOUg2LjIzek0xNi4zNzggOC4xbDEuMzM4LTEuMzM4LTEuMzM4LTEuMzM3TDE1LjA0IDYuNzZ6TTcuMDE0IDIwLjE0SDN2LTQuMDEzbDEyLjcxLTEyLjcxYS45NDYuOTQ2IDAgMCAxIDEuMzM3IDBsMi42NzYgMi42NzZjLjM3LjM3LjM3Ljk2OSAwIDEuMzM4eiIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI1Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTUuMDQgOS40MzcgMTMuNzA0IDguMWwtOC44MTEgOC44MXYxLjMzOUg2LjIzek0xNi4zNzggOC4xbDEuMzM4LTEuMzM4LTEuMzM4LTEuMzM3TDE1LjA0IDYuNzZ6TTcuMDE0IDIwLjE0SDN2LTQuMDEzbDEyLjcxLTEyLjcxYS45NDYuOTQ2IDAgMCAxIDEuMzM3IDBsMi42NzYgMi42NzZjLjM3LjM3LjM3Ljk2OSAwIDEuMzM4eiIvPjwvc3ZnPg==) center no-repeat}.gp-label-div,.gp-styling-div{transform:translateY(20px);width:370px}.gp-label-div textarea{margin-bottom:1rem;max-width:100%}.gp-label-div input{width:100%}.gp-styling-option.fr-range--sm[data-fr-js-range]:after,.gp-styling-option.fr-range--sm[data-fr-js-range]:before{top:1.74rem}.drawing-tool{width:40px}.drawing-tool-active{background-color:var(--hover-tint)}button[id^=drawing-tool-point-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOCAxNi40ODUgNC4yNDMtNC4yNDJhNiA2IDAgMSAwLTguNDg2IDB6bTUuNjU3LTIuODI4TDggMTkuMzE0bC01LjY1Ny01LjY1N2E4IDggMCAxIDEgMTEuMzE0IDBNMSAyMGgxNHYySDF6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOCAxNi40ODUgNC4yNDMtNC4yNDJhNiA2IDAgMSAwLTguNDg2IDB6bTUuNjU3LTIuODI4TDggMTkuMzE0bC01LjY1Ny01LjY1N2E4IDggMCAxIDEgMTEuMzE0IDBNMSAyMGgxNHYySDF6Ii8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-line-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zLjQxNCAxNCAxMy41NTYgMy44NThsLTEuNDE0LTEuNDE0TDIgMTIuNTg2VjE0em0uODI5IDJIMHYtNC4yNDNMMTEuNDM1LjMyMmExIDEgMCAwIDEgMS40MTQgMGwyLjgyOSAyLjgyOWExIDEgMCAwIDEgMCAxLjQxNHpNMCAxOGgxOHYySDB6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zLjQxNCAxNCAxMy41NTYgMy44NThsLTEuNDE0LTEuNDE0TDIgMTIuNTg2VjE0em0uODI5IDJIMHYtNC4yNDNMMTEuNDM1LjMyMmExIDEgMCAwIDEgMS40MTQgMGwyLjgyOSAyLjgyOWExIDEgMCAwIDEgMCAxLjQxNHpNMCAxOGgxOHYySDB6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat}button[id^=drawing-tool-polygon-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtMTEgMy4wMyA4LjUzIDYuMTk4LTMuMjU4IDEwLjAyOEg1LjcyOUwyLjQ3IDkuMjI4em0xMC43NDcgNS40NzhMMTEgLjcuMjUzIDguNTA4bDQuMTA1IDEyLjYzNGgxMy4yODR6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtMTEgMy4wMyA4LjUzIDYuMTk4LTMuMjU4IDEwLjAyOEg1LjcyOUwyLjQ3IDkuMjI4em0xMC43NDcgNS40NzhMMTEgLjcuMjUzIDguNTA4bDQuMTA1IDEyLjYzNGgxMy4yODR6Ii8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-text-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNyAwYTEgMSAwIDAgMSAxIDF2My43NTdsLTIgMlYySDJ2MTZoMTR2LTIuNzU4bDItMlYxOWExIDEgMCAwIDEtMSAxSDFhMSAxIDAgMCAxLTEtMVYxYTEgMSAwIDAgMSAxLTF6bTEuNzc4IDYuODA4IDEuNDE0IDEuNDE0TDEyLjQxNCAxNmwtMS40MTYtLjAwMi4wMDItMS40MTJ6TTEwIDEwdjJINXYtMnptMy00djJINVY2eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNyAwYTEgMSAwIDAgMSAxIDF2My43NTdsLTIgMlYySDJ2MTZoMTR2LTIuNzU4bDItMlYxOWExIDEgMCAwIDEtMSAxSDFhMSAxIDAgMCAxLTEtMVYxYTEgMSAwIDAgMSAxLTF6bTEuNzc4IDYuODA4IDEuNDE0IDEuNDE0TDEyLjQxNCAxNmwtMS40MTYtLjAwMi4wMDItMS40MTJ6TTEwIDEwdjJINXYtMnptMy00djJINVY2eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-edit-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0xMi4xMjEgNC4yMjIgNS42NTcgNS42NTctLjcwNyA2LjM2NGMtNi4xMjggMS40MTQtOS43ODIgMi40NzUtMTMuMDggNS4zMDNMMi41OTQgMjAuMTVjMy43MjItMy4zMzEgNy45OTUtNC4zMjggMTIuNjQzLTUuNTJsLjQ0Ni00LjAxOC00LjI5Ny00LjI5Ny00LjAxOC40NDZjLTEuMTkyIDQuNjQ4LTIuMTg5IDguOTItNS41MiAxMi42NDNMLjQ1NCAxOC4wMWMyLjgyOC0zLjMgMy44OS02Ljk1MyA1LjMwMy0xMy4wODF6bS0xLjQxNCA3LjA3QTIgMiAwIDAgMSA3Ljg4IDE0LjEyYTIgMiAwIDEgMSAyLjgyNy0yLjgyOG0zLjg5LTEwLjI1MiA2LjM0NiA2LjM0NmEuNS41IDAgMCAxLS4yNzcuODQ4bC0xLjQ3NC4yMy01LjY1Ni01LjY1Ni4yMTItMS40ODVhLjUuNSAwIDAgMSAuODQ4LS4yODMiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0xMi4xMjEgNC4yMjIgNS42NTcgNS42NTctLjcwNyA2LjM2NGMtNi4xMjggMS40MTQtOS43ODIgMi40NzUtMTMuMDggNS4zMDNMMi41OTQgMjAuMTVjMy43MjItMy4zMzEgNy45OTUtNC4zMjggMTIuNjQzLTUuNTJsLjQ0Ni00LjAxOC00LjI5Ny00LjI5Ny00LjAxOC40NDZjLTEuMTkyIDQuNjQ4LTIuMTg5IDguOTItNS41MiAxMi42NDNMLjQ1NCAxOC4wMWMyLjgyOC0zLjMgMy44OS02Ljk1MyA1LjMwMy0xMy4wODF6bS0xLjQxNCA3LjA3QTIgMiAwIDAgMSA3Ljg4IDE0LjEyYTIgMiAwIDEgMSAyLjgyNy0yLjgyOG0zLjg5LTEwLjI1MiA2LjM0NiA2LjM0NmEuNS41IDAgMCAxLS4yNzcuODQ4bC0xLjQ3NC4yMy01LjY1Ni01LjY1Ni4yMTItMS40ODVhLjUuNSAwIDAgMSAuODQ4LS4yODMiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}button[id^=drawing-tool-display]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNNS44MyAxOEEzLjAwMSAzLjAwMSAwIDEgMSAyIDE0LjE3VjUuODNBMy4wMDEgMy4wMDEgMCAxIDEgNS44MyAyaDguMzRBMy4wMDEgMy4wMDEgMCAxIDEgMTggNS44M3Y4LjM0QTMuMDAxIDMuMDAxIDAgMSAxIDE0LjE3IDE4em0wLTJoOC4zNEEzIDMgMCAwIDEgMTYgMTQuMTdWNS44M0EzIDMgMCAwIDEgMTQuMTcgNEg1LjgzQTMgMyAwIDAgMSA0IDUuODN2OC4zNEEzIDMgMCAwIDEgNS44MyAxNk0zIDRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTE0IDBhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTAgMTRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyTTMgMThhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNNS44MyAxOEEzLjAwMSAzLjAwMSAwIDEgMSAyIDE0LjE3VjUuODNBMy4wMDEgMy4wMDEgMCAxIDEgNS44MyAyaDguMzRBMy4wMDEgMy4wMDEgMCAxIDEgMTggNS44M3Y4LjM0QTMuMDAxIDMuMDAxIDAgMSAxIDE0LjE3IDE4em0wLTJoOC4zNEEzIDMgMCAwIDEgMTYgMTQuMTdWNS44M0EzIDMgMCAwIDEgMTQuMTcgNEg1LjgzQTMgMyAwIDAgMSA0IDUuODN2OC4zNEEzIDMgMCAwIDEgNS44MyAxNk0zIDRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTE0IDBhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTAgMTRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyTTMgMThhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyIi8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-tooltip]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTEuMjQ2IDExSDQuNzU0bC0yIDVILjZMNyAwaDJsNi40IDE2aC0yLjE1NHptLS44LTJMOCAyLjg4NSA1LjU1NCA5ek0yMSA4LjUzNVY4aDJ2OGgtMnYtLjUzNWE0IDQgMCAxIDEgMC02LjkzTTE5IDE0YTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTEuMjQ2IDExSDQuNzU0bC0yIDVILjZMNyAwaDJsNi40IDE2aC0yLjE1NHptLS44LTJMOCAyLjg4NSA1LjU1NCA5ek0yMSA4LjUzNVY4aDJ2OGgtMnYtLjUzNWE0IDQgMCAxIDEgMC02LjkzTTE5IDE0YTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNCIvPjwvc3ZnPg==) center no-repeat}button[id^=drawing-tool-remove]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01IDJWMGgxMHYyaDV2MmgtMnYxNWExIDEgMCAwIDEtMSAxSDNhMSAxIDAgMCAxLTEtMVY0SDBWMnpNNCA0djE0aDEyVjR6bTMgM2gydjhIN3ptNCAwaDJ2OGgtMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01IDJWMGgxMHYyaDV2MmgtMnYxNWExIDEgMCAwIDEtMSAxSDNhMSAxIDAgMCAxLTEtMVY0SDBWMnpNNCA0djE0aDEyVjR6bTMgM2gydjhIN3ptNCAwaDJ2OGgtMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-icon-elevation:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIyIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xMy43NCAxOS44M0gyLjUzTDcuODMgOC42bDMuODUgNy4wNyAxLjcyLS45NC0zLjE2LTUuODEgMi43NC01LjczIDQuMzYgOC41OWMuNTgtLjMgMS4yMS0uNTEgMS44OC0uNjRMMTMuODMuNTRjLS4xNy0uMzMtLjUyLS41Mi0uODktLjU0LS4zNyAwLS43MS4yMi0uODcuNTZMOS4wOSA2LjhsLS40NS0uODNjLS4xOC0uMzItLjUzLS41MS0uODktLjUxLS4zNy4wMS0uNy4yMy0uODYuNTZMLjA5IDIwLjM5YS45ODIuOTgyIDAgMCAwIC44OSAxLjRIMTQuNmE3LjIgNy4yIDAgMCAxLS44Ni0xLjk2Ii8+PHBhdGggZD0iTTE2LjQ4IDEzLjY5djEuNTRoNC45MWwtNS41NiA1LjU1LS4wNy4wNyAxLjA4IDEuMDkgNS42My01LjYzdjQuOTFIMjR2LTcuNTN6Ii8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyNHYyMS45NEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIyIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xMy43NCAxOS44M0gyLjUzTDcuODMgOC42bDMuODUgNy4wNyAxLjcyLS45NC0zLjE2LTUuODEgMi43NC01LjczIDQuMzYgOC41OWMuNTgtLjMgMS4yMS0uNTEgMS44OC0uNjRMMTMuODMuNTRjLS4xNy0uMzMtLjUyLS41Mi0uODktLjU0LS4zNyAwLS43MS4yMi0uODcuNTZMOS4wOSA2LjhsLS40NS0uODNjLS4xOC0uMzItLjUzLS41MS0uODktLjUxLS4zNy4wMS0uNy4yMy0uODYuNTZMLjA5IDIwLjM5YS45ODIuOTgyIDAgMCAwIC44OSAxLjRIMTQuNmE3LjIgNy4yIDAgMCAxLS44Ni0xLjk2Ii8+PHBhdGggZD0iTTE2LjQ4IDEzLjY5djEuNTRoNC45MWwtNS41NiA1LjU1LS4wNy4wNyAxLjA4IDEuMDkgNS42My01LjYzdjQuOTFIMjR2LTcuNTN6Ii8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyNHYyMS45NEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==) center no-repeat}[id^=GPelevationPathPanelInfo]{float:left;left:0;position:absolute;top:0}[id^=GPelevationPathPanel]{height:unset}[id^=GPelevationPathPanelInfo]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDUuMjkyIDUuMjkyIj48ZyBzdHlsZT0ic3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSI+PGNpcmNsZSBjeD0iMTA0LjQ3MSIgY3k9IjQyLjY2NyIgcj0iMi40NDciIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9Ii4zOTciIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIvPjwvZz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTA0Ljk3NiA0My45OWgtMS4wMzR2LS4xNzZoLjA1NWEuMzMuMzMgMCAwIDAgLjE2MS0uMDMuMTMuMTMgMCAwIDAgLjA2Mi0uMDg2IDEgMSAwIDAgMCAuMDEyLS4xNjJ2LS41NjVhLjcuNyAwIDAgMC0uMDE1LS4xNjhxLS4wMTQtLjA1LS4wNzQtLjA3M2EuNy43IDAgMCAwLS4yMDEtLjAyNXYtLjE3NWwuNzgtLjE2NHYxLjE3cTAgLjE2LjA0LjIyLjA0MS4wNTkuMjE0LjA1OXptLS4yMTUtMi4zNjlhLjI3LjI3IDAgMCAxLS4wOC4xOTYuMjcuMjcgMCAwIDEtLjE5Ni4wOC4yNy4yNyAwIDAgMS0uMTk1LS4wODIuMjcyLjI3MiAwIDAgMS0uMDAxLS4zOS4yNy4yNyAwIDAgMSAuMTk2LS4wODFxLjExNiAwIC4xOTcuMDguMDguMDguMDguMTk4eiIgc3R5bGU9ImZpbGw6IzAwMDE5MTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6LjI2NDU4MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDUuMjkyIDUuMjkyIj48ZyBzdHlsZT0ic3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSI+PGNpcmNsZSBjeD0iMTA0LjQ3MSIgY3k9IjQyLjY2NyIgcj0iMi40NDciIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9Ii4zOTciIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIvPjwvZz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTA0Ljk3NiA0My45OWgtMS4wMzR2LS4xNzZoLjA1NWEuMzMuMzMgMCAwIDAgLjE2MS0uMDMuMTMuMTMgMCAwIDAgLjA2Mi0uMDg2IDEgMSAwIDAgMCAuMDEyLS4xNjJ2LS41NjVhLjcuNyAwIDAgMC0uMDE1LS4xNjhxLS4wMTQtLjA1LS4wNzQtLjA3M2EuNy43IDAgMCAwLS4yMDEtLjAyNXYtLjE3NWwuNzgtLjE2NHYxLjE3cTAgLjE2LjA0LjIyLjA0MS4wNTkuMjE0LjA1OXptLS4yMTUtMi4zNjlhLjI3LjI3IDAgMCAxLS4wOC4xOTYuMjcuMjcgMCAwIDEtLjE5Ni4wOC4yNy4yNyAwIDAgMS0uMTk1LS4wODIuMjcyLjI3MiAwIDAgMS0uMDAxLS4zOS4yNy4yNyAwIDAgMSAuMTk2LS4wODFxLjExNiAwIC4xOTcuMDguMDguMDguMDguMTk4eiIgc3R5bGU9ImZpbGw6IzAwMDE5MTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6LjI2NDU4MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSIvPjwvc3ZnPg==) center no-repeat}[id^=GPelevationPathProfil]>#profileElevationByDefault>svg{transform:translateY(1rem)}[id^=GPelevationPathProfil]{height:150px;width:300px}.GPelevationPathProfilWrapper{padding:0 2rem}div[id^=GPelevationPathInformationsContainer]{display:grid;grid-template-columns:50% 50%;padding:0 2rem 1rem;width:calc(300px + 4rem)}.GPelevationPathInformations{display:flex;flex-wrap:wrap;font-size:13px;gap:0 .25rem;margin:0}.GPelevationPathInformations>span{white-space:nowrap}@media (max-width:576px){#GPelevationPathProfil,div[id^=GPelevationPathInformationsContainer]{margin:auto}}.gpf-btn-icon-getfeatureinfo:after,button[id^=GPgetFeatureInfoPicto-][aria-pressed=true]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIyMyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDIzIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik05Ljg2IDE3LjRjMC0uMjguMDItLjU1LjA0LS44MmwtMi41LTEuMjVWMi40M2w0LjY5IDIuMzV2Ni43YTkuMiA5LjIgMCAwIDEgMS45OS0xLjdWNC43MkwxOCAzLjA0di4xOWgtLjAxdjUuMjJhOC43NjggOC43NjggMCAwIDEgMi4wMS4wNFYuNzZjMC0uMDgtLjAyLS4xNi0uMDUtLjI0YS41LjUgMCAwIDAtLjE3LS4xOC42LjYgMCAwIDAtLjIzLS4wOGMtLjA4IDAtLjE3IDAtLjI0LjA0TDEzLjAxIDNsLTYtMy03IDN2MTYuNjFjLS4wMS4wOCAwIC4xNi4wNS4yNC4wNC4wNy4xLjE0LjE2LjE4cy4xNS4wNy4yMy4wOGMuMDggMCAuMTcgMCAuMjQtLjA0bDYuMy0yLjcgMi45OSAxLjVjLS4wOC0uNDgtLjEzLS45Ni0uMTMtMS40NnptLTQuNDUtMS41M0wyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTkuODMgMjAuNHYyaC0ydi0yem0tLjU0LTcuOTdjMS44My4yNCAzLjE1IDEuODYgMy4wMyAzLjdhMy41IDMuNSAwIDAgMS0zLjQ5IDMuMjdoLTF2LTJoMWMuNzkgMCAxLjQ0LS42MSAxLjUtMS40LjA1LS43OS0uNTItMS40OC0xLjMtMS41OS0uNzgtLjEtMS41MS40Mi0xLjY3IDEuMTlsLTEuOTYtLjM5YTMuNDg2IDMuNDg2IDAgMCAxIDMuODktMi43OCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyMi4zM3YyMi40SDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIyMyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDIzIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik05Ljg2IDE3LjRjMC0uMjguMDItLjU1LjA0LS44MmwtMi41LTEuMjVWMi40M2w0LjY5IDIuMzV2Ni43YTkuMiA5LjIgMCAwIDEgMS45OS0xLjdWNC43MkwxOCAzLjA0di4xOWgtLjAxdjUuMjJhOC43NjggOC43NjggMCAwIDEgMi4wMS4wNFYuNzZjMC0uMDgtLjAyLS4xNi0uMDUtLjI0YS41LjUgMCAwIDAtLjE3LS4xOC42LjYgMCAwIDAtLjIzLS4wOGMtLjA4IDAtLjE3IDAtLjI0LjA0TDEzLjAxIDNsLTYtMy03IDN2MTYuNjFjLS4wMS4wOCAwIC4xNi4wNS4yNC4wNC4wNy4xLjE0LjE2LjE4cy4xNS4wNy4yMy4wOGMuMDggMCAuMTcgMCAuMjQtLjA0bDYuMy0yLjcgMi45OSAxLjVjLS4wOC0uNDgtLjEzLS45Ni0uMTMtMS40NnptLTQuNDUtMS41M0wyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTkuODMgMjAuNHYyaC0ydi0yem0tLjU0LTcuOTdjMS44My4yNCAzLjE1IDEuODYgMy4wMyAzLjdhMy41IDMuNSAwIDAgMS0zLjQ5IDMuMjdoLTF2LTJoMWMuNzkgMCAxLjQ0LS42MSAxLjUtMS40LjA1LS43OS0uNTItMS40OC0xLjMtMS41OS0uNzgtLjEtMS41MS40Mi0xLjY3IDEuMTlsLTEuOTYtLjM5YTMuNDg2IDMuNDg2IDAgMCAxIDMuODktMi43OCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyMi4zM3YyMi40SDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+) center no-repeat}.gpf-btn-icon-isocurve:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGNUY1RjUiIGQ9Ik04IDkuOVYxNWMwIC41NS40NSAxIDEgMXMxLS40NSAxLTFWOS45QTQuOTk3IDQuOTk3IDAgMCAwIDEzLjkgNCA1LjAwNCA1LjAwNCAwIDAgMCA4IC4xIDQuOTk3IDQuOTk3IDAgMCAwIDQuMSA2IDUuMDEgNS4wMSAwIDAgMCA4IDkuOU05IDJjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zbTQuMjEgMTAuNDJjLS41NS0uMTItMS4wOS4yNC0xLjIxLjc5cy4yNCAxLjA5Ljc5IDEuMjFDMTUuMDYgMTQuODcgMTYgMTUuNjggMTYgMTZjMCAuNTgtMi40NSAyLTcgMnMtNy0xLjQyLTctMmMwLS4zMi45NC0xLjEzIDMuMjEtMS42Mi41NS0uMTIuOTEtLjY2Ljc5LTEuMjFzLS42Ni0uOTEtMS4yMS0uNzlDMS43NSAxMy4wOCAwIDE0LjM5IDAgMTZjMCAyLjYzIDQuNTMgNCA5IDRzOS0xLjM3IDktNGMwLTEuNjEtMS43NS0yLjkyLTQuNzktMy41OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTh2MjBIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGNUY1RjUiIGQ9Ik04IDkuOVYxNWMwIC41NS40NSAxIDEgMXMxLS40NSAxLTFWOS45QTQuOTk3IDQuOTk3IDAgMCAwIDEzLjkgNCA1LjAwNCA1LjAwNCAwIDAgMCA4IC4xIDQuOTk3IDQuOTk3IDAgMCAwIDQuMSA2IDUuMDEgNS4wMSAwIDAgMCA4IDkuOU05IDJjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zbTQuMjEgMTAuNDJjLS41NS0uMTItMS4wOS4yNC0xLjIxLjc5cy4yNCAxLjA5Ljc5IDEuMjFDMTUuMDYgMTQuODcgMTYgMTUuNjggMTYgMTZjMCAuNTgtMi40NSAyLTcgMnMtNy0xLjQyLTctMmMwLS4zMi45NC0xLjEzIDMuMjEtMS42Mi41NS0uMTIuOTEtLjY2Ljc5LTEuMjFzLS42Ni0uOTEtMS4yMS0uNzlDMS43NSAxMy4wOCAwIDE0LjM5IDAgMTZjMCAyLjYzIDQuNTMgNCA5IDRzOS0xLjM3IDktNGMwLTEuNjEtMS43NS0yLjkyLTQuNzktMy41OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTh2MjBIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat}.gpf-flex-isocurve{justify-content:unset}.gpf-btn-icon-isocurve-reset{background-position:-29px}[id^=GPisochronPanel-] p.gpf-label{margin-bottom:.2rem;margin-top:1rem}[id^=GPisochronPanel-] p.gpf-label:first-child{margin-top:0}div[id^=GPisochronChoice]{gap:1em;justify-content:left}div[id^=GPisochronTransportChoice]>div{margin-top:.5rem}div[id^=GPisochronValueChron],div[id^=GPisochronValueDist]{width:281px}.GPflexInput>input[id^=GPisochronValueChronInput2]{margin-top:0}.GPisoExclusionsOptions{gap:1rem}[id^=GPisochronForm-]>.GPpanelFooter{position:unset}[id^=GPisochronReset-]{min-width:2.5rem}[id^=GPisochronSubmit-]{width:80%}.gpf-btn-icon-import:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDQuNzYyIDUuMjkyIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTA1LjI2NSAzMDUuMTMzaC0yLjY0NnY0LjIzNGgzLjcwNHYtMy4xNzVoLTEuMDU4em0tMy4xNzUtLjI2N2MwLS4xNDUuMTE4LS4yNjIuMjY0LS4yNjJoMy4xNzVsMS4zMjMgMS4zMjN2My43MDJhLjI2NS4yNjUgMCAwIDEtLjI2My4yNjdoLTQuMjM3YS4yNjUuMjY1IDAgMCAxLS4yNjItLjI2MnptMi42NDUgMi4zODR2MS4wNThoLS41Mjl2LTEuMDU4aC0uNzkzbDEuMDU4LTEuMDU4IDEuMDU4IDEuMDU4eiIgc3R5bGU9InN0cm9rZS13aWR0aDouMjY0NTgzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAyLjA5IC0zMDQuNjA0KSIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDQuNzYyIDUuMjkyIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTA1LjI2NSAzMDUuMTMzaC0yLjY0NnY0LjIzNGgzLjcwNHYtMy4xNzVoLTEuMDU4em0tMy4xNzUtLjI2N2MwLS4xNDUuMTE4LS4yNjIuMjY0LS4yNjJoMy4xNzVsMS4zMjMgMS4zMjN2My43MDJhLjI2NS4yNjUgMCAwIDEtLjI2My4yNjdoLTQuMjM3YS4yNjUuMjY1IDAgMCAxLS4yNjItLjI2MnptMi42NDUgMi4zODR2MS4wNThoLS41Mjl2LTEuMDU4aC0uNzkzbDEuMDU4LTEuMDU4IDEuMDU4IDEuMDU4eiIgc3R5bGU9InN0cm9rZS13aWR0aDouMjY0NTgzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAyLjA5IC0zMDQuNjA0KSIvPjwvc3ZnPg==) center no-repeat}.gpf-panel__items_layerimport{border-bottom:1px solid var(--grey-900-175);color:var(--text-action-high-blue-france);height:auto;list-style-type:none}div[id^=GPlayerSwitcher-]{height:44px}button[id^=GPshowLayersListPicto]{width:40px}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{width:350px}.GPlayerSwitcher_layer{background-color:var(--background-overlap-grey);padding-right:40px}.gpf-btn-icon-layerswitcher:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMyIgZD0ibTIyIDguNTUzLTkuODYgNS41NTItOS44Ni01LjU1MkwxMi4xNCAzek0zLjE3OCAxNC45ODYgMiAxNS42NWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4zIiBkPSJNMy4xNzggMTEuNDM3IDIgMTIuMWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMyIgZD0ibTIyIDguNTUzLTkuODYgNS41NTItOS44Ni01LjU1MkwxMi4xNCAzek0zLjE3OCAxNC45ODYgMiAxNS42NWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4zIiBkPSJNMy4xNzggMTEuNDM3IDIgMTIuMWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-icon-ls-visibility{box-shadow:none}.gpf-btn-icon-ls-visibility:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTIuMjE4IDRjNS4wOTIgMCA5LjMyOSAzLjY2NCAxMC4yMTcgOC41LS44ODggNC44MzYtNS4xMjUgOC41LTEwLjIxNyA4LjVTMi44ODggMTcuMzM2IDIgMTIuNUMyLjg4OCA3LjY2NCA3LjEyNSA0IDEyLjIxOCA0bTAgMTUuMTExYzQgMCA3LjQyMy0yLjc4NCA4LjI5LTYuNjExYTguNTA0IDguNTA0IDAgMCAwLTE2LjU4IDAgOC41MDQgOC41MDQgMCAwIDAgOC4yOSA2LjYxMW0wLTIuMzYxYTQuMjUgNC4yNSAwIDEgMSAwLTguNSA0LjI1IDQuMjUgMCAwIDEgMCA4LjVtMC0xLjg4OWEyLjM2MSAyLjM2MSAwIDEgMCAwLTQuNzIyIDIuMzYxIDIuMzYxIDAgMCAwIDAgNC43MjIiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTIuMjE4IDRjNS4wOTIgMCA5LjMyOSAzLjY2NCAxMC4yMTcgOC41LS44ODggNC44MzYtNS4xMjUgOC41LTEwLjIxNyA4LjVTMi44ODggMTcuMzM2IDIgMTIuNUMyLjg4OCA3LjY2NCA3LjEyNSA0IDEyLjIxOCA0bTAgMTUuMTExYzQgMCA3LjQyMy0yLjc4NCA4LjI5LTYuNjExYTguNTA0IDguNTA0IDAgMCAwLTE2LjU4IDAgOC41MDQgOC41MDQgMCAwIDAgOC4yOSA2LjYxMW0wLTIuMzYxYTQuMjUgNC4yNSAwIDEgMSAwLTguNSA0LjI1IDQuMjUgMCAwIDEgMCA4LjVtMC0xLjg4OWEyLjM2MSAyLjM2MSAwIDEgMCAwLTQuNzIyIDIuMzYxIDIuMzYxIDAgMCAwIDAgNC43MjIiLz48L3N2Zz4=) center no-repeat}button[id^=GPvisibilityPicto_ID_][aria-pressed=false]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjQ0FDREMxIiBkPSJNMTcuODgzIDE5LjI5N0ExMC45NSAxMC45NSAwIDAgMSAxMiAyMWMtNS4zOTIgMC05Ljg3OC0zLjg4LTEwLjgxOC05QTExIDExIDAgMCAxIDQuNTIgNS45MzVMMS4zOTQgMi44MDhsMS40MTQtMS40MTQgMTkuNzk5IDE5Ljc5OS0xLjQxNCAxLjQxNHpNNS45MzYgNy4zNUE4Ljk3IDguOTcgMCAwIDAgMy4yMjMgMTJhOS4wMDUgOS4wMDUgMCAwIDAgMTMuMjAxIDUuODM5bC0yLjAyOC0yLjAyOUE0LjUgNC41IDAgMCAxIDguMTkgOS42MDR6bTYuOTc4IDYuOTc4LTMuMjQyLTMuMjQxYTIuNSAyLjUgMCAwIDAgMy4yNDEgMy4yNDFtNy44OTMgMi4yNjUtMS40MzEtMS40MzFBOC45IDguOSAwIDAgMCAyMC43NzggMTIgOS4wMDUgOS4wMDUgMCAwIDAgOS41NTIgNS4zMzhMNy45NzQgMy43NkM5LjIyMSAzLjI3IDEwLjU4IDMgMTIgM2M1LjM5MiAwIDkuODc4IDMuODggMTAuODE5IDlhMTAuOTUgMTAuOTUgMCAwIDEtMi4wMTIgNC41OTNtLTkuMDg0LTkuMDg0UTExLjg2IDcuNSAxMiA3LjVhNC41IDQuNSAwIDAgMSA0LjQ5MiA0Ljc3OHoiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjQ0FDREMxIiBkPSJNMTcuODgzIDE5LjI5N0ExMC45NSAxMC45NSAwIDAgMSAxMiAyMWMtNS4zOTIgMC05Ljg3OC0zLjg4LTEwLjgxOC05QTExIDExIDAgMCAxIDQuNTIgNS45MzVMMS4zOTQgMi44MDhsMS40MTQtMS40MTQgMTkuNzk5IDE5Ljc5OS0xLjQxNCAxLjQxNHpNNS45MzYgNy4zNUE4Ljk3IDguOTcgMCAwIDAgMy4yMjMgMTJhOS4wMDUgOS4wMDUgMCAwIDAgMTMuMjAxIDUuODM5bC0yLjAyOC0yLjAyOUE0LjUgNC41IDAgMCAxIDguMTkgOS42MDR6bTYuOTc4IDYuOTc4LTMuMjQyLTMuMjQxYTIuNSAyLjUgMCAwIDAgMy4yNDEgMy4yNDFtNy44OTMgMi4yNjUtMS40MzEtMS40MzFBOC45IDguOSAwIDAgMCAyMC43NzggMTIgOS4wMDUgOS4wMDUgMCAwIDAgOS41NTIgNS4zMzhMNy45NzQgMy43NkM5LjIyMSAzLjI3IDEwLjU4IDMgMTIgM2M1LjM5MiAwIDkuODc4IDMuODggMTAuODE5IDlhMTAuOTUgMTAuOTUgMCAwIDEtMi4wMTIgNC41OTNtLTkuMDg0LTkuMDg0UTExLjg2IDcuNSAxMiA3LjVhNC41IDQuNSAwIDAgMSA0LjQ5MiA0Ljc3OHoiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-ls-remove{box-shadow:none}.gpf-btn-icon-ls-remove:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNNyA5aDEwbC0xLjQyOCAxMC44ODlIOC40Mjh6Ii8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNiA2aDEyIi8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTEwLjUgNC41aDMiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNNyA5aDEwbC0xLjQyOCAxMC44ODlIOC40Mjh6Ii8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNiA2aDEyIi8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTEwLjUgNC41aDMiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-ls-collapse{box-shadow:none}.gpf-btn-icon-ls-collapse:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;transition:transform .2s ease-out 0s}.gpf-btn-icon-ls-collapse[aria-pressed=true]:after{box-shadow:none;transform:rotate(180deg)}.gpf-btn-icon-ls-dragndrop{box-shadow:none}.gpf-btn-icon-ls-dragndrop:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAxMVY4bDQgNC00IDR2LTNoLTV2NWgzbC00IDQtNC00aDN2LTVINnYzbC00LTQgNC00djNoNVY2SDhsNC00IDQgNGgtM3Y1eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAxMVY4bDQgNC00IDR2LTNoLTV2NWgzbC00IDQtNC00aDN2LTVINnYzbC00LTQgNC00djNoNVY2SDhsNC00IDQgNGgtM3Y1eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{height:56px;max-height:56px}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools>.GPlayerInfo{visibility:visible}button[id^=GPshowAdvancedTools_ID_][aria-pressed=false]{box-shadow:none}button[id^=GPshowAdvancedTools_ID_][aria-pressed="false "]+.GPlayerAdvancedTools>.GPlayerInfo{visibility:hidden}button[id^=GPshowAdvancedTools_ID_]{position:absolute;right:16px;top:12px}div[id^=GPbasicTools_ID_]{align-items:center;display:flex;flex-direction:row-reverse;flex-wrap:nowrap;justify-content:flex-end}div[id^=GPadvancedTools_ID_]{align-content:center;align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;height:inherit;justify-content:space-around}.gpf-btn-header{height:26px;position:absolute;width:26px;z-index:2}.gpf-btn-icon-layers{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48ZyBzdHJva2U9IiMxNTE1OTYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMiIgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBkPSJNMTUuMTkzIDUuNDQ4IDguMSA5LjQ0IDEuMDA5IDUuNDQ4IDguMSAxLjQ1NHpNMS42NTUgMTAuMDc1bC0uODQ3LjQ3OCA3LjA5MSAzLjk5MyA3LjA5Mi0zLjk5My0uODQ4LS40NzgiLz48cGF0aCBkPSJNMS42NTUgNy41MjIuODA4IDhsNy4wOTEgMy45OTRMMTQuOTkxIDhsLS44NDgtLjQ3OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTZ2MTZIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:auto auto}.gpf-panel__body_ls{max-height:300px!important;overflow:auto}.gpf-panel__title_ls{color:#101092;font-size:1rem;font-weight:400;margin:0;padding:12px 15px;position:relative;right:-16px}.gpf-panel__header_ls{align-content:center;align-items:center;background:#e3e3fd;display:flex;flex-direction:row;height:48px}.gpf-btn-icon-ls-info{box-shadow:none}.gpf-btn-icon-ls-info:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI5LjI1IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTMuOTEgMTYuOTk4aC0zLjkwOHYtLjY2MmguMjA4cS40MTggMCAuNjEtLjExNGEuNDguNDggMCAwIDAgLjIzMy0uMzI1cS4wNDQtLjIxLjA0My0uNjExdi0yLjEzN3EwLS40NDYtLjA1NS0uNjM0LS4wNTQtLjE4Ni0uMjgxLS4yNzUtLjIyNy0uMDg2LS43Ni0uMDk0di0uNjZsMi45NTItLjYyMXY0LjQyMXEwIC42MDUuMTUxLjgyOC4xNTEuMjI1LjgwNi4yMjVWMTd6bS0uODEyLTguOTVxMCAuNDMtLjMwNi43NC0uMzA3LjMwNS0uNzM3LjMwNi0uNDI3IDAtLjczNy0uMzE0YTEgMSAwIDAgMS0uMzEzLS43M2MwLS4yNzcuMTAzLS41MzUuMzA4LS43NDFxLjMxLS4zMDkuNzQyLS4zMDljLjI4OCAwIC41NC4xLjc0MS4zMDJxLjMwMi4zMDEuMzAyLjc0OHoiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI5LjI1IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTMuOTEgMTYuOTk4aC0zLjkwOHYtLjY2MmguMjA4cS40MTggMCAuNjEtLjExNGEuNDguNDggMCAwIDAgLjIzMy0uMzI1cS4wNDQtLjIxLjA0My0uNjExdi0yLjEzN3EwLS40NDYtLjA1NS0uNjM0LS4wNTQtLjE4Ni0uMjgxLS4yNzUtLjIyNy0uMDg2LS43Ni0uMDk0di0uNjZsMi45NTItLjYyMXY0LjQyMXEwIC42MDUuMTUxLjgyOC4xNTEuMjI1LjgwNi4yMjVWMTd6bS0uODEyLTguOTVxMCAuNDMtLjMwNi43NC0uMzA3LjMwNS0uNzM3LjMwNi0uNDI3IDAtLjczNy0uMzE0YTEgMSAwIDAgMS0uMzEzLS43M2MwLS4yNzcuMTAzLS41MzUuMzA4LS43NDFxLjMxLS4zMDkuNzQyLS4zMDljLjI4OCAwIC41NC4xLjc0MS4zMDJxLjMwMi4zMDEuMzAyLjc0OHoiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-ls-extent{box-shadow:none}.gpf-btn-icon-ls-extent:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTQuNjA3IDE2LjAyIDYgNy40MTUgNy40MTQgNmw4LjYwNyA4LjYwN1Y3LjAyaDJ2MTFoLTExdi0yeiIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTQuNjA3IDE2LjAyIDYgNy40MTUgNy40MTQgNmw4LjYwNyA4LjYwN1Y3LjAyaDJ2MTFoLTExdi0yeiIvPjwvc3ZnPg==) center no-repeat}[id^=GPlayerInfoPanel]{height:auto;position:absolute}.gpf-label-name{line-height:28px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 96px)}.GPlayerDragNDrop{cursor:move}.gpf-range__output{width:35px}.GPlayerOpacity.fr-range--sm[data-fr-js-range]:after,.GPlayerOpacity.fr-range--sm[data-fr-js-range]:before{top:25%}div[id^=GPlayerInfoContent]{width:350px}.gpf-btn-icon-close.GPlayersPanelClose{right:0;top:0}.gpf-btn-icon-close.GPlayersPanelClose:after{margin-left:-.125rem}.GPlayerAdvancedToolsContextual{display:none}.GPlayerAdvancedToolsContextual:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSI0IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMTggNCI+PHBhdGggZmlsbD0iIzAwMDA5MSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41ODMuMTY3QTEuODQgMS44NCAwIDAgMCAuNzUgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzMyAxLjgzM0ExLjg0IDEuODQgMCAwIDAgNC40MTcgMiAxLjg0IDEuODQgMCAwIDAgMi41ODMuMTY3bTEyLjgzNCAwQTEuODQgMS44NCAwIDAgMCAxMy41ODMgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzNCAxLjgzM0ExLjg0IDEuODQgMCAwIDAgMTcuMjUgMiAxLjg0IDEuODQgMCAwIDAgMTUuNDE3LjE2N005IC4xNjdBMS44NCAxLjg0IDAgMCAwIDcuMTY3IDJjMCAxLjAwOC44MjUgMS44MzMgMS44MzMgMS44MzNBMS44NCAxLjg0IDAgMCAwIDEwLjgzMyAyIDEuODQgMS44NCAwIDAgMCA5IC4xNjciIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSI0IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMTggNCI+PHBhdGggZmlsbD0iIzAwMDA5MSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41ODMuMTY3QTEuODQgMS44NCAwIDAgMCAuNzUgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzMyAxLjgzM0ExLjg0IDEuODQgMCAwIDAgNC40MTcgMiAxLjg0IDEuODQgMCAwIDAgMi41ODMuMTY3bTEyLjgzNCAwQTEuODQgMS44NCAwIDAgMCAxMy41ODMgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzNCAxLjgzM0ExLjg0IDEuODQgMCAwIDAgMTcuMjUgMiAxLjg0IDEuODQgMCAwIDAgMTUuNDE3LjE2N005IC4xNjdBMS44NCAxLjg0IDAgMCAwIDcuMTY3IDJjMCAxLjAwOC44MjUgMS44MzMgMS44MzMgMS44MzNBMS44NCAxLjg0IDAgMCAwIDEwLjgzMyAyIDEuODQgMS44NCAwIDAgMCA5IC4xNjciIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}.GPlayerAdvancedToolsContextual[aria-pressed=true]{background-color:var(--hover-tint);overflow:visible}.GPlayerSwitcher_layer:has(.GPlayerAdvancedToolsContextual[aria-pressed=true]){overflow:visible}[id^=GPlayersList-] .GPpanelBody:has(.GPlayerAdvancedToolsContextual[aria-pressed=true]){overflow:visible}.GPlayerAdvancedTools:has(.GPlayerAdvancedToolsContextual[aria-pressed=true]){position:relative}.GPlayerAdvancedToolsContextual+div{background-color:var(--background-overlap-grey);border-radius:6px;box-shadow:0 0 10px 0 rgba(0,0,0,.15);display:none;flex-direction:column;flex-wrap:wrap;font-size:13px;gap:6px;padding:14px 6px;z-index:12}.GPlayerAdvancedToolsContextual+div>button{padding-left:2rem}.GPlayerAdvancedToolsContextual+div>button[visibility=hidden]{display:none}.GPlayerAdvancedToolsContextual+div>button:after{mask-position:left}.GPlayerAdvancedToolsContextual[aria-pressed=true]+div{display:flex;position:absolute;right:0;top:calc(2.5rem + 8px)}@media (max-width:576px){.GPlayerAdvancedTools{width:calc(100% + 40px)}.GPlayerAdvancedTools>.GPlayerExtent,.GPlayerAdvancedTools>.GPlayerInfo,.GPlayerAdvancedTools>.GPlayerRemove{display:none}.GPlayerAdvancedToolsContextual{display:inline-flex}[id^=GPopacity_ID_]{flex-grow:0.6}}.gpf-btn-icon-pointer:after{background-color:var(--text-inverted-blue-france);content:"";height:100%;left:0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjAzIDE2LjAzMmE3LjM2IDcuMzYgMCAwIDEtNi42NjItNi42NjNILjY3YS42Ny42NyAwIDEgMSAwLTEuMzM4aC43QTcuMzY0IDcuMzY0IDAgMCAxIDguMDMgMS4zNjhWLjY3YS42Ny42NyAwIDEgMSAxLjMzOCAwdi43YTcuMzYgNy4zNiAwIDAgMSA2LjY2MyA2LjY2MmguNjk5YS42Ny42NyAwIDAgMSAwIDEuMzM4aC0uN2E3LjM2IDcuMzYgMCAwIDEtNi42NjIgNi42NjN2LjY5OWEuNjcuNjcgMCAwIDEtMS4zMzggMHpNOS4zNyA0LjY4NVYyLjcxNGE2LjAyNSA2LjAyNSAwIDAgMSA1LjMxNiA1LjMxN2gtMS45N2EuNjcuNjcgMCAwIDAgMCAxLjMzOGgxLjk3YTYuMDI1IDYuMDI1IDAgMCAxLTUuMzE3IDUuMzE3di0xLjk3YS42Ny42NyAwIDAgMC0xLjMzOCAwdjEuOTdBNi4wMjUgNi4wMjUgMCAwIDEgMi43MTQgOS4zN2gxLjk3YS42Ny42NyAwIDAgMCAwLTEuMzM4aC0xLjk3QTYuMDI2IDYuMDI2IDAgMCAxIDguMDMgMi43MTR2MS45N2EuNjcuNjcgMCAwIDAgMS4zMzggMCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjAzIDE2LjAzMmE3LjM2IDcuMzYgMCAwIDEtNi42NjItNi42NjNILjY3YS42Ny42NyAwIDEgMSAwLTEuMzM4aC43QTcuMzY0IDcuMzY0IDAgMCAxIDguMDMgMS4zNjhWLjY3YS42Ny42NyAwIDEgMSAxLjMzOCAwdi43YTcuMzYgNy4zNiAwIDAgMSA2LjY2MyA2LjY2MmguNjk5YS42Ny42NyAwIDAgMSAwIDEuMzM4aC0uN2E3LjM2IDcuMzYgMCAwIDEtNi42NjIgNi42NjN2LjY5OWEuNjcuNjcgMCAwIDEtMS4zMzggMHpNOS4zNyA0LjY4NVYyLjcxNGE2LjAyNSA2LjAyNSAwIDAgMSA1LjMxNiA1LjMxN2gtMS45N2EuNjcuNjcgMCAwIDAgMCAxLjMzOGgxLjk3YTYuMDI1IDYuMDI1IDAgMCAxLTUuMzE3IDUuMzE3di0xLjk3YS42Ny42NyAwIDAgMC0xLjMzOCAwdjEuOTdBNi4wMjUgNi4wMjUgMCAwIDEgMi43MTQgOS4zN2gxLjk3YS42Ny42NyAwIDAgMCAwLTEuMzM4aC0xLjk3QTYuMDI2IDYuMDI2IDAgMCAxIDguMDMgMi43MTR2MS45N2EuNjcuNjcgMCAwIDAgMS4zMzggMCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;position:absolute;top:0;width:100%}.gpf-btn-icon-pointer{border-top-right-radius:4px;min-width:2.5rem;position:relative}.GPlocationStageFlexInput:has(.GPlocationStageRemove)>.gpf-btn-icon-pointer{border-top-right-radius:0}.gpf-btn-icon-remove{height:2.5rem;width:2.5rem}.gpf-btn-icon-remove:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJtMTIgMTAuNiA0Ljk1LTQuOTYgMS40IDEuNEwxMy40MiAxMmw0Ljk2IDQuOTUtMS40IDEuNEwxMiAxMy40MmwtNC45NSA0Ljk2LTEuNC0xLjRMMTAuNTggMTIgNS42MyA3LjA1bDEuNC0xLjR6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJtMTIgMTAuNiA0Ljk1LTQuOTYgMS40IDEuNEwxMy40MiAxMmw0Ljk2IDQuOTUtMS40IDEuNEwxMiAxMy40MmwtNC45NSA0Ljk2LTEuNC0xLjRMMTAuNTggMTIgNS42MyA3LjA1bDEuNC0xLjR6Ii8+PC9zdmc+) center no-repeat}.gpf-btn-icon-add:after{height:2.5rem;-webkit-mask:url(data:image/png;base64,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) -51px center no-repeat;mask:url(data:image/png;base64,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) -51px center no-repeat;width:2.5rem}.GPlocationOriginLabel{display:none;pointer-events:none}[class^=GPlocationPoint-]{padding:0}[id^=GPlocationPoint_]{justify-content:left}.GPlocationStageFlexInput{flex-wrap:wrap;width:281px}.GPlocationStageAdd{flex-basis:65%;min-height:40px;padding:.25rem .75rem .25rem 2.5rem;text-align:left;width:0}.GPlocationOriginLabel{flex-basis:fit-content}.GPlocationOriginPointerImg{flex-basis:2.5em}.GPlocationStageFlexInput input{flex-basis:33%;flex-grow:1}.GPmeasureTooltip{background-color:var(--background-contrast-grey);opacity:.8;padding:.2rem .4rem}.gpf-btn-icon-area:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTcuOTkyIDE2LjM5MmEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2em0xLjQ3NyAzLjU5OC41My41MyAxLjA2Mi0xLjA2LS41My0uNTN6bS0yLjUzNy0yLjUzOCAyLjUzOCAyLjUzOCAxLjA2LTEuMDYtMi41MzgtMi41Mzh6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIwLjUzIDE5Ljk5LjUzLS41M0wyMCAxOC40bC0uNTMuNTN6bS0zLjU5OCAxLjQ3N2EuNzUuNzUgMCAwIDAgMS4wNiAxLjA2MXptMi41MzgtMi41MzctMi41MzggMi41MzcgMS4wNiAxLjA2MSAyLjUzOC0yLjUzOHpNMS40NyA1LjY3OGEuNzUuNzUgMCAwIDAgMS4wNiAxLjA2ek00LjczOSA0LjUzbC41My0uNTMtMS4wNi0xLjA2LS41MzEuNTN6TTIuNTMgNi43NCA0Ljc0IDQuNTMgMy42NzggMy40NyAxLjQ3IDUuNjc4eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im00LjczOSAzLjQ3LS41My0uNTNMMy4xNDggNGwuNTMuNTMxem0xLjE0NyAzLjI3YS43NS43NSAwIDAgMCAxLjA2MS0xLjA2MXpNMy42NzggNC41MyA1Ljg4NiA2Ljc0bDEuMDYxLTEuMDYxTDQuNzQgMy40N3oiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTQuMjA5IDUuMTA1djExLjg4YzAgMS4zOTMuOTQ2IDIuNDc3IDIuMTYxIDIuNDc3SDE5LjEyIi8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTE5LjY3IDEyLjgzNlY2LjA2NWMwLTEuMTYyLS43ODctMi4wNjUtMS44LTIuMDY1aC03LjAzNSIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBkPSJtMTYuMzU3IDExLjk4NC00LjEyMyA0LjA4Nk0xNi4yNzcgNy4zOTMgNy41MjIgMTYuMDdNMTEuNjQ1IDcuMzE0IDcuNTIyIDExLjQiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTcuOTkyIDE2LjM5MmEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2em0xLjQ3NyAzLjU5OC41My41MyAxLjA2Mi0xLjA2LS41My0uNTN6bS0yLjUzNy0yLjUzOCAyLjUzOCAyLjUzOCAxLjA2LTEuMDYtMi41MzgtMi41Mzh6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIwLjUzIDE5Ljk5LjUzLS41M0wyMCAxOC40bC0uNTMuNTN6bS0zLjU5OCAxLjQ3N2EuNzUuNzUgMCAwIDAgMS4wNiAxLjA2MXptMi41MzgtMi41MzctMi41MzggMi41MzcgMS4wNiAxLjA2MSAyLjUzOC0yLjUzOHpNMS40NyA1LjY3OGEuNzUuNzUgMCAwIDAgMS4wNiAxLjA2ek00LjczOSA0LjUzbC41My0uNTMtMS4wNi0xLjA2LS41MzEuNTN6TTIuNTMgNi43NCA0Ljc0IDQuNTMgMy42NzggMy40NyAxLjQ3IDUuNjc4eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im00LjczOSAzLjQ3LS41My0uNTNMMy4xNDggNGwuNTMuNTMxem0xLjE0NyAzLjI3YS43NS43NSAwIDAgMCAxLjA2MS0xLjA2MXpNMy42NzggNC41MyA1Ljg4NiA2Ljc0bDEuMDYxLTEuMDYxTDQuNzQgMy40N3oiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTQuMjA5IDUuMTA1djExLjg4YzAgMS4zOTMuOTQ2IDIuNDc3IDIuMTYxIDIuNDc3SDE5LjEyIi8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTE5LjY3IDEyLjgzNlY2LjA2NWMwLTEuMTYyLS43ODctMi4wNjUtMS44LTIuMDY1aC03LjAzNSIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBkPSJtMTYuMzU3IDExLjk4NC00LjEyMyA0LjA4Nk0xNi4yNzcgNy4zOTMgNy41MjIgMTYuMDdNMTEuNjQ1IDcuMzE0IDcuNTIyIDExLjQiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-length:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIxIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi44OTQgNi4xODdhLjUuNSAwIDAgMCAuNzA3LjcwN3ptMS40MTQtMS40MTRMNi44OTQgNi4xODdsLjcwNy43MDdMOS4wMTUgNS40OHpNOC45NzQgOC4yNjZhLjUuNSAwIDEgMCAuNzA3LjcwOHptMS40MTQtMS40MTRMOC45NzQgOC4yNjZsLjcwNy43MDggMS40MTQtMS40MTV6TTExLjA1MyAxMC4zNDZhLjUuNSAwIDEgMCAuNzA3LjcwN3ptMS40MTQtMS40MTQtMS40MTQgMS40MTQuNzA3LjcwNyAxLjQxNS0xLjQxNHpNMTMuMTMzIDEyLjQyNmEuNS41IDAgMSAwIC43MDcuNzA3em0xLjQxNC0xLjQxNC0xLjQxNCAxLjQxNC43MDcuNzA3IDEuNDE0LTEuNDE0eiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Im0xNi45OCAxMy40NDUtMS40MTQgMS40MTQiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im01LjUzNiAyIDE0LjE0MiAxNC4xNDItMy41MzYgMy41MzZMMiA1LjUzNnoiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIxIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi44OTQgNi4xODdhLjUuNSAwIDAgMCAuNzA3LjcwN3ptMS40MTQtMS40MTRMNi44OTQgNi4xODdsLjcwNy43MDdMOS4wMTUgNS40OHpNOC45NzQgOC4yNjZhLjUuNSAwIDEgMCAuNzA3LjcwOHptMS40MTQtMS40MTRMOC45NzQgOC4yNjZsLjcwNy43MDggMS40MTQtMS40MTV6TTExLjA1MyAxMC4zNDZhLjUuNSAwIDEgMCAuNzA3LjcwN3ptMS40MTQtMS40MTQtMS40MTQgMS40MTQuNzA3LjcwNyAxLjQxNS0xLjQxNHpNMTMuMTMzIDEyLjQyNmEuNS41IDAgMSAwIC43MDcuNzA3em0xLjQxNC0xLjQxNC0xLjQxNCAxLjQxNC43MDcuNzA3IDEuNDE0LTEuNDE0eiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Im0xNi45OCAxMy40NDUtMS40MTQgMS40MTQiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im01LjUzNiAyIDE0LjE0MiAxNC4xNDItMy41MzYgMy41MzZMMiA1LjUzNnoiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-azimuth:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIxIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xOC45NyAxMC4xOGMtLjM2IDAtLjY0LS4xNS0uODYtLjQ0cy0uMzMtLjcyLS4zMy0xLjI3YzAtLjYuMS0xLjE2LjMxLTEuNy4yLS41My40OC0xLjAxLjgzLTEuNDJhMy45IDMuOSAwIDAgMSAxLjE2LS45N2MuNDMtLjIzLjg3LS4zNSAxLjMyLS4zNS4yMyAwIC40NC4wMy42NC4wOC4yLjA2LjM4LjEzLjUzLjIzbC41OC0uMjZoLjI5bC0uNzggNC4zN2MtLjA3LjQzIDAgLjY1LjIyLjY1LjEzIDAgLjI3LS4wNy40My0uMjJzLjMxLS4zOS40Ny0uNzNsLjIxLjA4Yy0uNDkgMS4zMS0xLjEgMS45Ni0xLjg2IDEuOTZxLS41NTUgMC0uODEtLjM5Yy0uMTctLjI2LS4yMi0uNjMtLjE1LTEuMTJoLS4wM2MtLjM2LjUtLjcxLjg4LTEuMDUgMS4xM3MtLjcxLjM4LTEuMTEuMzh6bS4zMS0yLjM3YzAgLjQzLjA0Ljc1LjEzLjk2cy4yNS4zMS40OS4zMS40OC0uMTEuNzEtLjMzLjQ1LS40Ny42NC0uNzVsLjUzLTNjLS4xMS0uMTQtLjIzLS4yNS0uMzYtLjMyYTEgMSAwIDAgMC0uNDctLjExYy0uMzQgMC0uNjMuMTUtLjg4LjQ2cy0uNDUuNzEtLjU4IDEuMmMtLjE0LjQ5LS4yMSAxLjAyLS4yMSAxLjU3eiIvPjxwYXRoIGQ9Ik0yMC45IDE1LjcyaC01LjUyYy0uMDctMy4yNC0xLjUxLTYuMTUtMy43Ny04LjE3bDUuNDUtNi4yM0wxNS41NSAwIDEwIDYuMzVhMTEuMiAxMS4yIDAgMCAwLTUuOTItMS42OWgtMXYyaDFjMS42NyAwIDMuMjMuNDUgNC41OSAxLjIybC0zLjYxIDQuMTNjLS4zMS0uMDgtLjY0LS4xMy0uOTgtLjEzLTIuMjUgMC00LjA5IDEuODMtNC4wOSA0LjA5czEuODMgNC4wOSA0LjA5IDQuMDljMS42MiAwIDMuMDItLjk2IDMuNjgtMi4zM0gyMC45di0yLjAxTTEwLjMgOS4wNWE5LjI1IDkuMjUgMCAwIDEgMy4wOCA2LjY2SDguMTVhNC4wNyA0LjA3IDAgMCAwLTEuMjgtMi43M2wzLjQ0LTMuOTN6bS02LjIxIDljLTEuMTUgMC0yLjA5LS45NC0yLjA5LTIuMDlzLjk0LTIuMDkgMi4wOS0yLjA5IDIuMDkuOTQgMi4wOSAyLjA5LS45NCAyLjA5LTIuMDkgMi4wOSIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMjMuOTh2MjAuMDVIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIxIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xOC45NyAxMC4xOGMtLjM2IDAtLjY0LS4xNS0uODYtLjQ0cy0uMzMtLjcyLS4zMy0xLjI3YzAtLjYuMS0xLjE2LjMxLTEuNy4yLS41My40OC0xLjAxLjgzLTEuNDJhMy45IDMuOSAwIDAgMSAxLjE2LS45N2MuNDMtLjIzLjg3LS4zNSAxLjMyLS4zNS4yMyAwIC40NC4wMy42NC4wOC4yLjA2LjM4LjEzLjUzLjIzbC41OC0uMjZoLjI5bC0uNzggNC4zN2MtLjA3LjQzIDAgLjY1LjIyLjY1LjEzIDAgLjI3LS4wNy40My0uMjJzLjMxLS4zOS40Ny0uNzNsLjIxLjA4Yy0uNDkgMS4zMS0xLjEgMS45Ni0xLjg2IDEuOTZxLS41NTUgMC0uODEtLjM5Yy0uMTctLjI2LS4yMi0uNjMtLjE1LTEuMTJoLS4wM2MtLjM2LjUtLjcxLjg4LTEuMDUgMS4xM3MtLjcxLjM4LTEuMTEuMzh6bS4zMS0yLjM3YzAgLjQzLjA0Ljc1LjEzLjk2cy4yNS4zMS40OS4zMS40OC0uMTEuNzEtLjMzLjQ1LS40Ny42NC0uNzVsLjUzLTNjLS4xMS0uMTQtLjIzLS4yNS0uMzYtLjMyYTEgMSAwIDAgMC0uNDctLjExYy0uMzQgMC0uNjMuMTUtLjg4LjQ2cy0uNDUuNzEtLjU4IDEuMmMtLjE0LjQ5LS4yMSAxLjAyLS4yMSAxLjU3eiIvPjxwYXRoIGQ9Ik0yMC45IDE1LjcyaC01LjUyYy0uMDctMy4yNC0xLjUxLTYuMTUtMy43Ny04LjE3bDUuNDUtNi4yM0wxNS41NSAwIDEwIDYuMzVhMTEuMiAxMS4yIDAgMCAwLTUuOTItMS42OWgtMXYyaDFjMS42NyAwIDMuMjMuNDUgNC41OSAxLjIybC0zLjYxIDQuMTNjLS4zMS0uMDgtLjY0LS4xMy0uOTgtLjEzLTIuMjUgMC00LjA5IDEuODMtNC4wOSA0LjA5czEuODMgNC4wOSA0LjA5IDQuMDljMS42MiAwIDMuMDItLjk2IDMuNjgtMi4zM0gyMC45di0yLjAxTTEwLjMgOS4wNWE5LjI1IDkuMjUgMCAwIDEgMy4wOCA2LjY2SDguMTVhNC4wNyA0LjA3IDAgMCAwLTEuMjgtMi43M2wzLjQ0LTMuOTN6bS02LjIxIDljLTEuMTUgMC0yLjA5LS45NC0yLjA5LTIuMDlzLjk0LTIuMDkgMi4wOS0yLjA5IDIuMDkuOTQgMi4wOSAyLjA5LS45NCAyLjA5LTIuMDkgMi4wOSIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMjMuOTh2MjAuMDVIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-position:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNy40IDE1LjMzVjIuNDNsNC42OSAyLjM1djcuMDVoMS45OVY0LjcyTDE4IDMuMDR2LjE5aC0uMDF2OC42aDJWLjc2YzAtLjA4LS4wMS0uMTYtLjA1LS4yNGEuNS41IDAgMCAwLS4xNy0uMTguNi42IDAgMCAwLS4yMy0uMDhjLS4wOCAwLS4xNyAwLS4yNC4wNEwxMyAzIDcuMDEgMGwtNyAzdjE2LjYxYy0uMDEuMDggMCAuMTYuMDUuMjQuMDQuMDcuMS4xNC4xNi4xOHMuMTUuMDcuMjMuMDhjLjA4IDAgLjE3IDAgLjI0LS4wNGw2LjMtMi43LjQtLjE4di0xLjg2em0tMS45OS41NEwyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIxLjQyMiAxOC41OTUtNy43ODgtNS41MjRjLS4yNzItLjE4MS0uNjM0IDAtLjYzNC4zNjJsLjkwNiA5LjUxYzAgLjM2MS41NDMuNDUyLjcyNC4xOGwxLjQ1LTIuNTM1IDEuNDQ4IDIuNTM1Yy4xODEuMzYyLjYzNC41NDQuOTk2LjU0NC4xODEgMCAuMzYzLS4wOS41NDQtLjE4Mi41NDMtLjM2Mi43MjQtLjk5Ni40NTItMS41MzlsLTEuNDQ5LTIuNTM2aDIuOTg5Yy40NTMtLjA5LjYzNC0uNTQzLjM2Mi0uODE1Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNy40IDE1LjMzVjIuNDNsNC42OSAyLjM1djcuMDVoMS45OVY0LjcyTDE4IDMuMDR2LjE5aC0uMDF2OC42aDJWLjc2YzAtLjA4LS4wMS0uMTYtLjA1LS4yNGEuNS41IDAgMCAwLS4xNy0uMTguNi42IDAgMCAwLS4yMy0uMDhjLS4wOCAwLS4xNyAwLS4yNC4wNEwxMyAzIDcuMDEgMGwtNyAzdjE2LjYxYy0uMDEuMDggMCAuMTYuMDUuMjQuMDQuMDcuMS4xNC4xNi4xOHMuMTUuMDcuMjMuMDhjLjA4IDAgLjE3IDAgLjI0LS4wNGw2LjMtMi43LjQtLjE4di0xLjg2em0tMS45OS41NEwyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIxLjQyMiAxOC41OTUtNy43ODgtNS41MjRjLS4yNzItLjE4MS0uNjM0IDAtLjYzNC4zNjJsLjkwNiA5LjUxYzAgLjM2MS41NDMuNDUyLjcyNC4xOGwxLjQ1LTIuNTM1IDEuNDQ4IDIuNTM1Yy4xODEuMzYyLjYzNC41NDQuOTk2LjU0NC4xODEgMCAuMzYzLS4wOS41NDQtLjE4Mi41NDMtLjM2Mi43MjQtLjk5Ni40NTItMS41MzlsLTEuNDQ5LTIuNTM2aDIuOTg5Yy40NTMtLjA5LjYzNC0uNTQzLjM2Mi0uODE1Ii8+PC9zdmc+) center no-repeat}div[id^=GPmousePositionCoordinate-] input{color:inherit}div[id^=GPmousePositionAltitude-],div[id^=GPmousePositionCoordinate-]>div{display:flex;justify-content:space-between}div[id^=GPmousePositionCoordinate-] input[readonly]{font-size:1rem}.gpf-btn-icon-reverse:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI4Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi43NSAxLjAxSDQuODFMMy40MyAzLjA2IDIuMDUgMS4wMUguMTNsMi4yMyAzLjI1TDAgNy42OWgxLjkzbDEuNS0yLjI0IDEuNTIgMi4yNGgxLjkyTDQuNTEgNC4yNnpNMTIuNzQgMS4wMWwtMS44NCA0LjUtMS44My00LjVINy4ybDIuODEgNi42Ny0uMzcuODljLS4yOC42OC0uNjkuOS0xLjM1LjktLjI5IDAtLjYxLS4wNy0uODItLjE2djEuNDhjLjMyLjEzLjY4LjIxIDEuMTkuMjEgMS4yNyAwIDIuMDMtLjY5IDIuNDktMS43OUwxNC41MiAxaC0xLjc4ek00LjA4OCAxMS4wMThsLTItLjAxOGMtLjA0NSA0Ljk2IDMuNTk4IDkuMDkzIDguMzYyIDkuODE2YTguNCA4LjQgMCAwIDEtLjUxMS0yLjE0NWMtMy4zOTItLjg5LTUuODg0LTMuOTkzLTUuODUxLTcuNjUzTTIzLjg4IDIwLjAyYy4yMy0xLjE0LjExLTIuMzItLjM0LTMuMzlhNS45IDUuOSAwIDAgMC0yLjIxLTIuNjRjLS45OS0uNjUtMi4xNS0uOTktMy4zMy0uOTlzLTIuMzUuMzQtMy4zMy45OWMtLjk5LjY1LTEuNzYgMS41Ni0yLjIxIDIuNjRhNS42MyA1LjYzIDAgMCAwLS4zNCAzLjM5Yy4yMyAxLjE0LjggMi4xOSAxLjY0IDMuMDFMMTggMjcuMThsNC4yNC00LjE1Yy44NC0uODIgMS40MS0xLjg3IDEuNjQtMy4wMW0tMS45Ni0uMzhjLS4xNS43Ni0uNTQgMS40Ni0xLjA5IDIuMDFMMTggMjQuNDJsLTIuODMtMi43N2MtLjU2LS41NS0uOTQtMS4yNS0xLjEtMi4wMS0uMTUtLjc2LS4wOC0xLjU1LjIzLTIuMjYuMy0uNzIuODItMS4zMyAxLjQ3LTEuNzZhNC4wNjQgNC4wNjQgMCAwIDEgNC40NCAwIDMuODkzIDMuODkzIDAgMCAxIDEuNyA0LjAyeiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xOCAxNy4yOGMtLjY1IDAtMS4xNy41My0xLjE3IDEuMTdzLjUzIDEuMTcgMS4xNyAxLjE3IDEuMTctLjUzIDEuMTctMS4xNy0uNTMtMS4xNy0xLjE3LTEuMTciLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI4Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi43NSAxLjAxSDQuODFMMy40MyAzLjA2IDIuMDUgMS4wMUguMTNsMi4yMyAzLjI1TDAgNy42OWgxLjkzbDEuNS0yLjI0IDEuNTIgMi4yNGgxLjkyTDQuNTEgNC4yNnpNMTIuNzQgMS4wMWwtMS44NCA0LjUtMS44My00LjVINy4ybDIuODEgNi42Ny0uMzcuODljLS4yOC42OC0uNjkuOS0xLjM1LjktLjI5IDAtLjYxLS4wNy0uODItLjE2djEuNDhjLjMyLjEzLjY4LjIxIDEuMTkuMjEgMS4yNyAwIDIuMDMtLjY5IDIuNDktMS43OUwxNC41MiAxaC0xLjc4ek00LjA4OCAxMS4wMThsLTItLjAxOGMtLjA0NSA0Ljk2IDMuNTk4IDkuMDkzIDguMzYyIDkuODE2YTguNCA4LjQgMCAwIDEtLjUxMS0yLjE0NWMtMy4zOTItLjg5LTUuODg0LTMuOTkzLTUuODUxLTcuNjUzTTIzLjg4IDIwLjAyYy4yMy0xLjE0LjExLTIuMzItLjM0LTMuMzlhNS45IDUuOSAwIDAgMC0yLjIxLTIuNjRjLS45OS0uNjUtMi4xNS0uOTktMy4zMy0uOTlzLTIuMzUuMzQtMy4zMy45OWMtLjk5LjY1LTEuNzYgMS41Ni0yLjIxIDIuNjRhNS42MyA1LjYzIDAgMCAwLS4zNCAzLjM5Yy4yMyAxLjE0LjggMi4xOSAxLjY0IDMuMDFMMTggMjcuMThsNC4yNC00LjE1Yy44NC0uODIgMS40MS0xLjg3IDEuNjQtMy4wMW0tMS45Ni0uMzhjLS4xNS43Ni0uNTQgMS40Ni0xLjA5IDIuMDFMMTggMjQuNDJsLTIuODMtMi43N2MtLjU2LS41NS0uOTQtMS4yNS0xLjEtMi4wMS0uMTUtLjc2LS4wOC0xLjU1LjIzLTIuMjYuMy0uNzIuODItMS4zMyAxLjQ3LTEuNzZhNC4wNjQgNC4wNjQgMCAwIDEgNC40NCAwIDMuODkzIDMuODkzIDAgMCAxIDEuNyA0LjAyeiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xOCAxNy4yOGMtLjY1IDAtMS4xNy41My0xLjE3IDEuMTdzLjUzIDEuMTcgMS4xNyAxLjE3IDEuMTctLjUzIDEuMTctMS4xNy0uNTMtMS4xNy0xLjE3LTEuMTciLz48L3N2Zz4=) center no-repeat}.gpf-flex-reverse{align-items:flex-start;display:flex;flex-direction:column;justify-content:space-evenly}.gpf-panel-reverse{width:100%}.gpf-btn-icon-route:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE1Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMi43IDQuMzk5QTEuNyAxLjcgMCAxIDEgMi43IDFhMS43IDEuNyAwIDAgMSAwIDMuMzk5WiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTIuNyA0Ljk2djUuNjY4YTIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0IDIuOTc0IDIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0LTIuOTc0VjQuODA3YTIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0LTIuOTc0IDIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0IDIuOTc0djUuMzk2Ii8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im0xMi4xOTIgOC45NDggMi40MDQgMi40MDNNMTQuNTk3IDExLjM1MSAxNyA4Ljk0OCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE1Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMi43IDQuMzk5QTEuNyAxLjcgMCAxIDEgMi43IDFhMS43IDEuNyAwIDAgMSAwIDMuMzk5WiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTIuNyA0Ljk2djUuNjY4YTIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0IDIuOTc0IDIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0LTIuOTc0VjQuODA3YTIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0LTIuOTc0IDIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0IDIuOTc0djUuMzk2Ii8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im0xMi4xOTIgOC45NDggMi40MDQgMi40MDNNMTQuNTk3IDExLjM1MSAxNyA4Ljk0OCIvPjwvc3ZnPg==) center no-repeat}.GProuteFormMini{max-height:78px}.GProuteFormMini .GPelementShow{color:var(--grey-200-850)}.GProuteModeLabel{margin-bottom:.5rem}[id^=GProuteForm-] p.gpf-label{margin-bottom:.2rem;margin-top:0}[id^=GProuteForm-]>.GPpanelFooter{position:unset}[id^=GProuteSubmit-]{width:80%}[id^=GProuteForm-]>[class^=GPlocationPoint-]{margin-top:0}[id^=GProuteForm-]>p.gpf-label{margin-top:1rem}[id^=GProuteForm-].GProuteFormMini>p.gpf-label{margin-top:0}[id^=GProuteForm-]>p.gpf-label~p.gpf-label{margin-top:.5rem}button[id^=GProuteReset-],div[id^=GProuteResultsNew-]{min-width:2.5em}div[id^=GProuteResultsValueDist],div[id^=GProuteResultsValueTime]{color:var(--text-action-high-blue-france);font-weight:700}.GProuteResultsShowDetailsDiv{justify-content:left}div:has(input[id^=GProuteResultsShowDetails])+div[id^=GProuteResultsDetails-]{max-height:0;opacity:0;overflow:hidden}div:has(input[id^=GProuteResultsShowDetails]:checked)+div[id^=GProuteResultsDetails-]{max-height:200px;opacity:1;overflow-y:scroll}div[id^=GProuteResultsDetails-]{display:grid;gap:.5rem 5px;grid-template-columns:30px 1fr;max-width:350px;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s}.GProuteResultsDetailsInstruction,.GProuteResultsDetailsNumber{display:inline-block}.GProuteResultsDetailsNumber{font-weight:700;text-align:right;vertical-align:top}.GProuteExclusionsOptions{color:var(--text-label-grey);gap:.5rem}@media (max-width:576px){.gpf-mobile-fullscreen div[id^=GProuteResultsDetails-]{max-width:unset}}.gpf-widget-padding{padding-bottom:5px;padding-top:5px}.gpf-widget-color{background-color:var(--background-default-grey)}.GPlabelTitle,.gpf-panel__items_searchengine{border-bottom:1px solid var(--grey-900-175);color:var(--text-action-high-blue-france);padding:12px}.gpf-panel__items.GPautoCompleteProposal{box-sizing:border-box;height:45px}.GPlabelTitle{background-color:var(--background-open-blue-france);font-size:1em}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{max-height:unset}input[name^=inputSex].gpf-input,select[name^=inputSex].gpf-select{padding:unset}button[id^=GPsearchInputReset]{height:40px;width:40px}[id^=GPshowSearchDiv]{flex-direction:row-reverse}[id^=GPsearchEngine-]{flex-direction:column}[id^=GPsearchEngine-].gpf-widget-padding{align-items:center}div.GPbuttonsContainer>button{width:40px}.GPsearchFirstLineWrapper{height:40px}.gpf-widget-padding>.GPsearchFirstLineWrapper{margin:.5rem 0}.GPbuttonsContainer{height:56px;padding-left:10px}.GPsearchRadioContainer{background-color:var(--background-default-grey);display:flex;flex-direction:row;gap:1rem;max-height:0;overflow:clip;transition:max-height .3s;white-space:nowrap}[id^=GPsearchEngine-]:focus-within>.GPsearchRadioContainer,[id^=GPsearchEngine-]:has([id^=GPshowSearchByCoordinate-][aria-pressed=true])>.GPsearchRadioContainer,[id^=GPsearchEngine-]:hover>.GPsearchRadioContainer{max-height:3rem}.GPsearchRadioElements{display:flex;flex-direction:row;gap:1rem}.GPshowAdvancedSearch{align-items:center;color:var(--text-action-high-blue-france);cursor:pointer;display:flex;text-decoration:underline}.gpf-btn-icon-search{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZjVmNWZlIiBkPSJtMTguMDMxIDE2LjYxNyA0LjI4MyA0LjI4Mi0xLjQxNSAxLjQxNS00LjI4Mi00LjI4M0E4Ljk2IDguOTYgMCAwIDEgMTEgMjBjLTQuOTY4IDAtOS00LjAzMi05LTlzNC4wMzItOSA5LTkgOSA0LjAzMiA5IDlhOC45NiA4Ljk2IDAgMCAxLTEuOTY5IDUuNjE3bS0yLjAwNi0uNzQyQTYuOTggNi45OCAwIDAgMCAxOCAxMWMwLTMuODY4LTMuMTMzLTctNy03cy03IDMuMTMyLTcgNyAzLjEzMiA3IDcgN2E2Ljk4IDYuOTggMCAwIDAgNC44NzUtMS45NzV6Ii8+PC9zdmc+);background-position:50%;background-repeat:no-repeat;width:40px}form[id^=GPsearchInput-]{margin-left:8px;width:300px}button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]{border:none;max-width:300px}button[id^=GPshowSearchEnginePicto-]{border-radius:0 .25rem 0 0}.gpf-btn-icon-search-advanced:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLjIyNyAxMS4zMzNhNi43IDYuNyAwIDAgMS0uNjUyLTEuNTUgMiAyIDAgMCAwIC4wMDEtMy41NjUgNi42NiA2LjY2IDAgMCAxIDEuNjY3LTIuODkxIDIgMiAwIDAgMCAzLjA4OC0xLjc4MyA2LjY2IDYuNjYgMCAwIDEgMy4zMzguMDAxIDIgMiAwIDAgMCAzLjA4OCAxLjc4MmMuMzg2LjM5My43MjguODQgMS4wMTYgMS4zNC4yODkuNDk5LjUwNSAxLjAyLjY1MiAxLjU1YTIgMiAwIDAgMC0uMDAxIDMuNTY1IDYuNjYgNi42NiAwIDAgMS0xLjY2NyAyLjg5MSAyIDIgMCAwIDAtMy4wODggMS43ODMgNi42NiA2LjY2IDAgMCAxLTMuMzM4LS4wMDEgMiAyIDAgMCAwLTMuMDg4LTEuNzgyIDYuNyA2LjcgMCAwIDEtMS4wMTYtMS4zNE02IDExLjQ2NGEzLjMzIDMuMzMgMCAwIDEgMS41IDEuODQ3cS41LjA0NyAxIDBjLjI1NS0uNzguNzktMS40MzcgMS41LTEuODQ2YTMuMzMgMy4zMyAwIDAgMSAyLjM1LS4zNzdxLjI5LS40MS40OTktLjg2NUEzLjMzIDMuMzMgMCAwIDEgMTIgOGMwLS44NC4zMTMtMS42MjUuODQ5LTIuMjIzYTUuNCA1LjQgMCAwIDAtLjUtLjg2NUEzLjMzIDMuMzMgMCAwIDEgOC41IDIuNjg5YTUuMyA1LjMgMCAwIDAtMSAwQTMuMzMgMy4zMyAwIDAgMSA2IDQuNTM1Yy0uNzEuNDExLTEuNTQ3LjU0NS0yLjM1LjM3N3EtLjI5LjQxLS40OTkuODY1QzMuNjk4IDYuMzg4IDQuMDAxIDcuMTggNCA4YzAgLjg0LS4zMTMgMS42MjUtLjg0OSAyLjIyM3EuMjEuNDU2LjUuODY1QTMuMzMgMy4zMyAwIDAgMSA2IDExLjQ2NE04IDEwYTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNG0wLTEuMzMzYS42NjcuNjY3IDAgMSAwIDAtMS4zMzQuNjY3LjY2NyAwIDAgMCAwIDEuMzM0IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLjIyNyAxMS4zMzNhNi43IDYuNyAwIDAgMS0uNjUyLTEuNTUgMiAyIDAgMCAwIC4wMDEtMy41NjUgNi42NiA2LjY2IDAgMCAxIDEuNjY3LTIuODkxIDIgMiAwIDAgMCAzLjA4OC0xLjc4MyA2LjY2IDYuNjYgMCAwIDEgMy4zMzguMDAxIDIgMiAwIDAgMCAzLjA4OCAxLjc4MmMuMzg2LjM5My43MjguODQgMS4wMTYgMS4zNC4yODkuNDk5LjUwNSAxLjAyLjY1MiAxLjU1YTIgMiAwIDAgMC0uMDAxIDMuNTY1IDYuNjYgNi42NiAwIDAgMS0xLjY2NyAyLjg5MSAyIDIgMCAwIDAtMy4wODggMS43ODMgNi42NiA2LjY2IDAgMCAxLTMuMzM4LS4wMDEgMiAyIDAgMCAwLTMuMDg4LTEuNzgyIDYuNyA2LjcgMCAwIDEtMS4wMTYtMS4zNE02IDExLjQ2NGEzLjMzIDMuMzMgMCAwIDEgMS41IDEuODQ3cS41LjA0NyAxIDBjLjI1NS0uNzguNzktMS40MzcgMS41LTEuODQ2YTMuMzMgMy4zMyAwIDAgMSAyLjM1LS4zNzdxLjI5LS40MS40OTktLjg2NUEzLjMzIDMuMzMgMCAwIDEgMTIgOGMwLS44NC4zMTMtMS42MjUuODQ5LTIuMjIzYTUuNCA1LjQgMCAwIDAtLjUtLjg2NUEzLjMzIDMuMzMgMCAwIDEgOC41IDIuNjg5YTUuMyA1LjMgMCAwIDAtMSAwQTMuMzMgMy4zMyAwIDAgMSA2IDQuNTM1Yy0uNzEuNDExLTEuNTQ3LjU0NS0yLjM1LjM3N3EtLjI5LjQxLS40OTkuODY1QzMuNjk4IDYuMzg4IDQuMDAxIDcuMTggNCA4YzAgLjg0LS4zMTMgMS42MjUtLjg0OSAyLjIyM3EuMjEuNDU2LjUuODY1QTMuMzMgMy4zMyAwIDAgMSA2IDExLjQ2NE04IDEwYTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNG0wLTEuMzMzYS42NjcuNjY3IDAgMSAwIDAtMS4zMzQuNjY3LjY2NyAwIDAgMCAwIDEuMzM0IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-search-geolocate:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE5IDIwIj48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOS41IDE2LjI5MmE2LjI5MiA2LjI5MiAwIDEgMCAwLTEyLjU4NCA2LjI5MiA2LjI5MiAwIDAgMCAwIDEyLjU4NFoiLz48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xIDEwaDIuMjA4TTE1Ljc5MiAxMEgxOE05LjUgMS41djIuMjA4TTkuNSAxNi4yOTJWMTguNSIvPjxwYXRoIGZpbGw9IiMxMDEwOTIiIGQ9Ik05LjUgMTEuMTA0YTEuMTA0IDEuMTA0IDAgMSAwIDAtMi4yMDggMS4xMDQgMS4xMDQgMCAwIDAgMCAyLjIwOCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE5IDIwIj48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOS41IDE2LjI5MmE2LjI5MiA2LjI5MiAwIDEgMCAwLTEyLjU4NCA2LjI5MiA2LjI5MiAwIDAgMCAwIDEyLjU4NFoiLz48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xIDEwaDIuMjA4TTE1Ljc5MiAxMEgxOE05LjUgMS41djIuMjA4TTkuNSAxNi4yOTJWMTguNSIvPjxwYXRoIGZpbGw9IiMxMDEwOTIiIGQ9Ik05LjUgMTEuMTA0YTEuMTA0IDEuMTA0IDAgMSAwIDAtMi4yMDggMS4xMDQgMS4xMDQgMCAwIDAgMCAyLjIwOCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-icon-search-coordinate:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMTAxMDkyIiBkPSJNOS43MDIgNC44NjhIOC42NWMtLjQ5MSAwLS42OS0uMzUtLjQ1Ni0uNzcxQTI3MyAyNzMgMCAwIDEgMTAuMDA2Ljk2NGMuMjM0LS4zOTcuNjMxLS4zOTcuODY1LjAxMmE0MDkgNDA5IDAgMCAxIDEuNzY1IDMuMDVjLjI5Mi41MTUuMDkzLjgzLS41MDMuODQyaC0uOTdjMCAuMTQtLjAxMi4yMzQtLjAxMi4zNHY2LjEzNmMwIC4xNC4wODIuMzM5LjE4Ny40MiAyLjAxIDEuNDI3IDQuMDMzIDIuODQxIDYuMDU1IDQuMjU2LjAyNC4wMTEuMDU5LjAyMy4xMDUuMDQ2LjIxLS4yOC40MjEtLjU2LjYzMi0uODMuMzI3LS40Mi43MTMtLjM4NS45MTEuMTA2LjQ2OCAxLjA3NS45MjQgMi4xNjIgMS4zOCAzLjIzNy4yMS40OTEtLjAxMi43OTUtLjU1LjczN2EzNDcgMzQ3IDAgMCAxLTMuNDcxLS4zOTdjLS41ODUtLjA3LS43MjUtLjQzMy0uMzYzLS45bC40OTEtLjY2N2MuMDEyLS4wMTIuMDEyLS4wMzUuMDQ3LS4xMDVhMjI1IDIyNSAwIDAgMS0xLjExLS43OTVjLTEuNTktMS4xMjItMy4xOTEtMi4yMzMtNC43ODEtMy4zNTUtLjE5OS0uMTQtLjM0LS4xNjMtLjU1IDBhMTY3MiAxNjcyIDAgMCAxLTUuNjU3IDMuOTg2Yy0uMDQ3LjAzNS0uMDgyLjA1OS0uMTQuMTA2LjIyMi4zMDMuNDU1LjU4NC42NjYuODg4LjI5Mi40MDkuMTUyLjc3MS0uMzYyLjgzLTEuMTkzLjE1Mi0yLjM5Ny4yOTItMy41ODkuNDItLjQ0NC4wNDctLjY2Ni0uMjY4LS40OTEtLjcuMzg2LS45MjQuNzgzLTEuODQ4IDEuMTgtMi43NzEuMDgyLS4xODcuMTUzLS4zNzQuMjM0LS41NS4yLS40Mi41NzMtLjQ2Ny44NzctLjEwNWwuNTYxLjczN2MuMDEyLjAxMS4wMzUuMDIzLjA4Mi4wNDcuNjY2LS40NjggMS4zMzMtLjkzNiAyLjAxLTEuNDE1IDEuMjk4LS45MTIgMi41OTUtMS44MzUgMy45MDUtMi43MzUuMjIyLS4xNTIuMjkyLS4zMTYuMjkyLS41NzNWNC44NTd6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMTAxMDkyIiBkPSJNOS43MDIgNC44NjhIOC42NWMtLjQ5MSAwLS42OS0uMzUtLjQ1Ni0uNzcxQTI3MyAyNzMgMCAwIDEgMTAuMDA2Ljk2NGMuMjM0LS4zOTcuNjMxLS4zOTcuODY1LjAxMmE0MDkgNDA5IDAgMCAxIDEuNzY1IDMuMDVjLjI5Mi41MTUuMDkzLjgzLS41MDMuODQyaC0uOTdjMCAuMTQtLjAxMi4yMzQtLjAxMi4zNHY2LjEzNmMwIC4xNC4wODIuMzM5LjE4Ny40MiAyLjAxIDEuNDI3IDQuMDMzIDIuODQxIDYuMDU1IDQuMjU2LjAyNC4wMTEuMDU5LjAyMy4xMDUuMDQ2LjIxLS4yOC40MjEtLjU2LjYzMi0uODMuMzI3LS40Mi43MTMtLjM4NS45MTEuMTA2LjQ2OCAxLjA3NS45MjQgMi4xNjIgMS4zOCAzLjIzNy4yMS40OTEtLjAxMi43OTUtLjU1LjczN2EzNDcgMzQ3IDAgMCAxLTMuNDcxLS4zOTdjLS41ODUtLjA3LS43MjUtLjQzMy0uMzYzLS45bC40OTEtLjY2N2MuMDEyLS4wMTIuMDEyLS4wMzUuMDQ3LS4xMDVhMjI1IDIyNSAwIDAgMS0xLjExLS43OTVjLTEuNTktMS4xMjItMy4xOTEtMi4yMzMtNC43ODEtMy4zNTUtLjE5OS0uMTQtLjM0LS4xNjMtLjU1IDBhMTY3MiAxNjcyIDAgMCAxLTUuNjU3IDMuOTg2Yy0uMDQ3LjAzNS0uMDgyLjA1OS0uMTQuMTA2LjIyMi4zMDMuNDU1LjU4NC42NjYuODg4LjI5Mi40MDkuMTUyLjc3MS0uMzYyLjgzLTEuMTkzLjE1Mi0yLjM5Ny4yOTItMy41ODkuNDItLjQ0NC4wNDctLjY2Ni0uMjY4LS40OTEtLjcuMzg2LS45MjQuNzgzLTEuODQ4IDEuMTgtMi43NzEuMDgyLS4xODcuMTUzLS4zNzQuMjM0LS41NS4yLS40Mi41NzMtLjQ2Ny44NzctLjEwNWwuNTYxLjczN2MuMDEyLjAxMS4wMzUuMDIzLjA4Mi4wNDcuNjY2LS40NjggMS4zMzMtLjkzNiAyLjAxLTEuNDE1IDEuMjk4LS45MTIgMi41OTUtMS44MzUgMy45MDUtMi43MzUuMjIyLS4xNTIuMjkyLS4zMTYuMjkyLS41NzNWNC44NTd6Ii8+PC9zdmc+) center no-repeat}.gpf-btn-icon-search-reset{background-position:-25px}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{position:absolute;top:66px;width:inherit}[id^=GPautocompleteResults-]{border:1px solid var(--background-open-blue-france)}dialog[id^=GPgeocodeResultsList],div[id^=GPautoCompleteList]{background-color:var(--background-default-grey);height:fit-content;max-height:unset;position:absolute;width:320px}div[id^=GPautoCompleteList]{margin-left:2px;top:42px}.position-container-bottom-left [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-bottom-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-left [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList]{margin-left:8px;position:relative;top:unset;width:340px}.position-container-bottom-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList]{margin-right:10px}.gpf-widget-padding>div[id^=GPautoCompleteList]{margin:0;top:100%;width:100%}dialog[id^=GPgeocodeResultsList]{border-radius:4px;overflow:hidden;position:absolute;top:55px}div[id^=GPgeocodeResults-]{background-color:var(--background-default-grey);max-height:240px;overflow-y:auto;position:relative;width:100%}[id^=GPautocompleteResultsLocation],[id^=GPautocompleteResultsSuggest]{height:225px}@media (max-width:576px){.gpf-widget-padding>.GPsearchFirstLineWrapper{flex-direction:column;height:fit-content}.GPsearchRadioContainer{align-items:center;flex-direction:column}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{margin-left:unset;position:relative;top:unset}.GPsearchRadioContainer{gap:0;margin:0 8px}form[id^=GPsearchInput-]{margin-left:0}[id^=GPsearchEngine-]:focus-within>.GPsearchRadioContainer,[id^=GPsearchEngine-]:has([id^=GPshowSearchByCoordinate-][aria-pressed=true])>.GPsearchRadioContainer,[id^=GPsearchEngine-]:hover>.GPsearchRadioContainer{max-height:4rem}}.gpf-btn-icon-toolbox{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAlqAAAJagFGUcfpAAAAB3RJTUUH4AsKDCgkqrnTSAAAAw1JREFUSMe9ll2IlVUUhp9vnEintH+FulAyI+uihClKjSZtQJAJrRnDoKt+oCIIjSIrDCokKXQiCqkuTMFAJtQLCwItMsQbURmjiRIK+pmSoSjJ/JmnC98je6ZzjmVMCzbnO/vstd691nrf9R0YA1NRn2SsTX1E/UM9vVc1OdwC3A7cBLQD1wE/Al8AA0BfVVXf1vFbAmwCjgPjq+oUREsDkBuA3UBfwL4EXgS2AgJLgIPqw2pV+HUCG4B9/yTtF9Rj6pvqBeo4db7apU5N/VGXqofVHeo09Ub1N3Wdeo/6Z1m60SAL1KPqrQnWqR5Qt6pvqYfU1WqbWqnvqt+p89Sf1T61pSmQOkH9Wl2ZLDaru9T2gLapH6mvB6RXHVRvU79Rd6rnqteoH6vHGwEtV7/K4ZXq+qJME9VP1JfzfZU6lMwPqnvVSfltkvpMyl8X6L3ccmIyayuAdqjP5flZ9deA7M7lpqjjC5+eZkAH1AfT5LVxaFUfV39JoGXq72qHul39Qb0ypX5fvaIRUEnv6dHIZGAwe28Ac4DngQeAl4DFeZ4NLAAOAb3ZP1nEG6HREmgAmAEcBmYCTwFTgaXAEPAK0AMsBO4G7gT2A08Aj9YKM+qzbul61Q0hQ7+6L43tCVW71RXqCXVRUaJhdaOnbHIY2d2Mdd3q96F5e0TYFV3dl/4Nq/cHZE7m2avqLQXQeTlzohFQm/q5+k4C3ZFAD6mL4/h0frs6U2FzMpgdoEujq371ZCMg1GvDqjXqkTCuI1mtyZnLQv9dYWItO9VLwsC7GgIVYPfGaYU6K5rZmJtPUPeoAwla85lbALWcEagA61Svyoj5QD0nAbaoP0U71AJFvKoX50J/A2odDVRVFWo/8Fk00p13y2tAJzAv+6cvVmjGYo3QUWudjC4EPgSORjNHgGXAY3kfzcoqbcaZ9NM6eoID24CLMhGGgA5geabFzVn1bBAYBs4HLm/Wm3HqttB2ZtHof7va1U/Ts7oZvQ10AWuB67PO1vYAc+tls9qxsZETtinf/6PV/gX9b/YXjLd1o+WqCcMAAAAASUVORK5CYII=);background-position:3px;background-repeat:no-repeat}.gpf-btn-icon-zoom-in{height:inherit;width:inherit}.gpf-btn-icon-zoom-in:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwTTEyIDd2MTAiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwTTEyIDd2MTAiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41Ii8+PC9zdmc+) center no-repeat}.gpf-btn-icon-zoom-out{height:inherit;width:inherit}.gpf-btn-icon-zoom-out:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwIi8+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAuNzUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwIi8+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAuNzUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIvPjwvc3ZnPg==) center no-repeat}.ol-custom-full-screen button{background-position:50%;background-repeat:no-repeat;height:40px;width:40px}.ol-custom-full-screen button.ol-custom-full-screen-false:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuMTI1IDIuMjVhLjc1Ljc1IDAgMCAwIDAgMS41em00LjM3NSAxLjVoLjc1di0xLjVoLS43NXptLTQuMzc1IDBIMjAuNXYtMS41aC00LjM3NXoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjEuMjUgM3YtLjc1aC0xLjVWM3ptLTEuNSA0LjM3NWEuNzUuNzUgMCAwIDAgMS41IDB6bTAtNC4zNzV2NC4zNzVoMS41VjN6TTcuMzc1IDIxLjI1YS43NS43NSAwIDAgMCAwLTEuNXpNMyAxOS43NWgtLjc1djEuNUgzem00LjM3NSAwSDN2MS41aDQuMzc1eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0yLjI1IDIwLjV2Ljc1aDEuNXYtLjc1em0xLjUtNC4zNzVhLjc1Ljc1IDAgMCAwLTEuNSAwem0wIDQuMzc1di00LjM3NWgtMS41VjIwLjV6TTIwLjIxMiA0LjM0OWwuNTMtLjUzLTEuMDYtMS4wNjEtLjUzMS41M3ptLTYuNzE4IDQuNTk2YS43NS43NSAwIDEgMCAxLjA2IDEuMDZ6bTUuNjU3LTUuNjU3LTUuNjU3IDUuNjU3IDEuMDYgMS4wNiA1LjY1OC01LjY1NnoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNOS45OTkgMTQuNTYyYS43NS43NSAwIDEgMC0xLjA2LTEuMDZ6bS02LjcxOCA0LjU5Ni0uNTMuNTMgMS4wNiAxLjA2MS41MzEtLjUzem01LjY1Ny01LjY1Ny01LjY1NyA1LjY1NyAxLjA2MSAxLjA2TDEwIDE0LjU2M3oiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuMTI1IDIuMjVhLjc1Ljc1IDAgMCAwIDAgMS41em00LjM3NSAxLjVoLjc1di0xLjVoLS43NXptLTQuMzc1IDBIMjAuNXYtMS41aC00LjM3NXoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjEuMjUgM3YtLjc1aC0xLjVWM3ptLTEuNSA0LjM3NWEuNzUuNzUgMCAwIDAgMS41IDB6bTAtNC4zNzV2NC4zNzVoMS41VjN6TTcuMzc1IDIxLjI1YS43NS43NSAwIDAgMCAwLTEuNXpNMyAxOS43NWgtLjc1djEuNUgzem00LjM3NSAwSDN2MS41aDQuMzc1eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0yLjI1IDIwLjV2Ljc1aDEuNXYtLjc1em0xLjUtNC4zNzVhLjc1Ljc1IDAgMCAwLTEuNSAwem0wIDQuMzc1di00LjM3NWgtMS41VjIwLjV6TTIwLjIxMiA0LjM0OWwuNTMtLjUzLTEuMDYtMS4wNjEtLjUzMS41M3ptLTYuNzE4IDQuNTk2YS43NS43NSAwIDEgMCAxLjA2IDEuMDZ6bTUuNjU3LTUuNjU3LTUuNjU3IDUuNjU3IDEuMDYgMS4wNiA1LjY1OC01LjY1NnoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNOS45OTkgMTQuNTYyYS43NS43NSAwIDEgMC0xLjA2LTEuMDZ6bS02LjcxOCA0LjU5Ni0uNTMuNTMgMS4wNiAxLjA2MS41MzEtLjUzem01LjY1Ny01LjY1Ny01LjY1NyA1LjY1NyAxLjA2MSAxLjA2TDEwIDE0LjU2M3oiLz48L3N2Zz4=) center no-repeat}.ol-custom-full-screen button.ol-custom-full-screen-true:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTMuNzczIDEwLjk2OGg0LjM4Yy40MSAwIC43NS0uMzQuNzUtLjc1cy0uMzQtLjc1LS43NS0uNzVoLTIuNTZsNS4xOS01LjE5Yy4yOS0uMjkuMjktLjc3IDAtMS4wNmEuNzU0Ljc1NCAwIDAgMC0xLjA2IDBsLTUuMiA1LjJ2LTIuNTZjMC0uNDEtLjM0LS43NS0uNzUtLjc1cy0uNzUuMzQtLjc1Ljc1djUuMTF6TTQuMjc4IDIwLjc4M2w1LjE5LTUuMTl2Mi41NmMwIC40MS4zNC43NS43NS43NXMuNzUtLjM0Ljc1LS43NXYtNS4xMmgtNS4xMmMtLjQxIDAtLjc1LjM0LS43NS43NXMuMzQuNzUuNzUuNzVoMi41NmwtNS4xOSA1LjE5Yy0uMjkuMjktLjI5Ljc3IDAgMS4wNnMuNzcuMjkgMS4wNiAwIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTMuNzczIDEwLjk2OGg0LjM4Yy40MSAwIC43NS0uMzQuNzUtLjc1cy0uMzQtLjc1LS43NS0uNzVoLTIuNTZsNS4xOS01LjE5Yy4yOS0uMjkuMjktLjc3IDAtMS4wNmEuNzU0Ljc1NCAwIDAgMC0xLjA2IDBsLTUuMiA1LjJ2LTIuNTZjMC0uNDEtLjM0LS43NS0uNzUtLjc1cy0uNzUuMzQtLjc1Ljc1djUuMTF6TTQuMjc4IDIwLjc4M2w1LjE5LTUuMTl2Mi41NmMwIC40MS4zNC43NS43NS43NXMuNzUtLjM0Ljc1LS43NXYtNS4xMmgtNS4xMmMtLjQxIDAtLjc1LjM0LS43NS43NXMuMzQuNzUuNzUuNzVoMi41NmwtNS4xOSA1LjE5Yy0uMjkuMjktLjI5Ljc3IDAgMS4wNnMuNzcuMjkgMS4wNiAwIi8+PC9zdmc+) center no-repeat}.gpf-btn-icon-overviewmap:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyA1LjcgOS4zIDNsNS40IDIuNyA1LjY3My0yLjQzMWEuNDUuNDUgMCAwIDEgLjYyNy40MTNWMTguM0wxNC43IDIxbC01LjQtMi43LTUuNjczIDIuNDMxQS40NS40NSAwIDAgMSAzIDIwLjMxN3ptMTIuNiAxMi45NTYgMy42LTEuNTQzVjUuNzNsLTMuNiAxLjU0M3ptLTEuOC0uMTE4VjcuMjYybC0zLjYtMS44djExLjI3NnptLTUuNC0xLjgxVjUuMzQzTDQuOCA2Ljg4N1YxOC4yN3oiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyA1LjcgOS4zIDNsNS40IDIuNyA1LjY3My0yLjQzMWEuNDUuNDUgMCAwIDEgLjYyNy40MTNWMTguM0wxNC43IDIxbC01LjQtMi43LTUuNjczIDIuNDMxQS40NS40NSAwIDAgMSAzIDIwLjMxN3ptMTIuNiAxMi45NTYgMy42LTEuNTQzVjUuNzNsLTMuNiAxLjU0M3ptLTEuOC0uMTE4VjcuMjYybC0zLjYtMS44djExLjI3NnptLTUuNC0xLjgxVjUuMzQzTDQuOCA2Ljg4N1YxOC4yN3oiLz48L3N2Zz4=) center no-repeat}.ol-overviewmap:has(>.gpf-btn-icon[aria-pressed=true]):after{transform:translateY(-100%)}.ol-overviewmap:not(.ol-collapsed){background:unset}.gpf-btn-icon-legends:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDQwIDQwIj48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Ik0yNC4xMjggMjYuMTExVjI4SDEyLjdjLS45NDQgMC0xLjctLjc1Ni0xLjctMS43VjExaDEzLjAzM3YxNC45MjJjMCAxLjA0Ljc1NiAxLjk4MyAxLjc5NSAyLjA3OCAxLjEzMy4wOTQgMi4xNzItLjg1IDIuMTcyLTEuOTgzdi0zLjAyM2gtMy44NzIiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTE0LjcwMyAxNS43MjJoNS42NjdNMTQuNzAzIDE5LjVoNS42NjdNMTQuNzAzIDIzLjI3OGg1LjY2NyIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTI2LjExMSAyOGgtMS45ODMiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDQwIDQwIj48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Ik0yNC4xMjggMjYuMTExVjI4SDEyLjdjLS45NDQgMC0xLjctLjc1Ni0xLjctMS43VjExaDEzLjAzM3YxNC45MjJjMCAxLjA0Ljc1NiAxLjk4MyAxLjc5NSAyLjA3OCAxLjEzMy4wOTQgMi4xNzItLjg1IDIuMTcyLTEuOTgzdi0zLjAyM2gtMy44NzIiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTE0LjcwMyAxNS43MjJoNS42NjdNMTQuNzAzIDE5LjVoNS42NjdNMTQuNzAzIDIzLjI3OGg1LjY2NyIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTI2LjExMSAyOGgtMS45ODMiLz48L3N2Zz4=) center no-repeat}.gpf-btn-header-legends{height:26px;position:absolute;width:26px;z-index:2}.gpf-btn-icon-header-legends{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjIiIGQ9Ik0xMi42IDEyLjY2NHYxLjMzNEg0LjUzM2MtLjY2NiAwLTEuMi0uNTM0LTEuMi0xLjJ2LTEwLjhoOS4yVjEyLjUzYzAgLjczMy41MzQgMS40IDEuMjY3IDEuNDY3LjguMDY2IDEuNTMzLS42IDEuNTMzLTEuNHYtMi4xMzRIMTIuNiIvPjxwYXRoIHN0cm9rZT0iIzEwMTA5MiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4yIiBkPSJNNS45NDcgNS4zMzFoNE01Ljk0NyA3Ljk5OGg0TTUuOTQ3IDEwLjY2NGg0Ii8+PHBhdGggc3Ryb2tlPSIjMTAxMDkyIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4yIiBkPSJNMTQgMTMuOTk4aC0xLjQiLz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:auto auto}.gpf-panel__body_legends{max-height:300px!important;overflow:auto}.gpf-panel__title_legends{color:#101092;font-size:1rem;font-weight:400;margin:0;padding:12px 15px;position:relative;right:-16px}.gpf-panel__header_legends{align-content:center;align-items:center;background:#e3e3fd;display:flex;flex-direction:row;height:48px}button[id^=GPcollapseLegend_ID_]{position:absolute;right:0;top:8px}.gpf-btn-icon-legends-collapse{box-shadow:none}.gpf-btn-icon-legends-collapse:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;transition:transform .2s ease-out 0s}.gpf-btn-icon-legends-collapse[aria-pressed=true]:after{box-shadow:none;transform:rotate(180deg)}.legend-entry-container{background-color:var(--background-overlap-grey);border-bottom:1px solid var(--border-default-grey);overflow:hidden;position:relative;top:0}.gpf-label-legends-name{line-height:56px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 40px)}button[id^=GPcollapseLegend_ID_][aria-pressed=true]+.legend-entry-image{border-top:1px solid var(--border-default-grey);max-height:300px;opacity:1;overflow:auto;padding:10px 0}.legend-entry-image{display:block;max-height:0;opacity:0;transition:max-height .5s ease-out 0s,opacity .5s ease-out 0s}.legends-entries{padding:0 16px}.gpf-btn-icon-catalog:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNCIgaGVpZ2h0PSIzNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuNzEzIDEyLjc3NGE0LjEyNSA0LjEyNSAwIDEgMSAxLjA2LTEuMDZsMi4wMDcgMi4wMDYtMS4wNiAxLjA2ek01IDZoMy43NXYxLjVINXptMCA1LjI1aDMuNzV2MS41SDV6bTAgNS4yNWgxMy41VjE4SDV6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNCIgaGVpZ2h0PSIzNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuNzEzIDEyLjc3NGE0LjEyNSA0LjEyNSAwIDEgMSAxLjA2LTEuMDZsMi4wMDcgMi4wMDYtMS4wNiAxLjA2ek01IDZoMy43NXYxLjVINXptMCA1LjI1aDMuNzV2MS41SDV6bTAgNS4yNWgxMy41VjE4SDV6Ii8+PC9zdmc+) center no-repeat}@media (max-width:576px){.gpf-mobile-fullscreen .GPtabContent{height:100vh;max-height:unset!important}}.gpf-btn-icon-territories:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi42NDggMS45ODZhLjczLjczIDAgMCAxIC43Ny4yODRsLjIxNy4zMWguMTEzYy4zMTcgMCAuNTkyLjIuNjg0LjQ5OWwuMDM5LjEyNmEuNzIuNzIgMCAwIDEgLjQxLjI1My43LjcgMCAwIDEgLjE4Ny4wNjNsLjI4Ny4xNGEuNy43IDAgMCAxIC4yOTQuMjY3bC4yMzYtLjA1NWEuNzIuNzIgMCAwIDEgLjYwOS4xMy43LjcgMCAwIDEgLjI3My41NTJ2LjI1bC40ODQuMzIzYS43LjcgMCAwIDEgLjMyOC4wNThsLjA3OC4wMzMuMDk5LS4wNGEuNzQuNzQgMCAwIDEgLjQ3NS0uMDIzbC4zODkuMTE0Yy4xMzYuMDQuMjU2LjExOC4zNDYuMjI2bC4yOC4zMzYuMzc0LS4wMzdhLjc0Ljc0IDAgMCAxIC40MS4wNzlsLjIyNi4xMi4zMzEuMDA2Yy4xMzMuMDAzLjI2LjA0LjM3MS4xMWwuMjg5LjE3OWMuMzEyLjE5Ni40MjIuNi4yNS45MmwtLjMxMi41NzgtLjAxNi4xNzRhLjcuNyAwIDAgMS0uMDM0LjE2bC0uMjIyLjYzLjAxNyAxLjA0NWEuNjkuNjkgMCAwIDEtLjI1Ni41NDlsLS40MDcuMzMzYS43LjcgMCAwIDEtLjI0My4xM2wtLjcuODg1Yy4yNC4wNi40NC4yMzguNTEyLjQ4MmwuMDc3LjI1Ni4wOTcuMTIuMjI4LjMzNGEuNjkuNjkgMCAwIDEtLjAxNS44MDFsLjI3LjMxN2EuNy43IDAgMCAxIC4xNjUuNDgzbC0uMDIuMzY0YS43LjcgMCAwIDEtLjI4LjUybC4wNS4wNDhhLjY5LjY5IDAgMCAxIC4wNjEuOTVsLjA4NS4wNTguMDktLjAzMWEuNzIuNzIgMCAwIDEgLjg4OC4zNjVsLjExNy4yNWEuNjkuNjkgMCAwIDEtLjA3OS43MTJsLS4wMzkuMDU1YS42OS42OSAwIDAgMS0uMjQ4LjY0MmwtLjcyLjU4Ny0uMzEyLjE5NmEuNy43IDAgMCAxLS4wNjMuMzE3LjcuNyAwIDAgMS0uNDAyLjM2OWwtLjYzMS4yMjhhMSAxIDAgMCAxLS4xNDkuMDM3bC0uNDcyLjA2NmEuNy43IDAgMCAxLS4yNzQtLjAxM2wtLjk3LS4yMjItLjY0NS0uMTg1LS4wNS0uMDE2YS43My43MyAwIDAgMS0uNDI5LS4wNzhsLS4yMjItLjEyYS43My43MyAwIDAgMS0uNTI4LS4wOTZsLS42MDguMzYtLjE5Mi4zOC4xODcuNjQzYS43LjcgMCAwIDEtLjA2OC41NC43MS43MSAwIDAgMS0uNDMzLjMyOGwtLjc2OC4yYS43LjcgMCAwIDEtLjE4NC4wMjRsLS4xMDItLjAwOC0uNjQ0LS4xMTItLjI5Mi4wNThhLjc0Ljc0IDAgMCAxLS40NS0uMDUzbC0uMzQ0LS4xNjRhLjcuNyAwIDAgMS0uMzcyLS40MjhsLS4yODItLjExMy0uMTE4LS4wMjVhLjcyLjcyIDAgMCAxLS42NTIuMjVsLTEuMjE1LS4xNjFhLjcuNyAwIDAgMS0uMjcyLS4wOTNsLS4yMDUtLjEyaC0uMzFhLjcyLjcyIDAgMCAxLS41Mi0uMjJsLS4yMDgtLjIxNy0uNjk2LS4yOTRhLjcuNyAwIDAgMS0uMzQtLjI5OGwtLjE0MS0uMjQ1LS4yOTgtLjE2MWEuNjkzLjY5MyAwIDAgMS0uMjA4LTEuMDU5bC40NjQtLjU1My4yNTctMS4zOGExIDEgMCAwIDEgLjAyNC0uMDkyLjcuNyAwIDAgMS0uMDQtLjMyOWwuMjEzLTEuODIyYTEgMSAwIDAgMSAuMDE5LS4xLjY5LjY5IDAgMCAxIC4xMzgtLjg1Ny43LjcgMCAwIDEtLjA3NS0uMjE2bC0uMzI4LS4xNjVhLjcuNyAwIDAgMS0uMjQ3LS4yMDZsLS41NTktLjcyOGEuNy43IDAgMCAxLS4xMjYtLjI2NWwtLjE2NS0uNzM3LS4wMDItLjAwOC0uMDc0LS4wNWEuNy43IDAgMCAxLS4xNjItLjE1MWwtLjI0LS4zMTMtMS4zNDMtLjUyNGgtLjM4NmEuNzIuNzIgMCAwIDEtLjYxNy0uMzQ3bC0uMTY0LS4yNzVhLjcuNyAwIDAgMS0uMDgzLS40OTUuNy43IDAgMCAxLS4yNzYtLjM1TDEuNzU0IDguMWEuNjk1LjY5NSAwIDAgMSAuMzczLS44NjVsMS4wMTctLjQ2NmEuNy43IDAgMCAxIC4yNDEtLjA2M2wxLjQwMS0uMTI0YS43NC43NCAwIDAgMSAuNTc0LjIwN2wuMjU5LjI1OS4wNTQtLjAyMWEuNzMuNzMgMCAwIDEgLjM5NC0uMDM2bC4xODcuMDMzLS4yNTMtLjU5Ni0uMTktLjc1N2EuNy43IDAgMCAxIC4xMi0uNTgzLjcxLjcxIDAgMCAxIC41MzUtLjI4NGwuNTc0LS4wMjlhLjcuNyAwIDAgMSAuNTU4LjIyMmwuNDkzLjUxOS42MzkuMTIzLjAwNy0uMDc5YS43LjcgMCAwIDEgLjQ4Mi0uNjA1bDEuMjEzLS40MDkuMzI1LS4yOTItLjA0Ni0uNzFhLjcuNyAwIDAgMSAuMDYtLjMzMWwuMjU0LS41NDVhLjcuNyAwIDAgMSAuNDctLjM4OHptLS4xODggMS45NzgtLjMzLjA4MS0uMDM2LjA3My4wNTUuODE2Yy4wMTMuMi0uMDcuMzkyLS4yMjcuNTI3bC0uNjczLjU3OGEuNy43IDAgMCAxLS4yNDkuMTM4bC0uNzM3LjIzOC4yMjguMTU3LS4yODMuMTM1YS42OC42OCAwIDAgMS0uMzQ3LjM3OGwtLjQ4My4yM2EuNzYuNzYgMCAwIDEtLjQ1LjA2bC0xLjE5LS4yMnYuMDA2bC4wNTcuNzk5Yy4wMjQuMzQyLS4yMy42NC0uNTkuNjk0bC0uMzA0LjA0NGEuNy43IDAgMCAxLS4yMzYtLjAwM2wtLjU4OS0uMS0uMjk5LjExYS43My43MyAwIDAgMS0uNzU1LS4xNTJsLS4zNDYtLjMzLS45MjMuMDc4LS4wMzkuMDE3Yy4xNS4xMy4yMy4zMTYuMjIyLjUwNWwuMDEuMDAzIDEuNjI2LjYwOHEuMTg1LjA3Mi4zLjIxNWwuMjA3LjI1N2EuNzUuNzUgMCAwIDEgLjM5Ni4wNzlsLjM5OC4yMDRjLjE2LjA4My4yOC4yMjMuMzMzLjM4NWwuNTUzLjI4NS0uNTk1LjE5N2EuNy43IDAgMCAxLS4zMTYuMjk5bC4zNS40MzYuNjE2LjI5NmEuNjQ1LjY0NSAwIDAgMSAuMzYyLjczNWwtLjAwNy4wMjguMTM0LjIzNmMuMTA3LjE5LjEwNy40MTEuMDEuNTk2bC4wNTcuMDQ0YS42Ny42NyAwIDAgMSAuMjE4LjMwNGwuMzg3IDEuMWEuNjIuNjIgMCAwIDEtLjAzNi40OTVsLjI2Mi43NDYtLjcyMi0uMzk4YS43LjcgMCAwIDEtLjI3Mi4wMTIuNi42IDAgMCAxLS4wODUuMTc3bC0uMzA1LjQ1MS0uMjYgMS4zMzVhLjY0LjY0IDAgMCAxLS4xNS4zMDFsLS4wNzUuMDg3YTEgMSAwIDAgMSAuMDQyLjA2M2wuMTIuMTk3LjYuMjQyYy4wOTMuMDQuMTY4LjA5LjIzMy4xNTRsLjA5Ny4wOTZoLjE5YS43NC43NCAwIDAgMSAuMzUzLjA5bC4yNTEuMTM5LjM4NC4wNDhhLjcuNyAwIDAgMSAuMTM2LS4xMzkuNzQuNzQgMCAwIDEgLjU4LS4xMzRsLjk4MS4yMDkuNjkuMjYzYS43LjcgMCAwIDEgLjM3LjMyOGwuMDMzLS4wMDdhMSAxIDAgMCAxIC4xNC0uMDEzbC4xMDMuMDA4LjUwNi4wODQtLjA1LS4xNjRhLjYyLjYyIDAgMCAxIC4wNDgtLjQ3NWwuMzk3LS43NTNhLjY3LjY3IDAgMCAxIC4yNjgtLjI3M2wxLjE2NS0uNjU4YS43My43MyAwIDAgMSAuNjcyLS4wMjYuNzQuNzQgMCAwIDEgLjU0LS4wNmwuMjU1LjA3NC4wMzQuMDFhLjc0Ljc0IDAgMCAxIC42NzQuMDc3bC4zOC4yNThjLjEuMDY5LjE4LjE2LjIzLjI2NmwuNTI4LjExNS4yNjItLjAzNS4wNTItLjAxOGEuNy43IDAgMCAxIC4xMDQtLjE3bC4yMjgtLjI2OGEuNy43IDAgMCAxIC4xNy0uMTQzbC40NDEtLjI2NS4xNzUtLjEzOC0uNTcyLS4zNzRhLjY1LjY1IDAgMCAxLS4zLS41MzFsLS4wMS0uNjM3LS4yMzgtLjIxNGEuNjQuNjQgMCAwIDEtLjIxNy0uNDc1di0uMjMyYzAtLjI2NS4xNjctLjUwMi40MjctLjYwNWwtLjA5My0uMTA1YS42NC42NCAwIDAgMS0uMTYyLS4zODVsLS4wMi0uMjlhMSAxIDAgMCAxIC4wMDEtLjA4Mi43NDMuNzQzIDAgMCAxLS44MjQtLjAxM2wtLjIwMS0uMTQ0YS42NC42NCAwIDAgMS0uMjMtLjc2bC4xMDctLjI1OS4wMy0uMzM0YS42My42MyAwIDAgMSAuMTEtLjMwM2wuNDQ3LS42NC40NjEtLjU2MWEuNi42IDAgMCAxIC4wMS0uMjMyLjY2LjY2IDAgMCAxIC4zNi0uNDRsLjIzOC0uMTE2YS43LjcgMCAwIDEgLjI1Mi0uMDcxbC0uMDEyLS42ODlhLjYuNiAwIDAgMSAuMDQtLjIzbC4yMjctLjYxNS4wMi0uMjE0YS42LjYgMCAwIDEgLjAzOS0uMTY0IDEgMSAwIDAgMS0uMDgzLS4wMzZsLS4xNzktLjA5LS41MjYuMDVhLjczLjczIDAgMCAxLS42MTQtLjIzOWwtLjM0OC0uNC0uMTA2LjA0MWEuNzQuNzQgMCAwIDEtLjU0My0uMDA1bC0uMTktLjA3Ny0uMDUzLjAwNGEuNzUuNzUgMCAwIDEtLjQ0My0uMTA2bC0uODYtLjU0OGEuNy43IDAgMCAxLS4xMzYtLjExMy43LjcgMCAwIDEtLjItLjAwOGwtLjQ2MS0uMDhhLjY4LjY4IDAgMCAxLS41Ny0uNThsLS4wMTEtLjEwNWEuNy43IDAgMCAxLS40NzUtLjMxNGwtLjAxLS4wMTZhLjcuNyAwIDAgMS0uMjk2LS4xNDZsLS4xNzItLjE0M2EuNy43IDAgMCAxLS4xMTMtLjEyLjcuNyAwIDAgMS0uNTItLjI4NHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi42NDggMS45ODZhLjczLjczIDAgMCAxIC43Ny4yODRsLjIxNy4zMWguMTEzYy4zMTcgMCAuNTkyLjIuNjg0LjQ5OWwuMDM5LjEyNmEuNzIuNzIgMCAwIDEgLjQxLjI1My43LjcgMCAwIDEgLjE4Ny4wNjNsLjI4Ny4xNGEuNy43IDAgMCAxIC4yOTQuMjY3bC4yMzYtLjA1NWEuNzIuNzIgMCAwIDEgLjYwOS4xMy43LjcgMCAwIDEgLjI3My41NTJ2LjI1bC40ODQuMzIzYS43LjcgMCAwIDEgLjMyOC4wNThsLjA3OC4wMzMuMDk5LS4wNGEuNzQuNzQgMCAwIDEgLjQ3NS0uMDIzbC4zODkuMTE0Yy4xMzYuMDQuMjU2LjExOC4zNDYuMjI2bC4yOC4zMzYuMzc0LS4wMzdhLjc0Ljc0IDAgMCAxIC40MS4wNzlsLjIyNi4xMi4zMzEuMDA2Yy4xMzMuMDAzLjI2LjA0LjM3MS4xMWwuMjg5LjE3OWMuMzEyLjE5Ni40MjIuNi4yNS45MmwtLjMxMi41NzgtLjAxNi4xNzRhLjcuNyAwIDAgMS0uMDM0LjE2bC0uMjIyLjYzLjAxNyAxLjA0NWEuNjkuNjkgMCAwIDEtLjI1Ni41NDlsLS40MDcuMzMzYS43LjcgMCAwIDEtLjI0My4xM2wtLjcuODg1Yy4yNC4wNi40NC4yMzguNTEyLjQ4MmwuMDc3LjI1Ni4wOTcuMTIuMjI4LjMzNGEuNjkuNjkgMCAwIDEtLjAxNS44MDFsLjI3LjMxN2EuNy43IDAgMCAxIC4xNjUuNDgzbC0uMDIuMzY0YS43LjcgMCAwIDEtLjI4LjUybC4wNS4wNDhhLjY5LjY5IDAgMCAxIC4wNjEuOTVsLjA4NS4wNTguMDktLjAzMWEuNzIuNzIgMCAwIDEgLjg4OC4zNjVsLjExNy4yNWEuNjkuNjkgMCAwIDEtLjA3OS43MTJsLS4wMzkuMDU1YS42OS42OSAwIDAgMS0uMjQ4LjY0MmwtLjcyLjU4Ny0uMzEyLjE5NmEuNy43IDAgMCAxLS4wNjMuMzE3LjcuNyAwIDAgMS0uNDAyLjM2OWwtLjYzMS4yMjhhMSAxIDAgMCAxLS4xNDkuMDM3bC0uNDcyLjA2NmEuNy43IDAgMCAxLS4yNzQtLjAxM2wtLjk3LS4yMjItLjY0NS0uMTg1LS4wNS0uMDE2YS43My43MyAwIDAgMS0uNDI5LS4wNzhsLS4yMjItLjEyYS43My43MyAwIDAgMS0uNTI4LS4wOTZsLS42MDguMzYtLjE5Mi4zOC4xODcuNjQzYS43LjcgMCAwIDEtLjA2OC41NC43MS43MSAwIDAgMS0uNDMzLjMyOGwtLjc2OC4yYS43LjcgMCAwIDEtLjE4NC4wMjRsLS4xMDItLjAwOC0uNjQ0LS4xMTItLjI5Mi4wNThhLjc0Ljc0IDAgMCAxLS40NS0uMDUzbC0uMzQ0LS4xNjRhLjcuNyAwIDAgMS0uMzcyLS40MjhsLS4yODItLjExMy0uMTE4LS4wMjVhLjcyLjcyIDAgMCAxLS42NTIuMjVsLTEuMjE1LS4xNjFhLjcuNyAwIDAgMS0uMjcyLS4wOTNsLS4yMDUtLjEyaC0uMzFhLjcyLjcyIDAgMCAxLS41Mi0uMjJsLS4yMDgtLjIxNy0uNjk2LS4yOTRhLjcuNyAwIDAgMS0uMzQtLjI5OGwtLjE0MS0uMjQ1LS4yOTgtLjE2MWEuNjkzLjY5MyAwIDAgMS0uMjA4LTEuMDU5bC40NjQtLjU1My4yNTctMS4zOGExIDEgMCAwIDEgLjAyNC0uMDkyLjcuNyAwIDAgMS0uMDQtLjMyOWwuMjEzLTEuODIyYTEgMSAwIDAgMSAuMDE5LS4xLjY5LjY5IDAgMCAxIC4xMzgtLjg1Ny43LjcgMCAwIDEtLjA3NS0uMjE2bC0uMzI4LS4xNjVhLjcuNyAwIDAgMS0uMjQ3LS4yMDZsLS41NTktLjcyOGEuNy43IDAgMCAxLS4xMjYtLjI2NWwtLjE2NS0uNzM3LS4wMDItLjAwOC0uMDc0LS4wNWEuNy43IDAgMCAxLS4xNjItLjE1MWwtLjI0LS4zMTMtMS4zNDMtLjUyNGgtLjM4NmEuNzIuNzIgMCAwIDEtLjYxNy0uMzQ3bC0uMTY0LS4yNzVhLjcuNyAwIDAgMS0uMDgzLS40OTUuNy43IDAgMCAxLS4yNzYtLjM1TDEuNzU0IDguMWEuNjk1LjY5NSAwIDAgMSAuMzczLS44NjVsMS4wMTctLjQ2NmEuNy43IDAgMCAxIC4yNDEtLjA2M2wxLjQwMS0uMTI0YS43NC43NCAwIDAgMSAuNTc0LjIwN2wuMjU5LjI1OS4wNTQtLjAyMWEuNzMuNzMgMCAwIDEgLjM5NC0uMDM2bC4xODcuMDMzLS4yNTMtLjU5Ni0uMTktLjc1N2EuNy43IDAgMCAxIC4xMi0uNTgzLjcxLjcxIDAgMCAxIC41MzUtLjI4NGwuNTc0LS4wMjlhLjcuNyAwIDAgMSAuNTU4LjIyMmwuNDkzLjUxOS42MzkuMTIzLjAwNy0uMDc5YS43LjcgMCAwIDEgLjQ4Mi0uNjA1bDEuMjEzLS40MDkuMzI1LS4yOTItLjA0Ni0uNzFhLjcuNyAwIDAgMSAuMDYtLjMzMWwuMjU0LS41NDVhLjcuNyAwIDAgMSAuNDctLjM4OHptLS4xODggMS45NzgtLjMzLjA4MS0uMDM2LjA3My4wNTUuODE2Yy4wMTMuMi0uMDcuMzkyLS4yMjcuNTI3bC0uNjczLjU3OGEuNy43IDAgMCAxLS4yNDkuMTM4bC0uNzM3LjIzOC4yMjguMTU3LS4yODMuMTM1YS42OC42OCAwIDAgMS0uMzQ3LjM3OGwtLjQ4My4yM2EuNzYuNzYgMCAwIDEtLjQ1LjA2bC0xLjE5LS4yMnYuMDA2bC4wNTcuNzk5Yy4wMjQuMzQyLS4yMy42NC0uNTkuNjk0bC0uMzA0LjA0NGEuNy43IDAgMCAxLS4yMzYtLjAwM2wtLjU4OS0uMS0uMjk5LjExYS43My43MyAwIDAgMS0uNzU1LS4xNTJsLS4zNDYtLjMzLS45MjMuMDc4LS4wMzkuMDE3Yy4xNS4xMy4yMy4zMTYuMjIyLjUwNWwuMDEuMDAzIDEuNjI2LjYwOHEuMTg1LjA3Mi4zLjIxNWwuMjA3LjI1N2EuNzUuNzUgMCAwIDEgLjM5Ni4wNzlsLjM5OC4yMDRjLjE2LjA4My4yOC4yMjMuMzMzLjM4NWwuNTUzLjI4NS0uNTk1LjE5N2EuNy43IDAgMCAxLS4zMTYuMjk5bC4zNS40MzYuNjE2LjI5NmEuNjQ1LjY0NSAwIDAgMSAuMzYyLjczNWwtLjAwNy4wMjguMTM0LjIzNmMuMTA3LjE5LjEwNy40MTEuMDEuNTk2bC4wNTcuMDQ0YS42Ny42NyAwIDAgMSAuMjE4LjMwNGwuMzg3IDEuMWEuNjIuNjIgMCAwIDEtLjAzNi40OTVsLjI2Mi43NDYtLjcyMi0uMzk4YS43LjcgMCAwIDEtLjI3Mi4wMTIuNi42IDAgMCAxLS4wODUuMTc3bC0uMzA1LjQ1MS0uMjYgMS4zMzVhLjY0LjY0IDAgMCAxLS4xNS4zMDFsLS4wNzUuMDg3YTEgMSAwIDAgMSAuMDQyLjA2M2wuMTIuMTk3LjYuMjQyYy4wOTMuMDQuMTY4LjA5LjIzMy4xNTRsLjA5Ny4wOTZoLjE5YS43NC43NCAwIDAgMSAuMzUzLjA5bC4yNTEuMTM5LjM4NC4wNDhhLjcuNyAwIDAgMSAuMTM2LS4xMzkuNzQuNzQgMCAwIDEgLjU4LS4xMzRsLjk4MS4yMDkuNjkuMjYzYS43LjcgMCAwIDEgLjM3LjMyOGwuMDMzLS4wMDdhMSAxIDAgMCAxIC4xNC0uMDEzbC4xMDMuMDA4LjUwNi4wODQtLjA1LS4xNjRhLjYyLjYyIDAgMCAxIC4wNDgtLjQ3NWwuMzk3LS43NTNhLjY3LjY3IDAgMCAxIC4yNjgtLjI3M2wxLjE2NS0uNjU4YS43My43MyAwIDAgMSAuNjcyLS4wMjYuNzQuNzQgMCAwIDEgLjU0LS4wNmwuMjU1LjA3NC4wMzQuMDFhLjc0Ljc0IDAgMCAxIC42NzQuMDc3bC4zOC4yNThjLjEuMDY5LjE4LjE2LjIzLjI2NmwuNTI4LjExNS4yNjItLjAzNS4wNTItLjAxOGEuNy43IDAgMCAxIC4xMDQtLjE3bC4yMjgtLjI2OGEuNy43IDAgMCAxIC4xNy0uMTQzbC40NDEtLjI2NS4xNzUtLjEzOC0uNTcyLS4zNzRhLjY1LjY1IDAgMCAxLS4zLS41MzFsLS4wMS0uNjM3LS4yMzgtLjIxNGEuNjQuNjQgMCAwIDEtLjIxNy0uNDc1di0uMjMyYzAtLjI2NS4xNjctLjUwMi40MjctLjYwNWwtLjA5My0uMTA1YS42NC42NCAwIDAgMS0uMTYyLS4zODVsLS4wMi0uMjlhMSAxIDAgMCAxIC4wMDEtLjA4Mi43NDMuNzQzIDAgMCAxLS44MjQtLjAxM2wtLjIwMS0uMTQ0YS42NC42NCAwIDAgMS0uMjMtLjc2bC4xMDctLjI1OS4wMy0uMzM0YS42My42MyAwIDAgMSAuMTEtLjMwM2wuNDQ3LS42NC40NjEtLjU2MWEuNi42IDAgMCAxIC4wMS0uMjMyLjY2LjY2IDAgMCAxIC4zNi0uNDRsLjIzOC0uMTE2YS43LjcgMCAwIDEgLjI1Mi0uMDcxbC0uMDEyLS42ODlhLjYuNiAwIDAgMSAuMDQtLjIzbC4yMjctLjYxNS4wMi0uMjE0YS42LjYgMCAwIDEgLjAzOS0uMTY0IDEgMSAwIDAgMS0uMDgzLS4wMzZsLS4xNzktLjA5LS41MjYuMDVhLjczLjczIDAgMCAxLS42MTQtLjIzOWwtLjM0OC0uNC0uMTA2LjA0MWEuNzQuNzQgMCAwIDEtLjU0My0uMDA1bC0uMTktLjA3Ny0uMDUzLjAwNGEuNzUuNzUgMCAwIDEtLjQ0My0uMTA2bC0uODYtLjU0OGEuNy43IDAgMCAxLS4xMzYtLjExMy43LjcgMCAwIDEtLjItLjAwOGwtLjQ2MS0uMDhhLjY4LjY4IDAgMCAxLS41Ny0uNThsLS4wMTEtLjEwNWEuNy43IDAgMCAxLS40NzUtLjMxNGwtLjAxLS4wMTZhLjcuNyAwIDAgMS0uMjk2LS4xNDZsLS4xNzItLjE0M2EuNy43IDAgMCAxLS4xMTMtLjEyLjcuNyAwIDAgMS0uNTItLjI4NHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-header-territories{height:26px;position:absolute;width:26px;z-index:2}.gpf-btn-icon-header-territories{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNOC42NjcgMTUuMzMzIDYgMTIuNjY3aDUuMzMzek04LjY2NyAybDIuNjY2IDIuNjY3SDZ6bTAgOGExLjMzMyAxLjMzMyAwIDEgMSAwLTIuNjY3IDEuMzMzIDEuMzMzIDAgMCAxIDAgMi42NjdNMiA4LjY2NyA0LjY2NyA2djUuMzMzem0xMy4zMzMgMC0yLjY2NiAyLjY2NlY2eiIvPjwvc3ZnPg==);background-position:50%;background-repeat:no-repeat;background-size:auto auto}.gpf-panel__body_territories{max-height:300px;overflow:auto}.gpf-panel__title_territories{color:#101092;font-size:1rem;font-weight:400;margin:0;padding:12px 15px;position:relative;right:-16px}.gpf-panel__header_territories{align-content:center;align-items:center;background:#e3e3fd;display:flex;flex-direction:row;height:48px}#GPterritoriesPanelClose{right:0;top:0}.gpf-tile{height:150px;width:150px}.tiles-reduce div.fr-tile{height:unset;padding:unset;width:unset}.fr-tile:hover{background-color:var(--background-contrast-grey)}.fr-tile__title:before{background-image:unset}.gpf-tile__header{align-items:center;display:flex;flex-direction:column}.territories-entries{display:grid}.tiles-direction.tiles-0{grid-template-columns:repeat(3,1fr);max-height:none!important}.tiles-direction.tiles-1{grid-template-columns:repeat(1,1fr)}.tiles-direction.tiles-2{grid-template-columns:repeat(2,1fr)}.tiles-direction.tiles-3{grid-template-columns:repeat(3,1fr)}.tiles-direction.tiles-4{grid-template-columns:repeat(4,1fr)}div.fr-tile div.fr-tile__header div.fr-tile__icon,div.fr-tile div.fr-tile__header div.fr-tile__thumbnail{display:block}.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__icon,.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__thumbnail{display:none}.fr-tile__icon{background-position:50%;background-repeat:no-repeat;background-size:auto auto;height:50px;width:50px}.tiles-icon div.fr-tile div.fr-tile__header div.fr-tile__thumbnail,.tiles-thumbnail div.fr-tile div.fr-tile__header div.fr-tile__icon{display:none}@media (max-width:576px){.tiles-direction.tiles-4{grid-template-columns:repeat(3,1fr)}}@media (max-width:382px){.tiles-direction.tiles-0,.tiles-direction.tiles-3,.tiles-direction.tiles-4{grid-template-columns:repeat(2,1fr)}}button[id^=GPshowControlListPicto-][aria-pressed=true]+dialog{width:370px}div[id^=GPcontrolList-] .GPshowOpen>span{font-size:32px;position:absolute;transform:translate(-5px,-2px)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content{display:flex;flex-direction:column;overflow:auto;padding:0 1.5rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content:not(:has(~.gpf-panel__footer)){padding-bottom:2rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div{align-items:center;column-gap:1rem;display:flex;flex-direction:row;padding:.5rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div:hover,dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div:hover>button{background-color:var(--hover)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button{height:40px;width:40px}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button:after{background-color:var(--text-default-grey)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>div{display:flex;flex-direction:column}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>div>span:nth-child(2){color:var(--text-mention-grey);font-size:.75rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__footer{background-color:var(--background-lifted-grey);padding:1rem 2rem 2rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__footer>button{justify-content:center;width:100%} + */:root{--size-per-row:44px}.gpf-widget{padding:2px;pointer-events:auto;position:absolute}.gpf-widget-button{width:40px}.gpf-panel{background-color:unset;max-height:100%;position:relative;width:max-content}.gpf-panel form{overflow:auto;padding:0 2rem 2rem}.gpf-panel--hidden{display:none}.gpf-panel__body{display:flex;flex:1 1 auto;flex-direction:column;max-height:100%!important;min-height:0;overflow:unset;position:relative}.gpf-panel__title{text-align:left}.gpf-panel__footer{background-color:transparent;justify-content:center;margin-top:0;padding:0}.gpf-panel__footer>input[type=submit]{width:100%}.gpf-panel__content{margin-bottom:unset;padding:unset}.gpf-panel--close,.gpf-panel--info,.gpf-panel--reduce{cursor:pointer;position:relative}.gpf-flex{align-items:center;flex-direction:row}.gpf-flex,.gpf-flex-column{display:flex;justify-content:space-evenly}.gpf-flex-column{flex-direction:column}.gpf-flex-padding{padding:5px}.gpf-hidden{display:none;opacity:0;visibility:hidden}.gpf-visible{display:block;opacity:100%;visibility:visible}.gpf-waiting{background-color:hsla(0,0%,100%,.9);border-radius:4px;bottom:0;font-size:1.5em;font-weight:700;height:inherit;left:0;overflow:hidden;position:absolute;right:0;top:80px}.gpf-waiting--hidden{display:none}.gpf-waiting--visible{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;z-index:4000}.gpf-waiting_info{margin:auto}.gpf-btn-icon.gpf-btn--secondary,.gpf-btn-icon.gpf-btn--tertiary{background-color:var(--background-default-grey)}.gpf-widget>.gpf-btn-icon[aria-pressed=true]{background-color:var(--hover-tint);position:relative}.gpf-widget:has(>.gpf-btn-icon[aria-pressed=true]):after{background-color:var(--background-action-high-blue-france);content:"";height:40px;left:44px;position:absolute;transform:translateY(-40px);width:3px}@supports(-moz-appearance:none){.gpf-widget:has(.gpf-btn-icon[aria-pressed=true]):after{transform:unset}}.gpf-widget>.gpf-btn-icon[aria-label]:hover:before{background-image:conic-gradient(from 56.31deg at 0 50%,transparent 0deg,var(--background-overlap-grey) 0deg,var(--background-overlap-grey) 67.38deg,transparent 67.38deg),conic-gradient(from 56.31deg at 0 50%,transparent 0deg,var(--border-default-grey) 0deg,var(--border-default-grey) 67.38deg,transparent 67.38deg),linear-gradient(90deg,var(--border-default-grey),var(--border-default-grey)),linear-gradient(90deg,var(--background-overlap-grey),var(--background-overlap-grey));background-position:.125rem 50%,0 50%,.375rem 100%,.375rem 100%;background-repeat:no-repeat;background-size:.375rem .5rem,.375rem .5rem,1px,100%,calc(100% - .5rem) 100%;color:var(--text-default-grey);content:attr(aria-label);filter:drop-shadow(0 2px 6px rgba(0,0,18,.16));filter:drop-shadow(var(--overlap-shadow));font-size:.75rem;padding:.5rem .5rem .5rem 1.25rem;position:absolute;top:0;white-space:nowrap;width:fit-content}.position-container-bottom-left .gpf-widget>.gpf-btn-icon[aria-label]:hover:before,.position-container-top-left .gpf-widget>.gpf-btn-icon[aria-label]:hover:before{transform:translateX(24px)}.position-container-bottom-right .gpf-widget>.gpf-btn-icon[aria-label]:hover:before,.position-container-top-right .gpf-widget>.gpf-btn-icon[aria-label]:hover:before{background-image:conic-gradient(from 236.31deg at 100% 50%,transparent 0deg,var(--background-overlap-grey) 0deg,var(--background-overlap-grey) 67.38deg,transparent 67.38deg),conic-gradient(from 236.31deg at 100% 50%,transparent 0deg,var(--border-default-grey) 0deg,var(--border-default-grey) 67.38deg,transparent 67.38deg),linear-gradient(90deg,var(--border-default-grey),var(--border-default-grey)),linear-gradient(90deg,var(--background-overlap-grey),var(--background-overlap-grey));background-position:calc(100% - .125rem) 50%,100% 50%,calc(100% - .375rem) 0,calc(100% - .375rem) 0;background-size:.375rem .5rem,.375rem .5rem,1px 100%,100%;padding:.5rem 1.25rem .5rem .5rem;transform:translateX(calc(-100% - 16px))}.gpf-btn--secondary,.gpf-btn--tertiary{position:relative}.gpf-btn--secondary:after,.gpf-btn--tertiary:after{background-color:var(--text-action-high-blue-france);content:"";height:100%;left:0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask:linear-gradient(#0000,#0000);mask:linear-gradient(#0000,#0000);position:absolute;top:0;width:100%}.gpf-btn--secondary:disabled:after,.gpf-btn--tertiary:disabled:after{background-color:var(--text-disabled-grey)}.position-container-top-left .gpf-button-no-gutter,.position-container-top-right .gpf-button-no-gutter{margin-bottom:-5px}.position-container-bottom-left .gpf-button-no-gutter,.position-container-bottom-right .gpf-button-no-gutter{margin-top:-5px}.gpf-btn-icon-close{float:right;position:absolute;right:.5rem;top:.5rem}.gpf-btn-icon-return{float:left;left:.5rem;position:absolute;top:.5rem}.gpf-btn-icon-return:after{-webkit-mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAANVJREFUKJGd07EuREEYxfGzK0hsQSOhkKxoZButR9B5FJ3Gc2gUKPU6CkGx0XgGuhsaDVH5aSxjc+9u9p7kK74z8/9OJjPTQdqq25qcAPeTDKbSGK8BhjitWftX48nbSU6S7CZZSbKaZDnJ3LTkLdz50xsecYsz7GGxTC7hY3xp1ieO0K2D13FTbH7BPR5Q/QyusFMHBxvFgAvMYwE9HOIDB01wsFmcs/SXcInzSXCwhn6Nv4/rpqsaqUryVOMPkzyPmlmf52uSq1HTMfvH6CV5bwv/6htI1GwnhVkfqAAAAABJRU5ErkJggg==) center no-repeat;mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAANVJREFUKJGd07EuREEYxfGzK0hsQSOhkKxoZButR9B5FJ3Gc2gUKPU6CkGx0XgGuhsaDVH5aSxjc+9u9p7kK74z8/9OJjPTQdqq25qcAPeTDKbSGK8BhjitWftX48nbSU6S7CZZSbKaZDnJ3LTkLdz50xsecYsz7GGxTC7hY3xp1ieO0K2D13FTbH7BPR5Q/QyusFMHBxvFgAvMYwE9HOIDB01wsFmcs/SXcInzSXCwhn6Nv4/rpqsaqUryVOMPkzyPmlmf52uSq1HTMfvH6CV5bwv/6htI1GwnhVkfqAAAAABJRU5ErkJggg==) center no-repeat}.gpf-btn-icon{caret-color:transparent;width:inherit}.gpf-btn-icon-reset:after{background-color:var(--text-action-high-blue-france);-webkit-mask:linear-gradient(#fff 0 0) top /100% 1px,linear-gradient(#fff 0 0) bottom/100% 1px,linear-gradient(#fff 0 0) left /1px 100%,linear-gradient(#fff 0 0) right /1px 100%,url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=) -25px center;mask:linear-gradient(#fff 0 0) top /100% 1px,linear-gradient(#fff 0 0) bottom/100% 1px,linear-gradient(#fff 0 0) left /1px 100%,linear-gradient(#fff 0 0) right /1px 100%,url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=) -25px center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.gpf-btn-icon-info{height:40px;width:40px}.gpf-input{padding-left:5px}.gpf-radio-btn-group{display:flex;gap:1em}.gpf-panel__advancedlist,.gpf-panel__list{background-color:#fff;border:1px solid #999;max-height:140px;overflow-y:hidden;position:absolute;width:inherit;z-index:2}.gpf-panel__advancedlist{border-top:none;font-size:.9em;width:calc(100% - 28px)}.gpf-panel__items:hover{background-color:#cedbef;color:#000}.gpf-panel__items{color:#5e5e5e;cursor:pointer;font-size:1em;height:28px;line-height:16px;overflow:hidden;padding:6px 10px;text-overflow:ellipsis;white-space:nowrap;width:100%}.gpf-panel:after,.gpf-panel:before{flex:0;height:unset}:root{--size-per-row:50px}.position-container-bottom-left,.position-container-bottom-right,.position-container-top-left,.position-container-top-right{display:flex;flex-direction:column;height:calc(100% - 8px);justify-content:flex-start;min-height:var(--size-per-row);position:absolute;width:calc(var(--size-per-row) + 4px)}.position-container-top-left,.position-container-top-right{top:4px}.position-container-top-left{float:left;left:8px}.position-container-top-right{float:right;right:4px}.position-container-bottom-left,.position-container-bottom-right{bottom:4px;justify-content:flex-end}.position-container-bottom-right{float:right;right:4px}.position-container-bottom-left{float:left;left:8px}.gp-feature-info-div{background-color:var(--background-default-grey);bottom:17px;box-shadow:0 0 5px var(--text-default-grey);font-size:.75em;max-width:calc(100vw - 80px);padding:10px;position:relative}.gp-feature-info-div:before{border-left:14px solid transparent;border-right:14px solid transparent;border-top:15px solid var(--background-default-grey);bottom:-15px;content:"";left:50%;margin-left:-14px;position:absolute}.gp-feature-info-div .closer{background-color:var(--background-default-grey);border:none;border-bottom-right-radius:10px;border-top-right-radius:10px;cursor:pointer;display:block;height:30px;position:absolute;right:0;top:0;width:30px}.gp-feature-info-div .closer:after{background-color:var(--text-action-high-blue-france);content:"";height:100%;left:0;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwMDA5MSIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwMDA5MSIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=) center no-repeat;-webkit-mask-size:14px 14px;mask-size:14px 14px;position:absolute;top:0;width:100%}.gp-features-content-div{max-height:340px;max-width:420px;min-width:260px;overflow:auto}.gp-features-content-div h5,.gp-features-content-div h6,.gp-features-content-div p,.gp-features-content-div ul{margin:0}.gp-features-content-div ul{list-style-type:none;padding:0}.geoportail-popup-content h5,.geoportail-popup-content h6,.geoportail-popup-content p,.gp-att-description-div,.gp-att-name-div,.gp-att-others-div{padding:0 10px}.geoportail-popup-content h5:not(:last-child),.geoportail-popup-content h6:not(:last-child),.geoportail-popup-content p:not(:last-child),.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){margin-bottom:15px}.geoportail-popup-content h5:last-child,.geoportail-popup-content h6:last-child,.geoportail-popup-content p:last-child,.gp-att-description-div:last-child,.gp-att-name-div,.gp-att-others-div:last-child{margin-bottom:10px}.geoportail-popup-content h5:first-child,.geoportail-popup-content h6:first-child,.geoportail-popup-content p:first-child,.gp-att-description-div:first-child,.gp-att-name-div:first-child,.gp-att-others-div:first-child{margin-top:10px}.gp-att-name-div,.gp-features-content-div h5{color:#0b6ba7;font-size:1.2em;font-weight:700;padding-right:35px;text-transform:uppercase}.gp-features-content-div h6{font-size:1.1em}.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){border-bottom:1px dotted #666;padding-bottom:10px}.ol-disabled{--idle:transparent;--hover:var(--background-disabled-grey-hover);--active:var(--background-disabled-grey-active);background-color:var(--background-disabled-grey);color:var(--text-disabled-grey);cursor:not-allowed;display:block}.ol-scale-bar,.ol-scale-line{z-index:-1}.fr-collapse{--collapse-max-height:none}.fr-collapse:not(.fr-collapse--expanded):not(.fr-collapsing){--collapse-max-height:0}@media (max-width:576px){.gpf-mobile-fullscreen>button[aria-pressed=true]~dialog{width:100vw!important}.gpf-mobile-fullscreen form div,.gpf-mobile-fullscreen form p{margin:auto;text-align:center}.gpf-mobile-fullscreen .gpf-mobile-form{height:100vh;max-height:unset}.position-container-bottom-left .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-bottom-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-top-left .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-top-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog{left:-8px!important;right:unset!important;top:-4px!important}.position-container-bottom-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-top-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog{left:unset!important;right:-4px!important}}.gpf-btn-icon-drawing:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI1Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTUuMDQgOS40MzcgMTMuNzA0IDguMWwtOC44MTEgOC44MXYxLjMzOUg2LjIzek0xNi4zNzggOC4xbDEuMzM4LTEuMzM4LTEuMzM4LTEuMzM3TDE1LjA0IDYuNzZ6TTcuMDE0IDIwLjE0SDN2LTQuMDEzbDEyLjcxLTEyLjcxYS45NDYuOTQ2IDAgMCAxIDEuMzM3IDBsMi42NzYgMi42NzZjLjM3LjM3LjM3Ljk2OSAwIDEuMzM4eiIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI1Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTUuMDQgOS40MzcgMTMuNzA0IDguMWwtOC44MTEgOC44MXYxLjMzOUg2LjIzek0xNi4zNzggOC4xbDEuMzM4LTEuMzM4LTEuMzM4LTEuMzM3TDE1LjA0IDYuNzZ6TTcuMDE0IDIwLjE0SDN2LTQuMDEzbDEyLjcxLTEyLjcxYS45NDYuOTQ2IDAgMCAxIDEuMzM3IDBsMi42NzYgMi42NzZjLjM3LjM3LjM3Ljk2OSAwIDEuMzM4eiIvPjwvc3ZnPg==) center no-repeat}.gp-label-div,.gp-styling-div{transform:translateY(20px);width:370px}.gp-label-div textarea{margin-bottom:1rem;max-width:100%}.gp-label-div input{width:100%}.gp-styling-option.fr-range--sm[data-fr-js-range]:after,.gp-styling-option.fr-range--sm[data-fr-js-range]:before{top:1.74rem}.drawing-tool{width:40px}.drawing-tool-active{background-color:var(--hover-tint)}button[id^=drawing-tool-point-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOCAxNi40ODUgNC4yNDMtNC4yNDJhNiA2IDAgMSAwLTguNDg2IDB6bTUuNjU3LTIuODI4TDggMTkuMzE0bC01LjY1Ny01LjY1N2E4IDggMCAxIDEgMTEuMzE0IDBNMSAyMGgxNHYySDF6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOCAxNi40ODUgNC4yNDMtNC4yNDJhNiA2IDAgMSAwLTguNDg2IDB6bTUuNjU3LTIuODI4TDggMTkuMzE0bC01LjY1Ny01LjY1N2E4IDggMCAxIDEgMTEuMzE0IDBNMSAyMGgxNHYySDF6Ii8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-line-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zLjQxNCAxNCAxMy41NTYgMy44NThsLTEuNDE0LTEuNDE0TDIgMTIuNTg2VjE0em0uODI5IDJIMHYtNC4yNDNMMTEuNDM1LjMyMmExIDEgMCAwIDEgMS40MTQgMGwyLjgyOSAyLjgyOWExIDEgMCAwIDEgMCAxLjQxNHpNMCAxOGgxOHYySDB6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zLjQxNCAxNCAxMy41NTYgMy44NThsLTEuNDE0LTEuNDE0TDIgMTIuNTg2VjE0em0uODI5IDJIMHYtNC4yNDNMMTEuNDM1LjMyMmExIDEgMCAwIDEgMS40MTQgMGwyLjgyOSAyLjgyOWExIDEgMCAwIDEgMCAxLjQxNHpNMCAxOGgxOHYySDB6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat}button[id^=drawing-tool-polygon-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtMTEgMy4wMyA4LjUzIDYuMTk4LTMuMjU4IDEwLjAyOEg1LjcyOUwyLjQ3IDkuMjI4em0xMC43NDcgNS40NzhMMTEgLjcuMjUzIDguNTA4bDQuMTA1IDEyLjYzNGgxMy4yODR6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtMTEgMy4wMyA4LjUzIDYuMTk4LTMuMjU4IDEwLjAyOEg1LjcyOUwyLjQ3IDkuMjI4em0xMC43NDcgNS40NzhMMTEgLjcuMjUzIDguNTA4bDQuMTA1IDEyLjYzNGgxMy4yODR6Ii8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-text-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNyAwYTEgMSAwIDAgMSAxIDF2My43NTdsLTIgMlYySDJ2MTZoMTR2LTIuNzU4bDItMlYxOWExIDEgMCAwIDEtMSAxSDFhMSAxIDAgMCAxLTEtMVYxYTEgMSAwIDAgMSAxLTF6bTEuNzc4IDYuODA4IDEuNDE0IDEuNDE0TDEyLjQxNCAxNmwtMS40MTYtLjAwMi4wMDItMS40MTJ6TTEwIDEwdjJINXYtMnptMy00djJINVY2eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNyAwYTEgMSAwIDAgMSAxIDF2My43NTdsLTIgMlYySDJ2MTZoMTR2LTIuNzU4bDItMlYxOWExIDEgMCAwIDEtMSAxSDFhMSAxIDAgMCAxLTEtMVYxYTEgMSAwIDAgMSAxLTF6bTEuNzc4IDYuODA4IDEuNDE0IDEuNDE0TDEyLjQxNCAxNmwtMS40MTYtLjAwMi4wMDItMS40MTJ6TTEwIDEwdjJINXYtMnptMy00djJINVY2eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-edit-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0xMi4xMjEgNC4yMjIgNS42NTcgNS42NTctLjcwNyA2LjM2NGMtNi4xMjggMS40MTQtOS43ODIgMi40NzUtMTMuMDggNS4zMDNMMi41OTQgMjAuMTVjMy43MjItMy4zMzEgNy45OTUtNC4zMjggMTIuNjQzLTUuNTJsLjQ0Ni00LjAxOC00LjI5Ny00LjI5Ny00LjAxOC40NDZjLTEuMTkyIDQuNjQ4LTIuMTg5IDguOTItNS41MiAxMi42NDNMLjQ1NCAxOC4wMWMyLjgyOC0zLjMgMy44OS02Ljk1MyA1LjMwMy0xMy4wODF6bS0xLjQxNCA3LjA3QTIgMiAwIDAgMSA3Ljg4IDE0LjEyYTIgMiAwIDEgMSAyLjgyNy0yLjgyOG0zLjg5LTEwLjI1MiA2LjM0NiA2LjM0NmEuNS41IDAgMCAxLS4yNzcuODQ4bC0xLjQ3NC4yMy01LjY1Ni01LjY1Ni4yMTItMS40ODVhLjUuNSAwIDAgMSAuODQ4LS4yODMiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0xMi4xMjEgNC4yMjIgNS42NTcgNS42NTctLjcwNyA2LjM2NGMtNi4xMjggMS40MTQtOS43ODIgMi40NzUtMTMuMDggNS4zMDNMMi41OTQgMjAuMTVjMy43MjItMy4zMzEgNy45OTUtNC4zMjggMTIuNjQzLTUuNTJsLjQ0Ni00LjAxOC00LjI5Ny00LjI5Ny00LjAxOC40NDZjLTEuMTkyIDQuNjQ4LTIuMTg5IDguOTItNS41MiAxMi42NDNMLjQ1NCAxOC4wMWMyLjgyOC0zLjMgMy44OS02Ljk1MyA1LjMwMy0xMy4wODF6bS0xLjQxNCA3LjA3QTIgMiAwIDAgMSA3Ljg4IDE0LjEyYTIgMiAwIDEgMSAyLjgyNy0yLjgyOG0zLjg5LTEwLjI1MiA2LjM0NiA2LjM0NmEuNS41IDAgMCAxLS4yNzcuODQ4bC0xLjQ3NC4yMy01LjY1Ni01LjY1Ni4yMTItMS40ODVhLjUuNSAwIDAgMSAuODQ4LS4yODMiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}button[id^=drawing-tool-display]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNNS44MyAxOEEzLjAwMSAzLjAwMSAwIDEgMSAyIDE0LjE3VjUuODNBMy4wMDEgMy4wMDEgMCAxIDEgNS44MyAyaDguMzRBMy4wMDEgMy4wMDEgMCAxIDEgMTggNS44M3Y4LjM0QTMuMDAxIDMuMDAxIDAgMSAxIDE0LjE3IDE4em0wLTJoOC4zNEEzIDMgMCAwIDEgMTYgMTQuMTdWNS44M0EzIDMgMCAwIDEgMTQuMTcgNEg1LjgzQTMgMyAwIDAgMSA0IDUuODN2OC4zNEEzIDMgMCAwIDEgNS44MyAxNk0zIDRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTE0IDBhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTAgMTRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyTTMgMThhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNNS44MyAxOEEzLjAwMSAzLjAwMSAwIDEgMSAyIDE0LjE3VjUuODNBMy4wMDEgMy4wMDEgMCAxIDEgNS44MyAyaDguMzRBMy4wMDEgMy4wMDEgMCAxIDEgMTggNS44M3Y4LjM0QTMuMDAxIDMuMDAxIDAgMSAxIDE0LjE3IDE4em0wLTJoOC4zNEEzIDMgMCAwIDEgMTYgMTQuMTdWNS44M0EzIDMgMCAwIDEgMTQuMTcgNEg1LjgzQTMgMyAwIDAgMSA0IDUuODN2OC4zNEEzIDMgMCAwIDEgNS44MyAxNk0zIDRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTE0IDBhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTAgMTRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyTTMgMThhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyIi8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-tooltip]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTEuMjQ2IDExSDQuNzU0bC0yIDVILjZMNyAwaDJsNi40IDE2aC0yLjE1NHptLS44LTJMOCAyLjg4NSA1LjU1NCA5ek0yMSA4LjUzNVY4aDJ2OGgtMnYtLjUzNWE0IDQgMCAxIDEgMC02LjkzTTE5IDE0YTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTEuMjQ2IDExSDQuNzU0bC0yIDVILjZMNyAwaDJsNi40IDE2aC0yLjE1NHptLS44LTJMOCAyLjg4NSA1LjU1NCA5ek0yMSA4LjUzNVY4aDJ2OGgtMnYtLjUzNWE0IDQgMCAxIDEgMC02LjkzTTE5IDE0YTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNCIvPjwvc3ZnPg==) center no-repeat}button[id^=drawing-tool-remove]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01IDJWMGgxMHYyaDV2MmgtMnYxNWExIDEgMCAwIDEtMSAxSDNhMSAxIDAgMCAxLTEtMVY0SDBWMnpNNCA0djE0aDEyVjR6bTMgM2gydjhIN3ptNCAwaDJ2OGgtMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01IDJWMGgxMHYyaDV2MmgtMnYxNWExIDEgMCAwIDEtMSAxSDNhMSAxIDAgMCAxLTEtMVY0SDBWMnpNNCA0djE0aDEyVjR6bTMgM2gydjhIN3ptNCAwaDJ2OGgtMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-icon-elevation:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIyIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xMy43NCAxOS44M0gyLjUzTDcuODMgOC42bDMuODUgNy4wNyAxLjcyLS45NC0zLjE2LTUuODEgMi43NC01LjczIDQuMzYgOC41OWMuNTgtLjMgMS4yMS0uNTEgMS44OC0uNjRMMTMuODMuNTRjLS4xNy0uMzMtLjUyLS41Mi0uODktLjU0LS4zNyAwLS43MS4yMi0uODcuNTZMOS4wOSA2LjhsLS40NS0uODNjLS4xOC0uMzItLjUzLS41MS0uODktLjUxLS4zNy4wMS0uNy4yMy0uODYuNTZMLjA5IDIwLjM5YS45ODIuOTgyIDAgMCAwIC44OSAxLjRIMTQuNmE3LjIgNy4yIDAgMCAxLS44Ni0xLjk2Ii8+PHBhdGggZD0iTTE2LjQ4IDEzLjY5djEuNTRoNC45MWwtNS41NiA1LjU1LS4wNy4wNyAxLjA4IDEuMDkgNS42My01LjYzdjQuOTFIMjR2LTcuNTN6Ii8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyNHYyMS45NEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIyIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xMy43NCAxOS44M0gyLjUzTDcuODMgOC42bDMuODUgNy4wNyAxLjcyLS45NC0zLjE2LTUuODEgMi43NC01LjczIDQuMzYgOC41OWMuNTgtLjMgMS4yMS0uNTEgMS44OC0uNjRMMTMuODMuNTRjLS4xNy0uMzMtLjUyLS41Mi0uODktLjU0LS4zNyAwLS43MS4yMi0uODcuNTZMOS4wOSA2LjhsLS40NS0uODNjLS4xOC0uMzItLjUzLS41MS0uODktLjUxLS4zNy4wMS0uNy4yMy0uODYuNTZMLjA5IDIwLjM5YS45ODIuOTgyIDAgMCAwIC44OSAxLjRIMTQuNmE3LjIgNy4yIDAgMCAxLS44Ni0xLjk2Ii8+PHBhdGggZD0iTTE2LjQ4IDEzLjY5djEuNTRoNC45MWwtNS41NiA1LjU1LS4wNy4wNyAxLjA4IDEuMDkgNS42My01LjYzdjQuOTFIMjR2LTcuNTN6Ii8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyNHYyMS45NEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==) center no-repeat}[id^=GPelevationPathPanelInfo]{float:left;left:0;position:absolute;top:0}[id^=GPelevationPathPanel]{height:unset}[id^=GPelevationPathPanelInfo]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDUuMjkyIDUuMjkyIj48ZyBzdHlsZT0ic3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSI+PGNpcmNsZSBjeD0iMTA0LjQ3MSIgY3k9IjQyLjY2NyIgcj0iMi40NDciIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9Ii4zOTciIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIvPjwvZz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTA0Ljk3NiA0My45OWgtMS4wMzR2LS4xNzZoLjA1NWEuMzMuMzMgMCAwIDAgLjE2MS0uMDMuMTMuMTMgMCAwIDAgLjA2Mi0uMDg2IDEgMSAwIDAgMCAuMDEyLS4xNjJ2LS41NjVhLjcuNyAwIDAgMC0uMDE1LS4xNjhxLS4wMTQtLjA1LS4wNzQtLjA3M2EuNy43IDAgMCAwLS4yMDEtLjAyNXYtLjE3NWwuNzgtLjE2NHYxLjE3cTAgLjE2LjA0LjIyLjA0MS4wNTkuMjE0LjA1OXptLS4yMTUtMi4zNjlhLjI3LjI3IDAgMCAxLS4wOC4xOTYuMjcuMjcgMCAwIDEtLjE5Ni4wOC4yNy4yNyAwIDAgMS0uMTk1LS4wODIuMjcyLjI3MiAwIDAgMS0uMDAxLS4zOS4yNy4yNyAwIDAgMSAuMTk2LS4wODFxLjExNiAwIC4xOTcuMDguMDguMDguMDguMTk4eiIgc3R5bGU9ImZpbGw6IzAwMDE5MTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6LjI2NDU4MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDUuMjkyIDUuMjkyIj48ZyBzdHlsZT0ic3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSI+PGNpcmNsZSBjeD0iMTA0LjQ3MSIgY3k9IjQyLjY2NyIgcj0iMi40NDciIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9Ii4zOTciIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIvPjwvZz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTA0Ljk3NiA0My45OWgtMS4wMzR2LS4xNzZoLjA1NWEuMzMuMzMgMCAwIDAgLjE2MS0uMDMuMTMuMTMgMCAwIDAgLjA2Mi0uMDg2IDEgMSAwIDAgMCAuMDEyLS4xNjJ2LS41NjVhLjcuNyAwIDAgMC0uMDE1LS4xNjhxLS4wMTQtLjA1LS4wNzQtLjA3M2EuNy43IDAgMCAwLS4yMDEtLjAyNXYtLjE3NWwuNzgtLjE2NHYxLjE3cTAgLjE2LjA0LjIyLjA0MS4wNTkuMjE0LjA1OXptLS4yMTUtMi4zNjlhLjI3LjI3IDAgMCAxLS4wOC4xOTYuMjcuMjcgMCAwIDEtLjE5Ni4wOC4yNy4yNyAwIDAgMS0uMTk1LS4wODIuMjcyLjI3MiAwIDAgMS0uMDAxLS4zOS4yNy4yNyAwIDAgMSAuMTk2LS4wODFxLjExNiAwIC4xOTcuMDguMDguMDguMDguMTk4eiIgc3R5bGU9ImZpbGw6IzAwMDE5MTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6LjI2NDU4MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSIvPjwvc3ZnPg==) center no-repeat}[id^=GPelevationPathProfil]>#profileElevationByDefault>svg{transform:translateY(1rem)}[id^=GPelevationPathProfil]{height:150px;width:300px}.GPelevationPathProfilWrapper{padding:0 2rem}div[id^=GPelevationPathInformationsContainer]{display:grid;grid-template-columns:50% 50%;padding:0 2rem 1rem;width:calc(300px + 4rem)}.GPelevationPathInformations{display:flex;flex-wrap:wrap;font-size:13px;gap:0 .25rem;margin:0}.GPelevationPathInformations>span{white-space:nowrap}@media (max-width:576px){#GPelevationPathProfil,div[id^=GPelevationPathInformationsContainer]{margin:auto}}.gpf-btn-icon-getfeatureinfo:after,button[id^=GPgetFeatureInfoPicto-][aria-pressed=true]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIyMyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDIzIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik05Ljg2IDE3LjRjMC0uMjguMDItLjU1LjA0LS44MmwtMi41LTEuMjVWMi40M2w0LjY5IDIuMzV2Ni43YTkuMiA5LjIgMCAwIDEgMS45OS0xLjdWNC43MkwxOCAzLjA0di4xOWgtLjAxdjUuMjJhOC43NjggOC43NjggMCAwIDEgMi4wMS4wNFYuNzZjMC0uMDgtLjAyLS4xNi0uMDUtLjI0YS41LjUgMCAwIDAtLjE3LS4xOC42LjYgMCAwIDAtLjIzLS4wOGMtLjA4IDAtLjE3IDAtLjI0LjA0TDEzLjAxIDNsLTYtMy03IDN2MTYuNjFjLS4wMS4wOCAwIC4xNi4wNS4yNC4wNC4wNy4xLjE0LjE2LjE4cy4xNS4wNy4yMy4wOGMuMDggMCAuMTcgMCAuMjQtLjA0bDYuMy0yLjcgMi45OSAxLjVjLS4wOC0uNDgtLjEzLS45Ni0uMTMtMS40NnptLTQuNDUtMS41M0wyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTkuODMgMjAuNHYyaC0ydi0yem0tLjU0LTcuOTdjMS44My4yNCAzLjE1IDEuODYgMy4wMyAzLjdhMy41IDMuNSAwIDAgMS0zLjQ5IDMuMjdoLTF2LTJoMWMuNzkgMCAxLjQ0LS42MSAxLjUtMS40LjA1LS43OS0uNTItMS40OC0xLjMtMS41OS0uNzgtLjEtMS41MS40Mi0xLjY3IDEuMTlsLTEuOTYtLjM5YTMuNDg2IDMuNDg2IDAgMCAxIDMuODktMi43OCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyMi4zM3YyMi40SDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIyMyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDIzIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik05Ljg2IDE3LjRjMC0uMjguMDItLjU1LjA0LS44MmwtMi41LTEuMjVWMi40M2w0LjY5IDIuMzV2Ni43YTkuMiA5LjIgMCAwIDEgMS45OS0xLjdWNC43MkwxOCAzLjA0di4xOWgtLjAxdjUuMjJhOC43NjggOC43NjggMCAwIDEgMi4wMS4wNFYuNzZjMC0uMDgtLjAyLS4xNi0uMDUtLjI0YS41LjUgMCAwIDAtLjE3LS4xOC42LjYgMCAwIDAtLjIzLS4wOGMtLjA4IDAtLjE3IDAtLjI0LjA0TDEzLjAxIDNsLTYtMy03IDN2MTYuNjFjLS4wMS4wOCAwIC4xNi4wNS4yNC4wNC4wNy4xLjE0LjE2LjE4cy4xNS4wNy4yMy4wOGMuMDggMCAuMTcgMCAuMjQtLjA0bDYuMy0yLjcgMi45OSAxLjVjLS4wOC0uNDgtLjEzLS45Ni0uMTMtMS40NnptLTQuNDUtMS41M0wyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTkuODMgMjAuNHYyaC0ydi0yem0tLjU0LTcuOTdjMS44My4yNCAzLjE1IDEuODYgMy4wMyAzLjdhMy41IDMuNSAwIDAgMS0zLjQ5IDMuMjdoLTF2LTJoMWMuNzkgMCAxLjQ0LS42MSAxLjUtMS40LjA1LS43OS0uNTItMS40OC0xLjMtMS41OS0uNzgtLjEtMS41MS40Mi0xLjY3IDEuMTlsLTEuOTYtLjM5YTMuNDg2IDMuNDg2IDAgMCAxIDMuODktMi43OCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyMi4zM3YyMi40SDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+) center no-repeat}.gpf-btn-icon-isocurve:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGNUY1RjUiIGQ9Ik04IDkuOVYxNWMwIC41NS40NSAxIDEgMXMxLS40NSAxLTFWOS45QTQuOTk3IDQuOTk3IDAgMCAwIDEzLjkgNCA1LjAwNCA1LjAwNCAwIDAgMCA4IC4xIDQuOTk3IDQuOTk3IDAgMCAwIDQuMSA2IDUuMDEgNS4wMSAwIDAgMCA4IDkuOU05IDJjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zbTQuMjEgMTAuNDJjLS41NS0uMTItMS4wOS4yNC0xLjIxLjc5cy4yNCAxLjA5Ljc5IDEuMjFDMTUuMDYgMTQuODcgMTYgMTUuNjggMTYgMTZjMCAuNTgtMi40NSAyLTcgMnMtNy0xLjQyLTctMmMwLS4zMi45NC0xLjEzIDMuMjEtMS42Mi41NS0uMTIuOTEtLjY2Ljc5LTEuMjFzLS42Ni0uOTEtMS4yMS0uNzlDMS43NSAxMy4wOCAwIDE0LjM5IDAgMTZjMCAyLjYzIDQuNTMgNCA5IDRzOS0xLjM3IDktNGMwLTEuNjEtMS43NS0yLjkyLTQuNzktMy41OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTh2MjBIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGNUY1RjUiIGQ9Ik04IDkuOVYxNWMwIC41NS40NSAxIDEgMXMxLS40NSAxLTFWOS45QTQuOTk3IDQuOTk3IDAgMCAwIDEzLjkgNCA1LjAwNCA1LjAwNCAwIDAgMCA4IC4xIDQuOTk3IDQuOTk3IDAgMCAwIDQuMSA2IDUuMDEgNS4wMSAwIDAgMCA4IDkuOU05IDJjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zbTQuMjEgMTAuNDJjLS41NS0uMTItMS4wOS4yNC0xLjIxLjc5cy4yNCAxLjA5Ljc5IDEuMjFDMTUuMDYgMTQuODcgMTYgMTUuNjggMTYgMTZjMCAuNTgtMi40NSAyLTcgMnMtNy0xLjQyLTctMmMwLS4zMi45NC0xLjEzIDMuMjEtMS42Mi41NS0uMTIuOTEtLjY2Ljc5LTEuMjFzLS42Ni0uOTEtMS4yMS0uNzlDMS43NSAxMy4wOCAwIDE0LjM5IDAgMTZjMCAyLjYzIDQuNTMgNCA5IDRzOS0xLjM3IDktNGMwLTEuNjEtMS43NS0yLjkyLTQuNzktMy41OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTh2MjBIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat}.gpf-flex-isocurve{justify-content:unset}.gpf-btn-icon-isocurve-reset{background-position:-29px}[id^=GPisochronPanel-] p.gpf-label{margin-bottom:.2rem;margin-top:1rem}[id^=GPisochronPanel-] p.gpf-label:first-child{margin-top:0}div[id^=GPisochronChoice]{gap:1em;justify-content:left}div[id^=GPisochronTransportChoice]>div{margin-top:.5rem}div[id^=GPisochronValueChron],div[id^=GPisochronValueDist]{width:281px}.GPflexInput>input[id^=GPisochronValueChronInput2]{margin-top:0}.GPisoExclusionsOptions{gap:1rem}[id^=GPisochronForm-]>.GPpanelFooter{position:unset}[id^=GPisochronReset-]{min-width:2.5rem}[id^=GPisochronSubmit-]{width:80%}.gpf-btn-icon-import:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDQuNzYyIDUuMjkyIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTA1LjI2NSAzMDUuMTMzaC0yLjY0NnY0LjIzNGgzLjcwNHYtMy4xNzVoLTEuMDU4em0tMy4xNzUtLjI2N2MwLS4xNDUuMTE4LS4yNjIuMjY0LS4yNjJoMy4xNzVsMS4zMjMgMS4zMjN2My43MDJhLjI2NS4yNjUgMCAwIDEtLjI2My4yNjdoLTQuMjM3YS4yNjUuMjY1IDAgMCAxLS4yNjItLjI2MnptMi42NDUgMi4zODR2MS4wNThoLS41Mjl2LTEuMDU4aC0uNzkzbDEuMDU4LTEuMDU4IDEuMDU4IDEuMDU4eiIgc3R5bGU9InN0cm9rZS13aWR0aDouMjY0NTgzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAyLjA5IC0zMDQuNjA0KSIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDQuNzYyIDUuMjkyIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTA1LjI2NSAzMDUuMTMzaC0yLjY0NnY0LjIzNGgzLjcwNHYtMy4xNzVoLTEuMDU4em0tMy4xNzUtLjI2N2MwLS4xNDUuMTE4LS4yNjIuMjY0LS4yNjJoMy4xNzVsMS4zMjMgMS4zMjN2My43MDJhLjI2NS4yNjUgMCAwIDEtLjI2My4yNjdoLTQuMjM3YS4yNjUuMjY1IDAgMCAxLS4yNjItLjI2MnptMi42NDUgMi4zODR2MS4wNThoLS41Mjl2LTEuMDU4aC0uNzkzbDEuMDU4LTEuMDU4IDEuMDU4IDEuMDU4eiIgc3R5bGU9InN0cm9rZS13aWR0aDouMjY0NTgzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAyLjA5IC0zMDQuNjA0KSIvPjwvc3ZnPg==) center no-repeat}.gpf-panel__items_layerimport{border-bottom:1px solid var(--grey-900-175);color:var(--text-action-high-blue-france);height:auto;list-style-type:none}div[id^=GPlayerSwitcher-]{height:44px}button[id^=GPshowLayersListPicto]{width:40px}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{width:350px}.GPlayerSwitcher_layer{background-color:var(--background-overlap-grey);padding-right:40px}.gpf-btn-icon-layerswitcher:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMyIgZD0ibTIyIDguNTUzLTkuODYgNS41NTItOS44Ni01LjU1MkwxMi4xNCAzek0zLjE3OCAxNC45ODYgMiAxNS42NWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4zIiBkPSJNMy4xNzggMTEuNDM3IDIgMTIuMWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMyIgZD0ibTIyIDguNTUzLTkuODYgNS41NTItOS44Ni01LjU1MkwxMi4xNCAzek0zLjE3OCAxNC45ODYgMiAxNS42NWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4zIiBkPSJNMy4xNzggMTEuNDM3IDIgMTIuMWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-icon-ls-visibility{box-shadow:none}.gpf-btn-icon-ls-visibility:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTIuMjE4IDRjNS4wOTIgMCA5LjMyOSAzLjY2NCAxMC4yMTcgOC41LS44ODggNC44MzYtNS4xMjUgOC41LTEwLjIxNyA4LjVTMi44ODggMTcuMzM2IDIgMTIuNUMyLjg4OCA3LjY2NCA3LjEyNSA0IDEyLjIxOCA0bTAgMTUuMTExYzQgMCA3LjQyMy0yLjc4NCA4LjI5LTYuNjExYTguNTA0IDguNTA0IDAgMCAwLTE2LjU4IDAgOC41MDQgOC41MDQgMCAwIDAgOC4yOSA2LjYxMW0wLTIuMzYxYTQuMjUgNC4yNSAwIDEgMSAwLTguNSA0LjI1IDQuMjUgMCAwIDEgMCA4LjVtMC0xLjg4OWEyLjM2MSAyLjM2MSAwIDEgMCAwLTQuNzIyIDIuMzYxIDIuMzYxIDAgMCAwIDAgNC43MjIiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTIuMjE4IDRjNS4wOTIgMCA5LjMyOSAzLjY2NCAxMC4yMTcgOC41LS44ODggNC44MzYtNS4xMjUgOC41LTEwLjIxNyA4LjVTMi44ODggMTcuMzM2IDIgMTIuNUMyLjg4OCA3LjY2NCA3LjEyNSA0IDEyLjIxOCA0bTAgMTUuMTExYzQgMCA3LjQyMy0yLjc4NCA4LjI5LTYuNjExYTguNTA0IDguNTA0IDAgMCAwLTE2LjU4IDAgOC41MDQgOC41MDQgMCAwIDAgOC4yOSA2LjYxMW0wLTIuMzYxYTQuMjUgNC4yNSAwIDEgMSAwLTguNSA0LjI1IDQuMjUgMCAwIDEgMCA4LjVtMC0xLjg4OWEyLjM2MSAyLjM2MSAwIDEgMCAwLTQuNzIyIDIuMzYxIDIuMzYxIDAgMCAwIDAgNC43MjIiLz48L3N2Zz4=) center no-repeat}button[id^=GPvisibilityPicto_ID_][aria-pressed=false]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjQ0FDREMxIiBkPSJNMTcuODgzIDE5LjI5N0ExMC45NSAxMC45NSAwIDAgMSAxMiAyMWMtNS4zOTIgMC05Ljg3OC0zLjg4LTEwLjgxOC05QTExIDExIDAgMCAxIDQuNTIgNS45MzVMMS4zOTQgMi44MDhsMS40MTQtMS40MTQgMTkuNzk5IDE5Ljc5OS0xLjQxNCAxLjQxNHpNNS45MzYgNy4zNUE4Ljk3IDguOTcgMCAwIDAgMy4yMjMgMTJhOS4wMDUgOS4wMDUgMCAwIDAgMTMuMjAxIDUuODM5bC0yLjAyOC0yLjAyOUE0LjUgNC41IDAgMCAxIDguMTkgOS42MDR6bTYuOTc4IDYuOTc4LTMuMjQyLTMuMjQxYTIuNSAyLjUgMCAwIDAgMy4yNDEgMy4yNDFtNy44OTMgMi4yNjUtMS40MzEtMS40MzFBOC45IDguOSAwIDAgMCAyMC43NzggMTIgOS4wMDUgOS4wMDUgMCAwIDAgOS41NTIgNS4zMzhMNy45NzQgMy43NkM5LjIyMSAzLjI3IDEwLjU4IDMgMTIgM2M1LjM5MiAwIDkuODc4IDMuODggMTAuODE5IDlhMTAuOTUgMTAuOTUgMCAwIDEtMi4wMTIgNC41OTNtLTkuMDg0LTkuMDg0UTExLjg2IDcuNSAxMiA3LjVhNC41IDQuNSAwIDAgMSA0LjQ5MiA0Ljc3OHoiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjQ0FDREMxIiBkPSJNMTcuODgzIDE5LjI5N0ExMC45NSAxMC45NSAwIDAgMSAxMiAyMWMtNS4zOTIgMC05Ljg3OC0zLjg4LTEwLjgxOC05QTExIDExIDAgMCAxIDQuNTIgNS45MzVMMS4zOTQgMi44MDhsMS40MTQtMS40MTQgMTkuNzk5IDE5Ljc5OS0xLjQxNCAxLjQxNHpNNS45MzYgNy4zNUE4Ljk3IDguOTcgMCAwIDAgMy4yMjMgMTJhOS4wMDUgOS4wMDUgMCAwIDAgMTMuMjAxIDUuODM5bC0yLjAyOC0yLjAyOUE0LjUgNC41IDAgMCAxIDguMTkgOS42MDR6bTYuOTc4IDYuOTc4LTMuMjQyLTMuMjQxYTIuNSAyLjUgMCAwIDAgMy4yNDEgMy4yNDFtNy44OTMgMi4yNjUtMS40MzEtMS40MzFBOC45IDguOSAwIDAgMCAyMC43NzggMTIgOS4wMDUgOS4wMDUgMCAwIDAgOS41NTIgNS4zMzhMNy45NzQgMy43NkM5LjIyMSAzLjI3IDEwLjU4IDMgMTIgM2M1LjM5MiAwIDkuODc4IDMuODggMTAuODE5IDlhMTAuOTUgMTAuOTUgMCAwIDEtMi4wMTIgNC41OTNtLTkuMDg0LTkuMDg0UTExLjg2IDcuNSAxMiA3LjVhNC41IDQuNSAwIDAgMSA0LjQ5MiA0Ljc3OHoiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-ls-remove{box-shadow:none}.gpf-btn-icon-ls-remove:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNNyA5aDEwbC0xLjQyOCAxMC44ODlIOC40Mjh6Ii8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNiA2aDEyIi8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTEwLjUgNC41aDMiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNNyA5aDEwbC0xLjQyOCAxMC44ODlIOC40Mjh6Ii8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNiA2aDEyIi8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTEwLjUgNC41aDMiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-ls-collapse{box-shadow:none}.gpf-btn-icon-ls-collapse:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;transition:transform .2s ease-out 0s}.gpf-btn-icon-ls-collapse[aria-pressed=true]:after{box-shadow:none;transform:rotate(180deg)}.gpf-btn-icon-ls-dragndrop{box-shadow:none}.gpf-btn-icon-ls-dragndrop:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAxMVY4bDQgNC00IDR2LTNoLTV2NWgzbC00IDQtNC00aDN2LTVINnYzbC00LTQgNC00djNoNVY2SDhsNC00IDQgNGgtM3Y1eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAxMVY4bDQgNC00IDR2LTNoLTV2NWgzbC00IDQtNC00aDN2LTVINnYzbC00LTQgNC00djNoNVY2SDhsNC00IDQgNGgtM3Y1eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{height:56px;max-height:56px}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools>.GPlayerInfo{visibility:visible}button[id^=GPshowAdvancedTools_ID_][aria-pressed=false]{box-shadow:none}button[id^=GPshowAdvancedTools_ID_][aria-pressed="false "]+.GPlayerAdvancedTools>.GPlayerInfo{visibility:hidden}button[id^=GPshowAdvancedTools_ID_]{position:absolute;right:16px;top:12px}div[id^=GPbasicTools_ID_]{align-items:center;display:flex;flex-direction:row-reverse;flex-wrap:nowrap;justify-content:flex-end}div[id^=GPadvancedTools_ID_]{align-content:center;align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;height:inherit;justify-content:space-around}.gpf-btn-header{height:26px;position:absolute;width:26px;z-index:2}.gpf-btn-icon-layers{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48ZyBzdHJva2U9IiMxNTE1OTYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMiIgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBkPSJNMTUuMTkzIDUuNDQ4IDguMSA5LjQ0IDEuMDA5IDUuNDQ4IDguMSAxLjQ1NHpNMS42NTUgMTAuMDc1bC0uODQ3LjQ3OCA3LjA5MSAzLjk5MyA3LjA5Mi0zLjk5My0uODQ4LS40NzgiLz48cGF0aCBkPSJNMS42NTUgNy41MjIuODA4IDhsNy4wOTEgMy45OTRMMTQuOTkxIDhsLS44NDgtLjQ3OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTZ2MTZIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:auto auto}.gpf-panel__body_ls{max-height:300px!important;overflow:auto}.gpf-panel__title_ls{color:#101092;font-size:1rem;font-weight:400;margin:0;padding:12px 15px;position:relative;right:-16px}.gpf-panel__header_ls{align-content:center;align-items:center;background:#e3e3fd;display:flex;flex-direction:row;height:48px}.gpf-btn-icon-ls-info{box-shadow:none}.gpf-btn-icon-ls-info:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI5LjI1IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTMuOTEgMTYuOTk4aC0zLjkwOHYtLjY2MmguMjA4cS40MTggMCAuNjEtLjExNGEuNDguNDggMCAwIDAgLjIzMy0uMzI1cS4wNDQtLjIxLjA0My0uNjExdi0yLjEzN3EwLS40NDYtLjA1NS0uNjM0LS4wNTQtLjE4Ni0uMjgxLS4yNzUtLjIyNy0uMDg2LS43Ni0uMDk0di0uNjZsMi45NTItLjYyMXY0LjQyMXEwIC42MDUuMTUxLjgyOC4xNTEuMjI1LjgwNi4yMjVWMTd6bS0uODEyLTguOTVxMCAuNDMtLjMwNi43NC0uMzA3LjMwNS0uNzM3LjMwNi0uNDI3IDAtLjczNy0uMzE0YTEgMSAwIDAgMS0uMzEzLS43M2MwLS4yNzcuMTAzLS41MzUuMzA4LS43NDFxLjMxLS4zMDkuNzQyLS4zMDljLjI4OCAwIC41NC4xLjc0MS4zMDJxLjMwMi4zMDEuMzAyLjc0OHoiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI5LjI1IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTMuOTEgMTYuOTk4aC0zLjkwOHYtLjY2MmguMjA4cS40MTggMCAuNjEtLjExNGEuNDguNDggMCAwIDAgLjIzMy0uMzI1cS4wNDQtLjIxLjA0My0uNjExdi0yLjEzN3EwLS40NDYtLjA1NS0uNjM0LS4wNTQtLjE4Ni0uMjgxLS4yNzUtLjIyNy0uMDg2LS43Ni0uMDk0di0uNjZsMi45NTItLjYyMXY0LjQyMXEwIC42MDUuMTUxLjgyOC4xNTEuMjI1LjgwNi4yMjVWMTd6bS0uODEyLTguOTVxMCAuNDMtLjMwNi43NC0uMzA3LjMwNS0uNzM3LjMwNi0uNDI3IDAtLjczNy0uMzE0YTEgMSAwIDAgMS0uMzEzLS43M2MwLS4yNzcuMTAzLS41MzUuMzA4LS43NDFxLjMxLS4zMDkuNzQyLS4zMDljLjI4OCAwIC41NC4xLjc0MS4zMDJxLjMwMi4zMDEuMzAyLjc0OHoiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-ls-extent{box-shadow:none}.gpf-btn-icon-ls-extent:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTQuNjA3IDE2LjAyIDYgNy40MTUgNy40MTQgNmw4LjYwNyA4LjYwN1Y3LjAyaDJ2MTFoLTExdi0yeiIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTQuNjA3IDE2LjAyIDYgNy40MTUgNy40MTQgNmw4LjYwNyA4LjYwN1Y3LjAyaDJ2MTFoLTExdi0yeiIvPjwvc3ZnPg==) center no-repeat}[id^=GPlayerInfoPanel]{height:auto;position:absolute}.gpf-label-name{line-height:28px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 96px)}.GPlayerDragNDrop{cursor:move}.gpf-range__output{width:35px}.GPlayerOpacity.fr-range--sm[data-fr-js-range]:after,.GPlayerOpacity.fr-range--sm[data-fr-js-range]:before{top:25%}div[id^=GPlayerInfoContent]{width:350px}.gpf-btn-icon-close.GPlayersPanelClose{right:0;top:0}.gpf-btn-icon-close.GPlayersPanelClose:after{margin-left:-.125rem}.GPlayerAdvancedToolsContextual{display:none}.GPlayerAdvancedToolsContextual:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSI0IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMTggNCI+PHBhdGggZmlsbD0iIzAwMDA5MSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41ODMuMTY3QTEuODQgMS44NCAwIDAgMCAuNzUgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzMyAxLjgzM0ExLjg0IDEuODQgMCAwIDAgNC40MTcgMiAxLjg0IDEuODQgMCAwIDAgMi41ODMuMTY3bTEyLjgzNCAwQTEuODQgMS44NCAwIDAgMCAxMy41ODMgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzNCAxLjgzM0ExLjg0IDEuODQgMCAwIDAgMTcuMjUgMiAxLjg0IDEuODQgMCAwIDAgMTUuNDE3LjE2N005IC4xNjdBMS44NCAxLjg0IDAgMCAwIDcuMTY3IDJjMCAxLjAwOC44MjUgMS44MzMgMS44MzMgMS44MzNBMS44NCAxLjg0IDAgMCAwIDEwLjgzMyAyIDEuODQgMS44NCAwIDAgMCA5IC4xNjciIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSI0IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMTggNCI+PHBhdGggZmlsbD0iIzAwMDA5MSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41ODMuMTY3QTEuODQgMS44NCAwIDAgMCAuNzUgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzMyAxLjgzM0ExLjg0IDEuODQgMCAwIDAgNC40MTcgMiAxLjg0IDEuODQgMCAwIDAgMi41ODMuMTY3bTEyLjgzNCAwQTEuODQgMS44NCAwIDAgMCAxMy41ODMgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzNCAxLjgzM0ExLjg0IDEuODQgMCAwIDAgMTcuMjUgMiAxLjg0IDEuODQgMCAwIDAgMTUuNDE3LjE2N005IC4xNjdBMS44NCAxLjg0IDAgMCAwIDcuMTY3IDJjMCAxLjAwOC44MjUgMS44MzMgMS44MzMgMS44MzNBMS44NCAxLjg0IDAgMCAwIDEwLjgzMyAyIDEuODQgMS44NCAwIDAgMCA5IC4xNjciIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}.GPlayerAdvancedToolsContextual[aria-pressed=true]{background-color:var(--hover-tint);overflow:visible}.GPlayerSwitcher_layer:has(.GPlayerAdvancedToolsContextual[aria-pressed=true]){overflow:visible}[id^=GPlayersList-] .GPpanelBody:has(.GPlayerAdvancedToolsContextual[aria-pressed=true]){overflow:visible}.GPlayerAdvancedTools:has(.GPlayerAdvancedToolsContextual[aria-pressed=true]){position:relative}.GPlayerAdvancedToolsContextual+div{background-color:var(--background-overlap-grey);border-radius:6px;box-shadow:0 0 10px 0 rgba(0,0,0,.15);display:none;flex-direction:column;flex-wrap:wrap;font-size:13px;gap:6px;padding:14px 6px;z-index:12}.GPlayerAdvancedToolsContextual+div>button{padding-left:2rem}.GPlayerAdvancedToolsContextual+div>button[visibility=hidden]{display:none}.GPlayerAdvancedToolsContextual+div>button:after{mask-position:left}.GPlayerAdvancedToolsContextual[aria-pressed=true]+div{display:flex;position:absolute;right:0;top:calc(2.5rem + 8px)}@media (max-width:576px){.GPlayerAdvancedTools{width:calc(100% + 40px)}.GPlayerAdvancedTools>.GPlayerExtent,.GPlayerAdvancedTools>.GPlayerInfo,.GPlayerAdvancedTools>.GPlayerRemove{display:none}.GPlayerAdvancedToolsContextual{display:inline-flex}[id^=GPopacity_ID_]{flex-grow:0.6}}.gpf-btn-icon-pointer:after{background-color:var(--text-inverted-blue-france);content:"";height:100%;left:0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjAzIDE2LjAzMmE3LjM2IDcuMzYgMCAwIDEtNi42NjItNi42NjNILjY3YS42Ny42NyAwIDEgMSAwLTEuMzM4aC43QTcuMzY0IDcuMzY0IDAgMCAxIDguMDMgMS4zNjhWLjY3YS42Ny42NyAwIDEgMSAxLjMzOCAwdi43YTcuMzYgNy4zNiAwIDAgMSA2LjY2MyA2LjY2MmguNjk5YS42Ny42NyAwIDAgMSAwIDEuMzM4aC0uN2E3LjM2IDcuMzYgMCAwIDEtNi42NjIgNi42NjN2LjY5OWEuNjcuNjcgMCAwIDEtMS4zMzggMHpNOS4zNyA0LjY4NVYyLjcxNGE2LjAyNSA2LjAyNSAwIDAgMSA1LjMxNiA1LjMxN2gtMS45N2EuNjcuNjcgMCAwIDAgMCAxLjMzOGgxLjk3YTYuMDI1IDYuMDI1IDAgMCAxLTUuMzE3IDUuMzE3di0xLjk3YS42Ny42NyAwIDAgMC0xLjMzOCAwdjEuOTdBNi4wMjUgNi4wMjUgMCAwIDEgMi43MTQgOS4zN2gxLjk3YS42Ny42NyAwIDAgMCAwLTEuMzM4aC0xLjk3QTYuMDI2IDYuMDI2IDAgMCAxIDguMDMgMi43MTR2MS45N2EuNjcuNjcgMCAwIDAgMS4zMzggMCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjAzIDE2LjAzMmE3LjM2IDcuMzYgMCAwIDEtNi42NjItNi42NjNILjY3YS42Ny42NyAwIDEgMSAwLTEuMzM4aC43QTcuMzY0IDcuMzY0IDAgMCAxIDguMDMgMS4zNjhWLjY3YS42Ny42NyAwIDEgMSAxLjMzOCAwdi43YTcuMzYgNy4zNiAwIDAgMSA2LjY2MyA2LjY2MmguNjk5YS42Ny42NyAwIDAgMSAwIDEuMzM4aC0uN2E3LjM2IDcuMzYgMCAwIDEtNi42NjIgNi42NjN2LjY5OWEuNjcuNjcgMCAwIDEtMS4zMzggMHpNOS4zNyA0LjY4NVYyLjcxNGE2LjAyNSA2LjAyNSAwIDAgMSA1LjMxNiA1LjMxN2gtMS45N2EuNjcuNjcgMCAwIDAgMCAxLjMzOGgxLjk3YTYuMDI1IDYuMDI1IDAgMCAxLTUuMzE3IDUuMzE3di0xLjk3YS42Ny42NyAwIDAgMC0xLjMzOCAwdjEuOTdBNi4wMjUgNi4wMjUgMCAwIDEgMi43MTQgOS4zN2gxLjk3YS42Ny42NyAwIDAgMCAwLTEuMzM4aC0xLjk3QTYuMDI2IDYuMDI2IDAgMCAxIDguMDMgMi43MTR2MS45N2EuNjcuNjcgMCAwIDAgMS4zMzggMCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;position:absolute;top:0;width:100%}.gpf-btn-icon-pointer{border-top-right-radius:4px;min-width:2.5rem;position:relative}.GPlocationStageFlexInput:has(.GPlocationStageRemove)>.gpf-btn-icon-pointer{border-top-right-radius:0}.gpf-btn-icon-remove{height:2.5rem;width:2.5rem}.gpf-btn-icon-remove:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJtMTIgMTAuNiA0Ljk1LTQuOTYgMS40IDEuNEwxMy40MiAxMmw0Ljk2IDQuOTUtMS40IDEuNEwxMiAxMy40MmwtNC45NSA0Ljk2LTEuNC0xLjRMMTAuNTggMTIgNS42MyA3LjA1bDEuNC0xLjR6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJtMTIgMTAuNiA0Ljk1LTQuOTYgMS40IDEuNEwxMy40MiAxMmw0Ljk2IDQuOTUtMS40IDEuNEwxMiAxMy40MmwtNC45NSA0Ljk2LTEuNC0xLjRMMTAuNTggMTIgNS42MyA3LjA1bDEuNC0xLjR6Ii8+PC9zdmc+) center no-repeat}.gpf-btn-icon-add:after{height:2.5rem;-webkit-mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPwAAAAcCAYAAABF79LlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAyySURBVHic7Zx/bFXXfcA/33ufHZjtkKcNhkVVtqpVtGUszUhs3BEFJWo0KYRUCKMqUynY5t2HAZuxdRkqLM5Gl3bVTJ4JPN/nXyyVkDBpGCvTUKOkodmKYtpRJWukTKgr0jY7yeS3wGuKzLv3uz/uffbz8/v9nkFE7yMhP5977vkcR/7e7z3nexyoUaNGjRo1atSoUaPGHYzc7gnUqLEYRKPRVYZhHFfVRtd1u7u7u99bTF/btv5VyUDguOA2utD949F9i+orl8DtnkCNGouBYRg28ISIYJrmK8B9i+lzAqYt6BMgGLDovnIxyrnJtm21bVurPZlctHREtKUjcst8NT4RPJL2+XfvdJ+qfktV46r6YCXj1DJ8BukPskAgsKqzs/N/bud8apSHqraKyDmgEdi82D5RaVXRc0CjVNmnqt8C/tz/tgX4cbljFR3w0Wh0hWEYPcATqTbbti+LyLlAIDDQ0dHxYbmTyMYXvhJdkayf8Xx+CLZ0Ri6Lq+dmMAYuj/VU1XeriMViO1X1wcnJyV19fX1utj6qKrFYbAB4z7KsF2/xFO9obNteA7wkIleAzaFQ6KeL6WvbfnSNY7ovqeoVdd3Nl078SVV9qvrXzAU7VLjvVtTNtm23AyNAU44u11S1MxwOv1zJZFK0dL7Qjkpen6h0vjXWUxVfOouZ4f1gH8RbSg1PTk5amUHvB/tRYDegQE+1gr6/v39pQ0PD28Bn83Q7GQwGt23dutWp1NfW3r/UaQq8DZrbp5xcnWjedvp0+b7BwcE2EflL4I8WDK/6eDgcfrXcsbPR0nGkDYysPjH08beG91XFp6rPAn0ZzXtE5Fi5YxZcw/vBfgpoUtUzqjq7VhGRDSJyFrhbRMYHBwe3lDuRFH6wn8IL9jMqcz5V2YBwFrhbRcdbdwxU7LuVuK77eeb+m3c1Nze/qKqzD10/2I/hBTuAqOrvVMM9Pj5e39DQ8Ar5gx3g6Xg8vuAXuVTua++rd5rMV/IGO4Dw9NW7pyryiciPyBJ8AIZhfK2SsbNj5PS5jlTFp6oHWBjsAJtU9RlV/ZqqblfV9ar6G8WOmzfgo9HoCrzMLsAz4XB4czgc/mHqeigUuhAKhb4EHABEREZGR0eXFyvP5Atfia7wM7ugPDMx2rv50si+Wd+lsZ4LEyO9X1Lfp6IjD+wYKNt3q7Esaw+Qnq13xWKxWF9fn5GW2XelLqrq0NTU1N5quOPx+Bg5fkkzUdXOSn0NjcGifVTBB3wD+KeFQ+sXo9FoSxXGn49k94nwxQc7ByryqeqfAn+T4/LjwDeBvwXGgDeBD1T1h6r6VVU18087D7ZtHwa+rqpnwuFw3o0I27bPAptE5HAoFDqUr28uWjojh1G+DpyZGO3N63uoY+CsoJtE9fBbY/tK9h07dqxxyZIlC37+ZDJ5LfVZRO41TXMys09nZ+f1Un0p0tbne1JthmEMO44zIyLdaf2GpqamwrnW+aVg2/Zx0h4kRTBTV1f3qXL3ZVo6I8fR0nw3VT5V7r6MbdtJy7ICeSpH71iW9fvljJ2Nlo5IcmK0N5CrcqTwzqXR3rJ8qtoDRCqY3r/ixeF0touFXumf9L++UMgiIv0AqrqxpOmlo55PRQv6UDyfIWX5AoHAZDKZvJb5b55C9b1sfUZGRnLtLRRERDQUCvWQluld1+1axGBXSgt2gPqbN2++WY6vpSOiJQY7QH2daFk+n0SO9iv+1zW2bS+rYPwifXIFQGDN2lDZvnvLvC/FHwLfzZXps2b4XE9Ky7Ik/Xrm97n6FyLXk3JitFfSr2d+n6t/Mdi2fR2vZFMygUDg7kqyPHiZfmhoaEBV96S3u647/P777y/YzCuEbdvrVfU5EXm0knnlICEi5xOJxLb9+/f/CqC1I7Je0edgcXzAefO6s+3iac+XD9u2fw48APxfervruq11dXXTjuOMAesBgsFgoNINyZaOyM+dwJIHzOSN+T6R1jqS046as77V15sDpWxI+ns6MaCrkjkCO0TkRGZjrQ5/G0nfsEshIiWXXQYHB9uA74vI0qpMbCGNqrqloaFhGrBaOo60KXwfFs8HbEk2mdOAla/j+Ph4fTwez/b66riu+25XV1cCeNi2bRvYUmmw39feVw9k9TXeZb77xvGeBPDwQx0RW2BLqdUHEVFVtfBic3uWLq8C/+Z/rgOCwGeAdcBdaf1CwIkF4+eT27b9U+B+VX0kfbMuG9FodINhGD8ALluW9Qf5+uaipSPi+UQfSd+sy8a6riMbXNfzTYz2luy7XWt4WFB6y0bWkl0ubNt+g/knvRaLDy3LWtHSEbllvonR3hXFdPRf2dMz7ofBYLC5GuXFbKwN2csyMvyHq683N1dSXkzHfyX/e+CPMy5lLcup6jJgANjmN7nAp0Xkv9P75c3wIvI9Vb3fMIz9QN4A9PsAnMvXL69P9Xsqcr8gBX2uY+xHQMr07d69O+s6zEsEHqZpJioN7kyyBbuqDgEzIpJq62pubqavr6/YoF+TrVFEXr3nnns2xuPxparaJiLPA58vMNbGYDB4fuvWrY5t2+vxdoGL8qny6seJ+MYlwealhnOjTeB5tIBPZOPqayvPnz691fGWCVl9BTFN03ScebG2fHp6+u+AfeWMV4h655emw7xl8vJfNE5WzScijqp+FS+Lby2i/0equh34dbzDcQbejv5Yer+8m3aO4xzFO1TzlG3bf5FqzzxLH4vFDuBt8H1UV1d3tOifKgMzeddR4BrKUw91RGZ9mWfpW3dEDiCeb0albN+tJlewT01NhS3L2sv8kl1Xc3Oz3dfXV8zfO/xLlrZTiUTiqXg8fhV4W0TWJpPJhwuMc0FV743H45dt2/4ZXha/kHY9AaDIAp+InAoknKcamoJXzZs33haXtb92V6CgD9V7f9E0ebmlI/Iz1ey+YnBd95+zzKn32LFjZe3TFPSpmcVH74bu6vlExMHL8K8U2V+BMDDjNy3YAMyb4Xft2vXB4OBgp4iMA8/HYrF1wBFVL/b81/j9qvok4IrIjkqO2P7oO7s+aN0x0Kmi4wLPt3RG1qkrR/DP1q7rOrLBdYz96gW7C+y4k47Y2rb9YvpuPBC1LGu3iGhfXx+q2hOLxUzmdtW7Vq5cOUPuV/8UB/HOWK9MNZimebCxsfGoqqbaDgcCgZmsd6eNIyLpGfawYRiPua77GoB/XJWAKwcdQ+f5DJIHnSbzKLDSXyge/viGk9cncFDhTZlrOIwajyGeT3V2lz0vQ0NDa13XTdW+zwOPAvUAgUCgF69GXzVauyJr1SWr7+NfJavqE5Gkqn4ZOA1sAv6jQP//UtWX8Db9Ppd5vWD2CIfDL4tIO36mV9U3Zm/21uxPAh+pansoFDpT0k+ThbfGel4WtB0/04vM+VzX+EEqs6sh7ROjvRX7biUichnvQYWqDk1OTu7xn8qp6xoKhXYzl+lVRN4tNK5lWe+Ypvkw8B2/abqrq+uKqj6d0TWUb5xgMHgxs23ZsmUXgClVfd0wjG6Aiyf2vmOKM893cWT/FaAk36evNy/wrU785gVgCvT1gOF0Z7ltAY7jzFY6XNd9FtiRdrm3v7+/upuL7lxlxRV5FknzCb1t7dX1ichNvD/IWSUixRzbHfC/fmbBWMVKR0dHlyeTyR5VfQKvBAJwGW8NPWBZ1v8WO1YxPLBjYHk9bo+KzPMJnEsGbg78JPZnVfWlWOy/lrNte5eq/p5lWfOCPR1VFf9t4N8ty4qW64rFYsMZp+YOWJb1zQLzmzenYkurAC0dkWFg1qdw4NJob15fZom1lNJqitScDcN4bOfOna+n2gcHB1/zy5QnLcvK3Pwqm9k5q/HYxNje1+faX3gN5FGUkxNjvVXzlYOqXgRWishvp7cXXZbzX9UPAYfS6vBl7cYXg/+qfgg4lFaHXzRfilJ+wcscPwoQDodz9vEfBIVe4wuSSCT2NjQ0bMJb050IBoPfLuK2g3jlIBM4WYrPvO7sdZpMzyec+K1rzd++VOgm5SAi20FNpDQfwPj4uBmPxwFID3bw9hXwXrerVlFobx83r+IVbtKDHUCQUwqPIrekglGIIbIcz63V4T/B+IdkiiprpbAs6xuUuQb1D8nM+iaKuGdirLdsH0A8Hj/rf7yQ5fIpwAZWlTt+JlebJnP6koElp8zkjar6KuAU8FxmY1n/xxvLsmSxM2E6E6O9Us6rXo1PNsPDw5/F/wMdwzD+KvO6ZVkfVdPX1tk/60MX+n4Sq66vEkTkl8A/ZLbXMnyNO5ZkMrlcRKYNw2jduXPnf+boNiMi/1gNn6OyHJjGMFonhvfm9AFV8VWBscJdatSoUaNGjRo1atSocQfx/wldqBUwtlSMAAAAAElFTkSuQmCC) -51px center no-repeat;mask:url(data:image/png;base64,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) -51px center no-repeat;width:2.5rem}.GPlocationOriginLabel{display:none;pointer-events:none}[class^=GPlocationPoint-]{padding:0}[id^=GPlocationPoint_]{justify-content:left}.GPlocationStageFlexInput{flex-wrap:wrap;width:281px}.GPlocationStageAdd{flex-basis:65%;min-height:40px;padding:.25rem .75rem .25rem 2.5rem;text-align:left;width:0}.GPlocationOriginLabel{flex-basis:fit-content}.GPlocationOriginPointerImg{flex-basis:2.5em}.GPlocationStageFlexInput input{flex-basis:33%;flex-grow:1}.GPmeasureTooltip{background-color:var(--background-contrast-grey);opacity:.8;padding:.2rem .4rem}.gpf-btn-icon-area:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTcuOTkyIDE2LjM5MmEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2em0xLjQ3NyAzLjU5OC41My41MyAxLjA2Mi0xLjA2LS41My0uNTN6bS0yLjUzNy0yLjUzOCAyLjUzOCAyLjUzOCAxLjA2LTEuMDYtMi41MzgtMi41Mzh6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIwLjUzIDE5Ljk5LjUzLS41M0wyMCAxOC40bC0uNTMuNTN6bS0zLjU5OCAxLjQ3N2EuNzUuNzUgMCAwIDAgMS4wNiAxLjA2MXptMi41MzgtMi41MzctMi41MzggMi41MzcgMS4wNiAxLjA2MSAyLjUzOC0yLjUzOHpNMS40NyA1LjY3OGEuNzUuNzUgMCAwIDAgMS4wNiAxLjA2ek00LjczOSA0LjUzbC41My0uNTMtMS4wNi0xLjA2LS41MzEuNTN6TTIuNTMgNi43NCA0Ljc0IDQuNTMgMy42NzggMy40NyAxLjQ3IDUuNjc4eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im00LjczOSAzLjQ3LS41My0uNTNMMy4xNDggNGwuNTMuNTMxem0xLjE0NyAzLjI3YS43NS43NSAwIDAgMCAxLjA2MS0xLjA2MXpNMy42NzggNC41MyA1Ljg4NiA2Ljc0bDEuMDYxLTEuMDYxTDQuNzQgMy40N3oiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTQuMjA5IDUuMTA1djExLjg4YzAgMS4zOTMuOTQ2IDIuNDc3IDIuMTYxIDIuNDc3SDE5LjEyIi8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTE5LjY3IDEyLjgzNlY2LjA2NWMwLTEuMTYyLS43ODctMi4wNjUtMS44LTIuMDY1aC03LjAzNSIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBkPSJtMTYuMzU3IDExLjk4NC00LjEyMyA0LjA4Nk0xNi4yNzcgNy4zOTMgNy41MjIgMTYuMDdNMTEuNjQ1IDcuMzE0IDcuNTIyIDExLjQiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTcuOTkyIDE2LjM5MmEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2em0xLjQ3NyAzLjU5OC41My41MyAxLjA2Mi0xLjA2LS41My0uNTN6bS0yLjUzNy0yLjUzOCAyLjUzOCAyLjUzOCAxLjA2LTEuMDYtMi41MzgtMi41Mzh6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIwLjUzIDE5Ljk5LjUzLS41M0wyMCAxOC40bC0uNTMuNTN6bS0zLjU5OCAxLjQ3N2EuNzUuNzUgMCAwIDAgMS4wNiAxLjA2MXptMi41MzgtMi41MzctMi41MzggMi41MzcgMS4wNiAxLjA2MSAyLjUzOC0yLjUzOHpNMS40NyA1LjY3OGEuNzUuNzUgMCAwIDAgMS4wNiAxLjA2ek00LjczOSA0LjUzbC41My0uNTMtMS4wNi0xLjA2LS41MzEuNTN6TTIuNTMgNi43NCA0Ljc0IDQuNTMgMy42NzggMy40NyAxLjQ3IDUuNjc4eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im00LjczOSAzLjQ3LS41My0uNTNMMy4xNDggNGwuNTMuNTMxem0xLjE0NyAzLjI3YS43NS43NSAwIDAgMCAxLjA2MS0xLjA2MXpNMy42NzggNC41MyA1Ljg4NiA2Ljc0bDEuMDYxLTEuMDYxTDQuNzQgMy40N3oiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTQuMjA5IDUuMTA1djExLjg4YzAgMS4zOTMuOTQ2IDIuNDc3IDIuMTYxIDIuNDc3SDE5LjEyIi8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTE5LjY3IDEyLjgzNlY2LjA2NWMwLTEuMTYyLS43ODctMi4wNjUtMS44LTIuMDY1aC03LjAzNSIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBkPSJtMTYuMzU3IDExLjk4NC00LjEyMyA0LjA4Nk0xNi4yNzcgNy4zOTMgNy41MjIgMTYuMDdNMTEuNjQ1IDcuMzE0IDcuNTIyIDExLjQiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-length:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIxIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi44OTQgNi4xODdhLjUuNSAwIDAgMCAuNzA3LjcwN3ptMS40MTQtMS40MTRMNi44OTQgNi4xODdsLjcwNy43MDdMOS4wMTUgNS40OHpNOC45NzQgOC4yNjZhLjUuNSAwIDEgMCAuNzA3LjcwOHptMS40MTQtMS40MTRMOC45NzQgOC4yNjZsLjcwNy43MDggMS40MTQtMS40MTV6TTExLjA1MyAxMC4zNDZhLjUuNSAwIDEgMCAuNzA3LjcwN3ptMS40MTQtMS40MTQtMS40MTQgMS40MTQuNzA3LjcwNyAxLjQxNS0xLjQxNHpNMTMuMTMzIDEyLjQyNmEuNS41IDAgMSAwIC43MDcuNzA3em0xLjQxNC0xLjQxNC0xLjQxNCAxLjQxNC43MDcuNzA3IDEuNDE0LTEuNDE0eiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Im0xNi45OCAxMy40NDUtMS40MTQgMS40MTQiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im01LjUzNiAyIDE0LjE0MiAxNC4xNDItMy41MzYgMy41MzZMMiA1LjUzNnoiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIxIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi44OTQgNi4xODdhLjUuNSAwIDAgMCAuNzA3LjcwN3ptMS40MTQtMS40MTRMNi44OTQgNi4xODdsLjcwNy43MDdMOS4wMTUgNS40OHpNOC45NzQgOC4yNjZhLjUuNSAwIDEgMCAuNzA3LjcwOHptMS40MTQtMS40MTRMOC45NzQgOC4yNjZsLjcwNy43MDggMS40MTQtMS40MTV6TTExLjA1MyAxMC4zNDZhLjUuNSAwIDEgMCAuNzA3LjcwN3ptMS40MTQtMS40MTQtMS40MTQgMS40MTQuNzA3LjcwNyAxLjQxNS0xLjQxNHpNMTMuMTMzIDEyLjQyNmEuNS41IDAgMSAwIC43MDcuNzA3em0xLjQxNC0xLjQxNC0xLjQxNCAxLjQxNC43MDcuNzA3IDEuNDE0LTEuNDE0eiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Im0xNi45OCAxMy40NDUtMS40MTQgMS40MTQiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im01LjUzNiAyIDE0LjE0MiAxNC4xNDItMy41MzYgMy41MzZMMiA1LjUzNnoiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-azimuth:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIxIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xOC45NyAxMC4xOGMtLjM2IDAtLjY0LS4xNS0uODYtLjQ0cy0uMzMtLjcyLS4zMy0xLjI3YzAtLjYuMS0xLjE2LjMxLTEuNy4yLS41My40OC0xLjAxLjgzLTEuNDJhMy45IDMuOSAwIDAgMSAxLjE2LS45N2MuNDMtLjIzLjg3LS4zNSAxLjMyLS4zNS4yMyAwIC40NC4wMy42NC4wOC4yLjA2LjM4LjEzLjUzLjIzbC41OC0uMjZoLjI5bC0uNzggNC4zN2MtLjA3LjQzIDAgLjY1LjIyLjY1LjEzIDAgLjI3LS4wNy40My0uMjJzLjMxLS4zOS40Ny0uNzNsLjIxLjA4Yy0uNDkgMS4zMS0xLjEgMS45Ni0xLjg2IDEuOTZxLS41NTUgMC0uODEtLjM5Yy0uMTctLjI2LS4yMi0uNjMtLjE1LTEuMTJoLS4wM2MtLjM2LjUtLjcxLjg4LTEuMDUgMS4xM3MtLjcxLjM4LTEuMTEuMzh6bS4zMS0yLjM3YzAgLjQzLjA0Ljc1LjEzLjk2cy4yNS4zMS40OS4zMS40OC0uMTEuNzEtLjMzLjQ1LS40Ny42NC0uNzVsLjUzLTNjLS4xMS0uMTQtLjIzLS4yNS0uMzYtLjMyYTEgMSAwIDAgMC0uNDctLjExYy0uMzQgMC0uNjMuMTUtLjg4LjQ2cy0uNDUuNzEtLjU4IDEuMmMtLjE0LjQ5LS4yMSAxLjAyLS4yMSAxLjU3eiIvPjxwYXRoIGQ9Ik0yMC45IDE1LjcyaC01LjUyYy0uMDctMy4yNC0xLjUxLTYuMTUtMy43Ny04LjE3bDUuNDUtNi4yM0wxNS41NSAwIDEwIDYuMzVhMTEuMiAxMS4yIDAgMCAwLTUuOTItMS42OWgtMXYyaDFjMS42NyAwIDMuMjMuNDUgNC41OSAxLjIybC0zLjYxIDQuMTNjLS4zMS0uMDgtLjY0LS4xMy0uOTgtLjEzLTIuMjUgMC00LjA5IDEuODMtNC4wOSA0LjA5czEuODMgNC4wOSA0LjA5IDQuMDljMS42MiAwIDMuMDItLjk2IDMuNjgtMi4zM0gyMC45di0yLjAxTTEwLjMgOS4wNWE5LjI1IDkuMjUgMCAwIDEgMy4wOCA2LjY2SDguMTVhNC4wNyA0LjA3IDAgMCAwLTEuMjgtMi43M2wzLjQ0LTMuOTN6bS02LjIxIDljLTEuMTUgMC0yLjA5LS45NC0yLjA5LTIuMDlzLjk0LTIuMDkgMi4wOS0yLjA5IDIuMDkuOTQgMi4wOSAyLjA5LS45NCAyLjA5LTIuMDkgMi4wOSIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMjMuOTh2MjAuMDVIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIxIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xOC45NyAxMC4xOGMtLjM2IDAtLjY0LS4xNS0uODYtLjQ0cy0uMzMtLjcyLS4zMy0xLjI3YzAtLjYuMS0xLjE2LjMxLTEuNy4yLS41My40OC0xLjAxLjgzLTEuNDJhMy45IDMuOSAwIDAgMSAxLjE2LS45N2MuNDMtLjIzLjg3LS4zNSAxLjMyLS4zNS4yMyAwIC40NC4wMy42NC4wOC4yLjA2LjM4LjEzLjUzLjIzbC41OC0uMjZoLjI5bC0uNzggNC4zN2MtLjA3LjQzIDAgLjY1LjIyLjY1LjEzIDAgLjI3LS4wNy40My0uMjJzLjMxLS4zOS40Ny0uNzNsLjIxLjA4Yy0uNDkgMS4zMS0xLjEgMS45Ni0xLjg2IDEuOTZxLS41NTUgMC0uODEtLjM5Yy0uMTctLjI2LS4yMi0uNjMtLjE1LTEuMTJoLS4wM2MtLjM2LjUtLjcxLjg4LTEuMDUgMS4xM3MtLjcxLjM4LTEuMTEuMzh6bS4zMS0yLjM3YzAgLjQzLjA0Ljc1LjEzLjk2cy4yNS4zMS40OS4zMS40OC0uMTEuNzEtLjMzLjQ1LS40Ny42NC0uNzVsLjUzLTNjLS4xMS0uMTQtLjIzLS4yNS0uMzYtLjMyYTEgMSAwIDAgMC0uNDctLjExYy0uMzQgMC0uNjMuMTUtLjg4LjQ2cy0uNDUuNzEtLjU4IDEuMmMtLjE0LjQ5LS4yMSAxLjAyLS4yMSAxLjU3eiIvPjxwYXRoIGQ9Ik0yMC45IDE1LjcyaC01LjUyYy0uMDctMy4yNC0xLjUxLTYuMTUtMy43Ny04LjE3bDUuNDUtNi4yM0wxNS41NSAwIDEwIDYuMzVhMTEuMiAxMS4yIDAgMCAwLTUuOTItMS42OWgtMXYyaDFjMS42NyAwIDMuMjMuNDUgNC41OSAxLjIybC0zLjYxIDQuMTNjLS4zMS0uMDgtLjY0LS4xMy0uOTgtLjEzLTIuMjUgMC00LjA5IDEuODMtNC4wOSA0LjA5czEuODMgNC4wOSA0LjA5IDQuMDljMS42MiAwIDMuMDItLjk2IDMuNjgtMi4zM0gyMC45di0yLjAxTTEwLjMgOS4wNWE5LjI1IDkuMjUgMCAwIDEgMy4wOCA2LjY2SDguMTVhNC4wNyA0LjA3IDAgMCAwLTEuMjgtMi43M2wzLjQ0LTMuOTN6bS02LjIxIDljLTEuMTUgMC0yLjA5LS45NC0yLjA5LTIuMDlzLjk0LTIuMDkgMi4wOS0yLjA5IDIuMDkuOTQgMi4wOSAyLjA5LS45NCAyLjA5LTIuMDkgMi4wOSIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMjMuOTh2MjAuMDVIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-position:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNy40IDE1LjMzVjIuNDNsNC42OSAyLjM1djcuMDVoMS45OVY0LjcyTDE4IDMuMDR2LjE5aC0uMDF2OC42aDJWLjc2YzAtLjA4LS4wMS0uMTYtLjA1LS4yNGEuNS41IDAgMCAwLS4xNy0uMTguNi42IDAgMCAwLS4yMy0uMDhjLS4wOCAwLS4xNyAwLS4yNC4wNEwxMyAzIDcuMDEgMGwtNyAzdjE2LjYxYy0uMDEuMDggMCAuMTYuMDUuMjQuMDQuMDcuMS4xNC4xNi4xOHMuMTUuMDcuMjMuMDhjLjA4IDAgLjE3IDAgLjI0LS4wNGw2LjMtMi43LjQtLjE4di0xLjg2em0tMS45OS41NEwyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIxLjQyMiAxOC41OTUtNy43ODgtNS41MjRjLS4yNzItLjE4MS0uNjM0IDAtLjYzNC4zNjJsLjkwNiA5LjUxYzAgLjM2MS41NDMuNDUyLjcyNC4xOGwxLjQ1LTIuNTM1IDEuNDQ4IDIuNTM1Yy4xODEuMzYyLjYzNC41NDQuOTk2LjU0NC4xODEgMCAuMzYzLS4wOS41NDQtLjE4Mi41NDMtLjM2Mi43MjQtLjk5Ni40NTItMS41MzlsLTEuNDQ5LTIuNTM2aDIuOTg5Yy40NTMtLjA5LjYzNC0uNTQzLjM2Mi0uODE1Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNy40IDE1LjMzVjIuNDNsNC42OSAyLjM1djcuMDVoMS45OVY0LjcyTDE4IDMuMDR2LjE5aC0uMDF2OC42aDJWLjc2YzAtLjA4LS4wMS0uMTYtLjA1LS4yNGEuNS41IDAgMCAwLS4xNy0uMTguNi42IDAgMCAwLS4yMy0uMDhjLS4wOCAwLS4xNyAwLS4yNC4wNEwxMyAzIDcuMDEgMGwtNyAzdjE2LjYxYy0uMDEuMDggMCAuMTYuMDUuMjQuMDQuMDcuMS4xNC4xNi4xOHMuMTUuMDcuMjMuMDhjLjA4IDAgLjE3IDAgLjI0LS4wNGw2LjMtMi43LjQtLjE4di0xLjg2em0tMS45OS41NEwyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIxLjQyMiAxOC41OTUtNy43ODgtNS41MjRjLS4yNzItLjE4MS0uNjM0IDAtLjYzNC4zNjJsLjkwNiA5LjUxYzAgLjM2MS41NDMuNDUyLjcyNC4xOGwxLjQ1LTIuNTM1IDEuNDQ4IDIuNTM1Yy4xODEuMzYyLjYzNC41NDQuOTk2LjU0NC4xODEgMCAuMzYzLS4wOS41NDQtLjE4Mi41NDMtLjM2Mi43MjQtLjk5Ni40NTItMS41MzlsLTEuNDQ5LTIuNTM2aDIuOTg5Yy40NTMtLjA5LjYzNC0uNTQzLjM2Mi0uODE1Ii8+PC9zdmc+) center no-repeat}div[id^=GPmousePositionCoordinate-] input{color:inherit}div[id^=GPmousePositionAltitude-],div[id^=GPmousePositionCoordinate-]>div{display:flex;justify-content:space-between}div[id^=GPmousePositionCoordinate-] input[readonly]{font-size:1rem}.gpf-btn-icon-reverse:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI4Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi43NSAxLjAxSDQuODFMMy40MyAzLjA2IDIuMDUgMS4wMUguMTNsMi4yMyAzLjI1TDAgNy42OWgxLjkzbDEuNS0yLjI0IDEuNTIgMi4yNGgxLjkyTDQuNTEgNC4yNnpNMTIuNzQgMS4wMWwtMS44NCA0LjUtMS44My00LjVINy4ybDIuODEgNi42Ny0uMzcuODljLS4yOC42OC0uNjkuOS0xLjM1LjktLjI5IDAtLjYxLS4wNy0uODItLjE2djEuNDhjLjMyLjEzLjY4LjIxIDEuMTkuMjEgMS4yNyAwIDIuMDMtLjY5IDIuNDktMS43OUwxNC41MiAxaC0xLjc4ek00LjA4OCAxMS4wMThsLTItLjAxOGMtLjA0NSA0Ljk2IDMuNTk4IDkuMDkzIDguMzYyIDkuODE2YTguNCA4LjQgMCAwIDEtLjUxMS0yLjE0NWMtMy4zOTItLjg5LTUuODg0LTMuOTkzLTUuODUxLTcuNjUzTTIzLjg4IDIwLjAyYy4yMy0xLjE0LjExLTIuMzItLjM0LTMuMzlhNS45IDUuOSAwIDAgMC0yLjIxLTIuNjRjLS45OS0uNjUtMi4xNS0uOTktMy4zMy0uOTlzLTIuMzUuMzQtMy4zMy45OWMtLjk5LjY1LTEuNzYgMS41Ni0yLjIxIDIuNjRhNS42MyA1LjYzIDAgMCAwLS4zNCAzLjM5Yy4yMyAxLjE0LjggMi4xOSAxLjY0IDMuMDFMMTggMjcuMThsNC4yNC00LjE1Yy44NC0uODIgMS40MS0xLjg3IDEuNjQtMy4wMW0tMS45Ni0uMzhjLS4xNS43Ni0uNTQgMS40Ni0xLjA5IDIuMDFMMTggMjQuNDJsLTIuODMtMi43N2MtLjU2LS41NS0uOTQtMS4yNS0xLjEtMi4wMS0uMTUtLjc2LS4wOC0xLjU1LjIzLTIuMjYuMy0uNzIuODItMS4zMyAxLjQ3LTEuNzZhNC4wNjQgNC4wNjQgMCAwIDEgNC40NCAwIDMuODkzIDMuODkzIDAgMCAxIDEuNyA0LjAyeiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xOCAxNy4yOGMtLjY1IDAtMS4xNy41My0xLjE3IDEuMTdzLjUzIDEuMTcgMS4xNyAxLjE3IDEuMTctLjUzIDEuMTctMS4xNy0uNTMtMS4xNy0xLjE3LTEuMTciLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI4Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi43NSAxLjAxSDQuODFMMy40MyAzLjA2IDIuMDUgMS4wMUguMTNsMi4yMyAzLjI1TDAgNy42OWgxLjkzbDEuNS0yLjI0IDEuNTIgMi4yNGgxLjkyTDQuNTEgNC4yNnpNMTIuNzQgMS4wMWwtMS44NCA0LjUtMS44My00LjVINy4ybDIuODEgNi42Ny0uMzcuODljLS4yOC42OC0uNjkuOS0xLjM1LjktLjI5IDAtLjYxLS4wNy0uODItLjE2djEuNDhjLjMyLjEzLjY4LjIxIDEuMTkuMjEgMS4yNyAwIDIuMDMtLjY5IDIuNDktMS43OUwxNC41MiAxaC0xLjc4ek00LjA4OCAxMS4wMThsLTItLjAxOGMtLjA0NSA0Ljk2IDMuNTk4IDkuMDkzIDguMzYyIDkuODE2YTguNCA4LjQgMCAwIDEtLjUxMS0yLjE0NWMtMy4zOTItLjg5LTUuODg0LTMuOTkzLTUuODUxLTcuNjUzTTIzLjg4IDIwLjAyYy4yMy0xLjE0LjExLTIuMzItLjM0LTMuMzlhNS45IDUuOSAwIDAgMC0yLjIxLTIuNjRjLS45OS0uNjUtMi4xNS0uOTktMy4zMy0uOTlzLTIuMzUuMzQtMy4zMy45OWMtLjk5LjY1LTEuNzYgMS41Ni0yLjIxIDIuNjRhNS42MyA1LjYzIDAgMCAwLS4zNCAzLjM5Yy4yMyAxLjE0LjggMi4xOSAxLjY0IDMuMDFMMTggMjcuMThsNC4yNC00LjE1Yy44NC0uODIgMS40MS0xLjg3IDEuNjQtMy4wMW0tMS45Ni0uMzhjLS4xNS43Ni0uNTQgMS40Ni0xLjA5IDIuMDFMMTggMjQuNDJsLTIuODMtMi43N2MtLjU2LS41NS0uOTQtMS4yNS0xLjEtMi4wMS0uMTUtLjc2LS4wOC0xLjU1LjIzLTIuMjYuMy0uNzIuODItMS4zMyAxLjQ3LTEuNzZhNC4wNjQgNC4wNjQgMCAwIDEgNC40NCAwIDMuODkzIDMuODkzIDAgMCAxIDEuNyA0LjAyeiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xOCAxNy4yOGMtLjY1IDAtMS4xNy41My0xLjE3IDEuMTdzLjUzIDEuMTcgMS4xNyAxLjE3IDEuMTctLjUzIDEuMTctMS4xNy0uNTMtMS4xNy0xLjE3LTEuMTciLz48L3N2Zz4=) center no-repeat}.gpf-flex-reverse{align-items:flex-start;display:flex;flex-direction:column;justify-content:space-evenly}.gpf-panel-reverse{width:100%}.gpf-btn-icon-route:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE1Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMi43IDQuMzk5QTEuNyAxLjcgMCAxIDEgMi43IDFhMS43IDEuNyAwIDAgMSAwIDMuMzk5WiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTIuNyA0Ljk2djUuNjY4YTIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0IDIuOTc0IDIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0LTIuOTc0VjQuODA3YTIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0LTIuOTc0IDIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0IDIuOTc0djUuMzk2Ii8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im0xMi4xOTIgOC45NDggMi40MDQgMi40MDNNMTQuNTk3IDExLjM1MSAxNyA4Ljk0OCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE1Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMi43IDQuMzk5QTEuNyAxLjcgMCAxIDEgMi43IDFhMS43IDEuNyAwIDAgMSAwIDMuMzk5WiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTIuNyA0Ljk2djUuNjY4YTIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0IDIuOTc0IDIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0LTIuOTc0VjQuODA3YTIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0LTIuOTc0IDIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0IDIuOTc0djUuMzk2Ii8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im0xMi4xOTIgOC45NDggMi40MDQgMi40MDNNMTQuNTk3IDExLjM1MSAxNyA4Ljk0OCIvPjwvc3ZnPg==) center no-repeat}.GProuteFormMini{max-height:78px}.GProuteFormMini .GPelementShow{color:var(--grey-200-850)}.GProuteModeLabel{margin-bottom:.5rem}[id^=GProuteForm-] p.gpf-label{margin-bottom:.2rem;margin-top:0}[id^=GProuteForm-]>.GPpanelFooter{position:unset}[id^=GProuteSubmit-]{width:80%}[id^=GProuteForm-]>[class^=GPlocationPoint-]{margin-top:0}[id^=GProuteForm-]>p.gpf-label{margin-top:1rem}[id^=GProuteForm-].GProuteFormMini>p.gpf-label{margin-top:0}[id^=GProuteForm-]>p.gpf-label~p.gpf-label{margin-top:.5rem}button[id^=GProuteReset-],div[id^=GProuteResultsNew-]{min-width:2.5em}div[id^=GProuteResultsValueDist],div[id^=GProuteResultsValueTime]{color:var(--text-action-high-blue-france);font-weight:700}.GProuteResultsShowDetailsDiv{justify-content:left}div:has(input[id^=GProuteResultsShowDetails])+div[id^=GProuteResultsDetails-]{max-height:0;opacity:0;overflow:hidden}div:has(input[id^=GProuteResultsShowDetails]:checked)+div[id^=GProuteResultsDetails-]{max-height:200px;opacity:1;overflow-y:scroll}div[id^=GProuteResultsDetails-]{display:grid;gap:.5rem 5px;grid-template-columns:30px 1fr;max-width:350px;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s}.GProuteResultsDetailsInstruction,.GProuteResultsDetailsNumber{display:inline-block}.GProuteResultsDetailsNumber{font-weight:700;text-align:right;vertical-align:top}.GProuteExclusionsOptions{color:var(--text-label-grey);gap:.5rem}@media (max-width:576px){.gpf-mobile-fullscreen div[id^=GProuteResultsDetails-]{max-width:unset}}.gpf-widget-padding{padding-bottom:5px;padding-top:5px}.gpf-widget-color{background-color:var(--background-default-grey)}.GPlabelTitle,.gpf-panel__items_searchengine{border-bottom:1px solid var(--grey-900-175);color:var(--text-action-high-blue-france);padding:12px}.gpf-panel__items.GPautoCompleteProposal{box-sizing:border-box;height:45px;margin-bottom:0}.GPlabelTitle{background-color:var(--background-open-blue-france);font-size:1em;margin-bottom:0}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{max-height:unset}input[name^=inputSex].gpf-input,select[name^=inputSex].gpf-select{padding:unset}button[id^=GPsearchInputReset]{height:40px;width:40px}[id^=GPshowSearchDiv]{flex-direction:row-reverse}[id^=GPsearchEngine-]{flex-direction:column}[id^=GPsearchEngine-].gpf-widget-padding{align-items:center}div.GPbuttonsContainer>button{width:40px}.GPsearchFirstLineWrapper{height:40px}.gpf-widget-padding>.GPsearchFirstLineWrapper{margin:.5rem 0}.GPbuttonsContainer{height:56px;padding-left:10px}.GPsearchRadioContainer{background-color:var(--background-default-grey);display:flex;flex-direction:row;gap:1rem;max-height:0;overflow:clip;transition:max-height .3s;white-space:nowrap}[id^=GPsearchEngine-]:focus-within>.GPsearchRadioContainer,[id^=GPsearchEngine-]:has([id^=GPshowSearchByCoordinate-][aria-pressed=true])>.GPsearchRadioContainer,[id^=GPsearchEngine-]:hover>.GPsearchRadioContainer{max-height:3rem}.GPsearchRadioElements{display:flex;flex-direction:row;gap:1rem}.GPshowAdvancedSearch{align-items:center;color:var(--text-action-high-blue-france);cursor:pointer;display:flex;text-decoration:underline}.gpf-btn-icon-search{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZjVmNWZlIiBkPSJtMTguMDMxIDE2LjYxNyA0LjI4MyA0LjI4Mi0xLjQxNSAxLjQxNS00LjI4Mi00LjI4M0E4Ljk2IDguOTYgMCAwIDEgMTEgMjBjLTQuOTY4IDAtOS00LjAzMi05LTlzNC4wMzItOSA5LTkgOSA0LjAzMiA5IDlhOC45NiA4Ljk2IDAgMCAxLTEuOTY5IDUuNjE3bS0yLjAwNi0uNzQyQTYuOTggNi45OCAwIDAgMCAxOCAxMWMwLTMuODY4LTMuMTMzLTctNy03cy03IDMuMTMyLTcgNyAzLjEzMiA3IDcgN2E2Ljk4IDYuOTggMCAwIDAgNC44NzUtMS45NzV6Ii8+PC9zdmc+);background-position:50%;background-repeat:no-repeat;width:40px}form[id^=GPsearchInput-]{margin-left:8px;width:300px}button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]{border:none;max-width:300px}button[id^=GPshowSearchEnginePicto-]{border-radius:0 .25rem 0 0}.gpf-btn-icon-search-advanced:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLjIyNyAxMS4zMzNhNi43IDYuNyAwIDAgMS0uNjUyLTEuNTUgMiAyIDAgMCAwIC4wMDEtMy41NjUgNi42NiA2LjY2IDAgMCAxIDEuNjY3LTIuODkxIDIgMiAwIDAgMCAzLjA4OC0xLjc4MyA2LjY2IDYuNjYgMCAwIDEgMy4zMzguMDAxIDIgMiAwIDAgMCAzLjA4OCAxLjc4MmMuMzg2LjM5My43MjguODQgMS4wMTYgMS4zNC4yODkuNDk5LjUwNSAxLjAyLjY1MiAxLjU1YTIgMiAwIDAgMC0uMDAxIDMuNTY1IDYuNjYgNi42NiAwIDAgMS0xLjY2NyAyLjg5MSAyIDIgMCAwIDAtMy4wODggMS43ODMgNi42NiA2LjY2IDAgMCAxLTMuMzM4LS4wMDEgMiAyIDAgMCAwLTMuMDg4LTEuNzgyIDYuNyA2LjcgMCAwIDEtMS4wMTYtMS4zNE02IDExLjQ2NGEzLjMzIDMuMzMgMCAwIDEgMS41IDEuODQ3cS41LjA0NyAxIDBjLjI1NS0uNzguNzktMS40MzcgMS41LTEuODQ2YTMuMzMgMy4zMyAwIDAgMSAyLjM1LS4zNzdxLjI5LS40MS40OTktLjg2NUEzLjMzIDMuMzMgMCAwIDEgMTIgOGMwLS44NC4zMTMtMS42MjUuODQ5LTIuMjIzYTUuNCA1LjQgMCAwIDAtLjUtLjg2NUEzLjMzIDMuMzMgMCAwIDEgOC41IDIuNjg5YTUuMyA1LjMgMCAwIDAtMSAwQTMuMzMgMy4zMyAwIDAgMSA2IDQuNTM1Yy0uNzEuNDExLTEuNTQ3LjU0NS0yLjM1LjM3N3EtLjI5LjQxLS40OTkuODY1QzMuNjk4IDYuMzg4IDQuMDAxIDcuMTggNCA4YzAgLjg0LS4zMTMgMS42MjUtLjg0OSAyLjIyM3EuMjEuNDU2LjUuODY1QTMuMzMgMy4zMyAwIDAgMSA2IDExLjQ2NE04IDEwYTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNG0wLTEuMzMzYS42NjcuNjY3IDAgMSAwIDAtMS4zMzQuNjY3LjY2NyAwIDAgMCAwIDEuMzM0IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLjIyNyAxMS4zMzNhNi43IDYuNyAwIDAgMS0uNjUyLTEuNTUgMiAyIDAgMCAwIC4wMDEtMy41NjUgNi42NiA2LjY2IDAgMCAxIDEuNjY3LTIuODkxIDIgMiAwIDAgMCAzLjA4OC0xLjc4MyA2LjY2IDYuNjYgMCAwIDEgMy4zMzguMDAxIDIgMiAwIDAgMCAzLjA4OCAxLjc4MmMuMzg2LjM5My43MjguODQgMS4wMTYgMS4zNC4yODkuNDk5LjUwNSAxLjAyLjY1MiAxLjU1YTIgMiAwIDAgMC0uMDAxIDMuNTY1IDYuNjYgNi42NiAwIDAgMS0xLjY2NyAyLjg5MSAyIDIgMCAwIDAtMy4wODggMS43ODMgNi42NiA2LjY2IDAgMCAxLTMuMzM4LS4wMDEgMiAyIDAgMCAwLTMuMDg4LTEuNzgyIDYuNyA2LjcgMCAwIDEtMS4wMTYtMS4zNE02IDExLjQ2NGEzLjMzIDMuMzMgMCAwIDEgMS41IDEuODQ3cS41LjA0NyAxIDBjLjI1NS0uNzguNzktMS40MzcgMS41LTEuODQ2YTMuMzMgMy4zMyAwIDAgMSAyLjM1LS4zNzdxLjI5LS40MS40OTktLjg2NUEzLjMzIDMuMzMgMCAwIDEgMTIgOGMwLS44NC4zMTMtMS42MjUuODQ5LTIuMjIzYTUuNCA1LjQgMCAwIDAtLjUtLjg2NUEzLjMzIDMuMzMgMCAwIDEgOC41IDIuNjg5YTUuMyA1LjMgMCAwIDAtMSAwQTMuMzMgMy4zMyAwIDAgMSA2IDQuNTM1Yy0uNzEuNDExLTEuNTQ3LjU0NS0yLjM1LjM3N3EtLjI5LjQxLS40OTkuODY1QzMuNjk4IDYuMzg4IDQuMDAxIDcuMTggNCA4YzAgLjg0LS4zMTMgMS42MjUtLjg0OSAyLjIyM3EuMjEuNDU2LjUuODY1QTMuMzMgMy4zMyAwIDAgMSA2IDExLjQ2NE04IDEwYTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNG0wLTEuMzMzYS42NjcuNjY3IDAgMSAwIDAtMS4zMzQuNjY3LjY2NyAwIDAgMCAwIDEuMzM0IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-search-geolocate:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE5IDIwIj48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOS41IDE2LjI5MmE2LjI5MiA2LjI5MiAwIDEgMCAwLTEyLjU4NCA2LjI5MiA2LjI5MiAwIDAgMCAwIDEyLjU4NFoiLz48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xIDEwaDIuMjA4TTE1Ljc5MiAxMEgxOE05LjUgMS41djIuMjA4TTkuNSAxNi4yOTJWMTguNSIvPjxwYXRoIGZpbGw9IiMxMDEwOTIiIGQ9Ik05LjUgMTEuMTA0YTEuMTA0IDEuMTA0IDAgMSAwIDAtMi4yMDggMS4xMDQgMS4xMDQgMCAwIDAgMCAyLjIwOCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE5IDIwIj48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOS41IDE2LjI5MmE2LjI5MiA2LjI5MiAwIDEgMCAwLTEyLjU4NCA2LjI5MiA2LjI5MiAwIDAgMCAwIDEyLjU4NFoiLz48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xIDEwaDIuMjA4TTE1Ljc5MiAxMEgxOE05LjUgMS41djIuMjA4TTkuNSAxNi4yOTJWMTguNSIvPjxwYXRoIGZpbGw9IiMxMDEwOTIiIGQ9Ik05LjUgMTEuMTA0YTEuMTA0IDEuMTA0IDAgMSAwIDAtMi4yMDggMS4xMDQgMS4xMDQgMCAwIDAgMCAyLjIwOCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-icon-search-coordinate:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMTAxMDkyIiBkPSJNOS43MDIgNC44NjhIOC42NWMtLjQ5MSAwLS42OS0uMzUtLjQ1Ni0uNzcxQTI3MyAyNzMgMCAwIDEgMTAuMDA2Ljk2NGMuMjM0LS4zOTcuNjMxLS4zOTcuODY1LjAxMmE0MDkgNDA5IDAgMCAxIDEuNzY1IDMuMDVjLjI5Mi41MTUuMDkzLjgzLS41MDMuODQyaC0uOTdjMCAuMTQtLjAxMi4yMzQtLjAxMi4zNHY2LjEzNmMwIC4xNC4wODIuMzM5LjE4Ny40MiAyLjAxIDEuNDI3IDQuMDMzIDIuODQxIDYuMDU1IDQuMjU2LjAyNC4wMTEuMDU5LjAyMy4xMDUuMDQ2LjIxLS4yOC40MjEtLjU2LjYzMi0uODMuMzI3LS40Mi43MTMtLjM4NS45MTEuMTA2LjQ2OCAxLjA3NS45MjQgMi4xNjIgMS4zOCAzLjIzNy4yMS40OTEtLjAxMi43OTUtLjU1LjczN2EzNDcgMzQ3IDAgMCAxLTMuNDcxLS4zOTdjLS41ODUtLjA3LS43MjUtLjQzMy0uMzYzLS45bC40OTEtLjY2N2MuMDEyLS4wMTIuMDEyLS4wMzUuMDQ3LS4xMDVhMjI1IDIyNSAwIDAgMS0xLjExLS43OTVjLTEuNTktMS4xMjItMy4xOTEtMi4yMzMtNC43ODEtMy4zNTUtLjE5OS0uMTQtLjM0LS4xNjMtLjU1IDBhMTY3MiAxNjcyIDAgMCAxLTUuNjU3IDMuOTg2Yy0uMDQ3LjAzNS0uMDgyLjA1OS0uMTQuMTA2LjIyMi4zMDMuNDU1LjU4NC42NjYuODg4LjI5Mi40MDkuMTUyLjc3MS0uMzYyLjgzLTEuMTkzLjE1Mi0yLjM5Ny4yOTItMy41ODkuNDItLjQ0NC4wNDctLjY2Ni0uMjY4LS40OTEtLjcuMzg2LS45MjQuNzgzLTEuODQ4IDEuMTgtMi43NzEuMDgyLS4xODcuMTUzLS4zNzQuMjM0LS41NS4yLS40Mi41NzMtLjQ2Ny44NzctLjEwNWwuNTYxLjczN2MuMDEyLjAxMS4wMzUuMDIzLjA4Mi4wNDcuNjY2LS40NjggMS4zMzMtLjkzNiAyLjAxLTEuNDE1IDEuMjk4LS45MTIgMi41OTUtMS44MzUgMy45MDUtMi43MzUuMjIyLS4xNTIuMjkyLS4zMTYuMjkyLS41NzNWNC44NTd6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMTAxMDkyIiBkPSJNOS43MDIgNC44NjhIOC42NWMtLjQ5MSAwLS42OS0uMzUtLjQ1Ni0uNzcxQTI3MyAyNzMgMCAwIDEgMTAuMDA2Ljk2NGMuMjM0LS4zOTcuNjMxLS4zOTcuODY1LjAxMmE0MDkgNDA5IDAgMCAxIDEuNzY1IDMuMDVjLjI5Mi41MTUuMDkzLjgzLS41MDMuODQyaC0uOTdjMCAuMTQtLjAxMi4yMzQtLjAxMi4zNHY2LjEzNmMwIC4xNC4wODIuMzM5LjE4Ny40MiAyLjAxIDEuNDI3IDQuMDMzIDIuODQxIDYuMDU1IDQuMjU2LjAyNC4wMTEuMDU5LjAyMy4xMDUuMDQ2LjIxLS4yOC40MjEtLjU2LjYzMi0uODMuMzI3LS40Mi43MTMtLjM4NS45MTEuMTA2LjQ2OCAxLjA3NS45MjQgMi4xNjIgMS4zOCAzLjIzNy4yMS40OTEtLjAxMi43OTUtLjU1LjczN2EzNDcgMzQ3IDAgMCAxLTMuNDcxLS4zOTdjLS41ODUtLjA3LS43MjUtLjQzMy0uMzYzLS45bC40OTEtLjY2N2MuMDEyLS4wMTIuMDEyLS4wMzUuMDQ3LS4xMDVhMjI1IDIyNSAwIDAgMS0xLjExLS43OTVjLTEuNTktMS4xMjItMy4xOTEtMi4yMzMtNC43ODEtMy4zNTUtLjE5OS0uMTQtLjM0LS4xNjMtLjU1IDBhMTY3MiAxNjcyIDAgMCAxLTUuNjU3IDMuOTg2Yy0uMDQ3LjAzNS0uMDgyLjA1OS0uMTQuMTA2LjIyMi4zMDMuNDU1LjU4NC42NjYuODg4LjI5Mi40MDkuMTUyLjc3MS0uMzYyLjgzLTEuMTkzLjE1Mi0yLjM5Ny4yOTItMy41ODkuNDItLjQ0NC4wNDctLjY2Ni0uMjY4LS40OTEtLjcuMzg2LS45MjQuNzgzLTEuODQ4IDEuMTgtMi43NzEuMDgyLS4xODcuMTUzLS4zNzQuMjM0LS41NS4yLS40Mi41NzMtLjQ2Ny44NzctLjEwNWwuNTYxLjczN2MuMDEyLjAxMS4wMzUuMDIzLjA4Mi4wNDcuNjY2LS40NjggMS4zMzMtLjkzNiAyLjAxLTEuNDE1IDEuMjk4LS45MTIgMi41OTUtMS44MzUgMy45MDUtMi43MzUuMjIyLS4xNTIuMjkyLS4zMTYuMjkyLS41NzNWNC44NTd6Ii8+PC9zdmc+) center no-repeat}.gpf-btn-icon-search-reset{background-position:-25px}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{position:absolute;top:66px;width:inherit}[id^=GPautocompleteResults-]{border:1px solid var(--background-open-blue-france)}dialog[id^=GPgeocodeResultsList],div[id^=GPautoCompleteList]{background-color:var(--background-default-grey);height:fit-content;max-height:unset;position:absolute;width:320px}div[id^=GPautoCompleteList]{margin-left:2px;top:42px}.position-container-bottom-left [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-bottom-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-left [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList]{margin-left:8px;position:relative;top:unset;width:340px}.position-container-bottom-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList]{margin-right:10px}.gpf-widget-padding>div[id^=GPautoCompleteList]{margin:0;top:100%;width:100%}dialog[id^=GPgeocodeResultsList]{border-radius:4px;overflow:hidden;position:absolute;top:55px}div[id^=GPgeocodeResults-]{background-color:var(--background-default-grey);max-height:240px;overflow-y:auto;position:relative;width:100%}[id^=GPautocompleteResultsLocation],[id^=GPautocompleteResultsSuggest]{height:225px}@media (max-width:576px){.gpf-widget-padding>.GPsearchFirstLineWrapper{flex-direction:column;height:fit-content}.GPsearchRadioContainer{align-items:center;flex-direction:column}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{margin-left:unset;position:relative;top:unset}.GPsearchRadioContainer{gap:0;margin:0 8px}form[id^=GPsearchInput-]{margin-left:0}[id^=GPsearchEngine-]:focus-within>.GPsearchRadioContainer,[id^=GPsearchEngine-]:has([id^=GPshowSearchByCoordinate-][aria-pressed=true])>.GPsearchRadioContainer,[id^=GPsearchEngine-]:hover>.GPsearchRadioContainer{max-height:4rem}}.gpf-btn-icon-toolbox{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAlqAAAJagFGUcfpAAAAB3RJTUUH4AsKDCgkqrnTSAAAAw1JREFUSMe9ll2IlVUUhp9vnEintH+FulAyI+uihClKjSZtQJAJrRnDoKt+oCIIjSIrDCokKXQiCqkuTMFAJtQLCwItMsQbURmjiRIK+pmSoSjJ/JmnC98je6ZzjmVMCzbnO/vstd691nrf9R0YA1NRn2SsTX1E/UM9vVc1OdwC3A7cBLQD1wE/Al8AA0BfVVXf1vFbAmwCjgPjq+oUREsDkBuA3UBfwL4EXgS2AgJLgIPqw2pV+HUCG4B9/yTtF9Rj6pvqBeo4db7apU5N/VGXqofVHeo09Ub1N3Wdeo/6Z1m60SAL1KPqrQnWqR5Qt6pvqYfU1WqbWqnvqt+p89Sf1T61pSmQOkH9Wl2ZLDaru9T2gLapH6mvB6RXHVRvU79Rd6rnqteoH6vHGwEtV7/K4ZXq+qJME9VP1JfzfZU6lMwPqnvVSfltkvpMyl8X6L3ccmIyayuAdqjP5flZ9deA7M7lpqjjC5+eZkAH1AfT5LVxaFUfV39JoGXq72qHul39Qb0ypX5fvaIRUEnv6dHIZGAwe28Ac4DngQeAl4DFeZ4NLAAOAb3ZP1nEG6HREmgAmAEcBmYCTwFTgaXAEPAK0AMsBO4G7gT2A08Aj9YKM+qzbul61Q0hQ7+6L43tCVW71RXqCXVRUaJhdaOnbHIY2d2Mdd3q96F5e0TYFV3dl/4Nq/cHZE7m2avqLQXQeTlzohFQm/q5+k4C3ZFAD6mL4/h0frs6U2FzMpgdoEujq371ZCMg1GvDqjXqkTCuI1mtyZnLQv9dYWItO9VLwsC7GgIVYPfGaYU6K5rZmJtPUPeoAwla85lbALWcEagA61Svyoj5QD0nAbaoP0U71AJFvKoX50J/A2odDVRVFWo/8Fk00p13y2tAJzAv+6cvVmjGYo3QUWudjC4EPgSORjNHgGXAY3kfzcoqbcaZ9NM6eoID24CLMhGGgA5geabFzVn1bBAYBs4HLm/Wm3HqttB2ZtHof7va1U/Ts7oZvQ10AWuB67PO1vYAc+tls9qxsZETtinf/6PV/gX9b/YXjLd1o+WqCcMAAAAASUVORK5CYII=);background-position:3px;background-repeat:no-repeat}.gpf-btn-icon-zoom-in{height:inherit;width:inherit}.gpf-btn-icon-zoom-in:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwTTEyIDd2MTAiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwTTEyIDd2MTAiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41Ii8+PC9zdmc+) center no-repeat}.gpf-btn-icon-zoom-out{height:inherit;width:inherit}.gpf-btn-icon-zoom-out:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwIi8+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAuNzUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwIi8+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAuNzUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIvPjwvc3ZnPg==) center no-repeat}.ol-custom-full-screen button{background-position:50%;background-repeat:no-repeat;height:40px;width:40px}.ol-custom-full-screen button.ol-custom-full-screen-false:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuMTI1IDIuMjVhLjc1Ljc1IDAgMCAwIDAgMS41em00LjM3NSAxLjVoLjc1di0xLjVoLS43NXptLTQuMzc1IDBIMjAuNXYtMS41aC00LjM3NXoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjEuMjUgM3YtLjc1aC0xLjVWM3ptLTEuNSA0LjM3NWEuNzUuNzUgMCAwIDAgMS41IDB6bTAtNC4zNzV2NC4zNzVoMS41VjN6TTcuMzc1IDIxLjI1YS43NS43NSAwIDAgMCAwLTEuNXpNMyAxOS43NWgtLjc1djEuNUgzem00LjM3NSAwSDN2MS41aDQuMzc1eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0yLjI1IDIwLjV2Ljc1aDEuNXYtLjc1em0xLjUtNC4zNzVhLjc1Ljc1IDAgMCAwLTEuNSAwem0wIDQuMzc1di00LjM3NWgtMS41VjIwLjV6TTIwLjIxMiA0LjM0OWwuNTMtLjUzLTEuMDYtMS4wNjEtLjUzMS41M3ptLTYuNzE4IDQuNTk2YS43NS43NSAwIDEgMCAxLjA2IDEuMDZ6bTUuNjU3LTUuNjU3LTUuNjU3IDUuNjU3IDEuMDYgMS4wNiA1LjY1OC01LjY1NnoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNOS45OTkgMTQuNTYyYS43NS43NSAwIDEgMC0xLjA2LTEuMDZ6bS02LjcxOCA0LjU5Ni0uNTMuNTMgMS4wNiAxLjA2MS41MzEtLjUzem01LjY1Ny01LjY1Ny01LjY1NyA1LjY1NyAxLjA2MSAxLjA2TDEwIDE0LjU2M3oiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuMTI1IDIuMjVhLjc1Ljc1IDAgMCAwIDAgMS41em00LjM3NSAxLjVoLjc1di0xLjVoLS43NXptLTQuMzc1IDBIMjAuNXYtMS41aC00LjM3NXoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjEuMjUgM3YtLjc1aC0xLjVWM3ptLTEuNSA0LjM3NWEuNzUuNzUgMCAwIDAgMS41IDB6bTAtNC4zNzV2NC4zNzVoMS41VjN6TTcuMzc1IDIxLjI1YS43NS43NSAwIDAgMCAwLTEuNXpNMyAxOS43NWgtLjc1djEuNUgzem00LjM3NSAwSDN2MS41aDQuMzc1eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0yLjI1IDIwLjV2Ljc1aDEuNXYtLjc1em0xLjUtNC4zNzVhLjc1Ljc1IDAgMCAwLTEuNSAwem0wIDQuMzc1di00LjM3NWgtMS41VjIwLjV6TTIwLjIxMiA0LjM0OWwuNTMtLjUzLTEuMDYtMS4wNjEtLjUzMS41M3ptLTYuNzE4IDQuNTk2YS43NS43NSAwIDEgMCAxLjA2IDEuMDZ6bTUuNjU3LTUuNjU3LTUuNjU3IDUuNjU3IDEuMDYgMS4wNiA1LjY1OC01LjY1NnoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNOS45OTkgMTQuNTYyYS43NS43NSAwIDEgMC0xLjA2LTEuMDZ6bS02LjcxOCA0LjU5Ni0uNTMuNTMgMS4wNiAxLjA2MS41MzEtLjUzem01LjY1Ny01LjY1Ny01LjY1NyA1LjY1NyAxLjA2MSAxLjA2TDEwIDE0LjU2M3oiLz48L3N2Zz4=) center no-repeat}.ol-custom-full-screen button.ol-custom-full-screen-true:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTMuNzczIDEwLjk2OGg0LjM4Yy40MSAwIC43NS0uMzQuNzUtLjc1cy0uMzQtLjc1LS43NS0uNzVoLTIuNTZsNS4xOS01LjE5Yy4yOS0uMjkuMjktLjc3IDAtMS4wNmEuNzU0Ljc1NCAwIDAgMC0xLjA2IDBsLTUuMiA1LjJ2LTIuNTZjMC0uNDEtLjM0LS43NS0uNzUtLjc1cy0uNzUuMzQtLjc1Ljc1djUuMTF6TTQuMjc4IDIwLjc4M2w1LjE5LTUuMTl2Mi41NmMwIC40MS4zNC43NS43NS43NXMuNzUtLjM0Ljc1LS43NXYtNS4xMmgtNS4xMmMtLjQxIDAtLjc1LjM0LS43NS43NXMuMzQuNzUuNzUuNzVoMi41NmwtNS4xOSA1LjE5Yy0uMjkuMjktLjI5Ljc3IDAgMS4wNnMuNzcuMjkgMS4wNiAwIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTMuNzczIDEwLjk2OGg0LjM4Yy40MSAwIC43NS0uMzQuNzUtLjc1cy0uMzQtLjc1LS43NS0uNzVoLTIuNTZsNS4xOS01LjE5Yy4yOS0uMjkuMjktLjc3IDAtMS4wNmEuNzU0Ljc1NCAwIDAgMC0xLjA2IDBsLTUuMiA1LjJ2LTIuNTZjMC0uNDEtLjM0LS43NS0uNzUtLjc1cy0uNzUuMzQtLjc1Ljc1djUuMTF6TTQuMjc4IDIwLjc4M2w1LjE5LTUuMTl2Mi41NmMwIC40MS4zNC43NS43NS43NXMuNzUtLjM0Ljc1LS43NXYtNS4xMmgtNS4xMmMtLjQxIDAtLjc1LjM0LS43NS43NXMuMzQuNzUuNzUuNzVoMi41NmwtNS4xOSA1LjE5Yy0uMjkuMjktLjI5Ljc3IDAgMS4wNnMuNzcuMjkgMS4wNiAwIi8+PC9zdmc+) center no-repeat}.gpf-btn-icon-overviewmap:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyA1LjcgOS4zIDNsNS40IDIuNyA1LjY3My0yLjQzMWEuNDUuNDUgMCAwIDEgLjYyNy40MTNWMTguM0wxNC43IDIxbC01LjQtMi43LTUuNjczIDIuNDMxQS40NS40NSAwIDAgMSAzIDIwLjMxN3ptMTIuNiAxMi45NTYgMy42LTEuNTQzVjUuNzNsLTMuNiAxLjU0M3ptLTEuOC0uMTE4VjcuMjYybC0zLjYtMS44djExLjI3NnptLTUuNC0xLjgxVjUuMzQzTDQuOCA2Ljg4N1YxOC4yN3oiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyA1LjcgOS4zIDNsNS40IDIuNyA1LjY3My0yLjQzMWEuNDUuNDUgMCAwIDEgLjYyNy40MTNWMTguM0wxNC43IDIxbC01LjQtMi43LTUuNjczIDIuNDMxQS40NS40NSAwIDAgMSAzIDIwLjMxN3ptMTIuNiAxMi45NTYgMy42LTEuNTQzVjUuNzNsLTMuNiAxLjU0M3ptLTEuOC0uMTE4VjcuMjYybC0zLjYtMS44djExLjI3NnptLTUuNC0xLjgxVjUuMzQzTDQuOCA2Ljg4N1YxOC4yN3oiLz48L3N2Zz4=) center no-repeat}.ol-overviewmap:has(>.gpf-btn-icon[aria-pressed=true]):after{transform:translateY(-100%)}.ol-overviewmap:not(.ol-collapsed){background:unset}.gpf-btn-icon-legends:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDQwIDQwIj48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Ik0yNC4xMjggMjYuMTExVjI4SDEyLjdjLS45NDQgMC0xLjctLjc1Ni0xLjctMS43VjExaDEzLjAzM3YxNC45MjJjMCAxLjA0Ljc1NiAxLjk4MyAxLjc5NSAyLjA3OCAxLjEzMy4wOTQgMi4xNzItLjg1IDIuMTcyLTEuOTgzdi0zLjAyM2gtMy44NzIiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTE0LjcwMyAxNS43MjJoNS42NjdNMTQuNzAzIDE5LjVoNS42NjdNMTQuNzAzIDIzLjI3OGg1LjY2NyIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTI2LjExMSAyOGgtMS45ODMiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDQwIDQwIj48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Ik0yNC4xMjggMjYuMTExVjI4SDEyLjdjLS45NDQgMC0xLjctLjc1Ni0xLjctMS43VjExaDEzLjAzM3YxNC45MjJjMCAxLjA0Ljc1NiAxLjk4MyAxLjc5NSAyLjA3OCAxLjEzMy4wOTQgMi4xNzItLjg1IDIuMTcyLTEuOTgzdi0zLjAyM2gtMy44NzIiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTE0LjcwMyAxNS43MjJoNS42NjdNMTQuNzAzIDE5LjVoNS42NjdNMTQuNzAzIDIzLjI3OGg1LjY2NyIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTI2LjExMSAyOGgtMS45ODMiLz48L3N2Zz4=) center no-repeat}.gpf-btn-header-legends{height:26px;position:absolute;width:26px;z-index:2}.gpf-btn-icon-header-legends{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjIiIGQ9Ik0xMi42IDEyLjY2NHYxLjMzNEg0LjUzM2MtLjY2NiAwLTEuMi0uNTM0LTEuMi0xLjJ2LTEwLjhoOS4yVjEyLjUzYzAgLjczMy41MzQgMS40IDEuMjY3IDEuNDY3LjguMDY2IDEuNTMzLS42IDEuNTMzLTEuNHYtMi4xMzRIMTIuNiIvPjxwYXRoIHN0cm9rZT0iIzEwMTA5MiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4yIiBkPSJNNS45NDcgNS4zMzFoNE01Ljk0NyA3Ljk5OGg0TTUuOTQ3IDEwLjY2NGg0Ii8+PHBhdGggc3Ryb2tlPSIjMTAxMDkyIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4yIiBkPSJNMTQgMTMuOTk4aC0xLjQiLz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:auto auto}.gpf-panel__body_legends{max-height:300px!important;overflow:auto}.gpf-panel__title_legends{color:#101092;font-size:1rem;font-weight:400;margin:0;padding:12px 15px;position:relative;right:-16px}.gpf-panel__header_legends{align-content:center;align-items:center;background:#e3e3fd;display:flex;flex-direction:row;height:48px}button[id^=GPcollapseLegend_ID_]{position:absolute;right:0;top:8px}.gpf-btn-icon-legends-collapse{box-shadow:none}.gpf-btn-icon-legends-collapse:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;transition:transform .2s ease-out 0s}.gpf-btn-icon-legends-collapse[aria-pressed=true]:after{box-shadow:none;transform:rotate(180deg)}.legend-entry-container{background-color:var(--background-overlap-grey);border-bottom:1px solid var(--border-default-grey);overflow:hidden;position:relative;top:0}.gpf-label-legends-name{line-height:56px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 40px)}button[id^=GPcollapseLegend_ID_][aria-pressed=true]+.legend-entry-image{border-top:1px solid var(--border-default-grey);max-height:300px;opacity:1;overflow:auto;padding:10px 0}.legend-entry-image{display:block;max-height:0;opacity:0;transition:max-height .5s ease-out 0s,opacity .5s ease-out 0s}.legends-entries{padding:0 16px}.gpf-btn-icon-catalog:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNCIgaGVpZ2h0PSIzNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuNzEzIDEyLjc3NGE0LjEyNSA0LjEyNSAwIDEgMSAxLjA2LTEuMDZsMi4wMDcgMi4wMDYtMS4wNiAxLjA2ek01IDZoMy43NXYxLjVINXptMCA1LjI1aDMuNzV2MS41SDV6bTAgNS4yNWgxMy41VjE4SDV6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNCIgaGVpZ2h0PSIzNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuNzEzIDEyLjc3NGE0LjEyNSA0LjEyNSAwIDEgMSAxLjA2LTEuMDZsMi4wMDcgMi4wMDYtMS4wNiAxLjA2ek01IDZoMy43NXYxLjVINXptMCA1LjI1aDMuNzV2MS41SDV6bTAgNS4yNWgxMy41VjE4SDV6Ii8+PC9zdmc+) center no-repeat}@media (max-width:576px){.gpf-mobile-fullscreen .GPtabContent{height:100vh;max-height:unset!important}}.gpf-btn-icon-territories:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi42NDggMS45ODZhLjczLjczIDAgMCAxIC43Ny4yODRsLjIxNy4zMWguMTEzYy4zMTcgMCAuNTkyLjIuNjg0LjQ5OWwuMDM5LjEyNmEuNzIuNzIgMCAwIDEgLjQxLjI1My43LjcgMCAwIDEgLjE4Ny4wNjNsLjI4Ny4xNGEuNy43IDAgMCAxIC4yOTQuMjY3bC4yMzYtLjA1NWEuNzIuNzIgMCAwIDEgLjYwOS4xMy43LjcgMCAwIDEgLjI3My41NTJ2LjI1bC40ODQuMzIzYS43LjcgMCAwIDEgLjMyOC4wNThsLjA3OC4wMzMuMDk5LS4wNGEuNzQuNzQgMCAwIDEgLjQ3NS0uMDIzbC4zODkuMTE0Yy4xMzYuMDQuMjU2LjExOC4zNDYuMjI2bC4yOC4zMzYuMzc0LS4wMzdhLjc0Ljc0IDAgMCAxIC40MS4wNzlsLjIyNi4xMi4zMzEuMDA2Yy4xMzMuMDAzLjI2LjA0LjM3MS4xMWwuMjg5LjE3OWMuMzEyLjE5Ni40MjIuNi4yNS45MmwtLjMxMi41NzgtLjAxNi4xNzRhLjcuNyAwIDAgMS0uMDM0LjE2bC0uMjIyLjYzLjAxNyAxLjA0NWEuNjkuNjkgMCAwIDEtLjI1Ni41NDlsLS40MDcuMzMzYS43LjcgMCAwIDEtLjI0My4xM2wtLjcuODg1Yy4yNC4wNi40NC4yMzguNTEyLjQ4MmwuMDc3LjI1Ni4wOTcuMTIuMjI4LjMzNGEuNjkuNjkgMCAwIDEtLjAxNS44MDFsLjI3LjMxN2EuNy43IDAgMCAxIC4xNjUuNDgzbC0uMDIuMzY0YS43LjcgMCAwIDEtLjI4LjUybC4wNS4wNDhhLjY5LjY5IDAgMCAxIC4wNjEuOTVsLjA4NS4wNTguMDktLjAzMWEuNzIuNzIgMCAwIDEgLjg4OC4zNjVsLjExNy4yNWEuNjkuNjkgMCAwIDEtLjA3OS43MTJsLS4wMzkuMDU1YS42OS42OSAwIDAgMS0uMjQ4LjY0MmwtLjcyLjU4Ny0uMzEyLjE5NmEuNy43IDAgMCAxLS4wNjMuMzE3LjcuNyAwIDAgMS0uNDAyLjM2OWwtLjYzMS4yMjhhMSAxIDAgMCAxLS4xNDkuMDM3bC0uNDcyLjA2NmEuNy43IDAgMCAxLS4yNzQtLjAxM2wtLjk3LS4yMjItLjY0NS0uMTg1LS4wNS0uMDE2YS43My43MyAwIDAgMS0uNDI5LS4wNzhsLS4yMjItLjEyYS43My43MyAwIDAgMS0uNTI4LS4wOTZsLS42MDguMzYtLjE5Mi4zOC4xODcuNjQzYS43LjcgMCAwIDEtLjA2OC41NC43MS43MSAwIDAgMS0uNDMzLjMyOGwtLjc2OC4yYS43LjcgMCAwIDEtLjE4NC4wMjRsLS4xMDItLjAwOC0uNjQ0LS4xMTItLjI5Mi4wNThhLjc0Ljc0IDAgMCAxLS40NS0uMDUzbC0uMzQ0LS4xNjRhLjcuNyAwIDAgMS0uMzcyLS40MjhsLS4yODItLjExMy0uMTE4LS4wMjVhLjcyLjcyIDAgMCAxLS42NTIuMjVsLTEuMjE1LS4xNjFhLjcuNyAwIDAgMS0uMjcyLS4wOTNsLS4yMDUtLjEyaC0uMzFhLjcyLjcyIDAgMCAxLS41Mi0uMjJsLS4yMDgtLjIxNy0uNjk2LS4yOTRhLjcuNyAwIDAgMS0uMzQtLjI5OGwtLjE0MS0uMjQ1LS4yOTgtLjE2MWEuNjkzLjY5MyAwIDAgMS0uMjA4LTEuMDU5bC40NjQtLjU1My4yNTctMS4zOGExIDEgMCAwIDEgLjAyNC0uMDkyLjcuNyAwIDAgMS0uMDQtLjMyOWwuMjEzLTEuODIyYTEgMSAwIDAgMSAuMDE5LS4xLjY5LjY5IDAgMCAxIC4xMzgtLjg1Ny43LjcgMCAwIDEtLjA3NS0uMjE2bC0uMzI4LS4xNjVhLjcuNyAwIDAgMS0uMjQ3LS4yMDZsLS41NTktLjcyOGEuNy43IDAgMCAxLS4xMjYtLjI2NWwtLjE2NS0uNzM3LS4wMDItLjAwOC0uMDc0LS4wNWEuNy43IDAgMCAxLS4xNjItLjE1MWwtLjI0LS4zMTMtMS4zNDMtLjUyNGgtLjM4NmEuNzIuNzIgMCAwIDEtLjYxNy0uMzQ3bC0uMTY0LS4yNzVhLjcuNyAwIDAgMS0uMDgzLS40OTUuNy43IDAgMCAxLS4yNzYtLjM1TDEuNzU0IDguMWEuNjk1LjY5NSAwIDAgMSAuMzczLS44NjVsMS4wMTctLjQ2NmEuNy43IDAgMCAxIC4yNDEtLjA2M2wxLjQwMS0uMTI0YS43NC43NCAwIDAgMSAuNTc0LjIwN2wuMjU5LjI1OS4wNTQtLjAyMWEuNzMuNzMgMCAwIDEgLjM5NC0uMDM2bC4xODcuMDMzLS4yNTMtLjU5Ni0uMTktLjc1N2EuNy43IDAgMCAxIC4xMi0uNTgzLjcxLjcxIDAgMCAxIC41MzUtLjI4NGwuNTc0LS4wMjlhLjcuNyAwIDAgMSAuNTU4LjIyMmwuNDkzLjUxOS42MzkuMTIzLjAwNy0uMDc5YS43LjcgMCAwIDEgLjQ4Mi0uNjA1bDEuMjEzLS40MDkuMzI1LS4yOTItLjA0Ni0uNzFhLjcuNyAwIDAgMSAuMDYtLjMzMWwuMjU0LS41NDVhLjcuNyAwIDAgMSAuNDctLjM4OHptLS4xODggMS45NzgtLjMzLjA4MS0uMDM2LjA3My4wNTUuODE2Yy4wMTMuMi0uMDcuMzkyLS4yMjcuNTI3bC0uNjczLjU3OGEuNy43IDAgMCAxLS4yNDkuMTM4bC0uNzM3LjIzOC4yMjguMTU3LS4yODMuMTM1YS42OC42OCAwIDAgMS0uMzQ3LjM3OGwtLjQ4My4yM2EuNzYuNzYgMCAwIDEtLjQ1LjA2bC0xLjE5LS4yMnYuMDA2bC4wNTcuNzk5Yy4wMjQuMzQyLS4yMy42NC0uNTkuNjk0bC0uMzA0LjA0NGEuNy43IDAgMCAxLS4yMzYtLjAwM2wtLjU4OS0uMS0uMjk5LjExYS43My43MyAwIDAgMS0uNzU1LS4xNTJsLS4zNDYtLjMzLS45MjMuMDc4LS4wMzkuMDE3Yy4xNS4xMy4yMy4zMTYuMjIyLjUwNWwuMDEuMDAzIDEuNjI2LjYwOHEuMTg1LjA3Mi4zLjIxNWwuMjA3LjI1N2EuNzUuNzUgMCAwIDEgLjM5Ni4wNzlsLjM5OC4yMDRjLjE2LjA4My4yOC4yMjMuMzMzLjM4NWwuNTUzLjI4NS0uNTk1LjE5N2EuNy43IDAgMCAxLS4zMTYuMjk5bC4zNS40MzYuNjE2LjI5NmEuNjQ1LjY0NSAwIDAgMSAuMzYyLjczNWwtLjAwNy4wMjguMTM0LjIzNmMuMTA3LjE5LjEwNy40MTEuMDEuNTk2bC4wNTcuMDQ0YS42Ny42NyAwIDAgMSAuMjE4LjMwNGwuMzg3IDEuMWEuNjIuNjIgMCAwIDEtLjAzNi40OTVsLjI2Mi43NDYtLjcyMi0uMzk4YS43LjcgMCAwIDEtLjI3Mi4wMTIuNi42IDAgMCAxLS4wODUuMTc3bC0uMzA1LjQ1MS0uMjYgMS4zMzVhLjY0LjY0IDAgMCAxLS4xNS4zMDFsLS4wNzUuMDg3YTEgMSAwIDAgMSAuMDQyLjA2M2wuMTIuMTk3LjYuMjQyYy4wOTMuMDQuMTY4LjA5LjIzMy4xNTRsLjA5Ny4wOTZoLjE5YS43NC43NCAwIDAgMSAuMzUzLjA5bC4yNTEuMTM5LjM4NC4wNDhhLjcuNyAwIDAgMSAuMTM2LS4xMzkuNzQuNzQgMCAwIDEgLjU4LS4xMzRsLjk4MS4yMDkuNjkuMjYzYS43LjcgMCAwIDEgLjM3LjMyOGwuMDMzLS4wMDdhMSAxIDAgMCAxIC4xNC0uMDEzbC4xMDMuMDA4LjUwNi4wODQtLjA1LS4xNjRhLjYyLjYyIDAgMCAxIC4wNDgtLjQ3NWwuMzk3LS43NTNhLjY3LjY3IDAgMCAxIC4yNjgtLjI3M2wxLjE2NS0uNjU4YS43My43MyAwIDAgMSAuNjcyLS4wMjYuNzQuNzQgMCAwIDEgLjU0LS4wNmwuMjU1LjA3NC4wMzQuMDFhLjc0Ljc0IDAgMCAxIC42NzQuMDc3bC4zOC4yNThjLjEuMDY5LjE4LjE2LjIzLjI2NmwuNTI4LjExNS4yNjItLjAzNS4wNTItLjAxOGEuNy43IDAgMCAxIC4xMDQtLjE3bC4yMjgtLjI2OGEuNy43IDAgMCAxIC4xNy0uMTQzbC40NDEtLjI2NS4xNzUtLjEzOC0uNTcyLS4zNzRhLjY1LjY1IDAgMCAxLS4zLS41MzFsLS4wMS0uNjM3LS4yMzgtLjIxNGEuNjQuNjQgMCAwIDEtLjIxNy0uNDc1di0uMjMyYzAtLjI2NS4xNjctLjUwMi40MjctLjYwNWwtLjA5My0uMTA1YS42NC42NCAwIDAgMS0uMTYyLS4zODVsLS4wMi0uMjlhMSAxIDAgMCAxIC4wMDEtLjA4Mi43NDMuNzQzIDAgMCAxLS44MjQtLjAxM2wtLjIwMS0uMTQ0YS42NC42NCAwIDAgMS0uMjMtLjc2bC4xMDctLjI1OS4wMy0uMzM0YS42My42MyAwIDAgMSAuMTEtLjMwM2wuNDQ3LS42NC40NjEtLjU2MWEuNi42IDAgMCAxIC4wMS0uMjMyLjY2LjY2IDAgMCAxIC4zNi0uNDRsLjIzOC0uMTE2YS43LjcgMCAwIDEgLjI1Mi0uMDcxbC0uMDEyLS42ODlhLjYuNiAwIDAgMSAuMDQtLjIzbC4yMjctLjYxNS4wMi0uMjE0YS42LjYgMCAwIDEgLjAzOS0uMTY0IDEgMSAwIDAgMS0uMDgzLS4wMzZsLS4xNzktLjA5LS41MjYuMDVhLjczLjczIDAgMCAxLS42MTQtLjIzOWwtLjM0OC0uNC0uMTA2LjA0MWEuNzQuNzQgMCAwIDEtLjU0My0uMDA1bC0uMTktLjA3Ny0uMDUzLjAwNGEuNzUuNzUgMCAwIDEtLjQ0My0uMTA2bC0uODYtLjU0OGEuNy43IDAgMCAxLS4xMzYtLjExMy43LjcgMCAwIDEtLjItLjAwOGwtLjQ2MS0uMDhhLjY4LjY4IDAgMCAxLS41Ny0uNThsLS4wMTEtLjEwNWEuNy43IDAgMCAxLS40NzUtLjMxNGwtLjAxLS4wMTZhLjcuNyAwIDAgMS0uMjk2LS4xNDZsLS4xNzItLjE0M2EuNy43IDAgMCAxLS4xMTMtLjEyLjcuNyAwIDAgMS0uNTItLjI4NHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi42NDggMS45ODZhLjczLjczIDAgMCAxIC43Ny4yODRsLjIxNy4zMWguMTEzYy4zMTcgMCAuNTkyLjIuNjg0LjQ5OWwuMDM5LjEyNmEuNzIuNzIgMCAwIDEgLjQxLjI1My43LjcgMCAwIDEgLjE4Ny4wNjNsLjI4Ny4xNGEuNy43IDAgMCAxIC4yOTQuMjY3bC4yMzYtLjA1NWEuNzIuNzIgMCAwIDEgLjYwOS4xMy43LjcgMCAwIDEgLjI3My41NTJ2LjI1bC40ODQuMzIzYS43LjcgMCAwIDEgLjMyOC4wNThsLjA3OC4wMzMuMDk5LS4wNGEuNzQuNzQgMCAwIDEgLjQ3NS0uMDIzbC4zODkuMTE0Yy4xMzYuMDQuMjU2LjExOC4zNDYuMjI2bC4yOC4zMzYuMzc0LS4wMzdhLjc0Ljc0IDAgMCAxIC40MS4wNzlsLjIyNi4xMi4zMzEuMDA2Yy4xMzMuMDAzLjI2LjA0LjM3MS4xMWwuMjg5LjE3OWMuMzEyLjE5Ni40MjIuNi4yNS45MmwtLjMxMi41NzgtLjAxNi4xNzRhLjcuNyAwIDAgMS0uMDM0LjE2bC0uMjIyLjYzLjAxNyAxLjA0NWEuNjkuNjkgMCAwIDEtLjI1Ni41NDlsLS40MDcuMzMzYS43LjcgMCAwIDEtLjI0My4xM2wtLjcuODg1Yy4yNC4wNi40NC4yMzguNTEyLjQ4MmwuMDc3LjI1Ni4wOTcuMTIuMjI4LjMzNGEuNjkuNjkgMCAwIDEtLjAxNS44MDFsLjI3LjMxN2EuNy43IDAgMCAxIC4xNjUuNDgzbC0uMDIuMzY0YS43LjcgMCAwIDEtLjI4LjUybC4wNS4wNDhhLjY5LjY5IDAgMCAxIC4wNjEuOTVsLjA4NS4wNTguMDktLjAzMWEuNzIuNzIgMCAwIDEgLjg4OC4zNjVsLjExNy4yNWEuNjkuNjkgMCAwIDEtLjA3OS43MTJsLS4wMzkuMDU1YS42OS42OSAwIDAgMS0uMjQ4LjY0MmwtLjcyLjU4Ny0uMzEyLjE5NmEuNy43IDAgMCAxLS4wNjMuMzE3LjcuNyAwIDAgMS0uNDAyLjM2OWwtLjYzMS4yMjhhMSAxIDAgMCAxLS4xNDkuMDM3bC0uNDcyLjA2NmEuNy43IDAgMCAxLS4yNzQtLjAxM2wtLjk3LS4yMjItLjY0NS0uMTg1LS4wNS0uMDE2YS43My43MyAwIDAgMS0uNDI5LS4wNzhsLS4yMjItLjEyYS43My43MyAwIDAgMS0uNTI4LS4wOTZsLS42MDguMzYtLjE5Mi4zOC4xODcuNjQzYS43LjcgMCAwIDEtLjA2OC41NC43MS43MSAwIDAgMS0uNDMzLjMyOGwtLjc2OC4yYS43LjcgMCAwIDEtLjE4NC4wMjRsLS4xMDItLjAwOC0uNjQ0LS4xMTItLjI5Mi4wNThhLjc0Ljc0IDAgMCAxLS40NS0uMDUzbC0uMzQ0LS4xNjRhLjcuNyAwIDAgMS0uMzcyLS40MjhsLS4yODItLjExMy0uMTE4LS4wMjVhLjcyLjcyIDAgMCAxLS42NTIuMjVsLTEuMjE1LS4xNjFhLjcuNyAwIDAgMS0uMjcyLS4wOTNsLS4yMDUtLjEyaC0uMzFhLjcyLjcyIDAgMCAxLS41Mi0uMjJsLS4yMDgtLjIxNy0uNjk2LS4yOTRhLjcuNyAwIDAgMS0uMzQtLjI5OGwtLjE0MS0uMjQ1LS4yOTgtLjE2MWEuNjkzLjY5MyAwIDAgMS0uMjA4LTEuMDU5bC40NjQtLjU1My4yNTctMS4zOGExIDEgMCAwIDEgLjAyNC0uMDkyLjcuNyAwIDAgMS0uMDQtLjMyOWwuMjEzLTEuODIyYTEgMSAwIDAgMSAuMDE5LS4xLjY5LjY5IDAgMCAxIC4xMzgtLjg1Ny43LjcgMCAwIDEtLjA3NS0uMjE2bC0uMzI4LS4xNjVhLjcuNyAwIDAgMS0uMjQ3LS4yMDZsLS41NTktLjcyOGEuNy43IDAgMCAxLS4xMjYtLjI2NWwtLjE2NS0uNzM3LS4wMDItLjAwOC0uMDc0LS4wNWEuNy43IDAgMCAxLS4xNjItLjE1MWwtLjI0LS4zMTMtMS4zNDMtLjUyNGgtLjM4NmEuNzIuNzIgMCAwIDEtLjYxNy0uMzQ3bC0uMTY0LS4yNzVhLjcuNyAwIDAgMS0uMDgzLS40OTUuNy43IDAgMCAxLS4yNzYtLjM1TDEuNzU0IDguMWEuNjk1LjY5NSAwIDAgMSAuMzczLS44NjVsMS4wMTctLjQ2NmEuNy43IDAgMCAxIC4yNDEtLjA2M2wxLjQwMS0uMTI0YS43NC43NCAwIDAgMSAuNTc0LjIwN2wuMjU5LjI1OS4wNTQtLjAyMWEuNzMuNzMgMCAwIDEgLjM5NC0uMDM2bC4xODcuMDMzLS4yNTMtLjU5Ni0uMTktLjc1N2EuNy43IDAgMCAxIC4xMi0uNTgzLjcxLjcxIDAgMCAxIC41MzUtLjI4NGwuNTc0LS4wMjlhLjcuNyAwIDAgMSAuNTU4LjIyMmwuNDkzLjUxOS42MzkuMTIzLjAwNy0uMDc5YS43LjcgMCAwIDEgLjQ4Mi0uNjA1bDEuMjEzLS40MDkuMzI1LS4yOTItLjA0Ni0uNzFhLjcuNyAwIDAgMSAuMDYtLjMzMWwuMjU0LS41NDVhLjcuNyAwIDAgMSAuNDctLjM4OHptLS4xODggMS45NzgtLjMzLjA4MS0uMDM2LjA3My4wNTUuODE2Yy4wMTMuMi0uMDcuMzkyLS4yMjcuNTI3bC0uNjczLjU3OGEuNy43IDAgMCAxLS4yNDkuMTM4bC0uNzM3LjIzOC4yMjguMTU3LS4yODMuMTM1YS42OC42OCAwIDAgMS0uMzQ3LjM3OGwtLjQ4My4yM2EuNzYuNzYgMCAwIDEtLjQ1LjA2bC0xLjE5LS4yMnYuMDA2bC4wNTcuNzk5Yy4wMjQuMzQyLS4yMy42NC0uNTkuNjk0bC0uMzA0LjA0NGEuNy43IDAgMCAxLS4yMzYtLjAwM2wtLjU4OS0uMS0uMjk5LjExYS43My43MyAwIDAgMS0uNzU1LS4xNTJsLS4zNDYtLjMzLS45MjMuMDc4LS4wMzkuMDE3Yy4xNS4xMy4yMy4zMTYuMjIyLjUwNWwuMDEuMDAzIDEuNjI2LjYwOHEuMTg1LjA3Mi4zLjIxNWwuMjA3LjI1N2EuNzUuNzUgMCAwIDEgLjM5Ni4wNzlsLjM5OC4yMDRjLjE2LjA4My4yOC4yMjMuMzMzLjM4NWwuNTUzLjI4NS0uNTk1LjE5N2EuNy43IDAgMCAxLS4zMTYuMjk5bC4zNS40MzYuNjE2LjI5NmEuNjQ1LjY0NSAwIDAgMSAuMzYyLjczNWwtLjAwNy4wMjguMTM0LjIzNmMuMTA3LjE5LjEwNy40MTEuMDEuNTk2bC4wNTcuMDQ0YS42Ny42NyAwIDAgMSAuMjE4LjMwNGwuMzg3IDEuMWEuNjIuNjIgMCAwIDEtLjAzNi40OTVsLjI2Mi43NDYtLjcyMi0uMzk4YS43LjcgMCAwIDEtLjI3Mi4wMTIuNi42IDAgMCAxLS4wODUuMTc3bC0uMzA1LjQ1MS0uMjYgMS4zMzVhLjY0LjY0IDAgMCAxLS4xNS4zMDFsLS4wNzUuMDg3YTEgMSAwIDAgMSAuMDQyLjA2M2wuMTIuMTk3LjYuMjQyYy4wOTMuMDQuMTY4LjA5LjIzMy4xNTRsLjA5Ny4wOTZoLjE5YS43NC43NCAwIDAgMSAuMzUzLjA5bC4yNTEuMTM5LjM4NC4wNDhhLjcuNyAwIDAgMSAuMTM2LS4xMzkuNzQuNzQgMCAwIDEgLjU4LS4xMzRsLjk4MS4yMDkuNjkuMjYzYS43LjcgMCAwIDEgLjM3LjMyOGwuMDMzLS4wMDdhMSAxIDAgMCAxIC4xNC0uMDEzbC4xMDMuMDA4LjUwNi4wODQtLjA1LS4xNjRhLjYyLjYyIDAgMCAxIC4wNDgtLjQ3NWwuMzk3LS43NTNhLjY3LjY3IDAgMCAxIC4yNjgtLjI3M2wxLjE2NS0uNjU4YS43My43MyAwIDAgMSAuNjcyLS4wMjYuNzQuNzQgMCAwIDEgLjU0LS4wNmwuMjU1LjA3NC4wMzQuMDFhLjc0Ljc0IDAgMCAxIC42NzQuMDc3bC4zOC4yNThjLjEuMDY5LjE4LjE2LjIzLjI2NmwuNTI4LjExNS4yNjItLjAzNS4wNTItLjAxOGEuNy43IDAgMCAxIC4xMDQtLjE3bC4yMjgtLjI2OGEuNy43IDAgMCAxIC4xNy0uMTQzbC40NDEtLjI2NS4xNzUtLjEzOC0uNTcyLS4zNzRhLjY1LjY1IDAgMCAxLS4zLS41MzFsLS4wMS0uNjM3LS4yMzgtLjIxNGEuNjQuNjQgMCAwIDEtLjIxNy0uNDc1di0uMjMyYzAtLjI2NS4xNjctLjUwMi40MjctLjYwNWwtLjA5My0uMTA1YS42NC42NCAwIDAgMS0uMTYyLS4zODVsLS4wMi0uMjlhMSAxIDAgMCAxIC4wMDEtLjA4Mi43NDMuNzQzIDAgMCAxLS44MjQtLjAxM2wtLjIwMS0uMTQ0YS42NC42NCAwIDAgMS0uMjMtLjc2bC4xMDctLjI1OS4wMy0uMzM0YS42My42MyAwIDAgMSAuMTEtLjMwM2wuNDQ3LS42NC40NjEtLjU2MWEuNi42IDAgMCAxIC4wMS0uMjMyLjY2LjY2IDAgMCAxIC4zNi0uNDRsLjIzOC0uMTE2YS43LjcgMCAwIDEgLjI1Mi0uMDcxbC0uMDEyLS42ODlhLjYuNiAwIDAgMSAuMDQtLjIzbC4yMjctLjYxNS4wMi0uMjE0YS42LjYgMCAwIDEgLjAzOS0uMTY0IDEgMSAwIDAgMS0uMDgzLS4wMzZsLS4xNzktLjA5LS41MjYuMDVhLjczLjczIDAgMCAxLS42MTQtLjIzOWwtLjM0OC0uNC0uMTA2LjA0MWEuNzQuNzQgMCAwIDEtLjU0My0uMDA1bC0uMTktLjA3Ny0uMDUzLjAwNGEuNzUuNzUgMCAwIDEtLjQ0My0uMTA2bC0uODYtLjU0OGEuNy43IDAgMCAxLS4xMzYtLjExMy43LjcgMCAwIDEtLjItLjAwOGwtLjQ2MS0uMDhhLjY4LjY4IDAgMCAxLS41Ny0uNThsLS4wMTEtLjEwNWEuNy43IDAgMCAxLS40NzUtLjMxNGwtLjAxLS4wMTZhLjcuNyAwIDAgMS0uMjk2LS4xNDZsLS4xNzItLjE0M2EuNy43IDAgMCAxLS4xMTMtLjEyLjcuNyAwIDAgMS0uNTItLjI4NHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-header-territories{height:26px;position:absolute;width:26px;z-index:2}.gpf-btn-icon-header-territories{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNOC42NjcgMTUuMzMzIDYgMTIuNjY3aDUuMzMzek04LjY2NyAybDIuNjY2IDIuNjY3SDZ6bTAgOGExLjMzMyAxLjMzMyAwIDEgMSAwLTIuNjY3IDEuMzMzIDEuMzMzIDAgMCAxIDAgMi42NjdNMiA4LjY2NyA0LjY2NyA2djUuMzMzem0xMy4zMzMgMC0yLjY2NiAyLjY2NlY2eiIvPjwvc3ZnPg==);background-position:50%;background-repeat:no-repeat;background-size:auto auto}.gpf-panel__body_territories{max-height:300px;overflow:auto}.gpf-panel__title_territories{color:#101092;font-size:1rem;font-weight:400;margin:0;padding:12px 15px;position:relative;right:-16px}.gpf-panel__header_territories{align-content:center;align-items:center;background:#e3e3fd;display:flex;flex-direction:row;height:48px}#GPterritoriesPanelClose{right:0;top:0}.gpf-tile{height:150px;width:150px}.tiles-reduce div.fr-tile{height:unset;padding:unset;width:unset}.fr-tile:hover{background-color:var(--background-contrast-grey)}.fr-tile__title:before{background-image:unset}.gpf-tile__header{align-items:center;display:flex;flex-direction:column}.territories-entries{display:grid}.tiles-direction.tiles-0{grid-template-columns:repeat(3,1fr);max-height:none!important}.tiles-direction.tiles-1{grid-template-columns:repeat(1,1fr)}.tiles-direction.tiles-2{grid-template-columns:repeat(2,1fr)}.tiles-direction.tiles-3{grid-template-columns:repeat(3,1fr)}.tiles-direction.tiles-4{grid-template-columns:repeat(4,1fr)}div.fr-tile div.fr-tile__header div.fr-tile__icon,div.fr-tile div.fr-tile__header div.fr-tile__thumbnail{display:block}.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__icon,.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__thumbnail{display:none}.fr-tile__icon{background-position:50%;background-repeat:no-repeat;background-size:auto auto;height:50px;width:50px}.tiles-icon div.fr-tile div.fr-tile__header div.fr-tile__thumbnail,.tiles-thumbnail div.fr-tile div.fr-tile__header div.fr-tile__icon{display:none}@media (max-width:576px){.tiles-direction.tiles-4{grid-template-columns:repeat(3,1fr)}}@media (max-width:382px){.tiles-direction.tiles-0,.tiles-direction.tiles-3,.tiles-direction.tiles-4{grid-template-columns:repeat(2,1fr)}}button[id^=GPshowControlListPicto-][aria-pressed=true]+dialog{width:370px}div[id^=GPcontrolList-] .GPshowOpen>span{font-size:32px;position:absolute;transform:translate(-5px,-2px)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content{display:flex;flex-direction:column;overflow:auto;padding:0 1.5rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content:not(:has(~.gpf-panel__footer)){padding-bottom:2rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div{align-items:center;column-gap:1rem;display:flex;flex-direction:row;padding:.5rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div:hover,dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div:hover>button{background-color:var(--hover)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button{height:40px;width:40px}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button:after{background-color:var(--text-default-grey)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>div{display:flex;flex-direction:column}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>div>span:nth-child(2){color:var(--text-mention-grey);font-size:.75rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__footer{background-color:var(--background-lifted-grey);padding:1rem 2rem 2rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__footer>button{justify-content:center;width:100%} /*# sourceMappingURL=Dsfr.css.map*/ \ No newline at end of file diff --git a/dist/bundle/Dsfr.css.map b/dist/bundle/Dsfr.css.map index 362412b1..c3f37df7 100644 --- a/dist/bundle/Dsfr.css.map +++ b/dist/bundle/Dsfr.css.map @@ -1 +1 @@ -{"version":3,"file":"Dsfr.css","mappings":"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","sources":["webpack://Gp/./src/packages/CSS/DSFRgeneralWidget.css","webpack://Gp/./src/packages/CSS/Controls/Drawing/DSFRdrawingStyle.css","webpack://Gp/./src/packages/CSS/Controls/ElevationPath/DSFRelevationPathStyle.css","webpack://Gp/./src/packages/CSS/Controls/GetFeatureInfo/DSFRgetFeatureInfoStyle.css","webpack://Gp/./src/packages/CSS/Controls/Isochron/DSFRisochronStyle.css","webpack://Gp/./src/packages/CSS/Controls/LayerImport/DSFRlayerImportStyle.css","webpack://Gp/./src/packages/CSS/Controls/LayerSwitcher/DSFRlayerSwitcherStyle.css","webpack://Gp/./src/packages/CSS/Controls/LocationSelector/DSFRlocationStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/DSFRmeasureToolTipStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/DSFRmeasureAreaStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/DSFRmeasureLengthStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/DSFRmeasureAzimuthStyle.css","webpack://Gp/./src/packages/CSS/Controls/MousePosition/DSFRmousePositionStyle.css","webpack://Gp/./src/packages/CSS/Controls/ReverseGeocoding/DSFRreverseGeocodingStyle.css","webpack://Gp/./src/packages/CSS/Controls/Route/DSFRrouteStyle.css","webpack://Gp/./src/packages/CSS/Controls/SearchEngine/DSFRsearchEngineStyle.css","webpack://Gp/./src/packages/CSS/Controls/ToolBoxMeasure/DSFRtoolBoxMeasureStyle.css","webpack://Gp/./src/packages/CSS/Controls/Zoom/DSFRzoomStyle.css","webpack://Gp/./src/packages/CSS/Controls/FullScreen/DSFRfullScreenStyle.css","webpack://Gp/./src/packages/CSS/Controls/OverviewMap/DSFRoverviewMapStyle.css","webpack://Gp/./src/packages/CSS/Controls/Legends/DSFRlegendsStyle.css","webpack://Gp/./src/packages/CSS/Controls/Catalog/DSFRcatalogStyle.css","webpack://Gp/./src/packages/CSS/Controls/Territories/DSFRterritoriesStyle.css","webpack://Gp/./src/packages/CSS/Controls/ControlList/DSFRcontrolListStyle.css"],"sourcesContent":["/*\n * Liste des surcharges du mode DSFR\n */\n:root {\n --size-per-row: 44px;\n}\n\n.gpf-widget {\n position: absolute;\n pointer-events: auto;\n /* display: flex;*/\n padding: 2px;\n}\n\n.gpf-widget-button {\n width: 40px;\n}\n\n.gpf-panel {\n position: relative;\n background-color: unset;\n width: max-content;\n max-height: 100%;\n}\n\n.gpf-panel form {\n overflow: auto;\n padding: 0 2rem 2rem 2rem;\n}\n\n.gpf-panel--hidden {\n display: none;\n}\n\n.gpf-panel__body {\n overflow: unset;\n position: relative;\n max-height: 100% !important;\n flex: 1 1 auto;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.gpf-panel__header {}\n\n.gpf-panel__title {\n text-align: left;\n}\n\n.gpf-panel__footer {\n background-color: transparent;\n padding: 0;\n margin-top: 0;\n justify-content: center;\n}\n\n.gpf-panel__footer > input[type=\"submit\"] {\n width: 100%;\n}\n\n.gpf-panel__content {\n padding: unset;\n margin-bottom: unset;\n}\n\n.gpf-panel--close,\n.gpf-panel--reduce,\n.gpf-panel--info {\n position: relative;\n cursor: pointer;\n}\n\n/********/\n/* flex */\n/********/\n\n.gpf-flex {\n display: flex;\n align-items: center;\n flex-direction: row;\n justify-content: space-evenly;\n}\n\n.gpf-flex-column {\n display: flex;\n flex-direction: column;\n justify-content: space-evenly;\n}\n\n.gpf-flex-padding {\n padding: 5px;\n}\n\n.gpf-hidden {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\n.gpf-visible {\n display: block;\n visibility: visible;\n opacity: 100%;\n}\n\n/***********/\n/* waiting */\n/***********/\n\n.gpf-waiting {\n position: absolute;\n height: inherit;\n top: 80px;\n bottom: 0;\n left: 0;\n right: 0;\n border-radius: 4px;\n background-color: rgba(255, 255, 255, 0.9);\n font-size: 1.5em;\n font-weight: bold;\n overflow: hidden;\n}\n\n.gpf-waiting--hidden {\n display: none;\n}\n\n.gpf-waiting--visible {\n display: -webkit-flex;\n display: -ms-flexbox;\n display: -webkit-box;\n display: flex;\n z-index: 4000;\n}\n\n.gpf-waiting_info {\n margin: auto;\n}\n\n/***********/\n/* button */\n/***********/\n\n.gpf-btn-icon.gpf-btn--secondary,\n.gpf-btn-icon.gpf-btn--tertiary {\n background-color: var(--background-default-grey);\n}\n\n.gpf-widget > .gpf-btn-icon[aria-pressed=\"true\"] {\n background-color: var(--hover-tint);\n position: relative;\n}\n\n.gpf-widget:has(> .gpf-btn-icon[aria-pressed=\"true\"])::after {\n background-color: var(--background-action-high-blue-france);\n content: \"\";\n width: 3px;\n height: 40px;\n left: 44px;\n position: absolute;\n transform: translateY(-40px);\n}\n\n@supports(-moz-appearance:none) {\n .gpf-widget:has(.gpf-btn-icon[aria-pressed=\"true\"])::after {\n transform: unset;\n }\n}\n\n.gpf-widget > .gpf-btn-icon[aria-label]:hover::before {\n content: attr(aria-label);\n position: absolute;\n top: 0;\n color: var(--text-default-grey);\n font-size: .75rem;\n width: fit-content;\n white-space: nowrap;\n padding: .5rem .5rem 0.5rem 1.25rem;\n background-size: .375rem .5rem,.375rem .5rem,1px, 100%,calc(100% - 0.5rem) 100%;\n background-repeat: no-repeat;\n background-position: 0.125rem 50%, 0% 50%,0.375rem 100%,0.375rem 100%;\n filter: drop-shadow(0 2px 6px rgba(0,0,18,.16));\n filter: drop-shadow(var(--overlap-shadow));\n background-image: conic-gradient(from 56.31deg at 0% 50%,transparent 0deg,var(--background-overlap-grey) 0deg,var(--background-overlap-grey) 67.38deg,transparent 67.38deg),conic-gradient(from 56.31deg at 0% 50%,transparent 0deg,var(--border-default-grey) 0deg,var(--border-default-grey) 67.38deg,transparent 67.38deg),linear-gradient(90deg,var(--border-default-grey),var(--border-default-grey)),linear-gradient(90deg,var(--background-overlap-grey),var(--background-overlap-grey));\n}\n\n.position-container-top-left .gpf-widget > .gpf-btn-icon[aria-label]:hover::before,\n.position-container-bottom-left .gpf-widget > .gpf-btn-icon[aria-label]:hover::before {\n transform: translateX(24px);\n}\n\n.position-container-top-right .gpf-widget > .gpf-btn-icon[aria-label]:hover::before,\n.position-container-bottom-right .gpf-widget > .gpf-btn-icon[aria-label]:hover::before {\n transform: translateX(calc(-100% - 16px));\n padding: .5rem 1.25rem .5rem .5rem;\n background-size: .375rem .5rem, .375rem .5rem, 1px 100%, 100%;\n background-position: calc(100% - 0.125rem) 50%, 100% 50%, calc(100% - 0.375rem) 0, calc(100% - 0.375rem) 0;\n background-image: conic-gradient(from 236.31deg at 100% 50%, transparent 0deg, var(--background-overlap-grey) 0deg, var(--background-overlap-grey) 67.38deg, transparent 67.38deg), conic-gradient(from 236.31deg at 100% 50%, transparent 0deg, var(--border-default-grey) 0deg, var(--border-default-grey) 67.38deg, transparent 67.38deg), linear-gradient(90deg, var(--border-default-grey), var(--border-default-grey)), linear-gradient(90deg, var(--background-overlap-grey), var(--background-overlap-grey));\n}\n\n\n.gpf-btn--secondary,\n.gpf-btn--tertiary {\n position: relative;\n}\n\n.gpf-btn--tertiary::after,\n.gpf-btn--secondary::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n background-color: var(--text-action-high-blue-france);\n -webkit-mask: linear-gradient(#0000, #0000);\n mask: linear-gradient(#0000, #0000);\n}\n\n.gpf-btn--tertiary:disabled:after,\n.gpf-btn--secondary:disabled::after {\n background-color: var(--text-disabled-grey);\n}\n\n.position-container-top-left .gpf-button-no-gutter,\n.position-container-top-right .gpf-button-no-gutter {\n margin-bottom: -5px;\n}\n\n.position-container-bottom-left .gpf-button-no-gutter,\n.position-container-bottom-right .gpf-button-no-gutter {\n margin-top: -5px;\n}\n\n.gpf-btn--hidden {}\n\n.gpf-btn-icon-return {}\n\n.gpf-btn-icon-submit {}\n\n.gpf-btn-icon-reverse {}\n\n/* positionnement absolu en haut à droite du bouton \"fermer\" */\n.gpf-btn-icon-close {\n float: right;\n position: absolute;\n top: 0.5rem;\n right: 0.5rem;\n}\n\n.gpf-btn-icon-return {\n float: left;\n position: absolute;\n top: 0.5rem;\n left: 0.5rem;\n}\n\n.gpf-btn-icon-return::after {\n /* INFO : utiliser l'icone DSFR \"fr-icon-arrow-go-back-fill fr-btn--sm fr-btn--icon\" */\n -webkit-mask: url(\"img/GPreturnDSFR.png\") center no-repeat;\n mask: url(\"img/GPreturnDSFR.png\") center no-repeat;\n}\n\n.gpf-btn-icon {\n width: inherit;\n caret-color: transparent;\n}\n\n.gpf-btn-icon-reset::after {\n -webkit-mask:\n linear-gradient(#fff 0 0) top /100% 1px,\n linear-gradient(#fff 0 0) bottom/100% 1px,\n linear-gradient(#fff 0 0) left /1px 100%,\n linear-gradient(#fff 0 0) right /1px 100%,\n url(\"img/GPclose.png\") -25px center;\n mask:\n linear-gradient(#fff 0 0) top /100% 1px,\n linear-gradient(#fff 0 0) bottom/100% 1px,\n linear-gradient(#fff 0 0) left /1px 100%,\n linear-gradient(#fff 0 0) right /1px 100%,\n url(\"img/GPclose.png\") -25px center;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n background-color: var(--text-action-high-blue-france);\n}\n\n.gpf-btn-icon-info {\n width: 40px;\n height: 40px;\n}\n\n/*************/\n/* elements */\n/*************/\n\n.gpf-label {}\n\n.gpf-select {}\n\n.gpf-input {\n padding-left: 5px;\n}\n\n.gpf-radio-group {}\n\n.gpf-radio-btn-group {\n display: flex;\n gap: 1em;\n}\n\n.gpf-upload {}\n\n/*************/\n/* panel */\n/*************/\n\n.gpf-panel__list,\n.gpf-panel__advancedlist {\n z-index: 2;\n width: inherit;\n /* display: none; */\n position: absolute;\n max-height: 140px;\n background-color: #FFF;\n border: 1px solid #999;\n overflow-y: hidden;\n}\n\n.gpf-panel__advancedlist {\n width: calc(100% - 28px);\n border-top: none;\n font-size: 0.9em;\n}\n\n.gpf-panel__items:hover {\n color: #000000;\n background-color: #CEDBEF\n}\n\n.gpf-panel__items {\n width: 100%;\n height: 28px;\n line-height: 16px;\n padding: 6px 10px;\n color: #5E5E5E;\n font-size: 1.0em;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n}\n\n.gpf-panel::after {\n height: unset;\n flex: 0;\n}\n\n.gpf-panel::before {\n height: unset;\n flex: 0;\n}\n\n/***********/\n/* position*/\n/***********/\n:root {\n --size-per-row: 50px;\n}\n\n.position-container-top-left,\n.position-container-top-right,\n.position-container-bottom-left,\n.position-container-bottom-right {\n position: absolute;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n /* crée un décalage sur le searchEngine */\n /* align-items: center; */\n /* + 5px pour l'indicateur \"bouton actif\" */\n width: calc(var(--size-per-row) + 4px);\n min-height: var(--size-per-row);\n /* padding: 5px; */\n height: calc(100% - 8px);\n}\n\n.position-container-top-left,\n.position-container-top-right {\n top: 4px;\n}\n\n.position-container-top-left {\n float: left;\n left: 8px;\n}\n\n.position-container-top-right {\n float: right;\n right: 4px;\n}\n\n.position-container-bottom-left,\n.position-container-bottom-right {\n bottom: 4px;\n justify-content: flex-end;\n}\n\n.position-container-bottom-right {\n float: right;\n right: 4px;\n}\n\n.position-container-bottom-left {\n float: left;\n left: 8px;\n}\n\n/**********************/\n/* Feature info popup */\n/**********************/\n\n.gp-feature-info-div {\n bottom: 17px;\n position: relative;\n max-width: calc(100vw - 80px);\n padding: 10px;\n /* border-radius: 10px; */\n font-size: 0.75em;\n /* font-family: \"Open Sans\", sans-serif;\n color: #002A50; */\n background-color: var(--background-default-grey);\n box-shadow: 0 0 5px var(--text-default-grey);\n}\n\n.gp-feature-info-div::before {\n content: \"\";\n position: absolute;\n border-top: 15px solid var(--background-default-grey);\n border-right: 14px solid transparent;\n border-left: 14px solid transparent;\n bottom: -15px;\n margin-left: -14px;\n left: 50%;\n}\n\n.gp-feature-info-div .closer {\n position: absolute;\n display: block;\n width: 30px;\n height: 30px;\n top: 0;\n right: 0;\n border: none;\n cursor: pointer;\n border-top-right-radius: 10px;\n border-bottom-right-radius: 10px;\n background-color: var(--background-default-grey);\n}\n\n.gp-feature-info-div .closer::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n background-color: var(--text-action-high-blue-france);\n -webkit-mask: url(\"img/close-blue.svg\") center no-repeat;\n mask: url(\"img/close-blue.svg\") center no-repeat;\n -webkit-mask-size: 14px 14px;\n mask-size: 14px 14px;\n}\n\n.gp-features-content-div {\n max-width: 420px;\n min-width: 260px;\n max-height: 340px;\n overflow: auto;\n}\n\n.gp-features-content-div h5,\n.gp-features-content-div h6,\n.gp-features-content-div p,\n.gp-features-content-div ul {\n margin: 0;\n}\n\n.gp-features-content-div ul {\n padding: 0;\n list-style-type: none;\n}\n\n.geoportail-popup-content h5,\n.geoportail-popup-content h6,\n.geoportail-popup-content p,\n.gp-att-name-div,\n.gp-att-description-div,\n.gp-att-others-div {\n padding: 0 10px;\n}\n\n.geoportail-popup-content h5:not(:last-child),\n.geoportail-popup-content h6:not(:last-child),\n.geoportail-popup-content p:not(:last-child),\n.gp-att-description-div:not(:last-child),\n.gp-att-others-div:not(:last-child) {\n margin-bottom: 15px;\n}\n\n.geoportail-popup-content h5:last-child,\n.geoportail-popup-content h6:last-child,\n.geoportail-popup-content p:last-child,\n.gp-att-description-div:last-child,\n.gp-att-others-div:last-child,\n.gp-att-name-div {\n margin-bottom: 10px;\n}\n\n.geoportail-popup-content h5:first-child,\n.geoportail-popup-content h6:first-child,\n.geoportail-popup-content p:first-child,\n.gp-att-name-div:first-child,\n.gp-att-description-div:first-child,\n.gp-att-others-div:first-child {\n margin-top: 10px;\n}\n\n.gp-att-name-div,\n.gp-features-content-div h5 {\n padding-right: 35px;\n font-weight: bold;\n font-size: 1.2em;\n text-transform: uppercase;\n color: #0B6BA7;\n}\n\n.gp-features-content-div h6 {\n font-size: 1.1em;\n}\n\n.gp-att-description-div:not(:last-child),\n.gp-att-others-div:not(:last-child) {\n padding-bottom: 10px;\n border-bottom: 1px dotted #666;\n}\n\n/* surcharge css OpenLayers */\n.ol-disabled {\n --idle: transparent;\n --hover: var(--background-disabled-grey-hover);\n --active: var(--background-disabled-grey-active);\n background-color: var(--background-disabled-grey);\n color: var(--text-disabled-grey);\n cursor: not-allowed;\n /* instead of display: none */\n display: block;\n}\n\n.ol-scale-bar, .ol-scale-line {\n z-index: -1;\n}\n\n/* surcharge DSFR pour coller aux règles et au rendu de https://www.systeme-de-design.gouv.fr/composants-et-modeles/composants/accordeon/ */\n/* FIXME: pourquoi on a besoin de faire ça ?? normalement ces règles devraient être importées avec le reste... */\n.fr-collapse {\n --collapse-max-height: none;\n}\n\n.fr-collapse:not(.fr-collapse--expanded):not(.fr-collapsing) {\n --collapse-max-height: 0;\n}\n\n@media (max-width: 576px) {\n .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog {\n width: 100vw !important;\n }\n\n .gpf-mobile-fullscreen form div, .gpf-mobile-fullscreen form p {\n margin: auto;\n text-align: center;\n }\n\n .gpf-mobile-fullscreen .gpf-mobile-form {\n max-height: unset;\n height: 100vh;\n }\n\n .position-container-top-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-bottom-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-top-left .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-bottom-left .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog {\n top: -4px !important;\n left: -8px !important;\n right: unset !important;\n }\n\n .position-container-top-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-bottom-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog {\n right: -4px !important;\n left: unset !important;\n }\n}\n",".gpf-btn-icon-drawing::after {\n -webkit-mask: url(\"img/modifier.svg\") center no-repeat;\n mask: url(\"img/modifier.svg\") center no-repeat;\n}\n\n.gp-label-div,\n.gp-styling-div {\n width: 370px;\n transform: translateY(20px);\n}\n\n.gp-label-div textarea {\n max-width: 100%;\n margin-bottom: 1rem;\n}\n\n.gp-label-div input {\n width: 100%;\n}\n\n.gp-styling-option.fr-range--sm[data-fr-js-range]::before,\n.gp-styling-option.fr-range--sm[data-fr-js-range]::after {\n top: 1.74rem;\n}\n\n.drawing-tool {\n width: 40px;\n}\n\n.drawing-tool-active {\n background-color: var(--hover-tint);\n}\n\n/*\n* Drawing tools\n*/\nbutton[id^=drawing-tool-point-]::after {\n -webkit-mask: url(\"img/dsfr/create-point.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-point.svg\") center no-repeat;\n}\n\n\nbutton[id^=drawing-tool-line-]::after {\n -webkit-mask: url(\"img/dsfr/create-line.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-line.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-polygon-]::after {\n -webkit-mask: url(\"img/dsfr/create-polygon.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-polygon.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-text-]::after {\n -webkit-mask: url(\"img/dsfr/create-label.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-label.svg\") center no-repeat;\n}\n\n/*\n* Editing tools\n*/\nbutton[id^=drawing-tool-edit-]::after {\n -webkit-mask: url(\"img/dsfr/edit-geom.svg\") center no-repeat;\n mask: url(\"img/dsfr/edit-geom.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-display]::after {\n -webkit-mask: url(\"img/dsfr/edit-style.svg\") center no-repeat;\n mask: url(\"img/dsfr/edit-style.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-tooltip]::after {\n -webkit-mask: url(\"img/dsfr/edit-text.svg\") center no-repeat;\n mask: url(\"img/dsfr/edit-text.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-remove]::after {\n -webkit-mask: url(\"img/dsfr/delete.svg\") center no-repeat;\n mask: url(\"img/dsfr/delete.svg\") center no-repeat;\n}\n",".gpf-btn-icon-elevation::after {\n -webkit-mask: url(\"img/altipath.svg\") center no-repeat;\n mask: url(\"img/altipath.svg\") center no-repeat;\n}\n\n[id^=GPelevationPathPanelInfo] {\n position: absolute;\n float: left;\n top: 0;\n left: 0;\n}\n\n/* surcharge de fr-panel pour permettre la saisie sous la fenêtre de résultat */\n[id^=GPelevationPathPanel] {\n height: unset;\n}\n\n[id^=GPelevationPathPanelInfo]::after {\n -webkit-mask: url(\"../../img/GPinfo_secondary.svg\") center no-repeat;\n mask: url(\"../../img/GPinfo_secondary.svg\") center no-repeat;\n}\n\n[id^=GPelevationPathProfil] > #profileElevationByDefault > svg {\n transform: translateY(1rem);\n}\n\n[id^=GPelevationPathProfil] {\n height: 150px;\n width: 300px;\n}\n\n.GPelevationPathProfilWrapper {\n padding: 0 2rem;\n}\n\ndiv[id^=GPelevationPathInformationsContainer] {\n display: grid;\n width: calc(300px + 4rem);\n padding: 0 2rem 1rem 2rem;\n grid-template-columns: 50% 50%;\n}\n\n.GPelevationPathInformations {\n font-size: 13px;\n margin: 0;\n display: flex;\n flex-wrap: wrap;\n gap: 0 0.25rem;\n}\n\n.GPelevationPathInformations > span {\n white-space: nowrap;\n}\n\n/* Mode Mobile */\n\n@media (max-width: 576px) {\n div[id^=GPelevationPathInformationsContainer], #GPelevationPathProfil {\n margin: auto;\n }\n}","/* GET FEATURE INFO */\n.gpf-btn-icon-getfeatureinfo::after {\n -webkit-mask: url(\"img/NoGFI.svg\") center no-repeat;\n mask: url(\"img/NoGFI.svg\") center no-repeat;\n}\n\nbutton[id^=\"GPgetFeatureInfoPicto-\"][aria-pressed=\"true\"]::after {\n -webkit-mask: url(\"img/GFI.svg\") center no-repeat;\n mask: url(\"img/GFI.svg\") center no-repeat;\n}",".gpf-btn-icon-isocurve::after {\n -webkit-mask: url(\"img/isochrone.svg\") center no-repeat;\n mask: url(\"img/isochrone.svg\") center no-repeat;\n}\n\n.gpf-flex-isocurve {\n justify-content: unset;\n}\n\n.gpf-btn-icon-isocurve-reset {\n background-position: -29px center;\n}\n\n[id^=GPisochronPanel-] p.gpf-label {\n margin-top: 1rem;\n margin-bottom: 0.2rem;\n}\n\n[id^=\"GPisochronPanel-\"] p.gpf-label:first-child {\n margin-top: 0;\n}\n\ndiv[id^=\"GPisochronChoice\"] {\n justify-content: left;\n gap: 1em;\n}\n\ndiv[id^=GPisochronTransportChoice] > div {\n margin-top: 0.5rem;\n}\n\ndiv[id^=GPisochronValueChron],\ndiv[id^=GPisochronValueDist] {\n width: 281px;\n}\n\n.GPflexInput > input[id^=\"GPisochronValueChronInput2\"] {\n margin-top: 0;\n}\n\n.GPisoExclusionsOptions {\n gap: 1rem;\n}\n\n[id^=GPisochronForm-] > .GPpanelFooter {\n position: unset;\n}\n\n[id^=GPisochronReset-] {\n min-width: 2.5rem;\n}\n\n[id^=GPisochronSubmit-] {\n width: 80%;\n}\n\n",".gpf-btn-icon-import::after {\n -webkit-mask: url(\"img/layerimport.svg\") center no-repeat;\n mask: url(\"img/layerimport.svg\") center no-repeat;\n}\n\n.gpf-panel__items_layerimport {\n color: var(--text-action-high-blue-france);\n border-bottom: 1px solid var(--grey-900-175);\n list-style-type: none;\n height: auto;\n}\n","div[id^=GPlayerSwitcher-] {\n height: 44px;\n}\n\nbutton[id^=GPshowLayersListPicto] {\n width: 40px;\n}\n\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] + dialog[id^=GPlayersList] {\n width: 350px;\n}\n\n.GPlayerSwitcher_layer {\n background-color: var(--background-overlap-grey);\n padding-right: 40px;\n}\n\n.gpf-btn-icon-layerswitcher::after {\n -webkit-mask: url(\"img/dsfr/layerswitcher.svg\") center no-repeat;\n mask: url(\"img/dsfr/layerswitcher.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-ls-visibility {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-visibility::after {\n -webkit-mask: url(\"img/dsfr/visible-open.svg\") center no-repeat;\n mask: url(\"img/dsfr/visible-open.svg\") center no-repeat;\n}\n\nbutton[id^=GPvisibilityPicto_ID_][aria-pressed=\"false\"]::after {\n -webkit-mask: url(\"img/dsfr/visible-close-blanc.svg\") center no-repeat;\n mask: url(\"img/dsfr/visible-close-blanc.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-ls-remove {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-remove::after {\n -webkit-mask: url(\"img/dsfr/remove.svg\") center no-repeat;\n mask: url(\"img/dsfr/remove.svg\") center no-repeat;\n}\n\n\n.gpf-btn-icon-ls-collapse {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-collapse::after {\n -webkit-mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n transition: transform 0.2s ease-out 0s;\n}\n\n.gpf-btn-icon-ls-collapse[aria-pressed=\"true\"]::after {\n box-shadow: none;\n transform: rotate(180deg);\n}\n\n.gpf-btn-icon-ls-dragndrop {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-dragndrop::after {\n -webkit-mask: url(\"img/dsfr/dragndrop.svg\") center no-repeat;\n mask: url(\"img/dsfr/dragndrop.svg\") center no-repeat;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools {\n height: 56px;\n max-height: 56px;\n}\n\n/* Surchargé en inline avec \"hidden\" pour les couches n'ayant pas de description ou de titre */\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools > .GPlayerInfo {\n visibility: visible;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"false\"] {\n box-shadow: none;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"false \"] + .GPlayerAdvancedTools > .GPlayerInfo {\n visibility: hidden;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_] {\n position: absolute;\n top: 12px;\n right: 16px;\n}\n\ndiv[id^=GPbasicTools_ID_] {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n flex-wrap: nowrap;\n flex-direction: row-reverse;\n}\n\ndiv[id^=GPadvancedTools_ID_] {\n display: flex;\n align-content: center;\n align-items: center;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n height: inherit;\n}\n\n.gpf-btn-header {\n z-index: 2;\n position: absolute;\n width: 26px;\n height: 26px;\n}\n\n.gpf-btn-icon-layers {\n background-image: url(\"img/dsfr/layers.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n}\n\n.gpf-panel__body_ls {\n overflow: auto;\n max-height: 300px !important;\n}\n\n.gpf-panel__title_ls {\n color: #101092;\n padding: 12px 15px;\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n margin: 0;\n right: -16px;\n}\n.gpf-panel__header_ls {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-content: center;\n background: #E3E3FD;\n height: 48px;\n}\n\n.gpf-btn-icon-ls-info {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-info::after {\n -webkit-mask: url(\"img/dsfr/info.svg\") center no-repeat;\n mask: url(\"img/dsfr/info.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-ls-extent {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-extent::after {\n -webkit-mask: url(\"img/dsfr/extent.svg\") center no-repeat;\n mask: url(\"img/dsfr/extent.svg\") center no-repeat;\n}\n\n[id^=GPlayerInfoPanel] {\n position: absolute;\n height: initial;\n}\n\n.gpf-label-name {\n width: calc(100% - 96px);\n line-height: 28px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding-left: 4px;\n}\n\n.GPlayerDragNDrop {\n cursor: move;\n}\n\n.gpf-range__output {\n width: 35px;\n}\n\n.GPlayerOpacity.fr-range--sm[data-fr-js-range]::after,\n.GPlayerOpacity.fr-range--sm[data-fr-js-range]::before {\n top: 25%;\n}\n\ndiv[id^=GPlayerInfoContent] {\n width: 350px;\n}\n\n.gpf-btn-icon-close.GPlayersPanelClose {\n top: 0;\n right: 0;\n}\n\n.gpf-btn-icon-close.GPlayersPanelClose::after {\n margin-left: -0.125rem;\n}\n\n/* menu contextuel (mobile) */\n.GPlayerAdvancedToolsContextual {\n display: none;\n}\n\n.GPlayerAdvancedToolsContextual::after {\n -webkit-mask: url(\"./img/dsfr/context.svg\") center no-repeat;\n mask: url(\"./img/dsfr/context.svg\") center no-repeat;\n}\n\n.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"] {\n background-color: var(--hover-tint);\n overflow: visible;\n}\n\n.GPlayerSwitcher_layer:has(.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"]) {\n overflow: visible;\n}\n\n[id^=GPlayersList-] .GPpanelBody:has(.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"]) {\n overflow: visible;\n}\n\n.GPlayerAdvancedTools:has(.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"]) {\n position: relative;\n}\n\n.GPlayerAdvancedToolsContextual + div {\n display: none;\n flex-direction: column;\n flex-wrap: wrap;\n font-size: 13px;\n z-index: 12;\n background-color: var(--background-overlap-grey);\n border-radius: 6px;\n box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.15);\n padding: 14px 6px;\n gap: 6px;\n}\n\n.GPlayerAdvancedToolsContextual + div > button {\n padding-left: 2rem;\n}\n\n.GPlayerAdvancedToolsContextual + div > button[visibility=\"hidden\"] {\n display: none;\n}\n\n.GPlayerAdvancedToolsContextual + div > button::after {\n mask-position: left;\n}\n\n.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"] + div {\n display: flex;\n position: absolute;\n right: 0;\n top: calc(2.5rem + 8px);\n}\n\n@media (max-width: 576px) {\n .GPlayerAdvancedTools {\n width: calc(100% + 40px);\n }\n\n .GPlayerAdvancedTools > .GPlayerRemove, .GPlayerAdvancedTools > .GPlayerInfo, .GPlayerAdvancedTools > .GPlayerExtent {\n display: none;\n }\n\n .GPlayerAdvancedToolsContextual {\n display: inline-flex;\n }\n\n [id^=GPopacity_ID_] {\n flex-grow: 0.6;\n }\n}\n",".gpf-btn-icon-pointer::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask: url(\"img/reticle.svg\") center no-repeat;\n mask: url(\"img/reticle.svg\") center no-repeat;\n background-color: var(--text-inverted-blue-france);\n}\n\n.gpf-btn-icon-pointer {\n min-width: 2.5rem;\n position: relative;\n border-top-right-radius: 4px;\n}\n\n.GPlocationStageFlexInput:has(.GPlocationStageRemove) > .gpf-btn-icon-pointer {\n border-top-right-radius: 0px;\n}\n\n.gpf-btn-icon-remove {\n height: 2.5rem;\n width: 2.5rem;\n}\n\n.gpf-btn-icon-label {}\n.gpf-btn-icon-remove::after {\n -webkit-mask: url(\"img/dsfr/close-line.svg\") center no-repeat;\n mask: url(\"img/dsfr/close-line.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-add::after {\n -webkit-mask: url(\"img/GPlocationOptions.png\") -51px center no-repeat;\n mask: url(\"img/GPlocationOptions.png\") -51px center no-repeat;\n width: 2.5rem;\n height: 2.5rem;\n}\n\n.GPlocationOriginLabel {\n display: none;\n pointer-events: none;\n}\n\n[class^=\"GPlocationPoint-\"] {\n padding: 0;\n}\n\n[id^=\"GPlocationPoint_\"] {\n justify-content: left;\n}\n\n.GPlocationStageFlexInput {\n flex-wrap: wrap;\n width: 281px;\n}\n\n.GPlocationStageAdd {\n flex-basis: 65%;\n width: 0px;\n min-height: 40px;\n padding: 0.25rem 0.75rem 0.25rem 2.5rem;\n text-align: left;\n}\n\n.GPlocationOriginLabel {\n flex-basis: fit-content;\n}\n\n.GPlocationOriginPointerImg {\n flex-basis: 2.5em;\n}\n\n.GPlocationStageFlexInput input {\n flex-basis: 33%;\n flex-grow: 1;\n}\n","/* MEASURE TOOL */\n\n.GPmeasureTooltip {\n background-color: var(--background-contrast-grey);\n padding: 0.2rem 0.4rem;\n opacity: 0.8;\n}\n\n",".gpf-btn-icon-area::after {\n -webkit-mask: url(\"img/mesurer-surface.svg\") center no-repeat;\n mask: url(\"img/mesurer-surface.svg\") center no-repeat;\n}",".gpf-btn-icon-length::after {\n -webkit-mask: url(\"./img/mesurer-distance.svg\") center no-repeat;\n mask: url(\"./img/mesurer-distance.svg\") center no-repeat;\n}",".gpf-btn-icon-azimuth::after {\n -webkit-mask: url(\"img/mesurer-azimuth.svg\") center no-repeat;\n mask: url(\"img/mesurer-azimuth.svg\") center no-repeat;\n}",".gpf-btn-icon-position::after {\n -webkit-mask: url(\"img/position.svg\") center no-repeat;\n mask: url(\"img/position.svg\") center no-repeat;\n}\n\ndiv[id^=GPmousePositionCoordinate-] input {\n color: inherit;\n}\n\ndiv[id^=GPmousePositionAltitude-],\ndiv[id^=GPmousePositionCoordinate-] > div {\n display: flex;\n justify-content: space-between;\n}\n\ndiv[id^=GPmousePositionCoordinate-] input[readonly] {\n font-size: 1rem\n}",".gpf-btn-icon-reverse::after {\n -webkit-mask: url(\"img/reversegeocode.svg\") center no-repeat;\n mask: url(\"img/reversegeocode.svg\") center no-repeat;\n}\n\n.gpf-flex-reverse {\n /* INFO : surcharge de .gpf-flex par defaut */\n display: flex;\n align-items: flex-start;\n flex-direction: column;\n justify-content: space-evenly;\n}\n\n.gpf-panel-reverse {\n /* INFO : surcharge de .gpf-panel par defaut */\n width: 100%;\n}\n",".gpf-btn-icon-route::after {\n -webkit-mask: url(\"img/route.svg\") center no-repeat;\n mask: url(\"img/route.svg\") center no-repeat;\n}\n\n.GProuteFormMini {\n max-height: 78px;\n}\n\n.GProuteFormMini .GPelementShow {\n color: var(--grey-200-850);\n}\n\n.GProuteModeLabel {\n margin-bottom: 0.5rem;\n}\n\n[id^=GProuteForm-] p.gpf-label {\n margin-top: 0;\n margin-bottom: 0.2rem;\n}\n\n[id^=\"GProuteForm-\"] > .GPpanelFooter {\n position: unset;\n}\n\n[id^=\"GProuteSubmit-\"] {\n width: 80%;\n}\n\n[id^=\"GProuteForm-\"] > [class^=\"GPlocationPoint-\"] {\n margin-top: 0;\n}\n\n[id^=\"GProuteForm-\"] > p.gpf-label {\n margin-top: 1rem;\n}\n\n[id^=\"GProuteForm-\"].GProuteFormMini > p.gpf-label {\n margin-top: 0;\n}\n\n[id^=\"GProuteForm-\"] > p.gpf-label ~ p.gpf-label {\n margin-top: 0.5rem;\n}\n\n/* Reset picto */\nbutton[id^=GProuteReset-], div[id^=GProuteResultsNew-] {\n min-width: 2.5em;\n}\n\ndiv[id^=GProuteResultsValueDist],\ndiv[id^=GProuteResultsValueTime] {\n color: var(--text-action-high-blue-france);\n font-weight: bold;\n}\n\n.GProuteResultsShowDetailsDiv {\n justify-content: left;\n}\n\ndiv:has(input[id^=GProuteResultsShowDetails]) + div[id^=GProuteResultsDetails-] {\n max-height: 0;\n opacity: 0;\n overflow: hidden;\n}\n\ndiv:has(input[id^=GProuteResultsShowDetails]:checked) + div[id^=GProuteResultsDetails-] {\n max-height: 200px;\n opacity: 1;\n overflow-y: scroll;\n}\n\ndiv[id^=GProuteResultsDetails-] {\n max-width: 350px;\n transition: max-height 0.5s ease-in-out 0.25s, opacity 0.5s ease-in-out 0.25s;\n display: grid;\n grid-template-columns: 30px 1fr;\n gap: 0.5rem 5px;\n}\n\n.GProuteResultsDetailsNumber,\n.GProuteResultsDetailsInstruction {\n display: inline-block;\n}\n\n.GProuteResultsDetailsNumber {\n font-weight: bold;\n text-align: right;\n vertical-align: top;\n}\n\n.GProuteExclusionsOptions {\n gap: 0.5rem;\n color: var(--text-label-grey);\n}\n\n/* Mode Mobile */\n\n@media (max-width: 576px) {\n .gpf-mobile-fullscreen div[id^=\"GProuteResultsDetails-\"] {\n max-width: unset;\n }\n}",".gpf-widget-padding {\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.gpf-widget-color {\n background-color: var(--background-default-grey);\n}\n\n.gpf-panel__items_searchengine,\n.GPlabelTitle {\n color: var(--text-action-high-blue-france);\n border-bottom: 1px solid var(--grey-900-175);\n padding: 12px;\n}\n\n\n.gpf-panel__items.GPautoCompleteProposal {\n height: 45px;\n box-sizing: border-box;\n}\n\n.GPlabelTitle {\n background-color: var(--background-open-blue-france);\n font-size: 1.0em;\n}\n\ndialog[id^=GPcoordinateSearchPanel],\ndialog[id^=GPadvancedSearchPanel] {\n max-height: unset;\n}\n\nselect[name^=\"inputSex\"].gpf-select {\n padding: unset;\n}\n\ninput[name^=\"inputSex\"].gpf-input {\n padding: unset;\n}\n\nbutton[id^=GPsearchInputReset] {\n width: 40px;\n height: 40px;\n}\n\n[id^=\"GPshowSearchDiv\"] {\n flex-direction: row-reverse;\n}\n\n[id^=\"GPsearchEngine-\"] {\n flex-direction: column;\n}\n\n[id^=\"GPsearchEngine-\"].gpf-widget-padding {\n align-items: center;\n}\n\ndiv.GPbuttonsContainer > button {\n width: 40px;\n}\n\n.GPsearchFirstLineWrapper {\n height: 40px;\n}\n\n.gpf-widget-padding > .GPsearchFirstLineWrapper {\n margin: 0.5rem 0;\n}\n\n.GPbuttonsContainer {\n height: 56px;\n padding-left: 10px;\n}\n\n.GPsearchRadioContainer {\n display: flex;\n flex-direction: row;\n background-color: var(--background-default-grey);\n white-space: nowrap;\n max-height: 0;\n overflow: clip;\n transition: max-height 0.3s;\n gap: 1rem;\n}\n\n[id^=\"GPsearchEngine-\"]:has([id^=\"GPshowSearchByCoordinate-\"][aria-pressed=\"true\"]) > .GPsearchRadioContainer,\n[id^=\"GPsearchEngine-\"]:focus-within > .GPsearchRadioContainer,\n[id^=\"GPsearchEngine-\"]:hover > .GPsearchRadioContainer {\n max-height: 3rem;\n}\n\n.GPsearchRadioElements {\n display: flex;\n flex-direction: row;\n gap: 1rem;\n}\n\n.GPshowAdvancedSearch {\n color: var(--text-action-high-blue-france);\n text-decoration: underline;\n cursor: pointer;\n display: flex;\n align-items: center;\n}\n\n.gpf-btn-icon-search {\n background-image: url(\"img/dsfr/search-line.svg\");\n background-repeat: no-repeat;\n background-position: center center;\n /* cas particulier ou on n'utilise pas la class gpf-icon-button pour la largeur à cause du DOM du control*/\n width: 40px;\n}\n\nform[id^=GPsearchInput-] {\n margin-left: 8px;\n width: 300px;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] {\n max-width: 300px;\n border: none;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"] {\n border-radius: 0 0.25rem 0 0;\n}\n\n.gpf-btn-icon-search-advanced::after {\n -webkit-mask: url(\"img/dsfr/recherche-avancee.svg\") center no-repeat;\n mask: url(\"img/dsfr/recherche-avancee.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-search-geolocate::after {\n -webkit-mask: url(\"img/dsfr/localiser.svg\") center no-repeat;\n mask: url(\"img/dsfr/localiser.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-search-coordinate::after {\n -webkit-mask: url(\"img/dsfr/coordonnees.svg\") center no-repeat;\n mask: url(\"img/dsfr/coordonnees.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-search-reset {\n background-position: -25px center;\n}\n\ndialog[id^=GPcoordinateSearchPanel],\ndialog[id^=\"GPadvancedSearchPanel\"] {\n position: absolute;\n top: 66px;\n width: inherit;\n}\n\n/* Autocomplete list / geocode results */\n\n[id^=\"GPautocompleteResults-\"] {\n border: 1px solid var(--background-open-blue-france);\n}\n\ndiv[id^=GPautoCompleteList],\ndialog[id^=GPgeocodeResultsList] {\n width: 320px;\n position: absolute;\n height: fit-content;\n background-color: var(--background-default-grey);\n max-height: unset;\n}\n\ndiv[id^=GPautoCompleteList] {\n top: 42px;\n margin-left: 2px;\n}\n\n.position-container-top-left [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-bottom-left [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-top-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-bottom-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList] {\n width: 340px;\n position: relative;\n top: unset;\n margin-left: 8px;\n}\n\n.position-container-top-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-bottom-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList] {\n margin-right: 10px;\n}\n\n.gpf-widget-padding > div[id^=GPautoCompleteList] {\n top: 100%;\n width: 100%;\n margin: 0;\n}\n\ndialog[id^=GPgeocodeResultsList] {\n position: absolute;\n top: 55px;\n border-radius: 4px;\n overflow: hidden;\n}\n\ndiv[id^=GPgeocodeResults-] {\n width: 100%;\n position: relative;\n background-color: var(--background-default-grey);\n max-height: 240px;\n overflow-y: auto;\n}\n\n[id^=\"GPautocompleteResultsSuggest\"],\n[id^=\"GPautocompleteResultsLocation\"] {\n height: 225px;\n}\n\n/* Mode Mobile */\n@media (max-width: 576px) {\n\n .gpf-widget-padding > .GPsearchFirstLineWrapper {\n flex-direction: column;\n height: fit-content;\n }\n\n .GPsearchRadioContainer {\n flex-direction: column;\n align-items: center;\n }\n\n dialog[id^=GPcoordinateSearchPanel],\n dialog[id^=\"GPadvancedSearchPanel\"] {\n position: relative;\n top: unset;\n margin-left: unset;\n }\n\n .GPsearchRadioContainer {\n gap: 0;\n margin: 0 8px;\n }\n\n form[id^=GPsearchInput-] {\n margin-left: 0;\n }\n\n [id^=\"GPsearchEngine-\"]:has([id^=\"GPshowSearchByCoordinate-\"][aria-pressed=\"true\"]) > .GPsearchRadioContainer,\n [id^=\"GPsearchEngine-\"]:focus-within > .GPsearchRadioContainer,\n [id^=\"GPsearchEngine-\"]:hover > .GPsearchRadioContainer {\n max-height: 4rem;\n }\n}\n",".gpf-btn-icon-toolbox {\n background-repeat: no-repeat;\n background-image: url(\"img/GPtoolBoxMeasureOpen.png\");\n background-position: 3px center;\n}",".gpf-btn-icon-zoom-in {\n height: inherit;\n width: inherit;\n}\n\n.gpf-btn-icon-zoom-in::after {\n -webkit-mask: url(\"img/dsfr/zoom-in.svg\") center no-repeat;\n mask: url(\"img/dsfr/zoom-in.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-zoom-out {\n height: inherit;\n width: inherit;\n}\n\n.gpf-btn-icon-zoom-out::after {\n -webkit-mask: url(\"img/dsfr/zoom-out.svg\") center no-repeat;\n mask: url(\"img/dsfr/zoom-out.svg\") center no-repeat;\n}\n","/* surcharge en mode dsfr */\n.ol-custom-full-screen button {\n height: 40px;\n width: 40px;\n background-position: center center;\n background-repeat: no-repeat;\n}\n.ol-custom-full-screen button.ol-custom-full-screen-false::after {\n -webkit-mask: url(\"img/dsfr/fullscreen.svg\") center no-repeat;\n mask: url(\"img/dsfr/fullscreen.svg\") center no-repeat;\n}\n.ol-custom-full-screen button.ol-custom-full-screen-true::after {\n -webkit-mask: url(\"img/dsfr/fullscreen-off.svg\") center no-repeat;\n mask: url(\"img/dsfr/fullscreen-off.svg\") center no-repeat;\n}",".gpf-btn-icon-overviewmap::after {\n -webkit-mask: url(\"img/overviewmap.svg\") center no-repeat;\n mask: url(\"img/overviewmap.svg\") center no-repeat;\n}\n\n.ol-overviewmap:has(> .gpf-btn-icon[aria-pressed=\"true\"])::after {\n transform: translateY(-100%);\n}\n\n.ol-overviewmap:not(.ol-collapsed) {\n background: unset;\n}",".gpf-btn-icon-legends::after {\n -webkit-mask: url(\"img/dsfr/legends.svg\") center no-repeat;\n mask: url(\"img/dsfr/legends.svg\") center no-repeat;\n}\n\n.gpf-btn-header-legends {\n z-index: 2;\n position: absolute;\n width: 26px;\n height: 26px;\n}\n\n.gpf-btn-icon-header-legends {\n background-image: url(\"img/dsfr/header-legends.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n}\n\n.gpf-panel__body_legends {\n overflow: auto;\n max-height: 300px !important;\n}\n\n.gpf-panel__title_legends {\n color: #101092;\n padding: 12px 15px;\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n margin: 0;\n right: -16px;\n}\n.gpf-panel__header_legends {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-content: center;\n background: #E3E3FD;\n height: 48px;\n}\n\nbutton[id^=GPcollapseLegend_ID_] {\n position: absolute;\n top: 8px;\n right: 0;\n}\n\n.gpf-btn-icon-legends-collapse {\n box-shadow: none;\n}\n\n.gpf-btn-icon-legends-collapse::after {\n -webkit-mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n transition: transform 0.2s ease-out 0s;\n}\n\n.gpf-btn-icon-legends-collapse[aria-pressed=\"true\"]::after {\n box-shadow: none;\n transform: rotate(180deg);\n}\n\n.legend-entry-container {\n position: relative;\n top: 0;\n border-bottom: 1px solid var(--border-default-grey);\n overflow: hidden;\n}\n\n.legend-entry-container {\n background-color: var(--background-overlap-grey);\n}\n\n.gpf-label-legends-name {\n width: calc(100% - 40px);\n line-height: 56px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding-left: 4px;\n}\n\nbutton[id^=GPcollapseLegend_ID_][aria-pressed=\"true\"] + .legend-entry-image {\n opacity: 1;\n}\n\nbutton[id^=GPcollapseLegend_ID_][aria-pressed=\"true\"] + .legend-entry-image {\n max-height: 300px;\n overflow: auto;\n border-top: 1px solid var(--border-default-grey);\n padding: 10px 0;\n}\n\n.legend-entry-image {\n display: block;\n max-height: 0;\n opacity: 0;\n transition: max-height 0.5s ease-out 0s, opacity 0.5s ease-out 0s;\n}\n\n.legends-entries {\n padding: 0 16px;\n}\n",".gpf-btn-icon-catalog::after {\n -webkit-mask: url(\"img/dsfr/catalog.svg\") center no-repeat;\n mask: url(\"img/dsfr/catalog.svg\") center no-repeat;\n}\n\n/* Mode mobile doit prendre le dessus */\n\n@media (max-width: 576px) {\n .gpf-mobile-fullscreen .GPtabContent {\n max-height: unset !important;\n height: 100vh;\n }\n}",".gpf-btn-icon-territories::after {\n -webkit-mask: url(\"img/dsfr/territories.svg\") center no-repeat;\n mask: url(\"img/dsfr/territories.svg\") center no-repeat;\n}\n\n.gpf-btn-header-territories {\n z-index: 2;\n position: absolute;\n width: 26px;\n height: 26px;\n}\n\n.gpf-btn-icon-header-territories {\n background-image: url(\"img/dsfr/header-territories.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n}\n\n.gpf-panel__body_territories {\n overflow: auto;\n max-height: 300px;\n}\n\n.gpf-panel__title_territories {\n color: #101092;\n padding: 12px 15px;\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n margin: 0;\n right: -16px;\n}\n.gpf-panel__header_territories {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-content: center;\n background: #E3E3FD;\n height: 48px;\n}\n\n#GPterritoriesPanelClose {\n top: 0;\n right: 0;\n}\n\n/* surchage tile */\n.gpf-tile {\n height: 150px;\n width: 150px;\n}\n.tiles-reduce div.fr-tile {\n height: unset;\n width: unset;\n padding: unset;\n}\n.fr-tile:hover {\n background-color: var(--background-contrast-grey);\n}\n.fr-tile__title::before {\n background-image: unset;\n}\n.gpf-tile__header {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.territories-entries {\n display: grid;\n}\n/* direction */\ndialog.tiles-direction { }\n.territories-entries.tiles-direction {}\n\n/* nombre de tuiles */\n.tiles-direction.tiles-0 {\n max-height: none !important;\n grid-template-columns: repeat(3, 1fr);\n}\n.tiles-direction.tiles-1 {\n grid-template-columns: repeat(1, 1fr);\n}\n.tiles-direction.tiles-2 {\n grid-template-columns: repeat(2, 1fr);\n}\n.tiles-direction.tiles-3 {\n grid-template-columns: repeat(3, 1fr);\n}\n.tiles-direction.tiles-4 {\n grid-template-columns: repeat(4, 1fr);\n}\n\ndiv.fr-tile div.fr-tile__header div.fr-tile__icon,\ndiv.fr-tile div.fr-tile__header div.fr-tile__thumbnail {\n display: block;\n}\n\n/* reduce */\n.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__icon,\n.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__thumbnail {\n display: none;\n}\n\n.fr-tile__icon {\n /* background-image: url(\"img/dsfr/territories-small.svg\"); */\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n height: 50px;\n width: 50px;\n}\n\n.tiles-thumbnail div.fr-tile div.fr-tile__header div.fr-tile__icon {\n display: none;\n}\n.tiles-icon div.fr-tile div.fr-tile__header div.fr-tile__thumbnail {\n display: none;\n}\n\n/* affichage plein écran sur petit écran */\n@media (max-width: 576px) {\n /* si 4 tuiles de large, on force 3 tuiles de large */\n .tiles-direction.tiles-4 {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n\n/* sur tout petit écran, on force 2 colonnes max */\n@media (max-width: 382px) {\n .tiles-direction.tiles-0 {\n grid-template-columns: repeat(2, 1fr);\n }\n .tiles-direction.tiles-3 {\n grid-template-columns: repeat(2, 1fr);\n }\n .tiles-direction.tiles-4 {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n","button[id^=\"GPshowControlListPicto-\"][aria-pressed=\"true\"] + dialog {\n width: 370px;\n}\n\ndiv[id^=\"GPcontrolList-\"] .GPshowOpen > span {\n font-size: 32px;\n position: absolute;\n transform: translate(-5px, -2px);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content {\n display: flex;\n flex-direction: column;\n padding: 0 1.5rem;\n overflow: auto;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content:not(:has(~ .gpf-panel__footer)) {\n padding-bottom: 2rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div {\n display: flex;\n flex-direction: row;\n column-gap: 1rem;\n align-items: center;\n padding: 0.5rem 0.5rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div:hover {\n background-color: var(--hover);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div:hover > button {\n background-color: var(--hover);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button {\n height: 40px;\n width: 40px;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button::after {\n background-color: var(--text-default-grey);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > div {\n display: flex;\n flex-direction: column;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > div > span:nth-child(2) {\n color: var(--text-mention-grey);\n font-size: 0.75rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__footer {\n padding: 1rem 2rem 2rem 2rem;\n background-color: var(--background-lifted-grey);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__footer > button {\n width: 100%;\n justify-content: center;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"Dsfr.css","mappings":"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","sources":["webpack://Gp/./src/packages/CSS/DSFRgeneralWidget.css","webpack://Gp/./src/packages/CSS/Controls/Drawing/DSFRdrawingStyle.css","webpack://Gp/./src/packages/CSS/Controls/ElevationPath/DSFRelevationPathStyle.css","webpack://Gp/./src/packages/CSS/Controls/GetFeatureInfo/DSFRgetFeatureInfoStyle.css","webpack://Gp/./src/packages/CSS/Controls/Isochron/DSFRisochronStyle.css","webpack://Gp/./src/packages/CSS/Controls/LayerImport/DSFRlayerImportStyle.css","webpack://Gp/./src/packages/CSS/Controls/LayerSwitcher/DSFRlayerSwitcherStyle.css","webpack://Gp/./src/packages/CSS/Controls/LocationSelector/DSFRlocationStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/DSFRmeasureToolTipStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/DSFRmeasureAreaStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/DSFRmeasureLengthStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/DSFRmeasureAzimuthStyle.css","webpack://Gp/./src/packages/CSS/Controls/MousePosition/DSFRmousePositionStyle.css","webpack://Gp/./src/packages/CSS/Controls/ReverseGeocoding/DSFRreverseGeocodingStyle.css","webpack://Gp/./src/packages/CSS/Controls/Route/DSFRrouteStyle.css","webpack://Gp/./src/packages/CSS/Controls/SearchEngine/DSFRsearchEngineStyle.css","webpack://Gp/./src/packages/CSS/Controls/ToolBoxMeasure/DSFRtoolBoxMeasureStyle.css","webpack://Gp/./src/packages/CSS/Controls/Zoom/DSFRzoomStyle.css","webpack://Gp/./src/packages/CSS/Controls/FullScreen/DSFRfullScreenStyle.css","webpack://Gp/./src/packages/CSS/Controls/OverviewMap/DSFRoverviewMapStyle.css","webpack://Gp/./src/packages/CSS/Controls/Legends/DSFRlegendsStyle.css","webpack://Gp/./src/packages/CSS/Controls/Catalog/DSFRcatalogStyle.css","webpack://Gp/./src/packages/CSS/Controls/Territories/DSFRterritoriesStyle.css","webpack://Gp/./src/packages/CSS/Controls/ControlList/DSFRcontrolListStyle.css"],"sourcesContent":["/*\n * Liste des surcharges du mode DSFR\n */\n:root {\n --size-per-row: 44px;\n}\n\n.gpf-widget {\n position: absolute;\n pointer-events: auto;\n /* display: flex;*/\n padding: 2px;\n}\n\n.gpf-widget-button {\n width: 40px;\n}\n\n.gpf-panel {\n position: relative;\n background-color: unset;\n width: max-content;\n max-height: 100%;\n}\n\n.gpf-panel form {\n overflow: auto;\n padding: 0 2rem 2rem 2rem;\n}\n\n.gpf-panel--hidden {\n display: none;\n}\n\n.gpf-panel__body {\n overflow: unset;\n position: relative;\n max-height: 100% !important;\n flex: 1 1 auto;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.gpf-panel__header {}\n\n.gpf-panel__title {\n text-align: left;\n}\n\n.gpf-panel__footer {\n background-color: transparent;\n padding: 0;\n margin-top: 0;\n justify-content: center;\n}\n\n.gpf-panel__footer > input[type=\"submit\"] {\n width: 100%;\n}\n\n.gpf-panel__content {\n padding: unset;\n margin-bottom: unset;\n}\n\n.gpf-panel--close,\n.gpf-panel--reduce,\n.gpf-panel--info {\n position: relative;\n cursor: pointer;\n}\n\n/********/\n/* flex */\n/********/\n\n.gpf-flex {\n display: flex;\n align-items: center;\n flex-direction: row;\n justify-content: space-evenly;\n}\n\n.gpf-flex-column {\n display: flex;\n flex-direction: column;\n justify-content: space-evenly;\n}\n\n.gpf-flex-padding {\n padding: 5px;\n}\n\n.gpf-hidden {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\n.gpf-visible {\n display: block;\n visibility: visible;\n opacity: 100%;\n}\n\n/***********/\n/* waiting */\n/***********/\n\n.gpf-waiting {\n position: absolute;\n height: inherit;\n top: 80px;\n bottom: 0;\n left: 0;\n right: 0;\n border-radius: 4px;\n background-color: rgba(255, 255, 255, 0.9);\n font-size: 1.5em;\n font-weight: bold;\n overflow: hidden;\n}\n\n.gpf-waiting--hidden {\n display: none;\n}\n\n.gpf-waiting--visible {\n display: -webkit-flex;\n display: -ms-flexbox;\n display: -webkit-box;\n display: flex;\n z-index: 4000;\n}\n\n.gpf-waiting_info {\n margin: auto;\n}\n\n/***********/\n/* button */\n/***********/\n\n.gpf-btn-icon.gpf-btn--secondary,\n.gpf-btn-icon.gpf-btn--tertiary {\n background-color: var(--background-default-grey);\n}\n\n.gpf-widget > .gpf-btn-icon[aria-pressed=\"true\"] {\n background-color: var(--hover-tint);\n position: relative;\n}\n\n.gpf-widget:has(> .gpf-btn-icon[aria-pressed=\"true\"])::after {\n background-color: var(--background-action-high-blue-france);\n content: \"\";\n width: 3px;\n height: 40px;\n left: 44px;\n position: absolute;\n transform: translateY(-40px);\n}\n\n@supports(-moz-appearance:none) {\n .gpf-widget:has(.gpf-btn-icon[aria-pressed=\"true\"])::after {\n transform: unset;\n }\n}\n\n.gpf-widget > .gpf-btn-icon[aria-label]:hover::before {\n content: attr(aria-label);\n position: absolute;\n top: 0;\n color: var(--text-default-grey);\n font-size: .75rem;\n width: fit-content;\n white-space: nowrap;\n padding: .5rem .5rem 0.5rem 1.25rem;\n background-size: .375rem .5rem,.375rem .5rem,1px, 100%,calc(100% - 0.5rem) 100%;\n background-repeat: no-repeat;\n background-position: 0.125rem 50%, 0% 50%,0.375rem 100%,0.375rem 100%;\n filter: drop-shadow(0 2px 6px rgba(0,0,18,.16));\n filter: drop-shadow(var(--overlap-shadow));\n background-image: conic-gradient(from 56.31deg at 0% 50%,transparent 0deg,var(--background-overlap-grey) 0deg,var(--background-overlap-grey) 67.38deg,transparent 67.38deg),conic-gradient(from 56.31deg at 0% 50%,transparent 0deg,var(--border-default-grey) 0deg,var(--border-default-grey) 67.38deg,transparent 67.38deg),linear-gradient(90deg,var(--border-default-grey),var(--border-default-grey)),linear-gradient(90deg,var(--background-overlap-grey),var(--background-overlap-grey));\n}\n\n.position-container-top-left .gpf-widget > .gpf-btn-icon[aria-label]:hover::before,\n.position-container-bottom-left .gpf-widget > .gpf-btn-icon[aria-label]:hover::before {\n transform: translateX(24px);\n}\n\n.position-container-top-right .gpf-widget > .gpf-btn-icon[aria-label]:hover::before,\n.position-container-bottom-right .gpf-widget > .gpf-btn-icon[aria-label]:hover::before {\n transform: translateX(calc(-100% - 16px));\n padding: .5rem 1.25rem .5rem .5rem;\n background-size: .375rem .5rem, .375rem .5rem, 1px 100%, 100%;\n background-position: calc(100% - 0.125rem) 50%, 100% 50%, calc(100% - 0.375rem) 0, calc(100% - 0.375rem) 0;\n background-image: conic-gradient(from 236.31deg at 100% 50%, transparent 0deg, var(--background-overlap-grey) 0deg, var(--background-overlap-grey) 67.38deg, transparent 67.38deg), conic-gradient(from 236.31deg at 100% 50%, transparent 0deg, var(--border-default-grey) 0deg, var(--border-default-grey) 67.38deg, transparent 67.38deg), linear-gradient(90deg, var(--border-default-grey), var(--border-default-grey)), linear-gradient(90deg, var(--background-overlap-grey), var(--background-overlap-grey));\n}\n\n\n.gpf-btn--secondary,\n.gpf-btn--tertiary {\n position: relative;\n}\n\n.gpf-btn--tertiary::after,\n.gpf-btn--secondary::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n background-color: var(--text-action-high-blue-france);\n -webkit-mask: linear-gradient(#0000, #0000);\n mask: linear-gradient(#0000, #0000);\n}\n\n.gpf-btn--tertiary:disabled:after,\n.gpf-btn--secondary:disabled::after {\n background-color: var(--text-disabled-grey);\n}\n\n.position-container-top-left .gpf-button-no-gutter,\n.position-container-top-right .gpf-button-no-gutter {\n margin-bottom: -5px;\n}\n\n.position-container-bottom-left .gpf-button-no-gutter,\n.position-container-bottom-right .gpf-button-no-gutter {\n margin-top: -5px;\n}\n\n.gpf-btn--hidden {}\n\n.gpf-btn-icon-return {}\n\n.gpf-btn-icon-submit {}\n\n.gpf-btn-icon-reverse {}\n\n/* positionnement absolu en haut à droite du bouton \"fermer\" */\n.gpf-btn-icon-close {\n float: right;\n position: absolute;\n top: 0.5rem;\n right: 0.5rem;\n}\n\n.gpf-btn-icon-return {\n float: left;\n position: absolute;\n top: 0.5rem;\n left: 0.5rem;\n}\n\n.gpf-btn-icon-return::after {\n /* INFO : utiliser l'icone DSFR \"fr-icon-arrow-go-back-fill fr-btn--sm fr-btn--icon\" */\n -webkit-mask: url(\"img/GPreturnDSFR.png\") center no-repeat;\n mask: url(\"img/GPreturnDSFR.png\") center no-repeat;\n}\n\n.gpf-btn-icon {\n width: inherit;\n caret-color: transparent;\n}\n\n.gpf-btn-icon-reset::after {\n -webkit-mask:\n linear-gradient(#fff 0 0) top /100% 1px,\n linear-gradient(#fff 0 0) bottom/100% 1px,\n linear-gradient(#fff 0 0) left /1px 100%,\n linear-gradient(#fff 0 0) right /1px 100%,\n url(\"img/GPclose.png\") -25px center;\n mask:\n linear-gradient(#fff 0 0) top /100% 1px,\n linear-gradient(#fff 0 0) bottom/100% 1px,\n linear-gradient(#fff 0 0) left /1px 100%,\n linear-gradient(#fff 0 0) right /1px 100%,\n url(\"img/GPclose.png\") -25px center;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n background-color: var(--text-action-high-blue-france);\n}\n\n.gpf-btn-icon-info {\n width: 40px;\n height: 40px;\n}\n\n/*************/\n/* elements */\n/*************/\n\n.gpf-label {}\n\n.gpf-select {}\n\n.gpf-input {\n padding-left: 5px;\n}\n\n.gpf-radio-group {}\n\n.gpf-radio-btn-group {\n display: flex;\n gap: 1em;\n}\n\n.gpf-upload {}\n\n/*************/\n/* panel */\n/*************/\n\n.gpf-panel__list,\n.gpf-panel__advancedlist {\n z-index: 2;\n width: inherit;\n /* display: none; */\n position: absolute;\n max-height: 140px;\n background-color: #FFF;\n border: 1px solid #999;\n overflow-y: hidden;\n}\n\n.gpf-panel__advancedlist {\n width: calc(100% - 28px);\n border-top: none;\n font-size: 0.9em;\n}\n\n.gpf-panel__items:hover {\n color: #000000;\n background-color: #CEDBEF\n}\n\n.gpf-panel__items {\n width: 100%;\n height: 28px;\n line-height: 16px;\n padding: 6px 10px;\n color: #5E5E5E;\n font-size: 1.0em;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n}\n\n.gpf-panel::after {\n height: unset;\n flex: 0;\n}\n\n.gpf-panel::before {\n height: unset;\n flex: 0;\n}\n\n/***********/\n/* position*/\n/***********/\n:root {\n --size-per-row: 50px;\n}\n\n.position-container-top-left,\n.position-container-top-right,\n.position-container-bottom-left,\n.position-container-bottom-right {\n position: absolute;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n /* crée un décalage sur le searchEngine */\n /* align-items: center; */\n /* + 5px pour l'indicateur \"bouton actif\" */\n width: calc(var(--size-per-row) + 4px);\n min-height: var(--size-per-row);\n /* padding: 5px; */\n height: calc(100% - 8px);\n}\n\n.position-container-top-left,\n.position-container-top-right {\n top: 4px;\n}\n\n.position-container-top-left {\n float: left;\n left: 8px;\n}\n\n.position-container-top-right {\n float: right;\n right: 4px;\n}\n\n.position-container-bottom-left,\n.position-container-bottom-right {\n bottom: 4px;\n justify-content: flex-end;\n}\n\n.position-container-bottom-right {\n float: right;\n right: 4px;\n}\n\n.position-container-bottom-left {\n float: left;\n left: 8px;\n}\n\n/**********************/\n/* Feature info popup */\n/**********************/\n\n.gp-feature-info-div {\n bottom: 17px;\n position: relative;\n max-width: calc(100vw - 80px);\n padding: 10px;\n /* border-radius: 10px; */\n font-size: 0.75em;\n /* font-family: \"Open Sans\", sans-serif;\n color: #002A50; */\n background-color: var(--background-default-grey);\n box-shadow: 0 0 5px var(--text-default-grey);\n}\n\n.gp-feature-info-div::before {\n content: \"\";\n position: absolute;\n border-top: 15px solid var(--background-default-grey);\n border-right: 14px solid transparent;\n border-left: 14px solid transparent;\n bottom: -15px;\n margin-left: -14px;\n left: 50%;\n}\n\n.gp-feature-info-div .closer {\n position: absolute;\n display: block;\n width: 30px;\n height: 30px;\n top: 0;\n right: 0;\n border: none;\n cursor: pointer;\n border-top-right-radius: 10px;\n border-bottom-right-radius: 10px;\n background-color: var(--background-default-grey);\n}\n\n.gp-feature-info-div .closer::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n background-color: var(--text-action-high-blue-france);\n -webkit-mask: url(\"img/close-blue.svg\") center no-repeat;\n mask: url(\"img/close-blue.svg\") center no-repeat;\n -webkit-mask-size: 14px 14px;\n mask-size: 14px 14px;\n}\n\n.gp-features-content-div {\n max-width: 420px;\n min-width: 260px;\n max-height: 340px;\n overflow: auto;\n}\n\n.gp-features-content-div h5,\n.gp-features-content-div h6,\n.gp-features-content-div p,\n.gp-features-content-div ul {\n margin: 0;\n}\n\n.gp-features-content-div ul {\n padding: 0;\n list-style-type: none;\n}\n\n.geoportail-popup-content h5,\n.geoportail-popup-content h6,\n.geoportail-popup-content p,\n.gp-att-name-div,\n.gp-att-description-div,\n.gp-att-others-div {\n padding: 0 10px;\n}\n\n.geoportail-popup-content h5:not(:last-child),\n.geoportail-popup-content h6:not(:last-child),\n.geoportail-popup-content p:not(:last-child),\n.gp-att-description-div:not(:last-child),\n.gp-att-others-div:not(:last-child) {\n margin-bottom: 15px;\n}\n\n.geoportail-popup-content h5:last-child,\n.geoportail-popup-content h6:last-child,\n.geoportail-popup-content p:last-child,\n.gp-att-description-div:last-child,\n.gp-att-others-div:last-child,\n.gp-att-name-div {\n margin-bottom: 10px;\n}\n\n.geoportail-popup-content h5:first-child,\n.geoportail-popup-content h6:first-child,\n.geoportail-popup-content p:first-child,\n.gp-att-name-div:first-child,\n.gp-att-description-div:first-child,\n.gp-att-others-div:first-child {\n margin-top: 10px;\n}\n\n.gp-att-name-div,\n.gp-features-content-div h5 {\n padding-right: 35px;\n font-weight: bold;\n font-size: 1.2em;\n text-transform: uppercase;\n color: #0B6BA7;\n}\n\n.gp-features-content-div h6 {\n font-size: 1.1em;\n}\n\n.gp-att-description-div:not(:last-child),\n.gp-att-others-div:not(:last-child) {\n padding-bottom: 10px;\n border-bottom: 1px dotted #666;\n}\n\n/* surcharge css OpenLayers */\n.ol-disabled {\n --idle: transparent;\n --hover: var(--background-disabled-grey-hover);\n --active: var(--background-disabled-grey-active);\n background-color: var(--background-disabled-grey);\n color: var(--text-disabled-grey);\n cursor: not-allowed;\n /* instead of display: none */\n display: block;\n}\n\n.ol-scale-bar, .ol-scale-line {\n z-index: -1;\n}\n\n/* surcharge DSFR pour coller aux règles et au rendu de https://www.systeme-de-design.gouv.fr/composants-et-modeles/composants/accordeon/ */\n/* FIXME: pourquoi on a besoin de faire ça ?? normalement ces règles devraient être importées avec le reste... */\n.fr-collapse {\n --collapse-max-height: none;\n}\n\n.fr-collapse:not(.fr-collapse--expanded):not(.fr-collapsing) {\n --collapse-max-height: 0;\n}\n\n@media (max-width: 576px) {\n .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog {\n width: 100vw !important;\n }\n\n .gpf-mobile-fullscreen form div, .gpf-mobile-fullscreen form p {\n margin: auto;\n text-align: center;\n }\n\n .gpf-mobile-fullscreen .gpf-mobile-form {\n max-height: unset;\n height: 100vh;\n }\n\n .position-container-top-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-bottom-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-top-left .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-bottom-left .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog {\n top: -4px !important;\n left: -8px !important;\n right: unset !important;\n }\n\n .position-container-top-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-bottom-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog {\n right: -4px !important;\n left: unset !important;\n }\n}\n",".gpf-btn-icon-drawing::after {\n -webkit-mask: url(\"img/modifier.svg\") center no-repeat;\n mask: url(\"img/modifier.svg\") center no-repeat;\n}\n\n.gp-label-div,\n.gp-styling-div {\n width: 370px;\n transform: translateY(20px);\n}\n\n.gp-label-div textarea {\n max-width: 100%;\n margin-bottom: 1rem;\n}\n\n.gp-label-div input {\n width: 100%;\n}\n\n.gp-styling-option.fr-range--sm[data-fr-js-range]::before,\n.gp-styling-option.fr-range--sm[data-fr-js-range]::after {\n top: 1.74rem;\n}\n\n.drawing-tool {\n width: 40px;\n}\n\n.drawing-tool-active {\n background-color: var(--hover-tint);\n}\n\n/*\n* Drawing tools\n*/\nbutton[id^=drawing-tool-point-]::after {\n -webkit-mask: url(\"img/dsfr/create-point.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-point.svg\") center no-repeat;\n}\n\n\nbutton[id^=drawing-tool-line-]::after {\n -webkit-mask: url(\"img/dsfr/create-line.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-line.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-polygon-]::after {\n -webkit-mask: url(\"img/dsfr/create-polygon.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-polygon.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-text-]::after {\n -webkit-mask: url(\"img/dsfr/create-label.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-label.svg\") center no-repeat;\n}\n\n/*\n* Editing tools\n*/\nbutton[id^=drawing-tool-edit-]::after {\n -webkit-mask: url(\"img/dsfr/edit-geom.svg\") center no-repeat;\n mask: url(\"img/dsfr/edit-geom.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-display]::after {\n -webkit-mask: url(\"img/dsfr/edit-style.svg\") center no-repeat;\n mask: url(\"img/dsfr/edit-style.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-tooltip]::after {\n -webkit-mask: url(\"img/dsfr/edit-text.svg\") center no-repeat;\n mask: url(\"img/dsfr/edit-text.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-remove]::after {\n -webkit-mask: url(\"img/dsfr/delete.svg\") center no-repeat;\n mask: url(\"img/dsfr/delete.svg\") center no-repeat;\n}\n",".gpf-btn-icon-elevation::after {\n -webkit-mask: url(\"img/altipath.svg\") center no-repeat;\n mask: url(\"img/altipath.svg\") center no-repeat;\n}\n\n[id^=GPelevationPathPanelInfo] {\n position: absolute;\n float: left;\n top: 0;\n left: 0;\n}\n\n/* surcharge de fr-panel pour permettre la saisie sous la fenêtre de résultat */\n[id^=GPelevationPathPanel] {\n height: unset;\n}\n\n[id^=GPelevationPathPanelInfo]::after {\n -webkit-mask: url(\"../../img/GPinfo_secondary.svg\") center no-repeat;\n mask: url(\"../../img/GPinfo_secondary.svg\") center no-repeat;\n}\n\n[id^=GPelevationPathProfil] > #profileElevationByDefault > svg {\n transform: translateY(1rem);\n}\n\n[id^=GPelevationPathProfil] {\n height: 150px;\n width: 300px;\n}\n\n.GPelevationPathProfilWrapper {\n padding: 0 2rem;\n}\n\ndiv[id^=GPelevationPathInformationsContainer] {\n display: grid;\n width: calc(300px + 4rem);\n padding: 0 2rem 1rem 2rem;\n grid-template-columns: 50% 50%;\n}\n\n.GPelevationPathInformations {\n font-size: 13px;\n margin: 0;\n display: flex;\n flex-wrap: wrap;\n gap: 0 0.25rem;\n}\n\n.GPelevationPathInformations > span {\n white-space: nowrap;\n}\n\n/* Mode Mobile */\n\n@media (max-width: 576px) {\n div[id^=GPelevationPathInformationsContainer], #GPelevationPathProfil {\n margin: auto;\n }\n}","/* GET FEATURE INFO */\n.gpf-btn-icon-getfeatureinfo::after {\n -webkit-mask: url(\"img/NoGFI.svg\") center no-repeat;\n mask: url(\"img/NoGFI.svg\") center no-repeat;\n}\n\nbutton[id^=\"GPgetFeatureInfoPicto-\"][aria-pressed=\"true\"]::after {\n -webkit-mask: url(\"img/GFI.svg\") center no-repeat;\n mask: url(\"img/GFI.svg\") center no-repeat;\n}",".gpf-btn-icon-isocurve::after {\n -webkit-mask: url(\"img/isochrone.svg\") center no-repeat;\n mask: url(\"img/isochrone.svg\") center no-repeat;\n}\n\n.gpf-flex-isocurve {\n justify-content: unset;\n}\n\n.gpf-btn-icon-isocurve-reset {\n background-position: -29px center;\n}\n\n[id^=GPisochronPanel-] p.gpf-label {\n margin-top: 1rem;\n margin-bottom: 0.2rem;\n}\n\n[id^=\"GPisochronPanel-\"] p.gpf-label:first-child {\n margin-top: 0;\n}\n\ndiv[id^=\"GPisochronChoice\"] {\n justify-content: left;\n gap: 1em;\n}\n\ndiv[id^=GPisochronTransportChoice] > div {\n margin-top: 0.5rem;\n}\n\ndiv[id^=GPisochronValueChron],\ndiv[id^=GPisochronValueDist] {\n width: 281px;\n}\n\n.GPflexInput > input[id^=\"GPisochronValueChronInput2\"] {\n margin-top: 0;\n}\n\n.GPisoExclusionsOptions {\n gap: 1rem;\n}\n\n[id^=GPisochronForm-] > .GPpanelFooter {\n position: unset;\n}\n\n[id^=GPisochronReset-] {\n min-width: 2.5rem;\n}\n\n[id^=GPisochronSubmit-] {\n width: 80%;\n}\n\n",".gpf-btn-icon-import::after {\n -webkit-mask: url(\"img/layerimport.svg\") center no-repeat;\n mask: url(\"img/layerimport.svg\") center no-repeat;\n}\n\n.gpf-panel__items_layerimport {\n color: var(--text-action-high-blue-france);\n border-bottom: 1px solid var(--grey-900-175);\n list-style-type: none;\n height: auto;\n}\n","div[id^=GPlayerSwitcher-] {\n height: 44px;\n}\n\nbutton[id^=GPshowLayersListPicto] {\n width: 40px;\n}\n\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] + dialog[id^=GPlayersList] {\n width: 350px;\n}\n\n.GPlayerSwitcher_layer {\n background-color: var(--background-overlap-grey);\n padding-right: 40px;\n}\n\n.gpf-btn-icon-layerswitcher::after {\n -webkit-mask: url(\"img/dsfr/layerswitcher.svg\") center no-repeat;\n mask: url(\"img/dsfr/layerswitcher.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-ls-visibility {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-visibility::after {\n -webkit-mask: url(\"img/dsfr/visible-open.svg\") center no-repeat;\n mask: url(\"img/dsfr/visible-open.svg\") center no-repeat;\n}\n\nbutton[id^=GPvisibilityPicto_ID_][aria-pressed=\"false\"]::after {\n -webkit-mask: url(\"img/dsfr/visible-close-blanc.svg\") center no-repeat;\n mask: url(\"img/dsfr/visible-close-blanc.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-ls-remove {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-remove::after {\n -webkit-mask: url(\"img/dsfr/remove.svg\") center no-repeat;\n mask: url(\"img/dsfr/remove.svg\") center no-repeat;\n}\n\n\n.gpf-btn-icon-ls-collapse {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-collapse::after {\n -webkit-mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n transition: transform 0.2s ease-out 0s;\n}\n\n.gpf-btn-icon-ls-collapse[aria-pressed=\"true\"]::after {\n box-shadow: none;\n transform: rotate(180deg);\n}\n\n.gpf-btn-icon-ls-dragndrop {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-dragndrop::after {\n -webkit-mask: url(\"img/dsfr/dragndrop.svg\") center no-repeat;\n mask: url(\"img/dsfr/dragndrop.svg\") center no-repeat;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools {\n height: 56px;\n max-height: 56px;\n}\n\n/* Surchargé en inline avec \"hidden\" pour les couches n'ayant pas de description ou de titre */\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools > .GPlayerInfo {\n visibility: visible;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"false\"] {\n box-shadow: none;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"false \"] + .GPlayerAdvancedTools > .GPlayerInfo {\n visibility: hidden;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_] {\n position: absolute;\n top: 12px;\n right: 16px;\n}\n\ndiv[id^=GPbasicTools_ID_] {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n flex-wrap: nowrap;\n flex-direction: row-reverse;\n}\n\ndiv[id^=GPadvancedTools_ID_] {\n display: flex;\n align-content: center;\n align-items: center;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n height: inherit;\n}\n\n.gpf-btn-header {\n z-index: 2;\n position: absolute;\n width: 26px;\n height: 26px;\n}\n\n.gpf-btn-icon-layers {\n background-image: url(\"img/dsfr/layers.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n}\n\n.gpf-panel__body_ls {\n overflow: auto;\n max-height: 300px !important;\n}\n\n.gpf-panel__title_ls {\n color: #101092;\n padding: 12px 15px;\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n margin: 0;\n right: -16px;\n}\n.gpf-panel__header_ls {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-content: center;\n background: #E3E3FD;\n height: 48px;\n}\n\n.gpf-btn-icon-ls-info {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-info::after {\n -webkit-mask: url(\"img/dsfr/info.svg\") center no-repeat;\n mask: url(\"img/dsfr/info.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-ls-extent {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-extent::after {\n -webkit-mask: url(\"img/dsfr/extent.svg\") center no-repeat;\n mask: url(\"img/dsfr/extent.svg\") center no-repeat;\n}\n\n[id^=GPlayerInfoPanel] {\n position: absolute;\n height: initial;\n}\n\n.gpf-label-name {\n width: calc(100% - 96px);\n line-height: 28px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding-left: 4px;\n}\n\n.GPlayerDragNDrop {\n cursor: move;\n}\n\n.gpf-range__output {\n width: 35px;\n}\n\n.GPlayerOpacity.fr-range--sm[data-fr-js-range]::after,\n.GPlayerOpacity.fr-range--sm[data-fr-js-range]::before {\n top: 25%;\n}\n\ndiv[id^=GPlayerInfoContent] {\n width: 350px;\n}\n\n.gpf-btn-icon-close.GPlayersPanelClose {\n top: 0;\n right: 0;\n}\n\n.gpf-btn-icon-close.GPlayersPanelClose::after {\n margin-left: -0.125rem;\n}\n\n/* menu contextuel (mobile) */\n.GPlayerAdvancedToolsContextual {\n display: none;\n}\n\n.GPlayerAdvancedToolsContextual::after {\n -webkit-mask: url(\"./img/dsfr/context.svg\") center no-repeat;\n mask: url(\"./img/dsfr/context.svg\") center no-repeat;\n}\n\n.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"] {\n background-color: var(--hover-tint);\n overflow: visible;\n}\n\n.GPlayerSwitcher_layer:has(.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"]) {\n overflow: visible;\n}\n\n[id^=GPlayersList-] .GPpanelBody:has(.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"]) {\n overflow: visible;\n}\n\n.GPlayerAdvancedTools:has(.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"]) {\n position: relative;\n}\n\n.GPlayerAdvancedToolsContextual + div {\n display: none;\n flex-direction: column;\n flex-wrap: wrap;\n font-size: 13px;\n z-index: 12;\n background-color: var(--background-overlap-grey);\n border-radius: 6px;\n box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.15);\n padding: 14px 6px;\n gap: 6px;\n}\n\n.GPlayerAdvancedToolsContextual + div > button {\n padding-left: 2rem;\n}\n\n.GPlayerAdvancedToolsContextual + div > button[visibility=\"hidden\"] {\n display: none;\n}\n\n.GPlayerAdvancedToolsContextual + div > button::after {\n mask-position: left;\n}\n\n.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"] + div {\n display: flex;\n position: absolute;\n right: 0;\n top: calc(2.5rem + 8px);\n}\n\n@media (max-width: 576px) {\n .GPlayerAdvancedTools {\n width: calc(100% + 40px);\n }\n\n .GPlayerAdvancedTools > .GPlayerRemove, .GPlayerAdvancedTools > .GPlayerInfo, .GPlayerAdvancedTools > .GPlayerExtent {\n display: none;\n }\n\n .GPlayerAdvancedToolsContextual {\n display: inline-flex;\n }\n\n [id^=GPopacity_ID_] {\n flex-grow: 0.6;\n }\n}\n",".gpf-btn-icon-pointer::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask: url(\"img/reticle.svg\") center no-repeat;\n mask: url(\"img/reticle.svg\") center no-repeat;\n background-color: var(--text-inverted-blue-france);\n}\n\n.gpf-btn-icon-pointer {\n min-width: 2.5rem;\n position: relative;\n border-top-right-radius: 4px;\n}\n\n.GPlocationStageFlexInput:has(.GPlocationStageRemove) > .gpf-btn-icon-pointer {\n border-top-right-radius: 0px;\n}\n\n.gpf-btn-icon-remove {\n height: 2.5rem;\n width: 2.5rem;\n}\n\n.gpf-btn-icon-label {}\n.gpf-btn-icon-remove::after {\n -webkit-mask: url(\"img/dsfr/close-line.svg\") center no-repeat;\n mask: url(\"img/dsfr/close-line.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-add::after {\n -webkit-mask: url(\"img/GPlocationOptions.png\") -51px center no-repeat;\n mask: url(\"img/GPlocationOptions.png\") -51px center no-repeat;\n width: 2.5rem;\n height: 2.5rem;\n}\n\n.GPlocationOriginLabel {\n display: none;\n pointer-events: none;\n}\n\n[class^=\"GPlocationPoint-\"] {\n padding: 0;\n}\n\n[id^=\"GPlocationPoint_\"] {\n justify-content: left;\n}\n\n.GPlocationStageFlexInput {\n flex-wrap: wrap;\n width: 281px;\n}\n\n.GPlocationStageAdd {\n flex-basis: 65%;\n width: 0px;\n min-height: 40px;\n padding: 0.25rem 0.75rem 0.25rem 2.5rem;\n text-align: left;\n}\n\n.GPlocationOriginLabel {\n flex-basis: fit-content;\n}\n\n.GPlocationOriginPointerImg {\n flex-basis: 2.5em;\n}\n\n.GPlocationStageFlexInput input {\n flex-basis: 33%;\n flex-grow: 1;\n}\n","/* MEASURE TOOL */\n\n.GPmeasureTooltip {\n background-color: var(--background-contrast-grey);\n padding: 0.2rem 0.4rem;\n opacity: 0.8;\n}\n\n",".gpf-btn-icon-area::after {\n -webkit-mask: url(\"img/mesurer-surface.svg\") center no-repeat;\n mask: url(\"img/mesurer-surface.svg\") center no-repeat;\n}",".gpf-btn-icon-length::after {\n -webkit-mask: url(\"./img/mesurer-distance.svg\") center no-repeat;\n mask: url(\"./img/mesurer-distance.svg\") center no-repeat;\n}",".gpf-btn-icon-azimuth::after {\n -webkit-mask: url(\"img/mesurer-azimuth.svg\") center no-repeat;\n mask: url(\"img/mesurer-azimuth.svg\") center no-repeat;\n}",".gpf-btn-icon-position::after {\n -webkit-mask: url(\"img/position.svg\") center no-repeat;\n mask: url(\"img/position.svg\") center no-repeat;\n}\n\ndiv[id^=GPmousePositionCoordinate-] input {\n color: inherit;\n}\n\ndiv[id^=GPmousePositionAltitude-],\ndiv[id^=GPmousePositionCoordinate-] > div {\n display: flex;\n justify-content: space-between;\n}\n\ndiv[id^=GPmousePositionCoordinate-] input[readonly] {\n font-size: 1rem\n}",".gpf-btn-icon-reverse::after {\n -webkit-mask: url(\"img/reversegeocode.svg\") center no-repeat;\n mask: url(\"img/reversegeocode.svg\") center no-repeat;\n}\n\n.gpf-flex-reverse {\n /* INFO : surcharge de .gpf-flex par defaut */\n display: flex;\n align-items: flex-start;\n flex-direction: column;\n justify-content: space-evenly;\n}\n\n.gpf-panel-reverse {\n /* INFO : surcharge de .gpf-panel par defaut */\n width: 100%;\n}\n",".gpf-btn-icon-route::after {\n -webkit-mask: url(\"img/route.svg\") center no-repeat;\n mask: url(\"img/route.svg\") center no-repeat;\n}\n\n.GProuteFormMini {\n max-height: 78px;\n}\n\n.GProuteFormMini .GPelementShow {\n color: var(--grey-200-850);\n}\n\n.GProuteModeLabel {\n margin-bottom: 0.5rem;\n}\n\n[id^=GProuteForm-] p.gpf-label {\n margin-top: 0;\n margin-bottom: 0.2rem;\n}\n\n[id^=\"GProuteForm-\"] > .GPpanelFooter {\n position: unset;\n}\n\n[id^=\"GProuteSubmit-\"] {\n width: 80%;\n}\n\n[id^=\"GProuteForm-\"] > [class^=\"GPlocationPoint-\"] {\n margin-top: 0;\n}\n\n[id^=\"GProuteForm-\"] > p.gpf-label {\n margin-top: 1rem;\n}\n\n[id^=\"GProuteForm-\"].GProuteFormMini > p.gpf-label {\n margin-top: 0;\n}\n\n[id^=\"GProuteForm-\"] > p.gpf-label ~ p.gpf-label {\n margin-top: 0.5rem;\n}\n\n/* Reset picto */\nbutton[id^=GProuteReset-], div[id^=GProuteResultsNew-] {\n min-width: 2.5em;\n}\n\ndiv[id^=GProuteResultsValueDist],\ndiv[id^=GProuteResultsValueTime] {\n color: var(--text-action-high-blue-france);\n font-weight: bold;\n}\n\n.GProuteResultsShowDetailsDiv {\n justify-content: left;\n}\n\ndiv:has(input[id^=GProuteResultsShowDetails]) + div[id^=GProuteResultsDetails-] {\n max-height: 0;\n opacity: 0;\n overflow: hidden;\n}\n\ndiv:has(input[id^=GProuteResultsShowDetails]:checked) + div[id^=GProuteResultsDetails-] {\n max-height: 200px;\n opacity: 1;\n overflow-y: scroll;\n}\n\ndiv[id^=GProuteResultsDetails-] {\n max-width: 350px;\n transition: max-height 0.5s ease-in-out 0.25s, opacity 0.5s ease-in-out 0.25s;\n display: grid;\n grid-template-columns: 30px 1fr;\n gap: 0.5rem 5px;\n}\n\n.GProuteResultsDetailsNumber,\n.GProuteResultsDetailsInstruction {\n display: inline-block;\n}\n\n.GProuteResultsDetailsNumber {\n font-weight: bold;\n text-align: right;\n vertical-align: top;\n}\n\n.GProuteExclusionsOptions {\n gap: 0.5rem;\n color: var(--text-label-grey);\n}\n\n/* Mode Mobile */\n\n@media (max-width: 576px) {\n .gpf-mobile-fullscreen div[id^=\"GProuteResultsDetails-\"] {\n max-width: unset;\n }\n}",".gpf-widget-padding {\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.gpf-widget-color {\n background-color: var(--background-default-grey);\n}\n\n.gpf-panel__items_searchengine,\n.GPlabelTitle {\n color: var(--text-action-high-blue-france);\n border-bottom: 1px solid var(--grey-900-175);\n padding: 12px;\n}\n\n\n.gpf-panel__items.GPautoCompleteProposal {\n height: 45px;\n box-sizing: border-box;\n margin-bottom: 0;\n}\n\n.GPlabelTitle {\n background-color: var(--background-open-blue-france);\n font-size: 1.0em;\n margin-bottom: 0;\n}\n\ndialog[id^=GPcoordinateSearchPanel],\ndialog[id^=GPadvancedSearchPanel] {\n max-height: unset;\n}\n\nselect[name^=\"inputSex\"].gpf-select {\n padding: unset;\n}\n\ninput[name^=\"inputSex\"].gpf-input {\n padding: unset;\n}\n\nbutton[id^=GPsearchInputReset] {\n width: 40px;\n height: 40px;\n}\n\n[id^=\"GPshowSearchDiv\"] {\n flex-direction: row-reverse;\n}\n\n[id^=\"GPsearchEngine-\"] {\n flex-direction: column;\n}\n\n[id^=\"GPsearchEngine-\"].gpf-widget-padding {\n align-items: center;\n}\n\ndiv.GPbuttonsContainer > button {\n width: 40px;\n}\n\n.GPsearchFirstLineWrapper {\n height: 40px;\n}\n\n.gpf-widget-padding > .GPsearchFirstLineWrapper {\n margin: 0.5rem 0;\n}\n\n.GPbuttonsContainer {\n height: 56px;\n padding-left: 10px;\n}\n\n.GPsearchRadioContainer {\n display: flex;\n flex-direction: row;\n background-color: var(--background-default-grey);\n white-space: nowrap;\n max-height: 0;\n overflow: clip;\n transition: max-height 0.3s;\n gap: 1rem;\n}\n\n[id^=\"GPsearchEngine-\"]:has([id^=\"GPshowSearchByCoordinate-\"][aria-pressed=\"true\"]) > .GPsearchRadioContainer,\n[id^=\"GPsearchEngine-\"]:focus-within > .GPsearchRadioContainer,\n[id^=\"GPsearchEngine-\"]:hover > .GPsearchRadioContainer {\n max-height: 3rem;\n}\n\n.GPsearchRadioElements {\n display: flex;\n flex-direction: row;\n gap: 1rem;\n}\n\n.GPshowAdvancedSearch {\n color: var(--text-action-high-blue-france);\n text-decoration: underline;\n cursor: pointer;\n display: flex;\n align-items: center;\n}\n\n.gpf-btn-icon-search {\n background-image: url(\"img/dsfr/search-line.svg\");\n background-repeat: no-repeat;\n background-position: center center;\n /* cas particulier ou on n'utilise pas la class gpf-icon-button pour la largeur à cause du DOM du control*/\n width: 40px;\n}\n\nform[id^=GPsearchInput-] {\n margin-left: 8px;\n width: 300px;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] {\n max-width: 300px;\n border: none;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"] {\n border-radius: 0 0.25rem 0 0;\n}\n\n.gpf-btn-icon-search-advanced::after {\n -webkit-mask: url(\"img/dsfr/recherche-avancee.svg\") center no-repeat;\n mask: url(\"img/dsfr/recherche-avancee.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-search-geolocate::after {\n -webkit-mask: url(\"img/dsfr/localiser.svg\") center no-repeat;\n mask: url(\"img/dsfr/localiser.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-search-coordinate::after {\n -webkit-mask: url(\"img/dsfr/coordonnees.svg\") center no-repeat;\n mask: url(\"img/dsfr/coordonnees.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-search-reset {\n background-position: -25px center;\n}\n\ndialog[id^=GPcoordinateSearchPanel],\ndialog[id^=\"GPadvancedSearchPanel\"] {\n position: absolute;\n top: 66px;\n width: inherit;\n}\n\n/* Autocomplete list / geocode results */\n\n[id^=\"GPautocompleteResults-\"] {\n border: 1px solid var(--background-open-blue-france);\n}\n\ndiv[id^=GPautoCompleteList],\ndialog[id^=GPgeocodeResultsList] {\n width: 320px;\n position: absolute;\n height: fit-content;\n background-color: var(--background-default-grey);\n max-height: unset;\n}\n\ndiv[id^=GPautoCompleteList] {\n top: 42px;\n margin-left: 2px;\n}\n\n.position-container-top-left [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-bottom-left [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-top-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-bottom-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList] {\n width: 340px;\n position: relative;\n top: unset;\n margin-left: 8px;\n}\n\n.position-container-top-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-bottom-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList] {\n margin-right: 10px;\n}\n\n.gpf-widget-padding > div[id^=GPautoCompleteList] {\n top: 100%;\n width: 100%;\n margin: 0;\n}\n\ndialog[id^=GPgeocodeResultsList] {\n position: absolute;\n top: 55px;\n border-radius: 4px;\n overflow: hidden;\n}\n\ndiv[id^=GPgeocodeResults-] {\n width: 100%;\n position: relative;\n background-color: var(--background-default-grey);\n max-height: 240px;\n overflow-y: auto;\n}\n\n[id^=\"GPautocompleteResultsSuggest\"],\n[id^=\"GPautocompleteResultsLocation\"] {\n height: 225px;\n}\n\n/* Mode Mobile */\n@media (max-width: 576px) {\n\n .gpf-widget-padding > .GPsearchFirstLineWrapper {\n flex-direction: column;\n height: fit-content;\n }\n\n .GPsearchRadioContainer {\n flex-direction: column;\n align-items: center;\n }\n\n dialog[id^=GPcoordinateSearchPanel],\n dialog[id^=\"GPadvancedSearchPanel\"] {\n position: relative;\n top: unset;\n margin-left: unset;\n }\n\n .GPsearchRadioContainer {\n gap: 0;\n margin: 0 8px;\n }\n\n form[id^=GPsearchInput-] {\n margin-left: 0;\n }\n\n [id^=\"GPsearchEngine-\"]:has([id^=\"GPshowSearchByCoordinate-\"][aria-pressed=\"true\"]) > .GPsearchRadioContainer,\n [id^=\"GPsearchEngine-\"]:focus-within > .GPsearchRadioContainer,\n [id^=\"GPsearchEngine-\"]:hover > .GPsearchRadioContainer {\n max-height: 4rem;\n }\n}\n",".gpf-btn-icon-toolbox {\n background-repeat: no-repeat;\n background-image: url(\"img/GPtoolBoxMeasureOpen.png\");\n background-position: 3px center;\n}",".gpf-btn-icon-zoom-in {\n height: inherit;\n width: inherit;\n}\n\n.gpf-btn-icon-zoom-in::after {\n -webkit-mask: url(\"img/dsfr/zoom-in.svg\") center no-repeat;\n mask: url(\"img/dsfr/zoom-in.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-zoom-out {\n height: inherit;\n width: inherit;\n}\n\n.gpf-btn-icon-zoom-out::after {\n -webkit-mask: url(\"img/dsfr/zoom-out.svg\") center no-repeat;\n mask: url(\"img/dsfr/zoom-out.svg\") center no-repeat;\n}\n","/* surcharge en mode dsfr */\n.ol-custom-full-screen button {\n height: 40px;\n width: 40px;\n background-position: center center;\n background-repeat: no-repeat;\n}\n.ol-custom-full-screen button.ol-custom-full-screen-false::after {\n -webkit-mask: url(\"img/dsfr/fullscreen.svg\") center no-repeat;\n mask: url(\"img/dsfr/fullscreen.svg\") center no-repeat;\n}\n.ol-custom-full-screen button.ol-custom-full-screen-true::after {\n -webkit-mask: url(\"img/dsfr/fullscreen-off.svg\") center no-repeat;\n mask: url(\"img/dsfr/fullscreen-off.svg\") center no-repeat;\n}",".gpf-btn-icon-overviewmap::after {\n -webkit-mask: url(\"img/overviewmap.svg\") center no-repeat;\n mask: url(\"img/overviewmap.svg\") center no-repeat;\n}\n\n.ol-overviewmap:has(> .gpf-btn-icon[aria-pressed=\"true\"])::after {\n transform: translateY(-100%);\n}\n\n.ol-overviewmap:not(.ol-collapsed) {\n background: unset;\n}",".gpf-btn-icon-legends::after {\n -webkit-mask: url(\"img/dsfr/legends.svg\") center no-repeat;\n mask: url(\"img/dsfr/legends.svg\") center no-repeat;\n}\n\n.gpf-btn-header-legends {\n z-index: 2;\n position: absolute;\n width: 26px;\n height: 26px;\n}\n\n.gpf-btn-icon-header-legends {\n background-image: url(\"img/dsfr/header-legends.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n}\n\n.gpf-panel__body_legends {\n overflow: auto;\n max-height: 300px !important;\n}\n\n.gpf-panel__title_legends {\n color: #101092;\n padding: 12px 15px;\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n margin: 0;\n right: -16px;\n}\n.gpf-panel__header_legends {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-content: center;\n background: #E3E3FD;\n height: 48px;\n}\n\nbutton[id^=GPcollapseLegend_ID_] {\n position: absolute;\n top: 8px;\n right: 0;\n}\n\n.gpf-btn-icon-legends-collapse {\n box-shadow: none;\n}\n\n.gpf-btn-icon-legends-collapse::after {\n -webkit-mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n transition: transform 0.2s ease-out 0s;\n}\n\n.gpf-btn-icon-legends-collapse[aria-pressed=\"true\"]::after {\n box-shadow: none;\n transform: rotate(180deg);\n}\n\n.legend-entry-container {\n position: relative;\n top: 0;\n border-bottom: 1px solid var(--border-default-grey);\n overflow: hidden;\n}\n\n.legend-entry-container {\n background-color: var(--background-overlap-grey);\n}\n\n.gpf-label-legends-name {\n width: calc(100% - 40px);\n line-height: 56px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding-left: 4px;\n}\n\nbutton[id^=GPcollapseLegend_ID_][aria-pressed=\"true\"] + .legend-entry-image {\n opacity: 1;\n}\n\nbutton[id^=GPcollapseLegend_ID_][aria-pressed=\"true\"] + .legend-entry-image {\n max-height: 300px;\n overflow: auto;\n border-top: 1px solid var(--border-default-grey);\n padding: 10px 0;\n}\n\n.legend-entry-image {\n display: block;\n max-height: 0;\n opacity: 0;\n transition: max-height 0.5s ease-out 0s, opacity 0.5s ease-out 0s;\n}\n\n.legends-entries {\n padding: 0 16px;\n}\n",".gpf-btn-icon-catalog::after {\n -webkit-mask: url(\"img/dsfr/catalog.svg\") center no-repeat;\n mask: url(\"img/dsfr/catalog.svg\") center no-repeat;\n}\n\n/* Mode mobile doit prendre le dessus */\n\n@media (max-width: 576px) {\n .gpf-mobile-fullscreen .GPtabContent {\n max-height: unset !important;\n height: 100vh;\n }\n}",".gpf-btn-icon-territories::after {\n -webkit-mask: url(\"img/dsfr/territories.svg\") center no-repeat;\n mask: url(\"img/dsfr/territories.svg\") center no-repeat;\n}\n\n.gpf-btn-header-territories {\n z-index: 2;\n position: absolute;\n width: 26px;\n height: 26px;\n}\n\n.gpf-btn-icon-header-territories {\n background-image: url(\"img/dsfr/header-territories.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n}\n\n.gpf-panel__body_territories {\n overflow: auto;\n max-height: 300px;\n}\n\n.gpf-panel__title_territories {\n color: #101092;\n padding: 12px 15px;\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n margin: 0;\n right: -16px;\n}\n.gpf-panel__header_territories {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-content: center;\n background: #E3E3FD;\n height: 48px;\n}\n\n#GPterritoriesPanelClose {\n top: 0;\n right: 0;\n}\n\n/* surchage tile */\n.gpf-tile {\n height: 150px;\n width: 150px;\n}\n.tiles-reduce div.fr-tile {\n height: unset;\n width: unset;\n padding: unset;\n}\n.fr-tile:hover {\n background-color: var(--background-contrast-grey);\n}\n.fr-tile__title::before {\n background-image: unset;\n}\n.gpf-tile__header {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.territories-entries {\n display: grid;\n}\n/* direction */\ndialog.tiles-direction { }\n.territories-entries.tiles-direction {}\n\n/* nombre de tuiles */\n.tiles-direction.tiles-0 {\n max-height: none !important;\n grid-template-columns: repeat(3, 1fr);\n}\n.tiles-direction.tiles-1 {\n grid-template-columns: repeat(1, 1fr);\n}\n.tiles-direction.tiles-2 {\n grid-template-columns: repeat(2, 1fr);\n}\n.tiles-direction.tiles-3 {\n grid-template-columns: repeat(3, 1fr);\n}\n.tiles-direction.tiles-4 {\n grid-template-columns: repeat(4, 1fr);\n}\n\ndiv.fr-tile div.fr-tile__header div.fr-tile__icon,\ndiv.fr-tile div.fr-tile__header div.fr-tile__thumbnail {\n display: block;\n}\n\n/* reduce */\n.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__icon,\n.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__thumbnail {\n display: none;\n}\n\n.fr-tile__icon {\n /* background-image: url(\"img/dsfr/territories-small.svg\"); */\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n height: 50px;\n width: 50px;\n}\n\n.tiles-thumbnail div.fr-tile div.fr-tile__header div.fr-tile__icon {\n display: none;\n}\n.tiles-icon div.fr-tile div.fr-tile__header div.fr-tile__thumbnail {\n display: none;\n}\n\n/* affichage plein écran sur petit écran */\n@media (max-width: 576px) {\n /* si 4 tuiles de large, on force 3 tuiles de large */\n .tiles-direction.tiles-4 {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n\n/* sur tout petit écran, on force 2 colonnes max */\n@media (max-width: 382px) {\n .tiles-direction.tiles-0 {\n grid-template-columns: repeat(2, 1fr);\n }\n .tiles-direction.tiles-3 {\n grid-template-columns: repeat(2, 1fr);\n }\n .tiles-direction.tiles-4 {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n","button[id^=\"GPshowControlListPicto-\"][aria-pressed=\"true\"] + dialog {\n width: 370px;\n}\n\ndiv[id^=\"GPcontrolList-\"] .GPshowOpen > span {\n font-size: 32px;\n position: absolute;\n transform: translate(-5px, -2px);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content {\n display: flex;\n flex-direction: column;\n padding: 0 1.5rem;\n overflow: auto;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content:not(:has(~ .gpf-panel__footer)) {\n padding-bottom: 2rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div {\n display: flex;\n flex-direction: row;\n column-gap: 1rem;\n align-items: center;\n padding: 0.5rem 0.5rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div:hover {\n background-color: var(--hover);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div:hover > button {\n background-color: var(--hover);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button {\n height: 40px;\n width: 40px;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button::after {\n background-color: var(--text-default-grey);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > div {\n display: flex;\n flex-direction: column;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > div > span:nth-child(2) {\n color: var(--text-mention-grey);\n font-size: 0.75rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__footer {\n padding: 1rem 2rem 2rem 2rem;\n background-color: var(--background-lifted-grey);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__footer > button {\n width: 100%;\n justify-content: center;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/bundle/Dsfr.js b/dist/bundle/Dsfr.js index 30f40797..16f715d8 100644 --- a/dist/bundle/Dsfr.js +++ b/dist/bundle/Dsfr.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */ /*! diff --git a/dist/bundle/GpfExtOL.css b/dist/bundle/GpfExtOL.css index 581dd379..a5c052a0 100644 --- a/dist/bundle/GpfExtOL.css +++ b/dist/bundle/GpfExtOL.css @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */ @@ -55,5 +55,5 @@ * @license Licensed under MIT license * See https://raw.githubusercontent.com/proj4js/proj4js/master/LICENSE.md * @version 2.15.0 - */div[id^=GPlayerSwitcher-]{right:8px;top:8px}div[id^=GPlayerSwitcher-] [draggable]{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;user-select:none;-khtml-user-drag:element;-webkit-user-drag:element}div[id^=GPlayerSwitcher-] input[type=checkbox]+button+dialog{max-height:0}input[id^=GPshowLayersList-]{display:none}button[id^=GPshowLayersListPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowLayersListPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}.position>div[id^=GPlayerSwitcher-]>dialog[id^=GPlayersList]{position:absolute}.position>div[id^=GPlayerSwitcher-]>button[id^=GPshowLayersListPicto-]{float:unset}dialog[id^=GPlayersList]{float:left;position:relative}button[id^=GPshowLayersListPicto-]{float:right}dialog[id^=GPlayersList]{border-bottom-right-radius:0;opacity:0}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{height:auto;max-height:inherit;opacity:1}.GPlayerCounter{background:#fff;border-radius:100px;color:#000;display:inline-block;font-size:12px;left:15px;line-height:1;min-width:15px;padding:2px 0 1px;position:relative;text-align:center;top:-15px}.GPlayerSwitcher_layer{border-bottom:1px dotted #ccc;overflow:hidden;position:relative;top:0}dialog[id^=GPlayersList] .GPlayerSwitcher_layer:last-child{border-bottom:none}.GPlayerAdvancedTools{display:block;max-height:0;opacity:0;transition:max-height .5s ease-out 0s,opacity .5s ease-out 0s}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{opacity:1}[id^=GPlayerInfoPanel]{left:unset;right:100%}div[id^=GPlayerInfoContent]{max-height:200px;overflow-y:auto;padding-left:10px;padding-right:10px;position:relative}div[id^=GPgetFeatureInfo-]{left:10px;top:260px}dialog:has(button.GPcloseGetFeatureInfo[aria-pressed=true]){display:block;height:auto;opacity:100%;visibility:visible;width:350px}dialog:has(button.GPcloseGetFeatureInfo[aria-pressed=false]){display:none;opacity:0;visibility:hidden}dialog[id^=GPgetFeatureInfoPanel-]{left:47px;max-height:52vh;overflow-x:hidden;position:absolute;top:2px}.GPgetFeatureInfoAccordionGroup{max-height:calc(52vh - 92px);overflow-y:scroll;scrollbar-width:thin}.GPgetFeatureInfoAccordionContent{overflow-x:scroll;scrollbar-width:thin}.waiting-div-container{align-items:center;display:flex;justify-content:center}.lds-ring,.lds-ring div{box-sizing:border-box}.lds-ring{display:inline-block;height:40px;position:relative;width:40px}.lds-ring div{animation:lds-ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border:4px solid transparent;border-radius:50%;border-top-color:currentcolor;box-sizing:border-box;display:block;height:32px;margin:4px;position:absolute;width:32px}.lds-ring div:first-child{animation-delay:-.45s}.lds-ring div:nth-child(2){animation-delay:-.3s}.lds-ring div:nth-child(3){animation-delay:-.15s}@keyframes lds-ring{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}[id^=GPsearchEngine-]{display:flex;left:46px;top:8px}#position-container-bottom-right>[id^=GPsearchEngine-],#position-container-top-right>[id^=GPsearchEngine-]{align-items:end;flex-direction:column}button[id^=GPshowSearchEnginePicto]{display:inline-block;transition:border-radius 0s ease-out 0s;transition-delay:.5s}button[id^=GPshowSearchEnginePicto][aria-pressed=true]{transition:border-radius .5s ease-out 0s}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]{border-bottom-right-radius:0;transition-delay:0s}button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]~div button[id^=GPshowAdvancedSearch],button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]~div button[id^=GPshowGeolocate],button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]~div button[id^=GPshowSearchByCoordinate]{display:none}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]~div button[id^=GPshowAdvancedSearch],button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]~div button[id^=GPshowGeolocate],button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]~div button[id^=GPshowSearchByCoordinate]{display:inline-block}[id^=GPshowSearchEngine-]+button+form[id^=GPsearchInput-]{max-width:0}form[id^=GPsearchInput-]{display:inline-block;overflow:hidden;position:relative;transition:max-width .5s ease-out 0s}button[id^=GPsearchInputReset]{border:unset;position:absolute;right:0;top:0}button[id^=GPshowAdvancedSearch]{transition:border-radius 0s ease-out 0s;transition-delay:.5s}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{bottom:unset;height:inherit;overflow:hidden;vertical-align:top}form[id^=GPadvancedSearchForm],form[id^=GPcoordinateSearchForm]{max-height:250px;overflow-y:auto;padding-left:15px;padding-right:15px}input[id^=GPadvancedSearchSubmit],input[id^=GPcoordinateSearchSubmit]{margin-bottom:15px;margin-top:10px}[id^=GPshowSearchDiv]{display:flex}.GPsearchFirstLineWrapper{align-items:center;display:flex;flex-direction:row}.GPlabelTitle{font-weight:700}[id^=GPautocompleteResults-]{display:flex;flex-direction:column;width:100%}[id^=GPautoCompleteList],dialog[id^=GPgeocodeResultsList]{margin-left:33px}dialog[id^=GPgeocodeResultsList]{border-radius:4px;bottom:unset;height:inherit;top:35px}[id^=GPautocompleteResultsLocation],[id^=GPautocompleteResultsSuggest]{overflow-y:auto;padding:0;width:inherit}@media (max-width:576px){button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]{max-width:calc(100vw - 180px)}}div[id^=GPmousePosition-]{bottom:8px;left:10px}button[id^=GPshowMousePositionPicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowMousePositionPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}dialog[id^=GPmousePositionPanel-]{bottom:0}[id^=GPmousePositionPanel-]{height:inherit;left:34px;overflow:hidden;position:absolute;top:inherit}div[id^=GPmousePositionBasicPanel]{padding:10px 15px;position:relative}div[id^=GPmousePositionSettings-]{display:block;max-height:0;opacity:0;padding-left:20px;padding-right:20px}button[id^=GPshowMousePositionSettings]{border:unset}div[id^=GPmousePosition-] button[id^=GPshowMousePositionSettings][aria-pressed=true]+div[id^=GPmousePositionSettings-]{max-height:inherit;opacity:1;padding-bottom:20px}button[id^=GPmousePositionSettings-]{overflow:hidden;padding-left:0 15px}div[id^=GPmousePositionCoordinate-] input.error{border:1px solid red}div[id^=GPmousePositionCoordinate-] input[readonly]{border:1px solid transparent;padding:2px;text-align:right}input[id^=GPmousePositionLat-],input[id^=GPmousePositionLon-]{width:120px}span[id^=GPmousePositionAlt-]{display:inline-block;line-height:20px;padding:2px;text-align:right;width:120px}.GPSexagesimal{width:30px}.GPSexagesimalsec{width:45px}span[id^=GPmousePositionCloseEdit]{background-position:-18px 0;margin-left:5px}img[id^=GPmousePositionMarker]:hover{cursor:pointer;opacity:.7}#GPmapCenter{background-image:url(data:image/png;base64,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);display:none;height:50px;left:50%;margin-left:-25px;margin-top:-25px;position:absolute;top:50%;width:50px}#GPmapCenter.GPmapCenterVisible{display:block}div[id^=GPdrawing-]{right:8px;top:48px}button[id^=GPshowDrawingPicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowDrawingPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GPdrawingPanel-]{bottom:unset;height:inherit;left:-276px;overflow:hidden;position:absolute;top:0}div[id^=GPdrawingBasicPanel-]{padding:10px 15px}.drawing-tool-section:not(:last-child){border-bottom:1px solid #ddd}.drawing-tool-section{padding:2px 5px 5px}.drawing-tool-section-title{font-size:.75em;margin-bottom:0;margin-top:0;text-transform:uppercase}div.drawing-tools-flex-display{justify-content:center;margin:12px 0;padding:0}.drawing-tools-flex-display{align-items:center;display:flex}.drawing-tool:not(:last-child){margin-right:10px}div[id^=GProute-]{left:10px;top:100px}button[id^=GPshowRoutePicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowRoutePicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GProutePanel-]{height:inherit;left:34px;position:absolute;top:0}button[id^=GProuteReset]:hover{opacity:1}form[id^=GProuteForm]>.GPlocationStageFlexInput{margin-top:5px}form[id^=GProuteForm]>.GPlocationStageFlexInputHidden{margin-top:0}form[id^=GProuteForm].GProuteFormMini .GPlocationStageFlexInput:first-child{margin-top:5px}label.GProuteOriginPointerImg[id*=GProuteOriginPointerImg]{border-bottom-right-radius:3px;border-right:1px solid #999;border-top-right-radius:3px;width:28px}input[id*=GProuteOriginPointer]+.GProuteOriginPointerImg{background-position:-1px -1px}input[id*=GProuteOriginPointer]:checked+.GProuteOriginPointerImg{background-position:-29px -1px}.GProuteStageRemove,div[id^=GProuteStageAdd]{border:none;cursor:pointer;width:28px}.GProuteFormMini{overflow:hidden;-webkit-transform:translateY(-5px);transform:translateY(-5px)}.GProuteFormMini .GPpanelFooter,.GProuteFormMini .GProuteStageRemove,.GProuteFormMini button[id^=GPshowRouteExclusionsPicto],.GProuteFormMini button[id^=GPshowRouteExclusions][aria-pressed=true]+div[id^=GProuteExclusions],.GProuteFormMini div[id^=GProuteModeChoice],.GProuteFormMini div[id^=GProuteStageAdd],.GProuteFormMini>:not(.selected){display:none}.GProuteStageRemove{background-position:-84px 0}div[id^=GProuteStageAdd]{background-position:-56px 0}div[id^=GProuteModeChoice]{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around;margin:15px 0}div[id^=GProuteTransportChoice]>.GProuteTransportChoice{display:inline-flex}button[id^=GPshowRouteExclusions]{border:unset;bottom:unset;position:absolute;right:0;transition:all .5s ease-out 0s}button[id^=GPshowRouteExclusions][aria-pressed=true]{transform:translateY(-100%) rotateX(180deg)}button[id^=GPshowRouteExclusions][aria-pressed=false]+div[id^=GProuteExclusions]{margin-bottom:0;max-height:0;opacity:0}button[id^=GPshowRouteExclusions][aria-pressed=true]+div[id^=GProuteExclusions]{display:block;margin-bottom:15px;max-height:76px;opacity:1}div[id^=GProuteExclusions]{overflow:hidden;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s,margin .3s ease-in-out .25s}div[id^=GProuteResultsPanel]{padding:15px}div[id^=GProuteResults-]{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;-webkit-justify-content:space-between;-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-align-items:center;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:10px}div[id^=GProuteResultsNew]:hover{opacity:1}[class*=GPlocationPoint]{position:relative}div[id^=GPlocationAutoCompleteResult]{background-color:var(--background-default-grey);border:1px solid var(--grey-900-175);border-top:none;left:0;max-height:140px;overflow-y:auto;top:45px}div[id^=GPlocationAutoCompleteList]{position:absolute;width:calc(100% - 56px);z-index:2}div[id^=GPisochron-]{left:10px;top:140px}button[id^=GPshowIsochronPicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowIsochronPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GPisochronPanel-]{height:inherit;left:34px;position:absolute;top:0;z-index:2}input[id^=GPisochronOriginPointer]+.GPisochronOriginPointerImg{background-position:-1px -1px}input[id^=GPisochronOriginPointer]:checked+.GPisochronOriginPointerImg{background-position:-29px -1px}div[id^=GPisochronChoice]{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex}.GPisochronFormMini{max-height:58px;overflow:hidden}.GPisochronFormMini .GPpanelFooter,.GPisochronFormMini .GPpanelFooter button[id^=GPisochronReset-],.GPisochronFormMini .GPpanelFooter input[id^=GPisochronSubmit-],.GPisochronFormMini [id^=GPisoExclusions-],.GPisochronFormMini [id^=GPisochronChoice-],.GPisochronFormMini [id^=GPisochronDirectionChoice-],.GPisochronFormMini [id^=GPisochronPointLabelP-],.GPisochronFormMini [id^=GPisochronTransportChoice-],.GPisochronFormMini [id^=GPisochronValueChron-],.GPisochronFormMini [id^=GPisochronValueChronLabelP-],.GPisochronFormMini button[id^=GPshowIsoExclusionsPicto-]{display:none}.GPisochronFormMini{max-height:78px}.GPisochronFormMini .GPelementShow{color:var(--grey-200-850)}div[id^=GPisochronTransportChoice]>div{display:inline-flex;gap:1rem}button[id^=GPshowIsoExclusions]{border:unset;bottom:unset;position:absolute;right:0;transform:translateY(-100%);transition:all .5s ease-out 0s}button[id^=GPshowIsoExclusions][aria-pressed=true]{transform:translateY(-100%) rotateX(180deg)}button[id^=GPshowIsoExclusions][aria-pressed=false]+div[id^=GPisoExclusions]{margin-bottom:0;max-height:0;opacity:0}button[id^=GPshowIsoExclusions][aria-pressed=true]+div[id^=GPisoExclusions]{display:block;margin-bottom:15px;max-height:76px;opacity:1}.GPisochronFormMini button[id^=GPshowIsoExclusions][aria-pressed=true]+div[id^=GPisoExclusions]{display:none}div[id^=GPisoExclusions]{overflow:hidden;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s,margin .3s ease-in-out .25s}div[id^=GPreverseGeocoding-]{left:10px;top:180px}button[id^=GPshowReverseGeocodingPicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowReverseGeocodingPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GPreverseGeocodingPanel-]{height:inherit;left:34px;position:absolute;top:0}[id^=GPreverseGeocodingForm-]{max-height:270px;overflow-y:auto;padding-left:15px;padding-right:15px;padding-top:10px;position:relative}input[id^=GPreverseGeocodingSubmit-]{margin-bottom:15px;margin-top:5px}div[id^=GPreverseGeocodingResultsList-]{max-height:210px;overflow-y:auto;position:relative}div[id^=GPimport-]{left:10px;top:220px}button[id^=GPshowImportPicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowImportPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GPimportGetCapPanel-],[id^=GPimportMapBoxPanel-],[id^=GPimportPanel-]{height:inherit}[id^=GPimportPanel-]{position:absolute}[id^=GPimportGetCapPanel-],[id^=GPimportMapBoxPanel-]{position:relative;width:340px}form[id^=GPimportForm-]{padding:15px}div[id^=GPimportChoice-]{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-pack:distribute;justify-content:space-around}input[id^=GPimportSubmit-]{margin-top:20px}div[id^=GPimportGetCapResults-],div[id^=GPimportMapBoxResults-]{background-color:#fff;height:140px;overflow-y:auto;resize:vertical}input[id^=GPimportGetCapRubrique-],input[id^=GPimportGetCapRubrique-]~li,input[id^=GPimportMapBoxSource-],input[id^=GPimportMapBoxSource-]~div{display:none}input[id^=GPimportGetCapRubrique-]:checked~li,input[id^=GPimportGetCapRubrique-]~ul,input[id^=GPimportMapBoxSource-]:checked~div{display:block}input[id^=GPimportGetCapRubrique-]:checked~ul{display:none}.GPimportMapBoxpRoot{padding:5px}.GPEditorMapBoxContainer{border:1px solid #87cefa;border-radius:5px;-webkit-box-shadow:0 0 5px #000;box-shadow:0 0 5px #000;-webkit-box-sizing:border-box;box-sizing:border-box;height:auto;padding:5px;position:relative;width:100%}.GPEditorMapBoxSep{border:4px double #87cefa;display:block;width:50%}.GPEditorMapBoxLayersTitle,.GPEditorMapBoxThemesTitle{font-style:italic;font-weight:700;padding:5px}.disabled{opacity:.5;pointer-events:none}.GPEditorMapBoxGroupDetails{border:1px dotted #87cefa;border-radius:5px}.GPEditorMapBoxLayerContainer{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:100%;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.GPEditorMapBoxLayerContainer,.GPEditorMapBoxLayerTitleContainer{min-height:28px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.GPEditorMapBoxLayerTitleContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:inherit;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.GPEditorMapBoxLayerImageInput{display:none}.GPEditorMapBoxLayerImageLabel{background-image:url(data:image/png;base64,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);background-position:-56px 0;cursor:pointer;min-height:28px;min-width:24px}input[type=checkbox]:checked+.GPEditorMapBoxLayerImageLabel{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.GPEditorMapBoxLayerTypeImage{background-image:url(data:image/png;base64,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);background-position:0 0;background-repeat:no-repeat;border:1px solid gray;border-radius:5px;-webkit-box-shadow:2px 2px 1px #d3d3d3;box-shadow:2px 2px 1px #d3d3d3;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;margin-right:5px;min-height:30px;min-width:30px}.GPEditorMapBoxLayerTitleInput{display:none}.GPEditorMapBoxLayerTitleLabel{border:1px solid gray;border-radius:5px;-webkit-box-shadow:2px 2px 1px #d3d3d3;box-shadow:2px 2px 1px #d3d3d3;cursor:pointer;margin-left:5px;padding:5px;width:inherit;word-break:break-word}input[type=checkbox]:checked+.GPEditorMapBoxLayerTitleLabel{background-color:#d3d3d3}.GPEditorMapBoxToolsContainer{display:-webkit-box;display:-ms-flexbox;display:flex;height:28px;min-width:28px;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.GPEditorMapBoxToolsVisibilityInput{display:none}.GPEditorMapBoxToolsVisibilityInputDisable{display:"block"}.GPEditorMapBoxToolsVisibilityLabel{background-image:url(data:image/png;base64,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);background-position:-28px 0;cursor:pointer;height:28px;width:28px}.GPEditorMapBoxToolsVisibilityLabelDisable{cursor:pointer}input[type=checkbox]:checked+.GPEditorMapBoxToolsVisibilityLabel{background-position:0 0}.GPEditorMapBoxFilterContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-left:28px}.GPEditorMapBoxFilterJsonContainer{border-radius:5px;border-style:solid;border-width:1px;padding:5px}.GPEditorMapBoxFilterDisplayJson{cursor:pointer;height:125px;overflow:scroll;resize:vertical;width:175px}.GPEditorMapBoxThemesContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:175px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.GPEditorMapBoxThemeContainer{border-radius:5px;border-style:solid;border-width:1px;margin:5px;padding:5px;text-align:center;width:inherit}.GPEditorMapBoxThemeContainer:focus{background-color:#d3d3d3}.GPEditorMapBoxThemeImage{cursor:pointer;height:60px;width:120px}.GPEditorMapBoxThemeTitle{cursor:pointer;padding:5px}.GPEditorMapBoxThemeMessage{color:red;font-style:italic}.GPEditorMapBoxStyleContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-left:28px}.GPEditorMapBoxStyleJsonContainer{border-radius:5px;border-style:solid;border-width:1px;padding:5px}.GPEditorMapBoxStyleJsonDisplay{cursor:pointer;height:125px;overflow:scroll;resize:vertical;width:175px}.GPEditorMapBoxStyleToolsScaleContainer{border-radius:5px;border-style:solid;border-width:1px;padding:5px;width:-webkit-min-content;width:-moz-min-content;width:min-content}.GPEditorMapBoxStyleToolsScaleMaxContainer,.GPEditorMapBoxStyleToolsScaleMinContainer{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:175px;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.gp-json-string{color:green}.gp-json-number{color:#ff8c00}.gp-json-boolean{color:blue}.gp-json-null{color:#f0f}.gp-json-key{color:red}.GPEditorMapBoxLegendContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:nowrap;flex-wrap:nowrap;margin-left:28px}.GPEditorMapBoxLegendRenderContainer{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:5px;border-style:solid;border-width:1px;overflow-y:auto;padding:5px;width:175px}.GPEditorMapBoxLegendRender{border:1px solid transparent;border-radius:5px;-webkit-box-shadow:2px 2px 1px grey;box-shadow:2px 2px 1px grey;cursor:pointer;min-height:28px;min-width:28px}.GPEditorMapBoxLegendEditable{border-color:#000}.GPEditorMapBoxLegendTitle{margin-left:10px}.GPEditorMapBoxLegendToolsContainer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:5px;width:230px}.legend-not-implemented,.legend-unknow{background-color:#fff}.legend-unknow:before{color:red;content:"\2753";font-size:15px}.legend-not-implemented:before{color:red;content:"\2718";font-size:15px}.legend-circle-not-editable,.legend-line-not-editable{border-color:#fff}.legend-styling-div{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.legend-styling{width:50px}button[id^=GPshowElevationPathPicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowElevationPathPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GPelevationPathPanelReduce]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAAAaCAYAAABb9hlrAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH4gEQEjITjE0MtwAABGJJREFUaN7tmU1oHGUYx//PZEvSLjHVBLVaerCXSgo5tAqxiqBSxcSLWqknFaNdaYjiwUMOVVGi2EORJg0xtgbx0FKVgmirRU17SUpjPsCVUhQtVOr6ES8mmpqdnwffhekw2dndbMK23T8MzMzzzsz7PP/3+ZjnlaqooooqrlhY7gSol3Rr7tLMTlfNs3gAJqnGncvMJMk3M7+Q5xOB8zsl9Ui6XtI/ktZXzVs6MpmMNTU1rZa0SdJNknLkSNI0MCrpTzPLFkSQmR0FspIGJb1UNXHpHjM3N9dUW1t7u6QHJW2V9KukPyQhqcEt/i8lHctms8Oe5/0WR5SAW4AfgWGgC1ixjEo9AwwAXj7Fgb1AZ6WSMzk56QGbgQPA98AUsBvYAKwCVgJrgV3AKeAccAi4f3x8vCbOSA8AB91xGEguIzlZ/sdgFEmOnF43xq9UkoBrgD7gZ+B13/c3u/uPAG8AbwEdkpTNZjcCLwJngE+AtYV8YEW+VbxESvVxKfa5xBokZ19oTF+lkTMzM+MB9wJngT0hHT8KzP2bkGwHcB54Ktb2wNtAb5EGbgAaFhOzXegKYhDwQp6TwzvLvYgK1CPpwtkZYEtI9iowCowBAyHZeuCEi1pr4j4yBBwscmK7gZ7FJtYFSOq7TMgx4A7gB6AvnU5bSF4H1LtjVVCWSqUMeN550eN59SuWIMf+HDAL3LwEJC0bOSPdCRvpTljwOiT3RroTdQvM3QPanYfcFiHvAj4GjgCvLWDHT4EX8hZnUQQBCRf6tkWMD8bW/WVaiVEkDZZKDmWCI6kmD0FtwNfAugXsetG96qsIeSPwfhRBXoxy10n6XFKXpEPAy7kEDtwl6eHA8CeA5nJ2N2LuxXrEEjiaX2a9YpHvv2ODpFOS7gl84BVHVFLSntAjNZLeXGRLZK+knRHipyUNFONFrT3zlDsExhjZJNVLuqGE16+W1BjX6rmk3JY06v56w9gmaUuufRFCO3C3mZ0oAzmDki4G7nXkytJC+lgj3Qlr7ZnHzIK5JW4V09ozz0h3Yo0zdJOk3yVlHOELkY6kaUnXSnoynU6PNTc3F7RAUqmUSWqX1CLpA0nZ2Bzkqo5ScbKEvBNZSucrwS+zMnsI+DcqB8WV2Uuh6Loix/eGPKdf0g4z880Ml//6A/IO520VhdnZ2b8lHXM2fTQkrg1Eq3AleJ/rzX0mKVNQiFtmTLjk67mw1umIyTVxAXY61+904eS7SiMomUz6wGlJxyU9BswARzzPG5P0oaSfXJ4+m2v1eJ63VdKzzgbHo0J3Ik9MPVfiXM8XVdqYvety3sYwOSGSuhyJ35pZfyX24qampv5qaWl5T9JKSdvN7CHgC0n7JR11dm0Edklqk3Sjy/UHJiYmLsSWfsCQpDoz264qSq5Gi9lu8H0/73ZDmKCTrpq4UI65SnrOzIavRqJyG3ae522KqHinnefEbtiFCWpzJXSmTD91h83sl6vdo7SILe8qqqiiiisY/wFFCbN/sRPwgwAAAABJRU5ErkJggg==);background-position:-50px;background-repeat:no-repeat}[id^=GPelevationPathPanel-]{left:32px;position:absolute;top:6px}button[id^=GPelevationPathPanelInfo],button[id^=GPelevationPathPanelReduce]{display:none}.tooltipInit{opacity:0}.tooltipFadeIn{opacity:1;transition:opacity .3s ease 0s,transform 50ms ease 0s,top 50ms ease 0s,left 50ms ease 0s}.tooltipFadeOut{opacity:0;transition:opacity .5s ease 0s}div[id^=GPtoolbox-measure-main]{display:inline-block;float:left;left:78px;position:absolute;top:8px;z-index:1}div[id^=GPtoolbox-measure-widget]{border-radius:2px;display:none;left:auto}div[id^=GPtoolbox-measure-widget]>div{bottom:auto;display:block;left:auto;position:relative;right:auto;top:auto}div[id^=GPtoolbox-measure-main]:hover button[id^=GPtoolbox-measure-button]{background-color:rgba(0,60,136,.7)}div[id^=GPmeasureLength-]{left:42px;top:260px}div[id^=GPmeasureArea-]{left:74px;top:260px}div[id^=GPmeasureAzimuth-]{left:10px;top:260px}[id^=GPzoom-]{left:.5em;top:.5em}[id^=GPfullScreen-]{bottom:.5em;left:.5em}div[id^=GPoverviewMap-]{bottom:10.5em;left:.5em}.ol-overviewmap.ol-collapsed .ol-overviewmap-map{border:none;height:100px;width:100px}.ol-overviewmap .ol-overviewmap-box{border:2px solid red}.ol-overviewmap:not(.ol-collapsed) button{position:relative}div[id^=GPlegends-]{right:8px;top:58px}.position>div[id^=GPlegends-]>dialog[id^=GPlegendsPanel]{position:absolute}button[id^=GPshowLegendsPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowLegendsPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;height:auto;max-height:inherit;opacity:100%;visibility:visible;width:350px}div[id^=GPterritories-]{right:0;top:0}button[id^=GPshowTerritoriesPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowTerritoriesPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;height:auto;max-height:inherit;max-width:470px;opacity:100%;visibility:visible}dialog[id^=GPterritoriesPanel-]{position:absolute}button[id^=GPshowControlListPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowControlListPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}dialog[id^=GPcontrolListPanel-]{height:inherit;left:34px;position:absolute;top:0}div[id^=GPcatalog-]{right:0;top:0}button[id^=GPshowCatalogPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowCatalogPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;height:auto;max-height:inherit;opacity:100%;visibility:visible;width:370px}dialog[id^=GPcatalogPanel-]{height:inherit;left:34px;position:absolute;top:0}form[id^=GPcatalogForm]{padding:15px}.catalog-container-tabs .fr-accordion .fr-collapse--expanded{padding-bottom:0} + */div[id^=GPlayerSwitcher-]{right:8px;top:8px}div[id^=GPlayerSwitcher-] [draggable]{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;user-select:none;-khtml-user-drag:element;-webkit-user-drag:element}div[id^=GPlayerSwitcher-] input[type=checkbox]+button+dialog{max-height:0}input[id^=GPshowLayersList-]{display:none}button[id^=GPshowLayersListPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowLayersListPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}.position>div[id^=GPlayerSwitcher-]>dialog[id^=GPlayersList]{position:absolute}.position>div[id^=GPlayerSwitcher-]>button[id^=GPshowLayersListPicto-]{float:unset}dialog[id^=GPlayersList]{float:left;position:relative}button[id^=GPshowLayersListPicto-]{float:right}dialog[id^=GPlayersList]{border-bottom-right-radius:0;opacity:0}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{height:auto;max-height:inherit;opacity:1}.GPlayerCounter{background:#fff;border-radius:100px;color:#000;display:inline-block;font-size:12px;left:15px;line-height:1;min-width:15px;padding:2px 0 1px;position:relative;text-align:center;top:-15px}.GPlayerSwitcher_layer{border-bottom:1px dotted #ccc;overflow:hidden;position:relative;top:0}dialog[id^=GPlayersList] .GPlayerSwitcher_layer:last-child{border-bottom:none}.GPlayerAdvancedTools{display:block;max-height:0;opacity:0;transition:max-height .5s ease-out 0s,opacity .5s ease-out 0s}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{opacity:1}[id^=GPlayerInfoPanel]{left:unset;right:100%}div[id^=GPlayerInfoContent]{max-height:200px;overflow-y:auto;padding-left:10px;padding-right:10px;position:relative}div[id^=GPgetFeatureInfo-]{left:10px;top:260px}dialog:has(button.GPcloseGetFeatureInfo[aria-pressed=true]){display:block;height:auto;opacity:100%;visibility:visible;width:350px}dialog:has(button.GPcloseGetFeatureInfo[aria-pressed=false]){display:none;opacity:0;visibility:hidden}dialog[id^=GPgetFeatureInfoPanel-]{left:47px;max-height:52vh;overflow-x:hidden;position:absolute;top:2px}.GPgetFeatureInfoAccordionGroup{max-height:calc(52vh - 92px);overflow-y:scroll;scrollbar-width:thin}.GPgetFeatureInfoAccordionContent{overflow-x:scroll;scrollbar-width:thin}.waiting-div-container{align-items:center;display:flex;justify-content:center}.lds-ring,.lds-ring div{box-sizing:border-box}.lds-ring{display:inline-block;height:40px;position:relative;width:40px}.lds-ring div{animation:lds-ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border:4px solid transparent;border-radius:50%;border-top-color:currentcolor;box-sizing:border-box;display:block;height:32px;margin:4px;position:absolute;width:32px}.lds-ring div:first-child{animation-delay:-.45s}.lds-ring div:nth-child(2){animation-delay:-.3s}.lds-ring div:nth-child(3){animation-delay:-.15s}@keyframes lds-ring{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}[id^=GPsearchEngine-]{display:flex;left:46px;top:8px}#position-container-bottom-right>[id^=GPsearchEngine-],#position-container-top-right>[id^=GPsearchEngine-]{align-items:end;flex-direction:column}button[id^=GPshowSearchEnginePicto]{display:inline-block;transition:border-radius 0s ease-out 0s;transition-delay:.5s}button[id^=GPshowSearchEnginePicto][aria-pressed=true]{transition:border-radius .5s ease-out 0s}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]{border-bottom-right-radius:0;transition-delay:0s}button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]~div button[id^=GPshowAdvancedSearch],button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]~div button[id^=GPshowGeolocate],button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]~div button[id^=GPshowSearchByCoordinate]{display:none}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]~div button[id^=GPshowAdvancedSearch],button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]~div button[id^=GPshowGeolocate],button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]~div button[id^=GPshowSearchByCoordinate]{display:inline-block}[id^=GPshowSearchEngine-]+button+form[id^=GPsearchInput-]{max-width:0}form[id^=GPsearchInput-]{display:inline-block;overflow:hidden;position:relative;transition:max-width .5s ease-out 0s}button[id^=GPsearchInputReset]{border:unset;position:absolute;right:0;top:0}button[id^=GPshowAdvancedSearch]{transition:border-radius 0s ease-out 0s;transition-delay:.5s}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{bottom:unset;height:inherit;overflow:hidden;vertical-align:top}form[id^=GPadvancedSearchForm],form[id^=GPcoordinateSearchForm]{max-height:250px;overflow-y:auto;padding-left:15px;padding-right:15px}input[id^=GPadvancedSearchSubmit],input[id^=GPcoordinateSearchSubmit]{margin-bottom:15px;margin-top:10px}[id^=GPshowSearchDiv]{display:flex}.GPsearchFirstLineWrapper{align-items:center;display:flex;flex-direction:row}.GPlabelTitle{font-weight:700;margin-bottom:0}[id^=GPautocompleteResults-]{display:flex;flex-direction:column;width:100%}[id^=GPautoCompleteList],dialog[id^=GPgeocodeResultsList]{margin-left:33px}dialog[id^=GPgeocodeResultsList]{border-radius:4px;bottom:unset;height:inherit;top:35px}[id^=GPautocompleteResultsLocation],[id^=GPautocompleteResultsSuggest]{overflow-y:auto;padding:0;width:inherit}@media (max-width:576px){button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]{max-width:calc(100vw - 180px)}}div[id^=GPmousePosition-]{bottom:8px;left:10px}button[id^=GPshowMousePositionPicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowMousePositionPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}dialog[id^=GPmousePositionPanel-]{bottom:0}[id^=GPmousePositionPanel-]{height:inherit;left:34px;overflow:hidden;position:absolute;top:inherit}div[id^=GPmousePositionBasicPanel]{padding:10px 15px;position:relative}div[id^=GPmousePositionSettings-]{display:block;max-height:0;opacity:0;padding-left:20px;padding-right:20px}button[id^=GPshowMousePositionSettings]{border:unset}div[id^=GPmousePosition-] button[id^=GPshowMousePositionSettings][aria-pressed=true]+div[id^=GPmousePositionSettings-]{max-height:inherit;opacity:1;padding-bottom:20px}button[id^=GPmousePositionSettings-]{overflow:hidden;padding-left:0 15px}div[id^=GPmousePositionCoordinate-] input.error{border:1px solid red}div[id^=GPmousePositionCoordinate-] input[readonly]{border:1px solid transparent;padding:2px;text-align:right}input[id^=GPmousePositionLat-],input[id^=GPmousePositionLon-]{width:120px}span[id^=GPmousePositionAlt-]{display:inline-block;line-height:20px;padding:2px;text-align:right;width:120px}.GPSexagesimal{width:30px}.GPSexagesimalsec{width:45px}span[id^=GPmousePositionCloseEdit]{background-position:-18px 0;margin-left:5px}img[id^=GPmousePositionMarker]:hover{cursor:pointer;opacity:.7}#GPmapCenter{background-image:url(data:image/png;base64,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);display:none;height:50px;left:50%;margin-left:-25px;margin-top:-25px;position:absolute;top:50%;width:50px}#GPmapCenter.GPmapCenterVisible{display:block}div[id^=GPdrawing-]{right:8px;top:48px}button[id^=GPshowDrawingPicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowDrawingPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GPdrawingPanel-]{bottom:unset;height:inherit;left:-276px;overflow:hidden;position:absolute;top:0}div[id^=GPdrawingBasicPanel-]{padding:10px 15px}.drawing-tool-section:not(:last-child){border-bottom:1px solid #ddd}.drawing-tool-section{padding:2px 5px 5px}.drawing-tool-section-title{font-size:.75em;margin-bottom:0;margin-top:0;text-transform:uppercase}div.drawing-tools-flex-display{justify-content:center;margin:12px 0;padding:0}.drawing-tools-flex-display{align-items:center;display:flex}.drawing-tool:not(:last-child){margin-right:10px}div[id^=GProute-]{left:10px;top:100px}button[id^=GPshowRoutePicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowRoutePicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GProutePanel-]{height:inherit;left:34px;position:absolute;top:0}button[id^=GProuteReset]:hover{opacity:1}form[id^=GProuteForm]>.GPlocationStageFlexInput{margin-top:5px}form[id^=GProuteForm]>.GPlocationStageFlexInputHidden{margin-top:0}form[id^=GProuteForm].GProuteFormMini .GPlocationStageFlexInput:first-child{margin-top:5px}label.GProuteOriginPointerImg[id*=GProuteOriginPointerImg]{border-bottom-right-radius:3px;border-right:1px solid #999;border-top-right-radius:3px;width:28px}input[id*=GProuteOriginPointer]+.GProuteOriginPointerImg{background-position:-1px -1px}input[id*=GProuteOriginPointer]:checked+.GProuteOriginPointerImg{background-position:-29px -1px}.GProuteStageRemove,div[id^=GProuteStageAdd]{border:none;cursor:pointer;width:28px}.GProuteFormMini{overflow:hidden;-webkit-transform:translateY(-5px);transform:translateY(-5px)}.GProuteFormMini .GPpanelFooter,.GProuteFormMini .GProuteStageRemove,.GProuteFormMini button[id^=GPshowRouteExclusionsPicto],.GProuteFormMini button[id^=GPshowRouteExclusions][aria-pressed=true]+div[id^=GProuteExclusions],.GProuteFormMini div[id^=GProuteModeChoice],.GProuteFormMini div[id^=GProuteStageAdd],.GProuteFormMini>:not(.selected){display:none}.GProuteStageRemove{background-position:-84px 0}div[id^=GProuteStageAdd]{background-position:-56px 0}div[id^=GProuteModeChoice]{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around;margin:15px 0}div[id^=GProuteTransportChoice]>.GProuteTransportChoice{display:inline-flex}button[id^=GPshowRouteExclusions]{border:unset;bottom:unset;position:absolute;right:0;transition:all .5s ease-out 0s}button[id^=GPshowRouteExclusions][aria-pressed=true]{transform:translateY(-100%) rotateX(180deg)}button[id^=GPshowRouteExclusions][aria-pressed=false]+div[id^=GProuteExclusions]{margin-bottom:0;max-height:0;opacity:0}button[id^=GPshowRouteExclusions][aria-pressed=true]+div[id^=GProuteExclusions]{display:block;margin-bottom:15px;max-height:76px;opacity:1}div[id^=GProuteExclusions]{overflow:hidden;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s,margin .3s ease-in-out .25s}div[id^=GProuteResultsPanel]{padding:15px}div[id^=GProuteResults-]{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;-webkit-justify-content:space-between;-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-align-items:center;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:10px}div[id^=GProuteResultsNew]:hover{opacity:1}[class*=GPlocationPoint]{position:relative}div[id^=GPlocationAutoCompleteResult]{background-color:var(--background-default-grey);border:1px solid var(--grey-900-175);border-top:none;left:0;max-height:140px;overflow-y:auto;top:45px}div[id^=GPlocationAutoCompleteList]{position:absolute;width:calc(100% - 56px);z-index:2}div[id^=GPisochron-]{left:10px;top:140px}button[id^=GPshowIsochronPicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowIsochronPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GPisochronPanel-]{height:inherit;left:34px;position:absolute;top:0;z-index:2}input[id^=GPisochronOriginPointer]+.GPisochronOriginPointerImg{background-position:-1px -1px}input[id^=GPisochronOriginPointer]:checked+.GPisochronOriginPointerImg{background-position:-29px -1px}div[id^=GPisochronChoice]{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex}.GPisochronFormMini{max-height:58px;overflow:hidden}.GPisochronFormMini .GPpanelFooter,.GPisochronFormMini .GPpanelFooter button[id^=GPisochronReset-],.GPisochronFormMini .GPpanelFooter input[id^=GPisochronSubmit-],.GPisochronFormMini [id^=GPisoExclusions-],.GPisochronFormMini [id^=GPisochronChoice-],.GPisochronFormMini [id^=GPisochronDirectionChoice-],.GPisochronFormMini [id^=GPisochronPointLabelP-],.GPisochronFormMini [id^=GPisochronTransportChoice-],.GPisochronFormMini [id^=GPisochronValueChron-],.GPisochronFormMini [id^=GPisochronValueChronLabelP-],.GPisochronFormMini button[id^=GPshowIsoExclusionsPicto-]{display:none}.GPisochronFormMini{max-height:78px}.GPisochronFormMini .GPelementShow{color:var(--grey-200-850)}div[id^=GPisochronTransportChoice]>div{display:inline-flex;gap:1rem}button[id^=GPshowIsoExclusions]{border:unset;bottom:unset;position:absolute;right:0;transform:translateY(-100%);transition:all .5s ease-out 0s}button[id^=GPshowIsoExclusions][aria-pressed=true]{transform:translateY(-100%) rotateX(180deg)}button[id^=GPshowIsoExclusions][aria-pressed=false]+div[id^=GPisoExclusions]{margin-bottom:0;max-height:0;opacity:0}button[id^=GPshowIsoExclusions][aria-pressed=true]+div[id^=GPisoExclusions]{display:block;margin-bottom:15px;max-height:76px;opacity:1}.GPisochronFormMini button[id^=GPshowIsoExclusions][aria-pressed=true]+div[id^=GPisoExclusions]{display:none}div[id^=GPisoExclusions]{overflow:hidden;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s,margin .3s ease-in-out .25s}div[id^=GPreverseGeocoding-]{left:10px;top:180px}button[id^=GPshowReverseGeocodingPicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowReverseGeocodingPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GPreverseGeocodingPanel-]{height:inherit;left:34px;position:absolute;top:0}[id^=GPreverseGeocodingForm-]{max-height:270px;overflow-y:auto;padding-left:15px;padding-right:15px;padding-top:10px;position:relative}input[id^=GPreverseGeocodingSubmit-]{margin-bottom:15px;margin-top:5px}div[id^=GPreverseGeocodingResultsList-]{max-height:210px;overflow-y:auto;position:relative}div[id^=GPimport-]{left:10px;top:220px}button[id^=GPshowImportPicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowImportPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GPimportGetCapPanel-],[id^=GPimportMapBoxPanel-],[id^=GPimportPanel-]{height:inherit}[id^=GPimportPanel-]{position:absolute}[id^=GPimportGetCapPanel-],[id^=GPimportMapBoxPanel-]{position:relative;width:340px}form[id^=GPimportForm-]{padding:15px}div[id^=GPimportChoice-]{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-pack:distribute;justify-content:space-around}input[id^=GPimportSubmit-]{margin-top:20px}div[id^=GPimportGetCapResults-],div[id^=GPimportMapBoxResults-]{background-color:#fff;height:140px;overflow-y:auto;resize:vertical}input[id^=GPimportGetCapRubrique-],input[id^=GPimportGetCapRubrique-]~li,input[id^=GPimportMapBoxSource-],input[id^=GPimportMapBoxSource-]~div{display:none}input[id^=GPimportGetCapRubrique-]:checked~li,input[id^=GPimportGetCapRubrique-]~ul,input[id^=GPimportMapBoxSource-]:checked~div{display:block}input[id^=GPimportGetCapRubrique-]:checked~ul{display:none}.GPimportMapBoxpRoot{padding:5px}.GPEditorMapBoxContainer{border:1px solid #87cefa;border-radius:5px;-webkit-box-shadow:0 0 5px #000;box-shadow:0 0 5px #000;-webkit-box-sizing:border-box;box-sizing:border-box;height:auto;padding:5px;position:relative;width:100%}.GPEditorMapBoxSep{border:4px double #87cefa;display:block;width:50%}.GPEditorMapBoxLayersTitle,.GPEditorMapBoxThemesTitle{font-style:italic;font-weight:700;padding:5px}.disabled{opacity:.5;pointer-events:none}.GPEditorMapBoxGroupDetails{border:1px dotted #87cefa;border-radius:5px}.GPEditorMapBoxLayerContainer{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:100%;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.GPEditorMapBoxLayerContainer,.GPEditorMapBoxLayerTitleContainer{min-height:28px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.GPEditorMapBoxLayerTitleContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:inherit;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.GPEditorMapBoxLayerImageInput{display:none}.GPEditorMapBoxLayerImageLabel{background-image:url(data:image/png;base64,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);background-position:-56px 0;cursor:pointer;min-height:28px;min-width:24px}input[type=checkbox]:checked+.GPEditorMapBoxLayerImageLabel{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.GPEditorMapBoxLayerTypeImage{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOAAAAAcCAYAAAB4fbODAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAA8zSURBVHic7Zx7cJRVlsB/5/u6O28SSYKAy0tFXoq6DmBeTFgHHzM6SF6uojPOrI+tFUsZIYFxp7ZnFUmCrmO56+qOVVtazoyT0EEXxZlVC4Y8GCxRl3KQQZT3OyEkIel099ff2T9CICYh3V8TgRnzq+rq6nvvued00ufec+8994MhhhhiiCGG+CYi59uAC5187zqXn/2J3Z9dHSlaXzmv7XzaNMRfD67zbcBgkFPqu94wJOt0ib2ntrzINxh9hzqav++WhB59WSHAMxh9DzFEbA6oKt6fI16v2INsT2yI3BJoCy5rP9JpeVI8Znyq+2PgrBzwxsWvJrUbSVcpelPohGV9+NI2V9LFCUxfcKk5SFZ/kxHwpgKJ4D1wvo05n0TtgNnLarJM1YdUuYmlNRnvAbllvjCwCZXf+hPdL2/23tbx9Zk6MMd3tbP97b0JF0+/iEtvGBU3UNvsJateskP2JAAEW1yu11yGvV/FuEZsvVaFazvgcgFDADEgPtVDXLILURkK2x3hNSAuFQKZQEbXS9JB3UAn8OpgaMktqxor4ipU1TmgY0DigEOCblaMN+sqCuoGQ89gE9EB871VySG/6z/F1ru1b7UJZCOandARXJyzpHpB/cri2q/Bzogkj4o3J8wZRWJmPIA1UFu1uLFx6/HxbYf8XDIzUxPTzTmKgCpWyD4abAvt62wJvN1xJLDXleBKypyWesc1P5woIrgUjckB80p9RWowPBbZLuKq68pvbY5d/lyx/GIIjwQ7vcvRwmkQ6PU3O/VLioeKFCiLeU2dtahquOkxnwTuU1U3EAI5AgSAWYrMAV2cW+arU9VF9ZVFH8aq6+tgQAfMWlSVEPKbbws6O2JPwhgR4728slXfr60o+v2gWRgNhr0pcXj8iwnD4+4RaBSRiKPq8b3tNH7WwohpaeIXthzacuzdY39u3ec/Huwzi3/+u30NAFd8b0z+iCvT7pz9+BtjNiy/fa8TE1XwokxzItMT2ww2AH8BDhiaC5zctFLAiNDenwnE5IA5pVWTRMw1wETgA1FWJtjt7/zv0z9oB8DrNbID02cZNveB/lBE6nLLah6oqygYlFl3MBjQAU2P60micb7TeBT5df5jayatf+a2xrO0LWrqVxStzVpatd1U859QltZWFL4wUHsR7MtuGNU5Pm+k25PiNpq/bN2xf1Pj9kh6Wvaf2DXiyjQ0bM0EHDngNwOvh1POFzUjgC+daspfUjXSwnwXGA36WF1F4bMgXw3SvF67ATYCG/NKV7+kYteA/nfuUl9bXXnhaqc6+yO3zPcycFekdoreW19RVNW7/IwOmL24ZgTow/1U2YK8p2gjkA+M7lU/3HIFHwF+FsmowcSlxlwFDNV3I7Z16z14zGQXUt3ZHNxz6OPmqMKSo5+17Lv8xktCqMzA4SaPoFWqcknPMhU8Avf2alqHsrWPvGUec6Lv/BC8yPkGsZ0Zi6aw4XoFdIwI99eWF70cqX1t5fwPspes/rZp2JtUeTWn9M1J9ZXzBmEDSDtBes7gI06+h+gRsYhIqD/pMzqgGHob4O5VbInaN9dWFr8PXetDq9O1FtW8XtIFOHTA2Y+/McYKh0d2f1bCzRvLS3ZEK6/IXITdG1YWfR6p7YaK4obsxTUjxNRhJw52bm3e1dYUjQ47YFtWR3ifK9GcGa1d3dRWFP1r77L8R1enWXH2vV8pVH5TVznwDH7hkpAGYYcyZgao9Jm9BiCntGauojcCr9eWF0Z0vm4aVs7/Iqe05gER9YmEvMADDo3tQ11F0UJgIXQt2UyP2bWEEfljXXlBxOjxjAG6iFzeT/H73c4HsN5bcsIm/GTfZnoZDjcrbMt+TCzdaAfC9Vg0iGU8F61scXGVCcxBeS9aGcMVngrQ3ug/6MTOzuOB3SLMwOuNtLj5BhK+yLmMuuHnjuREuA/QsIQdR1n1lQU1wGaQBVmLqhKcyp8mts243px5DagqffJkhPjezUw1E5Q+g1dMxh38+Jj55fsHzEtmZDA27+Lx0Y6MByaYMwTSVIgYfp4yUGWKAm17TjhywBNHO3elXJKUnxW48oqNsM2J7Lkia1HVcMM01tlh262qpmEagZYU/dafvCXBnGWrvqsBrVRVA0BM2dvwdPFN07xVntQ2+VDD6kGwDdMIGW77O7UrSo46UJ0Wm8VWJhBdiO31Gvjtm0E+chIh9USgSqHCiDfmAGujlZtdVp0dxnhCYDbUuFDfXhFe7GhuXLn5vx7sN8SMxECj+J/6lCizc0p9/3DKoMffGKPo8n5kP3USUnQTf5Gb9CuGkZgZj4hMzS2rqctbvGp6FKJzAdsd8rwfseVJbGSKhm1/y77O405sbNndvgvAtA3HYei5wnDHxYsp03f8fv+UXesOX2G4jKsyae9yuLCkB9tDl33+zv4p+z9onILN3wKMbUoWw2VctXP9oUk7fndgipgy3QybA56n9kVimAEBXFGvA/Pbp44AGQb6UWy6wFb5GEDCRn9RXr/kLqm51cb4g8Df0T1xCWMUlicMT6+JdUY8swMacW8BJ3qViggv55b5tueV+hpsK/xn6Lu1LvBbp4Yo7Esdk9R6xa1/Y2dMHvYFhqwFLldTNucuXfVcTumbKWeSFUPmAh872XkVZGrIrwdBHQ0UjdtbD2nY9ovoDCdy5xLTrSbA0c9aOLajtU+91WlbjdtaaNnT3qfu2I5Wjm7rGpNst+ngR+V1AcmxWSxRO2DY1XWWqmo4Gjh7Yqg2AaiQHk374uIqE0Nf5HTE+AHwa7oSCUDl1tylq4tisuVMFXXltzar8tQZqieqkAX0F0PvNBPCjjcR3Akt/256TNt0m69s/LeSyxtWFn7PFTAmIfoCKgtFrG25ZTU/6C2XU/pmCqrXg0QdfgKgOi3YHjjk1E5s1WBHeLfaXLgzYLjLAWc+NLn92h9P7HOumTQiIX7mwsntUwrG+cWQryQtXPfApODMhya39+wnStJiXxdpOlRFpSsccjUCiGjsSQ2Gdjm82lGF1wcuNSYD3TvYn4/6MpxdV1G4QJVlpxqpPTcmUwaqHL0zXAkSdVgHBFW5a723pPfMGZFQ57B5QJoh8lp32fpfzD9eV170CGLMBA6AvpK7dNWa/KWrx3e3EQnlA27Dwfov/9HVaQgjg62Wo/VfN/7m4G4VveaWh9c6DNHODYFA6DDCXE+y+3Z3kmsewtz17A4CBE1ZK6ZxvSc57tuuBHeeabpuBHjn+VuCiPEt0+PKjktx34QwNxAIHY5eqxlj+AmAAVujmo0akrc0AsdBr4tdnVwHYAgRd8wBTJerZxiRcvCyxGFd8nrqWEmgJRZLBjyIr64uCWctqioxPeaHwIRInanII/UVBX+MxRBRFgAHLv7C+kPvurry+ZvzveuyLH/TQ6g8Yam9Na/M96lt8xGq2QjWcevEpmh12XHWVDBoPxLDDAh0HPLvShub5GlN6LgKuKBSmwA2Plvih/53hD9YUdAE9HPsIlpXzubYtcayA9oTIxM4ErGZ12tT5lsLclfWslWTN64ocrgRpqLUlAAnzIS2Pr+1/tiw/Pa9uWW+TcAsYCQa2JFb5juiMLm707Bh1ATbm6x4T+ZrAGLbUdkVMRd047Mlx7KXrC4wDLuB/kPOLguQ1+rLC16MRmlv8h9bk2ERvFlVflFdXdLvQdJ67xwLeC63rGo1Yv4qHNbcg5ubZpgeg5HXDMfd6g9Gq0/FmIpC6/4TMR3ENn3Runv0zAwMYQYXoAOeJ2LcAe3GwYG82L9EjbtMW54CCpxoyV3q+3tUrkZ4Yb33R51RW2cb/9jDB4affHWZo/pSw4rCjSc/3uPEnqjOshpWzv9EkEcGaPJ/nQnuB50o7ollBksAt2Hbr0VqW1dRssfALrNDdnDnuoPsaYguSrrOuyYxp8y3PKfMt1zhPlTDdtiO6TpVy572JtuyWxS5YDdizj32Wc6ApzJIIlJXXrwe0beA+Xllvv6ytfolp7RqEiovAC0hw9UnMWIgGlbO/0RV7u+nalOyP/FRJ331JOrD5NqKgl+q0l/WQTNCQWxXkVRAReBuhC21TxdtiVbSdBvmtOLx/km3jh3w5kM3KW0kCvz08JZjSw9sbpylYI66NuO6jMkpo+OGuR2v5QJtod0gs5zK/XXiNcA44y51lKSdzCWNClco7kfAToXncst8/xwpMWJ2mW+2iLkBSFGMOzc9Nc/B+raL+sqCX4H+R4+iwy6l6J3nvxtw2lc3ji7kDvMnLDyR6L9aoXvktxVjQX35fMfJtHmlviKVmmroyplXW/3Ryqpp7ERZnDah63+uCptHH4wqB2rPhsNGsN1i1NXpZExOLcqYnFoEoGE9EQqEj4U7w8dCHeGmQFuoKdAaPOZvDDS1Hupo8jcGTu3Zj8u7+Cq11VL0ytylq35s2MbGDZUFnzn5/gCuuJBamF8JnVUc53JdIATXgJEMnmSwU4CT72byybt/0ZABRLUsWP/MbY25S33fQfkf4Ilc/5UllPpWYsS91X1tK9+7zmV3Ns+2Ve+34Q7Ar+hd9RXz34npKwL+5qZFCcMzp6OaJbbcsX5lwb5Y+4IYMlZmP/7GGNsKbwYygZ/VVRT2k4oWmbxSX1HH8c5XPn19V2LSiHgm3T62fePTxTGeI0Um/7E1GZYreLRpe0vAtlQzpqR6MORBoM1QxqkwDmUcyATUHodIUk95tbUzHLQbQ36r2Z3kmhhstzzhTttITI+zXHHy09ryopVfl+1/+TwcB6MTIZwIncPAlQIMO/lK5PQNig/A+4mTnnNK30wRrH9BWAh0RzKNdN0HHMHpfOZ3bVN+0vBUwadn+21mPfzaMFdi/Jj6iqK+ySoOcfxIig3Lb9+bv2zVbEu5tm5F4etUnI16o+sQXEH4eh9vEbD97S4xSjMmDeuhnrdrnyrs9yhi5rKa9DhLx6nJOFTHimFMcMXLODPOGG9b6tmz4bDRuK2Fq+6coGnjkvrrYohTPB+gyyGagf19619yw8EU6HScPXXyAVmL837qe8a2ZZ6o3kDXDZ0k4BPgY7FZXbuyMObMmd5sev7uVvrLFIuB8/Z4ha4QlOruz6o011cWnsWN8XNH1k+qdx37vHVc+5FORl6TbiVc5BqaAYeIifP2VLTaysJVxcVVp/RXT9vqePQ7Xxim/CZ9YuqE9ImpIKq2mmcd1gwxxBBDDDHEEEN8c/h/w5PlbJKeBEAAAAAASUVORK5CYII=);background-position:0 0;background-repeat:no-repeat;border:1px solid gray;border-radius:5px;-webkit-box-shadow:2px 2px 1px #d3d3d3;box-shadow:2px 2px 1px #d3d3d3;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;margin-right:5px;min-height:30px;min-width:30px}.GPEditorMapBoxLayerTitleInput{display:none}.GPEditorMapBoxLayerTitleLabel{border:1px solid gray;border-radius:5px;-webkit-box-shadow:2px 2px 1px #d3d3d3;box-shadow:2px 2px 1px #d3d3d3;cursor:pointer;margin-left:5px;padding:5px;width:inherit;word-break:break-word}input[type=checkbox]:checked+.GPEditorMapBoxLayerTitleLabel{background-color:#d3d3d3}.GPEditorMapBoxToolsContainer{display:-webkit-box;display:-ms-flexbox;display:flex;height:28px;min-width:28px;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.GPEditorMapBoxToolsVisibilityInput{display:none}.GPEditorMapBoxToolsVisibilityInputDisable{display:"block"}.GPEditorMapBoxToolsVisibilityLabel{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAAcCAYAAACzpld9AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gkaDi8aQAwpvgAAB/RJREFUaN7tmm1MVNkZx3+HAYQZG7eYm4y4gDGh1GmIhpWoDYgajNXYFNaJaSrVfiUxAqLFV6wmGpWSYXETk/pJA8S4uIwJITEhRLqkxAy+EM20fCgBB69jrtVVMwN2mHv6Ae7t4NvCzOyutvNPSOY5z2Gee875n+f8z3MHEkgggQQSSOCDgEhMwf8Pyo9dlnP9n47jv01wJEGY6PsnJ6bxx0Ntbe3PLRbL2si2cDj818bGxn98qM+clFi2Hw8Wi2WtlLLYsKWUxa8T6EPDR5dhurq65OPHj1m6dCklJSVxO18bGhpITU1FyjezdigUYv/+/THHcLlcS5OSkkqllKXAr4CfTLsqIrpVNDU1fSGE6JNSdgshuquqqm4lCBMlrl27xvDwMEeOHInbdzY1NRk7/K3+lJQUXC4XNTU1sd0whPjnu2K8hrRpUpVO95/TxnifVnmXb7bids6EaWlpkb29vWiaZrYpikJJSQkVFRVxVdQ+n0+qqsrIyAjBYBCAtra2qRlNS8Pn88msrCwRD7K0P8r6O5LLzkzf8bfZQoiYSVNdXS2KDnwNsyMNQsI3Z7dFFettBCg/dlm+qz3uGsblcskdO3ZIgPr6+hk+RVEAKCsrky0tLTIeZOnp6ZG9vb0AlJSUAOD3+wHIzs4GoLu7m5s3b0Ydr6GhwSALQsobCI61q1m/r6qqmmFfVT+d6iMEzc3NUY/pl/u+xml/8Ny5yCdn9bd47Nvig1dinsuiuqsU/7H9rb5f/OmK2ScuhPH5fPLQoUNS0zROnz5NRUWFyMrKEufOncPtdov6+npz9585c4aBgQEOHToU9SL6/X7Z2dkpg8EgpaWlrFq1StjtdrF582bsdjsACxcuBKC0tBRVVens7IwqXmpq6rTahKdWvUrCNwj+UnzQ/VmkLZMsnyHNW0z0N4ypfD4GsG7dOrM9OzuH7Owc0zZ8UsoxpCX23SdBiqnEEknA4oNX+GTcYvaJC2EuXbpEMBjk1KlTIjL9DwwMUFZWJtvb26msrKS3txer1UptbS2apnHy5MmoFnFwcJBQKMTWrVuF3W4346mqSk9PDwCrV69mZGSElJQU1qxZQyAQ4Pr163OOp+s6AM5MHz+dSP53UlLYCTxC6m4lQEaknSzDduNoin7h5BQJpm5IzJs3zzxe09LSzM8Wi0mSMT0O+brv7DaYfm6pWyg60MHaOjdSt5jiqG+WR997CdPR0SE9Hg+VlZVmthkaGpIA5eXlwmaz4fV66erqorCwkNHRUbKyssSuXbvweDxzXsTbt29LVVVZuXKlmW18Pp8EKCgoEMaRlJaWxuLFi3n+/Dl2u12sWLECVVW5d+/enOJFLr7T/gApU7QkLL8BPpkUlnapW2bYcaljJCWNAYyPj2O1Wt/wW61WM2MDY/EShX2nP48gro7OdKYUc6usvLe3x+PB4XCQl5cnALxeLx6Ph+rqatnS0iKNhfV6vSiKYgrhoqIioSgKhgaZLVRVRVEUjEymaRqqqtLR0SHb2tokQEZGBi9fvsRqtRIIBADIy8sTVquV0dHRqCaz/VEWV9VPeZYWQhcy1bwR6OEZdjxgZJhAIPCdhJnqG3uKidQwyXp46ivl1OdnaaH4aZjCwkK8Xi+3b9+Wr4vc9vZ2kxAOhwNN00zx29fXJzVNM8XqbJGZmYmmaQwPD8vXJ/HOnTsA2O12FEUhGAxis9kAGBoaksFgkJycnJjO+IxXKEjdDXybLMPOcPJMOx5iQgjxEJjx/JFIT09nfHzcyIAPZTxe90VomHDy1PHTd3Yb4WTiq2HKy8tFYWEh58+fx+fzSYfDgdfrxel0smTJEpMsW7Zswev1kpOTg8/nkxcvXqSwsJBNmzbNabQFBQUiMzMTj8eD3++XRtZyOBw8efIEgCVLlpCbm4umaSxYsAC/3y/v3r1LZmYm+fn5Uc2uM9PHs/Rwqq5b2oEMRFKZZuNppF22WPXHvnICXdcfGkdSenr6Gz1sNpuZOafIFTthfjANA7Bz504URaGxsZFgMIjD4eDixYtUVlbidruF0+nk/PnzOBwOABobG1EUhcOHD0c10uXLl2Oz2ejv7ycUCqEoCoODgzx79gyAjRs3MjAwYGaz/v5+bDbbnMlpVHANZASTvhBQjBB/QOq3Im2nffSWoXkmJyejXjg9LLBYLHM6klImUz4oDfOdhTtDT7hcLllXV4fT6URRFOrq6igrK5MnTpzA4XBgtVo5cOAAmzdvjqmAZ9yMenp6ZHd3Nw6HgxcvXhAIBJg/fz4ejwdFUUhJSaG7u5vc3FxWrVoVVbz9+/fjcrkQQiCFWIfkeLI++dWksJi2c9GDryJvVfv27Yt60f7258/53Zdfjum6PivRq+v62I3GX8e1Uq6kheRcq8NRVXpramoEgNPplF6vd4bPELutra2itbU1LgPbsGGDMCq99+/fN/WLsTuN6nKsld6amhpcLhfORb5lr7mWRd6mdF2P+dUAwO7du//V1NQUnJiYsBo1nYmJCdM/OTnJq1evAIJ79+59Gk+yvKv8/64KcFxeDbwre1y4cIF4wyDD0aNHJcD69evZvn173H/QU1NTQ3NzM+Fw+K11llAoFFNmeQseArk3btwA4MGD/97ujDYhxBgfID6Kl4/37t0DID8//3uLsWfPnh9sPNXV1T/jI8VHQRi32y0Ali1bRgIJwiTwPSCa3+8mkEACCSSQQAIJ/K/iP/pwwS7J75hnAAAAAElFTkSuQmCC);background-position:-28px 0;cursor:pointer;height:28px;width:28px}.GPEditorMapBoxToolsVisibilityLabelDisable{cursor:pointer}input[type=checkbox]:checked+.GPEditorMapBoxToolsVisibilityLabel{background-position:0 0}.GPEditorMapBoxFilterContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-left:28px}.GPEditorMapBoxFilterJsonContainer{border-radius:5px;border-style:solid;border-width:1px;padding:5px}.GPEditorMapBoxFilterDisplayJson{cursor:pointer;height:125px;overflow:scroll;resize:vertical;width:175px}.GPEditorMapBoxThemesContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:175px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.GPEditorMapBoxThemeContainer{border-radius:5px;border-style:solid;border-width:1px;margin:5px;padding:5px;text-align:center;width:inherit}.GPEditorMapBoxThemeContainer:focus{background-color:#d3d3d3}.GPEditorMapBoxThemeImage{cursor:pointer;height:60px;width:120px}.GPEditorMapBoxThemeTitle{cursor:pointer;padding:5px}.GPEditorMapBoxThemeMessage{color:red;font-style:italic}.GPEditorMapBoxStyleContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-left:28px}.GPEditorMapBoxStyleJsonContainer{border-radius:5px;border-style:solid;border-width:1px;padding:5px}.GPEditorMapBoxStyleJsonDisplay{cursor:pointer;height:125px;overflow:scroll;resize:vertical;width:175px}.GPEditorMapBoxStyleToolsScaleContainer{border-radius:5px;border-style:solid;border-width:1px;padding:5px;width:-webkit-min-content;width:-moz-min-content;width:min-content}.GPEditorMapBoxStyleToolsScaleMaxContainer,.GPEditorMapBoxStyleToolsScaleMinContainer{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:175px;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.gp-json-string{color:green}.gp-json-number{color:#ff8c00}.gp-json-boolean{color:blue}.gp-json-null{color:#f0f}.gp-json-key{color:red}.GPEditorMapBoxLegendContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:nowrap;flex-wrap:nowrap;margin-left:28px}.GPEditorMapBoxLegendRenderContainer{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:5px;border-style:solid;border-width:1px;overflow-y:auto;padding:5px;width:175px}.GPEditorMapBoxLegendRender{border:1px solid transparent;border-radius:5px;-webkit-box-shadow:2px 2px 1px grey;box-shadow:2px 2px 1px grey;cursor:pointer;min-height:28px;min-width:28px}.GPEditorMapBoxLegendEditable{border-color:#000}.GPEditorMapBoxLegendTitle{margin-left:10px}.GPEditorMapBoxLegendToolsContainer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:5px;width:230px}.legend-not-implemented,.legend-unknow{background-color:#fff}.legend-unknow:before{color:red;content:"\2753";font-size:15px}.legend-not-implemented:before{color:red;content:"\2718";font-size:15px}.legend-circle-not-editable,.legend-line-not-editable{border-color:#fff}.legend-styling-div{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.legend-styling{width:50px}button[id^=GPshowElevationPathPicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowElevationPathPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GPelevationPathPanelReduce]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAAAaCAYAAABb9hlrAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH4gEQEjITjE0MtwAABGJJREFUaN7tmU1oHGUYx//PZEvSLjHVBLVaerCXSgo5tAqxiqBSxcSLWqknFaNdaYjiwUMOVVGi2EORJg0xtgbx0FKVgmirRU17SUpjPsCVUhQtVOr6ES8mmpqdnwffhekw2dndbMK23T8MzMzzzsz7PP/3+ZjnlaqooooqrlhY7gSol3Rr7tLMTlfNs3gAJqnGncvMJMk3M7+Q5xOB8zsl9Ui6XtI/ktZXzVs6MpmMNTU1rZa0SdJNknLkSNI0MCrpTzPLFkSQmR0FspIGJb1UNXHpHjM3N9dUW1t7u6QHJW2V9KukPyQhqcEt/i8lHctms8Oe5/0WR5SAW4AfgWGgC1ixjEo9AwwAXj7Fgb1AZ6WSMzk56QGbgQPA98AUsBvYAKwCVgJrgV3AKeAccAi4f3x8vCbOSA8AB91xGEguIzlZ/sdgFEmOnF43xq9UkoBrgD7gZ+B13/c3u/uPAG8AbwEdkpTNZjcCLwJngE+AtYV8YEW+VbxESvVxKfa5xBokZ19oTF+lkTMzM+MB9wJngT0hHT8KzP2bkGwHcB54Ktb2wNtAb5EGbgAaFhOzXegKYhDwQp6TwzvLvYgK1CPpwtkZYEtI9iowCowBAyHZeuCEi1pr4j4yBBwscmK7gZ7FJtYFSOq7TMgx4A7gB6AvnU5bSF4H1LtjVVCWSqUMeN550eN59SuWIMf+HDAL3LwEJC0bOSPdCRvpTljwOiT3RroTdQvM3QPanYfcFiHvAj4GjgCvLWDHT4EX8hZnUQQBCRf6tkWMD8bW/WVaiVEkDZZKDmWCI6kmD0FtwNfAugXsetG96qsIeSPwfhRBXoxy10n6XFKXpEPAy7kEDtwl6eHA8CeA5nJ2N2LuxXrEEjiaX2a9YpHvv2ODpFOS7gl84BVHVFLSntAjNZLeXGRLZK+knRHipyUNFONFrT3zlDsExhjZJNVLuqGE16+W1BjX6rmk3JY06v56w9gmaUuufRFCO3C3mZ0oAzmDki4G7nXkytJC+lgj3Qlr7ZnHzIK5JW4V09ozz0h3Yo0zdJOk3yVlHOELkY6kaUnXSnoynU6PNTc3F7RAUqmUSWqX1CLpA0nZ2Bzkqo5ScbKEvBNZSucrwS+zMnsI+DcqB8WV2Uuh6Loix/eGPKdf0g4z880Ml//6A/IO520VhdnZ2b8lHXM2fTQkrg1Eq3AleJ/rzX0mKVNQiFtmTLjk67mw1umIyTVxAXY61+904eS7SiMomUz6wGlJxyU9BswARzzPG5P0oaSfXJ4+m2v1eJ63VdKzzgbHo0J3Ik9MPVfiXM8XVdqYvety3sYwOSGSuhyJ35pZfyX24qampv5qaWl5T9JKSdvN7CHgC0n7JR11dm0Edklqk3Sjy/UHJiYmLsSWfsCQpDoz264qSq5Gi9lu8H0/73ZDmKCTrpq4UI65SnrOzIavRqJyG3ae522KqHinnefEbtiFCWpzJXSmTD91h83sl6vdo7SILe8qqqiiiisY/wFFCbN/sRPwgwAAAABJRU5ErkJggg==);background-position:-50px;background-repeat:no-repeat}[id^=GPelevationPathPanel-]{left:32px;position:absolute;top:6px}button[id^=GPelevationPathPanelInfo],button[id^=GPelevationPathPanelReduce]{display:none}.tooltipInit{opacity:0}.tooltipFadeIn{opacity:1;transition:opacity .3s ease 0s,transform 50ms ease 0s,top 50ms ease 0s,left 50ms ease 0s}.tooltipFadeOut{opacity:0;transition:opacity .5s ease 0s}div[id^=GPtoolbox-measure-main]{display:inline-block;float:left;left:78px;position:absolute;top:8px;z-index:1}div[id^=GPtoolbox-measure-widget]{border-radius:2px;display:none;left:auto}div[id^=GPtoolbox-measure-widget]>div{bottom:auto;display:block;left:auto;position:relative;right:auto;top:auto}div[id^=GPtoolbox-measure-main]:hover button[id^=GPtoolbox-measure-button]{background-color:rgba(0,60,136,.7)}div[id^=GPmeasureLength-]{left:42px;top:260px}div[id^=GPmeasureArea-]{left:74px;top:260px}div[id^=GPmeasureAzimuth-]{left:10px;top:260px}[id^=GPzoom-]{left:.5em;top:.5em}[id^=GPfullScreen-]{bottom:.5em;left:.5em}div[id^=GPoverviewMap-]{bottom:10.5em;left:.5em}.ol-overviewmap.ol-collapsed .ol-overviewmap-map{border:none;height:100px;width:100px}.ol-overviewmap .ol-overviewmap-box{border:2px solid red}.ol-overviewmap:not(.ol-collapsed) button{position:relative}div[id^=GPlegends-]{right:8px;top:58px}.position>div[id^=GPlegends-]>dialog[id^=GPlegendsPanel]{position:absolute}button[id^=GPshowLegendsPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowLegendsPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;height:auto;max-height:inherit;opacity:100%;visibility:visible;width:350px}div[id^=GPterritories-]{right:0;top:0}button[id^=GPshowTerritoriesPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowTerritoriesPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;height:auto;max-height:inherit;max-width:470px;opacity:100%;visibility:visible}dialog[id^=GPterritoriesPanel-]{position:absolute}button[id^=GPshowControlListPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowControlListPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}dialog[id^=GPcontrolListPanel-]{height:inherit;left:34px;position:absolute;top:0}div[id^=GPcatalog-]{right:0;top:0}button[id^=GPshowCatalogPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowCatalogPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;height:auto;max-height:inherit;opacity:100%;visibility:visible;width:370px}dialog[id^=GPcatalogPanel-]{height:inherit;left:34px;position:absolute;top:0}form[id^=GPcatalogForm]{padding:15px}.catalog-container-tabs .fr-accordion .fr-collapse--expanded{padding-bottom:0} /*# sourceMappingURL=GpfExtOL.css.map*/ \ No newline at end of file diff --git a/dist/bundle/GpfExtOL.css.map b/dist/bundle/GpfExtOL.css.map index d007f9a8..93244ca4 100644 --- a/dist/bundle/GpfExtOL.css.map +++ b/dist/bundle/GpfExtOL.css.map @@ -1 +1 @@ -{"version":3,"file":"GpfExtOL.css","mappings":"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","sources":["webpack://Gp/./src/packages/CSS/Controls/LayerSwitcher/GPFlayerSwitcher.css","webpack://Gp/./src/packages/CSS/Controls/GetFeatureInfo/GPFgetFeatureInfo.css","webpack://Gp/./src/packages/CSS/Controls/SearchEngine/GPFsearchEngine.css","webpack://Gp/./src/packages/CSS/Controls/MousePosition/GPFmousePosition.css","webpack://Gp/./src/packages/CSS/Controls/Drawing/GPFdrawing.css","webpack://Gp/./src/packages/CSS/Controls/Route/GPFroute.css","webpack://Gp/./src/packages/CSS/Controls/LocationSelector/GPFlocation.css","webpack://Gp/./src/packages/CSS/Controls/Isochron/GPFisochron.css","webpack://Gp/./src/packages/CSS/Controls/ReverseGeocoding/GPFreverseGeocoding.css","webpack://Gp/./src/packages/CSS/Controls/LayerImport/GPFlayerImport.css","webpack://Gp/./src/packages/CSS/Controls/Editor/GPFeditor.css","webpack://Gp/./src/packages/CSS/Controls/ElevationPath/GPFelevationPath.css","webpack://Gp/./src/packages/CSS/Controls/ToolBoxMeasure/GPFtoolBoxMeasure.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureLength.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureArea.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureAzimuth.css","webpack://Gp/./src/packages/CSS/Controls/Zoom/GPFzoom.css","webpack://Gp/./src/packages/CSS/Controls/FullScreen/GPFfullScreen.css","webpack://Gp/./src/packages/CSS/Controls/OverviewMap/GPFoverviewMap.css","webpack://Gp/./src/packages/CSS/Controls/Legends/GPFlegends.css","webpack://Gp/./src/packages/CSS/Controls/Territories/GPFterritories.css","webpack://Gp/./src/packages/CSS/Controls/ControlList/GPFcontrolList.css","webpack://Gp/./src/packages/CSS/Controls/Catalog/GPFcatalog.css"],"sourcesContent":["/* LAYER SWITCHER */\r\n\r\ndiv[id^=GPlayerSwitcher-] {\r\n top: 8px;\r\n right: 8px;\r\n}\r\n\r\ndiv[id^=GPlayerSwitcher-] [draggable] {\r\n -moz-user-select: none;\r\n -khtml-user-select: none;\r\n -webkit-user-select: none;\r\n user-select: none;\r\n /* Required to make elements draggable in old WebKit */\r\n -khtml-user-drag: element;\r\n -webkit-user-drag: element;\r\n}\r\n\r\n/* Manage opening of the components through hiden checkboxes */\r\n\r\ndiv[id^=GPlayerSwitcher-] input[type=\"checkbox\"] + button + dialog {\r\n max-height: 0px;\r\n}\r\n\r\ninput[id^=GPshowLayersList-] {\r\n display: none;\r\n}\r\n\r\n/* Showing/hiding layers list */\r\n\r\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"false\"] + dialog {\r\n display: none;\r\n visibility: hidden;\r\n opacity: 0%;\r\n}\r\n\r\n\r\nbutton[id^=\"GPshowLayersListPicto-\"][aria-pressed=\"true\"] + dialog {\r\n display: flex;\r\n flex-direction: column;\r\n visibility: visible;\r\n opacity: 100%;\r\n}\r\n\r\n/* Layers list */\r\n/* positionnement actif */\r\n.position > div[id^=GPlayerSwitcher-] > dialog[id^=GPlayersList] {\r\n position: absolute;\r\n}\r\n.position > div[id^=GPlayerSwitcher-] > button[id^=GPshowLayersListPicto-] {\r\n float: unset;\r\n}\r\n\r\n/* positionnement inactif */\r\ndialog[id^=GPlayersList] {\r\n position: relative;\r\n float: left;\r\n}\r\nbutton[id^=GPshowLayersListPicto-] {\r\n float: right;\r\n}\r\n\r\ndialog[id^=GPlayersList] {\r\n border-bottom-right-radius: 0;\r\n opacity: 0;\r\n /* overflow: auto; */\r\n /* transition: max-height 0.5s ease-out 0s, opacity 0.5s ease-out 0.25s; */\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] + dialog[id^=GPlayersList] {\r\n height: initial;\r\n max-height: inherit;\r\n opacity: 1;\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"false\"] + dialog[id^=GPlayersList] {\r\n /* transition: max-height 0.5s ease-in 0s, opacity 0.25s ease-in 0s; */\r\n}\r\n\r\n.GPlayerCounter {\r\n position: relative;\r\n background: #fff;\r\n color: #000;\r\n padding: 2px 0px 1px;\r\n border-radius: 100px;\r\n min-width: 15px;\r\n text-align: center;\r\n font-size: 12px;\r\n line-height: 1;\r\n top: -15px;\r\n left: 15px;\r\n display: inline-block;\r\n}\r\n\r\n/* Layer : general */\r\n\r\n.GPlayerSwitcher_layer {\r\n position: relative;\r\n top: 0;\r\n border-bottom: 1px dotted #CCC;\r\n overflow: hidden;\r\n}\r\n\r\ndialog[id^=GPlayersList] .GPlayerSwitcher_layer:last-child {\r\n border-bottom: none;\r\n}\r\n\r\n/* Showing layer advanced tools */\r\n\r\n\r\n.GPlayerAdvancedTools {\r\n display: block;\r\n max-height: 0;\r\n opacity: 0;\r\n transition: max-height 0.5s ease-out 0s, opacity 0.5s ease-out 0s;\r\n}\r\n\r\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools {\r\n opacity: 1;\r\n}\r\n\r\n[id^=\"GPlayerInfoPanel\"] {\r\n left: unset;\r\n right: 100%;\r\n}\r\n\r\ndiv[id^=GPlayerInfoContent] {\r\n position: relative;\r\n max-height: 200px;\r\n overflow-y: auto;\r\n padding-left: 10px;\r\n padding-right: 10px;\r\n}\r\n\r\n","div[id^=GPgetFeatureInfo-] {\n top: 260px;\n left: 10px;\n }\n\n/* Showing/hiding */\n\ndialog:has(button.GPcloseGetFeatureInfo[aria-pressed=\"true\"]) {\n display: block;\n visibility: visible;\n opacity: 100%;\n width: 350px;\n height: initial;\n}\n\ndialog:has(button.GPcloseGetFeatureInfo[aria-pressed=\"false\"]) {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\ndialog[id^=\"GPgetFeatureInfoPanel-\"] {\n position: absolute;\n left: 47px;\n top: 2px;\n max-height: 52vh;\n overflow-x: hidden;\n}\n\n.GPgetFeatureInfoAccordionGroup {\n overflow-y: scroll;\n scrollbar-width: thin;\n max-height: calc(52vh - 92px);\n}\n\n.GPgetFeatureInfoAccordionContent {\n overflow-x: scroll;\n scrollbar-width: thin;\n}\n\n.waiting-div-container {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.lds-ring,\n.lds-ring div {\n box-sizing: border-box;\n}\n.lds-ring {\n display: inline-block;\n position: relative;\n width: 40px;\n height: 40px;\n}\n.lds-ring div {\n box-sizing: border-box;\n display: block;\n position: absolute;\n width: 32px;\n height: 32px;\n margin: 4px;\n border: 4px solid currentColor;\n border-radius: 50%;\n animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: currentColor transparent transparent transparent;\n}\n.lds-ring div:nth-child(1) {\n animation-delay: -0.45s;\n}\n.lds-ring div:nth-child(2) {\n animation-delay: -0.3s;\n}\n.lds-ring div:nth-child(3) {\n animation-delay: -0.15s;\n}\n@keyframes lds-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n","/* SEARCH ENGINE */\n\n[id^=\"GPsearchEngine-\"] {\n top: 8px;\n left: 46px;\n}\n\n[id^=\"GPsearchEngine-\"] {\n /* dsfr */\n display: flex;\n}\n\n#position-container-bottom-right > [id^=\"GPsearchEngine-\"],\n#position-container-top-right > [id^=\"GPsearchEngine-\"] {\n flex-direction: column;\n align-items: end;\n}\n/* Showing/hiding search engine input */\n\nbutton[id^=GPshowSearchEnginePicto] {\n display: inline-block;\n transition: border-radius 0s ease-out 0s;\n transition-delay: 0.5s;\n}\n\nbutton[id^=GPshowSearchEnginePicto][aria-pressed=\"true\"] {\n transition: border-radius 0.5s ease-out 0s;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] {\n border-bottom-right-radius: 0;\n transition-delay: 0s;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowAdvancedSearch],\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowGeolocate],\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowSearchByCoordinate] {\n display: none;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowAdvancedSearch],\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowGeolocate],\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowSearchByCoordinate] {\n display: inline-block;\n}\n\n[id^=GPshowSearchEngine-] + button + form[id^=GPsearchInput-] {\n max-width: 0px;\n}\n\n/* div[id^=GPautoCompleteList] {\n display: none;\n} */\n\n/* button[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] + div[id^=GPautoCompleteList] {\n display: block;\n} */\n\n/* Simple search input */\n\nform[id^=GPsearchInput-] {\n display: inline-block;\n position: relative;\n overflow: hidden;\n transition: max-width 0.5s ease-out 0s;\n}\n\nbutton[id^=GPsearchInputReset] {\n position: absolute;\n top: 0px;\n right: 0px;\n border: unset;\n}\n\n/* General panels */\n\n\n/* Advanced search picto */\n\nbutton[id^=GPshowAdvancedSearch] {\n transition: border-radius 0s ease-out 0s;\n transition-delay: 0.5s;\n}\n\n/* Advanced search panel */\n\n/* button[id^=GPshowAdvancedSearch][aria-pressed=\"true\"] + div[id^=GPadvancedSearchPanel] {\n display: inline-block;\n visibility: visible;\n opacity: 100%;\n}\n\nbutton[id^=GPshowAdvancedSearch][aria-pressed=\"false\"] + div[id^=GPadvancedSearchPanel] {\n display: none;\n visibility: hidden;\n opacity: 0%;\n} */\n\ndialog[id^=GPcoordinateSearchPanel],\ndialog[id^=GPadvancedSearchPanel] {\n height: inherit;\n vertical-align: top;\n overflow: hidden;\n bottom: unset; /* fix dsfr */\n}\n\nform[id^=GPcoordinateSearchForm],\nform[id^=GPadvancedSearchForm] {\n max-height: 250px;\n overflow-y: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n\ninput[id^=GPcoordinateSearchSubmit],\ninput[id^=GPadvancedSearchSubmit] {\n margin-top: 10px;\n margin-bottom: 15px;\n}\n\n\n\n/* Simple search input */\n\n[id^=\"GPsearchInput\"] {}\n\n\n[id^=\"GPshowSearchDiv\"]{\n display: flex;\n}\n\n/* General panels */\n\n.GPsearchFirstLineWrapper {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n/* Autocomplete list / geocode results */\n\n.GPlabelTitle {\n font-weight: bold;\n}\n\n[id^=\"GPautocompleteResults-\"] {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n[id^=\"GPautoCompleteList\"],\ndialog[id^=\"GPgeocodeResultsList\"] {\n margin-left: 33px;\n}\n\n[id^=\"GPautoCompleteList\"] {\n /* overflow-y: auto; */\n}\n\ndialog[id^=\"GPgeocodeResultsList\"] {\n top: 35px;\n border-radius: 4px;\n height: inherit;\n bottom: unset; /* fix dsfr */\n}\n\n[id^=\"GPautocompleteResultsSuggest\"],\n[id^=\"GPautocompleteResultsLocation\"] {\n width: inherit;\n padding: 0;\n overflow-y: auto;\n}\n\n/* Mode Mobile */\n\n@media (max-width: 576px) {\n\n button[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] {\n /* 56px: widget de gauche, 40px: bouton loupe, 58px: bouton géoloc, 16px: padding + border des boutons droite, 10px: padding du bouton géoloc*/\n max-width: calc(100vw - 56px - 40px - 58px - 16px - 10px);\n }\n\n}\n","/****************/\n/* MOUSE POSITION */\n/****************/\n\ndiv[id^=\"GPmousePosition-\"] {\n bottom: 8px;\n left: 10px;\n}\n\n/* Showing/hiding mousePosition panel */\n\nbutton[id^=\"GPshowMousePositionPicto-\"] {}\n\nbutton[id^=\"GPshowMousePositionPicto-\"][aria-pressed=\"false\"] + dialog {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\nbutton[id^=\"GPshowMousePositionPicto-\"][aria-pressed=\"true\"] + dialog {\n display: flex;\n flex-direction: column;\n visibility: visible;\n opacity: 100%;\n}\n\n/* General panels */\n\ndialog[id^=GPmousePositionPanel-] {\n bottom: 0px;\n}\n\n[id^=GPmousePositionPanel-] {\n overflow: hidden;\n left: 34px;\n top: inherit;\n position: absolute;\n height: inherit;\n}\n\n/* Basic infos */\n\ndiv[id^=GPmousePositionBasicPanel] {\n padding: 10px 15px;\n position: relative;\n}\n\n/* Settings */\n\ndiv[id^=GPmousePositionSettings-] {\n display: block;\n max-height: 0;\n opacity: 0;\n padding-left: 20px;\n padding-right: 20px;\n /* transition: max-height 0.5s ease-out 0s, opacity 0.5s ease-out 0s; */\n}\n\nbutton[id^=\"GPshowMousePositionSettings\"] {\n border: unset;\n}\n\ndiv[id^=GPmousePosition-] button[id^=\"GPshowMousePositionSettings\"][aria-pressed=\"true\"] + div[id^=GPmousePositionSettings-] {\n opacity: 1;\n padding-bottom: 20px;\n max-height: inherit;\n}\n\nbutton[id^=GPmousePositionSettings-] {\n padding-left: 0 15px;\n overflow: hidden;\n}\n\n/* General panels */\n\ndiv[id^=GPmousePositionCoordinate-] input.error {\n border: 1px solid rgb(255, 0, 0);\n}\ndiv[id^=GPmousePositionCoordinate-] input[readonly] {\n border: 1px solid transparent;\n padding: 2px;\n text-align: right;\n}\n\ninput[id^=GPmousePositionLat-], input[id^=GPmousePositionLon-] {\n width: 120px;\n}\n\nspan[id^=GPmousePositionAlt-] {\n display: inline-block;\n padding: 2px;\n width: 120px;\n line-height: 20px;\n text-align: right;\n}\n\n.GPSexagesimal {\n width: 30px;\n}\n\n.GPSexagesimalsec {\n width: 45px;\n}\n\nspan[id^=GPmousePositionCloseEdit] {\n background-position: -18px 0;\n margin-left: 5px;\n}\n\nimg[id^=GPmousePositionMarker]:hover {\n cursor: pointer;\n opacity: 0.7;\n}\n\n/* Map center localisation */\n\n#GPmapCenter {\n background-image: url(\"img/GPmapCenter.png\");\n}\n\n#GPmapCenter {\n display: none;\n position: absolute;\n top: 50%;\n left: 50%;\n width: 50px;\n height: 50px;\n margin-top: -25px;\n margin-left: -25px;\n}\n\n#GPmapCenter.GPmapCenterVisible {\n display: block;\n}\n","/* MOUSE POSITION */\r\n\r\ndiv[id^=GPdrawing-] {\r\n top: 48px;\r\n right: 8px;\r\n}\r\n\r\n/* Showing/hiding drawing panel */\r\n\r\nbutton[id^=\"GPshowDrawingPicto-\"] {}\r\n\r\nbutton[id^=\"GPshowDrawingPicto-\"][aria-pressed=\"false\"] + dialog {\r\n display: none;\r\n visibility: hidden;\r\n opacity: 0%;\r\n}\r\n\r\nbutton[id^=\"GPshowDrawingPicto-\"][aria-pressed=\"true\"] + dialog {\r\n display: flex;\r\n flex-direction: column;\r\n visibility: visible;\r\n opacity: 100%;\r\n}\r\n\r\n/* General panels */\r\n\r\n[id^=GPdrawingPanel-] {\r\n top: 0px;\r\n left: -276px;\r\n position: absolute;\r\n height: inherit;\r\n overflow: hidden;\r\n bottom: unset; /* fix dsfr */\r\n}\r\n\r\n/* Basic infos */\r\n\r\ndiv[id^=GPdrawingBasicPanel-] {\r\n padding: 10px 15px;\r\n}\r\n\r\n.drawing-tool-section:not(:last-child) {\r\n border-bottom: 1px solid #ddd;\r\n}\r\n\r\n.drawing-tool-section {\r\n padding: 2px 5px 5px;\r\n}\r\n\r\n.drawing-tool-section-title {\r\n /* font-family: OpenSansExtraBold,\"Open Sans\",Arial,sans-serif; */\r\n font-size: 0.75em;\r\n margin-bottom: 0;\r\n margin-top: 0;\r\n text-transform: uppercase;\r\n}\r\n\r\ndiv.drawing-tools-flex-display {\r\n justify-content: center;\r\n padding : 0;\r\n margin: 12px 0;\r\n}\r\n.drawing-tools-flex-display {\r\n align-items: center;\r\n display: flex;\r\n}\r\n\r\n.drawing-tool:not(:last-child) {\r\n margin-right: 10px;\r\n}\r\n\r\n","/* ROUTE */\r\n\r\ndiv[id^=GProute-] {\r\n top: 100px;\r\n left: 10px;\r\n}\r\n\r\n/* Showing/hiding panel */\r\n\r\nbutton[id^=\"GPshowRoutePicto-\"][aria-pressed=\"false\"] + dialog {\r\n display: none;\r\n visibility: hidden;\r\n opacity: 0%;\r\n}\r\n\r\nbutton[id^=\"GPshowRoutePicto-\"][aria-pressed=\"true\"] + dialog {\r\n display: flex;\r\n flex-direction: column;\r\n visibility: visible;\r\n opacity: 100%;\r\n}\r\n\r\n/* General panels */\r\n\r\n[id^=GProutePanel-] {\r\n position: absolute;\r\n height: inherit;\r\n top: 0px;\r\n left: 34px;\r\n}\r\n\r\nbutton[id^=GProuteReset]:hover {\r\n opacity: 1;\r\n}\r\n\r\n/* Route form */\r\nform[id^=GProuteForm] > .GPlocationStageFlexInput {\r\n margin-top: 5px;\r\n}\r\n\r\nform[id^=GProuteForm] > .GPlocationStageFlexInputHidden {\r\n margin-top: 0;\r\n}\r\n\r\nform[id^=GProuteForm].GProuteFormMini .GPlocationStageFlexInput:first-child {\r\n margin-top: 5px;\r\n}\r\n\r\nlabel.GProuteOriginPointerImg[id*=\"GProuteOriginPointerImg\"] {\r\n width: 28px;\r\n border-top-right-radius: 3px;\r\n border-bottom-right-radius: 3px;\r\n border-right: 1px solid #999;\r\n}\r\n\r\ninput[id*=\"GProuteOriginPointer\"] + .GProuteOriginPointerImg {\r\n background-position: -1px -1px;\r\n}\r\n\r\ninput[id*=\"GProuteOriginPointer\"]:checked + .GProuteOriginPointerImg {\r\n background-position: -29px -1px;\r\n}\r\n\r\n.GProuteStageRemove,\r\ndiv[id^=GProuteStageAdd] {\r\n width: 28px;\r\n border: none;\r\n cursor: pointer;\r\n}\r\n\r\n.GProuteFormMini {\r\n overflow: hidden;\r\n -webkit-transform: translateY(-5px);\r\n transform: translateY(-5px);\r\n}\r\n\r\n.GProuteFormMini button[id^=GPshowRouteExclusionsPicto],\r\n.GProuteFormMini .GProuteStageRemove,\r\n.GProuteFormMini div[id^=GProuteStageAdd],\r\n.GProuteFormMini > *:not(.selected),\r\n.GProuteFormMini div[id^=\"GProuteModeChoice\"],\r\n.GProuteFormMini button[id^=\"GPshowRouteExclusions\"][aria-pressed=\"true\"] + div[id^=\"GProuteExclusions\"],\r\n.GProuteFormMini .GPpanelFooter {\r\n display: none;\r\n}\r\n\r\n.GProuteStageRemove {\r\n background-position: -84px 0;\r\n}\r\n\r\ndiv[id^=GProuteStageAdd] {\r\n background-position: -56px 0;\r\n}\r\n\r\n[class*=\"GPlocationPoint\"] {\r\n position: relative;\r\n}\r\n\r\n/* Mode choice */\r\n\r\ndiv[id^=GProuteModeChoice] {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n -webkit-justify-content: space-around;\r\n -ms-flex-pack: distribute;\r\n justify-content: space-around;\r\n margin: 15px 0;\r\n}\r\n\r\ndiv[id^=GProuteTransportChoice] > .GProuteTransportChoice {\r\n display: inline-flex;\r\n}\r\n\r\n/* Showing/hiding exclusions */\r\n\r\nbutton[id^=\"GPshowRouteExclusions\"] {\r\n position: absolute;\r\n border: unset;\r\n bottom: unset;\r\n right: 0;\r\n transition: all 0.5s ease-out 0s;\r\n}\r\n\r\nbutton[id^=\"GPshowRouteExclusions\"][aria-pressed=\"true\"] {\r\n transform: translateY(-100%) rotateX(180deg);\r\n}\r\n\r\nbutton[id^=GPshowRouteExclusions][aria-pressed=\"false\"] + div[id^=GProuteExclusions] {\r\n max-height: 0;\r\n opacity: 0;\r\n margin-bottom: 0;\r\n}\r\n\r\nbutton[id^=GPshowRouteExclusions][aria-pressed=\"true\"] + div[id^=GProuteExclusions] {\r\n display: block;\r\n max-height: 76px;\r\n opacity: 1;\r\n margin-bottom: 15px;\r\n}\r\n\r\ndiv[id^=GProuteExclusions] {\r\n transition: max-height 0.5s ease-in-out 0.25s, opacity 0.5s ease-in-out 0.25s, margin 0.3s ease-in-out 0.25s;\r\n overflow: hidden;\r\n}\r\n\r\n/* Result panel */\r\n\r\ndiv[id^=GProuteResultsPanel] {\r\n padding: 15px;\r\n}\r\n\r\ndiv[id^=GProuteResults-] {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n -webkit-justify-content: space-between;\r\n -webkit-box-pack: justify;\r\n -ms-flex-pack: justify;\r\n justify-content: space-between;\r\n -webkit-align-items: center;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n margin-bottom: 10px;\r\n}\r\n\r\ndiv[id^=GProuteResultsNew]:hover {\r\n opacity: 1;\r\n}\r\n\r\n\r\n","/* Location */\r\n\r\n[id^=GPlocationStageRemove] {\r\n\r\n}\r\n\r\n[id^=GPlocationStageAdd] {\r\n\r\n}\r\n\r\n\r\n\r\n/* All div elements whose class attribute value begins with \"GPlocationPoint\" */\r\n[class*=\"GPlocationPoint\"] {\r\n position: relative;\r\n}\r\n\r\ndiv[id^=GPlocationAutoCompleteResult] {\r\n top: 45px;\r\n left: 0px;\r\n max-height: 140px;\r\n overflow-y: auto;\r\n background-color: var(--background-default-grey);;\r\n border: 1px solid var(--grey-900-175);\r\n border-top: none;\r\n}\r\n\r\ndiv[id^=GPlocationAutoCompleteList] {\r\n position: absolute;\r\n z-index: 2;\r\n width: calc(100% - 56px);\r\n}\r\n","/* ISOCHRON */\r\n\r\ndiv[id^=GPisochron-] {\r\n top: 140px;\r\n left: 10px;\r\n}\r\n\r\n/* Showing/hiding mouse position panel */\r\n\r\nbutton[id^=\"GPshowIsochronPicto-\"][aria-pressed=\"false\"] + dialog {\r\n display: none;\r\n visibility: hidden;\r\n opacity: 0%;\r\n}\r\n\r\nbutton[id^=\"GPshowIsochronPicto-\"][aria-pressed=\"true\"] + dialog {\r\n display: flex;\r\n flex-direction: column;\r\n visibility: visible;\r\n opacity: 100%;\r\n}\r\n\r\n/* General panels */\r\n\r\n[id^=GPisochronPanel-] {\r\n position: absolute;\r\n height: inherit;\r\n top: 0px;\r\n left: 34px;\r\n z-index:2;\r\n}\r\n\r\n/* Isochron form */\r\n\r\ninput[id^=\"GPisochronOriginPointer\"] + .GPisochronOriginPointerImg {\r\n background-position: -1px -1px;\r\n}\r\n\r\ninput[id^=\"GPisochronOriginPointer\"]:checked + .GPisochronOriginPointerImg {\r\n background-position: -29px -1px;\r\n}\r\n\r\n/* Alternative choice */\r\n\r\ndiv[id^=GPisochronChoice] {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n}\r\n\r\n/*\r\ninput[id^=GPisochronChoiceAltChron] + .GPisochronChoiceAltImg {\r\n background-position: -56px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron]:checked + .GPisochronChoiceAltImg {\r\n background-position: -84px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltDist] + .GPisochronChoiceAltImg {\r\n background-position: -112px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltDist]:checked + .GPisochronChoiceAltImg {\r\n background-position: -140px 0;\r\n}*/\r\n\r\n\r\n/* Mode choice */\r\n\r\n.GPisochronFormMini {\r\n max-height: 58px;\r\n overflow: hidden;\r\n}\r\n\r\n.GPisochronFormMini .GPpanelFooter button[id^=\"GPisochronReset-\"],\r\n.GPisochronFormMini .GPpanelFooter input[id^=\"GPisochronSubmit-\"],\r\n.GPisochronFormMini [id^=\"GPisochronPointLabelP-\"],\r\n.GPisochronFormMini [id^=\"GPisochronChoice-\"],\r\n.GPisochronFormMini [id^=\"GPisochronValueChronLabelP-\"],\r\n.GPisochronFormMini [id^=\"GPisochronValueChron-\"],\r\n.GPisochronFormMini [id^=\"GPisochronTransportChoice-\"],\r\n.GPisochronFormMini [id^=\"GPisochronDirectionChoice-\"],\r\n.GPisochronFormMini [id^=\"GPisoExclusions-\"],\r\n.GPisochronFormMini .GPpanelFooter,\r\n.GPisochronFormMini button[id^=\"GPshowIsoExclusionsPicto-\"] {\r\n display: none;\r\n}\r\n\r\n.GPisochronFormMini {\r\n max-height: 78px;\r\n}\r\n\r\n.GPisochronFormMini .GPelementShow {\r\n color: var(--grey-200-850);\r\n}\r\n\r\ndiv[id^=GPisochronTransportChoice] > div {\r\n display: inline-flex;\r\n gap: 1rem;\r\n}\r\n\r\n/* Showing/hiding exclusions */\r\n\r\nbutton[id^=\"GPshowIsoExclusions\"] {\r\n position: absolute;\r\n border: unset;\r\n bottom: unset;\r\n right: 0;\r\n transition: all 0.5s ease-out 0s;\r\n transform: translateY(-100%);\r\n}\r\n\r\nbutton[id^=\"GPshowIsoExclusions\"][aria-pressed=\"true\"] {\r\n transform: translateY(-100%) rotateX(180deg);\r\n}\r\n\r\nbutton[id^=GPshowIsoExclusions][aria-pressed=\"false\"] + div[id^=GPisoExclusions] {\r\n max-height: 0;\r\n opacity: 0;\r\n margin-bottom: 0;\r\n}\r\n\r\nbutton[id^=GPshowIsoExclusions][aria-pressed=\"true\"] + div[id^=GPisoExclusions] {\r\n display: block;\r\n max-height: 76px;\r\n opacity: 1;\r\n margin-bottom: 15px;\r\n}\r\n\r\n.GPisochronFormMini button[id^=GPshowIsoExclusions][aria-pressed=\"true\"] + div[id^=GPisoExclusions] {\r\n display: none;\r\n}\r\n\r\ndiv[id^=GPisoExclusions] {\r\n transition: max-height 0.5s ease-in-out 0.25s, opacity 0.5s ease-in-out 0.25s, margin 0.3s ease-in-out 0.25s;\r\n overflow: hidden;\r\n}\r\n\r\n/* Reset picto */\r\n\r\nbutton[id^=GPisochronReset] {\r\n\r\n}\r\n\r\n\r\n\r\n","/* REVERSE GEOCODING */\r\n\r\ndiv[id^=\"GPreverseGeocoding-\"] {\r\n top: 180px;\r\n left: 10px;\r\n}\r\n\r\n/* Showing/hiding reverse geocoding panel */\r\n\r\nbutton[id^=\"GPshowReverseGeocodingPicto-\"][aria-pressed=\"false\"] + dialog {\r\n display: none;\r\n visibility: hidden;\r\n opacity: 0%;\r\n}\r\n\r\nbutton[id^=\"GPshowReverseGeocodingPicto-\"][aria-pressed=\"true\"] + dialog {\r\n display: flex;\r\n flex-direction: column;\r\n visibility: visible;\r\n opacity: 100%;\r\n}\r\n\r\n/* General panels */\r\n\r\n[id^=\"GPreverseGeocodingPanel-\"] {\r\n position: absolute;\r\n left: 34px;\r\n top: 0px;\r\n height: inherit;\r\n}\r\n\r\n/* Search panel */\r\n\r\n[id^=\"GPreverseGeocodingForm-\"] {\r\n position: relative;\r\n max-height: 270px;\r\n overflow-y: auto;\r\n padding-left: 15px;\r\n padding-right: 15px;\r\n padding-top: 10px;\r\n}\r\n\r\n\r\ninput[id^=\"GPreverseGeocodingSubmit-\"] {\r\n margin-top: 5px;\r\n margin-bottom: 15px;\r\n /* width: 100px; */\r\n}\r\n\r\n/* Result panel */\r\n\r\ndiv[id^=GPreverseGeocodingResultsList-] {\r\n position: relative;\r\n max-height: 210px;\r\n overflow-y: auto;\r\n}\r\n","/****************/\n/* Layer Import */\n/****************/\n\ndiv[id^=\"GPimport-\"] {\n top: 220px;\n left: 10px;\n}\n\n/*******************************/\n/* Showing/hiding import panel */\n/******************************/\n\nbutton[id^=\"GPshowImportPicto-\"][aria-pressed=\"false\"] + dialog {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\nbutton[id^=\"GPshowImportPicto-\"][aria-pressed=\"true\"] + dialog {\n display: flex;\n flex-direction: column;\n visibility: visible;\n opacity: 100%;\n}\n\n/******************/\n/* General panels */\n/******************/\n\n[id^=\"GPimportPanel-\"],\n[id^=\"GPimportGetCapPanel-\"],\n[id^=\"GPimportMapBoxPanel-\"] {\n /* left: 34px;\n top: 0px; */\n height: inherit;\n}\n\n[id^=\"GPimportPanel-\"] {\n position: absolute;\n}\n\n[id^=\"GPimportGetCapPanel-\"],\n[id^=\"GPimportMapBoxPanel-\"] {\n position: relative;\n}\n\n[id^=\"GPimportGetCapPanel-\"],\n[id^=\"GPimportMapBoxPanel-\"] {\n /* display: none; */\n width: 340px;\n}\n\n/***************/\n/* Import form */\n/***************/\nform[id^=GPimportForm-] {\n padding: 15px;\n}\n\ndiv[id^=\"GPimportChoice-\"] {\n display: -ms-flexbox;\n display: -webkit-box;\n display: flex;\n -ms-flex-pack: distribute;\n justify-content: space-around;\n}\n\ninput[id^=\"GPimportSubmit-\"] {\n margin-top: 20px;\n}\n\n/*******************/\n/* Get cap results */\n/*******************/\n\ndiv[id^=\"GPimportGetCapResults-\"],\ndiv[id^=\"GPimportMapBoxResults-\"] {\n background-color: #FFF;\n height: 140px;\n overflow-y: auto;\n resize: vertical;\n}\n\ninput[id^=\"GPimportGetCapRubrique-\"],\ninput[id^=\"GPimportMapBoxSource-\"] {\n display: none;\n}\n\ninput[id^=\"GPimportGetCapRubrique-\"]~li,\ninput[id^=\"GPimportMapBoxSource-\"]~div {\n display: none;\n}\n\ninput[id^=\"GPimportGetCapRubrique-\"]:checked~li,\ninput[id^=\"GPimportMapBoxSource-\"]:checked~div {\n display: block;\n}\n\ninput[id^=\"GPimportGetCapRubrique-\"]~ul {\n display: block;\n}\n\ninput[id^=\"GPimportGetCapRubrique-\"]:checked~ul {\n display: none;\n}\n\n",".GPimportMapBoxpRoot {\n padding: 5px;\n}\n\n.GPEditorMapBoxContainer {\n width: 100%;\n height: auto;\n position: relative;\n padding: 5px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-box-shadow: 0 0 5px #000000;\n box-shadow: 0 0 5px #000000;\n border-style: solid;\n border-width: 1px;\n border-color: lightskyblue;\n border-radius: 5px;\n}\n\n.GPEditorMapBoxSep {\n display: block;\n width: 50%;\n border-style: double;\n border-width: 4px;\n border-color: lightskyblue;\n}\n\n.GPEditorMapBoxLayersTitle,\n.GPEditorMapBoxThemesTitle {\n padding: 5px;\n font-style: italic;\n font-weight: bold;\n}\n\n/* desactive un composant */\n.disabled {\n pointer-events: none;\n opacity: 0.5;\n}\n\n/*******************************************************************************\nGROUPS\n*******************************************************************************/\n.GPEditorMapBoxGroupContainer {}\n\n/* FIXME : modifier la couleur de la puce ? */\n.GPEditorMapBoxGroupDetails {\n border-style: dotted;\n border-width: 1px;\n border-radius: 5px;\n border-color: lightskyblue\n}\n\n.GPEditorMapBoxGroupSummary {}\n\n/*******************************************************************************\nLAYERS\n*******************************************************************************/\n\n/* - container principal */\n.GPEditorMapBoxLayersContainer {\n\n}\n/* - container layers */\n.GPEditorMapBoxLayerContainer {\n width: 100%;\n min-height: 28px;\n display: -webkit-inline-box;\n display: -ms-inline-flexbox;\n display: inline-flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n /* background-color: red; */\n}\n/* - container titre */\n.GPEditorMapBoxLayerTitleContainer {\n width: inherit;\n min-height: 28px;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: start;\n -ms-flex-pack: start;\n justify-content: flex-start;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n /* background-color: grey; */\n}\n.GPEditorMapBoxLayerImageInput {\n display: none;\n}\n.GPEditorMapBoxLayerImageLabel {\n min-width: 24px;\n min-height: 28px;\n cursor: pointer;\n /* position: absolute; */\n background-image: url(\"img/GPEditorLayerTools.png\");\n background-position: -56px 0;\n /* background-color: green; */\n}\ninput[type=\"checkbox\"]:checked + .GPEditorMapBoxLayerImageLabel {\n -webkit-transform: rotate(90deg);\n -ms-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n.GPEditorMapBoxLayerTypeImage {\n min-width: 30px;\n min-height: 30px;\n margin-right: 5px;\n background-repeat: no-repeat;\n cursor: pointer;\n /* position: absolute; */\n /* background-image: url(\"img/GPEditorLayerTypeIcon.svg\"); */\n background-image: url(\"img/GPEditorLayerTypeIcon.png\");\n background-position: 0px 0;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-box-shadow: 2px 2px 1px lightgrey;\n box-shadow: 2px 2px 1px lightgrey;\n border-style: solid;\n border-width: 1px;\n border-radius: 5px;\n border-color: gray;\n /* background-color: blue; */\n}\n.GPEditorMapBoxLayerTitleInput {\n display: none;\n}\n.GPEditorMapBoxLayerTitleLabel {\n width: inherit;\n /* margin-inline-start: 28px; */\n cursor: pointer;\n /* background-color: yellow; */\n border-style: solid;\n border-width: 1px;\n border-radius: 5px;\n border-color: gray;\n -webkit-box-shadow: 2px 2px 1px lightgrey;\n box-shadow: 2px 2px 1px lightgrey;\n padding: 5px;\n margin-left: 5px;\n word-break: break-word;\n}\ninput[type=\"checkbox\"]:checked + .GPEditorMapBoxLayerTitleLabel {\n background-color: lightgrey;\n}\n\n/* - container legend */\n.GPEditorMapBoxLayerLegendContainer {\n\n}\n\n/* - container outils */\n.GPEditorMapBoxToolsContainer {\n min-width: 28px;\n height: 28px;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: end;\n -ms-flex-pack: end;\n justify-content: flex-end;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n /* background-color: pink; */\n}\n.GPEditorMapBoxToolsVisibilityInput {\n display: none;\n}\n.GPEditorMapBoxToolsVisibilityInputDisable {\n display: \"block\";\n}\n\n.GPEditorMapBoxToolsVisibilityLabel {\n width: 28px;\n height: 28px;\n cursor: pointer;\n /* position: absolute; */\n background-image: url(\"img/GPEditorLayerTools.png\");\n background-position: -28px 0;\n /* background-color: white; */\n}\n.GPEditorMapBoxToolsVisibilityLabelDisable {\n cursor: pointer;\n}\n\ninput[type=\"checkbox\"]:checked + .GPEditorMapBoxToolsVisibilityLabel {\n background-position: 0 0;\n}\n\n/*******************************************************************************\n FILTERS\n*******************************************************************************/\n\n/* - container principal */\n.GPEditorMapBoxFilterContainer {\n width: 100%;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n -webkit-box-align: start;\n -ms-flex-align: start;\n align-items: flex-start;\n /* background-color: red; */\n margin-left: 28px;\n}\n/* - container titre + editeur json */\n.GPEditorMapBoxFilterJsonContainer {\n border-style: solid;\n border-radius: 5px;\n border-width: 1px;\n padding: 5px;\n}\n.GPEditorMapBoxFilterTitleJson {\n\n}\n.GPEditorMapBoxFilterDisplayJson {\n width: 175px;\n height: 125px;\n cursor: pointer;\n overflow: scroll;\n resize: vertical;\n}\n\n/* - container outils editions */\n.GPEditorMapBoxFilterToolsEditionContainer {\n /* border-style: solid;\n border-radius: 5px;\n padding: 5px; */\n}\n/* - container outils boutons enregister/annuler */\n.GPEditorMapBoxFilterToolsButtonsContainer {\n /* border-style: solid;\n border-radius: 5px;\n padding: 5px; */\n}\n\n/*******************************************************************************\n THEMES\n*******************************************************************************/\n\n/* - container principal */\n.GPEditorMapBoxThemesContainer {\n width: 175px;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n -webkit-box-align: start;\n -ms-flex-align: start;\n align-items: flex-start;\n /* background-color: red; */\n}\n\n/* - container d'un theme */\n.GPEditorMapBoxThemeContainer {\n width: inherit;\n border-style: solid;\n border-radius: 5px;\n border-width: 1px;\n padding: 5px;\n margin: 5px;\n text-align: center;\n}\n\n.GPEditorMapBoxThemeContainer:focus {\n background-color: lightgrey;\n}\n\n.GPEditorMapBoxThemeImage {\n width: 120px;\n height: 60px;\n cursor:pointer;\n}\n.GPEditorMapBoxThemeTitle {\n padding: 5px;\n cursor:pointer;\n}\n\n.GPEditorMapBoxThemeMessage {\n font-style: italic;\n color: red;\n}\n/*******************************************************************************\n STYLES\n*******************************************************************************/\n\n/* - container principal */\n.GPEditorMapBoxStyleContainer {\n width: 100%;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n -webkit-box-align: start;\n -ms-flex-align: start;\n align-items: flex-start;\n /* background-color: red; */\n margin-left: 28px;\n}\n/* - container titre + editeur json */\n.GPEditorMapBoxStyleJsonContainer {\n border-style: solid;\n border-radius: 5px;\n border-width: 1px;\n padding: 5px;\n}\n.GPEditorMapBoxStyleTitleJson {\n\n}\n.GPEditorMapBoxStyleJsonDisplay {\n width: 175px;\n height: 125px;\n cursor: pointer;\n overflow: scroll;\n resize: vertical;\n}\n/* - container outils Scale */\n.GPEditorMapBoxStyleToolsScaleContainer {\n width: -webkit-min-content;\n width: -moz-min-content;\n width: min-content; /* FIXME */\n border-style: solid;\n border-radius: 5px;\n border-width: 1px;\n padding: 5px;\n}\n.GPEditorMapBoxStyleScaleTitle {}\n.GPEditorMapBoxStyleToolsScaleMaxContainer,\n.GPEditorMapBoxStyleToolsScaleMinContainer {\n width: 175px;\n display: -webkit-inline-box;\n display: -ms-inline-flexbox;\n display: inline-flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n}\n.GPEditorMapBoxStyleScaleLabelMin {}\n.GPEditorMapBoxStyleScaleInputMin {}\n.GPEditorMapBoxStyleScaleLabelMax {}\n.GPEditorMapBoxStyleScaleInputMax {}\n\n/* - container outils editions */\n.GPEditorMapBoxStyleToolsEditionContainer {\n /* border-style: solid;\n border-radius: 5px;\n padding: 5px; */\n}\n /* - container outils boutons enregister/annuler */\n.GPEditorMapBoxStyleToolsButtonsContainer {\n /* border-style: solid;\n border-radius: 5px;\n padding: 5px; */\n}\n\n/*******************************************************************************\nJSON display Editor\n*******************************************************************************/\n.gp-json-string { color: green; }\n.gp-json-number { color: darkorange; }\n.gp-json-boolean { color: blue; }\n.gp-json-null { color: magenta; }\n.gp-json-key { color: red; }\n\n\n/*******************************************************************************\nLEGEND\n*******************************************************************************/\n\n.GPEditorMapBoxLegendContainer {\n width: 100%;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n -webkit-box-align: start;\n -ms-flex-align: start;\n align-items: flex-start;\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n margin-left: 28px;\n}\n\n.GPEditorMapBoxLegendRenderContainer {\n display: -webkit-inline-box;\n display: -ms-inline-flexbox;\n display: inline-flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n width: 175px;\n padding: 5px;\n border-style: solid;\n border-radius: 5px;\n border-width: 1px;\n overflow-y: auto;\n}\n\n.GPEditorMapBoxLegendInput {\n\n}\n.GPEditorMapBoxLegendRender {\n min-width: 28px;\n min-height: 28px;\n border-color: transparent;\n border-style: solid;\n border-width: 1px;\n border-radius: 5px;\n -webkit-box-shadow: 2px 2px 1px grey;\n box-shadow: 2px 2px 1px grey;\n cursor: pointer;\n}\n.GPEditorMapBoxLegendEditable {\n border-color: black;\n}\n.GPEditorMapBoxLegendTitle {\n margin-left: 10px;\n}\n\n.GPEditorMapBoxLegendToolsContainer {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n width: 230px;\n padding: 5px;\n}\n\n.legend-background {}\n.legend-fill ,\n.legend-line {\n /* margin: auto;\n padding: 5px; */\n}\n.legend-icon {}\n.legend-text {}\n.legend-circle {}\n.legend-unknow,\n.legend-not-implemented {\n background-color: #FFFFFF;\n}\n.legend-unknow:before {\n content: '\\2753';\n color: red;\n font-size: 15px;\n}\n.legend-not-implemented:before {\n content: '\\2718';\n color: red;\n font-size: 15px;\n}\n.legend-fill-not-editable {\n\n}\n.legend-circle-not-editable,\n.legend-line-not-editable {\n border-color: white;\n}\n\n.legend-styling-div {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n}\n.legend-styling {\n width: 50px;\n}\n","div[id^=GPelevationPath-] {\n /* height: 36px; */\n}\n\n/* Showing/hiding elevationPath panel */\n\n\nbutton[id^=\"GPshowElevationPathPicto-\"] {}\n\nbutton[id^=\"GPshowElevationPathPicto-\"][aria-pressed=\"false\"] + dialog {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\nbutton[id^=\"GPshowElevationPathPicto-\"][aria-pressed=\"true\"] + dialog {\n display: flex;\n flex-direction: column;\n visibility: visible;\n opacity: 100%;\n}\n\n/* Panel */\n\n[id^=GPelevationPathPanelReduce] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: -50px center;\n}\n\n[id^=GPelevationPathPanel-] {\n position : absolute;\n top : 6px;\n left: 32px;\n}\n\n/* ELEVATION PATH DISPLAY */\n\nbutton[id^=GPelevationPathPanelReduce] {\n display: none; /* on n'affiche pas le bouton d'information par defaut */\n}\n\nbutton[id^=GPelevationPathPanelInfo] {\n display: none; /* on n'affiche pas le bouton d'information par defaut */\n}\n\n.tooltipInit {\n opacity: 0;\n}\n\n.tooltipFadeIn {\n transition: opacity 300ms ease 0ms, transform 50ms ease 0s, top 50ms ease 0s, left 50ms ease 0s;\n opacity: 1;\n}\n\n.tooltipFadeOut {\n transition: opacity 500ms ease 0ms;\n opacity: 0;\n}\n","/* TODO coller un peu plus à la charte\n- liseret blanc transparent 32x32 autour du pictogramme\n- pictogramme 26x26\n- ...\n*/\ndiv[id^=GPtoolbox-measure-main] {\n float: left;\n left: 78px;\n top: 8px;\n position: absolute;\n display: inline-block;\n z-index: 1;\n}\n\ndiv[id^=GPtoolbox-measure-widget] {\n left: auto;\n display: none;\n /*visibility: hidden;*/\n /*position: absolute;*/\n /*right: 0;*/\n border-radius: 2px;\n /*background-color: #f9f9f9;*/\n /*box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);*/\n}\n\ndiv[id^=GPtoolbox-measure-widget]>div {\n display: block;\n /*visibility: visible;*/\n position: relative;\n top: auto;\n left: auto;\n bottom: auto;\n right: auto;\n}\n\ndiv[id^=GPtoolbox-measure-main]:hover {\n /*display: block;*/\n /*visibility: visible;*/\n}\n\ndiv[id^=GPtoolbox-measure-main]:hover:not(.active) {\n /*background-color: rgba(0,60,136,0.3);*/\n}\n\ndiv[id^=GPtoolbox-measure-main]:hover button[id^=GPtoolbox-measure-button] {\n background-color: rgba(0, 60, 136, 0.7);\n}","div[id^=GPmeasureLength-] {\r\n top: 260px;\r\n left: 42px;\r\n}\r\n\r\nbutton[id^=\"GPshowMeasureLengthPicto-\"] {}\r\n","div[id^=GPmeasureArea-] {\r\n top: 260px;\r\n left: 74px;\r\n}\r\n\r\nbutton[id^=\"GPshowMeasureAreaPicto-\"] {\r\n \r\n}\r\n\r\n","div[id^=GPmeasureAzimuth-] {\r\n top: 260px;\r\n left: 10px;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"] {\r\n \r\n}\r\n","[id^=GPzoom-] {\n top: 0.5em;\n left: 0.5em;\n}\n\n.ol-custom-zoom {}\n\n.ol-custom-zoom-in,\n.ol-custom-zoom-out {}","[id^=GPfullScreen-] {\n bottom: 0.5em;\n left: 0.5em;\n}\n\n.ol-custom-full-screen {}","div[id^=\"GPoverviewMap-\"] {\n left: 0.5em;\n bottom: 10.5em;\n}\n\nbutton[id^=\"GPshowOverviewMap-\"] {}\n\n.ol-overviewmap.ol-collapsed .ol-overviewmap-map {\n border: none;\n height: 100px;\n width: 100px;\n}\n\n.ol-overviewmap .ol-overviewmap-box {\n border: 2px solid red;\n}\n\n.ol-overviewmap:not(.ol-collapsed) button {\n position: relative;\n}\n/* \n.ol-overviewmap .ol-overviewmap-map {\n position: relative;\n left: 50px;\n} \n*/","div[id^=GPlegends-] {\n top: 58px;\n right: 8px;\n}\n\n.position > div[id^=GPlegends-] > dialog[id^=GPlegendsPanel] {\n position: absolute;\n}\n\n/* Showing/hiding */\n\nbutton[id^=GPshowLegendsPicto][aria-pressed=\"false\"] + dialog {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\nbutton[id^=\"GPshowLegendsPicto-\"][aria-pressed=\"true\"] + dialog {\n display: flex;\n flex-direction: column;\n visibility: visible;\n opacity: 100%;\n width: 350px;\n height: initial;\n max-height: inherit;\n}\n\n","div[id^=GPterritories-] {\n top: 0px;\n right: 0px;\n}\n\n/* Showing/hiding */\n\nbutton[id^=GPshowTerritoriesPicto][aria-pressed=\"false\"] + dialog {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\nbutton[id^=\"GPshowTerritoriesPicto-\"][aria-pressed=\"true\"] + dialog {\n display: flex;\n flex-direction: column;\n visibility: visible;\n opacity: 100%;\n max-width: 470px;\n height: initial;\n max-height: inherit;\n}\n\ndialog[id^=\"GPterritoriesPanel-\"] {\n position: absolute;\n}\n","/* Showing/hiding */\n\nbutton[id^=GPshowControlListPicto][aria-pressed=\"false\"] + dialog {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\nbutton[id^=\"GPshowControlListPicto-\"][aria-pressed=\"true\"] + dialog {\n display: flex;\n flex-direction: column;\n visibility: visible;\n opacity: 100%;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] {\n position: absolute;\n left: 34px;\n top: 0px;\n height: inherit;\n}\n\n","div[id^=GPcatalog-] {\n top: 0px;\n right: 0px;\n}\n\n/* Showing/hiding */\n\nbutton[id^=GPshowCatalogPicto][aria-pressed=\"false\"] + dialog {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\nbutton[id^=\"GPshowCatalogPicto-\"][aria-pressed=\"true\"] + dialog {\n display: flex;\n flex-direction: column;\n visibility: visible;\n opacity: 100%;\n width: 370px;\n height: initial;\n max-height: inherit;\n}\n\ndialog[id^=\"GPcatalogPanel-\"] {\n position: absolute;\n left: 34px;\n top: 0px;\n height: inherit;\n}\nform[id^=GPcatalogForm] {\n padding: 15px;\n}\n\n.catalog-container-tabs .fr-accordion .fr-collapse--expanded {\n padding-bottom: 0;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"GpfExtOL.css","mappings":"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","sources":["webpack://Gp/./src/packages/CSS/Controls/LayerSwitcher/GPFlayerSwitcher.css","webpack://Gp/./src/packages/CSS/Controls/GetFeatureInfo/GPFgetFeatureInfo.css","webpack://Gp/./src/packages/CSS/Controls/SearchEngine/GPFsearchEngine.css","webpack://Gp/./src/packages/CSS/Controls/MousePosition/GPFmousePosition.css","webpack://Gp/./src/packages/CSS/Controls/Drawing/GPFdrawing.css","webpack://Gp/./src/packages/CSS/Controls/Route/GPFroute.css","webpack://Gp/./src/packages/CSS/Controls/LocationSelector/GPFlocation.css","webpack://Gp/./src/packages/CSS/Controls/Isochron/GPFisochron.css","webpack://Gp/./src/packages/CSS/Controls/ReverseGeocoding/GPFreverseGeocoding.css","webpack://Gp/./src/packages/CSS/Controls/LayerImport/GPFlayerImport.css","webpack://Gp/./src/packages/CSS/Controls/Editor/GPFeditor.css","webpack://Gp/./src/packages/CSS/Controls/ElevationPath/GPFelevationPath.css","webpack://Gp/./src/packages/CSS/Controls/ToolBoxMeasure/GPFtoolBoxMeasure.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureLength.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureArea.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureAzimuth.css","webpack://Gp/./src/packages/CSS/Controls/Zoom/GPFzoom.css","webpack://Gp/./src/packages/CSS/Controls/FullScreen/GPFfullScreen.css","webpack://Gp/./src/packages/CSS/Controls/OverviewMap/GPFoverviewMap.css","webpack://Gp/./src/packages/CSS/Controls/Legends/GPFlegends.css","webpack://Gp/./src/packages/CSS/Controls/Territories/GPFterritories.css","webpack://Gp/./src/packages/CSS/Controls/ControlList/GPFcontrolList.css","webpack://Gp/./src/packages/CSS/Controls/Catalog/GPFcatalog.css"],"sourcesContent":["/* LAYER SWITCHER */\r\n\r\ndiv[id^=GPlayerSwitcher-] {\r\n top: 8px;\r\n right: 8px;\r\n}\r\n\r\ndiv[id^=GPlayerSwitcher-] [draggable] {\r\n -moz-user-select: none;\r\n -khtml-user-select: none;\r\n -webkit-user-select: none;\r\n user-select: none;\r\n /* Required to make elements draggable in old WebKit */\r\n -khtml-user-drag: element;\r\n -webkit-user-drag: element;\r\n}\r\n\r\n/* Manage opening of the components through hiden checkboxes */\r\n\r\ndiv[id^=GPlayerSwitcher-] input[type=\"checkbox\"] + button + dialog {\r\n max-height: 0px;\r\n}\r\n\r\ninput[id^=GPshowLayersList-] {\r\n display: none;\r\n}\r\n\r\n/* Showing/hiding layers list */\r\n\r\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"false\"] + dialog {\r\n display: none;\r\n visibility: hidden;\r\n opacity: 0%;\r\n}\r\n\r\n\r\nbutton[id^=\"GPshowLayersListPicto-\"][aria-pressed=\"true\"] + dialog {\r\n display: flex;\r\n flex-direction: column;\r\n visibility: visible;\r\n opacity: 100%;\r\n}\r\n\r\n/* Layers list */\r\n/* positionnement actif */\r\n.position > div[id^=GPlayerSwitcher-] > dialog[id^=GPlayersList] {\r\n position: absolute;\r\n}\r\n.position > div[id^=GPlayerSwitcher-] > button[id^=GPshowLayersListPicto-] {\r\n float: unset;\r\n}\r\n\r\n/* positionnement inactif */\r\ndialog[id^=GPlayersList] {\r\n position: relative;\r\n float: left;\r\n}\r\nbutton[id^=GPshowLayersListPicto-] {\r\n float: right;\r\n}\r\n\r\ndialog[id^=GPlayersList] {\r\n border-bottom-right-radius: 0;\r\n opacity: 0;\r\n /* overflow: auto; */\r\n /* transition: max-height 0.5s ease-out 0s, opacity 0.5s ease-out 0.25s; */\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] + dialog[id^=GPlayersList] {\r\n height: initial;\r\n max-height: inherit;\r\n opacity: 1;\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"false\"] + dialog[id^=GPlayersList] {\r\n /* transition: max-height 0.5s ease-in 0s, opacity 0.25s ease-in 0s; */\r\n}\r\n\r\n.GPlayerCounter {\r\n position: relative;\r\n background: #fff;\r\n color: #000;\r\n padding: 2px 0px 1px;\r\n border-radius: 100px;\r\n min-width: 15px;\r\n text-align: center;\r\n font-size: 12px;\r\n line-height: 1;\r\n top: -15px;\r\n left: 15px;\r\n display: inline-block;\r\n}\r\n\r\n/* Layer : general */\r\n\r\n.GPlayerSwitcher_layer {\r\n position: relative;\r\n top: 0;\r\n border-bottom: 1px dotted #CCC;\r\n overflow: hidden;\r\n}\r\n\r\ndialog[id^=GPlayersList] .GPlayerSwitcher_layer:last-child {\r\n border-bottom: none;\r\n}\r\n\r\n/* Showing layer advanced tools */\r\n\r\n\r\n.GPlayerAdvancedTools {\r\n display: block;\r\n max-height: 0;\r\n opacity: 0;\r\n transition: max-height 0.5s ease-out 0s, opacity 0.5s ease-out 0s;\r\n}\r\n\r\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools {\r\n opacity: 1;\r\n}\r\n\r\n[id^=\"GPlayerInfoPanel\"] {\r\n left: unset;\r\n right: 100%;\r\n}\r\n\r\ndiv[id^=GPlayerInfoContent] {\r\n position: relative;\r\n max-height: 200px;\r\n overflow-y: auto;\r\n padding-left: 10px;\r\n padding-right: 10px;\r\n}\r\n\r\n","div[id^=GPgetFeatureInfo-] {\n top: 260px;\n left: 10px;\n }\n\n/* Showing/hiding */\n\ndialog:has(button.GPcloseGetFeatureInfo[aria-pressed=\"true\"]) {\n display: block;\n visibility: visible;\n opacity: 100%;\n width: 350px;\n height: initial;\n}\n\ndialog:has(button.GPcloseGetFeatureInfo[aria-pressed=\"false\"]) {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\ndialog[id^=\"GPgetFeatureInfoPanel-\"] {\n position: absolute;\n left: 47px;\n top: 2px;\n max-height: 52vh;\n overflow-x: hidden;\n}\n\n.GPgetFeatureInfoAccordionGroup {\n overflow-y: scroll;\n scrollbar-width: thin;\n max-height: calc(52vh - 92px);\n}\n\n.GPgetFeatureInfoAccordionContent {\n overflow-x: scroll;\n scrollbar-width: thin;\n}\n\n.waiting-div-container {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.lds-ring,\n.lds-ring div {\n box-sizing: border-box;\n}\n.lds-ring {\n display: inline-block;\n position: relative;\n width: 40px;\n height: 40px;\n}\n.lds-ring div {\n box-sizing: border-box;\n display: block;\n position: absolute;\n width: 32px;\n height: 32px;\n margin: 4px;\n border: 4px solid currentColor;\n border-radius: 50%;\n animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: currentColor transparent transparent transparent;\n}\n.lds-ring div:nth-child(1) {\n animation-delay: -0.45s;\n}\n.lds-ring div:nth-child(2) {\n animation-delay: -0.3s;\n}\n.lds-ring div:nth-child(3) {\n animation-delay: -0.15s;\n}\n@keyframes lds-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n","/* SEARCH ENGINE */\n\n[id^=\"GPsearchEngine-\"] {\n top: 8px;\n left: 46px;\n}\n\n[id^=\"GPsearchEngine-\"] {\n /* dsfr */\n display: flex;\n}\n\n#position-container-bottom-right > [id^=\"GPsearchEngine-\"],\n#position-container-top-right > [id^=\"GPsearchEngine-\"] {\n flex-direction: column;\n align-items: end;\n}\n/* Showing/hiding search engine input */\n\nbutton[id^=GPshowSearchEnginePicto] {\n display: inline-block;\n transition: border-radius 0s ease-out 0s;\n transition-delay: 0.5s;\n}\n\nbutton[id^=GPshowSearchEnginePicto][aria-pressed=\"true\"] {\n transition: border-radius 0.5s ease-out 0s;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] {\n border-bottom-right-radius: 0;\n transition-delay: 0s;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowAdvancedSearch],\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowGeolocate],\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowSearchByCoordinate] {\n display: none;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowAdvancedSearch],\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowGeolocate],\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowSearchByCoordinate] {\n display: inline-block;\n}\n\n[id^=GPshowSearchEngine-] + button + form[id^=GPsearchInput-] {\n max-width: 0px;\n}\n\n/* div[id^=GPautoCompleteList] {\n display: none;\n} */\n\n/* button[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] + div[id^=GPautoCompleteList] {\n display: block;\n} */\n\n/* Simple search input */\n\nform[id^=GPsearchInput-] {\n display: inline-block;\n position: relative;\n overflow: hidden;\n transition: max-width 0.5s ease-out 0s;\n}\n\nbutton[id^=GPsearchInputReset] {\n position: absolute;\n top: 0px;\n right: 0px;\n border: unset;\n}\n\n/* General panels */\n\n\n/* Advanced search picto */\n\nbutton[id^=GPshowAdvancedSearch] {\n transition: border-radius 0s ease-out 0s;\n transition-delay: 0.5s;\n}\n\n/* Advanced search panel */\n\n/* button[id^=GPshowAdvancedSearch][aria-pressed=\"true\"] + div[id^=GPadvancedSearchPanel] {\n display: inline-block;\n visibility: visible;\n opacity: 100%;\n}\n\nbutton[id^=GPshowAdvancedSearch][aria-pressed=\"false\"] + div[id^=GPadvancedSearchPanel] {\n display: none;\n visibility: hidden;\n opacity: 0%;\n} */\n\ndialog[id^=GPcoordinateSearchPanel],\ndialog[id^=GPadvancedSearchPanel] {\n height: inherit;\n vertical-align: top;\n overflow: hidden;\n bottom: unset; /* fix dsfr */\n}\n\nform[id^=GPcoordinateSearchForm],\nform[id^=GPadvancedSearchForm] {\n max-height: 250px;\n overflow-y: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n\ninput[id^=GPcoordinateSearchSubmit],\ninput[id^=GPadvancedSearchSubmit] {\n margin-top: 10px;\n margin-bottom: 15px;\n}\n\n\n\n/* Simple search input */\n\n[id^=\"GPsearchInput\"] {}\n\n\n[id^=\"GPshowSearchDiv\"]{\n display: flex;\n}\n\n/* General panels */\n\n.GPsearchFirstLineWrapper {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n/* Autocomplete list / geocode results */\n\n.GPlabelTitle {\n font-weight: bold;\n margin-bottom: 0;\n}\n\n[id^=\"GPautocompleteResults-\"] {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n[id^=\"GPautoCompleteList\"],\ndialog[id^=\"GPgeocodeResultsList\"] {\n margin-left: 33px;\n}\n\n[id^=\"GPautoCompleteList\"] {\n /* overflow-y: auto; */\n}\n\ndialog[id^=\"GPgeocodeResultsList\"] {\n top: 35px;\n border-radius: 4px;\n height: inherit;\n bottom: unset; /* fix dsfr */\n}\n\n[id^=\"GPautocompleteResultsSuggest\"],\n[id^=\"GPautocompleteResultsLocation\"] {\n width: inherit;\n padding: 0;\n overflow-y: auto;\n}\n\n/* Mode Mobile */\n\n@media (max-width: 576px) {\n\n button[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] {\n /* 56px: widget de gauche, 40px: bouton loupe, 58px: bouton géoloc, 16px: padding + border des boutons droite, 10px: padding du bouton géoloc*/\n max-width: calc(100vw - 56px - 40px - 58px - 16px - 10px);\n }\n\n}\n","/****************/\n/* MOUSE POSITION */\n/****************/\n\ndiv[id^=\"GPmousePosition-\"] {\n bottom: 8px;\n left: 10px;\n}\n\n/* Showing/hiding mousePosition panel */\n\nbutton[id^=\"GPshowMousePositionPicto-\"] {}\n\nbutton[id^=\"GPshowMousePositionPicto-\"][aria-pressed=\"false\"] + dialog {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\nbutton[id^=\"GPshowMousePositionPicto-\"][aria-pressed=\"true\"] + dialog {\n display: flex;\n flex-direction: column;\n visibility: visible;\n opacity: 100%;\n}\n\n/* General panels */\n\ndialog[id^=GPmousePositionPanel-] {\n bottom: 0px;\n}\n\n[id^=GPmousePositionPanel-] {\n overflow: hidden;\n left: 34px;\n top: inherit;\n position: absolute;\n height: inherit;\n}\n\n/* Basic infos */\n\ndiv[id^=GPmousePositionBasicPanel] {\n padding: 10px 15px;\n position: relative;\n}\n\n/* Settings */\n\ndiv[id^=GPmousePositionSettings-] {\n display: block;\n max-height: 0;\n opacity: 0;\n padding-left: 20px;\n padding-right: 20px;\n /* transition: max-height 0.5s ease-out 0s, opacity 0.5s ease-out 0s; */\n}\n\nbutton[id^=\"GPshowMousePositionSettings\"] {\n border: unset;\n}\n\ndiv[id^=GPmousePosition-] button[id^=\"GPshowMousePositionSettings\"][aria-pressed=\"true\"] + div[id^=GPmousePositionSettings-] {\n opacity: 1;\n padding-bottom: 20px;\n max-height: inherit;\n}\n\nbutton[id^=GPmousePositionSettings-] {\n padding-left: 0 15px;\n overflow: hidden;\n}\n\n/* General panels */\n\ndiv[id^=GPmousePositionCoordinate-] input.error {\n border: 1px solid rgb(255, 0, 0);\n}\ndiv[id^=GPmousePositionCoordinate-] input[readonly] {\n border: 1px solid transparent;\n padding: 2px;\n text-align: right;\n}\n\ninput[id^=GPmousePositionLat-], input[id^=GPmousePositionLon-] {\n width: 120px;\n}\n\nspan[id^=GPmousePositionAlt-] {\n display: inline-block;\n padding: 2px;\n width: 120px;\n line-height: 20px;\n text-align: right;\n}\n\n.GPSexagesimal {\n width: 30px;\n}\n\n.GPSexagesimalsec {\n width: 45px;\n}\n\nspan[id^=GPmousePositionCloseEdit] {\n background-position: -18px 0;\n margin-left: 5px;\n}\n\nimg[id^=GPmousePositionMarker]:hover {\n cursor: pointer;\n opacity: 0.7;\n}\n\n/* Map center localisation */\n\n#GPmapCenter {\n background-image: url(\"img/GPmapCenter.png\");\n}\n\n#GPmapCenter {\n display: none;\n position: absolute;\n top: 50%;\n left: 50%;\n width: 50px;\n height: 50px;\n margin-top: -25px;\n margin-left: -25px;\n}\n\n#GPmapCenter.GPmapCenterVisible {\n display: block;\n}\n","/* MOUSE POSITION */\r\n\r\ndiv[id^=GPdrawing-] {\r\n top: 48px;\r\n right: 8px;\r\n}\r\n\r\n/* Showing/hiding drawing panel */\r\n\r\nbutton[id^=\"GPshowDrawingPicto-\"] {}\r\n\r\nbutton[id^=\"GPshowDrawingPicto-\"][aria-pressed=\"false\"] + dialog {\r\n display: none;\r\n visibility: hidden;\r\n opacity: 0%;\r\n}\r\n\r\nbutton[id^=\"GPshowDrawingPicto-\"][aria-pressed=\"true\"] + dialog {\r\n display: flex;\r\n flex-direction: column;\r\n visibility: visible;\r\n opacity: 100%;\r\n}\r\n\r\n/* General panels */\r\n\r\n[id^=GPdrawingPanel-] {\r\n top: 0px;\r\n left: -276px;\r\n position: absolute;\r\n height: inherit;\r\n overflow: hidden;\r\n bottom: unset; /* fix dsfr */\r\n}\r\n\r\n/* Basic infos */\r\n\r\ndiv[id^=GPdrawingBasicPanel-] {\r\n padding: 10px 15px;\r\n}\r\n\r\n.drawing-tool-section:not(:last-child) {\r\n border-bottom: 1px solid #ddd;\r\n}\r\n\r\n.drawing-tool-section {\r\n padding: 2px 5px 5px;\r\n}\r\n\r\n.drawing-tool-section-title {\r\n /* font-family: OpenSansExtraBold,\"Open Sans\",Arial,sans-serif; */\r\n font-size: 0.75em;\r\n margin-bottom: 0;\r\n margin-top: 0;\r\n text-transform: uppercase;\r\n}\r\n\r\ndiv.drawing-tools-flex-display {\r\n justify-content: center;\r\n padding : 0;\r\n margin: 12px 0;\r\n}\r\n.drawing-tools-flex-display {\r\n align-items: center;\r\n display: flex;\r\n}\r\n\r\n.drawing-tool:not(:last-child) {\r\n margin-right: 10px;\r\n}\r\n\r\n","/* ROUTE */\r\n\r\ndiv[id^=GProute-] {\r\n top: 100px;\r\n left: 10px;\r\n}\r\n\r\n/* Showing/hiding panel */\r\n\r\nbutton[id^=\"GPshowRoutePicto-\"][aria-pressed=\"false\"] + dialog {\r\n display: none;\r\n visibility: hidden;\r\n opacity: 0%;\r\n}\r\n\r\nbutton[id^=\"GPshowRoutePicto-\"][aria-pressed=\"true\"] + dialog {\r\n display: flex;\r\n flex-direction: column;\r\n visibility: visible;\r\n opacity: 100%;\r\n}\r\n\r\n/* General panels */\r\n\r\n[id^=GProutePanel-] {\r\n position: absolute;\r\n height: inherit;\r\n top: 0px;\r\n left: 34px;\r\n}\r\n\r\nbutton[id^=GProuteReset]:hover {\r\n opacity: 1;\r\n}\r\n\r\n/* Route form */\r\nform[id^=GProuteForm] > .GPlocationStageFlexInput {\r\n margin-top: 5px;\r\n}\r\n\r\nform[id^=GProuteForm] > .GPlocationStageFlexInputHidden {\r\n margin-top: 0;\r\n}\r\n\r\nform[id^=GProuteForm].GProuteFormMini .GPlocationStageFlexInput:first-child {\r\n margin-top: 5px;\r\n}\r\n\r\nlabel.GProuteOriginPointerImg[id*=\"GProuteOriginPointerImg\"] {\r\n width: 28px;\r\n border-top-right-radius: 3px;\r\n border-bottom-right-radius: 3px;\r\n border-right: 1px solid #999;\r\n}\r\n\r\ninput[id*=\"GProuteOriginPointer\"] + .GProuteOriginPointerImg {\r\n background-position: -1px -1px;\r\n}\r\n\r\ninput[id*=\"GProuteOriginPointer\"]:checked + .GProuteOriginPointerImg {\r\n background-position: -29px -1px;\r\n}\r\n\r\n.GProuteStageRemove,\r\ndiv[id^=GProuteStageAdd] {\r\n width: 28px;\r\n border: none;\r\n cursor: pointer;\r\n}\r\n\r\n.GProuteFormMini {\r\n overflow: hidden;\r\n -webkit-transform: translateY(-5px);\r\n transform: translateY(-5px);\r\n}\r\n\r\n.GProuteFormMini button[id^=GPshowRouteExclusionsPicto],\r\n.GProuteFormMini .GProuteStageRemove,\r\n.GProuteFormMini div[id^=GProuteStageAdd],\r\n.GProuteFormMini > *:not(.selected),\r\n.GProuteFormMini div[id^=\"GProuteModeChoice\"],\r\n.GProuteFormMini button[id^=\"GPshowRouteExclusions\"][aria-pressed=\"true\"] + div[id^=\"GProuteExclusions\"],\r\n.GProuteFormMini .GPpanelFooter {\r\n display: none;\r\n}\r\n\r\n.GProuteStageRemove {\r\n background-position: -84px 0;\r\n}\r\n\r\ndiv[id^=GProuteStageAdd] {\r\n background-position: -56px 0;\r\n}\r\n\r\n[class*=\"GPlocationPoint\"] {\r\n position: relative;\r\n}\r\n\r\n/* Mode choice */\r\n\r\ndiv[id^=GProuteModeChoice] {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n -webkit-justify-content: space-around;\r\n -ms-flex-pack: distribute;\r\n justify-content: space-around;\r\n margin: 15px 0;\r\n}\r\n\r\ndiv[id^=GProuteTransportChoice] > .GProuteTransportChoice {\r\n display: inline-flex;\r\n}\r\n\r\n/* Showing/hiding exclusions */\r\n\r\nbutton[id^=\"GPshowRouteExclusions\"] {\r\n position: absolute;\r\n border: unset;\r\n bottom: unset;\r\n right: 0;\r\n transition: all 0.5s ease-out 0s;\r\n}\r\n\r\nbutton[id^=\"GPshowRouteExclusions\"][aria-pressed=\"true\"] {\r\n transform: translateY(-100%) rotateX(180deg);\r\n}\r\n\r\nbutton[id^=GPshowRouteExclusions][aria-pressed=\"false\"] + div[id^=GProuteExclusions] {\r\n max-height: 0;\r\n opacity: 0;\r\n margin-bottom: 0;\r\n}\r\n\r\nbutton[id^=GPshowRouteExclusions][aria-pressed=\"true\"] + div[id^=GProuteExclusions] {\r\n display: block;\r\n max-height: 76px;\r\n opacity: 1;\r\n margin-bottom: 15px;\r\n}\r\n\r\ndiv[id^=GProuteExclusions] {\r\n transition: max-height 0.5s ease-in-out 0.25s, opacity 0.5s ease-in-out 0.25s, margin 0.3s ease-in-out 0.25s;\r\n overflow: hidden;\r\n}\r\n\r\n/* Result panel */\r\n\r\ndiv[id^=GProuteResultsPanel] {\r\n padding: 15px;\r\n}\r\n\r\ndiv[id^=GProuteResults-] {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n -webkit-justify-content: space-between;\r\n -webkit-box-pack: justify;\r\n -ms-flex-pack: justify;\r\n justify-content: space-between;\r\n -webkit-align-items: center;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n margin-bottom: 10px;\r\n}\r\n\r\ndiv[id^=GProuteResultsNew]:hover {\r\n opacity: 1;\r\n}\r\n\r\n\r\n","/* Location */\r\n\r\n[id^=GPlocationStageRemove] {\r\n\r\n}\r\n\r\n[id^=GPlocationStageAdd] {\r\n\r\n}\r\n\r\n\r\n\r\n/* All div elements whose class attribute value begins with \"GPlocationPoint\" */\r\n[class*=\"GPlocationPoint\"] {\r\n position: relative;\r\n}\r\n\r\ndiv[id^=GPlocationAutoCompleteResult] {\r\n top: 45px;\r\n left: 0px;\r\n max-height: 140px;\r\n overflow-y: auto;\r\n background-color: var(--background-default-grey);;\r\n border: 1px solid var(--grey-900-175);\r\n border-top: none;\r\n}\r\n\r\ndiv[id^=GPlocationAutoCompleteList] {\r\n position: absolute;\r\n z-index: 2;\r\n width: calc(100% - 56px);\r\n}\r\n","/* ISOCHRON */\r\n\r\ndiv[id^=GPisochron-] {\r\n top: 140px;\r\n left: 10px;\r\n}\r\n\r\n/* Showing/hiding mouse position panel */\r\n\r\nbutton[id^=\"GPshowIsochronPicto-\"][aria-pressed=\"false\"] + dialog {\r\n display: none;\r\n visibility: hidden;\r\n opacity: 0%;\r\n}\r\n\r\nbutton[id^=\"GPshowIsochronPicto-\"][aria-pressed=\"true\"] + dialog {\r\n display: flex;\r\n flex-direction: column;\r\n visibility: visible;\r\n opacity: 100%;\r\n}\r\n\r\n/* General panels */\r\n\r\n[id^=GPisochronPanel-] {\r\n position: absolute;\r\n height: inherit;\r\n top: 0px;\r\n left: 34px;\r\n z-index:2;\r\n}\r\n\r\n/* Isochron form */\r\n\r\ninput[id^=\"GPisochronOriginPointer\"] + .GPisochronOriginPointerImg {\r\n background-position: -1px -1px;\r\n}\r\n\r\ninput[id^=\"GPisochronOriginPointer\"]:checked + .GPisochronOriginPointerImg {\r\n background-position: -29px -1px;\r\n}\r\n\r\n/* Alternative choice */\r\n\r\ndiv[id^=GPisochronChoice] {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n}\r\n\r\n/*\r\ninput[id^=GPisochronChoiceAltChron] + .GPisochronChoiceAltImg {\r\n background-position: -56px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron]:checked + .GPisochronChoiceAltImg {\r\n background-position: -84px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltDist] + .GPisochronChoiceAltImg {\r\n background-position: -112px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltDist]:checked + .GPisochronChoiceAltImg {\r\n background-position: -140px 0;\r\n}*/\r\n\r\n\r\n/* Mode choice */\r\n\r\n.GPisochronFormMini {\r\n max-height: 58px;\r\n overflow: hidden;\r\n}\r\n\r\n.GPisochronFormMini .GPpanelFooter button[id^=\"GPisochronReset-\"],\r\n.GPisochronFormMini .GPpanelFooter input[id^=\"GPisochronSubmit-\"],\r\n.GPisochronFormMini [id^=\"GPisochronPointLabelP-\"],\r\n.GPisochronFormMini [id^=\"GPisochronChoice-\"],\r\n.GPisochronFormMini [id^=\"GPisochronValueChronLabelP-\"],\r\n.GPisochronFormMini [id^=\"GPisochronValueChron-\"],\r\n.GPisochronFormMini [id^=\"GPisochronTransportChoice-\"],\r\n.GPisochronFormMini [id^=\"GPisochronDirectionChoice-\"],\r\n.GPisochronFormMini [id^=\"GPisoExclusions-\"],\r\n.GPisochronFormMini .GPpanelFooter,\r\n.GPisochronFormMini button[id^=\"GPshowIsoExclusionsPicto-\"] {\r\n display: none;\r\n}\r\n\r\n.GPisochronFormMini {\r\n max-height: 78px;\r\n}\r\n\r\n.GPisochronFormMini .GPelementShow {\r\n color: var(--grey-200-850);\r\n}\r\n\r\ndiv[id^=GPisochronTransportChoice] > div {\r\n display: inline-flex;\r\n gap: 1rem;\r\n}\r\n\r\n/* Showing/hiding exclusions */\r\n\r\nbutton[id^=\"GPshowIsoExclusions\"] {\r\n position: absolute;\r\n border: unset;\r\n bottom: unset;\r\n right: 0;\r\n transition: all 0.5s ease-out 0s;\r\n transform: translateY(-100%);\r\n}\r\n\r\nbutton[id^=\"GPshowIsoExclusions\"][aria-pressed=\"true\"] {\r\n transform: translateY(-100%) rotateX(180deg);\r\n}\r\n\r\nbutton[id^=GPshowIsoExclusions][aria-pressed=\"false\"] + div[id^=GPisoExclusions] {\r\n max-height: 0;\r\n opacity: 0;\r\n margin-bottom: 0;\r\n}\r\n\r\nbutton[id^=GPshowIsoExclusions][aria-pressed=\"true\"] + div[id^=GPisoExclusions] {\r\n display: block;\r\n max-height: 76px;\r\n opacity: 1;\r\n margin-bottom: 15px;\r\n}\r\n\r\n.GPisochronFormMini button[id^=GPshowIsoExclusions][aria-pressed=\"true\"] + div[id^=GPisoExclusions] {\r\n display: none;\r\n}\r\n\r\ndiv[id^=GPisoExclusions] {\r\n transition: max-height 0.5s ease-in-out 0.25s, opacity 0.5s ease-in-out 0.25s, margin 0.3s ease-in-out 0.25s;\r\n overflow: hidden;\r\n}\r\n\r\n/* Reset picto */\r\n\r\nbutton[id^=GPisochronReset] {\r\n\r\n}\r\n\r\n\r\n\r\n","/* REVERSE GEOCODING */\r\n\r\ndiv[id^=\"GPreverseGeocoding-\"] {\r\n top: 180px;\r\n left: 10px;\r\n}\r\n\r\n/* Showing/hiding reverse geocoding panel */\r\n\r\nbutton[id^=\"GPshowReverseGeocodingPicto-\"][aria-pressed=\"false\"] + dialog {\r\n display: none;\r\n visibility: hidden;\r\n opacity: 0%;\r\n}\r\n\r\nbutton[id^=\"GPshowReverseGeocodingPicto-\"][aria-pressed=\"true\"] + dialog {\r\n display: flex;\r\n flex-direction: column;\r\n visibility: visible;\r\n opacity: 100%;\r\n}\r\n\r\n/* General panels */\r\n\r\n[id^=\"GPreverseGeocodingPanel-\"] {\r\n position: absolute;\r\n left: 34px;\r\n top: 0px;\r\n height: inherit;\r\n}\r\n\r\n/* Search panel */\r\n\r\n[id^=\"GPreverseGeocodingForm-\"] {\r\n position: relative;\r\n max-height: 270px;\r\n overflow-y: auto;\r\n padding-left: 15px;\r\n padding-right: 15px;\r\n padding-top: 10px;\r\n}\r\n\r\n\r\ninput[id^=\"GPreverseGeocodingSubmit-\"] {\r\n margin-top: 5px;\r\n margin-bottom: 15px;\r\n /* width: 100px; */\r\n}\r\n\r\n/* Result panel */\r\n\r\ndiv[id^=GPreverseGeocodingResultsList-] {\r\n position: relative;\r\n max-height: 210px;\r\n overflow-y: auto;\r\n}\r\n","/****************/\n/* Layer Import */\n/****************/\n\ndiv[id^=\"GPimport-\"] {\n top: 220px;\n left: 10px;\n}\n\n/*******************************/\n/* Showing/hiding import panel */\n/******************************/\n\nbutton[id^=\"GPshowImportPicto-\"][aria-pressed=\"false\"] + dialog {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\nbutton[id^=\"GPshowImportPicto-\"][aria-pressed=\"true\"] + dialog {\n display: flex;\n flex-direction: column;\n visibility: visible;\n opacity: 100%;\n}\n\n/******************/\n/* General panels */\n/******************/\n\n[id^=\"GPimportPanel-\"],\n[id^=\"GPimportGetCapPanel-\"],\n[id^=\"GPimportMapBoxPanel-\"] {\n /* left: 34px;\n top: 0px; */\n height: inherit;\n}\n\n[id^=\"GPimportPanel-\"] {\n position: absolute;\n}\n\n[id^=\"GPimportGetCapPanel-\"],\n[id^=\"GPimportMapBoxPanel-\"] {\n position: relative;\n}\n\n[id^=\"GPimportGetCapPanel-\"],\n[id^=\"GPimportMapBoxPanel-\"] {\n /* display: none; */\n width: 340px;\n}\n\n/***************/\n/* Import form */\n/***************/\nform[id^=GPimportForm-] {\n padding: 15px;\n}\n\ndiv[id^=\"GPimportChoice-\"] {\n display: -ms-flexbox;\n display: -webkit-box;\n display: flex;\n -ms-flex-pack: distribute;\n justify-content: space-around;\n}\n\ninput[id^=\"GPimportSubmit-\"] {\n margin-top: 20px;\n}\n\n/*******************/\n/* Get cap results */\n/*******************/\n\ndiv[id^=\"GPimportGetCapResults-\"],\ndiv[id^=\"GPimportMapBoxResults-\"] {\n background-color: #FFF;\n height: 140px;\n overflow-y: auto;\n resize: vertical;\n}\n\ninput[id^=\"GPimportGetCapRubrique-\"],\ninput[id^=\"GPimportMapBoxSource-\"] {\n display: none;\n}\n\ninput[id^=\"GPimportGetCapRubrique-\"]~li,\ninput[id^=\"GPimportMapBoxSource-\"]~div {\n display: none;\n}\n\ninput[id^=\"GPimportGetCapRubrique-\"]:checked~li,\ninput[id^=\"GPimportMapBoxSource-\"]:checked~div {\n display: block;\n}\n\ninput[id^=\"GPimportGetCapRubrique-\"]~ul {\n display: block;\n}\n\ninput[id^=\"GPimportGetCapRubrique-\"]:checked~ul {\n display: none;\n}\n\n",".GPimportMapBoxpRoot {\n padding: 5px;\n}\n\n.GPEditorMapBoxContainer {\n width: 100%;\n height: auto;\n position: relative;\n padding: 5px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-box-shadow: 0 0 5px #000000;\n box-shadow: 0 0 5px #000000;\n border-style: solid;\n border-width: 1px;\n border-color: lightskyblue;\n border-radius: 5px;\n}\n\n.GPEditorMapBoxSep {\n display: block;\n width: 50%;\n border-style: double;\n border-width: 4px;\n border-color: lightskyblue;\n}\n\n.GPEditorMapBoxLayersTitle,\n.GPEditorMapBoxThemesTitle {\n padding: 5px;\n font-style: italic;\n font-weight: bold;\n}\n\n/* desactive un composant */\n.disabled {\n pointer-events: none;\n opacity: 0.5;\n}\n\n/*******************************************************************************\nGROUPS\n*******************************************************************************/\n.GPEditorMapBoxGroupContainer {}\n\n/* FIXME : modifier la couleur de la puce ? */\n.GPEditorMapBoxGroupDetails {\n border-style: dotted;\n border-width: 1px;\n border-radius: 5px;\n border-color: lightskyblue\n}\n\n.GPEditorMapBoxGroupSummary {}\n\n/*******************************************************************************\nLAYERS\n*******************************************************************************/\n\n/* - container principal */\n.GPEditorMapBoxLayersContainer {\n\n}\n/* - container layers */\n.GPEditorMapBoxLayerContainer {\n width: 100%;\n min-height: 28px;\n display: -webkit-inline-box;\n display: -ms-inline-flexbox;\n display: inline-flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n /* background-color: red; */\n}\n/* - container titre */\n.GPEditorMapBoxLayerTitleContainer {\n width: inherit;\n min-height: 28px;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: start;\n -ms-flex-pack: start;\n justify-content: flex-start;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n /* background-color: grey; */\n}\n.GPEditorMapBoxLayerImageInput {\n display: none;\n}\n.GPEditorMapBoxLayerImageLabel {\n min-width: 24px;\n min-height: 28px;\n cursor: pointer;\n /* position: absolute; */\n background-image: url(\"img/GPEditorLayerTools.png\");\n background-position: -56px 0;\n /* background-color: green; */\n}\ninput[type=\"checkbox\"]:checked + .GPEditorMapBoxLayerImageLabel {\n -webkit-transform: rotate(90deg);\n -ms-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n.GPEditorMapBoxLayerTypeImage {\n min-width: 30px;\n min-height: 30px;\n margin-right: 5px;\n background-repeat: no-repeat;\n cursor: pointer;\n /* position: absolute; */\n /* background-image: url(\"img/GPEditorLayerTypeIcon.svg\"); */\n background-image: url(\"img/GPEditorLayerTypeIcon.png\");\n background-position: 0px 0;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-box-shadow: 2px 2px 1px lightgrey;\n box-shadow: 2px 2px 1px lightgrey;\n border-style: solid;\n border-width: 1px;\n border-radius: 5px;\n border-color: gray;\n /* background-color: blue; */\n}\n.GPEditorMapBoxLayerTitleInput {\n display: none;\n}\n.GPEditorMapBoxLayerTitleLabel {\n width: inherit;\n /* margin-inline-start: 28px; */\n cursor: pointer;\n /* background-color: yellow; */\n border-style: solid;\n border-width: 1px;\n border-radius: 5px;\n border-color: gray;\n -webkit-box-shadow: 2px 2px 1px lightgrey;\n box-shadow: 2px 2px 1px lightgrey;\n padding: 5px;\n margin-left: 5px;\n word-break: break-word;\n}\ninput[type=\"checkbox\"]:checked + .GPEditorMapBoxLayerTitleLabel {\n background-color: lightgrey;\n}\n\n/* - container legend */\n.GPEditorMapBoxLayerLegendContainer {\n\n}\n\n/* - container outils */\n.GPEditorMapBoxToolsContainer {\n min-width: 28px;\n height: 28px;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: end;\n -ms-flex-pack: end;\n justify-content: flex-end;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n /* background-color: pink; */\n}\n.GPEditorMapBoxToolsVisibilityInput {\n display: none;\n}\n.GPEditorMapBoxToolsVisibilityInputDisable {\n display: \"block\";\n}\n\n.GPEditorMapBoxToolsVisibilityLabel {\n width: 28px;\n height: 28px;\n cursor: pointer;\n /* position: absolute; */\n background-image: url(\"img/GPEditorLayerTools.png\");\n background-position: -28px 0;\n /* background-color: white; */\n}\n.GPEditorMapBoxToolsVisibilityLabelDisable {\n cursor: pointer;\n}\n\ninput[type=\"checkbox\"]:checked + .GPEditorMapBoxToolsVisibilityLabel {\n background-position: 0 0;\n}\n\n/*******************************************************************************\n FILTERS\n*******************************************************************************/\n\n/* - container principal */\n.GPEditorMapBoxFilterContainer {\n width: 100%;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n -webkit-box-align: start;\n -ms-flex-align: start;\n align-items: flex-start;\n /* background-color: red; */\n margin-left: 28px;\n}\n/* - container titre + editeur json */\n.GPEditorMapBoxFilterJsonContainer {\n border-style: solid;\n border-radius: 5px;\n border-width: 1px;\n padding: 5px;\n}\n.GPEditorMapBoxFilterTitleJson {\n\n}\n.GPEditorMapBoxFilterDisplayJson {\n width: 175px;\n height: 125px;\n cursor: pointer;\n overflow: scroll;\n resize: vertical;\n}\n\n/* - container outils editions */\n.GPEditorMapBoxFilterToolsEditionContainer {\n /* border-style: solid;\n border-radius: 5px;\n padding: 5px; */\n}\n/* - container outils boutons enregister/annuler */\n.GPEditorMapBoxFilterToolsButtonsContainer {\n /* border-style: solid;\n border-radius: 5px;\n padding: 5px; */\n}\n\n/*******************************************************************************\n THEMES\n*******************************************************************************/\n\n/* - container principal */\n.GPEditorMapBoxThemesContainer {\n width: 175px;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n -webkit-box-align: start;\n -ms-flex-align: start;\n align-items: flex-start;\n /* background-color: red; */\n}\n\n/* - container d'un theme */\n.GPEditorMapBoxThemeContainer {\n width: inherit;\n border-style: solid;\n border-radius: 5px;\n border-width: 1px;\n padding: 5px;\n margin: 5px;\n text-align: center;\n}\n\n.GPEditorMapBoxThemeContainer:focus {\n background-color: lightgrey;\n}\n\n.GPEditorMapBoxThemeImage {\n width: 120px;\n height: 60px;\n cursor:pointer;\n}\n.GPEditorMapBoxThemeTitle {\n padding: 5px;\n cursor:pointer;\n}\n\n.GPEditorMapBoxThemeMessage {\n font-style: italic;\n color: red;\n}\n/*******************************************************************************\n STYLES\n*******************************************************************************/\n\n/* - container principal */\n.GPEditorMapBoxStyleContainer {\n width: 100%;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n -webkit-box-align: start;\n -ms-flex-align: start;\n align-items: flex-start;\n /* background-color: red; */\n margin-left: 28px;\n}\n/* - container titre + editeur json */\n.GPEditorMapBoxStyleJsonContainer {\n border-style: solid;\n border-radius: 5px;\n border-width: 1px;\n padding: 5px;\n}\n.GPEditorMapBoxStyleTitleJson {\n\n}\n.GPEditorMapBoxStyleJsonDisplay {\n width: 175px;\n height: 125px;\n cursor: pointer;\n overflow: scroll;\n resize: vertical;\n}\n/* - container outils Scale */\n.GPEditorMapBoxStyleToolsScaleContainer {\n width: -webkit-min-content;\n width: -moz-min-content;\n width: min-content; /* FIXME */\n border-style: solid;\n border-radius: 5px;\n border-width: 1px;\n padding: 5px;\n}\n.GPEditorMapBoxStyleScaleTitle {}\n.GPEditorMapBoxStyleToolsScaleMaxContainer,\n.GPEditorMapBoxStyleToolsScaleMinContainer {\n width: 175px;\n display: -webkit-inline-box;\n display: -ms-inline-flexbox;\n display: inline-flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n}\n.GPEditorMapBoxStyleScaleLabelMin {}\n.GPEditorMapBoxStyleScaleInputMin {}\n.GPEditorMapBoxStyleScaleLabelMax {}\n.GPEditorMapBoxStyleScaleInputMax {}\n\n/* - container outils editions */\n.GPEditorMapBoxStyleToolsEditionContainer {\n /* border-style: solid;\n border-radius: 5px;\n padding: 5px; */\n}\n /* - container outils boutons enregister/annuler */\n.GPEditorMapBoxStyleToolsButtonsContainer {\n /* border-style: solid;\n border-radius: 5px;\n padding: 5px; */\n}\n\n/*******************************************************************************\nJSON display Editor\n*******************************************************************************/\n.gp-json-string { color: green; }\n.gp-json-number { color: darkorange; }\n.gp-json-boolean { color: blue; }\n.gp-json-null { color: magenta; }\n.gp-json-key { color: red; }\n\n\n/*******************************************************************************\nLEGEND\n*******************************************************************************/\n\n.GPEditorMapBoxLegendContainer {\n width: 100%;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n -webkit-box-align: start;\n -ms-flex-align: start;\n align-items: flex-start;\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n margin-left: 28px;\n}\n\n.GPEditorMapBoxLegendRenderContainer {\n display: -webkit-inline-box;\n display: -ms-inline-flexbox;\n display: inline-flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n width: 175px;\n padding: 5px;\n border-style: solid;\n border-radius: 5px;\n border-width: 1px;\n overflow-y: auto;\n}\n\n.GPEditorMapBoxLegendInput {\n\n}\n.GPEditorMapBoxLegendRender {\n min-width: 28px;\n min-height: 28px;\n border-color: transparent;\n border-style: solid;\n border-width: 1px;\n border-radius: 5px;\n -webkit-box-shadow: 2px 2px 1px grey;\n box-shadow: 2px 2px 1px grey;\n cursor: pointer;\n}\n.GPEditorMapBoxLegendEditable {\n border-color: black;\n}\n.GPEditorMapBoxLegendTitle {\n margin-left: 10px;\n}\n\n.GPEditorMapBoxLegendToolsContainer {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n width: 230px;\n padding: 5px;\n}\n\n.legend-background {}\n.legend-fill ,\n.legend-line {\n /* margin: auto;\n padding: 5px; */\n}\n.legend-icon {}\n.legend-text {}\n.legend-circle {}\n.legend-unknow,\n.legend-not-implemented {\n background-color: #FFFFFF;\n}\n.legend-unknow:before {\n content: '\\2753';\n color: red;\n font-size: 15px;\n}\n.legend-not-implemented:before {\n content: '\\2718';\n color: red;\n font-size: 15px;\n}\n.legend-fill-not-editable {\n\n}\n.legend-circle-not-editable,\n.legend-line-not-editable {\n border-color: white;\n}\n\n.legend-styling-div {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n}\n.legend-styling {\n width: 50px;\n}\n","div[id^=GPelevationPath-] {\n /* height: 36px; */\n}\n\n/* Showing/hiding elevationPath panel */\n\n\nbutton[id^=\"GPshowElevationPathPicto-\"] {}\n\nbutton[id^=\"GPshowElevationPathPicto-\"][aria-pressed=\"false\"] + dialog {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\nbutton[id^=\"GPshowElevationPathPicto-\"][aria-pressed=\"true\"] + dialog {\n display: flex;\n flex-direction: column;\n visibility: visible;\n opacity: 100%;\n}\n\n/* Panel */\n\n[id^=GPelevationPathPanelReduce] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: -50px center;\n}\n\n[id^=GPelevationPathPanel-] {\n position : absolute;\n top : 6px;\n left: 32px;\n}\n\n/* ELEVATION PATH DISPLAY */\n\nbutton[id^=GPelevationPathPanelReduce] {\n display: none; /* on n'affiche pas le bouton d'information par defaut */\n}\n\nbutton[id^=GPelevationPathPanelInfo] {\n display: none; /* on n'affiche pas le bouton d'information par defaut */\n}\n\n.tooltipInit {\n opacity: 0;\n}\n\n.tooltipFadeIn {\n transition: opacity 300ms ease 0ms, transform 50ms ease 0s, top 50ms ease 0s, left 50ms ease 0s;\n opacity: 1;\n}\n\n.tooltipFadeOut {\n transition: opacity 500ms ease 0ms;\n opacity: 0;\n}\n","/* TODO coller un peu plus à la charte\n- liseret blanc transparent 32x32 autour du pictogramme\n- pictogramme 26x26\n- ...\n*/\ndiv[id^=GPtoolbox-measure-main] {\n float: left;\n left: 78px;\n top: 8px;\n position: absolute;\n display: inline-block;\n z-index: 1;\n}\n\ndiv[id^=GPtoolbox-measure-widget] {\n left: auto;\n display: none;\n /*visibility: hidden;*/\n /*position: absolute;*/\n /*right: 0;*/\n border-radius: 2px;\n /*background-color: #f9f9f9;*/\n /*box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);*/\n}\n\ndiv[id^=GPtoolbox-measure-widget]>div {\n display: block;\n /*visibility: visible;*/\n position: relative;\n top: auto;\n left: auto;\n bottom: auto;\n right: auto;\n}\n\ndiv[id^=GPtoolbox-measure-main]:hover {\n /*display: block;*/\n /*visibility: visible;*/\n}\n\ndiv[id^=GPtoolbox-measure-main]:hover:not(.active) {\n /*background-color: rgba(0,60,136,0.3);*/\n}\n\ndiv[id^=GPtoolbox-measure-main]:hover button[id^=GPtoolbox-measure-button] {\n background-color: rgba(0, 60, 136, 0.7);\n}","div[id^=GPmeasureLength-] {\r\n top: 260px;\r\n left: 42px;\r\n}\r\n\r\nbutton[id^=\"GPshowMeasureLengthPicto-\"] {}\r\n","div[id^=GPmeasureArea-] {\r\n top: 260px;\r\n left: 74px;\r\n}\r\n\r\nbutton[id^=\"GPshowMeasureAreaPicto-\"] {\r\n \r\n}\r\n\r\n","div[id^=GPmeasureAzimuth-] {\r\n top: 260px;\r\n left: 10px;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"] {\r\n \r\n}\r\n","[id^=GPzoom-] {\n top: 0.5em;\n left: 0.5em;\n}\n\n.ol-custom-zoom {}\n\n.ol-custom-zoom-in,\n.ol-custom-zoom-out {}","[id^=GPfullScreen-] {\n bottom: 0.5em;\n left: 0.5em;\n}\n\n.ol-custom-full-screen {}","div[id^=\"GPoverviewMap-\"] {\n left: 0.5em;\n bottom: 10.5em;\n}\n\nbutton[id^=\"GPshowOverviewMap-\"] {}\n\n.ol-overviewmap.ol-collapsed .ol-overviewmap-map {\n border: none;\n height: 100px;\n width: 100px;\n}\n\n.ol-overviewmap .ol-overviewmap-box {\n border: 2px solid red;\n}\n\n.ol-overviewmap:not(.ol-collapsed) button {\n position: relative;\n}\n/* \n.ol-overviewmap .ol-overviewmap-map {\n position: relative;\n left: 50px;\n} \n*/","div[id^=GPlegends-] {\n top: 58px;\n right: 8px;\n}\n\n.position > div[id^=GPlegends-] > dialog[id^=GPlegendsPanel] {\n position: absolute;\n}\n\n/* Showing/hiding */\n\nbutton[id^=GPshowLegendsPicto][aria-pressed=\"false\"] + dialog {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\nbutton[id^=\"GPshowLegendsPicto-\"][aria-pressed=\"true\"] + dialog {\n display: flex;\n flex-direction: column;\n visibility: visible;\n opacity: 100%;\n width: 350px;\n height: initial;\n max-height: inherit;\n}\n\n","div[id^=GPterritories-] {\n top: 0px;\n right: 0px;\n}\n\n/* Showing/hiding */\n\nbutton[id^=GPshowTerritoriesPicto][aria-pressed=\"false\"] + dialog {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\nbutton[id^=\"GPshowTerritoriesPicto-\"][aria-pressed=\"true\"] + dialog {\n display: flex;\n flex-direction: column;\n visibility: visible;\n opacity: 100%;\n max-width: 470px;\n height: initial;\n max-height: inherit;\n}\n\ndialog[id^=\"GPterritoriesPanel-\"] {\n position: absolute;\n}\n","/* Showing/hiding */\n\nbutton[id^=GPshowControlListPicto][aria-pressed=\"false\"] + dialog {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\nbutton[id^=\"GPshowControlListPicto-\"][aria-pressed=\"true\"] + dialog {\n display: flex;\n flex-direction: column;\n visibility: visible;\n opacity: 100%;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] {\n position: absolute;\n left: 34px;\n top: 0px;\n height: inherit;\n}\n\n","div[id^=GPcatalog-] {\n top: 0px;\n right: 0px;\n}\n\n/* Showing/hiding */\n\nbutton[id^=GPshowCatalogPicto][aria-pressed=\"false\"] + dialog {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\nbutton[id^=\"GPshowCatalogPicto-\"][aria-pressed=\"true\"] + dialog {\n display: flex;\n flex-direction: column;\n visibility: visible;\n opacity: 100%;\n width: 370px;\n height: initial;\n max-height: inherit;\n}\n\ndialog[id^=\"GPcatalogPanel-\"] {\n position: absolute;\n left: 34px;\n top: 0px;\n height: inherit;\n}\nform[id^=GPcatalogForm] {\n padding: 15px;\n}\n\n.catalog-container-tabs .fr-accordion .fr-collapse--expanded {\n padding-bottom: 0;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/bundle/GpfExtOL.js b/dist/bundle/GpfExtOL.js index a0ccf52e..75d4bee6 100644 --- a/dist/bundle/GpfExtOL.js +++ b/dist/bundle/GpfExtOL.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */ /*! @@ -60,12 +60,12 @@ var Gp;(()=>{var __webpack_modules__={4582:(e,t)=>{"use strict";function n(e,t){ * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE * @version v4.2.8+1e68dce6 */ -e.exports=function(){"use strict";function e(e){var t=typeof e;return null!==e&&("object"===t||"function"===t)}function t(e){return"function"==typeof e}var r=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},i=0,o=void 0,a=void 0,s=function(e,t){C[i]=e,C[i+1]=t,2===(i+=2)&&(a?a(b):_())};function l(e){a=e}function c(e){s=e}var u="undefined"!=typeof window?window:void 0,d=u||{},p=d.MutationObserver||d.WebKitMutationObserver,h="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),g="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function f(){return function(){return process.nextTick(b)}}function m(){return void 0!==o?function(){o(b)}:A()}function y(){var e=0,t=new p(b),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function v(){var e=new MessageChannel;return e.port1.onmessage=b,function(){return e.port2.postMessage(0)}}function A(){var e=setTimeout;return function(){return e(b,1)}}var C=new Array(1e3);function b(){for(var e=0;e3?r.splice(3,r.length-1):[],void 0!==this.listeners[e]?this.listeners[e].push({scope:n,callback:t,args:r}):this.listeners[e]=[{scope:n,callback:t,args:r}]},removeEventListener:function(e,t,n){if(void 0!==this.listeners[e]){for(var r=this.listeners[e].length,i=[],o=0;o0;for(var i=0;i2?r.splice(2,r.length-1):[],r=[n].concat(r),void 0!==this.listeners[e]){var a=this.listeners[e].slice(),s=a.length;for(o=0;o=0&&t<=u.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?p+=":"+e:"symbol"==typeof e&&(p=void 0),u.name=e,u.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},u.methodFactory=n||d,u.getLevel=function(){return null!=l?l:null!=s?s:a},u.setLevel=function(e,t){return l=m(e),!1!==t&&h(l),c.call(u)},u.setDefaultLevel=function(e){s=m(e),g()||u.setLevel(e,!1)},u.resetLevel=function(){l=null,f(),c.call(u)},u.enableAll=function(e){u.setLevel(u.levels.TRACE,e)},u.disableAll=function(e){u.setLevel(u.levels.SILENT,e)},u.rebuild=function(){if(o!==u&&(a=m(o.getLevel())),c.call(u),o===u)for(var e in i)i[e].rebuild()},a=m(o?o.getLevel():"WARN");var y=g();null!=y&&(l=m(y)),c.call(u)}(o=new p).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=i[e];return t||(t=i[e]=new p(e,o.methodFactory)),t};var h=typeof window!==t?window.log:void 0;return o.noConflict=function(){return typeof window!==t&&window.log===o&&(window.log=h),o},o.getLoggers=function(){return i},o.default=o,o},void 0===(i="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=i)}()},3092:(e,t,n)=>{"use strict";var r=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==n.g)return n.g;throw new Error("unable to locate global object")}();e.exports=t=r.fetch,r.fetch&&(t.default=r.fetch.bind(r)),t.Headers=r.Headers,t.Request=r.Request,t.Response=r.Response}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(n.exports,n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};(()=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{ColorUtils:()=>xt,Config:()=>mE,Error:()=>dE,Helper:()=>pE,HelperUtils:()=>rn,LayerUtils:()=>or,Logger:()=>vt,MathUtils:()=>Oh,Parser:()=>en,Protocols:()=>hE,ProxyUtils:()=>Ct,Register:()=>_y,Services:()=>uE,date:()=>vE,olExtended:()=>CE,servicesDate:()=>gE,servicesVersion:()=>fE,version:()=>yE});const e=JSON.parse('{"rE":"1.0.0-beta.1-317","p6":"03/01/2025"}'),t=ol.Overlay;var n=__webpack_require__.n(t);const r=ol.source.VectorTile;var i=__webpack_require__.n(r);const o=ol.source.Vector;var a=__webpack_require__.n(o);const s=ol.source.TileWMS;var l=__webpack_require__.n(s);const c=ol.source.WMTS;var u=__webpack_require__.n(c);const d=ol.source.ImageWMS;var p=__webpack_require__.n(d);const h=ol.interaction;var g=__webpack_require__(3065);const f={getLogger:function(e){if(void 0===t)var t={env:{VERBOSE:!1}};t.env.VERBOSE?g.enableAll():g.disableAll();var n=e||"default";return g.getLogger(n)}};var m={PARAM_MISSING:"Parameter(s) '%var%' missing",PARAM_EMPTY:"Parameter(s) '%var%' empty",PARAM_TYPE:"Wrong type(s) for parameter(s) '%var%'",PARAM_FORMAT:"Parameter(s) '%var%' not correctly formatted",PARAM_NOT_SUPPORT:"Value(s) for parameter(s) '%var%' not supported",PARAM_NOT_SUPPORT_NODEJS:"Value(s) for parameter(s) '%var%' not supported to NodeJS",PARAM_UNKNOWN:"Value(s) for parameter(s) '%var%' unknown",SERVICE_REQUEST_BUILD:"An error occurred during the request building of the service",SERVICE_REQUEST_EMPTY:"The request sent to the service is empty",SERVICE_RESPONSE_EXCEPTION:"The service returned an exception : '%var%'",SERVICE_RESPONSE_EXCEPTION_2:"The service returned an exception",SERVICE_RESPONSE_ANALYSE:"An error occurred while parsing the response '%var%' of the service",SERVICE_RESPONSE_ANALYSE_2:"An unknown error occurred while parsing the response",SERVICE_RESPONSE_EMPTY:"The response of the service is empty",SERVICE_RESPONSE_EMPTY_2:"The response from the service could not be analyzed or is empty",SERVICE_RESPONSE_FORMAT:"The format of the service response is not supported (handled format(s) : '%var%')",SERVICE_RESPONSE_FORMAT_2:"The format of the service response is not supported",SERVICE_RESPONSE_FORMAT_3:"No suggestion matching the search",CLASS_CONSTRUCTOR:"'%var%' constructor cannot be called as a function.",getMessage:function(e,t){if(0===Object.keys(arguments).length)return"Message indefined !";var n=Array.prototype.slice.call(arguments),r=n.shift(),i=n,o=this[r];try{o=Array.isArray(i)&&i.length>0?o.replace("%var%",i.join(" - ")):o.replace("%var%","%var% (not specified)")}catch(e){}return o}};const y=m;var v={normalyzeParameters:function(e){var t=null;if(e){var n=[];for(var r in e)if(e.hasOwnProperty(r)){var i=e[r];i||(i=""),n.push(r+"="+i)}t=n.join("&")}return t},normalyzeUrl:function(e,t,n){var r=e;if(e){if(e.split("?").length-1>=2){var i=e.search(/\?/)+1;r=e.substring(0,i)+e.slice(i).replace(/\?/g,"&")}var o=e.indexOf("?");-1===o&&(r+="?"),-1!==o&&o!==e.length-1&&(r+="&")}return t&&(r+="string"==typeof t?t=t.replace("?",""):this.normalyzeParameters(t)),n&&(r=encodeURIComponent(r)),r},indent:function(e,t){return new Array((e||0)+1).join("\t")+t}};const A=v;var C=__webpack_require__(6964),b=__webpack_require__.n(C),I={call:function(e){var t=f.getLogger("XHR");if(t.trace("[XHR::call()]"),b().polyfill(),!e.url)throw new Error("missing parameter : url is not defined !");if(!e.method)throw new Error("missing parameter : method is not defined !");e.format||(e.format="text");var n={};switch(n.url=e.url,n.data=e.data?e.data:null,n.method=e.method,n.timeOut=e.timeOut||0,n.scope=e.scope||this,n.proxy=e.proxy||null,n.content=e.content||null,n.headers=e.headers||{referer:"http://localhost"},e.method){case"DELETE":case"GET":break;case"PUT":case"POST":n.content=e.content?e.content:"application/x-www-form-urlencoded",n.headers=e.headers?e.headers:{referer:"http://localhost"};break;case"HEAD":case"OPTIONS":throw new Error("HTTP method not yet supported !");default:throw new Error("HTTP method unknown !")}switch(e.format){case"text":this.__call(n).then((function(n){t.trace(n),e.onResponse.call(this,n)})).catch((function(t){e.onFailure.call(this,t)}));break;case"json":this.__callJSON(n).then((function(n){t.trace(n),e.onResponse.call(this,n)})).catch((function(t){e.onFailure.call(this,t)}));break;case"xml":this.__callXML(n).then((function(n){t.trace(n),e.onResponse.call(this,n)})).catch((function(t){e.onFailure.call(this,t)}));break;default:throw new Error("This output Format is not yet supported !")}},__call:function(e){var t=f.getLogger("XHR");return t.trace("[XHR::__call()]"),new Promise((function(n,r){var i="POST"===e.method||"PUT"===e.method?1:0;e.data&&("object"==typeof e.data&&Object.keys(e.data).length||"string"==typeof e.data&&e.data.length)&&!i&&(e.url=A.normalyzeUrl(e.url,e.data)),t.trace("URL = ",e.url);var o=null;if("undefined"==typeof window){var a=__webpack_require__(3092),s={headers:{Referer:"https://localhost"}};return e.data&&"string"==typeof e.data&&i&&(s={method:e.method,body:e.data,headers:{"Content-Type":e.content,Referer:"https://localhost"}}),a(e.url,s).then((function(e){if(e.ok)n(e.text());else{var t="Errors Occured on Http Request (status : '"+e.statusText+"' | url : '"+e.url+"')",i=e.status;r({message:t,status:i})}})).catch((function(e){r({message:e,status:-1})}))}if(window.XMLHttpRequest){t.trace("XMLHttpRequest"),(o=new XMLHttpRequest).open(e.method,e.url,!0),o.overrideMimeType=e.content;var l=null;e.timeOut>0&&(t.trace("XHR - TimeOut actif !"),l=window.setTimeout((function(){r({message:"TimeOut Occured on Http Request with XMLHttpRequest !",status:-1})}),e.timeOut)),i&&(t.trace("data = ",e.data),o.setRequestHeader("Content-type",e.content)),o.onerror=function(e){console.log(e),r(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},o.ontimeout=function(e){console.log(e),r(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},o.onreadystatechange=function(e){if(4===o.readyState)if(200===o.status)window.clearTimeout(l),n(o.response);else{var t="Errors Occured on Http Request (status : '"+e.target.statusText+"' | url : '"+e.target.responseURL+"' | response : '"+e.target.response+"')",i=e.target.status;r({message:t,status:i})}};var c=e.data&&i?e.data:null;o.send(c)}else{if(!window.XDomainRequest)throw new Error("CORS not supported");t.trace("XDomainRequest"),(o=new XDomainRequest).open(e.method,e.url),o.overrideMimeType=e.content,e.timeOut>0&&(o.timeout=e.timeout,t.trace("XHR - TimeOut actif !")),i&&o.setRequestHeader("Content-type",e.content),o.onerror=function(){r(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},o.ontimeout=function(){r(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},o.onload=function(e){if(200===o.status)n(o.responseText);else{var t="Errors Occured on Http Request (status : '"+e.target.statusText+"' | url : '"+e.target.responseURL+"')",i=e.target.status;r({message:t,status:i})}};var u=e.data&&i?e.data:null;o.send(u)}}))},__callJSON:function(e){return this.__call(e).then(JSON.parse).catch((function(t){console.log("_callJSON failed on : ",e.url,t)}))},__callXML:function(e){return this.__call(e).then((function(e){var t;"undefined"==typeof window?t=(new(0,__webpack_require__(8978).S4)).parseFromString(e,"text/xml"):window.DOMParser?t=(new window.DOMParser).parseFromString(e,"text/xml"):((t=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,t.loadXML(e));return t})).catch((function(t){console.log("__callXML failed on : ",e.url,t)}))}};const _=I;var E,w={uuid:(E=Math.floor(Date.now()),function(){return E++}),call:function(e){var t=f.getLogger("JSONP");if(t.trace("[JSONP::call ()]"),!e)throw t.error("missing parameter : options !"),new Error("missing parameter : options !");if(!e.url)throw t.error("missing parameter : options.url !"),new Error("missing parameter : options.url !");if(e.timeOut||(t.info("setting 'options.timeOut' default value"),e.timeOut=0),!e.onResponse)throw t.error("missing parameter : options.onResponse !"),new Error("missing parameter : options.onResponse !");var n="string"==typeof e.callbackSuffix?e.callbackSuffix:this.uuid(),r=!1,i=!1,o=e.url.indexOf("callback=");if(-1!==o){r=!0;var a=e.url.indexOf("&",o);-1===a&&(a=e.url.length);var s=e.url.substring(o+9,a);s&&(i=!0,e.callbackName=s,t.info("setting 'options.callbackName' value ("+e.callbackName+") from 'options.url' parameter"))}if(!r){var l=e.url.indexOf("?");-1===l?e.url=e.url+"?callback=":l===e.url.length?e.url=e.url+"callback=":e.url=e.url+"&callback=",t.info("setting callback default key in 'options.url' : "+e.url)}var c=!!e.callbackName||i;if(i||(e.callbackName||(t.info("setting 'options.callbackName' default value"),e.callbackName="callback",(n||""===n)&&(e.callbackName+=n)),e.url=e.url.replace("callback=","callback="+e.callbackName),t.info("setting callback function name in 'options.url' : "+e.url)),e.onTimeOut||(t.info("setting 'options.onTimeOut' default value"),e.onTimeOut=function(){console.log("TimeOut while invoking url : "+e.url)}),!c){var u=this,d=null;e.timeOut>0&&(d=window.setTimeout((function(){window[e.callbackName]=function(){},e.onTimeOut(),u._deleteScript(n)}),e.timeOut)),window[e.callbackName]=function(t){window.clearTimeout(d),e.onResponse(t),u._deleteScript(n)}}this._createScript(n,e.url)},_createScript:function(e,t){var n,r=document.getElementById("results"+e);(n=document.createElement("script")).setAttribute("type","text/javascript"),n.setAttribute("src",t),n.setAttribute("charset","UTF-8"),n.setAttribute("id","results"+e),n.setAttribute("async","true");var i=document.documentElement||document.getElementsByTagName("head")[0];null===r?i.appendChild(n):i.replaceChild(n,r)},_deleteScript:function(e){var t=document.getElementById("results"+e);if(t){var n=t.parentNode||document.documentElement;if(!n)return;n.removeChild(t)}}};const P=w;var S={send:function(e){var t=e||{method:"GET",protocol:"XHR",timeOut:0,format:null,wrap:!0,nocache:!0,output:"json",callback:null,callbackSuffix:null};if("undefined"!=typeof window||"JSONP"!==e.protocol){if("XHR"===e.protocol||"json"===e.format?t.wrap=!1:"JSONP"===e.protocol&&"xml"===e.format&&(t.wrap=!0),t.callback=null,t.output=t.wrap?"json":null,t.wrap){var n={};n.output=t.output,n.callback=t.callback,delete n.callback,t.url=A.normalyzeUrl(e.url,n)}switch(t.protocol){case"XHR":"GET"===e.method&&e.nocache&&(t.url=A.normalyzeUrl(t.url,{t:(new Date).getTime()})),_.call(t);break;case"JSONP":t.data&&(t.url=A.normalyzeUrl(t.url,t.data)),P.call(t);break;default:throw new Error("protocol not supported (XHR|JSONP) !")}}else console.log("Value (s) for parameter (s) 'protocol=JSONP (instead use XHR)' not supported to NodeJS")}};const M=S;function x(e){if(!(this instanceof x))throw new TypeError("ErrorService constructor cannot be called as a function.");var t=e;"string"==typeof e||e instanceof String?(this.message=e,this.status=-1,this.type=x.TYPE_UNKERR):(this.message=t.message||"undefined!?",this.type=t.type,this.status=t.status||-1),this.name="ErrorService",this.stack=(new Error).stack}x.TYPE_SRVERR="SERVICE_ERROR",x.TYPE_USEERR="USAGE_ERROR",x.TYPE_UNKERR="UNKNOWN_ERROR",x.prototype=Object.create(Error.prototype,{constructor:{value:x,writable:!0,configurable:!0}});const G=x,L=JSON.parse('{"rE":"3.4.6","p6":"19/12/2024"}');function k(e){if(!(this instanceof k))throw new TypeError(y.getMessage("CLASS_CONSTRUCTOR"));for(var t in this.logger=f.getLogger("CommonService"),this.logger.trace("[Constructeur CommonService (options)]"),this.options={protocol:"XHR",ssl:!0,proxyURL:"",callbackSuffix:null,httpMethod:"GET",timeOut:0,rawResponse:!1,scope:this,onSuccess:function(e){console.log("onSuccess - la reponse est la suivante : ",e)},onFailure:function(e){200!==e.status&&e.status?console.log("onFailure - Erreur (",e.status,") : ",e.message):console.log("onFailure : ",e.message)}},e)e.hasOwnProperty(t)&&(this.options[t]=e[t]);if(this.options.rawResponse&&!this.options.onSuccess&&(this.options.onSuccess=function(e){console.log("onSuccess - la réponse brute du service est la suivante : ",e)}),!!(null===this.options.onSuccess||"function"!=typeof this.options.onSuccess))throw new Error(y.getMessage("PARAM_MISSING","onSuccess()"));switch(this.options.httpMethod="string"==typeof e.httpMethod?e.httpMethod.toUpperCase():"GET",this.options.httpMethod){case"POST":case"GET":break;case"PUT":case"DELETE":case"HEAD":case"OPTIONS":throw new Error(y.getMessage("PARAM_NOT_SUPPORT","httpMethod"));default:throw new Error(y.getMessage("PARAM_UNKNOWN","httpMethod"))}switch(this.options.protocol="string"==typeof e.protocol?e.protocol.toUpperCase():"XHR",this.options.protocol){case"JSONP":case"XHR":break;default:throw new Error(y.getMessage("PARAM_UNKNOWN","protocol"))}if("undefined"==typeof window&&"JSONP"===this.options.protocol)throw new Error(y.getMessage("PARAM_NOT_SUPPORT_NODEJS","protocol=JSONP (instead use XHR)"));"JSONP"===this.options.protocol&&(this.options.httpMethod="GET"),this.options.nocache=e.nocache||!1,this.options.outputFormat=null,this.request=null,this.response=null}k.prototype={constructor:k,call:function(){this.logger.trace("CommonService::call ()");var e=this;function t(t){this.logger.trace("CommonService::onBuildRequest : ",t),this.callService.call(e,i,n)}function n(t){this.logger.trace("CommonService::onCallService : ",t),this.analyzeResponse.call(e,i,r)}function r(e){if(this.logger.trace("CommonService::onAnalyzeResponse : ",e),!e)return i.call(this,new G("Analyse de la reponse en échec !?"));this.options.onSuccess.call(this,e)}function i(e){this.logger.trace("CommonService::onError()");var t=e;t instanceof G||(t=new G(e.message)),this.options.onFailure.call(this,t)}(function(){this.logger.trace("CommonService::run ()"),this.buildRequest.call(e,i,t)}).call(e)},buildRequest:function(e,t){this.logger.error("overwritten method !"),e&&e.call(this,"This method must be overwritten !"),t.call(this,"This method must be overwritten !")},callService:function(e,t){var n=null,r=this.request,i=!(!this.options.proxyURL||"XHR"!==this.options.protocol),o={"gp-access-lib":L.rE};this.options.apiKey&&(o.apiKey=this.options.apiKey),this.options.serverUrl=A.normalyzeUrl(this.options.serverUrl,o,!1),i&&("GET"===this.options.httpMethod&&(n=this.options.proxyURL+A.normalyzeUrl(this.options.serverUrl,this.request,!0),r=null),"POST"===this.options.httpMethod&&(n=this.options.proxyURL+A.normalyzeUrl(this.options.serverUrl,null,!0),r=this.request));var a=this,s={url:n||this.options.serverUrl,method:this.options.httpMethod,protocol:this.options.protocol,timeOut:this.options.timeOut||0,format:this.options.outputFormat,nocache:this.options.nocache||!1,wrap:"XHR"!==this.options.protocol,callbackSuffix:this.options.callbackSuffix,data:r,headers:null,content:this.options.contentType||"application/xml",scope:this.options.scope||this,onResponse:function(n){a.logger.trace("callService::onResponse()");var r=null;if("XHR"===a.options.protocol&&(a.logger.trace("Response XHR",n),r=n),"JSONP"===a.options.protocol){if(a.logger.trace("Response JSON",n),!n)return void e.call(a,new G("Le contenu de la reponse est vide !?"));if(n.http){if(200!==n.http.status)return void e.call(a,new G({status:n.http.status,message:n.http.error,type:G.TYPE_SRVERR}));r=n.xml,a.options.rawResponse&&(r=n)}else r=n}if("function"==typeof a.options.onBeforeParse){var i=a.options.onBeforeParse(r);"string"==typeof i&&(r=i)}a.response=r,t.call(a,r)},onFailure:function(t){a.logger.trace("callService::onFailure()"),t.type=G.TYPE_SRVERR,e.call(a,new G(t))},onTimeOut:function(){a.logger.trace("callService::onTimeOut()"),e.call(a,new G("TimeOut!"))}};M.send(s)},analyzeResponse:function(e,t){this.logger.error("overwritten method !"),e&&e.call(this,"This method must be overwritten !"),t.call(this,"This method must be overwritten !")}};const T=k;var R={ssl:!0,newUrl:function(e){return(!1===R.ssl?"http://":"https://")+"data.geopf.fr"+e},Alti:{new_key:{"elevation-json":"/altimetrie/1.0/calcul/alti/rest/elevation.json","elevation-xml":"/altimetrie/1.0/calcul/alti/rest/elevation.xml","profil-json":"/altimetrie/1.0/calcul/alti/rest/elevationLine.json","profil-xml":"/altimetrie/1.0/calcul/alti/rest/elevationLine.xml"},newUrl:function(){return{"elevation-json":R.newUrl(this.new_key["elevation-json"]),"elevation-xml":R.newUrl(this.new_key["elevation-xml"]),"profil-json":R.newUrl(this.new_key["profil-json"]),"profil-xml":R.newUrl(this.new_key["profil-xml"])}}},ProcessIsoCurve:{new_key:"/navigation/isochrone",newUrl:function(){return R.newUrl(this.new_key)}},Config:{_key:"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/dist/",url:function(e){Array.isArray(e)||(e=e.split(","));for(var t=[],n=0;nn(e,{credentials:"same-origin"}).then((e=>{if(e.ok)return e.json().then((e=>e)).catch((e=>{throw new Error("Exception Json : "+e)}));throw new Error("Exception HTTP : "+e.status+" (status code) !")})).catch((e=>new Promise(((t,n)=>{n(e)})))),o=[];for(let e=0;e{if(!e)throw new Error("results config empty !?");e.forEach((e=>{this.listConfigResults.push(e)}))})).then((()=>{t.call(this,this.listConfigResults)})).catch((t=>{e.call(this,t)}))},B=function(e,t){this.listConfigResults=[];for(var n=0;nt||e__IDENTIFIER__\x3c!-- __DATAINPUTS__ --\x3e__RAWDATAOUTPUT__',input:"__KEY____DATA__"}},namespaceByDefault:function(){return['xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"','xmlns="http://www.opengis.net/wps/1.0.0"','xmlns:wfs="http://www.opengis.net/wfs"','xmlns:wps="http://www.opengis.net/wps/1.0.0"','xmlns:ows="http://www.opengis.net/ows/1.1"','xmlns:gml="http://www.opengis.net/gml"','xmlns:ogc="http://www.opengis.net/ogc"','xmlns:wcs="http://www.opengis.net/wcs/1.1.1"','xmlns:xlink="http://www.w3.org/1999/xlink"'].join(" ")},schemaLocationByDefault:function(){return'xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd"'},processRequestString:function(){this.logger.trace("WPS::processRequestString ()");var e="";if("POST"===this.method)e=this.template.post.value;else{if("GET"!==this.method)return this.logger.error("No other method supported by the service !"),!1;e=this.template.get.value}return e=(e=(e=(e=(e=e.replace(/__SERVICE__/g,this.paramservice)).replace(/__VERSION__/g,this.paramversion)).replace(/__RAWDATAOUTPUT__/g,this.paramrawdataoutput)).replace(/__IDENTIFIER__/g,this.paramidentifier)).replace(/__REQUEST__/g,this.paramrequest),"POST"===this.method&&(e=(e=e.replace(/__NAMESPACE__/g,this.namespaceByDefault)).replace(/__SCHEMALOCATION__/g,this.schemaLocationByDefault)),(e=e.replace(//g,this.__addDataInputs()))?(this.requestString=e,this.logger.trace("traduction tmpl",e),!0):(this.logger.warn("traduction tmpl : empty request !?"),!1)},__addDataInputs:function(){this.logger.trace("WPS::__addDataInputs ()");for(var e,t="GET"===this.method?this.template.get.input:this.template.post.input,n="GET"===this.method?";":"",r="",i=this,o=this.DataObject.getData(),a=0;a0)for(var o=n.getElementsByTagName("parsererror"),a=0;a0){var n=function(e){if(e.attributes.length>0){for(var t={},n=e.attributes,r=0;r0?t.index=t.filters.type[0]:t.index=t.filters.type),delete t.filters.type),t.filters.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),delete t.filters.bbox)),delete t.filterOptions),t.position&&(t.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),t.position.lon||(t.position.lon=t.position.x),delete t.position.x),t.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),t.position.lat||(t.position.lat=t.position.y),delete t.position.y)),t.returnFreeForm&&(this.logger.warn("The parameter 'returnFreeForm' is deprecated"),delete t.returnFreeForm),t.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete t.srs),t},Le.prototype.buildRequest=function(e,t){var n={httpMethod:this.options.httpMethod,geocodeMethod:"search",query:this.options.query,index:this.options.index,returnTrueGeometry:this.options.returnTrueGeometry,position:this.options.position,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=be.build(n),this.request?t.call(this,this.request):e.call(this,new G(y.getMessage("SERVICE_REQUEST_BUILD")))},Le.prototype.analyzeResponse=function(e,t){if(this.response){var n={response:this.response,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};Ge.build(n)}else e.call(this,new G(y.getMessage("SERVICE_RESPONSE_EMPTY")))};const ke=Le;function Te(e){if(!(this instanceof Te))throw new TypeError(y.getMessage("CLASS_CONSTRUCTOR","ReverseGeocode"));this.CLASSNAME="ReverseGeocode",this.logger=f.getLogger("Gp.Services.ReverseGeocode"),this.logger.trace("[Constructeur ReverseGeocode (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=O.ReverseGeocode.newUrl()),T.apply(this,[t]),t.searchGeometry)this.options.searchGeometry=t.searchGeometry;else if(!t.position)throw new Error(y.getMessage("PARAM_MISSING","searchGeometry"));if(t.index||(this.options.index=t.index="StreetAddress"),t.filters)for(var n=Object.keys(t.filters),r=0;r0?t.index=t.filterOptions.type[0]:t.index=t.filterOptions.type),delete t.filterOptions.type),t.filterOptions.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),t.searchGeometry||(t.searchGeometry=this.bbox2Json(t.filterOptions.bbox)),delete t.filterOptions.bbox),t.filterOptions.circle&&(this.logger.warn("The parameter 'filterOptions.circle' is deprecated"),t.searchGeometry||(t.searchGeometry=this.circle2Json(t.filterOptions.circle)),delete t.filterOptions.circle),t.filterOptions.polygon&&(this.logger.warn("The parameter 'filterOptions.polygon' is deprecated"),t.searchGeometry||(t.searchGeometry=this.polygon2Json(t.filterOptions.polygon)),delete t.filterOptions.polygon),!t.filters&&Object.keys(t.filterOptions).length>0&&(t.filters=t.filterOptions),delete t.filterOptions),t.position&&(t.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),t.position.lon||(t.position.lon=t.position.x),delete t.position.x),t.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),t.position.lat||(t.position.lat=t.position.y),delete t.position.y)),t.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete t.srs),t},Te.prototype.buildRequest=function(e,t){var n={httpMethod:this.options.httpMethod,geocodeMethod:"reverse",searchGeometry:this.options.searchGeometry,index:this.options.index,position:this.options.position,returnTrueGeometry:this.options.returnTrueGeometry,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=be.build(n),this.request?t.call(this,this.request):e.call(this,new G(y.getMessage("SERVICE_REQUEST_BUILD")))},Te.prototype.analyzeResponse=function(e,t){if(this.response){var n={response:this.response,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};Ge.build(n)}else e.call(this,new G(y.getMessage("SERVICE_RESPONSE_EMPTY")))},Te.prototype.bbox2Json=function(e){return{type:"Polygon",coordinates:[[[e.left,e.top],[e.right,e.top],[e.right,e.bottom],[e.left,e.bottom],[e.left,e.top]]]}},Te.prototype.circle2Json=function(e){return{type:"Circle",radius:e.radius,coordinates:[e.x,e.y]}},Te.prototype.polygon2Json=function(e){for(var t={type:"Polygon",coordinates:[[]]},n=0;n=5e4&&(this.distanceUnit="km",this.costValue/=1e3)):(this.costType="time",this.costValue=this.options.time)}nt.CLASSNAME="ProcessIsoCurveParam",nt.prototype={constructor:nt,getLocation:function(){return this.point.x+","+this.point.y},getDistanceUnit:function(){return"m"===this.distanceUnit?"meter":"km"===this.distanceUnit?"kilometer":""},getConstraints:function(){var e=[];if(0!==this.constraints.length)for(var t=0;t0)for(var r in t.noProxyDomains)if(n.trace("[ProxyUtils] proxifyUrl : analyzing "+t.noProxyDomains[r]),-1!==e.indexOf(t.noProxyDomains[r]))return n.info("[ProxyUtils] proxifyUrl : "+e+" found in noProxyDomains list ("+t.noProxyDomains[r]+")."),e;return t.proxyUrl+encodeURIComponent(e)}};const Ct=At;function bt(e){return bt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},bt(e)}var It=vt.getLogger("GfiUtils"),_t={getLayerFormat:function(e){var t="function"==typeof e.getType?e.getType():null,n=e.getSource();if(t){if("VECTOR"===t||"VECTOR_TILE"===t)return"vector";if("TILE"===t)return n.tileGrid?"wmts":"wms";if("IMAGE"===t)return"wms"}else{if(n instanceof l()||n instanceof p())return"wms";if(n instanceof u())return"wmts";if(n instanceof a()||n instanceof i())return"vector"}return"unknown"},displayInfo:function(e,t,r,i,o){if(It.trace("[Gfi] : displayInfo..."),i||(i="text/html"),null!==r){var a=null,s=r;s=(s=s.replace(/\n/g,"")).replace(/(>)\s*(<)/g,"$1$2");var l="undefined"!=typeof window?window:null;if("object"===("undefined"==typeof exports?"undefined":bt(exports))&&null===window)a=(new(0,__webpack_require__(8978).S4)).parseFromString(s,i);else if(l.DOMParser)a=(new l.DOMParser).parseFromString(s,i);else{if(!l.ActiveXObject)return It.log("Incompatible environment for DOM Parser !"),!1;(a=new l.ActiveXObject("Microsoft.XMLDOM")).async=!1,a.loadXML(s)}var c=a.getElementsByTagName("body");if(c&&1===c.length&&!c[0].hasChildNodes())return!1;var u=document.createElement("div");u.className="gp-feature-info-div";var d=document.createElement("button");d.className="gp-styling-button closer",d.onclick=function(){return e.featuresOverlay&&(e.removeOverlay(e.featuresOverlay),e.featuresOverlay=null),!1};var p=document.createElement("div");return p.className="gp-features-content-div",p.innerHTML=r,u.appendChild(p),u.appendChild(d),e.featuresOverlay&&(e.removeOverlay(e.featuresOverlay),e.featuresOverlay=null),e.featuresOverlay=new(n())({element:u,autoPan:o.autoPan,autoPanAnimation:o.autoPanAnimation,autoPanMargin:o.autoPanMargin,positioning:"bottom-center",insertFirst:!1,stopEvent:!0}),e.addOverlay(e.featuresOverlay),e.featuresOverlay.setPosition(t),e.featuresOverlay.render(),!0}},features2html:function(e,t){var n=document.createElement("div");return t.forEach((function(e){var t=e.getProperties();if(t.hasOwnProperty("render"))n.insertAdjacentHTML("beforeend",t.render);else{if(t.hasOwnProperty("name")){var r=document.createElement("div");r.className="gp-att-name-div",r.insertAdjacentHTML("afterbegin",t.name),n.appendChild(r)}if(t.hasOwnProperty("description")){var i=document.createElement("div");i.className="gp-att-description-div",i.insertAdjacentHTML("afterbegin",t.description),n.appendChild(i)}var o=null,a=!1,s=null,l=null,c=null,u=["fill","fill-opacity","stroke","stroke-opacity","stroke-width","marker-symbol","marker-color","marker-size","geometry","value","name","description","styleUrl","extensionsNode_","icon"];for(o in t)if(void 0!==t[o]&&-1===u.indexOf(o)){a||((s=document.createElement("div")).className="gp-att-others-div",l=document.createElement("ul"),a=!0),c=document.createElement("li");var d=document.createElement("span");d.className="gp-attname-others-span",d.appendChild(document.createTextNode(o+" : ")),c.appendChild(d),c.appendChild(document.createTextNode(t[o])),l.appendChild(c)}l&&(s.appendChild(l),n.appendChild(s))}}),e),n.hasChildNodes()||(n=null),n},layerGetFeatureAtCoordinates:function(e,t,n){var r=e.getPixelFromCoordinate(n);return e.hasFeatureAtPixel(r,(function(e){return e===t}))},displayVectorFeatureInfo:function(e,t,n,r){var i=e.getPixelFromCoordinate(t),o=[];if(e.forEachFeatureAtPixel(i,(function(e,t){(!n||n.indexOf(t)>-1)&&o.push(e)})),0===o.length)return!1;var a=this.features2html(e,o);return null!==a&&(this.displayInfo(e,t,a.innerHTML,"text/html",r),!0)},displayFeatureInfo:function(e,t,n,r,i){for(var o={},a=0;ae.getResolution()&&(m=!1),m&&g.maxResolution&&g.maxResolution255)throw new Error("'"+e+"'' is greater than 255(0xff);");return("0"+Number(e).toString(16)).slice(-2)},num:function(e){return parseInt(e,16)},arrayToRgba:function(e){if(!Array.isArray(e))throw new Error("Not an array !");var t=e[0],n=e[1],r=e[2],i=e[3]||1;return"rgba("+t+", "+n+", "+r+", "+parseFloat(i)+")"},arrayToHex:function(e){if(!Array.isArray(e))throw new Error("Not an array !");var t=e[0],n=e[1],r=e[2],i=e[3],o=[this.hex(t),this.hex(n),this.hex(r)],a={};return a.hex="#"+o.join(""),i&&(a.opacity=parseFloat(i)),a},rgbaToHex:function(e){var t=/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(0?.?\d+)\s*)?\)/.exec(e);if(!t)throw new Error("Invalid format: "+e);var n=t[1],r=t[2],i=t[3],o=t[4],a=[this.hex(n),this.hex(r),this.hex(i)],s={};return s.hex="#"+a.join(""),o&&(s.opacity=parseFloat(o)),s},hexToRgba:function(e,t){if(!e)throw new Error("Invalid format");e=e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,(function(e,t,n,r){return t+t+n+n+r+r}));var n=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return(n=n?{r:parseInt(n[1],16),g:parseInt(n[2],16),b:parseInt(n[3],16)}:null)?"rgba("+n.r+", "+n.g+", "+n.b+", "+t+")":null},isHex:function(e){if(!e)return!1;if("#"!==e.charAt(0))return!1;return!!/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e)},isRGB:function(e){if(!e)return!1;return!!/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(0?.?\d+)\s*)?\)/.exec(e)}};const xt=Mt;const Gt={lightOrange:"data:image/png;base64,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IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjkyYWVkNjM2LWY3MDMtNDAzOC1hNzM4LWZiYzYxYzZlMTljNCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5NWMzZWI3NC0zYWRmLTRkYzUtOWZjZS1iODQ4NTc3Nzg4ODQiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0NjI3ZDg3NC1lZDIyLTRiZTUtYTlkNS00NDlmMzVhZDIxYzgiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5Mjc4OTUzMDYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphM2U3ZWQ1MS0xNTI4LTRhYjAtODVjOS0zNzNkNzgxZGM2ZmMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjI3KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PofUkY4AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGRuA4VZTAAAFcElEQVRYw82YW2xbVRaGv7XP8bHjXByHQkNhWigdVX1AikRBMBoQ8wASl4fRqPDAAxIPKAVxeRqQRohHBEVCaoGKUBCl4qHcNKCZVKMRRQxtgTaACLRKqlwB14NzM2ni2D2XvXjgBFXQOnFiA1uy/HB89u9/7bX+vf4l1HnpK57hTNCE0AzqAS5gAAuEID5KiWSiLPf4tp7YUjcSu4yLZzdi2IJyNXANcBlwAdAKzAHTwDhwDKEPywC+GZWHbPi7IKOvZIWguAnlr8BtwJ+AxDJeDYCPgF6Ed0hkh+Weov5mZLTHJMDeBjwYk0itYJtKTOpZML3SbYNfnYz2SBr0buARYENcFytdFvga2AGyT7p14Vcjoz3ShOgdKDuAi+pUewpMIDyCypvSreWGk9HdroOEV2F4A1hfTxGJCX2D5U7U/UzuD6NaXq49NRJhBsOjwMVLEtE4gaL4W5cV3IsxPEoizDT0ZLTHcSH6M/BWLLlVwpQKuPzhb+i8sRkv04Y/e5rvPigxtnM9trKU2k0D28A5LN3RsmXbrbFOU8DtQLpqfJqu97nh6TydmzvwWpOI8VDbxqbrkmz62yk+/Ps6yoe8KkeV/hHHfgrMNyrNEkBX1SAktgRs3T7ApV1rSWayiEkDLmLSJDNZLu1ay9btAyS2BEsEuWuZ99WKyRhgHeCcn8wGw/qbOnAS3jmfOwmP9Td1kNhQDduJcUwjyciS0RJXMMkWkPPUo/z4XFxZRhZII8mEwFCsT+f5xXTE7FAOteduItVaZodyhNPVZDeKccJGkxmsChIMOvTt6aRSzIP+7A9rRKWYp29PJ8GgsyqcVauZSADaj+IDTecWvBlD4e01HKjM07XtOOuuy+A2X0BYmib/8SxfvLWRYm8LdqZaCvkI/SDBci6nld0ze7KCLa4F3gSurR4MB5x1FnMhiCeor9hJiPKmWpbGp3EU2IbJFuTe5XfStbczLxgP7K0IPcCFDWhnJoFuMAek2/oNbWdku/WxHATejT1JPZcPvINysFYiK+gAFkXTK6H+MyhXADeseJ9fmrVDM6X080/+p1M2/yFsD1zjEIauEeMAqNpQE16oaKiqwfjYeLk+fuYl10HDq7DsBTavxs8o6FzFKez/dM3rLx9LjUyVxcb7yVkfzmpXFbACJURHIxgyxkyu1ml6qL0Z4YX4xl7Jfrrgm9Ov9bX/e++x1tHCgkQ11lgELGA4sBp3iHRbH5GDwJPAFLXo6KJnDmTh/aG2w2/3t47VSGQxs1zAE9U2s9pEjx3hXuBloCa7G1rxv8o3f/7SkUz/UFFWMqGRWMpHAqsDbl00KGotIXM7MawF7gKSS5oJJRospI7v+rD96Ikp8aV2EgrkVPW4OnIy6SVL9ZubvZgyaOVyYDfwl2oNqVWiXNEb231oTe+/BrzvK9Gy01MFyoiOKzIEmqsEfjGf/39U1yHgosJFUXhlFMl+z9E/nkvhVNHZsjux+9Caf77RnyzMBaJLmW4RrWAlB3Y4Uh13HLOA4wQjo6O2IRPNxVV4JuG5Et2SSelzjtFLzsZQ0NIZ8/2rx7K9+/paxqbKvyh4Bc4AFQxzau23Dow7FS+nHmfEUz05OqINH8+evXJPJVOuE93XkY4eSziaXcQpB2b+vZNt7+/8IPPl2OxPRMJ4dDsLzIho3hpzamJ6aqJ0ei6qtZAasmZ2OS1RyOMd6egBIzSFVoKj4y1Hnvhv+8cD02ZOkEmgIKITVnXKWDs1ksvNrgbTbRSZ46cypY50aWcllIsyKXvr8GTyi9f6WvePFGVQhO8EPW2NzI+OfV2pF2bDTgbg8D/aJeVUspd1BK3/G24u7/skO3+iYP3h3LdhI/B+AGodUpo8WKwoAAAAAElFTkSuQmCC",darkOrange:"data:image/png;base64,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czpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjIxNDZjMzUzLWIxZjItNGVjOC04NzQ3LTIwMGEyYWExM2ViMyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2NGViNmI2Ni03Y2I2LTRkZGUtYTI3OS01MGY0ZWFiZGFhODAiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1ODRhM2VjZC1kNGFmLTQ3NjItYjA1ZS04ODk2MGQ4ZTk0Y2MiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5MDM3ODI2MTQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxYzNjOGRkZi1kMjVkLTQ4YzQtYTAwYS0yMmU3ZDYwMzg1YjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjAzKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PuhCAHgAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGQOTjc4FAAAFdklEQVRYw82YW2gcZRTHf+eb2dlkc9lsrFYr2notfSgWxKKiog8VvIFI9UFQEaWtYPFJfREfRRSEeqlttViLD/WGisYXrShWpfWC1WpSN5eN3cZumkuTzWY3c/mOD9lI0WSTTXbVA8M8zMz3n//5zvl/5xyhxqb3ewYvaERpAvUAFzCABUIQH6GAHyvKa76tJbbUjMRW4+LbC7GsQbgCWA+sAs4AWoA8MAxkgEMo32LoxDO98oIN/xdk9IGUYEYvRrgduAW4Gogt4NMA+BroQHkfm+qW3aP6n5HRTSYG9hZga5lEwyKWKZVJvQCmQ3bZ4F8no5skAXov8BiwspwXizUL9APPgOyVXTr5r5HRzdKI1TsRngHOqlHuKTCI8hhG3padWqw7GX3IddDwcixvAefXUkTKhH7HcBfifi8vh1E1H1cfGkGYxPI4cM68RGw5zf3y3S7IuedgeZwgTNZ1Z3Sz46LRNcA7Zcmd25yGgPWP/M7q65toTLZSHBvn6OcFDm07n6g0n9oNAxsR54DsjBYs2251QWAbgFuBREX/tF3rc9+zA6xa3U5jSxwxHmpbueyqOOvvOM7rj67g1JfedFTNagngVtR+B0zUK8xiwLqKTmhcE3Dblk4uXbecRDKFmATgIiZBIpni0nXLuW1LJ41rgnmcvG6B59WiyRhgBeDM+UZipWHthnbcmDf7b8Y81m5oJ7GyErZTxjH1JCPzesu4ghtvBpkjH2X6uXFlAVEg9SMjhEAamFsyp4Yjcuks1s6uXdZacuksU8OVZDcC0mW8OpFRQqBruvqdwwpdDh+9cjaF0QHQv/2wRhRGB6afdzkVkKZxtDoyVaqZBKCHEXygcXafjhi63l3G9tIEGzYe4ZKrksSbzmCqMEz6mzE+eedC+juaiUYqhZCPchgkqKB4SzxntqQEO7oceBu4srIzHIitsMTOBOMJ1leCkxAMmEpRWt6Vg8BGTConOxZeSVdfzmwxHmpvRtkJnFmHcuYksBkxH8tO69e1nJEd1sdhP/BBuUippfnA+3jsr5ZI9TnzV33mFcB/DuEi4LpFr/PPZu3LkanES08fOltWnxe2Ba5xCEPXiHEAVG2oMS9UNFTVINOXKdamn3nQdSC8HMMeYPVS+hkFzQdObl9m2Zu7+xt6hkKx5fXktGumdNXyZQUKiPZGkDbGnFxqp+kh9kaUHeUTezHr6WRkxt/oa/toT39Lby6QqMoci4BJDB8vpTtEdlkflf3A08AQ1ejoTM8cyeRnudYD72Zb+qokMhNZLuCJaqtZaqDLLi0i7EHYDVTV7oZW/J9PNf3wanfycLoki5nQSFnKewKrnW5NNMhtKRDlt6EsB+4G4vM2/UrUNd5w5Pl028FfiuJL9SQUyKrqEXXkaNyLF2o3N9vUYKB0AbAduKFSQWqVKFv0+rYfXdbx4aB3qqQLDk8VKCKaUSQNmi0F/ujAwB9RTYeAMwoXabg2QvZ5jl4ym8Ip6FjgDm7/bdl7bw3Ec/lItEJyWyAS0RJWsmC7I9WM45hJHCfo6e21dZlozlju3pjnSnRT0tMXHdFzT8dQ0EJoTr2eSXXs7W/uG/pnwiswBZQw5NXaYw5knJKXVY8p8VSP9vZo3cezp1v2nniDK9FD7V70RMxoaganGJmJT0+0frbtt+RPfVN/EQnLo9sxYEREB6wxxweHhwYL4/mo2kSqi43c5zRH8GS7Fz1shMZQJTg41PzVU7+2fdNZNHlBTgI5ER20qkPG2qGebHZsSTpULzJH8slCe6ywrWTlrGTM3tw9Ef/xjUzLvp6idIlwQtBxa2Sit6+/VCvMuu0MwIE726RBSqlViaDli6Gm4t6e1MQveet3Z4+F9cD7Ewo4WRJBbaaSAAAAAElFTkSuQmCC",red:"data:image/png;base64,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293bv2fa/f0ASM5yljz/NiUAAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmI5YjA2YTAwLWZkOTQtNDc5MC1hNzIzLTlkMGUwNGRiNTRlNyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1MTQ3ZGU5Yi1kOTA0LTRlNWYtYjIyYy0wZmMzOGRmMWI3ZGEiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YzBjNTI2YS1lYTkyLTQxYWItODM5Yy05OWFhYTM0YjdlYzciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE2NDAxNTU0MjYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowMjQ4MDc5ZS1kMTYyLTQxZmItOGViYS1lMzY2NTRiNGRjMjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjIwOjQwKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PkaovgIAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPFCiKn0kIAAAFfUlEQVRYw82YTWxc1RXHf+e+N2/GH+Px2IEEV02AgqIsIkwgoYS2ahepVGCBUOiCRRdsAAnECthErBBCICGFj4gqRQqBRSABUrVm1URtCSATJ5ASZCPHH0kGgx1/xJl5nvH7uIcFY4iIM/GzZyhHenqL994993/u+f/fOUeos+nNnkHCJoQWRD0UFzCARYhQCVB8NFWWTwNbT99SNxC3GZfIXg9sADYDWxCuRekEskARYQplFPgEOAr045ph6bXRzwKM3pEX5mduQLkHuAvYCqSW8GkIfAT0IBwknT8lH87o/w2M3mpSqL0LeLQKIrOMZSpVUC8hpkf6bPiTg9FbpBn0L8ATwLoqL5ZrFjgNPAeyV47p3E8GRjdLE6r3oTwHXF0n7ikwgfAEIvvlqJYbDkY3uw4a3YLyNrC2niJSBXQG4c+Ie0yORnGSj5OnRhzlUJ4ErrkikBAoAjPVe7ik4F6D8iRxlGvoyegmx4X4NwgHgM6a8fUyIfc8doZbf99Ca66N0uwF+v7tc3DnWoJK6gqep1C2g3NEjsdLlm03GXSbAe4GmmvGZ91vA3Y8P8aN6ztoyaYxxsPaNrbcnmbbvV/x9ONdnPnA+w71otaMcDfYPqDUmDQTUgjdNYPQsSHkgYf62di9mmwujzHNgIsxzWRzeTZ2r+aBh/rp2BDWDLLQjSzpf7VMMIpB6QKcy77Tuc6wdVsHbspbfJspj63bOuhcV8u3g9KFJtufWQbHakfLdQUv3YrI4qwQ+e65616Jr6mknE4KJgIGgctLZnEq5vRgAWsXLyKttZweLFCcqiW7cdVP1DgwQoQwUNPJxIDDG7vXMDszBvqjDWvM7MwYb+xew8SAUzNowgCSDEwyNVMJQU8AAdC06DvBtOG/76xirlLi3u0nufn2HJmWTir+FJ9+PMu7B66nr6eVYLpWCgUoJ0DCGoq3wv/MbXkhmlkN7Ad+XTMY4kBTl6XlKnA8IQ4U/xyUx8wlB3ZpKvcC23Hz49K79Ep6GeWM8VB7J8pfgasaUM6cAx5EzPvSZ4OGljNy1AYIh4C/L6lASWYBcBCHQ0mBJOfM94rk+WjwAsKvgN8te51LK7kPpm3zK89OrZH1v4zaQ9c4RJFrxDgAqjbSlBcpGqlqODoyWq5TP1OtnoU9wPqV9DMKWlRnfJ+/6q3XKpmhSRVbXU8uuhb6Hq1eVsBHdDiGQWPMuZV1mpuMB/aPCK8CXcsMjs6pufCm3/7PPZXs8LhKnJBjMTCH4f2VdIfIcRsgcgh4FpgkiY4u9Mwqc4fn2468M58dSQhkIbNcwBPVNrPSRJdjWgb2AK8BidrdSCX4PGw5/re53IlBK8uZ0EhVyodCq/1uXTTIzfrExZ0oq4H7gfQSmv54IMqcfNFv7/0ilkCSg1CgoKon1ZEv017ar9/cbEvGEFeuQ9mF8IdaBamFuBB7I7tKq3r+EXjnK0tPTxUoIzqqyCBooRIGM2NjX8d1HQIuKFys0cYY2eeJ3riYwinorHUndvmr3nt7Pj1eVNEa5LZALKIVrBTAnopVRx3HzOE44dDwsG3IRHPBxrtTnkv8p5yjLzvoLy72oaC+mvOvz+V79pZbRyYvJbwC80AFQ1GtPevAqFPxCuoxL57ql8ND2vDx7MVW2JTOuMQPdxDvSInmF/yU1ZT+Nd92eGcp97+RH4BE1XHHLDAtomPWmK8mpiYn/AvFOCmRGmLTm53WOOKpDhM/YqApQsLe+dYPnym1f9xvTVGQc8C4iE5Y1Ulj7eRQoTC7Ih1qFJiTQc7vwN9ZUbk6Z+ydp6L0Z2+Ws/uGrAyI8I2gF6yR0vDI6Uq9fDbsZACO3NQuGa3kr3XC7H+ClvJeP1/6IrbBqbNno0b4+xbMlmARngcRbAAAAABJRU5ErkJggg==",turquoiseBlue:"data:image/png;base64,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/MUi8H5G35QHBm+BvjV3bu1znD4AWZpV+gY4OARGS5S97vHu3u65/XunPb8fN2tyj8UDOK0AAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjEwNGNlNWFhLTE1YzctNGI4Yi1iOGU1LTFmYWQyNWFiYzBhZCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpkNDMyZTY1Zi0xOThhLTQxM2EtYWYyMy1jNzhlNzczNGRlN2QiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyNzExODVkMi03MWZiLTRhZDMtYTJmMi1iNjM3OWU3MDc1OTEiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE4NjYyMzgzMjQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NGFiYzNkYS1lZWJiLTRlZjctYjdjNS04ZDRjODY5OGVjODMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI0OjI2KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pj0tlUwAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGBru/VeEAAAABmJLR0QA/wD/AP+gvaeTAAAFO0lEQVRYw9WYe2xTVRzHTx97dYS5B1UHa+/tY12dDoOKWyIGlfgHkCkSNTHGwHxA3NiAP/A5x4CMKEzdYL29YyAyBxKQZbI+NvYIaowaH9Ogi2GRbGjcFrbBNrq2a2/9nq5LCFnbbfSOeZJPTs/t6Tm/7/39zu+cU0IiXc7WSImNX0BsZiVYAhigmah5tHklsZrjSYtJSuZtaeSiiJU3gHUwfC9oARfBIHBP1DzaPH1eRuzmp0E6aTgSNX9EWMwSvOkMGPgG+CpguG8a0H7nA78zkMYqye0V0lYXDSHrYUw7cE5TxM04/b+38+vJ+RPRt0eIjVeAAhhyCQizFDKJEBjndaCY49Di4+CRlzFxfwSE3Ciol9i4DSBujoRUy7HIszFxdwSF3CioBy8qm1g5ufhirHwyJqwHrrDGWTlg8hFL1URN2+EF0XFPkyYuSWwhUVgnT2CygXBG3dFcM7bz1/au1u7OK9/93eWidUlHe1dCc810EsUAsXOPQZCI3rGZ6Wb4EXAEM0SCUFnZduz6T/09l4bHXYOCz+f0+XxeWg+7XYM/4vnKtlqHJHSIOrAHlYMFYmawRNCKycaDGZLVfMRdf/nPDpfXM+abotDnpy93dtzXfNgdZg+im2uimJ6h66UTeIMZsrat1jvkdPRRb/imLt4hl6N3DfqFEIPvOMzDJYspJsWfbUKEyFNttcKoyzkKo4UgYoRRt3OE9guT1br984nsmQ7gCWbIipaj4xeu9v/hFQTPlG7B89+u9v9O+4UQQ8f/BSlaVM8kgBOhji4p9mpvwQ+Wfwddjp6bQw2u8g44HT3535/tTUa/0Eccvg4sFDE1m2PBZkx2LVRqVcLQvG/PDDX1/tVxze38x+UZH6O1He28b764qgwtxOcf327eBGLFE9NikiD3qzDZhVBJgCJH3KubDnkfbD4s5Jw74qM1bcvDnxq8/vHt1SrS9InIJ2m7OQ4UYsKhCB9lJqHj0gPsHJzPvsS9w8rRRPDptI40M8PlH9fOJ5M5K008rsZmIwi5gc4QN9Zja8zn+5epch9PTFepU1iGuVunVqeyS9g0iv8zy96l0WiSjIsXx28iJEJhaONkMGB5YP14bkmI1SzIz1T0pRa9VKnNzCjUMcwWUAS2BtgWYLJN+xTo1OyrOhW7xsAwqnSGkd3i+uGjkT5Xw6DLt3AdEKQNB4YXbdtwQpuVuRtG7pwhxWA7vJgRib0nDuSDvtkIkjYcHE3aVWjRLL9/zyyETPK2Vq3OidAaOhiPDLcbxo3MRIik0eReWPnO15pHHiqbpYhS6hkNw7wAz0To6GM5hAzH3wkDa6b7x4bEwnkUfMnP6idX7Nex7GxElIDNerV6hU6jSdbp9RHck2w0w/FaGGoJm7KtnCfmWNlF1fOrK3Q6bekMRFABO7QM8yxewFLUi+5JSxPpAmcxy0gjt1Rytir4NcHKCfJTH/al5j1j1hr0pWEML55YD+x2GP6cVqNZZjQYEvUsG4vP4v8jKju5L1p6qnytxGKa6qogyOorBpVbXvxMe69xdxABb9I0DAGvIIRWp7NsBsJIoWVZKfaXuf+jMKp2b6z8+Adb4aErNwpCCh5J2pnfoH0ga08g7invBfaQjXjjuQifhyEgLdNolJP5UqR17y+QnSwvk1i565OZK6F8RzubvWwvDH8LvKZnmHXY8HKws+sNLJtI5muJ/7hYElOzJ1V+fN9R7CVDClPJOVXuqo06vS4HQjTwgDKDZRXk/1JiD7wrieFLk6T1lczCXUVK7aPZinS9XrTw+Q+Tql7SUmvGuQAAAABJRU5ErkJggg==",defaultOffset:[-25.5,-32]},Lt=ol.Feature;var kt=__webpack_require__.n(Lt);const Tt=ol.style.Style;var Rt=__webpack_require__.n(Tt);const Ot=ol.style.Circle;var Dt=__webpack_require__.n(Ot);const Nt=ol.style.Icon;var Ut=__webpack_require__.n(Nt);const jt=ol.style.Fill;var Bt=__webpack_require__.n(jt);const Ft=ol.style.Stroke;var zt=__webpack_require__.n(Ft);const Vt=ol.style.Text;var qt=__webpack_require__.n(Vt);const Ht=ol.geom.Polygon;var Wt=__webpack_require__.n(Ht);const Yt=ol.geom.MultiPolygon;var Zt=__webpack_require__.n(Yt),Jt=vt.getLogger("styling");kt().prototype.setPropertyFill=function(){var e=this.getStyle();if(e&&(!Array.isArray(e)||0!==e.length)){var t=e.getFill();if(t){var n=t.getColor();if(Array.isArray(n)){var r="rgba(";r+=n[0]+",",r+=n[1]+",",r+=n[2]+",",n=r+=n[3]+")"}if(xt.isRGB(n)){var i=xt.rgbaToHex(n);this.set("fill",i.hex),this.set("fill-opacity",i.opacity)}else this.set("fill",n),this.set("fill-opacity",1)}}},kt().prototype.setPropertyStroke=function(){var e=this.getStyle();if(e&&(!Array.isArray(e)||0!==e.length)){var t=e.getStroke();if(t){var n=t.getColor();if(Array.isArray(n)){var r="rgba(";r+=n[0]+",",r+=n[1]+",",r+=n[2]+",",n=r+=n[3]+")"}if(xt.isRGB(n)){var i=xt.rgbaToHex(n);this.set("stroke",i.hex),this.set("stroke-opacity",i.opacity)}else this.set("stroke",n),this.set("stroke-opacity",1);this.set("stroke-width",t.getWidth())}}},kt().prototype.setPropertyLabel=function(){var e=this.getStyle();if(e&&(!Array.isArray(e)||0!==e.length)){var t=void 0!==this.get("name");if(e.getText()&&t){var n=e.getText().getFill();if(n){var r=n.getColor();if(Array.isArray(r)){var i="rgba(";i+=r[0]+",",i+=r[1]+",",i+=r[2]+",",r=i+=r[3]+")"}if(xt.isRGB(r)){var o=xt.rgbaToHex(r);this.set("label-fill",o.hex),this.set("label-fill-opacity",o.opacity)}else this.set("label-fill",r),this.set("label-fill-opacity",1)}var a=e.getText().getStroke();if(a){var s=a.getColor();if(Array.isArray(s)){var l="rgba(";l+=s[0]+",",l+=s[1]+",",l+=s[2]+",",s=l+=s[3]+")"}if(xt.isRGB(s)){var c=xt.rgbaToHex(s);this.set("label-stroke",c.hex),this.set("label-stroke-opacity",c.opacity)}else this.set("label-stroke",s),this.set("label-stroke-opacity",1);this.set("label-stroke-width",a.getWidth())}this.set("label-font",e.getText().getFont()||Xt.DEFAULT_TEXT.font),this.set("label-textAlign",e.getText().getTextAlign()||Xt.DEFAULT_TEXT.textAlign)}}},kt().prototype.setPropertyMarker=function(){var e=this.getStyle();if(e&&(!Array.isArray(e)||0!==e.length)){var t=e.getImage();if(t)if(t instanceof Ut()){var n=t.getColor();if(Array.isArray(n)){var r="rgba(";r+=n[0]+",",r+=n[1]+",",r+=n[2]+",",n=r+=n[3]+")"}if(n){var i=xt.rgbaToHex(n);this.set("marker-color",i.hex)}var o=t.getScale();switch(Math.round(2*o)/2){case 0:case.5:this.set("marker-size","small");break;case 1:this.set("marker-size","medium");break;case 1.5:case 2:this.set("marker-size","large")}var a=t.getSrc();a&&this.set("marker-symbol",a),this.unset("circle-fill"),this.unset("circle-fill-opacity"),this.unset("circle-stroke"),this.unset("circle-stroke-width"),this.unset("circle-stroke-opacity"),this.unset("circle-radius")}else{var s=t.getFill();if(s){var l=s.getColor();if(Array.isArray(l)){var c="rgba(";c+=l[0]+",",c+=l[1]+",",c+=l[2]+",",l=c+=l[3]+")"}if(xt.isRGB(l)){var u=xt.rgbaToHex(l);this.set("circle-fill",u.hex),this.set("circle-fill-opacity",u.opacity)}else this.set("circle-fill",l),this.set("circle-fill-opacity",1)}var d=t.getStroke();if(d){var p=d.getColor();if(Array.isArray(p)){var h="rgba(";h+=p[0]+",",h+=p[1]+",",h+=p[2]+",",p=h+=p[3]+")"}if(xt.isRGB(p)){var g=xt.rgbaToHex(p);this.set("circle-stroke",g.hex),this.set("circle-stroke-opacity",g.opacity)}else this.set("circle-stroke",p),this.set("circle-stroke-opacity",1);this.set("circle-stroke-width",d.getWidth())}var f=t.getRadius();this.set("circle-radius",f)}}};var Xt={APPLY_CONVERT_GEOM_GPX:!0,DEFAULT_ICON:{src:Gt.lightOrange,anchor:[.5,1],scale:1},DEFAULT_CIRCLE:{radius:10,fill:{opacity:1,color:[0,0,0,1]},stroke:{width:1,opacity:1,color:[0,0,0,1]}},DEFAULT_STROKE:{width:5,opacity:1,color:[250,250,250,1]},DEFAULT_FILL:{opacity:1,color:[0,0,0,1]},DEFAULT_TEXT:{font:"16px sans",textAlign:"left",stroke:{color:[250,250,250,1],width:5,opactity:1},fill:{opacity:1,color:[0,0,0,1]}},getListTags:function(){return["type","fill","fill-opacity","stroke","stroke-opacity","stroke-width","circle-fill","circle-fill-opacity","circle-stroke","circle-stroke-opacity","circle-stroke-width","circle-radius","marker-symbol","marker-color","marker-size","label-fill","label-fill-opacity","label-stroke","label-stroke-width","label-stroke-opacity","label-font","label-textAlign"]},defineStyleFromProperties:function(e){var t=null,n={},r=null;if(e.get("marker-color")||e.get("marker-size")||e.get("marker-symbol")){(r={}).src=this.DEFAULT_ICON.src,r.anchor=this.DEFAULT_ICON.anchor;var i=e.get("marker-symbol");i&&-1!==i.search("data:image/png;base64")&&(r.src=i);var o=e.get("marker-color");xt.isHex(o)&&(r.color=xt.hexToRgba(o,1));var a=e.get("marker-size");if(a)switch(a){case"small":r.scale=.5;break;case"medium":r.scale=1;break;case"large":r.scale=1.5;break;default:r.scale=this.DEFAULT_ICON.scale}}var s=null;(e.get("stroke")||e.get("stroke-opacity")||e.get("stroke-width"))&&((s={}).color=xt.hexToRgba(e.get("stroke"),+e.get("stroke-opacity")||this.DEFAULT_STROKE.opacity),s.width=+e.get("stroke-width")||this.DEFAULT_STROKE.width);var l=null;(e.get("fill")||e.get("fill-opacity"))&&((l={}).color=xt.hexToRgba(e.get("fill"),+e.get("fill-opacity")||this.DEFAULT_FILL.opacity));var c=null,u=null,d=""!==e.get("name");d&&((e.get("label-fill")||e.get("label-fill-opacity"))&&((u={}).color=xt.hexToRgba(e.get("label-fill"),+e.get("label-fill-opacity")||this.DEFAULT_TEXT.fill.opacity)),(e.get("label-stroke")||e.get("label-stroke-opacity")||e.get("label-stroke-width"))&&((c={}).color=xt.hexToRgba(e.get("label-stroke"),+e.get("label-stroke-opacity")||this.DEFAULT_TEXT.stroke.opacity),c.width=+e.get("label-stroke-width")||this.DEFAULT_TEXT.stroke.width));var p=e.get("circle-radius")||this.DEFAULT_CIRCLE.radius,h=null;(e.get("circle-stroke")||e.get("circle-stroke-opacity")||e.get("circle-stroke-width"))&&((h={}).color=xt.hexToRgba(e.get("circle-stroke"),+e.get("circle-stroke-opacity")||this.DEFAULT_CIRCLE.stroke.opacity),h.width=+e.get("circle-stroke-width")||this.DEFAULT_CIRCLE.stroke.width);var g=null;if((e.get("circle-fill")||e.get("circle-fill-opacity"))&&((g={}).color=xt.hexToRgba(e.get("circle-fill"),+e.get("circle-fill-opacity")||this.DEFAULT_CIRCLE.fill.opacity)),e.getGeometry()){var f=e.getGeometry().getType();switch(f){case"Circle":case"Point":case"MultiPoint":var m=!1,y={};if(h&&(y.stroke=new(zt())(h)),g&&(y.fill=new(Bt())(g)),0!==Object.keys(y).length&&(m=!0,y.radius=+p,n.image=new(Dt())(y)),r&&(n.image=new(Ut())(r)),d){var v={};if(c&&(v.stroke=new(zt())(c)),u&&(v.fill=new(Bt())(u)),0!==Object.keys(v).length)v.text=e.get("name"),v.textAlign=e.get("label-textAlign")||this.DEFAULT_TEXT.textAlign,v.font=e.get("label-font")||this.DEFAULT_TEXT.font,n.text=new(qt())(Object.assign({},this.DEFAULT_TEXT,v));else if(r||m){var A=new(qt())(Object.assign({},this.DEFAULT_TEXT,{fill:new(Bt())(this.DEFAULT_TEXT.fill),stroke:new(zt())(this.DEFAULT_TEXT.stroke)}));if(A){var C=A.clone();C.setText(e.get("name")),n.text=C}}}break;case"Polygon":case"MultiPolygon":s&&(n.stroke=new(zt())(s)),l&&(n.fill=new(Bt())(l));break;case"LineString":case"MultiLineString":if(s&&(n.stroke=new(zt())(s)),this.APPLY_CONVERT_GEOM_GPX&&l){var b=e.get("type");if(b&&("Polygon"===b||"MultiPolygon"===b)){n.fill=new(Bt())(l);var I=e.clone(),_="LineString"===f?Wt():Zt();e.setGeometry(new _([I.getGeometry().getCoordinates()]))}}}}return 0!==Object.keys(n).length&&(t=new(Rt())(n)),t},defineStyleFunctionByDefault:function(e){if(!e)return[];if(0===Object.keys(e).length)return[];return function(t,n){if(t.getGeometry()){var r=null;switch(t.getGeometry().getType()){case"Point":case"MultiPoint":var i={};if(e.getImage()&&(i.image=e.getImage()),e.getText()&&t.get("name")){var o=e.getText().clone();o.setText(t.get("name")),i.text=o}r=new(Rt())(i);break;case"Circle":var a={},s={};if(e.getFill()&&(s.fill=e.getFill()),e.getStroke()&&(s.stroke=e.getStroke()),e.getText()&&t.get("name")){var l=e.getText().clone();l.setText(t.get("name")),a.text=l}0!==Object.keys(s).length&&(s.radius=3,a.image=new(Dt())(s)),r=new(Rt())(a);break;case"Polygon":case"MultiPolygon":var c={};e.getFill()&&(c.fill=e.getFill()),e.getStroke()&&(c.stroke=e.getStroke()),r=new(Rt())(c);break;case"LineString":case"LinearRing":case"MultiLineString":var u={};e.getStroke()&&(u.stroke=e.getStroke()),r=new(Rt())(u)}return[r]}}},definePropertiesFromStyleByType:function(e){if(e.getGeometry())switch(e.getGeometry().getType()){case"Point":case"MultiPoint":e.setPropertyMarker(),e.setPropertyLabel();break;case"LineString":case"MultiLineString":e.setPropertyStroke();break;case"Polygon":case"MultiPolygon":e.setPropertyStroke(),e.setPropertyFill()}},definePropertiesFromStyle:function(e){var t=e.getStyle()||e.getStyleFunction();if(t){if("function"==typeof t){var n=t.call(this,e,0);if(!n||0===n.length)return;t=Array.isArray(n)?n[0]:n,e.setStyle(t)}this.definePropertiesFromStyleByType(e)}},defineTagFromStyle:function(e,t){return Jt.trace("todo..."),null}};const Kt=Xt;function Qt(e){return Qt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Qt(e)}var $t=vt.getLogger("parser");const en={parse:function(e){var t=null,n="undefined"!=typeof window?window:null;"object"===("undefined"==typeof exports?"undefined":Qt(exports))&&null===window?t=(new(0,__webpack_require__(8978).S4)).parseFromString(e,"text/xml"):n.DOMParser?t=(new n.DOMParser).parseFromString(e,"text/xml"):n.ActiveXObject?((t=new n.ActiveXObject("Microsoft.XMLDOM")).async=!1,t.loadXML(e)):$t.log("Incompatible environment for DOM Parser !");var r=t.querySelector("parsererror");return r?(console.error(r),null):($t.trace(t),t)},toString:function(e){var t=(new XMLSerializer).serializeToString(e);return $t.trace(t),t},format:function(e){for(var t="",n=(e=e.replace(/(>)\s*(<)(\/*)/g,"$1\n$2$3").replace(/ *(.*) +\n/g,"$1\n").replace(/(<.+>)(.+\n)/g,"$1\n$2")).split("\n"),r=0,i="other",o={"single->single":0,"single->closing":-1,"single->opening":0,"single->other":0,"closing->single":0,"closing->closing":-1,"closing->opening":0,"closing->other":0,"opening->single":1,"opening->closing":0,"opening->opening":1,"opening->other":1,"other->single":0,"other->closing":-1,"other->opening":0,"other->other":0},a=0;a/)),c=Boolean(s.match(/<\/.+>/)),u=Boolean(s.match(/<[^!].*>/)),d=l?"single":c?"closing":u?"opening":"other",p=i+"->"+d;i=d;var h="";r+=o[p];for(var g=0;gclosing"===p?t=t.substr(0,t.length-1)+s+"\n":t+=h+s+"\n"}return $t.trace(t),t}};function tn(e){return tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},tn(e)}var nn={detectSupport:function(){var e=!0,t=window.navigator.userAgent.toLowerCase();return-1===t.indexOf("iphone")&&-1===t.indexOf("ipod")&&-1===t.indexOf("ipad")&&-1===t.indexOf("android")&&-1===t.indexOf("mobile")&&-1===t.indexOf("blackberry")&&-1===t.indexOf("tablet")&&-1===t.indexOf("phone")&&-1===t.indexOf("touch")||(e=!1),-1===t.indexOf("msie")&&-1===t.indexOf("trident")||(e=!0),e},assign:function(e,t){for(var n in e=e||{},t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e},mergeParams:function(e,t,n){if(void 0!==e&&void 0!==t)for(var r in void 0===n&&(n=!0),t)t.hasOwnProperty(r)&&("object"===tn(t[r])?e.hasOwnProperty(r)?this.mergeParams(e[r],t[r],n):e[r]=t[r]:e.hasOwnProperty(r)?n&&(e[r]=t[r]):e[r]=t[r])}};const rn=nn;function on(e){return on="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},on(e)}function an(e,t){for(var n=0;n)\s*(<)/g,"$1$2"),null===(r=en.parse(o)))return i;function a(e){var t="";t+=e.substr(6,2),t+=e.substr(4,2),t+=e.substr(2,2);for(var n=parseInt(t,16).toString(16),r="",i=n.length||0,o=0;o<6-i;o++)r+="0";return n="#"+r+n}var s=function(e,t){if(gn.trace("label with style :",t),e){for(var n=e.getProperties().name,r=a("ff000000"),i="#FFFFFF",o=0,s="Sans",l="16px",c=null,u=5,d="#000000",p="#ffffff",h=1,g=!1,f=!1,m=t.childNodes,y=0;yt&&(r=!1),r&&p&&p1?(n=i,r=o):l>0&&(n+=a*l,r+=s*l)}return function(e,t,n,r){const i=n-e,o=r-t;return i*i+o*o}(e,t,n,r)}function Gi(e,t,n,r,i,o,a){const s=(n-t)/r;if(s<3){for(;t0;){const n=c.pop(),o=c.pop();let a=0;const s=e[o],d=e[o+1],p=e[n],h=e[n+1];for(let t=o+r;ta&&(u=t,a=n)}a>i&&(l[(u-t)/r]=1,o+r0&&g>p)&&(h<0&&f0&&f>h)?(s=n,l=d):(o[a++]=s,o[a++]=l,c=s,u=l,s=n,l=d)}return o[a++]=s,o[a++]=l,a}function Ri(e,t,n,r,i,o,a,s){for(let l=0,c=n.length;lt?1:eo&&(n-s)*(o-l)-(i-s)*(r-l)>0&&a++:r<=o&&(n-s)*(o-l)-(i-s)*(r-l)<0&&a--,s=n,l=r}return 0!==a}function Ui(e,t,n,r,i,o){if(0===n.length)return!1;if(!Ni(e,t,n[0],r,i,o))return!1;for(let t=1,a=n.length;ty&&(c=(u+d)/2,Ui(e,t,n,r,c,g)&&(m=c,y=i)),u=d}return isNaN(m)&&(m=i[o]),a?(a.push(m,g,y),a):[m,g,y]}const Bi={radians:6370997/(2*Math.PI),degrees:2*Math.PI*6370997/360,ft:.3048,m:1,"us-ft":1200/3937};const Fi=class{constructor(e){this.code_=e.code,this.units_=e.units,this.extent_=void 0!==e.extent?e.extent:null,this.worldExtent_=void 0!==e.worldExtent?e.worldExtent:null,this.axisOrientation_=void 0!==e.axisOrientation?e.axisOrientation:"enu",this.global_=void 0!==e.global&&e.global,this.canWrapX_=!(!this.global_||!this.extent_),this.getPointResolutionFunc_=e.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=e.metersPerUnit}canWrapX(){return this.canWrapX_}getCode(){return this.code_}getExtent(){return this.extent_}getUnits(){return this.units_}getMetersPerUnit(){return this.metersPerUnit_||Bi[this.units_]}getWorldExtent(){return this.worldExtent_}getAxisOrientation(){return this.axisOrientation_}isGlobal(){return this.global_}setGlobal(e){this.global_=e,this.canWrapX_=!(!e||!this.extent_)}getDefaultTileGrid(){return this.defaultTileGrid_}setDefaultTileGrid(e){this.defaultTileGrid_=e}setExtent(e){this.extent_=e,this.canWrapX_=!(!this.global_||!e)}setWorldExtent(e){this.worldExtent_=e}setGetPointResolution(e){this.getPointResolutionFunc_=e}getPointResolutionFunc(){return this.getPointResolutionFunc_}},zi=6378137,Vi=Math.PI*zi,qi=[-Vi,-Vi,Vi,Vi],Hi=[-180,-85,180,85],Wi=zi*Math.log(Math.tan(Math.PI/2));class Yi extends Fi{constructor(e){super({code:e,units:"m",extent:qi,global:!0,worldExtent:Hi,getPointResolution:function(e,t){return e/Math.cosh(t[1]/zi)}})}}const Zi=[new Yi("EPSG:3857"),new Yi("EPSG:102100"),new Yi("EPSG:102113"),new Yi("EPSG:900913"),new Yi("http://www.opengis.net/def/crs/EPSG/0/3857"),new Yi("http://www.opengis.net/gml/srs/epsg.xml#3857")];function Ji(e,t,n,r){const i=e.length;n=n>1?n:2,r=r??n,void 0===t&&(t=n>2?e.slice():new Array(i));for(let n=0;nWi?r=Wi:r<-Wi&&(r=-Wi),t[n+1]=r}return t}function Xi(e,t,n,r){const i=e.length;n=n>1?n:2,r=r??n,void 0===t&&(t=n>2?e.slice():new Array(i));for(let n=0;n32700&&t<32761?n=t-32700:t>32600&&t<32661&&(r=!0,n=t-32600),n?{number:n,north:r}:null}const so=[function(e){return ao(e)?new Fi({code:e,units:"m"}):null}];function lo(e,t){if(void 0!==t)for(let n=0,r=e.length;n0}function yo(e,t,n,r,i,o,a){let s,l;const c=(n-t)/r;if(1===c)s=t;else if(2===c)s=t,l=i;else if(0!==c){let o=e[t],a=e[t+1],c=0;const u=[0];for(let i=t+r;i>1),i=+n(e[r],t),i<0?o=r+1:(a=r,s=!i);return s?o:~o}(u,d);p<0?(l=(d-u[-p-2])/(u[-p-1]-u[-p-2]),s=t+(-p-2)*r):s=t+p*r}a=a>1?a:2,o=o||new Array(a);for(let t=0;t{if(e===this.squaredTolerance_)return this.simplifiedGeometry_;this.simplifiedGeometry_=this.clone(),t&&this.simplifiedGeometry_.applyTransform(t);const n=this.simplifiedGeometry_.getFlatCoordinates();let r;switch(this.type_){case"LineString":n.length=Gi(n,0,this.simplifiedGeometry_.flatCoordinates_.length,this.simplifiedGeometry_.stride_,e,n,0),r=[n.length];break;case"MultiLineString":r=[],n.length=Li(n,0,this.simplifiedGeometry_.ends_,this.simplifiedGeometry_.stride_,e,n,0,r);break;case"Polygon":r=[],n.length=Ri(n,0,this.simplifiedGeometry_.ends_,this.simplifiedGeometry_.stride_,Math.sqrt(e),n,0,r)}return r&&(this.simplifiedGeometry_=new Ao(this.type_,n,r,2,this.properties_,this.id_)),this.squaredTolerance_=e,this.simplifiedGeometry_})),this}}Ao.prototype.getFlatCoordinates=Ao.prototype.getOrientedFlatCoordinates;const Co=Ao,bo=ol.functions,Io=ol.render.canvas,_o=ol.TileState,Eo=ol.util,wo=(ol.layer.Image,ol.layer.Layer,ol.layer.Group,ol.Map,ol.source.Raster,ol.source.Source,ol.tilegrid.TileGrid),Po=(ol.View,ol.proj.Units);ol.events.Event;function So(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Mo,xo={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],rebeccapurple:[102,51,153,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function Go(e){return(e=Math.round(e))<0?0:e>255?255:e}function Lo(e){return e<0?0:e>1?1:e}function ko(e){return"%"===e[e.length-1]?Go(parseFloat(e)/100*255):Go(parseInt(e))}function To(e){return"%"===e[e.length-1]?Lo(parseFloat(e)/100):Lo(parseFloat(e))}function Ro(e,t,n){return n<0?n+=1:n>1&&(n-=1),6*n<1?e+(t-e)*n*6:2*n<1?t:3*n<2?e+(t-e)*(2/3-n)*6:e}try{Mo={}.parseCSSColor=function(e){var t,n=e.replace(/ /g,"").toLowerCase();if(n in xo)return xo[n].slice();if("#"===n[0])return 4===n.length?(t=parseInt(n.substr(1),16))>=0&&t<=4095?[(3840&t)>>4|(3840&t)>>8,240&t|(240&t)>>4,15&t|(15&t)<<4,1]:null:7===n.length&&(t=parseInt(n.substr(1),16))>=0&&t<=16777215?[(16711680&t)>>16,(65280&t)>>8,255&t,1]:null;var r=n.indexOf("("),i=n.indexOf(")");if(-1!==r&&i+1===n.length){var o=n.substr(0,r),a=n.substr(r+1,i-(r+1)).split(","),s=1;switch(o){case"rgba":if(4!==a.length)return null;s=To(a.pop());case"rgb":return 3!==a.length?null:[ko(a[0]),ko(a[1]),ko(a[2]),s];case"hsla":if(4!==a.length)return null;s=To(a.pop());case"hsl":if(3!==a.length)return null;var l=(parseFloat(a[0])%360+360)%360/360,c=To(a[1]),u=To(a[2]),d=u<=.5?u*(c+1):u+c-u*c,p=2*u-d;return[Go(255*Ro(p,d,l+1/3)),Go(255*Ro(p,d,l)),Go(255*Ro(p,d,l-1/3)),s];default:return null}}return null}}catch(sb){}class Oo{constructor(e,t,n,r=1){this.r=e,this.g=t,this.b=n,this.a=r}static parse(e){if(!e)return;if(e instanceof Oo)return e;if("string"!=typeof e)return;const t=Mo(e);return t?new Oo(t[0]/255*t[3],t[1]/255*t[3],t[2]/255*t[3],t[3]):void 0}toString(){const[e,t,n,r]=this.toArray();return`rgba(${Math.round(e)},${Math.round(t)},${Math.round(n)},${r})`}toArray(){const{r:e,g:t,b:n,a:r}=this;return 0===r?[0,0,0,0]:[255*e/r,255*t/r,255*n/r,r]}toArray01(){const{r:e,g:t,b:n,a:r}=this;return 0===r?[0,0,0,0]:[e/r,t/r,n/r,r]}toArray01PremultipliedAlpha(){const{r:e,g:t,b:n,a:r}=this;return[e,t,n,r]}}Oo.black=new Oo(0,0,0,1),Oo.white=new Oo(1,1,1,1),Oo.transparent=new Oo(0,0,0,0),Oo.red=new Oo(1,0,0,1),Oo.blue=new Oo(0,0,1,1);var Do=Oo;function No(e){return"object"==typeof e?["literal",e]:e}function Uo(e,t){let n=e.stops;if(!n)return function(e,t){const n=["get",e.property];if(void 0===e.default)return"string"===t.type?["string",n]:n;if("enum"===t.type)return["match",n,Object.keys(t.values),n,e.default];{const r=["color"===t.type?"to-color":t.type,n,No(e.default)];return"array"===t.type&&r.splice(1,0,t.value,t.length||null),r}}(e,t);const r=n&&"object"==typeof n[0][0],i=r||void 0!==e.property,o=r||!i;return n=n.map((e=>!i&&t.tokens&&"string"==typeof e[1]?[e[0],Ho(e[1])]:[e[0],No(e[1])])),r?function(e,t,n){const r={},i={},o=[];for(let t=0;t3&&t===e[e.length-2]||(r&&2===e.length||e.push(t),e.push(n))}function qo(e,t){return e.type?e.type:t.expression.interpolated?"exponential":"interval"}function Ho(e){const t=["concat"],n=/{([^{}]+)}/g;let r=0;for(let i=n.exec(e);null!==i;i=n.exec(e)){const o=e.slice(r,n.lastIndex-i[0].length);r=n.lastIndex,o.length>0&&t.push(o),t.push(["get",i[1]])}if(1===t.length)return e;if(r`:"value"===e.itemType.kind?"array":`array<${t}>`}return e.kind}const la=[Xo,Ko,Qo,$o,ea,ia,ta,aa(na),oa];function ca(e,t){if("error"===t.kind)return null;if("array"===e.kind){if("array"===t.kind&&(0===t.N&&"value"===t.itemType.kind||!ca(e.itemType,t.itemType))&&("number"!=typeof e.N||e.N===t.N))return null}else{if(e.kind===t.kind)return null;if("value"===e.kind)for(const e of la)if(!ca(e,t))return null}return`Expected ${sa(e)} but found ${sa(t)} instead.`}function ua(e,t){return t.some((t=>t.kind===e.kind))}function da(e,t){return t.some((t=>"null"===t?null===e:"array"===t?Array.isArray(e):"object"===t?e&&!Array.isArray(e)&&"object"==typeof e:t===typeof e))}class pa{constructor(e,t,n){this.sensitivity=e?t?"variant":"case":t?"accent":"base",this.locale=n,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:"search"})}compare(e,t){return this.collator.compare(e,t)}resolvedLocale(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale}}class ha{constructor(e,t,n,r,i){this.text=e.normalize?e.normalize():e,this.image=t,this.scale=n,this.fontStack=r,this.textColor=i}}class ga{constructor(e){this.sections=e}static fromString(e){return new ga([new ha(e,null,null,null,null)])}isEmpty(){return 0===this.sections.length||!this.sections.some((e=>0!==e.text.length||e.image&&0!==e.image.name.length))}static factory(e){return e instanceof ga?e:ga.fromString(e)}toString(){return 0===this.sections.length?"":this.sections.map((e=>e.text)).join("")}serialize(){const e=["format"];for(const t of this.sections){if(t.image){e.push(["image",t.image.name]);continue}e.push(t.text);const n={};t.fontStack&&(n["text-font"]=["literal",t.fontStack.split(",")]),t.scale&&(n["font-scale"]=t.scale),t.textColor&&(n["text-color"]=["rgba"].concat(t.textColor.toArray())),e.push(n)}return e}}class fa{constructor(e){this.name=e.name,this.available=e.available}toString(){return this.name}static fromString(e){return e?new fa({name:e,available:!1}):null}serialize(){return["image",this.name]}}function ma(e,t,n,r){if(!("number"==typeof e&&e>=0&&e<=255&&"number"==typeof t&&t>=0&&t<=255&&"number"==typeof n&&n>=0&&n<=255)){return`Invalid rgba value [${("number"==typeof r?[e,t,n,r]:[e,t,n]).join(", ")}]: 'r', 'g', and 'b' must be between 0 and 255.`}return void 0===r||"number"==typeof r&&r>=0&&r<=1?null:`Invalid rgba value [${[e,t,n,r].join(", ")}]: 'a' must be between 0 and 1.`}function ya(e){if(null===e)return!0;if("string"==typeof e)return!0;if("boolean"==typeof e)return!0;if("number"==typeof e)return!0;if(e instanceof Do)return!0;if(e instanceof pa)return!0;if(e instanceof ga)return!0;if(e instanceof fa)return!0;if(Array.isArray(e)){for(const t of e)if(!ya(t))return!1;return!0}if("object"==typeof e){for(const t in e)if(!ya(e[t]))return!1;return!0}return!1}function va(e){if(null===e)return Xo;if("string"==typeof e)return Qo;if("boolean"==typeof e)return $o;if("number"==typeof e)return Ko;if(e instanceof Do)return ea;if(e instanceof pa)return ra;if(e instanceof ga)return ia;if(e instanceof fa)return oa;if(Array.isArray(e)){const t=e.length;let n;for(const t of e){const e=va(t);if(n){if(n===e)continue;n=na;break}n=e}return aa(n||na,t)}return ta}function Aa(e){const t=typeof e;return null===e?"":"string"===t||"number"===t||"boolean"===t?String(e):e instanceof Do||e instanceof ga||e instanceof fa?e.toString():JSON.stringify(e)}class Ca{constructor(e,t){this.type=e,this.value=t}static parse(e,t){if(2!==e.length)return t.error(`'literal' expression requires exactly one argument, but found ${e.length-1} instead.`);if(!ya(e[1]))return t.error("invalid value");const n=e[1];let r=va(n);const i=t.expectedType;return"array"!==r.kind||0!==r.N||!i||"array"!==i.kind||"number"==typeof i.N&&0!==i.N||(r=i),new Ca(r,n)}evaluate(){return this.value}eachChild(){}outputDefined(){return!0}serialize(){return"array"===this.type.kind||"object"===this.type.kind?["literal",this.value]:this.value instanceof Do?["rgba"].concat(this.value.toArray()):this.value instanceof ga?this.value.serialize():this.value}}var ba=Ca;var Ia=class{constructor(e){this.name="ExpressionEvaluationError",this.message=e}toJSON(){return this.message}};const _a={string:Qo,number:Ko,boolean:$o,object:ta};class Ea{constructor(e,t){this.type=e,this.args=t}static parse(e,t){if(e.length<2)return t.error("Expected at least one argument.");let n,r=1;const i=e[0];if("array"===i){let i,o;if(e.length>2){const n=e[1];if("string"!=typeof n||!(n in _a)||"object"===n)return t.error('The item type argument of "array" must be one of string, number, boolean',1);i=_a[n],r++}else i=na;if(e.length>3){if(null!==e[2]&&("number"!=typeof e[2]||e[2]<0||e[2]!==Math.floor(e[2])))return t.error('The length argument to "array" must be a positive integer literal',2);o=e[2],r++}n=aa(i,o)}else n=_a[i];const o=[];for(;re.outputDefined()))}serialize(){const e=this.type,t=[e.kind];if("array"===e.kind){const n=e.itemType;if("string"===n.kind||"number"===n.kind||"boolean"===n.kind){t.push(n.kind);const r=e.N;("number"==typeof r||this.args.length>1)&&t.push(r)}}return t.concat(this.args.map((e=>e.serialize())))}}var wa=Ea;class Pa{constructor(e){this.type=ia,this.sections=e}static parse(e,t){if(e.length<2)return t.error("Expected at least one argument.");const n=e[1];if(!Array.isArray(n)&&"object"==typeof n)return t.error("First argument must be an image or text section.");const r=[];let i=!1;for(let n=1;n<=e.length-1;++n){const o=e[n];if(i&&"object"==typeof o&&!Array.isArray(o)){i=!1;let e=null;if(o["font-scale"]&&(e=t.parse(o["font-scale"],1,Ko),!e))return null;let n=null;if(o["text-font"]&&(n=t.parse(o["text-font"],1,aa(Qo)),!n))return null;let a=null;if(o["text-color"]&&(a=t.parse(o["text-color"],1,ea),!a))return null;const s=r[r.length-1];s.scale=e,s.font=n,s.textColor=a}else{const o=t.parse(e[n],1,na);if(!o)return null;const a=o.type.kind;if("string"!==a&&"value"!==a&&"null"!==a&&"resolvedImage"!==a)return t.error("Formatted text type must be 'string', 'value', 'image' or 'null'.");i=!0,r.push({content:o,scale:null,font:null,textColor:null})}}return new Pa(r)}evaluate(e){return new ga(this.sections.map((t=>{const n=t.content.evaluate(e);return va(n)===oa?new ha("",n,null,null,null):new ha(Aa(n),null,t.scale?t.scale.evaluate(e):null,t.font?t.font.evaluate(e).join(","):null,t.textColor?t.textColor.evaluate(e):null)})))}eachChild(e){for(const t of this.sections)e(t.content),t.scale&&e(t.scale),t.font&&e(t.font),t.textColor&&e(t.textColor)}outputDefined(){return!1}serialize(){const e=["format"];for(const t of this.sections){e.push(t.content.serialize());const n={};t.scale&&(n["font-scale"]=t.scale.serialize()),t.font&&(n["text-font"]=t.font.serialize()),t.textColor&&(n["text-color"]=t.textColor.serialize()),e.push(n)}return e}}class Sa{constructor(e){this.type=oa,this.input=e}static parse(e,t){if(2!==e.length)return t.error("Expected two arguments.");const n=t.parse(e[1],1,Qo);return n?new Sa(n):t.error("No image name provided.")}evaluate(e){const t=this.input.evaluate(e),n=fa.fromString(t);return n&&e.availableImages&&(n.available=e.availableImages.indexOf(t)>-1),n}eachChild(e){e(this.input)}outputDefined(){return!1}serialize(){return["image",this.input.serialize()]}}const Ma={"to-boolean":$o,"to-color":ea,"to-number":Ko,"to-string":Qo};class xa{constructor(e,t){this.type=e,this.args=t}static parse(e,t){if(e.length<2)return t.error("Expected at least one argument.");const n=e[0];if(("to-boolean"===n||"to-string"===n)&&2!==e.length)return t.error("Expected one argument.");const r=Ma[n],i=[];for(let n=1;n4?`Invalid rbga value ${JSON.stringify(t)}: expected an array containing either three or four numeric values.`:ma(t[0],t[1],t[2],t[3]),!n))return new Do(t[0]/255,t[1]/255,t[2]/255,t[3])}throw new Ia(n||`Could not parse color from value '${"string"==typeof t?t:String(JSON.stringify(t))}'`)}if("number"===this.type.kind){let t=null;for(const n of this.args){if(t=n.evaluate(e),null===t)return 0;const r=Number(t);if(!isNaN(r))return r}throw new Ia(`Could not convert ${JSON.stringify(t)} to number.`)}return"formatted"===this.type.kind?ga.fromString(Aa(this.args[0].evaluate(e))):"resolvedImage"===this.type.kind?fa.fromString(Aa(this.args[0].evaluate(e))):Aa(this.args[0].evaluate(e))}eachChild(e){this.args.forEach(e)}outputDefined(){return this.args.every((e=>e.outputDefined()))}serialize(){if("formatted"===this.type.kind)return new Pa([{content:this.args[0],scale:null,font:null,textColor:null}]).serialize();if("resolvedImage"===this.type.kind)return new Sa(this.args[0]).serialize();const e=[`to-${this.type.kind}`];return this.eachChild((t=>{e.push(t.serialize())})),e}}var Ga=xa;const La=["Unknown","Point","LineString","Polygon"];var ka=class{constructor(){this.globals=null,this.feature=null,this.featureState=null,this.formattedSection=null,this._parseColorCache={},this.availableImages=null,this.canonical=null,this.featureTileCoord=null,this.featureDistanceData=null}id(){return this.feature&&void 0!==this.feature.id?this.feature.id:null}geometryType(){return this.feature?"number"==typeof this.feature.type?La[this.feature.type]:this.feature.type:null}geometry(){return this.feature&&"geometry"in this.feature?this.feature.geometry:null}canonicalID(){return this.canonical}properties(){return this.feature&&this.feature.properties||{}}distanceFromCenter(){if(this.featureTileCoord&&this.featureDistanceData){const e=this.featureDistanceData.center,t=this.featureDistanceData.scale,{x:n,y:r}=this.featureTileCoord,i=n*t-e[0],o=r*t-e[1];return this.featureDistanceData.bearing[0]*i+this.featureDistanceData.bearing[1]*o}return 0}parseColor(e){let t=this._parseColorCache[e];return t||(t=this._parseColorCache[e]=Do.parse(e)),t}};class Ta{constructor(e,t,n,r){this.name=e,this.type=t,this._evaluate=n,this.args=r}evaluate(e){return this._evaluate(e,this.args)}eachChild(e){this.args.forEach(e)}outputDefined(){return!1}serialize(){return[this.name].concat(this.args.map((e=>e.serialize())))}static parse(e,t){const n=e[0],r=Ta.definitions[n];if(!r)return t.error(`Unknown expression "${n}". If you wanted a literal array, use ["literal", [...]].`,0);const i=Array.isArray(r)?r[0]:r.type,o=Array.isArray(r)?[[r[1],r[2]]]:r.overloads,a=o.filter((([t])=>!Array.isArray(t)||t.length===e.length-1));let s=null;for(const[r,o]of a){s=new ss(t.registry,t.path,null,t.scope);const a=[];let l=!1;for(let t=1;t{return t=e,Array.isArray(t)?`(${t.map(sa).join(", ")})`:`(${sa(t.type)}...)`;var t})).join(" | "),r=[];for(let n=1;n=t[2])&&(!(e[1]<=t[1])&&!(e[3]>=t[3])))}function ja(e,t){const n=(180+e[0])/360;const r=(i=e[1],(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+i*Math.PI/360)))/360);var i;const o=Math.pow(2,t.z);return[Math.round(n*o*Da),Math.round(r*o*Da)]}function Ba(e,t,n){const r=e[0]-t[0],i=e[1]-t[1],o=e[0]-n[0],a=e[1]-n[1];return r*a-o*i==0&&r*o<=0&&i*a<=0}function Fa(e,t){let n=!1;for(let a=0,s=t.length;ar[1]!=o[1]>r[1]&&r[0]<(o[0]-i[0])*(r[1]-i[1])/(o[1]-i[1])+i[0]&&(n=!n)}}var r,i,o;return n}function za(e,t){for(let n=0;n0&&d<0||u<0&&d>0}function qa(e,t,n,r){const i=[t[0]-e[0],t[1]-e[1]],o=[r[0]-n[0],r[1]-n[1]];return 0!=(a=o)[0]*(s=i)[1]-a[1]*s[0]&&!(!Va(e,t,n,r)||!Va(n,r,e,t));var a,s}function Ha(e,t,n){for(const r of n)for(let n=0;nn[2]){const t=.5*r;let i=e[0]-n[0]>t?-r:n[0]-e[0]>t?r:0;0===i&&(i=e[0]-n[2]>t?-r:n[2]-e[0]>t?r:0),e[0]+=i}Na(t,e)}function Ka(e,t,n,r){const i=Math.pow(2,r.z)*Da,o=[r.x*Da,r.y*Da],a=[];if(!e)return a;for(const r of e)for(const e of r){const r=[e.x+o[0],e.y+o[1]];Xa(r,t,n,i),a.push(r)}return a}function Qa(e,t,n,r){const i=Math.pow(2,r.z)*Da,o=[r.x*Da,r.y*Da],a=[];if(!e)return a;for(const n of e){const e=[];for(const r of n){const n=[r.x+o[0],r.y+o[1]];Na(t,n),e.push(n)}a.push(e)}if(t[2]-t[0]<=i/2){!function(e){e[0]=e[1]=1/0,e[2]=e[3]=-1/0}(t);for(const e of a)for(const r of e)Xa(r,t,n,i)}return a}class $a{constructor(e,t){this.type=$o,this.geojson=e,this.geometries=t}static parse(e,t){if(2!==e.length)return t.error(`'within' expression requires exactly one argument, but found ${e.length-1} instead.`);if(ya(e[1])){const t=e[1];if("FeatureCollection"===t.type)for(let e=0;e{t&&!ts(e)&&(t=!1)})),t}function ns(e){if(e instanceof Ra&&"feature-state"===e.name)return!1;let t=!0;return e.eachChild((e=>{t&&!ns(e)&&(t=!1)})),t}function rs(e,t){if(e instanceof Ra&&t.indexOf(e.name)>=0)return!1;let n=!0;return e.eachChild((e=>{n&&!rs(e,t)&&(n=!1)})),n}class is{constructor(e,t){this.type=t.type,this.name=e,this.boundExpression=t}static parse(e,t){if(2!==e.length||"string"!=typeof e[1])return t.error("'var' expression requires exactly one string literal argument.");const n=e[1];return t.scope.has(n)?new is(n,t.scope.get(n)):t.error(`Unknown variable "${n}". Make sure "${n}" has been bound in an enclosing "let" expression before using it.`,1)}evaluate(e){return this.boundExpression.evaluate(e)}eachChild(){}outputDefined(){return!1}serialize(){return["var",this.name]}}var os=is;class as{constructor(e,t=[],n,r=new Jo,i=[]){this.registry=e,this.path=t,this.key=t.map((e=>`[${e}]`)).join(""),this.scope=r,this.errors=i,this.expectedType=n}parse(e,t,n,r,i={}){return t?this.concat(t,n,r)._parse(e,i):this._parse(e,i)}_parse(e,t){function n(e,t,n){return"assert"===n?new wa(t,[e]):"coerce"===n?new Ga(t,[e]):e}if(null!==e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e||(e=["literal",e]),Array.isArray(e)){if(0===e.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].');const r=e[0];if("string"!=typeof r)return this.error(`Expression name must be a string, but found ${typeof r} instead. If you wanted a literal array, use ["literal", [...]].`,0),null;const i=this.registry[r];if(i){let r=i.parse(e,this);if(!r)return null;if(this.expectedType){const e=this.expectedType,i=r.type;if("string"!==e.kind&&"number"!==e.kind&&"boolean"!==e.kind&&"object"!==e.kind&&"array"!==e.kind||"value"!==i.kind)if("color"!==e.kind&&"formatted"!==e.kind&&"resolvedImage"!==e.kind||"value"!==i.kind&&"string"!==i.kind){if(this.checkSubtype(e,i))return null}else r=n(r,e,t.typeAnnotation||"coerce");else r=n(r,e,t.typeAnnotation||"assert")}if(!(r instanceof ba)&&"resolvedImage"!==r.type.kind&&ls(r)){const e=new ka;try{r=new ba(r.type,r.evaluate(e))}catch(e){return this.error(e.message),null}}return r}return this.error(`Unknown expression "${r}". If you wanted a literal array, use ["literal", [...]].`,0)}return void 0===e?this.error("'undefined' value invalid. Use null instead."):"object"==typeof e?this.error('Bare objects invalid. Use ["literal", {...}] instead.'):this.error(`Expected an array, but found ${typeof e} instead.`)}concat(e,t,n){const r="number"==typeof e?this.path.concat(e):this.path,i=n?this.scope.concat(n):this.scope;return new as(this.registry,r,t||null,i,this.errors)}error(e,...t){const n=`${this.key}${t.map((e=>`[${e}]`)).join("")}`;this.errors.push(new Yo(n,e))}checkSubtype(e,t){const n=ca(e,t);return n&&this.error(n),n}}var ss=as;function ls(e){if(e instanceof os)return ls(e.boundExpression);if(e instanceof Ra&&"error"===e.name)return!1;if(e instanceof Oa)return!1;if(e instanceof es)return!1;const t=e instanceof Ga||e instanceof wa;let n=!0;return e.eachChild((e=>{n=t?n&&ls(e):n&&e instanceof ba})),!!n&&(ts(e)&&rs(e,["zoom","heatmap-density","line-progress","sky-radial-progress","accumulated","is-supported-script","pitch","distance-from-center"]))}function cs(e,t){const n=e.length-1;let r,i,o=0,a=n,s=0;for(;o<=a;)if(s=Math.floor((o+a)/2),r=e[s],i=e[s+1],r<=t){if(s===n||tt))throw new Ia("Input is not a number.");a=s-1}return 0}class us{constructor(e,t,n){this.type=e,this.input=t,this.labels=[],this.outputs=[];for(const[e,t]of n)this.labels.push(e),this.outputs.push(t)}static parse(e,t){if(e.length-1<4)return t.error(`Expected at least 4 arguments, but found only ${e.length-1}.`);if((e.length-1)%2!=0)return t.error("Expected an even number of arguments.");const n=t.parse(e[1],1,Ko);if(!n)return null;const r=[];let i=null;t.expectedType&&"value"!==t.expectedType.kind&&(i=t.expectedType);for(let n=1;n=o)return t.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.',s);const c=t.parse(a,l,i);if(!c)return null;i=i||c.type,r.push([o,c])}return new us(i,n,r)}evaluate(e){const t=this.labels,n=this.outputs;if(1===t.length)return n[0].evaluate(e);const r=this.input.evaluate(e);if(r<=t[0])return n[0].evaluate(e);const i=t.length;if(r>=t[i-1])return n[i-1].evaluate(e);return n[cs(t,r)].evaluate(e)}eachChild(e){e(this.input);for(const t of this.outputs)e(t)}outputDefined(){return this.outputs.every((e=>e.outputDefined()))}serialize(){const e=["step",this.input.serialize()];for(let t=0;t0&&e.push(this.labels[t]),e.push(this.outputs[t].serialize());return e}}var ds=us,ps=hs;function hs(e,t,n,r){this.cx=3*e,this.bx=3*(n-e)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*t,this.by=3*(r-t)-this.cy,this.ay=1-this.cy-this.by,this.p1x=e,this.p1y=r,this.p2x=n,this.p2y=r}hs.prototype.sampleCurveX=function(e){return((this.ax*e+this.bx)*e+this.cx)*e},hs.prototype.sampleCurveY=function(e){return((this.ay*e+this.by)*e+this.cy)*e},hs.prototype.sampleCurveDerivativeX=function(e){return(3*this.ax*e+2*this.bx)*e+this.cx},hs.prototype.solveCurveX=function(e,t){var n,r,i,o,a;for(void 0===t&&(t=1e-6),i=e,a=0;a<8;a++){if(o=this.sampleCurveX(i)-e,Math.abs(o)(r=1))return r;for(;no?n=i:r=i,i=.5*(r-n)+n}return i},hs.prototype.solve=function(e,t){return this.sampleCurveY(this.solveCurveX(e,t))};var gs=So(ps);function fs(e,t,n){return e*(1-n)+t*n}var ms=Object.freeze({__proto__:null,number:fs,color:function(e,t,n){return new Do(fs(e.r,t.r,n),fs(e.g,t.g,n),fs(e.b,t.b,n),fs(e.a,t.a,n))},array:function(e,t,n){return e.map(((e,r)=>fs(e,t[r],n)))}});const ys=.95047,vs=1.08883,As=4/29,Cs=6/29,bs=3*Cs*Cs,Is=Cs*Cs*Cs,_s=Math.PI/180,Es=180/Math.PI;function ws(e){return e>Is?Math.pow(e,1/3):e/bs+As}function Ps(e){return e>Cs?e*e*e:bs*(e-As)}function Ss(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function Ms(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function xs(e){const t=Ms(e.r),n=Ms(e.g),r=Ms(e.b),i=ws((.4124564*t+.3575761*n+.1804375*r)/ys),o=ws((.2126729*t+.7151522*n+.072175*r)/1);return{l:116*o-16,a:500*(i-o),b:200*(o-ws((.0193339*t+.119192*n+.9503041*r)/vs)),alpha:e.a}}function Gs(e){let t=(e.l+16)/116,n=isNaN(e.a)?t:t+e.a/500,r=isNaN(e.b)?t:t-e.b/200;return t=1*Ps(t),n=ys*Ps(n),r=vs*Ps(r),new Do(Ss(3.2404542*n-1.5371385*t-.4985314*r),Ss(-.969266*n+1.8760108*t+.041556*r),Ss(.0556434*n-.2040259*t+1.0572252*r),e.alpha)}function Ls(e,t,n){const r=t-e;return e+n*(r>180||r<-180?r-360*Math.round(r/360):r)}const ks={forward:xs,reverse:Gs,interpolate:function(e,t,n){return{l:fs(e.l,t.l,n),a:fs(e.a,t.a,n),b:fs(e.b,t.b,n),alpha:fs(e.alpha,t.alpha,n)}}},Ts={forward:function(e){const{l:t,a:n,b:r}=xs(e),i=Math.atan2(r,n)*Es;return{h:i<0?i+360:i,c:Math.sqrt(n*n+r*r),l:t,alpha:e.a}},reverse:function(e){const t=e.h*_s,n=e.c;return Gs({l:e.l,a:Math.cos(t)*n,b:Math.sin(t)*n,alpha:e.alpha})},interpolate:function(e,t,n){return{h:Ls(e.h,t.h,n),c:fs(e.c,t.c,n),l:fs(e.l,t.l,n),alpha:fs(e.alpha,t.alpha,n)}}};class Rs{constructor(e,t,n,r,i){this.type=e,this.operator=t,this.interpolation=n,this.input=r,this.labels=[],this.outputs=[];for(const[e,t]of i)this.labels.push(e),this.outputs.push(t)}static interpolationFactor(e,t,n,r){let i=0;if("exponential"===e.name)i=Os(t,e.base,n,r);else if("linear"===e.name)i=Os(t,1,n,r);else if("cubic-bezier"===e.name){const o=e.controlPoints;i=new gs(o[0],o[1],o[2],o[3]).solve(Os(t,1,n,r))}return i}static parse(e,t){let[n,r,i,...o]=e;if(!Array.isArray(r)||0===r.length)return t.error("Expected an interpolation type expression.",1);if("linear"===r[0])r={name:"linear"};else if("exponential"===r[0]){const e=r[1];if("number"!=typeof e)return t.error("Exponential interpolation requires a numeric base.",1,1);r={name:"exponential",base:e}}else{if("cubic-bezier"!==r[0])return t.error(`Unknown interpolation type ${String(r[0])}`,1,0);{const e=r.slice(1);if(4!==e.length||e.some((e=>"number"!=typeof e||e<0||e>1)))return t.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.",1);r={name:"cubic-bezier",controlPoints:e}}}if(e.length-1<4)return t.error(`Expected at least 4 arguments, but found only ${e.length-1}.`);if((e.length-1)%2!=0)return t.error("Expected an even number of arguments.");if(i=t.parse(i,2,Ko),!i)return null;const a=[];let s=null;"interpolate-hcl"===n||"interpolate-lab"===n?s=ea:t.expectedType&&"value"!==t.expectedType.kind&&(s=t.expectedType);for(let e=0;e=n)return t.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.',i);const c=t.parse(r,l,s);if(!c)return null;s=s||c.type,a.push([n,c])}return"number"===s.kind||"color"===s.kind||"array"===s.kind&&"number"===s.itemType.kind&&"number"==typeof s.N?new Rs(s,n,r,i,a):t.error(`Type ${sa(s)} is not interpolatable.`)}evaluate(e){const t=this.labels,n=this.outputs;if(1===t.length)return n[0].evaluate(e);const r=this.input.evaluate(e);if(r<=t[0])return n[0].evaluate(e);const i=t.length;if(r>=t[i-1])return n[i-1].evaluate(e);const o=cs(t,r),a=t[o],s=t[o+1],l=Rs.interpolationFactor(this.interpolation,r,a,s),c=n[o].evaluate(e),u=n[o+1].evaluate(e);return"interpolate"===this.operator?ms[this.type.kind.toLowerCase()](c,u,l):"interpolate-hcl"===this.operator?Ts.reverse(Ts.interpolate(Ts.forward(c),Ts.forward(u),l)):ks.reverse(ks.interpolate(ks.forward(c),ks.forward(u),l))}eachChild(e){e(this.input);for(const t of this.outputs)e(t)}outputDefined(){return this.outputs.every((e=>e.outputDefined()))}serialize(){let e;e="linear"===this.interpolation.name?["linear"]:"exponential"===this.interpolation.name?1===this.interpolation.base?["linear"]:["exponential",this.interpolation.base]:["cubic-bezier"].concat(this.interpolation.controlPoints);const t=[this.operator,e,this.input.serialize()];for(let e=0;eca(r,e.type)));return new Ns(o?na:n,i)}evaluate(e){let t,n=null,r=0;for(const i of this.args){if(r++,n=i.evaluate(e),n&&n instanceof fa&&!n.available&&(t||(t=n),n=null,r===this.args.length))return t;if(null!==n)break}return n}eachChild(e){this.args.forEach(e)}outputDefined(){return this.args.every((e=>e.outputDefined()))}serialize(){const e=["coalesce"];return this.eachChild((t=>{e.push(t.serialize())})),e}}var Us=Ns;class js{constructor(e,t){this.type=t.type,this.bindings=[].concat(e),this.result=t}evaluate(e){return this.result.evaluate(e)}eachChild(e){for(const t of this.bindings)e(t[1]);e(this.result)}static parse(e,t){if(e.length<4)return t.error(`Expected at least 3 arguments, but found ${e.length-1} instead.`);const n=[];for(let r=1;r=n.length)throw new Ia(`Array index out of bounds: ${t} > ${n.length-1}.`);if(t!==Math.floor(t))throw new Ia(`Array index must be an integer, but found ${t} instead.`);return n[t]}eachChild(e){e(this.index),e(this.input)}outputDefined(){return!1}serialize(){return["at",this.index.serialize(),this.input.serialize()]}}var zs=Fs;class Vs{constructor(e,t){this.type=$o,this.needle=e,this.haystack=t}static parse(e,t){if(3!==e.length)return t.error(`Expected 2 arguments, but found ${e.length-1} instead.`);const n=t.parse(e[1],1,na),r=t.parse(e[2],2,na);return n&&r?ua(n.type,[$o,Qo,Ko,Xo,na])?new Vs(n,r):t.error(`Expected first argument to be of type boolean, string, number or null, but found ${sa(n.type)} instead`):null}evaluate(e){const t=this.needle.evaluate(e),n=this.haystack.evaluate(e);if(null==n)return!1;if(!da(t,["boolean","string","number","null"]))throw new Ia(`Expected first argument to be of type boolean, string, number or null, but found ${sa(va(t))} instead.`);if(!da(n,["string","array"]))throw new Ia(`Expected second argument to be of type array or string, but found ${sa(va(n))} instead.`);return n.indexOf(t)>=0}eachChild(e){e(this.needle),e(this.haystack)}outputDefined(){return!0}serialize(){return["in",this.needle.serialize(),this.haystack.serialize()]}}var qs=Vs;class Hs{constructor(e,t,n){this.type=Ko,this.needle=e,this.haystack=t,this.fromIndex=n}static parse(e,t){if(e.length<=2||e.length>=5)return t.error(`Expected 3 or 4 arguments, but found ${e.length-1} instead.`);const n=t.parse(e[1],1,na),r=t.parse(e[2],2,na);if(!n||!r)return null;if(!ua(n.type,[$o,Qo,Ko,Xo,na]))return t.error(`Expected first argument to be of type boolean, string, number or null, but found ${sa(n.type)} instead`);if(4===e.length){const i=t.parse(e[3],3,Ko);return i?new Hs(n,r,i):null}return new Hs(n,r)}evaluate(e){const t=this.needle.evaluate(e),n=this.haystack.evaluate(e);if(!da(t,["boolean","string","number","null"]))throw new Ia(`Expected first argument to be of type boolean, string, number or null, but found ${sa(va(t))} instead.`);if(!da(n,["string","array"]))throw new Ia(`Expected second argument to be of type array or string, but found ${sa(va(n))} instead.`);if(this.fromIndex){const r=this.fromIndex.evaluate(e);return n.indexOf(t,r)}return n.indexOf(t)}eachChild(e){e(this.needle),e(this.haystack),this.fromIndex&&e(this.fromIndex)}outputDefined(){return!1}serialize(){if(null!=this.fromIndex&&void 0!==this.fromIndex){const e=this.fromIndex.serialize();return["index-of",this.needle.serialize(),this.haystack.serialize(),e]}return["index-of",this.needle.serialize(),this.haystack.serialize()]}}var Ws=Hs;class Ys{constructor(e,t,n,r,i,o){this.inputType=e,this.type=t,this.input=n,this.cases=r,this.outputs=i,this.otherwise=o}static parse(e,t){if(e.length<5)return t.error(`Expected at least 4 arguments, but found only ${e.length-1}.`);if(e.length%2!=1)return t.error("Expected an even number of arguments.");let n,r;t.expectedType&&"value"!==t.expectedType.kind&&(r=t.expectedType);const i={},o=[];for(let a=2;aNumber.MAX_SAFE_INTEGER)return c.error(`Branch labels must be integers no larger than ${Number.MAX_SAFE_INTEGER}.`);if("number"==typeof e&&Math.floor(e)!==e)return c.error("Numeric branch labels must be integer values.");if(n){if(c.checkSubtype(n,va(e)))return null}else n=va(e);if(void 0!==i[String(e)])return c.error("Branch labels must be unique.");i[String(e)]=o.length}const u=t.parse(l,a,r);if(!u)return null;r=r||u.type,o.push(u)}const a=t.parse(e[1],1,na);if(!a)return null;const s=t.parse(e[e.length-1],e.length-1,r);return s?"value"!==a.type.kind&&t.concat(1).checkSubtype(n,a.type)?null:new Ys(n,r,a,i,o,s):null}evaluate(e){const t=this.input.evaluate(e);return(va(t)===this.inputType&&this.outputs[this.cases[t]]||this.otherwise).evaluate(e)}eachChild(e){e(this.input),this.outputs.forEach(e),e(this.otherwise)}outputDefined(){return this.outputs.every((e=>e.outputDefined()))&&this.otherwise.outputDefined()}serialize(){const e=["match",this.input.serialize()],t=Object.keys(this.cases).sort(),n=[],r={};for(const e of t){const t=r[this.cases[e]];void 0===t?(r[this.cases[e]]=n.length,n.push([this.cases[e],[e]])):n[t][1].push(e)}const i=e=>"number"===this.inputType.kind?Number(e):e;for(const[t,r]of n)1===r.length?e.push(i(r[0])):e.push(r.map(i)),e.push(this.outputs[t].serialize());return e.push(this.otherwise.serialize()),e}}var Zs=Ys;class Js{constructor(e,t,n){this.type=e,this.branches=t,this.otherwise=n}static parse(e,t){if(e.length<4)return t.error(`Expected at least 3 arguments, but found only ${e.length-1}.`);if(e.length%2!=0)return t.error("Expected an odd number of arguments.");let n;t.expectedType&&"value"!==t.expectedType.kind&&(n=t.expectedType);const r=[];for(let i=1;it.outputDefined()))&&this.otherwise.outputDefined()}serialize(){const e=["case"];return this.eachChild((t=>{e.push(t.serialize())})),e}}var Xs=Js;class Ks{constructor(e,t,n,r){this.type=e,this.input=t,this.beginIndex=n,this.endIndex=r}static parse(e,t){if(e.length<=2||e.length>=5)return t.error(`Expected 3 or 4 arguments, but found ${e.length-1} instead.`);const n=t.parse(e[1],1,na),r=t.parse(e[2],2,Ko);if(!n||!r)return null;if(!ua(n.type,[aa(na),Qo,na]))return t.error(`Expected first argument to be of type array or string, but found ${sa(n.type)} instead`);if(4===e.length){const i=t.parse(e[3],3,Ko);return i?new Ks(n.type,n,r,i):null}return new Ks(n.type,n,r)}evaluate(e){const t=this.input.evaluate(e),n=this.beginIndex.evaluate(e);if(!da(t,["string","array"]))throw new Ia(`Expected first argument to be of type array or string, but found ${sa(va(t))} instead.`);if(this.endIndex){const r=this.endIndex.evaluate(e);return t.slice(n,r)}return t.slice(n)}eachChild(e){e(this.input),e(this.beginIndex),this.endIndex&&e(this.endIndex)}outputDefined(){return!1}serialize(){if(null!=this.endIndex&&void 0!==this.endIndex){const e=this.endIndex.serialize();return["slice",this.input.serialize(),this.beginIndex.serialize(),e]}return["slice",this.input.serialize(),this.beginIndex.serialize()]}}var Qs=Ks;function $s(e,t){return"=="===e||"!="===e?"boolean"===t.kind||"string"===t.kind||"number"===t.kind||"null"===t.kind||"value"===t.kind:"string"===t.kind||"number"===t.kind||"value"===t.kind}function el(e,t,n,r){return 0===r.compare(t,n)}function tl(e,t,n){const r="=="!==e&&"!="!==e;return class i{constructor(e,t,n){this.type=$o,this.lhs=e,this.rhs=t,this.collator=n,this.hasUntypedArgument="value"===e.type.kind||"value"===t.type.kind}static parse(e,t){if(3!==e.length&&4!==e.length)return t.error("Expected two or three arguments.");const n=e[0];let o=t.parse(e[1],1,na);if(!o)return null;if(!$s(n,o.type))return t.concat(1).error(`"${n}" comparisons are not supported for type '${sa(o.type)}'.`);let a=t.parse(e[2],2,na);if(!a)return null;if(!$s(n,a.type))return t.concat(2).error(`"${n}" comparisons are not supported for type '${sa(a.type)}'.`);if(o.type.kind!==a.type.kind&&"value"!==o.type.kind&&"value"!==a.type.kind)return t.error(`Cannot compare types '${sa(o.type)}' and '${sa(a.type)}'.`);r&&("value"===o.type.kind&&"value"!==a.type.kind?o=new wa(a.type,[o]):"value"!==o.type.kind&&"value"===a.type.kind&&(a=new wa(o.type,[a])));let s=null;if(4===e.length){if("string"!==o.type.kind&&"string"!==a.type.kind&&"value"!==o.type.kind&&"value"!==a.type.kind)return t.error("Cannot use collator to compare non-string types.");if(s=t.parse(e[3],3,ra),!s)return null}return new i(o,a,s)}evaluate(i){const o=this.lhs.evaluate(i),a=this.rhs.evaluate(i);if(r&&this.hasUntypedArgument){const t=va(o),n=va(a);if(t.kind!==n.kind||"string"!==t.kind&&"number"!==t.kind)throw new Ia(`Expected arguments for "${e}" to be (string, string) or (number, number), but found (${t.kind}, ${n.kind}) instead.`)}if(this.collator&&!r&&this.hasUntypedArgument){const e=va(o),n=va(a);if("string"!==e.kind||"string"!==n.kind)return t(i,o,a)}return this.collator?n(i,o,a,this.collator.evaluate(i)):t(i,o,a)}eachChild(e){e(this.lhs),e(this.rhs),this.collator&&e(this.collator)}outputDefined(){return!0}serialize(){const t=[e];return this.eachChild((e=>{t.push(e.serialize())})),t}}}const nl=tl("==",(function(e,t,n){return t===n}),el),rl=tl("!=",(function(e,t,n){return t!==n}),(function(e,t,n,r){return!el(0,t,n,r)})),il=tl("<",(function(e,t,n){return t",(function(e,t,n){return t>n}),(function(e,t,n,r){return r.compare(t,n)>0})),sl=tl("<=",(function(e,t,n){return t<=n}),(function(e,t,n,r){return r.compare(t,n)<=0})),ll=tl(">=",(function(e,t,n){return t>=n}),(function(e,t,n,r){return r.compare(t,n)>=0}));class cl{constructor(e,t,n,r,i,o){this.type=Qo,this.number=e,this.locale=t,this.currency=n,this.unit=r,this.minFractionDigits=i,this.maxFractionDigits=o}static parse(e,t){if(3!==e.length)return t.error("Expected two arguments.");const n=t.parse(e[1],1,Ko);if(!n)return null;const r=e[2];if("object"!=typeof r||Array.isArray(r))return t.error("NumberFormat options argument must be an object.");let i=null;if(r.locale&&(i=t.parse(r.locale,1,Qo),!i))return null;let o=null;if(r.currency&&(o=t.parse(r.currency,1,Qo),!o))return null;let a=null;if(r.unit&&(a=t.parse(r.unit,1,Qo),!a))return null;let s=null;if(r["min-fraction-digits"]&&(s=t.parse(r["min-fraction-digits"],1,Ko),!s))return null;let l=null;return r["max-fraction-digits"]&&(l=t.parse(r["max-fraction-digits"],1,Ko),!l)?null:new cl(n,i,o,a,s,l)}evaluate(e){return new Intl.NumberFormat(this.locale?this.locale.evaluate(e):[],{style:(this.currency?"currency":this.unit&&"unit")||"decimal",currency:this.currency?this.currency.evaluate(e):void 0,unit:this.unit?this.unit.evaluate(e):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(e):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(e):void 0}).format(this.number.evaluate(e))}eachChild(e){e(this.number),this.locale&&e(this.locale),this.currency&&e(this.currency),this.unit&&e(this.unit),this.minFractionDigits&&e(this.minFractionDigits),this.maxFractionDigits&&e(this.maxFractionDigits)}outputDefined(){return!1}serialize(){const e={};return this.locale&&(e.locale=this.locale.serialize()),this.currency&&(e.currency=this.currency.serialize()),this.unit&&(e.unit=this.unit.serialize()),this.minFractionDigits&&(e["min-fraction-digits"]=this.minFractionDigits.serialize()),this.maxFractionDigits&&(e["max-fraction-digits"]=this.maxFractionDigits.serialize()),["number-format",this.number.serialize(),e]}}class ul{constructor(e){this.type=Ko,this.input=e}static parse(e,t){if(2!==e.length)return t.error(`Expected 1 argument, but found ${e.length-1} instead.`);const n=t.parse(e[1],1);return n?"array"!==n.type.kind&&"string"!==n.type.kind&&"value"!==n.type.kind?t.error(`Expected argument of type string or array, but found ${sa(n.type)} instead.`):new ul(n):null}evaluate(e){const t=this.input.evaluate(e);if("string"==typeof t)return t.length;if(Array.isArray(t))return t.length;throw new Ia(`Expected value to be of type string or array, but found ${sa(va(t))} instead.`)}eachChild(e){e(this.input)}outputDefined(){return!1}serialize(){const e=["length"];return this.eachChild((t=>{e.push(t.serialize())})),e}}const dl={"==":nl,"!=":rl,">":al,"<":il,">=":ll,"<=":sl,array:wa,at:zs,boolean:wa,case:Xs,coalesce:Us,collator:Oa,format:Pa,image:Sa,in:qs,"index-of":Ws,interpolate:Ds,"interpolate-hcl":Ds,"interpolate-lab":Ds,length:ul,let:Bs,literal:ba,match:Zs,number:wa,"number-format":cl,object:wa,slice:Qs,step:ds,string:wa,"to-boolean":Ga,"to-color":Ga,"to-number":Ga,"to-string":Ga,var:os,within:es};function pl(e,[t,n,r,i]){t=t.evaluate(e),n=n.evaluate(e),r=r.evaluate(e);const o=i?i.evaluate(e):1,a=ma(t,n,r,o);if(a)throw new Ia(a);return new Do(t/255*o,n/255*o,r/255*o,o)}function hl(e,t){return e in t}function gl(e,t){const n=t[e];return void 0===n?null:n}function fl(e){return{type:e}}Ra.register(dl,{error:[{kind:"error"},[Qo],(e,[t])=>{throw new Ia(t.evaluate(e))}],typeof:[Qo,[na],(e,[t])=>sa(va(t.evaluate(e)))],"to-rgba":[aa(Ko,4),[ea],(e,[t])=>t.evaluate(e).toArray()],rgb:[ea,[Ko,Ko,Ko],pl],rgba:[ea,[Ko,Ko,Ko,Ko],pl],has:{type:$o,overloads:[[[Qo],(e,[t])=>hl(t.evaluate(e),e.properties())],[[Qo,ta],(e,[t,n])=>hl(t.evaluate(e),n.evaluate(e))]]},get:{type:na,overloads:[[[Qo],(e,[t])=>gl(t.evaluate(e),e.properties())],[[Qo,ta],(e,[t,n])=>gl(t.evaluate(e),n.evaluate(e))]]},"feature-state":[na,[Qo],(e,[t])=>gl(t.evaluate(e),e.featureState||{})],properties:[ta,[],e=>e.properties()],"geometry-type":[Qo,[],e=>e.geometryType()],id:[na,[],e=>e.id()],zoom:[Ko,[],e=>e.globals.zoom],pitch:[Ko,[],e=>e.globals.pitch||0],"distance-from-center":[Ko,[],e=>e.distanceFromCenter()],"heatmap-density":[Ko,[],e=>e.globals.heatmapDensity||0],"line-progress":[Ko,[],e=>e.globals.lineProgress||0],"sky-radial-progress":[Ko,[],e=>e.globals.skyRadialProgress||0],accumulated:[na,[],e=>void 0===e.globals.accumulated?null:e.globals.accumulated],"+":[Ko,fl(Ko),(e,t)=>{let n=0;for(const r of t)n+=r.evaluate(e);return n}],"*":[Ko,fl(Ko),(e,t)=>{let n=1;for(const r of t)n*=r.evaluate(e);return n}],"-":{type:Ko,overloads:[[[Ko,Ko],(e,[t,n])=>t.evaluate(e)-n.evaluate(e)],[[Ko],(e,[t])=>-t.evaluate(e)]]},"/":[Ko,[Ko,Ko],(e,[t,n])=>t.evaluate(e)/n.evaluate(e)],"%":[Ko,[Ko,Ko],(e,[t,n])=>t.evaluate(e)%n.evaluate(e)],ln2:[Ko,[],()=>Math.LN2],pi:[Ko,[],()=>Math.PI],e:[Ko,[],()=>Math.E],"^":[Ko,[Ko,Ko],(e,[t,n])=>Math.pow(t.evaluate(e),n.evaluate(e))],sqrt:[Ko,[Ko],(e,[t])=>Math.sqrt(t.evaluate(e))],log10:[Ko,[Ko],(e,[t])=>Math.log(t.evaluate(e))/Math.LN10],ln:[Ko,[Ko],(e,[t])=>Math.log(t.evaluate(e))],log2:[Ko,[Ko],(e,[t])=>Math.log(t.evaluate(e))/Math.LN2],sin:[Ko,[Ko],(e,[t])=>Math.sin(t.evaluate(e))],cos:[Ko,[Ko],(e,[t])=>Math.cos(t.evaluate(e))],tan:[Ko,[Ko],(e,[t])=>Math.tan(t.evaluate(e))],asin:[Ko,[Ko],(e,[t])=>Math.asin(t.evaluate(e))],acos:[Ko,[Ko],(e,[t])=>Math.acos(t.evaluate(e))],atan:[Ko,[Ko],(e,[t])=>Math.atan(t.evaluate(e))],min:[Ko,fl(Ko),(e,t)=>Math.min(...t.map((t=>t.evaluate(e))))],max:[Ko,fl(Ko),(e,t)=>Math.max(...t.map((t=>t.evaluate(e))))],abs:[Ko,[Ko],(e,[t])=>Math.abs(t.evaluate(e))],round:[Ko,[Ko],(e,[t])=>{const n=t.evaluate(e);return n<0?-Math.round(-n):Math.round(n)}],floor:[Ko,[Ko],(e,[t])=>Math.floor(t.evaluate(e))],ceil:[Ko,[Ko],(e,[t])=>Math.ceil(t.evaluate(e))],"filter-==":[$o,[Qo,na],(e,[t,n])=>e.properties()[t.value]===n.value],"filter-id-==":[$o,[na],(e,[t])=>e.id()===t.value],"filter-type-==":[$o,[Qo],(e,[t])=>e.geometryType()===t.value],"filter-<":[$o,[Qo,na],(e,[t,n])=>{const r=e.properties()[t.value],i=n.value;return typeof r==typeof i&&r{const n=e.id(),r=t.value;return typeof n==typeof r&&n":[$o,[Qo,na],(e,[t,n])=>{const r=e.properties()[t.value],i=n.value;return typeof r==typeof i&&r>i}],"filter-id->":[$o,[na],(e,[t])=>{const n=e.id(),r=t.value;return typeof n==typeof r&&n>r}],"filter-<=":[$o,[Qo,na],(e,[t,n])=>{const r=e.properties()[t.value],i=n.value;return typeof r==typeof i&&r<=i}],"filter-id-<=":[$o,[na],(e,[t])=>{const n=e.id(),r=t.value;return typeof n==typeof r&&n<=r}],"filter->=":[$o,[Qo,na],(e,[t,n])=>{const r=e.properties()[t.value],i=n.value;return typeof r==typeof i&&r>=i}],"filter-id->=":[$o,[na],(e,[t])=>{const n=e.id(),r=t.value;return typeof n==typeof r&&n>=r}],"filter-has":[$o,[na],(e,[t])=>t.value in e.properties()],"filter-has-id":[$o,[],e=>null!==e.id()&&void 0!==e.id()],"filter-type-in":[$o,[aa(Qo)],(e,[t])=>t.value.indexOf(e.geometryType())>=0],"filter-id-in":[$o,[aa(na)],(e,[t])=>t.value.indexOf(e.id())>=0],"filter-in-small":[$o,[Qo,aa(na)],(e,[t,n])=>n.value.indexOf(e.properties()[t.value])>=0],"filter-in-large":[$o,[Qo,aa(na)],(e,[t,n])=>function(e,t,n,r){for(;n<=r;){const i=n+r>>1;if(t[i]===e)return!0;t[i]>e?r=i-1:n=i+1}return!1}(e.properties()[t.value],n.value,0,n.value.length-1)],all:{type:$o,overloads:[[[$o,$o],(e,[t,n])=>t.evaluate(e)&&n.evaluate(e)],[fl($o),(e,t)=>{for(const n of t)if(!n.evaluate(e))return!1;return!0}]]},any:{type:$o,overloads:[[[$o,$o],(e,[t,n])=>t.evaluate(e)||n.evaluate(e)],[fl($o),(e,t)=>{for(const n of t)if(n.evaluate(e))return!0;return!1}]]},"!":[$o,[$o],(e,[t])=>!t.evaluate(e)],"is-supported-script":[$o,[Qo],(e,[t])=>{const n=e.globals&&e.globals.isSupportedScript;return!n||n(t.evaluate(e))}],upcase:[Qo,[Qo],(e,[t])=>t.evaluate(e).toUpperCase()],downcase:[Qo,[Qo],(e,[t])=>t.evaluate(e).toLowerCase()],concat:[Qo,fl(na),(e,t)=>t.map((t=>Aa(t.evaluate(e)))).join("")],"resolved-locale":[Qo,[ra],(e,[t])=>t.evaluate(e).resolvedLocale()]});var ml=dl;function yl(e){return{result:"success",value:e}}function vl(e){return{result:"error",value:e}}function Al(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}class Cl{constructor(e,t){this.expression=e,this._warningHistory={},this._evaluator=new ka,this._defaultValue=t?function(e){return"color"===e.type&&(Al(e.default)||Array.isArray(e.default))?new Do(0,0,0,0):"color"===e.type?Do.parse(e.default)||null:void 0===e.default?null:e.default}(t):null,this._enumValues=t&&"enum"===t.type?t.values:null}evaluateWithoutErrorHandling(e,t,n,r,i,o,a,s){return this._evaluator.globals=e,this._evaluator.feature=t,this._evaluator.featureState=n,this._evaluator.canonical=r||null,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=o,this._evaluator.featureTileCoord=a||null,this._evaluator.featureDistanceData=s||null,this.expression.evaluate(this._evaluator)}evaluate(e,t,n,r,i,o,a,s){this._evaluator.globals=e,this._evaluator.feature=t||null,this._evaluator.featureState=n||null,this._evaluator.canonical=r||null,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=o||null,this._evaluator.featureTileCoord=a||null,this._evaluator.featureDistanceData=s||null;try{const e=this.expression.evaluate(this._evaluator);if(null==e||"number"==typeof e&&e!=e)return this._defaultValue;if(this._enumValues&&!(e in this._enumValues))throw new Ia(`Expected value to be one of ${Object.keys(this._enumValues).map((e=>JSON.stringify(e))).join(", ")}, but found ${JSON.stringify(e)} instead.`);return e}catch(e){return this._warningHistory[e.message]||(this._warningHistory[e.message]=!0,"undefined"!=typeof console&&console.warn(e.message)),this._defaultValue}}}function bl(e,t){const n=new ss(ml,[],t?function(e){const t={color:ea,string:Qo,number:Ko,enum:Qo,boolean:$o,formatted:ia,resolvedImage:oa};if("array"===e.type)return aa(t[e.value]||na,e.length);return t[e.type]}(t):void 0),r=n.parse(e,void 0,void 0,void 0,t&&"string"===t.type?{typeAnnotation:"coerce"}:void 0);return r?yl(new Cl(r,t)):vl(n.errors)}class Il{constructor(e,t){this.kind=e,this._styleExpression=t,this.isStateDependent="constant"!==e&&!ns(t.expression)}evaluateWithoutErrorHandling(e,t,n,r,i,o){return this._styleExpression.evaluateWithoutErrorHandling(e,t,n,r,i,o)}evaluate(e,t,n,r,i,o){return this._styleExpression.evaluate(e,t,n,r,i,o)}}class _l{constructor(e,t,n,r){this.kind=e,this.zoomStops=n,this._styleExpression=t,this.isStateDependent="camera"!==e&&!ns(t.expression),this.interpolationType=r}evaluateWithoutErrorHandling(e,t,n,r,i,o){return this._styleExpression.evaluateWithoutErrorHandling(e,t,n,r,i,o)}evaluate(e,t,n,r,i,o){return this._styleExpression.evaluate(e,t,n,r,i,o)}interpolationFactor(e,t,n){return this.interpolationType?Ds.interpolationFactor(this.interpolationType,e,t,n):0}}function El(e,t){if("error"===(e=bl(e,t)).result)return e;const n=e.value.expression,r=ts(n);if(!r&&!function(e){return"data-driven"===e["property-type"]}(t))return vl([new Yo("","data expressions not supported")]);const i=rs(n,["zoom","pitch","distance-from-center"]);if(!i&&!function(e){return!!e.expression&&e.expression.parameters.indexOf("zoom")>-1}(t))return vl([new Yo("","zoom expressions not supported")]);const o=wl(n);if(!o&&!i)return vl([new Yo("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.')]);if(o instanceof Yo)return vl([o]);if(o instanceof Ds&&!function(e){return!!e.expression&&e.expression.interpolated}(t))return vl([new Yo("",'"interpolate" expressions cannot be used with this property')]);if(!o)return yl(new Il(r?"constant":"source",e.value));const a=o instanceof Ds?o.interpolation:void 0;return yl(new _l(r?"camera":"composite",e.value,o.labels,a))}function wl(e){let t=null;if(e instanceof Bs)t=wl(e.result);else if(e instanceof Us){for(const n of e.args)if(t=wl(n),t)break}else(e instanceof ds||e instanceof Ds)&&e.input instanceof Ra&&"zoom"===e.input.name&&(t=e);return t instanceof Yo||e.eachChild((e=>{const n=wl(e);n instanceof Yo?t=n:!t&&n?t=new Yo("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.'):t&&n&&t!==n&&(t=new Yo("",'Only one zoom-based "step" or "interpolate" subexpression may be used in an expression.'))})),t}function Pl(e){if(Array.isArray(e))return e.map(Pl);if(e instanceof Object&&!(e instanceof Number||e instanceof String||e instanceof Boolean)){const t={};for(const n in e)t[n]=Pl(e[n]);return t}return function(e){return e instanceof Number||e instanceof String||e instanceof Boolean?e.valueOf():e}(e)}var Sl={$version:8,$root:{version:{required:!0,type:"enum",values:[8]},name:{type:"string"},metadata:{type:"*"},center:{type:"array",value:"number"},zoom:{type:"number"},bearing:{type:"number",default:0,period:360,units:"degrees"},pitch:{type:"number",default:0,units:"degrees"},light:{type:"light"},terrain:{type:"terrain"},fog:{type:"fog"},sources:{required:!0,type:"sources"},sprite:{type:"string"},glyphs:{type:"string"},transition:{type:"transition"},projection:{type:"projection"},layers:{required:!0,type:"array",value:"layer"}},sources:{"*":{type:"source"}},source:["source_vector","source_raster","source_raster_dem","source_geojson","source_video","source_image"],source_vector:{type:{required:!0,type:"enum",values:{vector:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},attribution:{type:"string"},promoteId:{type:"promoteId"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_raster:{type:{required:!0,type:"enum",values:{raster:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},attribution:{type:"string"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_raster_dem:{type:{required:!0,type:"enum",values:{"raster-dem":{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},attribution:{type:"string"},encoding:{type:"enum",values:{terrarium:{},mapbox:{}},default:"mapbox"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_geojson:{type:{required:!0,type:"enum",values:{geojson:{}}},data:{type:"*"},maxzoom:{type:"number",default:18},attribution:{type:"string"},buffer:{type:"number",default:128,maximum:512,minimum:0},filter:{type:"*"},tolerance:{type:"number",default:.375},cluster:{type:"boolean",default:!1},clusterRadius:{type:"number",default:50,minimum:0},clusterMaxZoom:{type:"number"},clusterMinPoints:{type:"number"},clusterProperties:{type:"*"},lineMetrics:{type:"boolean",default:!1},generateId:{type:"boolean",default:!1},promoteId:{type:"promoteId"}},source_video:{type:{required:!0,type:"enum",values:{video:{}}},urls:{required:!0,type:"array",value:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},source_image:{type:{required:!0,type:"enum",values:{image:{}}},url:{required:!0,type:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},layer:{id:{type:"string",required:!0},type:{type:"enum",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},"fill-extrusion":{},raster:{},hillshade:{},background:{},sky:{}},required:!0},metadata:{type:"*"},source:{type:"string"},"source-layer":{type:"string"},minzoom:{type:"number",minimum:0,maximum:24},maxzoom:{type:"number",minimum:0,maximum:24},filter:{type:"filter"},layout:{type:"layout"},paint:{type:"paint"}},layout:["layout_fill","layout_line","layout_circle","layout_heatmap","layout_fill-extrusion","layout_symbol","layout_raster","layout_hillshade","layout_background","layout_sky"],layout_background:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_sky:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_fill:{"fill-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_circle:{"circle-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_heatmap:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},"layout_fill-extrusion":{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"},"fill-extrusion-edge-radius":{type:"number",private:!0,default:0,minimum:0,maximum:1,"property-type":"constant"}},layout_line:{"line-cap":{type:"enum",values:{butt:{},round:{},square:{}},default:"butt",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-join":{type:"enum",values:{bevel:{},round:{},miter:{}},default:"miter",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-miter-limit":{type:"number",default:2,requires:[{"line-join":"miter"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-round-limit":{type:"number",default:1.05,requires:[{"line-join":"round"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_symbol:{"symbol-placement":{type:"enum",values:{point:{},line:{},"line-center":{}},default:"point",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-spacing":{type:"number",default:250,minimum:1,units:"pixels",requires:[{"symbol-placement":"line"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"symbol-avoid-edges":{type:"boolean",default:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"symbol-z-order":{type:"enum",values:{auto:{},"viewport-y":{},source:{}},default:"auto",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-allow-overlap":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-ignore-placement":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-optional":{type:"boolean",default:!1,requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-size":{type:"number",default:1,minimum:0,units:"factor of the original icon size",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-text-fit":{type:"enum",values:{none:{},width:{},height:{},both:{}},default:"none",requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-text-fit-padding":{type:"array",value:"number",length:4,default:[0,0,0,0],units:"pixels",requires:["icon-image","text-field",{"icon-text-fit":["both","width","height"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-image":{type:"resolvedImage",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-keep-upright":{type:"boolean",default:!1,requires:["icon-image",{"icon-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-offset":{type:"array",value:"number",length:2,default:[0,0],requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-field":{type:"formatted",default:"",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-font":{type:"array",value:"string",default:["Open Sans Regular","Arial Unicode MS Regular"],requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-size":{type:"number",default:16,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-width":{type:"number",default:10,minimum:0,units:"ems",requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-line-height":{type:"number",default:1.2,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-letter-spacing":{type:"number",default:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-justify":{type:"enum",values:{auto:{},left:{},center:{},right:{}},default:"center",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-radial-offset":{type:"number",units:"ems",default:0,requires:["text-field"],"property-type":"data-driven",expression:{interpolated:!0,parameters:["zoom","feature"]}},"text-variable-anchor":{type:"array",value:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["text-field",{"!":"text-variable-anchor"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-angle":{type:"number",default:45,units:"degrees",requires:["text-field",{"symbol-placement":["line","line-center"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-writing-mode":{type:"array",value:"enum",values:{horizontal:{},vertical:{}},requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-keep-upright":{type:"boolean",default:!0,requires:["text-field",{"text-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-transform":{type:"enum",values:{none:{},uppercase:{},lowercase:{}},default:"none",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-offset":{type:"array",value:"number",units:"ems",length:2,default:[0,0],requires:["text-field",{"!":"text-radial-offset"}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-allow-overlap":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-ignore-placement":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-optional":{type:"boolean",default:!1,requires:["text-field","icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_raster:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_hillshade:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},filter:{type:"array",value:"*"},filter_symbol:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature","pitch","distance-from-center"]}},filter_fill:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_line:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_circle:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},"filter_fill-extrusion":{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_heatmap:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_operator:{type:"enum",values:{"==":{},"!=":{},">":{},">=":{},"<":{},"<=":{},in:{},"!in":{},all:{},any:{},none:{},has:{},"!has":{},within:{}}},geometry_type:{type:"enum",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:"expression"},stops:{type:"array",value:"function_stop"},base:{type:"number",default:1,minimum:0},property:{type:"string",default:"$zoom"},type:{type:"enum",values:{identity:{},exponential:{},interval:{},categorical:{}},default:"exponential"},colorSpace:{type:"enum",values:{rgb:{},lab:{},hcl:{}},default:"rgb"},default:{type:"*",required:!1}},function_stop:{type:"array",minimum:0,maximum:24,value:["number","color"],length:2},expression:{type:"array",value:"*",minimum:1},expression_name:{type:"enum",values:{let:{group:"Variable binding"},var:{group:"Variable binding"},literal:{group:"Types"},array:{group:"Types"},at:{group:"Lookup"},in:{group:"Lookup"},"index-of":{group:"Lookup"},slice:{group:"Lookup"},case:{group:"Decision"},match:{group:"Decision"},coalesce:{group:"Decision"},step:{group:"Ramps, scales, curves"},interpolate:{group:"Ramps, scales, curves"},"interpolate-hcl":{group:"Ramps, scales, curves"},"interpolate-lab":{group:"Ramps, scales, curves"},ln2:{group:"Math"},pi:{group:"Math"},e:{group:"Math"},typeof:{group:"Types"},string:{group:"Types"},number:{group:"Types"},boolean:{group:"Types"},object:{group:"Types"},collator:{group:"Types"},format:{group:"Types"},image:{group:"Types"},"number-format":{group:"Types"},"to-string":{group:"Types"},"to-number":{group:"Types"},"to-boolean":{group:"Types"},"to-rgba":{group:"Color"},"to-color":{group:"Types"},rgb:{group:"Color"},rgba:{group:"Color"},get:{group:"Lookup"},has:{group:"Lookup"},length:{group:"Lookup"},properties:{group:"Feature data"},"feature-state":{group:"Feature data"},"geometry-type":{group:"Feature data"},id:{group:"Feature data"},zoom:{group:"Camera"},pitch:{group:"Camera"},"distance-from-center":{group:"Camera"},"heatmap-density":{group:"Heatmap"},"line-progress":{group:"Feature data"},"sky-radial-progress":{group:"sky"},accumulated:{group:"Feature data"},"+":{group:"Math"},"*":{group:"Math"},"-":{group:"Math"},"/":{group:"Math"},"%":{group:"Math"},"^":{group:"Math"},sqrt:{group:"Math"},log10:{group:"Math"},ln:{group:"Math"},log2:{group:"Math"},sin:{group:"Math"},cos:{group:"Math"},tan:{group:"Math"},asin:{group:"Math"},acos:{group:"Math"},atan:{group:"Math"},min:{group:"Math"},max:{group:"Math"},round:{group:"Math"},abs:{group:"Math"},ceil:{group:"Math"},floor:{group:"Math"},distance:{group:"Math"},"==":{group:"Decision"},"!=":{group:"Decision"},">":{group:"Decision"},"<":{group:"Decision"},">=":{group:"Decision"},"<=":{group:"Decision"},all:{group:"Decision"},any:{group:"Decision"},"!":{group:"Decision"},within:{group:"Decision"},"is-supported-script":{group:"String"},upcase:{group:"String"},downcase:{group:"String"},concat:{group:"String"},"resolved-locale":{group:"String"}}},fog:{range:{type:"array",default:[.5,10],minimum:-20,maximum:20,length:2,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"high-color":{type:"color","property-type":"data-constant",default:"#245cdf",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"space-color":{type:"color","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],4,"#010b19",7,"#367ab9"],expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"horizon-blend":{type:"number","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],4,.2,7,.1],minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"star-intensity":{type:"number","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],5,.35,6,0],minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},light:{anchor:{type:"enum",default:"viewport",values:{map:{},viewport:{}},"property-type":"data-constant",transition:!1,expression:{interpolated:!1,parameters:["zoom"]}},position:{type:"array",default:[1.15,210,30],length:3,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},intensity:{type:"number","property-type":"data-constant",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},projection:{name:{type:"enum",values:{albers:{},equalEarth:{},equirectangular:{},lambertConformalConic:{},mercator:{},naturalEarth:{},winkelTripel:{},globe:{}},default:"mercator",required:!0},center:{type:"array",length:2,value:"number","property-type":"data-constant",minimum:[-180,-90],maximum:[180,90],transition:!1,requires:[{name:["albers","lambertConformalConic"]}]},parallels:{type:"array",length:2,value:"number","property-type":"data-constant",minimum:[-90,-90],maximum:[90,90],transition:!1,requires:[{name:["albers","lambertConformalConic"]}]}},terrain:{source:{type:"string",required:!0},exaggeration:{type:"number","property-type":"data-constant",default:1,minimum:0,maximum:1e3,expression:{interpolated:!0,parameters:["zoom"]},transition:!0,requires:["source"]}},paint:["paint_fill","paint_line","paint_circle","paint_heatmap","paint_fill-extrusion","paint_symbol","paint_raster","paint_hillshade","paint_background","paint_sky"],paint_fill:{"fill-antialias":{type:"boolean",default:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-outline-color":{type:"color",transition:!0,requires:[{"!":"fill-pattern"},{"fill-antialias":!0}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"}},"paint_fill-extrusion":{"fill-extrusion-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-extrusion-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-extrusion-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"fill-extrusion-height":{type:"number",default:0,minimum:0,units:"meters",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-base":{type:"number",default:0,minimum:0,units:"meters",transition:!0,requires:["fill-extrusion-height"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-vertical-gradient":{type:"boolean",default:!0,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-ambient-occlusion-intensity":{"property-type":"data-constant",type:"number",private:!0,default:0,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"fill-extrusion-ambient-occlusion-radius":{"property-type":"data-constant",type:"number",private:!0,default:3,minimum:0,expression:{interpolated:!0,parameters:["zoom"]},transition:!0,requires:["fill-extrusion-edge-radius"]}},paint_line:{"line-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"line-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["line-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-width":{type:"number",default:1,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-gap-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-offset":{type:"number",default:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-dasharray":{type:"array",value:"number",minimum:0,transition:!1,units:"line widths",requires:[{"!":"line-pattern"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-gradient":{type:"color",transition:!1,requires:[{"!":"line-pattern"},{source:"geojson",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:["line-progress"]},"property-type":"color-ramp"},"line-trim-offset":{type:"array",value:"number",length:2,default:[0,0],minimum:[0,0],maximum:[1,1],transition:!1,requires:[{source:"geojson",has:{lineMetrics:!0}}],"property-type":"constant"}},paint_circle:{"circle-radius":{type:"number",default:5,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-blur":{type:"number",default:0,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"circle-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["circle-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-scale":{type:"enum",values:{map:{},viewport:{}},default:"map",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-alignment":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-stroke-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"}},paint_heatmap:{"heatmap-radius":{type:"number",default:30,minimum:1,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-weight":{type:"number",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-intensity":{type:"number",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"heatmap-color":{type:"color",default:["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 255, 0)",.1,"royalblue",.3,"cyan",.5,"lime",.7,"yellow",1,"red"],transition:!1,expression:{interpolated:!0,parameters:["heatmap-density"]},"property-type":"color-ramp"},"heatmap-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_symbol:{"icon-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-color":{type:"color",default:"#000000",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["icon-image","icon-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-color":{type:"color",default:"#000000",transition:!0,overridable:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["text-field","text-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_raster:{"raster-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-hue-rotate":{type:"number",default:0,period:360,transition:!0,units:"degrees",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-min":{type:"number",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-max":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-saturation":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-contrast":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-resampling":{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"raster-fade-duration":{type:"number",default:300,minimum:0,transition:!1,units:"milliseconds",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_hillshade:{"hillshade-illumination-direction":{type:"number",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-illumination-anchor":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-exaggeration":{type:"number",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-shadow-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-highlight-color":{type:"color",default:"#FFFFFF",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-accent-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_background:{"background-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"background-pattern"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"background-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"background-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_sky:{"sky-type":{type:"enum",values:{gradient:{},atmosphere:{}},default:"atmosphere",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-atmosphere-sun":{type:"array",value:"number",length:2,units:"degrees",minimum:[0,0],maximum:[360,180],transition:!1,requires:[{"sky-type":"atmosphere"}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-atmosphere-sun-intensity":{type:"number",requires:[{"sky-type":"atmosphere"}],default:10,minimum:0,maximum:100,transition:!1,"property-type":"data-constant"},"sky-gradient-center":{type:"array",requires:[{"sky-type":"gradient"}],value:"number",default:[0,0],length:2,units:"degrees",minimum:[0,0],maximum:[360,180],transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-gradient-radius":{type:"number",requires:[{"sky-type":"gradient"}],default:90,minimum:0,maximum:180,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-gradient":{type:"color",default:["interpolate",["linear"],["sky-radial-progress"],.8,"#87ceeb",1,"white"],transition:!1,requires:[{"sky-type":"gradient"}],expression:{interpolated:!0,parameters:["sky-radial-progress"]},"property-type":"color-ramp"},"sky-atmosphere-halo-color":{type:"color",default:"white",transition:!1,requires:[{"sky-type":"atmosphere"}],"property-type":"data-constant"},"sky-atmosphere-color":{type:"color",default:"white",transition:!1,requires:[{"sky-type":"atmosphere"}],"property-type":"data-constant"},"sky-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},transition:{duration:{type:"number",default:300,minimum:0,units:"milliseconds"},delay:{type:"number",default:0,minimum:0,units:"milliseconds"}},"property-type":{"data-driven":{type:"property-type"},"color-ramp":{type:"property-type"},"data-constant":{type:"property-type"},constant:{type:"property-type"}},promoteId:{"*":{type:"string"}}};function Ml(e){if(!0===e||!1===e)return!0;if(!Array.isArray(e)||0===e.length)return!1;switch(e[0]){case"has":return e.length>=2&&"$id"!==e[1]&&"$type"!==e[1];case"in":return e.length>=3&&("string"!=typeof e[1]||Array.isArray(e[2]));case"!in":case"!has":case"none":return!1;case"==":case"!=":case">":case">=":case"<":case"<=":return 3!==e.length||Array.isArray(e[1])||Array.isArray(e[2]);case"any":case"all":for(const t of e.slice(1))if(!Ml(t)&&"boolean"!=typeof t)return!1;return!0;default:return!0}}function xl(e,t="fill"){if(null==e)return{filter:()=>!0,needGeometry:!1,needFeature:!1};Ml(e)||(e=Dl(e));const n=e;let r=!0;try{r=function(e){if(!kl(e))return e;let t=Pl(e);return Ll(t),t=Gl(t),t}(n)}catch(e){console.warn(`Failed to extract static filter. Filter will continue working, but at higher memory usage and slower framerate.\nThis is most likely a bug, please report this via https://github.com/mapbox/mapbox-gl-js/issues/new?assignees=&labels=&template=Bug_report.md\nand paste the contents of this message in the report.\nThank you!\nFilter Expression:\n${JSON.stringify(n,null,2)}\n `)}const i=Sl[`filter_${t}`],o=bl(r,i);let a=null;if("error"===o.result)throw new Error(o.value.map((e=>`${e.key}: ${e.message}`)).join(", "));a=(e,t,n)=>o.value.evaluate(e,t,{},n);let s=null,l=null;if(r!==n){const e=bl(n,i);if("error"===e.result)throw new Error(e.value.map((e=>`${e.key}: ${e.message}`)).join(", "));s=(t,n,r,i,o)=>e.value.evaluate(t,n,{},r,void 0,void 0,i,o),l=!ts(e.value.expression)}return{filter:a,dynamicFilter:s||void 0,needGeometry:Ol(r),needFeature:!!l}}function Gl(e){if(!Array.isArray(e))return e;const t=function(e){if(Tl.has(e[0]))for(let t=1;tGl(e)))}function Ll(e){let t=!1;const n=[];if("case"===e[0]){for(let r=1;r",">=","<","<=","to-boolean"]);function Rl(e,t){return et?1:0}function Ol(e){if(!Array.isArray(e))return!1;if("within"===e[0])return!0;for(let t=1;t"===t||"<="===t||">="===t?Nl(e[1],e[2],t):"any"===t?(n=e.slice(1),["any"].concat(n.map(Dl))):"all"===t?["all"].concat(e.slice(1).map(Dl)):"none"===t?["all"].concat(e.slice(1).map(Dl).map(Bl)):"in"===t?Ul(e[1],e.slice(2)):"!in"===t?Bl(Ul(e[1],e.slice(2))):"has"===t?jl(e[1]):"!has"===t?Bl(jl(e[1])):"within"!==t||e}function Nl(e,t,n){switch(e){case"$type":return[`filter-type-${n}`,t];case"$id":return[`filter-id-${n}`,t];default:return[`filter-${n}`,e,t]}}function Ul(e,t){if(0===t.length)return!1;switch(e){case"$type":return["filter-type-in",["literal",t]];case"$id":return["filter-id-in",["literal",t]];default:return t.length>200&&!t.some((e=>typeof e!=typeof t[0]))?["filter-in-large",e,["literal",t.sort(Rl)]]:["filter-in-small",e,["literal",t]]}}function jl(e){switch(e){case"$type":return!0;case"$id":return["filter-has-id"];default:return["filter-has",e]}}function Bl(e){return["!",e]}var Fl=["type","source","source-layer","minzoom","maxzoom","filter","layout"];function zl(e,t){const n={};for(const t in e)"ref"!==t&&(n[t]=e[t]);return Fl.forEach((e=>{e in t&&(n[e]=t[e])})),n}function Vl(e){e=e.slice();const t=Object.create(null);for(let n=0;n1?d[d.length-2].toLowerCase():"";if(p==h||p==h.replace("-","")||g+"-"+p==h){a=i?a:ql[h],d.pop(),g&&h.startsWith(g)&&d.pop();break}}i||"number"!=typeof p||(a=p,i=!0);var f=d.join(Hl).replace("Klokantech Noto Sans","Noto Sans");-1!==f.indexOf(Hl)&&(f='"'+f+'"'),l.push(f)}r=Yl[e]=[s,a,l]}return r[0]+Hl+r[1]+Hl+t+"px"+(n?"/"+n:"")+Hl+r[2]}));const Jl="https://api.mapbox.com";function Xl(e){const t="mapbox://";return 0!==e.indexOf(t)?"":e.slice(9)}function Kl(e,t){const n=Xl(e);if(!n)return decodeURI(new URL(e,location.href).href);const r="styles/";if(0!==n.indexOf(r))throw new Error(`unexpected style url: ${e}`);const i=n.slice(7);return`${Jl}/styles/v1/${i}?&access_token=${t}`}const Ql=["a","b","c","d"];function $l(e,t,n,r){const i=new URL(e,r),o=Xl(e);if(!o)return t?(i.searchParams.has(n)||i.searchParams.set(n,t),[decodeURI(i.href)]):[decodeURI(i.href)];if("mapbox.satellite"===o){const e=window.devicePixelRatio>=1.5?"@2x":"";return[`https://api.mapbox.com/v4/${o}/{z}/{x}/{y}${e}.webp?access_token=${t}`]}return Ql.map((e=>`https://${e}.tiles.mapbox.com/v4/${o}/{z}/{x}/{y}.vector.pbf?access_token=${t}`))}const ec={},tc={};let nc=0;function rc(e){return e.id||(e.id=nc++),e.id}function ic(e,t){return rc(e)+"."+(0,Eo.getUid)(t)}function oc(e){let t=ec[e.id];return t||(t={},ec[rc(e)]=t),t}function ac(e){let t=tc[e.id];return t||(t={},tc[rc(e)]=t),t}function sc(e){return e*Math.PI/180}const lc=function(){const e=[];for(let t=78271.51696402048;e.length<=24;t/=2)e.push(t);return e}();function cc(e,t){if("undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"undefined"!=typeof OffscreenCanvas)return new OffscreenCanvas(e,t);const n=document.createElement("canvas");return n.width=e,n.height=t,n}function uc(e,t){let n=0;const r=t.length;for(;ni)).then((e=>(e instanceof Request||(e=new Request(e)),e.headers.get("Accept")||e.headers.set("Accept","application/json"),r&&(r.request=e),fetch(e).then((function(e){return delete pc[t],e.ok?e.json():Promise.reject(new Error("Error fetching source "+t))})).catch((function(e){return delete pc[t],Promise.reject(new Error("Error fetching source "+t))})))));return pc[t]=[i,o],o}function gc(e,t){if("string"!=typeof e)return Promise.resolve(e);if(!e.trim().startsWith("{"))return hc("Style",e=Kl(e,t.accessToken),t);try{const t=JSON.parse(e);return Promise.resolve(t)}catch(e){return Promise.reject(e)}}const fc={};function mc(e,t,n={}){const r=[t,JSON.stringify(e)].toString();let i=fc[r];if(!i||n.transformRequest){let o;n.transformRequest&&(o=(e,t)=>{const r=n.transformRequest&&n.transformRequest(t,"Tiles")||t;if(e instanceof undefined.VectorTile)e.setLoader(((t,n,i)=>{(0,bo.toPromise)((()=>r)).then((n=>{fetch(n).then((e=>e.arrayBuffer())).then((n=>{const r=e.getFormat().readFeatures(n,{extent:t,featureProjection:i});e.setFeatures(r)})).catch((t=>e.setState(_o.ERROR)))}))}));else{const t=e.getImage();(0,bo.toPromise)((()=>r)).then((n=>{n instanceof Request?fetch(n).then((e=>e.blob())).then((e=>{const n=URL.createObjectURL(e);t.addEventListener("load",(()=>URL.revokeObjectURL(n))),t.addEventListener("error",(()=>URL.revokeObjectURL(n))),t.src=n})).catch((t=>e.setState(_o.ERROR))):t.src=n}))}});const a=e.url;if(a&&!e.tiles){const r=$l(a,n.accessToken,n.accessTokenParam||"access_token",t||location.href);if(a.startsWith("mapbox://"))i=Promise.resolve({tileJson:Object.assign({},e,{url:void 0,tiles:r}),tileLoadFunction:o});else{const e={};i=hc("Source",r[0],n,e).then((function(t){return t.tiles=t.tiles.map((function(r){return"tms"===t.scheme&&(r=r.replace("{y}","{-y}")),$l(r,n.accessToken,n.accessTokenParam||"access_token",e.request.url)[0]})),Promise.resolve({tileJson:t,tileLoadFunction:o})}))}}else e=Object.assign({},e,{tiles:e.tiles.map((function(r){return"tms"===e.scheme&&(r=r.replace("{y}","{-y}")),$l(r,n.accessToken,n.accessTokenParam||"access_token",t||location.href)[0]}))}),i=Promise.resolve({tileJson:Object.assign({},e),tileLoadFunction:o});fc[r]=i}return i}function yc(e,t,n,r){const i=[2*n*t.pixelRatio+t.width,2*n*t.pixelRatio+t.height],o=cc(i[0],i[1]),a=o.getContext("2d");a.drawImage(e,t.x,t.y,t.width,t.height,n*t.pixelRatio,n*t.pixelRatio,t.width,t.height);const s=a.getImageData(0,0,i[0],i[1]);a.globalCompositeOperation="destination-over",a.fillStyle=`rgba(${255*r.r},${255*r.g},${255*r.b},${r.a})`;const l=s.data;for(let e=0,r=s.width;e0&&a.arc(e,i,n*t.pixelRatio,0,2*Math.PI)}return a.fill(),o}function vc(e,t,n){const r=Math.max(0,Math.min(1,(n-e)/(t-e)));return r*r*(3-2*r)}function Ac(e,t,n){const r=cc(t.width,t.height),i=r.getContext("2d");i.drawImage(e,t.x,t.y,t.width,t.height,0,0,t.width,t.height);const o=i.getImageData(0,0,t.width,t.height),a=o.data;for(let e=0,t=o.width;e0?(a[i+0]=Math.round(255*n.r*l),a[i+1]=Math.round(255*n.g*l),a[i+2]=Math.round(255*n.b*l),a[i+3]=Math.round(255*l)):a[i+3]=0}return i.putImageData(o,0,0),r}const Cc=Array(256).join(" ");function bc(e,t){if(t>=.05){let n="";const r=e.split("\n"),i=Cc.slice(0,Math.round(t/.1));for(let e=0,t=r.length;e0&&(n+="\n"),n+=r[e].split("").join(i);return n}return e}let Ic;function _c(){return Ic||(Ic=cc(1,1).getContext("2d")),Ic}function Ec(e,t){return _c().measureText(e).width+(e.length-1)*t}const wc={};function Pc(e,t,n,r){if(-1!==e.indexOf("\n")){const i=e.split("\n"),o=[];for(let e=0,a=i.length;e1){const e=_c();e.font=t;const i=e.measureText("M").width*n;let s="";const l=[];for(let e=0,t=a.length;e1;++e){const n=l[e];if(Ec(n,r)<.35*i){const i=e>0?Ec(l[e-1],r):1/0,o=e.7*i&&Ec(o,r)<.6*i){const a=n.split(" "),s=a.pop();Ec(s,r)<.2*i&&(l[e]=a.join(" "),l[e+1]=s+" "+o),t-=1}}o=l.join("\n")}else o=e;o=bc(o,r),wc[i]=o}return o}const Sc=/font-family: ?([^;]*);/,Mc=/("|')/g;let xc;function Gc(e){if(!xc){xc={};const e=document.styleSheets;for(let t=0,n=e.length;t0&&"string"==typeof c[0]&&c[0]in ml);if(!o&&Al(r)&&(r=Uo(r,i),o=!0),o){const e=function(e,t){const n=El(e,t);if("error"===n.result)throw new Error(n.value.map((e=>`${e.key}: ${e.message}`)).join(", "));return n.value}(r,i);l[n]=e.evaluate.bind(e)}else"color"==i.type&&(r=Do.parse(r)),l[n]=function(){return r}}var c;return Oc.zoom=r,l[n](Oc,i,a)}function jc(e,t,n,r,i){if(!Uc(e,"layout",`${r}-allow-overlap`,t,n,i))return"declutter";return Uc(e,"layout",`${r}-ignore-placement`,t,n,i)?"none":"obstacle"}function Bc(e,t,n,r,i){return i||console.warn("No filterCache provided to evaluateFilter()"),e in i||(i[e]=xl(t).filter),Oc.zoom=r,i[e](Oc,n)}let Fc=!1;function zc(e,t){if(e){if(!Fc&&(0===e.a||0===t))return;const n=e.a;return t=void 0===t?1:t,0===n?"transparent":"rgba("+Math.round(255*e.r/n)+","+Math.round(255*e.g/n)+","+Math.round(255*e.b/n)+","+n*t+")"}return e}const Vc=/\{[^{}}]*\}/g;function qc(e,t){return e.replace(Vc,(function(e){return t[e.slice(1,-1)]||""}))}let Hc=!1;const Wc={};function Yc(e,t,n,r=lc,i=void 0,o=void 0,a=void 0,s=void 0){if("string"==typeof t&&(t=JSON.parse(t)),8!=t.version)throw new Error("glStyle version 8 required.");let l,c,u;if(Wc[ic(t,e)]=Array.from(arguments),o)if("undefined"!=typeof Image){const t=new Image;let n;(0,bo.toPromise)((()=>o)).then((e=>{e instanceof Request?fetch(e).then((e=>e.blob())).then((e=>{n=URL.createObjectURL(e),t.src=n})).catch((()=>{})):(t.crossOrigin="anonymous",t.src=e,n&&URL.revokeObjectURL(n))})),t.onload=function(){l=t,c=[t.width,t.height],e.changed(),t.onload=null}}else if("undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope){const e=self;e.postMessage({action:"loadImage",src:o}),e.addEventListener("message",(function(e){"imageLoaded"===e.data.action&&e.data.src===o&&(l=e.data.image,c=[l.width,l.height])}))}const d=Vl(t.layers),p={},h=[],g={},f={},m=oc(t),y=ac(t);let v;for(let e=0,r=d.length;e=M.maxzoom)continue;const k=M.filter;if(!k||Bc(x,k,E,I,y)){let r,d,y,v,x,k;P=M;const T=p.index;if(3==_&&("fill"==M.type||"fill-extrusion"==M.type))if(d=Uc(M,"paint",M.type+"-opacity",I,E,m,w),M.type+"-pattern"in L){const e=Uc(M,"paint",M.type+"-pattern",I,E,m,w);if(e){const t="string"==typeof e?qc(e,h):e.toString();if(l&&i&&i[t]){++S,k=b[S],k&&k.getFill()&&!k.getStroke()&&!k.getText()||(k=new Tt({fill:new jt}),b[S]=k),y=k.getFill(),k.setZIndex(T);const e=t+"."+d;let n=f[e];if(!n){const r=i[t],o=cc(r.width,r.height),a=o.getContext("2d");a.globalAlpha=d,a.drawImage(l,r.x,r.y,r.width,r.height,0,0,r.width,r.height),n=a.createPattern(o,"repeat"),f[e]=n}y.setColor(n)}}}else r=zc(Uc(M,"paint",M.type+"-color",I,E,m,w),d),M.type+"-outline-color"in L&&(x=zc(Uc(M,"paint",M.type+"-outline-color",I,E,m,w),d)),x||(x=r),(r||x)&&(++S,k=b[S],(!k||r&&!k.getFill()||!r&&k.getFill()||x&&!k.getStroke()||!x&&k.getStroke()||k.getText())&&(k=new Tt({fill:r?new jt:void 0,stroke:x?new Ft:void 0}),b[S]=k),r&&(y=k.getFill(),y.setColor(r)),x&&(v=k.getStroke(),v.setColor(x),v.setWidth(.5)),k.setZIndex(T));if(1!=_&&"line"==M.type){r="line-pattern"in L?void 0:zc(Uc(M,"paint","line-color",I,E,m,w),Uc(M,"paint","line-opacity",I,E,m,w));const e=Uc(M,"paint","line-width",I,E,m,w);r&&e>0&&(++S,k=b[S],k&&k.getStroke()&&!k.getFill()&&!k.getText()||(k=new Tt({stroke:new Ft}),b[S]=k),v=k.getStroke(),v.setLineCap(Uc(M,"layout","line-cap",I,E,m,w)),v.setLineJoin(Uc(M,"layout","line-join",I,E,m,w)),v.setMiterLimit(Uc(M,"layout","line-miter-limit",I,E,m,w)),v.setColor(r),v.setWidth(e),v.setLineDash(L["line-dasharray"]?Uc(M,"paint","line-dasharray",I,E,m,w).map((function(t){return t*e})):null),k.setZIndex(T))}let R,O,D,N,U,j,B,F,z,V=!1,q=null,H=0;if((1==_||2==_)&&"icon-image"in G){const t=Uc(M,"layout","icon-image",I,E,m,w);if(t){let r;R="string"==typeof t?qc(t,h):t.toString();const a=s?s(e,R):void 0;if(l&&i&&i[R]||a){const e=Uc(M,"layout","icon-rotation-alignment",I,E,m,w);if(2==_){const t=n.getGeometry();if(t.getFlatMidpoint||t.getFlatMidpoints){const n=t.getExtent();if(Math.sqrt(Math.max(Math.pow((n[2]-n[0])/o,2),Math.pow((n[3]-n[1])/o,2)))>150){const n="MultiLineString"===t.getType()?t.getFlatMidpoints():t.getFlatMidpoint();Nc||(Dc=[NaN,NaN],Nc=new Co("Point",Dc,[],2,{},void 0)),r=Nc,Dc[0]=n[0],Dc[1]=n[1];if("line"===Uc(M,"layout","symbol-placement",I,E,m,w)&&"map"===e){const e=t.getStride(),r=t.getFlatCoordinates();for(let t=0,i=r.length-e;t=l){H=Math.atan2(o-s,a-i);break}}}}}}if(2!==_||r){const t=Uc(M,"layout","icon-size",I,E,m,w),n=void 0!==L["icon-color"]?Uc(M,"paint","icon-color",I,E,m,w):null;if(!n||0!==n.a){const r=Uc(M,"paint","icon-halo-color",I,E,m,w),o=Uc(M,"paint","icon-halo-width",I,E,m,w);let s=`${R}.${t}.${o}.${r}`;if(null!==n&&(s+=`.${n}`),O=g[s],!O){const d=jc(M,I,E,"icon",m);let p;"icon-offset"in G&&(p=Uc(M,"layout","icon-offset",I,E,m,w).slice(0),p[0]*=t,p[1]*=-t);let h=n?[255*n.r,255*n.g,255*n.b,n.a]:void 0;if(a){const n={color:h,rotateWithView:"map"===e,displacement:p,declutterMode:d,scale:t};"string"==typeof a?n.src=a:(n.img=a,n.imgSize=[a.width,a.height]),O=new Nt(n)}else{const a=i[R];let s,g,f;o?a.sdf?(s=yc(Ac(l,a,n||[0,0,0,1]),{x:0,y:0,width:a.width,height:a.height,pixelRatio:a.pixelRatio},o,r),h=void 0):s=yc(l,a,o,r):(a.sdf?(u||(u=Ac(l,{x:0,y:0,width:c[0],height:c[1]},{r:1,g:1,b:1,a:1})),s=u):s=l,g=[a.width,a.height],f=[a.x,a.y]),O=new Nt({color:h,img:s,imgSize:c,size:g,offset:f,rotateWithView:"map"===e,scale:t/a.pixelRatio,displacement:p,declutterMode:d})}g[s]=O}}O&&(++S,k=b[S],k&&k.getImage()&&!k.getFill()&&!k.getStroke()||(k=new Tt,b[S]=k),k.setGeometry(r),O.setRotation(H+sc(Uc(M,"layout","icon-rotate",I,E,m,w))),O.setOpacity(Uc(M,"paint","icon-opacity",I,E,m,w)),O.setAnchor(Tc[Uc(M,"layout","icon-anchor",I,E,m,w)]),k.setImage(O),q=k.getText(),k.setText(void 0),k.setZIndex(T),V=!0,D=!1)}else D=!0}}}if(1==_&&"circle"===M.type){++S,k=b[S],k&&k.getImage()&&!k.getFill()&&!k.getStroke()||(k=new Tt,b[S]=k);const e="circle-radius"in L?Uc(M,"paint","circle-radius",I,E,m,w):5,t=zc(Uc(M,"paint","circle-stroke-color",I,E,m,w),Uc(M,"paint","circle-stroke-opacity",I,E,m,w)),n=Uc(M,"paint","circle-translate",I,E,m,w),r=zc(Uc(M,"paint","circle-color",I,E,m,w),Uc(M,"paint","circle-opacity",I,E,m,w)),i=Uc(M,"paint","circle-stroke-width",I,E,m,w),o=e+"."+t+"."+r+"."+i+"."+n[0]+"."+n[1];O=g[o],O||(O=new Ot({radius:e,displacement:[n[0],-n[1]],stroke:t&&i>0?new Ft({width:i,color:t}):void 0,fill:r?new jt({color:r}):void 0,declutterMode:"none"}),g[o]=O),k.setImage(O),q=k.getText(),k.setText(void 0),k.setGeometry(void 0),k.setZIndex(T),V=!0}if("text-field"in G){B=Math.round(Uc(M,"layout","text-size",I,E,m,w));const e=Uc(M,"layout","text-font",I,E,m,w);j=Uc(M,"layout","text-line-height",I,E,m,w),U=Zl(a?a(e,t.metadata?t.metadata["ol:webfonts"]:void 0):e,B,j),U.includes("sans-serif")||(U+=",sans-serif"),F=Uc(M,"layout","text-letter-spacing",I,E,m,w),z=Uc(M,"layout","text-max-width",I,E,m,w);const n=Uc(M,"layout","text-field",I,E,m,w);N="object"==typeof n&&n.sections?1===n.sections.length?n.toString():n.sections.reduce(((t,n,r)=>{const i=n.fontStack?n.fontStack.split(","):e,o=Zl(a?a(i):i,B*(n.scale||1),j);let s=n.text;if("\n"===s)return t.push("\n",""),t;if(2==_)return t.push(bc(s,F),o),t;s=Pc(s,o,z,F).split("\n");for(let e=0,n=s.length;e0&&t.push("\n",""),t.push(s[e],o);return t}),[]):qc(n,h).trim(),d=Uc(M,"paint","text-opacity",I,E,m,w)}if(N&&d&&!D){V||(++S,k=b[S],k&&k.getText()&&!k.getFill()&&!k.getStroke()||(k=new Tt,b[S]=k),k.setImage(void 0),k.setGeometry(void 0));const e=jc(M,I,E,"text",m);k.getText()||k.setText(q),q=k.getText(),(!q||"getDeclutterMode"in q&&q.getDeclutterMode()!==e)&&(q=new Vt({padding:[2,2,2,2],declutterMode:e}),k.setText(q));const t=Uc(M,"layout","text-transform",I,E,m,w);"uppercase"==t?N=Array.isArray(N)?N.map(((e,t)=>t%2?e:e.toUpperCase())):N.toUpperCase():"lowercase"==t&&(N=Array.isArray(N)?N.map(((e,t)=>t%2?e:e.toLowerCase())):N.toLowerCase());const n=Array.isArray(N)?N:2==_?bc(N,F):Pc(N,U,z,F);if(q.setText(n),q.setFont(U),q.setRotation(sc(Uc(M,"layout","text-rotate",I,E,m,w))),"function"==typeof q.setKeepUpright){const e=Uc(M,"layout","text-keep-upright",I,E,m,w);q.setKeepUpright(e)}const r=Uc(M,"layout","text-anchor",I,E,m,w),i=V||1==_?"point":Uc(M,"layout","symbol-placement",I,E,m,w);let o;if("line-center"===i?(q.setPlacement("line"),o="center"):q.setPlacement(i),"line"===i&&"function"==typeof q.setRepeat){const e=Uc(M,"layout","symbol-spacing",I,E,m,w);q.setRepeat(2*e)}q.setOverflow("point"===i);let a=Uc(M,"paint","text-halo-width",I,E,m,w);const s=Uc(M,"layout","text-offset",I,E,m,w),l=Uc(M,"paint","text-translate",I,E,m,w);let c=0,u=0;if("point"==i){o="center",-1!==r.indexOf("left")?(o="left",u=a):-1!==r.indexOf("right")&&(o="right",u=-a);const e=Uc(M,"layout","text-rotation-alignment",I,E,m,w);q.setRotateWithView("map"==e)}else q.setMaxAngle(sc(Uc(M,"layout","text-max-angle",I,E,m,w))*N.length/n.length),q.setRotateWithView(!1);q.setTextAlign(o);let p="middle";0==r.indexOf("bottom")?(p="bottom",c=-a-.5*(j-1)*B):0==r.indexOf("top")&&(p="top",c=a+.5*(j-1)*B),q.setTextBaseline(p);const h=Uc(M,"layout","text-justify",I,E,m,w);q.setJustify("auto"===h?void 0:h),q.setOffsetX(s[0]*B+u+l[0]),q.setOffsetY(s[1]*B+c+l[1]),C.setColor(zc(Uc(M,"paint","text-color",I,E,m,w),d)),q.setFill(C);const g=zc(Uc(M,"paint","text-halo-color",I,E,m,w),d);if(g&&a>0){A.setColor(g),a*=2;const e=.5*B;A.setWidth(a<=e?a:e),q.setStroke(A)}else q.setStroke(void 0);const f=Uc(M,"layout","text-padding",I,E,m,w),y=q.getPadding();f!==y[0]&&(y[0]=f,y[1]=f,y[2]=f,y[3]=f),k.setZIndex(T)}}}return S>-1?(b.length=S+1,Hc&&("set"in n?n.set("mapbox-layer",P):n.getProperties()["mapbox-layer"]=P),b):void 0};return e.setStyle(I),e.set("mapbox-source",v),e.set("mapbox-layers",h),e.set("mapbox-featurestate",e.get("mapbox-featurestate")||{}),I}function Zc(e,t=512){return e.getExtent()?(0,Pr.createXYZ)({extent:e.getExtent(),tileSize:t,maxZoom:22}).getResolutions():lc}function Jc(e,t){if(!t.accessToken){t=Object.assign({},t);new URL(e).searchParams.forEach(((e,n)=>{t.accessToken=e,t.accessTokenParam=n}))}return t}function Xc(e,t,n="",i={},o=void 0){let a,s,l,c,u=!0;return"string"==typeof n||Array.isArray(n)?c=n:(l=n,c=l.source||l.layers,i=l),"string"==typeof i?(a=i,l={}):(a=i.styleUrl,l=i),!1===l.updateSource&&(u=!1),o||(o=l.resolutions),a||"string"!=typeof t||t.trim().startsWith("{")||(a=t),a&&(a=a.startsWith("data:")?location.href:Kl(a,l.accessToken),l=Jc(a,l)),new Promise((function(n,i){gc(t,l).then((function(t){if(8!=t.version)return i(new Error("glStyle version 8 required."));if(!(e instanceof ri||e instanceof fi))return i(new Error("Can only apply to VectorLayer or VectorTileLayer"));const d=e instanceof fi?"vector":"geojson";if(c?s=Array.isArray(c)?t.layers.find((function(e){return e.id===c[0]})).source:c:(s=Object.keys(t.sources).find((function(e){return t.sources[e].type===d})),c=s),!s)return i(new Error(`No ${d} source found in the glStyle.`));function p(){if(!u)return Promise.resolve();if(e instanceof fi)return Qc(t.sources[s],a,l).then((function(t){const n=e.getSource();n?t!==n&&(n.setTileUrlFunction(t.getTileUrlFunction()),"function"==typeof n.setUrls&&"function"==typeof t.getUrls&&n.setUrls(t.getUrls()),n.format_||(n.format_=t.format_),n.getAttributions()||n.setAttributions(t.getAttributions()),n.getTileLoadFunction()===r.defaultLoadFunction&&n.setTileLoadFunction(t.getTileLoadFunction()),(0,Dr.equivalent)(n.getProjection(),t.getProjection())&&(n.tileGrid=t.getTileGrid())):e.setSource(t);const i=e.getSource().getTileGrid();!isFinite(e.getMaxResolution())&&!isFinite(e.getMinZoom())&&i.getMinZoom()>0&&e.setMaxResolution(dc(Math.max(0,i.getMinZoom()-1e-12),i.getResolutions()))}));const n=t.sources[s];let i=e.getSource();i&&i.get("mapbox-source")===n||(i=eu(n,a,l));const o=e.getSource();return o?i!==o&&(o.getAttributions()||o.setAttributions(i.getAttributions()),o.format_||(o.format_=i.getFormat()),o.url_=i.getUrl()):e.setSource(i),Promise.resolve()}let h,g,f,m;function y(){if(m||t.sprite&&!g)m?(e.setStyle(m),p().then(n).catch(i)):i(new Error("Something went wrong trying to apply style."));else{if(l.projection&&!o){const e=(0,Dr.get)(l.projection).getUnits();"m"!==e&&(o=lc.map((t=>t/Po.METERS_PER_UNIT[e])))}m=Yc(e,t,c,o,g,f,((e,t=l.webfonts)=>function(e,t="https://cdn.jsdelivr.net/npm/@fontsource/{font-family}/{fontweight}{-fontstyle}.css"){const n=e.toString();if(n in Lc)return Lc[n];const r=[];for(let t=0,n=e.length;t=1.5?.5:1;const n=.5==h?"@2x":"";let r=e.origin+e.pathname+n+".json"+e.search;new Promise((function(t,n){hc("Sprite",r,l).then(t).catch((function(i){r=e.origin+e.pathname+".json"+e.search,hc("Sprite",r,l).then(t).catch(n)}))})).then((function(t){if(void 0===t&&i(new Error("No sprites found.")),g=t,f=e.origin+e.pathname+n+".png"+e.search,l.transformRequest){const e=l.transformRequest(f,"SpriteImage")||f;(e instanceof Request||e instanceof Promise)&&(f=e)}y()})).catch((function(e){i(new Error(`Sprites cannot be loaded: ${r}: ${e.message}`))}))}else y()})).catch(i)}))}function Kc(e,t,n){const r=new yi({tileJSON:t,tileSize:e.tileSize||t.tileSize||512}),i=r.getTileJSON(),o=r.getTileGrid(),a=(0,Dr.get)(n.projection||"EPSG:3857"),s=function(e,t){const n=e.bounds;if(n){const e=(0,Dr.fromLonLat)([n[0],n[1]],t),r=(0,Dr.fromLonLat)([n[2],n[3]],t);return[e[0],e[1],r[0],r[1]]}return(0,Dr.get)(t).getExtent()}(i,a),l=a.getExtent(),c=i.minzoom||0,u=i.maxzoom||22,d={attributions:r.getAttributions(),projection:a,tileGrid:new wo({origin:l?(0,Wn.getTopLeft)(l):o.getOrigin(0),extent:s||o.getExtent(),minZoom:c,resolutions:Zc(a,t.tileSize).slice(0,u+1),tileSize:o.getTileSize(0)})};return Array.isArray(i.tiles)?d.urls=i.tiles:d.url=i.tiles,d}function Qc(e,t,n){return new Promise((function(i,o){mc(e,t,n).then((function({tileJson:t,tileLoadFunction:o}){const a=Kc(e,t,n);a.tileLoadFunction=o,a.format=new Ai,i(new r(a))})).catch(o)}))}function $c(e){return`{bbox-${(e?e.getCode():"EPSG:3857").toLowerCase().replace(/[^a-z0-9]/g,"-")}}`}function eu(e,t,n){const r=n.projection?new Rn({dataProjection:n.projection}):new Rn,i=e.data,a={};if("string"==typeof i){const[a]=$l(i,n.accessToken,n.accessTokenParam||"access_token",t||location.href);if(/\{bbox-[0-9a-z-]+\}/.test(a)){const t=(e,t,n)=>{const r=$c(n);return a.replace(r,`${e.join(",")}`)},i=new o({attributions:e.attribution,format:r,loader:(e,r,o,a,s)=>{hc("GeoJSON","function"==typeof t?t(e,r,o):t,n).then((e=>{const t=i.getFormat().readFeatures(e,{featureProjection:o});i.addFeatures(t),a(t)})).catch((t=>{i.removeLoadedExtent(e),s()}))},strategy:wr.bbox});return i.set("mapbox-source",e),i}const s=new o({attributions:e.attribution,format:r,url:a,loader:(e,t,r,i,o)=>{hc("GeoJSON",a,n).then((e=>{const t=s.getFormat().readFeatures(e,{featureProjection:r});s.addFeatures(t),i(t)})).catch((t=>{s.removeLoadedExtent(e),o()}))}});return s}a.features=r.readFeatures(i,{featureProjection:(0,Dr.getUserProjection)()||"EPSG:3857"});const s=new o(Object.assign({attributions:e.attribution,format:r},a));return s.set("mapbox-source",e),s}function tu(e){return tu="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},tu(e)}function nu(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=Array(t);n0&&n[0].getElementsByTagName("button")[0].click()};const gu={onPanelOpen:function(){hu(this.options.position,this.element.id.match(/(\w+)-[0-9]+/)[1])}},fu=ol.control.Control;var mu=__webpack_require__.n(fu);const yu=function(){return""!==getComputedStyle(document.documentElement).getPropertyValue("--blue-france-sun-113-625")};function vu(e){return vu="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},vu(e)}function Au(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function Cu(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function bu(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Iu(e,t){for(var n=0;n3?r.splice(3,r.length-1):[],void 0!==this.listeners[e]?this.listeners[e].push({scope:n,callback:t,args:r}):this.listeners[e]=[{scope:n,callback:t,args:r}]},removeEventListener:function(e,t,n){if(void 0!==this.listeners[e]){for(var r=this.listeners[e].length,i=[],o=0;o0;for(var i=0;i2?r.splice(2,r.length-1):[],r=[n].concat(r),void 0!==this.listeners[e]){var a=this.listeners[e].slice(),s=a.length;for(o=0;o=0&&t<=u.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?p+=":"+e:"symbol"==typeof e&&(p=void 0),u.name=e,u.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},u.methodFactory=n||d,u.getLevel=function(){return null!=l?l:null!=s?s:a},u.setLevel=function(e,t){return l=m(e),!1!==t&&h(l),c.call(u)},u.setDefaultLevel=function(e){s=m(e),g()||u.setLevel(e,!1)},u.resetLevel=function(){l=null,f(),c.call(u)},u.enableAll=function(e){u.setLevel(u.levels.TRACE,e)},u.disableAll=function(e){u.setLevel(u.levels.SILENT,e)},u.rebuild=function(){if(o!==u&&(a=m(o.getLevel())),c.call(u),o===u)for(var e in i)i[e].rebuild()},a=m(o?o.getLevel():"WARN");var y=g();null!=y&&(l=m(y)),c.call(u)}(o=new p).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=i[e];return t||(t=i[e]=new p(e,o.methodFactory)),t};var h=typeof window!==t?window.log:void 0;return o.noConflict=function(){return typeof window!==t&&window.log===o&&(window.log=h),o},o.getLoggers=function(){return i},o.default=o,o},void 0===(i="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=i)}()},3092:(e,t,n)=>{"use strict";var r=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==n.g)return n.g;throw new Error("unable to locate global object")}();e.exports=t=r.fetch,r.fetch&&(t.default=r.fetch.bind(r)),t.Headers=r.Headers,t.Request=r.Request,t.Response=r.Response}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(n.exports,n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};(()=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{ColorUtils:()=>xt,Config:()=>mE,Error:()=>dE,Helper:()=>pE,HelperUtils:()=>rn,LayerUtils:()=>or,Logger:()=>vt,MathUtils:()=>Oh,Parser:()=>en,Protocols:()=>hE,ProxyUtils:()=>Ct,Register:()=>_y,Services:()=>uE,date:()=>vE,olExtended:()=>CE,servicesDate:()=>gE,servicesVersion:()=>fE,version:()=>yE});const e=JSON.parse('{"rE":"1.0.0-beta.1-318","p6":"06/01/2025"}'),t=ol.Overlay;var n=__webpack_require__.n(t);const r=ol.source.VectorTile;var i=__webpack_require__.n(r);const o=ol.source.Vector;var a=__webpack_require__.n(o);const s=ol.source.TileWMS;var l=__webpack_require__.n(s);const c=ol.source.WMTS;var u=__webpack_require__.n(c);const d=ol.source.ImageWMS;var p=__webpack_require__.n(d);const h=ol.interaction;var g=__webpack_require__(3065);const f={getLogger:function(e){if(void 0===t)var t={env:{VERBOSE:!1}};t.env.VERBOSE?g.enableAll():g.disableAll();var n=e||"default";return g.getLogger(n)}};var m={PARAM_MISSING:"Parameter(s) '%var%' missing",PARAM_EMPTY:"Parameter(s) '%var%' empty",PARAM_TYPE:"Wrong type(s) for parameter(s) '%var%'",PARAM_FORMAT:"Parameter(s) '%var%' not correctly formatted",PARAM_NOT_SUPPORT:"Value(s) for parameter(s) '%var%' not supported",PARAM_NOT_SUPPORT_NODEJS:"Value(s) for parameter(s) '%var%' not supported to NodeJS",PARAM_UNKNOWN:"Value(s) for parameter(s) '%var%' unknown",SERVICE_REQUEST_BUILD:"An error occurred during the request building of the service",SERVICE_REQUEST_EMPTY:"The request sent to the service is empty",SERVICE_RESPONSE_EXCEPTION:"The service returned an exception : '%var%'",SERVICE_RESPONSE_EXCEPTION_2:"The service returned an exception",SERVICE_RESPONSE_ANALYSE:"An error occurred while parsing the response '%var%' of the service",SERVICE_RESPONSE_ANALYSE_2:"An unknown error occurred while parsing the response",SERVICE_RESPONSE_EMPTY:"The response of the service is empty",SERVICE_RESPONSE_EMPTY_2:"The response from the service could not be analyzed or is empty",SERVICE_RESPONSE_FORMAT:"The format of the service response is not supported (handled format(s) : '%var%')",SERVICE_RESPONSE_FORMAT_2:"The format of the service response is not supported",SERVICE_RESPONSE_FORMAT_3:"No suggestion matching the search",CLASS_CONSTRUCTOR:"'%var%' constructor cannot be called as a function.",getMessage:function(e,t){if(0===Object.keys(arguments).length)return"Message indefined !";var n=Array.prototype.slice.call(arguments),r=n.shift(),i=n,o=this[r];try{o=Array.isArray(i)&&i.length>0?o.replace("%var%",i.join(" - ")):o.replace("%var%","%var% (not specified)")}catch(e){}return o}};const y=m;var v={normalyzeParameters:function(e){var t=null;if(e){var n=[];for(var r in e)if(e.hasOwnProperty(r)){var i=e[r];i||(i=""),n.push(r+"="+i)}t=n.join("&")}return t},normalyzeUrl:function(e,t,n){var r=e;if(e){if(e.split("?").length-1>=2){var i=e.search(/\?/)+1;r=e.substring(0,i)+e.slice(i).replace(/\?/g,"&")}var o=e.indexOf("?");-1===o&&(r+="?"),-1!==o&&o!==e.length-1&&(r+="&")}return t&&(r+="string"==typeof t?t=t.replace("?",""):this.normalyzeParameters(t)),n&&(r=encodeURIComponent(r)),r},indent:function(e,t){return new Array((e||0)+1).join("\t")+t}};const A=v;var C=__webpack_require__(6964),b=__webpack_require__.n(C),I={call:function(e){var t=f.getLogger("XHR");if(t.trace("[XHR::call()]"),b().polyfill(),!e.url)throw new Error("missing parameter : url is not defined !");if(!e.method)throw new Error("missing parameter : method is not defined !");e.format||(e.format="text");var n={};switch(n.url=e.url,n.data=e.data?e.data:null,n.method=e.method,n.timeOut=e.timeOut||0,n.scope=e.scope||this,n.proxy=e.proxy||null,n.content=e.content||null,n.headers=e.headers||{referer:"http://localhost"},e.method){case"DELETE":case"GET":break;case"PUT":case"POST":n.content=e.content?e.content:"application/x-www-form-urlencoded",n.headers=e.headers?e.headers:{referer:"http://localhost"};break;case"HEAD":case"OPTIONS":throw new Error("HTTP method not yet supported !");default:throw new Error("HTTP method unknown !")}switch(e.format){case"text":this.__call(n).then((function(n){t.trace(n),e.onResponse.call(this,n)})).catch((function(t){e.onFailure.call(this,t)}));break;case"json":this.__callJSON(n).then((function(n){t.trace(n),e.onResponse.call(this,n)})).catch((function(t){e.onFailure.call(this,t)}));break;case"xml":this.__callXML(n).then((function(n){t.trace(n),e.onResponse.call(this,n)})).catch((function(t){e.onFailure.call(this,t)}));break;default:throw new Error("This output Format is not yet supported !")}},__call:function(e){var t=f.getLogger("XHR");return t.trace("[XHR::__call()]"),new Promise((function(n,r){var i="POST"===e.method||"PUT"===e.method?1:0;e.data&&("object"==typeof e.data&&Object.keys(e.data).length||"string"==typeof e.data&&e.data.length)&&!i&&(e.url=A.normalyzeUrl(e.url,e.data)),t.trace("URL = ",e.url);var o=null;if("undefined"==typeof window){var a=__webpack_require__(3092),s={headers:{Referer:"https://localhost"}};return e.data&&"string"==typeof e.data&&i&&(s={method:e.method,body:e.data,headers:{"Content-Type":e.content,Referer:"https://localhost"}}),a(e.url,s).then((function(e){if(e.ok)n(e.text());else{var t="Errors Occured on Http Request (status : '"+e.statusText+"' | url : '"+e.url+"')",i=e.status;r({message:t,status:i})}})).catch((function(e){r({message:e,status:-1})}))}if(window.XMLHttpRequest){t.trace("XMLHttpRequest"),(o=new XMLHttpRequest).open(e.method,e.url,!0),o.overrideMimeType=e.content;var l=null;e.timeOut>0&&(t.trace("XHR - TimeOut actif !"),l=window.setTimeout((function(){r({message:"TimeOut Occured on Http Request with XMLHttpRequest !",status:-1})}),e.timeOut)),i&&(t.trace("data = ",e.data),o.setRequestHeader("Content-type",e.content)),o.onerror=function(e){console.log(e),r(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},o.ontimeout=function(e){console.log(e),r(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},o.onreadystatechange=function(e){if(4===o.readyState)if(200===o.status)window.clearTimeout(l),n(o.response);else{var t="Errors Occured on Http Request (status : '"+e.target.statusText+"' | url : '"+e.target.responseURL+"' | response : '"+e.target.response+"')",i=e.target.status;r({message:t,status:i})}};var c=e.data&&i?e.data:null;o.send(c)}else{if(!window.XDomainRequest)throw new Error("CORS not supported");t.trace("XDomainRequest"),(o=new XDomainRequest).open(e.method,e.url),o.overrideMimeType=e.content,e.timeOut>0&&(o.timeout=e.timeout,t.trace("XHR - TimeOut actif !")),i&&o.setRequestHeader("Content-type",e.content),o.onerror=function(){r(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},o.ontimeout=function(){r(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},o.onload=function(e){if(200===o.status)n(o.responseText);else{var t="Errors Occured on Http Request (status : '"+e.target.statusText+"' | url : '"+e.target.responseURL+"')",i=e.target.status;r({message:t,status:i})}};var u=e.data&&i?e.data:null;o.send(u)}}))},__callJSON:function(e){return this.__call(e).then(JSON.parse).catch((function(t){console.log("_callJSON failed on : ",e.url,t)}))},__callXML:function(e){return this.__call(e).then((function(e){var t;"undefined"==typeof window?t=(new(0,__webpack_require__(8978).S4)).parseFromString(e,"text/xml"):window.DOMParser?t=(new window.DOMParser).parseFromString(e,"text/xml"):((t=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,t.loadXML(e));return t})).catch((function(t){console.log("__callXML failed on : ",e.url,t)}))}};const _=I;var E,w={uuid:(E=Math.floor(Date.now()),function(){return E++}),call:function(e){var t=f.getLogger("JSONP");if(t.trace("[JSONP::call ()]"),!e)throw t.error("missing parameter : options !"),new Error("missing parameter : options !");if(!e.url)throw t.error("missing parameter : options.url !"),new Error("missing parameter : options.url !");if(e.timeOut||(t.info("setting 'options.timeOut' default value"),e.timeOut=0),!e.onResponse)throw t.error("missing parameter : options.onResponse !"),new Error("missing parameter : options.onResponse !");var n="string"==typeof e.callbackSuffix?e.callbackSuffix:this.uuid(),r=!1,i=!1,o=e.url.indexOf("callback=");if(-1!==o){r=!0;var a=e.url.indexOf("&",o);-1===a&&(a=e.url.length);var s=e.url.substring(o+9,a);s&&(i=!0,e.callbackName=s,t.info("setting 'options.callbackName' value ("+e.callbackName+") from 'options.url' parameter"))}if(!r){var l=e.url.indexOf("?");-1===l?e.url=e.url+"?callback=":l===e.url.length?e.url=e.url+"callback=":e.url=e.url+"&callback=",t.info("setting callback default key in 'options.url' : "+e.url)}var c=!!e.callbackName||i;if(i||(e.callbackName||(t.info("setting 'options.callbackName' default value"),e.callbackName="callback",(n||""===n)&&(e.callbackName+=n)),e.url=e.url.replace("callback=","callback="+e.callbackName),t.info("setting callback function name in 'options.url' : "+e.url)),e.onTimeOut||(t.info("setting 'options.onTimeOut' default value"),e.onTimeOut=function(){console.log("TimeOut while invoking url : "+e.url)}),!c){var u=this,d=null;e.timeOut>0&&(d=window.setTimeout((function(){window[e.callbackName]=function(){},e.onTimeOut(),u._deleteScript(n)}),e.timeOut)),window[e.callbackName]=function(t){window.clearTimeout(d),e.onResponse(t),u._deleteScript(n)}}this._createScript(n,e.url)},_createScript:function(e,t){var n,r=document.getElementById("results"+e);(n=document.createElement("script")).setAttribute("type","text/javascript"),n.setAttribute("src",t),n.setAttribute("charset","UTF-8"),n.setAttribute("id","results"+e),n.setAttribute("async","true");var i=document.documentElement||document.getElementsByTagName("head")[0];null===r?i.appendChild(n):i.replaceChild(n,r)},_deleteScript:function(e){var t=document.getElementById("results"+e);if(t){var n=t.parentNode||document.documentElement;if(!n)return;n.removeChild(t)}}};const P=w;var S={send:function(e){var t=e||{method:"GET",protocol:"XHR",timeOut:0,format:null,wrap:!0,nocache:!0,output:"json",callback:null,callbackSuffix:null};if("undefined"!=typeof window||"JSONP"!==e.protocol){if("XHR"===e.protocol||"json"===e.format?t.wrap=!1:"JSONP"===e.protocol&&"xml"===e.format&&(t.wrap=!0),t.callback=null,t.output=t.wrap?"json":null,t.wrap){var n={};n.output=t.output,n.callback=t.callback,delete n.callback,t.url=A.normalyzeUrl(e.url,n)}switch(t.protocol){case"XHR":"GET"===e.method&&e.nocache&&(t.url=A.normalyzeUrl(t.url,{t:(new Date).getTime()})),_.call(t);break;case"JSONP":t.data&&(t.url=A.normalyzeUrl(t.url,t.data)),P.call(t);break;default:throw new Error("protocol not supported (XHR|JSONP) !")}}else console.log("Value (s) for parameter (s) 'protocol=JSONP (instead use XHR)' not supported to NodeJS")}};const M=S;function x(e){if(!(this instanceof x))throw new TypeError("ErrorService constructor cannot be called as a function.");var t=e;"string"==typeof e||e instanceof String?(this.message=e,this.status=-1,this.type=x.TYPE_UNKERR):(this.message=t.message||"undefined!?",this.type=t.type,this.status=t.status||-1),this.name="ErrorService",this.stack=(new Error).stack}x.TYPE_SRVERR="SERVICE_ERROR",x.TYPE_USEERR="USAGE_ERROR",x.TYPE_UNKERR="UNKNOWN_ERROR",x.prototype=Object.create(Error.prototype,{constructor:{value:x,writable:!0,configurable:!0}});const G=x,L=JSON.parse('{"rE":"3.4.6","p6":"19/12/2024"}');function k(e){if(!(this instanceof k))throw new TypeError(y.getMessage("CLASS_CONSTRUCTOR"));for(var t in this.logger=f.getLogger("CommonService"),this.logger.trace("[Constructeur CommonService (options)]"),this.options={protocol:"XHR",ssl:!0,proxyURL:"",callbackSuffix:null,httpMethod:"GET",timeOut:0,rawResponse:!1,scope:this,onSuccess:function(e){console.log("onSuccess - la reponse est la suivante : ",e)},onFailure:function(e){200!==e.status&&e.status?console.log("onFailure - Erreur (",e.status,") : ",e.message):console.log("onFailure : ",e.message)}},e)e.hasOwnProperty(t)&&(this.options[t]=e[t]);if(this.options.rawResponse&&!this.options.onSuccess&&(this.options.onSuccess=function(e){console.log("onSuccess - la réponse brute du service est la suivante : ",e)}),!!(null===this.options.onSuccess||"function"!=typeof this.options.onSuccess))throw new Error(y.getMessage("PARAM_MISSING","onSuccess()"));switch(this.options.httpMethod="string"==typeof e.httpMethod?e.httpMethod.toUpperCase():"GET",this.options.httpMethod){case"POST":case"GET":break;case"PUT":case"DELETE":case"HEAD":case"OPTIONS":throw new Error(y.getMessage("PARAM_NOT_SUPPORT","httpMethod"));default:throw new Error(y.getMessage("PARAM_UNKNOWN","httpMethod"))}switch(this.options.protocol="string"==typeof e.protocol?e.protocol.toUpperCase():"XHR",this.options.protocol){case"JSONP":case"XHR":break;default:throw new Error(y.getMessage("PARAM_UNKNOWN","protocol"))}if("undefined"==typeof window&&"JSONP"===this.options.protocol)throw new Error(y.getMessage("PARAM_NOT_SUPPORT_NODEJS","protocol=JSONP (instead use XHR)"));"JSONP"===this.options.protocol&&(this.options.httpMethod="GET"),this.options.nocache=e.nocache||!1,this.options.outputFormat=null,this.request=null,this.response=null}k.prototype={constructor:k,call:function(){this.logger.trace("CommonService::call ()");var e=this;function t(t){this.logger.trace("CommonService::onBuildRequest : ",t),this.callService.call(e,i,n)}function n(t){this.logger.trace("CommonService::onCallService : ",t),this.analyzeResponse.call(e,i,r)}function r(e){if(this.logger.trace("CommonService::onAnalyzeResponse : ",e),!e)return i.call(this,new G("Analyse de la reponse en échec !?"));this.options.onSuccess.call(this,e)}function i(e){this.logger.trace("CommonService::onError()");var t=e;t instanceof G||(t=new G(e.message)),this.options.onFailure.call(this,t)}(function(){this.logger.trace("CommonService::run ()"),this.buildRequest.call(e,i,t)}).call(e)},buildRequest:function(e,t){this.logger.error("overwritten method !"),e&&e.call(this,"This method must be overwritten !"),t.call(this,"This method must be overwritten !")},callService:function(e,t){var n=null,r=this.request,i=!(!this.options.proxyURL||"XHR"!==this.options.protocol),o={"gp-access-lib":L.rE};this.options.apiKey&&(o.apiKey=this.options.apiKey),this.options.serverUrl=A.normalyzeUrl(this.options.serverUrl,o,!1),i&&("GET"===this.options.httpMethod&&(n=this.options.proxyURL+A.normalyzeUrl(this.options.serverUrl,this.request,!0),r=null),"POST"===this.options.httpMethod&&(n=this.options.proxyURL+A.normalyzeUrl(this.options.serverUrl,null,!0),r=this.request));var a=this,s={url:n||this.options.serverUrl,method:this.options.httpMethod,protocol:this.options.protocol,timeOut:this.options.timeOut||0,format:this.options.outputFormat,nocache:this.options.nocache||!1,wrap:"XHR"!==this.options.protocol,callbackSuffix:this.options.callbackSuffix,data:r,headers:null,content:this.options.contentType||"application/xml",scope:this.options.scope||this,onResponse:function(n){a.logger.trace("callService::onResponse()");var r=null;if("XHR"===a.options.protocol&&(a.logger.trace("Response XHR",n),r=n),"JSONP"===a.options.protocol){if(a.logger.trace("Response JSON",n),!n)return void e.call(a,new G("Le contenu de la reponse est vide !?"));if(n.http){if(200!==n.http.status)return void e.call(a,new G({status:n.http.status,message:n.http.error,type:G.TYPE_SRVERR}));r=n.xml,a.options.rawResponse&&(r=n)}else r=n}if("function"==typeof a.options.onBeforeParse){var i=a.options.onBeforeParse(r);"string"==typeof i&&(r=i)}a.response=r,t.call(a,r)},onFailure:function(t){a.logger.trace("callService::onFailure()"),t.type=G.TYPE_SRVERR,e.call(a,new G(t))},onTimeOut:function(){a.logger.trace("callService::onTimeOut()"),e.call(a,new G("TimeOut!"))}};M.send(s)},analyzeResponse:function(e,t){this.logger.error("overwritten method !"),e&&e.call(this,"This method must be overwritten !"),t.call(this,"This method must be overwritten !")}};const T=k;var R={ssl:!0,newUrl:function(e){return(!1===R.ssl?"http://":"https://")+"data.geopf.fr"+e},Alti:{new_key:{"elevation-json":"/altimetrie/1.0/calcul/alti/rest/elevation.json","elevation-xml":"/altimetrie/1.0/calcul/alti/rest/elevation.xml","profil-json":"/altimetrie/1.0/calcul/alti/rest/elevationLine.json","profil-xml":"/altimetrie/1.0/calcul/alti/rest/elevationLine.xml"},newUrl:function(){return{"elevation-json":R.newUrl(this.new_key["elevation-json"]),"elevation-xml":R.newUrl(this.new_key["elevation-xml"]),"profil-json":R.newUrl(this.new_key["profil-json"]),"profil-xml":R.newUrl(this.new_key["profil-xml"])}}},ProcessIsoCurve:{new_key:"/navigation/isochrone",newUrl:function(){return R.newUrl(this.new_key)}},Config:{_key:"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/dist/",url:function(e){Array.isArray(e)||(e=e.split(","));for(var t=[],n=0;nn(e,{credentials:"same-origin"}).then((e=>{if(e.ok)return e.json().then((e=>e)).catch((e=>{throw new Error("Exception Json : "+e)}));throw new Error("Exception HTTP : "+e.status+" (status code) !")})).catch((e=>new Promise(((t,n)=>{n(e)})))),o=[];for(let e=0;e{if(!e)throw new Error("results config empty !?");e.forEach((e=>{this.listConfigResults.push(e)}))})).then((()=>{t.call(this,this.listConfigResults)})).catch((t=>{e.call(this,t)}))},B=function(e,t){this.listConfigResults=[];for(var n=0;nt||e__IDENTIFIER__\x3c!-- __DATAINPUTS__ --\x3e__RAWDATAOUTPUT__',input:"__KEY____DATA__"}},namespaceByDefault:function(){return['xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"','xmlns="http://www.opengis.net/wps/1.0.0"','xmlns:wfs="http://www.opengis.net/wfs"','xmlns:wps="http://www.opengis.net/wps/1.0.0"','xmlns:ows="http://www.opengis.net/ows/1.1"','xmlns:gml="http://www.opengis.net/gml"','xmlns:ogc="http://www.opengis.net/ogc"','xmlns:wcs="http://www.opengis.net/wcs/1.1.1"','xmlns:xlink="http://www.w3.org/1999/xlink"'].join(" ")},schemaLocationByDefault:function(){return'xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd"'},processRequestString:function(){this.logger.trace("WPS::processRequestString ()");var e="";if("POST"===this.method)e=this.template.post.value;else{if("GET"!==this.method)return this.logger.error("No other method supported by the service !"),!1;e=this.template.get.value}return e=(e=(e=(e=(e=e.replace(/__SERVICE__/g,this.paramservice)).replace(/__VERSION__/g,this.paramversion)).replace(/__RAWDATAOUTPUT__/g,this.paramrawdataoutput)).replace(/__IDENTIFIER__/g,this.paramidentifier)).replace(/__REQUEST__/g,this.paramrequest),"POST"===this.method&&(e=(e=e.replace(/__NAMESPACE__/g,this.namespaceByDefault)).replace(/__SCHEMALOCATION__/g,this.schemaLocationByDefault)),(e=e.replace(//g,this.__addDataInputs()))?(this.requestString=e,this.logger.trace("traduction tmpl",e),!0):(this.logger.warn("traduction tmpl : empty request !?"),!1)},__addDataInputs:function(){this.logger.trace("WPS::__addDataInputs ()");for(var e,t="GET"===this.method?this.template.get.input:this.template.post.input,n="GET"===this.method?";":"",r="",i=this,o=this.DataObject.getData(),a=0;a0)for(var o=n.getElementsByTagName("parsererror"),a=0;a0){var n=function(e){if(e.attributes.length>0){for(var t={},n=e.attributes,r=0;r0?t.index=t.filters.type[0]:t.index=t.filters.type),delete t.filters.type),t.filters.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),delete t.filters.bbox)),delete t.filterOptions),t.position&&(t.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),t.position.lon||(t.position.lon=t.position.x),delete t.position.x),t.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),t.position.lat||(t.position.lat=t.position.y),delete t.position.y)),t.returnFreeForm&&(this.logger.warn("The parameter 'returnFreeForm' is deprecated"),delete t.returnFreeForm),t.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete t.srs),t},Le.prototype.buildRequest=function(e,t){var n={httpMethod:this.options.httpMethod,geocodeMethod:"search",query:this.options.query,index:this.options.index,returnTrueGeometry:this.options.returnTrueGeometry,position:this.options.position,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=be.build(n),this.request?t.call(this,this.request):e.call(this,new G(y.getMessage("SERVICE_REQUEST_BUILD")))},Le.prototype.analyzeResponse=function(e,t){if(this.response){var n={response:this.response,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};Ge.build(n)}else e.call(this,new G(y.getMessage("SERVICE_RESPONSE_EMPTY")))};const ke=Le;function Te(e){if(!(this instanceof Te))throw new TypeError(y.getMessage("CLASS_CONSTRUCTOR","ReverseGeocode"));this.CLASSNAME="ReverseGeocode",this.logger=f.getLogger("Gp.Services.ReverseGeocode"),this.logger.trace("[Constructeur ReverseGeocode (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=O.ReverseGeocode.newUrl()),T.apply(this,[t]),t.searchGeometry)this.options.searchGeometry=t.searchGeometry;else if(!t.position)throw new Error(y.getMessage("PARAM_MISSING","searchGeometry"));if(t.index||(this.options.index=t.index="StreetAddress"),t.filters)for(var n=Object.keys(t.filters),r=0;r0?t.index=t.filterOptions.type[0]:t.index=t.filterOptions.type),delete t.filterOptions.type),t.filterOptions.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),t.searchGeometry||(t.searchGeometry=this.bbox2Json(t.filterOptions.bbox)),delete t.filterOptions.bbox),t.filterOptions.circle&&(this.logger.warn("The parameter 'filterOptions.circle' is deprecated"),t.searchGeometry||(t.searchGeometry=this.circle2Json(t.filterOptions.circle)),delete t.filterOptions.circle),t.filterOptions.polygon&&(this.logger.warn("The parameter 'filterOptions.polygon' is deprecated"),t.searchGeometry||(t.searchGeometry=this.polygon2Json(t.filterOptions.polygon)),delete t.filterOptions.polygon),!t.filters&&Object.keys(t.filterOptions).length>0&&(t.filters=t.filterOptions),delete t.filterOptions),t.position&&(t.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),t.position.lon||(t.position.lon=t.position.x),delete t.position.x),t.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),t.position.lat||(t.position.lat=t.position.y),delete t.position.y)),t.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete t.srs),t},Te.prototype.buildRequest=function(e,t){var n={httpMethod:this.options.httpMethod,geocodeMethod:"reverse",searchGeometry:this.options.searchGeometry,index:this.options.index,position:this.options.position,returnTrueGeometry:this.options.returnTrueGeometry,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=be.build(n),this.request?t.call(this,this.request):e.call(this,new G(y.getMessage("SERVICE_REQUEST_BUILD")))},Te.prototype.analyzeResponse=function(e,t){if(this.response){var n={response:this.response,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};Ge.build(n)}else e.call(this,new G(y.getMessage("SERVICE_RESPONSE_EMPTY")))},Te.prototype.bbox2Json=function(e){return{type:"Polygon",coordinates:[[[e.left,e.top],[e.right,e.top],[e.right,e.bottom],[e.left,e.bottom],[e.left,e.top]]]}},Te.prototype.circle2Json=function(e){return{type:"Circle",radius:e.radius,coordinates:[e.x,e.y]}},Te.prototype.polygon2Json=function(e){for(var t={type:"Polygon",coordinates:[[]]},n=0;n=5e4&&(this.distanceUnit="km",this.costValue/=1e3)):(this.costType="time",this.costValue=this.options.time)}nt.CLASSNAME="ProcessIsoCurveParam",nt.prototype={constructor:nt,getLocation:function(){return this.point.x+","+this.point.y},getDistanceUnit:function(){return"m"===this.distanceUnit?"meter":"km"===this.distanceUnit?"kilometer":""},getConstraints:function(){var e=[];if(0!==this.constraints.length)for(var t=0;t0)for(var r in t.noProxyDomains)if(n.trace("[ProxyUtils] proxifyUrl : analyzing "+t.noProxyDomains[r]),-1!==e.indexOf(t.noProxyDomains[r]))return n.info("[ProxyUtils] proxifyUrl : "+e+" found in noProxyDomains list ("+t.noProxyDomains[r]+")."),e;return t.proxyUrl+encodeURIComponent(e)}};const Ct=At;function bt(e){return bt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},bt(e)}var It=vt.getLogger("GfiUtils"),_t={getLayerFormat:function(e){var t="function"==typeof e.getType?e.getType():null,n=e.getSource();if(t){if("VECTOR"===t||"VECTOR_TILE"===t)return"vector";if("TILE"===t)return n.tileGrid?"wmts":"wms";if("IMAGE"===t)return"wms"}else{if(n instanceof l()||n instanceof p())return"wms";if(n instanceof u())return"wmts";if(n instanceof a()||n instanceof i())return"vector"}return"unknown"},displayInfo:function(e,t,r,i,o){if(It.trace("[Gfi] : displayInfo..."),i||(i="text/html"),null!==r){var a=null,s=r;s=(s=s.replace(/\n/g,"")).replace(/(>)\s*(<)/g,"$1$2");var l="undefined"!=typeof window?window:null;if("object"===("undefined"==typeof exports?"undefined":bt(exports))&&null===window)a=(new(0,__webpack_require__(8978).S4)).parseFromString(s,i);else if(l.DOMParser)a=(new l.DOMParser).parseFromString(s,i);else{if(!l.ActiveXObject)return It.log("Incompatible environment for DOM Parser !"),!1;(a=new l.ActiveXObject("Microsoft.XMLDOM")).async=!1,a.loadXML(s)}var c=a.getElementsByTagName("body");if(c&&1===c.length&&!c[0].hasChildNodes())return!1;var u=document.createElement("div");u.className="gp-feature-info-div";var d=document.createElement("button");d.className="gp-styling-button closer",d.onclick=function(){return e.featuresOverlay&&(e.removeOverlay(e.featuresOverlay),e.featuresOverlay=null),!1};var p=document.createElement("div");return p.className="gp-features-content-div",p.innerHTML=r,u.appendChild(p),u.appendChild(d),e.featuresOverlay&&(e.removeOverlay(e.featuresOverlay),e.featuresOverlay=null),e.featuresOverlay=new(n())({element:u,autoPan:o.autoPan,autoPanAnimation:o.autoPanAnimation,autoPanMargin:o.autoPanMargin,positioning:"bottom-center",insertFirst:!1,stopEvent:!0}),e.addOverlay(e.featuresOverlay),e.featuresOverlay.setPosition(t),e.featuresOverlay.render(),!0}},features2html:function(e,t){var n=document.createElement("div");return t.forEach((function(e){var t=e.getProperties();if(t.hasOwnProperty("render"))n.insertAdjacentHTML("beforeend",t.render);else{if(t.hasOwnProperty("name")){var r=document.createElement("div");r.className="gp-att-name-div",r.insertAdjacentHTML("afterbegin",t.name),n.appendChild(r)}if(t.hasOwnProperty("description")){var i=document.createElement("div");i.className="gp-att-description-div",i.insertAdjacentHTML("afterbegin",t.description),n.appendChild(i)}var o=null,a=!1,s=null,l=null,c=null,u=["fill","fill-opacity","stroke","stroke-opacity","stroke-width","marker-symbol","marker-color","marker-size","geometry","value","name","description","styleUrl","extensionsNode_","icon"];for(o in t)if(void 0!==t[o]&&-1===u.indexOf(o)){a||((s=document.createElement("div")).className="gp-att-others-div",l=document.createElement("ul"),a=!0),c=document.createElement("li");var d=document.createElement("span");d.className="gp-attname-others-span",d.appendChild(document.createTextNode(o+" : ")),c.appendChild(d),c.appendChild(document.createTextNode(t[o])),l.appendChild(c)}l&&(s.appendChild(l),n.appendChild(s))}}),e),n.hasChildNodes()||(n=null),n},layerGetFeatureAtCoordinates:function(e,t,n){var r=e.getPixelFromCoordinate(n);return e.hasFeatureAtPixel(r,(function(e){return e===t}))},displayVectorFeatureInfo:function(e,t,n,r){var i=e.getPixelFromCoordinate(t),o=[];if(e.forEachFeatureAtPixel(i,(function(e,t){(!n||n.indexOf(t)>-1)&&o.push(e)})),0===o.length)return!1;var a=this.features2html(e,o);return null!==a&&(this.displayInfo(e,t,a.innerHTML,"text/html",r),!0)},displayFeatureInfo:function(e,t,n,r,i){for(var o={},a=0;ae.getResolution()&&(m=!1),m&&g.maxResolution&&g.maxResolution255)throw new Error("'"+e+"'' is greater than 255(0xff);");return("0"+Number(e).toString(16)).slice(-2)},num:function(e){return parseInt(e,16)},arrayToRgba:function(e){if(!Array.isArray(e))throw new Error("Not an array !");var t=e[0],n=e[1],r=e[2],i=e[3]||1;return"rgba("+t+", "+n+", "+r+", "+parseFloat(i)+")"},arrayToHex:function(e){if(!Array.isArray(e))throw new Error("Not an array !");var t=e[0],n=e[1],r=e[2],i=e[3],o=[this.hex(t),this.hex(n),this.hex(r)],a={};return a.hex="#"+o.join(""),i&&(a.opacity=parseFloat(i)),a},rgbaToHex:function(e){var t=/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(0?.?\d+)\s*)?\)/.exec(e);if(!t)throw new Error("Invalid format: "+e);var n=t[1],r=t[2],i=t[3],o=t[4],a=[this.hex(n),this.hex(r),this.hex(i)],s={};return s.hex="#"+a.join(""),o&&(s.opacity=parseFloat(o)),s},hexToRgba:function(e,t){if(!e)throw new Error("Invalid format");e=e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,(function(e,t,n,r){return t+t+n+n+r+r}));var n=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return(n=n?{r:parseInt(n[1],16),g:parseInt(n[2],16),b:parseInt(n[3],16)}:null)?"rgba("+n.r+", "+n.g+", "+n.b+", "+t+")":null},isHex:function(e){if(!e)return!1;if("#"!==e.charAt(0))return!1;return!!/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e)},isRGB:function(e){if(!e)return!1;return!!/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(0?.?\d+)\s*)?\)/.exec(e)}};const xt=Mt;const Gt={lightOrange:"data:image/png;base64,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IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjkyYWVkNjM2LWY3MDMtNDAzOC1hNzM4LWZiYzYxYzZlMTljNCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5NWMzZWI3NC0zYWRmLTRkYzUtOWZjZS1iODQ4NTc3Nzg4ODQiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0NjI3ZDg3NC1lZDIyLTRiZTUtYTlkNS00NDlmMzVhZDIxYzgiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5Mjc4OTUzMDYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphM2U3ZWQ1MS0xNTI4LTRhYjAtODVjOS0zNzNkNzgxZGM2ZmMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjI3KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PofUkY4AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGRuA4VZTAAAFcElEQVRYw82YW2xbVRaGv7XP8bHjXByHQkNhWigdVX1AikRBMBoQ8wASl4fRqPDAAxIPKAVxeRqQRohHBEVCaoGKUBCl4qHcNKCZVKMRRQxtgTaACLRKqlwB14NzM2ni2D2XvXjgBFXQOnFiA1uy/HB89u9/7bX+vf4l1HnpK57hTNCE0AzqAS5gAAuEID5KiWSiLPf4tp7YUjcSu4yLZzdi2IJyNXANcBlwAdAKzAHTwDhwDKEPywC+GZWHbPi7IKOvZIWguAnlr8BtwJ+AxDJeDYCPgF6Ed0hkh+Weov5mZLTHJMDeBjwYk0itYJtKTOpZML3SbYNfnYz2SBr0buARYENcFytdFvga2AGyT7p14Vcjoz3ShOgdKDuAi+pUewpMIDyCypvSreWGk9HdroOEV2F4A1hfTxGJCX2D5U7U/UzuD6NaXq49NRJhBsOjwMVLEtE4gaL4W5cV3IsxPEoizDT0ZLTHcSH6M/BWLLlVwpQKuPzhb+i8sRkv04Y/e5rvPigxtnM9trKU2k0D28A5LN3RsmXbrbFOU8DtQLpqfJqu97nh6TydmzvwWpOI8VDbxqbrkmz62yk+/Ps6yoe8KkeV/hHHfgrMNyrNEkBX1SAktgRs3T7ApV1rSWayiEkDLmLSJDNZLu1ay9btAyS2BEsEuWuZ99WKyRhgHeCcn8wGw/qbOnAS3jmfOwmP9Td1kNhQDduJcUwjyciS0RJXMMkWkPPUo/z4XFxZRhZII8mEwFCsT+f5xXTE7FAOteduItVaZodyhNPVZDeKccJGkxmsChIMOvTt6aRSzIP+7A9rRKWYp29PJ8GgsyqcVauZSADaj+IDTecWvBlD4e01HKjM07XtOOuuy+A2X0BYmib/8SxfvLWRYm8LdqZaCvkI/SDBci6nld0ze7KCLa4F3gSurR4MB5x1FnMhiCeor9hJiPKmWpbGp3EU2IbJFuTe5XfStbczLxgP7K0IPcCFDWhnJoFuMAek2/oNbWdku/WxHATejT1JPZcPvINysFYiK+gAFkXTK6H+MyhXADeseJ9fmrVDM6X080/+p1M2/yFsD1zjEIauEeMAqNpQE16oaKiqwfjYeLk+fuYl10HDq7DsBTavxs8o6FzFKez/dM3rLx9LjUyVxcb7yVkfzmpXFbACJURHIxgyxkyu1ml6qL0Z4YX4xl7Jfrrgm9Ov9bX/e++x1tHCgkQ11lgELGA4sBp3iHRbH5GDwJPAFLXo6KJnDmTh/aG2w2/3t47VSGQxs1zAE9U2s9pEjx3hXuBloCa7G1rxv8o3f/7SkUz/UFFWMqGRWMpHAqsDbl00KGotIXM7MawF7gKSS5oJJRospI7v+rD96Ikp8aV2EgrkVPW4OnIy6SVL9ZubvZgyaOVyYDfwl2oNqVWiXNEb231oTe+/BrzvK9Gy01MFyoiOKzIEmqsEfjGf/39U1yHgosJFUXhlFMl+z9E/nkvhVNHZsjux+9Caf77RnyzMBaJLmW4RrWAlB3Y4Uh13HLOA4wQjo6O2IRPNxVV4JuG5Et2SSelzjtFLzsZQ0NIZ8/2rx7K9+/paxqbKvyh4Bc4AFQxzau23Dow7FS+nHmfEUz05OqINH8+evXJPJVOuE93XkY4eSziaXcQpB2b+vZNt7+/8IPPl2OxPRMJ4dDsLzIho3hpzamJ6aqJ0ei6qtZAasmZ2OS1RyOMd6egBIzSFVoKj4y1Hnvhv+8cD02ZOkEmgIKITVnXKWDs1ksvNrgbTbRSZ46cypY50aWcllIsyKXvr8GTyi9f6WvePFGVQhO8EPW2NzI+OfV2pF2bDTgbg8D/aJeVUspd1BK3/G24u7/skO3+iYP3h3LdhI/B+AGodUpo8WKwoAAAAAElFTkSuQmCC",darkOrange:"data:image/png;base64,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czpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjIxNDZjMzUzLWIxZjItNGVjOC04NzQ3LTIwMGEyYWExM2ViMyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2NGViNmI2Ni03Y2I2LTRkZGUtYTI3OS01MGY0ZWFiZGFhODAiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1ODRhM2VjZC1kNGFmLTQ3NjItYjA1ZS04ODk2MGQ4ZTk0Y2MiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5MDM3ODI2MTQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxYzNjOGRkZi1kMjVkLTQ4YzQtYTAwYS0yMmU3ZDYwMzg1YjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjAzKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PuhCAHgAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGQOTjc4FAAAFdklEQVRYw82YW2gcZRTHf+eb2dlkc9lsrFYr2notfSgWxKKiog8VvIFI9UFQEaWtYPFJfREfRRSEeqlttViLD/WGisYXrShWpfWC1WpSN5eN3cZumkuTzWY3c/mOD9lI0WSTTXbVA8M8zMz3n//5zvl/5xyhxqb3ewYvaERpAvUAFzCABUIQH6GAHyvKa76tJbbUjMRW4+LbC7GsQbgCWA+sAs4AWoA8MAxkgEMo32LoxDO98oIN/xdk9IGUYEYvRrgduAW4Gogt4NMA+BroQHkfm+qW3aP6n5HRTSYG9hZga5lEwyKWKZVJvQCmQ3bZ4F8no5skAXov8BiwspwXizUL9APPgOyVXTr5r5HRzdKI1TsRngHOqlHuKTCI8hhG3padWqw7GX3IddDwcixvAefXUkTKhH7HcBfifi8vh1E1H1cfGkGYxPI4cM68RGw5zf3y3S7IuedgeZwgTNZ1Z3Sz46LRNcA7Zcmd25yGgPWP/M7q65toTLZSHBvn6OcFDm07n6g0n9oNAxsR54DsjBYs2251QWAbgFuBREX/tF3rc9+zA6xa3U5jSxwxHmpbueyqOOvvOM7rj67g1JfedFTNagngVtR+B0zUK8xiwLqKTmhcE3Dblk4uXbecRDKFmATgIiZBIpni0nXLuW1LJ41rgnmcvG6B59WiyRhgBeDM+UZipWHthnbcmDf7b8Y81m5oJ7GyErZTxjH1JCPzesu4ghtvBpkjH2X6uXFlAVEg9SMjhEAamFsyp4Yjcuks1s6uXdZacuksU8OVZDcC0mW8OpFRQqBruvqdwwpdDh+9cjaF0QHQv/2wRhRGB6afdzkVkKZxtDoyVaqZBKCHEXygcXafjhi63l3G9tIEGzYe4ZKrksSbzmCqMEz6mzE+eedC+juaiUYqhZCPchgkqKB4SzxntqQEO7oceBu4srIzHIitsMTOBOMJ1leCkxAMmEpRWt6Vg8BGTConOxZeSVdfzmwxHmpvRtkJnFmHcuYksBkxH8tO69e1nJEd1sdhP/BBuUippfnA+3jsr5ZI9TnzV33mFcB/DuEi4LpFr/PPZu3LkanES08fOltWnxe2Ba5xCEPXiHEAVG2oMS9UNFTVINOXKdamn3nQdSC8HMMeYPVS+hkFzQdObl9m2Zu7+xt6hkKx5fXktGumdNXyZQUKiPZGkDbGnFxqp+kh9kaUHeUTezHr6WRkxt/oa/toT39Lby6QqMoci4BJDB8vpTtEdlkflf3A08AQ1ejoTM8cyeRnudYD72Zb+qokMhNZLuCJaqtZaqDLLi0i7EHYDVTV7oZW/J9PNf3wanfycLoki5nQSFnKewKrnW5NNMhtKRDlt6EsB+4G4vM2/UrUNd5w5Pl028FfiuJL9SQUyKrqEXXkaNyLF2o3N9vUYKB0AbAduKFSQWqVKFv0+rYfXdbx4aB3qqQLDk8VKCKaUSQNmi0F/ujAwB9RTYeAMwoXabg2QvZ5jl4ym8Ip6FjgDm7/bdl7bw3Ec/lItEJyWyAS0RJWsmC7I9WM45hJHCfo6e21dZlozlju3pjnSnRT0tMXHdFzT8dQ0EJoTr2eSXXs7W/uG/pnwiswBZQw5NXaYw5knJKXVY8p8VSP9vZo3cezp1v2nniDK9FD7V70RMxoaganGJmJT0+0frbtt+RPfVN/EQnLo9sxYEREB6wxxweHhwYL4/mo2kSqi43c5zRH8GS7Fz1shMZQJTg41PzVU7+2fdNZNHlBTgI5ER20qkPG2qGebHZsSTpULzJH8slCe6ywrWTlrGTM3tw9Ef/xjUzLvp6idIlwQtBxa2Sit6+/VCvMuu0MwIE726RBSqlViaDli6Gm4t6e1MQveet3Z4+F9cD7Ewo4WRJBbaaSAAAAAElFTkSuQmCC",red:"data:image/png;base64,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293bv2fa/f0ASM5yljz/NiUAAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmI5YjA2YTAwLWZkOTQtNDc5MC1hNzIzLTlkMGUwNGRiNTRlNyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1MTQ3ZGU5Yi1kOTA0LTRlNWYtYjIyYy0wZmMzOGRmMWI3ZGEiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YzBjNTI2YS1lYTkyLTQxYWItODM5Yy05OWFhYTM0YjdlYzciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE2NDAxNTU0MjYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowMjQ4MDc5ZS1kMTYyLTQxZmItOGViYS1lMzY2NTRiNGRjMjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjIwOjQwKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PkaovgIAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPFCiKn0kIAAAFfUlEQVRYw82YTWxc1RXHf+e+N2/GH+Px2IEEV02AgqIsIkwgoYS2ahepVGCBUOiCRRdsAAnECthErBBCICGFj4gqRQqBRSABUrVm1URtCSATJ5ASZCPHH0kGgx1/xJl5nvH7uIcFY4iIM/GzZyhHenqL994993/u+f/fOUeos+nNnkHCJoQWRD0UFzCARYhQCVB8NFWWTwNbT99SNxC3GZfIXg9sADYDWxCuRekEskARYQplFPgEOAr045ph6bXRzwKM3pEX5mduQLkHuAvYCqSW8GkIfAT0IBwknT8lH87o/w2M3mpSqL0LeLQKIrOMZSpVUC8hpkf6bPiTg9FbpBn0L8ATwLoqL5ZrFjgNPAeyV47p3E8GRjdLE6r3oTwHXF0n7ikwgfAEIvvlqJYbDkY3uw4a3YLyNrC2niJSBXQG4c+Ie0yORnGSj5OnRhzlUJ4ErrkikBAoAjPVe7ik4F6D8iRxlGvoyegmx4X4NwgHgM6a8fUyIfc8doZbf99Ca66N0uwF+v7tc3DnWoJK6gqep1C2g3NEjsdLlm03GXSbAe4GmmvGZ91vA3Y8P8aN6ztoyaYxxsPaNrbcnmbbvV/x9ONdnPnA+w71otaMcDfYPqDUmDQTUgjdNYPQsSHkgYf62di9mmwujzHNgIsxzWRzeTZ2r+aBh/rp2BDWDLLQjSzpf7VMMIpB6QKcy77Tuc6wdVsHbspbfJspj63bOuhcV8u3g9KFJtufWQbHakfLdQUv3YrI4qwQ+e65616Jr6mknE4KJgIGgctLZnEq5vRgAWsXLyKttZweLFCcqiW7cdVP1DgwQoQwUNPJxIDDG7vXMDszBvqjDWvM7MwYb+xew8SAUzNowgCSDEwyNVMJQU8AAdC06DvBtOG/76xirlLi3u0nufn2HJmWTir+FJ9+PMu7B66nr6eVYLpWCgUoJ0DCGoq3wv/MbXkhmlkN7Ad+XTMY4kBTl6XlKnA8IQ4U/xyUx8wlB3ZpKvcC23Hz49K79Ep6GeWM8VB7J8pfgasaUM6cAx5EzPvSZ4OGljNy1AYIh4C/L6lASWYBcBCHQ0mBJOfM94rk+WjwAsKvgN8te51LK7kPpm3zK89OrZH1v4zaQ9c4RJFrxDgAqjbSlBcpGqlqODoyWq5TP1OtnoU9wPqV9DMKWlRnfJ+/6q3XKpmhSRVbXU8uuhb6Hq1eVsBHdDiGQWPMuZV1mpuMB/aPCK8CXcsMjs6pufCm3/7PPZXs8LhKnJBjMTCH4f2VdIfIcRsgcgh4FpgkiY4u9Mwqc4fn2468M58dSQhkIbNcwBPVNrPSRJdjWgb2AK8BidrdSCX4PGw5/re53IlBK8uZ0EhVyodCq/1uXTTIzfrExZ0oq4H7gfQSmv54IMqcfNFv7/0ilkCSg1CgoKon1ZEv017ar9/cbEvGEFeuQ9mF8IdaBamFuBB7I7tKq3r+EXjnK0tPTxUoIzqqyCBooRIGM2NjX8d1HQIuKFys0cYY2eeJ3riYwinorHUndvmr3nt7Pj1eVNEa5LZALKIVrBTAnopVRx3HzOE44dDwsG3IRHPBxrtTnkv8p5yjLzvoLy72oaC+mvOvz+V79pZbRyYvJbwC80AFQ1GtPevAqFPxCuoxL57ql8ND2vDx7MVW2JTOuMQPdxDvSInmF/yU1ZT+Nd92eGcp97+RH4BE1XHHLDAtomPWmK8mpiYn/AvFOCmRGmLTm53WOOKpDhM/YqApQsLe+dYPnym1f9xvTVGQc8C4iE5Y1Ulj7eRQoTC7Ih1qFJiTQc7vwN9ZUbk6Z+ydp6L0Z2+Ws/uGrAyI8I2gF6yR0vDI6Uq9fDbsZACO3NQuGa3kr3XC7H+ClvJeP1/6IrbBqbNno0b4+xbMlmARngcRbAAAAABJRU5ErkJggg==",turquoiseBlue:"data:image/png;base64,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/MUi8H5G35QHBm+BvjV3bu1znD4AWZpV+gY4OARGS5S97vHu3u65/XunPb8fN2tyj8UDOK0AAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjEwNGNlNWFhLTE1YzctNGI4Yi1iOGU1LTFmYWQyNWFiYzBhZCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpkNDMyZTY1Zi0xOThhLTQxM2EtYWYyMy1jNzhlNzczNGRlN2QiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyNzExODVkMi03MWZiLTRhZDMtYTJmMi1iNjM3OWU3MDc1OTEiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE4NjYyMzgzMjQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NGFiYzNkYS1lZWJiLTRlZjctYjdjNS04ZDRjODY5OGVjODMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI0OjI2KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pj0tlUwAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGBru/VeEAAAABmJLR0QA/wD/AP+gvaeTAAAFO0lEQVRYw9WYe2xTVRzHTx97dYS5B1UHa+/tY12dDoOKWyIGlfgHkCkSNTHGwHxA3NiAP/A5x4CMKEzdYL29YyAyBxKQZbI+NvYIaowaH9Ogi2GRbGjcFrbBNrq2a2/9nq5LCFnbbfSOeZJPTs/t6Tm/7/39zu+cU0IiXc7WSImNX0BsZiVYAhigmah5tHklsZrjSYtJSuZtaeSiiJU3gHUwfC9oARfBIHBP1DzaPH1eRuzmp0E6aTgSNX9EWMwSvOkMGPgG+CpguG8a0H7nA78zkMYqye0V0lYXDSHrYUw7cE5TxM04/b+38+vJ+RPRt0eIjVeAAhhyCQizFDKJEBjndaCY49Di4+CRlzFxfwSE3Ciol9i4DSBujoRUy7HIszFxdwSF3CioBy8qm1g5ufhirHwyJqwHrrDGWTlg8hFL1URN2+EF0XFPkyYuSWwhUVgnT2CygXBG3dFcM7bz1/au1u7OK9/93eWidUlHe1dCc810EsUAsXOPQZCI3rGZ6Wb4EXAEM0SCUFnZduz6T/09l4bHXYOCz+f0+XxeWg+7XYM/4vnKtlqHJHSIOrAHlYMFYmawRNCKycaDGZLVfMRdf/nPDpfXM+abotDnpy93dtzXfNgdZg+im2uimJ6h66UTeIMZsrat1jvkdPRRb/imLt4hl6N3DfqFEIPvOMzDJYspJsWfbUKEyFNttcKoyzkKo4UgYoRRt3OE9guT1br984nsmQ7gCWbIipaj4xeu9v/hFQTPlG7B89+u9v9O+4UQQ8f/BSlaVM8kgBOhji4p9mpvwQ+Wfwddjp6bQw2u8g44HT3535/tTUa/0Eccvg4sFDE1m2PBZkx2LVRqVcLQvG/PDDX1/tVxze38x+UZH6O1He28b764qgwtxOcf327eBGLFE9NikiD3qzDZhVBJgCJH3KubDnkfbD4s5Jw74qM1bcvDnxq8/vHt1SrS9InIJ2m7OQ4UYsKhCB9lJqHj0gPsHJzPvsS9w8rRRPDptI40M8PlH9fOJ5M5K008rsZmIwi5gc4QN9Zja8zn+5epch9PTFepU1iGuVunVqeyS9g0iv8zy96l0WiSjIsXx28iJEJhaONkMGB5YP14bkmI1SzIz1T0pRa9VKnNzCjUMcwWUAS2BtgWYLJN+xTo1OyrOhW7xsAwqnSGkd3i+uGjkT5Xw6DLt3AdEKQNB4YXbdtwQpuVuRtG7pwhxWA7vJgRib0nDuSDvtkIkjYcHE3aVWjRLL9/zyyETPK2Vq3OidAaOhiPDLcbxo3MRIik0eReWPnO15pHHiqbpYhS6hkNw7wAz0To6GM5hAzH3wkDa6b7x4bEwnkUfMnP6idX7Nex7GxElIDNerV6hU6jSdbp9RHck2w0w/FaGGoJm7KtnCfmWNlF1fOrK3Q6bekMRFABO7QM8yxewFLUi+5JSxPpAmcxy0gjt1Rytir4NcHKCfJTH/al5j1j1hr0pWEML55YD+x2GP6cVqNZZjQYEvUsG4vP4v8jKju5L1p6qnytxGKa6qogyOorBpVbXvxMe69xdxABb9I0DAGvIIRWp7NsBsJIoWVZKfaXuf+jMKp2b6z8+Adb4aErNwpCCh5J2pnfoH0ga08g7invBfaQjXjjuQifhyEgLdNolJP5UqR17y+QnSwvk1i565OZK6F8RzubvWwvDH8LvKZnmHXY8HKws+sNLJtI5muJ/7hYElOzJ1V+fN9R7CVDClPJOVXuqo06vS4HQjTwgDKDZRXk/1JiD7wrieFLk6T1lczCXUVK7aPZinS9XrTw+Q+Tql7SUmvGuQAAAABJRU5ErkJggg==",defaultOffset:[-25.5,-32]},Lt=ol.Feature;var kt=__webpack_require__.n(Lt);const Tt=ol.style.Style;var Rt=__webpack_require__.n(Tt);const Ot=ol.style.Circle;var Dt=__webpack_require__.n(Ot);const Nt=ol.style.Icon;var Ut=__webpack_require__.n(Nt);const jt=ol.style.Fill;var Bt=__webpack_require__.n(jt);const Ft=ol.style.Stroke;var zt=__webpack_require__.n(Ft);const Vt=ol.style.Text;var qt=__webpack_require__.n(Vt);const Ht=ol.geom.Polygon;var Wt=__webpack_require__.n(Ht);const Yt=ol.geom.MultiPolygon;var Zt=__webpack_require__.n(Yt),Jt=vt.getLogger("styling");kt().prototype.setPropertyFill=function(){var e=this.getStyle();if(e&&(!Array.isArray(e)||0!==e.length)){var t=e.getFill();if(t){var n=t.getColor();if(Array.isArray(n)){var r="rgba(";r+=n[0]+",",r+=n[1]+",",r+=n[2]+",",n=r+=n[3]+")"}if(xt.isRGB(n)){var i=xt.rgbaToHex(n);this.set("fill",i.hex),this.set("fill-opacity",i.opacity)}else this.set("fill",n),this.set("fill-opacity",1)}}},kt().prototype.setPropertyStroke=function(){var e=this.getStyle();if(e&&(!Array.isArray(e)||0!==e.length)){var t=e.getStroke();if(t){var n=t.getColor();if(Array.isArray(n)){var r="rgba(";r+=n[0]+",",r+=n[1]+",",r+=n[2]+",",n=r+=n[3]+")"}if(xt.isRGB(n)){var i=xt.rgbaToHex(n);this.set("stroke",i.hex),this.set("stroke-opacity",i.opacity)}else this.set("stroke",n),this.set("stroke-opacity",1);this.set("stroke-width",t.getWidth())}}},kt().prototype.setPropertyLabel=function(){var e=this.getStyle();if(e&&(!Array.isArray(e)||0!==e.length)){var t=void 0!==this.get("name");if(e.getText()&&t){var n=e.getText().getFill();if(n){var r=n.getColor();if(Array.isArray(r)){var i="rgba(";i+=r[0]+",",i+=r[1]+",",i+=r[2]+",",r=i+=r[3]+")"}if(xt.isRGB(r)){var o=xt.rgbaToHex(r);this.set("label-fill",o.hex),this.set("label-fill-opacity",o.opacity)}else this.set("label-fill",r),this.set("label-fill-opacity",1)}var a=e.getText().getStroke();if(a){var s=a.getColor();if(Array.isArray(s)){var l="rgba(";l+=s[0]+",",l+=s[1]+",",l+=s[2]+",",s=l+=s[3]+")"}if(xt.isRGB(s)){var c=xt.rgbaToHex(s);this.set("label-stroke",c.hex),this.set("label-stroke-opacity",c.opacity)}else this.set("label-stroke",s),this.set("label-stroke-opacity",1);this.set("label-stroke-width",a.getWidth())}this.set("label-font",e.getText().getFont()||Xt.DEFAULT_TEXT.font),this.set("label-textAlign",e.getText().getTextAlign()||Xt.DEFAULT_TEXT.textAlign)}}},kt().prototype.setPropertyMarker=function(){var e=this.getStyle();if(e&&(!Array.isArray(e)||0!==e.length)){var t=e.getImage();if(t)if(t instanceof Ut()){var n=t.getColor();if(Array.isArray(n)){var r="rgba(";r+=n[0]+",",r+=n[1]+",",r+=n[2]+",",n=r+=n[3]+")"}if(n){var i=xt.rgbaToHex(n);this.set("marker-color",i.hex)}var o=t.getScale();switch(Math.round(2*o)/2){case 0:case.5:this.set("marker-size","small");break;case 1:this.set("marker-size","medium");break;case 1.5:case 2:this.set("marker-size","large")}var a=t.getSrc();a&&this.set("marker-symbol",a),this.unset("circle-fill"),this.unset("circle-fill-opacity"),this.unset("circle-stroke"),this.unset("circle-stroke-width"),this.unset("circle-stroke-opacity"),this.unset("circle-radius")}else{var s=t.getFill();if(s){var l=s.getColor();if(Array.isArray(l)){var c="rgba(";c+=l[0]+",",c+=l[1]+",",c+=l[2]+",",l=c+=l[3]+")"}if(xt.isRGB(l)){var u=xt.rgbaToHex(l);this.set("circle-fill",u.hex),this.set("circle-fill-opacity",u.opacity)}else this.set("circle-fill",l),this.set("circle-fill-opacity",1)}var d=t.getStroke();if(d){var p=d.getColor();if(Array.isArray(p)){var h="rgba(";h+=p[0]+",",h+=p[1]+",",h+=p[2]+",",p=h+=p[3]+")"}if(xt.isRGB(p)){var g=xt.rgbaToHex(p);this.set("circle-stroke",g.hex),this.set("circle-stroke-opacity",g.opacity)}else this.set("circle-stroke",p),this.set("circle-stroke-opacity",1);this.set("circle-stroke-width",d.getWidth())}var f=t.getRadius();this.set("circle-radius",f)}}};var Xt={APPLY_CONVERT_GEOM_GPX:!0,DEFAULT_ICON:{src:Gt.lightOrange,anchor:[.5,1],scale:1},DEFAULT_CIRCLE:{radius:10,fill:{opacity:1,color:[0,0,0,1]},stroke:{width:1,opacity:1,color:[0,0,0,1]}},DEFAULT_STROKE:{width:5,opacity:1,color:[250,250,250,1]},DEFAULT_FILL:{opacity:1,color:[0,0,0,1]},DEFAULT_TEXT:{font:"16px sans",textAlign:"left",stroke:{color:[250,250,250,1],width:5,opactity:1},fill:{opacity:1,color:[0,0,0,1]}},getListTags:function(){return["type","fill","fill-opacity","stroke","stroke-opacity","stroke-width","circle-fill","circle-fill-opacity","circle-stroke","circle-stroke-opacity","circle-stroke-width","circle-radius","marker-symbol","marker-color","marker-size","label-fill","label-fill-opacity","label-stroke","label-stroke-width","label-stroke-opacity","label-font","label-textAlign"]},defineStyleFromProperties:function(e){var t=null,n={},r=null;if(e.get("marker-color")||e.get("marker-size")||e.get("marker-symbol")){(r={}).src=this.DEFAULT_ICON.src,r.anchor=this.DEFAULT_ICON.anchor;var i=e.get("marker-symbol");i&&-1!==i.search("data:image/png;base64")&&(r.src=i);var o=e.get("marker-color");xt.isHex(o)&&(r.color=xt.hexToRgba(o,1));var a=e.get("marker-size");if(a)switch(a){case"small":r.scale=.5;break;case"medium":r.scale=1;break;case"large":r.scale=1.5;break;default:r.scale=this.DEFAULT_ICON.scale}}var s=null;(e.get("stroke")||e.get("stroke-opacity")||e.get("stroke-width"))&&((s={}).color=xt.hexToRgba(e.get("stroke"),+e.get("stroke-opacity")||this.DEFAULT_STROKE.opacity),s.width=+e.get("stroke-width")||this.DEFAULT_STROKE.width);var l=null;(e.get("fill")||e.get("fill-opacity"))&&((l={}).color=xt.hexToRgba(e.get("fill"),+e.get("fill-opacity")||this.DEFAULT_FILL.opacity));var c=null,u=null,d=""!==e.get("name");d&&((e.get("label-fill")||e.get("label-fill-opacity"))&&((u={}).color=xt.hexToRgba(e.get("label-fill"),+e.get("label-fill-opacity")||this.DEFAULT_TEXT.fill.opacity)),(e.get("label-stroke")||e.get("label-stroke-opacity")||e.get("label-stroke-width"))&&((c={}).color=xt.hexToRgba(e.get("label-stroke"),+e.get("label-stroke-opacity")||this.DEFAULT_TEXT.stroke.opacity),c.width=+e.get("label-stroke-width")||this.DEFAULT_TEXT.stroke.width));var p=e.get("circle-radius")||this.DEFAULT_CIRCLE.radius,h=null;(e.get("circle-stroke")||e.get("circle-stroke-opacity")||e.get("circle-stroke-width"))&&((h={}).color=xt.hexToRgba(e.get("circle-stroke"),+e.get("circle-stroke-opacity")||this.DEFAULT_CIRCLE.stroke.opacity),h.width=+e.get("circle-stroke-width")||this.DEFAULT_CIRCLE.stroke.width);var g=null;if((e.get("circle-fill")||e.get("circle-fill-opacity"))&&((g={}).color=xt.hexToRgba(e.get("circle-fill"),+e.get("circle-fill-opacity")||this.DEFAULT_CIRCLE.fill.opacity)),e.getGeometry()){var f=e.getGeometry().getType();switch(f){case"Circle":case"Point":case"MultiPoint":var m=!1,y={};if(h&&(y.stroke=new(zt())(h)),g&&(y.fill=new(Bt())(g)),0!==Object.keys(y).length&&(m=!0,y.radius=+p,n.image=new(Dt())(y)),r&&(n.image=new(Ut())(r)),d){var v={};if(c&&(v.stroke=new(zt())(c)),u&&(v.fill=new(Bt())(u)),0!==Object.keys(v).length)v.text=e.get("name"),v.textAlign=e.get("label-textAlign")||this.DEFAULT_TEXT.textAlign,v.font=e.get("label-font")||this.DEFAULT_TEXT.font,n.text=new(qt())(Object.assign({},this.DEFAULT_TEXT,v));else if(r||m){var A=new(qt())(Object.assign({},this.DEFAULT_TEXT,{fill:new(Bt())(this.DEFAULT_TEXT.fill),stroke:new(zt())(this.DEFAULT_TEXT.stroke)}));if(A){var C=A.clone();C.setText(e.get("name")),n.text=C}}}break;case"Polygon":case"MultiPolygon":s&&(n.stroke=new(zt())(s)),l&&(n.fill=new(Bt())(l));break;case"LineString":case"MultiLineString":if(s&&(n.stroke=new(zt())(s)),this.APPLY_CONVERT_GEOM_GPX&&l){var b=e.get("type");if(b&&("Polygon"===b||"MultiPolygon"===b)){n.fill=new(Bt())(l);var I=e.clone(),_="LineString"===f?Wt():Zt();e.setGeometry(new _([I.getGeometry().getCoordinates()]))}}}}return 0!==Object.keys(n).length&&(t=new(Rt())(n)),t},defineStyleFunctionByDefault:function(e){if(!e)return[];if(0===Object.keys(e).length)return[];return function(t,n){if(t.getGeometry()){var r=null;switch(t.getGeometry().getType()){case"Point":case"MultiPoint":var i={};if(e.getImage()&&(i.image=e.getImage()),e.getText()&&t.get("name")){var o=e.getText().clone();o.setText(t.get("name")),i.text=o}r=new(Rt())(i);break;case"Circle":var a={},s={};if(e.getFill()&&(s.fill=e.getFill()),e.getStroke()&&(s.stroke=e.getStroke()),e.getText()&&t.get("name")){var l=e.getText().clone();l.setText(t.get("name")),a.text=l}0!==Object.keys(s).length&&(s.radius=3,a.image=new(Dt())(s)),r=new(Rt())(a);break;case"Polygon":case"MultiPolygon":var c={};e.getFill()&&(c.fill=e.getFill()),e.getStroke()&&(c.stroke=e.getStroke()),r=new(Rt())(c);break;case"LineString":case"LinearRing":case"MultiLineString":var u={};e.getStroke()&&(u.stroke=e.getStroke()),r=new(Rt())(u)}return[r]}}},definePropertiesFromStyleByType:function(e){if(e.getGeometry())switch(e.getGeometry().getType()){case"Point":case"MultiPoint":e.setPropertyMarker(),e.setPropertyLabel();break;case"LineString":case"MultiLineString":e.setPropertyStroke();break;case"Polygon":case"MultiPolygon":e.setPropertyStroke(),e.setPropertyFill()}},definePropertiesFromStyle:function(e){var t=e.getStyle()||e.getStyleFunction();if(t){if("function"==typeof t){var n=t.call(this,e,0);if(!n||0===n.length)return;t=Array.isArray(n)?n[0]:n,e.setStyle(t)}this.definePropertiesFromStyleByType(e)}},defineTagFromStyle:function(e,t){return Jt.trace("todo..."),null}};const Kt=Xt;function Qt(e){return Qt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Qt(e)}var $t=vt.getLogger("parser");const en={parse:function(e){var t=null,n="undefined"!=typeof window?window:null;"object"===("undefined"==typeof exports?"undefined":Qt(exports))&&null===window?t=(new(0,__webpack_require__(8978).S4)).parseFromString(e,"text/xml"):n.DOMParser?t=(new n.DOMParser).parseFromString(e,"text/xml"):n.ActiveXObject?((t=new n.ActiveXObject("Microsoft.XMLDOM")).async=!1,t.loadXML(e)):$t.log("Incompatible environment for DOM Parser !");var r=t.querySelector("parsererror");return r?(console.error(r),null):($t.trace(t),t)},toString:function(e){var t=(new XMLSerializer).serializeToString(e);return $t.trace(t),t},format:function(e){for(var t="",n=(e=e.replace(/(>)\s*(<)(\/*)/g,"$1\n$2$3").replace(/ *(.*) +\n/g,"$1\n").replace(/(<.+>)(.+\n)/g,"$1\n$2")).split("\n"),r=0,i="other",o={"single->single":0,"single->closing":-1,"single->opening":0,"single->other":0,"closing->single":0,"closing->closing":-1,"closing->opening":0,"closing->other":0,"opening->single":1,"opening->closing":0,"opening->opening":1,"opening->other":1,"other->single":0,"other->closing":-1,"other->opening":0,"other->other":0},a=0;a/)),c=Boolean(s.match(/<\/.+>/)),u=Boolean(s.match(/<[^!].*>/)),d=l?"single":c?"closing":u?"opening":"other",p=i+"->"+d;i=d;var h="";r+=o[p];for(var g=0;gclosing"===p?t=t.substr(0,t.length-1)+s+"\n":t+=h+s+"\n"}return $t.trace(t),t}};function tn(e){return tn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},tn(e)}var nn={detectSupport:function(){var e=!0,t=window.navigator.userAgent.toLowerCase();return-1===t.indexOf("iphone")&&-1===t.indexOf("ipod")&&-1===t.indexOf("ipad")&&-1===t.indexOf("android")&&-1===t.indexOf("mobile")&&-1===t.indexOf("blackberry")&&-1===t.indexOf("tablet")&&-1===t.indexOf("phone")&&-1===t.indexOf("touch")||(e=!1),-1===t.indexOf("msie")&&-1===t.indexOf("trident")||(e=!0),e},assign:function(e,t){for(var n in e=e||{},t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e},mergeParams:function(e,t,n){if(void 0!==e&&void 0!==t)for(var r in void 0===n&&(n=!0),t)t.hasOwnProperty(r)&&("object"===tn(t[r])?e.hasOwnProperty(r)?this.mergeParams(e[r],t[r],n):e[r]=t[r]:e.hasOwnProperty(r)?n&&(e[r]=t[r]):e[r]=t[r])}};const rn=nn;function on(e){return on="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},on(e)}function an(e,t){for(var n=0;n)\s*(<)/g,"$1$2"),null===(r=en.parse(o)))return i;function a(e){var t="";t+=e.substr(6,2),t+=e.substr(4,2),t+=e.substr(2,2);for(var n=parseInt(t,16).toString(16),r="",i=n.length||0,o=0;o<6-i;o++)r+="0";return n="#"+r+n}var s=function(e,t){if(gn.trace("label with style :",t),e){for(var n=e.getProperties().name,r=a("ff000000"),i="#FFFFFF",o=0,s="Sans",l="16px",c=null,u=5,d="#000000",p="#ffffff",h=1,g=!1,f=!1,m=t.childNodes,y=0;yt&&(r=!1),r&&p&&p1?(n=i,r=o):l>0&&(n+=a*l,r+=s*l)}return function(e,t,n,r){const i=n-e,o=r-t;return i*i+o*o}(e,t,n,r)}function Gi(e,t,n,r,i,o,a){const s=(n-t)/r;if(s<3){for(;t0;){const n=c.pop(),o=c.pop();let a=0;const s=e[o],d=e[o+1],p=e[n],h=e[n+1];for(let t=o+r;ta&&(u=t,a=n)}a>i&&(l[(u-t)/r]=1,o+r0&&g>p)&&(h<0&&f0&&f>h)?(s=n,l=d):(o[a++]=s,o[a++]=l,c=s,u=l,s=n,l=d)}return o[a++]=s,o[a++]=l,a}function Ri(e,t,n,r,i,o,a,s){for(let l=0,c=n.length;lt?1:eo&&(n-s)*(o-l)-(i-s)*(r-l)>0&&a++:r<=o&&(n-s)*(o-l)-(i-s)*(r-l)<0&&a--,s=n,l=r}return 0!==a}function Ui(e,t,n,r,i,o){if(0===n.length)return!1;if(!Ni(e,t,n[0],r,i,o))return!1;for(let t=1,a=n.length;ty&&(c=(u+d)/2,Ui(e,t,n,r,c,g)&&(m=c,y=i)),u=d}return isNaN(m)&&(m=i[o]),a?(a.push(m,g,y),a):[m,g,y]}const Bi={radians:6370997/(2*Math.PI),degrees:2*Math.PI*6370997/360,ft:.3048,m:1,"us-ft":1200/3937};const Fi=class{constructor(e){this.code_=e.code,this.units_=e.units,this.extent_=void 0!==e.extent?e.extent:null,this.worldExtent_=void 0!==e.worldExtent?e.worldExtent:null,this.axisOrientation_=void 0!==e.axisOrientation?e.axisOrientation:"enu",this.global_=void 0!==e.global&&e.global,this.canWrapX_=!(!this.global_||!this.extent_),this.getPointResolutionFunc_=e.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=e.metersPerUnit}canWrapX(){return this.canWrapX_}getCode(){return this.code_}getExtent(){return this.extent_}getUnits(){return this.units_}getMetersPerUnit(){return this.metersPerUnit_||Bi[this.units_]}getWorldExtent(){return this.worldExtent_}getAxisOrientation(){return this.axisOrientation_}isGlobal(){return this.global_}setGlobal(e){this.global_=e,this.canWrapX_=!(!e||!this.extent_)}getDefaultTileGrid(){return this.defaultTileGrid_}setDefaultTileGrid(e){this.defaultTileGrid_=e}setExtent(e){this.extent_=e,this.canWrapX_=!(!this.global_||!e)}setWorldExtent(e){this.worldExtent_=e}setGetPointResolution(e){this.getPointResolutionFunc_=e}getPointResolutionFunc(){return this.getPointResolutionFunc_}},zi=6378137,Vi=Math.PI*zi,qi=[-Vi,-Vi,Vi,Vi],Hi=[-180,-85,180,85],Wi=zi*Math.log(Math.tan(Math.PI/2));class Yi extends Fi{constructor(e){super({code:e,units:"m",extent:qi,global:!0,worldExtent:Hi,getPointResolution:function(e,t){return e/Math.cosh(t[1]/zi)}})}}const Zi=[new Yi("EPSG:3857"),new Yi("EPSG:102100"),new Yi("EPSG:102113"),new Yi("EPSG:900913"),new Yi("http://www.opengis.net/def/crs/EPSG/0/3857"),new Yi("http://www.opengis.net/gml/srs/epsg.xml#3857")];function Ji(e,t,n,r){const i=e.length;n=n>1?n:2,r=r??n,void 0===t&&(t=n>2?e.slice():new Array(i));for(let n=0;nWi?r=Wi:r<-Wi&&(r=-Wi),t[n+1]=r}return t}function Xi(e,t,n,r){const i=e.length;n=n>1?n:2,r=r??n,void 0===t&&(t=n>2?e.slice():new Array(i));for(let n=0;n32700&&t<32761?n=t-32700:t>32600&&t<32661&&(r=!0,n=t-32600),n?{number:n,north:r}:null}const so=[function(e){return ao(e)?new Fi({code:e,units:"m"}):null}];function lo(e,t){if(void 0!==t)for(let n=0,r=e.length;n0}function yo(e,t,n,r,i,o,a){let s,l;const c=(n-t)/r;if(1===c)s=t;else if(2===c)s=t,l=i;else if(0!==c){let o=e[t],a=e[t+1],c=0;const u=[0];for(let i=t+r;i>1),i=+n(e[r],t),i<0?o=r+1:(a=r,s=!i);return s?o:~o}(u,d);p<0?(l=(d-u[-p-2])/(u[-p-1]-u[-p-2]),s=t+(-p-2)*r):s=t+p*r}a=a>1?a:2,o=o||new Array(a);for(let t=0;t{if(e===this.squaredTolerance_)return this.simplifiedGeometry_;this.simplifiedGeometry_=this.clone(),t&&this.simplifiedGeometry_.applyTransform(t);const n=this.simplifiedGeometry_.getFlatCoordinates();let r;switch(this.type_){case"LineString":n.length=Gi(n,0,this.simplifiedGeometry_.flatCoordinates_.length,this.simplifiedGeometry_.stride_,e,n,0),r=[n.length];break;case"MultiLineString":r=[],n.length=Li(n,0,this.simplifiedGeometry_.ends_,this.simplifiedGeometry_.stride_,e,n,0,r);break;case"Polygon":r=[],n.length=Ri(n,0,this.simplifiedGeometry_.ends_,this.simplifiedGeometry_.stride_,Math.sqrt(e),n,0,r)}return r&&(this.simplifiedGeometry_=new Ao(this.type_,n,r,2,this.properties_,this.id_)),this.squaredTolerance_=e,this.simplifiedGeometry_})),this}}Ao.prototype.getFlatCoordinates=Ao.prototype.getOrientedFlatCoordinates;const Co=Ao,bo=ol.functions,Io=ol.render.canvas,_o=ol.TileState,Eo=ol.util,wo=(ol.layer.Image,ol.layer.Layer,ol.layer.Group,ol.Map,ol.source.Raster,ol.source.Source,ol.tilegrid.TileGrid),Po=(ol.View,ol.proj.Units);ol.events.Event;function So(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Mo,xo={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],rebeccapurple:[102,51,153,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function Go(e){return(e=Math.round(e))<0?0:e>255?255:e}function Lo(e){return e<0?0:e>1?1:e}function ko(e){return"%"===e[e.length-1]?Go(parseFloat(e)/100*255):Go(parseInt(e))}function To(e){return"%"===e[e.length-1]?Lo(parseFloat(e)/100):Lo(parseFloat(e))}function Ro(e,t,n){return n<0?n+=1:n>1&&(n-=1),6*n<1?e+(t-e)*n*6:2*n<1?t:3*n<2?e+(t-e)*(2/3-n)*6:e}try{Mo={}.parseCSSColor=function(e){var t,n=e.replace(/ /g,"").toLowerCase();if(n in xo)return xo[n].slice();if("#"===n[0])return 4===n.length?(t=parseInt(n.substr(1),16))>=0&&t<=4095?[(3840&t)>>4|(3840&t)>>8,240&t|(240&t)>>4,15&t|(15&t)<<4,1]:null:7===n.length&&(t=parseInt(n.substr(1),16))>=0&&t<=16777215?[(16711680&t)>>16,(65280&t)>>8,255&t,1]:null;var r=n.indexOf("("),i=n.indexOf(")");if(-1!==r&&i+1===n.length){var o=n.substr(0,r),a=n.substr(r+1,i-(r+1)).split(","),s=1;switch(o){case"rgba":if(4!==a.length)return null;s=To(a.pop());case"rgb":return 3!==a.length?null:[ko(a[0]),ko(a[1]),ko(a[2]),s];case"hsla":if(4!==a.length)return null;s=To(a.pop());case"hsl":if(3!==a.length)return null;var l=(parseFloat(a[0])%360+360)%360/360,c=To(a[1]),u=To(a[2]),d=u<=.5?u*(c+1):u+c-u*c,p=2*u-d;return[Go(255*Ro(p,d,l+1/3)),Go(255*Ro(p,d,l)),Go(255*Ro(p,d,l-1/3)),s];default:return null}}return null}}catch(sb){}class Oo{constructor(e,t,n,r=1){this.r=e,this.g=t,this.b=n,this.a=r}static parse(e){if(!e)return;if(e instanceof Oo)return e;if("string"!=typeof e)return;const t=Mo(e);return t?new Oo(t[0]/255*t[3],t[1]/255*t[3],t[2]/255*t[3],t[3]):void 0}toString(){const[e,t,n,r]=this.toArray();return`rgba(${Math.round(e)},${Math.round(t)},${Math.round(n)},${r})`}toArray(){const{r:e,g:t,b:n,a:r}=this;return 0===r?[0,0,0,0]:[255*e/r,255*t/r,255*n/r,r]}toArray01(){const{r:e,g:t,b:n,a:r}=this;return 0===r?[0,0,0,0]:[e/r,t/r,n/r,r]}toArray01PremultipliedAlpha(){const{r:e,g:t,b:n,a:r}=this;return[e,t,n,r]}}Oo.black=new Oo(0,0,0,1),Oo.white=new Oo(1,1,1,1),Oo.transparent=new Oo(0,0,0,0),Oo.red=new Oo(1,0,0,1),Oo.blue=new Oo(0,0,1,1);var Do=Oo;function No(e){return"object"==typeof e?["literal",e]:e}function Uo(e,t){let n=e.stops;if(!n)return function(e,t){const n=["get",e.property];if(void 0===e.default)return"string"===t.type?["string",n]:n;if("enum"===t.type)return["match",n,Object.keys(t.values),n,e.default];{const r=["color"===t.type?"to-color":t.type,n,No(e.default)];return"array"===t.type&&r.splice(1,0,t.value,t.length||null),r}}(e,t);const r=n&&"object"==typeof n[0][0],i=r||void 0!==e.property,o=r||!i;return n=n.map((e=>!i&&t.tokens&&"string"==typeof e[1]?[e[0],Ho(e[1])]:[e[0],No(e[1])])),r?function(e,t,n){const r={},i={},o=[];for(let t=0;t3&&t===e[e.length-2]||(r&&2===e.length||e.push(t),e.push(n))}function qo(e,t){return e.type?e.type:t.expression.interpolated?"exponential":"interval"}function Ho(e){const t=["concat"],n=/{([^{}]+)}/g;let r=0;for(let i=n.exec(e);null!==i;i=n.exec(e)){const o=e.slice(r,n.lastIndex-i[0].length);r=n.lastIndex,o.length>0&&t.push(o),t.push(["get",i[1]])}if(1===t.length)return e;if(r`:"value"===e.itemType.kind?"array":`array<${t}>`}return e.kind}const la=[Xo,Ko,Qo,$o,ea,ia,ta,aa(na),oa];function ca(e,t){if("error"===t.kind)return null;if("array"===e.kind){if("array"===t.kind&&(0===t.N&&"value"===t.itemType.kind||!ca(e.itemType,t.itemType))&&("number"!=typeof e.N||e.N===t.N))return null}else{if(e.kind===t.kind)return null;if("value"===e.kind)for(const e of la)if(!ca(e,t))return null}return`Expected ${sa(e)} but found ${sa(t)} instead.`}function ua(e,t){return t.some((t=>t.kind===e.kind))}function da(e,t){return t.some((t=>"null"===t?null===e:"array"===t?Array.isArray(e):"object"===t?e&&!Array.isArray(e)&&"object"==typeof e:t===typeof e))}class pa{constructor(e,t,n){this.sensitivity=e?t?"variant":"case":t?"accent":"base",this.locale=n,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:"search"})}compare(e,t){return this.collator.compare(e,t)}resolvedLocale(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale}}class ha{constructor(e,t,n,r,i){this.text=e.normalize?e.normalize():e,this.image=t,this.scale=n,this.fontStack=r,this.textColor=i}}class ga{constructor(e){this.sections=e}static fromString(e){return new ga([new ha(e,null,null,null,null)])}isEmpty(){return 0===this.sections.length||!this.sections.some((e=>0!==e.text.length||e.image&&0!==e.image.name.length))}static factory(e){return e instanceof ga?e:ga.fromString(e)}toString(){return 0===this.sections.length?"":this.sections.map((e=>e.text)).join("")}serialize(){const e=["format"];for(const t of this.sections){if(t.image){e.push(["image",t.image.name]);continue}e.push(t.text);const n={};t.fontStack&&(n["text-font"]=["literal",t.fontStack.split(",")]),t.scale&&(n["font-scale"]=t.scale),t.textColor&&(n["text-color"]=["rgba"].concat(t.textColor.toArray())),e.push(n)}return e}}class fa{constructor(e){this.name=e.name,this.available=e.available}toString(){return this.name}static fromString(e){return e?new fa({name:e,available:!1}):null}serialize(){return["image",this.name]}}function ma(e,t,n,r){if(!("number"==typeof e&&e>=0&&e<=255&&"number"==typeof t&&t>=0&&t<=255&&"number"==typeof n&&n>=0&&n<=255)){return`Invalid rgba value [${("number"==typeof r?[e,t,n,r]:[e,t,n]).join(", ")}]: 'r', 'g', and 'b' must be between 0 and 255.`}return void 0===r||"number"==typeof r&&r>=0&&r<=1?null:`Invalid rgba value [${[e,t,n,r].join(", ")}]: 'a' must be between 0 and 1.`}function ya(e){if(null===e)return!0;if("string"==typeof e)return!0;if("boolean"==typeof e)return!0;if("number"==typeof e)return!0;if(e instanceof Do)return!0;if(e instanceof pa)return!0;if(e instanceof ga)return!0;if(e instanceof fa)return!0;if(Array.isArray(e)){for(const t of e)if(!ya(t))return!1;return!0}if("object"==typeof e){for(const t in e)if(!ya(e[t]))return!1;return!0}return!1}function va(e){if(null===e)return Xo;if("string"==typeof e)return Qo;if("boolean"==typeof e)return $o;if("number"==typeof e)return Ko;if(e instanceof Do)return ea;if(e instanceof pa)return ra;if(e instanceof ga)return ia;if(e instanceof fa)return oa;if(Array.isArray(e)){const t=e.length;let n;for(const t of e){const e=va(t);if(n){if(n===e)continue;n=na;break}n=e}return aa(n||na,t)}return ta}function Aa(e){const t=typeof e;return null===e?"":"string"===t||"number"===t||"boolean"===t?String(e):e instanceof Do||e instanceof ga||e instanceof fa?e.toString():JSON.stringify(e)}class Ca{constructor(e,t){this.type=e,this.value=t}static parse(e,t){if(2!==e.length)return t.error(`'literal' expression requires exactly one argument, but found ${e.length-1} instead.`);if(!ya(e[1]))return t.error("invalid value");const n=e[1];let r=va(n);const i=t.expectedType;return"array"!==r.kind||0!==r.N||!i||"array"!==i.kind||"number"==typeof i.N&&0!==i.N||(r=i),new Ca(r,n)}evaluate(){return this.value}eachChild(){}outputDefined(){return!0}serialize(){return"array"===this.type.kind||"object"===this.type.kind?["literal",this.value]:this.value instanceof Do?["rgba"].concat(this.value.toArray()):this.value instanceof ga?this.value.serialize():this.value}}var ba=Ca;var Ia=class{constructor(e){this.name="ExpressionEvaluationError",this.message=e}toJSON(){return this.message}};const _a={string:Qo,number:Ko,boolean:$o,object:ta};class Ea{constructor(e,t){this.type=e,this.args=t}static parse(e,t){if(e.length<2)return t.error("Expected at least one argument.");let n,r=1;const i=e[0];if("array"===i){let i,o;if(e.length>2){const n=e[1];if("string"!=typeof n||!(n in _a)||"object"===n)return t.error('The item type argument of "array" must be one of string, number, boolean',1);i=_a[n],r++}else i=na;if(e.length>3){if(null!==e[2]&&("number"!=typeof e[2]||e[2]<0||e[2]!==Math.floor(e[2])))return t.error('The length argument to "array" must be a positive integer literal',2);o=e[2],r++}n=aa(i,o)}else n=_a[i];const o=[];for(;re.outputDefined()))}serialize(){const e=this.type,t=[e.kind];if("array"===e.kind){const n=e.itemType;if("string"===n.kind||"number"===n.kind||"boolean"===n.kind){t.push(n.kind);const r=e.N;("number"==typeof r||this.args.length>1)&&t.push(r)}}return t.concat(this.args.map((e=>e.serialize())))}}var wa=Ea;class Pa{constructor(e){this.type=ia,this.sections=e}static parse(e,t){if(e.length<2)return t.error("Expected at least one argument.");const n=e[1];if(!Array.isArray(n)&&"object"==typeof n)return t.error("First argument must be an image or text section.");const r=[];let i=!1;for(let n=1;n<=e.length-1;++n){const o=e[n];if(i&&"object"==typeof o&&!Array.isArray(o)){i=!1;let e=null;if(o["font-scale"]&&(e=t.parse(o["font-scale"],1,Ko),!e))return null;let n=null;if(o["text-font"]&&(n=t.parse(o["text-font"],1,aa(Qo)),!n))return null;let a=null;if(o["text-color"]&&(a=t.parse(o["text-color"],1,ea),!a))return null;const s=r[r.length-1];s.scale=e,s.font=n,s.textColor=a}else{const o=t.parse(e[n],1,na);if(!o)return null;const a=o.type.kind;if("string"!==a&&"value"!==a&&"null"!==a&&"resolvedImage"!==a)return t.error("Formatted text type must be 'string', 'value', 'image' or 'null'.");i=!0,r.push({content:o,scale:null,font:null,textColor:null})}}return new Pa(r)}evaluate(e){return new ga(this.sections.map((t=>{const n=t.content.evaluate(e);return va(n)===oa?new ha("",n,null,null,null):new ha(Aa(n),null,t.scale?t.scale.evaluate(e):null,t.font?t.font.evaluate(e).join(","):null,t.textColor?t.textColor.evaluate(e):null)})))}eachChild(e){for(const t of this.sections)e(t.content),t.scale&&e(t.scale),t.font&&e(t.font),t.textColor&&e(t.textColor)}outputDefined(){return!1}serialize(){const e=["format"];for(const t of this.sections){e.push(t.content.serialize());const n={};t.scale&&(n["font-scale"]=t.scale.serialize()),t.font&&(n["text-font"]=t.font.serialize()),t.textColor&&(n["text-color"]=t.textColor.serialize()),e.push(n)}return e}}class Sa{constructor(e){this.type=oa,this.input=e}static parse(e,t){if(2!==e.length)return t.error("Expected two arguments.");const n=t.parse(e[1],1,Qo);return n?new Sa(n):t.error("No image name provided.")}evaluate(e){const t=this.input.evaluate(e),n=fa.fromString(t);return n&&e.availableImages&&(n.available=e.availableImages.indexOf(t)>-1),n}eachChild(e){e(this.input)}outputDefined(){return!1}serialize(){return["image",this.input.serialize()]}}const Ma={"to-boolean":$o,"to-color":ea,"to-number":Ko,"to-string":Qo};class xa{constructor(e,t){this.type=e,this.args=t}static parse(e,t){if(e.length<2)return t.error("Expected at least one argument.");const n=e[0];if(("to-boolean"===n||"to-string"===n)&&2!==e.length)return t.error("Expected one argument.");const r=Ma[n],i=[];for(let n=1;n4?`Invalid rbga value ${JSON.stringify(t)}: expected an array containing either three or four numeric values.`:ma(t[0],t[1],t[2],t[3]),!n))return new Do(t[0]/255,t[1]/255,t[2]/255,t[3])}throw new Ia(n||`Could not parse color from value '${"string"==typeof t?t:String(JSON.stringify(t))}'`)}if("number"===this.type.kind){let t=null;for(const n of this.args){if(t=n.evaluate(e),null===t)return 0;const r=Number(t);if(!isNaN(r))return r}throw new Ia(`Could not convert ${JSON.stringify(t)} to number.`)}return"formatted"===this.type.kind?ga.fromString(Aa(this.args[0].evaluate(e))):"resolvedImage"===this.type.kind?fa.fromString(Aa(this.args[0].evaluate(e))):Aa(this.args[0].evaluate(e))}eachChild(e){this.args.forEach(e)}outputDefined(){return this.args.every((e=>e.outputDefined()))}serialize(){if("formatted"===this.type.kind)return new Pa([{content:this.args[0],scale:null,font:null,textColor:null}]).serialize();if("resolvedImage"===this.type.kind)return new Sa(this.args[0]).serialize();const e=[`to-${this.type.kind}`];return this.eachChild((t=>{e.push(t.serialize())})),e}}var Ga=xa;const La=["Unknown","Point","LineString","Polygon"];var ka=class{constructor(){this.globals=null,this.feature=null,this.featureState=null,this.formattedSection=null,this._parseColorCache={},this.availableImages=null,this.canonical=null,this.featureTileCoord=null,this.featureDistanceData=null}id(){return this.feature&&void 0!==this.feature.id?this.feature.id:null}geometryType(){return this.feature?"number"==typeof this.feature.type?La[this.feature.type]:this.feature.type:null}geometry(){return this.feature&&"geometry"in this.feature?this.feature.geometry:null}canonicalID(){return this.canonical}properties(){return this.feature&&this.feature.properties||{}}distanceFromCenter(){if(this.featureTileCoord&&this.featureDistanceData){const e=this.featureDistanceData.center,t=this.featureDistanceData.scale,{x:n,y:r}=this.featureTileCoord,i=n*t-e[0],o=r*t-e[1];return this.featureDistanceData.bearing[0]*i+this.featureDistanceData.bearing[1]*o}return 0}parseColor(e){let t=this._parseColorCache[e];return t||(t=this._parseColorCache[e]=Do.parse(e)),t}};class Ta{constructor(e,t,n,r){this.name=e,this.type=t,this._evaluate=n,this.args=r}evaluate(e){return this._evaluate(e,this.args)}eachChild(e){this.args.forEach(e)}outputDefined(){return!1}serialize(){return[this.name].concat(this.args.map((e=>e.serialize())))}static parse(e,t){const n=e[0],r=Ta.definitions[n];if(!r)return t.error(`Unknown expression "${n}". If you wanted a literal array, use ["literal", [...]].`,0);const i=Array.isArray(r)?r[0]:r.type,o=Array.isArray(r)?[[r[1],r[2]]]:r.overloads,a=o.filter((([t])=>!Array.isArray(t)||t.length===e.length-1));let s=null;for(const[r,o]of a){s=new ss(t.registry,t.path,null,t.scope);const a=[];let l=!1;for(let t=1;t{return t=e,Array.isArray(t)?`(${t.map(sa).join(", ")})`:`(${sa(t.type)}...)`;var t})).join(" | "),r=[];for(let n=1;n=t[2])&&(!(e[1]<=t[1])&&!(e[3]>=t[3])))}function ja(e,t){const n=(180+e[0])/360;const r=(i=e[1],(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+i*Math.PI/360)))/360);var i;const o=Math.pow(2,t.z);return[Math.round(n*o*Da),Math.round(r*o*Da)]}function Ba(e,t,n){const r=e[0]-t[0],i=e[1]-t[1],o=e[0]-n[0],a=e[1]-n[1];return r*a-o*i==0&&r*o<=0&&i*a<=0}function Fa(e,t){let n=!1;for(let a=0,s=t.length;ar[1]!=o[1]>r[1]&&r[0]<(o[0]-i[0])*(r[1]-i[1])/(o[1]-i[1])+i[0]&&(n=!n)}}var r,i,o;return n}function za(e,t){for(let n=0;n0&&d<0||u<0&&d>0}function qa(e,t,n,r){const i=[t[0]-e[0],t[1]-e[1]],o=[r[0]-n[0],r[1]-n[1]];return 0!=(a=o)[0]*(s=i)[1]-a[1]*s[0]&&!(!Va(e,t,n,r)||!Va(n,r,e,t));var a,s}function Ha(e,t,n){for(const r of n)for(let n=0;nn[2]){const t=.5*r;let i=e[0]-n[0]>t?-r:n[0]-e[0]>t?r:0;0===i&&(i=e[0]-n[2]>t?-r:n[2]-e[0]>t?r:0),e[0]+=i}Na(t,e)}function Ka(e,t,n,r){const i=Math.pow(2,r.z)*Da,o=[r.x*Da,r.y*Da],a=[];if(!e)return a;for(const r of e)for(const e of r){const r=[e.x+o[0],e.y+o[1]];Xa(r,t,n,i),a.push(r)}return a}function Qa(e,t,n,r){const i=Math.pow(2,r.z)*Da,o=[r.x*Da,r.y*Da],a=[];if(!e)return a;for(const n of e){const e=[];for(const r of n){const n=[r.x+o[0],r.y+o[1]];Na(t,n),e.push(n)}a.push(e)}if(t[2]-t[0]<=i/2){!function(e){e[0]=e[1]=1/0,e[2]=e[3]=-1/0}(t);for(const e of a)for(const r of e)Xa(r,t,n,i)}return a}class $a{constructor(e,t){this.type=$o,this.geojson=e,this.geometries=t}static parse(e,t){if(2!==e.length)return t.error(`'within' expression requires exactly one argument, but found ${e.length-1} instead.`);if(ya(e[1])){const t=e[1];if("FeatureCollection"===t.type)for(let e=0;e{t&&!ts(e)&&(t=!1)})),t}function ns(e){if(e instanceof Ra&&"feature-state"===e.name)return!1;let t=!0;return e.eachChild((e=>{t&&!ns(e)&&(t=!1)})),t}function rs(e,t){if(e instanceof Ra&&t.indexOf(e.name)>=0)return!1;let n=!0;return e.eachChild((e=>{n&&!rs(e,t)&&(n=!1)})),n}class is{constructor(e,t){this.type=t.type,this.name=e,this.boundExpression=t}static parse(e,t){if(2!==e.length||"string"!=typeof e[1])return t.error("'var' expression requires exactly one string literal argument.");const n=e[1];return t.scope.has(n)?new is(n,t.scope.get(n)):t.error(`Unknown variable "${n}". Make sure "${n}" has been bound in an enclosing "let" expression before using it.`,1)}evaluate(e){return this.boundExpression.evaluate(e)}eachChild(){}outputDefined(){return!1}serialize(){return["var",this.name]}}var os=is;class as{constructor(e,t=[],n,r=new Jo,i=[]){this.registry=e,this.path=t,this.key=t.map((e=>`[${e}]`)).join(""),this.scope=r,this.errors=i,this.expectedType=n}parse(e,t,n,r,i={}){return t?this.concat(t,n,r)._parse(e,i):this._parse(e,i)}_parse(e,t){function n(e,t,n){return"assert"===n?new wa(t,[e]):"coerce"===n?new Ga(t,[e]):e}if(null!==e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e||(e=["literal",e]),Array.isArray(e)){if(0===e.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].');const r=e[0];if("string"!=typeof r)return this.error(`Expression name must be a string, but found ${typeof r} instead. If you wanted a literal array, use ["literal", [...]].`,0),null;const i=this.registry[r];if(i){let r=i.parse(e,this);if(!r)return null;if(this.expectedType){const e=this.expectedType,i=r.type;if("string"!==e.kind&&"number"!==e.kind&&"boolean"!==e.kind&&"object"!==e.kind&&"array"!==e.kind||"value"!==i.kind)if("color"!==e.kind&&"formatted"!==e.kind&&"resolvedImage"!==e.kind||"value"!==i.kind&&"string"!==i.kind){if(this.checkSubtype(e,i))return null}else r=n(r,e,t.typeAnnotation||"coerce");else r=n(r,e,t.typeAnnotation||"assert")}if(!(r instanceof ba)&&"resolvedImage"!==r.type.kind&&ls(r)){const e=new ka;try{r=new ba(r.type,r.evaluate(e))}catch(e){return this.error(e.message),null}}return r}return this.error(`Unknown expression "${r}". If you wanted a literal array, use ["literal", [...]].`,0)}return void 0===e?this.error("'undefined' value invalid. Use null instead."):"object"==typeof e?this.error('Bare objects invalid. Use ["literal", {...}] instead.'):this.error(`Expected an array, but found ${typeof e} instead.`)}concat(e,t,n){const r="number"==typeof e?this.path.concat(e):this.path,i=n?this.scope.concat(n):this.scope;return new as(this.registry,r,t||null,i,this.errors)}error(e,...t){const n=`${this.key}${t.map((e=>`[${e}]`)).join("")}`;this.errors.push(new Yo(n,e))}checkSubtype(e,t){const n=ca(e,t);return n&&this.error(n),n}}var ss=as;function ls(e){if(e instanceof os)return ls(e.boundExpression);if(e instanceof Ra&&"error"===e.name)return!1;if(e instanceof Oa)return!1;if(e instanceof es)return!1;const t=e instanceof Ga||e instanceof wa;let n=!0;return e.eachChild((e=>{n=t?n&&ls(e):n&&e instanceof ba})),!!n&&(ts(e)&&rs(e,["zoom","heatmap-density","line-progress","sky-radial-progress","accumulated","is-supported-script","pitch","distance-from-center"]))}function cs(e,t){const n=e.length-1;let r,i,o=0,a=n,s=0;for(;o<=a;)if(s=Math.floor((o+a)/2),r=e[s],i=e[s+1],r<=t){if(s===n||tt))throw new Ia("Input is not a number.");a=s-1}return 0}class us{constructor(e,t,n){this.type=e,this.input=t,this.labels=[],this.outputs=[];for(const[e,t]of n)this.labels.push(e),this.outputs.push(t)}static parse(e,t){if(e.length-1<4)return t.error(`Expected at least 4 arguments, but found only ${e.length-1}.`);if((e.length-1)%2!=0)return t.error("Expected an even number of arguments.");const n=t.parse(e[1],1,Ko);if(!n)return null;const r=[];let i=null;t.expectedType&&"value"!==t.expectedType.kind&&(i=t.expectedType);for(let n=1;n=o)return t.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.',s);const c=t.parse(a,l,i);if(!c)return null;i=i||c.type,r.push([o,c])}return new us(i,n,r)}evaluate(e){const t=this.labels,n=this.outputs;if(1===t.length)return n[0].evaluate(e);const r=this.input.evaluate(e);if(r<=t[0])return n[0].evaluate(e);const i=t.length;if(r>=t[i-1])return n[i-1].evaluate(e);return n[cs(t,r)].evaluate(e)}eachChild(e){e(this.input);for(const t of this.outputs)e(t)}outputDefined(){return this.outputs.every((e=>e.outputDefined()))}serialize(){const e=["step",this.input.serialize()];for(let t=0;t0&&e.push(this.labels[t]),e.push(this.outputs[t].serialize());return e}}var ds=us,ps=hs;function hs(e,t,n,r){this.cx=3*e,this.bx=3*(n-e)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*t,this.by=3*(r-t)-this.cy,this.ay=1-this.cy-this.by,this.p1x=e,this.p1y=r,this.p2x=n,this.p2y=r}hs.prototype.sampleCurveX=function(e){return((this.ax*e+this.bx)*e+this.cx)*e},hs.prototype.sampleCurveY=function(e){return((this.ay*e+this.by)*e+this.cy)*e},hs.prototype.sampleCurveDerivativeX=function(e){return(3*this.ax*e+2*this.bx)*e+this.cx},hs.prototype.solveCurveX=function(e,t){var n,r,i,o,a;for(void 0===t&&(t=1e-6),i=e,a=0;a<8;a++){if(o=this.sampleCurveX(i)-e,Math.abs(o)(r=1))return r;for(;no?n=i:r=i,i=.5*(r-n)+n}return i},hs.prototype.solve=function(e,t){return this.sampleCurveY(this.solveCurveX(e,t))};var gs=So(ps);function fs(e,t,n){return e*(1-n)+t*n}var ms=Object.freeze({__proto__:null,number:fs,color:function(e,t,n){return new Do(fs(e.r,t.r,n),fs(e.g,t.g,n),fs(e.b,t.b,n),fs(e.a,t.a,n))},array:function(e,t,n){return e.map(((e,r)=>fs(e,t[r],n)))}});const ys=.95047,vs=1.08883,As=4/29,Cs=6/29,bs=3*Cs*Cs,Is=Cs*Cs*Cs,_s=Math.PI/180,Es=180/Math.PI;function ws(e){return e>Is?Math.pow(e,1/3):e/bs+As}function Ps(e){return e>Cs?e*e*e:bs*(e-As)}function Ss(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function Ms(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function xs(e){const t=Ms(e.r),n=Ms(e.g),r=Ms(e.b),i=ws((.4124564*t+.3575761*n+.1804375*r)/ys),o=ws((.2126729*t+.7151522*n+.072175*r)/1);return{l:116*o-16,a:500*(i-o),b:200*(o-ws((.0193339*t+.119192*n+.9503041*r)/vs)),alpha:e.a}}function Gs(e){let t=(e.l+16)/116,n=isNaN(e.a)?t:t+e.a/500,r=isNaN(e.b)?t:t-e.b/200;return t=1*Ps(t),n=ys*Ps(n),r=vs*Ps(r),new Do(Ss(3.2404542*n-1.5371385*t-.4985314*r),Ss(-.969266*n+1.8760108*t+.041556*r),Ss(.0556434*n-.2040259*t+1.0572252*r),e.alpha)}function Ls(e,t,n){const r=t-e;return e+n*(r>180||r<-180?r-360*Math.round(r/360):r)}const ks={forward:xs,reverse:Gs,interpolate:function(e,t,n){return{l:fs(e.l,t.l,n),a:fs(e.a,t.a,n),b:fs(e.b,t.b,n),alpha:fs(e.alpha,t.alpha,n)}}},Ts={forward:function(e){const{l:t,a:n,b:r}=xs(e),i=Math.atan2(r,n)*Es;return{h:i<0?i+360:i,c:Math.sqrt(n*n+r*r),l:t,alpha:e.a}},reverse:function(e){const t=e.h*_s,n=e.c;return Gs({l:e.l,a:Math.cos(t)*n,b:Math.sin(t)*n,alpha:e.alpha})},interpolate:function(e,t,n){return{h:Ls(e.h,t.h,n),c:fs(e.c,t.c,n),l:fs(e.l,t.l,n),alpha:fs(e.alpha,t.alpha,n)}}};class Rs{constructor(e,t,n,r,i){this.type=e,this.operator=t,this.interpolation=n,this.input=r,this.labels=[],this.outputs=[];for(const[e,t]of i)this.labels.push(e),this.outputs.push(t)}static interpolationFactor(e,t,n,r){let i=0;if("exponential"===e.name)i=Os(t,e.base,n,r);else if("linear"===e.name)i=Os(t,1,n,r);else if("cubic-bezier"===e.name){const o=e.controlPoints;i=new gs(o[0],o[1],o[2],o[3]).solve(Os(t,1,n,r))}return i}static parse(e,t){let[n,r,i,...o]=e;if(!Array.isArray(r)||0===r.length)return t.error("Expected an interpolation type expression.",1);if("linear"===r[0])r={name:"linear"};else if("exponential"===r[0]){const e=r[1];if("number"!=typeof e)return t.error("Exponential interpolation requires a numeric base.",1,1);r={name:"exponential",base:e}}else{if("cubic-bezier"!==r[0])return t.error(`Unknown interpolation type ${String(r[0])}`,1,0);{const e=r.slice(1);if(4!==e.length||e.some((e=>"number"!=typeof e||e<0||e>1)))return t.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.",1);r={name:"cubic-bezier",controlPoints:e}}}if(e.length-1<4)return t.error(`Expected at least 4 arguments, but found only ${e.length-1}.`);if((e.length-1)%2!=0)return t.error("Expected an even number of arguments.");if(i=t.parse(i,2,Ko),!i)return null;const a=[];let s=null;"interpolate-hcl"===n||"interpolate-lab"===n?s=ea:t.expectedType&&"value"!==t.expectedType.kind&&(s=t.expectedType);for(let e=0;e=n)return t.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.',i);const c=t.parse(r,l,s);if(!c)return null;s=s||c.type,a.push([n,c])}return"number"===s.kind||"color"===s.kind||"array"===s.kind&&"number"===s.itemType.kind&&"number"==typeof s.N?new Rs(s,n,r,i,a):t.error(`Type ${sa(s)} is not interpolatable.`)}evaluate(e){const t=this.labels,n=this.outputs;if(1===t.length)return n[0].evaluate(e);const r=this.input.evaluate(e);if(r<=t[0])return n[0].evaluate(e);const i=t.length;if(r>=t[i-1])return n[i-1].evaluate(e);const o=cs(t,r),a=t[o],s=t[o+1],l=Rs.interpolationFactor(this.interpolation,r,a,s),c=n[o].evaluate(e),u=n[o+1].evaluate(e);return"interpolate"===this.operator?ms[this.type.kind.toLowerCase()](c,u,l):"interpolate-hcl"===this.operator?Ts.reverse(Ts.interpolate(Ts.forward(c),Ts.forward(u),l)):ks.reverse(ks.interpolate(ks.forward(c),ks.forward(u),l))}eachChild(e){e(this.input);for(const t of this.outputs)e(t)}outputDefined(){return this.outputs.every((e=>e.outputDefined()))}serialize(){let e;e="linear"===this.interpolation.name?["linear"]:"exponential"===this.interpolation.name?1===this.interpolation.base?["linear"]:["exponential",this.interpolation.base]:["cubic-bezier"].concat(this.interpolation.controlPoints);const t=[this.operator,e,this.input.serialize()];for(let e=0;eca(r,e.type)));return new Ns(o?na:n,i)}evaluate(e){let t,n=null,r=0;for(const i of this.args){if(r++,n=i.evaluate(e),n&&n instanceof fa&&!n.available&&(t||(t=n),n=null,r===this.args.length))return t;if(null!==n)break}return n}eachChild(e){this.args.forEach(e)}outputDefined(){return this.args.every((e=>e.outputDefined()))}serialize(){const e=["coalesce"];return this.eachChild((t=>{e.push(t.serialize())})),e}}var Us=Ns;class js{constructor(e,t){this.type=t.type,this.bindings=[].concat(e),this.result=t}evaluate(e){return this.result.evaluate(e)}eachChild(e){for(const t of this.bindings)e(t[1]);e(this.result)}static parse(e,t){if(e.length<4)return t.error(`Expected at least 3 arguments, but found ${e.length-1} instead.`);const n=[];for(let r=1;r=n.length)throw new Ia(`Array index out of bounds: ${t} > ${n.length-1}.`);if(t!==Math.floor(t))throw new Ia(`Array index must be an integer, but found ${t} instead.`);return n[t]}eachChild(e){e(this.index),e(this.input)}outputDefined(){return!1}serialize(){return["at",this.index.serialize(),this.input.serialize()]}}var zs=Fs;class Vs{constructor(e,t){this.type=$o,this.needle=e,this.haystack=t}static parse(e,t){if(3!==e.length)return t.error(`Expected 2 arguments, but found ${e.length-1} instead.`);const n=t.parse(e[1],1,na),r=t.parse(e[2],2,na);return n&&r?ua(n.type,[$o,Qo,Ko,Xo,na])?new Vs(n,r):t.error(`Expected first argument to be of type boolean, string, number or null, but found ${sa(n.type)} instead`):null}evaluate(e){const t=this.needle.evaluate(e),n=this.haystack.evaluate(e);if(null==n)return!1;if(!da(t,["boolean","string","number","null"]))throw new Ia(`Expected first argument to be of type boolean, string, number or null, but found ${sa(va(t))} instead.`);if(!da(n,["string","array"]))throw new Ia(`Expected second argument to be of type array or string, but found ${sa(va(n))} instead.`);return n.indexOf(t)>=0}eachChild(e){e(this.needle),e(this.haystack)}outputDefined(){return!0}serialize(){return["in",this.needle.serialize(),this.haystack.serialize()]}}var qs=Vs;class Hs{constructor(e,t,n){this.type=Ko,this.needle=e,this.haystack=t,this.fromIndex=n}static parse(e,t){if(e.length<=2||e.length>=5)return t.error(`Expected 3 or 4 arguments, but found ${e.length-1} instead.`);const n=t.parse(e[1],1,na),r=t.parse(e[2],2,na);if(!n||!r)return null;if(!ua(n.type,[$o,Qo,Ko,Xo,na]))return t.error(`Expected first argument to be of type boolean, string, number or null, but found ${sa(n.type)} instead`);if(4===e.length){const i=t.parse(e[3],3,Ko);return i?new Hs(n,r,i):null}return new Hs(n,r)}evaluate(e){const t=this.needle.evaluate(e),n=this.haystack.evaluate(e);if(!da(t,["boolean","string","number","null"]))throw new Ia(`Expected first argument to be of type boolean, string, number or null, but found ${sa(va(t))} instead.`);if(!da(n,["string","array"]))throw new Ia(`Expected second argument to be of type array or string, but found ${sa(va(n))} instead.`);if(this.fromIndex){const r=this.fromIndex.evaluate(e);return n.indexOf(t,r)}return n.indexOf(t)}eachChild(e){e(this.needle),e(this.haystack),this.fromIndex&&e(this.fromIndex)}outputDefined(){return!1}serialize(){if(null!=this.fromIndex&&void 0!==this.fromIndex){const e=this.fromIndex.serialize();return["index-of",this.needle.serialize(),this.haystack.serialize(),e]}return["index-of",this.needle.serialize(),this.haystack.serialize()]}}var Ws=Hs;class Ys{constructor(e,t,n,r,i,o){this.inputType=e,this.type=t,this.input=n,this.cases=r,this.outputs=i,this.otherwise=o}static parse(e,t){if(e.length<5)return t.error(`Expected at least 4 arguments, but found only ${e.length-1}.`);if(e.length%2!=1)return t.error("Expected an even number of arguments.");let n,r;t.expectedType&&"value"!==t.expectedType.kind&&(r=t.expectedType);const i={},o=[];for(let a=2;aNumber.MAX_SAFE_INTEGER)return c.error(`Branch labels must be integers no larger than ${Number.MAX_SAFE_INTEGER}.`);if("number"==typeof e&&Math.floor(e)!==e)return c.error("Numeric branch labels must be integer values.");if(n){if(c.checkSubtype(n,va(e)))return null}else n=va(e);if(void 0!==i[String(e)])return c.error("Branch labels must be unique.");i[String(e)]=o.length}const u=t.parse(l,a,r);if(!u)return null;r=r||u.type,o.push(u)}const a=t.parse(e[1],1,na);if(!a)return null;const s=t.parse(e[e.length-1],e.length-1,r);return s?"value"!==a.type.kind&&t.concat(1).checkSubtype(n,a.type)?null:new Ys(n,r,a,i,o,s):null}evaluate(e){const t=this.input.evaluate(e);return(va(t)===this.inputType&&this.outputs[this.cases[t]]||this.otherwise).evaluate(e)}eachChild(e){e(this.input),this.outputs.forEach(e),e(this.otherwise)}outputDefined(){return this.outputs.every((e=>e.outputDefined()))&&this.otherwise.outputDefined()}serialize(){const e=["match",this.input.serialize()],t=Object.keys(this.cases).sort(),n=[],r={};for(const e of t){const t=r[this.cases[e]];void 0===t?(r[this.cases[e]]=n.length,n.push([this.cases[e],[e]])):n[t][1].push(e)}const i=e=>"number"===this.inputType.kind?Number(e):e;for(const[t,r]of n)1===r.length?e.push(i(r[0])):e.push(r.map(i)),e.push(this.outputs[t].serialize());return e.push(this.otherwise.serialize()),e}}var Zs=Ys;class Js{constructor(e,t,n){this.type=e,this.branches=t,this.otherwise=n}static parse(e,t){if(e.length<4)return t.error(`Expected at least 3 arguments, but found only ${e.length-1}.`);if(e.length%2!=0)return t.error("Expected an odd number of arguments.");let n;t.expectedType&&"value"!==t.expectedType.kind&&(n=t.expectedType);const r=[];for(let i=1;it.outputDefined()))&&this.otherwise.outputDefined()}serialize(){const e=["case"];return this.eachChild((t=>{e.push(t.serialize())})),e}}var Xs=Js;class Ks{constructor(e,t,n,r){this.type=e,this.input=t,this.beginIndex=n,this.endIndex=r}static parse(e,t){if(e.length<=2||e.length>=5)return t.error(`Expected 3 or 4 arguments, but found ${e.length-1} instead.`);const n=t.parse(e[1],1,na),r=t.parse(e[2],2,Ko);if(!n||!r)return null;if(!ua(n.type,[aa(na),Qo,na]))return t.error(`Expected first argument to be of type array or string, but found ${sa(n.type)} instead`);if(4===e.length){const i=t.parse(e[3],3,Ko);return i?new Ks(n.type,n,r,i):null}return new Ks(n.type,n,r)}evaluate(e){const t=this.input.evaluate(e),n=this.beginIndex.evaluate(e);if(!da(t,["string","array"]))throw new Ia(`Expected first argument to be of type array or string, but found ${sa(va(t))} instead.`);if(this.endIndex){const r=this.endIndex.evaluate(e);return t.slice(n,r)}return t.slice(n)}eachChild(e){e(this.input),e(this.beginIndex),this.endIndex&&e(this.endIndex)}outputDefined(){return!1}serialize(){if(null!=this.endIndex&&void 0!==this.endIndex){const e=this.endIndex.serialize();return["slice",this.input.serialize(),this.beginIndex.serialize(),e]}return["slice",this.input.serialize(),this.beginIndex.serialize()]}}var Qs=Ks;function $s(e,t){return"=="===e||"!="===e?"boolean"===t.kind||"string"===t.kind||"number"===t.kind||"null"===t.kind||"value"===t.kind:"string"===t.kind||"number"===t.kind||"value"===t.kind}function el(e,t,n,r){return 0===r.compare(t,n)}function tl(e,t,n){const r="=="!==e&&"!="!==e;return class i{constructor(e,t,n){this.type=$o,this.lhs=e,this.rhs=t,this.collator=n,this.hasUntypedArgument="value"===e.type.kind||"value"===t.type.kind}static parse(e,t){if(3!==e.length&&4!==e.length)return t.error("Expected two or three arguments.");const n=e[0];let o=t.parse(e[1],1,na);if(!o)return null;if(!$s(n,o.type))return t.concat(1).error(`"${n}" comparisons are not supported for type '${sa(o.type)}'.`);let a=t.parse(e[2],2,na);if(!a)return null;if(!$s(n,a.type))return t.concat(2).error(`"${n}" comparisons are not supported for type '${sa(a.type)}'.`);if(o.type.kind!==a.type.kind&&"value"!==o.type.kind&&"value"!==a.type.kind)return t.error(`Cannot compare types '${sa(o.type)}' and '${sa(a.type)}'.`);r&&("value"===o.type.kind&&"value"!==a.type.kind?o=new wa(a.type,[o]):"value"!==o.type.kind&&"value"===a.type.kind&&(a=new wa(o.type,[a])));let s=null;if(4===e.length){if("string"!==o.type.kind&&"string"!==a.type.kind&&"value"!==o.type.kind&&"value"!==a.type.kind)return t.error("Cannot use collator to compare non-string types.");if(s=t.parse(e[3],3,ra),!s)return null}return new i(o,a,s)}evaluate(i){const o=this.lhs.evaluate(i),a=this.rhs.evaluate(i);if(r&&this.hasUntypedArgument){const t=va(o),n=va(a);if(t.kind!==n.kind||"string"!==t.kind&&"number"!==t.kind)throw new Ia(`Expected arguments for "${e}" to be (string, string) or (number, number), but found (${t.kind}, ${n.kind}) instead.`)}if(this.collator&&!r&&this.hasUntypedArgument){const e=va(o),n=va(a);if("string"!==e.kind||"string"!==n.kind)return t(i,o,a)}return this.collator?n(i,o,a,this.collator.evaluate(i)):t(i,o,a)}eachChild(e){e(this.lhs),e(this.rhs),this.collator&&e(this.collator)}outputDefined(){return!0}serialize(){const t=[e];return this.eachChild((e=>{t.push(e.serialize())})),t}}}const nl=tl("==",(function(e,t,n){return t===n}),el),rl=tl("!=",(function(e,t,n){return t!==n}),(function(e,t,n,r){return!el(0,t,n,r)})),il=tl("<",(function(e,t,n){return t",(function(e,t,n){return t>n}),(function(e,t,n,r){return r.compare(t,n)>0})),sl=tl("<=",(function(e,t,n){return t<=n}),(function(e,t,n,r){return r.compare(t,n)<=0})),ll=tl(">=",(function(e,t,n){return t>=n}),(function(e,t,n,r){return r.compare(t,n)>=0}));class cl{constructor(e,t,n,r,i,o){this.type=Qo,this.number=e,this.locale=t,this.currency=n,this.unit=r,this.minFractionDigits=i,this.maxFractionDigits=o}static parse(e,t){if(3!==e.length)return t.error("Expected two arguments.");const n=t.parse(e[1],1,Ko);if(!n)return null;const r=e[2];if("object"!=typeof r||Array.isArray(r))return t.error("NumberFormat options argument must be an object.");let i=null;if(r.locale&&(i=t.parse(r.locale,1,Qo),!i))return null;let o=null;if(r.currency&&(o=t.parse(r.currency,1,Qo),!o))return null;let a=null;if(r.unit&&(a=t.parse(r.unit,1,Qo),!a))return null;let s=null;if(r["min-fraction-digits"]&&(s=t.parse(r["min-fraction-digits"],1,Ko),!s))return null;let l=null;return r["max-fraction-digits"]&&(l=t.parse(r["max-fraction-digits"],1,Ko),!l)?null:new cl(n,i,o,a,s,l)}evaluate(e){return new Intl.NumberFormat(this.locale?this.locale.evaluate(e):[],{style:(this.currency?"currency":this.unit&&"unit")||"decimal",currency:this.currency?this.currency.evaluate(e):void 0,unit:this.unit?this.unit.evaluate(e):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(e):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(e):void 0}).format(this.number.evaluate(e))}eachChild(e){e(this.number),this.locale&&e(this.locale),this.currency&&e(this.currency),this.unit&&e(this.unit),this.minFractionDigits&&e(this.minFractionDigits),this.maxFractionDigits&&e(this.maxFractionDigits)}outputDefined(){return!1}serialize(){const e={};return this.locale&&(e.locale=this.locale.serialize()),this.currency&&(e.currency=this.currency.serialize()),this.unit&&(e.unit=this.unit.serialize()),this.minFractionDigits&&(e["min-fraction-digits"]=this.minFractionDigits.serialize()),this.maxFractionDigits&&(e["max-fraction-digits"]=this.maxFractionDigits.serialize()),["number-format",this.number.serialize(),e]}}class ul{constructor(e){this.type=Ko,this.input=e}static parse(e,t){if(2!==e.length)return t.error(`Expected 1 argument, but found ${e.length-1} instead.`);const n=t.parse(e[1],1);return n?"array"!==n.type.kind&&"string"!==n.type.kind&&"value"!==n.type.kind?t.error(`Expected argument of type string or array, but found ${sa(n.type)} instead.`):new ul(n):null}evaluate(e){const t=this.input.evaluate(e);if("string"==typeof t)return t.length;if(Array.isArray(t))return t.length;throw new Ia(`Expected value to be of type string or array, but found ${sa(va(t))} instead.`)}eachChild(e){e(this.input)}outputDefined(){return!1}serialize(){const e=["length"];return this.eachChild((t=>{e.push(t.serialize())})),e}}const dl={"==":nl,"!=":rl,">":al,"<":il,">=":ll,"<=":sl,array:wa,at:zs,boolean:wa,case:Xs,coalesce:Us,collator:Oa,format:Pa,image:Sa,in:qs,"index-of":Ws,interpolate:Ds,"interpolate-hcl":Ds,"interpolate-lab":Ds,length:ul,let:Bs,literal:ba,match:Zs,number:wa,"number-format":cl,object:wa,slice:Qs,step:ds,string:wa,"to-boolean":Ga,"to-color":Ga,"to-number":Ga,"to-string":Ga,var:os,within:es};function pl(e,[t,n,r,i]){t=t.evaluate(e),n=n.evaluate(e),r=r.evaluate(e);const o=i?i.evaluate(e):1,a=ma(t,n,r,o);if(a)throw new Ia(a);return new Do(t/255*o,n/255*o,r/255*o,o)}function hl(e,t){return e in t}function gl(e,t){const n=t[e];return void 0===n?null:n}function fl(e){return{type:e}}Ra.register(dl,{error:[{kind:"error"},[Qo],(e,[t])=>{throw new Ia(t.evaluate(e))}],typeof:[Qo,[na],(e,[t])=>sa(va(t.evaluate(e)))],"to-rgba":[aa(Ko,4),[ea],(e,[t])=>t.evaluate(e).toArray()],rgb:[ea,[Ko,Ko,Ko],pl],rgba:[ea,[Ko,Ko,Ko,Ko],pl],has:{type:$o,overloads:[[[Qo],(e,[t])=>hl(t.evaluate(e),e.properties())],[[Qo,ta],(e,[t,n])=>hl(t.evaluate(e),n.evaluate(e))]]},get:{type:na,overloads:[[[Qo],(e,[t])=>gl(t.evaluate(e),e.properties())],[[Qo,ta],(e,[t,n])=>gl(t.evaluate(e),n.evaluate(e))]]},"feature-state":[na,[Qo],(e,[t])=>gl(t.evaluate(e),e.featureState||{})],properties:[ta,[],e=>e.properties()],"geometry-type":[Qo,[],e=>e.geometryType()],id:[na,[],e=>e.id()],zoom:[Ko,[],e=>e.globals.zoom],pitch:[Ko,[],e=>e.globals.pitch||0],"distance-from-center":[Ko,[],e=>e.distanceFromCenter()],"heatmap-density":[Ko,[],e=>e.globals.heatmapDensity||0],"line-progress":[Ko,[],e=>e.globals.lineProgress||0],"sky-radial-progress":[Ko,[],e=>e.globals.skyRadialProgress||0],accumulated:[na,[],e=>void 0===e.globals.accumulated?null:e.globals.accumulated],"+":[Ko,fl(Ko),(e,t)=>{let n=0;for(const r of t)n+=r.evaluate(e);return n}],"*":[Ko,fl(Ko),(e,t)=>{let n=1;for(const r of t)n*=r.evaluate(e);return n}],"-":{type:Ko,overloads:[[[Ko,Ko],(e,[t,n])=>t.evaluate(e)-n.evaluate(e)],[[Ko],(e,[t])=>-t.evaluate(e)]]},"/":[Ko,[Ko,Ko],(e,[t,n])=>t.evaluate(e)/n.evaluate(e)],"%":[Ko,[Ko,Ko],(e,[t,n])=>t.evaluate(e)%n.evaluate(e)],ln2:[Ko,[],()=>Math.LN2],pi:[Ko,[],()=>Math.PI],e:[Ko,[],()=>Math.E],"^":[Ko,[Ko,Ko],(e,[t,n])=>Math.pow(t.evaluate(e),n.evaluate(e))],sqrt:[Ko,[Ko],(e,[t])=>Math.sqrt(t.evaluate(e))],log10:[Ko,[Ko],(e,[t])=>Math.log(t.evaluate(e))/Math.LN10],ln:[Ko,[Ko],(e,[t])=>Math.log(t.evaluate(e))],log2:[Ko,[Ko],(e,[t])=>Math.log(t.evaluate(e))/Math.LN2],sin:[Ko,[Ko],(e,[t])=>Math.sin(t.evaluate(e))],cos:[Ko,[Ko],(e,[t])=>Math.cos(t.evaluate(e))],tan:[Ko,[Ko],(e,[t])=>Math.tan(t.evaluate(e))],asin:[Ko,[Ko],(e,[t])=>Math.asin(t.evaluate(e))],acos:[Ko,[Ko],(e,[t])=>Math.acos(t.evaluate(e))],atan:[Ko,[Ko],(e,[t])=>Math.atan(t.evaluate(e))],min:[Ko,fl(Ko),(e,t)=>Math.min(...t.map((t=>t.evaluate(e))))],max:[Ko,fl(Ko),(e,t)=>Math.max(...t.map((t=>t.evaluate(e))))],abs:[Ko,[Ko],(e,[t])=>Math.abs(t.evaluate(e))],round:[Ko,[Ko],(e,[t])=>{const n=t.evaluate(e);return n<0?-Math.round(-n):Math.round(n)}],floor:[Ko,[Ko],(e,[t])=>Math.floor(t.evaluate(e))],ceil:[Ko,[Ko],(e,[t])=>Math.ceil(t.evaluate(e))],"filter-==":[$o,[Qo,na],(e,[t,n])=>e.properties()[t.value]===n.value],"filter-id-==":[$o,[na],(e,[t])=>e.id()===t.value],"filter-type-==":[$o,[Qo],(e,[t])=>e.geometryType()===t.value],"filter-<":[$o,[Qo,na],(e,[t,n])=>{const r=e.properties()[t.value],i=n.value;return typeof r==typeof i&&r{const n=e.id(),r=t.value;return typeof n==typeof r&&n":[$o,[Qo,na],(e,[t,n])=>{const r=e.properties()[t.value],i=n.value;return typeof r==typeof i&&r>i}],"filter-id->":[$o,[na],(e,[t])=>{const n=e.id(),r=t.value;return typeof n==typeof r&&n>r}],"filter-<=":[$o,[Qo,na],(e,[t,n])=>{const r=e.properties()[t.value],i=n.value;return typeof r==typeof i&&r<=i}],"filter-id-<=":[$o,[na],(e,[t])=>{const n=e.id(),r=t.value;return typeof n==typeof r&&n<=r}],"filter->=":[$o,[Qo,na],(e,[t,n])=>{const r=e.properties()[t.value],i=n.value;return typeof r==typeof i&&r>=i}],"filter-id->=":[$o,[na],(e,[t])=>{const n=e.id(),r=t.value;return typeof n==typeof r&&n>=r}],"filter-has":[$o,[na],(e,[t])=>t.value in e.properties()],"filter-has-id":[$o,[],e=>null!==e.id()&&void 0!==e.id()],"filter-type-in":[$o,[aa(Qo)],(e,[t])=>t.value.indexOf(e.geometryType())>=0],"filter-id-in":[$o,[aa(na)],(e,[t])=>t.value.indexOf(e.id())>=0],"filter-in-small":[$o,[Qo,aa(na)],(e,[t,n])=>n.value.indexOf(e.properties()[t.value])>=0],"filter-in-large":[$o,[Qo,aa(na)],(e,[t,n])=>function(e,t,n,r){for(;n<=r;){const i=n+r>>1;if(t[i]===e)return!0;t[i]>e?r=i-1:n=i+1}return!1}(e.properties()[t.value],n.value,0,n.value.length-1)],all:{type:$o,overloads:[[[$o,$o],(e,[t,n])=>t.evaluate(e)&&n.evaluate(e)],[fl($o),(e,t)=>{for(const n of t)if(!n.evaluate(e))return!1;return!0}]]},any:{type:$o,overloads:[[[$o,$o],(e,[t,n])=>t.evaluate(e)||n.evaluate(e)],[fl($o),(e,t)=>{for(const n of t)if(n.evaluate(e))return!0;return!1}]]},"!":[$o,[$o],(e,[t])=>!t.evaluate(e)],"is-supported-script":[$o,[Qo],(e,[t])=>{const n=e.globals&&e.globals.isSupportedScript;return!n||n(t.evaluate(e))}],upcase:[Qo,[Qo],(e,[t])=>t.evaluate(e).toUpperCase()],downcase:[Qo,[Qo],(e,[t])=>t.evaluate(e).toLowerCase()],concat:[Qo,fl(na),(e,t)=>t.map((t=>Aa(t.evaluate(e)))).join("")],"resolved-locale":[Qo,[ra],(e,[t])=>t.evaluate(e).resolvedLocale()]});var ml=dl;function yl(e){return{result:"success",value:e}}function vl(e){return{result:"error",value:e}}function Al(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}class Cl{constructor(e,t){this.expression=e,this._warningHistory={},this._evaluator=new ka,this._defaultValue=t?function(e){return"color"===e.type&&(Al(e.default)||Array.isArray(e.default))?new Do(0,0,0,0):"color"===e.type?Do.parse(e.default)||null:void 0===e.default?null:e.default}(t):null,this._enumValues=t&&"enum"===t.type?t.values:null}evaluateWithoutErrorHandling(e,t,n,r,i,o,a,s){return this._evaluator.globals=e,this._evaluator.feature=t,this._evaluator.featureState=n,this._evaluator.canonical=r||null,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=o,this._evaluator.featureTileCoord=a||null,this._evaluator.featureDistanceData=s||null,this.expression.evaluate(this._evaluator)}evaluate(e,t,n,r,i,o,a,s){this._evaluator.globals=e,this._evaluator.feature=t||null,this._evaluator.featureState=n||null,this._evaluator.canonical=r||null,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=o||null,this._evaluator.featureTileCoord=a||null,this._evaluator.featureDistanceData=s||null;try{const e=this.expression.evaluate(this._evaluator);if(null==e||"number"==typeof e&&e!=e)return this._defaultValue;if(this._enumValues&&!(e in this._enumValues))throw new Ia(`Expected value to be one of ${Object.keys(this._enumValues).map((e=>JSON.stringify(e))).join(", ")}, but found ${JSON.stringify(e)} instead.`);return e}catch(e){return this._warningHistory[e.message]||(this._warningHistory[e.message]=!0,"undefined"!=typeof console&&console.warn(e.message)),this._defaultValue}}}function bl(e,t){const n=new ss(ml,[],t?function(e){const t={color:ea,string:Qo,number:Ko,enum:Qo,boolean:$o,formatted:ia,resolvedImage:oa};if("array"===e.type)return aa(t[e.value]||na,e.length);return t[e.type]}(t):void 0),r=n.parse(e,void 0,void 0,void 0,t&&"string"===t.type?{typeAnnotation:"coerce"}:void 0);return r?yl(new Cl(r,t)):vl(n.errors)}class Il{constructor(e,t){this.kind=e,this._styleExpression=t,this.isStateDependent="constant"!==e&&!ns(t.expression)}evaluateWithoutErrorHandling(e,t,n,r,i,o){return this._styleExpression.evaluateWithoutErrorHandling(e,t,n,r,i,o)}evaluate(e,t,n,r,i,o){return this._styleExpression.evaluate(e,t,n,r,i,o)}}class _l{constructor(e,t,n,r){this.kind=e,this.zoomStops=n,this._styleExpression=t,this.isStateDependent="camera"!==e&&!ns(t.expression),this.interpolationType=r}evaluateWithoutErrorHandling(e,t,n,r,i,o){return this._styleExpression.evaluateWithoutErrorHandling(e,t,n,r,i,o)}evaluate(e,t,n,r,i,o){return this._styleExpression.evaluate(e,t,n,r,i,o)}interpolationFactor(e,t,n){return this.interpolationType?Ds.interpolationFactor(this.interpolationType,e,t,n):0}}function El(e,t){if("error"===(e=bl(e,t)).result)return e;const n=e.value.expression,r=ts(n);if(!r&&!function(e){return"data-driven"===e["property-type"]}(t))return vl([new Yo("","data expressions not supported")]);const i=rs(n,["zoom","pitch","distance-from-center"]);if(!i&&!function(e){return!!e.expression&&e.expression.parameters.indexOf("zoom")>-1}(t))return vl([new Yo("","zoom expressions not supported")]);const o=wl(n);if(!o&&!i)return vl([new Yo("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.')]);if(o instanceof Yo)return vl([o]);if(o instanceof Ds&&!function(e){return!!e.expression&&e.expression.interpolated}(t))return vl([new Yo("",'"interpolate" expressions cannot be used with this property')]);if(!o)return yl(new Il(r?"constant":"source",e.value));const a=o instanceof Ds?o.interpolation:void 0;return yl(new _l(r?"camera":"composite",e.value,o.labels,a))}function wl(e){let t=null;if(e instanceof Bs)t=wl(e.result);else if(e instanceof Us){for(const n of e.args)if(t=wl(n),t)break}else(e instanceof ds||e instanceof Ds)&&e.input instanceof Ra&&"zoom"===e.input.name&&(t=e);return t instanceof Yo||e.eachChild((e=>{const n=wl(e);n instanceof Yo?t=n:!t&&n?t=new Yo("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.'):t&&n&&t!==n&&(t=new Yo("",'Only one zoom-based "step" or "interpolate" subexpression may be used in an expression.'))})),t}function Pl(e){if(Array.isArray(e))return e.map(Pl);if(e instanceof Object&&!(e instanceof Number||e instanceof String||e instanceof Boolean)){const t={};for(const n in e)t[n]=Pl(e[n]);return t}return function(e){return e instanceof Number||e instanceof String||e instanceof Boolean?e.valueOf():e}(e)}var Sl={$version:8,$root:{version:{required:!0,type:"enum",values:[8]},name:{type:"string"},metadata:{type:"*"},center:{type:"array",value:"number"},zoom:{type:"number"},bearing:{type:"number",default:0,period:360,units:"degrees"},pitch:{type:"number",default:0,units:"degrees"},light:{type:"light"},terrain:{type:"terrain"},fog:{type:"fog"},sources:{required:!0,type:"sources"},sprite:{type:"string"},glyphs:{type:"string"},transition:{type:"transition"},projection:{type:"projection"},layers:{required:!0,type:"array",value:"layer"}},sources:{"*":{type:"source"}},source:["source_vector","source_raster","source_raster_dem","source_geojson","source_video","source_image"],source_vector:{type:{required:!0,type:"enum",values:{vector:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},attribution:{type:"string"},promoteId:{type:"promoteId"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_raster:{type:{required:!0,type:"enum",values:{raster:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},attribution:{type:"string"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_raster_dem:{type:{required:!0,type:"enum",values:{"raster-dem":{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},attribution:{type:"string"},encoding:{type:"enum",values:{terrarium:{},mapbox:{}},default:"mapbox"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_geojson:{type:{required:!0,type:"enum",values:{geojson:{}}},data:{type:"*"},maxzoom:{type:"number",default:18},attribution:{type:"string"},buffer:{type:"number",default:128,maximum:512,minimum:0},filter:{type:"*"},tolerance:{type:"number",default:.375},cluster:{type:"boolean",default:!1},clusterRadius:{type:"number",default:50,minimum:0},clusterMaxZoom:{type:"number"},clusterMinPoints:{type:"number"},clusterProperties:{type:"*"},lineMetrics:{type:"boolean",default:!1},generateId:{type:"boolean",default:!1},promoteId:{type:"promoteId"}},source_video:{type:{required:!0,type:"enum",values:{video:{}}},urls:{required:!0,type:"array",value:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},source_image:{type:{required:!0,type:"enum",values:{image:{}}},url:{required:!0,type:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},layer:{id:{type:"string",required:!0},type:{type:"enum",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},"fill-extrusion":{},raster:{},hillshade:{},background:{},sky:{}},required:!0},metadata:{type:"*"},source:{type:"string"},"source-layer":{type:"string"},minzoom:{type:"number",minimum:0,maximum:24},maxzoom:{type:"number",minimum:0,maximum:24},filter:{type:"filter"},layout:{type:"layout"},paint:{type:"paint"}},layout:["layout_fill","layout_line","layout_circle","layout_heatmap","layout_fill-extrusion","layout_symbol","layout_raster","layout_hillshade","layout_background","layout_sky"],layout_background:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_sky:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_fill:{"fill-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_circle:{"circle-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_heatmap:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},"layout_fill-extrusion":{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"},"fill-extrusion-edge-radius":{type:"number",private:!0,default:0,minimum:0,maximum:1,"property-type":"constant"}},layout_line:{"line-cap":{type:"enum",values:{butt:{},round:{},square:{}},default:"butt",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-join":{type:"enum",values:{bevel:{},round:{},miter:{}},default:"miter",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-miter-limit":{type:"number",default:2,requires:[{"line-join":"miter"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-round-limit":{type:"number",default:1.05,requires:[{"line-join":"round"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_symbol:{"symbol-placement":{type:"enum",values:{point:{},line:{},"line-center":{}},default:"point",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-spacing":{type:"number",default:250,minimum:1,units:"pixels",requires:[{"symbol-placement":"line"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"symbol-avoid-edges":{type:"boolean",default:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"symbol-z-order":{type:"enum",values:{auto:{},"viewport-y":{},source:{}},default:"auto",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-allow-overlap":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-ignore-placement":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-optional":{type:"boolean",default:!1,requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-size":{type:"number",default:1,minimum:0,units:"factor of the original icon size",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-text-fit":{type:"enum",values:{none:{},width:{},height:{},both:{}},default:"none",requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-text-fit-padding":{type:"array",value:"number",length:4,default:[0,0,0,0],units:"pixels",requires:["icon-image","text-field",{"icon-text-fit":["both","width","height"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-image":{type:"resolvedImage",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-keep-upright":{type:"boolean",default:!1,requires:["icon-image",{"icon-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-offset":{type:"array",value:"number",length:2,default:[0,0],requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-field":{type:"formatted",default:"",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-font":{type:"array",value:"string",default:["Open Sans Regular","Arial Unicode MS Regular"],requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-size":{type:"number",default:16,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-width":{type:"number",default:10,minimum:0,units:"ems",requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-line-height":{type:"number",default:1.2,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-letter-spacing":{type:"number",default:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-justify":{type:"enum",values:{auto:{},left:{},center:{},right:{}},default:"center",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-radial-offset":{type:"number",units:"ems",default:0,requires:["text-field"],"property-type":"data-driven",expression:{interpolated:!0,parameters:["zoom","feature"]}},"text-variable-anchor":{type:"array",value:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["text-field",{"!":"text-variable-anchor"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-angle":{type:"number",default:45,units:"degrees",requires:["text-field",{"symbol-placement":["line","line-center"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-writing-mode":{type:"array",value:"enum",values:{horizontal:{},vertical:{}},requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-keep-upright":{type:"boolean",default:!0,requires:["text-field",{"text-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-transform":{type:"enum",values:{none:{},uppercase:{},lowercase:{}},default:"none",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-offset":{type:"array",value:"number",units:"ems",length:2,default:[0,0],requires:["text-field",{"!":"text-radial-offset"}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-allow-overlap":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-ignore-placement":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-optional":{type:"boolean",default:!1,requires:["text-field","icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_raster:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_hillshade:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},filter:{type:"array",value:"*"},filter_symbol:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature","pitch","distance-from-center"]}},filter_fill:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_line:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_circle:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},"filter_fill-extrusion":{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_heatmap:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_operator:{type:"enum",values:{"==":{},"!=":{},">":{},">=":{},"<":{},"<=":{},in:{},"!in":{},all:{},any:{},none:{},has:{},"!has":{},within:{}}},geometry_type:{type:"enum",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:"expression"},stops:{type:"array",value:"function_stop"},base:{type:"number",default:1,minimum:0},property:{type:"string",default:"$zoom"},type:{type:"enum",values:{identity:{},exponential:{},interval:{},categorical:{}},default:"exponential"},colorSpace:{type:"enum",values:{rgb:{},lab:{},hcl:{}},default:"rgb"},default:{type:"*",required:!1}},function_stop:{type:"array",minimum:0,maximum:24,value:["number","color"],length:2},expression:{type:"array",value:"*",minimum:1},expression_name:{type:"enum",values:{let:{group:"Variable binding"},var:{group:"Variable binding"},literal:{group:"Types"},array:{group:"Types"},at:{group:"Lookup"},in:{group:"Lookup"},"index-of":{group:"Lookup"},slice:{group:"Lookup"},case:{group:"Decision"},match:{group:"Decision"},coalesce:{group:"Decision"},step:{group:"Ramps, scales, curves"},interpolate:{group:"Ramps, scales, curves"},"interpolate-hcl":{group:"Ramps, scales, curves"},"interpolate-lab":{group:"Ramps, scales, curves"},ln2:{group:"Math"},pi:{group:"Math"},e:{group:"Math"},typeof:{group:"Types"},string:{group:"Types"},number:{group:"Types"},boolean:{group:"Types"},object:{group:"Types"},collator:{group:"Types"},format:{group:"Types"},image:{group:"Types"},"number-format":{group:"Types"},"to-string":{group:"Types"},"to-number":{group:"Types"},"to-boolean":{group:"Types"},"to-rgba":{group:"Color"},"to-color":{group:"Types"},rgb:{group:"Color"},rgba:{group:"Color"},get:{group:"Lookup"},has:{group:"Lookup"},length:{group:"Lookup"},properties:{group:"Feature data"},"feature-state":{group:"Feature data"},"geometry-type":{group:"Feature data"},id:{group:"Feature data"},zoom:{group:"Camera"},pitch:{group:"Camera"},"distance-from-center":{group:"Camera"},"heatmap-density":{group:"Heatmap"},"line-progress":{group:"Feature data"},"sky-radial-progress":{group:"sky"},accumulated:{group:"Feature data"},"+":{group:"Math"},"*":{group:"Math"},"-":{group:"Math"},"/":{group:"Math"},"%":{group:"Math"},"^":{group:"Math"},sqrt:{group:"Math"},log10:{group:"Math"},ln:{group:"Math"},log2:{group:"Math"},sin:{group:"Math"},cos:{group:"Math"},tan:{group:"Math"},asin:{group:"Math"},acos:{group:"Math"},atan:{group:"Math"},min:{group:"Math"},max:{group:"Math"},round:{group:"Math"},abs:{group:"Math"},ceil:{group:"Math"},floor:{group:"Math"},distance:{group:"Math"},"==":{group:"Decision"},"!=":{group:"Decision"},">":{group:"Decision"},"<":{group:"Decision"},">=":{group:"Decision"},"<=":{group:"Decision"},all:{group:"Decision"},any:{group:"Decision"},"!":{group:"Decision"},within:{group:"Decision"},"is-supported-script":{group:"String"},upcase:{group:"String"},downcase:{group:"String"},concat:{group:"String"},"resolved-locale":{group:"String"}}},fog:{range:{type:"array",default:[.5,10],minimum:-20,maximum:20,length:2,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"high-color":{type:"color","property-type":"data-constant",default:"#245cdf",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"space-color":{type:"color","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],4,"#010b19",7,"#367ab9"],expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"horizon-blend":{type:"number","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],4,.2,7,.1],minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"star-intensity":{type:"number","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],5,.35,6,0],minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},light:{anchor:{type:"enum",default:"viewport",values:{map:{},viewport:{}},"property-type":"data-constant",transition:!1,expression:{interpolated:!1,parameters:["zoom"]}},position:{type:"array",default:[1.15,210,30],length:3,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},intensity:{type:"number","property-type":"data-constant",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},projection:{name:{type:"enum",values:{albers:{},equalEarth:{},equirectangular:{},lambertConformalConic:{},mercator:{},naturalEarth:{},winkelTripel:{},globe:{}},default:"mercator",required:!0},center:{type:"array",length:2,value:"number","property-type":"data-constant",minimum:[-180,-90],maximum:[180,90],transition:!1,requires:[{name:["albers","lambertConformalConic"]}]},parallels:{type:"array",length:2,value:"number","property-type":"data-constant",minimum:[-90,-90],maximum:[90,90],transition:!1,requires:[{name:["albers","lambertConformalConic"]}]}},terrain:{source:{type:"string",required:!0},exaggeration:{type:"number","property-type":"data-constant",default:1,minimum:0,maximum:1e3,expression:{interpolated:!0,parameters:["zoom"]},transition:!0,requires:["source"]}},paint:["paint_fill","paint_line","paint_circle","paint_heatmap","paint_fill-extrusion","paint_symbol","paint_raster","paint_hillshade","paint_background","paint_sky"],paint_fill:{"fill-antialias":{type:"boolean",default:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-outline-color":{type:"color",transition:!0,requires:[{"!":"fill-pattern"},{"fill-antialias":!0}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"}},"paint_fill-extrusion":{"fill-extrusion-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-extrusion-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-extrusion-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"fill-extrusion-height":{type:"number",default:0,minimum:0,units:"meters",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-base":{type:"number",default:0,minimum:0,units:"meters",transition:!0,requires:["fill-extrusion-height"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-vertical-gradient":{type:"boolean",default:!0,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-ambient-occlusion-intensity":{"property-type":"data-constant",type:"number",private:!0,default:0,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"fill-extrusion-ambient-occlusion-radius":{"property-type":"data-constant",type:"number",private:!0,default:3,minimum:0,expression:{interpolated:!0,parameters:["zoom"]},transition:!0,requires:["fill-extrusion-edge-radius"]}},paint_line:{"line-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"line-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["line-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-width":{type:"number",default:1,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-gap-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-offset":{type:"number",default:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-dasharray":{type:"array",value:"number",minimum:0,transition:!1,units:"line widths",requires:[{"!":"line-pattern"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-gradient":{type:"color",transition:!1,requires:[{"!":"line-pattern"},{source:"geojson",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:["line-progress"]},"property-type":"color-ramp"},"line-trim-offset":{type:"array",value:"number",length:2,default:[0,0],minimum:[0,0],maximum:[1,1],transition:!1,requires:[{source:"geojson",has:{lineMetrics:!0}}],"property-type":"constant"}},paint_circle:{"circle-radius":{type:"number",default:5,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-blur":{type:"number",default:0,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"circle-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["circle-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-scale":{type:"enum",values:{map:{},viewport:{}},default:"map",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-alignment":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-stroke-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"}},paint_heatmap:{"heatmap-radius":{type:"number",default:30,minimum:1,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-weight":{type:"number",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-intensity":{type:"number",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"heatmap-color":{type:"color",default:["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 255, 0)",.1,"royalblue",.3,"cyan",.5,"lime",.7,"yellow",1,"red"],transition:!1,expression:{interpolated:!0,parameters:["heatmap-density"]},"property-type":"color-ramp"},"heatmap-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_symbol:{"icon-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-color":{type:"color",default:"#000000",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["icon-image","icon-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-color":{type:"color",default:"#000000",transition:!0,overridable:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["text-field","text-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_raster:{"raster-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-hue-rotate":{type:"number",default:0,period:360,transition:!0,units:"degrees",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-min":{type:"number",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-max":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-saturation":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-contrast":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-resampling":{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"raster-fade-duration":{type:"number",default:300,minimum:0,transition:!1,units:"milliseconds",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_hillshade:{"hillshade-illumination-direction":{type:"number",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-illumination-anchor":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-exaggeration":{type:"number",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-shadow-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-highlight-color":{type:"color",default:"#FFFFFF",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-accent-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_background:{"background-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"background-pattern"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"background-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"background-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_sky:{"sky-type":{type:"enum",values:{gradient:{},atmosphere:{}},default:"atmosphere",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-atmosphere-sun":{type:"array",value:"number",length:2,units:"degrees",minimum:[0,0],maximum:[360,180],transition:!1,requires:[{"sky-type":"atmosphere"}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-atmosphere-sun-intensity":{type:"number",requires:[{"sky-type":"atmosphere"}],default:10,minimum:0,maximum:100,transition:!1,"property-type":"data-constant"},"sky-gradient-center":{type:"array",requires:[{"sky-type":"gradient"}],value:"number",default:[0,0],length:2,units:"degrees",minimum:[0,0],maximum:[360,180],transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-gradient-radius":{type:"number",requires:[{"sky-type":"gradient"}],default:90,minimum:0,maximum:180,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-gradient":{type:"color",default:["interpolate",["linear"],["sky-radial-progress"],.8,"#87ceeb",1,"white"],transition:!1,requires:[{"sky-type":"gradient"}],expression:{interpolated:!0,parameters:["sky-radial-progress"]},"property-type":"color-ramp"},"sky-atmosphere-halo-color":{type:"color",default:"white",transition:!1,requires:[{"sky-type":"atmosphere"}],"property-type":"data-constant"},"sky-atmosphere-color":{type:"color",default:"white",transition:!1,requires:[{"sky-type":"atmosphere"}],"property-type":"data-constant"},"sky-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},transition:{duration:{type:"number",default:300,minimum:0,units:"milliseconds"},delay:{type:"number",default:0,minimum:0,units:"milliseconds"}},"property-type":{"data-driven":{type:"property-type"},"color-ramp":{type:"property-type"},"data-constant":{type:"property-type"},constant:{type:"property-type"}},promoteId:{"*":{type:"string"}}};function Ml(e){if(!0===e||!1===e)return!0;if(!Array.isArray(e)||0===e.length)return!1;switch(e[0]){case"has":return e.length>=2&&"$id"!==e[1]&&"$type"!==e[1];case"in":return e.length>=3&&("string"!=typeof e[1]||Array.isArray(e[2]));case"!in":case"!has":case"none":return!1;case"==":case"!=":case">":case">=":case"<":case"<=":return 3!==e.length||Array.isArray(e[1])||Array.isArray(e[2]);case"any":case"all":for(const t of e.slice(1))if(!Ml(t)&&"boolean"!=typeof t)return!1;return!0;default:return!0}}function xl(e,t="fill"){if(null==e)return{filter:()=>!0,needGeometry:!1,needFeature:!1};Ml(e)||(e=Dl(e));const n=e;let r=!0;try{r=function(e){if(!kl(e))return e;let t=Pl(e);return Ll(t),t=Gl(t),t}(n)}catch(e){console.warn(`Failed to extract static filter. Filter will continue working, but at higher memory usage and slower framerate.\nThis is most likely a bug, please report this via https://github.com/mapbox/mapbox-gl-js/issues/new?assignees=&labels=&template=Bug_report.md\nand paste the contents of this message in the report.\nThank you!\nFilter Expression:\n${JSON.stringify(n,null,2)}\n `)}const i=Sl[`filter_${t}`],o=bl(r,i);let a=null;if("error"===o.result)throw new Error(o.value.map((e=>`${e.key}: ${e.message}`)).join(", "));a=(e,t,n)=>o.value.evaluate(e,t,{},n);let s=null,l=null;if(r!==n){const e=bl(n,i);if("error"===e.result)throw new Error(e.value.map((e=>`${e.key}: ${e.message}`)).join(", "));s=(t,n,r,i,o)=>e.value.evaluate(t,n,{},r,void 0,void 0,i,o),l=!ts(e.value.expression)}return{filter:a,dynamicFilter:s||void 0,needGeometry:Ol(r),needFeature:!!l}}function Gl(e){if(!Array.isArray(e))return e;const t=function(e){if(Tl.has(e[0]))for(let t=1;tGl(e)))}function Ll(e){let t=!1;const n=[];if("case"===e[0]){for(let r=1;r",">=","<","<=","to-boolean"]);function Rl(e,t){return et?1:0}function Ol(e){if(!Array.isArray(e))return!1;if("within"===e[0])return!0;for(let t=1;t"===t||"<="===t||">="===t?Nl(e[1],e[2],t):"any"===t?(n=e.slice(1),["any"].concat(n.map(Dl))):"all"===t?["all"].concat(e.slice(1).map(Dl)):"none"===t?["all"].concat(e.slice(1).map(Dl).map(Bl)):"in"===t?Ul(e[1],e.slice(2)):"!in"===t?Bl(Ul(e[1],e.slice(2))):"has"===t?jl(e[1]):"!has"===t?Bl(jl(e[1])):"within"!==t||e}function Nl(e,t,n){switch(e){case"$type":return[`filter-type-${n}`,t];case"$id":return[`filter-id-${n}`,t];default:return[`filter-${n}`,e,t]}}function Ul(e,t){if(0===t.length)return!1;switch(e){case"$type":return["filter-type-in",["literal",t]];case"$id":return["filter-id-in",["literal",t]];default:return t.length>200&&!t.some((e=>typeof e!=typeof t[0]))?["filter-in-large",e,["literal",t.sort(Rl)]]:["filter-in-small",e,["literal",t]]}}function jl(e){switch(e){case"$type":return!0;case"$id":return["filter-has-id"];default:return["filter-has",e]}}function Bl(e){return["!",e]}var Fl=["type","source","source-layer","minzoom","maxzoom","filter","layout"];function zl(e,t){const n={};for(const t in e)"ref"!==t&&(n[t]=e[t]);return Fl.forEach((e=>{e in t&&(n[e]=t[e])})),n}function Vl(e){e=e.slice();const t=Object.create(null);for(let n=0;n1?d[d.length-2].toLowerCase():"";if(p==h||p==h.replace("-","")||g+"-"+p==h){a=i?a:ql[h],d.pop(),g&&h.startsWith(g)&&d.pop();break}}i||"number"!=typeof p||(a=p,i=!0);var f=d.join(Hl).replace("Klokantech Noto Sans","Noto Sans");-1!==f.indexOf(Hl)&&(f='"'+f+'"'),l.push(f)}r=Yl[e]=[s,a,l]}return r[0]+Hl+r[1]+Hl+t+"px"+(n?"/"+n:"")+Hl+r[2]}));const Jl="https://api.mapbox.com";function Xl(e){const t="mapbox://";return 0!==e.indexOf(t)?"":e.slice(9)}function Kl(e,t){const n=Xl(e);if(!n)return decodeURI(new URL(e,location.href).href);const r="styles/";if(0!==n.indexOf(r))throw new Error(`unexpected style url: ${e}`);const i=n.slice(7);return`${Jl}/styles/v1/${i}?&access_token=${t}`}const Ql=["a","b","c","d"];function $l(e,t,n,r){const i=new URL(e,r),o=Xl(e);if(!o)return t?(i.searchParams.has(n)||i.searchParams.set(n,t),[decodeURI(i.href)]):[decodeURI(i.href)];if("mapbox.satellite"===o){const e=window.devicePixelRatio>=1.5?"@2x":"";return[`https://api.mapbox.com/v4/${o}/{z}/{x}/{y}${e}.webp?access_token=${t}`]}return Ql.map((e=>`https://${e}.tiles.mapbox.com/v4/${o}/{z}/{x}/{y}.vector.pbf?access_token=${t}`))}const ec={},tc={};let nc=0;function rc(e){return e.id||(e.id=nc++),e.id}function ic(e,t){return rc(e)+"."+(0,Eo.getUid)(t)}function oc(e){let t=ec[e.id];return t||(t={},ec[rc(e)]=t),t}function ac(e){let t=tc[e.id];return t||(t={},tc[rc(e)]=t),t}function sc(e){return e*Math.PI/180}const lc=function(){const e=[];for(let t=78271.51696402048;e.length<=24;t/=2)e.push(t);return e}();function cc(e,t){if("undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"undefined"!=typeof OffscreenCanvas)return new OffscreenCanvas(e,t);const n=document.createElement("canvas");return n.width=e,n.height=t,n}function uc(e,t){let n=0;const r=t.length;for(;ni)).then((e=>(e instanceof Request||(e=new Request(e)),e.headers.get("Accept")||e.headers.set("Accept","application/json"),r&&(r.request=e),fetch(e).then((function(e){return delete pc[t],e.ok?e.json():Promise.reject(new Error("Error fetching source "+t))})).catch((function(e){return delete pc[t],Promise.reject(new Error("Error fetching source "+t))})))));return pc[t]=[i,o],o}function gc(e,t){if("string"!=typeof e)return Promise.resolve(e);if(!e.trim().startsWith("{"))return hc("Style",e=Kl(e,t.accessToken),t);try{const t=JSON.parse(e);return Promise.resolve(t)}catch(e){return Promise.reject(e)}}const fc={};function mc(e,t,n={}){const r=[t,JSON.stringify(e)].toString();let i=fc[r];if(!i||n.transformRequest){let o;n.transformRequest&&(o=(e,t)=>{const r=n.transformRequest&&n.transformRequest(t,"Tiles")||t;if(e instanceof undefined.VectorTile)e.setLoader(((t,n,i)=>{(0,bo.toPromise)((()=>r)).then((n=>{fetch(n).then((e=>e.arrayBuffer())).then((n=>{const r=e.getFormat().readFeatures(n,{extent:t,featureProjection:i});e.setFeatures(r)})).catch((t=>e.setState(_o.ERROR)))}))}));else{const t=e.getImage();(0,bo.toPromise)((()=>r)).then((n=>{n instanceof Request?fetch(n).then((e=>e.blob())).then((e=>{const n=URL.createObjectURL(e);t.addEventListener("load",(()=>URL.revokeObjectURL(n))),t.addEventListener("error",(()=>URL.revokeObjectURL(n))),t.src=n})).catch((t=>e.setState(_o.ERROR))):t.src=n}))}});const a=e.url;if(a&&!e.tiles){const r=$l(a,n.accessToken,n.accessTokenParam||"access_token",t||location.href);if(a.startsWith("mapbox://"))i=Promise.resolve({tileJson:Object.assign({},e,{url:void 0,tiles:r}),tileLoadFunction:o});else{const e={};i=hc("Source",r[0],n,e).then((function(t){return t.tiles=t.tiles.map((function(r){return"tms"===t.scheme&&(r=r.replace("{y}","{-y}")),$l(r,n.accessToken,n.accessTokenParam||"access_token",e.request.url)[0]})),Promise.resolve({tileJson:t,tileLoadFunction:o})}))}}else e=Object.assign({},e,{tiles:e.tiles.map((function(r){return"tms"===e.scheme&&(r=r.replace("{y}","{-y}")),$l(r,n.accessToken,n.accessTokenParam||"access_token",t||location.href)[0]}))}),i=Promise.resolve({tileJson:Object.assign({},e),tileLoadFunction:o});fc[r]=i}return i}function yc(e,t,n,r){const i=[2*n*t.pixelRatio+t.width,2*n*t.pixelRatio+t.height],o=cc(i[0],i[1]),a=o.getContext("2d");a.drawImage(e,t.x,t.y,t.width,t.height,n*t.pixelRatio,n*t.pixelRatio,t.width,t.height);const s=a.getImageData(0,0,i[0],i[1]);a.globalCompositeOperation="destination-over",a.fillStyle=`rgba(${255*r.r},${255*r.g},${255*r.b},${r.a})`;const l=s.data;for(let e=0,r=s.width;e0&&a.arc(e,i,n*t.pixelRatio,0,2*Math.PI)}return a.fill(),o}function vc(e,t,n){const r=Math.max(0,Math.min(1,(n-e)/(t-e)));return r*r*(3-2*r)}function Ac(e,t,n){const r=cc(t.width,t.height),i=r.getContext("2d");i.drawImage(e,t.x,t.y,t.width,t.height,0,0,t.width,t.height);const o=i.getImageData(0,0,t.width,t.height),a=o.data;for(let e=0,t=o.width;e0?(a[i+0]=Math.round(255*n.r*l),a[i+1]=Math.round(255*n.g*l),a[i+2]=Math.round(255*n.b*l),a[i+3]=Math.round(255*l)):a[i+3]=0}return i.putImageData(o,0,0),r}const Cc=Array(256).join(" ");function bc(e,t){if(t>=.05){let n="";const r=e.split("\n"),i=Cc.slice(0,Math.round(t/.1));for(let e=0,t=r.length;e0&&(n+="\n"),n+=r[e].split("").join(i);return n}return e}let Ic;function _c(){return Ic||(Ic=cc(1,1).getContext("2d")),Ic}function Ec(e,t){return _c().measureText(e).width+(e.length-1)*t}const wc={};function Pc(e,t,n,r){if(-1!==e.indexOf("\n")){const i=e.split("\n"),o=[];for(let e=0,a=i.length;e1){const e=_c();e.font=t;const i=e.measureText("M").width*n;let s="";const l=[];for(let e=0,t=a.length;e1;++e){const n=l[e];if(Ec(n,r)<.35*i){const i=e>0?Ec(l[e-1],r):1/0,o=e.7*i&&Ec(o,r)<.6*i){const a=n.split(" "),s=a.pop();Ec(s,r)<.2*i&&(l[e]=a.join(" "),l[e+1]=s+" "+o),t-=1}}o=l.join("\n")}else o=e;o=bc(o,r),wc[i]=o}return o}const Sc=/font-family: ?([^;]*);/,Mc=/("|')/g;let xc;function Gc(e){if(!xc){xc={};const e=document.styleSheets;for(let t=0,n=e.length;t0&&"string"==typeof c[0]&&c[0]in ml);if(!o&&Al(r)&&(r=Uo(r,i),o=!0),o){const e=function(e,t){const n=El(e,t);if("error"===n.result)throw new Error(n.value.map((e=>`${e.key}: ${e.message}`)).join(", "));return n.value}(r,i);l[n]=e.evaluate.bind(e)}else"color"==i.type&&(r=Do.parse(r)),l[n]=function(){return r}}var c;return Oc.zoom=r,l[n](Oc,i,a)}function jc(e,t,n,r,i){if(!Uc(e,"layout",`${r}-allow-overlap`,t,n,i))return"declutter";return Uc(e,"layout",`${r}-ignore-placement`,t,n,i)?"none":"obstacle"}function Bc(e,t,n,r,i){return i||console.warn("No filterCache provided to evaluateFilter()"),e in i||(i[e]=xl(t).filter),Oc.zoom=r,i[e](Oc,n)}let Fc=!1;function zc(e,t){if(e){if(!Fc&&(0===e.a||0===t))return;const n=e.a;return t=void 0===t?1:t,0===n?"transparent":"rgba("+Math.round(255*e.r/n)+","+Math.round(255*e.g/n)+","+Math.round(255*e.b/n)+","+n*t+")"}return e}const Vc=/\{[^{}}]*\}/g;function qc(e,t){return e.replace(Vc,(function(e){return t[e.slice(1,-1)]||""}))}let Hc=!1;const Wc={};function Yc(e,t,n,r=lc,i=void 0,o=void 0,a=void 0,s=void 0){if("string"==typeof t&&(t=JSON.parse(t)),8!=t.version)throw new Error("glStyle version 8 required.");let l,c,u;if(Wc[ic(t,e)]=Array.from(arguments),o)if("undefined"!=typeof Image){const t=new Image;let n;(0,bo.toPromise)((()=>o)).then((e=>{e instanceof Request?fetch(e).then((e=>e.blob())).then((e=>{n=URL.createObjectURL(e),t.src=n})).catch((()=>{})):(t.crossOrigin="anonymous",t.src=e,n&&URL.revokeObjectURL(n))})),t.onload=function(){l=t,c=[t.width,t.height],e.changed(),t.onload=null}}else if("undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope){const e=self;e.postMessage({action:"loadImage",src:o}),e.addEventListener("message",(function(e){"imageLoaded"===e.data.action&&e.data.src===o&&(l=e.data.image,c=[l.width,l.height])}))}const d=Vl(t.layers),p={},h=[],g={},f={},m=oc(t),y=ac(t);let v;for(let e=0,r=d.length;e=M.maxzoom)continue;const k=M.filter;if(!k||Bc(x,k,E,I,y)){let r,d,y,v,x,k;P=M;const T=p.index;if(3==_&&("fill"==M.type||"fill-extrusion"==M.type))if(d=Uc(M,"paint",M.type+"-opacity",I,E,m,w),M.type+"-pattern"in L){const e=Uc(M,"paint",M.type+"-pattern",I,E,m,w);if(e){const t="string"==typeof e?qc(e,h):e.toString();if(l&&i&&i[t]){++S,k=b[S],k&&k.getFill()&&!k.getStroke()&&!k.getText()||(k=new Tt({fill:new jt}),b[S]=k),y=k.getFill(),k.setZIndex(T);const e=t+"."+d;let n=f[e];if(!n){const r=i[t],o=cc(r.width,r.height),a=o.getContext("2d");a.globalAlpha=d,a.drawImage(l,r.x,r.y,r.width,r.height,0,0,r.width,r.height),n=a.createPattern(o,"repeat"),f[e]=n}y.setColor(n)}}}else r=zc(Uc(M,"paint",M.type+"-color",I,E,m,w),d),M.type+"-outline-color"in L&&(x=zc(Uc(M,"paint",M.type+"-outline-color",I,E,m,w),d)),x||(x=r),(r||x)&&(++S,k=b[S],(!k||r&&!k.getFill()||!r&&k.getFill()||x&&!k.getStroke()||!x&&k.getStroke()||k.getText())&&(k=new Tt({fill:r?new jt:void 0,stroke:x?new Ft:void 0}),b[S]=k),r&&(y=k.getFill(),y.setColor(r)),x&&(v=k.getStroke(),v.setColor(x),v.setWidth(.5)),k.setZIndex(T));if(1!=_&&"line"==M.type){r="line-pattern"in L?void 0:zc(Uc(M,"paint","line-color",I,E,m,w),Uc(M,"paint","line-opacity",I,E,m,w));const e=Uc(M,"paint","line-width",I,E,m,w);r&&e>0&&(++S,k=b[S],k&&k.getStroke()&&!k.getFill()&&!k.getText()||(k=new Tt({stroke:new Ft}),b[S]=k),v=k.getStroke(),v.setLineCap(Uc(M,"layout","line-cap",I,E,m,w)),v.setLineJoin(Uc(M,"layout","line-join",I,E,m,w)),v.setMiterLimit(Uc(M,"layout","line-miter-limit",I,E,m,w)),v.setColor(r),v.setWidth(e),v.setLineDash(L["line-dasharray"]?Uc(M,"paint","line-dasharray",I,E,m,w).map((function(t){return t*e})):null),k.setZIndex(T))}let R,O,D,N,U,j,B,F,z,V=!1,q=null,H=0;if((1==_||2==_)&&"icon-image"in G){const t=Uc(M,"layout","icon-image",I,E,m,w);if(t){let r;R="string"==typeof t?qc(t,h):t.toString();const a=s?s(e,R):void 0;if(l&&i&&i[R]||a){const e=Uc(M,"layout","icon-rotation-alignment",I,E,m,w);if(2==_){const t=n.getGeometry();if(t.getFlatMidpoint||t.getFlatMidpoints){const n=t.getExtent();if(Math.sqrt(Math.max(Math.pow((n[2]-n[0])/o,2),Math.pow((n[3]-n[1])/o,2)))>150){const n="MultiLineString"===t.getType()?t.getFlatMidpoints():t.getFlatMidpoint();Nc||(Dc=[NaN,NaN],Nc=new Co("Point",Dc,[],2,{},void 0)),r=Nc,Dc[0]=n[0],Dc[1]=n[1];if("line"===Uc(M,"layout","symbol-placement",I,E,m,w)&&"map"===e){const e=t.getStride(),r=t.getFlatCoordinates();for(let t=0,i=r.length-e;t=l){H=Math.atan2(o-s,a-i);break}}}}}}if(2!==_||r){const t=Uc(M,"layout","icon-size",I,E,m,w),n=void 0!==L["icon-color"]?Uc(M,"paint","icon-color",I,E,m,w):null;if(!n||0!==n.a){const r=Uc(M,"paint","icon-halo-color",I,E,m,w),o=Uc(M,"paint","icon-halo-width",I,E,m,w);let s=`${R}.${t}.${o}.${r}`;if(null!==n&&(s+=`.${n}`),O=g[s],!O){const d=jc(M,I,E,"icon",m);let p;"icon-offset"in G&&(p=Uc(M,"layout","icon-offset",I,E,m,w).slice(0),p[0]*=t,p[1]*=-t);let h=n?[255*n.r,255*n.g,255*n.b,n.a]:void 0;if(a){const n={color:h,rotateWithView:"map"===e,displacement:p,declutterMode:d,scale:t};"string"==typeof a?n.src=a:(n.img=a,n.imgSize=[a.width,a.height]),O=new Nt(n)}else{const a=i[R];let s,g,f;o?a.sdf?(s=yc(Ac(l,a,n||[0,0,0,1]),{x:0,y:0,width:a.width,height:a.height,pixelRatio:a.pixelRatio},o,r),h=void 0):s=yc(l,a,o,r):(a.sdf?(u||(u=Ac(l,{x:0,y:0,width:c[0],height:c[1]},{r:1,g:1,b:1,a:1})),s=u):s=l,g=[a.width,a.height],f=[a.x,a.y]),O=new Nt({color:h,img:s,imgSize:c,size:g,offset:f,rotateWithView:"map"===e,scale:t/a.pixelRatio,displacement:p,declutterMode:d})}g[s]=O}}O&&(++S,k=b[S],k&&k.getImage()&&!k.getFill()&&!k.getStroke()||(k=new Tt,b[S]=k),k.setGeometry(r),O.setRotation(H+sc(Uc(M,"layout","icon-rotate",I,E,m,w))),O.setOpacity(Uc(M,"paint","icon-opacity",I,E,m,w)),O.setAnchor(Tc[Uc(M,"layout","icon-anchor",I,E,m,w)]),k.setImage(O),q=k.getText(),k.setText(void 0),k.setZIndex(T),V=!0,D=!1)}else D=!0}}}if(1==_&&"circle"===M.type){++S,k=b[S],k&&k.getImage()&&!k.getFill()&&!k.getStroke()||(k=new Tt,b[S]=k);const e="circle-radius"in L?Uc(M,"paint","circle-radius",I,E,m,w):5,t=zc(Uc(M,"paint","circle-stroke-color",I,E,m,w),Uc(M,"paint","circle-stroke-opacity",I,E,m,w)),n=Uc(M,"paint","circle-translate",I,E,m,w),r=zc(Uc(M,"paint","circle-color",I,E,m,w),Uc(M,"paint","circle-opacity",I,E,m,w)),i=Uc(M,"paint","circle-stroke-width",I,E,m,w),o=e+"."+t+"."+r+"."+i+"."+n[0]+"."+n[1];O=g[o],O||(O=new Ot({radius:e,displacement:[n[0],-n[1]],stroke:t&&i>0?new Ft({width:i,color:t}):void 0,fill:r?new jt({color:r}):void 0,declutterMode:"none"}),g[o]=O),k.setImage(O),q=k.getText(),k.setText(void 0),k.setGeometry(void 0),k.setZIndex(T),V=!0}if("text-field"in G){B=Math.round(Uc(M,"layout","text-size",I,E,m,w));const e=Uc(M,"layout","text-font",I,E,m,w);j=Uc(M,"layout","text-line-height",I,E,m,w),U=Zl(a?a(e,t.metadata?t.metadata["ol:webfonts"]:void 0):e,B,j),U.includes("sans-serif")||(U+=",sans-serif"),F=Uc(M,"layout","text-letter-spacing",I,E,m,w),z=Uc(M,"layout","text-max-width",I,E,m,w);const n=Uc(M,"layout","text-field",I,E,m,w);N="object"==typeof n&&n.sections?1===n.sections.length?n.toString():n.sections.reduce(((t,n,r)=>{const i=n.fontStack?n.fontStack.split(","):e,o=Zl(a?a(i):i,B*(n.scale||1),j);let s=n.text;if("\n"===s)return t.push("\n",""),t;if(2==_)return t.push(bc(s,F),o),t;s=Pc(s,o,z,F).split("\n");for(let e=0,n=s.length;e0&&t.push("\n",""),t.push(s[e],o);return t}),[]):qc(n,h).trim(),d=Uc(M,"paint","text-opacity",I,E,m,w)}if(N&&d&&!D){V||(++S,k=b[S],k&&k.getText()&&!k.getFill()&&!k.getStroke()||(k=new Tt,b[S]=k),k.setImage(void 0),k.setGeometry(void 0));const e=jc(M,I,E,"text",m);k.getText()||k.setText(q),q=k.getText(),(!q||"getDeclutterMode"in q&&q.getDeclutterMode()!==e)&&(q=new Vt({padding:[2,2,2,2],declutterMode:e}),k.setText(q));const t=Uc(M,"layout","text-transform",I,E,m,w);"uppercase"==t?N=Array.isArray(N)?N.map(((e,t)=>t%2?e:e.toUpperCase())):N.toUpperCase():"lowercase"==t&&(N=Array.isArray(N)?N.map(((e,t)=>t%2?e:e.toLowerCase())):N.toLowerCase());const n=Array.isArray(N)?N:2==_?bc(N,F):Pc(N,U,z,F);if(q.setText(n),q.setFont(U),q.setRotation(sc(Uc(M,"layout","text-rotate",I,E,m,w))),"function"==typeof q.setKeepUpright){const e=Uc(M,"layout","text-keep-upright",I,E,m,w);q.setKeepUpright(e)}const r=Uc(M,"layout","text-anchor",I,E,m,w),i=V||1==_?"point":Uc(M,"layout","symbol-placement",I,E,m,w);let o;if("line-center"===i?(q.setPlacement("line"),o="center"):q.setPlacement(i),"line"===i&&"function"==typeof q.setRepeat){const e=Uc(M,"layout","symbol-spacing",I,E,m,w);q.setRepeat(2*e)}q.setOverflow("point"===i);let a=Uc(M,"paint","text-halo-width",I,E,m,w);const s=Uc(M,"layout","text-offset",I,E,m,w),l=Uc(M,"paint","text-translate",I,E,m,w);let c=0,u=0;if("point"==i){o="center",-1!==r.indexOf("left")?(o="left",u=a):-1!==r.indexOf("right")&&(o="right",u=-a);const e=Uc(M,"layout","text-rotation-alignment",I,E,m,w);q.setRotateWithView("map"==e)}else q.setMaxAngle(sc(Uc(M,"layout","text-max-angle",I,E,m,w))*N.length/n.length),q.setRotateWithView(!1);q.setTextAlign(o);let p="middle";0==r.indexOf("bottom")?(p="bottom",c=-a-.5*(j-1)*B):0==r.indexOf("top")&&(p="top",c=a+.5*(j-1)*B),q.setTextBaseline(p);const h=Uc(M,"layout","text-justify",I,E,m,w);q.setJustify("auto"===h?void 0:h),q.setOffsetX(s[0]*B+u+l[0]),q.setOffsetY(s[1]*B+c+l[1]),C.setColor(zc(Uc(M,"paint","text-color",I,E,m,w),d)),q.setFill(C);const g=zc(Uc(M,"paint","text-halo-color",I,E,m,w),d);if(g&&a>0){A.setColor(g),a*=2;const e=.5*B;A.setWidth(a<=e?a:e),q.setStroke(A)}else q.setStroke(void 0);const f=Uc(M,"layout","text-padding",I,E,m,w),y=q.getPadding();f!==y[0]&&(y[0]=f,y[1]=f,y[2]=f,y[3]=f),k.setZIndex(T)}}}return S>-1?(b.length=S+1,Hc&&("set"in n?n.set("mapbox-layer",P):n.getProperties()["mapbox-layer"]=P),b):void 0};return e.setStyle(I),e.set("mapbox-source",v),e.set("mapbox-layers",h),e.set("mapbox-featurestate",e.get("mapbox-featurestate")||{}),I}function Zc(e,t=512){return e.getExtent()?(0,Pr.createXYZ)({extent:e.getExtent(),tileSize:t,maxZoom:22}).getResolutions():lc}function Jc(e,t){if(!t.accessToken){t=Object.assign({},t);new URL(e).searchParams.forEach(((e,n)=>{t.accessToken=e,t.accessTokenParam=n}))}return t}function Xc(e,t,n="",i={},o=void 0){let a,s,l,c,u=!0;return"string"==typeof n||Array.isArray(n)?c=n:(l=n,c=l.source||l.layers,i=l),"string"==typeof i?(a=i,l={}):(a=i.styleUrl,l=i),!1===l.updateSource&&(u=!1),o||(o=l.resolutions),a||"string"!=typeof t||t.trim().startsWith("{")||(a=t),a&&(a=a.startsWith("data:")?location.href:Kl(a,l.accessToken),l=Jc(a,l)),new Promise((function(n,i){gc(t,l).then((function(t){if(8!=t.version)return i(new Error("glStyle version 8 required."));if(!(e instanceof ri||e instanceof fi))return i(new Error("Can only apply to VectorLayer or VectorTileLayer"));const d=e instanceof fi?"vector":"geojson";if(c?s=Array.isArray(c)?t.layers.find((function(e){return e.id===c[0]})).source:c:(s=Object.keys(t.sources).find((function(e){return t.sources[e].type===d})),c=s),!s)return i(new Error(`No ${d} source found in the glStyle.`));function p(){if(!u)return Promise.resolve();if(e instanceof fi)return Qc(t.sources[s],a,l).then((function(t){const n=e.getSource();n?t!==n&&(n.setTileUrlFunction(t.getTileUrlFunction()),"function"==typeof n.setUrls&&"function"==typeof t.getUrls&&n.setUrls(t.getUrls()),n.format_||(n.format_=t.format_),n.getAttributions()||n.setAttributions(t.getAttributions()),n.getTileLoadFunction()===r.defaultLoadFunction&&n.setTileLoadFunction(t.getTileLoadFunction()),(0,Dr.equivalent)(n.getProjection(),t.getProjection())&&(n.tileGrid=t.getTileGrid())):e.setSource(t);const i=e.getSource().getTileGrid();!isFinite(e.getMaxResolution())&&!isFinite(e.getMinZoom())&&i.getMinZoom()>0&&e.setMaxResolution(dc(Math.max(0,i.getMinZoom()-1e-12),i.getResolutions()))}));const n=t.sources[s];let i=e.getSource();i&&i.get("mapbox-source")===n||(i=eu(n,a,l));const o=e.getSource();return o?i!==o&&(o.getAttributions()||o.setAttributions(i.getAttributions()),o.format_||(o.format_=i.getFormat()),o.url_=i.getUrl()):e.setSource(i),Promise.resolve()}let h,g,f,m;function y(){if(m||t.sprite&&!g)m?(e.setStyle(m),p().then(n).catch(i)):i(new Error("Something went wrong trying to apply style."));else{if(l.projection&&!o){const e=(0,Dr.get)(l.projection).getUnits();"m"!==e&&(o=lc.map((t=>t/Po.METERS_PER_UNIT[e])))}m=Yc(e,t,c,o,g,f,((e,t=l.webfonts)=>function(e,t="https://cdn.jsdelivr.net/npm/@fontsource/{font-family}/{fontweight}{-fontstyle}.css"){const n=e.toString();if(n in Lc)return Lc[n];const r=[];for(let t=0,n=e.length;t=1.5?.5:1;const n=.5==h?"@2x":"";let r=e.origin+e.pathname+n+".json"+e.search;new Promise((function(t,n){hc("Sprite",r,l).then(t).catch((function(i){r=e.origin+e.pathname+".json"+e.search,hc("Sprite",r,l).then(t).catch(n)}))})).then((function(t){if(void 0===t&&i(new Error("No sprites found.")),g=t,f=e.origin+e.pathname+n+".png"+e.search,l.transformRequest){const e=l.transformRequest(f,"SpriteImage")||f;(e instanceof Request||e instanceof Promise)&&(f=e)}y()})).catch((function(e){i(new Error(`Sprites cannot be loaded: ${r}: ${e.message}`))}))}else y()})).catch(i)}))}function Kc(e,t,n){const r=new yi({tileJSON:t,tileSize:e.tileSize||t.tileSize||512}),i=r.getTileJSON(),o=r.getTileGrid(),a=(0,Dr.get)(n.projection||"EPSG:3857"),s=function(e,t){const n=e.bounds;if(n){const e=(0,Dr.fromLonLat)([n[0],n[1]],t),r=(0,Dr.fromLonLat)([n[2],n[3]],t);return[e[0],e[1],r[0],r[1]]}return(0,Dr.get)(t).getExtent()}(i,a),l=a.getExtent(),c=i.minzoom||0,u=i.maxzoom||22,d={attributions:r.getAttributions(),projection:a,tileGrid:new wo({origin:l?(0,Wn.getTopLeft)(l):o.getOrigin(0),extent:s||o.getExtent(),minZoom:c,resolutions:Zc(a,t.tileSize).slice(0,u+1),tileSize:o.getTileSize(0)})};return Array.isArray(i.tiles)?d.urls=i.tiles:d.url=i.tiles,d}function Qc(e,t,n){return new Promise((function(i,o){mc(e,t,n).then((function({tileJson:t,tileLoadFunction:o}){const a=Kc(e,t,n);a.tileLoadFunction=o,a.format=new Ai,i(new r(a))})).catch(o)}))}function $c(e){return`{bbox-${(e?e.getCode():"EPSG:3857").toLowerCase().replace(/[^a-z0-9]/g,"-")}}`}function eu(e,t,n){const r=n.projection?new Rn({dataProjection:n.projection}):new Rn,i=e.data,a={};if("string"==typeof i){const[a]=$l(i,n.accessToken,n.accessTokenParam||"access_token",t||location.href);if(/\{bbox-[0-9a-z-]+\}/.test(a)){const t=(e,t,n)=>{const r=$c(n);return a.replace(r,`${e.join(",")}`)},i=new o({attributions:e.attribution,format:r,loader:(e,r,o,a,s)=>{hc("GeoJSON","function"==typeof t?t(e,r,o):t,n).then((e=>{const t=i.getFormat().readFeatures(e,{featureProjection:o});i.addFeatures(t),a(t)})).catch((t=>{i.removeLoadedExtent(e),s()}))},strategy:wr.bbox});return i.set("mapbox-source",e),i}const s=new o({attributions:e.attribution,format:r,url:a,loader:(e,t,r,i,o)=>{hc("GeoJSON",a,n).then((e=>{const t=s.getFormat().readFeatures(e,{featureProjection:r});s.addFeatures(t),i(t)})).catch((t=>{s.removeLoadedExtent(e),o()}))}});return s}a.features=r.readFeatures(i,{featureProjection:(0,Dr.getUserProjection)()||"EPSG:3857"});const s=new o(Object.assign({attributions:e.attribution,format:r},a));return s.set("mapbox-source",e),s}function tu(e){return tu="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},tu(e)}function nu(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=Array(t);n0&&n[0].getElementsByTagName("button")[0].click()};const gu={onPanelOpen:function(){hu(this.options.position,this.element.id.match(/(\w+)-[0-9]+/)[1])}},fu=ol.control.Control;var mu=__webpack_require__.n(fu);const yu=function(){return""!==getComputedStyle(document.documentElement).getPropertyValue("--blue-france-sun-113-625")};function vu(e){return vu="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},vu(e)}function Au(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function Cu(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function bu(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Iu(e,t){for(var n=0;n * @author owenm * @license MIT */ -function Bu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Fu(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function Wu(e){if("undefined"!=typeof window&&window.navigator)return!!navigator.userAgent.match(e)}var Yu=Wu(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),Zu=Wu(/Edge/i),Ju=Wu(/firefox/i),Xu=Wu(/safari/i)&&!Wu(/chrome/i)&&!Wu(/android/i),Ku=Wu(/iP(ad|od|hone)/i),Qu=Wu(/chrome/i)&&Wu(/android/i),$u={capture:!1,passive:!1};function ed(e,t,n){e.addEventListener(t,n,!Yu&&$u)}function td(e,t,n){e.removeEventListener(t,n,!Yu&&$u)}function nd(e,t){if(t){if(">"===t[0]&&(t=t.substring(1)),e)try{if(e.matches)return e.matches(t);if(e.msMatchesSelector)return e.msMatchesSelector(t);if(e.webkitMatchesSelector)return e.webkitMatchesSelector(t)}catch(e){return!1}return!1}}function rd(e){return e.host&&e!==document&&e.host.nodeType?e.host:e.parentNode}function id(e,t,n,r){if(e){n=n||document;do{if(null!=t&&(">"===t[0]?e.parentNode===n&&nd(e,t):nd(e,t))||r&&e===n)return e;if(e===n)break}while(e=rd(e))}return null}var od,ad=/\s+/g;function sd(e,t,n){if(e&&t)if(e.classList)e.classList[n?"add":"remove"](t);else{var r=(" "+e.className+" ").replace(ad," ").replace(" "+t+" "," ");e.className=(r+(n?" "+t:"")).replace(ad," ")}}function ld(e,t,n){var r=e&&e.style;if(r){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(e,""):e.currentStyle&&(n=e.currentStyle),void 0===t?n:n[t];t in r||-1!==t.indexOf("webkit")||(t="-webkit-"+t),r[t]=n+("string"==typeof n?"":"px")}}function cd(e,t){var n="";if("string"==typeof e)n=e;else do{var r=ld(e,"transform");r&&"none"!==r&&(n=r+" "+n)}while(!t&&(e=e.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function ud(e,t,n){if(e){var r=e.getElementsByTagName(t),i=0,o=r.length;if(n)for(;i=o:i<=o))return r;if(r===dd())break;r=vd(r,!1)}return!1}function gd(e,t,n,r){for(var i=0,o=0,a=e.children;o2&&void 0!==arguments[2]?arguments[2]:{},r=n.evt,i=Hu(n,Gd);Md.pluginEvent.bind(_p)(e,t,Fu({dragEl:Td,parentEl:Rd,ghostEl:Od,rootEl:Dd,nextEl:Nd,lastDownEl:Ud,cloneEl:jd,cloneHidden:Bd,dragStarted:$d,putSortable:Wd,activeSortable:_p.active,originalEvent:r,oldIndex:Fd,oldDraggableIndex:Vd,newIndex:zd,newDraggableIndex:qd,hideGhostForTarget:Ap,unhideGhostForTarget:Cp,cloneNowHidden:function(){Bd=!0},cloneNowShown:function(){Bd=!1},dispatchSortableEvent:function(e){kd({sortable:t,name:e,originalEvent:r})}},i))};function kd(e){xd(Fu({putSortable:Wd,cloneEl:jd,targetEl:Td,rootEl:Dd,oldIndex:Fd,oldDraggableIndex:Vd,newIndex:zd,newDraggableIndex:qd},e))}var Td,Rd,Od,Dd,Nd,Ud,jd,Bd,Fd,zd,Vd,qd,Hd,Wd,Yd,Zd,Jd,Xd,Kd,Qd,$d,ep,tp,np,rp,ip=!1,op=!1,ap=[],sp=!1,lp=!1,cp=[],up=!1,dp=[],pp="undefined"!=typeof document,hp=Ku,gp=Zu||Yu?"cssFloat":"float",fp=pp&&!Qu&&!Ku&&"draggable"in document.createElement("div"),mp=function(){if(pp){if(Yu)return!1;var e=document.createElement("x");return e.style.cssText="pointer-events:auto","auto"===e.style.pointerEvents}}(),yp=function(e,t){var n=ld(e),r=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),i=gd(e,0,t),o=gd(e,1,t),a=i&&ld(i),s=o&&ld(o),l=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+pd(i).width,c=s&&parseInt(s.marginLeft)+parseInt(s.marginRight)+pd(o).width;if("flex"===n.display)return"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal";if("grid"===n.display)return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(i&&a.float&&"none"!==a.float){var u="left"===a.float?"left":"right";return!o||"both"!==s.clear&&s.clear!==u?"horizontal":"vertical"}return i&&("block"===a.display||"flex"===a.display||"table"===a.display||"grid"===a.display||l>=r&&"none"===n[gp]||o&&"none"===n[gp]&&l+c>r)?"vertical":"horizontal"},vp=function(e){function t(e,n){return function(r,i,o,a){var s=r.options.group.name&&i.options.group.name&&r.options.group.name===i.options.group.name;if(null==e&&(n||s))return!0;if(null==e||!1===e)return!1;if(n&&"clone"===e)return e;if("function"==typeof e)return t(e(r,i,o,a),n)(r,i,o,a);var l=(n?r:i).options.group.name;return!0===e||"string"==typeof e&&e===l||e.join&&e.indexOf(l)>-1}}var n={},r=e.group;r&&"object"==zu(r)||(r={name:r}),n.name=r.name,n.checkPull=t(r.pull,!0),n.checkPut=t(r.put),n.revertClone=r.revertClone,e.group=n},Ap=function(){!mp&&Od&&ld(Od,"display","none")},Cp=function(){!mp&&Od&&ld(Od,"display","")};pp&&!Qu&&document.addEventListener("click",(function(e){if(op)return e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.stopImmediatePropagation&&e.stopImmediatePropagation(),op=!1,!1}),!0);var bp=function(e){if(Td){e=e.touches?e.touches[0]:e;var t=(i=e.clientX,o=e.clientY,ap.some((function(e){var t=e[Ed].options.emptyInsertThreshold;if(t&&!fd(e)){var n=pd(e),r=i>=n.left-t&&i<=n.right+t,s=o>=n.top-t&&o<=n.bottom+t;return r&&s?a=e:void 0}})),a);if(t){var n={};for(var r in e)e.hasOwnProperty(r)&&(n[r]=e[r]);n.target=n.rootEl=t,n.preventDefault=void 0,n.stopPropagation=void 0,t[Ed]._onDragOver(n)}}var i,o,a},Ip=function(e){Td&&Td.parentNode[Ed]._isOutsideThisEl(e.target)};function _p(e,t){if(!e||!e.nodeType||1!==e.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(e));this.el=e,this.options=t=qu({},t),e[Ed]=this;var n={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(e.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return yp(e,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(e,t){e.setData("Text",t.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==_p.supportPointer&&"PointerEvent"in window&&!Xu,emptyInsertThreshold:5};for(var r in Md.initializePlugins(this,e,n),n)!(r in t)&&(t[r]=n[r]);for(var i in vp(t),this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!t.forceFallback&&fp,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?ed(e,"pointerdown",this._onTapStart):(ed(e,"mousedown",this._onTapStart),ed(e,"touchstart",this._onTapStart)),this.nativeDraggable&&(ed(e,"dragover",this),ed(e,"dragenter",this)),ap.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),qu(this,wd())}function Ep(e,t,n,r,i,o,a,s){var l,c,u=e[Ed],d=u.options.onMove;return!window.CustomEvent||Yu||Zu?(l=document.createEvent("Event")).initEvent("move",!0,!0):l=new CustomEvent("move",{bubbles:!0,cancelable:!0}),l.to=t,l.from=e,l.dragged=n,l.draggedRect=r,l.related=i||t,l.relatedRect=o||pd(t),l.willInsertAfter=s,l.originalEvent=a,e.dispatchEvent(l),d&&(c=d.call(u,l,a)),c}function wp(e){e.draggable=!1}function Pp(){up=!1}function Sp(e){for(var t=e.tagName+e.className+e.src+e.href+e.textContent,n=t.length,r=0;n--;)r+=t.charCodeAt(n);return r.toString(36)}function Mp(e){return setTimeout(e,0)}function xp(e){return clearTimeout(e)}_p.prototype={constructor:_p,_isOutsideThisEl:function(e){this.el.contains(e)||e===this.el||(ep=null)},_getDirection:function(e,t){return"function"==typeof this.options.direction?this.options.direction.call(this,e,t,Td):this.options.direction},_onTapStart:function(e){if(e.cancelable){var t=this,n=this.el,r=this.options,i=r.preventOnFilter,o=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,s=(a||e).target,l=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||s,c=r.filter;if(function(e){dp.length=0;var t=e.getElementsByTagName("input"),n=t.length;for(;n--;){var r=t[n];r.checked&&dp.push(r)}}(n),!Td&&!(/mousedown|pointerdown/.test(o)&&0!==e.button||r.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!Xu||!s||"SELECT"!==s.tagName.toUpperCase())&&!((s=id(s,r.draggable,n,!1))&&s.animated||Ud===s)){if(Fd=md(s),Vd=md(s,r.draggable),"function"==typeof c){if(c.call(this,e,s,this))return kd({sortable:t,rootEl:l,name:"filter",targetEl:s,toEl:n,fromEl:n}),Ld("filter",t,{evt:e}),void(i&&e.cancelable&&e.preventDefault())}else if(c&&(c=c.split(",").some((function(r){if(r=id(l,r.trim(),n,!1))return kd({sortable:t,rootEl:r,name:"filter",targetEl:s,fromEl:n,toEl:n}),Ld("filter",t,{evt:e}),!0}))))return void(i&&e.cancelable&&e.preventDefault());r.handle&&!id(l,r.handle,n,!1)||this._prepareDragStart(e,a,s)}}},_prepareDragStart:function(e,t,n){var r,i=this,o=i.el,a=i.options,s=o.ownerDocument;if(n&&!Td&&n.parentNode===o){var l=pd(n);if(Dd=o,Rd=(Td=n).parentNode,Nd=Td.nextSibling,Ud=n,Hd=a.group,_p.dragged=Td,Yd={target:Td,clientX:(t||e).clientX,clientY:(t||e).clientY},Kd=Yd.clientX-l.left,Qd=Yd.clientY-l.top,this._lastX=(t||e).clientX,this._lastY=(t||e).clientY,Td.style["will-change"]="all",r=function(){Ld("delayEnded",i,{evt:e}),_p.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!Ju&&i.nativeDraggable&&(Td.draggable=!0),i._triggerDragStart(e,t),kd({sortable:i,name:"choose",originalEvent:e}),sd(Td,a.chosenClass,!0))},a.ignore.split(",").forEach((function(e){ud(Td,e.trim(),wp)})),ed(s,"dragover",bp),ed(s,"mousemove",bp),ed(s,"touchmove",bp),ed(s,"mouseup",i._onDrop),ed(s,"touchend",i._onDrop),ed(s,"touchcancel",i._onDrop),Ju&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Td.draggable=!0),Ld("delayStart",this,{evt:e}),!a.delay||a.delayOnTouchOnly&&!t||this.nativeDraggable&&(Zu||Yu))r();else{if(_p.eventCanceled)return void this._onDrop();ed(s,"mouseup",i._disableDelayedDrag),ed(s,"touchend",i._disableDelayedDrag),ed(s,"touchcancel",i._disableDelayedDrag),ed(s,"mousemove",i._delayedDragTouchMoveHandler),ed(s,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&ed(s,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(r,a.delay)}}},_delayedDragTouchMoveHandler:function(e){var t=e.touches?e.touches[0]:e;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Td&&wp(Td),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var e=this.el.ownerDocument;td(e,"mouseup",this._disableDelayedDrag),td(e,"touchend",this._disableDelayedDrag),td(e,"touchcancel",this._disableDelayedDrag),td(e,"mousemove",this._delayedDragTouchMoveHandler),td(e,"touchmove",this._delayedDragTouchMoveHandler),td(e,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(e,t){t=t||"touch"==e.pointerType&&e,!this.nativeDraggable||t?this.options.supportPointer?ed(document,"pointermove",this._onTouchMove):ed(document,t?"touchmove":"mousemove",this._onTouchMove):(ed(Td,"dragend",this),ed(Dd,"dragstart",this._onDragStart));try{document.selection?Mp((function(){document.selection.empty()})):window.getSelection().removeAllRanges()}catch(e){}},_dragStarted:function(e,t){if(ip=!1,Dd&&Td){Ld("dragStarted",this,{evt:t}),this.nativeDraggable&&ed(document,"dragover",Ip);var n=this.options;!e&&sd(Td,n.dragClass,!1),sd(Td,n.ghostClass,!0),_p.active=this,e&&this._appendGhost(),kd({sortable:this,name:"start",originalEvent:t})}else this._nulling()},_emulateDragOver:function(){if(Zd){this._lastX=Zd.clientX,this._lastY=Zd.clientY,Ap();for(var e=document.elementFromPoint(Zd.clientX,Zd.clientY),t=e;e&&e.shadowRoot&&(e=e.shadowRoot.elementFromPoint(Zd.clientX,Zd.clientY))!==t;)t=e;if(Td.parentNode[Ed]._isOutsideThisEl(e),t)do{if(t[Ed]){if(t[Ed]._onDragOver({clientX:Zd.clientX,clientY:Zd.clientY,target:e,rootEl:t})&&!this.options.dragoverBubble)break}e=t}while(t=rd(t));Cp()}},_onTouchMove:function(e){if(Yd){var t=this.options,n=t.fallbackTolerance,r=t.fallbackOffset,i=e.touches?e.touches[0]:e,o=Od&&cd(Od,!0),a=Od&&o&&o.a,s=Od&&o&&o.d,l=hp&&rp&&yd(rp),c=(i.clientX-Yd.clientX+r.x)/(a||1)+(l?l[0]-cp[0]:0)/(a||1),u=(i.clientY-Yd.clientY+r.y)/(s||1)+(l?l[1]-cp[1]:0)/(s||1);if(!_p.active&&!ip){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))i.right+o||e.clientY>r.bottom&&e.clientX>r.left:e.clientY>i.bottom+o||e.clientX>r.right&&e.clientY>r.top}(e,i,this)&&!f.animated){if(f===Td)return L(!1);if(f&&o===e.target&&(a=f),a&&(n=pd(a)),!1!==Ep(Dd,o,Td,t,a,n,e,!!a))return G(),f&&f.nextSibling?o.insertBefore(Td,f.nextSibling):o.appendChild(Td),Rd=o,k(),L(!0)}else if(f&&function(e,t,n){var r=pd(gd(n.el,0,n.options,!0)),i=_d(n.el,n.options,Od),o=10;return t?e.clientXu+c*o/2:ld-np)return-tp}else if(l>u+c*(1-i)/2&&ld-c*o/2))return l>u+c/2?1:-1;return 0}(e,a,n,i,b?1:s.swapThreshold,null==s.invertedSwapThreshold?s.swapThreshold:s.invertedSwapThreshold,lp,ep===a),0!==y){var w=md(Td);do{w-=y,A=Rd.children[w]}while(A&&("none"===ld(A,"display")||A===Od))}if(0===y||A===a)return L(!1);ep=a,tp=y;var P=a.nextElementSibling,S=!1,M=Ep(Dd,o,Td,t,a,n,e,S=1===y);if(!1!==M)return 1!==M&&-1!==M||(S=1===M),up=!0,setTimeout(Pp,30),G(),S&&!P?o.appendChild(Td):a.parentNode.insertBefore(Td,S?P:a),_&&bd(_,0,E-_.scrollTop),Rd=Td.parentNode,void 0===v||lp||(np=Math.abs(v-pd(a)[I])),k(),L(!0)}if(o.contains(Td))return L(!1)}return!1}function x(s,l){Ld(s,h,Fu({evt:e,isOwner:u,axis:i?"vertical":"horizontal",revert:r,dragRect:t,targetRect:n,canSort:d,fromSortable:p,target:a,completed:L,onMove:function(n,r){return Ep(Dd,o,Td,t,n,pd(n),e,r)},changed:k},l))}function G(){x("dragOverAnimationCapture"),h.captureAnimationState(),h!==p&&p.captureAnimationState()}function L(t){return x("dragOverCompleted",{insertion:t}),t&&(u?c._hideClone():c._showClone(h),h!==p&&(sd(Td,Wd?Wd.options.ghostClass:c.options.ghostClass,!1),sd(Td,s.ghostClass,!0)),Wd!==h&&h!==_p.active?Wd=h:h===_p.active&&Wd&&(Wd=null),p===h&&(h._ignoreWhileAnimating=a),h.animateAll((function(){x("dragOverAnimationComplete"),h._ignoreWhileAnimating=null})),h!==p&&(p.animateAll(),p._ignoreWhileAnimating=null)),(a===Td&&!Td.animated||a===o&&!a.animated)&&(ep=null),s.dragoverBubble||e.rootEl||a===document||(Td.parentNode[Ed]._isOutsideThisEl(e.target),!t&&bp(e)),!s.dragoverBubble&&e.stopPropagation&&e.stopPropagation(),g=!0}function k(){zd=md(Td),qd=md(Td,s.draggable),kd({sortable:h,name:"change",toEl:o,newIndex:zd,newDraggableIndex:qd,originalEvent:e})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){td(document,"mousemove",this._onTouchMove),td(document,"touchmove",this._onTouchMove),td(document,"pointermove",this._onTouchMove),td(document,"dragover",bp),td(document,"mousemove",bp),td(document,"touchmove",bp)},_offUpEvents:function(){var e=this.el.ownerDocument;td(e,"mouseup",this._onDrop),td(e,"touchend",this._onDrop),td(e,"pointerup",this._onDrop),td(e,"touchcancel",this._onDrop),td(document,"selectstart",this)},_onDrop:function(e){var t=this.el,n=this.options;zd=md(Td),qd=md(Td,n.draggable),Ld("drop",this,{evt:e}),Rd=Td&&Td.parentNode,zd=md(Td),qd=md(Td,n.draggable),_p.eventCanceled||(ip=!1,lp=!1,sp=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),xp(this.cloneId),xp(this._dragStartId),this.nativeDraggable&&(td(document,"drop",this),td(t,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),Xu&&ld(document.body,"user-select",""),ld(Td,"transform",""),e&&($d&&(e.cancelable&&e.preventDefault(),!n.dropBubble&&e.stopPropagation()),Od&&Od.parentNode&&Od.parentNode.removeChild(Od),(Dd===Rd||Wd&&"clone"!==Wd.lastPutMode)&&jd&&jd.parentNode&&jd.parentNode.removeChild(jd),Td&&(this.nativeDraggable&&td(Td,"dragend",this),wp(Td),Td.style["will-change"]="",$d&&!ip&&sd(Td,Wd?Wd.options.ghostClass:this.options.ghostClass,!1),sd(Td,this.options.chosenClass,!1),kd({sortable:this,name:"unchoose",toEl:Rd,newIndex:null,newDraggableIndex:null,originalEvent:e}),Dd!==Rd?(zd>=0&&(kd({rootEl:Rd,name:"add",toEl:Rd,fromEl:Dd,originalEvent:e}),kd({sortable:this,name:"remove",toEl:Rd,originalEvent:e}),kd({rootEl:Rd,name:"sort",toEl:Rd,fromEl:Dd,originalEvent:e}),kd({sortable:this,name:"sort",toEl:Rd,originalEvent:e})),Wd&&Wd.save()):zd!==Fd&&zd>=0&&(kd({sortable:this,name:"update",toEl:Rd,originalEvent:e}),kd({sortable:this,name:"sort",toEl:Rd,originalEvent:e})),_p.active&&(null!=zd&&-1!==zd||(zd=Fd,qd=Vd),kd({sortable:this,name:"end",toEl:Rd,originalEvent:e}),this.save())))),this._nulling()},_nulling:function(){Ld("nulling",this),Dd=Td=Rd=Od=Nd=jd=Ud=Bd=Yd=Zd=$d=zd=qd=Fd=Vd=ep=tp=Wd=Hd=_p.dragged=_p.ghost=_p.clone=_p.active=null,dp.forEach((function(e){e.checked=!0})),dp.length=Jd=Xd=0},handleEvent:function(e){switch(e.type){case"drop":case"dragend":this._onDrop(e);break;case"dragenter":case"dragover":Td&&(this._onDragOver(e),function(e){e.dataTransfer&&(e.dataTransfer.dropEffect="move");e.cancelable&&e.preventDefault()}(e));break;case"selectstart":e.preventDefault()}},toArray:function(){for(var e,t=[],n=this.el.children,r=0,i=n.length,o=this.options;r1&&void 0!==arguments[1]&&arguments[1],n=document.createElement("button");n.id=t?this._addUID("GPremoveContextual_ID_"+e.id):this._addUID("GPremove_ID_"+e.id),n.className="GPlayerRemove gpf-btn gpf-btn-icon gpf-btn-icon-ls-remove fr-btn fr-btn--tertiary gpf-btn--tertiary",n.title="Supprimer la couche",n.layerId=e.id,t&&(n.innerText="Supprimer"),n.setAttribute("tabindex","0"),n.setAttribute("type","button");var r=this;return n.addEventListener?n.addEventListener("click",(function(e){r._onDropLayerClick(e)})):n.attachEvent&&n.attachEvent("onclick",(function(e){r._onDropLayerClick(e)})),n},_createAdvancedToolInformationElement:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=document.createElement("button");n.id=t?this._addUID("GPinfoContextual_ID_"+e.id):this._addUID("GPinfo_ID_"+e.id),n.className="GPlayerInfo GPlayerInfoClosed gpf-btn gpf-btn-icon gpf-btn-icon-ls-info fr-btn fr-btn--tertiary gpf-btn--tertiary",e.title&&e.description||(n.style.opacity="0",n.style.visibility="hidden",t&&(n.style.display="none")),n.title="Informations/légende",n.layerId=e.id,t&&(n.innerText="Informations"),n.setAttribute("tabindex","0"),n.setAttribute("type","button");var r=this;return n.addEventListener?n.addEventListener("click",(function(e){r._onOpenLayerInfoClick(e)})):n.attachEvent&&n.attachEvent("onclick",(function(e){r._onOpenLayerInfoClick(e)})),n},_createAdvancedToolOpacityElement:function(e){var t=[],n=document.createElement("div");n.id=this._addUID("GPopacity_ID_"+e.id),n.className="GPlayerOpacity fr-range fr-range--sm",n.dataset.frJsRange="true",n.title="Opacité";var r=void 0!==e.opacity?e.opacity:1;r=Math.round(100*r),n.style.setProperty("--progress-right",r+"%");var i=document.createElement("input");i.id=this._addUID("GPopacityValueDiv_ID_"+e.id),i.type="range",i.value=r,i.ariaLabel="Opacité";var o=this;i.addEventListener?i.addEventListener("change",(function(e){o._onChangeLayerOpacity(e)})):i.attachEvent&&i.attachEvent("onchange",(function(e){o._onChangeLayerOpacity(e)})),i.addEventListener?i.addEventListener("input",(function(e){o._onChangeLayerOpacity(e)})):i.attachEvent&&i.attachEvent("oninput",(function(e){o._onChangeLayerOpacity(e)})),n.appendChild(i);var a=document.createElement("div");a.id=this._addUID("GPopacityValueDiv_ID_"+e.id),a.className="GPlayerOpacityValue";var s=document.createElement("span");return s.id=this._addUID("GPopacityValue_ID_"+e.id),s.className="gpf-range__output fr-range__output gpf-visible",s.innerHTML=r+"%",a.appendChild(s),t.push(n),t.push(a),t},_createAdvancedToolExtentElement:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=document.createElement("button");n.id=t?this._addUID("GPextentContextual_ID_"+e.id):this._addUID("GPextent_ID_"+e.id),n.className="GPelementHidden GPlayerExtent gpf-btn gpf-btn-icon gpf-btn-icon-ls-extent fr-btn fr-btn--tertiary gpf-btn--tertiary",n.title="Zoomer dans l'étendue",n.layerId=e.id,t&&(n.innerText="Zoomer"),n.setAttribute("tabindex","0"),n.setAttribute("aria-pressed",!0),n.setAttribute("type","button");var r=this;return n.addEventListener?n.addEventListener("click",(function(e){var t="true"===e.target.ariaPressed;e.target.setAttribute("aria-pressed",!t),r._onZoomToExtentClick(e)})):n.attachEvent&&n.attachEvent("onclick",(function(e){var t="true"===e.target.ariaPressed;e.target.setAttribute("aria-pressed",!t),r._onZoomToExtentClick(e)})),n},_createContainerLayerInfoElement:function(e){var t=document.createElement("div"),n=document.createElement("div");n.className="gpf-panel__header_ls",t.appendChild(n);var r=document.createElement("label");r.className="GPlayerInfo gpf-btn-header gpf-btn-icon-ls-info",r.title="Informations",n.appendChild(r);var i=document.createElement("div");i.id=this._addUID("GPlayerInfoTitle"),i.innerHTML=e.title,i.className="gpf-panel__title_ls",n.appendChild(i);var o=document.createElement("button");o.id=this._addUID("GPlayerInfoClose"),o.className="GPpanelClose GPlayersPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w",o.title="Fermer la fenêtre";var a=this,s=function(){document.getElementById(a._addUID("GPlayerInfoPanel")).classList.add("GPlayerInfoPanelClosed","gpf-hidden"),document.getElementById(a._addUID("GPlayerInfoPanel")).classList.remove("GPlayerInfoPanelOpened","gpf-visible"),document.getElementById(e.id).classList.add("GPlayerInfoClosed"),document.getElementById(e.id).classList.remove("GPlayerInfoOpened")};o.addEventListener?o.addEventListener("click",s):o.attachEvent&&o.attachEvent("onclick",s),this.addEventListener("layerswitcher:remove",(function(t){parseInt(e.id.split("-")[0].split("GPinfo_ID_")[1])===t.layer.id&&(document.getElementById(a._addUID("GPlayerInfoPanel")).classList.add("GPlayerInfoPanelClosed","gpf-hidden"),document.getElementById(a._addUID("GPlayerInfoPanel")).classList.remove("GPlayerInfoPanelOpened","gpf-visible"))})),n.appendChild(o),t.appendChild(n);var l=document.createElement("div");if(l.id=this._addUID("GPlayerInfoContent"),l.className="gpf-panel__content fr-modal__content",t.appendChild(l),e.quicklookUrl){var c=document.createElement("div");c.id=this._addUID("GPlayerInfoQuicklook"),c.title="Afficher un aperçu de la couche";var u=document.createElement("a");u.href=e.quicklookUrl,u.appendChild(c),l.appendChild(u)}var d=document.createElement("div");if(d.id=this._addUID("GPlayerInfoDescription"),d.innerHTML=e.description,l.appendChild(d),e.metadata){var p=document.createElement("div");p.id=this._addUID("GPlayerInfoMetadata");var h=document.createElement("div");h.className="GPlayerInfoSubtitle",h.innerHTML="Métadonnées",p.appendChild(h);for(var g=0;g=0;l--);}(n=t,r="setMap",i=this,a=$p(eh(1&(o=3)?n.prototype:n),r,i),2&o&&"function"==typeof a?function(e){return a.apply(i,e)}:a)([e]),this.options.position&&this.setPosition(this.options.position),!1===this.options.gutter&&this.getContainer().classList.add("gpf-button-no-gutter")}},{key:"addLayer",value:function(e,t){var n=this,r=this.getMap();if(t=t||{},e){var i=e.gpLayerId;if(void 0!==i){var o=!1;if(r.getLayers().forEach((function(e){e.gpLayerId===i&&(o=!0)})),o){if(this._layers[i]){for(var a in t)t.hasOwnProperty(a)&&(this._layers[i][a]=t[a]);if(t.title){var s=document.getElementById(this._addUID("GPname_ID_"+i));s&&(s.innerHTML=t.title,s.title=t.description||t.title)}var l=document.getElementById(this._addUID("GPinfo_ID_"+i));if(!document.getElementById(this._addUID("GPinfo_ID_"+i))&&t.description){var c=document.getElementById(this._addUID("GPadvancedTools_ID_"+i));c&&c.appendChild(this._createAdvancedToolInformationElement({id:i}))}l&&"GPlayerInfoOpened"===l.className&&document.getElementById(this._addUID("GPlayerInfoPanel")).classList.add("GPlayerInfoPanelClosed","gpf-hidden")}else{var u=this.getLayerInfo(e)||{},d=e.getOpacity(),p=e.getVisible(),h=this.isInRange(e,r),g={layer:e,id:i,name:e.name,service:e.service,opacity:null!=d?d:1,visibility:null==p||p,inRange:null==h||h,title:null!=t.title?t.title:u._title||i,description:t.description||u._description||null,legends:t.legends||u._legends||[],metadata:t.metadata||u._metadata||[],quicklookUrl:t.quicklookUrl||u._quicklookUrl||null};this._layers[i]=g;var f=this._createLayerDiv(g);this._layers[i].div=f,e.getZIndex&&0!==e.getZIndex()&&void 0!==e.getZIndex()||e._forceNullzIndex?this._updateLayersOrder():(this._layersOrder.unshift(g),this._lastZIndex++,e.setZIndex(this._lastZIndex),this._layerListContainer.insertBefore(f,this._layerListContainer.firstChild)),this._listeners.updateLayerOpacity=e.on("change:opacity",(function(e){return n._updateLayerOpacity(e)})),this._listeners.updateLayerVisibility=e.on("change:visible",(function(e){return n._updateLayerVisibility(e)})),null==this._layers[i].onZIndexChangeEvent&&(this._layers[i].onZIndexChangeEvent=e.on("change:zIndex",(function(){return n._updateLayersOrder()})))}this._updateLayerCounter(),this.dispatchEvent({type:"layerswitcher:add",layer:this._layers[i]})}else nh.log("[ERROR] LayerSwitcher:addLayer - configuration cannot be set for ",e," layer (layer is not in map.getLayers() )")}else nh.trace("[WARN] LayerSwitcher:addLayer - configuration cannot be set for this layer (layer id not found)",e)}else nh.log("[ERROR] LayerSwitcher:addLayer - missing layer parameter")}},{key:"removeLayer",value:function(e){if(e){(0,bi.unByKey)(this._listeners.updateLayerOpacity),(0,bi.unByKey)(this._listeners.updateLayerVisibility),nh.trace(e);var t=e.gpLayerId,n=document.getElementById(this._addUID("GPinfo_ID_"+t));n&&"GPlayerInfoOpened"===n.className&&document.getElementById(this._addUID("GPlayerInfoPanel")).classList.add("GPlayerInfoPanelClosed","gpf-hidden");var r=document.getElementById(this._addUID("GPlayerSwitcher_ID_"+t));r&&this._layerListContainer.removeChild(r);var i=Math.abs(e.getZIndex()-this._lastZIndex);this._layersOrder.splice(i,1),this._lastZIndex--;for(var o=this._layersOrder,a=0;a1&&(t=1),t<0&&(t=0);var n=e.target.gpLayerId,r=document.getElementById(this._addUID("GPopacityValueDiv_ID_"+n));r&&(r.value=Math.round(100*t));var i=document.getElementById(this._addUID("GPopacityValue_ID_"+n));i&&(i.innerHTML=Math.round(100*t)+"%"),this.dispatchEvent({type:"layerswitcher:change:opacity",opacity:t,layer:this._layers[n]})}},{key:"_onVisibilityLayerClick",value:function(e){var t=e.target.id,n=ju.index(t);this._layers[n].layer.setVisible("true"===e.target.ariaPressed)}},{key:"_updateLayerVisibility",value:function(e){var t=e.target.getVisible(),n=e.target.gpLayerId,r=document.getElementById(this._addUID("GPvisibilityPicto_ID_"+n));r&&(r.ariaPressed=t),this.dispatchEvent({type:"layerswitcher:change:visibility",visibility:t,layer:this._layers[n]})}},{key:"_updateLayersOrder",value:function(){var e=this,t=this.getMap();if(t){var n,r;for(var i in this._layersIndex={},t.getLayers().forEach((function(t){r=t.gpLayerId,(0,bi.unByKey)(e._layers[r].onZIndexChangeEvent),e._layers[r].onZIndexChangeEvent=null,n=null,void 0!==t.getZIndex&&(n=t.getZIndex(),e._layersIndex[n]&&Array.isArray(e._layersIndex[n])||(e._layersIndex[n]=[]),e._layersIndex[n].push(e._layers[r]))})),this._lastZIndex=0,this._layersOrder=[],this._layersIndex)if(this._layersIndex.hasOwnProperty(i))for(var o=this._layersIndex[i],a=0;ae.getMaxResolution()||nu.right||f+r.height>u.bottom)a=p,s=h;else{var m=l-a,y=c-s;e.style.transform="translate("+m+"px,"+y+"px)"}}}};const ah=oh;function sh(e){return sh="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},sh(e)}function lh(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */lh=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,i=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag";function c(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var o=t&&t.prototype instanceof y?t:y,a=Object.create(o.prototype),s=new G(r||[]);return i(a,"_invoke",{value:P(e,n,s)}),a}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=u;var p="suspendedStart",h="suspendedYield",g="executing",f="completed",m={};function y(){}function v(){}function A(){}var C={};c(C,a,(function(){return this}));var b=Object.getPrototypeOf,I=b&&b(b(L([])));I&&I!==n&&r.call(I,a)&&(C=I);var _=A.prototype=y.prototype=Object.create(C);function E(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function n(i,o,a,s){var l=d(e[i],e,o);if("throw"!==l.type){var c=l.arg,u=c.value;return u&&"object"==sh(u)&&r.call(u,"__await")?t.resolve(u.__await).then((function(e){n("next",e,a,s)}),(function(e){n("throw",e,a,s)})):t.resolve(u).then((function(e){c.value=e,a(c)}),(function(e){return n("throw",e,a,s)}))}s(l.arg)}var o;i(this,"_invoke",{value:function(e,r){function i(){return new t((function(t,i){n(e,r,t,i)}))}return o=o?o.then(i,i):i()}})}function P(t,n,r){var i=p;return function(o,a){if(i===g)throw Error("Generator is already running");if(i===f){if("throw"===o)throw a;return{value:e,done:!0}}for(r.method=o,r.arg=a;;){var s=r.delegate;if(s){var l=S(s,r);if(l){if(l===m)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(i===p)throw i=f,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);i=g;var c=d(t,n,r);if("normal"===c.type){if(i=r.done?f:h,c.arg===m)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(i=f,r.method="throw",r.arg=c.arg)}}}function S(t,n){var r=n.method,i=t.iterator[r];if(i===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,S(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),m;var o=d(i,t.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,m;var a=o.arg;return a?a.done?(n[t.resultName]=a.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,m):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,m)}function M(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function G(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(M,this),this.reset(!0)}function L(t){if(t||""===t){var n=t[a];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var i=-1,o=function n(){for(;++i=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var l=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(l&&c){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),x(n),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var i=r.arg;x(n)}return i}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:L(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),m}},t}function ch(e,t,n,r,i,o,a){try{var s=e[o](a),l=s.value}catch(e){return void n(e)}s.done?t(l):Promise.resolve(l).then(r,i)}function uh(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){ch(o,r,i,a,s,"next",e)}function s(e){ch(o,r,i,a,s,"throw",e)}a(void 0)}))}}function dh(e,t){for(var n=0;n
\n '},_createGetFeatureInfoAccordionGroup:function(){var e=document.createElement("div");return e.id=this._addUID("GPgetFeatureInfoAccordionGroup"),e.className="GPgetFeatureInfoAccordionGroup fr-accordions-group",e},_createGetFeatureInfoLayerAccordion:function(e){var t=this.stringToHTML('\n
\n

\n \n

\n
\n ').concat(this._createGetFeatureInfoWaitingDiv(),"\n
\n
\n ")).firstChild;return t.querySelector("button, button.fr-accordion__btn").addEventListener("click",(function(e){e.currentTarget.ariaExpanded=!("true"===e.currentTarget.ariaExpanded);var t=document.getElementById(e.currentTarget.getAttribute("aria-controls"));"true"===e.currentTarget.ariaExpanded?(t.classList.add("fr-collapse--expanded"),t.classList.remove("GPelementHidden")):(t.classList.remove("fr-collapse--expanded"),t.classList.add("GPelementHidden"))})),t}};const fh=gh;function mh(e){return mh="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},mh(e)}function yh(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */yh=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,i=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag";function c(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var o=t&&t.prototype instanceof y?t:y,a=Object.create(o.prototype),s=new G(r||[]);return i(a,"_invoke",{value:P(e,n,s)}),a}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=u;var p="suspendedStart",h="suspendedYield",g="executing",f="completed",m={};function y(){}function v(){}function A(){}var C={};c(C,a,(function(){return this}));var b=Object.getPrototypeOf,I=b&&b(b(L([])));I&&I!==n&&r.call(I,a)&&(C=I);var _=A.prototype=y.prototype=Object.create(C);function E(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function n(i,o,a,s){var l=d(e[i],e,o);if("throw"!==l.type){var c=l.arg,u=c.value;return u&&"object"==mh(u)&&r.call(u,"__await")?t.resolve(u.__await).then((function(e){n("next",e,a,s)}),(function(e){n("throw",e,a,s)})):t.resolve(u).then((function(e){c.value=e,a(c)}),(function(e){return n("throw",e,a,s)}))}s(l.arg)}var o;i(this,"_invoke",{value:function(e,r){function i(){return new t((function(t,i){n(e,r,t,i)}))}return o=o?o.then(i,i):i()}})}function P(t,n,r){var i=p;return function(o,a){if(i===g)throw Error("Generator is already running");if(i===f){if("throw"===o)throw a;return{value:e,done:!0}}for(r.method=o,r.arg=a;;){var s=r.delegate;if(s){var l=S(s,r);if(l){if(l===m)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(i===p)throw i=f,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);i=g;var c=d(t,n,r);if("normal"===c.type){if(i=r.done?f:h,c.arg===m)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(i=f,r.method="throw",r.arg=c.arg)}}}function S(t,n){var r=n.method,i=t.iterator[r];if(i===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,S(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),m;var o=d(i,t.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,m;var a=o.arg;return a?a.done?(n[t.resultName]=a.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,m):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,m)}function M(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function G(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(M,this),this.reset(!0)}function L(t){if(t||""===t){var n=t[a];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var i=-1,o=function n(){for(;++i=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var l=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(l&&c){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),x(n),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var i=r.arg;x(n)}return i}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:L(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),m}},t}function vh(e,t,n,r,i,o,a){try{var s=e[o](a),l=s.value}catch(e){return void n(e)}s.done?t(l):Promise.resolve(l).then(r,i)}function Ah(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ch(e){for(var t=1;t0)return t})).sort((function(e,t){return t.getZIndex()-e.getZIndex()})),!(this.layers.length>0))return;var t=this.getFeatureInfoAccordionGroup=this._createGetFeatureInfoAccordionGroup();this.getFeatureInfoPanelDiv.appendChild(t),this.map=e.map,this.pixel=e.pixel,this.coordinates=e.coordinate,this.res=e.map.getView().getResolution(),this.displayGetFeatureInfo()}}},{key:"getGetFeatureInfoLayer",value:function(e){var t={},n=this.getLayerFormat(e);if(t={format:n,layer:e},"wmts"===n){var r=e.getSource().getFeatureInfoUrl(this.coordinates,this.res,this.map.getView().getProjection(),{INFOFORMAT:"text/html",STYLES:""});t=Ch(Ch({},t),{url:r})}if("wms"===n){var i=e.getSource().getFeatureInfoUrl(this.coordinates,this.res,this.map.getView().getProjection(),{INFO_FORMAT:"text/html",STYLES:""});t=Ch(Ch({},t),{url:i})}return t}},{key:"getFeaturesAtClick",value:function(e){var t=[];return this.getMap().forEachFeatureAtPixel(this.pixel,(function(n,r){e==r&&t.push(n)})),t}},{key:"getGetFeatureInfoContent",value:(s=yh().mark((function e(t){var n,r,i=this;return yh().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=null,"vector"!==t.format){e.next=7;break}return(r=this.getFeaturesAtClick(t.layer))&&(n=this.features2html(r)),e.abrupt("return",n);case 7:return e.abrupt("return",fetch(t.url).then((function(e){return e.text()})).then((function(e){var t=!1;if(0!==e.trim().length&&-1===e.indexOf("ServiceExceptionReport")&&-1===e.indexOf("java.lang.NullPointerException")&&-1===e.indexOf("java.lang.OutOfMemoryError")&&-1===e.indexOf("not queryable")&&-1===e.indexOf("No data")&&-1===e.indexOf("non interrogeable")||(t=!0),t)return null;var n=i.stringToHTML(e);return n&&n.innerHTML&&n.innerHTML.trim().length>0?e:null})).catch((function(e){return xh.log(e),e})));case 8:case"end":return e.stop()}}),e,this)})),c=function(){var e=this,t=arguments;return new Promise((function(n,r){var i=s.apply(e,t);function o(e){vh(i,n,r,o,a,"next",e)}function a(e){vh(i,n,r,o,a,"throw",e)}o(void 0)}))},function(e){return c.apply(this,arguments)})},{key:"getLayerTitle",value:function(e){if(void 0!==e.layer.getProperties&&void 0!==e.layer.getSource){var t=e.layer.getProperties(),n=t.source,r="";n&&(r=n._title||n.name||t.title||t.name||n.url_||"Couche de données")}return r}},{key:"displayGetFeatureInfo",value:function(){for(var e=this,t=this.layers.map((function(t){return e.getGetFeatureInfoLayer(t)})).map((function(t){var n=e.getLayerTitle(t),r=e._createGetFeatureInfoLayerAccordion(n);return r.style.display="none",new hh(Ch(Ch({},t),{layername:n,content:null,contentDiv:r,pending:!0}))})),n=0;n-1){if(n.current&&n.current===a)continue;r[i].setActive(!1);var s=o.source;if(void 0!==s&&s instanceof mu())for(var l in n)if(n.hasOwnProperty(l)){if("current"===l)continue;if("function"==typeof s[l]){var c=Array.isArray(n[l])?n[l]:[n[l]];s[l].apply(s,c)}}}else r[i].setActive(!1)}}};var Rh={modulo:function(e,t){var n=e%t;return n*t<0?n+t:n},decimalToDMS:function(e,t,n){var r=this.modulo(e+180,360)-180,i=Math.abs(3600*r),o=n||0,a=Math.pow(10,o),s=Math.floor(i/3600),l=Math.floor((i-3600*s)/60),c=i-3600*s-60*l;return(c=Math.ceil(c*a)/a)>=60&&(c=0,l+=1),l>=60&&(l=0,s+=1),{d:s,m:l,s:c,direction:t.charAt(r<0?1:0)}},dmsToDecimal:function(e,t,n,r){var i=e+t/60+n/3600;return"S"!=r&&"O"!=r||(i*=-1),i},coordinateToDecimal:function(e){var t={};return t.lat=e[1].toFixed(6),t.lng=e[0].toFixed(6),t.unit="°",t},coordinateToDMS:function(e){return{lng:Rh.decimalToDMS(e[0],"EO",2),lat:Rh.decimalToDMS(e[1],"NS",2),unit:"DMS"}},coordinateToRad:function(e){var t={},n=.017453292519943295;return t.lng=e[0]*n,t.lng=t.lng.toFixed(8),t.lat=e[1]*n,t.lat=t.lat.toFixed(8),t.unit="rad",t},coordinateToGon:function(e){var t={},n=1.1111111111111112;return t.lng=e[0]*n,t.lng=t.lng.toFixed(8),t.lat=e[1]*n,t.lat=t.lat.toFixed(8),t.unit="gon",t},coordinateToMeter:function(e){var t={};return t.x=e[0].toFixed(2),t.y=e[1].toFixed(2),t.unit="m",t},coordinateToKMeter:function(e){var t={};return t.x=(e[0]/1e3).toFixed(2),t.y=(e[1]/1e3).toFixed(2),t.unit="km",t},toInteger:function(e,t){var n=parseInt(e,t||10);return!isNaN(n)&&isFinite(n)?n:null},isInteger:function(e){if(isNaN(e))return!1;var t=parseFloat(e);return(0|t)===t},toFloat:function(e){var t=parseFloat(e);return!isNaN(t)&&isFinite(t)?t:null}};const Oh=Rh;const Dh={advancedSearchFiltersByDefault:{PositionOfInterest:[{name:"category",title:"Type",value:["cimetière","aérodrome","réservoir","administratif","construction linéaire","construction ponctuelle","construction surfacique","cours d'eau","détail hydrographique","détail orographique","équipement de transport","plan d'eau","poste de transformation","terrain de sport","transport par câble","zone d'activité ou d'intérêt","zone d'habitation","lieu-dit non habité"]},{name:"postcode",title:"Code postal"},{name:"citycode",title:"Code INSEE"}],StreetAddress:[{name:"city",title:"Ville"},{name:"postcode",title:"Code postal"},{name:"citycode",title:"Code INSEE"}],CadastralParcel:[{name:"departmentcode",title:"Code département (INSEE)",description:"Code INSEE du département (ex: 01, 94)"},{name:"municipalitycode",title:"Code commune (INSEE)",description:"Code INSEE de la commune : 3 chiffres (ex: 067)"},{name:"oldmunicipalitycode",title:"Commune absorbée",description:"Commune absorbée : 3 chiffres (ex: 000, 001)"},{name:"districtcode",title:"Arrondissement",description:"Arrondissement : 3 chiffres (ex: 004, 012)"},{name:"section",title:"Section",description:"Section Cadastrale : 2 caractères (chiffre et/ou lettre)"},{name:"number",title:"Numéro",description:"Numéro de la parcelle : 4 chiffres (ex: 0041, 0250)"},{name:"sheet",title:"Feuille",description:"Numéro de la feuille cadastrale"}]},zoomToResultsByDefault:function(e){var t=15,n=e.service,r=e.fields,i=e.type,o={1:11,2:12,3:13,4:14,5:15,6:16,7:17,8:17};return"SuggestedLocation"===n&&"PositionOfInterest"===i&&(t=o[r.classification]),"GeocodedLocation"===n&&"PositionOfInterest"===i&&(t=o[r.importance]||14),"StreetAddress"===i&&(t=17),"CadastralParcel"===i&&(t=17),t}};const Nh={getGeocodedLocationFreeform:function(e){var t=e.placeAttributes;if(t.label)return t.label;if("PositionOfInterest"===e.type){var n=t.toponym;return t.category&&Array.isArray(t.category)&&t.category.length>=2&&"administratif"===t.category[0]?n=n+", "+t.category[1]:t.postcode&&(n=n+", "+t.postcode[0],t.city&&(n=n+" "+t.city[0])),n}return"StreetAddress"===e.type?(t.housenumber?t.housenumber+" ":"")+t.street+" "+(t.postcode?t.postcode+", ":"")+t.city:"CadastralParcel"===e.type?t.id:"..."},getSuggestedLocationFreeform:function(e){if(e.fullText)return e.fullText;var t=[];return t.push(e.street||""),t.push(e.postalCode||""),t.push(e.commune||""),"PositionOfInterest"===e.type&&(t.push(e.poi||""),t.push(e.kind||"")),t.join(" - ")}};var Uh=6378137,jh=.0066943799901413165,Bh=484813681109536e-20,Fh=Math.PI/2,zh=1e-10,Vh=.017453292519943295,qh=57.29577951308232,Hh=Math.PI/4,Wh=2*Math.PI,Yh=3.14159265359,Zh={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667};const Jh={mm:{to_meter:.001},cm:{to_meter:.01},ft:{to_meter:.3048},"us-ft":{to_meter:1200/3937},fath:{to_meter:1.8288},kmi:{to_meter:1852},"us-ch":{to_meter:20.1168402336805},"us-mi":{to_meter:1609.34721869444},km:{to_meter:1e3},"ind-ft":{to_meter:.30479841},"ind-yd":{to_meter:.91439523},mi:{to_meter:1609.344},yd:{to_meter:.9144},ch:{to_meter:20.1168},link:{to_meter:.201168},dm:{to_meter:.01},in:{to_meter:.0254},"ind-ch":{to_meter:20.11669506},"us-in":{to_meter:.025400050800101},"us-yd":{to_meter:.914401828803658}};var Xh=/[\s_\-\/\(\)]/g;function Kh(e,t){if(e[t])return e[t];for(var n,r=Object.keys(e),i=t.toLowerCase().replace(Xh,""),o=-1;++o=this.text.length)return;e=this.text[this.place++]}switch(this.state){case eg:return this.neutral(e);case 2:return this.keyword(e);case 4:return this.quoted(e);case 5:return this.afterquote(e);case 3:return this.number(e);case-1:return}},ag.prototype.afterquote=function(e){if('"'===e)return this.word+='"',void(this.state=4);if(ig.test(e))return this.word=this.word.trim(),void this.afterItem(e);throw new Error("havn't handled \""+e+'" in afterquote yet, index '+this.place)},ag.prototype.afterItem=function(e){return","===e?(null!==this.word&&this.currentObject.push(this.word),this.word=null,void(this.state=eg)):"]"===e?(this.level--,null!==this.word&&(this.currentObject.push(this.word),this.word=null),this.state=eg,this.currentObject=this.stack.pop(),void(this.currentObject||(this.state=-1))):void 0},ag.prototype.number=function(e){if(!og.test(e)){if(ig.test(e))return this.word=parseFloat(this.word),void this.afterItem(e);throw new Error("havn't handled \""+e+'" in number yet, index '+this.place)}this.word+=e},ag.prototype.quoted=function(e){'"'!==e?this.word+=e:this.state=5},ag.prototype.keyword=function(e){if(rg.test(e))this.word+=e;else{if("["===e){var t=[];return t.push(this.word),this.level++,null===this.root?this.root=t:this.currentObject.push(t),this.stack.push(this.currentObject),this.currentObject=t,void(this.state=eg)}if(!ig.test(e))throw new Error("havn't handled \""+e+'" in keyword yet, index '+this.place);this.afterItem(e)}},ag.prototype.neutral=function(e){if(ng.test(e))return this.word=e,void(this.state=2);if('"'===e)return this.word="",void(this.state=4);if(og.test(e))return this.word=e,void(this.state=3);if(!ig.test(e))throw new Error("havn't handled \""+e+'" in neutral yet, index '+this.place);this.afterItem(e)},ag.prototype.output=function(){for(;this.place0?90:-90)):(e.lat0=ug(e.lat1>0?90:-90),e.lat_ts=e.lat1)}function hg(e){var t=$h(e),n=t[0],r={};return lg(t,r),dg(r),r[n]}function gg(e){var t=this;if(2===arguments.length){var n=arguments[1];"string"==typeof n?"+"===n.charAt(0)?gg[e]=Qh(arguments[1]):gg[e]=hg(arguments[1]):gg[e]=n}else if(1===arguments.length){if(Array.isArray(e))return e.map((function(e){Array.isArray(e)?gg.apply(t,e):gg(e)}));if("string"==typeof e){if(e in gg)return gg[e]}else"EPSG"in e?gg["EPSG:"+e.EPSG]=e:"ESRI"in e?gg["ESRI:"+e.ESRI]=e:"IAU2000"in e?gg["IAU2000:"+e.IAU2000]=e:console.log(e);return}}!function(e){e("EPSG:4326","+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"),e("EPSG:4269","+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"),e("EPSG:3857","+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs");for(var t=1;t<=60;++t)e("EPSG:"+(32600+t),"+proj=utm +zone="+t+" +datum=WGS84 +units=m"),e("EPSG:"+(32700+t),"+proj=utm +zone="+t+" +south +datum=WGS84 +units=m");e.WGS84=e["EPSG:4326"],e["EPSG:3785"]=e["EPSG:3857"],e.GOOGLE=e["EPSG:3857"],e["EPSG:900913"]=e["EPSG:3857"],e["EPSG:102113"]=e["EPSG:3857"]}(gg);const fg=gg;var mg=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];var yg=["3857","900913","3785","102113"];const vg=function(e){if(!function(e){return"string"==typeof e}(e))return e;if(function(e){return e in fg}(e))return fg[e];if(function(e){return mg.some((function(t){return e.indexOf(t)>-1}))}(e)){var t=hg(e);if(function(e){var t=Kh(e,"authority");if(t){var n=Kh(t,"epsg");return n&&yg.indexOf(n)>-1}}(t))return fg["EPSG:3857"];var n=function(e){var t=Kh(e,"extension");if(t)return Kh(t,"proj4")}(t);return n?Qh(n):t}return function(e){return"+"===e[0]}(e)?Qh(e):void 0};function Ag(e,t){var n,r;if(e=e||{},!t)return e;for(r in t)void 0!==(n=t[r])&&(e[r]=n);return e}function Cg(e,t,n){var r=e*t;return n/Math.sqrt(1-r*r)}function bg(e){return e<0?-1:1}function Ig(e){return Math.abs(e)<=Yh?e:e-bg(e)*Wh}function _g(e,t,n){var r=e*n,i=.5*e;return r=Math.pow((1-r)/(1+r),i),Math.tan(.5*(Fh-t))/r}function Eg(e,t){for(var n,r,i=.5*e,o=Fh-2*Math.atan(t),a=0;a<=15;a++)if(n=e*Math.sin(o),o+=r=Fh-2*Math.atan(t*Math.pow((1-n)/(1+n),i))-o,Math.abs(r)<=1e-10)return o;return-9999}function wg(e){return e}var Pg=[{init:function(){var e=this.b/this.a;this.es=1-e*e,"x0"in this||(this.x0=0),"y0"in this||(this.y0=0),this.e=Math.sqrt(this.es),this.lat_ts?this.sphere?this.k0=Math.cos(this.lat_ts):this.k0=Cg(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)):this.k0||(this.k?this.k0=this.k:this.k0=1)},forward:function(e){var t,n,r=e.x,i=e.y;if(i*qh>90&&i*qh<-90&&r*qh>180&&r*qh<-180)return null;if(Math.abs(Math.abs(i)-Fh)<=zh)return null;if(this.sphere)t=this.x0+this.a*this.k0*Ig(r-this.long0),n=this.y0+this.a*this.k0*Math.log(Math.tan(Hh+.5*i));else{var o=Math.sin(i),a=_g(this.e,i,o);t=this.x0+this.a*this.k0*Ig(r-this.long0),n=this.y0-this.a*this.k0*Math.log(a)}return e.x=t,e.y=n,e},inverse:function(e){var t,n,r=e.x-this.x0,i=e.y-this.y0;if(this.sphere)n=Fh-2*Math.atan(Math.exp(-i/(this.a*this.k0)));else{var o=Math.exp(-i/(this.a*this.k0));if(-9999===(n=Eg(this.e,o)))return null}return t=Ig(this.long0+r/(this.a*this.k0)),e.x=t,e.y=n,e},names:["Mercator","Popular Visualisation Pseudo Mercator","Mercator_1SP","Mercator_Auxiliary_Sphere","merc"]},{init:function(){},forward:wg,inverse:wg,names:["longlat","identity"]}],Sg={},Mg=[];function xg(e,t){var n=Mg.length;return e.names?(Mg[n]=e,e.names.forEach((function(e){Sg[e.toLowerCase()]=n})),this):(console.log(t),!0)}const Gg={start:function(){Pg.forEach(xg)},add:xg,get:function(e){if(!e)return!1;var t=e.toLowerCase();return void 0!==Sg[t]&&Mg[Sg[t]]?Mg[Sg[t]]:void 0}};var Lg={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},APL4:{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},clrk80ign:{a:6378249.2,b:6356515,rf:293.4660213,ellipseName:"Clarke 1880 (IGN)"},clrk58:{a:6378293.645208759,rf:294.2606763692654,ellipseName:"Clarke 1858"},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS7:{a:6378135,rf:298.26,ellipseName:"WGS 72"}},kg=Lg.WGS84={a:6378137,rf:298.257223563,ellipseName:"WGS 84"};Lg.sphere={a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"};var Tg={wgs84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},ch1903:{towgs84:"674.374,15.056,405.346",ellipse:"bessel",datumName:"swiss"},ggrs87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},nad83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},nad27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"598.1,73.7,418.2,0.202,0.045,-2.455,6.7",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"577.326,90.129,463.919,5.137,1.474,5.297,2.4232",ellipse:"bessel",datumName:"Hermannskogel"},mgi:{towgs84:"577.326,90.129,463.919,5.137,1.474,5.297,2.4232",ellipse:"bessel",datumName:"Militar-Geographische Institut"},osni52:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"airy",datumName:"Irish National"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},rassadiran:{towgs84:"-133.63,-157.5,-158.62",ellipse:"intl",datumName:"Rassadiran"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},osgb36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Ordnance Survey of Great Britain 1936"},s_jtsk:{towgs84:"589,76,480",ellipse:"bessel",datumName:"S-JTSK (Ferro)"},beduaram:{towgs84:"-106,-87,188",ellipse:"clrk80",datumName:"Beduaram"},gunung_segara:{towgs84:"-403,684,41",ellipse:"bessel",datumName:"Gunung Segara Jakarta"},rnb72:{towgs84:"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",ellipse:"intl",datumName:"Reseau National Belge 1972"}};for(var Rg in Tg){var Og=Tg[Rg];Tg[Og.datumName]=Og}const Dg=Tg;const Ng=function(e,t,n,r,i,o,a){var s={};return s.datum_type=void 0===e||"none"===e?5:4,t&&(s.datum_params=t.map(parseFloat),0===s.datum_params[0]&&0===s.datum_params[1]&&0===s.datum_params[2]||(s.datum_type=1),s.datum_params.length>3&&(0===s.datum_params[3]&&0===s.datum_params[4]&&0===s.datum_params[5]&&0===s.datum_params[6]||(s.datum_type=2,s.datum_params[3]*=Bh,s.datum_params[4]*=Bh,s.datum_params[5]*=Bh,s.datum_params[6]=s.datum_params[6]/1e6+1))),a&&(s.datum_type=3,s.grids=a),s.a=n,s.b=r,s.es=i,s.ep2=o,s};var Ug={};function jg(e){if(0===e.length)return null;var t="@"===e[0];return t&&(e=e.slice(1)),"null"===e?{name:"null",mandatory:!t,grid:null,isNull:!0}:{name:e,mandatory:!t,grid:Ug[e]||null,isNull:!1}}function Bg(e){return e/3600*Math.PI/180}function Fg(e,t,n){return String.fromCharCode.apply(null,new Uint8Array(e.buffer.slice(t,n)))}function zg(e){return e.map((function(e){return[Bg(e.longitudeShift),Bg(e.latitudeShift)]}))}function Vg(e,t,n){return{name:Fg(e,t+8,t+16).trim(),parent:Fg(e,t+24,t+24+8).trim(),lowerLatitude:e.getFloat64(t+72,n),upperLatitude:e.getFloat64(t+88,n),lowerLongitude:e.getFloat64(t+104,n),upperLongitude:e.getFloat64(t+120,n),latitudeInterval:e.getFloat64(t+136,n),longitudeInterval:e.getFloat64(t+152,n),gridNodeCount:e.getInt32(t+168,n)}}function qg(e,t,n,r){for(var i=t+176,o=[],a=0;a-1.001*Fh)l=-Fh;else if(l>Fh&&l<1.001*Fh)l=Fh;else{if(l<-Fh)return{x:-1/0,y:-1/0,z:e.z};if(l>Fh)return{x:1/0,y:1/0,z:e.z}}return s>Math.PI&&(s-=2*Math.PI),i=Math.sin(l),a=Math.cos(l),o=i*i,{x:((r=n/Math.sqrt(1-t*o))+c)*a*Math.cos(s),y:(r+c)*a*Math.sin(s),z:(r*(1-t)+c)*i}}function Zg(e,t,n,r){var i,o,a,s,l,c,u,d,p,h,g,f,m,y,v,A=1e-12,C=e.x,b=e.y,I=e.z?e.z:0;if(i=Math.sqrt(C*C+b*b),o=Math.sqrt(C*C+b*b+I*I),i/n1e-24&&m<30);return{x:y,y:Math.atan(g/Math.abs(h)),z:v}}function Jg(e){return 1===e||2===e}function Xg(e,t,n){if(function(e,t){return e.datum_type===t.datum_type&&!(e.a!==t.a||Math.abs(e.es-t.es)>5e-11)&&(1===e.datum_type?e.datum_params[0]===t.datum_params[0]&&e.datum_params[1]===t.datum_params[1]&&e.datum_params[2]===t.datum_params[2]:2!==e.datum_type||e.datum_params[0]===t.datum_params[0]&&e.datum_params[1]===t.datum_params[1]&&e.datum_params[2]===t.datum_params[2]&&e.datum_params[3]===t.datum_params[3]&&e.datum_params[4]===t.datum_params[4]&&e.datum_params[5]===t.datum_params[5]&&e.datum_params[6]===t.datum_params[6])}(e,t))return n;if(5===e.datum_type||5===t.datum_type)return n;var r=e.a,i=e.es;if(3===e.datum_type){if(0!==Kg(e,!1,n))return;r=Uh,i=jh}var o=t.a,a=t.b,s=t.es;if(3===t.datum_type&&(o=Uh,a=6356752.314,s=jh),i===s&&r===o&&!Jg(e.datum_type)&&!Jg(t.datum_type))return n;if((n=Yg(n,i,r),Jg(e.datum_type)&&(n=function(e,t,n){if(1===t)return{x:e.x+n[0],y:e.y+n[1],z:e.z+n[2]};if(2===t){var r=n[0],i=n[1],o=n[2],a=n[3],s=n[4],l=n[5],c=n[6];return{x:c*(e.x-l*e.y+s*e.z)+r,y:c*(l*e.x+e.y-a*e.z)+i,z:c*(-s*e.x+a*e.y+e.z)+o}}}(n,e.datum_type,e.datum_params)),Jg(t.datum_type)&&(n=function(e,t,n){if(1===t)return{x:e.x-n[0],y:e.y-n[1],z:e.z-n[2]};if(2===t){var r=n[0],i=n[1],o=n[2],a=n[3],s=n[4],l=n[5],c=n[6],u=(e.x-r)/c,d=(e.y-i)/c,p=(e.z-o)/c;return{x:u+l*d-s*p,y:-l*u+d+a*p,z:s*u-a*d+p}}}(n,t.datum_type,t.datum_params)),n=Zg(n,s,o,a),3===t.datum_type)&&0!==Kg(t,!0,n))return;return n}function Kg(e,t,n){if(null===e.grids||0===e.grids.length)return console.log("Grid shift grids not found"),-1;var r={x:-n.x,y:n.y},i={x:Number.NaN,y:Number.NaN},o=[];e:for(var a=0;ar.y||h>r.x||m1e-12&&Math.abs(a.y)>1e-12);if(l<0)return console.log("Inverse grid shift iterator failed to converge."),r;r.x=Ig(o.x+n.ll[0]),r.y=o.y+n.ll[1]}else isNaN(o.x)||(r.x=e.x+o.x,r.y=e.y+o.y);return r}function $g(e,t){var n,r={x:e.x/t.del[0],y:e.y/t.del[1]},i=Math.floor(r.x),o=Math.floor(r.y),a=r.x-1*i,s=r.y-1*o,l={x:Number.NaN,y:Number.NaN};if(i<0||i>=t.lim[0])return l;if(o<0||o>=t.lim[1])return l;n=o*t.lim[0]+i;var c=t.cvs[n][0],u=t.cvs[n][1];n++;var d=t.cvs[n][0],p=t.cvs[n][1];n+=t.lim[0];var h=t.cvs[n][0],g=t.cvs[n][1];n--;var f=t.cvs[n][0],m=t.cvs[n][1],y=a*s,v=a*(1-s),A=(1-a)*(1-s),C=(1-a)*s;return l.x=A*c+v*d+C*f+y*h,l.y=A*u+v*p+C*m+y*g,l}function ef(e,t,n){var r,i,o,a=n.x,s=n.y,l=n.z||0,c={};for(o=0;o<3;o++)if(!t||2!==o||void 0!==n.z)switch(0===o?(r=a,i=-1!=="ew".indexOf(e.axis[o])?"x":"y"):1===o?(r=s,i=-1!=="ns".indexOf(e.axis[o])?"y":"x"):(r=l,i="z"),e.axis[o]){case"e":case"n":c[i]=r;break;case"w":case"s":c[i]=-r;break;case"u":void 0!==n[i]&&(c.z=r);break;case"d":void 0!==n[i]&&(c.z=-r);break;default:return null}return c}function tf(e){var t={x:e[0],y:e[1]};return e.length>2&&(t.z=e[2]),e.length>3&&(t.m=e[3]),t}function nf(e){if("function"==typeof Number.isFinite){if(Number.isFinite(e))return;throw new TypeError("coordinates must be finite numbers")}if("number"!=typeof e||e!=e||!isFinite(e))throw new TypeError("coordinates must be finite numbers")}function rf(e,t,n,r){var i,o=void 0!==(n=Array.isArray(n)?tf(n):{x:n.x,y:n.y,z:n.z,m:n.m}).z;if(function(e){nf(e.x),nf(e.y)}(n),e.datum&&t.datum&&function(e,t){return(1===e.datum.datum_type||2===e.datum.datum_type||3===e.datum.datum_type)&&"WGS84"!==t.datumCode||(1===t.datum.datum_type||2===t.datum.datum_type||3===t.datum.datum_type)&&"WGS84"!==e.datumCode}(e,t)&&(n=rf(e,i=new Wg("WGS84"),n,r),e=i),r&&"enu"!==e.axis&&(n=ef(e,!1,n)),"longlat"===e.projName)n={x:n.x*Vh,y:n.y*Vh,z:n.z||0};else if(e.to_meter&&(n={x:n.x*e.to_meter,y:n.y*e.to_meter,z:n.z||0}),!(n=e.inverse(n)))return;if(e.from_greenwich&&(n.x+=e.from_greenwich),n=Xg(e.datum,t.datum,n))return t.from_greenwich&&(n={x:n.x-t.from_greenwich,y:n.y,z:n.z||0}),"longlat"===t.projName?n={x:n.x*qh,y:n.y*qh,z:n.z||0}:(n=t.forward(n),t.to_meter&&(n={x:n.x/t.to_meter,y:n.y/t.to_meter,z:n.z||0})),r&&"enu"!==t.axis?ef(t,!0,n):(n&&!o&&delete n.z,n)}var of=Wg("WGS84");function af(e,t,n,r){var i,o,a;return Array.isArray(n)?(i=rf(e,t,n,r)||{x:NaN,y:NaN},n.length>2?void 0!==e.name&&"geocent"===e.name||void 0!==t.name&&"geocent"===t.name?"number"==typeof i.z?[i.x,i.y,i.z].concat(n.slice(3)):[i.x,i.y,n[2]].concat(n.slice(3)):[i.x,i.y].concat(n.slice(2)):[i.x,i.y]):(o=rf(e,t,n,r),2===(a=Object.keys(n)).length||a.forEach((function(r){if(void 0!==e.name&&"geocent"===e.name||void 0!==t.name&&"geocent"===t.name){if("x"===r||"y"===r||"z"===r)return}else if("x"===r||"y"===r)return;o[r]=n[r]})),o)}function sf(e){return e instanceof Wg?e:e.oProj?e.oProj:Wg(e)}const lf=function(e,t,n){e=sf(e);var r,i=!1;return void 0===t?(t=e,e=of,i=!0):(void 0!==t.x||Array.isArray(t))&&(n=t,t=e,e=of,i=!0),t=sf(t),n?af(e,t,n):(r={forward:function(n,r){return af(e,t,n,r)},inverse:function(n,r){return af(t,e,n,r)}},i&&(r.oProj=t),r)};var cf="AJSAJS",uf="AFAFAF",df=65,pf=73,hf=79,gf=86,ff=90;const mf={forward:yf,inverse:function(e){var t=bf(Ef(e.toUpperCase()));if(t.lat&&t.lon)return[t.lon,t.lat,t.lon,t.lat];return[t.left,t.bottom,t.right,t.top]},toPoint:vf};function yf(e,t){return t=t||5,function(e,t){var n="00000"+e.easting,r="00000"+e.northing;return e.zoneNumber+e.zoneLetter+(i=e.easting,o=e.northing,a=e.zoneNumber,s=_f(a),l=Math.floor(i/1e5),c=Math.floor(o/1e5)%20,function(e,t,n){var r=n-1,i=cf.charCodeAt(r),o=uf.charCodeAt(r),a=i+e-1,s=o+t,l=!1;return a>ff&&(a=a-ff+df-1,l=!0),(a===pf||ipf||(a>pf||ihf||(a>hf||iff&&(a=a-ff+df-1),s>gf?(s=s-gf+df-1,l=!0):l=!1,(s===pf||opf||(s>pf||ohf||(s>hf||ogf&&(s=s-gf+df-1),String.fromCharCode(a)+String.fromCharCode(s)}(l,c,s))+n.substr(n.length-5,t)+r.substr(r.length-5,t);var i,o,a,s,l,c}(function(e){var t,n,r,i,o,a,s,l,c=e.lat,u=e.lon,d=6378137,p=.00669438,h=.9996,g=Af(c),f=Af(u);l=Math.floor((u+180)/6)+1,180===u&&(l=60);c>=56&&c<64&&u>=3&&u<12&&(l=32);c>=72&&c<84&&(u>=0&&u<9?l=31:u>=9&&u<21?l=33:u>=21&&u<33?l=35:u>=33&&u<42&&(l=37));s=Af(6*(l-1)-180+3),t=p/(1-p),n=d/Math.sqrt(1-p*Math.sin(g)*Math.sin(g)),r=Math.tan(g)*Math.tan(g),i=t*Math.cos(g)*Math.cos(g),o=Math.cos(g)*(f-s),a=d*((1-p/4-3*p*p/64-5*p*p*p/256)*g-(3*p/8+3*p*p/32+45*p*p*p/1024)*Math.sin(2*g)+(15*p*p/256+45*p*p*p/1024)*Math.sin(4*g)-35*p*p*p/3072*Math.sin(6*g));var m=h*n*(o+(1-r+i)*o*o*o/6+(5-18*r+r*r+72*i-58*t)*o*o*o*o*o/120)+5e5,y=h*(a+n*Math.tan(g)*(o*o/2+(5-r+9*i+4*i*i)*o*o*o*o/24+(61-58*r+r*r+600*i-330*t)*o*o*o*o*o*o/720));c<0&&(y+=1e7);return{northing:Math.round(y),easting:Math.round(m),zoneNumber:l,zoneLetter:If(c)}}({lat:e[1],lon:e[0]}),t)}function vf(e){var t=bf(Ef(e.toUpperCase()));return t.lat&&t.lon?[t.lon,t.lat]:[(t.left+t.right)/2,(t.top+t.bottom)/2]}function Af(e){return e*(Math.PI/180)}function Cf(e){return e/Math.PI*180}function bf(e){var t=e.northing,n=e.easting,r=e.zoneLetter,i=e.zoneNumber;if(i<0||i>60)return null;var o,a,s,l,c,u,d,p,h,g=.9996,f=6378137,m=.00669438,y=(1-Math.sqrt(.99330562))/(1+Math.sqrt(.99330562)),v=n-5e5,A=t;r<"N"&&(A-=1e7),d=6*(i-1)-180+3,o=.006739496752268451,h=(p=A/g/6367449.145945056)+(3*y/2-27*y*y*y/32)*Math.sin(2*p)+(21*y*y/16-55*y*y*y*y/32)*Math.sin(4*p)+151*y*y*y/96*Math.sin(6*p),a=f/Math.sqrt(1-m*Math.sin(h)*Math.sin(h)),s=Math.tan(h)*Math.tan(h),l=o*Math.cos(h)*Math.cos(h),c=.99330562*f/Math.pow(1-m*Math.sin(h)*Math.sin(h),1.5),u=v/(a*g);var C=h-a*Math.tan(h)/c*(u*u/2-(5+3*s+10*l-4*l*l-9*o)*u*u*u*u/24+(61+90*s+298*l+45*s*s-1.6983531815716497-3*l*l)*u*u*u*u*u*u/720);C=Cf(C);var b,I=(u-(1+2*s+l)*u*u*u/6+(5-2*l+28*s-3*l*l+8*o+24*s*s)*u*u*u*u*u/120)/Math.cos(h);if(I=d+Cf(I),e.accuracy){var _=bf({northing:e.northing+e.accuracy,easting:e.easting+e.accuracy,zoneLetter:e.zoneLetter,zoneNumber:e.zoneNumber});b={top:_.lat,right:_.lon,bottom:C,left:I}}else b={lat:C,lon:I};return b}function If(e){var t="Z";return 84>=e&&e>=72?t="X":72>e&&e>=64?t="W":64>e&&e>=56?t="V":56>e&&e>=48?t="U":48>e&&e>=40?t="T":40>e&&e>=32?t="S":32>e&&e>=24?t="R":24>e&&e>=16?t="Q":16>e&&e>=8?t="P":8>e&&e>=0?t="N":0>e&&e>=-8?t="M":-8>e&&e>=-16?t="L":-16>e&&e>=-24?t="K":-24>e&&e>=-32?t="J":-32>e&&e>=-40?t="H":-40>e&&e>=-48?t="G":-48>e&&e>=-56?t="F":-56>e&&e>=-64?t="E":-64>e&&e>=-72?t="D":-72>e&&e>=-80&&(t="C"),t}function _f(e){var t=e%6;return 0===t&&(t=6),t}function Ef(e){if(e&&0===e.length)throw"MGRSPoint coverting from nothing";for(var t,n=e.length,r=null,i="",o=0;!/[A-Z]/.test(t=e.charAt(o));){if(o>=2)throw"MGRSPoint bad conversion from: "+e;i+=t,o++}var a=parseInt(i,10);if(0===o||o+3>n)throw"MGRSPoint bad conversion from: "+e;var s=e.charAt(o++);if(s<="A"||"B"===s||"Y"===s||s>="Z"||"I"===s||"O"===s)throw"MGRSPoint zone letter "+s+" not handled: "+e;r=e.substring(o,o+=2);for(var l=_f(a),c=function(e,t){var n=cf.charCodeAt(t-1),r=1e5,i=!1;for(;n!==e.charCodeAt(0);){if(++n===pf&&n++,n===hf&&n++,n>ff){if(i)throw"Bad character: "+e;n=df,i=!0}r+=1e5}return r}(r.charAt(0),l),u=function(e,t){if(e>"V")throw"MGRSPoint given invalid Northing "+e;var n=uf.charCodeAt(t-1),r=0,i=!1;for(;n!==e.charCodeAt(0);){if(++n===pf&&n++,n===hf&&n++,n>gf){if(i)throw"Bad character: "+e;n=df,i=!0}r+=1e5}return r}(r.charAt(1),l);u0&&(p=1e5/Math.pow(10,f),h=e.substring(o,o+f),m=parseFloat(h)*p,g=e.substring(o+f),y=parseFloat(g)*p),{easting:m+c,northing:y+u,zoneLetter:s,zoneNumber:a,accuracy:p}}function wf(e){var t;switch(e){case"C":t=11e5;break;case"D":t=2e6;break;case"E":t=28e5;break;case"F":t=37e5;break;case"G":t=46e5;break;case"H":t=55e5;break;case"J":t=64e5;break;case"K":t=73e5;break;case"L":t=82e5;break;case"M":t=91e5;break;case"N":t=0;break;case"P":t=8e5;break;case"Q":t=17e5;break;case"R":t=26e5;break;case"S":t=35e5;break;case"T":t=44e5;break;case"U":t=53e5;break;case"V":t=62e5;break;case"W":t=7e6;break;case"X":t=79e5;break;default:t=-1}if(t>=0)return t;throw"Invalid zone letter: "+e}function Pf(e,t,n){if(!(this instanceof Pf))return new Pf(e,t,n);if(Array.isArray(e))this.x=e[0],this.y=e[1],this.z=e[2]||0;else if("object"==typeof e)this.x=e.x,this.y=e.y,this.z=e.z||0;else if("string"==typeof e&&void 0===t){var r=e.split(",");this.x=parseFloat(r[0],10),this.y=parseFloat(r[1],10),this.z=parseFloat(r[2],10)||0}else this.x=e,this.y=t,this.z=n||0;console.warn("proj4.Point will be removed in version 3, use proj4.toPoint")}Pf.fromMGRS=function(e){return new Pf(vf(e))},Pf.prototype.toMGRS=function(e){return yf([this.x,this.y],e)};const Sf=Pf;var Mf=.046875,xf=.01953125,Gf=.01068115234375;function Lf(e){var t=[];t[0]=1-e*(.25+e*(Mf+e*(xf+e*Gf))),t[1]=e*(.75-e*(Mf+e*(xf+e*Gf)));var n=e*e;return t[2]=n*(.46875-e*(.013020833333333334+.007120768229166667*e)),n*=e,t[3]=n*(.3645833333333333-.005696614583333333*e),t[4]=n*e*.3076171875,t}function kf(e,t,n,r){return n*=t,t*=t,r[0]*e-n*(r[1]+t*(r[2]+t*(r[3]+t*r[4])))}function Tf(e,t,n){for(var r=1/(1-t),i=e,o=20;o;--o){var a=Math.sin(i),s=1-t*a*a;if(i-=s=(kf(i,a,Math.cos(i),n)-e)*(s*Math.sqrt(s))*r,Math.abs(s)zh?Math.tan(o):0,g=Math.pow(h,2),f=Math.pow(g,2);t=1-this.es*Math.pow(s,2),c/=Math.sqrt(t);var m=kf(o,s,l,this.en);n=this.a*(this.k0*c*(1+u/6*(1-g+d+u/20*(5-18*g+f+14*d-58*g*d+u/42*(61+179*f-f*g-479*g)))))+this.x0,r=this.a*(this.k0*(m-this.ml0+s*a*c/2*(1+u/12*(5-g+9*d+4*p+u/30*(61+f-58*g+270*d-330*g*d+u/56*(1385+543*f-f*g-3111*g))))))+this.y0}else{var y=l*Math.sin(a);if(Math.abs(Math.abs(y)-1)=1){if(y-1>zh)return 93;r=0}else r=Math.acos(r);o<0&&(r=-r),r=this.a*this.k0*(r-this.lat0)+this.y0}return e.x=n,e.y=r,e},inverse:function(e){var t,n,r,i,o=(e.x-this.x0)*(1/this.a),a=(e.y-this.y0)*(1/this.a);if(this.es)if(n=Tf(t=this.ml0+a/this.k0,this.es,this.en),Math.abs(n)zh?Math.tan(n):0,u=this.ep2*Math.pow(l,2),d=Math.pow(u,2),p=Math.pow(c,2),h=Math.pow(p,2);t=1-this.es*Math.pow(s,2);var g=o*Math.sqrt(t)/this.k0,f=Math.pow(g,2);r=n-(t*=c)*f/(1-this.es)*.5*(1-f/12*(5+3*p-9*u*p+u-4*d-f/30*(61+90*p-252*u*p+45*h+46*u-f/56*(1385+3633*p+4095*h+1574*h*p)))),i=Ig(this.long0+g*(1-f/6*(1+2*p+u-f/20*(5+28*p+24*h+8*u*p+6*u-f/42*(61+662*p+1320*h+720*h*p))))/l)}else r=Fh*bg(a),i=0;else{var m=Math.exp(o/this.k0),y=.5*(m-1/m),v=this.lat0+a/this.k0,A=Math.cos(v);t=Math.sqrt((1-Math.pow(A,2))/(1+Math.pow(y,2))),r=Math.asin(t),a<0&&(r=-r),i=0===y&&0===A?0:Ig(Math.atan2(y,A)+this.long0)}return e.x=i,e.y=r,e},names:["Fast_Transverse_Mercator","Fast Transverse Mercator"]};function Of(e){var t=Math.exp(e);return t=(t-1/t)/2}function Df(e,t){e=Math.abs(e),t=Math.abs(t);var n=Math.max(e,t),r=Math.min(e,t)/(n||1);return n*Math.sqrt(1+Math.pow(r,2))}function Nf(e){var t=Math.abs(e);return t=function(e){var t=1+e,n=t-1;return 0===n?e:e*Math.log(t)/n}(t*(1+t/(Df(1,t)+1))),e<0?-t:t}function Uf(e,t){for(var n,r=2*Math.cos(2*t),i=e.length-1,o=e[i],a=0;--i>=0;)n=r*o-a+e[i],a=o,o=n;return t+n*Math.sin(2*t)}function jf(e,t,n){for(var r,i,o=Math.sin(t),a=Math.cos(t),s=Of(n),l=function(e){var t=Math.exp(e);return(t+1/t)/2}(n),c=2*a*l,u=-2*o*s,d=e.length-1,p=e[d],h=0,g=0,f=0;--d>=0;)r=g,i=h,p=c*(g=p)-r-u*(h=f)+e[d],f=u*g-i+c*h;return[(c=o*l)*p-(u=a*s)*f,c*f+u*p]}const Bf={init:function(){if(!this.approx&&(isNaN(this.es)||this.es<=0))throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION["Fast_Transverse_Mercator"] in the WKT.');this.approx&&(Rf.init.apply(this),this.forward=Rf.forward,this.inverse=Rf.inverse),this.x0=void 0!==this.x0?this.x0:0,this.y0=void 0!==this.y0?this.y0:0,this.long0=void 0!==this.long0?this.long0:0,this.lat0=void 0!==this.lat0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var e=this.es/(1+Math.sqrt(1-this.es)),t=e/(2-e),n=t;this.cgb[0]=t*(2+t*(-2/3+t*(t*(116/45+t*(26/45+t*(-2854/675)))-2))),this.cbg[0]=t*(t*(2/3+t*(4/3+t*(-82/45+t*(32/45+t*(4642/4725)))))-2),n*=t,this.cgb[1]=n*(7/3+t*(t*(-227/45+t*(2704/315+t*(2323/945)))-1.6)),this.cbg[1]=n*(5/3+t*(-16/15+t*(-13/9+t*(904/315+t*(-1522/945))))),n*=t,this.cgb[2]=n*(56/15+t*(-136/35+t*(-1262/105+t*(73814/2835)))),this.cbg[2]=n*(-26/15+t*(34/21+t*(1.6+t*(-12686/2835)))),n*=t,this.cgb[3]=n*(4279/630+t*(-332/35+t*(-399572/14175))),this.cbg[3]=n*(1237/630+t*(t*(-24832/14175)-2.4)),n*=t,this.cgb[4]=n*(4174/315+t*(-144838/6237)),this.cbg[4]=n*(-734/315+t*(109598/31185)),n*=t,this.cgb[5]=n*(601676/22275),this.cbg[5]=n*(444337/155925),n=Math.pow(t,2),this.Qn=this.k0/(1+t)*(1+n*(1/4+n*(1/64+n/256))),this.utg[0]=t*(t*(2/3+t*(-37/96+t*(1/360+t*(81/512+t*(-96199/604800)))))-.5),this.gtu[0]=t*(.5+t*(-2/3+t*(5/16+t*(41/180+t*(-127/288+t*(7891/37800)))))),this.utg[1]=n*(-1/48+t*(-1/15+t*(437/1440+t*(-46/105+t*(1118711/3870720))))),this.gtu[1]=n*(13/48+t*(t*(557/1440+t*(281/630+t*(-1983433/1935360)))-.6)),n*=t,this.utg[2]=n*(-17/480+t*(37/840+t*(209/4480+t*(-5569/90720)))),this.gtu[2]=n*(61/240+t*(-103/140+t*(15061/26880+t*(167603/181440)))),n*=t,this.utg[3]=n*(-4397/161280+t*(11/504+t*(830251/7257600))),this.gtu[3]=n*(49561/161280+t*(-179/168+t*(6601661/7257600))),n*=t,this.utg[4]=n*(-4583/161280+t*(108847/3991680)),this.gtu[4]=n*(34729/80640+t*(-3418889/1995840)),n*=t,this.utg[5]=n*(-20648693/638668800),this.gtu[5]=.6650675310896665*n;var r=Uf(this.cbg,this.lat0);this.Zb=-this.Qn*(r+function(e,t){for(var n,r=2*Math.cos(t),i=e.length-1,o=e[i],a=0;--i>=0;)n=r*o-a+e[i],a=o,o=n;return Math.sin(t)*n}(this.gtu,2*r))},forward:function(e){var t=Ig(e.x-this.long0),n=e.y;n=Uf(this.cbg,n);var r=Math.sin(n),i=Math.cos(n),o=Math.sin(t),a=Math.cos(t);n=Math.atan2(r,a*i),t=Math.atan2(o*i,Df(r,i*a)),t=Nf(Math.tan(t));var s,l,c=jf(this.gtu,2*n,2*t);return n+=c[0],t+=c[1],Math.abs(t)<=2.623395162778?(s=this.a*(this.Qn*t)+this.x0,l=this.a*(this.Qn*n+this.Zb)+this.y0):(s=1/0,l=1/0),e.x=s,e.y=l,e},inverse:function(e){var t,n,r=(e.x-this.x0)*(1/this.a),i=(e.y-this.y0)*(1/this.a);if(i=(i-this.Zb)/this.Qn,r/=this.Qn,Math.abs(r)<=2.623395162778){var o=jf(this.utg,2*i,2*r);i+=o[0],r+=o[1],r=Math.atan(Of(r));var a=Math.sin(i),s=Math.cos(i),l=Math.sin(r),c=Math.cos(r);i=Math.atan2(a*c,Df(l,c*s)),t=Ig((r=Math.atan2(l,c*s))+this.long0),n=Uf(this.cgb,i)}else t=1/0,n=1/0;return e.x=t,e.y=n,e},names:["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc","Transverse_Mercator","Transverse Mercator","Gauss Kruger","Gauss_Kruger","tmerc"]};const Ff={init:function(){var e=function(e,t){if(void 0===e){if((e=Math.floor(30*(Ig(t)+Math.PI)/Math.PI)+1)<0)return 0;if(e>60)return 60}return e}(this.zone,this.long0);if(void 0===e)throw new Error("unknown utm zone");this.lat0=0,this.long0=(6*Math.abs(e)-183)*Vh,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Bf.init.apply(this),this.forward=Bf.forward,this.inverse=Bf.inverse},names:["Universal Transverse Mercator System","utm"],dependsOn:"etmerc"};function zf(e,t){return Math.pow((1-e)/(1+e),t)}const Vf={init:function(){var e=Math.sin(this.lat0),t=Math.cos(this.lat0);t*=t,this.rc=Math.sqrt(1-this.es)/(1-this.es*e*e),this.C=Math.sqrt(1+this.es*t*t/(1-this.es)),this.phic0=Math.asin(e/this.C),this.ratexp=.5*this.C*this.e,this.K=Math.tan(.5*this.phic0+Hh)/(Math.pow(Math.tan(.5*this.lat0+Hh),this.C)*zf(this.e*e,this.ratexp))},forward:function(e){var t=e.x,n=e.y;return e.y=2*Math.atan(this.K*Math.pow(Math.tan(.5*n+Hh),this.C)*zf(this.e*Math.sin(n),this.ratexp))-Fh,e.x=this.C*t,e},inverse:function(e){for(var t=e.x/this.C,n=e.y,r=Math.pow(Math.tan(.5*n+Hh)/this.K,1/this.C),i=20;i>0&&(n=2*Math.atan(r*zf(this.e*Math.sin(e.y),-.5*this.e))-Fh,!(Math.abs(n-e.y)<1e-14));--i)e.y=n;return i?(e.x=t,e.y=n,e):null},names:["gauss"]};const qf={init:function(){Vf.init.apply(this),this.rc&&(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"))},forward:function(e){var t,n,r,i;return e.x=Ig(e.x-this.long0),Vf.forward.apply(this,[e]),t=Math.sin(e.y),n=Math.cos(e.y),r=Math.cos(e.x),i=this.k0*this.R2/(1+this.sinc0*t+this.cosc0*n*r),e.x=i*n*Math.sin(e.x),e.y=i*(this.cosc0*t-this.sinc0*n*r),e.x=this.a*e.x+this.x0,e.y=this.a*e.y+this.y0,e},inverse:function(e){var t,n,r,i,o;if(e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,e.x/=this.k0,e.y/=this.k0,o=Df(e.x,e.y)){var a=2*Math.atan2(o,this.R2);t=Math.sin(a),n=Math.cos(a),i=Math.asin(n*this.sinc0+e.y*t*this.cosc0/o),r=Math.atan2(e.x*t,o*this.cosc0*n-e.y*this.sinc0*t)}else i=this.phic0,r=0;return e.x=r,e.y=i,Vf.inverse.apply(this,[e]),e.x=Ig(e.x+this.long0),e},names:["Stereographic_North_Pole","Oblique_Stereographic","sterea","Oblique Stereographic Alternative","Double_Stereographic"]};const Hf={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.coslat0=Math.cos(this.lat0),this.sinlat0=Math.sin(this.lat0),this.sphere?1===this.k0&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=zh&&(this.k0=.5*(1+bg(this.lat0)*Math.sin(this.lat_ts))):(Math.abs(this.coslat0)<=zh&&(this.lat0>0?this.con=1:this.con=-1),this.cons=Math.sqrt(Math.pow(1+this.e,1+this.e)*Math.pow(1-this.e,1-this.e)),1===this.k0&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=zh&&Math.abs(Math.cos(this.lat_ts))>zh&&(this.k0=.5*this.cons*Cg(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts))/_g(this.e,this.con*this.lat_ts,this.con*Math.sin(this.lat_ts))),this.ms1=Cg(this.e,this.sinlat0,this.coslat0),this.X0=2*Math.atan(this.ssfn_(this.lat0,this.sinlat0,this.e))-Fh,this.cosX0=Math.cos(this.X0),this.sinX0=Math.sin(this.X0))},forward:function(e){var t,n,r,i,o,a,s=e.x,l=e.y,c=Math.sin(l),u=Math.cos(l),d=Ig(s-this.long0);return Math.abs(Math.abs(s-this.long0)-Math.PI)<=zh&&Math.abs(l+this.lat0)<=zh?(e.x=NaN,e.y=NaN,e):this.sphere?(t=2*this.k0/(1+this.sinlat0*c+this.coslat0*u*Math.cos(d)),e.x=this.a*t*u*Math.sin(d)+this.x0,e.y=this.a*t*(this.coslat0*c-this.sinlat0*u*Math.cos(d))+this.y0,e):(n=2*Math.atan(this.ssfn_(l,c,this.e))-Fh,i=Math.cos(n),r=Math.sin(n),Math.abs(this.coslat0)<=zh?(o=_g(this.e,l*this.con,this.con*c),a=2*this.a*this.k0*o/this.cons,e.x=this.x0+a*Math.sin(s-this.long0),e.y=this.y0-this.con*a*Math.cos(s-this.long0),e):(Math.abs(this.sinlat0)0?Ig(this.long0+Math.atan2(e.x,-1*e.y)):Ig(this.long0+Math.atan2(e.x,e.y)):Ig(this.long0+Math.atan2(e.x*Math.sin(s),a*this.coslat0*Math.cos(s)-e.y*this.sinlat0*Math.sin(s))),e.x=t,e.y=n,e)}if(Math.abs(this.coslat0)<=zh){if(a<=zh)return n=this.lat0,t=this.long0,e.x=t,e.y=n,e;e.x*=this.con,e.y*=this.con,r=a*this.cons/(2*this.a*this.k0),n=this.con*Eg(this.e,r),t=this.con*Ig(this.con*this.long0+Math.atan2(e.x,-1*e.y))}else i=2*Math.atan(a*this.cosX0/(2*this.a*this.k0*this.ms1)),t=this.long0,a<=zh?o=this.X0:(o=Math.asin(Math.cos(i)*this.sinX0+e.y*Math.sin(i)*this.cosX0/a),t=Ig(this.long0+Math.atan2(e.x*Math.sin(i),a*this.cosX0*Math.cos(i)-e.y*this.sinX0*Math.sin(i)))),n=-1*Eg(this.e,Math.tan(.5*(Fh+o)));return e.x=t,e.y=n,e},names:["stere","Stereographic_South_Pole","Polar Stereographic (variant B)","Polar_Stereographic"],ssfn_:function(e,t,n){return t*=n,Math.tan(.5*(Fh+e))*Math.pow((1-t)/(1+t),.5*n)}};const Wf={init:function(){var e=this.lat0;this.lambda0=this.long0;var t=Math.sin(e),n=this.a,r=1/this.rf,i=2*r-Math.pow(r,2),o=this.e=Math.sqrt(i);this.R=this.k0*n*Math.sqrt(1-i)/(1-i*Math.pow(t,2)),this.alpha=Math.sqrt(1+i/(1-i)*Math.pow(Math.cos(e),4)),this.b0=Math.asin(t/this.alpha);var a=Math.log(Math.tan(Math.PI/4+this.b0/2)),s=Math.log(Math.tan(Math.PI/4+e/2)),l=Math.log((1+o*t)/(1-o*t));this.K=a-this.alpha*s+this.alpha*o/2*l},forward:function(e){var t=Math.log(Math.tan(Math.PI/4-e.y/2)),n=this.e/2*Math.log((1+this.e*Math.sin(e.y))/(1-this.e*Math.sin(e.y))),r=-this.alpha*(t+n)+this.K,i=2*(Math.atan(Math.exp(r))-Math.PI/4),o=this.alpha*(e.x-this.lambda0),a=Math.atan(Math.sin(o)/(Math.sin(this.b0)*Math.tan(i)+Math.cos(this.b0)*Math.cos(o))),s=Math.asin(Math.cos(this.b0)*Math.sin(i)-Math.sin(this.b0)*Math.cos(i)*Math.cos(o));return e.y=this.R/2*Math.log((1+Math.sin(s))/(1-Math.sin(s)))+this.y0,e.x=this.R*a+this.x0,e},inverse:function(e){for(var t=e.x-this.x0,n=e.y-this.y0,r=t/this.R,i=2*(Math.atan(Math.exp(n/this.R))-Math.PI/4),o=Math.asin(Math.cos(this.b0)*Math.sin(i)+Math.sin(this.b0)*Math.cos(i)*Math.cos(r)),a=Math.atan(Math.sin(r)/(Math.cos(this.b0)*Math.cos(r)-Math.sin(this.b0)*Math.tan(i))),s=this.lambda0+a/this.alpha,l=0,c=o,u=-1e3,d=0;Math.abs(c-u)>1e-7;){if(++d>20)return;l=1/this.alpha*(Math.log(Math.tan(Math.PI/4+o/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(c))/2)),u=c,c=2*Math.atan(Math.exp(l))-Math.PI/2}return e.x=s,e.y=c,e},names:["somerc"]};var Yf=1e-7;const Zf={init:function(){var e,t,n,r,i,o,a,s,l,c,u,d,p,h=0,g=0,f=0,m=0,y=0,v=0,A=0;this.no_off=(p="object"==typeof(d=this).PROJECTION?Object.keys(d.PROJECTION)[0]:d.PROJECTION,"no_uoff"in d||"no_off"in d||-1!==["Hotine_Oblique_Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin"].indexOf(p)),this.no_rot="no_rot"in this;var C=!1;"alpha"in this&&(C=!0);var b=!1;if("rectified_grid_angle"in this&&(b=!0),C&&(A=this.alpha),b&&(h=this.rectified_grid_angle*Vh),C||b)g=this.longc;else if(f=this.long1,y=this.lat1,m=this.long2,v=this.lat2,Math.abs(y-v)<=Yf||(e=Math.abs(y))<=Yf||Math.abs(e-Fh)<=Yf||Math.abs(Math.abs(this.lat0)-Fh)<=Yf||Math.abs(Math.abs(v)-Fh)<=Yf)throw new Error;var I=1-this.es;t=Math.sqrt(I),Math.abs(this.lat0)>zh?(s=Math.sin(this.lat0),n=Math.cos(this.lat0),e=1-this.es*s*s,this.B=n*n,this.B=Math.sqrt(1+this.es*this.B*this.B/I),this.A=this.B*this.k0*t/e,(i=(r=this.B*t/(n*Math.sqrt(e)))*r-1)<=0?i=0:(i=Math.sqrt(i),this.lat0<0&&(i=-i)),this.E=i+=r,this.E*=Math.pow(_g(this.e,this.lat0,s),this.B)):(this.B=1/t,this.A=this.k0,this.E=r=i=1),C||b?(C?(u=Math.asin(Math.sin(A)/r),b||(h=A)):(u=h,A=Math.asin(r*Math.sin(u))),this.lam0=g-Math.asin(.5*(i-1/i)*Math.tan(u))/this.B):(o=Math.pow(_g(this.e,y,Math.sin(y)),this.B),a=Math.pow(_g(this.e,v,Math.sin(v)),this.B),i=this.E/o,l=(a-o)/(a+o),c=((c=this.E*this.E)-a*o)/(c+a*o),(e=f-m)<-Math.pi?m-=Wh:e>Math.pi&&(m+=Wh),this.lam0=Ig(.5*(f+m)-Math.atan(c*Math.tan(.5*this.B*(f-m))/l)/this.B),u=Math.atan(2*Math.sin(this.B*Ig(f-this.lam0))/(i-1/i)),h=A=Math.asin(r*Math.sin(u))),this.singam=Math.sin(u),this.cosgam=Math.cos(u),this.sinrot=Math.sin(h),this.cosrot=Math.cos(h),this.rB=1/this.B,this.ArB=this.A*this.rB,this.BrA=1/this.ArB,this.A,this.B,this.no_off?this.u_0=0:(this.u_0=Math.abs(this.ArB*Math.atan(Math.sqrt(r*r-1)/Math.cos(A))),this.lat0<0&&(this.u_0=-this.u_0)),i=.5*u,this.v_pole_n=this.ArB*Math.log(Math.tan(Hh-i)),this.v_pole_s=this.ArB*Math.log(Math.tan(Hh+i))},forward:function(e){var t,n,r,i,o,a,s,l,c={};if(e.x=e.x-this.lam0,Math.abs(Math.abs(e.y)-Fh)>zh){if(t=.5*((o=this.E/Math.pow(_g(this.e,e.y,Math.sin(e.y)),this.B))-(a=1/o)),n=.5*(o+a),i=Math.sin(this.B*e.x),r=(t*this.singam-i*this.cosgam)/n,Math.abs(Math.abs(r)-1)0?this.v_pole_n:this.v_pole_s,s=this.ArB*e.y;return this.no_rot?(c.x=s,c.y=l):(s-=this.u_0,c.x=l*this.cosrot+s*this.sinrot,c.y=s*this.cosrot-l*this.sinrot),c.x=this.a*c.x+this.x0,c.y=this.a*c.y+this.y0,c},inverse:function(e){var t,n,r,i,o,a,s,l={};if(e.x=(e.x-this.x0)*(1/this.a),e.y=(e.y-this.y0)*(1/this.a),this.no_rot?(n=e.y,t=e.x):(n=e.x*this.cosrot-e.y*this.sinrot,t=e.y*this.cosrot+e.x*this.sinrot+this.u_0),i=.5*((r=Math.exp(-this.BrA*n))-1/r),o=.5*(r+1/r),s=((a=Math.sin(this.BrA*t))*this.cosgam+i*this.singam)/o,Math.abs(Math.abs(s)-1)zh?this.ns=Math.log(r/s)/Math.log(i/l):this.ns=t,isNaN(this.ns)&&(this.ns=t),this.f0=r/(this.ns*Math.pow(i,this.ns)),this.rh=this.a*this.f0*Math.pow(c,this.ns),this.title||(this.title="Lambert Conformal Conic")}},forward:function(e){var t=e.x,n=e.y;Math.abs(2*Math.abs(n)-Math.PI)<=zh&&(n=bg(n)*(Fh-2e-10));var r,i,o=Math.abs(Math.abs(n)-Fh);if(o>zh)r=_g(this.e,n,Math.sin(n)),i=this.a*this.f0*Math.pow(r,this.ns);else{if((o=n*this.ns)<=0)return null;i=0}var a=this.ns*Ig(t-this.long0);return e.x=this.k0*(i*Math.sin(a))+this.x0,e.y=this.k0*(this.rh-i*Math.cos(a))+this.y0,e},inverse:function(e){var t,n,r,i,o,a=(e.x-this.x0)/this.k0,s=this.rh-(e.y-this.y0)/this.k0;this.ns>0?(t=Math.sqrt(a*a+s*s),n=1):(t=-Math.sqrt(a*a+s*s),n=-1);var l=0;if(0!==t&&(l=Math.atan2(n*a,n*s)),0!==t||this.ns>0){if(n=1/this.ns,r=Math.pow(t/(this.a*this.f0),n),-9999===(i=Eg(this.e,r)))return null}else i=-Fh;return o=Ig(l/this.ns+this.long0),e.x=o,e.y=i,e},names:["Lambert Tangential Conformal Conic Projection","Lambert_Conformal_Conic","Lambert_Conformal_Conic_1SP","Lambert_Conformal_Conic_2SP","lcc","Lambert Conic Conformal (1SP)","Lambert Conic Conformal (2SP)"]};const Xf={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(e){var t,n,r,i,o,a,s,l=e.x,c=e.y,u=Ig(l-this.long0);return t=Math.pow((1+this.e*Math.sin(c))/(1-this.e*Math.sin(c)),this.alfa*this.e/2),n=2*(Math.atan(this.k*Math.pow(Math.tan(c/2+this.s45),this.alfa)/t)-this.s45),r=-u*this.alfa,i=Math.asin(Math.cos(this.ad)*Math.sin(n)+Math.sin(this.ad)*Math.cos(n)*Math.cos(r)),o=Math.asin(Math.cos(n)*Math.sin(r)/Math.cos(i)),a=this.n*o,s=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(i/2+this.s45),this.n),e.y=s*Math.cos(a)/1,e.x=s*Math.sin(a)/1,this.czech||(e.y*=-1,e.x*=-1),e},inverse:function(e){var t,n,r,i,o,a,s,l=e.x;e.x=e.y,e.y=l,this.czech||(e.y*=-1,e.x*=-1),o=Math.sqrt(e.x*e.x+e.y*e.y),i=Math.atan2(e.y,e.x)/Math.sin(this.s0),r=2*(Math.atan(Math.pow(this.ro0/o,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),t=Math.asin(Math.cos(this.ad)*Math.sin(r)-Math.sin(this.ad)*Math.cos(r)*Math.cos(i)),n=Math.asin(Math.cos(r)*Math.sin(i)/Math.cos(t)),e.x=this.long0-n/this.alfa,a=t,s=0;var c=0;do{e.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(t/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(a))/(1-this.e*Math.sin(a)),this.e/2))-this.s45),Math.abs(a-e.y)<1e-10&&(s=1),a=e.y,c+=1}while(0===s&&c<15);return c>=15?null:e},names:["Krovak","krovak"]};function Kf(e,t,n,r,i){return e*i-t*Math.sin(2*i)+n*Math.sin(4*i)-r*Math.sin(6*i)}function Qf(e){return 1-.25*e*(1+e/16*(3+1.25*e))}function $f(e){return.375*e*(1+.25*e*(1+.46875*e))}function em(e){return.05859375*e*e*(1+.75*e)}function tm(e){return e*e*e*(35/3072)}function nm(e,t,n){var r=t*n;return e/Math.sqrt(1-r*r)}function rm(e){return Math.abs(e)1e-7?(1-e*e)*(t/(1-(n=e*t)*n)-.5/e*Math.log((1-n)/(1+n))):2*t}var sm=.3333333333333333,lm=.17222222222222222,cm=.10257936507936508,um=.06388888888888888,dm=.0664021164021164,pm=.016415012942191543;const hm={init:function(){var e,t=Math.abs(this.lat0);if(Math.abs(t-Fh)0)switch(this.qp=am(this.e,1),this.mmf=.5/(1-this.es),this.apa=function(e){var t,n=[];return n[0]=e*sm,t=e*e,n[0]+=t*lm,n[1]=t*um,t*=e,n[0]+=t*cm,n[1]+=t*dm,n[2]=t*pm,n}(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),e=Math.sin(this.lat0),this.sinb1=am(this.e,e)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*e*e)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}else this.mode===this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(e){var t,n,r,i,o,a,s,l,c,u,d=e.x,p=e.y;if(d=Ig(d-this.long0),this.sphere){if(o=Math.sin(p),u=Math.cos(p),r=Math.cos(d),this.mode===this.OBLIQ||this.mode===this.EQUIT){if((n=this.mode===this.EQUIT?1+u*r:1+this.sinph0*o+this.cosph0*u*r)<=zh)return null;t=(n=Math.sqrt(2/n))*u*Math.sin(d),n*=this.mode===this.EQUIT?o:this.cosph0*o-this.sinph0*u*r}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(r=-r),Math.abs(p+this.lat0)=0?(t=(c=Math.sqrt(a))*i,n=r*(this.mode===this.S_POLE?c:-c)):t=n=0}}return e.x=this.a*t+this.x0,e.y=this.a*n+this.y0,e},inverse:function(e){e.x-=this.x0,e.y-=this.y0;var t,n,r,i,o,a,s,l,c,u,d=e.x/this.a,p=e.y/this.a;if(this.sphere){var h,g=0,f=0;if((n=.5*(h=Math.sqrt(d*d+p*p)))>1)return null;switch(n=2*Math.asin(n),this.mode!==this.OBLIQ&&this.mode!==this.EQUIT||(f=Math.sin(n),g=Math.cos(n)),this.mode){case this.EQUIT:n=Math.abs(h)<=zh?0:Math.asin(p*f/h),d*=f,p=g*h;break;case this.OBLIQ:n=Math.abs(h)<=zh?this.lat0:Math.asin(g*this.sinph0+p*f*this.cosph0/h),d*=f*this.cosph0,p=(g-Math.sin(n)*this.sinph0)*h;break;case this.N_POLE:p=-p,n=Fh-n;break;case this.S_POLE:n-=Fh}t=0!==p||this.mode!==this.EQUIT&&this.mode!==this.OBLIQ?Math.atan2(d,p):0}else{if(s=0,this.mode===this.OBLIQ||this.mode===this.EQUIT){if(d/=this.dd,p*=this.dd,(a=Math.sqrt(d*d+p*p))1&&(e=e>1?1:-1),Math.asin(e)}const fm={init:function(){Math.abs(this.lat1+this.lat2)zh?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)},forward:function(e){var t=e.x,n=e.y;this.sin_phi=Math.sin(n),this.cos_phi=Math.cos(n);var r=am(this.e3,this.sin_phi),i=this.a*Math.sqrt(this.c-this.ns0*r)/this.ns0,o=this.ns0*Ig(t-this.long0),a=i*Math.sin(o)+this.x0,s=this.rh-i*Math.cos(o)+this.y0;return e.x=a,e.y=s,e},inverse:function(e){var t,n,r,i,o,a;return e.x-=this.x0,e.y=this.rh-e.y+this.y0,this.ns0>=0?(t=Math.sqrt(e.x*e.x+e.y*e.y),r=1):(t=-Math.sqrt(e.x*e.x+e.y*e.y),r=-1),i=0,0!==t&&(i=Math.atan2(r*e.x,r*e.y)),r=t*this.ns0/this.a,this.sphere?a=Math.asin((this.c-r*r)/(2*this.ns0)):(n=(this.c-r*r)/this.ns0,a=this.phi1z(this.e3,n)),o=Ig(i/this.ns0+this.long0),e.x=o,e.y=a,e},names:["Albers_Conic_Equal_Area","Albers","aea"],phi1z:function(e,t){var n,r,i,o,a=gm(.5*t);if(e0||Math.abs(o)<=zh?(a=this.x0+1*this.a*n*Math.sin(r)/o,s=this.y0+1*this.a*(this.cos_p14*t-this.sin_p14*n*i)/o):(a=this.x0+this.infinity_dist*n*Math.sin(r),s=this.y0+this.infinity_dist*(this.cos_p14*t-this.sin_p14*n*i)),e.x=a,e.y=s,e},inverse:function(e){var t,n,r,i,o,a;return e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,e.x/=this.k0,e.y/=this.k0,(t=Math.sqrt(e.x*e.x+e.y*e.y))?(i=Math.atan2(t,this.rc),n=Math.sin(i),a=gm((r=Math.cos(i))*this.sin_p14+e.y*n*this.cos_p14/t),o=Math.atan2(e.x*n,t*this.cos_p14*r-e.y*this.sin_p14*n),o=Ig(this.long0+o)):(a=this.phic0,o=0),e.x=o,e.y=a,e},names:["gnom"]};const ym={init:function(){this.sphere||(this.k0=Cg(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(e){var t,n,r=e.x,i=e.y,o=Ig(r-this.long0);if(this.sphere)t=this.x0+this.a*o*Math.cos(this.lat_ts),n=this.y0+this.a*Math.sin(i)/Math.cos(this.lat_ts);else{var a=am(this.e,Math.sin(i));t=this.x0+this.a*this.k0*o,n=this.y0+this.a*a*.5/this.k0}return e.x=t,e.y=n,e},inverse:function(e){var t,n;return e.x-=this.x0,e.y-=this.y0,this.sphere?(t=Ig(this.long0+e.x/this.a/Math.cos(this.lat_ts)),n=Math.asin(e.y/this.a*Math.cos(this.lat_ts))):(n=function(e,t){var n=1-(1-e*e)/(2*e)*Math.log((1-e)/(1+e));if(Math.abs(Math.abs(t)-n)<1e-6)return t<0?-1*Fh:Fh;for(var r,i,o,a,s=Math.asin(.5*t),l=0;l<30;l++)if(i=Math.sin(s),o=Math.cos(s),a=e*i,s+=r=Math.pow(1-a*a,2)/(2*o)*(t/(1-e*e)-i/(1-a*a)+.5/e*Math.log((1-a)/(1+a))),Math.abs(r)<=1e-10)return s;return NaN}(this.e,2*e.y*this.k0/this.a),t=Ig(this.long0+e.x/(this.a*this.k0))),e.x=t,e.y=n,e},names:["cea"]};const vm={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Equidistant Cylindrical (Plate Carre)",this.rc=Math.cos(this.lat_ts)},forward:function(e){var t=e.x,n=e.y,r=Ig(t-this.long0),i=rm(n-this.lat0);return e.x=this.x0+this.a*r*this.rc,e.y=this.y0+this.a*i,e},inverse:function(e){var t=e.x,n=e.y;return e.x=Ig(this.long0+(t-this.x0)/(this.a*this.rc)),e.y=rm(this.lat0+(n-this.y0)/this.a),e},names:["Equirectangular","Equidistant_Cylindrical","eqc"]};const Am={init:function(){this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Qf(this.es),this.e1=$f(this.es),this.e2=em(this.es),this.e3=tm(this.es),this.ml0=this.a*Kf(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(e){var t,n,r,i=e.x,o=e.y,a=Ig(i-this.long0);if(r=a*Math.sin(o),this.sphere)Math.abs(o)<=zh?(t=this.a*a,n=-1*this.a*this.lat0):(t=this.a*Math.sin(r)/Math.tan(o),n=this.a*(rm(o-this.lat0)+(1-Math.cos(r))/Math.tan(o)));else if(Math.abs(o)<=zh)t=this.a*a,n=-1*this.ml0;else{var s=nm(this.a,this.e,Math.sin(o))/Math.tan(o);t=s*Math.sin(r),n=this.a*Kf(this.e0,this.e1,this.e2,this.e3,o)-this.ml0+s*(1-Math.cos(r))}return e.x=t+this.x0,e.y=n+this.y0,e},inverse:function(e){var t,n,r,i,o,a,s,l,c;if(r=e.x-this.x0,i=e.y-this.y0,this.sphere)if(Math.abs(i+this.a*this.lat0)<=zh)t=Ig(r/this.a+this.long0),n=0;else{var u;for(a=this.lat0+i/this.a,s=r*r/this.a/this.a+a*a,l=a,o=20;o;--o)if(l+=c=-1*(a*(l*(u=Math.tan(l))+1)-l-.5*(l*l+s)*u)/((l-a)/u-1),Math.abs(c)<=zh){n=l;break}t=Ig(this.long0+Math.asin(r*Math.tan(l)/this.a)/Math.sin(n))}else if(Math.abs(i+this.ml0)<=zh)n=0,t=Ig(this.long0+r/this.a);else{var d,p,h,g,f;for(a=(this.ml0+i)/this.a,s=r*r/this.a/this.a+a*a,l=a,o=20;o;--o)if(f=this.e*Math.sin(l),d=Math.sqrt(1-f*f)*Math.tan(l),p=this.a*Kf(this.e0,this.e1,this.e2,this.e3,l),h=this.e0-2*this.e1*Math.cos(2*l)+4*this.e2*Math.cos(4*l)-6*this.e3*Math.cos(6*l),l-=c=(a*(d*(g=p/this.a)+1)-g-.5*d*(g*g+s))/(this.es*Math.sin(2*l)*(g*g+s-2*a*g)/(4*d)+(a-g)*(d*h-2/Math.sin(2*l))-h),Math.abs(c)<=zh){n=l;break}d=Math.sqrt(1-this.es*Math.pow(Math.sin(n),2))*Math.tan(n),t=Ig(this.long0+Math.asin(r*d/this.a)/Math.sin(n))}return e.x=t,e.y=n,e},names:["Polyconic","poly"]};const Cm={init:function(){this.A=[],this.A[1]=.6399175073,this.A[2]=-.1358797613,this.A[3]=.063294409,this.A[4]=-.02526853,this.A[5]=.0117879,this.A[6]=-.0055161,this.A[7]=.0026906,this.A[8]=-.001333,this.A[9]=67e-5,this.A[10]=-34e-5,this.B_re=[],this.B_im=[],this.B_re[1]=.7557853228,this.B_im[1]=0,this.B_re[2]=.249204646,this.B_im[2]=.003371507,this.B_re[3]=-.001541739,this.B_im[3]=.04105856,this.B_re[4]=-.10162907,this.B_im[4]=.01727609,this.B_re[5]=-.26623489,this.B_im[5]=-.36249218,this.B_re[6]=-.6870983,this.B_im[6]=-1.1651967,this.C_re=[],this.C_im=[],this.C_re[1]=1.3231270439,this.C_im[1]=0,this.C_re[2]=-.577245789,this.C_im[2]=-.007809598,this.C_re[3]=.508307513,this.C_im[3]=-.112208952,this.C_re[4]=-.15094762,this.C_im[4]=.18200602,this.C_re[5]=1.01418179,this.C_im[5]=1.64497696,this.C_re[6]=1.9660549,this.C_im[6]=2.5127645,this.D=[],this.D[1]=1.5627014243,this.D[2]=.5185406398,this.D[3]=-.03333098,this.D[4]=-.1052906,this.D[5]=-.0368594,this.D[6]=.007317,this.D[7]=.0122,this.D[8]=.00394,this.D[9]=-.0013},forward:function(e){var t,n=e.x,r=e.y-this.lat0,i=n-this.long0,o=r/Bh*1e-5,a=i,s=1,l=0;for(t=1;t<=10;t++)s*=o,l+=this.A[t]*s;var c,u=l,d=a,p=1,h=0,g=0,f=0;for(t=1;t<=6;t++)c=h*u+p*d,p=p*u-h*d,h=c,g=g+this.B_re[t]*p-this.B_im[t]*h,f=f+this.B_im[t]*p+this.B_re[t]*h;return e.x=f*this.a+this.x0,e.y=g*this.a+this.y0,e},inverse:function(e){var t,n,r=e.x,i=e.y,o=r-this.x0,a=(i-this.y0)/this.a,s=o/this.a,l=1,c=0,u=0,d=0;for(t=1;t<=6;t++)n=c*a+l*s,l=l*a-c*s,c=n,u=u+this.C_re[t]*l-this.C_im[t]*c,d=d+this.C_im[t]*l+this.C_re[t]*c;for(var p=0;p.999999999999&&(n=.999999999999),t=Math.asin(n);var r=Ig(this.long0+e.x/(.900316316158*this.a*Math.cos(t)));r<-Math.PI&&(r=-Math.PI),r>Math.PI&&(r=Math.PI),n=(2*t+Math.sin(2*t))/Math.PI,Math.abs(n)>1&&(n=1);var i=Math.asin(n);return e.x=r,e.y=i,e},names:["Mollweide","moll"]};const Em={init:function(){Math.abs(this.lat1+this.lat2)=0?(n=Math.sqrt(e.x*e.x+e.y*e.y),t=1):(n=-Math.sqrt(e.x*e.x+e.y*e.y),t=-1);var o=0;return 0!==n&&(o=Math.atan2(t*e.x,t*e.y)),this.sphere?(i=Ig(this.long0+o/this.ns),r=rm(this.g-n/this.a),e.x=i,e.y=r,e):(r=im(this.g-n/this.a,this.e0,this.e1,this.e2,this.e3),i=Ig(this.long0+o/this.ns),e.x=i,e.y=r,e)},names:["Equidistant_Conic","eqdc"]};const wm={init:function(){this.R=this.a},forward:function(e){var t,n,r=e.x,i=e.y,o=Ig(r-this.long0);Math.abs(i)<=zh&&(t=this.x0+this.R*o,n=this.y0);var a=gm(2*Math.abs(i/Math.PI));(Math.abs(o)<=zh||Math.abs(Math.abs(i)-Fh)<=zh)&&(t=this.x0,n=i>=0?this.y0+Math.PI*this.R*Math.tan(.5*a):this.y0+Math.PI*this.R*-Math.tan(.5*a));var s=.5*Math.abs(Math.PI/o-o/Math.PI),l=s*s,c=Math.sin(a),u=Math.cos(a),d=u/(c+u-1),p=d*d,h=d*(2/c-1),g=h*h,f=Math.PI*this.R*(s*(d-g)+Math.sqrt(l*(d-g)*(d-g)-(g+l)*(p-g)))/(g+l);o<0&&(f=-f),t=this.x0+f;var m=l+d;return f=Math.PI*this.R*(h*m-s*Math.sqrt((g+l)*(l+1)-m*m))/(g+l),n=i>=0?this.y0+f:this.y0-f,e.x=t,e.y=n,e},inverse:function(e){var t,n,r,i,o,a,s,l,c,u,d,p;return e.x-=this.x0,e.y-=this.y0,d=Math.PI*this.R,o=(r=e.x/d)*r+(i=e.y/d)*i,d=3*(i*i/(l=-2*(a=-Math.abs(i)*(1+o))+1+2*i*i+o*o)+(2*(s=a-2*i*i+r*r)*s*s/l/l/l-9*a*s/l/l)/27)/(c=(a-s*s/3/l)/l)/(u=2*Math.sqrt(-c/3)),Math.abs(d)>1&&(d=d>=0?1:-1),p=Math.acos(d)/3,n=e.y>=0?(-u*Math.cos(p+Math.PI/3)-s/3/l)*Math.PI:-(-u*Math.cos(p+Math.PI/3)-s/3/l)*Math.PI,t=Math.abs(r)2*Fh*this.a)return;return n=t/this.a,r=Math.sin(n),i=Math.cos(n),o=this.long0,Math.abs(t)<=zh?a=this.lat0:(a=gm(i*this.sin_p12+e.y*r*this.cos_p12/t),s=Math.abs(this.lat0)-Fh,o=Math.abs(s)<=zh?this.lat0>=0?Ig(this.long0+Math.atan2(e.x,-e.y)):Ig(this.long0-Math.atan2(-e.x,e.y)):Ig(this.long0+Math.atan2(e.x*r,t*this.cos_p12*i-e.y*this.sin_p12*r))),e.x=o,e.y=a,e}return l=Qf(this.es),c=$f(this.es),u=em(this.es),d=tm(this.es),Math.abs(this.sin_p12-1)<=zh?(a=im(((p=this.a*Kf(l,c,u,d,Fh))-(t=Math.sqrt(e.x*e.x+e.y*e.y)))/this.a,l,c,u,d),o=Ig(this.long0+Math.atan2(e.x,-1*e.y)),e.x=o,e.y=a,e):Math.abs(this.sin_p12+1)<=zh?(p=this.a*Kf(l,c,u,d,Fh),a=im(((t=Math.sqrt(e.x*e.x+e.y*e.y))-p)/this.a,l,c,u,d),o=Ig(this.long0+Math.atan2(e.x,e.y)),e.x=o,e.y=a,e):(t=Math.sqrt(e.x*e.x+e.y*e.y),f=Math.atan2(e.x,e.y),h=nm(this.a,this.e,this.sin_p12),m=Math.cos(f),v=-(y=this.e*this.cos_p12*m)*y/(1-this.es),A=3*this.es*(1-v)*this.sin_p12*this.cos_p12*m/(1-this.es),I=1-v*(b=(C=t/h)-v*(1+v)*Math.pow(C,3)/6-A*(1+3*v)*Math.pow(C,4)/24)*b/2-C*b*b*b/6,g=Math.asin(this.sin_p12*Math.cos(b)+this.cos_p12*Math.sin(b)*m),o=Ig(this.long0+Math.asin(Math.sin(f)*Math.sin(b)/Math.cos(g))),_=Math.sin(g),a=Math.atan2((_-this.es*I*this.sin_p12)*Math.tan(g),_*(1-this.es)),e.x=o,e.y=a,e)},names:["Azimuthal_Equidistant","aeqd"]};const Sm={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)},forward:function(e){var t,n,r,i,o,a,s,l=e.x,c=e.y;return r=Ig(l-this.long0),t=Math.sin(c),n=Math.cos(c),i=Math.cos(r),((o=this.sin_p14*t+this.cos_p14*n*i)>0||Math.abs(o)<=zh)&&(a=1*this.a*n*Math.sin(r),s=this.y0+1*this.a*(this.cos_p14*t-this.sin_p14*n*i)),e.x=a,e.y=s,e},inverse:function(e){var t,n,r,i,o,a,s;return e.x-=this.x0,e.y-=this.y0,n=gm((t=Math.sqrt(e.x*e.x+e.y*e.y))/this.a),r=Math.sin(n),i=Math.cos(n),a=this.long0,Math.abs(t)<=zh?(s=this.lat0,e.x=a,e.y=s,e):(s=gm(i*this.sin_p14+e.y*r*this.cos_p14/t),o=Math.abs(this.lat0)-Fh,Math.abs(o)<=zh?(a=this.lat0>=0?Ig(this.long0+Math.atan2(e.x,-e.y)):Ig(this.long0-Math.atan2(-e.x,e.y)),e.x=a,e.y=s,e):(a=Ig(this.long0+Math.atan2(e.x*r,t*this.cos_p14*i-e.y*this.sin_p14*r)),e.x=a,e.y=s,e))},names:["ortho"]};var Mm=1,xm=2,Gm=3,Lm=4,km=5,Tm=6,Rm=1,Om=2,Dm=3,Nm=4;function Um(e,t,n,r){var i;return eHh&&i<=Fh+Hh?(r.value=Om,i-=Fh):i>Fh+Hh||i<=-(Fh+Hh)?(r.value=Dm,i=i>=0?i-Yh:i+Yh):(r.value=Nm,i+=Fh)),i}function jm(e,t){var n=e+t;return n<-Yh?n+=Wh:n>+Yh&&(n-=Wh),n}const Bm={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=Fh-Hh/2?this.face=km:this.lat0<=-(Fh-Hh/2)?this.face=Tm:Math.abs(this.long0)<=Hh?this.face=Mm:Math.abs(this.long0)<=Fh+Hh?this.face=this.long0>0?xm:Lm:this.face=Gm,0!==this.es&&(this.one_minus_f=1-(this.a-this.b)/this.a,this.one_minus_f_squared=this.one_minus_f*this.one_minus_f)},forward:function(e){var t,n,r,i,o,a,s={x:0,y:0},l={value:0};if(e.x-=this.long0,t=0!==this.es?Math.atan(this.one_minus_f_squared*Math.tan(e.y)):e.y,n=e.x,this.face===km)i=Fh-t,n>=Hh&&n<=Fh+Hh?(l.value=Rm,r=n-Fh):n>Fh+Hh||n<=-(Fh+Hh)?(l.value=Om,r=n>0?n-Yh:n+Yh):n>-(Fh+Hh)&&n<=-Hh?(l.value=Dm,r=n+Fh):(l.value=Nm,r=n);else if(this.face===Tm)i=Fh+t,n>=Hh&&n<=Fh+Hh?(l.value=Rm,r=-n+Fh):n=-Hh?(l.value=Om,r=-n):n<-Hh&&n>=-(Fh+Hh)?(l.value=Dm,r=-n-Fh):(l.value=Nm,r=n>0?-n+Yh:-n-Yh);else{var c,u,d,p,h,g;this.face===xm?n=jm(n,+Fh):this.face===Gm?n=jm(n,+Yh):this.face===Lm&&(n=jm(n,-Fh)),p=Math.sin(t),h=Math.cos(t),g=Math.sin(n),c=h*Math.cos(n),u=h*g,d=p,this.face===Mm?r=Um(i=Math.acos(c),d,u,l):this.face===xm?r=Um(i=Math.acos(u),d,-c,l):this.face===Gm?r=Um(i=Math.acos(-c),d,-u,l):this.face===Lm?r=Um(i=Math.acos(-u),d,c,l):(i=r=0,l.value=Rm)}return a=Math.atan(12/Yh*(r+Math.acos(Math.sin(r)*Math.cos(Hh))-Fh)),o=Math.sqrt((1-Math.cos(i))/(Math.cos(a)*Math.cos(a))/(1-Math.cos(Math.atan(1/Math.cos(r))))),l.value===Om?a+=Fh:l.value===Dm?a+=Yh:l.value===Nm&&(a+=1.5*Yh),s.x=o*Math.cos(a),s.y=o*Math.sin(a),s.x=s.x*this.a+this.x0,s.y=s.y*this.a+this.y0,e.x=s.x,e.y=s.y,e},inverse:function(e){var t,n,r,i,o,a,s,l,c,u,d,p,h={lam:0,phi:0},g={value:0};if(e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,n=Math.atan(Math.sqrt(e.x*e.x+e.y*e.y)),t=Math.atan2(e.y,e.x),e.x>=0&&e.x>=Math.abs(e.y)?g.value=Rm:e.y>=0&&e.y>=Math.abs(e.x)?(g.value=Om,t-=Fh):e.x<0&&-e.x>=Math.abs(e.y)?(g.value=Dm,t=t<0?t+Yh:t-Yh):(g.value=Nm,t+=Fh),c=Yh/12*Math.tan(t),o=Math.sin(c)/(Math.cos(c)-1/Math.sqrt(2)),a=Math.atan(o),(s=1-(r=Math.cos(t))*r*(i=Math.tan(n))*i*(1-Math.cos(Math.atan(1/Math.cos(a)))))<-1?s=-1:s>1&&(s=1),this.face===km)l=Math.acos(s),h.phi=Fh-l,g.value===Rm?h.lam=a+Fh:g.value===Om?h.lam=a<0?a+Yh:a-Yh:g.value===Dm?h.lam=a-Fh:h.lam=a;else if(this.face===Tm)l=Math.acos(s),h.phi=l-Fh,g.value===Rm?h.lam=-a+Fh:g.value===Om?h.lam=-a:g.value===Dm?h.lam=-a-Fh:h.lam=a<0?-a-Yh:-a+Yh;else{var f,m,y;c=(f=s)*f,m=(c+=(y=c>=1?0:Math.sqrt(1-c)*Math.sin(a))*y)>=1?0:Math.sqrt(1-c),g.value===Om?(c=m,m=-y,y=c):g.value===Dm?(m=-m,y=-y):g.value===Nm&&(c=m,m=y,y=-c),this.face===xm?(c=f,f=-m,m=c):this.face===Gm?(f=-f,m=-m):this.face===Lm&&(c=f,f=m,m=-c),h.phi=Math.acos(-y)-Fh,h.lam=Math.atan2(m,f),this.face===xm?h.lam=jm(h.lam,-Fh):this.face===Gm?h.lam=jm(h.lam,-Yh):this.face===Lm&&(h.lam=jm(h.lam,+Fh))}return 0!==this.es&&(u=h.phi<0?1:0,d=Math.tan(h.phi),p=this.b/Math.sqrt(d*d+this.one_minus_f_squared),h.phi=Math.atan(Math.sqrt(this.a*this.a-p*p)/(this.one_minus_f*p)),u&&(h.phi=-h.phi)),h.lam+=this.long0,e.x=h.lam,e.y=h.phi,e},names:["Quadrilateralized Spherical Cube","Quadrilateralized_Spherical_Cube","qsc"]};var Fm=[[1,22199e-21,-715515e-10,31103e-10],[.9986,-482243e-9,-24897e-9,-13309e-10],[.9954,-83103e-8,-448605e-10,-9.86701e-7],[.99,-.00135364,-59661e-9,36777e-10],[.9822,-.00167442,-449547e-11,-572411e-11],[.973,-.00214868,-903571e-10,1.8736e-8],[.96,-.00305085,-900761e-10,164917e-11],[.9427,-.00382792,-653386e-10,-26154e-10],[.9216,-.00467746,-10457e-8,481243e-11],[.8962,-.00536223,-323831e-10,-543432e-11],[.8679,-.00609363,-113898e-9,332484e-11],[.835,-.00698325,-640253e-10,9.34959e-7],[.7986,-.00755338,-500009e-10,9.35324e-7],[.7597,-.00798324,-35971e-9,-227626e-11],[.7186,-.00851367,-701149e-10,-86303e-10],[.6732,-.00986209,-199569e-9,191974e-10],[.6213,-.010418,883923e-10,624051e-11],[.5722,-.00906601,182e-6,624051e-11],[.5322,-.00677797,275608e-9,624051e-11]],zm=[[-520417e-23,.0124,121431e-23,-845284e-16],[.062,.0124,-1.26793e-9,4.22642e-10],[.124,.0124,5.07171e-9,-1.60604e-9],[.186,.0123999,-1.90189e-8,6.00152e-9],[.248,.0124002,7.10039e-8,-2.24e-8],[.31,.0123992,-2.64997e-7,8.35986e-8],[.372,.0124029,9.88983e-7,-3.11994e-7],[.434,.0123893,-369093e-11,-4.35621e-7],[.4958,.0123198,-102252e-10,-3.45523e-7],[.5571,.0121916,-154081e-10,-5.82288e-7],[.6176,.0119938,-241424e-10,-5.25327e-7],[.6769,.011713,-320223e-10,-5.16405e-7],[.7346,.0113541,-397684e-10,-6.09052e-7],[.7903,.0109107,-489042e-10,-104739e-11],[.8435,.0103431,-64615e-9,-1.40374e-9],[.8936,.00969686,-64636e-9,-8547e-9],[.9394,.00840947,-192841e-9,-42106e-10],[.9761,.00616527,-256e-6,-42106e-10],[1,.00328947,-319159e-9,-42106e-10]],Vm=.8487,qm=1.3523,Hm=qh/5,Wm=1/Hm,Ym=18,Zm=function(e,t){return e[0]+t*(e[1]+t*(e[2]+t*e[3]))};const Jm={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.long0=this.long0||0,this.es=0,this.title=this.title||"Robinson"},forward:function(e){var t=Ig(e.x-this.long0),n=Math.abs(e.y),r=Math.floor(n*Hm);r<0?r=0:r>=Ym&&(r=17);var i={x:Zm(Fm[r],n=qh*(n-Wm*r))*t,y:Zm(zm[r],n)};return e.y<0&&(i.y=-i.y),i.x=i.x*this.a*Vm+this.x0,i.y=i.y*this.a*qm+this.y0,i},inverse:function(e){var t={x:(e.x-this.x0)/(this.a*Vm),y:Math.abs(e.y-this.y0)/(this.a*qm)};if(t.y>=1)t.x/=Fm[18][0],t.y=e.y<0?-Fh:Fh;else{var n=Math.floor(t.y*Ym);for(n<0?n=0:n>=Ym&&(n=17);;)if(zm[n][0]>t.y)--n;else{if(!(zm[n+1][0]<=t.y))break;++n}var r=zm[n],i=5*(t.y-r[0])/(zm[n+1][0]-r[0]);i=function(e,t,n,r){for(var i=t;r;--r){var o=e(i);if(i-=o,Math.abs(o)1e10)throw new Error;if(this.radius_g=1+this.radius_g_1,this.C=this.radius_g*this.radius_g-1,0!==this.es){var e=1-this.es,t=1/e;this.radius_p=Math.sqrt(e),this.radius_p2=e,this.radius_p_inv2=t,this.shape="ellipse"}else this.radius_p=1,this.radius_p2=1,this.radius_p_inv2=1,this.shape="sphere";this.title||(this.title="Geostationary Satellite View")},forward:function(e){var t,n,r,i,o=e.x,a=e.y;if(o-=this.long0,"ellipse"===this.shape){a=Math.atan(this.radius_p2*Math.tan(a));var s=this.radius_p/Df(this.radius_p*Math.cos(a),Math.sin(a));if(n=s*Math.cos(o)*Math.cos(a),r=s*Math.sin(o)*Math.cos(a),i=s*Math.sin(a),(this.radius_g-n)*n-r*r-i*i*this.radius_p_inv2<0)return e.x=Number.NaN,e.y=Number.NaN,e;t=this.radius_g-n,this.flip_axis?(e.x=this.radius_g_1*Math.atan(r/Df(i,t)),e.y=this.radius_g_1*Math.atan(i/t)):(e.x=this.radius_g_1*Math.atan(r/t),e.y=this.radius_g_1*Math.atan(i/Df(r,t)))}else"sphere"===this.shape&&(t=Math.cos(a),n=Math.cos(o)*t,r=Math.sin(o)*t,i=Math.sin(a),t=this.radius_g-n,this.flip_axis?(e.x=this.radius_g_1*Math.atan(r/Df(i,t)),e.y=this.radius_g_1*Math.atan(i/t)):(e.x=this.radius_g_1*Math.atan(r/t),e.y=this.radius_g_1*Math.atan(i/Df(r,t))));return e.x=e.x*this.a,e.y=e.y*this.a,e},inverse:function(e){var t,n,r,i,o=-1,a=0,s=0;if(e.x=e.x/this.a,e.y=e.y/this.a,"ellipse"===this.shape){this.flip_axis?(s=Math.tan(e.y/this.radius_g_1),a=Math.tan(e.x/this.radius_g_1)*Df(1,s)):(a=Math.tan(e.x/this.radius_g_1),s=Math.tan(e.y/this.radius_g_1)*Df(1,a));var l=s/this.radius_p;if(t=a*a+l*l+o*o,(r=(n=2*this.radius_g*o)*n-4*t*this.C)<0)return e.x=Number.NaN,e.y=Number.NaN,e;i=(-n-Math.sqrt(r))/(2*t),o=this.radius_g+i*o,a*=i,s*=i,e.x=Math.atan2(a,o),e.y=Math.atan(s*Math.cos(e.x)/o),e.y=Math.atan(this.radius_p_inv2*Math.tan(e.y))}else if("sphere"===this.shape){if(this.flip_axis?(s=Math.tan(e.y/this.radius_g_1),a=Math.tan(e.x/this.radius_g_1)*Math.sqrt(1+s*s)):(a=Math.tan(e.x/this.radius_g_1),s=Math.tan(e.y/this.radius_g_1)*Math.sqrt(1+a*a)),t=a*a+s*s+o*o,(r=(n=2*this.radius_g*o)*n-4*t*this.C)<0)return e.x=Number.NaN,e.y=Number.NaN,e;i=(-n-Math.sqrt(r))/(2*t),o=this.radius_g+i*o,a*=i,s*=i,e.x=Math.atan2(a,o),e.y=Math.atan(s*Math.cos(e.x)/o)}return e.x=e.x+this.long0,e},names:["Geostationary Satellite View","Geostationary_Satellite","geos"]};var iy=1.340264,oy=-.081106,ay=893e-6,sy=.003796,ly=Math.sqrt(3)/2;const cy={init:function(){this.es=0,this.long0=void 0!==this.long0?this.long0:0},forward:function(e){var t=Ig(e.x-this.long0),n=e.y,r=Math.asin(ly*Math.sin(n)),i=r*r,o=i*i*i;return e.x=t*Math.cos(r)/(ly*(iy+3*oy*i+o*(7*ay+9*sy*i))),e.y=r*(iy+oy*i+o*(ay+sy*i)),e.x=this.a*e.x+this.x0,e.y=this.a*e.y+this.y0,e},inverse:function(e){e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a;var t,n,r,i,o=e.y;for(i=0;i<12&&(o-=r=(o*(iy+oy*(t=o*o)+(n=t*t*t)*(ay+sy*t))-e.y)/(iy+3*oy*t+n*(7*ay+9*sy*t)),!(Math.abs(r)<1e-9));++i);return n=(t=o*o)*t*t,e.x=ly*e.x*(iy+3*oy*t+n*(7*ay+9*sy*t))/Math.cos(o),e.y=Math.asin(Math.sin(o)/ly),e.x=Ig(e.x+this.long0),e},names:["eqearth","Equal Earth","Equal_Earth"]};var uy=1e-10;function dy(e){var t,n,r,i=Ig(e.x-(this.long0||0)),o=e.y;return t=this.am1+this.m1-kf(o,n=Math.sin(o),r=Math.cos(o),this.en),n=r*i/(t*Math.sqrt(1-this.es*n*n)),e.x=t*Math.sin(n),e.y=this.am1-t*Math.cos(n),e.x=this.a*e.x+(this.x0||0),e.y=this.a*e.y+(this.y0||0),e}function py(e){var t,n,r,i;if(e.x=(e.x-(this.x0||0))/this.a,e.y=(e.y-(this.y0||0))/this.a,n=Df(e.x,e.y=this.am1-e.y),i=Tf(this.am1+this.m1-n,this.es,this.en),(t=Math.abs(i))uy?(e.x=n*Math.sin(t=r*Math.cos(i)/n),e.y=this.cphi1-n*Math.cos(t)):e.x=e.y=0,e.x=this.a*e.x+(this.x0||0),e.y=this.a*e.y+(this.y0||0),e}function gy(e){var t,n;e.x=(e.x-(this.x0||0))/this.a,e.y=(e.y-(this.y0||0))/this.a;var r=Df(e.x,e.y=this.cphi1-e.y);if(n=this.cphi1+this.phi1-r,Math.abs(n)>Fh)throw new Error;return t=Math.abs(Math.abs(n)-Fh)<=uy?0:r*Math.atan2(e.x,e.y)/Math.cos(n),e.x=Ig(t+(this.long0||0)),e.y=rm(n),e}const fy={init:function(){var e;if(this.phi1=this.lat1,Math.abs(this.phi1)=Fh?this.cphi1=0:this.cphi1=1/Math.tan(this.phi1),this.inverse=gy,this.forward=hy)},names:["bonne","Bonne (Werner lat_1=90)"]};lf.defaultDatum="WGS84",lf.Proj=Wg,lf.WGS84=new lf.Proj("WGS84"),lf.Point=Sf,lf.toPoint=tf,lf.defs=fg,lf.nadgrid=function(e,t){var n=new DataView(t),r=function(e){var t=e.getInt32(8,!1);if(11===t)return!1;t=e.getInt32(8,!0),11!==t&&console.warn("Failed to detect nadgrid endian-ness, defaulting to little-endian");return!0}(n),i=function(e,t){return{nFields:e.getInt32(8,t),nSubgridFields:e.getInt32(24,t),nSubgrids:e.getInt32(40,t),shiftType:Fg(e,56,64).trim(),fromSemiMajorAxis:e.getFloat64(120,t),fromSemiMinorAxis:e.getFloat64(136,t),toSemiMajorAxis:e.getFloat64(152,t),toSemiMinorAxis:e.getFloat64(168,t)}}(n,r),o=function(e,t,n){for(var r=176,i=[],o=0;o2?(document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("GPelementHidden","GPelementVisible"),document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("gpf-hidden","gpf-visible")):(document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden")),t.onAutoCompleteSearchText(e))})),r.addEventListener("keydown",(function(e){var n=e.which||e.keyCode;13===n&&e.preventDefault();var r=document.getElementById(t._addUID("GPautocompleteResults"));if(r){var i=r.getElementsByClassName("GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current"),o=r.getElementsByClassName("GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine"),a=o.length;if(a){var s=null;if(i.length)s=i[0];else if((s=o[0]).className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current",s.style.color="#000000",s.style["background-color"]="#CEDBEF",13!==n)return;var l=parseInt(ju.index(s.id),10),c=l===a-1?o[0]:o[l+1],u=0===l?o[a-1]:o[l-1];switch(s.style["background-color"]="",s.style.color="",u.style["background-color"]="",u.style.color="",c.style["background-color"]="",c.style.color="",n){case 38:s.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine",u.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current",u.style.color="#000000",u.style["background-color"]="#CEDBEF",s.scrollIntoView();break;case 40:s.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine",c.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current",c.style.color="#000000",c.style["background-color"]="#CEDBEF",s.scrollIntoView();break;case 13:e.preventDefault(),s.click(e)}s.focus()}}})),n.appendChild(r),n},_createSearchResetElement:function(){var e=this,t=document.createElement("button");return t.id=this._addUID("GPsearchInputReset"),t.className="GPshowOpen GPsearchInputReset gpf-btn gpf-btn-icon-reset gpf-btn-icon-search-reset fr-btn fr-btn--secondary gpf-btn--secondary",t.setAttribute("aria-label","Supprimer la recherche"),t.addEventListener("click",(function(t){document.getElementById(e._addUID("GPsearchInputText")).value="",document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),e.onSearchResetClick()})),t},_createButtonsElement:function(){var e=document.createElement("div");return e.className="GPbuttonsContainer",e},_createFirstLineWrapper:function(){var e=document.createElement("div");return e.className="GPsearchFirstLineWrapper",e},_createRadioContainer:function(){var e=document.createElement("div");return e.className="GPsearchRadioContainer",e},_createRadioElements:function(){var e=document.createElement("div");e.className="GPsearchRadioElements";var t=document.createElement("div");t.className="GPsearchSplitChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w";var n=document.createElement("input");n.id=this._addUID("GPsearchSplitLocations"),n.type="radio",n.name="GPsearchSplit",n.value="address",n.checked=!0,t.appendChild(n);var r=document.createElement("label");r.className="gpf-label fr-label",r.htmlFor=this._addUID("GPsearchSplitLocations"),r.title="Adresses",r.innerHTML="Adresses",t.appendChild(r),n.addEventListener?n.addEventListener("change",(function(){n.checked?(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.add("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.remove("gpf-hidden","GPelementHidden")):(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.add("gpf-hidden","GPelementHidden"))})):n.attachEvent&&n.attachEvent("onchange",(function(){n.checked?(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.add("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.remove("gpf-hidden","GPelementHidden")):(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.add("gpf-hidden","GPelementHidden"))}));var i=document.createElement("div");i.className="GPsearchSplitChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w";var o=document.createElement("input");o.id=this._addUID("GPsearchSplitData"),o.type="radio",o.name="GPsearchSplit",o.value="data",i.appendChild(o);var a=document.createElement("label");return a.className="gpf-label fr-label",a.htmlFor=this._addUID("GPsearchSplitData"),a.title="Cartes et données",a.innerHTML="Cartes et données",i.appendChild(a),o.addEventListener?o.addEventListener("change",(function(){o.checked?(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.add("gpf-hidden","GPelementHidden")):(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.add("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.remove("gpf-hidden","GPelementHidden"))})):o.attachEvent&&o.attachEvent("onchange",(function(){o.checked?(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.remove("gpf-hidden","GPelementHidden")):(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.add("gpf-hidden","GPelementHidden"))})),e.appendChild(t),e.appendChild(i),[e,n,o]},_createShowAdvancedSearchElement:function(){var e=this,t=document.createElement("span");return t.id=this._addUID("GPshowAdvancedSearch"),t.className="GPshowOpen GPshowAdvancedSearch",t.innerText="Recherche avancée",t.setAttribute("tabindex","0"),t.setAttribute("aria-pressed",!1),t.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n);var r="#GPsearchInput-"+e._uid;n?(document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("gpf-visible","gpf-hidden"),document.querySelector(r+" input").disabled=!1,document.querySelector(r+" .GPsearchInputReset")&&(document.querySelector(r+" .GPsearchInputReset").disabled=!1),yu()&&(document.querySelector("#GPshowSearchEnginePicto-"+e._uid).disabled=!1)):(document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("GPelementHidden","GPelementVisible"),document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("gpf-hidden","gpf-visible"),document.querySelector(r+" input").disabled=!0,document.querySelector(r+" .GPsearchInputReset")&&(document.querySelector(r+" .GPsearchInputReset").disabled=!0),yu()&&(document.querySelector("#GPshowSearchEnginePicto-"+e._uid).disabled=!0)),document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(e._addUID("GPcoordinateSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPcoordinateSearchPanel")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(e._addUID("GPshowSearchByCoordinate")).setAttribute("aria-pressed",!1)})),t},_createShowGeolocateElement:function(){var e=this,t=document.createElement("button");return t.id=this._addUID("GPshowGeolocate"),t.className="GPshowOpen GPshowAdvancedToolPicto GPshowGeolocate gpf-btn gpf-btn-icon-search-geolocate fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w",t.title="Activer la géolocalisation",t.setAttribute("tabindex","0"),t.setAttribute("aria-pressed",!1),t.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowSearchGeolocateClick(t)})),t},_createShowSearchByCoordinateElement:function(){var e=this,t=document.createElement("button");return t.id=this._addUID("GPshowSearchByCoordinate"),t.className="GPshowOpen GPshowAdvancedToolPicto GPshowSearchByCoordinate gpf-btn gpf-btn-icon-search-coordinate fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w",t.title="Ouvrir la recherche par coordonnées",t.setAttribute("tabindex","0"),t.setAttribute("aria-pressed",!1),t.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n);var r="#GPsearchInput-"+e._uid;n?(document.getElementById(e._addUID("GPcoordinateSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPcoordinateSearchPanel")).classList.replace("gpf-visible","gpf-hidden"),document.querySelector(r+" input").disabled=!1,document.querySelector(r+" .GPsearchInputReset").disabled=!1,yu()&&(document.querySelector("#GPshowSearchEnginePicto-"+e._uid).disabled=!1)):(document.getElementById(e._addUID("GPcoordinateSearchPanel")).classList.replace("GPelementHidden","GPelementVisible"),document.getElementById(e._addUID("GPcoordinateSearchPanel")).classList.replace("gpf-hidden","gpf-visible"),document.querySelector(r+" input").disabled=!0,document.querySelector(r+" .GPsearchInputReset").disabled=!0,yu()&&(document.querySelector("#GPshowSearchEnginePicto-"+e._uid).disabled=!0)),document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(e._addUID("GPshowAdvancedSearch")).setAttribute("aria-pressed",!1)})),t},_createAdvancedSearchPanelElement:function(){var e=document.createElement("dialog");return e.id=this._addUID("GPadvancedSearchPanel"),e.className="GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal",e},_createAdvancedSearchPanelDivElement:function(){var e=document.createElement("div");return e.className="gpf-panel__body fr-modal__body",e},_createGeocodeResultsElement:function(){var e=document.createElement("dialog");return e.id=this._addUID("GPgeocodeResultsList"),e.className="GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal",e.appendChild(this._createGeocodeResultsHeaderElement()),e},_createGeocodeResultsDivElement:function(){var e=document.createElement("div");return e.className="gpf-panel__body fr-modal__body",e},_createAutoCompleteElement:function(){var e=document.createElement("div");return e.id=this._addUID("GPautoCompleteList"),e.className="GPautoCompleteList GPelementHidden gpf-panel fr-modal gpf-hidden ",e},_createCoordinateSearchPanelElement:function(){var e=document.createElement("dialog");return e.id=this._addUID("GPcoordinateSearchPanel"),e.className="GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal",e},_createCoordinateSearchPanelDivElement:function(){var e=document.createElement("div");return e.className="gpf-panel__body fr-modal__body",e},_createAutoCompleteListElement:function(){var e=this,t=document.createElement("div");return t.id=this._addUID("GPautocompleteResults"),t.className="",t.addEventListener?t.addEventListener("click",(function(t){document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden")}),!1):t.attachEvent&&t.attachEvent("onclick",(function(t){document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden")})),t},_createAutoCompletedLocationContainer:function(){var e=document.createElement("select");return e.id=this._addUID("GPautocompleteResultsLocation"),e.className="GPelementHidden gpf-hidden gpf-select",e.size=20,e.autofocus=!0,e},_createAutoCompletedLocationTitleElement:function(){var e=document.getElementById(this._addUID("GPautocompleteResultsLocation")),t=document.createElement("option");t.className="GPlabel GPlabelTitle gpf-label fr-label",t.innerHTML="Lieux et adresses",e.appendChild(t)},_createAutoCompletedLocationElement:function(e,t){var n=this,r=document.getElementById(this._addUID("GPautocompleteResultsLocation")),i=document.createElement("option");i.id=this._addUID("AutoCompletedLocation_"+t),i.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine";var o=Nh.getSuggestedLocationFreeform(e);i.innerHTML=o,i.title=o,i.addEventListener?i.addEventListener("click",(function(e){n.onAutoCompletedResultsItemClick(e)}),!1):i.attachEvent&&i.attachEvent("onclick",(function(e){n.onAutoCompletedResultsItemClick(e)})),r.appendChild(i)},_createSearchedSuggestContainer:function(){var e=document.createElement("select");return e.id=this._addUID("GPautocompleteResultsSuggest"),e.className="GPelementHidden gpf-hidden gpf-select",e.size=6,e.autofocus=!0,e},_createSearchedSuggestTitleElement:function(){var e=document.getElementById(this._addUID("GPautocompleteResultsSuggest")),t=document.createElement("option");t.className="GPlabel GPlabelTitle gpf-label fr-label",t.innerHTML="Cartes et données",e.appendChild(t)},_createSearchedSuggestElement:function(e,t){var n=this,r=document.getElementById(this._addUID("GPautocompleteResultsSuggest")),i=document.createElement("option");i.id=this._addUID("AutoCompletedSuggest_"+t),i.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine",i.innerHTML=e.title+" ("+e.service+")",i.dataset.layer=e.name,i.title="".concat(e.description," (nom technique : ").concat(e.name,")"),i.addEventListener?i.addEventListener("click",(function(e){n.onSearchedResultsItemClick(e)}),!1):i.attachEvent&&i.attachEvent("onclick",(function(e){n.onSearchedResultsItemClick(e)})),r.appendChild(i)},_createAdvancedSearchPanelHeaderElement:function(){var e=this,t=document.createElement("div");t.className="GPpanelHeader gpf-panel__header fr-modal__header";var n=document.createElement("div");n.className="GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w",n.innerHTML="Recherche avancée",t.appendChild(n);var r=document.createElement("button");r.id=this._addUID("GPadvancedSearchClose"),r.className="GPpanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w",r.title="Fermer la recherche avancée",r.addEventListener?r.addEventListener("click",(function(){var t="#GPsearchInput-"+e._uid;document.querySelector(t+" input").disabled=!1,document.querySelector(t+" .GPsearchInputReset")&&(document.querySelector(t+" .GPsearchInputReset").disabled=!1),yu()&&(document.querySelector("#GPshowSearchEnginePicto-"+e._uid).disabled=!1),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(e._addUID("GPshowAdvancedSearch")).setAttribute("aria-pressed",!1),document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("gpf-visible","gpf-hidden")}),!1):r.attachEvent&&r.attachEvent("onclick",(function(){var t="#GPsearchInput-"+e._uid;document.querySelector(t+" input").disabled=!1,document.querySelector(t+" .GPsearchInputReset")&&(document.querySelector(t+" .GPsearchInputReset").disabled=!1),yu()&&(document.querySelector("#GPshowSearchEnginePicto-"+e._uid).disabled=!1),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(e._addUID("GPshowAdvancedSearch")).setAttribute("aria-pressed",!1),document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("gpf-visible","gpf-hidden")}));var i=document.createElement("span");return i.className="GPelementHidden gpf-visible",i.innerText="Fermer",r.appendChild(i),t.appendChild(r),t},_createAdvancedSearchPanelFormElement:function(e){var t=this,n=document.createElement("form");n.id=this._addUID("GPadvancedSearchForm"),n.className="gpf-panel__content fr-modal__content",n.addEventListener("submit",(function(e){e.preventDefault();for(var n=[],r="#GPadvancedSearchFilters-"+t._uid,i=document.querySelectorAll(r+" > div > div > input,select#category"),o=0;o\n \n \n \n \n \n \n \n \n \n \n
\n ',e},_setCoordinateSearchLatLabelElement:function(e){document.getElementById(this._addUID("GPcoordinateSearchLatLabel"))&&document.getElementById(this._addUID("GPcoordinateSearchLatLabel")).remove();var t=document.createElement("label");return t.className="GPcoordinateSearchLabel gpf-label fr-label",t.id=this._addUID("GPcoordinateSearchLatLabel"),t.htmlFor="coordinate-lat",t.innerHTML="Geographical"===e?"Latitude :":"X :",t},_setCoordinateSearchLatInputElement:function(e){document.getElementById(this._addUID("GPcoordinateSearchLatInput"))&&document.getElementById(this._addUID("GPcoordinateSearchLatInput")).remove(),document.getElementById(this._addUID("GPcoordinateSearchLatDMS"))&&document.getElementById(this._addUID("GPcoordinateSearchLatDMS")).remove();var t=document.createElement("input");switch(t.id=this._addUID("GPcoordinateSearchLatInput"),t.className="GPcoordinateSearchInput gpf-input fr-input",t.title="Saisir des coordonnées",t.name="coordinate-lat",t.type="number",t.step="any",t.required="",e){case"DMS":return t.title+=" géographiques (en sexa)",t.className="GPelementHidden gpf-hidden",this._setCoordinateSearchLatDMSElement();case"DEC":t.title+=" géographiques (en decimal)",t.min="-180",t.max="180";break;case"M":t.title+=" cartésiennes (en mètre)";break;case"KM":t.title+=" cartésiennes (en kilomètre)"}return t},_setCoordinateSearchLatDMSElement:function(){var e=document.createElement("div");return e.id=this._addUID("GPcoordinateSearchLatDMS"),e.innerHTML='\n
\n \n \n \n \n \n \n \n \n \n \n
\n ',e},_createCoordinateSearchSubmitElement:function(){var e=document.createElement("input");return e.type="submit",e.id=this._addUID("GPcoordinateSearchSubmit"),e.className="GPsubmit gpf-btn gpf-btn-icon-submit fr-btn fr-btn--secondary gpf-btn--secondary",e.value="Chercher",e}};const xy=My;function Gy(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o,a,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,i=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(c)throw i}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Ly(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ly(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ly(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);na&&(By.trace("zoom level max..."),r=a),By.trace("zoom",r),r}},{key:"_onResultMarkerSelect",value:function(e){var t=this.getMap(),r="";if("string"!=typeof e)if("GeocodedLocation"===e.service){r="
    ";var i=e.location.placeAttributes;for(var o in i)i.hasOwnProperty(o)&&"trueGeometry"!==o&&"extraFields"!==o&&"houseNumberInfos"!==o&&"_count"!==o&&(r+="
  • ",r+=''+o.toUpperCase()+" : ",r+=i[o],r+="
  • ");r+="
"}else r="SuggestedLocation"===e.service?Nh.getSuggestedLocationFreeform(e.location):"sans informations.";else r=e;this._popupContent.innerHTML=r,this._popupOverlay?this._popupOverlay.setPosition(this._marker.getPosition()):(this._popupOverlay=new(n())({element:this._popupDiv,positioning:"bottom-center",position:this._marker.getPosition(),offset:[0,-42]}),t.addOverlay(this._popupOverlay))}},{key:"_setSystem",value:function(e){if("object"===ky(e))if(e.crs)if(e.label||(By.warn("crs label not defined, use crs code by default."),e.label=e.crs),e.type||(By.warn("type srs not defined, use 'Metric' by default."),e.type="Metric"),Py.loadByName(e.crs),(0,Dr.get)(e.crs)){for(var t=0;t latitude : "+i[1];e._setMarker(n,o)}e.dispatchEvent({type:"searchengine:geolocation:click",coordinates:n})}}))}},{key:"onShowSearchByCoordinateClick",value:function(){var e=null,t=null;if(this._coordinateSearchLngInput&&"DIV"===this._coordinateSearchLngInput.nodeName&&this._coordinateSearchLatInput&&"DIV"===this._coordinateSearchLatInput.nodeName?(e=this._getCoordinateSearchDMS(this._coordinateSearchLngInput),t=this._getCoordinateSearchDMS(this._coordinateSearchLatInput)):(e=this._coordinateSearchLngInput.value,t=this._coordinateSearchLatInput.value),e&&t){var n=[e,t],r=this.getMap().getView().getProjection().getCode();"EPSG:4326"!==r&&(n=(0,Dr.transform)(n,"EPSG:4326",r)),isNaN(n[0])||isNaN(n[1])?this._setMarker():(this._setPosition(n,10),this._displayMarker&&this._setMarker(n,"sans information"),this.dispatchEvent({type:"searchengine:coordinates:click",coordinates:n}))}}},{key:"_getCoordinateSearchDMS",value:function(e){if(e&&"DIV"===e.nodeName){var t=e.querySelectorAll("[name]");if(t){var n=Oh.toInteger(t[0].value),r=Oh.toInteger(t[1].value),i=Oh.toInteger(t[2].value),o=t[3].options[t[3].selectedIndex].text;if(!(n&&r&&i&&o))return;return Oh.dmsToDecimal(n,r,i,o)}}}},{key:"onAutoCompleteInputClick",value:function(){var e=document.getElementById("GPsearchInputText-"+this._uid);e&&!e.disabled&&e.value.length>2&&this._displaySuggestedLocation()}},{key:"onAutoCompleteSearchText",value:function(e){var t=e.target.value;if(t)if(this._currentGeocodingLocation=t,t.length<3)this._clearSuggestedLocation();else{var n=this.options.autocompleteOptions.triggerGeocode,r=this.options.autocompleteOptions.triggerDelay,i=this.options.autocompleteOptions.maximumEntries,o=this.options.autocompleteOptions.prettifyResults,a=this;this._requestAutoComplete({text:t,onSuccess:function(e){if(By.log("request from AutoComplete",e),e){a._suggestedLocations=e.suggestedLocations,a._locationsToBeDisplayed=[];for(var t=0;t=0;t--){var n=e[t];("StreetAddress"===n.type&&"municipality"===n.kind||"PositionOfInterest"===n.type&&"lieu-dit habité"===n.poiType[0]&&"zone d'habitation"===n.poiType[1])&&e.splice(t,1),"PositionOfInterest"!==n.type||"administratif"!==n.poiType[0]||"département"!==n.poiType[1]&&"région"!==n.poiType[1]||(n.fullText=n.fullText+", "+n.poiType[1])}}},{key:"_hideSuggestedLocation",value:function(){this._autocompleteContainer&&(this._autocompleteContainer.classList.replace("GPelementVisible","GPelementHidden"),this._autocompleteContainer.classList.replace("gpf-visible","gpf-hidden"))}},{key:"_displaySuggestedLocation",value:function(){this._autocompleteContainer&&(this._autocompleteContainer.classList.replace("GPelementHidden","GPelementVisible"),this._autocompleteContainer.classList.replace("gpf-hidden","gpf-visible"))}},{key:"_clearGeocodedLocation",value:function(){if(this._geocodedLocations=[],this._geocodedContainer)for(;this._geocodedContainer.firstChild;)this._geocodedContainer.removeChild(this._geocodedContainer.firstChild)}}],i&&Ty(r.prototype,i),o&&Ty(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,i,o}(Gu);Object.assign(Fy.prototype,xy),Object.assign(Fy.prototype,gu);const zy=Fy;function Vy(e){return Vy="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vy(e)}window.ol&&window.ol.control&&(window.ol.control.SearchEngine=Fy);var qy={_addUID:function(e){return this._uid?e+"-"+this._uid:e},_createMainContainerElement:function(){var e=document.createElement("div");return e.id=this._addUID("GPmousePosition"),e.className="GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen",e},_createShowMousePositionPictoElement:function(e){var t=this,n=document.createElement("button"),r=document.createElement("span");return n.appendChild(r),n.id=this._addUID("GPshowMousePositionPicto"),n.className="GPshowOpen GPshowAdvancedToolPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-position fr-btn fr-btn--tertiary",n.setAttribute("aria-label","Afficher les coordonnées du curseur"),n.setAttribute("tabindex","0"),n.setAttribute("aria-pressed",!1),n.setAttribute("type","button"),n.addEventListener?n.addEventListener("click",(function(e){var n="true"===e.target.ariaPressed;e.target.setAttribute("aria-pressed",!n),t.onShowMousePositionClick(e)})):n.attachEvent&&n.attachEvent("onclick",(function(e){var n="true"===e.target.ariaPressed;e.target.setAttribute("aria-pressed",!n),t.onShowMousePositionClick(e)})),n},_createMousePositionPanelElement:function(){var e=document.createElement("dialog");return e.id=this._addUID("GPmousePositionPanel"),e.className="GPpanel gpf-panel fr-modal",e},_createMousePositionPanelDivElement:function(){var e=document.createElement("div");return e.className="gpf-panel__body fr-modal__body",e},_createMapCenter:function(){var e=document.createElement("div");return e.id="GPmapCenter",e.className="",e},_createMousePositionPanelTitleElement:function(){var e=document.createElement("div");return e.className="GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w",e.id=this._addUID("GPmousePositionHeaderTitle"),e.innerHTML="Coordonnées",e},_createMousePositionPanelHeaderElement:function(){var e=document.createElement("div");return e.className="GPpanelHeader gpf-panel__header fr-modal__header",e},_createMousePositionPanelCloseElement:function(){var e=this,t=document.createElement("button");t.id=this._addUID("GPmousePositionPanelClose"),t.className="GPpanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w",t.title="Fermer le panneau",t.addEventListener?(t.addEventListener("click",(function(){document.getElementById(e._addUID("GPshowMousePositionPicto")).click()}),!1),t.addEventListener("keydown",(function(t){13===t.keyCode&&document.getElementById(e._addUID("GPshowMousePositionPicto")).click()}),!1)):t.attachEvent&&(t.attachEvent("onclick",(function(){document.getElementById(e._addUID("GPshowMousePositionPicto")).click()})),t.attachEvent("onkeydown",(function(t){13===t.keyCode&&document.getElementById(e._addUID("GPshowMousePositionPicto")).click()})));var n=document.createElement("span");return n.className="GPelementHidden gpf-visible",n.innerText="Fermer",t.appendChild(n),t},_createMousePositionPanelBasicElement:function(e,t,n,r){e=void 0===e||e,t=void 0===t||t,n=void 0!==n&&n;var i=document.createElement("div");return i.id=this._addUID("GPmousePositionBasicPanel"),i.classList.add("fr-mx-1w"),i.appendChild(this._createMousePositionPanelBasicCoordinateElement(t,n,r)),i.appendChild(this._createMousePositionPanelEditToolsElement(n)),i.appendChild(this._createMousePositionPanelBasicAltitudeElement(e)),i},_createCoordinateElement:function(e,t){var n=this;if(-1===["Lon","Lat"].indexOf(e))return[];var r=[],i=document.createElement("input");i.id=this._addUID("GPmousePosition"+e),i.title=!0===t?"Cliquer pour saisir des coordonnées":"",i.readOnly=!0,t&&(i.addEventListener("click",(function(){n.onMousePositionEditModeClick(!0)})),i.addEventListener("change",(function(t){this.classList.remove("error"),n.validateExtentCoordinate(e,this.value,t)?this.classList.remove("error"):this.classList.add("error")}))),r.push(i);var o=document.createElement("span");return o.className="GPmousePositionUnits",r.push(o),r},_createDMSCoordinateElement:function(e,t){if(-1===["Lon","Lat"].indexOf(e))return[];var n=this,r=[],i=document.createElement("input");i.id=this._addUID("GPmousePosition"+e+"Degrees"),i.className="GPSexagesimal",i.setAttribute("name","degrees"),i.title=!0===t?"Cliquer pour saisir des coordonnées":"",i.readOnly=!0,i.dataset.min=0,i.dataset.max="Lon"===e?180:90,t&&(i.addEventListener("click",(function(){n.onMousePositionEditModeClick(!0)})),i.addEventListener("change",(function(){this.classList.remove("error"),n._checkDMSDegrees(e,this)?this.classList.remove("error"):this.classList.add("error")}))),r.push(i);var o=document.createElement("span");o.className="GPmousePositionSexagesimalLabel",o.innerHTML="°",r.push(o);var a=document.createElement("input");a.id=this._addUID("GPmousePosition"+e+"Minutes"),a.className="GPSexagesimal",a.setAttribute("name","minutes"),a.title=!0===t?"Cliquer pour saisir des coordonnées":"",a.readOnly=!0,a.dataset.min=0,a.dataset.max=59,t&&(a.addEventListener("click",(function(){n.onMousePositionEditModeClick(!0)})),a.addEventListener("change",(function(){this.classList.remove("error"),n._checkDMSElement(this)?this.classList.remove("error"):this.classList.add("error")}))),r.push(a);var s=document.createElement("span");s.className="GPmousePositionSexagesimalLabel",s.innerHTML="'",r.push(s);var l=document.createElement("input");l.id=this._addUID("GPmousePosition"+e+"Seconds"),l.className="GPSexagesimalsec",l.setAttribute("name","seconds"),l.title=!0===t?"Cliquer pour saisir des coordonnées":"",l.readOnly=!0,l.dataset.min=0,l.dataset.max=59,t&&(l.addEventListener("click",(function(){n.onMousePositionEditModeClick(!0)})),l.addEventListener("change",(function(){this.classList.remove("error"),n._checkDMSElement(this,!0)?this.classList.remove("error"):this.classList.add("error")}))),r.push(l);var c=document.createElement("span");c.className="GPmousePositionSexagesimalLabel",c.innerHTML="''",r.push(c);var u=document.createElement("select");u.id=this._addUID("GPmousePosition"+e+"Direction"),u.className="GPmousePositionDirection",u.setAttribute("name","direction"),u.disabled=!0;var d=document.createElement("option");d.value="Lon"===e?"E":"N",d.innerHTML="Lon"===e?"E":"N",u.appendChild(d);var p=document.createElement("option");return p.value="Lon"===e?"O":"S",p.innerHTML="Lon"===e?"O":"S",u.appendChild(p),r.push(u),r},_createMousePositionPanelBasicCoordinateElement:function(e,t,n){var r=document.createElement("div");r.id=this._addUID("GPmousePositionCoordinate"),r.style.display=e?"block":"none";var i=document.createElement("div");i.classList.add("fr-mb-1w");var o=document.createElement("span");o.className="GPmousePositionLabel",o.id=this._addUID("GPmousePositionLatLabel"),o.innerHTML="Latitude : ",i.appendChild(o);var a,s=document.createElement("span");s.id=this._addUID("GPmousePositionLatCoordinate"),a="DMS"===n?this._createDMSCoordinateElement("Lat",t):this._createCoordinateElement("Lat",t);for(var l=0;l=o&&i<=a},_checkDMSDegrees:function(e,t){if(isNaN(t.value))return!1;var n=parseFloat(t.value);if((0|n)!==n)return!1;var r=Number(t.dataset.min),i=Number(t.dataset.max);if(ni)return!1;var o=document.getElementById(this._addUID("GPmousePosition"+e+"Minutes")),a=document.getElementById(this._addUID("GPmousePosition"+e+"Seconds"));return n>=i?(o.dataset.max=0,a.dataset.max=0):(o.dataset.max=59,a.dataset.max=59.9999),!0},GPdisplayCoords:function(e){if(e){var t=document.getElementById(this._addUID("GPmousePositionLonLabel")),n=document.getElementById(this._addUID("GPmousePositionLatLabel"));if(e.x||e.y?(n.innerHTML="X : ",t.innerHTML="Y : "):e.e||e.n?(n.innerHTML="E : ",t.innerHTML="N : "):(n.innerHTML="Latitude : ",t.innerHTML="Longitude : "),"object"===Vy(e.lat)&&"object"===Vy(e.lng)){var r={lng:"Lon",lat:"Lat"},i=["Degrees","Minutes","Seconds"];for(var o in r)for(var a=0;aNumber(t.dataset.max))return null;var i=document.getElementById(this._addUID("GPmousePosition"+e+"Direction")).value,o=document.getElementById(this._addUID("GPmousePosition"+e+"Minutes")),a=o.value;if(a&&(a=a.replace(",","."),Oh.isInteger(a))){var s=Oh.toInteger(a);s>=Number(o.dataset.min)&&s<=Number(o.dataset.max)&&(r+=s/60)}var l=document.getElementById(this._addUID("GPmousePosition"+e+"Seconds")),c=l.value;if(c){c=c.replace(",",".");var u=Oh.toFloat(c);u&&u>=Number(l.dataset.min)&&u<=Number(l.dataset.max)&&(r+=u/3600)}return"O"!==i&&"S"!==i||(r=-r),r}},{key:"locateDMSCoordinates",value:function(){var e=[this.getCoordinate("Lon"),this.getCoordinate("Lat")];if(null!==e[0]&&null!==e[1]){var t=this._currentProjectionSystems.crs;if(t){var n=this.getMap().getView(),r=(0,Dr.transform)(e,t,n.getProjection());n.setCenter(r),this._markerOverlay&&!this._hideMarker&&this._markerOverlay.setPosition(r)}else ev.log("ERROR : system crs not found")}}},{key:"locateCoordinates",value:function(){var e=document.getElementById(this._addUID("GPmousePositionLon")).value;if(e=e.replace(",","."),null!==(e=Oh.toFloat(e))){var t=document.getElementById(this._addUID("GPmousePositionLat")).value;if(t=t.replace(",","."),null!==(t=Oh.toFloat(t))){var n=this._currentProjectionSystems.crs;if(n){var r;r="Geographical"===this._currentProjectionSystems.type?[this.convert(e),this.convert(t)]:[this.convert(t),this.convert(e)];var i=(0,Dr.transform)(r,this._currentProjectionSystems.crs,"EPSG:4326"),o=this._currentProjectionSystems.geoBBox;if(o){var a=[o.left,o.bottom,o.right,o.top];if(i[0]a[2])return;if(i[1]a[3])return}var s=this.getMap().getView(),l=(0,Dr.transform)(r,n,s.getProjection());s.setCenter(l),this._markerOverlay&&!this._hideMarker&&this._markerOverlay.setPosition(l)}else ev.log("ERROR : system crs not found")}}}},{key:"onMousePositionEditModeLocateClick",value:function(){if(this.options.editCoordinates)if(this.editing){"DMS"===this._currentProjectionUnits?this.locateDMSCoordinates():this.locateCoordinates();var e=this.options.mapCenterCallback;if("function"==typeof e){var t=this.getMap().getView().getCenter();e.call(this,t)}}else this.onMousePositionEditModeClick(!0)}},{key:"onMousePositionProjectionSystemChange",value:function(e){var t=e.target.selectedIndex,n=e.target.options[t].value;this._setCurrentSystem(n)}},{key:"_setCurrentSystem",value:function(e){for(var t=null,n=0;ns.geoBBox.right||i[1]>s.geoBBox.top||i[2]i[2])||"Lon"===e&&(ni[3]))}}],i&&Yy(r.prototype,i),o&&Yy(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,i,o}(Gu);Object.assign(tv.prototype,Hy),Object.assign(tv.prototype,gu);const nv=tv;window.ol&&window.ol.control&&(window.ol.control.GeoportalMousePosition=tv);const rv=ol.Collection;var iv=__webpack_require__.n(rv);const ov=ol.geom,av=ol.events.condition,sv=ol.sphere;const lv={drawing_portail:[{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAClFBMVEUAAAD//////////////////////////////////////////////////////////fv/+fL//////////////////////////////////////////////////////////////////////////////////////v7//////fr/////+vL//////////////////Pj//////////////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7/////////////9+v/9ej/9+z/7tT/3q3/y3//v2D/uU//+O7/5L3/xW//piH/mQH/mAD//v7/79f/yXj/oxr/lwD/mQD//fv/58T/tkr/mQL//v3/58P/sTz/79b/tUf/x3X/mQP/5Lv/oRX/ng3/s0H/w2n/u1b/4rf/8Nr/9eb/7tX/pBv/x3P/8d7/3av/79j///7/zH//mgX/2qP//vz/9+3/wGH/qyz/6Mb/vFj/sj//7NH/wGL/rTP/6sr/+fH/yXf/oBP/37H/2aH/6sz/nw//oBT/0pD/+vT/9OX/uE7/pB3/y33/7ND//Pj/26b/mwj/nAn/sT7/w2r/zYL/8+P/ulT/mwb/5Lz/qCj/+/b/1JT/nQz/nQ3/9uj/w2j/mAH/9un/6sv/skH/lwH/3Kf/pB7/pR7/3Kj/nAj/y37/+/f/8t//mQT/rDD/rDH/1JX/7tb/4LT/pR//z4j/z4n/vFn/7dP/4rn//fq31ydlAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKnVAysoAAAMmSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oBAMCvLzcnOSJcTFGGHyklJFxSWlZYWF5WBQWFhWWlJcJCUJUcEoLSNbUVlVDZWFqqmuqqyQlZEGqZCTV6iprStDkQeqKKurrVGQlwMawMWTXN+ALg9S0VCfzMPFyCAorpjW2ASzvQwIYOymxjRFcUEGLqWa5pZCqONa27Ky2lqhji1saa5R4mJQVklpL4M6rKOzq7u7q7MD6uCy9hQVZQZVtZ5eML+woK+/KBkIivr7CiAivT1qqgzqGhPA3MKy7ImTksFg0sRssEMKCyZoqDNoak2GKJ8ydVoyFEybOgUiNllLk0F7+gwwp2zmrGQ4mDUT7KzCGdO1GZJTZkMUzJmLUDB3DkTB7JRkBp3p8yAK5i9AKFgwH6Jg3nQdBt2FiyD2LV5SBJMvWrIYIrZooS6Dnv5SCKesPQ2mIK0dEpyFS/X1GAwMly2H8FasXAWRX7VyBURk+TJDAwYj49VroAG3dt16oC1F69ethQbtmtXGRgwmphs2boKq2Lxl67ZtW7dshspv2rjB1ITBzFxn+44yeGTu3AmPzrId23XMzRg4LSwrdu2GJQdQkoQxd++qsLTgZGC0MrLes3cfZoLZv3ePtZEVMM0x2tjqHDh4CD3JHdp62M7eBpxqOR0cnY4cPYaaaI8dPeLk7MAJSfZyLq4Vx08UIqkoLDx5qsLNRQ6WMQTdPfasO42sYPOZsx6eiKzF6eXtc27HebiKwvM7zvl4e3EiZU5fv+TcC4icdTFX1M8XNXv7yyZfaoEpaLmULBuAIs/AEGivsrAd4ozCze0LVYICUeUZGIND+C63gTJQYVNbMV9oMJoBQBVh4clXroKC+uqV5PAIDHmgCsnIimv7Cgv3Xa+IlMQiDwzyqOiUG1Om3EiJjrLBpgDojBi7mxcu3LSLCcYqD1QRGzft1q1pcbE45IExH59w+3ZCvBUuBUBnJCYlJaI6AABB269xUXFElwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDM6MjIrMDA6MDB1WI3HAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACplBMVEUAAAD//////////////////////////////////////////////////////////fz/9/P//////////////////////////////////////////////////////////////////////////////////////v7//////Pr/////////////////////+/n//////////////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7/////////////8+3/8er/9O7/5dj/zrX/s4z/oHH/lmL/9fD/2MT/qX7/ejj/Zxz/Zhn/Zhr//v7/59z/rof/djL/ZBf/Zxv//fz/3Mr/k13/aBz/ZRn//f3/i1D/5tr/kVr/ZRj/rIP//v3/1sL/cy3/byf/jVX/pnn/aB3/mmf/077/6d7/8On/5tn/dzT/q4H/6+H/zbP/lmH/s43/ah//yK3/9O//oXL/gUP/3cz/m2n/jVT/5Nb/onP/hkn/4ND/9vL/rob/cSv/0Ln/x6r/Zxr/Yxb/pXn/8+7/4NH/cCj/ciz/vZz/+PX/7+f/lWH/eDT/sov/49X/+/n/ya//ayH/bCP/jFL/pnr/tJD/7ub/mWb/ZBb/aiD/18P/fj3/+vf/vp//bSX/bib/v5//pXj/8uv/yrD/eDX/eTb/y7H/bCL/soz/7OL/18T/g0b/hEb/v6D/cy7/wKH/9vP/5tv/jlX/59v/0rz/ejf/uJX/nGr/aR//nGv/g0X/1cD//PvyoJNrAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAA0JJREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/oBAICvLzcnOykyTExRhh8pJSRcUlpWWFheVgUFhYVlpSXCQlCVHBKC0jW1FZVV1TjgRqqqsqK2RlpEEq5OQVaivrygrLUUBhWV1lrYK8HNAALp6k+oZGNHmgisaG+iQeLkYGQXHF1KZ8mO2NZWUwtYX5TamK4oIMXErNLa0FEKGatvbMzPa2GoiSgtaWZiUuBmWV5I5GiHxnV3dPb29Pd1cnREVjR7KKMoOqWl9/IcTICROLkoCgaOIEiJWF/X1qqgzqGpPA3MKyycVgeaCK4slgTxXmT9JQZ9AUmAJRPnVaRRIUVEybChGbIqDJoDV9BpjTOHNWEhzMmgl2VuGM6VoMScmzwQrK5sxFKJg7pwysYHZyEoP29HkQE+YvQChYMB9iwrzp2gw6CxeBFRQsXlIEky9ashgcMoWLFuow6OotBXOWLV+xEqZg5Yrly8CalurpMugbrFoNMWLN2nUQ+XVr10AMWL3KQJ/B0Gj9BkhINm7ctBkkv3nTRqjAhvVGhgzGJlu2boMG7fYdO3ft2rljOzTot23dYmLMYGqmvXvPXmgE7i3bt69sLzQ69+7ZrW1mysBpblGx/0AjLLGBAITdeGB/hYU5JwOjpaHVwUOHMRPMkaMHrQwtgWmO0dpGO+VYAXqSK+g4bmtnDU61nPYOjgvaURNdYWP7Kkcne05Ispdzdqk4cbIGSUVhzanTFa7OcrCMIejmfnDTmQKEgoIzZw+6eyCyFqenl/e5PeVwIwrL95zz9vLkRMqcPr5J5y/AHFpYcPG8qK8Pavb2k026dBkaGo2XryTJ+qPIMzAE2KlcXbEN7IyCbR1XVQIDUOUZGIOC+a61VwMtKay+foMvJAjNAKCK0LCkm7dAIX3rZlJYOIY8UIVkRMXtI4WFR25XREhikQcGeWRU8p27d+8lR0VaY1MAdEa0bdr9+2m20UFY5YEqYmJrHzyojY3BIQ+M+bj4hw/j4yxxKQA6IyExMQHVAQBpWLIaKI0lIgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDQ6MDYrMDA6MDAh7rXQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACbVBMVEUAAAD/////////////////////////////////////////////////////////+/v/8vL//////////////////////////////////////////////////////////////////////////////////////v7/////+vr/////////////////////+Pj//////////////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7/////////////6+v/6Oj/7Oz/1NT/ra3/f3//YGD/T0//7u7/vb3/b2//ISH/AQH/AAD//v7/19f/eHj/Ghr/+/v/xMT/Skr/AgL//f3/w8P/PDz/1tb/R0f/dXX/AwP/u7v/FRX/DQ3/QUH/aWn/Vlb/t7f/2tr/5ub/1dX/Gxv/c3P/3t7/q6v/2Nj/BQX/o6P//Pz/7e3/YWH/LCz/xsb/WFj/Pz//0dH/YmL/MzP/ysr/8fH/d3f/ExP/sbH/oaH/zMz/Dw//FBT/kJD/9PT/5eX/Tk7/HR3/fX3/0ND/+Pj/pqb/CAj/CQn/Pj7/amr/goL/4+P/VFT/Bgb/vLz/KCj/9vb/lJT/DAz/aGj/6en/y8v/p6f/Hh7/qKj/fn7/9/f/39//BAT/MDD/MTH/lZX/tLT/Hx//iIj/iYn/WVn/09P/ubn/+vpgzcAPAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAu1JREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSUFSKCkuKhQShKiglFaRra0rLyiAAVUlJeVyspIg1TIyStUVlUXYIDqqkoFeTmgAVw8STW1BVhAbU0SDxcjg6C4YmpdPTYF9XWpiuKCDFxKlQ2NMLGm5szM5iYYr7GhUomLQVkluQXmsNa29o6O9rZWmINbklWUGVTVOrug3u/uKUwCgsKebmiAdHWqqTKoa/RCuVl9YHmgir4sqJZeDXUGTYEMCK9/wsQkKJg4oR8iliGgyaA1aTKEM2VqEhxMnQIRmzxJiyEpeRqEM30GQsGM6RCxaclJDNqTZkI4s2YjFMyeBRGbOUmbQWfOXAhn3vxCmHzh/HkQsblzdBh09RbAfJ0KU5AKC5kFeroM+gYLF0F4i5cshcgvXbIYIrJooYE+g6HRsuVQ9StWrgLaUrhq5QqowPJlRoYMxiar16yFCqxbv2Hjxg3r10G5a9esNjFmMDXT3rQZEYVbtiDYmzdpm5kycJpblG7dhi26t20ttTDnZGC0NLTavmMnpnzTju1WhpbANMdobaOdsisfXT5/w25bO2twquW0d3Dc04ymIr95j6OTPSck2cs5u5Tu3YeqYN/+UldnOVjGEHRz375yLbL8ugMH3T0QWYvT08v70ObDCPnDmw95e3lyImVOH9+knCMIBUdzRH19ULO3n2zSMXjibjyWJOuPIs/AEGCnMqcF6ox1LXNUAgNQ5RkYg4L5aprBGai+uYgvJAjNAKCK0LCk4ydACk4cTwoLx5AHqpCMKD0JDPKdp0ojJLHIA4M8Mir5dH//6eSoSGtsCoDOiLY9c+TIGdvoIKzyQBUxsRPPnp0YG4NDHhjzcfHnzsXHWeJSAHRGQmJiAqoDAOgCnVLAYqeOAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo0NDoxOSswMDowMBsMxacAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACf1BMVEUAAAD//////////////////////////////////////////////////////////P3/9Pn//////////////////////////////////////////////////////////////////////////////////////v7/////+/3/////9fr/////////////////+vz//////////////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7/////////////7/f/7PX/8Pf/3O7/vd7/mcv/gL//c7n/8fj/yuT/jMX/Tab/NJn/MZj/Mpj//v7/3+//k8n/R6P/L5f/M5n//P3/0Of/brb//f7/z+f/Y7H/MJf/bLX/kcf/yeT/Q6H/PZ7/ZrP/h8P/d7v/xeL/4fD/6/X/3e7/SaT/j8f/5PH/u93/crn//v//mMz/N5r/tdr/gcD/Vqv/0ej/ebz/ZrL/2uz/gsD/XK3/1er/8/n/ksn/QaD/wN//tNn/1ur/P5//QqD/ptL/9vr/6vT/cbj/l8v/+vz/t9v/OJv/Opz/ZLH/iMP/m83/6fP/d7r/N5v/Uqj/Mpn/+Pv/qdT/PJ3/7fb/Z7L/uNz/SqT/S6X/udz/OZz/mMv/5fL/drr/Waz/Wqz/qtT/RKH/q9T/9Pn/3u7/Z7P/w+D/TKX/oM//PZ3/erz/Npr/3O3/x+L/+/0F2pMDAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAM4SURBVDjLdZNnWxNBFIVnEZGEGpBeROkSuoIUwS4KFkTFQp+wFEWzk+AmEFhEDBZQlA5ioxcRsCDYELADSvlBbnY2kACeTztz3r1znztnAOBEEAYbDDcabTKG0HiT0UbDDQYEAXRECIQmpmbmFpaS7GyJpYW5mamJUKBDECIr6802ZE5uXv6lS/l5uTmkzWZrK9EyQdja2cPLBVeuSinEipJevVJwGdrb2RJa38FRJi+8RiOk4IQQfa1QLnN0wATh5OyiLCqWUgodUdLiIqWLs5OGcN3ipiopZZBCT4gpLVG5bXFlCwhNobxsta8hyuTQVEgAkd1W8rpUezrDSvstvU5utRMB4TZV+Q18PqIqbubn36ygMELdKFdtEwJ3D4ma4X+pvHX7zp3btyr5goxa4uEOPL3uViHsV9+TQVaye9WYQFV3vTyBt899bomYGvkDyOmBvIZrBEnv+3gD3+0PMV5bp4K8VHW1eO/hdl/gR9ZzC6ahES6rsYFrC9WTfgBKmjiAbm5ZAVqaaQ5okkAgJltxhUdtK0DbI1yhlRQD/8dPOIB6+kym9WXPnnKTQU8e+4OAwOe4IVpNagFSTeO954EBICi4vQOvOru6sd/d1Yl3OtqDg0BIaE8vnjRT1dfCniJr6avCo6V6e0JDwI6d/QMv+NEOvhwaHh56OciP/sVA/84dICxcPPKK5i+Qpl+/pmn+OulXI+LwMCDYFaEsf8PH6a0mk2/5UL0pV0bsEgAiMiRq9N3Y2sCMvRuNColkM0dE7xaPq6nVkaPU4zGx0VxqBXv27mtr1g8dYt637du/R4Bj73rgoPLDR90aiPr0WXnogKv2YYgOx432Tejknhr8Mhp3ZOVpCY7GJ0xOKZZLIMXUZEL8UYHO4zx2HBZMaw9B1NcCm+PH9J/3CRf47Tt/CPX9B3Q5qecDkBjr8VON26Amhn56nErU9wGRdNr8129NfJH0t9z8TNKqAixxNhnOzGpGPTsDk8+t8VnC4bxybgyhP3PK8w7r+OzIL1yU/J2f/yu5eCF6PYBtIyVmYXp6ISYlaV2fJVLTVIuLqrTU//jszadnLC1lpEf+D2DbyMzKytRv4B+n7ayGbXJj1gAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDQ6MjkrMDA6MDCVg8JEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACslBMVEUAAAD////////////////////////////////////////////////////////+/fz79/T////////////////////////////////////////////////////////////////////////////////////+/v7////9/Pv////79/X////////////////9+/r////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////58+/48ez69PDz5dzpzr3cspnUoIDQlXP69PHt18rYqIzDeU27ZjS6ZTG6ZTL+/v7059/brpPCdUe6Yy+7ZjP+/fzv29DOkm67ZzS6ZDH+/f3v28/LiWO6YzD05t/OkGy6ZDDarJH+/v3t1snAckO+bj3MjWbUn4DXpYfRmXfr08X16eH48Ovz5t3CdknZqo/26+TozLvQlXL//v7dspi8aTfmyLXUoIHGgFbv3NHSm3m5Yy/LjGby49rVoYLIhVzx39X79vPbrZK/cEHq0MDmxrS6ZjK5Yi/58/Dx4Na+bz/AcULhvab8+Pb47+rPlHHCd0ncsZf9+/rnybe9aji9azrLi2TXpojdtJv37unt18nFfVK7ZTL8+vjivqm+bTziv6n58e3WpIfWpYfx4NXMjWfnyrjCd0rDeEvoyrm9azncsZj27OXRmHbHg1nIg1rt2Mriv6rAckTjwKv79vS8ajm9ajnXpYj05t7r0sPDeUzfuKC+bT3Sm3q8aTbIglns1cf9/Pua7OXrAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAANISURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oLAICAoL8vNyc5IlxMUYYfKSUsUlpWXlRUUVYFBUVF5WWlIsJQlRwSgtI1tZVV1TW4EEamuqqyplZaRBKuTkFerqGxqLKlBAUWNDfZ2CvBzQAC6e5KbmFjR5oIqW5qZkHi5GBkFxxbTWApjtLY2NMLVFBa1piuKCDFxKbe0dhRCh2s6u7u6uzlqIksKO9jYlLgZllZSeFoh8TW9f/4QJ/X29NRAVLT0pKsoMqmoTJxVBjJw8pTgZCIqnTIZYWTRpopoqg7rGVDC3qHFayfRkMJheMg3sqaKCqRrqDJpaMyDKZ86qS4aCulkzIWIztDQZtNNmgzktc+Ymw8HcOWBnFc1O02ZITpkHVjB/wUKEgoUL5oMVzEtJZtBJWwQxYfEShIIliyEmLErTYdBdugysoHD5imKYfPGK5eCQKVq2VJdBT38lWMGq1T1rYArW9KxeBVawUl+PwcBw7TqIk9dv2AiR37hhPURk3VpDAwYj402bITHdsmXrQqAtxQu3boEEbe3mTcZGDCam27bvgAbtzl279+zZvWsnNOh3bN9masJgZq6zt3c+NALnz585c/58aHTO792rY27GwGlhWblvPzQ5HQClyQPQRLV/X6WlBScDo5WR9cFDhzETzOEjB62NrIBpjtHGVufosUL0JFd4/KidvQ041XI6ODqd6EJNdEUtJ084OTtwQpK9nItr5anTtUgqimrPnK10c5GDZQxBd4+DW88VIhQU7jx/0MMTkbU4vbx9LlysgBtRVHHxgo+3FydS5vT1S869BHNoUeHlK6J+vqjZ2182+eo1aGjUXrueLBuAIs/AEGivcqPnJtgZhbdu31AJCkSVZ2AMDuG7cxKU3otqTpbwhQajGQBUERaefPceKKjv3U0Oj8CQB6qQjKy8f7io6MH9ykhJLPLAII+KTnn46NHDlOgoG2wKgM6IsUt//DjdLiYYqzxQRWxc3ZMndXGxOOSBMR+f8PRpQrwVLgVAZyQmJSWiOgAArqa4BP2YBKMAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjQ0OjQ2KzAwOjAwpaS7KgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAChVBMVEUAAAD//////////////////////////////////////////////////////////vv//fL//////////////////////////////////////////////////////////////////////////////////////v7//////vr//////////////////////vj//////v///////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7//////////////Ov/++j//Oz/+dT/863/7X//6mD/50///O7/9r3/62//4SH/3QH/3AD//v7/+df/7Xj/4Br/3QD//vv/98T/5kr/3QL//v3/98P/5Tz/+db/5kf/7HX/3QP/9rv/4BX/3g3/5UH/6WD/62n/6Fb/9bf/+tr/++b/+dX/4Bv/7HP/+t7///7/86v/+dj/3QX/8qP//vz//O3/6mH/4iz/98b/6Fj/5T//+dH/6mL/4zP/+Mr//fH/7Hf/3xP/9LH/8qH/6mn/+Mz/3g//3xT/8JD//fT/++X/507/4B3/7X3/+ND//vj/86b/3Qj/3gn/5T7/62r/7oL/++P/6FT/3Qb/9rz/4ij//fb/8ZT/3gz//Oj/62j/3AH//On/+Mv/86f/4R7/86j/7n7//vf/+t//3QT/4zD/4zH/8JX/3xX/3gj/9bT/4R//74j/74n/6Fn/+dP/9bn//vrsMn7uAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAxZJREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSVAqVIwADJKiosKpSQhKhilZWTLyisqobJQNZUV5WWyMtIgFXLyClXVNQUo8iBTaqqrFOTlgAZw8STV1qHLg1TU1SbxcDEyCIorptY3IGxHuKShPlVRXJCBS6mqsakAKt3c0tra0gxVUtDUWKXExaCsktwGFahs7+js6ursaIc6uKAtWUWZQVWtuwfML8jv7etPAoL+vt58iEhPt5oqg7rGBDC3oCBrYmESGBROzALbUpA/QUOdQVMgA6J80uQpSVAwZfIkiFiGgCaD1tRpEM70GUlwMGM6RGzaVC2GpOSZEM6s2QgFs2dBxGYmJzFoT50D4cydh1Awby5EbM5UbQad+QsgnIWLCmHyhYsWQsQWzNdh0NVbDPX1klSYgtQlUKHFeroM+gZLl0GUL1+xEiK/csVyiMiypQb6DIZGq1ZD1a9Zuw5oS+G6tWugAqtXGRkyGJus37ARKrBp85atW7ds3gTlbtyw3sSYwdRMe9t2RGTu2IGIzu3btM1MGTjNLcp27oIlB0Rslxbs2llmYc7JwGhpaLV7z17MBNO8Z7eVoSUwzTFa22jv238APckd2HLQ1s4anGo57R0cD7Wgqig40HLI0cmeE5Ls5Zxdyg4fQVZQUHDkaJmrsxwsYwi6ue9euxFJRcGmY8fdPRBZi9PTy/vE9pNwFQUnt5/w9vLkRMqcPr5JOacQOet0jqivD2r29pNNOnMWpuDsmSRZfxR5BoYAO5X5becgcbSpbb5KYACqPANjUDBfbQsoAxU0tBTxhQShGQBUERqWdP4CKKgvnE8KC8eQB6qQjCi7uLegYO+lsghJLPLAII+MSr48adLl5KhIa2wKgM6Itr1y6tQV2+ggrPJAFTGxU65enRIbg0MeGPNx8deuxcdZ4lIAdEZCYmICqgMA6f6os3UKuXAAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjQ0OjU4KzAwOjAwOTHA6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACr1BMVEUAAAD////////////////////////////////////////////////////////7/v3y+/n////////////////////////////////////////////////////////////////////////////////////+/v7////6/f3////y+/r////////////////4/fz//////v/////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////r+ffo+PXs+ffU8+2t591/28tg0r5Pzbju+vi97ORv1sQhwKUBt5gAtpf+/v7X9O942ckavqIAtZYAt5j7/v3E7udKy7UCt5j9/v7D7uY8x7DW8+5Hy7QAtpZ118cDt5i77OQVvKANup1BybJg0b5p1cJWz7q36uLa9PDm9/XV8u4bvqNz18be9fGr59zY8+9/2ssFuJmj5dr8/v7t+fdh0r8sw6rG7+hYz7s/ybHR8uxi0r8zxazK8Onx+/l32MgTvJ+x6N+h5Nlp1MLM8OoPu54UvJ+Q39L0/Prl9/ROzbcdv6N92srQ8ez4/fym5tsIuJoJuZs+yLBq1cOC28zj9/NUz7oGuJq87OMowaf2/PuU4NQMupwNupyU4dTo+PZo1MIBtpdq1cLp+fbL8OoBtpan5tsev6Mev6So5twIuZt+2sv3/Pvf9fJUzroEt5gwxKsxxKuV4NQVvaCV4dTW8+/X8++06eEfv6T7/f2I3c6J3c9Zz7wFuJrT8u256+L6/f3ow7cxAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAMvSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oBAMCvLzcnOSJcTFGGHyklJFxSWlZYWF5WBQWFhWWlJcJCUJUcEoLSNbUVlVDZWFqqmuqqyQlZEGqZCTV6iprStDkQeqKKurrVGQlwMawMWTXN/QiCYPVNHYUJ/Mw8XIICiumNbUDLO9sawMprawuSlNUVyQgUuppqW1EOq4tvaOjvY2qGMLW1tqlLgYlFVSOhuhDuvq7unt7enugjq4sTNFRZlBVa2vH8wvLJgwsSgZCIomTiiAiPT3qakyqGtMAnMLG7Mng+WBKiZngx1SWDBJQ51BU2sKRPnUadOToWD6tKkQsSlamgzaM2aCOY2zZifDwexZYGcVzpyhzZCcMgesoGzuPISCeXPLwArmpCQz6MyYDzFhwUKEgoULICbMn6HDoLtoMcS+JUuLYPJFS5dAxBYv0mXQ018G4ZQtT4MpSFsOiZrCZfp6DAaGK1ZCeKtWr4HIr1m9CiKycoWhAYOR8dp10IBbv2Ej0JaijRvWQ4N23VpjIwYT002bt0BVbN22fceO7du2QuW3bN5kasJgZq6zc1cZLBGU7d5dBksaZbt26pibMXBaWFbs2QtLDqAkCWPu3VNhacHJwGhlZL1v/wHMBHPw0D5rIytgmmO0sdU5fOQoepI7euy4nb0NONVyOjg6nWg/iZpoT7afcHJ24IQkezkX14pTpwuRVBQWnjlb4eYiB8sYgu4e+zacQ1aw9fwFD09E1uL08va5eOkyXEXh5UsXfby9OJEyp69fcu4VRM66mivq54uavf1lk6+1whRcv5EsG4Aiz8AQaK+yaDnEGYVbly9SCQpElWdgDA7hu9kOykCFze23+EKD0QwAqggLT759BxTUd24nh0dgyANVSEbevXegsPDA/buRkljkgUEeFZ3y4OHDBynRUTbYFACdEWP36MqVR3YxwVjlgSpi46Y/fjw9LhaHPDDm4xOePEmIt8KlAOiMxKSkRFQHAAAsgrQ2sknLAAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDU6MTIrMDA6MDD2yfpjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACfFBMVEUAAAD////////////////////////////////////////////////////////8/vz0/fT////////////////////////////////////////////////////////////////////////////////////+/v7////7/vv////1/fX////////////////6/vr//////v/////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////v/O/s++zw/PDc+dy9872Z7ZmA6oBz53Px/PHK9sqM64xN4U003TQx3DEy3DL+/v7f+d+T7ZNH4Ecv3C8z3TP8/vzQ99Bu5m79/v3P989j5WMw3DBs5myR7JHJ9slD4EM93j1m5WaA6YCH64d36HfF9cXh+uHr++vd+d1J4EmP7I/k+uT+//6787ty53KY7Zg33Te18rWB6oFW4lbR99F56Hna+dqC6oJc41zV+NXz/fOS7JJB30HA9MC08rQy3TKH6ofW+NY/3j9C30Km8Kb2/fbq++px53GX7Zfa+Nr6/vq387c43Tg63jpk5WSI64ib7pvp++lS4lL4/fip8ak83jzt/O1n5We487hK4UpL4Uu587k53TmY7pj4/vjl+uV26HZZ41la41qq8KpE30Sr8Kv0/fQ53jne+d7D9cNM4Uyg76B66Ho23TbH9cf7/vts+qXUAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAM8SURBVDjLdZP3X9NQFMVfFIUWLJRpVcoeYlVEQEUExIUyFFFRcfJqqiyb12paDQQKpQXZorJXARcbFRC3oohb/yHTJIUW8fyU5Hxz7/3cdx4ArDBs2XK7FSvtHSB0sF+5wm75MgwDVsIEQkenVSJnF/mlS3IXZ9EqJ0ehwIrAxK5u7h644vKVnNzcnCuXFbiHu5ureJ7APL1Ww7z8gqtKAjEilFcL8vPgai9PzOJL1qjU166TCGlYIURev6ZWrZFwBLZ2nbf2xk0lobESobx5Q+u9bq2ZkPr4UoVFNNLYCNFFhZSvj5QpIHSC6uLFvpkoVkMnIQbEXn54idLSnWZkeVaW4H5eYiD0p3SlXH9ElOnLy/VlBIcQpTrKXwgCAuUGmv/FWFF561ZlhZEvSBvkgQEgKLiqGnF+TW0dZFRXW8MRqLoqOAiEhNazr4huUKsgK5W6gR0EKetDQ8D6sNsc3niHgryoO43ct9th68EG/C77Qt9rgvNquseOhe7iGwCUN7MAqW9ZAFr0JAs0yyGQ4a1chbb2BaC9javQisvAxo5OFiC6ulUWX9XdxW4GdXZsBJs297CAiezFLQDeS5pYoGfzJhC+pa+fG/n+g4ec//DBfe5Lf9+WcBCx9dFjbtN09cAg00U1OFDNrZZ4/GhrBIiMGhoe4Vc7Ojb+5Mn42Ci/+pHhoahIEL1N9tRI8gdIko2NJMkfJ2l8KtsWDQTbd2h1z/g4mcyZNPGheqbT7tguAFhMxM6Jyal/AzM1ObEzIobJHBa7S/bcQCyOHGF4Hhcfy6ZWkLA7sV1vGzpET7cn7kkQcLGX7t2nffGSMFn//+q1dv9eqeViiA8kTQy8sco9Mfr2XdLBhaslOJSc8v6DZr4J0nx4n5J8SGB1OVPTYP6MZVBEfMz3SEu1vd6HveGnWb4JMfsZeh+x8QFIjw+cM3xhCeLL+Fzg0XRbH2AZx0Rfp83xRcppteh4xqICDHEiE377bl71928w8+Q/PkNITml/TCFU9kN7SrKEz6z8dJb8569fP+VZp2OXApgxzsQpZmYUcWcylvQZ4uw56vdv6tzZ//jMyZ+/8OfPhfMx/wOYMS5mZ1+0HeAvs9msMpv5tz0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjQ1OjQxKzAwOjAwj8HumgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACr1BMVEUAAAD////////////////////////////////////////////////////////9/vv5+/L////////////////////////////////////////////////////////////////////////////////////+/v7////9/fr////5+/P////////////////8/fn////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////3+uz1+en3+u3t9Nbd6rHK34W912i20lj4+u/j7sDD23ajxyyWvw6VvguVvgz+/v7u9drH3X+gxSWUvgmWvw39/vvm8Me00VP+/v3m8MauzkXu9Nmz0FDG3HyUvgrj7r+exCCbwhqwz0rB2XGWvw+51F7h7Lrv9dz0+Oft9NehxifF3Hrx9t/c6a+201j+//7K3oaYwBHZ56j+/vy+12moyjfn8Mn2+uy61WCwzkns89P3+u6+12qryz7p8c35+/HH3X6dwx7e67XY56aVvg2UvQjq8s6cwhuexB/R45b6/PT0+Oa20leVvgqhxijJ3oT8/fna6KqYwBOZwRavzkfB2XLL34nz+OS41F2UvQmYwBKmyDGWvwz7/PfS5JmawRebwhjT5JrB2XD1+erp8s79/vzb6ayiximixir7/PbJ3oOZwRXK3oTx9+Cpyzuqyzvj7sGexCH5+/KZwBSwz0vu9dng7LijxivO4Y6awRjO4Y+61WGXwBHt89Wpyzri7bz9/frM0I39AAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAANESURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oLAICAoL8vNyc5IlxMUYYfKSUsUlpWXlhUUVYFBUWF5WWlIsJQlRwSgtI1tZVV1QWIEECguqqyplZaRBKuTkFWpq68qLKlBAUXldbY2CvBzQAC6e5PoGdHmQiob6ZB4uRgZBccW0xgKY7U3l5U0wdkFjmqK4IAOXUk1zSyHUca1tWVltrVDHFrY01yhxMSirpLQ3QeQ7Oru6e3q6uzo7ICqa2lNUlBlU1Xr7iiBG9k8oTgaC4gn9ECuL+nrVVBnUNSaCuUXlk0omJ4PB5JJJYEcXFUzUUGfQ1JoCUT512vRkKJg+bSpEbIqWJoN22gwwp2nmrGQ4mDUT7KyiGWnaDMmz54AVlM+dh1Awb245WMGc2ckMOvMXQBQsXIRQsGghRMGC+ToMuouXgBUULl1WDJMvXrYUHDJFSxbrMujpLwdzVqxsT4MpSGtfuQKsabm+HoOB4arVECPWrF0HkV+3dg3EgNWrDA0YjIzXb9gICbhNm+cBbSmet3kTJGg3blhvbMRgYrpl6zZo0G7fsXPXrp07tkODftvWLaYmDGbmOrv3rIQmk5V79+3buxKadFbu2a1jbsbAaWFZ2bwfYknFAVCaPABhb9zfXGlpwcnAaGVkffDQYcwEc+ToQWsjK2CaY7Sx1Uk9Voie5Ap3HreztwGnWk4HR6cTbU0oKoqa2k44OTtwQpK9nIvryVOnNyKpKNp45tRJNxc5WMYQdPc4e+48UrovPH/hoIcnImtxenn7XNxTATeiqGLPRR9vL06kzOnrl5x7CZGzLl8R9fNFzd7+sslHr0JDY+PVo8myASjyDAyB9irX2q+DnVF4vf2aSlAgqjwDY3AIX30bKPkWFdy4yRcajGYAUEVYePKt26Cgvn0rOTwCQx6oQjKy8s7doqK79yojJbHIA4M8Knr2/QcP7s+OjrLBpgDojBi7h48ePbSLCcYqD1QRGzf98ePpcbE45IExH5/w5ElCvBUuBUBnJCYlJaI6AADXv7i4Kd/lawAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDk6NDUrMDA6MDBhsioHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACnVBMVEUAAAD////////////////////////////////////////////////////////7/fvy+fL////////////////////////////////////////////////////////////////////////////////////+/v7////6/Pr////////////////////4/Pj////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////r9uvo9Ojs9uzU69St2K1/w39gtWBPrU/u9+694L1vu28hlyEBiAEAhwD+/v7X7Nd4wHgalBoAhgAAiAD7/fvE48RKqkoCiAL9/v3D48M8pDzW7NZHqUd1vnUDiAO737sVkRUNjg1BpkFgtGBpuWkCiQJWsFa33bfa7drm8+bV69UblBtzvXPe796r16vY7Nj+//4FigWj1KP8/fzt9u1htWEsnCzG5Mbr9etYsVg/pT/R6dFitmIzoDPK5srx+PF3wHcTkBOx2rGh06EAhQDM58wPjg8UkRSQy5D0+vTl8uVOrE4dlR19wn3Q6dD4/Pim1aYIiwgJjAk+pD5qumqCxYLj8uNUr1QGiga837womij2+/aUzZQMjQwNjQ1ouGgBhwFquWrp9OnL5ssBhgGn1qcelR4elh6o1qj2+vZ+w373+/ff8N8EiAQwnjAxnjGVzZUVkhUJiwm03LQflh+IyIiJyIlZsVnT6tP8/vy53rn6/Pq97PRtAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAzFJREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSWlBQVlYFBQUFpSXFQoJQlRwSgtI1teUVkFlYWqqaqsKJeVkQapkJNXqK6pLUWRB6oora2pVpCXAxrAxZNUV48uD1JRX5fEw8XIICiumNrQCLO9FAhg7MaGVEVxQQYupeqm5gKo41pa29paW6COLWhuqlbiYlBWSW4vhQh0dHZ19/R0d3V2QFSUtierKDOoqvX2gfkF+f0TCpOAoHBCfz5EpK9XTZVBXWMimFtQmjVpchIYTJ6UBXZIQf5EDXUGTYEMiPIpU6clQcG0qVMgYhkCmgxa02eAOaUzZyXBwayZYGcVzJiuxZA0ew5Ewdx5CAXz5kIUzJmdxKA9fT5EwYKFCAULF0AUzJ+uzaCzaDHEviVLC2HyhUuXQMQWL9Jh0NVbBuEsb0+FKUhtXw4RW6any6BvsGIlhLdq9RqI/JrVqyAiK1cY6DMYGq1dBwnJ0vUbNgJDYvLGDeuhAuvWGhkyGJts2rwFGrRbt23fsWP7tq3QoN+yeZOJMYOpmfbOXcuhEbi8dPfu0uXQ6Fy+a6e2mSkDp7lF+Z69pbBUUABLd2Wle/eUW5hzMjBaGlrt238AM8Ec3L/PytASmOYYrW20Uw4dRk9yh48ctbWzBqdaTnsHx2Otx1ET7fHWY45O9pyQZC/n7FJ+4mQBkoqCglOny12d5WAZQ9DN/cyGLcgKtp495+6ByFqcnl7e53ddgKsouLDrvLeXJydS5vTxTcq5iMhZl3JEfX1Qs7efbNLlK9DQKL1yOUnWH0WegSHATmVRO8QZBVfbF6kEBqDKMzAGBfPVtYIyUEFjaxFfSBCaAUAVoWFJ166Dgvr6taSwcAx5oArJiPIbBwoKDtwsj5DEIg8M8sio2bemTLk1OyrSGpsCoDOibW9fvHjbNjoIqzxQRUzsnbt378TG4JAHxnxc/L178XGWuBQAnZGQmJiA6gAAFLyvxAL3bxQAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjQ5OjU2KzAwOjAwnPAwBAAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAClFBMVEUAAAD////////////////////////////////////////////////////////7//3y//n////////////////////////////////////////////////////////////////////////////////////+//7////6//3////y//r////////////////4//z////////////////////////////////////////////////////////////////////////+//7////////////////////////////////////+//7////////////////////////////////////////////////////////////////////////////+//7////////////r//fo//Xs//fU/+6t/95//8tg/79P/7nu//i9/+Rv/8Uh/6YB/5kA/5j+//7X/+94/8ka/6MA/5cA/5n7//3E/+dK/7YC/5n9//7D/+c8/7HW/+9H/7V1/8cD/5m7/+QV/6EN/55B/7Np/8NW/7u3/+La//Dm//XV/+4b/6Rz/8fe//Gr/93Y/+/+//9//8wF/5qj/9r8//7t//dh/8As/6vG/+hY/7w//7LR/+xi/8Az/63K/+rx//l3/8kT/6Cx/9+h/9nM/+oP/58U/6CQ/9L0//rl//RO/7gd/6R9/8vQ/+z4//ym/9sI/5sJ/5w+/7Fq/8OC/83j//NU/7oG/5u8/+Qo/6j2//uU/9QM/50N/53o//Zo/8MB/5jp//bL/+pB/7IB/5en/9we/6Qe/6Wo/9wI/5x+/8v3//vf//IE/5kw/6wx/6yV/9TW/+60/+Af/6WI/8+J/89Z/7zT/+25/+L6//2DMMmrAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAMmSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oBAMCvLzcnOSJcTFGGHyklJFxSWlZYWF5WBQWFhWWlJcJCUJUcEoLSNbUVlVDZWFqqmuqqyQlZEGqZCTV6iprStDkQeqKKurrVGQlwMawMWTXN+ALg9S0VCfzMPFyCAorpjW2ASzvQwIYOymxjRFcUEGLqWa5pZCqONa27Ky2lqhji1saa5R4mJQVklpL4M6rKOzq7u7q7MD6uCy9hQVZQZVtZ5eML+woK+/KBkIivr7CiAivT1qqgzqGhPA3MKy7ImTksFg0sRssEMKCyZoqDNoak2GKJ8ydVoyFEybOgUiNllLk0F7+gwwp2zmrGQ4mDUT7KzCGdO1GZJTZkMUzJmLUDB3DkTB7JRkBp3p8yAK5i9AKFgwH6Jg3nQdBt2FiyD2LV5SBJMvWrIYIrZooS6Dnv5SCKesPQ2mIK0dEpyFS/X1GAwMly2H8FasXAWRX7VyBURk+TJDAwYj49VroAG3dt16oC1F69ethQbtmtXGRgwmphs2boKq2Lxl67ZtW7dshspv2rjB1ITBzFxn+44yeGTu3AmPzrId23XMzRg4LSwrdu2GJQdQkoQxd++qsLTgZGC0MrLes3cfZoLZv3ePtZEVMM0x2tjqHDh4CD3JHdp62M7eBpxqOR0cnY4cPYaaaI8dPeLk7MAJSfZyLq4Vx08UIqkoLDx5qsLNRQ6WMQTdPfasO42sYPOZsx6eiKzF6eXtc27HebiKwvM7zvl4e3EiZU5fv+TcC4icdTFX1M8XNXv7yyZfaoEpaLmULBuAIs/AEGivsrAd4ozCze0LVYICUeUZGIND+C63gTJQYVNbMV9oMJoBQBVh4clXroKC+uqV5PAIDHmgCsnIimv7Cgv3Xa+IlMQiDwzyqOiUG1Om3EiJjrLBpgDojBi7mxcu3LSLCcYqD1QRGzft1q1pcbE45IExH59w+3ZCvBUuBUBnJCYlJaI6AABB269xUXFElwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NTA6MDYrMDA6MDDpi8pqAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACbVBMVEUAAAD////////////////////////////////////////////////////////7///y///////////////////////////////////////////////////////////////////////////////////////+///////6///////////////////////4///////////////////////////////////////////////////////////////////////////+///////////////////////////////////////+///////////////////////////////////////////////////////////////////////////////+///////////////r///o///s///U//+t//9///9g//9P///u//+9//9v//8h//8B//8A///+///X//94//8a///7///E//9K//8C///9///D//88///W//9H//91//8D//+7//8V//8N//9B//9p//9W//+3///a///m///V//8b//9z///e//+r///Y//8F//+j///8///t//9h//8s///G//9Y//8////R//9i//8z///K///x//93//8T//+x//+h///M//8P//8U//+Q///0///l//9O//8d//99///Q///4//+m//8I//8J//8+//9q//+C///j//9U//8G//+8//8o///2//+U//8M//9o///p///L//+n//8e//+o//9+///3///f//8E//8w//8x//+V//+0//8f//+I//+J//9Z///T//+5///6//8Ngdu6AAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAu1JREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSUFSKCkuKhQShKiglFaRra0rLyiAAVUlJeVyspIg1TIyStUVlUXYIDqqkoFeTmgAVw8STW1BVhAbU0SDxcjg6C4YmpdPTYF9XWpiuKCDFxKlQ2NMLGm5szM5iYYr7GhUomLQVkluQXmsNa29o6O9rZWmINbklWUGVTVOrug3u/uKUwCgsKebmiAdHWqqTKoa/RCuVl9YHmgir4sqJZeDXUGTYEMCK9/wsQkKJg4oR8iliGgyaA1aTKEM2VqEhxMnQIRmzxJiyEpeRqEM30GQsGM6RCxaclJDNqTZkI4s2YjFMyeBRGbOUmbQWfOXAhn3vxCmHzh/HkQsblzdBh09RbAfJ0KU5AKC5kFeroM+gYLF0F4i5cshcgvXbIYIrJooYE+g6HRsuVQ9StWrgLaUrhq5QqowPJlRoYMxiar16yFCqxbv2Hjxg3r10G5a9esNjFmMDXT3rQZEYVbtiDYmzdpm5kycJpblG7dhi26t20ttTDnZGC0NLTavmMnpnzTju1WhpbANMdobaOdsisfXT5/w25bO2twquW0d3Dc04ymIr95j6OTPSck2cs5u5Tu3YeqYN/+UldnOVjGEHRz375yLbL8ugMH3T0QWYvT08v70ObDCPnDmw95e3lyImVOH9+knCMIBUdzRH19ULO3n2zSMXjibjyWJOuPIs/AEGCnMqcF6ox1LXNUAgNQ5RkYg4L5aprBGai+uYgvJAjNAKCK0LCk4ydACk4cTwoLx5AHqpCMKD0JDPKdp0ojJLHIA4M8Mir5dH//6eSoSGtsCoDOiLY9c+TIGdvoIKzyQBUxsRPPnp0YG4NDHhjzcfHnzsXHWeJSAHRGQmJiAqoDAOgCnVLAYqeOAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1MDoyMSswMDowMG4J85kAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACu1BMVEUAAAD////////////////////////////////////////////////////////8/f3y9/r////////////////////////////////////////////////////////////////////////////////////+/v7////6/P3////z9/r////////////////5+/z//////v/////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////s8/jp8fft9PjW5vCwz+KEtdJno8hXmcLu9fnA2Oh1q80qfrIMa6cJaqYKaqb+/v7Z6PF+sdAkea8HaKULa6f8/f3G3epRlcAJaab9/f7G3OpEjrsHaaXY5/FOlL97rs8Iaab9/v6+2Ocfdq0Yc6tJkb1no8dvqMsIaaUNbKhdncS61ebb6fLn8PbX5vAle7B5rs7f7POuzuGFtdMPbainyt/8/f5oo8g1hbbI3utfnsVHkLzT5O/u9PhppMk8ibjM4Ozx9/p9sNAcda200eSlyN4La6YGaKVwqMvO4e0Zc6wddq2Vv9j0+Pvm8PZWmMIme7GDs9LS5O/+/v/5+/ypy98Rb6kTcKpGj7xxqcyIt9Pk7/VcnMQQbqj7/f0wgbQKaqf3+vyYwdkVcaoWcquZwdpvp8vq8vfN4e1JkL2rzOAnfLEofLGszOH2+vyCs9ITb6mDtNLg7PNbnMQ5h7c5h7jA2egfd66awtry9/pvqMoSb6kMbKe30+UpfbGNutaOutZgn8XV5vC81ub7/P0PF+8/AAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAANLSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oLAICAoL8vNyc5IlxMUYYfKSUsUlpWXlhUUVYFBUWF5WWlIsJQlRwSgtI1tZVV1QU4EEagqqqyplZaRBKuTkFWrr6huKKlBAUUN9Xa2CvBzQAC6e5MYmdHmQiqbGZB4uRgZBccW05gKY7S3l5S0wdkFzmqK4IAOXUmtbeyFEqKajs6urs6MGoqSwva1ViYtBWSWluwci39vXP2HixAn9fb0QFT3dKSrKDKpqkyYXQYycMrU4GQiKp06BWFk0eZKaKoO6xjQwt6ghuwQsD1RRkg12dFHBNA11Bk2t6RDlM2bOSoaCWTNnQMSma2kyaKfNBnNa5sxNhoO5c1rACmanaTMkp8wDKyifvwChYMH8crCCeSnJDDoLF4EVNCxeglCwZHEDWMGihToMukuXgRUULl9RDJMvXrEcHDJFy5bqMujprwRzVq1ekwZTkLZm9SqwppX6egwGhmvXQYxYv2EjRH7jhvUQA9atNTRgMDLetBns5IqWLVu3bU9O3r5t6xaowOZNxkYMJqY7du6CBG3L7j179+3bu2c3RL5o184dpiYMZuY6+w+shkRg4erygwfLV0OirmL1gf065mYMnBaWh9oOQ/RUHAGlySMQdsvhtkOWFpwMjFZG1kePHcdMMCdOHrU2sgKmOUYbW53UU4XoSa5wzWk7extwquV0cHQ6c7YFRUVRy9kzTs4OnJBkL+fiWnnuPLKKopYLFyvdXORgGUPQ3ePS5SuFCAWFu68e9fBEZC1OL2+fa9cr4EYUVRy45uPtxYmUOX39knNvIHLWzVuifr6o2dtfNvnkbWhotNy+kywbgCLPwBBor3L33n2wMwrvr7mrEhSIKs/AGBzC13j2AdCSogdnS/hCg9EMAKoIC09++AgU1I8eJodHYMgDVUhGHnp8oqjoxJNDkZJY5IFBHhWd8nTGjKcp0VE22BQAnRFj9+zGjWd2McFY5YEqYuNmPX8+Ky4Whzww5uMTXrxIiLfCpQDojMSkpERUBwAAPAa7YJpbYIgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjUwOjM0KzAwOjAw8JvcoAAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACzVBMVEUAAAD////////////////////////////////////////////////////////7/Pzy9Pb////////////////////////////////////////////////////////////////////////////////////+/v7////6+/v////////////////////4+fr////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////r7/Ho7O/s7/LU2+GtusZ/lKdge5JPbIfu8fO9yNFvh5whRWYBK1AAKE8AKU/+/v7X3uR4j6IaP2EAJk0AKlD7/PzEztZKZ4ICK1EAKE79/f3DzdY8XHkAJ03W3eNHZYB1jKADK1EAJ067xtAVO14NNVlBYHxgepHr7vFpgpgCLFFWcou3ws3a4OXm6u3V2+IbQWMBK1Fzip7e4+iruMVPbIbY3uQFLlOjssD8/f3t8PJhe5IsT27Gz9hYc4w/X3vR2d9ifJMzVXPK09vx8/V3jqITOVyxvcmhsL4AKVAAJUzM1NwPNloUOl2QorP09vfl6e1Oa4UdQmN9k6bQ2N/4+fqmtMIIL1QJMVY+XXpqg5mCl6nj6OxUcYoAJkwGL1S8x9EoSmr2+PmUpbUMM1cNNFiUprVogZgBKE5qgpjp7PDL1NsBJ06ntcIeQmQeQ2WotsP29/l9kqUIMVV+k6b3+Pnf5OlUcIoEKlAwUnExUnG9yNKVprYVPF4IMFUJMFVBYH3X3uO0wMwfRGWInK0MNFiJnK5ZdI3T2uEwUnC5xM/6+/yAxxLtAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAA0hJREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/oBAICvLzcnOykyTExRhh8pJSRcUlpWWFheVgUFhYVlpSXCQlCVHBKC0jW1FZVV1TjgRqqqsqK2RlpEEq5OQVauvqGwrLUUBhQ31drYK8HNAALp6kxiZ0eZCKpsYkHi5GBkFxxdTmFpjtrWVlrTB2S3OqorggA5dSbVs7xP7Cmo7Orq7OjhqIkpr2tlolLgZlle6eBoh8b1//hIkTJ/T39UJUNPR0qygzqKpNmgzmF06ZOq0oCQiKpk2dAhGZPElNlUFdY3p+IdhRM2aC5YEqZs4AO7owf7qGOoOmQAZE+azZc5KgYM7sWRCxDAFNBq2588Cc1vkLkuBgwfxWsIJ5c7UYkroXghWULVqMULB4URlYwcLuJAbtuUvAChqWLkMoWLYU7LHCJXO1GXSWrwArKFi5qggmX7RqZQFYwYrlOgy6eqvBCtas7UmFKUjtWbsGrGC1ni6DvsG69RAnb9i4CSK/aeMGiMj6dQb6DIZGm7dAQrp167btQFuKtm/b2goJ6y2bjQwZjE127NwFCdrW3Xv27tu3d89uiHzhrp07TIwZTM209x84CI3AgwcPHTp4EBqdBw/s1zYzZeA0t6g4fKQGlthAAJqojhyusDDnZGC0NLQ6euw4ZoI5cfKolaElMM0xWttop5w6jZ7kTp85a2tnDU61nPYOjuc6z6OoKDzfec7RyZ4TkuzlnF0qLlysQVJRWHPpcoWrsxwsYwi6uV+5eg0p3dfsvn7D3QORtTg9vbxv3roNN6Lw9q2b3l6enEiZ08c3KecOzJLCmrv3RH19ULO3n2zSfWjiLq95cD9J1h9FnoEhwE5lec9DcCQXPOpZrhIYgCrPwBgUzNfYCcpAhS2Pn/CFBKEZAFQRGpb09BkopJ89TQoLx5AHqpCMqHj+orDwxcuKCEks8sAgj4zqfjVr1qvuqEhrbAqAzoi2ff3mzWvb6CCs8kAVMbFz3r6dExuDQx4Y83Hx797Fx1niUgB0RkJiYgKqAwC8prs7Sn3FCAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NTA6NDMrMDA6MDA/+es3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACfFBMVEUAAAD////////////////////////////////////////////////////////8/P709P3////////////////////////////////////////////////////////////////////////////////////+/v7////7+/7////19f3////////////////6+v7///////7////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////v7/zs7Pvw8Pzc3Pm9vfOZme2AgOpzc+fx8fzKyvaMjOtNTeE0NN0xMdwyMtz+/v7f3/mTk+1HR+AvL9wzM938/P7Q0Pdubub9/f7Pz/djY+UwMNxsbOaRkezJyfZDQ+A9Pd5mZuWAgOmHh+t3d+jFxfXh4frr6/vd3flJSeCPj+zk5Pr+/v+7u/NycueYmO03N921tfKBgepWVuLR0fd5eeja2vmCgupcXOPV1fjz8/2SkuxBQd/AwPS0tPIyMt2Hh+rW1vg/P95CQt+mpvD29v3q6vtxceeXl+3a2vj6+v63t/M4ON06Ot5kZOWIiOubm+7p6ftSUuL4+P2pqfE8PN7t7fxnZ+W4uPNKSuFLS+G5ufM5Od2YmO74+P7l5fp2duhZWeNaWuOqqvBERN+rq/D09P05Od7e3vnDw/VMTOGgoO96eug2Nt3Hx/X7+/4Nm4E+AAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAM8SURBVDjLdZP3X9NQFMVfFIUWLJRpVcoeYlVEQEUExIUyFFFRcfJqqiyb12paDQQKpQXZorJXARcbFRC3oohb/yHTJIUW8fyU5Hxz7/3cdx4ArDBs2XK7FSvtHSB0sF+5wm75MgwDVsIEQkenVSJnF/mlS3IXZ9EqJ0ehwIrAxK5u7h644vKVnNzcnCuXFbiHu5ureJ7APL1Ww7z8gqtKAjEilFcL8vPgai9PzOJL1qjU166TCGlYIURev6ZWrZFwBLZ2nbf2xk0lobESobx5Q+u9bq2ZkPr4UoVFNNLYCNFFhZSvj5QpIHSC6uLFvpkoVkMnIQbEXn54idLSnWZkeVaW4H5eYiD0p3SlXH9ElOnLy/VlBIcQpTrKXwgCAuUGmv/FWFF561ZlhZEvSBvkgQEgKLiqGnF+TW0dZFRXW8MRqLoqOAiEhNazr4huUKsgK5W6gR0EKetDQ8D6sNsc3niHgryoO43ct9th68EG/C77Qt9rgvNquseOhe7iGwCUN7MAqW9ZAFr0JAs0yyGQ4a1chbb2BaC9javQisvAxo5OFiC6ulUWX9XdxW4GdXZsBJs297CAiezFLQDeS5pYoGfzJhC+pa+fG/n+g4ec//DBfe5Lf9+WcBCx9dFjbtN09cAg00U1OFDNrZZ4/GhrBIiMGhoe4Vc7Ojb+5Mn42Ci/+pHhoahIEL1N9tRI8gdIko2NJMkfJ2l8KtsWDQTbd2h1z/g4mcyZNPGheqbT7tguAFhMxM6Jyal/AzM1ObEzIobJHBa7S/bcQCyOHGF4Hhcfy6ZWkLA7sV1vGzpET7cn7kkQcLGX7t2nffGSMFn//+q1dv9eqeViiA8kTQy8sco9Mfr2XdLBhaslOJSc8v6DZr4J0nx4n5J8SGB1OVPTYP6MZVBEfMz3SEu1vd6HveGnWb4JMfsZeh+x8QFIjw+cM3xhCeLL+Fzg0XRbH2AZx0Rfp83xRcppteh4xqICDHEiE377bl71928w8+Q/PkNITml/TCFU9kN7SrKEz6z8dJb8569fP+VZp2OXApgxzsQpZmYUcWcylvQZ4uw56vdv6tzZ//jMyZ+/8OfPhfMx/wOYMS5mZ1+0HeAvs9msMpv5tz0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjUwOjU2KzAwOjAwoWvEDgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACTFBMVEUAAAD////////////////////////////////////////////////////////9/v/5+v/////////////////////////////////////////////////////////////////////////////////////+/v/////8/f/////////////////////8/P///////v/////////////////////////////////////////////////////////////////+/v/////////////////////////////////////+/v/////////////////////////////////////////////////////////////////////////////+/v/////////////2+P/09//r8P/Y5P/D1P+1yv+txP/3+f/g6f+7z/+Xtf+Iqv+Hqf/+/v/s8f/A0v+Usv+GqP/9/f/j6/+qwv+kvv+pwf++0f+Gqf/f6P+RsP+Orv+mv/+0yv+5zf+Jq/+wxv/d5//t8v/z9v+Us/+90P/v9P/X4/+Kq//U4P/9/v/2+f+cuP/k7P/1+P+xx/+lv//p7/+2yv+gu//m7f/4+v+Qr//a5P/T3/+FqP/n7f/L2v/6+//y9v+sxP+Vs//C1P/8/P/V4f+LrP+Mrf+6zf/F1f/y9f+vxv+KrP+atv/7/P/N2/+Nrf+Nrv+4zP/W4v+VtP+WtP/6/P/C0/+MrP/D0//w9P+euv+SsP+Ssf/N3P/c5v/I1//q8P/e5//8/f/tCMxjAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAyFJREFUOMt1k+db01AUxm+U1QKllT0KAlXUInsjoOICRREVFZGRMMrKTSFlBVoKKGgZUqZShiJDUUARFyrrHzPkJrRlnE855/09J+9z7jkAcIFhx47b2NrZO+C4g72drc3xYxgGLAITiR2dnCUuUqKkhJC6SJydHMUiCwKTnXB1cydKy8pVFRWq8rJSwt3N9YRsj8A8PL3wyqrqGhJyQdZUV1XiXp4emKB7+1Dq2jqalbiAkK6rVVM+3ojAfP3kmvoGkld5hmyo18j9fHcJ/4CTVH0jbaWzBN1YT50M8GcbiJ1wddN+fZdoUuNOYgzIPAOJZqE/ZGiaEb7JZiLQUwbEQVRLK+TNaXVtbTotbxa2tlBBYhCsIPQ0KrR3dD57/vxZZ0c7Img9oQgGp06XdkHUsvsFhbNBvehGv4RdpadPgZAzL7kU0hVqnA91BWcaki/PhICz0nKEG3p6BaC3x4Bq5dKz4FyfikuY/lf4XrzqZzhA1XcO4ANGDqAHh8zA0CDnGxoHcKDsG0bAyKgZGB1BwHCfEoSO1aL/vX5DCTr15jWq1Y6FgvNh4ygx6QkBIPQmVBsPOw/CIya0KGudnEL61CQaLdRORISDyKjpt5xlknk3w/kcmnnHF95OR0WC6Jj3s3NotMx848KHDwuN80iHc7PvY6JBbJzy46KJf0AT/ekTbeKf07T4URkXC0TxCZqWz4ywBVDYO5L53KJJiBcBLDEyaWl55eDCfFleSopMZHcOS76gLPkK968c1JekpCZzWytKu3hpVMdYLy2jG710OU2E1t4//Ypm9ZtlDwjXVjVX0/2Fw5Bdu/79x5wl8PPX0vUb5tMSZWTe/L1ovgxILv6+mZkhsjjOW1l41br5star3LNuWZ/3bTm+/IefBvP3Hy6/Y6UDkJ2qGNMjG3BOP6a4m22tAyznnkSt27UBSZ1acj9nXwOWeJCLb6ztjnptA899eEBnCe9Hms0VCFc2NY+8D9HZkT/OGzAaDMaBvMfJhwGsjScpW+vrWylPcg7VWSL/KbW9TT3NP0JnX76gcGensCDxKIC1UVRcXGRt4D+SPpTGEJHXggAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NTE6MDYrMDA6MDAGSaFUAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAClFBMVEUAAAD////////////////////////////////////////////////////////9+//58v/////////////////////////////////////////////////////////////////////////////////////+/v/////9+v/////68v/////////////////8+P/////////////////////////////////////////////////////////////////////////+/v/////////////////////////////////////+/v/////////////////////////////////////////////////////////////////////////////+/v/////////////36//16P/37P/u1P/erf/Lf/+/YP+5T//47v/kvf/Fb/+mIf+ZAf+YAP/+/v/v1//JeP+jGv+XAP+ZAP/9+//nxP+2Sv+ZAv/+/f/nw/+xPP/v1v+1R//Hdf+ZA//ku/+hFf+eDf+zQf/Daf+7Vv/it//w2v/15v/u1f+kG//Hc//x3v/dq//v2P///v/Mf/+aBf/ao//+/P/37f/AYf+rLP/oxv+8WP+yP//s0f/AYv+tM//qyv/58f/Jd/+gE//fsf/Zof/qzP+fD/+gFP/SkP/69P/05f+4Tv+kHf/Lff/s0P/8+P/bpv+bCP+cCf+xPv/Dav/Ngv/z4/+6VP+bBv/kvP+oKP/79v/UlP+dDP+dDf/26P/DaP+YAf/26f/qy/+yQf+XAf/cp/+kHv+lHv/cqP+cCP/Lfv/79//y3/+ZBP+sMP+sMf/Ulf/u1v/gtP+lH//PiP/Pif+8Wf/t0//iuf/9+v/1rAt3AAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAMmSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oBAMCvLzcnOSJcTFGGHyklJFxSWlZYWF5WBQWFhWWlJcJCUJUcEoLSNbUVlVDZWFqqmuqqyQlZEGqZCTV6iprStDkQeqKKurrVGQlwMawMWTXN+ALg9S0VCfzMPFyCAorpjW2ASzvQwIYOymxjRFcUEGLqWa5pZCqONa27Ky2lqhji1saa5R4mJQVklpL4M6rKOzq7u7q7MD6uCy9hQVZQZVtZ5eML+woK+/KBkIivr7CiAivT1qqgzqGhPA3MKy7ImTksFg0sRssEMKCyZoqDNoak2GKJ8ydVoyFEybOgUiNllLk0F7+gwwp2zmrGQ4mDUT7KzCGdO1GZJTZkMUzJmLUDB3DkTB7JRkBp3p8yAK5i9AKFgwH6Jg3nQdBt2FiyD2LV5SBJMvWrIYIrZooS6Dnv5SCKesPQ2mIK0dEpyFS/X1GAwMly2H8FasXAWRX7VyBURk+TJDAwYj49VroAG3dt16oC1F69ethQbtmtXGRgwmphs2boKq2Lxl67ZtW7dshspv2rjB1ITBzFxn+44yeGTu3AmPzrId23XMzRg4LSwrdu2GJQdQkoQxd++qsLTgZGC0MrLes3cfZoLZv3ePtZEVMM0x2tjqHDh4CD3JHdp62M7eBpxqOR0cnY4cPYaaaI8dPeLk7MAJSfZyLq4Vx08UIqkoLDx5qsLNRQ6WMQTdPfasO42sYPOZsx6eiKzF6eXtc27HebiKwvM7zvl4e3EiZU5fv+TcC4icdTFX1M8XNXv7yyZfaoEpaLmULBuAIs/AEGivsrAd4ozCze0LVYICUeUZGIND+C63gTJQYVNbMV9oMJoBQBVh4clXroKC+uqV5PAIDHmgCsnIimv7Cgv3Xa+IlMQiDwzyqOiUG1Om3EiJjrLBpgDojBi7mxcu3LSLCcYqD1QRGzft1q1pcbE45IExH59w+3ZCvBUuBUBnJCYlJaI6AABB269xUXFElwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NTE6MjArMDA6MDAnvJMTAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACbVBMVEUAAAD/////////////////////////////////////////////////////////+///8v///////////////////////////////////////////////////////////////////////////////////////v//////+v//////////////////////+P///////////////////////////////////////////////////////////////////////////v///////////////////////////////////////v///////////////////////////////////////////////////////////////////////////////v//////////////6///6P//7P//1P//rf//f///YP//T///7v//vf//b///If//Af//AP///v//1///eP//Gv//+///xP//Sv//Av///f//w///PP//1v//R///df//A///u///Ff//Df//Qf//af//Vv//t///2v//5v//1f//G///c///3v//q///2P//Bf//o////P//7f//Yf//LP//xv//WP//P///0f//Yv//M///yv//8f//d///E///sf//of//zP//D///FP//kP//9P//5f//Tv//Hf//ff//0P//+P//pv//CP//Cf//Pv//av//gv//4///VP//Bv//vP//KP//9v//lP//DP//aP//6f//y///p///Hv//qP//fv//9///3///BP//MP//Mf//lf//tP//H///iP//if//Wf//0///uf//+v8BRUUXAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAu1JREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSUFSKCkuKhQShKiglFaRra0rLyiAAVUlJeVyspIg1TIyStUVlUXYIDqqkoFeTmgAVw8STW1BVhAbU0SDxcjg6C4YmpdPTYF9XWpiuKCDFxKlQ2NMLGm5szM5iYYr7GhUomLQVkluQXmsNa29o6O9rZWmINbklWUGVTVOrug3u/uKUwCgsKebmiAdHWqqTKoa/RCuVl9YHmgir4sqJZeDXUGTYEMCK9/wsQkKJg4oR8iliGgyaA1aTKEM2VqEhxMnQIRmzxJiyEpeRqEM30GQsGM6RCxaclJDNqTZkI4s2YjFMyeBRGbOUmbQWfOXAhn3vxCmHzh/HkQsblzdBh09RbAfJ0KU5AKC5kFeroM+gYLF0F4i5cshcgvXbIYIrJooYE+g6HRsuVQ9StWrgLaUrhq5QqowPJlRoYMxiar16yFCqxbv2Hjxg3r10G5a9esNjFmMDXT3rQZEYVbtiDYmzdpm5kycJpblG7dhi26t20ttTDnZGC0NLTavmMnpnzTju1WhpbANMdobaOdsisfXT5/w25bO2twquW0d3Dc04ymIr95j6OTPSck2cs5u5Tu3YeqYN/+UldnOVjGEHRz375yLbL8ugMH3T0QWYvT08v70ObDCPnDmw95e3lyImVOH9+knCMIBUdzRH19ULO3n2zSMXjibjyWJOuPIs/AEGCnMqcF6ox1LXNUAgNQ5RkYg4L5aprBGai+uYgvJAjNAKCK0LCk4ydACk4cTwoLx5AHqpCMKD0JDPKdp0ojJLHIA4M8Mir5dH//6eSoSGtsCoDOiLY9c+TIGdvoIKzyQBUxsRPPnp0YG4NDHhjzcfHnzsXHWeJSAHRGQmJiAqoDAOgCnVLAYqeOAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1MTo0MiswMDowMHZMi70AAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAADj0lEQVRIx5WWO2xURxSGvzN7H7a0AdFRkFSQBovKqcCyBF0kmlDS0SHRpkJKEYmGEBeENImFRJMoLlLk4caJrCguEDSguMEijYMQAu+uwfZ672v+FHe93nu9fnCmO3P+f87jn7nXGDIBNPiAD5limgk+oglsssoyf/E3/7FBAcZIEzKd0CXd1yslPve+ULm897kSvdJ9XdIJmfaBhzqnu1qTL5QrUVeb2tCGNtVVolyF5LWmuzqnUCPg47qsJalQqi2tq63W0GprXVtKVUjSki5rfIfC+rWP8xlf6GNPSoLf3RruDo6YCIet8CU/s21llCDiU77S6YJtMvZtEgJCxmlgz/mceVLDAY4Jbh4OL3cytinQaW4ygQMnOM4NJv2h8GEKD5Pc4LhwhFzgiifZA9fQqlMkeLjCBUJHk2s6VpBW4EIYITExIVYhMSClQMe4RjPgDNMixVfgJdhhgCjz0yDC8KQ0sGnOBFxUU2S1XsfENAaeBg5Hb4gCMsZQ0y46pnBFZQuiCrykiIkqnRAFOKYcZ0uC4fQj3J7+OyKsEleA46zjpMzXTnMjhmm4WlYeGScd8d7Q0VoY6Y8dvu6rzv0Qv3e0rFaxx48IFb52lsOg5XiGH67N8GQjCbKKVqABnmeOR+YdrgLJSGsUIq1pxeEwzyPHApkjqOWQ0KMYeAp6JLXzAxxkLDie8NRqMzYKenTpss02Xbr0KGpSjzB4yhNHh1nzAWFtZCKj119ZTakQEmCeWTqOlAUWjZhG7draYHRWu+YNYgwWWSB1iJfcsdcBcaWMHZK6fIQjJsBec4eXyBnkLDFjPiKCfUS0C4eICCv4miVyw4HBFj8xZ4oJD6QoH9UIE3PMsWXQF6FY5RtbbhCPuIdV9cU0sH+4x2p5kitrxfOYGVsPR3RieHgxIbbODI/xxoAADHJ+Y5Zk5w0cBQ+JIWGW38ltkNNOx8UaD2zR9V+jupTLV8nJFnnA2u73dahkg2W+5XkwshPl8PiXeyxbxV+ZO3/wvXWiWhll+hHW4Tv+tBpx1Xr8wK+WjhEMKIQRMIal/MKP9DjYhD7RQylRRy211VZLHSWS9FCT4ggmdFUvvLr9f4S2uvLSC109EhyEmrqtd4U21FZbGyqkd7qt5hEJQOiU5pXnequ3yqVc8zp1ZHif4rxWvFKl8tKKzr8XHIQCXfdvvLz8G11X8J4E/U7cUkst3Tqo+v8BGqkQrMMFpyAAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjUyOjAxKzAwOjAwKNkk2QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAAD/0lEQVRIx5WVP2wcRRTGf29u9/44a5/Pd2cHEagIEgoFRYSQHMtSQkVJOsoICUVKi+gokFIgghubArAipTHCBVL448ZBFiI0caQ4whGKFRoTx3aS89k+fL7b3ZtHcb7zzdkOyWyzOzPf99773jezQsdQgAS9vMIIo7zJqwTAvyyzyG/8zj9UaIBw6FBUNKfn9Kquad3GsY001FAjja2Nta5relXPaU5FO1DSEd3nDT7kAwZiiaixS0gMeCTJkMbHUzaYYpK/iMQlUMjwLp8wHFNli01C3DhJ+snSgwd/8Dk32JV9AoUM7/Opvl6nRInQTa6lDkny5EkhS3zGD00KAYUk7/GFvrbDKtvoUSKhCH28xDHkAR8zQygIqOEtvtbTO6xQ4UiN25n08jLHkNt8xIJYo5DlEqdrrP4vvLlaYZUanOYSWcXgc4bzMSW2D9S9/7gU25SI4Txn8A0BF7SvSsmpXVES9FGgQB8Jh0RQSlTRPi4QeJxktEGZyIELOfKkSAAN6pQodwQQIsr04I1y0uOsBhFbXVoPUSS5B/BJkSbJupPjFoMkAjlrGMHUiBydsxTa8JaNCmTbfgCIqIFhxHDKml2HW8iR6uqGkCLn7FF2sYZThuMqobM5cwDeosg4MyEqHDekwDoLCcyhHjAknG8LkDJYugDW6XunuLaLELCGkuA7C3WiQyiUiLoz4yNQMtwXm3ZqjdiicYCgwZbjFUgjlvuGW8am8RynldnoomiwQdmxmkcaY7llmCXyCZwcYtZYp9qeqbLOGrETP8CHiFmPBe567wywje2wasgaFTL4QMQuOx2roBgG8OAuCx5lJs3bgclSdrKwVKhgWu3qckaWAGOZpGwImWXOp0i669gKYLHt9/34aYr4MMcsoUF5xBV5HDBIoqt9sve47UwwSIA85gqPUCMQc5MxY3MMwBEm2odDnhymwZfcJBYMCOzwPdOeFuh9JkXzRszjKdNMsyMtP6IsMy6LPRRJHkmhQJIiPcifTLDc3Gb2FLbMMyab/RSOOErNzQX6kU3GmMcKbQIQiPmZSannySKHngWhnzxSZ5JfiKVN2lJceco1mUtRJHOgDAUyFEmpzHGNp/v/1458BRb5igd9FLrOJ4BPgV74mwkWOxvrFCxwg28p5+nHdOSgGPrJQ5lv+NX1RbdiNab4KREOEbSVUISAIRIhP/IdNZ5FIPCQCe6kGdxraLN5g6ThDhM87L4tD/RMYJ5xVrIU9+7ABEWysMI4tw9etoc3/TpTUimQxWDIUkAqTHGd5x2KntAZjat6T+9pVTXWGT2hz41vUgzrktVN3VSruqTDLwQHRT29aJ9YtWqf6EX1XpAAFA30spa0pJc1OBr+H/Nbm042akI7AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1MjoyOCswMDowMP9kZncAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAAEJklEQVRIx5XVT2xc1RUG8N+9M2M79tgxJDLR1MHYjosQrdRFVFUKUSToqsuy6xJVqpDYVuy6qMSiKmSTdNHWQmKTqllUon+yIFRRVbohSAQRgRxRJXWwSQzGjpzYnsnMOyzsOPPGNoX7Nk9P9/vO+b7z5yVdJ6Bi2FEnnfI9j6vjrnlX/cu/3bSmQ7LnCZHikXguXo9b0SzarWIzNmIjNqNVFO1oxq14PZ6LRyJFFyp1Ra95ys/9zKPNtOmuVeta6DNoVN2A/vClc2Z97H4qEwQH/NjLTrSsWrTonnKcIQ0No/r4j99420Z6SBAc8FO/iu+u+Z8b1iVlpYEw6AkThqVrfu0vWxSJoM9P/LY49qWP3RL7mSQkRzzlUfkTv3RBK0lE9gO/j+PLPrQk7QvfNtqY7zskvecXrqQiBwe95Piaj/4vnCRZ8pE1jnvJwZDVPOP5phtu98BDKBSix87kthuaPO8ZtazuhRhZdb2kPYSaMVOmjKmVSJJw3aoY8YJ61YxTLQs25S549h2ThlTRds91CwoPa79pwaj+U2aqno36psVS9GTGMYM73+qGDbrWlWOyaFpfPT2bnYy8ZqOUfMOkoS7KZMikRknIhjWRncye7uQ7Jf0V44Z3+T9sXKXkwx2d7OnsSKT1nqv1PYqZ1Hto10VyJOsPnVLx+rsidZ+K/lJBO4L+rEg9gLZiT4JCu4cwUWTLyUAp1bs2SpEeZLbhbknagMRyNpeLsram21q7CFpua/Z4lQtz2bu5GFHbiZkkN833pNs272ZXq4eaEbnwbnYx3T9grCSiac6c1Z0vq+bMaZYEjDkg3Xex6ooP+n501C2drj5bN2fJQQPYdMeKdqlXK47q4wNXqlbMVn54ODfMl3qvbcnS9izYNacNh1UKs1aylosuDZgy0jO2WdLR2X7rho+YMsAlF7WysOjVvHTYjGpP+dL2Uy5nzYzD8pJXLYqcaHvH6UoxboI9OqAMZ8K4Ssdr3tFOMol7/ux8f0wa+1qKwJgn9IfzzruX2N4iYd6ZdHXUtKF9KQJDpo1KHzprfuta3tKqcNnpvNowsc8oQcWEhrzqtMuKLW/yA7u0/d1sbk5qSHvOQtIwKTfN+of2A2t3FmEKX3gjXdpKsldGYNS0oUiXvOGLh//Xh5tU4qrf+WTMpP5dGQyYMsZ/nXW1u7C5+1LibX+0MuGoSlcOoWLc46z4g3+W+yL3BNp0zt9qrWMO7TgRkkOOqbX81Z9s+jqCxKfOen/EkwbZ3sODnjTC+876tHdb9mYgcdkZC4+ZVgVV0x5jwRnv7V62uwjAm87ltUkNWd4q3ppz3vRNT4jxuBDt1Xgr3orViHZciPH4xvgtihNxrYjP4rMoIq7FiW8FJ0Q1Xiw+70Qnis/jxah+SwJC1OOVWI7leCXq+8O/AuFKp/3c1qOQAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1Mjo0MiswMDowMJ17ML4AAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAAER0lEQVRIx5XVS2xV1xXG8d/evrbxC7CpMbVSECGg2qlRU5tXDEVNOmmHzazDqFIVKdOqsw4qZVA1RZGgg7ZWpEyoyqBS+qADgpxSOglYkIQE2aFCIuGNMcEOhsu9Z3WAgXts0yb7zI7O919nfevbeycNK6BJl2/YY69vWa8Tcy4445/+5VOz6iTLrhApuuPFeDOuxL167W4xF7fjdszF3aJei3txJd6MF6M7UjSoUkP1ZgN+4sd67qRZ110xYx5tuq3Tq0t7uOmgMWfdT2VA0Ob7fm503iUf+9iMcp1ugwb1a+PffuUd8+kxIGjzI7+ILTdMmHBLVu40UFht2LCvSVN+6c8PEImgxQ/9unjmgnFT6vLyJik02eJ71svn/Mxh1SQR2bf9rhi54B/OS0/y+KHRNvqB9fJJP3U6FTlY5VUjNxz9v3KS5LyjbjDiVatC1my3l+446ZNF8lAsPLEI8YmT7vCS3ZqzTi/HyosmRIM8FFbYbJttNltRgiRhwkWx0ss6Kzbbe8dHZhusC9mQYWu0oGrahA8VHs9+1kf6dey1ueKF6JxztlQ9222X7kfv1ui1yvES4qxd2jvTC9meIl/zecnnAdsb5A9itN2AaGjkc9cU2Z7s2Vq+Wuq/YsiaRdNI1hhSKflwVS17NltXTzMl73v1LBOlrEdvaR4z6sm6rDXUSoB2LctmoEV7CVATtGZF0lz62ar6soC6aqmxZokim846SoCbbpcqPfyz226WAB0y09lkpVhbAsyZMr8EMG/KXAmwVqUwmb3XVPRpa6iZfeCUakledcoHpai16dNUeC87ku6v9HQpqnOOedflhXfhsncdK9UPT1sp3Xek4rT323duNan26INsxjHn9enCrKs+VS3Vb7ZVO+87XTFjrLJ9Yx50WlNDG/edc25hL5BLySgM2qhSGDOTVR0x3mWHPkXJzCZZTU3WVDKv0GeHLsYdUc3CJa/naxs8r3XR+NLCUx7nCqM2yNe87pLIiZrj9jUXWw2zTALKcr5jSHPdbxxXSzKJL/zJoY4Ysam045bKwyYjOsIhh3yRWPAmXLA/nem3Q88TESH02KFf+tABFx58lh/0qnDCvnxr0PATthK0GDYo37LPCUXyCECi5m/GKveGfVNadi8kA4ZV7hnzd7XHmXnoeLjhrTTeY6evLzEz0G+nnkjj3nLj8f3akI/EGb917hnbdS4BdNpmE/9xwJnGwZaOnsQ7/mDmOUNaGhChxZDnmPF7R8u5WHx23XXQX1dUn7f+kRMh2WDUiqq/+KO7/hcg8ZkDTq31XasXRsdqe/RyygGfLb76lpyeiRP2u7jFTq2g1S5buGi/k0tvzuVv8rcdzLPbDGjSZMCIPOugt33ZFeKpOBy1y/FGvBGXI2pxOJ6KL61/gBiNqXpMxmTUI6Zi9CvJCVGJV4rrtahFcT1eicpXBBCiM16L6ZiO16LzyfL/AjzmtojnBFLlAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1Mjo1NCswMDowMDIBBRoAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAAEXklEQVRIx5XVS2xdxR3H8c/MuX5g/CBGTQzkATIggQt1K7fNgzgI5YVDWmjaRdsdrRQhsa2666ISi6o0m6SLtu6CRYIS1Er0EdGYEKV1GwlbTaxGRYkCgWAiYuKH4kaxfX3PdOHg3HPttDBnNXPm9x39/vObmaCqJci0WGOzLb5orWb8xyVnnfQ3H5pWIVRpQkEe3OUrvq/Piko2G8shR1SXGvKsYtJRB/3TlBSWAhJ1HvFD39N+LUz40EVjptFipQes0a41mXBIv3eUQxGQuMNWP7Zp2rtO+YcrKov0JLPKRht0auHvfuZNN8ItQOIO3/KT9PCoYwaMiUV3EnIrbbPdauG8n/r9AiKQqNfn55UH3/GqIRXR8i2X+arvekR2wY8cNRcEUtTtV3nPv/3WiFhYubYluS/5gUfFYXudCXlMtHlRz6iD/1dOEI04aJQeL2pLojpP2HPNG4Zr5EmuoiJfyEcVYtgbrrHHE+pKmj2ft15wTF7lPUnu9LBVuOK864JbG5c7pkd3a3zeYMlDtkwbNCGrkke9drhXI2Zc9hd/lS8iogmDOrVt8VDJU6l5yqnC6tEe39CxKLjXal/wuwLilG9qbQ5PRZsr8QNXC8436KuSE3Tos6FQjas+UIk2R11z8X2panq9XvfV7EZwn171Vf3kfXNRV9QxH8YKYVnrnmWiFN1jrbxqZMx80BE1JLOFqS0al81Ao5ZCf1aiIcpDjeCG8rKAshs1wEAejWfaCm4/Nl6IzqfFHfdxoTJtMsajc/X5uoLXScOmlwCmDZss1Gad+ty56O26fJ3mqjUzJx03U5DPOO5kIWrN1qnLvR0NKN/t8SpAMOU1h723OPKew14zVWUgedzdlA2UnDHSuv5JQ8pVObviiBEPaMeEi86ZKWS13pNaGXGmZFJ/3dceixu9pVRViVmnnb55FsgK7iu2eExdrt9kNGfAiXa73F+ISZDJlJVlskL1c/fbpZ0TBsxFyWUvZ2NdntVUc/JvfdXbeafndMnGvOyyFAPzBu1ryHttY5kEFNPANr0aKn5h0HwQCVx32JG70k7d0v9AJEm3HdqSI464HrhZm+SS/eFsp11W3RaRJB2e0Sn8ywGXFqbFBbdyQ/ZlUxtt13hbQKPtNsqm7DMkDxYBBOb9SX/97E5fF5c9C9F6O9TN6vdn87cy82nNk6teCSc67Na5xEaSPGi3jhROeMXVsPi7Kh+Bs37pwpf1WbEEsMLTunnXAWert7Vw9QTe9BuTW/VqqEIkDXptZdKvHS9edrV314xD/tg096xHFyuRRF2e0zTnD16tOaa1gMCoA06v9R0rb3pnpW9bw2kHjNY+fUtuz8CQ/T7q8Ywm0GS3Hj6y3/DSl3P5l/x1h7Lpp61XUrLeTtm0Q173WVuSVqejaf5i2pv2pospzaejaXX6zPoFxKZ0vpKG0lCqpHQ+bfpccpJUSi/kn5RTOeWfpBdS6XMCSFJzeimNp/H0Umq+vfy/0JikOgfvvUIAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjUzOjA1KzAwOjAwM1Rr9AAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAADzElEQVRIx5WVTUxUVxiG33tnhmF0iJ0iCVF+NJpghTSUVNOoTTMrCS1qm4mJZVFSu+h048Jg2dCdSatb3TWkTaw2ISkbBY2waGBBJGmsoggkasEfyDhDsQjM33m6YGjnzgw4fmd1v++8z7nnnPecYykrkCSXylStD/WRGlQjv6RFTWtMv2tIM/pHacnK0lgOuaW31KQ2tSiQci3bcSstySUvPuNOa159+kV/6G9h5QOQPHpHX+lzvR21ZjWhO/pL85ICqtW7qlOlylFMl/WjxpXM/gtJCB+tDEOMQU6xEwtlNYudnGKQGMAwrfjIk7cxYRink20OaXbbRifjGJigLQuBKOEYU0mGacFeVy6ETQvDJGGKY5RkENg0MZpmiEMbitfaIYZIwyhN2KvjB+iG+xwuSi7EYe4DdBNAwkMrCy/owFU0wEUHL2CBVjwiQG+am1TkdSsjSDvtBCnLq1VwkzT0EhD7iUUI5y3WcfqZ5BnPmKSf43mLGyYCMfaLTpO4x/acXT/NQwxrYXjI6RxnbOceJkGnuJZI9eQUj/IgS76KeMDRnEF6SKS4Zqt+xR5Ttq88Cmm3nFa1tFsheRzmG9OKrXpblUlr2tG5TrvkUm64tEt1jsy0kpYqbXmNlh2Fcm1Wodiscsf3sozktWVsbXIUFhUvCIhr0fG9SbZkbEXdqnAUHuu5Y03W5vxcjx2ZCrmlqK0Jr9nrKER1XbE8QEzXFXVk9sprNGHrltfUa4uj1KNLeuXIvNIl9TgyW1Qvr9Et0czSU47k+KyaLm5nvGC4TRfVOT2O8BSWaLaoVG/8g9/0pVYcI/i0Tw2qlDSrMY3m7FSpuvWZvCP6VHg5SXqGUMFzV0JJwXyIGUhzEq+wqGEgyQB7ij7OexggCQPUYAnhppm5JS7gL0pexgWWYI5m3KzuMH6+JT3L1zmHqlCz+IY5SHEG///XqsUOrhgzSvA1CIsgoxjDZXZkvS4ImwPcSXKFmg0BNfxKEv7kAHbuy+ChnfkluihdV+7jO5Zhni/w5Jkdi62cNyuPCOEuKHcT4hFmhfNsxVJ+IBroh0EaCwLeYxAM/TSgdQLxCVNwscAdXcFFgCk+XlcuSZRyhtgC4ZyV8BFmAWJ0UKoNAaKKn4nfJ5j10LgIMg5xfqJqw/EziH2MwFVq/wPUchVghPdfK88g2niS5PuMtf38QBKe0FaUPGPtc7yMcAIPHk4QgZecy7JuEYgq+kjdpZFG7kKKviJmn4M4yGSKG9wgBZMcfCO5Vo0XNpEECUyEcObgviHCz1miRDm70ez/BYYI/lv2W3BZAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1MzoxNiswMDowMM4WcfcAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC",anchor:[.5,1]}],drawing_api:[{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAgCAYAAACLmoEDAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5wUZACIpx2TIswAABilJREFUWMO1mF9sXEcVh78zd9fetZ04TkmcKDYqJSalpaSyLUiRooqqIOWtLVKREA9FPEBUqRJ9QQjxgHgBlTZCCJXHECCgSolQKBGiRSJBSiNCGjWhMYljJ5FJ7Tje7np3bd/duzM/HtZFCazju9twpNU83J0z3znzmzN/jA5tZGSWfD7GucDWrYkVCtmPgPoly5mRARqSYqBUqVQK/f398h5qtQwXL360ozEzncL29y8zMbHFdu2af6hQyDwG7AV2A9uAPqAKzAHvbNiw4WQI4fT8/MDFwcGiOh3TOuk0OjqFc7YtBD0LfAX4LAgwbA2PEqeBwxKvmenm22/v/P/Cjo9P430wM9tlxreBZ0E9ad1ILINeA35kpkshoHPnRlKP35YMoshZCNoJ/AD0lETGLH28ZvQAX5Xokfiu1JiiOSWpzLWT1UbDbzLjBdBTYG2B3oacMeMZsBfMspvGxqZS90wNK1kEPAE8Z2YdL8wPgIGvmdkTQHRPYcfGpnHODwDP01zpLYIRIYgkEfV6sw1BaI1JNrM+0DdDCAPj4+mymypDEi4E+zToM60WkyTA9PDD3XN79+ajjRujTeVyKJ08ueQnJmrbJKyVZMx4zMweAf2FFNpNBWsmB3wBrLs1KOHxx3vff/HFzQwNZXtpTm3vvn195VdeKRROnFi6D9QC2LqBJyX+CjTW40ipWTnQQ7TQVwgwNJRd3L9/U2VoKDsI/Ad2eDg7uH//QGV4OFsKoaXjCPSppv/1LdWfJExiGy00IMGOHdn8zp1d97Xw50ZGujbv2JHJt9auDBgkZaFOKQMDyK0RCJkMGVujjplZdxRZ1BrWAOXTMKTO7KottoaBYtFXy2W/0Op7uewXSqWwtHZJtlLaHTCtZgNoEuT/+0sUwdRUkjt6tBxCUOX2byGocuRIWVNT9XzUoppKeInLEoEUlra4B+AUzUPLHcOaGXEccgcPlgYrlTDz9NMbS729bsvSUrh19Gi5fuRIeTiOQ5dzLUtXApxe9b+upcr/+Pikec/HnLM3wB5omXuJTMZ8LmdEkUXey8exaDQU3WVbnpbck1Gka2fOPLBunU2rWUWRzYIdXisLZkajoahaDdHioqdaDdE6oEHi1xDmpHSHmdQnkfHxKbznE2b8wow9afvdxd6SoueWF79xudb4Jy6AD44oCgRnGNATx+ydm+PVdmEBxsauZMGeAQ4A2zvn1GwIpe8slp4/FoW5bAMyLuB8cC6Kgg/OgkE9H8fLn1wsx+e3bGV7NrR7rbEE+D0wCnwLyLYBCBhSCI3k7KWV6g8HLBS+LFzGgcNhkROsbpdAiLtzjXNbckUH7856m2z7QLp6/rxf4udmfLHd2fH++vRy9cev++R8ySwyYbc5aAaEtNoYQDBYCeiNdjYFAM6e/TjAdTMdAF1tp69CuVSPj53yyYUiRAIL1lywqz9rtmYBLJgpmGFCPUib2oZdBVY+P/8m8DNgORWoGo0kOf33evz6VXCku2WYIZnM3pNzkx3BAvT1ve8lHZT0O0l3KT1CEt5fnoiXD52TkpAC1AAniIF3HBx3udyNjq8nt27tpF5XsavLXgIelDTaGsJQWLhZW/7tqeBvLP+vxGXNhbcamRGQloErmF0CZor5fLU/Sdo6yNxhZ88+SDZrMrPzkBwAX/kgk81mdfRQq9VrfzqVJKduNt8VbDUCmYSTDKQGsARcE/w5ymR+KfjjvmvXJoDqcKnE9JUrnT1y3G5jY1N4f2PAuc3fh+79Zi5zW5nyjeTMmZXqyydCmI/NIgNMzXtOHViSKBq6buYmPdyS0VgpFHzvwABEEVPT03do40Pb7t3HzKz/Eec2vwq5z5m5ZqFszFxdWfrJ8UbytwXIREACFM1sHpg1s5kok7mBSEJo4BMvZSJ6+vr4x4ULLQR1j+zRR09glv2S2eafmmW3K1Qr8cqvjtdWDr9rli0Cs0j/Esz15HI3V2q12MyIslmG9uzhzUOH1h3jnsECjI4ezEkj3zPr/3ojOXciXnrpsA+LVw0rRGalma6upe1xTHdXFxcnJ9v2/yEfK+40aSD2/r2Xo6j7N95fKYqZgm4UY9txP5L4/MICfygUOvb/b4OFAZuQsv++AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI4OjU5KzAwOjAwM8i5WwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMzowOTo0MSswMDowMPiypBMAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAgCAYAAACLmoEDAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5wUZACIpx2TIswAABixJREFUWMO1mE1sVNcVx3//+549Y2MMDkTMTBHCNgpVmlApi2IagVQ0SFVXlYpSKcoC1BXLrlKp6qLqKoq66gKpqzZSqciGSnXYuEVJIwWjVkIRkAhMBtt82MYej8fz4fHMe/d0MQZR8Mcbhx7p6S3uu+f87rn/d+55T2zTTp8+TbVaxXtPqVRSf3//XmCXpDQQAhHQMLOl2dnZYjabtTiOWVlZYXx8fFsxw+3CLi4ucuTIEd28efP1/v7+Y8Bx4PtABugDqsAs8GUmk/mXmY1PT09/NTg4aNuNqe1MyufzeO8zzrl3gHeBo1vNMbNx4IKkj733c1euXPn/wp48eRLnnIDDwPtm9g7QKyV2Uzezj83sA0m3nXM2NjaWOH5HMjAzmdkhSb8DfiqpUxn1Au9J6pX0a+AbILEsgqQP5vN5gAFJv5L0npmFHWT0qUlykg4DgaTx4eHhRqFQSDTXdRAkkHQSOANsC/QZC4GzwElJiROW6MFTp04RRdEeSR+uZeUFMzPMjCiKiOMY7z1PFrTBwrqBV7z3nwwPD9eTZDep5pxz7oikH2wECtjhw4dnR0ZGgp07d+6uVCpL165di+/cuZMxM60HbGbHgDeBT0mg3USw3nsHnDKz1PNB10D9sWPHFs+dO0cul9tBe8d25PP55fPnzxevXr26Zz1gSSkgD3xO+xDZPGNJMwu8zjqyMTNyuVz57NmzlVwutw94CpvL5fadOXOmks1ml9YW9bwFwBtJORI9pLZl1ttL7z2ZTKZncHBwzzr+3NDQ0CvZbLbHe7+ua2AfCet9J3UyvaGTMAy1wVskKRUEwWYvck9SgMSlCyhvAEO5XK5Wq9WF9cYrlcpCuVyubVLqll4qrJl5M5sws/gFB84xOTmZHh0d9d77yrNj3vvK6OioTU5O9ji3bqgYuAN4EliiOjs0NCRgD/Dj549YSbRarXBiYqKnVqvNZDKZmvc+tbi4OHPx4sXlS5cu5er1emoD2CbwR+B6oVDYsnQlEnY+n5eZDQJjkoY2yD5hGMapVIogCII4juPV1VWiKAo2kUAByEuaHBsb2xI2qWYNmJF0gU22LIqioFarBcvLy9RqtWALUA/8RdIsCZuZxAd8Pp9H0mtm9mdgJOm8TeyqpDOPpqfv1BsNnIfYO4LA450Q0NtocHx2lvNrExI3EYVCgcHBwWVJZeBtYOe3AJ2J4/iDyXv3rvtWq9/DLhm7zLTbOeszqU+QCqOI3tjHUe47emNvf2f9qKQW8Hczewv4paSuTinNzDdWVm7Pz80NEMc/NwgdOBwKXLvHcG1Z+EYqHV1/NV1ycGsm1kTizD7J7tDQUAu4K+l7wDAdSMmAVrN5b7FY/LzVbEpSv0k71prxXsnad7MdEn2gfsRexFAM1Y5gnwAfOnSoDMwDb5vZQNLe1sfxUmVp6Z+1avXR2k6Z2mtYu9S+SwYyqd39GNaF2VzHsE+ADxw4MCnJAceTyMHMolq1+kW5VLph7RYsQSQJM5n0yKRrnRy3/2NdXV2xmf0J+BtblB4zY3V19eulUum6994nABXgDBrAlw4uu3T64bb/GzSbTXp6ekpRFH1oZt8F3toIwsfx3HKp9EXUbNbXWYpArHWQhvCY1YG7SLeB+6WenuquVit56XrepqamOHjwIMBjM6tJOrXWTD/NpiTM+9Xl5eUrlXK5AE8/cdrbixwIYRFoBXho4j9hGH7qvb/1k6mp2bu7dzdfrdX4enp6ez85nrV8Pk+j0Rjo6ur6rXPunKTwKahZ3KjX/73w+PFnURQ11tpIrY03gZoZJWFTkpuIYd5EtFIsxjsGBiAI+OaZb7NvDQswMjKi7u7uN8MwPC/ph0/k0Go27xXn5y+v1OsLtA+gFlCS9Jj28X0/CMOHGC3vI+JWbBYG9Pb1cfPGjRfivBRYgBMnTiDpZ2EY/kFSNo7jSnlx8fJSqXTLOVcCZjB7YDDbm07PrayuNiQRdHWxf2SEf3z00ZYxXhoswNGjR9PpdPo3QRD8olFf+aw4//hCFMf3BMVAWrrf3V3LNhqkurv5amKiY//brgbrWRAEjVar9Xsn99dms1WKvC/6Bw8awf79mBk/Wljgk2Jx2/7/C8D87PcyjeWGAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI4OjU5KzAwOjAwM8i5WwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMzoxMTowOSswMDowMJ1Oe7oAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]}]};var cv=vt.getLogger("DrawingDOM"),uv={_addUID:function(e){return this._uid?e+"-"+this._uid:e},_createMainContainerElement:function(){var e=document.createElement("div");return e.id=this._addUID("GPdrawing"),e.className="GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen",e},_createShowDrawingPictoElement:function(){var e=this,t=document.createElement("button"),n=document.createElement("span");return t.appendChild(n),t.id=this._addUID("GPshowDrawingPicto"),t.className="GPshowOpen GPshowAdvancedToolPicto GPshowDrawingPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-drawing fr-btn fr-btn--tertiary",t.setAttribute("aria-label",this.options.labels.control),t.setAttribute("tabindex","0"),t.setAttribute("aria-pressed",!1),t.setAttribute("type","button"),t.addEventListener?t.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowDrawingClick(t)})):t.attachEvent&&t.attachEvent("onclick",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowDrawingClick(t)})),t},_createDrawingPanelElement:function(){var e=document.createElement("dialog");return e.id=this._addUID("GPdrawingPanel"),e.className="GPpanel gpf-panel fr-modal",e},_createDrawingPanelDivElement:function(){var e=document.createElement("div");return e.className="gpf-panel__body fr-modal__body",e},_createDrawingToolsDivSections:function(){var e=document.createElement("div");return e.className="gpf-panel__content fr-modal__content",e},_createDrawingPanelHeaderElement:function(){var e=document.createElement("div");e.className="GPpanelHeader gpf-panel__header fr-modal__header fr-m-1w";var t=document.createElement("div");t.className="GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w",t.innerHTML=this.options.controlLabel||"Annoter la carte",e.appendChild(t);var n=document.createElement("button");n.id=this._addUID("GPdrawingPanelClose"),n.className="GPpanelClose GPdrawingPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w",n.title="Fermer le panneau";var r=this;n.addEventListener?n.addEventListener("click",(function(){document.getElementById(r._addUID("GPshowDrawingPicto")).click()}),!1):n.attachEvent&&n.attachEvent("onclick",(function(){document.getElementById(r._addUID("GPshowDrawingPicto")).click()}));var i=document.createElement("span");return i.className="GPelementHidden gpf-visible",i.innerText="Fermer",n.appendChild(i),e.appendChild(n),e},_createDrawingToolsSections:function(){var e=[];return this.dtOptions={},this.options.tools.points&&(this.dtOptions.points={label:this.options.labels.points,active:!1,panel:"draw",id:"point"}),this.options.tools.lines&&(this.dtOptions.lines={label:this.options.labels.lines,active:!1,panel:"draw",id:"line"}),this.options.tools.polygons&&(this.dtOptions.polygons={label:this.options.labels.polygons,active:!1,panel:"draw",id:"polygon"}),this.options.tools.holes&&(this.dtOptions.holes={label:this.options.labels.holes,active:!1,panel:"draw",id:"holes"}),this.options.tools.text&&(this.dtOptions.text={label:this.options.labels.text,active:!1,panel:"draw",id:"text"}),this.options.tools.edit&&(this.dtOptions.edit={label:this.options.labels.edit,active:!1,panel:"edit",id:"edit"}),this.options.tools.display&&(this.dtOptions.display={label:this.options.labels.display,active:!1,panel:"edit",id:"display"}),this.options.tools.tooltip&&(this.dtOptions.tooltip={label:this.options.labels.tooltip,active:!1,panel:"edit",id:"tooltip"}),this.options.tools.remove&&(this.dtOptions.remove={label:this.options.labels.remove,active:!1,panel:"edit",id:"remove"}),(this.dtOptions.points||this.dtOptions.lines||this.dtOptions.polygons||this.dtOptions.text)&&e.push(this._createDrawingToolSection(this.options.labels.creatingTools,"draw")),(this.dtOptions.edit||this.dtOptions.display||this.dtOptions.tooltip||this.dtOptions.remove)&&e.push(this._createDrawingToolSection(this.options.labels.editingTools,"edit")),this.options.tools.export&&e.push(this._createSavingSection(this.options.labels.export,this.options.labels.exportTitle)),e},_createDrawingToolSection:function(e,t){var n=document.createElement("div");n.className="drawing-tool-section fr-m-1w";var r=document.createElement("p");r.className="drawing-tool-section-title fr-m-1w",r.innerHTML=e,n.appendChild(r);var i=document.createElement("div");i.className="drawing-tools-flex-display fr-m-1w";var o=this;function a(e){o._handleDOMToolClick(e,this.id,o),o._handleToolClick(e,this.id,o)}for(var s in this.dtOptions)if(this.dtOptions[s].panel===t){var l=document.createElement("button");l.className="drawing-tool fr-m-1w fr-btn fr-btn--tertiary gpf-btn--tertiary",l.id=this._addUID("drawing-tool-"+this.dtOptions[s].id),l.title=this.dtOptions[s].label,l.addEventListener("click",a),i.appendChild(l)}return n.appendChild(i),n},_createSavingSection:function(e,t){var n=document.createElement("div");n.className="drawing-tool-section drawing-tools-flex-display fr-m-1w";var r=document.createElement("button");r.title=t,r.className="tool-form-submit drawing-button fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w",r.id=this._addUID("drawing-export"),r.setAttribute("type","button"),r.textContent=e;var i=this;return r.onclick=function(){i.onExportFeatureClick()},n.appendChild(r),n},_createMarkersChooser:function(e){var t=document.createElement("div");t.className=e.className;for(var n=0;n1))return Iv.log("Wrong value ("+e.defaultStyles[r]+") for defaultStyles.polyFillOpactity. Must be between 0 and 1"),void(n.options.defaultStyles[r]=t.DefaultStyles[r]);if("strokeWidth"===r||"polyStrokeWidth"===r){var i=parseInt(e.defaultStyles[r],10);if(isNaN(i)||i<0)return Iv.log("Wrong value ("+e.defaultStyles[r]+") for defaultStyles.strokeWidth. Must be a positive interger value."),void(n.options.defaultStyles[r]=t.DefaultStyles[r]);n.options.defaultStyles[r]=i}if("markerSize"===r){var o=parseFloat(e.defaultStyles[r]);if(isNaN(o)||o<0)return Iv.log("Wrong value ("+e.defaultStyles[r]+") for defaultStyles.markerSize. Must be a positive value."),void(n.options.defaultStyles[r]=t.DefaultStyles[r]);n.options.defaultStyles[r]=o}}else n.options.defaultStyles[r]=t.DefaultStyles[r]})),this.interactionCurrent=null,this.interactionSelectEdit=null,this.featuresCollectionSelected=null,this.stylingOvl=null,this.popupOvl=null,this.layer=null,this.options.layer&&this.options.layer instanceof ii()&&(this.layer=this.options.layer),this._isDesktop=this._detectSupport(),this.options.popup||(this.options.popup={display:!0,apply:null})}},{key:"_createEmptyLayer",value:function(){var e=new(iv()),t=new(ii())({source:new(a())({features:e}),title:"Mon Croquis"});t.gpResultLayerId="drawing",this.setLayer(t)}},{key:"_detectSupport",value:function(){var e=!0,t=window.navigator.userAgent.toLowerCase();return-1===t.indexOf("iphone")&&-1===t.indexOf("ipod")&&-1===t.indexOf("ipad")&&-1===t.indexOf("android")&&-1===t.indexOf("mobile")&&-1===t.indexOf("blackberry")&&-1===t.indexOf("tablet")&&-1===t.indexOf("phone")&&-1===t.indexOf("touch")||(e=!1),-1===t.indexOf("msie")&&-1===t.indexOf("trident")||(e=!0),e}},{key:"_initContainer",value:function(){var e=this._createMainContainerElement(),t=this._showDrawingButton=this._createShowDrawingPictoElement();e.appendChild(t);var n=this._drawingPanel=this._createDrawingPanelElement(),r=this._createDrawingPanelDivElement();n.appendChild(r);var i=this._drawingPanelHeader=this._createDrawingPanelHeaderElement();r.appendChild(i);var o=this._createDrawingToolsDivSections();r.appendChild(o);for(var a=this._createDrawingToolsSections(),s=0;s0){var o={};o[t]=n.replace(/\n/g,"
"),e.setProperties(o)}},a=null,s=!0,l=this.options.popup.function;l&&"function"==typeof l&&(a=l.call(i,{feature:e,geomType:t,closeFunc:function(){o(null,!1)},saveFunc:function(e){o(e,!0)}}))&&(s=!1,a.tabIndex=-1,a.onblur=function(){i.getMap().removeOverlay(i.popupOvl),i.popupOvl=null}),s&&(a=this._createLabelDiv({applyFunc:o,inputId:this._addUID("att-input"),placeholder:"Saisir une description...",measure:this.options.tools.measure?e.getProperties().measure:null,geomType:t,key:"description"})),this.popupOvl&&(this.getMap().removeOverlay(this.popupOvl),this.popupOvl=null),this.popupOvl=new(n())({element:a,positioning:"top-center"}),this.getMap().addOverlay(this.popupOvl);var c=e.getGeometry().getExtent();this.popupOvl.setPosition([(c[0]+c[2])/2,(c[1]+c[3])/2]),document.getElementById(this._addUID("att-input"))&&document.getElementById(this._addUID("att-input")).focus()}}},{key:"_createRemoveInteraction",value:function(){var e=this,t=new h.Select({layers:[this.layer],style:!1});return t.on("select",(function(t){t&&t.selected&&0!==t.selected.length&&(e.layer.getSource().removeFeature(t.selected[0]),e.getMap().removeInteraction(e.interactionCurrent),e.interactionCurrent=e._createRemoveInteraction(),e.getMap().addInteraction(e.interactionCurrent))})),t}},{key:"_createStylingInteraction",value:function(){var e=this,t=new h.Select({layers:[this.layer],style:!1});return t.on("select",(function(t){if(e.stylingOvl&&e.getMap().removeOverlay(e.stylingOvl),t&&t.selected&&0!==t.selected.length){var r=null,i=null,o=null,a=null,s={},l=t.selected[0].getGeometry(),c=t.selected[0].getStyle();if(l instanceof ov.Point||l instanceof ov.MultiPoint){if(c&&c.getImage()&&"function"==typeof c.getImage().getSrc&&c.getImage().getSrc()!==e.options.defaultStyles.textIcon1x1.src&&(a="Point","function"==typeof c.getImage().getSrc?(s.markerSrc=c.getImage().getSrc(),s.markerSize=c.getImage().getScale()||1,s.markerAnchor=c.getImage().getAnchor(),c.getImage().getColor()?(r=c.getImage().getColor(),Array.isArray(r)?r="rgba("+r.join()+")":s.markerColor=r,i=xt.isRGB(r)?xt.rgbaToHex(r):{hex:r,opacity:1},s.markerColor=i.hex,s.markerOpacity=i.opacity):s.markerColor=e.options.markersList[0].color||"#ffffff"):(s.markerSrc=e.options.markersList[0].src,s.markerSize=e.options.markersList[0].scale||1,s.markerColor=e.options.markersList[0].color||"#ffffff",s.markerAnchor=e.options.markersList[0].anchor),s.markerCustom=!e._getsMarkersOptionsFromSrc(s.markerSrc)),c&&c.getText()){var u=t.selected[0].getProperties().name;if(u&&(a="Point"===a?"Point&Text":"Text",c.getText().getStroke()&&c.getText().getStroke().getColor()&&(r=c.getText().getStroke().getColor(),Array.isArray(r)?r="rgba("+r.join()+")":s.strokeColor=r,i=xt.isRGB(r)?xt.rgbaToHex(r):{hex:r,opacity:1},s.strokeColor=i.hex,s.strokeOpacity=i.opacity),c.getText().getStroke()&&c.getText().getStroke().getWidth()&&(s.strokeWidth=c.getText().getStroke().getWidth()),c.getText().getFill()&&c.getText().getFill().getColor()&&(r=c.getText().getFill().getColor(),Array.isArray(r)?r="rgba("+r.join()+")":s.fillColor=r,i=xt.isRGB(r)?xt.rgbaToHex(r):{hex:r,opacity:1},s.fillColor=i.hex,s.fillOpacity=i.opacity),s.strokeColor=s.hasOwnProperty("strokeColor")?s.strokeColor:e.options.defaultStyles.textStrokeColor,s.strokeWidth=s.hasOwnProperty("strokeWidth")?s.strokeWidth:e.options.defaultStyles.textStrokeWidth,s.fillColor=s.hasOwnProperty("fillColor")?s.fillColor:e.options.defaultStyles.textFillColor,"Point&Text"===a)){c.getText().getText()||c.getText().setText(u);var d=t.selected[0].get("checked");s.labelDisplay=void 0===d?e.options.defaultStyles.labelDisplay:d}}}else l instanceof ov.LineString||l instanceof ov.MultiLineString?(a="Line",c&&c.getStroke()&&(c.getStroke().getWidth()&&(s.strokeWidth=c.getStroke().getWidth()),c.getStroke().getColor()&&(r=c.getStroke().getColor(),Array.isArray(r)?r="rgba("+r.join()+")":s.strokeColor=r,i=xt.isRGB(r)?xt.rgbaToHex(r):{hex:r,opacity:1},s.strokeColor=i.hex,s.strokeOpacity=i.opacity)),s.strokeWidth=s.hasOwnProperty("strokeWidth")?s.strokeWidth:e.options.defaultStyles.strokeWidth,s.strokeColor=s.hasOwnProperty("strokeColor")?s.strokeColor:e.options.defaultStyles.strokeColor):(l instanceof ov.Polygon||l instanceof ov.MultiPolygon)&&(a="Polygon",c&&c.getStroke()&&(c.getStroke().getWidth()&&(s.strokeWidth=c.getStroke().getWidth()),c.getStroke().getColor()&&(r=c.getStroke().getColor(),Array.isArray(r)?r="rgba("+r.join()+")":s.strokeColor=r,i=xt.isRGB(r)?xt.rgbaToHex(r):{hex:r,opacity:1},s.strokeColor=i.hex,s.strokeOpacity=i.opacity)),c&&c.getFill()&&c.getFill().getColor()&&(r=c.getFill().getColor(),Array.isArray(r)?r="rgba("+r.join()+")":s.fillColor=r,i=xt.isRGB(r)?xt.rgbaToHex(r):{hex:r,opacity:1},s.fillColor=i.hex,s.fillOpacity=i.opacity),s.strokeWidth=s.hasOwnProperty("strokeWidth")?s.strokeWidth:e.options.defaultStyles.polyStrokeWidth,s.strokeColor=s.hasOwnProperty("strokeColor")?s.strokeColor:e.options.defaultStyles.polyStrokeColor,s.fillColor=s.hasOwnProperty("fillColor")?s.fillColor:e.options.defaultStyles.polyFillColor,s.fillOpacity=s.hasOwnProperty("fillOpacity")?s.fillOpacity:e.options.defaultStyles.polyFillOpacity);if(a){var p=e,h=e._createStylingDiv({geomType:a,initValues:s,applyFunc:function(e){if("cancel"!==e){var n="apply"!==e,r=document.getElementById(p._addUID("fillColor")),i=document.getElementById(p._addUID("fillOpacity")),l=document.getElementById(p._addUID("strokeColor")),u=document.getElementById(p._addUID("strokeWidth")),d=document.getElementById(p._addUID("markerSize"));switch(a.toLowerCase()){case"text":n?(p.options.defaultStyles.textStrokeColor=l.value,p.options.defaultStyles.textStrokeWidth=u.value,p.options.defaultStyles.textFillColor=r.value):t.selected[0].setStyle(new St.Style({text:new St.Text({font:"16px sans",textAlign:"left",text:c.getText().getText(),fill:new St.Fill({color:r.value}),stroke:new St.Stroke({color:l.value,width:parseInt(u.value,10)})})}));break;case"point&text":case"point":var h=document.querySelector("input[type='checkbox']"),g=null,f=parseInt(d.value,10)/10,m=document.querySelector("input[name='marker']:checked");if(m&&((g=p._getsMarkersOptionsFromSrc(m.value)).scale=f),n){if(p.options.defaultStyles.markerSize=f,p.options.markersList.length>1){var y=p.options.markersList.findIndex((function(e){return e===g}));y>0&&(p.options.markersList.splice(y,1),p.options.markersList.splice(0,0,g))}"point&text"===a.toLowerCase()&&(p.options.defaultStyles.textStrokeColor=s.strokeColor,p.options.defaultStyles.textStrokeWidth=s.strokeWidth,p.options.defaultStyles.textFillColor=s.fillColor,p.options.defaultStyles.labelDisplay=s.labelDisplay)}else{var v={};"point&text"===a.toLowerCase()&&(t.selected[0].set("checked",h.checked),v={text:new St.Text({font:"16px sans",textAlign:"left",text:h.checked?t.selected[0].get("name"):"",fill:new St.Fill({color:s.fillColor}),stroke:new St.Stroke({color:s.strokeColor,width:parseInt(s.strokeWidth,10)})})}),g?t.selected[0].setStyle(new St.Style(Object.assign({image:new St.Icon(p._getIconStyleOptions(g))},v))):t.selected[0].setStyle(new St.Style(Object.assign({image:new St.Icon({src:s.markerSrc,anchor:s.markerAnchor,anchorOrigin:"top-left",anchorXUnits:"pixels",anchorYUnits:"pixels",scale:f})},v)))}break;case"line":n?(p.options.defaultStyles.strokeColor=l.value,p.options.defaultStyles.strokeWidth=parseInt(u.value,10)):t.selected[0].setStyle(new St.Style({stroke:new St.Stroke({width:parseInt(u.value,10),color:l.value})}));break;case"polygon":var A=parseInt(i.value,10)/10;n?(p.options.defaultStyles.polyStrokeColor=l.value,p.options.defaultStyles.polyFillColor=r.value,p.options.defaultStyles.polyFillOpacity=A,p.options.defaultStyles.polyStrokeWidth=parseInt(u.value,10)):t.selected[0].setStyle(new St.Style({stroke:new St.Stroke({width:parseInt(u.value,10),color:l.value}),fill:new St.Fill({color:xt.hexToRgba(r.value,A)})}))}n||p.getMap().removeOverlay(o)}else p.getMap().removeOverlay(o)}});o=new(n())({element:h,positioning:"top-center"}),e.getMap().addOverlay(o),o.setPosition(t.mapBrowserEvent.coordinate),e.stylingOvl=o,e.getMap().removeInteraction(e.interactionCurrent),e.interactionCurrent=e._createStylingInteraction(),e.getMap().addInteraction(e.interactionCurrent)}else Iv.log("Unhandled geometry type for styling.")}})),t}},{key:"_createLabelInteraction",value:function(){var e=this,t=new h.Select({layers:[this.layer],style:!1});return t.on("select",(function(t){if(e.labelOvl&&e.getMap().removeOverlay(e.labelOvl),t&&t.selected&&0!==t.selected.length){var r=null,i=null,o=null,a=null,s=t.selected[0].getGeometry(),l=t.selected[0].getStyle();if(s instanceof ov.Point||s instanceof ov.MultiPoint){var c=t.selected[0].getProperties().name;l&&l.getText()&&c?i="Text":l&&l.getImage()&&(i="Point")}else if(s instanceof ov.LineString||s instanceof ov.MultiLineString)i="Line";else{if(!(s instanceof ov.Polygon||s instanceof ov.MultiPolygon))return void Iv.log("Geometry type for styling not supported .");i="Polygon"}if(i){if("Text"===i)o=l.getText().getText();else{var u=t.selected[0].getProperties();u&&(u.hasOwnProperty("description")||u.hasOwnProperty("desc"))&&(o=u.description||u.desc),u&&u.hasOwnProperty("measure")&&(a=u.measure)}var d=e,p=e._createLabelDiv({applyFunc:function(e,n,o){if(d.getMap().removeOverlay(r),o){var a=t.selected[0];if("Text"===i){var s=a.getStyle();return s.getText().setText(n),a.setProperties({name:n}),void a.setStyle(s)}var l={};l[e]=n.replace(/\n/g,"
"),a.setProperties(l)}},inputId:e._addUID("label-input"),placeholder:"Text"===i?"Saisir un label...":"Saisir une description...",text:o,key:"description",measure:e.options.tools.measure?a:null,geomType:i});r=new(n())({element:p,positioning:"top-center"}),e.getMap().addOverlay(r),r.setPosition(t.mapBrowserEvent.coordinate),document.getElementById(e._addUID("label-input")).focus(),e.labelOvl=r,e.getMap().removeInteraction(e.interactionCurrent),e.interactionCurrent=e._createLabelInteraction(),e.getMap().addInteraction(e.interactionCurrent)}else Iv.log("Unhandled geometry type for styling.")}})),t}},{key:"_updateMeasure",value:function(e,t){Iv.log(e);var n=null,r=this.getMap().getView().getProjection();function i(e,t){t=t||2;var n=Math.pow(10,t);return Math.round(e*n)/n}var o=t||e.getProperties().type;switch(o){case"Point":var a=e.getGeometry().getCoordinates(),s=(0,Dr.transform)(a,r,"EPSG:4326");n="lon : ",n+=i(s[0],4)+"°",n+=" / ",n+="lat : ",n+=i(s[1],4)+"°";break;case"LineString":for(var l=0,c=e.getGeometry().getCoordinates(),u=0,d=c.length-1;u1e3?i(l/1e3,3)+" km":i(l,3)+" m";break;case"Polygon":var g=0,f=e.getGeometry().clone(),m=f.getLinearRing(0).getCoordinates();g=Math.abs((0,sv.getArea)(new ov.Polygon([m])));var y=f.getLinearRings();if(y.length>1)for(var v=1;v1e6?i(g/1e6,3)+" km^2":i(g,2)+" m^2"}e.setProperties({measure:n,type:o})}},{key:"_handleToolClick",value:function(e,t,r){var i=this,o=r.getMap();if(o){switch(Th.unset(o,{current:"Drawing"}),r.interactionCurrent&&(o.removeInteraction(r.interactionCurrent),r.interactionCurrent=null),r.interactionSelectEdit&&(o.removeInteraction(r.interactionSelectEdit),r.interactionSelectEdit=null),r.popupOvl&&(r.getMap().removeOverlay(r.popupOvl),r.popupOvl=null),this.layer||this._createEmptyLayer(),t){case this._addUID("drawing-tool-point"):r.dtOptions.points.active&&(r.interactionCurrent=new h.Draw({stopClick:!0,source:r.layer.getSource(),style:new St.Style({image:new St.Icon(this._getIconStyleOptions(this.options.markersList[0]))}),type:"Point"}),r.interactionCurrent.on("drawend",(function(e){r._drawEndFeature(e.feature,"Point")}),r));break;case this._addUID("drawing-tool-line"):r.dtOptions.lines.active&&(r.interactionCurrent=new h.Draw({stopClick:!0,source:r.layer.getSource(),style:new St.Style({image:new St.Circle({radius:this.options.cursorStyle.radius,stroke:new St.Stroke({color:this.options.cursorStyle.strokeColor,width:this.options.cursorStyle.strokeWidth}),fill:new St.Fill({color:this.options.cursorStyle.fillColor})}),stroke:new St.Stroke({color:this.options.defaultStyles.strokeColor,width:this.options.defaultStyles.strokeWidth})}),type:"LineString"}),r.interactionCurrent.on("drawend",(function(e){r._drawEndFeature(e.feature,"LineString")}),r));break;case this._addUID("drawing-tool-polygon"):r.dtOptions.polygons.active&&(r.interactionCurrent=new h.Draw({stopClick:!0,source:r.layer.getSource(),style:new St.Style({image:new St.Circle({radius:this.options.cursorStyle.radius,stroke:new St.Stroke({color:this.options.cursorStyle.strokeColor,width:this.options.cursorStyle.strokeWidth}),fill:new St.Fill({color:this.options.cursorStyle.fillColor})}),stroke:new St.Stroke({color:this.options.defaultStyles.polyStrokeColor,width:this.options.defaultStyles.polyStrokeWidth}),fill:new St.Fill({color:xt.hexToRgba(this.options.defaultStyles.polyFillColor,this.options.defaultStyles.polyFillOpacity)})}),type:"Polygon"}),r.interactionCurrent.on("drawend",(function(e){r._drawEndFeature(e.feature,"Polygon")}),r));break;case this._addUID("drawing-tool-holes"):r.dtOptions.holes.active&&(r.interactionSelectEdit=new h.Select({stopClick:!0,condition:av.pointerMove,layers:[this.layer]}),r.interactionSelectEdit.setProperties({name:"Drawing",source:r}),o.addInteraction(r.interactionSelectEdit),r.interactionCurrent=new h.Draw({stopClick:!0,features:this.interactionSelectEdit.getFeatures(),style:new St.Style({image:new St.Circle({radius:this.options.cursorStyle.radius,stroke:new St.Stroke({color:this.options.cursorStyle.strokeColor,width:this.options.cursorStyle.strokeWidth}),fill:new St.Fill({color:this.options.cursorStyle.fillColor})}),stroke:new St.Stroke({color:this.options.defaultStyles.polyStrokeColor,width:this.options.defaultStyles.polyStrokeWidth}),fill:new St.Fill({color:xt.hexToRgba(this.options.defaultStyles.polyFillColor,this.options.defaultStyles.polyFillOpacity)})}),type:"Polygon"}),r.interactionCurrent.on("drawstart",(function(e){}),r),r.interactionCurrent.on("drawend",(function(e){var t=r.interactionSelectEdit.getFeatures();if(t.getLength()){for(var n=t.item(0),i=e.feature.getGeometry().getCoordinates()[0],o=!0,a=0;a2?(document.getElementById(t._addUID("GPlocationAutoCompleteList_"+r)).classList.replace("GPelementHidden","GPelementVisible"),document.getElementById(t._addUID("GPlocationAutoCompleteList_"+r)).classList.replace("gpf-hidden","gpf-visible")):(document.getElementById(t._addUID("GPlocationAutoCompleteList_"+r)).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPlocationAutoCompleteList_"+r)).classList.replace("gpf-visible","gpf-hidden")),t.onAutoCompleteSearchText(e)}})),n.addEventListener("keydown",(function(n){var r=n.which||n.keyCode,i=document.getElementById(t._addUID("GPlocationAutoCompleteResult_"+e));if(i){var o=i.getElementsByClassName("GPautoCompleteProposal current"),a=i.getElementsByClassName("GPautoCompleteProposal"),s=a.length;if(s){var l=null;if(!o.length)return(l=a[0]).className="GPautoCompleteProposal current",l.style.color="#000000",void(l.style["background-color"]="#CEDBEF");l=o[0];var c=parseInt(ju.index(l.id),10),u=c===s-1?a[0]:a[c+1],d=0===c?a[s-1]:a[c-1];switch(l.style["background-color"]="",l.style.color="",d.style["background-color"]="",d.style.color="",u.style["background-color"]="",u.style.color="",r){case 38:wv.log("arrow up"),l.className="GPautoCompleteProposal",d.className="GPautoCompleteProposal current",d.style.color="#000000",d.style["background-color"]="#CEDBEF";break;case 40:wv.log("arrow down"),l.className="GPautoCompleteProposal",u.className="GPautoCompleteProposal current",u.style.color="#000000",u.style["background-color"]="#CEDBEF";break;case 13:wv.log("enter"),l.click(n)}l.focus()}}})),n},_createLocationCoordinateInputElement:function(e){var t=this,n=document.createElement("input");return n.id=this._addUID("GPlocationOriginCoords_"+e),n.className="GPelementHidden gpf-input gpf-hidden fr-input",n.type="text",n.disabled=!1,n.addEventListener("click",(function(){var e=ju.index(this.id);document.getElementById(t._addUID("GPlocationOriginLabel_"+e)).click()})),n},_createLocationPointerShowInputElement:function(e){var t=document.createElement("input");return t.id=this._addUID("GPlocationOriginPointer_"+e),t.className="GPelementHidden gpf-hidden",t.type="checkbox",t},_createLocationPointerInputElement:function(e){var t=this,n=document.createElement("button");return n.id=this._addUID("GPlocationOriginPointerImg_"+e),n.htmlFor=this._addUID("GPlocationOriginPointer_"+e),n.className="GPlocationOriginPointerImg gpf-btn gpf-btn-icon-pointer fr-btn",n.title="Pointer un lieu sur la carte",n.setAttribute("type","button"),n.addEventListener("click",(function(e){e.preventDefault(),e.stopPropagation();var n,r,i,o=ju.index(this.id),a=document.getElementsByClassName(t._addUID("GPlocationPoint"));for(n=0;n",display:!0,addOption:!1,removeOption:!1},displayInfo:!0,autocompleteOptions:{}},rn.mergeParams(this.options,e),this._uid=this.options.tag.groupId||ju.generate(),this._map=null,this._inputsContainer=null,this._buttonLabel=null,this._inputAutoComplete=null,this._inputShowPointerContainer=null,this._inputShowPointer=null,this._inputCoordinateContainer=null,this._addPointElement=null,this._removePointElement=null,this._coordinate=null,this._suggestedContainer=null,this._suggestedList=null,this._suggestedLocations=[],this._currentLocation=null,this._initMarker(),this._resources={},this.listenerKey=null}},{key:"_initMarker",value:function(){if(this._marker=null,this._markerUrl="",this._markerOffset=[0,0],this.options.tag.markerOpts&&this.options.tag.markerOpts.url){this._markerUrl=this.options.tag.markerOpts.url;var e=this.options.tag.markerOpts.offset;e&&(Array.isArray(e)&&2===e.length?this._markerOffset=e:Ov.log("markerOpts.offset should be an array. e.g. : [0,0]"))}else this._markerUrl=Gt.lightOrange,this._markerOffset=Gt.defaultOffset}},{key:"getCoordinate",value:function(){return this._coordinate}},{key:"setCoordinate",value:function(e,t){var n=this.getMap().getView().getProjection().getCode();t||(t=n),this._setCoordinate(e,t),e=(0,Dr.transform)(e,t,n),this._setMarker([e[0],e[1]],null,!1)}},{key:"clear",value:function(){this.clearResults(),this._buttonLabel.click()}},{key:"clearResults",value:function(){this._currentLocation=null,this._coordinate=null,this._hideSuggestedLocation(),this._clearSuggestedLocation(),this._setMarker(),(0,bi.unByKey)(this.listenerKey)}},{key:"_initContainer",value:function(){var e=this,t=this.options.tag.id,n=this._createMainContainerElement(),r=this._inputsContainer=this._createLocationPointElement(t,this.options.tag.display);n.appendChild(r);var i=this._buttonLabel=this._createLocationPointLabelElement(t,this.options.tag.label);r.appendChild(i);var o=this._inputAutoComplete=this._createLocationAutoCompleteteInputElement(t);o.addEventListener?o.addEventListener("click",(function(){return e.onAutoCompleteInputClick()})):o.attachEvent&&o.attachEvent("onclick",(function(){return e.onAutoCompleteInputClick()})),r.appendChild(o);var a=this._inputCoordinateContainer=this._createLocationCoordinateInputElement(t);r.appendChild(a);var s=this._inputShowPointerContainer=this._createLocationPointerShowInputElement(t);r.appendChild(s);var l=this._inputShowPointer=this._createLocationPointerInputElement(t);if(r.appendChild(l),this.options.tag.addOption){var c=this._addPointElement=this._createLocationAddPointElement();r.appendChild(c)}if(this.options.tag.removeOption){var u=this._removePointElement=this._createLocationRemovePointElement(t);r.appendChild(u)}var d=this._suggestedContainer=this._createLocationAutoCompleteElement(t),p=this._suggestedList=this._createLocationAutoCompleteResultElement(t);return d.appendChild(p),n.appendChild(d),n}},{key:"onAutoCompleteInputClick",value:function(){this._inputAutoComplete&&this._inputAutoComplete.value.length>2&&this._displaySuggestedLocation()}},{key:"onAutoCompleteSearchText",value:function(e){var t=this,n=e.target.value;if(n){var r=this.options.autocompleteOptions||{},i=r.onSuccess||null,o=r.onFailure||null;if(this._currentLocation=n,n.length<3)this._clearSuggestedLocation();else{var a=this;this._requestAutoComplete({text:n,maximumResponses:5,onSuccess:function(e){if(e){var t=e.suggestedLocations;a._fillAutoCompletedLocationListContainer(t),i&&i.call(this,e)}},onFailure:function(e){a._clearSuggestedLocation(),Ov.log(e.message),o&&o.call(this,e)}});var s=this.getMap();s.on("click",(function(){return t._hideSuggestedLocation()})),s.on("pointerdrag",(function(){return t._hideSuggestedLocation()}))}}}},{key:"onAutoCompletedResultsItemClick",value:function(e){var t=ju.index(e.target.id);if(t){var n=[this._suggestedLocations[t].position.x,this._suggestedLocations[t].position.y];this._coordinate=n;var r={type:this._suggestedLocations[t].type,fields:this._suggestedLocations[t]},i=Nh.getSuggestedLocationFreeform(this._suggestedLocations[t]);this._setLabel(i);var o=this.getMap().getView().getProjection().getCode();"EPSG:4326"!==o&&(n=(0,Dr.transform)(n,"EPSG:4326",o)),this._setPosition(n),this._setMarker(n,r,this.options.displayInfo)}}},{key:"onActivateMapPointClick",value:function(){var e=this,t=this.getMap();this._inputShowPointerContainer.checked?(this.clearResults(),this.listenerKey=t.on("click",(function(t){return e.onMouseMapClick(t)})),this._setCursor("crosshair")):((0,bi.unByKey)(this.listenerKey),this._setCursor())}},{key:"onLocationClearPointClick",value:function(){this._setCursor(),this.clearResults()}},{key:"onLocationRemovePointClick",value:function(){this._setCursor(),this.clearResults()}},{key:"onLocationAddPointClick",value:function(e){Ov.log("onRouteAddPointClick",e)}},{key:"onMouseMapClick",value:function(e){var t=e.coordinate;if(e.map&&e.map.getView()){var n=e.map.getView().getProjection();this._setCoordinate(t,n),this._setMarker([t[0],t[1]],null,!1),this.onActivateMapPointClick(e)}}},{key:"_setLabel",value:function(e){this._inputAutoComplete.value=e}},{key:"_setCursor",value:function(e){var t=this.getMap().getTargetElement();t.style.cursor=e||null}},{key:"_setCoordinate",value:function(e,t){this._coordinate=(0,Dr.transform)(e,t,"EPSG:4326");var n=this._coordinate[0].toFixed(4),r=this._coordinate[1].toFixed(4)+" / "+n;this.GPdisplayCoordinate(r)}},{key:"_setPosition",value:function(e){this.getMap().getView().setCenter(e)}},{key:"_setMarker",value:function(e,t,r){var i=this.getMap();if(null!=this._marker&&(i.removeOverlay(this._marker),this._marker=null),e){var o=document.createElement("img");o.src=this._markerUrl,this._marker=new(n())({position:e,offset:this._markerOffset,element:o,stopEvent:!1}),i.addOverlay(this._marker),r&&Ov.log("marker information : ",t)}}},{key:"_clearSuggestedLocation",value:function(){if(this._suggestedLocations=[],this._suggestedList)for(;this._suggestedList.firstChild;)this._suggestedList.removeChild(this._suggestedList.firstChild)}},{key:"_hideSuggestedLocation",value:function(){this._suggestedContainer&&(this._suggestedContainer.classList.replace("GPelementVisible","GPelementHidden"),this._suggestedContainer.classList.replace("gpf-visible","gpf-hidden"))}},{key:"_displaySuggestedLocation",value:function(){this._suggestedContainer&&(this._suggestedContainer.classList.replace("GPelementHidden","GPelementVisible"),this._suggestedContainer.classList.replace("gpf-hidden","gpf-visible"))}},{key:"_requestAutoComplete",value:function(e){if(Ov.log("_requestAutoComplete()",e),e&&0!==Object.keys(e).length&&e.text){Ov.log(e);var t={};rn.assign(t,this.options.autocompleteOptions),rn.assign(t,e);var n=this._resources.AutoCompletion||null;n&&Array.isArray(n)&&(t.filterOptions||(t.filterOptions={}),t.filterOptions.type=n),t.apiKey=t.apiKey||this.options.apiKey,"boolean"!=typeof t.ssl&&("boolean"==typeof this.options.ssl?t.ssl=this.options.ssl:t.ssl=!0),Ov.log(t),mt.Services.autoComplete(t)}}},{key:"_fillAutoCompletedLocationListContainer",value:function(e){if(e&&0!==e.length){var t=this._suggestedList;if(t.childElementCount)for(;t.firstChild;)t.removeChild(t.firstChild);for(var n=0;n\n '));this.button=r.firstChild,this.button&&this.button.addEventListener("click",(function(t){return e.onClickButtonExport(t)})),n.appendChild(r.firstChild);var i=this.stringToHTML('\n
\n \n \n \n
\n '));if(this.menu=i.firstChild,this.menu){if(this.options.menu){var o=this.menu.className;this.menu.className=o.replace(this.menuClassHidden,"")}this.menu.querySelectorAll('input[type=radio][name="format"]').forEach((function(t){t.id.toUpperCase().includes(e.options.format.toUpperCase())&&(t.checked=!0),t.addEventListener("change",(function(t){e.setFormat(t.target.value)}))}))}n.appendChild(i.firstChild),this.container=n}},{key:"stringToHTML",value:function(e){if(function(){if(!window.DOMParser)return!1;var e=new DOMParser;try{e.parseFromString("x","text/html")}catch(e){return!1}return!0}())return(new DOMParser).parseFromString(e,"text/html").body;var t=document.createElement("div");return t.innerHTML=e,t}},{key:"isPluggableControl",value:function(){return!(!this.options.control||"function"!=typeof this.options.control.getContainer||"function"!=typeof this.options.control.getLayer)}},{key:"exportFeatures",value:function(e,t,n){var r=this,i=null;if(!e)return Wv.warn("Impossible to export : no layer is hosting features."),i;if(!e.getSource()||!e.getSource().getFeatures()||!e.getSource().getFeatures().length)return Wv.warn("Impossible to export : no features found."),i;e.getSource().getFeatures().forEach((function(e){!e.getStyle()&&r.options.control&&"function"==typeof r.options.control.getStyle&&e.setStyle(r.options.control.getStyle())}));var o={defaultStyle:n};t&&(o.extensions={"geoportail:compute":t});var a=null;switch(this.options.format.toUpperCase()){case"KML":o.writeStyles=!0,o.showPointNames=!0,a=new mn(o);break;case"GPX":a=new Tn(o);break;case"GEOJSON":a=new Hn(o)}if(!a)return Wv.warn("Impossible to export : format unknown !?"),i;var s=e.getSource().getProjection(),l=this.getMap();l&&(s=s||l.getView().getProjection());var c=e.getSource().getFeatures();return i=a.writeFeatures(c,{dataProjection:"EPSG:4326",featureProjection:s||"EPSG:3857"})}},{key:"onClickButtonExport",value:function(e){this.isPluggableControl()||Wv.warn("Componant not pluggable with the control !");var t=this.options.control&&void 0!==this.options.control.getLayer?this.options.control.getData():this.options.layer,n=this.options.control&&void 0!==this.options.control.getData?this.options.control.getData():{},r=this.options.control&&void 0!==this.options.control.getStyle?this.options.control.getStyle():{},i=this.exportFeatures(t,n,r);if(i&&"null"!==i)if(this.dispatchEvent({type:"export:compute",content:i}),this.options.onExport&&"function"==typeof this.options.onExport)this.options.onExport(i);else{var o=document.createElement("a");if(o.setAttribute("href","data:"+this.mimeType+";charset=utf-8,"+encodeURIComponent(i)),o.setAttribute("download",this.options.name+this.extension),document.createEvent){var a=document.createEvent("MouseEvents");a.initEvent("click",!0,!0),o.dispatchEvent(a)}else o.click()}}},{key:"getContainer",value:function(){return this.container}},{key:"setControl",value:function(e){this.options.control=e}},{key:"setTarget",value:function(e){this.options.target=e}},{key:"setFormat",value:function(e){switch(this.options.format=e.toUpperCase(),this.options.format){case"KML":this.extension=".kml",this.mimeType="application/vnd.google-earth.kml+xml";break;case"GPX":this.extension=".gpx",this.mimeType="application/gpx+xml";break;case"GEOJSON":this.extension=".geojson",this.mimeType="application/geo+json";break;default:this.options.format="GEOJSON",this.extension=".geojson",this.mimeType="application/geo+json"}}},{key:"setName",value:function(e){this.options.name=e}},{key:"setTitle",value:function(e){this.options.title=e,this.button&&(this.button.value=this.options.menu?this.icon+e:e)}},{key:"setMenu",value:function(e){var t=this;if(this.options.menu=e,this.button&&(this.button.value=this.options.menu?this.icon+this.options.title:this.options.title),this.menu&&this.options.menu){var n=this.menu.className;this.menu.className=n.replace(this.menuClassHidden,""),this.menu.querySelectorAll('input[type=radio][name="format"]').forEach((function(e){e.id.toUpperCase().includes(t.options.format.toUpperCase())&&(e.checked=!0)}))}}},{key:"setLayer",value:function(e){this.options.layer=e}}],r&&Bv(n.prototype,r),i&&Bv(n,i),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,i}(mu());Object.assign(Yv.prototype,Uv),Object.assign(Yv.prototype,gu);const Zv=Yv;window.ol&&window.ol.control&&(window.ol.control.Export=Yv);var Jv=vt.getLogger("RouteDOM"),Xv={_addUID:function(e){return this._uid?e+"-"+this._uid:e},_createMainContainerElement:function(){var e=document.createElement("div");return e.id=this._addUID("GProute"),e.className="GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen",e},_createShowRoutePictoElement:function(){var e=this,t=document.createElement("button"),n=document.createElement("span");return t.appendChild(n),t.id=this._addUID("GPshowRoutePicto"),t.className="GPshowOpen GPshowAdvancedToolPicto GPshowRoutePicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-route fr-btn fr-btn--tertiary",t.setAttribute("aria-label","Ouvrir le calcul d'itinéraire"),t.setAttribute("tabindex","0"),t.setAttribute("aria-pressed",!1),t.setAttribute("type","button"),t.addEventListener?t.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowRoutePanelClick(t)})):t.attachEvent&&t.attachEvent("onclick",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowRoutePanelClick(t)})),t},_createRoutePanelElement:function(){var e=document.createElement("dialog");return e.id=this._addUID("GProutePanel"),e.className="GPpanel gpf-panel fr-modal",e},_createRoutePanelDivElement:function(){var e=document.createElement("div");return e.className="gpf-panel__body fr-modal__body",e},_createRoutePanelHeaderElement:function(){var e=this,t=document.createElement("div");t.className="GPpanelHeader gpf-panel__header fr-modal__header";var n=document.createElement("div");n.className="GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w",n.innerHTML="Calcul d'itinéraire",t.appendChild(n);var r=document.createElement("button");r.id=this._addUID("GProutePanelClose"),r.className="GPpanelClose GProutePanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w",r.title="Masquer le panneau",r.addEventListener?r.addEventListener("click",(function(){document.getElementById(e._addUID("GPshowRoutePicto")).click()}),!1):r.attachEvent&&r.attachEvent("onclick",(function(){document.getElementById(e._addUID("GPshowRoutePicto")).click()}));var i=document.createElement("span");return i.className="GPelementHidden gpf-visible",i.innerText="Fermer",r.appendChild(i),t.appendChild(r),t},_createRoutePanelFooterElement:function(){var e=document.createElement("div");return e.className="GPpanelFooter gpf-panel__footer fr-modal__footer",e},_createRoutePanelFormPointLabel:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=document.createElement("p");n.innerHTML=e;var r=t?"":" GPelementHidden gpf-hidden";return n.className="GProutePointLabelP gpf-label fr-label"+r,n},_createRoutePanelFormElement:function(){var e=this,t=document.createElement("form");return t.id=this._addUID("GProuteForm"),t.className="gpf-panel__content fr-modal__content",t.setAttribute("onkeypress","return event.keyCode != 13;"),t.addEventListener("submit",(function(t){Jv.log(t),t.preventDefault();var n=document.getElementsByClassName(e._addUID("GPlocationPoint")),r=n[0].childNodes[0].id,i=n[n.length-1].childNodes[0].id,o=ju.index(r),a=ju.index(i);if(""===document.getElementById(e._addUID("GPlocationOrigin_"+o)).value&&""===document.getElementById(e._addUID("GPlocationOriginCoords_"+o)).value||""===document.getElementById(e._addUID("GPlocationOrigin_"+a)).value&&""===document.getElementById(e._addUID("GPlocationOriginCoords_"+a)).value)return!1;e._addRouteResultsStagesValuesElement(n);var s=null;document.getElementById(e._addUID("GProuteComputationChoice"))&&(document.getElementById(e._addUID("GProuteComputationFastest"))&&document.getElementById(e._addUID("GProuteComputationFastest")).checked&&(s=document.getElementById(e._addUID("GProuteComputationFastest")).value),document.getElementById(e._addUID("GProuteComputationShortest"))&&document.getElementById(e._addUID("GProuteComputationShortest")).checked&&(s=document.getElementById(e._addUID("GProuteComputationShortest")).value));var l=null;document.getElementById(e._addUID("GProuteTransportCar"))&&document.getElementById(e._addUID("GProuteTransportCar")).checked&&(l=document.getElementById(e._addUID("GProuteTransportCar")).value),document.getElementById(e._addUID("GProuteTransportPedestrian"))&&document.getElementById(e._addUID("GProuteTransportPedestrian")).checked&&(l=document.getElementById(e._addUID("GProuteTransportPedestrian")).value);for(var c=[],u=document.getElementsByClassName("GProuteExclusionsOption"),d=0;d2?document.getElementById("GProuteAutoCompleteList"+n).style.display="block":document.getElementById("GProuteAutoCompleteList"+n).style.display="none",r.onAutoCompleteSearchText(e)}})),a.addEventListener("blur",(function(){var e=this.id.charAt(this.id.length-1);document.getElementById("GProuteAutoCompleteList"+e).style.display="none"})),i.appendChild(a);var s=document.createElement("input");s.id="GProuteOriginCoords"+e,s.className="GPelementHidden gpf-hidden",s.type="text",s.disabled=!0,i.appendChild(s);var l=document.createElement("input");l.id="GProuteOriginPointer"+e,l.type="checkbox",i.appendChild(l);var c=document.createElement("label");return c.id="GProuteOriginPointerImg"+e,c.htmlFor="GProuteOriginPointer"+e,c.className="GProuteOriginPointerImg",c.title="Pointer un lieu sur la carte",c.addEventListener("click",(function(e){e.preventDefault(),e.stopPropagation();var t,n=this.id.charAt(this.id.length-1);for(t=1;t<8;t++)n!==t&&(document.getElementById("GProuteOriginPointer"+t).checked=!1,"Pointer un lieu sur la carte"===document.getElementById("GProuteOriginCoords"+t).value&&(document.getElementById("GProuteOriginCoords"+t).value="",document.getElementById("GProuteOrigin"+t).className="GPelementVisible gpf-visible",document.getElementById("GProuteOriginCoords"+t).className="GPelementHidden gpf-hidden"));if(document.getElementById("GProuteOriginPointer"+n).checked){for(document.getElementById("GProuteOriginCoords"+n).value="",t=1;t<8;t++)document.getElementById("GProutePoint"+t).style.display="flex";document.getElementById("GProuteForm").className="gpf-panel__content fr-modal__content",document.getElementById("GProuteOriginPointer"+n).checked=!1,document.getElementById("GProuteOrigin"+n).className="GPelementVisible gpf-visible",document.getElementById("GProuteOriginCoords"+n).className="GPelementHidden gpf-hidden"}else{for(document.getElementById("GProuteOriginCoords"+n).value="Pointer un lieu sur la carte",t=1;t<8;t++)document.getElementById("GProutePoint"+t).style.display=n===t?"flex":"none";document.getElementById("GProuteForm").className="GProuteFormMini gpf-panel__content fr-modal__content",document.getElementById("GProuteOriginPointer"+n).checked=!0,document.getElementById("GProuteOrigin"+n).className="GPelementHidden gpf-hidden",document.getElementById("GProuteOriginCoords"+n).className="GPelementVisible gpf-visible"}r.onRouteMapPointClick(e)})),i.appendChild(c),i},_createRoutePanelFormRemoveStageElement:function(e){var t=this,n=document.createElement("div");return n.id="GProuteStageRemove"+e,n.className="GProuteStageRemove",n.title="Supprimer l'étape",1!==e&&7!==e&&n.addEventListener("click",(function(e){var n=this.id.charAt(this.id.length-1);document.getElementById("GProutePoint"+n).className="GPflexInput GProuteStageFlexInputHidden",document.getElementById("GProuteOrigin"+n).value="",document.getElementById("GProuteOrigin"+n).className="GPelementVisible gpf-visible",document.getElementById("GProuteOriginCoords"+n).value="",document.getElementById("GProuteOriginCoords"+n).className="GPelementHidden gpf-hidden",document.getElementById("GProuteStageAdd").style.display="",t.onRouteRemovePointClick(e)})),n},_createRoutePanelFormAddStageElement:function(){var e=this,t=document.createElement("div");return t.id="GProuteStageAdd",t.title="Ajouter une étape",t.addEventListener("click",(function(t){for(var n=1,r=0,i=2;i<7;i++)"GPflexInput GProuteStageFlexInputHidden"===document.getElementById("GProutePoint"+i).className?1===n&&(n=i):r++;n<7&&(document.getElementById("GProutePoint"+n).className="GPflexInput GProuteStageFlexInput"),4===r&&(document.getElementById("GProuteStageAdd").style.display="none"),e.onRouteAddPointClick(t)})),t},_createRoutePanelFormAutoCompleteListElement:function(e){var t=this,n=document.createElement("div");return n.id="GProuteAutoCompleteList"+e,n.className="GPadvancedAutoCompleteList",n.addEventListener?n.addEventListener("click",(function(n){t.onAutoCompletedResultsItemClick(n),document.getElementById("GProuteAutoCompleteList"+e).style.display="none"}),!1):n.attachEvent&&n.attachEvent("onclick",(function(n){t.onAutoCompletedResultsItemClick(n),document.getElementById("GProuteAutoCompleteList"+e).style.display="none"})),n},_createRouteAutoCompletedLocationElement:function(e,t,n){var r=document.getElementById("GProuteAutoCompleteList"+t),i=document.createElement("div");i.id="AutoCompletedLocation"+n,i.className="GPautoCompleteProposal",i.innerHTML=Nh.getSuggestedLocationFreeform(e),r.appendChild(i)},_createRoutePanelFormModeChoiceTransportElement:function(e){var t=this,n=document.createElement("div");n.id=this._addUID("GProuteTransportChoice");var r=document.createElement("label");r.className="GProuteModeLabel gpf-label fr-label",r.innerHTML="Choisir un mode de déplacement",n.appendChild(r);var i=document.createElement("div");i.className="gpf-radio-btn-group";for(var o=0;o0&&t<6&&(document.getElementById("GPlocationPoint_"+r).className="GPflexInput GPelementHidden gpf-flex gpf-hidden "),document.getElementById("GPlocationOriginPointer_"+r).checked=!1,document.getElementById("GPlocationOrigin_"+r).className="GPelementVisible gpf-visible",document.getElementById("GPlocationOriginCoords_"+r).className="GPelementHidden gpf-hidden"}}for(var i=0;i0&&e<6&&(document.getElementById("GPlocationPoint_"+t+"-"+this._uid).className="GPflexInput GPlocationStageFlexInput gpf-flex"))}var r,i=document.getElementsByClassName("GPlocationPoint-"+this._uid);this._addRouteResultsStagesValuesElement(i),"Pieton"===this._currentTransport?(r=document.getElementById("GProuteTransportPedestrian-"+this._uid))&&(r.checked="true"):(r=document.getElementById("GProuteTransportCar-"+this._uid))&&(r.checked="true");var o=document.getElementById("GProuteComputationSelect-"+this._uid);o&&(o.value=this._currentComputation);var a=document.getElementById("GProuteExclusionsToll-"+this._uid);a&&(-1!==this._currentExclusions.indexOf("toll")?a.checked=!1:a.checked=!0);var s=document.getElementById("GProuteExclusionsTunnel-"+this._uid);s&&(-1!==this._currentExclusions.indexOf("tunnel")?s.checked=!1:s.checked=!0);var l=document.getElementById("GProuteExclusionsBridge-"+this._uid);l&&(-1!==this._currentExclusions.indexOf("bridge")?l.checked=!1:l.checked=!0);var c=this._currentRouteInformations.totalDistance,u=this._currentRouteInformations.totalTime,d=this._simplifiedInstructions(this._currentRouteInformations.routeInstructions);d&&this._fillRouteResultsDetailsContainer(c,u,d),this._formRouteContainer.className="GPelementHidden gpf-hidden gpf-panel__content fr-modal__content",this._hideWaitingContainer(),this._resultsRouteContainer.className=""}},{key:"clean",value:function(){this._currentTransport=null,this._currentExclusions=[],this._currentComputation=null;for(var e=0;e0)return n;var r=this._showRouteButton=this._createShowRoutePictoElement();n.appendChild(r);var i=this._panelRouteContainer=this._createRoutePanelElement(),o=this._createRoutePanelDivElement();i.appendChild(o);var a=this._panelHeaderRouteContainer=this._createRoutePanelHeaderElement();o.appendChild(a);var s=this._formRouteContainer=this._createRoutePanelFormElement();s.appendChild(this._createRoutePanelFormModeChoiceTransportElement(this.options.graphs));for(var l=this._createRoutePanelFormPointsElement(e),c=0;c0)return n;var r=this._pictoIsoButton=this._createShowIsoPictoElement();n.appendChild(r);var i=this._IsoPanelContainer=this._createIsoPanelElement(),o=this._createIsoPanelDivElement();i.appendChild(o);var a=this._IsoPanelHeaderContainer=this._createIsoPanelHeaderElement();o.appendChild(a);var s=this._formContainer=this._createIsoPanelFormElement();s.appendChild(this._createIsoPanelFormModeChoiceTransportElement(this.options.graphs)),s.appendChild(this._createIsoPanelFormPointLabel());var l=this._createIsoPanelFormPointElement(e);s.appendChild(l);for(var c=!1,u=!1,d=this._createIsoPanelFormTypeChoiceElement(),p=0;p500&&(TA.log("INFO : initial circle radius ("+this._requestGeom.radius+") limited to 1000m."),this._requestGeom.radius=500),o.searchGeometry=this._requestGeom):"polygon"===this._requestGeom.type.toLowerCase()?o.searchGeometry=this._requestGeom:"point"===this._requestGeom.type.toLowerCase()&&("StreetAddress"===this._currentGeocodingType?(o.searchGeometry={type:"Circle",radius:50,coordinates:this._requestGeom.coordinates},o.maximumResponses=1):o.searchGeometry=this._requestGeom),TA.log("reverseGeocode request options : ",o),o}},{key:"_displayGeocodedLocations",value:function(e){this._clearResults(),this._reverseGeocodingLocations=e,this.dispatchEvent({type:"reversegeocode:compute"}),this._formContainer.className="GPelementHidden gpf-hidden",this._hideWaitingContainer(),this._panelTitleContainer.innerHTML="Résultats de la recherche",this._returnPictoContainer.classList.remove("GPelementHidden"),this._returnPictoContainer.classList.remove("gpf-hidden"),this._resultsContainer.className="GPpanel gpf-panel gpf-panel-reverse",this._fillGeocodedLocationListContainer(e),this._displayGeocodedLocationsOnMap(e)}},{key:"_fillGeocodedLocationListContainer",value:function(e){for(var t=0;t1){if(this._resultsFeaturesSource&&this._resultsFeaturesSource.getExtent){var i=this._resultsFeaturesSource.getExtent();n.getView().fit(i,n.getSize())}}else{var o=this._resultsFeatures.item(0).getGeometry().getCoordinates();n.getView().setCenter(o),n.getView().setZoom(17)}this._resultsHoverInteraction=new h.Select({condition:av.pointerMove,layers:[this._resultsFeaturesLayer]}),this._resultsHoverInteraction.on("select",(function(e){return t._onResultsFeatureMouseOver(e)})),n.addInteraction(this._resultsHoverInteraction),this._resultsSelectInteraction=new h.Select({layers:[this._resultsFeaturesLayer]}),this._resultsSelectInteraction.on("select",(function(e){return t._onResultsFeatureSelect(e)})),n.addInteraction(this._resultsSelectInteraction);var a="";switch(this._currentGeocodingType){case"StreetAddress":a="adresses";break;case"PositionOfInterest":a="toponymes";break;case"CadastralParcel":a="parcelles cadastrales"}n.getControls().forEach((function(e){if(e instanceof ih){var n=t._resultsFeaturesLayer.gpLayerId;e._layers[n].title===n&&(e.addLayer(t._resultsFeaturesLayer,{title:"Résultats de la recherche inverse",description:"Résultats de la recherche inverse sur les "+a}),e.setRemovable(t._resultsFeaturesLayer,!1))}}))}}},{key:"_createResultsLayer",value:function(){var e=this.getMap();this._resultsFeatures=new(iv()),this._resultsFeaturesSource=new(a())({features:this._resultsFeatures}),this._resultsFeaturesLayer=new(ii())({source:this._resultsFeaturesSource}),this._resultsFeaturesLayer.gpResultLayerId="reverseGeocodingResults",e.addLayer(this._resultsFeaturesLayer)}},{key:"_addResultFeature",value:function(e,t){var n=this.getMap(),r=[e.position.lon,e.position.lat];if(0!==r.length){var i=n.getView().getProjection().getCode();"EPSG:4326"!==i&&(r=(0,Dr.transform)(r,"EPSG:4326",i));var o=new(kt())({geometry:new ov.Point(r)});o.setStyle(this._resultsDefaultStyle),o.setId(t),o.setProperties({location:e,popupContent:this._fillPopupContent(e)}),this._resultsFeatures.push(o)}}},{key:"_fillPopupContent",value:function(e){var t="
    ",n=e.placeAttributes;for(var r in n)n.hasOwnProperty(r)&&"trueGeometry"!==r&&"extraFields"!==r&&"houseNumberInfos"!==r&&"_count"!==r&&(t+="
  • ",t+=''+r.toUpperCase()+" : ",t+=n[r],t+="
  • ");return t+="
"}},{key:"_onResultsFeatureMouseOver",value:function(e){var t;if(0!==e.selected.length){if((t=e.selected[0]).setStyle(this._resultsSelectedStyle),null!=t.getId()){var n=document.getElementById("GPreverseGeocodedLocation_"+t.getId()+"-"+this._uid);n&&n.classList&&n.classList.add("GPlocationHighlight")}document.getElementById("GPreverseGeocodedLocation_"+t.getId()+"-"+this._uid)}if(0!==e.deselected.length){(t=e.deselected[0]).setStyle(this._resultsDefaultStyle);var r=document.getElementById("GPreverseGeocodedLocation_"+t.getId()+"-"+this._uid);r&&r.classList&&r.classList.remove("GPlocationHighlight")}}},{key:"_onResultsFeatureSelect",value:function(e){var t=this.getMap();if(0!==e.selected.length){var r=e.selected[0];this._popupContent.innerHTML=r.getProperties().popupContent,this._popupOverlay?this._popupOverlay.setPosition(e.mapBrowserEvent.coordinate):(this._popupOverlay=new(n())({element:this._popupDiv,positioning:"bottom-center",position:e.mapBrowserEvent.coordinate}),t.addOverlay(this._popupOverlay)),this.dispatchEvent({type:"reversegeocode:onclickresult",location:r.getProperties().location})}else null!=this._popupOverlay&&this._popupOverlay.setPosition(void 0)}},{key:"onShowReverseGeocodingClick",value:function(e){"true"===e.target.ariaPressed&&this.onPanelOpen();var t=this.getMap();if(t){Th.unset(t);var n=this._showReverseGeocodingButton.ariaPressed;this.collapsed=!("true"===n),this.dispatchEvent("change:collapsed"),this.options.position&&!this.collapsed&&this.updatePosition(this.options.position),this._waiting||this._reverseGeocodingLocations.length||(this.collapsed?(this._clearResults(),this._clearInputFeatures(),this._removeMapInteraction(t),null!=this._inputFeaturesLayer&&(t.removeLayer(this._inputFeaturesLayer),this._inputFeaturesLayer=null,this._inputFeaturesSources=null,this._inputFeatures=null)):this._activateMapInteraction(t))}}},{key:"onReverseGeocodingTypeChange",value:function(e){var t=e.target.selectedIndex,n=e.target.options[t].value;n&&(TA.log(n),this._currentGeocodingType=n)}},{key:"onReverseGeocodingDelimitationChange",value:function(e){var t=e.target.selectedIndex,n=e.target.options[t].value;if(n){TA.log(n),this._currentGeocodingDelimitation=n;var r=this.getMap();this._clearInputFeatures(),this._removeMapInteraction(r),this._activateMapInteraction(r)}}},{key:"onGPreverseGeocodingReturnPictoClick",value:function(){this._clearResults(),this._clearInputFeatures(),this._activateMapInteraction(this.getMap())}},{key:"onReverseGeocodingSubmit",value:function(){this._requestPosition?this._reverseGeocodingRequest():TA.log("missing position")}},{key:"onReverseGeocodingResultClick",value:function(e){var t=e.target.id,n=t.substring(t.indexOf("_")+1),r=this._resultsFeaturesSource.getFeatureById(parseInt(n,10));this.dispatchEvent({type:"reversegeocode:onclickresult",location:r.getProperties().location})}},{key:"onReverseGeocodingResultMouseOver",value:function(e){var t=e.target.id,n=t.substring(t.indexOf("_")+1);e.target.classList&&e.target.classList.add("GPlocationHighlight"),this._resultsFeaturesSource&&this._resultsFeaturesSource.getFeatureById(parseInt(n,10)).setStyle(this._resultsSelectedStyle)}},{key:"onReverseGeocodingResultMouseOut",value:function(e){var t=e.target.id,n=t.substring(t.indexOf("_")+1);e.target.classList&&e.target.classList.remove("GPlocationHighlight"),this._resultsFeaturesSource&&this._resultsFeaturesSource.getFeatureById(parseInt(n,10)).setStyle(this._resultsDefaultStyle)}},{key:"_clearResults",value:function(){var e=this.getMap();if(this._reverseGeocodingLocations=[],this._resultsListContainer)for(;this._resultsListContainer.firstChild;)this._resultsListContainer.removeChild(this._resultsListContainer.firstChild);this._resultsFeaturesLayer&&(e.removeLayer(this._resultsFeaturesLayer),this._resultsFeaturesLayer=null),null!=this._popupOverlay&&(e.removeOverlay(this._popupOverlay),this._popupOverlay=null),null!=this._resultsSelectInteraction&&(e.removeInteraction(this._resultsSelectInteraction),this._resultsSelectInteraction=null),null!=this._resultsHoverInteraction&&(e.removeInteraction(this._resultsHoverInteraction),this._resultsHoverInteraction=null)}},{key:"_clearInputFeatures",value:function(){this._inputFeatures&&this._inputFeatures.clear(),this._requestGeom=null,this._requestPosition=null}},{key:"_displayWaitingContainer",value:function(){this._waitingContainer.className="GPwaitingContainer GPwaitingContainerVisible gpf-waiting gpf-waiting--visible",this._waiting=!0,this._timer&&(clearTimeout(this._timer),this._timer=null);var e=this;this._timer=setTimeout((function(){!0===e._waiting?e._hideWaitingContainer():e._timer&&clearTimeout(e._timer)}),16e3)}},{key:"_hideWaitingContainer",value:function(){this._waiting&&(this._waitingContainer.className="GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden",this._waiting=!1,clearTimeout(this._timer),this._timer=null)}}],i&&PA(r.prototype,i),o&&PA(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,i,o}(Gu);Object.assign(RA.prototype,EA),Object.assign(RA.prototype,gu);const OA=RA;window.ol&&window.ol.control&&(window.ol.control.ReverseGeocode=RA);const DA=ol.format.WMSCapabilities;var NA=__webpack_require__.n(DA);const UA=ol.format.WMTSCapabilities;var jA=__webpack_require__.n(UA),BA=__webpack_require__(3110),FA=__webpack_require__.n(BA);const zA={onloaded:"editor:onloaded",layer:{onclickvisibility:"editor:layer:onclickvisibility",onclickclone:"editor:layer:onclickclone",onclickremove:"editor:layer:onclickremove"},legend:{onclickedition:"editor:legend:onclickedition",onchangevalue:"editor:legend:onchangevalue"},group:{oncollapse:"editor:group:oncollapse"},style:{oneditjson:"editor:style:oneditjson",scale:{onchangemin:"editor:style:scale:onchangemin",onchangemax:"editor:style:scale:onchangemax"}},filter:{oneditjson:"editor:filter:oneditjson"},themes:{onclickimage:"editor:themes:onclickimage",onclicktitle:"editor:themes:onclicktitle"},search:{onsubmit:"editor:search:onsubmit",onautocomplete:"editor:search:onautocomplete"}};function VA(e){return VA="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},VA(e)}function qA(e,t){for(var n=0;n/g,">")).replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)/g,(function(e){var t="gp-json-number";return/^"/.test(e)?t=/:$/.test(e)?"gp-json-key":"gp-json-string":/true|false/.test(e)?t="gp-json-boolean":/null/.test(e)&&(t="gp-json-null"),""+e+""}))}},{key:"add",value:function(){if(!this.options.target){if(!document.getElementById(this.name.target)){var e=document.createElement("div");e.id=this.name.target,(document.documentElement||document.getElementsByTagName("body")[0]||document.getElementsByTagName("head")[0]).appendChild(e)}this.options.target=document.getElementById(this.name.target)}return this.container&&this.options.target.appendChild(this.container),this}},{key:"display",value:function(e){return WA.trace("display()",e),void 0!==e&&(this.container.style.display=e?"flex":"none"),"flex"===this.container.style.display}},{key:"getContainer",value:function(){return this.container}},{key:"onEditJsonStyleMapBox",value:function(e){WA.trace("onEditJsonStyleMapBox",e),e.editorID=this.id,e.data=this.options,FA().dispatch(zA.style.oneditjson,e)}},{key:"onChangeStyleScaleMinMapBox",value:function(e){WA.trace("onChangeStyleScaleMinMapBox",e),e.editorID=this.id,e.data=this.options,FA().dispatch(zA.style.scale.onchangemin,e)}},{key:"onChangeStyleScaleMaxMapBox",value:function(e){WA.trace("onChangeStyleScaleMaxMapBox",e),e.editorID=this.id,e.data=this.options,FA().dispatch(zA.style.scale.onchangemax,e)}}],t&&qA(e.prototype,t),n&&qA(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n}();const ZA=YA;function JA(e){return JA="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},JA(e)}function XA(e,t){for(var n=0;n T \")",n.style.background=r.replace("%color%",0===t.color.indexOf("rgb")?t.color:xt.hexToRgba(t.color,1)).replace("%opacity%",t.opacity||1).replace("%style%","font-size: 5em;font-weight: bold;");break;case"icon":t.image?(r="".replace("%x%",this.options.sprites.json[t.image].x).replace("%y%",this.options.sprites.json[t.image].y).replace(/%w%/g,this.options.sprites.json[t.image].width).replace(/%h%/g,this.options.sprites.json[t.image].height).replace("%W%",this.options.sprites.size.w).replace("%H%",this.options.sprites.size.h).replace("%URL%",this.options.sprites.url),n.innerHTML=r):(r="url(\"data:image/svg+xml;utf8,\")",n.style.background=r.replace("%color%",0===t.color.indexOf("rgb")?t.color:xt.hexToRgba(t.color,1)).replace("%style%","fill: transparent;stroke-width: 10;"));break;case"line":var i=Array.isArray(t.dasharray)?t.dasharray.join(" "):0;r="url(\"data:image/svg+xml;utf8,\")",n.style.background=r.replace("%color%",0===t.color.indexOf("rgb")?t.color:xt.hexToRgba(t.color,1)).replace("%stroke-opacity%",t.opacity||1).replace("%stroke-dasharray%",i).replace("%stroke-width%",3*(t.width||0));break;case"circle":var o=t["stroke-color"]||"#FFFFFF";r="url(\"data:image/svg+xml;utf8,\")",n.style.background=r.replace("%color%",0===t.color.indexOf("rgb")?t.color:xt.hexToRgba(t.color,1)).replace("%opacity%",t.opacity||1).replace("%stroke-color%",0===o.indexOf("rgb")?o:xt.hexToRgba(o,1)).replace("%stroke-opacity%",t["stroke-opacity"]||1).replace("%stroke-width%",3*(t["stroke-width"]||0));break;case"background":case"fill":if(t.pattern)r="".replace("%x%",this.options.sprites.json[t.pattern].x).replace("%y%",this.options.sprites.json[t.pattern].y).replace(/%w%/g,this.options.sprites.json[t.pattern].width).replace(/%h%/g,this.options.sprites.json[t.pattern].height).replace("%W%",this.options.sprites.size.w).replace("%H%",this.options.sprites.size.h).replace("%URL%",this.options.sprites.url),n.innerHTML=r;else{var a=t["outline-color"]||"#FFFFFF";r="url(\"data:image/svg+xml;utf8,\")",n.style.background=r.replace("%color%",0===t.color.indexOf("rgb")?t.color:xt.hexToRgba(t.color,1)).replace("%opacity%",t.opacity||1).replace("%stroke-color%",0===a.indexOf("rgb")?a:xt.hexToRgba(a,1))}break;default:return uC.warn("type not found, no thumbnail..."),!1}return!0}},{key:"_getValue",value:function(e){var t=null;if("string"==typeof e)t=e;else if("number"==typeof e)t=e;else if(Array.isArray(e)){var n=!0;e.forEach((function(e){"number"!=typeof e&&(n=!1)})),n&&(t=e)}else"object"===sC(e)?(t=null,"stops"in e&&(e.stops.sort((function(e,t){var n=e[0],r=t[0];return n>r?-1:n1?1:0;if(i){var o=document.createElement("hr");o.className=this.name.sep,e.appendChild(o)}if(this.options.tools.title){var a=document.createElement("div");a.id=this.name.titleLayersID+this.id,a.className=this.name.titleLayers,a.innerHTML=i?"Liste des 'couches' ("+r+")":"Liste des 'couches'",e.appendChild(a)}}var s=this.mapbox.layers.slice();if(s.forEach((function(e,t){var n=e.metadata;n?n["geoportail:order"]=t:e.metadata={"geoportail:order":t}})),this.options.tools.sort){var l=this.options.tools.sortBy,c=this.options.tools.sortOrder;s.sort((function(e,t){var n=0;if(e.metadata&&e.metadata["geoportail:group"]&&t.metadata&&t.metadata["geoportail:group"]){var r,i=null;i=e.metadata["geoportail:group"],r=t.metadata["geoportail:group"],n=i.localeCompare(r)}else switch(l){case"geom":n="asc"===c?e.type.localeCompare(t.type)||e.id.localeCompare(t.id):t.type.localeCompare(e.type)||t.id.localeCompare(e.id);break;case"class":n="asc"===c?e["source-layer"].localeCompare(t["source-layer"])||e.id.localeCompare(t.id):t["source-layer"].localeCompare(e["source-layer"])||t.id.localeCompare(e.id);break;default:n="asc"===c?e.id.localeCompare(t.id):t.id.localeCompare(e.id)}return n}))}OC.trace("Layers : ",s);var u=this.options.tools.sortBy,d=this.options.tools.groupAuto,p={};s.forEach((function(e){var t=e.metadata;if(t&&t["geoportail:group"]){var n=t["geoportail:group"];p[n]=p[n]?p[n]+1:1}else{var r=null;switch(u){case"class":r=e["source-layer"];break;case"geom":r=e.type;break;default:r=e.id}var i=r;if(d){var o=r.search(/_|-|:|=/);i=-1!==o?r.substring(0,o).trim():r}p[i]=p[i]?p[i]+1:1,t?t["geoportail:group"]=i:e.metadata={"geoportail:group":i}}})),OC.trace("Groups : ",p);var h,g=document.createElement("div");if(g.className=this.name.containerLayers,e.appendChild(g),void 0!==this.options.tools.collapse){(h=document.createElement("details")).className="",h.open=!this.options.tools.collapse,g.appendChild(h);var f=document.createElement("summary");f.className="",f.innerHTML="",h.appendChild(f)}for(var m=void 0!==this.options.tools.collapse?h:g,y=-1,v=0;v1){p[C]=-1;var b=new EC({id:this.id,target:void 0!==this.options.tools.collapse?h:g,title:C,collapse:!0});b.add(),m=b.getContainer()}else 1===p[C]&&(m=void 0!==this.options.tools.collapse?h:g);else m=void 0!==this.options.tools.collapse?h:g}else m=void 0!==this.options.tools.collapse?h:g;if(this.options.tools.layers){var I=new vC({id:this.id,target:m,position:y+"_"+this.id,tools:{visibility:this.options.tools.visibility,icon:this.options.tools.icon,type:this.options.tools.type,pin:this.options.tools.pin},obj:{id:A.id,type:A.type,source:A.source,"source-layer":A["source-layer"]}});I.add(),A.layout&&A.layout.visibility&&"none"===A.layout.visibility&&I.visibility(!1),this.layers.push(I)}if(this.options.tools.legend){var _=this.options.tools.editable;void 0===_&&(_=A.editable);var E=new pC({id:this.id,target:m,sprites:this.sprites,obj:{id:A.id,source:A.source,title:A.id,editable:void 0!==_&&_,paint:A.paint,layout:A.layout}});E.add(),E.display(!1),I&&(I.addLegend(E),I.slotLegend())}if(this.options.tools.style){var w=new ZA({id:this.id,target:m,position:y+"_"+this.id,obj:{id:A.id,source:A.source,layout:A.layout,paint:A.paint}});w.add(),w.display(!1),I&&I.addStyle(w),A.layout&&A.layout.visibility&&"none"===A.layout.visibility&&I.visibility(!1)}if(this.options.tools.filter){var P=new aC({id:this.id,target:m,position:y+"_"+this.id,obj:{id:A.id,source:A.source,filter:A.Filter}});P.add(),P.display(!1),I&&I.addFilter(P)}}else y>=0&&y--}}if(this.container=e,!this.options.target){if(!document.getElementById(this.name.target)){var S=document.createElement("div");S.id=this.name.target,(document.getElementsByTagName("body")[0]||document.getElementsByTagName("head")[0]||document.documentElement).appendChild(S)}this.options.target=document.getElementById(this.name.target)}this.container&&this.options.target.appendChild(this.container),FA().dispatch(zA.onloaded,this)}},{key:"_getSprites",value:function(e){var t,n=this;return e&&e.startsWith("mapbox://")?new Promise((function(e,t){OC.error("Protocole mapbox:// non géré !"),e(n)})):e?Promise.all([(t=e+".png",fetch(t,{credentials:"same-origin"}).then((function(e){if(e.ok)return e.blob().then((function(e){n.sprites.url=t;var r=new Image;return r.src=t,r.decode().then((function(){n.sprites.size={},n.sprites.size.h=r.height,n.sprites.size.w=r.width}))})).catch((function(e){OC.warn("fetch image sprites exception :",e)}));throw new Error("HTTP status code: "+e.status)})).catch((function(e){return new Promise((function(t,n){OC.error("fetch image sprites exception :",e),n(e)}))}))),fetch(e+".json",{credentials:"same-origin"}).then((function(e){if(e.ok)return e.json().then((function(e){n.sprites.json=e})).catch((function(e){OC.warn("fetch json sprites exception :",e)}));throw new Error("HTTP status code: "+e.status)})).catch((function(e){return new Promise((function(t,n){OC.error("fetch json sprites exception :",e),n(e)}))}))]):new Promise((function(e,t){OC.error("Auncun sprites disponibles !"),e(n)}))}},{key:"createElement",value:function(){var e=this;return"object"===kC(this.options.style)?(this.mapbox=this.options.style,this.options.tools.legend?this._getSprites(this.mapbox.sprite).then((function(){return e._initContainer(),e})).catch((function(e){OC.warn("fetch sprites exception :",e)})):new Promise((function(t,n){e._initContainer(),t(e)}))):"string"==typeof this.options.style?fetch(this.options.style,{credentials:"same-origin"}).then((function(t){return t.json().then((function(t){e.mapbox=t})).then((function(){return e.options.tools.legend?e._getSprites(e.mapbox.sprite).then((function(){return e._initContainer(),e})).catch((function(e){OC.warn("fetch sprites exception :",e)})):new Promise((function(t,n){e._initContainer(),t(e)}))})).catch((function(e){OC.error("json exception :",e)}))})).catch((function(e){OC.error("fetch exception :",e)})):void 0}},{key:"display",value:function(e){this.container.style.display=e?"block":"none"}},{key:"setContext",value:function(e,t){this.context[e]=t}},{key:"getContext",value:function(e){return this.context[e]}},{key:"getID",value:function(){return this.id}},{key:"getContainer",value:function(){return this.container}},{key:"getStyle",value:function(){return this.mapbox}},{key:"getStyleLayer",value:function(e){for(var t=null,n=this.getLayer(e).options.obj.id,r=0;r2&&void 0!==arguments[2]?arguments[2]:null,r=(this.canvas||(this.canvas=document.createElement("canvas"))).getContext("2d");return r.font=null===n?"".concat(this._getCssProperty(t,"font-weight")," ").concat(this._getCssProperty(t,"font-size")," ").concat(this._getCssProperty(t,"font-family")):n,r.measureText(e).width},_dataZToSvgY:function(e,t,n,r){return t-(e-n)*r-.5},_dataDistToSvgX:function(e,t,n,r){return t-n+e*r},_svgXToDataDist:function(e,t,n,r){return(e+n-t)/r},_arrayBisect:function(e,t){var n;if(0===e.length)return 0;for(n=0;nx&&(M=Math.pow(10,Math.ceil(Math.log((g-h)/x)/Math.log(10))),G=Math.floor(h/M)*M,(L=Math.ceil(g/M)*M)===g&&(L+=M),G=Math.round(100*G)/100,L=Math.round(100*L)/100,k=Math.floor((L-G)/M)),k=Math.max(Math.round(k),1);var T=document.createElementNS("http://www.w3.org/2000/svg","g");T.setAttribute("class","profile-z-vertical");var R,O,D,N,U,j,B,F=document.createElementNS("http://www.w3.org/2000/svg","g"),z=w/k;R=g===h?w/.2:w/(L-G);for(var V=0;V<=k;V++)(O=document.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("class","profile-z-graduation"),O.setAttribute("font-family",o.fontFamily),O.setAttribute("font-size","10px"),O.setAttribute("fill","#5E5E5E"),O.textContent=(Math.round(100*(G+V*M))/100).toLocaleString(),D=w-V*z,O.setAttribute("transform","translate(".concat(I+_-8,", ").concat(D+5,")")),O.setAttribute("text-anchor","end"),T.appendChild(O),N=Math.round(D)-.5,U=document.createElementNS("http://www.w3.org/2000/svg","g"),(j=document.createElementNS("http://www.w3.org/2000/svg","path")).setAttribute("cs","100,100"),j.setAttribute("stroke-width","1"),0!==V?j.setAttribute("stroke-opacity","0.2"):j.setAttribute("stroke-opacity","1"),j.setAttribute("stroke","#000000"),j.setAttribute("fill","none"),j.setAttribute("d","M".concat(I+_,",").concat(N," L").concat(P+I+_,",").concat(N)),(B=document.createElementNS("http://www.w3.org/2000/svg","path")).setAttribute("cs","100,100"),B.setAttribute("stroke-width","1"),B.setAttribute("stroke-opacity","1"),B.setAttribute("stroke","#000000"),B.setAttribute("fill","none"),B.setAttribute("d","M".concat(I+_,",").concat(N," L").concat(I+_+5,",").concat(N)),B.setAttribute("transform","translate(-5, 0)"),U.appendChild(B),U.appendChild(j),F.appendChild(U);var q=document.createElementNS("http://www.w3.org/2000/svg","text");q.setAttribute("class","profile-z-legend"),q.setAttribute("font-family",o.fontFamily),q.setAttribute("font-size","11px"),q.setAttribute("fill","#5E5E5E"),q.textContent="Altitude (m)",q.setAttribute("transform","translate(".concat(9,", ").concat(Math.round(w/2),") rotate(-90)")),q.setAttribute("text-anchor","middle"),T.appendChild(q),S.appendChild(T),S.appendChild(F),f>2e3&&(f/=1e3,m="km");var H=Math.floor(P/E),W=Math.pow(10,Math.ceil(Math.log(f/H)/Math.log(10)))/2,Y=f,Z=Math.floor(Y/W);Z>H?(W=Math.pow(10,Math.ceil(Math.log(f/H)/Math.log(10))),Z=Math.floor(Y/W)):Z<1&&(W=Math.pow(10,Math.ceil(Math.log(f/H)/Math.log(10))-1),Z=Math.floor(Y/W));var J=W*(Z=Math.max(Z,1)),X=document.createElementNS("http://www.w3.org/2000/svg","g");X.setAttribute("class","profile-x-vertical");for(var K,Q,$,ee,te,ne,re=document.createElementNS("http://www.w3.org/2000/svg","g"),ie=P/Y,oe=(Y-J)*ie,ae=Math.round((P-oe)/Z),se=0;se<=Z+1;se++)(K=document.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("class","profile-x-graduation"),K.setAttribute("font-family",o.fontFamily),K.setAttribute("font-size","10px"),K.setAttribute("fill","#5E5E5E"),se!==Z+1&&(K.textContent=(Math.round(100*se*W)/100).toLocaleString()),Q=I+_+se*ae,se===Z+1&&(Q=I+_+P),K.setAttribute("transform","translate(".concat(Q,", ").concat(w+15+5,")")),K.setAttribute("text-anchor","middle"),X.appendChild(K),$=Q-.5,ee=document.createElementNS("http://www.w3.org/2000/svg","g"),(te=document.createElementNS("http://www.w3.org/2000/svg","path")).setAttribute("cs","100,100"),te.setAttribute("stroke-width","1"),0!==se?te.setAttribute("stroke-opacity","0.2"):te.setAttribute("stroke-opacity","1"),te.setAttribute("stroke","#000000"),te.setAttribute("fill","none"),te.setAttribute("d","M".concat($,",").concat(w," L").concat($,",0")),(ne=document.createElementNS("http://www.w3.org/2000/svg","path")).setAttribute("cs","100,100"),ne.setAttribute("stroke-width","1"),ne.setAttribute("stroke-opacity","1"),ne.setAttribute("stroke","#000000"),ne.setAttribute("fill","none"),ne.setAttribute("d","M".concat($,",").concat(w," L").concat($,",").concat(w-5)),ne.setAttribute("transform","translate(0, 5)"),ee.appendChild(ne),ee.appendChild(te),re.appendChild(ee);var le=document.createElementNS("http://www.w3.org/2000/svg","text");le.setAttribute("class","profile-x-legend"),le.setAttribute("font-family",o.fontFamily),le.setAttribute("font-size","11px"),le.setAttribute("fill","#5E5E5E"),le.textContent="Distance (".concat(m,")"),le.setAttribute("transform","translate(".concat(I+_+P/2,", ").concat(w+15+17+3,")")),le.setAttribute("text-anchor","middle"),X.appendChild(le),S.appendChild(X),S.appendChild(re);var ce=document.createElementNS("http://www.w3.org/2000/svg","g"),ue=1;"km"===m&&(ue=1e3);for(var de=this._dataDistToSvgX(d[0].dist/ue,b,P,ie),pe=this._dataZToSvgY(d[0].z,w,G,R),he="M".concat(de,",").concat(pe),ge=1;gel.dist-o&&(c=l);var u=this._dataDistToSvgX(c.dist/ue,b,P,ie),p=this._dataZToSvgY(c.z,w,G,R);Ie.setAttribute("cx",u),Ie.setAttribute("cy",p),Ce.setAttribute("x1",u),Ce.setAttribute("y1",w),Ce.setAttribute("x2",u),Ce.setAttribute("y2",0),be.setAttribute("x1",I+_),be.setAttribute("y1",p),be.setAttribute("x2",P+I+_),be.setAttribute("y2",p),r.__updateProfileMarker(i,c);var h="Altitude : ".concat(c.z.toLocaleString()," m"),g="Pente : ".concat(c.slope," %"),m="(lat : ".concat(c.lat.toLocaleString()," / lon : ").concat(c.lon.toLocaleString(),")");Ee.innerHTML=h,we.innerHTML=g,Pe.innerHTML=m;var y,v=Math.max(this._getTextWidth(m,Pe),this._getTextWidth(h,Ee));c.dist>f*ue/2?(y="M -0.5 -0.5 l -6 6 l 0 16 l -".concat(v+10," 0 l 0 -44 l ").concat(v+10," 0 l 0 16 l 6 6"),_e.setAttribute("transform","translate(".concat(-(v/2+12),",0)"))):c.dist<=f*ue/2&&(y="M -0.5 -0.5 l 6 6 l 0 16 l ".concat(v+10," 0 l 0 -44 l -").concat(v+10," 0 l 0 16 l -6 6"),_e.setAttribute("transform","translate(".concat(v/2+12,",0)"))),Me.setAttribute("d",y),xe.setAttribute("d",y),Se.setAttribute("transform","translate(".concat(u,",").concat(p,")")),Se.style.transform="translate(".concat(u,"px,").concat(p,"px)")}.bind(this)),ye.appendChild(ve),S.appendChild(ye),y.appendChild(S),t}},displayProfileRaw:function(e,t,n,r){if(t){for(;t.firstChild;)t.removeChild(t.firstChild);var i=e&&e.points?e.points:{},o=document.createElement("textarea");return o.id="profilElevationResults",o.rows=10,o.cols=50,o.style.width="100%",o.innerHTML=JSON.stringify(i,void 0,4),o.addEventListener("mouseover",(function(e){r.__customRawProfileMouseOverEvent(n,e)})),t.appendChild(o),t}},displayProfileLibD3:function(e,t,n,r){var i=n;if(t&&e){for(;t.firstChild;)t.removeChild(t.firstChild);var o=e.points;if(e.distance>2e3){e.unit="km";for(var a=0;al[0]-t?l:a,u=m(c.dist),d=y(c.z);w.select("#focusCircle").attr("cx",u).attr("cy",d),w.select("#focusLineX").attr("x1",u).attr("y1",y(E[0])).attr("x2",u).attr("y2",y(E[1])),w.select("#focusLineY").attr("x1",m(_[0])).attr("y1",d).attr("x2",m(_[1])).attr("y2",d),r.__updateProfileMarker(i,c),P.transition().duration(200).style("opacity",.9);var p="";p+=" Altitude : "+c.z+" m",s.currentSlope&&(p+="
Pente : "+c.slope+" %"),p+="
(Lat : "+c.lat+"/ Lon : "+c.lon+")",P.html(p).style("left",d3.event.pageX+"px").style("top",d3.event.pageY-28+"px")})),I}},displayProfileLibAmCharts:function(e,t,n,r){var i=n;if(t&&e){var o=e.points,a="[[title]] : [[value]]m
";if(i.options.displayProfileOptions.currentSlope&&(a+="Pente : [[slope]] %
"),a+="(Lat: [[lat]] / Lon:[[lon]])",AmCharts.addInitHandler((function(){})),e.distance>2e3){e.unit="km";for(var s=0;s100?u=1:c>10&&(u=10),c=Math.round(c*u)/u,o[l].dist=c}var d={type:"serial",pathToImages:"http://cdn.amcharts.com/lib/3/images/",categoryField:"dist",autoMarginOffset:0,marginRight:10,marginTop:10,startDuration:0,color:"#5E5E5E",fontSize:8,theme:"light",thousandsSeparator:"",numberFormatter:{precision:-1,decimalSeparator:",",thousandsSeparator:" "},categoryAxis:{color:"#5E5E5E",gridPosition:"start",minHorizontalGap:40,tickPosition:"start",title:"Distance ("+e.unit+")",titleColor:"#5E5E5E",labelOffset:0,startOnAxis:!0},chartCursor:{animationDuration:0,bulletsEnabled:!0,bulletSize:10,categoryBalloonEnabled:!1,cursorColor:"#F90",graphBulletAlpha:1,graphBulletSize:1,zoomable:!1},trendLines:[],graphs:[{balloonColor:"#CCCCCC",balloonText:a,bullet:"round",bulletAlpha:0,bulletBorderColor:"#FFF",bulletBorderThickness:2,bulletColor:"#F90",bulletSize:6,hidden:!1,id:"AmGraph-1",fillAlphas:.4,fillColors:"#C77A04",lineAlpha:1,lineColor:"#C77A04",lineThickness:1,title:"Altitude",valueField:"z"}],guides:[],valueAxes:[{id:"ValueAxis-1",minVerticalGap:20,title:"Altitude (m)"}],balloon:{borderColor:"#CCCCCC",borderThickness:1,fillColor:"#FFFFFF",showBullet:!0},titles:[],allLabels:[],dataProvider:o},p=AmCharts.makeChart(t,d);return p.addListener("changed",(function(e){var t=e.chart.dataProvider[e.index];r.__updateProfileMarker(i,t)})),p}}};const KC=XC;var QC;function $C(e){return $C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},$C(e)}function eb(e,t){for(var n=0;n0&&rn.mergeParams(t,{sampling:o}),rn.mergeParams(t,{positions:e}),ub.trace("options du service",t),this._waitingContainer.className="GPwaitingContainer GPwaitingContainerVisible gpf-waiting gpf-waiting--visible",mt.Services.getAltitude(t)}else ub.warn("missing geometry !?")}},{key:"_computeElevationMeasure",value:function(e){ub.trace("ElevationPath::_computeElevationMeasure",e);var t=e;if(this._getSketchCoords()){t[0].dist=0,t[0].slope=0,t[0].oldlat=t[0].lat,t[0].oldlon=t[0].lon,t[0].lat=Math.round(1e5*t[0].lat)/1e5,t[0].lon=Math.round(1e5*t[0].lon)/1e5;var n=0,r=0,i=0,o=0,a=0,s=0,l=[];console.log(t);for(var c=1;c0&&(r+=d,i+=f),a=p,t[c].dist=p,l.push(a),s+=f?Math.abs(Math.round(f/p*100)):0,t[c].slope=f?Math.abs(Math.round(f/p*100)):0;var m=t[c].slope;t[c].color=m>15&&m<30?"#005b4c":m>30&&m<45?"#00362d":m>45?"#00120f":"#00B798",t[c].oldlat=t[c].lat,t[c].oldlon=t[c].lon,t[c].lat=Math.round(1e5*t[c].lat)/1e5,t[c].lon=Math.round(1e5*t[c].lon)/1e5}ub.trace("List Distances",l);for(var y=t[0].z,v=t[0].z,A=t[0].slope,C=0;Cv&&(v=b.z),b.zA&&(A=b.slope)}return{greaterSlope:A,meanSlope:Math.round(s/t.length),distancePlus:r,distanceMinus:n,ascendingElevation:i,descendingElevation:o,altMin:y.toLocaleString(),altMax:v.toLocaleString(),distance:this._getLength(),unit:"m",points:t}}}},{key:"_displayProfile",value:function(e){ub.trace("ElevationPath::_displayProfile",e),this._updateInfoContainer();var t=this.options.displayProfileOptions.target;t&&t.appendChild(this._panelContainer),t=this._profileContainer,this.options.displayProfileOptions.apply.call(this,e,t,this);var n=this.options.displayProfileOptions,r=document.getElementById("GPelevationPathPanelInfo-"+this._uid);r&&(n.totalDistance||n.greaterSlope||n.meanSlope||n.ascendingElevation||n.descendingElevation)&&(r.style.display="block"),this.dispatchEvent({type:"elevationpath:compute"})}},{key:"_updateInfoContainer",value:function(){ub.trace("ElevationPath::_updateInfoContainer");var e=this.options.displayProfileOptions.totalDistance,t=this.options.displayProfileOptions.meanSlope,n=this.options.displayProfileOptions.greaterSlope,r=this.options.displayProfileOptions.ascendingElevation,i=this.options.displayProfileOptions.descendingElevation,o=this._infoContainer;if(o.childElementCount)for(;o.firstChild;)o.removeChild(o.firstChild);e&&this._addElevationPathInformationsItem("Distance totale : ",Math.round(this._data.distance).toLocaleString()+" m"),r&&this._addElevationPathInformationsItem("Dénivelé positif : ",this._data.ascendingElevation.toLocaleString()+" m"),i&&this._addElevationPathInformationsItem("Dénivelé négatif : ",this._data.descendingElevation.toLocaleString()+" m"),t&&this._addElevationPathInformationsItem("Pente moyenne : ",this._data.meanSlope.toLocaleString()+" %"),n&&this._addElevationPathInformationsItem("Plus forte pente : ",this._data.greaterSlope.toLocaleString()+" %")}},{key:"_removeMeasure",value:function(){if(this._lastSketch=null,this._currentSketch=null,this._measureSource){this._marker&&(this._measureSource.removeFeature(this._marker),this._marker=null);for(var e=this._measureSource.getFeatures(),t=0;t=0;o--)t.splice(r[o],1)}else Ib.warn('[ol.control.LayerImport] \'options.layerTypes\' parameter should be an array. Set default values ["KML", "GPX", "GeoJSON", "WMS", "WMTS"]'),e.layerTypes=["KML","GPX","GeoJSON","WMS","WMTS","MAPBOX"]}}},{key:"_initDefaultStyles",value:function(){var e=this.options.vectorStyleOptions.KML.defaultStyle;this._defaultKMLStyle=new St.Style({image:e.image,stroke:e.stroke,fill:e.fill,text:e.text});var t=this.options.vectorStyleOptions.GPX.defaultStyle;this._defaultGPXStyle=new St.Style({image:t.image,stroke:t.stroke,fill:t.fill,text:t.text});var n=this.options.vectorStyleOptions.GeoJSON.defaultStyle;this._defaultGeoJSONStyle=new St.Style({image:n.image,stroke:n.stroke,fill:n.fill,text:n.text});var r=this.options.vectorStyleOptions.MapBox.defaultStyle;this._defaultMapBoxStyle=new St.Style({image:r.image,stroke:r.stroke,fill:r.fill,text:r.text})}},{key:"_initImportTypes",value:function(){this._currentImportType=this.options.layerTypes[0]||"KML","KML"===this._currentImportType||"GPX"===this._currentImportType||"GeoJSON"===this._currentImportType||"MAPBOX"===this._currentImportType?this._isCurrentImportTypeStatic=!0:"WMS"!==this._currentImportType&&"WMTS"!==this._currentImportType&&"WFS"!==this._currentImportType||(this._isCurrentImportTypeStatic=!1),this._currentStaticImportType="local"}},{key:"_initContainer",value:function(){var e=this._createMainContainerElement(),t=this._showImportButton=this._createShowImportPictoElement();e.appendChild(t);var n=this._importPanel=this._createImportPanelElement(),r=this._createImportPanelDivElement();n.appendChild(r);var i=this._importPanelHeader=this._createImportPanelHeaderElement(),o=this._importPanelReturnPicto=this._createImportPanelReturnPictoElement();i.appendChild(o);var a=this._importPanelTitle=this._createImportPanelTitleElement();i.appendChild(a);var s=this._panelCloseButton=this._createImportPanelCloseElement();i.appendChild(s),r.appendChild(i);var l=this._formContainer=this._initInputFormElement();r.appendChild(l);var c=this._getCapPanel=this._createImportGetCapPanelElement(),u=this._getCapResultsListContainer=this._createImportGetCapResultsContainer();c.appendChild(u),r.appendChild(c);var d=this._mapBoxPanel=this._createImportMapBoxPanelElement(),p=this._mapBoxResultsListContainer=this._createImportMapBoxResultsContainer();d.appendChild(p);var h=this._loadingContainer=this._createLoadingElement();d.appendChild(h),r.appendChild(d);var g=this._waitingContainer=this._createImportWaitingElement();return r.appendChild(g),e.appendChild(n),e}},{key:"_initInputFormElement",value:function(){var e=this._createImportPanelFormElement(),t=this._createImportTypeLineElement(this.options.layerTypes);e.appendChild(t);var n=this._createImportStaticParamsContainer(this.options.layerTypes[0]),r=this._createStaticNameLabel();n.appendChild(r);var i=this._createStaticModeChoiceDiv(),o=this._createStaticLocalChoiceDiv();i.appendChild(o);var a=this._createStaticUrlChoiceDiv();i.appendChild(a),n.appendChild(i);var s=this._createStaticLocalInputDiv();s.appendChild(this._createStaticLocalInputLabel()),this._staticLocalImportInput=this._createStaticLocalInput(),s.appendChild(this._staticLocalImportInput),n.appendChild(s);var l=this._createStaticUrlInputDiv();l.appendChild(this._createStaticUrlInputLabel()),this._staticUrlImportInput=this._createStaticUrlInput(),l.appendChild(this._staticUrlImportInput),n.appendChild(l),e.appendChild(n);var c=this._createServiceParamsContainer(this.options.layerTypes[0]),u=this._createServiceUrlDiv();u.appendChild(this._createServiceUrlInputLabel()),this._serviceUrlImportInput=this._createServiceUrlInput(),u.appendChild(this._serviceUrlImportInput),c.appendChild(u),e.appendChild(c);var d=this._createImportSubmitFormElement();return e.appendChild(d),e}},{key:"_onShowImportClick",value:function(e){"true"===e.target.ariaPressed&&this.onPanelOpen();var t=this.getMap();Th.unset(t);var n=this._showImportButton.ariaPressed;this.collapsed=!("true"===n),this.dispatchEvent("change:collapsed"),this.options.position&&!this.collapsed&&this.updatePosition(this.options.position),this._hasMapBoxResults?(this._mapBoxPanel.classList.replace("GPelementHidden","GPelementVisible"),this._mapBoxPanel.classList.replace("gpf-hidden","gpf-visible"),this._hideFormContainer()):this._hasGetCapResults?(this._getCapPanel.classList.replace("GPelementHidden","GPelementVisible"),this._getCapPanel.classList.replace("gpf-hidden","gpf-visible"),this._hideFormContainer()):(this._getCapPanel.classList.replace("GPelementVisible","GPelementHidden"),this._getCapPanel.classList.replace("gpf-visible","gpf-hidden"),this._mapBoxPanel.classList.replace("GPelementVisible","GPelementHidden"),this._mapBoxPanel.classList.replace("gpf-visible","gpf-hidden"),this._displayFormContainer())}},{key:"_onImportTypeChange",value:function(e){this._currentImportType=e.target.value,"KML"===this._currentImportType||"GPX"===this._currentImportType||"GeoJSON"===this._currentImportType||"MAPBOX"===this._currentImportType?this._isCurrentImportTypeStatic=!0:"WMS"!==this._currentImportType&&"WMTS"!==this._currentImportType&&"WFS"!==this._currentImportType||(this._isCurrentImportTypeStatic=!1)}},{key:"_onStaticImportTypeChange",value:function(e){this._currentStaticImportType=e.target.value}},{key:"_onGetCapPanelClose",value:function(){"WMS"!==this._currentImportType&&"WMTS"!==this._currentImportType&&"WFS"!==this._currentImportType||this.cleanGetCapResultsList()}},{key:"_onMapBoxPanelClose",value:function(){this.cleanMapBoxResultsList(),this._loadingContainer.className="",this._importPanelReturnPicto.classList.replace("GPelementVisible","GPelementHidden"),this._importPanelReturnPicto.classList.replace("gpf-visible","gpf-hidden"),this._mapBoxPanel.classList.replace("GPelementVisible","GPelementHidden"),this._mapBoxPanel.classList.replace("gpf-visible","gpf-hidden")}},{key:"_onReturnPictoClick",value:function(e){this._onGetCapPanelClose(),this._onMapBoxPanelClose(),this._loadingContainer.className=""}},{key:"_onImportSubmit",value:function(){Ib.log("import d'une couche de type : "+this._currentImportType),this.contentStatic=null,this.contentService=null,this._isCurrentImportTypeStatic?(this.setCollapsed(!0),this._importStaticLayer()):this._importServiceLayers()}},{key:"_importStaticLayer",value:function(){var e,t=document.getElementById(this._addUID("GPimportName"));t&&(e=t.value||"",Ib.log("import layer name : "+e)),"local"===this._currentStaticImportType?(Ib.log("import static layer from local file"),this._importStaticLayerFromLocalFile(e)):"url"===this._currentStaticImportType&&(Ib.log("import static layer from url"),this._importStaticLayerFromUrl(e))}},{key:"_importStaticLayerFromUrl",value:function(e){var t=this._staticUrlImportInput.value;if(Ib.log("url : ",t),0!==t.length){t.trim&&(t=t.trim()),this._url=t,e||(e=this._url.substring(this._url.lastIndexOf("/")+1,this._url.lastIndexOf("."))),this._name=e,this.options.webServicesOptions&&this.options.webServicesOptions.proxyUrl&&(t=Ct.proxifyUrl(t,this.options.webServicesOptions));var n=this;mt.Protocols.XHR.call({url:t,method:"GET",timeOut:15e3,onResponse:function(t){n._hideWaitingContainer(),n._addFeaturesFromImportStaticLayer(t,e)},onFailure:function(e){n._hideWaitingContainer(),Ib.error("[ol.control.LayerImport] KML/GPX/GeoJSON/MapBox request failed : ",e)}})}else Ib.error("[ol.control.LayerImport] url parameter is mandatory")}},{key:"_importStaticLayerFromLocalFile",value:function(e){var t=this._staticLocalImportInput.files[0];if(t){this._file=t,e||(e=this._file.name.substring(this._file.name.lastIndexOf("/")+1,this._file.name.lastIndexOf("."))),this._name=e;var n=new FileReader,r=this;n.onerror=function(e){r._hideWaitingContainer(),Ib.error("error fileReader : ",e)},n.onprogress=function(){Ib.log("onprogress")},n.onloadstart=function(){r._displayWaitingContainer(),Ib.log("onloadstart")},n.onabort=function(){r._hideWaitingContainer(),Ib.log("onabort")},n.onloadend=function(e){Ib.log("onloadend : ",e)},n.onload=function(t){Ib.log("fileReader onload - file content : ",t.target.result),r._hideWaitingContainer(),r._addFeaturesFromImportStaticLayer(t.target.result,e)},n.readAsText(t)}else Ib.warn("[ol.control.LayerImport] missing file")}},{key:"_addFeaturesFromImportStaticLayer",value:function(e,t){var n=this.getMap();if(n&&e){var r=null,o=null,s=null,l=null;if(this.contentStatic=e,"MAPBOX"===this._currentImportType){this._hasMapBoxResults=!0;var c=this,u=JSON.parse(e),d=u.sources,p=Object.keys(d).length>1?1:0;for(var h in d)if(d.hasOwnProperty(h)){var g="",f="",m=null,y=null,v=null,A=null;if(u.metadata)for(var C in u.metadata)if(u.metadata.hasOwnProperty(C)){var b=C.split(":");if("geoportail"===b[0]){var I=b[1];if("title"===I){g=u.metadata[C];continue}if("description"===I){f=u.metadata[C];continue}if("quicklookUrl"===I){m=u.metadata[C];continue}if("legends"===I){y=u.metadata[C];continue}if("metadata"===I){v=u.metadata[C];continue}if("originators"===I){A=u.metadata[C];continue}}}g||(g="Couche MapBox"),f||(f="Couche MapBox"),g=p?g+"("+h+")":g;var _=d[h],E=_.type;if("vector"===E){var w=_.url,P=_.tiles,S=u.sprite;if(w&&0===w.indexOf("mapbox://")){var M=this._url;if(M){if(P=["a","b","c","d"].map((function(e){return"https://"+e+".tiles.mapbox.com/v4/"+w.replace("mapbox://","")+"/{z}/{x}/{y}.vector.pbf?"+M.split("?")[1]})),0===S.indexOf("mapbox://")){var x=M.split("?");u.sprite=x[0]+"/sprite?"+x[1]}}else Ib.warn("Not yet implemented, can't use the local import scheme with a 'mapbox://' in the file.!")}if(P)s=new(Ci())({featureClass:kt()}),(o=new(i())({attributions:_.attribution,format:s,urls:P}))._title=g,o._description=f,o._quicklookUrl=m,o._metadata=v,o._legends=y,o._originators=A,o.on("tileloadstart",(function(e){c._loadingContainer.className="GPmapLoadingVisible"})),o.on("tileloadend",(function(e){c._loadingContainer.className=""})),o.on("tileloaderror",(function(e){c._loadingContainer.className=""})),(r=new(mi())({source:o,visible:!1,declutter:!0})).id=h,r.gpResultLayerId="layerimport:"+this._currentImportType;else if(w){s=new(Ci())({featureClass:kt()}),(r=new(mi())({visible:!1,declutter:!0})).id=h,r.gpResultLayerId="layerimport:"+this._currentImportType;var G=new(vi())({url:w}),L=G.on("change",(function(){if("ready"===G.getState()){for(var e=G.getTileJSON(),t=Array.isArray(e.tiles)?e.tiles:[e.tiles],n=0;n1e3?Math.round(t/1e3*100)/100+" km":Math.round(100*t)/100+" m"}},{key:"onShowMeasureLengthClick",value:function(e){"true"===e.target.ariaPressed&&this.onPanelOpen(),Zb.trace("call MeasureLength::onShowMeasureLengthClick()",e),this.onShowMeasureClick(e,"LineString")}}])}(Gu);Object.assign(Jb.prototype,YC),Object.assign(Jb.prototype,jb),Object.assign(Jb.prototype,gu);const Xb=Jb;window.ol&&window.ol.control&&(window.ol.control.MeasureLength=Jb);var Kb={_addUID:function(e){return this._uid?e+"-"+this._uid:e},_createMainContainerElement:function(){var e=document.createElement("div");return e.id=this._addUID("GPmeasureArea"),e.className="GPwidget gpf-widget gpf-widget-button",e},_createShowMeasureAreaPictoElement:function(){var e=this,t=document.createElement("button"),n=document.createElement("span");return t.appendChild(n),t.id=this._addUID("GPshowMeasureAreaPicto"),t.className="GPshowOpen GPshowAdvancedToolPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-area fr-btn fr-btn--tertiary",t.setAttribute("aria-label","Mesurer une surface"),t.setAttribute("tabindex","0"),t.setAttribute("aria-pressed",!1),t.setAttribute("type","button"),t.addEventListener?t.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowMeasureAreaClick(t)})):t.attachEvent&&t.attachEvent("onclick",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowMeasureAreaClick(t)})),t}};const Qb=Kb;function $b(e){return $b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},$b(e)}function eI(e,t){for(var n=0;n1e6?Math.round(t/1e6*100)/100+" km2":t>1e5?Math.round(t/1e6*1e3)/1e3+" km2":t>1e3?10*Math.round(t/10)+" m2":Math.round(100*t)/100+" m2"}},{key:"onShowMeasureAreaClick",value:function(e){"true"===e.target.ariaPressed&&this.onPanelOpen(),sI.trace("call MeasureArea::onShowMeasureAreaClick()",e),this.onShowMeasureClick(e,"Polygon")}}])}(Gu);Object.assign(lI.prototype,YC),Object.assign(lI.prototype,Qb),Object.assign(lI.prototype,gu);const cI=lI;window.ol&&window.ol.control&&(window.ol.control.MeasureArea=lI);var uI={_addUID:function(e){return this._uid?e+"-"+this._uid:e},_createMainContainerElement:function(){var e=document.createElement("div");return e.id=this._addUID("GPmeasureAzimuth"),e.className="GPwidget gpf-widget gpf-widget-button",e},_createShowMeasureAzimuthPictoElement:function(){var e=this,t=document.createElement("button"),n=document.createElement("span");return t.appendChild(n),t.id=this._addUID("GPshowMeasureAzimuthPicto"),t.className="GPshowOpen GPshowAdvancedToolPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-azimuth fr-btn fr-btn--tertiary",t.setAttribute("aria-label","Mesurer un azimut"),t.setAttribute("tabindex","0"),t.setAttribute("aria-pressed",!1),t.setAttribute("type","button"),t.addEventListener?t.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowMeasureAzimuthClick(t)})):t.attachEvent&&t.attachEvent("onclick",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowMeasureAzimuthClick(t)})),t}};const dI=uI;function pI(e){return pI="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},pI(e)}function hI(e,t){for(var n=0;n500){var o=500/i;CI.trace("%",o),r=(0,Dr.transform)(e.getCoordinateAt(o),t,"EPSG:4326")}}var a=Math.PI/180,s=180/Math.PI,l=a*n[0],c=a*r[0],u=a*n[1],d=a*r[1],p=Math.sin(c-l)*Math.cos(d),h=Math.cos(u)*Math.sin(d)-Math.sin(u)*Math.cos(d)*Math.cos(c-l),g=s*Math.atan2(p,h);return CI.trace("azimut",g),g<0&&(g+=360),Math.round(100*g)/100+" °"}},{key:"onShowMeasureAzimuthClick",value:function(e){"true"===e.target.ariaPressed&&this.onPanelOpen(),CI.trace("call MeasureAzimuth::onShowMeasureAzimuthClick()",e),this.onShowMeasureClick(e,"LineString")}},{key:"onPointerMoveAzimutHandler",value:function(e){(this.onPointerMoveHandler(e),this.sketch)&&(this.sketch.getGeometry().getCoordinates().length>2&&this.measureDraw.finishDrawing())}}])}(Gu);Object.assign(bI.prototype,YC),Object.assign(bI.prototype,dI),Object.assign(bI.prototype,gu);const II=bI;window.ol&&window.ol.control&&(window.ol.control.MeasureAzimuth=bI);const _I=ol.control.Zoom;var EI=__webpack_require__.n(_I);function wI(e){return wI="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},wI(e)}function PI(e,t){for(var n=0;n\n \n \n
\n ').concat(e.desc,'\n
\n \n ')),r=n.firstChild.querySelector("button");return r&&r.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n);var r=document.getElementById("GPlegend_ID_"+e.id);n?r.classList.replace("gpf-visible","gpf-hidden"):r.classList.replace("gpf-hidden","gpf-visible")})),n.firstChild}}};const a_=o_;function s_(e){return s_="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s_(e)}function l_(e,t){for(var n=0;nl.minScaleDenominator&&u.minScaleDenominator>l.minScaleDenominator&&u.minScaleDenominator\n
\n
\n

\n \n

\n
\n
\n
\n
\n \n
\n
\n \n \n \n
\n
\n \n ')),s=a.firstChild;return s&&s.addEventListener("click",(function(n){t.onImageTerritoriesClick(n,e.id)})),a.firstChild}}};const C_=A_;function b_(e){return b_="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},b_(e)}function I_(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=Array(t);n').firstChild},_createCatalogContentTitleElement:function(e){return Y_('\n \x3c!-- titre --\x3e\n
\n
\n
'.concat(e,"
\n
\n
\n ")).firstChild},_createCatalogContentSearchElement:function(){var e=this,t='\n \x3c!-- barre de recherche --\x3e\n \x3c!-- https://www.systeme-de-design.gouv.fr/composants-et-modeles/composants/barre-de-recherche --\x3e\n \n ',n=Y_(t).attachShadow({mode:"open"});n.innerHTML=t.trim();var r=n.getElementById("search-button");r&&r.addEventListener("click",(function(){e.onSearchCatalogButtonClick()}));var i=n.getElementById("search-input");return i&&i.addEventListener("search",(function(){e.onSearchCatalogInputChange()})),n},_createCatalogWaitingElement:function(){var e=document.createElement("div");e.id=this._addUID("GPcatalogCalcWaitingContainer"),e.className="GPwaitingContainerHidden gpf-waiting--hidden";var t=document.createElement("p");return t.className="GPwaitingContainerInfo gpf-waiting_info",t.innerHTML="Recherche en cours...",e.appendChild(t),e},_createCatalogContentCategoriesTabs:function(e){for(var t=this,n="",r=function(e,t,n,r){var i="GPtabButton fr-tabs__tab",o="false",a=-1;return r&&(i="GPtabButton GPtabButtonActive fr-tabs__tab",o="true",a=0),'\n \n ")},i="",o=function(e){var t=e.default?"checked":"";return'\n \x3c!-- sous categorie --\x3e\n
\n
\n \n \n
\n
\n ")},a="",s=function(e,t,n,r){var a="GPtabContent fr-tabs__panel",s=-1;n&&(a="GPtabContent GPtabContentSelected fr-tabs__panel fr-tabs__panel--selected",s=0);var l='
';return r&&(l=function(e,t){for(var n="",r=0;r')}return'\n \x3c!-- sous categories --\x3e\n
\n ').concat(i,'\n
\n
\n ').concat(n,"\n ")}(t,r)),'\n \x3c!-- panneaux --\x3e\n
\n ').concat(l,"\n
\n ")},l=0;l\n '.concat(n,"\n \n ").concat(a,"\n \n \n "),d=Y_(u.trim()).attachShadow({mode:"open"});d.innerHTML=u.trim();var p=d.querySelectorAll('[role="tabpanel-section"]'),h=d.querySelectorAll('[name="radio-inline"]');h&&h.forEach((function(e){e.addEventListener("change",(function(e){for(var t=0;t\n
\n \n \n
\n
\n \n ')},a=function(e,t,n,r,i){return'\n \x3c!-- section --\x3e\n
\n

\n \n

\n
\n ').concat(i,"\n
\n
\n ")},s=e.section;s&&(r=r.sort((function(t,n){return t[e.filter.field].localeCompare(n[e.filter.field])})));for(var l={},c=0;c\n ').concat(i,"\n \n "),f=Y_(g).attachShadow({mode:"open"});f.innerHTML=g.trim();var m="checkboxes-".concat(e.id),y=f.querySelectorAll('[name="'+m+'"]');y&&y.forEach((function(e){e.addEventListener("click",(function(e){n.onSelectCatalogEntryClick(e)}))}));var v="button-collapse-".concat(e.id),A=f.querySelectorAll('[role="'+v+'"]');A&&A.forEach((function(e){e.addEventListener("click",(function(e){e.target.ariaExpanded=!("true"===e.target.ariaExpanded);var t=document.getElementById(e.target.getAttribute("aria-controls"));t&&("true"===e.target.ariaExpanded?(t.classList.add("fr-collapse--expanded"),t.classList.remove("GPelementHidden")):(t.classList.remove("fr-collapse--expanded"),t.classList.add("GPelementHidden")))}),!1)}));"button-icon-collapse-".concat(e.id);var C=f.querySelectorAll('[role="'+v+'"]');return C&&C.forEach((function(e){e.addEventListener("click",(function(e){e.target.parentElement.click()}))})),f}};const J_=Z_;function X_(e){return X_="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},X_(e)}function K_(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */K_=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,i=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag";function c(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var o=t&&t.prototype instanceof y?t:y,a=Object.create(o.prototype),s=new G(r||[]);return i(a,"_invoke",{value:P(e,n,s)}),a}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=u;var p="suspendedStart",h="suspendedYield",g="executing",f="completed",m={};function y(){}function v(){}function A(){}var C={};c(C,a,(function(){return this}));var b=Object.getPrototypeOf,I=b&&b(b(L([])));I&&I!==n&&r.call(I,a)&&(C=I);var _=A.prototype=y.prototype=Object.create(C);function E(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function n(i,o,a,s){var l=d(e[i],e,o);if("throw"!==l.type){var c=l.arg,u=c.value;return u&&"object"==X_(u)&&r.call(u,"__await")?t.resolve(u.__await).then((function(e){n("next",e,a,s)}),(function(e){n("throw",e,a,s)})):t.resolve(u).then((function(e){c.value=e,a(c)}),(function(e){return n("throw",e,a,s)}))}s(l.arg)}var o;i(this,"_invoke",{value:function(e,r){function i(){return new t((function(t,i){n(e,r,t,i)}))}return o=o?o.then(i,i):i()}})}function P(t,n,r){var i=p;return function(o,a){if(i===g)throw Error("Generator is already running");if(i===f){if("throw"===o)throw a;return{value:e,done:!0}}for(r.method=o,r.arg=a;;){var s=r.delegate;if(s){var l=S(s,r);if(l){if(l===m)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(i===p)throw i=f,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);i=g;var c=d(t,n,r);if("normal"===c.type){if(i=r.done?f:h,c.arg===m)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(i=f,r.method="throw",r.arg=c.arg)}}}function S(t,n){var r=n.method,i=t.iterator[r];if(i===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,S(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),m;var o=d(i,t.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,m;var a=o.arg;return a?a.done?(n[t.resultName]=a.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,m):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,m)}function M(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function G(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(M,this),this.reset(!0)}function L(t){if(t||""===t){var n=t[a];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var i=-1,o=function n(){for(;++i=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var l=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(l&&c){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),x(n),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var i=r.arg;x(n)}return i}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:L(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),m}},t}function Q_(e,t,n,r,i,o,a){try{var s=e[o](a),l=s.value}catch(e){return void n(e)}s.done?t(l):Promise.resolve(l).then(r,i)}function $_(e,t){for(var n=0;n=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function Wu(e){if("undefined"!=typeof window&&window.navigator)return!!navigator.userAgent.match(e)}var Yu=Wu(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),Zu=Wu(/Edge/i),Ju=Wu(/firefox/i),Xu=Wu(/safari/i)&&!Wu(/chrome/i)&&!Wu(/android/i),Ku=Wu(/iP(ad|od|hone)/i),Qu=Wu(/chrome/i)&&Wu(/android/i),$u={capture:!1,passive:!1};function ed(e,t,n){e.addEventListener(t,n,!Yu&&$u)}function td(e,t,n){e.removeEventListener(t,n,!Yu&&$u)}function nd(e,t){if(t){if(">"===t[0]&&(t=t.substring(1)),e)try{if(e.matches)return e.matches(t);if(e.msMatchesSelector)return e.msMatchesSelector(t);if(e.webkitMatchesSelector)return e.webkitMatchesSelector(t)}catch(e){return!1}return!1}}function rd(e){return e.host&&e!==document&&e.host.nodeType?e.host:e.parentNode}function id(e,t,n,r){if(e){n=n||document;do{if(null!=t&&(">"===t[0]?e.parentNode===n&&nd(e,t):nd(e,t))||r&&e===n)return e;if(e===n)break}while(e=rd(e))}return null}var od,ad=/\s+/g;function sd(e,t,n){if(e&&t)if(e.classList)e.classList[n?"add":"remove"](t);else{var r=(" "+e.className+" ").replace(ad," ").replace(" "+t+" "," ");e.className=(r+(n?" "+t:"")).replace(ad," ")}}function ld(e,t,n){var r=e&&e.style;if(r){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(e,""):e.currentStyle&&(n=e.currentStyle),void 0===t?n:n[t];t in r||-1!==t.indexOf("webkit")||(t="-webkit-"+t),r[t]=n+("string"==typeof n?"":"px")}}function cd(e,t){var n="";if("string"==typeof e)n=e;else do{var r=ld(e,"transform");r&&"none"!==r&&(n=r+" "+n)}while(!t&&(e=e.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function ud(e,t,n){if(e){var r=e.getElementsByTagName(t),i=0,o=r.length;if(n)for(;i=o:i<=o))return r;if(r===dd())break;r=vd(r,!1)}return!1}function gd(e,t,n,r){for(var i=0,o=0,a=e.children;o2&&void 0!==arguments[2]?arguments[2]:{},r=n.evt,i=Hu(n,Gd);Md.pluginEvent.bind(_p)(e,t,Fu({dragEl:Td,parentEl:Rd,ghostEl:Od,rootEl:Dd,nextEl:Nd,lastDownEl:Ud,cloneEl:jd,cloneHidden:Bd,dragStarted:$d,putSortable:Wd,activeSortable:_p.active,originalEvent:r,oldIndex:Fd,oldDraggableIndex:Vd,newIndex:zd,newDraggableIndex:qd,hideGhostForTarget:Ap,unhideGhostForTarget:Cp,cloneNowHidden:function(){Bd=!0},cloneNowShown:function(){Bd=!1},dispatchSortableEvent:function(e){kd({sortable:t,name:e,originalEvent:r})}},i))};function kd(e){xd(Fu({putSortable:Wd,cloneEl:jd,targetEl:Td,rootEl:Dd,oldIndex:Fd,oldDraggableIndex:Vd,newIndex:zd,newDraggableIndex:qd},e))}var Td,Rd,Od,Dd,Nd,Ud,jd,Bd,Fd,zd,Vd,qd,Hd,Wd,Yd,Zd,Jd,Xd,Kd,Qd,$d,ep,tp,np,rp,ip=!1,op=!1,ap=[],sp=!1,lp=!1,cp=[],up=!1,dp=[],pp="undefined"!=typeof document,hp=Ku,gp=Zu||Yu?"cssFloat":"float",fp=pp&&!Qu&&!Ku&&"draggable"in document.createElement("div"),mp=function(){if(pp){if(Yu)return!1;var e=document.createElement("x");return e.style.cssText="pointer-events:auto","auto"===e.style.pointerEvents}}(),yp=function(e,t){var n=ld(e),r=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),i=gd(e,0,t),o=gd(e,1,t),a=i&&ld(i),s=o&&ld(o),l=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+pd(i).width,c=s&&parseInt(s.marginLeft)+parseInt(s.marginRight)+pd(o).width;if("flex"===n.display)return"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal";if("grid"===n.display)return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(i&&a.float&&"none"!==a.float){var u="left"===a.float?"left":"right";return!o||"both"!==s.clear&&s.clear!==u?"horizontal":"vertical"}return i&&("block"===a.display||"flex"===a.display||"table"===a.display||"grid"===a.display||l>=r&&"none"===n[gp]||o&&"none"===n[gp]&&l+c>r)?"vertical":"horizontal"},vp=function(e){function t(e,n){return function(r,i,o,a){var s=r.options.group.name&&i.options.group.name&&r.options.group.name===i.options.group.name;if(null==e&&(n||s))return!0;if(null==e||!1===e)return!1;if(n&&"clone"===e)return e;if("function"==typeof e)return t(e(r,i,o,a),n)(r,i,o,a);var l=(n?r:i).options.group.name;return!0===e||"string"==typeof e&&e===l||e.join&&e.indexOf(l)>-1}}var n={},r=e.group;r&&"object"==zu(r)||(r={name:r}),n.name=r.name,n.checkPull=t(r.pull,!0),n.checkPut=t(r.put),n.revertClone=r.revertClone,e.group=n},Ap=function(){!mp&&Od&&ld(Od,"display","none")},Cp=function(){!mp&&Od&&ld(Od,"display","")};pp&&!Qu&&document.addEventListener("click",(function(e){if(op)return e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.stopImmediatePropagation&&e.stopImmediatePropagation(),op=!1,!1}),!0);var bp=function(e){if(Td){e=e.touches?e.touches[0]:e;var t=(i=e.clientX,o=e.clientY,ap.some((function(e){var t=e[Ed].options.emptyInsertThreshold;if(t&&!fd(e)){var n=pd(e),r=i>=n.left-t&&i<=n.right+t,s=o>=n.top-t&&o<=n.bottom+t;return r&&s?a=e:void 0}})),a);if(t){var n={};for(var r in e)e.hasOwnProperty(r)&&(n[r]=e[r]);n.target=n.rootEl=t,n.preventDefault=void 0,n.stopPropagation=void 0,t[Ed]._onDragOver(n)}}var i,o,a},Ip=function(e){Td&&Td.parentNode[Ed]._isOutsideThisEl(e.target)};function _p(e,t){if(!e||!e.nodeType||1!==e.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(e));this.el=e,this.options=t=qu({},t),e[Ed]=this;var n={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(e.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return yp(e,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(e,t){e.setData("Text",t.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==_p.supportPointer&&"PointerEvent"in window&&!Xu,emptyInsertThreshold:5};for(var r in Md.initializePlugins(this,e,n),n)!(r in t)&&(t[r]=n[r]);for(var i in vp(t),this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!t.forceFallback&&fp,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?ed(e,"pointerdown",this._onTapStart):(ed(e,"mousedown",this._onTapStart),ed(e,"touchstart",this._onTapStart)),this.nativeDraggable&&(ed(e,"dragover",this),ed(e,"dragenter",this)),ap.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),qu(this,wd())}function Ep(e,t,n,r,i,o,a,s){var l,c,u=e[Ed],d=u.options.onMove;return!window.CustomEvent||Yu||Zu?(l=document.createEvent("Event")).initEvent("move",!0,!0):l=new CustomEvent("move",{bubbles:!0,cancelable:!0}),l.to=t,l.from=e,l.dragged=n,l.draggedRect=r,l.related=i||t,l.relatedRect=o||pd(t),l.willInsertAfter=s,l.originalEvent=a,e.dispatchEvent(l),d&&(c=d.call(u,l,a)),c}function wp(e){e.draggable=!1}function Pp(){up=!1}function Sp(e){for(var t=e.tagName+e.className+e.src+e.href+e.textContent,n=t.length,r=0;n--;)r+=t.charCodeAt(n);return r.toString(36)}function Mp(e){return setTimeout(e,0)}function xp(e){return clearTimeout(e)}_p.prototype={constructor:_p,_isOutsideThisEl:function(e){this.el.contains(e)||e===this.el||(ep=null)},_getDirection:function(e,t){return"function"==typeof this.options.direction?this.options.direction.call(this,e,t,Td):this.options.direction},_onTapStart:function(e){if(e.cancelable){var t=this,n=this.el,r=this.options,i=r.preventOnFilter,o=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,s=(a||e).target,l=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||s,c=r.filter;if(function(e){dp.length=0;var t=e.getElementsByTagName("input"),n=t.length;for(;n--;){var r=t[n];r.checked&&dp.push(r)}}(n),!Td&&!(/mousedown|pointerdown/.test(o)&&0!==e.button||r.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!Xu||!s||"SELECT"!==s.tagName.toUpperCase())&&!((s=id(s,r.draggable,n,!1))&&s.animated||Ud===s)){if(Fd=md(s),Vd=md(s,r.draggable),"function"==typeof c){if(c.call(this,e,s,this))return kd({sortable:t,rootEl:l,name:"filter",targetEl:s,toEl:n,fromEl:n}),Ld("filter",t,{evt:e}),void(i&&e.cancelable&&e.preventDefault())}else if(c&&(c=c.split(",").some((function(r){if(r=id(l,r.trim(),n,!1))return kd({sortable:t,rootEl:r,name:"filter",targetEl:s,fromEl:n,toEl:n}),Ld("filter",t,{evt:e}),!0}))))return void(i&&e.cancelable&&e.preventDefault());r.handle&&!id(l,r.handle,n,!1)||this._prepareDragStart(e,a,s)}}},_prepareDragStart:function(e,t,n){var r,i=this,o=i.el,a=i.options,s=o.ownerDocument;if(n&&!Td&&n.parentNode===o){var l=pd(n);if(Dd=o,Rd=(Td=n).parentNode,Nd=Td.nextSibling,Ud=n,Hd=a.group,_p.dragged=Td,Yd={target:Td,clientX:(t||e).clientX,clientY:(t||e).clientY},Kd=Yd.clientX-l.left,Qd=Yd.clientY-l.top,this._lastX=(t||e).clientX,this._lastY=(t||e).clientY,Td.style["will-change"]="all",r=function(){Ld("delayEnded",i,{evt:e}),_p.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!Ju&&i.nativeDraggable&&(Td.draggable=!0),i._triggerDragStart(e,t),kd({sortable:i,name:"choose",originalEvent:e}),sd(Td,a.chosenClass,!0))},a.ignore.split(",").forEach((function(e){ud(Td,e.trim(),wp)})),ed(s,"dragover",bp),ed(s,"mousemove",bp),ed(s,"touchmove",bp),ed(s,"mouseup",i._onDrop),ed(s,"touchend",i._onDrop),ed(s,"touchcancel",i._onDrop),Ju&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Td.draggable=!0),Ld("delayStart",this,{evt:e}),!a.delay||a.delayOnTouchOnly&&!t||this.nativeDraggable&&(Zu||Yu))r();else{if(_p.eventCanceled)return void this._onDrop();ed(s,"mouseup",i._disableDelayedDrag),ed(s,"touchend",i._disableDelayedDrag),ed(s,"touchcancel",i._disableDelayedDrag),ed(s,"mousemove",i._delayedDragTouchMoveHandler),ed(s,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&ed(s,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(r,a.delay)}}},_delayedDragTouchMoveHandler:function(e){var t=e.touches?e.touches[0]:e;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Td&&wp(Td),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var e=this.el.ownerDocument;td(e,"mouseup",this._disableDelayedDrag),td(e,"touchend",this._disableDelayedDrag),td(e,"touchcancel",this._disableDelayedDrag),td(e,"mousemove",this._delayedDragTouchMoveHandler),td(e,"touchmove",this._delayedDragTouchMoveHandler),td(e,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(e,t){t=t||"touch"==e.pointerType&&e,!this.nativeDraggable||t?this.options.supportPointer?ed(document,"pointermove",this._onTouchMove):ed(document,t?"touchmove":"mousemove",this._onTouchMove):(ed(Td,"dragend",this),ed(Dd,"dragstart",this._onDragStart));try{document.selection?Mp((function(){document.selection.empty()})):window.getSelection().removeAllRanges()}catch(e){}},_dragStarted:function(e,t){if(ip=!1,Dd&&Td){Ld("dragStarted",this,{evt:t}),this.nativeDraggable&&ed(document,"dragover",Ip);var n=this.options;!e&&sd(Td,n.dragClass,!1),sd(Td,n.ghostClass,!0),_p.active=this,e&&this._appendGhost(),kd({sortable:this,name:"start",originalEvent:t})}else this._nulling()},_emulateDragOver:function(){if(Zd){this._lastX=Zd.clientX,this._lastY=Zd.clientY,Ap();for(var e=document.elementFromPoint(Zd.clientX,Zd.clientY),t=e;e&&e.shadowRoot&&(e=e.shadowRoot.elementFromPoint(Zd.clientX,Zd.clientY))!==t;)t=e;if(Td.parentNode[Ed]._isOutsideThisEl(e),t)do{if(t[Ed]){if(t[Ed]._onDragOver({clientX:Zd.clientX,clientY:Zd.clientY,target:e,rootEl:t})&&!this.options.dragoverBubble)break}e=t}while(t=rd(t));Cp()}},_onTouchMove:function(e){if(Yd){var t=this.options,n=t.fallbackTolerance,r=t.fallbackOffset,i=e.touches?e.touches[0]:e,o=Od&&cd(Od,!0),a=Od&&o&&o.a,s=Od&&o&&o.d,l=hp&&rp&&yd(rp),c=(i.clientX-Yd.clientX+r.x)/(a||1)+(l?l[0]-cp[0]:0)/(a||1),u=(i.clientY-Yd.clientY+r.y)/(s||1)+(l?l[1]-cp[1]:0)/(s||1);if(!_p.active&&!ip){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))i.right+o||e.clientY>r.bottom&&e.clientX>r.left:e.clientY>i.bottom+o||e.clientX>r.right&&e.clientY>r.top}(e,i,this)&&!f.animated){if(f===Td)return L(!1);if(f&&o===e.target&&(a=f),a&&(n=pd(a)),!1!==Ep(Dd,o,Td,t,a,n,e,!!a))return G(),f&&f.nextSibling?o.insertBefore(Td,f.nextSibling):o.appendChild(Td),Rd=o,k(),L(!0)}else if(f&&function(e,t,n){var r=pd(gd(n.el,0,n.options,!0)),i=_d(n.el,n.options,Od),o=10;return t?e.clientXu+c*o/2:ld-np)return-tp}else if(l>u+c*(1-i)/2&&ld-c*o/2))return l>u+c/2?1:-1;return 0}(e,a,n,i,b?1:s.swapThreshold,null==s.invertedSwapThreshold?s.swapThreshold:s.invertedSwapThreshold,lp,ep===a),0!==y){var w=md(Td);do{w-=y,A=Rd.children[w]}while(A&&("none"===ld(A,"display")||A===Od))}if(0===y||A===a)return L(!1);ep=a,tp=y;var P=a.nextElementSibling,S=!1,M=Ep(Dd,o,Td,t,a,n,e,S=1===y);if(!1!==M)return 1!==M&&-1!==M||(S=1===M),up=!0,setTimeout(Pp,30),G(),S&&!P?o.appendChild(Td):a.parentNode.insertBefore(Td,S?P:a),_&&bd(_,0,E-_.scrollTop),Rd=Td.parentNode,void 0===v||lp||(np=Math.abs(v-pd(a)[I])),k(),L(!0)}if(o.contains(Td))return L(!1)}return!1}function x(s,l){Ld(s,h,Fu({evt:e,isOwner:u,axis:i?"vertical":"horizontal",revert:r,dragRect:t,targetRect:n,canSort:d,fromSortable:p,target:a,completed:L,onMove:function(n,r){return Ep(Dd,o,Td,t,n,pd(n),e,r)},changed:k},l))}function G(){x("dragOverAnimationCapture"),h.captureAnimationState(),h!==p&&p.captureAnimationState()}function L(t){return x("dragOverCompleted",{insertion:t}),t&&(u?c._hideClone():c._showClone(h),h!==p&&(sd(Td,Wd?Wd.options.ghostClass:c.options.ghostClass,!1),sd(Td,s.ghostClass,!0)),Wd!==h&&h!==_p.active?Wd=h:h===_p.active&&Wd&&(Wd=null),p===h&&(h._ignoreWhileAnimating=a),h.animateAll((function(){x("dragOverAnimationComplete"),h._ignoreWhileAnimating=null})),h!==p&&(p.animateAll(),p._ignoreWhileAnimating=null)),(a===Td&&!Td.animated||a===o&&!a.animated)&&(ep=null),s.dragoverBubble||e.rootEl||a===document||(Td.parentNode[Ed]._isOutsideThisEl(e.target),!t&&bp(e)),!s.dragoverBubble&&e.stopPropagation&&e.stopPropagation(),g=!0}function k(){zd=md(Td),qd=md(Td,s.draggable),kd({sortable:h,name:"change",toEl:o,newIndex:zd,newDraggableIndex:qd,originalEvent:e})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){td(document,"mousemove",this._onTouchMove),td(document,"touchmove",this._onTouchMove),td(document,"pointermove",this._onTouchMove),td(document,"dragover",bp),td(document,"mousemove",bp),td(document,"touchmove",bp)},_offUpEvents:function(){var e=this.el.ownerDocument;td(e,"mouseup",this._onDrop),td(e,"touchend",this._onDrop),td(e,"pointerup",this._onDrop),td(e,"touchcancel",this._onDrop),td(document,"selectstart",this)},_onDrop:function(e){var t=this.el,n=this.options;zd=md(Td),qd=md(Td,n.draggable),Ld("drop",this,{evt:e}),Rd=Td&&Td.parentNode,zd=md(Td),qd=md(Td,n.draggable),_p.eventCanceled||(ip=!1,lp=!1,sp=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),xp(this.cloneId),xp(this._dragStartId),this.nativeDraggable&&(td(document,"drop",this),td(t,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),Xu&&ld(document.body,"user-select",""),ld(Td,"transform",""),e&&($d&&(e.cancelable&&e.preventDefault(),!n.dropBubble&&e.stopPropagation()),Od&&Od.parentNode&&Od.parentNode.removeChild(Od),(Dd===Rd||Wd&&"clone"!==Wd.lastPutMode)&&jd&&jd.parentNode&&jd.parentNode.removeChild(jd),Td&&(this.nativeDraggable&&td(Td,"dragend",this),wp(Td),Td.style["will-change"]="",$d&&!ip&&sd(Td,Wd?Wd.options.ghostClass:this.options.ghostClass,!1),sd(Td,this.options.chosenClass,!1),kd({sortable:this,name:"unchoose",toEl:Rd,newIndex:null,newDraggableIndex:null,originalEvent:e}),Dd!==Rd?(zd>=0&&(kd({rootEl:Rd,name:"add",toEl:Rd,fromEl:Dd,originalEvent:e}),kd({sortable:this,name:"remove",toEl:Rd,originalEvent:e}),kd({rootEl:Rd,name:"sort",toEl:Rd,fromEl:Dd,originalEvent:e}),kd({sortable:this,name:"sort",toEl:Rd,originalEvent:e})),Wd&&Wd.save()):zd!==Fd&&zd>=0&&(kd({sortable:this,name:"update",toEl:Rd,originalEvent:e}),kd({sortable:this,name:"sort",toEl:Rd,originalEvent:e})),_p.active&&(null!=zd&&-1!==zd||(zd=Fd,qd=Vd),kd({sortable:this,name:"end",toEl:Rd,originalEvent:e}),this.save())))),this._nulling()},_nulling:function(){Ld("nulling",this),Dd=Td=Rd=Od=Nd=jd=Ud=Bd=Yd=Zd=$d=zd=qd=Fd=Vd=ep=tp=Wd=Hd=_p.dragged=_p.ghost=_p.clone=_p.active=null,dp.forEach((function(e){e.checked=!0})),dp.length=Jd=Xd=0},handleEvent:function(e){switch(e.type){case"drop":case"dragend":this._onDrop(e);break;case"dragenter":case"dragover":Td&&(this._onDragOver(e),function(e){e.dataTransfer&&(e.dataTransfer.dropEffect="move");e.cancelable&&e.preventDefault()}(e));break;case"selectstart":e.preventDefault()}},toArray:function(){for(var e,t=[],n=this.el.children,r=0,i=n.length,o=this.options;r1&&void 0!==arguments[1]&&arguments[1],n=document.createElement("button");n.id=t?this._addUID("GPremoveContextual_ID_"+e.id):this._addUID("GPremove_ID_"+e.id),n.className="GPlayerRemove gpf-btn gpf-btn-icon gpf-btn-icon-ls-remove fr-btn fr-btn--tertiary gpf-btn--tertiary",n.title="Supprimer la couche",n.layerId=e.id,t&&(n.innerText="Supprimer"),n.setAttribute("tabindex","0"),n.setAttribute("type","button");var r=this;return n.addEventListener?n.addEventListener("click",(function(e){r._onDropLayerClick(e)})):n.attachEvent&&n.attachEvent("onclick",(function(e){r._onDropLayerClick(e)})),n},_createAdvancedToolInformationElement:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=document.createElement("button");n.id=t?this._addUID("GPinfoContextual_ID_"+e.id):this._addUID("GPinfo_ID_"+e.id),n.className="GPlayerInfo GPlayerInfoClosed gpf-btn gpf-btn-icon gpf-btn-icon-ls-info fr-btn fr-btn--tertiary gpf-btn--tertiary",e.title&&e.description||(n.style.opacity="0",n.style.visibility="hidden",t&&(n.style.display="none")),n.title="Informations/légende",n.layerId=e.id,t&&(n.innerText="Informations"),n.setAttribute("tabindex","0"),n.setAttribute("type","button");var r=this;return n.addEventListener?n.addEventListener("click",(function(e){r._onOpenLayerInfoClick(e)})):n.attachEvent&&n.attachEvent("onclick",(function(e){r._onOpenLayerInfoClick(e)})),n},_createAdvancedToolOpacityElement:function(e){var t=[],n=document.createElement("div");n.id=this._addUID("GPopacity_ID_"+e.id),n.className="GPlayerOpacity fr-range fr-range--sm",n.dataset.frJsRange="true",n.title="Opacité";var r=void 0!==e.opacity?e.opacity:1;r=Math.round(100*r),n.style.setProperty("--progress-right",r+"%");var i=document.createElement("input");i.id=this._addUID("GPopacityValueDiv_ID_"+e.id),i.type="range",i.value=r,i.ariaLabel="Opacité";var o=this;i.addEventListener?i.addEventListener("change",(function(e){o._onChangeLayerOpacity(e)})):i.attachEvent&&i.attachEvent("onchange",(function(e){o._onChangeLayerOpacity(e)})),i.addEventListener?i.addEventListener("input",(function(e){o._onChangeLayerOpacity(e)})):i.attachEvent&&i.attachEvent("oninput",(function(e){o._onChangeLayerOpacity(e)})),n.appendChild(i);var a=document.createElement("div");a.id=this._addUID("GPopacityValueDiv_ID_"+e.id),a.className="GPlayerOpacityValue";var s=document.createElement("span");return s.id=this._addUID("GPopacityValue_ID_"+e.id),s.className="gpf-range__output fr-range__output gpf-visible",s.innerHTML=r+"%",a.appendChild(s),t.push(n),t.push(a),t},_createAdvancedToolExtentElement:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=document.createElement("button");n.id=t?this._addUID("GPextentContextual_ID_"+e.id):this._addUID("GPextent_ID_"+e.id),n.className="GPelementHidden GPlayerExtent gpf-btn gpf-btn-icon gpf-btn-icon-ls-extent fr-btn fr-btn--tertiary gpf-btn--tertiary",n.title="Zoomer dans l'étendue",n.layerId=e.id,t&&(n.innerText="Zoomer"),n.setAttribute("tabindex","0"),n.setAttribute("aria-pressed",!0),n.setAttribute("type","button");var r=this;return n.addEventListener?n.addEventListener("click",(function(e){var t="true"===e.target.ariaPressed;e.target.setAttribute("aria-pressed",!t),r._onZoomToExtentClick(e)})):n.attachEvent&&n.attachEvent("onclick",(function(e){var t="true"===e.target.ariaPressed;e.target.setAttribute("aria-pressed",!t),r._onZoomToExtentClick(e)})),n},_createContainerLayerInfoElement:function(e){var t=document.createElement("div"),n=document.createElement("div");n.className="gpf-panel__header_ls",t.appendChild(n);var r=document.createElement("label");r.className="GPlayerInfo gpf-btn-header gpf-btn-icon-ls-info",r.title="Informations",n.appendChild(r);var i=document.createElement("div");i.id=this._addUID("GPlayerInfoTitle"),i.innerHTML=e.title,i.className="gpf-panel__title_ls",n.appendChild(i);var o=document.createElement("button");o.id=this._addUID("GPlayerInfoClose"),o.className="GPpanelClose GPlayersPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w",o.title="Fermer la fenêtre";var a=this,s=function(){document.getElementById(a._addUID("GPlayerInfoPanel")).classList.add("GPlayerInfoPanelClosed","gpf-hidden"),document.getElementById(a._addUID("GPlayerInfoPanel")).classList.remove("GPlayerInfoPanelOpened","gpf-visible"),document.getElementById(e.id).classList.add("GPlayerInfoClosed"),document.getElementById(e.id).classList.remove("GPlayerInfoOpened")};o.addEventListener?o.addEventListener("click",s):o.attachEvent&&o.attachEvent("onclick",s),this.addEventListener("layerswitcher:remove",(function(t){parseInt(e.id.split("-")[0].split("GPinfo_ID_")[1])===t.layer.id&&(document.getElementById(a._addUID("GPlayerInfoPanel")).classList.add("GPlayerInfoPanelClosed","gpf-hidden"),document.getElementById(a._addUID("GPlayerInfoPanel")).classList.remove("GPlayerInfoPanelOpened","gpf-visible"))})),n.appendChild(o),t.appendChild(n);var l=document.createElement("div");if(l.id=this._addUID("GPlayerInfoContent"),l.className="gpf-panel__content fr-modal__content",t.appendChild(l),e.quicklookUrl){var c=document.createElement("div");c.id=this._addUID("GPlayerInfoQuicklook"),c.title="Afficher un aperçu de la couche";var u=document.createElement("a");u.href=e.quicklookUrl,u.appendChild(c),l.appendChild(u)}var d=document.createElement("div");if(d.id=this._addUID("GPlayerInfoDescription"),d.innerHTML=e.description,l.appendChild(d),e.metadata){var p=document.createElement("div");p.id=this._addUID("GPlayerInfoMetadata");var h=document.createElement("div");h.className="GPlayerInfoSubtitle",h.innerHTML="Métadonnées",p.appendChild(h);for(var g=0;g=0;l--);}(n=t,r="setMap",i=this,a=$p(eh(1&(o=3)?n.prototype:n),r,i),2&o&&"function"==typeof a?function(e){return a.apply(i,e)}:a)([e]),this.options.position&&this.setPosition(this.options.position),!1===this.options.gutter&&this.getContainer().classList.add("gpf-button-no-gutter")}},{key:"addLayer",value:function(e,t){var n=this,r=this.getMap();if(t=t||{},e){var i=e.gpLayerId;if(void 0!==i){var o=!1;if(r.getLayers().forEach((function(e){e.gpLayerId===i&&(o=!0)})),o){if(this._layers[i]){for(var a in t)t.hasOwnProperty(a)&&(this._layers[i][a]=t[a]);if(t.title){var s=document.getElementById(this._addUID("GPname_ID_"+i));s&&(s.innerHTML=t.title,s.title=t.description||t.title)}var l=document.getElementById(this._addUID("GPinfo_ID_"+i));if(!document.getElementById(this._addUID("GPinfo_ID_"+i))&&t.description){var c=document.getElementById(this._addUID("GPadvancedTools_ID_"+i));c&&c.appendChild(this._createAdvancedToolInformationElement({id:i}))}l&&"GPlayerInfoOpened"===l.className&&document.getElementById(this._addUID("GPlayerInfoPanel")).classList.add("GPlayerInfoPanelClosed","gpf-hidden")}else{var u=this.getLayerInfo(e)||{},d=e.getOpacity(),p=e.getVisible(),h=this.isInRange(e,r),g={layer:e,id:i,name:e.name,service:e.service,opacity:null!=d?d:1,visibility:null==p||p,inRange:null==h||h,title:null!=t.title?t.title:u._title||i,description:t.description||u._description||null,legends:t.legends||u._legends||[],metadata:t.metadata||u._metadata||[],quicklookUrl:t.quicklookUrl||u._quicklookUrl||null};this._layers[i]=g;var f=this._createLayerDiv(g);this._layers[i].div=f,e.getZIndex&&0!==e.getZIndex()&&void 0!==e.getZIndex()||e._forceNullzIndex?this._updateLayersOrder():(this._layersOrder.unshift(g),this._lastZIndex++,e.setZIndex(this._lastZIndex),this._layerListContainer.insertBefore(f,this._layerListContainer.firstChild)),this._listeners.updateLayerOpacity=e.on("change:opacity",(function(e){return n._updateLayerOpacity(e)})),this._listeners.updateLayerVisibility=e.on("change:visible",(function(e){return n._updateLayerVisibility(e)})),null==this._layers[i].onZIndexChangeEvent&&(this._layers[i].onZIndexChangeEvent=e.on("change:zIndex",(function(){return n._updateLayersOrder()})))}this._updateLayerCounter(),this.dispatchEvent({type:"layerswitcher:add",layer:this._layers[i]})}else nh.log("[ERROR] LayerSwitcher:addLayer - configuration cannot be set for ",e," layer (layer is not in map.getLayers() )")}else nh.trace("[WARN] LayerSwitcher:addLayer - configuration cannot be set for this layer (layer id not found)",e)}else nh.log("[ERROR] LayerSwitcher:addLayer - missing layer parameter")}},{key:"removeLayer",value:function(e){if(e){(0,bi.unByKey)(this._listeners.updateLayerOpacity),(0,bi.unByKey)(this._listeners.updateLayerVisibility),nh.trace(e);var t=e.gpLayerId,n=document.getElementById(this._addUID("GPinfo_ID_"+t));n&&"GPlayerInfoOpened"===n.className&&document.getElementById(this._addUID("GPlayerInfoPanel")).classList.add("GPlayerInfoPanelClosed","gpf-hidden");var r=document.getElementById(this._addUID("GPlayerSwitcher_ID_"+t));r&&this._layerListContainer.removeChild(r);var i=Math.abs(e.getZIndex()-this._lastZIndex);this._layersOrder.splice(i,1),this._lastZIndex--;for(var o=this._layersOrder,a=0;a1&&(t=1),t<0&&(t=0);var n=e.target.gpLayerId,r=document.getElementById(this._addUID("GPopacityValueDiv_ID_"+n));r&&(r.value=Math.round(100*t));var i=document.getElementById(this._addUID("GPopacityValue_ID_"+n));i&&(i.innerHTML=Math.round(100*t)+"%"),this.dispatchEvent({type:"layerswitcher:change:opacity",opacity:t,layer:this._layers[n]})}},{key:"_onVisibilityLayerClick",value:function(e){var t=e.target.id,n=ju.index(t);this._layers[n].layer.setVisible("true"===e.target.ariaPressed)}},{key:"_updateLayerVisibility",value:function(e){var t=e.target.getVisible(),n=e.target.gpLayerId,r=document.getElementById(this._addUID("GPvisibilityPicto_ID_"+n));r&&(r.ariaPressed=t),this.dispatchEvent({type:"layerswitcher:change:visibility",visibility:t,layer:this._layers[n]})}},{key:"_updateLayersOrder",value:function(){var e=this,t=this.getMap();if(t){var n,r;for(var i in this._layersIndex={},t.getLayers().forEach((function(t){r=t.gpLayerId,(0,bi.unByKey)(e._layers[r].onZIndexChangeEvent),e._layers[r].onZIndexChangeEvent=null,n=null,void 0!==t.getZIndex&&(n=t.getZIndex(),e._layersIndex[n]&&Array.isArray(e._layersIndex[n])||(e._layersIndex[n]=[]),e._layersIndex[n].push(e._layers[r]))})),this._lastZIndex=0,this._layersOrder=[],this._layersIndex)if(this._layersIndex.hasOwnProperty(i))for(var o=this._layersIndex[i],a=0;ae.getMaxResolution()||nu.right||f+r.height>u.bottom)a=p,s=h;else{var m=l-a,y=c-s;e.style.transform="translate("+m+"px,"+y+"px)"}}}};const ah=oh;function sh(e){return sh="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},sh(e)}function lh(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */lh=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,i=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag";function c(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var o=t&&t.prototype instanceof y?t:y,a=Object.create(o.prototype),s=new G(r||[]);return i(a,"_invoke",{value:P(e,n,s)}),a}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=u;var p="suspendedStart",h="suspendedYield",g="executing",f="completed",m={};function y(){}function v(){}function A(){}var C={};c(C,a,(function(){return this}));var b=Object.getPrototypeOf,I=b&&b(b(L([])));I&&I!==n&&r.call(I,a)&&(C=I);var _=A.prototype=y.prototype=Object.create(C);function E(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function n(i,o,a,s){var l=d(e[i],e,o);if("throw"!==l.type){var c=l.arg,u=c.value;return u&&"object"==sh(u)&&r.call(u,"__await")?t.resolve(u.__await).then((function(e){n("next",e,a,s)}),(function(e){n("throw",e,a,s)})):t.resolve(u).then((function(e){c.value=e,a(c)}),(function(e){return n("throw",e,a,s)}))}s(l.arg)}var o;i(this,"_invoke",{value:function(e,r){function i(){return new t((function(t,i){n(e,r,t,i)}))}return o=o?o.then(i,i):i()}})}function P(t,n,r){var i=p;return function(o,a){if(i===g)throw Error("Generator is already running");if(i===f){if("throw"===o)throw a;return{value:e,done:!0}}for(r.method=o,r.arg=a;;){var s=r.delegate;if(s){var l=S(s,r);if(l){if(l===m)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(i===p)throw i=f,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);i=g;var c=d(t,n,r);if("normal"===c.type){if(i=r.done?f:h,c.arg===m)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(i=f,r.method="throw",r.arg=c.arg)}}}function S(t,n){var r=n.method,i=t.iterator[r];if(i===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,S(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),m;var o=d(i,t.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,m;var a=o.arg;return a?a.done?(n[t.resultName]=a.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,m):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,m)}function M(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function G(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(M,this),this.reset(!0)}function L(t){if(t||""===t){var n=t[a];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var i=-1,o=function n(){for(;++i=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var l=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(l&&c){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),x(n),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var i=r.arg;x(n)}return i}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:L(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),m}},t}function ch(e,t,n,r,i,o,a){try{var s=e[o](a),l=s.value}catch(e){return void n(e)}s.done?t(l):Promise.resolve(l).then(r,i)}function uh(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){ch(o,r,i,a,s,"next",e)}function s(e){ch(o,r,i,a,s,"throw",e)}a(void 0)}))}}function dh(e,t){for(var n=0;n
\n '},_createGetFeatureInfoAccordionGroup:function(){var e=document.createElement("div");return e.id=this._addUID("GPgetFeatureInfoAccordionGroup"),e.className="GPgetFeatureInfoAccordionGroup fr-accordions-group",e},_createGetFeatureInfoLayerAccordion:function(e){var t=this.stringToHTML('\n
\n

\n \n

\n
\n ').concat(this._createGetFeatureInfoWaitingDiv(),"\n
\n
\n ")).firstChild;return t.querySelector("button, button.fr-accordion__btn").addEventListener("click",(function(e){e.currentTarget.ariaExpanded=!("true"===e.currentTarget.ariaExpanded);var t=document.getElementById(e.currentTarget.getAttribute("aria-controls"));"true"===e.currentTarget.ariaExpanded?(t.classList.add("fr-collapse--expanded"),t.classList.remove("GPelementHidden")):(t.classList.remove("fr-collapse--expanded"),t.classList.add("GPelementHidden"))})),t}};const fh=gh;function mh(e){return mh="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},mh(e)}function yh(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */yh=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,i=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag";function c(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var o=t&&t.prototype instanceof y?t:y,a=Object.create(o.prototype),s=new G(r||[]);return i(a,"_invoke",{value:P(e,n,s)}),a}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=u;var p="suspendedStart",h="suspendedYield",g="executing",f="completed",m={};function y(){}function v(){}function A(){}var C={};c(C,a,(function(){return this}));var b=Object.getPrototypeOf,I=b&&b(b(L([])));I&&I!==n&&r.call(I,a)&&(C=I);var _=A.prototype=y.prototype=Object.create(C);function E(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function n(i,o,a,s){var l=d(e[i],e,o);if("throw"!==l.type){var c=l.arg,u=c.value;return u&&"object"==mh(u)&&r.call(u,"__await")?t.resolve(u.__await).then((function(e){n("next",e,a,s)}),(function(e){n("throw",e,a,s)})):t.resolve(u).then((function(e){c.value=e,a(c)}),(function(e){return n("throw",e,a,s)}))}s(l.arg)}var o;i(this,"_invoke",{value:function(e,r){function i(){return new t((function(t,i){n(e,r,t,i)}))}return o=o?o.then(i,i):i()}})}function P(t,n,r){var i=p;return function(o,a){if(i===g)throw Error("Generator is already running");if(i===f){if("throw"===o)throw a;return{value:e,done:!0}}for(r.method=o,r.arg=a;;){var s=r.delegate;if(s){var l=S(s,r);if(l){if(l===m)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(i===p)throw i=f,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);i=g;var c=d(t,n,r);if("normal"===c.type){if(i=r.done?f:h,c.arg===m)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(i=f,r.method="throw",r.arg=c.arg)}}}function S(t,n){var r=n.method,i=t.iterator[r];if(i===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,S(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),m;var o=d(i,t.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,m;var a=o.arg;return a?a.done?(n[t.resultName]=a.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,m):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,m)}function M(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function G(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(M,this),this.reset(!0)}function L(t){if(t||""===t){var n=t[a];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var i=-1,o=function n(){for(;++i=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var l=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(l&&c){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),x(n),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var i=r.arg;x(n)}return i}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:L(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),m}},t}function vh(e,t,n,r,i,o,a){try{var s=e[o](a),l=s.value}catch(e){return void n(e)}s.done?t(l):Promise.resolve(l).then(r,i)}function Ah(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ch(e){for(var t=1;t0)return t})).sort((function(e,t){return t.getZIndex()-e.getZIndex()})),!(this.layers.length>0))return;var t=this.getFeatureInfoAccordionGroup=this._createGetFeatureInfoAccordionGroup();this.getFeatureInfoPanelDiv.appendChild(t),this.map=e.map,this.pixel=e.pixel,this.coordinates=e.coordinate,this.res=e.map.getView().getResolution(),this.displayGetFeatureInfo()}}},{key:"getGetFeatureInfoLayer",value:function(e){var t={},n=this.getLayerFormat(e);if(t={format:n,layer:e},"wmts"===n){var r=e.getSource().getFeatureInfoUrl(this.coordinates,this.res,this.map.getView().getProjection(),{INFOFORMAT:"text/html",STYLES:""});t=Ch(Ch({},t),{url:r})}if("wms"===n){var i=e.getSource().getFeatureInfoUrl(this.coordinates,this.res,this.map.getView().getProjection(),{INFO_FORMAT:"text/html",STYLES:""});t=Ch(Ch({},t),{url:i})}return t}},{key:"getFeaturesAtClick",value:function(e){var t=[];return this.getMap().forEachFeatureAtPixel(this.pixel,(function(n,r){e==r&&t.push(n)})),t}},{key:"getGetFeatureInfoContent",value:(s=yh().mark((function e(t){var n,r,i=this;return yh().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=null,"vector"!==t.format){e.next=7;break}return(r=this.getFeaturesAtClick(t.layer))&&(n=this.features2html(r)),e.abrupt("return",n);case 7:return e.abrupt("return",fetch(t.url).then((function(e){return e.text()})).then((function(e){var t=!1;if(0!==e.trim().length&&-1===e.indexOf("ServiceExceptionReport")&&-1===e.indexOf("java.lang.NullPointerException")&&-1===e.indexOf("java.lang.OutOfMemoryError")&&-1===e.indexOf("not queryable")&&-1===e.indexOf("No data")&&-1===e.indexOf("non interrogeable")||(t=!0),t)return null;var n=i.stringToHTML(e);return n&&n.innerHTML&&n.innerHTML.trim().length>0?e:null})).catch((function(e){return xh.log(e),e})));case 8:case"end":return e.stop()}}),e,this)})),c=function(){var e=this,t=arguments;return new Promise((function(n,r){var i=s.apply(e,t);function o(e){vh(i,n,r,o,a,"next",e)}function a(e){vh(i,n,r,o,a,"throw",e)}o(void 0)}))},function(e){return c.apply(this,arguments)})},{key:"getLayerTitle",value:function(e){if(void 0!==e.layer.getProperties&&void 0!==e.layer.getSource){var t=e.layer.getProperties(),n=t.source,r="";n&&(r=n._title||n.name||t.title||t.name||n.url_||"Couche de données")}return r}},{key:"displayGetFeatureInfo",value:function(){for(var e=this,t=this.layers.map((function(t){return e.getGetFeatureInfoLayer(t)})).map((function(t){var n=e.getLayerTitle(t),r=e._createGetFeatureInfoLayerAccordion(n);return r.style.display="none",new hh(Ch(Ch({},t),{layername:n,content:null,contentDiv:r,pending:!0}))})),n=0;n-1){if(n.current&&n.current===a)continue;r[i].setActive(!1);var s=o.source;if(void 0!==s&&s instanceof mu())for(var l in n)if(n.hasOwnProperty(l)){if("current"===l)continue;if("function"==typeof s[l]){var c=Array.isArray(n[l])?n[l]:[n[l]];s[l].apply(s,c)}}}else r[i].setActive(!1)}}};var Rh={modulo:function(e,t){var n=e%t;return n*t<0?n+t:n},decimalToDMS:function(e,t,n){var r=this.modulo(e+180,360)-180,i=Math.abs(3600*r),o=n||0,a=Math.pow(10,o),s=Math.floor(i/3600),l=Math.floor((i-3600*s)/60),c=i-3600*s-60*l;return(c=Math.ceil(c*a)/a)>=60&&(c=0,l+=1),l>=60&&(l=0,s+=1),{d:s,m:l,s:c,direction:t.charAt(r<0?1:0)}},dmsToDecimal:function(e,t,n,r){var i=e+t/60+n/3600;return"S"!=r&&"O"!=r||(i*=-1),i},coordinateToDecimal:function(e){var t={};return t.lat=e[1].toFixed(6),t.lng=e[0].toFixed(6),t.unit="°",t},coordinateToDMS:function(e){return{lng:Rh.decimalToDMS(e[0],"EO",2),lat:Rh.decimalToDMS(e[1],"NS",2),unit:"DMS"}},coordinateToRad:function(e){var t={},n=.017453292519943295;return t.lng=e[0]*n,t.lng=t.lng.toFixed(8),t.lat=e[1]*n,t.lat=t.lat.toFixed(8),t.unit="rad",t},coordinateToGon:function(e){var t={},n=1.1111111111111112;return t.lng=e[0]*n,t.lng=t.lng.toFixed(8),t.lat=e[1]*n,t.lat=t.lat.toFixed(8),t.unit="gon",t},coordinateToMeter:function(e){var t={};return t.x=e[0].toFixed(2),t.y=e[1].toFixed(2),t.unit="m",t},coordinateToKMeter:function(e){var t={};return t.x=(e[0]/1e3).toFixed(2),t.y=(e[1]/1e3).toFixed(2),t.unit="km",t},toInteger:function(e,t){var n=parseInt(e,t||10);return!isNaN(n)&&isFinite(n)?n:null},isInteger:function(e){if(isNaN(e))return!1;var t=parseFloat(e);return(0|t)===t},toFloat:function(e){var t=parseFloat(e);return!isNaN(t)&&isFinite(t)?t:null}};const Oh=Rh;const Dh={advancedSearchFiltersByDefault:{PositionOfInterest:[{name:"category",title:"Type",value:["cimetière","aérodrome","réservoir","administratif","construction linéaire","construction ponctuelle","construction surfacique","cours d'eau","détail hydrographique","détail orographique","équipement de transport","plan d'eau","poste de transformation","terrain de sport","transport par câble","zone d'activité ou d'intérêt","zone d'habitation","lieu-dit non habité"]},{name:"postcode",title:"Code postal"},{name:"citycode",title:"Code INSEE"}],StreetAddress:[{name:"city",title:"Ville"},{name:"postcode",title:"Code postal"},{name:"citycode",title:"Code INSEE"}],CadastralParcel:[{name:"departmentcode",title:"Code département (INSEE)",description:"Code INSEE du département (ex: 01, 94)"},{name:"municipalitycode",title:"Code commune (INSEE)",description:"Code INSEE de la commune : 3 chiffres (ex: 067)"},{name:"oldmunicipalitycode",title:"Commune absorbée",description:"Commune absorbée : 3 chiffres (ex: 000, 001)"},{name:"districtcode",title:"Arrondissement",description:"Arrondissement : 3 chiffres (ex: 004, 012)"},{name:"section",title:"Section",description:"Section Cadastrale : 2 caractères (chiffre et/ou lettre)"},{name:"number",title:"Numéro",description:"Numéro de la parcelle : 4 chiffres (ex: 0041, 0250)"},{name:"sheet",title:"Feuille",description:"Numéro de la feuille cadastrale"}]},zoomToResultsByDefault:function(e){var t=15,n=e.service,r=e.fields,i=e.type,o={1:11,2:12,3:13,4:14,5:15,6:16,7:17,8:17};return"SuggestedLocation"===n&&"PositionOfInterest"===i&&(t=o[r.classification]),"GeocodedLocation"===n&&"PositionOfInterest"===i&&(t=o[r.importance]||14),"StreetAddress"===i&&(t=17),"CadastralParcel"===i&&(t=17),t}};const Nh={getGeocodedLocationFreeform:function(e){var t=e.placeAttributes;if(t.label)return t.label;if("PositionOfInterest"===e.type){var n=t.toponym;return t.category&&Array.isArray(t.category)&&t.category.length>=2&&"administratif"===t.category[0]?n=n+", "+t.category[1]:t.postcode&&(n=n+", "+t.postcode[0],t.city&&(n=n+" "+t.city[0])),n}return"StreetAddress"===e.type?(t.housenumber?t.housenumber+" ":"")+t.street+" "+(t.postcode?t.postcode+", ":"")+t.city:"CadastralParcel"===e.type?t.id:"..."},getSuggestedLocationFreeform:function(e){if(e.fullText)return e.fullText;var t=[];return t.push(e.street||""),t.push(e.postalCode||""),t.push(e.commune||""),"PositionOfInterest"===e.type&&(t.push(e.poi||""),t.push(e.kind||"")),t.join(" - ")}};var Uh=6378137,jh=.0066943799901413165,Bh=484813681109536e-20,Fh=Math.PI/2,zh=1e-10,Vh=.017453292519943295,qh=57.29577951308232,Hh=Math.PI/4,Wh=2*Math.PI,Yh=3.14159265359,Zh={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667};const Jh={mm:{to_meter:.001},cm:{to_meter:.01},ft:{to_meter:.3048},"us-ft":{to_meter:1200/3937},fath:{to_meter:1.8288},kmi:{to_meter:1852},"us-ch":{to_meter:20.1168402336805},"us-mi":{to_meter:1609.34721869444},km:{to_meter:1e3},"ind-ft":{to_meter:.30479841},"ind-yd":{to_meter:.91439523},mi:{to_meter:1609.344},yd:{to_meter:.9144},ch:{to_meter:20.1168},link:{to_meter:.201168},dm:{to_meter:.01},in:{to_meter:.0254},"ind-ch":{to_meter:20.11669506},"us-in":{to_meter:.025400050800101},"us-yd":{to_meter:.914401828803658}};var Xh=/[\s_\-\/\(\)]/g;function Kh(e,t){if(e[t])return e[t];for(var n,r=Object.keys(e),i=t.toLowerCase().replace(Xh,""),o=-1;++o=this.text.length)return;e=this.text[this.place++]}switch(this.state){case eg:return this.neutral(e);case 2:return this.keyword(e);case 4:return this.quoted(e);case 5:return this.afterquote(e);case 3:return this.number(e);case-1:return}},ag.prototype.afterquote=function(e){if('"'===e)return this.word+='"',void(this.state=4);if(ig.test(e))return this.word=this.word.trim(),void this.afterItem(e);throw new Error("havn't handled \""+e+'" in afterquote yet, index '+this.place)},ag.prototype.afterItem=function(e){return","===e?(null!==this.word&&this.currentObject.push(this.word),this.word=null,void(this.state=eg)):"]"===e?(this.level--,null!==this.word&&(this.currentObject.push(this.word),this.word=null),this.state=eg,this.currentObject=this.stack.pop(),void(this.currentObject||(this.state=-1))):void 0},ag.prototype.number=function(e){if(!og.test(e)){if(ig.test(e))return this.word=parseFloat(this.word),void this.afterItem(e);throw new Error("havn't handled \""+e+'" in number yet, index '+this.place)}this.word+=e},ag.prototype.quoted=function(e){'"'!==e?this.word+=e:this.state=5},ag.prototype.keyword=function(e){if(rg.test(e))this.word+=e;else{if("["===e){var t=[];return t.push(this.word),this.level++,null===this.root?this.root=t:this.currentObject.push(t),this.stack.push(this.currentObject),this.currentObject=t,void(this.state=eg)}if(!ig.test(e))throw new Error("havn't handled \""+e+'" in keyword yet, index '+this.place);this.afterItem(e)}},ag.prototype.neutral=function(e){if(ng.test(e))return this.word=e,void(this.state=2);if('"'===e)return this.word="",void(this.state=4);if(og.test(e))return this.word=e,void(this.state=3);if(!ig.test(e))throw new Error("havn't handled \""+e+'" in neutral yet, index '+this.place);this.afterItem(e)},ag.prototype.output=function(){for(;this.place0?90:-90)):(e.lat0=ug(e.lat1>0?90:-90),e.lat_ts=e.lat1)}function hg(e){var t=$h(e),n=t[0],r={};return lg(t,r),dg(r),r[n]}function gg(e){var t=this;if(2===arguments.length){var n=arguments[1];"string"==typeof n?"+"===n.charAt(0)?gg[e]=Qh(arguments[1]):gg[e]=hg(arguments[1]):gg[e]=n}else if(1===arguments.length){if(Array.isArray(e))return e.map((function(e){Array.isArray(e)?gg.apply(t,e):gg(e)}));if("string"==typeof e){if(e in gg)return gg[e]}else"EPSG"in e?gg["EPSG:"+e.EPSG]=e:"ESRI"in e?gg["ESRI:"+e.ESRI]=e:"IAU2000"in e?gg["IAU2000:"+e.IAU2000]=e:console.log(e);return}}!function(e){e("EPSG:4326","+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"),e("EPSG:4269","+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"),e("EPSG:3857","+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs");for(var t=1;t<=60;++t)e("EPSG:"+(32600+t),"+proj=utm +zone="+t+" +datum=WGS84 +units=m"),e("EPSG:"+(32700+t),"+proj=utm +zone="+t+" +south +datum=WGS84 +units=m");e.WGS84=e["EPSG:4326"],e["EPSG:3785"]=e["EPSG:3857"],e.GOOGLE=e["EPSG:3857"],e["EPSG:900913"]=e["EPSG:3857"],e["EPSG:102113"]=e["EPSG:3857"]}(gg);const fg=gg;var mg=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];var yg=["3857","900913","3785","102113"];const vg=function(e){if(!function(e){return"string"==typeof e}(e))return e;if(function(e){return e in fg}(e))return fg[e];if(function(e){return mg.some((function(t){return e.indexOf(t)>-1}))}(e)){var t=hg(e);if(function(e){var t=Kh(e,"authority");if(t){var n=Kh(t,"epsg");return n&&yg.indexOf(n)>-1}}(t))return fg["EPSG:3857"];var n=function(e){var t=Kh(e,"extension");if(t)return Kh(t,"proj4")}(t);return n?Qh(n):t}return function(e){return"+"===e[0]}(e)?Qh(e):void 0};function Ag(e,t){var n,r;if(e=e||{},!t)return e;for(r in t)void 0!==(n=t[r])&&(e[r]=n);return e}function Cg(e,t,n){var r=e*t;return n/Math.sqrt(1-r*r)}function bg(e){return e<0?-1:1}function Ig(e){return Math.abs(e)<=Yh?e:e-bg(e)*Wh}function _g(e,t,n){var r=e*n,i=.5*e;return r=Math.pow((1-r)/(1+r),i),Math.tan(.5*(Fh-t))/r}function Eg(e,t){for(var n,r,i=.5*e,o=Fh-2*Math.atan(t),a=0;a<=15;a++)if(n=e*Math.sin(o),o+=r=Fh-2*Math.atan(t*Math.pow((1-n)/(1+n),i))-o,Math.abs(r)<=1e-10)return o;return-9999}function wg(e){return e}var Pg=[{init:function(){var e=this.b/this.a;this.es=1-e*e,"x0"in this||(this.x0=0),"y0"in this||(this.y0=0),this.e=Math.sqrt(this.es),this.lat_ts?this.sphere?this.k0=Math.cos(this.lat_ts):this.k0=Cg(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)):this.k0||(this.k?this.k0=this.k:this.k0=1)},forward:function(e){var t,n,r=e.x,i=e.y;if(i*qh>90&&i*qh<-90&&r*qh>180&&r*qh<-180)return null;if(Math.abs(Math.abs(i)-Fh)<=zh)return null;if(this.sphere)t=this.x0+this.a*this.k0*Ig(r-this.long0),n=this.y0+this.a*this.k0*Math.log(Math.tan(Hh+.5*i));else{var o=Math.sin(i),a=_g(this.e,i,o);t=this.x0+this.a*this.k0*Ig(r-this.long0),n=this.y0-this.a*this.k0*Math.log(a)}return e.x=t,e.y=n,e},inverse:function(e){var t,n,r=e.x-this.x0,i=e.y-this.y0;if(this.sphere)n=Fh-2*Math.atan(Math.exp(-i/(this.a*this.k0)));else{var o=Math.exp(-i/(this.a*this.k0));if(-9999===(n=Eg(this.e,o)))return null}return t=Ig(this.long0+r/(this.a*this.k0)),e.x=t,e.y=n,e},names:["Mercator","Popular Visualisation Pseudo Mercator","Mercator_1SP","Mercator_Auxiliary_Sphere","merc"]},{init:function(){},forward:wg,inverse:wg,names:["longlat","identity"]}],Sg={},Mg=[];function xg(e,t){var n=Mg.length;return e.names?(Mg[n]=e,e.names.forEach((function(e){Sg[e.toLowerCase()]=n})),this):(console.log(t),!0)}const Gg={start:function(){Pg.forEach(xg)},add:xg,get:function(e){if(!e)return!1;var t=e.toLowerCase();return void 0!==Sg[t]&&Mg[Sg[t]]?Mg[Sg[t]]:void 0}};var Lg={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},APL4:{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},clrk80ign:{a:6378249.2,b:6356515,rf:293.4660213,ellipseName:"Clarke 1880 (IGN)"},clrk58:{a:6378293.645208759,rf:294.2606763692654,ellipseName:"Clarke 1858"},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS7:{a:6378135,rf:298.26,ellipseName:"WGS 72"}},kg=Lg.WGS84={a:6378137,rf:298.257223563,ellipseName:"WGS 84"};Lg.sphere={a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"};var Tg={wgs84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},ch1903:{towgs84:"674.374,15.056,405.346",ellipse:"bessel",datumName:"swiss"},ggrs87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},nad83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},nad27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"598.1,73.7,418.2,0.202,0.045,-2.455,6.7",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"577.326,90.129,463.919,5.137,1.474,5.297,2.4232",ellipse:"bessel",datumName:"Hermannskogel"},mgi:{towgs84:"577.326,90.129,463.919,5.137,1.474,5.297,2.4232",ellipse:"bessel",datumName:"Militar-Geographische Institut"},osni52:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"airy",datumName:"Irish National"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},rassadiran:{towgs84:"-133.63,-157.5,-158.62",ellipse:"intl",datumName:"Rassadiran"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},osgb36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Ordnance Survey of Great Britain 1936"},s_jtsk:{towgs84:"589,76,480",ellipse:"bessel",datumName:"S-JTSK (Ferro)"},beduaram:{towgs84:"-106,-87,188",ellipse:"clrk80",datumName:"Beduaram"},gunung_segara:{towgs84:"-403,684,41",ellipse:"bessel",datumName:"Gunung Segara Jakarta"},rnb72:{towgs84:"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",ellipse:"intl",datumName:"Reseau National Belge 1972"}};for(var Rg in Tg){var Og=Tg[Rg];Tg[Og.datumName]=Og}const Dg=Tg;const Ng=function(e,t,n,r,i,o,a){var s={};return s.datum_type=void 0===e||"none"===e?5:4,t&&(s.datum_params=t.map(parseFloat),0===s.datum_params[0]&&0===s.datum_params[1]&&0===s.datum_params[2]||(s.datum_type=1),s.datum_params.length>3&&(0===s.datum_params[3]&&0===s.datum_params[4]&&0===s.datum_params[5]&&0===s.datum_params[6]||(s.datum_type=2,s.datum_params[3]*=Bh,s.datum_params[4]*=Bh,s.datum_params[5]*=Bh,s.datum_params[6]=s.datum_params[6]/1e6+1))),a&&(s.datum_type=3,s.grids=a),s.a=n,s.b=r,s.es=i,s.ep2=o,s};var Ug={};function jg(e){if(0===e.length)return null;var t="@"===e[0];return t&&(e=e.slice(1)),"null"===e?{name:"null",mandatory:!t,grid:null,isNull:!0}:{name:e,mandatory:!t,grid:Ug[e]||null,isNull:!1}}function Bg(e){return e/3600*Math.PI/180}function Fg(e,t,n){return String.fromCharCode.apply(null,new Uint8Array(e.buffer.slice(t,n)))}function zg(e){return e.map((function(e){return[Bg(e.longitudeShift),Bg(e.latitudeShift)]}))}function Vg(e,t,n){return{name:Fg(e,t+8,t+16).trim(),parent:Fg(e,t+24,t+24+8).trim(),lowerLatitude:e.getFloat64(t+72,n),upperLatitude:e.getFloat64(t+88,n),lowerLongitude:e.getFloat64(t+104,n),upperLongitude:e.getFloat64(t+120,n),latitudeInterval:e.getFloat64(t+136,n),longitudeInterval:e.getFloat64(t+152,n),gridNodeCount:e.getInt32(t+168,n)}}function qg(e,t,n,r){for(var i=t+176,o=[],a=0;a-1.001*Fh)l=-Fh;else if(l>Fh&&l<1.001*Fh)l=Fh;else{if(l<-Fh)return{x:-1/0,y:-1/0,z:e.z};if(l>Fh)return{x:1/0,y:1/0,z:e.z}}return s>Math.PI&&(s-=2*Math.PI),i=Math.sin(l),a=Math.cos(l),o=i*i,{x:((r=n/Math.sqrt(1-t*o))+c)*a*Math.cos(s),y:(r+c)*a*Math.sin(s),z:(r*(1-t)+c)*i}}function Zg(e,t,n,r){var i,o,a,s,l,c,u,d,p,h,g,f,m,y,v,A=1e-12,C=e.x,b=e.y,I=e.z?e.z:0;if(i=Math.sqrt(C*C+b*b),o=Math.sqrt(C*C+b*b+I*I),i/n1e-24&&m<30);return{x:y,y:Math.atan(g/Math.abs(h)),z:v}}function Jg(e){return 1===e||2===e}function Xg(e,t,n){if(function(e,t){return e.datum_type===t.datum_type&&!(e.a!==t.a||Math.abs(e.es-t.es)>5e-11)&&(1===e.datum_type?e.datum_params[0]===t.datum_params[0]&&e.datum_params[1]===t.datum_params[1]&&e.datum_params[2]===t.datum_params[2]:2!==e.datum_type||e.datum_params[0]===t.datum_params[0]&&e.datum_params[1]===t.datum_params[1]&&e.datum_params[2]===t.datum_params[2]&&e.datum_params[3]===t.datum_params[3]&&e.datum_params[4]===t.datum_params[4]&&e.datum_params[5]===t.datum_params[5]&&e.datum_params[6]===t.datum_params[6])}(e,t))return n;if(5===e.datum_type||5===t.datum_type)return n;var r=e.a,i=e.es;if(3===e.datum_type){if(0!==Kg(e,!1,n))return;r=Uh,i=jh}var o=t.a,a=t.b,s=t.es;if(3===t.datum_type&&(o=Uh,a=6356752.314,s=jh),i===s&&r===o&&!Jg(e.datum_type)&&!Jg(t.datum_type))return n;if((n=Yg(n,i,r),Jg(e.datum_type)&&(n=function(e,t,n){if(1===t)return{x:e.x+n[0],y:e.y+n[1],z:e.z+n[2]};if(2===t){var r=n[0],i=n[1],o=n[2],a=n[3],s=n[4],l=n[5],c=n[6];return{x:c*(e.x-l*e.y+s*e.z)+r,y:c*(l*e.x+e.y-a*e.z)+i,z:c*(-s*e.x+a*e.y+e.z)+o}}}(n,e.datum_type,e.datum_params)),Jg(t.datum_type)&&(n=function(e,t,n){if(1===t)return{x:e.x-n[0],y:e.y-n[1],z:e.z-n[2]};if(2===t){var r=n[0],i=n[1],o=n[2],a=n[3],s=n[4],l=n[5],c=n[6],u=(e.x-r)/c,d=(e.y-i)/c,p=(e.z-o)/c;return{x:u+l*d-s*p,y:-l*u+d+a*p,z:s*u-a*d+p}}}(n,t.datum_type,t.datum_params)),n=Zg(n,s,o,a),3===t.datum_type)&&0!==Kg(t,!0,n))return;return n}function Kg(e,t,n){if(null===e.grids||0===e.grids.length)return console.log("Grid shift grids not found"),-1;var r={x:-n.x,y:n.y},i={x:Number.NaN,y:Number.NaN},o=[];e:for(var a=0;ar.y||h>r.x||m1e-12&&Math.abs(a.y)>1e-12);if(l<0)return console.log("Inverse grid shift iterator failed to converge."),r;r.x=Ig(o.x+n.ll[0]),r.y=o.y+n.ll[1]}else isNaN(o.x)||(r.x=e.x+o.x,r.y=e.y+o.y);return r}function $g(e,t){var n,r={x:e.x/t.del[0],y:e.y/t.del[1]},i=Math.floor(r.x),o=Math.floor(r.y),a=r.x-1*i,s=r.y-1*o,l={x:Number.NaN,y:Number.NaN};if(i<0||i>=t.lim[0])return l;if(o<0||o>=t.lim[1])return l;n=o*t.lim[0]+i;var c=t.cvs[n][0],u=t.cvs[n][1];n++;var d=t.cvs[n][0],p=t.cvs[n][1];n+=t.lim[0];var h=t.cvs[n][0],g=t.cvs[n][1];n--;var f=t.cvs[n][0],m=t.cvs[n][1],y=a*s,v=a*(1-s),A=(1-a)*(1-s),C=(1-a)*s;return l.x=A*c+v*d+C*f+y*h,l.y=A*u+v*p+C*m+y*g,l}function ef(e,t,n){var r,i,o,a=n.x,s=n.y,l=n.z||0,c={};for(o=0;o<3;o++)if(!t||2!==o||void 0!==n.z)switch(0===o?(r=a,i=-1!=="ew".indexOf(e.axis[o])?"x":"y"):1===o?(r=s,i=-1!=="ns".indexOf(e.axis[o])?"y":"x"):(r=l,i="z"),e.axis[o]){case"e":case"n":c[i]=r;break;case"w":case"s":c[i]=-r;break;case"u":void 0!==n[i]&&(c.z=r);break;case"d":void 0!==n[i]&&(c.z=-r);break;default:return null}return c}function tf(e){var t={x:e[0],y:e[1]};return e.length>2&&(t.z=e[2]),e.length>3&&(t.m=e[3]),t}function nf(e){if("function"==typeof Number.isFinite){if(Number.isFinite(e))return;throw new TypeError("coordinates must be finite numbers")}if("number"!=typeof e||e!=e||!isFinite(e))throw new TypeError("coordinates must be finite numbers")}function rf(e,t,n,r){var i,o=void 0!==(n=Array.isArray(n)?tf(n):{x:n.x,y:n.y,z:n.z,m:n.m}).z;if(function(e){nf(e.x),nf(e.y)}(n),e.datum&&t.datum&&function(e,t){return(1===e.datum.datum_type||2===e.datum.datum_type||3===e.datum.datum_type)&&"WGS84"!==t.datumCode||(1===t.datum.datum_type||2===t.datum.datum_type||3===t.datum.datum_type)&&"WGS84"!==e.datumCode}(e,t)&&(n=rf(e,i=new Wg("WGS84"),n,r),e=i),r&&"enu"!==e.axis&&(n=ef(e,!1,n)),"longlat"===e.projName)n={x:n.x*Vh,y:n.y*Vh,z:n.z||0};else if(e.to_meter&&(n={x:n.x*e.to_meter,y:n.y*e.to_meter,z:n.z||0}),!(n=e.inverse(n)))return;if(e.from_greenwich&&(n.x+=e.from_greenwich),n=Xg(e.datum,t.datum,n))return t.from_greenwich&&(n={x:n.x-t.from_greenwich,y:n.y,z:n.z||0}),"longlat"===t.projName?n={x:n.x*qh,y:n.y*qh,z:n.z||0}:(n=t.forward(n),t.to_meter&&(n={x:n.x/t.to_meter,y:n.y/t.to_meter,z:n.z||0})),r&&"enu"!==t.axis?ef(t,!0,n):(n&&!o&&delete n.z,n)}var of=Wg("WGS84");function af(e,t,n,r){var i,o,a;return Array.isArray(n)?(i=rf(e,t,n,r)||{x:NaN,y:NaN},n.length>2?void 0!==e.name&&"geocent"===e.name||void 0!==t.name&&"geocent"===t.name?"number"==typeof i.z?[i.x,i.y,i.z].concat(n.slice(3)):[i.x,i.y,n[2]].concat(n.slice(3)):[i.x,i.y].concat(n.slice(2)):[i.x,i.y]):(o=rf(e,t,n,r),2===(a=Object.keys(n)).length||a.forEach((function(r){if(void 0!==e.name&&"geocent"===e.name||void 0!==t.name&&"geocent"===t.name){if("x"===r||"y"===r||"z"===r)return}else if("x"===r||"y"===r)return;o[r]=n[r]})),o)}function sf(e){return e instanceof Wg?e:e.oProj?e.oProj:Wg(e)}const lf=function(e,t,n){e=sf(e);var r,i=!1;return void 0===t?(t=e,e=of,i=!0):(void 0!==t.x||Array.isArray(t))&&(n=t,t=e,e=of,i=!0),t=sf(t),n?af(e,t,n):(r={forward:function(n,r){return af(e,t,n,r)},inverse:function(n,r){return af(t,e,n,r)}},i&&(r.oProj=t),r)};var cf="AJSAJS",uf="AFAFAF",df=65,pf=73,hf=79,gf=86,ff=90;const mf={forward:yf,inverse:function(e){var t=bf(Ef(e.toUpperCase()));if(t.lat&&t.lon)return[t.lon,t.lat,t.lon,t.lat];return[t.left,t.bottom,t.right,t.top]},toPoint:vf};function yf(e,t){return t=t||5,function(e,t){var n="00000"+e.easting,r="00000"+e.northing;return e.zoneNumber+e.zoneLetter+(i=e.easting,o=e.northing,a=e.zoneNumber,s=_f(a),l=Math.floor(i/1e5),c=Math.floor(o/1e5)%20,function(e,t,n){var r=n-1,i=cf.charCodeAt(r),o=uf.charCodeAt(r),a=i+e-1,s=o+t,l=!1;return a>ff&&(a=a-ff+df-1,l=!0),(a===pf||ipf||(a>pf||ihf||(a>hf||iff&&(a=a-ff+df-1),s>gf?(s=s-gf+df-1,l=!0):l=!1,(s===pf||opf||(s>pf||ohf||(s>hf||ogf&&(s=s-gf+df-1),String.fromCharCode(a)+String.fromCharCode(s)}(l,c,s))+n.substr(n.length-5,t)+r.substr(r.length-5,t);var i,o,a,s,l,c}(function(e){var t,n,r,i,o,a,s,l,c=e.lat,u=e.lon,d=6378137,p=.00669438,h=.9996,g=Af(c),f=Af(u);l=Math.floor((u+180)/6)+1,180===u&&(l=60);c>=56&&c<64&&u>=3&&u<12&&(l=32);c>=72&&c<84&&(u>=0&&u<9?l=31:u>=9&&u<21?l=33:u>=21&&u<33?l=35:u>=33&&u<42&&(l=37));s=Af(6*(l-1)-180+3),t=p/(1-p),n=d/Math.sqrt(1-p*Math.sin(g)*Math.sin(g)),r=Math.tan(g)*Math.tan(g),i=t*Math.cos(g)*Math.cos(g),o=Math.cos(g)*(f-s),a=d*((1-p/4-3*p*p/64-5*p*p*p/256)*g-(3*p/8+3*p*p/32+45*p*p*p/1024)*Math.sin(2*g)+(15*p*p/256+45*p*p*p/1024)*Math.sin(4*g)-35*p*p*p/3072*Math.sin(6*g));var m=h*n*(o+(1-r+i)*o*o*o/6+(5-18*r+r*r+72*i-58*t)*o*o*o*o*o/120)+5e5,y=h*(a+n*Math.tan(g)*(o*o/2+(5-r+9*i+4*i*i)*o*o*o*o/24+(61-58*r+r*r+600*i-330*t)*o*o*o*o*o*o/720));c<0&&(y+=1e7);return{northing:Math.round(y),easting:Math.round(m),zoneNumber:l,zoneLetter:If(c)}}({lat:e[1],lon:e[0]}),t)}function vf(e){var t=bf(Ef(e.toUpperCase()));return t.lat&&t.lon?[t.lon,t.lat]:[(t.left+t.right)/2,(t.top+t.bottom)/2]}function Af(e){return e*(Math.PI/180)}function Cf(e){return e/Math.PI*180}function bf(e){var t=e.northing,n=e.easting,r=e.zoneLetter,i=e.zoneNumber;if(i<0||i>60)return null;var o,a,s,l,c,u,d,p,h,g=.9996,f=6378137,m=.00669438,y=(1-Math.sqrt(.99330562))/(1+Math.sqrt(.99330562)),v=n-5e5,A=t;r<"N"&&(A-=1e7),d=6*(i-1)-180+3,o=.006739496752268451,h=(p=A/g/6367449.145945056)+(3*y/2-27*y*y*y/32)*Math.sin(2*p)+(21*y*y/16-55*y*y*y*y/32)*Math.sin(4*p)+151*y*y*y/96*Math.sin(6*p),a=f/Math.sqrt(1-m*Math.sin(h)*Math.sin(h)),s=Math.tan(h)*Math.tan(h),l=o*Math.cos(h)*Math.cos(h),c=.99330562*f/Math.pow(1-m*Math.sin(h)*Math.sin(h),1.5),u=v/(a*g);var C=h-a*Math.tan(h)/c*(u*u/2-(5+3*s+10*l-4*l*l-9*o)*u*u*u*u/24+(61+90*s+298*l+45*s*s-1.6983531815716497-3*l*l)*u*u*u*u*u*u/720);C=Cf(C);var b,I=(u-(1+2*s+l)*u*u*u/6+(5-2*l+28*s-3*l*l+8*o+24*s*s)*u*u*u*u*u/120)/Math.cos(h);if(I=d+Cf(I),e.accuracy){var _=bf({northing:e.northing+e.accuracy,easting:e.easting+e.accuracy,zoneLetter:e.zoneLetter,zoneNumber:e.zoneNumber});b={top:_.lat,right:_.lon,bottom:C,left:I}}else b={lat:C,lon:I};return b}function If(e){var t="Z";return 84>=e&&e>=72?t="X":72>e&&e>=64?t="W":64>e&&e>=56?t="V":56>e&&e>=48?t="U":48>e&&e>=40?t="T":40>e&&e>=32?t="S":32>e&&e>=24?t="R":24>e&&e>=16?t="Q":16>e&&e>=8?t="P":8>e&&e>=0?t="N":0>e&&e>=-8?t="M":-8>e&&e>=-16?t="L":-16>e&&e>=-24?t="K":-24>e&&e>=-32?t="J":-32>e&&e>=-40?t="H":-40>e&&e>=-48?t="G":-48>e&&e>=-56?t="F":-56>e&&e>=-64?t="E":-64>e&&e>=-72?t="D":-72>e&&e>=-80&&(t="C"),t}function _f(e){var t=e%6;return 0===t&&(t=6),t}function Ef(e){if(e&&0===e.length)throw"MGRSPoint coverting from nothing";for(var t,n=e.length,r=null,i="",o=0;!/[A-Z]/.test(t=e.charAt(o));){if(o>=2)throw"MGRSPoint bad conversion from: "+e;i+=t,o++}var a=parseInt(i,10);if(0===o||o+3>n)throw"MGRSPoint bad conversion from: "+e;var s=e.charAt(o++);if(s<="A"||"B"===s||"Y"===s||s>="Z"||"I"===s||"O"===s)throw"MGRSPoint zone letter "+s+" not handled: "+e;r=e.substring(o,o+=2);for(var l=_f(a),c=function(e,t){var n=cf.charCodeAt(t-1),r=1e5,i=!1;for(;n!==e.charCodeAt(0);){if(++n===pf&&n++,n===hf&&n++,n>ff){if(i)throw"Bad character: "+e;n=df,i=!0}r+=1e5}return r}(r.charAt(0),l),u=function(e,t){if(e>"V")throw"MGRSPoint given invalid Northing "+e;var n=uf.charCodeAt(t-1),r=0,i=!1;for(;n!==e.charCodeAt(0);){if(++n===pf&&n++,n===hf&&n++,n>gf){if(i)throw"Bad character: "+e;n=df,i=!0}r+=1e5}return r}(r.charAt(1),l);u0&&(p=1e5/Math.pow(10,f),h=e.substring(o,o+f),m=parseFloat(h)*p,g=e.substring(o+f),y=parseFloat(g)*p),{easting:m+c,northing:y+u,zoneLetter:s,zoneNumber:a,accuracy:p}}function wf(e){var t;switch(e){case"C":t=11e5;break;case"D":t=2e6;break;case"E":t=28e5;break;case"F":t=37e5;break;case"G":t=46e5;break;case"H":t=55e5;break;case"J":t=64e5;break;case"K":t=73e5;break;case"L":t=82e5;break;case"M":t=91e5;break;case"N":t=0;break;case"P":t=8e5;break;case"Q":t=17e5;break;case"R":t=26e5;break;case"S":t=35e5;break;case"T":t=44e5;break;case"U":t=53e5;break;case"V":t=62e5;break;case"W":t=7e6;break;case"X":t=79e5;break;default:t=-1}if(t>=0)return t;throw"Invalid zone letter: "+e}function Pf(e,t,n){if(!(this instanceof Pf))return new Pf(e,t,n);if(Array.isArray(e))this.x=e[0],this.y=e[1],this.z=e[2]||0;else if("object"==typeof e)this.x=e.x,this.y=e.y,this.z=e.z||0;else if("string"==typeof e&&void 0===t){var r=e.split(",");this.x=parseFloat(r[0],10),this.y=parseFloat(r[1],10),this.z=parseFloat(r[2],10)||0}else this.x=e,this.y=t,this.z=n||0;console.warn("proj4.Point will be removed in version 3, use proj4.toPoint")}Pf.fromMGRS=function(e){return new Pf(vf(e))},Pf.prototype.toMGRS=function(e){return yf([this.x,this.y],e)};const Sf=Pf;var Mf=.046875,xf=.01953125,Gf=.01068115234375;function Lf(e){var t=[];t[0]=1-e*(.25+e*(Mf+e*(xf+e*Gf))),t[1]=e*(.75-e*(Mf+e*(xf+e*Gf)));var n=e*e;return t[2]=n*(.46875-e*(.013020833333333334+.007120768229166667*e)),n*=e,t[3]=n*(.3645833333333333-.005696614583333333*e),t[4]=n*e*.3076171875,t}function kf(e,t,n,r){return n*=t,t*=t,r[0]*e-n*(r[1]+t*(r[2]+t*(r[3]+t*r[4])))}function Tf(e,t,n){for(var r=1/(1-t),i=e,o=20;o;--o){var a=Math.sin(i),s=1-t*a*a;if(i-=s=(kf(i,a,Math.cos(i),n)-e)*(s*Math.sqrt(s))*r,Math.abs(s)zh?Math.tan(o):0,g=Math.pow(h,2),f=Math.pow(g,2);t=1-this.es*Math.pow(s,2),c/=Math.sqrt(t);var m=kf(o,s,l,this.en);n=this.a*(this.k0*c*(1+u/6*(1-g+d+u/20*(5-18*g+f+14*d-58*g*d+u/42*(61+179*f-f*g-479*g)))))+this.x0,r=this.a*(this.k0*(m-this.ml0+s*a*c/2*(1+u/12*(5-g+9*d+4*p+u/30*(61+f-58*g+270*d-330*g*d+u/56*(1385+543*f-f*g-3111*g))))))+this.y0}else{var y=l*Math.sin(a);if(Math.abs(Math.abs(y)-1)=1){if(y-1>zh)return 93;r=0}else r=Math.acos(r);o<0&&(r=-r),r=this.a*this.k0*(r-this.lat0)+this.y0}return e.x=n,e.y=r,e},inverse:function(e){var t,n,r,i,o=(e.x-this.x0)*(1/this.a),a=(e.y-this.y0)*(1/this.a);if(this.es)if(n=Tf(t=this.ml0+a/this.k0,this.es,this.en),Math.abs(n)zh?Math.tan(n):0,u=this.ep2*Math.pow(l,2),d=Math.pow(u,2),p=Math.pow(c,2),h=Math.pow(p,2);t=1-this.es*Math.pow(s,2);var g=o*Math.sqrt(t)/this.k0,f=Math.pow(g,2);r=n-(t*=c)*f/(1-this.es)*.5*(1-f/12*(5+3*p-9*u*p+u-4*d-f/30*(61+90*p-252*u*p+45*h+46*u-f/56*(1385+3633*p+4095*h+1574*h*p)))),i=Ig(this.long0+g*(1-f/6*(1+2*p+u-f/20*(5+28*p+24*h+8*u*p+6*u-f/42*(61+662*p+1320*h+720*h*p))))/l)}else r=Fh*bg(a),i=0;else{var m=Math.exp(o/this.k0),y=.5*(m-1/m),v=this.lat0+a/this.k0,A=Math.cos(v);t=Math.sqrt((1-Math.pow(A,2))/(1+Math.pow(y,2))),r=Math.asin(t),a<0&&(r=-r),i=0===y&&0===A?0:Ig(Math.atan2(y,A)+this.long0)}return e.x=i,e.y=r,e},names:["Fast_Transverse_Mercator","Fast Transverse Mercator"]};function Of(e){var t=Math.exp(e);return t=(t-1/t)/2}function Df(e,t){e=Math.abs(e),t=Math.abs(t);var n=Math.max(e,t),r=Math.min(e,t)/(n||1);return n*Math.sqrt(1+Math.pow(r,2))}function Nf(e){var t=Math.abs(e);return t=function(e){var t=1+e,n=t-1;return 0===n?e:e*Math.log(t)/n}(t*(1+t/(Df(1,t)+1))),e<0?-t:t}function Uf(e,t){for(var n,r=2*Math.cos(2*t),i=e.length-1,o=e[i],a=0;--i>=0;)n=r*o-a+e[i],a=o,o=n;return t+n*Math.sin(2*t)}function jf(e,t,n){for(var r,i,o=Math.sin(t),a=Math.cos(t),s=Of(n),l=function(e){var t=Math.exp(e);return(t+1/t)/2}(n),c=2*a*l,u=-2*o*s,d=e.length-1,p=e[d],h=0,g=0,f=0;--d>=0;)r=g,i=h,p=c*(g=p)-r-u*(h=f)+e[d],f=u*g-i+c*h;return[(c=o*l)*p-(u=a*s)*f,c*f+u*p]}const Bf={init:function(){if(!this.approx&&(isNaN(this.es)||this.es<=0))throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION["Fast_Transverse_Mercator"] in the WKT.');this.approx&&(Rf.init.apply(this),this.forward=Rf.forward,this.inverse=Rf.inverse),this.x0=void 0!==this.x0?this.x0:0,this.y0=void 0!==this.y0?this.y0:0,this.long0=void 0!==this.long0?this.long0:0,this.lat0=void 0!==this.lat0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var e=this.es/(1+Math.sqrt(1-this.es)),t=e/(2-e),n=t;this.cgb[0]=t*(2+t*(-2/3+t*(t*(116/45+t*(26/45+t*(-2854/675)))-2))),this.cbg[0]=t*(t*(2/3+t*(4/3+t*(-82/45+t*(32/45+t*(4642/4725)))))-2),n*=t,this.cgb[1]=n*(7/3+t*(t*(-227/45+t*(2704/315+t*(2323/945)))-1.6)),this.cbg[1]=n*(5/3+t*(-16/15+t*(-13/9+t*(904/315+t*(-1522/945))))),n*=t,this.cgb[2]=n*(56/15+t*(-136/35+t*(-1262/105+t*(73814/2835)))),this.cbg[2]=n*(-26/15+t*(34/21+t*(1.6+t*(-12686/2835)))),n*=t,this.cgb[3]=n*(4279/630+t*(-332/35+t*(-399572/14175))),this.cbg[3]=n*(1237/630+t*(t*(-24832/14175)-2.4)),n*=t,this.cgb[4]=n*(4174/315+t*(-144838/6237)),this.cbg[4]=n*(-734/315+t*(109598/31185)),n*=t,this.cgb[5]=n*(601676/22275),this.cbg[5]=n*(444337/155925),n=Math.pow(t,2),this.Qn=this.k0/(1+t)*(1+n*(1/4+n*(1/64+n/256))),this.utg[0]=t*(t*(2/3+t*(-37/96+t*(1/360+t*(81/512+t*(-96199/604800)))))-.5),this.gtu[0]=t*(.5+t*(-2/3+t*(5/16+t*(41/180+t*(-127/288+t*(7891/37800)))))),this.utg[1]=n*(-1/48+t*(-1/15+t*(437/1440+t*(-46/105+t*(1118711/3870720))))),this.gtu[1]=n*(13/48+t*(t*(557/1440+t*(281/630+t*(-1983433/1935360)))-.6)),n*=t,this.utg[2]=n*(-17/480+t*(37/840+t*(209/4480+t*(-5569/90720)))),this.gtu[2]=n*(61/240+t*(-103/140+t*(15061/26880+t*(167603/181440)))),n*=t,this.utg[3]=n*(-4397/161280+t*(11/504+t*(830251/7257600))),this.gtu[3]=n*(49561/161280+t*(-179/168+t*(6601661/7257600))),n*=t,this.utg[4]=n*(-4583/161280+t*(108847/3991680)),this.gtu[4]=n*(34729/80640+t*(-3418889/1995840)),n*=t,this.utg[5]=n*(-20648693/638668800),this.gtu[5]=.6650675310896665*n;var r=Uf(this.cbg,this.lat0);this.Zb=-this.Qn*(r+function(e,t){for(var n,r=2*Math.cos(t),i=e.length-1,o=e[i],a=0;--i>=0;)n=r*o-a+e[i],a=o,o=n;return Math.sin(t)*n}(this.gtu,2*r))},forward:function(e){var t=Ig(e.x-this.long0),n=e.y;n=Uf(this.cbg,n);var r=Math.sin(n),i=Math.cos(n),o=Math.sin(t),a=Math.cos(t);n=Math.atan2(r,a*i),t=Math.atan2(o*i,Df(r,i*a)),t=Nf(Math.tan(t));var s,l,c=jf(this.gtu,2*n,2*t);return n+=c[0],t+=c[1],Math.abs(t)<=2.623395162778?(s=this.a*(this.Qn*t)+this.x0,l=this.a*(this.Qn*n+this.Zb)+this.y0):(s=1/0,l=1/0),e.x=s,e.y=l,e},inverse:function(e){var t,n,r=(e.x-this.x0)*(1/this.a),i=(e.y-this.y0)*(1/this.a);if(i=(i-this.Zb)/this.Qn,r/=this.Qn,Math.abs(r)<=2.623395162778){var o=jf(this.utg,2*i,2*r);i+=o[0],r+=o[1],r=Math.atan(Of(r));var a=Math.sin(i),s=Math.cos(i),l=Math.sin(r),c=Math.cos(r);i=Math.atan2(a*c,Df(l,c*s)),t=Ig((r=Math.atan2(l,c*s))+this.long0),n=Uf(this.cgb,i)}else t=1/0,n=1/0;return e.x=t,e.y=n,e},names:["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc","Transverse_Mercator","Transverse Mercator","Gauss Kruger","Gauss_Kruger","tmerc"]};const Ff={init:function(){var e=function(e,t){if(void 0===e){if((e=Math.floor(30*(Ig(t)+Math.PI)/Math.PI)+1)<0)return 0;if(e>60)return 60}return e}(this.zone,this.long0);if(void 0===e)throw new Error("unknown utm zone");this.lat0=0,this.long0=(6*Math.abs(e)-183)*Vh,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Bf.init.apply(this),this.forward=Bf.forward,this.inverse=Bf.inverse},names:["Universal Transverse Mercator System","utm"],dependsOn:"etmerc"};function zf(e,t){return Math.pow((1-e)/(1+e),t)}const Vf={init:function(){var e=Math.sin(this.lat0),t=Math.cos(this.lat0);t*=t,this.rc=Math.sqrt(1-this.es)/(1-this.es*e*e),this.C=Math.sqrt(1+this.es*t*t/(1-this.es)),this.phic0=Math.asin(e/this.C),this.ratexp=.5*this.C*this.e,this.K=Math.tan(.5*this.phic0+Hh)/(Math.pow(Math.tan(.5*this.lat0+Hh),this.C)*zf(this.e*e,this.ratexp))},forward:function(e){var t=e.x,n=e.y;return e.y=2*Math.atan(this.K*Math.pow(Math.tan(.5*n+Hh),this.C)*zf(this.e*Math.sin(n),this.ratexp))-Fh,e.x=this.C*t,e},inverse:function(e){for(var t=e.x/this.C,n=e.y,r=Math.pow(Math.tan(.5*n+Hh)/this.K,1/this.C),i=20;i>0&&(n=2*Math.atan(r*zf(this.e*Math.sin(e.y),-.5*this.e))-Fh,!(Math.abs(n-e.y)<1e-14));--i)e.y=n;return i?(e.x=t,e.y=n,e):null},names:["gauss"]};const qf={init:function(){Vf.init.apply(this),this.rc&&(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"))},forward:function(e){var t,n,r,i;return e.x=Ig(e.x-this.long0),Vf.forward.apply(this,[e]),t=Math.sin(e.y),n=Math.cos(e.y),r=Math.cos(e.x),i=this.k0*this.R2/(1+this.sinc0*t+this.cosc0*n*r),e.x=i*n*Math.sin(e.x),e.y=i*(this.cosc0*t-this.sinc0*n*r),e.x=this.a*e.x+this.x0,e.y=this.a*e.y+this.y0,e},inverse:function(e){var t,n,r,i,o;if(e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,e.x/=this.k0,e.y/=this.k0,o=Df(e.x,e.y)){var a=2*Math.atan2(o,this.R2);t=Math.sin(a),n=Math.cos(a),i=Math.asin(n*this.sinc0+e.y*t*this.cosc0/o),r=Math.atan2(e.x*t,o*this.cosc0*n-e.y*this.sinc0*t)}else i=this.phic0,r=0;return e.x=r,e.y=i,Vf.inverse.apply(this,[e]),e.x=Ig(e.x+this.long0),e},names:["Stereographic_North_Pole","Oblique_Stereographic","sterea","Oblique Stereographic Alternative","Double_Stereographic"]};const Hf={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.coslat0=Math.cos(this.lat0),this.sinlat0=Math.sin(this.lat0),this.sphere?1===this.k0&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=zh&&(this.k0=.5*(1+bg(this.lat0)*Math.sin(this.lat_ts))):(Math.abs(this.coslat0)<=zh&&(this.lat0>0?this.con=1:this.con=-1),this.cons=Math.sqrt(Math.pow(1+this.e,1+this.e)*Math.pow(1-this.e,1-this.e)),1===this.k0&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=zh&&Math.abs(Math.cos(this.lat_ts))>zh&&(this.k0=.5*this.cons*Cg(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts))/_g(this.e,this.con*this.lat_ts,this.con*Math.sin(this.lat_ts))),this.ms1=Cg(this.e,this.sinlat0,this.coslat0),this.X0=2*Math.atan(this.ssfn_(this.lat0,this.sinlat0,this.e))-Fh,this.cosX0=Math.cos(this.X0),this.sinX0=Math.sin(this.X0))},forward:function(e){var t,n,r,i,o,a,s=e.x,l=e.y,c=Math.sin(l),u=Math.cos(l),d=Ig(s-this.long0);return Math.abs(Math.abs(s-this.long0)-Math.PI)<=zh&&Math.abs(l+this.lat0)<=zh?(e.x=NaN,e.y=NaN,e):this.sphere?(t=2*this.k0/(1+this.sinlat0*c+this.coslat0*u*Math.cos(d)),e.x=this.a*t*u*Math.sin(d)+this.x0,e.y=this.a*t*(this.coslat0*c-this.sinlat0*u*Math.cos(d))+this.y0,e):(n=2*Math.atan(this.ssfn_(l,c,this.e))-Fh,i=Math.cos(n),r=Math.sin(n),Math.abs(this.coslat0)<=zh?(o=_g(this.e,l*this.con,this.con*c),a=2*this.a*this.k0*o/this.cons,e.x=this.x0+a*Math.sin(s-this.long0),e.y=this.y0-this.con*a*Math.cos(s-this.long0),e):(Math.abs(this.sinlat0)0?Ig(this.long0+Math.atan2(e.x,-1*e.y)):Ig(this.long0+Math.atan2(e.x,e.y)):Ig(this.long0+Math.atan2(e.x*Math.sin(s),a*this.coslat0*Math.cos(s)-e.y*this.sinlat0*Math.sin(s))),e.x=t,e.y=n,e)}if(Math.abs(this.coslat0)<=zh){if(a<=zh)return n=this.lat0,t=this.long0,e.x=t,e.y=n,e;e.x*=this.con,e.y*=this.con,r=a*this.cons/(2*this.a*this.k0),n=this.con*Eg(this.e,r),t=this.con*Ig(this.con*this.long0+Math.atan2(e.x,-1*e.y))}else i=2*Math.atan(a*this.cosX0/(2*this.a*this.k0*this.ms1)),t=this.long0,a<=zh?o=this.X0:(o=Math.asin(Math.cos(i)*this.sinX0+e.y*Math.sin(i)*this.cosX0/a),t=Ig(this.long0+Math.atan2(e.x*Math.sin(i),a*this.cosX0*Math.cos(i)-e.y*this.sinX0*Math.sin(i)))),n=-1*Eg(this.e,Math.tan(.5*(Fh+o)));return e.x=t,e.y=n,e},names:["stere","Stereographic_South_Pole","Polar Stereographic (variant B)","Polar_Stereographic"],ssfn_:function(e,t,n){return t*=n,Math.tan(.5*(Fh+e))*Math.pow((1-t)/(1+t),.5*n)}};const Wf={init:function(){var e=this.lat0;this.lambda0=this.long0;var t=Math.sin(e),n=this.a,r=1/this.rf,i=2*r-Math.pow(r,2),o=this.e=Math.sqrt(i);this.R=this.k0*n*Math.sqrt(1-i)/(1-i*Math.pow(t,2)),this.alpha=Math.sqrt(1+i/(1-i)*Math.pow(Math.cos(e),4)),this.b0=Math.asin(t/this.alpha);var a=Math.log(Math.tan(Math.PI/4+this.b0/2)),s=Math.log(Math.tan(Math.PI/4+e/2)),l=Math.log((1+o*t)/(1-o*t));this.K=a-this.alpha*s+this.alpha*o/2*l},forward:function(e){var t=Math.log(Math.tan(Math.PI/4-e.y/2)),n=this.e/2*Math.log((1+this.e*Math.sin(e.y))/(1-this.e*Math.sin(e.y))),r=-this.alpha*(t+n)+this.K,i=2*(Math.atan(Math.exp(r))-Math.PI/4),o=this.alpha*(e.x-this.lambda0),a=Math.atan(Math.sin(o)/(Math.sin(this.b0)*Math.tan(i)+Math.cos(this.b0)*Math.cos(o))),s=Math.asin(Math.cos(this.b0)*Math.sin(i)-Math.sin(this.b0)*Math.cos(i)*Math.cos(o));return e.y=this.R/2*Math.log((1+Math.sin(s))/(1-Math.sin(s)))+this.y0,e.x=this.R*a+this.x0,e},inverse:function(e){for(var t=e.x-this.x0,n=e.y-this.y0,r=t/this.R,i=2*(Math.atan(Math.exp(n/this.R))-Math.PI/4),o=Math.asin(Math.cos(this.b0)*Math.sin(i)+Math.sin(this.b0)*Math.cos(i)*Math.cos(r)),a=Math.atan(Math.sin(r)/(Math.cos(this.b0)*Math.cos(r)-Math.sin(this.b0)*Math.tan(i))),s=this.lambda0+a/this.alpha,l=0,c=o,u=-1e3,d=0;Math.abs(c-u)>1e-7;){if(++d>20)return;l=1/this.alpha*(Math.log(Math.tan(Math.PI/4+o/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(c))/2)),u=c,c=2*Math.atan(Math.exp(l))-Math.PI/2}return e.x=s,e.y=c,e},names:["somerc"]};var Yf=1e-7;const Zf={init:function(){var e,t,n,r,i,o,a,s,l,c,u,d,p,h=0,g=0,f=0,m=0,y=0,v=0,A=0;this.no_off=(p="object"==typeof(d=this).PROJECTION?Object.keys(d.PROJECTION)[0]:d.PROJECTION,"no_uoff"in d||"no_off"in d||-1!==["Hotine_Oblique_Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin"].indexOf(p)),this.no_rot="no_rot"in this;var C=!1;"alpha"in this&&(C=!0);var b=!1;if("rectified_grid_angle"in this&&(b=!0),C&&(A=this.alpha),b&&(h=this.rectified_grid_angle*Vh),C||b)g=this.longc;else if(f=this.long1,y=this.lat1,m=this.long2,v=this.lat2,Math.abs(y-v)<=Yf||(e=Math.abs(y))<=Yf||Math.abs(e-Fh)<=Yf||Math.abs(Math.abs(this.lat0)-Fh)<=Yf||Math.abs(Math.abs(v)-Fh)<=Yf)throw new Error;var I=1-this.es;t=Math.sqrt(I),Math.abs(this.lat0)>zh?(s=Math.sin(this.lat0),n=Math.cos(this.lat0),e=1-this.es*s*s,this.B=n*n,this.B=Math.sqrt(1+this.es*this.B*this.B/I),this.A=this.B*this.k0*t/e,(i=(r=this.B*t/(n*Math.sqrt(e)))*r-1)<=0?i=0:(i=Math.sqrt(i),this.lat0<0&&(i=-i)),this.E=i+=r,this.E*=Math.pow(_g(this.e,this.lat0,s),this.B)):(this.B=1/t,this.A=this.k0,this.E=r=i=1),C||b?(C?(u=Math.asin(Math.sin(A)/r),b||(h=A)):(u=h,A=Math.asin(r*Math.sin(u))),this.lam0=g-Math.asin(.5*(i-1/i)*Math.tan(u))/this.B):(o=Math.pow(_g(this.e,y,Math.sin(y)),this.B),a=Math.pow(_g(this.e,v,Math.sin(v)),this.B),i=this.E/o,l=(a-o)/(a+o),c=((c=this.E*this.E)-a*o)/(c+a*o),(e=f-m)<-Math.pi?m-=Wh:e>Math.pi&&(m+=Wh),this.lam0=Ig(.5*(f+m)-Math.atan(c*Math.tan(.5*this.B*(f-m))/l)/this.B),u=Math.atan(2*Math.sin(this.B*Ig(f-this.lam0))/(i-1/i)),h=A=Math.asin(r*Math.sin(u))),this.singam=Math.sin(u),this.cosgam=Math.cos(u),this.sinrot=Math.sin(h),this.cosrot=Math.cos(h),this.rB=1/this.B,this.ArB=this.A*this.rB,this.BrA=1/this.ArB,this.A,this.B,this.no_off?this.u_0=0:(this.u_0=Math.abs(this.ArB*Math.atan(Math.sqrt(r*r-1)/Math.cos(A))),this.lat0<0&&(this.u_0=-this.u_0)),i=.5*u,this.v_pole_n=this.ArB*Math.log(Math.tan(Hh-i)),this.v_pole_s=this.ArB*Math.log(Math.tan(Hh+i))},forward:function(e){var t,n,r,i,o,a,s,l,c={};if(e.x=e.x-this.lam0,Math.abs(Math.abs(e.y)-Fh)>zh){if(t=.5*((o=this.E/Math.pow(_g(this.e,e.y,Math.sin(e.y)),this.B))-(a=1/o)),n=.5*(o+a),i=Math.sin(this.B*e.x),r=(t*this.singam-i*this.cosgam)/n,Math.abs(Math.abs(r)-1)0?this.v_pole_n:this.v_pole_s,s=this.ArB*e.y;return this.no_rot?(c.x=s,c.y=l):(s-=this.u_0,c.x=l*this.cosrot+s*this.sinrot,c.y=s*this.cosrot-l*this.sinrot),c.x=this.a*c.x+this.x0,c.y=this.a*c.y+this.y0,c},inverse:function(e){var t,n,r,i,o,a,s,l={};if(e.x=(e.x-this.x0)*(1/this.a),e.y=(e.y-this.y0)*(1/this.a),this.no_rot?(n=e.y,t=e.x):(n=e.x*this.cosrot-e.y*this.sinrot,t=e.y*this.cosrot+e.x*this.sinrot+this.u_0),i=.5*((r=Math.exp(-this.BrA*n))-1/r),o=.5*(r+1/r),s=((a=Math.sin(this.BrA*t))*this.cosgam+i*this.singam)/o,Math.abs(Math.abs(s)-1)zh?this.ns=Math.log(r/s)/Math.log(i/l):this.ns=t,isNaN(this.ns)&&(this.ns=t),this.f0=r/(this.ns*Math.pow(i,this.ns)),this.rh=this.a*this.f0*Math.pow(c,this.ns),this.title||(this.title="Lambert Conformal Conic")}},forward:function(e){var t=e.x,n=e.y;Math.abs(2*Math.abs(n)-Math.PI)<=zh&&(n=bg(n)*(Fh-2e-10));var r,i,o=Math.abs(Math.abs(n)-Fh);if(o>zh)r=_g(this.e,n,Math.sin(n)),i=this.a*this.f0*Math.pow(r,this.ns);else{if((o=n*this.ns)<=0)return null;i=0}var a=this.ns*Ig(t-this.long0);return e.x=this.k0*(i*Math.sin(a))+this.x0,e.y=this.k0*(this.rh-i*Math.cos(a))+this.y0,e},inverse:function(e){var t,n,r,i,o,a=(e.x-this.x0)/this.k0,s=this.rh-(e.y-this.y0)/this.k0;this.ns>0?(t=Math.sqrt(a*a+s*s),n=1):(t=-Math.sqrt(a*a+s*s),n=-1);var l=0;if(0!==t&&(l=Math.atan2(n*a,n*s)),0!==t||this.ns>0){if(n=1/this.ns,r=Math.pow(t/(this.a*this.f0),n),-9999===(i=Eg(this.e,r)))return null}else i=-Fh;return o=Ig(l/this.ns+this.long0),e.x=o,e.y=i,e},names:["Lambert Tangential Conformal Conic Projection","Lambert_Conformal_Conic","Lambert_Conformal_Conic_1SP","Lambert_Conformal_Conic_2SP","lcc","Lambert Conic Conformal (1SP)","Lambert Conic Conformal (2SP)"]};const Xf={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(e){var t,n,r,i,o,a,s,l=e.x,c=e.y,u=Ig(l-this.long0);return t=Math.pow((1+this.e*Math.sin(c))/(1-this.e*Math.sin(c)),this.alfa*this.e/2),n=2*(Math.atan(this.k*Math.pow(Math.tan(c/2+this.s45),this.alfa)/t)-this.s45),r=-u*this.alfa,i=Math.asin(Math.cos(this.ad)*Math.sin(n)+Math.sin(this.ad)*Math.cos(n)*Math.cos(r)),o=Math.asin(Math.cos(n)*Math.sin(r)/Math.cos(i)),a=this.n*o,s=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(i/2+this.s45),this.n),e.y=s*Math.cos(a)/1,e.x=s*Math.sin(a)/1,this.czech||(e.y*=-1,e.x*=-1),e},inverse:function(e){var t,n,r,i,o,a,s,l=e.x;e.x=e.y,e.y=l,this.czech||(e.y*=-1,e.x*=-1),o=Math.sqrt(e.x*e.x+e.y*e.y),i=Math.atan2(e.y,e.x)/Math.sin(this.s0),r=2*(Math.atan(Math.pow(this.ro0/o,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),t=Math.asin(Math.cos(this.ad)*Math.sin(r)-Math.sin(this.ad)*Math.cos(r)*Math.cos(i)),n=Math.asin(Math.cos(r)*Math.sin(i)/Math.cos(t)),e.x=this.long0-n/this.alfa,a=t,s=0;var c=0;do{e.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(t/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(a))/(1-this.e*Math.sin(a)),this.e/2))-this.s45),Math.abs(a-e.y)<1e-10&&(s=1),a=e.y,c+=1}while(0===s&&c<15);return c>=15?null:e},names:["Krovak","krovak"]};function Kf(e,t,n,r,i){return e*i-t*Math.sin(2*i)+n*Math.sin(4*i)-r*Math.sin(6*i)}function Qf(e){return 1-.25*e*(1+e/16*(3+1.25*e))}function $f(e){return.375*e*(1+.25*e*(1+.46875*e))}function em(e){return.05859375*e*e*(1+.75*e)}function tm(e){return e*e*e*(35/3072)}function nm(e,t,n){var r=t*n;return e/Math.sqrt(1-r*r)}function rm(e){return Math.abs(e)1e-7?(1-e*e)*(t/(1-(n=e*t)*n)-.5/e*Math.log((1-n)/(1+n))):2*t}var sm=.3333333333333333,lm=.17222222222222222,cm=.10257936507936508,um=.06388888888888888,dm=.0664021164021164,pm=.016415012942191543;const hm={init:function(){var e,t=Math.abs(this.lat0);if(Math.abs(t-Fh)0)switch(this.qp=am(this.e,1),this.mmf=.5/(1-this.es),this.apa=function(e){var t,n=[];return n[0]=e*sm,t=e*e,n[0]+=t*lm,n[1]=t*um,t*=e,n[0]+=t*cm,n[1]+=t*dm,n[2]=t*pm,n}(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),e=Math.sin(this.lat0),this.sinb1=am(this.e,e)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*e*e)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}else this.mode===this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(e){var t,n,r,i,o,a,s,l,c,u,d=e.x,p=e.y;if(d=Ig(d-this.long0),this.sphere){if(o=Math.sin(p),u=Math.cos(p),r=Math.cos(d),this.mode===this.OBLIQ||this.mode===this.EQUIT){if((n=this.mode===this.EQUIT?1+u*r:1+this.sinph0*o+this.cosph0*u*r)<=zh)return null;t=(n=Math.sqrt(2/n))*u*Math.sin(d),n*=this.mode===this.EQUIT?o:this.cosph0*o-this.sinph0*u*r}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(r=-r),Math.abs(p+this.lat0)=0?(t=(c=Math.sqrt(a))*i,n=r*(this.mode===this.S_POLE?c:-c)):t=n=0}}return e.x=this.a*t+this.x0,e.y=this.a*n+this.y0,e},inverse:function(e){e.x-=this.x0,e.y-=this.y0;var t,n,r,i,o,a,s,l,c,u,d=e.x/this.a,p=e.y/this.a;if(this.sphere){var h,g=0,f=0;if((n=.5*(h=Math.sqrt(d*d+p*p)))>1)return null;switch(n=2*Math.asin(n),this.mode!==this.OBLIQ&&this.mode!==this.EQUIT||(f=Math.sin(n),g=Math.cos(n)),this.mode){case this.EQUIT:n=Math.abs(h)<=zh?0:Math.asin(p*f/h),d*=f,p=g*h;break;case this.OBLIQ:n=Math.abs(h)<=zh?this.lat0:Math.asin(g*this.sinph0+p*f*this.cosph0/h),d*=f*this.cosph0,p=(g-Math.sin(n)*this.sinph0)*h;break;case this.N_POLE:p=-p,n=Fh-n;break;case this.S_POLE:n-=Fh}t=0!==p||this.mode!==this.EQUIT&&this.mode!==this.OBLIQ?Math.atan2(d,p):0}else{if(s=0,this.mode===this.OBLIQ||this.mode===this.EQUIT){if(d/=this.dd,p*=this.dd,(a=Math.sqrt(d*d+p*p))1&&(e=e>1?1:-1),Math.asin(e)}const fm={init:function(){Math.abs(this.lat1+this.lat2)zh?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)},forward:function(e){var t=e.x,n=e.y;this.sin_phi=Math.sin(n),this.cos_phi=Math.cos(n);var r=am(this.e3,this.sin_phi),i=this.a*Math.sqrt(this.c-this.ns0*r)/this.ns0,o=this.ns0*Ig(t-this.long0),a=i*Math.sin(o)+this.x0,s=this.rh-i*Math.cos(o)+this.y0;return e.x=a,e.y=s,e},inverse:function(e){var t,n,r,i,o,a;return e.x-=this.x0,e.y=this.rh-e.y+this.y0,this.ns0>=0?(t=Math.sqrt(e.x*e.x+e.y*e.y),r=1):(t=-Math.sqrt(e.x*e.x+e.y*e.y),r=-1),i=0,0!==t&&(i=Math.atan2(r*e.x,r*e.y)),r=t*this.ns0/this.a,this.sphere?a=Math.asin((this.c-r*r)/(2*this.ns0)):(n=(this.c-r*r)/this.ns0,a=this.phi1z(this.e3,n)),o=Ig(i/this.ns0+this.long0),e.x=o,e.y=a,e},names:["Albers_Conic_Equal_Area","Albers","aea"],phi1z:function(e,t){var n,r,i,o,a=gm(.5*t);if(e0||Math.abs(o)<=zh?(a=this.x0+1*this.a*n*Math.sin(r)/o,s=this.y0+1*this.a*(this.cos_p14*t-this.sin_p14*n*i)/o):(a=this.x0+this.infinity_dist*n*Math.sin(r),s=this.y0+this.infinity_dist*(this.cos_p14*t-this.sin_p14*n*i)),e.x=a,e.y=s,e},inverse:function(e){var t,n,r,i,o,a;return e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,e.x/=this.k0,e.y/=this.k0,(t=Math.sqrt(e.x*e.x+e.y*e.y))?(i=Math.atan2(t,this.rc),n=Math.sin(i),a=gm((r=Math.cos(i))*this.sin_p14+e.y*n*this.cos_p14/t),o=Math.atan2(e.x*n,t*this.cos_p14*r-e.y*this.sin_p14*n),o=Ig(this.long0+o)):(a=this.phic0,o=0),e.x=o,e.y=a,e},names:["gnom"]};const ym={init:function(){this.sphere||(this.k0=Cg(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(e){var t,n,r=e.x,i=e.y,o=Ig(r-this.long0);if(this.sphere)t=this.x0+this.a*o*Math.cos(this.lat_ts),n=this.y0+this.a*Math.sin(i)/Math.cos(this.lat_ts);else{var a=am(this.e,Math.sin(i));t=this.x0+this.a*this.k0*o,n=this.y0+this.a*a*.5/this.k0}return e.x=t,e.y=n,e},inverse:function(e){var t,n;return e.x-=this.x0,e.y-=this.y0,this.sphere?(t=Ig(this.long0+e.x/this.a/Math.cos(this.lat_ts)),n=Math.asin(e.y/this.a*Math.cos(this.lat_ts))):(n=function(e,t){var n=1-(1-e*e)/(2*e)*Math.log((1-e)/(1+e));if(Math.abs(Math.abs(t)-n)<1e-6)return t<0?-1*Fh:Fh;for(var r,i,o,a,s=Math.asin(.5*t),l=0;l<30;l++)if(i=Math.sin(s),o=Math.cos(s),a=e*i,s+=r=Math.pow(1-a*a,2)/(2*o)*(t/(1-e*e)-i/(1-a*a)+.5/e*Math.log((1-a)/(1+a))),Math.abs(r)<=1e-10)return s;return NaN}(this.e,2*e.y*this.k0/this.a),t=Ig(this.long0+e.x/(this.a*this.k0))),e.x=t,e.y=n,e},names:["cea"]};const vm={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Equidistant Cylindrical (Plate Carre)",this.rc=Math.cos(this.lat_ts)},forward:function(e){var t=e.x,n=e.y,r=Ig(t-this.long0),i=rm(n-this.lat0);return e.x=this.x0+this.a*r*this.rc,e.y=this.y0+this.a*i,e},inverse:function(e){var t=e.x,n=e.y;return e.x=Ig(this.long0+(t-this.x0)/(this.a*this.rc)),e.y=rm(this.lat0+(n-this.y0)/this.a),e},names:["Equirectangular","Equidistant_Cylindrical","eqc"]};const Am={init:function(){this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Qf(this.es),this.e1=$f(this.es),this.e2=em(this.es),this.e3=tm(this.es),this.ml0=this.a*Kf(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(e){var t,n,r,i=e.x,o=e.y,a=Ig(i-this.long0);if(r=a*Math.sin(o),this.sphere)Math.abs(o)<=zh?(t=this.a*a,n=-1*this.a*this.lat0):(t=this.a*Math.sin(r)/Math.tan(o),n=this.a*(rm(o-this.lat0)+(1-Math.cos(r))/Math.tan(o)));else if(Math.abs(o)<=zh)t=this.a*a,n=-1*this.ml0;else{var s=nm(this.a,this.e,Math.sin(o))/Math.tan(o);t=s*Math.sin(r),n=this.a*Kf(this.e0,this.e1,this.e2,this.e3,o)-this.ml0+s*(1-Math.cos(r))}return e.x=t+this.x0,e.y=n+this.y0,e},inverse:function(e){var t,n,r,i,o,a,s,l,c;if(r=e.x-this.x0,i=e.y-this.y0,this.sphere)if(Math.abs(i+this.a*this.lat0)<=zh)t=Ig(r/this.a+this.long0),n=0;else{var u;for(a=this.lat0+i/this.a,s=r*r/this.a/this.a+a*a,l=a,o=20;o;--o)if(l+=c=-1*(a*(l*(u=Math.tan(l))+1)-l-.5*(l*l+s)*u)/((l-a)/u-1),Math.abs(c)<=zh){n=l;break}t=Ig(this.long0+Math.asin(r*Math.tan(l)/this.a)/Math.sin(n))}else if(Math.abs(i+this.ml0)<=zh)n=0,t=Ig(this.long0+r/this.a);else{var d,p,h,g,f;for(a=(this.ml0+i)/this.a,s=r*r/this.a/this.a+a*a,l=a,o=20;o;--o)if(f=this.e*Math.sin(l),d=Math.sqrt(1-f*f)*Math.tan(l),p=this.a*Kf(this.e0,this.e1,this.e2,this.e3,l),h=this.e0-2*this.e1*Math.cos(2*l)+4*this.e2*Math.cos(4*l)-6*this.e3*Math.cos(6*l),l-=c=(a*(d*(g=p/this.a)+1)-g-.5*d*(g*g+s))/(this.es*Math.sin(2*l)*(g*g+s-2*a*g)/(4*d)+(a-g)*(d*h-2/Math.sin(2*l))-h),Math.abs(c)<=zh){n=l;break}d=Math.sqrt(1-this.es*Math.pow(Math.sin(n),2))*Math.tan(n),t=Ig(this.long0+Math.asin(r*d/this.a)/Math.sin(n))}return e.x=t,e.y=n,e},names:["Polyconic","poly"]};const Cm={init:function(){this.A=[],this.A[1]=.6399175073,this.A[2]=-.1358797613,this.A[3]=.063294409,this.A[4]=-.02526853,this.A[5]=.0117879,this.A[6]=-.0055161,this.A[7]=.0026906,this.A[8]=-.001333,this.A[9]=67e-5,this.A[10]=-34e-5,this.B_re=[],this.B_im=[],this.B_re[1]=.7557853228,this.B_im[1]=0,this.B_re[2]=.249204646,this.B_im[2]=.003371507,this.B_re[3]=-.001541739,this.B_im[3]=.04105856,this.B_re[4]=-.10162907,this.B_im[4]=.01727609,this.B_re[5]=-.26623489,this.B_im[5]=-.36249218,this.B_re[6]=-.6870983,this.B_im[6]=-1.1651967,this.C_re=[],this.C_im=[],this.C_re[1]=1.3231270439,this.C_im[1]=0,this.C_re[2]=-.577245789,this.C_im[2]=-.007809598,this.C_re[3]=.508307513,this.C_im[3]=-.112208952,this.C_re[4]=-.15094762,this.C_im[4]=.18200602,this.C_re[5]=1.01418179,this.C_im[5]=1.64497696,this.C_re[6]=1.9660549,this.C_im[6]=2.5127645,this.D=[],this.D[1]=1.5627014243,this.D[2]=.5185406398,this.D[3]=-.03333098,this.D[4]=-.1052906,this.D[5]=-.0368594,this.D[6]=.007317,this.D[7]=.0122,this.D[8]=.00394,this.D[9]=-.0013},forward:function(e){var t,n=e.x,r=e.y-this.lat0,i=n-this.long0,o=r/Bh*1e-5,a=i,s=1,l=0;for(t=1;t<=10;t++)s*=o,l+=this.A[t]*s;var c,u=l,d=a,p=1,h=0,g=0,f=0;for(t=1;t<=6;t++)c=h*u+p*d,p=p*u-h*d,h=c,g=g+this.B_re[t]*p-this.B_im[t]*h,f=f+this.B_im[t]*p+this.B_re[t]*h;return e.x=f*this.a+this.x0,e.y=g*this.a+this.y0,e},inverse:function(e){var t,n,r=e.x,i=e.y,o=r-this.x0,a=(i-this.y0)/this.a,s=o/this.a,l=1,c=0,u=0,d=0;for(t=1;t<=6;t++)n=c*a+l*s,l=l*a-c*s,c=n,u=u+this.C_re[t]*l-this.C_im[t]*c,d=d+this.C_im[t]*l+this.C_re[t]*c;for(var p=0;p.999999999999&&(n=.999999999999),t=Math.asin(n);var r=Ig(this.long0+e.x/(.900316316158*this.a*Math.cos(t)));r<-Math.PI&&(r=-Math.PI),r>Math.PI&&(r=Math.PI),n=(2*t+Math.sin(2*t))/Math.PI,Math.abs(n)>1&&(n=1);var i=Math.asin(n);return e.x=r,e.y=i,e},names:["Mollweide","moll"]};const Em={init:function(){Math.abs(this.lat1+this.lat2)=0?(n=Math.sqrt(e.x*e.x+e.y*e.y),t=1):(n=-Math.sqrt(e.x*e.x+e.y*e.y),t=-1);var o=0;return 0!==n&&(o=Math.atan2(t*e.x,t*e.y)),this.sphere?(i=Ig(this.long0+o/this.ns),r=rm(this.g-n/this.a),e.x=i,e.y=r,e):(r=im(this.g-n/this.a,this.e0,this.e1,this.e2,this.e3),i=Ig(this.long0+o/this.ns),e.x=i,e.y=r,e)},names:["Equidistant_Conic","eqdc"]};const wm={init:function(){this.R=this.a},forward:function(e){var t,n,r=e.x,i=e.y,o=Ig(r-this.long0);Math.abs(i)<=zh&&(t=this.x0+this.R*o,n=this.y0);var a=gm(2*Math.abs(i/Math.PI));(Math.abs(o)<=zh||Math.abs(Math.abs(i)-Fh)<=zh)&&(t=this.x0,n=i>=0?this.y0+Math.PI*this.R*Math.tan(.5*a):this.y0+Math.PI*this.R*-Math.tan(.5*a));var s=.5*Math.abs(Math.PI/o-o/Math.PI),l=s*s,c=Math.sin(a),u=Math.cos(a),d=u/(c+u-1),p=d*d,h=d*(2/c-1),g=h*h,f=Math.PI*this.R*(s*(d-g)+Math.sqrt(l*(d-g)*(d-g)-(g+l)*(p-g)))/(g+l);o<0&&(f=-f),t=this.x0+f;var m=l+d;return f=Math.PI*this.R*(h*m-s*Math.sqrt((g+l)*(l+1)-m*m))/(g+l),n=i>=0?this.y0+f:this.y0-f,e.x=t,e.y=n,e},inverse:function(e){var t,n,r,i,o,a,s,l,c,u,d,p;return e.x-=this.x0,e.y-=this.y0,d=Math.PI*this.R,o=(r=e.x/d)*r+(i=e.y/d)*i,d=3*(i*i/(l=-2*(a=-Math.abs(i)*(1+o))+1+2*i*i+o*o)+(2*(s=a-2*i*i+r*r)*s*s/l/l/l-9*a*s/l/l)/27)/(c=(a-s*s/3/l)/l)/(u=2*Math.sqrt(-c/3)),Math.abs(d)>1&&(d=d>=0?1:-1),p=Math.acos(d)/3,n=e.y>=0?(-u*Math.cos(p+Math.PI/3)-s/3/l)*Math.PI:-(-u*Math.cos(p+Math.PI/3)-s/3/l)*Math.PI,t=Math.abs(r)2*Fh*this.a)return;return n=t/this.a,r=Math.sin(n),i=Math.cos(n),o=this.long0,Math.abs(t)<=zh?a=this.lat0:(a=gm(i*this.sin_p12+e.y*r*this.cos_p12/t),s=Math.abs(this.lat0)-Fh,o=Math.abs(s)<=zh?this.lat0>=0?Ig(this.long0+Math.atan2(e.x,-e.y)):Ig(this.long0-Math.atan2(-e.x,e.y)):Ig(this.long0+Math.atan2(e.x*r,t*this.cos_p12*i-e.y*this.sin_p12*r))),e.x=o,e.y=a,e}return l=Qf(this.es),c=$f(this.es),u=em(this.es),d=tm(this.es),Math.abs(this.sin_p12-1)<=zh?(a=im(((p=this.a*Kf(l,c,u,d,Fh))-(t=Math.sqrt(e.x*e.x+e.y*e.y)))/this.a,l,c,u,d),o=Ig(this.long0+Math.atan2(e.x,-1*e.y)),e.x=o,e.y=a,e):Math.abs(this.sin_p12+1)<=zh?(p=this.a*Kf(l,c,u,d,Fh),a=im(((t=Math.sqrt(e.x*e.x+e.y*e.y))-p)/this.a,l,c,u,d),o=Ig(this.long0+Math.atan2(e.x,e.y)),e.x=o,e.y=a,e):(t=Math.sqrt(e.x*e.x+e.y*e.y),f=Math.atan2(e.x,e.y),h=nm(this.a,this.e,this.sin_p12),m=Math.cos(f),v=-(y=this.e*this.cos_p12*m)*y/(1-this.es),A=3*this.es*(1-v)*this.sin_p12*this.cos_p12*m/(1-this.es),I=1-v*(b=(C=t/h)-v*(1+v)*Math.pow(C,3)/6-A*(1+3*v)*Math.pow(C,4)/24)*b/2-C*b*b*b/6,g=Math.asin(this.sin_p12*Math.cos(b)+this.cos_p12*Math.sin(b)*m),o=Ig(this.long0+Math.asin(Math.sin(f)*Math.sin(b)/Math.cos(g))),_=Math.sin(g),a=Math.atan2((_-this.es*I*this.sin_p12)*Math.tan(g),_*(1-this.es)),e.x=o,e.y=a,e)},names:["Azimuthal_Equidistant","aeqd"]};const Sm={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)},forward:function(e){var t,n,r,i,o,a,s,l=e.x,c=e.y;return r=Ig(l-this.long0),t=Math.sin(c),n=Math.cos(c),i=Math.cos(r),((o=this.sin_p14*t+this.cos_p14*n*i)>0||Math.abs(o)<=zh)&&(a=1*this.a*n*Math.sin(r),s=this.y0+1*this.a*(this.cos_p14*t-this.sin_p14*n*i)),e.x=a,e.y=s,e},inverse:function(e){var t,n,r,i,o,a,s;return e.x-=this.x0,e.y-=this.y0,n=gm((t=Math.sqrt(e.x*e.x+e.y*e.y))/this.a),r=Math.sin(n),i=Math.cos(n),a=this.long0,Math.abs(t)<=zh?(s=this.lat0,e.x=a,e.y=s,e):(s=gm(i*this.sin_p14+e.y*r*this.cos_p14/t),o=Math.abs(this.lat0)-Fh,Math.abs(o)<=zh?(a=this.lat0>=0?Ig(this.long0+Math.atan2(e.x,-e.y)):Ig(this.long0-Math.atan2(-e.x,e.y)),e.x=a,e.y=s,e):(a=Ig(this.long0+Math.atan2(e.x*r,t*this.cos_p14*i-e.y*this.sin_p14*r)),e.x=a,e.y=s,e))},names:["ortho"]};var Mm=1,xm=2,Gm=3,Lm=4,km=5,Tm=6,Rm=1,Om=2,Dm=3,Nm=4;function Um(e,t,n,r){var i;return eHh&&i<=Fh+Hh?(r.value=Om,i-=Fh):i>Fh+Hh||i<=-(Fh+Hh)?(r.value=Dm,i=i>=0?i-Yh:i+Yh):(r.value=Nm,i+=Fh)),i}function jm(e,t){var n=e+t;return n<-Yh?n+=Wh:n>+Yh&&(n-=Wh),n}const Bm={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=Fh-Hh/2?this.face=km:this.lat0<=-(Fh-Hh/2)?this.face=Tm:Math.abs(this.long0)<=Hh?this.face=Mm:Math.abs(this.long0)<=Fh+Hh?this.face=this.long0>0?xm:Lm:this.face=Gm,0!==this.es&&(this.one_minus_f=1-(this.a-this.b)/this.a,this.one_minus_f_squared=this.one_minus_f*this.one_minus_f)},forward:function(e){var t,n,r,i,o,a,s={x:0,y:0},l={value:0};if(e.x-=this.long0,t=0!==this.es?Math.atan(this.one_minus_f_squared*Math.tan(e.y)):e.y,n=e.x,this.face===km)i=Fh-t,n>=Hh&&n<=Fh+Hh?(l.value=Rm,r=n-Fh):n>Fh+Hh||n<=-(Fh+Hh)?(l.value=Om,r=n>0?n-Yh:n+Yh):n>-(Fh+Hh)&&n<=-Hh?(l.value=Dm,r=n+Fh):(l.value=Nm,r=n);else if(this.face===Tm)i=Fh+t,n>=Hh&&n<=Fh+Hh?(l.value=Rm,r=-n+Fh):n=-Hh?(l.value=Om,r=-n):n<-Hh&&n>=-(Fh+Hh)?(l.value=Dm,r=-n-Fh):(l.value=Nm,r=n>0?-n+Yh:-n-Yh);else{var c,u,d,p,h,g;this.face===xm?n=jm(n,+Fh):this.face===Gm?n=jm(n,+Yh):this.face===Lm&&(n=jm(n,-Fh)),p=Math.sin(t),h=Math.cos(t),g=Math.sin(n),c=h*Math.cos(n),u=h*g,d=p,this.face===Mm?r=Um(i=Math.acos(c),d,u,l):this.face===xm?r=Um(i=Math.acos(u),d,-c,l):this.face===Gm?r=Um(i=Math.acos(-c),d,-u,l):this.face===Lm?r=Um(i=Math.acos(-u),d,c,l):(i=r=0,l.value=Rm)}return a=Math.atan(12/Yh*(r+Math.acos(Math.sin(r)*Math.cos(Hh))-Fh)),o=Math.sqrt((1-Math.cos(i))/(Math.cos(a)*Math.cos(a))/(1-Math.cos(Math.atan(1/Math.cos(r))))),l.value===Om?a+=Fh:l.value===Dm?a+=Yh:l.value===Nm&&(a+=1.5*Yh),s.x=o*Math.cos(a),s.y=o*Math.sin(a),s.x=s.x*this.a+this.x0,s.y=s.y*this.a+this.y0,e.x=s.x,e.y=s.y,e},inverse:function(e){var t,n,r,i,o,a,s,l,c,u,d,p,h={lam:0,phi:0},g={value:0};if(e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,n=Math.atan(Math.sqrt(e.x*e.x+e.y*e.y)),t=Math.atan2(e.y,e.x),e.x>=0&&e.x>=Math.abs(e.y)?g.value=Rm:e.y>=0&&e.y>=Math.abs(e.x)?(g.value=Om,t-=Fh):e.x<0&&-e.x>=Math.abs(e.y)?(g.value=Dm,t=t<0?t+Yh:t-Yh):(g.value=Nm,t+=Fh),c=Yh/12*Math.tan(t),o=Math.sin(c)/(Math.cos(c)-1/Math.sqrt(2)),a=Math.atan(o),(s=1-(r=Math.cos(t))*r*(i=Math.tan(n))*i*(1-Math.cos(Math.atan(1/Math.cos(a)))))<-1?s=-1:s>1&&(s=1),this.face===km)l=Math.acos(s),h.phi=Fh-l,g.value===Rm?h.lam=a+Fh:g.value===Om?h.lam=a<0?a+Yh:a-Yh:g.value===Dm?h.lam=a-Fh:h.lam=a;else if(this.face===Tm)l=Math.acos(s),h.phi=l-Fh,g.value===Rm?h.lam=-a+Fh:g.value===Om?h.lam=-a:g.value===Dm?h.lam=-a-Fh:h.lam=a<0?-a-Yh:-a+Yh;else{var f,m,y;c=(f=s)*f,m=(c+=(y=c>=1?0:Math.sqrt(1-c)*Math.sin(a))*y)>=1?0:Math.sqrt(1-c),g.value===Om?(c=m,m=-y,y=c):g.value===Dm?(m=-m,y=-y):g.value===Nm&&(c=m,m=y,y=-c),this.face===xm?(c=f,f=-m,m=c):this.face===Gm?(f=-f,m=-m):this.face===Lm&&(c=f,f=m,m=-c),h.phi=Math.acos(-y)-Fh,h.lam=Math.atan2(m,f),this.face===xm?h.lam=jm(h.lam,-Fh):this.face===Gm?h.lam=jm(h.lam,-Yh):this.face===Lm&&(h.lam=jm(h.lam,+Fh))}return 0!==this.es&&(u=h.phi<0?1:0,d=Math.tan(h.phi),p=this.b/Math.sqrt(d*d+this.one_minus_f_squared),h.phi=Math.atan(Math.sqrt(this.a*this.a-p*p)/(this.one_minus_f*p)),u&&(h.phi=-h.phi)),h.lam+=this.long0,e.x=h.lam,e.y=h.phi,e},names:["Quadrilateralized Spherical Cube","Quadrilateralized_Spherical_Cube","qsc"]};var Fm=[[1,22199e-21,-715515e-10,31103e-10],[.9986,-482243e-9,-24897e-9,-13309e-10],[.9954,-83103e-8,-448605e-10,-9.86701e-7],[.99,-.00135364,-59661e-9,36777e-10],[.9822,-.00167442,-449547e-11,-572411e-11],[.973,-.00214868,-903571e-10,1.8736e-8],[.96,-.00305085,-900761e-10,164917e-11],[.9427,-.00382792,-653386e-10,-26154e-10],[.9216,-.00467746,-10457e-8,481243e-11],[.8962,-.00536223,-323831e-10,-543432e-11],[.8679,-.00609363,-113898e-9,332484e-11],[.835,-.00698325,-640253e-10,9.34959e-7],[.7986,-.00755338,-500009e-10,9.35324e-7],[.7597,-.00798324,-35971e-9,-227626e-11],[.7186,-.00851367,-701149e-10,-86303e-10],[.6732,-.00986209,-199569e-9,191974e-10],[.6213,-.010418,883923e-10,624051e-11],[.5722,-.00906601,182e-6,624051e-11],[.5322,-.00677797,275608e-9,624051e-11]],zm=[[-520417e-23,.0124,121431e-23,-845284e-16],[.062,.0124,-1.26793e-9,4.22642e-10],[.124,.0124,5.07171e-9,-1.60604e-9],[.186,.0123999,-1.90189e-8,6.00152e-9],[.248,.0124002,7.10039e-8,-2.24e-8],[.31,.0123992,-2.64997e-7,8.35986e-8],[.372,.0124029,9.88983e-7,-3.11994e-7],[.434,.0123893,-369093e-11,-4.35621e-7],[.4958,.0123198,-102252e-10,-3.45523e-7],[.5571,.0121916,-154081e-10,-5.82288e-7],[.6176,.0119938,-241424e-10,-5.25327e-7],[.6769,.011713,-320223e-10,-5.16405e-7],[.7346,.0113541,-397684e-10,-6.09052e-7],[.7903,.0109107,-489042e-10,-104739e-11],[.8435,.0103431,-64615e-9,-1.40374e-9],[.8936,.00969686,-64636e-9,-8547e-9],[.9394,.00840947,-192841e-9,-42106e-10],[.9761,.00616527,-256e-6,-42106e-10],[1,.00328947,-319159e-9,-42106e-10]],Vm=.8487,qm=1.3523,Hm=qh/5,Wm=1/Hm,Ym=18,Zm=function(e,t){return e[0]+t*(e[1]+t*(e[2]+t*e[3]))};const Jm={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.long0=this.long0||0,this.es=0,this.title=this.title||"Robinson"},forward:function(e){var t=Ig(e.x-this.long0),n=Math.abs(e.y),r=Math.floor(n*Hm);r<0?r=0:r>=Ym&&(r=17);var i={x:Zm(Fm[r],n=qh*(n-Wm*r))*t,y:Zm(zm[r],n)};return e.y<0&&(i.y=-i.y),i.x=i.x*this.a*Vm+this.x0,i.y=i.y*this.a*qm+this.y0,i},inverse:function(e){var t={x:(e.x-this.x0)/(this.a*Vm),y:Math.abs(e.y-this.y0)/(this.a*qm)};if(t.y>=1)t.x/=Fm[18][0],t.y=e.y<0?-Fh:Fh;else{var n=Math.floor(t.y*Ym);for(n<0?n=0:n>=Ym&&(n=17);;)if(zm[n][0]>t.y)--n;else{if(!(zm[n+1][0]<=t.y))break;++n}var r=zm[n],i=5*(t.y-r[0])/(zm[n+1][0]-r[0]);i=function(e,t,n,r){for(var i=t;r;--r){var o=e(i);if(i-=o,Math.abs(o)1e10)throw new Error;if(this.radius_g=1+this.radius_g_1,this.C=this.radius_g*this.radius_g-1,0!==this.es){var e=1-this.es,t=1/e;this.radius_p=Math.sqrt(e),this.radius_p2=e,this.radius_p_inv2=t,this.shape="ellipse"}else this.radius_p=1,this.radius_p2=1,this.radius_p_inv2=1,this.shape="sphere";this.title||(this.title="Geostationary Satellite View")},forward:function(e){var t,n,r,i,o=e.x,a=e.y;if(o-=this.long0,"ellipse"===this.shape){a=Math.atan(this.radius_p2*Math.tan(a));var s=this.radius_p/Df(this.radius_p*Math.cos(a),Math.sin(a));if(n=s*Math.cos(o)*Math.cos(a),r=s*Math.sin(o)*Math.cos(a),i=s*Math.sin(a),(this.radius_g-n)*n-r*r-i*i*this.radius_p_inv2<0)return e.x=Number.NaN,e.y=Number.NaN,e;t=this.radius_g-n,this.flip_axis?(e.x=this.radius_g_1*Math.atan(r/Df(i,t)),e.y=this.radius_g_1*Math.atan(i/t)):(e.x=this.radius_g_1*Math.atan(r/t),e.y=this.radius_g_1*Math.atan(i/Df(r,t)))}else"sphere"===this.shape&&(t=Math.cos(a),n=Math.cos(o)*t,r=Math.sin(o)*t,i=Math.sin(a),t=this.radius_g-n,this.flip_axis?(e.x=this.radius_g_1*Math.atan(r/Df(i,t)),e.y=this.radius_g_1*Math.atan(i/t)):(e.x=this.radius_g_1*Math.atan(r/t),e.y=this.radius_g_1*Math.atan(i/Df(r,t))));return e.x=e.x*this.a,e.y=e.y*this.a,e},inverse:function(e){var t,n,r,i,o=-1,a=0,s=0;if(e.x=e.x/this.a,e.y=e.y/this.a,"ellipse"===this.shape){this.flip_axis?(s=Math.tan(e.y/this.radius_g_1),a=Math.tan(e.x/this.radius_g_1)*Df(1,s)):(a=Math.tan(e.x/this.radius_g_1),s=Math.tan(e.y/this.radius_g_1)*Df(1,a));var l=s/this.radius_p;if(t=a*a+l*l+o*o,(r=(n=2*this.radius_g*o)*n-4*t*this.C)<0)return e.x=Number.NaN,e.y=Number.NaN,e;i=(-n-Math.sqrt(r))/(2*t),o=this.radius_g+i*o,a*=i,s*=i,e.x=Math.atan2(a,o),e.y=Math.atan(s*Math.cos(e.x)/o),e.y=Math.atan(this.radius_p_inv2*Math.tan(e.y))}else if("sphere"===this.shape){if(this.flip_axis?(s=Math.tan(e.y/this.radius_g_1),a=Math.tan(e.x/this.radius_g_1)*Math.sqrt(1+s*s)):(a=Math.tan(e.x/this.radius_g_1),s=Math.tan(e.y/this.radius_g_1)*Math.sqrt(1+a*a)),t=a*a+s*s+o*o,(r=(n=2*this.radius_g*o)*n-4*t*this.C)<0)return e.x=Number.NaN,e.y=Number.NaN,e;i=(-n-Math.sqrt(r))/(2*t),o=this.radius_g+i*o,a*=i,s*=i,e.x=Math.atan2(a,o),e.y=Math.atan(s*Math.cos(e.x)/o)}return e.x=e.x+this.long0,e},names:["Geostationary Satellite View","Geostationary_Satellite","geos"]};var iy=1.340264,oy=-.081106,ay=893e-6,sy=.003796,ly=Math.sqrt(3)/2;const cy={init:function(){this.es=0,this.long0=void 0!==this.long0?this.long0:0},forward:function(e){var t=Ig(e.x-this.long0),n=e.y,r=Math.asin(ly*Math.sin(n)),i=r*r,o=i*i*i;return e.x=t*Math.cos(r)/(ly*(iy+3*oy*i+o*(7*ay+9*sy*i))),e.y=r*(iy+oy*i+o*(ay+sy*i)),e.x=this.a*e.x+this.x0,e.y=this.a*e.y+this.y0,e},inverse:function(e){e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a;var t,n,r,i,o=e.y;for(i=0;i<12&&(o-=r=(o*(iy+oy*(t=o*o)+(n=t*t*t)*(ay+sy*t))-e.y)/(iy+3*oy*t+n*(7*ay+9*sy*t)),!(Math.abs(r)<1e-9));++i);return n=(t=o*o)*t*t,e.x=ly*e.x*(iy+3*oy*t+n*(7*ay+9*sy*t))/Math.cos(o),e.y=Math.asin(Math.sin(o)/ly),e.x=Ig(e.x+this.long0),e},names:["eqearth","Equal Earth","Equal_Earth"]};var uy=1e-10;function dy(e){var t,n,r,i=Ig(e.x-(this.long0||0)),o=e.y;return t=this.am1+this.m1-kf(o,n=Math.sin(o),r=Math.cos(o),this.en),n=r*i/(t*Math.sqrt(1-this.es*n*n)),e.x=t*Math.sin(n),e.y=this.am1-t*Math.cos(n),e.x=this.a*e.x+(this.x0||0),e.y=this.a*e.y+(this.y0||0),e}function py(e){var t,n,r,i;if(e.x=(e.x-(this.x0||0))/this.a,e.y=(e.y-(this.y0||0))/this.a,n=Df(e.x,e.y=this.am1-e.y),i=Tf(this.am1+this.m1-n,this.es,this.en),(t=Math.abs(i))uy?(e.x=n*Math.sin(t=r*Math.cos(i)/n),e.y=this.cphi1-n*Math.cos(t)):e.x=e.y=0,e.x=this.a*e.x+(this.x0||0),e.y=this.a*e.y+(this.y0||0),e}function gy(e){var t,n;e.x=(e.x-(this.x0||0))/this.a,e.y=(e.y-(this.y0||0))/this.a;var r=Df(e.x,e.y=this.cphi1-e.y);if(n=this.cphi1+this.phi1-r,Math.abs(n)>Fh)throw new Error;return t=Math.abs(Math.abs(n)-Fh)<=uy?0:r*Math.atan2(e.x,e.y)/Math.cos(n),e.x=Ig(t+(this.long0||0)),e.y=rm(n),e}const fy={init:function(){var e;if(this.phi1=this.lat1,Math.abs(this.phi1)=Fh?this.cphi1=0:this.cphi1=1/Math.tan(this.phi1),this.inverse=gy,this.forward=hy)},names:["bonne","Bonne (Werner lat_1=90)"]};lf.defaultDatum="WGS84",lf.Proj=Wg,lf.WGS84=new lf.Proj("WGS84"),lf.Point=Sf,lf.toPoint=tf,lf.defs=fg,lf.nadgrid=function(e,t){var n=new DataView(t),r=function(e){var t=e.getInt32(8,!1);if(11===t)return!1;t=e.getInt32(8,!0),11!==t&&console.warn("Failed to detect nadgrid endian-ness, defaulting to little-endian");return!0}(n),i=function(e,t){return{nFields:e.getInt32(8,t),nSubgridFields:e.getInt32(24,t),nSubgrids:e.getInt32(40,t),shiftType:Fg(e,56,64).trim(),fromSemiMajorAxis:e.getFloat64(120,t),fromSemiMinorAxis:e.getFloat64(136,t),toSemiMajorAxis:e.getFloat64(152,t),toSemiMinorAxis:e.getFloat64(168,t)}}(n,r),o=function(e,t,n){for(var r=176,i=[],o=0;o2?(document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("GPelementHidden","GPelementVisible"),document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("gpf-hidden","gpf-visible")):(document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden")),t.onAutoCompleteSearchText(e))})),r.addEventListener("keydown",(function(e){var n=e.which||e.keyCode;13===n&&e.preventDefault();var r=document.getElementById(t._addUID("GPautocompleteResults"));if(r){var i=r.getElementsByClassName("GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current"),o=r.getElementsByClassName("GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine"),a=o.length;if(a){var s=null;if(i.length)s=i[0];else if((s=o[0]).className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current",s.style.color="#000000",s.style["background-color"]="#CEDBEF",13!==n)return;var l=parseInt(ju.index(s.id),10),c=l===a-1?o[0]:o[l+1],u=0===l?o[a-1]:o[l-1];switch(s.style["background-color"]="",s.style.color="",u.style["background-color"]="",u.style.color="",c.style["background-color"]="",c.style.color="",n){case 38:s.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine",u.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current",u.style.color="#000000",u.style["background-color"]="#CEDBEF",s.scrollIntoView();break;case 40:s.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine",c.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current",c.style.color="#000000",c.style["background-color"]="#CEDBEF",s.scrollIntoView();break;case 13:e.preventDefault(),s.click(e)}s.focus()}}})),n.appendChild(r),n},_createSearchResetElement:function(){var e=this,t=document.createElement("button");return t.id=this._addUID("GPsearchInputReset"),t.className="GPshowOpen GPsearchInputReset gpf-btn gpf-btn-icon-reset gpf-btn-icon-search-reset fr-btn fr-btn--secondary gpf-btn--secondary",t.setAttribute("aria-label","Supprimer la recherche"),t.addEventListener("click",(function(t){document.getElementById(e._addUID("GPsearchInputText")).value="",document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),e.onSearchResetClick()})),t},_createButtonsElement:function(){var e=document.createElement("div");return e.className="GPbuttonsContainer",e},_createFirstLineWrapper:function(){var e=document.createElement("div");return e.className="GPsearchFirstLineWrapper",e},_createRadioContainer:function(){var e=document.createElement("div");return e.className="GPsearchRadioContainer",e},_createRadioElements:function(){var e=document.createElement("div");e.className="GPsearchRadioElements";var t=document.createElement("div");t.className="GPsearchSplitChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w";var n=document.createElement("input");n.id=this._addUID("GPsearchSplitLocations"),n.type="radio",n.name="GPsearchSplit",n.value="address",n.checked=!0,t.appendChild(n);var r=document.createElement("label");r.className="gpf-label fr-label",r.htmlFor=this._addUID("GPsearchSplitLocations"),r.title="Adresses",r.innerHTML="Adresses",t.appendChild(r),n.addEventListener?n.addEventListener("change",(function(){n.checked?(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.add("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.remove("gpf-hidden","GPelementHidden")):(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.add("gpf-hidden","GPelementHidden"))})):n.attachEvent&&n.attachEvent("onchange",(function(){n.checked?(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.add("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.remove("gpf-hidden","GPelementHidden")):(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.add("gpf-hidden","GPelementHidden"))}));var i=document.createElement("div");i.className="GPsearchSplitChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w";var o=document.createElement("input");o.id=this._addUID("GPsearchSplitData"),o.type="radio",o.name="GPsearchSplit",o.value="data",i.appendChild(o);var a=document.createElement("label");return a.className="gpf-label fr-label",a.htmlFor=this._addUID("GPsearchSplitData"),a.title="Cartes et données",a.innerHTML="Cartes et données",i.appendChild(a),o.addEventListener?o.addEventListener("change",(function(){o.checked?(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.add("gpf-hidden","GPelementHidden")):(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.add("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.remove("gpf-hidden","GPelementHidden"))})):o.attachEvent&&o.attachEvent("onchange",(function(){o.checked?(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.remove("gpf-hidden","GPelementHidden")):(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.add("gpf-hidden","GPelementHidden"))})),e.appendChild(t),e.appendChild(i),[e,n,o]},_createShowAdvancedSearchElement:function(){var e=this,t=document.createElement("span");return t.id=this._addUID("GPshowAdvancedSearch"),t.className="GPshowOpen GPshowAdvancedSearch",t.innerText="Recherche avancée",t.setAttribute("tabindex","0"),t.setAttribute("aria-pressed",!1),t.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n);var r="#GPsearchInput-"+e._uid;n?(document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("gpf-visible","gpf-hidden"),document.querySelector(r+" input").disabled=!1,document.querySelector(r+" .GPsearchInputReset")&&(document.querySelector(r+" .GPsearchInputReset").disabled=!1),yu()&&(document.querySelector("#GPshowSearchEnginePicto-"+e._uid).disabled=!1)):(document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("GPelementHidden","GPelementVisible"),document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("gpf-hidden","gpf-visible"),document.querySelector(r+" input").disabled=!0,document.querySelector(r+" .GPsearchInputReset")&&(document.querySelector(r+" .GPsearchInputReset").disabled=!0),yu()&&(document.querySelector("#GPshowSearchEnginePicto-"+e._uid).disabled=!0)),document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(e._addUID("GPcoordinateSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPcoordinateSearchPanel")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(e._addUID("GPshowSearchByCoordinate")).setAttribute("aria-pressed",!1)})),t},_createShowGeolocateElement:function(){var e=this,t=document.createElement("button");return t.id=this._addUID("GPshowGeolocate"),t.className="GPshowOpen GPshowAdvancedToolPicto GPshowGeolocate gpf-btn gpf-btn-icon-search-geolocate fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w",t.title="Activer la géolocalisation",t.setAttribute("tabindex","0"),t.setAttribute("aria-pressed",!1),t.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowSearchGeolocateClick(t)})),t},_createShowSearchByCoordinateElement:function(){var e=this,t=document.createElement("button");return t.id=this._addUID("GPshowSearchByCoordinate"),t.className="GPshowOpen GPshowAdvancedToolPicto GPshowSearchByCoordinate gpf-btn gpf-btn-icon-search-coordinate fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w",t.title="Ouvrir la recherche par coordonnées",t.setAttribute("tabindex","0"),t.setAttribute("aria-pressed",!1),t.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n);var r="#GPsearchInput-"+e._uid;n?(document.getElementById(e._addUID("GPcoordinateSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPcoordinateSearchPanel")).classList.replace("gpf-visible","gpf-hidden"),document.querySelector(r+" input").disabled=!1,document.querySelector(r+" .GPsearchInputReset").disabled=!1,yu()&&(document.querySelector("#GPshowSearchEnginePicto-"+e._uid).disabled=!1)):(document.getElementById(e._addUID("GPcoordinateSearchPanel")).classList.replace("GPelementHidden","GPelementVisible"),document.getElementById(e._addUID("GPcoordinateSearchPanel")).classList.replace("gpf-hidden","gpf-visible"),document.querySelector(r+" input").disabled=!0,document.querySelector(r+" .GPsearchInputReset").disabled=!0,yu()&&(document.querySelector("#GPshowSearchEnginePicto-"+e._uid).disabled=!0)),document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(e._addUID("GPshowAdvancedSearch")).setAttribute("aria-pressed",!1)})),t},_createAdvancedSearchPanelElement:function(){var e=document.createElement("dialog");return e.id=this._addUID("GPadvancedSearchPanel"),e.className="GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal",e},_createAdvancedSearchPanelDivElement:function(){var e=document.createElement("div");return e.className="gpf-panel__body fr-modal__body",e},_createGeocodeResultsElement:function(){var e=document.createElement("dialog");return e.id=this._addUID("GPgeocodeResultsList"),e.className="GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal",e.appendChild(this._createGeocodeResultsHeaderElement()),e},_createGeocodeResultsDivElement:function(){var e=document.createElement("div");return e.className="gpf-panel__body fr-modal__body",e},_createAutoCompleteElement:function(){var e=document.createElement("div");return e.id=this._addUID("GPautoCompleteList"),e.className="GPautoCompleteList GPelementHidden gpf-panel fr-modal gpf-hidden ",e},_createCoordinateSearchPanelElement:function(){var e=document.createElement("dialog");return e.id=this._addUID("GPcoordinateSearchPanel"),e.className="GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal",e},_createCoordinateSearchPanelDivElement:function(){var e=document.createElement("div");return e.className="gpf-panel__body fr-modal__body",e},_createAutoCompleteListElement:function(){var e=this,t=document.createElement("div");return t.id=this._addUID("GPautocompleteResults"),t.className="",t.addEventListener?t.addEventListener("click",(function(t){document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden")}),!1):t.attachEvent&&t.attachEvent("onclick",(function(t){document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden")})),t},_createAutoCompletedLocationContainer:function(){var e=document.createElement("div");return e.id=this._addUID("GPautocompleteResultsLocation"),e.className="GPelementHidden gpf-hidden gpf-select",e.size=20,e.autofocus=!0,e},_createAutoCompletedLocationTitleElement:function(){var e=document.getElementById(this._addUID("GPautocompleteResultsLocation")),t=document.createElement("p");t.className="GPlabel GPlabelTitle gpf-label fr-label",t.innerHTML="Lieux et adresses",e.appendChild(t)},_createAutoCompletedLocationElement:function(e,t){var n=this,r=document.getElementById(this._addUID("GPautocompleteResultsLocation")),i=document.createElement("p");i.id=this._addUID("AutoCompletedLocation_"+t),i.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine";var o=Nh.getSuggestedLocationFreeform(e);i.innerHTML=o,i.title=o,i.addEventListener?i.addEventListener("click",(function(e){n.onAutoCompletedResultsItemClick(e)}),!1):i.attachEvent&&i.attachEvent("onclick",(function(e){n.onAutoCompletedResultsItemClick(e)})),r.appendChild(i)},_createSearchedSuggestContainer:function(){var e=document.createElement("div");return e.id=this._addUID("GPautocompleteResultsSuggest"),e.className="GPelementHidden gpf-hidden gpf-select",e.size=6,e.autofocus=!0,e},_createSearchedSuggestTitleElement:function(){var e=document.getElementById(this._addUID("GPautocompleteResultsSuggest")),t=document.createElement("p");t.className="GPlabel GPlabelTitle gpf-label fr-label",t.innerHTML="Cartes et données",e.appendChild(t)},_createSearchedSuggestElement:function(e,t){var n=this,r=document.getElementById(this._addUID("GPautocompleteResultsSuggest")),i=document.createElement("p");i.id=this._addUID("AutoCompletedSuggest_"+t),i.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine",i.innerHTML=e.title+" ("+e.service+")",i.dataset.layer=e.name,i.title="".concat(e.description," (nom technique : ").concat(e.name,")"),i.addEventListener?i.addEventListener("click",(function(e){n.onSearchedResultsItemClick(e)}),!1):i.attachEvent&&i.attachEvent("onclick",(function(e){n.onSearchedResultsItemClick(e)})),r.appendChild(i)},_createAdvancedSearchPanelHeaderElement:function(){var e=this,t=document.createElement("div");t.className="GPpanelHeader gpf-panel__header fr-modal__header";var n=document.createElement("div");n.className="GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w",n.innerHTML="Recherche avancée",t.appendChild(n);var r=document.createElement("button");r.id=this._addUID("GPadvancedSearchClose"),r.className="GPpanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w",r.title="Fermer la recherche avancée",r.addEventListener?r.addEventListener("click",(function(){var t="#GPsearchInput-"+e._uid;document.querySelector(t+" input").disabled=!1,document.querySelector(t+" .GPsearchInputReset")&&(document.querySelector(t+" .GPsearchInputReset").disabled=!1),yu()&&(document.querySelector("#GPshowSearchEnginePicto-"+e._uid).disabled=!1),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(e._addUID("GPshowAdvancedSearch")).setAttribute("aria-pressed",!1),document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("gpf-visible","gpf-hidden")}),!1):r.attachEvent&&r.attachEvent("onclick",(function(){var t="#GPsearchInput-"+e._uid;document.querySelector(t+" input").disabled=!1,document.querySelector(t+" .GPsearchInputReset")&&(document.querySelector(t+" .GPsearchInputReset").disabled=!1),yu()&&(document.querySelector("#GPshowSearchEnginePicto-"+e._uid).disabled=!1),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(e._addUID("GPshowAdvancedSearch")).setAttribute("aria-pressed",!1),document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPadvancedSearchPanel")).classList.replace("gpf-visible","gpf-hidden")}));var i=document.createElement("span");return i.className="GPelementHidden gpf-visible",i.innerText="Fermer",r.appendChild(i),t.appendChild(r),t},_createAdvancedSearchPanelFormElement:function(e){var t=this,n=document.createElement("form");n.id=this._addUID("GPadvancedSearchForm"),n.className="gpf-panel__content fr-modal__content",n.addEventListener("submit",(function(e){e.preventDefault();for(var n=[],r="#GPadvancedSearchFilters-"+t._uid,i=document.querySelectorAll(r+" > div > div > input,select#category"),o=0;o\n \n \n \n \n \n \n \n \n \n \n
\n ',e},_setCoordinateSearchLatLabelElement:function(e){document.getElementById(this._addUID("GPcoordinateSearchLatLabel"))&&document.getElementById(this._addUID("GPcoordinateSearchLatLabel")).remove();var t=document.createElement("label");return t.className="GPcoordinateSearchLabel gpf-label fr-label",t.id=this._addUID("GPcoordinateSearchLatLabel"),t.htmlFor="coordinate-lat",t.innerHTML="Geographical"===e?"Latitude :":"X :",t},_setCoordinateSearchLatInputElement:function(e){document.getElementById(this._addUID("GPcoordinateSearchLatInput"))&&document.getElementById(this._addUID("GPcoordinateSearchLatInput")).remove(),document.getElementById(this._addUID("GPcoordinateSearchLatDMS"))&&document.getElementById(this._addUID("GPcoordinateSearchLatDMS")).remove();var t=document.createElement("input");switch(t.id=this._addUID("GPcoordinateSearchLatInput"),t.className="GPcoordinateSearchInput gpf-input fr-input",t.title="Saisir des coordonnées",t.name="coordinate-lat",t.type="number",t.step="any",t.required="",e){case"DMS":return t.title+=" géographiques (en sexa)",t.className="GPelementHidden gpf-hidden",this._setCoordinateSearchLatDMSElement();case"DEC":t.title+=" géographiques (en decimal)",t.min="-180",t.max="180";break;case"M":t.title+=" cartésiennes (en mètre)";break;case"KM":t.title+=" cartésiennes (en kilomètre)"}return t},_setCoordinateSearchLatDMSElement:function(){var e=document.createElement("div");return e.id=this._addUID("GPcoordinateSearchLatDMS"),e.innerHTML='\n
\n \n \n \n \n \n \n \n \n \n \n
\n ',e},_createCoordinateSearchSubmitElement:function(){var e=document.createElement("input");return e.type="submit",e.id=this._addUID("GPcoordinateSearchSubmit"),e.className="GPsubmit gpf-btn gpf-btn-icon-submit fr-btn fr-btn--secondary gpf-btn--secondary",e.value="Chercher",e}};const xy=My;function Gy(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o,a,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,i=e}finally{try{if(!l&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(c)throw i}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Ly(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ly(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ly(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);na&&(By.trace("zoom level max..."),r=a),By.trace("zoom",r),r}},{key:"_onResultMarkerSelect",value:function(e){var t=this.getMap(),r="";if("string"!=typeof e)if("GeocodedLocation"===e.service){r="
    ";var i=e.location.placeAttributes;for(var o in i)i.hasOwnProperty(o)&&"trueGeometry"!==o&&"extraFields"!==o&&"houseNumberInfos"!==o&&"_count"!==o&&(r+="
  • ",r+=''+o.toUpperCase()+" : ",r+=i[o],r+="
  • ");r+="
"}else r="SuggestedLocation"===e.service?Nh.getSuggestedLocationFreeform(e.location):"sans informations.";else r=e;this._popupContent.innerHTML=r,this._popupOverlay?this._popupOverlay.setPosition(this._marker.getPosition()):(this._popupOverlay=new(n())({element:this._popupDiv,positioning:"bottom-center",position:this._marker.getPosition(),offset:[0,-42]}),t.addOverlay(this._popupOverlay))}},{key:"_setSystem",value:function(e){if("object"===ky(e))if(e.crs)if(e.label||(By.warn("crs label not defined, use crs code by default."),e.label=e.crs),e.type||(By.warn("type srs not defined, use 'Metric' by default."),e.type="Metric"),Py.loadByName(e.crs),(0,Dr.get)(e.crs)){for(var t=0;t latitude : "+i[1];e._setMarker(n,o)}e.dispatchEvent({type:"searchengine:geolocation:click",coordinates:n})}}))}},{key:"onShowSearchByCoordinateClick",value:function(){var e=null,t=null;if(this._coordinateSearchLngInput&&"DIV"===this._coordinateSearchLngInput.nodeName&&this._coordinateSearchLatInput&&"DIV"===this._coordinateSearchLatInput.nodeName?(e=this._getCoordinateSearchDMS(this._coordinateSearchLngInput),t=this._getCoordinateSearchDMS(this._coordinateSearchLatInput)):(e=this._coordinateSearchLngInput.value,t=this._coordinateSearchLatInput.value),e&&t){var n=[e,t],r=this.getMap().getView().getProjection().getCode();"EPSG:4326"!==r&&(n=(0,Dr.transform)(n,"EPSG:4326",r)),isNaN(n[0])||isNaN(n[1])?this._setMarker():(this._setPosition(n,10),this._displayMarker&&this._setMarker(n,"sans information"),this.dispatchEvent({type:"searchengine:coordinates:click",coordinates:n}))}}},{key:"_getCoordinateSearchDMS",value:function(e){if(e&&"DIV"===e.nodeName){var t=e.querySelectorAll("[name]");if(t){var n=Oh.toInteger(t[0].value),r=Oh.toInteger(t[1].value),i=Oh.toInteger(t[2].value),o=t[3].options[t[3].selectedIndex].text;if(!(n&&r&&i&&o))return;return Oh.dmsToDecimal(n,r,i,o)}}}},{key:"onAutoCompleteInputClick",value:function(){var e=document.getElementById("GPsearchInputText-"+this._uid);e&&!e.disabled&&e.value.length>2&&this._displaySuggestedLocation()}},{key:"onAutoCompleteSearchText",value:function(e){var t=e.target.value;if(t)if(this._currentGeocodingLocation=t,t.length<3)this._clearSuggestedLocation();else{var n=this.options.autocompleteOptions.triggerGeocode,r=this.options.autocompleteOptions.triggerDelay,i=this.options.autocompleteOptions.maximumEntries,o=this.options.autocompleteOptions.prettifyResults,a=this;this._requestAutoComplete({text:t,onSuccess:function(e){if(By.log("request from AutoComplete",e),e){a._suggestedLocations=e.suggestedLocations,a._locationsToBeDisplayed=[];for(var t=0;t=0;t--){var n=e[t];("StreetAddress"===n.type&&"municipality"===n.kind||"PositionOfInterest"===n.type&&"lieu-dit habité"===n.poiType[0]&&"zone d'habitation"===n.poiType[1])&&e.splice(t,1),"PositionOfInterest"!==n.type||"administratif"!==n.poiType[0]||"département"!==n.poiType[1]&&"région"!==n.poiType[1]||(n.fullText=n.fullText+", "+n.poiType[1])}}},{key:"_hideSuggestedLocation",value:function(){this._autocompleteContainer&&(this._autocompleteContainer.classList.replace("GPelementVisible","GPelementHidden"),this._autocompleteContainer.classList.replace("gpf-visible","gpf-hidden"))}},{key:"_displaySuggestedLocation",value:function(){this._autocompleteContainer&&(this._autocompleteContainer.classList.replace("GPelementHidden","GPelementVisible"),this._autocompleteContainer.classList.replace("gpf-hidden","gpf-visible"))}},{key:"_clearGeocodedLocation",value:function(){if(this._geocodedLocations=[],this._geocodedContainer)for(;this._geocodedContainer.firstChild;)this._geocodedContainer.removeChild(this._geocodedContainer.firstChild)}}],i&&Ty(r.prototype,i),o&&Ty(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,i,o}(Gu);Object.assign(Fy.prototype,xy),Object.assign(Fy.prototype,gu);const zy=Fy;function Vy(e){return Vy="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vy(e)}window.ol&&window.ol.control&&(window.ol.control.SearchEngine=Fy);var qy={_addUID:function(e){return this._uid?e+"-"+this._uid:e},_createMainContainerElement:function(){var e=document.createElement("div");return e.id=this._addUID("GPmousePosition"),e.className="GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen",e},_createShowMousePositionPictoElement:function(e){var t=this,n=document.createElement("button"),r=document.createElement("span");return n.appendChild(r),n.id=this._addUID("GPshowMousePositionPicto"),n.className="GPshowOpen GPshowAdvancedToolPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-position fr-btn fr-btn--tertiary",n.setAttribute("aria-label","Afficher les coordonnées du curseur"),n.setAttribute("tabindex","0"),n.setAttribute("aria-pressed",!1),n.setAttribute("type","button"),n.addEventListener?n.addEventListener("click",(function(e){var n="true"===e.target.ariaPressed;e.target.setAttribute("aria-pressed",!n),t.onShowMousePositionClick(e)})):n.attachEvent&&n.attachEvent("onclick",(function(e){var n="true"===e.target.ariaPressed;e.target.setAttribute("aria-pressed",!n),t.onShowMousePositionClick(e)})),n},_createMousePositionPanelElement:function(){var e=document.createElement("dialog");return e.id=this._addUID("GPmousePositionPanel"),e.className="GPpanel gpf-panel fr-modal",e},_createMousePositionPanelDivElement:function(){var e=document.createElement("div");return e.className="gpf-panel__body fr-modal__body",e},_createMapCenter:function(){var e=document.createElement("div");return e.id="GPmapCenter",e.className="",e},_createMousePositionPanelTitleElement:function(){var e=document.createElement("div");return e.className="GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w",e.id=this._addUID("GPmousePositionHeaderTitle"),e.innerHTML="Coordonnées",e},_createMousePositionPanelHeaderElement:function(){var e=document.createElement("div");return e.className="GPpanelHeader gpf-panel__header fr-modal__header",e},_createMousePositionPanelCloseElement:function(){var e=this,t=document.createElement("button");t.id=this._addUID("GPmousePositionPanelClose"),t.className="GPpanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w",t.title="Fermer le panneau",t.addEventListener?(t.addEventListener("click",(function(){document.getElementById(e._addUID("GPshowMousePositionPicto")).click()}),!1),t.addEventListener("keydown",(function(t){13===t.keyCode&&document.getElementById(e._addUID("GPshowMousePositionPicto")).click()}),!1)):t.attachEvent&&(t.attachEvent("onclick",(function(){document.getElementById(e._addUID("GPshowMousePositionPicto")).click()})),t.attachEvent("onkeydown",(function(t){13===t.keyCode&&document.getElementById(e._addUID("GPshowMousePositionPicto")).click()})));var n=document.createElement("span");return n.className="GPelementHidden gpf-visible",n.innerText="Fermer",t.appendChild(n),t},_createMousePositionPanelBasicElement:function(e,t,n,r){e=void 0===e||e,t=void 0===t||t,n=void 0!==n&&n;var i=document.createElement("div");return i.id=this._addUID("GPmousePositionBasicPanel"),i.classList.add("fr-mx-1w"),i.appendChild(this._createMousePositionPanelBasicCoordinateElement(t,n,r)),i.appendChild(this._createMousePositionPanelEditToolsElement(n)),i.appendChild(this._createMousePositionPanelBasicAltitudeElement(e)),i},_createCoordinateElement:function(e,t){var n=this;if(-1===["Lon","Lat"].indexOf(e))return[];var r=[],i=document.createElement("input");i.id=this._addUID("GPmousePosition"+e),i.title=!0===t?"Cliquer pour saisir des coordonnées":"",i.readOnly=!0,t&&(i.addEventListener("click",(function(){n.onMousePositionEditModeClick(!0)})),i.addEventListener("change",(function(t){this.classList.remove("error"),n.validateExtentCoordinate(e,this.value,t)?this.classList.remove("error"):this.classList.add("error")}))),r.push(i);var o=document.createElement("span");return o.className="GPmousePositionUnits",r.push(o),r},_createDMSCoordinateElement:function(e,t){if(-1===["Lon","Lat"].indexOf(e))return[];var n=this,r=[],i=document.createElement("input");i.id=this._addUID("GPmousePosition"+e+"Degrees"),i.className="GPSexagesimal",i.setAttribute("name","degrees"),i.title=!0===t?"Cliquer pour saisir des coordonnées":"",i.readOnly=!0,i.dataset.min=0,i.dataset.max="Lon"===e?180:90,t&&(i.addEventListener("click",(function(){n.onMousePositionEditModeClick(!0)})),i.addEventListener("change",(function(){this.classList.remove("error"),n._checkDMSDegrees(e,this)?this.classList.remove("error"):this.classList.add("error")}))),r.push(i);var o=document.createElement("span");o.className="GPmousePositionSexagesimalLabel",o.innerHTML="°",r.push(o);var a=document.createElement("input");a.id=this._addUID("GPmousePosition"+e+"Minutes"),a.className="GPSexagesimal",a.setAttribute("name","minutes"),a.title=!0===t?"Cliquer pour saisir des coordonnées":"",a.readOnly=!0,a.dataset.min=0,a.dataset.max=59,t&&(a.addEventListener("click",(function(){n.onMousePositionEditModeClick(!0)})),a.addEventListener("change",(function(){this.classList.remove("error"),n._checkDMSElement(this)?this.classList.remove("error"):this.classList.add("error")}))),r.push(a);var s=document.createElement("span");s.className="GPmousePositionSexagesimalLabel",s.innerHTML="'",r.push(s);var l=document.createElement("input");l.id=this._addUID("GPmousePosition"+e+"Seconds"),l.className="GPSexagesimalsec",l.setAttribute("name","seconds"),l.title=!0===t?"Cliquer pour saisir des coordonnées":"",l.readOnly=!0,l.dataset.min=0,l.dataset.max=59,t&&(l.addEventListener("click",(function(){n.onMousePositionEditModeClick(!0)})),l.addEventListener("change",(function(){this.classList.remove("error"),n._checkDMSElement(this,!0)?this.classList.remove("error"):this.classList.add("error")}))),r.push(l);var c=document.createElement("span");c.className="GPmousePositionSexagesimalLabel",c.innerHTML="''",r.push(c);var u=document.createElement("select");u.id=this._addUID("GPmousePosition"+e+"Direction"),u.className="GPmousePositionDirection",u.setAttribute("name","direction"),u.disabled=!0;var d=document.createElement("option");d.value="Lon"===e?"E":"N",d.innerHTML="Lon"===e?"E":"N",u.appendChild(d);var p=document.createElement("option");return p.value="Lon"===e?"O":"S",p.innerHTML="Lon"===e?"O":"S",u.appendChild(p),r.push(u),r},_createMousePositionPanelBasicCoordinateElement:function(e,t,n){var r=document.createElement("div");r.id=this._addUID("GPmousePositionCoordinate"),r.style.display=e?"block":"none";var i=document.createElement("div");i.classList.add("fr-mb-1w");var o=document.createElement("span");o.className="GPmousePositionLabel",o.id=this._addUID("GPmousePositionLatLabel"),o.innerHTML="Latitude : ",i.appendChild(o);var a,s=document.createElement("span");s.id=this._addUID("GPmousePositionLatCoordinate"),a="DMS"===n?this._createDMSCoordinateElement("Lat",t):this._createCoordinateElement("Lat",t);for(var l=0;l=o&&i<=a},_checkDMSDegrees:function(e,t){if(isNaN(t.value))return!1;var n=parseFloat(t.value);if((0|n)!==n)return!1;var r=Number(t.dataset.min),i=Number(t.dataset.max);if(ni)return!1;var o=document.getElementById(this._addUID("GPmousePosition"+e+"Minutes")),a=document.getElementById(this._addUID("GPmousePosition"+e+"Seconds"));return n>=i?(o.dataset.max=0,a.dataset.max=0):(o.dataset.max=59,a.dataset.max=59.9999),!0},GPdisplayCoords:function(e){if(e){var t=document.getElementById(this._addUID("GPmousePositionLonLabel")),n=document.getElementById(this._addUID("GPmousePositionLatLabel"));if(e.x||e.y?(n.innerHTML="X : ",t.innerHTML="Y : "):e.e||e.n?(n.innerHTML="E : ",t.innerHTML="N : "):(n.innerHTML="Latitude : ",t.innerHTML="Longitude : "),"object"===Vy(e.lat)&&"object"===Vy(e.lng)){var r={lng:"Lon",lat:"Lat"},i=["Degrees","Minutes","Seconds"];for(var o in r)for(var a=0;aNumber(t.dataset.max))return null;var i=document.getElementById(this._addUID("GPmousePosition"+e+"Direction")).value,o=document.getElementById(this._addUID("GPmousePosition"+e+"Minutes")),a=o.value;if(a&&(a=a.replace(",","."),Oh.isInteger(a))){var s=Oh.toInteger(a);s>=Number(o.dataset.min)&&s<=Number(o.dataset.max)&&(r+=s/60)}var l=document.getElementById(this._addUID("GPmousePosition"+e+"Seconds")),c=l.value;if(c){c=c.replace(",",".");var u=Oh.toFloat(c);u&&u>=Number(l.dataset.min)&&u<=Number(l.dataset.max)&&(r+=u/3600)}return"O"!==i&&"S"!==i||(r=-r),r}},{key:"locateDMSCoordinates",value:function(){var e=[this.getCoordinate("Lon"),this.getCoordinate("Lat")];if(null!==e[0]&&null!==e[1]){var t=this._currentProjectionSystems.crs;if(t){var n=this.getMap().getView(),r=(0,Dr.transform)(e,t,n.getProjection());n.setCenter(r),this._markerOverlay&&!this._hideMarker&&this._markerOverlay.setPosition(r)}else ev.log("ERROR : system crs not found")}}},{key:"locateCoordinates",value:function(){var e=document.getElementById(this._addUID("GPmousePositionLon")).value;if(e=e.replace(",","."),null!==(e=Oh.toFloat(e))){var t=document.getElementById(this._addUID("GPmousePositionLat")).value;if(t=t.replace(",","."),null!==(t=Oh.toFloat(t))){var n=this._currentProjectionSystems.crs;if(n){var r;r="Geographical"===this._currentProjectionSystems.type?[this.convert(e),this.convert(t)]:[this.convert(t),this.convert(e)];var i=(0,Dr.transform)(r,this._currentProjectionSystems.crs,"EPSG:4326"),o=this._currentProjectionSystems.geoBBox;if(o){var a=[o.left,o.bottom,o.right,o.top];if(i[0]a[2])return;if(i[1]a[3])return}var s=this.getMap().getView(),l=(0,Dr.transform)(r,n,s.getProjection());s.setCenter(l),this._markerOverlay&&!this._hideMarker&&this._markerOverlay.setPosition(l)}else ev.log("ERROR : system crs not found")}}}},{key:"onMousePositionEditModeLocateClick",value:function(){if(this.options.editCoordinates)if(this.editing){"DMS"===this._currentProjectionUnits?this.locateDMSCoordinates():this.locateCoordinates();var e=this.options.mapCenterCallback;if("function"==typeof e){var t=this.getMap().getView().getCenter();e.call(this,t)}}else this.onMousePositionEditModeClick(!0)}},{key:"onMousePositionProjectionSystemChange",value:function(e){var t=e.target.selectedIndex,n=e.target.options[t].value;this._setCurrentSystem(n)}},{key:"_setCurrentSystem",value:function(e){for(var t=null,n=0;ns.geoBBox.right||i[1]>s.geoBBox.top||i[2]i[2])||"Lon"===e&&(ni[3]))}}],i&&Yy(r.prototype,i),o&&Yy(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,i,o}(Gu);Object.assign(tv.prototype,Hy),Object.assign(tv.prototype,gu);const nv=tv;window.ol&&window.ol.control&&(window.ol.control.GeoportalMousePosition=tv);const rv=ol.Collection;var iv=__webpack_require__.n(rv);const ov=ol.geom,av=ol.events.condition,sv=ol.sphere;const lv={drawing_portail:[{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAClFBMVEUAAAD//////////////////////////////////////////////////////////fv/+fL//////////////////////////////////////////////////////////////////////////////////////v7//////fr/////+vL//////////////////Pj//////////////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7/////////////9+v/9ej/9+z/7tT/3q3/y3//v2D/uU//+O7/5L3/xW//piH/mQH/mAD//v7/79f/yXj/oxr/lwD/mQD//fv/58T/tkr/mQL//v3/58P/sTz/79b/tUf/x3X/mQP/5Lv/oRX/ng3/s0H/w2n/u1b/4rf/8Nr/9eb/7tX/pBv/x3P/8d7/3av/79j///7/zH//mgX/2qP//vz/9+3/wGH/qyz/6Mb/vFj/sj//7NH/wGL/rTP/6sr/+fH/yXf/oBP/37H/2aH/6sz/nw//oBT/0pD/+vT/9OX/uE7/pB3/y33/7ND//Pj/26b/mwj/nAn/sT7/w2r/zYL/8+P/ulT/mwb/5Lz/qCj/+/b/1JT/nQz/nQ3/9uj/w2j/mAH/9un/6sv/skH/lwH/3Kf/pB7/pR7/3Kj/nAj/y37/+/f/8t//mQT/rDD/rDH/1JX/7tb/4LT/pR//z4j/z4n/vFn/7dP/4rn//fq31ydlAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKnVAysoAAAMmSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oBAMCvLzcnOSJcTFGGHyklJFxSWlZYWF5WBQWFhWWlJcJCUJUcEoLSNbUVlVDZWFqqmuqqyQlZEGqZCTV6iprStDkQeqKKurrVGQlwMawMWTXN+ALg9S0VCfzMPFyCAorpjW2ASzvQwIYOymxjRFcUEGLqWa5pZCqONa27Ky2lqhji1saa5R4mJQVklpL4M6rKOzq7u7q7MD6uCy9hQVZQZVtZ5eML+woK+/KBkIivr7CiAivT1qqgzqGhPA3MKy7ImTksFg0sRssEMKCyZoqDNoak2GKJ8ydVoyFEybOgUiNllLk0F7+gwwp2zmrGQ4mDUT7KzCGdO1GZJTZkMUzJmLUDB3DkTB7JRkBp3p8yAK5i9AKFgwH6Jg3nQdBt2FiyD2LV5SBJMvWrIYIrZooS6Dnv5SCKesPQ2mIK0dEpyFS/X1GAwMly2H8FasXAWRX7VyBURk+TJDAwYj49VroAG3dt16oC1F69ethQbtmtXGRgwmphs2boKq2Lxl67ZtW7dshspv2rjB1ITBzFxn+44yeGTu3AmPzrId23XMzRg4LSwrdu2GJQdQkoQxd++qsLTgZGC0MrLes3cfZoLZv3ePtZEVMM0x2tjqHDh4CD3JHdp62M7eBpxqOR0cnY4cPYaaaI8dPeLk7MAJSfZyLq4Vx08UIqkoLDx5qsLNRQ6WMQTdPfasO42sYPOZsx6eiKzF6eXtc27HebiKwvM7zvl4e3EiZU5fv+TcC4icdTFX1M8XNXv7yyZfaoEpaLmULBuAIs/AEGivsrAd4ozCze0LVYICUeUZGIND+C63gTJQYVNbMV9oMJoBQBVh4clXroKC+uqV5PAIDHmgCsnIimv7Cgv3Xa+IlMQiDwzyqOiUG1Om3EiJjrLBpgDojBi7mxcu3LSLCcYqD1QRGzft1q1pcbE45IExH59w+3ZCvBUuBUBnJCYlJaI6AABB269xUXFElwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDM6MjIrMDA6MDB1WI3HAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACplBMVEUAAAD//////////////////////////////////////////////////////////fz/9/P//////////////////////////////////////////////////////////////////////////////////////v7//////Pr/////////////////////+/n//////////////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7/////////////8+3/8er/9O7/5dj/zrX/s4z/oHH/lmL/9fD/2MT/qX7/ejj/Zxz/Zhn/Zhr//v7/59z/rof/djL/ZBf/Zxv//fz/3Mr/k13/aBz/ZRn//f3/i1D/5tr/kVr/ZRj/rIP//v3/1sL/cy3/byf/jVX/pnn/aB3/mmf/077/6d7/8On/5tn/dzT/q4H/6+H/zbP/lmH/s43/ah//yK3/9O//oXL/gUP/3cz/m2n/jVT/5Nb/onP/hkn/4ND/9vL/rob/cSv/0Ln/x6r/Zxr/Yxb/pXn/8+7/4NH/cCj/ciz/vZz/+PX/7+f/lWH/eDT/sov/49X/+/n/ya//ayH/bCP/jFL/pnr/tJD/7ub/mWb/ZBb/aiD/18P/fj3/+vf/vp//bSX/bib/v5//pXj/8uv/yrD/eDX/eTb/y7H/bCL/soz/7OL/18T/g0b/hEb/v6D/cy7/wKH/9vP/5tv/jlX/59v/0rz/ejf/uJX/nGr/aR//nGv/g0X/1cD//PvyoJNrAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAA0JJREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/oBAICvLzcnOykyTExRhh8pJSRcUlpWWFheVgUFhYVlpSXCQlCVHBKC0jW1FZVV1TjgRqqqsqK2RlpEEq5OQVaivrygrLUUBhWV1lrYK8HNAALp6k+oZGNHmgisaG+iQeLkYGQXHF1KZ8mO2NZWUwtYX5TamK4oIMXErNLa0FEKGatvbMzPa2GoiSgtaWZiUuBmWV5I5GiHxnV3dPb29Pd1cnREVjR7KKMoOqWl9/IcTICROLkoCgaOIEiJWF/X1qqgzqGpPA3MKyycVgeaCK4slgTxXmT9JQZ9AUmAJRPnVaRRIUVEybChGbIqDJoDV9BpjTOHNWEhzMmgl2VuGM6VoMScmzwQrK5sxFKJg7pwysYHZyEoP29HkQE+YvQChYMB9iwrzp2gw6CxeBFRQsXlIEky9ashgcMoWLFuow6OotBXOWLV+xEqZg5Yrly8CalurpMugbrFoNMWLN2nUQ+XVr10AMWL3KQJ/B0Gj9BkhINm7ctBkkv3nTRqjAhvVGhgzGJlu2boMG7fYdO3ft2rljOzTot23dYmLMYGqmvXvPXmgE7i3bt69sLzQ69+7ZrW1mysBpblGx/0AjLLGBAITdeGB/hYU5JwOjpaHVwUOHMRPMkaMHrQwtgWmO0dpGO+VYAXqSK+g4bmtnDU61nPYOjgvaURNdYWP7Kkcne05Ispdzdqk4cbIGSUVhzanTFa7OcrCMIejmfnDTmQKEgoIzZw+6eyCyFqenl/e5PeVwIwrL95zz9vLkRMqcPr5J5y/AHFpYcPG8qK8Pavb2k026dBkaGo2XryTJ+qPIMzAE2KlcXbEN7IyCbR1XVQIDUOUZGIOC+a61VwMtKay+foMvJAjNAKCK0LCkm7dAIX3rZlJYOIY8UIVkRMXtI4WFR25XREhikQcGeWRU8p27d+8lR0VaY1MAdEa0bdr9+2m20UFY5YEqYmJrHzyojY3BIQ+M+bj4hw/j4yxxKQA6IyExMQHVAQBpWLIaKI0lIgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDQ6MDYrMDA6MDAh7rXQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACbVBMVEUAAAD/////////////////////////////////////////////////////////+/v/8vL//////////////////////////////////////////////////////////////////////////////////////v7/////+vr/////////////////////+Pj//////////////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7/////////////6+v/6Oj/7Oz/1NT/ra3/f3//YGD/T0//7u7/vb3/b2//ISH/AQH/AAD//v7/19f/eHj/Ghr/+/v/xMT/Skr/AgL//f3/w8P/PDz/1tb/R0f/dXX/AwP/u7v/FRX/DQ3/QUH/aWn/Vlb/t7f/2tr/5ub/1dX/Gxv/c3P/3t7/q6v/2Nj/BQX/o6P//Pz/7e3/YWH/LCz/xsb/WFj/Pz//0dH/YmL/MzP/ysr/8fH/d3f/ExP/sbH/oaH/zMz/Dw//FBT/kJD/9PT/5eX/Tk7/HR3/fX3/0ND/+Pj/pqb/CAj/CQn/Pj7/amr/goL/4+P/VFT/Bgb/vLz/KCj/9vb/lJT/DAz/aGj/6en/y8v/p6f/Hh7/qKj/fn7/9/f/39//BAT/MDD/MTH/lZX/tLT/Hx//iIj/iYn/WVn/09P/ubn/+vpgzcAPAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAu1JREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSUFSKCkuKhQShKiglFaRra0rLyiAAVUlJeVyspIg1TIyStUVlUXYIDqqkoFeTmgAVw8STW1BVhAbU0SDxcjg6C4YmpdPTYF9XWpiuKCDFxKlQ2NMLGm5szM5iYYr7GhUomLQVkluQXmsNa29o6O9rZWmINbklWUGVTVOrug3u/uKUwCgsKebmiAdHWqqTKoa/RCuVl9YHmgir4sqJZeDXUGTYEMCK9/wsQkKJg4oR8iliGgyaA1aTKEM2VqEhxMnQIRmzxJiyEpeRqEM30GQsGM6RCxaclJDNqTZkI4s2YjFMyeBRGbOUmbQWfOXAhn3vxCmHzh/HkQsblzdBh09RbAfJ0KU5AKC5kFeroM+gYLF0F4i5cshcgvXbIYIrJooYE+g6HRsuVQ9StWrgLaUrhq5QqowPJlRoYMxiar16yFCqxbv2Hjxg3r10G5a9esNjFmMDXT3rQZEYVbtiDYmzdpm5kycJpblG7dhi26t20ttTDnZGC0NLTavmMnpnzTju1WhpbANMdobaOdsisfXT5/w25bO2twquW0d3Dc04ymIr95j6OTPSck2cs5u5Tu3YeqYN/+UldnOVjGEHRz375yLbL8ugMH3T0QWYvT08v70ObDCPnDmw95e3lyImVOH9+knCMIBUdzRH19ULO3n2zSMXjibjyWJOuPIs/AEGCnMqcF6ox1LXNUAgNQ5RkYg4L5aprBGai+uYgvJAjNAKCK0LCk4ydACk4cTwoLx5AHqpCMKD0JDPKdp0ojJLHIA4M8Mir5dH//6eSoSGtsCoDOiLY9c+TIGdvoIKzyQBUxsRPPnp0YG4NDHhjzcfHnzsXHWeJSAHRGQmJiAqoDAOgCnVLAYqeOAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo0NDoxOSswMDowMBsMxacAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACf1BMVEUAAAD//////////////////////////////////////////////////////////P3/9Pn//////////////////////////////////////////////////////////////////////////////////////v7/////+/3/////9fr/////////////////+vz//////////////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7/////////////7/f/7PX/8Pf/3O7/vd7/mcv/gL//c7n/8fj/yuT/jMX/Tab/NJn/MZj/Mpj//v7/3+//k8n/R6P/L5f/M5n//P3/0Of/brb//f7/z+f/Y7H/MJf/bLX/kcf/yeT/Q6H/PZ7/ZrP/h8P/d7v/xeL/4fD/6/X/3e7/SaT/j8f/5PH/u93/crn//v//mMz/N5r/tdr/gcD/Vqv/0ej/ebz/ZrL/2uz/gsD/XK3/1er/8/n/ksn/QaD/wN//tNn/1ur/P5//QqD/ptL/9vr/6vT/cbj/l8v/+vz/t9v/OJv/Opz/ZLH/iMP/m83/6fP/d7r/N5v/Uqj/Mpn/+Pv/qdT/PJ3/7fb/Z7L/uNz/SqT/S6X/udz/OZz/mMv/5fL/drr/Waz/Wqz/qtT/RKH/q9T/9Pn/3u7/Z7P/w+D/TKX/oM//PZ3/erz/Npr/3O3/x+L/+/0F2pMDAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAM4SURBVDjLdZNnWxNBFIVnEZGEGpBeROkSuoIUwS4KFkTFQp+wFEWzk+AmEFhEDBZQlA5ioxcRsCDYELADSvlBbnY2kACeTztz3r1znztnAOBEEAYbDDcabTKG0HiT0UbDDQYEAXRECIQmpmbmFpaS7GyJpYW5mamJUKBDECIr6802ZE5uXv6lS/l5uTmkzWZrK9EyQdja2cPLBVeuSinEipJevVJwGdrb2RJa38FRJi+8RiOk4IQQfa1QLnN0wATh5OyiLCqWUgodUdLiIqWLs5OGcN3ipiopZZBCT4gpLVG5bXFlCwhNobxsta8hyuTQVEgAkd1W8rpUezrDSvstvU5utRMB4TZV+Q18PqIqbubn36ygMELdKFdtEwJ3D4ma4X+pvHX7zp3btyr5goxa4uEOPL3uViHsV9+TQVaye9WYQFV3vTyBt899bomYGvkDyOmBvIZrBEnv+3gD3+0PMV5bp4K8VHW1eO/hdl/gR9ZzC6ahES6rsYFrC9WTfgBKmjiAbm5ZAVqaaQ5okkAgJltxhUdtK0DbI1yhlRQD/8dPOIB6+kym9WXPnnKTQU8e+4OAwOe4IVpNagFSTeO954EBICi4vQOvOru6sd/d1Yl3OtqDg0BIaE8vnjRT1dfCniJr6avCo6V6e0JDwI6d/QMv+NEOvhwaHh56OciP/sVA/84dICxcPPKK5i+Qpl+/pmn+OulXI+LwMCDYFaEsf8PH6a0mk2/5UL0pV0bsEgAiMiRq9N3Y2sCMvRuNColkM0dE7xaPq6nVkaPU4zGx0VxqBXv27mtr1g8dYt637du/R4Bj73rgoPLDR90aiPr0WXnogKv2YYgOx432Tejknhr8Mhp3ZOVpCY7GJ0xOKZZLIMXUZEL8UYHO4zx2HBZMaw9B1NcCm+PH9J/3CRf47Tt/CPX9B3Q5qecDkBjr8VON26Amhn56nErU9wGRdNr8129NfJH0t9z8TNKqAixxNhnOzGpGPTsDk8+t8VnC4bxybgyhP3PK8w7r+OzIL1yU/J2f/yu5eCF6PYBtIyVmYXp6ISYlaV2fJVLTVIuLqrTU//jszadnLC1lpEf+D2DbyMzKytRv4B+n7ayGbXJj1gAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDQ6MjkrMDA6MDCVg8JEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACslBMVEUAAAD////////////////////////////////////////////////////////+/fz79/T////////////////////////////////////////////////////////////////////////////////////+/v7////9/Pv////79/X////////////////9+/r////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////58+/48ez69PDz5dzpzr3cspnUoIDQlXP69PHt18rYqIzDeU27ZjS6ZTG6ZTL+/v7059/brpPCdUe6Yy+7ZjP+/fzv29DOkm67ZzS6ZDH+/f3v28/LiWO6YzD05t/OkGy6ZDDarJH+/v3t1snAckO+bj3MjWbUn4DXpYfRmXfr08X16eH48Ovz5t3CdknZqo/26+TozLvQlXL//v7dspi8aTfmyLXUoIHGgFbv3NHSm3m5Yy/LjGby49rVoYLIhVzx39X79vPbrZK/cEHq0MDmxrS6ZjK5Yi/58/Dx4Na+bz/AcULhvab8+Pb47+rPlHHCd0ncsZf9+/rnybe9aji9azrLi2TXpojdtJv37unt18nFfVK7ZTL8+vjivqm+bTziv6n58e3WpIfWpYfx4NXMjWfnyrjCd0rDeEvoyrm9azncsZj27OXRmHbHg1nIg1rt2Mriv6rAckTjwKv79vS8ajm9ajnXpYj05t7r0sPDeUzfuKC+bT3Sm3q8aTbIglns1cf9/Pua7OXrAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAANISURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oLAICAoL8vNyc5IlxMUYYfKSUsUlpWXlRUUVYFBUVF5WWlIsJQlRwSgtI1tZVV1TW4EEamuqqyplZaRBKuTkFerqGxqLKlBAUWNDfZ2CvBzQAC6e5KbmFjR5oIqW5qZkHi5GBkFxxbTWApjtLY2NMLVFBa1piuKCDFxKbe0dhRCh2s6u7u6uzlqIksKO9jYlLgZllZSeFoh8TW9f/4QJ/X29NRAVLT0pKsoMqmoTJxVBjJw8pTgZCIqnTIZYWTRpopoqg7rGVDC3qHFayfRkMJheMg3sqaKCqRrqDJpaMyDKZ86qS4aCulkzIWIztDQZtNNmgzktc+Ymw8HcOWBnFc1O02ZITpkHVjB/wUKEgoUL5oMVzEtJZtBJWwQxYfEShIIliyEmLErTYdBdugysoHD5imKYfPGK5eCQKVq2VJdBT38lWMGq1T1rYArW9KxeBVawUl+PwcBw7TqIk9dv2AiR37hhPURk3VpDAwYj402bITHdsmXrQqAtxQu3boEEbe3mTcZGDCam27bvgAbtzl279+zZvWsnNOh3bN9masJgZq6zt3c+NALnz585c/58aHTO792rY27GwGlhWblvPzQ5HQClyQPQRLV/X6WlBScDo5WR9cFDhzETzOEjB62NrIBpjtHGVufosUL0JFd4/KidvQ041XI6ODqd6EJNdEUtJ084OTtwQpK9nItr5anTtUgqimrPnK10c5GDZQxBd4+DW88VIhQU7jx/0MMTkbU4vbx9LlysgBtRVHHxgo+3FydS5vT1S869BHNoUeHlK6J+vqjZ2182+eo1aGjUXrueLBuAIs/AEGivcqPnJtgZhbdu31AJCkSVZ2AMDuG7cxKU3otqTpbwhQajGQBUERaefPceKKjv3U0Oj8CQB6qQjKy8f7io6MH9ykhJLPLAII+KTnn46NHDlOgoG2wKgM6IsUt//DjdLiYYqzxQRWxc3ZMndXGxOOSBMR+f8PRpQrwVLgVAZyQmJSWiOgAArqa4BP2YBKMAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjQ0OjQ2KzAwOjAwpaS7KgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAChVBMVEUAAAD//////////////////////////////////////////////////////////vv//fL//////////////////////////////////////////////////////////////////////////////////////v7//////vr//////////////////////vj//////v///////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7//////////////Ov/++j//Oz/+dT/863/7X//6mD/50///O7/9r3/62//4SH/3QH/3AD//v7/+df/7Xj/4Br/3QD//vv/98T/5kr/3QL//v3/98P/5Tz/+db/5kf/7HX/3QP/9rv/4BX/3g3/5UH/6WD/62n/6Fb/9bf/+tr/++b/+dX/4Bv/7HP/+t7///7/86v/+dj/3QX/8qP//vz//O3/6mH/4iz/98b/6Fj/5T//+dH/6mL/4zP/+Mr//fH/7Hf/3xP/9LH/8qH/6mn/+Mz/3g//3xT/8JD//fT/++X/507/4B3/7X3/+ND//vj/86b/3Qj/3gn/5T7/62r/7oL/++P/6FT/3Qb/9rz/4ij//fb/8ZT/3gz//Oj/62j/3AH//On/+Mv/86f/4R7/86j/7n7//vf/+t//3QT/4zD/4zH/8JX/3xX/3gj/9bT/4R//74j/74n/6Fn/+dP/9bn//vrsMn7uAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAxZJREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSVAqVIwADJKiosKpSQhKhilZWTLyisqobJQNZUV5WWyMtIgFXLyClXVNQUo8iBTaqqrFOTlgAZw8STV1qHLg1TU1SbxcDEyCIorptY3IGxHuKShPlVRXJCBS6mqsakAKt3c0tra0gxVUtDUWKXExaCsktwGFahs7+js6ursaIc6uKAtWUWZQVWtuwfML8jv7etPAoL+vt58iEhPt5oqg7rGBDC3oCBrYmESGBROzALbUpA/QUOdQVMgA6J80uQpSVAwZfIkiFiGgCaD1tRpEM70GUlwMGM6RGzaVC2GpOSZEM6s2QgFs2dBxGYmJzFoT50D4cydh1Awby5EbM5UbQad+QsgnIWLCmHyhYsWQsQWzNdh0NVbDPX1klSYgtQlUKHFeroM+gZLl0GUL1+xEiK/csVyiMiypQb6DIZGq1ZD1a9Zuw5oS+G6tWugAqtXGRkyGJus37ARKrBp85atW7ds3gTlbtyw3sSYwdRMe9t2RGTu2IGIzu3btM1MGTjNLcp27oIlB0Rslxbs2llmYc7JwGhpaLV7z17MBNO8Z7eVoSUwzTFa22jv238APckd2HLQ1s4anGo57R0cD7Wgqig40HLI0cmeE5Ls5Zxdyg4fQVZQUHDkaJmrsxwsYwi6ue9euxFJRcGmY8fdPRBZi9PTy/vE9pNwFQUnt5/w9vLkRMqcPr5JOacQOet0jqivD2r29pNNOnMWpuDsmSRZfxR5BoYAO5X5becgcbSpbb5KYACqPANjUDBfbQsoAxU0tBTxhQShGQBUERqWdP4CKKgvnE8KC8eQB6qQjCi7uLegYO+lsghJLPLAII+MSr48adLl5KhIa2wKgM6Itr1y6tQV2+ggrPJAFTGxU65enRIbg0MeGPNx8deuxcdZ4lIAdEZCYmICqgMA6f6os3UKuXAAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjQ0OjU4KzAwOjAwOTHA6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACr1BMVEUAAAD////////////////////////////////////////////////////////7/v3y+/n////////////////////////////////////////////////////////////////////////////////////+/v7////6/f3////y+/r////////////////4/fz//////v/////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////r+ffo+PXs+ffU8+2t591/28tg0r5Pzbju+vi97ORv1sQhwKUBt5gAtpf+/v7X9O942ckavqIAtZYAt5j7/v3E7udKy7UCt5j9/v7D7uY8x7DW8+5Hy7QAtpZ118cDt5i77OQVvKANup1BybJg0b5p1cJWz7q36uLa9PDm9/XV8u4bvqNz18be9fGr59zY8+9/2ssFuJmj5dr8/v7t+fdh0r8sw6rG7+hYz7s/ybHR8uxi0r8zxazK8Onx+/l32MgTvJ+x6N+h5Nlp1MLM8OoPu54UvJ+Q39L0/Prl9/ROzbcdv6N92srQ8ez4/fym5tsIuJoJuZs+yLBq1cOC28zj9/NUz7oGuJq87OMowaf2/PuU4NQMupwNupyU4dTo+PZo1MIBtpdq1cLp+fbL8OoBtpan5tsev6Mev6So5twIuZt+2sv3/Pvf9fJUzroEt5gwxKsxxKuV4NQVvaCV4dTW8+/X8++06eEfv6T7/f2I3c6J3c9Zz7wFuJrT8u256+L6/f3ow7cxAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAMvSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oBAMCvLzcnOSJcTFGGHyklJFxSWlZYWF5WBQWFhWWlJcJCUJUcEoLSNbUVlVDZWFqqmuqqyQlZEGqZCTV6iprStDkQeqKKurrVGQlwMawMWTXN/QiCYPVNHYUJ/Mw8XIICiumNbUDLO9sawMprawuSlNUVyQgUuppqW1EOq4tvaOjvY2qGMLW1tqlLgYlFVSOhuhDuvq7unt7enugjq4sTNFRZlBVa2vH8wvLJgwsSgZCIomTiiAiPT3qakyqGtMAnMLG7Mng+WBKiZngx1SWDBJQ51BU2sKRPnUadOToWD6tKkQsSlamgzaM2aCOY2zZifDwexZYGcVzpyhzZCcMgesoGzuPISCeXPLwArmpCQz6MyYDzFhwUKEgoULICbMn6HDoLtoMcS+JUuLYPJFS5dAxBYv0mXQ018G4ZQtT4MpSFsOiZrCZfp6DAaGK1ZCeKtWr4HIr1m9CiKycoWhAYOR8dp10IBbv2Ej0JaijRvWQ4N23VpjIwYT002bt0BVbN22fceO7du2QuW3bN5kasJgZq6zc1cZLBGU7d5dBksaZbt26pibMXBaWFbs2QtLDqAkCWPu3VNhacHJwGhlZL1v/wHMBHPw0D5rIytgmmO0sdU5fOQoepI7euy4nb0NONVyOjg6nWg/iZpoT7afcHJ24IQkezkX14pTpwuRVBQWnjlb4eYiB8sYgu4e+zacQ1aw9fwFD09E1uL08va5eOkyXEXh5UsXfby9OJEyp69fcu4VRM66mivq54uavf1lk6+1whRcv5EsG4Aiz8AQaK+yaDnEGYVbly9SCQpElWdgDA7hu9kOykCFze23+EKD0QwAqggLT759BxTUd24nh0dgyANVSEbevXegsPDA/buRkljkgUEeFZ3y4OHDBynRUTbYFACdEWP36MqVR3YxwVjlgSpi46Y/fjw9LhaHPDDm4xOePEmIt8KlAOiMxKSkRFQHAAAsgrQ2sknLAAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDU6MTIrMDA6MDD2yfpjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACfFBMVEUAAAD////////////////////////////////////////////////////////8/vz0/fT////////////////////////////////////////////////////////////////////////////////////+/v7////7/vv////1/fX////////////////6/vr//////v/////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////v/O/s++zw/PDc+dy9872Z7ZmA6oBz53Px/PHK9sqM64xN4U003TQx3DEy3DL+/v7f+d+T7ZNH4Ecv3C8z3TP8/vzQ99Bu5m79/v3P989j5WMw3DBs5myR7JHJ9slD4EM93j1m5WaA6YCH64d36HfF9cXh+uHr++vd+d1J4EmP7I/k+uT+//6787ty53KY7Zg33Te18rWB6oFW4lbR99F56Hna+dqC6oJc41zV+NXz/fOS7JJB30HA9MC08rQy3TKH6ofW+NY/3j9C30Km8Kb2/fbq++px53GX7Zfa+Nr6/vq387c43Tg63jpk5WSI64ib7pvp++lS4lL4/fip8ak83jzt/O1n5We487hK4UpL4Uu587k53TmY7pj4/vjl+uV26HZZ41la41qq8KpE30Sr8Kv0/fQ53jne+d7D9cNM4Uyg76B66Ho23TbH9cf7/vts+qXUAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAM8SURBVDjLdZP3X9NQFMVfFIUWLJRpVcoeYlVEQEUExIUyFFFRcfJqqiyb12paDQQKpQXZorJXARcbFRC3oohb/yHTJIUW8fyU5Hxz7/3cdx4ArDBs2XK7FSvtHSB0sF+5wm75MgwDVsIEQkenVSJnF/mlS3IXZ9EqJ0ehwIrAxK5u7h644vKVnNzcnCuXFbiHu5ureJ7APL1Ww7z8gqtKAjEilFcL8vPgai9PzOJL1qjU166TCGlYIURev6ZWrZFwBLZ2nbf2xk0lobESobx5Q+u9bq2ZkPr4UoVFNNLYCNFFhZSvj5QpIHSC6uLFvpkoVkMnIQbEXn54idLSnWZkeVaW4H5eYiD0p3SlXH9ElOnLy/VlBIcQpTrKXwgCAuUGmv/FWFF561ZlhZEvSBvkgQEgKLiqGnF+TW0dZFRXW8MRqLoqOAiEhNazr4huUKsgK5W6gR0EKetDQ8D6sNsc3niHgryoO43ct9th68EG/C77Qt9rgvNquseOhe7iGwCUN7MAqW9ZAFr0JAs0yyGQ4a1chbb2BaC9javQisvAxo5OFiC6ulUWX9XdxW4GdXZsBJs297CAiezFLQDeS5pYoGfzJhC+pa+fG/n+g4ec//DBfe5Lf9+WcBCx9dFjbtN09cAg00U1OFDNrZZ4/GhrBIiMGhoe4Vc7Ojb+5Mn42Ci/+pHhoahIEL1N9tRI8gdIko2NJMkfJ2l8KtsWDQTbd2h1z/g4mcyZNPGheqbT7tguAFhMxM6Jyal/AzM1ObEzIobJHBa7S/bcQCyOHGF4Hhcfy6ZWkLA7sV1vGzpET7cn7kkQcLGX7t2nffGSMFn//+q1dv9eqeViiA8kTQy8sco9Mfr2XdLBhaslOJSc8v6DZr4J0nx4n5J8SGB1OVPTYP6MZVBEfMz3SEu1vd6HveGnWb4JMfsZeh+x8QFIjw+cM3xhCeLL+Fzg0XRbH2AZx0Rfp83xRcppteh4xqICDHEiE377bl71928w8+Q/PkNITml/TCFU9kN7SrKEz6z8dJb8569fP+VZp2OXApgxzsQpZmYUcWcylvQZ4uw56vdv6tzZ//jMyZ+/8OfPhfMx/wOYMS5mZ1+0HeAvs9msMpv5tz0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjQ1OjQxKzAwOjAwj8HumgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACr1BMVEUAAAD////////////////////////////////////////////////////////9/vv5+/L////////////////////////////////////////////////////////////////////////////////////+/v7////9/fr////5+/P////////////////8/fn////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////3+uz1+en3+u3t9Nbd6rHK34W912i20lj4+u/j7sDD23ajxyyWvw6VvguVvgz+/v7u9drH3X+gxSWUvgmWvw39/vvm8Me00VP+/v3m8MauzkXu9Nmz0FDG3HyUvgrj7r+exCCbwhqwz0rB2XGWvw+51F7h7Lrv9dz0+Oft9NehxifF3Hrx9t/c6a+201j+//7K3oaYwBHZ56j+/vy+12moyjfn8Mn2+uy61WCwzkns89P3+u6+12qryz7p8c35+/HH3X6dwx7e67XY56aVvg2UvQjq8s6cwhuexB/R45b6/PT0+Oa20leVvgqhxijJ3oT8/fna6KqYwBOZwRavzkfB2XLL34nz+OS41F2UvQmYwBKmyDGWvwz7/PfS5JmawRebwhjT5JrB2XD1+erp8s79/vzb6ayiximixir7/PbJ3oOZwRXK3oTx9+Cpyzuqyzvj7sGexCH5+/KZwBSwz0vu9dng7LijxivO4Y6awRjO4Y+61WGXwBHt89Wpyzri7bz9/frM0I39AAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAANESURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oLAICAoL8vNyc5IlxMUYYfKSUsUlpWXlhUUVYFBUWF5WWlIsJQlRwSgtI1tZVV1QWIEECguqqyplZaRBKuTkFWpq68qLKlBAUXldbY2CvBzQAC6e5PoGdHmQiob6ZB4uRgZBccW0xgKY7U3l5U0wdkFjmqK4IAOXUk1zSyHUca1tWVltrVDHFrY01yhxMSirpLQ3QeQ7Oru6e3q6uzo7ICqa2lNUlBlU1Xr7iiBG9k8oTgaC4gn9ECuL+nrVVBnUNSaCuUXlk0omJ4PB5JJJYEcXFUzUUGfQ1JoCUT512vRkKJg+bSpEbIqWJoN22gwwp2nmrGQ4mDUT7KyiGWnaDMmz54AVlM+dh1Awb245WMGc2ckMOvMXQBQsXIRQsGghRMGC+ToMuouXgBUULl1WDJMvXrYUHDJFSxbrMujpLwdzVqxsT4MpSGtfuQKsabm+HoOB4arVECPWrF0HkV+3dg3EgNWrDA0YjIzXb9gICbhNm+cBbSmet3kTJGg3blhvbMRgYrpl6zZo0G7fsXPXrp07tkODftvWLaYmDGbmOrv3rIQmk5V79+3buxKadFbu2a1jbsbAaWFZ2bwfYknFAVCaPABhb9zfXGlpwcnAaGVkffDQYcwEc+ToQWsjK2CaY7Sx1Uk9Voie5Ap3HreztwGnWk4HR6cTbU0oKoqa2k44OTtwQpK9nIvryVOnNyKpKNp45tRJNxc5WMYQdPc4e+48UrovPH/hoIcnImtxenn7XNxTATeiqGLPRR9vL06kzOnrl5x7CZGzLl8R9fNFzd7+sslHr0JDY+PVo8myASjyDAyB9irX2q+DnVF4vf2aSlAgqjwDY3AIX30bKPkWFdy4yRcajGYAUEVYePKt26Cgvn0rOTwCQx6oQjKy8s7doqK79yojJbHIA4M8Knr2/QcP7s+OjrLBpgDojBi7h48ePbSLCcYqD1QRGzf98ePpcbE45IExH5/w5ElCvBUuBUBnJCYlJaI6AADXv7i4Kd/lawAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDk6NDUrMDA6MDBhsioHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACnVBMVEUAAAD////////////////////////////////////////////////////////7/fvy+fL////////////////////////////////////////////////////////////////////////////////////+/v7////6/Pr////////////////////4/Pj////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////r9uvo9Ojs9uzU69St2K1/w39gtWBPrU/u9+694L1vu28hlyEBiAEAhwD+/v7X7Nd4wHgalBoAhgAAiAD7/fvE48RKqkoCiAL9/v3D48M8pDzW7NZHqUd1vnUDiAO737sVkRUNjg1BpkFgtGBpuWkCiQJWsFa33bfa7drm8+bV69UblBtzvXPe796r16vY7Nj+//4FigWj1KP8/fzt9u1htWEsnCzG5Mbr9etYsVg/pT/R6dFitmIzoDPK5srx+PF3wHcTkBOx2rGh06EAhQDM58wPjg8UkRSQy5D0+vTl8uVOrE4dlR19wn3Q6dD4/Pim1aYIiwgJjAk+pD5qumqCxYLj8uNUr1QGiga837womij2+/aUzZQMjQwNjQ1ouGgBhwFquWrp9OnL5ssBhgGn1qcelR4elh6o1qj2+vZ+w373+/ff8N8EiAQwnjAxnjGVzZUVkhUJiwm03LQflh+IyIiJyIlZsVnT6tP8/vy53rn6/Pq97PRtAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAzFJREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSWlBQVlYFBQUFpSXFQoJQlRwSgtI1teUVkFlYWqqaqsKJeVkQapkJNXqK6pLUWRB6oora2pVpCXAxrAxZNUV48uD1JRX5fEw8XIICiumNrQCLO9FAhg7MaGVEVxQQYupeqm5gKo41pa29paW6COLWhuqlbiYlBWSW4vhQh0dHZ19/R0d3V2QFSUtierKDOoqvX2gfkF+f0TCpOAoHBCfz5EpK9XTZVBXWMimFtQmjVpchIYTJ6UBXZIQf5EDXUGTYEMiPIpU6clQcG0qVMgYhkCmgxa02eAOaUzZyXBwayZYGcVzJiuxZA0ew5Ewdx5CAXz5kIUzJmdxKA9fT5EwYKFCAULF0AUzJ+uzaCzaDHEviVLC2HyhUuXQMQWL9Jh0NVbBuEsb0+FKUhtXw4RW6any6BvsGIlhLdq9RqI/JrVqyAiK1cY6DMYGq1dBwnJ0vUbNgJDYvLGDeuhAuvWGhkyGJts2rwFGrRbt23fsWP7tq3QoN+yeZOJMYOpmfbOXcuhEbi8dPfu0uXQ6Fy+a6e2mSkDp7lF+Z69pbBUUABLd2Wle/eUW5hzMjBaGlrt238AM8Ec3L/PytASmOYYrW20Uw4dRk9yh48ctbWzBqdaTnsHx2Otx1ET7fHWY45O9pyQZC/n7FJ+4mQBkoqCglOny12d5WAZQ9DN/cyGLcgKtp495+6ByFqcnl7e53ddgKsouLDrvLeXJydS5vTxTcq5iMhZl3JEfX1Qs7efbNLlK9DQKL1yOUnWH0WegSHATmVRO8QZBVfbF6kEBqDKMzAGBfPVtYIyUEFjaxFfSBCaAUAVoWFJ166Dgvr6taSwcAx5oArJiPIbBwoKDtwsj5DEIg8M8sio2bemTLk1OyrSGpsCoDOibW9fvHjbNjoIqzxQRUzsnbt378TG4JAHxnxc/L178XGWuBQAnZGQmJiA6gAAFLyvxAL3bxQAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjQ5OjU2KzAwOjAwnPAwBAAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAClFBMVEUAAAD////////////////////////////////////////////////////////7//3y//n////////////////////////////////////////////////////////////////////////////////////+//7////6//3////y//r////////////////4//z////////////////////////////////////////////////////////////////////////+//7////////////////////////////////////+//7////////////////////////////////////////////////////////////////////////////+//7////////////r//fo//Xs//fU/+6t/95//8tg/79P/7nu//i9/+Rv/8Uh/6YB/5kA/5j+//7X/+94/8ka/6MA/5cA/5n7//3E/+dK/7YC/5n9//7D/+c8/7HW/+9H/7V1/8cD/5m7/+QV/6EN/55B/7Np/8NW/7u3/+La//Dm//XV/+4b/6Rz/8fe//Gr/93Y/+/+//9//8wF/5qj/9r8//7t//dh/8As/6vG/+hY/7w//7LR/+xi/8Az/63K/+rx//l3/8kT/6Cx/9+h/9nM/+oP/58U/6CQ/9L0//rl//RO/7gd/6R9/8vQ/+z4//ym/9sI/5sJ/5w+/7Fq/8OC/83j//NU/7oG/5u8/+Qo/6j2//uU/9QM/50N/53o//Zo/8MB/5jp//bL/+pB/7IB/5en/9we/6Qe/6Wo/9wI/5x+/8v3//vf//IE/5kw/6wx/6yV/9TW/+60/+Af/6WI/8+J/89Z/7zT/+25/+L6//2DMMmrAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAMmSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oBAMCvLzcnOSJcTFGGHyklJFxSWlZYWF5WBQWFhWWlJcJCUJUcEoLSNbUVlVDZWFqqmuqqyQlZEGqZCTV6iprStDkQeqKKurrVGQlwMawMWTXN+ALg9S0VCfzMPFyCAorpjW2ASzvQwIYOymxjRFcUEGLqWa5pZCqONa27Ky2lqhji1saa5R4mJQVklpL4M6rKOzq7u7q7MD6uCy9hQVZQZVtZ5eML+woK+/KBkIivr7CiAivT1qqgzqGhPA3MKy7ImTksFg0sRssEMKCyZoqDNoak2GKJ8ydVoyFEybOgUiNllLk0F7+gwwp2zmrGQ4mDUT7KzCGdO1GZJTZkMUzJmLUDB3DkTB7JRkBp3p8yAK5i9AKFgwH6Jg3nQdBt2FiyD2LV5SBJMvWrIYIrZooS6Dnv5SCKesPQ2mIK0dEpyFS/X1GAwMly2H8FasXAWRX7VyBURk+TJDAwYj49VroAG3dt16oC1F69ethQbtmtXGRgwmphs2boKq2Lxl67ZtW7dshspv2rjB1ITBzFxn+44yeGTu3AmPzrId23XMzRg4LSwrdu2GJQdQkoQxd++qsLTgZGC0MrLes3cfZoLZv3ePtZEVMM0x2tjqHDh4CD3JHdp62M7eBpxqOR0cnY4cPYaaaI8dPeLk7MAJSfZyLq4Vx08UIqkoLDx5qsLNRQ6WMQTdPfasO42sYPOZsx6eiKzF6eXtc27HebiKwvM7zvl4e3EiZU5fv+TcC4icdTFX1M8XNXv7yyZfaoEpaLmULBuAIs/AEGivsrAd4ozCze0LVYICUeUZGIND+C63gTJQYVNbMV9oMJoBQBVh4clXroKC+uqV5PAIDHmgCsnIimv7Cgv3Xa+IlMQiDwzyqOiUG1Om3EiJjrLBpgDojBi7mxcu3LSLCcYqD1QRGzft1q1pcbE45IExH59w+3ZCvBUuBUBnJCYlJaI6AABB269xUXFElwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NTA6MDYrMDA6MDDpi8pqAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACbVBMVEUAAAD////////////////////////////////////////////////////////7///y///////////////////////////////////////////////////////////////////////////////////////+///////6///////////////////////4///////////////////////////////////////////////////////////////////////////+///////////////////////////////////////+///////////////////////////////////////////////////////////////////////////////+///////////////r///o///s///U//+t//9///9g//9P///u//+9//9v//8h//8B//8A///+///X//94//8a///7///E//9K//8C///9///D//88///W//9H//91//8D//+7//8V//8N//9B//9p//9W//+3///a///m///V//8b//9z///e//+r///Y//8F//+j///8///t//9h//8s///G//9Y//8////R//9i//8z///K///x//93//8T//+x//+h///M//8P//8U//+Q///0///l//9O//8d//99///Q///4//+m//8I//8J//8+//9q//+C///j//9U//8G//+8//8o///2//+U//8M//9o///p///L//+n//8e//+o//9+///3///f//8E//8w//8x//+V//+0//8f//+I//+J//9Z///T//+5///6//8Ngdu6AAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAu1JREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSUFSKCkuKhQShKiglFaRra0rLyiAAVUlJeVyspIg1TIyStUVlUXYIDqqkoFeTmgAVw8STW1BVhAbU0SDxcjg6C4YmpdPTYF9XWpiuKCDFxKlQ2NMLGm5szM5iYYr7GhUomLQVkluQXmsNa29o6O9rZWmINbklWUGVTVOrug3u/uKUwCgsKebmiAdHWqqTKoa/RCuVl9YHmgir4sqJZeDXUGTYEMCK9/wsQkKJg4oR8iliGgyaA1aTKEM2VqEhxMnQIRmzxJiyEpeRqEM30GQsGM6RCxaclJDNqTZkI4s2YjFMyeBRGbOUmbQWfOXAhn3vxCmHzh/HkQsblzdBh09RbAfJ0KU5AKC5kFeroM+gYLF0F4i5cshcgvXbIYIrJooYE+g6HRsuVQ9StWrgLaUrhq5QqowPJlRoYMxiar16yFCqxbv2Hjxg3r10G5a9esNjFmMDXT3rQZEYVbtiDYmzdpm5kycJpblG7dhi26t20ttTDnZGC0NLTavmMnpnzTju1WhpbANMdobaOdsisfXT5/w25bO2twquW0d3Dc04ymIr95j6OTPSck2cs5u5Tu3YeqYN/+UldnOVjGEHRz375yLbL8ugMH3T0QWYvT08v70ObDCPnDmw95e3lyImVOH9+knCMIBUdzRH19ULO3n2zSMXjibjyWJOuPIs/AEGCnMqcF6ox1LXNUAgNQ5RkYg4L5aprBGai+uYgvJAjNAKCK0LCk4ydACk4cTwoLx5AHqpCMKD0JDPKdp0ojJLHIA4M8Mir5dH//6eSoSGtsCoDOiLY9c+TIGdvoIKzyQBUxsRPPnp0YG4NDHhjzcfHnzsXHWeJSAHRGQmJiAqoDAOgCnVLAYqeOAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1MDoyMSswMDowMG4J85kAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACu1BMVEUAAAD////////////////////////////////////////////////////////8/f3y9/r////////////////////////////////////////////////////////////////////////////////////+/v7////6/P3////z9/r////////////////5+/z//////v/////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////s8/jp8fft9PjW5vCwz+KEtdJno8hXmcLu9fnA2Oh1q80qfrIMa6cJaqYKaqb+/v7Z6PF+sdAkea8HaKULa6f8/f3G3epRlcAJaab9/f7G3OpEjrsHaaXY5/FOlL97rs8Iaab9/v6+2Ocfdq0Yc6tJkb1no8dvqMsIaaUNbKhdncS61ebb6fLn8PbX5vAle7B5rs7f7POuzuGFtdMPbainyt/8/f5oo8g1hbbI3utfnsVHkLzT5O/u9PhppMk8ibjM4Ozx9/p9sNAcda200eSlyN4La6YGaKVwqMvO4e0Zc6wddq2Vv9j0+Pvm8PZWmMIme7GDs9LS5O/+/v/5+/ypy98Rb6kTcKpGj7xxqcyIt9Pk7/VcnMQQbqj7/f0wgbQKaqf3+vyYwdkVcaoWcquZwdpvp8vq8vfN4e1JkL2rzOAnfLEofLGszOH2+vyCs9ITb6mDtNLg7PNbnMQ5h7c5h7jA2egfd66awtry9/pvqMoSb6kMbKe30+UpfbGNutaOutZgn8XV5vC81ub7/P0PF+8/AAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAANLSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oLAICAoL8vNyc5IlxMUYYfKSUsUlpWXlhUUVYFBUWF5WWlIsJQlRwSgtI1tZVV1QU4EEagqqqyplZaRBKuTkFWrr6huKKlBAUUN9Xa2CvBzQAC6e5MYmdHmQiqbGZB4uRgZBccW05gKY7S3l5S0wdkFzmqK4IAOXUmtbeyFEqKajs6urs6MGoqSwva1ViYtBWSWluwci39vXP2HixAn9fb0QFT3dKSrKDKpqkyYXQYycMrU4GQiKp06BWFk0eZKaKoO6xjQwt6ghuwQsD1RRkg12dFHBNA11Bk2t6RDlM2bOSoaCWTNnQMSma2kyaKfNBnNa5sxNhoO5c1rACmanaTMkp8wDKyifvwChYMH8crCCeSnJDDoLF4EVNCxeglCwZHEDWMGihToMukuXgRUULl9RDJMvXrEcHDJFy5bqMujprwRzVq1ekwZTkLZm9SqwppX6egwGhmvXQYxYv2EjRH7jhvUQA9atNTRgMDLetBns5IqWLVu3bU9O3r5t6xaowOZNxkYMJqY7du6CBG3L7j179+3bu2c3RL5o184dpiYMZuY6+w+shkRg4erygwfLV0OirmL1gf065mYMnBaWh9oOQ/RUHAGlySMQdsvhtkOWFpwMjFZG1kePHcdMMCdOHrU2sgKmOUYbW53UU4XoSa5wzWk7extwquV0cHQ6c7YFRUVRy9kzTs4OnJBkL+fiWnnuPLKKopYLFyvdXORgGUPQ3ePS5SuFCAWFu68e9fBEZC1OL2+fa9cr4EYUVRy45uPtxYmUOX39knNvIHLWzVuifr6o2dtfNvnkbWhotNy+kywbgCLPwBBor3L33n2wMwrvr7mrEhSIKs/AGBzC13j2AdCSogdnS/hCg9EMAKoIC09++AgU1I8eJodHYMgDVUhGHnp8oqjoxJNDkZJY5IFBHhWd8nTGjKcp0VE22BQAnRFj9+zGjWd2McFY5YEqYuNmPX8+Ky4Whzww5uMTXrxIiLfCpQDojMSkpERUBwAAPAa7YJpbYIgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjUwOjM0KzAwOjAw8JvcoAAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACzVBMVEUAAAD////////////////////////////////////////////////////////7/Pzy9Pb////////////////////////////////////////////////////////////////////////////////////+/v7////6+/v////////////////////4+fr////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////r7/Ho7O/s7/LU2+GtusZ/lKdge5JPbIfu8fO9yNFvh5whRWYBK1AAKE8AKU/+/v7X3uR4j6IaP2EAJk0AKlD7/PzEztZKZ4ICK1EAKE79/f3DzdY8XHkAJ03W3eNHZYB1jKADK1EAJ067xtAVO14NNVlBYHxgepHr7vFpgpgCLFFWcou3ws3a4OXm6u3V2+IbQWMBK1Fzip7e4+iruMVPbIbY3uQFLlOjssD8/f3t8PJhe5IsT27Gz9hYc4w/X3vR2d9ifJMzVXPK09vx8/V3jqITOVyxvcmhsL4AKVAAJUzM1NwPNloUOl2QorP09vfl6e1Oa4UdQmN9k6bQ2N/4+fqmtMIIL1QJMVY+XXpqg5mCl6nj6OxUcYoAJkwGL1S8x9EoSmr2+PmUpbUMM1cNNFiUprVogZgBKE5qgpjp7PDL1NsBJ06ntcIeQmQeQ2WotsP29/l9kqUIMVV+k6b3+Pnf5OlUcIoEKlAwUnExUnG9yNKVprYVPF4IMFUJMFVBYH3X3uO0wMwfRGWInK0MNFiJnK5ZdI3T2uEwUnC5xM/6+/yAxxLtAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAA0hJREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/oBAICvLzcnOykyTExRhh8pJSRcUlpWWFheVgUFhYVlpSXCQlCVHBKC0jW1FZVV1TjgRqqqsqK2RlpEEq5OQVauvqGwrLUUBhQ31drYK8HNAALp6kxiZ0eZCKpsYkHi5GBkFxxdTmFpjtrWVlrTB2S3OqorggA5dSbVs7xP7Cmo7Orq7OjhqIkpr2tlolLgZlle6eBoh8b1//hIkTJ/T39UJUNPR0qygzqKpNmgzmF06ZOq0oCQiKpk2dAhGZPElNlUFdY3p+IdhRM2aC5YEqZs4AO7owf7qGOoOmQAZE+azZc5KgYM7sWRCxDAFNBq2588Cc1vkLkuBgwfxWsIJ5c7UYkroXghWULVqMULB4URlYwcLuJAbtuUvAChqWLkMoWLYU7LHCJXO1GXSWrwArKFi5qggmX7RqZQFYwYrlOgy6eqvBCtas7UmFKUjtWbsGrGC1ni6DvsG69RAnb9i4CSK/aeMGiMj6dQb6DIZGm7dAQrp167btQFuKtm/b2goJ6y2bjQwZjE127NwFCdrW3Xv27tu3d89uiHzhrp07TIwZTM209x84CI3AgwcPHTp4EBqdBw/s1zYzZeA0t6g4fKQGlthAAJqojhyusDDnZGC0NLQ6euw4ZoI5cfKolaElMM0xWttop5w6jZ7kTp85a2tnDU61nPYOjuc6z6OoKDzfec7RyZ4TkuzlnF0qLlysQVJRWHPpcoWrsxwsYwi6uV+5eg0p3dfsvn7D3QORtTg9vbxv3roNN6Lw9q2b3l6enEiZ08c3KecOzJLCmrv3RH19ULO3n2zSfWjiLq95cD9J1h9FnoEhwE5lec9DcCQXPOpZrhIYgCrPwBgUzNfYCcpAhS2Pn/CFBKEZAFQRGpb09BkopJ89TQoLx5AHqpCMqHj+orDwxcuKCEks8sAgj4zqfjVr1qvuqEhrbAqAzoi2ff3mzWvb6CCs8kAVMbFz3r6dExuDQx4Y83Hx797Fx1niUgB0RkJiYgKqAwC8prs7Sn3FCAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NTA6NDMrMDA6MDA/+es3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACfFBMVEUAAAD////////////////////////////////////////////////////////8/P709P3////////////////////////////////////////////////////////////////////////////////////+/v7////7+/7////19f3////////////////6+v7///////7////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////v7/zs7Pvw8Pzc3Pm9vfOZme2AgOpzc+fx8fzKyvaMjOtNTeE0NN0xMdwyMtz+/v7f3/mTk+1HR+AvL9wzM938/P7Q0Pdubub9/f7Pz/djY+UwMNxsbOaRkezJyfZDQ+A9Pd5mZuWAgOmHh+t3d+jFxfXh4frr6/vd3flJSeCPj+zk5Pr+/v+7u/NycueYmO03N921tfKBgepWVuLR0fd5eeja2vmCgupcXOPV1fjz8/2SkuxBQd/AwPS0tPIyMt2Hh+rW1vg/P95CQt+mpvD29v3q6vtxceeXl+3a2vj6+v63t/M4ON06Ot5kZOWIiOubm+7p6ftSUuL4+P2pqfE8PN7t7fxnZ+W4uPNKSuFLS+G5ufM5Od2YmO74+P7l5fp2duhZWeNaWuOqqvBERN+rq/D09P05Od7e3vnDw/VMTOGgoO96eug2Nt3Hx/X7+/4Nm4E+AAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAM8SURBVDjLdZP3X9NQFMVfFIUWLJRpVcoeYlVEQEUExIUyFFFRcfJqqiyb12paDQQKpQXZorJXARcbFRC3oohb/yHTJIUW8fyU5Hxz7/3cdx4ArDBs2XK7FSvtHSB0sF+5wm75MgwDVsIEQkenVSJnF/mlS3IXZ9EqJ0ehwIrAxK5u7h644vKVnNzcnCuXFbiHu5ureJ7APL1Ww7z8gqtKAjEilFcL8vPgai9PzOJL1qjU166TCGlYIURev6ZWrZFwBLZ2nbf2xk0lobESobx5Q+u9bq2ZkPr4UoVFNNLYCNFFhZSvj5QpIHSC6uLFvpkoVkMnIQbEXn54idLSnWZkeVaW4H5eYiD0p3SlXH9ElOnLy/VlBIcQpTrKXwgCAuUGmv/FWFF561ZlhZEvSBvkgQEgKLiqGnF+TW0dZFRXW8MRqLoqOAiEhNazr4huUKsgK5W6gR0EKetDQ8D6sNsc3niHgryoO43ct9th68EG/C77Qt9rgvNquseOhe7iGwCUN7MAqW9ZAFr0JAs0yyGQ4a1chbb2BaC9javQisvAxo5OFiC6ulUWX9XdxW4GdXZsBJs297CAiezFLQDeS5pYoGfzJhC+pa+fG/n+g4ec//DBfe5Lf9+WcBCx9dFjbtN09cAg00U1OFDNrZZ4/GhrBIiMGhoe4Vc7Ojb+5Mn42Ci/+pHhoahIEL1N9tRI8gdIko2NJMkfJ2l8KtsWDQTbd2h1z/g4mcyZNPGheqbT7tguAFhMxM6Jyal/AzM1ObEzIobJHBa7S/bcQCyOHGF4Hhcfy6ZWkLA7sV1vGzpET7cn7kkQcLGX7t2nffGSMFn//+q1dv9eqeViiA8kTQy8sco9Mfr2XdLBhaslOJSc8v6DZr4J0nx4n5J8SGB1OVPTYP6MZVBEfMz3SEu1vd6HveGnWb4JMfsZeh+x8QFIjw+cM3xhCeLL+Fzg0XRbH2AZx0Rfp83xRcppteh4xqICDHEiE377bl71928w8+Q/PkNITml/TCFU9kN7SrKEz6z8dJb8569fP+VZp2OXApgxzsQpZmYUcWcylvQZ4uw56vdv6tzZ//jMyZ+/8OfPhfMx/wOYMS5mZ1+0HeAvs9msMpv5tz0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjUwOjU2KzAwOjAwoWvEDgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACTFBMVEUAAAD////////////////////////////////////////////////////////9/v/5+v/////////////////////////////////////////////////////////////////////////////////////+/v/////8/f/////////////////////8/P///////v/////////////////////////////////////////////////////////////////+/v/////////////////////////////////////+/v/////////////////////////////////////////////////////////////////////////////+/v/////////////2+P/09//r8P/Y5P/D1P+1yv+txP/3+f/g6f+7z/+Xtf+Iqv+Hqf/+/v/s8f/A0v+Usv+GqP/9/f/j6/+qwv+kvv+pwf++0f+Gqf/f6P+RsP+Orv+mv/+0yv+5zf+Jq/+wxv/d5//t8v/z9v+Us/+90P/v9P/X4/+Kq//U4P/9/v/2+f+cuP/k7P/1+P+xx/+lv//p7/+2yv+gu//m7f/4+v+Qr//a5P/T3/+FqP/n7f/L2v/6+//y9v+sxP+Vs//C1P/8/P/V4f+LrP+Mrf+6zf/F1f/y9f+vxv+KrP+atv/7/P/N2/+Nrf+Nrv+4zP/W4v+VtP+WtP/6/P/C0/+MrP/D0//w9P+euv+SsP+Ssf/N3P/c5v/I1//q8P/e5//8/f/tCMxjAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAyFJREFUOMt1k+db01AUxm+U1QKllT0KAlXUInsjoOICRREVFZGRMMrKTSFlBVoKKGgZUqZShiJDUUARFyrrHzPkJrRlnE855/09J+9z7jkAcIFhx47b2NrZO+C4g72drc3xYxgGLAITiR2dnCUuUqKkhJC6SJydHMUiCwKTnXB1cydKy8pVFRWq8rJSwt3N9YRsj8A8PL3wyqrqGhJyQdZUV1XiXp4emKB7+1Dq2jqalbiAkK6rVVM+3ojAfP3kmvoGkld5hmyo18j9fHcJ/4CTVH0jbaWzBN1YT50M8GcbiJ1wddN+fZdoUuNOYgzIPAOJZqE/ZGiaEb7JZiLQUwbEQVRLK+TNaXVtbTotbxa2tlBBYhCsIPQ0KrR3dD57/vxZZ0c7Img9oQgGp06XdkHUsvsFhbNBvehGv4RdpadPgZAzL7kU0hVqnA91BWcaki/PhICz0nKEG3p6BaC3x4Bq5dKz4FyfikuY/lf4XrzqZzhA1XcO4ANGDqAHh8zA0CDnGxoHcKDsG0bAyKgZGB1BwHCfEoSO1aL/vX5DCTr15jWq1Y6FgvNh4ygx6QkBIPQmVBsPOw/CIya0KGudnEL61CQaLdRORISDyKjpt5xlknk3w/kcmnnHF95OR0WC6Jj3s3NotMx848KHDwuN80iHc7PvY6JBbJzy46KJf0AT/ekTbeKf07T4URkXC0TxCZqWz4ywBVDYO5L53KJJiBcBLDEyaWl55eDCfFleSopMZHcOS76gLPkK968c1JekpCZzWytKu3hpVMdYLy2jG710OU2E1t4//Ypm9ZtlDwjXVjVX0/2Fw5Bdu/79x5wl8PPX0vUb5tMSZWTe/L1ovgxILv6+mZkhsjjOW1l41br5star3LNuWZ/3bTm+/IefBvP3Hy6/Y6UDkJ2qGNMjG3BOP6a4m22tAyznnkSt27UBSZ1acj9nXwOWeJCLb6ztjnptA899eEBnCe9Hms0VCFc2NY+8D9HZkT/OGzAaDMaBvMfJhwGsjScpW+vrWylPcg7VWSL/KbW9TT3NP0JnX76gcGensCDxKIC1UVRcXGRt4D+SPpTGEJHXggAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NTE6MDYrMDA6MDAGSaFUAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAClFBMVEUAAAD////////////////////////////////////////////////////////9+//58v/////////////////////////////////////////////////////////////////////////////////////+/v/////9+v/////68v/////////////////8+P/////////////////////////////////////////////////////////////////////////+/v/////////////////////////////////////+/v/////////////////////////////////////////////////////////////////////////////+/v/////////////36//16P/37P/u1P/erf/Lf/+/YP+5T//47v/kvf/Fb/+mIf+ZAf+YAP/+/v/v1//JeP+jGv+XAP+ZAP/9+//nxP+2Sv+ZAv/+/f/nw/+xPP/v1v+1R//Hdf+ZA//ku/+hFf+eDf+zQf/Daf+7Vv/it//w2v/15v/u1f+kG//Hc//x3v/dq//v2P///v/Mf/+aBf/ao//+/P/37f/AYf+rLP/oxv+8WP+yP//s0f/AYv+tM//qyv/58f/Jd/+gE//fsf/Zof/qzP+fD/+gFP/SkP/69P/05f+4Tv+kHf/Lff/s0P/8+P/bpv+bCP+cCf+xPv/Dav/Ngv/z4/+6VP+bBv/kvP+oKP/79v/UlP+dDP+dDf/26P/DaP+YAf/26f/qy/+yQf+XAf/cp/+kHv+lHv/cqP+cCP/Lfv/79//y3/+ZBP+sMP+sMf/Ulf/u1v/gtP+lH//PiP/Pif+8Wf/t0//iuf/9+v/1rAt3AAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAMmSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oBAMCvLzcnOSJcTFGGHyklJFxSWlZYWF5WBQWFhWWlJcJCUJUcEoLSNbUVlVDZWFqqmuqqyQlZEGqZCTV6iprStDkQeqKKurrVGQlwMawMWTXN+ALg9S0VCfzMPFyCAorpjW2ASzvQwIYOymxjRFcUEGLqWa5pZCqONa27Ky2lqhji1saa5R4mJQVklpL4M6rKOzq7u7q7MD6uCy9hQVZQZVtZ5eML+woK+/KBkIivr7CiAivT1qqgzqGhPA3MKy7ImTksFg0sRssEMKCyZoqDNoak2GKJ8ydVoyFEybOgUiNllLk0F7+gwwp2zmrGQ4mDUT7KzCGdO1GZJTZkMUzJmLUDB3DkTB7JRkBp3p8yAK5i9AKFgwH6Jg3nQdBt2FiyD2LV5SBJMvWrIYIrZooS6Dnv5SCKesPQ2mIK0dEpyFS/X1GAwMly2H8FasXAWRX7VyBURk+TJDAwYj49VroAG3dt16oC1F69ethQbtmtXGRgwmphs2boKq2Lxl67ZtW7dshspv2rjB1ITBzFxn+44yeGTu3AmPzrId23XMzRg4LSwrdu2GJQdQkoQxd++qsLTgZGC0MrLes3cfZoLZv3ePtZEVMM0x2tjqHDh4CD3JHdp62M7eBpxqOR0cnY4cPYaaaI8dPeLk7MAJSfZyLq4Vx08UIqkoLDx5qsLNRQ6WMQTdPfasO42sYPOZsx6eiKzF6eXtc27HebiKwvM7zvl4e3EiZU5fv+TcC4icdTFX1M8XNXv7yyZfaoEpaLmULBuAIs/AEGivsrAd4ozCze0LVYICUeUZGIND+C63gTJQYVNbMV9oMJoBQBVh4clXroKC+uqV5PAIDHmgCsnIimv7Cgv3Xa+IlMQiDwzyqOiUG1Om3EiJjrLBpgDojBi7mxcu3LSLCcYqD1QRGzft1q1pcbE45IExH59w+3ZCvBUuBUBnJCYlJaI6AABB269xUXFElwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NTE6MjArMDA6MDAnvJMTAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACbVBMVEUAAAD/////////////////////////////////////////////////////////+///8v///////////////////////////////////////////////////////////////////////////////////////v//////+v//////////////////////+P///////////////////////////////////////////////////////////////////////////v///////////////////////////////////////v///////////////////////////////////////////////////////////////////////////////v//////////////6///6P//7P//1P//rf//f///YP//T///7v//vf//b///If//Af//AP///v//1///eP//Gv//+///xP//Sv//Av///f//w///PP//1v//R///df//A///u///Ff//Df//Qf//af//Vv//t///2v//5v//1f//G///c///3v//q///2P//Bf//o////P//7f//Yf//LP//xv//WP//P///0f//Yv//M///yv//8f//d///E///sf//of//zP//D///FP//kP//9P//5f//Tv//Hf//ff//0P//+P//pv//CP//Cf//Pv//av//gv//4///VP//Bv//vP//KP//9v//lP//DP//aP//6f//y///p///Hv//qP//fv//9///3///BP//MP//Mf//lf//tP//H///iP//if//Wf//0///uf//+v8BRUUXAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAu1JREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSUFSKCkuKhQShKiglFaRra0rLyiAAVUlJeVyspIg1TIyStUVlUXYIDqqkoFeTmgAVw8STW1BVhAbU0SDxcjg6C4YmpdPTYF9XWpiuKCDFxKlQ2NMLGm5szM5iYYr7GhUomLQVkluQXmsNa29o6O9rZWmINbklWUGVTVOrug3u/uKUwCgsKebmiAdHWqqTKoa/RCuVl9YHmgir4sqJZeDXUGTYEMCK9/wsQkKJg4oR8iliGgyaA1aTKEM2VqEhxMnQIRmzxJiyEpeRqEM30GQsGM6RCxaclJDNqTZkI4s2YjFMyeBRGbOUmbQWfOXAhn3vxCmHzh/HkQsblzdBh09RbAfJ0KU5AKC5kFeroM+gYLF0F4i5cshcgvXbIYIrJooYE+g6HRsuVQ9StWrgLaUrhq5QqowPJlRoYMxiar16yFCqxbv2Hjxg3r10G5a9esNjFmMDXT3rQZEYVbtiDYmzdpm5kycJpblG7dhi26t20ttTDnZGC0NLTavmMnpnzTju1WhpbANMdobaOdsisfXT5/w25bO2twquW0d3Dc04ymIr95j6OTPSck2cs5u5Tu3YeqYN/+UldnOVjGEHRz375yLbL8ugMH3T0QWYvT08v70ObDCPnDmw95e3lyImVOH9+knCMIBUdzRH19ULO3n2zSMXjibjyWJOuPIs/AEGCnMqcF6ox1LXNUAgNQ5RkYg4L5aprBGai+uYgvJAjNAKCK0LCk4ydACk4cTwoLx5AHqpCMKD0JDPKdp0ojJLHIA4M8Mir5dH//6eSoSGtsCoDOiLY9c+TIGdvoIKzyQBUxsRPPnp0YG4NDHhjzcfHnzsXHWeJSAHRGQmJiAqoDAOgCnVLAYqeOAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1MTo0MiswMDowMHZMi70AAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAADj0lEQVRIx5WWO2xURxSGvzN7H7a0AdFRkFSQBovKqcCyBF0kmlDS0SHRpkJKEYmGEBeENImFRJMoLlLk4caJrCguEDSguMEijYMQAu+uwfZ672v+FHe93nu9fnCmO3P+f87jn7nXGDIBNPiAD5limgk+oglsssoyf/E3/7FBAcZIEzKd0CXd1yslPve+ULm897kSvdJ9XdIJmfaBhzqnu1qTL5QrUVeb2tCGNtVVolyF5LWmuzqnUCPg47qsJalQqi2tq63W0GprXVtKVUjSki5rfIfC+rWP8xlf6GNPSoLf3RruDo6YCIet8CU/s21llCDiU77S6YJtMvZtEgJCxmlgz/mceVLDAY4Jbh4OL3cytinQaW4ygQMnOM4NJv2h8GEKD5Pc4LhwhFzgiifZA9fQqlMkeLjCBUJHk2s6VpBW4EIYITExIVYhMSClQMe4RjPgDNMixVfgJdhhgCjz0yDC8KQ0sGnOBFxUU2S1XsfENAaeBg5Hb4gCMsZQ0y46pnBFZQuiCrykiIkqnRAFOKYcZ0uC4fQj3J7+OyKsEleA46zjpMzXTnMjhmm4WlYeGScd8d7Q0VoY6Y8dvu6rzv0Qv3e0rFaxx48IFb52lsOg5XiGH67N8GQjCbKKVqABnmeOR+YdrgLJSGsUIq1pxeEwzyPHApkjqOWQ0KMYeAp6JLXzAxxkLDie8NRqMzYKenTpss02Xbr0KGpSjzB4yhNHh1nzAWFtZCKj119ZTakQEmCeWTqOlAUWjZhG7draYHRWu+YNYgwWWSB1iJfcsdcBcaWMHZK6fIQjJsBec4eXyBnkLDFjPiKCfUS0C4eICCv4miVyw4HBFj8xZ4oJD6QoH9UIE3PMsWXQF6FY5RtbbhCPuIdV9cU0sH+4x2p5kitrxfOYGVsPR3RieHgxIbbODI/xxoAADHJ+Y5Zk5w0cBQ+JIWGW38ltkNNOx8UaD2zR9V+jupTLV8nJFnnA2u73dahkg2W+5XkwshPl8PiXeyxbxV+ZO3/wvXWiWhll+hHW4Tv+tBpx1Xr8wK+WjhEMKIQRMIal/MKP9DjYhD7RQylRRy211VZLHSWS9FCT4ggmdFUvvLr9f4S2uvLSC109EhyEmrqtd4U21FZbGyqkd7qt5hEJQOiU5pXnequ3yqVc8zp1ZHif4rxWvFKl8tKKzr8XHIQCXfdvvLz8G11X8J4E/U7cUkst3Tqo+v8BGqkQrMMFpyAAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjUyOjAxKzAwOjAwKNkk2QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAAD/0lEQVRIx5WVP2wcRRTGf29u9/44a5/Pd2cHEagIEgoFRYSQHMtSQkVJOsoICUVKi+gokFIgghubArAipTHCBVL448ZBFiI0caQ4whGKFRoTx3aS89k+fL7b3ZtHcb7zzdkOyWyzOzPf99773jezQsdQgAS9vMIIo7zJqwTAvyyzyG/8zj9UaIBw6FBUNKfn9Kquad3GsY001FAjja2Nta5relXPaU5FO1DSEd3nDT7kAwZiiaixS0gMeCTJkMbHUzaYYpK/iMQlUMjwLp8wHFNli01C3DhJ+snSgwd/8Dk32JV9AoUM7/Opvl6nRInQTa6lDkny5EkhS3zGD00KAYUk7/GFvrbDKtvoUSKhCH28xDHkAR8zQygIqOEtvtbTO6xQ4UiN25n08jLHkNt8xIJYo5DlEqdrrP4vvLlaYZUanOYSWcXgc4bzMSW2D9S9/7gU25SI4Txn8A0BF7SvSsmpXVES9FGgQB8Jh0RQSlTRPi4QeJxktEGZyIELOfKkSAAN6pQodwQQIsr04I1y0uOsBhFbXVoPUSS5B/BJkSbJupPjFoMkAjlrGMHUiBydsxTa8JaNCmTbfgCIqIFhxHDKml2HW8iR6uqGkCLn7FF2sYZThuMqobM5cwDeosg4MyEqHDekwDoLCcyhHjAknG8LkDJYugDW6XunuLaLELCGkuA7C3WiQyiUiLoz4yNQMtwXm3ZqjdiicYCgwZbjFUgjlvuGW8am8RynldnoomiwQdmxmkcaY7llmCXyCZwcYtZYp9qeqbLOGrETP8CHiFmPBe567wywje2wasgaFTL4QMQuOx2roBgG8OAuCx5lJs3bgclSdrKwVKhgWu3qckaWAGOZpGwImWXOp0i669gKYLHt9/34aYr4MMcsoUF5xBV5HDBIoqt9sve47UwwSIA85gqPUCMQc5MxY3MMwBEm2odDnhymwZfcJBYMCOzwPdOeFuh9JkXzRszjKdNMsyMtP6IsMy6LPRRJHkmhQJIiPcifTLDc3Gb2FLbMMyab/RSOOErNzQX6kU3GmMcKbQIQiPmZSannySKHngWhnzxSZ5JfiKVN2lJceco1mUtRJHOgDAUyFEmpzHGNp/v/1458BRb5igd9FLrOJ4BPgV74mwkWOxvrFCxwg28p5+nHdOSgGPrJQ5lv+NX1RbdiNab4KREOEbSVUISAIRIhP/IdNZ5FIPCQCe6kGdxraLN5g6ThDhM87L4tD/RMYJ5xVrIU9+7ABEWysMI4tw9etoc3/TpTUimQxWDIUkAqTHGd5x2KntAZjat6T+9pVTXWGT2hz41vUgzrktVN3VSruqTDLwQHRT29aJ9YtWqf6EX1XpAAFA30spa0pJc1OBr+H/Nbm042akI7AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1MjoyOCswMDowMP9kZncAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAAEJklEQVRIx5XVT2xc1RUG8N+9M2M79tgxJDLR1MHYjosQrdRFVFUKUSToqsuy6xJVqpDYVuy6qMSiKmSTdNHWQmKTqllUon+yIFRRVbohSAQRgRxRJXWwSQzGjpzYnsnMOyzsOPPGNoX7Nk9P9/vO+b7z5yVdJ6Bi2FEnnfI9j6vjrnlX/cu/3bSmQ7LnCZHikXguXo9b0SzarWIzNmIjNqNVFO1oxq14PZ6LRyJFFyp1Ra95ys/9zKPNtOmuVeta6DNoVN2A/vClc2Z97H4qEwQH/NjLTrSsWrTonnKcIQ0No/r4j99420Z6SBAc8FO/iu+u+Z8b1iVlpYEw6AkThqVrfu0vWxSJoM9P/LY49qWP3RL7mSQkRzzlUfkTv3RBK0lE9gO/j+PLPrQk7QvfNtqY7zskvecXrqQiBwe95Piaj/4vnCRZ8pE1jnvJwZDVPOP5phtu98BDKBSix87kthuaPO8ZtazuhRhZdb2kPYSaMVOmjKmVSJJw3aoY8YJ61YxTLQs25S549h2ThlTRds91CwoPa79pwaj+U2aqno36psVS9GTGMYM73+qGDbrWlWOyaFpfPT2bnYy8ZqOUfMOkoS7KZMikRknIhjWRncye7uQ7Jf0V44Z3+T9sXKXkwx2d7OnsSKT1nqv1PYqZ1Hto10VyJOsPnVLx+rsidZ+K/lJBO4L+rEg9gLZiT4JCu4cwUWTLyUAp1bs2SpEeZLbhbknagMRyNpeLsram21q7CFpua/Z4lQtz2bu5GFHbiZkkN833pNs272ZXq4eaEbnwbnYx3T9grCSiac6c1Z0vq+bMaZYEjDkg3Xex6ooP+n501C2drj5bN2fJQQPYdMeKdqlXK47q4wNXqlbMVn54ODfMl3qvbcnS9izYNacNh1UKs1aylosuDZgy0jO2WdLR2X7rho+YMsAlF7WysOjVvHTYjGpP+dL2Uy5nzYzD8pJXLYqcaHvH6UoxboI9OqAMZ8K4Ssdr3tFOMol7/ux8f0wa+1qKwJgn9IfzzruX2N4iYd6ZdHXUtKF9KQJDpo1KHzprfuta3tKqcNnpvNowsc8oQcWEhrzqtMuKLW/yA7u0/d1sbk5qSHvOQtIwKTfN+of2A2t3FmEKX3gjXdpKsldGYNS0oUiXvOGLh//Xh5tU4qrf+WTMpP5dGQyYMsZ/nXW1u7C5+1LibX+0MuGoSlcOoWLc46z4g3+W+yL3BNp0zt9qrWMO7TgRkkOOqbX81Z9s+jqCxKfOen/EkwbZ3sODnjTC+876tHdb9mYgcdkZC4+ZVgVV0x5jwRnv7V62uwjAm87ltUkNWd4q3ppz3vRNT4jxuBDt1Xgr3orViHZciPH4xvgtihNxrYjP4rMoIq7FiW8FJ0Q1Xiw+70Qnis/jxah+SwJC1OOVWI7leCXq+8O/AuFKp/3c1qOQAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1Mjo0MiswMDowMJ17ML4AAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAAER0lEQVRIx5XVS2xV1xXG8d/evrbxC7CpMbVSECGg2qlRU5tXDEVNOmmHzazDqFIVKdOqsw4qZVA1RZGgg7ZWpEyoyqBS+qADgpxSOglYkIQE2aFCIuGNMcEOhsu9Z3WAgXts0yb7zI7O919nfevbeycNK6BJl2/YY69vWa8Tcy4445/+5VOz6iTLrhApuuPFeDOuxL167W4xF7fjdszF3aJei3txJd6MF6M7UjSoUkP1ZgN+4sd67qRZ110xYx5tuq3Tq0t7uOmgMWfdT2VA0Ob7fm503iUf+9iMcp1ugwb1a+PffuUd8+kxIGjzI7+ILTdMmHBLVu40UFht2LCvSVN+6c8PEImgxQ/9unjmgnFT6vLyJik02eJ71svn/Mxh1SQR2bf9rhi54B/OS0/y+KHRNvqB9fJJP3U6FTlY5VUjNxz9v3KS5LyjbjDiVatC1my3l+446ZNF8lAsPLEI8YmT7vCS3ZqzTi/HyosmRIM8FFbYbJttNltRgiRhwkWx0ss6Kzbbe8dHZhusC9mQYWu0oGrahA8VHs9+1kf6dey1ueKF6JxztlQ9222X7kfv1ui1yvES4qxd2jvTC9meIl/zecnnAdsb5A9itN2AaGjkc9cU2Z7s2Vq+Wuq/YsiaRdNI1hhSKflwVS17NltXTzMl73v1LBOlrEdvaR4z6sm6rDXUSoB2LctmoEV7CVATtGZF0lz62ar6soC6aqmxZokim846SoCbbpcqPfyz226WAB0y09lkpVhbAsyZMr8EMG/KXAmwVqUwmb3XVPRpa6iZfeCUakledcoHpai16dNUeC87ku6v9HQpqnOOedflhXfhsncdK9UPT1sp3Xek4rT323duNan26INsxjHn9enCrKs+VS3Vb7ZVO+87XTFjrLJ9Yx50WlNDG/edc25hL5BLySgM2qhSGDOTVR0x3mWHPkXJzCZZTU3WVDKv0GeHLsYdUc3CJa/naxs8r3XR+NLCUx7nCqM2yNe87pLIiZrj9jUXWw2zTALKcr5jSHPdbxxXSzKJL/zJoY4Ysam045bKwyYjOsIhh3yRWPAmXLA/nem3Q88TESH02KFf+tABFx58lh/0qnDCvnxr0PATthK0GDYo37LPCUXyCECi5m/GKveGfVNadi8kA4ZV7hnzd7XHmXnoeLjhrTTeY6evLzEz0G+nnkjj3nLj8f3akI/EGb917hnbdS4BdNpmE/9xwJnGwZaOnsQ7/mDmOUNaGhChxZDnmPF7R8u5WHx23XXQX1dUn7f+kRMh2WDUiqq/+KO7/hcg8ZkDTq31XasXRsdqe/RyygGfLb76lpyeiRP2u7jFTq2g1S5buGi/k0tvzuVv8rcdzLPbDGjSZMCIPOugt33ZFeKpOBy1y/FGvBGXI2pxOJ6KL61/gBiNqXpMxmTUI6Zi9CvJCVGJV4rrtahFcT1eicpXBBCiM16L6ZiO16LzyfL/AjzmtojnBFLlAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1Mjo1NCswMDowMDIBBRoAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAAEXklEQVRIx5XVS2xdxR3H8c/MuX5g/CBGTQzkATIggQt1K7fNgzgI5YVDWmjaRdsdrRQhsa2666ISi6o0m6SLtu6CRYIS1Er0EdGYEKV1GwlbTaxGRYkCgWAiYuKH4kaxfX3PdOHg3HPttDBnNXPm9x39/vObmaCqJci0WGOzLb5orWb8xyVnnfQ3H5pWIVRpQkEe3OUrvq/Piko2G8shR1SXGvKsYtJRB/3TlBSWAhJ1HvFD39N+LUz40EVjptFipQes0a41mXBIv3eUQxGQuMNWP7Zp2rtO+YcrKov0JLPKRht0auHvfuZNN8ItQOIO3/KT9PCoYwaMiUV3EnIrbbPdauG8n/r9AiKQqNfn55UH3/GqIRXR8i2X+arvekR2wY8cNRcEUtTtV3nPv/3WiFhYubYluS/5gUfFYXudCXlMtHlRz6iD/1dOEI04aJQeL2pLojpP2HPNG4Zr5EmuoiJfyEcVYtgbrrHHE+pKmj2ft15wTF7lPUnu9LBVuOK864JbG5c7pkd3a3zeYMlDtkwbNCGrkke9drhXI2Zc9hd/lS8iogmDOrVt8VDJU6l5yqnC6tEe39CxKLjXal/wuwLilG9qbQ5PRZsr8QNXC8436KuSE3Tos6FQjas+UIk2R11z8X2panq9XvfV7EZwn171Vf3kfXNRV9QxH8YKYVnrnmWiFN1jrbxqZMx80BE1JLOFqS0al81Ao5ZCf1aiIcpDjeCG8rKAshs1wEAejWfaCm4/Nl6IzqfFHfdxoTJtMsajc/X5uoLXScOmlwCmDZss1Gad+ty56O26fJ3mqjUzJx03U5DPOO5kIWrN1qnLvR0NKN/t8SpAMOU1h723OPKew14zVWUgedzdlA2UnDHSuv5JQ8pVObviiBEPaMeEi86ZKWS13pNaGXGmZFJ/3dceixu9pVRViVmnnb55FsgK7iu2eExdrt9kNGfAiXa73F+ISZDJlJVlskL1c/fbpZ0TBsxFyWUvZ2NdntVUc/JvfdXbeafndMnGvOyyFAPzBu1ryHttY5kEFNPANr0aKn5h0HwQCVx32JG70k7d0v9AJEm3HdqSI464HrhZm+SS/eFsp11W3RaRJB2e0Sn8ywGXFqbFBbdyQ/ZlUxtt13hbQKPtNsqm7DMkDxYBBOb9SX/97E5fF5c9C9F6O9TN6vdn87cy82nNk6teCSc67Na5xEaSPGi3jhROeMXVsPi7Kh+Bs37pwpf1WbEEsMLTunnXAWert7Vw9QTe9BuTW/VqqEIkDXptZdKvHS9edrV314xD/tg096xHFyuRRF2e0zTnD16tOaa1gMCoA06v9R0rb3pnpW9bw2kHjNY+fUtuz8CQ/T7q8Ywm0GS3Hj6y3/DSl3P5l/x1h7Lpp61XUrLeTtm0Q173WVuSVqejaf5i2pv2pospzaejaXX6zPoFxKZ0vpKG0lCqpHQ+bfpccpJUSi/kn5RTOeWfpBdS6XMCSFJzeimNp/H0Umq+vfy/0JikOgfvvUIAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjUzOjA1KzAwOjAwM1Rr9AAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=",anchor:[.5,1]},{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAADzElEQVRIx5WVTUxUVxiG33tnhmF0iJ0iCVF+NJpghTSUVNOoTTMrCS1qm4mJZVFSu+h048Jg2dCdSatb3TWkTaw2ISkbBY2waGBBJGmsoggkasEfyDhDsQjM33m6YGjnzgw4fmd1v++8z7nnnPecYykrkCSXylStD/WRGlQjv6RFTWtMv2tIM/pHacnK0lgOuaW31KQ2tSiQci3bcSstySUvPuNOa159+kV/6G9h5QOQPHpHX+lzvR21ZjWhO/pL85ICqtW7qlOlylFMl/WjxpXM/gtJCB+tDEOMQU6xEwtlNYudnGKQGMAwrfjIk7cxYRink20OaXbbRifjGJigLQuBKOEYU0mGacFeVy6ETQvDJGGKY5RkENg0MZpmiEMbitfaIYZIwyhN2KvjB+iG+xwuSi7EYe4DdBNAwkMrCy/owFU0wEUHL2CBVjwiQG+am1TkdSsjSDvtBCnLq1VwkzT0EhD7iUUI5y3WcfqZ5BnPmKSf43mLGyYCMfaLTpO4x/acXT/NQwxrYXjI6RxnbOceJkGnuJZI9eQUj/IgS76KeMDRnEF6SKS4Zqt+xR5Ttq88Cmm3nFa1tFsheRzmG9OKrXpblUlr2tG5TrvkUm64tEt1jsy0kpYqbXmNlh2Fcm1Wodiscsf3sozktWVsbXIUFhUvCIhr0fG9SbZkbEXdqnAUHuu5Y03W5vxcjx2ZCrmlqK0Jr9nrKER1XbE8QEzXFXVk9sprNGHrltfUa4uj1KNLeuXIvNIl9TgyW1Qvr9Et0czSU47k+KyaLm5nvGC4TRfVOT2O8BSWaLaoVG/8g9/0pVYcI/i0Tw2qlDSrMY3m7FSpuvWZvCP6VHg5SXqGUMFzV0JJwXyIGUhzEq+wqGEgyQB7ij7OexggCQPUYAnhppm5JS7gL0pexgWWYI5m3KzuMH6+JT3L1zmHqlCz+IY5SHEG///XqsUOrhgzSvA1CIsgoxjDZXZkvS4ImwPcSXKFmg0BNfxKEv7kAHbuy+ChnfkluihdV+7jO5Zhni/w5Jkdi62cNyuPCOEuKHcT4hFmhfNsxVJ+IBroh0EaCwLeYxAM/TSgdQLxCVNwscAdXcFFgCk+XlcuSZRyhtgC4ZyV8BFmAWJ0UKoNAaKKn4nfJ5j10LgIMg5xfqJqw/EziH2MwFVq/wPUchVghPdfK88g2niS5PuMtf38QBKe0FaUPGPtc7yMcAIPHk4QgZecy7JuEYgq+kjdpZFG7kKKviJmn4M4yGSKG9wgBZMcfCO5Vo0XNpEECUyEcObgviHCz1miRDm70ez/BYYI/lv2W3BZAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1MzoxNiswMDowMM4WcfcAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC",anchor:[.5,1]}],drawing_api:[{src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAgCAYAAACLmoEDAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5wUZACIosGP4JQAABapJREFUWMO1mGtsFFUUgL9zZ6bdbaEP2kpRCYj4wlciRMHEHxo0MdHEqDFG/aExvmJiYmJ8G2P0B8YYYozC+oivCAl/VMRqIkTBUIygCAiNlr6oQAttd9vS7bQ7c48/pq0QdtvZFU9yM5nZOfd895xz7zmzQomibwFlgACVCCPUI1QDCcAFAsBHydBDP2ejOEAlyN2l2XRLhaUcyCDUsoQsK4DrgCuBRmAWcALoAfbQyDaUn1nGAZrRUk1KSV59DwhpRLgLuAe4JsZMPwPrsGzA0CuP/M+wugYwCMJFKM+g3IVQEU8ZgCywAeF1LH/ioPJwfPvFpUGA4LEYeBW4DSlCP3JLBXAfSgXCC7i0TS0jhpjYXk0BHjXAE8BtaMn57gK3IzxBjhpdE18xNiyKg3ADcD/glpbtExJF5AGUGwDnjMJqChBqgccRZhVYTDTCk8bks/zvzwIeBWr1vXiwcUNpgCuAqwuCgtKwtIcFtzqU19Ywls5waGPI8d8aUeS0SET3KxAuB34kRu7Gh1VuRCjPDyqWhbcMsGI1VJ1fCRPH/wX3DrHjyX46N9XlBY5O65XAT0RFZEaPxYMVlpAvvxSoXjTIsteGqTp/LvAvbNXiuSx7dZiqRZkCfnOAy9B4HHFhhagy5d9WsxcmmXN5XZ75DHOunEPVecmC8ypz0XjbtZjjJ5H3qQLGcxHJb1CkHPGcghkpFFrIaRL/6ILBAsbA7zvBWLov7+/+QB/+8ZFpfJc5s7CKRWlFCfPCDhxI0JKyaDh8ql44TMtaJd2SLAAbAn8BNg5GvDRQLEIzUdNy6iYTIMgm+H3VXMYz3Vz8UAavqoHc0HEOpMZpSc0nyJYVgM0RNTixYGMltq5BEM4DvkdYlGcxkRg3xKsAcR1sEBJkwQbONFbaEVYCnfLwzOds3JxV4CiwLq8XZGLYwGFsyMEfgPEhZwZQC3xO1PPGamZiV3hNAcqFCJ8Ay+PqTSM7EO6/86PGv347Uo6xEFqD41isiepHhe9zXU8Pk71Ocf1sCg+4HVgNzCuVUpWjA1nz3B3vn7PxSNZ4AbjGYkJrjOPY0BqxAuNJ389eMjjk7204i3meLRoWop70ZeBJwIuvHLnGKnZ7R2LbU183fHVs2PFdo65G6SiR71QRUcCiBChpA/vFaGvRjd4E8EKUtcBNeSv+NLxtfV778011m3YeSmSciYyWU94QUJ24CIAVGLXo98UUBQAmvp26UFYDHcXoDo6azPrds5t3dSfSjkElArFMDYmuIhbEiqgVQRStQLWmaNgJYCXNZuAdou+qGSUXEvzQmty1fvfsDiMgseIhgqqoyBE1prUkWACOESJ8DHzJdEePRlHd31Pe8vb2mt3jgdgYoAIYBR/YY6DJJBKHS//f4BIA0sAbqlwMXJUXQuDYsNOb2lHd3JX2sqe/ogKCTjbwgkU1CxxE5E+gO51MnqjO5YpqZE5leGTSb+zNhawOleGpJydd/RxjX+yb1bzlYLJXmAp/FF7FqAqoBsAI0KmwxXHdzxS+u7mzswU4MT+Tof3gwf/02RcxpaCzz6ltqLKvJD19zAju5KYOlfCntsTOF7+t33pkyPUdE9U6VUVExoERVdKCdomY1hCOqxCM9veHlbW14Di0tbdP2So9DU7y8M7nTAbHfFBfGSyt8PRaI5FjuwbcQx/+Uv3r34Ou7xp1VMkBaRE5BhwVkW7Xcw+j5KwNkFyouA71Cxbwx759+TLqzEjHKo8yx97RUBm+7TnMG/Rl+N3tNU1rm6v3ey5pgaOo/q3QU5FI9I6OjfkiguN5nLt8OZs//XRmx5wpWIDvnp6duLR+9KXaZPjgjs7k1mebGtals6bDiPY7IpnusrKReb5PeVkZB1pbi57/P6fByVKXDPzOtPtmwtX1f/Qm0u3pRL/b0+VXL2xEVbm+r49v+vtLnv8f2Pk64kl5WH4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjg6NTkrMDA6MDAzyLlbAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIzOjAyOjM4KzAwOjAwnw8TLgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAASUVORK5CYII=",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]},{src:"data:image/png;base64,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",anchor:[.5,1]}]};var cv=vt.getLogger("DrawingDOM"),uv={_addUID:function(e){return this._uid?e+"-"+this._uid:e},_createMainContainerElement:function(){var e=document.createElement("div");return e.id=this._addUID("GPdrawing"),e.className="GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen",e},_createShowDrawingPictoElement:function(){var e=this,t=document.createElement("button"),n=document.createElement("span");return t.appendChild(n),t.id=this._addUID("GPshowDrawingPicto"),t.className="GPshowOpen GPshowAdvancedToolPicto GPshowDrawingPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-drawing fr-btn fr-btn--tertiary",t.setAttribute("aria-label",this.options.labels.control),t.setAttribute("tabindex","0"),t.setAttribute("aria-pressed",!1),t.setAttribute("type","button"),t.addEventListener?t.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowDrawingClick(t)})):t.attachEvent&&t.attachEvent("onclick",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowDrawingClick(t)})),t},_createDrawingPanelElement:function(){var e=document.createElement("dialog");return e.id=this._addUID("GPdrawingPanel"),e.className="GPpanel gpf-panel fr-modal",e},_createDrawingPanelDivElement:function(){var e=document.createElement("div");return e.className="gpf-panel__body fr-modal__body",e},_createDrawingToolsDivSections:function(){var e=document.createElement("div");return e.className="gpf-panel__content fr-modal__content",e},_createDrawingPanelHeaderElement:function(){var e=document.createElement("div");e.className="GPpanelHeader gpf-panel__header fr-modal__header fr-m-1w";var t=document.createElement("div");t.className="GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w",t.innerHTML=this.options.controlLabel||"Annoter la carte",e.appendChild(t);var n=document.createElement("button");n.id=this._addUID("GPdrawingPanelClose"),n.className="GPpanelClose GPdrawingPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w",n.title="Fermer le panneau";var r=this;n.addEventListener?n.addEventListener("click",(function(){document.getElementById(r._addUID("GPshowDrawingPicto")).click()}),!1):n.attachEvent&&n.attachEvent("onclick",(function(){document.getElementById(r._addUID("GPshowDrawingPicto")).click()}));var i=document.createElement("span");return i.className="GPelementHidden gpf-visible",i.innerText="Fermer",n.appendChild(i),e.appendChild(n),e},_createDrawingToolsSections:function(){var e=[];return this.dtOptions={},this.options.tools.points&&(this.dtOptions.points={label:this.options.labels.points,active:!1,panel:"draw",id:"point"}),this.options.tools.lines&&(this.dtOptions.lines={label:this.options.labels.lines,active:!1,panel:"draw",id:"line"}),this.options.tools.polygons&&(this.dtOptions.polygons={label:this.options.labels.polygons,active:!1,panel:"draw",id:"polygon"}),this.options.tools.holes&&(this.dtOptions.holes={label:this.options.labels.holes,active:!1,panel:"draw",id:"holes"}),this.options.tools.text&&(this.dtOptions.text={label:this.options.labels.text,active:!1,panel:"draw",id:"text"}),this.options.tools.edit&&(this.dtOptions.edit={label:this.options.labels.edit,active:!1,panel:"edit",id:"edit"}),this.options.tools.display&&(this.dtOptions.display={label:this.options.labels.display,active:!1,panel:"edit",id:"display"}),this.options.tools.tooltip&&(this.dtOptions.tooltip={label:this.options.labels.tooltip,active:!1,panel:"edit",id:"tooltip"}),this.options.tools.remove&&(this.dtOptions.remove={label:this.options.labels.remove,active:!1,panel:"edit",id:"remove"}),(this.dtOptions.points||this.dtOptions.lines||this.dtOptions.polygons||this.dtOptions.text)&&e.push(this._createDrawingToolSection(this.options.labels.creatingTools,"draw")),(this.dtOptions.edit||this.dtOptions.display||this.dtOptions.tooltip||this.dtOptions.remove)&&e.push(this._createDrawingToolSection(this.options.labels.editingTools,"edit")),this.options.tools.export&&e.push(this._createSavingSection(this.options.labels.export,this.options.labels.exportTitle)),e},_createDrawingToolSection:function(e,t){var n=document.createElement("div");n.className="drawing-tool-section fr-m-1w";var r=document.createElement("p");r.className="drawing-tool-section-title fr-m-1w",r.innerHTML=e,n.appendChild(r);var i=document.createElement("div");i.className="drawing-tools-flex-display fr-m-1w";var o=this;function a(e){o._handleDOMToolClick(e,this.id,o),o._handleToolClick(e,this.id,o)}for(var s in this.dtOptions)if(this.dtOptions[s].panel===t){var l=document.createElement("button");l.className="drawing-tool fr-m-1w fr-btn fr-btn--tertiary gpf-btn--tertiary",l.id=this._addUID("drawing-tool-"+this.dtOptions[s].id),l.title=this.dtOptions[s].label,l.addEventListener("click",a),i.appendChild(l)}return n.appendChild(i),n},_createSavingSection:function(e,t){var n=document.createElement("div");n.className="drawing-tool-section drawing-tools-flex-display fr-m-1w";var r=document.createElement("button");r.title=t,r.className="tool-form-submit drawing-button fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w",r.id=this._addUID("drawing-export"),r.setAttribute("type","button"),r.textContent=e;var i=this;return r.onclick=function(){i.onExportFeatureClick()},n.appendChild(r),n},_createMarkersChooser:function(e){var t=document.createElement("div");t.className=e.className;for(var n=0;n1))return Iv.log("Wrong value ("+e.defaultStyles[r]+") for defaultStyles.polyFillOpactity. Must be between 0 and 1"),void(n.options.defaultStyles[r]=t.DefaultStyles[r]);if("strokeWidth"===r||"polyStrokeWidth"===r){var i=parseInt(e.defaultStyles[r],10);if(isNaN(i)||i<0)return Iv.log("Wrong value ("+e.defaultStyles[r]+") for defaultStyles.strokeWidth. Must be a positive interger value."),void(n.options.defaultStyles[r]=t.DefaultStyles[r]);n.options.defaultStyles[r]=i}if("markerSize"===r){var o=parseFloat(e.defaultStyles[r]);if(isNaN(o)||o<0)return Iv.log("Wrong value ("+e.defaultStyles[r]+") for defaultStyles.markerSize. Must be a positive value."),void(n.options.defaultStyles[r]=t.DefaultStyles[r]);n.options.defaultStyles[r]=o}}else n.options.defaultStyles[r]=t.DefaultStyles[r]})),this.interactionCurrent=null,this.interactionSelectEdit=null,this.featuresCollectionSelected=null,this.stylingOvl=null,this.popupOvl=null,this.layer=null,this.options.layer&&this.options.layer instanceof ii()&&(this.layer=this.options.layer),this._isDesktop=this._detectSupport(),this.options.popup||(this.options.popup={display:!0,apply:null})}},{key:"_createEmptyLayer",value:function(){var e=new(iv()),t=new(ii())({source:new(a())({features:e}),title:"Mon Croquis"});t.gpResultLayerId="drawing",this.setLayer(t)}},{key:"_detectSupport",value:function(){var e=!0,t=window.navigator.userAgent.toLowerCase();return-1===t.indexOf("iphone")&&-1===t.indexOf("ipod")&&-1===t.indexOf("ipad")&&-1===t.indexOf("android")&&-1===t.indexOf("mobile")&&-1===t.indexOf("blackberry")&&-1===t.indexOf("tablet")&&-1===t.indexOf("phone")&&-1===t.indexOf("touch")||(e=!1),-1===t.indexOf("msie")&&-1===t.indexOf("trident")||(e=!0),e}},{key:"_initContainer",value:function(){var e=this._createMainContainerElement(),t=this._showDrawingButton=this._createShowDrawingPictoElement();e.appendChild(t);var n=this._drawingPanel=this._createDrawingPanelElement(),r=this._createDrawingPanelDivElement();n.appendChild(r);var i=this._drawingPanelHeader=this._createDrawingPanelHeaderElement();r.appendChild(i);var o=this._createDrawingToolsDivSections();r.appendChild(o);for(var a=this._createDrawingToolsSections(),s=0;s0){var o={};o[t]=n.replace(/\n/g,"
"),e.setProperties(o)}},a=null,s=!0,l=this.options.popup.function;l&&"function"==typeof l&&(a=l.call(i,{feature:e,geomType:t,closeFunc:function(){o(null,!1)},saveFunc:function(e){o(e,!0)}}))&&(s=!1,a.tabIndex=-1,a.onblur=function(){i.getMap().removeOverlay(i.popupOvl),i.popupOvl=null}),s&&(a=this._createLabelDiv({applyFunc:o,inputId:this._addUID("att-input"),placeholder:"Saisir une description...",measure:this.options.tools.measure?e.getProperties().measure:null,geomType:t,key:"description"})),this.popupOvl&&(this.getMap().removeOverlay(this.popupOvl),this.popupOvl=null),this.popupOvl=new(n())({element:a,positioning:"top-center"}),this.getMap().addOverlay(this.popupOvl);var c=e.getGeometry().getExtent();this.popupOvl.setPosition([(c[0]+c[2])/2,(c[1]+c[3])/2]),document.getElementById(this._addUID("att-input"))&&document.getElementById(this._addUID("att-input")).focus()}}},{key:"_createRemoveInteraction",value:function(){var e=this,t=new h.Select({layers:[this.layer],style:!1});return t.on("select",(function(t){t&&t.selected&&0!==t.selected.length&&(e.layer.getSource().removeFeature(t.selected[0]),e.getMap().removeInteraction(e.interactionCurrent),e.interactionCurrent=e._createRemoveInteraction(),e.getMap().addInteraction(e.interactionCurrent))})),t}},{key:"_createStylingInteraction",value:function(){var e=this,t=new h.Select({layers:[this.layer],style:!1});return t.on("select",(function(t){if(e.stylingOvl&&e.getMap().removeOverlay(e.stylingOvl),t&&t.selected&&0!==t.selected.length){var r=null,i=null,o=null,a=null,s={},l=t.selected[0].getGeometry(),c=t.selected[0].getStyle();if(l instanceof ov.Point||l instanceof ov.MultiPoint){if(c&&c.getImage()&&"function"==typeof c.getImage().getSrc&&c.getImage().getSrc()!==e.options.defaultStyles.textIcon1x1.src&&(a="Point","function"==typeof c.getImage().getSrc?(s.markerSrc=c.getImage().getSrc(),s.markerSize=c.getImage().getScale()||1,s.markerAnchor=c.getImage().getAnchor(),c.getImage().getColor()?(r=c.getImage().getColor(),Array.isArray(r)?r="rgba("+r.join()+")":s.markerColor=r,i=xt.isRGB(r)?xt.rgbaToHex(r):{hex:r,opacity:1},s.markerColor=i.hex,s.markerOpacity=i.opacity):s.markerColor=e.options.markersList[0].color||"#ffffff"):(s.markerSrc=e.options.markersList[0].src,s.markerSize=e.options.markersList[0].scale||1,s.markerColor=e.options.markersList[0].color||"#ffffff",s.markerAnchor=e.options.markersList[0].anchor),s.markerCustom=!e._getsMarkersOptionsFromSrc(s.markerSrc)),c&&c.getText()){var u=t.selected[0].getProperties().name;if(u&&(a="Point"===a?"Point&Text":"Text",c.getText().getStroke()&&c.getText().getStroke().getColor()&&(r=c.getText().getStroke().getColor(),Array.isArray(r)?r="rgba("+r.join()+")":s.strokeColor=r,i=xt.isRGB(r)?xt.rgbaToHex(r):{hex:r,opacity:1},s.strokeColor=i.hex,s.strokeOpacity=i.opacity),c.getText().getStroke()&&c.getText().getStroke().getWidth()&&(s.strokeWidth=c.getText().getStroke().getWidth()),c.getText().getFill()&&c.getText().getFill().getColor()&&(r=c.getText().getFill().getColor(),Array.isArray(r)?r="rgba("+r.join()+")":s.fillColor=r,i=xt.isRGB(r)?xt.rgbaToHex(r):{hex:r,opacity:1},s.fillColor=i.hex,s.fillOpacity=i.opacity),s.strokeColor=s.hasOwnProperty("strokeColor")?s.strokeColor:e.options.defaultStyles.textStrokeColor,s.strokeWidth=s.hasOwnProperty("strokeWidth")?s.strokeWidth:e.options.defaultStyles.textStrokeWidth,s.fillColor=s.hasOwnProperty("fillColor")?s.fillColor:e.options.defaultStyles.textFillColor,"Point&Text"===a)){c.getText().getText()||c.getText().setText(u);var d=t.selected[0].get("checked");s.labelDisplay=void 0===d?e.options.defaultStyles.labelDisplay:d}}}else l instanceof ov.LineString||l instanceof ov.MultiLineString?(a="Line",c&&c.getStroke()&&(c.getStroke().getWidth()&&(s.strokeWidth=c.getStroke().getWidth()),c.getStroke().getColor()&&(r=c.getStroke().getColor(),Array.isArray(r)?r="rgba("+r.join()+")":s.strokeColor=r,i=xt.isRGB(r)?xt.rgbaToHex(r):{hex:r,opacity:1},s.strokeColor=i.hex,s.strokeOpacity=i.opacity)),s.strokeWidth=s.hasOwnProperty("strokeWidth")?s.strokeWidth:e.options.defaultStyles.strokeWidth,s.strokeColor=s.hasOwnProperty("strokeColor")?s.strokeColor:e.options.defaultStyles.strokeColor):(l instanceof ov.Polygon||l instanceof ov.MultiPolygon)&&(a="Polygon",c&&c.getStroke()&&(c.getStroke().getWidth()&&(s.strokeWidth=c.getStroke().getWidth()),c.getStroke().getColor()&&(r=c.getStroke().getColor(),Array.isArray(r)?r="rgba("+r.join()+")":s.strokeColor=r,i=xt.isRGB(r)?xt.rgbaToHex(r):{hex:r,opacity:1},s.strokeColor=i.hex,s.strokeOpacity=i.opacity)),c&&c.getFill()&&c.getFill().getColor()&&(r=c.getFill().getColor(),Array.isArray(r)?r="rgba("+r.join()+")":s.fillColor=r,i=xt.isRGB(r)?xt.rgbaToHex(r):{hex:r,opacity:1},s.fillColor=i.hex,s.fillOpacity=i.opacity),s.strokeWidth=s.hasOwnProperty("strokeWidth")?s.strokeWidth:e.options.defaultStyles.polyStrokeWidth,s.strokeColor=s.hasOwnProperty("strokeColor")?s.strokeColor:e.options.defaultStyles.polyStrokeColor,s.fillColor=s.hasOwnProperty("fillColor")?s.fillColor:e.options.defaultStyles.polyFillColor,s.fillOpacity=s.hasOwnProperty("fillOpacity")?s.fillOpacity:e.options.defaultStyles.polyFillOpacity);if(a){var p=e,h=e._createStylingDiv({geomType:a,initValues:s,applyFunc:function(e){if("cancel"!==e){var n="apply"!==e,r=document.getElementById(p._addUID("fillColor")),i=document.getElementById(p._addUID("fillOpacity")),l=document.getElementById(p._addUID("strokeColor")),u=document.getElementById(p._addUID("strokeWidth")),d=document.getElementById(p._addUID("markerSize"));switch(a.toLowerCase()){case"text":n?(p.options.defaultStyles.textStrokeColor=l.value,p.options.defaultStyles.textStrokeWidth=u.value,p.options.defaultStyles.textFillColor=r.value):t.selected[0].setStyle(new St.Style({text:new St.Text({font:"16px sans",textAlign:"left",text:c.getText().getText(),fill:new St.Fill({color:r.value}),stroke:new St.Stroke({color:l.value,width:parseInt(u.value,10)})})}));break;case"point&text":case"point":var h=document.querySelector("input[type='checkbox']"),g=null,f=parseInt(d.value,10)/10,m=document.querySelector("input[name='marker']:checked");if(m&&((g=p._getsMarkersOptionsFromSrc(m.value)).scale=f),n){if(p.options.defaultStyles.markerSize=f,p.options.markersList.length>1){var y=p.options.markersList.findIndex((function(e){return e===g}));y>0&&(p.options.markersList.splice(y,1),p.options.markersList.splice(0,0,g))}"point&text"===a.toLowerCase()&&(p.options.defaultStyles.textStrokeColor=s.strokeColor,p.options.defaultStyles.textStrokeWidth=s.strokeWidth,p.options.defaultStyles.textFillColor=s.fillColor,p.options.defaultStyles.labelDisplay=s.labelDisplay)}else{var v={};"point&text"===a.toLowerCase()&&(t.selected[0].set("checked",h.checked),v={text:new St.Text({font:"16px sans",textAlign:"left",text:h.checked?t.selected[0].get("name"):"",fill:new St.Fill({color:s.fillColor}),stroke:new St.Stroke({color:s.strokeColor,width:parseInt(s.strokeWidth,10)})})}),g?t.selected[0].setStyle(new St.Style(Object.assign({image:new St.Icon(p._getIconStyleOptions(g))},v))):t.selected[0].setStyle(new St.Style(Object.assign({image:new St.Icon({src:s.markerSrc,anchor:s.markerAnchor,anchorOrigin:"top-left",anchorXUnits:"pixels",anchorYUnits:"pixels",scale:f})},v)))}break;case"line":n?(p.options.defaultStyles.strokeColor=l.value,p.options.defaultStyles.strokeWidth=parseInt(u.value,10)):t.selected[0].setStyle(new St.Style({stroke:new St.Stroke({width:parseInt(u.value,10),color:l.value})}));break;case"polygon":var A=parseInt(i.value,10)/10;n?(p.options.defaultStyles.polyStrokeColor=l.value,p.options.defaultStyles.polyFillColor=r.value,p.options.defaultStyles.polyFillOpacity=A,p.options.defaultStyles.polyStrokeWidth=parseInt(u.value,10)):t.selected[0].setStyle(new St.Style({stroke:new St.Stroke({width:parseInt(u.value,10),color:l.value}),fill:new St.Fill({color:xt.hexToRgba(r.value,A)})}))}n||p.getMap().removeOverlay(o)}else p.getMap().removeOverlay(o)}});o=new(n())({element:h,positioning:"top-center"}),e.getMap().addOverlay(o),o.setPosition(t.mapBrowserEvent.coordinate),e.stylingOvl=o,e.getMap().removeInteraction(e.interactionCurrent),e.interactionCurrent=e._createStylingInteraction(),e.getMap().addInteraction(e.interactionCurrent)}else Iv.log("Unhandled geometry type for styling.")}})),t}},{key:"_createLabelInteraction",value:function(){var e=this,t=new h.Select({layers:[this.layer],style:!1});return t.on("select",(function(t){if(e.labelOvl&&e.getMap().removeOverlay(e.labelOvl),t&&t.selected&&0!==t.selected.length){var r=null,i=null,o=null,a=null,s=t.selected[0].getGeometry(),l=t.selected[0].getStyle();if(s instanceof ov.Point||s instanceof ov.MultiPoint){var c=t.selected[0].getProperties().name;l&&l.getText()&&c?i="Text":l&&l.getImage()&&(i="Point")}else if(s instanceof ov.LineString||s instanceof ov.MultiLineString)i="Line";else{if(!(s instanceof ov.Polygon||s instanceof ov.MultiPolygon))return void Iv.log("Geometry type for styling not supported .");i="Polygon"}if(i){if("Text"===i)o=l.getText().getText();else{var u=t.selected[0].getProperties();u&&(u.hasOwnProperty("description")||u.hasOwnProperty("desc"))&&(o=u.description||u.desc),u&&u.hasOwnProperty("measure")&&(a=u.measure)}var d=e,p=e._createLabelDiv({applyFunc:function(e,n,o){if(d.getMap().removeOverlay(r),o){var a=t.selected[0];if("Text"===i){var s=a.getStyle();return s.getText().setText(n),a.setProperties({name:n}),void a.setStyle(s)}var l={};l[e]=n.replace(/\n/g,"
"),a.setProperties(l)}},inputId:e._addUID("label-input"),placeholder:"Text"===i?"Saisir un label...":"Saisir une description...",text:o,key:"description",measure:e.options.tools.measure?a:null,geomType:i});r=new(n())({element:p,positioning:"top-center"}),e.getMap().addOverlay(r),r.setPosition(t.mapBrowserEvent.coordinate),document.getElementById(e._addUID("label-input")).focus(),e.labelOvl=r,e.getMap().removeInteraction(e.interactionCurrent),e.interactionCurrent=e._createLabelInteraction(),e.getMap().addInteraction(e.interactionCurrent)}else Iv.log("Unhandled geometry type for styling.")}})),t}},{key:"_updateMeasure",value:function(e,t){Iv.log(e);var n=null,r=this.getMap().getView().getProjection();function i(e,t){t=t||2;var n=Math.pow(10,t);return Math.round(e*n)/n}var o=t||e.getProperties().type;switch(o){case"Point":var a=e.getGeometry().getCoordinates(),s=(0,Dr.transform)(a,r,"EPSG:4326");n="lon : ",n+=i(s[0],4)+"°",n+=" / ",n+="lat : ",n+=i(s[1],4)+"°";break;case"LineString":for(var l=0,c=e.getGeometry().getCoordinates(),u=0,d=c.length-1;u1e3?i(l/1e3,3)+" km":i(l,3)+" m";break;case"Polygon":var g=0,f=e.getGeometry().clone(),m=f.getLinearRing(0).getCoordinates();g=Math.abs((0,sv.getArea)(new ov.Polygon([m])));var y=f.getLinearRings();if(y.length>1)for(var v=1;v1e6?i(g/1e6,3)+" km^2":i(g,2)+" m^2"}e.setProperties({measure:n,type:o})}},{key:"_handleToolClick",value:function(e,t,r){var i=this,o=r.getMap();if(o){switch(Th.unset(o,{current:"Drawing"}),r.interactionCurrent&&(o.removeInteraction(r.interactionCurrent),r.interactionCurrent=null),r.interactionSelectEdit&&(o.removeInteraction(r.interactionSelectEdit),r.interactionSelectEdit=null),r.popupOvl&&(r.getMap().removeOverlay(r.popupOvl),r.popupOvl=null),this.layer||this._createEmptyLayer(),t){case this._addUID("drawing-tool-point"):r.dtOptions.points.active&&(r.interactionCurrent=new h.Draw({stopClick:!0,source:r.layer.getSource(),style:new St.Style({image:new St.Icon(this._getIconStyleOptions(this.options.markersList[0]))}),type:"Point"}),r.interactionCurrent.on("drawend",(function(e){r._drawEndFeature(e.feature,"Point")}),r));break;case this._addUID("drawing-tool-line"):r.dtOptions.lines.active&&(r.interactionCurrent=new h.Draw({stopClick:!0,source:r.layer.getSource(),style:new St.Style({image:new St.Circle({radius:this.options.cursorStyle.radius,stroke:new St.Stroke({color:this.options.cursorStyle.strokeColor,width:this.options.cursorStyle.strokeWidth}),fill:new St.Fill({color:this.options.cursorStyle.fillColor})}),stroke:new St.Stroke({color:this.options.defaultStyles.strokeColor,width:this.options.defaultStyles.strokeWidth})}),type:"LineString"}),r.interactionCurrent.on("drawend",(function(e){r._drawEndFeature(e.feature,"LineString")}),r));break;case this._addUID("drawing-tool-polygon"):r.dtOptions.polygons.active&&(r.interactionCurrent=new h.Draw({stopClick:!0,source:r.layer.getSource(),style:new St.Style({image:new St.Circle({radius:this.options.cursorStyle.radius,stroke:new St.Stroke({color:this.options.cursorStyle.strokeColor,width:this.options.cursorStyle.strokeWidth}),fill:new St.Fill({color:this.options.cursorStyle.fillColor})}),stroke:new St.Stroke({color:this.options.defaultStyles.polyStrokeColor,width:this.options.defaultStyles.polyStrokeWidth}),fill:new St.Fill({color:xt.hexToRgba(this.options.defaultStyles.polyFillColor,this.options.defaultStyles.polyFillOpacity)})}),type:"Polygon"}),r.interactionCurrent.on("drawend",(function(e){r._drawEndFeature(e.feature,"Polygon")}),r));break;case this._addUID("drawing-tool-holes"):r.dtOptions.holes.active&&(r.interactionSelectEdit=new h.Select({stopClick:!0,condition:av.pointerMove,layers:[this.layer]}),r.interactionSelectEdit.setProperties({name:"Drawing",source:r}),o.addInteraction(r.interactionSelectEdit),r.interactionCurrent=new h.Draw({stopClick:!0,features:this.interactionSelectEdit.getFeatures(),style:new St.Style({image:new St.Circle({radius:this.options.cursorStyle.radius,stroke:new St.Stroke({color:this.options.cursorStyle.strokeColor,width:this.options.cursorStyle.strokeWidth}),fill:new St.Fill({color:this.options.cursorStyle.fillColor})}),stroke:new St.Stroke({color:this.options.defaultStyles.polyStrokeColor,width:this.options.defaultStyles.polyStrokeWidth}),fill:new St.Fill({color:xt.hexToRgba(this.options.defaultStyles.polyFillColor,this.options.defaultStyles.polyFillOpacity)})}),type:"Polygon"}),r.interactionCurrent.on("drawstart",(function(e){}),r),r.interactionCurrent.on("drawend",(function(e){var t=r.interactionSelectEdit.getFeatures();if(t.getLength()){for(var n=t.item(0),i=e.feature.getGeometry().getCoordinates()[0],o=!0,a=0;a2?(document.getElementById(t._addUID("GPlocationAutoCompleteList_"+r)).classList.replace("GPelementHidden","GPelementVisible"),document.getElementById(t._addUID("GPlocationAutoCompleteList_"+r)).classList.replace("gpf-hidden","gpf-visible")):(document.getElementById(t._addUID("GPlocationAutoCompleteList_"+r)).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPlocationAutoCompleteList_"+r)).classList.replace("gpf-visible","gpf-hidden")),t.onAutoCompleteSearchText(e)}})),n.addEventListener("keydown",(function(n){var r=n.which||n.keyCode,i=document.getElementById(t._addUID("GPlocationAutoCompleteResult_"+e));if(i){var o=i.getElementsByClassName("GPautoCompleteProposal current"),a=i.getElementsByClassName("GPautoCompleteProposal"),s=a.length;if(s){var l=null;if(!o.length)return(l=a[0]).className="GPautoCompleteProposal current",l.style.color="#000000",void(l.style["background-color"]="#CEDBEF");l=o[0];var c=parseInt(ju.index(l.id),10),u=c===s-1?a[0]:a[c+1],d=0===c?a[s-1]:a[c-1];switch(l.style["background-color"]="",l.style.color="",d.style["background-color"]="",d.style.color="",u.style["background-color"]="",u.style.color="",r){case 38:wv.log("arrow up"),l.className="GPautoCompleteProposal",d.className="GPautoCompleteProposal current",d.style.color="#000000",d.style["background-color"]="#CEDBEF";break;case 40:wv.log("arrow down"),l.className="GPautoCompleteProposal",u.className="GPautoCompleteProposal current",u.style.color="#000000",u.style["background-color"]="#CEDBEF";break;case 13:wv.log("enter"),l.click(n)}l.focus()}}})),n},_createLocationCoordinateInputElement:function(e){var t=this,n=document.createElement("input");return n.id=this._addUID("GPlocationOriginCoords_"+e),n.className="GPelementHidden gpf-input gpf-hidden fr-input",n.type="text",n.disabled=!1,n.addEventListener("click",(function(){var e=ju.index(this.id);document.getElementById(t._addUID("GPlocationOriginLabel_"+e)).click()})),n},_createLocationPointerShowInputElement:function(e){var t=document.createElement("input");return t.id=this._addUID("GPlocationOriginPointer_"+e),t.className="GPelementHidden gpf-hidden",t.type="checkbox",t},_createLocationPointerInputElement:function(e){var t=this,n=document.createElement("button");return n.id=this._addUID("GPlocationOriginPointerImg_"+e),n.htmlFor=this._addUID("GPlocationOriginPointer_"+e),n.className="GPlocationOriginPointerImg gpf-btn gpf-btn-icon-pointer fr-btn",n.title="Pointer un lieu sur la carte",n.setAttribute("type","button"),n.addEventListener("click",(function(e){e.preventDefault(),e.stopPropagation();var n,r,i,o=ju.index(this.id),a=document.getElementsByClassName(t._addUID("GPlocationPoint"));for(n=0;n",display:!0,addOption:!1,removeOption:!1},displayInfo:!0,autocompleteOptions:{}},rn.mergeParams(this.options,e),this._uid=this.options.tag.groupId||ju.generate(),this._map=null,this._inputsContainer=null,this._buttonLabel=null,this._inputAutoComplete=null,this._inputShowPointerContainer=null,this._inputShowPointer=null,this._inputCoordinateContainer=null,this._addPointElement=null,this._removePointElement=null,this._coordinate=null,this._suggestedContainer=null,this._suggestedList=null,this._suggestedLocations=[],this._currentLocation=null,this._initMarker(),this._resources={},this.listenerKey=null}},{key:"_initMarker",value:function(){if(this._marker=null,this._markerUrl="",this._markerOffset=[0,0],this.options.tag.markerOpts&&this.options.tag.markerOpts.url){this._markerUrl=this.options.tag.markerOpts.url;var e=this.options.tag.markerOpts.offset;e&&(Array.isArray(e)&&2===e.length?this._markerOffset=e:Ov.log("markerOpts.offset should be an array. e.g. : [0,0]"))}else this._markerUrl=Gt.lightOrange,this._markerOffset=Gt.defaultOffset}},{key:"getCoordinate",value:function(){return this._coordinate}},{key:"setCoordinate",value:function(e,t){var n=this.getMap().getView().getProjection().getCode();t||(t=n),this._setCoordinate(e,t),e=(0,Dr.transform)(e,t,n),this._setMarker([e[0],e[1]],null,!1)}},{key:"clear",value:function(){this.clearResults(),this._buttonLabel.click()}},{key:"clearResults",value:function(){this._currentLocation=null,this._coordinate=null,this._hideSuggestedLocation(),this._clearSuggestedLocation(),this._setMarker(),(0,bi.unByKey)(this.listenerKey)}},{key:"_initContainer",value:function(){var e=this,t=this.options.tag.id,n=this._createMainContainerElement(),r=this._inputsContainer=this._createLocationPointElement(t,this.options.tag.display);n.appendChild(r);var i=this._buttonLabel=this._createLocationPointLabelElement(t,this.options.tag.label);r.appendChild(i);var o=this._inputAutoComplete=this._createLocationAutoCompleteteInputElement(t);o.addEventListener?o.addEventListener("click",(function(){return e.onAutoCompleteInputClick()})):o.attachEvent&&o.attachEvent("onclick",(function(){return e.onAutoCompleteInputClick()})),r.appendChild(o);var a=this._inputCoordinateContainer=this._createLocationCoordinateInputElement(t);r.appendChild(a);var s=this._inputShowPointerContainer=this._createLocationPointerShowInputElement(t);r.appendChild(s);var l=this._inputShowPointer=this._createLocationPointerInputElement(t);if(r.appendChild(l),this.options.tag.addOption){var c=this._addPointElement=this._createLocationAddPointElement();r.appendChild(c)}if(this.options.tag.removeOption){var u=this._removePointElement=this._createLocationRemovePointElement(t);r.appendChild(u)}var d=this._suggestedContainer=this._createLocationAutoCompleteElement(t),p=this._suggestedList=this._createLocationAutoCompleteResultElement(t);return d.appendChild(p),n.appendChild(d),n}},{key:"onAutoCompleteInputClick",value:function(){this._inputAutoComplete&&this._inputAutoComplete.value.length>2&&this._displaySuggestedLocation()}},{key:"onAutoCompleteSearchText",value:function(e){var t=this,n=e.target.value;if(n){var r=this.options.autocompleteOptions||{},i=r.onSuccess||null,o=r.onFailure||null;if(this._currentLocation=n,n.length<3)this._clearSuggestedLocation();else{var a=this;this._requestAutoComplete({text:n,maximumResponses:5,onSuccess:function(e){if(e){var t=e.suggestedLocations;a._fillAutoCompletedLocationListContainer(t),i&&i.call(this,e)}},onFailure:function(e){a._clearSuggestedLocation(),Ov.log(e.message),o&&o.call(this,e)}});var s=this.getMap();s.on("click",(function(){return t._hideSuggestedLocation()})),s.on("pointerdrag",(function(){return t._hideSuggestedLocation()}))}}}},{key:"onAutoCompletedResultsItemClick",value:function(e){var t=ju.index(e.target.id);if(t){var n=[this._suggestedLocations[t].position.x,this._suggestedLocations[t].position.y];this._coordinate=n;var r={type:this._suggestedLocations[t].type,fields:this._suggestedLocations[t]},i=Nh.getSuggestedLocationFreeform(this._suggestedLocations[t]);this._setLabel(i);var o=this.getMap().getView().getProjection().getCode();"EPSG:4326"!==o&&(n=(0,Dr.transform)(n,"EPSG:4326",o)),this._setPosition(n),this._setMarker(n,r,this.options.displayInfo)}}},{key:"onActivateMapPointClick",value:function(){var e=this,t=this.getMap();this._inputShowPointerContainer.checked?(this.clearResults(),this.listenerKey=t.on("click",(function(t){return e.onMouseMapClick(t)})),this._setCursor("crosshair")):((0,bi.unByKey)(this.listenerKey),this._setCursor())}},{key:"onLocationClearPointClick",value:function(){this._setCursor(),this.clearResults()}},{key:"onLocationRemovePointClick",value:function(){this._setCursor(),this.clearResults()}},{key:"onLocationAddPointClick",value:function(e){Ov.log("onRouteAddPointClick",e)}},{key:"onMouseMapClick",value:function(e){var t=e.coordinate;if(e.map&&e.map.getView()){var n=e.map.getView().getProjection();this._setCoordinate(t,n),this._setMarker([t[0],t[1]],null,!1),this.onActivateMapPointClick(e)}}},{key:"_setLabel",value:function(e){this._inputAutoComplete.value=e}},{key:"_setCursor",value:function(e){var t=this.getMap().getTargetElement();t.style.cursor=e||null}},{key:"_setCoordinate",value:function(e,t){this._coordinate=(0,Dr.transform)(e,t,"EPSG:4326");var n=this._coordinate[0].toFixed(4),r=this._coordinate[1].toFixed(4)+" / "+n;this.GPdisplayCoordinate(r)}},{key:"_setPosition",value:function(e){this.getMap().getView().setCenter(e)}},{key:"_setMarker",value:function(e,t,r){var i=this.getMap();if(null!=this._marker&&(i.removeOverlay(this._marker),this._marker=null),e){var o=document.createElement("img");o.src=this._markerUrl,this._marker=new(n())({position:e,offset:this._markerOffset,element:o,stopEvent:!1}),i.addOverlay(this._marker),r&&Ov.log("marker information : ",t)}}},{key:"_clearSuggestedLocation",value:function(){if(this._suggestedLocations=[],this._suggestedList)for(;this._suggestedList.firstChild;)this._suggestedList.removeChild(this._suggestedList.firstChild)}},{key:"_hideSuggestedLocation",value:function(){this._suggestedContainer&&(this._suggestedContainer.classList.replace("GPelementVisible","GPelementHidden"),this._suggestedContainer.classList.replace("gpf-visible","gpf-hidden"))}},{key:"_displaySuggestedLocation",value:function(){this._suggestedContainer&&(this._suggestedContainer.classList.replace("GPelementHidden","GPelementVisible"),this._suggestedContainer.classList.replace("gpf-hidden","gpf-visible"))}},{key:"_requestAutoComplete",value:function(e){if(Ov.log("_requestAutoComplete()",e),e&&0!==Object.keys(e).length&&e.text){Ov.log(e);var t={};rn.assign(t,this.options.autocompleteOptions),rn.assign(t,e);var n=this._resources.AutoCompletion||null;n&&Array.isArray(n)&&(t.filterOptions||(t.filterOptions={}),t.filterOptions.type=n),t.apiKey=t.apiKey||this.options.apiKey,"boolean"!=typeof t.ssl&&("boolean"==typeof this.options.ssl?t.ssl=this.options.ssl:t.ssl=!0),Ov.log(t),mt.Services.autoComplete(t)}}},{key:"_fillAutoCompletedLocationListContainer",value:function(e){if(e&&0!==e.length){var t=this._suggestedList;if(t.childElementCount)for(;t.firstChild;)t.removeChild(t.firstChild);for(var n=0;n\n '));this.button=r.firstChild,this.button&&this.button.addEventListener("click",(function(t){return e.onClickButtonExport(t)})),n.appendChild(r.firstChild);var i=this.stringToHTML('\n
\n \n \n \n
\n '));if(this.menu=i.firstChild,this.menu){if(this.options.menu){var o=this.menu.className;this.menu.className=o.replace(this.menuClassHidden,"")}this.menu.querySelectorAll('input[type=radio][name="format"]').forEach((function(t){t.id.toUpperCase().includes(e.options.format.toUpperCase())&&(t.checked=!0),t.addEventListener("change",(function(t){e.setFormat(t.target.value)}))}))}n.appendChild(i.firstChild),this.container=n}},{key:"stringToHTML",value:function(e){if(function(){if(!window.DOMParser)return!1;var e=new DOMParser;try{e.parseFromString("x","text/html")}catch(e){return!1}return!0}())return(new DOMParser).parseFromString(e,"text/html").body;var t=document.createElement("div");return t.innerHTML=e,t}},{key:"isPluggableControl",value:function(){return!(!this.options.control||"function"!=typeof this.options.control.getContainer||"function"!=typeof this.options.control.getLayer)}},{key:"exportFeatures",value:function(e,t,n){var r=this,i=null;if(!e)return Wv.warn("Impossible to export : no layer is hosting features."),i;if(!e.getSource()||!e.getSource().getFeatures()||!e.getSource().getFeatures().length)return Wv.warn("Impossible to export : no features found."),i;e.getSource().getFeatures().forEach((function(e){!e.getStyle()&&r.options.control&&"function"==typeof r.options.control.getStyle&&e.setStyle(r.options.control.getStyle())}));var o={defaultStyle:n};t&&(o.extensions={"geoportail:compute":t});var a=null;switch(this.options.format.toUpperCase()){case"KML":o.writeStyles=!0,o.showPointNames=!0,a=new mn(o);break;case"GPX":a=new Tn(o);break;case"GEOJSON":a=new Hn(o)}if(!a)return Wv.warn("Impossible to export : format unknown !?"),i;var s=e.getSource().getProjection(),l=this.getMap();l&&(s=s||l.getView().getProjection());var c=e.getSource().getFeatures();return i=a.writeFeatures(c,{dataProjection:"EPSG:4326",featureProjection:s||"EPSG:3857"})}},{key:"onClickButtonExport",value:function(e){this.isPluggableControl()||Wv.warn("Componant not pluggable with the control !");var t=this.options.control&&void 0!==this.options.control.getLayer?this.options.control.getData():this.options.layer,n=this.options.control&&void 0!==this.options.control.getData?this.options.control.getData():{},r=this.options.control&&void 0!==this.options.control.getStyle?this.options.control.getStyle():{},i=this.exportFeatures(t,n,r);if(i&&"null"!==i)if(this.dispatchEvent({type:"export:compute",content:i}),this.options.onExport&&"function"==typeof this.options.onExport)this.options.onExport(i);else{var o=document.createElement("a");if(o.setAttribute("href","data:"+this.mimeType+";charset=utf-8,"+encodeURIComponent(i)),o.setAttribute("download",this.options.name+this.extension),document.createEvent){var a=document.createEvent("MouseEvents");a.initEvent("click",!0,!0),o.dispatchEvent(a)}else o.click()}}},{key:"getContainer",value:function(){return this.container}},{key:"setControl",value:function(e){this.options.control=e}},{key:"setTarget",value:function(e){this.options.target=e}},{key:"setFormat",value:function(e){switch(this.options.format=e.toUpperCase(),this.options.format){case"KML":this.extension=".kml",this.mimeType="application/vnd.google-earth.kml+xml";break;case"GPX":this.extension=".gpx",this.mimeType="application/gpx+xml";break;case"GEOJSON":this.extension=".geojson",this.mimeType="application/geo+json";break;default:this.options.format="GEOJSON",this.extension=".geojson",this.mimeType="application/geo+json"}}},{key:"setName",value:function(e){this.options.name=e}},{key:"setTitle",value:function(e){this.options.title=e,this.button&&(this.button.value=this.options.menu?this.icon+e:e)}},{key:"setMenu",value:function(e){var t=this;if(this.options.menu=e,this.button&&(this.button.value=this.options.menu?this.icon+this.options.title:this.options.title),this.menu&&this.options.menu){var n=this.menu.className;this.menu.className=n.replace(this.menuClassHidden,""),this.menu.querySelectorAll('input[type=radio][name="format"]').forEach((function(e){e.id.toUpperCase().includes(t.options.format.toUpperCase())&&(e.checked=!0)}))}}},{key:"setLayer",value:function(e){this.options.layer=e}}],r&&Bv(n.prototype,r),i&&Bv(n,i),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,i}(mu());Object.assign(Yv.prototype,Uv),Object.assign(Yv.prototype,gu);const Zv=Yv;window.ol&&window.ol.control&&(window.ol.control.Export=Yv);var Jv=vt.getLogger("RouteDOM"),Xv={_addUID:function(e){return this._uid?e+"-"+this._uid:e},_createMainContainerElement:function(){var e=document.createElement("div");return e.id=this._addUID("GProute"),e.className="GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen",e},_createShowRoutePictoElement:function(){var e=this,t=document.createElement("button"),n=document.createElement("span");return t.appendChild(n),t.id=this._addUID("GPshowRoutePicto"),t.className="GPshowOpen GPshowAdvancedToolPicto GPshowRoutePicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-route fr-btn fr-btn--tertiary",t.setAttribute("aria-label","Ouvrir le calcul d'itinéraire"),t.setAttribute("tabindex","0"),t.setAttribute("aria-pressed",!1),t.setAttribute("type","button"),t.addEventListener?t.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowRoutePanelClick(t)})):t.attachEvent&&t.attachEvent("onclick",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowRoutePanelClick(t)})),t},_createRoutePanelElement:function(){var e=document.createElement("dialog");return e.id=this._addUID("GProutePanel"),e.className="GPpanel gpf-panel fr-modal",e},_createRoutePanelDivElement:function(){var e=document.createElement("div");return e.className="gpf-panel__body fr-modal__body",e},_createRoutePanelHeaderElement:function(){var e=this,t=document.createElement("div");t.className="GPpanelHeader gpf-panel__header fr-modal__header";var n=document.createElement("div");n.className="GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w",n.innerHTML="Calcul d'itinéraire",t.appendChild(n);var r=document.createElement("button");r.id=this._addUID("GProutePanelClose"),r.className="GPpanelClose GProutePanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w",r.title="Masquer le panneau",r.addEventListener?r.addEventListener("click",(function(){document.getElementById(e._addUID("GPshowRoutePicto")).click()}),!1):r.attachEvent&&r.attachEvent("onclick",(function(){document.getElementById(e._addUID("GPshowRoutePicto")).click()}));var i=document.createElement("span");return i.className="GPelementHidden gpf-visible",i.innerText="Fermer",r.appendChild(i),t.appendChild(r),t},_createRoutePanelFooterElement:function(){var e=document.createElement("div");return e.className="GPpanelFooter gpf-panel__footer fr-modal__footer",e},_createRoutePanelFormPointLabel:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=document.createElement("p");n.innerHTML=e;var r=t?"":" GPelementHidden gpf-hidden";return n.className="GProutePointLabelP gpf-label fr-label"+r,n},_createRoutePanelFormElement:function(){var e=this,t=document.createElement("form");return t.id=this._addUID("GProuteForm"),t.className="gpf-panel__content fr-modal__content",t.setAttribute("onkeypress","return event.keyCode != 13;"),t.addEventListener("submit",(function(t){Jv.log(t),t.preventDefault();var n=document.getElementsByClassName(e._addUID("GPlocationPoint")),r=n[0].childNodes[0].id,i=n[n.length-1].childNodes[0].id,o=ju.index(r),a=ju.index(i);if(""===document.getElementById(e._addUID("GPlocationOrigin_"+o)).value&&""===document.getElementById(e._addUID("GPlocationOriginCoords_"+o)).value||""===document.getElementById(e._addUID("GPlocationOrigin_"+a)).value&&""===document.getElementById(e._addUID("GPlocationOriginCoords_"+a)).value)return!1;e._addRouteResultsStagesValuesElement(n);var s=null;document.getElementById(e._addUID("GProuteComputationChoice"))&&(document.getElementById(e._addUID("GProuteComputationFastest"))&&document.getElementById(e._addUID("GProuteComputationFastest")).checked&&(s=document.getElementById(e._addUID("GProuteComputationFastest")).value),document.getElementById(e._addUID("GProuteComputationShortest"))&&document.getElementById(e._addUID("GProuteComputationShortest")).checked&&(s=document.getElementById(e._addUID("GProuteComputationShortest")).value));var l=null;document.getElementById(e._addUID("GProuteTransportCar"))&&document.getElementById(e._addUID("GProuteTransportCar")).checked&&(l=document.getElementById(e._addUID("GProuteTransportCar")).value),document.getElementById(e._addUID("GProuteTransportPedestrian"))&&document.getElementById(e._addUID("GProuteTransportPedestrian")).checked&&(l=document.getElementById(e._addUID("GProuteTransportPedestrian")).value);for(var c=[],u=document.getElementsByClassName("GProuteExclusionsOption"),d=0;d2?document.getElementById("GProuteAutoCompleteList"+n).style.display="block":document.getElementById("GProuteAutoCompleteList"+n).style.display="none",r.onAutoCompleteSearchText(e)}})),a.addEventListener("blur",(function(){var e=this.id.charAt(this.id.length-1);document.getElementById("GProuteAutoCompleteList"+e).style.display="none"})),i.appendChild(a);var s=document.createElement("input");s.id="GProuteOriginCoords"+e,s.className="GPelementHidden gpf-hidden",s.type="text",s.disabled=!0,i.appendChild(s);var l=document.createElement("input");l.id="GProuteOriginPointer"+e,l.type="checkbox",i.appendChild(l);var c=document.createElement("label");return c.id="GProuteOriginPointerImg"+e,c.htmlFor="GProuteOriginPointer"+e,c.className="GProuteOriginPointerImg",c.title="Pointer un lieu sur la carte",c.addEventListener("click",(function(e){e.preventDefault(),e.stopPropagation();var t,n=this.id.charAt(this.id.length-1);for(t=1;t<8;t++)n!==t&&(document.getElementById("GProuteOriginPointer"+t).checked=!1,"Pointer un lieu sur la carte"===document.getElementById("GProuteOriginCoords"+t).value&&(document.getElementById("GProuteOriginCoords"+t).value="",document.getElementById("GProuteOrigin"+t).className="GPelementVisible gpf-visible",document.getElementById("GProuteOriginCoords"+t).className="GPelementHidden gpf-hidden"));if(document.getElementById("GProuteOriginPointer"+n).checked){for(document.getElementById("GProuteOriginCoords"+n).value="",t=1;t<8;t++)document.getElementById("GProutePoint"+t).style.display="flex";document.getElementById("GProuteForm").className="gpf-panel__content fr-modal__content",document.getElementById("GProuteOriginPointer"+n).checked=!1,document.getElementById("GProuteOrigin"+n).className="GPelementVisible gpf-visible",document.getElementById("GProuteOriginCoords"+n).className="GPelementHidden gpf-hidden"}else{for(document.getElementById("GProuteOriginCoords"+n).value="Pointer un lieu sur la carte",t=1;t<8;t++)document.getElementById("GProutePoint"+t).style.display=n===t?"flex":"none";document.getElementById("GProuteForm").className="GProuteFormMini gpf-panel__content fr-modal__content",document.getElementById("GProuteOriginPointer"+n).checked=!0,document.getElementById("GProuteOrigin"+n).className="GPelementHidden gpf-hidden",document.getElementById("GProuteOriginCoords"+n).className="GPelementVisible gpf-visible"}r.onRouteMapPointClick(e)})),i.appendChild(c),i},_createRoutePanelFormRemoveStageElement:function(e){var t=this,n=document.createElement("div");return n.id="GProuteStageRemove"+e,n.className="GProuteStageRemove",n.title="Supprimer l'étape",1!==e&&7!==e&&n.addEventListener("click",(function(e){var n=this.id.charAt(this.id.length-1);document.getElementById("GProutePoint"+n).className="GPflexInput GProuteStageFlexInputHidden",document.getElementById("GProuteOrigin"+n).value="",document.getElementById("GProuteOrigin"+n).className="GPelementVisible gpf-visible",document.getElementById("GProuteOriginCoords"+n).value="",document.getElementById("GProuteOriginCoords"+n).className="GPelementHidden gpf-hidden",document.getElementById("GProuteStageAdd").style.display="",t.onRouteRemovePointClick(e)})),n},_createRoutePanelFormAddStageElement:function(){var e=this,t=document.createElement("div");return t.id="GProuteStageAdd",t.title="Ajouter une étape",t.addEventListener("click",(function(t){for(var n=1,r=0,i=2;i<7;i++)"GPflexInput GProuteStageFlexInputHidden"===document.getElementById("GProutePoint"+i).className?1===n&&(n=i):r++;n<7&&(document.getElementById("GProutePoint"+n).className="GPflexInput GProuteStageFlexInput"),4===r&&(document.getElementById("GProuteStageAdd").style.display="none"),e.onRouteAddPointClick(t)})),t},_createRoutePanelFormAutoCompleteListElement:function(e){var t=this,n=document.createElement("div");return n.id="GProuteAutoCompleteList"+e,n.className="GPadvancedAutoCompleteList",n.addEventListener?n.addEventListener("click",(function(n){t.onAutoCompletedResultsItemClick(n),document.getElementById("GProuteAutoCompleteList"+e).style.display="none"}),!1):n.attachEvent&&n.attachEvent("onclick",(function(n){t.onAutoCompletedResultsItemClick(n),document.getElementById("GProuteAutoCompleteList"+e).style.display="none"})),n},_createRouteAutoCompletedLocationElement:function(e,t,n){var r=document.getElementById("GProuteAutoCompleteList"+t),i=document.createElement("div");i.id="AutoCompletedLocation"+n,i.className="GPautoCompleteProposal",i.innerHTML=Nh.getSuggestedLocationFreeform(e),r.appendChild(i)},_createRoutePanelFormModeChoiceTransportElement:function(e){var t=this,n=document.createElement("div");n.id=this._addUID("GProuteTransportChoice");var r=document.createElement("label");r.className="GProuteModeLabel gpf-label fr-label",r.innerHTML="Choisir un mode de déplacement",n.appendChild(r);var i=document.createElement("div");i.className="gpf-radio-btn-group";for(var o=0;o0&&t<6&&(document.getElementById("GPlocationPoint_"+r).className="GPflexInput GPelementHidden gpf-flex gpf-hidden "),document.getElementById("GPlocationOriginPointer_"+r).checked=!1,document.getElementById("GPlocationOrigin_"+r).className="GPelementVisible gpf-visible",document.getElementById("GPlocationOriginCoords_"+r).className="GPelementHidden gpf-hidden"}}for(var i=0;i0&&e<6&&(document.getElementById("GPlocationPoint_"+t+"-"+this._uid).className="GPflexInput GPlocationStageFlexInput gpf-flex"))}var r,i=document.getElementsByClassName("GPlocationPoint-"+this._uid);this._addRouteResultsStagesValuesElement(i),"Pieton"===this._currentTransport?(r=document.getElementById("GProuteTransportPedestrian-"+this._uid))&&(r.checked="true"):(r=document.getElementById("GProuteTransportCar-"+this._uid))&&(r.checked="true");var o=document.getElementById("GProuteComputationSelect-"+this._uid);o&&(o.value=this._currentComputation);var a=document.getElementById("GProuteExclusionsToll-"+this._uid);a&&(-1!==this._currentExclusions.indexOf("toll")?a.checked=!1:a.checked=!0);var s=document.getElementById("GProuteExclusionsTunnel-"+this._uid);s&&(-1!==this._currentExclusions.indexOf("tunnel")?s.checked=!1:s.checked=!0);var l=document.getElementById("GProuteExclusionsBridge-"+this._uid);l&&(-1!==this._currentExclusions.indexOf("bridge")?l.checked=!1:l.checked=!0);var c=this._currentRouteInformations.totalDistance,u=this._currentRouteInformations.totalTime,d=this._simplifiedInstructions(this._currentRouteInformations.routeInstructions);d&&this._fillRouteResultsDetailsContainer(c,u,d),this._formRouteContainer.className="GPelementHidden gpf-hidden gpf-panel__content fr-modal__content",this._hideWaitingContainer(),this._resultsRouteContainer.className=""}},{key:"clean",value:function(){this._currentTransport=null,this._currentExclusions=[],this._currentComputation=null;for(var e=0;e0)return n;var r=this._showRouteButton=this._createShowRoutePictoElement();n.appendChild(r);var i=this._panelRouteContainer=this._createRoutePanelElement(),o=this._createRoutePanelDivElement();i.appendChild(o);var a=this._panelHeaderRouteContainer=this._createRoutePanelHeaderElement();o.appendChild(a);var s=this._formRouteContainer=this._createRoutePanelFormElement();s.appendChild(this._createRoutePanelFormModeChoiceTransportElement(this.options.graphs));for(var l=this._createRoutePanelFormPointsElement(e),c=0;c0)return n;var r=this._pictoIsoButton=this._createShowIsoPictoElement();n.appendChild(r);var i=this._IsoPanelContainer=this._createIsoPanelElement(),o=this._createIsoPanelDivElement();i.appendChild(o);var a=this._IsoPanelHeaderContainer=this._createIsoPanelHeaderElement();o.appendChild(a);var s=this._formContainer=this._createIsoPanelFormElement();s.appendChild(this._createIsoPanelFormModeChoiceTransportElement(this.options.graphs)),s.appendChild(this._createIsoPanelFormPointLabel());var l=this._createIsoPanelFormPointElement(e);s.appendChild(l);for(var c=!1,u=!1,d=this._createIsoPanelFormTypeChoiceElement(),p=0;p500&&(TA.log("INFO : initial circle radius ("+this._requestGeom.radius+") limited to 1000m."),this._requestGeom.radius=500),o.searchGeometry=this._requestGeom):"polygon"===this._requestGeom.type.toLowerCase()?o.searchGeometry=this._requestGeom:"point"===this._requestGeom.type.toLowerCase()&&("StreetAddress"===this._currentGeocodingType?(o.searchGeometry={type:"Circle",radius:50,coordinates:this._requestGeom.coordinates},o.maximumResponses=1):o.searchGeometry=this._requestGeom),TA.log("reverseGeocode request options : ",o),o}},{key:"_displayGeocodedLocations",value:function(e){this._clearResults(),this._reverseGeocodingLocations=e,this.dispatchEvent({type:"reversegeocode:compute"}),this._formContainer.className="GPelementHidden gpf-hidden",this._hideWaitingContainer(),this._panelTitleContainer.innerHTML="Résultats de la recherche",this._returnPictoContainer.classList.remove("GPelementHidden"),this._returnPictoContainer.classList.remove("gpf-hidden"),this._resultsContainer.className="GPpanel gpf-panel gpf-panel-reverse",this._fillGeocodedLocationListContainer(e),this._displayGeocodedLocationsOnMap(e)}},{key:"_fillGeocodedLocationListContainer",value:function(e){for(var t=0;t1){if(this._resultsFeaturesSource&&this._resultsFeaturesSource.getExtent){var i=this._resultsFeaturesSource.getExtent();n.getView().fit(i,n.getSize())}}else{var o=this._resultsFeatures.item(0).getGeometry().getCoordinates();n.getView().setCenter(o),n.getView().setZoom(17)}this._resultsHoverInteraction=new h.Select({condition:av.pointerMove,layers:[this._resultsFeaturesLayer]}),this._resultsHoverInteraction.on("select",(function(e){return t._onResultsFeatureMouseOver(e)})),n.addInteraction(this._resultsHoverInteraction),this._resultsSelectInteraction=new h.Select({layers:[this._resultsFeaturesLayer]}),this._resultsSelectInteraction.on("select",(function(e){return t._onResultsFeatureSelect(e)})),n.addInteraction(this._resultsSelectInteraction);var a="";switch(this._currentGeocodingType){case"StreetAddress":a="adresses";break;case"PositionOfInterest":a="toponymes";break;case"CadastralParcel":a="parcelles cadastrales"}n.getControls().forEach((function(e){if(e instanceof ih){var n=t._resultsFeaturesLayer.gpLayerId;e._layers[n].title===n&&(e.addLayer(t._resultsFeaturesLayer,{title:"Résultats de la recherche inverse",description:"Résultats de la recherche inverse sur les "+a}),e.setRemovable(t._resultsFeaturesLayer,!1))}}))}}},{key:"_createResultsLayer",value:function(){var e=this.getMap();this._resultsFeatures=new(iv()),this._resultsFeaturesSource=new(a())({features:this._resultsFeatures}),this._resultsFeaturesLayer=new(ii())({source:this._resultsFeaturesSource}),this._resultsFeaturesLayer.gpResultLayerId="reverseGeocodingResults",e.addLayer(this._resultsFeaturesLayer)}},{key:"_addResultFeature",value:function(e,t){var n=this.getMap(),r=[e.position.lon,e.position.lat];if(0!==r.length){var i=n.getView().getProjection().getCode();"EPSG:4326"!==i&&(r=(0,Dr.transform)(r,"EPSG:4326",i));var o=new(kt())({geometry:new ov.Point(r)});o.setStyle(this._resultsDefaultStyle),o.setId(t),o.setProperties({location:e,popupContent:this._fillPopupContent(e)}),this._resultsFeatures.push(o)}}},{key:"_fillPopupContent",value:function(e){var t="
    ",n=e.placeAttributes;for(var r in n)n.hasOwnProperty(r)&&"trueGeometry"!==r&&"extraFields"!==r&&"houseNumberInfos"!==r&&"_count"!==r&&(t+="
  • ",t+=''+r.toUpperCase()+" : ",t+=n[r],t+="
  • ");return t+="
"}},{key:"_onResultsFeatureMouseOver",value:function(e){var t;if(0!==e.selected.length){if((t=e.selected[0]).setStyle(this._resultsSelectedStyle),null!=t.getId()){var n=document.getElementById("GPreverseGeocodedLocation_"+t.getId()+"-"+this._uid);n&&n.classList&&n.classList.add("GPlocationHighlight")}document.getElementById("GPreverseGeocodedLocation_"+t.getId()+"-"+this._uid)}if(0!==e.deselected.length){(t=e.deselected[0]).setStyle(this._resultsDefaultStyle);var r=document.getElementById("GPreverseGeocodedLocation_"+t.getId()+"-"+this._uid);r&&r.classList&&r.classList.remove("GPlocationHighlight")}}},{key:"_onResultsFeatureSelect",value:function(e){var t=this.getMap();if(0!==e.selected.length){var r=e.selected[0];this._popupContent.innerHTML=r.getProperties().popupContent,this._popupOverlay?this._popupOverlay.setPosition(e.mapBrowserEvent.coordinate):(this._popupOverlay=new(n())({element:this._popupDiv,positioning:"bottom-center",position:e.mapBrowserEvent.coordinate}),t.addOverlay(this._popupOverlay)),this.dispatchEvent({type:"reversegeocode:onclickresult",location:r.getProperties().location})}else null!=this._popupOverlay&&this._popupOverlay.setPosition(void 0)}},{key:"onShowReverseGeocodingClick",value:function(e){"true"===e.target.ariaPressed&&this.onPanelOpen();var t=this.getMap();if(t){Th.unset(t);var n=this._showReverseGeocodingButton.ariaPressed;this.collapsed=!("true"===n),this.dispatchEvent("change:collapsed"),this.options.position&&!this.collapsed&&this.updatePosition(this.options.position),this._waiting||this._reverseGeocodingLocations.length||(this.collapsed?(this._clearResults(),this._clearInputFeatures(),this._removeMapInteraction(t),null!=this._inputFeaturesLayer&&(t.removeLayer(this._inputFeaturesLayer),this._inputFeaturesLayer=null,this._inputFeaturesSources=null,this._inputFeatures=null)):this._activateMapInteraction(t))}}},{key:"onReverseGeocodingTypeChange",value:function(e){var t=e.target.selectedIndex,n=e.target.options[t].value;n&&(TA.log(n),this._currentGeocodingType=n)}},{key:"onReverseGeocodingDelimitationChange",value:function(e){var t=e.target.selectedIndex,n=e.target.options[t].value;if(n){TA.log(n),this._currentGeocodingDelimitation=n;var r=this.getMap();this._clearInputFeatures(),this._removeMapInteraction(r),this._activateMapInteraction(r)}}},{key:"onGPreverseGeocodingReturnPictoClick",value:function(){this._clearResults(),this._clearInputFeatures(),this._activateMapInteraction(this.getMap())}},{key:"onReverseGeocodingSubmit",value:function(){this._requestPosition?this._reverseGeocodingRequest():TA.log("missing position")}},{key:"onReverseGeocodingResultClick",value:function(e){var t=e.target.id,n=t.substring(t.indexOf("_")+1),r=this._resultsFeaturesSource.getFeatureById(parseInt(n,10));this.dispatchEvent({type:"reversegeocode:onclickresult",location:r.getProperties().location})}},{key:"onReverseGeocodingResultMouseOver",value:function(e){var t=e.target.id,n=t.substring(t.indexOf("_")+1);e.target.classList&&e.target.classList.add("GPlocationHighlight"),this._resultsFeaturesSource&&this._resultsFeaturesSource.getFeatureById(parseInt(n,10)).setStyle(this._resultsSelectedStyle)}},{key:"onReverseGeocodingResultMouseOut",value:function(e){var t=e.target.id,n=t.substring(t.indexOf("_")+1);e.target.classList&&e.target.classList.remove("GPlocationHighlight"),this._resultsFeaturesSource&&this._resultsFeaturesSource.getFeatureById(parseInt(n,10)).setStyle(this._resultsDefaultStyle)}},{key:"_clearResults",value:function(){var e=this.getMap();if(this._reverseGeocodingLocations=[],this._resultsListContainer)for(;this._resultsListContainer.firstChild;)this._resultsListContainer.removeChild(this._resultsListContainer.firstChild);this._resultsFeaturesLayer&&(e.removeLayer(this._resultsFeaturesLayer),this._resultsFeaturesLayer=null),null!=this._popupOverlay&&(e.removeOverlay(this._popupOverlay),this._popupOverlay=null),null!=this._resultsSelectInteraction&&(e.removeInteraction(this._resultsSelectInteraction),this._resultsSelectInteraction=null),null!=this._resultsHoverInteraction&&(e.removeInteraction(this._resultsHoverInteraction),this._resultsHoverInteraction=null)}},{key:"_clearInputFeatures",value:function(){this._inputFeatures&&this._inputFeatures.clear(),this._requestGeom=null,this._requestPosition=null}},{key:"_displayWaitingContainer",value:function(){this._waitingContainer.className="GPwaitingContainer GPwaitingContainerVisible gpf-waiting gpf-waiting--visible",this._waiting=!0,this._timer&&(clearTimeout(this._timer),this._timer=null);var e=this;this._timer=setTimeout((function(){!0===e._waiting?e._hideWaitingContainer():e._timer&&clearTimeout(e._timer)}),16e3)}},{key:"_hideWaitingContainer",value:function(){this._waiting&&(this._waitingContainer.className="GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden",this._waiting=!1,clearTimeout(this._timer),this._timer=null)}}],i&&PA(r.prototype,i),o&&PA(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,i,o}(Gu);Object.assign(RA.prototype,EA),Object.assign(RA.prototype,gu);const OA=RA;window.ol&&window.ol.control&&(window.ol.control.ReverseGeocode=RA);const DA=ol.format.WMSCapabilities;var NA=__webpack_require__.n(DA);const UA=ol.format.WMTSCapabilities;var jA=__webpack_require__.n(UA),BA=__webpack_require__(3110),FA=__webpack_require__.n(BA);const zA={onloaded:"editor:onloaded",layer:{onclickvisibility:"editor:layer:onclickvisibility",onclickclone:"editor:layer:onclickclone",onclickremove:"editor:layer:onclickremove"},legend:{onclickedition:"editor:legend:onclickedition",onchangevalue:"editor:legend:onchangevalue"},group:{oncollapse:"editor:group:oncollapse"},style:{oneditjson:"editor:style:oneditjson",scale:{onchangemin:"editor:style:scale:onchangemin",onchangemax:"editor:style:scale:onchangemax"}},filter:{oneditjson:"editor:filter:oneditjson"},themes:{onclickimage:"editor:themes:onclickimage",onclicktitle:"editor:themes:onclicktitle"},search:{onsubmit:"editor:search:onsubmit",onautocomplete:"editor:search:onautocomplete"}};function VA(e){return VA="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},VA(e)}function qA(e,t){for(var n=0;n/g,">")).replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)/g,(function(e){var t="gp-json-number";return/^"/.test(e)?t=/:$/.test(e)?"gp-json-key":"gp-json-string":/true|false/.test(e)?t="gp-json-boolean":/null/.test(e)&&(t="gp-json-null"),""+e+""}))}},{key:"add",value:function(){if(!this.options.target){if(!document.getElementById(this.name.target)){var e=document.createElement("div");e.id=this.name.target,(document.documentElement||document.getElementsByTagName("body")[0]||document.getElementsByTagName("head")[0]).appendChild(e)}this.options.target=document.getElementById(this.name.target)}return this.container&&this.options.target.appendChild(this.container),this}},{key:"display",value:function(e){return WA.trace("display()",e),void 0!==e&&(this.container.style.display=e?"flex":"none"),"flex"===this.container.style.display}},{key:"getContainer",value:function(){return this.container}},{key:"onEditJsonStyleMapBox",value:function(e){WA.trace("onEditJsonStyleMapBox",e),e.editorID=this.id,e.data=this.options,FA().dispatch(zA.style.oneditjson,e)}},{key:"onChangeStyleScaleMinMapBox",value:function(e){WA.trace("onChangeStyleScaleMinMapBox",e),e.editorID=this.id,e.data=this.options,FA().dispatch(zA.style.scale.onchangemin,e)}},{key:"onChangeStyleScaleMaxMapBox",value:function(e){WA.trace("onChangeStyleScaleMaxMapBox",e),e.editorID=this.id,e.data=this.options,FA().dispatch(zA.style.scale.onchangemax,e)}}],t&&qA(e.prototype,t),n&&qA(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n}();const ZA=YA;function JA(e){return JA="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},JA(e)}function XA(e,t){for(var n=0;n T \")",n.style.background=r.replace("%color%",0===t.color.indexOf("rgb")?t.color:xt.hexToRgba(t.color,1)).replace("%opacity%",t.opacity||1).replace("%style%","font-size: 5em;font-weight: bold;");break;case"icon":t.image?(r="".replace("%x%",this.options.sprites.json[t.image].x).replace("%y%",this.options.sprites.json[t.image].y).replace(/%w%/g,this.options.sprites.json[t.image].width).replace(/%h%/g,this.options.sprites.json[t.image].height).replace("%W%",this.options.sprites.size.w).replace("%H%",this.options.sprites.size.h).replace("%URL%",this.options.sprites.url),n.innerHTML=r):(r="url(\"data:image/svg+xml;utf8,\")",n.style.background=r.replace("%color%",0===t.color.indexOf("rgb")?t.color:xt.hexToRgba(t.color,1)).replace("%style%","fill: transparent;stroke-width: 10;"));break;case"line":var i=Array.isArray(t.dasharray)?t.dasharray.join(" "):0;r="url(\"data:image/svg+xml;utf8,\")",n.style.background=r.replace("%color%",0===t.color.indexOf("rgb")?t.color:xt.hexToRgba(t.color,1)).replace("%stroke-opacity%",t.opacity||1).replace("%stroke-dasharray%",i).replace("%stroke-width%",3*(t.width||0));break;case"circle":var o=t["stroke-color"]||"#FFFFFF";r="url(\"data:image/svg+xml;utf8,\")",n.style.background=r.replace("%color%",0===t.color.indexOf("rgb")?t.color:xt.hexToRgba(t.color,1)).replace("%opacity%",t.opacity||1).replace("%stroke-color%",0===o.indexOf("rgb")?o:xt.hexToRgba(o,1)).replace("%stroke-opacity%",t["stroke-opacity"]||1).replace("%stroke-width%",3*(t["stroke-width"]||0));break;case"background":case"fill":if(t.pattern)r="".replace("%x%",this.options.sprites.json[t.pattern].x).replace("%y%",this.options.sprites.json[t.pattern].y).replace(/%w%/g,this.options.sprites.json[t.pattern].width).replace(/%h%/g,this.options.sprites.json[t.pattern].height).replace("%W%",this.options.sprites.size.w).replace("%H%",this.options.sprites.size.h).replace("%URL%",this.options.sprites.url),n.innerHTML=r;else{var a=t["outline-color"]||"#FFFFFF";r="url(\"data:image/svg+xml;utf8,\")",n.style.background=r.replace("%color%",0===t.color.indexOf("rgb")?t.color:xt.hexToRgba(t.color,1)).replace("%opacity%",t.opacity||1).replace("%stroke-color%",0===a.indexOf("rgb")?a:xt.hexToRgba(a,1))}break;default:return uC.warn("type not found, no thumbnail..."),!1}return!0}},{key:"_getValue",value:function(e){var t=null;if("string"==typeof e)t=e;else if("number"==typeof e)t=e;else if(Array.isArray(e)){var n=!0;e.forEach((function(e){"number"!=typeof e&&(n=!1)})),n&&(t=e)}else"object"===sC(e)?(t=null,"stops"in e&&(e.stops.sort((function(e,t){var n=e[0],r=t[0];return n>r?-1:n1?1:0;if(i){var o=document.createElement("hr");o.className=this.name.sep,e.appendChild(o)}if(this.options.tools.title){var a=document.createElement("div");a.id=this.name.titleLayersID+this.id,a.className=this.name.titleLayers,a.innerHTML=i?"Liste des 'couches' ("+r+")":"Liste des 'couches'",e.appendChild(a)}}var s=this.mapbox.layers.slice();if(s.forEach((function(e,t){var n=e.metadata;n?n["geoportail:order"]=t:e.metadata={"geoportail:order":t}})),this.options.tools.sort){var l=this.options.tools.sortBy,c=this.options.tools.sortOrder;s.sort((function(e,t){var n=0;if(e.metadata&&e.metadata["geoportail:group"]&&t.metadata&&t.metadata["geoportail:group"]){var r,i=null;i=e.metadata["geoportail:group"],r=t.metadata["geoportail:group"],n=i.localeCompare(r)}else switch(l){case"geom":n="asc"===c?e.type.localeCompare(t.type)||e.id.localeCompare(t.id):t.type.localeCompare(e.type)||t.id.localeCompare(e.id);break;case"class":n="asc"===c?e["source-layer"].localeCompare(t["source-layer"])||e.id.localeCompare(t.id):t["source-layer"].localeCompare(e["source-layer"])||t.id.localeCompare(e.id);break;default:n="asc"===c?e.id.localeCompare(t.id):t.id.localeCompare(e.id)}return n}))}OC.trace("Layers : ",s);var u=this.options.tools.sortBy,d=this.options.tools.groupAuto,p={};s.forEach((function(e){var t=e.metadata;if(t&&t["geoportail:group"]){var n=t["geoportail:group"];p[n]=p[n]?p[n]+1:1}else{var r=null;switch(u){case"class":r=e["source-layer"];break;case"geom":r=e.type;break;default:r=e.id}var i=r;if(d){var o=r.search(/_|-|:|=/);i=-1!==o?r.substring(0,o).trim():r}p[i]=p[i]?p[i]+1:1,t?t["geoportail:group"]=i:e.metadata={"geoportail:group":i}}})),OC.trace("Groups : ",p);var h,g=document.createElement("div");if(g.className=this.name.containerLayers,e.appendChild(g),void 0!==this.options.tools.collapse){(h=document.createElement("details")).className="",h.open=!this.options.tools.collapse,g.appendChild(h);var f=document.createElement("summary");f.className="",f.innerHTML="",h.appendChild(f)}for(var m=void 0!==this.options.tools.collapse?h:g,y=-1,v=0;v1){p[C]=-1;var b=new EC({id:this.id,target:void 0!==this.options.tools.collapse?h:g,title:C,collapse:!0});b.add(),m=b.getContainer()}else 1===p[C]&&(m=void 0!==this.options.tools.collapse?h:g);else m=void 0!==this.options.tools.collapse?h:g}else m=void 0!==this.options.tools.collapse?h:g;if(this.options.tools.layers){var I=new vC({id:this.id,target:m,position:y+"_"+this.id,tools:{visibility:this.options.tools.visibility,icon:this.options.tools.icon,type:this.options.tools.type,pin:this.options.tools.pin},obj:{id:A.id,type:A.type,source:A.source,"source-layer":A["source-layer"]}});I.add(),A.layout&&A.layout.visibility&&"none"===A.layout.visibility&&I.visibility(!1),this.layers.push(I)}if(this.options.tools.legend){var _=this.options.tools.editable;void 0===_&&(_=A.editable);var E=new pC({id:this.id,target:m,sprites:this.sprites,obj:{id:A.id,source:A.source,title:A.id,editable:void 0!==_&&_,paint:A.paint,layout:A.layout}});E.add(),E.display(!1),I&&(I.addLegend(E),I.slotLegend())}if(this.options.tools.style){var w=new ZA({id:this.id,target:m,position:y+"_"+this.id,obj:{id:A.id,source:A.source,layout:A.layout,paint:A.paint}});w.add(),w.display(!1),I&&I.addStyle(w),A.layout&&A.layout.visibility&&"none"===A.layout.visibility&&I.visibility(!1)}if(this.options.tools.filter){var P=new aC({id:this.id,target:m,position:y+"_"+this.id,obj:{id:A.id,source:A.source,filter:A.Filter}});P.add(),P.display(!1),I&&I.addFilter(P)}}else y>=0&&y--}}if(this.container=e,!this.options.target){if(!document.getElementById(this.name.target)){var S=document.createElement("div");S.id=this.name.target,(document.getElementsByTagName("body")[0]||document.getElementsByTagName("head")[0]||document.documentElement).appendChild(S)}this.options.target=document.getElementById(this.name.target)}this.container&&this.options.target.appendChild(this.container),FA().dispatch(zA.onloaded,this)}},{key:"_getSprites",value:function(e){var t,n=this;return e&&e.startsWith("mapbox://")?new Promise((function(e,t){OC.error("Protocole mapbox:// non géré !"),e(n)})):e?Promise.all([(t=e+".png",fetch(t,{credentials:"same-origin"}).then((function(e){if(e.ok)return e.blob().then((function(e){n.sprites.url=t;var r=new Image;return r.src=t,r.decode().then((function(){n.sprites.size={},n.sprites.size.h=r.height,n.sprites.size.w=r.width}))})).catch((function(e){OC.warn("fetch image sprites exception :",e)}));throw new Error("HTTP status code: "+e.status)})).catch((function(e){return new Promise((function(t,n){OC.error("fetch image sprites exception :",e),n(e)}))}))),fetch(e+".json",{credentials:"same-origin"}).then((function(e){if(e.ok)return e.json().then((function(e){n.sprites.json=e})).catch((function(e){OC.warn("fetch json sprites exception :",e)}));throw new Error("HTTP status code: "+e.status)})).catch((function(e){return new Promise((function(t,n){OC.error("fetch json sprites exception :",e),n(e)}))}))]):new Promise((function(e,t){OC.error("Auncun sprites disponibles !"),e(n)}))}},{key:"createElement",value:function(){var e=this;return"object"===kC(this.options.style)?(this.mapbox=this.options.style,this.options.tools.legend?this._getSprites(this.mapbox.sprite).then((function(){return e._initContainer(),e})).catch((function(e){OC.warn("fetch sprites exception :",e)})):new Promise((function(t,n){e._initContainer(),t(e)}))):"string"==typeof this.options.style?fetch(this.options.style,{credentials:"same-origin"}).then((function(t){return t.json().then((function(t){e.mapbox=t})).then((function(){return e.options.tools.legend?e._getSprites(e.mapbox.sprite).then((function(){return e._initContainer(),e})).catch((function(e){OC.warn("fetch sprites exception :",e)})):new Promise((function(t,n){e._initContainer(),t(e)}))})).catch((function(e){OC.error("json exception :",e)}))})).catch((function(e){OC.error("fetch exception :",e)})):void 0}},{key:"display",value:function(e){this.container.style.display=e?"block":"none"}},{key:"setContext",value:function(e,t){this.context[e]=t}},{key:"getContext",value:function(e){return this.context[e]}},{key:"getID",value:function(){return this.id}},{key:"getContainer",value:function(){return this.container}},{key:"getStyle",value:function(){return this.mapbox}},{key:"getStyleLayer",value:function(e){for(var t=null,n=this.getLayer(e).options.obj.id,r=0;r2&&void 0!==arguments[2]?arguments[2]:null,r=(this.canvas||(this.canvas=document.createElement("canvas"))).getContext("2d");return r.font=null===n?"".concat(this._getCssProperty(t,"font-weight")," ").concat(this._getCssProperty(t,"font-size")," ").concat(this._getCssProperty(t,"font-family")):n,r.measureText(e).width},_dataZToSvgY:function(e,t,n,r){return t-(e-n)*r-.5},_dataDistToSvgX:function(e,t,n,r){return t-n+e*r},_svgXToDataDist:function(e,t,n,r){return(e+n-t)/r},_arrayBisect:function(e,t){var n;if(0===e.length)return 0;for(n=0;nx&&(M=Math.pow(10,Math.ceil(Math.log((g-h)/x)/Math.log(10))),G=Math.floor(h/M)*M,(L=Math.ceil(g/M)*M)===g&&(L+=M),G=Math.round(100*G)/100,L=Math.round(100*L)/100,k=Math.floor((L-G)/M)),k=Math.max(Math.round(k),1);var T=document.createElementNS("http://www.w3.org/2000/svg","g");T.setAttribute("class","profile-z-vertical");var R,O,D,N,U,j,B,F=document.createElementNS("http://www.w3.org/2000/svg","g"),z=w/k;R=g===h?w/.2:w/(L-G);for(var V=0;V<=k;V++)(O=document.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("class","profile-z-graduation"),O.setAttribute("font-family",o.fontFamily),O.setAttribute("font-size","10px"),O.setAttribute("fill","#5E5E5E"),O.textContent=(Math.round(100*(G+V*M))/100).toLocaleString(),D=w-V*z,O.setAttribute("transform","translate(".concat(I+_-8,", ").concat(D+5,")")),O.setAttribute("text-anchor","end"),T.appendChild(O),N=Math.round(D)-.5,U=document.createElementNS("http://www.w3.org/2000/svg","g"),(j=document.createElementNS("http://www.w3.org/2000/svg","path")).setAttribute("cs","100,100"),j.setAttribute("stroke-width","1"),0!==V?j.setAttribute("stroke-opacity","0.2"):j.setAttribute("stroke-opacity","1"),j.setAttribute("stroke","#000000"),j.setAttribute("fill","none"),j.setAttribute("d","M".concat(I+_,",").concat(N," L").concat(P+I+_,",").concat(N)),(B=document.createElementNS("http://www.w3.org/2000/svg","path")).setAttribute("cs","100,100"),B.setAttribute("stroke-width","1"),B.setAttribute("stroke-opacity","1"),B.setAttribute("stroke","#000000"),B.setAttribute("fill","none"),B.setAttribute("d","M".concat(I+_,",").concat(N," L").concat(I+_+5,",").concat(N)),B.setAttribute("transform","translate(-5, 0)"),U.appendChild(B),U.appendChild(j),F.appendChild(U);var q=document.createElementNS("http://www.w3.org/2000/svg","text");q.setAttribute("class","profile-z-legend"),q.setAttribute("font-family",o.fontFamily),q.setAttribute("font-size","11px"),q.setAttribute("fill","#5E5E5E"),q.textContent="Altitude (m)",q.setAttribute("transform","translate(".concat(9,", ").concat(Math.round(w/2),") rotate(-90)")),q.setAttribute("text-anchor","middle"),T.appendChild(q),S.appendChild(T),S.appendChild(F),f>2e3&&(f/=1e3,m="km");var H=Math.floor(P/E),W=Math.pow(10,Math.ceil(Math.log(f/H)/Math.log(10)))/2,Y=f,Z=Math.floor(Y/W);Z>H?(W=Math.pow(10,Math.ceil(Math.log(f/H)/Math.log(10))),Z=Math.floor(Y/W)):Z<1&&(W=Math.pow(10,Math.ceil(Math.log(f/H)/Math.log(10))-1),Z=Math.floor(Y/W));var J=W*(Z=Math.max(Z,1)),X=document.createElementNS("http://www.w3.org/2000/svg","g");X.setAttribute("class","profile-x-vertical");for(var K,Q,$,ee,te,ne,re=document.createElementNS("http://www.w3.org/2000/svg","g"),ie=P/Y,oe=(Y-J)*ie,ae=Math.round((P-oe)/Z),se=0;se<=Z+1;se++)(K=document.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("class","profile-x-graduation"),K.setAttribute("font-family",o.fontFamily),K.setAttribute("font-size","10px"),K.setAttribute("fill","#5E5E5E"),se!==Z+1&&(K.textContent=(Math.round(100*se*W)/100).toLocaleString()),Q=I+_+se*ae,se===Z+1&&(Q=I+_+P),K.setAttribute("transform","translate(".concat(Q,", ").concat(w+15+5,")")),K.setAttribute("text-anchor","middle"),X.appendChild(K),$=Q-.5,ee=document.createElementNS("http://www.w3.org/2000/svg","g"),(te=document.createElementNS("http://www.w3.org/2000/svg","path")).setAttribute("cs","100,100"),te.setAttribute("stroke-width","1"),0!==se?te.setAttribute("stroke-opacity","0.2"):te.setAttribute("stroke-opacity","1"),te.setAttribute("stroke","#000000"),te.setAttribute("fill","none"),te.setAttribute("d","M".concat($,",").concat(w," L").concat($,",0")),(ne=document.createElementNS("http://www.w3.org/2000/svg","path")).setAttribute("cs","100,100"),ne.setAttribute("stroke-width","1"),ne.setAttribute("stroke-opacity","1"),ne.setAttribute("stroke","#000000"),ne.setAttribute("fill","none"),ne.setAttribute("d","M".concat($,",").concat(w," L").concat($,",").concat(w-5)),ne.setAttribute("transform","translate(0, 5)"),ee.appendChild(ne),ee.appendChild(te),re.appendChild(ee);var le=document.createElementNS("http://www.w3.org/2000/svg","text");le.setAttribute("class","profile-x-legend"),le.setAttribute("font-family",o.fontFamily),le.setAttribute("font-size","11px"),le.setAttribute("fill","#5E5E5E"),le.textContent="Distance (".concat(m,")"),le.setAttribute("transform","translate(".concat(I+_+P/2,", ").concat(w+15+17+3,")")),le.setAttribute("text-anchor","middle"),X.appendChild(le),S.appendChild(X),S.appendChild(re);var ce=document.createElementNS("http://www.w3.org/2000/svg","g"),ue=1;"km"===m&&(ue=1e3);for(var de=this._dataDistToSvgX(d[0].dist/ue,b,P,ie),pe=this._dataZToSvgY(d[0].z,w,G,R),he="M".concat(de,",").concat(pe),ge=1;gel.dist-o&&(c=l);var u=this._dataDistToSvgX(c.dist/ue,b,P,ie),p=this._dataZToSvgY(c.z,w,G,R);Ie.setAttribute("cx",u),Ie.setAttribute("cy",p),Ce.setAttribute("x1",u),Ce.setAttribute("y1",w),Ce.setAttribute("x2",u),Ce.setAttribute("y2",0),be.setAttribute("x1",I+_),be.setAttribute("y1",p),be.setAttribute("x2",P+I+_),be.setAttribute("y2",p),r.__updateProfileMarker(i,c);var h="Altitude : ".concat(c.z.toLocaleString()," m"),g="Pente : ".concat(c.slope," %"),m="(lat : ".concat(c.lat.toLocaleString()," / lon : ").concat(c.lon.toLocaleString(),")");Ee.innerHTML=h,we.innerHTML=g,Pe.innerHTML=m;var y,v=Math.max(this._getTextWidth(m,Pe),this._getTextWidth(h,Ee));c.dist>f*ue/2?(y="M -0.5 -0.5 l -6 6 l 0 16 l -".concat(v+10," 0 l 0 -44 l ").concat(v+10," 0 l 0 16 l 6 6"),_e.setAttribute("transform","translate(".concat(-(v/2+12),",0)"))):c.dist<=f*ue/2&&(y="M -0.5 -0.5 l 6 6 l 0 16 l ".concat(v+10," 0 l 0 -44 l -").concat(v+10," 0 l 0 16 l -6 6"),_e.setAttribute("transform","translate(".concat(v/2+12,",0)"))),Me.setAttribute("d",y),xe.setAttribute("d",y),Se.setAttribute("transform","translate(".concat(u,",").concat(p,")")),Se.style.transform="translate(".concat(u,"px,").concat(p,"px)")}.bind(this)),ye.appendChild(ve),S.appendChild(ye),y.appendChild(S),t}},displayProfileRaw:function(e,t,n,r){if(t){for(;t.firstChild;)t.removeChild(t.firstChild);var i=e&&e.points?e.points:{},o=document.createElement("textarea");return o.id="profilElevationResults",o.rows=10,o.cols=50,o.style.width="100%",o.innerHTML=JSON.stringify(i,void 0,4),o.addEventListener("mouseover",(function(e){r.__customRawProfileMouseOverEvent(n,e)})),t.appendChild(o),t}},displayProfileLibD3:function(e,t,n,r){var i=n;if(t&&e){for(;t.firstChild;)t.removeChild(t.firstChild);var o=e.points;if(e.distance>2e3){e.unit="km";for(var a=0;al[0]-t?l:a,u=m(c.dist),d=y(c.z);w.select("#focusCircle").attr("cx",u).attr("cy",d),w.select("#focusLineX").attr("x1",u).attr("y1",y(E[0])).attr("x2",u).attr("y2",y(E[1])),w.select("#focusLineY").attr("x1",m(_[0])).attr("y1",d).attr("x2",m(_[1])).attr("y2",d),r.__updateProfileMarker(i,c),P.transition().duration(200).style("opacity",.9);var p="";p+=" Altitude : "+c.z+" m",s.currentSlope&&(p+="
Pente : "+c.slope+" %"),p+="
(Lat : "+c.lat+"/ Lon : "+c.lon+")",P.html(p).style("left",d3.event.pageX+"px").style("top",d3.event.pageY-28+"px")})),I}},displayProfileLibAmCharts:function(e,t,n,r){var i=n;if(t&&e){var o=e.points,a="[[title]] : [[value]]m
";if(i.options.displayProfileOptions.currentSlope&&(a+="Pente : [[slope]] %
"),a+="(Lat: [[lat]] / Lon:[[lon]])",AmCharts.addInitHandler((function(){})),e.distance>2e3){e.unit="km";for(var s=0;s100?u=1:c>10&&(u=10),c=Math.round(c*u)/u,o[l].dist=c}var d={type:"serial",pathToImages:"http://cdn.amcharts.com/lib/3/images/",categoryField:"dist",autoMarginOffset:0,marginRight:10,marginTop:10,startDuration:0,color:"#5E5E5E",fontSize:8,theme:"light",thousandsSeparator:"",numberFormatter:{precision:-1,decimalSeparator:",",thousandsSeparator:" "},categoryAxis:{color:"#5E5E5E",gridPosition:"start",minHorizontalGap:40,tickPosition:"start",title:"Distance ("+e.unit+")",titleColor:"#5E5E5E",labelOffset:0,startOnAxis:!0},chartCursor:{animationDuration:0,bulletsEnabled:!0,bulletSize:10,categoryBalloonEnabled:!1,cursorColor:"#F90",graphBulletAlpha:1,graphBulletSize:1,zoomable:!1},trendLines:[],graphs:[{balloonColor:"#CCCCCC",balloonText:a,bullet:"round",bulletAlpha:0,bulletBorderColor:"#FFF",bulletBorderThickness:2,bulletColor:"#F90",bulletSize:6,hidden:!1,id:"AmGraph-1",fillAlphas:.4,fillColors:"#C77A04",lineAlpha:1,lineColor:"#C77A04",lineThickness:1,title:"Altitude",valueField:"z"}],guides:[],valueAxes:[{id:"ValueAxis-1",minVerticalGap:20,title:"Altitude (m)"}],balloon:{borderColor:"#CCCCCC",borderThickness:1,fillColor:"#FFFFFF",showBullet:!0},titles:[],allLabels:[],dataProvider:o},p=AmCharts.makeChart(t,d);return p.addListener("changed",(function(e){var t=e.chart.dataProvider[e.index];r.__updateProfileMarker(i,t)})),p}}};const KC=XC;var QC;function $C(e){return $C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},$C(e)}function eb(e,t){for(var n=0;n0&&rn.mergeParams(t,{sampling:o}),rn.mergeParams(t,{positions:e}),ub.trace("options du service",t),this._waitingContainer.className="GPwaitingContainer GPwaitingContainerVisible gpf-waiting gpf-waiting--visible",mt.Services.getAltitude(t)}else ub.warn("missing geometry !?")}},{key:"_computeElevationMeasure",value:function(e){ub.trace("ElevationPath::_computeElevationMeasure",e);var t=e;if(this._getSketchCoords()){t[0].dist=0,t[0].slope=0,t[0].oldlat=t[0].lat,t[0].oldlon=t[0].lon,t[0].lat=Math.round(1e5*t[0].lat)/1e5,t[0].lon=Math.round(1e5*t[0].lon)/1e5;var n=0,r=0,i=0,o=0,a=0,s=0,l=[];console.log(t);for(var c=1;c0&&(r+=d,i+=f),a=p,t[c].dist=p,l.push(a),s+=f?Math.abs(Math.round(f/p*100)):0,t[c].slope=f?Math.abs(Math.round(f/p*100)):0;var m=t[c].slope;t[c].color=m>15&&m<30?"#005b4c":m>30&&m<45?"#00362d":m>45?"#00120f":"#00B798",t[c].oldlat=t[c].lat,t[c].oldlon=t[c].lon,t[c].lat=Math.round(1e5*t[c].lat)/1e5,t[c].lon=Math.round(1e5*t[c].lon)/1e5}ub.trace("List Distances",l);for(var y=t[0].z,v=t[0].z,A=t[0].slope,C=0;Cv&&(v=b.z),b.zA&&(A=b.slope)}return{greaterSlope:A,meanSlope:Math.round(s/t.length),distancePlus:r,distanceMinus:n,ascendingElevation:i,descendingElevation:o,altMin:y.toLocaleString(),altMax:v.toLocaleString(),distance:this._getLength(),unit:"m",points:t}}}},{key:"_displayProfile",value:function(e){ub.trace("ElevationPath::_displayProfile",e),this._updateInfoContainer();var t=this.options.displayProfileOptions.target;t&&t.appendChild(this._panelContainer),t=this._profileContainer,this.options.displayProfileOptions.apply.call(this,e,t,this);var n=this.options.displayProfileOptions,r=document.getElementById("GPelevationPathPanelInfo-"+this._uid);r&&(n.totalDistance||n.greaterSlope||n.meanSlope||n.ascendingElevation||n.descendingElevation)&&(r.style.display="block"),this.dispatchEvent({type:"elevationpath:compute"})}},{key:"_updateInfoContainer",value:function(){ub.trace("ElevationPath::_updateInfoContainer");var e=this.options.displayProfileOptions.totalDistance,t=this.options.displayProfileOptions.meanSlope,n=this.options.displayProfileOptions.greaterSlope,r=this.options.displayProfileOptions.ascendingElevation,i=this.options.displayProfileOptions.descendingElevation,o=this._infoContainer;if(o.childElementCount)for(;o.firstChild;)o.removeChild(o.firstChild);e&&this._addElevationPathInformationsItem("Distance totale : ",Math.round(this._data.distance).toLocaleString()+" m"),r&&this._addElevationPathInformationsItem("Dénivelé positif : ",this._data.ascendingElevation.toLocaleString()+" m"),i&&this._addElevationPathInformationsItem("Dénivelé négatif : ",this._data.descendingElevation.toLocaleString()+" m"),t&&this._addElevationPathInformationsItem("Pente moyenne : ",this._data.meanSlope.toLocaleString()+" %"),n&&this._addElevationPathInformationsItem("Plus forte pente : ",this._data.greaterSlope.toLocaleString()+" %")}},{key:"_removeMeasure",value:function(){if(this._lastSketch=null,this._currentSketch=null,this._measureSource){this._marker&&(this._measureSource.removeFeature(this._marker),this._marker=null);for(var e=this._measureSource.getFeatures(),t=0;t=0;o--)t.splice(r[o],1)}else Ib.warn('[ol.control.LayerImport] \'options.layerTypes\' parameter should be an array. Set default values ["KML", "GPX", "GeoJSON", "WMS", "WMTS"]'),e.layerTypes=["KML","GPX","GeoJSON","WMS","WMTS","MAPBOX"]}}},{key:"_initDefaultStyles",value:function(){var e=this.options.vectorStyleOptions.KML.defaultStyle;this._defaultKMLStyle=new St.Style({image:e.image,stroke:e.stroke,fill:e.fill,text:e.text});var t=this.options.vectorStyleOptions.GPX.defaultStyle;this._defaultGPXStyle=new St.Style({image:t.image,stroke:t.stroke,fill:t.fill,text:t.text});var n=this.options.vectorStyleOptions.GeoJSON.defaultStyle;this._defaultGeoJSONStyle=new St.Style({image:n.image,stroke:n.stroke,fill:n.fill,text:n.text});var r=this.options.vectorStyleOptions.MapBox.defaultStyle;this._defaultMapBoxStyle=new St.Style({image:r.image,stroke:r.stroke,fill:r.fill,text:r.text})}},{key:"_initImportTypes",value:function(){this._currentImportType=this.options.layerTypes[0]||"KML","KML"===this._currentImportType||"GPX"===this._currentImportType||"GeoJSON"===this._currentImportType||"MAPBOX"===this._currentImportType?this._isCurrentImportTypeStatic=!0:"WMS"!==this._currentImportType&&"WMTS"!==this._currentImportType&&"WFS"!==this._currentImportType||(this._isCurrentImportTypeStatic=!1),this._currentStaticImportType="local"}},{key:"_initContainer",value:function(){var e=this._createMainContainerElement(),t=this._showImportButton=this._createShowImportPictoElement();e.appendChild(t);var n=this._importPanel=this._createImportPanelElement(),r=this._createImportPanelDivElement();n.appendChild(r);var i=this._importPanelHeader=this._createImportPanelHeaderElement(),o=this._importPanelReturnPicto=this._createImportPanelReturnPictoElement();i.appendChild(o);var a=this._importPanelTitle=this._createImportPanelTitleElement();i.appendChild(a);var s=this._panelCloseButton=this._createImportPanelCloseElement();i.appendChild(s),r.appendChild(i);var l=this._formContainer=this._initInputFormElement();r.appendChild(l);var c=this._getCapPanel=this._createImportGetCapPanelElement(),u=this._getCapResultsListContainer=this._createImportGetCapResultsContainer();c.appendChild(u),r.appendChild(c);var d=this._mapBoxPanel=this._createImportMapBoxPanelElement(),p=this._mapBoxResultsListContainer=this._createImportMapBoxResultsContainer();d.appendChild(p);var h=this._loadingContainer=this._createLoadingElement();d.appendChild(h),r.appendChild(d);var g=this._waitingContainer=this._createImportWaitingElement();return r.appendChild(g),e.appendChild(n),e}},{key:"_initInputFormElement",value:function(){var e=this._createImportPanelFormElement(),t=this._createImportTypeLineElement(this.options.layerTypes);e.appendChild(t);var n=this._createImportStaticParamsContainer(this.options.layerTypes[0]),r=this._createStaticNameLabel();n.appendChild(r);var i=this._createStaticModeChoiceDiv(),o=this._createStaticLocalChoiceDiv();i.appendChild(o);var a=this._createStaticUrlChoiceDiv();i.appendChild(a),n.appendChild(i);var s=this._createStaticLocalInputDiv();s.appendChild(this._createStaticLocalInputLabel()),this._staticLocalImportInput=this._createStaticLocalInput(),s.appendChild(this._staticLocalImportInput),n.appendChild(s);var l=this._createStaticUrlInputDiv();l.appendChild(this._createStaticUrlInputLabel()),this._staticUrlImportInput=this._createStaticUrlInput(),l.appendChild(this._staticUrlImportInput),n.appendChild(l),e.appendChild(n);var c=this._createServiceParamsContainer(this.options.layerTypes[0]),u=this._createServiceUrlDiv();u.appendChild(this._createServiceUrlInputLabel()),this._serviceUrlImportInput=this._createServiceUrlInput(),u.appendChild(this._serviceUrlImportInput),c.appendChild(u),e.appendChild(c);var d=this._createImportSubmitFormElement();return e.appendChild(d),e}},{key:"_onShowImportClick",value:function(e){"true"===e.target.ariaPressed&&this.onPanelOpen();var t=this.getMap();Th.unset(t);var n=this._showImportButton.ariaPressed;this.collapsed=!("true"===n),this.dispatchEvent("change:collapsed"),this.options.position&&!this.collapsed&&this.updatePosition(this.options.position),this._hasMapBoxResults?(this._mapBoxPanel.classList.replace("GPelementHidden","GPelementVisible"),this._mapBoxPanel.classList.replace("gpf-hidden","gpf-visible"),this._hideFormContainer()):this._hasGetCapResults?(this._getCapPanel.classList.replace("GPelementHidden","GPelementVisible"),this._getCapPanel.classList.replace("gpf-hidden","gpf-visible"),this._hideFormContainer()):(this._getCapPanel.classList.replace("GPelementVisible","GPelementHidden"),this._getCapPanel.classList.replace("gpf-visible","gpf-hidden"),this._mapBoxPanel.classList.replace("GPelementVisible","GPelementHidden"),this._mapBoxPanel.classList.replace("gpf-visible","gpf-hidden"),this._displayFormContainer())}},{key:"_onImportTypeChange",value:function(e){this._currentImportType=e.target.value,"KML"===this._currentImportType||"GPX"===this._currentImportType||"GeoJSON"===this._currentImportType||"MAPBOX"===this._currentImportType?this._isCurrentImportTypeStatic=!0:"WMS"!==this._currentImportType&&"WMTS"!==this._currentImportType&&"WFS"!==this._currentImportType||(this._isCurrentImportTypeStatic=!1)}},{key:"_onStaticImportTypeChange",value:function(e){this._currentStaticImportType=e.target.value}},{key:"_onGetCapPanelClose",value:function(){"WMS"!==this._currentImportType&&"WMTS"!==this._currentImportType&&"WFS"!==this._currentImportType||this.cleanGetCapResultsList()}},{key:"_onMapBoxPanelClose",value:function(){this.cleanMapBoxResultsList(),this._loadingContainer.className="",this._importPanelReturnPicto.classList.replace("GPelementVisible","GPelementHidden"),this._importPanelReturnPicto.classList.replace("gpf-visible","gpf-hidden"),this._mapBoxPanel.classList.replace("GPelementVisible","GPelementHidden"),this._mapBoxPanel.classList.replace("gpf-visible","gpf-hidden")}},{key:"_onReturnPictoClick",value:function(e){this._onGetCapPanelClose(),this._onMapBoxPanelClose(),this._loadingContainer.className=""}},{key:"_onImportSubmit",value:function(){Ib.log("import d'une couche de type : "+this._currentImportType),this.contentStatic=null,this.contentService=null,this._isCurrentImportTypeStatic?(this.setCollapsed(!0),this._importStaticLayer()):this._importServiceLayers()}},{key:"_importStaticLayer",value:function(){var e,t=document.getElementById(this._addUID("GPimportName"));t&&(e=t.value||"",Ib.log("import layer name : "+e)),"local"===this._currentStaticImportType?(Ib.log("import static layer from local file"),this._importStaticLayerFromLocalFile(e)):"url"===this._currentStaticImportType&&(Ib.log("import static layer from url"),this._importStaticLayerFromUrl(e))}},{key:"_importStaticLayerFromUrl",value:function(e){var t=this._staticUrlImportInput.value;if(Ib.log("url : ",t),0!==t.length){t.trim&&(t=t.trim()),this._url=t,e||(e=this._url.substring(this._url.lastIndexOf("/")+1,this._url.lastIndexOf("."))),this._name=e,this.options.webServicesOptions&&this.options.webServicesOptions.proxyUrl&&(t=Ct.proxifyUrl(t,this.options.webServicesOptions));var n=this;mt.Protocols.XHR.call({url:t,method:"GET",timeOut:15e3,onResponse:function(t){n._hideWaitingContainer(),n._addFeaturesFromImportStaticLayer(t,e)},onFailure:function(e){n._hideWaitingContainer(),Ib.error("[ol.control.LayerImport] KML/GPX/GeoJSON/MapBox request failed : ",e)}})}else Ib.error("[ol.control.LayerImport] url parameter is mandatory")}},{key:"_importStaticLayerFromLocalFile",value:function(e){var t=this._staticLocalImportInput.files[0];if(t){this._file=t,e||(e=this._file.name.substring(this._file.name.lastIndexOf("/")+1,this._file.name.lastIndexOf("."))),this._name=e;var n=new FileReader,r=this;n.onerror=function(e){r._hideWaitingContainer(),Ib.error("error fileReader : ",e)},n.onprogress=function(){Ib.log("onprogress")},n.onloadstart=function(){r._displayWaitingContainer(),Ib.log("onloadstart")},n.onabort=function(){r._hideWaitingContainer(),Ib.log("onabort")},n.onloadend=function(e){Ib.log("onloadend : ",e)},n.onload=function(t){Ib.log("fileReader onload - file content : ",t.target.result),r._hideWaitingContainer(),r._addFeaturesFromImportStaticLayer(t.target.result,e)},n.readAsText(t)}else Ib.warn("[ol.control.LayerImport] missing file")}},{key:"_addFeaturesFromImportStaticLayer",value:function(e,t){var n=this.getMap();if(n&&e){var r=null,o=null,s=null,l=null;if(this.contentStatic=e,"MAPBOX"===this._currentImportType){this._hasMapBoxResults=!0;var c=this,u=JSON.parse(e),d=u.sources,p=Object.keys(d).length>1?1:0;for(var h in d)if(d.hasOwnProperty(h)){var g="",f="",m=null,y=null,v=null,A=null;if(u.metadata)for(var C in u.metadata)if(u.metadata.hasOwnProperty(C)){var b=C.split(":");if("geoportail"===b[0]){var I=b[1];if("title"===I){g=u.metadata[C];continue}if("description"===I){f=u.metadata[C];continue}if("quicklookUrl"===I){m=u.metadata[C];continue}if("legends"===I){y=u.metadata[C];continue}if("metadata"===I){v=u.metadata[C];continue}if("originators"===I){A=u.metadata[C];continue}}}g||(g="Couche MapBox"),f||(f="Couche MapBox"),g=p?g+"("+h+")":g;var _=d[h],E=_.type;if("vector"===E){var w=_.url,P=_.tiles,S=u.sprite;if(w&&0===w.indexOf("mapbox://")){var M=this._url;if(M){if(P=["a","b","c","d"].map((function(e){return"https://"+e+".tiles.mapbox.com/v4/"+w.replace("mapbox://","")+"/{z}/{x}/{y}.vector.pbf?"+M.split("?")[1]})),0===S.indexOf("mapbox://")){var x=M.split("?");u.sprite=x[0]+"/sprite?"+x[1]}}else Ib.warn("Not yet implemented, can't use the local import scheme with a 'mapbox://' in the file.!")}if(P)s=new(Ci())({featureClass:kt()}),(o=new(i())({attributions:_.attribution,format:s,urls:P}))._title=g,o._description=f,o._quicklookUrl=m,o._metadata=v,o._legends=y,o._originators=A,o.on("tileloadstart",(function(e){c._loadingContainer.className="GPmapLoadingVisible"})),o.on("tileloadend",(function(e){c._loadingContainer.className=""})),o.on("tileloaderror",(function(e){c._loadingContainer.className=""})),(r=new(mi())({source:o,visible:!1,declutter:!0})).id=h,r.gpResultLayerId="layerimport:"+this._currentImportType;else if(w){s=new(Ci())({featureClass:kt()}),(r=new(mi())({visible:!1,declutter:!0})).id=h,r.gpResultLayerId="layerimport:"+this._currentImportType;var G=new(vi())({url:w}),L=G.on("change",(function(){if("ready"===G.getState()){for(var e=G.getTileJSON(),t=Array.isArray(e.tiles)?e.tiles:[e.tiles],n=0;n1e3?Math.round(t/1e3*100)/100+" km":Math.round(100*t)/100+" m"}},{key:"onShowMeasureLengthClick",value:function(e){"true"===e.target.ariaPressed&&this.onPanelOpen(),Zb.trace("call MeasureLength::onShowMeasureLengthClick()",e),this.onShowMeasureClick(e,"LineString")}}])}(Gu);Object.assign(Jb.prototype,YC),Object.assign(Jb.prototype,jb),Object.assign(Jb.prototype,gu);const Xb=Jb;window.ol&&window.ol.control&&(window.ol.control.MeasureLength=Jb);var Kb={_addUID:function(e){return this._uid?e+"-"+this._uid:e},_createMainContainerElement:function(){var e=document.createElement("div");return e.id=this._addUID("GPmeasureArea"),e.className="GPwidget gpf-widget gpf-widget-button",e},_createShowMeasureAreaPictoElement:function(){var e=this,t=document.createElement("button"),n=document.createElement("span");return t.appendChild(n),t.id=this._addUID("GPshowMeasureAreaPicto"),t.className="GPshowOpen GPshowAdvancedToolPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-area fr-btn fr-btn--tertiary",t.setAttribute("aria-label","Mesurer une surface"),t.setAttribute("tabindex","0"),t.setAttribute("aria-pressed",!1),t.setAttribute("type","button"),t.addEventListener?t.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowMeasureAreaClick(t)})):t.attachEvent&&t.attachEvent("onclick",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowMeasureAreaClick(t)})),t}};const Qb=Kb;function $b(e){return $b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},$b(e)}function eI(e,t){for(var n=0;n1e6?Math.round(t/1e6*100)/100+" km2":t>1e5?Math.round(t/1e6*1e3)/1e3+" km2":t>1e3?10*Math.round(t/10)+" m2":Math.round(100*t)/100+" m2"}},{key:"onShowMeasureAreaClick",value:function(e){"true"===e.target.ariaPressed&&this.onPanelOpen(),sI.trace("call MeasureArea::onShowMeasureAreaClick()",e),this.onShowMeasureClick(e,"Polygon")}}])}(Gu);Object.assign(lI.prototype,YC),Object.assign(lI.prototype,Qb),Object.assign(lI.prototype,gu);const cI=lI;window.ol&&window.ol.control&&(window.ol.control.MeasureArea=lI);var uI={_addUID:function(e){return this._uid?e+"-"+this._uid:e},_createMainContainerElement:function(){var e=document.createElement("div");return e.id=this._addUID("GPmeasureAzimuth"),e.className="GPwidget gpf-widget gpf-widget-button",e},_createShowMeasureAzimuthPictoElement:function(){var e=this,t=document.createElement("button"),n=document.createElement("span");return t.appendChild(n),t.id=this._addUID("GPshowMeasureAzimuthPicto"),t.className="GPshowOpen GPshowAdvancedToolPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-azimuth fr-btn fr-btn--tertiary",t.setAttribute("aria-label","Mesurer un azimut"),t.setAttribute("tabindex","0"),t.setAttribute("aria-pressed",!1),t.setAttribute("type","button"),t.addEventListener?t.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowMeasureAzimuthClick(t)})):t.attachEvent&&t.attachEvent("onclick",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowMeasureAzimuthClick(t)})),t}};const dI=uI;function pI(e){return pI="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},pI(e)}function hI(e,t){for(var n=0;n500){var o=500/i;CI.trace("%",o),r=(0,Dr.transform)(e.getCoordinateAt(o),t,"EPSG:4326")}}var a=Math.PI/180,s=180/Math.PI,l=a*n[0],c=a*r[0],u=a*n[1],d=a*r[1],p=Math.sin(c-l)*Math.cos(d),h=Math.cos(u)*Math.sin(d)-Math.sin(u)*Math.cos(d)*Math.cos(c-l),g=s*Math.atan2(p,h);return CI.trace("azimut",g),g<0&&(g+=360),Math.round(100*g)/100+" °"}},{key:"onShowMeasureAzimuthClick",value:function(e){"true"===e.target.ariaPressed&&this.onPanelOpen(),CI.trace("call MeasureAzimuth::onShowMeasureAzimuthClick()",e),this.onShowMeasureClick(e,"LineString")}},{key:"onPointerMoveAzimutHandler",value:function(e){(this.onPointerMoveHandler(e),this.sketch)&&(this.sketch.getGeometry().getCoordinates().length>2&&this.measureDraw.finishDrawing())}}])}(Gu);Object.assign(bI.prototype,YC),Object.assign(bI.prototype,dI),Object.assign(bI.prototype,gu);const II=bI;window.ol&&window.ol.control&&(window.ol.control.MeasureAzimuth=bI);const _I=ol.control.Zoom;var EI=__webpack_require__.n(_I);function wI(e){return wI="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},wI(e)}function PI(e,t){for(var n=0;n\n \n \n
\n ').concat(e.desc,'\n
\n \n ')),r=n.firstChild.querySelector("button");return r&&r.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n);var r=document.getElementById("GPlegend_ID_"+e.id);n?r.classList.replace("gpf-visible","gpf-hidden"):r.classList.replace("gpf-hidden","gpf-visible")})),n.firstChild}}};const a_=o_;function s_(e){return s_="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s_(e)}function l_(e,t){for(var n=0;nl.minScaleDenominator&&u.minScaleDenominator>l.minScaleDenominator&&u.minScaleDenominator\n
\n
\n

\n \n

\n
\n
\n
\n
\n \n
\n
\n \n \n \n
\n
\n \n ')),s=a.firstChild;return s&&s.addEventListener("click",(function(n){t.onImageTerritoriesClick(n,e.id)})),a.firstChild}}};const C_=A_;function b_(e){return b_="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},b_(e)}function I_(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=Array(t);n').firstChild},_createCatalogContentTitleElement:function(e){return Y_('\n \x3c!-- titre --\x3e\n
\n
\n
'.concat(e,"
\n
\n
\n ")).firstChild},_createCatalogContentSearchElement:function(){var e=this,t='\n \x3c!-- barre de recherche --\x3e\n \x3c!-- https://www.systeme-de-design.gouv.fr/composants-et-modeles/composants/barre-de-recherche --\x3e\n \n ',n=Y_(t).attachShadow({mode:"open"});n.innerHTML=t.trim();var r=n.getElementById("search-button");r&&r.addEventListener("click",(function(){e.onSearchCatalogButtonClick()}));var i=n.getElementById("search-input");return i&&i.addEventListener("search",(function(){e.onSearchCatalogInputChange()})),n},_createCatalogWaitingElement:function(){var e=document.createElement("div");e.id=this._addUID("GPcatalogCalcWaitingContainer"),e.className="GPwaitingContainerHidden gpf-waiting--hidden";var t=document.createElement("p");return t.className="GPwaitingContainerInfo gpf-waiting_info",t.innerHTML="Recherche en cours...",e.appendChild(t),e},_createCatalogContentCategoriesTabs:function(e){for(var t=this,n="",r=function(e,t,n,r){var i="GPtabButton fr-tabs__tab",o="false",a=-1;return r&&(i="GPtabButton GPtabButtonActive fr-tabs__tab",o="true",a=0),'\n \n ")},i="",o=function(e){var t=e.default?"checked":"";return'\n \x3c!-- sous categorie --\x3e\n
\n
\n \n \n
\n
\n ")},a="",s=function(e,t,n,r){var a="GPtabContent fr-tabs__panel",s=-1;n&&(a="GPtabContent GPtabContentSelected fr-tabs__panel fr-tabs__panel--selected",s=0);var l='
';return r&&(l=function(e,t){for(var n="",r=0;r')}return'\n \x3c!-- sous categories --\x3e\n
\n ').concat(i,'\n
\n
\n ').concat(n,"\n ")}(t,r)),'\n \x3c!-- panneaux --\x3e\n
\n ').concat(l,"\n
\n ")},l=0;l\n '.concat(n,"\n \n ").concat(a,"\n \n \n "),d=Y_(u.trim()).attachShadow({mode:"open"});d.innerHTML=u.trim();var p=d.querySelectorAll('[role="tabpanel-section"]'),h=d.querySelectorAll('[name="radio-inline"]');h&&h.forEach((function(e){e.addEventListener("change",(function(e){for(var t=0;t\n
\n \n \n
\n
\n \n ')},a=function(e,t,n,r,i){return'\n \x3c!-- section --\x3e\n
\n

\n \n

\n
\n ').concat(i,"\n
\n
\n ")},s=e.section;s&&(r=r.sort((function(t,n){return t[e.filter.field].localeCompare(n[e.filter.field])})));for(var l={},c=0;c\n ').concat(i,"\n \n "),f=Y_(g).attachShadow({mode:"open"});f.innerHTML=g.trim();var m="checkboxes-".concat(e.id),y=f.querySelectorAll('[name="'+m+'"]');y&&y.forEach((function(e){e.addEventListener("click",(function(e){n.onSelectCatalogEntryClick(e)}))}));var v="button-collapse-".concat(e.id),A=f.querySelectorAll('[role="'+v+'"]');A&&A.forEach((function(e){e.addEventListener("click",(function(e){e.target.ariaExpanded=!("true"===e.target.ariaExpanded);var t=document.getElementById(e.target.getAttribute("aria-controls"));t&&("true"===e.target.ariaExpanded?(t.classList.add("fr-collapse--expanded"),t.classList.remove("GPelementHidden")):(t.classList.remove("fr-collapse--expanded"),t.classList.add("GPelementHidden")))}),!1)}));"button-icon-collapse-".concat(e.id);var C=f.querySelectorAll('[role="'+v+'"]');return C&&C.forEach((function(e){e.addEventListener("click",(function(e){e.target.parentElement.click()}))})),f}};const J_=Z_;function X_(e){return X_="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},X_(e)}function K_(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */K_=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,i=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag";function c(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var o=t&&t.prototype instanceof y?t:y,a=Object.create(o.prototype),s=new G(r||[]);return i(a,"_invoke",{value:P(e,n,s)}),a}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=u;var p="suspendedStart",h="suspendedYield",g="executing",f="completed",m={};function y(){}function v(){}function A(){}var C={};c(C,a,(function(){return this}));var b=Object.getPrototypeOf,I=b&&b(b(L([])));I&&I!==n&&r.call(I,a)&&(C=I);var _=A.prototype=y.prototype=Object.create(C);function E(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function n(i,o,a,s){var l=d(e[i],e,o);if("throw"!==l.type){var c=l.arg,u=c.value;return u&&"object"==X_(u)&&r.call(u,"__await")?t.resolve(u.__await).then((function(e){n("next",e,a,s)}),(function(e){n("throw",e,a,s)})):t.resolve(u).then((function(e){c.value=e,a(c)}),(function(e){return n("throw",e,a,s)}))}s(l.arg)}var o;i(this,"_invoke",{value:function(e,r){function i(){return new t((function(t,i){n(e,r,t,i)}))}return o=o?o.then(i,i):i()}})}function P(t,n,r){var i=p;return function(o,a){if(i===g)throw Error("Generator is already running");if(i===f){if("throw"===o)throw a;return{value:e,done:!0}}for(r.method=o,r.arg=a;;){var s=r.delegate;if(s){var l=S(s,r);if(l){if(l===m)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(i===p)throw i=f,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);i=g;var c=d(t,n,r);if("normal"===c.type){if(i=r.done?f:h,c.arg===m)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(i=f,r.method="throw",r.arg=c.arg)}}}function S(t,n){var r=n.method,i=t.iterator[r];if(i===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,S(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),m;var o=d(i,t.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,m;var a=o.arg;return a?a.done?(n[t.resultName]=a.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,m):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,m)}function M(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function G(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(M,this),this.reset(!0)}function L(t){if(t||""===t){var n=t[a];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var i=-1,o=function n(){for(;++i=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var l=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(l&&c){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),x(n),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var i=r.arg;x(n)}return i}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:L(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),m}},t}function Q_(e,t,n,r,i,o,a){try{var s=e[o](a),l=s.value}catch(e){return void n(e)}s.done?t(l):Promise.resolve(l).then(r,i)}function $_(e,t){for(var n=0;n>?} ac\n * Allows injecting a custom implementation in tests (`Array.prototype` by default).\n * @returns {T | undefined}\n * @template {unknown} T\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n * @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find\n */\nfunction find(list, predicate, ac) {\n\tif (ac === undefined) {\n\t\tac = Array.prototype;\n\t}\n\tif (list && typeof ac.find === 'function') {\n\t\treturn ac.find.call(list, predicate);\n\t}\n\tfor (var i = 0; i < list.length; i++) {\n\t\tif (hasOwn(list, i)) {\n\t\t\tvar item = list[i];\n\t\t\tif (predicate.call(undefined, item, i, list)) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * \"Shallow freezes\" an object to render it immutable.\n * Uses `Object.freeze` if available,\n * otherwise the immutability is only in the type.\n *\n * Is used to create \"enum like\" objects.\n *\n * If `Object.getOwnPropertyDescriptors` is available,\n * a new object with all properties of object but without any prototype is created and returned\n * after freezing it.\n *\n * @param {T} object\n * The object to freeze.\n * @param {Pick} [oc=Object]\n * `Object` by default,\n * allows to inject custom object constructor for tests.\n * @returns {Readonly}\n * @template {Object} T\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n * @prettierignore\n */\nfunction freeze(object, oc) {\n\tif (oc === undefined) {\n\t\toc = Object;\n\t}\n\tif (oc && typeof oc.getOwnPropertyDescriptors === 'function') {\n\t\tobject = oc.create(null, oc.getOwnPropertyDescriptors(object));\n\t}\n\treturn oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object;\n}\n\n/**\n * Implementation for `Object.hasOwn` but ES5 compatible.\n *\n * @param {any} object\n * @param {string | number} key\n * @returns {boolean}\n */\nfunction hasOwn(object, key) {\n\treturn Object.prototype.hasOwnProperty.call(object, key);\n}\n\n/**\n * Since xmldom can not rely on `Object.assign`,\n * it uses/provides a simplified version that is sufficient for its needs.\n *\n * @param {Object} target\n * @param {Object | null | undefined} source\n * @returns {Object}\n * The target with the merged/overridden properties.\n * @throws {TypeError}\n * If target is not an object.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign\n */\nfunction assign(target, source) {\n\tif (target === null || typeof target !== 'object') {\n\t\tthrow new TypeError('target is not an object');\n\t}\n\tfor (var key in source) {\n\t\tif (hasOwn(source, key)) {\n\t\t\ttarget[key] = source[key];\n\t\t}\n\t}\n\treturn target;\n}\n\n/**\n * A number of attributes are boolean attributes.\n * The presence of a boolean attribute on an element represents the `true` value,\n * and the absence of the attribute represents the `false` value.\n *\n * If the attribute is present, its value must either be the empty string, or a value that is\n * an ASCII case-insensitive match for the attribute's canonical name,\n * with no leading or trailing whitespace.\n *\n * Note: The values `\"true\"` and `\"false\"` are not allowed on boolean attributes.\n * To represent a `false` value, the attribute has to be omitted altogether.\n *\n * @see https://html.spec.whatwg.org/#boolean-attributes\n * @see https://html.spec.whatwg.org/#attributes-3\n */\nvar HTML_BOOLEAN_ATTRIBUTES = freeze({\n\tallowfullscreen: true,\n\tasync: true,\n\tautofocus: true,\n\tautoplay: true,\n\tchecked: true,\n\tcontrols: true,\n\tdefault: true,\n\tdefer: true,\n\tdisabled: true,\n\tformnovalidate: true,\n\thidden: true,\n\tismap: true,\n\titemscope: true,\n\tloop: true,\n\tmultiple: true,\n\tmuted: true,\n\tnomodule: true,\n\tnovalidate: true,\n\topen: true,\n\tplaysinline: true,\n\treadonly: true,\n\trequired: true,\n\treversed: true,\n\tselected: true,\n});\n\n/**\n * Check if `name` is matching one of the HTML boolean attribute names.\n * This method doesn't check if such attributes are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} name\n * @returns {boolean}\n * @see {@link HTML_BOOLEAN_ATTRIBUTES}\n * @see https://html.spec.whatwg.org/#boolean-attributes\n * @see https://html.spec.whatwg.org/#attributes-3\n */\nfunction isHTMLBooleanAttribute(name) {\n\treturn hasOwn(HTML_BOOLEAN_ATTRIBUTES, name.toLowerCase());\n}\n\n/**\n * Void elements only have a start tag; end tags must not be specified for void elements.\n * These elements should be written as self-closing like this: ``.\n * This should not be confused with optional tags that HTML allows to omit the end tag for\n * (like `li`, `tr` and others), which can have content after them,\n * so they can not be written as self-closing.\n * xmldom does not have any logic for optional end tags cases,\n * and will report them as a warning.\n * Content that would go into the unopened element,\n * will instead be added as a sibling text node.\n *\n * @type {Readonly<{\n * \tarea: boolean;\n * \tcol: boolean;\n * \timg: boolean;\n * \twbr: boolean;\n * \tlink: boolean;\n * \thr: boolean;\n * \tsource: boolean;\n * \tbr: boolean;\n * \tinput: boolean;\n * \tparam: boolean;\n * \tmeta: boolean;\n * \tembed: boolean;\n * \ttrack: boolean;\n * \tbase: boolean;\n * }>}\n * @see https://html.spec.whatwg.org/#void-elements\n * @see https://html.spec.whatwg.org/#optional-tags\n */\nvar HTML_VOID_ELEMENTS = freeze({\n\tarea: true,\n\tbase: true,\n\tbr: true,\n\tcol: true,\n\tembed: true,\n\thr: true,\n\timg: true,\n\tinput: true,\n\tlink: true,\n\tmeta: true,\n\tparam: true,\n\tsource: true,\n\ttrack: true,\n\twbr: true,\n});\n\n/**\n * Check if `tagName` is matching one of the HTML void element names.\n * This method doesn't check if such tags are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} tagName\n * @returns {boolean}\n * @see {@link HTML_VOID_ELEMENTS}\n * @see https://html.spec.whatwg.org/#void-elements\n */\nfunction isHTMLVoidElement(tagName) {\n\treturn hasOwn(HTML_VOID_ELEMENTS, tagName.toLowerCase());\n}\n\n/**\n * Tag names that are raw text elements according to HTML spec.\n * The value denotes whether they are escapable or not.\n *\n * @see {@link isHTMLEscapableRawTextElement}\n * @see {@link isHTMLRawTextElement}\n * @see https://html.spec.whatwg.org/#raw-text-elements\n * @see https://html.spec.whatwg.org/#escapable-raw-text-elements\n */\nvar HTML_RAW_TEXT_ELEMENTS = freeze({\n\tscript: false,\n\tstyle: false,\n\ttextarea: true,\n\ttitle: true,\n});\n\n/**\n * Check if `tagName` is matching one of the HTML raw text element names.\n * This method doesn't check if such tags are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} tagName\n * @returns {boolean}\n * @see {@link isHTMLEscapableRawTextElement}\n * @see {@link HTML_RAW_TEXT_ELEMENTS}\n * @see https://html.spec.whatwg.org/#raw-text-elements\n * @see https://html.spec.whatwg.org/#escapable-raw-text-elements\n */\nfunction isHTMLRawTextElement(tagName) {\n\tvar key = tagName.toLowerCase();\n\treturn hasOwn(HTML_RAW_TEXT_ELEMENTS, key) && !HTML_RAW_TEXT_ELEMENTS[key];\n}\n/**\n * Check if `tagName` is matching one of the HTML escapable raw text element names.\n * This method doesn't check if such tags are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} tagName\n * @returns {boolean}\n * @see {@link isHTMLRawTextElement}\n * @see {@link HTML_RAW_TEXT_ELEMENTS}\n * @see https://html.spec.whatwg.org/#raw-text-elements\n * @see https://html.spec.whatwg.org/#escapable-raw-text-elements\n */\nfunction isHTMLEscapableRawTextElement(tagName) {\n\tvar key = tagName.toLowerCase();\n\treturn hasOwn(HTML_RAW_TEXT_ELEMENTS, key) && HTML_RAW_TEXT_ELEMENTS[key];\n}\n/**\n * Only returns true if `value` matches MIME_TYPE.HTML, which indicates an HTML document.\n *\n * @param {string} mimeType\n * @returns {mimeType is 'text/html'}\n * @see https://www.iana.org/assignments/media-types/text/html\n * @see https://en.wikipedia.org/wiki/HTML\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring\n */\nfunction isHTMLMimeType(mimeType) {\n\treturn mimeType === MIME_TYPE.HTML;\n}\n/**\n * For both the `text/html` and the `application/xhtml+xml` namespace the spec defines that the\n * HTML namespace is provided as the default.\n *\n * @param {string} mimeType\n * @returns {boolean}\n * @see https://dom.spec.whatwg.org/#dom-document-createelement\n * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument\n * @see https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument\n */\nfunction hasDefaultHTMLNamespace(mimeType) {\n\treturn isHTMLMimeType(mimeType) || mimeType === MIME_TYPE.XML_XHTML_APPLICATION;\n}\n\n/**\n * All mime types that are allowed as input to `DOMParser.parseFromString`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02\n * MDN\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype\n * WHATWG HTML Spec\n * @see {@link DOMParser.prototype.parseFromString}\n */\nvar MIME_TYPE = freeze({\n\t/**\n\t * `text/html`, the only mime type that triggers treating an XML document as HTML.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring\n\t * WHATWG HTML Spec\n\t */\n\tHTML: 'text/html',\n\n\t/**\n\t * `application/xml`, the standard mime type for XML documents.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType\n\t * registration\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_APPLICATION: 'application/xml',\n\n\t/**\n\t * `text/html`, an alias for `application/xml`.\n\t *\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303\n\t * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_TEXT: 'text/xml',\n\n\t/**\n\t * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,\n\t * but is parsed as an XML document.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType\n\t * registration\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec\n\t * @see https://en.wikipedia.org/wiki/XHTML Wikipedia\n\t */\n\tXML_XHTML_APPLICATION: 'application/xhtml+xml',\n\n\t/**\n\t * `image/svg+xml`,\n\t *\n\t * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration\n\t * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1\n\t * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia\n\t */\n\tXML_SVG_IMAGE: 'image/svg+xml',\n});\n/**\n * @typedef {'application/xhtml+xml' | 'application/xml' | 'image/svg+xml' | 'text/html' | 'text/xml'}\n * MimeType\n */\n/**\n * @type {MimeType[]}\n * @private\n * Basically `Object.values`, which is not available in ES5.\n */\nvar _MIME_TYPES = Object.keys(MIME_TYPE).map(function (key) {\n\treturn MIME_TYPE[key];\n});\n\n/**\n * Only returns true if `mimeType` is one of the allowed values for\n * `DOMParser.parseFromString`.\n *\n * @param {string} mimeType\n * @returns {mimeType is 'application/xhtml+xml' | 'application/xml' | 'image/svg+xml' | 'text/html' | 'text/xml'}\n *\n */\nfunction isValidMimeType(mimeType) {\n\treturn _MIME_TYPES.indexOf(mimeType) > -1;\n}\n/**\n * Namespaces that are used in this code base.\n *\n * @see http://www.w3.org/TR/REC-xml-names\n */\nvar NAMESPACE = freeze({\n\t/**\n\t * The XHTML namespace.\n\t *\n\t * @see http://www.w3.org/1999/xhtml\n\t */\n\tHTML: 'http://www.w3.org/1999/xhtml',\n\n\t/**\n\t * The SVG namespace.\n\t *\n\t * @see http://www.w3.org/2000/svg\n\t */\n\tSVG: 'http://www.w3.org/2000/svg',\n\n\t/**\n\t * The `xml:` namespace.\n\t *\n\t * @see http://www.w3.org/XML/1998/namespace\n\t */\n\tXML: 'http://www.w3.org/XML/1998/namespace',\n\n\t/**\n\t * The `xmlns:` namespace.\n\t *\n\t * @see https://www.w3.org/2000/xmlns/\n\t */\n\tXMLNS: 'http://www.w3.org/2000/xmlns/',\n});\n\nexports.assign = assign;\nexports.find = find;\nexports.freeze = freeze;\nexports.HTML_BOOLEAN_ATTRIBUTES = HTML_BOOLEAN_ATTRIBUTES;\nexports.HTML_RAW_TEXT_ELEMENTS = HTML_RAW_TEXT_ELEMENTS;\nexports.HTML_VOID_ELEMENTS = HTML_VOID_ELEMENTS;\nexports.hasDefaultHTMLNamespace = hasDefaultHTMLNamespace;\nexports.hasOwn = hasOwn;\nexports.isHTMLBooleanAttribute = isHTMLBooleanAttribute;\nexports.isHTMLRawTextElement = isHTMLRawTextElement;\nexports.isHTMLEscapableRawTextElement = isHTMLEscapableRawTextElement;\nexports.isHTMLMimeType = isHTMLMimeType;\nexports.isHTMLVoidElement = isHTMLVoidElement;\nexports.isValidMimeType = isValidMimeType;\nexports.MIME_TYPE = MIME_TYPE;\nexports.NAMESPACE = NAMESPACE;\n","'use strict';\n\nvar conventions = require('./conventions');\nvar dom = require('./dom');\nvar errors = require('./errors');\nvar entities = require('./entities');\nvar sax = require('./sax');\n\nvar DOMImplementation = dom.DOMImplementation;\n\nvar hasDefaultHTMLNamespace = conventions.hasDefaultHTMLNamespace;\nvar isHTMLMimeType = conventions.isHTMLMimeType;\nvar isValidMimeType = conventions.isValidMimeType;\nvar MIME_TYPE = conventions.MIME_TYPE;\nvar NAMESPACE = conventions.NAMESPACE;\nvar ParseError = errors.ParseError;\n\nvar XMLReader = sax.XMLReader;\n\n/**\n * Normalizes line ending according to :\n *\n * > XML parsed entities are often stored in computer files which,\n * > for editing convenience, are organized into lines.\n * > These lines are typically separated by some combination\n * > of the characters CARRIAGE RETURN (#xD) and LINE FEED (#xA).\n * >\n * > To simplify the tasks of applications, the XML processor must behave\n * > as if it normalized all line breaks in external parsed entities (including the document entity)\n * > on input, before parsing, by translating all of the following to a single #xA character:\n * >\n * > 1. the two-character sequence #xD #xA,\n * > 2. the two-character sequence #xD #x85,\n * > 3. the single character #x85,\n * > 4. the single character #x2028,\n * > 5. any #xD character that is not immediately followed by #xA or #x85.\n *\n * @param {string} input\n * @returns {string}\n * @prettierignore\n */\nfunction normalizeLineEndings(input) {\n\treturn input.replace(/\\r[\\n\\u0085]/g, '\\n').replace(/[\\r\\u0085\\u2028]/g, '\\n');\n}\n\n/**\n * @typedef Locator\n * @property {number} [columnNumber]\n * @property {number} [lineNumber]\n */\n\n/**\n * @typedef DOMParserOptions\n * @property {typeof assign} [assign]\n * The method to use instead of `conventions.assign`, which is used to copy values from\n * `options` before they are used for parsing.\n * @property {typeof DOMHandler} [domHandler]\n * For internal testing: The class for creating an instance for handling events from the SAX\n * parser.\n * *****Warning: By configuring a faulty implementation, the specified behavior can completely\n * be broken.*****.\n * @property {Function} [errorHandler]\n * DEPRECATED! use `onError` instead.\n * @property {function(level:ErrorLevel, message:string, context: DOMHandler):void}\n * [onError]\n * A function that is invoked for every error that occurs during parsing.\n *\n * If it is not provided, all errors are reported to `console.error`\n * and only `fatalError`s are thrown as a `ParseError`,\n * which prevents any further processing.\n * If the provided method throws, a `ParserError` is thrown,\n * which prevents any further processing.\n *\n * Be aware that many `warning`s are considered an error that prevents further processing in\n * most implementations.\n * @property {boolean} [locator=true]\n * Configures if the nodes created during parsing will have a `lineNumber` and a `columnNumber`\n * attribute describing their location in the XML string.\n * Default is true.\n * @property {(string) => string} [normalizeLineEndings]\n * used to replace line endings before parsing, defaults to `normalizeLineEndings`\n * @property {Object} [xmlns]\n * The XML namespaces that should be assumed when parsing.\n * The default namespace can be provided by the key that is the empty string.\n * When the `mimeType` for HTML, XHTML or SVG are passed to `parseFromString`,\n * the default namespace that will be used,\n * will be overridden according to the specification.\n * @see {@link normalizeLineEndings}\n */\n\n/**\n * The DOMParser interface provides the ability to parse XML or HTML source code from a string\n * into a DOM `Document`.\n *\n * ***xmldom is different from the spec in that it allows an `options` parameter,\n * to control the behavior***.\n *\n * @class\n * @param {DOMParserOptions} [options]\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization\n */\nfunction DOMParser(options) {\n\toptions = options || { locator: true };\n\n\t/**\n\t * The method to use instead of `conventions.assign`, which is used to copy values from\n\t * `options`\n\t * before they are used for parsing.\n\t *\n\t * @type {conventions.assign}\n\t * @private\n\t * @see {@link conventions.assign}\n\t * @readonly\n\t */\n\tthis.assign = options.assign || conventions.assign;\n\n\t/**\n\t * For internal testing: The class for creating an instance for handling events from the SAX\n\t * parser.\n\t * *****Warning: By configuring a faulty implementation, the specified behavior can completely\n\t * be broken*****.\n\t *\n\t * @type {typeof DOMHandler}\n\t * @private\n\t * @readonly\n\t */\n\tthis.domHandler = options.domHandler || DOMHandler;\n\n\t/**\n\t * A function that is invoked for every error that occurs during parsing.\n\t *\n\t * If it is not provided, all errors are reported to `console.error`\n\t * and only `fatalError`s are thrown as a `ParseError`,\n\t * which prevents any further processing.\n\t * If the provided method throws, a `ParserError` is thrown,\n\t * which prevents any further processing.\n\t *\n\t * Be aware that many `warning`s are considered an error that prevents further processing in\n\t * most implementations.\n\t *\n\t * @type {function(level:ErrorLevel, message:string, context: DOMHandler):void}\n\t * @see {@link onErrorStopParsing}\n\t * @see {@link onWarningStopParsing}\n\t */\n\tthis.onError = options.onError || options.errorHandler;\n\tif (options.errorHandler && typeof options.errorHandler !== 'function') {\n\t\tthrow new TypeError('errorHandler object is no longer supported, switch to onError!');\n\t} else if (options.errorHandler) {\n\t\toptions.errorHandler('warning', 'The `errorHandler` option has been deprecated, use `onError` instead!', this);\n\t}\n\n\t/**\n\t * used to replace line endings before parsing, defaults to `normalizeLineEndings`\n\t *\n\t * @type {(string) => string}\n\t * @readonly\n\t */\n\tthis.normalizeLineEndings = options.normalizeLineEndings || normalizeLineEndings;\n\n\t/**\n\t * Configures if the nodes created during parsing will have a `lineNumber` and a\n\t * `columnNumber`\n\t * attribute describing their location in the XML string.\n\t * Default is true.\n\t *\n\t * @type {boolean}\n\t * @readonly\n\t */\n\tthis.locator = !!options.locator;\n\n\t/**\n\t * The default namespace can be provided by the key that is the empty string.\n\t * When the `mimeType` for HTML, XHTML or SVG are passed to `parseFromString`,\n\t * the default namespace that will be used,\n\t * will be overridden according to the specification.\n\t *\n\t * @type {Readonly}\n\t * @readonly\n\t */\n\tthis.xmlns = this.assign(Object.create(null), options.xmlns);\n}\n\n/**\n * Parses `source` using the options in the way configured by the `DOMParserOptions` of `this`\n * `DOMParser`. If `mimeType` is `text/html` an HTML `Document` is created,\n * otherwise an XML `Document` is created.\n *\n * __It behaves different from the description in the living standard__:\n * - Uses the `options` passed to the `DOMParser` constructor to modify the behavior.\n * - Any unexpected input is reported to `onError` with either a `warning`,\n * `error` or `fatalError` level.\n * - Any `fatalError` throws a `ParseError` which prevents further processing.\n * - Any error thrown by `onError` is converted to a `ParseError` which prevents further\n * processing - If no `Document` was created during parsing it is reported as a `fatalError`.\n * *****Warning: By configuring a faulty DOMHandler implementation,\n * the specified behavior can completely be broken*****.\n *\n * @param {string} source\n * The XML mime type only allows string input!\n * @param {string} [mimeType='application/xml']\n * the mimeType or contentType of the document to be created determines the `type` of document\n * created (XML or HTML)\n * @returns {Document}\n * The `Document` node.\n * @throws {ParseError}\n * for any `fatalError` or anything that is thrown by `onError`\n * @throws {TypeError}\n * for any invalid `mimeType`\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString\n * @see https://html.spec.whatwg.org/#dom-domparser-parsefromstring-dev\n */\nDOMParser.prototype.parseFromString = function (source, mimeType) {\n\tif (!isValidMimeType(mimeType)) {\n\t\tthrow new TypeError('DOMParser.parseFromString: the provided mimeType \"' + mimeType + '\" is not valid.');\n\t}\n\tvar defaultNSMap = this.assign(Object.create(null), this.xmlns);\n\tvar entityMap = entities.XML_ENTITIES;\n\tvar defaultNamespace = defaultNSMap[''] || null;\n\tif (hasDefaultHTMLNamespace(mimeType)) {\n\t\tentityMap = entities.HTML_ENTITIES;\n\t\tdefaultNamespace = NAMESPACE.HTML;\n\t} else if (mimeType === MIME_TYPE.XML_SVG_IMAGE) {\n\t\tdefaultNamespace = NAMESPACE.SVG;\n\t}\n\tdefaultNSMap[''] = defaultNamespace;\n\tdefaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML;\n\n\tvar domBuilder = new this.domHandler({\n\t\tmimeType: mimeType,\n\t\tdefaultNamespace: defaultNamespace,\n\t\tonError: this.onError,\n\t});\n\tvar locator = this.locator ? {} : undefined;\n\tif (this.locator) {\n\t\tdomBuilder.setDocumentLocator(locator);\n\t}\n\n\tvar sax = new XMLReader();\n\tsax.errorHandler = domBuilder;\n\tsax.domBuilder = domBuilder;\n\tvar isXml = !conventions.isHTMLMimeType(mimeType);\n\tif (isXml && typeof source !== 'string') {\n\t\tsax.errorHandler.fatalError('source is not a string');\n\t}\n\tsax.parse(this.normalizeLineEndings(String(source)), defaultNSMap, entityMap);\n\tif (!domBuilder.doc.documentElement) {\n\t\tsax.errorHandler.fatalError('missing root element');\n\t}\n\treturn domBuilder.doc;\n};\n\n/**\n * @typedef DOMHandlerOptions\n * @property {string} [mimeType=MIME_TYPE.XML_APPLICATION]\n * @property {string | null} [defaultNamespace=null]\n */\n/**\n * The class that is used to handle events from the SAX parser to create the related DOM\n * elements.\n *\n * Some methods are only implemented as an empty function,\n * since they are (at least currently) not relevant for xmldom.\n *\n * @class\n * @param {DOMHandlerOptions} [options]\n * @see http://www.saxproject.org/apidoc/org/xml/sax/ext/DefaultHandler2.html\n */\nfunction DOMHandler(options) {\n\tvar opt = options || {};\n\t/**\n\t * The mime type is used to determine if the DOM handler will create an XML or HTML document.\n\t * Only if it is set to `text/html` it will create an HTML document.\n\t * It defaults to MIME_TYPE.XML_APPLICATION.\n\t *\n\t * @type {string}\n\t * @see {@link MIME_TYPE}\n\t * @readonly\n\t */\n\tthis.mimeType = opt.mimeType || MIME_TYPE.XML_APPLICATION;\n\n\t/**\n\t * The namespace to use to create an XML document.\n\t * For the following reasons this is required:\n\t * - The SAX API for `startDocument` doesn't offer any way to pass a namespace,\n\t * since at that point there is no way for the parser to know what the default namespace from\n\t * the document will be.\n\t * - When creating using `DOMImplementation.createDocument` it is required to pass a\n\t * namespace,\n\t * to determine the correct `Document.contentType`, which should match `this.mimeType`.\n\t * - When parsing an XML document with the `application/xhtml+xml` mimeType,\n\t * the HTML namespace needs to be the default namespace.\n\t *\n\t * @type {string | null}\n\t * @private\n\t * @readonly\n\t */\n\tthis.defaultNamespace = opt.defaultNamespace || null;\n\n\t/**\n\t * @type {boolean}\n\t * @private\n\t */\n\tthis.cdata = false;\n\n\t/**\n\t * The last `Element` that was created by `startElement`.\n\t * `endElement` sets it to the `currentElement.parentNode`.\n\t *\n\t * Note: The sax parser currently sets it to white space text nodes between tags.\n\t *\n\t * @type {Element | Node | undefined}\n\t * @private\n\t */\n\tthis.currentElement = undefined;\n\n\t/**\n\t * The Document that is created as part of `startDocument`,\n\t * and returned by `DOMParser.parseFromString`.\n\t *\n\t * @type {Document | undefined}\n\t * @readonly\n\t */\n\tthis.doc = undefined;\n\n\t/**\n\t * The locator is stored as part of setDocumentLocator.\n\t * It is controlled and mutated by the SAX parser to store the current parsing position.\n\t * It is used by DOMHandler to set `columnNumber` and `lineNumber`\n\t * on the DOM nodes.\n\t *\n\t * @type {Readonly | undefined}\n\t * @private\n\t * @readonly (the\n\t * sax parser currently sometimes set's it)\n\t */\n\tthis.locator = undefined;\n\t/**\n\t * @type {function (level:ErrorLevel ,message:string, context:DOMHandler):void}\n\t * @readonly\n\t */\n\tthis.onError = opt.onError;\n}\n\nfunction position(locator, node) {\n\tnode.lineNumber = locator.lineNumber;\n\tnode.columnNumber = locator.columnNumber;\n}\n\nDOMHandler.prototype = {\n\t/**\n\t * Either creates an XML or an HTML document and stores it under `this.doc`.\n\t * If it is an XML document, `this.defaultNamespace` is used to create it,\n\t * and it will not contain any `childNodes`.\n\t * If it is an HTML document, it will be created without any `childNodes`.\n\t *\n\t * @see http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html\n\t */\n\tstartDocument: function () {\n\t\tvar impl = new DOMImplementation();\n\t\tthis.doc = isHTMLMimeType(this.mimeType) ? impl.createHTMLDocument(false) : impl.createDocument(this.defaultNamespace, '');\n\t},\n\tstartElement: function (namespaceURI, localName, qName, attrs) {\n\t\tvar doc = this.doc;\n\t\tvar el = doc.createElementNS(namespaceURI, qName || localName);\n\t\tvar len = attrs.length;\n\t\tappendElement(this, el);\n\t\tthis.currentElement = el;\n\n\t\tthis.locator && position(this.locator, el);\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tvar namespaceURI = attrs.getURI(i);\n\t\t\tvar value = attrs.getValue(i);\n\t\t\tvar qName = attrs.getQName(i);\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\n\t\t\tthis.locator && position(attrs.getLocator(i), attr);\n\t\t\tattr.value = attr.nodeValue = value;\n\t\t\tel.setAttributeNode(attr);\n\t\t}\n\t},\n\tendElement: function (namespaceURI, localName, qName) {\n\t\tthis.currentElement = this.currentElement.parentNode;\n\t},\n\tstartPrefixMapping: function (prefix, uri) {},\n\tendPrefixMapping: function (prefix) {},\n\tprocessingInstruction: function (target, data) {\n\t\tvar ins = this.doc.createProcessingInstruction(target, data);\n\t\tthis.locator && position(this.locator, ins);\n\t\tappendElement(this, ins);\n\t},\n\tignorableWhitespace: function (ch, start, length) {},\n\tcharacters: function (chars, start, length) {\n\t\tchars = _toString.apply(this, arguments);\n\t\t//console.log(chars)\n\t\tif (chars) {\n\t\t\tif (this.cdata) {\n\t\t\t\tvar charNode = this.doc.createCDATASection(chars);\n\t\t\t} else {\n\t\t\t\tvar charNode = this.doc.createTextNode(chars);\n\t\t\t}\n\t\t\tif (this.currentElement) {\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t} else if (/^\\s*$/.test(chars)) {\n\t\t\t\tthis.doc.appendChild(charNode);\n\t\t\t\t//process xml\n\t\t\t}\n\t\t\tthis.locator && position(this.locator, charNode);\n\t\t}\n\t},\n\tskippedEntity: function (name) {},\n\tendDocument: function () {\n\t\tthis.doc.normalize();\n\t},\n\t/**\n\t * Stores the locator to be able to set the `columnNumber` and `lineNumber`\n\t * on the created DOM nodes.\n\t *\n\t * @param {Locator} locator\n\t */\n\tsetDocumentLocator: function (locator) {\n\t\tif (locator) {\n\t\t\tlocator.lineNumber = 0;\n\t\t}\n\t\tthis.locator = locator;\n\t},\n\t//LexicalHandler\n\tcomment: function (chars, start, length) {\n\t\tchars = _toString.apply(this, arguments);\n\t\tvar comm = this.doc.createComment(chars);\n\t\tthis.locator && position(this.locator, comm);\n\t\tappendElement(this, comm);\n\t},\n\n\tstartCDATA: function () {\n\t\t//used in characters() methods\n\t\tthis.cdata = true;\n\t},\n\tendCDATA: function () {\n\t\tthis.cdata = false;\n\t},\n\n\tstartDTD: function (name, publicId, systemId, internalSubset) {\n\t\tvar impl = this.doc.implementation;\n\t\tif (impl && impl.createDocumentType) {\n\t\t\tvar dt = impl.createDocumentType(name, publicId, systemId, internalSubset);\n\t\t\tthis.locator && position(this.locator, dt);\n\t\t\tappendElement(this, dt);\n\t\t\tthis.doc.doctype = dt;\n\t\t}\n\t},\n\treportError: function (level, message) {\n\t\tif (typeof this.onError === 'function') {\n\t\t\ttry {\n\t\t\t\tthis.onError(level, message, this);\n\t\t\t} catch (e) {\n\t\t\t\tthrow new ParseError('Reporting ' + level + ' \"' + message + '\" caused ' + e, this.locator);\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.error('[xmldom ' + level + ']\\t' + message, _locator(this.locator));\n\t\t}\n\t},\n\t/**\n\t * @see http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html\n\t */\n\twarning: function (message) {\n\t\tthis.reportError('warning', message);\n\t},\n\terror: function (message) {\n\t\tthis.reportError('error', message);\n\t},\n\t/**\n\t * This function reports a fatal error and throws a ParseError.\n\t *\n\t * @param {string} message\n\t * - The message to be used for reporting and throwing the error.\n\t * @returns {never}\n\t * This function always throws an error and never returns a value.\n\t * @throws {ParseError}\n\t * Always throws a ParseError with the provided message.\n\t */\n\tfatalError: function (message) {\n\t\tthis.reportError('fatalError', message);\n\t\tthrow new ParseError(message, this.locator);\n\t},\n};\n\nfunction _locator(l) {\n\tif (l) {\n\t\treturn '\\n@#[line:' + l.lineNumber + ',col:' + l.columnNumber + ']';\n\t}\n}\n\nfunction _toString(chars, start, length) {\n\tif (typeof chars == 'string') {\n\t\treturn chars.substr(start, length);\n\t} else {\n\t\t//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\n\t\tif (chars.length >= start + length || start) {\n\t\t\treturn new java.lang.String(chars, start, length) + '';\n\t\t}\n\t\treturn chars;\n\t}\n}\n\n/*\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html\n * used method of org.xml.sax.ext.LexicalHandler:\n * #comment(chars, start, length)\n * #startCDATA()\n * #endCDATA()\n * #startDTD(name, publicId, systemId)\n *\n *\n * IGNORED method of org.xml.sax.ext.LexicalHandler:\n * #endDTD()\n * #startEntity(name)\n * #endEntity(name)\n *\n *\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html\n * IGNORED method of org.xml.sax.ext.DeclHandler\n * \t#attributeDecl(eName, aName, type, mode, value)\n * #elementDecl(name, model)\n * #externalEntityDecl(name, publicId, systemId)\n * #internalEntityDecl(name, value)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html\n * IGNORED method of org.xml.sax.EntityResolver2\n * #resolveEntity(String name,String publicId,String baseURI,String systemId)\n * #resolveEntity(publicId, systemId)\n * #getExternalSubset(name, baseURI)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html\n * IGNORED method of org.xml.sax.DTDHandler\n * #notationDecl(name, publicId, systemId) {};\n * #unparsedEntityDecl(name, publicId, systemId, notationName) {};\n */\n'endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl'.replace(\n\t/\\w+/g,\n\tfunction (key) {\n\t\tDOMHandler.prototype[key] = function () {\n\t\t\treturn null;\n\t\t};\n\t}\n);\n\n/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */\nfunction appendElement(handler, node) {\n\tif (!handler.currentElement) {\n\t\thandler.doc.appendChild(node);\n\t} else {\n\t\thandler.currentElement.appendChild(node);\n\t}\n}\n\n/**\n * A method that prevents any further parsing when an `error`\n * with level `error` is reported during parsing.\n *\n * @see {@link DOMParserOptions.onError}\n * @see {@link onWarningStopParsing}\n */\nfunction onErrorStopParsing(level) {\n\tif (level === 'error') throw 'onErrorStopParsing';\n}\n\n/**\n * A method that prevents any further parsing when any `error` is reported during parsing.\n *\n * @see {@link DOMParserOptions.onError}\n * @see {@link onErrorStopParsing}\n */\nfunction onWarningStopParsing() {\n\tthrow 'onWarningStopParsing';\n}\n\nexports.__DOMHandler = DOMHandler;\nexports.DOMParser = DOMParser;\nexports.normalizeLineEndings = normalizeLineEndings;\nexports.onErrorStopParsing = onErrorStopParsing;\nexports.onWarningStopParsing = onWarningStopParsing;\n","'use strict';\n\nvar conventions = require('./conventions');\nvar find = conventions.find;\nvar hasDefaultHTMLNamespace = conventions.hasDefaultHTMLNamespace;\nvar hasOwn = conventions.hasOwn;\nvar isHTMLMimeType = conventions.isHTMLMimeType;\nvar isHTMLRawTextElement = conventions.isHTMLRawTextElement;\nvar isHTMLVoidElement = conventions.isHTMLVoidElement;\nvar MIME_TYPE = conventions.MIME_TYPE;\nvar NAMESPACE = conventions.NAMESPACE;\n\n/**\n * Private DOM Constructor symbol\n *\n * Internal symbol used for construction of all classes whose constructors should be private.\n * Currently used for checks in `Node`, `Document`, `Element`, `Attr`, `CharacterData`, `Text`, `Comment`,\n * `CDATASection`, `DocumentType`, `Notation`, `Entity`, `EntityReference`, `DocumentFragment`, `ProcessingInstruction`\n * so the constructor can't be used from outside the module.\n */\nvar PDC = Symbol();\n\nvar errors = require('./errors');\nvar DOMException = errors.DOMException;\nvar DOMExceptionName = errors.DOMExceptionName;\n\nvar g = require('./grammar');\n\n/**\n * Checks if the given symbol equals the Private DOM Constructor symbol (PDC)\n * and throws an Illegal constructor exception when the symbols don't match.\n * This ensures that the constructor remains private and can't be used outside this module.\n */\nfunction checkSymbol(symbol) {\n\tif (symbol !== PDC) {\n\t\tthrow new TypeError('Illegal constructor');\n\t}\n}\n\n/**\n * A prerequisite for `[].filter`, to drop elements that are empty.\n *\n * @param {string} input\n * The string to be checked.\n * @returns {boolean}\n * Returns `true` if the input string is not empty, `false` otherwise.\n */\nfunction notEmptyString(input) {\n\treturn input !== '';\n}\n/**\n * Splits a string on ASCII whitespace characters (U+0009 TAB, U+000A LF, U+000C FF, U+000D CR,\n * U+0020 SPACE).\n * It follows the definition from the infra specification from WHATWG.\n *\n * @param {string} input\n * The string to be split.\n * @returns {string[]}\n * An array of the split strings. The array can be empty if the input string is empty or only\n * contains whitespace characters.\n * @see {@link https://infra.spec.whatwg.org/#split-on-ascii-whitespace}\n * @see {@link https://infra.spec.whatwg.org/#ascii-whitespace}\n */\nfunction splitOnASCIIWhitespace(input) {\n\t// U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE\n\treturn input ? input.split(/[\\t\\n\\f\\r ]+/).filter(notEmptyString) : [];\n}\n\n/**\n * Adds element as a key to current if it is not already present.\n *\n * @param {Record} current\n * The current record object to which the element will be added as a key.\n * The object's keys are string types and values are either boolean or undefined.\n * @param {string} element\n * The string to be added as a key to the current record.\n * @returns {Record}\n * The updated record object after the addition of the new element.\n */\nfunction orderedSetReducer(current, element) {\n\tif (!hasOwn(current, element)) {\n\t\tcurrent[element] = true;\n\t}\n\treturn current;\n}\n\n/**\n * Converts a string into an ordered set by splitting the input on ASCII whitespace and\n * ensuring uniqueness of elements.\n * This follows the definition of an ordered set from the infra specification by WHATWG.\n *\n * @param {string} input\n * The input string to be transformed into an ordered set.\n * @returns {string[]}\n * An array of unique strings obtained from the input, preserving the original order.\n * The array can be empty if the input string is empty or only contains whitespace characters.\n * @see {@link https://infra.spec.whatwg.org/#ordered-set}\n */\nfunction toOrderedSet(input) {\n\tif (!input) return [];\n\tvar list = splitOnASCIIWhitespace(input);\n\treturn Object.keys(list.reduce(orderedSetReducer, {}));\n}\n\n/**\n * Uses `list.indexOf` to implement a function that behaves like `Array.prototype.includes`.\n * This function is used in environments where `Array.prototype.includes` may not be available.\n *\n * @param {any[]} list\n * The array in which to search for the element.\n * @returns {function(any): boolean}\n * A function that accepts an element and returns a boolean indicating whether the element is\n * included in the provided list.\n */\nfunction arrayIncludes(list) {\n\treturn function (element) {\n\t\treturn list && list.indexOf(element) !== -1;\n\t};\n}\n\n/**\n * Validates a qualified name based on the criteria provided in the DOM specification by\n * WHATWG.\n *\n * @param {string} qualifiedName\n * The qualified name to be validated.\n * @throws {DOMException}\n * With code {@link DOMException.INVALID_CHARACTER_ERR} if the qualified name contains an\n * invalid character.\n * @see {@link https://dom.spec.whatwg.org/#validate}\n */\nfunction validateQualifiedName(qualifiedName) {\n\tif (!g.QName_exact.test(qualifiedName)) {\n\t\tthrow new DOMException(DOMException.INVALID_CHARACTER_ERR, 'invalid character in qualified name \"' + qualifiedName + '\"');\n\t}\n}\n\n/**\n * Validates a qualified name and the namespace associated with it,\n * based on the criteria provided in the DOM specification by WHATWG.\n *\n * @param {string | null} namespace\n * The namespace to be validated. It can be a string or null.\n * @param {string} qualifiedName\n * The qualified name to be validated.\n * @returns {[namespace: string | null, prefix: string | null, localName: string]}\n * Returns a tuple with the namespace,\n * prefix and local name of the qualified name.\n * @throws {DOMException}\n * Throws a DOMException if the qualified name or the namespace is not valid.\n * @see {@link https://dom.spec.whatwg.org/#validate-and-extract}\n */\nfunction validateAndExtract(namespace, qualifiedName) {\n\tvalidateQualifiedName(qualifiedName);\n\tnamespace = namespace || null;\n\t/**\n\t * @type {string | null}\n\t */\n\tvar prefix = null;\n\tvar localName = qualifiedName;\n\tif (qualifiedName.indexOf(':') >= 0) {\n\t\tvar splitResult = qualifiedName.split(':');\n\t\tprefix = splitResult[0];\n\t\tlocalName = splitResult[1];\n\t}\n\tif (prefix !== null && namespace === null) {\n\t\tthrow new DOMException(DOMException.NAMESPACE_ERR, 'prefix is non-null and namespace is null');\n\t}\n\tif (prefix === 'xml' && namespace !== conventions.NAMESPACE.XML) {\n\t\tthrow new DOMException(DOMException.NAMESPACE_ERR, 'prefix is \"xml\" and namespace is not the XML namespace');\n\t}\n\tif ((prefix === 'xmlns' || qualifiedName === 'xmlns') && namespace !== conventions.NAMESPACE.XMLNS) {\n\t\tthrow new DOMException(\n\t\t\tDOMException.NAMESPACE_ERR,\n\t\t\t'either qualifiedName or prefix is \"xmlns\" and namespace is not the XMLNS namespace'\n\t\t);\n\t}\n\tif (namespace === conventions.NAMESPACE.XMLNS && prefix !== 'xmlns' && qualifiedName !== 'xmlns') {\n\t\tthrow new DOMException(\n\t\t\tDOMException.NAMESPACE_ERR,\n\t\t\t'namespace is the XMLNS namespace and neither qualifiedName nor prefix is \"xmlns\"'\n\t\t);\n\t}\n\treturn [namespace, prefix, localName];\n}\n\n/**\n * Copies properties from one object to another.\n * It only copies the object's own (not inherited) properties.\n *\n * @param {Object} src\n * The source object from which properties are copied.\n * @param {Object} dest\n * The destination object to which properties are copied.\n */\nfunction copy(src, dest) {\n\tfor (var p in src) {\n\t\tif (hasOwn(src, p)) {\n\t\t\tdest[p] = src[p];\n\t\t}\n\t}\n}\n\n/**\n * Extends a class with the properties and methods of a super class.\n * It uses a form of prototypal inheritance, and establishes the `constructor` property\n * correctly(?).\n *\n * It is not clear to the current maintainers if this implementation is making sense,\n * since it creates an intermediate prototype function,\n * which all properties of `Super` are copied onto using `_copy`.\n *\n * @param {Object} Class\n * The class that is to be extended.\n * @param {Object} Super\n * The super class from which properties and methods are inherited.\n * @private\n */\nfunction _extends(Class, Super) {\n\tvar pt = Class.prototype;\n\tif (!(pt instanceof Super)) {\n\t\tfunction t() {}\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt, t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif (pt.constructor != Class) {\n\t\tif (typeof Class != 'function') {\n\t\t\tconsole.error('unknown Class:' + Class);\n\t\t}\n\t\tpt.constructor = Class;\n\t}\n}\n\nvar NodeType = {};\nvar ELEMENT_NODE = (NodeType.ELEMENT_NODE = 1);\nvar ATTRIBUTE_NODE = (NodeType.ATTRIBUTE_NODE = 2);\nvar TEXT_NODE = (NodeType.TEXT_NODE = 3);\nvar CDATA_SECTION_NODE = (NodeType.CDATA_SECTION_NODE = 4);\nvar ENTITY_REFERENCE_NODE = (NodeType.ENTITY_REFERENCE_NODE = 5);\nvar ENTITY_NODE = (NodeType.ENTITY_NODE = 6);\nvar PROCESSING_INSTRUCTION_NODE = (NodeType.PROCESSING_INSTRUCTION_NODE = 7);\nvar COMMENT_NODE = (NodeType.COMMENT_NODE = 8);\nvar DOCUMENT_NODE = (NodeType.DOCUMENT_NODE = 9);\nvar DOCUMENT_TYPE_NODE = (NodeType.DOCUMENT_TYPE_NODE = 10);\nvar DOCUMENT_FRAGMENT_NODE = (NodeType.DOCUMENT_FRAGMENT_NODE = 11);\nvar NOTATION_NODE = (NodeType.NOTATION_NODE = 12);\n\nvar DocumentPosition = conventions.freeze({\n\tDOCUMENT_POSITION_DISCONNECTED: 1,\n\tDOCUMENT_POSITION_PRECEDING: 2,\n\tDOCUMENT_POSITION_FOLLOWING: 4,\n\tDOCUMENT_POSITION_CONTAINS: 8,\n\tDOCUMENT_POSITION_CONTAINED_BY: 16,\n\tDOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 32,\n});\n\n//helper functions for compareDocumentPosition\n/**\n * Constructs a parent chain for a node.\n *\n * @param {Node} node\n * The start node from which the parent chain will be constructed.\n * @returns {Node[]}\n * The array of nodes representing the parent chain from the root to the specified node.\n */\nfunction parentChain(node) {\n\tvar chain = [];\n\twhile (node.parentNode || node.ownerElement) {\n\t\tnode = node.parentNode || node.ownerElement;\n\t\tchain.unshift(node);\n\t}\n\treturn chain;\n}\n\n/**\n * Finds the common ancestor in two parent chains.\n *\n * @param {Node[]} a\n * The first parent chain.\n * @param {Node[]} b\n * The second parent chain.\n * @returns {Node}\n * The common ancestor node if it exists. If there is no common ancestor, the function will\n * return `null`.\n */\nfunction commonAncestor(a, b) {\n\tif (b.length < a.length) return commonAncestor(b, a);\n\tvar c = null;\n\tfor (var n in a) {\n\t\tif (a[n] !== b[n]) return c;\n\t\tc = a[n];\n\t}\n\treturn c;\n}\n\n/**\n * Assigns a unique identifier to a document to ensure consistency while comparing unrelated\n * nodes.\n *\n * @param {Document} doc\n * The document to which a unique identifier is to be assigned.\n * @returns {string}\n * The unique identifier of the document. If the document already had a unique identifier, the\n * function will return the existing one.\n */\nfunction docGUID(doc) {\n\tif (!doc.guid) doc.guid = Math.random();\n\treturn doc.guid;\n}\n//-- end of helper functions\n\n/**\n * The NodeList interface provides the abstraction of an ordered collection of nodes,\n * without defining or constraining how this collection is implemented.\n * NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n * You can also access the items of the NodeList with a `for...of` loop.\n *\n * @class NodeList\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * @constructs NodeList\n */\nfunction NodeList() {}\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1\n\t * inclusive.\n\t *\n\t * @type {number}\n\t */\n\tlength: 0,\n\t/**\n\t * Returns the item at `index`. If index is greater than or equal to the number of nodes in\n\t * the list, this returns null.\n\t *\n\t * @param index\n\t * Unsigned long Index into the collection.\n\t * @returns {Node | null}\n\t * The node at position `index` in the NodeList,\n\t * or null if that is not a valid index.\n\t */\n\titem: function (index) {\n\t\treturn index >= 0 && index < this.length ? this[index] : null;\n\t},\n\t/**\n\t * Returns a string representation of the NodeList.\n\t *\n\t * @param {unknown} nodeFilter\n\t * __A filter function? Not implemented according to the spec?__.\n\t * @returns {string}\n\t * A string representation of the NodeList.\n\t */\n\ttoString: function (nodeFilter) {\n\t\tfor (var buf = [], i = 0; i < this.length; i++) {\n\t\t\tserializeToString(this[i], buf, nodeFilter);\n\t\t}\n\t\treturn buf.join('');\n\t},\n\t/**\n\t * Filters the NodeList based on a predicate.\n\t *\n\t * @param {function(Node): boolean} predicate\n\t * - A predicate function to filter the NodeList.\n\t * @returns {Node[]}\n\t * An array of nodes that satisfy the predicate.\n\t * @private\n\t */\n\tfilter: function (predicate) {\n\t\treturn Array.prototype.filter.call(this, predicate);\n\t},\n\t/**\n\t * Returns the first index at which a given node can be found in the NodeList, or -1 if it is\n\t * not present.\n\t *\n\t * @param {Node} item\n\t * - The Node item to locate in the NodeList.\n\t * @returns {number}\n\t * The first index of the node in the NodeList; -1 if not found.\n\t * @private\n\t */\n\tindexOf: function (item) {\n\t\treturn Array.prototype.indexOf.call(this, item);\n\t},\n};\nNodeList.prototype[Symbol.iterator] = function () {\n\tvar me = this;\n\tvar index = 0;\n\n\treturn {\n\t\tnext: function () {\n\t\t\tif (index < me.length) {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: me[index++],\n\t\t\t\t\tdone: false,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tdone: true,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\treturn: function () {\n\t\t\treturn {\n\t\t\t\tdone: true,\n\t\t\t};\n\t\t},\n\t};\n};\n\n/**\n * Represents a live collection of nodes that is automatically updated when its associated\n * document changes.\n *\n * @class LiveNodeList\n * @param {Node} node\n * The associated node.\n * @param {function} refresh\n * The function to refresh the live node list.\n * @augments NodeList\n * @constructs LiveNodeList\n */\nfunction LiveNodeList(node, refresh) {\n\tthis._node = node;\n\tthis._refresh = refresh;\n\t_updateLiveList(this);\n}\n/**\n * Updates the live node list.\n *\n * @param {LiveNodeList} list\n * The live node list to update.\n * @private\n */\nfunction _updateLiveList(list) {\n\tvar inc = list._node._inc || list._node.ownerDocument._inc;\n\tif (list._inc !== inc) {\n\t\tvar ls = list._refresh(list._node);\n\t\t__set__(list, 'length', ls.length);\n\t\tif (!list.$$length || ls.length < list.$$length) {\n\t\t\tfor (var i = ls.length; i in list; i++) {\n\t\t\t\tif (hasOwn(list, i)) {\n\t\t\t\t\tdelete list[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcopy(ls, list);\n\t\tlist._inc = inc;\n\t}\n}\n/**\n * Returns the node at position `index` in the LiveNodeList, or null if that is not a valid\n * index.\n *\n * @param {number} i\n * Index into the collection.\n * @returns {Node | null}\n * The node at position `index` in the LiveNodeList, or null if that is not a valid index.\n */\nLiveNodeList.prototype.item = function (i) {\n\t_updateLiveList(this);\n\treturn this[i] || null;\n};\n\n_extends(LiveNodeList, NodeList);\n\n/**\n * Objects implementing the NamedNodeMap interface are used to represent collections of nodes\n * that can be accessed by name.\n * Note that NamedNodeMap does not inherit from NodeList;\n * NamedNodeMaps are not maintained in any particular order.\n * Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal\n * index,\n * but this is simply to allow convenient enumeration of the contents of a NamedNodeMap,\n * and does not imply that the DOM specifies an order to these Nodes.\n * NamedNodeMap objects in the DOM are live.\n * used for attributes or DocumentType entities\n *\n * This implementation only supports property indices, but does not support named properties,\n * as specified in the living standard.\n *\n * @class NamedNodeMap\n * @see https://dom.spec.whatwg.org/#interface-namednodemap\n * @see https://webidl.spec.whatwg.org/#dfn-supported-property-names\n * @constructs NamedNodeMap\n */\nfunction NamedNodeMap() {}\n/**\n * Returns the index of a node within the list.\n *\n * @param {Array} list\n * The list of nodes.\n * @param {Node} node\n * The node to find.\n * @returns {number}\n * The index of the node within the list, or -1 if not found.\n * @private\n */\nfunction _findNodeIndex(list, node) {\n\tvar i = 0;\n\twhile (i < list.length) {\n\t\tif (list[i] === node) {\n\t\t\treturn i;\n\t\t}\n\t\ti++;\n\t}\n}\n/**\n * Adds a new attribute to the list and updates the owner element of the attribute.\n *\n * @param {Element} el\n * The element which will become the owner of the new attribute.\n * @param {NamedNodeMap} list\n * The list to which the new attribute will be added.\n * @param {Attr} newAttr\n * The new attribute to be added.\n * @param {Attr} oldAttr\n * The old attribute to be replaced, or null if no attribute is to be replaced.\n * @returns {void}\n * @private\n */\nfunction _addNamedNode(el, list, newAttr, oldAttr) {\n\tif (oldAttr) {\n\t\tlist[_findNodeIndex(list, oldAttr)] = newAttr;\n\t} else {\n\t\tlist[list.length] = newAttr;\n\t\tlist.length++;\n\t}\n\tif (el) {\n\t\tnewAttr.ownerElement = el;\n\t\tvar doc = el.ownerDocument;\n\t\tif (doc) {\n\t\t\toldAttr && _onRemoveAttribute(doc, el, oldAttr);\n\t\t\t_onAddAttribute(doc, el, newAttr);\n\t\t}\n\t}\n}\n/**\n * Removes an attribute from the list and updates the owner element of the attribute.\n *\n * @param {Element} el\n * The element which is the current owner of the attribute.\n * @param {NamedNodeMap} list\n * The list from which the attribute will be removed.\n * @param {Attr} attr\n * The attribute to be removed.\n * @returns {void}\n * @private\n */\nfunction _removeNamedNode(el, list, attr) {\n\t//console.log('remove attr:'+attr)\n\tvar i = _findNodeIndex(list, attr);\n\tif (i >= 0) {\n\t\tvar lastIndex = list.length - 1;\n\t\twhile (i <= lastIndex) {\n\t\t\tlist[i] = list[++i];\n\t\t}\n\t\tlist.length = lastIndex;\n\t\tif (el) {\n\t\t\tvar doc = el.ownerDocument;\n\t\t\tif (doc) {\n\t\t\t\t_onRemoveAttribute(doc, el, attr);\n\t\t\t}\n\t\t\tattr.ownerElement = null;\n\t\t}\n\t}\n}\nNamedNodeMap.prototype = {\n\tlength: 0,\n\titem: NodeList.prototype.item,\n\n\t/**\n\t * Get an attribute by name. Note: Name is in lower case in case of HTML namespace and\n\t * document.\n\t *\n\t * @param {string} localName\n\t * The local name of the attribute.\n\t * @returns {Attr | null}\n\t * The attribute with the given local name, or null if no such attribute exists.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-get-by-name\n\t */\n\tgetNamedItem: function (localName) {\n\t\tif (this._ownerElement && this._ownerElement._isInHTMLDocumentAndNamespace()) {\n\t\t\tlocalName = localName.toLowerCase();\n\t\t}\n\t\tvar i = 0;\n\t\twhile (i < this.length) {\n\t\t\tvar attr = this[i];\n\t\t\tif (attr.nodeName === localName) {\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\treturn null;\n\t},\n\n\t/**\n\t * Set an attribute.\n\t *\n\t * @param {Attr} attr\n\t * The attribute to set.\n\t * @returns {Attr | null}\n\t * The old attribute with the same local name and namespace URI as the new one, or null if no\n\t * such attribute exists.\n\t * @throws {DOMException}\n\t * With code:\n\t * - {@link INUSE_ATTRIBUTE_ERR} - If the attribute is already an attribute of another\n\t * element.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-set\n\t */\n\tsetNamedItem: function (attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif (el && el !== this._ownerElement) {\n\t\t\tthrow new DOMException(DOMException.INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItemNS(attr.namespaceURI, attr.localName);\n\t\tif (oldAttr === attr) {\n\t\t\treturn attr;\n\t\t}\n\t\t_addNamedNode(this._ownerElement, this, attr, oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/**\n\t * Set an attribute, replacing an existing attribute with the same local name and namespace\n\t * URI if one exists.\n\t *\n\t * @param {Attr} attr\n\t * The attribute to set.\n\t * @returns {Attr | null}\n\t * The old attribute with the same local name and namespace URI as the new one, or null if no\n\t * such attribute exists.\n\t * @throws {DOMException}\n\t * Throws a DOMException with the name \"InUseAttributeError\" if the attribute is already an\n\t * attribute of another element.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-set\n\t */\n\tsetNamedItemNS: function (attr) {\n\t\treturn this.setNamedItem(attr);\n\t},\n\n\t/**\n\t * Removes an attribute specified by the local name.\n\t *\n\t * @param {string} localName\n\t * The local name of the attribute to be removed.\n\t * @returns {Attr}\n\t * The attribute node that was removed.\n\t * @throws {DOMException}\n\t * With code:\n\t * - {@link DOMException.NOT_FOUND_ERR} if no attribute with the given name is found.\n\t * @see https://dom.spec.whatwg.org/#dom-namednodemap-removenameditem\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-remove-by-name\n\t */\n\tremoveNamedItem: function (localName) {\n\t\tvar attr = this.getNamedItem(localName);\n\t\tif (!attr) {\n\t\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, localName);\n\t\t}\n\t\t_removeNamedNode(this._ownerElement, this, attr);\n\t\treturn attr;\n\t},\n\n\t/**\n\t * Removes an attribute specified by the namespace and local name.\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI of the attribute to be removed.\n\t * @param {string} localName\n\t * The local name of the attribute to be removed.\n\t * @returns {Attr}\n\t * The attribute node that was removed.\n\t * @throws {DOMException}\n\t * With code:\n\t * - {@link DOMException.NOT_FOUND_ERR} if no attribute with the given namespace URI and local\n\t * name is found.\n\t * @see https://dom.spec.whatwg.org/#dom-namednodemap-removenameditemns\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-remove-by-namespace\n\t */\n\tremoveNamedItemNS: function (namespaceURI, localName) {\n\t\tvar attr = this.getNamedItemNS(namespaceURI, localName);\n\t\tif (!attr) {\n\t\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, namespaceURI ? namespaceURI + ' : ' + localName : localName);\n\t\t}\n\t\t_removeNamedNode(this._ownerElement, this, attr);\n\t\treturn attr;\n\t},\n\n\t/**\n\t * Get an attribute by namespace and local name.\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI of the attribute.\n\t * @param {string} localName\n\t * The local name of the attribute.\n\t * @returns {Attr | null}\n\t * The attribute with the given namespace URI and local name, or null if no such attribute\n\t * exists.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-get-by-namespace\n\t */\n\tgetNamedItemNS: function (namespaceURI, localName) {\n\t\tif (!namespaceURI) {\n\t\t\tnamespaceURI = null;\n\t\t}\n\t\tvar i = 0;\n\t\twhile (i < this.length) {\n\t\t\tvar node = this[i];\n\t\t\tif (node.localName === localName && node.namespaceURI === namespaceURI) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\treturn null;\n\t},\n};\nNamedNodeMap.prototype[Symbol.iterator] = function () {\n\tvar me = this;\n\tvar index = 0;\n\n\treturn {\n\t\tnext: function () {\n\t\t\tif (index < me.length) {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: me[index++],\n\t\t\t\t\tdone: false,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tdone: true,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\treturn: function () {\n\t\t\treturn {\n\t\t\t\tdone: true,\n\t\t\t};\n\t\t},\n\t};\n};\n\n/**\n * The DOMImplementation interface provides a number of methods for performing operations that\n * are independent of any particular instance of the document object model.\n *\n * The DOMImplementation interface represents an object providing methods which are not\n * dependent on any particular document.\n * Such an object is returned by the `Document.implementation` property.\n *\n * **The individual methods describe the differences compared to the specs**.\n *\n * @class DOMImplementation\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN\n * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core\n * (Initial)\n * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core\n * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard\n * @constructs DOMImplementation\n */\nfunction DOMImplementation() {}\n\nDOMImplementation.prototype = {\n\t/**\n\t * Test if the DOM implementation implements a specific feature and version, as specified in\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMFeatures DOM Features}.\n\t *\n\t * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given\n\t * feature is supported. The different implementations fairly diverged in what kind of\n\t * features were reported. The latest version of the spec settled to force this method to\n\t * always return true, where the functionality was accurate and in use.\n\t *\n\t * @deprecated\n\t * It is deprecated and modern browsers return true in all cases.\n\t * @function DOMImplementation#hasFeature\n\t * @param {string} feature\n\t * The name of the feature to test.\n\t * @param {string} [version]\n\t * This is the version number of the feature to test.\n\t * @returns {boolean}\n\t * Always returns true.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN\n\t * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-5CED94D7 DOM Level 3 Core\n\t */\n\thasFeature: function (feature, version) {\n\t\treturn true;\n\t},\n\t/**\n\t * Creates a DOM Document object of the specified type with its document element. Note that\n\t * based on the {@link DocumentType}\n\t * given to create the document, the implementation may instantiate specialized\n\t * {@link Document} objects that support additional features than the \"Core\", such as \"HTML\"\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#DOM2HTML DOM Level 2 HTML}.\n\t * On the other hand, setting the {@link DocumentType} after the document was created makes\n\t * this very unlikely to happen. Alternatively, specialized {@link Document} creation methods,\n\t * such as createHTMLDocument\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#DOM2HTML DOM Level 2 HTML},\n\t * can be used to obtain specific types of {@link Document} objects.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - There is no interface/class `XMLDocument`, it returns a `Document`\n\t * instance (with it's `type` set to `'xml'`).\n\t * - `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t *\n\t * @function DOMImplementation.createDocument\n\t * @param {string | null} namespaceURI\n\t * The\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-namespaceURI namespace URI}\n\t * of the document element to create or null.\n\t * @param {string | null} qualifiedName\n\t * The\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-qualifiedname qualified name}\n\t * of the document element to be created or null.\n\t * @param {DocumentType | null} [doctype=null]\n\t * The type of document to be created or null. When doctype is not null, its\n\t * {@link Node#ownerDocument} attribute is set to the document being created. Default is\n\t * `null`\n\t * @returns {Document}\n\t * A new {@link Document} object with its document element. If the NamespaceURI,\n\t * qualifiedName, and doctype are null, the returned {@link Document} is empty with no\n\t * document element.\n\t * @throws {DOMException}\n\t * With code:\n\t *\n\t * - `INVALID_CHARACTER_ERR`: Raised if the specified qualified name is not an XML name\n\t * according to {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#XML XML 1.0}.\n\t * - `NAMESPACE_ERR`: Raised if the qualifiedName is malformed, if the qualifiedName has a\n\t * prefix and the namespaceURI is null, or if the qualifiedName is null and the namespaceURI\n\t * is different from null, or if the qualifiedName has a prefix that is \"xml\" and the\n\t * namespaceURI is different from \"{@link http://www.w3.org/XML/1998/namespace}\"\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#Namespaces XML Namespaces},\n\t * or if the DOM implementation does not support the \"XML\" feature but a non-null namespace\n\t * URI was provided, since namespaces were defined by XML.\n\t * - `WRONG_DOCUMENT_ERR`: Raised if doctype has already been used with a different document\n\t * or was created from a different implementation.\n\t * - `NOT_SUPPORTED_ERR`: May be raised if the implementation does not support the feature\n\t * \"XML\" and the language exposed through the Document does not support XML Namespaces (such\n\t * as {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#HTML40 HTML 4.01}).\n\t * @since DOM Level 2.\n\t * @see {@link #createHTMLDocument}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument DOM Living Standard\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocument DOM\n\t * Level 3 Core\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM\n\t * Level 2 Core (initial)\n\t */\n\tcreateDocument: function (namespaceURI, qualifiedName, doctype) {\n\t\tvar contentType = MIME_TYPE.XML_APPLICATION;\n\t\tif (namespaceURI === NAMESPACE.HTML) {\n\t\t\tcontentType = MIME_TYPE.XML_XHTML_APPLICATION;\n\t\t} else if (namespaceURI === NAMESPACE.SVG) {\n\t\t\tcontentType = MIME_TYPE.XML_SVG_IMAGE;\n\t\t}\n\t\tvar doc = new Document(PDC, { contentType: contentType });\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype || null;\n\t\tif (doctype) {\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif (qualifiedName) {\n\t\t\tvar root = doc.createElementNS(namespaceURI, qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t/**\n\t * Creates an empty DocumentType node. Entity declarations and notations are not made\n\t * available. Entity reference expansions and default attribute additions do not occur.\n\t *\n\t * **This behavior is slightly different from the one in the specs**:\n\t * - `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t * - `publicId` and `systemId` contain the raw data including any possible quotes,\n\t * so they can always be serialized back to the original value\n\t * - `internalSubset` contains the raw string between `[` and `]` if present,\n\t * but is not parsed or validated in any form.\n\t *\n\t * @function DOMImplementation#createDocumentType\n\t * @param {string} qualifiedName\n\t * The {@link https://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-qualifiedname qualified\n\t * name} of the document type to be created.\n\t * @param {string} [publicId]\n\t * The external subset public identifier.\n\t * @param {string} [systemId]\n\t * The external subset system identifier.\n\t * @param {string} [internalSubset]\n\t * the internal subset or an empty string if it is not present\n\t * @returns {DocumentType}\n\t * A new {@link DocumentType} node with {@link Node#ownerDocument} set to null.\n\t * @throws {DOMException}\n\t * With code:\n\t *\n\t * - `INVALID_CHARACTER_ERR`: Raised if the specified qualified name is not an XML name\n\t * according to {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#XML XML 1.0}.\n\t * - `NAMESPACE_ERR`: Raised if the qualifiedName is malformed.\n\t * - `NOT_SUPPORTED_ERR`: May be raised if the implementation does not support the feature\n\t * \"XML\" and the language exposed through the Document does not support XML Namespaces (such\n\t * as {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#HTML40 HTML 4.01}).\n\t * @since DOM Level 2.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType\n\t * MDN\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living\n\t * Standard\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-3-Core-DOM-createDocType DOM\n\t * Level 3 Core\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM\n\t * Level 2 Core\n\t * @see https://github.com/xmldom/xmldom/blob/master/CHANGELOG.md#050\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/#core-ID-Core-DocType-internalSubset\n\t * @prettierignore\n\t */\n\tcreateDocumentType: function (qualifiedName, publicId, systemId, internalSubset) {\n\t\tvalidateQualifiedName(qualifiedName);\n\t\tvar node = new DocumentType(PDC);\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId || '';\n\t\tnode.systemId = systemId || '';\n\t\tnode.internalSubset = internalSubset || '';\n\t\tnode.childNodes = new NodeList();\n\n\t\treturn node;\n\t},\n\t/**\n\t * Returns an HTML document, that might already have a basic DOM structure.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - If the first argument is `false` no initial nodes are added (steps 3-7 in the specs are\n\t * omitted)\n\t * - `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t *\n\t * @param {string | false} [title]\n\t * A string containing the title to give the new HTML document.\n\t * @returns {Document}\n\t * The HTML document.\n\t * @since WHATWG Living Standard.\n\t * @see {@link #createDocument}\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument\n\t * @see https://dom.spec.whatwg.org/#html-document\n\t */\n\tcreateHTMLDocument: function (title) {\n\t\tvar doc = new Document(PDC, { contentType: MIME_TYPE.HTML });\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tif (title !== false) {\n\t\t\tdoc.doctype = this.createDocumentType('html');\n\t\t\tdoc.doctype.ownerDocument = doc;\n\t\t\tdoc.appendChild(doc.doctype);\n\t\t\tvar htmlNode = doc.createElement('html');\n\t\t\tdoc.appendChild(htmlNode);\n\t\t\tvar headNode = doc.createElement('head');\n\t\t\thtmlNode.appendChild(headNode);\n\t\t\tif (typeof title === 'string') {\n\t\t\t\tvar titleNode = doc.createElement('title');\n\t\t\t\ttitleNode.appendChild(doc.createTextNode(title));\n\t\t\t\theadNode.appendChild(titleNode);\n\t\t\t}\n\t\t\thtmlNode.appendChild(doc.createElement('body'));\n\t\t}\n\t\treturn doc;\n\t},\n};\n\n/**\n * The DOM Node interface is an abstract base class upon which many other DOM API objects are\n * based, thus letting those object types to be used similarly and often interchangeably. As an\n * abstract class, there is no such thing as a plain Node object. All objects that implement\n * Node functionality are based on one of its subclasses. Most notable are Document, Element,\n * and DocumentFragment.\n *\n * In addition, every kind of DOM node is represented by an interface based on Node. These\n * include Attr, CharacterData (which Text, Comment, CDATASection and ProcessingInstruction are\n * all based on), and DocumentType.\n *\n * In some cases, a particular feature of the base Node interface may not apply to one of its\n * child interfaces; in that case, the inheriting node may return null or throw an exception,\n * depending on circumstances. For example, attempting to add children to a node type that\n * cannot have children will throw an exception.\n *\n * **This behavior is slightly different from the in the specs**:\n * - unimplemented interfaces: `EventTarget`\n *\n * @class\n * @abstract\n * @param {Symbol} symbol\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n * @see https://dom.spec.whatwg.org/#node\n * @prettierignore\n */\nfunction Node(symbol) {\n\tcheckSymbol(symbol);\n}\n\nNode.prototype = {\n\t/**\n\t * The first child of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tfirstChild: null,\n\t/**\n\t * The last child of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tlastChild: null,\n\t/**\n\t * The previous sibling of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tpreviousSibling: null,\n\t/**\n\t * The next sibling of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tnextSibling: null,\n\t/**\n\t * The parent node of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tparentNode: null,\n\t/**\n\t * The parent element of this node.\n\t *\n\t * @type {Element | null}\n\t */\n\tget parentElement() {\n\t\treturn this.parentNode && this.parentNode.nodeType === this.ELEMENT_NODE ? this.parentNode : null;\n\t},\n\t/**\n\t * The child nodes of this node.\n\t *\n\t * @type {NodeList}\n\t */\n\tchildNodes: null,\n\t/**\n\t * The document object associated with this node.\n\t *\n\t * @type {Document | null}\n\t */\n\townerDocument: null,\n\t/**\n\t * The value of this node.\n\t *\n\t * @type {string | null}\n\t */\n\tnodeValue: null,\n\t/**\n\t * The namespace URI of this node.\n\t *\n\t * @type {string | null}\n\t */\n\tnamespaceURI: null,\n\t/**\n\t * The prefix of the namespace for this node.\n\t *\n\t * @type {string | null}\n\t */\n\tprefix: null,\n\t/**\n\t * The local part of the qualified name of this node.\n\t *\n\t * @type {string | null}\n\t */\n\tlocalName: null,\n\t/**\n\t * The baseURI is currently always `about:blank`,\n\t * since that's what happens when you create a document from scratch.\n\t *\n\t * @type {'about:blank'}\n\t */\n\tbaseURI: 'about:blank',\n\t/**\n\t * Is true if this node is part of a document.\n\t *\n\t * @type {boolean}\n\t */\n\tget isConnected() {\n\t\tvar rootNode = this.getRootNode();\n\t\treturn rootNode && rootNode.nodeType === rootNode.DOCUMENT_NODE;\n\t},\n\t/**\n\t * Checks whether `other` is an inclusive descendant of this node.\n\t *\n\t * @param {Node | null | undefined} other\n\t * The node to check.\n\t * @returns {boolean}\n\t * True if `other` is an inclusive descendant of this node; false otherwise.\n\t * @see https://dom.spec.whatwg.org/#dom-node-contains\n\t */\n\tcontains: function (other) {\n\t\tif (!other) return false;\n\t\tvar parent = other;\n\t\tdo {\n\t\t\tif (this === parent) return true;\n\t\t\tparent = other.parentNode;\n\t\t} while (parent);\n\t\treturn false;\n\t},\n\t/**\n\t * @typedef GetRootNodeOptions\n\t * @property {boolean} [composed=false]\n\t */\n\t/**\n\t * Searches for the root node of this node.\n\t *\n\t * **This behavior is slightly different from the in the specs**:\n\t * - ignores `options.composed`, since `ShadowRoot`s are unsupported, always returns root.\n\t *\n\t * @param {GetRootNodeOptions} [options]\n\t * @returns {Node}\n\t * Root node.\n\t * @see https://dom.spec.whatwg.org/#dom-node-getrootnode\n\t * @see https://dom.spec.whatwg.org/#concept-shadow-including-root\n\t */\n\tgetRootNode: function (options) {\n\t\tvar parent = this;\n\t\tdo {\n\t\t\tif (!parent.parentNode) {\n\t\t\t\treturn parent;\n\t\t\t}\n\t\t\tparent = parent.parentNode;\n\t\t} while (parent);\n\t},\n\t/**\n\t * Checks whether the given node is equal to this node.\n\t *\n\t * @param {Node} [otherNode]\n\t * @see https://dom.spec.whatwg.org/#concept-node-equals\n\t */\n\tisEqualNode: function (otherNode) {\n\t\tif (!otherNode) return false;\n\n\t\tif (this.nodeType !== otherNode.nodeType) return false;\n\n\t\tswitch (this.nodeType) {\n\t\t\tcase this.DOCUMENT_TYPE_NODE:\n\t\t\t\tif (this.name !== otherNode.name) return false;\n\t\t\t\tif (this.publicId !== otherNode.publicId) return false;\n\t\t\t\tif (this.systemId !== otherNode.systemId) return false;\n\t\t\t\tbreak;\n\t\t\tcase this.ELEMENT_NODE:\n\t\t\t\tif (this.namespaceURI !== otherNode.namespaceURI) return false;\n\t\t\t\tif (this.prefix !== otherNode.prefix) return false;\n\t\t\t\tif (this.localName !== otherNode.localName) return false;\n\t\t\t\tif (this.attributes.length !== otherNode.attributes.length) return false;\n\t\t\t\tfor (var i = 0; i < this.attributes.length; i++) {\n\t\t\t\t\tvar attr = this.attributes.item(i);\n\t\t\t\t\tif (!attr.isEqualNode(otherNode.getAttributeNodeNS(attr.namespaceURI, attr.localName))) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase this.ATTRIBUTE_NODE:\n\t\t\t\tif (this.namespaceURI !== otherNode.namespaceURI) return false;\n\t\t\t\tif (this.localName !== otherNode.localName) return false;\n\t\t\t\tif (this.value !== otherNode.value) return false;\n\n\t\t\t\tbreak;\n\t\t\tcase this.PROCESSING_INSTRUCTION_NODE:\n\t\t\t\tif (this.target !== otherNode.target || this.data !== otherNode.data) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase this.TEXT_NODE:\n\t\t\tcase this.COMMENT_NODE:\n\t\t\t\tif (this.data !== otherNode.data) return false;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (this.childNodes.length !== otherNode.childNodes.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (var i = 0; i < this.childNodes.length; i++) {\n\t\t\tif (!this.childNodes[i].isEqualNode(otherNode.childNodes[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t},\n\t/**\n\t * Checks whether or not the given node is this node.\n\t *\n\t * @param {Node} [otherNode]\n\t */\n\tisSameNode: function (otherNode) {\n\t\treturn this === otherNode;\n\t},\n\t/**\n\t * Inserts a node before a reference node as a child of this node.\n\t *\n\t * @param {Node} newChild\n\t * The new child node to be inserted.\n\t * @param {Node | null} refChild\n\t * The reference node before which newChild will be inserted.\n\t * @returns {Node}\n\t * The new child node successfully inserted.\n\t * @throws {DOMException}\n\t * Throws a DOMException if inserting the node would result in a DOM tree that is not\n\t * well-formed, or if `child` is provided but is not a child of `parent`.\n\t * See {@link _insertBefore} for more details.\n\t * @since Modified in DOM L2\n\t */\n\tinsertBefore: function (newChild, refChild) {\n\t\treturn _insertBefore(this, newChild, refChild);\n\t},\n\t/**\n\t * Replaces an old child node with a new child node within this node.\n\t *\n\t * @param {Node} newChild\n\t * The new node that is to replace the old node.\n\t * If it already exists in the DOM, it is removed from its original position.\n\t * @param {Node} oldChild\n\t * The existing child node to be replaced.\n\t * @returns {Node}\n\t * Returns the replaced child node.\n\t * @throws {DOMException}\n\t * Throws a DOMException if replacing the node would result in a DOM tree that is not\n\t * well-formed, or if `oldChild` is not a child of `this`.\n\t * This can also occur if the pre-replacement validity assertion fails.\n\t * See {@link _insertBefore}, {@link Node.removeChild}, and\n\t * {@link assertPreReplacementValidityInDocument} for more details.\n\t * @see https://dom.spec.whatwg.org/#concept-node-replace\n\t */\n\treplaceChild: function (newChild, oldChild) {\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\t/**\n\t * Removes an existing child node from this node.\n\t *\n\t * @param {Node} oldChild\n\t * The child node to be removed.\n\t * @returns {Node}\n\t * Returns the removed child node.\n\t * @throws {DOMException}\n\t * Throws a DOMException if `oldChild` is not a child of `this`.\n\t * See {@link _removeChild} for more details.\n\t */\n\tremoveChild: function (oldChild) {\n\t\treturn _removeChild(this, oldChild);\n\t},\n\t/**\n\t * Appends a child node to this node.\n\t *\n\t * @param {Node} newChild\n\t * The child node to be appended to this node.\n\t * If it already exists in the DOM, it is removed from its original position.\n\t * @returns {Node}\n\t * Returns the appended child node.\n\t * @throws {DOMException}\n\t * Throws a DOMException if appending the node would result in a DOM tree that is not\n\t * well-formed, or if `newChild` is not a valid Node.\n\t * See {@link insertBefore} for more details.\n\t */\n\tappendChild: function (newChild) {\n\t\treturn this.insertBefore(newChild, null);\n\t},\n\t/**\n\t * Determines whether this node has any child nodes.\n\t *\n\t * @returns {boolean}\n\t * Returns true if this node has any child nodes, and false otherwise.\n\t */\n\thasChildNodes: function () {\n\t\treturn this.firstChild != null;\n\t},\n\t/**\n\t * Creates a copy of the calling node.\n\t *\n\t * @param {boolean} deep\n\t * If true, the contents of the node are recursively copied.\n\t * If false, only the node itself (and its attributes, if it is an element) are copied.\n\t * @returns {Node}\n\t * Returns the newly created copy of the node.\n\t * @throws {DOMException}\n\t * May throw a DOMException if operations within {@link Element#setAttributeNode} or\n\t * {@link Node#appendChild} (which are potentially invoked in this method) do not meet their\n\t * specific constraints.\n\t * @see {@link cloneNode}\n\t */\n\tcloneNode: function (deep) {\n\t\treturn cloneNode(this.ownerDocument || this, this, deep);\n\t},\n\t/**\n\t * Puts the specified node and all of its subtree into a \"normalized\" form. In a normalized\n\t * subtree, no text nodes in the subtree are empty and there are no adjacent text nodes.\n\t *\n\t * Specifically, this method merges any adjacent text nodes (i.e., nodes for which `nodeType`\n\t * is `TEXT_NODE`) into a single node with the combined data. It also removes any empty text\n\t * nodes.\n\t *\n\t * This method operates recursively, so it also normalizes any and all descendent nodes within\n\t * the subtree.\n\t *\n\t * @throws {DOMException}\n\t * May throw a DOMException if operations within removeChild or appendData (which are\n\t * potentially invoked in this method) do not meet their specific constraints.\n\t * @since Modified in DOM Level 2\n\t * @see {@link Node.removeChild}\n\t * @see {@link CharacterData.appendData}\n\t */\n\tnormalize: function () {\n\t\tvar child = this.firstChild;\n\t\twhile (child) {\n\t\t\tvar next = child.nextSibling;\n\t\t\tif (next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE) {\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t} else {\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Checks whether the DOM implementation implements a specific feature and its version.\n\t *\n\t * @deprecated\n\t * Since `DOMImplementation.hasFeature` is deprecated and always returns true.\n\t * @param {string} feature\n\t * The package name of the feature to test. This is the same name that can be passed to the\n\t * method `hasFeature` on `DOMImplementation`.\n\t * @param {string} version\n\t * This is the version number of the package name to test.\n\t * @returns {boolean}\n\t * Returns true in all cases in the current implementation.\n\t * @since Introduced in DOM Level 2\n\t * @see {@link DOMImplementation.hasFeature}\n\t */\n\tisSupported: function (feature, version) {\n\t\treturn this.ownerDocument.implementation.hasFeature(feature, version);\n\t},\n\t/**\n\t * Look up the prefix associated to the given namespace URI, starting from this node.\n\t * **The default namespace declarations are ignored by this method.**\n\t * See Namespace Prefix Lookup for details on the algorithm used by this method.\n\t *\n\t * **This behavior is different from the in the specs**:\n\t * - no node type specific handling\n\t * - uses the internal attribute _nsMap for resolving namespaces that is updated when changing attributes\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI for which to find the associated prefix.\n\t * @returns {string | null}\n\t * The associated prefix, if found; otherwise, null.\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix\n\t * @see https://github.com/xmldom/xmldom/issues/322\n\t * @prettierignore\n\t */\n\tlookupPrefix: function (namespaceURI) {\n\t\tvar el = this;\n\t\twhile (el) {\n\t\t\tvar map = el._nsMap;\n\t\t\t//console.dir(map)\n\t\t\tif (map) {\n\t\t\t\tfor (var n in map) {\n\t\t\t\t\tif (hasOwn(map, n) && map[n] === namespaceURI) {\n\t\t\t\t\t\treturn n;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tel = el.nodeType == ATTRIBUTE_NODE ? el.ownerDocument : el.parentNode;\n\t\t}\n\t\treturn null;\n\t},\n\t/**\n\t * This function is used to look up the namespace URI associated with the given prefix,\n\t * starting from this node.\n\t *\n\t * **This behavior is different from the in the specs**:\n\t * - no node type specific handling\n\t * - uses the internal attribute _nsMap for resolving namespaces that is updated when changing attributes\n\t *\n\t * @param {string | null} prefix\n\t * The prefix for which to find the associated namespace URI.\n\t * @returns {string | null}\n\t * The associated namespace URI, if found; otherwise, null.\n\t * @since DOM Level 3\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupnamespaceuri\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI\n\t * @prettierignore\n\t */\n\tlookupNamespaceURI: function (prefix) {\n\t\tvar el = this;\n\t\twhile (el) {\n\t\t\tvar map = el._nsMap;\n\t\t\t//console.dir(map)\n\t\t\tif (map) {\n\t\t\t\tif (hasOwn(map, prefix)) {\n\t\t\t\t\treturn map[prefix];\n\t\t\t\t}\n\t\t\t}\n\t\t\tel = el.nodeType == ATTRIBUTE_NODE ? el.ownerDocument : el.parentNode;\n\t\t}\n\t\treturn null;\n\t},\n\t/**\n\t * Determines whether the given namespace URI is the default namespace.\n\t *\n\t * The function works by looking up the prefix associated with the given namespace URI. If no\n\t * prefix is found (i.e., the namespace URI is not registered in the namespace map of this\n\t * node or any of its ancestors), it returns `true`, implying the namespace URI is considered\n\t * the default.\n\t *\n\t * **This behavior is different from the in the specs**:\n\t * - no node type specific handling\n\t * - uses the internal attribute _nsMap for resolving namespaces that is updated when changing attributes\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI to be checked.\n\t * @returns {boolean}\n\t * Returns true if the given namespace URI is the default namespace, false otherwise.\n\t * @since DOM Level 3\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace\n\t * @see https://dom.spec.whatwg.org/#dom-node-isdefaultnamespace\n\t * @prettierignore\n\t */\n\tisDefaultNamespace: function (namespaceURI) {\n\t\tvar prefix = this.lookupPrefix(namespaceURI);\n\t\treturn prefix == null;\n\t},\n\t/**\n\t * Compares the reference node with a node with regard to their position in the document and\n\t * according to the document order.\n\t *\n\t * @param {Node} other\n\t * The node to compare the reference node to.\n\t * @returns {number}\n\t * Returns how the node is positioned relatively to the reference node according to the\n\t * bitmask. 0 if reference node and given node are the same.\n\t * @since DOM Level 3\n\t * @see https://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#Node3-compare\n\t * @see https://dom.spec.whatwg.org/#dom-node-comparedocumentposition\n\t */\n\tcompareDocumentPosition: function (other) {\n\t\tif (this === other) return 0;\n\t\tvar node1 = other;\n\t\tvar node2 = this;\n\t\tvar attr1 = null;\n\t\tvar attr2 = null;\n\t\tif (node1 instanceof Attr) {\n\t\t\tattr1 = node1;\n\t\t\tnode1 = attr1.ownerElement;\n\t\t}\n\t\tif (node2 instanceof Attr) {\n\t\t\tattr2 = node2;\n\t\t\tnode2 = attr2.ownerElement;\n\t\t\tif (attr1 && node1 && node2 === node1) {\n\t\t\t\tfor (var i = 0, attr; (attr = node2.attributes[i]); i++) {\n\t\t\t\t\tif (attr === attr1)\n\t\t\t\t\t\treturn DocumentPosition.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC + DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t\t\t\tif (attr === attr2)\n\t\t\t\t\t\treturn DocumentPosition.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC + DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!node1 || !node2 || node2.ownerDocument !== node1.ownerDocument) {\n\t\t\treturn (\n\t\t\t\tDocumentPosition.DOCUMENT_POSITION_DISCONNECTED +\n\t\t\t\tDocumentPosition.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC +\n\t\t\t\t(docGUID(node2.ownerDocument) > docGUID(node1.ownerDocument)\n\t\t\t\t\t? DocumentPosition.DOCUMENT_POSITION_FOLLOWING\n\t\t\t\t\t: DocumentPosition.DOCUMENT_POSITION_PRECEDING)\n\t\t\t);\n\t\t}\n\t\tvar chain1 = parentChain(node1);\n\t\tvar chain2 = parentChain(node2);\n\t\tif ((!attr1 && chain2.indexOf(node1) >= 0) || (attr2 && node1 === node2)) {\n\t\t\treturn DocumentPosition.DOCUMENT_POSITION_CONTAINS + DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t}\n\t\tif ((!attr2 && chain1.indexOf(node2) >= 0) || (attr1 && node1 === node2)) {\n\t\t\treturn DocumentPosition.DOCUMENT_POSITION_CONTAINED_BY + DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t}\n\t\tvar ca = commonAncestor(chain2, chain1);\n\t\tfor (var n in ca.childNodes) {\n\t\t\tvar child = ca.childNodes[n];\n\t\t\tif (child === node2) return DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t\tif (child === node1) return DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t\tif (chain2.indexOf(child) >= 0) return DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t\tif (chain1.indexOf(child) >= 0) return DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t}\n\t\treturn 0;\n\t},\n};\n\n/**\n * Encodes special XML characters to their corresponding entities.\n *\n * @param {string} c\n * The character to be encoded.\n * @returns {string}\n * The encoded character.\n * @private\n */\nfunction _xmlEncoder(c) {\n\treturn (\n\t\t(c == '<' && '<') || (c == '>' && '>') || (c == '&' && '&') || (c == '\"' && '"') || '&#' + c.charCodeAt() + ';'\n\t);\n}\n\ncopy(NodeType, Node);\ncopy(NodeType, Node.prototype);\ncopy(DocumentPosition, Node);\ncopy(DocumentPosition, Node.prototype);\n\n/**\n * @param callback\n * Return true for continue,false for break.\n * @returns\n * boolean true: break visit;\n */\nfunction _visitNode(node, callback) {\n\tif (callback(node)) {\n\t\treturn true;\n\t}\n\tif ((node = node.firstChild)) {\n\t\tdo {\n\t\t\tif (_visitNode(node, callback)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} while ((node = node.nextSibling));\n\t}\n}\n\n/**\n * @typedef DocumentOptions\n * @property {string} [contentType=MIME_TYPE.XML_APPLICATION]\n */\n/**\n * The Document interface describes the common properties and methods for any kind of document.\n *\n * It should usually be created using `new DOMImplementation().createDocument(...)`\n * or `new DOMImplementation().createHTMLDocument(...)`.\n *\n * The constructor is considered a private API and offers to initially set the `contentType`\n * property via it's options parameter.\n *\n * @class\n * @param {Symbol} symbol\n * @param {DocumentOptions} [options]\n * @augments Node\n * @private\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document\n * @see https://dom.spec.whatwg.org/#interface-document\n */\nfunction Document(symbol, options) {\n\tcheckSymbol(symbol);\n\n\tvar opt = options || {};\n\tthis.ownerDocument = this;\n\t/**\n\t * The mime type of the document is determined at creation time and can not be modified.\n\t *\n\t * @type {string}\n\t * @see https://dom.spec.whatwg.org/#concept-document-content-type\n\t * @see {@link DOMImplementation}\n\t * @see {@link MIME_TYPE}\n\t * @readonly\n\t */\n\tthis.contentType = opt.contentType || MIME_TYPE.XML_APPLICATION;\n\t/**\n\t * @type {'html' | 'xml'}\n\t * @see https://dom.spec.whatwg.org/#concept-document-type\n\t * @see {@link DOMImplementation}\n\t * @readonly\n\t */\n\tthis.type = isHTMLMimeType(this.contentType) ? 'html' : 'xml';\n}\n\n/**\n * Updates the namespace mapping of an element when a new attribute is added.\n *\n * @param {Document} doc\n * The document that the element belongs to.\n * @param {Element} el\n * The element to which the attribute is being added.\n * @param {Attr} newAttr\n * The new attribute being added.\n * @private\n */\nfunction _onAddAttribute(doc, el, newAttr) {\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI;\n\tif (ns === NAMESPACE.XMLNS) {\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix ? newAttr.localName : ''] = newAttr.value;\n\t}\n}\n\n/**\n * Updates the namespace mapping of an element when an attribute is removed.\n *\n * @param {Document} doc\n * The document that the element belongs to.\n * @param {Element} el\n * The element from which the attribute is being removed.\n * @param {Attr} newAttr\n * The attribute being removed.\n * @param {boolean} remove\n * Indicates whether the attribute is to be removed.\n * @private\n */\nfunction _onRemoveAttribute(doc, el, newAttr, remove) {\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI;\n\tif (ns === NAMESPACE.XMLNS) {\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix ? newAttr.localName : ''];\n\t}\n}\n\n/**\n * Updates `parent.childNodes`, adjusting the indexed items and its `length`.\n * If `newChild` is provided and has no nextSibling, it will be appended.\n * Otherwise, it's assumed that an item has been removed or inserted,\n * and `parent.firstNode` and its `.nextSibling` to re-indexing all child nodes of `parent`.\n *\n * @param {Document} doc\n * The parent document of `el`.\n * @param {Node} parent\n * The parent node whose childNodes list needs to be updated.\n * @param {Node} [newChild]\n * The new child node to be appended. If not provided, the function assumes a node has been\n * removed.\n * @private\n */\nfunction _onUpdateChild(doc, parent, newChild) {\n\tif (doc && doc._inc) {\n\t\tdoc._inc++;\n\t\tvar childNodes = parent.childNodes;\n\t\t// assumes nextSibling and previousSibling were already configured upfront\n\t\tif (newChild && !newChild.nextSibling) {\n\t\t\t// if an item has been appended, we only need to update the last index and the length\n\t\t\tchildNodes[childNodes.length++] = newChild;\n\t\t} else {\n\t\t\t// otherwise we need to reindex all items,\n\t\t\t// which can take a while when processing nodes with a lot of children\n\t\t\tvar child = parent.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile (child) {\n\t\t\t\tchildNodes[i++] = child;\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\tchildNodes.length = i;\n\t\t\tdelete childNodes[childNodes.length];\n\t\t}\n\t}\n}\n\n/**\n * Removes the connections between `parentNode` and `child`\n * and any existing `child.previousSibling` or `child.nextSibling`.\n *\n * @param {Node} parentNode\n * The parent node from which the child node is to be removed.\n * @param {Node} child\n * The child node to be removed from the parentNode.\n * @returns {Node}\n * Returns the child node that was removed.\n * @throws {DOMException}\n * With code:\n * - {@link DOMException.NOT_FOUND_ERR} If the parentNode is not the parent of the child node.\n * @private\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n */\nfunction _removeChild(parentNode, child) {\n\tif (parentNode !== child.parentNode) {\n\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, \"child's parent is not parent\");\n\t}\n\tvar oldPreviousSibling = child.previousSibling;\n\tvar oldNextSibling = child.nextSibling;\n\tif (oldPreviousSibling) {\n\t\toldPreviousSibling.nextSibling = oldNextSibling;\n\t} else {\n\t\tparentNode.firstChild = oldNextSibling;\n\t}\n\tif (oldNextSibling) {\n\t\toldNextSibling.previousSibling = oldPreviousSibling;\n\t} else {\n\t\tparentNode.lastChild = oldPreviousSibling;\n\t}\n\t_onUpdateChild(parentNode.ownerDocument, parentNode);\n\tchild.parentNode = null;\n\tchild.previousSibling = null;\n\tchild.nextSibling = null;\n\treturn child;\n}\n\n/**\n * Returns `true` if `node` can be a parent for insertion.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasValidParentNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE)\n\t);\n}\n\n/**\n * Returns `true` if `node` can be inserted according to it's `nodeType`.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasInsertableNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.CDATA_SECTION_NODE ||\n\t\t\tnode.nodeType === Node.COMMENT_NODE ||\n\t\t\tnode.nodeType === Node.DOCUMENT_FRAGMENT_NODE ||\n\t\t\tnode.nodeType === Node.DOCUMENT_TYPE_NODE ||\n\t\t\tnode.nodeType === Node.ELEMENT_NODE ||\n\t\t\tnode.nodeType === Node.PROCESSING_INSTRUCTION_NODE ||\n\t\t\tnode.nodeType === Node.TEXT_NODE)\n\t);\n}\n\n/**\n * Returns true if `node` is a DOCTYPE node.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isDocTypeNode(node) {\n\treturn node && node.nodeType === Node.DOCUMENT_TYPE_NODE;\n}\n\n/**\n * Returns true if the node is an element.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isElementNode(node) {\n\treturn node && node.nodeType === Node.ELEMENT_NODE;\n}\n/**\n * Returns true if `node` is a text node.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isTextNode(node) {\n\treturn node && node.nodeType === Node.TEXT_NODE;\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Document} doc\n * The document node.\n * @param {Node} child\n * The node that would become the nextSibling if the element would be inserted.\n * @returns {boolean}\n * `true` if an element can be inserted before child.\n * @private\n */\nfunction isElementInsertionPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\tif (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Node} doc\n * The document node.\n * @param {Node} child\n * The node that would become the nextSibling if the element would be inserted.\n * @returns {boolean}\n * `true` if an element can be inserted before child.\n * @private\n */\nfunction isElementReplacementPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\n\tfunction hasElementChildThatIsNotChild(node) {\n\t\treturn isElementNode(node) && node !== child;\n\t}\n\n\tif (find(parentChildNodes, hasElementChildThatIsNotChild)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Asserts pre-insertion validity of a node into a parent before a child.\n * Throws errors for invalid node combinations that would result in an ill-formed DOM.\n *\n * @param {Node} parent\n * The parent node to insert `node` into.\n * @param {Node} node\n * The node to insert.\n * @param {Node | null} child\n * The node that should become the `nextSibling` of `node`. If null, no sibling is considered.\n * @throws {DOMException}\n * With code:\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `parent` is not a Document,\n * DocumentFragment, or Element node.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a host-including inclusive\n * ancestor of `parent`. (Currently not implemented)\n * - {@link DOMException.NOT_FOUND_ERR} If `child` is non-null and its `parent` is not\n * `parent`.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is not a DocumentFragment,\n * DocumentType, Element, or CharacterData node.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If either `node` is a Text node and `parent` is\n * a document, or if `node` is a doctype and `parent` is not a document.\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidity1to5(parent, node, child) {\n\t// 1. If `parent` is not a Document, DocumentFragment, or Element node, then throw a \"HierarchyRequestError\" DOMException.\n\tif (!hasValidParentNodeType(parent)) {\n\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Unexpected parent node type ' + parent.nodeType);\n\t}\n\t// 2. If `node` is a host-including inclusive ancestor of `parent`, then throw a \"HierarchyRequestError\" DOMException.\n\t// not implemented!\n\t// 3. If `child` is non-null and its parent is not `parent`, then throw a \"NotFoundError\" DOMException.\n\tif (child && child.parentNode !== parent) {\n\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, 'child not in parent');\n\t}\n\tif (\n\t\t// 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a \"HierarchyRequestError\" DOMException.\n\t\t!hasInsertableNodeType(node) ||\n\t\t// 5. If either `node` is a Text node and `parent` is a document,\n\t\t// the sax parser currently adds top level text nodes, this will be fixed in 0.9.0\n\t\t// || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)\n\t\t// or `node` is a doctype and `parent` is not a document, then throw a \"HierarchyRequestError\" DOMException.\n\t\t(isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE)\n\t) {\n\t\tthrow new DOMException(\n\t\t\tDOMException.HIERARCHY_REQUEST_ERR,\n\t\t\t'Unexpected node type ' + node.nodeType + ' for parent node type ' + parent.nodeType\n\t\t);\n\t}\n}\n\n/**\n * Asserts pre-insertion validity of a node into a document before a child.\n * Throws errors for invalid node combinations that would result in an ill-formed DOM.\n *\n * @param {Document} parent\n * The parent node to insert `node` into.\n * @param {Node} node\n * The node to insert.\n * @param {Node | undefined} child\n * The node that should become the `nextSibling` of `node`. If undefined, no sibling is\n * considered.\n * @returns {Node}\n * @throws {DOMException}\n * With code:\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a DocumentFragment with more than\n * one element child or has a Text node child.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a DocumentFragment with one\n * element child and either `parent` has an element child, `child` is a doctype, or `child` is\n * non-null and a doctype is following `child`.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is an Element and `parent` has an\n * element child, `child` is a doctype, or `child` is non-null and a doctype is following\n * `child`.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a DocumentType and `parent` has a\n * doctype child, `child` is non-null and an element is preceding `child`, or `child` is null\n * and `parent` has an element child.\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If node has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child,\n\t\t// `child` is a doctype, or `child` is non-null and a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child, `child` is a doctype,\n\t\t// or `child` is non-null and a doctype is following `child`.\n\t\tif (!isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\t// `parent` has a doctype child,\n\t\tif (find(parentChildNodes, isDocTypeNode)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// `child` is non-null and an element is preceding `child`,\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t\t// or `child` is null and `parent` has an element child.\n\t\tif (!child && parentElementChild) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Doctype can not be appended since element is present');\n\t\t}\n\t}\n}\n\n/**\n * @param {Document} parent\n * The parent node to insert `node` into.\n * @param {Node} node\n * The node to insert.\n * @param {Node | undefined} child\n * the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws {DOMException}\n * For several node combinations that would create a DOM that is not well-formed.\n * @throws {DOMException}\n * If `child` is provided but is not a child of `parent`.\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreReplacementValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If `node` has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (!isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\tfunction hasDoctypeChildThatIsNotChild(node) {\n\t\t\treturn isDocTypeNode(node) && node !== child;\n\t\t}\n\n\t\t// `parent` has a doctype child that is not `child`,\n\t\tif (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// or an element is preceding `child`.\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t}\n}\n\n/**\n * Inserts a node into a parent node before a child node.\n *\n * @param {Node} parent\n * The parent node to insert the node into.\n * @param {Node} node\n * The node to insert into the parent.\n * @param {Node | null} child\n * The node that should become the next sibling of the node.\n * If null, the function inserts the node at the end of the children of the parent node.\n * @param {Function} [_inDocumentAssertion]\n * An optional function to check pre-insertion validity if parent is a document node.\n * Defaults to {@link assertPreInsertionValidityInDocument}\n * @returns {Node}\n * Returns the inserted node.\n * @throws {DOMException}\n * Throws a DOMException if inserting the node would result in a DOM tree that is not\n * well-formed. See {@link assertPreInsertionValidity1to5},\n * {@link assertPreInsertionValidityInDocument}.\n * @throws {DOMException}\n * Throws a DOMException if child is provided but is not a child of the parent. See\n * {@link Node.removeChild}\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction _insertBefore(parent, node, child, _inDocumentAssertion) {\n\t// To ensure pre-insertion validity of a node into a parent before a child, run these steps:\n\tassertPreInsertionValidity1to5(parent, node, child);\n\n\t// If parent is a document, and any of the statements below, switched on the interface node implements,\n\t// are true, then throw a \"HierarchyRequestError\" DOMException.\n\tif (parent.nodeType === Node.DOCUMENT_NODE) {\n\t\t(_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child);\n\t}\n\n\tvar cp = node.parentNode;\n\tif (cp) {\n\t\tcp.removeChild(node); //remove and update\n\t}\n\tif (node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n\t\tvar newFirst = node.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn node;\n\t\t}\n\t\tvar newLast = node.lastChild;\n\t} else {\n\t\tnewFirst = newLast = node;\n\t}\n\tvar pre = child ? child.previousSibling : parent.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = child;\n\n\tif (pre) {\n\t\tpre.nextSibling = newFirst;\n\t} else {\n\t\tparent.firstChild = newFirst;\n\t}\n\tif (child == null) {\n\t\tparent.lastChild = newLast;\n\t} else {\n\t\tchild.previousSibling = newLast;\n\t}\n\tdo {\n\t\tnewFirst.parentNode = parent;\n\t} while (newFirst !== newLast && (newFirst = newFirst.nextSibling));\n\t_onUpdateChild(parent.ownerDocument || parent, parent, node);\n\tif (node.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnode.firstChild = node.lastChild = null;\n\t}\n\n\treturn node;\n}\n\nDocument.prototype = {\n\t/**\n\t * The implementation that created this document.\n\t *\n\t * @type DOMImplementation\n\t * @readonly\n\t */\n\timplementation: null,\n\tnodeName: '#document',\n\tnodeType: DOCUMENT_NODE,\n\t/**\n\t * The DocumentType node of the document.\n\t *\n\t * @type DocumentType\n\t * @readonly\n\t */\n\tdoctype: null,\n\tdocumentElement: null,\n\t_inc: 1,\n\n\tinsertBefore: function (newChild, refChild) {\n\t\t//raises\n\t\tif (newChild.nodeType === DOCUMENT_FRAGMENT_NODE) {\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile (child) {\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child, refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\t_insertBefore(this, newChild, refChild);\n\t\tnewChild.ownerDocument = this;\n\t\tif (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn newChild;\n\t},\n\tremoveChild: function (oldChild) {\n\t\tvar removed = _removeChild(this, oldChild);\n\t\tif (removed === this.documentElement) {\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn removed;\n\t},\n\treplaceChild: function (newChild, oldChild) {\n\t\t//raises\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\tnewChild.ownerDocument = this;\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t\tif (isElementNode(newChild)) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t},\n\t// Introduced in DOM Level 2:\n\timportNode: function (importedNode, deep) {\n\t\treturn importNode(this, importedNode, deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById: function (id) {\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement, function (node) {\n\t\t\tif (node.nodeType == ELEMENT_NODE) {\n\t\t\t\tif (node.getAttribute('id') == id) {\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn rtv;\n\t},\n\n\t/**\n\t * Creates a new `Element` that is owned by this `Document`.\n\t * In HTML Documents `localName` is the lower cased `tagName`,\n\t * otherwise no transformation is being applied.\n\t * When `contentType` implies the HTML namespace, it will be set as `namespaceURI`.\n\t *\n\t * __This implementation differs from the specification:__ - The provided name is not checked\n\t * against the `Name` production,\n\t * so no related error will be thrown.\n\t * - There is no interface `HTMLElement`, it is always an `Element`.\n\t * - There is no support for a second argument to indicate using custom elements.\n\t *\n\t * @param {string} tagName\n\t * @returns {Element}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement\n\t * @see https://dom.spec.whatwg.org/#dom-document-createelement\n\t * @see https://dom.spec.whatwg.org/#concept-create-element\n\t */\n\tcreateElement: function (tagName) {\n\t\tvar node = new Element(PDC);\n\t\tnode.ownerDocument = this;\n\t\tif (this.type === 'html') {\n\t\t\ttagName = tagName.toLowerCase();\n\t\t}\n\t\tif (hasDefaultHTMLNamespace(this.contentType)) {\n\t\t\tnode.namespaceURI = NAMESPACE.HTML;\n\t\t}\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.localName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs = (node.attributes = new NamedNodeMap());\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t/**\n\t * @returns {DocumentFragment}\n\t */\n\tcreateDocumentFragment: function () {\n\t\tvar node = new DocumentFragment(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\t/**\n\t * @param {string} data\n\t * @returns {Text}\n\t */\n\tcreateTextNode: function (data) {\n\t\tvar node = new Text(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\t/**\n\t * @param {string} data\n\t * @returns {Comment}\n\t */\n\tcreateComment: function (data) {\n\t\tvar node = new Comment(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\t/**\n\t * @param {string} data\n\t * @returns {CDATASection}\n\t */\n\tcreateCDATASection: function (data) {\n\t\tvar node = new CDATASection(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\t/**\n\t * @param {string} target\n\t * @param {string} data\n\t * @returns {ProcessingInstruction}\n\t */\n\tcreateProcessingInstruction: function (target, data) {\n\t\tvar node = new ProcessingInstruction(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.nodeName = node.target = target;\n\t\tnode.nodeValue = node.data = data;\n\t\treturn node;\n\t},\n\t/**\n\t * Creates an `Attr` node that is owned by this document.\n\t * In HTML Documents `localName` is the lower cased `name`,\n\t * otherwise no transformation is being applied.\n\t *\n\t * __This implementation differs from the specification:__ - The provided name is not checked\n\t * against the `Name` production,\n\t * so no related error will be thrown.\n\t *\n\t * @param {string} name\n\t * @returns {Attr}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/createAttribute\n\t * @see https://dom.spec.whatwg.org/#dom-document-createattribute\n\t */\n\tcreateAttribute: function (name) {\n\t\tif (!g.QName_exact.test(name)) {\n\t\t\tthrow new DOMException(DOMException.INVALID_CHARACTER_ERR, 'invalid character in name \"' + name + '\"');\n\t\t}\n\t\tif (this.type === 'html') {\n\t\t\tname = name.toLowerCase();\n\t\t}\n\t\treturn this._createAttribute(name);\n\t},\n\t_createAttribute: function (name) {\n\t\tvar node = new Attr(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.name = name;\n\t\tnode.nodeName = name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\t/**\n\t * Creates an EntityReference object.\n\t * The current implementation does not fill the `childNodes` with those of the corresponding\n\t * `Entity`\n\t *\n\t * @deprecated\n\t * In DOM Level 4.\n\t * @param {string} name\n\t * The name of the entity to reference. No namespace well-formedness checks are performed.\n\t * @returns {EntityReference}\n\t * @throws {DOMException}\n\t * With code `INVALID_CHARACTER_ERR` when `name` is not valid.\n\t * @throws {DOMException}\n\t * with code `NOT_SUPPORTED_ERR` when the document is of type `html`\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-392B75AE\n\t */\n\tcreateEntityReference: function (name) {\n\t\tif (!g.Name.test(name)) {\n\t\t\tthrow new DOMException(DOMException.INVALID_CHARACTER_ERR, 'not a valid xml name \"' + name + '\"');\n\t\t}\n\t\tif (this.type === 'html') {\n\t\t\tthrow new DOMException('document is an html document', DOMExceptionName.NotSupportedError);\n\t\t}\n\n\t\tvar node = new EntityReference(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.nodeName = name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\t/**\n\t * @param {string} namespaceURI\n\t * @param {string} qualifiedName\n\t * @returns {Element}\n\t */\n\tcreateElementNS: function (namespaceURI, qualifiedName) {\n\t\tvar validated = validateAndExtract(namespaceURI, qualifiedName);\n\t\tvar node = new Element(PDC);\n\t\tvar attrs = (node.attributes = new NamedNodeMap());\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = validated[0];\n\t\tnode.prefix = validated[1];\n\t\tnode.localName = validated[2];\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\t/**\n\t * @param {string} namespaceURI\n\t * @param {string} qualifiedName\n\t * @returns {Attr}\n\t */\n\tcreateAttributeNS: function (namespaceURI, qualifiedName) {\n\t\tvar validated = validateAndExtract(namespaceURI, qualifiedName);\n\t\tvar node = new Attr(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.specified = true;\n\t\tnode.namespaceURI = validated[0];\n\t\tnode.prefix = validated[1];\n\t\tnode.localName = validated[2];\n\t\treturn node;\n\t},\n};\n_extends(Document, Node);\n\nfunction Element(symbol) {\n\tcheckSymbol(symbol);\n\n\tthis._nsMap = Object.create(null);\n}\nElement.prototype = {\n\tnodeType: ELEMENT_NODE,\n\t/**\n\t * The attributes of this element.\n\t *\n\t * @type {NamedNodeMap | null}\n\t */\n\tattributes: null,\n\tgetQualifiedName: function () {\n\t\treturn this.prefix ? this.prefix + ':' + this.localName : this.localName;\n\t},\n\t_isInHTMLDocumentAndNamespace: function () {\n\t\treturn this.ownerDocument.type === 'html' && this.namespaceURI === NAMESPACE.HTML;\n\t},\n\thasAttribute: function (name) {\n\t\treturn !!this.getAttributeNode(name);\n\t},\n\t/**\n\t * Returns element’s first attribute whose qualified name is `name`, and `null`\n\t * if there is no such attribute.\n\t *\n\t * @param {string} name\n\t * @returns {string | null}\n\t */\n\tgetAttribute: function (name) {\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr ? attr.value : null;\n\t},\n\tgetAttributeNode: function (name) {\n\t\tif (this._isInHTMLDocumentAndNamespace()) {\n\t\t\tname = name.toLowerCase();\n\t\t}\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\t/**\n\t * Sets the value of element’s first attribute whose qualified name is qualifiedName to value.\n\t *\n\t * @param {string} name\n\t * @param {string} value\n\t */\n\tsetAttribute: function (name, value) {\n\t\tif (this._isInHTMLDocumentAndNamespace()) {\n\t\t\tname = name.toLowerCase();\n\t\t}\n\t\tvar attr = this.getAttributeNode(name);\n\t\tif (attr) {\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t} else {\n\t\t\tattr = this.ownerDocument._createAttribute(name);\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t\tthis.setAttributeNode(attr);\n\t\t}\n\t},\n\tremoveAttribute: function (name) {\n\t\tvar attr = this.getAttributeNode(name);\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\tsetAttributeNode: function (newAttr) {\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS: function (newAttr) {\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode: function (oldAttr) {\n\t\t//console.log(this == oldAttr.ownerElement)\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS: function (namespaceURI, localName) {\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS: function (namespaceURI, localName) {\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName) != null;\n\t},\n\t/**\n\t * Returns element’s attribute whose namespace is `namespaceURI` and local name is\n\t * `localName`,\n\t * or `null` if there is no such attribute.\n\t *\n\t * @param {string} namespaceURI\n\t * @param {string} localName\n\t * @returns {string | null}\n\t */\n\tgetAttributeNS: function (namespaceURI, localName) {\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr ? attr.value : null;\n\t},\n\t/**\n\t * Sets the value of element’s attribute whose namespace is `namespaceURI` and local name is\n\t * `localName` to value.\n\t *\n\t * @param {string} namespaceURI\n\t * @param {string} qualifiedName\n\t * @param {string} value\n\t * @see https://dom.spec.whatwg.org/#dom-element-setattributens\n\t */\n\tsetAttributeNS: function (namespaceURI, qualifiedName, value) {\n\t\tvar validated = validateAndExtract(namespaceURI, qualifiedName);\n\t\tvar localName = validated[2];\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\tif (attr) {\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t} else {\n\t\t\tattr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t\tthis.setAttributeNode(attr);\n\t\t}\n\t},\n\tgetAttributeNodeNS: function (namespaceURI, localName) {\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\t/**\n\t * Returns a LiveNodeList of all child elements which have **all** of the given class name(s).\n\t *\n\t * Returns an empty list if `classNames` is an empty string or only contains HTML white space\n\t * characters.\n\t *\n\t * Warning: This returns a live LiveNodeList.\n\t * Changes in the DOM will reflect in the array as the changes occur.\n\t * If an element selected by this array no longer qualifies for the selector,\n\t * it will automatically be removed. Be aware of this for iteration purposes.\n\t *\n\t * @param {string} classNames\n\t * Is a string representing the class name(s) to match; multiple class names are separated by\n\t * (ASCII-)whitespace.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByClassName\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname\n\t */\n\tgetElementsByClassName: function (classNames) {\n\t\tvar classNamesSet = toOrderedSet(classNames);\n\t\treturn new LiveNodeList(this, function (base) {\n\t\t\tvar ls = [];\n\t\t\tif (classNamesSet.length > 0) {\n\t\t\t\t_visitNode(base, function (node) {\n\t\t\t\t\tif (node !== base && node.nodeType === ELEMENT_NODE) {\n\t\t\t\t\t\tvar nodeClassNames = node.getAttribute('class');\n\t\t\t\t\t\t// can be null if the attribute does not exist\n\t\t\t\t\t\tif (nodeClassNames) {\n\t\t\t\t\t\t\t// before splitting and iterating just compare them for the most common case\n\t\t\t\t\t\t\tvar matches = classNames === nodeClassNames;\n\t\t\t\t\t\t\tif (!matches) {\n\t\t\t\t\t\t\t\tvar nodeClassNamesSet = toOrderedSet(nodeClassNames);\n\t\t\t\t\t\t\t\tmatches = classNamesSet.every(arrayIncludes(nodeClassNamesSet));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matches) {\n\t\t\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn ls;\n\t\t});\n\t},\n\n\t/**\n\t * Returns a LiveNodeList of elements with the given qualifiedName.\n\t * Searching for all descendants can be done by passing `*` as `qualifiedName`.\n\t *\n\t * All descendants of the specified element are searched, but not the element itself.\n\t * The returned list is live, which means it updates itself with the DOM tree automatically.\n\t * Therefore, there is no need to call `Element.getElementsByTagName()`\n\t * with the same element and arguments repeatedly if the DOM changes in between calls.\n\t *\n\t * When called on an HTML element in an HTML document,\n\t * `getElementsByTagName` lower-cases the argument before searching for it.\n\t * This is undesirable when trying to match camel-cased SVG elements (such as\n\t * ``) in an HTML document.\n\t * Instead, use `Element.getElementsByTagNameNS()`,\n\t * which preserves the capitalization of the tag name.\n\t *\n\t * `Element.getElementsByTagName` is similar to `Document.getElementsByTagName()`,\n\t * except that it only searches for elements that are descendants of the specified element.\n\t *\n\t * @param {string} qualifiedName\n\t * @returns {LiveNodeList}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByTagName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbytagname\n\t */\n\tgetElementsByTagName: function (qualifiedName) {\n\t\tvar isHTMLDocument = (this.nodeType === DOCUMENT_NODE ? this : this.ownerDocument).type === 'html';\n\t\tvar lowerQualifiedName = qualifiedName.toLowerCase();\n\t\treturn new LiveNodeList(this, function (base) {\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base, function (node) {\n\t\t\t\tif (node === base || node.nodeType !== ELEMENT_NODE) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (qualifiedName === '*') {\n\t\t\t\t\tls.push(node);\n\t\t\t\t} else {\n\t\t\t\t\tvar nodeQualifiedName = node.getQualifiedName();\n\t\t\t\t\tvar matchingQName = isHTMLDocument && node.namespaceURI === NAMESPACE.HTML ? lowerQualifiedName : qualifiedName;\n\t\t\t\t\tif (nodeQualifiedName === matchingQName) {\n\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS: function (namespaceURI, localName) {\n\t\treturn new LiveNodeList(this, function (base) {\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base, function (node) {\n\t\t\t\tif (\n\t\t\t\t\tnode !== base &&\n\t\t\t\t\tnode.nodeType === ELEMENT_NODE &&\n\t\t\t\t\t(namespaceURI === '*' || node.namespaceURI === namespaceURI) &&\n\t\t\t\t\t(localName === '*' || node.localName == localName)\n\t\t\t\t) {\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n};\nDocument.prototype.getElementsByClassName = Element.prototype.getElementsByClassName;\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n_extends(Element, Node);\nfunction Attr(symbol) {\n\tcheckSymbol(symbol);\n\n\tthis.namespaceURI = null;\n\tthis.prefix = null;\n\tthis.ownerElement = null;\n}\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr, Node);\n\nfunction CharacterData(symbol) {\n\tcheckSymbol(symbol);\n}\nCharacterData.prototype = {\n\tdata: '',\n\tsubstringData: function (offset, count) {\n\t\treturn this.data.substring(offset, offset + count);\n\t},\n\tappendData: function (text) {\n\t\ttext = this.data + text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function (offset, text) {\n\t\tthis.replaceData(offset, 0, text);\n\t},\n\tdeleteData: function (offset, count) {\n\t\tthis.replaceData(offset, count, '');\n\t},\n\treplaceData: function (offset, count, text) {\n\t\tvar start = this.data.substring(0, offset);\n\t\tvar end = this.data.substring(offset + count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n};\n_extends(CharacterData, Node);\nfunction Text(symbol) {\n\tcheckSymbol(symbol);\n}\nText.prototype = {\n\tnodeName: '#text',\n\tnodeType: TEXT_NODE,\n\tsplitText: function (offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif (this.parentNode) {\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t},\n};\n_extends(Text, CharacterData);\nfunction Comment(symbol) {\n\tcheckSymbol(symbol);\n}\nComment.prototype = {\n\tnodeName: '#comment',\n\tnodeType: COMMENT_NODE,\n};\n_extends(Comment, CharacterData);\n\nfunction CDATASection(symbol) {\n\tcheckSymbol(symbol);\n}\nCDATASection.prototype = {\n\tnodeName: '#cdata-section',\n\tnodeType: CDATA_SECTION_NODE,\n};\n_extends(CDATASection, Text);\n\nfunction DocumentType(symbol) {\n\tcheckSymbol(symbol);\n}\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType, Node);\n\nfunction Notation(symbol) {\n\tcheckSymbol(symbol);\n}\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation, Node);\n\nfunction Entity(symbol) {\n\tcheckSymbol(symbol);\n}\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity, Node);\n\nfunction EntityReference(symbol) {\n\tcheckSymbol(symbol);\n}\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference, Node);\n\nfunction DocumentFragment(symbol) {\n\tcheckSymbol(symbol);\n}\nDocumentFragment.prototype.nodeName = '#document-fragment';\nDocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment, Node);\n\nfunction ProcessingInstruction(symbol) {\n\tcheckSymbol(symbol);\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction, CharacterData);\nfunction XMLSerializer() {}\nXMLSerializer.prototype.serializeToString = function (node, nodeFilter) {\n\treturn nodeSerializeToString.call(node, nodeFilter);\n};\nNode.prototype.toString = nodeSerializeToString;\nfunction nodeSerializeToString(nodeFilter) {\n\tvar buf = [];\n\tvar refNode = (this.nodeType === DOCUMENT_NODE && this.documentElement) || this;\n\tvar prefix = refNode.prefix;\n\tvar uri = refNode.namespaceURI;\n\n\tif (uri && prefix == null) {\n\t\tvar prefix = refNode.lookupPrefix(uri);\n\t\tif (prefix == null) {\n\t\t\tvar visibleNamespaces = [\n\t\t\t\t{ namespace: uri, prefix: null },\n\t\t\t\t//{namespace:uri,prefix:''}\n\t\t\t];\n\t\t}\n\t}\n\tserializeToString(this, buf, nodeFilter, visibleNamespaces);\n\treturn buf.join('');\n}\n\nfunction needNamespaceDefine(node, isHTML, visibleNamespaces) {\n\tvar prefix = node.prefix || '';\n\tvar uri = node.namespaceURI;\n\t// According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) ,\n\t// and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl :\n\t// > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty.\n\t// in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using)\n\t// and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared :\n\t// > [...] Furthermore, the attribute value [...] must not be an empty string.\n\t// so serializing empty namespace value like xmlns:ds=\"\" would produce an invalid XML document.\n\tif (!uri) {\n\t\treturn false;\n\t}\n\tif ((prefix === 'xml' && uri === NAMESPACE.XML) || uri === NAMESPACE.XMLNS) {\n\t\treturn false;\n\t}\n\n\tvar i = visibleNamespaces.length;\n\twhile (i--) {\n\t\tvar ns = visibleNamespaces[i];\n\t\t// get namespace prefix\n\t\tif (ns.prefix === prefix) {\n\t\t\treturn ns.namespace !== uri;\n\t\t}\n\t}\n\treturn true;\n}\n/**\n * Literal whitespace other than space that appear in attribute values are serialized as\n * their entity references, so they will be preserved.\n * (In contrast to whitespace literals in the input which are normalized to spaces).\n *\n * Well-formed constraint: No < in Attribute Values:\n * > The replacement text of any entity referred to directly or indirectly\n * > in an attribute value must not contain a <.\n *\n * @see https://www.w3.org/TR/xml11/#CleanAttrVals\n * @see https://www.w3.org/TR/xml11/#NT-AttValue\n * @see https://www.w3.org/TR/xml11/#AVNormalize\n * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes\n * @prettierignore\n */\nfunction addSerializedAttribute(buf, qualifiedName, value) {\n\tbuf.push(' ', qualifiedName, '=\"', value.replace(/[<>&\"\\t\\n\\r]/g, _xmlEncoder), '\"');\n}\n\nfunction serializeToString(node, buf, nodeFilter, visibleNamespaces) {\n\tif (!visibleNamespaces) {\n\t\tvisibleNamespaces = [];\n\t}\n\tvar doc = node.nodeType === DOCUMENT_NODE ? node : node.ownerDocument;\n\tvar isHTML = doc.type === 'html';\n\n\tif (nodeFilter) {\n\t\tnode = nodeFilter(node);\n\t\tif (node) {\n\t\t\tif (typeof node == 'string') {\n\t\t\t\tbuf.push(node);\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t\t//buf.sort.apply(attrs, attributeSorter);\n\t}\n\n\tswitch (node.nodeType) {\n\t\tcase ELEMENT_NODE:\n\t\t\tvar attrs = node.attributes;\n\t\t\tvar len = attrs.length;\n\t\t\tvar child = node.firstChild;\n\t\t\tvar nodeName = node.tagName;\n\n\t\t\tvar prefixedNodeName = nodeName;\n\t\t\tif (!isHTML && !node.prefix && node.namespaceURI) {\n\t\t\t\tvar defaultNS;\n\t\t\t\t// lookup current default ns from `xmlns` attribute\n\t\t\t\tfor (var ai = 0; ai < attrs.length; ai++) {\n\t\t\t\t\tif (attrs.item(ai).name === 'xmlns') {\n\t\t\t\t\t\tdefaultNS = attrs.item(ai).value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!defaultNS) {\n\t\t\t\t\t// lookup current default ns in visibleNamespaces\n\t\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\t\tvar namespace = visibleNamespaces[nsi];\n\t\t\t\t\t\tif (namespace.prefix === '' && namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\t\tdefaultNS = namespace.namespace;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (defaultNS !== node.namespaceURI) {\n\t\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\t\tvar namespace = visibleNamespaces[nsi];\n\t\t\t\t\t\tif (namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\t\tif (namespace.prefix) {\n\t\t\t\t\t\t\t\tprefixedNodeName = namespace.prefix + ':' + nodeName;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbuf.push('<', prefixedNodeName);\n\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\t// add namespaces for attributes\n\t\t\t\tvar attr = attrs.item(i);\n\t\t\t\tif (attr.prefix == 'xmlns') {\n\t\t\t\t\tvisibleNamespaces.push({\n\t\t\t\t\t\tprefix: attr.localName,\n\t\t\t\t\t\tnamespace: attr.value,\n\t\t\t\t\t});\n\t\t\t\t} else if (attr.nodeName == 'xmlns') {\n\t\t\t\t\tvisibleNamespaces.push({ prefix: '', namespace: attr.value });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\tvar attr = attrs.item(i);\n\t\t\t\tif (needNamespaceDefine(attr, isHTML, visibleNamespaces)) {\n\t\t\t\t\tvar prefix = attr.prefix || '';\n\t\t\t\t\tvar uri = attr.namespaceURI;\n\t\t\t\t\taddSerializedAttribute(buf, prefix ? 'xmlns:' + prefix : 'xmlns', uri);\n\t\t\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace: uri });\n\t\t\t\t}\n\t\t\t\tserializeToString(attr, buf, nodeFilter, visibleNamespaces);\n\t\t\t}\n\n\t\t\t// add namespace for current node\n\t\t\tif (nodeName === prefixedNodeName && needNamespaceDefine(node, isHTML, visibleNamespaces)) {\n\t\t\t\tvar prefix = node.prefix || '';\n\t\t\t\tvar uri = node.namespaceURI;\n\t\t\t\taddSerializedAttribute(buf, prefix ? 'xmlns:' + prefix : 'xmlns', uri);\n\t\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace: uri });\n\t\t\t}\n\t\t\t// in XML elements can be closed when they have no children\n\t\t\tvar canCloseTag = !child;\n\t\t\tif (canCloseTag && (isHTML || node.namespaceURI === NAMESPACE.HTML)) {\n\t\t\t\t// in HTML (doc or ns) only void elements can be closed right away\n\t\t\t\tcanCloseTag = isHTMLVoidElement(nodeName);\n\t\t\t}\n\t\t\tif (canCloseTag) {\n\t\t\t\tbuf.push('/>');\n\t\t\t} else {\n\t\t\t\tbuf.push('>');\n\t\t\t\t//if is cdata child node\n\t\t\t\tif (isHTML && isHTMLRawTextElement(nodeName)) {\n\t\t\t\t\twhile (child) {\n\t\t\t\t\t\tif (child.data) {\n\t\t\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tserializeToString(child, buf, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\twhile (child) {\n\t\t\t\t\t\tserializeToString(child, buf, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbuf.push('');\n\t\t\t}\n\t\t\t// remove added visible namespaces\n\t\t\t//visibleNamespaces.length = startVisibleNamespaces;\n\t\t\treturn;\n\t\tcase DOCUMENT_NODE:\n\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\tvar child = node.firstChild;\n\t\t\twhile (child) {\n\t\t\t\tserializeToString(child, buf, nodeFilter, visibleNamespaces.slice());\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\treturn;\n\t\tcase ATTRIBUTE_NODE:\n\t\t\treturn addSerializedAttribute(buf, node.name, node.value);\n\t\tcase TEXT_NODE:\n\t\t\t/*\n\t\t\t * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form,\n\t\t\t * except when used as markup delimiters, or within a comment, a processing instruction,\n\t\t\t * or a CDATA section.\n\t\t\t * If they are needed elsewhere, they must be escaped using either numeric character\n\t\t\t * references or the strings `&` and `<` respectively.\n\t\t\t * The right angle bracket (>) may be represented using the string \" > \",\n\t\t\t * and must, for compatibility, be escaped using either `>`,\n\t\t\t * or a character reference when it appears in the string `]]>` in content,\n\t\t\t * when that string is not marking the end of a CDATA section.\n\t\t\t *\n\t\t\t * In the content of elements, character data is any string of characters which does not\n\t\t\t * contain the start-delimiter of any markup and does not include the CDATA-section-close\n\t\t\t * delimiter, `]]>`.\n\t\t\t *\n\t\t\t * @see https://www.w3.org/TR/xml/#NT-CharData\n\t\t\t * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node\n\t\t\t */\n\t\t\treturn buf.push(node.data.replace(/[<&>]/g, _xmlEncoder));\n\t\tcase CDATA_SECTION_NODE:\n\t\t\treturn buf.push(g.CDATA_START, node.data, g.CDATA_END);\n\t\tcase COMMENT_NODE:\n\t\t\treturn buf.push(g.COMMENT_START, node.data, g.COMMENT_END);\n\t\tcase DOCUMENT_TYPE_NODE:\n\t\t\tvar pubid = node.publicId;\n\t\t\tvar sysid = node.systemId;\n\t\t\tbuf.push(g.DOCTYPE_DECL_START, ' ', node.name);\n\t\t\tif (pubid) {\n\t\t\t\tbuf.push(' ', g.PUBLIC, ' ', pubid);\n\t\t\t\tif (sysid && sysid !== '.') {\n\t\t\t\t\tbuf.push(' ', sysid);\n\t\t\t\t}\n\t\t\t} else if (sysid && sysid !== '.') {\n\t\t\t\tbuf.push(' ', g.SYSTEM, ' ', sysid);\n\t\t\t}\n\t\t\tif (node.internalSubset) {\n\t\t\t\tbuf.push(' [', node.internalSubset, ']');\n\t\t\t}\n\t\t\tbuf.push('>');\n\t\t\treturn;\n\t\tcase PROCESSING_INSTRUCTION_NODE:\n\t\t\treturn buf.push('');\n\t\tcase ENTITY_REFERENCE_NODE:\n\t\t\treturn buf.push('&', node.nodeName, ';');\n\t\t//case ENTITY_NODE:\n\t\t//case NOTATION_NODE:\n\t\tdefault:\n\t\t\tbuf.push('??', node.nodeName);\n\t}\n}\nfunction importNode(doc, node, deep) {\n\tvar node2;\n\tswitch (node.nodeType) {\n\t\tcase ELEMENT_NODE:\n\t\t\tnode2 = node.cloneNode(false);\n\t\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i',\n\tlt: '<',\n\tquot: '\"',\n});\n\n/**\n * A map of all entities that are detected in an HTML document.\n * They contain all entries from `XML_ENTITIES`.\n *\n * @see {@link XML_ENTITIES}\n * @see {@link DOMParser.parseFromString}\n * @see {@link DOMImplementation.prototype.createHTMLDocument}\n * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5)\n * Spec\n * @see https://html.spec.whatwg.org/entities.json JSON\n * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names\n * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML\n * Wikipedia (HTML)\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML\n * Wikpedia (XHTML)\n */\nexports.HTML_ENTITIES = freeze({\n\tAacute: '\\u00C1',\n\taacute: '\\u00E1',\n\tAbreve: '\\u0102',\n\tabreve: '\\u0103',\n\tac: '\\u223E',\n\tacd: '\\u223F',\n\tacE: '\\u223E\\u0333',\n\tAcirc: '\\u00C2',\n\tacirc: '\\u00E2',\n\tacute: '\\u00B4',\n\tAcy: '\\u0410',\n\tacy: '\\u0430',\n\tAElig: '\\u00C6',\n\taelig: '\\u00E6',\n\taf: '\\u2061',\n\tAfr: '\\uD835\\uDD04',\n\tafr: '\\uD835\\uDD1E',\n\tAgrave: '\\u00C0',\n\tagrave: '\\u00E0',\n\talefsym: '\\u2135',\n\taleph: '\\u2135',\n\tAlpha: '\\u0391',\n\talpha: '\\u03B1',\n\tAmacr: '\\u0100',\n\tamacr: '\\u0101',\n\tamalg: '\\u2A3F',\n\tAMP: '\\u0026',\n\tamp: '\\u0026',\n\tAnd: '\\u2A53',\n\tand: '\\u2227',\n\tandand: '\\u2A55',\n\tandd: '\\u2A5C',\n\tandslope: '\\u2A58',\n\tandv: '\\u2A5A',\n\tang: '\\u2220',\n\tange: '\\u29A4',\n\tangle: '\\u2220',\n\tangmsd: '\\u2221',\n\tangmsdaa: '\\u29A8',\n\tangmsdab: '\\u29A9',\n\tangmsdac: '\\u29AA',\n\tangmsdad: '\\u29AB',\n\tangmsdae: '\\u29AC',\n\tangmsdaf: '\\u29AD',\n\tangmsdag: '\\u29AE',\n\tangmsdah: '\\u29AF',\n\tangrt: '\\u221F',\n\tangrtvb: '\\u22BE',\n\tangrtvbd: '\\u299D',\n\tangsph: '\\u2222',\n\tangst: '\\u00C5',\n\tangzarr: '\\u237C',\n\tAogon: '\\u0104',\n\taogon: '\\u0105',\n\tAopf: '\\uD835\\uDD38',\n\taopf: '\\uD835\\uDD52',\n\tap: '\\u2248',\n\tapacir: '\\u2A6F',\n\tapE: '\\u2A70',\n\tape: '\\u224A',\n\tapid: '\\u224B',\n\tapos: '\\u0027',\n\tApplyFunction: '\\u2061',\n\tapprox: '\\u2248',\n\tapproxeq: '\\u224A',\n\tAring: '\\u00C5',\n\taring: '\\u00E5',\n\tAscr: '\\uD835\\uDC9C',\n\tascr: '\\uD835\\uDCB6',\n\tAssign: '\\u2254',\n\tast: '\\u002A',\n\tasymp: '\\u2248',\n\tasympeq: '\\u224D',\n\tAtilde: '\\u00C3',\n\tatilde: '\\u00E3',\n\tAuml: '\\u00C4',\n\tauml: '\\u00E4',\n\tawconint: '\\u2233',\n\tawint: '\\u2A11',\n\tbackcong: '\\u224C',\n\tbackepsilon: '\\u03F6',\n\tbackprime: '\\u2035',\n\tbacksim: '\\u223D',\n\tbacksimeq: '\\u22CD',\n\tBackslash: '\\u2216',\n\tBarv: '\\u2AE7',\n\tbarvee: '\\u22BD',\n\tBarwed: '\\u2306',\n\tbarwed: '\\u2305',\n\tbarwedge: '\\u2305',\n\tbbrk: '\\u23B5',\n\tbbrktbrk: '\\u23B6',\n\tbcong: '\\u224C',\n\tBcy: '\\u0411',\n\tbcy: '\\u0431',\n\tbdquo: '\\u201E',\n\tbecaus: '\\u2235',\n\tBecause: '\\u2235',\n\tbecause: '\\u2235',\n\tbemptyv: '\\u29B0',\n\tbepsi: '\\u03F6',\n\tbernou: '\\u212C',\n\tBernoullis: '\\u212C',\n\tBeta: '\\u0392',\n\tbeta: '\\u03B2',\n\tbeth: '\\u2136',\n\tbetween: '\\u226C',\n\tBfr: '\\uD835\\uDD05',\n\tbfr: '\\uD835\\uDD1F',\n\tbigcap: '\\u22C2',\n\tbigcirc: '\\u25EF',\n\tbigcup: '\\u22C3',\n\tbigodot: '\\u2A00',\n\tbigoplus: '\\u2A01',\n\tbigotimes: '\\u2A02',\n\tbigsqcup: '\\u2A06',\n\tbigstar: '\\u2605',\n\tbigtriangledown: '\\u25BD',\n\tbigtriangleup: '\\u25B3',\n\tbiguplus: '\\u2A04',\n\tbigvee: '\\u22C1',\n\tbigwedge: '\\u22C0',\n\tbkarow: '\\u290D',\n\tblacklozenge: '\\u29EB',\n\tblacksquare: '\\u25AA',\n\tblacktriangle: '\\u25B4',\n\tblacktriangledown: '\\u25BE',\n\tblacktriangleleft: '\\u25C2',\n\tblacktriangleright: '\\u25B8',\n\tblank: '\\u2423',\n\tblk12: '\\u2592',\n\tblk14: '\\u2591',\n\tblk34: '\\u2593',\n\tblock: '\\u2588',\n\tbne: '\\u003D\\u20E5',\n\tbnequiv: '\\u2261\\u20E5',\n\tbNot: '\\u2AED',\n\tbnot: '\\u2310',\n\tBopf: '\\uD835\\uDD39',\n\tbopf: '\\uD835\\uDD53',\n\tbot: '\\u22A5',\n\tbottom: '\\u22A5',\n\tbowtie: '\\u22C8',\n\tboxbox: '\\u29C9',\n\tboxDL: '\\u2557',\n\tboxDl: '\\u2556',\n\tboxdL: '\\u2555',\n\tboxdl: '\\u2510',\n\tboxDR: '\\u2554',\n\tboxDr: '\\u2553',\n\tboxdR: '\\u2552',\n\tboxdr: '\\u250C',\n\tboxH: '\\u2550',\n\tboxh: '\\u2500',\n\tboxHD: '\\u2566',\n\tboxHd: '\\u2564',\n\tboxhD: '\\u2565',\n\tboxhd: '\\u252C',\n\tboxHU: '\\u2569',\n\tboxHu: '\\u2567',\n\tboxhU: '\\u2568',\n\tboxhu: '\\u2534',\n\tboxminus: '\\u229F',\n\tboxplus: '\\u229E',\n\tboxtimes: '\\u22A0',\n\tboxUL: '\\u255D',\n\tboxUl: '\\u255C',\n\tboxuL: '\\u255B',\n\tboxul: '\\u2518',\n\tboxUR: '\\u255A',\n\tboxUr: '\\u2559',\n\tboxuR: '\\u2558',\n\tboxur: '\\u2514',\n\tboxV: '\\u2551',\n\tboxv: '\\u2502',\n\tboxVH: '\\u256C',\n\tboxVh: '\\u256B',\n\tboxvH: '\\u256A',\n\tboxvh: '\\u253C',\n\tboxVL: '\\u2563',\n\tboxVl: '\\u2562',\n\tboxvL: '\\u2561',\n\tboxvl: '\\u2524',\n\tboxVR: '\\u2560',\n\tboxVr: '\\u255F',\n\tboxvR: '\\u255E',\n\tboxvr: '\\u251C',\n\tbprime: '\\u2035',\n\tBreve: '\\u02D8',\n\tbreve: '\\u02D8',\n\tbrvbar: '\\u00A6',\n\tBscr: '\\u212C',\n\tbscr: '\\uD835\\uDCB7',\n\tbsemi: '\\u204F',\n\tbsim: '\\u223D',\n\tbsime: '\\u22CD',\n\tbsol: '\\u005C',\n\tbsolb: '\\u29C5',\n\tbsolhsub: '\\u27C8',\n\tbull: '\\u2022',\n\tbullet: '\\u2022',\n\tbump: '\\u224E',\n\tbumpE: '\\u2AAE',\n\tbumpe: '\\u224F',\n\tBumpeq: '\\u224E',\n\tbumpeq: '\\u224F',\n\tCacute: '\\u0106',\n\tcacute: '\\u0107',\n\tCap: '\\u22D2',\n\tcap: '\\u2229',\n\tcapand: '\\u2A44',\n\tcapbrcup: '\\u2A49',\n\tcapcap: '\\u2A4B',\n\tcapcup: '\\u2A47',\n\tcapdot: '\\u2A40',\n\tCapitalDifferentialD: '\\u2145',\n\tcaps: '\\u2229\\uFE00',\n\tcaret: '\\u2041',\n\tcaron: '\\u02C7',\n\tCayleys: '\\u212D',\n\tccaps: '\\u2A4D',\n\tCcaron: '\\u010C',\n\tccaron: '\\u010D',\n\tCcedil: '\\u00C7',\n\tccedil: '\\u00E7',\n\tCcirc: '\\u0108',\n\tccirc: '\\u0109',\n\tCconint: '\\u2230',\n\tccups: '\\u2A4C',\n\tccupssm: '\\u2A50',\n\tCdot: '\\u010A',\n\tcdot: '\\u010B',\n\tcedil: '\\u00B8',\n\tCedilla: '\\u00B8',\n\tcemptyv: '\\u29B2',\n\tcent: '\\u00A2',\n\tCenterDot: '\\u00B7',\n\tcenterdot: '\\u00B7',\n\tCfr: '\\u212D',\n\tcfr: '\\uD835\\uDD20',\n\tCHcy: '\\u0427',\n\tchcy: '\\u0447',\n\tcheck: '\\u2713',\n\tcheckmark: '\\u2713',\n\tChi: '\\u03A7',\n\tchi: '\\u03C7',\n\tcir: '\\u25CB',\n\tcirc: '\\u02C6',\n\tcirceq: '\\u2257',\n\tcirclearrowleft: '\\u21BA',\n\tcirclearrowright: '\\u21BB',\n\tcircledast: '\\u229B',\n\tcircledcirc: '\\u229A',\n\tcircleddash: '\\u229D',\n\tCircleDot: '\\u2299',\n\tcircledR: '\\u00AE',\n\tcircledS: '\\u24C8',\n\tCircleMinus: '\\u2296',\n\tCirclePlus: '\\u2295',\n\tCircleTimes: '\\u2297',\n\tcirE: '\\u29C3',\n\tcire: '\\u2257',\n\tcirfnint: '\\u2A10',\n\tcirmid: '\\u2AEF',\n\tcirscir: '\\u29C2',\n\tClockwiseContourIntegral: '\\u2232',\n\tCloseCurlyDoubleQuote: '\\u201D',\n\tCloseCurlyQuote: '\\u2019',\n\tclubs: '\\u2663',\n\tclubsuit: '\\u2663',\n\tColon: '\\u2237',\n\tcolon: '\\u003A',\n\tColone: '\\u2A74',\n\tcolone: '\\u2254',\n\tcoloneq: '\\u2254',\n\tcomma: '\\u002C',\n\tcommat: '\\u0040',\n\tcomp: '\\u2201',\n\tcompfn: '\\u2218',\n\tcomplement: '\\u2201',\n\tcomplexes: '\\u2102',\n\tcong: '\\u2245',\n\tcongdot: '\\u2A6D',\n\tCongruent: '\\u2261',\n\tConint: '\\u222F',\n\tconint: '\\u222E',\n\tContourIntegral: '\\u222E',\n\tCopf: '\\u2102',\n\tcopf: '\\uD835\\uDD54',\n\tcoprod: '\\u2210',\n\tCoproduct: '\\u2210',\n\tCOPY: '\\u00A9',\n\tcopy: '\\u00A9',\n\tcopysr: '\\u2117',\n\tCounterClockwiseContourIntegral: '\\u2233',\n\tcrarr: '\\u21B5',\n\tCross: '\\u2A2F',\n\tcross: '\\u2717',\n\tCscr: '\\uD835\\uDC9E',\n\tcscr: '\\uD835\\uDCB8',\n\tcsub: '\\u2ACF',\n\tcsube: '\\u2AD1',\n\tcsup: '\\u2AD0',\n\tcsupe: '\\u2AD2',\n\tctdot: '\\u22EF',\n\tcudarrl: '\\u2938',\n\tcudarrr: '\\u2935',\n\tcuepr: '\\u22DE',\n\tcuesc: '\\u22DF',\n\tcularr: '\\u21B6',\n\tcularrp: '\\u293D',\n\tCup: '\\u22D3',\n\tcup: '\\u222A',\n\tcupbrcap: '\\u2A48',\n\tCupCap: '\\u224D',\n\tcupcap: '\\u2A46',\n\tcupcup: '\\u2A4A',\n\tcupdot: '\\u228D',\n\tcupor: '\\u2A45',\n\tcups: '\\u222A\\uFE00',\n\tcurarr: '\\u21B7',\n\tcurarrm: '\\u293C',\n\tcurlyeqprec: '\\u22DE',\n\tcurlyeqsucc: '\\u22DF',\n\tcurlyvee: '\\u22CE',\n\tcurlywedge: '\\u22CF',\n\tcurren: '\\u00A4',\n\tcurvearrowleft: '\\u21B6',\n\tcurvearrowright: '\\u21B7',\n\tcuvee: '\\u22CE',\n\tcuwed: '\\u22CF',\n\tcwconint: '\\u2232',\n\tcwint: '\\u2231',\n\tcylcty: '\\u232D',\n\tDagger: '\\u2021',\n\tdagger: '\\u2020',\n\tdaleth: '\\u2138',\n\tDarr: '\\u21A1',\n\tdArr: '\\u21D3',\n\tdarr: '\\u2193',\n\tdash: '\\u2010',\n\tDashv: '\\u2AE4',\n\tdashv: '\\u22A3',\n\tdbkarow: '\\u290F',\n\tdblac: '\\u02DD',\n\tDcaron: '\\u010E',\n\tdcaron: '\\u010F',\n\tDcy: '\\u0414',\n\tdcy: '\\u0434',\n\tDD: '\\u2145',\n\tdd: '\\u2146',\n\tddagger: '\\u2021',\n\tddarr: '\\u21CA',\n\tDDotrahd: '\\u2911',\n\tddotseq: '\\u2A77',\n\tdeg: '\\u00B0',\n\tDel: '\\u2207',\n\tDelta: '\\u0394',\n\tdelta: '\\u03B4',\n\tdemptyv: '\\u29B1',\n\tdfisht: '\\u297F',\n\tDfr: '\\uD835\\uDD07',\n\tdfr: '\\uD835\\uDD21',\n\tdHar: '\\u2965',\n\tdharl: '\\u21C3',\n\tdharr: '\\u21C2',\n\tDiacriticalAcute: '\\u00B4',\n\tDiacriticalDot: '\\u02D9',\n\tDiacriticalDoubleAcute: '\\u02DD',\n\tDiacriticalGrave: '\\u0060',\n\tDiacriticalTilde: '\\u02DC',\n\tdiam: '\\u22C4',\n\tDiamond: '\\u22C4',\n\tdiamond: '\\u22C4',\n\tdiamondsuit: '\\u2666',\n\tdiams: '\\u2666',\n\tdie: '\\u00A8',\n\tDifferentialD: '\\u2146',\n\tdigamma: '\\u03DD',\n\tdisin: '\\u22F2',\n\tdiv: '\\u00F7',\n\tdivide: '\\u00F7',\n\tdivideontimes: '\\u22C7',\n\tdivonx: '\\u22C7',\n\tDJcy: '\\u0402',\n\tdjcy: '\\u0452',\n\tdlcorn: '\\u231E',\n\tdlcrop: '\\u230D',\n\tdollar: '\\u0024',\n\tDopf: '\\uD835\\uDD3B',\n\tdopf: '\\uD835\\uDD55',\n\tDot: '\\u00A8',\n\tdot: '\\u02D9',\n\tDotDot: '\\u20DC',\n\tdoteq: '\\u2250',\n\tdoteqdot: '\\u2251',\n\tDotEqual: '\\u2250',\n\tdotminus: '\\u2238',\n\tdotplus: '\\u2214',\n\tdotsquare: '\\u22A1',\n\tdoublebarwedge: '\\u2306',\n\tDoubleContourIntegral: '\\u222F',\n\tDoubleDot: '\\u00A8',\n\tDoubleDownArrow: '\\u21D3',\n\tDoubleLeftArrow: '\\u21D0',\n\tDoubleLeftRightArrow: '\\u21D4',\n\tDoubleLeftTee: '\\u2AE4',\n\tDoubleLongLeftArrow: '\\u27F8',\n\tDoubleLongLeftRightArrow: '\\u27FA',\n\tDoubleLongRightArrow: '\\u27F9',\n\tDoubleRightArrow: '\\u21D2',\n\tDoubleRightTee: '\\u22A8',\n\tDoubleUpArrow: '\\u21D1',\n\tDoubleUpDownArrow: '\\u21D5',\n\tDoubleVerticalBar: '\\u2225',\n\tDownArrow: '\\u2193',\n\tDownarrow: '\\u21D3',\n\tdownarrow: '\\u2193',\n\tDownArrowBar: '\\u2913',\n\tDownArrowUpArrow: '\\u21F5',\n\tDownBreve: '\\u0311',\n\tdowndownarrows: '\\u21CA',\n\tdownharpoonleft: '\\u21C3',\n\tdownharpoonright: '\\u21C2',\n\tDownLeftRightVector: '\\u2950',\n\tDownLeftTeeVector: '\\u295E',\n\tDownLeftVector: '\\u21BD',\n\tDownLeftVectorBar: '\\u2956',\n\tDownRightTeeVector: '\\u295F',\n\tDownRightVector: '\\u21C1',\n\tDownRightVectorBar: '\\u2957',\n\tDownTee: '\\u22A4',\n\tDownTeeArrow: '\\u21A7',\n\tdrbkarow: '\\u2910',\n\tdrcorn: '\\u231F',\n\tdrcrop: '\\u230C',\n\tDscr: '\\uD835\\uDC9F',\n\tdscr: '\\uD835\\uDCB9',\n\tDScy: '\\u0405',\n\tdscy: '\\u0455',\n\tdsol: '\\u29F6',\n\tDstrok: '\\u0110',\n\tdstrok: '\\u0111',\n\tdtdot: '\\u22F1',\n\tdtri: '\\u25BF',\n\tdtrif: '\\u25BE',\n\tduarr: '\\u21F5',\n\tduhar: '\\u296F',\n\tdwangle: '\\u29A6',\n\tDZcy: '\\u040F',\n\tdzcy: '\\u045F',\n\tdzigrarr: '\\u27FF',\n\tEacute: '\\u00C9',\n\teacute: '\\u00E9',\n\teaster: '\\u2A6E',\n\tEcaron: '\\u011A',\n\tecaron: '\\u011B',\n\tecir: '\\u2256',\n\tEcirc: '\\u00CA',\n\tecirc: '\\u00EA',\n\tecolon: '\\u2255',\n\tEcy: '\\u042D',\n\tecy: '\\u044D',\n\teDDot: '\\u2A77',\n\tEdot: '\\u0116',\n\teDot: '\\u2251',\n\tedot: '\\u0117',\n\tee: '\\u2147',\n\tefDot: '\\u2252',\n\tEfr: '\\uD835\\uDD08',\n\tefr: '\\uD835\\uDD22',\n\teg: '\\u2A9A',\n\tEgrave: '\\u00C8',\n\tegrave: '\\u00E8',\n\tegs: '\\u2A96',\n\tegsdot: '\\u2A98',\n\tel: '\\u2A99',\n\tElement: '\\u2208',\n\telinters: '\\u23E7',\n\tell: '\\u2113',\n\tels: '\\u2A95',\n\telsdot: '\\u2A97',\n\tEmacr: '\\u0112',\n\temacr: '\\u0113',\n\tempty: '\\u2205',\n\temptyset: '\\u2205',\n\tEmptySmallSquare: '\\u25FB',\n\temptyv: '\\u2205',\n\tEmptyVerySmallSquare: '\\u25AB',\n\temsp: '\\u2003',\n\temsp13: '\\u2004',\n\temsp14: '\\u2005',\n\tENG: '\\u014A',\n\teng: '\\u014B',\n\tensp: '\\u2002',\n\tEogon: '\\u0118',\n\teogon: '\\u0119',\n\tEopf: '\\uD835\\uDD3C',\n\teopf: '\\uD835\\uDD56',\n\tepar: '\\u22D5',\n\teparsl: '\\u29E3',\n\teplus: '\\u2A71',\n\tepsi: '\\u03B5',\n\tEpsilon: '\\u0395',\n\tepsilon: '\\u03B5',\n\tepsiv: '\\u03F5',\n\teqcirc: '\\u2256',\n\teqcolon: '\\u2255',\n\teqsim: '\\u2242',\n\teqslantgtr: '\\u2A96',\n\teqslantless: '\\u2A95',\n\tEqual: '\\u2A75',\n\tequals: '\\u003D',\n\tEqualTilde: '\\u2242',\n\tequest: '\\u225F',\n\tEquilibrium: '\\u21CC',\n\tequiv: '\\u2261',\n\tequivDD: '\\u2A78',\n\teqvparsl: '\\u29E5',\n\terarr: '\\u2971',\n\terDot: '\\u2253',\n\tEscr: '\\u2130',\n\tescr: '\\u212F',\n\tesdot: '\\u2250',\n\tEsim: '\\u2A73',\n\tesim: '\\u2242',\n\tEta: '\\u0397',\n\teta: '\\u03B7',\n\tETH: '\\u00D0',\n\teth: '\\u00F0',\n\tEuml: '\\u00CB',\n\teuml: '\\u00EB',\n\teuro: '\\u20AC',\n\texcl: '\\u0021',\n\texist: '\\u2203',\n\tExists: '\\u2203',\n\texpectation: '\\u2130',\n\tExponentialE: '\\u2147',\n\texponentiale: '\\u2147',\n\tfallingdotseq: '\\u2252',\n\tFcy: '\\u0424',\n\tfcy: '\\u0444',\n\tfemale: '\\u2640',\n\tffilig: '\\uFB03',\n\tfflig: '\\uFB00',\n\tffllig: '\\uFB04',\n\tFfr: '\\uD835\\uDD09',\n\tffr: '\\uD835\\uDD23',\n\tfilig: '\\uFB01',\n\tFilledSmallSquare: '\\u25FC',\n\tFilledVerySmallSquare: '\\u25AA',\n\tfjlig: '\\u0066\\u006A',\n\tflat: '\\u266D',\n\tfllig: '\\uFB02',\n\tfltns: '\\u25B1',\n\tfnof: '\\u0192',\n\tFopf: '\\uD835\\uDD3D',\n\tfopf: '\\uD835\\uDD57',\n\tForAll: '\\u2200',\n\tforall: '\\u2200',\n\tfork: '\\u22D4',\n\tforkv: '\\u2AD9',\n\tFouriertrf: '\\u2131',\n\tfpartint: '\\u2A0D',\n\tfrac12: '\\u00BD',\n\tfrac13: '\\u2153',\n\tfrac14: '\\u00BC',\n\tfrac15: '\\u2155',\n\tfrac16: '\\u2159',\n\tfrac18: '\\u215B',\n\tfrac23: '\\u2154',\n\tfrac25: '\\u2156',\n\tfrac34: '\\u00BE',\n\tfrac35: '\\u2157',\n\tfrac38: '\\u215C',\n\tfrac45: '\\u2158',\n\tfrac56: '\\u215A',\n\tfrac58: '\\u215D',\n\tfrac78: '\\u215E',\n\tfrasl: '\\u2044',\n\tfrown: '\\u2322',\n\tFscr: '\\u2131',\n\tfscr: '\\uD835\\uDCBB',\n\tgacute: '\\u01F5',\n\tGamma: '\\u0393',\n\tgamma: '\\u03B3',\n\tGammad: '\\u03DC',\n\tgammad: '\\u03DD',\n\tgap: '\\u2A86',\n\tGbreve: '\\u011E',\n\tgbreve: '\\u011F',\n\tGcedil: '\\u0122',\n\tGcirc: '\\u011C',\n\tgcirc: '\\u011D',\n\tGcy: '\\u0413',\n\tgcy: '\\u0433',\n\tGdot: '\\u0120',\n\tgdot: '\\u0121',\n\tgE: '\\u2267',\n\tge: '\\u2265',\n\tgEl: '\\u2A8C',\n\tgel: '\\u22DB',\n\tgeq: '\\u2265',\n\tgeqq: '\\u2267',\n\tgeqslant: '\\u2A7E',\n\tges: '\\u2A7E',\n\tgescc: '\\u2AA9',\n\tgesdot: '\\u2A80',\n\tgesdoto: '\\u2A82',\n\tgesdotol: '\\u2A84',\n\tgesl: '\\u22DB\\uFE00',\n\tgesles: '\\u2A94',\n\tGfr: '\\uD835\\uDD0A',\n\tgfr: '\\uD835\\uDD24',\n\tGg: '\\u22D9',\n\tgg: '\\u226B',\n\tggg: '\\u22D9',\n\tgimel: '\\u2137',\n\tGJcy: '\\u0403',\n\tgjcy: '\\u0453',\n\tgl: '\\u2277',\n\tgla: '\\u2AA5',\n\tglE: '\\u2A92',\n\tglj: '\\u2AA4',\n\tgnap: '\\u2A8A',\n\tgnapprox: '\\u2A8A',\n\tgnE: '\\u2269',\n\tgne: '\\u2A88',\n\tgneq: '\\u2A88',\n\tgneqq: '\\u2269',\n\tgnsim: '\\u22E7',\n\tGopf: '\\uD835\\uDD3E',\n\tgopf: '\\uD835\\uDD58',\n\tgrave: '\\u0060',\n\tGreaterEqual: '\\u2265',\n\tGreaterEqualLess: '\\u22DB',\n\tGreaterFullEqual: '\\u2267',\n\tGreaterGreater: '\\u2AA2',\n\tGreaterLess: '\\u2277',\n\tGreaterSlantEqual: '\\u2A7E',\n\tGreaterTilde: '\\u2273',\n\tGscr: '\\uD835\\uDCA2',\n\tgscr: '\\u210A',\n\tgsim: '\\u2273',\n\tgsime: '\\u2A8E',\n\tgsiml: '\\u2A90',\n\tGt: '\\u226B',\n\tGT: '\\u003E',\n\tgt: '\\u003E',\n\tgtcc: '\\u2AA7',\n\tgtcir: '\\u2A7A',\n\tgtdot: '\\u22D7',\n\tgtlPar: '\\u2995',\n\tgtquest: '\\u2A7C',\n\tgtrapprox: '\\u2A86',\n\tgtrarr: '\\u2978',\n\tgtrdot: '\\u22D7',\n\tgtreqless: '\\u22DB',\n\tgtreqqless: '\\u2A8C',\n\tgtrless: '\\u2277',\n\tgtrsim: '\\u2273',\n\tgvertneqq: '\\u2269\\uFE00',\n\tgvnE: '\\u2269\\uFE00',\n\tHacek: '\\u02C7',\n\thairsp: '\\u200A',\n\thalf: '\\u00BD',\n\thamilt: '\\u210B',\n\tHARDcy: '\\u042A',\n\thardcy: '\\u044A',\n\thArr: '\\u21D4',\n\tharr: '\\u2194',\n\tharrcir: '\\u2948',\n\tharrw: '\\u21AD',\n\tHat: '\\u005E',\n\thbar: '\\u210F',\n\tHcirc: '\\u0124',\n\thcirc: '\\u0125',\n\thearts: '\\u2665',\n\theartsuit: '\\u2665',\n\thellip: '\\u2026',\n\thercon: '\\u22B9',\n\tHfr: '\\u210C',\n\thfr: '\\uD835\\uDD25',\n\tHilbertSpace: '\\u210B',\n\thksearow: '\\u2925',\n\thkswarow: '\\u2926',\n\thoarr: '\\u21FF',\n\thomtht: '\\u223B',\n\thookleftarrow: '\\u21A9',\n\thookrightarrow: '\\u21AA',\n\tHopf: '\\u210D',\n\thopf: '\\uD835\\uDD59',\n\thorbar: '\\u2015',\n\tHorizontalLine: '\\u2500',\n\tHscr: '\\u210B',\n\thscr: '\\uD835\\uDCBD',\n\thslash: '\\u210F',\n\tHstrok: '\\u0126',\n\thstrok: '\\u0127',\n\tHumpDownHump: '\\u224E',\n\tHumpEqual: '\\u224F',\n\thybull: '\\u2043',\n\thyphen: '\\u2010',\n\tIacute: '\\u00CD',\n\tiacute: '\\u00ED',\n\tic: '\\u2063',\n\tIcirc: '\\u00CE',\n\ticirc: '\\u00EE',\n\tIcy: '\\u0418',\n\ticy: '\\u0438',\n\tIdot: '\\u0130',\n\tIEcy: '\\u0415',\n\tiecy: '\\u0435',\n\tiexcl: '\\u00A1',\n\tiff: '\\u21D4',\n\tIfr: '\\u2111',\n\tifr: '\\uD835\\uDD26',\n\tIgrave: '\\u00CC',\n\tigrave: '\\u00EC',\n\tii: '\\u2148',\n\tiiiint: '\\u2A0C',\n\tiiint: '\\u222D',\n\tiinfin: '\\u29DC',\n\tiiota: '\\u2129',\n\tIJlig: '\\u0132',\n\tijlig: '\\u0133',\n\tIm: '\\u2111',\n\tImacr: '\\u012A',\n\timacr: '\\u012B',\n\timage: '\\u2111',\n\tImaginaryI: '\\u2148',\n\timagline: '\\u2110',\n\timagpart: '\\u2111',\n\timath: '\\u0131',\n\timof: '\\u22B7',\n\timped: '\\u01B5',\n\tImplies: '\\u21D2',\n\tin: '\\u2208',\n\tincare: '\\u2105',\n\tinfin: '\\u221E',\n\tinfintie: '\\u29DD',\n\tinodot: '\\u0131',\n\tInt: '\\u222C',\n\tint: '\\u222B',\n\tintcal: '\\u22BA',\n\tintegers: '\\u2124',\n\tIntegral: '\\u222B',\n\tintercal: '\\u22BA',\n\tIntersection: '\\u22C2',\n\tintlarhk: '\\u2A17',\n\tintprod: '\\u2A3C',\n\tInvisibleComma: '\\u2063',\n\tInvisibleTimes: '\\u2062',\n\tIOcy: '\\u0401',\n\tiocy: '\\u0451',\n\tIogon: '\\u012E',\n\tiogon: '\\u012F',\n\tIopf: '\\uD835\\uDD40',\n\tiopf: '\\uD835\\uDD5A',\n\tIota: '\\u0399',\n\tiota: '\\u03B9',\n\tiprod: '\\u2A3C',\n\tiquest: '\\u00BF',\n\tIscr: '\\u2110',\n\tiscr: '\\uD835\\uDCBE',\n\tisin: '\\u2208',\n\tisindot: '\\u22F5',\n\tisinE: '\\u22F9',\n\tisins: '\\u22F4',\n\tisinsv: '\\u22F3',\n\tisinv: '\\u2208',\n\tit: '\\u2062',\n\tItilde: '\\u0128',\n\titilde: '\\u0129',\n\tIukcy: '\\u0406',\n\tiukcy: '\\u0456',\n\tIuml: '\\u00CF',\n\tiuml: '\\u00EF',\n\tJcirc: '\\u0134',\n\tjcirc: '\\u0135',\n\tJcy: '\\u0419',\n\tjcy: '\\u0439',\n\tJfr: '\\uD835\\uDD0D',\n\tjfr: '\\uD835\\uDD27',\n\tjmath: '\\u0237',\n\tJopf: '\\uD835\\uDD41',\n\tjopf: '\\uD835\\uDD5B',\n\tJscr: '\\uD835\\uDCA5',\n\tjscr: '\\uD835\\uDCBF',\n\tJsercy: '\\u0408',\n\tjsercy: '\\u0458',\n\tJukcy: '\\u0404',\n\tjukcy: '\\u0454',\n\tKappa: '\\u039A',\n\tkappa: '\\u03BA',\n\tkappav: '\\u03F0',\n\tKcedil: '\\u0136',\n\tkcedil: '\\u0137',\n\tKcy: '\\u041A',\n\tkcy: '\\u043A',\n\tKfr: '\\uD835\\uDD0E',\n\tkfr: '\\uD835\\uDD28',\n\tkgreen: '\\u0138',\n\tKHcy: '\\u0425',\n\tkhcy: '\\u0445',\n\tKJcy: '\\u040C',\n\tkjcy: '\\u045C',\n\tKopf: '\\uD835\\uDD42',\n\tkopf: '\\uD835\\uDD5C',\n\tKscr: '\\uD835\\uDCA6',\n\tkscr: '\\uD835\\uDCC0',\n\tlAarr: '\\u21DA',\n\tLacute: '\\u0139',\n\tlacute: '\\u013A',\n\tlaemptyv: '\\u29B4',\n\tlagran: '\\u2112',\n\tLambda: '\\u039B',\n\tlambda: '\\u03BB',\n\tLang: '\\u27EA',\n\tlang: '\\u27E8',\n\tlangd: '\\u2991',\n\tlangle: '\\u27E8',\n\tlap: '\\u2A85',\n\tLaplacetrf: '\\u2112',\n\tlaquo: '\\u00AB',\n\tLarr: '\\u219E',\n\tlArr: '\\u21D0',\n\tlarr: '\\u2190',\n\tlarrb: '\\u21E4',\n\tlarrbfs: '\\u291F',\n\tlarrfs: '\\u291D',\n\tlarrhk: '\\u21A9',\n\tlarrlp: '\\u21AB',\n\tlarrpl: '\\u2939',\n\tlarrsim: '\\u2973',\n\tlarrtl: '\\u21A2',\n\tlat: '\\u2AAB',\n\tlAtail: '\\u291B',\n\tlatail: '\\u2919',\n\tlate: '\\u2AAD',\n\tlates: '\\u2AAD\\uFE00',\n\tlBarr: '\\u290E',\n\tlbarr: '\\u290C',\n\tlbbrk: '\\u2772',\n\tlbrace: '\\u007B',\n\tlbrack: '\\u005B',\n\tlbrke: '\\u298B',\n\tlbrksld: '\\u298F',\n\tlbrkslu: '\\u298D',\n\tLcaron: '\\u013D',\n\tlcaron: '\\u013E',\n\tLcedil: '\\u013B',\n\tlcedil: '\\u013C',\n\tlceil: '\\u2308',\n\tlcub: '\\u007B',\n\tLcy: '\\u041B',\n\tlcy: '\\u043B',\n\tldca: '\\u2936',\n\tldquo: '\\u201C',\n\tldquor: '\\u201E',\n\tldrdhar: '\\u2967',\n\tldrushar: '\\u294B',\n\tldsh: '\\u21B2',\n\tlE: '\\u2266',\n\tle: '\\u2264',\n\tLeftAngleBracket: '\\u27E8',\n\tLeftArrow: '\\u2190',\n\tLeftarrow: '\\u21D0',\n\tleftarrow: '\\u2190',\n\tLeftArrowBar: '\\u21E4',\n\tLeftArrowRightArrow: '\\u21C6',\n\tleftarrowtail: '\\u21A2',\n\tLeftCeiling: '\\u2308',\n\tLeftDoubleBracket: '\\u27E6',\n\tLeftDownTeeVector: '\\u2961',\n\tLeftDownVector: '\\u21C3',\n\tLeftDownVectorBar: '\\u2959',\n\tLeftFloor: '\\u230A',\n\tleftharpoondown: '\\u21BD',\n\tleftharpoonup: '\\u21BC',\n\tleftleftarrows: '\\u21C7',\n\tLeftRightArrow: '\\u2194',\n\tLeftrightarrow: '\\u21D4',\n\tleftrightarrow: '\\u2194',\n\tleftrightarrows: '\\u21C6',\n\tleftrightharpoons: '\\u21CB',\n\tleftrightsquigarrow: '\\u21AD',\n\tLeftRightVector: '\\u294E',\n\tLeftTee: '\\u22A3',\n\tLeftTeeArrow: '\\u21A4',\n\tLeftTeeVector: '\\u295A',\n\tleftthreetimes: '\\u22CB',\n\tLeftTriangle: '\\u22B2',\n\tLeftTriangleBar: '\\u29CF',\n\tLeftTriangleEqual: '\\u22B4',\n\tLeftUpDownVector: '\\u2951',\n\tLeftUpTeeVector: '\\u2960',\n\tLeftUpVector: '\\u21BF',\n\tLeftUpVectorBar: '\\u2958',\n\tLeftVector: '\\u21BC',\n\tLeftVectorBar: '\\u2952',\n\tlEg: '\\u2A8B',\n\tleg: '\\u22DA',\n\tleq: '\\u2264',\n\tleqq: '\\u2266',\n\tleqslant: '\\u2A7D',\n\tles: '\\u2A7D',\n\tlescc: '\\u2AA8',\n\tlesdot: '\\u2A7F',\n\tlesdoto: '\\u2A81',\n\tlesdotor: '\\u2A83',\n\tlesg: '\\u22DA\\uFE00',\n\tlesges: '\\u2A93',\n\tlessapprox: '\\u2A85',\n\tlessdot: '\\u22D6',\n\tlesseqgtr: '\\u22DA',\n\tlesseqqgtr: '\\u2A8B',\n\tLessEqualGreater: '\\u22DA',\n\tLessFullEqual: '\\u2266',\n\tLessGreater: '\\u2276',\n\tlessgtr: '\\u2276',\n\tLessLess: '\\u2AA1',\n\tlesssim: '\\u2272',\n\tLessSlantEqual: '\\u2A7D',\n\tLessTilde: '\\u2272',\n\tlfisht: '\\u297C',\n\tlfloor: '\\u230A',\n\tLfr: '\\uD835\\uDD0F',\n\tlfr: '\\uD835\\uDD29',\n\tlg: '\\u2276',\n\tlgE: '\\u2A91',\n\tlHar: '\\u2962',\n\tlhard: '\\u21BD',\n\tlharu: '\\u21BC',\n\tlharul: '\\u296A',\n\tlhblk: '\\u2584',\n\tLJcy: '\\u0409',\n\tljcy: '\\u0459',\n\tLl: '\\u22D8',\n\tll: '\\u226A',\n\tllarr: '\\u21C7',\n\tllcorner: '\\u231E',\n\tLleftarrow: '\\u21DA',\n\tllhard: '\\u296B',\n\tlltri: '\\u25FA',\n\tLmidot: '\\u013F',\n\tlmidot: '\\u0140',\n\tlmoust: '\\u23B0',\n\tlmoustache: '\\u23B0',\n\tlnap: '\\u2A89',\n\tlnapprox: '\\u2A89',\n\tlnE: '\\u2268',\n\tlne: '\\u2A87',\n\tlneq: '\\u2A87',\n\tlneqq: '\\u2268',\n\tlnsim: '\\u22E6',\n\tloang: '\\u27EC',\n\tloarr: '\\u21FD',\n\tlobrk: '\\u27E6',\n\tLongLeftArrow: '\\u27F5',\n\tLongleftarrow: '\\u27F8',\n\tlongleftarrow: '\\u27F5',\n\tLongLeftRightArrow: '\\u27F7',\n\tLongleftrightarrow: '\\u27FA',\n\tlongleftrightarrow: '\\u27F7',\n\tlongmapsto: '\\u27FC',\n\tLongRightArrow: '\\u27F6',\n\tLongrightarrow: '\\u27F9',\n\tlongrightarrow: '\\u27F6',\n\tlooparrowleft: '\\u21AB',\n\tlooparrowright: '\\u21AC',\n\tlopar: '\\u2985',\n\tLopf: '\\uD835\\uDD43',\n\tlopf: '\\uD835\\uDD5D',\n\tloplus: '\\u2A2D',\n\tlotimes: '\\u2A34',\n\tlowast: '\\u2217',\n\tlowbar: '\\u005F',\n\tLowerLeftArrow: '\\u2199',\n\tLowerRightArrow: '\\u2198',\n\tloz: '\\u25CA',\n\tlozenge: '\\u25CA',\n\tlozf: '\\u29EB',\n\tlpar: '\\u0028',\n\tlparlt: '\\u2993',\n\tlrarr: '\\u21C6',\n\tlrcorner: '\\u231F',\n\tlrhar: '\\u21CB',\n\tlrhard: '\\u296D',\n\tlrm: '\\u200E',\n\tlrtri: '\\u22BF',\n\tlsaquo: '\\u2039',\n\tLscr: '\\u2112',\n\tlscr: '\\uD835\\uDCC1',\n\tLsh: '\\u21B0',\n\tlsh: '\\u21B0',\n\tlsim: '\\u2272',\n\tlsime: '\\u2A8D',\n\tlsimg: '\\u2A8F',\n\tlsqb: '\\u005B',\n\tlsquo: '\\u2018',\n\tlsquor: '\\u201A',\n\tLstrok: '\\u0141',\n\tlstrok: '\\u0142',\n\tLt: '\\u226A',\n\tLT: '\\u003C',\n\tlt: '\\u003C',\n\tltcc: '\\u2AA6',\n\tltcir: '\\u2A79',\n\tltdot: '\\u22D6',\n\tlthree: '\\u22CB',\n\tltimes: '\\u22C9',\n\tltlarr: '\\u2976',\n\tltquest: '\\u2A7B',\n\tltri: '\\u25C3',\n\tltrie: '\\u22B4',\n\tltrif: '\\u25C2',\n\tltrPar: '\\u2996',\n\tlurdshar: '\\u294A',\n\tluruhar: '\\u2966',\n\tlvertneqq: '\\u2268\\uFE00',\n\tlvnE: '\\u2268\\uFE00',\n\tmacr: '\\u00AF',\n\tmale: '\\u2642',\n\tmalt: '\\u2720',\n\tmaltese: '\\u2720',\n\tMap: '\\u2905',\n\tmap: '\\u21A6',\n\tmapsto: '\\u21A6',\n\tmapstodown: '\\u21A7',\n\tmapstoleft: '\\u21A4',\n\tmapstoup: '\\u21A5',\n\tmarker: '\\u25AE',\n\tmcomma: '\\u2A29',\n\tMcy: '\\u041C',\n\tmcy: '\\u043C',\n\tmdash: '\\u2014',\n\tmDDot: '\\u223A',\n\tmeasuredangle: '\\u2221',\n\tMediumSpace: '\\u205F',\n\tMellintrf: '\\u2133',\n\tMfr: '\\uD835\\uDD10',\n\tmfr: '\\uD835\\uDD2A',\n\tmho: '\\u2127',\n\tmicro: '\\u00B5',\n\tmid: '\\u2223',\n\tmidast: '\\u002A',\n\tmidcir: '\\u2AF0',\n\tmiddot: '\\u00B7',\n\tminus: '\\u2212',\n\tminusb: '\\u229F',\n\tminusd: '\\u2238',\n\tminusdu: '\\u2A2A',\n\tMinusPlus: '\\u2213',\n\tmlcp: '\\u2ADB',\n\tmldr: '\\u2026',\n\tmnplus: '\\u2213',\n\tmodels: '\\u22A7',\n\tMopf: '\\uD835\\uDD44',\n\tmopf: '\\uD835\\uDD5E',\n\tmp: '\\u2213',\n\tMscr: '\\u2133',\n\tmscr: '\\uD835\\uDCC2',\n\tmstpos: '\\u223E',\n\tMu: '\\u039C',\n\tmu: '\\u03BC',\n\tmultimap: '\\u22B8',\n\tmumap: '\\u22B8',\n\tnabla: '\\u2207',\n\tNacute: '\\u0143',\n\tnacute: '\\u0144',\n\tnang: '\\u2220\\u20D2',\n\tnap: '\\u2249',\n\tnapE: '\\u2A70\\u0338',\n\tnapid: '\\u224B\\u0338',\n\tnapos: '\\u0149',\n\tnapprox: '\\u2249',\n\tnatur: '\\u266E',\n\tnatural: '\\u266E',\n\tnaturals: '\\u2115',\n\tnbsp: '\\u00A0',\n\tnbump: '\\u224E\\u0338',\n\tnbumpe: '\\u224F\\u0338',\n\tncap: '\\u2A43',\n\tNcaron: '\\u0147',\n\tncaron: '\\u0148',\n\tNcedil: '\\u0145',\n\tncedil: '\\u0146',\n\tncong: '\\u2247',\n\tncongdot: '\\u2A6D\\u0338',\n\tncup: '\\u2A42',\n\tNcy: '\\u041D',\n\tncy: '\\u043D',\n\tndash: '\\u2013',\n\tne: '\\u2260',\n\tnearhk: '\\u2924',\n\tneArr: '\\u21D7',\n\tnearr: '\\u2197',\n\tnearrow: '\\u2197',\n\tnedot: '\\u2250\\u0338',\n\tNegativeMediumSpace: '\\u200B',\n\tNegativeThickSpace: '\\u200B',\n\tNegativeThinSpace: '\\u200B',\n\tNegativeVeryThinSpace: '\\u200B',\n\tnequiv: '\\u2262',\n\tnesear: '\\u2928',\n\tnesim: '\\u2242\\u0338',\n\tNestedGreaterGreater: '\\u226B',\n\tNestedLessLess: '\\u226A',\n\tNewLine: '\\u000A',\n\tnexist: '\\u2204',\n\tnexists: '\\u2204',\n\tNfr: '\\uD835\\uDD11',\n\tnfr: '\\uD835\\uDD2B',\n\tngE: '\\u2267\\u0338',\n\tnge: '\\u2271',\n\tngeq: '\\u2271',\n\tngeqq: '\\u2267\\u0338',\n\tngeqslant: '\\u2A7E\\u0338',\n\tnges: '\\u2A7E\\u0338',\n\tnGg: '\\u22D9\\u0338',\n\tngsim: '\\u2275',\n\tnGt: '\\u226B\\u20D2',\n\tngt: '\\u226F',\n\tngtr: '\\u226F',\n\tnGtv: '\\u226B\\u0338',\n\tnhArr: '\\u21CE',\n\tnharr: '\\u21AE',\n\tnhpar: '\\u2AF2',\n\tni: '\\u220B',\n\tnis: '\\u22FC',\n\tnisd: '\\u22FA',\n\tniv: '\\u220B',\n\tNJcy: '\\u040A',\n\tnjcy: '\\u045A',\n\tnlArr: '\\u21CD',\n\tnlarr: '\\u219A',\n\tnldr: '\\u2025',\n\tnlE: '\\u2266\\u0338',\n\tnle: '\\u2270',\n\tnLeftarrow: '\\u21CD',\n\tnleftarrow: '\\u219A',\n\tnLeftrightarrow: '\\u21CE',\n\tnleftrightarrow: '\\u21AE',\n\tnleq: '\\u2270',\n\tnleqq: '\\u2266\\u0338',\n\tnleqslant: '\\u2A7D\\u0338',\n\tnles: '\\u2A7D\\u0338',\n\tnless: '\\u226E',\n\tnLl: '\\u22D8\\u0338',\n\tnlsim: '\\u2274',\n\tnLt: '\\u226A\\u20D2',\n\tnlt: '\\u226E',\n\tnltri: '\\u22EA',\n\tnltrie: '\\u22EC',\n\tnLtv: '\\u226A\\u0338',\n\tnmid: '\\u2224',\n\tNoBreak: '\\u2060',\n\tNonBreakingSpace: '\\u00A0',\n\tNopf: '\\u2115',\n\tnopf: '\\uD835\\uDD5F',\n\tNot: '\\u2AEC',\n\tnot: '\\u00AC',\n\tNotCongruent: '\\u2262',\n\tNotCupCap: '\\u226D',\n\tNotDoubleVerticalBar: '\\u2226',\n\tNotElement: '\\u2209',\n\tNotEqual: '\\u2260',\n\tNotEqualTilde: '\\u2242\\u0338',\n\tNotExists: '\\u2204',\n\tNotGreater: '\\u226F',\n\tNotGreaterEqual: '\\u2271',\n\tNotGreaterFullEqual: '\\u2267\\u0338',\n\tNotGreaterGreater: '\\u226B\\u0338',\n\tNotGreaterLess: '\\u2279',\n\tNotGreaterSlantEqual: '\\u2A7E\\u0338',\n\tNotGreaterTilde: '\\u2275',\n\tNotHumpDownHump: '\\u224E\\u0338',\n\tNotHumpEqual: '\\u224F\\u0338',\n\tnotin: '\\u2209',\n\tnotindot: '\\u22F5\\u0338',\n\tnotinE: '\\u22F9\\u0338',\n\tnotinva: '\\u2209',\n\tnotinvb: '\\u22F7',\n\tnotinvc: '\\u22F6',\n\tNotLeftTriangle: '\\u22EA',\n\tNotLeftTriangleBar: '\\u29CF\\u0338',\n\tNotLeftTriangleEqual: '\\u22EC',\n\tNotLess: '\\u226E',\n\tNotLessEqual: '\\u2270',\n\tNotLessGreater: '\\u2278',\n\tNotLessLess: '\\u226A\\u0338',\n\tNotLessSlantEqual: '\\u2A7D\\u0338',\n\tNotLessTilde: '\\u2274',\n\tNotNestedGreaterGreater: '\\u2AA2\\u0338',\n\tNotNestedLessLess: '\\u2AA1\\u0338',\n\tnotni: '\\u220C',\n\tnotniva: '\\u220C',\n\tnotnivb: '\\u22FE',\n\tnotnivc: '\\u22FD',\n\tNotPrecedes: '\\u2280',\n\tNotPrecedesEqual: '\\u2AAF\\u0338',\n\tNotPrecedesSlantEqual: '\\u22E0',\n\tNotReverseElement: '\\u220C',\n\tNotRightTriangle: '\\u22EB',\n\tNotRightTriangleBar: '\\u29D0\\u0338',\n\tNotRightTriangleEqual: '\\u22ED',\n\tNotSquareSubset: '\\u228F\\u0338',\n\tNotSquareSubsetEqual: '\\u22E2',\n\tNotSquareSuperset: '\\u2290\\u0338',\n\tNotSquareSupersetEqual: '\\u22E3',\n\tNotSubset: '\\u2282\\u20D2',\n\tNotSubsetEqual: '\\u2288',\n\tNotSucceeds: '\\u2281',\n\tNotSucceedsEqual: '\\u2AB0\\u0338',\n\tNotSucceedsSlantEqual: '\\u22E1',\n\tNotSucceedsTilde: '\\u227F\\u0338',\n\tNotSuperset: '\\u2283\\u20D2',\n\tNotSupersetEqual: '\\u2289',\n\tNotTilde: '\\u2241',\n\tNotTildeEqual: '\\u2244',\n\tNotTildeFullEqual: '\\u2247',\n\tNotTildeTilde: '\\u2249',\n\tNotVerticalBar: '\\u2224',\n\tnpar: '\\u2226',\n\tnparallel: '\\u2226',\n\tnparsl: '\\u2AFD\\u20E5',\n\tnpart: '\\u2202\\u0338',\n\tnpolint: '\\u2A14',\n\tnpr: '\\u2280',\n\tnprcue: '\\u22E0',\n\tnpre: '\\u2AAF\\u0338',\n\tnprec: '\\u2280',\n\tnpreceq: '\\u2AAF\\u0338',\n\tnrArr: '\\u21CF',\n\tnrarr: '\\u219B',\n\tnrarrc: '\\u2933\\u0338',\n\tnrarrw: '\\u219D\\u0338',\n\tnRightarrow: '\\u21CF',\n\tnrightarrow: '\\u219B',\n\tnrtri: '\\u22EB',\n\tnrtrie: '\\u22ED',\n\tnsc: '\\u2281',\n\tnsccue: '\\u22E1',\n\tnsce: '\\u2AB0\\u0338',\n\tNscr: '\\uD835\\uDCA9',\n\tnscr: '\\uD835\\uDCC3',\n\tnshortmid: '\\u2224',\n\tnshortparallel: '\\u2226',\n\tnsim: '\\u2241',\n\tnsime: '\\u2244',\n\tnsimeq: '\\u2244',\n\tnsmid: '\\u2224',\n\tnspar: '\\u2226',\n\tnsqsube: '\\u22E2',\n\tnsqsupe: '\\u22E3',\n\tnsub: '\\u2284',\n\tnsubE: '\\u2AC5\\u0338',\n\tnsube: '\\u2288',\n\tnsubset: '\\u2282\\u20D2',\n\tnsubseteq: '\\u2288',\n\tnsubseteqq: '\\u2AC5\\u0338',\n\tnsucc: '\\u2281',\n\tnsucceq: '\\u2AB0\\u0338',\n\tnsup: '\\u2285',\n\tnsupE: '\\u2AC6\\u0338',\n\tnsupe: '\\u2289',\n\tnsupset: '\\u2283\\u20D2',\n\tnsupseteq: '\\u2289',\n\tnsupseteqq: '\\u2AC6\\u0338',\n\tntgl: '\\u2279',\n\tNtilde: '\\u00D1',\n\tntilde: '\\u00F1',\n\tntlg: '\\u2278',\n\tntriangleleft: '\\u22EA',\n\tntrianglelefteq: '\\u22EC',\n\tntriangleright: '\\u22EB',\n\tntrianglerighteq: '\\u22ED',\n\tNu: '\\u039D',\n\tnu: '\\u03BD',\n\tnum: '\\u0023',\n\tnumero: '\\u2116',\n\tnumsp: '\\u2007',\n\tnvap: '\\u224D\\u20D2',\n\tnVDash: '\\u22AF',\n\tnVdash: '\\u22AE',\n\tnvDash: '\\u22AD',\n\tnvdash: '\\u22AC',\n\tnvge: '\\u2265\\u20D2',\n\tnvgt: '\\u003E\\u20D2',\n\tnvHarr: '\\u2904',\n\tnvinfin: '\\u29DE',\n\tnvlArr: '\\u2902',\n\tnvle: '\\u2264\\u20D2',\n\tnvlt: '\\u003C\\u20D2',\n\tnvltrie: '\\u22B4\\u20D2',\n\tnvrArr: '\\u2903',\n\tnvrtrie: '\\u22B5\\u20D2',\n\tnvsim: '\\u223C\\u20D2',\n\tnwarhk: '\\u2923',\n\tnwArr: '\\u21D6',\n\tnwarr: '\\u2196',\n\tnwarrow: '\\u2196',\n\tnwnear: '\\u2927',\n\tOacute: '\\u00D3',\n\toacute: '\\u00F3',\n\toast: '\\u229B',\n\tocir: '\\u229A',\n\tOcirc: '\\u00D4',\n\tocirc: '\\u00F4',\n\tOcy: '\\u041E',\n\tocy: '\\u043E',\n\todash: '\\u229D',\n\tOdblac: '\\u0150',\n\todblac: '\\u0151',\n\todiv: '\\u2A38',\n\todot: '\\u2299',\n\todsold: '\\u29BC',\n\tOElig: '\\u0152',\n\toelig: '\\u0153',\n\tofcir: '\\u29BF',\n\tOfr: '\\uD835\\uDD12',\n\tofr: '\\uD835\\uDD2C',\n\togon: '\\u02DB',\n\tOgrave: '\\u00D2',\n\tograve: '\\u00F2',\n\togt: '\\u29C1',\n\tohbar: '\\u29B5',\n\tohm: '\\u03A9',\n\toint: '\\u222E',\n\tolarr: '\\u21BA',\n\tolcir: '\\u29BE',\n\tolcross: '\\u29BB',\n\toline: '\\u203E',\n\tolt: '\\u29C0',\n\tOmacr: '\\u014C',\n\tomacr: '\\u014D',\n\tOmega: '\\u03A9',\n\tomega: '\\u03C9',\n\tOmicron: '\\u039F',\n\tomicron: '\\u03BF',\n\tomid: '\\u29B6',\n\tominus: '\\u2296',\n\tOopf: '\\uD835\\uDD46',\n\toopf: '\\uD835\\uDD60',\n\topar: '\\u29B7',\n\tOpenCurlyDoubleQuote: '\\u201C',\n\tOpenCurlyQuote: '\\u2018',\n\toperp: '\\u29B9',\n\toplus: '\\u2295',\n\tOr: '\\u2A54',\n\tor: '\\u2228',\n\torarr: '\\u21BB',\n\tord: '\\u2A5D',\n\torder: '\\u2134',\n\torderof: '\\u2134',\n\tordf: '\\u00AA',\n\tordm: '\\u00BA',\n\torigof: '\\u22B6',\n\toror: '\\u2A56',\n\torslope: '\\u2A57',\n\torv: '\\u2A5B',\n\toS: '\\u24C8',\n\tOscr: '\\uD835\\uDCAA',\n\toscr: '\\u2134',\n\tOslash: '\\u00D8',\n\toslash: '\\u00F8',\n\tosol: '\\u2298',\n\tOtilde: '\\u00D5',\n\totilde: '\\u00F5',\n\tOtimes: '\\u2A37',\n\totimes: '\\u2297',\n\totimesas: '\\u2A36',\n\tOuml: '\\u00D6',\n\touml: '\\u00F6',\n\tovbar: '\\u233D',\n\tOverBar: '\\u203E',\n\tOverBrace: '\\u23DE',\n\tOverBracket: '\\u23B4',\n\tOverParenthesis: '\\u23DC',\n\tpar: '\\u2225',\n\tpara: '\\u00B6',\n\tparallel: '\\u2225',\n\tparsim: '\\u2AF3',\n\tparsl: '\\u2AFD',\n\tpart: '\\u2202',\n\tPartialD: '\\u2202',\n\tPcy: '\\u041F',\n\tpcy: '\\u043F',\n\tpercnt: '\\u0025',\n\tperiod: '\\u002E',\n\tpermil: '\\u2030',\n\tperp: '\\u22A5',\n\tpertenk: '\\u2031',\n\tPfr: '\\uD835\\uDD13',\n\tpfr: '\\uD835\\uDD2D',\n\tPhi: '\\u03A6',\n\tphi: '\\u03C6',\n\tphiv: '\\u03D5',\n\tphmmat: '\\u2133',\n\tphone: '\\u260E',\n\tPi: '\\u03A0',\n\tpi: '\\u03C0',\n\tpitchfork: '\\u22D4',\n\tpiv: '\\u03D6',\n\tplanck: '\\u210F',\n\tplanckh: '\\u210E',\n\tplankv: '\\u210F',\n\tplus: '\\u002B',\n\tplusacir: '\\u2A23',\n\tplusb: '\\u229E',\n\tpluscir: '\\u2A22',\n\tplusdo: '\\u2214',\n\tplusdu: '\\u2A25',\n\tpluse: '\\u2A72',\n\tPlusMinus: '\\u00B1',\n\tplusmn: '\\u00B1',\n\tplussim: '\\u2A26',\n\tplustwo: '\\u2A27',\n\tpm: '\\u00B1',\n\tPoincareplane: '\\u210C',\n\tpointint: '\\u2A15',\n\tPopf: '\\u2119',\n\tpopf: '\\uD835\\uDD61',\n\tpound: '\\u00A3',\n\tPr: '\\u2ABB',\n\tpr: '\\u227A',\n\tprap: '\\u2AB7',\n\tprcue: '\\u227C',\n\tprE: '\\u2AB3',\n\tpre: '\\u2AAF',\n\tprec: '\\u227A',\n\tprecapprox: '\\u2AB7',\n\tpreccurlyeq: '\\u227C',\n\tPrecedes: '\\u227A',\n\tPrecedesEqual: '\\u2AAF',\n\tPrecedesSlantEqual: '\\u227C',\n\tPrecedesTilde: '\\u227E',\n\tpreceq: '\\u2AAF',\n\tprecnapprox: '\\u2AB9',\n\tprecneqq: '\\u2AB5',\n\tprecnsim: '\\u22E8',\n\tprecsim: '\\u227E',\n\tPrime: '\\u2033',\n\tprime: '\\u2032',\n\tprimes: '\\u2119',\n\tprnap: '\\u2AB9',\n\tprnE: '\\u2AB5',\n\tprnsim: '\\u22E8',\n\tprod: '\\u220F',\n\tProduct: '\\u220F',\n\tprofalar: '\\u232E',\n\tprofline: '\\u2312',\n\tprofsurf: '\\u2313',\n\tprop: '\\u221D',\n\tProportion: '\\u2237',\n\tProportional: '\\u221D',\n\tpropto: '\\u221D',\n\tprsim: '\\u227E',\n\tprurel: '\\u22B0',\n\tPscr: '\\uD835\\uDCAB',\n\tpscr: '\\uD835\\uDCC5',\n\tPsi: '\\u03A8',\n\tpsi: '\\u03C8',\n\tpuncsp: '\\u2008',\n\tQfr: '\\uD835\\uDD14',\n\tqfr: '\\uD835\\uDD2E',\n\tqint: '\\u2A0C',\n\tQopf: '\\u211A',\n\tqopf: '\\uD835\\uDD62',\n\tqprime: '\\u2057',\n\tQscr: '\\uD835\\uDCAC',\n\tqscr: '\\uD835\\uDCC6',\n\tquaternions: '\\u210D',\n\tquatint: '\\u2A16',\n\tquest: '\\u003F',\n\tquesteq: '\\u225F',\n\tQUOT: '\\u0022',\n\tquot: '\\u0022',\n\trAarr: '\\u21DB',\n\trace: '\\u223D\\u0331',\n\tRacute: '\\u0154',\n\tracute: '\\u0155',\n\tradic: '\\u221A',\n\traemptyv: '\\u29B3',\n\tRang: '\\u27EB',\n\trang: '\\u27E9',\n\trangd: '\\u2992',\n\trange: '\\u29A5',\n\trangle: '\\u27E9',\n\traquo: '\\u00BB',\n\tRarr: '\\u21A0',\n\trArr: '\\u21D2',\n\trarr: '\\u2192',\n\trarrap: '\\u2975',\n\trarrb: '\\u21E5',\n\trarrbfs: '\\u2920',\n\trarrc: '\\u2933',\n\trarrfs: '\\u291E',\n\trarrhk: '\\u21AA',\n\trarrlp: '\\u21AC',\n\trarrpl: '\\u2945',\n\trarrsim: '\\u2974',\n\tRarrtl: '\\u2916',\n\trarrtl: '\\u21A3',\n\trarrw: '\\u219D',\n\trAtail: '\\u291C',\n\tratail: '\\u291A',\n\tratio: '\\u2236',\n\trationals: '\\u211A',\n\tRBarr: '\\u2910',\n\trBarr: '\\u290F',\n\trbarr: '\\u290D',\n\trbbrk: '\\u2773',\n\trbrace: '\\u007D',\n\trbrack: '\\u005D',\n\trbrke: '\\u298C',\n\trbrksld: '\\u298E',\n\trbrkslu: '\\u2990',\n\tRcaron: '\\u0158',\n\trcaron: '\\u0159',\n\tRcedil: '\\u0156',\n\trcedil: '\\u0157',\n\trceil: '\\u2309',\n\trcub: '\\u007D',\n\tRcy: '\\u0420',\n\trcy: '\\u0440',\n\trdca: '\\u2937',\n\trdldhar: '\\u2969',\n\trdquo: '\\u201D',\n\trdquor: '\\u201D',\n\trdsh: '\\u21B3',\n\tRe: '\\u211C',\n\treal: '\\u211C',\n\trealine: '\\u211B',\n\trealpart: '\\u211C',\n\treals: '\\u211D',\n\trect: '\\u25AD',\n\tREG: '\\u00AE',\n\treg: '\\u00AE',\n\tReverseElement: '\\u220B',\n\tReverseEquilibrium: '\\u21CB',\n\tReverseUpEquilibrium: '\\u296F',\n\trfisht: '\\u297D',\n\trfloor: '\\u230B',\n\tRfr: '\\u211C',\n\trfr: '\\uD835\\uDD2F',\n\trHar: '\\u2964',\n\trhard: '\\u21C1',\n\trharu: '\\u21C0',\n\trharul: '\\u296C',\n\tRho: '\\u03A1',\n\trho: '\\u03C1',\n\trhov: '\\u03F1',\n\tRightAngleBracket: '\\u27E9',\n\tRightArrow: '\\u2192',\n\tRightarrow: '\\u21D2',\n\trightarrow: '\\u2192',\n\tRightArrowBar: '\\u21E5',\n\tRightArrowLeftArrow: '\\u21C4',\n\trightarrowtail: '\\u21A3',\n\tRightCeiling: '\\u2309',\n\tRightDoubleBracket: '\\u27E7',\n\tRightDownTeeVector: '\\u295D',\n\tRightDownVector: '\\u21C2',\n\tRightDownVectorBar: '\\u2955',\n\tRightFloor: '\\u230B',\n\trightharpoondown: '\\u21C1',\n\trightharpoonup: '\\u21C0',\n\trightleftarrows: '\\u21C4',\n\trightleftharpoons: '\\u21CC',\n\trightrightarrows: '\\u21C9',\n\trightsquigarrow: '\\u219D',\n\tRightTee: '\\u22A2',\n\tRightTeeArrow: '\\u21A6',\n\tRightTeeVector: '\\u295B',\n\trightthreetimes: '\\u22CC',\n\tRightTriangle: '\\u22B3',\n\tRightTriangleBar: '\\u29D0',\n\tRightTriangleEqual: '\\u22B5',\n\tRightUpDownVector: '\\u294F',\n\tRightUpTeeVector: '\\u295C',\n\tRightUpVector: '\\u21BE',\n\tRightUpVectorBar: '\\u2954',\n\tRightVector: '\\u21C0',\n\tRightVectorBar: '\\u2953',\n\tring: '\\u02DA',\n\trisingdotseq: '\\u2253',\n\trlarr: '\\u21C4',\n\trlhar: '\\u21CC',\n\trlm: '\\u200F',\n\trmoust: '\\u23B1',\n\trmoustache: '\\u23B1',\n\trnmid: '\\u2AEE',\n\troang: '\\u27ED',\n\troarr: '\\u21FE',\n\trobrk: '\\u27E7',\n\tropar: '\\u2986',\n\tRopf: '\\u211D',\n\tropf: '\\uD835\\uDD63',\n\troplus: '\\u2A2E',\n\trotimes: '\\u2A35',\n\tRoundImplies: '\\u2970',\n\trpar: '\\u0029',\n\trpargt: '\\u2994',\n\trppolint: '\\u2A12',\n\trrarr: '\\u21C9',\n\tRrightarrow: '\\u21DB',\n\trsaquo: '\\u203A',\n\tRscr: '\\u211B',\n\trscr: '\\uD835\\uDCC7',\n\tRsh: '\\u21B1',\n\trsh: '\\u21B1',\n\trsqb: '\\u005D',\n\trsquo: '\\u2019',\n\trsquor: '\\u2019',\n\trthree: '\\u22CC',\n\trtimes: '\\u22CA',\n\trtri: '\\u25B9',\n\trtrie: '\\u22B5',\n\trtrif: '\\u25B8',\n\trtriltri: '\\u29CE',\n\tRuleDelayed: '\\u29F4',\n\truluhar: '\\u2968',\n\trx: '\\u211E',\n\tSacute: '\\u015A',\n\tsacute: '\\u015B',\n\tsbquo: '\\u201A',\n\tSc: '\\u2ABC',\n\tsc: '\\u227B',\n\tscap: '\\u2AB8',\n\tScaron: '\\u0160',\n\tscaron: '\\u0161',\n\tsccue: '\\u227D',\n\tscE: '\\u2AB4',\n\tsce: '\\u2AB0',\n\tScedil: '\\u015E',\n\tscedil: '\\u015F',\n\tScirc: '\\u015C',\n\tscirc: '\\u015D',\n\tscnap: '\\u2ABA',\n\tscnE: '\\u2AB6',\n\tscnsim: '\\u22E9',\n\tscpolint: '\\u2A13',\n\tscsim: '\\u227F',\n\tScy: '\\u0421',\n\tscy: '\\u0441',\n\tsdot: '\\u22C5',\n\tsdotb: '\\u22A1',\n\tsdote: '\\u2A66',\n\tsearhk: '\\u2925',\n\tseArr: '\\u21D8',\n\tsearr: '\\u2198',\n\tsearrow: '\\u2198',\n\tsect: '\\u00A7',\n\tsemi: '\\u003B',\n\tseswar: '\\u2929',\n\tsetminus: '\\u2216',\n\tsetmn: '\\u2216',\n\tsext: '\\u2736',\n\tSfr: '\\uD835\\uDD16',\n\tsfr: '\\uD835\\uDD30',\n\tsfrown: '\\u2322',\n\tsharp: '\\u266F',\n\tSHCHcy: '\\u0429',\n\tshchcy: '\\u0449',\n\tSHcy: '\\u0428',\n\tshcy: '\\u0448',\n\tShortDownArrow: '\\u2193',\n\tShortLeftArrow: '\\u2190',\n\tshortmid: '\\u2223',\n\tshortparallel: '\\u2225',\n\tShortRightArrow: '\\u2192',\n\tShortUpArrow: '\\u2191',\n\tshy: '\\u00AD',\n\tSigma: '\\u03A3',\n\tsigma: '\\u03C3',\n\tsigmaf: '\\u03C2',\n\tsigmav: '\\u03C2',\n\tsim: '\\u223C',\n\tsimdot: '\\u2A6A',\n\tsime: '\\u2243',\n\tsimeq: '\\u2243',\n\tsimg: '\\u2A9E',\n\tsimgE: '\\u2AA0',\n\tsiml: '\\u2A9D',\n\tsimlE: '\\u2A9F',\n\tsimne: '\\u2246',\n\tsimplus: '\\u2A24',\n\tsimrarr: '\\u2972',\n\tslarr: '\\u2190',\n\tSmallCircle: '\\u2218',\n\tsmallsetminus: '\\u2216',\n\tsmashp: '\\u2A33',\n\tsmeparsl: '\\u29E4',\n\tsmid: '\\u2223',\n\tsmile: '\\u2323',\n\tsmt: '\\u2AAA',\n\tsmte: '\\u2AAC',\n\tsmtes: '\\u2AAC\\uFE00',\n\tSOFTcy: '\\u042C',\n\tsoftcy: '\\u044C',\n\tsol: '\\u002F',\n\tsolb: '\\u29C4',\n\tsolbar: '\\u233F',\n\tSopf: '\\uD835\\uDD4A',\n\tsopf: '\\uD835\\uDD64',\n\tspades: '\\u2660',\n\tspadesuit: '\\u2660',\n\tspar: '\\u2225',\n\tsqcap: '\\u2293',\n\tsqcaps: '\\u2293\\uFE00',\n\tsqcup: '\\u2294',\n\tsqcups: '\\u2294\\uFE00',\n\tSqrt: '\\u221A',\n\tsqsub: '\\u228F',\n\tsqsube: '\\u2291',\n\tsqsubset: '\\u228F',\n\tsqsubseteq: '\\u2291',\n\tsqsup: '\\u2290',\n\tsqsupe: '\\u2292',\n\tsqsupset: '\\u2290',\n\tsqsupseteq: '\\u2292',\n\tsqu: '\\u25A1',\n\tSquare: '\\u25A1',\n\tsquare: '\\u25A1',\n\tSquareIntersection: '\\u2293',\n\tSquareSubset: '\\u228F',\n\tSquareSubsetEqual: '\\u2291',\n\tSquareSuperset: '\\u2290',\n\tSquareSupersetEqual: '\\u2292',\n\tSquareUnion: '\\u2294',\n\tsquarf: '\\u25AA',\n\tsquf: '\\u25AA',\n\tsrarr: '\\u2192',\n\tSscr: '\\uD835\\uDCAE',\n\tsscr: '\\uD835\\uDCC8',\n\tssetmn: '\\u2216',\n\tssmile: '\\u2323',\n\tsstarf: '\\u22C6',\n\tStar: '\\u22C6',\n\tstar: '\\u2606',\n\tstarf: '\\u2605',\n\tstraightepsilon: '\\u03F5',\n\tstraightphi: '\\u03D5',\n\tstrns: '\\u00AF',\n\tSub: '\\u22D0',\n\tsub: '\\u2282',\n\tsubdot: '\\u2ABD',\n\tsubE: '\\u2AC5',\n\tsube: '\\u2286',\n\tsubedot: '\\u2AC3',\n\tsubmult: '\\u2AC1',\n\tsubnE: '\\u2ACB',\n\tsubne: '\\u228A',\n\tsubplus: '\\u2ABF',\n\tsubrarr: '\\u2979',\n\tSubset: '\\u22D0',\n\tsubset: '\\u2282',\n\tsubseteq: '\\u2286',\n\tsubseteqq: '\\u2AC5',\n\tSubsetEqual: '\\u2286',\n\tsubsetneq: '\\u228A',\n\tsubsetneqq: '\\u2ACB',\n\tsubsim: '\\u2AC7',\n\tsubsub: '\\u2AD5',\n\tsubsup: '\\u2AD3',\n\tsucc: '\\u227B',\n\tsuccapprox: '\\u2AB8',\n\tsucccurlyeq: '\\u227D',\n\tSucceeds: '\\u227B',\n\tSucceedsEqual: '\\u2AB0',\n\tSucceedsSlantEqual: '\\u227D',\n\tSucceedsTilde: '\\u227F',\n\tsucceq: '\\u2AB0',\n\tsuccnapprox: '\\u2ABA',\n\tsuccneqq: '\\u2AB6',\n\tsuccnsim: '\\u22E9',\n\tsuccsim: '\\u227F',\n\tSuchThat: '\\u220B',\n\tSum: '\\u2211',\n\tsum: '\\u2211',\n\tsung: '\\u266A',\n\tSup: '\\u22D1',\n\tsup: '\\u2283',\n\tsup1: '\\u00B9',\n\tsup2: '\\u00B2',\n\tsup3: '\\u00B3',\n\tsupdot: '\\u2ABE',\n\tsupdsub: '\\u2AD8',\n\tsupE: '\\u2AC6',\n\tsupe: '\\u2287',\n\tsupedot: '\\u2AC4',\n\tSuperset: '\\u2283',\n\tSupersetEqual: '\\u2287',\n\tsuphsol: '\\u27C9',\n\tsuphsub: '\\u2AD7',\n\tsuplarr: '\\u297B',\n\tsupmult: '\\u2AC2',\n\tsupnE: '\\u2ACC',\n\tsupne: '\\u228B',\n\tsupplus: '\\u2AC0',\n\tSupset: '\\u22D1',\n\tsupset: '\\u2283',\n\tsupseteq: '\\u2287',\n\tsupseteqq: '\\u2AC6',\n\tsupsetneq: '\\u228B',\n\tsupsetneqq: '\\u2ACC',\n\tsupsim: '\\u2AC8',\n\tsupsub: '\\u2AD4',\n\tsupsup: '\\u2AD6',\n\tswarhk: '\\u2926',\n\tswArr: '\\u21D9',\n\tswarr: '\\u2199',\n\tswarrow: '\\u2199',\n\tswnwar: '\\u292A',\n\tszlig: '\\u00DF',\n\tTab: '\\u0009',\n\ttarget: '\\u2316',\n\tTau: '\\u03A4',\n\ttau: '\\u03C4',\n\ttbrk: '\\u23B4',\n\tTcaron: '\\u0164',\n\ttcaron: '\\u0165',\n\tTcedil: '\\u0162',\n\ttcedil: '\\u0163',\n\tTcy: '\\u0422',\n\ttcy: '\\u0442',\n\ttdot: '\\u20DB',\n\ttelrec: '\\u2315',\n\tTfr: '\\uD835\\uDD17',\n\ttfr: '\\uD835\\uDD31',\n\tthere4: '\\u2234',\n\tTherefore: '\\u2234',\n\ttherefore: '\\u2234',\n\tTheta: '\\u0398',\n\ttheta: '\\u03B8',\n\tthetasym: '\\u03D1',\n\tthetav: '\\u03D1',\n\tthickapprox: '\\u2248',\n\tthicksim: '\\u223C',\n\tThickSpace: '\\u205F\\u200A',\n\tthinsp: '\\u2009',\n\tThinSpace: '\\u2009',\n\tthkap: '\\u2248',\n\tthksim: '\\u223C',\n\tTHORN: '\\u00DE',\n\tthorn: '\\u00FE',\n\tTilde: '\\u223C',\n\ttilde: '\\u02DC',\n\tTildeEqual: '\\u2243',\n\tTildeFullEqual: '\\u2245',\n\tTildeTilde: '\\u2248',\n\ttimes: '\\u00D7',\n\ttimesb: '\\u22A0',\n\ttimesbar: '\\u2A31',\n\ttimesd: '\\u2A30',\n\ttint: '\\u222D',\n\ttoea: '\\u2928',\n\ttop: '\\u22A4',\n\ttopbot: '\\u2336',\n\ttopcir: '\\u2AF1',\n\tTopf: '\\uD835\\uDD4B',\n\ttopf: '\\uD835\\uDD65',\n\ttopfork: '\\u2ADA',\n\ttosa: '\\u2929',\n\ttprime: '\\u2034',\n\tTRADE: '\\u2122',\n\ttrade: '\\u2122',\n\ttriangle: '\\u25B5',\n\ttriangledown: '\\u25BF',\n\ttriangleleft: '\\u25C3',\n\ttrianglelefteq: '\\u22B4',\n\ttriangleq: '\\u225C',\n\ttriangleright: '\\u25B9',\n\ttrianglerighteq: '\\u22B5',\n\ttridot: '\\u25EC',\n\ttrie: '\\u225C',\n\ttriminus: '\\u2A3A',\n\tTripleDot: '\\u20DB',\n\ttriplus: '\\u2A39',\n\ttrisb: '\\u29CD',\n\ttritime: '\\u2A3B',\n\ttrpezium: '\\u23E2',\n\tTscr: '\\uD835\\uDCAF',\n\ttscr: '\\uD835\\uDCC9',\n\tTScy: '\\u0426',\n\ttscy: '\\u0446',\n\tTSHcy: '\\u040B',\n\ttshcy: '\\u045B',\n\tTstrok: '\\u0166',\n\ttstrok: '\\u0167',\n\ttwixt: '\\u226C',\n\ttwoheadleftarrow: '\\u219E',\n\ttwoheadrightarrow: '\\u21A0',\n\tUacute: '\\u00DA',\n\tuacute: '\\u00FA',\n\tUarr: '\\u219F',\n\tuArr: '\\u21D1',\n\tuarr: '\\u2191',\n\tUarrocir: '\\u2949',\n\tUbrcy: '\\u040E',\n\tubrcy: '\\u045E',\n\tUbreve: '\\u016C',\n\tubreve: '\\u016D',\n\tUcirc: '\\u00DB',\n\tucirc: '\\u00FB',\n\tUcy: '\\u0423',\n\tucy: '\\u0443',\n\tudarr: '\\u21C5',\n\tUdblac: '\\u0170',\n\tudblac: '\\u0171',\n\tudhar: '\\u296E',\n\tufisht: '\\u297E',\n\tUfr: '\\uD835\\uDD18',\n\tufr: '\\uD835\\uDD32',\n\tUgrave: '\\u00D9',\n\tugrave: '\\u00F9',\n\tuHar: '\\u2963',\n\tuharl: '\\u21BF',\n\tuharr: '\\u21BE',\n\tuhblk: '\\u2580',\n\tulcorn: '\\u231C',\n\tulcorner: '\\u231C',\n\tulcrop: '\\u230F',\n\tultri: '\\u25F8',\n\tUmacr: '\\u016A',\n\tumacr: '\\u016B',\n\tuml: '\\u00A8',\n\tUnderBar: '\\u005F',\n\tUnderBrace: '\\u23DF',\n\tUnderBracket: '\\u23B5',\n\tUnderParenthesis: '\\u23DD',\n\tUnion: '\\u22C3',\n\tUnionPlus: '\\u228E',\n\tUogon: '\\u0172',\n\tuogon: '\\u0173',\n\tUopf: '\\uD835\\uDD4C',\n\tuopf: '\\uD835\\uDD66',\n\tUpArrow: '\\u2191',\n\tUparrow: '\\u21D1',\n\tuparrow: '\\u2191',\n\tUpArrowBar: '\\u2912',\n\tUpArrowDownArrow: '\\u21C5',\n\tUpDownArrow: '\\u2195',\n\tUpdownarrow: '\\u21D5',\n\tupdownarrow: '\\u2195',\n\tUpEquilibrium: '\\u296E',\n\tupharpoonleft: '\\u21BF',\n\tupharpoonright: '\\u21BE',\n\tuplus: '\\u228E',\n\tUpperLeftArrow: '\\u2196',\n\tUpperRightArrow: '\\u2197',\n\tUpsi: '\\u03D2',\n\tupsi: '\\u03C5',\n\tupsih: '\\u03D2',\n\tUpsilon: '\\u03A5',\n\tupsilon: '\\u03C5',\n\tUpTee: '\\u22A5',\n\tUpTeeArrow: '\\u21A5',\n\tupuparrows: '\\u21C8',\n\turcorn: '\\u231D',\n\turcorner: '\\u231D',\n\turcrop: '\\u230E',\n\tUring: '\\u016E',\n\turing: '\\u016F',\n\turtri: '\\u25F9',\n\tUscr: '\\uD835\\uDCB0',\n\tuscr: '\\uD835\\uDCCA',\n\tutdot: '\\u22F0',\n\tUtilde: '\\u0168',\n\tutilde: '\\u0169',\n\tutri: '\\u25B5',\n\tutrif: '\\u25B4',\n\tuuarr: '\\u21C8',\n\tUuml: '\\u00DC',\n\tuuml: '\\u00FC',\n\tuwangle: '\\u29A7',\n\tvangrt: '\\u299C',\n\tvarepsilon: '\\u03F5',\n\tvarkappa: '\\u03F0',\n\tvarnothing: '\\u2205',\n\tvarphi: '\\u03D5',\n\tvarpi: '\\u03D6',\n\tvarpropto: '\\u221D',\n\tvArr: '\\u21D5',\n\tvarr: '\\u2195',\n\tvarrho: '\\u03F1',\n\tvarsigma: '\\u03C2',\n\tvarsubsetneq: '\\u228A\\uFE00',\n\tvarsubsetneqq: '\\u2ACB\\uFE00',\n\tvarsupsetneq: '\\u228B\\uFE00',\n\tvarsupsetneqq: '\\u2ACC\\uFE00',\n\tvartheta: '\\u03D1',\n\tvartriangleleft: '\\u22B2',\n\tvartriangleright: '\\u22B3',\n\tVbar: '\\u2AEB',\n\tvBar: '\\u2AE8',\n\tvBarv: '\\u2AE9',\n\tVcy: '\\u0412',\n\tvcy: '\\u0432',\n\tVDash: '\\u22AB',\n\tVdash: '\\u22A9',\n\tvDash: '\\u22A8',\n\tvdash: '\\u22A2',\n\tVdashl: '\\u2AE6',\n\tVee: '\\u22C1',\n\tvee: '\\u2228',\n\tveebar: '\\u22BB',\n\tveeeq: '\\u225A',\n\tvellip: '\\u22EE',\n\tVerbar: '\\u2016',\n\tverbar: '\\u007C',\n\tVert: '\\u2016',\n\tvert: '\\u007C',\n\tVerticalBar: '\\u2223',\n\tVerticalLine: '\\u007C',\n\tVerticalSeparator: '\\u2758',\n\tVerticalTilde: '\\u2240',\n\tVeryThinSpace: '\\u200A',\n\tVfr: '\\uD835\\uDD19',\n\tvfr: '\\uD835\\uDD33',\n\tvltri: '\\u22B2',\n\tvnsub: '\\u2282\\u20D2',\n\tvnsup: '\\u2283\\u20D2',\n\tVopf: '\\uD835\\uDD4D',\n\tvopf: '\\uD835\\uDD67',\n\tvprop: '\\u221D',\n\tvrtri: '\\u22B3',\n\tVscr: '\\uD835\\uDCB1',\n\tvscr: '\\uD835\\uDCCB',\n\tvsubnE: '\\u2ACB\\uFE00',\n\tvsubne: '\\u228A\\uFE00',\n\tvsupnE: '\\u2ACC\\uFE00',\n\tvsupne: '\\u228B\\uFE00',\n\tVvdash: '\\u22AA',\n\tvzigzag: '\\u299A',\n\tWcirc: '\\u0174',\n\twcirc: '\\u0175',\n\twedbar: '\\u2A5F',\n\tWedge: '\\u22C0',\n\twedge: '\\u2227',\n\twedgeq: '\\u2259',\n\tweierp: '\\u2118',\n\tWfr: '\\uD835\\uDD1A',\n\twfr: '\\uD835\\uDD34',\n\tWopf: '\\uD835\\uDD4E',\n\twopf: '\\uD835\\uDD68',\n\twp: '\\u2118',\n\twr: '\\u2240',\n\twreath: '\\u2240',\n\tWscr: '\\uD835\\uDCB2',\n\twscr: '\\uD835\\uDCCC',\n\txcap: '\\u22C2',\n\txcirc: '\\u25EF',\n\txcup: '\\u22C3',\n\txdtri: '\\u25BD',\n\tXfr: '\\uD835\\uDD1B',\n\txfr: '\\uD835\\uDD35',\n\txhArr: '\\u27FA',\n\txharr: '\\u27F7',\n\tXi: '\\u039E',\n\txi: '\\u03BE',\n\txlArr: '\\u27F8',\n\txlarr: '\\u27F5',\n\txmap: '\\u27FC',\n\txnis: '\\u22FB',\n\txodot: '\\u2A00',\n\tXopf: '\\uD835\\uDD4F',\n\txopf: '\\uD835\\uDD69',\n\txoplus: '\\u2A01',\n\txotime: '\\u2A02',\n\txrArr: '\\u27F9',\n\txrarr: '\\u27F6',\n\tXscr: '\\uD835\\uDCB3',\n\txscr: '\\uD835\\uDCCD',\n\txsqcup: '\\u2A06',\n\txuplus: '\\u2A04',\n\txutri: '\\u25B3',\n\txvee: '\\u22C1',\n\txwedge: '\\u22C0',\n\tYacute: '\\u00DD',\n\tyacute: '\\u00FD',\n\tYAcy: '\\u042F',\n\tyacy: '\\u044F',\n\tYcirc: '\\u0176',\n\tycirc: '\\u0177',\n\tYcy: '\\u042B',\n\tycy: '\\u044B',\n\tyen: '\\u00A5',\n\tYfr: '\\uD835\\uDD1C',\n\tyfr: '\\uD835\\uDD36',\n\tYIcy: '\\u0407',\n\tyicy: '\\u0457',\n\tYopf: '\\uD835\\uDD50',\n\tyopf: '\\uD835\\uDD6A',\n\tYscr: '\\uD835\\uDCB4',\n\tyscr: '\\uD835\\uDCCE',\n\tYUcy: '\\u042E',\n\tyucy: '\\u044E',\n\tYuml: '\\u0178',\n\tyuml: '\\u00FF',\n\tZacute: '\\u0179',\n\tzacute: '\\u017A',\n\tZcaron: '\\u017D',\n\tzcaron: '\\u017E',\n\tZcy: '\\u0417',\n\tzcy: '\\u0437',\n\tZdot: '\\u017B',\n\tzdot: '\\u017C',\n\tzeetrf: '\\u2128',\n\tZeroWidthSpace: '\\u200B',\n\tZeta: '\\u0396',\n\tzeta: '\\u03B6',\n\tZfr: '\\u2128',\n\tzfr: '\\uD835\\uDD37',\n\tZHcy: '\\u0416',\n\tzhcy: '\\u0436',\n\tzigrarr: '\\u21DD',\n\tZopf: '\\u2124',\n\tzopf: '\\uD835\\uDD6B',\n\tZscr: '\\uD835\\uDCB5',\n\tzscr: '\\uD835\\uDCCF',\n\tzwj: '\\u200D',\n\tzwnj: '\\u200C',\n});\n\n/**\n * @deprecated\n * Use `HTML_ENTITIES` instead.\n * @see {@link HTML_ENTITIES}\n */\nexports.entityMap = exports.HTML_ENTITIES;\n","'use strict';\n\nvar conventions = require('./conventions');\n\nfunction extendError(constructor, writableName) {\n\tconstructor.prototype = Object.create(Error.prototype, {\n\t\tconstructor: { value: constructor },\n\t\tname: { value: constructor.name, enumerable: true, writable: writableName },\n\t});\n}\n\nvar DOMExceptionName = conventions.freeze({\n\t/**\n\t * the default value as defined by the spec\n\t */\n\tError: 'Error',\n\t/**\n\t * @deprecated\n\t * Use RangeError instead.\n\t */\n\tIndexSizeError: 'IndexSizeError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tDomstringSizeError: 'DomstringSizeError',\n\tHierarchyRequestError: 'HierarchyRequestError',\n\tWrongDocumentError: 'WrongDocumentError',\n\tInvalidCharacterError: 'InvalidCharacterError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tNoDataAllowedError: 'NoDataAllowedError',\n\tNoModificationAllowedError: 'NoModificationAllowedError',\n\tNotFoundError: 'NotFoundError',\n\tNotSupportedError: 'NotSupportedError',\n\tInUseAttributeError: 'InUseAttributeError',\n\tInvalidStateError: 'InvalidStateError',\n\tSyntaxError: 'SyntaxError',\n\tInvalidModificationError: 'InvalidModificationError',\n\tNamespaceError: 'NamespaceError',\n\t/**\n\t * @deprecated\n\t * Use TypeError for invalid arguments,\n\t * \"NotSupportedError\" DOMException for unsupported operations,\n\t * and \"NotAllowedError\" DOMException for denied requests instead.\n\t */\n\tInvalidAccessError: 'InvalidAccessError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tValidationError: 'ValidationError',\n\t/**\n\t * @deprecated\n\t * Use TypeError instead.\n\t */\n\tTypeMismatchError: 'TypeMismatchError',\n\tSecurityError: 'SecurityError',\n\tNetworkError: 'NetworkError',\n\tAbortError: 'AbortError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tURLMismatchError: 'URLMismatchError',\n\tQuotaExceededError: 'QuotaExceededError',\n\tTimeoutError: 'TimeoutError',\n\tInvalidNodeTypeError: 'InvalidNodeTypeError',\n\tDataCloneError: 'DataCloneError',\n\tEncodingError: 'EncodingError',\n\tNotReadableError: 'NotReadableError',\n\tUnknownError: 'UnknownError',\n\tConstraintError: 'ConstraintError',\n\tDataError: 'DataError',\n\tTransactionInactiveError: 'TransactionInactiveError',\n\tReadOnlyError: 'ReadOnlyError',\n\tVersionError: 'VersionError',\n\tOperationError: 'OperationError',\n\tNotAllowedError: 'NotAllowedError',\n\tOptOutError: 'OptOutError',\n});\nvar DOMExceptionNames = Object.keys(DOMExceptionName);\n\nfunction isValidDomExceptionCode(value) {\n\treturn typeof value === 'number' && value >= 1 && value <= 25;\n}\nfunction endsWithError(value) {\n\treturn typeof value === 'string' && value.substring(value.length - DOMExceptionName.Error.length) === DOMExceptionName.Error;\n}\n/**\n * DOM operations only raise exceptions in \"exceptional\" circumstances, i.e., when an operation\n * is impossible to perform (either for logical reasons, because data is lost, or because the\n * implementation has become unstable). In general, DOM methods return specific error values in\n * ordinary processing situations, such as out-of-bound errors when using NodeList.\n *\n * Implementations should raise other exceptions under other circumstances. For example,\n * implementations should raise an implementation-dependent exception if a null argument is\n * passed when null was not expected.\n *\n * This implementation supports the following usages:\n * 1. according to the living standard (both arguments are optional):\n * ```\n * new DOMException(\"message (can be empty)\", DOMExceptionNames.HierarchyRequestError)\n * ```\n * 2. according to previous xmldom implementation (only the first argument is required):\n * ```\n * new DOMException(DOMException.HIERARCHY_REQUEST_ERR, \"optional message\")\n * ```\n * both result in the proper name being set.\n *\n * @class DOMException\n * @param {number | string} messageOrCode\n * The reason why an operation is not acceptable.\n * If it is a number, it is used to determine the `name`, see\n * {@link https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF ExceptionCode}\n * @param {string | keyof typeof DOMExceptionName | Error} [nameOrMessage]\n * The `name` to use for the error.\n * If `messageOrCode` is a number, this arguments is used as the `message` instead.\n * @augments Error\n * @see https://webidl.spec.whatwg.org/#idl-DOMException\n * @see https://webidl.spec.whatwg.org/#dfn-error-names-table\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-17189187\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n */\nfunction DOMException(messageOrCode, nameOrMessage) {\n\t// support old way of passing arguments: first argument is a valid number\n\tif (isValidDomExceptionCode(messageOrCode)) {\n\t\tthis.name = DOMExceptionNames[messageOrCode];\n\t\tthis.message = nameOrMessage || '';\n\t} else {\n\t\tthis.message = messageOrCode;\n\t\tthis.name = endsWithError(nameOrMessage) ? nameOrMessage : DOMExceptionName.Error;\n\t}\n\tif (Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n}\nextendError(DOMException, true);\nObject.defineProperties(DOMException.prototype, {\n\tcode: {\n\t\tenumerable: true,\n\t\tget: function () {\n\t\t\tvar code = DOMExceptionNames.indexOf(this.name);\n\t\t\tif (isValidDomExceptionCode(code)) return code;\n\t\t\treturn 0;\n\t\t},\n\t},\n});\n\nvar ExceptionCode = {\n\tINDEX_SIZE_ERR: 1,\n\tDOMSTRING_SIZE_ERR: 2,\n\tHIERARCHY_REQUEST_ERR: 3,\n\tWRONG_DOCUMENT_ERR: 4,\n\tINVALID_CHARACTER_ERR: 5,\n\tNO_DATA_ALLOWED_ERR: 6,\n\tNO_MODIFICATION_ALLOWED_ERR: 7,\n\tNOT_FOUND_ERR: 8,\n\tNOT_SUPPORTED_ERR: 9,\n\tINUSE_ATTRIBUTE_ERR: 10,\n\tINVALID_STATE_ERR: 11,\n\tSYNTAX_ERR: 12,\n\tINVALID_MODIFICATION_ERR: 13,\n\tNAMESPACE_ERR: 14,\n\tINVALID_ACCESS_ERR: 15,\n\tVALIDATION_ERR: 16,\n\tTYPE_MISMATCH_ERR: 17,\n\tSECURITY_ERR: 18,\n\tNETWORK_ERR: 19,\n\tABORT_ERR: 20,\n\tURL_MISMATCH_ERR: 21,\n\tQUOTA_EXCEEDED_ERR: 22,\n\tTIMEOUT_ERR: 23,\n\tINVALID_NODE_TYPE_ERR: 24,\n\tDATA_CLONE_ERR: 25,\n};\n\nvar entries = Object.entries(ExceptionCode);\nfor (var i = 0; i < entries.length; i++) {\n\tvar key = entries[i][0];\n\tDOMException[key] = entries[i][1];\n}\n\n/**\n * Creates an error that will not be caught by XMLReader aka the SAX parser.\n *\n * @class\n * @param {string} message\n * @param {any} [locator]\n */\nfunction ParseError(message, locator) {\n\tthis.message = message;\n\tthis.locator = locator;\n\tif (Error.captureStackTrace) Error.captureStackTrace(this, ParseError);\n}\nextendError(ParseError);\n\nexports.DOMException = DOMException;\nexports.DOMExceptionName = DOMExceptionName;\nexports.ExceptionCode = ExceptionCode;\nexports.ParseError = ParseError;\n","'use strict';\n\n/**\n * Detects relevant unicode support for regular expressions in the runtime.\n * Should the runtime not accepts the flag `u` or unicode ranges,\n * character classes without unicode handling will be used.\n *\n * @param {typeof RegExp} [RegExpImpl=RegExp]\n * For testing: the RegExp class.\n * @returns {boolean}\n * @see https://node.green/#ES2015-syntax-RegExp--y--and--u--flags\n */\nfunction detectUnicodeSupport(RegExpImpl) {\n\ttry {\n\t\tif (typeof RegExpImpl !== 'function') {\n\t\t\tRegExpImpl = RegExp;\n\t\t}\n\t\t// eslint-disable-next-line es5/no-unicode-regex,es5/no-unicode-code-point-escape\n\t\tvar match = new RegExpImpl('\\u{1d306}', 'u').exec('𝌆');\n\t\treturn !!match && match[0].length === 2;\n\t} catch (error) {}\n\treturn false;\n}\nvar UNICODE_SUPPORT = detectUnicodeSupport();\n\n/**\n * Removes `[`, `]` and any trailing quantifiers from the source of a RegExp.\n *\n * @param {RegExp} regexp\n */\nfunction chars(regexp) {\n\tif (regexp.source[0] !== '[') {\n\t\tthrow new Error(regexp + ' can not be used with chars');\n\t}\n\treturn regexp.source.slice(1, regexp.source.lastIndexOf(']'));\n}\n\n/**\n * Creates a new character list regular expression,\n * by removing `search` from the source of `regexp`.\n *\n * @param {RegExp} regexp\n * @param {string} search\n * The character(s) to remove.\n * @returns {RegExp}\n */\nfunction chars_without(regexp, search) {\n\tif (regexp.source[0] !== '[') {\n\t\tthrow new Error('/' + regexp.source + '/ can not be used with chars_without');\n\t}\n\tif (!search || typeof search !== 'string') {\n\t\tthrow new Error(JSON.stringify(search) + ' is not a valid search');\n\t}\n\tif (regexp.source.indexOf(search) === -1) {\n\t\tthrow new Error('\"' + search + '\" is not is /' + regexp.source + '/');\n\t}\n\tif (search === '-' && regexp.source.indexOf(search) !== 1) {\n\t\tthrow new Error('\"' + search + '\" is not at the first postion of /' + regexp.source + '/');\n\t}\n\treturn new RegExp(regexp.source.replace(search, ''), UNICODE_SUPPORT ? 'u' : '');\n}\n\n/**\n * Combines and Regular expressions correctly by using `RegExp.source`.\n *\n * @param {...(RegExp | string)[]} args\n * @returns {RegExp}\n */\nfunction reg(args) {\n\tvar self = this;\n\treturn new RegExp(\n\t\tArray.prototype.slice\n\t\t\t.call(arguments)\n\t\t\t.map(function (part) {\n\t\t\t\tvar isStr = typeof part === 'string';\n\t\t\t\tif (isStr && self === undefined && part === '|') {\n\t\t\t\t\tthrow new Error('use regg instead of reg to wrap expressions with `|`!');\n\t\t\t\t}\n\t\t\t\treturn isStr ? part : part.source;\n\t\t\t})\n\t\t\t.join(''),\n\t\tUNICODE_SUPPORT ? 'mu' : 'm'\n\t);\n}\n\n/**\n * Like `reg` but wraps the expression in `(?:`,`)` to create a non tracking group.\n *\n * @param {...(RegExp | string)[]} args\n * @returns {RegExp}\n */\nfunction regg(args) {\n\tif (arguments.length === 0) {\n\t\tthrow new Error('no parameters provided');\n\t}\n\treturn reg.apply(regg, ['(?:'].concat(Array.prototype.slice.call(arguments), [')']));\n}\n\n// /**\n// * Append ^ to the beginning of the expression.\n// * @param {...(RegExp | string)[]} args\n// * @returns {RegExp}\n// */\n// function reg_start(args) {\n// \tif (arguments.length === 0) {\n// \t\tthrow new Error('no parameters provided');\n// \t}\n// \treturn reg.apply(reg_start, ['^'].concat(Array.prototype.slice.call(arguments)));\n// }\n\n// https://www.w3.org/TR/xml/#document\n// `[1] document ::= prolog element Misc*`\n// https://www.w3.org/TR/xml11/#NT-document\n// `[1] document ::= ( prolog element Misc* ) - ( Char* RestrictedChar Char* )`\n\n/**\n * A character usually appearing in wrongly converted strings.\n *\n * @type {string}\n * @see https://en.wikipedia.org/wiki/Specials_(Unicode_block)#Replacement_character\n * @see https://nodejs.dev/en/api/v18/buffer/#buffers-and-character-encodings\n * @see https://www.unicode.org/faq/utf_bom.html#BOM\n * @readonly\n */\nvar UNICODE_REPLACEMENT_CHARACTER = '\\uFFFD';\n// https://www.w3.org/TR/xml/#NT-Char\n// any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.\n// `[2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]`\n// https://www.w3.org/TR/xml11/#NT-Char\n// `[2] Char ::= [#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]`\n// https://www.w3.org/TR/xml11/#NT-RestrictedChar\n// `[2a] RestrictedChar ::= [#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]`\n// https://www.w3.org/TR/xml11/#charsets\nvar Char = /[-\\x09\\x0A\\x0D\\x20-\\x2C\\x2E-\\uD7FF\\uE000-\\uFFFD]/; // without \\u10000-\\uEFFFF\nif (UNICODE_SUPPORT) {\n\t// eslint-disable-next-line es5/no-unicode-code-point-escape\n\tChar = reg('[', chars(Char), '\\\\u{10000}-\\\\u{10FFFF}', ']');\n}\n\nvar _SChar = /[\\x20\\x09\\x0D\\x0A]/;\nvar SChar_s = chars(_SChar);\n// https://www.w3.org/TR/xml11/#NT-S\n// `[3] S ::= (#x20 | #x9 | #xD | #xA)+`\nvar S = reg(_SChar, '+');\n// optional whitespace described as `S?` in the grammar,\n// simplified to 0-n occurrences of the character class\n// instead of 0-1 occurrences of a non-capturing group around S\nvar S_OPT = reg(_SChar, '*');\n\n// https://www.w3.org/TR/xml11/#NT-NameStartChar\n// `[4] NameStartChar ::= \":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]`\nvar NameStartChar =\n\t/[:_a-zA-Z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02FF\\u0370-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/; // without \\u10000-\\uEFFFF\nif (UNICODE_SUPPORT) {\n\t// eslint-disable-next-line es5/no-unicode-code-point-escape\n\tNameStartChar = reg('[', chars(NameStartChar), '\\\\u{10000}-\\\\u{10FFFF}', ']');\n}\nvar NameStartChar_s = chars(NameStartChar);\n\n// https://www.w3.org/TR/xml11/#NT-NameChar\n// `[4a] NameChar ::= NameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]`\nvar NameChar = reg('[', NameStartChar_s, chars(/[-.0-9\\xB7]/), chars(/[\\u0300-\\u036F\\u203F-\\u2040]/), ']');\n// https://www.w3.org/TR/xml11/#NT-Name\n// `[5] Name ::= NameStartChar (NameChar)*`\nvar Name = reg(NameStartChar, NameChar, '*');\n/*\nhttps://www.w3.org/TR/xml11/#NT-Names\n`[6] Names ::= Name (#x20 Name)*`\n*/\n\n// https://www.w3.org/TR/xml11/#NT-Nmtoken\n// `[7] Nmtoken ::= (NameChar)+`\nvar Nmtoken = reg(NameChar, '+');\n/*\nhttps://www.w3.org/TR/xml11/#NT-Nmtokens\n`[8] Nmtokens ::= Nmtoken (#x20 Nmtoken)*`\nvar Nmtokens = reg(Nmtoken, regg(/\\x20/, Nmtoken), '*');\n*/\n\n// https://www.w3.org/TR/xml11/#NT-EntityRef\n// `[68] EntityRef ::= '&' Name ';'` [WFC: Entity Declared] [VC: Entity Declared] [WFC: Parsed Entity] [WFC: No Recursion]\nvar EntityRef = reg('&', Name, ';');\n// https://www.w3.org/TR/xml11/#NT-CharRef\n// `[66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'` [WFC: Legal Character]\nvar CharRef = regg(/&#[0-9]+;|&#x[0-9a-fA-F]+;/);\n\n/*\nhttps://www.w3.org/TR/xml11/#NT-Reference\n- `[67] Reference ::= EntityRef | CharRef`\n- `[66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'` [WFC: Legal Character]\n- `[68] EntityRef ::= '&' Name ';'` [WFC: Entity Declared] [VC: Entity Declared] [WFC: Parsed Entity] [WFC: No Recursion]\n*/\nvar Reference = regg(EntityRef, '|', CharRef);\n\n// https://www.w3.org/TR/xml11/#NT-PEReference\n// `[69] PEReference ::= '%' Name ';'`\n// [VC: Entity Declared] [WFC: No Recursion] [WFC: In DTD]\nvar PEReference = reg('%', Name, ';');\n\n// https://www.w3.org/TR/xml11/#NT-EntityValue\n// `[9] EntityValue ::= '\"' ([^%&\"] | PEReference | Reference)* '\"' | \"'\" ([^%&'] | PEReference | Reference)* \"'\"`\nvar EntityValue = regg(\n\treg('\"', regg(/[^%&\"]/, '|', PEReference, '|', Reference), '*', '\"'),\n\t'|',\n\treg(\"'\", regg(/[^%&']/, '|', PEReference, '|', Reference), '*', \"'\")\n);\n\n// https://www.w3.org/TR/xml11/#NT-AttValue\n// `[10] AttValue ::= '\"' ([^<&\"] | Reference)* '\"' | \"'\" ([^<&'] | Reference)* \"'\"`\nvar AttValue = regg('\"', regg(/[^<&\"]/, '|', Reference), '*', '\"', '|', \"'\", regg(/[^<&']/, '|', Reference), '*', \"'\");\n\n// https://www.w3.org/TR/xml-names/#ns-decl\n// https://www.w3.org/TR/xml-names/#ns-qualnames\n// NameStartChar without \":\"\nvar NCNameStartChar = chars_without(NameStartChar, ':');\n// https://www.w3.org/TR/xml-names/#orphans\n// `[5] NCNameChar ::= NameChar - ':'`\n// An XML NameChar, minus the \":\"\nvar NCNameChar = chars_without(NameChar, ':');\n// https://www.w3.org/TR/xml-names/#NT-NCName\n// `[4] NCName ::= Name - (Char* ':' Char*)`\n// An XML Name, minus the \":\"\nvar NCName = reg(NCNameStartChar, NCNameChar, '*');\n\n/**\nhttps://www.w3.org/TR/xml-names/#ns-qualnames\n\n```\n[7] QName ::= PrefixedName | UnprefixedName\n\t\t\t\t === (NCName ':' NCName) | NCName\n\t\t\t\t === NCName (':' NCName)?\n[8] PrefixedName ::= Prefix ':' LocalPart\n\t\t\t\t\t\t\t\t === NCName ':' NCName\n[9] UnprefixedName ::= LocalPart\n\t\t\t\t\t\t\t\t\t === NCName\n[10] Prefix ::= NCName\n[11] LocalPart ::= NCName\n```\n*/\nvar QName = reg(NCName, regg(':', NCName), '?');\nvar QName_exact = reg('^', QName, '$');\nvar QName_group = reg('(', QName, ')');\n\n// https://www.w3.org/TR/xml11/#NT-SystemLiteral\n// `[11] SystemLiteral ::= ('\"' [^\"]* '\"') | (\"'\" [^']* \"'\")`\nvar SystemLiteral = regg(/\"[^\"]*\"|'[^']*'/);\n\n/*\n https://www.w3.org/TR/xml11/#NT-PI\n ```\n [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))\n [16] PI ::= '' Char*)))? '?>'\n ```\n target /xml/i is not excluded!\n*/\nvar PI = reg(/^<\\?/, '(', Name, ')', regg(S, '(', Char, '*?)'), '?', /\\?>/);\n\n// https://www.w3.org/TR/xml11/#NT-PubidChar\n// `[13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]`\nvar PubidChar = /[\\x20\\x0D\\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/;\n\n// https://www.w3.org/TR/xml11/#NT-PubidLiteral\n// `[12] PubidLiteral ::= '\"' PubidChar* '\"' | \"'\" (PubidChar - \"'\")* \"'\"`\nvar PubidLiteral = regg('\"', PubidChar, '*\"', '|', \"'\", chars_without(PubidChar, \"'\"), \"*'\");\n\n// https://www.w3.org/TR/xml11/#NT-CharData\n// `[14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)`\n\nvar COMMENT_START = '';\n// https://www.w3.org/TR/xml11/#NT-Comment\n// `[15] Comment ::= ''`\nvar Comment = reg(COMMENT_START, regg(chars_without(Char, '-'), '|', reg('-', chars_without(Char, '-'))), '*', COMMENT_END);\n\nvar PCDATA = '#PCDATA';\n// https://www.w3.org/TR/xml11/#NT-Mixed\n// `[51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' | '(' S? '#PCDATA' S? ')'`\n// https://www.w3.org/TR/xml-names/#NT-Mixed\n// `[51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? QName)* S? ')*' | '(' S? '#PCDATA' S? ')'`\n// [VC: Proper Group/PE Nesting] [VC: No Duplicate Types]\nvar Mixed = regg(\n\treg(/\\(/, S_OPT, PCDATA, regg(S_OPT, /\\|/, S_OPT, QName), '*', S_OPT, /\\)\\*/),\n\t'|',\n\treg(/\\(/, S_OPT, PCDATA, S_OPT, /\\)/)\n);\n\nvar _children_quantity = /[?*+]?/;\n/*\n `[49] choice ::= '(' S? cp ( S? '|' S? cp )+ S? ')'` [VC: Proper Group/PE Nesting]\n `[50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')'` [VC: Proper Group/PE Nesting]\n simplification to solve circular referencing, but doesn't check validity constraint \"Proper Group/PE Nesting\"\n var _choice_or_seq = reg('[', NameChar_s, SChar_s, chars(_children_quantity), '()|,]*');\n ```\n [48] cp ::= (Name | choice | seq) ('?' | '*' | '+')?\n === (Name | '(' S? cp ( S? '|' S? cp )+ S? ')' | '(' S? cp ( S? ',' S? cp )* S? ')') ('?' | '*' | '+')?\n !== (Name | [_choice_or_seq]*) ('?' | '*' | '+')?\n ```\n simplification to solve circular referencing, but doesn't check validity constraint \"Proper Group/PE Nesting\"\n var cp = reg(regg(Name, '|', _choice_or_seq), _children_quantity);\n*/\n/*\nInefficient regular expression (High)\nThis part of the regular expression may cause exponential backtracking on strings starting with '(|' and containing many repetitions of '|'.\nhttps://github.com/xmldom/xmldom/security/code-scanning/91\nvar choice = regg(/\\(/, S_OPT, cp, regg(S_OPT, /\\|/, S_OPT, cp), '+', S_OPT, /\\)/);\n*/\n/*\nInefficient regular expression (High)\nThis part of the regular expression may cause exponential backtracking on strings starting with '(,' and containing many repetitions of ','.\nhttps://github.com/xmldom/xmldom/security/code-scanning/92\nvar seq = regg(/\\(/, S_OPT, cp, regg(S_OPT, /,/, S_OPT, cp), '*', S_OPT, /\\)/);\n*/\n\n// `[47] children ::= (choice | seq) ('?' | '*' | '+')?`\n// simplification to solve circular referencing, but doesn't check validity constraint \"Proper Group/PE Nesting\"\nvar children = reg(/\\([^>]+\\)/, _children_quantity /*regg(choice, '|', seq), _children_quantity*/);\n\n// https://www.w3.org/TR/xml11/#NT-contentspec\n// `[46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children`\nvar contentspec = regg('EMPTY', '|', 'ANY', '|', Mixed, '|', children);\n\nvar ELEMENTDECL_START = ''`\n// https://www.w3.org/TR/xml-names/#NT-elementdecl\n// `[17] elementdecl ::= ''`\n// because of https://www.w3.org/TR/xml11/#NT-PEReference\n// since xmldom is not supporting replacements of PEReferences in the DTD\n// this also supports PEReference in the possible places\nvar elementdecl = reg(ELEMENTDECL_START, S, regg(QName, '|', PEReference), S, regg(contentspec, '|', PEReference), S_OPT, '>');\n\n// https://www.w3.org/TR/xml11/#NT-NotationType\n// `[58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')'`\n// [VC: Notation Attributes] [VC: One Notation Per Element Type] [VC: No Notation on Empty Element] [VC: No Duplicate Tokens]\nvar NotationType = reg('NOTATION', S, /\\(/, S_OPT, Name, regg(S_OPT, /\\|/, S_OPT, Name), '*', S_OPT, /\\)/);\n// https://www.w3.org/TR/xml11/#NT-Enumeration\n// `[59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'`\n// [VC: Enumeration] [VC: No Duplicate Tokens]\nvar Enumeration = reg(/\\(/, S_OPT, Nmtoken, regg(S_OPT, /\\|/, S_OPT, Nmtoken), '*', S_OPT, /\\)/);\n\n// https://www.w3.org/TR/xml11/#NT-EnumeratedType\n// `[57] EnumeratedType ::= NotationType | Enumeration`\nvar EnumeratedType = regg(NotationType, '|', Enumeration);\n\n/*\n```\n[55] StringType ::= 'CDATA'\n[56] TokenizedType ::= 'ID' [VC: ID] [VC: One ID per Element Type] [VC: ID Attribute Default]\n | 'IDREF' [VC: IDREF]\n | 'IDREFS' [VC: IDREF]\n\t | 'ENTITY' [VC: Entity Name]\n\t | 'ENTITIES' [VC: Entity Name]\n\t | 'NMTOKEN' [VC: Name Token]\n\t | 'NMTOKENS' [VC: Name Token]\n [54] AttType ::= StringType | TokenizedType | EnumeratedType\n```*/\nvar AttType = regg(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/, '|', EnumeratedType);\n\n// `[60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue)`\n// [WFC: No < in Attribute Values] [WFC: No External Entity References]\n// [VC: Fixed Attribute Default] [VC: Required Attribute] [VC: Attribute Default Value Syntactically Correct]\nvar DefaultDecl = regg(/#REQUIRED|#IMPLIED/, '|', regg(regg('#FIXED', S), '?', AttValue));\n\n// https://www.w3.org/TR/xml11/#NT-AttDef\n// [53] AttDef ::= S Name S AttType S DefaultDecl\n// https://www.w3.org/TR/xml-names/#NT-AttDef\n// [1] NSAttName ::= PrefixedAttName | DefaultAttName\n// [2] PrefixedAttName ::= 'xmlns:' NCName [NSC: Reserved Prefixes and Namespace Names]\n// [3] DefaultAttName ::= 'xmlns'\n// [21] AttDef ::= S (QName | NSAttName) S AttType S DefaultDecl\n// \t\t\t\t\t\t === S Name S AttType S DefaultDecl\n// xmldom is not distinguishing between QName and NSAttName on this level\n// to support XML without namespaces in DTD we can not restrict it to QName\nvar AttDef = regg(S, Name, S, AttType, S, DefaultDecl);\n\nvar ATTLIST_DECL_START = ''`\n// https://www.w3.org/TR/xml-names/#NT-AttlistDecl\n// `[20] AttlistDecl ::= ''`\n// to support XML without namespaces in DTD we can not restrict it to QName\nvar AttlistDecl = reg(ATTLIST_DECL_START, S, Name, AttDef, '*', S_OPT, '>');\n\nvar SYSTEM = 'SYSTEM';\nvar PUBLIC = 'PUBLIC';\n// https://www.w3.org/TR/xml11/#NT-ExternalID\n// `[75] ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral`\nvar ExternalID = regg(regg(SYSTEM, S, SystemLiteral), '|', regg(PUBLIC, S, PubidLiteral, S, SystemLiteral));\nvar ExternalID_match = reg(\n\t'^',\n\tregg(\n\t\tregg(SYSTEM, S, '(?', SystemLiteral, ')'),\n\t\t'|',\n\t\tregg(PUBLIC, S, '(?', PubidLiteral, ')', S, '(?', SystemLiteral, ')')\n\t)\n);\n\n// https://www.w3.org/TR/xml11/#NT-NDataDecl\n// `[76] NDataDecl ::= S 'NDATA' S Name` [VC: Notation Declared]\nvar NDataDecl = regg(S, 'NDATA', S, Name);\n\n// https://www.w3.org/TR/xml11/#NT-EntityDef\n// `[73] EntityDef ::= EntityValue | (ExternalID NDataDecl?)`\nvar EntityDef = regg(EntityValue, '|', regg(ExternalID, NDataDecl, '?'));\n\nvar ENTITY_DECL_START = ''`\nvar GEDecl = reg(ENTITY_DECL_START, S, Name, S, EntityDef, S_OPT, '>');\n// https://www.w3.org/TR/xml11/#NT-PEDef\n// `[74] PEDef ::= EntityValue | ExternalID`\nvar PEDef = regg(EntityValue, '|', ExternalID);\n// https://www.w3.org/TR/xml11/#NT-PEDecl\n// `[72] PEDecl ::= ''`\nvar PEDecl = reg(ENTITY_DECL_START, S, '%', S, Name, S, PEDef, S_OPT, '>');\n// https://www.w3.org/TR/xml11/#NT-EntityDecl\n// `[70] EntityDecl ::= GEDecl | PEDecl`\nvar EntityDecl = regg(GEDecl, '|', PEDecl);\n\n// https://www.w3.org/TR/xml11/#NT-PublicID\n// `[83] PublicID ::= 'PUBLIC' S PubidLiteral`\nvar PublicID = reg(PUBLIC, S, PubidLiteral);\n// https://www.w3.org/TR/xml11/#NT-NotationDecl\n// `[82] NotationDecl ::= ''` [VC: Unique Notation Name]\nvar NotationDecl = reg('');\n\n// https://www.w3.org/TR/xml11/#NT-Eq\n// `[25] Eq ::= S? '=' S?`\nvar Eq = reg(S_OPT, '=', S_OPT);\n// https://www.w3.org/TR/xml/#NT-VersionNum\n// `[26] VersionNum ::= '1.' [0-9]+`\n// https://www.w3.org/TR/xml11/#NT-VersionNum\n// `[26] VersionNum ::= '1.1'`\nvar VersionNum = /1[.]\\d+/;\n// https://www.w3.org/TR/xml11/#NT-VersionInfo\n// `[24] VersionInfo ::= S 'version' Eq (\"'\" VersionNum \"'\" | '\"' VersionNum '\"')`\nvar VersionInfo = reg(S, 'version', Eq, regg(\"'\", VersionNum, \"'\", '|', '\"', VersionNum, '\"'));\n// https://www.w3.org/TR/xml11/#NT-EncName\n// `[81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*`\nvar EncName = /[A-Za-z][-A-Za-z0-9._]*/;\n// https://www.w3.org/TR/xml11/#NT-EncDecl\n// `[80] EncodingDecl ::= S 'encoding' Eq ('\"' EncName '\"' | \"'\" EncName \"'\" )`\nvar EncodingDecl = regg(S, 'encoding', Eq, regg('\"', EncName, '\"', '|', \"'\", EncName, \"'\"));\n// https://www.w3.org/TR/xml11/#NT-SDDecl\n// `[32] SDDecl ::= S 'standalone' Eq ((\"'\" ('yes' | 'no') \"'\") | ('\"' ('yes' | 'no') '\"'))`\nvar SDDecl = regg(S, 'standalone', Eq, regg(\"'\", regg('yes', '|', 'no'), \"'\", '|', '\"', regg('yes', '|', 'no'), '\"'));\n// https://www.w3.org/TR/xml11/#NT-XMLDecl\n// [23] XMLDecl ::= ''\nvar XMLDecl = reg(/^<\\?xml/, VersionInfo, EncodingDecl, '?', SDDecl, '?', S_OPT, /\\?>/);\n\n/*\n https://www.w3.org/TR/xml/#NT-markupdecl\n https://www.w3.org/TR/xml11/#NT-markupdecl\n `[29] markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment`\n var markupdecl = regg(elementdecl, '|', AttlistDecl, '|', EntityDecl, '|', NotationDecl, '|', PI_unsafe, '|', Comment);\n*/\n/*\n https://www.w3.org/TR/xml-names/#NT-doctypedecl\n`[28a] DeclSep ::= PEReference | S`\n https://www.w3.org/TR/xml11/#NT-intSubset\n```\n [28b] intSubset ::= (markupdecl | DeclSep)*\n === (markupdecl | PEReference | S)*\n```\n [WFC: PE Between Declarations]\n var intSubset = reg(regg(markupdecl, '|', PEReference, '|', S), '*');\n*/\nvar DOCTYPE_DECL_START = ''`\n https://www.afterwardsw3.org/TR/xml-names/#NT-doctypedecl\n `[16] doctypedecl ::= ''`\n var doctypedecl = reg('');\n*/\n\nvar CDATA_START = '';\nvar CDStart = //;\nvar CData = reg(Char, '*?', CDEnd);\n/*\n https://www.w3.org/TR/xml/#dt-cdsection\n `[18] \tCDSect\t ::= \tCDStart CData CDEnd`\n `[19] \tCDStart\t ::= \t'' Char*))`\n `[21] \tCDEnd\t ::= \t']]>'`\n*/\nvar CDSect = reg(CDStart, CData);\n\n// unit tested\nexports.chars = chars;\nexports.chars_without = chars_without;\nexports.detectUnicodeSupport = detectUnicodeSupport;\nexports.reg = reg;\nexports.regg = regg;\nexports.AttlistDecl = AttlistDecl;\nexports.CDATA_START = CDATA_START;\nexports.CDATA_END = CDATA_END;\nexports.CDSect = CDSect;\nexports.Char = Char;\nexports.Comment = Comment;\nexports.COMMENT_START = COMMENT_START;\nexports.COMMENT_END = COMMENT_END;\nexports.DOCTYPE_DECL_START = DOCTYPE_DECL_START;\nexports.elementdecl = elementdecl;\nexports.EntityDecl = EntityDecl;\nexports.EntityValue = EntityValue;\nexports.ExternalID = ExternalID;\nexports.ExternalID_match = ExternalID_match;\nexports.Name = Name;\nexports.NotationDecl = NotationDecl;\nexports.Reference = Reference;\nexports.PEReference = PEReference;\nexports.PI = PI;\nexports.PUBLIC = PUBLIC;\nexports.PubidLiteral = PubidLiteral;\nexports.QName = QName;\nexports.QName_exact = QName_exact;\nexports.QName_group = QName_group;\nexports.S = S;\nexports.SChar_s = SChar_s;\nexports.S_OPT = S_OPT;\nexports.SYSTEM = SYSTEM;\nexports.SystemLiteral = SystemLiteral;\nexports.UNICODE_REPLACEMENT_CHARACTER = UNICODE_REPLACEMENT_CHARACTER;\nexports.UNICODE_SUPPORT = UNICODE_SUPPORT;\nexports.XMLDecl = XMLDecl;\n","'use strict';\nvar conventions = require('./conventions');\nexports.assign = conventions.assign;\nexports.hasDefaultHTMLNamespace = conventions.hasDefaultHTMLNamespace;\nexports.isHTMLMimeType = conventions.isHTMLMimeType;\nexports.isValidMimeType = conventions.isValidMimeType;\nexports.MIME_TYPE = conventions.MIME_TYPE;\nexports.NAMESPACE = conventions.NAMESPACE;\n\nvar errors = require('./errors');\nexports.DOMException = errors.DOMException;\nexports.DOMExceptionName = errors.DOMExceptionName;\nexports.ExceptionCode = errors.ExceptionCode;\nexports.ParseError = errors.ParseError;\n\nvar dom = require('./dom');\nexports.Attr = dom.Attr;\nexports.CDATASection = dom.CDATASection;\nexports.CharacterData = dom.CharacterData;\nexports.Comment = dom.Comment;\nexports.Document = dom.Document;\nexports.DocumentFragment = dom.DocumentFragment;\nexports.DocumentType = dom.DocumentType;\nexports.DOMImplementation = dom.DOMImplementation;\nexports.Element = dom.Element;\nexports.Entity = dom.Entity;\nexports.EntityReference = dom.EntityReference;\nexports.LiveNodeList = dom.LiveNodeList;\nexports.NamedNodeMap = dom.NamedNodeMap;\nexports.Node = dom.Node;\nexports.NodeList = dom.NodeList;\nexports.Notation = dom.Notation;\nexports.ProcessingInstruction = dom.ProcessingInstruction;\nexports.Text = dom.Text;\nexports.XMLSerializer = dom.XMLSerializer;\n\nvar domParser = require('./dom-parser');\nexports.DOMParser = domParser.DOMParser;\nexports.onErrorStopParsing = domParser.onErrorStopParsing;\nexports.onWarningStopParsing = domParser.onWarningStopParsing;\n","'use strict';\n\nvar conventions = require('./conventions');\nvar g = require('./grammar');\nvar errors = require('./errors');\n\nvar isHTMLEscapableRawTextElement = conventions.isHTMLEscapableRawTextElement;\nvar isHTMLMimeType = conventions.isHTMLMimeType;\nvar isHTMLRawTextElement = conventions.isHTMLRawTextElement;\nvar hasOwn = conventions.hasOwn;\nvar NAMESPACE = conventions.NAMESPACE;\nvar ParseError = errors.ParseError;\nvar DOMException = errors.DOMException;\n\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\nvar S_TAG = 0; //tag name offerring\nvar S_ATTR = 1; //attr name offerring\nvar S_ATTR_SPACE = 2; //attr name end and space offer\nvar S_EQ = 3; //=space?\nvar S_ATTR_NOQUOT_VALUE = 4; //attr value(no quot value only)\nvar S_ATTR_END = 5; //attr value end and no space(quot end)\nvar S_TAG_SPACE = 6; //(attr value end || tag end ) && (space offer)\nvar S_TAG_CLOSE = 7; //closed el\n\nfunction XMLReader() {}\n\nXMLReader.prototype = {\n\tparse: function (source, defaultNSMap, entityMap) {\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap, (defaultNSMap = Object.create(null)));\n\t\tparse(source, defaultNSMap, entityMap, domBuilder, this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t},\n};\n\n/**\n * Detecting everything that might be a reference,\n * including those without ending `;`, since those are allowed in HTML.\n * The entityReplacer takes care of verifying and transforming each occurrence,\n * and reports to the errorHandler on those that are not OK,\n * depending on the context.\n */\nvar ENTITY_REG = /&#?\\w+;?/g;\n\nfunction parse(source, defaultNSMapCopy, entityMap, domBuilder, errorHandler) {\n\tvar isHTML = isHTMLMimeType(domBuilder.mimeType);\n\tif (source.indexOf(g.UNICODE_REPLACEMENT_CHARACTER) >= 0) {\n\t\terrorHandler.warning('Unicode replacement character detected, source encoding issues?');\n\t}\n\n\tfunction fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10),\n\t\t\t\tsurrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\n\tfunction entityReplacer(a) {\n\t\tvar complete = a[a.length - 1] === ';' ? a : a + ';';\n\t\tif (!isHTML && complete !== a) {\n\t\t\terrorHandler.error('EntityRef: expecting ;');\n\t\t\treturn a;\n\t\t}\n\t\tvar match = g.Reference.exec(complete);\n\t\tif (!match || match[0].length !== complete.length) {\n\t\t\terrorHandler.error('entity not matching Reference production: ' + a);\n\t\t\treturn a;\n\t\t}\n\t\tvar k = complete.slice(1, -1);\n\t\tif (hasOwn(entityMap, k)) {\n\t\t\treturn entityMap[k];\n\t\t} else if (k.charAt(0) === '#') {\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x', '0x')));\n\t\t} else {\n\t\t\terrorHandler.error('entity not found:' + a);\n\t\t\treturn a;\n\t\t}\n\t}\n\n\tfunction appendText(end) {\n\t\t//has some bugs\n\t\tif (end > start) {\n\t\t\tvar xt = source.substring(start, end).replace(ENTITY_REG, entityReplacer);\n\t\t\tlocator && position(start);\n\t\t\tdomBuilder.characters(xt, 0, end - start);\n\t\t\tstart = end;\n\t\t}\n\t}\n\n\tfunction position(p, m) {\n\t\twhile (p >= lineEnd && (m = linePattern.exec(source))) {\n\t\t\tlineStart = m.index;\n\t\t\tlineEnd = lineStart + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t}\n\t\tlocator.columnNumber = p - lineStart + 1;\n\t}\n\n\tvar lineStart = 0;\n\tvar lineEnd = 0;\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g;\n\tvar locator = domBuilder.locator;\n\n\tvar parseStack = [{ currentNSMap: defaultNSMapCopy }];\n\tvar unclosedTags = [];\n\tvar start = 0;\n\twhile (true) {\n\t\ttry {\n\t\t\tvar tagStart = source.indexOf('<', start);\n\t\t\tif (tagStart < 0) {\n\t\t\t\tif (!isHTML && unclosedTags.length > 0) {\n\t\t\t\t\treturn errorHandler.fatalError('unclosed xml tag(s): ' + unclosedTags.join(', '));\n\t\t\t\t}\n\t\t\t\tif (!source.substring(start).match(/^\\s*$/)) {\n\t\t\t\t\tvar doc = domBuilder.doc;\n\t\t\t\t\tvar text = doc.createTextNode(source.substr(start));\n\t\t\t\t\tif (doc.documentElement) {\n\t\t\t\t\t\treturn errorHandler.error('Extra content at the end of the document');\n\t\t\t\t\t}\n\t\t\t\t\tdoc.appendChild(text);\n\t\t\t\t\tdomBuilder.currentElement = text;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (tagStart > start) {\n\t\t\t\tvar fromSource = source.substring(start, tagStart);\n\t\t\t\tif (!isHTML && unclosedTags.length === 0) {\n\t\t\t\t\tfromSource = fromSource.replace(new RegExp(g.S_OPT.source, 'g'), '');\n\t\t\t\t\tfromSource && errorHandler.error(\"Unexpected content outside root element: '\" + fromSource + \"'\");\n\t\t\t\t}\n\t\t\t\tappendText(tagStart);\n\t\t\t}\n\t\t\tswitch (source.charAt(tagStart + 1)) {\n\t\t\t\tcase '/':\n\t\t\t\t\tvar end = source.indexOf('>', tagStart + 2);\n\t\t\t\t\tvar tagNameRaw = source.substring(tagStart + 2, end > 0 ? end : undefined);\n\t\t\t\t\tif (!tagNameRaw) {\n\t\t\t\t\t\treturn errorHandler.fatalError('end tag name missing');\n\t\t\t\t\t}\n\t\t\t\t\tvar tagNameMatch = end > 0 && g.reg('^', g.QName_group, g.S_OPT, '$').exec(tagNameRaw);\n\t\t\t\t\tif (!tagNameMatch) {\n\t\t\t\t\t\treturn errorHandler.fatalError('end tag name contains invalid characters: \"' + tagNameRaw + '\"');\n\t\t\t\t\t}\n\t\t\t\t\tif (!domBuilder.currentElement && !domBuilder.doc.documentElement) {\n\t\t\t\t\t\t// not enough information to provide a helpful error message,\n\t\t\t\t\t\t// but parsing will throw since there is no root element\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar currentTagName =\n\t\t\t\t\t\tunclosedTags[unclosedTags.length - 1] ||\n\t\t\t\t\t\tdomBuilder.currentElement.tagName ||\n\t\t\t\t\t\tdomBuilder.doc.documentElement.tagName ||\n\t\t\t\t\t\t'';\n\t\t\t\t\tif (currentTagName !== tagNameMatch[1]) {\n\t\t\t\t\t\tvar tagNameLower = tagNameMatch[1].toLowerCase();\n\t\t\t\t\t\tif (!isHTML || currentTagName.toLowerCase() !== tagNameLower) {\n\t\t\t\t\t\t\treturn errorHandler.fatalError('Opening and ending tag mismatch: \"' + currentTagName + '\" != \"' + tagNameRaw + '\"');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar config = parseStack.pop();\n\t\t\t\t\tunclosedTags.pop();\n\t\t\t\t\tvar localNSMap = config.localNSMap;\n\t\t\t\t\tdomBuilder.endElement(config.uri, config.localName, currentTagName);\n\t\t\t\t\tif (localNSMap) {\n\t\t\t\t\t\tfor (var prefix in localNSMap) {\n\t\t\t\t\t\t\tif (hasOwn(localNSMap, prefix)) {\n\t\t\t\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tend++;\n\t\t\t\t\tbreak;\n\t\t\t\t// end element\n\t\t\t\tcase '?': // \n\t\t\t\t\tlocator && position(tagStart);\n\t\t\t\t\tend = parseProcessingInstruction(source, tagStart, domBuilder, errorHandler);\n\t\t\t\t\tbreak;\n\t\t\t\tcase '!': // start) {\n\t\t\tstart = end;\n\t\t} else {\n\t\t\t//Possible sax fallback here, risk of positional error\n\t\t\tappendText(Math.max(tagStart, start) + 1);\n\t\t}\n\t}\n}\n\nfunction copyLocator(f, t) {\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n}\n\n/**\n * @returns\n * end of the elementStartPart(end of elementEndPart for selfClosed el)\n * @see {@link #appendElement}\n */\nfunction parseElementStartPart(source, start, el, currentNSMap, entityReplacer, errorHandler, isHTML) {\n\t/**\n\t * @param {string} qname\n\t * @param {string} value\n\t * @param {number} startIndex\n\t */\n\tfunction addAttribute(qname, value, startIndex) {\n\t\tif (hasOwn(el.attributeNames, qname)) {\n\t\t\treturn errorHandler.fatalError('Attribute ' + qname + ' redefined');\n\t\t}\n\t\tif (!isHTML && value.indexOf('<') >= 0) {\n\t\t\treturn errorHandler.fatalError(\"Unescaped '<' not allowed in attributes values\");\n\t\t}\n\t\tel.addValue(\n\t\t\tqname,\n\t\t\t// @see https://www.w3.org/TR/xml/#AVNormalize\n\t\t\t// since the xmldom sax parser does not \"interpret\" DTD the following is not implemented:\n\t\t\t// - recursive replacement of (DTD) entity references\n\t\t\t// - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA\n\t\t\tvalue.replace(/[\\t\\n\\r]/g, ' ').replace(ENTITY_REG, entityReplacer),\n\t\t\tstartIndex\n\t\t);\n\t}\n\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG; //status\n\twhile (true) {\n\t\tvar c = source.charAt(p);\n\t\tswitch (c) {\n\t\t\tcase '=':\n\t\t\t\tif (s === S_ATTR) {\n\t\t\t\t\t//attrName\n\t\t\t\t\tattrName = source.slice(start, p);\n\t\t\t\t\ts = S_EQ;\n\t\t\t\t} else if (s === S_ATTR_SPACE) {\n\t\t\t\t\ts = S_EQ;\n\t\t\t\t} else {\n\t\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\t\tthrow new Error('attribute equal must after attrName'); // No known test case\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"'\":\n\t\t\tcase '\"':\n\t\t\t\tif (\n\t\t\t\t\ts === S_EQ ||\n\t\t\t\t\ts === S_ATTR //|| s == S_ATTR_SPACE\n\t\t\t\t) {\n\t\t\t\t\t//equal\n\t\t\t\t\tif (s === S_ATTR) {\n\t\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"');\n\t\t\t\t\t\tattrName = source.slice(start, p);\n\t\t\t\t\t}\n\t\t\t\t\tstart = p + 1;\n\t\t\t\t\tp = source.indexOf(c, start);\n\t\t\t\t\tif (p > 0) {\n\t\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\t\taddAttribute(attrName, value, start - 1);\n\t\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\t\tthrow new Error(\"attribute value no end '\" + c + \"' match\");\n\t\t\t\t\t}\n\t\t\t\t} else if (s == S_ATTR_NOQUOT_VALUE) {\n\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\t\terrorHandler.warning('attribute \"' + attrName + '\" missed start quot(' + c + ')!!');\n\t\t\t\t\tstart = p + 1;\n\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t} else {\n\t\t\t\t\t//fatalError: no equal before\n\t\t\t\t\tthrow new Error('attribute value must after \"=\"'); // No known test case\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '/':\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase S_TAG:\n\t\t\t\t\t\tel.setTagName(source.slice(start, p));\n\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\t\ts = S_TAG_CLOSE;\n\t\t\t\t\t\tel.closed = true;\n\t\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\tcase S_ATTR:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\t\tel.closed = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t//case S_EQ:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error(\"attribute invalid close char('/')\"); // No known test case\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '': //end document\n\t\t\t\terrorHandler.error('unexpected end of input');\n\t\t\t\tif (s == S_TAG) {\n\t\t\t\t\tel.setTagName(source.slice(start, p));\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\tcase '>':\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase S_TAG:\n\t\t\t\t\t\tel.setTagName(source.slice(start, p));\n\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\t\tbreak; //normal\n\t\t\t\t\tcase S_ATTR_NOQUOT_VALUE: //Compatible state\n\t\t\t\t\tcase S_ATTR:\n\t\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\t\tif (value.slice(-1) === '/') {\n\t\t\t\t\t\t\tel.closed = true;\n\t\t\t\t\t\t\tvalue = value.slice(0, -1);\n\t\t\t\t\t\t}\n\t\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\t\tif (s === S_ATTR_SPACE) {\n\t\t\t\t\t\t\tvalue = attrName;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (s == S_ATTR_NOQUOT_VALUE) {\n\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + value + '\" missed quot(\")!');\n\t\t\t\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!isHTML) {\n\t\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + value + '\" missed value!! \"' + value + '\" instead!!');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\taddAttribute(value, value, start);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase S_EQ:\n\t\t\t\t\t\tif (!isHTML) {\n\t\t\t\t\t\t\treturn errorHandler.fatalError('AttValue: \\' or \" expected');\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\t\tcase '\\u0080':\n\t\t\t\tc = ' ';\n\t\t\tdefault:\n\t\t\t\tif (c <= ' ') {\n\t\t\t\t\t//space\n\t\t\t\t\tswitch (s) {\n\t\t\t\t\t\tcase S_TAG:\n\t\t\t\t\t\t\tel.setTagName(source.slice(start, p)); //tagName\n\t\t\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_ATTR:\n\t\t\t\t\t\t\tattrName = source.slice(start, p);\n\t\t\t\t\t\t\ts = S_ATTR_SPACE;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\t\t\tvar value = source.slice(start, p);\n\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + value + '\" missed quot(\")!!');\n\t\t\t\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t//case S_TAG_SPACE:\n\t\t\t\t\t\t//case S_EQ:\n\t\t\t\t\t\t//case S_ATTR_SPACE:\n\t\t\t\t\t\t//\tvoid();break;\n\t\t\t\t\t\t//case S_TAG_CLOSE:\n\t\t\t\t\t\t//ignore warning\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t//not space\n\t\t\t\t\t//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n\t\t\t\t\t//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\n\t\t\t\t\tswitch (s) {\n\t\t\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\n\t\t\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\t\t\tif (!isHTML) {\n\t\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + attrName + '\" missed value!! \"' + attrName + '\" instead2!!');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\taddAttribute(attrName, attrName, start);\n\t\t\t\t\t\t\tstart = p;\n\t\t\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\t\t\terrorHandler.warning('attribute space is required\"' + attrName + '\"!!');\n\t\t\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\t\t\tstart = p;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_EQ:\n\t\t\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\n\t\t\t\t\t\t\tstart = p;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t} //end outer switch\n\t\tp++;\n\t}\n}\n\n/**\n * @returns\n * `true` if a new namespace has been defined.\n */\nfunction appendElement(el, domBuilder, currentNSMap) {\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\tvar i = el.length;\n\twhile (i--) {\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif (nsp > 0) {\n\t\t\tvar prefix = (a.prefix = qName.slice(0, nsp));\n\t\t\tvar localName = qName.slice(nsp + 1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName;\n\t\t} else {\n\t\t\tlocalName = qName;\n\t\t\tprefix = null;\n\t\t\tnsPrefix = qName === 'xmlns' && '';\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName;\n\t\t//prefix == null for no ns prefix attribute\n\t\tif (nsPrefix !== false) {\n\t\t\t//hack!!\n\t\t\tif (localNSMap == null) {\n\t\t\t\tlocalNSMap = Object.create(null);\n\t\t\t\t_copy(currentNSMap, (currentNSMap = Object.create(null)));\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = NAMESPACE.XMLNS;\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value);\n\t\t}\n\t}\n\tvar i = el.length;\n\twhile (i--) {\n\t\ta = el[i];\n\t\tif (a.prefix) {\n\t\t\t//no prefix attribute has no namespace\n\t\t\tif (a.prefix === 'xml') {\n\t\t\t\ta.uri = NAMESPACE.XML;\n\t\t\t}\n\t\t\tif (a.prefix !== 'xmlns') {\n\t\t\t\ta.uri = currentNSMap[a.prefix];\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif (nsp > 0) {\n\t\tprefix = el.prefix = tagName.slice(0, nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp + 1);\n\t} else {\n\t\tprefix = null; //important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = (el.uri = currentNSMap[prefix || '']);\n\tdomBuilder.startElement(ns, localName, tagName, el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif (el.closed) {\n\t\tdomBuilder.endElement(ns, localName, tagName);\n\t\tif (localNSMap) {\n\t\t\tfor (prefix in localNSMap) {\n\t\t\t\tif (hasOwn(localNSMap, prefix)) {\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\t//parseStack.push(el);\n\t\treturn true;\n\t}\n}\n\nfunction parseHtmlSpecialContent(source, elStartEnd, tagName, entityReplacer, domBuilder) {\n\t// https://html.spec.whatwg.org/#raw-text-elements\n\t// https://html.spec.whatwg.org/#escapable-raw-text-elements\n\t// https://html.spec.whatwg.org/#cdata-rcdata-restrictions:raw-text-elements\n\t// TODO: https://html.spec.whatwg.org/#cdata-rcdata-restrictions\n\tvar isEscapableRaw = isHTMLEscapableRawTextElement(tagName);\n\tif (isEscapableRaw || isHTMLRawTextElement(tagName)) {\n\t\tvar elEndStart = source.indexOf('', elStartEnd);\n\t\tvar text = source.substring(elStartEnd + 1, elEndStart);\n\n\t\tif (isEscapableRaw) {\n\t\t\ttext = text.replace(ENTITY_REG, entityReplacer);\n\t\t}\n\t\tdomBuilder.characters(text, 0, text.length);\n\t\treturn elEndStart;\n\t}\n\treturn elStartEnd + 1;\n}\n\nfunction _copy(source, target) {\n\tfor (var n in source) {\n\t\tif (hasOwn(source, n)) {\n\t\t\ttarget[n] = source[n];\n\t\t}\n\t}\n}\n\n/**\n * @typedef ParseUtils\n * @property {function(relativeIndex: number?): string | undefined} char\n * Provides look ahead access to a singe character relative to the current index.\n * @property {function(): number} getIndex\n * Provides read-only access to the current index.\n * @property {function(reg: RegExp): string | null} getMatch\n * Applies the provided regular expression enforcing that it starts at the current index and\n * returns the complete matching string,\n * and moves the current index by the length of the matching string.\n * @property {function(): string} getSource\n * Provides read-only access to the complete source.\n * @property {function(places: number?): void} skip\n * moves the current index by places (defaults to 1)\n * @property {function(): number} skipBlanks\n * Moves the current index by the amount of white space that directly follows the current index\n * and returns the amount of whitespace chars skipped (0..n),\n * or -1 if the end of the source was reached.\n * @property {function(): string} substringFromIndex\n * creates a substring from the current index to the end of `source`\n * @property {function(compareWith: string): boolean} substringStartsWith\n * Checks if source contains `compareWith`,\n * starting from the current index.\n * @see {@link parseUtils}\n */\n\n/**\n * A temporary scope for parsing and look ahead operations in `source`,\n * starting from index `start`.\n *\n * Some operations move the current index by a number of positions,\n * after which `getIndex` returns the new index.\n *\n * @param {string} source\n * @param {number} start\n * @returns {ParseUtils}\n */\nfunction parseUtils(source, start) {\n\tvar index = start;\n\n\tfunction char(n) {\n\t\tn = n || 0;\n\t\treturn source.charAt(index + n);\n\t}\n\n\tfunction skip(n) {\n\t\tn = n || 1;\n\t\tindex += n;\n\t}\n\n\tfunction skipBlanks() {\n\t\tvar blanks = 0;\n\t\twhile (index < source.length) {\n\t\t\tvar c = char();\n\t\t\tif (c !== ' ' && c !== '\\n' && c !== '\\t' && c !== '\\r') {\n\t\t\t\treturn blanks;\n\t\t\t}\n\t\t\tblanks++;\n\t\t\tskip();\n\t\t}\n\t\treturn -1;\n\t}\n\tfunction substringFromIndex() {\n\t\treturn source.substring(index);\n\t}\n\tfunction substringStartsWith(text) {\n\t\treturn source.substring(index, index + text.length) === text;\n\t}\n\n\tfunction getMatch(args) {\n\t\tvar expr = g.reg('^', args);\n\t\tvar match = expr.exec(substringFromIndex());\n\t\tif (match) {\n\t\t\tskip(match[0].length);\n\t\t\treturn match[0];\n\t\t}\n\t\treturn null;\n\t}\n\treturn {\n\t\tchar: char,\n\t\tgetIndex: function () {\n\t\t\treturn index;\n\t\t},\n\t\tgetMatch: getMatch,\n\t\tgetSource: function () {\n\t\t\treturn source;\n\t\t},\n\t\tskip: skip,\n\t\tskipBlanks: skipBlanks,\n\t\tsubstringFromIndex: substringFromIndex,\n\t\tsubstringStartsWith: substringStartsWith,\n\t};\n}\n\n/**\n * @param {ParseUtils} p\n * @param {DOMHandler} errorHandler\n * @returns {string}\n */\nfunction parseDoctypeInternalSubset(p, errorHandler) {\n\t/**\n\t * @param {ParseUtils} p\n\t * @param {DOMHandler} errorHandler\n\t * @returns {string}\n\t */\n\tfunction parsePI(p, errorHandler) {\n\t\tvar match = g.PI.exec(p.substringFromIndex());\n\t\tif (!match) {\n\t\t\treturn errorHandler.fatalError('processing instruction is not well-formed at position ' + p.getIndex());\n\t\t}\n\t\tif (match[1].toLowerCase() === 'xml') {\n\t\t\treturn errorHandler.fatalError(\n\t\t\t\t'xml declaration is only allowed at the start of the document, but found at position ' + p.getIndex()\n\t\t\t);\n\t\t}\n\t\tp.skip(match[0].length);\n\t\treturn match[0];\n\t}\n\t// Parse internal subset\n\tvar source = p.getSource();\n\tif (p.char() === '[') {\n\t\tp.skip(1);\n\t\tvar intSubsetStart = p.getIndex();\n\t\twhile (p.getIndex() < source.length) {\n\t\t\tp.skipBlanks();\n\t\t\tif (p.char() === ']') {\n\t\t\t\tvar internalSubset = source.substring(intSubsetStart, p.getIndex());\n\t\t\t\tp.skip(1);\n\t\t\t\treturn internalSubset;\n\t\t\t}\n\t\t\tvar current = null;\n\t\t\t// Only in external subset\n\t\t\t// if (char() === '<' && char(1) === '!' && char(2) === '[') {\n\t\t\t// \tparseConditionalSections(p, errorHandler);\n\t\t\t// } else\n\t\t\tif (p.char() === '<' && p.char(1) === '!') {\n\t\t\t\tswitch (p.char(2)) {\n\t\t\t\t\tcase 'E': // ELEMENT | ENTITY\n\t\t\t\t\t\tif (p.char(3) === 'L') {\n\t\t\t\t\t\t\tcurrent = p.getMatch(g.elementdecl);\n\t\t\t\t\t\t} else if (p.char(3) === 'N') {\n\t\t\t\t\t\t\tcurrent = p.getMatch(g.EntityDecl);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'A': // ATTRIBUTE\n\t\t\t\t\t\tcurrent = p.getMatch(g.AttlistDecl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'N': // NOTATION\n\t\t\t\t\t\tcurrent = p.getMatch(g.NotationDecl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '-': // COMMENT\n\t\t\t\t\t\tcurrent = p.getMatch(g.Comment);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if (p.char() === '<' && p.char(1) === '?') {\n\t\t\t\tcurrent = parsePI(p, errorHandler);\n\t\t\t} else if (p.char() === '%') {\n\t\t\t\tcurrent = p.getMatch(g.PEReference);\n\t\t\t} else {\n\t\t\t\treturn errorHandler.fatalError('Error detected in Markup declaration');\n\t\t\t}\n\t\t\tif (!current) {\n\t\t\t\treturn errorHandler.fatalError('Error in internal subset at position ' + p.getIndex());\n\t\t\t}\n\t\t}\n\t\treturn errorHandler.fatalError('doctype internal subset is not well-formed, missing ]');\n\t}\n}\n\n/**\n * Called when the parser encounters an element starting with '') {\n\t\t\t\treturn errorHandler.fatalError('doctype not terminated with > at position ' + p.getIndex());\n\t\t\t}\n\t\t\tp.skip(1);\n\t\t\tdomBuilder.startDTD(doctype.name, doctype.publicId, doctype.systemId, doctype.internalSubset);\n\t\t\tdomBuilder.endDTD();\n\t\t\treturn p.getIndex();\n\t\t}\n\t\tdefault:\n\t\t\treturn errorHandler.fatalError('Not well-formed XML starting with \" 0) {\n\t\t\treturn errorHandler.fatalError(\n\t\t\t\t'processing instruction at position ' + start + ' is an xml declaration which is only at the start of the document'\n\t\t\t);\n\t\t}\n\t\tif (!g.XMLDecl.test(source.substring(start))) {\n\t\t\treturn errorHandler.fatalError('xml declaration is not well-formed');\n\t\t}\n\t}\n\tdomBuilder.processingInstruction(match[1], match[2]);\n\treturn start + match[0].length;\n}\n\nfunction ElementAttributes() {\n\tthis.attributeNames = Object.create(null);\n}\n\nElementAttributes.prototype = {\n\tsetTagName: function (tagName) {\n\t\tif (!g.QName_exact.test(tagName)) {\n\t\t\tthrow new Error('invalid tagName:' + tagName);\n\t\t}\n\t\tthis.tagName = tagName;\n\t},\n\taddValue: function (qName, value, offset) {\n\t\tif (!g.QName_exact.test(qName)) {\n\t\t\tthrow new Error('invalid attribute:' + qName);\n\t\t}\n\t\tthis.attributeNames[qName] = this.length;\n\t\tthis[this.length++] = { qName: qName, value: value, offset: offset };\n\t},\n\tlength: 0,\n\tgetLocalName: function (i) {\n\t\treturn this[i].localName;\n\t},\n\tgetLocator: function (i) {\n\t\treturn this[i].locator;\n\t},\n\tgetQName: function (i) {\n\t\treturn this[i].qName;\n\t},\n\tgetURI: function (i) {\n\t\treturn this[i].uri;\n\t},\n\tgetValue: function (i) {\n\t\treturn this[i].value;\n\t},\n\t//\t,getIndex:function(uri, localName)){\n\t//\t\tif(localName){\n\t//\n\t//\t\t}else{\n\t//\t\t\tvar qName = uri\n\t//\t\t}\n\t//\t},\n\t//\tgetValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},\n\t//\tgetType:function(uri,localName){}\n\t//\tgetType:function(i){},\n};\n\nexports.XMLReader = XMLReader;\nexports.parseUtils = parseUtils;\nexports.parseDoctypeCommentOrCData = parseDoctypeCommentOrCData;\n","/**\n * @classdesc\n * \n * Gestion du service de recherche de couches\n * \n * @module Search\n * @alias module:~services/Search\n * @fixme en attente d'evolution du service pour le filtrage sur le type \n * afin d'écarter des reponses de la recherche (ex. DOWNLOAD)\n * @see https://geoservices.ign.fr/documentation/services/services-geoplateforme/service-geoplateforme-de-recherche\n */\n\n/** resultats du service */\nlet m_suggestions = [];\n\n/** gestion annulation du fetch */\nlet controller = new AbortController();\n\n/** index de recherche */\nlet m_index = \"geoplateforme\";\n\n/** \n * liste des champs de recherche\n * valeurs : \"title, description, theme, keywords, layer_name\"\n */\nlet m_fields = \"title,layer_name\";\n\n/** nombre de suggestions du service */\nlet m_size = \"1000\";\n\n/** nombre maximum de réponses */\nlet m_maximumResponses = 10;\n\n/** \n * liste des filtres sur les services\n * @type {Array}\n * @example\n * valeurs : [\"WMTS\", \"TMS\", \"WMS\", \"WFS\", ...]\n */\nlet m_filterByService = [\"WMTS\", \"TMS\"];\n\n/** \n * liste des couches à exclure avec ces projections \n * @type {Array}\n * @example\n * [\"EPSG:4326\",...]\n */\nlet m_filterByProjection = [];\n\n/** \n * liste des couches priortaires dans la recherche\n * sous la forme : [name]\n * > mettre un poids au score des couches que l'on souhaite \n * > mettre en avant dans la recherche\n * \n * @type {Array}\n * @example\n * \"PLAN.IGN$GEOPORTAIL:GPP:TMS\" ou \"PLAN.IGN:TMS\" ou \"PLAN.IGN\"\n * \n */\nlet m_filterByLayerPriority = [];\n\n/** Prioriser les couches de type WMTS sur le service WMS */\nlet m_filterWMTSPriority = false;\n\n/** \n * filtres les services uniquement en TMS\n * @fixme en attente d'evolution du service pour determiner les \"real\" couches vecteurs\n * @type {Array}\n */\nlet m_filterByTMS = [\n \"ADMIN_EXPRESS\",\n \"ISOHYPSE\",\n \"PLAN.IGN\",\n \"OCSGE_2016\",\n \"OCSGE_2019\",\n \"PCI\",\n \"BDTOPO\"\n];\n\n/** url du service (template avec ${m_index}) */\nlet m_url = `https://data.geopf.fr/recherche/api/indexes/${m_index}/suggest`;\n\n/**\n * Interface pour les evenements\n * @example\n * target.dispatchEvent(new CustomEvent(\"myEvent\", { detail : {} }));\n * target.addEventListener(\"myEvent\", handler);\n */\nconst target = new EventTarget();\n\n/**\n * Appel du service de recherche\n * @param {*} text - recherche\n * @returns {Object} json\n * @fire suggest\n * @example\n * {\n * \"attribution\": {},\n * \"srs\": [\n * \"EPSG:3857\"\n * ],\n * \"keywords\": [],\n * \"extent\": {\n * \"type\": \"Polygon\",\n * \"coordinates\": [\n * [\n * [\n * 55.9423828,\n * -21.5354858\n * ],\n * [\n * 55.9423828,\n * 51.1237818\n * ],\n * [\n * -63.28125,\n * 51.1237818\n * ],\n * [\n * -63.28125,\n * -21.5354858\n * ],\n * [\n * 55.9423828,\n * -21.5354858\n * ]\n * ]\n * ]\n * },\n * \"metadata\": [],\n * \"name\": \"PLAN.IGN\",\n * \"title\": \"Plan IGN\",\n * \"description\": \"Plan IGN personnalisable\",\n * \"service\": \"TMS\",\n * \"url\": \"https://data.geopf.fr/tms/1.0.0/PLAN.IGN\"\n * }\n * @fire suggest\n */\nconst suggest = async (text) => {\n // ex. request\n // https://data.geopf.fr/recherche/api/indexes/geoplateforme/suggest?text=ORTHO&fields=title\n clear();\n\n controller = new AbortController();\n\n let url = new URL(m_url);\n let params = {\n text : text,\n fields : m_fields,\n size : m_size\n };\n\n Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));\n\n var response = await fetch(url, {\n // FIXME\n // signal : controller.signal\n });\n\n var results = await response.json();\n\n if (response.status !== 200) {\n throw new Error(response.message);\n }\n\n // ex. response\n // [\n // {\n // \"index\": \"geoplateforme\",\n // \"score\": 3.4832718,\n // \"source\": {\n // \"id\": \"fc2af911-d9c2-4fc8-aee7-46034eebf821\",\n // \"offering_id\": \"faa4c69c-d03b-4502-af87-7f3667411321\",\n // \"index_name\": \"geoplateforme\",\n // \"layer_name\": \"nl_bdtopo_allauch\",\n // \"title\": \"NL - BD Topo : Allauch\",\n // \"description\": \"Extrait de BD TOPo sur Allauch\",\n // \"type\": \"WMS\",\n // \"url\": \"https://data.geopf.fr/wms-v?service=WMS&version=1.3.0&request=GetMap&layers=nl_bdtopo_allauch&bbox={xmin},{ymin},{xmax},{ymax}&styles={styles}&width={width}&height={height}&srs={srs}&format={format}\",\n // \"open\": true,\n // \"publication_date\": \"2023-11-27\",\n // \"keywords\": [\n // \"BDTOPO\",\n // \"Recette\"\n // ],\n // \"extent\": {},\n // \"metadata_urls\": [],\n // \"srs\": [\n // \"EPSG:2154\"\n // ],\n // \"attribution\": {\n // \"title\": \"Ministère de la Transition écologique et de la Cohésion des territoires\",\n // \"url\": \"https://www.ecologie.gouv.fr/\",\n // \"logo\": {\n // \"format\": \"image/png\",\n // \"url\": \"https://data.geopf.fr/annexes/ressources/logos/mtect.png\",\n // \"width\": 294,\n // \"height\": 171\n // }\n // }\n // }\n // }\n // ]\n if (!results || results.length === 0) {\n return;\n }\n\n // INFO\n // Attribution d'un score bonus aux couches priortaires,\n // puis retriage des résultats en fonction du score\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n const found = m_filterByLayerPriority.findIndex((element) => { return element.includes(result.source.layer_name); });\n if (found >= 0) {\n results[i].score += 100;\n // console.log(\"found\", result);\n }\n }\n results.sort((a, b) => b.score - a.score);\n\n var filter = null;\n if (m_filterWMTSPriority) {\n filter = inventory(results);\n }\n\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n var services = (m_filterByService.length === 0 || m_filterByService.includes(result.source.type));\n // FIXME \n // utilisation le champ : result.source.open ?\n if (services) {\n if (unique().length >= m_maximumResponses) {\n break;\n }\n // INFO\n // champs possibles mais pas toujours remplis :\n // srs[], attributions{}, extent{}, metada_url[]\n var o = {\n attribution : result.source.attribution || {},\n srs : result.source.srs || [],\n keywords : result.source.keywords || [],\n extent : result.source.extent || {},\n metadata : result.source.metadata_urls || [], // mapping ?\n name : result.source.layer_name || \"\",\n title : result.source.title || \"\",\n description : result.source.description,\n service : result.source.type || \"\", // mapping\n url : result.source.url || \"\",\n tech : result.source.tech || {},\n tags : result.source.tags || {},\n theme : result.source.theme || \"\",\n producer : result.source.producer || \"\"\n };\n if (m_filterByTMS.length) {\n if ((o.service === \"WMTS\" && m_filterByTMS.includes(o.name)) ||\n (o.service === \"TMS\" && !m_filterByTMS.includes(o.name))) {\n continue;\n }\n }\n if (m_filterByProjection.length) {\n // FIXME Array !?\n if (m_filterByProjection.includes(o.srs[0])) {\n continue;\n }\n }\n if (filter && filter[o.name] && o.service === \"WMS\") {\n continue;\n }\n m_suggestions.push(o);\n // console.log(\"suggestion\", result);\n }\n }\n\n target.dispatchEvent(\n new CustomEvent(\"suggest\", {\n bubbles : true,\n detail : getSuggestions()\n })\n );\n\n return getSuggestions();\n};\n\n/**\n * Retourne la liste des suggestions sans doublons\n * @returns {Object} liste des suggestions sans doublons\n */\nconst unique = () => {\n return m_suggestions.filter((value, index, self) =>\n index === self.findIndex((t) => (\n t.service === value.service &&\n t.name === value.name &&\n t.title === value.title &&\n t.description === value.description\n ))\n );\n // INFO\n // soit on trie, \n // soit on laisse le trie natif en fonction du score\n // .sort((a, b) => {\n // // INFO\n // // titleA (WMTS)\n // // titleA (WMS)\n // // titleA (WFS)\n // // titleA (TMS)\n // // titleB (WMTS)\n // return a.title.localeCompare(b.title) || b.service - a.service;\n // });\n};\n\n/**\n * Clear\n */\nconst clear = () => {\n controller.abort();\n m_suggestions = [];\n};\n\n/** \n * Determine si une couche est associé avec des services WMS et/ou WMTS\n * \n * true : WMTS only ou WMTS avec des WMS associés ou pas\n * false : WMS only\n * @param {Array} results - réponse de la recherche\n * @returns {Object} - ...\n * @example\n * {\n * PLAN.IGN: true, // WMTS et des WMS\n * BDTOPO:batiments: false // uniquements des WMS\n * }\n */\nconst inventory = (results) => {\n var inventory = {};\n for (let i = 0; i < results.length; i++) {\n const type = results[i].source.type;\n const name = results[i].source.layer_name;\n if (type === \"WMTS\" || type === \"WMS\") {\n if (inventory[name] === undefined) {\n inventory[name] = type === \"WMTS\";\n }\n inventory[name] ||= type === \"WMTS\";\n }\n }\n // console.log(inventory);\n return inventory;\n};\n\n// getter (reponse)\n\n/**\n * Liste des suggestions (unique)\n * @returns {Array} Liste des suggestions (unique)\n */\nconst getSuggestions = () => {\n return unique();\n};\n/**\n * Liste des noms (unique)\n * @returns {Array} Liste des noms (unique)\n */\nconst getNames = () => {\n return unique().map((o) => { return o.name; });\n};\n/**\n * Liste des titres (unique)\n * @returns {Array} Liste des titres (unique)\n */\nconst getTitles = () => {\n return unique().map((o) => { return o.title; });\n};\n\n// setter (conf)\n\n/**\n * Renseigne le nom de l'indexe\n * @param {String} value - nom de l'indexe\n * @see m_index\n */\nconst setIndex = (value) => {\n m_index = value;\n};\n/**\n * Renseigne la liste des champs de recherche\n * @param {Array} value - liste des champs de recherche\n * @see m_fields\n */\nconst setFields = (value) => {\n m_fields = value;\n};\n/**\n * Renseigne le nombre de suggestions du service\n * @param {Number} value - le nombre de suggestions du service\n * @see m_size\n */\nconst setSize = (value) => {\n m_size = parseInt(value);\n};\n/**\n * Renseigne l'url du service\n * @param {String} value - url du service\n * @see m_url\n */\nconst setUrl = (value) => {\n m_url = eval(\"`\" + value + \"`\"); // insecure !\n};\n/**\n * Renseigne le nombre de réponse souhaitée\n * @param {Number} value - nombre de réponse\n * @see m_maximumResponses\n */\nconst setMaximumResponses = (value) => {\n m_maximumResponses = parseInt(value);\n};\n/**\n * Filtre sur la liste des services à selectionner\n * @param {String} value - liste de service\n * @see m_filterByService\n */\nconst setFiltersByService = (value) => {\n m_filterByService = value === \"\" ? [] : value.split(\",\");\n};\n/**\n * Filtre sur les couches à exclure\n * @param {String} value - liste des projections\n * @see m_filterByProjection\n */\nconst setFiltersByProjection = (value) => {\n m_filterByProjection = value === \"\" ? [] : value.split(\",\");\n};\n/**\n * Filtre sur les couches prioritaires dans la recherche\n * @param {String} value - liste des couches prioritaires\n * @see m_filterByLayerPriority\n */\nconst setFiltersByLayerPriority = (value) => {\n m_filterByLayerPriority = value === \"\" ? [] : value.split(\",\");\n};\n/** \n * Active ou non le filtre 'strange' \n * @param {Boolean} value - active le filtre\n */\nconst setFilterWMTSPriority = (value) => {\n m_filterWMTSPriority = value;\n};\n/**\n * Filtre sur les \"purs\" couches vecteurs tuilés\n * @param {String} value - liste des couches\n * @see m_filterByTMS\n */\nconst setFiltersByTMS = (value) => {\n m_filterByTMS = value === \"\" ? [] : value.split(\",\");\n};\n/**\n * Mise à jour de la liste des \"purs\" couches vecteurs tuilés\n * @param {String} value - url\n */\nconst updateFilterByTMS = async (value) => {\n var url = value;\n if (!url) {\n url = \"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/vectorTileConfig/fullVectorTileConfig.json\";\n }\n const response = await fetch(url);\n const results = await response.json();\n\n if (response.status !== 200) {\n throw new Error(response.message);\n }\n\n if (!results) {\n throw new Error(\"Liste vide !\");\n }\n\n var lstName = Object.keys(results.layers).map((k) => { return k.split(\"$\")[0]; });\n if (lstName) {\n setFiltersByTMS(lstName.toString());\n }\n\n return m_filterByTMS;\n};\n\nexport default {\n target,\n suggest,\n clear,\n getSuggestions,\n getNames,\n getTitles,\n setIndex,\n setFields,\n setSize,\n setUrl,\n setMaximumResponses,\n setFiltersByService,\n setFiltersByTMS,\n updateFilterByTMS,\n setFiltersByProjection,\n setFiltersByLayerPriority,\n setFilterWMTSPriority\n};\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version v4.2.8+1e68dce6\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\n\n\nvar _isArray = void 0;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var vertx = Function('return this')().require('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n\n if (_state) {\n var callback = arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve$1(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n try {\n then$$1.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then$$1, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$1 === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$1)) {\n handleForeignThenable(promise, maybeThenable, then$$1);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n var then$$1 = void 0;\n try {\n then$$1 = value.then;\n } catch (error) {\n reject(promise, error);\n return;\n }\n handleMaybeThenable(promise, value, then$$1);\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = void 0,\n callback = void 0,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = void 0,\n error = void 0,\n succeeded = true;\n\n if (hasCallback) {\n try {\n value = callback(detail);\n } catch (e) {\n succeeded = false;\n error = e;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (succeeded === false) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n}\n\nvar Enumerator = function () {\n function Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n }\n\n Enumerator.prototype._enumerate = function _enumerate(input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n var c = this._instanceConstructor;\n var resolve$$1 = c.resolve;\n\n\n if (resolve$$1 === resolve$1) {\n var _then = void 0;\n var error = void 0;\n var didError = false;\n try {\n _then = entry.then;\n } catch (e) {\n didError = true;\n error = e;\n }\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise$1) {\n var promise = new c(noop);\n if (didError) {\n reject(promise, error);\n } else {\n handleMaybeThenable(promise, entry, _then);\n }\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$1) {\n return resolve$$1(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$1(entry), i);\n }\n };\n\n Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n var promise = this.promise;\n\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n };\n\n Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n };\n\n return Enumerator;\n}();\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all(entries) {\n return new Enumerator(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {Function} resolver\n Useful for tooling.\n @constructor\n*/\n\nvar Promise$1 = function () {\n function Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n }\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n Chaining\n --------\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n Assimilation\n ------------\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n If the assimliated promise rejects, then the downstream promise will also reject.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n Simple Example\n --------------\n Synchronous Example\n ```javascript\n let result;\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n Advanced Example\n --------------\n Synchronous Example\n ```javascript\n let author, books;\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n function foundBooks(books) {\n }\n function failure(reason) {\n }\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n\n\n Promise.prototype.catch = function _catch(onRejection) {\n return this.then(null, onRejection);\n };\n\n /**\n `finally` will be invoked regardless of the promise's fate just as native\n try/catch/finally behaves\n \n Synchronous example:\n \n ```js\n findAuthor() {\n if (Math.random() > 0.5) {\n throw new Error();\n }\n return new Author();\n }\n \n try {\n return findAuthor(); // succeed or fail\n } catch(error) {\n return findOtherAuther();\n } finally {\n // always runs\n // doesn't affect the return value\n }\n ```\n \n Asynchronous example:\n \n ```js\n findAuthor().catch(function(reason){\n return findOtherAuther();\n }).finally(function(){\n // author was either found, or not\n });\n ```\n \n @method finally\n @param {Function} callback\n @return {Promise}\n */\n\n\n Promise.prototype.finally = function _finally(callback) {\n var promise = this;\n var constructor = promise.constructor;\n\n if (isFunction(callback)) {\n return promise.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n throw reason;\n });\n });\n }\n\n return promise.then(callback, callback);\n };\n\n return Promise;\n}();\n\nPromise$1.prototype.then = then;\nPromise$1.all = all;\nPromise$1.race = race;\nPromise$1.resolve = resolve$1;\nPromise$1.reject = reject$1;\nPromise$1._setScheduler = setScheduler;\nPromise$1._setAsap = setAsap;\nPromise$1._asap = asap;\n\n/*global self*/\nfunction polyfill() {\n var local = void 0;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$1;\n}\n\n// Strange compat..\nPromise$1.polyfill = polyfill;\nPromise$1.Promise = Promise$1;\n\nreturn Promise$1;\n\n})));\n\n\n\n//# sourceMappingURL=es6-promise.map\n","(function(root,factory){if(typeof exports===\"object\"&&typeof module===\"object\")module.exports=factory();else if(typeof define===\"function\"&&define.amd)define(\"EventBus\",[],factory);else if(typeof exports===\"object\")exports[\"EventBus\"]=factory();else root[\"EventBus\"]=factory()})(this,function(){var EventBusClass={};EventBusClass=function(){this.listeners={}};EventBusClass.prototype={addEventListener:function(type,callback,scope){var args=[];var numOfArgs=arguments.length;for(var i=0;i3?args.splice(3,args.length-1):[];if(typeof this.listeners[type]!=\"undefined\"){this.listeners[type].push({scope:scope,callback:callback,args:args})}else{this.listeners[type]=[{scope:scope,callback:callback,args:args}]}},removeEventListener:function(type,callback,scope){if(typeof this.listeners[type]!=\"undefined\"){var numOfCallbacks=this.listeners[type].length;var newArray=[];for(var i=0;i0}for(var i=0;i2?args.splice(2,args.length-1):[];args=[event].concat(args);if(typeof this.listeners[type]!=\"undefined\"){var listeners=this.listeners[type].slice();var numOfCallbacks=listeners.length;for(var i=0;i= 0 && level <= self.levels.SILENT) {\n return level;\n } else {\n throw new TypeError(\"log.setLevel() called with invalid level: \" + input);\n }\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n if (userLevel != null) {\n return userLevel;\n } else if (defaultLevel != null) {\n return defaultLevel;\n } else {\n return inheritedLevel;\n }\n };\n\n self.setLevel = function (level, persist) {\n userLevel = normalizeLevel(level);\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(userLevel);\n }\n\n // NOTE: in v2, this should call rebuild(), which updates children.\n return replaceLoggingMethods.call(self);\n };\n\n self.setDefaultLevel = function (level) {\n defaultLevel = normalizeLevel(level);\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.resetLevel = function () {\n userLevel = null;\n clearPersistedLevel();\n replaceLoggingMethods.call(self);\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n self.rebuild = function () {\n if (defaultLogger !== self) {\n inheritedLevel = normalizeLevel(defaultLogger.getLevel());\n }\n replaceLoggingMethods.call(self);\n\n if (defaultLogger === self) {\n for (var childName in _loggersByName) {\n _loggersByName[childName].rebuild();\n }\n }\n };\n\n // Initialize all the internal levels.\n inheritedLevel = normalizeLevel(\n defaultLogger ? defaultLogger.getLevel() : \"WARN\"\n );\n var initialLevel = getPersistedLevel();\n if (initialLevel != null) {\n userLevel = normalizeLevel(initialLevel);\n }\n replaceLoggingMethods.call(self);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n defaultLogger = new Logger();\n\n defaultLogger.getLogger = function getLogger(name) {\n if ((typeof name !== \"symbol\" && typeof name !== \"string\") || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name,\n defaultLogger.methodFactory\n );\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = (typeof window !== undefinedType) ? window.log : undefined;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n };\n\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n // ES6 default export, for compatibility\n defaultLogger['default'] = defaultLogger;\n\n return defaultLogger;\n}));\n","\"use strict\";\n\n// ref: https://github.com/tc39/proposal-global\nvar getGlobal = function () {\n\t// the only reliable means to get the global object is\n\t// `Function('return this')()`\n\t// However, this causes CSP violations in Chrome apps.\n\tif (typeof self !== 'undefined') { return self; }\n\tif (typeof window !== 'undefined') { return window; }\n\tif (typeof global !== 'undefined') { return global; }\n\tthrow new Error('unable to locate global object');\n}\n\nvar globalObject = getGlobal();\n\nmodule.exports = exports = globalObject.fetch;\n\n// Needed for TypeScript and Webpack.\nif (globalObject.fetch) {\n\texports.default = globalObject.fetch.bind(globalObject);\n}\n\nexports.Headers = globalObject.Headers;\nexports.Request = globalObject.Request;\nexports.Response = globalObject.Response;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = ol.Overlay;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.VectorTile;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.Vector;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.TileWMS;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.WMTS;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.ImageWMS;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.interaction;","import * as Log from \"loglevel\";\n\nvar LoggerByDefault = {\n /**\n * logger statique\n *\n * @static\n * @param {String} name - nom du logger\n * @returns {Object} retourne un logger\n */\n getLogger : function (name) {\n // Substitute global constants configured at compile time\n // cf. webpack.config.js\n // on définit process si non défini dans l'environnement\n // eslint-disable-next-line no-use-before-define\n if (typeof process === \"undefined\") {\n var process = {};\n process.env = {\n VERBOSE : false\n };\n }\n (process.env.VERBOSE) ? Log.enableAll() : Log.disableAll();\n var logname = name || \"default\";\n return Log.getLogger(logname);\n }\n};\n\nexport default LoggerByDefault;\n","/**\n * Classe de gestion des erreurs qui permer d'associer un message d'erreur à l'exception lancée.\n *\n * @example\n * MessagesResources.getMessage(\"ERROR_PARAM_MISSING\", \"x\", \"y\", \"z\")));\n * // --> output : Parameter(s) 'x - y - z' missing\n *\n * @module MessagesResources\n * @alias Gp.Utils.MessagesResources\n * @private\n */\nvar MessagesResources = {\n\n // Paramètres\n PARAM_MISSING : \"Parameter(s) '%var%' missing\",\n PARAM_EMPTY : \"Parameter(s) '%var%' empty\",\n PARAM_TYPE : \"Wrong type(s) for parameter(s) '%var%'\",\n PARAM_FORMAT : \"Parameter(s) '%var%' not correctly formatted\",\n PARAM_NOT_SUPPORT : \"Value(s) for parameter(s) '%var%' not supported\",\n PARAM_NOT_SUPPORT_NODEJS : \"Value(s) for parameter(s) '%var%' not supported to NodeJS\",\n PARAM_UNKNOWN : \"Value(s) for parameter(s) '%var%' unknown\",\n\n // Services\n // Requête\n SERVICE_REQUEST_BUILD : \"An error occurred during the request building of the service\",\n SERVICE_REQUEST_EMPTY : \"The request sent to the service is empty\",\n\n // Réponse\n SERVICE_RESPONSE_EXCEPTION : \"The service returned an exception : '%var%'\",\n SERVICE_RESPONSE_EXCEPTION_2 : \"The service returned an exception\",\n SERVICE_RESPONSE_ANALYSE : \"An error occurred while parsing the response '%var%' of the service\",\n SERVICE_RESPONSE_ANALYSE_2 : \"An unknown error occurred while parsing the response\",\n SERVICE_RESPONSE_EMPTY : \"The response of the service is empty\",\n SERVICE_RESPONSE_EMPTY_2 : \"The response from the service could not be analyzed or is empty\",\n SERVICE_RESPONSE_FORMAT : \"The format of the service response is not supported (handled format(s) : '%var%')\",\n SERVICE_RESPONSE_FORMAT_2 : \"The format of the service response is not supported\",\n SERVICE_RESPONSE_FORMAT_3 : \"No suggestion matching the search\",\n\n // Classes\n CLASS_CONSTRUCTOR : \"'%var%' constructor cannot be called as a function.\",\n\n /**\n * Fonction qui va retourner le message d'erreur associé à la clé donnée\n *\n * @method getMessage\n * @param {String} clef - Clef de l'erreur (ex : ERROR_PARAM)\n * @param {String[]} parametres - Paramètres/variables concernés par le message d'erreur associé à la clef donnée\n * @return {String} message - String contenant le message de l'exception\n */\n getMessage : function (clef, parametres) {\n // param de la fonction uniquement pour la documentation...\n\n if (Object.keys(arguments).length === 0) {\n return \"Message indefined !\";\n }\n\n var params = Array.prototype.slice.call(arguments);\n var key = params.shift();\n var args = params;\n\n var message = this[key];\n\n try {\n if (Array.isArray(args) && args.length > 0) {\n message = message.replace(\"%var%\", args.join(\" - \"));\n } else {\n message = message.replace(\"%var%\", \"%var% (not specified)\");\n }\n } catch (e) {\n // error de string.replace()\n\n }\n\n return message;\n }\n};\n\nexport default MessagesResources;\n","/**\n * Classe utilitaire\n *\n * @module Helper\n * @alias Gp.Helper\n */\nvar Helper = {\n\n /**\n * concatenation des parametres key/value dans les urls\n *\n * @method normalyzeParameters\n * @static\n * @param {Object} params - tableau de clef/valeur\n *\n * @example\n * Gp.Utils.Helper.normalyzeParameters ({\n * key1:value1,\n * key2:value2,\n * key3:value3\n * });\n * // out : \"key1=value1&key2=value2&key3=value3\"\n *\n * @returns {String} retourne les paramètres concaténés\n */\n normalyzeParameters : function (params) {\n var myParams = null;\n\n if (params) {\n var tabParams = [];\n for (var key in params) {\n if (params.hasOwnProperty(key)) {\n var value = params[key];\n if (!value) {\n value = \"\";\n }\n tabParams.push(key + \"=\" + value);\n }\n }\n\n myParams = tabParams.join(\"&\");\n }\n\n return myParams;\n },\n\n /**\n * Concaténation et encodage des urls.\n *\n * @method normalyzeUrl\n * @static\n * @param {String} url - url\n * @param {Object|String} params - tableau de clef/valeur ou string\n * @param {Boolean} encode - true|false, false par defaut\n *\n * @example\n * Gp.Utils.Helper.normalyzeUrl (url, {\n * key1:value1,\n * key2=:value2,\n * key3:value3\n * });\n * // out : \"url?key1=value1&key2=value2&key3=value3\"\n *\n * @returns {String} retourne une url normalisée\n */\n normalyzeUrl : function (url, params, encode) {\n var myUrl = url;\n\n if (url) {\n if (url.split(\"?\").length - 1 >= 2) {\n // S'il y a plusieurs \"?\" dans l'URL, on garde le premier et on remplace les autres par des &\n var firstOccuranceIndex = url.search(/\\?/) + 1;\n myUrl = url.substring(0, firstOccuranceIndex) + url.slice(firstOccuranceIndex).replace(/\\?/g, \"&\");\n }\n\n var k = url.indexOf(\"?\");\n if (k === -1) { // pas de ? et KVP\n myUrl += \"?\";\n }\n\n if (k !== -1 && k !== url.length - 1) { // KVP\n myUrl += \"&\";\n }\n }\n\n if (params) {\n if (typeof params === \"string\") {\n params = params.replace(\"?\", \"\");\n myUrl += params;\n } else {\n myUrl += this.normalyzeParameters(params);\n }\n }\n\n if (encode) {\n // FIXME bonne idée ?\n myUrl = encodeURIComponent(myUrl);\n }\n\n return myUrl;\n },\n\n /**\n * Indentation d'une chaine\n *\n * @method indent\n * @static\n * @param {Number} n - nombre de tabulation\n * @param {String} msg - chaine\n *\n * @example\n * Gp.Utils.Helper.indent (2, \"message à indenter\")\n * // out\n * // ........message à indenter\n *\n * @returns {String} retourne une chaine indentée\n */\n indent : function (n, msg) {\n var num = n || 0;\n return new Array(num + 1).join(\"\\t\") + msg;\n }\n};\n\nexport default Helper;\n","/* global Promise, require, XDomainRequest */\n\nimport Logger from \"../Utils/LoggerByDefault\";\nimport Helper from \"../Utils/Helper\";\nimport ES6Promise from \"es6-promise\";\n// import __request from \"request\";\n// import __xmldom from \"xmldom\";\n\n/**\n * Ajax Request (use of Promises)\n *\n * @module XHR\n * @alias Gp.Protocols.XHR\n * @see dependance 'es6-promise'\n */\n\n// cf. https://xhr.spec.whatwg.org/\n// cf. https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest\n\nvar XHR = {\n\n /**\n * Interface unique d'envoi d'une requête.\n *\n * @method call\n * @static\n * @param {Object} settings - options generales\n * @param {String} settings.url - url du service\n * @param {String} settings.method - GET, POST, PUT, DELETE\n * @param {String} settings.format - format de la reponse du service : json, xml ou null (brute)\n * @param {String} settings.data - content (post) ou param (get)\n * @param {String} settings.proxy - proxy url\n * @param {Object|String} settings.headers - (post) ex. referer\n * @param {Object|String} settings.content - (post) ex. 'application/json'\n * @param {String} settings.timeOut - timeout = 0 par defaut\n * @param {String} settings.scope - this\n * @param {Function} settings.onResponse - callback\n * @param {Function} settings.onFailure - callback\n */\n call : function (settings) {\n // logger\n var logger = Logger.getLogger(\"XHR\");\n logger.trace(\"[XHR::call()]\");\n\n // FIXME\n // To polyfill the global environment\n ES6Promise.polyfill();\n\n // test sur les settings obligatoires\n if (!settings.url) {\n throw new Error(\"missing parameter : url is not defined !\");\n }\n\n if (!settings.method) {\n throw new Error(\"missing parameter : method is not defined !\");\n }\n\n if (!settings.format) {\n settings.format = \"text\"; // reponse brute !\n }\n\n var options = {};\n options.url = settings.url;\n options.data = settings.data ? settings.data : null;\n options.method = settings.method;\n options.timeOut = settings.timeOut || 0;\n options.scope = settings.scope || this;\n options.proxy = settings.proxy || null;\n options.content = settings.content || null;\n options.headers = settings.headers || {\n referer : \"http://localhost\"\n };\n\n // test sur les valeurs de 'settings.method'\n switch (settings.method) {\n case \"DELETE\":\n case \"GET\":\n break;\n case \"PUT\":\n case \"POST\":\n // on force sur ces params spécifiques au mode POST\n options.content = settings.content ? settings.content : \"application/x-www-form-urlencoded\"; // FIXME en attente des services : bascule en \"application/xml\" ou \"application/json\"\n options.headers = settings.headers ? settings.headers : { referer : \"http://localhost\" }; // FIXME parametrable...\n break;\n case \"HEAD\":\n case \"OPTIONS\":\n throw new Error(\"HTTP method not yet supported !\");\n default:\n throw new Error(\"HTTP method unknown !\");\n }\n\n // test sur les valeurs de 'settings.format'\n switch (settings.format) {\n case \"text\":\n this.__call(options)\n .then(function (response) {\n logger.trace(response);\n settings.onResponse.call(this, response);\n })\n .catch(function (error) {\n settings.onFailure.call(this, error);\n });\n break;\n case \"json\":\n this.__callJSON(options)\n .then(function (response) {\n logger.trace(response);\n settings.onResponse.call(this, response);\n })\n .catch(function (error) {\n settings.onFailure.call(this, error);\n });\n break;\n case \"xml\":\n this.__callXML(options)\n .then(function (response) {\n logger.trace(response);\n settings.onResponse.call(this, response);\n })\n .catch(function (error) {\n settings.onFailure.call(this, error);\n });\n break;\n default:\n throw new Error(\"This output Format is not yet supported !\");\n }\n },\n\n /**\n * Requete\n *\n * @method __call\n * @private\n * @param {Object} options - options\n * @return {Object} promise\n */\n __call : function (options) {\n var logger = Logger.getLogger(\"XHR\");\n logger.trace(\"[XHR::__call()]\");\n\n var promise = new Promise(\n function (resolve, reject) {\n // traitement du corps de la requête\n var corps = (options.method === \"POST\" || options.method === \"PUT\") ? 1 : 0;\n\n // seulement si options.data n'est pas vide (peut être un objet ou une chaine de caractères)\n if (options.data && ((typeof options.data === \"object\" && Object.keys(options.data).length) || (typeof options.data === \"string\" && options.data.length)) && !corps) {\n options.url = Helper.normalyzeUrl(options.url, options.data);\n }\n\n logger.trace(\"URL = \", options.url);\n\n var hXHR = null;\n\n // test on env. nodejs or browser\n if (typeof window === \"undefined\") {\n var nodefetch = require(\"node-fetch\");\n\n var opts = {\n headers : {\n Referer : \"https://localhost\"\n }\n };\n\n if (options.data && typeof options.data === \"string\" && corps) {\n opts = {\n method : options.method,\n body : options.data,\n headers : {\n \"Content-Type\" : options.content,\n Referer : \"https://localhost\"\n }\n };\n }\n\n return nodefetch(options.url, opts)\n .then(function (response) {\n if (response.ok) { // res.status >= 200 && res.status < 300\n resolve(response.text());\n } else {\n var message = \"Errors Occured on Http Request (status : '\" + response.statusText + \"' | url : '\" + response.url + \"')\";\n var status = response.status;\n reject({\n message : message,\n status : status\n });\n }\n })\n .catch(function (e) {\n reject({\n message : e,\n status : -1\n });\n });\n } else {\n if (window.XMLHttpRequest) {\n logger.trace(\"XMLHttpRequest\");\n\n hXHR = new XMLHttpRequest();\n hXHR.open(options.method, options.url, true); // async\n hXHR.overrideMimeType = options.content;\n\n // gestion du timeout\n var onTimeOutTrigger = null;\n if (options.timeOut > 0) {\n // FIXME le timeout interne ne me permet pas de declencher le bon message...\n // hXHR.timeout = options.timeOut;\n logger.trace(\"XHR - TimeOut actif !\");\n /**\n * Description\n *\n * @method onTimeOutTrigger\n * @private\n */\n onTimeOutTrigger = window.setTimeout(\n function () {\n var message = \"TimeOut Occured on Http Request with XMLHttpRequest !\";\n reject({\n message : message,\n status : -1\n });\n }, options.timeOut);\n }\n\n if (corps) {\n // headers, data, content of data\n // cf. https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-setrequestheader\n logger.trace(\"data = \", options.data);\n hXHR.setRequestHeader(\"Content-type\", options.content);\n // FIXME refused to set unsafe header content-length javascript\n // hXHR.setRequestHeader (\"Content-length\", options.data.length);\n // hXHR.setRequestHeader (\"Referer\", options.headers.referer);\n }\n\n /**\n * On Error\n * FIXME ne se declenche pas !?\n *\n * @param {Object} e - Event\n * @method onerror\n * @private\n */\n hXHR.onerror = function (e) {\n console.log(e);\n reject(new Error(\"Errors Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * On Timeout\n * FIXME ne se declenche pas !?\n *\n * @param {Object} e - Event\n * @method ontimeout\n * @private\n */\n hXHR.ontimeout = function (e) {\n console.log(e);\n reject(new Error(\"TimeOut Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * Description\n *\n * @method onreadystatechange\n * @private\n */\n hXHR.onreadystatechange = function (e) {\n if (hXHR.readyState === 4) { // DONE\n if (hXHR.status === 200) {\n window.clearTimeout(onTimeOutTrigger);\n resolve(hXHR.response);\n } else {\n var message = \"Errors Occured on Http Request (status : '\" + e.target.statusText + \"' | url : '\" + e.target.responseURL + \"' | response : '\" + e.target.response + \"')\";\n var status = e.target.status;\n reject({\n message : message,\n status : status\n });\n }\n }\n };\n\n // gestion du content data\n var data4xhr = (options.data && corps) ? options.data : null;\n\n hXHR.send(data4xhr);\n } else if (window.XDomainRequest) {\n // worked in Internet Explorer 8–10 only !\n logger.trace(\"XDomainRequest\");\n\n hXHR = new XDomainRequest();\n hXHR.open(options.method, options.url);\n\n hXHR.overrideMimeType = options.content;\n\n if (options.timeOut > 0) {\n hXHR.timeout = options.timeout;\n logger.trace(\"XHR - TimeOut actif !\");\n }\n\n if (corps) {\n // headers, data, content of data\n // cf. https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-setrequestheader\n hXHR.setRequestHeader(\"Content-type\", options.content);\n // FIXME refused to set unsafe header content-length javascript\n // hXHR.setRequestHeader (\"Content-length\", options.data.length);\n // hXHR.setRequestHeader (\"Referer\", options.headers.referer);\n }\n\n /**\n * Description\n *\n * @method onerror\n * @private\n */\n hXHR.onerror = function () {\n reject(new Error(\"Errors Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * Description\n *\n * @method ontimeout\n * @private\n */\n hXHR.ontimeout = function () {\n reject(new Error(\"TimeOut Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * On Load\n *\n * @method onload\n * @private\n */\n hXHR.onload = function (e) {\n if (hXHR.status === 200) {\n resolve(hXHR.responseText);\n } else {\n var message = \"Errors Occured on Http Request (status : '\" + e.target.statusText + \"' | url : '\" + e.target.responseURL + \"')\";\n var status = e.target.status;\n reject({\n message : message,\n status : status\n });\n }\n };\n\n var data4xdr = (options.data && corps) ? options.data : null;\n\n hXHR.send(data4xdr);\n } else {\n throw new Error(\"CORS not supported\");\n }\n }\n }\n );\n\n return promise;\n },\n\n /**\n * Requete avec parser JSON\n *\n * @method __callJSON\n * @private\n * @param {Object} options - options\n * @return {Object} promise\n */\n __callJSON : function (options) {\n return this.__call(options)\n .then(JSON.parse)\n .catch(function (error) {\n console.log(\"_callJSON failed on : \", options.url, error);\n // FIXME pas d'exception, laissons le fil se derouler...\n // throw error;\n });\n },\n\n /**\n * Requete avec parser XML\n *\n * @method __callXML\n * @private\n * @param {Object} options - options\n * @return {Object} promise\n */\n __callXML : function (options) {\n return this.__call(options)\n .then(function (response) {\n var xmlDoc;\n\n // test on env. nodejs or browser\n if (typeof window === \"undefined\") {\n var DOMParser = require(\"@xmldom/xmldom\").DOMParser; // __xmldom.DOMParser\n xmlDoc = new DOMParser().parseFromString(response, \"text/xml\");\n } else {\n if (window.DOMParser) {\n var parser = new window.DOMParser();\n xmlDoc = parser.parseFromString(response, \"text/xml\");\n } else { // IE\n xmlDoc = new window.ActiveXObject(\"Microsoft.XMLDOM\");\n xmlDoc.async = false;\n xmlDoc.loadXML(response);\n }\n }\n\n return xmlDoc;\n })\n .catch(function (error) {\n console.log(\"__callXML failed on : \", options.url, error);\n // FIXME pas d'exception, laissons le fil se derouler...\n // throw error;\n });\n }\n\n};\n\nexport default XHR;\n","/**\n * JSONP : Implémentation du protocole JSONP de la plateforme Géoportail\n *\n * @module JSONP\n * @private\n * @alias Gp.Protocols.JSONP\n */\nimport Logger from \"../Utils/LoggerByDefault\";\n\n// cf. https://github.com/sobstel/jsonp.js\nvar JSONP = {\n\n /**\n * Construction d'un identifiant statique basé sur le timestamp,\n * et qui s'incremente de +1 à chaque appel\n */\n uuid : (function () {\n var id = Math.floor(Date.now());\n return function () {\n return id++;\n };\n })(),\n\n /**\n * Cette fonction réalise l'appel du service fourni via le paramètre \"options.url\"\n * en mettant en œuvre le protocole JSONP.\n *\n * @method call\n * @static\n * @param {Object} options - parametres d'invocation du service en JSONP\n * @param {String} options.url - URL du service à invoquer (indépendamment du protocole JSONP).\n * Cette URL contient déjà les paramètres du service.\n * Si le paramètre dédié à la mise en oeuvre du protocole JSONP (callback=xxx) n'est pas présent, il est rajouté par la fonction ;\n * sa valeur est déterminée en fonction du paramètre callbackName.\n * @param {Number} [options.timeOut = 0] - Nombre de ms au bout duquel on considère que le service n'a pas répondu.\n * Une valeur de 0 pour ce paramètre permet de désactiver la gestion du timeOut.\n * @param {String} [options.callbackSuffix = null] - Suffixe de la fonction de callback à rajouter sur l'URL.\n * Si aucun suffixe n'est spécifié (cas par défaut), on utilisera l'identifiant this.uuid () comme suffixe. Ex: \"callback1458574396582 ()\"\n * @param {String} [options.callbackName = gp.protocol.jsonp] - Valeur du paramètre callback à rajouter sur l'URL.\n * Si l'URL fournie contient déjà le paramètre callback, le paramètre callbackName ne sera pas pris en compte.\n * La fonction de callback est créée dynamiquement par la fonction JSONP ;\n * elle a deux fonctions :\n * elle annule la condition de timeOut\n * puis appelle la fonction fournie par l'utilisateur via le paramètre onResponse.\n * @param {Function} options.onResponse - Nom de la fonction qui sera appelée lors de la réception des résultats du service.\n * Ce paramètre sera ignoré si l'URL contient déjà le paramètre callback.\n * La fonction de rappel appelée sera alors celle ayant pour nom la valeur de ce paramètre.\n * @param {Function} [options.onTimeOut] - Nom de la fonction qui sera appelée en cas de non réponse du service.\n * Le temps au bout duquel on considère que le service n'a pas répondu est déterminé par le paramètre timeOut.\n * @example\n * var options = {\n * url : 'http://localhost/some/test.json&callback=myResults',\n * timeOut : 100,\n * callbackName : 'myResults',\n * callbackSuffix : \"\",\n * onResponse : function (response) {\n * console.log('results : ', response);\n * },\n *\n * };\n * JSONP.call(options);\n */\n call : function (options) {\n // logger\n var logger = Logger.getLogger(\"JSONP\");\n logger.trace(\"[JSONP::call ()]\");\n\n // analyse parametres\n\n if (!options) {\n logger.error(\"missing parameter : options !\");\n throw new Error(\"missing parameter : options !\");\n }\n\n if (!options.url) {\n logger.error(\"missing parameter : options.url !\");\n throw new Error(\"missing parameter : options.url !\");\n }\n\n if (!options.timeOut) {\n logger.info(\"setting 'options.timeOut' default value\");\n options.timeOut = 0;\n }\n\n // FIXME si un callback coté client a été mis en place,\n // cette condition sur cette methode n'a pas de sens !?\n if (!options.onResponse) {\n logger.error(\"missing parameter : options.onResponse !\");\n throw new Error(\"missing parameter : options.onResponse !\");\n // FIXME doit on definir un callback interne par defaut !?\n // options.onResponse = function (data) {\n // console.log(\"response callback (inner) : \", data);\n // };\n }\n\n // ID du callback à utiliser : null ou string.\n // si l'utilisateur a spécifié un suffixe pour le callback, on le récupère comme un ID (ex: options.callbackSuffix = \"\")\n // sinon, on utilise un timestamp : this.uuid ()\n var callbackId = (typeof options.callbackSuffix === \"string\") ? options.callbackSuffix : this.uuid();\n\n // on recherche le parametre callback et son nom de fonction dans l'url\n var urlHasCallbackKey = false;\n var urlHasCallbackName = false;\n\n var idx = options.url.indexOf(\"callback=\");\n\n if (idx !== -1) {\n urlHasCallbackKey = true;\n // extraction callbackName de l'url : entre \"callback=\" et \"&\" ou fin de ligne\n var j = options.url.indexOf(\"&\", idx);\n if (j === -1) {\n j = options.url.length;\n }\n\n // on ecrase le parametre options.callbackName s'il avait été défini\n var callbackName = options.url.substring(idx + 9, j);\n\n if (callbackName) {\n urlHasCallbackName = true;\n options.callbackName = callbackName;\n logger.info(\"setting 'options.callbackName' value (\" + options.callbackName + \") from 'options.url' parameter\");\n }\n }\n\n // on ajoute le parametre callback dans l'URL s'il n'existe pas\n if (!urlHasCallbackKey) {\n // gestion des autres param. et \"?\"\n var k = options.url.indexOf(\"?\");\n if (k === -1) {\n // aucun param., ni de '?'\n options.url = options.url + \"?\" + \"callback=\";\n } else if (k === options.url.length) {\n // uniquement le '?'\n options.url = options.url + \"callback=\";\n } else {\n // le '?' et les param. existent\n options.url = options.url + \"&\" + \"callback=\";\n }\n logger.info(\"setting callback default key in 'options.url' : \" + options.url);\n }\n\n // utilisation de la fonction callback coté client ?\n var HasCallbackName = options.callbackName ? true : urlHasCallbackName;\n\n // on ajoute le nom de la fonction callback dans l'URL si elle n'existe pas\n if (!urlHasCallbackName) {\n // fonction callback par defaut\n if (!options.callbackName) {\n logger.info(\"setting 'options.callbackName' default value\");\n options.callbackName = \"callback\"; // ou \"gp.protocol.jsonp\" ?\n // info : si on ne veut pas gerer d'ID dans le callback,\n // options.callbackSuffix = \"\"\n if (callbackId || callbackId === \"\") {\n options.callbackName += callbackId;\n }\n }\n options.url = options.url.replace(\"callback=\", \"callback=\" + options.callbackName);\n logger.info(\"setting callback function name in 'options.url' : \" + options.url);\n }\n\n // timeOut par defaut\n if (!options.onTimeOut) {\n logger.info(\"setting 'options.onTimeOut' default value\");\n /** callback timeout par defaut */\n options.onTimeOut = function (/* error */) {\n console.log(\"TimeOut while invoking url : \" + options.url);\n };\n }\n\n if (!HasCallbackName) {\n var self = this;\n\n // event du timeout\n var onTimeOutTrigger = null;\n\n // declenche le timeout si > à 0 !\n if (options.timeOut > 0) {\n onTimeOutTrigger = window.setTimeout(\n function () {\n /** fonction de reponse du service */\n window[options.callbackName] = function () {};\n options.onTimeOut();\n self._deleteScript(callbackId);\n }, options.timeOut);\n }\n\n // FIXME le nom de la fonction n'accepte pas de namespace !\n // ex. Gp.Function.callback\n /**\n * fonction de reponse du service\n * @param {Object} data - data\n * @private\n */\n window[options.callbackName] = function (data) {\n window.clearTimeout(onTimeOutTrigger);\n options.onResponse(data);\n self._deleteScript(callbackId);\n };\n }\n\n this._createScript(callbackId, options.url);\n },\n\n /**\n * create Script\n * @param {String} callbackId - callback Id\n * @param {String} url - url\n * @private\n */\n _createScript : function (callbackId, url) {\n var scriptu;\n var scripto = document.getElementById(\"results\" + callbackId);\n\n scriptu = document.createElement(\"script\");\n scriptu.setAttribute(\"type\", \"text/javascript\");\n scriptu.setAttribute(\"src\", url);\n scriptu.setAttribute(\"charset\", \"UTF-8\");\n scriptu.setAttribute(\"id\", \"results\" + callbackId);\n scriptu.setAttribute(\"async\", \"true\"); // FIXME async ?\n // head ou body ou autres ?\n var node = document.documentElement || document.getElementsByTagName(\"head\")[0];\n if (scripto === null) {\n node.appendChild(scriptu);\n } else {\n // s'il existe déjà, on le remplace !\n node.replaceChild(scriptu, scripto);\n }\n },\n\n /**\n * delete Script\n * @param {String} callbackId - callback Id\n * @private\n */\n _deleteScript : function (callbackId) {\n var script = document.getElementById(\"results\" + callbackId);\n if (script) {\n var node = script.parentNode || document.documentElement;\n if (!node) {\n return;\n }\n node.removeChild(script);\n }\n }\n};\n\nexport default JSONP;\n","/**\n * Interface de dialogue avec les webservices\n *\n * @module Protocols\n * @private\n * @alias Gp.Protocols\n */\nimport Helper from \"../Utils/Helper\";\nimport XHR from \"./XHR\";\nimport JSONP from \"./JSONP\";\n\nvar Protocol = {\n\n /**\n * Interface unique d\"envoi d\"une requête.\n *\n * @method send\n * @static\n * @param {Object} options - options generales\n * @param {String} options.url - url du service\n * @param {String} options.method - GET, POST, PUT, DELETE\n * @param {String} options.protocol - XHR | JSONP\n * @param {String} options.format - format de la reponse du service : json, xml ou null (brute)...\n * @param {String} options.wrap - encapsuler la reponse du service dans du JSON : true|false (true par defaut sur le protocole JSONP)\n * @param {String} options.callbackSuffix - suffixe de la fonction de callback (JSONP uniquement) (ex: si callbackSuffix=\"\", la fonction s'appellera \"callback\")\n * @param {String} options.timeOut - 0 ms\n * @param {Boolean} options.nocache - true|false\n * @param {Object|String} options.data - content (post) ou param (get)\n * @param {Object|String} options.headers - (post) ex. referer\n * @param {Object|String} options.content - (post) ex. \"application/json\"\n * @param {String} options.scope - this (TODO)\n * @param {Function} options.onResponse - callback\n * @param {Function} options.onFailure - callback\n * @param {Function} options.onTimeOut - callback\n * @param {String} options.proxyUrl - (TODO)\n */\n send : function (options) {\n // INFO\n // \"output\" - param est interne à la classe \"Protocol\" (parametrable via \"wrap\"), et à ajouter à l\"url\n // ce param est independant du service car il est géré par le filtre LUA :\n // ex. json|xml (json par defaut).\n // Ce param. permet d\"encapsuler du XML dans du JSON :\n // {http : {status:200, error:null},xml :\"réponse du service\"}\n // Utile pour les services qui ne repondent que du XML (ex. Geocodage)\n //\n // |-------------------------------------------------|\n // | \\service | | | |\n // | output\\ format| json | xml | remarques |\n // |--------\\------|------|-----|--------------------|\n // | json | json | json| json/xml encapsulé |\n // | xml | json | xml | param inactif |\n // |-------------------------------------------------|\n // ex. le service demande une reponse native au \"format\" json et avec un \"output\" json.\n // on a donc une reponse json encapsulé dans un json : ce qu'on ne souhaite pas !\n // dans ce cas on ne renseigne pas output=json\n\n // INFO\n // \"wrap\" - choix d\"encapsuler ou non les reponses dans du JSON.\n // Par defaut, on encapsule uniquement les reponses sur le protocole JSONP (et qui sont en xml) !\n\n // INFO\n // \"callback\" - param est interne à la classe \"Protocol\" (non parametrable), et à ajouter à l\"url\n // ce param est independant du service car il est géré aussi par le filtre LUA :\n // ex. callback|null\n // Ce param. permet de renvoyer une reponse javascript :\n // callback ({http : {status:200, error:null},xml :\"réponse du service\"})\n // Ce param. est non renseigné par defaut car pour du JSONP, on utilise le\n // le protocol JSONP, et ce dernier implemente déjà le callback !\n\n // settings par defaut\n var settings = options || {\n method : \"GET\",\n // protocol : \"JSONP\",\n protocol : \"XHR\",\n timeOut : 0,\n format : null,\n wrap : true,\n nocache : true,\n output : \"json\",\n callback : null,\n callbackSuffix : null\n };\n\n // on determine l'environnement d'execution : browser ou non ?\n // et on stoppe pour nodeJS... sur un protocole JSONP !\n if (typeof window === \"undefined\" && options.protocol === \"JSONP\") {\n console.log(\"Value (s) for parameter (s) 'protocol=JSONP (instead use XHR)' not supported to NodeJS\");\n return;\n }\n\n if (options.protocol === \"XHR\" || options.format === \"json\") {\n settings.wrap = false;\n } else if (options.protocol === \"JSONP\" && options.format === \"xml\") {\n settings.wrap = true;\n }\n\n settings.callback = null; // FIXME non géré !?\n settings.output = settings.wrap ? \"json\" : null;\n\n // on encapsule les reponses dans un objet JSON\n if (settings.wrap) {\n var params = {};\n params.output = settings.output;\n params.callback = settings.callback;\n delete params.callback; // FIXME non géré !?\n settings.url = Helper.normalyzeUrl(options.url, params);\n }\n\n // choix de l\"implementation :\n // XHR ou JSONP\n switch (settings.protocol) {\n case \"XHR\":\n // on normalise l'url (gestion du cache)\n if (options.method === \"GET\" && options.nocache) {\n settings.url = Helper.normalyzeUrl(settings.url, {\n t : new Date().getTime()\n });\n }\n // appel du service en XHR\n XHR.call(settings);\n break;\n case \"JSONP\":\n\n // on normalise l'url si les params. sont renseignés dans la string|object \"data\"\n if (settings.data) {\n settings.url = Helper.normalyzeUrl(settings.url, settings.data);\n }\n\n // appel du service en JSONP\n JSONP.call(settings);\n break;\n default:\n throw new Error(\"protocol not supported (XHR|JSONP) !\");\n }\n }\n\n};\n\nexport default Protocol;\n","/**\n * Errors raised by API for one among three reasons : wrong API usage, underlying service error or unknown reason.\n *\n * @property {String} message - Error message\n * @property {Number} status - Error status : when {@link Gp.Error.TYPE_SRVERR}, gives the [HTTP status of the underlying web service response]{@link https://en.wikipedia.org/wiki/List_of_HTTP_status_codes} ; -1 otherwise.\n * @property {String} type - Error type ({@link Gp.Error.TYPE_SRVERR}, {@link Gp.Error.TYPE_USEERR} or {@link Gp.Error.TYPE_UNKERR}).\n *\n * @namespace\n * @alias Gp.Error\n * @param {Object|String} error - Options for creating error object. Can be a String (message) or an Object.\n * @param {String} error.message - Error message to return to user.\n * @param {enum} [error.type=TYPE_UNKERR] - Error type\n * @param {status} [error.status=-1] - Error status : when {@link Gp.Error.TYPE_SRVERR}, gives the [HTTP status of the underlying web service response]{@link https://en.wikipedia.org/wiki/List_of_HTTP_status_codes}.\n *\n */\nfunction ErrorService (error) {\n if (!(this instanceof ErrorService)) {\n throw new TypeError(\"ErrorService constructor cannot be called as a function.\");\n }\n\n var e = error;\n if (typeof error === \"string\" || error instanceof String) {\n this.message = error;\n this.status = -1;\n this.type = ErrorService.TYPE_UNKERR;\n } else {\n this.message = e.message || \"undefined!?\";\n this.type = e.type;\n this.status = e.status || -1;\n }\n\n this.name = \"ErrorService\";\n this.stack = (new Error()).stack;\n}\n\n/**\n * Error raised when underlying geoportal service answers on error.\n *\n * @type {String}\n * @constant\n * @static\n */\nErrorService.TYPE_SRVERR = \"SERVICE_ERROR\";\n/**\n * Error raised when funcion use is inappropriate\n *\n * @type {String}\n * @constant\n * @static\n */\nErrorService.TYPE_USEERR = \"USAGE_ERROR\";\n/**\n * Error raised when API can't perform the job for a reason other than the two other ones.\n *\n * @type {String}\n * @constant\n * @static\n */\nErrorService.TYPE_UNKERR = \"UNKNOWN_ERROR\";\n\n/**\n * @lends module:ErrorService\n */\nErrorService.prototype = Object.create(Error.prototype, {\n constructor : {\n value : ErrorService,\n writable : true,\n configurable : true\n }\n});\n\nexport default ErrorService;\n","import Logger from \"../Utils/LoggerByDefault\";\nimport Helper from \"../Utils/Helper\";\nimport _ from \"../Utils/MessagesResources\";\nimport Protocol from \"../Protocols/Protocol\";\nimport ErrorService from \"../Exceptions/ErrorService\";\n// import DefaultUrlService from \"./DefaultUrlService\";\n// package.json (extract version)\nimport Pkg from \"../../package.json\";\n\n/**\n * @classdesc\n * Composant Service\n *\n * @constructor\n * @alias Gp.Services.CommonService\n * @param {Object} options - options communes à tous les services\n *\n * @param {String} [options.serverUrl] - URL d'accès au service. Par défaut \"https://data.geopf.fr/SERVICE/\".\n * Permet de forcer l'utilisation d'un service équivalent déployé derrière une éventuelle autre URL d'accès.\n * Si ce paramètre est renseigné alors, le paramètre par défaut est ignoré.\n *\n * @param {String} [options.protocol] - Le protocole à utiliser pour récupérer les informations du service :\n * peut valoir 'JSONP' ou 'XHR'.\n * Par défaut, c'est le protocole XHR qui sera utilisé.\n * Attention, le protocole JSONP n'est pas valide dans un environnement NodeJS (Utilisation du mode XHR).\n *\n * @param {Boolean} [options.ssl] - Indique si l'on souhaite intérroger les services en https.\n * Ce paramètre ne fonctionne que pour une utilisation hors navigateur (ex. NodeJS).\n * Sur un navigateur, le protocole est automatiquement extrait de l'url du site...\n * Par défaut, on utilise le protocole http (ssl=false).\n *\n * @param {String} [options.proxyURL] - Le proxy à utiliser pour pallier au problème de cross-domain dans le cas d'une requête XHR.\n * Utile si le paramètre 'protocol' vaut 'XHR', il ne sera pas pris en compte si protocol vaut JSONP.\n *\n * @param {String} [options.callbackSuffix] - Suffixe de la fonction de callback à utiliser, dans le cas du protocole JSONP.\n * Par défaut, la fonction de callback portera un nom du type \"callback\"+ID, où ID est soit un identifiant unique généré à chaque requête,\n * soit le paramètre callbackSuffix s'il est spécifié. Par exemple, si callbackSuffix=\"_2\", la fonction sera \"callback_2 ()\".\n * Utile pour utiliser une réponse déjà encapsulée dans une fonction de callback, dont le nom est connu\n * Utile seulement si le paramètre 'protocol' vaut 'JSONP', il ne sera pas pris en compte si protocol vaut 'XHR'.\n *\n * @param {String} [options.httpMethod] - La méthode HTTP\n * à utiliser dans le cas d'une requête XHR : peut valoir 'GET' ou 'POST'.\n * Non pris en compte si 'protocol' vaut JSONP qui fonctionne obligatoirement en GET.\n * Par défaut, c'est la méthode GET qui est utilisée.\n *\n * @param {String} [options.contentType] - Content-Type de la requete\n * à utiliser dans le cas d'une requête XHR en mode POST.\n * Non pris en compte si 'protocol' vaut JSONP et/ou la méthode HTTP vaut GET.\n * Par défaut, c'est la méthode GET qui est utilisée donc on n'utilise pas de Content-Type.\n *\n * @param {Number} [options.timeOut] - Délai d'attente maximal (en ms) de la réponse du service (à partir de l'envoi de la requête).\n * Par défaut, aucun timeOut n'est pris en compte (timeoutDelay= 0).\n *\n * @param {Boolean} [options.rawResponse] - Indique si l'on souhaite que la réponse du service ne soit pas parsée par l'API avant d'être restituée.\n * (Cf. paramètre « onSuccess » pour plus de détails).\n *\n * @param {Function} [options.onSuccess] - Fonction appelée lorsque le service répond correctement à la requête\n * (code HTTP 200, sans message d'erreur).\n * Cette fonction prend en paramètre la réponse du service,\n * soit sous la forme d'un Object Javascript formaté par le parseur dédié à la syntaxe du service (comportement par défaut) ;\n * soit brute au format String non prétraité si le paramètre « rawResponse » a été précisé avec la valeur « true ».\n *\n * @param {Function} [options.onFailure] - Fonction appelée lorsque le service ne répond pas correctement\n * (code HTTP de retour différent de 200 ou pas de réponse).\n *\n * @param {Function} [options.onBeforeParse] - Fonction appelée avant le parsing de la réponse\n * Permet de modifier la réponse avant parsing et la fonction doit retourner une String.\n * Cette fonction prend en paramètre la réponse telle que renvoyée par le service\n * (cad au format json ou xml).\n * Pour le JSONP, si le paramètre \"rawResponse\" a été précisé avec la valeur \"true\",\n * la fonction prend en paramètre un Object JavaScript contenant la réponse XML.\n *\n * @example\n * var options = {\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * ssl : false,\n * proxyURL : null,\n * callbackName : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * onBeforeParse : function (rawResponse) {}\n * };\n */\nfunction CommonService (options) {\n if (!(this instanceof CommonService)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\"));\n }\n\n this.logger = Logger.getLogger(\"CommonService\");\n this.logger.trace(\"[Constructeur CommonService (options)]\");\n\n // #####################\n // récupération des options par défaut pour les paramètres optionnels\n // #####################\n\n /**\n * Options du service\n * @type {Object}\n */\n this.options = {\n // protocol : \"JSONP\",\n protocol : \"XHR\",\n ssl : true,\n proxyURL : \"\",\n // callbackName : \"\",\n callbackSuffix : null,\n httpMethod : \"GET\",\n timeOut : 0,\n rawResponse : false,\n scope : this,\n /**\n * callback par defaut pour la reponse\n * @param {Object} response - response\n * @private\n */\n onSuccess : function (response) {\n console.log(\"onSuccess - la reponse est la suivante : \", response);\n },\n /**\n * callback par defaut pour les erreurs\n * @param {Object} error - error\n * @private\n */\n onFailure : function (error) {\n if (error.status === 200 || !error.status) {\n console.log(\"onFailure : \", error.message);\n } else {\n console.log(\"onFailure - Erreur (\", error.status, \") : \", error.message);\n }\n }\n };\n\n // et on ajoute les options en paramètre aux options par défaut\n for (var opt in options) {\n if (options.hasOwnProperty(opt)) {\n this.options[opt] = options[opt];\n }\n }\n\n // #####################\n // analyse des options\n // #####################\n\n // modification de la fonction de callback onSuccess dans le cas où la réponse brute est demandée\n if (this.options.rawResponse && !this.options.onSuccess) {\n /**\n * callback par defaut pour la reponse\n * @param {Object} response - response\n * @private\n */\n this.options.onSuccess = function (response) {\n console.log(\"onSuccess - la réponse brute du service est la suivante : \", response);\n };\n }\n\n // gestion du callback onSuccess\n var bOnSuccess = !!(this.options.onSuccess !== null && typeof this.options.onSuccess === \"function\");\n if (!bOnSuccess) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"onSuccess()\"));\n }\n\n // gestion de la methode HTTP\n this.options.httpMethod = (typeof options.httpMethod === \"string\") ? options.httpMethod.toUpperCase() : \"GET\";\n\n switch (this.options.httpMethod) {\n case \"POST\":\n case \"GET\":\n break;\n case \"PUT\":\n case \"DELETE\":\n case \"HEAD\":\n case \"OPTIONS\":\n throw new Error(_.getMessage(\"PARAM_NOT_SUPPORT\", \"httpMethod\"));\n default:\n throw new Error(_.getMessage(\"PARAM_UNKNOWN\", \"httpMethod\"));\n }\n\n // gestion du protocole\n // this.options.protocol = (typeof options.protocol === \"string\" ) ? options.protocol.toUpperCase() : \"JSONP\";\n this.options.protocol = (typeof options.protocol === \"string\") ? options.protocol.toUpperCase() : \"XHR\";\n\n switch (this.options.protocol) {\n case \"JSONP\":\n case \"XHR\":\n break;\n default:\n throw new Error(_.getMessage(\"PARAM_UNKNOWN\", \"protocol\"));\n }\n\n // on determine l'environnement d'execution : browser ou non ?\n // et on lance une exception sur l'utilisation du protocole JSONP pour nodeJS...\n if (typeof window === \"undefined\" && this.options.protocol === \"JSONP\") {\n throw new Error(_.getMessage(\"PARAM_NOT_SUPPORT_NODEJS\", \"protocol=JSONP (instead use XHR)\"));\n }\n\n // le protocole JSONP ne fonctionne qu'en GET.\n if (this.options.protocol === \"JSONP\") {\n this.options.httpMethod = \"GET\";\n }\n\n // gestion du cache\n this.options.nocache = options.nocache || false;\n\n // #####################\n // attributs d'instances\n // #####################\n\n /**\n * Format de réponse du service\n */\n this.options.outputFormat = null;\n /**\n * Requête envoyée au service\n */\n this.request = null;\n /**\n * Reponse du service\n */\n this.response = null;\n}\n\n/**\n * @lends module:CommonService\n */\nCommonService.prototype = {\n\n /*\n * Constructeur (alias)\n */\n constructor : CommonService,\n\n /**\n * Appel du service Géoportail\n */\n call : function () {\n /* jshint validthis : true */\n this.logger.trace(\"CommonService::call ()\");\n\n var context = this;\n /** fonction d'execution */\n function run () {\n this.logger.trace(\"CommonService::run ()\");\n this.buildRequest.call(context, onError, onBuildRequest);\n }\n\n run.call(context);\n\n // callback de fin de construction de la requête\n function onBuildRequest (result) {\n this.logger.trace(\"CommonService::onBuildRequest : \", result);\n this.callService.call(context, onError, onCallService);\n }\n\n // callback de fin d'appel au service\n function onCallService (result) {\n this.logger.trace(\"CommonService::onCallService : \", result);\n this.analyzeResponse.call(context, onError, onAnalyzeResponse);\n }\n\n // callback de fin de lecture de la reponse\n function onAnalyzeResponse (result) {\n this.logger.trace(\"CommonService::onAnalyzeResponse : \", result);\n if (result) {\n this.options.onSuccess.call(this, result);\n } else {\n return onError.call(this, new ErrorService(\"Analyse de la reponse en échec !?\"));\n }\n }\n\n // callback de gestion des erreurs : renvoit un objet de type ErrorService\n function onError (error) {\n this.logger.trace(\"CommonService::onError()\");\n // error : l'objet est du type ErrorService ou Error\n var e = error;\n if (!(e instanceof ErrorService)) {\n e = new ErrorService(error.message);\n }\n this.options.onFailure.call(this, e);\n }\n },\n\n /**\n * Création de la requête\n * @param {Function} error - callback\n * @param {Function} success - callback\n */\n buildRequest : function (error, success) {\n // INFO\n this.logger.error(\"overwritten method !\");\n // retourne l'objet 'this.request'\n if (error) {\n error.call(this, \"This method must be overwritten !\");\n }\n success.call(this, \"This method must be overwritten !\");\n },\n\n /**\n * Appel du service\n * @param {Function} error - callback\n * @param {Function} success - callback\n */\n callService : function (error, success) {\n // INFO\n // retourne l'objet 'this.response'\n\n // NOTES\n // Pour le mode XHR, on recupère une reponse sous forme d'un json ou xml (#document).\n // Pour le mode JSONP, on a toujours un objet JSON mais sous 2 formes :\n // - natif\n // - XML encapsulé :\n // {http : {status:200, error:null},xml :'réponse du service'}\n // {http : {status:400, error:'reponse du service'},xml :null}\n // En XHR, la reponse est directement sauvegardée dans 'this.response'.\n // Par contre, en JSONP, on doit analyser la reponse (status ou non vide),\n // et ne renvoyer que le contenu (xml ou l'objet)\n\n // gestion de la proxification du service\n var strUrlProxified = null;\n var strData = this.request;\n\n // a t on mis en place un proxy ?\n // la proxyfication est valable uniquement en mode XHR !\n var bUrlProxified = !!(this.options.proxyURL && this.options.protocol === \"XHR\");\n\n // rajout de l'option gpbibaccess\n // INFO : acces au numero de version de package.conf aprés compilation !\n var requestMetaOptions = {\n \"gp-access-lib\" : Pkg.version\n };\n\n if (this.options.apiKey) {\n requestMetaOptions.apiKey = this.options.apiKey;\n }\n\n this.options.serverUrl = Helper.normalyzeUrl(this.options.serverUrl, requestMetaOptions, false);\n\n // si le proxy est renseigné, on proxifie l'url du service\n if (bUrlProxified) {\n if (this.options.httpMethod === \"GET\") {\n strUrlProxified = this.options.proxyURL + Helper.normalyzeUrl(this.options.serverUrl, this.request, true);\n strData = null;\n }\n\n if (this.options.httpMethod === \"POST\") {\n strUrlProxified = this.options.proxyURL + Helper.normalyzeUrl(this.options.serverUrl, null, true);\n strData = this.request;\n }\n }\n\n // contexte du composant spécifique !\n var self = this;\n\n var options = {\n url : strUrlProxified || this.options.serverUrl,\n method : this.options.httpMethod,\n protocol : this.options.protocol,\n timeOut : this.options.timeOut || 0,\n format : this.options.outputFormat, // ceci declenche le parsing de la reponse du service, mais on souhaite toujours une reponse brute (string) !\n nocache : this.options.nocache || false, // ceci permet d'ajouter un timestamp dans la requête\n wrap : this.options.protocol !== \"XHR\", // ceci declenche l'encapsulation de la reponse XML du service dans du JSON, mais pas en mode XHR !\n callbackSuffix : this.options.callbackSuffix,\n // callbackName : this.options.callbackName || null,\n data : strData,\n headers : null, // TODO...\n content : this.options.contentType || \"application/xml\",\n scope : this.options.scope || this,\n // callback de reponse\n onResponse : function (response) {\n self.logger.trace(\"callService::onResponse()\");\n\n // le contenu de la reponse à renvoyer !\n var content = null;\n\n // XHR : on renvoie toujours la reponse brute du service (json ou xml)\n // au parser du composant...\n if (self.options.protocol === \"XHR\") {\n self.logger.trace(\"Response XHR\", response);\n content = response; // par defaut, la reponse du service !\n }\n\n // JSONP : on pre-analyse la reponse brute du service (encapsuler ou pas)\n // avant de l'envoyer au parser du composant...\n if (self.options.protocol === \"JSONP\") {\n self.logger.trace(\"Response JSON\", response);\n if (response) {\n if (response.http) {\n // reponse encapsulée :\n // ex. reponse du service en xml\n // > {http : {status:200, error:null},xml :'réponse du service'}\n if (response.http.status !== 200) {\n error.call(self, new ErrorService({\n status : response.http.status,\n message : response.http.error,\n type : ErrorService.TYPE_SRVERR\n }));\n return;\n } else {\n content = response.xml; // par defaut !\n if (self.options.rawResponse) {\n content = response;\n }\n }\n } else {\n // reponse non encapsulée :\n // ex. reponse du service en json ou xml\n content = response;\n }\n } else {\n error.call(self, new ErrorService(\"Le contenu de la reponse est vide !?\"));\n return;\n }\n }\n\n // si on souhaite parser la reponse du service\n if (typeof self.options.onBeforeParse === \"function\") {\n var newResponse = self.options.onBeforeParse(content);\n if (typeof newResponse === \"string\") {\n // la reponse parsée par l'utilisateur est retournée sous\n // forme de string !\n content = newResponse;\n }\n }\n // sauvegarde de la reponse dans l'objet parent (CommonService)\n self.response = content;\n // on renvoie la reponse...\n success.call(self, content);\n },\n // callback des erreurs\n onFailure : function (e) {\n self.logger.trace(\"callService::onFailure()\");\n // on est forcement sur une erreur levée par un service !\n e.type = ErrorService.TYPE_SRVERR;\n error.call(self, new ErrorService(e));\n },\n // callback de timeOut\n onTimeOut : function () {\n self.logger.trace(\"callService::onTimeOut()\");\n error.call(self, new ErrorService(\"TimeOut!\"));\n }\n };\n\n Protocol.send(options);\n },\n\n /**\n * Analyse de la réponse\n * @param {Function} error - callback\n * @param {Function} success - callback\n */\n analyzeResponse : function (error, success) {\n // INFO\n this.logger.error(\"overwritten method !\");\n // retourne l'objet spécifique au type de composant (json)\n if (error) {\n error.call(this, \"This method must be overwritten !\");\n }\n success.call(this, \"This method must be overwritten !\");\n }\n\n};\n\nexport default CommonService;\n","// cette classe contient les URLs par defaut des services.\n// DefaultUrlService.Alti.url(key)[elevation-json]\n// DefaultUrlService.Alti.url(key)[elevation-xml]\n// DefaultUrlService.Alti.url(key)[profil-json]\n// DefaultUrlService.Alti.url(key)[profil-xml]\n// DefaultUrlService.ProcessIsoCurve.url(key)\n// DefaultUrlService.AutoComplete.url(key)\n// DefaultUrlService.ReverseGeocode.url(key)\n// DefaultUrlService.Geocode.url(key)\n// DefaultUrlService.Route.url(key)\n\n// Example :\n//\n// DefaultUrlService.Alti.url('alti')[elevation-json]\n// output {String} -> http://wxs.ign.fr/calcul/alti/rest/elevation.json\n//\n// DefaultUrlService.Alti.url('calcul')\n// output {Object|String}\n// -> http://wxs.ign.fr/calcul/alti/rest/elevation.json\n// -> http://wxs.ign.fr/calcul/alti/rest/elevation.xml\n// -> http://wxs.ign.fr/calcul/alti/rest/elevationLine.json\n// -> http://wxs.ign.fr/calcul/alti/rest/elevationLine.xml\n//\n// ssl by default.\n//\n// Force to not do ssl :\n// DefaultUrlService.ssl = false;\n//\n// DefaultUrlService.AutoComplete.url('calcul')\n// output {Object|String}\n// -> https://wxs.ign.fr/calcul/ols/apis/completion\n\n/**\n * Default Geoportal web services URLs access.\n *\n * @namespace\n * @alias Gp.Services.DefaultUrl\n */\nvar DefaultUrlService = {\n\n /** if set true, require the use of https protocol */\n ssl : true,\n\n /**\n * base new-url of geoplateforme services (ssl protocol management)\n * @param {String} path - path\n * @returns {String} url\n */\n newUrl : function (path) {\n var NEW_GPF_HOSTNAME = \"data.geopf.fr\";\n\n // comportement par défaut => https\n // sinon, il est fixé par l'option 'ssl' (false => http)\n var _protocol;\n if (DefaultUrlService.ssl === false) {\n _protocol = \"http://\";\n } else {\n _protocol = \"https://\";\n }\n\n return _protocol + NEW_GPF_HOSTNAME + path;\n },\n\n /**\n * Elevation web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns elevation service default urls with or without geoportal access key given as a parameter. The result is a javascript object with different urls given used protocols (\"elevation-json\", \"elevation-xml\", \"profil-json\" or \"profil-xml\").\n */\n Alti : {\n new_key : {\n // rest\n \"elevation-json\" : \"/altimetrie/1.0/calcul/alti/rest/elevation.json\",\n \"elevation-xml\" : \"/altimetrie/1.0/calcul/alti/rest/elevation.xml\",\n \"profil-json\" : \"/altimetrie/1.0/calcul/alti/rest/elevationLine.json\",\n \"profil-xml\" : \"/altimetrie/1.0/calcul/alti/rest/elevationLine.xml\"\n },\n\n /**\n * newurl from geoplateforme service\n * @param {String} key - key\n * @returns {String} url\n */\n newUrl : function () {\n return {\n // rest\n \"elevation-json\" : DefaultUrlService.newUrl(this.new_key[\"elevation-json\"]),\n \"elevation-xml\" : DefaultUrlService.newUrl(this.new_key[\"elevation-xml\"]),\n \"profil-json\" : DefaultUrlService.newUrl(this.new_key[\"profil-json\"]),\n \"profil-xml\" : DefaultUrlService.newUrl(this.new_key[\"profil-xml\"])\n };\n }\n },\n /**\n * IsoCurve web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns isocurve service default urls with or without geoportal access key given as a parameter. The result is a javascript object with different urls given used protocols (\"iso-json\" or \"iso-xml\").\n */\n ProcessIsoCurve : {\n\n new_key : \"/navigation/isochrone\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Config web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns config service default urls with or without geoportal access key given as a parameter.\n */\n Config : {\n _key : \"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/dist/\",\n /**\n * url\n * @param {String} key - key\n * @returns {String} url\n */\n url : function (key) {\n // key must be an array of one or several keys\n if (!Array.isArray(key)) {\n key = key.split(\",\");\n }\n // not homogeneous with others geoportal services URLs\n var url = [];\n for (var i = 0; i < key.length; i++) {\n url[i] = this._key + key[i] + \"Config.json\";\n }\n return url;\n }\n },\n /**\n * Autocompletion web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns autocomplete service default urls with or without geoportal access key given as a parameter. The result is a String.\n */\n AutoComplete : {\n new_key : \"/geocodage/completion\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Reverse geocoding web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns reverse geocoding service default urls with or without geoportal access key given as a parameter. The result is a String.\n */\n ReverseGeocode : {\n new_key : \"/geocodage/reverse\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Geocoding web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns geocoding service default urls with or without geoportal access key given as a parameter. The result is a String.\n */\n Geocode : {\n new_key : \"/geocodage/search\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Routing web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns routing service default urls with or without geoportal access key given as a parameter. The result is a javascript object with different urls given used protocols.\n */\n Route : {\n new_key : \"/navigation/itineraire\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n }\n};\n\nexport default DefaultUrlService;\n","\n/**\n * Response object for {@link module:Services~getConfig Gp.Services.getConfig ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Object} generalOptions - General properties for default map configuration resources.\n * @property {Object} generalOptions.apiKeys - Object that associates apiKey (s) with an array of resources IDs availables with that key.\n * @property {String} generalOptions.title - Underlying web service Title.\n * @property {String} generalOptions.defaultGMLGFIStyle - XSL URL used by default to translate an XML GetFeatureInfo response into an HTML array.\n * @property {String} generalOptions.theme - default theme (FIXME : for what ?)\n * @property {Array.} generalOptions.wgs84Resolutions - geographical resolutions Array for each [zoom level of the Geoportal platform]{@link http://api.ign.fr/tech-docs-js/webmaster/layers.html#Geoportal_resolutions} from 0 to 21. Expressed in degrees/pixel.\n * @property {Object} layers - Associative array mapping resources availables IDs (keys) with their properties (values given as {@link Gp.Services.Config.Layer}).\n * @property {Object} tileMatrixSets - Associative Array mapping TileMatrixSets IDs (keys) availables with their properties (values given as {@link Gp.Services.Config.TileMatrixSet}).\n *\n * @namespace\n * @alias Gp.Services.GetConfigInterface\n */\nfunction ConfigInterface () {\n if (!(this instanceof ConfigInterface)) {\n throw new TypeError(\"ConfigInterface constructor cannot be called as a function.\");\n }\n\n this.generalOptions = {\n apiKeys : {},\n title : null,\n defaultGMLGFIStyle : null,\n theme : null,\n wgs84Resolutions : []\n };\n\n this.layers = {};\n\n this.tileMatrixSets = {};\n}\n\nConfigInterface.prototype = {\n\n /*\n * Constructor (alias)\n */\n constructor : ConfigInterface,\n\n /**\n * Check if config is loaded for a given key\n *\n * @param {String} apiKey - Access key to Geoportal platform\n * @returns {Boolean} isKeyConfLoaded - true if config of the key is already loaded, false otherwise\n */\n isKeyConfLoaded : function (apiKey) {\n if (!apiKey) {\n return;\n }\n if (this.generalOptions.apiKeys[apiKey]) {\n return true;\n }\n return false;\n },\n\n /**\n * Returns an array of Geoportal layers identifiers, corresponding to an API contract key.\n *\n * @param {String} apiKey - Access key to Geoportal platform\n * @returns {Array} apiKeys - Array of geoportal layers identifiers\n */\n getLayersId : function (apiKey) {\n return this.generalOptions.apiKeys[apiKey];\n },\n\n /**\n * Returns the id of a Geoportal layer with its name and its service.\n *\n * @param {String} layerName - name of the layer (ex. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {String} service - name of the service (ex. \"WMS\" ou \"WMTS\")\n * @returns {String} Id of the layer (ex. \"ORTHOIMAGERY.ORTHOPHOTOS$GEOPORTAIL:OGC:WMTS\")\n */\n getLayerId : function (layerName, service) {\n if (!layerName || !service) {\n return;\n }\n var layerId = null;\n\n // layer\n // key : [layerName]$[contexte]:OGC:[service]\n // ex : \"ORTHOIMAGERY.ORTHOPHOTOS$GEOPORTAIL:OGC:WMTS\"\n\n // service\n // key : [layerName]$[contexte];[service]\n // ex : PositionOfInterest$OGC:OPENLS;ReverseGeocode\n\n if (this.layers) {\n var layers = this.layers;\n for (var key in layers) {\n if (layers.hasOwnProperty(key)) {\n var parts = key.split(\"$\");\n if (layerName === parts[0]) {\n if (parts[1]) {\n var servicePartsLayer = parts[1].split(\":\");\n var servicePartsService = parts[1].split(\";\");\n\n if (servicePartsService[1] === service.toUpperCase()) {\n layerId = key;\n break;\n }\n if (servicePartsLayer[2] === service.toUpperCase()) {\n layerId = key;\n break;\n }\n }\n }\n }\n }\n }\n if (!layerId) {\n return;\n }\n return layerId;\n },\n\n /**\n * Returns an associative array of Geoportal layers configurations, corresponding to an API contract key.\n * If no key is specified, all layers from configuration are returned.\n *\n * @param {String} apiKey - Access key to Geoportal platform\n * @returns {Object} layers - Object which properties are layers identifiers.\n */\n getLayersConf : function (apiKey) {\n var layers = {};\n var layersIdArray = this.getLayersId(apiKey);\n if (layersIdArray) {\n for (var i = 0; i < layersIdArray.length; i++) {\n var lyrId = layersIdArray[i];\n layers[lyrId] = this.layers[lyrId];\n }\n }\n return layers;\n },\n\n /**\n * Returns a geoportal layer configuration, given its identifier\n *\n * @param {String} layerId - Geoportal layer identifier (e.g. \"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\")\n * @return {Object} layer - Layer configuration\n * @see Gp.Services.Config.Layer\n */\n getLayerConf : function (layerId) {\n if (!this.layers) {\n return;\n }\n return this.layers[layerId];\n },\n\n /**\n * Get all parameters needed to display a WFS, WMS or WMTS layer given its name, its service and its key\n *\n * @param {String} layerName - name of the layer (ex. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {String} service - name of the service (ex. \"WMS\" ou \"WMTS\")\n * @param {String} [apiKey] - Contract API key\n * @returns {Object} params - params of the service (WFS, WMS or WMTS) for the given layer\n * @returns {String} params.url - Url of the service to reach to display the layer\n * @returns {String} params.version - Version of the service\n * @returns {String} params.styles - Default style of the layer\n * @returns {String} params.format - Default format of the layer\n * @returns {String} params.projection - Default projection of the layer\n * @returns {Number} params.minScale - Min scale denominator of the layer\n * @returns {Number} params.maxScale - Max scale denominator of the layer\n * @returns {Gp.BBox} params.extent - Extent of the layer, in the projection of the layer\n * @returns {Array} params.legends - Array of legends associated to the layer\n * @returns {Array} params.title - Name of the layer, readable by a human\n * @returns {Array} params.description - Description of the layer\n * @returns {String} params.[TMSLink] - Id of the Tile Matrix Set (TMS), in the case of WMTS layer\n * @returns {Gp.Point} params.[matrixOrigin] - Originof the tile matrix (top left corner), in the case of WMTS layer\n * @returns {Array} params.[nativeResolutions] - Array with the resolution of each level of the tile matrix set, in the case of WMTS layer\n * @returns {Array} params.[matrixIds] - Array with the ID of each level of the tile matrix set, in the case of WMTS layer\n */\n getLayerParams : function (layerName, service) {\n var params = {};\n\n if ((service === \"WMS\" || Object.keys(this.tileMatrixSets).length !== 0) && Object.keys(this.layers).length !== 0) {\n // get the layerId of the layer\n var layerId = this.getLayerId(layerName, service);\n\n if (layerId) {\n // get the layer Conf Object\n var layerConf = this.getLayerConf(layerId);\n\n var keys = this.getLayerKey(layerId);\n if (keys.length === 0) {\n return;\n }\n\n // get services params\n for (var i = 0; i < keys.length; i++) {\n // only one serverUrl is saved in Gp.Config : with multiKeys, we have to retrieve the key used in the serverUrl property\n if (layerConf.serviceParams.serverUrl[keys[i]]) {\n params.url = layerConf.serviceParams.serverUrl[keys[i]];\n }\n }\n\n if (service !== \"WFS\") {\n const wmsTypeRegex = /\\/v\\//;\n // WMS vector style always empty (not in getCap)\n if (wmsTypeRegex.test(params.url)) {\n params.styles = \" \";\n } else {\n // WMS raster style is defined in getCap\n params.styles = layerConf.styles[0].name;\n }\n }\n\n params.version = layerConf.serviceParams.version;\n params.format = (layerConf.formats && layerConf.formats.length) ? layerConf.formats[0].name : \"\";\n params.projection = layerConf.defaultProjection;\n\n // get layer info and constraints\n params.minScale = layerConf.globalConstraint.minScaleDenominator;\n params.maxScale = layerConf.globalConstraint.maxScaleDenominator;\n params.extent = layerConf.globalConstraint.bbox;\n params.legends = layerConf.legends;\n params.title = layerConf.title;\n params.description = layerConf.description;\n\n if (service === \"WMS\") {\n params.metadata = layerConf.metadata;\n }\n\n // Informations non disponibles avec les getCap\n // params.metadata = layerConf.getMetadata();\n // params.originators = layerConf.getOriginators();\n // params.quicklookUrl = layerConf.getQuicklookUrl();\n\n // WMTS : get the tileMatrixSetLimits\n if (layerConf.wmtsOptions) {\n params.tileMatrixSetLimits = layerConf.wmtsOptions.tileMatrixSetLimits;\n var TMSLink = layerConf.wmtsOptions.tileMatrixSetLink;\n if (TMSLink) {\n params.TMSLink = TMSLink;\n var tmsConf = this.getTMSConf(TMSLink);\n // Get matrix origin : Gp.Point = Object{x:Float, y:Float}\n // params.matrixOrigin = tmsConf.getTopLeftCorner();\n params.matrixIds = Object.keys(tmsConf.tileMatrices);\n params.tileMatrices = tmsConf.tileMatrices;\n // by default, pseudo mercator resolutions\n params.nativeResolutions = tmsConf.nativeResolutions || this.getTMSConf(\"PM\").nativeResolutions;\n }\n }\n }\n }\n return params;\n },\n\n /**\n * Get the contract key(s) associated to a given layer.\n *\n * @param {String} layerId - Geoportal layer identifier (e.g. \"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\")\n * @return {Array} layerKey - array of key(s) associated to the given layer\n */\n getLayerKey : function (layerId) {\n var layerKey = [];\n if (this.generalOptions && this.generalOptions.apiKeys && Object.keys(this.generalOptions.apiKeys).length !== 0) {\n var resourcesByKey = this.generalOptions.apiKeys;\n for (var key in resourcesByKey) {\n var resourcesArray = resourcesByKey[key];\n resourcesArray.forEach(function (arrayLayerId) {\n if (arrayLayerId === layerId) {\n layerKey.push(key);\n }\n });\n }\n }\n return layerKey;\n },\n\n /**\n * Returns an associative array of Tile Matrix Sets configurations.\n *\n * @return {Object} tileMatrixSets - Object which properties are TMS identifiers\n *\n */\n getTileMatrixSets : function () {\n return this.tileMatrixSets;\n },\n\n /**\n * Returns a Tile Matrix Sets configuration, given its identifier.\n *\n * @param {String} tmsID - Tile Matrix Set identifier (e.g. : \"PM\")\n * @return {Object} tileMatrixSet - Tile Matrix Set configuration\n * @see Gp.Services.Config.TileMatrixSet\n */\n getTMSConf : function (tmsID) {\n if (!this.tileMatrixSets) {\n return;\n }\n return this.tileMatrixSets[tmsID];\n },\n\n /**\n * Get global constraints for a given Layer : extent, minScale, maxScale, projection\n *\n * @param {String} layerId - Geoportal layer identifier (e.g. \"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\")\n * @returns {Object} params - layer constraints\n * @returns {String} params.projection - default layer projection\n * @returns {Number} params.minScale - layer min scale denominator\n * @returns {Number} params.maxScale - layer max scale denominator\n * @returns {Gp.BBox} params.extent - layer extent expressed in the layer projection\n */\n getGlobalConstraints : function (layerId) {\n var params = {};\n\n if (layerId) {\n // get layer configuration object\n var layerConf = this.getLayerConf(layerId);\n params.projection = layerConf.defaultProjection;\n params.minScale = layerConf.globalConstraint.minScaleDenominator;\n params.maxScale = layerConf.globalConstraint.maxScaleDenominator;\n params.extent = layerConf.globalConstraint.bbox;\n }\n\n return params;\n }\n\n};\n\nexport default ConfigInterface;\n","import Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport ConfigInterface from \"./ConfigInterface\";\n\n/**\n * @classdesc\n *\n * Recupération de la configuration de clés Géoportail sous forme de JSON\n *\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.Config\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n * @param {Sting} options.apiKey - clé(s) dont on veut obtenir la configuration. Si plusieurs clés, séparer chacune par une virgule\n * @param {Boolean} [options.sync=false] - force le mode synchrone\n * @param {String} options.customConfigFile - chemin vers un fichier de configuration personnalisé. Surcharge le paramètre apiKey.\n * @see Gp.Services.GetConfigInterface\n *\n * @example\n * var options = {\n * apiKey : \"cartes,ortho\",\n * sync : false,\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * };\n *\n */\nfunction Config (options) {\n if (!(this instanceof Config)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"Config\"));\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"Config\";\n\n this.logger = Logger.getLogger(\"Gp.Config\");\n this.logger.trace(\"[Constructeur Config (options)]\");\n\n // #####################\n // analyse des options\n // #####################\n\n // gestion du callback onSuccess\n var bOnSuccess = !!(options.onSuccess !== null && typeof options.onSuccess === \"function\");\n if (!bOnSuccess) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"onSuccess()\"));\n }\n if (!options.apiKey && !options.customConfigFile) {\n // si pas de thème spécifié, on récupère toutes les ressources possibles dans l'objet Config\n options.apiKey = \"full\";\n }\n this.options = {};\n this.options.onSuccess = options.onSuccess;\n this.options.onFailure = options.onFailure;\n\n // mode sync\n this.options.sync = options.sync || false;\n\n // gestion d'un tableau d'url des fichiers de configuration\n this.options.listConfigUrls = (options.customConfigFile)\n ? [options.customConfigFile]\n : !Array.isArray(options.apiKey)\n ? DefaultUrlService.Config.url(options.apiKey.split(\",\"))\n : DefaultUrlService.Config.url(options.apiKey);\n}\n\n/**\n * @lends module:Config#\n */\nConfig.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/**\n * Constructeur (alias)\n */\nConfig.prototype.constructor = Config;\n\n/**\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n * @overload\n */\nConfig.prototype.buildRequest = function (error, success) {\n // liste des urls des fichiers de configuration en JSON\n this.listConfigUrls = this.options.listConfigUrls;\n\n if (!this.listConfigUrls) {\n error.call(this, new Error(\"url by default not found !\"));\n return;\n }\n\n // INFO :\n // il n'y a pas de construction de requête,\n // on passe directement à l'appel des requêtes\n success.call(this, this.listConfigUrls);\n};\n\n/**\n * Récupération des configuration\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n * @overload\n */\nConfig.prototype.callService = function (error, success) {\n if (this.options.sync) {\n __callServiceSync.call(this, error, success);\n } else {\n __callService.call(this, error, success);\n }\n};\n\n/**\n * Requêtes en mode asynchrone\n *\n * @param {*} error\n * @param {*} success\n * @private\n */\nvar __callService = function (error, success) {\n // liste des resultats au format JSON\n this.listConfigResults = [];\n\n // test on env. nodejs or browser\n let Fetch = null;\n if (typeof window === \"undefined\") {\n var nodefetch = require(\"node-fetch\");\n Fetch = nodefetch;\n } else {\n Fetch = window.fetch;\n }\n\n // the factory of fetch !\n var fetchFactory = (url) => {\n return Fetch(url, { credentials : \"same-origin\" })\n .then((response) => {\n if (response.ok) {\n return response.json()\n .then((json) => {\n // TODO :\n // tester le contenu !\n return json;\n })\n .catch((error) => {\n throw new Error(\"Exception Json : \" + error);\n });\n } else {\n throw new Error(\"Exception HTTP : \" + response.status + \" (status code) !\");\n }\n })\n .catch((error) => {\n return new Promise((resolve, reject) => {\n // eslint-disable-line no-unused-vars\n reject(error);\n });\n });\n };\n\n // construction des promises fetch\n var promises = [];\n for (let index = 0; index < this.listConfigUrls.length; index++) {\n const url = this.listConfigUrls[index];\n promises.push(fetchFactory(url));\n }\n\n Promise.all(promises)\n .then((results) => {\n if (!results) {\n throw new Error(\"results config empty !?\");\n }\n results.forEach((result) => {\n // TODO :\n // verification des resultats\n this.listConfigResults.push(result);\n });\n })\n .then(() => {\n success.call(this, this.listConfigResults);\n })\n .catch((e) => {\n // TODO :\n // construction d'un message\n error.call(this, e);\n });\n};\n\n/**\n * Requêtes en mode synchrone\n *\n * @param {*} error\n * @param {*} success\n * @private\n */\nvar __callServiceSync = function (error, success) {\n // liste des resultats au format JSON\n this.listConfigResults = [];\n\n // FIXME :\n // boucle synchrone !\n for (var i = 0; i < this.listConfigUrls.length; i++) {\n const url = this.listConfigUrls[i];\n // TODO :\n // prévoir le CORS, headers, ...\n const request = new XMLHttpRequest();\n request.open(\"GET\", url, false);\n request.send(null);\n if (request.status === 200) {\n // TODO :\n // tester la reponse !\n var response = JSON.parse(request.responseText);\n this.listConfigResults.push(response);\n }\n }\n // callback\n if (this.listConfigResults.length !== 0) {\n success.call(this, this.listConfigResults);\n } else {\n error.call(this, new Error(\"...\"));\n }\n};\n\n/**\n * Analyse et mise en forme de la réponse en fusionnant les configurations\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n * @overload\n */\nConfig.prototype.analyzeResponse = function (error, success) {\n // fonction de merge des objects JSON\n var mergeConfig = function (objects) {\n // objet fusion des couches\n var allLayersConfig = {};\n // objet fusion des clés\n var allKeysConfig = {};\n // objet fusion des TMS\n var allTMSConfig = {};\n\n // on fusionne les résultat\n for (var i = 0; i < objects.length; i++) {\n if (!objects[i].generalOptions || !objects[i].layers) {\n return;\n }\n allKeysConfig = {\n ...allKeysConfig,\n ...objects[i].generalOptions.apiKeys\n };\n allLayersConfig = {\n ...allLayersConfig,\n ...objects[i].layers\n };\n allTMSConfig = {\n ...allTMSConfig,\n ...objects[i].tileMatrixSets\n };\n }\n\n var mergedConfig = {\n generalOptions : {\n apiKeys : allKeysConfig\n },\n layers : allLayersConfig,\n tileMatrixSets : allTMSConfig\n };\n return mergedConfig;\n };\n\n // fusion des configurations JSON\n var ConfigJSON = mergeConfig(this.listConfigResults);\n if (!ConfigJSON) {\n error.call(this, new Error(\"configuration structure not conforme !\"));\n return;\n }\n\n // creation des interfaces\n var IConfig = new ConfigInterface();\n // ajout des interfaces avec la configuration JSON\n Object.assign(IConfig, ConfigJSON);\n\n // définition de la variable globale Gp.Config\n var scope = typeof window !== \"undefined\" ? window : {};\n if (!scope.Gp) {\n scope.Gp = {};\n }\n\n // enregistrement\n if (scope.Gp.Config) {\n Object.assign(scope.Gp.Config, IConfig);\n // dans le doute..., ceinture et bretelles !\n for (var property in IConfig) {\n scope.Gp.Config[property] = IConfig[property];\n }\n } else {\n scope.Gp.Config = IConfig;\n }\n\n // INFO :\n // il n'y a pas d'analyse des résultats,\n // on passe directement à l'appel de la callback utilisateur\n success.call(this, scope.Gp.Config);\n};\n\nexport default Config;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes du service altimetrique.\n *\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiRequest\n * @param {Object} options - options\n * @param {Object} options.positions - tableau de coordonnées lon/lat\n * @param {String} options.delimiter - \"|\"\n * @param {Boolean} options.indent - false|true\n * @param {String} options.crs - \"CRS:84\"\n * @param {String} options.format - \"JSON|XML\"\n *\n * @private\n */\nfunction AltiRequest (options) {\n if (!(this instanceof AltiRequest)) {\n throw new TypeError(\"AltiRequest constructor cannot be called as a function.\");\n }\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur AltiRequest ()]\");\n\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n /**\n * Liste des coordonnées.\n * @example\n * var c = [{lon : \"\", lat : \"\"}, {lon : \"\", lat : \"\"}];\n */\n this.positions = this.options.positions || [];\n\n /**\n * Caractère de séparation.\n * Par defaut, \"|\".\n */\n this.delimiter = this.options.delimiter || \"|\";\n\n /**\n * Indentation.\n * true|false\n */\n this.indent = this.options.indent || false;\n\n /**\n * Projection.\n * Par defaut, CRS:84.\n */\n this.crs = this.options.crs || \"CRS:84\";\n\n /**\n * format de sortie.\n * Par defaut, \"json\".\n */\n this.format = this.options.format || \"json\";\n\n /*\n * Ressource utilisée\n */\n this.resource = this.options.resource;\n\n /**\n * Réponse détaillée (source & accuracy)\n * true|false\n */\n this.measures = this.options.measures || false;\n}\n\n/**\n * CLASSNAME\n */\nAltiRequest.CLASSNAME = \"AltiRequest\";\n\nAltiRequest.prototype = {\n\n /**\n * @lends module:AltiRequest#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor : AltiRequest,\n\n /**\n * Ajout d\"une liste de coordonnées.\n *\n * @param {Object[]} lstPosition - liste de positions\n * @example\n * obj.setPositions ([{lon : \"0.15\", lat : \"0.15\"}, {lon : \"1.15\", lat : \"1.15\"}]);\n */\n setPositions : function (lstPosition) {\n var positions = [];\n for (var i = 0; i < lstPosition.length; i++) {\n var o = lstPosition[i];\n if (o.lon && o.lat) {\n positions.push(o);\n }\n }\n\n this.positions = positions;\n },\n\n /**\n * Liste des coordonnées.\n *\n * @param {Int} pos - position\n * @returns {positions}\n * @example\n * obj.getPositions (); // [{lon : \"\", lat : \"\"}, {lon : \"\", lat : \"\"}]\n * obj.getPositions (0); // [{lon : \"\", lat : \"\"}]\n */\n getPositions : function (pos) {\n // FIXME test if not a number !?\n if (!pos) {\n return this.positions;\n }\n\n var index = this.positions.length - 1;\n if (pos > index || pos < index) {\n this.logger.warn(\"index out of range !\");\n return this.positions;\n }\n\n return this.positions[pos];\n },\n\n /**\n * Ajout d\"une liste de coordonnées.\n *\n * @param {Object[]} lstPosition - liste de positions\n * @example\n * obj.addPositions ([{lon : \"0.15\", lat : \"0.15\"}, {lon : \"1.15\", lat : \"1.15\"}]);\n */\n addPositions : function (lstPosition) {\n for (var i = 0; i < lstPosition.length; i++) {\n var o = lstPosition[i];\n if (o.lon && o.lat) {\n this.positions.push(lstPosition[i]);\n }\n }\n },\n\n /**\n * Retourne la liste des longitudes avec un caractère de séparation.\n *\n * @returns {String} - une liste de longitudes\n * @example\n * // out : 0.2367|2.1570|43.789|...\n */\n getLon : function () {\n var lstLon = [];\n for (var i = 0; i < this.positions.length; i++) {\n lstLon.push(this.positions[i].lon);\n }\n this.logger.trace(lstLon);\n return lstLon.join(this.delimiter);\n },\n\n /**\n * Retourne la liste des lattitudes avec un caractère de séparation.\n *\n * @returns {String} - une liste de lattitudes\n * @example\n * // out : 0.2367|2.1570|43.789|...\n */\n getLat : function () {\n var lstLat = [];\n for (var i = 0; i < this.positions.length; i++) {\n lstLat.push(this.positions[i].lat);\n }\n this.logger.trace(lstLat);\n return lstLat.join(this.delimiter);\n }\n\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Object[]}\n */\nAltiRequest.prototype.getData = function () {\n var map = [];\n\n map.push({\n k : \"lon\",\n v : this.getLon()\n });\n map.push({\n k : \"lat\",\n v : this.getLat()\n });\n map.push({\n k : \"delimiter\",\n v : this.delimiter\n });\n map.push({\n k : \"indent\",\n v : this.indent\n });\n map.push({\n k : \"crs\",\n v : this.crs\n });\n map.push({\n k : \"format\",\n v : this.format\n });\n\n return map;\n};\n\nexport default AltiRequest;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\nimport AltiRequest from \"./AltiRequest\";\n\n/**\n * @classdesc\n *\n * Classe de gestion des param. des requêtes de type POINT du service altimetrique.\n *\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiElevationRequest\n * @param {Object} options - options\n * @param {Boolean} options.zonly - false|true\n *\n * @private\n */\nfunction AltiElevationRequest (options) {\n if (!(this instanceof AltiElevationRequest)) {\n throw new TypeError(\"AltiElevationRequest constructor cannot be called as a function.\");\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"AltiElevationRequest\";\n\n // appel du constructeur par heritage\n AltiRequest.apply(this, arguments);\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur AltiElevationRequest ()]\");\n\n /**\n * Z uniquement.\n * true|false\n */\n this.zonly = this.options.zonly || false; // test des options héritées !\n}\n\n/**\n * @lends module:AltiElevationRequest#\n */\n\nAltiElevationRequest.prototype = Object.create(AltiRequest.prototype, {\n\n /**\n * Setter/getter pour \"zonly\"\n */\n zonly : {\n /** getter */\n get : function () {\n return this._zonly;\n },\n /** setter */\n set : function (z) {\n this._zonly = z;\n }\n }\n\n});\n\n/**\n * Constructeur (alias)\n */\nAltiElevationRequest.prototype.constructor = AltiElevationRequest;\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Array}\n */\nAltiElevationRequest.prototype.getData = function () {\n // par glop..., appel de AltiRequest::getData () !\n var map = [];\n map.push({\n k : \"lon\",\n v : this.getLon()\n });\n map.push({\n k : \"lat\",\n v : this.getLat()\n });\n // map.push({k : \"delimiter\", v : this.delimiter}); // FIXME on retire le param \"delimiter\"\n map.push({\n k : \"indent\",\n v : this.indent\n });\n map.push({\n k : \"crs\",\n v : this.crs\n });\n map.push({\n k : \"zonly\",\n v : this.zonly\n });\n map.push({\n k : \"format\",\n v : this.format\n });\n map.push({\n k : \"resource\",\n v : this.resource\n });\n\n return map;\n};\n\nexport default AltiElevationRequest;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\nimport AltiRequest from \"./AltiRequest\";\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes de type PROFIL du service altimetrique.\n *\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiProfilRequest\n * @param {Object} options - options\n * @param {String} options.sampling - 3\n *\n * @private\n */\nfunction AltiProfilRequest (options) {\n if (!(this instanceof AltiProfilRequest)) {\n throw new TypeError(\"AltiProfilRequest constructor cannot be called as a function.\");\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"AltiProfilRequest\";\n\n // appel du constructeur par heritage\n AltiRequest.apply(this, arguments);\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur AltiProfilRequest ()]\");\n\n /**\n * Sampling\n * Par defaut, 3\n */\n this.sampling = this.options.sampling || 3; // test des options héritées !\n}\n\n/**\n * @lends module:AltiProfilRequest#\n */\n\nAltiProfilRequest.prototype = Object.create(AltiRequest.prototype, {\n\n /**\n * Setter/getter pour \"sampling\"\n */\n sampling : {\n /** getter */\n get : function () {\n return this._sampling;\n },\n /** setter */\n set : function (value) {\n this._sampling = value;\n }\n }\n});\n\n/**\n * Constructeur (alias)\n */\nAltiProfilRequest.prototype.constructor = AltiProfilRequest;\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Object[]}\n */\nAltiProfilRequest.prototype.getData = function () {\n // par glop..., appel de AltiRequest::getData () !\n var map = [];\n map.push({\n k : \"lon\",\n v : this.getLon()\n });\n map.push({\n k : \"lat\",\n v : this.getLat()\n });\n // map.push({k : \"delimiter\", v : this.delimiter}); // FIXME on retire le param \"delimiter\"\n map.push({\n k : \"indent\",\n v : this.indent\n });\n map.push({\n k : \"crs\",\n v : this.crs\n });\n map.push({\n k : \"sampling\",\n v : this.sampling\n });\n map.push({\n k : \"format\",\n v : this.format\n });\n map.push({\n k : \"resource\",\n v : this.resource\n });\n\n return map;\n};\n\nexport default AltiProfilRequest;\n","/* jshint multistr : true */\n\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport AltiElevationRequest from \"./model/AltiElevationRequest\";\nimport AltiProfilRequest from \"./model/AltiProfilRequest\";\n\n/**\n * @classdesc\n * Classe de gestion des requêtes de type REST sur le service altimetrique.\n *\n * @todo Le service Alti n'implemente pas le POST !?\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiRequestREST\n * @param {Object} options - options\n * @param {Object} options.param.positions - tableau de coordonnées lon/lat\n * @param {String} options.param.delimiter - '|'\n * @param {Boolean} options.param.indent - false|true\n * @param {String} options.param.crs - 'CRS:84'\n * @param {String} options.param.sampling - 3\n * @param {String} options.param.resource - 'rge_alti_corse2a_float32_zip_lamb93'\n * @param {Boolean} options.param.zonly - false|true\n * @param {Boolean} options.param.measures - false|true\n * @param {String} options.param.format - \"JSON|XML\"\n * @param {String} options.type - \"Profil|Elevation\"\n * @param {String} options.method - GET|POST\n *\n * @example\n * var options = {\n * type : 'Profil', // Elevation\n * method : 'GET', // par defaut\n * param : {\n * positions : [\n * {lon:'1.11', lat:'1.11'},\n * {lon:'1.10', lat:'1.10'},\n * {lon:'1.12', lat:'1.12'}\n * ],\n * delimiter : \";\", // par defaut\n * indent : true, // par defaut\n * crs : 'EPSG:4326', // par defaut\n * format : 'json', // par defaut (only to POST)\n * sampling : 3 , // par defaut (only use by Profil)\n * zonly : false // par defaut (only use by Elevation)\n * measures : false // par defaut (only use by Elevation)\n * }\n * };\n *\n * var result;\n * try {\n * var obj = new AltiRequestREST (options);\n * if (! obj.processRequestString ()) {\n * throw new Error(\"Request empty !?\")\n * }\n * result = obj.requestString;\n * } catch (e) {\n * // exceptions...\n * }\n * @private\n */\nfunction AltiRequestREST (options) {\n this.logger = Logger.getLogger(\"AltiRequestREST\");\n this.logger.trace(\"[Constructeur AltiRequestREST ()]\");\n\n if (!(this instanceof AltiRequestREST)) {\n throw new TypeError(\"AltiRequestREST constructor cannot be called as a function.\");\n }\n\n this.options = options || {};\n\n // existance des options\n if (!this.options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n // type de requete : Altitude ou Profil\n // (param. à determiner en fonction des parametres d'entrée)\n if (!this.options.type) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"type (Elevation or Profil)\"));\n }\n\n // construction du modele de requête\n // (test du type d'objet candidat)\n this.DataObject = null;\n switch (this.options.type) {\n case \"Elevation\":\n this.DataObject = new AltiElevationRequest(this.options.param);\n break;\n case \"Profil\":\n this.DataObject = new AltiProfilRequest(this.options.param);\n break;\n default:\n throw new Error(_.getMessage(\"PARAM_TYPE\", \"type (Elevation or Profil)\"));\n }\n\n /**\n * methode.\n * Par defaut, \"GET\".\n */\n this.method = this.options.method || \"GET\";\n}\n\nAltiRequestREST.prototype = {\n\n /**\n * request\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : AltiRequestREST,\n\n /**\n * Template de la requête.\n */\n template : {\n get : {\n // FIXME on retire le param 'delimiter' : &delimiter='__DELIMITER__'\n value : \"lon=__LON__&lat=__LAT__&indent=__INDENT__&crs='__CRS__'&resource=__RESOURCE__&measures=__MEASURES__\",\n input : {\n point : \"&zonly=__ZONLY__\",\n profil : \"&sampling=__SAMPLING__\"\n }\n },\n post : {\n // FIXME on retire le param 'delimiter' : delimiter='__DELIMITER__'\\n\\\n value : \"lon=__LON__\\n\" +\n \"lat=__LAT__\\n\" +\n \"indent=__INDENT__\\n\" +\n \"crs='__CRS__'\\n\" +\n \"resource='__RESOURCE__'\\n\" +\n \"measures='__MEASURES__'\\n\",\n input : {\n point : \"zonly=__ZONLY__\\n\",\n profil : \"sampling=__SAMPLING__\"\n }\n }\n },\n\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out : lon=0.2367,2.1570&lat=48.0551,46.6077&delimiter=,&indent=true&zonly=true&crs='CRS:84'\n * // POST out : Not yet supported method POST !\n * @returns {String}\n */\n processRequestString : function () {\n this.logger.trace(\"AltiRequestREST::processRequestString ()\");\n\n var template = \"\";\n if (this.method === \"POST\") {\n template = this.template.post.value;\n } else if (this.method === \"GET\") {\n template = this.template.get.value;\n }\n\n template = template.replace(/__LON__/g, this.DataObject.getLon());\n template = template.replace(/__LAT__/g, this.DataObject.getLat());\n // FIXME on retire le param 'delimiter'\n // template = template.replace(/__DELIMITER__/g, this.DataObject.delimiter);\n template = template.replace(/__INDENT__/g, this.DataObject.indent);\n template = template.replace(/__CRS__/g, this.DataObject.crs);\n template = template.replace(/__RESOURCE__/g, this.DataObject.resource);\n template = template.replace(/__MEASURES__/g, this.DataObject.measures);\n\n // ajout +\n template = template + this.__addDataInputs();\n this.logger.trace(\"traduction tmpl\", template);\n\n // sauvegarde\n this.requestString = template;\n\n return this.requestString;\n },\n\n /**\n * Ajout de parametres spécifiques (ex. zonly)\n *\n * @returns {String}\n */\n __addDataInputs : function () {\n this.logger.trace(\"AltiRequestREST::addDataInput ()\");\n\n var myTemplate;\n if (this.method === \"POST\") {\n myTemplate = this.template.post;\n } else if (this.method === \"GET\") {\n myTemplate = this.template.get;\n } else {\n throw new Error(\"No other HTTP method supported by the service !\");\n }\n\n var tmpl = null;\n if (this.DataObject.CLASSNAME === \"AltiElevationRequest\") {\n tmpl = myTemplate.input.point;\n return tmpl.replace(/__ZONLY__/g, this.DataObject.zonly.toString());\n } else if (this.DataObject.CLASSNAME === \"AltiProfilRequest\") {\n tmpl = myTemplate.input.profil;\n return tmpl.replace(/__SAMPLING__/g, this.DataObject.sampling);\n } else {\n throw new Error(\"No other object supported than elevation or profil !?\");\n }\n }\n};\n\nexport default AltiRequestREST;\n","import Logger from \"../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n * Standard WPS\n *\n * @constructor\n * @alias Gp.Formats.WPS\n * @param {Object} options - options\n * @param {Object} options.data - objet\n * @param {String} options.method - POST|GET\n * @param {String} options.param.service - \"WPS\"\n * @param {String} options.param.version - \"1.0.0\"\n * @param {String} options.param.identifier - \"gs:WPSElevation|gs:WPSLineElevation\"\n * @param {String} options.param.rawdataoutput - \"result\"\n * @param {String} options.param.request - \"Execute\"\n * @param {Function} options.onsuccess - function callback success (TODO)\n * @param {Function} options.onerror - function callback error (TODO)\n * @private\n */\nfunction WPS (options) {\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur WPS()]\");\n\n if (!(this instanceof WPS)) {\n throw new TypeError(\"WPS constructor cannot be called as a function.\");\n }\n\n this.options = options || {};\n\n /**\n * Objet DATA\n */\n this.DataObject = this.options.data;\n\n if (!this.DataObject) {\n throw new TypeError(\"This data object is not defined !\");\n }\n\n /**\n * param service.\n * Par defaut, \"WPS\".\n */\n this.paramservice = this.options.param.service || \"WPS\";\n\n /**\n * param version.\n * Par defaut, \"1.0.0\".\n */\n this.paramversion = this.options.param.version || \"1.0.0\";\n\n /**\n * param identifier\n * Par defaut, \"gs:WPS\"\n */\n this.paramidentifier = this.options.param.identifier || \"gs:WPS\";\n\n /**\n * param rawdataoutput\n * Par defaut, \"result\".\n */\n this.paramrawdataoutput = this.options.param.rawdataoutput || \"result\";\n\n /**\n * param request\n * Par defaut, \"Execute\".\n */\n this.paramrequest = this.options.param.request || \"Execute\";\n\n /**\n * methode.\n * Par defaut, \"GET\".\n */\n this.method = this.options.method || \"GET\";\n}\n\nWPS.prototype = {\n\n /**\n * @lends module:WPS#\n */\n\n /**\n * request\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : WPS,\n\n /**\n * Template de la requête.\n */\n template : {\n get : {\n value : \"service=__SERVICE__\" +\n \"&version=__VERSION__\" +\n \"&rawdataoutput=__RAWDATAOUTPUT__\" +\n \"&identifier=__IDENTIFIER__\" +\n \"&request=__REQUEST__\" +\n \"&datainputs=\",\n\n input : \"__KEY__=__DATA__\"\n\n },\n post : {\n\n value : \"\" +\n \"\" +\n \"__IDENTIFIER__\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"__RAWDATAOUTPUT__\" +\n \"\" +\n \"\" +\n \"\",\n\n input : \"\" +\n \"__KEY__\" +\n \"\" +\n \"__DATA__\" +\n \"\" +\n \"\"\n }\n },\n\n /**\n * Namespace par defaut de la requete POST.\n *\n * @returns {String} namespace\n */\n namespaceByDefault : function () {\n var ns = [\n \"xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\"\",\n \"xmlns=\\\"http://www.opengis.net/wps/1.0.0\\\"\",\n \"xmlns:wfs=\\\"http://www.opengis.net/wfs\\\"\",\n \"xmlns:wps=\\\"http://www.opengis.net/wps/1.0.0\\\"\",\n \"xmlns:ows=\\\"http://www.opengis.net/ows/1.1\\\"\",\n \"xmlns:gml=\\\"http://www.opengis.net/gml\\\"\",\n \"xmlns:ogc=\\\"http://www.opengis.net/ogc\\\"\",\n \"xmlns:wcs=\\\"http://www.opengis.net/wcs/1.1.1\\\"\",\n \"xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\"\n ];\n\n return ns.join(\" \");\n },\n\n /**\n * Schemalocation par defaut.\n *\n * @returns {String} schemaLocation\n */\n schemaLocationByDefault : function () {\n return \"xsi:schemaLocation=\\\"http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd\\\"\";\n },\n\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out :\n * // service=__SERVICE__\n * // &version=__VERSION__\n * // &rawdataoutput=__RAWDATAOUTPUT__\n * // &identifier=__IDENTIFIER__\n * // &request=__REQUEST__\n * // &datainputs=\"__DATAINPUTS__\"\n * // avec __DATAINPUTS__ = __KEY__=__DATA__;...\n *\n * // POST out :\n * // \n * // \n * // __IDENTIFIER__\n * // \n * // \n * // \n * // \n * // \n * // __RAWDATAOUTPUT__\n * // \n * // \n * // \",\n * // avec __DATAINPUTS__\n * // \n * // __KEY__\n * // \n * // __DATA__\n * // \n * // \n *\n * @returns {Boolean} validation de la construction de la requete\n */\n processRequestString : function () {\n this.logger.trace(\"WPS::processRequestString ()\");\n\n var template = \"\";\n if (this.method === \"POST\") {\n template = this.template.post.value;\n } else if (this.method === \"GET\") {\n template = this.template.get.value;\n } else {\n this.logger.error(\"No other method supported by the service !\");\n return false;\n }\n\n template = template.replace(/__SERVICE__/g, this.paramservice);\n template = template.replace(/__VERSION__/g, this.paramversion);\n template = template.replace(/__RAWDATAOUTPUT__/g, this.paramrawdataoutput);\n template = template.replace(/__IDENTIFIER__/g, this.paramidentifier);\n template = template.replace(/__REQUEST__/g, this.paramrequest);\n\n // ajout +\n if (this.method === \"POST\") {\n template = template.replace(/__NAMESPACE__/g, this.namespaceByDefault);\n template = template.replace(/__SCHEMALOCATION__/g, this.schemaLocationByDefault);\n }\n\n // ajout des datainputs\n template = template.replace(//g, this.__addDataInputs());\n\n if (!template) {\n this.logger.warn(\"traduction tmpl : empty request !?\");\n return false;\n }\n\n this.requestString = template;\n this.logger.trace(\"traduction tmpl\", template);\n\n return true;\n },\n\n /**\n * Ajout des données\n *\n * @returns {String} Données concaténées dans une chaine\n */\n __addDataInputs : function () {\n this.logger.trace(\"WPS::__addDataInputs ()\");\n\n // c'est un peu grossier...\n var tmpl = this.method === \"GET\" ? this.template.get.input : this.template.post.input;\n var sep = this.method === \"GET\" ? \";\" : \"\";\n\n var result = \"\";\n var that = this;\n var map = this.DataObject.getData();\n for (var i = 0; i < map.length; i++) {\n // FIXME closure ?\n (function (j) {\n if (sep) {\n sep = (j === map.length - 1) ? \"\" : \";\";\n }\n result = result.concat(that.__addDataInput(tmpl, map[j].k, map[j].v), sep);\n })(i);\n }\n\n return result;\n },\n\n /**\n * Ajout d'une donnée.\n *\n * @param {String} tmpl - template\n * @param {String} key - clef\n * @param {String} data - valeur\n * @returns {String} chaine avec les substitutions clef/valeur\n */\n __addDataInput : function (tmpl, key, data) {\n var tmp = tmpl;\n tmp = tmp.replace(/__KEY__/g, key);\n tmp = tmp.replace(/__DATA__/g, data);\n return tmp;\n },\n\n /**\n * Definir le mode de requête\n *\n * @param {String} method - GET|POST\n */\n setMethod : function (method) {\n if (method === \"GET\" || method === \"POST\") {\n this.method = method;\n } else {\n this.logger.warn(\"support only GET and POST method !\");\n }\n },\n\n /**\n * Retourne le mode de requete (GET|POST).\n *\n * @returns {AltiRequest.options.mode|String} methode (GET|POST)\n */\n getMethod : function () {\n return this.method;\n }\n};\n\nexport default WPS;\n","/**\n * Classe d'interface des requêtes de type WPS sur le service altimetrique.\n * (Factory)\n *\n * @module Gp.Services.Alti.Request.AltiRequestWPS\n * @alias Gp.Services.Alti.Request.AltiRequestWPS\n * @private\n */\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport WPS from \"../../../Formats/WPS\";\nimport AltiElevationRequest from \"./model/AltiElevationRequest\";\nimport AltiProfilRequest from \"./model/AltiProfilRequest\";\n\nvar AltiRequestWPS = {\n\n /**\n * Interface unique de construction de la requête.\n *\n * @method build\n * @param {Object} options - options\n * @param {Object} options.param.positions - tableau de coordonnées lon/lat\n * @param {String} options.param.delimiter - '|'\n * @param {Boolean} options.param.indent - false|true\n * @param {String} options.param.crs - 'CRS:84'\n * @param {String} options.param.sampling - 3\n * @param {Boolean} options.param.zonly - false|true\n * @param {String} options.param.format - \"JSON|XML\" (only to POST)\n * @param {String} options.wps.service - \"WPS\"\n * @param {String} options.wps.version - \"1.0.0\"\n * @param {String} options.wps.identifier - \"gs:WPSElevation|gs:WPSLineElevation\"\n * @param {String} options.wps.rawdataoutput - \"result\"\n * @param {String} options.wps.request - \"Execute\"\n * @param {String} options.type - \"Profil|Elevation\"\n * @param {String} options.method - GET|POST\n * @example\n * var options = {\n * type : 'Profil', // Elevation\n * method : 'GET', // par defaut\n * param : {\n * positions : [\n * {lon:'1.11', lat:'1.11'},\n * {lon:'1.10', lat:'1.10'},\n * {lon:'1.12', lat:'1.12'}\n * ],\n * delimiter : \";\", // par defaut\n * indent : true, // par defaut\n * crs : 'EPSG:4326', // par defaut\n * format : 'json', // par defaut (only to POST)\n * sampling : 3 , // par defaut (only use by Profil)\n * zonly : false, // par defaut (only use by Elevation)\n * },\n * wps : {\n * service : 'WPS', // par defaut\n * version : '1.0.0', // par defaut\n * identifier : 'gs:WPS', // par defaut, Elevation = gs:WPSElevation, Profil = gs:WPSLineElevation\n * rawdataoutput : 'result',// par defaut\n * request : 'Execute' // par defaut\n * }\n * };\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"AltiRequestWPS\");\n logger.trace([\"AltiRequestWPS::build()\"]);\n\n // existance des options\n if (!options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n // type de requete : Altitude ou Profil\n // (param. à determiner en fonction des parametres d'entrée)\n if (!options.type) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"type (Elevation or Profil)\"));\n }\n\n // construction du modele de requête\n // (test du type d'objet candidat)\n var DataObject = null;\n switch (options.type) {\n case \"Elevation\":\n // surcharge\n options.wps.identifier = \"gs:WPSElevation\";\n DataObject = new AltiElevationRequest(options.param);\n break;\n case \"Profil\":\n // surcharge\n options.wps.identifier = \"gs:WPSLineElevation\";\n DataObject = new AltiProfilRequest(options.param);\n break;\n default:\n throw new Error(_.getMessage(\"PARAM_TYPE\", \"type (Elevation or Profil)\"));\n }\n\n // construction de la requête WPS\n var settings = {\n data : DataObject,\n method : options.method,\n param : options.wps\n };\n\n var rqstWPS = new WPS(settings);\n\n if (!rqstWPS.processRequestString()) {\n throw new Error(\"Enable to process request !\");\n }\n\n return rqstWPS.requestString;\n }\n};\n\nexport default AltiRequestWPS;\n","/**\n * Creation d'une requête en REST ou WPS\n * (Factory)\n *\n * @module AltiRequestFactory\n * @alias Gp.Services.Alti.Request.AltiRequestFactory\n * @private\n */\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport AltiRequestREST from \"./AltiRequestREST\";\nimport AltiRequestWPS from \"./AltiRequestWPS\";\n\nvar AltiRequestFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Alti\n *\n * @example\n * var options = {\n * httpMethod : 'GET', // GET|POST\n * onSuccess : function (response) {},\n * onError : function (error) {},\n * scope : this,\n * positions : [{lon:, lat:}, {lon:, lat:}],\n * outputFormat : 'json' // json|xml\n * sampling : 3,\n * api : 'REST', // REST|WPS\n * zonly : false // false|true\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"AltiRequestFactory\");\n logger.trace([\"AltiRequestFactory::build()\"]);\n\n var request = null;\n\n // on factorise les options par groupe;\n // - global,\n // - param, les params pour les data inputs\n // - wps, les param du service\n // - callback\n\n var settings = {\n // ajout des valeurs par defaut spécifiques au service\n type : options.sampling ? \"Profil\" : \"Elevation\",\n method : options.httpMethod,\n param : {\n positions : null,\n delimiter : null, // FIXME par defaut, on ne le met pas en place car ça fait planter la requête !?\n indent : null, // par defaut\n crs : null, // par defaut\n format : null, // (only to POST)\n sampling : null, // (only use by Profil)\n zonly : null, // (only use by Elevation)\n measures : null // (only use by Elevation)\n }\n };\n\n // surcharge des valeurs obligatoires\n settings.param.positions = options.positions;\n settings.param.format = options.outputFormat;\n settings.param.sampling = options.sampling;\n settings.param.zonly = options.zonly;\n settings.param.measures = options.measures;\n settings.param.resource = options.resource;\n\n // gestion des callback\n var bOnError = !!(options.onError !== null && typeof options.onError === \"function\"); // cast variable to boolean\n var bOnSuccess = !!(options.onSuccess !== null && typeof options.onSuccess === \"function\");\n\n var message = null;\n switch (options.api) {\n case \"REST\":\n // FIXME les exceptions ne sont pas 'catchées' sur le constructeur !\n var myReq = new AltiRequestREST(settings);\n if (!myReq.processRequestString()) {\n message = \"Error in process request (rest) !\";\n if (bOnError) {\n options.onError.call(options.scope, new ErrorService(message));\n return;\n }\n throw new Error(message);\n }\n request = myReq.requestString;\n break;\n case \"WPS\":\n // ajout des valeurs par defaut spécifiques au service WPS\n settings.wps = {\n service : null, // par defaut\n version : null, // par defaut\n identifier : null, // par defaut\n rawdataoutput : null, // par defaut\n request : null // par defaut\n };\n\n request = AltiRequestWPS.build(settings);\n if (!request) {\n message = \"Error in process request (wps) !\";\n if (bOnError) {\n options.onError.call(options.scope, new ErrorService(message));\n return;\n }\n throw new Error(message);\n }\n break;\n default:\n message = \"Type of API is not supported by service (REST or WPS) !\";\n if (bOnError) {\n options.onError.call(options.scope, new ErrorService(message));\n return;\n }\n throw new Error(message);\n }\n\n if (bOnSuccess) {\n options.onSuccess.call(options.scope, request);\n }\n\n return request;\n }\n};\n\nexport default AltiRequestFactory;\n","/* global require */\n\nimport Logger from \"../Utils/LoggerByDefault\";\n// import __xmldom from \"xmldom\";\n\n/**\n * @classdesc\n *\n * Classe permettant d'écrire ou de lire du XML, sous forme de document DOM,\n * éventuellement selon des clés de lecture (readers) ou d'écriture (writers) spécifiques.\n *\n * @constructor\n * @alias Gp.Formats.XML\n *\n * @param {Object} [options] - options du format XML\n *\n * @param {Object} [options.reader] - Instance d'un Reader de service (AltiResponseReader, GeocodeRequestReader, etc.)\n * utile pour interpréter le XML lorsque sa structure est connue.\n * Ce reader doit comporter au moins une fonction statique read (root) permettant d'initialiser la lecture.\n *\n * @param {Object} [options.writers] - writers\n *\n * @param {String} [options.xmlString] - chaîne de caractère contenant du XML à interpréter.\n *\n * @private\n */\nfunction XML (options) {\n if (!(this instanceof XML)) {\n throw new TypeError(\"XML constructor cannot be called as a function.\");\n }\n\n // FIXME : notion de singleton\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur XML ()]\");\n\n /**\n * Chaîne de caractères contenant le texte XML\n * @type {String}\n */\n this.xmlString = null;\n\n /**\n * DOM Element correspondant à la structure du XML.\n * @type {DOMElement}\n */\n this.xmlDoc = null;\n\n /**\n * Objet contenant des fonctions de lecture des différentes balises XML.\n * @type {Object}\n */\n this.reader = null;\n\n // traitement des paramètres d'options s'il y en a\n if (options) {\n if (options.xmlString && typeof options.xmlString === \"string\") {\n this.xmlString = options.xmlString;\n // Si une chaine de caractère a été passée en entrée : on la transforme aussi en XML document\n this.xmlDoc = __getXMLDOC(options.xmlString);\n }\n if (options.reader) {\n this.setReader(options.reader);\n }\n }\n}\n\nXML.prototype = {\n\n /**\n * @lends module:XML\n */\n\n /*\n * Constructeur (alias)\n */\n constructor : XML,\n\n /**\n * Méthode permettant de récupérer la chaîne de caractères associée au format XML\n *\n * @returns {String} xmlString - la chaîne de caractères correspondant au format XML\n */\n getXMLString : function () {\n return this.xmlString;\n },\n\n /**\n * Méthode permettant d'attribuer une chaîne de caractères au format XML (attribut xmlString).\n * La méthode va aussi transformer cette chaîne de caractères en document XML,\n * afin de remplir l'attribut xmlDoc.\n *\n * @param {String} xmlString - la chaîne de caractères correspondant au format XML\n */\n setXMLString : function (xmlString) {\n if (xmlString && typeof xmlString === \"string\") {\n this.xmlString = xmlString;\n this.xmlDoc = __getXMLDOC(xmlString);\n }\n },\n\n /**\n * Méthode permettant de récupérer les readers associés au format XML, s'ils ont été définis\n *\n * @return {Object} readers - les readers associés au format XML, s'ils existent,\n * sous forme d'une collection de fonctions\n */\n getReader : function () {\n return this.reader;\n },\n\n /**\n * Méthode permettant d'attribuer des readers, sous la forme d'un objet de fonctions (node, data),\n * lorsqu'ils n'ont pas été définis lors de l'instanciation par exemple (new XML (options)).\n *\n * @param {Object} reader - Instance d'un Reader de service (AltiResponseReader, GeocodeRequestReader, etc.)\n * utile pour interpréter le XML lorsque sa structure est connue.\n * Ce reader doit comporter au moins une fonction statique read (root) permettant d'initialiser la lecture.\n */\n setReader : function (reader) {\n if (reader && reader.read && typeof reader.read === \"function\") {\n this.reader = reader;\n }\n },\n\n /**\n * Méthode permettant de récupérer le document XML associé au format, s'il existe.\n *\n * @return {DOMElement} xmlDoc - le document XML (DOM document node) s'il existe\n */\n getXMLDoc : function () {\n return this.xmlDoc;\n },\n\n /**\n * Setter\n */\n setXMLDoc : function (doc) {\n this.xmlDoc = doc;\n },\n /**\n * Méthode initialisant la lecture du XML, à partir d'un XML Document :\n * création d'un objet JavaScript contenant les informations du XML,\n * sauf dans le cas où il n'existe pas de XML Document à interpréter (retourne un objet vide).\n *\n * @return {Object} [parserOutput] - un objet JavaScript contenant les informations du XML :\n * - soit toutes les informations si aucun reader n'a été spécifié à la création du format\n * - soit les informations spécifiées dans le reader.\n */\n parse : function () {\n // build xml document from xmlString\n if (!this.xmlDoc && this.xmlString) {\n this.xmlDoc = __getXMLDOC(this.xmlString);\n }\n if (this.xmlDoc) {\n var root = __getRootNode(this.xmlDoc);\n if (root) {\n var parserOutput;\n // call reader if exists\n if (this.reader && this.reader.read) {\n parserOutput = this.reader.read(root);\n } else {\n parserOutput = {};\n parserOutput[root.nodeName] = __readDefault(root);\n }\n return parserOutput;\n } else {\n return {};\n }\n }\n }\n\n};\n\n/**\n * Méthode de la classe (privée) permettant de créer un XML Document à partir d'une chaîne de caractères XML,\n * en utilisant DOMParser () lorsque c'est possible.\n * For more information, see: https://dvcs.w3.org/hg/innerhtml/raw-file/tip/index.html#the-domparser-interface\n *\n * @private\n * @memberof XML\n * @method __getXMLDOC\n * @param {String} xmlString - xml string to be converted into DOM element\n * @return {DOMElement} - the corresponding XML Document\n */\nfunction __getXMLDOC (xmlString) {\n if (typeof window === \"undefined\") {\n // env. nodejs\n var DOMParser = require(\"@xmldom/xmldom\").DOMParser; // __xmldom.DOMParser;\n return new DOMParser().parseFromString(xmlString, \"text/xml\");\n } else {\n // env. browser\n\n var parser;\n var xmlDoc;\n var errorMsg = \"Erreur lors du parsing de la réponse du service : XML non conforme\";\n\n if (window.ActiveXObject) {\n // Internet Explorer < 9\n xmlDoc = new window.ActiveXObject(\"Microsoft.XMLDOM\");\n xmlDoc.async = false;\n xmlDoc.loadXML(xmlString);\n var parseError = xmlDoc.parseError;\n if (parseError.errorCode) {\n if (parseError.line && parseError.linepos) {\n errorMsg += \"( ligne \" + parseError.line + \", colonne \" + parseError.linepos;\n }\n if (parseError.reason) {\n errorMsg += \": \" + parseError.reason + \")\";\n }\n throw new Error(errorMsg);\n }\n return xmlDoc;\n } else if (window.DOMParser) {\n // les autres (Chrome, Mozilla, IE >= 9)\n parser = new window.DOMParser();\n try {\n xmlDoc = parser.parseFromString(xmlString, \"text/xml\");\n } catch (e) {\n // Internet Explorer browser raises exception if xmlString is not valid XML\n if (e.message === \"SyntaxError\") {\n throw new Error(errorMsg);\n } else {\n throw new Error(\"Erreur lors du parsing de la réponse du service : \" + e.message);\n }\n }\n // look for parsing error in case no exception was raised\n if (xmlDoc.getElementsByTagName(\"parsererror\").length > 0) {\n var parsererror = xmlDoc.getElementsByTagName(\"parsererror\");\n for (var i = 0; i < parsererror.length; i++) {\n var content = parsererror[i].innerHTML;\n // except in case parsererror is just because of huge xml, but parsing is done.\n if (content.indexOf(\"Huge input lookup\") === -1) {\n errorMsg += \"(\" + content + \")\";\n throw new Error(errorMsg);\n }\n }\n } else if (!xmlDoc.documentElement) { // may happen in chrome browser\n throw new Error(errorMsg);\n }\n return xmlDoc;\n } else {\n // FIXME\n throw new Error(\"Incompatible DOM Parser pour ce navigateur !\");\n }\n }\n}\n\n/**\n * Méthode de la classe (privée) permettant de récupérer le noeud racine du document,\n * à partir d'un document node (nodeType=9), puis lecture de ce noeud (readNode)\n *\n * @private\n * @memberof XML\n * @method __getRootNode\n * @param {DOMElement} [xmlDoc] - a Document Node\n * @return {DOMElement} root - the document root node\n */\nfunction __getRootNode (xmlDoc) {\n var root;\n if (xmlDoc.nodeType === 9) {\n // INFO : nodeType 9 represents the entire document (the root-node of the DOM tree)\n root = xmlDoc.documentElement;\n } else if (xmlDoc.nodeType === 1) {\n root = xmlDoc;\n }\n return root;\n}\n\n/**\n * Méthode de la classe (privée) permettant de lire automatiquement un noeud XML,\n * lorsqu'aucun reader spécifique n'a été spécifié (parser brut)\n *\n * @private\n * @memberof XML\n * @method readDefault\n * @param {DOMElement} node - a DOM element node\n * @example final data object looks like :\n * data = {\n * attributeName: attributeValue,\n * childName: {\n * attributeName: attributeValue,\n * attributeName: attributeValue,\n * childName: {\n * \"textContent\": textContent\n * },\n * childName: {\n * childName: {\n * attributeName:attributeValue\n * }\n * }\n * }\n * }\n */\nfunction __readDefault (node) {\n var data = {};\n\n // if element node has attributes, set their values to data\n if (node.attributes.length > 0) {\n var dataAttributes = __getAttributes(node);\n data[\"attributes\"] = dataAttributes;\n }\n\n // if element node has childNodes, read them and set them to data\n if (node.hasChildNodes()) {\n var childData = {};\n var child;\n var children = node.childNodes;\n\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n\n if (child.nodeType === 3) { // TEXT_NODE\n data[\"textContent\"] = child.nodeValue;\n } else if (child.nodeType === 1) {\n childData = __readDefault(child);\n\n if (!data[child.nodeName]) {\n // store childData in an object\n data[child.nodeName] = childData;\n } else {\n // in case several childNodes has the same name : store them in an array.\n // if data[nodeName] already exists but is not an array\n if (!Array.isArray(data[child.nodeName])) {\n var old = data[child.nodeName];\n data[child.nodeName] = [];\n data[child.nodeName].push(old);\n }\n data[child.nodeName].push(childData);\n }\n }\n // TODO : manage other node types (4=CDATA, etc)\n }\n }\n\n return data;\n}\n\n/**\n * Méthode de la classe (privée) permettant de récupérer les attributs d'un noeud élément\n *\n * @private\n * @memberof XML\n * @method __getAttributes\n * @param {DOMElement} node - noeud contenant l'attribut recherché\n * @return {Object} nodeAttributes - objet contenant les noms et valeurs des différents attributs\n */\nfunction __getAttributes (node) {\n if (node.attributes.length > 0) {\n var nodeAttributes = {};\n var attributes = node.attributes;\n for (var i = 0; i < attributes.length; i++) {\n var attribute = attributes[i];\n nodeAttributes[attribute.nodeName] = attribute.nodeValue;\n }\n return nodeAttributes;\n }\n}\n\nexport default XML;\n","/**\n * Response object for {@link module:Services~getAltitude Gp.Services.getAltitude ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Array.} elevations - Elevations array.\n *\n * @namespace\n * @alias Gp.Services.AltiResponse\n */\nfunction AltiResponse () {\n if (!(this instanceof AltiResponse)) {\n throw new TypeError(\"AltiResponse constructor cannot be called as a function.\");\n }\n\n this.elevations = [];\n}\n\nAltiResponse.prototype = {\n\n constructor : AltiResponse\n\n};\n\nexport default AltiResponse;\n","\n/**\n * Single elevation object returned by underlying web service. Contains at least, one elevation (z). May also contain point coordinates and elevation accuracy if \"zonly\" parameter wasn't set to true.\n *\n * @property {Float} lat - Point latitude. (only if zonly=false)\n * @property {Float} lon - Point longitude. (only if zonly=false)\n * @property {Float} z - Point elevation.\n * @property {Float} acc - Accuracy of elevation for this point. (only if zonly=false)\n *\n * @namespace\n * @alias Gp.Services.Alti.Elevation\n */\nfunction Elevation () {\n if (!(this instanceof Elevation)) {\n throw new TypeError(\"Elevation constructor cannot be called as a function.\");\n }\n\n this.z = null;\n}\n\nElevation.prototype = {\n\n constructor : Elevation\n\n};\n\nexport default Elevation;\n","\n/**\n * Single measure object returned by underlying web service if measures = true and zonly = false\n *\n * @property {String} source_name - Name of the source\n * @property {String} source_measure - Name of the measure\n * @property {Float} z - Point elevation.\n * @property {Float} acc - Accuracy of elevation for this point. (only if zonly=false)\n *\n * @namespace\n * @alias Gp.Services.Alti.Measure\n */\nfunction Measure () {\n if (!(this instanceof Measure)) {\n throw new TypeError(\"Measure constructor cannot be called as a function.\");\n }\n\n this.source_name = null;\n this.source_measure = null;\n this.z = null;\n this.acc = null;\n}\n\nMeasure.prototype = {\n\n constructor : Measure\n\n};\n\nexport default Measure;\n","\n/**\n * Fonction retournant un objet contenant des clés de lecture (readers)\n * qui permettent de parser des réponses XML du service Altimétrique du Géoportail\n * (calcul altimétrique simple ou profil altimétrique d'une courbe),\n * lorsque le paramètre output = xml,\n * afin de récupérer les élévations retournées.\n *\n * @module AltiResponseReader\n * @alias Gp.Services.Alti.Formats.AltiResponseReader\n * @private\n */\n\n// import Logger from \"../../../Utils/LoggerByDefault\";\nimport AltiResponse from \"../Response/model/AltiResponse\";\nimport Elevation from \"../Response/model/Elevation\";\nimport Measure from \"../Response/model/Measure\";\n\n/**\n *\n * Objet AltiResponseReader\n *\n * @member {Object} AltiResponseReader\n *\n * @property {Object} AltiResponseReader.READERS - Objet contenant des fonctions de lecture, appelées \"readers\"\n * dont chaque clé correspond au nom d'un tag du XML que l'on souhaite lire\n * et la valeur associée est une fonction (node, data)\n * où node est un noeud du document DOM\n * et data est un objet où l'on stocke les informations lues dans le XML.\n *\n * @property {Method} AltiResponseReader.READERS.elevations - Lecture d'un noeud \"elevations\" de la réponse XML\n * du service alti, correspondant logiquement à la racine du document\n * (contient un ou plusieurs childNodes correspondant chacun à une élévation retournée)\n *\n * @property {Method} AltiResponseReader.READERS.elevation - Lecture d'un noeud \"elevation\" de la réponse xml du service alti.\n * (contient un ou 4 childNode (s) correspondant à l'altitude (z) et éventuellement lat, lon, et acc)\n *\n * @property {Method} AltiResponseReader.READERS.lat - Lecture d'un noeud \"lat\" de la réponse xml du service alti.\n * (contient une valeur de latitude, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.lon - Lecture d'un noeud \"lon\" de la réponse xml du service alti.\n * (contient une valeur de longitude, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.z - Lecture d'un noeud \"z\" de la réponse xml du service alti.\n * (contient une valeur d'altitude, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.acc - Lecture d'un noeud \"acc\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.measures - Lecture d'un noeud \"measures\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.source_name - Lecture d'un noeud \"source_name\" de la réponse xml du service alti.\n * (pour remplir l'éventuel objet measure)\n *\n * @property {Method} AltiResponseReader.READERS.source_mesure - Lecture d'un noeud \"source_mesure\" de la réponse xml du service alti.\n * (pour remplir l'éventuel objet measure)\n *\n * @property {Method} AltiResponseReader.READERS.exceptionreport - Lecture d'un noeud \"ExceptionReport\" de la réponse xml du service alti.\n *\n * @property {Method} AltiResponseReader.READERS.exception - Lecture d'un noeud \"Exception\" de la réponse xml du service alti.\n *\n * @property {Method} AltiResponseReader.read - Méthode permettant de lancer la lecture d'une réponse XML du service altimétrique,\n * à l'aide des readers de la classe.\n *\n */\nvar AltiResponseReader = {};\n\nAltiResponseReader.READERS = {\n\n /**\n * Lecture d'un noeud \"elevations\" de la réponse XML du service alti, correspondant logiquement à la racine du document\n * (contient un ou plusieurs childNodes correspondant chacun à une élévation retournée)\n *\n * @param {DOMElement} root - racine de la réponse XML\n * @static\n * @memberof AltiResponseReader\n * @returns {Object} Retourne un objet de type AltiResponse\n */\n elevations : function (root) {\n // INFO : on passe en paramètre l'objet en entrée elevations, vide, à remplir.\n var altiResponse = new AltiResponse();\n\n if (root.hasChildNodes()) {\n var children = root.childNodes;\n var child;\n var elevation;\n\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n\n if (AltiResponseReader.READERS[child.nodeName]) {\n elevation = AltiResponseReader.READERS[child.nodeName](child);\n altiResponse.elevations.push(elevation);\n }\n }\n }\n\n return altiResponse;\n },\n\n /**\n * Lecture d'un noeud \"elevation\" de la réponse xml du service alti.\n * (contient un ou 5 childNode (s) correspondant à l'altitude (z) et éventuellement lat, lon, acc et measures)\n *\n * @param {DOMElement} node - noeud elevation à lire pour récupérer les informations de l'élévation retournée (z [, lon, lat, acc, measures])\n * @return {Array} elevationResponse - format de la réponse en sortie, instance de AltiResponse\n * @static\n * @memberof AltiResponseReader\n */\n elevation : function (node) {\n var elevation = new Elevation();\n\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (AltiResponseReader.READERS[child.nodeName]) {\n // INFO : on passe en paramètre l'objet en entrée elevation, vide, à remplir.\n AltiResponseReader.READERS[child.nodeName](child, elevation);\n }\n }\n }\n return elevation;\n },\n\n /**\n * Lecture d'un noeud \"lat\" de la réponse xml du service alti.\n * (contient une valeur de latitude, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la latitude\n * @param {Object} elevation - objet dans lequel stocker la latitude retournée\n * @static\n * @memberof AltiResponseReader\n */\n lat : function (node, elevation) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n elevation.lat = parseFloat(textNode.nodeValue);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : latitude attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"lon\" de la réponse xml du service alti.\n * (contient une valeur de longitude, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la longitude\n * @param {Object} elevation - objet dans lequel stocker la longitude retournée\n * @static\n * @memberof AltiResponseReader\n */\n lon : function (node, elevation) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n elevation.lon = parseFloat(textNode.nodeValue);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : longitude attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"z\" de la réponse xml du service alti.\n * (contient une valeur d'altitude, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'altitude\n * @param {Object} elevationObject - objet dans lequel stocker l'altitude retournée : elevation ou measure\n * @static\n * @memberof AltiResponseReader\n */\n z : function (node, elevationObject) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n if (elevationObject) {\n elevationObject.z = parseFloat(textNode.nodeValue);\n } else {\n elevationObject = new Elevation();\n elevationObject.z = parseFloat(textNode.nodeValue);\n return elevationObject;\n }\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : altitude attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"acc\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} elevationObject - objet dans lequel stocker la précision retournée : elevation ou measure\n * @static\n * @memberof AltiResponseReader\n */\n acc : function (node, elevationObject) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n elevationObject.acc = parseFloat(textNode.nodeValue);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : précision (acc) attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"source_name\" de la réponse xml du service alti.\n * (contient le nom de la source, qui est un string)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} measure - objet dans lequel stocker le nom de la source retourné\n * @static\n * @memberof AltiResponseReader\n */\n source_name : function (node, measure) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n measure.source_name = textNode.nodeValue;\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : source_name attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"source_measure\" de la réponse xml du service alti.\n * (contient le nom de la mesure, qui est un string)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} measure - objet dans lequel stocker le nom de la source retourné\n * @static\n * @memberof AltiResponseReader\n */\n source_measure : function (node, measure) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n measure.source_measure = textNode.nodeValue;\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : source_measure attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"measures\" et de ses enfants \"measure\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} elevation - objet dans lequel stocker la précision retournée\n * @static\n * @memberof AltiResponseReader\n */\n measures : function (node, elevation) {\n elevation.measures = [];\n var measure;\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var measureNode;\n var measureChildren;\n for (var i = 0; i < children.length; i++) {\n measure = new Measure();\n measureNode = children[i];\n measureChildren = measureNode.childNodes;\n for (var j = 0; j < measureChildren.length; j++) {\n if (AltiResponseReader.READERS[measureChildren[j].nodeName]) {\n // INFO : on passe en paramètre l'objet en entrée elevation, vide, à remplir.\n AltiResponseReader.READERS[measureChildren[j].nodeName](measureChildren[j], measure);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : measures attendues mais absentes\");\n }\n }\n elevation.measures.push(measure);\n }\n }\n },\n\n /**\n * Lecture d'un noeud \"ExceptionReport\" de la réponse xml du service alti.\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'exception\n * @return {Object} exceptionReport - objet contenant l'exception\n * @static\n * @memberof AltiResponseReader\n */\n exceptionreport : function (node) {\n var response = {};\n\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (child.nodeName === \"Exception\") {\n response.exceptionReport = AltiResponseReader.READERS.exception(child);\n }\n }\n }\n\n return response;\n },\n\n /**\n * Lecture d'un noeud \"Exception\" de la réponse xml du service alti.\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'exception\n * @return {Object} exceptionReport - objet contenant l'exception, avec deux attributs :\n * {String} exceptionReport.exceptionCode - qui contient l'identifiant du code de l'exception\n * {String} exceptionReport.exception - qui contient le message de l'exception\n * @static\n * @memberof AltiResponseReader\n */\n exception : function (node) {\n var exceptionReport = {};\n\n // get exception code\n var exceptionCode = node.getAttribute(\"exceptionCode\");\n if (exceptionCode) {\n exceptionReport.exceptionCode = exceptionCode;\n }\n\n // get exception message\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n exceptionReport.exception = textNode.nodeValue;\n }\n\n return exceptionReport;\n },\n\n /**\n * Lecture d'un noeud \"Error\" de la réponse xml du service alti.\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'exception\n * @return {Object} error - objet contenant l'exception\n * @static\n */\n error : function (node) {\n var response = {\n error : {}\n };\n // get error code and description\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n var textNode;\n // get error code\n if (child.nodeType === 1 && child.nodeName === \"code\") { // 1 === node.ELEMENT_NODE\n textNode = child.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n response.error.code = textNode.nodeValue;\n }\n }\n // get error description\n if (child.nodeType === 1 && child.nodeName === \"description\") { // 1 === node.ELEMENT_NODE\n textNode = child.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n response.error.description = textNode.nodeValue;\n }\n }\n }\n }\n return response;\n }\n\n};\n\n/**\n * Méthode permettant de lancer la lecture d'une réponse XML du service altimétrique,\n * à l'aide des readers de la classe.\n *\n * @method AltiResponseReader.read\n * @param {DOMElement} root - racine de la réponse XML à lire\n * @static\n * @memberof AltiResponseReader\n */\nAltiResponseReader.read = function (root) {\n if (root.nodeName === \"elevations\") {\n var altiResponse = AltiResponseReader.READERS.elevations(root);\n return altiResponse;\n } else if (root.nodeName === \"ExceptionReport\") {\n var exceptionReport = AltiResponseReader.READERS.exceptionreport(root);\n return exceptionReport;\n } else if (root.nodeName === \"error\") {\n var error = AltiResponseReader.READERS.error(root);\n return error;\n } else {\n throw new Error(\"Erreur lors de la lecture de la réponse : elle n'est pas au format attendu.\");\n }\n};\n\nexport default AltiResponseReader;\n","/**\n * Factory pour générer une reponse JSON à partir d'un XML ou d'un JSON\n * (Factory)\n *\n * @module AltiResponseFactory\n * @private\n * @alias Gp.Services.Alti.Response.AltiResponseFactory\n */\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport XML from \"../../../Formats/XML\";\nimport AltiResponseReader from \"../Formats/AltiResponseReader\";\nimport AltiResponse from \"./model/AltiResponse\";\nimport Elevation from \"./model/Elevation\";\n\nvar AltiResponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Alti\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"AltiResponseFactory\");\n logger.trace([\"AltiResponseFactory::build()\"]);\n\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n switch (options.outputFormat) {\n case \"xml\":\n logger.trace(\"analyze response : xml\");\n\n try {\n var p = new XML({\n reader : AltiResponseReader\n });\n\n if (typeof options.response === \"string\") {\n p.setXMLString(options.response);\n } else {\n p.setXMLDoc(options.response);\n }\n\n data = p.parse();\n\n if (!data) {\n throw new Error(MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION_2\"));\n }\n } catch (e) {\n var message = e.message;\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", message),\n status : 200,\n type : ErrorService.TYPE_SRVERR\n }));\n return;\n }\n\n break;\n\n case \"json\":\n logger.trace(\"analyze response : json\");\n logger.trace(\"analyze response : \", typeof options.response);\n\n var JSONResponse = null;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // le service renvoie t il une erreur ?\n if (JSONResponse && JSONResponse.error) {\n // ex. {\"error\": {\"code\": \"BAD_PARAMETER\",\"description\": \"The values () cannot be parsed as a valid longitude (double value such as -180 < lat < 180).\"}}\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", JSONResponse.error.description),\n status : 200,\n type : ErrorService.TYPE_SRVERR\n }));\n return;\n }\n\n // analyse de la reponse\n if (JSONResponse) {\n var elevations = JSONResponse.elevations;\n var altiResponse = new AltiResponse();\n var elevation;\n if (Array.isArray(elevations) && elevations.length) {\n for (var i = 0; i < elevations.length; i++) {\n elevation = new Elevation();\n\n if (typeof elevations[i] === \"object\") {\n // elevations[i] est un objet elevation\n if (elevations[i].lon) {\n elevation.lon = elevations[i].lon;\n }\n if (elevations[i].lat) {\n elevation.lat = elevations[i].lat;\n }\n if (elevations[i].z) {\n elevation.z = elevations[i].z;\n }\n if (elevations[i].acc) {\n elevation.acc = elevations[i].acc;\n }\n if (elevations[i].measures) {\n elevation.measures = elevations[i].measures;\n }\n } else if (typeof elevations[i] === \"number\") {\n // elevations[i] est un nombre, dans le cas de zonly=true notamment\n elevation.z = elevations[i];\n }\n\n if (Array.isArray(altiResponse.elevations)) {\n altiResponse.elevations.push(elevation);\n }\n }\n }\n data = altiResponse;\n }\n\n if (!data) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE_2\"),\n type : ErrorService.TYPE_UNKERR,\n status : -1\n }));\n return;\n }\n break;\n\n default:\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_FORMAT_2\"),\n type : ErrorService.TYPE_UNKERR,\n status : -1\n }));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type : ErrorService.TYPE_SRVERR,\n status : 200\n }));\n return;\n } else if (data.error) {\n var errorMess = data.error.description;\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", errorMess),\n type : ErrorService.TYPE_SRVERR,\n status : 200\n }));\n return;\n }\n }\n } else {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default AltiResponseFactory;\n","\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport AltiRequestFactory from \"./Request/AltiRequestFactory\";\nimport AltiResponseFactory from \"./Response/AltiResponseFactory\";\n\n/**\n * @classdesc\n *\n * Appel du service d'altimétrie du Géoportail\n *\n * @todo gestion du parma. output et callback\n * @todo outputFormat (REST) et format (WPS)\n * @todo La reponse JSON peut encapsuler un XML !\n *\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.Alti\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {Array.} options.positions - Tableau ({lon:float,lat:float}) contenant les coordonnées des points (CRS:84)\n * dont on veut connaître les altitudes (ou à partir desquelles on va calculer le profil).\n * Chaque élément du tableau est un objet JavaScript avec deux attributs : lon et lat, qui sont des flottants.\n * Minimum 2 éléments si on souhaite calculer un profil altimétrique (ElevationLine).\n * Maximum 50 éléments.\n *\n * @param {String} options.outputFormat - Le format de la réponse du service alti : 'xml' ou 'json'.\n * Ce paramètre déterminera l'extension '.xml' ou '.json' du service dans le cas de l'API REST,\n * ou la valeur du paramètre 'format' dans le cas de la norme WPS.\n * Nécessaire si serverUrl est renseigné, et qu'on souhaite passer par l'API REST,\n * pour connaître le format dans lequel sera fournie la réponse (pour son traitement).\n * Non nécessaire pour la norme WPS. Par défaut, ce paramètre vaut 'json'.\n *\n * @param {Number} [options.sampling] - Nombre de points à utiliser pour déterminer le tracé d'un profil altimétrique, compris entre 2 et 5000.\n * A spécifier lorsqu'on souhaite accéder à cette fonctionnalité.\n * Dans ce cas, les points fournis en entrée (au minimum de deux) servent à déterminer l'axe planimétrique\n * le long duquel le profil doit être calculé.\n * Si le paramètre sampling n'est pas spécifié ou moins de deux points sont fournis,\n * c'est le service Elevation qui sera interrogé (altitudes simples calculées pour les points fournis).\n * Une valeur de sampling strictement inférieure à 2 déclenchera un échantillonnage avec la valeur par défaut du service (3 points).\n *\n * @param {String} [options.api] - Manière d'accéder au service : 'REST' (via l'API REST) ou 'WPS' (via la norme WPS).\n * Par défaut, on utilise l'API REST.\n *\n * @param {Boolean} [options.zonly] - Permet de ne récupérer que les altitudes en sortie s'il vaut 'true'.\n * Vaut 'false' par défaut.\n *\n * @param {String} [options.resource] - Resource utilisée pour réaliser le calcul.\n *\n * @example\n * var options = {\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * positions : [{lon:, lat:}, {lon:, lat:}],\n * outputFormat : 'json' // json|xml\n * sampling : 3,\n * api : 'REST', // REST|WPS\n * zonly : false // false|true,\n * resource : \"resource-par-defaut\"\n * };\n *\n */\nfunction Alti (options) {\n if (!(this instanceof Alti)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"Alti\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"Alti\";\n\n // appel du constructeur par heritage\n CommonService.apply(this, arguments);\n\n this.logger = Logger.getLogger(\"Gp.Services.Alti\");\n this.logger.trace(\"[Constructeur Alti (options)]\");\n\n // #####################\n // analyse des options\n // #####################\n\n if (!options.positions) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"positions\"));\n }\n\n if (options.positions.length === 0) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"positions\"));\n }\n\n // ajout des options spécifiques au service\n this.options.positions = options.positions;\n\n // format de réponse du service : \"json\" ou \"xml\" (valeur par défaut), en minuscule !\n this.options.outputFormat = (typeof options.outputFormat === \"string\") ? options.outputFormat.toLowerCase() : \"xml\";\n\n // ressource utilisée pour le calcul altimétrique\n this.options.resource = options.resource || \"ign_rge_alti_wld\";\n\n // sampling\n this.options.sampling = options.sampling || null;\n\n // type d'api utilisé pour requeter le service, en majuscule !\n this.options.api = (typeof options.api === \"string\") ? options.api.toUpperCase() : \"REST\";\n\n // l'api ne peut être interrogée qu'en GET.\n if (this.options.api === \"REST\") {\n this.options.httpMethod = \"GET\";\n }\n\n // param. zonly\n this.options.zonly = options.zonly || false;\n\n // param. measures\n this.options.measures = options.measures || false;\n\n // gestion de l'url du service par defaut\n // si l'url n'est pas renseignée, il faut utiliser les urls par defaut\n // en fonction du type d'api, REST ou WPS, du format de reponse demandé (outputFormat)\n // ainsi que sur le type de service (profil ou elevation)\n if (!this.options.serverUrl) {\n var lstUrlByDefault = DefaultUrlService.Alti.newUrl();\n var urlFound = null;\n switch (this.options.api) {\n case \"WPS\":\n urlFound = lstUrlByDefault.wps;\n break;\n case \"REST\":\n var key = (options.sampling ? \"profil\" : \"elevation\") + \"-\" + this.options.outputFormat;\n urlFound = lstUrlByDefault[key];\n break;\n default:\n throw new Error(_.getMessage(\"PARAM_UNKNOWN\", \"api\"));\n }\n\n if (!urlFound) {\n throw new Error(\"Url by default not found !\");\n }\n this.options.serverUrl = urlFound;\n this.logger.trace(\"Server URL by default : \" + this.options.serverUrl);\n }\n\n // gestion du type de service\n // si l'extension de l'url est .json ou .xml, on surcharge le format de sortie (outputFormat)\n var idx = this.options.serverUrl.lastIndexOf(\".\");\n if (idx !== -1) {\n var extension = this.options.serverUrl.substring(idx + 1);\n if (extension && extension.length < 5) { // FIXME extension de moins de 4 car. ...\n this.logger.trace(\"Server Extension URL : \" + extension);\n switch (extension.toLowerCase()) {\n case \"json\":\n case \"xml\":\n this.options.outputFormat = extension.toLowerCase();\n break;\n default:\n throw new Error(\"type of service : unknown or unsupported (json or xml) !\");\n }\n }\n }\n}\n\n/**\n * @lends module:Alti#\n */\nAlti.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/**\n * Constructeur (alias)\n */\nAlti.prototype.constructor = Alti;\n\n/**\n * Création de la requête (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nAlti.prototype.buildRequest = function (error, success) {\n // utilisation en mode callback\n var options = {\n httpMethod : this.options.httpMethod,\n // callback\n onSuccess : function (result) {\n // sauvegarde de la requete !\n this.request = result;\n success.call(this, this.request);\n },\n onError : error,\n scope : this,\n // spécifique au service :\n resource : this.options.resource,\n positions : this.options.positions,\n outputFormat : this.options.outputFormat,\n sampling : this.options.sampling,\n api : this.options.api,\n zonly : this.options.zonly,\n measures : this.options.measures\n };\n\n AltiRequestFactory.build(options);\n};\n\n/**\n * Analyse de la reponse (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nAlti.prototype.analyzeResponse = function (error, success) {\n // INFO\n // Factory pour masquer la complexité du retour du service qui renvoie soit\n // - une 'string' qui contient du XML ou JSON natif en mode XHR\n // - un objet JSON qui est natif ou encapsulé\n\n if (this.response) {\n var options = {\n response : this.response,\n outputFormat : this.options.outputFormat, // utile pour parser la string en mode XHR : JSON ou XML !\n rawResponse : this.options.rawResponse,\n onError : error,\n onSuccess : success,\n scope : this\n };\n\n AltiResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default Alti;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes du service de calcul d'itineraire (REST).\n * Permet le mapping avec les options du service.\n * @constructor\n * @alias Gp.Services.Route.Request.RouteParamREST\n * @param {Object} options - options\n *\n * @private\n */\nfunction GeocodeParamREST (options) {\n if (!(this instanceof GeocodeParamREST)) {\n throw new TypeError(\"GeocodeParamREST constructor cannot be called as a function.\");\n }\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur GeocodeParamREST ()]\");\n\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n // methode de geocodage\n if (!this.options.geocodeMethod || (this.options.geocodeMethod !== \"search\" && this.options.geocodeMethod !== \"reverse\")) {\n throw new Error(\"Error geocodeMethod not valid\");\n }\n this.geocodeMethod = this.options.geocodeMethod;\n\n // mapping des options avec l'API REST\n this.query = (typeof this.options !== \"undefined\") ? this.options.query : null;\n\n this.searchGeometry = this.options.searchGeometry || null;\n\n this.index = this.options.index || null;\n\n this.lon = this.options.position && this.options.position.lon ? this.options.position.lon : null;\n\n this.lat = this.options.position && this.options.position.lat ? this.options.position.lat : null;\n\n this.maxResp = this.options.maxResp || null;\n\n this.returnTrueGeometry = this.options.returnTrueGeometry || null;\n\n this.filters = this.options.filters || {};\n}\n\n/**\n * CLASSNAME\n */\nGeocodeParamREST.CLASSNAME = \"GeocodeParamREST\";\n\nGeocodeParamREST.prototype = {\n\n /**\n * @lends module:GeocodeParamREST#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor : GeocodeParamREST,\n\n /**\n * Retourne les filtres\n * @returns {String} les filtres\n */\n getFilters : function () {\n var filters = {};\n for (var prop in this.filters) {\n if (this.filters.hasOwnProperty(prop)) {\n filters[prop] = this.filters[prop];\n }\n }\n return filters;\n },\n\n /**\n * Retourne l'index\n * @returns {String} l'index\n */\n getIndex : function () {\n if (this.index === undefined) {\n return null;\n }\n if (this.index === \"StreetAddress\") {\n return \"address\";\n } else if (this.index === \"CadastralParcel\") {\n return \"parcel\";\n } else if (this.index === \"PositionOfInterest\") {\n return \"poi\";\n } else if (this.index === \"location\") {\n return \"location\";\n }\n return this.index;\n },\n\n /**\n * Retourne la géométrie de recherche\n * @returns {String} la géométrie de recherche au format json\n */\n getSearchGeometry : function () {\n return JSON.stringify(this.searchGeometry);\n }\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Array} liste de paramêtres\n */\nGeocodeParamREST.prototype.getParams = function () {\n var map = [];\n\n if (this.geocodeMethod === \"search\") {\n map.push({\n k : \"q\",\n v : this.query\n });\n }\n\n if (this.index) {\n map.push({\n k : \"index\",\n v : this.getIndex()\n });\n }\n\n if (this.geocodeMethod === \"reverse\" && this.searchGeometry) {\n map.push({\n k : \"searchgeom\",\n v : this.getSearchGeometry()\n });\n }\n\n if (this.lon && this.lat) {\n map.push({\n k : \"lon\",\n v : this.lon\n });\n map.push({\n k : \"lat\",\n v : this.lat\n });\n }\n\n if (this.maxResp) {\n map.push({\n k : \"limit\",\n v : this.maxResp\n });\n }\n\n if (this.returnTrueGeometry) {\n map.push({\n k : \"returntruegeometry\",\n v : this.returnTrueGeometry\n });\n }\n\n const filters = this.getFilters();\n for (var key in filters) {\n map.push({\n k : key,\n v : filters[key]\n });\n }\n\n return map;\n};\n\nexport default GeocodeParamREST;\n","\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport GeocodeParamREST from \"./model/GeocodeParamREST\";\n\n/**\n * @classdesc\n * Classe de gestion des requêtes de type REST sur le service de calcul d'itineraire\n * (uniquement en GET)\n *\n * @constructor\n * @alias Gp.Services.Geocode.Request.GeocodeRequestREST\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * var options = {\n * (...)\n * };\n *\n * @private\n */\nfunction GeocodeRequestREST (options) {\n this.logger = Logger.getLogger(\"GeocodeRequestREST\");\n this.logger.trace(\"[Constructeur GeocodeRequestREST ()]\");\n\n if (!(this instanceof GeocodeRequestREST)) {\n throw new TypeError(\"GeocodeRequestREST constructor cannot be called as a function.\");\n }\n\n // existance des options\n if (!options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n /** liste des options */\n this.settings = options;\n}\n\nGeocodeRequestREST.prototype = {\n\n /**\n * @lends module:GeocodeRequestREST#\n */\n\n /**\n * request\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : GeocodeRequestREST,\n\n /**\n * Construction de la requête.\n *\n * @returns {String} request\n */\n processRequestString : function () {\n var request = \"\";\n\n // Mapping des options avec le service de l'API REST\n const oParams = new GeocodeParamREST(this.settings);\n\n const params = oParams.getParams();\n for (var i = 0; i < params.length; i++) {\n var o = params[i];\n if (request) {\n request += \"&\";\n }\n request += o.k + \"=\" + o.v;\n }\n\n if (!this.settings.geocodeMethod || (this.settings.geocodeMethod !== \"search\" && this.settings.geocodeMethod !== \"reverse\")) {\n throw new Error(\"Error geocodeMethod not valid\");\n }\n\n this.requestString = \"?\" + request;\n this.logger.trace(this.requestString);\n\n return this.requestString;\n }\n};\n\nexport default GeocodeRequestREST;\n","import Logger from \"../../../Utils/LoggerByDefault\";\nimport GeocodeRequestREST from \"./GeocodeRequestREST\";\n\n/**\n * Creation d'une requête\n * (Factory)\n *\n * @module GeocodeRequestFactory\n * @alias Gp.Services.Geocode.Request.GeocodeRequestFactory\n * @private\n */\nvar GeocodeRequestFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Geocode\n *\n * @example\n * var options = {\n * // options specifiques du service\n * geocodeMethod:\n * query:\n * filters:\n * maximumResponses:\n * };\n * var result = GeocodeRequestFactory.build(options);\n * if (!result) {\n * // error...\n * }\n * @returns {String} request\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"GeocodeRequestFactory\");\n logger.trace([\"GeocodeRequestFactory::build()\"]);\n\n var settings = options || {};\n\n var myReq = new GeocodeRequestREST(settings);\n if (!myReq.processRequestString()) {\n throw new Error(\"Error process request (rest) !\");\n }\n var request = myReq.requestString;\n\n logger.trace(request);\n\n return request;\n }\n};\n\nexport default GeocodeRequestFactory;\n","\n/**\n * Response object for {@link module:Services~geocode Gp.Services.geocode ()} or {@link module:Services~reverseGeocode Gp.Services.reverseGeocode ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Array.} locations - locations array.\n *\n * @namespace\n * @alias Gp.Services.GeocodeResponse\n */\nfunction GeocodeResponse () {\n if (!(this instanceof GeocodeResponse)) {\n throw new TypeError(\"GeocodeResponse constructor cannot be called as a function.\");\n }\n\n this.locations = [];\n}\n\nGeocodeResponse.prototype = {\n\n constructor : GeocodeResponse\n\n};\n\nexport default GeocodeResponse;\n","\n/**\n * Single location object returned by the underlying geocoding web service.\n *\n * @property {Gp.Point} position - Position of the location given in the requested coordinates system.\n * @property {String} type - location type \"StreetAddress\" (for an address), \"PositionOfInterest\" (for a place name) or \"CadastralParcel\" (for cadastral parcel).\n * @property {String} matchType - how geocoding is performed : \"street number\" (exact address), \"street enhanced\" (street number calculated by interpolation), \"street\" (only the street), \"city\" (only the city).\n * @property {Float} accuracy - Accuracy of the response towards the requested location between 0 (unaccurate) and 1 (exact match).\n * @property {Object} placeAttributes - Associative array matching the following attributes with their values given by the underlying web service :\n *\n * *Common attributes : *\n *\n * - **trueGeometry** - the 'real life' geometry if different from 'Point' type.\n *\n * *if type === \"StreetAddress\" :*\n *\n * - **number** - Street number.\n * - **postalCode** - PostCode\n * - **street** - Street name\n * - **city** - City\n * - **houseNumberInfos** - additional street number information\n * - **inseeCode** - INSEE Code\n *\n *\n * *if type === \"PositionOfInterest\" :*\n *\n * - **type** - Place name type\n * - **postalCode** - PostCode\n * - **toponyme** - Toponyme\n * - **extraFields** - additional place name properties\n * - **inseeCode** - INSEE Code\n *\n *\n * *si type = \"CadastralParcel\" :*\n *\n * - **codeCommuneAbs** - when a parcel comes from a city that was absorbed by another, code of that old city. \"000\" otherwise.\n * - **codeArrondissement** - arrondissement\n * - **identifiant** - cadastral parcel code\n * - **feuille** - Parcel Sheet (eg. \"1\").\n * - **numero** - Parcel Number (eg. \"0041\")\n * - **section** - Parcel Section (eg. \"0D\").\n * - **nomCommune** - Parcel municipality name.\n * - **codeCommune** - Parcel municipality.\n * - **codeDepartement** - Parcel Department.\n *\n * @namespace\n * @alias Gp.Services.Geocode.GeocodedLocation\n */\nfunction GeocodedLocation () {\n if (!(this instanceof GeocodedLocation)) {\n throw new TypeError(\"GeocodedLocation constructor cannot be called as a function.\");\n }\n\n this.position = null;\n\n this.matchType = null;\n\n this.placeAttributes = {};\n\n this.type = null;\n\n this.accuracy = null;\n\n /**\n * Nom de la classe : \"GeocodedLocation\"\n * @type {String}\n */\n this.CLASSNAME = \"GeocodedLocation\";\n}\n\nGeocodedLocation.prototype = {\n\n constructor : GeocodedLocation\n\n};\n\nexport default GeocodedLocation;\n","// import Logger from \"../../../Utils/LoggerByDefault\";\nimport MR from \"../../../Utils/MessagesResources\";\nimport ErrSrv from \"../../../Exceptions/ErrorService\";\nimport GeocodeResponse from \"../Response/model/GeocodeResponse\";\nimport GeocodedLocation from \"../Response/model/GeocodedLocation\";\n\n/**\n * Fonction retournant un objet contenant des clés de lecture (readers)\n * qui permettent de parser des réponses XML du service de géocodage direct du Géoportail\n * afin de récupérer les résultats retournés.\n * @module GeocodeResponseParser\n * @alias Gp.Services.Geocode.Formats.GeocodeResponseParser\n * @private\n */\n\n/**\n * @classdesc\n *\n * Classe permettant de parser une réponse GeoJSON\n *\n * @constructor\n * @alias Gp.Formats.GeocodeResponseParser\n *\n * @private\n */\nfunction GeocodeResponseParser () {\n if (!(this instanceof GeocodeResponseParser)) {\n throw new TypeError(\"GeocodeResponseParser constructor cannot be called as a function.\");\n }\n}\n\nGeocodeResponseParser.prototype = {\n\n /**\n * @lends module:GeocodeResponseParser\n */\n\n /*\n * Constructeur (alias)\n */\n constructor : GeocodeResponseParser,\n\n /**\n * Méthode permettant de lancer la lecture d'une réponse GeoJSON,\n *\n * @param {String} json - réponse au format GeoJSON\n * @return {Object} geocodeResponse|exceptionReport : l'objet contenant les informations de la réponse GeoJSON,\n * sous la forme d'un objet GeocodeResponse, ou un objet littéral exceptionReport si le service a renvoyé une exception.\n */\n parse : function (json) {\n var geocodeResponse = new GeocodeResponse();\n\n const obj = JSON.parse(json);\n\n if (obj.type === \"FeatureCollection\") {\n for (var i = 0; i < obj.features.length; ++i) {\n _parseFeature(obj.features[i], geocodeResponse);\n }\n } else if (obj.type === \"Feature\") {\n _parseFeature(obj, geocodeResponse);\n } else if (obj.type === \"SERVICE_ERROR\") {\n return _parseError(obj);\n } else {\n var mess = MR.getMessage(\"SERVICE_RESPONSE_ANALYSE\", obj.type);\n throw new ErrSrv({\n message : mess,\n type : ErrSrv.TYPE_UNKERR,\n status : 200\n });\n }\n\n return geocodeResponse;\n }\n};\n\n/**\n * Méthode permettant de parser un feature\n *\n * @private\n *\n * @param {Object} feature\n * @param {Object} geocodeResponse\n *\n * @memberof GeocodeResponseParser\n * @return {Object} objet GeocodedLocation\n */\nfunction _parseFeature (feature, geocodeResponse) {\n var location = new GeocodedLocation();\n if (feature.geometry && feature.geometry.type === \"Point\") {\n location.position = {\n lon : feature.geometry.coordinates[0],\n lat : feature.geometry.coordinates[1]\n };\n }\n if (feature.properties) {\n for (var prop in feature.properties) {\n if (prop === \"score\") {\n location.accuracy = feature.properties[prop];\n } else if (prop === \"_type\") {\n if (feature.properties[prop] === \"address\") {\n location.type = \"StreetAddress\";\n } else if (feature.properties[prop] === \"poi\") {\n location.type = \"PositionOfInterest\";\n } else if (feature.properties[prop] === \"parcel\" || feature.properties[prop] === \"cadastral\") {\n location.type = \"CadastralParcel\";\n }\n } else {\n location.placeAttributes[prop] = feature.properties[prop];\n }\n }\n if (feature.properties._type === \"address\") {\n location.matchType = feature.properties.number !== undefined && feature.properties.number !== null ? \"street number\" : \"street\";\n }\n }\n geocodeResponse.locations.push(location);\n}\n\n/**\n * Méthode permettant de parser une erreur\n *\n * @private\n *\n * @param {Object} error\n *\n * @memberof GeocodeResponseParser\n * @return {Object}\n */\nfunction _parseError (error) {\n return {\n exceptionReport : error\n };\n}\n\nexport default GeocodeResponseParser;\n","/**\n * Factory pour générer une reponse JSON à partir d'un XML\n * (Factory)\n *\n * @module GeocodeResponseFactory\n * @alias Gp.Services.Geocode.Response.GeocodeResponseFactory\n * @private\n */\n// import Logger from \"../../../Utils/LoggerByDefault\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport GeocodeResponseParser from \"../Formats/GeocodeResponseParser\";\n\nvar GeocodeReponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Geocode\n *\n * @example\n * var options = {\n * response :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // data de type GeocodeResponse\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n data = options.response;\n } else {\n try {\n const parser = new GeocodeResponseParser();\n data = parser.parse(options.response);\n\n if (!data) {\n throw new Error(\"L'analyse de la réponse du service !?\");\n }\n } catch (e) {\n var message = e.message;\n if (typeof options.response === \"string\") {\n message += \"('\" + options.response + \"')\";\n } else {\n message += \"('\" + options.response.documentElement.innerHTML + \"')\";\n }\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE\", message),\n type : ErrorService.TYPE_UNKERR,\n status : -1\n }));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type : ErrorService.TYPE_SRVERR,\n status : 200 // FIXME : 200 ?\n }));\n return;\n }\n }\n } else {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\"),\n type : ErrorService.TYPE_SRVERR,\n status : -1 // FIXME : status response\n }));\n return;\n }\n\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default GeocodeReponseFactory;\n","import Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport GeocodeRequestFactory from \"./Request/GeocodeRequestFactory\";\nimport GeocodeResponseFactory from \"./Response/GeocodeResponseFactory\";\n\n/**\n * @classdesc\n * Appel du service de géocodage direct du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n *\n *\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.Geocode\n *\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String|Object} options.query - Nom de l'adresse, du toponyme, de l'unité administrative ou de la parcelle cadastrale recherchée.\n *\n * @param {Object} [options.filters] - Les propriétés possibles de cet objet sont décrites ci-après.\n * @param {String} [options.filters.[prop]] - Critère supplémentaire pour filtrer la recherche sous la forme\n * d'un couple clé/valeur à définir selon les possibilités du serveur ajouté à la requête.\n * Le service de géocodage du Géoportail permet de filtrer les adresses postales avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"city\".\n * Il permet également de filtrer les toponymes avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"type\".\n * Enfin, il permet de filtrer les parcelles cadastrales avec les propriétés :\n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n *\n * @param {String} [options.index = \"StreetAddress\"] - Type de l'objet recherché.\n * Le service de géocodage du Géoportail permet de rechercher des 'PositionOfInterest' pour des toponymes, des 'StreetAddress'\n * pour des adresses postales ou des 'CadastralParcel' pour des parcelles cadastrales.\n * L'index 'location' regroupe les indexes 'StreetAddress' et 'PositionOfInterest'.\n * D'autres types pourront être rajoutés selon l'évolution du service.\n * Par défaut, index = 'StreetAddress'.\n *\n * @param {Object} options.position - Position du point de référence pour le calcul de proximité exprimée dans le système de référence spécifié par le srs.\n * @param {Float} options.position.lon - Longitude du point de référence pour le calcul de proximité.\n * @param {Float} options.position.lat - Latitude du point de référence pour le calcul de proximité.\n *\n * @param {Number} [options.maximumResponses] - Nombre de réponses maximal que l'on souhaite recevoir.\n * Pas de valeur par défaut.\n * Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 20.\n *\n * @param {Boolean} [options.returnTrueGeometry = false] - Booléen indiquant si l'on souhaite récupérer la géométrie vraie des objects géolocalisés.\n * false par défaut.\n *\n *\n * @example\n * var options = {\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * proxyURL : null,\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * position : {lon:, lat:},\n * index : 'StreetAddress',\n * query : '10 rue du pont Machin-ville'\n * (...)\n * };\n */\nfunction Geocode (options_) {\n if (!(this instanceof Geocode)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"Geocode\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"Geocode\";\n\n this.logger = Logger.getLogger(\"Gp.Services.Geocode\");\n this.logger.trace(\"[Constructeur Geocode (options)]\");\n\n var options = this.patchOptionConvertor(options_);\n if (!options.serverUrl) {\n options.serverUrl = DefaultUrlService.Geocode.newUrl();\n }\n\n // appel du constructeur par heritage\n CommonService.apply(this, [options]);\n\n if (!options.hasOwnProperty(\"query\")) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"query\"));\n }\n\n // ajout des options spécifiques au service\n this.options.query = options.query;\n\n // on definit l'index par defaut\n if (!options.index) {\n this.options.index = options.index = \"StreetAddress\";\n }\n\n if (options.filters) {\n var filter = Object.keys(options.filters);\n for (var i = 0; i < filter.length; i++) {\n var key = filter[i];\n // on supprime les filtres vides\n if (typeof options.filters[key] === \"undefined\" ||\n (typeof options.filters[key] === \"object\" && Object.keys(options.filters[key]).length === 0) ||\n (typeof options.filters[key] === \"string\" && options.filters[key].length === 0) ||\n (Array.isArray(options.filters[key]) && options.filters[key].length === 0)\n ) {\n delete this.options.filters[key];\n }\n }\n }\n\n this.options.index = options.index || \"StreetAddress\";\n this.options.maximumResponses = options.maximumResponses || 20;\n}\n\n/**\n * @lends module:Geocode#\n */\nGeocode.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nGeocode.prototype.constructor = Geocode;\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} options_ - options du service\n * @return {Object} - options\n */\nGeocode.prototype.patchOptionConvertor = function (options_) {\n const options = options_;\n\n if (options.hasOwnProperty(\"location\")) {\n this.logger.warn(\"The parameter 'location' is deprecated\");\n\n if (!options.query) {\n options.query = options.location;\n }\n delete options.location;\n }\n\n if (options.filterOptions) {\n this.logger.warn(\"The parameter 'filterOptions' is deprecated\");\n\n if (!options.filters) {\n options.filters = options.filterOptions;\n\n if (options.filters.type) {\n this.logger.warn(\"The parameter 'filterOptions.type' is deprecated\");\n if (!options.index) {\n if (Array.isArray(options.filters.type) && options.filters.type.length > 0) {\n options.index = options.filters.type[0];\n } else {\n options.index = options.filters.type;\n }\n }\n delete options.filters.type;\n }\n\n if (options.filters.bbox) {\n this.logger.warn(\"The parameter 'filterOptions.bbox' is deprecated\");\n delete options.filters.bbox;\n }\n }\n delete options.filterOptions;\n }\n\n if (options.position) {\n if (options.position.x) {\n this.logger.warn(\"The parameter 'position.x' is deprecated\");\n\n if (!options.position.lon) {\n options.position.lon = options.position.x;\n }\n delete options.position.x;\n }\n\n if (options.position.y) {\n this.logger.warn(\"The parameter 'position.y' is deprecated\");\n\n if (!options.position.lat) {\n options.position.lat = options.position.y;\n }\n delete options.position.y;\n }\n }\n\n if (options.returnFreeForm) {\n this.logger.warn(\"The parameter 'returnFreeForm' is deprecated\");\n delete options.returnFreeForm;\n }\n\n if (options.srs) {\n this.logger.warn(\"The parameter 'srs' is deprecated\");\n delete options.srs;\n }\n\n return options;\n};\n\n/**\n * Création de la requête (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nGeocode.prototype.buildRequest = function (error, success) {\n var options = {\n httpMethod : this.options.httpMethod,\n // options specifiques du service\n geocodeMethod : \"search\",\n query : this.options.query,\n index : this.options.index,\n returnTrueGeometry : this.options.returnTrueGeometry,\n position : this.options.position,\n maxResp : this.options.maximumResponses,\n filters : this.options.filters\n };\n\n this.request = GeocodeRequestFactory.build(options);\n\n // on teste si la requete a bien été construite !\n (!this.request)\n ? error.call(this, new ErrorService(_.getMessage(\"SERVICE_REQUEST_BUILD\")))\n : success.call(this, this.request);\n};\n\n/**\n * Analyse de la reponse (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nGeocode.prototype.analyzeResponse = function (error, success) {\n /* INFO :\n Etape 1 : Création de la requête (URL)\n -> stockage de la requête dans this.request\n Etape 2 : Envoi de la requête\n -> appel du protocol XHR, et envoi (par ex send ())\n -> récupération de la réponse JSON dans la fonction onSuccess () (this.response)\n -> si code HTTP 200 et pas de message d'erreur : etape 3\n -> si code HTTP != 200 : lancement de la fonction de callback onFailure avec le message d'erreur\n Etape 3 : Analyse de la réponse JSON (si rawResponse === false )\n -> appel du parser pour récupérer le document\n Etape 4 : Lancement de la fonction de callback onSuccess avec la réponse :\n -> JSON (si rawResponse === true)\n -> ou geocodedLocations\n */\n\n if (this.response) {\n var options = {\n response : this.response,\n rawResponse : this.options.rawResponse,\n onError : error,\n onSuccess : success,\n scope : this\n };\n\n GeocodeResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default Geocode;\n","import Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport GeocodeRequestFactory from \"./Request/GeocodeRequestFactory\";\nimport GeocodeResponseFactory from \"./Response/GeocodeResponseFactory\";\n\n/**\n * @classdesc\n * Appel du service de géocodage inverse du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.ReverseGeocode\n *\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {Object} options.position - Position du point de référence pour le calcul de proximité exprimée dans le système de référence spécifié par le srs.\n * @param {Float} options.position.lon - Longitude du point de référence pour le calcul de proximité.\n * @param {Float} options.position.lat - Latitude du point de référence pour le calcul de proximité.\n *\n * @param {Object} [options.filters] - Les propriétés possibles de cet objet.\n * @param {String} [options.filters.[proprietes du filtre]] - Critère supplémentaire pour filtrer la recherche sous la forme\n * d'un couple clé/valeur à définir selon les possibilités du serveur ajouté à la requête.\n * Le service de géocodage du Géoportail permet de filtrer les adresses postales avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"city\".\n * Il permet également de filtrer les toponymes avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"type\".\n * Enfin, il permet de filtrer les parcelles cadastrales avec les propriétés :\n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n *\n * @param {Object} [options.searchGeometry] - Emprise dans laquelle on souhaite effectuer la recherche.\n * Les propriétés possibles de cet objet sont décrites ci-après.\n * @param {String} options.searchGeometry.type - Type de géometrie (Point|Circle|Linestring|Polygon)\n * @param {Array.|Array.Array.} options.searchGeometry.coordinates - Coordonnées des points constituant la géométrie.\n * @param {Float} options.searchGeometry.radius - Rayon. Paramètre applicable uniquement pour le type 'Circle'.\n *\n * @param {String} [options.index = \"StreetAddress\"] - Type de l'objet recherché.\n * Le service de géocodage du Géoportail permet de rechercher des 'PositionOfInterest' pour des toponymes, des 'StreetAddress'\n * pour des adresses postales ou des 'CadastralParcel' pour des parcelles cadastrales. L'index 'location' permet une recherche\n * multi-indexes en regroupant les indexes 'PositionOfInterest' et 'StreetAddress'.\n * D'autres types pourront être rajoutés selon l'évolution du service.\n * Par défaut, index = 'StreetAddress'.\n *\n * @param {Number} [options.maximumResponses] - Nombre de réponses maximal que l'on souhaite recevoir.\n * Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 20s.\n *\n * @param {Boolean} [options.returnTrueGeometry] - Booléen indiquant si l'on souhaite récupérer la géométrie vraie des objects géolocalisés.\n * false par défaut.\n *\n * @example\n * var options = {\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * proxyURL : null,\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * index : 'StreetAddress',\n * searchGeometry : {\n * type : Circle,\n * coordinates : [48, 2],\n * radius : 100\n * },\n * position : {lon:2 , lat:48.5},\n * maximumResponses : 25,\n * };\n *\n */\nfunction ReverseGeocode (options_) {\n if (!(this instanceof ReverseGeocode)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"ReverseGeocode\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"ReverseGeocode\";\n\n this.logger = Logger.getLogger(\"Gp.Services.ReverseGeocode\");\n this.logger.trace(\"[Constructeur ReverseGeocode (options)]\");\n\n var options = this.patchOptionConvertor(options_);\n if (!options.serverUrl) {\n options.serverUrl = DefaultUrlService.ReverseGeocode.newUrl();\n }\n\n // appel du constructeur par heritage\n CommonService.apply(this, [options]);\n\n if (!options.searchGeometry) {\n if (!options.position) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"searchGeometry\"));\n }\n } else {\n this.options.searchGeometry = options.searchGeometry;\n }\n\n // on definit l'index par defaut\n if (!options.index) {\n this.options.index = options.index = \"StreetAddress\";\n }\n\n if (options.filters) {\n var filter = Object.keys(options.filters);\n for (var i = 0; i < filter.length; i++) {\n var key = filter[i];\n // on supprime les filtres vides\n if (typeof options.filters[key] === \"undefined\" ||\n (typeof options.filters[key] === \"object\" && Object.keys(options.filters[key]).length === 0) ||\n (typeof options.filters[key] === \"string\" && options.filters[key].length === 0) ||\n (Array.isArray(options.filters[key]) && options.filters[key].length === 0)\n ) {\n delete this.options.filters[key];\n }\n }\n }\n\n this.options.position = options.position;\n this.options.index = options.index || \"StreetAddress\";\n this.options.maximumResponses = options.maximumResponses || 20;\n}\n\n/**\n * @lends module:ReverseGeocode#\n */\nReverseGeocode.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nReverseGeocode.prototype.constructor = ReverseGeocode;\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} options_ - options du service\n * @return {Object} - options\n */\nReverseGeocode.prototype.patchOptionConvertor = function (options_) {\n var options = options_;\n\n if (options.filterOptions) {\n this.logger.warn(\"The parameter 'filterOptions' is deprecated\");\n\n if (options.filterOptions.type) {\n this.logger.warn(\"The parameter 'filterOptions.type' is deprecated\");\n if (!options.index) {\n if (Array.isArray(options.filterOptions.type) && options.filterOptions.type.length > 0) {\n options.index = options.filterOptions.type[0];\n } else {\n options.index = options.filterOptions.type;\n }\n }\n delete options.filterOptions.type;\n }\n\n if (options.filterOptions.bbox) {\n this.logger.warn(\"The parameter 'filterOptions.bbox' is deprecated\");\n if (!options.searchGeometry) {\n // convertir la geometrie\n options.searchGeometry = this.bbox2Json(options.filterOptions.bbox);\n }\n delete options.filterOptions.bbox;\n }\n\n if (options.filterOptions.circle) {\n this.logger.warn(\"The parameter 'filterOptions.circle' is deprecated\");\n if (!options.searchGeometry) {\n // convertir la geometrie\n options.searchGeometry = this.circle2Json(options.filterOptions.circle);\n }\n delete options.filterOptions.circle;\n }\n\n if (options.filterOptions.polygon) {\n this.logger.warn(\"The parameter 'filterOptions.polygon' is deprecated\");\n if (!options.searchGeometry) {\n // convertir la geometrie\n options.searchGeometry = this.polygon2Json(options.filterOptions.polygon);\n }\n delete options.filterOptions.polygon;\n }\n\n if (!options.filters && Object.keys(options.filterOptions).length > 0) {\n options.filters = options.filterOptions;\n }\n\n delete options.filterOptions;\n }\n\n if (options.position) {\n if (options.position.x) {\n this.logger.warn(\"The parameter 'position.x' is deprecated\");\n\n if (!options.position.lon) {\n options.position.lon = options.position.x;\n }\n delete options.position.x;\n }\n\n if (options.position.y) {\n this.logger.warn(\"The parameter 'position.y' is deprecated\");\n\n if (!options.position.lat) {\n options.position.lat = options.position.y;\n }\n delete options.position.y;\n }\n }\n\n if (options.srs) {\n this.logger.warn(\"The parameter 'srs' is deprecated\");\n delete options.srs;\n }\n\n return options;\n};\n\n/**\n * (overwrite)\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nReverseGeocode.prototype.buildRequest = function (error, success) {\n var options = {\n httpMethod : this.options.httpMethod,\n // options specifiques du service\n geocodeMethod : \"reverse\",\n searchGeometry : this.options.searchGeometry,\n index : this.options.index,\n position : this.options.position,\n returnTrueGeometry : this.options.returnTrueGeometry,\n maxResp : this.options.maximumResponses,\n filters : this.options.filters\n };\n\n this.request = GeocodeRequestFactory.build(options);\n\n // on teste si la requete a bien été construite !\n (!this.request)\n ? error.call(this, new ErrorService(_.getMessage(\"SERVICE_REQUEST_BUILD\")))\n : success.call(this, this.request);\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nReverseGeocode.prototype.analyzeResponse = function (error, success) {\n if (this.response) {\n var options = {\n response : this.response,\n rawResponse : this.options.rawResponse,\n onError : error,\n onSuccess : success,\n scope : this\n };\n\n GeocodeResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Array} bbox - bbox\n * @return {Object} - geometrie au format json\n */\nReverseGeocode.prototype.bbox2Json = function (bbox) {\n return {\n type : \"Polygon\",\n coordinates : [[\n [bbox.left, bbox.top],\n [bbox.right, bbox.top],\n [bbox.right, bbox.bottom],\n [bbox.left, bbox.bottom],\n [bbox.left, bbox.top]\n ]]\n };\n};\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} circle - circle\n * @return {Object} - geometrie au format json\n */\nReverseGeocode.prototype.circle2Json = function (circle) {\n return {\n type : \"Circle\",\n radius : circle.radius,\n coordinates : [circle.x, circle.y]\n };\n};\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Array} polygon - polygon\n * @return {Object} - geometrie au format json\n */\nReverseGeocode.prototype.polygon2Json = function (polygon) {\n var jsonGeom = {\n type : \"Polygon\",\n coordinates : [[]]\n };\n\n for (var i = 0; i < polygon.length; ++i) {\n jsonGeom.coordinates[0].push([polygon[i].x, polygon[i].y]);\n }\n\n return jsonGeom;\n};\n\n/**\n * Codes EPSG géographiques (lat/lon). Utiles car les coordonnées doivent être inversées.\n */\nReverseGeocode.geoEPSG = [\"EPSG:4326\"];\n\nexport default ReverseGeocode;\n","/**\n * Response object for {@link module:Services~autoComplete Gp.Services.autoComplete ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Array.} suggestedLocations - SuggestedLocations array.\n *\n * @namespace\n * @alias Gp.Services.AutoCompleteResponse\n */\nfunction AutoCompleteResponse () {\n if (!(this instanceof AutoCompleteResponse)) {\n throw new TypeError(\"AutoCompleteResponse constructor cannot be called as a function.\");\n }\n\n this.suggestedLocations = [];\n}\n\nAutoCompleteResponse.prototype = {\n\n constructor : AutoCompleteResponse\n\n};\n\nexport default AutoCompleteResponse;\n","\n/**\n * Single SuggestedLocation Object returned by underlying web service.\n * Each suggested location represents a street address (\"StreetAddress\") or a place name (\"PositionOfInterest\").\n *\n * @property {String} type - Suggested location type : \"StreetAddress\" ou \"PositionOfInterest\"\n * @property {Gp.Point} position - Position of the suggested location given in requested coordinates system.\n * @property {String} commune - Suggested municipality\n * @property {String} fullText - Full text representation of the suggested location.\n * @property {String} postalCode - Suggested location postcode\n * @property {Integer} classification - Number used to classify the importance of the place where is the suggested location from 1 (most important) to 7 (less important).\n * @property {String} street - Street name of the suggested location (\"StreetAddress\" only).\n * @property {String} kind - Nature of the suggested location : \"prefecture\", \"monument\", \"commune\", ... for instance (\"PositionOfInterest\" only).\n *\n * @namespace\n * @alias Gp.Services.AutoComplete.SuggestedLocation\n */\nfunction SuggestedLocation () {\n if (!(this instanceof SuggestedLocation)) {\n throw new TypeError(\"SuggestedLocation constructor cannot be called as a function.\");\n }\n\n /* REPONSE :\n {\n \"status\" : \"OK\",\n \"results\" : [\n {\n \"country\":\"PositionOfInterest\",\n \"x\":-1.559185,\n \"y\":47.952603,\n \"city\":\"Brie\",\n \"zipcode\":\"35150\",\n \"street\":\"corbe\",\n \"kind\":\"Lieu-dit habité\",\n \"fulltext\":\"corbe, 35150 Brie\",\n \"classification\":6\n },\n {\n \"country\":\"StreetAddress\",\n \"x\":1.538295,\n \"y\":43.19646,\n \"city\":\"Brie\",\n \"zipcode\":\"09700\",\n \"street\":\"courreste\",\n \"kind\":\"\",\n \"fulltext\":\"courreste, 09700 Brie\",\n \"classification\":7\n }\n ]\n }\n */\n\n /* REPONSE EN ERREUR\n {\n status : \"ERROR\",\n results : [ ]\n }\n */\n\n /**\n * Suggested location type : \"StreetAddress\" ou \"PositionOfInterest\"\n * @type {String}\n */\n this.type = null;\n\n /**\n * Position of the suggested location given in requested coordinates system.\n * @type {Gp.Point}\n */\n this.position = {\n x : null,\n y : null\n };\n\n /**\n * Suggested municipality\n * @type {String}\n */\n this.commune = null;\n\n /**\n * Full text representation of the suggested location.\n * @type {String}\n */\n this.fullText = null;\n\n /**\n * Suggested location postcode\n * @type {Number}\n */\n this.postalCode = null;\n\n /**\n * Number used to classify the importance of the place where is the suggested location from 1 (most important) to 7 (less important).\n * @type {Integer}\n */\n this.classification = null;\n\n /**\n * Street name of the suggested location (\"StreetAddress\" only).\n * @type {String}\n */\n this.street = null;\n\n /**\n * Place name of the suggested location (\"PositionOfInterest\" only).\n * @type {String}\n */\n this.poi = null;\n\n /**\n * Nature of the suggested location : \"prefecture\", \"monument\", \"commune\", ... for instance (\"PositionOfInterest\" only).\n * @type {String}\n */\n this.kind = null;\n}\n\nSuggestedLocation.prototype = {\n\n constructor : SuggestedLocation\n};\n\nexport default SuggestedLocation;\n","/**\n * Factory pour générer une reponse JSON à partir d'un XML ou d'un JSON\n * (Factory)\n *\n * @module AutoCompleteResponseFactory\n * @private\n * @alias Gp.Services.AutoComplete.Response.AutoCompleteResponseFactory\n */\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport AutoCompleteResponse from \"./model/AutoCompleteResponse\";\nimport SuggestedLocation from \"./model/SuggestedLocation\";\n\nvar AutoCompleteResponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Alti\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"AutoCompleteResponseFactory\");\n logger.trace([\"AutoCompleteResponseFactory::build()\"]);\n\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n var JSONResponse = null;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // analyse de la réponse\n if (JSONResponse) {\n // le service renvoie t il une erreur ?\n if (JSONResponse.error) {\n // ex. ?\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", JSONResponse.error.description),\n status : JSONResponse.error.code,\n type : ErrorService.TYPE_SRVERR\n }));\n return;\n }\n\n // création de l'objet réponse\n data = new AutoCompleteResponse();\n\n // boucle sur les résultats de l'autocomplétion\n if (JSONResponse.results && Array.isArray(JSONResponse.results)) {\n var suggestedLocation = null;\n\n for (var i = 0; i < JSONResponse.results.length; i++) {\n var result = JSONResponse.results[i];\n suggestedLocation = new SuggestedLocation();\n\n if (result) {\n if (result.country === \"StreetAddress\") {\n suggestedLocation.street = result.street;\n suggestedLocation.type = \"StreetAddress\";\n } else if (result.country === \"PositionOfInterest\") {\n suggestedLocation.poi = result.street;\n suggestedLocation.type = \"PositionOfInterest\";\n suggestedLocation.poiType = result.poiType;\n }\n\n if (suggestedLocation.position) {\n suggestedLocation.position.x = result.x;\n suggestedLocation.position.y = result.y;\n }\n\n suggestedLocation.kind = result.kind;\n suggestedLocation.commune = result.city;\n suggestedLocation.fullText = result.fulltext;\n suggestedLocation.postalCode = result.zipcode;\n suggestedLocation.classification = result.classification;\n }\n // Ajout du résultat au tableau reverseGeocodedLocations de geocodedLocation\n data.suggestedLocations.push(suggestedLocation);\n }\n } else {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_FORMAT_3\")));\n return;\n }\n\n if (!data.suggestedLocations.length) {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_FORMAT_3\")));\n return;\n }\n }\n\n if (!data) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE_2\"),\n type : ErrorService.TYPE_UNKERR,\n status : -1\n }));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type : ErrorService.TYPE_SRVERR,\n status : 200\n }));\n return;\n }\n }\n } else {\n // si la réponse (xmlString) est vide, on appelle le callback d'erreur\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n\n // si tout s'est bien passé, on appelle le callback de succès\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default AutoCompleteResponseFactory;\n","import CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport AutoCompleteResponseFactory from \"./Response/AutoCompleteResponseFactory\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport MR from \"../../Utils/MessagesResources\";\nimport Helper from \"../../Utils/Helper\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\n\n/**\n * @classdesc\n * Appel du service d'autocomplétion du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.AutoComplete\n *\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String} options.text - La chaîne de caractère à compléter.\n * Cette chaîne n'est pas \"URL encodée\".\n * C'est l'API qui s'occupe de l'encoder pour l'inclure dans la requête.\n *\n * @param {Array.} [options.type = [\"StreetAddress\"]] - Type de l'objet recherché.\n * Le service d'autocomplétion du Géoportail permet de rechercher des toponymes 'PositionOfInterest' et/ou des adresses postales 'StreetAddress'.\n * D'autres types pourront être rajoutés selon l'évolution du service.\n * Par défaut, type = ['StreetAddress'].\n *\n * @param {String} [options.territory] - Limitation de la zone de recherche de localisants.\n * Le service d'autocomplétion du Géoportail permet de limiter la recherche à la métropole et la Corse : options.territory = 'METROPOLE',\n * DOMS TOMS : options.territory = 'DOMTOM', ou à un département : options.territory = '31'\n * Pas de valeur par défaut.\n * La valeur par défaut est donc celle du service.\n * Le service d'autocomplétion du Géoportail renvoie toutes les informations quand aucun territoire n'est spécifié.\n *\n * @param {Number} [options.maximumResponses = 10] - Nombre de réponses maximal que l'on souhaite recevoir.\n * Pas de valeur par défaut.\n * La valeur par défaut sera donc celle du service : 10.\n *\n * @example\n * var options = {\n * // options communes aux services\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * text : \"\",\n * type : \"StreetAddress\",\n * territory : 'METROPOLE',\n * maximumResponses : 10\n * };\n */\nfunction AutoComplete (options_) {\n if (!(this instanceof AutoComplete)) {\n throw new TypeError(MR.getMessage(\"CLASS_CONSTRUCTOR\", \"AutoComplete\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"AutoComplete\";\n\n this.logger = Logger.getLogger(\"Gp.Services.AutoComplete\");\n this.logger.trace(\"[Constructeur AutoComplete (options)]\");\n\n var options = this.patchOptionConvertor(options_);\n\n if (!options.serverUrl) {\n options.serverUrl = DefaultUrlService.AutoComplete.newUrl();\n }\n\n // appel du constructeur par heritage\n CommonService.apply(this, arguments);\n\n if (!options.text) {\n throw new Error(MR.getMessage(\"PARAM_MISSING\", \"text\"));\n }\n\n // ajout des options spécifiques au service\n this.options.text = options.text;\n\n // on definit des parametres par defaut\n if (!options.type) {\n options.type = [\"StreetAddress,PositionOfInterest\"];\n }\n\n this.options.type = options.type;\n this.options.territory = options.terr || \"\";\n this.options.maximumResponses = options.maximumResponses || 10;\n\n // INFO\n // le service ne repond pas en mode POST (405 Method Not Allowed)\n if (this.options.protocol === \"XHR\" && this.options.httpMethod === \"POST\") {\n this.logger.warn(\"Le service ne gére pas le mode d'interrogation en POST, on bascule sur du GET !\");\n this.options.httpMethod = \"GET\"; // on surcharge !\n }\n\n // attributs d'instances\n\n /**\n * Format forcé de la réponse du service : \"json\"\n * sauf si l'on souhaite une reponse brute (options.rawResponse)\n */\n this.options.outputFormat = (this.options.rawResponse) ? \"\" : \"json\";\n}\n\n/**\n * @lends module:AutoComplete#\n */\n\nAutoComplete.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nAutoComplete.prototype.constructor = AutoComplete;\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} options_ - options du service\n * @return {Object} - options\n */\nAutoComplete.prototype.patchOptionConvertor = function (options_) {\n const options = options_;\n\n if (options.filterOptions) {\n this.logger.warn(\"The parameter 'filterOptions' is deprecated\");\n\n if (options.filterOptions.type) {\n this.logger.warn(\"The parameter 'filterOptions.type' is deprecated\");\n if (!options.type) {\n options.type = options.filterOptions.type;\n }\n }\n\n if (options.filterOptions.territory) {\n this.logger.warn(\"The parameter 'filterOptions.territory' is deprecated\");\n if (!options.terr) {\n options.terr = options.filterOptions.territory;\n }\n }\n\n delete options.filterOptions;\n }\n\n return options;\n};\n\n/**\n * (overwrite)\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nAutoComplete.prototype.buildRequest = function (error, success) {\n // ex.\n // http://wxs.ign.fr/CLEF/ols/apis/completion?\n // text=Brie-Comt&\n // type=StreetAddress,PositionOfInterest&\n // territory=METROPOLE&\n // maximumResponses=10\n\n // traitement des param KPV sous forme de tableau\n var territory = \"\";\n if (this.options.territory) {\n territory = this.options.territory;\n }\n\n var type = \"\";\n if (this.options.type) {\n type = this.options.type.join(\",\");\n }\n\n // normalisation de la requete avec param KPV\n this.request = Helper.normalyzeParameters({\n text : encodeURIComponent(this.options.text),\n type : type,\n terr : territory,\n maximumResponses : this.options.maximumResponses\n });\n\n (!this.request)\n ? error.call(this, new ErrorService(MR.getMessage(\"SERVICE_REQUEST_BUILD\")))\n : success.call(this, this.request);\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback de succès de l'analyse de la réponse\n */\nAutoComplete.prototype.analyzeResponse = function (error, success) {\n if (this.response) {\n var options = {\n response : this.response,\n rawResponse : this.options.rawResponse,\n onSuccess : success,\n onError : error,\n scope : this\n };\n\n AutoCompleteResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(MR.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default AutoComplete;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes du service de calcul d'itineraire (REST).\n * Permet le mapping avec les options du service.\n * @constructor\n * @alias Gp.Services.Route.Request.RouteParamREST\n * @param {Object} options - options\n *\n * @private\n */\nfunction RouteParamREST (options) {\n if (!(this instanceof RouteParamREST)) {\n throw new TypeError(\"RouteParamREST constructor cannot be called as a function.\");\n }\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur RouteParamREST ()]\");\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n // mapping des options avec l'API REST\n\n /** Ressource utilisée */\n this.resource = this.options.resource;\n\n /** Coordonnées du point de départ. */\n this.start = this.options.startPoint.x + \",\" + this.options.startPoint.y;\n\n /** Coordonnées du point d’arrivée. */\n this.end = this.options.endPoint.x + \",\" + this.options.endPoint.y;\n\n /** Coordonnées des étapes point de départ. */\n this.intermediates = this.options.viaPoints;\n\n /** Nom du profile à utiliser */\n this.profile = this.options.graph;\n\n /** projection (code EPSG comme epsg:4326 ou wgs84) */\n this.crs = this.options.srs;\n\n /** Liste des contraintes */\n this.constraints = this.options.constraints;\n\n /** Nom de l'optimisation à utiliser */\n this.optimization = this.options.routePreference;\n\n /** Format de sortie (résumé de l’itinéraire) */\n this.getSteps = (this.options.geometryInInstructions) ? \"true\" : \"false\";\n\n /** Unité des distances */\n this.distanceUnit = this.options.distanceUnit;\n\n /** Unité des durées */\n this.timeUnit = this.options.timeUnit;\n\n /** Attributs des voies */\n this.waysAttributes = this.options.waysAttributes;\n}\n\n/**\n * CLASSNAME\n */\nRouteParamREST.CLASSNAME = \"RouteParamREST\";\n\nRouteParamREST.prototype = {\n\n /**\n * @lends module:RouteParamREST#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor : RouteParamREST,\n\n /**\n * Retourne une liste de points\n * @returns {String} une liste de points (sep '|')\n */\n getIntermediates : function () {\n var array = [];\n if (this.intermediates.length !== 0) {\n for (var i = 0; i < this.intermediates.length; i++) {\n var obj = this.intermediates[i];\n array.push(obj.x + \",\" + obj.y);\n }\n }\n\n return array.join(\"|\");\n },\n\n /**\n * Retourne une liste d'attributs\n * @returns {String} une liste d'attributs (sep '|')\n */\n getWaysAttributes : function () {\n return this.waysAttributes.join(\"|\");\n },\n\n /**\n * Retourne un profile\n * @returns {String} profile\n */\n getProfile : function () {\n return this.profile;\n },\n\n /**\n * Retourne un distanceUnit\n * @returns {String} distanceUnit\n */\n getDistanceUnit : function () {\n if (this.distanceUnit === \"m\") {\n return \"meter\";\n }\n if (this.distanceUnit === \"km\") {\n return \"kilometer\";\n }\n return \"\";\n },\n\n /**\n * Retourne une optimisation\n * @returns {String} optimization\n */\n getOptimization : function () {\n if (this.optimization) {\n return this.optimization;\n } else {\n return \"\";\n }\n },\n\n /**\n * Retourne la liste des constraints\n * @returns {String} une liste des constraints (sep '|')\n */\n getConstraints : function () {\n var constraintArray = [];\n\n if (this.constraints.length !== 0) {\n for (var k = 0; k < this.constraints.length; k++) {\n constraintArray.push(JSON.stringify(this.constraints[k]));\n }\n }\n return constraintArray.join(\"|\");\n }\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Array} liste de paramêtres\n */\nRouteParamREST.prototype.getParams = function () {\n var map = [];\n\n map.push({\n k : \"resource\",\n v : this.resource\n });\n\n map.push({\n k : \"start\",\n v : this.start\n });\n\n map.push({\n k : \"end\",\n v : this.end\n });\n\n map.push({\n k : \"geometryFormat\",\n v : \"geojson\"\n });\n\n if (this.optimization) {\n map.push({\n k : \"optimization\",\n v : this.getOptimization()\n });\n }\n\n if (this.intermediates) {\n map.push({\n k : \"intermediates\",\n v : this.getIntermediates()\n });\n }\n\n if (this.profile) {\n map.push({\n k : \"profile\",\n v : this.getProfile()\n });\n }\n\n if (this.constraints) {\n map.push({\n k : \"constraints\",\n v : this.getConstraints()\n });\n }\n\n if (this.crs) {\n map.push({\n k : \"crs\",\n v : this.crs\n });\n }\n\n if (this.distanceUnit) {\n map.push({\n k : \"distanceUnit\",\n v : this.getDistanceUnit()\n });\n }\n\n if (this.timeUnit) {\n map.push({\n k : \"timeUnit\",\n v : this.timeUnit\n });\n }\n\n if (this.waysAttributes) {\n map.push({\n k : \"waysAttributes\",\n v : this.getWaysAttributes()\n });\n }\n\n return map;\n};\n\nexport default RouteParamREST;\n","\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport RouteParamREST from \"./model/RouteParamREST\";\n\n/**\n * @classdesc\n * Classe de gestion des requêtes de type REST sur le service de calcul d'itineraire\n * (uniquement en GET)\n *\n * @constructor\n * @alias Gp.Services.Route.Request.RouteRequestREST\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * var options = {\n * (...)\n * };\n *\n * @private\n */\nfunction RouteRequestREST (options) {\n this.logger = Logger.getLogger(\"RouteRequestREST\");\n this.logger.trace(\"[Constructeur RouteRequestREST ()]\");\n\n if (!(this instanceof RouteRequestREST)) {\n throw new TypeError(\"RouteRequestREST constructor cannot be called as a function.\");\n }\n\n // existance des options\n if (!options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n /** liste des options */\n this.settings = options;\n}\n\nRouteRequestREST.prototype = {\n\n /**\n * @lends module:RouteRequestREST#\n */\n\n /**\n * request\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : RouteRequestREST,\n\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out : origin=2.416907353809513,48.8465772142297&destination=2.4248037771493673,48.84591353161838\n * // POST out : Not yet supported method POST !\n * @returns {String} request\n */\n processRequestString : function () {\n // INFO\n // construction simple sans template...,\n // mais en attendant que les services soient fixés, on taggue ce composant en mode PROTOTYPE !\n this.logger.warn(\" PROTOTYPE !\");\n\n // Mapping des options avec le service de l'API REST\n var oParams = new RouteParamREST(this.settings);\n var params = oParams.getParams();\n\n var request = \"\";\n for (var i = 0; i < params.length; i++) {\n var o = params[i];\n if (request) {\n request += \"&\";\n }\n request += o.k + \"=\" + o.v;\n }\n\n // Exemple :\n // http://wxs.ign.fr/KEY/itineraire/rest/route.json?\n // origin=&\n // destination=&\n // waypoints=&\n // method=DISTANCE&\n // graph=Pieton&\n // graphName=Pieton&\n // exclusions=&\n // tolerance=10&\n // srs=\n\n this.logger.trace(request);\n this.requestString = request;\n\n return this.requestString;\n }\n};\n\nexport default RouteRequestREST;\n","import Logger from \"../../../Utils/LoggerByDefault\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport RouteRequestREST from \"./RouteRequestREST\";\n\n/**\n * Creation d'une requête REST en mode POST ou GET\n * (Factory)\n *\n * @module RouteRequestFactory\n * @alias Gp.Services.Route.Request.RouteRequestFactory\n * @private\n */\nvar RouteRequestFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * // utilisation avec les callback\n * var options = {\n * (...)\n * onSuccess : function (response) {},\n * onError : function (error) {},\n * // spécifique au service\n * startPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * endPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * provideBbox : false,\n * exclusions : [\"bridge\", \"tunnel\", \"toll\"],\n * distanceUnit : \"km\",\n * graph : \"Voiture\",\n * geometryInInstructions : false,\n * routePreference : \"fastest\"\n * };\n * RouteRequestFactory.build(options);\n *\n * // utilisation sans callback\n * var options = {...};\n * try {\n * var result = RouteRequestFactory.build(options);\n * if (! result) { throw new Error(\"...\"):}\n * } catch (e) {\n * // todo\n * }\n * @returns {String} request\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"RouteRequestFactory\");\n logger.trace([\"RouteRequestFactory::build()\"]);\n\n var request = null;\n\n var settings = options || {};\n\n // gestion des callback\n var bOnError = !!(options.onError !== null && typeof options.onError === \"function\");\n\n var message = null;\n\n // FIXME les exceptions ne sont pas 'catchées' sur le constructeur !\n var myReq = new RouteRequestREST(settings);\n if (!myReq.processRequestString()) {\n message = \"Error process request (rest) !\";\n if (bOnError) {\n options.onError.call(options.scope, new ErrorService(message));\n return;\n }\n throw new Error(message);\n }\n request = myReq.requestString;\n\n return request;\n }\n};\n\nexport default RouteRequestFactory;\n","/**\n * Response object for {@link module:Services~route Gp.Services.route ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Gp.BBox} bbox - Bounding Box of the route. Given when provideBBox parameter is used in function call.\n * @property {Object} routeGeometry - Geometry (expressed in [GeoJSON]{@link http://geojson.org/}) of the route.\n * @property {Array.} routeInstructions - Instructions of the route.\n * @property {String} totalDistance - Length of the route. If distanceUnit parameter was set to \"km\" (default), totalDistance is a string containing the total distance expressed in kilometers, followed by \" Km\" (e.g. : \"19.6 Km\"). If distanceUnit parameter was set to \"m\", totalDistance is a string containing the total distance expressed in meters (e.g. : \"19599.14\").\n * @property {Float} totalTime - Route duration in seconds.\n *\n * @namespace\n * @alias Gp.Services.RouteResponse\n */\nfunction RouteResponse () {\n if (!(this instanceof RouteResponse)) {\n throw new TypeError(\"RouteResponse constructor cannot be called as a function.\");\n }\n\n this.totalTime = null;\n\n this.totalDistance = null;\n\n this.bbox = {\n left : null,\n right : null,\n top : null,\n bottom : null\n };\n\n this.routeGeometry = null; // FIXME can be null if option 'geometryInInstructions' is true !\n\n this.routeInstructions = [];\n}\n\nRouteResponse.prototype = {\n\n constructor : RouteResponse\n\n};\n\nexport default RouteResponse;\n","\n/**\n * Single Route Instruction object.\n *\n * @property {String} code - Instruction code :\n *\n * - \"F\" : Straight forward\n * - \"B\" : U-turn\n * - \"L\" : turn left\n * - \"R\" : turn right\n * - \"BL\" : turn left strongly\n * - \"BR\" : turn right strongly\n * - \"FL\" : turn lightly to the left\n * - \"FR\" : turn lightly to the right\n * - \"round_about_entry\" : round about entry\n * - \"round_about_exit\" : round about exit\n *\n * @property {String} instruction - Instruction text : translated code + street name\n * @property {Object} geometry - Geometry (expressed in [GeoJSON]{@link http://geojson.org/}) of the street.\n * @property {Float} distance - Length of the instruction. Expressed in km or m, depending on distanceUnit parameter.\n * @property {Float} duration - Instruction duration in seconds.\n *\n * @namespace\n * @alias Gp.Services.Route.RouteInstruction\n */\nfunction RouteInstruction () {\n if (!(this instanceof RouteInstruction)) {\n throw new TypeError(\"RouteInstruction constructor cannot be called as a function.\");\n }\n\n this.duration = null;\n\n this.distance = null;\n\n this.code = null;\n\n this.instruction = null;\n\n this.geometry = null; // FIXME can be null if option 'geometryInInstructions' is false !\n}\n\nRouteInstruction.prototype = {\n\n constructor : RouteInstruction\n\n};\n\nexport default RouteInstruction;\n","import Logger from \"../../../Utils/LoggerByDefault\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport RouteResponse from \"./model/RouteResponse\";\nimport RouteInstruction from \"./model/RouteInstruction\";\n\n/**\n * Factory pour générer une reponse JSON à partir d'un XML ou d'un JSON\n * (Factory)\n *\n * @module RouteResponseFactory\n * @alias Gp.Services.Route.Response.RouteResponseFactory\n * @private\n */\nvar RouteResponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"RouteResponseFactory\");\n logger.trace(\"RouteResponseFactory::build()\");\n\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n logger.trace(\"analyze response : json\");\n\n var JSONResponse;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // construction de l'objet réponse JSON\n if (JSONResponse) {\n // le service renvoie t il une erreur ?\n if (JSONResponse.message) {\n // ex. {\"message\":\"message not null\", \"status\":\"ERROR\"}\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", JSONResponse.message)));\n return;\n }\n var legs = [];\n var legSteps = [];\n var steps = [];\n\n data = new RouteResponse();\n\n if (data.hasOwnProperty(\"totalTime\")) {\n data.totalTime = parseFloat(JSONResponse.duration);\n }\n if (data.hasOwnProperty(\"totalDistance\")) {\n data.totalDistance = parseFloat(JSONResponse.distance);\n }\n\n if (data.hasOwnProperty(\"bbox\")) {\n data.bbox.left = parseFloat(JSONResponse.bbox[0]);\n data.bbox.bottom = parseFloat(JSONResponse.bbox[1]);\n data.bbox.right = parseFloat(JSONResponse.bbox[2]);\n data.bbox.top = parseFloat(JSONResponse.bbox[3]);\n }\n\n if (data.hasOwnProperty(\"routeGeometry\") && !options.geometryInInstructions) {\n data.routeGeometry = JSONResponse.geometry;\n }\n\n if (data.hasOwnProperty(\"routeInstructions\") && options.geometryInInstructions) {\n var legList = JSONResponse.portions;\n var i;\n if (Array.isArray(legList) && legList.length) {\n for (i = 0; i < legList.length; i++) {\n legs.push(legList[i]);\n }\n }\n if (legs.length) {\n for (i = 0; i < legs.length; i++) {\n legSteps.push(legs[i].steps);\n }\n }\n if (legSteps.length) {\n for (i = 0; i < legSteps.length; i++) {\n steps = steps.concat(legSteps[i]);\n }\n }\n\n steps.forEach(function (step) {\n data.routeInstructions.push(new RouteInstruction());\n data.routeInstructions[data.routeInstructions.length - 1].duration = step.duration;\n data.routeInstructions[data.routeInstructions.length - 1].distance = step.distance;\n data.routeInstructions[data.routeInstructions.length - 1].code = \"\";\n data.routeInstructions[data.routeInstructions.length - 1].instruction = \"\";\n data.routeInstructions[data.routeInstructions.length - 1].geometry = step.geometry;\n\n // on ne souhaite pas de ce type de valeur...\n if (step.name === \"Valeur non renseignée\") {\n step.name = \"\";\n }\n\n switch (step.instruction.type) {\n case \"turn\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Tourner\";\n break;\n case \"new name\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Continuer tout droit\";\n break;\n case \"depart\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Départ\";\n break;\n case \"arrive\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Arrivée\";\n break;\n case \"merge\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Rejoindre\";\n break;\n case \"ramp\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Prendre la bretelle\";\n break;\n case \"on ramp\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Prendre la bretelle\";\n break;\n case \"off ramp\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Prendre la sortie\";\n break;\n case \"fork\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Sur la bifurcation, prendre\";\n break;\n case \"end of road\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"À la fin de la route, prendre\";\n break;\n case \"use lane\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Utiliser la file\";\n break;\n case \"continue\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Continuer\";\n break;\n case \"roundabout\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Au rond-point\";\n break;\n case \"rotary\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Au rond-point\";\n break;\n case \"roundabout turn\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Au rond point, tourner\";\n break;\n case \"notification\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"\";\n break;\n default:\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"?\" + step.instruction.type + \"?\";\n break;\n }\n\n if (step.instruction.modifier) {\n switch (step.instruction.modifier) {\n case \"uturn\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction = \"Faire demi-tour\";\n break;\n case \"sharp right\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" complètement à droite\";\n break;\n case \"right\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" à droite\";\n break;\n case \"slight right\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" légèrement à droite\";\n break;\n case \"straight\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction = \"Continuer tout droit\";\n break;\n case \"slight left\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" lègèrement à gauche\";\n break;\n case \"left\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" à gauche\";\n break;\n case \"sharp left\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" complètement à gauche\";\n break;\n default:\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" ?\" + step.instruction.modifier + \"?\";\n break;\n }\n }\n\n if (step.instruction.exit) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += `${step.instruction.exit}e sortie`;\n }\n\n if (step.attributes.name) {\n if (step.attributes.name.nom_1_droite || step.attributes.name.toponyme) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" sur\";\n }\n\n if (step.attributes.name.nom_1_droite) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += ` ${step.attributes.name.nom_1_droite}`;\n }\n\n if (step.attributes.name.toponyme) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += ` ${step.attributes.name.toponyme}`;\n }\n }\n });\n }\n }\n\n if (!data) {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE\", \"json\")));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION_2\")));\n return;\n }\n }\n } else {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default RouteResponseFactory;\n","\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport RouteRequestFactory from \"./Request/RouteRequestFactory\";\nimport RouteResponseFactory from \"./Response/RouteResponseFactory\";\n\n/**\n * @classdesc\n * Appel du service d'itinéraire du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n *\n * @alias Gp.Services.Route\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String} options.resource - La ressource utilisée pour le calcul. Ce paramètre devrait être obligatoire car il l'est dans l'appel au service. Mais il ne l'est pas pour des raisons de rétrocompatibilité.\n *\n * @param {String} options.outputFormat - Le format de la réponse du service itineraire : 'json' uniquement et par défaut.\n *\n * @param {String} [options.routePreference = \"fastest\"] - Mode de calcul à utiliser :\n * - le plus rapide « fastest »\n * - le plus court « shortest »\n * Par défaut : « fastest ».\n *\n * @param {Object} options.startPoint - Point de départ du calcul. Coordonnées exprimées en longitudes, latitudes (EPSG:4326)\n * @param {Float} options.startPoint.x - Abcisse du point de départ du calcul d'itinéraire.\n * @param {Float} options.startPoint.y - Ordonnée du point de départ du calcul d'itinéraire.\n *\n * @param {Object} options.endPoint - Point d'arrivée du calcul. Coordonnées exprimées en longitudes, latitudes (EPSG:4326)\n * @param {Float} options.endPoint.x - Abcisse du point d'arrivée du calcul d'itinéraire.\n * @param {Float} options.endPoint.y - Ordonnée du point d'arrivée du calcul d'itinéraire.\n *\n * @param {Object[]} [options.viaPoints] - Liste de point ({x:Float,y:Float}) intermédaires que l'itinéraire doit emprunter dans l'ordre du tableau.\n * Coordonnées exprimées en longitudes, latitudes (EPSG:4326) :{x:float, y:float}\n *\n * @param {String} [options.graph = \"voiture\"] - Type de graphe utilisé : \"Voiture\" ou \"Pieton\".\n * Détermine le profil de vitesses utilisé pour le calcul ainsi que les tronçons autorisés ou non.\n * Par défaut, c'est la valeur \"Voiture\" qui sera utilisée.\n *\n * @param {String[]} [options.exclusions] - DEPRECATED: Critères d'exclusions à appliquer pour le calcul. (correspond au paramètre \"avoidFeature\" d'OpenLS)\n * On précise ici le type de tronçons que l'on ne veut pas que l'itinéraire emprunte\n * (valeurs possibles : « toll » (éviter les péages), « bridge », « tunnel »).\n * Ce paramètre est conservé pour une rétrocompatibilité de l'api. Le nouveau paramètre à utiliser est options.constraints\n *\n * @param {Object[]} [options.constraints] - Critères de contraintes à appliquer sur un itinéraire. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities.\n * @param {String} [options.constraints.constraintType] - Type de la contrainte. Généralement \"banned\".\n * @param {String} [options.constraints.key] - Clé de la contrainte. Généralement \"wayType\".\n * @param {String} [options.constraints.operator] - Opérateur de la contrainte. Généralement \"=\".\n * @param {String} [options.constraints.value] - Valeur de la contrainte. Généralement \"autoroute\".\n *\n * @param {Boolean} [options.geometryInInstructions = false] - Indique si la géométrie de l'itinéraire doit être reprise morceau par morceau dans les instructions.\n * (correspond au paramètre \"provideGeometry\" d'OpenLS) Par défaut : false.\n *\n * @param {Boolean} [options.provideBbox = true] - Indique si les instructions doivent être localisées par une bbox dans la réponse.\n * Par défaut : true.\n *\n * @param {String} [options.distanceUnit = \"m\"] - Indique si la distance doit être exprimée en km ou m dans la réponse.\n * Par défaut : m.\n * @param {String} [options.timeUnit = \"second\"] - Indique si la durée doit être exprimée en seconde, minute ou heure dans la réponse. Il peut-être formatté hh:mm::ss avec la valeur standard.\n * Les valeurs possibles sont \"standard\", \"second\", \"minute\" ou \"hour\".\n * Par défaut : \"standard\".\n *\n * @param {String} [options.srs] - Système de coordonnées dans lequel les paramètres géographiques en entrée et la réponse du service sont exprimés.\n * Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 'EPSG:4326'.\n *\n * @param {String[]} [options.waysAttributes] - Nom des attributs des voies. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities.\n *\n * @example\n * var options = {\n * // options communes aux services\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'XHR',\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * resource : 'bdtopo'\n * outputFormat : 'json',\n * startPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * endPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * provideBbox : true,\n * exclusions : [\"Bridge\", \"Tunnel\", \"Toll\"],\n * distanceUnit : \"km\",\n * graph : \"Voiture\",\n * geometryInInstructions : true,\n * routePreference : \"fastest\"\n * };\n *\n */\nfunction Route (options) {\n if (!(this instanceof Route)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"Route\"));\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"Route\";\n\n // appel du constructeur par heritage\n CommonService.apply(this, arguments);\n\n this.logger = Logger.getLogger(\"Gp.Services.Route\");\n this.logger.trace(\"[Constructeur Route (options)]\");\n\n if (!options.startPoint) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"startPoint\"));\n }\n\n // on lance une exception afin d'eviter au service de le faire...\n if (options.startPoint.x === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"startPoint.x\"));\n }\n\n if (options.startPoint.y === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"startPoint.y\"));\n }\n\n if (!options.endPoint) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"endPoint\"));\n }\n\n // on lance une exception afin d'eviter au service de le faire...\n if (options.endPoint.x === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"endPoint.x\"));\n }\n\n if (options.endPoint.y === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"endPoint.y\"));\n }\n\n // options par defaut\n\n // on passe l'option outputFormat en minuscules afin d'éviter des exceptions.\n if (options.outputFormat && options.outputFormat !== \"json\") {\n this.logger.warn(\"options.outputFormat could only be json\");\n }\n this.options.outputFormat = \"json\";\n\n this.options.resource = options.resource || \"bdtopo-osrm\";\n this.options.startPoint = options.startPoint;\n this.options.endPoint = options.endPoint;\n this.options.viaPoints = options.viaPoints || [];\n this.options.routePreference = options.routePreference || \"fastest\";\n /** Gestion des anciennes valeurs de graph */\n if (options.graph) {\n if (options.graph === \"Voiture\") {\n this.options.graph = \"car\";\n }\n if (options.graph === \"Pieton\") {\n this.options.graph = \"pedestrian\";\n }\n } else {\n this.options.graph = \"car\";\n }\n this.options.constraints = [];\n if (options.constraints) {\n if (Array.isArray(options.constraints)) {\n for (var k = 0; k < options.constraints.length; k++) {\n this.options.constraints.push(options.constraints[k]);\n }\n } else {\n throw new Error(_.getMessage(\"PARAM_TYPE\", \"constraints\"));\n }\n }\n\n /** Gestion de l'ancien paramètre exclusion */\n var constraintTunnel = {};\n var constraintPont = {};\n var constraintAutoroute = {};\n if (options.exclusions) {\n if (options.exclusions.length !== 0) {\n this.logger.warn(\"options.exclusions is DEPRECATED !!\");\n for (var c = 0; c < options.exclusions.length; c++) {\n if (typeof options.exclusions[c] === \"string\") {\n options.exclusions[c] = options.exclusions[c].toLowerCase();\n } else {\n // on ne crée pas une erreur pour rétro-compatibilité avec les anciennes versions\n continue;\n }\n if (options.exclusions[c] === \"toll\") {\n constraintAutoroute.constraintType = \"banned\";\n constraintAutoroute.key = \"wayType\";\n constraintAutoroute.operator = \"=\";\n constraintAutoroute.value = \"autoroute\";\n this.options.constraints.push(constraintAutoroute);\n }\n if (options.exclusions[c] === \"tunnel\") {\n constraintTunnel.constraintType = \"banned\";\n constraintTunnel.key = \"wayType\";\n constraintTunnel.operator = \"=\";\n constraintTunnel.value = \"tunnel\";\n this.options.constraints.push(constraintTunnel);\n }\n if (options.exclusions[c] === \"bridge\") {\n constraintPont.constraintType = \"banned\";\n constraintPont.key = \"wayType\";\n constraintPont.operator = \"=\";\n constraintPont.value = \"pont\";\n this.options.constraints.push(constraintPont);\n }\n }\n }\n }\n\n this.options.geometryInInstructions = options.geometryInInstructions || false;\n this.options.provideBbox = options.provideBbox || true;\n this.options.distanceUnit = options.distanceUnit || \"m\";\n this.options.timeUnit = options.timeUnit || \"second\";\n this.options.expectedStartTime = null; // FIXME not yet implemented !\n this.options.srs = options.srs || \"EPSG:4326\";\n this.options.waysAttributes = options.waysAttributes || [];\n\n // gestion de l'url du service par defaut\n // si l'url n'est pas renseignée, il faut utiliser les urls par defaut\n if (!this.options.serverUrl) {\n var UrlByDefault = DefaultUrlService.Route.newUrl();\n\n if (!UrlByDefault) {\n throw new Error(\"Url by default not found !\");\n }\n this.options.serverUrl = UrlByDefault;\n this.logger.trace(\"Serveur URL par defaut : \" + this.options.serverUrl);\n }\n}\n\n/**\n * @lends module:Route#\n */\nRoute.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nRoute.prototype.constructor = Route;\n\n/**\n * (overwrite)\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nRoute.prototype.buildRequest = function (error, success) {\n var options = {\n // spécifique au service\n resource : this.options.resource,\n startPoint : this.options.startPoint,\n endPoint : this.options.endPoint,\n viaPoints : this.options.viaPoints,\n provideBbox : this.options.provideBbox,\n constraints : this.options.constraints,\n distanceUnit : this.options.distanceUnit,\n timeUnit : this.options.timeUnit,\n graph : this.options.graph,\n geometryInInstructions : this.options.geometryInInstructions,\n routePreference : this.options.routePreference,\n srs : this.options.srs,\n waysAttributes : this.options.waysAttributes\n };\n\n this.request = RouteRequestFactory.build(options);\n\n // on teste si la requete a bien été construite !\n if (!this.request) {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_REQUEST_BUILD\")));\n } else {\n success.call(this, this.request);\n }\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nRoute.prototype.analyzeResponse = function (error, success) {\n // INFO\n // Factory pour masquer la complexité du retour du service\n\n if (this.response) {\n var options = {\n distanceUnit : this.options.distanceUnit,\n timeUnit : this.options.timeUnit,\n response : this.response,\n outputFormat : this.options.outputFormat, // utile pour parser la string en mode XHR : JSON ou XML !\n rawResponse : this.options.rawResponse,\n onError : error,\n onSuccess : success,\n scope : this,\n geometryInInstructions : this.options.geometryInInstructions\n };\n\n RouteResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default Route;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n *\n * Classe de gestion des param. des requêtes du service de calcul des iso.\n * Permet le mapping avec les options du service.\n *\n * @constructor\n * @alias Gp.Services.ProcessIsoCurve.Request.ProcessIsoCurveParam\n * @param {Object} options - options\n * @private\n *\n */\nfunction ProcessIsoCurveParam (options) {\n if (!(this instanceof ProcessIsoCurveParam)) {\n throw new TypeError(\"ProcessIsoCurveParam constructor cannot be called as a function.\");\n }\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur ProcessIsoCurveParam ()]\");\n\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n // mapping des options avec l'API REST\n\n /** Identifiant de l’isochrone */\n this.id = this.options.id;\n\n /** Resource */\n this.resource = this.options.resource;\n\n /** Coordonnées de départ (ou arrivée si le reverse est à true). */\n this.point = this.options.position;\n\n /** projection (code EPSG comme epsg:4326 ou wgs84) */\n this.crs = this.options.srs;\n\n /**\n * Profil de véhicule à utiliser pour le calcul.\n * Voiture ou Pieton\n */\n this.profile = this.options.graph;\n\n /** Liste des règles de restrictions à utiliser */\n this.constraints = this.options.constraints;\n\n this.reverse = this.options.reverse;\n\n this.timeUnit = this.options.timeUnit;\n\n this.distanceUnit = this.options.distanceUnit;\n\n /**\n * \"time\" pour isochrone ou \"distance\" for isodistance.\n * Par defaut, time...\n */\n if (this.options.method === \"distance\") {\n this.costType = \"distance\";\n this.costValue = this.options.distance;\n if (this.distanceUnit === \"m\" && this.costValue >= 50000) {\n this.distanceUnit = \"km\";\n this.costValue /= 1000;\n }\n } else {\n this.costType = \"time\";\n this.costValue = this.options.time;\n }\n}\n\n/**\n * CLASSNAME\n */\nProcessIsoCurveParam.CLASSNAME = \"ProcessIsoCurveParam\";\n\nProcessIsoCurveParam.prototype = {\n\n /**\n * @lends module:ProcessIsoCurveParam#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor : ProcessIsoCurveParam,\n\n /**\n * Retourne le point\n * @returns {String} x,y\n */\n getLocation : function () {\n return this.point.x + \",\" + this.point.y;\n },\n\n /**\n * Retourne l'unité de la distance\n * @returns {String}\n */\n getDistanceUnit : function () {\n if (this.distanceUnit === \"m\") {\n return \"meter\";\n }\n if (this.distanceUnit === \"km\") {\n return \"kilometer\";\n }\n return \"\";\n },\n\n /**\n * Retourne la liste des contraintes\n * @returns {String}\n */\n getConstraints : function () {\n var constraintArray = [];\n\n if (this.constraints.length !== 0) {\n for (var k = 0; k < this.constraints.length; k++) {\n constraintArray.push(JSON.stringify(this.constraints[k]));\n }\n }\n return constraintArray.join(\"|\");\n },\n\n /**\n * Retourne la direction\n * @returns {String}\n */\n getDirection : function () {\n if (this.reverse) {\n return \"arrival\";\n } else {\n return \"departure\";\n }\n }\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Object[]} KVP\n */\nProcessIsoCurveParam.prototype.getParams = function () {\n var map = [];\n\n map.push({\n k : \"resource\",\n v : this.resource\n });\n\n map.push({\n k : \"point\",\n v : this.getLocation()\n });\n\n map.push({\n k : \"direction\",\n v : this.getDirection()\n });\n\n map.push({\n k : \"costType\",\n v : this.costType\n });\n\n map.push({\n k : \"costValue\",\n v : this.costValue\n });\n\n map.push({\n k : \"profile\",\n v : this.profile\n });\n\n map.push({\n k : \"timeUnit\",\n v : this.timeUnit\n });\n\n map.push({\n k : \"distanceUnit\",\n v : this.getDistanceUnit()\n });\n\n if (this.crs) {\n map.push({\n k : \"crs\",\n v : this.crs\n });\n }\n\n if (this.constraints) {\n map.push({\n k : \"constraints\",\n v : this.getConstraints()\n });\n }\n\n return map;\n};\n\nexport default ProcessIsoCurveParam;\n","\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport ProcessIsoCurveParam from \"./model/ProcessIsoCurveParam\";\n\n/**\n * @classdesc\n * Classe de gestion des requêtes sur le service de calcul d'isoschrone/isodistance.\n * Les requêtes peuvent être en mode GET ou POST,\n * et le format de sorti est en JSON.\n *\n * @constructor\n * @alias Gp.Services.ProcessIsoCurve.Request.ProcessIsoCurveRequest\n * @param {Object} options - options\n *\n * @example\n * var options = {\n * httpMethod : 'GET', // GET|POST\n * // spécifique au service\n * position : {\n * x : 2.3242664298058053,\n * y : 48.86118017324745\n * },\n * graph : \"car\",\n * method : 'time',\n * time : 1000, //distance : 200\n * reverse : false,\n * srs : 'EPSG:4326'\n * };\n *\n * try {\n *\n * var oIsoCurve = new ProcessIsoCurveRequest (options);\n * if (!oIsoCurve.processRequestString ()) {\n * // error\n * }\n *\n * var request = oIsoCurve.requestString;\n *\n * } catch (e) {\n * // error\n * }\n * @private\n */\nfunction ProcessIsoCurveRequest (options) {\n this.logger = Logger.getLogger(\"ProcessIsoCurveRequest\");\n this.logger.trace(\"[Constructeur ProcessIsoCurveRequest ()]\");\n\n if (!(this instanceof ProcessIsoCurveRequest)) {\n throw new TypeError(\"ProcessIsoCurveRequest constructor cannot be called as a function.\");\n }\n\n // existance des options\n if (!options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n /**\n * Liste des options\n */\n this.settings = options;\n\n /**\n * Mode HTPP.\n * Par defaut, \"GET\".\n * @type {String}\n */\n this.mode = this.settings.httpMethod || \"GET\";\n}\n\nProcessIsoCurveRequest.prototype = {\n\n /**\n * @lends module:ProcessIsoCurveRequest#\n */\n\n /**\n * Requête\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : ProcessIsoCurveRequest,\n\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out :\n * // (http://wxs.ign.fr/KEY/isochrone?)\n * // resource=&\n * // point=&\n * // costValue=&\n * // costType=&\n * // profile=&\n * // constraints=&\n * // direction=&\n * // crs=\n *\n * // POST out :\n * {\n * resource: \"bduni-idf-pgr\",\n * point: \"2.337306,48.849319\",\n * costValue: 100,\n * costType: \"time\",\n * profile: \"car\",\n * constraints: [{\n * constraintType: \"banned\",\n * key: \"ways_type\",\n * operator: \"=\",\n * value: \"autoroute\"\n * }]\n * }\n *\n * @returns {String} request\n */\n processRequestString : function () {\n var request = \"\";\n var i = 0;\n\n switch (this.mode) {\n case \"GET\":\n this.logger.trace(\"Process GET Request\");\n\n // Mapping des options avec le service de l'API REST\n var oParams = new ProcessIsoCurveParam(this.settings);\n var params = oParams.getParams();\n\n for (i = 0; i < params.length; i++) {\n var o = params[i];\n if (request) {\n request += \"&\";\n }\n request += o.k + \"=\" + o.v;\n }\n\n break;\n\n case \"POST\":\n this.logger.trace(\"Process POST Request\");\n // creation du JSON\n var postRequest = {};\n\n postRequest.resource = this.settings.resource;\n\n postRequest.point = this.settings.position.x + \",\" + this.settings.position.y;\n\n if (this.settings.method === \"distance\") {\n postRequest.costType = \"distance\";\n postRequest.costValue = this.settings.distance;\n } else {\n postRequest.costType = \"time\";\n postRequest.costValue = this.settings.time;\n }\n\n postRequest.profile = this.settings.graph;\n\n if (this.settings.reverse) {\n postRequest.direction = \"arrival\";\n } else {\n postRequest.direction = \"departure\";\n }\n\n postRequest.constraints = this.settings.constraints;\n\n postRequest.distanceUnit = this.settings.distanceUnit;\n\n postRequest.timeUnit = this.settings.timeUnit;\n\n postRequest.crs = this.settings.srs;\n\n // conversion en chaîne de caractères\n request = JSON.stringify(postRequest);\n break;\n\n default:\n this.logger.error(\"No other HTTP method supported by the service !\");\n }\n\n this.logger.trace(request);\n this.requestString = request;\n\n return this.requestString;\n }\n};\n\nexport default ProcessIsoCurveRequest;\n","\n/**\n * Response object for {@link module:Services~isoCurve Gp.Services.isoCurve ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Float} distance - distance (expressed in meters) used for the request.\n * @property {Float} time - time (expressed in seconds) used for the request.\n * @property {Object} geometry - Geometry (expressed in [GeoJSON]{@link http://geojson.org/}) of the isocurve.\n * @property {String} id - request id (used by underlying webservice).\n * @property {Gp.Point} location - Position of the start or end point used for the request (expressed in \"srs\" coordinates system).\n * @property {String} message - message\n * @property {String} srs - Identifier of the coordinates system used for the isocurve.\n *\n * @namespace\n * @alias Gp.Services.IsoCurveResponse\n *\n */\nfunction ProcessIsoCurveResponse () {\n if (!(this instanceof ProcessIsoCurveResponse)) {\n throw new TypeError(\"ProcessIsoCurveResponse constructor cannot be called as a function.\");\n }\n\n this.message = null;\n\n this.id = null;\n\n this.location = {};\n this.location.x = null;\n this.location.y = null;\n\n this.srs = null;\n\n this.geometry = null;\n\n this.time = null;\n\n this.distance = null;\n}\n\nProcessIsoCurveResponse.prototype = {\n\n constructor : ProcessIsoCurveResponse\n\n};\n\nexport default ProcessIsoCurveResponse;\n","import Logger from \"../../../Utils/LoggerByDefault\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport ProcessIsoCurveResponse from \"./model/ProcessIsoCurveResponse\";\n\n/**\n * Factory pour générer une reponse JSON à partir d'un JSON\n * (Factory)\n *\n * @module ProcessIsoCurveResponseFactory\n * @alias Gp.Services.ProcessIsoCurve.Response.ProcessIsoCurveResponseFactory\n * @private\n */\nvar ProcessIsoCurveResponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant ProcessIsoCurve\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"ProcessIsoCurveResponseFactory\");\n logger.trace([\"ProcessIsoCurveResponseFactory::build()\"]);\n\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n logger.trace(\"analyze response : json\");\n\n var JSONResponse;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // analyse de la reponse\n // création de l'objet de réponse\n data = new ProcessIsoCurveResponse();\n\n // remplissage de l'objet créé avec les attribtuts de la réponse du service\n if (JSONResponse) {\n if (JSONResponse.costType === \"distance\") {\n data.time = \"\";\n data.distance = JSONResponse.costValue;\n } else {\n data.time = JSONResponse.costValue;\n data.distance = \"\";\n }\n\n data.message = \"\";\n data.id = \"\";\n data.srs = JSONResponse.crs;\n data.geometry = JSONResponse.geometry;\n var coords = JSONResponse.point.split(\",\");\n if (data.location) {\n data.location.x = coords[0];\n data.location.y = coords[1];\n }\n } else {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE\", options.response)));\n return;\n }\n\n // info : en cas de problèmes de droits (clé invalide ou autre), la réponse est au format XML !!\n // ex. Key does not exist or has expired\n // mais le statut est 403, l'erreur est donc remontée plus tôt.\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type : ErrorService.TYPE_SRVERR,\n status : 200\n }));\n return;\n }\n }\n } else {\n // si la réponse est vide, on appelle le callback d'erreur\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n\n // si tout s'est bien passé, on appelle le callback de succès\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default ProcessIsoCurveResponseFactory;\n","\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport ProcessIsoCurveRequest from \"./Request/ProcessIsoCurveRequest\";\nimport ProcessIsoCurveResponseFactory from \"./Response/ProcessIsoCurveResponseFactory\";\n\n/**\n * @classdesc\n * Appel du service d'isochrone/distance du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.ProcessIsoCurve\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String} options.resource - La ressource utilisée pour le calcul : bdtopo-valhalla (par défaut) ou bdtopo-pgr.\n *\n * @param {String} options.outputFormat - Le format de la réponse du service iso : 'json' uniquement et par défaut.\n *\n * @param {Object} options.position - Point de départ du calcul.\n * Coordonnées exprimées en longitudes, latitudes (EPSG:4326)\n * @param {Float} options.position.x - Abcisse du point de départ du calcul d'isochrone/distance.\n * @param {Float} options.position.y - Ordonnée du point de départ du calcul d'isochrone/distance.\n *\n * @param {String} options.srs - Projection.\n * Système de coordonnées dans lequel les coordonnées du point « location » sont exprimées et\n * dans lequel la géométrie de la courbe résultante sera exprimée.\n * Par défaut, le système de coordonnées utilisé sera « EPSG:4326 ».\n *\n * @param {String} [options.graph = \"voiture\"] - Nom du graphe à utiliser pour le calcul (« Pieton » ou « Voiture »).\n * La valeur par défaut est : «voiture»\n *\n * @param {Array.} [options.exclusions] - DEPRECATED: Ce paramètre est conservé pour une rétrocompatibilité de l'api. Le nouveau paramètre à utiliser est options.constraints.\n * Critères d'exclusions à appliquer pour le calcul.\n * On précise ici le type de tronçons que l'on ne veut pas que l'isochrone/distance emprunte\n * (valeurs possibles : « toll » (éviter les péages), « bridge », « tunnel »).\n *\n * @param {Object[]} [options.constraints] - Critères de contraintes à appliquer sur un itinéraire. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities.\n * @param {String} [options.constraints.constraintType] - Type de la contrainte. Généralement \"banned\".\n * @param {String} [options.constraints.key] - Clé de la contrainte. Généralement \"wayType\".\n * @param {String} [options.constraints.operator] - Opérateur de la contrainte. Généralement \"=\".\n * @param {String} [options.constraints.value] - Valeur de la contrainte. Généralement \"autoroute\".\n *\n * @param {String} [options.method = \"time\"] - Méthode utilisée pour le calcul de la courbe iso.\n * Les valeurs possible sont \"time\" pour un calcul d'isochrone, \"distance\" pour un calcul d'isodistance.\n * Pas de valeur spécifié équivaut à un calcul d'isochrone.\n *\n * @param {String} [options.distanceUnit = \"m\"] - Indique si la distance doit être exprimée en km ou m dans la réponse (\"m\" or \"km\").\n *\n * @param {String} [options.timeUnit = \"second\"] - Indique si la durée doit être exprimée en seconde, minute ou heure dans la réponse (\"standard\", \"second\", \"minute\", \"hour\"). Il peut-être formatté hh:mm::ss avec la valeur standard.\n *\n * @param {Float} options.time - Durée maximum (exprimée en secondes) à utiliser pour le calcul de la courbe à partir du ou jusqu'au point « location ».\n * Ce paramètre doit être renseigné si l'option \"méthod\" a la valeur \"time\".\n * Si l'option method n'est pas renseignée, ce paramètre doit être renseigné.\n *\n * @param {Float} options.distance - Distance maximum (exprimée en metres) à utiliser pour le calcul de la courbe à partir du ou j'usqu'au point « location ».\n * Ce paramètre doit être renseigné si l'option \"méthod\" a la valeur \"DISTANCE\".\n * Si l'option \"method\" n'est pas renseignée, ce paramètre sera ignoré.\n *\n * @param {Boolean} [options.reverse = false] - Indique si la géométrie résultante doit être lissée (« true ») pour ne pas avoir d'effet d'escalier.\n * Par défaut, la valeur « false » est appliquée.\n *\n * @param {Boolean} [options.smoothing = false] - Indique si la géométrie résultante doit être lissée (« true ») pour ne pas avoir d'effet d'escalier.\n * Par défaut, la valeur « false » est appliquée.\n *\n * @param {Boolean} [options.holes = false] - Indique si la géométrie résultante (surface) doit être retournée avec des trous (« true »).\n * Par défaut, la valeur « false » est appliquée.\n *\n * @example\n * var options = {\n * // options communes aux services\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * position : {\n * x : 2.3242664298058053,\n * y : 48.86118017324745\n * },\n * resource : bdtopo-valhalla,\n * distance : 200,\n * [time : ]\n * method : \"distance\",\n * graph : \"voiture\",\n * reverse : false\n * };\n */\n\nfunction ProcessIsoCurve (options) {\n if (!(this instanceof ProcessIsoCurve)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"ProcessIsoCurve\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"ProcessIsoCurve\";\n\n // appel du constructeur par heritage\n CommonService.apply(this, arguments);\n\n this.logger = Logger.getLogger(\"Gp.Services.ProcessIsoCurve\");\n this.logger.trace(\"[Constructeur ProcessIsoCurve (options)]\");\n\n if (!options.position) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"position\"));\n }\n\n // on lance une exception afin d'eviter au service de le faire...\n if (options.position.x === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"position.x\"));\n }\n\n if (options.position.y === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"position.y\"));\n }\n\n if (!options.time && !options.distance) {\n throw new Error(\"Parameter (s) 'distance' missing. Parameter time to calculate an isochrone, parameter distance for an isodistance\");\n }\n\n // si on a que le paramètre \"distance\" en entrée, on calcule une isodistance.\n // Le paramètre \"méthode\" doit pour avoir une réponse du service, être passé à \"distance\"\n if (!options.time && options.distance) {\n this.options.method = \"distance\";\n // on supprime l'éventuel attribut time, résidu d'un appel antérieur\n if (this.options.time) {\n delete this.options.time;\n }\n }\n\n // si on a que le paramètre \"time\" en entrée, on calcule une isochrone.\n // Le paramètre \"méthode\" doit pour avoir une réponse du service, être passé à \"time\"\n if (options.time && !options.distance) {\n this.options.method = \"time\";\n // on supprime l'éventuel attribut time, résidu d'un appel antérieur\n if (this.options.distance) {\n delete this.options.distance;\n }\n }\n\n // au cas où on a ni l'un, ni l'autre...\n this.options.method = this.options.method || \"time\";\n\n // options par defaut du service\n // TODO: modifier la ressource lors de la mise en production du service\n this.options.resource = options.resource || \"bdtopo-valhalla\";\n this.options.exclusions = options.exclusions || [];\n this.options.reverse = options.reverse || false;\n this.options.srs = options.srs || \"EPSG:4326\";\n this.options.distanceUnit = options.distanceUnit || \"m\";\n this.options.timeUnit = options.timeUnit || \"second\";\n\n // options depreciees\n if (options.smoothing) {\n this.logger.warn(\"options.smoothing is DEPRECATED\");\n }\n this.options.smoothing = false;\n if (options.holes) {\n this.logger.warn(\"options.holes is DEPRECATED\");\n }\n this.options.holes = false;\n\n // Gestion du graphe\n if (options.graph) {\n if (options.graph === \"Voiture\") {\n this.options.graph = \"car\";\n }\n if (options.graph === \"Pieton\") {\n this.options.graph = \"pedestrian\";\n }\n } else {\n this.options.graph = \"car\";\n }\n\n // Gestions des contraintes\n this.options.constraints = [];\n if (options.constraints) {\n if (Array.isArray(options.constraints)) {\n for (var k = 0; k < options.constraints.length; k++) {\n this.options.constraints.push(options.constraints[k]);\n }\n } else {\n throw new Error(_.getMessage(\"PARAM_TYPE\", \"constraints\"));\n }\n }\n\n // Gestion de l'ancien paramètre exclusions\n var constraintTunnel = {};\n var constraintPont = {};\n var constraintAutoroute = {};\n if (options.exclusions) {\n if (options.exclusions.length !== 0) {\n this.logger.warn(\"options.exclusions is DEPRECATED !!\");\n for (var c = 0; c < options.exclusions.length; c++) {\n if (typeof options.exclusions[c] === \"string\") {\n options.exclusions[c] = options.exclusions[c].toLowerCase();\n } else {\n // on ne crée pas une erreur pour rétro-compatibilité avec les anciennes versions\n continue;\n }\n if (options.exclusions[c] === \"toll\") {\n constraintAutoroute.constraintType = \"banned\";\n constraintAutoroute.key = \"wayType\";\n constraintAutoroute.operator = \"=\";\n constraintAutoroute.value = \"autoroute\";\n this.options.constraints.push(constraintAutoroute);\n }\n if (options.exclusions[c] === \"tunnel\") {\n constraintTunnel.constraintType = \"banned\";\n constraintTunnel.key = \"wayType\";\n constraintTunnel.operator = \"=\";\n constraintTunnel.value = \"tunnel\";\n this.options.constraints.push(constraintTunnel);\n }\n if (options.exclusions[c] === \"bridge\") {\n constraintPont.constraintType = \"banned\";\n constraintPont.key = \"wayType\";\n constraintPont.operator = \"=\";\n constraintPont.value = \"pont\";\n this.options.constraints.push(constraintPont);\n }\n }\n }\n }\n\n // on passe l'option outputFormat en minuscules afin d'éviter des exceptions.\n this.options.outputFormat = (typeof options.outputFormat === \"string\") ? options.outputFormat.toLowerCase() : \"json\";\n if (options.outputFormat && options.outputFormat !== \"json\") {\n throw new Error(_.getMessage(\"PARAM_NOT_SUPPORT\", \"outputFormat\"));\n }\n this.options.outputFormat = \"json\";\n\n // gestion de l'url du service par defaut\n // si l'url n'est pas renseignée, il faut utiliser les urls par defaut\n if (!this.options.serverUrl) {\n var urlFound = DefaultUrlService.ProcessIsoCurve.newUrl();\n if (!urlFound) {\n throw new Error(\"Url by default not found !\");\n }\n this.options.serverUrl = urlFound;\n this.logger.trace(\"Serveur URL par defaut : \" + this.options.serverUrl);\n }\n}\n\n/**\n * @lends module:ProcessIsoCurve#\n */\nProcessIsoCurve.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nProcessIsoCurve.prototype.constructor = ProcessIsoCurve;\n\n/**\n * Création de la requête (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nProcessIsoCurve.prototype.buildRequest = function (error, success) {\n try {\n var oIsoCurve = new ProcessIsoCurveRequest(this.options);\n if (!oIsoCurve.processRequestString()) {\n throw new Error(_.getMessage(\"SERVICE_REQUEST_BUILD\"));\n }\n\n this.request = oIsoCurve.requestString;\n } catch (e) {\n error.call(this, new ErrorService(e.message));\n return;\n }\n\n success.call(this, this.request);\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} onError - callback des erreurs\n * @param {Function} onSuccess - callback de succès de l'analyse de la réponse\n */\nProcessIsoCurve.prototype.analyzeResponse = function (onError, onSuccess) {\n if (this.response) {\n var options = {\n response : this.response,\n outputFormat : this.options.outputFormat,\n rawResponse : this.options.rawResponse,\n onSuccess : onSuccess,\n onError : onError,\n scope : this\n };\n\n ProcessIsoCurveResponseFactory.build(options);\n } else {\n onError.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default ProcessIsoCurve;\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"point|circle|bbox\" }] */\n\n/**\n* Geoportal web services invocation namespace.\n*\n* @module Services\n* @alias Gp.Services\n*/\nimport Config from \"./Config/Config\";\nimport Alti from \"./Alti/Alti\";\nimport Geocode from \"./Geocode/Geocode\";\nimport ReverseGeocode from \"./Geocode/ReverseGeocode\";\nimport AutoComplete from \"./AutoComplete/AutoComplete\";\nimport Route from \"./Route/Route\";\nimport ProcessIsoCurve from \"./ProcessIsoCurve/ProcessIsoCurve\";\n\nvar Services = {\n /**\n * Access to Geoportal resources metadata availables with one ore several keys\n *\n * @method getConfig\n * @param {Object} options - Options for function call.\n * @param {String} [options.apiKey] - Access key(s) (\",\" as separator, no spaces) to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}\n * @param {String} [options.customConfigFile] - path to a local config file. Overload the apiKey parameter\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.GetConfigResponse} object as a parameter except if \"rawResponse\" parameter is set to true : a String will be returned.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n */\n getConfig : function (options) {\n var configService = new Config(options);\n configService.call();\n },\n /**\n * Getting elevations in or along of one or several points on french territories using the [elevation services of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/alti.html}.
\n * Two use cases are availables :
\n * 1. getting elevations of the given points : don't use the options.sampling parameter ;
\n * 2. getting a regular set of elevations along the given points : use the options.sampling parameter.\n *\n * @method getAltitude\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {Array.} options.positions - Array of positions ({lon:float, lat:float}) expressed in CRS:84 coordinates system, where to get elevations. 50 positions maximum may be given. 2 positions minimum are required if you use the options.sampling parameter.\n * @param {Number} [options.sampling] - Number of points to use (between 2 and 5000) in order to compute an elevation path. The points given with the options.positions parameter are used to fix the planimetric path along which the elevations will be computed.
\n * If not used, only elevations of these positions will be returned.\n * @param {Boolean} [options.zonly=false] - Set this parameter to true if you only want to have elevations returned without corresponding coordinates.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.AltiResponse} object as a parameter, except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n * @param {String} [options.api='REST'] - What API to use for interacting with underlying web service : 'REST'. Only use if you know what you are doing.\n * @param {String} [options.outputFormat='xml'] - Output format for underlying web service response : 'xml' or 'json'. Only use if you know what you are doing.\n */\n getAltitude : function (options) {\n var altiService = new Alti(options);\n altiService.call();\n },\n /**\n * Getting positon of a geographic identifier (places names, address, cadastral parcel, other...) using the [geocoding web service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/geocodage.html}.\n *\n * @example\n * Gp.Services.geocode ({\n * apiKey : \"carte\",\n * location : \"73 avenue de Paris, Saint-Mandé\",\n * // traitement des resultats\n * onSuccess : function (result) {\n * console.log(\"found (x:\"+result.position.x+\", y:\"+result.position.y+\")\") ;\n * }\n * }) ;\n *\n *\n * @method geocode\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} [options.index=\"StreetAddress\"] - Geographical identifier type to search. Values currently availables are : \"PositionOfInterest\" for place names, \"StreetAddress\" for address search, \"CadastralParcel\" for Cadastral parcels search, \"location\" for a multi-index search on \"StreetAddress\" and \"PositionOfInterest\". Default is \"StreetAddress\".\n * @param {String} options.query - Geographic identifier to locate.\n * @param {Object} [options.filters] - Additional filters to apply to search. The following properties may be given.\n * @param {String} [options.filters.[prop]] - Additionnal properties to filter search. Properties depends on options.index, and values type should be \"String\".\n *

\n * Properties availables for address search :
\n * \"postalCode\", \"inseeCode\" and \"city\".\n *

\n * Properties availables for place names search :
\n * \"postalCode\", \"inseeCode\" and \"type\".\n *

\n * Properties availables for cadastral parcels search :
\n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n * @param {Number} [options.maximumResponses=20] - Maximum number of responses. Default underlying service value applies (20) if not provided.\n * @param {Boolean} [options.returnTrueGeometry=false] - Set this parameter to true if you wish to have the true geometrie returned.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.GeocodeResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=http (s)://data.geopf.fr/geocodage/search] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n geocode : function (options) {\n var geocodeService = new Geocode(options);\n geocodeService.call();\n },\n /**\n * Retrieving geographical identifiers (place names, address, cadastral parcels, ...) near a given position, using the [reverse geocoding web service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/geocodage-inverse.html}.\n *\n * @method reverseGeocode\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} [options.index=\"StreetAddress\"] - Geographical identifier type to search. Values currently availables are : \"PositionOfInterest\" for place names, \"StreetAddress\" for address search, \"CadastralParcel\" for Cadastral parcels search, \"location\" for a multi-index search on \"StreetAddress\" and \"PositionOfInterest\". Default is \"StreetAddress\".\n * @param {Object} options.position - Reference position where to search geographical identifiers.\n * @param {Float} options.position.lon - Longitude\n * @param {Float} options.position.lat - Latitude\n * @param {Object} [options.filters] - Additional filters to apply to search. The following properties may be given.\n * @param {String} [options.filters.[prop]] - Additionnal properties to filter search. Properties depends on options.index, and values type should be \"String\".\n *

\n * Properties availables for address search :
\n * \"postalCode\", \"inseeCode\" and \"city\".\n *

\n * Properties availables for place names search :
\n * \"postalCode\", \"inseeCode\" and \"type\".\n *

\n * Properties availables for cadastral parcels search :
\n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n * @param {Object} [options.searchGeometry] - Location where to perform the search.\n * @param {String} options.searchGeometry.type - Geometry type (Point|Circle|Linestring|Polygon)\n * @param {Array.|Array.Array.} options.searchGeometry.coordinates - Coordinates\n * @param {Float} [options.searchGeometry.radius] - Radius (only for type 'Circle')\n * @param {Number} [options.maximumResponses=20] - Maximum number of responses. Default underlying service value applies (20) if not provided.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.GeocodeResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=https://data.geopf.fr/geocodage/reverse] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n reverseGeocode : function (options) {\n var reverseGeocodeService = new ReverseGeocode(options);\n reverseGeocodeService.call();\n },\n /**\n * Getting suggestions of probable places names or address based on uncomplete texts, using the [autocompletion service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/autocompletion.html}\n *\n * @method autoComplete\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} options.text - Text input to complete.\n * @param {Array.} [options.filterOptions.type = \"StreetAddress\"] - Suggestion types to provide : address (\"StreetAddress\") and/or place name (\"PositionOfInterest\").\n * @param {Array.} [options.filterOptions.territory] - Places where to limit the search of suggestions : \"METROPOLE\" (Corsica and metropolitan France), \"DOMTOM\" (French overseas departments and territories), or an INSEE code of a department. No limitation by default. For instance : ['METROPOLE', '31']\n * @param {Number} [options.maximumResponses = 10] - Maximum number of responses.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.AutoCompleteResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=https://data.geopf.fr/geocodage/completion] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n autoComplete : function (options) {\n var autoCompleteService = new AutoComplete(options);\n autoCompleteService.call();\n },\n /**\n * Getting a route from one point to another using the [route service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/itineraires.html}.\n *\n * @method route\n * @param {Object} options - Options for function call.\n * @param {String} options.resource - Resource used to compute the route. Available values are in the GetCapabilities.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} [options.routePreference = \"fastest\"] - Indicates the way to compute the route : \"fastest\" (time optimisation) or \"shortest\" (distance optimisation). Available values are in the GetCapabilities.\n * @param {Gp.Point} options.startPoint - Start point of the route. Expressed in CRS:84 coordinates system (startPoint.x corresponds to longitude, startPoint.y corresponds to latitude). Available bbox are in the GetCapabilities.\n * @param {Gp.Point} options.endPoint - End point of the route. Expressed in CRS:84 coordinates system (endPoint.x corresponds to longitude, endPoint.y corresponds to latitude). Available bbox are in the GetCapabilities.\n * @param {Array.} [options.viaPoints] - Ordered via Points of the route. Expressed in CRS:84 coordinates system (viaPoints[i].x corresponds to longitude, viaPoints[i].y corresponds to latitude). Available bbox are in the GetCapabilities.\n * @param {String} [options.graph = \"Voiture\"] - User profile to use to compute the route : \"Voiture\" (using a vehicule) or \"Pieton\" (pedestrian). Has an influence on the kind of roads the route may use and the average speed. Available bbox are in the GetCapabilities.\n * @param {Array.} [options.exclusions] - DEPRECATED: use options.constraints. Indicates if route has to avoid some features (\"toll\", \"bridge\" or \"tunnel\").\n * @param {Boolean} [options.geometryInInstructions = false] - Indicates if route geometry has to be also returned with route instructions.\n * @param {Boolean} [options.provideBoundingBox = true] - Indicates if route instructions has to be localised with a BBOX in the response.\n * @param {String} [options.distanceUnit = \"m\"] - The unit used to provide distances in the response (\"meter\" or \"kilometer\").\n * @param {String} [options.timeUnit = \"second\"] - The unit used to provide duration in the response (\"standard\", \"second\", \"minute\", \"hour\").\n * @param {Array.} [options.waysAttributes] - Way Attributes to add in the response. Available values are in the GetCapabilities.\n * @param {Array.} [options.constraints] - Constraints used ({'constraintType':'banned','key':'ways_type','operator':'=','value':'autoroute'}). Available values are in the GetCapabilities.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.RouteResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.outputFormat='json'] - Output format (\"json\" or \"xml\") to use for underlying webService. Only use if you know what you are doing.\n * @param {String} [options.serverUrl=https://data.geopf.fr/navigation/itineraire] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n route : function (options) {\n var routeService = new Route(options);\n routeService.call();\n },\n /**\n * Computing a set of places (curve) reachable from a given point (or from where to start to reach a given point) within a time or distance constraint using the [isochrone service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/isochrones.html}.\n *\n * @method isoCurve\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} options.resource - Resource used to compute the route. Available values are in the GetCapabilities.\n * @param {Gp.Point} options.position - Start or Arrival (options.reverse===true) Point for the computing. Expressed in CRS:84 coordinates system (position.x corresponds to longitude, position.y corresponds to latitude).\n * @param {String} [options.graph = \"Voiture\"] - User profile to use to compute the isoCurve : \"Voiture\" (using a vehicule) or \"Pieton\" (pedestrian). Has an influence on the kind of roads to use and the average speed. Available values are in the GetCapabilities.\n * @param {Array.} [options.exclusions] - DEPRECATED: use options.constraints. Indicates if route has to avoid some features (\"toll\", \"bridge\" or \"tunnel\").\n * @param {Array.} [options.constraints] - Constraints used ({'constraintType':'banned','key':'ways_type','operator':'=','value':'autoroute'}). Available values are in the GetCapabilities.\n * @param {String} [options.method = \"time\"] - Computing method to use : \"time\" (using a duration as a constraint) or \"distance\" (using a distance as a constraint). Available values are in the GetCapabilities.\n * @param {Float} options.time - Maximum duration (expressed in seconds) to use when options.method is set to \"time\".\n * @param {Float} options.distance - Maximum distance (expressed in meters) to use when options.method is set to \"distance\".\n * @param {Boolean} [options.reverse = false] - Set this parameter to true if you want options.position to be the destination (instead of departure) for the computing.\n * @param {String} [options.distanceUnit = \"km\"] - The unit used to provide distances in the response (\"m\" or \"km\").\n * @param {String} [options.timeUnit = \"second\"] - The unit used to provide duration in the response (\"standard\", \"second\", \"minute\", \"hour\").\n * @param {Boolean} [options.smoothing = false] - DEPRECATED: Set this parameter to true if you want the resulting geometry to be smoothed.\n * @param {Boolean} [options.holes = false] - DEPRECATED: Set this parameter to true if you want the resulting geometry (polygon) to have holes if pertinent.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.IsoCurveResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.outputFormat='json'] - Output format (\"json\") to use for underlying webService. Only use if you know what you are doing.\n * @param {String} [options.serverUrl=https://data.geopf.fr/navigation/isochrone] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n isoCurve : function (options) {\n var processIsoCurveService = new ProcessIsoCurve(options);\n processIsoCurveService.call();\n }\n};\n\n/**\n * Point object.\n *\n * @namespace\n * @alias Gp.Point\n *\n * @property {Float} x - Point abscissa\n * @property {Float} y - Point ordinate\n */\nvar point = {};\n\n/**\n * Circle object.\n *\n * @namespace\n * @alias Gp.Circle\n *\n * @property {Float} x - Circle center abscissa.\n * @property {Float} y - Circle center ordinate.\n * @property {Float} radius - Circle radius.\n */\nvar circle = {};\n\n/**\n * Bounding box object, expressed with four coordinates.\n *\n * @namespace\n * @alias Gp.BBox\n *\n * @property {Float} left - minimum abscissa\n * @property {Float} right - maximum abscissa\n * @property {Float} bottom - minimum ordinate\n * @property {Float} top - maximum ordinate\n */\nvar bbox = {};\n\nexport default Services;\n","/**\n* Global variable Gp.\n*\n* @module Gp\n* @alias Gp\n* @description\n*\n* This is the global variable that is exposed in the browser environment.\n* Content is composed of constructor, functions and properties...\n*\n* > {@link Gp.Error Error()}\n* - .TYPE_SRVERR : \"SERVICE_ERROR\"\n* - .TYPE_UNKERR : \"UNKNOWN_ERROR\"\n* - .TYPE_USEERR : \"USAGE_ERROR\"\n*\n* > {@link module:Helper Helper}\n* - .indent()\n* - .normalyzeParameters()\n* - .normalyzeUrl()\n*\n* > {@link module:XHR Protocols.XHR}\n* - .call()\n*\n* > {@link module:Services Services (objects)}\n* - .Alti\n* - {@link Gp.Services.Alti.Elevation .Elevation()}\n* - {@link Gp.Services.AltiResponse .AltiResponse()}\n* - .AutoComplete\n* - {@link Gp.Services.AutoComplete.SuggestedLocation .SuggestedLocation()}\n* - {@link Gp.Services.AutoCompleteResponse .AutoCompleteResponse()}\n* - {@link Gp.Services.Config .Config()}\n* - {@link Gp.Services.DefaultUrl .DefaultUrl()}\n* - {@link Gp.Services.GeocodeResponse .GeocodeResponse()}\n* - {@link Gp.Services.GetConfigResponse .GetConfigResponse()}\n* - {@link Gp.Services.IsoCurveResponse .IsoCurveResponse()}\n* - .Route\n* - {@link Gp.Services.Route.RouteInstruction .RouteInstruction()}\n* - {@link Gp.Services.RouteResponse .RouteResponse()}\n*\n* > Services (factory)\n* - {@link module:Services~autoComplete .autoComplete()}\n* - {@link module:Services~geocode .geocode()}\n* - {@link module:Services~getAltitude .getAltitude()}\n* - {@link module:Services~getConfig .getConfig()}\n* - {@link module:Services~isoCurve .isoCurve()}\n* - {@link module:Services~reverseGeocode .reverseGeocode()}\n* - {@link module:Services~route .route()}\n*\n* > servicesDate : \"YYYY-MM-DD\"\n*\n* > servicesVersion : \"X.X.X\"\n*\n*/\n\nimport Services from \"./Services/Services\";\nimport DefaultUrl from \"./Services/DefaultUrlService\";\nimport AltiResponse from \"./Services/Alti/Response/model/AltiResponse\";\nimport Elevation from \"./Services/Alti/Response/model/Elevation\";\nimport AutoCompleteResponse from \"./Services/AutoComplete/Response/model/AutoCompleteResponse\";\nimport SuggestedLocation from \"./Services/AutoComplete/Response/model/SuggestedLocation\";\nimport IsoCurveResponse from \"./Services/ProcessIsoCurve/Response/model/ProcessIsoCurveResponse\";\nimport RouteResponse from \"./Services/Route/Response/model/RouteResponse\";\nimport RouteInstruction from \"./Services/Route/Response/model/RouteInstruction\";\nimport Config from \"./Services/Config/Config\";\nimport XHR from \"./Protocols/XHR\";\nimport Error from \"./Exceptions/ErrorService\";\nimport Helper from \"./Utils/Helper\";\n\nimport Pkg from \"../package.json\";\n\n/** Version */\nexport const servicesVersion = Pkg.version;\n/** Publication date */\nexport const servicesDate = Pkg.date;\n\n// on declare les ns dans root global\nvar Gp = {};\n\nGp.servicesVersion = servicesVersion;\nGp.servicesDate = servicesDate;\n\n// Export Protocols\nGp.Protocols = {};\nGp.Protocols.XHR = XHR;\n// Export services\nGp.Services = Services;\n// Export DefaultUrls\nGp.Services.DefaultUrl = DefaultUrl;\n// Export Alti\nGp.Services.AltiResponse = AltiResponse;\nGp.Services.Alti = {};\nGp.Services.Alti.Elevation = Elevation;\n// Export Autocomplete\nGp.Services.AutoCompleteResponse = AutoCompleteResponse;\nGp.Services.AutoComplete = {};\nGp.Services.AutoComplete.SuggestedLocation = SuggestedLocation;\n// Export Config\nGp.Services.Config = Config;\n// Export IsoCurve\nGp.Services.IsoCurveResponse = IsoCurveResponse;\n// Export Route\nGp.Services.RouteResponse = RouteResponse;\nGp.Services.Route = {};\nGp.Services.Route.RouteInstruction = RouteInstruction;\n// Export Erreurs et Outils\nGp.Error = Error;\nGp.Helper = Helper;\n\nexport default Gp;\n","import * as Log from \"loglevel\";\n\n/**\n * @module LoggerByDefault\n * @alias module:~utils/Logger\n * @description\n * ...\n *\n * @example\n * import Logger from \"gpf-ext-ol/utils/LoggerByDefault\"\n * ou \n * import {Logger} from \"gpf-ext-ol\n * \n * Logger.getLogger();\n * Logger.disableAll();\n * Logger.enableAll();\n */\nvar LoggerByDefault = {\n /**\n * creation d'un logger statique\n *\n * @function getLogger\n * @param {String} [name=\"default\"] - the logger name\n * @returns {Object} logger\n */\n getLogger : function (name) {\n // on définit process si non défini dans l'environnement\n if (typeof process === \"undefined\") {\n var process = {};\n process.env = {\n VERBOSE : false\n };\n }\n (process.env.VERBOSE) ? Log.enableAll() : Log.disableAll();\n var logname = name || \"default\";\n return Log.getLogger(logname);\n },\n /**\n * desactive tous les loggers\n * @function disableAll\n */\n disableAll : function () {\n var loggers = Log.getLoggers();\n for (const key in loggers) {\n if (Object.hasOwnProperty.call(loggers, key)) {\n const logger = loggers[key];\n logger.disableAll();\n }\n }\n },\n /**\n * active tous les loggers\n * @function enableAll\n */\n enableAll : function () {\n var loggers = Log.getLoggers();\n for (const key in loggers) {\n if (Object.hasOwnProperty.call(loggers, key)) {\n const logger = loggers[key];\n logger.enableAll();\n }\n }\n }\n};\n\nexport default LoggerByDefault;\n\n// Expose Export as ol.control.Catalog (for a build bundle)\nif (window.Gp) {\n window.Gp.Logger = LoggerByDefault;\n}\n","import Logger from \"./LoggerByDefault\";\n\n/**\n* @module ProxyUtils\n* @alias module:~utils/ProxyUtils\n* @description\n* ...\n*\n* @example\n* proxifyUrl();\n*/\nvar ProxyUtils = {\n /**\n * Ajoute un proxy aux url des couches vecteurs si besoin.\n *\n * @function proxifyUrl\n * @param {String} url - Url to proxify.\n * @param {Object} [proxyOptions] - Object defining proxy options.\n * @param {String} proxyOptions.proxyUrl - Proxy URL.\n * @param {Array.} [proxyOptions.noProxyDomains] - Proxy will not be used for this list of domain names.\n *\n * @returns {String} proxy url\n */\n proxifyUrl : function (url, proxyOptions) {\n // logger\n\n var logger = Logger.getLogger(\"proxifyUrl\");\n\n if (!proxyOptions ||\n !proxyOptions.hasOwnProperty(\"proxyUrl\") ||\n proxyOptions.proxyUrl === null ||\n proxyOptions.proxyUrl.trim().length === 0) {\n return url;\n }\n // on regarde si l'url nest pas dans les domaines sans proxy\n if (proxyOptions.noProxyDomains &&\n Array.isArray(proxyOptions.noProxyDomains) &&\n proxyOptions.noProxyDomains.length > 0) {\n for (var i in proxyOptions.noProxyDomains) {\n logger.trace(\"[ProxyUtils] proxifyUrl : analyzing \" + proxyOptions.noProxyDomains[i]);\n if (url.indexOf(proxyOptions.noProxyDomains[i]) !== -1) {\n logger.info(\"[ProxyUtils] proxifyUrl : \" + url + \" found in noProxyDomains list (\" + proxyOptions.noProxyDomains[i] + \").\");\n return url;\n }\n }\n }\n return proxyOptions.proxyUrl + encodeURIComponent(url);\n }\n};\n\nexport default ProxyUtils;\n","// import OpenLayers\nimport Overlay from \"ol/Overlay\";\nimport VectorTileSource from \"ol/source/VectorTile\";\nimport VectorSource from \"ol/source/Vector\";\nimport TileWMSSource from \"ol/source/TileWMS\";\nimport WMTSSource from \"ol/source/WMTS\";\nimport ImageWMSSource from \"ol/source/ImageWMS\";\nimport {\n Select as SelectInteraction,\n Modify as ModifyInteraction,\n Draw as DrawInteraction\n} from \"ol/interaction\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport ProxyUtils from \"../../Utils/ProxyUtils\";\n// import $__xmldom from \"xmldom\";\n\nvar logger = Logger.getLogger(\"GfiUtils\");\n\nvar Gfi = {\n\n /**\n * Return layer format\n *\n * @param {ol.layer.Layer} l - layer openlayers\n *\n * @return {String} format - layer format can be wms, wmts, vector or unknown\n *\n */\n getLayerFormat : function (l) {\n // la fonction 'getType' existe uniquement en mode source es6.\n // le bundle ol ne fournit pas cette fonction !?\n var type = (typeof l.getType === \"function\") ? l.getType() : null;\n var source = l.getSource();\n if (type) {\n if (type === \"VECTOR\" || type === \"VECTOR_TILE\") {\n return \"vector\";\n }\n if (type === \"TILE\") {\n if (source.tileGrid) {\n return \"wmts\";\n } else {\n return \"wms\";\n }\n }\n if (type === \"IMAGE\") {\n return \"wms\";\n }\n } else {\n if (source instanceof TileWMSSource || source instanceof ImageWMSSource) {\n return \"wms\";\n }\n if (source instanceof WMTSSource) {\n return \"wmts\";\n }\n if (source instanceof VectorSource || source instanceof VectorTileSource) {\n return \"vector\";\n }\n }\n return \"unknown\";\n },\n\n /**\n * Info Popup creation and display\n *\n * @param {ol.Map} map - map openlayers\n * @param {ol.Coordinate} coords - coordinates where to anchor popup.\n * @param {String} content - content to display\n * @param {String} [contentType='text/html'] - content mime-type\n * @param {Object} autoPanOptions - Auto-pan pop-up options\n * @param {Boolean|Object} [autoPanOptions.autoPan] - Specifies whether the map should auto-pan if the pop-up is rendered outside of the canvas (See {@link https://openlayers.org/en/latest/apidoc/module-ol_Overlay.html#~PanIntoViewOptions PanIntoViewOptions})\n * @param {Object} [autoPanOptions.autoPanAnimation] - Used to customize the auto-pan animation. See {@link https://openlayers.org/en/latest/apidoc/module-ol_Overlay.html#~PanOptions PanOptions}.\n * @param {Number} [autoPanOptions.autoPanMargin] - Margin (in pixels) between the pop-up and the border of the map when autopanning. Default is 20.\n * @return {Boolean} displayed - indicates if something has been displayed\n */\n displayInfo : function (map, coords, content, contentType, autoPanOptions) {\n logger.trace(\"[Gfi] : displayInfo...\");\n\n if (!contentType) {\n contentType = \"text/html\";\n }\n\n if (content === null) {\n return;\n }\n\n var _htmlDoc = null;\n var _parser = null;\n\n var _content = content;\n _content = _content.replace(/\\n/g, \"\");\n _content = _content.replace(/(>)\\s*(<)/g, \"$1$2\");\n\n var scope = typeof window !== \"undefined\" ? window : null;\n\n if (typeof exports === \"object\" && window === null) {\n // code for nodejs\n var DOMParser = require(\"@xmldom/xmldom\").DOMParser;\n _parser = new DOMParser();\n _htmlDoc = _parser.parseFromString(_content, contentType);\n } else if (scope.DOMParser) {\n // code for modern browsers\n _parser = new scope.DOMParser();\n _htmlDoc = _parser.parseFromString(_content, contentType);\n } else if (scope.ActiveXObject) {\n // code for old IE browsers\n _htmlDoc = new scope.ActiveXObject(\"Microsoft.XMLDOM\");\n _htmlDoc.async = false;\n _htmlDoc.loadXML(_content);\n } else {\n logger.log(\"Incompatible environment for DOM Parser !\");\n return false;\n }\n\n var body = _htmlDoc.getElementsByTagName(\"body\");\n if (body && body.length === 1) {\n if (!body[0].hasChildNodes()) {\n return false;\n }\n }\n\n // Affichage des features.\n var element = document.createElement(\"div\");\n element.className = \"gp-feature-info-div\";\n\n var closer = document.createElement(\"button\");\n closer.className = \"gp-styling-button closer\";\n\n // fait disparaître la popup au clic sur x\n closer.onclick = function () {\n if (map.featuresOverlay) {\n map.removeOverlay(map.featuresOverlay);\n map.featuresOverlay = null;\n }\n return false;\n };\n\n var contentDiv = document.createElement(\"div\");\n contentDiv.className = \"gp-features-content-div\";\n contentDiv.innerHTML = content;\n /*\n if (content instanceof HTMLElement) {\n this.logger.trace(\"[Openlayers] : _displayInfo : pure HTMLElement\") ;\n contentDiv.appendChild(content) ;\n } else {\n var parser = new DOMParser() ;\n var doc = null ;\n try {\n doc = parser.parseFromString(content,contentType) ;\n this.logger.trace(\"[Openlayers] : _displayInfo : HTMLElement from parser\") ;\n // FIXME : avec cette methode, on a une balise html + body qui s'insère...\n contentDiv.appendChild(doc.documentElement) ;\n } catch (e) {\n console.log(e) ;\n this.logger.trace(\"[Openlayers] : _displayInfo : parsing content failed (not HTML)\") ;\n // en cas d'erreur : on se contente de recopier le contenu.\n contentDiv.innerHTML = content ;\n }\n }\n */\n element.appendChild(contentDiv);\n element.appendChild(closer);\n\n if (map.featuresOverlay) {\n // fermeture d'une éventuelle popup déjà ouverte.\n map.removeOverlay(map.featuresOverlay);\n map.featuresOverlay = null;\n }\n map.featuresOverlay = new Overlay({\n // id : id,\n element : element,\n autoPan : autoPanOptions.autoPan,\n autoPanAnimation : autoPanOptions.autoPanAnimation,\n autoPanMargin : autoPanOptions.autoPanMargin,\n positioning : \"bottom-center\",\n insertFirst : false, // popup appears on top of other overlays if any\n stopEvent : true\n });\n map.addOverlay(map.featuresOverlay);\n map.featuresOverlay.setPosition(coords);\n map.featuresOverlay.render();\n\n return true;\n },\n\n /**\n * Gets HTML content from features array\n *\n * @param {ol.Map} map - map openlayers\n * @param {Array.} features - openlayers features Array\n * @returns {HTMLElement} HTML content.\n */\n features2html : function (map, features) {\n var content = document.createElement(\"div\");\n features.forEach(function (f) {\n var props = f.getProperties();\n // si la properties 'render' est presente,\n // on ajoute directement le rendu HTML dans la balise principale\n if (props.hasOwnProperty(\"render\")) {\n // content.innerHTML = props[\"render\"].trim();\n // content.appendChild(props[\"render\"]);\n content.insertAdjacentHTML(\"beforeend\", props[\"render\"]);\n } else {\n if (props.hasOwnProperty(\"name\")) {\n var nameDiv = document.createElement(\"div\");\n nameDiv.className = \"gp-att-name-div\";\n // nameDiv.appendChild(document.createTextNode(props[\"name\"])) ;\n nameDiv.insertAdjacentHTML(\"afterbegin\", props[\"name\"]);\n content.appendChild(nameDiv);\n }\n if (props.hasOwnProperty(\"description\")) {\n var descDiv = document.createElement(\"div\");\n descDiv.className = \"gp-att-description-div\";\n // descDiv.appendChild(document.createTextNode(props[\"description\"])) ;\n descDiv.insertAdjacentHTML(\"afterbegin\", props[\"description\"]);\n content.appendChild(descDiv);\n }\n var p = null;\n var others = false;\n var oDiv = null;\n var ul = null;\n var li = null;\n // Liste des properties à retirer de la visualisation :\n var listForbidden = [\n // styles\n \"fill\",\n \"fill-opacity\",\n \"stroke\",\n \"stroke-opacity\",\n \"stroke-width\",\n \"marker-symbol\",\n \"marker-color\",\n \"marker-size\",\n \"geometry\", // geometrie\n \"value\",\n \"name\", // déjà traité\n \"description\", // déjà traité\n \"styleUrl\",\n \"extensionsNode_\", // extensions GPX\n \"icon\" // ajouté par la 3D en cas de switch\n ];\n for (p in props) {\n if (props[p] === undefined) {\n continue;\n }\n if (listForbidden.indexOf(p) !== -1) {\n continue;\n }\n if (!others) {\n oDiv = document.createElement(\"div\");\n oDiv.className = \"gp-att-others-div\";\n ul = document.createElement(\"ul\");\n others = true;\n }\n li = document.createElement(\"li\");\n var span = document.createElement(\"span\");\n span.className = \"gp-attname-others-span\";\n span.appendChild(document.createTextNode(p + \" : \"));\n li.appendChild(span);\n li.appendChild(document.createTextNode(props[p]));\n ul.appendChild(li);\n }\n if (ul) {\n oDiv.appendChild(ul);\n content.appendChild(oDiv);\n }\n }\n }, map);\n\n // pas de contenu !\n if (!content.hasChildNodes()) {\n content = null;\n }\n\n return content;\n },\n\n /**\n * Indicates if there is a feature at the given coordinates for the given layer\n *\n * @param {ol.Map} map - map openlayers\n * @param {ol.layer.Layer} olLayer - vector layer openlayers\n * @param {ol.Coordinate} olCoordinate - coordinates pointed by user\n *\n * @return {Boolean} has feature\n *\n */\n layerGetFeatureAtCoordinates : function (map, olLayer, olCoordinate) {\n var pixel = map.getPixelFromCoordinate(olCoordinate);\n return map.hasFeatureAtPixel(pixel, function (layer) {\n if (layer === olLayer) {\n return true;\n }\n return false;\n });\n },\n\n /**\n * Get information from all the features located at the specified coordinates\n * and belonging to the layers list argument. Those information are gathered\n * and displayed in an info popup.\n *\n * @param {ol.Map} map - map openlayers\n * @param {ol.Coordinate} olCoordinate - coordinates pointed by user\n * @param {Array.} olLayers - layers requested\n * @param {Object} autoPanOptions - autopan options\n *\n * @returns {Boolean} something is displayed\n *\n */\n displayVectorFeatureInfo : function (map, olCoordinate, olLayers, autoPanOptions) {\n var pixel = map.getPixelFromCoordinate(olCoordinate);\n\n // couches vecteur : on remplit un tableau avec les features à proximité.\n var features = [];\n map.forEachFeatureAtPixel(pixel, function (feature, layer) {\n if (!olLayers || olLayers.indexOf(layer) > -1) {\n features.push(feature);\n }\n });\n if (features.length === 0) {\n // no features\n return false;\n }\n var content = this.features2html(map, features);\n // pas de contenu !\n if (content === null) {\n return false;\n }\n // Affichage des features.\n this.displayInfo(map, olCoordinate, content.innerHTML, \"text/html\", autoPanOptions);\n // this._displayInfo(evt.coordinate,content,\"text/html\") ;\n return true;\n },\n\n /**\n * Method to manage the request of information from a list of layers already added to the map.\n * Among the given list of layers only the visible ones are requested.\n * The priority is given to the upper layer having a feature at the pointed coordinates.\n * If the first (upper) feature encountered is from a vector layer the info popup will\n * display the information of the features from all visible vector layers and located at\n * the specified coordinates.\n *\n * @param {ol.Map} map - map openlayers\n * @param {ol.Coordinate} olCoordinate - coordinates pointed by user\n * @param {Array.} gfiLayers - list of layers which can be requested through the control. Each array element is an object, with following properties :\n * @param {ol.layer.Layer} gfiLayers.obj - ol.layer.Layer layer handled by the control (that has been added to map).\n * @param {String} [gfiLayers.event] - name of the mouse event triggering getFeatureInfo on this layer (that has been added to map). allowed values are : 'singleclick', 'dblclick' and 'contextmenu'\n * @param {String} [gfiLayers.infoFormat] - indicates the format mime-type of the response of GetFeatureInfo requests.\n * @param {Object} [proxyOptions] - options for poxy configuration :\n * @param {String} [proxyOptions.proxyUrl] - Proxy URL to avoid cross-domain problems, if not already set in mapOptions. Mandatory to import WMS and WMTS layer.\n * @param {Array.} [proxyOptions.noProxyDomains] - Proxy will not be used for this list of domain names. Only use if you know what you're doing (if not already set in mapOptions).\n * @param {Object} [autoPanOptions] - Auto-pan pop-up options\n * @param {Boolean} [autoPanOptions.autoPan = true] - Specifies whether the map should auto-pan if the pop-up is rendered outside of the canvas. Defaults to true.\n * @param {Object} [autoPanOptions.autoPanAnimation] - Used to customize the auto-pan animation. See {@link https://openlayers.org/en/latest/apidoc/module-ol_Overlay.html#~PanOptions PanOptions}.\n * @param {Number} [autoPanOptions.autoPanMargin] - Margin (in pixels) between the pop-up and the border of the map when autopanning. Default is 20.\n *\n */\n displayFeatureInfo : function (map, olCoordinate, gfiLayers, proxyOptions, autoPanOptions) {\n // Layers orders\n var layersOrdered = {};\n for (var j = 0; j < gfiLayers.length; j++) {\n var layer = gfiLayers[j];\n var position = layer.obj.getZIndex();\n if (!layersOrdered[position]) {\n layersOrdered[position] = [];\n }\n layersOrdered[position].push(layer);\n }\n\n // affichage de la première popup d'informations en partant du dessus...\n var requests = [];\n // inversion de l'ordre des layers\n var positions = Object.keys(layersOrdered);\n positions.sort(function (a, b) {\n return b - a;\n });\n\n // si la 1ere couche affichable est de type vecteur on affiche les infos de toutes\n // les couches vecteur qui suivent. Par consequent, une seule requete vecteur suffit\n // (celle correspondant au premier objet vecteur rencontre)\n var foundFeature = false;\n\n for (var k = 0; k < positions.length; k++) {\n var p = positions[k];\n for (var h = 0; h < layersOrdered[p].length; ++h) {\n var l = layersOrdered[p][h].obj;\n var infoFormat = layersOrdered[p][h].infoFormat || \"text/html\";\n var minMaxResolutionOk = true;\n if (l.minResolution &&\n l.minResolution > map.getResolution()) {\n minMaxResolutionOk = false;\n }\n if (minMaxResolutionOk &&\n l.maxResolution &&\n l.maxResolution < map.getResolution()) {\n minMaxResolutionOk = false;\n }\n\n if (l.getVisible() && minMaxResolutionOk) {\n var format = this.getLayerFormat(l);\n if (format === \"vector\") {\n if (!foundFeature && this.layerGetFeatureAtCoordinates(map, l, olCoordinate)) {\n requests.push({\n format : format,\n scope : this,\n coordinate : olCoordinate\n });\n }\n continue;\n } else if (format !== \"wms\" && format !== \"wmts\") {\n logger.log(\"[ERROR] DisplayFeatureInfo - layer format '\" + format + \"' not allowed\");\n continue;\n }\n\n var _res = map.getView().getResolution();\n var _url = null;\n // INFO\n // en fonction de la version d'openlayers, la méthode est differente :\n // - getGetFeatureInfoUrl en v5\n // - getFeatureInfoUrl en v6\n if (format === \"wmts\") {\n // eslint-disable-next-line no-useless-call\n _url = l.getSource().getFeatureInfoUrl.call(l.getSource(),\n olCoordinate,\n _res,\n map.getView().getProjection(), {\n INFOFORMAT : infoFormat\n }\n );\n } else {\n // eslint-disable-next-line no-useless-call\n _url = l.getSource().getFeatureInfoUrl.call(l.getSource(),\n olCoordinate,\n _res,\n map.getView().getProjection(), {\n INFO_FORMAT : infoFormat\n }\n );\n }\n\n requests.push({\n // id : _id,\n format : infoFormat,\n url : ProxyUtils.proxifyUrl(_url, proxyOptions),\n scope : this,\n coordinate : olCoordinate\n });\n }\n }\n }\n\n // on recupere les couches vecteur ordonnees (a utiliser dans le cas de l'affichage de donnees vecteur)\n var vectorLayersOrdered = null;\n\n // call request sync\n function requestsSync (list, iterator, callback) {\n if (list.length === 0) {\n return;\n }\n var nextItemIndex = 0;\n // function report next request\n function report (displayed) {\n nextItemIndex++;\n if (displayed || nextItemIndex === list.length) {\n callback();\n } else {\n iterator(list[nextItemIndex], report);\n }\n }\n // instead of starting all the iterations, we only start the 1st one\n iterator(list[0], report);\n };\n\n var context = this;\n\n requestsSync(requests,\n function (data, report) {\n if (data.format === \"vector\") {\n if (!vectorLayersOrdered) {\n vectorLayersOrdered = [];\n for (var m = 0; m < positions.length; m++) {\n var p = positions[m];\n for (var n = 0; n < layersOrdered[p].length; ++n) {\n vectorLayersOrdered.push(layersOrdered[p][n].obj);\n }\n }\n }\n report(data.scope.displayVectorFeatureInfo(map, data.coordinate, vectorLayersOrdered, autoPanOptions));\n } else {\n // var self = data.scope;\n Gp.Protocols.XHR.call({\n url : data.url,\n method : \"GET\",\n scope : data.scope,\n // Handles GFI response\n onResponse : function (resp) {\n var exception = false;\n\n // a t on une exception ?\n // \n // \n // \n // java.lang.OutOfMemoryError: Java heap space\n // Java heap space\n // \n // \n if (resp.trim().length === 0 ||\n resp.indexOf(\"ServiceExceptionReport\") !== -1 ||\n resp.indexOf(\"java.lang.NullPointerException\") !== -1 ||\n resp.indexOf(\"java.lang.OutOfMemoryError\") !== -1 ||\n resp.indexOf(\"not queryable\") !== -1) {\n // rien à afficher\n exception = true;\n }\n\n // on affiche la popup GFI !\n var displayed = !exception && context.displayInfo(map, data.coordinate, resp, \"text/html\", autoPanOptions);\n // on reporte sur la prochaine requête...\n report(displayed);\n },\n // Handles GFI response error\n onFailure : function (error) {\n logger.log(error);\n report(false);\n }\n });\n }\n },\n function () {\n logger.trace(\"Finish sync to GFI !\");\n }\n );\n },\n\n // Function returning the clicked position of an event\n getPosition : function (e, map) {\n if (e.coordinate) {\n return e.coordinate;\n }\n\n var pixel = [0, 0];\n\n if (e.offsetX || e.offsetY) {\n pixel[0] = e.offsetX; // + document.body.scrollLeft + document.documentElement.scrollLeft;\n pixel[1] = e.offsetY; // + document.body.scrollTop + document.documentElement.scrollTop;\n } else if (e.pointerType === \"touch\") {\n // a implementer !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n // Safari iOS / iPhone en mode Touch (cf. hammer)\n var p = e.pointers[0];\n pixel[0] = p.pageX;\n pixel[1] = p.pageY;\n }\n\n var coordinate = map.getCoordinateFromPixel(pixel);\n return coordinate;\n },\n\n // onDisplayFeatureInfo\n onDisplayFeatureInfo : function (e, gfiObj) {\n if (!gfiObj.isActive()) {\n return;\n }\n\n logger.trace(e);\n\n var map = gfiObj.getMap();\n\n if (e.type === \"contextmenu\" || e.type === \"dblclick\") {\n e.preventDefault();\n } else if (e.type === \"singleclick\") {\n var interactions = map.getInteractions().getArray();\n for (var i = 0; i < interactions.length; i++) {\n if (interactions[i].getActive() &&\n (interactions[i] instanceof SelectInteraction ||\n interactions[i] instanceof ModifyInteraction ||\n interactions[i] instanceof DrawInteraction)\n ) {\n // si on a une interaction de dessin ou de sélection en cours, on ne fait rien.\n return;\n }\n }\n }\n\n var proxyOptions = {};\n if (gfiObj._proxyUrl) {\n proxyOptions.proxyUrl = gfiObj._proxyUrl;\n }\n if (gfiObj._noProxyDomains) {\n proxyOptions.noProxyDomains = gfiObj._noProxyDomains;\n }\n\n var autoPanOptions = {};\n if (gfiObj._autoPan) {\n autoPanOptions.autoPan = gfiObj._autoPan;\n }\n if (gfiObj._autoPanAnimation) {\n autoPanOptions.autoPanAnimation = gfiObj._autoPanAnimation;\n }\n if (gfiObj._autoPanMargin) {\n autoPanOptions.autoPanMargin = gfiObj._autoPanMargin;\n }\n\n var eventLayers = [];\n for (var j = 0; j < gfiObj._layers.length; ++j) {\n var event = (gfiObj._layers[j].event) ? gfiObj._layers[j].event : gfiObj._defaultEvent;\n if (event === e.type) {\n var ind = eventLayers.push(gfiObj._layers[j]) - 1;\n if (!eventLayers[ind].infoFormat) {\n eventLayers[ind].infoFormat = gfiObj._defaultInfoFormat;\n }\n }\n }\n\n var coords = this.getPosition(e, map);\n\n this.displayFeatureInfo(map, coords, eventLayers, proxyOptions, autoPanOptions);\n }\n};\n\nexport default Gfi;\n\n// Expose Gfi as ol.gp.GfiUtils (for a build bundle)\nif (window.ol) {\n if (window.ol.gp) {\n window.ol.gp.GfiUtils = Gfi;\n } else {\n window.ol.gp = {\n GfiUtils : Gfi\n };\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.format.KML;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style;","/**\n * @module ColorUtils\n * @alias module:~utils/ColorUtils\n * @description\n * ...\n *\n * @example\n * import ColorUtils from \"gpf-ext-ol/utils/ColorUtils\"\n * ou \n * import {ColorUtils} from \"gpf-ext-ol\n * \n * ColorUtils.hex();\n * ColorUtils.num();\n * ColorUtils.arrayTorgba();\n * ColorUtils.arrayToHex();\n * ColorUtils.rgbaToHex();\n * ColorUtils.hexToRgba();\n * ColorUtils.isHex();\n * ColorUtils.isRGB();\n */\nvar ColorUtils = {\n\n /**\n * Number to hex conversion\n *\n * @param {Number} number - 0-255\n * @returns {String} hex value\n */\n hex : function (number) {\n if (number > 255) {\n throw new Error(\"'\" + number + \"'' is greater than 255(0xff);\");\n }\n var str = Number(number).toString(16);\n return (\"0\" + str).slice(-2);\n },\n\n /**\n * Hexa to number conversion\n *\n * @param {*} hexa 00-FF\n * @returns {Number} number value\n */\n num : function (hexa) {\n return parseInt(hexa, 16);\n },\n\n /**\n * Converts an array ([255,255,255,1]) to rgba string\n *\n * @function arrayToRgba\n * @param {Array} values - array of values\n * @returns {String} A color of RGB or RGBA format\n */\n arrayToRgba : function (values) {\n if (!Array.isArray(values)) {\n throw new Error(\"Not an array !\");\n }\n var red = values[0];\n var green = values[1];\n var blue = values[2];\n var alpha = values[3] || 1;\n var result = \"rgba(\" + red + \", \" + green + \", \" + blue + \", \" + parseFloat(alpha) + \")\";\n return result;\n },\n\n /**\n * Converts an array ([255,255,255,1]) to #RRGGBBAA\n *\n * @function arrayToHex\n * @param {Array} values - array of values\n * @returns {Object} hex and opacity formated values\n */\n arrayToHex : function (values) {\n if (!Array.isArray(values)) {\n throw new Error(\"Not an array !\");\n }\n var red = values[0];\n var green = values[1];\n var blue = values[2];\n var alpha = values[3];\n var elems = [this.hex(red), this.hex(green), this.hex(blue)];\n var result = {};\n result.hex = \"#\" + elems.join(\"\");\n if (alpha) {\n // elems.push(hex(alpha));\n result.opacity = parseFloat(alpha);\n }\n return result;\n },\n\n /**\n * Converts rgba string to #RRGGBBAA\n * (Code adapted from : https://gist.github.com/mstssk/afda4ce9e5c335fd79cd)\n *\n * @function rgbaToHex\n * @param {String} rgba - A color of RGB or RGBA format.\n * @returns {Object} hex and opacity formated values\n */\n rgbaToHex : function (rgba) {\n var regex = /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(0?.?\\d+)\\s*)?\\)/;\n var parsed = regex.exec(rgba);\n if (!parsed) {\n throw new Error(\"Invalid format: \" + rgba);\n }\n var red = parsed[1];\n var green = parsed[2];\n var blue = parsed[3];\n var alpha = parsed[4];\n var elems = [this.hex(red), this.hex(green), this.hex(blue)];\n var result = {};\n result.hex = \"#\" + elems.join(\"\");\n if (alpha) {\n // elems.push(hex(alpha));\n result.opacity = parseFloat(alpha);\n }\n return result;\n },\n\n /**\n * Converts hex color and opacity value to rgba string.\n * (Code adapted from : http://stackoverflow.com/a/5624139)\n *\n * @function hexToRgba\n * @param {String} hex - A color value on RGB format (hexa).\n * @param {Number} opacity - A opacity value.\n * @returns {String} A color of RGB or RGBA format\n */\n hexToRgba : function (hex, opacity) {\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n if (!hex) {\n throw new Error(\"Invalid format\");\n }\n hex = hex.replace(shorthandRegex, function (m, r, g, b) {\n return r + r + g + g + b + b;\n });\n\n var rgb = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n rgb = rgb ? {\n r : parseInt(rgb[1], 16),\n g : parseInt(rgb[2], 16),\n b : parseInt(rgb[3], 16)\n } : null;\n var result = rgb ? \"rgba(\" + rgb.r + \", \" + rgb.g + \", \" + rgb.b + \", \" + opacity + \")\" : null;\n return result;\n },\n\n /**\n * Determine if value is a correct hexa color.\n * @param {*} value - hex color (#FFFFFF)\n * @returns {Boolean} True if value is a hexa color\n */\n isHex : function (value) {\n if (!value) {\n return false;\n }\n if (value.charAt(0) !== \"#\") {\n return false;\n }\n var regex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n var parsed = regex.exec(value);\n if (!parsed) {\n return false;\n }\n return true;\n },\n\n /**\n * Determine if value is a correct rgba color.\n * @param {*} value - rgba color (rgba(125,125,125,1))\n * @returns {Boolean} True if value is a rgba color\n */\n isRGB : function (value) {\n if (!value) {\n return false;\n }\n var regex = /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(0?.?\\d+)\\s*)?\\)/;\n var parsed = regex.exec(value);\n if (!parsed) {\n return false;\n }\n return true;\n }\n};\n\nexport default ColorUtils;\n","var Marker = {\n lightOrange : \"data:image/png;base64,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IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjkyYWVkNjM2LWY3MDMtNDAzOC1hNzM4LWZiYzYxYzZlMTljNCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5NWMzZWI3NC0zYWRmLTRkYzUtOWZjZS1iODQ4NTc3Nzg4ODQiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0NjI3ZDg3NC1lZDIyLTRiZTUtYTlkNS00NDlmMzVhZDIxYzgiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5Mjc4OTUzMDYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphM2U3ZWQ1MS0xNTI4LTRhYjAtODVjOS0zNzNkNzgxZGM2ZmMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjI3KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PofUkY4AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGRuA4VZTAAAFcElEQVRYw82YW2xbVRaGv7XP8bHjXByHQkNhWigdVX1AikRBMBoQ8wASl4fRqPDAAxIPKAVxeRqQRohHBEVCaoGKUBCl4qHcNKCZVKMRRQxtgTaACLRKqlwB14NzM2ni2D2XvXjgBFXQOnFiA1uy/HB89u9/7bX+vf4l1HnpK57hTNCE0AzqAS5gAAuEID5KiWSiLPf4tp7YUjcSu4yLZzdi2IJyNXANcBlwAdAKzAHTwDhwDKEPywC+GZWHbPi7IKOvZIWguAnlr8BtwJ+AxDJeDYCPgF6Ed0hkh+Weov5mZLTHJMDeBjwYk0itYJtKTOpZML3SbYNfnYz2SBr0buARYENcFytdFvga2AGyT7p14Vcjoz3ShOgdKDuAi+pUewpMIDyCypvSreWGk9HdroOEV2F4A1hfTxGJCX2D5U7U/UzuD6NaXq49NRJhBsOjwMVLEtE4gaL4W5cV3IsxPEoizDT0ZLTHcSH6M/BWLLlVwpQKuPzhb+i8sRkv04Y/e5rvPigxtnM9trKU2k0D28A5LN3RsmXbrbFOU8DtQLpqfJqu97nh6TydmzvwWpOI8VDbxqbrkmz62yk+/Ps6yoe8KkeV/hHHfgrMNyrNEkBX1SAktgRs3T7ApV1rSWayiEkDLmLSJDNZLu1ay9btAyS2BEsEuWuZ99WKyRhgHeCcn8wGw/qbOnAS3jmfOwmP9Td1kNhQDduJcUwjyciS0RJXMMkWkPPUo/z4XFxZRhZII8mEwFCsT+f5xXTE7FAOteduItVaZodyhNPVZDeKccJGkxmsChIMOvTt6aRSzIP+7A9rRKWYp29PJ8GgsyqcVauZSADaj+IDTecWvBlD4e01HKjM07XtOOuuy+A2X0BYmib/8SxfvLWRYm8LdqZaCvkI/SDBci6nld0ze7KCLa4F3gSurR4MB5x1FnMhiCeor9hJiPKmWpbGp3EU2IbJFuTe5XfStbczLxgP7K0IPcCFDWhnJoFuMAek2/oNbWdku/WxHATejT1JPZcPvINysFYiK+gAFkXTK6H+MyhXADeseJ9fmrVDM6X080/+p1M2/yFsD1zjEIauEeMAqNpQE16oaKiqwfjYeLk+fuYl10HDq7DsBTavxs8o6FzFKez/dM3rLx9LjUyVxcb7yVkfzmpXFbACJURHIxgyxkyu1ml6qL0Z4YX4xl7Jfrrgm9Ov9bX/e++x1tHCgkQ11lgELGA4sBp3iHRbH5GDwJPAFLXo6KJnDmTh/aG2w2/3t47VSGQxs1zAE9U2s9pEjx3hXuBloCa7G1rxv8o3f/7SkUz/UFFWMqGRWMpHAqsDbl00KGotIXM7MawF7gKSS5oJJRospI7v+rD96Ikp8aV2EgrkVPW4OnIy6SVL9ZubvZgyaOVyYDfwl2oNqVWiXNEb231oTe+/BrzvK9Gy01MFyoiOKzIEmqsEfjGf/39U1yHgosJFUXhlFMl+z9E/nkvhVNHZsjux+9Caf77RnyzMBaJLmW4RrWAlB3Y4Uh13HLOA4wQjo6O2IRPNxVV4JuG5Et2SSelzjtFLzsZQ0NIZ8/2rx7K9+/paxqbKvyh4Bc4AFQxzau23Dow7FS+nHmfEUz05OqINH8+evXJPJVOuE93XkY4eSziaXcQpB2b+vZNt7+/8IPPl2OxPRMJ4dDsLzIho3hpzamJ6aqJ0ei6qtZAasmZ2OS1RyOMd6egBIzSFVoKj4y1Hnvhv+8cD02ZOkEmgIKITVnXKWDs1ksvNrgbTbRSZ46cypY50aWcllIsyKXvr8GTyi9f6WvePFGVQhO8EPW2NzI+OfV2pF2bDTgbg8D/aJeVUspd1BK3/G24u7/skO3+iYP3h3LdhI/B+AGodUpo8WKwoAAAAAElFTkSuQmCC\",\n darkOrange : \"data:image/png;base64,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czpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjIxNDZjMzUzLWIxZjItNGVjOC04NzQ3LTIwMGEyYWExM2ViMyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2NGViNmI2Ni03Y2I2LTRkZGUtYTI3OS01MGY0ZWFiZGFhODAiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1ODRhM2VjZC1kNGFmLTQ3NjItYjA1ZS04ODk2MGQ4ZTk0Y2MiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5MDM3ODI2MTQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxYzNjOGRkZi1kMjVkLTQ4YzQtYTAwYS0yMmU3ZDYwMzg1YjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjAzKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PuhCAHgAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGQOTjc4FAAAFdklEQVRYw82YW2gcZRTHf+eb2dlkc9lsrFYr2notfSgWxKKiog8VvIFI9UFQEaWtYPFJfREfRRSEeqlttViLD/WGisYXrShWpfWC1WpSN5eN3cZumkuTzWY3c/mOD9lI0WSTTXbVA8M8zMz3n//5zvl/5xyhxqb3ewYvaERpAvUAFzCABUIQH6GAHyvKa76tJbbUjMRW4+LbC7GsQbgCWA+sAs4AWoA8MAxkgEMo32LoxDO98oIN/xdk9IGUYEYvRrgduAW4Gogt4NMA+BroQHkfm+qW3aP6n5HRTSYG9hZga5lEwyKWKZVJvQCmQ3bZ4F8no5skAXov8BiwspwXizUL9APPgOyVXTr5r5HRzdKI1TsRngHOqlHuKTCI8hhG3padWqw7GX3IddDwcixvAefXUkTKhH7HcBfifi8vh1E1H1cfGkGYxPI4cM68RGw5zf3y3S7IuedgeZwgTNZ1Z3Sz46LRNcA7Zcmd25yGgPWP/M7q65toTLZSHBvn6OcFDm07n6g0n9oNAxsR54DsjBYs2251QWAbgFuBREX/tF3rc9+zA6xa3U5jSxwxHmpbueyqOOvvOM7rj67g1JfedFTNagngVtR+B0zUK8xiwLqKTmhcE3Dblk4uXbecRDKFmATgIiZBIpni0nXLuW1LJ41rgnmcvG6B59WiyRhgBeDM+UZipWHthnbcmDf7b8Y81m5oJ7GyErZTxjH1JCPzesu4ghtvBpkjH2X6uXFlAVEg9SMjhEAamFsyp4Yjcuks1s6uXdZacuksU8OVZDcC0mW8OpFRQqBruvqdwwpdDh+9cjaF0QHQv/2wRhRGB6afdzkVkKZxtDoyVaqZBKCHEXygcXafjhi63l3G9tIEGzYe4ZKrksSbzmCqMEz6mzE+eedC+juaiUYqhZCPchgkqKB4SzxntqQEO7oceBu4srIzHIitsMTOBOMJ1leCkxAMmEpRWt6Vg8BGTConOxZeSVdfzmwxHmpvRtkJnFmHcuYksBkxH8tO69e1nJEd1sdhP/BBuUippfnA+3jsr5ZI9TnzV33mFcB/DuEi4LpFr/PPZu3LkanES08fOltWnxe2Ba5xCEPXiHEAVG2oMS9UNFTVINOXKdamn3nQdSC8HMMeYPVS+hkFzQdObl9m2Zu7+xt6hkKx5fXktGumdNXyZQUKiPZGkDbGnFxqp+kh9kaUHeUTezHr6WRkxt/oa/toT39Lby6QqMoci4BJDB8vpTtEdlkflf3A08AQ1ejoTM8cyeRnudYD72Zb+qokMhNZLuCJaqtZaqDLLi0i7EHYDVTV7oZW/J9PNf3wanfycLoki5nQSFnKewKrnW5NNMhtKRDlt6EsB+4G4vM2/UrUNd5w5Pl028FfiuJL9SQUyKrqEXXkaNyLF2o3N9vUYKB0AbAduKFSQWqVKFv0+rYfXdbx4aB3qqQLDk8VKCKaUSQNmi0F/ujAwB9RTYeAMwoXabg2QvZ5jl4ym8Ip6FjgDm7/bdl7bw3Ec/lItEJyWyAS0RJWsmC7I9WM45hJHCfo6e21dZlozlju3pjnSnRT0tMXHdFzT8dQ0EJoTr2eSXXs7W/uG/pnwiswBZQw5NXaYw5knJKXVY8p8VSP9vZo3cezp1v2nniDK9FD7V70RMxoaganGJmJT0+0frbtt+RPfVN/EQnLo9sxYEREB6wxxweHhwYL4/mo2kSqi43c5zRH8GS7Fz1shMZQJTg41PzVU7+2fdNZNHlBTgI5ER20qkPG2qGebHZsSTpULzJH8slCe6ywrWTlrGTM3tw9Ef/xjUzLvp6idIlwQtBxa2Sit6+/VCvMuu0MwIE726RBSqlViaDli6Gm4t6e1MQveet3Z4+F9cD7Ewo4WRJBbaaSAAAAAElFTkSuQmCC\",\n red : \"data:image/png;base64,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293bv2fa/f0ASM5yljz/NiUAAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmI5YjA2YTAwLWZkOTQtNDc5MC1hNzIzLTlkMGUwNGRiNTRlNyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1MTQ3ZGU5Yi1kOTA0LTRlNWYtYjIyYy0wZmMzOGRmMWI3ZGEiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YzBjNTI2YS1lYTkyLTQxYWItODM5Yy05OWFhYTM0YjdlYzciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE2NDAxNTU0MjYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowMjQ4MDc5ZS1kMTYyLTQxZmItOGViYS1lMzY2NTRiNGRjMjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjIwOjQwKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PkaovgIAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPFCiKn0kIAAAFfUlEQVRYw82YTWxc1RXHf+e+N2/GH+Px2IEEV02AgqIsIkwgoYS2ahepVGCBUOiCRRdsAAnECthErBBCICGFj4gqRQqBRSABUrVm1URtCSATJ5ASZCPHH0kGgx1/xJl5nvH7uIcFY4iIM/GzZyhHenqL994993/u+f/fOUeos+nNnkHCJoQWRD0UFzCARYhQCVB8NFWWTwNbT99SNxC3GZfIXg9sADYDWxCuRekEskARYQplFPgEOAr045ph6bXRzwKM3pEX5mduQLkHuAvYCqSW8GkIfAT0IBwknT8lH87o/w2M3mpSqL0LeLQKIrOMZSpVUC8hpkf6bPiTg9FbpBn0L8ATwLoqL5ZrFjgNPAeyV47p3E8GRjdLE6r3oTwHXF0n7ikwgfAEIvvlqJYbDkY3uw4a3YLyNrC2niJSBXQG4c+Ie0yORnGSj5OnRhzlUJ4ErrkikBAoAjPVe7ik4F6D8iRxlGvoyegmx4X4NwgHgM6a8fUyIfc8doZbf99Ca66N0uwF+v7tc3DnWoJK6gqep1C2g3NEjsdLlm03GXSbAe4GmmvGZ91vA3Y8P8aN6ztoyaYxxsPaNrbcnmbbvV/x9ONdnPnA+w71otaMcDfYPqDUmDQTUgjdNYPQsSHkgYf62di9mmwujzHNgIsxzWRzeTZ2r+aBh/rp2BDWDLLQjSzpf7VMMIpB6QKcy77Tuc6wdVsHbspbfJspj63bOuhcV8u3g9KFJtufWQbHakfLdQUv3YrI4qwQ+e65616Jr6mknE4KJgIGgctLZnEq5vRgAWsXLyKttZweLFCcqiW7cdVP1DgwQoQwUNPJxIDDG7vXMDszBvqjDWvM7MwYb+xew8SAUzNowgCSDEwyNVMJQU8AAdC06DvBtOG/76xirlLi3u0nufn2HJmWTir+FJ9+PMu7B66nr6eVYLpWCgUoJ0DCGoq3wv/MbXkhmlkN7Ad+XTMY4kBTl6XlKnA8IQ4U/xyUx8wlB3ZpKvcC23Hz49K79Ep6GeWM8VB7J8pfgasaUM6cAx5EzPvSZ4OGljNy1AYIh4C/L6lASWYBcBCHQ0mBJOfM94rk+WjwAsKvgN8te51LK7kPpm3zK89OrZH1v4zaQ9c4RJFrxDgAqjbSlBcpGqlqODoyWq5TP1OtnoU9wPqV9DMKWlRnfJ+/6q3XKpmhSRVbXU8uuhb6Hq1eVsBHdDiGQWPMuZV1mpuMB/aPCK8CXcsMjs6pufCm3/7PPZXs8LhKnJBjMTCH4f2VdIfIcRsgcgh4FpgkiY4u9Mwqc4fn2468M58dSQhkIbNcwBPVNrPSRJdjWgb2AK8BidrdSCX4PGw5/re53IlBK8uZ0EhVyodCq/1uXTTIzfrExZ0oq4H7gfQSmv54IMqcfNFv7/0ilkCSg1CgoKon1ZEv017ar9/cbEvGEFeuQ9mF8IdaBamFuBB7I7tKq3r+EXjnK0tPTxUoIzqqyCBooRIGM2NjX8d1HQIuKFys0cYY2eeJ3riYwinorHUndvmr3nt7Pj1eVNEa5LZALKIVrBTAnopVRx3HzOE44dDwsG3IRHPBxrtTnkv8p5yjLzvoLy72oaC+mvOvz+V79pZbRyYvJbwC80AFQ1GtPevAqFPxCuoxL57ql8ND2vDx7MVW2JTOuMQPdxDvSInmF/yU1ZT+Nd92eGcp97+RH4BE1XHHLDAtomPWmK8mpiYn/AvFOCmRGmLTm53WOOKpDhM/YqApQsLe+dYPnym1f9xvTVGQc8C4iE5Y1Ulj7eRQoTC7Ih1qFJiTQc7vwN9ZUbk6Z+ydp6L0Z2+Ws/uGrAyI8I2gF6yR0vDI6Uq9fDbsZACO3NQuGa3kr3XC7H+ClvJeP1/6IrbBqbNno0b4+xbMlmARngcRbAAAAABJRU5ErkJggg==\",\n turquoiseBlue : \"data:image/png;base64,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/MUi8H5G35QHBm+BvjV3bu1znD4AWZpV+gY4OARGS5S97vHu3u65/XunPb8fN2tyj8UDOK0AAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjEwNGNlNWFhLTE1YzctNGI4Yi1iOGU1LTFmYWQyNWFiYzBhZCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpkNDMyZTY1Zi0xOThhLTQxM2EtYWYyMy1jNzhlNzczNGRlN2QiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyNzExODVkMi03MWZiLTRhZDMtYTJmMi1iNjM3OWU3MDc1OTEiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE4NjYyMzgzMjQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NGFiYzNkYS1lZWJiLTRlZjctYjdjNS04ZDRjODY5OGVjODMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI0OjI2KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pj0tlUwAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGBru/VeEAAAABmJLR0QA/wD/AP+gvaeTAAAFO0lEQVRYw9WYe2xTVRzHTx97dYS5B1UHa+/tY12dDoOKWyIGlfgHkCkSNTHGwHxA3NiAP/A5x4CMKEzdYL29YyAyBxKQZbI+NvYIaowaH9Ogi2GRbGjcFrbBNrq2a2/9nq5LCFnbbfSOeZJPTs/t6Tm/7/39zu+cU0IiXc7WSImNX0BsZiVYAhigmah5tHklsZrjSYtJSuZtaeSiiJU3gHUwfC9oARfBIHBP1DzaPH1eRuzmp0E6aTgSNX9EWMwSvOkMGPgG+CpguG8a0H7nA78zkMYqye0V0lYXDSHrYUw7cE5TxM04/b+38+vJ+RPRt0eIjVeAAhhyCQizFDKJEBjndaCY49Di4+CRlzFxfwSE3Ciol9i4DSBujoRUy7HIszFxdwSF3CioBy8qm1g5ufhirHwyJqwHrrDGWTlg8hFL1URN2+EF0XFPkyYuSWwhUVgnT2CygXBG3dFcM7bz1/au1u7OK9/93eWidUlHe1dCc810EsUAsXOPQZCI3rGZ6Wb4EXAEM0SCUFnZduz6T/09l4bHXYOCz+f0+XxeWg+7XYM/4vnKtlqHJHSIOrAHlYMFYmawRNCKycaDGZLVfMRdf/nPDpfXM+abotDnpy93dtzXfNgdZg+im2uimJ6h66UTeIMZsrat1jvkdPRRb/imLt4hl6N3DfqFEIPvOMzDJYspJsWfbUKEyFNttcKoyzkKo4UgYoRRt3OE9guT1br984nsmQ7gCWbIipaj4xeu9v/hFQTPlG7B89+u9v9O+4UQQ8f/BSlaVM8kgBOhji4p9mpvwQ+Wfwddjp6bQw2u8g44HT3535/tTUa/0Eccvg4sFDE1m2PBZkx2LVRqVcLQvG/PDDX1/tVxze38x+UZH6O1He28b764qgwtxOcf327eBGLFE9NikiD3qzDZhVBJgCJH3KubDnkfbD4s5Jw74qM1bcvDnxq8/vHt1SrS9InIJ2m7OQ4UYsKhCB9lJqHj0gPsHJzPvsS9w8rRRPDptI40M8PlH9fOJ5M5K008rsZmIwi5gc4QN9Zja8zn+5epch9PTFepU1iGuVunVqeyS9g0iv8zy96l0WiSjIsXx28iJEJhaONkMGB5YP14bkmI1SzIz1T0pRa9VKnNzCjUMcwWUAS2BtgWYLJN+xTo1OyrOhW7xsAwqnSGkd3i+uGjkT5Xw6DLt3AdEKQNB4YXbdtwQpuVuRtG7pwhxWA7vJgRib0nDuSDvtkIkjYcHE3aVWjRLL9/zyyETPK2Vq3OidAaOhiPDLcbxo3MRIik0eReWPnO15pHHiqbpYhS6hkNw7wAz0To6GM5hAzH3wkDa6b7x4bEwnkUfMnP6idX7Nex7GxElIDNerV6hU6jSdbp9RHck2w0w/FaGGoJm7KtnCfmWNlF1fOrK3Q6bekMRFABO7QM8yxewFLUi+5JSxPpAmcxy0gjt1Rytir4NcHKCfJTH/al5j1j1hr0pWEML55YD+x2GP6cVqNZZjQYEvUsG4vP4v8jKju5L1p6qnytxGKa6qogyOorBpVbXvxMe69xdxABb9I0DAGvIIRWp7NsBsJIoWVZKfaXuf+jMKp2b6z8+Adb4aErNwpCCh5J2pnfoH0ga08g7invBfaQjXjjuQifhyEgLdNolJP5UqR17y+QnSwvk1i565OZK6F8RzubvWwvDH8LvKZnmHXY8HKws+sNLJtI5muJ/7hYElOzJ1V+fN9R7CVDClPJOVXuqo06vS4HQjTwgDKDZRXk/1JiD7wrieFLk6T1lczCXUVK7aPZinS9XrTw+Q+Tql7SUmvGuQAAAABJRU5ErkJggg==\",\n defaultOffset : [-25.5, -32]\n};\n\nexport default Marker;\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.Feature;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Style;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Circle;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Icon;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Fill;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Stroke;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Text;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.geom.Polygon;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.geom.MultiPolygon;","import Color from \"../Utils/ColorUtils\";\nimport Logger from \"../Utils/LoggerByDefault\";\nimport Markers from \"../Controls/Utils/Markers\";\n// import ol\nimport Feature from \"ol/Feature\";\n// import Style\nimport Style from \"ol/style/Style\";\nimport CircleStyle from \"ol/style/Circle\";\nimport IconStyle from \"ol/style/Icon\";\nimport FillStyle from \"ol/style/Fill\";\nimport StrokeStyle from \"ol/style/Stroke\";\nimport TextStyle from \"ol/style/Text\";\n// import geom\nimport Polygon from \"ol/geom/Polygon\";\nimport MultiPolygon from \"ol/geom/MultiPolygon\";\n\nvar logger = Logger.getLogger(\"styling\");\n\nFeature.prototype.setPropertyFill = function () {\n var style = this.getStyle();\n if (!style) {\n return;\n }\n if (Array.isArray(style) && style.length === 0) {\n return;\n }\n var fill = style.getFill();\n if (fill) {\n var colorFill = fill.getColor();\n // array\n if (Array.isArray(colorFill)) {\n var cf = \"rgba(\";\n cf += colorFill[0] + \",\";\n cf += colorFill[1] + \",\";\n cf += colorFill[2] + \",\";\n cf += colorFill[3] + \")\";\n colorFill = cf;\n }\n if (Color.isRGB(colorFill)) {\n var oColorFill = Color.rgbaToHex(colorFill);\n this.set(\"fill\", oColorFill.hex);\n this.set(\"fill-opacity\", oColorFill.opacity);\n } else {\n this.set(\"fill\", colorFill);\n this.set(\"fill-opacity\", 1);\n }\n }\n};\n\nFeature.prototype.setPropertyStroke = function () {\n var style = this.getStyle();\n if (!style) {\n return;\n }\n if (Array.isArray(style) && style.length === 0) {\n return;\n }\n var stroke = style.getStroke();\n if (stroke) {\n var colorStroke = stroke.getColor();\n // array\n if (Array.isArray(colorStroke)) {\n var cs = \"rgba(\";\n cs += colorStroke[0] + \",\";\n cs += colorStroke[1] + \",\";\n cs += colorStroke[2] + \",\";\n cs += colorStroke[3] + \")\";\n colorStroke = cs;\n }\n if (Color.isRGB(colorStroke)) {\n var oColorStroke = Color.rgbaToHex(colorStroke);\n this.set(\"stroke\", oColorStroke.hex);\n this.set(\"stroke-opacity\", oColorStroke.opacity);\n } else {\n this.set(\"stroke\", colorStroke);\n this.set(\"stroke-opacity\", 1);\n }\n this.set(\"stroke-width\", stroke.getWidth());\n }\n};\n\nFeature.prototype.setPropertyLabel = function () {\n var style = this.getStyle();\n if (!style) {\n return;\n }\n if (Array.isArray(style) && style.length === 0) {\n return;\n }\n var isName = this.get(\"name\") !== undefined;\n var label = style.getText();\n if (label && isName) {\n var fill = style.getText().getFill();\n if (fill) {\n var colorFill = fill.getColor();\n // array\n if (Array.isArray(colorFill)) {\n var cf = \"rgba(\";\n cf += colorFill[0] + \",\";\n cf += colorFill[1] + \",\";\n cf += colorFill[2] + \",\";\n cf += colorFill[3] + \")\";\n colorFill = cf;\n }\n if (Color.isRGB(colorFill)) {\n var oColorFill = Color.rgbaToHex(colorFill);\n this.set(\"label-fill\", oColorFill.hex);\n this.set(\"label-fill-opacity\", oColorFill.opacity);\n } else {\n this.set(\"label-fill\", colorFill);\n this.set(\"label-fill-opacity\", 1);\n }\n }\n var stroke = style.getText().getStroke();\n if (stroke) {\n var colorStroke = stroke.getColor();\n // array\n if (Array.isArray(colorStroke)) {\n var cs = \"rgba(\";\n cs += colorStroke[0] + \",\";\n cs += colorStroke[1] + \",\";\n cs += colorStroke[2] + \",\";\n cs += colorStroke[3] + \")\";\n colorStroke = cs;\n }\n if (Color.isRGB(colorStroke)) {\n var oColorStroke = Color.rgbaToHex(colorStroke);\n this.set(\"label-stroke\", oColorStroke.hex);\n this.set(\"label-stroke-opacity\", oColorStroke.opacity);\n } else {\n this.set(\"label-stroke\", colorStroke);\n this.set(\"label-stroke-opacity\", 1);\n }\n this.set(\"label-stroke-width\", stroke.getWidth());\n }\n this.set(\"label-font\", style.getText().getFont() || Styling.DEFAULT_TEXT.font);\n this.set(\"label-textAlign\", style.getText().getTextAlign() || Styling.DEFAULT_TEXT.textAlign);\n }\n};\n\nFeature.prototype.setPropertyMarker = function () {\n var style = this.getStyle();\n if (!style) {\n return;\n }\n if (Array.isArray(style) && style.length === 0) {\n return;\n }\n var image = style.getImage();\n if (image) {\n // si le tag image est seul...\n // c'est soit un marker ou soit un cercle !\n if (image instanceof IconStyle) {\n var color = image.getColor();\n // array\n if (Array.isArray(color)) {\n var c = \"rgba(\";\n c += color[0] + \",\";\n c += color[1] + \",\";\n c += color[2] + \",\";\n c += color[3] + \")\";\n color = c;\n }\n // feature.set(\"marker-color\", \"\"); // par defaut\n if (color) {\n var colorIcon = Color.rgbaToHex(color);\n this.set(\"marker-color\", colorIcon.hex);\n }\n var scaleIcon = image.getScale();\n switch (Math.round(scaleIcon * 2) / 2) {\n case 0:\n case 0.5:\n this.set(\"marker-size\", \"small\");\n break;\n case 1:\n this.set(\"marker-size\", \"medium\");\n break;\n case 1.5:\n case 2:\n this.set(\"marker-size\", \"large\");\n break;\n default:\n // this.set(\"marker-size\", \"\"); // par defaut\n break;\n }\n // feature.set(\"marker-symbol\", \"\"); // par defaut\n var srcImage = image.getSrc();\n if (srcImage) {\n this.set(\"marker-symbol\", srcImage);\n }\n // INFO\n // cas particulier où un objet est transformé :\n // * un cercle est transformé en icone\n // > les attributs du cercle sont à supprimer !\n this.unset(\"circle-fill\");\n this.unset(\"circle-fill-opacity\");\n this.unset(\"circle-stroke\");\n this.unset(\"circle-stroke-width\");\n this.unset(\"circle-stroke-opacity\");\n this.unset(\"circle-radius\");\n } else {\n var fillImg = image.getFill();\n if (fillImg) {\n var colorFillImg = fillImg.getColor();\n // array\n if (Array.isArray(colorFillImg)) {\n var cfi = \"rgba(\";\n cfi += colorFillImg[0] + \",\";\n cfi += colorFillImg[1] + \",\";\n cfi += colorFillImg[2] + \",\";\n cfi += colorFillImg[3] + \")\";\n colorFillImg = cfi;\n }\n if (Color.isRGB(colorFillImg)) {\n var oColorFillImg = Color.rgbaToHex(colorFillImg);\n this.set(\"circle-fill\", oColorFillImg.hex);\n this.set(\"circle-fill-opacity\", oColorFillImg.opacity);\n } else {\n this.set(\"circle-fill\", colorFillImg);\n this.set(\"circle-fill-opacity\", 1);\n }\n }\n var strokeImg = image.getStroke();\n if (strokeImg) {\n var colorStrokeImg = strokeImg.getColor();\n // array\n if (Array.isArray(colorStrokeImg)) {\n var csi = \"rgba(\";\n csi += colorStrokeImg[0] + \",\";\n csi += colorStrokeImg[1] + \",\";\n csi += colorStrokeImg[2] + \",\";\n csi += colorStrokeImg[3] + \")\";\n colorStrokeImg = csi;\n }\n if (Color.isRGB(colorStrokeImg)) {\n var oColorStrokeImg = Color.rgbaToHex(colorStrokeImg);\n this.set(\"circle-stroke\", oColorStrokeImg.hex);\n this.set(\"circle-stroke-opacity\", oColorStrokeImg.opacity);\n } else {\n this.set(\"circle-stroke\", colorStrokeImg);\n this.set(\"circle-stroke-opacity\", 1);\n }\n this.set(\"circle-stroke-width\", strokeImg.getWidth());\n }\n var radius = image.getRadius();\n this.set(\"circle-radius\", radius);\n }\n }\n};\n\n/**\n * @module Styling\n * @alias Gp.Styling\n * @private\n * @todo ...\n * @description\n * A simple specification for styling GeoJSON / GPX / KML data.\n *\n * @see ol.format.GeoJSONExtended\n * @see ol.format.KMLExtended\n * @see ol.format.GPXExtended\n *\n * @example\n * feature.getStyle(); // null\n * feature.getProperties(); // {\"stroke\": \"#ff0000\", \"stroke-width\": 2}\n * Styling.defineStyleFromProperties(feature);\n * feature.getStyle(); // [Object Style]\n *\n * feature.getStyle(); // [Object Style]\n * feature.getProperties(); // {}\n * Styling.definePropertiesFromStyle(feature);\n * feature.getProperties(); // {\"stroke\": \"#ff0000\", \"stroke-width\": 2}\n *\n * var style = feature.getStyle(); // [Object Style]\n * var tag = Styling.setTag(style, \"GPX\");\n *\n * ex. output GeoJSON:\n * ```json\n * \"properties\": {\n * \"stroke\": \"#ff0000\",\n * \"stroke-width\": 2\n * }\n * ```\n */\nvar Styling = {\n\n /**\n * Options to convert geometry\n */\n APPLY_CONVERT_GEOM_GPX : true,\n\n /**\n * Default icon style options\n */\n DEFAULT_ICON : {\n src : Markers[\"lightOrange\"],\n anchor : [0.5, 1],\n scale : 1\n },\n\n /**\n * Default circle style options\n */\n DEFAULT_CIRCLE : {\n radius : 10,\n fill : {\n opacity : 1,\n color : [0, 0, 0, 1]\n },\n stroke : {\n width : 1,\n opacity : 1,\n color : [0, 0, 0, 1]\n }\n },\n\n /**\n * Default stroke style options\n */\n DEFAULT_STROKE : {\n width : 5,\n opacity : 1,\n color : [250, 250, 250, 1]\n },\n\n /**\n * Default fill style options\n */\n DEFAULT_FILL : {\n opacity : 1,\n color : [0, 0, 0, 1]\n },\n\n /**\n * Default text style options\n * @see https://openlayers.org/en/v6.15.1/apidoc/module-ol_style_Text-Text.html\n */\n DEFAULT_TEXT : {\n font : \"16px sans\",\n textAlign : \"left\",\n stroke : {\n color : [250, 250, 250, 1],\n width : 5,\n opactity : 1\n },\n fill : {\n opacity : 1,\n color : [0, 0, 0, 1]\n }\n // offsetX\n // offsetY\n // placement\n // scale\n // rotation\n // justify\n // padding\n },\n\n /**\n * All styling tags\n * @function getListTags\n * @returns {Array} all styling tags\n * @example\n * \"type\", // type de geometrie\n * \"fill\",\n * \"fill-opacity\",\n * \"stroke\",\n * \"stroke-opacity\",\n * \"stroke-width\",\n * \"circle-fill\",\n * \"circle-fill-opacity\",\n * \"circle-stroke\",\n * \"circle-stroke-opacity\",\n * \"circle-stroke-width\",\n * \"circle-radius\",\n * \"marker-symbol\",\n * \"marker-color\",\n * \"marker-size\"\n */\n getListTags : function () {\n return [\n \"type\",\n \"fill\",\n \"fill-opacity\",\n \"stroke\",\n \"stroke-opacity\",\n \"stroke-width\",\n \"circle-fill\",\n \"circle-fill-opacity\",\n \"circle-stroke\",\n \"circle-stroke-opacity\",\n \"circle-stroke-width\",\n \"circle-radius\",\n \"marker-symbol\",\n \"marker-color\",\n \"marker-size\",\n \"label-fill\",\n \"label-fill-opacity\",\n \"label-stroke\",\n \"label-stroke-width\",\n \"label-stroke-opacity\",\n \"label-font\",\n \"label-textAlign\"\n ];\n },\n\n /**\n * Transform feature properties to a native style\n *\n * @function defineStyleFromProperties\n * @param {*} feature - ...\n * @returns {*} style - ...\n * @public\n *\n * @description\n * A la lecture du format :\n * > tag styling ---> feature properties ---> feature style\n *\n * Les balises de 'styling' du fichier sont ajoutées dans les properties de chaque features\n * (opération native sous OpenLayers):\n *\n * Ex. avec le format GeoJSON :\n * ```json\n * \"properties\": {\n * \"stroke\": \"#000000\", -> feature.get(\"stroke\");\n * \"stroke-width\": 13, -> feature.get(\"stroke-width\");\n * \"stroke-opacity\": 0.8, -> feature.get(\"stroke-opacity\");\n * \"fill\": \"#a03737\", -> feature.get(\"fill\");\n * \"fill-opacity\": 0.5 -> feature.get(\"fill-opacity\");\n * }\n * ```\n *\n * Ensuite, les properties des features sont transformées dans le style natif :\n *\n * ```js\n * // Ex.\n * feature.setStyle(new Style({\n * fill : new FillStyle({\n * color : Color.hexToRgba(feature.get(\"fill\"), feature.get(\"fill-opacity\") || 1)\n * }),\n * stroke : new StrokeStyle({\n * color : Color.hexToRgba(feature.get(\"stroke\"), feature.get(\"stroke-opacity\"))\n * width : feature.get(\"stroke-width\")\n * })\n * }));\n * ```\n */\n defineStyleFromProperties : function (feature) {\n // style\n var style = null;\n\n // les options de styles définis dans le format\n var options = {};\n\n // properties :\n // \"marker-size\" -> icon\n // \"marker-symbol\" -> icon\n // \"marker-color\" -> icon\n var marker = null;\n if (feature.get(\"marker-color\") ||\n feature.get(\"marker-size\") ||\n feature.get(\"marker-symbol\")) {\n marker = {};\n // icone par defaut\n marker[\"src\"] = this.DEFAULT_ICON.src;\n marker[\"anchor\"] = this.DEFAULT_ICON.anchor;\n var symbolMarker = feature.get(\"marker-symbol\");\n if (symbolMarker) {\n if (symbolMarker.search(\"data:image/png;base64\") !== -1) {\n // icone du portail\n marker[\"src\"] = symbolMarker;\n } else {\n // TODO\n // utiliser les symboles de Maki\n // (cf. https://labs.mapbox.com/maki-icons/)\n }\n }\n var colorMarker = feature.get(\"marker-color\");\n if (Color.isHex(colorMarker)) {\n marker[\"color\"] = Color.hexToRgba(colorMarker, 1);\n }\n var size = feature.get(\"marker-size\");\n if (size) {\n switch (size) {\n case \"small\":\n marker[\"scale\"] = 0.5;\n break;\n case \"medium\":\n marker[\"scale\"] = 1;\n break;\n case \"large\":\n marker[\"scale\"] = 1.5;\n break;\n default:\n marker[\"scale\"] = this.DEFAULT_ICON.scale;\n break;\n }\n }\n }\n\n // properties :\n // \"stroke\" -> line / polygon\n // \"stroke-opacity\" -> line / polygon\n // \"stroke-width\" -> line / polygon\n var stroke = null;\n if (feature.get(\"stroke\") ||\n feature.get(\"stroke-opacity\") ||\n feature.get(\"stroke-width\")) {\n stroke = {};\n stroke[\"color\"] = Color.hexToRgba(feature.get(\"stroke\"), +feature.get(\"stroke-opacity\") || this.DEFAULT_STROKE.opacity);\n stroke[\"width\"] = +feature.get(\"stroke-width\") || this.DEFAULT_STROKE.width;\n }\n\n // properties :\n // \"fill\" -> polygon\n // \"fill-opacity\" -> polygon\n var fill = null;\n if (feature.get(\"fill\") ||\n feature.get(\"fill-opacity\")) {\n fill = {};\n fill[\"color\"] = Color.hexToRgba(feature.get(\"fill\"), +feature.get(\"fill-opacity\") || this.DEFAULT_FILL.opacity);\n }\n\n // properties :\n // \"label-fill\",\n // \"label-fill-opacity\",\n // \"label-stroke\",\n // \"label-stroke-width\",\n // \"label-stroke-opacity\",\n // \"label-font\",\n // \"label-textAlign\"\n // \"name\" -> text\n var labelStroke = null;\n var labelFill = null;\n var isLabel = feature.get(\"name\") !== \"\";\n if (isLabel) {\n if (feature.get(\"label-fill\") ||\n feature.get(\"label-fill-opacity\")) {\n labelFill = {};\n labelFill[\"color\"] = Color.hexToRgba(feature.get(\"label-fill\"), +feature.get(\"label-fill-opacity\") || this.DEFAULT_TEXT.fill.opacity);\n }\n if (feature.get(\"label-stroke\") ||\n feature.get(\"label-stroke-opacity\") ||\n feature.get(\"label-stroke-width\")) {\n labelStroke = {};\n labelStroke[\"color\"] = Color.hexToRgba(feature.get(\"label-stroke\"), +feature.get(\"label-stroke-opacity\") || this.DEFAULT_TEXT.stroke.opacity);\n labelStroke[\"width\"] = +feature.get(\"label-stroke-width\") || this.DEFAULT_TEXT.stroke.width;\n }\n }\n\n // properties :\n // \"circle-fill\"\n // \"circle-stroke\"\n // \"circle-stroke-width\"\n // \"circle-radius\"\n var circleRadius = feature.get(\"circle-radius\") || this.DEFAULT_CIRCLE.radius;\n var circleStroke = null;\n if (feature.get(\"circle-stroke\") ||\n feature.get(\"circle-stroke-opacity\") ||\n feature.get(\"circle-stroke-width\")) {\n circleStroke = {};\n circleStroke[\"color\"] = Color.hexToRgba(feature.get(\"circle-stroke\"), +feature.get(\"circle-stroke-opacity\") || this.DEFAULT_CIRCLE.stroke.opacity);\n circleStroke[\"width\"] = +feature.get(\"circle-stroke-width\") || this.DEFAULT_CIRCLE.stroke.width;\n }\n var circleFill = null;\n if (feature.get(\"circle-fill\") ||\n feature.get(\"circle-fill-opacity\")) {\n circleFill = {};\n circleFill[\"color\"] = Color.hexToRgba(feature.get(\"circle-fill\"), +feature.get(\"circle-fill-opacity\") || this.DEFAULT_CIRCLE.fill.opacity);\n }\n\n // options du Style en fonction du type de geometrie\n if (feature.getGeometry()) {\n var type = feature.getGeometry().getType();\n switch (type) {\n case \"Circle\":\n case \"Point\":\n case \"MultiPoint\":\n // Cercle\n var isCircle = false;\n var optionsCircle = {};\n if (circleStroke) {\n optionsCircle[\"stroke\"] = new StrokeStyle(circleStroke);\n }\n if (circleFill) {\n optionsCircle[\"fill\"] = new FillStyle(circleFill);\n }\n if (Object.keys(optionsCircle).length !== 0) {\n isCircle = true;\n optionsCircle[\"radius\"] = +circleRadius; // Conversion en nombre\n options[\"image\"] = new CircleStyle(optionsCircle);\n }\n // Ponctuel\n if (marker) {\n options[\"image\"] = new IconStyle(marker);\n }\n // Label\n if (isLabel) {\n var optionsText = {};\n \n if (labelStroke) {\n optionsText[\"stroke\"] = new StrokeStyle(labelStroke);\n }\n if (labelFill) {\n optionsText[\"fill\"] = new FillStyle(labelFill);\n }\n if (Object.keys(optionsText).length !== 0) {\n optionsText[\"text\"] = feature.get(\"name\");\n optionsText[\"textAlign\"] = feature.get(\"label-textAlign\") || this.DEFAULT_TEXT.textAlign;\n optionsText[\"font\"] = feature.get(\"label-font\") || this.DEFAULT_TEXT.font;\n options[\"text\"] = new TextStyle(\n Object.assign({},\n this.DEFAULT_TEXT,\n optionsText\n ));\n } else {\n // on applique un style par defaut sur le label\n // pour un marker ou un cercle\n if (marker || isCircle) {\n var styleText = new TextStyle(\n Object.assign({},\n this.DEFAULT_TEXT, {\n fill : new FillStyle(this.DEFAULT_TEXT.fill),\n stroke : new StrokeStyle(this.DEFAULT_TEXT.stroke)\n }\n )\n );\n if (styleText) {\n var cloneStyleText = styleText.clone();\n cloneStyleText.setText(feature.get(\"name\"));\n options[\"text\"] = cloneStyleText;\n }\n }\n }\n }\n break;\n \n case \"Polygon\":\n case \"MultiPolygon\":\n if (stroke) {\n options[\"stroke\"] = new StrokeStyle(stroke);\n }\n if (fill) {\n options[\"fill\"] = new FillStyle(fill);\n }\n break;\n \n case \"LineString\":\n case \"MultiLineString\":\n if (stroke) {\n options[\"stroke\"] = new StrokeStyle(stroke);\n }\n if (this.APPLY_CONVERT_GEOM_GPX && fill) {\n // INFO\n // Lors d'une transformation de type de geometrie, le type est renseigné.\n // Pour le format GPX,\n // -> on transforme une surface vers ligne lors de l'écriture\n // -> on transforme une ligne vers une surface lors de la lecture si le type est précisé !\n var initType = feature.get(\"type\");\n if (initType && (initType === \"Polygon\" || initType === \"MultiPolygon\")) {\n options[\"fill\"] = new FillStyle(fill);\n var f = feature.clone();\n var ClassPoly = (type === \"LineString\") ? Polygon : MultiPolygon;\n feature.setGeometry(new ClassPoly([f.getGeometry().getCoordinates()]));\n }\n }\n break;\n \n default:\n break;\n }\n }\n\n // si aucun style disponible, on utilisera le style par defaut defini\n // par l'utilisateur ou l'application\n if (Object.keys(options).length !== 0) {\n style = new Style(options);\n }\n\n return style;\n },\n\n /**\n * Define a default style function to apply to a feature\n *\n * @function defineStyleFunctionByDefault\n * @param {Object} defaultStyle - ...\n * @returns {Function} style function\n * @public\n *\n * @description\n * ...\n */\n defineStyleFunctionByDefault : function (defaultStyle) {\n if (!defaultStyle) {\n return [];\n }\n\n if (Object.keys(defaultStyle).length === 0) {\n return [];\n }\n\n // les styles par defaut\n var styleFunction = (feature, resolution) => {\n if (feature.getGeometry()) {\n var style = null;\n var type = feature.getGeometry().getType();\n switch (type) {\n case \"Point\":\n case \"MultiPoint\":\n // on n'a aucune information sur le type de style à appliquer sur un \"Point\" :\n // * label ou\n // * marker ou\n // * marker avec label\n // donc, c'est en fonction des styles par defaut...\n var opts = {};\n if (defaultStyle.getImage()) {\n opts[\"image\"] = defaultStyle.getImage();\n }\n if (defaultStyle.getText() && feature.get(\"name\")) {\n var styleText = defaultStyle.getText().clone();\n styleText.setText(feature.get(\"name\"));\n opts[\"text\"] = styleText;\n }\n style = new Style(opts);\n break;\n case \"Circle\":\n var optsc = {};\n \n var optsCircle = {};\n if (defaultStyle.getFill()) {\n optsCircle.fill = defaultStyle.getFill();\n }\n if (defaultStyle.getStroke()) {\n optsCircle.stroke = defaultStyle.getStroke();\n }\n if (defaultStyle.getText() && feature.get(\"name\")) {\n var styleTextCircle = defaultStyle.getText().clone();\n styleTextCircle.setText(feature.get(\"name\"));\n optsc.text = styleTextCircle;\n }\n if (Object.keys(optsCircle).length !== 0) {\n // FIXME param radius ?\n optsCircle.radius = 3;\n optsc.image = new CircleStyle(optsCircle);\n }\n style = new Style(optsc);\n break;\n case \"Polygon\":\n case \"MultiPolygon\":\n var optsp = {};\n if (defaultStyle.getFill()) {\n optsp.fill = defaultStyle.getFill();\n }\n if (defaultStyle.getStroke()) {\n optsp.stroke = defaultStyle.getStroke();\n }\n style = new Style(optsp);\n break;\n case \"LineString\":\n case \"LinearRing\":\n case \"MultiLineString\":\n var optsl = {};\n if (defaultStyle.getStroke()) {\n optsl.stroke = defaultStyle.getStroke();\n }\n style = new Style(optsl);\n break;\n }\n return [style];\n }\n };\n return styleFunction;\n },\n\n /**\n * Transform a native style to feature properties by type of geometry\n *\n * @todo not yet implemented !\n * @param {*} feature - feature\n */\n definePropertiesFromStyleByType : function (feature) {\n if (feature.getGeometry()) {\n var geomType = feature.getGeometry().getType();\n switch (geomType) {\n case \"Point\":\n case \"MultiPoint\":\n feature.setPropertyMarker();\n feature.setPropertyLabel();\n break;\n case \"LineString\":\n case \"MultiLineString\":\n feature.setPropertyStroke();\n break;\n case \"Polygon\":\n case \"MultiPolygon\":\n feature.setPropertyStroke();\n feature.setPropertyFill();\n break;\n default:\n break;\n }\n }\n },\n\n /**\n * Transform a native style to feature properties\n *\n * @function definePropertiesFromStyle\n * @param {*} feature - ...\n * @public\n *\n * @description\n * A l'écriture du format.\n * > feature style --> feature properties --> tag styling\n *\n * Le style natif est récupéré pour chaque feature :\n *\n * ```js\n * // Ex.\n * var style = feature.getStyle();\n * ```\n *\n * Ensuite, le style natif est transformé en properties pour chaque feature :\n *\n * ```js\n * // Ex.\n * var stroke = style.getStroke();\n * var oColorStroke = Color.rgbaToHex(stroke.getColor());\n * feature.set(\"stroke\", oColorStroke.hex); // #000000\n * feature.set(\"stroke-opacity\", oColorStroke.opacity); // 0.8\n * ```\n *\n * Et, chaque properties des features sont ecrites dans le format du fichier\n * (opération native sous OpenLayers) :\n *\n * Ex. avec le format GeoJSON :\n * ```json\n * \"properties\": {\n * \"stroke\": \"#000000\",\n * \"stroke-opacity\": 0.8\n * }\n * ```\n */\n definePropertiesFromStyle : function (feature) {\n var style = feature.getStyle() || feature.getStyleFunction();\n if (style) {\n // style ajouté via une fonction, pour les styles par defaut par ex.\n if (typeof style === \"function\") {\n var styles = style.call(this, feature, 0);\n if (styles && styles.length !== 0) {\n style = (Array.isArray(styles)) ? styles[0] : styles;\n feature.setStyle(style);\n } else {\n // au cas où...\n return;\n }\n }\n this.definePropertiesFromStyleByType(feature);\n }\n },\n\n /**\n * Transform a native style to tags 'styling' into the format\n *\n * @function defineTagFromStyle\n * @param {*} style - ...\n * @param {String} format - ...\n * @returns {String} tags stringify into the format (json / xml)\n * @todo\n * @public\n *\n * @description\n * A partir d'un style natif, on le transforme en balise de 'styling' dans le format demandé,\n * que l'on peut ensuite inserer dans le fichier.\n * > style ---> tag styling\n *\n */\n defineTagFromStyle : function (style, format) {\n logger.trace(\"todo...\");\n return null;\n }\n};\n\nexport default Styling;\n","import Logger from \"./LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"parser\");\n\n/**\n* @module Parser\n* @alias module:~utils/Parser\n* @description\n* ...\n*\n* @example\n* parse();\n* toString();\n*/\nvar Parser = {\n\n /**\n * ...\n *\n * @param {String} xml - XML string\n * @returns {DOMElement} doc\n */\n parse : function (xml) {\n var doc = null;\n var parser = null;\n var scope = typeof window !== \"undefined\" ? window : null;\n\n if (typeof exports === \"object\" && window === null) {\n // code for nodejs\n var DOMParser = require(\"@xmldom/xmldom\").DOMParser;\n parser = new DOMParser();\n doc = parser.parseFromString(xml, \"text/xml\");\n } else if (scope.DOMParser) {\n // code for modern browsers\n parser = new scope.DOMParser();\n doc = parser.parseFromString(xml, \"text/xml\");\n } else if (scope.ActiveXObject) {\n // code for old IE browsers\n doc = new scope.ActiveXObject(\"Microsoft.XMLDOM\");\n doc.async = false;\n doc.loadXML(xml);\n } else {\n logger.log(\"Incompatible environment for DOM Parser !\");\n }\n\n var errorNode = doc.querySelector(\"parsererror\");\n if (errorNode) {\n // INFO parsing failed\n // eslint-disable-next-line no-console\n console.error(errorNode);\n return null;\n }\n\n logger.trace(doc);\n return doc;\n },\n\n /**\n * ...\n *\n * @param {DOMElement} doc - doc\n * @returns {String} XML string\n */\n toString : function (doc) {\n // TODO\n // try catch pour les exceptions !\n // cf. https://developer.mozilla.org/en-US/docs/Web/API/XMLSerializer/serializeToString\n var oSerializer = new XMLSerializer();\n var xml = oSerializer.serializeToString(doc);\n\n logger.trace(xml);\n return xml;\n },\n\n /**\n * ...\n * cf. https://stackoverflow.com/questions/376373/pretty-printing-xml-with-javascript/\n *\n * @param {String} xml - XML string\n * @returns {String} XML string formatted\n */\n format : function (xml) {\n var reg = /(>)\\s*(<)(\\/*)/g; // updated Mar 30, 2015\n var wsexp = / *(.*) +\\n/g;\n var contexp = /(<.+>)(.+\\n)/g;\n xml = xml.replace(reg, \"$1\\n$2$3\").replace(wsexp, \"$1\\n\").replace(contexp, \"$1\\n$2\");\n var formatted = \"\";\n var lines = xml.split(\"\\n\");\n var indent = 0;\n var lastType = \"other\";\n // 4 types of tags - single, closing, opening, other (text, doctype, comment) - 4*4 = 16 transitions\n var transitions = {\n \"single->single\" : 0,\n \"single->closing\" : -1,\n \"single->opening\" : 0,\n \"single->other\" : 0,\n \"closing->single\" : 0,\n \"closing->closing\" : -1,\n \"closing->opening\" : 0,\n \"closing->other\" : 0,\n \"opening->single\" : 1,\n \"opening->closing\" : 0,\n \"opening->opening\" : 1,\n \"opening->other\" : 1,\n \"other->single\" : 0,\n \"other->closing\" : -1,\n \"other->opening\" : 0,\n \"other->other\" : 0\n };\n\n for (var i = 0; i < lines.length; i++) {\n var ln = lines[i];\n var single = Boolean(ln.match(/<.+\\/>/)); // is this line a single tag? ex.
\n var closing = Boolean(ln.match(/<\\/.+>/)); // is this a closing tag? ex. \n var opening = Boolean(ln.match(/<[^!].*>/)); // is this even a tag (that's not )\n var type = single ? \"single\" : closing ? \"closing\" : opening ? \"opening\" : \"other\";\n var fromTo = lastType + \"->\" + type;\n lastType = type;\n var padding = \"\";\n\n indent += transitions[fromTo];\n for (var j = 0; j < indent; j++) {\n padding += \"\\t\";\n }\n if (fromTo === \"opening->closing\") {\n formatted = formatted.substr(0, formatted.length - 1) + ln + \"\\n\"; // substr removes line break (\\n) from prev loop\n } else {\n formatted += padding + ln + \"\\n\";\n }\n }\n\n logger.trace(formatted);\n return formatted;\n }\n};\n\nexport default Parser;\n","/**\n* @module Helper\n* @alias module:~utils/HelperUtils\n* @description\n* ...\n*\n* @example\n* import HelperUtils from \"gpf-ext-ol/utils/HelperUtils\"\n* ou \n* import {HelperUtils} from \"gpf-ext-ol\n* \n* HelperUtils.detectSupport();\n* HelperUtils.assign();\n* HelperUtils.mergeParams();\n*/\nvar Helper = {\n\n /**\n * this method is called by the constructor.\n * this information is useful to switch to touch mode.\n * Detection : test for desktop or tactile\n *\n * @function detectSupport\n * @returns {Boolean} isDesktop - true for desktop userAgent, false for mobile\n */\n detectSupport : function () {\n var isDesktop = true;\n var userAgent = window.navigator.userAgent.toLowerCase();\n\n if (userAgent.indexOf(\"iphone\") !== -1 ||\n userAgent.indexOf(\"ipod\") !== -1 ||\n userAgent.indexOf(\"ipad\") !== -1 ||\n userAgent.indexOf(\"android\") !== -1 ||\n userAgent.indexOf(\"mobile\") !== -1 ||\n userAgent.indexOf(\"blackberry\") !== -1 ||\n userAgent.indexOf(\"tablet\") !== -1 ||\n userAgent.indexOf(\"phone\") !== -1 ||\n userAgent.indexOf(\"touch\") !== -1) {\n isDesktop = false;\n }\n\n if (userAgent.indexOf(\"msie\") !== -1 ||\n userAgent.indexOf(\"trident\") !== -1) {\n isDesktop = true;\n }\n\n return isDesktop;\n },\n\n /**\n * Copies all source object members to dest\n *\n * @function assign\n * @param {Object} dest - destination object where properties and method will be copied\n * @param {Object} source - source object from which properties and method will be copied\n * @returns {Object} dest\n */\n assign : function (dest, source) {\n dest = dest || {};\n for (var prop in source) {\n if (source.hasOwnProperty(prop)) {\n dest[prop] = source[prop];\n }\n }\n return dest;\n },\n\n /**\n * Merge two objects parameters (deeper than assign)\n *\n * @function mergeParams\n * @param {Object} dest - destination object where properties and method will be merge\n * @param {Object} source - source object from which properties and method will be merge\n * @param {Boolean} replace - replace destination value by source if exists or not (true by default)\n */\n mergeParams : function (dest, source, replace) {\n if (typeof dest === \"undefined\" || typeof source === \"undefined\") {\n return;\n }\n if (typeof replace === \"undefined\") {\n replace = true;\n }\n for (var param in source) {\n if (source.hasOwnProperty(param)) {\n if (typeof source[param] === \"object\") {\n if (dest.hasOwnProperty(param)) {\n this.mergeParams(dest[param], source[param], replace);\n } else {\n dest[param] = source[param];\n }\n } else {\n if (dest.hasOwnProperty(param)) {\n if (replace) {\n dest[param] = source[param];\n }\n } else {\n dest[param] = source[param];\n }\n }\n }\n }\n }\n};\n\nexport default Helper;\n","// import openlayers\nimport olKML from \"ol/format/KML\";\nimport {\n Fill,\n Icon,\n Stroke,\n Style,\n Text,\n Circle\n} from \"ol/style\";\n// import local\nimport Styling from \"./Styling\";\nimport Color from \"../Utils/ColorUtils\";\nimport Logger from \"../Utils/LoggerByDefault\";\nimport Parser from \"../Utils/Parser\";\nimport Utils from \"../Utils/Helper\";\n\nvar logger = Logger.getLogger(\"extended KML format\");\n\n/**\n * @classdesc\n *\n * Extended Styles KML format to export (internal use only !)\n *\n * INFO\n * only ol.Control is a user-extendable class.\n * Everything else requires integration with the original openlayers source and a new ol.js\n * to be built with your new classes incorporated.\n *\n * SPEC\n * cf. https://developers.google.com/kml/forum/advanced\n *\n * ISSUES\n * cf. https://github.com/openlayers/openlayers/issues/4829\n * cf. https://github.com/openlayers/openlayers/issues/4460\n * cf. https://github.com/openlayers/openlayers/pull/5590\n * cf. https://github.com/openlayers/openlayers/issues/5229\n * cf. https://github.com/openlayers/openlayers/issues/3371\n *\n * @constructor\n * @alias ol.format.KMLExtended\n * @type {ol.format.KMLExtended}\n * @extends {ol.format.KML}\n * @param {Object} options - Options\n * @param {Object} [options.extensions] - Add properties to file root\n */\nvar KML = class KML extends olKML {\n\n /**\n * See {@link ol.format.KMLExtended}\n * @module KMLExtended\n * @alias module:~formats/KMLExtended\n * @param {*} options - options\n * @example\n * import KMLExtended from \"gpf-ext-ol/formats/KMLExtended\"\n * ou \n * import { KMLExtended } from \"gpf-ext-ol\"\n */\n constructor (options) {\n super(options);\n\n if (!(this instanceof KML)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n options = options || {};\n\n // INFO\n // source DOM (Document ou Node)\n this.source = null;\n\n // INFO\n // gestion des extensions\n this.extensions = options.extensions || null;\n\n // INFO\n // defaultStyle est un tableau d'objet de type Style\n if (options.defaultStyle && !Array.isArray(options.defaultStyle)) {\n options.defaultStyle = [options.defaultStyle];\n }\n\n if (options.defaultStyle === null || typeof options.defaultStyle === \"undefined\") {\n options.defaultStyle = [];\n }\n\n return this;\n }\n\n /**\n *\n * En lecture, on surcharge la méthode readFeatures.\n * ✔️ In : kml string + features du format original\n * ✔️ Out : features étendus avec des styles, et des metadatas (name ou extendData)\n * > on modifie les features du format original avec les fonctionnalités non gérées.\n *\n * En écriture, on surcharge la méthode writeFearures.\n * ✔️ In : kml du format original + features étendus\n * ✔️ Out : kml étendu avec des styles, et des metadatas (name ou extendData)\n * > on modifie le kml généré par le format original avec les fonctionnalités que nous avons ajoutées aux features.\n *\n * Le principe\n * On parse le kml, et on lit (get) ou on ajoute (set) des fonctionnalités.\n *\n * Les getters vont lire le kml (ex. LabelExtendStyle), et ajouter le style ainsi que le nom du label dans le feature original.\n * getLabelIconStyle (appel des 2 fonctions suivantes)\n * getLabelExtendStyle (New)\n * getHotSpotIconStyle (Bug sur la lecture du hotspot)\n * getExtendData (New)\n *\n * Les setters vont écrire dans le dom du kml original les fonctionnalités ajoutées dans les features.\n * setLabelExtendStyle (New)\n * setHotSpotIconStyle (Bug sur l'écriture du hotspot)\n * setNameData (Bug suppression de cette balise du format par défaut).\n *\n */\n\n /**\n * Fonction de lecture du KML avec fonction de traitement en fonction du type\n * PlaceMark (Label ou Marker).\n * Les traitements sont de 2 types :\n * - creation de styles étendus ou correctifs sur le KML\n * - ajout de styles étendus sur les features\n *\n * @param {DOMElement} kmlNode - kml nodes\n * @param {Object[]} features - features\n * @param {Object} process - process\n *\n * @example\n * // ajoute des fonctionnalités dans le KML\n * _processKml(kmlDoc, {\n * labelStyle : createStyleLabel,\n * iconStyle : createStyleIcon\n * });\n *\n * // lit des fonctionnalités du KML non impl. par OpenLayers\n * _processKml(kmlNode, {\n * labelStyle : getStyleToFeatureLabel,\n * iconStyle : getStyleToFeatureIcon,\n * extendedData : getExtendedData\n * });\n */\n _processKml (kmlNode, features, process) {\n var firstNodeLevel = (kmlNode.nodeName === \"#document\") ? kmlNode.childNodes[0].childNodes : kmlNode.childNodes;\n\n // Si le DOM contient un seul objet, le noeud est directement un PlaceMark\n // sinon, c'est un ensemble de noeuds PlaceMark contenus dans le noeud Document.\n var nodes = firstNodeLevel;\n for (var ik = 0; ik < firstNodeLevel.length; ik++) {\n const element = firstNodeLevel[ik];\n if (element.nodeName === \"Document\") {\n nodes = element.childNodes;\n break;\n }\n if (element.nodeName === \"Placemark\") {\n nodes = [element];\n break;\n }\n }\n\n // On recherche les PlaceMark de type Point ayant un Style...\n // Le style peut être placé directement dans le PlaceMark\n // ou lié avec un id (share)\n var stylesUrl = {}; // listes des styles\n var index = -1; // index du features...\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n switch (node.nodeName) {\n case \"Style\":\n // INFO\n // pour le traitement des balises Styles liées avec styleUrl,\n // elles doivent être toujours déclarées avant les PlaceMark !\n // On ne prend en compte que celles qui sont identifiées via un ID !\n var id = node.attributes[0];\n if (id && id.nodeName === \"id\") {\n var _k = id.nodeValue;\n var _v = node;\n stylesUrl[_k] = _v;\n }\n break;\n\n case \"Placemark\":\n\n index++;\n var types = node.childNodes; // Point, LineString, Polygon, Style, ...\n var point = false;\n var line = false;\n var poly = false;\n var domStyles = null; // dom\n var hdlDomStyle = null; // dom\n var domExtendedData = null; // dom\n var domNameTag = node; // dom\n for (var j = 0; j < types.length; j++) {\n switch (types[j].nodeName) {\n case \"Polygon\":\n poly = true;\n break;\n case \"LineString\":\n line = true;\n break;\n case \"Point\":\n point = true;\n break;\n case \"Style\":\n hdlDomStyle = types[j];\n domStyles = types[j].childNodes; // liste de styles\n break;\n case \"styleUrl\":\n // style avec lien vers...\n var _idStyle = types[j].textContent.slice(1);\n if (stylesUrl[_idStyle]) {\n domStyles = stylesUrl[_idStyle].childNodes;\n }\n break;\n case \"ExtendedData\":\n domExtendedData = types[j].childNodes;\n break;\n case \"name\":\n domNameTag = null;\n break;\n default:\n // on ne traite pas les autres informations ...\n // car elles seront gérées par defaut par le format standard...\n }\n }\n\n // On traite les balises kml:extendedData pour tous les objets !\n if (domExtendedData) {\n logger.log(\"ExtendedData :\", domExtendedData);\n var fctExtend = process.extendedData;\n if (fctExtend && typeof fctExtend === \"function\") {\n fctExtend(features[index], domExtendedData);\n }\n }\n\n // On traite la balise kml:name\n if (domNameTag) {\n logger.log(\"Name :\", domNameTag);\n var fctName = process.nameData;\n if (fctName && typeof fctName === \"function\") {\n fctName(features[index], domNameTag);\n }\n }\n\n // On a un Marker avec un Style.\n // Il peut être associé avec un Label !\n // Les markers sans styles ne doivent pas être gérées par les styles par defaut\n // car le KML met en place une punaise google !\n if (point && domStyles && domStyles.length !== 0) {\n var labelStyleDom = null;\n var iconStyleDom = null;\n // On recherche le type de Style\n for (var k = 0; k < domStyles.length; k++) {\n switch (domStyles[k].nodeName) {\n case \"LabelStyle\":\n labelStyleDom = domStyles[k];\n break;\n case \"IconStyle\":\n iconStyleDom = domStyles[k];\n break;\n default:\n // on ne traite pas les autres informations ...\n }\n }\n\n // Pour un label, il nous faut un titre !\n var labelName = features[index].getProperties().name;\n var labelDescription = features[index].getProperties().description;\n var value = labelName || labelDescription;\n logger.trace(value);\n\n // C'est uniquement un Label !\n if (!iconStyleDom && labelStyleDom) {\n var fctLabel = process.labelStyle;\n if (fctLabel && typeof fctLabel === \"function\") {\n fctLabel(features[index], labelStyleDom);\n }\n // C'est uniquement un marker !\n } else if (iconStyleDom && !labelStyleDom) {\n var fctIcon = process.iconStyle;\n if (fctIcon && typeof fctIcon === \"function\") {\n fctIcon(features[index], iconStyleDom);\n }\n // C'est un marker avec un label !\n } else if (iconStyleDom && labelStyleDom) {\n var fctIconLabel = process.iconLabelStyle;\n if (fctIconLabel && typeof fctIconLabel === \"function\") {\n fctIconLabel(features[index], iconStyleDom, labelStyleDom);\n }\n } else {\n // ...\n }\n } else {\n var feature = features[index];\n var style = feature.getStyle();\n if (style && typeof style === \"function\") {\n var fstyles = style.call(this, feature, 0);\n if (fstyles && fstyles.length !== 0) {\n style = fstyles[0];\n }\n }\n\n if (poly) {\n var fctPoly = process.polygonStyle;\n if (fctPoly && typeof fctPoly === \"function\") {\n fctPoly(features[index], domStyles);\n }\n }\n\n if (line) {\n var fctLine = process.lineStringStyle;\n if (fctLine && typeof fctLine === \"function\") {\n fctLine(features[index], domStyles);\n }\n }\n\n // INFO\n // On est sur un Point mais sans style dans le DOM.\n // On regarde le style dans le Feature : Icon ou Circle ?\n if (point && style) {\n var image = style.getImage();\n if (image && image instanceof Circle) {\n var fctCircle = process.circleStyle;\n if (fctCircle && typeof fctCircle === \"function\") {\n fctCircle(features[index], hdlDomStyle);\n }\n } else if (image && image instanceof Icon) {\n var fctPoint = process.pointStyle;\n if (fctPoint && typeof fctPoint === \"function\") {\n fctPoint(features[index], hdlDomStyle);\n }\n } else {\n // ...\n }\n }\n }\n break;\n default:\n logger.trace(\"tag is not processing !\");\n }\n }\n }\n\n /**\n * Write Extend for Features.\n * This function overloads ol.format.KML.writeFeatures ...\n *\n * @see ol.format.KML.prototype.writeFeatures\n * @param {Object[]} features - Features.\n * @param {Object} options - Options.\n *\n * @return {String} kml string formatted\n */\n writeFeatures (features, options) {\n logger.log(\"overload : ol.format.KML.writeFeatures\");\n var kmlNode = super.writeFeaturesNode(features, options);\n if (kmlNode === null) {\n return null;\n }\n\n // on ajoute les extensions à la racine pour les metadonnées de calcul\n if (this.hasOwnProperty(\"extensions\")) {\n this._writeRootExtensions(kmlNode, this.extensions);\n }\n\n // On ajoute les styles étendus\n var kmlStringExtended = this._writeExtendStylesFeatures(kmlNode, features, options);\n\n // On realise un formattage du KML\n var kmlStringFormatted = Parser.format(kmlStringExtended);\n if (kmlStringFormatted === \"\") {\n return null;\n }\n\n return kmlStringFormatted;\n };\n\n /**\n * Write Extended Styles for each features\n *\n * @param {DOMElement} kmlNode - kml nodes\n * @param {Object[]} features - features\n * @param {Object} options - options\n *\n * @returns {String} kml string extended\n *\n * @private\n */\n _writeExtendStylesFeatures (kmlNode, features, options) {\n // RGB Colors (RRGGBB) To KML Colors (AABBGGRR)\n function __convertRGBColorsToKML (data, opacity) {\n var strColor = data.toString(16);\n\n if (strColor.charAt(0) === \"#\") {\n strColor = strColor.slice(1);\n }\n\n opacity = opacity || 1;\n opacity = parseInt(opacity * 255, 10);\n opacity = opacity.toString(16);\n var color = opacity;\n color = color + strColor.substr(4, 2);\n color = color + strColor.substr(2, 2);\n color = color + strColor.substr(0, 2);\n return color.toLowerCase();\n }\n\n /**\n * C'est un Label !\n * On va donc y ajouter qq styles sur le Label (police, halo, ...) :\n * Insertion : PlaceMark>Style>LabelStyle\n *\n * @param {Object} feature - feature\n * @param {DOMElement} node - node\n *\n * @example\n * \n */\n var __createExtendedStyleLabel = function (feature, node) {\n logger.trace(\"label with style :\", node);\n\n if (!feature) {\n return;\n }\n\n // Si pas de style defini, c'est donc que l'on va utiliser celui par defaut...\n if (feature.getStyle() instanceof Style) {\n var textStyle = feature.getStyle().getText();\n if (!textStyle) {\n return;\n }\n\n var _fontFamily = \"Sans\";\n var _fontSize = \"16px\";\n var _font = textStyle.getFont();\n if (_font) {\n var splits = _font.split(\" \", 2);\n _fontSize = splits[0];\n _fontFamily = splits[1];\n }\n\n var strokeTextStyle = feature.getStyle().getText().getStroke();\n if (!strokeTextStyle) {\n return;\n }\n if (strokeTextStyle instanceof Stroke) {\n var _haloColor = __convertRGBColorsToKML(\"#FFFFFF\"); // Par defaut\n var color = strokeTextStyle.getColor();\n // array ?\n if (Array.isArray(color)) {\n var cf = \"rgba(\";\n cf += color[0] + \",\";\n cf += color[1] + \",\";\n cf += color[2] + \",\";\n cf += color[3] + \")\";\n color = cf;\n }\n if (Color.isRGB(color)) {\n var colorHex = Color.rgbaToHex(color);\n _haloColor = __convertRGBColorsToKML(colorHex.hex, colorHex.opacity);\n } else {\n _haloColor = __convertRGBColorsToKML(color);\n }\n var _haloRadius = strokeTextStyle.getWidth() || \"0\";\n var _haloOpacity = \"1\"; // TODO lire param\n\n if (node && node.getElementsByTagName(\"LabelStyleSimpleExtensionGroup\").length === 0) {\n var labelExtended = document.createElementNS(kmlNode.namespaceURI, \"LabelStyleSimpleExtensionGroup\");\n labelExtended.setAttribute(\"fontSize\", _fontSize);\n labelExtended.setAttribute(\"fontFamily\", _fontFamily);\n labelExtended.setAttribute(\"haloColor\", _haloColor);\n labelExtended.setAttribute(\"haloRadius\", _haloRadius);\n labelExtended.setAttribute(\"haloOpacity\", _haloOpacity);\n node.appendChild(labelExtended);\n }\n }\n\n var fImageStyle = feature.getStyle().getImage();\n if (!fImageStyle) {\n return;\n }\n if (fImageStyle instanceof Circle) {\n var strokeColor = null;\n var strokeWidth = null;\n if (fImageStyle.getStroke()) {\n strokeWidth = fImageStyle.getStroke().getWidth();\n strokeColor = fImageStyle.getStroke().getColor();\n // array ?\n if (Array.isArray(strokeColor)) {\n var cfs = \"rgba(\";\n cfs += strokeColor[0] + \",\";\n cfs += strokeColor[1] + \",\";\n cfs += strokeColor[2] + \",\";\n cfs += strokeColor[3] + \")\";\n strokeColor = cfs;\n }\n if (Color.isRGB(strokeColor)) {\n var strokeColorHex = Color.rgbaToHex(strokeColor);\n strokeColor = __convertRGBColorsToKML(strokeColorHex.hex, strokeColorHex.opacity);\n } else {\n strokeColor = __convertRGBColorsToKML(strokeColor);\n }\n }\n\n var fillColor = null;\n if (fImageStyle.getFill()) {\n fillColor = fImageStyle.getFill().getColor();\n // array ?\n if (Array.isArray(fillColor)) {\n var cff = \"rgba(\";\n cff += fillColor[0] + \",\";\n cff += fillColor[1] + \",\";\n cff += fillColor[2] + \",\";\n cff += fillColor[3] + \")\";\n fillColor = cff;\n }\n if (Color.isRGB(fillColor)) {\n var fillColorHex = Color.rgbaToHex(fillColor);\n fillColor = __convertRGBColorsToKML(fillColorHex.hex, fillColorHex.opacity);\n } else {\n fillColor = __convertRGBColorsToKML(fillColor);\n }\n }\n\n if (node && node.getElementsByTagName(\"ObjectSimpleExtensionGroup\").length === 0) {\n var iconExtended = document.createElementNS(kmlNode.namespaceURI, \"ObjectSimpleExtensionGroup\");\n iconExtended.setAttribute(\"type\", \"circle\"); // FIXME type circle only !\n iconExtended.setAttribute(\"radius\", fImageStyle.getRadius());\n iconExtended.setAttribute(\"fillColor\", fillColor);\n iconExtended.setAttribute(\"strokeColor\", strokeColor);\n iconExtended.setAttribute(\"strokeWidth\", strokeWidth);\n node.appendChild(iconExtended);\n }\n }\n }\n };\n\n /**\n * C'est un marker !\n * On va donc ajouter la balise hotspot :\n * Traiter le cas où les unités sont de type\n * - FRACTION\n * - PIXELS\n * Insertion du correctif dans le noeud : \n */\n var __createExtendedStyleIcon = function (feature, node) {\n logger.trace(\"marker with style (hotspot):\", node);\n\n if (!feature) {\n return;\n }\n\n // Si pas de style defini, c'est donc que l'on va utiliser celui par defaut...\n if (feature.getStyle() instanceof Style) {\n var fImageStyle = feature.getStyle().getImage();\n\n if (!fImageStyle) {\n return;\n }\n\n if (fImageStyle instanceof Icon) {\n var x = 0;\n var y = 0;\n var xunits = \"pixels\";\n var yunits = \"pixels\";\n\n var size = fImageStyle.getSize();\n var anchor = fImageStyle.getAnchor(); // pixels ! but anchor_ in the current unit !\n\n if (anchor.length) {\n x = anchor[0];\n y = anchor[1];\n if (yunits === \"fraction\") {\n y = (y === 1) ? 0 : 1 - y; // cf. fixme contribution à faire !\n } else {\n y = (yunits === \"pixels\" && y === size[1]) ? 0 : size[1] - y; // cf. fixme contribution à faire !\n }\n }\n\n if (node && node.getElementsByTagName(\"hotSpot\").length === 0) {\n var hotspot = document.createElementNS(kmlNode.namespaceURI, \"hotSpot\");\n hotspot.setAttribute(\"x\", x);\n hotspot.setAttribute(\"y\", y);\n hotspot.setAttribute(\"xunits\", xunits);\n hotspot.setAttribute(\"yunits\", yunits);\n node.appendChild(hotspot);\n }\n }\n }\n };\n\n /**\n * ...\n * @param {*} feature - feature\n * @param {DOMElement} node - node\n */\n var __createExtendedStyleToCircle = function (feature, node) {\n if (!feature) {\n return;\n }\n\n // Si pas de style defini, c'est donc que l'on va utiliser celui par defaut...\n if (feature.getStyle() instanceof Style) {\n var fImageStyle = feature.getStyle().getImage();\n if (!fImageStyle) {\n return;\n }\n if (fImageStyle instanceof Circle) {\n var strokeColor = null;\n var strokeWidth = null;\n if (fImageStyle.getStroke()) {\n strokeWidth = fImageStyle.getStroke().getWidth();\n strokeColor = fImageStyle.getStroke().getColor();\n // array ?\n if (Array.isArray(strokeColor)) {\n var cf = \"rgba(\";\n cf += strokeColor[0] + \",\";\n cf += strokeColor[1] + \",\";\n cf += strokeColor[2] + \",\";\n cf += strokeColor[3] + \")\";\n strokeColor = cf;\n }\n if (Color.isRGB(strokeColor)) {\n var colorHex = Color.rgbaToHex(strokeColor);\n strokeColor = __convertRGBColorsToKML(colorHex.hex, colorHex.opacity);\n } else {\n strokeColor = __convertRGBColorsToKML(strokeColor);\n }\n }\n\n var fillColor = null;\n if (fImageStyle.getFill()) {\n fillColor = fImageStyle.getFill().getColor();\n // array ?\n if (Array.isArray(fillColor)) {\n var cfi = \"rgba(\";\n cfi += fillColor[0] + \",\";\n cfi += fillColor[1] + \",\";\n cfi += fillColor[2] + \",\";\n cfi += fillColor[3] + \")\";\n fillColor = cfi;\n }\n if (Color.isRGB(fillColor)) {\n var fillColorImgHex = Color.rgbaToHex(fillColor);\n fillColor = __convertRGBColorsToKML(fillColorImgHex.hex, fillColorImgHex.opacity);\n } else {\n fillColor = __convertRGBColorsToKML(fillColor);\n }\n }\n\n if (node && node.getElementsByTagName(\"ObjectSimpleExtensionGroup\").length === 0) {\n var labelStyle = document.createElementNS(kmlNode.namespaceURI, \"LabelStyle\");\n var circleExtended = document.createElementNS(kmlNode.namespaceURI, \"ObjectSimpleExtensionGroup\");\n circleExtended.setAttribute(\"type\", \"circle\"); // FIXME type circle only !\n circleExtended.setAttribute(\"radius\", fImageStyle.getRadius());\n circleExtended.setAttribute(\"fillColor\", fillColor);\n circleExtended.setAttribute(\"strokeColor\", strokeColor);\n circleExtended.setAttribute(\"strokeWidth\", strokeWidth);\n labelStyle.appendChild(circleExtended);\n node.appendChild(labelStyle);\n }\n }\n }\n };\n\n /**\n * ...\n * @param {*} feature - feature\n * @param {DOMElement} node - node\n */\n var __createExtendedStyleToPoint = function (feature, node) {};\n\n // TODO\n var __createExtendedStyleToIconLabel = function (feature, nodeIconStyle, nodeLabelStyle) {\n logger.trace(\"write an icon with a label\");\n __createExtendedStyleIcon(feature, nodeIconStyle);\n __createExtendedStyleLabel(feature, nodeLabelStyle);\n };\n\n // TODO\n var __setNameData = function (feature, tags) {\n for (var i = 0; i < tags.length; i++) {\n var tag = tags[i];\n if (tag.nodeName === \"name\") {\n return;\n }\n }\n\n var labelName = feature.getProperties().name;\n if (labelName) {\n var name = document.createElement(\"name\");\n name.innerHTML = labelName;\n tags.appendChild(name);\n }\n };\n\n // TODO\n var _setExtendedDataStyle = function (feature, node) {\n if (node && node.length) {\n var removeNodes = [];\n for (var k = 0; k < node.length; k++) {\n const element = node[k];\n if (element.nodeName === \"Data\") {\n var key = element.getAttribute(\"name\");\n if (Styling.getListTags().includes(key)) {\n removeNodes.push(element);\n }\n }\n }\n if (removeNodes && removeNodes.length) {\n removeNodes.forEach(e => {\n e.remove();\n });\n }\n }\n };\n\n // On ajoute les styles étendus dans le DOM\n this._processKml(kmlNode, features, {\n labelStyle : __createExtendedStyleLabel,\n iconStyle : __createExtendedStyleIcon,\n iconLabelStyle : __createExtendedStyleToIconLabel,\n circleStyle : __createExtendedStyleToCircle,\n pointStyle : __createExtendedStyleToPoint,\n nameData : __setNameData,\n extendedData : _setExtendedDataStyle\n });\n\n // On convertit le DOM en String...\n var kmlStringExtended = Parser.toString(kmlNode);\n if (!kmlStringExtended) {\n return null;\n }\n\n return kmlStringExtended;\n };\n\n /**\n * ...\n *\n * @param {*} kmlNode - ...\n * @param {*} extensions - ...\n */\n _writeRootExtensions (kmlNode, extensions) {\n var extendDataElement = document.createElementNS(kmlNode.namespaceURI, \"ExtendedData\");\n // on boucle sur toutes les clefs\n for (const key in extensions) {\n if (Object.hasOwnProperty.call(extensions, key)) {\n const value = extensions[key];\n var dataElement = document.createElementNS(kmlNode.namespaceURI, \"Data\");\n dataElement.setAttribute(\"name\", key);\n var data = document.createTextNode(JSON.stringify(value));\n dataElement.appendChild(data);\n extendDataElement.appendChild(dataElement);\n }\n }\n // insertion en 1ere place !\n var firstChild = kmlNode.firstChild;\n kmlNode.insertBefore(extendDataElement, firstChild);\n }\n\n /**\n * Read Extend for Features.\n * This function overloads ol.format.KML.readFeatures ...\n *\n * @see ol.format.KML.prototype.readFeatures\n * @param {Document|Node} source - Source.\n * @param {olx.format.ReadOptions=} options - options.\n * @return {Array.} Features.\n */\n readFeatures (source, options) {\n logger.log(\"overload : ol.format.KML.readFeatures\");\n\n // String ou Dom\n if (typeof source === \"string\") {\n this.source = Parser.parse(source);\n } else if (source !== null) {\n this.source = source;\n }\n\n var features = this._readExtendStylesFeatures(source, options);\n logger.trace(\"Styles étendus\", features);\n\n // On met à jour les attributs de style dans les features\n features.forEach(feature => {\n Styling.definePropertiesFromStyle(feature);\n });\n\n return features;\n };\n\n /**\n * Read Extended Styles for each features\n *\n * @param {(Document|Node|ArrayBuffer|Object|String)} source - source\n * @param {olx.format.ReadOptions=} options - options\n *\n * @returns {Object[]} features\n *\n * @private\n */\n _readExtendStylesFeatures (source, options) {\n var features = super.readFeatures(source, options);\n\n var kmlDoc = null;\n var kmlString = \"\";\n\n if (typeof source === \"string\") {\n kmlString = source;\n } else {\n kmlString = source.documentElement.outerHTML;\n }\n\n // On 'deformatte' le KML afin d'eviter des pb de parsing...\n kmlString = kmlString.replace(/\\n/g, \"\");\n kmlString = kmlString.replace(/(>)\\s*(<)/g, \"$1$2\");\n\n // On met en place un Parser sur le KML\n kmlDoc = Parser.parse(kmlString);\n\n if (kmlDoc === null) {\n // au cas où...\n return features;\n }\n\n // KML Colors (AABBGGRR) To RGB Colors (RRGGBB)\n function __convertKMLColorsToRGB (data) {\n var color = \"\";\n color = color + data.substr(6, 2);\n color = color + data.substr(4, 2);\n color = color + data.substr(2, 2);\n var hex = parseInt(color, 16).toString(16);\n var comp = \"\";\n var len = hex.length || 0;\n for (var i = 0; i < (6 - len); i++) {\n comp += \"0\";\n }\n hex = \"#\" + comp + hex;\n return hex;\n }\n\n /**\n * Gestion des styles étendus sur le Label\n *\n * @param {Object} feature - ol feature\n * @param {DOMElement} node - node\n *\n * @example\n * \n * Un label\n * C'est un label étendu !\n * \n * \n * 2,48\n * \n * \n */\n var __getExtendedStyleToFeatureLabel = function (feature, node) {\n logger.trace(\"label with style :\", node);\n\n if (!feature) {\n return;\n }\n\n // label\n var _text = feature.getProperties().name;\n var _color = __convertKMLColorsToRGB(\"ff000000\"); // \"#000000\"\n var _colorHalo = \"#FFFFFF\";\n var _radiusHalo = 0;\n // var _opacityHalo = 1; // TODO\n var _font = \"Sans\";\n var _fontSize = \"16px\";\n\n // cercle\n var _circleType = null;\n var _circleRadius = 5;\n var _circleFillColor = \"#000000\";\n var _circleStrokeColor = \"#ffffff\";\n var _circleStrokeWidth = 1;\n\n // On recherche les balises du Style\n var bLabelStyleSimpleExtensionGroup = false;\n var bObjectSimpleExtensionGroup = false;\n var nodeStyles = node.childNodes;\n for (var k = 0; k < nodeStyles.length; k++) {\n switch (nodeStyles[k].nodeName) {\n case \"scale\":\n // TODO\n break;\n case \"colorMode\":\n // TODO\n break;\n case \"color\":\n _color = __convertKMLColorsToRGB(nodeStyles[k].textContent);\n break;\n case \"LabelStyleSimpleExtensionGroup\":\n bLabelStyleSimpleExtensionGroup = true;\n var attributs = nodeStyles[k].attributes;\n for (var l = 0; l < attributs.length; l++) {\n switch (attributs[l].nodeName) {\n case \"fontFamily\":\n _font = attributs[l].nodeValue;\n break;\n case \"fontSize\":\n _fontSize = attributs[l].nodeValue;\n break;\n case \"haloColor\":\n _colorHalo = __convertKMLColorsToRGB(attributs[l].nodeValue);\n break;\n case \"haloRadius\":\n _radiusHalo = parseInt(attributs[l].nodeValue, 10);\n break;\n case \"haloOpacity\":\n // _opacityHalo = parseFloat(attributs[l].nodeValue);\n // TODO opacité !\n // if (_opacityHalo !== 1) {\n // _colorHalo = Color.hexToRgba(_colorHalo, _opacityHalo);\n // }\n break;\n default:\n }\n }\n break;\n case \"ObjectSimpleExtensionGroup\":\n bObjectSimpleExtensionGroup = true;\n var attributsExt = nodeStyles[k].attributes;\n for (var ll = 0; ll < attributsExt.length; ll++) {\n // type=\"circle\" radius=\"15\" fillColor=\"7f3737a0\" strokeColor=\"cc000000\" strokeWidth=\"2\"\n switch (attributsExt[ll].nodeName) {\n case \"type\":\n _circleType = attributsExt[ll].nodeValue;\n break;\n case \"radius\":\n _circleRadius = parseInt(attributsExt[ll].nodeValue, 10);\n break;\n case \"fillColor\":\n var fillColorValue = attributsExt[ll].nodeValue;\n var fillOpacity = Math.round((Color.num(fillColorValue.substr(0, 2)) / 255) * 10) / 10;\n var fillColorHexa = __convertKMLColorsToRGB(fillColorValue);\n _circleFillColor = Color.hexToRgba(fillColorHexa, fillOpacity);\n break;\n case \"strokeColor\":\n var strokeColorValue = attributsExt[ll].nodeValue;\n var strokeOpacity = Math.round((Color.num(strokeColorValue.substr(0, 2)) / 255) * 10) / 10;\n var strokeColorHexa = __convertKMLColorsToRGB(strokeColorValue);\n _circleStrokeColor = Color.hexToRgba(strokeColorHexa, strokeOpacity);\n break;\n case \"strokeWidth\":\n _circleStrokeWidth = parseInt(attributsExt[ll].nodeValue, 10);\n break;\n default:\n }\n }\n break;\n default:\n // on ne traite pas les autres informations ...\n }\n }\n\n var StyleInstance = null;\n if (bObjectSimpleExtensionGroup && _circleType === \"circle\") {\n StyleInstance = new Circle({\n radius : _circleRadius,\n fill : new Fill({\n color : _circleFillColor\n }),\n stroke : new Stroke({\n color : _circleStrokeColor,\n width : _circleStrokeWidth\n })\n });\n } else if (bLabelStyleSimpleExtensionGroup) {\n // INFO\n // on ajoute une image magique 1x1 pixel invisible\n // afin d'eviter l'affichage d'une punaise google !\n StyleInstance = new Icon({\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNiYAAAAAkAAxkR2eQAAAAASUVORK5CYII=\",\n size : [51, 38],\n anchor : [25.5, 38],\n anchorOrigin : \"top-left\",\n anchorXUnits : \"pixels\",\n anchorYUnits : \"pixels\"\n });\n } else {\n // ...\n }\n // On reconstruit le style !\n feature.setStyle(new Style({\n image : StyleInstance,\n text : new Text({\n font : _fontSize + \" \" + _font,\n textAlign : \"left\",\n text : _text,\n // offsetX : 5, // FIXME valeur arbitraire MAIS esthétique !\n fill : new Fill({\n color : _color\n }),\n stroke : new Stroke({\n color : _colorHalo,\n width : _radiusHalo\n })\n })\n }));\n };\n\n /**\n * Gestion des styles étendus sur un Marker\n *\n * > correctif sur la balise kml:hostSpot\n * - problème avec 'hotspot y === 0' (?)\n *\n * @param {Object} feature - ol feature\n * @param {DOMElement} node - node\n *\n * @example\n * \n * \n * \n * 2,48\n * \n * \n */\n var __getExtendedStyleToFeatureIcon = function (feature, node) {\n logger.trace(\"hotspot :\", node);\n\n // marker\n var _src = null;\n var _scale = null;\n var _color = __convertKMLColorsToRGB(\"ffffffff\");\n\n var _bSizeIcon = false;\n var _sizeW = 51;\n var _sizeH = 38;\n\n var _bHotSpot = false;\n var _anchorX = 25.5;\n var _anchorXUnits = \"pixels\";\n var _anchorY = 38;\n var _anchorYUnits = \"pixels\";\n\n var nodeStyles = node.childNodes;\n var bIconStyle = false;\n for (var k = 0; k < nodeStyles.length; k++) {\n switch (nodeStyles[k].nodeName) {\n case \"Icon\":\n bIconStyle = true;\n var nodes = nodeStyles[k].childNodes;\n for (var i = 0; i < nodes.length; i++) {\n switch (nodes[i].nodeName) {\n case \"href\":\n _src = nodes[i].textContent;\n break;\n case \"gx:w\":\n _bSizeIcon = true;\n _sizeW = parseFloat(nodes[i].textContent);\n break;\n case \"gx:h\":\n _bSizeIcon = true;\n _sizeH = parseFloat(nodes[i].textContent);\n break;\n default:\n }\n }\n break;\n case \"hotSpot\":\n _bHotSpot = true;\n var attributs = nodeStyles[k].attributes;\n for (var l = 0; l < attributs.length; l++) {\n switch (attributs[l].nodeName) {\n case \"x\":\n _anchorX = parseFloat(attributs[l].nodeValue);\n break;\n case \"y\":\n _anchorY = parseFloat(attributs[l].nodeValue);\n break;\n case \"yunits\":\n _anchorXUnits = attributs[l].nodeValue;\n break;\n case \"xunits\":\n _anchorYUnits = attributs[l].nodeValue;\n break;\n default:\n }\n }\n break;\n case \"scale\":\n _scale = parseFloat(nodeStyles[k].textContent);\n break;\n case \"color\":\n _color = __convertKMLColorsToRGB(nodeStyles[k].textContent);\n break;\n default:\n // on ne traite pas les autres informations ...\n }\n }\n\n var StyleInstance = null;\n if (bIconStyle) {\n // une image magique 1x1 pixel invisible\n var optionsIcon = {\n src : _src || \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNiYAAAAAkAAxkR2eQAAAAASUVORK5CYII=\",\n color : _color,\n crossOrigin : \"anonymous\", // cf. https://gis.stackexchange.com/questions/121555/wms-server-with-cors-enabled/147403#147403\n scale : _scale || 1\n };\n\n if (_bSizeIcon) {\n Utils.mergeParams(optionsIcon, {\n size : [_sizeW, _sizeH]\n });\n }\n\n if (_bHotSpot) {\n Utils.mergeParams(optionsIcon, {\n anchor : [_anchorX, _anchorY],\n anchorOrigin : \"bottom-left\",\n anchorXUnits : _anchorXUnits || \"pixels\",\n anchorYUnits : _anchorYUnits || \"pixels\"\n });\n }\n\n StyleInstance = new Icon(optionsIcon);\n }\n\n // existe il déjà le style du label ?\n var featureStyleFunction = feature.getStyleFunction();\n if (featureStyleFunction) {\n var _styles = featureStyleFunction(feature, 0);\n if (_styles && !Array.isArray(_styles)) {\n _styles = [_styles];\n }\n if (_styles && _styles.length !== 0) {\n var _style = (_styles.length === 1) ? _styles[0] : _styles[_styles.length - 1];\n // on écrase l'icone magic du label !\n feature.setStyle(new Style({\n image : StyleInstance,\n text : _style.getText()\n }));\n }\n }\n };\n\n /**\n * Gestion de la balise kml:ExtendedData\n *\n * @param {Object} feature - ol feature\n * @param {DOMElement[]} extend - extend\n *\n * @example\n * //--> Marker (Point), LineString, Polygon\n * \n * \n * title\n * Titre à concatener avec la valeur de la balise \"kml:description\"\n * \n * \n * //--> Label\n * \n * \n * PARIS // valeur à remplacer dans \"kml:name\"\n * \n * \n * title\n * Titre à concatener avec la valeur de la balise \"kml:description\"\n * \n * \n */\n var __getExtendedData = function (feature, extend) {\n logger.trace(\"extendData :\", extend);\n\n if (!feature) {\n return;\n }\n\n var props = {};\n\n var _fname = feature.get(\"name\") || \"\";\n var _fdescription = feature.get(\"description\") || \"\";\n var _ftitle = null;\n for (var i = 0; i < extend.length; i++) {\n var data = extend[i];\n var name = data.attributes[0]; // 1 seul attribut !\n var nodes = data.childNodes;\n if (name.nodeName === \"name\") {\n switch (name.nodeValue) {\n // compatibilité ancien geoportail !\n case \"label\":\n _fname = data.textContent;\n props.name = _fname;\n break;\n // compatibilité ancien geoportail !\n case \"title\":\n case \"attributetitle\":\n for (var j = 0; j < nodes.length; j++) {\n if (nodes[j].nodeName === \"value\") {\n _ftitle = nodes[j].textContent;\n }\n }\n break;\n default:\n props[name.nodeValue] = data.textContent;\n break;\n }\n }\n }\n\n // Modification des properties \"name\" et \"description\"\n if (_ftitle) {\n _fdescription = (_fdescription) ? _ftitle + \" : \" + _fdescription : _ftitle;\n props.description = _fdescription;\n }\n\n if (Object.keys(props).length) {\n feature.setProperties(props, true);\n }\n };\n\n /**\n * TODO\n * ...\n *\n * @param {Object} feature - ol feature\n * @param {DOMElement} nodeIconStyle - icon style\n * @param {DOMElement} nodeLabelStyle - label style\n * @example\n * ...\n */\n var __getExtendedStyleToFeatureIconLabel = function (feature, nodeIconStyle, nodeLabelStyle) {\n logger.trace(\"display icon and label\");\n __getExtendedStyleToFeatureLabel(feature, nodeLabelStyle);\n __getExtendedStyleToFeatureIcon(feature, nodeIconStyle);\n };\n\n // TODO...\n var __getStyleToDefaultFeature = function (feature, node) {};\n\n // On lit les styles étendus et on les ajoute aux features\n this._processKml(kmlDoc, features, {\n lineStringStyle : __getStyleToDefaultFeature,\n polygonStyle : __getStyleToDefaultFeature,\n pointStyle : __getStyleToDefaultFeature,\n labelStyle : this.showPointNames_ ? __getExtendedStyleToFeatureLabel : null,\n iconStyle : __getExtendedStyleToFeatureIcon,\n iconLabelStyle : this.showPointNames_ ? __getExtendedStyleToFeatureIconLabel : __getExtendedStyleToFeatureIcon,\n extendedData : __getExtendedData\n });\n\n return features;\n };\n\n /**\n * ...\n * @param {*} key ...\n * @returns {Object} json\n */\n readRootExtensions (key) {\n var value = {};\n // Rechercher le tag avec la clef : geoportail:compute\n // \n // {...}\n // \n var firstNodeLevelKml = (this.source.nodeName === \"#document\") ? this.source.childNodes[0] : this.source;\n var childNodesLevel = firstNodeLevelKml.childNodes;\n for (var i = 0; i < childNodesLevel.length; i++) {\n var node1 = childNodesLevel[i];\n if (node1.nodeName === \"ExtendedData\") {\n var childNodesExtended = node1.childNodes;\n for (var j = 0; j < childNodesExtended.length; j++) {\n var node2 = childNodesExtended[j];\n if (node2.nodeName === \"Data\") {\n var name = node2.attributes[0];\n if (name && name.nodeName === \"name\") {\n if (name.nodeValue === key) {\n value = JSON.parse(node2.textContent);\n break;\n }\n }\n }\n }\n }\n }\n return value;\n }\n\n};\n\nexport default KML;\n\n// Expose KML as ol.source.KMLExtended. (for a build bundle)\nif (window.ol && window.ol.format) {\n window.ol.format.KMLExtended = KML;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.format.GPX;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.geom.MultiLineString;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.geom.LineString;","// import openlayers\nimport olGPX from \"ol/format/GPX\";\n// import Geometry\nimport MultiLineString from \"ol/geom/MultiLineString\";\nimport LineString from \"ol/geom/LineString\";\n// import local\nimport Styling from \"./Styling\";\nimport Parser from \"../Utils/Parser\";\n\n/**\n * @classdesc\n *\n * Extended Styles GPX format to export (internal use only !)\n *\n * SPEC\n * cf. https://www.topografix.com/gpx.asp\n *\n *\n * @constructor\n * @alias ol.format.GPXExtended\n * @extends {ol.format.GPX}\n * @type {ol.format.GPXExtended}\n * @param {Object} options - Options\n * @param {Object} [options.defaultStyle] - Styles by default\n * @param {String} [options.orderBy] - Sort by key the feature before writing. By default, no sorting\n * @param {Object} [options.extensions] - Add properties to file root\n * @param {function} [options.readExtensions] - Reading extensions (native)\n */\nvar GPX = class GPX extends olGPX {\n\n /**\n * See {@link ol.format.GPXExtended}\n * @module GPXExtended\n * @alias module:~formats/GPXExtended\n * @param {*} options - options\n * @example\n * import GPXExtended from from \"gpf-ext-ol/formats/GPXExtended\"\n * ou \n * import { GPXExtended } from \"gpf-ext-ol\"\n */\n constructor (options) {\n super(options);\n\n if (!(this instanceof GPX)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this.options = options || {};\n\n // INFO\n // surcharge de la callback : readExtensions\n if (this.options.readExtensions && typeof this.options.readExtensions === \"function\") {\n var clbk = this.options.readExtensions; // callback definie par l'utilisateur\n this.options.readExtensions = function (feature, node) {\n this.readExtensions(feature, node);\n clbk.call(this, feature, node);\n };\n } else {\n this.options.readExtensions = this.readExtensions;\n }\n\n // INFO\n // defaultStyle est un objet de type Style\n if (this.options.defaultStyle === null || typeof this.options.defaultStyle === \"undefined\") {\n this.options.defaultStyle = {};\n }\n\n this.source = null;\n\n return this;\n }\n\n /**\n * Read Extend Styles for Features.\n * This function overloads ol.format.GPX.readFeatures ...\n *\n * @see ol.format.GPX.prototype.readFeatures\n * @param {Document|Node} source - Source.\n * @param {olx.format.ReadOptions=} options - options.\n * @return {Array.} Features.\n */\n readFeatures (source, options) {\n // INFO\n // le travail de lecture des extensions du format est porté\n // par la callback des options : readExtensions\n var features = super.readFeatures(source, options);\n\n // String ou Dom\n if (typeof source === \"string\") {\n this.source = Parser.parse(source);\n } else if (source !== null) {\n this.source = source;\n }\n\n // INFO\n // on applique les styles par defaut definis avec l'option defaultStyle\n // sauf sur les features qui possèdent des extensions.\n // les features avec extensions sont traité au préalable\n // dans la callback des options : readExtensions\n var self = this;\n features.forEach(function (feature, index, array) {\n feature.setId(index + 1);\n // HACK : enregistrement de la description de la balise 'desc' du format GPX\n var value = feature.getProperties().desc;\n if (value) {\n feature.setProperties({\n description : value\n });\n }\n var featureStyleFunction = feature.getStyleFunction();\n if (!featureStyleFunction) {\n var styleFunction = Styling.defineStyleFunctionByDefault(self.options.defaultStyle);\n if (styleFunction) {\n feature.setStyle(styleFunction);\n }\n }\n });\n return features;\n }\n\n /**\n * Write Extend Styles for Features.\n * This function overloads ol.format.GPX.writeFeatures ...\n *\n * @see ol.format.GPX.prototype.writeFeatures\n * @param {Object[]} features - Features.\n * @param {Object} options - Options.\n *\n * @return {String} Result or null.\n */\n writeFeatures (features, options) {\n // INFO\n // il n'est pas possible de surcharger les parsers d'OpenLayers (private),\n // on decide de (re)parser la sortie d'OpenLayers afin d'y placer les balises\n // d'extensions\n\n // on met à jour les properties de styles\n features.forEach(function (feature, index, array) {\n // HACK : enregistrement de la description dans la balise 'desc' du format GPX\n var value = feature.getProperties().description;\n if (value) {\n feature.setProperties({\n desc : value\n });\n }\n\n Styling.definePropertiesFromStyle(feature);\n\n // HACK : Le type surfacique n'existe pas au format GPX,\n // on doit la transformer en un lineaire.\n // Par contre, on garde un trace de la transformation :\n // * le style surfacique\n // * le type de geometrie initiale\n var type = feature.getGeometry().getType();\n if (type === \"Polygon\") {\n // creation d'une copie pour ne pas modifier les features de carte\n var fp = feature.clone();\n fp.set(\"type\", type);\n fp.setGeometry(new LineString(feature.getGeometry().getCoordinates()));\n features.push(fp);\n // feature à supprimer de l'export\n array.splice(index, 1);\n } else if (type === \"MultiPolygon\") {\n // creation d'une copie pour ne pas modifier les features de carte\n var fm = feature.clone();\n fm.set(\"type\", type);\n fm.setGeometry(new MultiLineString(feature.getGeometry().getCoordinates()));\n features.push(fm);\n // feature à supprimer de l'export\n array.splice(index, 1);\n }\n });\n\n // tri des features en fonction de la balise \"number\" || \"id\" || \"order\"\n if (this.options.orderBy !== undefined) {\n var key = this.options.orderBy;\n if (key) {\n var sortFct = function (a, b) {\n var cmpA = a.get(key) || 0;\n var cmpB = b.get(key) || 0;\n return cmpA.toString().localeCompare(cmpB.toString(), undefined, { numeric : true });\n };\n features.sort(sortFct);\n }\n }\n\n // nodes\n var gpxNode = super.writeFeaturesNode(features, options);\n if (gpxNode === null) {\n return null;\n }\n\n // on ajoute les extensions à la racine pour les metadonnées de calcul\n if (this.options.hasOwnProperty(\"extensions\")) {\n this.writeRootExtensions_(gpxNode, this.options.extensions);\n }\n\n // INFO\n // à chaque fois qu'un style est trouvé dans un feature,\n // on appelle la fonction d'insertion des balises extensions dans le DOM.\n this.processExtensions_(gpxNode, features, {\n extensions : this.writeExtensions_\n });\n\n // dom -> string\n var gpxStringExtended = Parser.toString(gpxNode);\n if (!gpxStringExtended) {\n return null;\n }\n\n // format string\n var gpxStringFormatted = Parser.format(gpxStringExtended);\n if (gpxStringFormatted === \"\") {\n return null;\n }\n\n return gpxStringFormatted;\n }\n\n /**\n * Callback to read extensions from options : readExtensions\n *\n * @param {*} feature - ...\n * @param {*} node - ...\n */\n readExtensions (feature, node) {\n var _node = node;\n // recherche de la properties de type Node ou Element\n // si le node n'est pas renseigné...\n if (!node) {\n var props = feature.getProperties();\n for (const key in props) {\n if (Object.hasOwnProperty.call(props, key)) {\n const element = props[key];\n if (element instanceof Node) {\n _node = element;\n break;\n }\n }\n }\n }\n\n if (!_node) {\n // eslint-disable-next-line no-console\n console.warn(\"node not found !\");\n return;\n }\n\n // ex. de nodes :\n // \n // medium\n // \n // #ffffff\n // \n for (var index = 0; index < _node.childNodes.length; index++) {\n var element = _node.childNodes[index];\n if (element.nodeType === 1) {\n feature.set(element.nodeName, element.textContent);\n }\n }\n\n // cas particulier du format GPX :\n // il n'existe pas de surfacique sur ce format, mais il est possible de forcer\n // la transformation en polygone pour des besoins particuliers de visualisation\n Styling.APPLY_CONVERT_GEOM_GPX = true;\n var style = Styling.defineStyleFromProperties(feature);\n if (style) {\n feature.setStyle(style);\n }\n }\n\n /**\n * ...\n * @param {*} key ...\n * @returns {Object} json\n * @todo\n */\n readRootExtensions (key) {\n var value = {};\n // Rechercher :\n // \n // \n // {...}\n // \n // \n\n var firstNodeLevelGpx = this.source.childNodes[0]; // gpx\n var searchChildNodesMeta = firstNodeLevelGpx.childNodes; // search metadata\n for (var k = 0; k < searchChildNodesMeta.length; k++) {\n var nodeMeta = searchChildNodesMeta[k];\n if (nodeMeta.nodeName === \"metadata\") {\n var searchChildNodesExt = nodeMeta.childNodes; // search extensions\n for (var i = 0; i < searchChildNodesExt.length; i++) {\n var nodeExt = searchChildNodesExt[i];\n if (nodeExt.nodeName === \"extensions\") {\n var searchChildNodesData = nodeExt.childNodes; // search data\n for (var j = 0; j < searchChildNodesData.length; j++) {\n var nodeData = searchChildNodesData[j];\n if (nodeData.nodeName === \"data\") {\n var name = nodeData.attributes[0];\n if (name && name.nodeName === \"name\") {\n if (name.nodeValue === key) {\n value = JSON.parse(nodeData.textContent);\n break;\n }\n }\n }\n }\n }\n }\n }\n }\n return value;\n }\n\n /**\n * ...\n *\n * @param {*} doc - ...\n * @param {*} extensions - ...\n * @param {Boolean} [xml=false] - write tag xml or json\n */\n writeRootExtensions_ (doc, extensions, xml) {\n // TODO namespace ?\n var metadata = document.createElement(\"metadata\");\n var extensionsRoot = document.createElement(\"extensions\");\n // INFO\n // convert JSON to XML (dom)\n // * type string :\n // { typestring: \"string\" } -> string\n //\n // * type object :\n // { typeobject: { typestring1: \"string\", typestring2: \"string\" } }\n // -> \n // string\n // string\n // \n //\n // * type array :\n // { typearray : [\"item1\", \"item2\"] }\n // -> \n // item1\n // item2\n // \n //\n // * type array of array\n // -> \n // \n // 1\n // 2\n // \n // \n //\n // * type array of object\n // -> \n // \n // string\n // string\n // \n // \n // string\n // string\n // \n // \n function toDOM (node, json) {\n for (const key in json) {\n if (Object.hasOwnProperty.call(json, key)) {\n var element = json[key] || \"\"; // au cas où...\n var tag = document.createElement(key);\n // eslint-disable-next-line valid-typeof\n if (typeof element === \"string\" || typeof element === \"number\") {\n tag.innerHTML = element;\n node.appendChild(tag);\n } else if (element instanceof Array) {\n tag.setAttribute(\"type\", \"array\");\n tag.setAttribute(\"index\", element.length);\n for (let index = 0; index < element.length; index++) {\n var item = element[index] || \"\"; // au cas où...\n var n = document.createElement(\"value\");\n if (typeof item === \"string\" || typeof item === \"number\") {\n n.innerHTML = item;\n tag.appendChild(n);\n } else if (item instanceof Array) {\n n.setAttribute(\"type\", \"array\");\n n.setAttribute(\"index\", item.length);\n for (let i = 0; i < item.length; i++) {\n var value = item[i] || \"\"; // au cas où...\n var k = document.createElement(\"value\");\n if (typeof value === \"string\" || typeof value === \"number\") {\n k.innerHTML = value;\n n.appendChild(k);\n }\n }\n tag.appendChild(n);\n } else if (item instanceof Object) {\n tag.appendChild(toDOM(n, item));\n } else {\n // \"Unknown element !\"\n }\n }\n node.appendChild(tag);\n } else if (element instanceof Object) {\n node.appendChild(toDOM(tag, element));\n } else {\n // \"Unknown element !\"\n }\n }\n }\n return node;\n }\n\n if (xml) {\n // structure xml\n toDOM(extensionsRoot, extensions);\n } else {\n // structure json par defaut\n // ex.\n // \n // \n // {...}\n // \n // \n for (const key in extensions) {\n if (Object.hasOwnProperty.call(extensions, key)) {\n const value = extensions[key];\n var dataElement = document.createElement(\"data\");\n dataElement.setAttribute(\"name\", key);\n var data = document.createTextNode(JSON.stringify(value));\n dataElement.appendChild(data);\n extensionsRoot.appendChild(dataElement);\n }\n }\n }\n metadata.appendChild(extensionsRoot);\n // insertion en 1ere place !\n var firstChild = doc.firstChild;\n doc.insertBefore(metadata, firstChild);\n }\n\n /**\n * ...\n *\n * @param {Object} feature - ...\n * @param {DOMElement} node - ...\n * @private\n */\n writeExtensions_ (feature, node) {\n // creation du DOM\n var extensionsNode = document.createElementNS(node.parentNode.namespaceURI, \"extensions\");\n Styling.getListTags().forEach(key => {\n if (feature.get(key)) {\n var extension = document.createElementNS(node.parentNode.namespaceURI, key);\n extension.innerHTML = feature.get(key);\n extensionsNode.appendChild(extension);\n }\n });\n node.appendChild(extensionsNode);\n }\n\n /**\n * ...\n *\n * @param {DOMElement} doc - ...\n * @param {Object} features - ...\n * @param {Object} actions - ...\n * @private\n */\n processExtensions_ (doc, features, actions) {\n // INFO\n // OpenLayers ne gère pas tous les tags du format GPX : ex. metadata\n // Liste des tags :\n // * wpt\n // * rte\n // * trk\n // On peut y placer nos balises extensions.\n\n var index = -1;\n var nodes = doc.childNodes;\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n switch (node.nodeName) {\n case \"wpt\":\n case \"rte\":\n case \"trk\":\n index++;\n var feature = features[index];\n var style = feature.getStyle();\n if (style) {\n var fct = actions.extensions;\n if (fct && typeof fct === \"function\") {\n fct(feature, node);\n }\n }\n break;\n case \"metadata\":\n break;\n default:\n // on ne devrait jamais passer à ce niveau !?\n // eslint-disable-next-line no-console\n console.warn(\"nodename unknown :\", node.nodeName);\n break;\n }\n }\n }\n\n};\n\nexport default GPX;\n\n// Expose GPX as ol.source.GPXExtended. (for a build bundle)\nif (window.ol && window.ol.format) {\n window.ol.format.GPXExtended = GPX;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.format.GeoJSON;","// import openlayers\nimport olGeoJSON from \"ol/format/GeoJSON\";\n// import local\nimport Styling from \"./Styling\";\n\n/**\n * @classdesc\n *\n * Extended Styles GeoJSON format to export (internal use only !)\n *\n * SPEC\n * cf. https://github.com/mapbox/simplestyle-spec/\n * cf. https://geojson.org/\n *\n *\n * @constructor\n * @alias ol.format.GeoJSONExtended\n * @extends {ol.format.GeoJSON}\n * @type {ol.format.GeoJSONExtended}\n * @param {Object} options - Options\n * @param {Object} [options.defaultStyle] - Styles by default\n * @param {Object} [options.extensions] - Add properties to file root\n */\nvar GeoJSON = class GeoJSON extends olGeoJSON {\n\n /**\n * See {@link ol.format.GeoJSONExtended}\n * @module GeoJSONExtended\n * @alias module:~formats/GeoJSONExtended\n * @param {*} options - options\n * @example\n * import GeoJSONExtended from \"gpf-ext-ol/formats/GeoJSONExtended\"\n * ou \n * import { GeoJSONExtended } from \"gpf-ext-ol\"\n */\n constructor (options) {\n super(options);\n\n if (!(this instanceof GeoJSON)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this.options = options || {};\n\n // INFO\n // defaultStyle est un objet de type Style\n if (this.options.defaultStyle === null || typeof this.options.defaultStyle === \"undefined\") {\n this.options.defaultStyle = {};\n }\n\n this.source = null;\n\n return this;\n }\n\n /**\n * Read Extend Styles for Features.\n * This function overloads ol.format.GeoJSON.readFeatures ...\n *\n * @see ol.format.GeoJSON.prototype.readFeatures\n * @param {Object|String} source - Source.\n * @param {olx.format.ReadOptions} [options] - Options.\n * @return {Array.} Features.\n */\n readFeatures (source, options) {\n var features = super.readFeatures(source, options);\n\n // String ou Object\n if (typeof source === \"string\") {\n this.source = JSON.parse(source);\n } else if (source !== null) {\n this.source = source;\n }\n\n features.forEach((feature) => {\n var featureStyleFunction = feature.getStyleFunction();\n // existe t il déjà une fonction de style ?\n // si oui, on l'applique !\n if (featureStyleFunction) {\n var styles = featureStyleFunction.call(this, feature, 0);\n if (styles && styles.length !== 0) {\n feature.setStyle(styles[0]);\n }\n } else {\n // à ce niveau, il n'existe pas de styles, donc :\n // soit, on applique les styles par defaut\n // soit, on prend en compte les styles definis dans les properties / tag du fichier\n // les styles définis ecrasent les styles par defaut...\n var style = Styling.defineStyleFromProperties(feature);\n if (style) {\n feature.setStyle(style);\n } else {\n // si aucun style disponible, on utilisera le style par defaut defini\n // par l'utilisateur ou l'application\n var styleFunction = Styling.defineStyleFunctionByDefault(this.options.defaultStyle);\n if (styleFunction) {\n feature.setStyle(styleFunction);\n Styling.definePropertiesFromStyle(feature);\n }\n }\n }\n });\n\n return features;\n }\n\n /**\n * Write Extend Styles for Features.\n * This function overloads ol.format.GeoJSON.writeFeatures ...\n *\n * @see ol.format.GeoJSON.prototype.writeFeatures\n * @param {Array.} features - Features.\n * @param {Object} [options] - Options.\n *\n * @return {String} Result.\n */\n writeFeatures (features, options) {\n // on met à jour les properties de styles\n features.forEach(function (feature) {\n Styling.definePropertiesFromStyle(feature);\n });\n\n var geoJSONObject = this.writeFeaturesObject(features, options);\n\n // ajout des properties à la racine du fichier\n // ex. options : {\n // extensions : { /* liste des objets à ajouter */ }\n // }\n if (this.options.hasOwnProperty(\"extensions\")) {\n Object.assign(geoJSONObject, this.options.extensions);\n }\n\n return JSON.stringify(geoJSONObject);\n }\n\n /**\n * ...\n * @param {*} key ...\n * @returns {Object} json\n */\n readRootExtensions (key) {\n return this.source[key];\n }\n\n};\n\nexport default GeoJSON;\n\n// Expose GeoJSON as ol.source.GeoJSONExtended. (for a build bundle)\nif (window.ol && window.ol.format) {\n window.ol.format.GeoJSONExtended = GeoJSON;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.extent;","// import OpenLayers\nimport WMTSSource from \"ol/source/WMTS\";\nimport {\n extend,\n createEmpty as olCreateEmpty,\n getWidth as olGetWidth,\n intersects as olIntersects\n} from \"ol/extent\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Utils from \"../Utils/Helper\";\n\n/**\n * @classdesc\n *\n * Extended ol.source.WMTS.\n *\n * @constructor\n * @alias ol.source.WMTSExtended\n * @type {ol.source.WMTS}\n * @extends {ol.source.WMTS}\n * @param {Object} options - Options\n */\nvar WMTS = class WMTS extends WMTSSource {\n\n constructor (options) {\n // if (!(this instanceof WMTS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n\n // call constructor\n super(options);\n }\n\n /**\n * Return the GetFeatureInfo URL for the passed coordinate, resolution, and\n * projection. Return `undefined` if the GetFeatureInfo URL cannot be\n * constructed.\n * @param {ol.Coordinate} coordinate - Coordinate.\n * @param {Number} resolution - Resolution.\n * @param {ol.proj.Projection} projection - Projection.\n * @param {!Object} params - GetFeatureInfo params. `INFOFORMAT` at least should\n * be provided.\n * @return {String|undefined} GetFeatureInfo URL.\n */\n getFeatureInfoUrl (coordinate, resolution, projection, params) {\n // INFO\n // en fonction de la version d'openlayers, la méthode est differente :\n // - getGetFeatureInfoUrl en v5\n // - getFeatureInfoUrl en v6\n var pixelRatio = (this.options && this.options.tilePixelRatio) ? this.options.tilePixelRatio : 1;\n\n var tileGrid = this.tileGrid;\n var tileCoord = this.tileGrid.getTileCoordForCoordAndResolution(coordinate, resolution);\n\n // this code is duplicated from createFromWMTSTemplate function\n var getTransformedTileCoord = function (tileCoord, tileGrid, projection) {\n var tmpTileCoord = [0, 0, 0]; /* Note : [z(zoomLevel),x,y] */\n var tmpExtent = olCreateEmpty();\n var x = tileCoord[1];\n var y = tileCoord[2];\n var tileExtent = tileGrid.getTileCoordExtent(tileCoord);\n var extent = projection.getExtent();\n\n if (extent != null && projection.isGlobal()) {\n var numCols = Math.ceil(olGetWidth(extent) / olGetWidth(tileExtent));\n x = x % numCols;\n tmpTileCoord[0] = tileCoord[0];\n tmpTileCoord[1] = x;\n tmpTileCoord[2] = tileCoord[2];\n tileExtent = tileGrid.getTileCoordExtent(tmpTileCoord, tmpExtent);\n }\n if (!olIntersects(tileExtent, extent) /* || ol.extent.touches(tileExtent, extent) */) {\n return null;\n }\n return [tileCoord[0], x, y];\n };\n\n var tileExtent = tileGrid.getTileCoordExtent(tileCoord);\n var transformedTileCoord = getTransformedTileCoord(tileCoord, tileGrid, projection);\n\n if (tileGrid.getResolutions().length <= tileCoord[0]) {\n return undefined;\n }\n\n var tileResolution = tileGrid.getResolution(tileCoord[0]);\n var tileMatrix = tileGrid.getMatrixIds()[tileCoord[0]];\n\n var baseParams = {\n SERVICE : \"WMTS\",\n VERSION : \"1.0.0\",\n REQUEST : \"GetFeatureInfo\",\n LAYER : this.getLayer(),\n TILECOL : transformedTileCoord[1],\n TILEROW : transformedTileCoord[2],\n TILEMATRIX : tileMatrix,\n TILEMATRIXSET : this.getMatrixSet(),\n FORMAT : this.getFormat() || \"image/png\",\n STYLE : this.getStyle() || \"normal\"\n };\n\n Utils.assign(baseParams, params);\n\n /* var tileSize = tileGrid.getTileSize();\n var x = Math.floor(tileSize*((coordinate[0]-tileExtent[0])/(tileExtent[2]-tileExtent[0])));\n var y = Math.floor(tileSize*((tileExtent[3]-coordinate[1])/(tileExtent[3]-tileExtent[1]))); */\n\n var x = Math.floor((coordinate[0] - tileExtent[0]) / (tileResolution / pixelRatio));\n var y = Math.floor((tileExtent[3] - coordinate[1]) / (tileResolution / pixelRatio));\n\n /* patch parce que la fonction getTileCoordForCoordAndResolution(coords,res) d'Openlayers peut renvoyer\n une tuile dont l'étendue (getTileCoordExtent) ne contient pas le point passé en paramètre (coords) */\n var tileSize = tileGrid.getTileSize(tileCoord[0]);\n x = Math.min(x, (tileSize[0] | tileSize) - 1);\n y = Math.max(y, 0);\n\n baseParams[\"I\"] = x;\n baseParams[\"J\"] = y;\n\n var url = this.urls[0];\n\n var featureInfoUrl = Gp.Helper.normalyzeUrl(url, baseParams);\n\n return featureInfoUrl;\n };\n\n};\n\nexport default WMTS;\n\n// Expose WMTS as ol.source.WMTSExtended. (for a build bundle)\nif (window.ol && window.ol.source) {\n window.ol.source.WMTSExtended = WMTS;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.tilegrid.WMTS;","/**\n* @module LayerUtils\n* @alias module:~utils/LayerUtils\n* @description\n* ...\n*\n* @example\n* import LayerUtils from \"gpf-ext-ol/utils/LayerUtils\"\n* ou \n* import {LayerUtils} from \"gpf-ext-ol\n\n* LayerUtils.getZoomLevelFromScaleDenominator();\n* LayerUtils.getAttributions();\n* LayerUtils.intersects();\n*/\nvar LayerUtils = {\n\n /**\n * Obtenir le ZoomLevel à partir du ScaleDenominator\n * @function getZoomLevelFromScaleDenominator\n * @param {Number} scaleDenominator - the scale denominator\n * @param {String} crs - the crs\n *\n * @returns {Integer} zoom level\n */\n getZoomLevelFromScaleDenominator : function (scaleDenominator, crs) {\n // ------------------------------------------------- //\n // Code issu de l'API Geoportal/Catalogue/Config.js //\n // ------------------------------------------------- //\n // var configuration = Gp.Config;\n // var general = configuration.generalOptions;\n // var layers = configuration.layersContext;\n //\n // for (var tms in general.tileMatrixSets) {\n // var tileMatrixSet = general.tileMatrixSets[tms];\n // // IGN's WMTS bug : epsg:nnnn instead of EPSG:nnnn\n // var crs = tileMatrixSet.supportedCRS = tileMatrixSet.supportedCRS.replace(/epsg/,\"EPSG\");\n //\n // if (!Geoportal.Catalogue.CRSRESOLUTIONS.hasOwnProperty(crs)) {\n // var p= new OpenLayers.Projection(crs);\n // Geoportal.Catalogue.CRSRESOLUTIONS[crs]= [];\n // var matrixIds= tileMatrixSet.matrixIds;\n // for (var i= 0, li= matrixIds.length; i} params.extent - map current geographical extent (EPSG:4326) : [top, left, bottom, right] = [maxy, minx, miny, maxx]\n * @param {Number} params.zoom - map current zoom\n * @param {String} params.crs - map current projection code (ex \"EPSG:2154\")\n * @param {Boolean} params.visibility - layer visibility\n * @param {Gp.Services.Config.Originator} params.originators - resource originators (from Gp.Config.layers[].originators)\n * @returns {Object} attributions - associative array, mapping originators url (keys) with their properties : html attributions elements\n */\n getAttributions : function (params) {\n var zoom = params.zoom;\n\n var attributions = [];\n\n if (params.originators != null && params.visibility) {\n // drawLogo = boolean, true if attribution should be displayed (zoom, extent), false otherwise\n var drawLogo;\n for (var j = 0, jl = params.originators.length; j < jl; j++) {\n drawLogo = true;\n var originator = params.originators[j];\n\n var constraints = params.originators[j].constraints || [];\n for (var k = 0, kl = constraints.length; k < kl; k++) {\n var constraint = constraints[k];\n drawLogo = true;\n\n var minZoomLevel = this.getZoomLevelFromScaleDenominator(constraint.maxScaleDenominator, params.crs);\n var maxZoomLevel = this.getZoomLevelFromScaleDenominator(constraint.minScaleDenominator, params.crs) || 21;\n\n // min zoom constraints\n if (minZoomLevel && (minZoomLevel > zoom)) {\n drawLogo = false;\n }\n\n // max zoom constraints\n if (drawLogo && maxZoomLevel && (maxZoomLevel < zoom)) {\n drawLogo = false;\n }\n\n // bbox constraints\n var bbox = constraint.bbox;\n if (drawLogo && bbox) {\n drawLogo = false;\n var viewExtent = params.extent;\n if (viewExtent) {\n var bounds = [bbox.top, bbox.left, bbox.bottom, bbox.right];\n if (this.intersects(viewExtent, bounds)) {\n // at least one constraint matches the map ones\n drawLogo = true;\n break;\n }\n }\n }\n }\n\n if (drawLogo) {\n // on a un originator qui correspond au zoom et à l'étendue.\n\n var logo = originator.logo;\n var url = originator.url;\n var name = originator.name ? originator.name : \"\";\n var text = originator.attribution;\n\n var container = document.createElement(\"div\");\n container.className = \"gp-control-attribution\";\n\n // on crée un lien dans tous les cas (même s'il ne pointe pas vers une référence), pour avoir accès à la class CSS (pour surcharge)\n var link = null;\n link = document.createElement(\"a\");\n link.className = \"gp-control-attribution-link\";\n link.target = \"_blank\";\n container.appendChild(link);\n if (url) {\n link.href = url;\n }\n\n var bImage = !!(logo);\n var image = null;\n // si on a un logo, on l'affiche à l'interieur du lien\n if (bImage) {\n image = document.createElement(\"img\");\n if (link) {\n image.className = \"gp-control-attribution-image\";\n link.appendChild(image);\n } else {\n image.className = \"\";\n container.appendChild(image);\n }\n image.src = logo;\n image.title = text || name;\n image.style.height = \"30px\";\n image.style.width = \"30px\";\n } else {\n // sinon, on affiche le nom de l'originator, ou sa description ou l'url.\n if (name) {\n link.textContent = name;\n } else if (text) {\n link.textContent = text;\n } else if (url) {\n link.textContent = url;\n } else {\n link.textContent = \"\";\n }\n }\n\n attributions.push(container.innerHTML + \" \");\n }\n }\n }\n\n return attributions;\n },\n\n /**\n * Determines if one extent (extent1) intersects another (extent2)\n *\n * @function intersects\n * @param {Array.} extent1 - First extent : [top, left, bottom, right] = [maxy, minx, miny, maxx]\n * @param {Array.} extent2 - Second extent : [top, left, bottom, right] = [maxy, minx, miny, maxx]\n * @return {Boolean} intersects - True if the two extents intersect, false otherwise.\n */\n intersects : function (extent1, extent2) {\n var intersectsX = (extent1[1] <= extent2[3]) && (extent2[1] <= extent1[3]);\n var intersectsY = (extent1[2] <= extent2[0]) && (extent2[2] <= extent1[0]);\n return intersectsX && intersectsY;\n }\n};\n\nexport default LayerUtils;\n","/**\n * @module Config\n * @alias module:~utils/Config\n * @private\n * @description\n * ...\n *\n * @example\n * isConfigLoaded();\n */\nvar Config = {\n\n /**\n * Config\n *\n * @public\n * @type {Object}\n */\n configuration : {},\n\n /**\n * Check if the configuration is loaded\n *\n * @returns {Boolean} True if Config is loaded, false otherwise\n */\n isConfigLoaded : function () {\n // config already loaded !\n if (this.configuration && Object.keys(this.configuration).length !== 0) {\n return true;\n }\n var scope = typeof window !== \"undefined\" ? window : typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : {};\n if (scope.Gp && scope.Gp.Config && scope.Gp.Config.layers && Object.keys(scope.Gp.Config.layers).length !== 0) {\n /** ts-syntax */ (this.configuration) = scope.Gp.Config;\n return true;\n }\n return false;\n }\n\n};\n\nexport default Config;\n","import Gp from \"geoportal-access-lib\";\n// import OpenLayers\nimport WMTSTileGrid from \"ol/tilegrid/WMTS\";\n// import local with ol dependencies\nimport WMTSExtended from \"../Sources/WMTS\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport LayerUtils from \"../Utils/LayerUtils\";\nimport Logger from \"../Utils/LoggerByDefault\";\nimport Config from \"../Utils/Config\";\n// package.json (extract version)\nimport Pkg from \"../../../package.json\";\n\nvar logger = Logger.getLogger(\"sourcewmts\");\n\n/**\n * @classdesc\n * Geoportal WMTS source creation (inherit from ol.source.WMTS)\n *\n * @constructor\n * @alias ol.source.GeoportalWMTS\n * @type {ol.source.GeoportalWMTS}\n * @extends {WMTSExtended}\n * @param {Object} options - options for function call.\n * @param {String} options.layer - Layer name (e.g. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {Object} [options.configuration] - configuration (cf. example) \n * @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n * @param {String} [options.apiKey] - Access key to Geoportal platform\n * @param {Array} [options.legends] - Legends objects associated to the layer\n * @param {Array} [options.metadata] - Metadata objects associated to the layer\n * @param {String} [options.title] - title of the layer\n * @param {String} [options.description] - description of the layer\n * @param {String} [options.quicklookUrl] - quicklookUrl of the layer\n * @param {Object} [options.olParams] - other options for ol.source.WMTS function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.WMTS.html ol.source.WMTS})\n * @example\n * var sourceWMTS = new ol.source.GeoportalWMTS({\n * layer : \"ORTHOIMAGERY.ORTHOPHOTOS\"\n * });\n */\nvar SourceWMTS = class SourceWMTS extends WMTSExtended {\n\n constructor (options) {\n // if (!(this instanceof SourceWMTS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n\n // check layer params\n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n\n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n\n // configuration de la ressource\n var layerCfg = options.configuration;\n var wmtsParams = (layerCfg) ? layerCfg.params : null;\n var apiKey = options.apiKey;\n \n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n\n var layerId = Config.configuration.getLayerId(options.layer, \"WMTS\");\n if (!layerId) {\n throw new Error(`ERROR : WMTS Layer ID ${options.layer} cannot be found in Geoportal Configuration. Make sure that this resource is included in your contract key.`);\n }\n\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : WMTS Layer configuration cannot be found in Geoportal.\");\n }\n\n apiKey = Config.configuration.getLayerKey(layerId)[0];\n wmtsParams = Config.configuration.getLayerParams(options.layer, \"WMTS\");\n }\n\n // si ssl = false on fait du http\n // par défaut, ssl = true, on fait du https\n var protocol = options.ssl === false ? \"http://\" : \"https://\";\n\n var urlParams = {\n \"gp-ol-ext\" : Pkg.olExtVersion || Pkg.version\n };\n if (wmtsParams.url.includes(\"/private/\")) {\n // si l'url est privée\n // Ajout de la clef d'API fournie par l'utilisateur en prioritée\n // ou récupérée depuis la configuration\n var key = options.apiKey || apiKey;\n if (!key) {\n throw new Error(\"ERROR : WMS Layer apiKey cannot be found in Geoportal Configuration.\");\n }\n urlParams[\"apikey\"] = key;\n }\n\n var wmtsSourceOptions = {\n // tracker extension openlayers\n // FIXME : gp-ext version en mode AMD\n url : Gp.Helper.normalyzeUrl(wmtsParams.url.replace(/(http|https):\\/\\//, protocol), urlParams, false),\n version : wmtsParams.version,\n style : wmtsParams.styles,\n format : wmtsParams.format,\n projection : wmtsParams.projection,\n maxZoom : LayerUtils.getZoomLevelFromScaleDenominator(wmtsParams.minScale),\n layer : options.layer,\n matrixSet : wmtsParams.TMSLink,\n tileGrid : new WMTSTileGrid({\n resolutions : wmtsParams.nativeResolutions,\n matrixIds : wmtsParams.matrixIds,\n origin : [Object.values(wmtsParams.tileMatrices)[0].topLeftCorner.x, Object.values(wmtsParams.tileMatrices)[0].topLeftCorner.y]\n }),\n crossOrigin : \"anonymous\"\n };\n\n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(wmtsSourceOptions, options.olParams);\n\n // on surcharge les originators (non récupérés depuis configuration de la couche)\n if (options.olParams && !wmtsParams.originators) {\n wmtsParams.originators = options.olParams.attributions;\n }\n \n // returns a WMTS object, that inherits from WMTSExtended.\n super(wmtsSourceOptions);\n\n // add originators to layer source (to be updated by Originators control)\n this._originators = wmtsParams.originators;\n\n // add legends and metadata (to be added to LayerSwitcher control)\n this._legends = options.legends || wmtsParams.legends;\n this._metadata = options.metadata || wmtsParams.metadata;\n this._description = options.description || wmtsParams.description;\n this._title = options.title || wmtsParams.title;\n this._quicklookUrl = options.quicklookUrl || wmtsParams.quicklookUrl;\n\n this.name = options.layer;\n this.service = \"WMTS\";\n \n return this;\n }\n\n};\n\nexport default SourceWMTS;\n\n// Expose SourceWMTS as ol.source.GeoportalWMTS. (for a build bundle)\nif (window.ol && window.ol.source) {\n window.ol.source.GeoportalWMTS = SourceWMTS;\n}\n","import Gp from \"geoportal-access-lib\";\n// import OpenLayers\nimport TileWMSSource from \"ol/source/TileWMS\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Logger from \"../Utils/LoggerByDefault\";\nimport Config from \"../Utils/Config\";\n// package.json (extract version)\nimport Pkg from \"../../../package.json\";\n\nvar logger = Logger.getLogger(\"sourcewms\");\n\n/**\n * @classdesc\n * Geoportal tile WMS source creation (inherit from ol.source.TileWMS)\n *\n * @constructor\n * @alias ol.source.GeoportalWMS\n * @type {ol.source.GeoportalWMS}\n * @extends {ol.source.TileWMS}\n * @param {Object} options - options for function call.\n * @param {String} options.layer - Layer name (e.g. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {Object} [options.configuration] - configuration (cf. example) \n * @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n * @param {String} [options.apiKey] - Access key to Geoportal platform\n * @param {Array} [options.legends] - Legends objects associated to the layer\n * @param {Array} [options.metadata] - Metadata objects associated to the layer\n * @param {String} [options.title] - title of the layer\n * @param {String} [options.description] - description of the layer\n * @param {String} [options.quicklookUrl] - quicklookUrl of the layer\n * @param {Object} [options.olParams] - other options for ol.source.TileWMS function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.TileWMS.html ol.source.TileWMS})\n * @example\n * var sourceWMS = new ol.source.GeoportalWMS({\n * layer : \"ORTHOIMAGERY.ORTHOPHOTOS\"\n * });\n */\nvar SourceWMS = class SourceWMS extends TileWMSSource {\n\n constructor (options) {\n // if (!(this instanceof SourceWMS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n\n // check layer params\n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n\n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n\n // configuration de la ressource\n var layerCfg = options.configuration;\n var wmsParams = (layerCfg) ? layerCfg.params : null;\n var apiKey = options.apiKey;\n\n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n\n var layerId = Config.configuration.getLayerId(options.layer, \"WMS\");\n if (!layerId) {\n throw new Error(`ERROR : WMS Layer ID ${options.layer} cannot be found in Geoportal Configuration. Make sure that this resource is included in your contract key.`);\n }\n\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : WMS Layer configuration cannot be found in Geoportal.\");\n }\n\n apiKey = Config.configuration.getLayerKey(layerId)[0];\n wmsParams = Config.configuration.getLayerParams(options.layer, \"WMS\");\n }\n\n // si ssl = false on fait du http\n // par défaut, ssl = true, on fait du https\n var protocol = options.ssl === false ? \"http://\" : \"https://\";\n\n var urlParams = {\n \"gp-ol-ext\" : Pkg.olExtVersion || Pkg.version\n };\n if (wmsParams.url.includes(\"/private/\")) {\n // si l'url est privée\n // Ajout de la clef d'API fournie par l'utilisateur en prioritée\n // ou récupérée depuis la configuration\n var key = options.apiKey || apiKey;\n if (!key) {\n throw new Error(\"ERROR : WMS Layer apiKey cannot be found in Geoportal Configuration.\");\n }\n urlParams[\"apikey\"] = key;\n }\n\n var wmsSourceOptions = {\n // tracker extension openlayers\n url : Gp.Helper.normalyzeUrl(wmsParams.url.replace(/(http|https):\\/\\//, protocol), urlParams, false),\n params : {\n SERVICE : \"WMS\",\n LAYERS : options.layer,\n VERSION : wmsParams.version,\n STYLES : wmsParams.styles,\n FORMAT : wmsParams.format\n },\n crossOrigin : \"anonymous\"\n // ,\n // attributions : [\n // new ol.Attribution({\n // html : \"\"\n // })\n // ]\n };\n\n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(wmsSourceOptions, options.olParams);\n\n // on surcharge les originators (non récupérés depuis configuration de la couche)\n if (options.olParams && !wmsParams.originators) {\n wmsParams.originators = options.olParams.attributions;\n }\n\n // returns a WMS object, that inherits from ol.source.TileWMS.\n super(wmsSourceOptions);\n\n // save originators (to be updated by Originators control)\n this._originators = wmsParams.originators;\n\n // save legends and metadata (to be added to LayerSwitcher control)\n this._legends = options.legends || wmsParams.legends;\n this._metadata = options.metadata || wmsParams.metadata;\n this._title = options.title || wmsParams.title;\n this._description = options.description || wmsParams.description;\n this._quicklookUrl = options.quicklookUrl || wmsParams.quicklookUrl;\n\n this.name = options.layer;\n this.service = \"WMS\";\n\n return this;\n }\n\n};\n\nexport default SourceWMS;\n\n// Expose SourceWMS as ol.source.GeoportalWMTS. (for a build bundle)\nif (window.ol && window.ol.source) {\n window.ol.source.GeoportalWMS = SourceWMS;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.loadingstrategy;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.tilegrid;","import VectorSource from \"ol/source/Vector\";\nimport GeoJSON from \"ol/format/GeoJSON\";\nimport { tile as olLoadingstrategyTile } from \"ol/loadingstrategy\";\nimport * as olTilegrid from \"ol/tilegrid\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Logger from \"../Utils/LoggerByDefault\";\nimport Config from \"../Utils/Config\";\n// package.json (extract version)\nimport Pkg from \"../../../package.json\";\n\nvar logger = Logger.getLogger(\"sourcewfs\");\n\n/**\n * @classdesc\n * Geoportal tile WMS source creation (inherit from ol.source.TileWMS)\n *\n * @constructor\n * @alias ol.source.GeoportalWFS\n * @type {ol.source.GeoportalWFS}\n * @extends {ol.source.Vector}\n * @param {Object} options - options for function call.\n * @param {String} options.layer - Layer name (e.g. \"\")\n * @param {Number} [options.maxFeatures] - maximum features (max: 5000) \n * @param {Object} [options.configuration] - configuration (cf. example) \n * @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n * @param {String} [options.apiKey] - Access key to Geoportal platform\n * @param {Array} [options.legends] - Legends objects associated to the layer\n * @param {Array} [options.metadata] - Metadata objects associated to the layer\n * @param {String} [options.title] - title of the layer\n * @param {String} [options.description] - description of the layer\n * @param {String} [options.quicklookUrl] - quicklookUrl of the layer\n * @param {Object} [options.olParams] - other options for ol.source.Vector function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.Vector.html ol.source.Vector})\n * @example\n * var sourceWFS = new ol.source.GeoportalWFS({\n * layer: \"\",\n * maxFeatures: 500,\n * olParams: {}\n * });\n */\nvar SourceWFS = class SourceWFS extends VectorSource {\n\n constructor (options) {\n // check layer params\n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n\n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n\n // configuration de la ressource\n var layerCfg = options.configuration;\n var wfsParams = (layerCfg) ? layerCfg.params : null;\n var apiKey = options.apiKey;\n\n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n\n var layerId = Config.configuration.getLayerId(options.layer, \"WFS\");\n if (!layerId) {\n throw new Error(`ERROR : WFS Layer ID ${options.layer} cannot be found in Geoportal Configuration. Make sure that this resource is included in your contract key.`);\n }\n\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : WFS Layer configuration cannot be found in Geoportal.\");\n }\n\n apiKey = Config.configuration.getLayerKey(layerId)[0];\n wfsParams = Config.configuration.getLayerParams(options.layer, \"WFS\");\n }\n\n // si ssl = false on fait du http\n // par défaut, ssl = true, on fait du https\n var protocol = options.ssl === false ? \"http://\" : \"https://\";\n\n var urlParams = {\n \"gp-ol-ext\" : Pkg.olExtVersion || Pkg.version\n };\n if (wfsParams.url.includes(\"/private/\")) {\n // si l'url est privée\n // Ajout de la clef d'API fournie par l'utilisateur en prioritée\n // ou récupérée depuis la configuration\n var key = options.apiKey || apiKey;\n if (!key) {\n throw new Error(\"ERROR : WFS Layer apiKey cannot be found in Geoportal Configuration.\");\n }\n urlParams[\"apikey\"] = key;\n }\n\n var loadFeatures = (self, url, success, failure) => {\n const xhr = new XMLHttpRequest();\n xhr.open(\"GET\", url);\n const onError = function () {\n self.removeLoadedExtent(extent);\n failure();\n };\n xhr.onerror = onError;\n xhr.onload = function () {\n if (xhr.status == 200) {\n var response = JSON.parse(xhr.responseText);\n const features = self.getFormat().readFeatures(response);\n self.addFeatures(features);\n success(features);\n // next page ?\n // \"links\": [\n // {\n // \"title\": \"next page\",\n // \"type\": \"application/json\",\n // \"rel\": \"next\",\n // \"href\": \"https://data.geopf.fr/wfs/wfs?GP-OL-EXT=1.0.0-beta.0-260&TYPENAME=BDTOPO_V3%3Abatiment&REQUEST=GetFeature&BBOX=261720.38484844193%2C6249491.432596011%2C262943.3773010048%2C6250714.425048574%2CEPSG%3A3857&SRSNAME=EPSG%3A3857&OUTPUTFORMAT=application%2Fjson&VERSION=2.0.0&MAXFEATURES=500&COUNT=500&SERVICE=WFS&STARTINDEX=500\"\n // }\n // ],\n if (response.links) {\n for (let i = 0; i < response.links.length; i++) {\n const link = response.links[i];\n if (link.rel === \"next\") {\n loadFeatures(self, link.href, success, failure);\n }\n }\n }\n } else {\n onError();\n }\n };\n xhr.send();\n };\n var wfsSourceOptions = {\n format : new GeoJSON(),\n loader : function (extent, resolution, projection, success, failure) {\n var self = this;\n const maxFeatures = options.maxFeatures;\n const layerName = options.layer;\n const proj = projection.getCode();\n const url = Gp.Helper.normalyzeUrl(wfsParams.url.replace(/(http|https):\\/\\//, protocol), urlParams, false) +\n \"&SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&\" +\n \"typename=\" + layerName + \"&\" +\n \"outputFormat=application/json&srsname=\" + proj + \"&\" +\n \"bbox=\" + extent.join(\",\") + \",\" + proj\n + \"&maxFeatures=\" + maxFeatures + \"&count=\" + maxFeatures + \"&startIndex=0\";\n\n loadFeatures(self, url, success, failure);\n },\n strategy : olLoadingstrategyTile(olTilegrid.createXYZ({\n minZoom : options.olParams.minZoom || 15, \n maxZoom : options.olParams.maxZoom || 21, \n tileSize : 512\n })),\n crossOrigin : \"anonymous\"\n };\n\n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(wfsSourceOptions, options.olParams);\n\n // on surcharge les originators (non récupérés depuis configuration de la couche)\n if (options.olParams && !wfsParams.originators) {\n wfsParams.originators = options.olParams.attributions;\n }\n\n // returns a WMS object, that inherits from ol.source.TileWMS.\n super(wfsSourceOptions);\n\n // save originators (to be updated by Originators control)\n this._originators = wfsParams.originators;\n\n // save legends and metadata (to be added to LayerSwitcher control)\n this._legends = options.legends || wfsParams.legends;\n this._metadata = options.metadata || wfsParams.metadata;\n this._title = options.title || wfsParams.title;\n this._description = options.description || wfsParams.description;\n this._quicklookUrl = options.quicklookUrl || wfsParams.quicklookUrl;\n\n this.name = options.layer;\n this.service = \"WFS\";\n\n return this;\n }\n \n};\n\nexport default SourceWFS;\n\n// Expose SourceWFS as ol.source.GeoportalWFTS. (for a build bundle)\nif (window.ol && window.ol.source) {\n window.ol.source.GeoportalWFS = SourceWFS;\n}","const __WEBPACK_NAMESPACE_OBJECT__ = ol.proj;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.Tile;","// import openlayers\nimport { get as olGetProj } from \"ol/proj\";\nimport TileLayer from \"ol/layer/Tile\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Config from \"../Utils/Config\";\n// import local with ol dependencies\nimport SourceWMTS from \"./SourceWMTS\";\n\n/**\n* @classdesc\n* Geoportal LayerWMTS source creation (inherit from ol.layer.Tile)\n*\n* @constructor\n* @extends {ol.layer.Tile}\n* @alias ol.layer.GeoportalWMTS\n* @type {ol.layer.GeoportalWMTS}\n* @param {Object} options - options for function call.\n* @param {String} options.layer - Layer name (e.g. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n* @param {Object} [options.configuration] - configuration (cf. example) \n* @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n* @param {String} [options.apiKey] - Access key to Geoportal platform\n* @param {Object} [options.olParams] - other options for ol.layer.Tile function (see {@link http://openlayers.org/en/latest/apidoc/ol.layer.Tile.html ol.layer.Tile})\n* @param {Object} [options.olParams.sourceParams] - other options for ol.source.WMTS function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.WMTS.html ol.source.WMTS})\n* @example\n* var layerWMTS = new ol.layer.GeoportalWMTS({\n* layer : \"ORTHOIMAGERY.ORTHOPHOTOS\"\n* });\n* layerWMTS.getLegends();\n* layerWMTS.getMetadata();\n* layerWMTS.getTitle();\n* layerWMTS.getDescription();\n* layerWMTS.getQuicklookUrl();\n* layerWMTS.getOriginators();\n* \n* // Ex. configuration object for WMTS Layer\n* {\n* \"name\" : \"GEOGRAPHICALGRIDSYSTEMS.MAPS.OVERVIEW\",\n* \"globalConstraint\" : {\n* \"maxScaleDenominator\" : 279541132.01435894,\n* \"minScaleDenominator\" : 2183915.0938621787,\n* \"bbox\" : {\n* \"left\" : -179.5,\n* \"right\" : 179.5,\n* \"top\" : 75,\n* \"bottom\" : -75\n* }\n* },\n* \"params\" : {\n* \"url\" : \"https:*data.geopf.fr/wmts\",\n* \"styles\" : \"normal\",\n* \"version\" : \"1.0.0\",\n* \"format\" : \"image/jpeg\",\n* \"projection\" : \"EPSG:3857\",\n* \"minScale\" : 2183915.0938621787,\n* \"maxScale\" : 279541132.01435894,\n* \"extent\" : {\n* \"left\" : -179.5,\n* \"right\" : 179.5,\n* \"top\" : 75,\n* \"bottom\" : -75\n* },\n* \"legends\" : [\n* {\n* \"format\" : \"image/jpeg\",\n* \"url\" : \"https:*data.geopf.fr/annexes/ressources/legendes/LEGEND.jpg\",\n* \"minScaleDenominator\" : \"200\"\n* }\n* ],\n* \"title\" : \"Carte Mondiale pour la mini-vue\",\n* \"description\" : \"Carte Mondiale pour la mini-vue\",\n* \"tileMatrixSetLimits\" : {\n* \"1\" : {\n* \"minTileRow\" : \"0\",\n* \"maxTileRow\" : \"1\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"1\"\n* },\n* \"2\" : {\n* \"minTileRow\" : \"0\",\n* \"maxTileRow\" : \"3\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"3\"\n* },\n* \"3\" : {\n* \"minTileRow\" : \"1\",\n* \"maxTileRow\" : \"6\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"7\"\n* },\n* \"4\" : {\n* \"minTileRow\" : \"2\",\n* \"maxTileRow\" : \"13\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"15\"\n* },\n* \"5\" : {\n* \"minTileRow\" : \"5\",\n* \"maxTileRow\" : \"26\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"31\"\n* },\n* \"6\" : {\n* \"minTileRow\" : \"11\",\n* \"maxTileRow\" : \"52\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"63\"\n* },\n* \"7\" : {\n* \"minTileRow\" : \"22\",\n* \"maxTileRow\" : \"105\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"127\"\n* },\n* \"8\" : {\n* \"minTileRow\" : \"45\",\n* \"maxTileRow\" : \"210\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"255\"\n* }\n* },\n* \"TMSLink\" : \"PM_1_8\",\n* \"matrixIds\" : [\n* \"1\",\n* \"2\",\n* \"3\",\n* \"4\",\n* \"5\",\n* \"6\",\n* \"7\",\n* \"8\"\n* ],\n* \"tileMatrices\" : {\n* \"1\" : {\n* \"matrixId\" : \"1\",\n* \"matrixHeight\" : 2,\n* \"matrixWidth\" : 2,\n* \"scaleDenominator\" : 279541132.01435894,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"2\" : {\n* \"matrixId\" : \"2\",\n* \"matrixHeight\" : 4,\n* \"matrixWidth\" : 4,\n* \"scaleDenominator\" : 139770566.0071793,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"3\" : {\n* \"matrixId\" : \"3\",\n* \"matrixHeight\" : 8,\n* \"matrixWidth\" : 8,\n* \"scaleDenominator\" : 69885283.00358965,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"4\" : {\n* \"matrixId\" : \"4\",\n* \"matrixHeight\" : 16,\n* \"matrixWidth\" : 16,\n* \"scaleDenominator\" : 34942641.50179486,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"5\" : {\n* \"matrixId\" : \"5\",\n* \"matrixHeight\" : 32,\n* \"matrixWidth\" : 32,\n* \"scaleDenominator\" : 17471320.75089743,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"6\" : {\n* \"matrixId\" : \"6\",\n* \"matrixHeight\" : 64,\n* \"matrixWidth\" : 64,\n* \"scaleDenominator\" : 8735660.375448715,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"7\" : {\n* \"matrixId\" : \"7\",\n* \"matrixHeight\" : 128,\n* \"matrixWidth\" : 128,\n* \"scaleDenominator\" : 4367830.1877243575,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"8\" : {\n* \"matrixId\" : \"8\",\n* \"matrixHeight\" : 256,\n* \"matrixWidth\" : 256,\n* \"scaleDenominator\" : 2183915.0938621787,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* }\n* },\n* \"nativeResolutions\" : [\n* \"78271.51696402048\",\n* \"39135.75848201023\",\n* \"19567.87924100512\",\n* \"9783.939620502561\",\n* \"4891.969810251280\",\n* \"2445.984905125640\",\n* \"1222.992452562820\",\n* \"611.4962262814100\"\n* ]\n* }\n*/\nvar LayerWMTS = class LayerWMTS extends TileLayer {\n \n /**\n * See {@link ol.layer.GeoportalWMTS}\n * @module LayerWMTS\n * @alias module:~layers/GeoportalWMTS\n * @param {*} options - options\n * @example\n * import LayerWMTS from \"gpf-ext-ol/layers/LayerWMTS\n * ou \n * import { LayerWMTS } from \"gpf-ext-ol\"\n */\n constructor (options) {\n // if (!(this instanceof LayerWMTS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n \n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n \n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n \n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n \n // configuration de la ressource\n var layerCfg = options.configuration;\n \n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config chargée\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n // récupération des autres paramètres nécessaires à la création de la layer\n var layerId = Config.configuration.getLayerId(options.layer, \"WMTS\");\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : Layer ID not found into the catalogue !?\");\n }\n }\n \n // création de la source WMTS\n var olSourceParams;\n if (options.olParams && options.olParams.sourceParams) {\n olSourceParams = options.olParams.sourceParams;\n }\n var wmtsSource = new SourceWMTS({\n layer : options.layer,\n configuration : options.configuration,\n ssl : options.ssl,\n apiKey : options.apiKey,\n olParams : olSourceParams\n });\n \n var layerTileOptions = {\n source : wmtsSource\n };\n \n // si le param layer n'a pas été renseigné lors de la création de la source,\n // c'est que l'identifiant de la couche n'a pas été trouvé. on passe donc la recherche des paramètres.\n if (wmtsSource.getLayer() !== undefined) {\n if (layerCfg.globalConstrainWFSts && layerCfg.globalConstraints.projection) {\n /* INFO : désactivation temporaire de l'étendue, car certaines étendues (trop grandes ?)\n provoquent quelques bugs d'affichage (zoom > 16 par exemple) */\n // récupération de l'étendue (en EPSG:4326), et reprojection dans la proj de la couche\n // var geobbox = [\n // layerCfg.globalConstraints.extent.left,\n // layerCfg.globalConstraints.extent.bottom,\n // layerCfg.globalConstraints.extent.right,\n // layerCfg.globalConstraints.extent.top\n // ];\n // layerTileOptions.extent = ol.proj.transformExtent(geobbox, \"EPSG:4326\", layerCfg.globalConstraints.projection);\n \n // récupération des résolutions min et max\n var p;\n // on récupère tout d'abord la projection\n if (typeof layerCfg.globalConstraints.projection === \"string\") {\n p = olGetProj(layerCfg.globalConstraints.projection);\n }\n // puis, selon l'unité de la projection, on calcule la résolution correspondante\n if (p && p.getUnits()) {\n if (p.getUnits() === \"m\") {\n /* fixme : fix temporaire pour gérer les min/max scaledenominator qui sont arrondis dans la configuration !\n * on les arrondit respectivement à l'unité inférieure et supérieure\n * pour que les couches soient bien disponibles aux niveaux de zoom correspondants */\n // info : 1 pixel = 0.00028 m\n layerTileOptions.minResolution = (layerCfg.globalConstraints.minScale - 1) * 0.00028;\n layerTileOptions.maxResolution = (layerCfg.globalConstraints.maxScale + 1) * 0.00028;\n } else if (p.getUnits() === \"degrees\") {\n /* fixme : fix temporaire pour gérer les min/max scaledenominator qui sont arrondis dans la configuration !\n * on les arrondit respectivement à l'unité inférieure et supérieure\n * pour que les couches soient bien disponibles aux niveaux de zoom correspondants */\n // info : 6378137 * 2 * pi / 360 = rayon de la terre (ellipsoide WGS84)\n layerTileOptions.minResolution = (layerCfg.globalConstraints.minScale - 1) * 0.00028 * 180 / (Math.PI * 6378137);\n layerTileOptions.maxResolution = (layerCfg.globalConstraints.maxScale + 1) * 0.00028 * 180 / (Math.PI * 6378137);\n }\n }\n }\n }\n \n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(layerTileOptions, options.olParams);\n \n // création d'une ol.layer.Tile avec les options récupérées ci-dessus.\n super(layerTileOptions);\n \n this.name = options.layer;\n this.service = \"WMTS\";\n this.config = layerCfg;\n\n return this;\n }\n \n /**\n * Get configuration\n * @returns {Object} - configuration\n */\n getConfiguration () {\n return this.config;\n }\n \n /**\n * Get legends\n * @returns {Array} - legends\n */\n getLegends () {\n return this.getSource()._legends;\n }\n\n /**\n * Get metadata\n * @returns {Array} - metadata\n */\n getMetadata () {\n return this.getSource()._metadata;\n }\n\n /**\n * Get description\n * @returns {String} - description\n */\n getDescription () {\n return this.getSource()._description;\n }\n\n /**\n * Get title\n * @returns {String} - title\n */\n getTitle () {\n return this.getSource()._title;\n }\n\n /**\n * Get quicklook url\n * @returns {String} - quicklook\n */\n getQuicklookUrl () {\n return this.getSource()._quicklookUrl;\n }\n\n /**\n * Get originators\n * @returns {Array} - originators\n */\n getOriginators () {\n return this.getSource()._originators;\n }\n \n};\n\nexport default LayerWMTS;\n\n// Expose LayerWMTS as ol.layerGeoportalWMTS. (for a build bundle)\nif (window.ol && window.ol.layer) {\n window.ol.layer.GeoportalWMTS = LayerWMTS;\n}\n","// import openlayers\nimport {\n get as olGetProj,\n transformExtent as olTransformExtentProj\n} from \"ol/proj\";\nimport TileLayer from \"ol/layer/Tile\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Config from \"../Utils/Config\";\n// import local with ol dependencies\nimport SourceWMS from \"./SourceWMS\";\n\n/**\n * @classdesc\n * Geoportal LayerWMS source creation (inherit from ol.layer.Tile)\n *\n * @constructor\n * @extends {ol.layer.Tile}\n * @alias ol.layer.GeoportalWMS\n * @type {ol.layer.GeoportalWMS}\n * @param {Object} options - options for function call.\n * @param {String} options.layer - Layer name (e.g. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {Object} [options.configuration] - configuration (cf. example) \n * @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n * @param {String} [options.apiKey] - Access key to Geoportal platform\n * @param {Object} [options.olParams] - other options for ol.layer.Tile function (see {@link http://openlayers.org/en/latest/apidoc/ol.layer.Tile.html ol.layer.Tile})\n * @param {Object} [options.olParams.sourceParams] - other options for ol.source.TileWMS function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.TileWMS.html ol.source.TileWMS})\n * @example\n * var layerWMS = new ol.layer.GeoportalWMS({\n * layer : \"ORTHOIMAGERY.ORTHOPHOTOS\"\n * });\n * \n * layerWMS.getLegends();\n * layerWMS.getMetadata();\n * layerWMS.getTitle();\n * layerWMS.getDescription();\n * layerWMS.getQuicklookUrl();\n * layerWMS.getOriginators();\n */\nvar LayerWMS = class LayerWMS extends TileLayer {\n\n /**\n * See {@link ol.layer.GeoportalWMS}\n * @module LayerWMS\n * @alias module:~layers/GeoportalWMS\n * @param {*} options - options\n * @example\n * import LayerWMS from \"gpf-ext-ol/layers/LayerWMS\"\n * ou \n * import { LayerWMS } from \"gpf-ext-ol\"\n */\n constructor (options) {\n // if (!(this instanceof LayerWMS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n\n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n\n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n\n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n\n // configuration de la ressource\n var layerCfg = options.configuration;\n\n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config chargée\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n // récupération des autres paramètres nécessaires à la création de la layer\n var layerId = Config.configuration.getLayerId(options.layer, \"WMS\");\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : Layer ID not found into the catalogue !?\");\n }\n }\n\n // création de la source WMS\n var olSourceParams;\n if (options.olParams && options.olParams.sourceParams) {\n olSourceParams = options.olParams.sourceParams;\n }\n var wmsSource = new SourceWMS({\n layer : options.layer,\n configuration : options.configuration,\n ssl : options.ssl,\n apiKey : options.apiKey,\n olParams : olSourceParams\n });\n\n var layerTileOptions = {\n source : wmsSource\n };\n\n // si le param LAYERS n'a pas été renseigné lors de la création de la source,\n // c'est que l'identifiant de la couche n'a pas été trouvé. on passe donc la recherche des paramètres.\n if (wmsSource.getParams().LAYERS !== undefined) {\n /* INFO : on ne récupère l'emprise de la couche que lorsque que l'utilisateur spécifie la projection.\n Si aucune projection n'est spécifiée, il faudrait spécifier l'emprise dans la projection de la carte (car OpenLayers reprojette),\n mais on ne peut pas la récupérer à ce niveau. On ne spécifie donc aucune emprise.\n Idem pour les résolutions : il faut connaitre l'unité de la projection (metres ou degrés) pour pouvoir calculer la résolution.\n */\n if (olSourceParams && olSourceParams.projection) {\n // récupération de l'étendue (en EPSG:4326), et reprojection dans la proj spécifiée\n var geobbox = [\n layerCfg.globalConstraints.extent.left,\n layerCfg.globalConstraints.extent.bottom,\n layerCfg.globalConstraints.extent.right,\n layerCfg.globalConstraints.extent.top\n ];\n layerTileOptions.extent = olTransformExtentProj(geobbox, \"EPSG:4326\", olSourceParams.projection);\n\n // récupération des résolutions min et max\n var p;\n // on récupère tout d'abord la projection\n if (typeof olSourceParams.projection === \"string\") {\n p = olGetProj(olSourceParams.projection);\n } else if (typeof olSourceParams.projection === \"object\" && olSourceParams.projection.getCode()) {\n p = olGetProj(olSourceParams.projection.getCode());\n }\n // puis, selon l'unité de la projection, on calcule la résolution correspondante\n if (p && p.getUnits()) {\n if (p.getUnits() === \"m\") {\n /* fixme : fix temporaire pour gérer les min/max scaledenominator qui sont arrondis dans la configuration !\n * on les arrondit respectivement à l'unité inférieure et supérieure\n * pour que les couches soient bien disponibles aux niveaux de zoom correspondants */\n // info : 1 pixel = 0.00028 m\n layerTileOptions.minResolution = (layerCfg.globalConstraints.minScale - 1) * 0.00028;\n layerTileOptions.maxResolution = (layerCfg.globalConstraints.maxScale + 1) * 0.00028;\n } else if (p.getUnits() === \"degrees\") {\n /* fixme : fix temporaire pour gérer les min/max scaledenominator qui sont arrondis dans la configuration !\n * on les arrondit respectivement à l'unité inférieure et supérieure\n * pour que les couches soient bien disponibles aux niveaux de zoom correspondants */\n // info : 6378137 * 2 * pi / 360 = rayon de la terre (ellipsoide WGS84)\n layerTileOptions.minResolution = (layerCfg.globalConstraints.minScale - 1) * 0.00028 * 180 / (Math.PI * 6378137);\n layerTileOptions.maxResolution = (layerCfg.globalConstraints.maxScale + 1) * 0.00028 * 180 / (Math.PI * 6378137);\n }\n }\n }\n }\n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(layerTileOptions, options.olParams);\n\n // création d'une ol.layer.Tile avec les options récupérées ci-dessus.\n super(layerTileOptions);\n\n this.name = options.layer;\n this.service = \"WMS\";\n this.config = layerCfg;\n\n return this;\n }\n\n /**\n * Get configuration\n * @returns {Object} - configuration\n */\n getConfiguration () {\n return this.config;\n }\n \n /**\n * Get legends\n * @returns {Array} - legends\n */\n getLegends () {\n return this.getSource()._legends;\n }\n\n /**\n * Get metadata\n * @returns {Array} - metadata\n */\n getMetadata () {\n return this.getSource()._metadata;\n }\n\n /**\n * Get description\n * @returns {String} - description\n */\n getDescription () {\n return this.getSource()._description;\n }\n\n /**\n * Get title\n * @returns {String} - title\n */\n getTitle () {\n return this.getSource()._title;\n }\n\n /**\n * Get quicklook url\n * @returns {String} - quicklook\n */\n getQuicklookUrl () {\n return this.getSource()._quicklookUrl;\n }\n\n /**\n * Get originators\n * @returns {Array} - originators\n */\n getOriginators () {\n return this.getSource()._originators;\n }\n\n};\n\nexport default LayerWMS;\n\n// Expose LayerWMS as ol.layerGeoportalWMS. (for a build bundle)\nif (window.ol && window.ol.layer) {\n window.ol.layer.GeoportalWMS = LayerWMS;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.Vector;","import VectorLayer from \"ol/layer/Vector\";\nimport {\n Fill,\n Stroke,\n Style\n} from \"ol/style\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Config from \"../Utils/Config\";\n// import local with ol dependencies\nimport SourceWFS from \"./SourceWFS\";\n\nconst MAXFEATURES = 500;\nconst MINZOOMDEFAULT = 15;\nconst MAXZOOMDEFAULT = 21;\nconst STYLEBYDEFAULT = new Style({\n stroke : new Stroke({\n color : \"rgba(0, 0, 255, 1.0)\",\n width : 2,\n }),\n fill : new Fill({\n color : \"rgba(0, 0, 255, 0.5)\"\n }),\n});\n\n/**\n * @classdesc\n * Geoportal LayerWMS source creation (inherit from ol.layer.Tile)\n *\n * @constructor\n * @extends {ol.layer.Vector}\n * @alias ol.layer.GeoportalWFS\n * @type {ol.layer.GeoportalWFS}\n * @param {Object} options - options for function call.\n * @param {String} options.layer - Layer name (e.g. \"\")\n * @param {Number} [options.maxFeatures] - maximum features (max: 5000) \n * @param {Object} [options.configuration] - configuration (cf. example) \n * @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n * @param {String} [options.apiKey] - Access key to Geoportal platform\n * @param {Object} [options.olParams] - other options for ol.layer.Vector function (see {@link http://openlayers.org/en/latest/apidoc/ol.layer.Vector.html ol.layer.Vector})\n * @param {Object} [options.olParams.sourceParams] - other options for ol.source.Vector function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.Vector.html ol.source.Vector})\n * @example\n * var layerWFS = new ol.layer.GeoportalWFS({\n * layer : \"BDTOPO_V3:batiment\",\n * maxFeatures: 500,\n * olParams : {\n * minZoom: 15,\n * maxZoom: 21,\n * style: new ol.style.Style(...),\n * sourceParams: {}\n * }\n * });\n * \n * layerWFS.getLegends();\n * layerWFS.getMetadata();\n * layerWFS.getTitle();\n * layerWFS.getDescription();\n * layerWFS.getQuicklookUrl();\n * layerWFS.getOriginators();\n */\nvar LayerWFS = class LayerWFS extends VectorLayer {\n\n /**\n * See {@link ol.layer.GeoportalWFS}\n * @module LayerWFS\n * @alias module:~layers/GeoportalWFS\n * @param {*} options - options\n * @example\n * import LayerWFS from \"gpf-ext-ol/layers/LayerWFS\"\n * ou \n * import { LayerWFS } from \"gpf-ext-ol\"\n */\n constructor (options) {\n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n\n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n\n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n\n // configuration de la ressource\n var layerCfg = options.configuration;\n\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n // récupération des autres paramètres nécessaires à la création de la layer\n var layerId = Config.configuration.getLayerId(options.layer, \"WFS\");\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : Layer ID not found into the catalogue !?\");\n }\n }\n\n // création de la source WFS\n var olSourceParams;\n if (options.olParams && options.olParams.sourceParams) {\n olSourceParams = options.olParams.sourceParams;\n }\n\n var wfsSource = new SourceWFS({\n layer : options.layer,\n configuration : options.configuration,\n maxFeatures : options.maxFeatures || MAXFEATURES,\n ssl : options.ssl,\n apiKey : options.apiKey,\n olParams : olSourceParams || {\n minZoom : MINZOOMDEFAULT,\n maxZoom : MAXZOOMDEFAULT\n }\n });\n\n var layerVectorOptions = {\n source : wfsSource\n };\n\n // récupération des autres paramètres passés par l'utilisateur\n // avec application des contraintes\n if (!options.olParams) {\n options.olParams = {\n minZoom : MINZOOMDEFAULT,\n maxZoom : MAXZOOMDEFAULT,\n style : STYLEBYDEFAULT\n };\n } else {\n Utils.mergeParams({\n minZoom : MINZOOMDEFAULT,\n maxZoom : MAXZOOMDEFAULT,\n style : STYLEBYDEFAULT\n }, options.olParams);\n }\n Utils.mergeParams(layerVectorOptions, options.olParams);\n\n // création d'une ol.layer.Vector avec les options récupérées ci-dessus.\n super(layerVectorOptions);\n\n this.name = options.layer;\n this.service = \"WFS\";\n this.config = layerCfg;\n\n return this;\n }\n\n /**\n * Get configuration\n * @returns {Object} - configuration\n */\n getConfiguration () {\n return this.config;\n }\n \n /**\n * Get legends\n * @returns {Array} - legends\n */\n getLegends () {\n return this.getSource()._legends;\n }\n\n /**\n * Get metadata\n * @returns {Array} - metadata\n */\n getMetadata () {\n return this.getSource()._metadata;\n }\n\n /**\n * Get description\n * @returns {String} - description\n */\n getDescription () {\n return this.getSource()._description;\n }\n\n /**\n * Get title\n * @returns {String} - title\n */\n getTitle () {\n return this.getSource()._title;\n }\n\n /**\n * Get quicklook url\n * @returns {String} - quicklook\n */\n getQuicklookUrl () {\n return this.getSource()._quicklookUrl;\n }\n\n /**\n * Get originators\n * @returns {Array} - originators\n */\n getOriginators () {\n return this.getSource()._originators;\n }\n\n};\n\nexport default LayerWFS;\n\n// Expose LayerWFS as ol.layerGeoportalWFS. (for a build bundle)\nif (window.ol && window.ol.layer) {\n window.ol.layer.GeoportalWFS = LayerWFS;\n}","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.VectorTile;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.TileJSON;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.format.MVT;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.Observable;","/**\n * @module ol/transform\n */\nimport {assert} from './asserts.js';\n\n/**\n * An array representing an affine 2d transformation for use with\n * {@link module:ol/transform} functions. The array has 6 elements.\n * @typedef {!Array} Transform\n * @api\n */\n\n/**\n * Collection of affine 2d transformation functions. The functions work on an\n * array of 6 elements. The element order is compatible with the [SVGMatrix\n * interface](https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix) and is\n * a subset (elements a to f) of a 3×3 matrix:\n * ```\n * [ a c e ]\n * [ b d f ]\n * [ 0 0 1 ]\n * ```\n */\n\n/**\n * @private\n * @type {Transform}\n */\nconst tmp_ = new Array(6);\n\n/**\n * Create an identity transform.\n * @return {!Transform} Identity transform.\n */\nexport function create() {\n return [1, 0, 0, 1, 0, 0];\n}\n\n/**\n * Resets the given transform to an identity transform.\n * @param {!Transform} transform Transform.\n * @return {!Transform} Transform.\n */\nexport function reset(transform) {\n return set(transform, 1, 0, 0, 1, 0, 0);\n}\n\n/**\n * Multiply the underlying matrices of two transforms and return the result in\n * the first transform.\n * @param {!Transform} transform1 Transform parameters of matrix 1.\n * @param {!Transform} transform2 Transform parameters of matrix 2.\n * @return {!Transform} transform1 multiplied with transform2.\n */\nexport function multiply(transform1, transform2) {\n const a1 = transform1[0];\n const b1 = transform1[1];\n const c1 = transform1[2];\n const d1 = transform1[3];\n const e1 = transform1[4];\n const f1 = transform1[5];\n const a2 = transform2[0];\n const b2 = transform2[1];\n const c2 = transform2[2];\n const d2 = transform2[3];\n const e2 = transform2[4];\n const f2 = transform2[5];\n\n transform1[0] = a1 * a2 + c1 * b2;\n transform1[1] = b1 * a2 + d1 * b2;\n transform1[2] = a1 * c2 + c1 * d2;\n transform1[3] = b1 * c2 + d1 * d2;\n transform1[4] = a1 * e2 + c1 * f2 + e1;\n transform1[5] = b1 * e2 + d1 * f2 + f1;\n\n return transform1;\n}\n\n/**\n * Set the transform components a-f on a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} a The a component of the transform.\n * @param {number} b The b component of the transform.\n * @param {number} c The c component of the transform.\n * @param {number} d The d component of the transform.\n * @param {number} e The e component of the transform.\n * @param {number} f The f component of the transform.\n * @return {!Transform} Matrix with transform applied.\n */\nexport function set(transform, a, b, c, d, e, f) {\n transform[0] = a;\n transform[1] = b;\n transform[2] = c;\n transform[3] = d;\n transform[4] = e;\n transform[5] = f;\n return transform;\n}\n\n/**\n * Set transform on one matrix from another matrix.\n * @param {!Transform} transform1 Matrix to set transform to.\n * @param {!Transform} transform2 Matrix to set transform from.\n * @return {!Transform} transform1 with transform from transform2 applied.\n */\nexport function setFromArray(transform1, transform2) {\n transform1[0] = transform2[0];\n transform1[1] = transform2[1];\n transform1[2] = transform2[2];\n transform1[3] = transform2[3];\n transform1[4] = transform2[4];\n transform1[5] = transform2[5];\n return transform1;\n}\n\n/**\n * Transforms the given coordinate with the given transform returning the\n * resulting, transformed coordinate. The coordinate will be modified in-place.\n *\n * @param {Transform} transform The transformation.\n * @param {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} coordinate The coordinate to transform.\n * @return {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} return coordinate so that operations can be\n * chained together.\n */\nexport function apply(transform, coordinate) {\n const x = coordinate[0];\n const y = coordinate[1];\n coordinate[0] = transform[0] * x + transform[2] * y + transform[4];\n coordinate[1] = transform[1] * x + transform[3] * y + transform[5];\n return coordinate;\n}\n\n/**\n * Applies rotation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} angle Angle in radians.\n * @return {!Transform} The rotated transform.\n */\nexport function rotate(transform, angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n return multiply(transform, set(tmp_, cos, sin, -sin, cos, 0, 0));\n}\n\n/**\n * Applies scale to a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scaled transform.\n */\nexport function scale(transform, x, y) {\n return multiply(transform, set(tmp_, x, 0, 0, y, 0, 0));\n}\n\n/**\n * Creates a scale transform.\n * @param {!Transform} target Transform to overwrite.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scale transform.\n */\nexport function makeScale(target, x, y) {\n return set(target, x, 0, 0, y, 0, 0);\n}\n\n/**\n * Applies translation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} dx Translation x.\n * @param {number} dy Translation y.\n * @return {!Transform} The translated transform.\n */\nexport function translate(transform, dx, dy) {\n return multiply(transform, set(tmp_, 1, 0, 0, 1, dx, dy));\n}\n\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative).\n * @param {!Transform} transform The transform (will be modified in place).\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {!Transform} The composite transform.\n */\nexport function compose(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {\n const sin = Math.sin(angle);\n const cos = Math.cos(angle);\n transform[0] = sx * cos;\n transform[1] = sy * sin;\n transform[2] = -sx * sin;\n transform[3] = sy * cos;\n transform[4] = dx2 * sx * cos - dy2 * sx * sin + dx1;\n transform[5] = dx2 * sy * sin + dy2 * sy * cos + dy1;\n return transform;\n}\n\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative). The resulting transform\n * string can be applied as `transform` property of an HTMLElement's style.\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {string} The composite css transform.\n * @api\n */\nexport function composeCssTransform(dx1, dy1, sx, sy, angle, dx2, dy2) {\n return toString(compose(create(), dx1, dy1, sx, sy, angle, dx2, dy2));\n}\n\n/**\n * Invert the given transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (source) transform.\n */\nexport function invert(source) {\n return makeInverse(source, source);\n}\n\n/**\n * Invert the given transform.\n * @param {!Transform} target Transform to be set as the inverse of\n * the source transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (target) transform.\n */\nexport function makeInverse(target, source) {\n const det = determinant(source);\n assert(det !== 0, 'Transformation matrix cannot be inverted');\n\n const a = source[0];\n const b = source[1];\n const c = source[2];\n const d = source[3];\n const e = source[4];\n const f = source[5];\n\n target[0] = d / det;\n target[1] = -b / det;\n target[2] = -c / det;\n target[3] = a / det;\n target[4] = (c * f - d * e) / det;\n target[5] = -(a * f - b * e) / det;\n\n return target;\n}\n\n/**\n * Returns the determinant of the given matrix.\n * @param {!Transform} mat Matrix.\n * @return {number} Determinant.\n */\nexport function determinant(mat) {\n return mat[0] * mat[3] - mat[1] * mat[2];\n}\n\n/**\n * @type {Array}\n */\nconst matrixPrecision = [1e6, 1e6, 1e6, 1e6, 2, 2];\n\n/**\n * A rounded string version of the transform. This can be used\n * for CSS transforms.\n * @param {!Transform} mat Matrix.\n * @return {string} The transform as a string.\n */\nexport function toString(mat) {\n const transformString =\n 'matrix(' +\n mat\n .map(\n (value, i) =>\n Math.round(value * matrixPrecision[i]) / matrixPrecision[i],\n )\n .join(', ') +\n ')';\n return transformString;\n}\n","/**\n * @module ol/extent\n */\nimport Relationship from './extent/Relationship.js';\n\n/**\n * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`.\n * @typedef {Array} Extent\n * @api\n */\n\n/**\n * Extent corner.\n * @typedef {'bottom-left' | 'bottom-right' | 'top-left' | 'top-right'} Corner\n */\n\n/**\n * Build an extent that includes all given coordinates.\n *\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Bounding extent.\n * @api\n */\nexport function boundingExtent(coordinates) {\n const extent = createEmpty();\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Array} xs Xs.\n * @param {Array} ys Ys.\n * @param {Extent} [dest] Destination extent.\n * @private\n * @return {Extent} Extent.\n */\nfunction _boundingExtentXYs(xs, ys, dest) {\n const minX = Math.min.apply(null, xs);\n const minY = Math.min.apply(null, ys);\n const maxX = Math.max.apply(null, xs);\n const maxY = Math.max.apply(null, ys);\n return createOrUpdate(minX, minY, maxX, maxY, dest);\n}\n\n/**\n * Return extent increased by the provided value.\n * @param {Extent} extent Extent.\n * @param {number} value The amount by which the extent should be buffered.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n * @api\n */\nexport function buffer(extent, value, dest) {\n if (dest) {\n dest[0] = extent[0] - value;\n dest[1] = extent[1] - value;\n dest[2] = extent[2] + value;\n dest[3] = extent[3] + value;\n return dest;\n }\n return [\n extent[0] - value,\n extent[1] - value,\n extent[2] + value,\n extent[3] + value,\n ];\n}\n\n/**\n * Creates a clone of an extent.\n *\n * @param {Extent} extent Extent to clone.\n * @param {Extent} [dest] Extent.\n * @return {Extent} The clone.\n */\nexport function clone(extent, dest) {\n if (dest) {\n dest[0] = extent[0];\n dest[1] = extent[1];\n dest[2] = extent[2];\n dest[3] = extent[3];\n return dest;\n }\n return extent.slice();\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {number} Closest squared distance.\n */\nexport function closestSquaredDistanceXY(extent, x, y) {\n let dx, dy;\n if (x < extent[0]) {\n dx = extent[0] - x;\n } else if (extent[2] < x) {\n dx = x - extent[2];\n } else {\n dx = 0;\n }\n if (y < extent[1]) {\n dy = extent[1] - y;\n } else if (extent[3] < y) {\n dy = y - extent[3];\n } else {\n dy = 0;\n }\n return dx * dx + dy * dy;\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n * @api\n */\nexport function containsCoordinate(extent, coordinate) {\n return containsXY(extent, coordinate[0], coordinate[1]);\n}\n\n/**\n * Check if one extent contains another.\n *\n * An extent is deemed contained if it lies completely within the other extent,\n * including if they share one or more edges.\n *\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The second extent is contained by or on the edge of the\n * first.\n * @api\n */\nexport function containsExtent(extent1, extent2) {\n return (\n extent1[0] <= extent2[0] &&\n extent2[2] <= extent1[2] &&\n extent1[1] <= extent2[1] &&\n extent2[3] <= extent1[3]\n );\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @return {boolean} The x, y values are contained in the extent.\n * @api\n */\nexport function containsXY(extent, x, y) {\n return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];\n}\n\n/**\n * Get the relationship between a coordinate and extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate The coordinate.\n * @return {import(\"./extent/Relationship.js\").default} The relationship (bitwise compare with\n * import(\"./extent/Relationship.js\").Relationship).\n */\nexport function coordinateRelationship(extent, coordinate) {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const x = coordinate[0];\n const y = coordinate[1];\n let relationship = Relationship.UNKNOWN;\n if (x < minX) {\n relationship = relationship | Relationship.LEFT;\n } else if (x > maxX) {\n relationship = relationship | Relationship.RIGHT;\n }\n if (y < minY) {\n relationship = relationship | Relationship.BELOW;\n } else if (y > maxY) {\n relationship = relationship | Relationship.ABOVE;\n }\n if (relationship === Relationship.UNKNOWN) {\n relationship = Relationship.INTERSECTING;\n }\n return relationship;\n}\n\n/**\n * Create an empty extent.\n * @return {Extent} Empty extent.\n * @api\n */\nexport function createEmpty() {\n return [Infinity, Infinity, -Infinity, -Infinity];\n}\n\n/**\n * Create a new extent or update the provided extent.\n * @param {number} minX Minimum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxX Maximum X.\n * @param {number} maxY Maximum Y.\n * @param {Extent} [dest] Destination extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdate(minX, minY, maxX, maxY, dest) {\n if (dest) {\n dest[0] = minX;\n dest[1] = minY;\n dest[2] = maxX;\n dest[3] = maxY;\n return dest;\n }\n return [minX, minY, maxX, maxY];\n}\n\n/**\n * Create a new empty extent or make the provided one empty.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateEmpty(dest) {\n return createOrUpdate(Infinity, Infinity, -Infinity, -Infinity, dest);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinate(coordinate, dest) {\n const x = coordinate[0];\n const y = coordinate[1];\n return createOrUpdate(x, y, x, y, dest);\n}\n\n/**\n * @param {Array} coordinates Coordinates.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinates(coordinates, dest) {\n const extent = createOrUpdateEmpty(dest);\n return extendCoordinates(extent, coordinates);\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromFlatCoordinates(\n flatCoordinates,\n offset,\n end,\n stride,\n dest,\n) {\n const extent = createOrUpdateEmpty(dest);\n return extendFlatCoordinates(extent, flatCoordinates, offset, end, stride);\n}\n\n/**\n * @param {Array>} rings Rings.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromRings(rings, dest) {\n const extent = createOrUpdateEmpty(dest);\n return extendRings(extent, rings);\n}\n\n/**\n * Determine if two extents are equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The two extents are equivalent.\n * @api\n */\nexport function equals(extent1, extent2) {\n return (\n extent1[0] == extent2[0] &&\n extent1[2] == extent2[2] &&\n extent1[1] == extent2[1] &&\n extent1[3] == extent2[3]\n );\n}\n\n/**\n * Determine if two extents are approximately equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {number} tolerance Tolerance in extent coordinate units.\n * @return {boolean} The two extents differ by less than the tolerance.\n */\nexport function approximatelyEquals(extent1, extent2, tolerance) {\n return (\n Math.abs(extent1[0] - extent2[0]) < tolerance &&\n Math.abs(extent1[2] - extent2[2]) < tolerance &&\n Math.abs(extent1[1] - extent2[1]) < tolerance &&\n Math.abs(extent1[3] - extent2[3]) < tolerance\n );\n}\n\n/**\n * Modify an extent to include another extent.\n * @param {Extent} extent1 The extent to be modified.\n * @param {Extent} extent2 The extent that will be included in the first.\n * @return {Extent} A reference to the first (extended) extent.\n * @api\n */\nexport function extend(extent1, extent2) {\n if (extent2[0] < extent1[0]) {\n extent1[0] = extent2[0];\n }\n if (extent2[2] > extent1[2]) {\n extent1[2] = extent2[2];\n }\n if (extent2[1] < extent1[1]) {\n extent1[1] = extent2[1];\n }\n if (extent2[3] > extent1[3]) {\n extent1[3] = extent2[3];\n }\n return extent1;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n */\nexport function extendCoordinate(extent, coordinate) {\n if (coordinate[0] < extent[0]) {\n extent[0] = coordinate[0];\n }\n if (coordinate[0] > extent[2]) {\n extent[2] = coordinate[0];\n }\n if (coordinate[1] < extent[1]) {\n extent[1] = coordinate[1];\n }\n if (coordinate[1] > extent[3]) {\n extent[3] = coordinate[1];\n }\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Extent.\n */\nexport function extendCoordinates(extent, coordinates) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Extent} Extent.\n */\nexport function extendFlatCoordinates(\n extent,\n flatCoordinates,\n offset,\n end,\n stride,\n) {\n for (; offset < end; offset += stride) {\n extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array>} rings Rings.\n * @return {Extent} Extent.\n */\nexport function extendRings(extent, rings) {\n for (let i = 0, ii = rings.length; i < ii; ++i) {\n extendCoordinates(extent, rings[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n */\nexport function extendXY(extent, x, y) {\n extent[0] = Math.min(extent[0], x);\n extent[1] = Math.min(extent[1], y);\n extent[2] = Math.max(extent[2], x);\n extent[3] = Math.max(extent[3], y);\n}\n\n/**\n * This function calls `callback` for each corner of the extent. If the\n * callback returns a truthy value the function returns that value\n * immediately. Otherwise the function returns `false`.\n * @param {Extent} extent Extent.\n * @param {function(import(\"./coordinate.js\").Coordinate): S} callback Callback.\n * @return {S|boolean} Value.\n * @template S\n */\nexport function forEachCorner(extent, callback) {\n let val;\n val = callback(getBottomLeft(extent));\n if (val) {\n return val;\n }\n val = callback(getBottomRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopLeft(extent));\n if (val) {\n return val;\n }\n return false;\n}\n\n/**\n * Get the size of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Area.\n * @api\n */\nexport function getArea(extent) {\n let area = 0;\n if (!isEmpty(extent)) {\n area = getWidth(extent) * getHeight(extent);\n }\n return area;\n}\n\n/**\n * Get the bottom left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom left coordinate.\n * @api\n */\nexport function getBottomLeft(extent) {\n return [extent[0], extent[1]];\n}\n\n/**\n * Get the bottom right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom right coordinate.\n * @api\n */\nexport function getBottomRight(extent) {\n return [extent[2], extent[1]];\n}\n\n/**\n * Get the center coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Center.\n * @api\n */\nexport function getCenter(extent) {\n return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];\n}\n\n/**\n * Get a corner coordinate of an extent.\n * @param {Extent} extent Extent.\n * @param {Corner} corner Corner.\n * @return {import(\"./coordinate.js\").Coordinate} Corner coordinate.\n */\nexport function getCorner(extent, corner) {\n let coordinate;\n if (corner === 'bottom-left') {\n coordinate = getBottomLeft(extent);\n } else if (corner === 'bottom-right') {\n coordinate = getBottomRight(extent);\n } else if (corner === 'top-left') {\n coordinate = getTopLeft(extent);\n } else if (corner === 'top-right') {\n coordinate = getTopRight(extent);\n } else {\n throw new Error('Invalid corner');\n }\n return coordinate;\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Enlarged area.\n */\nexport function getEnlargedArea(extent1, extent2) {\n const minX = Math.min(extent1[0], extent2[0]);\n const minY = Math.min(extent1[1], extent2[1]);\n const maxX = Math.max(extent1[2], extent2[2]);\n const maxY = Math.max(extent1[3], extent2[3]);\n return (maxX - minX) * (maxY - minY);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @param {Extent} [dest] Destination extent.\n * @return {Extent} Extent.\n */\nexport function getForViewAndSize(center, resolution, rotation, size, dest) {\n const [x0, y0, x1, y1, x2, y2, x3, y3] = getRotatedViewport(\n center,\n resolution,\n rotation,\n size,\n );\n return createOrUpdate(\n Math.min(x0, x1, x2, x3),\n Math.min(y0, y1, y2, y3),\n Math.max(x0, x1, x2, x3),\n Math.max(y0, y1, y2, y3),\n dest,\n );\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array} Linear ring representing the viewport.\n */\nexport function getRotatedViewport(center, resolution, rotation, size) {\n const dx = (resolution * size[0]) / 2;\n const dy = (resolution * size[1]) / 2;\n const cosRotation = Math.cos(rotation);\n const sinRotation = Math.sin(rotation);\n const xCos = dx * cosRotation;\n const xSin = dx * sinRotation;\n const yCos = dy * cosRotation;\n const ySin = dy * sinRotation;\n const x = center[0];\n const y = center[1];\n return [\n x - xCos + ySin,\n y - xSin - yCos,\n x - xCos - ySin,\n y - xSin + yCos,\n x + xCos - ySin,\n y + xSin + yCos,\n x + xCos + ySin,\n y + xSin - yCos,\n x - xCos + ySin,\n y - xSin - yCos,\n ];\n}\n\n/**\n * Get the height of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Height.\n * @api\n */\nexport function getHeight(extent) {\n return extent[3] - extent[1];\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Intersection area.\n */\nexport function getIntersectionArea(extent1, extent2) {\n const intersection = getIntersection(extent1, extent2);\n return getArea(intersection);\n}\n\n/**\n * Get the intersection of two extents.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {Extent} [dest] Optional extent to populate with intersection.\n * @return {Extent} Intersecting extent.\n * @api\n */\nexport function getIntersection(extent1, extent2, dest) {\n const intersection = dest ? dest : createEmpty();\n if (intersects(extent1, extent2)) {\n if (extent1[0] > extent2[0]) {\n intersection[0] = extent1[0];\n } else {\n intersection[0] = extent2[0];\n }\n if (extent1[1] > extent2[1]) {\n intersection[1] = extent1[1];\n } else {\n intersection[1] = extent2[1];\n }\n if (extent1[2] < extent2[2]) {\n intersection[2] = extent1[2];\n } else {\n intersection[2] = extent2[2];\n }\n if (extent1[3] < extent2[3]) {\n intersection[3] = extent1[3];\n } else {\n intersection[3] = extent2[3];\n }\n } else {\n createOrUpdateEmpty(intersection);\n }\n return intersection;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @return {number} Margin.\n */\nexport function getMargin(extent) {\n return getWidth(extent) + getHeight(extent);\n}\n\n/**\n * Get the size (width, height) of an extent.\n * @param {Extent} extent The extent.\n * @return {import(\"./size.js\").Size} The extent size.\n * @api\n */\nexport function getSize(extent) {\n return [extent[2] - extent[0], extent[3] - extent[1]];\n}\n\n/**\n * Get the top left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top left coordinate.\n * @api\n */\nexport function getTopLeft(extent) {\n return [extent[0], extent[3]];\n}\n\n/**\n * Get the top right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top right coordinate.\n * @api\n */\nexport function getTopRight(extent) {\n return [extent[2], extent[3]];\n}\n\n/**\n * Get the width of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Width.\n * @api\n */\nexport function getWidth(extent) {\n return extent[2] - extent[0];\n}\n\n/**\n * Determine if one extent intersects another.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent.\n * @return {boolean} The two extents intersect.\n * @api\n */\nexport function intersects(extent1, extent2) {\n return (\n extent1[0] <= extent2[2] &&\n extent1[2] >= extent2[0] &&\n extent1[1] <= extent2[3] &&\n extent1[3] >= extent2[1]\n );\n}\n\n/**\n * Determine if an extent is empty.\n * @param {Extent} extent Extent.\n * @return {boolean} Is empty.\n * @api\n */\nexport function isEmpty(extent) {\n return extent[2] < extent[0] || extent[3] < extent[1];\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function returnOrUpdate(extent, dest) {\n if (dest) {\n dest[0] = extent[0];\n dest[1] = extent[1];\n dest[2] = extent[2];\n dest[3] = extent[3];\n return dest;\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} value Value.\n */\nexport function scaleFromCenter(extent, value) {\n const deltaX = ((extent[2] - extent[0]) / 2) * (value - 1);\n const deltaY = ((extent[3] - extent[1]) / 2) * (value - 1);\n extent[0] -= deltaX;\n extent[2] += deltaX;\n extent[1] -= deltaY;\n extent[3] += deltaY;\n}\n\n/**\n * Determine if the segment between two coordinates intersects (crosses,\n * touches, or is contained by) the provided extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} start Segment start coordinate.\n * @param {import(\"./coordinate.js\").Coordinate} end Segment end coordinate.\n * @return {boolean} The segment intersects the extent.\n */\nexport function intersectsSegment(extent, start, end) {\n let intersects = false;\n const startRel = coordinateRelationship(extent, start);\n const endRel = coordinateRelationship(extent, end);\n if (\n startRel === Relationship.INTERSECTING ||\n endRel === Relationship.INTERSECTING\n ) {\n intersects = true;\n } else {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const startX = start[0];\n const startY = start[1];\n const endX = end[0];\n const endY = end[1];\n const slope = (endY - startY) / (endX - startX);\n let x, y;\n if (!!(endRel & Relationship.ABOVE) && !(startRel & Relationship.ABOVE)) {\n // potentially intersects top\n x = endX - (endY - maxY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.RIGHT) &&\n !(startRel & Relationship.RIGHT)\n ) {\n // potentially intersects right\n y = endY - (endX - maxX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.BELOW) &&\n !(startRel & Relationship.BELOW)\n ) {\n // potentially intersects bottom\n x = endX - (endY - minY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.LEFT) &&\n !(startRel & Relationship.LEFT)\n ) {\n // potentially intersects left\n y = endY - (endX - minX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n }\n return intersects;\n}\n\n/**\n * Apply a transform function to the extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./proj.js\").TransformFunction} transformFn Transform function.\n * Called with `[minX, minY, maxX, maxY]` extent coordinates.\n * @param {Extent} [dest] Destination extent.\n * @param {number} [stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {Extent} Extent.\n * @api\n */\nexport function applyTransform(extent, transformFn, dest, stops) {\n if (isEmpty(extent)) {\n return createOrUpdateEmpty(dest);\n }\n let coordinates = [];\n if (stops > 1) {\n const width = extent[2] - extent[0];\n const height = extent[3] - extent[1];\n for (let i = 0; i < stops; ++i) {\n coordinates.push(\n extent[0] + (width * i) / stops,\n extent[1],\n extent[2],\n extent[1] + (height * i) / stops,\n extent[2] - (width * i) / stops,\n extent[3],\n extent[0],\n extent[3] - (height * i) / stops,\n );\n }\n } else {\n coordinates = [\n extent[0],\n extent[1],\n extent[2],\n extent[1],\n extent[2],\n extent[3],\n extent[0],\n extent[3],\n ];\n }\n transformFn(coordinates, coordinates, 2);\n const xs = [];\n const ys = [];\n for (let i = 0, l = coordinates.length; i < l; i += 2) {\n xs.push(coordinates[i]);\n ys.push(coordinates[i + 1]);\n }\n return _boundingExtentXYs(xs, ys, dest);\n}\n\n/**\n * Modifies the provided extent in-place to be within the real world\n * extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @return {Extent} The extent within the real world extent.\n */\nexport function wrapX(extent, projection) {\n const projectionExtent = projection.getExtent();\n const center = getCenter(extent);\n if (\n projection.canWrapX() &&\n (center[0] < projectionExtent[0] || center[0] >= projectionExtent[2])\n ) {\n const worldWidth = getWidth(projectionExtent);\n const worldsAway = Math.floor(\n (center[0] - projectionExtent[0]) / worldWidth,\n );\n const offset = worldsAway * worldWidth;\n extent[0] -= offset;\n extent[2] -= offset;\n }\n return extent;\n}\n\n/**\n * Fits the extent to the real world\n *\n * If the extent does not cross the anti meridian, this will return the extent in an array\n * If the extent crosses the anti meridian, the extent will be sliced, so each part fits within the\n * real world\n *\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @param {boolean} [multiWorld] Return all worlds\n * @return {Array} The extent within the real world extent.\n */\nexport function wrapAndSliceX(extent, projection, multiWorld) {\n if (projection.canWrapX()) {\n const projectionExtent = projection.getExtent();\n\n if (!isFinite(extent[0]) || !isFinite(extent[2])) {\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n }\n\n wrapX(extent, projection);\n const worldWidth = getWidth(projectionExtent);\n\n if (getWidth(extent) > worldWidth && !multiWorld) {\n // the extent wraps around on itself\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n }\n if (extent[0] < projectionExtent[0]) {\n // the extent crosses the anti meridian, so it needs to be sliced\n return [\n [extent[0] + worldWidth, extent[1], projectionExtent[2], extent[3]],\n [projectionExtent[0], extent[1], extent[2], extent[3]],\n ];\n }\n if (extent[2] > projectionExtent[2]) {\n // the extent crosses the anti meridian, so it needs to be sliced\n return [\n [extent[0], extent[1], projectionExtent[2], extent[3]],\n [projectionExtent[0], extent[1], extent[2] - worldWidth, extent[3]],\n ];\n }\n }\n\n return [extent];\n}\n","/**\n * @module ol/math\n */\n\n/**\n * Takes a number and clamps it to within the provided bounds.\n * @param {number} value The input number.\n * @param {number} min The minimum value to return.\n * @param {number} max The maximum value to return.\n * @return {number} The input number if it is within bounds, or the nearest\n * number within the bounds.\n */\nexport function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Returns the square of the closest distance between the point (x, y) and the\n * line segment (x1, y1) to (x2, y2).\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredSegmentDistance(x, y, x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n if (dx !== 0 || dy !== 0) {\n const t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n x1 = x2;\n y1 = y2;\n } else if (t > 0) {\n x1 += dx * t;\n y1 += dy * t;\n }\n }\n return squaredDistance(x, y, x1, y1);\n}\n\n/**\n * Returns the square of the distance between the points (x1, y1) and (x2, y2).\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredDistance(x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n return dx * dx + dy * dy;\n}\n\n/**\n * Solves system of linear equations using Gaussian elimination method.\n *\n * @param {Array>} mat Augmented matrix (n x n + 1 column)\n * in row-major order.\n * @return {Array|null} The resulting vector.\n */\nexport function solveLinearSystem(mat) {\n const n = mat.length;\n\n for (let i = 0; i < n; i++) {\n // Find max in the i-th column (ignoring i - 1 first rows)\n let maxRow = i;\n let maxEl = Math.abs(mat[i][i]);\n for (let r = i + 1; r < n; r++) {\n const absValue = Math.abs(mat[r][i]);\n if (absValue > maxEl) {\n maxEl = absValue;\n maxRow = r;\n }\n }\n\n if (maxEl === 0) {\n return null; // matrix is singular\n }\n\n // Swap max row with i-th (current) row\n const tmp = mat[maxRow];\n mat[maxRow] = mat[i];\n mat[i] = tmp;\n\n // Subtract the i-th row to make all the remaining rows 0 in the i-th column\n for (let j = i + 1; j < n; j++) {\n const coef = -mat[j][i] / mat[i][i];\n for (let k = i; k < n + 1; k++) {\n if (i == k) {\n mat[j][k] = 0;\n } else {\n mat[j][k] += coef * mat[i][k];\n }\n }\n }\n }\n\n // Solve Ax=b for upper triangular matrix A (mat)\n const x = new Array(n);\n for (let l = n - 1; l >= 0; l--) {\n x[l] = mat[l][n] / mat[l][l];\n for (let m = l - 1; m >= 0; m--) {\n mat[m][n] -= mat[m][l] * x[l];\n }\n }\n return x;\n}\n\n/**\n * Converts radians to to degrees.\n *\n * @param {number} angleInRadians Angle in radians.\n * @return {number} Angle in degrees.\n */\nexport function toDegrees(angleInRadians) {\n return (angleInRadians * 180) / Math.PI;\n}\n\n/**\n * Converts degrees to radians.\n *\n * @param {number} angleInDegrees Angle in degrees.\n * @return {number} Angle in radians.\n */\nexport function toRadians(angleInDegrees) {\n return (angleInDegrees * Math.PI) / 180;\n}\n\n/**\n * Returns the modulo of a / b, depending on the sign of b.\n *\n * @param {number} a Dividend.\n * @param {number} b Divisor.\n * @return {number} Modulo.\n */\nexport function modulo(a, b) {\n const r = a % b;\n return r * b < 0 ? r + b : r;\n}\n\n/**\n * Calculates the linearly interpolated value of x between a and b.\n *\n * @param {number} a Number\n * @param {number} b Number\n * @param {number} x Value to be interpolated.\n * @return {number} Interpolated value.\n */\nexport function lerp(a, b, x) {\n return a + x * (b - a);\n}\n\n/**\n * Returns a number with a limited number of decimal digits.\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The input number with a limited number of decimal digits.\n */\nexport function toFixed(n, decimals) {\n const factor = Math.pow(10, decimals);\n return Math.round(n * factor) / factor;\n}\n\n/**\n * Rounds a number to the nearest integer value considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The nearest integer.\n */\nexport function round(n, decimals) {\n return Math.round(toFixed(n, decimals));\n}\n\n/**\n * Rounds a number to the next smaller integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next smaller integer.\n */\nexport function floor(n, decimals) {\n return Math.floor(toFixed(n, decimals));\n}\n\n/**\n * Rounds a number to the next bigger integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next bigger integer.\n */\nexport function ceil(n, decimals) {\n return Math.ceil(toFixed(n, decimals));\n}\n\n/**\n * Wraps a number between some minimum and maximum values.\n * @param {number} n The number to wrap.\n * @param {number} min The minimum of the range (inclusive).\n * @param {number} max The maximum of the range (exclusive).\n * @return {number} The wrapped number.\n */\nexport function wrap(n, min, max) {\n if (n >= min && n < max) {\n return n;\n }\n const range = max - min;\n return ((((n - min) % range) + range) % range) + min;\n}\n","/**\n * @module ol/geom/flat/simplify\n */\n// Based on simplify-js https://github.com/mourner/simplify-js\n// Copyright (c) 2012, Vladimir Agafonkin\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//\n// 1. Redistributions of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n\nimport {squaredDistance, squaredSegmentDistance} from '../../math.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {boolean} highQuality Highest quality.\n * @param {Array} [simplifiedFlatCoordinates] Simplified flat\n * coordinates.\n * @return {Array} Simplified line string.\n */\nexport function simplifyLineString(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n highQuality,\n simplifiedFlatCoordinates,\n) {\n simplifiedFlatCoordinates =\n simplifiedFlatCoordinates !== undefined ? simplifiedFlatCoordinates : [];\n if (!highQuality) {\n end = radialDistance(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n );\n flatCoordinates = simplifiedFlatCoordinates;\n offset = 0;\n stride = 2;\n }\n simplifiedFlatCoordinates.length = douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n );\n return simplifiedFlatCoordinates;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n) {\n const n = (end - offset) / stride;\n if (n < 3) {\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n /** @type {Array} */\n const markers = new Array(n);\n markers[0] = 1;\n markers[n - 1] = 1;\n /** @type {Array} */\n const stack = [offset, end - stride];\n let index = 0;\n while (stack.length > 0) {\n const last = stack.pop();\n const first = stack.pop();\n let maxSquaredDistance = 0;\n const x1 = flatCoordinates[first];\n const y1 = flatCoordinates[first + 1];\n const x2 = flatCoordinates[last];\n const y2 = flatCoordinates[last + 1];\n for (let i = first + stride; i < last; i += stride) {\n const x = flatCoordinates[i];\n const y = flatCoordinates[i + 1];\n const squaredDistance = squaredSegmentDistance(x, y, x1, y1, x2, y2);\n if (squaredDistance > maxSquaredDistance) {\n index = i;\n maxSquaredDistance = squaredDistance;\n }\n }\n if (maxSquaredDistance > squaredTolerance) {\n markers[(index - offset) / stride] = 1;\n if (first + stride < index) {\n stack.push(first, index);\n }\n if (index + stride < last) {\n stack.push(index, last);\n }\n }\n }\n for (let i = 0; i < n; ++i) {\n if (markers[i]) {\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride + 1];\n }\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n simplifiedOffset = douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n );\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEndss,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n /** @type {Array} */\n const simplifiedEnds = [];\n simplifiedOffset = douglasPeuckerArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n );\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function radialDistance(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n) {\n if (end <= offset + stride) {\n // zero or one point, no simplification possible, so copy and return\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n // copy first point\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n let x2 = x1;\n let y2 = y1;\n for (offset += stride; offset < end; offset += stride) {\n x2 = flatCoordinates[offset];\n y2 = flatCoordinates[offset + 1];\n if (squaredDistance(x1, y1, x2, y2) > squaredTolerance) {\n // copy point at offset\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n }\n }\n if (x2 != x1 || y2 != y1) {\n // copy last point\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {number} value Value.\n * @param {number} tolerance Tolerance.\n * @return {number} Rounded value.\n */\nexport function snap(value, tolerance) {\n return tolerance * Math.round(value / tolerance);\n}\n\n/**\n * Simplifies a line string using an algorithm designed by Tim Schaub.\n * Coordinates are snapped to the nearest value in a virtual grid and\n * consecutive duplicate coordinates are discarded. This effectively preserves\n * topology as the simplification of any subsection of a line string is\n * independent of the rest of the line string. This means that, for examples,\n * the common edge between two polygons will be simplified to the same line\n * string independently in both polygons. This implementation uses a single\n * pass over the coordinates and eliminates intermediate collinear points.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function quantize(\n flatCoordinates,\n offset,\n end,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n) {\n // do nothing if the line is empty\n if (offset == end) {\n return simplifiedOffset;\n }\n // snap the first coordinate (P1)\n let x1 = snap(flatCoordinates[offset], tolerance);\n let y1 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // add the first coordinate to the output\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n // find the next coordinate that does not snap to the same value as the first\n // coordinate (P2)\n let x2, y2;\n do {\n x2 = snap(flatCoordinates[offset], tolerance);\n y2 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n if (offset == end) {\n // all coordinates snap to the same value, the line collapses to a point\n // push the last snapped value anyway to ensure that the output contains\n // at least two points\n // FIXME should we really return at least two points anyway?\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n }\n } while (x2 == x1 && y2 == y1);\n while (offset < end) {\n // snap the next coordinate (P3)\n const x3 = snap(flatCoordinates[offset], tolerance);\n const y3 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // skip P3 if it is equal to P2\n if (x3 == x2 && y3 == y2) {\n continue;\n }\n // calculate the delta between P1 and P2\n const dx1 = x2 - x1;\n const dy1 = y2 - y1;\n // calculate the delta between P3 and P1\n const dx2 = x3 - x1;\n const dy2 = y3 - y1;\n // if P1, P2, and P3 are colinear and P3 is further from P1 than P2 is from\n // P1 in the same direction then P2 is on the straight line between P1 and\n // P3\n if (\n dx1 * dy2 == dy1 * dx2 &&\n ((dx1 < 0 && dx2 < dx1) || dx1 == dx2 || (dx1 > 0 && dx2 > dx1)) &&\n ((dy1 < 0 && dy2 < dy1) || dy1 == dy2 || (dy1 > 0 && dy2 > dy1))\n ) {\n // discard P2 and set P2 = P3\n x2 = x3;\n y2 = y3;\n continue;\n }\n // either P1, P2, and P3 are not colinear, or they are colinear but P3 is\n // between P3 and P1 or on the opposite half of the line to P2. add P2,\n // and continue with P1 = P2 and P2 = P3\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n x2 = x3;\n y2 = y3;\n }\n // add the last point (P2)\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function quantizeArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n simplifiedOffset = quantize(\n flatCoordinates,\n offset,\n end,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n );\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function quantizeMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEndss,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n /** @type {Array} */\n const simplifiedEnds = [];\n simplifiedOffset = quantizeArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n );\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n","/**\n * @module ol/array\n */\n\n/**\n * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1.\n * https://github.com/darkskyapp/binary-search\n *\n * @param {Array<*>} haystack Items to search through.\n * @param {*} needle The item to look for.\n * @param {Function} [comparator] Comparator function.\n * @return {number} The index of the item if found, -1 if not.\n */\nexport function binarySearch(haystack, needle, comparator) {\n let mid, cmp;\n comparator = comparator || ascending;\n let low = 0;\n let high = haystack.length;\n let found = false;\n\n while (low < high) {\n /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n * to double (which gives the wrong results). */\n mid = low + ((high - low) >> 1);\n cmp = +comparator(haystack[mid], needle);\n\n if (cmp < 0.0) {\n /* Too low. */\n low = mid + 1;\n } else {\n /* Key found or too high */\n high = mid;\n found = !cmp;\n }\n }\n\n /* Key not found. */\n return found ? low : ~low;\n}\n\n/**\n * Compare function sorting arrays in ascending order. Safe to use for numeric values.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is less than, equal to, or greater than the second.\n */\nexport function ascending(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n}\n\n/**\n * Compare function sorting arrays in descending order. Safe to use for numeric values.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is greater than, equal to, or less than the second.\n */\nexport function descending(a, b) {\n return a < b ? 1 : a > b ? -1 : 0;\n}\n\n/**\n * {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution} can use a function\n * of this type to determine which nearest resolution to use.\n *\n * This function takes a `{number}` representing a value between two array entries,\n * a `{number}` representing the value of the nearest higher entry and\n * a `{number}` representing the value of the nearest lower entry\n * as arguments and returns a `{number}`. If a negative number or zero is returned\n * the lower value will be used, if a positive number is returned the higher value\n * will be used.\n * @typedef {function(number, number, number): number} NearestDirectionFunction\n * @api\n */\n\n/**\n * @param {Array} arr Array in descending order.\n * @param {number} target Target.\n * @param {number|NearestDirectionFunction} direction\n * 0 means return the nearest,\n * > 0 means return the largest nearest,\n * < 0 means return the smallest nearest.\n * @return {number} Index.\n */\nexport function linearFindNearest(arr, target, direction) {\n if (arr[0] <= target) {\n return 0;\n }\n\n const n = arr.length;\n if (target <= arr[n - 1]) {\n return n - 1;\n }\n\n if (typeof direction === 'function') {\n for (let i = 1; i < n; ++i) {\n const candidate = arr[i];\n if (candidate === target) {\n return i;\n }\n if (candidate < target) {\n if (direction(target, arr[i - 1], candidate) > 0) {\n return i - 1;\n }\n return i;\n }\n }\n return n - 1;\n }\n\n if (direction > 0) {\n for (let i = 1; i < n; ++i) {\n if (arr[i] < target) {\n return i - 1;\n }\n }\n return n - 1;\n }\n\n if (direction < 0) {\n for (let i = 1; i < n; ++i) {\n if (arr[i] <= target) {\n return i;\n }\n }\n return n - 1;\n }\n\n for (let i = 1; i < n; ++i) {\n if (arr[i] == target) {\n return i;\n }\n if (arr[i] < target) {\n if (arr[i - 1] - target < target - arr[i]) {\n return i - 1;\n }\n return i;\n }\n }\n return n - 1;\n}\n\n/**\n * @param {Array<*>} arr Array.\n * @param {number} begin Begin index.\n * @param {number} end End index.\n */\nexport function reverseSubArray(arr, begin, end) {\n while (begin < end) {\n const tmp = arr[begin];\n arr[begin] = arr[end];\n arr[end] = tmp;\n ++begin;\n --end;\n }\n}\n\n/**\n * @param {Array} arr The array to modify.\n * @param {!Array|VALUE} data The elements or arrays of elements to add to arr.\n * @template VALUE\n */\nexport function extend(arr, data) {\n const extension = Array.isArray(data) ? data : [data];\n const length = extension.length;\n for (let i = 0; i < length; i++) {\n arr[arr.length] = extension[i];\n }\n}\n\n/**\n * @param {Array} arr The array to modify.\n * @param {VALUE} obj The element to remove.\n * @template VALUE\n * @return {boolean} If the element was removed.\n */\nexport function remove(arr, obj) {\n const i = arr.indexOf(obj);\n const found = i > -1;\n if (found) {\n arr.splice(i, 1);\n }\n return found;\n}\n\n/**\n * @param {Array|Uint8ClampedArray} arr1 The first array to compare.\n * @param {Array|Uint8ClampedArray} arr2 The second array to compare.\n * @return {boolean} Whether the two arrays are equal.\n */\nexport function equals(arr1, arr2) {\n const len1 = arr1.length;\n if (len1 !== arr2.length) {\n return false;\n }\n for (let i = 0; i < len1; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Sort the passed array such that the relative order of equal elements is preserved.\n * See https://en.wikipedia.org/wiki/Sorting_algorithm#Stability for details.\n * @param {Array<*>} arr The array to sort (modifies original).\n * @param {!function(*, *): number} compareFnc Comparison function.\n * @api\n */\nexport function stableSort(arr, compareFnc) {\n const length = arr.length;\n const tmp = Array(arr.length);\n let i;\n for (i = 0; i < length; i++) {\n tmp[i] = {index: i, value: arr[i]};\n }\n tmp.sort(function (a, b) {\n return compareFnc(a.value, b.value) || a.index - b.index;\n });\n for (i = 0; i < arr.length; i++) {\n arr[i] = tmp[i].value;\n }\n}\n\n/**\n * @param {Array<*>} arr The array to test.\n * @param {Function} [func] Comparison function.\n * @param {boolean} [strict] Strictly sorted (default false).\n * @return {boolean} Return index.\n */\nexport function isSorted(arr, func, strict) {\n const compare = func || ascending;\n return arr.every(function (currentVal, index) {\n if (index === 0) {\n return true;\n }\n const res = compare(arr[index - 1], currentVal);\n return !(res > 0 || (strict && res === 0));\n });\n}\n","/**\n * @module ol/geom/flat/contains\n */\nimport {forEachCorner} from '../../extent.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} Contains extent.\n */\nexport function linearRingContainsExtent(\n flatCoordinates,\n offset,\n end,\n stride,\n extent,\n) {\n const outside = forEachCorner(\n extent,\n /**\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} Contains (x, y).\n */\n function (coordinate) {\n return !linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n coordinate[0],\n coordinate[1],\n );\n },\n );\n return !outside;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n x,\n y,\n) {\n // https://geomalgorithms.com/a03-_inclusion.html\n // Copyright 2000 softSurfer, 2012 Dan Sunday\n // This code may be freely used and modified for any purpose\n // providing that this copyright notice is included with it.\n // SoftSurfer makes no warranty for this code, and cannot be held\n // liable for any real or imagined damage resulting from its use.\n // Users of this code must verify correctness for their application.\n let wn = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n if (y1 <= y) {\n if (y2 > y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) > 0) {\n wn++;\n }\n } else if (y2 <= y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) < 0) {\n wn--;\n }\n x1 = x2;\n y1 = y2;\n }\n return wn !== 0;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingsContainsXY(\n flatCoordinates,\n offset,\n ends,\n stride,\n x,\n y,\n) {\n if (ends.length === 0) {\n return false;\n }\n if (!linearRingContainsXY(flatCoordinates, offset, ends[0], stride, x, y)) {\n return false;\n }\n for (let i = 1, ii = ends.length; i < ii; ++i) {\n if (\n linearRingContainsXY(flatCoordinates, ends[i - 1], ends[i], stride, x, y)\n ) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingssContainsXY(\n flatCoordinates,\n offset,\n endss,\n stride,\n x,\n y,\n) {\n if (endss.length === 0) {\n return false;\n }\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n return true;\n }\n offset = ends[ends.length - 1];\n }\n return false;\n}\n","/**\n * @module ol/geom/flat/interiorpoint\n */\nimport {ascending} from '../../array.js';\nimport {linearRingsContainsXY} from './contains.js';\n\n/**\n * Calculates a point that is likely to lie in the interior of the linear rings.\n * Inspired by JTS's com.vividsolutions.jts.geom.Geometry#getInteriorPoint.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Array} flatCenters Flat centers.\n * @param {number} flatCentersOffset Flat center offset.\n * @param {Array} [dest] Destination.\n * @return {Array} Destination point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointOfArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n flatCenters,\n flatCentersOffset,\n dest,\n) {\n let i, ii, x, x1, x2, y1, y2;\n const y = flatCenters[flatCentersOffset + 1];\n /** @type {Array} */\n const intersections = [];\n // Calculate intersections with the horizontal line\n for (let r = 0, rr = ends.length; r < rr; ++r) {\n const end = ends[r];\n x1 = flatCoordinates[end - stride];\n y1 = flatCoordinates[end - stride + 1];\n for (i = offset; i < end; i += stride) {\n x2 = flatCoordinates[i];\n y2 = flatCoordinates[i + 1];\n if ((y <= y1 && y2 <= y) || (y1 <= y && y <= y2)) {\n x = ((y - y1) / (y2 - y1)) * (x2 - x1) + x1;\n intersections.push(x);\n }\n x1 = x2;\n y1 = y2;\n }\n }\n // Find the longest segment of the horizontal line that has its center point\n // inside the linear ring.\n let pointX = NaN;\n let maxSegmentLength = -Infinity;\n intersections.sort(ascending);\n x1 = intersections[0];\n for (i = 1, ii = intersections.length; i < ii; ++i) {\n x2 = intersections[i];\n const segmentLength = Math.abs(x2 - x1);\n if (segmentLength > maxSegmentLength) {\n x = (x1 + x2) / 2;\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n pointX = x;\n maxSegmentLength = segmentLength;\n }\n }\n x1 = x2;\n }\n if (isNaN(pointX)) {\n // There is no horizontal line that has its center point inside the linear\n // ring. Use the center of the the linear ring's extent.\n pointX = flatCenters[flatCentersOffset];\n }\n if (dest) {\n dest.push(pointX, y, maxSegmentLength);\n return dest;\n }\n return [pointX, y, maxSegmentLength];\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array} flatCenters Flat centers.\n * @return {Array} Interior points as XYM coordinates, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointsOfMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n flatCenters,\n) {\n /** @type {Array} */\n let interiorPoints = [];\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n interiorPoints = getInteriorPointOfArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n flatCenters,\n 2 * i,\n interiorPoints,\n );\n offset = ends[ends.length - 1];\n }\n return interiorPoints;\n}\n","/**\n * @module ol/proj/Units\n */\n\n/**\n * @typedef {'radians' | 'degrees' | 'ft' | 'm' | 'pixels' | 'tile-pixels' | 'us-ft'} Units\n * Projection units.\n */\n\n/**\n * See http://duff.ess.washington.edu/data/raster/drg/docs/geotiff.txt\n * @type {Object}\n */\nconst unitByCode = {\n '9001': 'm',\n '9002': 'ft',\n '9003': 'us-ft',\n '9101': 'radians',\n '9102': 'degrees',\n};\n\n/**\n * @param {number} code Unit code.\n * @return {Units} Units.\n */\nexport function fromCode(code) {\n return unitByCode[code];\n}\n\n/**\n * @typedef {Object} MetersPerUnitLookup\n * @property {number} radians Radians\n * @property {number} degrees Degrees\n * @property {number} ft Feet\n * @property {number} m Meters\n * @property {number} us-ft US feet\n */\n\n/**\n * Meters per unit lookup table.\n * @const\n * @type {MetersPerUnitLookup}\n * @api\n */\nexport const METERS_PER_UNIT = {\n // use the radius of the Normal sphere\n 'radians': 6370997 / (2 * Math.PI),\n 'degrees': (2 * Math.PI * 6370997) / 360,\n 'ft': 0.3048,\n 'm': 1,\n 'us-ft': 1200 / 3937,\n};\n","/**\n * @module ol/proj/Projection\n */\nimport {METERS_PER_UNIT} from './Units.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} code The SRS identifier code, e.g. `EPSG:4326`.\n * @property {import(\"./Units.js\").Units} [units] Units. Required unless a\n * proj4 projection is defined for `code`.\n * @property {import(\"../extent.js\").Extent} [extent] The validity extent for the SRS.\n * @property {string} [axisOrientation='enu'] The axis orientation as specified in Proj4.\n * @property {boolean} [global=false] Whether the projection is valid for the whole globe.\n * @property {number} [metersPerUnit] The meters per unit for the SRS.\n * If not provided, the `units` are used to get the meters per unit from the {@link METERS_PER_UNIT}\n * lookup table.\n * @property {import(\"../extent.js\").Extent} [worldExtent] The world extent for the SRS.\n * @property {function(number, import(\"../coordinate.js\").Coordinate):number} [getPointResolution]\n * Function to determine resolution at a point. The function is called with a\n * `number` view resolution and a {@link module:ol/coordinate~Coordinate} as arguments, and returns\n * the `number` resolution in projection units at the passed coordinate. If this is `undefined`,\n * the default {@link module:ol/proj.getPointResolution} function will be used.\n */\n\n/**\n * @classdesc\n * In most cases, you should not need to create instances of this class.\n * Instead, where projection information is required, you can use a string\n * projection code or identifier (e.g. `EPSG:4326`) instead of a projection\n * instance.\n *\n * The library includes support for transforming coordinates between the following\n * projections:\n *\n * * WGS 84 / Geographic - Using codes `EPSG:4326`, `CRS:84`, `urn:ogc:def:crs:EPSG:6.6:4326`,\n * `urn:ogc:def:crs:OGC:1.3:CRS84`, `urn:ogc:def:crs:OGC:2:84`, `http://www.opengis.net/gml/srs/epsg.xml#4326`,\n * or `urn:x-ogc:def:crs:EPSG:4326`\n * * WGS 84 / Spherical Mercator - Using codes `EPSG:3857`, `EPSG:102100`, `EPSG:102113`, `EPSG:900913`,\n * `urn:ogc:def:crs:EPSG:6.18:3:3857`, or `http://www.opengis.net/gml/srs/epsg.xml#3857`\n * * WGS 84 / UTM zones - Using codes `EPSG:32601` through `EPSG:32660` for northern zones\n * and `EPSG:32701` through `EPSG:32760` for southern zones. Note that the built-in UTM transforms\n * are lower accuracy (with errors on the order of 0.1 m) than those that you might get in a\n * library like [proj4js](https://github.com/proj4js/proj4js).\n *\n * For additional projection support, or to use higher accuracy transforms than the built-in ones, you can use\n * the [proj4js](https://github.com/proj4js/proj4js) library. With `proj4js`, after adding any new projection\n * definitions, call the {@link module:ol/proj/proj4.register} function.\n *\n * You can use the {@link module:ol/proj.get} function to retrieve a projection instance\n * for one of the registered projections.\n *\n * @api\n */\nclass Projection {\n /**\n * @param {Options} options Projection options.\n */\n constructor(options) {\n /**\n * @private\n * @type {string}\n */\n this.code_ = options.code;\n\n /**\n * Units of projected coordinates. When set to `TILE_PIXELS`, a\n * `this.extent_` and `this.worldExtent_` must be configured properly for each\n * tile.\n * @private\n * @type {import(\"./Units.js\").Units}\n */\n this.units_ = /** @type {import(\"./Units.js\").Units} */ (options.units);\n\n /**\n * Validity extent of the projection in projected coordinates. For projections\n * with `TILE_PIXELS` units, this is the extent of the tile in\n * tile pixel space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.extent_ = options.extent !== undefined ? options.extent : null;\n\n /**\n * Extent of the world in EPSG:4326. For projections with\n * `TILE_PIXELS` units, this is the extent of the tile in\n * projected coordinate space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.worldExtent_ =\n options.worldExtent !== undefined ? options.worldExtent : null;\n\n /**\n * @private\n * @type {string}\n */\n this.axisOrientation_ =\n options.axisOrientation !== undefined ? options.axisOrientation : 'enu';\n\n /**\n * @private\n * @type {boolean}\n */\n this.global_ = options.global !== undefined ? options.global : false;\n\n /**\n * @private\n * @type {boolean}\n */\n this.canWrapX_ = !!(this.global_ && this.extent_);\n\n /**\n * @private\n * @type {function(number, import(\"../coordinate.js\").Coordinate):number|undefined}\n */\n this.getPointResolutionFunc_ = options.getPointResolution;\n\n /**\n * @private\n * @type {import(\"../tilegrid/TileGrid.js\").default}\n */\n this.defaultTileGrid_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.metersPerUnit_ = options.metersPerUnit;\n }\n\n /**\n * @return {boolean} The projection is suitable for wrapping the x-axis\n */\n canWrapX() {\n return this.canWrapX_;\n }\n\n /**\n * Get the code for this projection, e.g. 'EPSG:4326'.\n * @return {string} Code.\n * @api\n */\n getCode() {\n return this.code_;\n }\n\n /**\n * Get the validity extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getExtent() {\n return this.extent_;\n }\n\n /**\n * Get the units of this projection.\n * @return {import(\"./Units.js\").Units} Units.\n * @api\n */\n getUnits() {\n return this.units_;\n }\n\n /**\n * Get the amount of meters per unit of this projection. If the projection is\n * not configured with `metersPerUnit` or a units identifier, the return is\n * `undefined`.\n * @return {number|undefined} Meters.\n * @api\n */\n getMetersPerUnit() {\n return this.metersPerUnit_ || METERS_PER_UNIT[this.units_];\n }\n\n /**\n * Get the world extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getWorldExtent() {\n return this.worldExtent_;\n }\n\n /**\n * Get the axis orientation of this projection.\n * Example values are:\n * enu - the default easting, northing, elevation.\n * neu - northing, easting, up - useful for \"lat/long\" geographic coordinates,\n * or south orientated transverse mercator.\n * wnu - westing, northing, up - some planetary coordinate systems have\n * \"west positive\" coordinate systems\n * @return {string} Axis orientation.\n * @api\n */\n getAxisOrientation() {\n return this.axisOrientation_;\n }\n\n /**\n * Is this projection a global projection which spans the whole world?\n * @return {boolean} Whether the projection is global.\n * @api\n */\n isGlobal() {\n return this.global_;\n }\n\n /**\n * Set if the projection is a global projection which spans the whole world\n * @param {boolean} global Whether the projection is global.\n * @api\n */\n setGlobal(global) {\n this.global_ = global;\n this.canWrapX_ = !!(global && this.extent_);\n }\n\n /**\n * @return {import(\"../tilegrid/TileGrid.js\").default} The default tile grid.\n */\n getDefaultTileGrid() {\n return this.defaultTileGrid_;\n }\n\n /**\n * @param {import(\"../tilegrid/TileGrid.js\").default} tileGrid The default tile grid.\n */\n setDefaultTileGrid(tileGrid) {\n this.defaultTileGrid_ = tileGrid;\n }\n\n /**\n * Set the validity extent for this projection.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n setExtent(extent) {\n this.extent_ = extent;\n this.canWrapX_ = !!(this.global_ && extent);\n }\n\n /**\n * Set the world extent for this projection.\n * @param {import(\"../extent.js\").Extent} worldExtent World extent\n * [minlon, minlat, maxlon, maxlat].\n * @api\n */\n setWorldExtent(worldExtent) {\n this.worldExtent_ = worldExtent;\n }\n\n /**\n * Set the getPointResolution function (see {@link module:ol/proj.getPointResolution}\n * for this projection.\n * @param {function(number, import(\"../coordinate.js\").Coordinate):number} func Function\n * @api\n */\n setGetPointResolution(func) {\n this.getPointResolutionFunc_ = func;\n }\n\n /**\n * Get the custom point resolution function for this projection (if set).\n * @return {function(number, import(\"../coordinate.js\").Coordinate):number|undefined} The custom point\n * resolution function (if set).\n */\n getPointResolutionFunc() {\n return this.getPointResolutionFunc_;\n }\n}\n\nexport default Projection;\n","/**\n * @module ol/proj/epsg3857\n */\nimport Projection from './Projection.js';\n\n/**\n * Radius of WGS84 sphere\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n/**\n * @const\n * @type {number}\n */\nexport const HALF_SIZE = Math.PI * RADIUS;\n\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const EXTENT = [-HALF_SIZE, -HALF_SIZE, HALF_SIZE, HALF_SIZE];\n\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const WORLD_EXTENT = [-180, -85, 180, 85];\n\n/**\n * Maximum safe value in y direction\n * @const\n * @type {number}\n */\nexport const MAX_SAFE_Y = RADIUS * Math.log(Math.tan(Math.PI / 2));\n\n/**\n * @classdesc\n * Projection object for web/spherical Mercator (EPSG:3857).\n */\nclass EPSG3857Projection extends Projection {\n /**\n * @param {string} code Code.\n */\n constructor(code) {\n super({\n code: code,\n units: 'm',\n extent: EXTENT,\n global: true,\n worldExtent: WORLD_EXTENT,\n getPointResolution: function (resolution, point) {\n return resolution / Math.cosh(point[1] / RADIUS);\n },\n });\n }\n}\n\n/**\n * Projections equal to EPSG:3857.\n *\n * @const\n * @type {Array}\n */\nexport const PROJECTIONS = [\n new EPSG3857Projection('EPSG:3857'),\n new EPSG3857Projection('EPSG:102100'),\n new EPSG3857Projection('EPSG:102113'),\n new EPSG3857Projection('EPSG:900913'),\n new EPSG3857Projection('http://www.opengis.net/def/crs/EPSG/0/3857'),\n new EPSG3857Projection('http://www.opengis.net/gml/srs/epsg.xml#3857'),\n];\n\n/**\n * Transformation from EPSG:4326 to EPSG:3857.\n *\n * @param {Array} input Input array of coordinate values.\n * @param {Array} [output] Output array of coordinate values.\n * @param {number} [dimension] Dimension (default is `2`).\n * @param {number} [stride] Stride (default is `dimension`).\n * @return {Array} Output array of coordinate values.\n */\nexport function fromEPSG4326(input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n stride = stride ?? dimension;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += stride) {\n output[i] = (HALF_SIZE * input[i]) / 180;\n let y = RADIUS * Math.log(Math.tan((Math.PI * (+input[i + 1] + 90)) / 360));\n if (y > MAX_SAFE_Y) {\n y = MAX_SAFE_Y;\n } else if (y < -MAX_SAFE_Y) {\n y = -MAX_SAFE_Y;\n }\n output[i + 1] = y;\n }\n return output;\n}\n\n/**\n * Transformation from EPSG:3857 to EPSG:4326.\n *\n * @param {Array} input Input array of coordinate values.\n * @param {Array} [output] Output array of coordinate values.\n * @param {number} [dimension] Dimension (default is `2`).\n * @param {number} [stride] Stride (default is `dimension`).\n * @return {Array} Output array of coordinate values.\n */\nexport function toEPSG4326(input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n stride = stride ?? dimension;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += stride) {\n output[i] = (180 * input[i]) / HALF_SIZE;\n output[i + 1] =\n (360 * Math.atan(Math.exp(input[i + 1] / RADIUS))) / Math.PI - 90;\n }\n return output;\n}\n","/**\n * @module ol/proj/epsg4326\n */\nimport Projection from './Projection.js';\n\n/**\n * Semi-major radius of the WGS84 ellipsoid.\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n/**\n * Extent of the EPSG:4326 projection which is the whole world.\n *\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const EXTENT = [-180, -90, 180, 90];\n\n/**\n * @const\n * @type {number}\n */\nexport const METERS_PER_UNIT = (Math.PI * RADIUS) / 180;\n\n/**\n * @classdesc\n * Projection object for WGS84 geographic coordinates (EPSG:4326).\n *\n * Note that OpenLayers does not strictly comply with the EPSG definition.\n * The EPSG registry defines 4326 as a CRS for Latitude,Longitude (y,x).\n * OpenLayers treats EPSG:4326 as a pseudo-projection, with x,y coordinates.\n */\nclass EPSG4326Projection extends Projection {\n /**\n * @param {string} code Code.\n * @param {string} [axisOrientation] Axis orientation.\n */\n constructor(code, axisOrientation) {\n super({\n code: code,\n units: 'degrees',\n extent: EXTENT,\n axisOrientation: axisOrientation,\n global: true,\n metersPerUnit: METERS_PER_UNIT,\n worldExtent: EXTENT,\n });\n }\n}\n\n/**\n * Projections equal to EPSG:4326.\n *\n * @const\n * @type {Array}\n */\nexport const PROJECTIONS = [\n new EPSG4326Projection('CRS:84'),\n new EPSG4326Projection('EPSG:4326', 'neu'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:1.3:CRS84'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:2:84'),\n new EPSG4326Projection('http://www.opengis.net/def/crs/OGC/1.3/CRS84'),\n new EPSG4326Projection('http://www.opengis.net/gml/srs/epsg.xml#4326', 'neu'),\n new EPSG4326Projection('http://www.opengis.net/def/crs/EPSG/0/4326', 'neu'),\n];\n","/**\n * @module ol/proj/projections\n */\n\n/**\n * @type {Object}\n */\nlet cache = {};\n\n/**\n * Clear the projections cache.\n */\nexport function clear() {\n cache = {};\n}\n\n/**\n * Get a cached projection by code.\n * @param {string} code The code for the projection.\n * @return {import(\"./Projection.js\").default|null} The projection (if cached).\n */\nexport function get(code) {\n return (\n cache[code] ||\n cache[code.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\\w+)$/, 'EPSG:$3')] ||\n null\n );\n}\n\n/**\n * Add a projection to the cache.\n * @param {string} code The projection code.\n * @param {import(\"./Projection.js\").default} projection The projection to cache.\n */\nexport function add(code, projection) {\n cache[code] = projection;\n}\n","/**\n * @module ol/proj/transforms\n */\nimport {isEmpty} from '../obj.js';\n\n/**\n * @private\n * @type {!Object>}\n */\nlet transforms = {};\n\n/**\n * Clear the transform cache.\n */\nexport function clear() {\n transforms = {};\n}\n\n/**\n * Registers a conversion function to convert coordinates from the source\n * projection to the destination projection.\n *\n * @param {import(\"./Projection.js\").default} source Source.\n * @param {import(\"./Projection.js\").default} destination Destination.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform.\n */\nexport function add(source, destination, transformFn) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n if (!(sourceCode in transforms)) {\n transforms[sourceCode] = {};\n }\n transforms[sourceCode][destinationCode] = transformFn;\n}\n\n/**\n * Unregisters the conversion function to convert coordinates from the source\n * projection to the destination projection. This method is used to clean up\n * cached transforms during testing.\n *\n * @param {import(\"./Projection.js\").default} source Source projection.\n * @param {import(\"./Projection.js\").default} destination Destination projection.\n * @return {import(\"../proj.js\").TransformFunction} transformFn The unregistered transform.\n */\nexport function remove(source, destination) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n const transform = transforms[sourceCode][destinationCode];\n delete transforms[sourceCode][destinationCode];\n if (isEmpty(transforms[sourceCode])) {\n delete transforms[sourceCode];\n }\n return transform;\n}\n\n/**\n * Get a transform given a source code and a destination code.\n * @param {string} sourceCode The code for the source projection.\n * @param {string} destinationCode The code for the destination projection.\n * @return {import(\"../proj.js\").TransformFunction|null} The transform function (if found).\n */\nexport function get(sourceCode, destinationCode) {\n if (sourceCode in transforms && destinationCode in transforms[sourceCode]) {\n return transforms[sourceCode][destinationCode];\n }\n return null;\n}\n","/**\n * @module ol/proj/utm\n */\n\n/**\n * Adapted from https://github.com/Turbo87/utm\n * Copyright (c) 2012-2017 Tobias Bieniek\n *\n * The functions here provide approximate transforms to and from UTM.\n * They are not appropriate for use beyond the validity extend of a UTM\n * zone, and the accuracy of the transform decreases toward the zone\n * edges.\n */\n\nimport Projection from './Projection.js';\nimport {toDegrees, toRadians, wrap} from '../math.js';\n\n/**\n * @typedef {Object} UTMZone\n * @property {number} number The zone number (1 - 60).\n * @property {boolean} north The northern hemisphere.\n */\n\nconst K0 = 0.9996;\n\nconst E = 0.00669438;\nconst E2 = E * E;\nconst E3 = E2 * E;\nconst E_P2 = E / (1 - E);\n\nconst SQRT_E = Math.sqrt(1 - E);\nconst _E = (1 - SQRT_E) / (1 + SQRT_E);\nconst _E2 = _E * _E;\nconst _E3 = _E2 * _E;\nconst _E4 = _E3 * _E;\nconst _E5 = _E4 * _E;\n\nconst M1 = 1 - E / 4 - (3 * E2) / 64 - (5 * E3) / 256;\nconst M2 = (3 * E) / 8 + (3 * E2) / 32 + (45 * E3) / 1024;\nconst M3 = (15 * E2) / 256 + (45 * E3) / 1024;\nconst M4 = (35 * E3) / 3072;\n\nconst P2 = (3 / 2) * _E - (27 / 32) * _E3 + (269 / 512) * _E5;\nconst P3 = (21 / 16) * _E2 - (55 / 32) * _E4;\nconst P4 = (151 / 96) * _E3 - (417 / 128) * _E5;\nconst P5 = (1097 / 512) * _E4;\n\nconst R = 6378137;\n\n/**\n * @param {number} easting Easting value of coordinate.\n * @param {number} northing Northing value of coordinate.\n * @param {UTMZone} zone The UTM zone.\n * @return {import(\"../coordinate.js\").Coordinate} The transformed coordinate.\n */\nfunction toLonLat(easting, northing, zone) {\n const x = easting - 500000;\n const y = zone.north ? northing : northing - 10000000;\n\n const m = y / K0;\n const mu = m / (R * M1);\n\n const pRad =\n mu +\n P2 * Math.sin(2 * mu) +\n P3 * Math.sin(4 * mu) +\n P4 * Math.sin(6 * mu) +\n P5 * Math.sin(8 * mu);\n\n const pSin = Math.sin(pRad);\n const pSin2 = pSin * pSin;\n\n const pCos = Math.cos(pRad);\n\n const pTan = pSin / pCos;\n const pTan2 = pTan * pTan;\n const pTan4 = pTan2 * pTan2;\n\n const epSin = 1 - E * pSin2;\n const epSinSqrt = Math.sqrt(1 - E * pSin2);\n\n const n = R / epSinSqrt;\n const r = (1 - E) / epSin;\n\n const c = E_P2 * pCos ** 2;\n const c2 = c * c;\n\n const d = x / (n * K0);\n const d2 = d * d;\n const d3 = d2 * d;\n const d4 = d3 * d;\n const d5 = d4 * d;\n const d6 = d5 * d;\n\n const latitude =\n pRad -\n (pTan / r) *\n (d2 / 2 - (d4 / 24) * (5 + 3 * pTan2 + 10 * c - 4 * c2 - 9 * E_P2)) +\n (d6 / 720) * (61 + 90 * pTan2 + 298 * c + 45 * pTan4 - 252 * E_P2 - 3 * c2);\n\n let longitude =\n (d -\n (d3 / 6) * (1 + 2 * pTan2 + c) +\n (d5 / 120) * (5 - 2 * c + 28 * pTan2 - 3 * c2 + 8 * E_P2 + 24 * pTan4)) /\n pCos;\n\n longitude = wrap(\n longitude + toRadians(zoneToCentralLongitude(zone.number)),\n -Math.PI,\n Math.PI,\n );\n\n return [toDegrees(longitude), toDegrees(latitude)];\n}\n\nconst MIN_LATITUDE = -80;\nconst MAX_LATITUDE = 84;\nconst MIN_LONGITUDE = -180;\nconst MAX_LONGITUDE = 180;\n\n/**\n * @param {number} longitude The longitude.\n * @param {number} latitude The latitude.\n * @param {UTMZone} zone The UTM zone.\n * @return {import('../coordinate.js').Coordinate} The UTM coordinate.\n */\nfunction fromLonLat(longitude, latitude, zone) {\n longitude = wrap(longitude, MIN_LONGITUDE, MAX_LONGITUDE);\n\n if (latitude < MIN_LATITUDE) {\n latitude = MIN_LATITUDE;\n } else if (latitude > MAX_LATITUDE) {\n latitude = MAX_LATITUDE;\n }\n\n const latRad = toRadians(latitude);\n const latSin = Math.sin(latRad);\n const latCos = Math.cos(latRad);\n\n const latTan = latSin / latCos;\n const latTan2 = latTan * latTan;\n const latTan4 = latTan2 * latTan2;\n\n const lonRad = toRadians(longitude);\n const centralLon = zoneToCentralLongitude(zone.number);\n const centralLonRad = toRadians(centralLon);\n\n const n = R / Math.sqrt(1 - E * latSin ** 2);\n const c = E_P2 * latCos ** 2;\n\n const a = latCos * wrap(lonRad - centralLonRad, -Math.PI, Math.PI);\n const a2 = a * a;\n const a3 = a2 * a;\n const a4 = a3 * a;\n const a5 = a4 * a;\n const a6 = a5 * a;\n\n const m =\n R *\n (M1 * latRad -\n M2 * Math.sin(2 * latRad) +\n M3 * Math.sin(4 * latRad) -\n M4 * Math.sin(6 * latRad));\n\n const easting =\n K0 *\n n *\n (a +\n (a3 / 6) * (1 - latTan2 + c) +\n (a5 / 120) * (5 - 18 * latTan2 + latTan4 + 72 * c - 58 * E_P2)) +\n 500000;\n\n let northing =\n K0 *\n (m +\n n *\n latTan *\n (a2 / 2 +\n (a4 / 24) * (5 - latTan2 + 9 * c + 4 * c ** 2) +\n (a6 / 720) * (61 - 58 * latTan2 + latTan4 + 600 * c - 330 * E_P2)));\n\n if (!zone.north) {\n northing += 10000000;\n }\n\n return [easting, northing];\n}\n\n/**\n * @param {number} zone The zone number.\n * @return {number} The central longitude in degrees.\n */\nfunction zoneToCentralLongitude(zone) {\n return (zone - 1) * 6 - 180 + 3;\n}\n\n/**\n * @type {Array}\n */\nconst epsgRegExes = [\n /^EPSG:(\\d+)$/,\n /^urn:ogc:def:crs:EPSG::(\\d+)$/,\n /^http:\\/\\/www\\.opengis\\.net\\/def\\/crs\\/EPSG\\/0\\/(\\d+)$/,\n];\n\n/**\n * @param {string} code The projection code.\n * @return {UTMZone|null} The UTM zone info (or null if not UTM).\n */\nexport function zoneFromCode(code) {\n let epsgId = 0;\n for (const re of epsgRegExes) {\n const match = code.match(re);\n if (match) {\n epsgId = parseInt(match[1]);\n break;\n }\n }\n if (!epsgId) {\n return null;\n }\n\n let number = 0;\n let north = false;\n if (epsgId > 32700 && epsgId < 32761) {\n number = epsgId - 32700;\n } else if (epsgId > 32600 && epsgId < 32661) {\n north = true;\n number = epsgId - 32600;\n }\n if (!number) {\n return null;\n }\n\n return {number, north};\n}\n\n/**\n * @param {function(number, number, UTMZone): import('../coordinate.js').Coordinate} transformer The transformer.\n * @param {UTMZone} zone The UTM zone.\n * @return {import('../proj.js').TransformFunction} The transform function.\n */\nfunction makeTransformFunction(transformer, zone) {\n return function (input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n stride = stride ?? dimension;\n if (!output) {\n if (dimension > 2) {\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += stride) {\n const x = input[i];\n const y = input[i + 1];\n const coord = transformer(x, y, zone);\n output[i] = coord[0];\n output[i + 1] = coord[1];\n }\n return output;\n };\n}\n\n/**\n * @param {string} code The projection code.\n * @return {import('./Projection.js').default|null} A projection or null if unable to create one.\n */\nexport function makeProjection(code) {\n const zone = zoneFromCode(code);\n if (!zone) {\n return null;\n }\n return new Projection({code, units: 'm'});\n}\n\n/**\n * @param {import('./Projection.js').default} projection The projection.\n * @return {import('../proj.js').Transforms|null} The transforms lookup or null if unable to handle projection.\n */\nexport function makeTransforms(projection) {\n const zone = zoneFromCode(projection.getCode());\n if (!zone) {\n return null;\n }\n\n return {\n forward: makeTransformFunction(fromLonLat, zone),\n inverse: makeTransformFunction(toLonLat, zone),\n };\n}\n","/**\n * @module ol/proj\n */\n\n/**\n * The ol/proj module stores:\n * * a list of {@link module:ol/proj/Projection~Projection}\n * objects, one for each projection supported by the application\n * * a list of transform functions needed to convert coordinates in one projection\n * into another.\n *\n * The static functions are the methods used to maintain these.\n * Each transform function can handle not only simple coordinate pairs, but also\n * large arrays of coordinates such as vector geometries.\n *\n * When loaded, the library adds projection objects for EPSG:4326 (WGS84\n * geographic coordinates) and EPSG:3857 (Web or Spherical Mercator, as used\n * for example by Bing Maps or OpenStreetMap), together with the relevant\n * transform functions.\n *\n * Additional transforms may be added by using the http://proj4js.org/\n * library (version 2.2 or later). You can use the full build supplied by\n * Proj4js, or create a custom build to support those projections you need; see\n * the Proj4js website for how to do this. You also need the Proj4js definitions\n * for the required projections. These definitions can be obtained from\n * https://epsg.io/, and are a JS function, so can be loaded in a script\n * tag (as in the examples) or pasted into your application.\n *\n * After all required projection definitions are added to proj4's registry (by\n * using `proj4.defs()`), simply call `register(proj4)` from the `ol/proj/proj4`\n * package. Existing transforms are not changed by this function. See\n * examples/wms-image-custom-proj for an example of this.\n *\n * Additional projection definitions can be registered with `proj4.defs()` any\n * time. Just make sure to call `register(proj4)` again; for example, with user-supplied data where you don't\n * know in advance what projections are needed, you can initially load minimal\n * support and then load whichever are requested.\n *\n * Note that Proj4js does not support projection extents. If you want to add\n * one for creating default tile grids, you can add it after the Projection\n * object has been created with `setExtent`, for example,\n * `get('EPSG:1234').setExtent(extent)`.\n *\n * In addition to Proj4js support, any transform functions can be added with\n * {@link module:ol/proj.addCoordinateTransforms}. To use this, you must first create\n * a {@link module:ol/proj/Projection~Projection} object for the new projection and add it with\n * {@link module:ol/proj.addProjection}. You can then add the forward and inverse\n * functions with {@link module:ol/proj.addCoordinateTransforms}. See\n * examples/wms-custom-proj for an example of this.\n *\n * Note that if no transforms are needed and you only need to define the\n * projection, just add a {@link module:ol/proj/Projection~Projection} with\n * {@link module:ol/proj.addProjection}. See examples/wms-no-proj for an example of\n * this.\n */\nimport Projection from './proj/Projection.js';\nimport {\n PROJECTIONS as EPSG3857_PROJECTIONS,\n fromEPSG4326,\n toEPSG4326,\n} from './proj/epsg3857.js';\nimport {PROJECTIONS as EPSG4326_PROJECTIONS} from './proj/epsg4326.js';\nimport {METERS_PER_UNIT} from './proj/Units.js';\nimport {\n add as addProj,\n clear as clearProj,\n get as getProj,\n} from './proj/projections.js';\nimport {\n add as addTransformFunc,\n clear as clearTransformFuncs,\n get as getTransformFunc,\n} from './proj/transforms.js';\nimport {applyTransform, getWidth} from './extent.js';\nimport {clamp, modulo} from './math.js';\nimport {equals, getWorldsAway} from './coordinate.js';\nimport {getDistance} from './sphere.js';\nimport {\n makeProjection as makeUTMProjection,\n makeTransforms as makeUTMTransforms,\n} from './proj/utm.js';\nimport {warn} from './console.js';\n\n/**\n * A projection as {@link module:ol/proj/Projection~Projection}, SRS identifier\n * string or undefined.\n * @typedef {Projection|string|undefined} ProjectionLike\n * @api\n */\n\n/**\n * @typedef {Object} Transforms\n * @property {TransformFunction} forward The forward transform (from geographic).\n * @property {TransformFunction} inverse The inverse transform (to geographic).\n */\n\n/**\n * @type {Array}\n */\nconst transformFactories = [makeUTMTransforms];\n\n/**\n * @type {Array}\n */\nconst projectionFactories = [makeUTMProjection];\n\n/**\n * A transform function accepts an array of input coordinate values, an optional\n * output array, and an optional dimension (default should be 2). The function\n * transforms the input coordinate values, populates the output array, and\n * returns the output array.\n *\n * @callback TransformFunction\n * @param {Array} input\n * @param {Array} [output]\n * @param {number} [dimension]\n * @param {number} [stride]\n * @return {Array}\n *\n * @api\n */\n\nexport {METERS_PER_UNIT};\n\nexport {Projection};\n\nlet showCoordinateWarning = true;\n\n/**\n * @param {boolean} [disable = true] Disable console info about `useGeographic()`\n */\nexport function disableCoordinateWarning(disable) {\n const hide = disable === undefined ? true : disable;\n showCoordinateWarning = !hide;\n}\n\n/**\n * @param {Array} input Input coordinate array.\n * @param {Array} [output] Output array of coordinate values.\n * @return {Array} Output coordinate array (new array, same coordinate\n * values).\n */\nexport function cloneTransform(input, output) {\n if (output !== undefined) {\n for (let i = 0, ii = input.length; i < ii; ++i) {\n output[i] = input[i];\n }\n output = output;\n } else {\n output = input.slice();\n }\n return output;\n}\n\n/**\n * @param {Array} input Input coordinate array.\n * @param {Array} [output] Output array of coordinate values.\n * @return {Array} Input coordinate array (same array as input).\n */\nexport function identityTransform(input, output) {\n if (output !== undefined && input !== output) {\n for (let i = 0, ii = input.length; i < ii; ++i) {\n output[i] = input[i];\n }\n input = output;\n }\n return input;\n}\n\n/**\n * Add a Projection object to the list of supported projections that can be\n * looked up by their code.\n *\n * @param {Projection} projection Projection instance.\n * @api\n */\nexport function addProjection(projection) {\n addProj(projection.getCode(), projection);\n addTransformFunc(projection, projection, cloneTransform);\n}\n\n/**\n * @param {Array} projections Projections.\n */\nexport function addProjections(projections) {\n projections.forEach(addProjection);\n}\n\n/**\n * Fetches a Projection object for the code specified.\n *\n * @param {ProjectionLike} projectionLike Either a code string which is\n * a combination of authority and identifier such as \"EPSG:4326\", or an\n * existing projection object, or undefined.\n * @return {Projection|null} Projection object, or null if not in list.\n * @api\n */\nexport function get(projectionLike) {\n if (!(typeof projectionLike === 'string')) {\n return projectionLike;\n }\n const projection = getProj(projectionLike);\n if (projection) {\n return projection;\n }\n for (const makeProjection of projectionFactories) {\n const projection = makeProjection(projectionLike);\n if (projection) {\n return projection;\n }\n }\n return null;\n}\n\n/**\n * Get the resolution of the point in degrees or distance units.\n * For projections with degrees as the unit this will simply return the\n * provided resolution. For other projections the point resolution is\n * by default estimated by transforming the `point` pixel to EPSG:4326,\n * measuring its width and height on the normal sphere,\n * and taking the average of the width and height.\n * A custom function can be provided for a specific projection, either\n * by setting the `getPointResolution` option in the\n * {@link module:ol/proj/Projection~Projection} constructor or by using\n * {@link module:ol/proj/Projection~Projection#setGetPointResolution} to change an existing\n * projection object.\n * @param {ProjectionLike} projection The projection.\n * @param {number} resolution Nominal resolution in projection units.\n * @param {import(\"./coordinate.js\").Coordinate} point Point to find adjusted resolution at.\n * @param {import(\"./proj/Units.js\").Units} [units] Units to get the point resolution in.\n * Default is the projection's units.\n * @return {number} Point resolution.\n * @api\n */\nexport function getPointResolution(projection, resolution, point, units) {\n projection = get(projection);\n let pointResolution;\n const getter = projection.getPointResolutionFunc();\n if (getter) {\n pointResolution = getter(resolution, point);\n if (units && units !== projection.getUnits()) {\n const metersPerUnit = projection.getMetersPerUnit();\n if (metersPerUnit) {\n pointResolution =\n (pointResolution * metersPerUnit) / METERS_PER_UNIT[units];\n }\n }\n } else {\n const projUnits = projection.getUnits();\n if ((projUnits == 'degrees' && !units) || units == 'degrees') {\n pointResolution = resolution;\n } else {\n // Estimate point resolution by transforming the center pixel to EPSG:4326,\n // measuring its width and height on the normal sphere, and taking the\n // average of the width and height.\n const toEPSG4326 = getTransformFromProjections(\n projection,\n get('EPSG:4326'),\n );\n if (!toEPSG4326 && projUnits !== 'degrees') {\n // no transform is available\n pointResolution = resolution * projection.getMetersPerUnit();\n } else {\n let vertices = [\n point[0] - resolution / 2,\n point[1],\n point[0] + resolution / 2,\n point[1],\n point[0],\n point[1] - resolution / 2,\n point[0],\n point[1] + resolution / 2,\n ];\n vertices = toEPSG4326(vertices, vertices, 2);\n const width = getDistance(vertices.slice(0, 2), vertices.slice(2, 4));\n const height = getDistance(vertices.slice(4, 6), vertices.slice(6, 8));\n pointResolution = (width + height) / 2;\n }\n const metersPerUnit = units\n ? METERS_PER_UNIT[units]\n : projection.getMetersPerUnit();\n if (metersPerUnit !== undefined) {\n pointResolution /= metersPerUnit;\n }\n }\n }\n return pointResolution;\n}\n\n/**\n * Registers transformation functions that don't alter coordinates. Those allow\n * to transform between projections with equal meaning.\n *\n * @param {Array} projections Projections.\n * @api\n */\nexport function addEquivalentProjections(projections) {\n addProjections(projections);\n projections.forEach(function (source) {\n projections.forEach(function (destination) {\n if (source !== destination) {\n addTransformFunc(source, destination, cloneTransform);\n }\n });\n });\n}\n\n/**\n * Registers transformation functions to convert coordinates in any projection\n * in projection1 to any projection in projection2.\n *\n * @param {Array} projections1 Projections with equal\n * meaning.\n * @param {Array} projections2 Projections with equal\n * meaning.\n * @param {TransformFunction} forwardTransform Transformation from any\n * projection in projection1 to any projection in projection2.\n * @param {TransformFunction} inverseTransform Transform from any projection\n * in projection2 to any projection in projection1..\n */\nexport function addEquivalentTransforms(\n projections1,\n projections2,\n forwardTransform,\n inverseTransform,\n) {\n projections1.forEach(function (projection1) {\n projections2.forEach(function (projection2) {\n addTransformFunc(projection1, projection2, forwardTransform);\n addTransformFunc(projection2, projection1, inverseTransform);\n });\n });\n}\n\n/**\n * Clear all cached projections and transforms.\n */\nexport function clearAllProjections() {\n clearProj();\n clearTransformFuncs();\n}\n\n/**\n * @param {Projection|string|undefined} projection Projection.\n * @param {string} defaultCode Default code.\n * @return {Projection} Projection.\n */\nexport function createProjection(projection, defaultCode) {\n if (!projection) {\n return get(defaultCode);\n }\n if (typeof projection === 'string') {\n return get(projection);\n }\n return /** @type {Projection} */ (projection);\n}\n\n/**\n * Creates a {@link module:ol/proj~TransformFunction} from a simple 2D coordinate transform\n * function.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} coordTransform Coordinate\n * transform.\n * @return {TransformFunction} Transform function.\n */\nexport function createTransformFromCoordinateTransform(coordTransform) {\n return (\n /**\n * @param {Array} input Input.\n * @param {Array} [output] Output.\n * @param {number} [dimension] Dimensions that should be transformed.\n * @param {number} [stride] Stride.\n * @return {Array} Output.\n */\n function (input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension !== undefined ? dimension : 2;\n stride = stride ?? dimension;\n output = output !== undefined ? output : new Array(length);\n for (let i = 0; i < length; i += stride) {\n const point = coordTransform(input.slice(i, i + dimension));\n const pointLength = point.length;\n for (let j = 0, jj = stride; j < jj; ++j) {\n output[i + j] = j >= pointLength ? input[i + j] : point[j];\n }\n }\n return output;\n }\n );\n}\n\n/**\n * Registers coordinate transform functions to convert coordinates between the\n * source projection and the destination projection.\n * The forward and inverse functions convert coordinate pairs; this function\n * converts these into the functions used internally which also handle\n * extents and coordinate arrays.\n *\n * @param {ProjectionLike} source Source projection.\n * @param {ProjectionLike} destination Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} forward The forward transform\n * function (that is, from the source projection to the destination\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} inverse The inverse transform\n * function (that is, from the destination projection to the source\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}. If the transform function can only\n * transform less dimensions than the input coordinate, it is supposeed to return a coordinate\n * with only the length it can transform. The other dimensions will be taken unchanged from the\n * source.\n * @api\n */\nexport function addCoordinateTransforms(source, destination, forward, inverse) {\n const sourceProj = get(source);\n const destProj = get(destination);\n addTransformFunc(\n sourceProj,\n destProj,\n createTransformFromCoordinateTransform(forward),\n );\n addTransformFunc(\n destProj,\n sourceProj,\n createTransformFromCoordinateTransform(inverse),\n );\n}\n\n/**\n * Transforms a coordinate from longitude/latitude to a different projection.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate as longitude and latitude, i.e.\n * an array with longitude as 1st and latitude as 2nd element.\n * @param {ProjectionLike} [projection] Target projection. The\n * default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate projected to the target projection.\n * @api\n */\nexport function fromLonLat(coordinate, projection) {\n disableCoordinateWarning();\n return transform(\n coordinate,\n 'EPSG:4326',\n projection !== undefined ? projection : 'EPSG:3857',\n );\n}\n\n/**\n * Transforms a coordinate to longitude/latitude.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Projected coordinate.\n * @param {ProjectionLike} [projection] Projection of the coordinate.\n * The default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate as longitude and latitude, i.e. an array\n * with longitude as 1st and latitude as 2nd element.\n * @api\n */\nexport function toLonLat(coordinate, projection) {\n const lonLat = transform(\n coordinate,\n projection !== undefined ? projection : 'EPSG:3857',\n 'EPSG:4326',\n );\n const lon = lonLat[0];\n if (lon < -180 || lon > 180) {\n lonLat[0] = modulo(lon + 180, 360) - 180;\n }\n return lonLat;\n}\n\n/**\n * Checks if two projections are the same, that is every coordinate in one\n * projection does represent the same geographic point as the same coordinate in\n * the other projection.\n *\n * @param {Projection} projection1 Projection 1.\n * @param {Projection} projection2 Projection 2.\n * @return {boolean} Equivalent.\n * @api\n */\nexport function equivalent(projection1, projection2) {\n if (projection1 === projection2) {\n return true;\n }\n const equalUnits = projection1.getUnits() === projection2.getUnits();\n if (projection1.getCode() === projection2.getCode()) {\n return equalUnits;\n }\n const transformFunc = getTransformFromProjections(projection1, projection2);\n return transformFunc === cloneTransform && equalUnits;\n}\n\n/**\n * Searches in the list of transform functions for the function for converting\n * coordinates from the source projection to the destination projection.\n *\n * @param {Projection} source Source Projection object.\n * @param {Projection} destination Destination Projection\n * object.\n * @return {TransformFunction|null} Transform function.\n */\nexport function getTransformFromProjections(source, destination) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n let transformFunc = getTransformFunc(sourceCode, destinationCode);\n if (transformFunc) {\n return transformFunc;\n }\n\n /**\n * @type {Transforms|null}\n */\n let sourceTransforms = null;\n\n /**\n * @type {Transforms|null}\n */\n let destinationTransforms = null;\n\n // lazily add projections if we have supported transforms\n for (const makeTransforms of transformFactories) {\n if (!sourceTransforms) {\n sourceTransforms = makeTransforms(source);\n }\n if (!destinationTransforms) {\n destinationTransforms = makeTransforms(destination);\n }\n }\n\n if (!sourceTransforms && !destinationTransforms) {\n return null;\n }\n\n const intermediateCode = 'EPSG:4326';\n if (!destinationTransforms) {\n const toDestination = getTransformFunc(intermediateCode, destinationCode);\n if (toDestination) {\n transformFunc = composeTransformFuncs(\n sourceTransforms.inverse,\n toDestination,\n );\n }\n } else if (!sourceTransforms) {\n const fromSource = getTransformFunc(sourceCode, intermediateCode);\n if (fromSource) {\n transformFunc = composeTransformFuncs(\n fromSource,\n destinationTransforms.forward,\n );\n }\n } else {\n transformFunc = composeTransformFuncs(\n sourceTransforms.inverse,\n destinationTransforms.forward,\n );\n }\n\n if (transformFunc) {\n addProjection(source);\n addProjection(destination);\n addTransformFunc(source, destination, transformFunc);\n }\n\n return transformFunc;\n}\n\n/**\n * @param {TransformFunction} t1 The first transform function.\n * @param {TransformFunction} t2 The second transform function.\n * @return {TransformFunction} The composed transform function.\n */\nfunction composeTransformFuncs(t1, t2) {\n return function (input, output, dimensions, stride) {\n output = t1(input, output, dimensions, stride);\n return t2(output, output, dimensions, stride);\n };\n}\n\n/**\n * Given the projection-like objects, searches for a transformation\n * function to convert a coordinates array from the source projection to the\n * destination projection.\n *\n * @param {ProjectionLike} source Source.\n * @param {ProjectionLike} destination Destination.\n * @return {TransformFunction} Transform function.\n * @api\n */\nexport function getTransform(source, destination) {\n const sourceProjection = get(source);\n const destinationProjection = get(destination);\n return getTransformFromProjections(sourceProjection, destinationProjection);\n}\n\n/**\n * Transforms a coordinate from source projection to destination projection.\n * This returns a new coordinate (and does not modify the original). If there\n * is no available transform between the two projection, the function will throw\n * an error.\n *\n * See {@link module:ol/proj.transformExtent} for extent transformation.\n * See the transform method of {@link module:ol/geom/Geometry~Geometry} and its\n * subclasses for geometry transforms.\n *\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\nexport function transform(coordinate, source, destination) {\n const transformFunc = getTransform(source, destination);\n if (!transformFunc) {\n const sourceCode = get(source).getCode();\n const destinationCode = get(destination).getCode();\n throw new Error(\n `No transform available between ${sourceCode} and ${destinationCode}`,\n );\n }\n return transformFunc(coordinate, undefined, coordinate.length);\n}\n\n/**\n * Transforms an extent from source projection to destination projection. This\n * returns a new extent (and does not modify the original).\n *\n * @param {import(\"./extent.js\").Extent} extent The extent to transform.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @param {number} [stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {import(\"./extent.js\").Extent} The transformed extent.\n * @api\n */\nexport function transformExtent(extent, source, destination, stops) {\n const transformFunc = getTransform(source, destination);\n return applyTransform(extent, transformFunc, undefined, stops);\n}\n\n/**\n * Transforms the given point to the destination projection.\n *\n * @param {import(\"./coordinate.js\").Coordinate} point Point.\n * @param {Projection} sourceProjection Source projection.\n * @param {Projection} destinationProjection Destination projection.\n * @return {import(\"./coordinate.js\").Coordinate} Point.\n */\nexport function transformWithProjections(\n point,\n sourceProjection,\n destinationProjection,\n) {\n const transformFunc = getTransformFromProjections(\n sourceProjection,\n destinationProjection,\n );\n return transformFunc(point);\n}\n\n/**\n * @type {Projection|null}\n */\nlet userProjection = null;\n\n/**\n * Set the projection for coordinates supplied from and returned by API methods.\n * This includes all API methods except for those interacting with tile grids,\n * plus {@link import(\"./Map.js\").FrameState} and {@link import(\"./View.js\").State}.\n * @param {ProjectionLike} projection The user projection.\n * @api\n */\nexport function setUserProjection(projection) {\n userProjection = get(projection);\n}\n\n/**\n * Clear the user projection if set.\n * @api\n */\nexport function clearUserProjection() {\n userProjection = null;\n}\n\n/**\n * Get the projection for coordinates supplied from and returned by API methods.\n * @return {Projection|null} The user projection (or null if not set).\n * @api\n */\nexport function getUserProjection() {\n return userProjection;\n}\n\n/**\n * Use geographic coordinates (WGS-84 datum) in API methods.\n * This includes all API methods except for those interacting with tile grids,\n * plus {@link import(\"./Map.js\").FrameState} and {@link import(\"./View.js\").State}.\n * @api\n */\nexport function useGeographic() {\n setUserProjection('EPSG:4326');\n}\n\n/**\n * Return a coordinate transformed into the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array} coordinate Input coordinate.\n * @param {ProjectionLike} sourceProjection The input coordinate projection.\n * @return {Array} The input coordinate in the user projection.\n */\nexport function toUserCoordinate(coordinate, sourceProjection) {\n if (!userProjection) {\n return coordinate;\n }\n return transform(coordinate, sourceProjection, userProjection);\n}\n\n/**\n * Return a coordinate transformed from the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array} coordinate Input coordinate.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {Array} The input coordinate transformed.\n */\nexport function fromUserCoordinate(coordinate, destProjection) {\n if (!userProjection) {\n if (\n showCoordinateWarning &&\n !equals(coordinate, [0, 0]) &&\n coordinate[0] >= -180 &&\n coordinate[0] <= 180 &&\n coordinate[1] >= -90 &&\n coordinate[1] <= 90\n ) {\n showCoordinateWarning = false;\n warn(\n 'Call useGeographic() from ol/proj once to work with [longitude, latitude] coordinates.',\n );\n }\n return coordinate;\n }\n return transform(coordinate, userProjection, destProjection);\n}\n\n/**\n * Return an extent transformed into the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} sourceProjection The input extent projection.\n * @return {import(\"./extent.js\").Extent} The input extent in the user projection.\n */\nexport function toUserExtent(extent, sourceProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, sourceProjection, userProjection);\n}\n\n/**\n * Return an extent transformed from the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {import(\"./extent.js\").Extent} The input extent transformed.\n */\nexport function fromUserExtent(extent, destProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, userProjection, destProjection);\n}\n\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in input projection units per pixel.\n * @param {ProjectionLike} sourceProjection The input projection.\n * @return {number} Resolution in user projection units per pixel.\n */\nexport function toUserResolution(resolution, sourceProjection) {\n if (!userProjection) {\n return resolution;\n }\n const sourceMetersPerUnit = get(sourceProjection).getMetersPerUnit();\n const userMetersPerUnit = userProjection.getMetersPerUnit();\n return sourceMetersPerUnit && userMetersPerUnit\n ? (resolution * sourceMetersPerUnit) / userMetersPerUnit\n : resolution;\n}\n\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in user projection units per pixel.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {number} Resolution in destination projection units per pixel.\n */\nexport function fromUserResolution(resolution, destProjection) {\n if (!userProjection) {\n return resolution;\n }\n const destMetersPerUnit = get(destProjection).getMetersPerUnit();\n const userMetersPerUnit = userProjection.getMetersPerUnit();\n return destMetersPerUnit && userMetersPerUnit\n ? (resolution * userMetersPerUnit) / destMetersPerUnit\n : resolution;\n}\n\n/**\n * Creates a safe coordinate transform function from a coordinate transform function.\n * \"Safe\" means that it can handle wrapping of x-coordinates for global projections,\n * and that coordinates exceeding the source projection validity extent's range will be\n * clamped to the validity range.\n * @param {Projection} sourceProj Source projection.\n * @param {Projection} destProj Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} transform Transform function (source to destination).\n * @return {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} Safe transform function (source to destination).\n */\nexport function createSafeCoordinateTransform(sourceProj, destProj, transform) {\n return function (coord) {\n let transformed, worldsAway;\n if (sourceProj.canWrapX()) {\n const sourceExtent = sourceProj.getExtent();\n const sourceExtentWidth = getWidth(sourceExtent);\n coord = coord.slice(0);\n worldsAway = getWorldsAway(coord, sourceProj, sourceExtentWidth);\n if (worldsAway) {\n // Move x to the real world\n coord[0] = coord[0] - worldsAway * sourceExtentWidth;\n }\n coord[0] = clamp(coord[0], sourceExtent[0], sourceExtent[2]);\n coord[1] = clamp(coord[1], sourceExtent[1], sourceExtent[3]);\n transformed = transform(coord);\n } else {\n transformed = transform(coord);\n }\n if (worldsAway && destProj.canWrapX()) {\n // Move transformed coordinate back to the offset world\n transformed[0] += worldsAway * getWidth(destProj.getExtent());\n }\n return transformed;\n };\n}\n\n/**\n * Add transforms to and from EPSG:4326 and EPSG:3857. This function is called\n * by when this module is executed and should only need to be called again after\n * `clearAllProjections()` is called (e.g. in tests).\n */\nexport function addCommon() {\n // Add transformations that don't alter coordinates to convert within set of\n // projections with equal meaning.\n addEquivalentProjections(EPSG3857_PROJECTIONS);\n addEquivalentProjections(EPSG4326_PROJECTIONS);\n // Add transformations to convert EPSG:4326 like coordinates to EPSG:3857 like\n // coordinates and back.\n addEquivalentTransforms(\n EPSG4326_PROJECTIONS,\n EPSG3857_PROJECTIONS,\n fromEPSG4326,\n toEPSG4326,\n );\n}\n\naddCommon();\n","/**\n * @module ol/geom/flat/orient\n */\nimport {coordinates as reverseCoordinates} from './reverse.js';\n\n/**\n * Is the linear ring oriented clockwise in a coordinate system with a bottom-left\n * coordinate origin? For a coordinate system with a top-left coordinate origin,\n * the ring's orientation is clockwise when this function returns false.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {boolean|undefined} Is clockwise.\n */\nexport function linearRingIsClockwise(flatCoordinates, offset, end, stride) {\n // https://stackoverflow.com/q/1165647/clockwise-method#1165943\n // https://github.com/OSGeo/gdal/blob/master/gdal/ogr/ogrlinearring.cpp\n let edge = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n edge += (x2 - x1) * (y2 + y1);\n x1 = x2;\n y1 = y2;\n }\n return edge === 0 ? undefined : edge > 0;\n}\n\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingsAreOriented(\n flatCoordinates,\n offset,\n ends,\n stride,\n right,\n) {\n right = right !== undefined ? right : false;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const isClockwise = linearRingIsClockwise(\n flatCoordinates,\n offset,\n end,\n stride,\n );\n if (i === 0) {\n if ((right && isClockwise) || (!right && !isClockwise)) {\n return false;\n }\n } else {\n if ((right && !isClockwise) || (!right && isClockwise)) {\n return false;\n }\n }\n offset = end;\n }\n return true;\n}\n\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingssAreOriented(\n flatCoordinates,\n offset,\n endss,\n stride,\n right,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (!linearRingsAreOriented(flatCoordinates, offset, ends, stride, right)) {\n return false;\n }\n if (ends.length) {\n offset = ends[ends.length - 1];\n }\n }\n return true;\n}\n\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {boolean} [right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRings(\n flatCoordinates,\n offset,\n ends,\n stride,\n right,\n) {\n right = right !== undefined ? right : false;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const isClockwise = linearRingIsClockwise(\n flatCoordinates,\n offset,\n end,\n stride,\n );\n const reverse =\n i === 0\n ? (right && isClockwise) || (!right && !isClockwise)\n : (right && !isClockwise) || (!right && isClockwise);\n if (reverse) {\n reverseCoordinates(flatCoordinates, offset, end, stride);\n }\n offset = end;\n }\n return offset;\n}\n\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRingsArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n right,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n offset = orientLinearRings(\n flatCoordinates,\n offset,\n endss[i],\n stride,\n right,\n );\n }\n return offset;\n}\n\n/**\n * Return a two-dimensional endss\n * @param {Array} flatCoordinates Flat coordinates\n * @param {Array} ends Linear ring end indexes\n * @return {Array>} Two dimensional endss array that can\n * be used to construct a MultiPolygon\n */\nexport function inflateEnds(flatCoordinates, ends) {\n const endss = [];\n let offset = 0;\n let prevEndIndex = 0;\n let startOrientation;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n // classifies an array of rings into polygons with outer rings and holes\n const orientation = linearRingIsClockwise(flatCoordinates, offset, end, 2);\n if (startOrientation === undefined) {\n startOrientation = orientation;\n }\n if (orientation === startOrientation) {\n endss.push(ends.slice(prevEndIndex, i + 1));\n } else {\n if (endss.length === 0) {\n continue;\n }\n endss[endss.length - 1].push(ends[prevEndIndex]);\n }\n prevEndIndex = i + 1;\n offset = end;\n }\n return endss;\n}\n","/**\n * @module ol/geom/flat/interpolate\n */\nimport {binarySearch} from '../../array.js';\nimport {lerp} from '../../math.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} fraction Fraction.\n * @param {Array} [dest] Destination.\n * @param {number} [dimension] Destination dimension (default is `2`)\n * @return {Array} Destination.\n */\nexport function interpolatePoint(\n flatCoordinates,\n offset,\n end,\n stride,\n fraction,\n dest,\n dimension,\n) {\n let o, t;\n const n = (end - offset) / stride;\n if (n === 1) {\n o = offset;\n } else if (n === 2) {\n o = offset;\n t = fraction;\n } else if (n !== 0) {\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n let length = 0;\n const cumulativeLengths = [0];\n for (let i = offset + stride; i < end; i += stride) {\n const x2 = flatCoordinates[i];\n const y2 = flatCoordinates[i + 1];\n length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n cumulativeLengths.push(length);\n x1 = x2;\n y1 = y2;\n }\n const target = fraction * length;\n const index = binarySearch(cumulativeLengths, target);\n if (index < 0) {\n t =\n (target - cumulativeLengths[-index - 2]) /\n (cumulativeLengths[-index - 1] - cumulativeLengths[-index - 2]);\n o = offset + (-index - 2) * stride;\n } else {\n o = offset + index * stride;\n }\n }\n dimension = dimension > 1 ? dimension : 2;\n dest = dest ? dest : new Array(dimension);\n for (let i = 0; i < dimension; ++i) {\n dest[i] =\n o === undefined\n ? NaN\n : t === undefined\n ? flatCoordinates[o + i]\n : lerp(flatCoordinates[o + i], flatCoordinates[o + stride + i], t);\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} m M.\n * @param {boolean} extrapolate Extrapolate.\n * @return {import(\"../../coordinate.js\").Coordinate|null} Coordinate.\n */\nexport function lineStringCoordinateAtM(\n flatCoordinates,\n offset,\n end,\n stride,\n m,\n extrapolate,\n) {\n if (end == offset) {\n return null;\n }\n let coordinate;\n if (m < flatCoordinates[offset + stride - 1]) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(offset, offset + stride);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n return null;\n }\n if (flatCoordinates[end - 1] < m) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(end - stride, end);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n return null;\n }\n // FIXME use O(1) search\n if (m == flatCoordinates[offset + stride - 1]) {\n return flatCoordinates.slice(offset, offset + stride);\n }\n let lo = offset / stride;\n let hi = end / stride;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (m < flatCoordinates[(mid + 1) * stride - 1]) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n const m0 = flatCoordinates[lo * stride - 1];\n if (m == m0) {\n return flatCoordinates.slice((lo - 1) * stride, (lo - 1) * stride + stride);\n }\n const m1 = flatCoordinates[(lo + 1) * stride - 1];\n const t = (m - m0) / (m1 - m0);\n coordinate = [];\n for (let i = 0; i < stride - 1; ++i) {\n coordinate.push(\n lerp(\n flatCoordinates[(lo - 1) * stride + i],\n flatCoordinates[lo * stride + i],\n t,\n ),\n );\n }\n coordinate.push(m);\n return coordinate;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} m M.\n * @param {boolean} extrapolate Extrapolate.\n * @param {boolean} interpolate Interpolate.\n * @return {import(\"../../coordinate.js\").Coordinate|null} Coordinate.\n */\nexport function lineStringsCoordinateAtM(\n flatCoordinates,\n offset,\n ends,\n stride,\n m,\n extrapolate,\n interpolate,\n) {\n if (interpolate) {\n return lineStringCoordinateAtM(\n flatCoordinates,\n offset,\n ends[ends.length - 1],\n stride,\n m,\n extrapolate,\n );\n }\n let coordinate;\n if (m < flatCoordinates[stride - 1]) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(0, stride);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n return null;\n }\n if (flatCoordinates[flatCoordinates.length - 1] < m) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(flatCoordinates.length - stride);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n return null;\n }\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n if (offset == end) {\n continue;\n }\n if (m < flatCoordinates[offset + stride - 1]) {\n return null;\n }\n if (m <= flatCoordinates[end - 1]) {\n return lineStringCoordinateAtM(\n flatCoordinates,\n offset,\n end,\n stride,\n m,\n false,\n );\n }\n offset = end;\n }\n return null;\n}\n","/**\n * @module ol/render/Feature\n */\nimport Feature from '../Feature.js';\nimport {\n LineString,\n MultiLineString,\n MultiPoint,\n MultiPolygon,\n Point,\n Polygon,\n} from '../geom.js';\nimport {\n compose as composeTransform,\n create as createTransform,\n} from '../transform.js';\nimport {\n createOrUpdateFromCoordinate,\n createOrUpdateFromFlatCoordinates,\n getCenter,\n getHeight,\n} from '../extent.js';\nimport {\n douglasPeucker,\n douglasPeuckerArray,\n quantizeArray,\n} from '../geom/flat/simplify.js';\nimport {extend} from '../array.js';\nimport {\n getInteriorPointOfArray,\n getInteriorPointsOfMultiArray,\n} from '../geom/flat/interiorpoint.js';\nimport {get as getProjection} from '../proj.js';\nimport {inflateEnds} from '../geom/flat/orient.js';\nimport {interpolatePoint} from '../geom/flat/interpolate.js';\nimport {linearRingss as linearRingssCenter} from '../geom/flat/center.js';\nimport {memoizeOne} from '../functions.js';\nimport {transform2D} from '../geom/flat/transform.js';\n\n/**\n * @typedef {'Point' | 'LineString' | 'LinearRing' | 'Polygon' | 'MultiPoint' | 'MultiLineString'} Type\n * The geometry type. One of `'Point'`, `'LineString'`, `'LinearRing'`,\n * `'Polygon'`, `'MultiPoint'` or 'MultiLineString'`.\n */\n\n/**\n * @type {import(\"../transform.js\").Transform}\n */\nconst tmpTransform = createTransform();\n\n/**\n * Lightweight, read-only, {@link module:ol/Feature~Feature} and {@link module:ol/geom/Geometry~Geometry} like\n * structure, optimized for vector tile rendering and styling. Geometry access\n * through the API is limited to getting the type and extent of the geometry.\n */\nclass RenderFeature {\n /**\n * @param {Type} type Geometry type.\n * @param {Array} flatCoordinates Flat coordinates. These always need\n * to be right-handed for polygons.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Object} properties Properties.\n * @param {number|string|undefined} id Feature id.\n */\n constructor(type, flatCoordinates, ends, stride, properties, id) {\n /**\n * @type {import(\"../style/Style.js\").StyleFunction|undefined}\n */\n this.styleFunction;\n\n /**\n * @private\n * @type {import(\"../extent.js\").Extent|undefined}\n */\n this.extent_;\n\n /**\n * @private\n * @type {number|string|undefined}\n */\n this.id_ = id;\n\n /**\n * @private\n * @type {Type}\n */\n this.type_ = type;\n\n /**\n * @private\n * @type {Array}\n */\n this.flatCoordinates_ = flatCoordinates;\n\n /**\n * @private\n * @type {Array}\n */\n this.flatInteriorPoints_ = null;\n\n /**\n * @private\n * @type {Array}\n */\n this.flatMidpoints_ = null;\n\n /**\n * @private\n * @type {Array|null}\n */\n this.ends_ = ends || null;\n\n /**\n * @private\n * @type {Object}\n */\n this.properties_ = properties;\n\n /**\n * @private\n * @type {number}\n */\n this.squaredTolerance_;\n\n /**\n * @private\n * @type {number}\n */\n this.stride_ = stride;\n\n /**\n * @private\n * @type {RenderFeature}\n */\n this.simplifiedGeometry_;\n }\n\n /**\n * Get a feature property by its key.\n * @param {string} key Key\n * @return {*} Value for the requested key.\n * @api\n */\n get(key) {\n return this.properties_[key];\n }\n\n /**\n * Get the extent of this feature's geometry.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getExtent() {\n if (!this.extent_) {\n this.extent_ =\n this.type_ === 'Point'\n ? createOrUpdateFromCoordinate(this.flatCoordinates_)\n : createOrUpdateFromFlatCoordinates(\n this.flatCoordinates_,\n 0,\n this.flatCoordinates_.length,\n 2,\n );\n }\n return this.extent_;\n }\n\n /**\n * @return {Array} Flat interior points.\n */\n getFlatInteriorPoint() {\n if (!this.flatInteriorPoints_) {\n const flatCenter = getCenter(this.getExtent());\n this.flatInteriorPoints_ = getInteriorPointOfArray(\n this.flatCoordinates_,\n 0,\n this.ends_,\n 2,\n flatCenter,\n 0,\n );\n }\n return this.flatInteriorPoints_;\n }\n\n /**\n * @return {Array} Flat interior points.\n */\n getFlatInteriorPoints() {\n if (!this.flatInteriorPoints_) {\n const ends = inflateEnds(this.flatCoordinates_, this.ends_);\n const flatCenters = linearRingssCenter(this.flatCoordinates_, 0, ends, 2);\n this.flatInteriorPoints_ = getInteriorPointsOfMultiArray(\n this.flatCoordinates_,\n 0,\n ends,\n 2,\n flatCenters,\n );\n }\n return this.flatInteriorPoints_;\n }\n\n /**\n * @return {Array} Flat midpoint.\n */\n getFlatMidpoint() {\n if (!this.flatMidpoints_) {\n this.flatMidpoints_ = interpolatePoint(\n this.flatCoordinates_,\n 0,\n this.flatCoordinates_.length,\n 2,\n 0.5,\n );\n }\n return this.flatMidpoints_;\n }\n\n /**\n * @return {Array} Flat midpoints.\n */\n getFlatMidpoints() {\n if (!this.flatMidpoints_) {\n this.flatMidpoints_ = [];\n const flatCoordinates = this.flatCoordinates_;\n let offset = 0;\n const ends = /** @type {Array} */ (this.ends_);\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const midpoint = interpolatePoint(flatCoordinates, offset, end, 2, 0.5);\n extend(this.flatMidpoints_, midpoint);\n offset = end;\n }\n }\n return this.flatMidpoints_;\n }\n\n /**\n * Get the feature identifier. This is a stable identifier for the feature and\n * is set when reading data from a remote source.\n * @return {number|string|undefined} Id.\n * @api\n */\n getId() {\n return this.id_;\n }\n\n /**\n * @return {Array} Flat coordinates.\n */\n getOrientedFlatCoordinates() {\n return this.flatCoordinates_;\n }\n\n /**\n * For API compatibility with {@link module:ol/Feature~Feature}, this method is useful when\n * determining the geometry type in style function (see {@link #getType}).\n * @return {RenderFeature} Feature.\n * @api\n */\n getGeometry() {\n return this;\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {RenderFeature} Simplified geometry.\n */\n getSimplifiedGeometry(squaredTolerance) {\n return this;\n }\n\n /**\n * Get a transformed and simplified version of the geometry.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [transform] Optional transform function.\n * @return {RenderFeature} Simplified geometry.\n */\n simplifyTransformed(squaredTolerance, transform) {\n return this;\n }\n\n /**\n * Get the feature properties.\n * @return {Object} Feature properties.\n * @api\n */\n getProperties() {\n return this.properties_;\n }\n\n /**\n * Get an object of all property names and values. This has the same behavior as getProperties,\n * but is here to conform with the {@link module:ol/Feature~Feature} interface.\n * @return {Object?} Object.\n */\n getPropertiesInternal() {\n return this.properties_;\n }\n\n /**\n * @return {number} Stride.\n */\n getStride() {\n return this.stride_;\n }\n\n /**\n * @return {import('../style/Style.js').StyleFunction|undefined} Style\n */\n getStyleFunction() {\n return this.styleFunction;\n }\n\n /**\n * Get the type of this feature's geometry.\n * @return {Type} Geometry type.\n * @api\n */\n getType() {\n return this.type_;\n }\n\n /**\n * Transform geometry coordinates from tile pixel space to projected.\n *\n * @param {import(\"../proj.js\").ProjectionLike} projection The data projection\n */\n transform(projection) {\n projection = getProjection(projection);\n const pixelExtent = projection.getExtent();\n const projectedExtent = projection.getWorldExtent();\n if (pixelExtent && projectedExtent) {\n const scale = getHeight(projectedExtent) / getHeight(pixelExtent);\n composeTransform(\n tmpTransform,\n projectedExtent[0],\n projectedExtent[3],\n scale,\n -scale,\n 0,\n 0,\n 0,\n );\n transform2D(\n this.flatCoordinates_,\n 0,\n this.flatCoordinates_.length,\n 2,\n tmpTransform,\n this.flatCoordinates_,\n );\n }\n }\n\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n */\n applyTransform(transformFn) {\n transformFn(this.flatCoordinates_, this.flatCoordinates_, this.stride_);\n }\n\n /**\n * @return {RenderFeature} A cloned render feature.\n */\n clone() {\n return new RenderFeature(\n this.type_,\n this.flatCoordinates_.slice(),\n this.ends_?.slice(),\n this.stride_,\n Object.assign({}, this.properties_),\n this.id_,\n );\n }\n\n /**\n * @return {Array|null} Ends.\n */\n getEnds() {\n return this.ends_;\n }\n\n /**\n * Add transform and resolution based geometry simplification to this instance.\n * @return {RenderFeature} This render feature.\n */\n enableSimplifyTransformed() {\n this.simplifyTransformed = memoizeOne((squaredTolerance, transform) => {\n if (squaredTolerance === this.squaredTolerance_) {\n return this.simplifiedGeometry_;\n }\n this.simplifiedGeometry_ = this.clone();\n if (transform) {\n this.simplifiedGeometry_.applyTransform(transform);\n }\n const simplifiedFlatCoordinates =\n this.simplifiedGeometry_.getFlatCoordinates();\n let simplifiedEnds;\n switch (this.type_) {\n case 'LineString':\n simplifiedFlatCoordinates.length = douglasPeucker(\n simplifiedFlatCoordinates,\n 0,\n this.simplifiedGeometry_.flatCoordinates_.length,\n this.simplifiedGeometry_.stride_,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n );\n simplifiedEnds = [simplifiedFlatCoordinates.length];\n break;\n case 'MultiLineString':\n simplifiedEnds = [];\n simplifiedFlatCoordinates.length = douglasPeuckerArray(\n simplifiedFlatCoordinates,\n 0,\n this.simplifiedGeometry_.ends_,\n this.simplifiedGeometry_.stride_,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n simplifiedEnds,\n );\n break;\n case 'Polygon':\n simplifiedEnds = [];\n simplifiedFlatCoordinates.length = quantizeArray(\n simplifiedFlatCoordinates,\n 0,\n this.simplifiedGeometry_.ends_,\n this.simplifiedGeometry_.stride_,\n Math.sqrt(squaredTolerance),\n simplifiedFlatCoordinates,\n 0,\n simplifiedEnds,\n );\n break;\n default:\n }\n if (simplifiedEnds) {\n this.simplifiedGeometry_ = new RenderFeature(\n this.type_,\n simplifiedFlatCoordinates,\n simplifiedEnds,\n 2,\n this.properties_,\n this.id_,\n );\n }\n this.squaredTolerance_ = squaredTolerance;\n return this.simplifiedGeometry_;\n });\n return this;\n }\n}\n\n/**\n * @return {Array} Flat coordinates.\n */\nRenderFeature.prototype.getFlatCoordinates =\n RenderFeature.prototype.getOrientedFlatCoordinates;\n\n/**\n * Create a geometry from an `ol/render/Feature`\n * @param {RenderFeature} renderFeature\n * Render Feature\n * @return {Point|MultiPoint|LineString|MultiLineString|Polygon|MultiPolygon}\n * New geometry instance.\n * @api\n */\nexport function toGeometry(renderFeature) {\n const geometryType = renderFeature.getType();\n switch (geometryType) {\n case 'Point':\n return new Point(renderFeature.getFlatCoordinates());\n case 'MultiPoint':\n return new MultiPoint(renderFeature.getFlatCoordinates(), 'XY');\n case 'LineString':\n return new LineString(renderFeature.getFlatCoordinates(), 'XY');\n case 'MultiLineString':\n return new MultiLineString(\n renderFeature.getFlatCoordinates(),\n 'XY',\n /** @type {Array} */ (renderFeature.getEnds()),\n );\n case 'Polygon':\n const flatCoordinates = renderFeature.getFlatCoordinates();\n const ends = renderFeature.getEnds();\n const endss = inflateEnds(flatCoordinates, ends);\n return endss.length > 1\n ? new MultiPolygon(flatCoordinates, 'XY', endss)\n : new Polygon(flatCoordinates, 'XY', ends);\n default:\n throw new Error('Invalid geometry type:' + geometryType);\n }\n}\n\n/**\n * Create an `ol/Feature` from an `ol/render/Feature`\n * @param {RenderFeature} renderFeature RenderFeature\n * @param {string} [geometryName='geometry'] Geometry name to use\n * when creating the Feature.\n * @return {Feature} Newly constructed `ol/Feature` with properties,\n * geometry, and id copied over.\n * @api\n */\nexport function toFeature(renderFeature, geometryName) {\n const id = renderFeature.getId();\n const geometry = toGeometry(renderFeature);\n const properties = renderFeature.getProperties();\n const feature = new Feature();\n if (geometryName !== undefined) {\n feature.setGeometryName(geometryName);\n }\n feature.setGeometry(geometry);\n if (id !== undefined) {\n feature.setId(id);\n }\n feature.setProperties(properties, true);\n return feature;\n}\n\nexport default RenderFeature;\n","/**\n * @module ol/geom/flat/center\n */\nimport {createEmpty, createOrUpdateFromFlatCoordinates} from '../../extent.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @return {Array} Flat centers.\n */\nexport function linearRingss(flatCoordinates, offset, endss, stride) {\n const flatCenters = [];\n let extent = createEmpty();\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n extent = createOrUpdateFromFlatCoordinates(\n flatCoordinates,\n offset,\n ends[0],\n stride,\n );\n flatCenters.push((extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2);\n offset = ends[ends.length - 1];\n }\n return flatCenters;\n}\n","/**\n * @module ol/geom/flat/transform\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {Array} [dest] Destination.\n * @param {number} [destinationStride] Stride of destination coordinates; if unspecified, assumed to be 2.\n * @return {Array} Transformed coordinates.\n */\nexport function transform2D(\n flatCoordinates,\n offset,\n end,\n stride,\n transform,\n dest,\n destinationStride,\n) {\n dest = dest ? dest : [];\n destinationStride = destinationStride ? destinationStride : 2;\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const x = flatCoordinates[j];\n const y = flatCoordinates[j + 1];\n dest[i++] = transform[0] * x + transform[2] * y + transform[4];\n dest[i++] = transform[1] * x + transform[3] * y + transform[5];\n\n for (let k = 2; k < destinationStride; k++) {\n dest[i++] = flatCoordinates[j + k];\n }\n }\n\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} angle Angle.\n * @param {Array} anchor Rotation anchor point.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function rotate(\n flatCoordinates,\n offset,\n end,\n stride,\n angle,\n anchor,\n dest,\n) {\n dest = dest ? dest : [];\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const anchorX = anchor[0];\n const anchorY = anchor[1];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const deltaX = flatCoordinates[j] - anchorX;\n const deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + deltaX * cos - deltaY * sin;\n dest[i++] = anchorY + deltaX * sin + deltaY * cos;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * Scale the coordinates.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} sx Scale factor in the x-direction.\n * @param {number} sy Scale factor in the y-direction.\n * @param {Array} anchor Scale anchor point.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function scale(\n flatCoordinates,\n offset,\n end,\n stride,\n sx,\n sy,\n anchor,\n dest,\n) {\n dest = dest ? dest : [];\n const anchorX = anchor[0];\n const anchorY = anchor[1];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const deltaX = flatCoordinates[j] - anchorX;\n const deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + sx * deltaX;\n dest[i++] = anchorY + sy * deltaY;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function translate(\n flatCoordinates,\n offset,\n end,\n stride,\n deltaX,\n deltaY,\n dest,\n) {\n dest = dest ? dest : [];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n dest[i++] = flatCoordinates[j] + deltaX;\n dest[i++] = flatCoordinates[j + 1] + deltaY;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n","/**\n * @module ol/functions\n */\n\nimport {equals as arrayEquals} from './array.js';\n\n/**\n * Always returns true.\n * @return {boolean} true.\n */\nexport function TRUE() {\n return true;\n}\n\n/**\n * Always returns false.\n * @return {boolean} false.\n */\nexport function FALSE() {\n return false;\n}\n\n/**\n * A reusable function, used e.g. as a default for callbacks.\n *\n * @return {void} Nothing.\n */\nexport function VOID() {}\n\n/**\n * Wrap a function in another function that remembers the last return. If the\n * returned function is called twice in a row with the same arguments and the same\n * this object, it will return the value from the first call in the second call.\n *\n * @param {function(...any): ReturnType} fn The function to memoize.\n * @return {function(...any): ReturnType} The memoized function.\n * @template ReturnType\n */\nexport function memoizeOne(fn) {\n /** @type {ReturnType} */\n let lastResult;\n\n /** @type {Array|undefined} */\n let lastArgs;\n\n let lastThis;\n\n /**\n * @this {*} Only need to know if `this` changed, don't care what type\n * @return {ReturnType} Memoized value\n */\n return function () {\n const nextArgs = Array.prototype.slice.call(arguments);\n if (!lastArgs || this !== lastThis || !arrayEquals(nextArgs, lastArgs)) {\n lastThis = this;\n lastArgs = nextArgs;\n lastResult = fn.apply(this, arguments);\n }\n return lastResult;\n };\n}\n\n/**\n * @template T\n * @param {function(): (T | Promise)} getter A function that returns a value or a promise for a value.\n * @return {Promise} A promise for the value.\n */\nexport function toPromise(getter) {\n function promiseGetter() {\n let value;\n try {\n value = getter();\n } catch (err) {\n return Promise.reject(err);\n }\n if (value instanceof Promise) {\n return value;\n }\n return Promise.resolve(value);\n }\n return promiseGetter();\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.functions;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.render.canvas;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.TileState;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.util;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.tilegrid.TileGrid;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.Image;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.Layer;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.Group;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.Map;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.Raster;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.Source;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.proj.Units;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.View;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.events.Event;","import Circle from 'ol/style/Circle.js';\nimport Fill from 'ol/style/Fill.js';\nimport Icon from 'ol/style/Icon.js';\nimport RenderFeature from 'ol/render/Feature.js';\nimport Stroke from 'ol/style/Stroke.js';\nimport Style from 'ol/style/Style.js';\nimport Text from 'ol/style/Text.js';\nimport { toPromise } from 'ol/functions.js';\nimport { registerFont, checkedFonts } from 'ol/render/canvas.js';\nimport TileState from 'ol/TileState.js';\nimport { VectorTile } from 'ol';\nimport { getUid } from 'ol/util.js';\nimport GeoJSON from 'ol/format/GeoJSON.js';\nimport ImageLayer from 'ol/layer/Image.js';\nimport Layer from 'ol/layer/Layer.js';\nimport LayerGroup from 'ol/layer/Group.js';\nimport MVT from 'ol/format/MVT.js';\nimport Map from 'ol/Map.js';\nimport Raster from 'ol/source/Raster.js';\nimport Source from 'ol/source/Source.js';\nimport TileGrid from 'ol/tilegrid/TileGrid.js';\nimport TileJSON from 'ol/source/TileJSON.js';\nimport TileLayer from 'ol/layer/Tile.js';\nimport VectorLayer from 'ol/layer/Vector.js';\nimport VectorSource from 'ol/source/Vector.js';\nimport VectorTileLayer from 'ol/layer/VectorTile.js';\nimport VectorTileSource, { defaultLoadFunction } from 'ol/source/VectorTile.js';\nimport View from 'ol/View.js';\nimport { METERS_PER_UNIT } from 'ol/proj/Units.js';\nimport { bbox } from 'ol/loadingstrategy.js';\nimport { createXYZ } from 'ol/tilegrid.js';\nimport { get as get$1, getUserProjection, getPointResolution, fromLonLat, equivalent } from 'ol/proj.js';\nimport { getCenter, getTopLeft } from 'ol/extent.js';\nimport BaseEvent from 'ol/events/Event.js';\nimport EventType from 'ol/events/EventType.js';\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nvar csscolorparser = {};\n\nvar parseCSSColor_1;\n// (c) Dean McNamee , 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n 'transparent': [\n 0,\n 0,\n 0,\n 0\n ],\n 'aliceblue': [\n 240,\n 248,\n 255,\n 1\n ],\n 'antiquewhite': [\n 250,\n 235,\n 215,\n 1\n ],\n 'aqua': [\n 0,\n 255,\n 255,\n 1\n ],\n 'aquamarine': [\n 127,\n 255,\n 212,\n 1\n ],\n 'azure': [\n 240,\n 255,\n 255,\n 1\n ],\n 'beige': [\n 245,\n 245,\n 220,\n 1\n ],\n 'bisque': [\n 255,\n 228,\n 196,\n 1\n ],\n 'black': [\n 0,\n 0,\n 0,\n 1\n ],\n 'blanchedalmond': [\n 255,\n 235,\n 205,\n 1\n ],\n 'blue': [\n 0,\n 0,\n 255,\n 1\n ],\n 'blueviolet': [\n 138,\n 43,\n 226,\n 1\n ],\n 'brown': [\n 165,\n 42,\n 42,\n 1\n ],\n 'burlywood': [\n 222,\n 184,\n 135,\n 1\n ],\n 'cadetblue': [\n 95,\n 158,\n 160,\n 1\n ],\n 'chartreuse': [\n 127,\n 255,\n 0,\n 1\n ],\n 'chocolate': [\n 210,\n 105,\n 30,\n 1\n ],\n 'coral': [\n 255,\n 127,\n 80,\n 1\n ],\n 'cornflowerblue': [\n 100,\n 149,\n 237,\n 1\n ],\n 'cornsilk': [\n 255,\n 248,\n 220,\n 1\n ],\n 'crimson': [\n 220,\n 20,\n 60,\n 1\n ],\n 'cyan': [\n 0,\n 255,\n 255,\n 1\n ],\n 'darkblue': [\n 0,\n 0,\n 139,\n 1\n ],\n 'darkcyan': [\n 0,\n 139,\n 139,\n 1\n ],\n 'darkgoldenrod': [\n 184,\n 134,\n 11,\n 1\n ],\n 'darkgray': [\n 169,\n 169,\n 169,\n 1\n ],\n 'darkgreen': [\n 0,\n 100,\n 0,\n 1\n ],\n 'darkgrey': [\n 169,\n 169,\n 169,\n 1\n ],\n 'darkkhaki': [\n 189,\n 183,\n 107,\n 1\n ],\n 'darkmagenta': [\n 139,\n 0,\n 139,\n 1\n ],\n 'darkolivegreen': [\n 85,\n 107,\n 47,\n 1\n ],\n 'darkorange': [\n 255,\n 140,\n 0,\n 1\n ],\n 'darkorchid': [\n 153,\n 50,\n 204,\n 1\n ],\n 'darkred': [\n 139,\n 0,\n 0,\n 1\n ],\n 'darksalmon': [\n 233,\n 150,\n 122,\n 1\n ],\n 'darkseagreen': [\n 143,\n 188,\n 143,\n 1\n ],\n 'darkslateblue': [\n 72,\n 61,\n 139,\n 1\n ],\n 'darkslategray': [\n 47,\n 79,\n 79,\n 1\n ],\n 'darkslategrey': [\n 47,\n 79,\n 79,\n 1\n ],\n 'darkturquoise': [\n 0,\n 206,\n 209,\n 1\n ],\n 'darkviolet': [\n 148,\n 0,\n 211,\n 1\n ],\n 'deeppink': [\n 255,\n 20,\n 147,\n 1\n ],\n 'deepskyblue': [\n 0,\n 191,\n 255,\n 1\n ],\n 'dimgray': [\n 105,\n 105,\n 105,\n 1\n ],\n 'dimgrey': [\n 105,\n 105,\n 105,\n 1\n ],\n 'dodgerblue': [\n 30,\n 144,\n 255,\n 1\n ],\n 'firebrick': [\n 178,\n 34,\n 34,\n 1\n ],\n 'floralwhite': [\n 255,\n 250,\n 240,\n 1\n ],\n 'forestgreen': [\n 34,\n 139,\n 34,\n 1\n ],\n 'fuchsia': [\n 255,\n 0,\n 255,\n 1\n ],\n 'gainsboro': [\n 220,\n 220,\n 220,\n 1\n ],\n 'ghostwhite': [\n 248,\n 248,\n 255,\n 1\n ],\n 'gold': [\n 255,\n 215,\n 0,\n 1\n ],\n 'goldenrod': [\n 218,\n 165,\n 32,\n 1\n ],\n 'gray': [\n 128,\n 128,\n 128,\n 1\n ],\n 'green': [\n 0,\n 128,\n 0,\n 1\n ],\n 'greenyellow': [\n 173,\n 255,\n 47,\n 1\n ],\n 'grey': [\n 128,\n 128,\n 128,\n 1\n ],\n 'honeydew': [\n 240,\n 255,\n 240,\n 1\n ],\n 'hotpink': [\n 255,\n 105,\n 180,\n 1\n ],\n 'indianred': [\n 205,\n 92,\n 92,\n 1\n ],\n 'indigo': [\n 75,\n 0,\n 130,\n 1\n ],\n 'ivory': [\n 255,\n 255,\n 240,\n 1\n ],\n 'khaki': [\n 240,\n 230,\n 140,\n 1\n ],\n 'lavender': [\n 230,\n 230,\n 250,\n 1\n ],\n 'lavenderblush': [\n 255,\n 240,\n 245,\n 1\n ],\n 'lawngreen': [\n 124,\n 252,\n 0,\n 1\n ],\n 'lemonchiffon': [\n 255,\n 250,\n 205,\n 1\n ],\n 'lightblue': [\n 173,\n 216,\n 230,\n 1\n ],\n 'lightcoral': [\n 240,\n 128,\n 128,\n 1\n ],\n 'lightcyan': [\n 224,\n 255,\n 255,\n 1\n ],\n 'lightgoldenrodyellow': [\n 250,\n 250,\n 210,\n 1\n ],\n 'lightgray': [\n 211,\n 211,\n 211,\n 1\n ],\n 'lightgreen': [\n 144,\n 238,\n 144,\n 1\n ],\n 'lightgrey': [\n 211,\n 211,\n 211,\n 1\n ],\n 'lightpink': [\n 255,\n 182,\n 193,\n 1\n ],\n 'lightsalmon': [\n 255,\n 160,\n 122,\n 1\n ],\n 'lightseagreen': [\n 32,\n 178,\n 170,\n 1\n ],\n 'lightskyblue': [\n 135,\n 206,\n 250,\n 1\n ],\n 'lightslategray': [\n 119,\n 136,\n 153,\n 1\n ],\n 'lightslategrey': [\n 119,\n 136,\n 153,\n 1\n ],\n 'lightsteelblue': [\n 176,\n 196,\n 222,\n 1\n ],\n 'lightyellow': [\n 255,\n 255,\n 224,\n 1\n ],\n 'lime': [\n 0,\n 255,\n 0,\n 1\n ],\n 'limegreen': [\n 50,\n 205,\n 50,\n 1\n ],\n 'linen': [\n 250,\n 240,\n 230,\n 1\n ],\n 'magenta': [\n 255,\n 0,\n 255,\n 1\n ],\n 'maroon': [\n 128,\n 0,\n 0,\n 1\n ],\n 'mediumaquamarine': [\n 102,\n 205,\n 170,\n 1\n ],\n 'mediumblue': [\n 0,\n 0,\n 205,\n 1\n ],\n 'mediumorchid': [\n 186,\n 85,\n 211,\n 1\n ],\n 'mediumpurple': [\n 147,\n 112,\n 219,\n 1\n ],\n 'mediumseagreen': [\n 60,\n 179,\n 113,\n 1\n ],\n 'mediumslateblue': [\n 123,\n 104,\n 238,\n 1\n ],\n 'mediumspringgreen': [\n 0,\n 250,\n 154,\n 1\n ],\n 'mediumturquoise': [\n 72,\n 209,\n 204,\n 1\n ],\n 'mediumvioletred': [\n 199,\n 21,\n 133,\n 1\n ],\n 'midnightblue': [\n 25,\n 25,\n 112,\n 1\n ],\n 'mintcream': [\n 245,\n 255,\n 250,\n 1\n ],\n 'mistyrose': [\n 255,\n 228,\n 225,\n 1\n ],\n 'moccasin': [\n 255,\n 228,\n 181,\n 1\n ],\n 'navajowhite': [\n 255,\n 222,\n 173,\n 1\n ],\n 'navy': [\n 0,\n 0,\n 128,\n 1\n ],\n 'oldlace': [\n 253,\n 245,\n 230,\n 1\n ],\n 'olive': [\n 128,\n 128,\n 0,\n 1\n ],\n 'olivedrab': [\n 107,\n 142,\n 35,\n 1\n ],\n 'orange': [\n 255,\n 165,\n 0,\n 1\n ],\n 'orangered': [\n 255,\n 69,\n 0,\n 1\n ],\n 'orchid': [\n 218,\n 112,\n 214,\n 1\n ],\n 'palegoldenrod': [\n 238,\n 232,\n 170,\n 1\n ],\n 'palegreen': [\n 152,\n 251,\n 152,\n 1\n ],\n 'paleturquoise': [\n 175,\n 238,\n 238,\n 1\n ],\n 'palevioletred': [\n 219,\n 112,\n 147,\n 1\n ],\n 'papayawhip': [\n 255,\n 239,\n 213,\n 1\n ],\n 'peachpuff': [\n 255,\n 218,\n 185,\n 1\n ],\n 'peru': [\n 205,\n 133,\n 63,\n 1\n ],\n 'pink': [\n 255,\n 192,\n 203,\n 1\n ],\n 'plum': [\n 221,\n 160,\n 221,\n 1\n ],\n 'powderblue': [\n 176,\n 224,\n 230,\n 1\n ],\n 'purple': [\n 128,\n 0,\n 128,\n 1\n ],\n 'rebeccapurple': [\n 102,\n 51,\n 153,\n 1\n ],\n 'red': [\n 255,\n 0,\n 0,\n 1\n ],\n 'rosybrown': [\n 188,\n 143,\n 143,\n 1\n ],\n 'royalblue': [\n 65,\n 105,\n 225,\n 1\n ],\n 'saddlebrown': [\n 139,\n 69,\n 19,\n 1\n ],\n 'salmon': [\n 250,\n 128,\n 114,\n 1\n ],\n 'sandybrown': [\n 244,\n 164,\n 96,\n 1\n ],\n 'seagreen': [\n 46,\n 139,\n 87,\n 1\n ],\n 'seashell': [\n 255,\n 245,\n 238,\n 1\n ],\n 'sienna': [\n 160,\n 82,\n 45,\n 1\n ],\n 'silver': [\n 192,\n 192,\n 192,\n 1\n ],\n 'skyblue': [\n 135,\n 206,\n 235,\n 1\n ],\n 'slateblue': [\n 106,\n 90,\n 205,\n 1\n ],\n 'slategray': [\n 112,\n 128,\n 144,\n 1\n ],\n 'slategrey': [\n 112,\n 128,\n 144,\n 1\n ],\n 'snow': [\n 255,\n 250,\n 250,\n 1\n ],\n 'springgreen': [\n 0,\n 255,\n 127,\n 1\n ],\n 'steelblue': [\n 70,\n 130,\n 180,\n 1\n ],\n 'tan': [\n 210,\n 180,\n 140,\n 1\n ],\n 'teal': [\n 0,\n 128,\n 128,\n 1\n ],\n 'thistle': [\n 216,\n 191,\n 216,\n 1\n ],\n 'tomato': [\n 255,\n 99,\n 71,\n 1\n ],\n 'turquoise': [\n 64,\n 224,\n 208,\n 1\n ],\n 'violet': [\n 238,\n 130,\n 238,\n 1\n ],\n 'wheat': [\n 245,\n 222,\n 179,\n 1\n ],\n 'white': [\n 255,\n 255,\n 255,\n 1\n ],\n 'whitesmoke': [\n 245,\n 245,\n 245,\n 1\n ],\n 'yellow': [\n 255,\n 255,\n 0,\n 1\n ],\n 'yellowgreen': [\n 154,\n 205,\n 50,\n 1\n ]\n};\nfunction clamp_css_byte(i) {\n // Clamp to integer 0 .. 255.\n i = Math.round(i);\n // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\nfunction clamp_css_float(f) {\n // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\nfunction parse_css_int(str) {\n // int or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_byte(parseFloat(str) / 100 * 255);\n return clamp_css_byte(parseInt(str));\n}\nfunction parse_css_float(str) {\n // float or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_float(parseFloat(str) / 100);\n return clamp_css_float(parseFloat(str));\n}\nfunction css_hue_to_rgb(m1, m2, h) {\n if (h < 0)\n h += 1;\n else if (h > 1)\n h -= 1;\n if (h * 6 < 1)\n return m1 + (m2 - m1) * h * 6;\n if (h * 2 < 1)\n return m2;\n if (h * 3 < 2)\n return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n return m1;\n}\nfunction parseCSSColor(css_str) {\n // Remove all whitespace, not compliant, but should just be more accepting.\n var str = css_str.replace(/ /g, '').toLowerCase();\n // Color keywords (and transparent) lookup.\n if (str in kCSSColorTable)\n return kCSSColorTable[str].slice();\n // dup.\n // #abc and #abc123 syntax.\n if (str[0] === '#') {\n if (str.length === 4) {\n var iv = parseInt(str.substr(1), 16);\n // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 4095))\n return null;\n // Covers NaN.\n return [\n (iv & 3840) >> 4 | (iv & 3840) >> 8,\n iv & 240 | (iv & 240) >> 4,\n iv & 15 | (iv & 15) << 4,\n 1\n ];\n } else if (str.length === 7) {\n var iv = parseInt(str.substr(1), 16);\n // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 16777215))\n return null;\n // Covers NaN.\n return [\n (iv & 16711680) >> 16,\n (iv & 65280) >> 8,\n iv & 255,\n 1\n ];\n }\n return null;\n }\n var op = str.indexOf('('), ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === str.length) {\n var fname = str.substr(0, op);\n var params = str.substr(op + 1, ep - (op + 1)).split(',');\n var alpha = 1;\n // To allow case fallthrough.\n switch (fname) {\n case 'rgba':\n if (params.length !== 4)\n return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'rgb':\n if (params.length !== 3)\n return null;\n return [\n parse_css_int(params[0]),\n parse_css_int(params[1]),\n parse_css_int(params[2]),\n alpha\n ];\n case 'hsla':\n if (params.length !== 4)\n return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'hsl':\n if (params.length !== 3)\n return null;\n var h = (parseFloat(params[0]) % 360 + 360) % 360 / 360;\n // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n var s = parse_css_float(params[1]);\n var l = parse_css_float(params[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n return [\n clamp_css_byte(css_hue_to_rgb(m1, m2, h + 1 / 3) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h - 1 / 3) * 255),\n alpha\n ];\n default:\n return null;\n }\n }\n return null;\n}\ntry {\n parseCSSColor_1 = csscolorparser.parseCSSColor = parseCSSColor;\n} catch (e) {\n}\n\n// \n/**\n * An RGBA color value. Create instances from color strings using the static\n * method `Color.parse`. The constructor accepts RGB channel values in the range\n * `[0, 1]`, premultiplied by A.\n *\n * @param {number} r The red channel.\n * @param {number} g The green channel.\n * @param {number} b The blue channel.\n * @param {number} a The alpha channel.\n * @private\n */\nclass Color {\n constructor(r, g, b, a = 1) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n }\n /**\n * Parses valid CSS color strings and returns a `Color` instance.\n * @returns A `Color` instance, or `undefined` if the input is not a valid color string.\n */\n static parse(input) {\n if (!input) {\n return undefined;\n }\n if (input instanceof Color) {\n return input;\n }\n if (typeof input !== 'string') {\n return undefined;\n }\n const rgba = parseCSSColor_1(input);\n if (!rgba) {\n return undefined;\n }\n return new Color(rgba[0] / 255 * rgba[3], rgba[1] / 255 * rgba[3], rgba[2] / 255 * rgba[3], rgba[3]);\n }\n /**\n * Returns an RGBA string representing the color value.\n *\n * @returns An RGBA string.\n * @example\n * var purple = new Color.parse('purple');\n * purple.toString; // = \"rgba(128,0,128,1)\"\n * var translucentGreen = new Color.parse('rgba(26, 207, 26, .73)');\n * translucentGreen.toString(); // = \"rgba(26,207,26,0.73)\"\n */\n toString() {\n const [r, g, b, a] = this.toArray();\n return `rgba(${ Math.round(r) },${ Math.round(g) },${ Math.round(b) },${ a })`;\n }\n /**\n * Returns an RGBA array of values representing the color, unpremultiplied by A.\n *\n * @returns An array of RGBA color values in the range [0, 255].\n */\n toArray() {\n const {r, g, b, a} = this;\n return a === 0 ? [\n 0,\n 0,\n 0,\n 0\n ] : [\n r * 255 / a,\n g * 255 / a,\n b * 255 / a,\n a\n ];\n }\n /**\n * Returns a RGBA array of float values representing the color, unpremultiplied by A.\n *\n * @returns An array of RGBA color values in the range [0, 1].\n */\n toArray01() {\n const {r, g, b, a} = this;\n return a === 0 ? [\n 0,\n 0,\n 0,\n 0\n ] : [\n r / a,\n g / a,\n b / a,\n a\n ];\n }\n /**\n * Returns an RGBA array of values representing the color, premultiplied by A.\n *\n * @returns An array of RGBA color values in the range [0, 1].\n */\n toArray01PremultipliedAlpha() {\n const {r, g, b, a} = this;\n return [\n r,\n g,\n b,\n a\n ];\n }\n}\nColor.black = new Color(0, 0, 0, 1);\nColor.white = new Color(1, 1, 1, 1);\nColor.transparent = new Color(0, 0, 0, 0);\nColor.red = new Color(1, 0, 0, 1);\nColor.blue = new Color(0, 0, 1, 1);\nvar Color$1 = Color;\n\nfunction convertLiteral(value) {\n return typeof value === 'object' ? [\n 'literal',\n value\n ] : value;\n}\nfunction convertFunction(parameters, propertySpec) {\n let stops = parameters.stops;\n if (!stops) {\n // identity function\n return convertIdentityFunction(parameters, propertySpec);\n }\n const zoomAndFeatureDependent = stops && typeof stops[0][0] === 'object';\n const featureDependent = zoomAndFeatureDependent || parameters.property !== undefined;\n const zoomDependent = zoomAndFeatureDependent || !featureDependent;\n stops = stops.map(stop => {\n if (!featureDependent && propertySpec.tokens && typeof stop[1] === 'string') {\n return [\n stop[0],\n convertTokenString(stop[1])\n ];\n }\n return [\n stop[0],\n convertLiteral(stop[1])\n ];\n });\n if (zoomAndFeatureDependent) {\n return convertZoomAndPropertyFunction(parameters, propertySpec, stops);\n } else if (zoomDependent) {\n return convertZoomFunction(parameters, propertySpec, stops);\n } else {\n return convertPropertyFunction(parameters, propertySpec, stops);\n }\n}\nfunction convertIdentityFunction(parameters, propertySpec) {\n const get = [\n 'get',\n parameters.property\n ];\n if (parameters.default === undefined) {\n // By default, expressions for string-valued properties get coerced. To preserve\n // legacy function semantics, insert an explicit assertion instead.\n return propertySpec.type === 'string' ? [\n 'string',\n get\n ] : get;\n } else if (propertySpec.type === 'enum') {\n return [\n 'match',\n get,\n Object.keys(propertySpec.values),\n get,\n parameters.default\n ];\n } else {\n const expression = [\n propertySpec.type === 'color' ? 'to-color' : propertySpec.type,\n get,\n convertLiteral(parameters.default)\n ];\n if (propertySpec.type === 'array') {\n expression.splice(1, 0, propertySpec.value, propertySpec.length || null);\n }\n return expression;\n }\n}\nfunction getInterpolateOperator(parameters) {\n switch (parameters.colorSpace) {\n case 'hcl':\n return 'interpolate-hcl';\n case 'lab':\n return 'interpolate-lab';\n default:\n return 'interpolate';\n }\n}\nfunction convertZoomAndPropertyFunction(parameters, propertySpec, stops) {\n const featureFunctionParameters = {};\n const featureFunctionStops = {};\n const zoomStops = [];\n for (let s = 0; s < stops.length; s++) {\n const stop = stops[s];\n const zoom = stop[0].zoom;\n if (featureFunctionParameters[zoom] === undefined) {\n featureFunctionParameters[zoom] = {\n zoom,\n type: parameters.type,\n property: parameters.property,\n default: parameters.default\n };\n featureFunctionStops[zoom] = [];\n zoomStops.push(zoom);\n }\n featureFunctionStops[zoom].push([\n stop[0].value,\n stop[1]\n ]);\n }\n // the interpolation type for the zoom dimension of a zoom-and-property\n // function is determined directly from the style property specification\n // for which it's being used: linear for interpolatable properties, step\n // otherwise.\n const functionType = getFunctionType({}, propertySpec);\n if (functionType === 'exponential') {\n const expression = [\n getInterpolateOperator(parameters),\n ['linear'],\n ['zoom']\n ];\n for (const z of zoomStops) {\n const output = convertPropertyFunction(featureFunctionParameters[z], propertySpec, featureFunctionStops[z]);\n appendStopPair(expression, z, output, false);\n }\n return expression;\n } else {\n const expression = [\n 'step',\n ['zoom']\n ];\n for (const z of zoomStops) {\n const output = convertPropertyFunction(featureFunctionParameters[z], propertySpec, featureFunctionStops[z]);\n appendStopPair(expression, z, output, true);\n }\n fixupDegenerateStepCurve(expression);\n return expression;\n }\n}\nfunction coalesce(a, b) {\n if (a !== undefined)\n return a;\n if (b !== undefined)\n return b;\n}\nfunction getFallback(parameters, propertySpec) {\n const defaultValue = convertLiteral(coalesce(parameters.default, propertySpec.default));\n /*\n * Some fields with type: resolvedImage have an undefined default.\n * Because undefined is an invalid value for resolvedImage, set fallback to\n * an empty string instead of undefined to ensure output\n * passes validation.\n */\n if (defaultValue === undefined && propertySpec.type === 'resolvedImage') {\n return '';\n }\n return defaultValue;\n}\nfunction convertPropertyFunction(parameters, propertySpec, stops) {\n const type = getFunctionType(parameters, propertySpec);\n const get = [\n 'get',\n parameters.property\n ];\n if (type === 'categorical' && typeof stops[0][0] === 'boolean') {\n const expression = ['case'];\n for (const stop of stops) {\n expression.push([\n '==',\n get,\n stop[0]\n ], stop[1]);\n }\n expression.push(getFallback(parameters, propertySpec));\n return expression;\n } else if (type === 'categorical') {\n const expression = [\n 'match',\n get\n ];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], false);\n }\n expression.push(getFallback(parameters, propertySpec));\n return expression;\n } else if (type === 'interval') {\n const expression = [\n 'step',\n [\n 'number',\n get\n ]\n ];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], true);\n }\n fixupDegenerateStepCurve(expression);\n return parameters.default === undefined ? expression : [\n 'case',\n [\n '==',\n [\n 'typeof',\n get\n ],\n 'number'\n ],\n expression,\n convertLiteral(parameters.default)\n ];\n } else if (type === 'exponential') {\n const base = parameters.base !== undefined ? parameters.base : 1;\n const expression = [\n getInterpolateOperator(parameters),\n base === 1 ? ['linear'] : [\n 'exponential',\n base\n ],\n [\n 'number',\n get\n ]\n ];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], false);\n }\n return parameters.default === undefined ? expression : [\n 'case',\n [\n '==',\n [\n 'typeof',\n get\n ],\n 'number'\n ],\n expression,\n convertLiteral(parameters.default)\n ];\n } else {\n throw new Error(`Unknown property function type ${ type }`);\n }\n}\nfunction convertZoomFunction(parameters, propertySpec, stops, input = ['zoom']) {\n const type = getFunctionType(parameters, propertySpec);\n let expression;\n let isStep = false;\n if (type === 'interval') {\n expression = [\n 'step',\n input\n ];\n isStep = true;\n } else if (type === 'exponential') {\n const base = parameters.base !== undefined ? parameters.base : 1;\n expression = [\n getInterpolateOperator(parameters),\n base === 1 ? ['linear'] : [\n 'exponential',\n base\n ],\n input\n ];\n } else {\n throw new Error(`Unknown zoom function type \"${ type }\"`);\n }\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], isStep);\n }\n fixupDegenerateStepCurve(expression);\n return expression;\n}\nfunction fixupDegenerateStepCurve(expression) {\n // degenerate step curve (i.e. a constant function): add a noop stop\n if (expression[0] === 'step' && expression.length === 3) {\n expression.push(0);\n expression.push(expression[3]);\n }\n}\nfunction appendStopPair(curve, input, output, isStep) {\n // Skip duplicate stop values. They were not validated for functions, but they are for expressions.\n // https://github.com/mapbox/mapbox-gl-js/issues/4107\n if (curve.length > 3 && input === curve[curve.length - 2]) {\n return;\n }\n // step curves don't get the first input value, as it is redundant.\n if (!(isStep && curve.length === 2)) {\n curve.push(input);\n }\n curve.push(output);\n}\nfunction getFunctionType(parameters, propertySpec) {\n if (parameters.type) {\n return parameters.type;\n } else {\n return propertySpec.expression.interpolated ? 'exponential' : 'interval';\n }\n}\n// \"String with {name} token\" => [\"concat\", \"String with \", [\"get\", \"name\"], \" token\"]\nfunction convertTokenString(s) {\n const result = ['concat'];\n const re = /{([^{}]+)}/g;\n let pos = 0;\n for (let match = re.exec(s); match !== null; match = re.exec(s)) {\n const literal = s.slice(pos, re.lastIndex - match[0].length);\n pos = re.lastIndex;\n if (literal.length > 0)\n result.push(literal);\n result.push([\n 'get',\n match[1]\n ]);\n }\n if (result.length === 1) {\n return s;\n }\n if (pos < s.length) {\n result.push(s.slice(pos));\n } else if (result.length === 2) {\n return [\n 'to-string',\n result[1]\n ];\n }\n return result;\n}\n\n// \nclass ParsingError extends Error {\n constructor(key, message) {\n super(message);\n this.message = message;\n this.key = key;\n }\n}\nvar ParsingError$1 = ParsingError;\n\n// \n/**\n * Tracks `let` bindings during expression parsing.\n * @private\n */\nclass Scope {\n constructor(parent, bindings = []) {\n this.parent = parent;\n this.bindings = {};\n for (const [name, expression] of bindings) {\n this.bindings[name] = expression;\n }\n }\n concat(bindings) {\n return new Scope(this, bindings);\n }\n get(name) {\n if (this.bindings[name]) {\n return this.bindings[name];\n }\n if (this.parent) {\n return this.parent.get(name);\n }\n throw new Error(`${ name } not found in scope.`);\n }\n has(name) {\n if (this.bindings[name])\n return true;\n return this.parent ? this.parent.has(name) : false;\n }\n}\nvar Scope$1 = Scope;\n\n// \nconst NullType = { kind: 'null' };\nconst NumberType = { kind: 'number' };\nconst StringType = { kind: 'string' };\nconst BooleanType = { kind: 'boolean' };\nconst ColorType = { kind: 'color' };\nconst ObjectType = { kind: 'object' };\nconst ValueType = { kind: 'value' };\nconst ErrorType = { kind: 'error' };\nconst CollatorType = { kind: 'collator' };\nconst FormattedType = { kind: 'formatted' };\nconst ResolvedImageType = { kind: 'resolvedImage' };\nfunction array$1(itemType, N) {\n return {\n kind: 'array',\n itemType,\n N\n };\n}\nfunction toString$1(type) {\n if (type.kind === 'array') {\n const itemType = toString$1(type.itemType);\n return typeof type.N === 'number' ? `array<${ itemType }, ${ type.N }>` : type.itemType.kind === 'value' ? 'array' : `array<${ itemType }>`;\n } else {\n return type.kind;\n }\n}\nconst valueMemberTypes = [\n NullType,\n NumberType,\n StringType,\n BooleanType,\n ColorType,\n FormattedType,\n ObjectType,\n array$1(ValueType),\n ResolvedImageType\n];\n/**\n * Returns null if `t` is a subtype of `expected`; otherwise returns an\n * error message.\n * @private\n */\nfunction checkSubtype(expected, t) {\n if (t.kind === 'error') {\n // Error is a subtype of every type\n return null;\n } else if (expected.kind === 'array') {\n if (t.kind === 'array' && (t.N === 0 && t.itemType.kind === 'value' || !checkSubtype(expected.itemType, t.itemType)) && (typeof expected.N !== 'number' || expected.N === t.N)) {\n return null;\n }\n } else if (expected.kind === t.kind) {\n return null;\n } else if (expected.kind === 'value') {\n for (const memberType of valueMemberTypes) {\n if (!checkSubtype(memberType, t)) {\n return null;\n }\n }\n }\n return `Expected ${ toString$1(expected) } but found ${ toString$1(t) } instead.`;\n}\nfunction isValidType(provided, allowedTypes) {\n return allowedTypes.some(t => t.kind === provided.kind);\n}\nfunction isValidNativeType(provided, allowedTypes) {\n return allowedTypes.some(t => {\n if (t === 'null') {\n return provided === null;\n } else if (t === 'array') {\n return Array.isArray(provided);\n } else if (t === 'object') {\n return provided && !Array.isArray(provided) && typeof provided === 'object';\n } else {\n return t === typeof provided;\n }\n });\n}\n\n// \n// Flow type declarations for Intl cribbed from\n// https://github.com/facebook/flow/issues/1270\nclass Collator {\n constructor(caseSensitive, diacriticSensitive, locale) {\n if (caseSensitive)\n this.sensitivity = diacriticSensitive ? 'variant' : 'case';\n else\n this.sensitivity = diacriticSensitive ? 'accent' : 'base';\n this.locale = locale;\n this.collator = new Intl.Collator(this.locale ? this.locale : [], {\n sensitivity: this.sensitivity,\n usage: 'search'\n });\n }\n compare(lhs, rhs) {\n return this.collator.compare(lhs, rhs);\n }\n resolvedLocale() {\n // We create a Collator without \"usage: search\" because we don't want\n // the search options encoded in our result (e.g. \"en-u-co-search\")\n return new Intl.Collator(this.locale ? this.locale : []).resolvedOptions().locale;\n }\n}\n\n// \nclass FormattedSection {\n constructor(text, image, scale, fontStack, textColor) {\n // combine characters so that diacritic marks are not separate code points\n this.text = text.normalize ? text.normalize() : text;\n this.image = image;\n this.scale = scale;\n this.fontStack = fontStack;\n this.textColor = textColor;\n }\n}\nclass Formatted {\n constructor(sections) {\n this.sections = sections;\n }\n static fromString(unformatted) {\n return new Formatted([new FormattedSection(unformatted, null, null, null, null)]);\n }\n isEmpty() {\n if (this.sections.length === 0)\n return true;\n return !this.sections.some(section => section.text.length !== 0 || section.image && section.image.name.length !== 0);\n }\n static factory(text) {\n if (text instanceof Formatted) {\n return text;\n } else {\n return Formatted.fromString(text);\n }\n }\n toString() {\n if (this.sections.length === 0)\n return '';\n return this.sections.map(section => section.text).join('');\n }\n serialize() {\n const serialized = ['format'];\n for (const section of this.sections) {\n if (section.image) {\n serialized.push([\n 'image',\n section.image.name\n ]);\n continue;\n }\n serialized.push(section.text);\n const options = {};\n if (section.fontStack) {\n options['text-font'] = [\n 'literal',\n section.fontStack.split(',')\n ];\n }\n if (section.scale) {\n options['font-scale'] = section.scale;\n }\n if (section.textColor) {\n options['text-color'] = ['rgba'].concat(section.textColor.toArray());\n }\n serialized.push(options);\n }\n return serialized;\n }\n}\n\n// \nclass ResolvedImage {\n constructor(options) {\n this.name = options.name;\n this.available = options.available;\n }\n toString() {\n return this.name;\n }\n static fromString(name) {\n if (!name)\n return null;\n // treat empty values as no image\n return new ResolvedImage({\n name,\n available: false\n });\n }\n serialize() {\n return [\n 'image',\n this.name\n ];\n }\n}\n\nfunction validateRGBA(r, g, b, a) {\n if (!(typeof r === 'number' && r >= 0 && r <= 255 && typeof g === 'number' && g >= 0 && g <= 255 && typeof b === 'number' && b >= 0 && b <= 255)) {\n const value = typeof a === 'number' ? [\n r,\n g,\n b,\n a\n ] : [\n r,\n g,\n b\n ];\n return `Invalid rgba value [${ value.join(', ') }]: 'r', 'g', and 'b' must be between 0 and 255.`;\n }\n if (!(typeof a === 'undefined' || typeof a === 'number' && a >= 0 && a <= 1)) {\n return `Invalid rgba value [${ [\n r,\n g,\n b,\n a\n ].join(', ') }]: 'a' must be between 0 and 1.`;\n }\n return null;\n}\nfunction isValue(mixed) {\n if (mixed === null) {\n return true;\n } else if (typeof mixed === 'string') {\n return true;\n } else if (typeof mixed === 'boolean') {\n return true;\n } else if (typeof mixed === 'number') {\n return true;\n } else if (mixed instanceof Color$1) {\n return true;\n } else if (mixed instanceof Collator) {\n return true;\n } else if (mixed instanceof Formatted) {\n return true;\n } else if (mixed instanceof ResolvedImage) {\n return true;\n } else if (Array.isArray(mixed)) {\n for (const item of mixed) {\n if (!isValue(item)) {\n return false;\n }\n }\n return true;\n } else if (typeof mixed === 'object') {\n for (const key in mixed) {\n if (!isValue(mixed[key])) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n}\nfunction typeOf(value) {\n if (value === null) {\n return NullType;\n } else if (typeof value === 'string') {\n return StringType;\n } else if (typeof value === 'boolean') {\n return BooleanType;\n } else if (typeof value === 'number') {\n return NumberType;\n } else if (value instanceof Color$1) {\n return ColorType;\n } else if (value instanceof Collator) {\n return CollatorType;\n } else if (value instanceof Formatted) {\n return FormattedType;\n } else if (value instanceof ResolvedImage) {\n return ResolvedImageType;\n } else if (Array.isArray(value)) {\n const length = value.length;\n let itemType;\n for (const item of value) {\n const t = typeOf(item);\n if (!itemType) {\n itemType = t;\n } else if (itemType === t) {\n continue;\n } else {\n itemType = ValueType;\n break;\n }\n }\n return array$1(itemType || ValueType, length);\n } else {\n return ObjectType;\n }\n}\nfunction toString(value) {\n const type = typeof value;\n if (value === null) {\n return '';\n } else if (type === 'string' || type === 'number' || type === 'boolean') {\n return String(value);\n } else if (value instanceof Color$1 || value instanceof Formatted || value instanceof ResolvedImage) {\n return value.toString();\n } else {\n return JSON.stringify(value);\n }\n}\n\nclass Literal {\n constructor(type, value) {\n this.type = type;\n this.value = value;\n }\n static parse(args, context) {\n if (args.length !== 2)\n return context.error(`'literal' expression requires exactly one argument, but found ${ args.length - 1 } instead.`);\n if (!isValue(args[1]))\n return context.error(`invalid value`);\n const value = args[1];\n let type = typeOf(value);\n // special case: infer the item type if possible for zero-length arrays\n const expected = context.expectedType;\n if (type.kind === 'array' && type.N === 0 && expected && expected.kind === 'array' && (typeof expected.N !== 'number' || expected.N === 0)) {\n type = expected;\n }\n return new Literal(type, value);\n }\n evaluate() {\n return this.value;\n }\n eachChild() {\n }\n outputDefined() {\n return true;\n }\n serialize() {\n if (this.type.kind === 'array' || this.type.kind === 'object') {\n return [\n 'literal',\n this.value\n ];\n } else if (this.value instanceof Color$1) {\n // Constant-folding can generate Literal expressions that you\n // couldn't actually generate with a \"literal\" expression,\n // so we have to implement an equivalent serialization here\n return ['rgba'].concat(this.value.toArray());\n } else if (this.value instanceof Formatted) {\n // Same as Color\n return this.value.serialize();\n } else {\n return this.value;\n }\n }\n}\nvar Literal$1 = Literal;\n\n// \nclass RuntimeError {\n constructor(message) {\n this.name = 'ExpressionEvaluationError';\n this.message = message;\n }\n toJSON() {\n return this.message;\n }\n}\nvar RuntimeError$1 = RuntimeError;\n\nconst types$2 = {\n string: StringType,\n number: NumberType,\n boolean: BooleanType,\n object: ObjectType\n};\nclass Assertion {\n constructor(type, args) {\n this.type = type;\n this.args = args;\n }\n static parse(args, context) {\n if (args.length < 2)\n return context.error(`Expected at least one argument.`);\n let i = 1;\n let type;\n const name = args[0];\n if (name === 'array') {\n let itemType;\n if (args.length > 2) {\n const type = args[1];\n if (typeof type !== 'string' || !(type in types$2) || type === 'object')\n return context.error('The item type argument of \"array\" must be one of string, number, boolean', 1);\n itemType = types$2[type];\n i++;\n } else {\n itemType = ValueType;\n }\n let N;\n if (args.length > 3) {\n if (args[2] !== null && (typeof args[2] !== 'number' || args[2] < 0 || args[2] !== Math.floor(args[2]))) {\n return context.error('The length argument to \"array\" must be a positive integer literal', 2);\n }\n N = args[2];\n i++;\n }\n type = array$1(itemType, N);\n } else {\n type = types$2[name];\n }\n const parsed = [];\n for (; i < args.length; i++) {\n const input = context.parse(args[i], i, ValueType);\n if (!input)\n return null;\n parsed.push(input);\n }\n return new Assertion(type, parsed);\n }\n evaluate(ctx) {\n for (let i = 0; i < this.args.length; i++) {\n const value = this.args[i].evaluate(ctx);\n const error = checkSubtype(this.type, typeOf(value));\n if (!error) {\n return value;\n } else if (i === this.args.length - 1) {\n throw new RuntimeError$1(`Expected value to be of type ${ toString$1(this.type) }, but found ${ toString$1(typeOf(value)) } instead.`);\n }\n }\n return null;\n }\n eachChild(fn) {\n this.args.forEach(fn);\n }\n outputDefined() {\n return this.args.every(arg => arg.outputDefined());\n }\n serialize() {\n const type = this.type;\n const serialized = [type.kind];\n if (type.kind === 'array') {\n const itemType = type.itemType;\n if (itemType.kind === 'string' || itemType.kind === 'number' || itemType.kind === 'boolean') {\n serialized.push(itemType.kind);\n const N = type.N;\n if (typeof N === 'number' || this.args.length > 1) {\n serialized.push(N);\n }\n }\n }\n return serialized.concat(this.args.map(arg => arg.serialize()));\n }\n}\nvar Assertion$1 = Assertion;\n\n// \nclass FormatExpression {\n constructor(sections) {\n this.type = FormattedType;\n this.sections = sections;\n }\n static parse(args, context) {\n if (args.length < 2) {\n return context.error(`Expected at least one argument.`);\n }\n const firstArg = args[1];\n if (!Array.isArray(firstArg) && typeof firstArg === 'object') {\n return context.error(`First argument must be an image or text section.`);\n }\n const sections = [];\n let nextTokenMayBeObject = false;\n for (let i = 1; i <= args.length - 1; ++i) {\n const arg = args[i];\n if (nextTokenMayBeObject && typeof arg === 'object' && !Array.isArray(arg)) {\n nextTokenMayBeObject = false;\n let scale = null;\n if (arg['font-scale']) {\n scale = context.parse(arg['font-scale'], 1, NumberType);\n if (!scale)\n return null;\n }\n let font = null;\n if (arg['text-font']) {\n font = context.parse(arg['text-font'], 1, array$1(StringType));\n if (!font)\n return null;\n }\n let textColor = null;\n if (arg['text-color']) {\n textColor = context.parse(arg['text-color'], 1, ColorType);\n if (!textColor)\n return null;\n }\n const lastExpression = sections[sections.length - 1];\n lastExpression.scale = scale;\n lastExpression.font = font;\n lastExpression.textColor = textColor;\n } else {\n const content = context.parse(args[i], 1, ValueType);\n if (!content)\n return null;\n const kind = content.type.kind;\n if (kind !== 'string' && kind !== 'value' && kind !== 'null' && kind !== 'resolvedImage')\n return context.error(`Formatted text type must be 'string', 'value', 'image' or 'null'.`);\n nextTokenMayBeObject = true;\n sections.push({\n content,\n scale: null,\n font: null,\n textColor: null\n });\n }\n }\n return new FormatExpression(sections);\n }\n evaluate(ctx) {\n const evaluateSection = section => {\n const evaluatedContent = section.content.evaluate(ctx);\n if (typeOf(evaluatedContent) === ResolvedImageType) {\n return new FormattedSection('', evaluatedContent, null, null, null);\n }\n return new FormattedSection(toString(evaluatedContent), null, section.scale ? section.scale.evaluate(ctx) : null, section.font ? section.font.evaluate(ctx).join(',') : null, section.textColor ? section.textColor.evaluate(ctx) : null);\n };\n return new Formatted(this.sections.map(evaluateSection));\n }\n eachChild(fn) {\n for (const section of this.sections) {\n fn(section.content);\n if (section.scale) {\n fn(section.scale);\n }\n if (section.font) {\n fn(section.font);\n }\n if (section.textColor) {\n fn(section.textColor);\n }\n }\n }\n outputDefined() {\n // Technically the combinatoric set of all children\n // Usually, this.text will be undefined anyway\n return false;\n }\n serialize() {\n const serialized = ['format'];\n for (const section of this.sections) {\n serialized.push(section.content.serialize());\n const options = {};\n if (section.scale) {\n options['font-scale'] = section.scale.serialize();\n }\n if (section.font) {\n options['text-font'] = section.font.serialize();\n }\n if (section.textColor) {\n options['text-color'] = section.textColor.serialize();\n }\n serialized.push(options);\n }\n return serialized;\n }\n}\n\n// \nclass ImageExpression {\n constructor(input) {\n this.type = ResolvedImageType;\n this.input = input;\n }\n static parse(args, context) {\n if (args.length !== 2) {\n return context.error(`Expected two arguments.`);\n }\n const name = context.parse(args[1], 1, StringType);\n if (!name)\n return context.error(`No image name provided.`);\n return new ImageExpression(name);\n }\n evaluate(ctx) {\n const evaluatedImageName = this.input.evaluate(ctx);\n const value = ResolvedImage.fromString(evaluatedImageName);\n if (value && ctx.availableImages)\n value.available = ctx.availableImages.indexOf(evaluatedImageName) > -1;\n return value;\n }\n eachChild(fn) {\n fn(this.input);\n }\n outputDefined() {\n // The output of image is determined by the list of available images in the evaluation context\n return false;\n }\n serialize() {\n return [\n 'image',\n this.input.serialize()\n ];\n }\n}\n\nconst types$1 = {\n 'to-boolean': BooleanType,\n 'to-color': ColorType,\n 'to-number': NumberType,\n 'to-string': StringType\n};\n/**\n * Special form for error-coalescing coercion expressions \"to-number\",\n * \"to-color\". Since these coercions can fail at runtime, they accept multiple\n * arguments, only evaluating one at a time until one succeeds.\n *\n * @private\n */\nclass Coercion {\n constructor(type, args) {\n this.type = type;\n this.args = args;\n }\n static parse(args, context) {\n if (args.length < 2)\n return context.error(`Expected at least one argument.`);\n const name = args[0];\n if ((name === 'to-boolean' || name === 'to-string') && args.length !== 2)\n return context.error(`Expected one argument.`);\n const type = types$1[name];\n const parsed = [];\n for (let i = 1; i < args.length; i++) {\n const input = context.parse(args[i], i, ValueType);\n if (!input)\n return null;\n parsed.push(input);\n }\n return new Coercion(type, parsed);\n }\n evaluate(ctx) {\n if (this.type.kind === 'boolean') {\n return Boolean(this.args[0].evaluate(ctx));\n } else if (this.type.kind === 'color') {\n let input;\n let error;\n for (const arg of this.args) {\n input = arg.evaluate(ctx);\n error = null;\n if (input instanceof Color$1) {\n return input;\n } else if (typeof input === 'string') {\n const c = ctx.parseColor(input);\n if (c)\n return c;\n } else if (Array.isArray(input)) {\n if (input.length < 3 || input.length > 4) {\n error = `Invalid rbga value ${ JSON.stringify(input) }: expected an array containing either three or four numeric values.`;\n } else {\n error = validateRGBA(input[0], input[1], input[2], input[3]);\n }\n if (!error) {\n return new Color$1(input[0] / 255, input[1] / 255, input[2] / 255, input[3]);\n }\n }\n }\n throw new RuntimeError$1(error || `Could not parse color from value '${ typeof input === 'string' ? input : String(JSON.stringify(input)) }'`);\n } else if (this.type.kind === 'number') {\n let value = null;\n for (const arg of this.args) {\n value = arg.evaluate(ctx);\n if (value === null)\n return 0;\n const num = Number(value);\n if (isNaN(num))\n continue;\n return num;\n }\n throw new RuntimeError$1(`Could not convert ${ JSON.stringify(value) } to number.`);\n } else if (this.type.kind === 'formatted') {\n // There is no explicit 'to-formatted' but this coercion can be implicitly\n // created by properties that expect the 'formatted' type.\n return Formatted.fromString(toString(this.args[0].evaluate(ctx)));\n } else if (this.type.kind === 'resolvedImage') {\n return ResolvedImage.fromString(toString(this.args[0].evaluate(ctx)));\n } else {\n return toString(this.args[0].evaluate(ctx));\n }\n }\n eachChild(fn) {\n this.args.forEach(fn);\n }\n outputDefined() {\n return this.args.every(arg => arg.outputDefined());\n }\n serialize() {\n if (this.type.kind === 'formatted') {\n return new FormatExpression([{\n content: this.args[0],\n scale: null,\n font: null,\n textColor: null\n }]).serialize();\n }\n if (this.type.kind === 'resolvedImage') {\n return new ImageExpression(this.args[0]).serialize();\n }\n const serialized = [`to-${ this.type.kind }`];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n}\nvar Coercion$1 = Coercion;\n\n// \nconst geometryTypes = [\n 'Unknown',\n 'Point',\n 'LineString',\n 'Polygon'\n];\nclass EvaluationContext {\n constructor() {\n this.globals = null;\n this.feature = null;\n this.featureState = null;\n this.formattedSection = null;\n this._parseColorCache = {};\n this.availableImages = null;\n this.canonical = null;\n this.featureTileCoord = null;\n this.featureDistanceData = null;\n }\n id() {\n return this.feature && this.feature.id !== undefined ? this.feature.id : null;\n }\n geometryType() {\n return this.feature ? typeof this.feature.type === 'number' ? geometryTypes[this.feature.type] : this.feature.type : null;\n }\n geometry() {\n return this.feature && 'geometry' in this.feature ? this.feature.geometry : null;\n }\n canonicalID() {\n return this.canonical;\n }\n properties() {\n return this.feature && this.feature.properties || {};\n }\n distanceFromCenter() {\n if (this.featureTileCoord && this.featureDistanceData) {\n const c = this.featureDistanceData.center;\n const scale = this.featureDistanceData.scale;\n const {x, y} = this.featureTileCoord;\n // Calculate the distance vector `d` (left handed)\n const dX = x * scale - c[0];\n const dY = y * scale - c[1];\n // The bearing vector `b` (left handed)\n const bX = this.featureDistanceData.bearing[0];\n const bY = this.featureDistanceData.bearing[1];\n // Distance is calculated as `dot(d, v)`\n const dist = bX * dX + bY * dY;\n return dist;\n }\n return 0;\n }\n parseColor(input) {\n let cached = this._parseColorCache[input];\n if (!cached) {\n cached = this._parseColorCache[input] = Color$1.parse(input);\n }\n return cached;\n }\n}\nvar EvaluationContext$1 = EvaluationContext;\n\n// \nclass CompoundExpression {\n constructor(name, type, evaluate, args) {\n this.name = name;\n this.type = type;\n this._evaluate = evaluate;\n this.args = args;\n }\n evaluate(ctx) {\n return this._evaluate(ctx, this.args);\n }\n eachChild(fn) {\n this.args.forEach(fn);\n }\n outputDefined() {\n return false;\n }\n serialize() {\n return [this.name].concat(this.args.map(arg => arg.serialize()));\n }\n static parse(args, context) {\n const op = args[0];\n const definition = CompoundExpression.definitions[op];\n if (!definition) {\n return context.error(`Unknown expression \"${ op }\". If you wanted a literal array, use [\"literal\", [...]].`, 0);\n }\n // Now check argument types against each signature\n const type = Array.isArray(definition) ? definition[0] : definition.type;\n const availableOverloads = Array.isArray(definition) ? [[\n definition[1],\n definition[2]\n ]] : definition.overloads;\n const overloads = availableOverloads.filter(([signature]) => !Array.isArray(signature) || // varags\n signature.length === args.length - 1 // correct param count\n);\n let signatureContext = null;\n for (const [params, evaluate] of overloads) {\n // Use a fresh context for each attempted signature so that, if\n // we eventually succeed, we haven't polluted `context.errors`.\n signatureContext = new ParsingContext$1(context.registry, context.path, null, context.scope);\n // First parse all the args, potentially coercing to the\n // types expected by this overload.\n const parsedArgs = [];\n let argParseFailed = false;\n for (let i = 1; i < args.length; i++) {\n const arg = args[i];\n const expectedType = Array.isArray(params) ? params[i - 1] : params.type;\n const parsed = signatureContext.parse(arg, 1 + parsedArgs.length, expectedType);\n if (!parsed) {\n argParseFailed = true;\n break;\n }\n parsedArgs.push(parsed);\n }\n if (argParseFailed) {\n // Couldn't coerce args of this overload to expected type, move\n // on to next one.\n continue;\n }\n if (Array.isArray(params)) {\n if (params.length !== parsedArgs.length) {\n signatureContext.error(`Expected ${ params.length } arguments, but found ${ parsedArgs.length } instead.`);\n continue;\n }\n }\n for (let i = 0; i < parsedArgs.length; i++) {\n const expected = Array.isArray(params) ? params[i] : params.type;\n const arg = parsedArgs[i];\n signatureContext.concat(i + 1).checkSubtype(expected, arg.type);\n }\n if (signatureContext.errors.length === 0) {\n return new CompoundExpression(op, type, evaluate, parsedArgs);\n }\n }\n if (overloads.length === 1) {\n context.errors.push(...signatureContext.errors);\n } else {\n const expected = overloads.length ? overloads : availableOverloads;\n const signatures = expected.map(([params]) => stringifySignature(params)).join(' | ');\n const actualTypes = [];\n // For error message, re-parse arguments without trying to\n // apply any coercions\n for (let i = 1; i < args.length; i++) {\n const parsed = context.parse(args[i], 1 + actualTypes.length);\n if (!parsed)\n return null;\n actualTypes.push(toString$1(parsed.type));\n }\n context.error(`Expected arguments of type ${ signatures }, but found (${ actualTypes.join(', ') }) instead.`);\n }\n return null;\n }\n static register(registry, definitions) {\n CompoundExpression.definitions = definitions;\n for (const name in definitions) {\n registry[name] = CompoundExpression;\n }\n }\n}\nfunction stringifySignature(signature) {\n if (Array.isArray(signature)) {\n return `(${ signature.map(toString$1).join(', ') })`;\n } else {\n return `(${ toString$1(signature.type) }...)`;\n }\n}\nvar CompoundExpression$1 = CompoundExpression;\n\n// \nclass CollatorExpression {\n constructor(caseSensitive, diacriticSensitive, locale) {\n this.type = CollatorType;\n this.locale = locale;\n this.caseSensitive = caseSensitive;\n this.diacriticSensitive = diacriticSensitive;\n }\n static parse(args, context) {\n if (args.length !== 2)\n return context.error(`Expected one argument.`);\n const options = args[1];\n if (typeof options !== 'object' || Array.isArray(options))\n return context.error(`Collator options argument must be an object.`);\n const caseSensitive = context.parse(options['case-sensitive'] === undefined ? false : options['case-sensitive'], 1, BooleanType);\n if (!caseSensitive)\n return null;\n const diacriticSensitive = context.parse(options['diacritic-sensitive'] === undefined ? false : options['diacritic-sensitive'], 1, BooleanType);\n if (!diacriticSensitive)\n return null;\n let locale = null;\n if (options['locale']) {\n locale = context.parse(options['locale'], 1, StringType);\n if (!locale)\n return null;\n }\n return new CollatorExpression(caseSensitive, diacriticSensitive, locale);\n }\n evaluate(ctx) {\n return new Collator(this.caseSensitive.evaluate(ctx), this.diacriticSensitive.evaluate(ctx), this.locale ? this.locale.evaluate(ctx) : null);\n }\n eachChild(fn) {\n fn(this.caseSensitive);\n fn(this.diacriticSensitive);\n if (this.locale) {\n fn(this.locale);\n }\n }\n outputDefined() {\n // Technically the set of possible outputs is the combinatoric set of Collators produced\n // by all possible outputs of locale/caseSensitive/diacriticSensitive\n // But for the primary use of Collators in comparison operators, we ignore the Collator's\n // possible outputs anyway, so we can get away with leaving this false for now.\n return false;\n }\n serialize() {\n const options = {};\n options['case-sensitive'] = this.caseSensitive.serialize();\n options['diacritic-sensitive'] = this.diacriticSensitive.serialize();\n if (this.locale) {\n options['locale'] = this.locale.serialize();\n }\n return [\n 'collator',\n options\n ];\n }\n}\n\n// \n// minX, minY, maxX, maxY\nconst EXTENT = 8192;\nfunction updateBBox(bbox, coord) {\n bbox[0] = Math.min(bbox[0], coord[0]);\n bbox[1] = Math.min(bbox[1], coord[1]);\n bbox[2] = Math.max(bbox[2], coord[0]);\n bbox[3] = Math.max(bbox[3], coord[1]);\n}\nfunction mercatorXfromLng(lng) {\n return (180 + lng) / 360;\n}\nfunction mercatorYfromLat(lat) {\n return (180 - 180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + lat * Math.PI / 360))) / 360;\n}\nfunction boxWithinBox(bbox1, bbox2) {\n if (bbox1[0] <= bbox2[0])\n return false;\n if (bbox1[2] >= bbox2[2])\n return false;\n if (bbox1[1] <= bbox2[1])\n return false;\n if (bbox1[3] >= bbox2[3])\n return false;\n return true;\n}\nfunction getTileCoordinates(p, canonical) {\n const x = mercatorXfromLng(p[0]);\n const y = mercatorYfromLat(p[1]);\n const tilesAtZoom = Math.pow(2, canonical.z);\n return [\n Math.round(x * tilesAtZoom * EXTENT),\n Math.round(y * tilesAtZoom * EXTENT)\n ];\n}\nfunction onBoundary(p, p1, p2) {\n const x1 = p[0] - p1[0];\n const y1 = p[1] - p1[1];\n const x2 = p[0] - p2[0];\n const y2 = p[1] - p2[1];\n return x1 * y2 - x2 * y1 === 0 && x1 * x2 <= 0 && y1 * y2 <= 0;\n}\nfunction rayIntersect(p, p1, p2) {\n return p1[1] > p[1] !== p2[1] > p[1] && p[0] < (p2[0] - p1[0]) * (p[1] - p1[1]) / (p2[1] - p1[1]) + p1[0];\n}\n// ray casting algorithm for detecting if point is in polygon\nfunction pointWithinPolygon(point, rings) {\n let inside = false;\n for (let i = 0, len = rings.length; i < len; i++) {\n const ring = rings[i];\n for (let j = 0, len2 = ring.length; j < len2 - 1; j++) {\n if (onBoundary(point, ring[j], ring[j + 1]))\n return false;\n if (rayIntersect(point, ring[j], ring[j + 1]))\n inside = !inside;\n }\n }\n return inside;\n}\nfunction pointWithinPolygons(point, polygons) {\n for (let i = 0; i < polygons.length; i++) {\n if (pointWithinPolygon(point, polygons[i]))\n return true;\n }\n return false;\n}\nfunction perp(v1, v2) {\n return v1[0] * v2[1] - v1[1] * v2[0];\n}\n// check if p1 and p2 are in different sides of line segment q1->q2\nfunction twoSided(p1, p2, q1, q2) {\n // q1->p1 (x1, y1), q1->p2 (x2, y2), q1->q2 (x3, y3)\n const x1 = p1[0] - q1[0];\n const y1 = p1[1] - q1[1];\n const x2 = p2[0] - q1[0];\n const y2 = p2[1] - q1[1];\n const x3 = q2[0] - q1[0];\n const y3 = q2[1] - q1[1];\n const det1 = x1 * y3 - x3 * y1;\n const det2 = x2 * y3 - x3 * y2;\n if (det1 > 0 && det2 < 0 || det1 < 0 && det2 > 0)\n return true;\n return false;\n}\n// a, b are end points for line segment1, c and d are end points for line segment2\nfunction lineIntersectLine(a, b, c, d) {\n // check if two segments are parallel or not\n // precondition is end point a, b is inside polygon, if line a->b is\n // parallel to polygon edge c->d, then a->b won't intersect with c->d\n const vectorP = [\n b[0] - a[0],\n b[1] - a[1]\n ];\n const vectorQ = [\n d[0] - c[0],\n d[1] - c[1]\n ];\n if (perp(vectorQ, vectorP) === 0)\n return false;\n // If lines are intersecting with each other, the relative location should be:\n // a and b lie in different sides of segment c->d\n // c and d lie in different sides of segment a->b\n if (twoSided(a, b, c, d) && twoSided(c, d, a, b))\n return true;\n return false;\n}\nfunction lineIntersectPolygon(p1, p2, polygon) {\n for (const ring of polygon) {\n // loop through every edge of the ring\n for (let j = 0; j < ring.length - 1; ++j) {\n if (lineIntersectLine(p1, p2, ring[j], ring[j + 1])) {\n return true;\n }\n }\n }\n return false;\n}\nfunction lineStringWithinPolygon(line, polygon) {\n // First, check if geometry points of line segments are all inside polygon\n for (let i = 0; i < line.length; ++i) {\n if (!pointWithinPolygon(line[i], polygon)) {\n return false;\n }\n }\n // Second, check if there is line segment intersecting polygon edge\n for (let i = 0; i < line.length - 1; ++i) {\n if (lineIntersectPolygon(line[i], line[i + 1], polygon)) {\n return false;\n }\n }\n return true;\n}\nfunction lineStringWithinPolygons(line, polygons) {\n for (let i = 0; i < polygons.length; i++) {\n if (lineStringWithinPolygon(line, polygons[i]))\n return true;\n }\n return false;\n}\nfunction getTilePolygon(coordinates, bbox, canonical) {\n const polygon = [];\n for (let i = 0; i < coordinates.length; i++) {\n const ring = [];\n for (let j = 0; j < coordinates[i].length; j++) {\n const coord = getTileCoordinates(coordinates[i][j], canonical);\n updateBBox(bbox, coord);\n ring.push(coord);\n }\n polygon.push(ring);\n }\n return polygon;\n}\nfunction getTilePolygons(coordinates, bbox, canonical) {\n const polygons = [];\n for (let i = 0; i < coordinates.length; i++) {\n const polygon = getTilePolygon(coordinates[i], bbox, canonical);\n polygons.push(polygon);\n }\n return polygons;\n}\nfunction updatePoint(p, bbox, polyBBox, worldSize) {\n if (p[0] < polyBBox[0] || p[0] > polyBBox[2]) {\n const halfWorldSize = worldSize * 0.5;\n let shift = p[0] - polyBBox[0] > halfWorldSize ? -worldSize : polyBBox[0] - p[0] > halfWorldSize ? worldSize : 0;\n if (shift === 0) {\n shift = p[0] - polyBBox[2] > halfWorldSize ? -worldSize : polyBBox[2] - p[0] > halfWorldSize ? worldSize : 0;\n }\n p[0] += shift;\n }\n updateBBox(bbox, p);\n}\nfunction resetBBox(bbox) {\n bbox[0] = bbox[1] = Infinity;\n bbox[2] = bbox[3] = -Infinity;\n}\nfunction getTilePoints(geometry, pointBBox, polyBBox, canonical) {\n const worldSize = Math.pow(2, canonical.z) * EXTENT;\n const shifts = [\n canonical.x * EXTENT,\n canonical.y * EXTENT\n ];\n const tilePoints = [];\n if (!geometry)\n return tilePoints;\n for (const points of geometry) {\n for (const point of points) {\n const p = [\n point.x + shifts[0],\n point.y + shifts[1]\n ];\n updatePoint(p, pointBBox, polyBBox, worldSize);\n tilePoints.push(p);\n }\n }\n return tilePoints;\n}\nfunction getTileLines(geometry, lineBBox, polyBBox, canonical) {\n const worldSize = Math.pow(2, canonical.z) * EXTENT;\n const shifts = [\n canonical.x * EXTENT,\n canonical.y * EXTENT\n ];\n const tileLines = [];\n if (!geometry)\n return tileLines;\n for (const line of geometry) {\n const tileLine = [];\n for (const point of line) {\n const p = [\n point.x + shifts[0],\n point.y + shifts[1]\n ];\n updateBBox(lineBBox, p);\n tileLine.push(p);\n }\n tileLines.push(tileLine);\n }\n if (lineBBox[2] - lineBBox[0] <= worldSize / 2) {\n resetBBox(lineBBox);\n for (const line of tileLines) {\n for (const p of line) {\n updatePoint(p, lineBBox, polyBBox, worldSize);\n }\n }\n }\n return tileLines;\n}\nfunction pointsWithinPolygons(ctx, polygonGeometry) {\n const pointBBox = [\n Infinity,\n Infinity,\n -Infinity,\n -Infinity\n ];\n const polyBBox = [\n Infinity,\n Infinity,\n -Infinity,\n -Infinity\n ];\n const canonical = ctx.canonicalID();\n if (!canonical) {\n return false;\n }\n if (polygonGeometry.type === 'Polygon') {\n const tilePolygon = getTilePolygon(polygonGeometry.coordinates, polyBBox, canonical);\n const tilePoints = getTilePoints(ctx.geometry(), pointBBox, polyBBox, canonical);\n if (!boxWithinBox(pointBBox, polyBBox))\n return false;\n for (const point of tilePoints) {\n if (!pointWithinPolygon(point, tilePolygon))\n return false;\n }\n }\n if (polygonGeometry.type === 'MultiPolygon') {\n const tilePolygons = getTilePolygons(polygonGeometry.coordinates, polyBBox, canonical);\n const tilePoints = getTilePoints(ctx.geometry(), pointBBox, polyBBox, canonical);\n if (!boxWithinBox(pointBBox, polyBBox))\n return false;\n for (const point of tilePoints) {\n if (!pointWithinPolygons(point, tilePolygons))\n return false;\n }\n }\n return true;\n}\nfunction linesWithinPolygons(ctx, polygonGeometry) {\n const lineBBox = [\n Infinity,\n Infinity,\n -Infinity,\n -Infinity\n ];\n const polyBBox = [\n Infinity,\n Infinity,\n -Infinity,\n -Infinity\n ];\n const canonical = ctx.canonicalID();\n if (!canonical) {\n return false;\n }\n if (polygonGeometry.type === 'Polygon') {\n const tilePolygon = getTilePolygon(polygonGeometry.coordinates, polyBBox, canonical);\n const tileLines = getTileLines(ctx.geometry(), lineBBox, polyBBox, canonical);\n if (!boxWithinBox(lineBBox, polyBBox))\n return false;\n for (const line of tileLines) {\n if (!lineStringWithinPolygon(line, tilePolygon))\n return false;\n }\n }\n if (polygonGeometry.type === 'MultiPolygon') {\n const tilePolygons = getTilePolygons(polygonGeometry.coordinates, polyBBox, canonical);\n const tileLines = getTileLines(ctx.geometry(), lineBBox, polyBBox, canonical);\n if (!boxWithinBox(lineBBox, polyBBox))\n return false;\n for (const line of tileLines) {\n if (!lineStringWithinPolygons(line, tilePolygons))\n return false;\n }\n }\n return true;\n}\nclass Within {\n constructor(geojson, geometries) {\n this.type = BooleanType;\n this.geojson = geojson;\n this.geometries = geometries;\n }\n static parse(args, context) {\n if (args.length !== 2)\n return context.error(`'within' expression requires exactly one argument, but found ${ args.length - 1 } instead.`);\n if (isValue(args[1])) {\n const geojson = args[1];\n if (geojson.type === 'FeatureCollection') {\n for (let i = 0; i < geojson.features.length; ++i) {\n const type = geojson.features[i].geometry.type;\n if (type === 'Polygon' || type === 'MultiPolygon') {\n return new Within(geojson, geojson.features[i].geometry);\n }\n }\n } else if (geojson.type === 'Feature') {\n const type = geojson.geometry.type;\n if (type === 'Polygon' || type === 'MultiPolygon') {\n return new Within(geojson, geojson.geometry);\n }\n } else if (geojson.type === 'Polygon' || geojson.type === 'MultiPolygon') {\n return new Within(geojson, geojson);\n }\n }\n return context.error(`'within' expression requires valid geojson object that contains polygon geometry type.`);\n }\n evaluate(ctx) {\n if (ctx.geometry() != null && ctx.canonicalID() != null) {\n if (ctx.geometryType() === 'Point') {\n return pointsWithinPolygons(ctx, this.geometries);\n } else if (ctx.geometryType() === 'LineString') {\n return linesWithinPolygons(ctx, this.geometries);\n }\n }\n return false;\n }\n eachChild() {\n }\n outputDefined() {\n return true;\n }\n serialize() {\n return [\n 'within',\n this.geojson\n ];\n }\n}\nvar Within$1 = Within;\n\n// \nfunction isFeatureConstant(e) {\n if (e instanceof CompoundExpression$1) {\n if (e.name === 'get' && e.args.length === 1) {\n return false;\n } else if (e.name === 'feature-state') {\n return false;\n } else if (e.name === 'has' && e.args.length === 1) {\n return false;\n } else if (e.name === 'properties' || e.name === 'geometry-type' || e.name === 'id') {\n return false;\n } else if (/^filter-/.test(e.name)) {\n return false;\n }\n }\n if (e instanceof Within$1) {\n return false;\n }\n let result = true;\n e.eachChild(arg => {\n if (result && !isFeatureConstant(arg)) {\n result = false;\n }\n });\n return result;\n}\nfunction isStateConstant(e) {\n if (e instanceof CompoundExpression$1) {\n if (e.name === 'feature-state') {\n return false;\n }\n }\n let result = true;\n e.eachChild(arg => {\n if (result && !isStateConstant(arg)) {\n result = false;\n }\n });\n return result;\n}\nfunction isGlobalPropertyConstant(e, properties) {\n if (e instanceof CompoundExpression$1 && properties.indexOf(e.name) >= 0) {\n return false;\n }\n let result = true;\n e.eachChild(arg => {\n if (result && !isGlobalPropertyConstant(arg, properties)) {\n result = false;\n }\n });\n return result;\n}\n\n// \nclass Var {\n constructor(name, boundExpression) {\n this.type = boundExpression.type;\n this.name = name;\n this.boundExpression = boundExpression;\n }\n static parse(args, context) {\n if (args.length !== 2 || typeof args[1] !== 'string')\n return context.error(`'var' expression requires exactly one string literal argument.`);\n const name = args[1];\n if (!context.scope.has(name)) {\n return context.error(`Unknown variable \"${ name }\". Make sure \"${ name }\" has been bound in an enclosing \"let\" expression before using it.`, 1);\n }\n return new Var(name, context.scope.get(name));\n }\n evaluate(ctx) {\n return this.boundExpression.evaluate(ctx);\n }\n eachChild() {\n }\n outputDefined() {\n return false;\n }\n serialize() {\n return [\n 'var',\n this.name\n ];\n }\n}\nvar Var$1 = Var;\n\n// \n/**\n * State associated parsing at a given point in an expression tree.\n * @private\n */\nclass ParsingContext {\n // The expected type of this expression. Provided only to allow Expression\n // implementations to infer argument types: Expression#parse() need not\n // check that the output type of the parsed expression matches\n // `expectedType`.\n constructor(registry, path = [], expectedType, scope = new Scope$1(), errors = []) {\n this.registry = registry;\n this.path = path;\n this.key = path.map(part => `[${ part }]`).join('');\n this.scope = scope;\n this.errors = errors;\n this.expectedType = expectedType;\n }\n /**\n * @param expr the JSON expression to parse\n * @param index the optional argument index if this expression is an argument of a parent expression that's being parsed\n * @param options\n * @param options.omitTypeAnnotations set true to omit inferred type annotations. Caller beware: with this option set, the parsed expression's type will NOT satisfy `expectedType` if it would normally be wrapped in an inferred annotation.\n * @private\n */\n parse(expr, index, expectedType, bindings, options = {}) {\n if (index) {\n return this.concat(index, expectedType, bindings)._parse(expr, options);\n }\n return this._parse(expr, options);\n }\n _parse(expr, options) {\n if (expr === null || typeof expr === 'string' || typeof expr === 'boolean' || typeof expr === 'number') {\n expr = [\n 'literal',\n expr\n ];\n }\n function annotate(parsed, type, typeAnnotation) {\n if (typeAnnotation === 'assert') {\n return new Assertion$1(type, [parsed]);\n } else if (typeAnnotation === 'coerce') {\n return new Coercion$1(type, [parsed]);\n } else {\n return parsed;\n }\n }\n if (Array.isArray(expr)) {\n if (expr.length === 0) {\n return this.error(`Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []].`);\n }\n const op = expr[0];\n if (typeof op !== 'string') {\n this.error(`Expression name must be a string, but found ${ typeof op } instead. If you wanted a literal array, use [\"literal\", [...]].`, 0);\n return null;\n }\n const Expr = this.registry[op];\n if (Expr) {\n let parsed = Expr.parse(expr, this);\n if (!parsed)\n return null;\n if (this.expectedType) {\n const expected = this.expectedType;\n const actual = parsed.type;\n // When we expect a number, string, boolean, or array but have a value, wrap it in an assertion.\n // When we expect a color or formatted string, but have a string or value, wrap it in a coercion.\n // Otherwise, we do static type-checking.\n //\n // These behaviors are overridable for:\n // * The \"coalesce\" operator, which needs to omit type annotations.\n // * String-valued properties (e.g. `text-field`), where coercion is more convenient than assertion.\n //\n if ((expected.kind === 'string' || expected.kind === 'number' || expected.kind === 'boolean' || expected.kind === 'object' || expected.kind === 'array') && actual.kind === 'value') {\n parsed = annotate(parsed, expected, options.typeAnnotation || 'assert');\n } else if ((expected.kind === 'color' || expected.kind === 'formatted' || expected.kind === 'resolvedImage') && (actual.kind === 'value' || actual.kind === 'string')) {\n parsed = annotate(parsed, expected, options.typeAnnotation || 'coerce');\n } else if (this.checkSubtype(expected, actual)) {\n return null;\n }\n }\n // If an expression's arguments are all literals, we can evaluate\n // it immediately and replace it with a literal value in the\n // parsed/compiled result. Expressions that expect an image should\n // not be resolved here so we can later get the available images.\n if (!(parsed instanceof Literal$1) && parsed.type.kind !== 'resolvedImage' && isConstant(parsed)) {\n const ec = new EvaluationContext$1();\n try {\n parsed = new Literal$1(parsed.type, parsed.evaluate(ec));\n } catch (e) {\n this.error(e.message);\n return null;\n }\n }\n return parsed;\n }\n return this.error(`Unknown expression \"${ op }\". If you wanted a literal array, use [\"literal\", [...]].`, 0);\n } else if (typeof expr === 'undefined') {\n return this.error(`'undefined' value invalid. Use null instead.`);\n } else if (typeof expr === 'object') {\n return this.error(`Bare objects invalid. Use [\"literal\", {...}] instead.`);\n } else {\n return this.error(`Expected an array, but found ${ typeof expr } instead.`);\n }\n }\n /**\n * Returns a copy of this context suitable for parsing the subexpression at\n * index `index`, optionally appending to 'let' binding map.\n *\n * Note that `errors` property, intended for collecting errors while\n * parsing, is copied by reference rather than cloned.\n * @private\n */\n concat(index, expectedType, bindings) {\n const path = typeof index === 'number' ? this.path.concat(index) : this.path;\n const scope = bindings ? this.scope.concat(bindings) : this.scope;\n return new ParsingContext(this.registry, path, expectedType || null, scope, this.errors);\n }\n /**\n * Push a parsing (or type checking) error into the `this.errors`\n * @param error The message\n * @param keys Optionally specify the source of the error at a child\n * of the current expression at `this.key`.\n * @private\n */\n error(error, ...keys) {\n const key = `${ this.key }${ keys.map(k => `[${ k }]`).join('') }`;\n this.errors.push(new ParsingError$1(key, error));\n }\n /**\n * Returns null if `t` is a subtype of `expected`; otherwise returns an\n * error message and also pushes it to `this.errors`.\n */\n checkSubtype(expected, t) {\n const error = checkSubtype(expected, t);\n if (error)\n this.error(error);\n return error;\n }\n}\nvar ParsingContext$1 = ParsingContext;\nfunction isConstant(expression) {\n if (expression instanceof Var$1) {\n return isConstant(expression.boundExpression);\n } else if (expression instanceof CompoundExpression$1 && expression.name === 'error') {\n return false;\n } else if (expression instanceof CollatorExpression) {\n // Although the results of a Collator expression with fixed arguments\n // generally shouldn't change between executions, we can't serialize them\n // as constant expressions because results change based on environment.\n return false;\n } else if (expression instanceof Within$1) {\n return false;\n }\n const isTypeAnnotation = expression instanceof Coercion$1 || expression instanceof Assertion$1;\n let childrenConstant = true;\n expression.eachChild(child => {\n // We can _almost_ assume that if `expressions` children are constant,\n // they would already have been evaluated to Literal values when they\n // were parsed. Type annotations are the exception, because they might\n // have been inferred and added after a child was parsed.\n // So we recurse into isConstant() for the children of type annotations,\n // but otherwise simply check whether they are Literals.\n if (isTypeAnnotation) {\n childrenConstant = childrenConstant && isConstant(child);\n } else {\n childrenConstant = childrenConstant && child instanceof Literal$1;\n }\n });\n if (!childrenConstant) {\n return false;\n }\n return isFeatureConstant(expression) && isGlobalPropertyConstant(expression, [\n 'zoom',\n 'heatmap-density',\n 'line-progress',\n 'sky-radial-progress',\n 'accumulated',\n 'is-supported-script',\n 'pitch',\n 'distance-from-center'\n ]);\n}\n\n// \n/**\n * Returns the index of the last stop <= input, or 0 if it doesn't exist.\n * @private\n */\nfunction findStopLessThanOrEqualTo(stops, input) {\n const lastIndex = stops.length - 1;\n let lowerIndex = 0;\n let upperIndex = lastIndex;\n let currentIndex = 0;\n let currentValue, nextValue;\n while (lowerIndex <= upperIndex) {\n currentIndex = Math.floor((lowerIndex + upperIndex) / 2);\n currentValue = stops[currentIndex];\n nextValue = stops[currentIndex + 1];\n if (currentValue <= input) {\n if (currentIndex === lastIndex || input < nextValue) {\n // Search complete\n return currentIndex;\n }\n lowerIndex = currentIndex + 1;\n } else if (currentValue > input) {\n upperIndex = currentIndex - 1;\n } else {\n throw new RuntimeError$1('Input is not a number.');\n }\n }\n return 0;\n}\n\n// \nclass Step {\n constructor(type, input, stops) {\n this.type = type;\n this.input = input;\n this.labels = [];\n this.outputs = [];\n for (const [label, expression] of stops) {\n this.labels.push(label);\n this.outputs.push(expression);\n }\n }\n static parse(args, context) {\n if (args.length - 1 < 4) {\n return context.error(`Expected at least 4 arguments, but found only ${ args.length - 1 }.`);\n }\n if ((args.length - 1) % 2 !== 0) {\n return context.error(`Expected an even number of arguments.`);\n }\n const input = context.parse(args[1], 1, NumberType);\n if (!input)\n return null;\n const stops = [];\n let outputType = null;\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n for (let i = 1; i < args.length; i += 2) {\n const label = i === 1 ? -Infinity : args[i];\n const value = args[i + 1];\n const labelKey = i;\n const valueKey = i + 1;\n if (typeof label !== 'number') {\n return context.error('Input/output pairs for \"step\" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey);\n }\n if (stops.length && stops[stops.length - 1][0] >= label) {\n return context.error('Input/output pairs for \"step\" expressions must be arranged with input values in strictly ascending order.', labelKey);\n }\n const parsed = context.parse(value, valueKey, outputType);\n if (!parsed)\n return null;\n outputType = outputType || parsed.type;\n stops.push([\n label,\n parsed\n ]);\n }\n return new Step(outputType, input, stops);\n }\n evaluate(ctx) {\n const labels = this.labels;\n const outputs = this.outputs;\n if (labels.length === 1) {\n return outputs[0].evaluate(ctx);\n }\n const value = this.input.evaluate(ctx);\n if (value <= labels[0]) {\n return outputs[0].evaluate(ctx);\n }\n const stopCount = labels.length;\n if (value >= labels[stopCount - 1]) {\n return outputs[stopCount - 1].evaluate(ctx);\n }\n const index = findStopLessThanOrEqualTo(labels, value);\n return outputs[index].evaluate(ctx);\n }\n eachChild(fn) {\n fn(this.input);\n for (const expression of this.outputs) {\n fn(expression);\n }\n }\n outputDefined() {\n return this.outputs.every(out => out.outputDefined());\n }\n serialize() {\n const serialized = [\n 'step',\n this.input.serialize()\n ];\n for (let i = 0; i < this.labels.length; i++) {\n if (i > 0) {\n serialized.push(this.labels[i]);\n }\n serialized.push(this.outputs[i].serialize());\n }\n return serialized;\n }\n}\nvar Step$1 = Step;\n\n/*\n * Copyright (C) 2008 Apple Inc. All Rights Reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Ported from Webkit\n * http://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/UnitBezier.h\n */\n\nvar unitbezier = UnitBezier;\nfunction UnitBezier(p1x, p1y, p2x, p2y) {\n // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1).\n this.cx = 3 * p1x;\n this.bx = 3 * (p2x - p1x) - this.cx;\n this.ax = 1 - this.cx - this.bx;\n this.cy = 3 * p1y;\n this.by = 3 * (p2y - p1y) - this.cy;\n this.ay = 1 - this.cy - this.by;\n this.p1x = p1x;\n this.p1y = p2y;\n this.p2x = p2x;\n this.p2y = p2y;\n}\nUnitBezier.prototype.sampleCurveX = function (t) {\n // `ax t^3 + bx t^2 + cx t' expanded using Horner's rule.\n return ((this.ax * t + this.bx) * t + this.cx) * t;\n};\nUnitBezier.prototype.sampleCurveY = function (t) {\n return ((this.ay * t + this.by) * t + this.cy) * t;\n};\nUnitBezier.prototype.sampleCurveDerivativeX = function (t) {\n return (3 * this.ax * t + 2 * this.bx) * t + this.cx;\n};\nUnitBezier.prototype.solveCurveX = function (x, epsilon) {\n if (typeof epsilon === 'undefined')\n epsilon = 0.000001;\n var t0, t1, t2, x2, i;\n // First try a few iterations of Newton's method -- normally very fast.\n for (t2 = x, i = 0; i < 8; i++) {\n x2 = this.sampleCurveX(t2) - x;\n if (Math.abs(x2) < epsilon)\n return t2;\n var d2 = this.sampleCurveDerivativeX(t2);\n if (Math.abs(d2) < 0.000001)\n break;\n t2 = t2 - x2 / d2;\n }\n // Fall back to the bisection method for reliability.\n t0 = 0;\n t1 = 1;\n t2 = x;\n if (t2 < t0)\n return t0;\n if (t2 > t1)\n return t1;\n while (t0 < t1) {\n x2 = this.sampleCurveX(t2);\n if (Math.abs(x2 - x) < epsilon)\n return t2;\n if (x > x2) {\n t0 = t2;\n } else {\n t1 = t2;\n }\n t2 = (t1 - t0) * 0.5 + t0;\n }\n // Failure.\n return t2;\n};\nUnitBezier.prototype.solve = function (x, epsilon) {\n return this.sampleCurveY(this.solveCurveX(x, epsilon));\n};\n\nvar UnitBezier$1 = /*@__PURE__*/getDefaultExportFromCjs(unitbezier);\n\n// \nfunction number(a, b, t) {\n return a * (1 - t) + b * t;\n}\nfunction color(from, to, t) {\n return new Color$1(number(from.r, to.r, t), number(from.g, to.g, t), number(from.b, to.b, t), number(from.a, to.a, t));\n}\nfunction array(from, to, t) {\n return from.map((d, i) => {\n return number(d, to[i], t);\n });\n}\n\nvar interpolate = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tnumber: number,\n\tcolor: color,\n\tarray: array\n});\n\n// \n// Constants\nconst Xn = 0.95047,\n // D65 standard referent\n Yn = 1, Zn = 1.08883, t0 = 4 / 29, t1 = 6 / 29, t2 = 3 * t1 * t1, t3 = t1 * t1 * t1, deg2rad$1 = Math.PI / 180, rad2deg = 180 / Math.PI;\n// Utilities\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\nfunction xyz2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\nfunction rgb2xyz(x) {\n x /= 255;\n return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n// LAB\nfunction rgbToLab(rgbColor) {\n const b = rgb2xyz(rgbColor.r), a = rgb2xyz(rgbColor.g), l = rgb2xyz(rgbColor.b), x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn), y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.072175 * l) / Yn), z = xyz2lab((0.0193339 * b + 0.119192 * a + 0.9503041 * l) / Zn);\n return {\n l: 116 * y - 16,\n a: 500 * (x - y),\n b: 200 * (y - z),\n alpha: rgbColor.a\n };\n}\nfunction labToRgb(labColor) {\n let y = (labColor.l + 16) / 116, x = isNaN(labColor.a) ? y : y + labColor.a / 500, z = isNaN(labColor.b) ? y : y - labColor.b / 200;\n y = Yn * lab2xyz(y);\n x = Xn * lab2xyz(x);\n z = Zn * lab2xyz(z);\n return new Color$1(xyz2rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n xyz2rgb(-0.969266 * x + 1.8760108 * y + 0.041556 * z), xyz2rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z), labColor.alpha);\n}\nfunction interpolateLab(from, to, t) {\n return {\n l: number(from.l, to.l, t),\n a: number(from.a, to.a, t),\n b: number(from.b, to.b, t),\n alpha: number(from.alpha, to.alpha, t)\n };\n}\n// HCL\nfunction rgbToHcl(rgbColor) {\n const {l, a, b} = rgbToLab(rgbColor);\n const h = Math.atan2(b, a) * rad2deg;\n return {\n h: h < 0 ? h + 360 : h,\n c: Math.sqrt(a * a + b * b),\n l,\n alpha: rgbColor.a\n };\n}\nfunction hclToRgb(hclColor) {\n const h = hclColor.h * deg2rad$1, c = hclColor.c, l = hclColor.l;\n return labToRgb({\n l,\n a: Math.cos(h) * c,\n b: Math.sin(h) * c,\n alpha: hclColor.alpha\n });\n}\nfunction interpolateHue(a, b, t) {\n const d = b - a;\n return a + t * (d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d);\n}\nfunction interpolateHcl(from, to, t) {\n return {\n h: interpolateHue(from.h, to.h, t),\n c: number(from.c, to.c, t),\n l: number(from.l, to.l, t),\n alpha: number(from.alpha, to.alpha, t)\n };\n}\nconst lab = {\n forward: rgbToLab,\n reverse: labToRgb,\n interpolate: interpolateLab\n};\nconst hcl = {\n forward: rgbToHcl,\n reverse: hclToRgb,\n interpolate: interpolateHcl\n};\n\n// \nclass Interpolate {\n constructor(type, operator, interpolation, input, stops) {\n this.type = type;\n this.operator = operator;\n this.interpolation = interpolation;\n this.input = input;\n this.labels = [];\n this.outputs = [];\n for (const [label, expression] of stops) {\n this.labels.push(label);\n this.outputs.push(expression);\n }\n }\n static interpolationFactor(interpolation, input, lower, upper) {\n let t = 0;\n if (interpolation.name === 'exponential') {\n t = exponentialInterpolation(input, interpolation.base, lower, upper);\n } else if (interpolation.name === 'linear') {\n t = exponentialInterpolation(input, 1, lower, upper);\n } else if (interpolation.name === 'cubic-bezier') {\n const c = interpolation.controlPoints;\n const ub = new UnitBezier$1(c[0], c[1], c[2], c[3]);\n t = ub.solve(exponentialInterpolation(input, 1, lower, upper));\n }\n return t;\n }\n static parse(args, context) {\n let [operator, interpolation, input, ...rest] = args;\n if (!Array.isArray(interpolation) || interpolation.length === 0) {\n return context.error(`Expected an interpolation type expression.`, 1);\n }\n if (interpolation[0] === 'linear') {\n interpolation = { name: 'linear' };\n } else if (interpolation[0] === 'exponential') {\n const base = interpolation[1];\n if (typeof base !== 'number')\n return context.error(`Exponential interpolation requires a numeric base.`, 1, 1);\n interpolation = {\n name: 'exponential',\n base\n };\n } else if (interpolation[0] === 'cubic-bezier') {\n const controlPoints = interpolation.slice(1);\n if (controlPoints.length !== 4 || controlPoints.some(t => typeof t !== 'number' || t < 0 || t > 1)) {\n return context.error('Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.', 1);\n }\n interpolation = {\n name: 'cubic-bezier',\n controlPoints: controlPoints\n };\n } else {\n return context.error(`Unknown interpolation type ${ String(interpolation[0]) }`, 1, 0);\n }\n if (args.length - 1 < 4) {\n return context.error(`Expected at least 4 arguments, but found only ${ args.length - 1 }.`);\n }\n if ((args.length - 1) % 2 !== 0) {\n return context.error(`Expected an even number of arguments.`);\n }\n input = context.parse(input, 2, NumberType);\n if (!input)\n return null;\n const stops = [];\n let outputType = null;\n if (operator === 'interpolate-hcl' || operator === 'interpolate-lab') {\n outputType = ColorType;\n } else if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n for (let i = 0; i < rest.length; i += 2) {\n const label = rest[i];\n const value = rest[i + 1];\n const labelKey = i + 3;\n const valueKey = i + 4;\n if (typeof label !== 'number') {\n return context.error('Input/output pairs for \"interpolate\" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey);\n }\n if (stops.length && stops[stops.length - 1][0] >= label) {\n return context.error('Input/output pairs for \"interpolate\" expressions must be arranged with input values in strictly ascending order.', labelKey);\n }\n const parsed = context.parse(value, valueKey, outputType);\n if (!parsed)\n return null;\n outputType = outputType || parsed.type;\n stops.push([\n label,\n parsed\n ]);\n }\n if (outputType.kind !== 'number' && outputType.kind !== 'color' && !(outputType.kind === 'array' && outputType.itemType.kind === 'number' && typeof outputType.N === 'number')) {\n return context.error(`Type ${ toString$1(outputType) } is not interpolatable.`);\n }\n return new Interpolate(outputType, operator, interpolation, input, stops);\n }\n evaluate(ctx) {\n const labels = this.labels;\n const outputs = this.outputs;\n if (labels.length === 1) {\n return outputs[0].evaluate(ctx);\n }\n const value = this.input.evaluate(ctx);\n if (value <= labels[0]) {\n return outputs[0].evaluate(ctx);\n }\n const stopCount = labels.length;\n if (value >= labels[stopCount - 1]) {\n return outputs[stopCount - 1].evaluate(ctx);\n }\n const index = findStopLessThanOrEqualTo(labels, value);\n const lower = labels[index];\n const upper = labels[index + 1];\n const t = Interpolate.interpolationFactor(this.interpolation, value, lower, upper);\n const outputLower = outputs[index].evaluate(ctx);\n const outputUpper = outputs[index + 1].evaluate(ctx);\n if (this.operator === 'interpolate') {\n return interpolate[this.type.kind.toLowerCase()](outputLower, outputUpper, t); // eslint-disable-line import/namespace\n } else if (this.operator === 'interpolate-hcl') {\n return hcl.reverse(hcl.interpolate(hcl.forward(outputLower), hcl.forward(outputUpper), t));\n } else {\n return lab.reverse(lab.interpolate(lab.forward(outputLower), lab.forward(outputUpper), t));\n }\n }\n eachChild(fn) {\n fn(this.input);\n for (const expression of this.outputs) {\n fn(expression);\n }\n }\n outputDefined() {\n return this.outputs.every(out => out.outputDefined());\n }\n serialize() {\n let interpolation;\n if (this.interpolation.name === 'linear') {\n interpolation = ['linear'];\n } else if (this.interpolation.name === 'exponential') {\n if (this.interpolation.base === 1) {\n interpolation = ['linear'];\n } else {\n interpolation = [\n 'exponential',\n this.interpolation.base\n ];\n }\n } else {\n interpolation = ['cubic-bezier'].concat(this.interpolation.controlPoints);\n }\n const serialized = [\n this.operator,\n interpolation,\n this.input.serialize()\n ];\n for (let i = 0; i < this.labels.length; i++) {\n serialized.push(this.labels[i], this.outputs[i].serialize());\n }\n return serialized;\n }\n}\n/**\n * Returns a ratio that can be used to interpolate between exponential function\n * stops.\n * How it works: Two consecutive stop values define a (scaled and shifted) exponential function `f(x) = a * base^x + b`, where `base` is the user-specified base,\n * and `a` and `b` are constants affording sufficient degrees of freedom to fit\n * the function to the given stops.\n *\n * Here's a bit of algebra that lets us compute `f(x)` directly from the stop\n * values without explicitly solving for `a` and `b`:\n *\n * First stop value: `f(x0) = y0 = a * base^x0 + b`\n * Second stop value: `f(x1) = y1 = a * base^x1 + b`\n * => `y1 - y0 = a(base^x1 - base^x0)`\n * => `a = (y1 - y0)/(base^x1 - base^x0)`\n *\n * Desired value: `f(x) = y = a * base^x + b`\n * => `f(x) = y0 + a * (base^x - base^x0)`\n *\n * From the above, we can replace the `a` in `a * (base^x - base^x0)` and do a\n * little algebra:\n * ```\n * a * (base^x - base^x0) = (y1 - y0)/(base^x1 - base^x0) * (base^x - base^x0)\n * = (y1 - y0) * (base^x - base^x0) / (base^x1 - base^x0)\n * ```\n *\n * If we let `(base^x - base^x0) / (base^x1 base^x0)`, then we have\n * `f(x) = y0 + (y1 - y0) * ratio`. In other words, `ratio` may be treated as\n * an interpolation factor between the two stops' output values.\n *\n * (Note: a slightly different form for `ratio`,\n * `(base^(x-x0) - 1) / (base^(x1-x0) - 1) `, is equivalent, but requires fewer\n * expensive `Math.pow()` operations.)\n *\n * @private\n*/\nfunction exponentialInterpolation(input, base, lowerValue, upperValue) {\n const difference = upperValue - lowerValue;\n const progress = input - lowerValue;\n if (difference === 0) {\n return 0;\n } else if (base === 1) {\n return progress / difference;\n } else {\n return (Math.pow(base, progress) - 1) / (Math.pow(base, difference) - 1);\n }\n}\nvar Interpolate$1 = Interpolate;\n\nclass Coalesce {\n constructor(type, args) {\n this.type = type;\n this.args = args;\n }\n static parse(args, context) {\n if (args.length < 2) {\n return context.error('Expectected at least one argument.');\n }\n let outputType = null;\n const expectedType = context.expectedType;\n if (expectedType && expectedType.kind !== 'value') {\n outputType = expectedType;\n }\n const parsedArgs = [];\n for (const arg of args.slice(1)) {\n const parsed = context.parse(arg, 1 + parsedArgs.length, outputType, undefined, { typeAnnotation: 'omit' });\n if (!parsed)\n return null;\n outputType = outputType || parsed.type;\n parsedArgs.push(parsed);\n }\n // Above, we parse arguments without inferred type annotation so that\n // they don't produce a runtime error for `null` input, which would\n // preempt the desired null-coalescing behavior.\n // Thus, if any of our arguments would have needed an annotation, we\n // need to wrap the enclosing coalesce expression with it instead.\n const needsAnnotation = expectedType && parsedArgs.some(arg => checkSubtype(expectedType, arg.type));\n return needsAnnotation ? new Coalesce(ValueType, parsedArgs) : new Coalesce(outputType, parsedArgs);\n }\n evaluate(ctx) {\n let result = null;\n let argCount = 0;\n let firstImage;\n for (const arg of this.args) {\n argCount++;\n result = arg.evaluate(ctx);\n // we need to keep track of the first requested image in a coalesce statement\n // if coalesce can't find a valid image, we return the first image so styleimagemissing can fire\n if (result && result instanceof ResolvedImage && !result.available) {\n // set to first image\n if (!firstImage) {\n firstImage = result;\n }\n result = null;\n // if we reach the end, return the first image\n if (argCount === this.args.length) {\n return firstImage;\n }\n }\n if (result !== null)\n break;\n }\n return result;\n }\n eachChild(fn) {\n this.args.forEach(fn);\n }\n outputDefined() {\n return this.args.every(arg => arg.outputDefined());\n }\n serialize() {\n const serialized = ['coalesce'];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n}\nvar Coalesce$1 = Coalesce;\n\n// \nclass Let {\n constructor(bindings, result) {\n this.type = result.type;\n this.bindings = [].concat(bindings);\n this.result = result;\n }\n evaluate(ctx) {\n return this.result.evaluate(ctx);\n }\n eachChild(fn) {\n for (const binding of this.bindings) {\n fn(binding[1]);\n }\n fn(this.result);\n }\n static parse(args, context) {\n if (args.length < 4)\n return context.error(`Expected at least 3 arguments, but found ${ args.length - 1 } instead.`);\n const bindings = [];\n for (let i = 1; i < args.length - 1; i += 2) {\n const name = args[i];\n if (typeof name !== 'string') {\n return context.error(`Expected string, but found ${ typeof name } instead.`, i);\n }\n if (/[^a-zA-Z0-9_]/.test(name)) {\n return context.error(`Variable names must contain only alphanumeric characters or '_'.`, i);\n }\n const value = context.parse(args[i + 1], i + 1);\n if (!value)\n return null;\n bindings.push([\n name,\n value\n ]);\n }\n const result = context.parse(args[args.length - 1], args.length - 1, context.expectedType, bindings);\n if (!result)\n return null;\n return new Let(bindings, result);\n }\n outputDefined() {\n return this.result.outputDefined();\n }\n serialize() {\n const serialized = ['let'];\n for (const [name, expr] of this.bindings) {\n serialized.push(name, expr.serialize());\n }\n serialized.push(this.result.serialize());\n return serialized;\n }\n}\nvar Let$1 = Let;\n\n// \nclass At {\n constructor(type, index, input) {\n this.type = type;\n this.index = index;\n this.input = input;\n }\n static parse(args, context) {\n if (args.length !== 3)\n return context.error(`Expected 2 arguments, but found ${ args.length - 1 } instead.`);\n const index = context.parse(args[1], 1, NumberType);\n const input = context.parse(args[2], 2, array$1(context.expectedType || ValueType));\n if (!index || !input)\n return null;\n const t = input.type;\n return new At(t.itemType, index, input);\n }\n evaluate(ctx) {\n const index = this.index.evaluate(ctx);\n const array = this.input.evaluate(ctx);\n if (index < 0) {\n throw new RuntimeError$1(`Array index out of bounds: ${ index } < 0.`);\n }\n if (index >= array.length) {\n throw new RuntimeError$1(`Array index out of bounds: ${ index } > ${ array.length - 1 }.`);\n }\n if (index !== Math.floor(index)) {\n throw new RuntimeError$1(`Array index must be an integer, but found ${ index } instead.`);\n }\n return array[index];\n }\n eachChild(fn) {\n fn(this.index);\n fn(this.input);\n }\n outputDefined() {\n return false;\n }\n serialize() {\n return [\n 'at',\n this.index.serialize(),\n this.input.serialize()\n ];\n }\n}\nvar At$1 = At;\n\n// \nclass In {\n constructor(needle, haystack) {\n this.type = BooleanType;\n this.needle = needle;\n this.haystack = haystack;\n }\n static parse(args, context) {\n if (args.length !== 3) {\n return context.error(`Expected 2 arguments, but found ${ args.length - 1 } instead.`);\n }\n const needle = context.parse(args[1], 1, ValueType);\n const haystack = context.parse(args[2], 2, ValueType);\n if (!needle || !haystack)\n return null;\n if (!isValidType(needle.type, [\n BooleanType,\n StringType,\n NumberType,\n NullType,\n ValueType\n ])) {\n return context.error(`Expected first argument to be of type boolean, string, number or null, but found ${ toString$1(needle.type) } instead`);\n }\n return new In(needle, haystack);\n }\n evaluate(ctx) {\n const needle = this.needle.evaluate(ctx);\n const haystack = this.haystack.evaluate(ctx);\n if (haystack == null)\n return false;\n if (!isValidNativeType(needle, [\n 'boolean',\n 'string',\n 'number',\n 'null'\n ])) {\n throw new RuntimeError$1(`Expected first argument to be of type boolean, string, number or null, but found ${ toString$1(typeOf(needle)) } instead.`);\n }\n if (!isValidNativeType(haystack, [\n 'string',\n 'array'\n ])) {\n throw new RuntimeError$1(`Expected second argument to be of type array or string, but found ${ toString$1(typeOf(haystack)) } instead.`);\n }\n return haystack.indexOf(needle) >= 0;\n }\n eachChild(fn) {\n fn(this.needle);\n fn(this.haystack);\n }\n outputDefined() {\n return true;\n }\n serialize() {\n return [\n 'in',\n this.needle.serialize(),\n this.haystack.serialize()\n ];\n }\n}\nvar In$1 = In;\n\n// \nclass IndexOf {\n constructor(needle, haystack, fromIndex) {\n this.type = NumberType;\n this.needle = needle;\n this.haystack = haystack;\n this.fromIndex = fromIndex;\n }\n static parse(args, context) {\n if (args.length <= 2 || args.length >= 5) {\n return context.error(`Expected 3 or 4 arguments, but found ${ args.length - 1 } instead.`);\n }\n const needle = context.parse(args[1], 1, ValueType);\n const haystack = context.parse(args[2], 2, ValueType);\n if (!needle || !haystack)\n return null;\n if (!isValidType(needle.type, [\n BooleanType,\n StringType,\n NumberType,\n NullType,\n ValueType\n ])) {\n return context.error(`Expected first argument to be of type boolean, string, number or null, but found ${ toString$1(needle.type) } instead`);\n }\n if (args.length === 4) {\n const fromIndex = context.parse(args[3], 3, NumberType);\n if (!fromIndex)\n return null;\n return new IndexOf(needle, haystack, fromIndex);\n } else {\n return new IndexOf(needle, haystack);\n }\n }\n evaluate(ctx) {\n const needle = this.needle.evaluate(ctx);\n const haystack = this.haystack.evaluate(ctx);\n if (!isValidNativeType(needle, [\n 'boolean',\n 'string',\n 'number',\n 'null'\n ])) {\n throw new RuntimeError$1(`Expected first argument to be of type boolean, string, number or null, but found ${ toString$1(typeOf(needle)) } instead.`);\n }\n if (!isValidNativeType(haystack, [\n 'string',\n 'array'\n ])) {\n throw new RuntimeError$1(`Expected second argument to be of type array or string, but found ${ toString$1(typeOf(haystack)) } instead.`);\n }\n if (this.fromIndex) {\n const fromIndex = this.fromIndex.evaluate(ctx);\n return haystack.indexOf(needle, fromIndex);\n }\n return haystack.indexOf(needle);\n }\n eachChild(fn) {\n fn(this.needle);\n fn(this.haystack);\n if (this.fromIndex) {\n fn(this.fromIndex);\n }\n }\n outputDefined() {\n return false;\n }\n serialize() {\n if (this.fromIndex != null && this.fromIndex !== undefined) {\n const fromIndex = this.fromIndex.serialize();\n return [\n 'index-of',\n this.needle.serialize(),\n this.haystack.serialize(),\n fromIndex\n ];\n }\n return [\n 'index-of',\n this.needle.serialize(),\n this.haystack.serialize()\n ];\n }\n}\nvar IndexOf$1 = IndexOf;\n\n// Map input label values to output expression index\nclass Match {\n constructor(inputType, outputType, input, cases, outputs, otherwise) {\n this.inputType = inputType;\n this.type = outputType;\n this.input = input;\n this.cases = cases;\n this.outputs = outputs;\n this.otherwise = otherwise;\n }\n static parse(args, context) {\n if (args.length < 5)\n return context.error(`Expected at least 4 arguments, but found only ${ args.length - 1 }.`);\n if (args.length % 2 !== 1)\n return context.error(`Expected an even number of arguments.`);\n let inputType;\n let outputType;\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n const cases = {};\n const outputs = [];\n for (let i = 2; i < args.length - 1; i += 2) {\n let labels = args[i];\n const value = args[i + 1];\n if (!Array.isArray(labels)) {\n labels = [labels];\n }\n const labelContext = context.concat(i);\n if (labels.length === 0) {\n return labelContext.error('Expected at least one branch label.');\n }\n for (const label of labels) {\n if (typeof label !== 'number' && typeof label !== 'string') {\n return labelContext.error(`Branch labels must be numbers or strings.`);\n } else if (typeof label === 'number' && Math.abs(label) > Number.MAX_SAFE_INTEGER) {\n return labelContext.error(`Branch labels must be integers no larger than ${ Number.MAX_SAFE_INTEGER }.`);\n } else if (typeof label === 'number' && Math.floor(label) !== label) {\n return labelContext.error(`Numeric branch labels must be integer values.`);\n } else if (!inputType) {\n inputType = typeOf(label);\n } else if (labelContext.checkSubtype(inputType, typeOf(label))) {\n return null;\n }\n if (typeof cases[String(label)] !== 'undefined') {\n return labelContext.error('Branch labels must be unique.');\n }\n cases[String(label)] = outputs.length;\n }\n const result = context.parse(value, i, outputType);\n if (!result)\n return null;\n outputType = outputType || result.type;\n outputs.push(result);\n }\n const input = context.parse(args[1], 1, ValueType);\n if (!input)\n return null;\n const otherwise = context.parse(args[args.length - 1], args.length - 1, outputType);\n if (!otherwise)\n return null;\n if (input.type.kind !== 'value' && context.concat(1).checkSubtype(inputType, input.type)) {\n return null;\n }\n return new Match(inputType, outputType, input, cases, outputs, otherwise);\n }\n evaluate(ctx) {\n const input = this.input.evaluate(ctx);\n const output = typeOf(input) === this.inputType && this.outputs[this.cases[input]] || this.otherwise;\n return output.evaluate(ctx);\n }\n eachChild(fn) {\n fn(this.input);\n this.outputs.forEach(fn);\n fn(this.otherwise);\n }\n outputDefined() {\n return this.outputs.every(out => out.outputDefined()) && this.otherwise.outputDefined();\n }\n serialize() {\n const serialized = [\n 'match',\n this.input.serialize()\n ];\n // Sort so serialization has an arbitrary defined order, even though\n // branch order doesn't affect evaluation\n const sortedLabels = Object.keys(this.cases).sort();\n // Group branches by unique match expression to support condensed\n // serializations of the form [case1, case2, ...] -> matchExpression\n const groupedByOutput = [];\n const outputLookup = {};\n // lookup index into groupedByOutput for a given output expression\n for (const label of sortedLabels) {\n const outputIndex = outputLookup[this.cases[label]];\n if (outputIndex === undefined) {\n // First time seeing this output, add it to the end of the grouped list\n outputLookup[this.cases[label]] = groupedByOutput.length;\n groupedByOutput.push([\n this.cases[label],\n [label]\n ]);\n } else {\n // We've seen this expression before, add the label to that output's group\n groupedByOutput[outputIndex][1].push(label);\n }\n }\n const coerceLabel = label => this.inputType.kind === 'number' ? Number(label) : label;\n for (const [outputIndex, labels] of groupedByOutput) {\n if (labels.length === 1) {\n // Only a single label matches this output expression\n serialized.push(coerceLabel(labels[0]));\n } else {\n // Array of literal labels pointing to this output expression\n serialized.push(labels.map(coerceLabel));\n }\n serialized.push(this.outputs[outputIndex].serialize());\n }\n serialized.push(this.otherwise.serialize());\n return serialized;\n }\n}\nvar Match$1 = Match;\n\nclass Case {\n constructor(type, branches, otherwise) {\n this.type = type;\n this.branches = branches;\n this.otherwise = otherwise;\n }\n static parse(args, context) {\n if (args.length < 4)\n return context.error(`Expected at least 3 arguments, but found only ${ args.length - 1 }.`);\n if (args.length % 2 !== 0)\n return context.error(`Expected an odd number of arguments.`);\n let outputType;\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n const branches = [];\n for (let i = 1; i < args.length - 1; i += 2) {\n const test = context.parse(args[i], i, BooleanType);\n if (!test)\n return null;\n const result = context.parse(args[i + 1], i + 1, outputType);\n if (!result)\n return null;\n branches.push([\n test,\n result\n ]);\n outputType = outputType || result.type;\n }\n const otherwise = context.parse(args[args.length - 1], args.length - 1, outputType);\n if (!otherwise)\n return null;\n return new Case(outputType, branches, otherwise);\n }\n evaluate(ctx) {\n for (const [test, expression] of this.branches) {\n if (test.evaluate(ctx)) {\n return expression.evaluate(ctx);\n }\n }\n return this.otherwise.evaluate(ctx);\n }\n eachChild(fn) {\n for (const [test, expression] of this.branches) {\n fn(test);\n fn(expression);\n }\n fn(this.otherwise);\n }\n outputDefined() {\n return this.branches.every(([_, out]) => out.outputDefined()) && this.otherwise.outputDefined();\n }\n serialize() {\n const serialized = ['case'];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n}\nvar Case$1 = Case;\n\n// \nclass Slice {\n constructor(type, input, beginIndex, endIndex) {\n this.type = type;\n this.input = input;\n this.beginIndex = beginIndex;\n this.endIndex = endIndex;\n }\n static parse(args, context) {\n if (args.length <= 2 || args.length >= 5) {\n return context.error(`Expected 3 or 4 arguments, but found ${ args.length - 1 } instead.`);\n }\n const input = context.parse(args[1], 1, ValueType);\n const beginIndex = context.parse(args[2], 2, NumberType);\n if (!input || !beginIndex)\n return null;\n if (!isValidType(input.type, [\n array$1(ValueType),\n StringType,\n ValueType\n ])) {\n return context.error(`Expected first argument to be of type array or string, but found ${ toString$1(input.type) } instead`);\n }\n if (args.length === 4) {\n const endIndex = context.parse(args[3], 3, NumberType);\n if (!endIndex)\n return null;\n return new Slice(input.type, input, beginIndex, endIndex);\n } else {\n return new Slice(input.type, input, beginIndex);\n }\n }\n evaluate(ctx) {\n const input = this.input.evaluate(ctx);\n const beginIndex = this.beginIndex.evaluate(ctx);\n if (!isValidNativeType(input, [\n 'string',\n 'array'\n ])) {\n throw new RuntimeError$1(`Expected first argument to be of type array or string, but found ${ toString$1(typeOf(input)) } instead.`);\n }\n if (this.endIndex) {\n const endIndex = this.endIndex.evaluate(ctx);\n return input.slice(beginIndex, endIndex);\n }\n return input.slice(beginIndex);\n }\n eachChild(fn) {\n fn(this.input);\n fn(this.beginIndex);\n if (this.endIndex) {\n fn(this.endIndex);\n }\n }\n outputDefined() {\n return false;\n }\n serialize() {\n if (this.endIndex != null && this.endIndex !== undefined) {\n const endIndex = this.endIndex.serialize();\n return [\n 'slice',\n this.input.serialize(),\n this.beginIndex.serialize(),\n endIndex\n ];\n }\n return [\n 'slice',\n this.input.serialize(),\n this.beginIndex.serialize()\n ];\n }\n}\nvar Slice$1 = Slice;\n\n// \nfunction isComparableType(op, type) {\n if (op === '==' || op === '!=') {\n // equality operator\n return type.kind === 'boolean' || type.kind === 'string' || type.kind === 'number' || type.kind === 'null' || type.kind === 'value';\n } else {\n // ordering operator\n return type.kind === 'string' || type.kind === 'number' || type.kind === 'value';\n }\n}\nfunction eq(ctx, a, b) {\n return a === b;\n}\nfunction neq(ctx, a, b) {\n return a !== b;\n}\nfunction lt(ctx, a, b) {\n return a < b;\n}\nfunction gt(ctx, a, b) {\n return a > b;\n}\nfunction lteq(ctx, a, b) {\n return a <= b;\n}\nfunction gteq(ctx, a, b) {\n return a >= b;\n}\nfunction eqCollate(ctx, a, b, c) {\n return c.compare(a, b) === 0;\n}\nfunction neqCollate(ctx, a, b, c) {\n return !eqCollate(ctx, a, b, c);\n}\nfunction ltCollate(ctx, a, b, c) {\n return c.compare(a, b) < 0;\n}\nfunction gtCollate(ctx, a, b, c) {\n return c.compare(a, b) > 0;\n}\nfunction lteqCollate(ctx, a, b, c) {\n return c.compare(a, b) <= 0;\n}\nfunction gteqCollate(ctx, a, b, c) {\n return c.compare(a, b) >= 0;\n}\n/**\n * Special form for comparison operators, implementing the signatures:\n * - (T, T, ?Collator) => boolean\n * - (T, value, ?Collator) => boolean\n * - (value, T, ?Collator) => boolean\n *\n * For inequalities, T must be either value, string, or number. For ==/!=, it\n * can also be boolean or null.\n *\n * Equality semantics are equivalent to Javascript's strict equality (===/!==)\n * -- i.e., when the arguments' types don't match, == evaluates to false, != to\n * true.\n *\n * When types don't match in an ordering comparison, a runtime error is thrown.\n *\n * @private\n */\nfunction makeComparison(op, compareBasic, compareWithCollator) {\n const isOrderComparison = op !== '==' && op !== '!=';\n return class Comparison {\n constructor(lhs, rhs, collator) {\n this.type = BooleanType;\n this.lhs = lhs;\n this.rhs = rhs;\n this.collator = collator;\n this.hasUntypedArgument = lhs.type.kind === 'value' || rhs.type.kind === 'value';\n }\n static parse(args, context) {\n if (args.length !== 3 && args.length !== 4)\n return context.error(`Expected two or three arguments.`);\n const op = args[0];\n let lhs = context.parse(args[1], 1, ValueType);\n if (!lhs)\n return null;\n if (!isComparableType(op, lhs.type)) {\n return context.concat(1).error(`\"${ op }\" comparisons are not supported for type '${ toString$1(lhs.type) }'.`);\n }\n let rhs = context.parse(args[2], 2, ValueType);\n if (!rhs)\n return null;\n if (!isComparableType(op, rhs.type)) {\n return context.concat(2).error(`\"${ op }\" comparisons are not supported for type '${ toString$1(rhs.type) }'.`);\n }\n if (lhs.type.kind !== rhs.type.kind && lhs.type.kind !== 'value' && rhs.type.kind !== 'value') {\n return context.error(`Cannot compare types '${ toString$1(lhs.type) }' and '${ toString$1(rhs.type) }'.`);\n }\n if (isOrderComparison) {\n // typing rules specific to less/greater than operators\n if (lhs.type.kind === 'value' && rhs.type.kind !== 'value') {\n // (value, T)\n lhs = new Assertion$1(rhs.type, [lhs]);\n } else if (lhs.type.kind !== 'value' && rhs.type.kind === 'value') {\n // (T, value)\n rhs = new Assertion$1(lhs.type, [rhs]);\n }\n }\n let collator = null;\n if (args.length === 4) {\n if (lhs.type.kind !== 'string' && rhs.type.kind !== 'string' && lhs.type.kind !== 'value' && rhs.type.kind !== 'value') {\n return context.error(`Cannot use collator to compare non-string types.`);\n }\n collator = context.parse(args[3], 3, CollatorType);\n if (!collator)\n return null;\n }\n return new Comparison(lhs, rhs, collator);\n }\n evaluate(ctx) {\n const lhs = this.lhs.evaluate(ctx);\n const rhs = this.rhs.evaluate(ctx);\n if (isOrderComparison && this.hasUntypedArgument) {\n const lt = typeOf(lhs);\n const rt = typeOf(rhs);\n // check that type is string or number, and equal\n if (lt.kind !== rt.kind || !(lt.kind === 'string' || lt.kind === 'number')) {\n throw new RuntimeError$1(`Expected arguments for \"${ op }\" to be (string, string) or (number, number), but found (${ lt.kind }, ${ rt.kind }) instead.`);\n }\n }\n if (this.collator && !isOrderComparison && this.hasUntypedArgument) {\n const lt = typeOf(lhs);\n const rt = typeOf(rhs);\n if (lt.kind !== 'string' || rt.kind !== 'string') {\n return compareBasic(ctx, lhs, rhs);\n }\n }\n return this.collator ? compareWithCollator(ctx, lhs, rhs, this.collator.evaluate(ctx)) : compareBasic(ctx, lhs, rhs);\n }\n eachChild(fn) {\n fn(this.lhs);\n fn(this.rhs);\n if (this.collator) {\n fn(this.collator);\n }\n }\n outputDefined() {\n return true;\n }\n serialize() {\n const serialized = [op];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n };\n}\nconst Equals = makeComparison('==', eq, eqCollate);\nconst NotEquals = makeComparison('!=', neq, neqCollate);\nconst LessThan = makeComparison('<', lt, ltCollate);\nconst GreaterThan = makeComparison('>', gt, gtCollate);\nconst LessThanOrEqual = makeComparison('<=', lteq, lteqCollate);\nconst GreaterThanOrEqual = makeComparison('>=', gteq, gteqCollate);\n\n// \nclass NumberFormat {\n // BCP 47 language tag\n // ISO 4217 currency code, required if style=currency\n // Simple units sanctioned for use in ECMAScript, required if style=unit. https://tc39.es/proposal-unified-intl-numberformat/section6/locales-currencies-tz_proposed_out.html#sec-issanctionedsimpleunitidentifier\n // Default 0\n // Default 3\n constructor(number, locale, currency, unit, minFractionDigits, maxFractionDigits) {\n this.type = StringType;\n this.number = number;\n this.locale = locale;\n this.currency = currency;\n this.unit = unit;\n this.minFractionDigits = minFractionDigits;\n this.maxFractionDigits = maxFractionDigits;\n }\n static parse(args, context) {\n if (args.length !== 3)\n return context.error(`Expected two arguments.`);\n const number = context.parse(args[1], 1, NumberType);\n if (!number)\n return null;\n const options = args[2];\n if (typeof options !== 'object' || Array.isArray(options))\n return context.error(`NumberFormat options argument must be an object.`);\n let locale = null;\n if (options['locale']) {\n locale = context.parse(options['locale'], 1, StringType);\n if (!locale)\n return null;\n }\n let currency = null;\n if (options['currency']) {\n currency = context.parse(options['currency'], 1, StringType);\n if (!currency)\n return null;\n }\n let unit = null;\n if (options['unit']) {\n unit = context.parse(options['unit'], 1, StringType);\n if (!unit)\n return null;\n }\n let minFractionDigits = null;\n if (options['min-fraction-digits']) {\n minFractionDigits = context.parse(options['min-fraction-digits'], 1, NumberType);\n if (!minFractionDigits)\n return null;\n }\n let maxFractionDigits = null;\n if (options['max-fraction-digits']) {\n maxFractionDigits = context.parse(options['max-fraction-digits'], 1, NumberType);\n if (!maxFractionDigits)\n return null;\n }\n return new NumberFormat(number, locale, currency, unit, minFractionDigits, maxFractionDigits);\n }\n evaluate(ctx) {\n return new Intl.NumberFormat(this.locale ? this.locale.evaluate(ctx) : [], {\n style: this.currency && 'currency' || this.unit && 'unit' || 'decimal',\n currency: this.currency ? this.currency.evaluate(ctx) : undefined,\n unit: this.unit ? this.unit.evaluate(ctx) : undefined,\n minimumFractionDigits: this.minFractionDigits ? this.minFractionDigits.evaluate(ctx) : undefined,\n maximumFractionDigits: this.maxFractionDigits ? this.maxFractionDigits.evaluate(ctx) : undefined\n }).format(this.number.evaluate(ctx));\n }\n eachChild(fn) {\n fn(this.number);\n if (this.locale) {\n fn(this.locale);\n }\n if (this.currency) {\n fn(this.currency);\n }\n if (this.unit) {\n fn(this.unit);\n }\n if (this.minFractionDigits) {\n fn(this.minFractionDigits);\n }\n if (this.maxFractionDigits) {\n fn(this.maxFractionDigits);\n }\n }\n outputDefined() {\n return false;\n }\n serialize() {\n const options = {};\n if (this.locale) {\n options['locale'] = this.locale.serialize();\n }\n if (this.currency) {\n options['currency'] = this.currency.serialize();\n }\n if (this.unit) {\n options['unit'] = this.unit.serialize();\n }\n if (this.minFractionDigits) {\n options['min-fraction-digits'] = this.minFractionDigits.serialize();\n }\n if (this.maxFractionDigits) {\n options['max-fraction-digits'] = this.maxFractionDigits.serialize();\n }\n return [\n 'number-format',\n this.number.serialize(),\n options\n ];\n }\n}\n\n// \nclass Length {\n constructor(input) {\n this.type = NumberType;\n this.input = input;\n }\n static parse(args, context) {\n if (args.length !== 2)\n return context.error(`Expected 1 argument, but found ${ args.length - 1 } instead.`);\n const input = context.parse(args[1], 1);\n if (!input)\n return null;\n if (input.type.kind !== 'array' && input.type.kind !== 'string' && input.type.kind !== 'value')\n return context.error(`Expected argument of type string or array, but found ${ toString$1(input.type) } instead.`);\n return new Length(input);\n }\n evaluate(ctx) {\n const input = this.input.evaluate(ctx);\n if (typeof input === 'string') {\n return input.length;\n } else if (Array.isArray(input)) {\n return input.length;\n } else {\n throw new RuntimeError$1(`Expected value to be of type string or array, but found ${ toString$1(typeOf(input)) } instead.`);\n }\n }\n eachChild(fn) {\n fn(this.input);\n }\n outputDefined() {\n return false;\n }\n serialize() {\n const serialized = ['length'];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n}\nvar Length$1 = Length;\n\n// \nconst expressions = {\n // special forms\n '==': Equals,\n '!=': NotEquals,\n '>': GreaterThan,\n '<': LessThan,\n '>=': GreaterThanOrEqual,\n '<=': LessThanOrEqual,\n 'array': Assertion$1,\n 'at': At$1,\n 'boolean': Assertion$1,\n 'case': Case$1,\n 'coalesce': Coalesce$1,\n 'collator': CollatorExpression,\n 'format': FormatExpression,\n 'image': ImageExpression,\n 'in': In$1,\n 'index-of': IndexOf$1,\n 'interpolate': Interpolate$1,\n 'interpolate-hcl': Interpolate$1,\n 'interpolate-lab': Interpolate$1,\n 'length': Length$1,\n 'let': Let$1,\n 'literal': Literal$1,\n 'match': Match$1,\n 'number': Assertion$1,\n 'number-format': NumberFormat,\n 'object': Assertion$1,\n 'slice': Slice$1,\n 'step': Step$1,\n 'string': Assertion$1,\n 'to-boolean': Coercion$1,\n 'to-color': Coercion$1,\n 'to-number': Coercion$1,\n 'to-string': Coercion$1,\n 'var': Var$1,\n 'within': Within$1\n};\nfunction rgba(ctx, [r, g, b, a]) {\n r = r.evaluate(ctx);\n g = g.evaluate(ctx);\n b = b.evaluate(ctx);\n const alpha = a ? a.evaluate(ctx) : 1;\n const error = validateRGBA(r, g, b, alpha);\n if (error)\n throw new RuntimeError$1(error);\n return new Color$1(r / 255 * alpha, g / 255 * alpha, b / 255 * alpha, alpha);\n}\nfunction has(key, obj) {\n return key in obj;\n}\nfunction get(key, obj) {\n const v = obj[key];\n return typeof v === 'undefined' ? null : v;\n}\nfunction binarySearch(v, a, i, j) {\n while (i <= j) {\n const m = i + j >> 1;\n if (a[m] === v)\n return true;\n if (a[m] > v)\n j = m - 1;\n else\n i = m + 1;\n }\n return false;\n}\nfunction varargs(type) {\n return { type };\n}\nCompoundExpression$1.register(expressions, {\n 'error': [\n ErrorType,\n [StringType],\n (ctx, [v]) => {\n throw new RuntimeError$1(v.evaluate(ctx));\n }\n ],\n 'typeof': [\n StringType,\n [ValueType],\n (ctx, [v]) => toString$1(typeOf(v.evaluate(ctx)))\n ],\n 'to-rgba': [\n array$1(NumberType, 4),\n [ColorType],\n (ctx, [v]) => {\n return v.evaluate(ctx).toArray();\n }\n ],\n 'rgb': [\n ColorType,\n [\n NumberType,\n NumberType,\n NumberType\n ],\n rgba\n ],\n 'rgba': [\n ColorType,\n [\n NumberType,\n NumberType,\n NumberType,\n NumberType\n ],\n rgba\n ],\n 'has': {\n type: BooleanType,\n overloads: [\n [\n [StringType],\n (ctx, [key]) => has(key.evaluate(ctx), ctx.properties())\n ],\n [\n [\n StringType,\n ObjectType\n ],\n (ctx, [key, obj]) => has(key.evaluate(ctx), obj.evaluate(ctx))\n ]\n ]\n },\n 'get': {\n type: ValueType,\n overloads: [\n [\n [StringType],\n (ctx, [key]) => get(key.evaluate(ctx), ctx.properties())\n ],\n [\n [\n StringType,\n ObjectType\n ],\n (ctx, [key, obj]) => get(key.evaluate(ctx), obj.evaluate(ctx))\n ]\n ]\n },\n 'feature-state': [\n ValueType,\n [StringType],\n (ctx, [key]) => get(key.evaluate(ctx), ctx.featureState || {})\n ],\n 'properties': [\n ObjectType,\n [],\n ctx => ctx.properties()\n ],\n 'geometry-type': [\n StringType,\n [],\n ctx => ctx.geometryType()\n ],\n 'id': [\n ValueType,\n [],\n ctx => ctx.id()\n ],\n 'zoom': [\n NumberType,\n [],\n ctx => ctx.globals.zoom\n ],\n 'pitch': [\n NumberType,\n [],\n ctx => ctx.globals.pitch || 0\n ],\n 'distance-from-center': [\n NumberType,\n [],\n ctx => ctx.distanceFromCenter()\n ],\n 'heatmap-density': [\n NumberType,\n [],\n ctx => ctx.globals.heatmapDensity || 0\n ],\n 'line-progress': [\n NumberType,\n [],\n ctx => ctx.globals.lineProgress || 0\n ],\n 'sky-radial-progress': [\n NumberType,\n [],\n ctx => ctx.globals.skyRadialProgress || 0\n ],\n 'accumulated': [\n ValueType,\n [],\n ctx => ctx.globals.accumulated === undefined ? null : ctx.globals.accumulated\n ],\n '+': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => {\n let result = 0;\n for (const arg of args) {\n result += arg.evaluate(ctx);\n }\n return result;\n }\n ],\n '*': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => {\n let result = 1;\n for (const arg of args) {\n result *= arg.evaluate(ctx);\n }\n return result;\n }\n ],\n '-': {\n type: NumberType,\n overloads: [\n [\n [\n NumberType,\n NumberType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) - b.evaluate(ctx)\n ],\n [\n [NumberType],\n (ctx, [a]) => -a.evaluate(ctx)\n ]\n ]\n },\n '/': [\n NumberType,\n [\n NumberType,\n NumberType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) / b.evaluate(ctx)\n ],\n '%': [\n NumberType,\n [\n NumberType,\n NumberType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) % b.evaluate(ctx)\n ],\n 'ln2': [\n NumberType,\n [],\n () => Math.LN2\n ],\n 'pi': [\n NumberType,\n [],\n () => Math.PI\n ],\n 'e': [\n NumberType,\n [],\n () => Math.E\n ],\n '^': [\n NumberType,\n [\n NumberType,\n NumberType\n ],\n (ctx, [b, e]) => Math.pow(b.evaluate(ctx), e.evaluate(ctx))\n ],\n 'sqrt': [\n NumberType,\n [NumberType],\n (ctx, [x]) => Math.sqrt(x.evaluate(ctx))\n ],\n 'log10': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx)) / Math.LN10\n ],\n 'ln': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx))\n ],\n 'log2': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx)) / Math.LN2\n ],\n 'sin': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.sin(n.evaluate(ctx))\n ],\n 'cos': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.cos(n.evaluate(ctx))\n ],\n 'tan': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.tan(n.evaluate(ctx))\n ],\n 'asin': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.asin(n.evaluate(ctx))\n ],\n 'acos': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.acos(n.evaluate(ctx))\n ],\n 'atan': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.atan(n.evaluate(ctx))\n ],\n 'min': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => Math.min(...args.map(arg => arg.evaluate(ctx)))\n ],\n 'max': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => Math.max(...args.map(arg => arg.evaluate(ctx)))\n ],\n 'abs': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.abs(n.evaluate(ctx))\n ],\n 'round': [\n NumberType,\n [NumberType],\n (ctx, [n]) => {\n const v = n.evaluate(ctx);\n // Javascript's Math.round() rounds towards +Infinity for halfway\n // values, even when they're negative. It's more common to round\n // away from 0 (e.g., this is what python and C++ do)\n return v < 0 ? -Math.round(-v) : Math.round(v);\n }\n ],\n 'floor': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.floor(n.evaluate(ctx))\n ],\n 'ceil': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.ceil(n.evaluate(ctx))\n ],\n 'filter-==': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => ctx.properties()[k.value] === v.value\n ],\n 'filter-id-==': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => ctx.id() === v.value\n ],\n 'filter-type-==': [\n BooleanType,\n [StringType],\n (ctx, [v]) => ctx.geometryType() === v.value\n ],\n 'filter-<': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => {\n const a = ctx.properties()[k.value];\n const b = v.value;\n return typeof a === typeof b && a < b;\n }\n ],\n 'filter-id-<': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = v.value;\n return typeof a === typeof b && a < b;\n }\n ],\n 'filter->': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => {\n const a = ctx.properties()[k.value];\n const b = v.value;\n return typeof a === typeof b && a > b;\n }\n ],\n 'filter-id->': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = v.value;\n return typeof a === typeof b && a > b;\n }\n ],\n 'filter-<=': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => {\n const a = ctx.properties()[k.value];\n const b = v.value;\n return typeof a === typeof b && a <= b;\n }\n ],\n 'filter-id-<=': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = v.value;\n return typeof a === typeof b && a <= b;\n }\n ],\n 'filter->=': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => {\n const a = ctx.properties()[k.value];\n const b = v.value;\n return typeof a === typeof b && a >= b;\n }\n ],\n 'filter-id->=': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = v.value;\n return typeof a === typeof b && a >= b;\n }\n ],\n 'filter-has': [\n BooleanType,\n [ValueType],\n (ctx, [k]) => k.value in ctx.properties()\n ],\n 'filter-has-id': [\n BooleanType,\n [],\n ctx => ctx.id() !== null && ctx.id() !== undefined\n ],\n 'filter-type-in': [\n BooleanType,\n [array$1(StringType)],\n (ctx, [v]) => v.value.indexOf(ctx.geometryType()) >= 0\n ],\n 'filter-id-in': [\n BooleanType,\n [array$1(ValueType)],\n (ctx, [v]) => v.value.indexOf(ctx.id()) >= 0\n ],\n 'filter-in-small': [\n BooleanType,\n [\n StringType,\n array$1(ValueType)\n ],\n // assumes v is an array literal\n (ctx, [k, v]) => v.value.indexOf(ctx.properties()[k.value]) >= 0\n ],\n 'filter-in-large': [\n BooleanType,\n [\n StringType,\n array$1(ValueType)\n ],\n // assumes v is a array literal with values sorted in ascending order and of a single type\n (ctx, [k, v]) => binarySearch(ctx.properties()[k.value], v.value, 0, v.value.length - 1)\n ],\n 'all': {\n type: BooleanType,\n overloads: [\n [\n [\n BooleanType,\n BooleanType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) && b.evaluate(ctx)\n ],\n [\n varargs(BooleanType),\n (ctx, args) => {\n for (const arg of args) {\n if (!arg.evaluate(ctx))\n return false;\n }\n return true;\n }\n ]\n ]\n },\n 'any': {\n type: BooleanType,\n overloads: [\n [\n [\n BooleanType,\n BooleanType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) || b.evaluate(ctx)\n ],\n [\n varargs(BooleanType),\n (ctx, args) => {\n for (const arg of args) {\n if (arg.evaluate(ctx))\n return true;\n }\n return false;\n }\n ]\n ]\n },\n '!': [\n BooleanType,\n [BooleanType],\n (ctx, [b]) => !b.evaluate(ctx)\n ],\n 'is-supported-script': [\n BooleanType,\n [StringType],\n // At parse time this will always return true, so we need to exclude this expression with isGlobalPropertyConstant\n (ctx, [s]) => {\n const isSupportedScript = ctx.globals && ctx.globals.isSupportedScript;\n if (isSupportedScript) {\n return isSupportedScript(s.evaluate(ctx));\n }\n return true;\n }\n ],\n 'upcase': [\n StringType,\n [StringType],\n (ctx, [s]) => s.evaluate(ctx).toUpperCase()\n ],\n 'downcase': [\n StringType,\n [StringType],\n (ctx, [s]) => s.evaluate(ctx).toLowerCase()\n ],\n 'concat': [\n StringType,\n varargs(ValueType),\n (ctx, args) => args.map(arg => toString(arg.evaluate(ctx))).join('')\n ],\n 'resolved-locale': [\n StringType,\n [CollatorType],\n (ctx, [collator]) => collator.evaluate(ctx).resolvedLocale()\n ]\n});\nvar definitions = expressions;\n\n// \n/**\n * A type used for returning and propagating errors. The first element of the union\n * represents success and contains a value, and the second represents an error and\n * contains an error value.\n * @private\n */\nfunction success(value) {\n return {\n result: 'success',\n value\n };\n}\nfunction error(value) {\n return {\n result: 'error',\n value\n };\n}\n\n// \nfunction supportsPropertyExpression(spec) {\n return spec['property-type'] === 'data-driven';\n}\nfunction supportsZoomExpression(spec) {\n return !!spec.expression && spec.expression.parameters.indexOf('zoom') > -1;\n}\nfunction supportsInterpolation(spec) {\n return !!spec.expression && spec.expression.interpolated;\n}\n\nfunction isFunction(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nclass StyleExpression {\n constructor(expression, propertySpec) {\n this.expression = expression;\n this._warningHistory = {};\n this._evaluator = new EvaluationContext$1();\n this._defaultValue = propertySpec ? getDefaultValue(propertySpec) : null;\n this._enumValues = propertySpec && propertySpec.type === 'enum' ? propertySpec.values : null;\n }\n evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection, featureTileCoord, featureDistanceData) {\n this._evaluator.globals = globals;\n this._evaluator.feature = feature;\n this._evaluator.featureState = featureState;\n this._evaluator.canonical = canonical || null;\n this._evaluator.availableImages = availableImages || null;\n this._evaluator.formattedSection = formattedSection;\n this._evaluator.featureTileCoord = featureTileCoord || null;\n this._evaluator.featureDistanceData = featureDistanceData || null;\n return this.expression.evaluate(this._evaluator);\n }\n evaluate(globals, feature, featureState, canonical, availableImages, formattedSection, featureTileCoord, featureDistanceData) {\n this._evaluator.globals = globals;\n this._evaluator.feature = feature || null;\n this._evaluator.featureState = featureState || null;\n this._evaluator.canonical = canonical || null;\n this._evaluator.availableImages = availableImages || null;\n this._evaluator.formattedSection = formattedSection || null;\n this._evaluator.featureTileCoord = featureTileCoord || null;\n this._evaluator.featureDistanceData = featureDistanceData || null;\n try {\n const val = this.expression.evaluate(this._evaluator);\n // eslint-disable-next-line no-self-compare\n if (val === null || val === undefined || typeof val === 'number' && val !== val) {\n return this._defaultValue;\n }\n if (this._enumValues && !(val in this._enumValues)) {\n throw new RuntimeError$1(`Expected value to be one of ${ Object.keys(this._enumValues).map(v => JSON.stringify(v)).join(', ') }, but found ${ JSON.stringify(val) } instead.`);\n }\n return val;\n } catch (e) {\n if (!this._warningHistory[e.message]) {\n this._warningHistory[e.message] = true;\n if (typeof console !== 'undefined') {\n console.warn(e.message);\n }\n }\n return this._defaultValue;\n }\n }\n}\nfunction isExpression(expression) {\n return Array.isArray(expression) && expression.length > 0 && typeof expression[0] === 'string' && expression[0] in definitions;\n}\n/**\n * Parse and typecheck the given style spec JSON expression. If\n * options.defaultValue is provided, then the resulting StyleExpression's\n * `evaluate()` method will handle errors by logging a warning (once per\n * message) and returning the default value. Otherwise, it will throw\n * evaluation errors.\n *\n * @private\n */\nfunction createExpression(expression, propertySpec) {\n const parser = new ParsingContext$1(definitions, [], propertySpec ? getExpectedType(propertySpec) : undefined);\n // For string-valued properties, coerce to string at the top level rather than asserting.\n const parsed = parser.parse(expression, undefined, undefined, undefined, propertySpec && propertySpec.type === 'string' ? { typeAnnotation: 'coerce' } : undefined);\n if (!parsed) {\n return error(parser.errors);\n }\n return success(new StyleExpression(parsed, propertySpec));\n}\nclass ZoomConstantExpression {\n constructor(kind, expression) {\n this.kind = kind;\n this._styleExpression = expression;\n this.isStateDependent = kind !== 'constant' && !isStateConstant(expression.expression);\n }\n evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection) {\n return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n evaluate(globals, feature, featureState, canonical, availableImages, formattedSection) {\n return this._styleExpression.evaluate(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n}\nclass ZoomDependentExpression {\n constructor(kind, expression, zoomStops, interpolationType) {\n this.kind = kind;\n this.zoomStops = zoomStops;\n this._styleExpression = expression;\n this.isStateDependent = kind !== 'camera' && !isStateConstant(expression.expression);\n this.interpolationType = interpolationType;\n }\n evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection) {\n return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n evaluate(globals, feature, featureState, canonical, availableImages, formattedSection) {\n return this._styleExpression.evaluate(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n interpolationFactor(input, lower, upper) {\n if (this.interpolationType) {\n return Interpolate$1.interpolationFactor(this.interpolationType, input, lower, upper);\n } else {\n return 0;\n }\n }\n}\nfunction createPropertyExpression(expression, propertySpec) {\n expression = createExpression(expression, propertySpec);\n if (expression.result === 'error') {\n return expression;\n }\n const parsed = expression.value.expression;\n const isFeatureConstant$1 = isFeatureConstant(parsed);\n if (!isFeatureConstant$1 && !supportsPropertyExpression(propertySpec)) {\n return error([new ParsingError$1('', 'data expressions not supported')]);\n }\n const isZoomConstant = isGlobalPropertyConstant(parsed, [\n 'zoom',\n 'pitch',\n 'distance-from-center'\n ]);\n if (!isZoomConstant && !supportsZoomExpression(propertySpec)) {\n return error([new ParsingError$1('', 'zoom expressions not supported')]);\n }\n const zoomCurve = findZoomCurve(parsed);\n if (!zoomCurve && !isZoomConstant) {\n return error([new ParsingError$1('', '\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.')]);\n } else if (zoomCurve instanceof ParsingError$1) {\n return error([zoomCurve]);\n } else if (zoomCurve instanceof Interpolate$1 && !supportsInterpolation(propertySpec)) {\n return error([new ParsingError$1('', '\"interpolate\" expressions cannot be used with this property')]);\n }\n if (!zoomCurve) {\n return success(isFeatureConstant$1 ? new ZoomConstantExpression('constant', expression.value) : new ZoomConstantExpression('source', expression.value));\n }\n const interpolationType = zoomCurve instanceof Interpolate$1 ? zoomCurve.interpolation : undefined;\n return success(isFeatureConstant$1 ? new ZoomDependentExpression('camera', expression.value, zoomCurve.labels, interpolationType) : new ZoomDependentExpression('composite', expression.value, zoomCurve.labels, interpolationType));\n}\n// Zoom-dependent expressions may only use [\"zoom\"] as the input to a top-level \"step\" or \"interpolate\"\n// expression (collectively referred to as a \"curve\"). The curve may be wrapped in one or more \"let\" or\n// \"coalesce\" expressions.\nfunction findZoomCurve(expression) {\n let result = null;\n if (expression instanceof Let$1) {\n result = findZoomCurve(expression.result);\n } else if (expression instanceof Coalesce$1) {\n for (const arg of expression.args) {\n result = findZoomCurve(arg);\n if (result) {\n break;\n }\n }\n } else if ((expression instanceof Step$1 || expression instanceof Interpolate$1) && expression.input instanceof CompoundExpression$1 && expression.input.name === 'zoom') {\n result = expression;\n }\n if (result instanceof ParsingError$1) {\n return result;\n }\n expression.eachChild(child => {\n const childResult = findZoomCurve(child);\n if (childResult instanceof ParsingError$1) {\n result = childResult;\n } else if (!result && childResult) {\n result = new ParsingError$1('', '\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.');\n } else if (result && childResult && result !== childResult) {\n result = new ParsingError$1('', 'Only one zoom-based \"step\" or \"interpolate\" subexpression may be used in an expression.');\n }\n });\n return result;\n}\nfunction getExpectedType(spec) {\n const types = {\n color: ColorType,\n string: StringType,\n number: NumberType,\n enum: StringType,\n boolean: BooleanType,\n formatted: FormattedType,\n resolvedImage: ResolvedImageType\n };\n if (spec.type === 'array') {\n return array$1(types[spec.value] || ValueType, spec.length);\n }\n return types[spec.type];\n}\nfunction getDefaultValue(spec) {\n if (spec.type === 'color' && (isFunction(spec.default) || Array.isArray(spec.default))) {\n // Special case for heatmap-color: it uses the 'default:' to define a\n // default color ramp, but createExpression expects a simple value to fall\n // back to in case of runtime errors\n return new Color$1(0, 0, 0, 0);\n } else if (spec.type === 'color') {\n return Color$1.parse(spec.default) || null;\n } else if (spec.default === undefined) {\n return null;\n } else {\n return spec.default;\n }\n}\n\n// \n// Turn jsonlint-lines-primitives objects into primitive objects\nfunction unbundle(value) {\n if (value instanceof Number || value instanceof String || value instanceof Boolean) {\n return value.valueOf();\n } else {\n return value;\n }\n}\nfunction deepUnbundle(value) {\n if (Array.isArray(value)) {\n return value.map(deepUnbundle);\n } else if (value instanceof Object && !(value instanceof Number || value instanceof String || value instanceof Boolean)) {\n const unbundledValue = {};\n for (const key in value) {\n unbundledValue[key] = deepUnbundle(value[key]);\n }\n return unbundledValue;\n }\n return unbundle(value);\n}\n\nvar spec = {\"$version\":8,\"$root\":{\"version\":{\"required\":true,\"type\":\"enum\",\"values\":[8]},\"name\":{\"type\":\"string\"},\"metadata\":{\"type\":\"*\"},\"center\":{\"type\":\"array\",\"value\":\"number\"},\"zoom\":{\"type\":\"number\"},\"bearing\":{\"type\":\"number\",\"default\":0,\"period\":360,\"units\":\"degrees\"},\"pitch\":{\"type\":\"number\",\"default\":0,\"units\":\"degrees\"},\"light\":{\"type\":\"light\"},\"terrain\":{\"type\":\"terrain\"},\"fog\":{\"type\":\"fog\"},\"sources\":{\"required\":true,\"type\":\"sources\"},\"sprite\":{\"type\":\"string\"},\"glyphs\":{\"type\":\"string\"},\"transition\":{\"type\":\"transition\"},\"projection\":{\"type\":\"projection\"},\"layers\":{\"required\":true,\"type\":\"array\",\"value\":\"layer\"}},\"sources\":{\"*\":{\"type\":\"source\"}},\"source\":[\"source_vector\",\"source_raster\",\"source_raster_dem\",\"source_geojson\",\"source_video\",\"source_image\"],\"source_vector\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"vector\":{}}},\"url\":{\"type\":\"string\"},\"tiles\":{\"type\":\"array\",\"value\":\"string\"},\"bounds\":{\"type\":\"array\",\"value\":\"number\",\"length\":4,\"default\":[-180,-85.051129,180,85.051129]},\"scheme\":{\"type\":\"enum\",\"values\":{\"xyz\":{},\"tms\":{}},\"default\":\"xyz\"},\"minzoom\":{\"type\":\"number\",\"default\":0},\"maxzoom\":{\"type\":\"number\",\"default\":22},\"attribution\":{\"type\":\"string\"},\"promoteId\":{\"type\":\"promoteId\"},\"volatile\":{\"type\":\"boolean\",\"default\":false},\"*\":{\"type\":\"*\"}},\"source_raster\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"raster\":{}}},\"url\":{\"type\":\"string\"},\"tiles\":{\"type\":\"array\",\"value\":\"string\"},\"bounds\":{\"type\":\"array\",\"value\":\"number\",\"length\":4,\"default\":[-180,-85.051129,180,85.051129]},\"minzoom\":{\"type\":\"number\",\"default\":0},\"maxzoom\":{\"type\":\"number\",\"default\":22},\"tileSize\":{\"type\":\"number\",\"default\":512,\"units\":\"pixels\"},\"scheme\":{\"type\":\"enum\",\"values\":{\"xyz\":{},\"tms\":{}},\"default\":\"xyz\"},\"attribution\":{\"type\":\"string\"},\"volatile\":{\"type\":\"boolean\",\"default\":false},\"*\":{\"type\":\"*\"}},\"source_raster_dem\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"raster-dem\":{}}},\"url\":{\"type\":\"string\"},\"tiles\":{\"type\":\"array\",\"value\":\"string\"},\"bounds\":{\"type\":\"array\",\"value\":\"number\",\"length\":4,\"default\":[-180,-85.051129,180,85.051129]},\"minzoom\":{\"type\":\"number\",\"default\":0},\"maxzoom\":{\"type\":\"number\",\"default\":22},\"tileSize\":{\"type\":\"number\",\"default\":512,\"units\":\"pixels\"},\"attribution\":{\"type\":\"string\"},\"encoding\":{\"type\":\"enum\",\"values\":{\"terrarium\":{},\"mapbox\":{}},\"default\":\"mapbox\"},\"volatile\":{\"type\":\"boolean\",\"default\":false},\"*\":{\"type\":\"*\"}},\"source_geojson\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"geojson\":{}}},\"data\":{\"type\":\"*\"},\"maxzoom\":{\"type\":\"number\",\"default\":18},\"attribution\":{\"type\":\"string\"},\"buffer\":{\"type\":\"number\",\"default\":128,\"maximum\":512,\"minimum\":0},\"filter\":{\"type\":\"*\"},\"tolerance\":{\"type\":\"number\",\"default\":0.375},\"cluster\":{\"type\":\"boolean\",\"default\":false},\"clusterRadius\":{\"type\":\"number\",\"default\":50,\"minimum\":0},\"clusterMaxZoom\":{\"type\":\"number\"},\"clusterMinPoints\":{\"type\":\"number\"},\"clusterProperties\":{\"type\":\"*\"},\"lineMetrics\":{\"type\":\"boolean\",\"default\":false},\"generateId\":{\"type\":\"boolean\",\"default\":false},\"promoteId\":{\"type\":\"promoteId\"}},\"source_video\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"video\":{}}},\"urls\":{\"required\":true,\"type\":\"array\",\"value\":\"string\"},\"coordinates\":{\"required\":true,\"type\":\"array\",\"length\":4,\"value\":{\"type\":\"array\",\"length\":2,\"value\":\"number\"}}},\"source_image\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"image\":{}}},\"url\":{\"required\":true,\"type\":\"string\"},\"coordinates\":{\"required\":true,\"type\":\"array\",\"length\":4,\"value\":{\"type\":\"array\",\"length\":2,\"value\":\"number\"}}},\"layer\":{\"id\":{\"type\":\"string\",\"required\":true},\"type\":{\"type\":\"enum\",\"values\":{\"fill\":{},\"line\":{},\"symbol\":{},\"circle\":{},\"heatmap\":{},\"fill-extrusion\":{},\"raster\":{},\"hillshade\":{},\"background\":{},\"sky\":{}},\"required\":true},\"metadata\":{\"type\":\"*\"},\"source\":{\"type\":\"string\"},\"source-layer\":{\"type\":\"string\"},\"minzoom\":{\"type\":\"number\",\"minimum\":0,\"maximum\":24},\"maxzoom\":{\"type\":\"number\",\"minimum\":0,\"maximum\":24},\"filter\":{\"type\":\"filter\"},\"layout\":{\"type\":\"layout\"},\"paint\":{\"type\":\"paint\"}},\"layout\":[\"layout_fill\",\"layout_line\",\"layout_circle\",\"layout_heatmap\",\"layout_fill-extrusion\",\"layout_symbol\",\"layout_raster\",\"layout_hillshade\",\"layout_background\",\"layout_sky\"],\"layout_background\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_sky\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_fill\":{\"fill-sort-key\":{\"type\":\"number\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_circle\":{\"circle-sort-key\":{\"type\":\"number\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_heatmap\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_fill-extrusion\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"},\"fill-extrusion-edge-radius\":{\"type\":\"number\",\"private\":true,\"default\":0,\"minimum\":0,\"maximum\":1,\"property-type\":\"constant\"}},\"layout_line\":{\"line-cap\":{\"type\":\"enum\",\"values\":{\"butt\":{},\"round\":{},\"square\":{}},\"default\":\"butt\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-join\":{\"type\":\"enum\",\"values\":{\"bevel\":{},\"round\":{},\"miter\":{}},\"default\":\"miter\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-miter-limit\":{\"type\":\"number\",\"default\":2,\"requires\":[{\"line-join\":\"miter\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-round-limit\":{\"type\":\"number\",\"default\":1.05,\"requires\":[{\"line-join\":\"round\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-sort-key\":{\"type\":\"number\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_symbol\":{\"symbol-placement\":{\"type\":\"enum\",\"values\":{\"point\":{},\"line\":{},\"line-center\":{}},\"default\":\"point\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-spacing\":{\"type\":\"number\",\"default\":250,\"minimum\":1,\"units\":\"pixels\",\"requires\":[{\"symbol-placement\":\"line\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-avoid-edges\":{\"type\":\"boolean\",\"default\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-sort-key\":{\"type\":\"number\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"symbol-z-order\":{\"type\":\"enum\",\"values\":{\"auto\":{},\"viewport-y\":{},\"source\":{}},\"default\":\"auto\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-allow-overlap\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-ignore-placement\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-optional\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"icon-image\",\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-rotation-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{},\"auto\":{}},\"default\":\"auto\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-size\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"units\":\"factor of the original icon size\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-text-fit\":{\"type\":\"enum\",\"values\":{\"none\":{},\"width\":{},\"height\":{},\"both\":{}},\"default\":\"none\",\"requires\":[\"icon-image\",\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-text-fit-padding\":{\"type\":\"array\",\"value\":\"number\",\"length\":4,\"default\":[0,0,0,0],\"units\":\"pixels\",\"requires\":[\"icon-image\",\"text-field\",{\"icon-text-fit\":[\"both\",\"width\",\"height\"]}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-image\":{\"type\":\"resolvedImage\",\"tokens\":true,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-rotate\":{\"type\":\"number\",\"default\":0,\"period\":360,\"units\":\"degrees\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-padding\":{\"type\":\"number\",\"default\":2,\"minimum\":0,\"units\":\"pixels\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-keep-upright\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"icon-image\",{\"icon-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-offset\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-anchor\":{\"type\":\"enum\",\"values\":{\"center\":{},\"left\":{},\"right\":{},\"top\":{},\"bottom\":{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},\"default\":\"center\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-pitch-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{},\"auto\":{}},\"default\":\"auto\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-pitch-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{},\"auto\":{}},\"default\":\"auto\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotation-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{},\"auto\":{}},\"default\":\"auto\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-field\":{\"type\":\"formatted\",\"default\":\"\",\"tokens\":true,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-font\":{\"type\":\"array\",\"value\":\"string\",\"default\":[\"Open Sans Regular\",\"Arial Unicode MS Regular\"],\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-size\":{\"type\":\"number\",\"default\":16,\"minimum\":0,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-width\":{\"type\":\"number\",\"default\":10,\"minimum\":0,\"units\":\"ems\",\"requires\":[\"text-field\",{\"symbol-placement\":[\"point\"]}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-line-height\":{\"type\":\"number\",\"default\":1.2,\"units\":\"ems\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-letter-spacing\":{\"type\":\"number\",\"default\":0,\"units\":\"ems\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-justify\":{\"type\":\"enum\",\"values\":{\"auto\":{},\"left\":{},\"center\":{},\"right\":{}},\"default\":\"center\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-radial-offset\":{\"type\":\"number\",\"units\":\"ems\",\"default\":0,\"requires\":[\"text-field\"],\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]}},\"text-variable-anchor\":{\"type\":\"array\",\"value\":\"enum\",\"values\":{\"center\":{},\"left\":{},\"right\":{},\"top\":{},\"bottom\":{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},\"requires\":[\"text-field\",{\"symbol-placement\":[\"point\"]}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-anchor\":{\"type\":\"enum\",\"values\":{\"center\":{},\"left\":{},\"right\":{},\"top\":{},\"bottom\":{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},\"default\":\"center\",\"requires\":[\"text-field\",{\"!\":\"text-variable-anchor\"}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-angle\":{\"type\":\"number\",\"default\":45,\"units\":\"degrees\",\"requires\":[\"text-field\",{\"symbol-placement\":[\"line\",\"line-center\"]}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-writing-mode\":{\"type\":\"array\",\"value\":\"enum\",\"values\":{\"horizontal\":{},\"vertical\":{}},\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotate\":{\"type\":\"number\",\"default\":0,\"period\":360,\"units\":\"degrees\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-padding\":{\"type\":\"number\",\"default\":2,\"minimum\":0,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-keep-upright\":{\"type\":\"boolean\",\"default\":true,\"requires\":[\"text-field\",{\"text-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-transform\":{\"type\":\"enum\",\"values\":{\"none\":{},\"uppercase\":{},\"lowercase\":{}},\"default\":\"none\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-offset\":{\"type\":\"array\",\"value\":\"number\",\"units\":\"ems\",\"length\":2,\"default\":[0,0],\"requires\":[\"text-field\",{\"!\":\"text-radial-offset\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-allow-overlap\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-ignore-placement\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-optional\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"text-field\",\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_raster\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_hillshade\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"filter\":{\"type\":\"array\",\"value\":\"*\"},\"filter_symbol\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\",\"pitch\",\"distance-from-center\"]}},\"filter_fill\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_line\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_circle\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_fill-extrusion\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_heatmap\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_operator\":{\"type\":\"enum\",\"values\":{\"==\":{},\"!=\":{},\">\":{},\">=\":{},\"<\":{},\"<=\":{},\"in\":{},\"!in\":{},\"all\":{},\"any\":{},\"none\":{},\"has\":{},\"!has\":{},\"within\":{}}},\"geometry_type\":{\"type\":\"enum\",\"values\":{\"Point\":{},\"LineString\":{},\"Polygon\":{}}},\"function\":{\"expression\":{\"type\":\"expression\"},\"stops\":{\"type\":\"array\",\"value\":\"function_stop\"},\"base\":{\"type\":\"number\",\"default\":1,\"minimum\":0},\"property\":{\"type\":\"string\",\"default\":\"$zoom\"},\"type\":{\"type\":\"enum\",\"values\":{\"identity\":{},\"exponential\":{},\"interval\":{},\"categorical\":{}},\"default\":\"exponential\"},\"colorSpace\":{\"type\":\"enum\",\"values\":{\"rgb\":{},\"lab\":{},\"hcl\":{}},\"default\":\"rgb\"},\"default\":{\"type\":\"*\",\"required\":false}},\"function_stop\":{\"type\":\"array\",\"minimum\":0,\"maximum\":24,\"value\":[\"number\",\"color\"],\"length\":2},\"expression\":{\"type\":\"array\",\"value\":\"*\",\"minimum\":1},\"expression_name\":{\"type\":\"enum\",\"values\":{\"let\":{\"group\":\"Variable binding\"},\"var\":{\"group\":\"Variable binding\"},\"literal\":{\"group\":\"Types\"},\"array\":{\"group\":\"Types\"},\"at\":{\"group\":\"Lookup\"},\"in\":{\"group\":\"Lookup\"},\"index-of\":{\"group\":\"Lookup\"},\"slice\":{\"group\":\"Lookup\"},\"case\":{\"group\":\"Decision\"},\"match\":{\"group\":\"Decision\"},\"coalesce\":{\"group\":\"Decision\"},\"step\":{\"group\":\"Ramps, scales, curves\"},\"interpolate\":{\"group\":\"Ramps, scales, curves\"},\"interpolate-hcl\":{\"group\":\"Ramps, scales, curves\"},\"interpolate-lab\":{\"group\":\"Ramps, scales, curves\"},\"ln2\":{\"group\":\"Math\"},\"pi\":{\"group\":\"Math\"},\"e\":{\"group\":\"Math\"},\"typeof\":{\"group\":\"Types\"},\"string\":{\"group\":\"Types\"},\"number\":{\"group\":\"Types\"},\"boolean\":{\"group\":\"Types\"},\"object\":{\"group\":\"Types\"},\"collator\":{\"group\":\"Types\"},\"format\":{\"group\":\"Types\"},\"image\":{\"group\":\"Types\"},\"number-format\":{\"group\":\"Types\"},\"to-string\":{\"group\":\"Types\"},\"to-number\":{\"group\":\"Types\"},\"to-boolean\":{\"group\":\"Types\"},\"to-rgba\":{\"group\":\"Color\"},\"to-color\":{\"group\":\"Types\"},\"rgb\":{\"group\":\"Color\"},\"rgba\":{\"group\":\"Color\"},\"get\":{\"group\":\"Lookup\"},\"has\":{\"group\":\"Lookup\"},\"length\":{\"group\":\"Lookup\"},\"properties\":{\"group\":\"Feature data\"},\"feature-state\":{\"group\":\"Feature data\"},\"geometry-type\":{\"group\":\"Feature data\"},\"id\":{\"group\":\"Feature data\"},\"zoom\":{\"group\":\"Camera\"},\"pitch\":{\"group\":\"Camera\"},\"distance-from-center\":{\"group\":\"Camera\"},\"heatmap-density\":{\"group\":\"Heatmap\"},\"line-progress\":{\"group\":\"Feature data\"},\"sky-radial-progress\":{\"group\":\"sky\"},\"accumulated\":{\"group\":\"Feature data\"},\"+\":{\"group\":\"Math\"},\"*\":{\"group\":\"Math\"},\"-\":{\"group\":\"Math\"},\"/\":{\"group\":\"Math\"},\"%\":{\"group\":\"Math\"},\"^\":{\"group\":\"Math\"},\"sqrt\":{\"group\":\"Math\"},\"log10\":{\"group\":\"Math\"},\"ln\":{\"group\":\"Math\"},\"log2\":{\"group\":\"Math\"},\"sin\":{\"group\":\"Math\"},\"cos\":{\"group\":\"Math\"},\"tan\":{\"group\":\"Math\"},\"asin\":{\"group\":\"Math\"},\"acos\":{\"group\":\"Math\"},\"atan\":{\"group\":\"Math\"},\"min\":{\"group\":\"Math\"},\"max\":{\"group\":\"Math\"},\"round\":{\"group\":\"Math\"},\"abs\":{\"group\":\"Math\"},\"ceil\":{\"group\":\"Math\"},\"floor\":{\"group\":\"Math\"},\"distance\":{\"group\":\"Math\"},\"==\":{\"group\":\"Decision\"},\"!=\":{\"group\":\"Decision\"},\">\":{\"group\":\"Decision\"},\"<\":{\"group\":\"Decision\"},\">=\":{\"group\":\"Decision\"},\"<=\":{\"group\":\"Decision\"},\"all\":{\"group\":\"Decision\"},\"any\":{\"group\":\"Decision\"},\"!\":{\"group\":\"Decision\"},\"within\":{\"group\":\"Decision\"},\"is-supported-script\":{\"group\":\"String\"},\"upcase\":{\"group\":\"String\"},\"downcase\":{\"group\":\"String\"},\"concat\":{\"group\":\"String\"},\"resolved-locale\":{\"group\":\"String\"}}},\"fog\":{\"range\":{\"type\":\"array\",\"default\":[0.5,10],\"minimum\":-20,\"maximum\":20,\"length\":2,\"value\":\"number\",\"property-type\":\"data-constant\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]}},\"color\":{\"type\":\"color\",\"property-type\":\"data-constant\",\"default\":\"#ffffff\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"high-color\":{\"type\":\"color\",\"property-type\":\"data-constant\",\"default\":\"#245cdf\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"space-color\":{\"type\":\"color\",\"property-type\":\"data-constant\",\"default\":[\"interpolate\",[\"linear\"],[\"zoom\"],4,\"#010b19\",7,\"#367ab9\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"horizon-blend\":{\"type\":\"number\",\"property-type\":\"data-constant\",\"default\":[\"interpolate\",[\"linear\"],[\"zoom\"],4,0.2,7,0.1],\"minimum\":0,\"maximum\":1,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"star-intensity\":{\"type\":\"number\",\"property-type\":\"data-constant\",\"default\":[\"interpolate\",[\"linear\"],[\"zoom\"],5,0.35,6,0],\"minimum\":0,\"maximum\":1,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true}},\"light\":{\"anchor\":{\"type\":\"enum\",\"default\":\"viewport\",\"values\":{\"map\":{},\"viewport\":{}},\"property-type\":\"data-constant\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]}},\"position\":{\"type\":\"array\",\"default\":[1.15,210,30],\"length\":3,\"value\":\"number\",\"property-type\":\"data-constant\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]}},\"color\":{\"type\":\"color\",\"property-type\":\"data-constant\",\"default\":\"#ffffff\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"intensity\":{\"type\":\"number\",\"property-type\":\"data-constant\",\"default\":0.5,\"minimum\":0,\"maximum\":1,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true}},\"projection\":{\"name\":{\"type\":\"enum\",\"values\":{\"albers\":{},\"equalEarth\":{},\"equirectangular\":{},\"lambertConformalConic\":{},\"mercator\":{},\"naturalEarth\":{},\"winkelTripel\":{},\"globe\":{}},\"default\":\"mercator\",\"required\":true},\"center\":{\"type\":\"array\",\"length\":2,\"value\":\"number\",\"property-type\":\"data-constant\",\"minimum\":[-180,-90],\"maximum\":[180,90],\"transition\":false,\"requires\":[{\"name\":[\"albers\",\"lambertConformalConic\"]}]},\"parallels\":{\"type\":\"array\",\"length\":2,\"value\":\"number\",\"property-type\":\"data-constant\",\"minimum\":[-90,-90],\"maximum\":[90,90],\"transition\":false,\"requires\":[{\"name\":[\"albers\",\"lambertConformalConic\"]}]}},\"terrain\":{\"source\":{\"type\":\"string\",\"required\":true},\"exaggeration\":{\"type\":\"number\",\"property-type\":\"data-constant\",\"default\":1,\"minimum\":0,\"maximum\":1000,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true,\"requires\":[\"source\"]}},\"paint\":[\"paint_fill\",\"paint_line\",\"paint_circle\",\"paint_heatmap\",\"paint_fill-extrusion\",\"paint_symbol\",\"paint_raster\",\"paint_hillshade\",\"paint_background\",\"paint_sky\"],\"paint_fill\":{\"fill-antialias\":{\"type\":\"boolean\",\"default\":true,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[{\"!\":\"fill-pattern\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-outline-color\":{\"type\":\"color\",\"transition\":true,\"requires\":[{\"!\":\"fill-pattern\"},{\"fill-antialias\":true}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"fill-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-pattern\":{\"type\":\"resolvedImage\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"}},\"paint_fill-extrusion\":{\"fill-extrusion-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[{\"!\":\"fill-extrusion-pattern\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"fill-extrusion-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-pattern\":{\"type\":\"resolvedImage\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-height\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"units\":\"meters\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-base\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"units\":\"meters\",\"transition\":true,\"requires\":[\"fill-extrusion-height\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-vertical-gradient\":{\"type\":\"boolean\",\"default\":true,\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-ambient-occlusion-intensity\":{\"property-type\":\"data-constant\",\"type\":\"number\",\"private\":true,\"default\":0,\"minimum\":0,\"maximum\":1,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"fill-extrusion-ambient-occlusion-radius\":{\"property-type\":\"data-constant\",\"type\":\"number\",\"private\":true,\"default\":3,\"minimum\":0,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true,\"requires\":[\"fill-extrusion-edge-radius\"]}},\"paint_line\":{\"line-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[{\"!\":\"line-pattern\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"line-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-width\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-gap-width\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-offset\":{\"type\":\"number\",\"default\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-blur\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-dasharray\":{\"type\":\"array\",\"value\":\"number\",\"minimum\":0,\"transition\":false,\"units\":\"line widths\",\"requires\":[{\"!\":\"line-pattern\"}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-pattern\":{\"type\":\"resolvedImage\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-gradient\":{\"type\":\"color\",\"transition\":false,\"requires\":[{\"!\":\"line-pattern\"},{\"source\":\"geojson\",\"has\":{\"lineMetrics\":true}}],\"expression\":{\"interpolated\":true,\"parameters\":[\"line-progress\"]},\"property-type\":\"color-ramp\"},\"line-trim-offset\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"minimum\":[0,0],\"maximum\":[1,1],\"transition\":false,\"requires\":[{\"source\":\"geojson\",\"has\":{\"lineMetrics\":true}}],\"property-type\":\"constant\"}},\"paint_circle\":{\"circle-radius\":{\"type\":\"number\",\"default\":5,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-blur\":{\"type\":\"number\",\"default\":0,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"circle-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-scale\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"viewport\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-stroke-width\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"}},\"paint_heatmap\":{\"heatmap-radius\":{\"type\":\"number\",\"default\":30,\"minimum\":1,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-weight\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"transition\":false,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-intensity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"heatmap-color\":{\"type\":\"color\",\"default\":[\"interpolate\",[\"linear\"],[\"heatmap-density\"],0,\"rgba(0, 0, 255, 0)\",0.1,\"royalblue\",0.3,\"cyan\",0.5,\"lime\",0.7,\"yellow\",1,\"red\"],\"transition\":false,\"expression\":{\"interpolated\":true,\"parameters\":[\"heatmap-density\"]},\"property-type\":\"color-ramp\"},\"heatmap-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_symbol\":{\"icon-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-color\":{\"type\":\"color\",\"default\":\"rgba(0, 0, 0, 0)\",\"transition\":true,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-width\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-blur\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"icon-image\",\"icon-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"overridable\":true,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-color\":{\"type\":\"color\",\"default\":\"rgba(0, 0, 0, 0)\",\"transition\":true,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-width\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-blur\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"text-field\",\"text-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_raster\":{\"raster-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-hue-rotate\":{\"type\":\"number\",\"default\":0,\"period\":360,\"transition\":true,\"units\":\"degrees\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-min\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-max\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-saturation\":{\"type\":\"number\",\"default\":0,\"minimum\":-1,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-contrast\":{\"type\":\"number\",\"default\":0,\"minimum\":-1,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-resampling\":{\"type\":\"enum\",\"values\":{\"linear\":{},\"nearest\":{}},\"default\":\"linear\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-fade-duration\":{\"type\":\"number\",\"default\":300,\"minimum\":0,\"transition\":false,\"units\":\"milliseconds\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_hillshade\":{\"hillshade-illumination-direction\":{\"type\":\"number\",\"default\":335,\"minimum\":0,\"maximum\":359,\"transition\":false,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-illumination-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"viewport\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-exaggeration\":{\"type\":\"number\",\"default\":0.5,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-shadow-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-highlight-color\":{\"type\":\"color\",\"default\":\"#FFFFFF\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-accent-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_background\":{\"background-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[{\"!\":\"background-pattern\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"background-pattern\":{\"type\":\"resolvedImage\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"background-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_sky\":{\"sky-type\":{\"type\":\"enum\",\"values\":{\"gradient\":{},\"atmosphere\":{}},\"default\":\"atmosphere\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"sky-atmosphere-sun\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"units\":\"degrees\",\"minimum\":[0,0],\"maximum\":[360,180],\"transition\":false,\"requires\":[{\"sky-type\":\"atmosphere\"}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"sky-atmosphere-sun-intensity\":{\"type\":\"number\",\"requires\":[{\"sky-type\":\"atmosphere\"}],\"default\":10,\"minimum\":0,\"maximum\":100,\"transition\":false,\"property-type\":\"data-constant\"},\"sky-gradient-center\":{\"type\":\"array\",\"requires\":[{\"sky-type\":\"gradient\"}],\"value\":\"number\",\"default\":[0,0],\"length\":2,\"units\":\"degrees\",\"minimum\":[0,0],\"maximum\":[360,180],\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"sky-gradient-radius\":{\"type\":\"number\",\"requires\":[{\"sky-type\":\"gradient\"}],\"default\":90,\"minimum\":0,\"maximum\":180,\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"sky-gradient\":{\"type\":\"color\",\"default\":[\"interpolate\",[\"linear\"],[\"sky-radial-progress\"],0.8,\"#87ceeb\",1,\"white\"],\"transition\":false,\"requires\":[{\"sky-type\":\"gradient\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"sky-radial-progress\"]},\"property-type\":\"color-ramp\"},\"sky-atmosphere-halo-color\":{\"type\":\"color\",\"default\":\"white\",\"transition\":false,\"requires\":[{\"sky-type\":\"atmosphere\"}],\"property-type\":\"data-constant\"},\"sky-atmosphere-color\":{\"type\":\"color\",\"default\":\"white\",\"transition\":false,\"requires\":[{\"sky-type\":\"atmosphere\"}],\"property-type\":\"data-constant\"},\"sky-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"transition\":{\"duration\":{\"type\":\"number\",\"default\":300,\"minimum\":0,\"units\":\"milliseconds\"},\"delay\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"units\":\"milliseconds\"}},\"property-type\":{\"data-driven\":{\"type\":\"property-type\"},\"color-ramp\":{\"type\":\"property-type\"},\"data-constant\":{\"type\":\"property-type\"},\"constant\":{\"type\":\"property-type\"}},\"promoteId\":{\"*\":{\"type\":\"string\"}}};\n\n// \nfunction isExpressionFilter(filter) {\n if (filter === true || filter === false) {\n return true;\n }\n if (!Array.isArray(filter) || filter.length === 0) {\n return false;\n }\n switch (filter[0]) {\n case 'has':\n return filter.length >= 2 && filter[1] !== '$id' && filter[1] !== '$type';\n case 'in':\n return filter.length >= 3 && (typeof filter[1] !== 'string' || Array.isArray(filter[2]));\n case '!in':\n case '!has':\n case 'none':\n return false;\n case '==':\n case '!=':\n case '>':\n case '>=':\n case '<':\n case '<=':\n return filter.length !== 3 || (Array.isArray(filter[1]) || Array.isArray(filter[2]));\n case 'any':\n case 'all':\n for (const f of filter.slice(1)) {\n if (!isExpressionFilter(f) && typeof f !== 'boolean') {\n return false;\n }\n }\n return true;\n default:\n return true;\n }\n}\n/**\n * Given a filter expressed as nested arrays, return a new function\n * that evaluates whether a given feature (with a .properties or .tags property)\n * passes its test.\n *\n * @private\n * @param {Array} filter mapbox gl filter\n * @param {string} layerType the type of the layer this filter will be applied to.\n * @returns {Function} filter-evaluating function\n */\nfunction createFilter(filter, layerType = 'fill') {\n if (filter === null || filter === undefined) {\n return {\n filter: () => true,\n needGeometry: false,\n needFeature: false\n };\n }\n if (!isExpressionFilter(filter)) {\n filter = convertFilter(filter);\n }\n const filterExp = filter;\n let staticFilter = true;\n try {\n staticFilter = extractStaticFilter(filterExp);\n } catch (e) {\n console.warn(`Failed to extract static filter. Filter will continue working, but at higher memory usage and slower framerate.\nThis is most likely a bug, please report this via https://github.com/mapbox/mapbox-gl-js/issues/new?assignees=&labels=&template=Bug_report.md\nand paste the contents of this message in the report.\nThank you!\nFilter Expression:\n${ JSON.stringify(filterExp, null, 2) }\n `);\n }\n // Compile the static component of the filter\n const filterSpec = spec[`filter_${ layerType }`];\n const compiledStaticFilter = createExpression(staticFilter, filterSpec);\n let filterFunc = null;\n if (compiledStaticFilter.result === 'error') {\n throw new Error(compiledStaticFilter.value.map(err => `${ err.key }: ${ err.message }`).join(', '));\n } else {\n filterFunc = (globalProperties, feature, canonical) => compiledStaticFilter.value.evaluate(globalProperties, feature, {}, canonical);\n }\n // If the static component is not equal to the entire filter then we have a dynamic component\n // Compile the dynamic component separately\n let dynamicFilterFunc = null;\n let needFeature = null;\n if (staticFilter !== filterExp) {\n const compiledDynamicFilter = createExpression(filterExp, filterSpec);\n if (compiledDynamicFilter.result === 'error') {\n throw new Error(compiledDynamicFilter.value.map(err => `${ err.key }: ${ err.message }`).join(', '));\n } else {\n dynamicFilterFunc = (globalProperties, feature, canonical, featureTileCoord, featureDistanceData) => compiledDynamicFilter.value.evaluate(globalProperties, feature, {}, canonical, undefined, undefined, featureTileCoord, featureDistanceData);\n needFeature = !isFeatureConstant(compiledDynamicFilter.value.expression);\n }\n }\n filterFunc = filterFunc;\n const needGeometry = geometryNeeded(staticFilter);\n return {\n filter: filterFunc,\n dynamicFilter: dynamicFilterFunc ? dynamicFilterFunc : undefined,\n needGeometry,\n needFeature: !!needFeature\n };\n}\nfunction extractStaticFilter(filter) {\n if (!isDynamicFilter(filter)) {\n return filter;\n }\n // Shallow copy so we can replace expressions in-place\n let result = deepUnbundle(filter);\n // 1. Union branches\n unionDynamicBranches(result);\n // 2. Collapse dynamic conditions to `true`\n result = collapseDynamicBooleanExpressions(result);\n return result;\n}\nfunction collapseDynamicBooleanExpressions(expression) {\n if (!Array.isArray(expression)) {\n return expression;\n }\n const collapsed = collapsedExpression(expression);\n if (collapsed === true) {\n return collapsed;\n } else {\n return collapsed.map(subExpression => collapseDynamicBooleanExpressions(subExpression));\n }\n}\n/**\n * Traverses the expression and replaces all instances of branching on a\n * `dynamic` conditional (such as `['pitch']` or `['distance-from-center']`)\n * into an `any` expression.\n * This ensures that all possible outcomes of a `dynamic` branch are considered\n * when evaluating the expression upfront during filtering.\n *\n * @param {Array} filter the filter expression mutated in-place.\n */\nfunction unionDynamicBranches(filter) {\n let isBranchingDynamically = false;\n const branches = [];\n if (filter[0] === 'case') {\n for (let i = 1; i < filter.length - 1; i += 2) {\n isBranchingDynamically = isBranchingDynamically || isDynamicFilter(filter[i]);\n branches.push(filter[i + 1]);\n }\n branches.push(filter[filter.length - 1]);\n } else if (filter[0] === 'match') {\n isBranchingDynamically = isBranchingDynamically || isDynamicFilter(filter[1]);\n for (let i = 2; i < filter.length - 1; i += 2) {\n branches.push(filter[i + 1]);\n }\n branches.push(filter[filter.length - 1]);\n } else if (filter[0] === 'step') {\n isBranchingDynamically = isBranchingDynamically || isDynamicFilter(filter[1]);\n for (let i = 1; i < filter.length - 1; i += 2) {\n branches.push(filter[i + 1]);\n }\n }\n if (isBranchingDynamically) {\n filter.length = 0;\n filter.push('any', ...branches);\n }\n // traverse and recurse into children\n for (let i = 1; i < filter.length; i++) {\n unionDynamicBranches(filter[i]);\n }\n}\nfunction isDynamicFilter(filter) {\n // Base Cases\n if (!Array.isArray(filter)) {\n return false;\n }\n if (isRootExpressionDynamic(filter[0])) {\n return true;\n }\n for (let i = 1; i < filter.length; i++) {\n const child = filter[i];\n if (isDynamicFilter(child)) {\n return true;\n }\n }\n return false;\n}\nfunction isRootExpressionDynamic(expression) {\n return expression === 'pitch' || expression === 'distance-from-center';\n}\nconst dynamicConditionExpressions = new Set([\n 'in',\n '==',\n '!=',\n '>',\n '>=',\n '<',\n '<=',\n 'to-boolean'\n]);\nfunction collapsedExpression(expression) {\n if (dynamicConditionExpressions.has(expression[0])) {\n for (let i = 1; i < expression.length; i++) {\n const param = expression[i];\n if (isDynamicFilter(param)) {\n return true;\n }\n }\n }\n return expression;\n}\n// Comparison function to sort numbers and strings\nfunction compare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\nfunction geometryNeeded(filter) {\n if (!Array.isArray(filter))\n return false;\n if (filter[0] === 'within')\n return true;\n for (let index = 1; index < filter.length; index++) {\n if (geometryNeeded(filter[index]))\n return true;\n }\n return false;\n}\nfunction convertFilter(filter) {\n if (!filter)\n return true;\n const op = filter[0];\n if (filter.length <= 1)\n return op !== 'any';\n const converted = op === '==' ? convertComparisonOp(filter[1], filter[2], '==') : op === '!=' ? convertNegation(convertComparisonOp(filter[1], filter[2], '==')) : op === '<' || op === '>' || op === '<=' || op === '>=' ? convertComparisonOp(filter[1], filter[2], op) : op === 'any' ? convertDisjunctionOp(filter.slice(1)) : op === 'all' ? ['all'].concat(filter.slice(1).map(convertFilter)) : op === 'none' ? ['all'].concat(filter.slice(1).map(convertFilter).map(convertNegation)) : op === 'in' ? convertInOp(filter[1], filter.slice(2)) : op === '!in' ? convertNegation(convertInOp(filter[1], filter.slice(2))) : op === 'has' ? convertHasOp(filter[1]) : op === '!has' ? convertNegation(convertHasOp(filter[1])) : op === 'within' ? filter : true;\n return converted;\n}\nfunction convertComparisonOp(property, value, op) {\n switch (property) {\n case '$type':\n return [\n `filter-type-${ op }`,\n value\n ];\n case '$id':\n return [\n `filter-id-${ op }`,\n value\n ];\n default:\n return [\n `filter-${ op }`,\n property,\n value\n ];\n }\n}\nfunction convertDisjunctionOp(filters) {\n return ['any'].concat(filters.map(convertFilter));\n}\nfunction convertInOp(property, values) {\n if (values.length === 0) {\n return false;\n }\n switch (property) {\n case '$type':\n return [\n `filter-type-in`,\n [\n 'literal',\n values\n ]\n ];\n case '$id':\n return [\n `filter-id-in`,\n [\n 'literal',\n values\n ]\n ];\n default:\n if (values.length > 200 && !values.some(v => typeof v !== typeof values[0])) {\n return [\n 'filter-in-large',\n property,\n [\n 'literal',\n values.sort(compare)\n ]\n ];\n } else {\n return [\n 'filter-in-small',\n property,\n [\n 'literal',\n values\n ]\n ];\n }\n }\n}\nfunction convertHasOp(property) {\n switch (property) {\n case '$type':\n return true;\n case '$id':\n return [`filter-has-id`];\n default:\n return [\n `filter-has`,\n property\n ];\n }\n}\nfunction convertNegation(filter) {\n return [\n '!',\n filter\n ];\n}\n\n// \nvar refProperties = [\n 'type',\n 'source',\n 'source-layer',\n 'minzoom',\n 'maxzoom',\n 'filter',\n 'layout'\n];\n\n// \nfunction deref(layer, parent) {\n const result = {};\n for (const k in layer) {\n if (k !== 'ref') {\n result[k] = layer[k];\n }\n }\n refProperties.forEach(k => {\n if (k in parent) {\n result[k] = parent[k];\n }\n });\n return result;\n}\n/**\n * Given an array of layers, some of which may contain `ref` properties\n * whose value is the `id` of another property, return a new array where\n * such layers have been augmented with the 'type', 'source', etc. properties\n * from the parent layer, and the `ref` property has been removed.\n *\n * The input is not modified. The output may contain references to portions\n * of the input.\n *\n * @private\n * @param {Array} layers\n * @returns {Array}\n */\nfunction derefLayers(layers) {\n layers = layers.slice();\n const map = Object.create(null);\n for (let i = 0; i < layers.length; i++) {\n map[layers[i].id] = layers[i];\n }\n for (let i = 0; i < layers.length; i++) {\n if ('ref' in layers[i]) {\n layers[i] = deref(layers[i], map[layers[i].ref]);\n }\n }\n return layers;\n}\n\nvar fontWeights = {\n thin: 100,\n hairline: 100,\n 'ultra-light': 200,\n 'extra-light': 200,\n light: 300,\n book: 300,\n regular: 400,\n normal: 400,\n plain: 400,\n roman: 400,\n standard: 400,\n medium: 500,\n 'semi-bold': 600,\n 'demi-bold': 600,\n bold: 700,\n 'extra-bold': 800,\n 'ultra-bold': 800,\n heavy: 900,\n black: 900,\n 'heavy-black': 900,\n fat: 900,\n poster: 900,\n 'ultra-black': 950,\n 'extra-black': 950\n};\nvar sp = ' ';\nvar italicRE = /(italic|oblique)$/i;\nvar fontCache = {};\nvar mapboxToCssFont = function (fonts, size, lineHeight) {\n var cssData = fontCache[fonts];\n if (!cssData) {\n if (!Array.isArray(fonts)) {\n fonts = [fonts];\n }\n var weight = 400;\n var style = 'normal';\n var fontFamilies = [];\n var haveWeight, haveStyle;\n for (var i = 0, ii = fonts.length; i < ii; ++i) {\n var font = fonts[i];\n var parts = font.split(' ');\n var maybeWeight = parts[parts.length - 1].toLowerCase();\n if (maybeWeight == 'normal' || maybeWeight == 'italic' || maybeWeight == 'oblique') {\n style = haveStyle ? style : maybeWeight;\n haveStyle = true;\n parts.pop();\n maybeWeight = parts[parts.length - 1].toLowerCase();\n } else if (italicRE.test(maybeWeight)) {\n maybeWeight = maybeWeight.replace(italicRE, '');\n style = haveStyle ? style : parts[parts.length - 1].replace(maybeWeight, '');\n haveStyle = true;\n }\n for (var w in fontWeights) {\n var previousPart = parts.length > 1 ? parts[parts.length - 2].toLowerCase() : '';\n if (maybeWeight == w || maybeWeight == w.replace('-', '') || previousPart + '-' + maybeWeight == w) {\n weight = haveWeight ? weight : fontWeights[w];\n parts.pop();\n if (previousPart && w.startsWith(previousPart)) {\n parts.pop();\n }\n break;\n }\n }\n if (!haveWeight && typeof maybeWeight == 'number') {\n weight = maybeWeight;\n haveWeight = true;\n }\n var fontFamily = parts.join(sp).replace('Klokantech Noto Sans', 'Noto Sans');\n if (fontFamily.indexOf(sp) !== -1) {\n fontFamily = '\"' + fontFamily + '\"';\n }\n fontFamilies.push(fontFamily);\n }\n // CSS font property: font-style font-weight font-size/line-height font-family\n cssData = fontCache[fonts] = [\n style,\n weight,\n fontFamilies\n ];\n }\n return cssData[0] + sp + cssData[1] + sp + size + 'px' + (lineHeight ? '/' + lineHeight : '') + sp + cssData[2];\n};\n\nvar mb2css = /*@__PURE__*/getDefaultExportFromCjs(mapboxToCssFont);\n\nconst mapboxBaseUrl = 'https://api.mapbox.com';\n/**\n * Gets the path from a mapbox:// URL.\n * @param {string} url The Mapbox URL.\n * @return {string} The path.\n * @private\n */\nfunction getMapboxPath(url) {\n const startsWith = 'mapbox://';\n if (url.indexOf(startsWith) !== 0) {\n return '';\n }\n return url.slice(startsWith.length);\n}\n/**\n * Turns mapbox:// sprite URLs into resolvable URLs.\n * @param {string} url The sprite URL.\n * @param {string} token The access token.\n * @param {string} styleUrl The style URL.\n * @return {string} A resolvable URL.\n * @private\n */\nfunction normalizeSpriteUrl(url, token, styleUrl) {\n const mapboxPath = getMapboxPath(url);\n if (!mapboxPath) {\n return decodeURI(new URL(url, styleUrl).href);\n }\n const startsWith = 'sprites/';\n if (mapboxPath.indexOf(startsWith) !== 0) {\n throw new Error(`unexpected sprites url: ${ url }`);\n }\n const sprite = mapboxPath.slice(startsWith.length);\n return `${ mapboxBaseUrl }/styles/v1/${ sprite }/sprite?access_token=${ token }`;\n}\n/**\n * Turns mapbox:// style URLs into resolvable URLs.\n * @param {string} url The style URL.\n * @param {string} token The access token.\n * @return {string} A resolvable URL.\n * @private\n */\nfunction normalizeStyleUrl(url, token) {\n const mapboxPath = getMapboxPath(url);\n if (!mapboxPath) {\n return decodeURI(new URL(url, location.href).href);\n }\n const startsWith = 'styles/';\n if (mapboxPath.indexOf(startsWith) !== 0) {\n throw new Error(`unexpected style url: ${ url }`);\n }\n const style = mapboxPath.slice(startsWith.length);\n return `${ mapboxBaseUrl }/styles/v1/${ style }?&access_token=${ token }`;\n}\nconst mapboxSubdomains = [\n 'a',\n 'b',\n 'c',\n 'd'\n];\n/**\n * Turns mapbox:// source URLs into vector tile URL templates.\n * @param {string} url The source URL.\n * @param {string} token The access token.\n * @param {string} tokenParam The access token key.\n * @param {string} styleUrl The style URL.\n * @return {Array} A vector tile template.\n * @private\n */\nfunction normalizeSourceUrl(url, token, tokenParam, styleUrl) {\n const urlObject = new URL(url, styleUrl);\n const mapboxPath = getMapboxPath(url);\n if (!mapboxPath) {\n if (!token) {\n return [decodeURI(urlObject.href)];\n }\n if (!urlObject.searchParams.has(tokenParam)) {\n urlObject.searchParams.set(tokenParam, token);\n }\n return [decodeURI(urlObject.href)];\n }\n if (mapboxPath === 'mapbox.satellite') {\n const sizeFactor = window.devicePixelRatio >= 1.5 ? '@2x' : '';\n return [`https://api.mapbox.com/v4/${ mapboxPath }/{z}/{x}/{y}${ sizeFactor }.webp?access_token=${ token }`];\n }\n return mapboxSubdomains.map(sub => `https://${ sub }.tiles.mapbox.com/v4/${ mapboxPath }/{z}/{x}/{y}.vector.pbf?access_token=${ token }`);\n}\n\n/** @typedef {'Style'|'Source'|'Sprite'|'SpriteImage'|'Tiles'|'GeoJSON'} ResourceType */\n/** @typedef {import(\"ol\").Map} Map */\n/** @typedef {import(\"ol/layer\").Layer} Layer */\n/** @typedef {import(\"ol/layer\").Group} LayerGroup */\n/** @typedef {import(\"ol/layer\").Vector} VectorLayer */\n/** @typedef {import(\"ol/layer\").VectorTile} VectorTileLayer */\n/** @typedef {import(\"ol/source\").Source} Source */\nconst functionCacheByStyleId = {};\nconst filterCacheByStyleId = {};\nlet styleId = 0;\nfunction getStyleId(glStyle) {\n if (!glStyle.id) {\n glStyle.id = styleId++;\n }\n return glStyle.id;\n}\nfunction getStyleFunctionKey(glStyle, olLayer) {\n return getStyleId(glStyle) + '.' + getUid(olLayer);\n}\n/**\n * @param {Object} glStyle Mapboox style object.\n * @return {Object} Function cache.\n */\nfunction getFunctionCache(glStyle) {\n let functionCache = functionCacheByStyleId[glStyle.id];\n if (!functionCache) {\n functionCache = {};\n functionCacheByStyleId[getStyleId(glStyle)] = functionCache;\n }\n return functionCache;\n}\nfunction clearFunctionCache() {\n for (const key in functionCacheByStyleId) {\n delete functionCacheByStyleId[key];\n }\n}\n/**\n * @param {Object} glStyle Mapboox style object.\n * @return {Object} Filter cache.\n */\nfunction getFilterCache(glStyle) {\n let filterCache = filterCacheByStyleId[glStyle.id];\n if (!filterCache) {\n filterCache = {};\n filterCacheByStyleId[getStyleId(glStyle)] = filterCache;\n }\n return filterCache;\n}\nfunction deg2rad(degrees) {\n return degrees * Math.PI / 180;\n}\nconst defaultResolutions = (function () {\n const resolutions = [];\n for (let res = 78271.51696402048; resolutions.length <= 24; res /= 2) {\n resolutions.push(res);\n }\n return resolutions;\n}());\n/**\n * @param {number} width Width of the canvas.\n * @param {number} height Height of the canvas.\n * @return {HTMLCanvasElement} Canvas.\n */\nfunction createCanvas(width, height) {\n if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope && typeof OffscreenCanvas !== 'undefined') {\n // eslint-disable-line\n return new OffscreenCanvas(width, height);\n }\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\nfunction getZoomForResolution(resolution, resolutions) {\n let i = 0;\n const ii = resolutions.length;\n for (; i < ii; ++i) {\n const candidate = resolutions[i];\n if (candidate < resolution && i + 1 < ii) {\n const zoomFactor = resolutions[i] / resolutions[i + 1];\n return i + Math.log(resolutions[i] / resolution) / Math.log(zoomFactor);\n }\n }\n return ii - 1;\n}\nfunction getResolutionForZoom(zoom, resolutions) {\n const base = Math.floor(zoom);\n const factor = Math.pow(2, zoom - base);\n return resolutions[base] / factor;\n}\nconst pendingRequests = {};\n/**\n * @param {ResourceType} resourceType Type of resource to load.\n * @param {string} url Url of the resource.\n * @param {Options} [options={}] Options.\n * @param {{request?: Request}} [metadata] Object to be filled with the request.\n * @return {Promise} Promise that resolves with the loaded resource\n * or rejects with the Response object.\n * @private\n */\nfunction fetchResource(resourceType, url, options = {}, metadata) {\n if (url in pendingRequests) {\n if (metadata) {\n metadata.request = pendingRequests[url][0];\n }\n return pendingRequests[url][1];\n }\n const transformedRequest = options.transformRequest ? options.transformRequest(url, resourceType) || url : url;\n const pendingRequest = toPromise(() => transformedRequest).then(transformedRequest => {\n if (!(transformedRequest instanceof Request)) {\n transformedRequest = new Request(transformedRequest);\n }\n if (!transformedRequest.headers.get('Accept')) {\n transformedRequest.headers.set('Accept', 'application/json');\n }\n if (metadata) {\n metadata.request = transformedRequest;\n }\n return fetch(transformedRequest).then(function (response) {\n delete pendingRequests[url];\n return response.ok ? response.json() : Promise.reject(new Error('Error fetching source ' + url));\n }).catch(function (error) {\n delete pendingRequests[url];\n return Promise.reject(new Error('Error fetching source ' + url));\n });\n });\n pendingRequests[url] = [\n transformedRequest,\n pendingRequest\n ];\n return pendingRequest;\n}\nfunction getGlStyle(glStyleOrUrl, options) {\n if (typeof glStyleOrUrl === 'string') {\n if (glStyleOrUrl.trim().startsWith('{')) {\n try {\n const glStyle = JSON.parse(glStyleOrUrl);\n return Promise.resolve(glStyle);\n } catch (error) {\n return Promise.reject(error);\n }\n } else {\n glStyleOrUrl = normalizeStyleUrl(glStyleOrUrl, options.accessToken);\n return fetchResource('Style', glStyleOrUrl, options);\n }\n } else {\n return Promise.resolve(glStyleOrUrl);\n }\n}\nconst tilejsonCache = {};\n/**\n * @param {Object} glSource glStyle source object.\n * @param {string} styleUrl Style URL.\n * @param {Options} options Options.\n * @return {Promise<{tileJson: Object, tileLoadFunction: import('ol/Tile.js').LoadFunction}?>} TileJson and load function\n */\nfunction getTileJson(glSource, styleUrl, options = {}) {\n const cacheKey = [\n styleUrl,\n JSON.stringify(glSource)\n ].toString();\n let promise = tilejsonCache[cacheKey];\n if (!promise || options.transformRequest) {\n let tileLoadFunction;\n if (options.transformRequest) {\n tileLoadFunction = (tile, src) => {\n const transformedRequest = options.transformRequest ? options.transformRequest(src, 'Tiles') || src : src;\n if (tile instanceof VectorTile) {\n tile.setLoader((extent, resolution, projection) => {\n toPromise(() => transformedRequest).then(transformedRequest => {\n fetch(transformedRequest).then(response => response.arrayBuffer()).then(data => {\n const format = tile.getFormat();\n const features = format.readFeatures(data, {\n extent: extent,\n featureProjection: projection\n });\n // @ts-ignore\n tile.setFeatures(features);\n }).catch(e => tile.setState(TileState.ERROR));\n });\n });\n } else {\n const img = tile.getImage();\n toPromise(() => transformedRequest).then(transformedRequest => {\n if (transformedRequest instanceof Request) {\n fetch(transformedRequest).then(response => response.blob()).then(blob => {\n const url = URL.createObjectURL(blob);\n img.addEventListener('load', () => URL.revokeObjectURL(url));\n img.addEventListener('error', () => URL.revokeObjectURL(url));\n img.src = url;\n }).catch(e => tile.setState(TileState.ERROR));\n } else {\n img.src = transformedRequest;\n }\n });\n }\n };\n }\n const url = glSource.url;\n if (url && !glSource.tiles) {\n const normalizedSourceUrl = normalizeSourceUrl(url, options.accessToken, options.accessTokenParam || 'access_token', styleUrl || location.href);\n if (url.startsWith('mapbox://')) {\n promise = Promise.resolve({\n tileJson: Object.assign({}, glSource, {\n url: undefined,\n tiles: normalizedSourceUrl\n }),\n tileLoadFunction\n });\n } else {\n const metadata = {};\n promise = fetchResource('Source', normalizedSourceUrl[0], options, metadata).then(function (tileJson) {\n tileJson.tiles = tileJson.tiles.map(function (tileUrl) {\n if (tileJson.scheme === 'tms') {\n tileUrl = tileUrl.replace('{y}', '{-y}');\n }\n return normalizeSourceUrl(tileUrl, options.accessToken, options.accessTokenParam || 'access_token', metadata.request.url)[0];\n });\n return Promise.resolve({\n tileJson,\n tileLoadFunction\n });\n });\n }\n } else {\n glSource = Object.assign({}, glSource, {\n tiles: glSource.tiles.map(function (tileUrl) {\n if (glSource.scheme === 'tms') {\n tileUrl = tileUrl.replace('{y}', '{-y}');\n }\n return normalizeSourceUrl(tileUrl, options.accessToken, options.accessTokenParam || 'access_token', styleUrl || location.href)[0];\n })\n });\n promise = Promise.resolve({\n tileJson: Object.assign({}, glSource),\n tileLoadFunction\n });\n }\n tilejsonCache[cacheKey] = promise;\n }\n return promise;\n}\n/**\n * @param {HTMLImageElement|HTMLCanvasElement} spriteImage Sprite image id.\n * @param {{x: number, y: number, width: number, height: number, pixelRatio: number}} spriteImageData Sprite image data.\n * @param {number} haloWidth Halo width.\n * @param {{r: number, g: number, b: number, a: number}} haloColor Halo color.\n * @return {HTMLCanvasElement} Canvas element with the halo.\n */\nfunction drawIconHalo(spriteImage, spriteImageData, haloWidth, haloColor) {\n const imgSize = [\n 2 * haloWidth * spriteImageData.pixelRatio + spriteImageData.width,\n 2 * haloWidth * spriteImageData.pixelRatio + spriteImageData.height\n ];\n const imageCanvas = createCanvas(imgSize[0], imgSize[1]);\n const imageContext = imageCanvas.getContext('2d');\n imageContext.drawImage(spriteImage, spriteImageData.x, spriteImageData.y, spriteImageData.width, spriteImageData.height, haloWidth * spriteImageData.pixelRatio, haloWidth * spriteImageData.pixelRatio, spriteImageData.width, spriteImageData.height);\n const imageData = imageContext.getImageData(0, 0, imgSize[0], imgSize[1]);\n imageContext.globalCompositeOperation = 'destination-over';\n imageContext.fillStyle = `rgba(${ haloColor.r * 255 },${ haloColor.g * 255 },${ haloColor.b * 255 },${ haloColor.a })`;\n const data = imageData.data;\n for (let i = 0, ii = imageData.width; i < ii; ++i) {\n for (let j = 0, jj = imageData.height; j < jj; ++j) {\n const index = (j * ii + i) * 4;\n const alpha = data[index + 3];\n if (alpha > 0) {\n imageContext.arc(i, j, haloWidth * spriteImageData.pixelRatio, 0, 2 * Math.PI);\n }\n }\n }\n imageContext.fill();\n return imageCanvas;\n}\nfunction smoothstep(min, max, value) {\n const x = Math.max(0, Math.min(1, (value - min) / (max - min)));\n return x * x * (3 - 2 * x);\n}\n/**\n * @param {HTMLImageElement} image SDF image\n * @param {{x: number, y: number, width: number, height: number}} area Area to unSDF\n * @param {{r: number, g: number, b: number, a: number}} color Color to use\n * @return {HTMLCanvasElement} Regular image\n */\nfunction drawSDF(image, area, color) {\n const imageCanvas = createCanvas(area.width, area.height);\n const imageContext = imageCanvas.getContext('2d');\n imageContext.drawImage(image, area.x, area.y, area.width, area.height, 0, 0, area.width, area.height);\n const imageData = imageContext.getImageData(0, 0, area.width, area.height);\n const data = imageData.data;\n for (let i = 0, ii = imageData.width; i < ii; ++i) {\n for (let j = 0, jj = imageData.height; j < jj; ++j) {\n const index = (j * ii + i) * 4;\n const dist = data[index + 3] / 255;\n const buffer = 0.75;\n const gamma = 0.1;\n const alpha = smoothstep(buffer - gamma, buffer + gamma, dist);\n if (alpha > 0) {\n data[index + 0] = Math.round(255 * color.r * alpha);\n data[index + 1] = Math.round(255 * color.g * alpha);\n data[index + 2] = Math.round(255 * color.b * alpha);\n data[index + 3] = Math.round(255 * alpha);\n } else {\n data[index + 3] = 0;\n }\n }\n }\n imageContext.putImageData(imageData, 0, 0);\n return imageCanvas;\n} /**\n * @typedef {import(\"./apply.js\").Options} Options\n * @private\n */\n\nconst hairSpacePool = Array(256).join('\\u200A');\nfunction applyLetterSpacing(text, letterSpacing) {\n if (letterSpacing >= 0.05) {\n let textWithLetterSpacing = '';\n const lines = text.split('\\n');\n const joinSpaceString = hairSpacePool.slice(0, Math.round(letterSpacing / 0.1));\n for (let l = 0, ll = lines.length; l < ll; ++l) {\n if (l > 0) {\n textWithLetterSpacing += '\\n';\n }\n textWithLetterSpacing += lines[l].split('').join(joinSpaceString);\n }\n return textWithLetterSpacing;\n }\n return text;\n}\nlet measureContext;\nfunction getMeasureContext() {\n if (!measureContext) {\n measureContext = createCanvas(1, 1).getContext('2d');\n }\n return measureContext;\n}\nfunction measureText(text, letterSpacing) {\n return getMeasureContext().measureText(text).width + (text.length - 1) * letterSpacing;\n}\nconst measureCache = {};\nfunction wrapText(text, font, em, letterSpacing) {\n if (text.indexOf('\\n') !== -1) {\n const hardLines = text.split('\\n');\n const lines = [];\n for (let i = 0, ii = hardLines.length; i < ii; ++i) {\n lines.push(wrapText(hardLines[i], font, em, letterSpacing));\n }\n return lines.join('\\n');\n }\n const key = em + ',' + font + ',' + text + ',' + letterSpacing;\n let wrappedText = measureCache[key];\n if (!wrappedText) {\n const words = text.split(' ');\n if (words.length > 1) {\n const ctx = getMeasureContext();\n ctx.font = font;\n const oneEm = ctx.measureText('M').width;\n const maxWidth = oneEm * em;\n let line = '';\n const lines = [];\n // Pass 1 - wrap lines to not exceed maxWidth\n for (let i = 0, ii = words.length; i < ii; ++i) {\n const word = words[i];\n const testLine = line + (line ? ' ' : '') + word;\n if (measureText(testLine, letterSpacing) <= maxWidth) {\n line = testLine;\n } else {\n if (line) {\n lines.push(line);\n }\n line = word;\n }\n }\n if (line) {\n lines.push(line);\n }\n // Pass 2 - add lines with a width of less than 30% of maxWidth to the previous or next line\n for (let i = 0, ii = lines.length; i < ii && ii > 1; ++i) {\n const line = lines[i];\n if (measureText(line, letterSpacing) < maxWidth * 0.35) {\n const prevWidth = i > 0 ? measureText(lines[i - 1], letterSpacing) : Infinity;\n const nextWidth = i < ii - 1 ? measureText(lines[i + 1], letterSpacing) : Infinity;\n lines.splice(i, 1);\n ii -= 1;\n if (prevWidth < nextWidth) {\n lines[i - 1] += ' ' + line;\n i -= 1;\n } else {\n lines[i] = line + ' ' + lines[i];\n }\n }\n }\n // Pass 3 - try to fill 80% of maxWidth for each line\n for (let i = 0, ii = lines.length - 1; i < ii; ++i) {\n const line = lines[i];\n const next = lines[i + 1];\n if (measureText(line, letterSpacing) > maxWidth * 0.7 && measureText(next, letterSpacing) < maxWidth * 0.6) {\n const lineWords = line.split(' ');\n const lastWord = lineWords.pop();\n if (measureText(lastWord, letterSpacing) < maxWidth * 0.2) {\n lines[i] = lineWords.join(' ');\n lines[i + 1] = lastWord + ' ' + next;\n }\n ii -= 1;\n }\n }\n wrappedText = lines.join('\\n');\n } else {\n wrappedText = text;\n }\n wrappedText = applyLetterSpacing(wrappedText, letterSpacing);\n measureCache[key] = wrappedText;\n }\n return wrappedText;\n}\nconst fontFamilyRegEx = /font-family: ?([^;]*);/;\nconst stripQuotesRegEx = /(\"|')/g;\nlet loadedFontFamilies;\nfunction hasFontFamily(family) {\n if (!loadedFontFamilies) {\n loadedFontFamilies = {};\n const styleSheets = document.styleSheets;\n for (let i = 0, ii = styleSheets.length; i < ii; ++i) {\n const styleSheet = styleSheets[i];\n try {\n const cssRules = styleSheet.rules || styleSheet.cssRules;\n if (cssRules) {\n for (let j = 0, jj = cssRules.length; j < jj; ++j) {\n const cssRule = cssRules[j];\n if (cssRule.type == 5) {\n const match = cssRule.cssText.match(fontFamilyRegEx);\n loadedFontFamilies[match[1].replace(stripQuotesRegEx, '')] = true;\n }\n }\n }\n } catch (e) {\n }\n }\n }\n return family in loadedFontFamilies;\n}\nconst processedFontFamilies = {};\n/**\n * @param {Array} fonts Fonts.\n * @param {string} [templateUrl] Template URL.\n * @return {Array} Processed fonts.\n * @private\n */\nfunction getFonts(fonts, templateUrl = 'https://cdn.jsdelivr.net/npm/@fontsource/{font-family}/{fontweight}{-fontstyle}.css') {\n const fontsKey = fonts.toString();\n if (fontsKey in processedFontFamilies) {\n return processedFontFamilies[fontsKey];\n }\n const fontDescriptions = [];\n for (let i = 0, ii = fonts.length; i < ii; ++i) {\n fonts[i] = fonts[i].replace('Arial Unicode MS', 'Arial');\n const font = fonts[i];\n const cssFont = mb2css(font, 1);\n registerFont(cssFont);\n const parts = cssFont.split(' ');\n fontDescriptions.push([\n parts.slice(3).join(' ').replace(/\"/g, ''),\n parts[1],\n parts[0]\n ]);\n }\n for (let i = 0, ii = fontDescriptions.length; i < ii; ++i) {\n const fontDescription = fontDescriptions[i];\n const family = fontDescription[0];\n if (!hasFontFamily(family)) {\n if (checkedFonts.get(`${ fontDescription[2] }\\n${ fontDescription[1] } \\n${ family }`) !== 100) {\n const fontUrl = templateUrl.replace('{font-family}', family.replace(/ /g, '-').toLowerCase()).replace('{Font+Family}', family.replace(/ /g, '+')).replace('{fontweight}', fontDescription[1]).replace('{-fontstyle}', fontDescription[2].replace('normal', '').replace(/(.+)/, '-$1')).replace('{fontstyle}', fontDescription[2]);\n if (!document.querySelector('link[href=\"' + fontUrl + '\"]')) {\n const markup = document.createElement('link');\n markup.href = fontUrl;\n markup.rel = 'stylesheet';\n document.head.appendChild(markup);\n }\n }\n }\n }\n processedFontFamilies[fontsKey] = fonts;\n return fonts;\n}\n\n/*\nol-mapbox-style - Use Mapbox/MapLibre Style objects with OpenLayers\nCopyright 2016-present ol-mapbox-style contributors\nLicense: https://raw.githubusercontent.com/openlayers/ol-mapbox-style/master/LICENSE\n*/\n/**\n * @typedef {import(\"ol/layer/Vector\").default} VectorLayer\n * @typedef {import(\"ol/layer/VectorTile\").default} VectorTileLayer\n * @typedef {import(\"ol/style/Style\").StyleFunction} StyleFunction\n * @typedef {import('./util.js').ResourceType} ResourceType\n */\nconst types = {\n 'Point': 1,\n 'MultiPoint': 1,\n 'LineString': 2,\n 'MultiLineString': 2,\n 'Polygon': 3,\n 'MultiPolygon': 3\n};\nconst anchor = {\n 'center': [\n 0.5,\n 0.5\n ],\n 'left': [\n 0,\n 0.5\n ],\n 'right': [\n 1,\n 0.5\n ],\n 'top': [\n 0.5,\n 0\n ],\n 'bottom': [\n 0.5,\n 1\n ],\n 'top-left': [\n 0,\n 0\n ],\n 'top-right': [\n 1,\n 0\n ],\n 'bottom-left': [\n 0,\n 1\n ],\n 'bottom-right': [\n 1,\n 1\n ]\n};\nconst expressionData = function (rawExpression, propertySpec) {\n const compiledExpression = createPropertyExpression(rawExpression, propertySpec);\n if (compiledExpression.result === 'error') {\n throw new Error(compiledExpression.value.map(err => `${ err.key }: ${ err.message }`).join(', '));\n }\n return compiledExpression.value;\n};\nconst emptyObj$1 = {};\nconst zoomObj = { zoom: 0 };\nlet renderFeatureCoordinates, renderFeature;\n/**\n * @private\n * @param {Object} layer Gl object layer.\n * @param {string} layoutOrPaint 'layout' or 'paint'.\n * @param {string} property Feature property.\n * @param {number} zoom Zoom.\n * @param {Object} feature Gl feature.\n * @param {Object} [functionCache] Function cache.\n * @param {Object} [featureState] Feature state.\n * @return {?} Value.\n */\nfunction getValue(layer, layoutOrPaint, property, zoom, feature, functionCache, featureState) {\n const layerId = layer.id;\n if (!functionCache) {\n functionCache = {};\n console.warn('No functionCache provided to getValue()'); //eslint-disable-line no-console\n }\n if (!functionCache[layerId]) {\n functionCache[layerId] = {};\n }\n const functions = functionCache[layerId];\n if (!functions[property]) {\n let value = (layer[layoutOrPaint] || emptyObj$1)[property];\n const propertySpec = spec[`${ layoutOrPaint }_${ layer.type }`][property];\n if (value === undefined) {\n value = propertySpec.default;\n }\n let isExpr = isExpression(value);\n if (!isExpr && isFunction(value)) {\n value = convertFunction(value, propertySpec);\n isExpr = true;\n }\n if (isExpr) {\n const compiledExpression = expressionData(value, propertySpec);\n functions[property] = compiledExpression.evaluate.bind(compiledExpression);\n } else {\n if (propertySpec.type == 'color') {\n value = Color$1.parse(value);\n }\n functions[property] = function () {\n return value;\n };\n }\n }\n zoomObj.zoom = zoom;\n return functions[property](zoomObj, feature, featureState);\n}\n/**\n * @private\n * @param {Object} layer Gl object layer.\n * @param {number} zoom Zoom.\n * @param {Object} feature Gl feature.\n * @param {\"icon\"|\"text\"} prefix Style property prefix.\n * @param {Object} [functionCache] Function cache.\n * @return {\"declutter\"|\"obstacle\"|\"none\"} Value.\n */\nfunction getDeclutterMode(layer, zoom, feature, prefix, functionCache) {\n const allowOverlap = getValue(layer, 'layout', `${ prefix }-allow-overlap`, zoom, feature, functionCache);\n if (!allowOverlap) {\n return 'declutter';\n }\n const ignorePlacement = getValue(layer, 'layout', `${ prefix }-ignore-placement`, zoom, feature, functionCache);\n if (!ignorePlacement) {\n return 'obstacle';\n }\n return 'none';\n}\n/**\n * @private\n * @param {string} layerId Layer id.\n * @param {?} filter Filter.\n * @param {Object} feature Feature.\n * @param {number} zoom Zoom.\n * @param {Object} [filterCache] Filter cache.\n * @return {boolean} Filter result.\n */\nfunction evaluateFilter(layerId, filter, feature, zoom, filterCache) {\n if (!filterCache) {\n console.warn('No filterCache provided to evaluateFilter()'); //eslint-disable-line no-console\n }\n if (!(layerId in filterCache)) {\n filterCache[layerId] = createFilter(filter).filter;\n }\n zoomObj.zoom = zoom;\n return filterCache[layerId](zoomObj, feature);\n}\nlet renderTransparentEnabled = false;\n/**\n * Configure whether features with a transparent style should be rendered. When\n * set to `true`, it will be possible to hit detect content that is not visible,\n * like transparent fills of polygons, using `ol/layer/Layer#getFeatures()` or\n * `ol/Map#getFeaturesAtPixel()`\n * @param {boolean} enabled Rendering of transparent elements is enabled.\n * Default is `false`.\n */\nfunction renderTransparent(enabled) {\n if (enabled !== renderTransparentEnabled) {\n clearFunctionCache();\n renderTransparentEnabled = enabled;\n }\n}\n/**\n * @private\n * @param {?} color Color.\n * @param {number} [opacity] Opacity.\n * @return {string} Color.\n */\nfunction colorWithOpacity(color, opacity) {\n if (color) {\n if (!renderTransparentEnabled && (color.a === 0 || opacity === 0)) {\n return undefined;\n }\n const a = color.a;\n opacity = opacity === undefined ? 1 : opacity;\n return a === 0 ? 'transparent' : 'rgba(' + Math.round(color.r * 255 / a) + ',' + Math.round(color.g * 255 / a) + ',' + Math.round(color.b * 255 / a) + ',' + a * opacity + ')';\n }\n return color;\n}\nconst templateRegEx = /\\{[^{}}]*\\}/g;\n/**\n * @private\n * @param {string} text Text.\n * @param {Object} properties Properties.\n * @return {string} Text.\n */\nfunction fromTemplate(text, properties) {\n return text.replace(templateRegEx, function (match) {\n return properties[match.slice(1, -1)] || '';\n });\n}\nlet recordLayer = false;\n/**\n * Turns recording of the Mapbox/MapLibre Style's `layer` on and off. When turned on,\n * the layer that a rendered feature belongs to will be set as the feature's\n * `mapbox-layer` property.\n * @param {boolean} record Recording of the style layer is on.\n */\nfunction recordStyleLayer(record = false) {\n recordLayer = record;\n}\nconst styleFunctionArgs = {};\n/**\n * Creates a style function from the `glStyle` object for all layers that use\n * the specified `source`, which needs to be a `\"type\": \"vector\"` or\n * `\"type\": \"geojson\"` source and applies it to the specified OpenLayers layer.\n *\n * Two additional properties will be set on the provided layer:\n *\n * * `mapbox-source`: The `id` of the Mapbox/MapLibre Style document's source that the\n * OpenLayers layer was created from. Usually `apply()` creates one\n * OpenLayers layer per Mapbox/MapLibre Style source, unless the layer stack has\n * layers from different sources in between.\n * * `mapbox-layers`: The `id`s of the Mapbox/MapLibre Style document's layers that are\n * included in the OpenLayers layer.\n *\n * This function also works in a web worker. In worker mode, the main thread needs\n * to listen to messages from the worker and respond with another message to make\n * sure that sprite image loading works:\n *\n * ```js\n * worker.addEventListener('message', event => {\n * if (event.data.action === 'loadImage') {\n * const image = new Image();\n * image.crossOrigin = 'anonymous';\n * image.addEventListener('load', function() {\n * createImageBitmap(image, 0, 0, image.width, image.height).then(imageBitmap => {\n * worker.postMessage({\n * action: 'imageLoaded',\n * image: imageBitmap,\n * src: event.data.src\n * }, [imageBitmap]);\n * });\n * });\n * image.src = event.data.src;\n * }\n * });\n * ```\n *\n * @param {VectorLayer|VectorTileLayer} olLayer OpenLayers layer to\n * apply the style to. In addition to the style, the layer will get two\n * properties: `mapbox-source` will be the `id` of the `glStyle`'s source used\n * for the layer, and `mapbox-layers` will be an array of the `id`s of the\n * `glStyle`'s layers.\n * @param {string|Object} glStyle Mapbox/MapLibre Style object.\n * @param {string|Array} sourceOrLayers `source` key or an array of layer `id`s\n * from the Mapbox/MapLibre Style object. When a `source` key is provided, all layers for\n * the specified source will be included in the style function. When layer `id`s\n * are provided, they must be from layers that use the same source.\n * @param {Array} resolutions\n * Resolutions for mapping resolution to zoom level.\n * @param {Object} spriteData Sprite data from the url specified in\n * the Mapbox/MapLibre Style object's `sprite` property. Only required if a `sprite`\n * property is specified in the Mapbox/MapLibre Style object.\n * @param {string|Request|Promise} spriteImageUrl Sprite image url for the sprite\n * specified in the Mapbox/MapLibre Style object's `sprite` property. Only required if a\n * `sprite` property is specified in the Mapbox/MapLibre Style object.\n * @param {function(Array, string=):Array} getFonts Function that\n * receives a font stack and the url template from the GL style's `metadata['ol:webfonts']`\n * property (if set) as arguments, and returns a (modified) font stack that\n * is available. Font names are the names used in the Mapbox/MapLibre Style object. If\n * not provided, the font stack will be used as-is. This function can also be\n * used for loading web fonts.\n * @param {function(VectorLayer|VectorTileLayer, string):HTMLImageElement|HTMLCanvasElement|string|undefined} [getImage=undefined]\n * Function that returns an image or a URL for an image name. If the result is an HTMLImageElement, it must already be\n * loaded. The layer can be used to call layer.changed() when the loading and processing of the image has finished.\n * This function can be used for icons not in the sprite or to override sprite icons.\n * @return {StyleFunction} Style function for use in\n * `ol.layer.Vector` or `ol.layer.VectorTile`.\n */\nfunction stylefunction(olLayer, glStyle, sourceOrLayers, resolutions = defaultResolutions, spriteData = undefined, spriteImageUrl = undefined, getFonts = undefined, getImage = undefined) {\n if (typeof glStyle == 'string') {\n glStyle = JSON.parse(glStyle);\n }\n if (glStyle.version != 8) {\n throw new Error('glStyle version 8 required.');\n }\n styleFunctionArgs[getStyleFunctionKey(glStyle, olLayer)] = Array.from(arguments);\n let spriteImage, spriteImageSize;\n let spriteImageUnSDFed;\n if (spriteImageUrl) {\n if (typeof Image !== 'undefined') {\n const img = new Image();\n let blobUrl;\n toPromise(() => spriteImageUrl).then(spriteImageUrl => {\n if (spriteImageUrl instanceof Request) {\n fetch(spriteImageUrl).then(response => response.blob()).then(blob => {\n blobUrl = URL.createObjectURL(blob);\n img.src = blobUrl;\n }).catch(() => {\n });\n } else {\n img.crossOrigin = 'anonymous';\n img.src = spriteImageUrl;\n if (blobUrl) {\n URL.revokeObjectURL(blobUrl);\n }\n }\n });\n img.onload = function () {\n spriteImage = img;\n spriteImageSize = [\n img.width,\n img.height\n ];\n olLayer.changed();\n img.onload = null;\n };\n } else if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {\n //eslint-disable-line\n const worker = self;\n // Main thread needs to handle 'loadImage' and dispatch 'imageLoaded'\n worker.postMessage({\n action: 'loadImage',\n src: spriteImageUrl\n });\n worker.addEventListener('message', function handler(event) {\n if (event.data.action === 'imageLoaded' && event.data.src === spriteImageUrl) {\n spriteImage = event.data.image;\n spriteImageSize = [\n spriteImage.width,\n spriteImage.height\n ];\n }\n });\n }\n }\n const allLayers = derefLayers(glStyle.layers);\n const layersBySourceLayer = {};\n const mapboxLayers = [];\n const iconImageCache = {};\n const patternCache = {};\n const functionCache = getFunctionCache(glStyle);\n const filterCache = getFilterCache(glStyle);\n let mapboxSource;\n for (let i = 0, ii = allLayers.length; i < ii; ++i) {\n const layer = allLayers[i];\n const layerId = layer.id;\n if (typeof sourceOrLayers == 'string' && layer.source == sourceOrLayers || Array.isArray(sourceOrLayers) && sourceOrLayers.indexOf(layerId) !== -1) {\n const sourceLayer = layer['source-layer'];\n if (!mapboxSource) {\n mapboxSource = layer.source;\n const source = glStyle.sources[mapboxSource];\n if (!source) {\n throw new Error(`Source \"${ mapboxSource }\" is not defined`);\n }\n const type = source.type;\n if (type !== 'vector' && type !== 'geojson') {\n throw new Error(`Source \"${ mapboxSource }\" is not of type \"vector\" or \"geojson\", but \"${ type }\"`);\n }\n } else if (layer.source !== mapboxSource) {\n throw new Error(`Layer \"${ layerId }\" does not use source \"${ mapboxSource }`);\n }\n let layers = layersBySourceLayer[sourceLayer];\n if (!layers) {\n layers = [];\n layersBySourceLayer[sourceLayer] = layers;\n }\n layers.push({\n layer: layer,\n index: i\n });\n mapboxLayers.push(layerId);\n }\n }\n const textHalo = new Stroke();\n const textColor = new Fill();\n const styles = [];\n /**\n * @param {import(\"ol/Feature\").default|import(\"ol/render/Feature\").default} feature Feature.\n * @param {number} resolution Resolution.\n * @param {string} [onlyLayer] Calculate style for this layer only.\n * @return {Array} Style.\n */\n const styleFunction = function (feature, resolution, onlyLayer) {\n const properties = feature.getProperties();\n const layers = layersBySourceLayer[properties.layer];\n if (!layers) {\n return undefined;\n }\n let zoom = resolutions.indexOf(resolution);\n if (zoom == -1) {\n zoom = getZoomForResolution(resolution, resolutions);\n }\n const type = types[feature.getGeometry().getType()];\n const f = {\n id: feature.getId(),\n properties: properties,\n type: type\n };\n const featureState = olLayer.get('mapbox-featurestate')[feature.getId()];\n let stylesLength = -1;\n let featureBelongsToLayer;\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const layerData = layers[i];\n const layer = layerData.layer;\n const layerId = layer.id;\n if (onlyLayer !== undefined && onlyLayer !== layerId) {\n continue;\n }\n const layout = layer.layout || emptyObj$1;\n const paint = layer.paint || emptyObj$1;\n if (layout.visibility === 'none' || 'minzoom' in layer && zoom < layer.minzoom || 'maxzoom' in layer && zoom >= layer.maxzoom) {\n continue;\n }\n const filter = layer.filter;\n if (!filter || evaluateFilter(layerId, filter, f, zoom, filterCache)) {\n featureBelongsToLayer = layer;\n let color, opacity, fill, stroke, strokeColor, style;\n const index = layerData.index;\n if (type == 3 && (layer.type == 'fill' || layer.type == 'fill-extrusion')) {\n opacity = getValue(layer, 'paint', layer.type + '-opacity', zoom, f, functionCache, featureState);\n if (layer.type + '-pattern' in paint) {\n const fillIcon = getValue(layer, 'paint', layer.type + '-pattern', zoom, f, functionCache, featureState);\n if (fillIcon) {\n const icon = typeof fillIcon === 'string' ? fromTemplate(fillIcon, properties) : fillIcon.toString();\n if (spriteImage && spriteData && spriteData[icon]) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getFill() || style.getStroke() || style.getText()) {\n style = new Style({ fill: new Fill() });\n styles[stylesLength] = style;\n }\n fill = style.getFill();\n style.setZIndex(index);\n const icon_cache_key = icon + '.' + opacity;\n let pattern = patternCache[icon_cache_key];\n if (!pattern) {\n const spriteImageData = spriteData[icon];\n const canvas = createCanvas(spriteImageData.width, spriteImageData.height);\n const ctx = canvas.getContext('2d');\n ctx.globalAlpha = opacity;\n ctx.drawImage(spriteImage, spriteImageData.x, spriteImageData.y, spriteImageData.width, spriteImageData.height, 0, 0, spriteImageData.width, spriteImageData.height);\n pattern = ctx.createPattern(canvas, 'repeat');\n patternCache[icon_cache_key] = pattern;\n }\n fill.setColor(pattern);\n }\n }\n } else {\n color = colorWithOpacity(getValue(layer, 'paint', layer.type + '-color', zoom, f, functionCache, featureState), opacity);\n if (layer.type + '-outline-color' in paint) {\n strokeColor = colorWithOpacity(getValue(layer, 'paint', layer.type + '-outline-color', zoom, f, functionCache, featureState), opacity);\n }\n if (!strokeColor) {\n strokeColor = color;\n }\n if (color || strokeColor) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || color && !style.getFill() || !color && style.getFill() || strokeColor && !style.getStroke() || !strokeColor && style.getStroke() || style.getText()) {\n style = new Style({\n fill: color ? new Fill() : undefined,\n stroke: strokeColor ? new Stroke() : undefined\n });\n styles[stylesLength] = style;\n }\n if (color) {\n fill = style.getFill();\n fill.setColor(color);\n }\n if (strokeColor) {\n stroke = style.getStroke();\n stroke.setColor(strokeColor);\n stroke.setWidth(0.5);\n }\n style.setZIndex(index);\n }\n }\n }\n if (type != 1 && layer.type == 'line') {\n if (!('line-pattern' in paint)) {\n color = colorWithOpacity(getValue(layer, 'paint', 'line-color', zoom, f, functionCache, featureState), getValue(layer, 'paint', 'line-opacity', zoom, f, functionCache, featureState));\n } else {\n color = undefined;\n }\n const width = getValue(layer, 'paint', 'line-width', zoom, f, functionCache, featureState);\n if (color && width > 0) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getStroke() || style.getFill() || style.getText()) {\n style = new Style({ stroke: new Stroke() });\n styles[stylesLength] = style;\n }\n stroke = style.getStroke();\n stroke.setLineCap(getValue(layer, 'layout', 'line-cap', zoom, f, functionCache, featureState));\n stroke.setLineJoin(getValue(layer, 'layout', 'line-join', zoom, f, functionCache, featureState));\n stroke.setMiterLimit(getValue(layer, 'layout', 'line-miter-limit', zoom, f, functionCache, featureState));\n stroke.setColor(color);\n stroke.setWidth(width);\n stroke.setLineDash(paint['line-dasharray'] ? getValue(layer, 'paint', 'line-dasharray', zoom, f, functionCache, featureState).map(function (x) {\n return x * width;\n }) : null);\n style.setZIndex(index);\n }\n }\n let hasImage = false;\n let text = null;\n let placementAngle = 0;\n let icon, iconImg, skipLabel;\n if ((type == 1 || type == 2) && 'icon-image' in layout) {\n const iconImage = getValue(layer, 'layout', 'icon-image', zoom, f, functionCache, featureState);\n if (iconImage) {\n icon = typeof iconImage === 'string' ? fromTemplate(iconImage, properties) : iconImage.toString();\n let styleGeom = undefined;\n const imageElement = getImage ? getImage(olLayer, icon) : undefined;\n if (spriteImage && spriteData && spriteData[icon] || imageElement) {\n const iconRotationAlignment = getValue(layer, 'layout', 'icon-rotation-alignment', zoom, f, functionCache, featureState);\n if (type == 2) {\n const geom = feature.getGeometry();\n // ol package and ol-debug.js only\n if (geom.getFlatMidpoint || geom.getFlatMidpoints) {\n const extent = geom.getExtent();\n const size = Math.sqrt(Math.max(Math.pow((extent[2] - extent[0]) / resolution, 2), Math.pow((extent[3] - extent[1]) / resolution, 2)));\n if (size > 150) {\n //FIXME Do not hard-code a size of 150\n const midpoint = geom.getType() === 'MultiLineString' ? geom.getFlatMidpoints() : geom.getFlatMidpoint();\n if (!renderFeature) {\n renderFeatureCoordinates = [\n NaN,\n NaN\n ];\n renderFeature = new RenderFeature('Point', renderFeatureCoordinates, [], 2, {}, undefined);\n }\n styleGeom = renderFeature;\n renderFeatureCoordinates[0] = midpoint[0];\n renderFeatureCoordinates[1] = midpoint[1];\n const placement = getValue(layer, 'layout', 'symbol-placement', zoom, f, functionCache, featureState);\n if (placement === 'line' && iconRotationAlignment === 'map') {\n const stride = geom.getStride();\n const coordinates = geom.getFlatCoordinates();\n for (let i = 0, ii = coordinates.length - stride; i < ii; i += stride) {\n const x1 = coordinates[i];\n const y1 = coordinates[i + 1];\n const x2 = coordinates[i + stride];\n const y2 = coordinates[i + stride + 1];\n const minX = Math.min(x1, x2);\n const maxX = Math.max(x1, x2);\n const xM = midpoint[0];\n const yM = midpoint[1];\n const dotProduct = (y2 - y1) * (xM - x1) - (x2 - x1) * (yM - y1);\n if (Math.abs(dotProduct) < 0.001 && //midpoint is aligned with the segment\n xM <= maxX && xM >= minX //midpoint is on the segment and not outside it\n) {\n placementAngle = Math.atan2(y1 - y2, x2 - x1);\n break;\n }\n }\n }\n }\n }\n }\n if (type !== 2 || styleGeom) {\n const iconSize = getValue(layer, 'layout', 'icon-size', zoom, f, functionCache, featureState);\n const iconColor = paint['icon-color'] !== undefined ? getValue(layer, 'paint', 'icon-color', zoom, f, functionCache, featureState) : null;\n if (!iconColor || iconColor.a !== 0) {\n const haloColor = getValue(layer, 'paint', 'icon-halo-color', zoom, f, functionCache, featureState);\n const haloWidth = getValue(layer, 'paint', 'icon-halo-width', zoom, f, functionCache, featureState);\n let iconCacheKey = `${ icon }.${ iconSize }.${ haloWidth }.${ haloColor }`;\n if (iconColor !== null) {\n iconCacheKey += `.${ iconColor }`;\n }\n iconImg = iconImageCache[iconCacheKey];\n if (!iconImg) {\n const declutterMode = getDeclutterMode(layer, zoom, f, 'icon', functionCache);\n let displacement;\n if ('icon-offset' in layout) {\n displacement = getValue(layer, 'layout', 'icon-offset', zoom, f, functionCache, featureState).slice(0);\n displacement[0] *= iconSize;\n displacement[1] *= -iconSize;\n }\n let color = iconColor ? [\n iconColor.r * 255,\n iconColor.g * 255,\n iconColor.b * 255,\n iconColor.a\n ] : undefined;\n if (imageElement) {\n const iconOptions = {\n color: color,\n rotateWithView: iconRotationAlignment === 'map',\n displacement: displacement,\n declutterMode: declutterMode,\n scale: iconSize\n };\n if (typeof imageElement === 'string') {\n // it is a src URL\n iconOptions.src = imageElement;\n } else {\n iconOptions.img = imageElement;\n iconOptions.imgSize = [\n imageElement.width,\n imageElement.height\n ];\n }\n iconImg = new Icon(iconOptions);\n } else {\n const spriteImageData = spriteData[icon];\n let img, size, offset;\n if (haloWidth) {\n if (spriteImageData.sdf) {\n img = drawIconHalo(drawSDF(spriteImage, spriteImageData, iconColor || [\n 0,\n 0,\n 0,\n 1\n ]), {\n x: 0,\n y: 0,\n width: spriteImageData.width,\n height: spriteImageData.height,\n pixelRatio: spriteImageData.pixelRatio\n }, haloWidth, haloColor);\n color = undefined; // do not tint haloed icons\n } else {\n img = drawIconHalo(spriteImage, spriteImageData, haloWidth, haloColor);\n }\n } else {\n if (spriteImageData.sdf) {\n if (!spriteImageUnSDFed) {\n spriteImageUnSDFed = drawSDF(spriteImage, {\n x: 0,\n y: 0,\n width: spriteImageSize[0],\n height: spriteImageSize[1]\n }, {\n r: 1,\n g: 1,\n b: 1,\n a: 1\n });\n }\n img = spriteImageUnSDFed;\n } else {\n img = spriteImage;\n }\n size = [\n spriteImageData.width,\n spriteImageData.height\n ];\n offset = [\n spriteImageData.x,\n spriteImageData.y\n ];\n }\n iconImg = new Icon({\n color: color,\n img: img,\n // @ts-ignore\n imgSize: spriteImageSize,\n size: size,\n offset: offset,\n rotateWithView: iconRotationAlignment === 'map',\n scale: iconSize / spriteImageData.pixelRatio,\n displacement: displacement,\n declutterMode: declutterMode\n });\n }\n iconImageCache[iconCacheKey] = iconImg;\n }\n }\n if (iconImg) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getImage() || style.getFill() || style.getStroke()) {\n style = new Style();\n styles[stylesLength] = style;\n }\n style.setGeometry(styleGeom);\n iconImg.setRotation(placementAngle + deg2rad(getValue(layer, 'layout', 'icon-rotate', zoom, f, functionCache, featureState)));\n iconImg.setOpacity(getValue(layer, 'paint', 'icon-opacity', zoom, f, functionCache, featureState));\n iconImg.setAnchor(anchor[getValue(layer, 'layout', 'icon-anchor', zoom, f, functionCache, featureState)]);\n style.setImage(iconImg);\n text = style.getText();\n style.setText(undefined);\n style.setZIndex(index);\n hasImage = true;\n skipLabel = false;\n }\n } else {\n skipLabel = true;\n }\n }\n }\n }\n if (type == 1 && layer.type === 'circle') {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getImage() || style.getFill() || style.getStroke()) {\n style = new Style();\n styles[stylesLength] = style;\n }\n const circleRadius = 'circle-radius' in paint ? getValue(layer, 'paint', 'circle-radius', zoom, f, functionCache, featureState) : 5;\n const circleStrokeColor = colorWithOpacity(getValue(layer, 'paint', 'circle-stroke-color', zoom, f, functionCache, featureState), getValue(layer, 'paint', 'circle-stroke-opacity', zoom, f, functionCache, featureState));\n const circleTranslate = getValue(layer, 'paint', 'circle-translate', zoom, f, functionCache, featureState);\n const circleColor = colorWithOpacity(getValue(layer, 'paint', 'circle-color', zoom, f, functionCache, featureState), getValue(layer, 'paint', 'circle-opacity', zoom, f, functionCache, featureState));\n const circleStrokeWidth = getValue(layer, 'paint', 'circle-stroke-width', zoom, f, functionCache, featureState);\n const cache_key = circleRadius + '.' + circleStrokeColor + '.' + circleColor + '.' + circleStrokeWidth + '.' + circleTranslate[0] + '.' + circleTranslate[1];\n iconImg = iconImageCache[cache_key];\n if (!iconImg) {\n iconImg = new Circle({\n radius: circleRadius,\n displacement: [\n circleTranslate[0],\n -circleTranslate[1]\n ],\n stroke: circleStrokeColor && circleStrokeWidth > 0 ? new Stroke({\n width: circleStrokeWidth,\n color: circleStrokeColor\n }) : undefined,\n fill: circleColor ? new Fill({ color: circleColor }) : undefined,\n declutterMode: 'none'\n });\n iconImageCache[cache_key] = iconImg;\n }\n style.setImage(iconImg);\n text = style.getText();\n style.setText(undefined);\n style.setGeometry(undefined);\n style.setZIndex(index);\n hasImage = true;\n }\n let label, font, textLineHeight, textSize, letterSpacing, maxTextWidth;\n if ('text-field' in layout) {\n textSize = Math.round(getValue(layer, 'layout', 'text-size', zoom, f, functionCache, featureState));\n const fontArray = getValue(layer, 'layout', 'text-font', zoom, f, functionCache, featureState);\n textLineHeight = getValue(layer, 'layout', 'text-line-height', zoom, f, functionCache, featureState);\n font = mb2css(getFonts ? getFonts(fontArray, glStyle.metadata ? glStyle.metadata['ol:webfonts'] : undefined) : fontArray, textSize, textLineHeight);\n if (!font.includes('sans-serif')) {\n font += ',sans-serif';\n }\n letterSpacing = getValue(layer, 'layout', 'text-letter-spacing', zoom, f, functionCache, featureState);\n maxTextWidth = getValue(layer, 'layout', 'text-max-width', zoom, f, functionCache, featureState);\n const textField = getValue(layer, 'layout', 'text-field', zoom, f, functionCache, featureState);\n if (typeof textField === 'object' && textField.sections) {\n if (textField.sections.length === 1) {\n label = textField.toString();\n } else {\n label = textField.sections.reduce((acc, chunk, i) => {\n const fonts = chunk.fontStack ? chunk.fontStack.split(',') : fontArray;\n const chunkFont = mb2css(getFonts ? getFonts(fonts) : fonts, textSize * (chunk.scale || 1), textLineHeight);\n let text = chunk.text;\n if (text === '\\n') {\n acc.push('\\n', '');\n return acc;\n }\n if (type == 2) {\n acc.push(applyLetterSpacing(text, letterSpacing), chunkFont);\n return acc;\n }\n text = wrapText(text, chunkFont, maxTextWidth, letterSpacing).split('\\n');\n for (let i = 0, ii = text.length; i < ii; ++i) {\n if (i > 0) {\n acc.push('\\n', '');\n }\n acc.push(text[i], chunkFont);\n }\n return acc;\n }, []);\n }\n } else {\n label = fromTemplate(textField, properties).trim();\n }\n opacity = getValue(layer, 'paint', 'text-opacity', zoom, f, functionCache, featureState);\n }\n if (label && opacity && !skipLabel) {\n if (!hasImage) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getText() || style.getFill() || style.getStroke()) {\n style = new Style();\n styles[stylesLength] = style;\n }\n style.setImage(undefined);\n style.setGeometry(undefined);\n }\n const declutterMode = getDeclutterMode(layer, zoom, f, 'text', functionCache);\n if (!style.getText()) {\n style.setText(text);\n }\n text = style.getText();\n if (!text || 'getDeclutterMode' in text && text.getDeclutterMode() !== declutterMode) {\n text = new Text({\n padding: [\n 2,\n 2,\n 2,\n 2\n ],\n // @ts-ignore\n declutterMode: declutterMode\n });\n style.setText(text);\n }\n const textTransform = getValue(layer, 'layout', 'text-transform', zoom, f, functionCache, featureState);\n if (textTransform == 'uppercase') {\n label = Array.isArray(label) ? label.map((t, i) => i % 2 ? t : t.toUpperCase()) : label.toUpperCase();\n } else if (textTransform == 'lowercase') {\n label = Array.isArray(label) ? label.map((t, i) => i % 2 ? t : t.toLowerCase()) : label.toLowerCase();\n }\n const wrappedLabel = Array.isArray(label) ? label : type == 2 ? applyLetterSpacing(label, letterSpacing) : wrapText(label, font, maxTextWidth, letterSpacing);\n text.setText(wrappedLabel);\n text.setFont(font);\n text.setRotation(deg2rad(getValue(layer, 'layout', 'text-rotate', zoom, f, functionCache, featureState)));\n if (typeof text.setKeepUpright === 'function') {\n const keepUpright = getValue(layer, 'layout', 'text-keep-upright', zoom, f, functionCache, featureState);\n text.setKeepUpright(keepUpright);\n }\n const textAnchor = getValue(layer, 'layout', 'text-anchor', zoom, f, functionCache, featureState);\n const placement = hasImage || type == 1 ? 'point' : getValue(layer, 'layout', 'symbol-placement', zoom, f, functionCache, featureState);\n let textAlign;\n if (placement === 'line-center') {\n text.setPlacement('line');\n textAlign = 'center';\n } else {\n text.setPlacement(placement);\n }\n if (placement === 'line' && typeof text.setRepeat === 'function') {\n const symbolSpacing = getValue(layer, 'layout', 'symbol-spacing', zoom, f, functionCache, featureState);\n text.setRepeat(symbolSpacing * 2);\n }\n text.setOverflow(placement === 'point');\n let textHaloWidth = getValue(layer, 'paint', 'text-halo-width', zoom, f, functionCache, featureState);\n const textOffset = getValue(layer, 'layout', 'text-offset', zoom, f, functionCache, featureState);\n const textTranslate = getValue(layer, 'paint', 'text-translate', zoom, f, functionCache, featureState);\n // Text offset has to take halo width and line height into account\n let vOffset = 0;\n let hOffset = 0;\n if (placement == 'point') {\n textAlign = 'center';\n if (textAnchor.indexOf('left') !== -1) {\n textAlign = 'left';\n hOffset = textHaloWidth;\n } else if (textAnchor.indexOf('right') !== -1) {\n textAlign = 'right';\n hOffset = -textHaloWidth;\n }\n const textRotationAlignment = getValue(layer, 'layout', 'text-rotation-alignment', zoom, f, functionCache, featureState);\n text.setRotateWithView(textRotationAlignment == 'map');\n } else {\n text.setMaxAngle(deg2rad(getValue(layer, 'layout', 'text-max-angle', zoom, f, functionCache, featureState)) * label.length / wrappedLabel.length);\n text.setRotateWithView(false);\n }\n text.setTextAlign(textAlign);\n let textBaseline = 'middle';\n if (textAnchor.indexOf('bottom') == 0) {\n textBaseline = 'bottom';\n vOffset = -textHaloWidth - 0.5 * (textLineHeight - 1) * textSize;\n } else if (textAnchor.indexOf('top') == 0) {\n textBaseline = 'top';\n vOffset = textHaloWidth + 0.5 * (textLineHeight - 1) * textSize;\n }\n text.setTextBaseline(textBaseline);\n const textJustify = getValue(layer, 'layout', 'text-justify', zoom, f, functionCache, featureState);\n text.setJustify(textJustify === 'auto' ? undefined : textJustify);\n text.setOffsetX(textOffset[0] * textSize + hOffset + textTranslate[0]);\n text.setOffsetY(textOffset[1] * textSize + vOffset + textTranslate[1]);\n textColor.setColor(colorWithOpacity(getValue(layer, 'paint', 'text-color', zoom, f, functionCache, featureState), opacity));\n text.setFill(textColor);\n const haloColor = colorWithOpacity(getValue(layer, 'paint', 'text-halo-color', zoom, f, functionCache, featureState), opacity);\n if (haloColor && textHaloWidth > 0) {\n textHalo.setColor(haloColor);\n // spec here : https://docs.mapbox.com/mapbox-gl-js/style-spec/#paint-symbol-text-halo-width\n // Halo width must be doubled because it is applied around the center of the text outline\n textHaloWidth *= 2;\n // 1/4 of text size (spec) x 2\n const halfTextSize = 0.5 * textSize;\n textHalo.setWidth(textHaloWidth <= halfTextSize ? textHaloWidth : halfTextSize);\n text.setStroke(textHalo);\n } else {\n text.setStroke(undefined);\n }\n const textPadding = getValue(layer, 'layout', 'text-padding', zoom, f, functionCache, featureState);\n const padding = text.getPadding();\n if (textPadding !== padding[0]) {\n padding[0] = textPadding;\n padding[1] = textPadding;\n padding[2] = textPadding;\n padding[3] = textPadding;\n }\n style.setZIndex(index);\n }\n }\n }\n if (stylesLength > -1) {\n styles.length = stylesLength + 1;\n if (recordLayer) {\n if ('set' in feature) {\n // ol/Feature\n feature.set('mapbox-layer', featureBelongsToLayer);\n } else {\n // ol/render/Feature\n feature.getProperties()['mapbox-layer'] = featureBelongsToLayer;\n }\n }\n return styles;\n }\n return undefined;\n };\n olLayer.setStyle(styleFunction);\n olLayer.set('mapbox-source', mapboxSource);\n olLayer.set('mapbox-layers', mapboxLayers);\n olLayer.set('mapbox-featurestate', olLayer.get('mapbox-featurestate') || {});\n return styleFunction;\n}\n/**\n * Get the the style for a specific Mapbox layer only. This can be useful for creating a legend.\n * @param {import(\"ol/Feature\").default|import(\"ol/render/Feature\").default} feature OpenLayers feature.\n * @param {number} resolution View resolution.\n * @param {import(\"ol/layer\").Vector|import(\"ol/layer\").VectorTile} olLayer OpenLayers layer.\n * @param {string} layerId Id of the Mapbox layer to get the style for\n * @return {Array} Styles for the provided Mapbox layer.\n */\nfunction getStyleForLayer(feature, resolution, olLayer, layerId) {\n const evaluateStyle = olLayer.getStyleFunction();\n if (evaluateStyle.length === 3) {\n // @ts-ignore\n return evaluateStyle(feature, resolution, layerId);\n }\n return undefined;\n}\n\n/**\n * Generates a shaded relief image given elevation data. Uses a 3x3\n * neighborhood for determining slope and aspect.\n * @param {Array} inputs Array of input images.\n * @param {Object} data Data added in the \"beforeoperations\" event.\n * @return {ImageData} Output image.\n */\nfunction hillshade(inputs, data) {\n const elevationImage = inputs[0];\n const width = elevationImage.width;\n const height = elevationImage.height;\n const elevationData = elevationImage.data;\n const shadeData = new Uint8ClampedArray(elevationData.length);\n const dp = data.resolution * 2;\n const maxX = width - 1;\n const maxY = height - 1;\n const pixel = [\n 0,\n 0,\n 0,\n 0\n ];\n const twoPi = 2 * Math.PI;\n const halfPi = Math.PI / 2;\n const sunEl = Math.PI * data.sunEl / 180;\n const sunAz = Math.PI * data.sunAz / 180;\n const cosSunEl = Math.cos(sunEl);\n const sinSunEl = Math.sin(sunEl);\n const highlightColor = data.highlightColor;\n const shadowColor = data.shadowColor;\n const accentColor = data.accentColor;\n const encoding = data.encoding;\n let pixelX, pixelY, x0, x1, y0, y1, offset, z0, z1, dzdx, dzdy, slope, aspect, accent, scaled, shade, scaledAccentColor, compositeShadeColor, clamp, slopeScaleBase, scaledSlope, cosIncidence;\n function calculateElevation(pixel, encoding = 'mapbox') {\n // The method used to extract elevations from the DEM.\n //\n // The supported methods are the Mapbox format\n // (red * 256 * 256 + green * 256 + blue) * 0.1 - 10000\n // and the Terrarium format\n // (red * 256 + green + blue / 256) - 32768\n //\n if (encoding === 'mapbox') {\n return (pixel[0] * 256 * 256 + pixel[1] * 256 + pixel[2]) * 0.1 - 10000;\n }\n if (encoding === 'terrarium') {\n return pixel[0] * 256 + pixel[1] + pixel[2] / 256 - 32768;\n }\n }\n for (pixelY = 0; pixelY <= maxY; ++pixelY) {\n y0 = pixelY === 0 ? 0 : pixelY - 1;\n y1 = pixelY === maxY ? maxY : pixelY + 1;\n for (pixelX = 0; pixelX <= maxX; ++pixelX) {\n x0 = pixelX === 0 ? 0 : pixelX - 1;\n x1 = pixelX === maxX ? maxX : pixelX + 1;\n // determine elevation for (x0, pixelY)\n offset = (pixelY * width + x0) * 4;\n pixel[0] = elevationData[offset];\n pixel[1] = elevationData[offset + 1];\n pixel[2] = elevationData[offset + 2];\n pixel[3] = elevationData[offset + 3];\n z0 = data.vert * calculateElevation(pixel, encoding);\n // determine elevation for (x1, pixelY)\n offset = (pixelY * width + x1) * 4;\n pixel[0] = elevationData[offset];\n pixel[1] = elevationData[offset + 1];\n pixel[2] = elevationData[offset + 2];\n pixel[3] = elevationData[offset + 3];\n z1 = data.vert * calculateElevation(pixel, encoding);\n dzdx = (z1 - z0) / dp;\n // determine elevation for (pixelX, y0)\n offset = (y0 * width + pixelX) * 4;\n pixel[0] = elevationData[offset];\n pixel[1] = elevationData[offset + 1];\n pixel[2] = elevationData[offset + 2];\n pixel[3] = elevationData[offset + 3];\n z0 = data.vert * calculateElevation(pixel, encoding);\n // determine elevation for (pixelX, y1)\n offset = (y1 * width + pixelX) * 4;\n pixel[0] = elevationData[offset];\n pixel[1] = elevationData[offset + 1];\n pixel[2] = elevationData[offset + 2];\n pixel[3] = elevationData[offset + 3];\n z1 = data.vert * calculateElevation(pixel, encoding);\n dzdy = (z1 - z0) / dp;\n aspect = Math.atan2(dzdy, -dzdx);\n if (aspect < 0) {\n aspect = halfPi - aspect;\n } else if (aspect > halfPi) {\n aspect = twoPi - aspect + halfPi;\n } else {\n aspect = halfPi - aspect;\n }\n // Bootstrap slope and corresponding incident values\n slope = Math.atan(Math.sqrt(dzdx * dzdx + dzdy * dzdy));\n cosIncidence = sinSunEl * Math.cos(slope) + cosSunEl * Math.sin(slope) * Math.cos(sunAz - aspect);\n accent = Math.cos(slope);\n // 255 for Hex colors\n scaled = 255 * cosIncidence;\n /*\n * The following is heavily inspired\n * by [Maplibre's equivalent WebGL shader](https://github.com/maplibre/maplibre-gl-js/blob/main/src/shaders/hillshade.fragment.glsl)\n */\n // Forces given value to stay between two given extremes\n clamp = Math.min(Math.max(2 * data.sunEl, 0), 1);\n // Intensity basis for hillshade opacity\n slopeScaleBase = 1.875 - data.opacity * 1.75;\n // Intensity interpolation so that higher intensity values create more opaque hillshading\n scaledSlope = data.opacity !== 0.5 ? halfPi * ((Math.pow(slopeScaleBase, slope) - 1) / (Math.pow(slopeScaleBase, halfPi) - 1)) : slope;\n // Accent hillshade color with given accentColor to emphasize rougher terrain\n scaledAccentColor = {\n r: (1 - accent) * accentColor.r * clamp * 255,\n g: (1 - accent) * accentColor.g * clamp * 255,\n b: (1 - accent) * accentColor.b * clamp * 255,\n a: (1 - accent) * accentColor.a * clamp * 255\n };\n // Allows highlight vs shadow discrimination\n shade = Math.abs(((aspect + sunAz) / Math.PI + 0.5) % 2 - 1);\n // Creates a composite color mix between highlight & shadow colors to emphasize slopes\n compositeShadeColor = {\n r: (highlightColor.r * (1 - shade) + shadowColor.r * shade) * scaled,\n g: (highlightColor.g * (1 - shade) + shadowColor.g * shade) * scaled,\n b: (highlightColor.b * (1 - shade) + shadowColor.b * shade) * scaled,\n a: (highlightColor.a * (1 - shade) + shadowColor.a * shade) * scaled\n };\n // Fill in result color value\n offset = (pixelY * width + pixelX) * 4;\n shadeData[offset] = scaledAccentColor.r * (1 - shade) + compositeShadeColor.r;\n shadeData[offset + 1] = scaledAccentColor.g * (1 - shade) + compositeShadeColor.g;\n shadeData[offset + 2] = scaledAccentColor.b * (1 - shade) + compositeShadeColor.b;\n // Key opacity on the scaledSlope to improve legibility by increasing higher elevation rates' contrast\n shadeData[offset + 3] = elevationData[offset + 3] * data.opacity * clamp * Math.sin(scaledSlope);\n }\n }\n return new ImageData(shadeData, width, height);\n}\n\n/*\nol-mapbox-style - Use Mapbox/MapLibre Style objects with OpenLayers\nCopyright 2016-present ol-mapbox-style contributors\nLicense: https://raw.githubusercontent.com/openlayers/ol-mapbox-style/master/LICENSE\n*/\n/**\n * @typedef {Object} FeatureIdentifier\n * @property {string|number} id The feature id.\n * @property {string} source The source id.\n */\n/**\n * @typedef {Object} Options\n * @property {string} [accessToken] Access token for 'mapbox://' urls.\n * @property {function(string, import(\"./util.js\").ResourceType): (Request|string|Promise|void)} [transformRequest]\n * Function for controlling how `ol-mapbox-style` fetches resources. Can be used for modifying\n * the url, adding headers or setting credentials options. Called with the url and the resource\n * type as arguments, this function is supposed to return a `Request` or a url `string`, or a promise tehereof.\n * Without a return value the original request will not be modified.\n * @property {string} [projection='EPSG:3857'] Only useful when working with non-standard projections.\n * Code of a projection registered with OpenLayers. All sources of the style must be provided in this\n * projection. The projection must also have a valid extent defined, which will be used to determine the\n * origin and resolutions of the tile grid for all tiled sources of the style. When provided, the bbox\n * placeholder in tile and geojson urls changes: the default is `{bbox-epsg-3857}`, when projection is e.g.\n * set to `EPSG:4326`, the bbox placeholder will be `{bbox-epsg-4326}`.\n * @property {Array} [resolutions] Only useful when working with non-standard projections.\n * Resolutions for mapping resolution to the `zoom` used in the Mapbox/MapLibre style.\n * @property {string} [styleUrl] URL of the Mapbox GL style. Required for styles that were provided\n * as object, when they contain a relative sprite url, or sources referencing data by relative url.\n * @property {string} [webfonts] Template for resolving webfonts. Can be used to specify where to fetch\n * web fonts when no `ol:webfonts` metadata is set in the style object. See `getFonts()` and the\n * \"Font handling\" section in `README.md` for details.\n * @property {function(VectorLayer|VectorTileLayer, string):HTMLImageElement|HTMLCanvasElement|string|undefined} [getImage=undefined]\n * Function that returns an image for an icon name. If the result is an HTMLImageElement, it must already be\n * loaded. The layer can be used to call layer.changed() when the loading and processing of the image has finished.\n * This function be used for icons not in the sprite or to override sprite icons.\n * @property {string} [accessTokenParam='access_token'] Access token param. For internal use.\n */\n/**\n * @typedef {Object} ApplyStyleOptions\n * @property {string} [source=''] Source. Default is `''`, which causes the first source in the\n * style to be used.\n * @property {Array} [layers] Layers. If no source is provided, the layers with the\n * provided ids will be used from the style's `layers` array. All layers need to use the same source.\n * @property {boolean} [updateSource=true] Update or create vector (tile) layer source with parameters\n * specified for the source in the mapbox style definition.\n */\n/**\n * @param {import(\"ol/proj/Projection.js\").default} projection Projection.\n * @param {number} [tileSize=512] Tile size.\n * @return {Array} Resolutions.\n */\nfunction getTileResolutions(projection, tileSize = 512) {\n return projection.getExtent() ? createXYZ({\n extent: projection.getExtent(),\n tileSize: tileSize,\n maxZoom: 22\n }).getResolutions() : defaultResolutions;\n}\n/**\n * @param {string} styleUrl Style URL.\n * @param {Options} options Options.\n * @return {Options} Completed options with accessToken and accessTokenParam.\n */\nfunction completeOptions(styleUrl, options) {\n if (!options.accessToken) {\n options = Object.assign({}, options);\n const searchParams = new URL(styleUrl).searchParams;\n // The last search parameter is the access token\n searchParams.forEach((value, key) => {\n options.accessToken = value;\n options.accessTokenParam = key;\n });\n }\n return options;\n}\n/**\n * Applies a style function to an `ol/layer/VectorTile` or `ol/layer/Vector`\n * with an `ol/source/VectorTile` or an `ol/source/Vector`. If the layer does not have a source\n * yet, it will be created and populated from the information in the `glStyle` (unless `updateSource` is\n * set to `false`).\n *\n * **Example:**\n * ```js\n * import {applyStyle} from 'ol-mapbox-style';\n * import {VectorTile} from 'ol/layer.js';\n *\n * const layer = new VectorTile({declutter: true});\n * applyStyle(layer, 'https://api.maptiler.com/maps/basic/style.json?key=YOUR_OPENMAPTILES_TOKEN');\n * ```\n *\n * The style function will render all layers from the `glStyle` object that use the source\n * of the first layer, the specified `source`, or a subset of layers from the same source. The\n * source needs to be a `\"type\": \"vector\"` or `\"type\": \"geojson\"` source.\n *\n * Two additional properties will be set on the provided layer:\n *\n * * `mapbox-source`: The `id` of the Mapbox/MapLibre Style document's source that the\n * OpenLayers layer was created from. Usually `apply()` creates one\n * OpenLayers layer per Mapbox/MapLibre Style source, unless the layer stack has\n * layers from different sources in between.\n * * `mapbox-layers`: The `id`s of the Mapbox/MapLibre Style document's layers that are\n * included in the OpenLayers layer.\n *\n * @param {VectorTileLayer|VectorLayer} layer OpenLayers layer. When the layer has a source configured,\n * it will be modified to use the configuration from the glStyle's `source`. Options specified on the\n * layer's source will override those from the glStyle's `source`, except for `url` and\n * `tileUrlFunction`. When the source projection is the default (`EPSG:3857`), the `tileGrid` will\n * also be overridden. If you'd rather not have ol-mapbox-style modify the source, configure `applyStyle()`\n * with the `updateSource: false` option.\n * @param {string|Object} glStyle Mapbox/MapLibre Style object.\n * @param {string|Array|Options&ApplyStyleOptions} [sourceOrLayersOrOptions] Options or\n * `source` key or an array of layer `id`s from the Mapbox/MapLibre Style object. When a `source` key is\n * provided, all layers for the specified source will be included in the style function. When layer\n * `id`s are provided, they must be from layers that use the same source. When not provided or a falsey\n * value, all layers using the first source specified in the glStyle will be rendered.\n * @param {Options&ApplyStyleOptions|string} [optionsOrPath] **Deprecated**. Options. Alternatively the path of the style file\n * (only required when a relative path is used for the `\"sprite\"` property of the style).\n * @param {Array} [resolutions] **Deprecated**. Resolutions for mapping resolution to zoom level.\n * Only needed when working with non-standard tile grids or projections, can also be supplied with\n * options.\n * @return {Promise} Promise which will be resolved when the style can be used\n * for rendering.\n */\nfunction applyStyle(layer, glStyle, sourceOrLayersOrOptions = '', optionsOrPath = {}, resolutions = undefined) {\n let styleUrl, sourceId;\n /** @type {Options&ApplyStyleOptions} */\n let options;\n let sourceOrLayers;\n let updateSource = true;\n if (typeof sourceOrLayersOrOptions !== 'string' && !Array.isArray(sourceOrLayersOrOptions)) {\n options = sourceOrLayersOrOptions;\n sourceOrLayers = options.source || options.layers;\n optionsOrPath = options;\n } else {\n sourceOrLayers = sourceOrLayersOrOptions;\n }\n if (typeof optionsOrPath === 'string') {\n styleUrl = optionsOrPath;\n options = {};\n } else {\n styleUrl = optionsOrPath.styleUrl;\n options = optionsOrPath;\n }\n if (options.updateSource === false) {\n updateSource = false;\n }\n if (!resolutions) {\n resolutions = options.resolutions;\n }\n if (!styleUrl && typeof glStyle === 'string' && !glStyle.trim().startsWith('{')) {\n styleUrl = glStyle;\n }\n if (styleUrl) {\n styleUrl = styleUrl.startsWith('data:') ? location.href : normalizeStyleUrl(styleUrl, options.accessToken);\n options = completeOptions(styleUrl, options);\n }\n return new Promise(function (resolve, reject) {\n // TODO: figure out where best place to check source type is\n // Note that the source arg is an array of gl layer ids and each must be\n // dereferenced to get source type to validate\n getGlStyle(glStyle, options).then(function (glStyle) {\n if (glStyle.version != 8) {\n return reject(new Error('glStyle version 8 required.'));\n }\n if (!(layer instanceof VectorLayer || layer instanceof VectorTileLayer)) {\n return reject(new Error('Can only apply to VectorLayer or VectorTileLayer'));\n }\n const type = layer instanceof VectorTileLayer ? 'vector' : 'geojson';\n if (!sourceOrLayers) {\n sourceId = Object.keys(glStyle.sources).find(function (key) {\n return glStyle.sources[key].type === type;\n });\n sourceOrLayers = sourceId;\n } else if (Array.isArray(sourceOrLayers)) {\n sourceId = glStyle.layers.find(function (layer) {\n return layer.id === sourceOrLayers[0];\n }).source;\n } else {\n sourceId = sourceOrLayers;\n }\n if (!sourceId) {\n return reject(new Error(`No ${ type } source found in the glStyle.`));\n }\n function assignSource() {\n if (!updateSource) {\n return Promise.resolve();\n }\n if (layer instanceof VectorTileLayer) {\n return setupVectorSource(glStyle.sources[sourceId], styleUrl, options).then(function (source) {\n const targetSource = layer.getSource();\n if (!targetSource) {\n layer.setSource(source);\n } else if (source !== targetSource) {\n targetSource.setTileUrlFunction(source.getTileUrlFunction());\n if (typeof targetSource.setUrls === 'function' && typeof source.getUrls === 'function') {\n // to get correct keys for tile cache and queue\n targetSource.setUrls(source.getUrls());\n }\n //@ts-ignore\n if (!targetSource.format_) {\n //@ts-ignore\n targetSource.format_ = source.format_;\n }\n if (!targetSource.getAttributions()) {\n targetSource.setAttributions(source.getAttributions());\n }\n if (targetSource.getTileLoadFunction() === defaultLoadFunction) {\n targetSource.setTileLoadFunction(source.getTileLoadFunction());\n }\n if (equivalent(targetSource.getProjection(), source.getProjection())) {\n targetSource.tileGrid = source.getTileGrid();\n }\n }\n const tileGrid = layer.getSource().getTileGrid();\n if (!isFinite(layer.getMaxResolution()) && !isFinite(layer.getMinZoom()) && tileGrid.getMinZoom() > 0) {\n layer.setMaxResolution(getResolutionForZoom(Math.max(0, tileGrid.getMinZoom() - 1e-12), tileGrid.getResolutions()));\n }\n });\n }\n const glSource = glStyle.sources[sourceId];\n let source = layer.getSource();\n if (!source || source.get('mapbox-source') !== glSource) {\n source = setupGeoJSONSource(glSource, styleUrl, options);\n }\n const targetSource = layer.getSource();\n if (!targetSource) {\n layer.setSource(source);\n } else if (source !== targetSource) {\n if (!targetSource.getAttributions()) {\n targetSource.setAttributions(source.getAttributions());\n }\n //@ts-ignore\n if (!targetSource.format_) {\n //@ts-ignore\n targetSource.format_ = source.getFormat();\n }\n //@ts-ignore\n targetSource.url_ = source.getUrl();\n }\n return Promise.resolve();\n }\n let spriteScale, spriteData, spriteImageUrl, style;\n function onChange() {\n if (!style && (!glStyle.sprite || spriteData)) {\n if (options.projection && !resolutions) {\n const projection = get$1(options.projection);\n const units = projection.getUnits();\n if (units !== 'm') {\n resolutions = defaultResolutions.map(resolution => resolution / METERS_PER_UNIT[units]);\n }\n }\n style = stylefunction(layer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, (fonts, templateUrl = options.webfonts) => getFonts(fonts, templateUrl), options.getImage);\n if (!layer.getStyle()) {\n reject(new Error(`Nothing to show for source [${ sourceId }]`));\n } else {\n assignSource().then(resolve).catch(reject);\n }\n } else if (style) {\n layer.setStyle(style);\n assignSource().then(resolve).catch(reject);\n } else {\n reject(new Error('Something went wrong trying to apply style.'));\n }\n }\n if (glStyle.sprite) {\n const sprite = new URL(normalizeSpriteUrl(glStyle.sprite, options.accessToken, styleUrl || location.href));\n spriteScale = window.devicePixelRatio >= 1.5 ? 0.5 : 1;\n const sizeFactor = spriteScale == 0.5 ? '@2x' : '';\n let spriteUrl = sprite.origin + sprite.pathname + sizeFactor + '.json' + sprite.search;\n new Promise(function (resolve, reject) {\n fetchResource('Sprite', spriteUrl, options).then(resolve).catch(function (error) {\n spriteUrl = sprite.origin + sprite.pathname + '.json' + sprite.search;\n fetchResource('Sprite', spriteUrl, options).then(resolve).catch(reject);\n });\n }).then(function (spritesJson) {\n if (spritesJson === undefined) {\n reject(new Error('No sprites found.'));\n }\n spriteData = spritesJson;\n spriteImageUrl = sprite.origin + sprite.pathname + sizeFactor + '.png' + sprite.search;\n if (options.transformRequest) {\n const transformed = options.transformRequest(spriteImageUrl, 'SpriteImage') || spriteImageUrl;\n if (transformed instanceof Request || transformed instanceof Promise) {\n spriteImageUrl = transformed;\n }\n }\n onChange();\n }).catch(function (err) {\n reject(new Error(`Sprites cannot be loaded: ${ spriteUrl }: ${ err.message }`));\n });\n } else {\n onChange();\n }\n }).catch(reject);\n });\n}\nconst emptyObj = {};\nfunction setFirstBackground(mapOrLayer, glStyle, options) {\n glStyle.layers.some(function (layer) {\n if (layer.type === 'background') {\n if (mapOrLayer instanceof Layer) {\n mapOrLayer.setBackground(function (resolution) {\n return getBackgroundColor(layer, resolution, options, {});\n });\n return true;\n }\n if (mapOrLayer instanceof Map || mapOrLayer instanceof LayerGroup) {\n mapOrLayer.getLayers().insertAt(0, setupBackgroundLayer(layer, options, {}));\n return true;\n }\n }\n });\n}\n/**\n * Applies properties of the Mapbox/MapLibre Style's first `background` layer to the\n * provided map or layer (group).\n *\n * **Example:**\n * ```js\n * import {applyBackground} from 'ol-mapbox-style';\n * import {Map} from 'ol';\n *\n * const map = new Map({target: 'map'});\n * applyBackground(map, 'https://api.maptiler.com/maps/basic/style.json?key=YOUR_OPENMAPTILES_TOKEN');\n * ```\n * @param {Map|import(\"ol/layer/Base.js\").default} mapOrLayer OpenLayers Map or layer (group).\n * @param {Object|string} glStyle Mapbox/MapLibre Style object or url.\n * @param {Options} options Options.\n * @return {Promise} Promise that resolves when the background is applied.\n */\nfunction applyBackground(mapOrLayer, glStyle, options = {}) {\n return getGlStyle(glStyle, options).then(function (glStyle) {\n setFirstBackground(mapOrLayer, glStyle, options);\n });\n}\nfunction getSourceIdByRef(layers, ref) {\n let sourceId;\n layers.some(function (layer) {\n if (layer.id == ref) {\n sourceId = layer.source;\n return true;\n }\n });\n return sourceId;\n}\nfunction extentFromTileJSON(tileJSON, projection) {\n const bounds = tileJSON.bounds;\n if (bounds) {\n const ll = fromLonLat([\n bounds[0],\n bounds[1]\n ], projection);\n const tr = fromLonLat([\n bounds[2],\n bounds[3]\n ], projection);\n return [\n ll[0],\n ll[1],\n tr[0],\n tr[1]\n ];\n }\n return get$1(projection).getExtent();\n}\nfunction sourceOptionsFromTileJSON(glSource, tileJSON, options) {\n const tileJSONSource = new TileJSON({\n tileJSON: tileJSON,\n tileSize: glSource.tileSize || tileJSON.tileSize || 512\n });\n const tileJSONDoc = tileJSONSource.getTileJSON();\n const tileGrid = tileJSONSource.getTileGrid();\n const projection = get$1(options.projection || 'EPSG:3857');\n const extent = extentFromTileJSON(tileJSONDoc, projection);\n const projectionExtent = projection.getExtent();\n const minZoom = tileJSONDoc.minzoom || 0;\n const maxZoom = tileJSONDoc.maxzoom || 22;\n /** @type {import(\"ol/source/VectorTile.js\").Options} */\n const sourceOptions = {\n attributions: tileJSONSource.getAttributions(),\n projection: projection,\n tileGrid: new TileGrid({\n origin: projectionExtent ? getTopLeft(projectionExtent) : tileGrid.getOrigin(0),\n extent: extent || tileGrid.getExtent(),\n minZoom: minZoom,\n resolutions: getTileResolutions(projection, tileJSON.tileSize).slice(0, maxZoom + 1),\n tileSize: tileGrid.getTileSize(0)\n })\n };\n if (Array.isArray(tileJSONDoc.tiles)) {\n sourceOptions.urls = tileJSONDoc.tiles;\n } else {\n sourceOptions.url = tileJSONDoc.tiles;\n }\n return sourceOptions;\n}\nfunction getBackgroundColor(glLayer, resolution, options, functionCache) {\n const background = {\n id: glLayer.id,\n type: glLayer.type\n };\n const layout = glLayer.layout || {};\n const paint = glLayer.paint || {};\n background['paint'] = paint;\n const zoom = getZoomForResolution(resolution, options.resolutions || defaultResolutions);\n let opacity;\n const bg = getValue(background, 'paint', 'background-color', zoom, emptyObj, functionCache);\n if (paint['background-opacity'] !== undefined) {\n opacity = getValue(background, 'paint', 'background-opacity', zoom, emptyObj, functionCache);\n }\n return layout.visibility == 'none' ? undefined : colorWithOpacity(bg, opacity);\n}\n/**\n * @param {Object} glLayer Mapbox/MapLibre Style layer object.\n * @param {Options} options Options.\n * @param {Object} functionCache Cache for functions.\n * @return {Layer} OpenLayers layer.\n */\nfunction setupBackgroundLayer(glLayer, options, functionCache) {\n const div = document.createElement('div');\n div.className = 'ol-mapbox-style-background';\n div.style.position = 'absolute';\n div.style.width = '100%';\n div.style.height = '100%';\n return new Layer({\n source: new Source({}),\n render(frameState) {\n const color = getBackgroundColor(glLayer, frameState.viewState.resolution, options, functionCache);\n div.style.backgroundColor = color;\n return div;\n }\n });\n}\n/**\n * Creates an OpenLayers VectorTile source for a gl source entry.\n * @param {Object} glSource \"source\" entry from a Mapbox/MapLibre Style object.\n * @param {string|undefined} styleUrl URL to use for the source. This is expected to be the complete http(s) url,\n * with access key applied.\n * @param {Options} options Options.\n * @return {Promise} Promise resolving to a VectorTile source.\n * @private\n */\nfunction setupVectorSource(glSource, styleUrl, options) {\n return new Promise(function (resolve, reject) {\n getTileJson(glSource, styleUrl, options).then(function ({tileJson, tileLoadFunction}) {\n const sourceOptions = sourceOptionsFromTileJSON(glSource, tileJson, options);\n sourceOptions.tileLoadFunction = tileLoadFunction;\n sourceOptions.format = new MVT();\n resolve(new VectorTileSource(sourceOptions));\n }).catch(reject);\n });\n}\nfunction setupVectorLayer(glSource, styleUrl, options) {\n const layer = new VectorTileLayer({\n declutter: true,\n visible: false\n });\n setupVectorSource(glSource, styleUrl, options).then(function (source) {\n source.set('mapbox-source', glSource);\n layer.setSource(source);\n }).catch(function (error) {\n layer.setSource(undefined);\n });\n return layer;\n}\nfunction getBboxTemplate(projection) {\n const projCode = projection ? projection.getCode() : 'EPSG:3857';\n return `{bbox-${ projCode.toLowerCase().replace(/[^a-z0-9]/g, '-') }}`;\n}\nfunction setupRasterSource(glSource, styleUrl, options) {\n return new Promise(function (resolve, reject) {\n getTileJson(glSource, styleUrl, options).then(function ({tileJson, tileLoadFunction}) {\n const source = new TileJSON({\n interpolate: options.interpolate === undefined ? true : options.interpolate,\n transition: 0,\n crossOrigin: 'anonymous',\n tileJSON: tileJson\n });\n source.tileGrid = sourceOptionsFromTileJSON(glSource, tileJson, options).tileGrid;\n if (options.projection) {\n //@ts-ignore\n source.projection = get$1(options.projection);\n }\n const getTileUrl = source.getTileUrlFunction();\n if (tileLoadFunction) {\n source.setTileLoadFunction(tileLoadFunction);\n }\n source.setTileUrlFunction(function (tileCoord, pixelRatio, projection) {\n const bboxTemplate = getBboxTemplate(projection);\n let src = getTileUrl(tileCoord, pixelRatio, projection);\n if (src.indexOf(bboxTemplate) != -1) {\n const bbox = source.getTileGrid().getTileCoordExtent(tileCoord);\n src = src.replace(bboxTemplate, bbox.toString());\n }\n return src;\n });\n source.set('mapbox-source', glSource);\n resolve(source);\n }).catch(function (error) {\n reject(error);\n });\n });\n}\nfunction setupRasterLayer(glSource, styleUrl, options) {\n const layer = new TileLayer();\n setupRasterSource(glSource, styleUrl, options).then(function (source) {\n layer.setSource(source);\n }).catch(function () {\n layer.setSource(undefined);\n });\n return layer;\n}\n/**\n *\n * @param {Object} glSource \"source\" entry from a Mapbox/MapLibre Style object.\n * @param {string} styleUrl Style url\n * @param {Options} options ol-mapbox-style options.\n * @return {ImageLayer} The raster layer\n */\nfunction setupHillshadeLayer(glSource, styleUrl, options) {\n const tileLayer = setupRasterLayer(glSource, styleUrl, options);\n /** @type {ImageLayer} */\n const layer = new ImageLayer({\n source: new Raster({\n operationType: 'image',\n operation: hillshade,\n sources: [tileLayer]\n })\n });\n return layer;\n}\n/**\n * @param {Object} glSource glStyle source.\n * @param {string} styleUrl Style URL.\n * @param {Options} options Options.\n * @return {VectorSource} Configured vector source.\n */\nfunction setupGeoJSONSource(glSource, styleUrl, options) {\n const geoJsonFormat = options.projection ? new GeoJSON({ dataProjection: options.projection }) : new GeoJSON();\n const data = glSource.data;\n const sourceOptions = {};\n if (typeof data == 'string') {\n const [geoJsonUrl] = normalizeSourceUrl(data, options.accessToken, options.accessTokenParam || 'access_token', styleUrl || location.href);\n if (/\\{bbox-[0-9a-z-]+\\}/.test(geoJsonUrl)) {\n const extentUrl = (extent, resolution, projection) => {\n const bboxTemplate = getBboxTemplate(projection);\n return geoJsonUrl.replace(bboxTemplate, `${ extent.join(',') }`);\n };\n const source = new VectorSource({\n attributions: glSource.attribution,\n format: geoJsonFormat,\n loader: (extent, resolution, projection, success, failure) => {\n const url = typeof extentUrl === 'function' ? extentUrl(extent, resolution, projection) : extentUrl;\n fetchResource('GeoJSON', url, options).then(json => {\n const features = source.getFormat().readFeatures(json, { featureProjection: projection });\n source.addFeatures(features);\n success(features);\n }).catch(response => {\n source.removeLoadedExtent(extent);\n failure();\n });\n },\n strategy: bbox\n });\n source.set('mapbox-source', glSource);\n return source;\n }\n const source = new VectorSource({\n attributions: glSource.attribution,\n format: geoJsonFormat,\n url: geoJsonUrl,\n loader: (extent, resolution, projection, success, failure) => {\n fetchResource('GeoJSON', geoJsonUrl, options).then(json => {\n const features = source.getFormat().readFeatures(json, { featureProjection: projection });\n source.addFeatures(features);\n success(features);\n }).catch(response => {\n source.removeLoadedExtent(extent);\n failure();\n });\n }\n });\n return source;\n }\n sourceOptions.features = geoJsonFormat.readFeatures(data, { featureProjection: getUserProjection() || 'EPSG:3857' });\n const source = new VectorSource(Object.assign({\n attributions: glSource.attribution,\n format: geoJsonFormat\n }, sourceOptions));\n source.set('mapbox-source', glSource);\n return source;\n}\nfunction setupGeoJSONLayer(glSource, styleUrl, options) {\n return new VectorLayer({\n declutter: true,\n source: setupGeoJSONSource(glSource, styleUrl, options),\n visible: false\n });\n}\nfunction prerenderRasterLayer(glLayer, layer, functionCache) {\n let zoom = null;\n return function (event) {\n if (glLayer.paint && 'raster-opacity' in glLayer.paint && event.frameState.viewState.zoom !== zoom) {\n zoom = event.frameState.viewState.zoom;\n delete functionCache[glLayer.id];\n updateRasterLayerProperties(glLayer, layer, zoom, functionCache);\n }\n };\n}\nfunction updateRasterLayerProperties(glLayer, layer, zoom, functionCache) {\n const opacity = getValue(glLayer, 'paint', 'raster-opacity', zoom, emptyObj, functionCache);\n layer.setOpacity(opacity);\n}\nfunction manageVisibility(layer, mapOrGroup) {\n function onChange() {\n const glStyle = mapOrGroup.get('mapbox-style');\n if (!glStyle) {\n return;\n }\n const mapboxLayers = derefLayers(glStyle.layers);\n const layerMapboxLayerids = layer.get('mapbox-layers');\n const visible = mapboxLayers.filter(function (mapboxLayer) {\n return layerMapboxLayerids.includes(mapboxLayer.id);\n }).some(function (mapboxLayer) {\n return !mapboxLayer.layout || !mapboxLayer.layout.visibility || mapboxLayer.layout.visibility === 'visible';\n });\n if (layer.get('visible') !== visible) {\n layer.setVisible(visible);\n }\n }\n layer.on('change', onChange);\n onChange();\n}\nfunction setupLayer(glStyle, styleUrl, glLayer, options) {\n const functionCache = getFunctionCache(glStyle);\n const glLayers = glStyle.layers;\n const type = glLayer.type;\n const id = glLayer.source || getSourceIdByRef(glLayers, glLayer.ref);\n const glSource = glStyle.sources[id];\n let layer;\n if (type == 'background') {\n layer = setupBackgroundLayer(glLayer, options, functionCache);\n } else if (glSource.type == 'vector') {\n layer = setupVectorLayer(glSource, styleUrl, options);\n } else if (glSource.type == 'raster') {\n layer = setupRasterLayer(glSource, styleUrl, options);\n layer.setVisible(glLayer.layout ? glLayer.layout.visibility !== 'none' : true);\n layer.on('prerender', prerenderRasterLayer(glLayer, layer, functionCache));\n } else if (glSource.type == 'geojson') {\n layer = setupGeoJSONLayer(glSource, styleUrl, options);\n } else if (glSource.type == 'raster-dem' && glLayer.type == 'hillshade') {\n const hillshadeLayer = setupHillshadeLayer(glSource, styleUrl, options);\n layer = hillshadeLayer;\n hillshadeLayer.getSource().on('beforeoperations', function (event) {\n const data = event.data;\n data.resolution = getPointResolution(options.projection || 'EPSG:3857', event.resolution, getCenter(event.extent), 'm');\n const zoom = getZoomForResolution(event.resolution, options.resolutions || defaultResolutions);\n data.encoding = glSource.encoding;\n data.vert = 5 * getValue(glLayer, 'paint', 'hillshade-exaggeration', zoom, emptyObj, functionCache);\n data.sunAz = getValue(glLayer, 'paint', 'hillshade-illumination-direction', zoom, emptyObj, functionCache);\n data.sunEl = 35;\n data.opacity = 0.3;\n data.highlightColor = getValue(glLayer, 'paint', 'hillshade-highlight-color', zoom, emptyObj, functionCache);\n data.shadowColor = getValue(glLayer, 'paint', 'hillshade-shadow-color', zoom, emptyObj, functionCache);\n data.accentColor = getValue(glLayer, 'paint', 'hillshade-accent-color', zoom, emptyObj, functionCache);\n });\n layer.setVisible(glLayer.layout ? glLayer.layout.visibility !== 'none' : true);\n }\n const glSourceId = id;\n if (layer) {\n layer.set('mapbox-source', glSourceId);\n }\n return layer;\n}\n/**\n * @param {*} glStyle Mapbox/MapLibre Style.\n * @param {Map|LayerGroup} mapOrGroup Map or layer group.\n * @param {string} styleUrl Style URL.\n * @param {Options} options Options.\n * @return {Promise} Promise that resolves when the style is loaded.\n */\nfunction processStyle(glStyle, mapOrGroup, styleUrl, options) {\n const promises = [];\n let view = null;\n if (mapOrGroup instanceof Map) {\n view = mapOrGroup.getView();\n if (!view.isDef() && !view.getRotation() && !view.getResolutions()) {\n const projection = options.projection ? get$1(options.projection) : view.getProjection();\n view = new View(Object.assign(view.getProperties(), {\n maxResolution: defaultResolutions[0] / METERS_PER_UNIT[projection.getUnits()],\n projection: options.projection || view.getProjection()\n }));\n mapOrGroup.setView(view);\n }\n if ('center' in glStyle && !view.getCenter()) {\n view.setCenter(fromLonLat(glStyle.center, view.getProjection()));\n }\n if ('zoom' in glStyle && view.getZoom() === undefined) {\n view.setResolution(defaultResolutions[0] / METERS_PER_UNIT[view.getProjection().getUnits()] / Math.pow(2, glStyle.zoom));\n }\n if (!view.getCenter() || view.getZoom() === undefined) {\n view.fit(view.getProjection().getExtent(), {\n nearest: true,\n size: mapOrGroup.getSize()\n });\n }\n }\n mapOrGroup.set('mapbox-style', glStyle);\n mapOrGroup.set('mapbox-metadata', {\n styleUrl,\n options\n });\n const glLayers = glStyle.layers;\n let layerIds = [];\n let layer, glSourceId, id;\n for (let i = 0, ii = glLayers.length; i < ii; ++i) {\n const glLayer = glLayers[i];\n const type = glLayer.type;\n if (type == 'heatmap') {\n //FIXME Unsupported layer type\n // eslint-disable-next-line no-console\n console.debug(`layers[${ i }].type \"${ type }\" not supported`);\n continue;\n } else {\n id = glLayer.source || getSourceIdByRef(glLayers, glLayer.ref);\n // this technique assumes gl layers will be in a particular order\n if (!id || id != glSourceId) {\n if (layerIds.length) {\n promises.push(finalizeLayer(layer, layerIds, glStyle, styleUrl, mapOrGroup, options));\n layerIds = [];\n }\n layer = setupLayer(glStyle, styleUrl, glLayer, options);\n if (!(layer instanceof VectorLayer || layer instanceof VectorTileLayer)) {\n layerIds = [];\n }\n glSourceId = layer.get('mapbox-source');\n }\n layerIds.push(glLayer.id);\n }\n }\n promises.push(finalizeLayer(layer, layerIds, glStyle, styleUrl, mapOrGroup, options));\n return Promise.all(promises);\n}\n/**\n * Loads and applies a Mapbox/MapLibre Style object into an OpenLayers Map or LayerGroup.\n * This includes the map background, the layers, and for Map instances that did not\n * have a View defined yet also the center and the zoom.\n *\n * **Example:**\n * ```js\n * import apply from 'ol-mapbox-style';\n *\n * apply('map', 'mapbox://styles/mapbox/bright-v9', {accessToken: 'YOUR_MAPBOX_TOKEN'});\n * ```\n *\n * The center and zoom will only be set if present in the Mapbox/MapLibre Style document,\n * and if not already set on the OpenLayers map.\n *\n * Layers will be added to the OpenLayers map, without affecting any layers that\n * might already be set on the map.\n *\n * Layers added by `apply()` will have two additional properties:\n *\n * * `mapbox-source`: The `id` of the Mapbox/MapLibre Style document's source that the\n * OpenLayers layer was created from. Usually `apply()` creates one\n * OpenLayers layer per Mapbox/MapLibre Style source, unless the layer stack has\n * layers from different sources in between.\n * * `mapbox-layers`: The `id`s of the Mapbox/MapLibre Style document's layers that are\n * included in the OpenLayers layer.\n *\n * This function sets an additional `mapbox-style` property on the OpenLayers\n * Map or LayerGroup instance, which holds the Mapbox/MapLibre Style object.\n *\n * @param {Map|HTMLElement|string|LayerGroup} mapOrGroupOrElement Either an existing\n * OpenLayers Map instance, or a HTML element, or the id of a HTML element that will be\n * the target of a new OpenLayers Map, or a layer group. If layer group, styles\n * releated to the map and view will be ignored.\n * @param {string|Object} style JSON style object or style url pointing to a\n * Mapbox/MapLibre Style object. When using Mapbox APIs, the url is the `styleUrl`\n * shown in Mapbox Studio's \"share\" panel. In addition, the `accessToken` option\n * (see below) must be set.\n * When passed as JSON style object, all OpenLayers layers created by `apply()`\n * will be immediately available, but they may not have a source yet (i.e. when\n * they are defined by a TileJSON url in the Mapbox/MapLibre Style document). When passed\n * as style url, layers will be added to the map when the Mapbox/MapLibre Style document\n * is loaded and parsed.\n * @param {Options} options Options.\n * @return {Promise} A promise that resolves after all layers have been added to\n * the OpenLayers Map instance or LayerGroup, their sources set, and their styles applied. The\n * `resolve` callback will be called with the OpenLayers Map instance or LayerGroup as\n * argument.\n */\nfunction apply(mapOrGroupOrElement, style, options = {}) {\n let promise;\n /** @type {Map|LayerGroup} */\n let mapOrGroup;\n if (typeof mapOrGroupOrElement === 'string' || mapOrGroupOrElement instanceof HTMLElement) {\n mapOrGroup = new Map({ target: mapOrGroupOrElement });\n } else {\n mapOrGroup = mapOrGroupOrElement;\n }\n if (typeof style === 'string') {\n const styleUrl = style.startsWith('data:') ? location.href : normalizeStyleUrl(style, options.accessToken);\n options = completeOptions(styleUrl, options);\n promise = new Promise(function (resolve, reject) {\n getGlStyle(style, options).then(function (glStyle) {\n processStyle(glStyle, mapOrGroup, styleUrl, options).then(function () {\n resolve(mapOrGroup);\n }).catch(reject);\n }).catch(function (err) {\n reject(new Error(`Could not load ${ style }: ${ err.message }`));\n });\n });\n } else {\n promise = new Promise(function (resolve, reject) {\n processStyle(style, mapOrGroup, !options.styleUrl || options.styleUrl.startsWith('data:') ? location.href : normalizeStyleUrl(options.styleUrl, options.accessToken), options).then(function () {\n resolve(mapOrGroup);\n }).catch(reject);\n });\n }\n return promise;\n}\n/**\n * If layerIds is not empty, applies the style specified in glStyle to the layer,\n * and adds the layer to the map.\n *\n * The layer may not yet have a source when the function is called. If so, the style\n * is applied to the layer via a once listener on the 'change:source' event.\n *\n * @param {Layer} layer An OpenLayers layer instance.\n * @param {Array} layerIds Array containing layer ids of already-processed layers.\n * @param {Object} glStyle Style as a JSON object.\n * @param {string|undefined} styleUrl The original style URL. Only required\n * when a relative path is used with the `\"sprite\"` property of the style.\n * @param {Map|LayerGroup} mapOrGroup OpenLayers Map.\n * @param {Options} options Options.\n * @return {Promise} Returns a promise that resolves after the source has\n * been set on the specified layer, and the style has been applied.\n */\nfunction finalizeLayer(layer, layerIds, glStyle, styleUrl, mapOrGroup, options = {}) {\n let minZoom = 24;\n let maxZoom = 0;\n const glLayers = glStyle.layers;\n for (let i = 0, ii = glLayers.length; i < ii; ++i) {\n const glLayer = glLayers[i];\n if (layerIds.indexOf(glLayer.id) !== -1) {\n minZoom = Math.min('minzoom' in glLayer ? glLayer.minzoom : 0, minZoom);\n maxZoom = Math.max('maxzoom' in glLayer ? glLayer.maxzoom : 24, maxZoom);\n }\n }\n return new Promise(function (resolve, reject) {\n const setStyle = function () {\n const source = layer.getSource();\n if (!source || source.getState() === 'error') {\n reject(new Error('Error accessing data for source ' + layer.get('mapbox-source')));\n return;\n }\n if ('getTileGrid' in source) {\n const tileGrid = /** @type {import(\"ol/source/Tile.js\").default|import(\"ol/source/VectorTile.js\").default} */\n source.getTileGrid();\n if (tileGrid) {\n const sourceMinZoom = tileGrid.getMinZoom();\n if (minZoom > 0 || sourceMinZoom > 0) {\n layer.setMaxResolution(Math.min(getResolutionForZoom(Math.max(0, minZoom - 1e-12), defaultResolutions), getResolutionForZoom(Math.max(0, sourceMinZoom - 1e-12), tileGrid.getResolutions())));\n }\n if (maxZoom < 24) {\n layer.setMinResolution(getResolutionForZoom(maxZoom, defaultResolutions));\n }\n }\n } else {\n if (minZoom > 0) {\n layer.setMaxResolution(getResolutionForZoom(Math.max(0, minZoom - 1e-12), defaultResolutions));\n }\n }\n if (source instanceof VectorSource || source instanceof VectorTileSource) {\n applyStyle(layer, glStyle, layerIds, Object.assign({ styleUrl: styleUrl }, options)).then(function () {\n manageVisibility(layer, mapOrGroup);\n resolve();\n }).catch(reject);\n } else {\n resolve();\n }\n };\n layer.set('mapbox-layers', layerIds);\n const layers = mapOrGroup.getLayers();\n if (layers.getArray().indexOf(layer) === -1) {\n layers.push(layer);\n }\n if (layer.getSource()) {\n setStyle();\n } else {\n layer.once('change:source', setStyle);\n }\n });\n}\n/**\n * Get the Mapbox Layer object for the provided `layerId`.\n * @param {Map|LayerGroup} mapOrGroup Map or LayerGroup.\n * @param {string} layerId Mapbox Layer id.\n * @return {Object} Mapbox Layer object.\n */\nfunction getMapboxLayer(mapOrGroup, layerId) {\n const style = mapOrGroup.get('mapbox-style');\n const layerStyle = style.layers.find(function (layer) {\n return layer.id === layerId;\n });\n return layerStyle;\n}\n/**\n * Add a new Mapbox Layer object to the style. The map will be re-rendered.\n * @param {Map|LayerGroup} mapOrGroup The Map or LayerGroup `apply` was called on.\n * @param {Object} mapboxLayer Mapbox Layer object.\n * @param {string} [beforeLayerId] Optional id of the Mapbox Layer before the new layer that will be added.\n * @return {Promise} Resolves when the added layer is available.\n */\nfunction addMapboxLayer(mapOrGroup, mapboxLayer, beforeLayerId) {\n const glStyle = mapOrGroup.get('mapbox-style');\n const mapboxLayers = glStyle.layers;\n let spliceIndex;\n let sourceIndex = -1;\n if (beforeLayerId !== undefined) {\n const beforeMapboxLayer = getMapboxLayer(mapOrGroup, beforeLayerId);\n if (beforeMapboxLayer === undefined) {\n throw new Error(`Layer with id \"${ beforeLayerId }\" not found.`);\n }\n spliceIndex = mapboxLayers.indexOf(beforeMapboxLayer);\n } else {\n spliceIndex = mapboxLayers.length;\n }\n let sourceOffset;\n if (spliceIndex > 0 && mapboxLayers[spliceIndex - 1].source === mapboxLayer.source) {\n sourceIndex = spliceIndex - 1;\n sourceOffset = -1;\n } else if (spliceIndex < mapboxLayers.length && mapboxLayers[spliceIndex].source === mapboxLayer.source) {\n sourceIndex = spliceIndex;\n sourceOffset = 0;\n }\n if (sourceIndex === -1) {\n const {options, styleUrl} = mapOrGroup.get('mapbox-metadata');\n const layer = setupLayer(glStyle, styleUrl, mapboxLayer, options);\n if (beforeLayerId) {\n const beforeLayer = getLayer(mapOrGroup, beforeLayerId);\n const beforeLayerIndex = mapOrGroup.getLayers().getArray().indexOf(beforeLayer);\n mapOrGroup.getLayers().insertAt(beforeLayerIndex, layer);\n }\n mapboxLayers.splice(spliceIndex, 0, mapboxLayer);\n return finalizeLayer(layer, [mapboxLayer.id], glStyle, styleUrl, mapOrGroup, options);\n }\n if (mapboxLayers.some(layer => layer.id === mapboxLayer.id)) {\n throw new Error(`Layer with id \"${ mapboxLayer.id }\" already exists.`);\n }\n const sourceLayerId = mapboxLayers[sourceIndex].id;\n const args = styleFunctionArgs[getStyleFunctionKey(mapOrGroup.get('mapbox-style'), getLayer(mapOrGroup, sourceLayerId))];\n mapboxLayers.splice(spliceIndex, 0, mapboxLayer);\n if (args) {\n const [olLayer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, getFonts, getImage] = args;\n if (Array.isArray(sourceOrLayers)) {\n const layerIndex = sourceOrLayers.indexOf(sourceLayerId) + sourceOffset;\n sourceOrLayers.splice(layerIndex, 0, mapboxLayer.id);\n }\n stylefunction(olLayer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, getFonts, getImage);\n } else {\n getLayer(mapOrGroup, mapboxLayers[sourceIndex].id).changed();\n }\n return Promise.resolve();\n}\n/**\n * Update a Mapbox Layer object in the style. The map will be re-rendered with the new style.\n * @param {Map|LayerGroup} mapOrGroup The Map or LayerGroup `apply` was called on.\n * @param {Object} mapboxLayer Updated Mapbox Layer object.\n */\nfunction updateMapboxLayer(mapOrGroup, mapboxLayer) {\n const glStyle = mapOrGroup.get('mapbox-style');\n const mapboxLayers = glStyle.layers;\n const index = mapboxLayers.findIndex(function (layer) {\n return layer.id === mapboxLayer.id;\n });\n if (index === -1) {\n throw new Error(`Layer with id \"${ mapboxLayer.id }\" not found.`);\n }\n const oldLayer = mapboxLayers[index];\n if (oldLayer.source !== mapboxLayer.source) {\n throw new Error('Updated layer and previous version must use the same source.');\n }\n delete getFunctionCache(glStyle)[mapboxLayer.id];\n delete getFilterCache(glStyle)[mapboxLayer.id];\n mapboxLayers[index] = mapboxLayer;\n const args = styleFunctionArgs[getStyleFunctionKey(mapOrGroup.get('mapbox-style'), getLayer(mapOrGroup, mapboxLayer.id))];\n if (args) {\n stylefunction.apply(undefined, args);\n } else {\n getLayer(mapOrGroup, mapboxLayer.id).changed();\n }\n}\n/**\n * Updates a Mapbox source object in the style. The according OpenLayers source will be replaced\n * and the map will be re-rendered.\n * @param {Map|LayerGroup} mapOrGroup The Map or LayerGroup `apply` was called on.\n * @param {string} id Key of the source in the `sources` object literal.\n * @param {Object} mapboxSource Mapbox source object.\n * @return {Promise} Promise that resolves when the source has been updated.\n */\nfunction updateMapboxSource(mapOrGroup, id, mapboxSource) {\n const currentSource = getSource(mapOrGroup, id);\n const layers = mapOrGroup.getLayers().getArray().filter(function (layer) {\n return (layer instanceof VectorLayer || layer instanceof TileLayer || layer instanceof VectorTileLayer) && layer.getSource() === currentSource;\n });\n const metadata = mapOrGroup.get('mapbox-metadata');\n let newSourcePromise;\n switch (mapboxSource.type) {\n case 'vector':\n newSourcePromise = setupVectorSource(mapboxSource, metadata.styleUrl, metadata.options);\n break;\n case 'geojson':\n newSourcePromise = Promise.resolve(setupGeoJSONSource(mapboxSource, metadata.styleUrl, metadata.options));\n break;\n case 'raster':\n case 'raster-dem':\n newSourcePromise = setupRasterSource(mapboxSource, metadata.styleUrl, metadata.options);\n break;\n default:\n return Promise.reject(new Error('Unsupported source type ' + mapboxSource.type));\n }\n newSourcePromise.then(function (newSource) {\n layers.forEach(function (layer) {\n layer.setSource(newSource);\n });\n });\n return newSourcePromise;\n}\n/**\n * Remove a Mapbox Layer object from the style. The map will be re-rendered.\n * @param {Map|LayerGroup} mapOrGroup The Map or LayerGroup `apply` was called on.\n * @param {string|Object} mapboxLayerIdOrLayer Mapbox Layer id or Mapbox Layer object.\n */\nfunction removeMapboxLayer(mapOrGroup, mapboxLayerIdOrLayer) {\n const mapboxLayerId = typeof mapboxLayerIdOrLayer === 'string' ? mapboxLayerIdOrLayer : mapboxLayerIdOrLayer.id;\n const layer = getLayer(mapOrGroup, mapboxLayerId);\n /** @type {Array} */\n const layerMapboxLayers = layer.get('mapbox-layers');\n if (layerMapboxLayers.length === 1) {\n throw new Error('Cannot remove last Mapbox layer from an OpenLayers layer.');\n }\n layerMapboxLayers.splice(layerMapboxLayers.indexOf(mapboxLayerId), 1);\n const glStyle = mapOrGroup.get('mapbox-style');\n const layers = glStyle.layers;\n layers.splice(layers.findIndex(layer => layer.id === mapboxLayerId), 1);\n const args = styleFunctionArgs[getStyleFunctionKey(glStyle, layer)];\n if (args) {\n const [olLayer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, getFonts, getImage] = args;\n if (Array.isArray(sourceOrLayers)) {\n sourceOrLayers.splice(sourceOrLayers.findIndex(layer => layer === mapboxLayerId), 1);\n }\n stylefunction(olLayer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, getFonts, getImage);\n } else {\n getLayer(mapOrGroup, mapboxLayerId).changed();\n }\n}\n/**\n * Get the OpenLayers layer instance that contains the provided Mapbox/MapLibre Style\n * `layer`. Note that multiple Mapbox/MapLibre Style layers are combined in a single\n * OpenLayers layer instance when they use the same Mapbox/MapLibre Style `source`.\n * @param {Map|LayerGroup} map OpenLayers Map or LayerGroup.\n * @param {string} layerId Mapbox/MapLibre Style layer id.\n * @return {Layer} OpenLayers layer instance.\n */\nfunction getLayer(map, layerId) {\n const layers = map.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const mapboxLayers = layers[i].get('mapbox-layers');\n if (mapboxLayers && mapboxLayers.indexOf(layerId) !== -1) {\n return layers[i];\n }\n }\n return undefined;\n}\n/**\n * Get the OpenLayers layer instances for the provided Mapbox/MapLibre Style `source`.\n * @param {Map|LayerGroup} map OpenLayers Map or LayerGroup.\n * @param {string} sourceId Mapbox/MapLibre Style source id.\n * @return {Array} OpenLayers layer instances.\n */\nfunction getLayers(map, sourceId) {\n const result = [];\n const layers = map.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n if (layers[i].get('mapbox-source') === sourceId) {\n result.push(layers[i]);\n }\n }\n return result;\n}\n/**\n * Get the OpenLayers source instance for the provided Mapbox/MapLibre Style `source`.\n * @param {Map|LayerGroup} map OpenLayers Map or LayerGroup.\n * @param {string} sourceId Mapbox/MapLibre Style source id.\n * @return {Source} OpenLayers source instance.\n */\nfunction getSource(map, sourceId) {\n const layers = map.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const source = /** @type {Layer} */\n layers[i].getSource();\n if (layers[i].get('mapbox-source') === sourceId) {\n return source;\n }\n }\n return undefined;\n}\n/**\n * Sets or removes a feature state. The feature state is taken into account for styling,\n * just like the feature's properties, and can be used e.g. to conditionally render selected\n * features differently.\n *\n * The feature state will be stored on the OpenLayers layer matching the feature identifier, in the\n * `mapbox-featurestate` property.\n * @param {Map|VectorLayer|VectorTileLayer} mapOrLayer OpenLayers Map or layer to set the feature\n * state on.\n * @param {FeatureIdentifier} feature Feature identifier.\n * @param {Object|null} state Feature state. Set to `null` to remove the feature state.\n */\nfunction setFeatureState(mapOrLayer, feature, state) {\n const layers = 'getLayers' in mapOrLayer ? getLayers(mapOrLayer, feature.source) : [mapOrLayer];\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const featureState = layers[i].get('mapbox-featurestate');\n if (featureState) {\n if (state) {\n featureState[feature.id] = state;\n } else {\n delete featureState[feature.id];\n }\n layers[i].changed();\n } else {\n throw new Error(`Map or layer for source \"${ feature.source }\" not found.`);\n }\n }\n}\n/**\n * Sets or removes a feature state. The feature state is taken into account for styling,\n * just like the feature's properties, and can be used e.g. to conditionally render selected\n * features differently.\n * @param {Map|VectorLayer|VectorTileLayer} mapOrLayer Map or layer to set the feature state on.\n * @param {FeatureIdentifier} feature Feature identifier.\n * @return {Object|null} Feature state or `null` when no feature state is set for the given\n * feature identifier.\n */\nfunction getFeatureState(mapOrLayer, feature) {\n const layers = 'getLayers' in mapOrLayer ? getLayers(mapOrLayer, feature.source) : [mapOrLayer];\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const featureState = layers[i].get('mapbox-featurestate');\n if (featureState && featureState[feature.id]) {\n return featureState[feature.id];\n }\n }\n return undefined;\n}\n\n/** @typedef {import(\"ol/Map.js\").default} Map */\n/**\n * @classdesc\n * Event emitted on configuration or loading error.\n */\nclass ErrorEvent extends BaseEvent {\n /**\n * @param {Error} error error object.\n */\n constructor(error) {\n super(EventType.ERROR);\n /**\n * @type {Error}\n */\n this.error = error;\n }\n}\n/**\n * @typedef {Object} Options\n * @property {string} styleUrl The URL of the Mapbox/MapLibre Style object to use for this layer. For a\n * style created with Mapbox Studio and hosted on Mapbox, this will look like\n * 'mapbox://styles/you/your-style'.\n * @property {string} [accessToken] The access token for your Mapbox/MapLibre style. This has to be provided\n * for `mapbox://` style urls. For `https://` and other urls, any access key must be the last query\n * parameter of the style url.\n * @property {string} [source] If your style uses more than one source, you need to use either the\n * `source` property or the `layers` property to limit rendering to a single vector source. The\n * `source` property corresponds to the id of a vector source in your Mapbox/MapLibre style.\n * @property {Array} [layers] Limit rendering to the list of included layers. All layers\n * must share the same vector source. If your style uses more than one source, you need to use\n * either the `source` property or the `layers` property to limit rendering to a single vector\n * source.\n * @property {boolean} [declutter=true] Declutter images and text. Decluttering is applied to all\n * image and text styles of all Vector and VectorTile layers that have set this to `true`. The priority\n * is defined by the z-index of the layer, the `zIndex` of the style and the render order of features.\n * Higher z-index means higher priority. Within the same z-index, a feature rendered before another has\n * higher priority.\n *\n * As an optimization decluttered features from layers with the same `className` are rendered above\n * the fill and stroke styles of all of those layers regardless of z-index. To opt out of this\n * behavior and place declutterd features with their own layer configure the layer with a `className`\n * other than `ol-layer`.\n * @property {import(\"ol/layer/Base.js\").BackgroundColor|false} [background] Background color for the layer.\n * If not specified, the background from the Mapbox/MapLibre Style object will be used. Set to `false` to prevent\n * the Mapbox/MapLibre style's background from being used.\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"ol/extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible. If neither `maxResolution` nor `minZoom` are defined, the layer's `maxResolution` will\n * match the style source's `minzoom`.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will\n * be visible. If neither `maxResolution` nor `minZoom` are defined, the layer's `minZoom` will match\n * the style source's `minzoom`.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {import(\"ol/render.js\").OrderFunction} [renderOrder] Render order. Function to be used when sorting\n * features before rendering. By default features are drawn in the order that they are created. Use\n * `null` to avoid the sort, but get an undefined draw order.\n * @property {number} [renderBuffer=100] The buffer in pixels around the tile extent used by the\n * renderer when getting features from the vector tile for the rendering or hit-detection.\n * Recommended value: Vector tiles are usually generated with a buffer, so this value should match\n * the largest possible buffer of the used tiles. It should be at least the size of the largest\n * point symbol or line width.\n * @property {import(\"ol/layer/VectorTile.js\").VectorTileRenderType} [renderMode='hybrid'] Render mode for vector tiles:\n * * `'hybrid'`: Polygon and line elements are rendered as images, so pixels are scaled during zoom\n * animations. Point symbols and texts are accurately rendered as vectors and can stay upright on\n * rotated views.\n * * `'vector'`: Everything is rendered as vectors. Use this mode for improved performance on vector\n * tile layers with only a few rendered features (e.g. for highlighting a subset of features of\n * another layer with the same source).\n * @property {import(\"ol/Map.js\").default} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use `map.addLayer()`.\n * @property {boolean} [updateWhileAnimating=false] When set to `true`, feature batches will be\n * recreated during animations. This means that no vectors will be shown clipped, but the setting\n * will have a performance impact for large amounts of vector data. When set to `false`, batches\n * will be recreated when no animation is active.\n * @property {boolean} [updateWhileInteracting=false] When set to `true`, feature batches will be\n * recreated during interactions. See also `updateWhileAnimating`.\n * @property {number} [preload=0] Preload. Load low-resolution tiles up to `preload` levels. `0`\n * means no preloading.\n * @property {boolean} [useInterimTilesOnError=true] Use interim tiles on error.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n/**\n * @classdesc\n * ```js\n * import {MapboxVectorLayer} from 'ol-mapbox-style';\n * ```\n * A vector tile layer based on a Mapbox/MapLibre style that uses a single vector source. Configure\n * the layer with the `styleUrl` and `accessToken` shown in Mapbox Studio's share panel.\n * If the style uses more than one source, use the `source` property to choose a single\n * vector source. If you want to render a subset of the layers in the style, use the `layers`\n * property (all layers must share the same vector source). See the constructor options for\n * more detail.\n *\n * const map = new Map({\n * view: new View({\n * center: [0, 0],\n * zoom: 1,\n * }),\n * layers: [\n * new MapboxVectorLayer({\n * styleUrl: 'mapbox://styles/mapbox/bright-v9',\n * accessToken: 'your-mapbox-access-token-here',\n * }),\n * ],\n * target: 'map',\n * });\n *\n * On configuration or loading error, the layer will trigger an `'error'` event. Listeners\n * will receive an object with an `error` property that can be used to diagnose the problem.\n *\n * **Note for users of the full build**: The `MapboxVectorLayer` requires the\n * [ol-mapbox-style](https://github.com/openlayers/ol-mapbox-style) library to be loaded as well.\n *\n * @param {Options} options Options.\n * @extends {VectorTileLayer}\n * @fires module:ol/events/Event~BaseEvent#event:error\n * @api\n */\nclass MapboxVectorLayer extends VectorTileLayer {\n /**\n * @param {Options} options Layer options. At a minimum, `styleUrl` and `accessToken`\n * must be provided.\n */\n constructor(options) {\n const declutter = 'declutter' in options ? options.declutter : true;\n const source = new VectorTileSource({\n state: 'loading',\n format: new MVT()\n });\n super({\n source: source,\n background: options.background === false ? null : options.background,\n declutter: declutter,\n className: options.className,\n opacity: options.opacity,\n visible: options.visible,\n zIndex: options.zIndex,\n minResolution: options.minResolution,\n maxResolution: options.maxResolution,\n minZoom: options.minZoom,\n maxZoom: options.maxZoom,\n renderOrder: options.renderOrder,\n renderBuffer: options.renderBuffer,\n renderMode: options.renderMode,\n map: options.map,\n updateWhileAnimating: options.updateWhileAnimating,\n updateWhileInteracting: options.updateWhileInteracting,\n preload: options.preload,\n useInterimTilesOnError: options.useInterimTilesOnError,\n properties: options.properties\n });\n if (options.accessToken) {\n this.accessToken = options.accessToken;\n }\n const url = options.styleUrl;\n const promises = [applyStyle(this, url, options.layers || options.source, { accessToken: this.accessToken })];\n if (this.getBackground() === undefined) {\n promises.push(applyBackground(this, options.styleUrl, { accessToken: this.accessToken }));\n }\n Promise.all(promises).then(() => {\n source.setState('ready');\n }).catch(error => {\n this.dispatchEvent(new ErrorEvent(error));\n const source = this.getSource();\n source.setState('error');\n });\n }\n}\n\nexport { MapboxVectorLayer, addMapboxLayer, apply, applyBackground, applyStyle, apply as default, getFeatureState, getLayer, getLayers, getMapboxLayer, getSource, getStyleForLayer, recordStyleLayer, removeMapboxLayer, renderTransparent, setFeatureState, stylefunction, updateMapboxLayer, updateMapboxSource };\n//# sourceMappingURL=index.js.map\n","const __WEBPACK_NAMESPACE_OBJECT__ = undefined;","// import openlayers\nimport VectorTileLayer from \"ol/layer/VectorTile\";\nimport VectorTileSource from \"ol/source/VectorTile\";\nimport TileJSONSource from \"ol/source/TileJSON\";\nimport MVT from \"ol/format/MVT\";\nimport { unByKey as observableUnByKey } from \"ol/Observable\";\n// import olms : module ES6\nimport { applyStyle } from \"ol-mapbox-style\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Config from \"../Utils/Config\";\n\n/**\n* @classdesc\n* Geoportal Layer Mapbox creation\n*\n* @constructor\n* @extends {ol.layer.VectorTile}\n* @alias ol.layer.GeoportalMapBox\n* @type {ol.layer.GeoportalMapBox}\n* @param {Object} options - options for function call.\n* @param {String} options.layer - Layer name (e.g. \"PLAN.IGN\")\n* @param {Object} [options.configuration] - configuration (cf. example) \n* @param {String} [options.style] - Style name (e.g. \"classique\")\n* @param {String} [options.source] - Source name (e.g. \"plan_ign\")\n* @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n* @param {Object} [settings] - other options for ol.layer.VectorTile function (see {@link https://openlayers.org/en/latest/apidoc/module-ol_layer_VectorTile-VectorTileLayer.html ol.layer.VectorTile})\n* @example\n* var LayerMapBox = new ol.layer.GeoportalMapBox({\n* layer : \"PLAN.IGN\",\n* [style : \"classique\",]\n* [source : \"plan_ign\",]\n* [ssl: true]\n* }, {\n* opacity\n* visible\n* extent\n* declutter\n* ...\n* });\n* \n* // Ex. configuration object for TMS Layer\n* \"PLAN.IGN$GEOPORTAIL:GPP:TMS\": {\n* \"hidden\": true,\n* \"queryable\": false,\n* \"serviceParams\": {\n* \"id\": \"GPP:TMS\",\n* \"version\": \"1.0.0\",\n* \"serverUrl\": {\n* \"cartes\": \"https://wxs.ign.fr/cartes/geoportail/tms/1.0.0/\"\n* }\n* },\n* \"name\": \"PLAN.IGN\",\n* \"title\": \"Plan IGN\",\n* \"description\": \"BDUni tuilée\",\n* \"formats\": [\n* {\n* \"current\": true,\n* \"name\": \"application/x-protobuf\"\n* }\n* ],\n* \"styles\": [\n* {\n* \"name\": \"standard\",\n* \"title\": \"Style standard\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/standard.json\"\n* },\n* {\n* \"name\": \"classique\",\n* \"title\": \"Style classique\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/classique.json\"\n* },\n* {\n* \"name\": \"transparent\",\n* \"title\": \"Style transparent\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/transparent.json\"\n* },\n* {\n* \"name\": \"accentue\",\n* \"title\": \"Style accentue\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/accentue.json\"\n* },\n* {\n* \"name\": \"attenue\",\n* \"title\": \"Style attenue\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/attenue.json\"\n* },\n* {\n* \"name\": \"gris\",\n* \"title\": \"Style en noir et blanc\",\n* \"current\": false,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/gris.json\"\n* },\n* {\n* \"name\": \"epure\",\n* \"title\": \"Style epure\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/epure.json\"\n* },\n* {\n* \"name\": \"sans_toponymes\",\n* \"title\": \"Style sans toponymes\",\n* \"current\": false,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/sans_toponymes.json\"\n* }\n* ],\n* \"globalConstraint\": {\n* \"crs\": null,\n* \"bbox\": {\n* \"left\": -724011.531917197,\n* \"right\": 1095801.237496279,\n* \"top\": 6672646.821182753,\n* \"bottom\": 5009377.0856973175\n* },\n* \"minScaleDenominator\": null,\n* \"maxScaleDenominator\": null\n* },\n* \"quicklookUrl\": \"https://wxs.ign.fr/static/pictures/ign_carte2.jpg\",\n* \"layerId\": \"PLAN.IGN$GEOPORTAIL:GPP:TMS\",\n* \"defaultProjection\": \"EPSG:3857\"\n* }\n*\n*/\nvar LayerMapBox = class LayerMapBox extends VectorTileLayer {\n \n /**\n * See {@link ol.layer.GeoportalMapBox}\n * @module LayerMapBox\n * @alias module:~layers/GeoportalMapBox\n * @param {*} options - options\n * @param {*} [settings] - other settings\n * @example\n * import LayerMapBox from \"gpf-ext-ol/layers/LayerMapBox\"\n * ou \n * import { LayerMapBox } from \"gpf-ext-ol\"\n */\n constructor (options, settings) {\n // if (!(this instanceof LayerMapBox)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n \n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n \n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n \n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n \n // si ssl = false on fait du http\n // par défaut, ssl = true, on fait du https\n var protocol = options.ssl === false ? \"http://\" : \"https://\";\n \n // WARNING :\n // on fait le choix de ne pas utiliser la clef apiKey pour checker \n // les droits sur la ressource\n // car le service n'est pas securisé...\n \n // configuration de la ressource\n var layerCfg = options.configuration;\n\n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config chargée\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n\n // id de la ressource\n var layerId = options.layer + \"$GEOPORTAIL:GPP:TMS\";\n \n // récupération des ressources utiles depuis la configuration\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : Layer ID not found into the catalogue !?\");\n }\n }\n\n var styleUrl = null;\n var styleTitle = \"\";\n var styleName = options.style;\n for (var i = 0; i < layerCfg.styles.length; i++) {\n var style = layerCfg.styles[i];\n // si le nom du style est en option, on le recherche...\n // sinon, on recherche le style par defaut !\n if (styleName && style.name === styleName) {\n styleUrl = style.url;\n styleTitle = style.title;\n break;\n } else {\n if (!styleName && style.current) {\n styleName = style.name;\n styleUrl = style.url;\n styleTitle = style.title;\n break;\n }\n }\n }\n \n if (!styleUrl) {\n throw new Error(\"ERROR : Style URL not found !?\");\n }\n \n styleUrl.replace(/(http|https):\\/\\//, protocol);\n \n // création de la source\n var source = new VectorTileSource({\n state : \"loading\", // statut\n format : new MVT()\n });\n \n source._originators = layerCfg.originators;\n source._legends = layerCfg.legends;\n source._metadata = layerCfg.metadata;\n source._description = layerCfg.description;\n source._title = layerCfg.title + \" (\" + styleTitle + \")\";\n source._quicklookUrl = layerCfg.quicklookUrl;\n \n // options definies sur ol.layer.VectorTile\n var layerVectorTileOptions = {\n source : source\n };\n \n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(layerVectorTileOptions, settings);\n \n // on surcharge les originators (non récupérés depuis configuration de la couche)\n if (options.olParams && !layerCfg.originators) {\n source._originators = options.olParams.attributions;\n }\n \n // création d'une ol.layer.VectorTile avec les options récupérées ci-dessus.\n super(layerVectorTileOptions);\n \n this.name = options.layer;\n this.service = \"TMS\";\n this.protocol = protocol;\n this.sourceId = options.source;\n this.styleUrl = styleUrl;\n this.config = layerCfg;\n \n // récuperation du style\n this.setStyleMapBox();\n \n return this;\n }\n \n /**\n * Get Style MapBox\n * @private\n */\n setStyleMapBox () {\n var self = this;\n fetch(this.styleUrl, {\n credentials : \"same-origin\"\n }).then(function (response) {\n if (response.ok) {\n response.json().then(function (style) {\n self.onStyleMapBoxLoad(style);\n });\n }\n }).catch(function (e) {\n self.onStyleMapBoxError(e);\n });\n };\n \n /**\n * Add Style\n * @param {*} style - json style\n */\n onStyleMapBoxLoad (style) {\n // si on a plusieurs sources, on ne peut en prendre qu'une seule...\n if (!this.sourceId) {\n this.sourceId = Object.keys(style.sources)[0];\n }\n \n var styleSource = style.sources[this.sourceId];\n if (!styleSource) {\n this.onStyleMapBoxError({\n message : \"ERROR : Source ID not found !? !\"\n });\n return;\n }\n \n if (styleSource.type !== \"vector\") {\n this.onStyleMapBoxError({\n message : \"ERROR : Source TYPE not permitted !\"\n });\n return;\n }\n \n var source = this.getSource();\n \n // WARNING :\n // la clef renseignée dans les urls n'est pas forcement la bonne\n // car la substitution avec la clef utilisateur n'est pas faite par le service...\n if (styleSource.url) {\n // protocole : http ou https\n styleSource.url.replace(/(http|https):\\/\\//, this.protocol);\n \n var vectorTileJson = new TileJSONSource({\n url : styleSource.url\n });\n var self = this;\n var key = vectorTileJson.on(\"change\", function () {\n if (vectorTileJson.getState() === \"ready\") {\n var doc = vectorTileJson.getTileJSON();\n if (!doc) {\n return;\n }\n self.set(\"mapbox-extensions\", doc);\n var tiles = Array.isArray(doc.tiles) ? doc.tiles : [doc.tiles];\n // protocole : http ou https\n for (var i = 0; i < styleSource.tiles.length; i++) {\n tiles[i].replace(/(http|https):\\/\\//, this.protocol);\n }\n source.setUrls(tiles);\n observableUnByKey(key);\n }\n });\n }\n \n if (styleSource.tiles) {\n // protocole : http ou https\n for (var j = 0; j < styleSource.tiles.length; j++) {\n styleSource.tiles[j].replace(/(http|https):\\/\\//, this.protocol);\n }\n source.setUrls(styleSource.tiles);\n }\n \n applyStyle(this, style, this.sourceId).then(() => {\n source.setState(\"ready\");\n this.set(\"mapbox-styles\", style);\n }).catch((error) => {\n this.onStyleMapBoxError(error);\n });\n };\n \n /**\n * Error\n * @param {*} error - message\n */\n onStyleMapBoxError (error) {\n var source = this.getSource();\n source.setState(\"error\");\n // eslint-disable-next-line no-console\n console.error(error.message);\n };\n\n /**\n * Get configuration\n * @returns {Object} - configuration\n */\n getConfiguration () {\n return this.config;\n }\n\n /**\n * Get legends\n * @returns {Array} - legends\n */\n getLegends () {\n return this.getSource()._legends;\n }\n\n /**\n * Get metadata\n * @returns {Array} - metadata\n */\n getMetadata () {\n return this.getSource()._metadata;\n }\n\n /**\n * Get description\n * @returns {String} - description\n */\n getDescription () {\n return this.getSource()._description;\n }\n\n /**\n * Get title\n * @returns {String} - title\n */\n getTitle () {\n return this.getSource()._title;\n }\n\n /**\n * Get quicklook url\n * @returns {String} - quicklook\n */\n getQuicklookUrl () {\n return this.getSource()._quicklookUrl;\n }\n\n /**\n * Get originators\n * @returns {Array} - originators\n */\n getOriginators () {\n return this.getSource()._originators;\n }\n \n};\n\nexport default LayerMapBox;\n\n// Expose LayerMapBox as ol.layer.GeoportalMapBox. (for a build bundle)\nif (window.ol && window.ol.layer) {\n window.ol.layer.GeoportalMapBox = LayerMapBox;\n}\n","const exceptions = [\"GPoverviewMap\", \"GPfullScreen\"];\n\nfunction getSameSideOpenedPanel (position, openedPanelID) {\n // on ajoute aux exceptions le panel qui vient d'être ouvert\n var exceptionPanel = [...exceptions, openedPanelID];\n var controlPanels = [];\n if (position && position.includes(\"left\")) {\n var bottomLeft = document.getElementById(\"position-container-bottom-left\");\n var topLeft = document.getElementById(\"position-container-top-left\");\n controlPanels = [...bottomLeft.children, ...topLeft.children];\n }\n if (position && position.includes(\"right\")) {\n var bottomRight = document.getElementById(\"position-container-bottom-right\");\n var topRight = document.getElementById(\"position-container-top-right\");\n controlPanels = [...bottomRight.children, ...topRight.children];\n }\n // on ne ferme que les panles déjà ouverts qui ne sont pas exceptions\n return controlPanels.filter(p => {\n var panelID = p.id.match(/(\\w+)-[0-9]+/)[1];\n var isException = exceptionPanel.includes(panelID);\n var isOpened = p.getElementsByTagName(\"button\")[0].getAttribute(\"aria-pressed\");\n if (isOpened === \"true\" && !isException) {\n return p;\n }\n });\n}\n\nvar PanelManager = function (position, openedPanelID) {\n var openedPanel = getSameSideOpenedPanel(position, openedPanelID);\n if (openedPanel.length > 0) {\n openedPanel[0].getElementsByTagName(\"button\")[0].click();\n }\n};\n\nexport default PanelManager;\n","import PanelManager from \"../Utils/PanelManager\";\n// Mixin pour ajouter des méthodes communes à tous les widgets.\n\n// voir fichiers DOM et assign\n// modifier snippets.\nvar Widget = {\n /**\n * This method is called when a widget opens a panel\n * It calls the panelManager to automatically close other panels\n */\n onPanelOpen : function () {\n // On récupère l'id du widget à partir de l'id du DOM de la forme GPwidgetName-1876465465\n PanelManager(this.options.position, this.element.id.match(/(\\w+)-[0-9]+/)[1]);\n }\n};\n\nexport default Widget;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.control.Control;","var checkDsfr = function () {\n // HACK: check si le styl dsfr est chargé via la variable blue-france-sun-113-625\n var style = getComputedStyle(document.documentElement);\n var color = style.getPropertyValue(\"--blue-france-sun-113-625\");\n if (color === \"\") {\n return false;\n }\n return true;\n};\n\nexport default checkDsfr;\n\n","import Control from \"ol/control/Control\";\nimport checkDsfr from \"./Utils/CheckDsfr\";\n\nvar ControlExtended = class ControlExtended extends Control {\n\n constructor (options) {\n options = options || {};\n super({\n element : options.element,\n target : options.target,\n render : options.render\n });\n // Can the control appear in the ControlList control\n if (options && options.listable) {\n this.listable = true;\n } else {\n this.listable = false;\n }\n // Set the control desctiption\n if (options && options.description) {\n this.description = options.description;\n } else {\n this.description = \"\";\n }\n }\n\n setPosition (pos) {\n if (this.getMap()) {\n var instance = new PositionFactory(this);\n instance.set(pos);\n }\n }\n\n updatePosition (pos) {\n if (this.getMap()) {\n var instance = new PositionFactory(this);\n instance.update(pos);\n }\n }\n\n};\n\nexport default ControlExtended;\n\n/**\n * gestion des anchors\n */\nconst ANCHORS = [\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\"\n];\n\n/**\n * Position\n * @private\n */\nclass PositionFactory {\n\n /**\n * constructor\n * @param {*} caller - ...\n */\n constructor (caller) {\n this.caller = caller;\n this.container = null;\n\n this.#createContainer(\"top-left\");\n this.#createContainer(\"top-right\");\n this.#createContainer(\"bottom-left\");\n this.#createContainer(\"bottom-right\");\n\n return this;\n }\n\n /**\n * ...\n * @param {*} name - ...\n * @returns {Boolean} ...\n */\n #existContainer (name) {\n var div = this.container.children[\"position-container-\" + name];\n if (div) {\n return true;\n }\n return false;\n }\n\n /**\n * ...\n * @param {*} name - ...\n * @private\n */\n #createContainer (name) {\n this.container = this.caller.getMap().getOverlayContainerStopEvent();\n\n if (this.#existContainer(name)) {\n return;\n }\n // INFO\n // positionner les classes position-container-[left|right|top|bottom]\n // ex. { position:relative; height:50px; width:100%; }\n var div = document.createElement(\"div\");\n div.id = \"position-container-\" + name;\n div.className = \"position position-container-\" + name ;\n\n this.container.appendChild(div);\n }\n\n /**\n * ...\n * @param {*} pos - ...\n * @param {*} update - ...\n * @todo fonctionnement à tester !\n */\n #setAnchor (pos, update) {\n var self = this;\n const position = (pos) => {\n var element = self.container.children[\"position-container-\" + pos];\n return element.children.length;\n };\n const sizeW = (pos) => {\n var element = self.container.children[\"position-container-\" + pos];\n var width = element.offsetWidth;\n return width;\n };\n const sizeH = (pos) => {\n var element = self.container.children[\"position-container-\" + pos];\n var height = element.offsetHeight;\n if (update) {\n if (pos.includes(\"top\")) {\n height = 0;\n }\n // on recalcule la position en hauteur\n for (let index = 0; index < element.children.length; index++) {\n const id = element.children[index].id;\n if (id === self.caller.element.id) {\n height = (pos.includes(\"bottom\")) ? height - self.caller.element.offsetHeight : height * (-1);\n break;\n }\n height -= element.children[index].offsetHeight;\n }\n }\n return height;\n };\n const clear = (element) => {\n element.style.top = \"unset\";\n element.style.bottom = \"unset\";\n element.style.left = \"unset\";\n element.style.right = \"unset\";\n };\n\n // on supprime le style de positionnement (top, left...)\n // car on souhaite une nouvelle position\n clear(this.caller.element);\n this.caller.element.style.position = \"unset\"; // div.GPwidget\n\n // on recherche les panneaux (panel) :\n // * panel de formulaire\n // * panel de resultats (?)\n var panels = Array.from(this.caller.element.getElementsByClassName(\"GPpanel\"));\n if (panels.length === 0) {\n return;\n }\n var offset = 0;\n panels.forEach((panel) => {\n // INFO\n // on va eviter de modifier les panneaux de resultats\n // car leurs positions sont souvent relative aux panneaux\n // des formulaires\n if (panel.nodeName.toLowerCase() !== \"dialog\") {\n return;\n }\n clear(panel);\n // on modifie le positionnement du menu (dialog ou div : panel)\n // en fonction du bouton\n // ex. bouton : bottom-left, menu : bottom:0px; left:50px\n switch (pos.toLowerCase()) {\n case \"top-left\":\n if (checkDsfr()) {\n panel.style.top = \"0px\";\n } else {\n panel.style.top = position(pos) ? sizeH(pos) + \"px\" : \"0px\";\n }\n panel.style.left = sizeW(pos) + offset + \"px\";\n break;\n case \"bottom-left\":\n if (checkDsfr()) {\n panel.style.top = \"0px\";\n } else {\n panel.style.bottom = position(pos) ? sizeH(pos) + \"px\" : \"0px\";\n }\n panel.style.left = sizeW(pos) + offset + \"px\";\n break;\n case \"top-right\":\n if (checkDsfr()) {\n panel.style.top = \"0px\";\n } else {\n panel.style.top = position(pos) ? sizeH(pos) + \"px\" : \"0px\";\n }\n panel.style.right = sizeW(pos) + offset + \"px\";\n break;\n case \"bottom-right\":\n if (checkDsfr()) {\n panel.style.top = \"0px\";\n } else {\n panel.style.bottom = position(pos) ? sizeH(pos) + \"px\" : \"0px\";\n }\n panel.style.right = sizeW(pos) + offset + \"px\";\n break;\n default:\n break;\n }\n offset += panel.offsetWidth;\n });\n }\n\n /**\n * ...\n * @param {*} pos - ...\n * @public\n */\n set (pos) {\n if (!ANCHORS.includes(pos.toLowerCase())) {\n return;\n }\n // positionnement de l'element\n this.#setAnchor(pos, false);\n\n if (pos.includes(\"bottom\")) {\n this.container.children[\"position-container-\" + pos].prepend(this.caller.element);\n } else {\n this.container.children[\"position-container-\" + pos].appendChild(this.caller.element);\n }\n }\n\n /**\n * ...\n * @param {*} pos - ...\n * @public\n */\n update (pos) {\n if (!ANCHORS.includes(pos.toLowerCase())) {\n return;\n }\n // positionnement de l'element\n // mais, il faut prendre en compte la position !\n this.#setAnchor(pos, true);\n }\n\n};\n","/**\n * @module SelectorID\n * @alias module:~utils/SelectorID\n * @private\n * @description\n * formalisme d'un tag ID :\n * -> NAME(_ORDER)-1460636385836\n *\n * @example\n * Ex.\n * GProutePoints-1460636385836\n * GProutePoint_10-1460636385836\n */\nvar SelectorID = {\n\n /**\n * Construction d'un identifiant statique basé sur le timestamp,\n * et qui s'incremente de +1 à chaque appel\n * @function generate\n */\n generate : (function () {\n var timestamp = Math.floor(Date.now());\n return function () {\n return timestamp++;\n };\n })(),\n\n /**\n * nom du tag\n * @function name\n * @param {String} id - the id\n * @returns {String} index\n */\n name : function (id) {\n var name = null;\n\n var i = id.lastIndexOf(\"-\");\n if (i === -1) {\n name = id;\n } else {\n name = id.substring(0, i);\n }\n\n return name;\n },\n\n /**\n * numero d'identifiant du tag\n *\n * @function index\n * @param {String} id - the id\n * @returns {String} index\n */\n index : function (id) {\n var index = null;\n\n var name = this.name(id);\n // if (name !== id) {\n var i = name.lastIndexOf(\"_\");\n if (i !== -1) {\n index = name.substring(i + 1);\n }\n // }\n\n return index;\n },\n\n /**\n * uuid du tag\n *\n * @function uuid\n * @param {String} id - the id\n * @returns {String} uuid\n */\n uuid : function (id) {\n var uuid = null;\n\n var i = id.lastIndexOf(\"-\");\n if (i !== -1) {\n uuid = parseInt(id.substring(i + 1), 10);\n }\n\n return uuid;\n }\n\n};\n\nexport default SelectorID;\n","/**!\n * Sortable 1.15.3\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.3\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n var rect = {};\n Array.from(container.children).forEach(function (child) {\n var _rect$left, _rect$top, _rect$right, _rect$bottom;\n if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n var childRect = getRect(child);\n rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n });\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = getParentOrHost(parent));\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild,\n expando: expando\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","import Sortable from \"sortablejs\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar LayerSwitcherDOM = {\n\n /**\n * Creation du drag and drop\n *\n * @param {Object} elementDraggable - Element HTML (DOM) Container\n * @param {Object} context - this\n */\n _createDraggableElement : function (elementDraggable, context) {\n // FIXME retirer cette détection user-agent pour solution propre\n // option forcefallback pour réparer sortable sous Chrome 97\n // option forcefallback casse le layerswitcher du portail sous firefox\n let handleClass = \".GPlayerName\";\n if (checkDsfr()) {\n handleClass = \".GPlayerDragNDrop\";\n }\n if (navigator.userAgent.match(/chrome|chromium|crios/i)) {\n Sortable.create(elementDraggable, {\n handle : handleClass,\n draggable : \".draggable-layer\",\n ghostClass : \"GPghostLayer\",\n animation : 200,\n forceFallback : true,\n // Call event function on drag and drop\n onEnd : function (e) {\n // FIXME pas terrrible, mais il faut bien passer ce contexte...\n context._onEndDragAndDropLayerClick(e);\n }\n });\n } else {\n Sortable.create(elementDraggable, {\n handle : handleClass,\n draggable : \".draggable-layer\",\n ghostClass : \"GPghostLayer\",\n animation : 200,\n // Call event function on drag and drop\n onEnd : function (e) {\n // FIXME pas terrrible, mais il faut bien passer ce contexte...\n context._onEndDragAndDropLayerClick(e);\n }\n });\n }\n },\n\n // ################################################################### //\n // ######################### Main container ########################## //\n // ################################################################### //\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Creation du container principal (DOM)\n *\n * @returns {DOMElement} container - layer switcher DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPlayerSwitcher\");\n container.className = \"GPwidget gpf-widget gpf-mobile-fullscreen gpf-widget-button\";\n return container;\n },\n\n /**\n * Creation du container principal d\"affichage des layers (DOM)\n *\n * @returns {DOMElement} input - element for minimizing/maximizing the layer switcher\n */\n _createMainLayersShowElement : function () {\n // \n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPshowLayersList\");\n input.type = \"checkbox\";\n return input;\n },\n\n /**\n * Creation du container principal des layers (DOM)\n *\n * @returns {DOMElement} container - layers list container\n */\n _createMainLayersElement : function () {\n // ajout de la liste des layers dans le container principal\n //
\n // (...)\n //
\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPlayersList\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n return dialog;\n },\n\n _createMainLayersDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPpanelBody gpf-panel__body_ls fr-modal__body\";\n return div;\n },\n\n /**\n * Creation du container du picto du controle (DOM)\n *\n * @returns {DOMElement} label\n */\n _createMainPictoElement : function () {\n var self = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowLayersListPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowLayersListPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-layerswitcher fr-btn fr-btn--tertiary\";\n button.htmlFor = this._addUID(\"GPshowLayersList\");\n button.setAttribute(\"aria-label\", \"Afficher/masquer le gestionnaire de couches\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n document.getElementById(self._addUID(\"GPshowLayersList\")).checked = status;\n if (document.getElementById(self._addUID(\"GPshowLayersList\")).checked) {\n document.getElementById(self._addUID(\"GPlayerInfoPanel\")).classList.remove(\"GPlayerInfoPanelOpened\", \"gpf-visible\");\n document.getElementById(self._addUID(\"GPlayerInfoPanel\")).classList.add(\"GPlayerInfoPanelClosed\", \"gpf-hidden\");\n }\n self.onShowLayerSwitcherClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n if (document.getElementById(self._addUID(\"GPshowLayersList\")).checked) {\n document.getElementById(self._addUID(\"GPlayerInfoPanel\")).classList.remove(\"GPlayerInfoPanelOpened\", \"gpf-visible\");\n document.getElementById(self._addUID(\"GPlayerInfoPanel\")).classList.add(\"GPlayerInfoPanelClosed\", \"gpf-hidden\");\n }\n self.onShowLayerSwitcherClick(e);\n });\n }\n\n return button;\n },\n\n _createMainCounterLayersElement : function () {\n var span = document.createElement(\"span\");\n span.id = this._addUID(\"GPlayerCounter\");\n span.className = \"GPlayerCounter\";\n span.innerHTML = \"0\";\n return span;\n },\n\n /**\n * Creation du container du panneau d\"information (DOM)\n *\n * @returns {DOMElement} container\n */\n _createMainInfoElement : function () {\n // gestion du panneau d\"information dans le container principal\n //
...
\n var divP = document.createElement(\"dialog\");\n divP.id = this._addUID(\"GPlayerInfoPanel\");\n divP.className = \"GPpanel GPlayerInfoPanelClosed gpf-panel fr-modal\";\n return divP;\n },\n\n _createMainInfoDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n // ################################################################### //\n // ######################### Layer container ######################### //\n // ################################################################### //\n\n _createLayersPanelHeaderElement : function () {\n var container = document.createElement(\"div\");\n // FIXME on n'utilise pas le dsfr !\n // container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n container.className = \"GPpanelHeader gpf-panel__header_ls\";\n return container;\n },\n _createLayersPanelIconElement : function () {\n var label = document.createElement(\"label\");\n label.className = \"GPpanelIcon gpf-btn-header gpf-btn-icon-layers\";\n label.title = \"Couches de données\";\n return label;\n },\n _createLayersPanelTitleElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPpanelTitle gpf-panel__title_ls\";\n div.id = this._addUID(\"GPlayersHeaderTitle\");\n div.innerHTML = \"Couches de données\";\n return div;\n },\n _createLayersPanelCloseElement : function () {\n // contexte\n var self = this;\n\n var btnClose = document.createElement(\"button\");\n btnClose.id = this._addUID(\"GPlayersPanelClose\");\n btnClose.className = \"GPpanelClose GPlayersPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n btnClose.title = \"Fermer le panneau\";\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible fr-mx-1w\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n btnClose.appendChild(span);\n\n // Link panel close / visibility checkbox\n if (btnClose.addEventListener) {\n btnClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowLayersListPicto\")).click();\n }, false);\n } else if (btnClose.attachEvent) {\n btnClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowLayersListPicto\")).click();\n });\n }\n\n return btnClose;\n },\n\n /**\n * Creation du container du layer (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n * @param {Object} obj.layer - couche (ol ou leaflet)\n * @param {String} obj.id - identifiant de la couche (pour ol ou leaflet)\n * @param {String} obj.title - nom de la couche à afficher dans le controle\n * @param {String} obj.description - description de la couche à afficher\n * @param {Boolean} obj.visibility - visibilité de la couche dans la carte (true or false)\n * @param {Float} obj.opacity - opacité de la couche\n *\n * @returns {DOMElement} container\n */\n _createContainerLayerElement : function (obj) {\n // exemple :\n //
\n // \n // \n // \n //
\n\n // \n // \n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPlayerSwitcher_ID_\" + obj.id);\n container.className = \"GPlayerSwitcher_layer gpf-panel__content fr-modal__content draggable-layer\";\n\n // ajout des outils basiques (visibility / layer name)\n container.appendChild(this._createBasicToolElement(obj));\n\n // ajout bouton des outils avancés\n container.appendChild(this._createAdvancedToolShowElement(obj));\n\n // liste des outils avancés (layer info / opacity slider / opacity value / removal)\n container.appendChild(this._createAdvancedToolElement(obj));\n\n return container;\n },\n\n // ################################################################### //\n // ############################ Layer tool ########################### //\n // ################################################################### //\n\n /**\n * Creation du container des outils basiques du layer (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n *\n * @returns {DOMElement} container\n */\n _createBasicToolElement : function (obj) {\n // exemple :\n //
\n // \n // \n //
\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPbasicTools_ID_\" + obj.id);\n div.className = \"GPlayerBasicTools\";\n\n div.appendChild(this._createBasicToolNameElement(obj));\n div.appendChild(this._createBasicToolVisibilityElement(obj));\n div.appendChild(this._createBasicToolDragNDropElement(obj));\n\n return div;\n },\n\n _createBasicToolDragNDropElement : function (obj) {\n // INFO inactif en mode classique !\n var button = document.createElement(\"div\");\n button.id = this._addUID(\"GPdragndropPicto_ID_\" + obj.id);\n button.className = \"GPelementHidden GPlayerDragNDrop gpf-btn gpf-btn-icon gpf-btn-icon-ls-dragndrop gpf-btn--tertiary fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n button.title = \"Deplacer la couche\";\n button.setAttribute(\"tabindex\", \"0\");\n\n var self = this;\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n self._onStartDragAndDropLayerClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n self._onStartDragAndDropLayerClick(e);\n });\n }\n\n return button;\n },\n\n /**\n * Creation du nom du layer (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n *\n * @returns {DOMElement} container\n */\n _createBasicToolNameElement : function (obj) {\n // exemple :\n // Quartiers prioritaires de la ville\n var label = document.createElement(\"label\");\n label.id = this._addUID(\"GPname_ID_\" + obj.id);\n label.className = \"GPlayerName gpf-label gpf-label-name fr-label\";\n label.title = obj.description || obj.title;\n label.innerHTML = obj.title;\n\n return label;\n },\n\n /**\n * Creation de l'icone de visibilité du layer (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n\n * @returns {DOMElement[]} array containing input and label elements\n */\n _createBasicToolVisibilityElement : function (obj) {\n var visible = (typeof obj.visibility !== \"undefined\") ? obj.visibility : true;\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPvisibilityPicto_ID_\" + obj.id);\n button.className = \"GPlayerVisibility gpf-btn gpf-btn-icon gpf-btn-icon-ls-visibility fr-btn fr-btn--tertiary gpf-btn--tertiary\";\n button.title = \"Afficher/masquer la couche\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", visible);\n button.setAttribute(\"type\",\"button\");\n\n var context = this;\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context._onVisibilityLayerClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context._onVisibilityLayerClick(e);\n });\n }\n\n return button;\n },\n\n /**\n * Creation de l'affichage du menu des outils avancés du layer (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n *\n * @returns {DOMElement[]} array containing input and label elements\n */\n _createAdvancedToolShowElement : function (obj) {\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowAdvancedTools_ID_\" + obj.id);\n\n button.className = \"GPshowAdvancedToolPicto GPshowMoreOptionsImage GPshowMoreOptions GPshowLayerAdvancedTools gpf-btn gpf-btn-icon gpf-btn-icon-ls-collapse fr-btn--sm fr-btn--tertiary gpf-btn--tertiary\";\n button.title = \"Plus d'outils\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\",\"button\");\n\n var self = this;\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n var element = document.getElementById(self._addUID(\"GPadvancedTools_ID_\" + obj.id));\n if (status) {\n element.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n element.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n } else {\n element.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n element.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n }\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n element.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n element.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n });\n }\n\n return button;\n },\n\n /**\n * Creation du container des outils avancés du layer (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n *\n * @returns {DOMElement} container\n */\n _createAdvancedToolElement : function (obj) {\n // exemple :\n //
\n // \n // \n // \n //
\n\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPadvancedTools_ID_\" + obj.id);\n container.className = \"GPelementHidden GPlayerAdvancedTools gpf-hidden\";\n\n container.appendChild(this._createAdvancedToolDeleteElement(obj));\n container.appendChild(this._createAdvancedToolInformationElement(obj));\n\n if (obj.type !== \"feature\") {\n var array = this._createAdvancedToolOpacityElement(obj);\n for (var i = 0; i < array.length; i++) {\n container.appendChild(array[i]);\n }\n }\n\n container.appendChild(this._createAdvancedToolExtentElement(obj));\n\n if (checkDsfr()) {\n var btn = document.createElement(\"button\");\n btn.className = \"GPlayerAdvancedToolsContextual fr-btn gpf-btn gpf-btn--tertiary fr-btn--tertiary-no-outline\";\n btn.setAttribute(\"aria-pressed\", false);\n if (btn.addEventListener) {\n btn.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n });\n } else if (btn.attachEvent) {\n btn.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n });\n }\n\n var contextual = document.createElement(\"div\");\n contextual.appendChild(this._createAdvancedToolDeleteElement(obj, true));\n contextual.appendChild(this._createAdvancedToolInformationElement(obj, true));\n contextual.appendChild(this._createAdvancedToolExtentElement(obj, true));\n\n container.appendChild(btn);\n container.appendChild(contextual);\n }\n return container;\n },\n\n /**\n * Creation de l'icone de suppression du layer (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n * @param {Boolean} contextual - est-ce que le bouton est dans le menu contextuel ? Default false\n *\n * @returns {DOMElement} container\n */\n _createAdvancedToolDeleteElement : function (obj, contextual = false) {\n var button = document.createElement(\"button\");\n if (!contextual) {\n button.id = this._addUID(\"GPremove_ID_\" + obj.id);\n } else {\n button.id = this._addUID(\"GPremoveContextual_ID_\" + obj.id);\n }\n button.className = \"GPlayerRemove gpf-btn gpf-btn-icon gpf-btn-icon-ls-remove fr-btn fr-btn--tertiary gpf-btn--tertiary\";\n button.title = \"Supprimer la couche\";\n button.layerId = obj.id;\n if (contextual) {\n button.innerText = \"Supprimer\";\n }\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"type\", \"button\");\n\n var context = this;\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n context._onDropLayerClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n context._onDropLayerClick(e);\n });\n }\n\n return button;\n },\n\n /**\n * Creation de l'icone d'information du layer (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n * @param {Boolean} contextual - est-ce que le bouton est dans le menu contextuel ? Default false\n *\n * @returns {DOMElement} container\n */\n _createAdvancedToolInformationElement : function (obj, contextual = false) {\n // exemple :\n //
\n\n var btnInfo = document.createElement(\"button\");\n if (!contextual) {\n btnInfo.id = this._addUID(\"GPinfo_ID_\" + obj.id);\n } else {\n btnInfo.id = this._addUID(\"GPinfoContextual_ID_\" + obj.id);\n }\n btnInfo.className = \"GPlayerInfo GPlayerInfoClosed gpf-btn gpf-btn-icon gpf-btn-icon-ls-info fr-btn fr-btn--tertiary gpf-btn--tertiary\";\n // hack pour garder un emplacement vide\n if (!obj.title || !obj.description) {\n btnInfo.style.opacity = \"0\";\n btnInfo.style.visibility = \"hidden\";\n if (contextual) {\n btnInfo.style.display = \"none\";\n }\n }\n btnInfo.title = \"Informations/légende\";\n btnInfo.layerId = obj.id;\n if (contextual) {\n btnInfo.innerText = \"Informations\";\n }\n btnInfo.setAttribute(\"tabindex\", \"0\");\n btnInfo.setAttribute(\"type\", \"button\");\n\n // add event on click\n var context = this;\n if (btnInfo.addEventListener) {\n btnInfo.addEventListener(\n \"click\",\n function (e) {\n context._onOpenLayerInfoClick(e);\n }\n );\n } else if (btnInfo.attachEvent) {\n // internet explorer\n btnInfo.attachEvent(\n \"onclick\",\n function (e) {\n context._onOpenLayerInfoClick(e);\n }\n );\n }\n\n return btnInfo;\n },\n\n /**\n * Creation de l'icone de gestion de l'opacité du layer (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n *\n * @returns {DOMElement[]} array of two containers\n */\n _createAdvancedToolOpacityElement : function (obj) {\n // exemple :\n //
\n // \n //
\n //
\n // 100\n // %\n //
\n\n var list = [];\n\n // curseur pour changer l'opacité\n var divO = document.createElement(\"div\");\n divO.id = this._addUID(\"GPopacity_ID_\" + obj.id);\n divO.className = \"GPlayerOpacity fr-range fr-range--sm\";\n // For DSFR\n divO.dataset.frJsRange = \"true\";\n divO.title = \"Opacité\";\n\n var opacity = (typeof obj.opacity !== \"undefined\") ? obj.opacity : 1;\n opacity = Math.round(opacity * 100);\n divO.style.setProperty(\"--progress-right\", opacity + \"%\");\n\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPopacityValueDiv_ID_\" + obj.id);\n input.type = \"range\";\n input.value = opacity;\n input.ariaLabel = \"Opacité\";\n\n // add event for opacity change\n var context = this;\n if (input.addEventListener) {\n input.addEventListener(\n \"change\",\n function (e) {\n context._onChangeLayerOpacity(e);\n }\n );\n } else if (input.attachEvent) {\n // internet explorer\n input.attachEvent(\n \"onchange\",\n function (e) {\n context._onChangeLayerOpacity(e);\n }\n );\n }\n\n if (input.addEventListener) {\n input.addEventListener(\n \"input\",\n function (e) {\n context._onChangeLayerOpacity(e);\n }\n );\n } else if (input.attachEvent) {\n // internet explorer\n input.attachEvent(\n \"oninput\",\n function (e) {\n context._onChangeLayerOpacity(e);\n }\n );\n }\n\n divO.appendChild(input);\n\n // Valeur d'opacité\n var divC = document.createElement(\"div\");\n divC.id = this._addUID(\"GPopacityValueDiv_ID_\" + obj.id);\n divC.className = \"GPlayerOpacityValue\";\n\n var span = document.createElement(\"span\");\n span.id = this._addUID(\"GPopacityValue_ID_\" + obj.id);\n span.className = \"gpf-range__output fr-range__output gpf-visible\";\n span.innerHTML = opacity + \"%\";\n\n divC.appendChild(span);\n\n list.push(divO);\n list.push(divC);\n\n return list;\n },\n\n /**\n * Creation de l'icone de zoom sur extent (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n * @param {Boolean} contextual - est-ce que le bouton est dans le menu contextuel ? Default false\n *\n * @returns {DOMElement} container\n */\n _createAdvancedToolExtentElement : function (obj, contextual = false) {\n // FIXME inactif en mode classique !\n var button = document.createElement(\"button\");\n if (!contextual) {\n button.id = this._addUID(\"GPextent_ID_\" + obj.id);\n } else {\n button.id = this._addUID(\"GPextentContextual_ID_\" + obj.id);\n }\n button.className = \"GPelementHidden GPlayerExtent gpf-btn gpf-btn-icon gpf-btn-icon-ls-extent fr-btn fr-btn--tertiary gpf-btn--tertiary\";\n button.title = \"Zoomer dans l'étendue\";\n button.layerId = obj.id;\n if (contextual) {\n button.innerText = \"Zoomer\";\n }\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", true);\n button.setAttribute(\"type\", \"button\");\n\n var context = this;\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context._onZoomToExtentClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context._onZoomToExtentClick(e);\n });\n }\n\n return button;\n },\n\n // ################################################################### //\n // ############################ Layer info ########################### //\n // ################################################################### //\n\n /**\n * Creation du container du layer info (DOM)\n *\n * TODO GPlayerInfoPopup : ???\n * TODO GPlayerInfoLink : mettre en forme les échelles !\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n *\n * @returns {DOMElement} container\n */\n _createContainerLayerInfoElement : function (obj) {\n var container = document.createElement(\"div\");\n\n var header = document.createElement(\"div\");\n // FIXME on n'utilise pas le dsfr !\n // container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n header.className = \"gpf-panel__header_ls\";\n container.appendChild(header);\n\n var label = document.createElement(\"label\");\n label.className = \"GPlayerInfo gpf-btn-header gpf-btn-icon-ls-info\";\n label.title = \"Informations\";\n header.appendChild(label);\n\n var title = document.createElement(\"div\");\n title.id = this._addUID(\"GPlayerInfoTitle\");\n title.innerHTML = obj.title;\n title.className = \"gpf-panel__title_ls\";\n header.appendChild(title);\n\n var btnClose = document.createElement(\"button\");\n btnClose.id = this._addUID(\"GPlayerInfoClose\");\n btnClose.className = \"GPpanelClose GPlayersPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n btnClose.title = \"Fermer la fenêtre\";\n\n var self = this;\n /** Call event function on close click */\n var onCloseClick = function () {\n document.getElementById(self._addUID(\"GPlayerInfoPanel\")).classList.add(\"GPlayerInfoPanelClosed\", \"gpf-hidden\");\n document.getElementById(self._addUID(\"GPlayerInfoPanel\")).classList.remove(\"GPlayerInfoPanelOpened\", \"gpf-visible\");\n document.getElementById(obj.id).classList.add(\"GPlayerInfoClosed\");\n document.getElementById(obj.id).classList.remove(\"GPlayerInfoOpened\");\n };\n if (btnClose.addEventListener) {\n btnClose.addEventListener(\"click\", onCloseClick);\n } else if (btnClose.attachEvent) {\n // internet explorer\n btnClose.attachEvent(\"onclick\", onCloseClick);\n }\n this.addEventListener(\"layerswitcher:remove\", (e) => {\n if (parseInt(obj.id.split(\"-\")[0].split(\"GPinfo_ID_\")[1]) === e.layer.id) {\n document.getElementById(self._addUID(\"GPlayerInfoPanel\")).classList.add(\"GPlayerInfoPanelClosed\", \"gpf-hidden\");\n document.getElementById(self._addUID(\"GPlayerInfoPanel\")).classList.remove(\"GPlayerInfoPanelOpened\", \"gpf-visible\");\n }\n });\n header.appendChild(btnClose);\n container.appendChild(header);\n\n var content = document.createElement(\"div\");\n content.id = this._addUID(\"GPlayerInfoContent\");\n content.className = \"gpf-panel__content fr-modal__content\";\n container.appendChild(content);\n\n if (obj.quicklookUrl) {\n var quick = document.createElement(\"div\");\n quick.id = this._addUID(\"GPlayerInfoQuicklook\");\n quick.title = \"Afficher un aperçu de la couche\";\n var refquick = document.createElement(\"a\");\n refquick.href = obj.quicklookUrl;\n refquick.appendChild(quick);\n content.appendChild(refquick);\n }\n\n var desc = document.createElement(\"div\");\n desc.id = this._addUID(\"GPlayerInfoDescription\");\n desc.innerHTML = obj.description;\n content.appendChild(desc);\n\n if (obj.metadata) {\n var mtd = document.createElement(\"div\");\n mtd.id = this._addUID(\"GPlayerInfoMetadata\");\n\n var mtdtitle = document.createElement(\"div\");\n mtdtitle.className = \"GPlayerInfoSubtitle\";\n mtdtitle.innerHTML = \"Métadonnées\";\n mtd.appendChild(mtdtitle);\n\n for (var i = 0; i < obj.metadata.length; i++) {\n var urlmtd = obj.metadata[i].url;\n\n var mtdlink = document.createElement(\"div\");\n mtdlink.className = \"GPlayerInfoLink\";\n\n var refmtd = document.createElement(\"a\");\n refmtd.href = urlmtd;\n refmtd.innerHTML = urlmtd;\n mtdlink.appendChild(refmtd);\n mtd.appendChild(mtdlink);\n }\n\n if (obj.metadata.length !== 0) {\n content.appendChild(mtd);\n }\n }\n\n if (obj.legends) {\n var lgd = document.createElement(\"div\");\n lgd.id = this._addUID(\"GPlayerInfoLegend\");\n\n var lgdtitle = document.createElement(\"div\");\n lgdtitle.className = \"GPlayerInfoSubtitle\";\n lgdtitle.innerHTML = \"Légende\";\n lgd.appendChild(lgdtitle);\n\n var legends = {};\n var maxScale = obj.maxScaleDenominator || 560000000;\n\n // on crée un tableau temporaire pour ordonner les légendes selon le dénominateur d'échelle\n for (var k = 0; k < obj.legends.length; k++) {\n var minScale = obj.legends[k].minScaleDenominator;\n if (minScale) {\n var s = minScale.toString();\n minScale = Math.round(parseInt(s.substring(0, 3), 10) / 10) * Math.pow(10, s.length - 2);\n } else {\n minScale = 270;\n }\n legends[minScale] = obj.legends[k];\n }\n\n for (var scale in legends) {\n if (legends.hasOwnProperty(scale)) {\n var urllgd = legends[scale].url;\n // on n'affiche pas les légendes pointant vers \"nolegend.jpg\"\n if (typeof urllgd === \"string\" && urllgd.toLowerCase().indexOf(\"nolegend.jpg\") === -1) {\n // TODO GPlayerInfoPopup\n var lgdlink = document.createElement(\"div\");\n lgdlink.className = \"GPlayerInfoLink\";\n\n maxScale = legends[scale].maxScaleDenominator || maxScale;\n\n var reflgd = document.createElement(\"a\");\n reflgd.className = \"fr-link\";\n reflgd.href = urllgd;\n reflgd.target = \"_blank\";\n reflgd.innerHTML = \"Du 1/\" + scale + \" au 1/\" + maxScale;\n lgdlink.appendChild(reflgd);\n lgd.appendChild(lgdlink);\n } else {\n delete legends[scale];\n }\n }\n }\n\n if (Object.keys(legends).length !== 0) {\n content.appendChild(lgd);\n }\n }\n\n return container;\n }\n};\n\nexport default LayerSwitcherDOM;\n","// import CSS\nimport \"../../CSS/Controls/LayerSwitcher/GPFlayerSwitcher.css\";\n// import \"../../CSS/Controls/LayerSwitcher/GPFlayerSwitcherStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\nimport { intersects as olIntersects } from \"ol/extent\";\nimport {\n transformExtent as olTransformExtentProj\n} from \"ol/proj\";\n// import local\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Config from \"../../Utils/Config\";\n// DOM\nimport LayerSwitcherDOM from \"./LayerSwitcherDOM\";\n\nvar logger = Logger.getLogger(\"layerswitcher\");\n\n/**\n * @classdesc\n * OpenLayers Control to manage map layers : their order, visibility and opacity, and display their informations (title, description, legends, metadata...)\n *\n * @constructor\n * @extends {ol.control.Control}\n * @alias ol.control.LayerSwitcher\n * @type {ol.control.LayerSwitcher}\n * @param {Object} options - control options\n * @param {Array} [options.layers] - list of layers to be configured. Each array element is an object, with following properties :\n * @param {ol.layer.Layer} [options.layers.layer] - ol.layer.Layer layer to be configured (that has been added to map)\n * @param {Object} [options.layers.config] - custom configuration object for layer information (title, description, legends, metadata, quicklook url), with following properties :\n * @param {String} [options.layers.config.title] - layer alias, to be displayed in widget layer list. E.g. : \"Cartes IGN\"\n * @param {String} [options.layers.config.description] - layer description, to be displayed on title hover, or in layer information panel.\n * @param {String} [options.layers.config.quicklookUrl] - link to a quick look image for this layer.\n * @param {Array} [options.layers.config.legends] - array of layer legends. Each array element is an object, with following properties :\n * - url (String, mandatory) : link to a legend\n * - minScaleDenominator (Number, optional) : min scale denominator for legend validity.\n * @param {Array} [options.layers.config.metadata] - array of layer metadata. Each array element is an object, with property url (String, mandatory) : link to a metadata\n * @param {Object} [options.options] - ol.control.Control options (see {@link http://openlayers.org/en/latest/apidoc/ol.control.Control.html ol.control.Control})\n * @param {Number} [options.options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {Boolean} [options.options.collapsed = true] - Specify if widget has to be collapsed (true) or not (false) on map loading. Default is true.\n * @param {Boolean} [options.options.panel = false] - Specify if widget has to have a panel header. Default is false.\n * @param {Boolean} [options.options.counter = false] - Specify if widget has to have a counter. Default is false.\n * @fires layerswitcher:add\n * @fires layerswitcher:remove\n * @fires layerswitcher:extent\n * @fires layerswitcher:change:opacity\n * @fires layerswitcher:change:visibility\n * @fires layerswitcher:change:position\n * @example\n * map.addControl(new ol.control.LayerSwitcher(\n * [\n * {\n * layer : wms1,\n * config : {\n * title : \"test layer name 1\",\n * description : \"test layer desc 1\",\n * }\n * }\n * ],\n * {\n * collapsed : true,\n * panel : false,\n * counter : false,\n * position : \"top-left\"\n * }\n * ));\n *\n * LayerSwitcher.on(\"layerswitcher:add\", function (e) {\n * console.warn(\"layer\", e.layer);\n * });\n * LayerSwitcher.on(\"layerswitcher:remove\", function (e) {\n * console.warn(\"layer\", e.layer);\n * });\n * LayerSwitcher.on(\"layerswitcher:change:opacity\", function (e) {\n * console.warn(\"layer\", e.layer, e.opacity);\n * });\n * LayerSwitcher.on(\"layerswitcher:change:visibility\", function (e) {\n * console.warn(\"layer\", e.layer, e.visibility);\n * });\n * LayerSwitcher.on(\"layerswitcher:change:position\", function (e) {\n * console.warn(\"layer\", e.layer, e.position);\n * });\n */\nvar LayerSwitcher = class LayerSwitcher extends Control {\n\n /**\n * See {@link ol.control.LayerSwitcher}\n * @module LayerSwitcher\n * @alias module:~controls/LayerSwitcher\n * @param {*} options - options\n * @example\n * import LayerSwitcher from \"gpf-ext-ol/controls/LayerSwitcher\"\n * ou\n * import { LayerSwitcher } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n var _options = options.options || {};\n var _layers = options.layers || [];\n\n // call ol.control.Control constructor\n super(_options);\n\n if (!(this instanceof LayerSwitcher)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n if (!Array.isArray(_layers)) {\n throw new Error(\"ERROR WRONG_TYPE : layers should be an array\");\n }\n\n if (typeof _options !== \"object\") {\n throw new Error(\"ERROR WRONG_TYPE : options should be an object\");\n }\n\n /**\n * Nom de la classe\n * @private\n */\n this.CLASSNAME = \"LayerSwitcher\";\n\n this._initialize(_options, _layers);\n\n this.container = this._initContainer(_options);\n\n // ajout du container\n (this.element) ? this.element.appendChild(this.container) : this.element = this.container;\n\n return this;\n }\n\n // ################################################################### //\n // ############## public methods (getters, setters) ################## //\n // ################################################################### //\n\n /**\n * Overload setMap function, that enables to catch map events, such as movend events.\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n // info : cette méthode est appelée (entre autres?) après un map.addControl() ou map.removeControl()\n\n if (map) { // dans le cas de l'ajout du contrôle à la map\n // on ajoute les couches\n this._addMapLayers(map);\n\n // mode \"collapsed\"\n if (!this.collapsed) {\n this._showLayerSwitcherButton.setAttribute(\"aria-pressed\", true);\n }\n\n // At every map movement, layer switcher may be updated,\n // according to layers on map, and their range.\n this._listeners.onMoveListener = map.on(\n \"moveend\",\n () => this._onMapMoveEnd(map)\n );\n\n // add event listeners when a new layer is added to map, to add it in LayerSwitcher control (and DOM)\n this._listeners.onAddListener = map.getLayers().on(\n \"add\",\n (evt) => {\n var layer = evt.element;\n var id;\n // on attribue un nouvel identifiant à cette couche,\n // sauf si c'est une couche qui a déjà été ajoutée dans le LayerSwitcher au préalable (si gpLayerId existe)\n if (!layer.hasOwnProperty(\"gpLayerId\")) {\n id = this._layerId;\n layer.gpLayerId = id;\n this._layerId++;\n } else {\n id = layer.gpLayerId;\n }\n if (!this._layers[id]) {\n this.addLayer(layer);\n }\n }\n );\n\n // add event listeners when a layer is removed from map, to remove it from LayerSwitcher control (and DOM)\n this._listeners.onRemoveListener = map.getLayers().on(\n \"remove\",\n (evt) => {\n var layer = evt.element;\n var id = layer.gpLayerId;\n if (this._layers[id]) {\n this.removeLayer(layer);\n }\n }\n );\n } else {\n // we are in a setMap(null) case\n // we forget the listeners linked to the layerSwitcher\n olObservableUnByKey(this._listeners.onMoveListener);\n olObservableUnByKey(this._listeners.onAddListener);\n olObservableUnByKey(this._listeners.onRemoveListener);\n\n // we put all the layers at Zindex = 0, without changing the visual order\n // in order that the next added layers are not hidden by layers with Zindex > 0\n for (var i = this._layersOrder.length - 1; i >= 0; i--) {\n // this._layersOrder[i].layer.setZIndex(0);\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Add a new layer to control (when added to map) or add new layer configuration\n *\n * @param {ol.layer.Layer} layer - layer to add to layer switcher\n * @param {Object} [config] - additional options for layer configuration\n * @param {Object} [config.title] - layer title (default is layer identifier)\n * @param {Object} [config.description] - layer description (default is null)\n * @param {Object} [config.legends] - layer legends (default is an empty array)\n * @param {Object} [config.metadata] - layer metadata (default is an empty array)\n * @param {Object} [config.quicklookUrl] - layer quicklookUrl (default is null)\n * @fires layerswitcher:add\n * @example\n * layerSwitcher.addLayer(\n * gpParcels,\n * {\n * title : \"Parcelles cadastrales\",\n * description : \"description de la couche\",\n * quicklookUrl : \"http://quicklookUrl.fr\"\n * }\n * )\n */\n addLayer (layer, config) {\n var map = this.getMap();\n config = config || {};\n\n if (!layer) {\n logger.log(\"[ERROR] LayerSwitcher:addLayer - missing layer parameter\");\n return;\n }\n\n var id = layer.gpLayerId;\n if (typeof id === \"undefined\") {\n logger.trace(\"[WARN] LayerSwitcher:addLayer - configuration cannot be set for this layer (layer id not found)\", layer);\n return;\n }\n\n // make sure layer is in map layers\n var isLayerInMap = false;\n map.getLayers().forEach(\n (lyr) => {\n if (lyr.gpLayerId === id) {\n isLayerInMap = true;\n }\n }\n );\n if (!isLayerInMap) {\n logger.log(\"[ERROR] LayerSwitcher:addLayer - configuration cannot be set for \", layer, \" layer (layer is not in map.getLayers() )\");\n return;\n }\n\n // if layer is not already in layers list, add it to control (layers list and container div)\n if (!this._layers[id]) {\n // 1. add layer to layers list\n var layerInfos = this.getLayerInfo(layer) || {};\n var opacity = layer.getOpacity();\n var visibility = layer.getVisible();\n var isInRange = this.isInRange(layer, map);\n var layerOptions = {\n layer : layer,\n id : id,\n name : layer.name, // only geoportal layers\n service : layer.service, // only geoportal layers\n opacity : opacity != null ? opacity : 1,\n visibility : visibility != null ? visibility : true,\n inRange : isInRange != null ? isInRange : true,\n title : config.title != null ? config.title : (layerInfos._title || id),\n description : config.description || layerInfos._description || null,\n legends : config.legends || layerInfos._legends || [],\n metadata : config.metadata || layerInfos._metadata || [],\n quicklookUrl : config.quicklookUrl || layerInfos._quicklookUrl || null\n };\n this._layers[id] = layerOptions;\n\n // 2. create layer div (to be added to control main container)\n // Création de la div correspondante à cette couche\n var layerDiv = this._createLayerDiv(layerOptions);\n // on stocke la div dans les options de la couche, pour une éventuelle réorganisation (setZIndex par ex)\n this._layers[id].div = layerDiv;\n\n // 3. réorganisation des couches si un zIndex est spécifié\n // FIXME :\n // _forceNullzIndex !?\n // getZIndex() retourne undefined au lieu de 0 !?\n if ((layer.getZIndex && layer.getZIndex() !== 0 && typeof layer.getZIndex() !== \"undefined\") || layer._forceNullzIndex) {\n // réorganisation des couches si un zIndex est spécifié\n this._updateLayersOrder();\n } else {\n // sinon on ajoute la couche au dessus des autres\n this._layersOrder.unshift(layerOptions);\n this._lastZIndex++;\n layer.setZIndex(this._lastZIndex);\n this._layerListContainer.insertBefore(layerDiv, this._layerListContainer.firstChild);\n // this._layerListContainer.insertBefore(layerDiv,\n // (this.options.panel) ?\n // this._layerListContainer.childNodes[1] : this._layerListContainer.firstChild);\n }\n\n // 3. Add listeners for opacity and visibility changes\n this._listeners.updateLayerOpacity = layer.on(\n \"change:opacity\",\n (e) => this._updateLayerOpacity(e)\n );\n this._listeners.updateLayerVisibility = layer.on(\n \"change:visible\",\n (e) => this._updateLayerVisibility(e)\n );\n\n if (this._layers[id].onZIndexChangeEvent == null) {\n this._layers[id].onZIndexChangeEvent = layer.on(\n \"change:zIndex\",\n () => this._updateLayersOrder()\n );\n }\n\n // user may also add a new configuration for an already added layer\n } else {\n // add new configuration parameters to layer informations\n for (var prop in config) {\n if (config.hasOwnProperty(prop)) {\n this._layers[id][prop] = config[prop];\n }\n }\n // set new title in layer div\n if (config.title) {\n var nameDiv = document.getElementById(this._addUID(\"GPname_ID_\" + id));\n if (nameDiv) {\n nameDiv.innerHTML = config.title;\n nameDiv.title = config.description || config.title;\n }\n }\n // add layer info picto if necessary\n var infodiv = document.getElementById(this._addUID(\"GPinfo_ID_\" + id));\n if (!document.getElementById(this._addUID(\"GPinfo_ID_\" + id)) && config.description) {\n var advancedTools = document.getElementById(this._addUID(\"GPadvancedTools_ID_\" + id));\n if (advancedTools) {\n advancedTools.appendChild(\n this._createAdvancedToolInformationElement({\n id : id\n })\n );\n }\n }\n // close layer info element if open, to update information.\n if (infodiv && infodiv.className === \"GPlayerInfoOpened\") {\n document.getElementById(this._addUID(\"GPlayerInfoPanel\")).classList.add(\"GPlayerInfoPanelClosed\", \"gpf-hidden\");\n // infodiv.className = \"GPlayerInfo\";\n }\n }\n // on met à jour le compteur\n this._updateLayerCounter();\n /**\n * event triggered when a layer is added\n *\n * @event layerswitcher:add\n * @property {Object} type - event\n * @property {Object} layer - layer\n * @property {Object} target - instance LayerSwitcher\n * @example\n * LayerSwitcher.on(\"layerswitcher:add\", function (e) {\n * console.log(e.layer);\n * })\n */\n this.dispatchEvent({\n type : \"layerswitcher:add\",\n layer : this._layers[id]\n });\n };\n\n /**\n * Remove a layer from control\n *\n * @param {ol.layer.Layer} layer - layer.\n * @fires layerswitcher:remove\n * @deprecated on the future version ...\n */\n removeLayer (layer) {\n if (!layer) {\n return;\n }\n\n olObservableUnByKey(this._listeners.updateLayerOpacity);\n olObservableUnByKey(this._listeners.updateLayerVisibility);\n // olObservableUnByKey(this._listeners.updateLayersOrder);\n\n logger.trace(layer);\n\n var layerID = layer.gpLayerId;\n // var layerList = document.getElementById(this._addUID(\"GPlayersList\")).firstChild;\n // close layer info element if open.\n var infodiv = document.getElementById(this._addUID(\"GPinfo_ID_\" + layerID));\n if (infodiv && infodiv.className === \"GPlayerInfoOpened\") {\n document.getElementById(this._addUID(\"GPlayerInfoPanel\")).classList.add(\"GPlayerInfoPanelClosed\", \"gpf-hidden\");\n // infodiv.className = \"GPlayerInfo\";\n }\n // remove layer div\n var layerDiv = document.getElementById(this._addUID(\"GPlayerSwitcher_ID_\" + layerID));\n if (layerDiv) {\n this._layerListContainer.removeChild(layerDiv);\n }\n\n var layerIndex = Math.abs(layer.getZIndex() - this._lastZIndex);\n // on retire la couche de la liste ordonnée des layers\n this._layersOrder.splice(layerIndex, 1);\n this._lastZIndex--;\n // on met à jour les zindex des couches restantes\n var layerOrderTemp = this._layersOrder;\n for (var i = 0; i < layerOrderTemp.length; i++) {\n layerOrderTemp[i].layer.setZIndex(this._lastZIndex - i);\n }\n\n /**\n * event triggered when a layer is removed\n *\n * @event layerswitcher:add\n * @property {Object} type - event\n * @property {Object} layer - layer\n * @property {Object} target - instance LayerSwitcher\n * @example\n * LayerSwitcher.on(\"layerswitcher:remove\", function (e) {\n * console.log(e.layer);\n * })\n */\n this.dispatchEvent({\n type : \"layerswitcher:remove\",\n layer : this._layers[layerID]\n });\n\n // on retire la couche de la liste des layers\n delete this._layers[layerID];\n\n // on met à jour le compteur\n this._updateLayerCounter();\n }\n\n /**\n * Collapse or display control main container\n *\n * @param {Boolean} collapsed - True to collapse control, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.log(\"[ERROR] LayerSwitcher:setCollapsed - missing collapsed parameter\");\n return;\n }\n var isCollapsed = !document.getElementById(this._addUID(\"GPshowLayersList\")).checked;\n if ((collapsed && isCollapsed) || (!collapsed && !isCollapsed)) {\n return;\n }\n // on simule l'ouverture du panneau après un click\n if (!isCollapsed) {\n // var layers = document.getElementsByClassName(\"GPlayerInfoOpened\");\n // for (var i = 0; i < layers.length; i++) {\n // layers[i].className = \"GPlayerInfo\";\n // }\n document.getElementById(this._addUID(\"GPlayerInfoPanel\")).classList.add(\"GPlayerInfoPanelClosed\", \"gpf-hidden\");\n }\n document.getElementById(this._addUID(\"GPshowLayersList\")).checked = !collapsed;\n }\n\n /**\n * Returns true if widget is collapsed (minimize), false otherwise\n * @returns {Boolean} is collapsed\n */\n getCollapsed () {\n return this.collapsed;\n }\n\n /**\n * Display or hide removeLayerPicto from layerSwitcher for this layer\n *\n * @param {ol.layer.Layer} layer - ol.layer to be configured\n * @param {Boolean} removable - specify if layer can be remove from layerSwitcher (true) or not (false). Default is true\n */\n setRemovable (layer, removable) {\n if (!layer) {\n return;\n }\n var layerID = layer.gpLayerId;\n if (layerID == null) { // on teste si layerID est null ou undefined\n logger.log(\"[LayerSwitcher:setRemovable] layer should be added to map before calling setRemovable method\");\n return;\n }\n var removalDiv = document.getElementById(this._addUID(\"GPremove_ID_\" + layerID));\n if (removalDiv) {\n if (removable === false) {\n removalDiv.style.display = \"none\";\n } else if (removable === true) {\n removalDiv.style.display = \"block\";\n } else {\n\n }\n }\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize LayerSwitcher control (called by constructor)\n *\n * @param {Object} options - ol.control.Control options (see {@link http://openlayers.org/en/latest/apidoc/ol.control.Control.html ol.control.Control})\n * @param {Array} layers - list of layers to be configured. Each array element is an object, with following properties :\n * @private\n */\n _initialize (options, layers) {\n // identifiant du contrôle : utile pour suffixer les identifiants CSS (pour gérer le cas où il y en a plusieurs dans la même page)\n this._uid = options.id || SelectorID.generate();\n\n this.options = options;\n this.options.layers = layers;\n\n // {Object} control layers list. Each key is a layer id, and its value is an object of layers options (layer, id, opacity, visibility, title, description...)\n this._layers = {};\n // [Array] array of ordered control layers\n this._layersOrder = [];\n // [Object] associative array of layers ordered by zindex (keys are zindex values, and corresponding values are arrays of layers at this zindex)\n this._layersIndex = {};\n // {Number} layers max z index, to order layers using their z index\n this._lastZIndex = 0;\n // {Number} layers max id, incremented when a new layer is added\n this._layerId = 0;\n /** {Boolean} true if widget is collapsed, false otherwise */\n this.collapsed = (options.collapsed !== undefined) ? options.collapsed : true;\n // div qui contiendra les div des listes.\n this._layerListContainer = null;\n // [Object] listeners added to the layerSwitcher saved here in order to delete them if we remove the control from the map)\n this._listeners = {};\n\n // add options layers to layerlist.\n // (seulement les couches configurées dans les options du layerSwitcher par l'utilisateur),\n // les autres couches de la carte seront ajoutées dans la méthode setMap\n for (var i = 0; i < layers.length; i++) {\n // recup la layer, son id,\n var layer = layers[i].layer;\n if (layer) {\n var id;\n // si elles ont déjà un identifiant (gpLayerId), on le récupère, sinon on en crée un nouveau, en incrémentant this_layerId.\n if (!layer.hasOwnProperty(\"gpLayerId\")) {\n id = this._layerId;\n layer.gpLayerId = id;\n this._layerId++;\n } else {\n id = layer.gpLayerId;\n }\n\n // et les infos de la conf si elles existent (title, description, legends, quicklook, metadata)\n var conf = layers[i].config || {};\n var opacity = layer.getOpacity();\n var visibility = layer.getVisible();\n var layerOptions = {\n layer : layer, // la couche ol.layer concernée\n id : id,\n name : layer.name, // only geoportal layers\n service : layer.service, // only geoportal layers\n opacity : opacity != null ? opacity : 1,\n visibility : visibility != null ? visibility : true,\n title : conf.title != null ? conf.title : conf.id ? conf.id : id,\n description : conf.description || null,\n legends : conf.legends || [],\n metadata : conf.metadata || [],\n quicklookUrl : conf.quicklookUrl || null\n };\n this._layers[id] = layerOptions;\n }\n }\n }\n\n /**\n * Create control main container (called by constructor)\n *\n * @returns {DOMElement} container - control container\n * @private\n */\n _initContainer () {\n // creation du container principal\n var container = this._createMainContainerElement();\n\n // ajout dans le container principal d'affichage des layers\n var input = this._createMainLayersShowElement();\n container.appendChild(input);\n\n // gestion du mode \"collapsed\"\n if (!this.collapsed) {\n input.checked = \"checked\";\n this.collapsed = false;\n } else {\n this.collapsed = true;\n }\n\n // on ajoute un écouteur d'évènement sur le bouton (checkbox) de dépliement/repliement des couches,\n // pour modifier la propriété this.collapsed quand on clique dessus\n var context = this;\n // event listener\n var changeCollapsed = function (e) {\n this.collapsed = !e.target.checked;\n // on génère nous même l'evenement OpenLayers de changement de pté\n // (utiliser layerSwitcher.on(\"change:collapsed\", function ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n };\n input.addEventListener(\n \"click\",\n function (e) {\n changeCollapsed.call(context, e);\n }\n );\n\n // ajout dans le container principal du picto du controle\n var picto = this._showLayerSwitcherButton = this._createMainPictoElement();\n container.appendChild(picto);\n\n // ajout du compteur de couches\n container.classList.add(\"GplayerSwitcher-counterRemoved\");\n if (this.options.counter) {\n container.classList.remove(\"GplayerSwitcher-counterRemoved\");\n container.classList.add(\"GplayerSwitcher-counterAdded\");\n var counter = this._layerSwitcherCounter = this._createMainCounterLayersElement();\n picto.appendChild(counter);\n }\n\n // ajout dans le container principal de la liste des layers\n var divL = this._createMainLayersElement();\n container.appendChild(divL);\n\n // header ?\n if (this.options.panel) {\n // header\n var panelHeader = this._createLayersPanelHeaderElement();\n divL.appendChild(panelHeader);\n // icon\n var panelIcon = this._createLayersPanelIconElement();\n panelHeader.appendChild(panelIcon);\n // title\n var panelTitle = this._createLayersPanelTitleElement();\n panelHeader.appendChild(panelTitle);\n // close picto\n var panelClose = this._createLayersPanelCloseElement();\n panelHeader.appendChild(panelClose);\n }\n\n var div = this._layerListContainer = this._createMainLayersDivElement();\n divL.appendChild(div);\n\n // creation du mode draggable\n this._createDraggableElement(div, this);\n\n // ajout dans le container principal du panneau d'information\n var divI = this._createMainInfoElement();\n var divD = this._createMainInfoDivElement();\n divI.appendChild(divD);\n container.appendChild(divI);\n\n return container;\n }\n\n /**\n * Add all map layers to control main container\n *\n * @param {Object} map - ol.Map object, to which control is added\n * @private\n */\n _addMapLayers (map) {\n this._layersIndex = {};\n\n // on parcourt toutes les couches de la carte, pour les ajouter à la liste du controle si ce n'est pas déjà le cas.\n // idée : le layerSwitcher doit représenter l'ensemble des couches de la carte.\n map.getLayers().forEach((layer) => {\n // ajout des couches de la carte à la liste\n var id = null;\n // si elles ont déjà un identifiant (gpLayerId), on le récupère, sinon on en crée un nouveau, en incrémentant this_layerId.\n if (!layer.hasOwnProperty(\"gpLayerId\")) {\n id = this._layerId;\n layer.gpLayerId = id;\n this._layerId++;\n } else {\n id = layer.gpLayerId;\n }\n\n var layerInfos = this.getLayerInfo(layer) || {};\n if (!this._layers[id]) {\n // si la couche n'est pas encore dans la liste des layers (this._layers), on l'ajoute\n var opacity = layer.getOpacity();\n var visibility = layer.getVisible();\n var isInRange = this.isInRange(layer, map);\n var layerOptions = {\n layer : layer,\n id : id,\n name : layer.name, // only geoportal layers\n service : layer.service, // only geoportal layers\n opacity : opacity != null ? opacity : 1,\n visibility : visibility != null ? visibility : true,\n inRange : isInRange != null ? isInRange : true,\n title : layerInfos._title || id,\n description : layerInfos._description || null,\n legends : layerInfos._legends || [],\n metadata : layerInfos._metadata || [],\n quicklookUrl : layerInfos._quicklookUrl || null\n };\n this._layers[id] = layerOptions;\n } else {\n // si elle existe déjà, on met à jour ses informations (visibility, opacity, inRange)\n this._layers[id].opacity = layer.getOpacity();\n this._layers[id].visibility = layer.getVisible();\n this._layers[id].inRange = this.isInRange(layer, map);\n }\n // on met à jour le compteur\n this._updateLayerCounter();\n\n // Ajout de listeners sur les changements d'opacité, visibilité\n this._listeners.updateLayerOpacity = layer.on(\n \"change:opacity\",\n (e) => this._updateLayerOpacity(e)\n );\n this._listeners._updateLayerVisibility = layer.on(\n \"change:visible\",\n (e) => this._updateLayerVisibility(e)\n );\n\n // récupération des zindex des couches s'ils existent, pour les ordonner.\n if (layer.getZIndex !== undefined) {\n var layerIndex = layer.getZIndex() || 0; // FIXME le zIndex peut être undefined !? donc par defaut à 0 !\n if (!this._layersIndex[layerIndex] || !Array.isArray(this._layersIndex[layerIndex])) {\n this._layersIndex[layerIndex] = [];\n }\n this._layersIndex[layerIndex].push(this._layers[id]);\n };\n });\n\n // on récupère l'ordre d'affichage des couches entre elles dans la carte, à partir de zindex.\n for (var zindex in this._layersIndex) {\n if (this._layersIndex.hasOwnProperty(zindex)) {\n var layers = this._layersIndex[zindex];\n for (var l = 0; l < layers.length; l++) { // à ce stade layers[l] est une couche de this._layers.\n // on conserve l'ordre des couches : la première est celle qui se situe tout en haut, et la dernière est le \"fond de carte\"\n this._layersOrder.unshift(layers[l]);\n // et on réordonne les couches avec des zindex, uniques.\n this._lastZIndex++;\n layers[l].layer.setZIndex(this._lastZIndex);\n if (this._layers[layers[l].layer.gpLayerId].onZIndexChangeEvent == null) {\n this._layers[layers[l].layer.gpLayerId].onZIndexChangeEvent = layers[l].layer.on(\n \"change:zIndex\",\n () => this._updateLayersOrder()\n );\n }\n }\n }\n }\n\n // on ajoute les div correspondantes aux différentes couches (dans l'ordre inverse d'affichage) dans le controle.\n for (var j = 0; j < this._layersOrder.length; j++) {\n var layerOptions = this._layersOrder[j];\n var layerDiv = this._createLayerDiv(layerOptions);\n if (!this._layerListContainer.querySelector(\"#\" + layerDiv.id)) {\n this._layerListContainer.appendChild(layerDiv);\n }\n // on stocke la div dans les options de la couche, pour une éventuelle réorganisation (setZIndex par ex)\n this._layers[layerOptions.id].div = layerDiv;\n }\n }\n\n /**\n * create layer div (to append to control DOM element).\n *\n * @param {Object} layerOptions - layer options (id, title, description, legends, metadata, quicklookUrl ...)\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _createLayerDiv (layerOptions) {\n var isLegends = layerOptions.legends && layerOptions.legends.length !== 0;\n var isMetadata = layerOptions.metadata && layerOptions.metadata.length !== 0;\n var isQuicklookUrl = layerOptions.quicklookUrl;\n // on n'affiche les informations que si elles sont renseignées (pour ne pas avoir un panneau vide)\n if (isLegends || isMetadata || isQuicklookUrl) {\n layerOptions.displayInformationElement = true;\n }\n\n // ajout d'une div pour cette layer dans le control\n var layerDiv = this._createContainerLayerElement(layerOptions);\n\n if (!layerOptions.inRange) {\n layerDiv.classList.add(\"outOfRange\");\n }\n\n return layerDiv;\n }\n\n // ################################################################### //\n // ######################### DOM events ############################## //\n // ################################################################### //\n\n /**\n * ...\n *\n * @method onShowLayerSwitcherClick\n * @param { event } e évènement associé au clic\n * @private\n */\n onShowLayerSwitcherClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var opened = this._showLayerSwitcherButton.ariaPressed;\n this.collapsed = !(opened === \"true\");// on génère nous même l'evenement OpenLayers de changement de propriété\n // (utiliser mousePosition.on(\"change:collapsed\", function(e) ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n }\n\n /**\n * update layer counter\n */\n _updateLayerCounter () {\n if (this._layerSwitcherCounter) {\n this._layerSwitcherCounter.innerHTML = Object.keys(this._layers).length;\n }\n }\n\n /**\n * Change layer opacity on layer opacity picto click\n *\n * @param {Object} e - event\n * @private\n */\n _onChangeLayerOpacity (e) {\n e.target.parentNode.style.setProperty(\"--progress-right\", e.target.value + \"%\");\n var divId = e.target.id; // ex GPvisibilityPicto_ID_26\n var layerID = SelectorID.index(divId); // ex. 26\n var layer = this._layers[layerID].layer;\n\n var opacityValue = e.target.value;\n var opacityId = document.getElementById(this._addUID(\"GPopacityValue_ID_\" + layerID));\n opacityId.innerHTML = opacityValue + \"%\";\n\n layer.setOpacity(opacityValue / 100);\n }\n\n /**\n * Update picto opacity value on layer opacity change\n *\n * @param {Object} e - event\n * @fires layerswitcher:change:opacity\n * @private\n */\n _updateLayerOpacity (e) {\n var opacity = e.target.getOpacity();\n if (opacity > 1) {\n opacity = 1;\n }\n if (opacity < 0) {\n opacity = 0;\n }\n var id = e.target.gpLayerId;\n\n var layerOpacityInput = document.getElementById(this._addUID(\"GPopacityValueDiv_ID_\" + id));\n if (layerOpacityInput) {\n layerOpacityInput.value = Math.round(opacity * 100);\n }\n\n var layerOpacitySpan = document.getElementById(this._addUID(\"GPopacityValue_ID_\" + id));\n if (layerOpacitySpan) {\n layerOpacitySpan.innerHTML = Math.round(opacity * 100) + \"%\";\n }\n\n /**\n * event triggered when an opacity layer is changed\n *\n * @event layerswitcher:change:opacity\n * @property {Object} type - event\n * @property {Object} opacity - opacity\n * @property {Object} layer - layer\n * @property {Object} target - instance LayerSwitcher\n * @example\n * LayerSwitcher.on(\"layerswitcher:change\", function (e) {\n * console.log(e.opacity);\n * })\n */\n this.dispatchEvent({\n type : \"layerswitcher:change:opacity\",\n opacity : opacity,\n layer : this._layers[id]\n });\n }\n\n /**\n * Change layer visibility on layer visibility picto click\n *\n * @param {Object} e - event\n * @private\n */\n _onVisibilityLayerClick (e) {\n var divId = e.target.id; // ex GPvisibilityPicto_ID_26\n var layerID = SelectorID.index(divId); // ex. 26\n var layer = this._layers[layerID].layer;\n layer.setVisible((e.target.ariaPressed === \"true\"));\n }\n\n /**\n * Change picto visibility on layer visibility change\n *\n * @param {Object} e - event\n * @fires layerswitcher:change:visibility\n * @private\n */\n _updateLayerVisibility (e) {\n var visible = e.target.getVisible();\n var id = e.target.gpLayerId;\n var layerVisibility = document.getElementById(this._addUID(\"GPvisibilityPicto_ID_\" + id));\n if (layerVisibility) {\n layerVisibility.ariaPressed = visible;\n }\n\n /**\n * event triggered when an visibility layer is changed\n *\n * @event layerswitcher:change:visibility\n * @property {Object} type - event\n * @property {Object} visibility - visibility\n * @property {Object} layer - layer\n * @property {Object} target - instance LayerSwitcher\n * @example\n * LayerSwitcher.on(\"layerswitcher:change:visibility\", function (e) {\n * console.log(e.visibility);\n * })\n */\n this.dispatchEvent({\n type : \"layerswitcher:change:visibility\",\n visibility : visible,\n layer : this._layers[id]\n });\n }\n\n /**\n * Change layers order in layerswitcher (control container) on a layer index change (on map) or when a layer is added to a specific zindex\n * @todo fires layerswitcher:change:zindex\n * @private\n */\n _updateLayersOrder () {\n // info :\n // 1. on récupère les zindex et les couches associées dans un tableau associatif (objet)\n // 2. on réordonne les couche selon leur index : on leur attribue de nouveaux zindex uniques\n // 3. on vide le container des layers, et rajoute les div des couches dans l'ordre décroissant des zindex\n\n var map = this.getMap();\n if (!map) {\n return;\n }\n this._layersIndex = {};\n var layerIndex;\n var id;\n\n // on parcourt toutes les couches pour récupérer leur ordre :\n // on stocke les couches dans un tableau associatif ou les clés sont les zindex, et les valeurs sont des tableaux des couches à ce zindex.\n map.getLayers().forEach(\n (layer) => {\n id = layer.gpLayerId;\n\n // on commence par désactiver temporairement l'écouteur d'événements sur le changement de zindex.\n olObservableUnByKey(this._layers[id].onZIndexChangeEvent);\n this._layers[id].onZIndexChangeEvent = null;\n\n // on ajoute la couche dans le tableau (de l'objet this._layersIndex) correspondant à son zindex\n layerIndex = null;\n if (layer.getZIndex !== undefined) {\n layerIndex = layer.getZIndex();\n if (!this._layersIndex[layerIndex] || !Array.isArray(this._layersIndex[layerIndex])) {\n this._layersIndex[layerIndex] = [];\n }\n this._layersIndex[layerIndex].push(this._layers[id]);\n };\n }\n );\n\n // on réordonne les couches entre elles dans la carte, à partir des zindex stockés ci-dessus.\n this._lastZIndex = 0;\n this._layersOrder = [];\n for (var zindex in this._layersIndex) {\n if (this._layersIndex.hasOwnProperty(zindex)) {\n var layers = this._layersIndex[zindex];\n for (var l = 0; l < layers.length; l++) { // à ce stade layers[l] est une couche de this._layers.\n // on conserve l'ordre des couches : la première est celle qui se situe tout en haut, et la dernière est le \"fond de carte\"\n this._layersOrder.unshift(layers[l]);\n // et on réordonne les couches avec des zindex, uniques.\n this._lastZIndex++;\n // layers[l].layer.setZIndex(lastZIndex);\n // et on réactive l'écouteur d'événement sur les zindex\n if (this._layers[layers[l].layer.gpLayerId].onZIndexChangeEvent == null) {\n this._layers[layers[l].layer.gpLayerId].onZIndexChangeEvent = layers[l].layer.on(\n \"change:zIndex\",\n () => this._updateLayersOrder()\n );\n }\n }\n }\n }\n\n if (this._layerListContainer) {\n // on vide le container précédent\n for (let index = 0; index < this._layerListContainer.childNodes.length; index++) {\n const element = this._layerListContainer.childNodes[index];\n if (element.id === \"\") {\n continue;\n }\n element.remove();\n }\n // et on rajoute les div correspondantes aux différentes couches, dans l'ordre décroissant des zindex\n for (var j = 0; j < this._layersOrder.length; j++) {\n var layerOptions = this._layersOrder[j];\n this._layerListContainer.appendChild(layerOptions.div);\n }\n } else {\n logger.log(\"[ol.control.LayerSwitcher] _updateLayersOrder : layer list container not found to update layers order ?!\");\n }\n }\n\n /**\n * Open layer information panel on picto click\n *\n * @param {Event} e - MouseEvent\n * @private\n */\n _onOpenLayerInfoClick (e) {\n var id = e.target.id; // ex GPvisibilityPicto_ID_26\n var layerID = SelectorID.index(id); // ex. 26\n var layerOptions = this._layers[layerID];\n\n var panel;\n var info;\n\n // Close layer info panel\n var divId = document.getElementById(e.target.id);\n if (divId.classList.contains(\"GPlayerInfoOpened\")) {\n divId.classList.remove(\"GPlayerInfoOpened\");\n divId.classList.add(\"GPlayerInfoClosed\");\n\n panel = document.getElementById(this._addUID(\"GPlayerInfoPanel\"));\n panel.classList.remove(\"GPlayerInfoPanelOpened\", \"gpf-visible\");\n panel.classList.add(\"GPlayerInfoPanelClosed\", \"gpf-hidden\");\n\n info = document.getElementById(this._addUID(\"GPlayerInfoContent\"));\n if (info) {\n info.parentNode.remove();\n }\n return;\n }\n\n // Open layer info panel\n if (divId.classList.contains(\"GPlayerInfoClosed\")) {\n divId.classList.remove(\"GPlayerInfoClosed\");\n divId.classList.add(\"GPlayerInfoOpened\");\n }\n\n panel = document.getElementById(this._addUID(\"GPlayerInfoPanel\"));\n panel.classList.remove(\"GPlayerInfoPanelClosed\", \"gpf-hidden\");\n panel.classList.add(\"GPlayerInfoPanelOpened\", \"gpf-visible\");\n\n info = document.getElementById(this._addUID(\"GPlayerInfoContent\"));\n if (info) {\n info.parentNode.remove();\n }\n\n // on récupère les infos associées au layer pour mettre dynamiquement le contenu du panel d'informations\n var obj = {\n id : id,\n title : layerOptions.title,\n description : layerOptions.description,\n quicklookUrl : layerOptions.quicklookUrl,\n metadata : layerOptions.metadata,\n legends : layerOptions.legends\n };\n // get layer max scale denominator\n var maxResolution = layerOptions.layer.getMaxResolution();\n if (maxResolution === Infinity) {\n obj._maxScaleDenominator = 560000000;\n } else {\n obj._maxScaleDenominator = Math.round(maxResolution / 0.00028);\n }\n var infoLayer = this._createContainerLayerInfoElement(obj);\n panel.firstChild.appendChild(infoLayer);\n }\n\n /**\n * remove layer from layer switcher and map on picto click\n *\n * @param {Event} e - MouseEvent\n * @private\n */\n _onDropLayerClick (e) {\n var divId = e.target.id; // ex GPvisibilityPicto_ID_26\n var layerID = SelectorID.index(divId); // ex. 26\n var layer = this._layers[layerID].layer;\n\n // le retrait de la couche va déclencher l'ecouteur d'évenement,\n // et appeler this.removeLayer qui va supprimer la div.\n this.getMap().getLayers().remove(layer);\n }\n\n /**\n * change layers order (on map) on drag and drop (on control container)\n *\n * @param {Event} e - CustomEvent\n * @private\n */\n _onEndDragAndDropLayerClick (e) {\n logger.trace(e);\n // INFO : e.oldIndex et e.newIndex marchent en mode AMD mais pas Bundle.\n var map = this.getMap();\n\n // on récupère l'ordre des div dans le contrôle pour réordonner les couches (avec zindex)\n var matchesLayers = document.querySelectorAll(\"div.GPlayerSwitcher_layer\");\n var maxZIndex = matchesLayers.length;\n // on vide la liste ordonnée avant de la remplir avec l'ordre des couches selon les div.\n this._layersOrder = [];\n for (var i = 0; i < matchesLayers.length; i++) {\n var tag = matchesLayers[i].id;\n var id = SelectorID.index(tag);\n var layer = this._layers[id].layer;\n\n // on commence par désactiver temporairement l'écouteur d'événements sur le changement de zindex.\n olObservableUnByKey(this._layers[id].onZIndexChangeEvent);\n this._layers[id].onZIndexChangeEvent = null;\n\n if (layer.setZIndex) {\n // maxZIndex--;\n layer.setZIndex(maxZIndex);\n this._layersOrder.push(this._layers[id]);\n maxZIndex--;\n }\n\n // et on réactive l'écouteur d'événement sur les zindex\n if (this._layers[id].onZIndexChangeEvent == null) {\n this._layers[id].onZIndexChangeEvent = layer.on(\n \"change:zIndex\",\n () => this._updateLayersOrder()\n );\n }\n }\n\n // mise à jour de la visu\n map.updateSize();\n\n /**\n * event triggered when an position layer is changed\n *\n * @event layerswitcher:change:visibility\n * @property {Object} type - event\n * @property {Object} position - position\n * @property {Object} layer - layer\n * @property {Object} layers - layers sorted\n * @property {Object} target - instance LayerSwitcher\n * @example\n * LayerSwitcher.on(\"layerswitcher:change:position\", function (e) {\n * console.log(e.position);\n * })\n */\n this.dispatchEvent({\n type : \"layerswitcher:change:position\",\n position : e.newIndex,\n layer : this._layersOrder[e.newIndex],\n layers : this._layersOrder\n });\n }\n\n /**\n * change layers order (on map) on drag and drop (on control container)\n *\n * @param {Event} e - DragNDrop Event\n * @private\n */\n _onStartDragAndDropLayerClick (e) {\n logger.debug(e);\n }\n\n /**\n * zoom to extent\n * @fixme dot it for other user data\n * @param {PointerEvent} e - Event\n */\n _onZoomToExtentClick (e) {\n logger.debug(e);\n\n // FIXME\n // le zoom to extent fonctionne par defaut pour les couches raster TMS/WMS/WMTS issues du catalogue\n // et pour les données utilisateurs de type vecteur\n // mais doit aussi le faire pour les données utilisateurs du type :\n // * raster par moissonnage (imports)\n // * style mapbox (imports)\n\n var domIDShort = e.target.id; // ex GPvisibilityPicto_ID_26\n var domIDLong = SelectorID.index(domIDShort); // ex. 26\n var data = this._layers[domIDLong];\n\n var extent = null;\n var error = null;\n\n var map = this.getMap();\n // cas d'un layer vecteur importé, d'un croquis, d'une couche de calcul\n if (data.layer.hasOwnProperty(\"gpResultLayerId\") && \n (data.layer.gpResultLayerId.split(\":\")[0] === \"layerimport\" || data.layer.gpResultLayerId.split(\":\")[0] === \"drawing\"\n || data.layer.gpResultLayerId.split(\":\")[0] === \"compute\")) {\n // TODO : appeler fonc tion commune\n // zoom sur l'étendue des entités récupérées (si possible)\n if (map.getView() && map.getSize()) {\n var sourceExtent = data.layer.getExtent() || data.layer.getSource().getExtent();\n if (sourceExtent && sourceExtent[0] !== Infinity) {\n map.getView().fit(sourceExtent, map.getSize());\n }\n }\n } else {\n try { \n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw \"ERROR : contract key configuration has to be loaded to load Geoportal layers.\";\n }\n\n var layerName = data.layer.name || data.layer.getSource().name;\n var layerService = data.layer.service || data.layer.getSource().service;\n var layerId = Config.configuration.getLayerId(layerName, layerService);\n if (!layerId) {\n throw \"ERROR : Layer ID not found into the catalogue !?\";\n }\n\n var globalConstraints = Config.configuration.getGlobalConstraints(layerId);\n if (globalConstraints) {\n if (!map || !map.getView()) {\n return;\n }\n var view = map.getView();\n var crsTarget = view.getProjection();\n\n // récupération de l'étendue (en EPSG:4326 par défaut),\n // et reprojection dans la projection de la couche\n var bbox = [\n globalConstraints.extent.left,\n globalConstraints.extent.bottom,\n globalConstraints.extent.right,\n globalConstraints.extent.top\n ];\n var crsSource = globalConstraints.crs;\n // projection par defaut\n if (!crsSource) {\n crsSource = \"EPSG:4326\";\n }\n\n extent = olTransformExtentProj(bbox, crsSource, crsTarget);\n if (extent) {\n view.fit(extent);\n }\n }\n } catch (e) {\n error = e;\n }\n }\n\n /**\n * event triggered when an zoom extent is done\n *\n * @event layerswitcher:zoom\n * @property {Object} type - event\n * @property {Object} extent - extent (map projection)\n * @property {Object} layer - layer\n * @property {String} error - error\n * @property {Object} target - instance LayerSwitcher\n * @example\n * LayerSwitcher.on(\"layerswitcher:extent\", function (e) {\n * console.log(e.extent);\n * })\n */\n this.dispatchEvent({\n type : \"layerswitcher:extent\",\n extent : extent,\n layer : data,\n error : error\n });\n }\n\n /**\n * check layers range on map movement\n *\n * @param {ol.Map} map - ol map on which event occured\n * @private\n */\n _onMapMoveEnd (map) {\n // pour chaque couche de la map, on vérifie qu'elle soit toujours dans la visu (inRange)\n map.getLayers().forEach(\n (layer) => {\n var id = layer.gpLayerId;\n if (this._layers[id]) {\n var layerOptions = this._layers[id];\n\n // Check if layer is out of range.\n var layerDiv;\n if (this.isInRange(layer, map) && !layerOptions.inRange) {\n layerOptions.inRange = true;\n layerDiv = document.getElementById(this._addUID(\"GPlayerSwitcher_ID_\" + id));\n layerDiv.classList.remove(\"outOfRange\");\n } else if (!this.isInRange(layer, map) && layerOptions.inRange) {\n layerOptions.inRange = false;\n layerDiv = document.getElementById(this._addUID(\"GPlayerSwitcher_ID_\" + id));\n layerDiv.classList.add(\"outOfRange\");\n }\n }\n }\n );\n }\n\n // ################################################################### //\n // ############################ Utils ################################ //\n // ################################################################### //\n\n /**\n * Returns Layer Container Id associated with given olLayer\n *\n * @param {ol.layer.Layer} olLayer - ol layer object\n * @returns {String} - div container Id ; null if layer not found.\n */\n getLayerDOMId (olLayer) {\n var foundId = null;\n\n this.getMap().getLayers().forEach((layer) => {\n if (layer === olLayer) {\n foundId = layer.hasOwnProperty(\"gpLayerId\") ? layer.gpLayerId : null;\n }\n });\n\n // TODO : recuperer \"GPlayerSwitcher_ID\" depuis une constante\n return foundId !== null ? this._addUID(\"GPlayerSwitcher_ID_\" + foundId) : null;\n }\n\n /**\n * Check if map view is out of layer range (in terms of extent and zoom)\n *\n * @param {Object} layer - the ol.layer object\n * @param {Object} map - the ol.Map object\n * @returns {Boolean} outOfRange - false if map view is out of layer range\n */\n isInRange (layer, map) {\n if (!map) {\n return;\n }\n // check if map zoom is in layer zoom range\n var mapResolution = map.getView().getResolution();\n if (mapResolution > layer.getMaxResolution() || mapResolution < layer.getMinResolution()) {\n return false;\n }\n\n // check if map extent intersects layer extent (if defined)\n var mapExtent = map.getView().calculateExtent(map.getSize());\n var layerExtent = layer.getExtent();\n if (layerExtent && !olIntersects(mapExtent, layerExtent)) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Get layer informations : title, description, quicklookurl, legends, metadata\n *\n * @param {Object} layer - the ol.layer object\n * @returns {Object} layerInfo - layer informations\n */\n getLayerInfo (layer) {\n var layerInfo = {};\n if (layer.getProperties !== undefined && layer.getSource !== undefined) {\n var layerProperties = layer.getProperties();\n var src = layerProperties.source;\n if (src) {\n layerInfo._title = src._title || layerProperties.title || layerProperties.id || \"\";\n layerInfo._description = src._description || layerProperties.description || \"\";\n layerInfo._quicklookUrl = src._quicklookUrl || layerProperties.quicklookUrl || \"\";\n layerInfo._metadata = src._metadata || layerProperties.metadata || [];\n layerInfo._legends = src._legends || layerProperties.legends || [];\n }\n }\n return layerInfo;\n }\n\n};\n\n// on récupère les méthodes de la classe commune LayerSwitcherDOM\nObject.assign(LayerSwitcher.prototype, LayerSwitcherDOM);\nObject.assign(LayerSwitcher.prototype, Widget);\n\nexport default LayerSwitcher;\n\n// Expose LayerSwitcher as ol.control.LayerSwitcher (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.LayerSwitcher = LayerSwitcher;\n}\n","import Logger from \"./LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"draggable\");\n\n/**\n * @module Draggable\n * @alias module:~utils/Draggable\n * @fixme conflit entre la position et le mode draggable\n * @private\n * @description\n * ...\n *\n * @example\n * dragElement();\n */\nvar Draggable = {\n /**\n * A draggable HTML element with JavaScript and CSS.\n *\n * @function dragElement\n * @param {DOMElement} element - element\n * @param {DOMElement} header - header (optional)\n * @param {DOMElement} container - container (optional)\n * @see https://gist.github.com/stephanbogner/75de4e84687ae6065fb0a4d81917543e\n * @see https://stackoverflow.com/questions/48097791/how-to-keep-a-draggable-element-from-being-moved-outside-a-boundary\n * @example\n * // CSS :\n * // #element { position: absolute; }\n * // HTML :\n * //
\n * //
\n * //
\n * //
...\n * //
\n * //
\n * //
\n * // JS :\n * var element = document.getElementById(\"element\");\n * Draggable.dragElement(element, header, container);\n */\n dragElement : function (element, header, container) {\n // Adapted from https://www.w3schools.com/howto/howto_js_draggable.asp\n let dragStartMouseX = 0, dragStartMouseY = 0, diffX = 0, diffY = 0, positionX = 0, positionY = 0;\n if (header) {\n header.addEventListener(\"mousedown\", dragMouseDown, true);\n } else {\n element.addEventListener(\"mousedown\", dragMouseDown, true);\n }\n var rect;\n var viewport = {\n bottom : 0,\n left : 0,\n right : 0,\n top : 0,\n };\n\n function dragMouseDown (e) {\n e = e || window.event;\n e.preventDefault();\n\n dragStartMouseX = e.clientX;\n dragStartMouseY = e.clientY;\n\n rect = element.getBoundingClientRect();\n const viewPortRect = container.getBoundingClientRect();\n viewport = {\n bottom : viewPortRect.bottom,\n left : viewPortRect.left,\n right : viewPortRect.right,\n top : viewPortRect.top,\n };\n\n document.addEventListener(\"mouseup\", closeDragElement, true);\n document.addEventListener(\"mousemove\", elementDrag, true);\n }\n\n function closeDragElement () {\n /* stop moving when mouse button is released: */\n positionX -= diffX;\n positionY -= diffY;\n document.removeEventListener(\"mouseup\", closeDragElement, true);\n document.removeEventListener(\"mousemove\", elementDrag, true);\n }\n\n function elementDrag (e) {\n e = e || window.event;\n // e.preventDefault();\n let currentMouseX = e.clientX;\n let currentMouseY = e.clientY;\n\n let oldDiffX = diffX;\n let oldDiffY = diffY;\n\n diffX = dragStartMouseX - currentMouseX;\n diffY = dragStartMouseY - currentMouseY;\n\n var newLeft = rect.left - diffX;\n var newTop = rect.top - diffY;\n\n if (newLeft < viewport.left\n || newTop < viewport.top\n || newLeft + rect.width > viewport.right\n || newTop + rect.height > viewport.bottom\n ) {\n // the element will hit the boundary, do nothing...\n diffX = oldDiffX;\n diffY = oldDiffY;\n } else {\n // set the element's new position:\n let newX = positionX - diffX;\n let newY = positionY - diffY;\n element.style.transform = \"translate(\" + newX + \"px,\" + newY + \"px)\";\n }\n }\n }\n};\n\nexport default Draggable;\n","export default class AsyncData {\n\n constructor (initialData) {\n this.data = initialData;\n this.subscribers = [];\n }\n \n // Subscribe to changes in the data\n subscribe (callback) {\n if (typeof callback !== \"function\") {\n throw new Error(\"Callback must be a function\");\n }\n this.subscribers.push(callback);\n }\n \n // Update the data and wait for all updates to complete\n async set (key, value) {\n this.data[key] = value;\n \n // Call the subscribed function and wait for it to resolve\n const updates = this.subscribers.map(async (callback) => {\n await callback(key, value);\n });\n \n await Promise.allSettled(updates);\n }\n\n get (key) {\n return this.data[key];\n }\n\n}","var GetFeatureInfoDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this.uid) ? id + \"-\" + this.uid : id;\n return uid;\n },\n\n /**\n * String to html\n * @param {String} str -string to convert\n * @returns {DOMElement} return dom element\n */\n stringToHTML : function (str) {\n var support = function () {\n if (!window.DOMParser) {\n return false;\n }\n var parser = new DOMParser();\n try {\n parser.parseFromString(\"x\", \"text/html\");\n } catch (err) {\n return false;\n }\n return true;\n };\n\n // If DOMParser is supported, use it\n if (support()) {\n var parser = new DOMParser();\n var doc = parser.parseFromString(str, \"text/html\");\n return doc.body;\n }\n\n // Otherwise, fallback to old-school method\n var dom = document.createElement(\"div\");\n dom.innerHTML = str;\n return dom;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPgetFeatureInfo\");\n container.className = \"GPgetFeatureInfo gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show GetFeatureInfo\n *\n * @returns {DOMElement} DOM element\n */\n _createShowGetFeatureInfoPictoElement : function () {\n var self = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPgetFeatureInfoPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPgetFeatureInfoPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-getfeatureinfo fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Activer/désactiver l'interrogation des couches\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // Close all results and panels when minimizing the getFeatureInfo\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowGetFeatureInfoClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowGetFeatureInfoClick(e);\n });\n }\n\n return button;\n },\n\n // ################################################################### //\n // ################### Methods of panel container #################### //\n // ################################################################### //\n\n /**\n * Create Container Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createGetFeatureInfoPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPgetFeatureInfoPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n return dialog;\n },\n\n _createGetFeatureInfoPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPpanelBody gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createGetFeatureInfoPanelHeaderElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n return container;\n },\n _createGetFeatureInfoPanelTitleElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n div.innerHTML = \"GetFeatureInfo\";\n return div;\n },\n _createGetFeatureInfoPanelCloseElement : function () {\n var self = this;\n\n var btnClose = document.createElement(\"button\");\n btnClose.className = \"GPpanelClose GPcloseGetFeatureInfo gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n btnClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n if (btnClose.addEventListener) {\n btnClose.addEventListener(\"click\", function (e) {\n btnClose.setAttribute(\"aria-pressed\", false);\n self.onCloseGetFeatureInfoClick();\n }, false);\n } else if (btnClose.attachEvent) {\n btnClose.attachEvent(\"onclick\", function (e) {\n btnClose.setAttribute(\"aria-pressed\", false);\n self.onCloseGetFeatureInfoClick();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n btnClose.appendChild(span);\n\n return btnClose;\n },\n\n /**\n * Create loader\n * @returns {DOMElement} DOM element\n */\n _createGetFeatureInfoWaitingDiv : function () {\n var waitingDivString = `\n
\n `;\n return waitingDivString;\n },\n\n // ################################################################### //\n // ####################### Methods for Layer GFI ####################### //\n // ################################################################### //\n\n /**\n * Create group d'accodeon\n * @returns {DOMElement} DOM element\n */\n _createGetFeatureInfoAccordionGroup : function () {\n // contexte d'execution\n var self = this;\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPgetFeatureInfoAccordionGroup\");\n div.className = \"GPgetFeatureInfoAccordionGroup fr-accordions-group\";\n\n return div;\n },\n\n /**\n * Create accordeon\n * see evenement !\n * @param { String } layername nom du layer\n * @param { String } content contenu du gfi\n * @returns {DOMElement} DOM element\n */\n _createGetFeatureInfoLayerAccordion : function (layername) {\n var dsfrTemplate = this.stringToHTML(`\n
\n

\n \n

\n
\n ${this._createGetFeatureInfoWaitingDiv()}\n
\n
\n `);\n var accordeon = dsfrTemplate.firstChild;\n var button = accordeon.querySelector(\"button, button.fr-accordion__btn\");\n button.addEventListener(\"click\", (e) => {\n e.currentTarget.ariaExpanded = !(e.currentTarget.ariaExpanded === \"true\");\n var collapse = document.getElementById(e.currentTarget.getAttribute(\"aria-controls\"));\n if (e.currentTarget.ariaExpanded === \"true\") {\n collapse.classList.add(\"fr-collapse--expanded\");\n collapse.classList.remove(\"GPelementHidden\");\n } else {\n collapse.classList.remove(\"fr-collapse--expanded\");\n collapse.classList.add(\"GPelementHidden\");\n }\n });\n return accordeon;\n },\n\n};\n\nexport default GetFeatureInfoDOM;\n","// import CSS\nimport \"../../CSS/Controls/GetFeatureInfo/GPFgetFeatureInfo.css\";\n\n// import OpenLayers\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport VectorTileSource from \"ol/source/VectorTile\";\nimport VectorSource from \"ol/source/Vector\";\nimport TileWMSSource from \"ol/source/TileWMS\";\nimport WMTSSource from \"ol/source/WMTS\";\nimport ImageWMSSource from \"ol/source/ImageWMS\";\n// import local\nimport Utils from \"../../Utils/Helper\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Draggable from \"../../Utils/Draggable\";\nimport AsyncData from \"../Utils/AsyncData\";\n\n// DOM\nimport GetFeatureInfoDOM from \"./GetFeatureInfoDOM\";\n\nvar logger = Logger.getLogger(\"getFeatureInfo\");\n\n/**\n * @classdesc\n *\n * GetFeatureInfo button\n *\n * @constructor\n * @alias ol.control.GetFeatureInfo\n * @type {ol.control.GetFeatureInfo}\n * @extends {ol.control.Control}\n * @param {Object} options - options for function call.\n *\n * @fires custom:action\n * @example\n * var getFeatureInfo = new ol.control.GetFeatureInfo();\n * map.addControl(getFeatureInfo);\n */\nvar GetFeatureInfo = class GetFeatureInfo extends Control {\n\n /**\n * See {@link ol.control.GetFeatureInfo}\n * @module GetFeatureInfo\n * @alias module:~controls/GetFeatureInfo\n * @param {Object} [options] - options\n * @example\n * import GetFeatureInfo from \"gpf-ext-ol/controls/GetFeatureInfo\"\n * ou\n * import { GetFeatureInfo } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof GetFeatureInfo)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"GetFeatureInfo\";\n // initialisation du composant\n this.initialize(options);\n\n // GetFeatureInfo main DOM container\n this.container = this.initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this.container) : this.element = this.container;\n\n return this;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this.panelGetFeatureInfoContainer,\n this.panelGetFeatureInfoHeaderContainer,\n map.getTargetElement()\n );\n }\n // mode \"collapsed\"\n if (!this.collapsed) {\n this.buttonGetFeatureInfoShow.setAttribute(\"aria-pressed\", true);\n }\n\n // some stuff\n\n // ajout des evenements sur la carte\n if (this.auto) {\n this.addEventsListeners(map);\n }\n } else {\n // suppression des evenements sur la carte\n // pour les futurs suppressions de couche\n if (this.auto) {\n this.removeEventsListeners();\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.element.classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n // ################################################################### //\n // ################### getters / setters ############################# //\n // ################################################################### //\n\n\n // ################################################################### //\n // #################### privates methods ############################# //\n // ################################################################### //\n\n /**\n * Initialize GetFeatureInfo control (called by GetFeatureInfo constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n this.uid = options.id || SelectorID.generate();\n\n // set default options\n this.options = {\n collapsed : true,\n draggable : false,\n auto : true\n };\n\n // merge with user options\n Utils.assign(this.options, options);\n\n /** {Boolean} specify if control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n /** {Boolean} specify if control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n /** {Boolean} specify if control add some stuff auto */\n this.auto = this.options.auto;\n\n this.buttonGetFeatureInfoShow = null;\n this.panelGetFeatureInfoContainer = null;\n this.getFeatureInfoPanelDiv = null;\n this.panelGetFeatureInfoHeaderContainer = null; // usefull for the dragNdrop\n this.buttonGetFeatureInfoClose = null;\n this.getFeatureInfoAccordionGroup = null;\n this.panelGetFeatureInfoEntriesContainer = null;\n\n /** {Array} specify some events listeners */\n this.eventsListeners = [];\n\n /** GFI settings */\n this.pixel = [];\n this.coordinates = [];\n this.layers = [];\n this.res = null;\n }\n\n /**\n * Create control main container (DOM initialize)\n *\n * @returns {DOMElement} DOM element\n * @private\n */\n initContainer () {\n // create main container\n var container = this._createMainContainerElement();\n\n var picto = this.buttonGetFeatureInfoShow = this._createShowGetFeatureInfoPictoElement();\n container.appendChild(picto);\n\n // panel\n var getFeatureInfoPanel = this.panelGetFeatureInfoContainer = this._createGetFeatureInfoPanelElement();\n var getFeatureInfoPanelDiv = this.getFeatureInfoPanelDiv = this._createGetFeatureInfoPanelDivElement();\n getFeatureInfoPanel.appendChild(getFeatureInfoPanelDiv);\n\n // header\n var getFeatureInfoPanelHeader = this.panelGetFeatureInfoHeaderContainer = this._createGetFeatureInfoPanelHeaderElement();\n // icone\n // var getFeatureInfoPanelIcon = this._createGetFeatureInfoPanelIconElement();\n // getFeatureInfoPanelHeader.appendChild(getFeatureInfoPanelIcon);\n // title\n var getFeatureInfoPanelTitle = this._createGetFeatureInfoPanelTitleElement();\n getFeatureInfoPanelHeader.appendChild(getFeatureInfoPanelTitle);\n // close picto\n var getFeatureInfoCloseBtn = this.buttonGetFeatureInfoClose = this._createGetFeatureInfoPanelCloseElement();\n getFeatureInfoPanelHeader.appendChild(getFeatureInfoCloseBtn);\n\n getFeatureInfoPanelDiv.appendChild(getFeatureInfoPanelHeader);\n\n // container for the custom code\n var accordionGroup = this.getFeatureInfoAccordionGroup = this._createGetFeatureInfoAccordionGroup();\n getFeatureInfoPanelDiv.appendChild(accordionGroup);\n\n container.appendChild(getFeatureInfoPanel);\n\n logger.log(container);\n\n return container;\n }\n\n /**\n * Add events listeners on map (called by setMap)\n *\n * @param {*} map - map\n * @private\n */\n addEventsListeners (map) {\n var self = this;\n this.eventsListeners[\"singleclick\"] = function (e) {\n logger.trace(e);\n self.onMapClick(e);\n };\n // the event custom:action is associate with an openlayers event\n map.on(\"singleclick\", this.eventsListeners[\"singleclick\"]);\n }\n\n /**\n * Remove events listeners on map (called by setMap)\n * @private\n */\n removeEventsListeners () {\n var map = this.getMap();\n map.getLayers().un(\"singleclick\", this.eventsListeners[\"singleclick\"]);\n delete this.eventsListeners[\"singleclick\"];\n }\n\n /**\n * Tells if control is active or not\n * @private\n * @return { Boolean } true if active false if not\n */\n getFeatureInfoIsActive () {\n return this.buttonGetFeatureInfoShow.getAttribute(\"aria-pressed\");\n }\n\n\n /**\n * event handler\n * @param {Event} e évènement de click\n * @private\n */\n onMapClick (e) {\n if (this.getFeatureInfoIsActive() === \"true\") {\n this.getFeatureInfoAccordionGroup.remove();\n this.layers = e.map.getLayers().getArray().filter((l) => {\n // On ne passe au GFI que les layers visibles\n if (l.isVisible(e.map.getView()) && l.getOpacity() > 0){\n return l;\n }\n // tri le tableau des layers selon le z-index pour avoir le même affichage que dans le layerswitcher\n }).sort((a, b) => b.getZIndex() - a.getZIndex());\n if (this.layers.length > 0) {\n var accordionGroup = this.getFeatureInfoAccordionGroup = this._createGetFeatureInfoAccordionGroup();\n this.getFeatureInfoPanelDiv.appendChild(accordionGroup);\n this.map = e.map;\n this.pixel = e.pixel;\n this.coordinates = e.coordinate;\n this.res = e.map.getView().getResolution();\n this.displayGetFeatureInfo();\n }\n // Aucun layer visible sur la carte\n else {\n // rien à afficher car pas de couches visibles sur la carte, on s'arrête là.\n return;\n }\n }\n }\n\n /**\n * Main render function\n * @param { ol.Layer } layer layer openlayer\n * @return { Object } gfiLayer\n * {\n * format : \"wmts\",\n * layer: layer,\n * url : url pour wmts et wms\n * }\n * @private\n */\n getGetFeatureInfoLayer (layer) {\n var gfiLayer = {};\n let format = this.getLayerFormat(layer);\n gfiLayer = {\n format : format,\n layer : layer\n };\n if (format === \"wmts\") {\n let url = layer.getSource().getFeatureInfoUrl(\n this.coordinates,\n this.res,\n this.map.getView().getProjection(),\n {\n INFOFORMAT : \"text/html\",\n STYLES : \"\"\n }\n );\n gfiLayer = {\n ...gfiLayer,\n ...{\n url : url\n }\n };\n }\n if (format === \"wms\") {\n let url = layer.getSource().getFeatureInfoUrl(\n this.coordinates,\n this.res,\n this.map.getView().getProjection(),\n {\n INFO_FORMAT : \"text/html\",\n STYLES : \"\"\n }\n );\n gfiLayer = {\n ...gfiLayer,\n ...{\n url : url\n }\n };\n }\n return gfiLayer;\n }\n\n /**\n * Main render function\n * @param { ol.Layer } layer layer openlayer\n * @return { Array } Array of ol features\n * @private\n */\n getFeaturesAtClick (layer) {\n var features = [];\n this.getMap().forEachFeatureAtPixel(this.pixel, function (feature, olLayer) {\n if (layer == olLayer) {\n features.push(feature);\n }\n });\n return features;\n }\n\n /**\n * Main render function\n * @param { Object } gfiLayer layer openlayer\n * @return { Object } gfi result\n * {\n * layername : \"layername\",\n * content: \"html\"\n * }\n * @private\n */\n async getGetFeatureInfoContent (gfiLayer) {\n var content = null;\n if (gfiLayer.format === \"vector\") {\n var features = this.getFeaturesAtClick(gfiLayer.layer);\n if (features) {\n content = this.features2html(features);\n }\n return content;\n }\n else {\n return fetch(gfiLayer.url)\n .then((res) => res.text())\n .then((text) => {\n var exception = false;\n if (text.trim().length === 0 ||\n text.indexOf(\"ServiceExceptionReport\") !== -1 ||\n text.indexOf(\"java.lang.NullPointerException\") !== -1 ||\n text.indexOf(\"java.lang.OutOfMemoryError\") !== -1 ||\n text.indexOf(\"not queryable\") !== -1 ||\n text.indexOf(\"No data\") !== -1 ||\n text.indexOf(\"non interrogeable\") !== -1) {\n // rien à afficher\n exception = true;\n }\n if (!exception) {\n var dom = this.stringToHTML(text);\n if (dom && dom.innerHTML && dom.innerHTML.trim().length > 0) {\n return text;\n }\n // HTML est vide\n else {\n return null;\n }\n }\n else {\n return null;\n }\n })\n .catch((error) => {\n logger.log(error);\n return error;\n });\n }\n }\n\n /**\n * Get layer title\n *\n * @param {Object} gfiLayer - the layer object used by the gfi widget\n * @returns {String} layerTitle - layer title\n */\n getLayerTitle (gfiLayer) {\n if (gfiLayer.layer.getProperties !== undefined && gfiLayer.layer.getSource !== undefined) {\n var layerProperties = gfiLayer.layer.getProperties();\n var src = layerProperties.source;\n var layerTitle = \"\";\n if (src) {\n layerTitle = src._title || src.name || layerProperties.title || layerProperties.name || src.url_ || \"Couche de données\";\n }\n }\n return layerTitle;\n }\n\n /**\n * Main render function\n * @private\n */\n displayGetFeatureInfo () {\n var gfiLayers = this.layers.map((l) => {\n return this.getGetFeatureInfoLayer(l);\n });\n\n // Structuration de l'objet pour afficher les GFI par layer\n var gfiContent = gfiLayers.map((gfiLayer) => {\n var layername = this.getLayerTitle(gfiLayer);\n\n var content = null;\n var accordeon = this._createGetFeatureInfoLayerAccordion(layername);\n // on affiche pas l'entrée avant d'être confirmation qu'elle aura du contenu renvoyé\n accordeon.style.display = \"none\";\n var pending = true;\n return new AsyncData({\n ...gfiLayer,\n ...{\n layername : layername,\n content : content,\n contentDiv : accordeon,\n pending : pending\n }\n });\n });\n // Ajout des accordéons par layer selon leur index sur la carte\n for (let i = 0; i < gfiContent.length; i++) {\n this.getFeatureInfoAccordionGroup.append(gfiContent[i].data.contentDiv);\n }\n // Abonnement aux modifications de la valeur du contenu GFI.\n gfiContent.forEach((data) => {\n data.subscribe((key, value) => {\n if (key == \"content\") {\n data.set(\"pending\", false);\n if (data.get(\"content\")) {\n data.get(\"contentDiv\").querySelector(\"div.fr-collapse\").innerHTML = data.get(\"content\");\n // on affiche la pop-up car il y a au moins une entrée à afficher\n this.buttonGetFeatureInfoClose.setAttribute(\"aria-pressed\", true);\n // du contenu est renvoyé : on affiche l'entrée\n data.get(\"contentDiv\").style.display = \"block\";\n }\n else {\n // pas de contenu renvoyé : on retire l'entrée du DOM\n data.get(\"contentDiv\").remove();\n }\n // s'il n'y a aucun contenu renvoyé par le GFI\n if (gfiContent.filter(gfi => gfi.get(\"pending\") === true).length == 0\n && gfiContent.filter(gfi => gfi.get(\"content\")).length == 0) {\n // on n'affiche pas la pop-up car pas de données\n this.buttonGetFeatureInfoClose.setAttribute(\"aria-pressed\", false);\n }\n }\n });\n });\n\n // Lancement des requêtes GFI\n gfiContent.forEach((asyncD) => {\n this.getGetFeatureInfoContent(asyncD.data)\n .then((res) => {\n asyncD.set(\"content\", res);\n });\n });\n }\n\n /**\n * Return layer format\n *\n * @param {ol.layer.Layer} l - layer openlayers\n * @return {String} format - layer format can be wms, wmts, vector or unknown\n *\n */\n getLayerFormat (l) {\n // la fonction 'getType' existe uniquement en mode source es6.\n // le bundle ol ne fournit pas cette fonction !?\n var type = (typeof l.getType === \"function\") ? l.getType() : null;\n var source = l.getSource();\n if (type) {\n if (type === \"VECTOR\" || type === \"VECTOR_TILE\") {\n return \"vector\";\n }\n if (type === \"TILE\") {\n if (source.tileGrid) {\n return \"wmts\";\n } else {\n return \"wms\";\n }\n }\n if (type === \"IMAGE\") {\n return \"wms\";\n }\n } else {\n if (source instanceof TileWMSSource || source instanceof ImageWMSSource) {\n return \"wms\";\n }\n if (source instanceof WMTSSource) {\n return \"wmts\";\n }\n if (source instanceof VectorSource || source instanceof VectorTileSource) {\n return \"vector\";\n }\n }\n return \"unknown\";\n }\n\n /**\n * Gets HTML content from features array\n *\n * @param {Array.} features - openlayers features Array\n * @returns {HTMLElement} HTML content.\n */\n features2html (features) {\n var content = document.createElement(\"div\");\n features.forEach(function (f) {\n var props = f.getProperties();\n // si la properties 'render' est presente,\n // on ajoute directement le rendu HTML dans la balise principale\n if (props.hasOwnProperty(\"render\")) {\n // content.innerHTML = props[\"render\"].trim();\n // content.appendChild(props[\"render\"]);\n content.insertAdjacentHTML(\"beforeend\", props[\"render\"]);\n } else {\n if (props.hasOwnProperty(\"name\")) {\n var nameDiv = document.createElement(\"div\");\n nameDiv.className = \"gp-att-name-div\";\n // nameDiv.appendChild(document.createTextNode(props[\"name\"])) ;\n nameDiv.insertAdjacentHTML(\"afterbegin\", props[\"name\"]);\n content.appendChild(nameDiv);\n }\n if (props.hasOwnProperty(\"description\")) {\n var descDiv = document.createElement(\"div\");\n descDiv.className = \"gp-att-description-div\";\n // descDiv.appendChild(document.createTextNode(props[\"description\"])) ;\n descDiv.insertAdjacentHTML(\"afterbegin\", props[\"description\"]);\n content.appendChild(descDiv);\n }\n var p = null;\n var others = false;\n var oDiv = null;\n var ul = null;\n var li = null;\n // Liste des properties à retirer de la visualisation :\n var listForbidden = [\n // styles\n \"fill\",\n \"fill-opacity\",\n \"stroke\",\n \"stroke-opacity\",\n \"stroke-width\",\n \"marker-symbol\",\n \"marker-color\",\n \"marker-size\",\n \"geometry\", // geometrie\n \"value\",\n \"name\", // déjà traité\n \"description\", // déjà traité\n \"styleUrl\",\n \"extensionsNode_\", // extensions GPX\n \"icon\" // ajouté par la 3D en cas de switch\n ];\n for (p in props) {\n if (props[p] === undefined) {\n continue;\n }\n if (listForbidden.indexOf(p) !== -1) {\n continue;\n }\n if (!others) {\n oDiv = document.createElement(\"div\");\n oDiv.className = \"gp-att-others-div\";\n ul = document.createElement(\"ul\");\n others = true;\n }\n li = document.createElement(\"li\");\n var span = document.createElement(\"span\");\n span.className = \"gp-attname-others-span\";\n span.appendChild(document.createTextNode(p + \" : \"));\n li.appendChild(span);\n li.appendChild(document.createTextNode(props[p]));\n ul.appendChild(li);\n }\n if (ul) {\n oDiv.appendChild(ul);\n content.appendChild(oDiv);\n }\n }\n });\n\n // pas de contenu !\n if (!content.hasChildNodes()) {\n content = \"\";\n }\n else {\n content = content.innerHTML;\n }\n return content;\n }\n\n // ################################################################### //\n // ######################## event dom ################################ //\n // ################################################################### //\n\n /**\n * ...\n * @param {*} e - ...\n */\n onShowGetFeatureInfoClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n // ouverture du panel pas systématique quand on clic sur le bouton d'activation\n // donc on doit fermer explicitement le panel quand on désactive le GFI\n if (e.target.ariaPressed === \"false\"){\n this.buttonGetFeatureInfoClose.setAttribute(\"aria-pressed\", false);\n }\n logger.trace(e);\n }\n\n /**\n * ...\n * @param {*} e - ...\n */\n onCloseGetFeatureInfoClick (e) {\n logger.trace(e);\n }\n\n /**\n * ...\n * @param {*} e - ...\n */\n onGetFeatureInfoComputationSubmit (e) {\n logger.trace(e);\n }\n\n};\n\n// on récupère les méthodes de la classe DOM\nObject.assign(GetFeatureInfo.prototype, GetFeatureInfoDOM);\nObject.assign(GetFeatureInfo.prototype, Widget);\n\nexport default GetFeatureInfo;\n\n// Expose Export as ol.control.GetFeatureInfo (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.GetFeatureInfo = GetFeatureInfo;\n}\n","// import OpenLayers\nimport Control from \"ol/control/Control\";\nimport {\n Select as SelectInteraction,\n Modify as ModifyInteraction,\n Draw as DrawInteraction\n} from \"ol/interaction\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Utils from \"../../Utils/Helper\";\n\nvar logger = Logger.getLogger(\"interactions\");\n\n/**\n * @private\n * @description\n * Pourquoi et comment l'utiliser ?\n * Cette classe permet de gérer les interactions entre chaque extension.\n * Une extension qui active une interaction avec la carte, doit desactiver\n * les autres interactions issues d'autre extensions.\n * La désactivation d'une interaction s'accompagne d'actions telles que\n * le nettoyage des dessins, l'état du composant graphique, ...\n *\n * Ex\n * // desactive toutes les interactions avec l'opération par defaut : clean\n * Interactions.unset(map);\n * // desactive les interactions sauf celles de Drawing. On execute des\n * // operations particulieres : status, collapse et message\n * Interactions.unset(map, {\n * current : \"Drawing\",\n * status : false,\n * collapse : true,\n * messsage : [\"WARNING\", \"Ceci est un avertissement !\"]\n * });\n *\n * Dans le code de l'extension, il faut placer des informations dans l'interaction :\n * interaction.setProperties({\n * name : \"Drawing\",\n * source : this\n * });\n */\nvar Interactions = {\n\n /**\n * Liste des extensions qui utilisent le mécanisme des interactions\n */\n _extensions : [\n \"Measures\",\n \"ElevationPath\",\n \"Drawing\"\n ],\n\n /**\n * Options par defaut\n * - current : ex. \"Drawing\"\n * c'est l'extension qui demande la desactivation des autres interactions.\n * Par defaut, toutes les interactions sont desactivées.\n * - clean :\n * c'est la suppression des interactions, des dessins de la carte,\n * ainsi que la reinitialisation de l'état graphique.\n * Les extensions doivent implementer la méthode 'clean()'.\n * Par defaut, tous les dessins sont supprimés\n */\n _options : {\n current : null,\n clean : null\n },\n\n /**\n * Permet de desactive les interactions (Draw) de la carte pour les extensions,\n * sauf l'interaction courrante (si elle est renseignée avec l'option 'current').\n * Il est possible d'ajouter des fonctionnalités via les options.\n * Par defaut, l'option 'clean' est renseignée...\n *\n * @param {Object} map - the map\n * @param {Object} options - options\n */\n unset : function (map, options) {\n logger.trace(\"unset()\");\n\n var opts = {};\n Utils.mergeParams(opts, this._options);\n Utils.mergeParams(opts, options);\n\n var interactions = map.getInteractions().getArray();\n for (var i = 0; i < interactions.length; i++) {\n if (interactions[i].getActive() &&\n (interactions[i] instanceof DrawInteraction ||\n interactions[i] instanceof SelectInteraction ||\n interactions[i] instanceof ModifyInteraction)) {\n var prop = interactions[i].getProperties();\n var name = prop.name;\n if (typeof name !== \"undefined\" && this._extensions.indexOf(name) > -1) {\n // doit on desactiver l'interaction courrante ?\n if (opts.current && opts.current === name) {\n continue;\n }\n interactions[i].setActive(false);\n // instance de l'extension\n var source = prop.source;\n if (typeof source !== \"undefined\" && source instanceof Control) {\n // opérations sur le composant graphique\n for (var action in opts) {\n if (opts.hasOwnProperty(action)) {\n if (action === \"current\") {\n continue;\n }\n if (typeof source[action] === \"function\") {\n var args = Array.isArray(opts[action]) ? opts[action] : [opts[action]];\n source[action].apply(source, args);\n }\n }\n }\n }\n } else {\n interactions[i].setActive(false);\n }\n }\n }\n }\n};\n\nexport default Interactions;\n","/**\n* @module MathUtils\n* @alias module:~utils/MathUtils\n* @description\n* ...\n*\n* @example\n* modulo();\n* decimalToDMS();\n* coordinateTo();\n* toInteger();\n* isInteger();\n* toFloat();\n*/\nvar MathUtils = {\n /**\n * Reste de la division euclidienne\n * \n * @function modulo\n * @param {Number} a - divisor\n * @param {Number} b - quotient\n * @returns {Number} Modulo\n */\n modulo : function (a, b) {\n var r = a % b;\n return r * b < 0 ? r + b : r;\n },\n\n /**\n * Transform degrees, minutes, seconds form decimal degrees -\n * Largely inspired by the private function degreesToStringHDMS from ol/coordinate.js\n *\n * @function decimalToDMS\n * @param {Number} degrees - decimal degrees\n * @param {Array} hemispheres - \"NS\" ou \"EO\"\n * @param {Number} numDigits - number of digits for seconds\n * @returns {Object} DMS coordinate\n */\n decimalToDMS : function (degrees, hemispheres, numDigits) {\n var normalizedDegrees = this.modulo(degrees + 180, 360) - 180;\n var x = Math.abs(3600 * normalizedDegrees);\n var dflPrecision = numDigits || 0;\n var precision = Math.pow(10, dflPrecision);\n\n var deg = Math.floor(x / 3600);\n var min = Math.floor((x - deg * 3600) / 60);\n var sec = x - (deg * 3600) - (min * 60);\n sec = Math.ceil(sec * precision) / precision;\n\n if (sec >= 60) {\n sec = 0;\n min += 1;\n }\n\n if (min >= 60) {\n min = 0;\n deg += 1;\n }\n\n var direction = hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0);\n return {\n d : deg,\n m : min,\n s : sec,\n direction : direction\n };\n },\n\n /**\n * Transform decimal degrees form degrees, minutes, seconds\n * \n * @function dmsToDecimal\n * @param {*} degrees - degrees\n * @param {*} minutes - minutes\n * @param {*} seconds - seconds\n * @param {*} hemispheres - \"NS\" ou \"EO\"\n * @returns {Number} decimal coordinate\n */\n dmsToDecimal (degrees, minutes, seconds, hemispheres) {\n var dd = degrees + minutes/60 + seconds/(60*60);\n \n if (hemispheres == \"S\" || hemispheres == \"O\") {\n dd = dd * -1;\n }\n return dd;\n },\n /**\n * ol coordinate to decimal\n * \n * @function coordinateToDecimal\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {lat, lng, unit:°}\n */\n coordinateToDecimal (olCoordinate) {\n var coordinate = {};\n coordinate.lat = olCoordinate[1].toFixed(6);\n coordinate.lng = olCoordinate[0].toFixed(6);\n coordinate.unit = \"°\";\n return coordinate;\n },\n\n /**\n * ol coordinate to dms\n * \n * @function coordinateToDMS\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {lat, lng, unit:dms}\n */\n coordinateToDMS (olCoordinate) {\n return {\n lng : MathUtils.decimalToDMS(olCoordinate[0], \"EO\", 2),\n lat : MathUtils.decimalToDMS(olCoordinate[1], \"NS\", 2),\n unit : \"DMS\"\n };\n },\n\n /**\n * ol coordinate to rad\n * \n * @function coordinateToRad\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {lat, lng, unit:rad}\n */\n coordinateToRad (olCoordinate) {\n var coordinate = {};\n var d = 0.01745329251994329577;\n coordinate.lng = olCoordinate[0] * d;\n coordinate.lng = coordinate.lng.toFixed(8);\n coordinate.lat = olCoordinate[1] * d;\n coordinate.lat = coordinate.lat.toFixed(8);\n coordinate.unit = \"rad\";\n return coordinate;\n },\n\n /**\n * ol coordinate to gon\n * \n * @function coordinateToGon\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {lat, lng, unit:gon}\n */\n coordinateToGon (olCoordinate) {\n var coordinate = {};\n var d = 1.11111111111111111111;\n coordinate.lng = olCoordinate[0] * d;\n coordinate.lng = coordinate.lng.toFixed(8);\n coordinate.lat = olCoordinate[1] * d;\n coordinate.lat = coordinate.lat.toFixed(8);\n coordinate.unit = \"gon\";\n return coordinate;\n },\n\n /**\n * ol coordinate to meter\n * \n * @function coordinateToMeter\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {x, y, unit:m}\n */\n coordinateToMeter (olCoordinate) {\n // on recoit toujours des coordonnées metriques\n var coordinate = {};\n coordinate.x = olCoordinate[0].toFixed(2);\n coordinate.y = olCoordinate[1].toFixed(2);\n coordinate.unit = \"m\";\n return coordinate;\n },\n\n /**\n * ol coordinate to kilometer\n * \n * @function coordinateToKMeter\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {x, lyng, unit:km}\n */\n coordinateToKMeter (olCoordinate) {\n // on recoit toujours des coordonnées metriques\n var coordinate = {};\n coordinate.x = (olCoordinate[0] / 1000).toFixed(2);\n coordinate.y = (olCoordinate[1] / 1000).toFixed(2);\n coordinate.unit = \"km\";\n return coordinate;\n },\n\n /**\n * Converts string to Integer\n *\n * @function toInteger\n * @param {String} s - string number\n * @param {Numeric} base - between 2 and 36\n * @returns {null|Numeric} result\n */\n toInteger : function (s, base) {\n var _base = base || 10;\n var n = parseInt(s, _base);\n if (!isNaN(n) && isFinite(n)) {\n return n;\n }\n return null;\n },\n\n /**\n * check if s represents an integer\n *\n * @function isInteger\n * @param {String} s - string number\n * @returns {Boolean} is integer\n */\n isInteger : function (s) {\n if (isNaN(s)) {\n return false;\n }\n\n var v = parseFloat(s);\n return ((v | 0) === v);\n },\n\n /**\n * Converts s to float\n *\n * @function toFloat\n * @param {String} s - string number\n * @returns {null|Numeric} result\n */\n toFloat : function (s) {\n var n = parseFloat(s);\n if (!isNaN(n) && isFinite(n)) {\n return n;\n }\n return null;\n }\n};\n\nexport default MathUtils;\n","/**\n * @module SearchEngineUtils\n * @alias module:~utils/SearchEngineUtils\n * @private\n * @description\n * ...\n *\n * @example\n * advancedSearchFiltersByDefault();\n * zoomToResultsByDefault();\n */\nvar SearchEngineUtils = {\n /**\n * Advanced Search Filters by default\n * @function advancedSearchFiltersByDefault\n */\n advancedSearchFiltersByDefault : {\n PositionOfInterest : [\n {\n name : \"category\",\n title : \"Type\",\n value : [\n \"cimetière\",\n \"aérodrome\",\n \"réservoir\",\n \"administratif\",\n \"construction linéaire\",\n \"construction ponctuelle\",\n \"construction surfacique\",\n \"cours d'eau\",\n \"détail hydrographique\",\n \"détail orographique\",\n \"équipement de transport\",\n \"plan d'eau\",\n \"poste de transformation\",\n \"terrain de sport\",\n \"transport par câble\",\n \"zone d'activité ou d'intérêt\",\n \"zone d'habitation\",\n \"lieu-dit non habité\"\n ]\n }, {\n name : \"postcode\",\n title : \"Code postal\"\n }, {\n name : \"citycode\",\n title : \"Code INSEE\"\n }\n ],\n StreetAddress : [\n {\n name : \"city\",\n title : \"Ville\"\n }, {\n name : \"postcode\",\n title : \"Code postal\"\n }, {\n name : \"citycode\",\n title : \"Code INSEE\"\n }\n ],\n CadastralParcel : [\n {\n name : \"departmentcode\",\n title : \"Code département (INSEE)\",\n description : \"Code INSEE du département (ex: 01, 94)\"\n }, {\n name : \"municipalitycode\",\n title : \"Code commune (INSEE)\",\n description : \"Code INSEE de la commune : 3 chiffres (ex: 067)\"\n }, {\n name : \"oldmunicipalitycode\",\n title : \"Commune absorbée\",\n description : \"Commune absorbée : 3 chiffres (ex: 000, 001)\"\n }, {\n name : \"districtcode\",\n title : \"Arrondissement\",\n description : \"Arrondissement : 3 chiffres (ex: 004, 012)\"\n }, {\n name : \"section\",\n title : \"Section\",\n description : \"Section Cadastrale : 2 caractères (chiffre et/ou lettre)\"\n }, {\n name : \"number\",\n title : \"Numéro\",\n description : \"Numéro de la parcelle : 4 chiffres (ex: 0041, 0250)\"\n }, {\n name : \"sheet\",\n title : \"Feuille\",\n description : \"Numéro de la feuille cadastrale\"\n }\n ]\n },\n\n /**\n * Provides default zoom based on results.\n *\n * @function zoomToResultsByDefault\n * @param {Object} info - location information\n * @returns {Integer} zoom level\n */\n zoomToResultsByDefault : function (info) {\n // FIXME\n // la classification du geocodage est differente de l'importance de l'autocompletion !\n\n var zoom = 15;\n\n var service = info.service;\n var fields = info.fields;\n var type = info.type;\n\n var importance = {\n 1 : 11,\n 2 : 12,\n 3 : 13,\n 4 : 14,\n 5 : 15,\n 6 : 16,\n 7 : 17,\n 8 : 17\n };\n\n // AutoCompletion POI\n if (service === \"SuggestedLocation\") {\n if (type === \"PositionOfInterest\") {\n zoom = importance[fields.classification];\n }\n }\n\n // Geocodage POI\n if (service === \"GeocodedLocation\") {\n if (type === \"PositionOfInterest\") {\n zoom = importance[fields.importance] || 14; // au cas où la recherche est en freeform !\n }\n }\n\n if (type === \"StreetAddress\") {\n zoom = 17;\n }\n\n if (type === \"CadastralParcel\") {\n zoom = 17;\n }\n\n return zoom;\n }\n};\n\nexport default SearchEngineUtils;\n","/**\n * @module GeocodeUtils\n * @alias module:~utils/GeocodeUtils\n * @private\n * @description\n * ...\n *\n * @example\n * getGeocodedLocationFreeform();\n * getSuggestedLocationFreeform();\n */\nvar GeocodeUtils = {\n /**\n * Return the freeform of a structured geocoded item\n *\n * @param {Object} geocodedLocation - Geocoded location\n * @returns {String} freeform string\n */\n getGeocodedLocationFreeform : function (geocodedLocation) {\n var attributes = geocodedLocation.placeAttributes;\n if (attributes.label) {\n return attributes.label;\n } else if (geocodedLocation.type === \"PositionOfInterest\") {\n var resultToReturn = attributes.toponym;\n if (attributes.category && Array.isArray(attributes.category) && attributes.category.length >= 2 && attributes.category[0] === \"administratif\") {\n // gestion particulière des territoires administratifs\n resultToReturn = resultToReturn + \", \" + attributes.category[1];\n } else {\n // gestion standard des POI non adminsitratifs\n if (attributes.postcode) {\n resultToReturn = resultToReturn + \", \" + attributes.postcode[0];\n if (attributes.city) {\n resultToReturn = resultToReturn + \" \" + attributes.city[0];\n }\n }\n }\n return resultToReturn;\n } else if (geocodedLocation.type === \"StreetAddress\") {\n return (attributes.housenumber ? attributes.housenumber + \" \" : \"\") + attributes.street + \" \" + (attributes.postcode ? attributes.postcode + \", \" : \"\") + attributes.city;\n } else if (geocodedLocation.type === \"CadastralParcel\") {\n return attributes.id;\n } else {\n return \"...\";\n }\n },\n\n /**\n * Return the freeform of a structured suggested item\n *\n * @param {Object} suggestedLocation - Suggested location\n * @returns {String} freeform string\n */\n getSuggestedLocationFreeform : function (suggestedLocation) {\n if (suggestedLocation.fullText) {\n return suggestedLocation.fullText;\n } else {\n var values = [];\n values.push(suggestedLocation.street || \"\");\n values.push(suggestedLocation.postalCode || \"\");\n values.push(suggestedLocation.commune || \"\");\n\n if (suggestedLocation.type === \"PositionOfInterest\") {\n values.push(suggestedLocation.poi || \"\");\n values.push(suggestedLocation.kind || \"\");\n }\n return values.join(\" - \");\n }\n }\n};\n\nexport default GeocodeUtils;\n","export var PJD_3PARAM = 1;\nexport var PJD_7PARAM = 2;\nexport var PJD_GRIDSHIFT = 3;\nexport var PJD_WGS84 = 4; // WGS84 or equivalent\nexport var PJD_NODATUM = 5; // WGS84 or equivalent\nexport var SRS_WGS84_SEMIMAJOR = 6378137.0; // only used in grid shift transforms\nexport var SRS_WGS84_SEMIMINOR = 6356752.314; // only used in grid shift transforms\nexport var SRS_WGS84_ESQUARED = 0.0066943799901413165; // only used in grid shift transforms\nexport var SEC_TO_RAD = 4.84813681109535993589914102357e-6;\nexport var HALF_PI = Math.PI/2;\n// ellipoid pj_set_ell.c\nexport var SIXTH = 0.1666666666666666667;\n/* 1/6 */\nexport var RA4 = 0.04722222222222222222;\n/* 17/360 */\nexport var RA6 = 0.02215608465608465608;\nexport var EPSLN = 1.0e-10;\n// you'd think you could use Number.EPSILON above but that makes\n// Mollweide get into an infinate loop.\n\nexport var D2R = 0.01745329251994329577;\nexport var R2D = 57.29577951308232088;\nexport var FORTPI = Math.PI/4;\nexport var TWO_PI = Math.PI * 2;\n// SPI is slightly greater than Math.PI, so values that exceed the -180..180\n// degree range by a tiny amount don't get wrapped. This prevents points that\n// have drifted from their original location along the 180th meridian (due to\n// floating point error) from changing their sign.\nexport var SPI = 3.14159265359;\n","var exports = {};\nexport {exports as default};\n\nexports.greenwich = 0.0; //\"0dE\",\nexports.lisbon = -9.131906111111; //\"9d07'54.862\\\"W\",\nexports.paris = 2.337229166667; //\"2d20'14.025\\\"E\",\nexports.bogota = -74.080916666667; //\"74d04'51.3\\\"W\",\nexports.madrid = -3.687938888889; //\"3d41'16.58\\\"W\",\nexports.rome = 12.452333333333; //\"12d27'8.4\\\"E\",\nexports.bern = 7.439583333333; //\"7d26'22.5\\\"E\",\nexports.jakarta = 106.807719444444; //\"106d48'27.79\\\"E\",\nexports.ferro = -17.666666666667; //\"17d40'W\",\nexports.brussels = 4.367975; //\"4d22'4.71\\\"E\",\nexports.stockholm = 18.058277777778; //\"18d3'29.8\\\"E\",\nexports.athens = 23.7163375; //\"23d42'58.815\\\"E\",\nexports.oslo = 10.722916666667; //\"10d43'22.5\\\"E\"\n","export default {\n 'mm': {to_meter: 0.001},\n 'cm': {to_meter: 0.01},\n 'ft': {to_meter: 0.3048},\n 'us-ft': {to_meter: 1200 / 3937},\n 'fath': {to_meter: 1.8288},\n 'kmi': {to_meter: 1852},\n 'us-ch': {to_meter: 20.1168402336805},\n 'us-mi': {to_meter: 1609.34721869444},\n 'km': {to_meter: 1000},\n 'ind-ft': {to_meter: 0.30479841},\n 'ind-yd': {to_meter: 0.91439523},\n 'mi': {to_meter: 1609.344},\n 'yd': {to_meter: 0.9144},\n 'ch': {to_meter: 20.1168},\n 'link': {to_meter: 0.201168},\n 'dm': {to_meter: 0.01},\n 'in': {to_meter: 0.0254},\n 'ind-ch': {to_meter: 20.11669506},\n 'us-in': {to_meter: 0.025400050800101},\n 'us-yd': {to_meter: 0.914401828803658}\n};\n","var ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nexport default function match(obj, key) {\n if (obj[key]) {\n return obj[key];\n }\n var keys = Object.keys(obj);\n var lkey = key.toLowerCase().replace(ignoredChar, '');\n var i = -1;\n var testkey, processedKey;\n while (++i < keys.length) {\n testkey = keys[i];\n processedKey = testkey.toLowerCase().replace(ignoredChar, '');\n if (processedKey === lkey) {\n return obj[testkey];\n }\n }\n}\n","import {D2R} from './constants/values';\nimport PrimeMeridian from './constants/PrimeMeridian';\nimport units from './constants/units';\nimport match from './match';\n\nexport default function(defData) {\n var self = {};\n var paramObj = defData.split('+').map(function(v) {\n return v.trim();\n }).filter(function(a) {\n return a;\n }).reduce(function(p, a) {\n var split = a.split('=');\n split.push(true);\n p[split[0].toLowerCase()] = split[1];\n return p;\n }, {});\n var paramName, paramVal, paramOutname;\n var params = {\n proj: 'projName',\n datum: 'datumCode',\n rf: function(v) {\n self.rf = parseFloat(v);\n },\n lat_0: function(v) {\n self.lat0 = v * D2R;\n },\n lat_1: function(v) {\n self.lat1 = v * D2R;\n },\n lat_2: function(v) {\n self.lat2 = v * D2R;\n },\n lat_ts: function(v) {\n self.lat_ts = v * D2R;\n },\n lon_0: function(v) {\n self.long0 = v * D2R;\n },\n lon_1: function(v) {\n self.long1 = v * D2R;\n },\n lon_2: function(v) {\n self.long2 = v * D2R;\n },\n alpha: function(v) {\n self.alpha = parseFloat(v) * D2R;\n },\n gamma: function(v) {\n self.rectified_grid_angle = parseFloat(v);\n },\n lonc: function(v) {\n self.longc = v * D2R;\n },\n x_0: function(v) {\n self.x0 = parseFloat(v);\n },\n y_0: function(v) {\n self.y0 = parseFloat(v);\n },\n k_0: function(v) {\n self.k0 = parseFloat(v);\n },\n k: function(v) {\n self.k0 = parseFloat(v);\n },\n a: function(v) {\n self.a = parseFloat(v);\n },\n b: function(v) {\n self.b = parseFloat(v);\n },\n r: function(v) {\n self.a = self.b = parseFloat(v);\n },\n r_a: function() {\n self.R_A = true;\n },\n zone: function(v) {\n self.zone = parseInt(v, 10);\n },\n south: function() {\n self.utmSouth = true;\n },\n towgs84: function(v) {\n self.datum_params = v.split(\",\").map(function(a) {\n return parseFloat(a);\n });\n },\n to_meter: function(v) {\n self.to_meter = parseFloat(v);\n },\n units: function(v) {\n self.units = v;\n var unit = match(units, v);\n if (unit) {\n self.to_meter = unit.to_meter;\n }\n },\n from_greenwich: function(v) {\n self.from_greenwich = v * D2R;\n },\n pm: function(v) {\n var pm = match(PrimeMeridian, v);\n self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;\n },\n nadgrids: function(v) {\n if (v === '@null') {\n self.datumCode = 'none';\n }\n else {\n self.nadgrids = v;\n }\n },\n axis: function(v) {\n var legalAxis = \"ewnsud\";\n if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {\n self.axis = v;\n }\n },\n approx: function() {\n self.approx = true;\n }\n };\n for (paramName in paramObj) {\n paramVal = paramObj[paramName];\n if (paramName in params) {\n paramOutname = params[paramName];\n if (typeof paramOutname === 'function') {\n paramOutname(paramVal);\n }\n else {\n self[paramOutname] = paramVal;\n }\n }\n else {\n self[paramName] = paramVal;\n }\n }\n if(typeof self.datumCode === 'string' && self.datumCode !== \"WGS84\"){\n self.datumCode = self.datumCode.toLowerCase();\n }\n return self;\n}\n","export default parseString;\n\nvar NEUTRAL = 1;\nvar KEYWORD = 2;\nvar NUMBER = 3;\nvar QUOTED = 4;\nvar AFTERQUOTE = 5;\nvar ENDED = -1;\nvar whitespace = /\\s/;\nvar latin = /[A-Za-z]/;\nvar keyword = /[A-Za-z84_]/;\nvar endThings = /[,\\]]/;\nvar digets = /[\\d\\.E\\-\\+]/;\n// const ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nfunction Parser(text) {\n if (typeof text !== 'string') {\n throw new Error('not a string');\n }\n this.text = text.trim();\n this.level = 0;\n this.place = 0;\n this.root = null;\n this.stack = [];\n this.currentObject = null;\n this.state = NEUTRAL;\n}\nParser.prototype.readCharicter = function() {\n var char = this.text[this.place++];\n if (this.state !== QUOTED) {\n while (whitespace.test(char)) {\n if (this.place >= this.text.length) {\n return;\n }\n char = this.text[this.place++];\n }\n }\n switch (this.state) {\n case NEUTRAL:\n return this.neutral(char);\n case KEYWORD:\n return this.keyword(char)\n case QUOTED:\n return this.quoted(char);\n case AFTERQUOTE:\n return this.afterquote(char);\n case NUMBER:\n return this.number(char);\n case ENDED:\n return;\n }\n};\nParser.prototype.afterquote = function(char) {\n if (char === '\"') {\n this.word += '\"';\n this.state = QUOTED;\n return;\n }\n if (endThings.test(char)) {\n this.word = this.word.trim();\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in afterquote yet, index ' + this.place);\n};\nParser.prototype.afterItem = function(char) {\n if (char === ',') {\n if (this.word !== null) {\n this.currentObject.push(this.word);\n }\n this.word = null;\n this.state = NEUTRAL;\n return;\n }\n if (char === ']') {\n this.level--;\n if (this.word !== null) {\n this.currentObject.push(this.word);\n this.word = null;\n }\n this.state = NEUTRAL;\n this.currentObject = this.stack.pop();\n if (!this.currentObject) {\n this.state = ENDED;\n }\n\n return;\n }\n};\nParser.prototype.number = function(char) {\n if (digets.test(char)) {\n this.word += char;\n return;\n }\n if (endThings.test(char)) {\n this.word = parseFloat(this.word);\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in number yet, index ' + this.place);\n};\nParser.prototype.quoted = function(char) {\n if (char === '\"') {\n this.state = AFTERQUOTE;\n return;\n }\n this.word += char;\n return;\n};\nParser.prototype.keyword = function(char) {\n if (keyword.test(char)) {\n this.word += char;\n return;\n }\n if (char === '[') {\n var newObjects = [];\n newObjects.push(this.word);\n this.level++;\n if (this.root === null) {\n this.root = newObjects;\n } else {\n this.currentObject.push(newObjects);\n }\n this.stack.push(this.currentObject);\n this.currentObject = newObjects;\n this.state = NEUTRAL;\n return;\n }\n if (endThings.test(char)) {\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in keyword yet, index ' + this.place);\n};\nParser.prototype.neutral = function(char) {\n if (latin.test(char)) {\n this.word = char;\n this.state = KEYWORD;\n return;\n }\n if (char === '\"') {\n this.word = '';\n this.state = QUOTED;\n return;\n }\n if (digets.test(char)) {\n this.word = char;\n this.state = NUMBER;\n return;\n }\n if (endThings.test(char)) {\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in neutral yet, index ' + this.place);\n};\nParser.prototype.output = function() {\n while (this.place < this.text.length) {\n this.readCharicter();\n }\n if (this.state === ENDED) {\n return this.root;\n }\n throw new Error('unable to parse string \"' +this.text + '\". State is ' + this.state);\n};\n\nfunction parseString(txt) {\n var parser = new Parser(txt);\n return parser.output();\n}\n","\n\nfunction mapit(obj, key, value) {\n if (Array.isArray(key)) {\n value.unshift(key);\n key = null;\n }\n var thing = key ? {} : obj;\n\n var out = value.reduce(function(newObj, item) {\n sExpr(item, newObj);\n return newObj\n }, thing);\n if (key) {\n obj[key] = out;\n }\n}\n\nexport function sExpr(v, obj) {\n if (!Array.isArray(v)) {\n obj[v] = true;\n return;\n }\n var key = v.shift();\n if (key === 'PARAMETER') {\n key = v.shift();\n }\n if (v.length === 1) {\n if (Array.isArray(v[0])) {\n obj[key] = {};\n sExpr(v[0], obj[key]);\n return;\n }\n obj[key] = v[0];\n return;\n }\n if (!v.length) {\n obj[key] = true;\n return;\n }\n if (key === 'TOWGS84') {\n obj[key] = v;\n return;\n }\n if (key === 'AXIS') {\n if (!(key in obj)) {\n obj[key] = [];\n }\n obj[key].push(v);\n return;\n }\n if (!Array.isArray(key)) {\n obj[key] = {};\n }\n\n var i;\n switch (key) {\n case 'UNIT':\n case 'PRIMEM':\n case 'VERT_DATUM':\n obj[key] = {\n name: v[0].toLowerCase(),\n convert: v[1]\n };\n if (v.length === 3) {\n sExpr(v[2], obj[key]);\n }\n return;\n case 'SPHEROID':\n case 'ELLIPSOID':\n obj[key] = {\n name: v[0],\n a: v[1],\n rf: v[2]\n };\n if (v.length === 4) {\n sExpr(v[3], obj[key]);\n }\n return;\n case 'EDATUM':\n case 'ENGINEERINGDATUM':\n case 'LOCAL_DATUM':\n case 'DATUM':\n case 'VERT_CS':\n case 'VERTCRS':\n case 'VERTICALCRS':\n v[0] = ['name', v[0]];\n mapit(obj, key, v);\n return;\n case 'COMPD_CS':\n case 'COMPOUNDCRS':\n case 'FITTED_CS':\n // the followings are the crs defined in\n // https://github.com/proj4js/proj4js/blob/1da4ed0b865d0fcb51c136090569210cdcc9019e/lib/parseCode.js#L11\n case 'PROJECTEDCRS':\n case 'PROJCRS':\n case 'GEOGCS':\n case 'GEOCCS':\n case 'PROJCS':\n case 'LOCAL_CS':\n case 'GEODCRS':\n case 'GEODETICCRS':\n case 'GEODETICDATUM':\n case 'ENGCRS':\n case 'ENGINEERINGCRS':\n v[0] = ['name', v[0]];\n mapit(obj, key, v);\n obj[key].type = key;\n return;\n default:\n i = -1;\n while (++i < v.length) {\n if (!Array.isArray(v[i])) {\n return sExpr(v, obj[key]);\n }\n }\n return mapit(obj, key, v);\n }\n}\n","var D2R = 0.01745329251994329577;\nimport parser from './parser';\nimport {sExpr} from './process';\n\nvar knownTypes = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS', 'GEOCCS', 'PROJCS', 'LOCAL_CS', 'GEODCRS',\n 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\n\nfunction rename(obj, params) {\n var outName = params[0];\n var inName = params[1];\n if (!(outName in obj) && (inName in obj)) {\n obj[outName] = obj[inName];\n if (params.length === 3) {\n obj[outName] = params[2](obj[outName]);\n }\n }\n}\n\nfunction d2r(input) {\n return input * D2R;\n}\n\nfunction cleanWKT(wkt) {\n var keys = Object.keys(wkt);\n for (var i = 0, ii = keys.length; i 0 ? 90 : -90);\n wkt.lat_ts = wkt.lat1;\n } else if (!wkt.lat_ts && wkt.lat0 && wkt.projName === 'Polar_Stereographic') {\n wkt.lat_ts = wkt.lat0;\n wkt.lat0 = d2r(wkt.lat0 > 0 ? 90 : -90);\n }\n}\nexport default function(wkt) {\n var lisp = parser(wkt);\n var type = lisp[0];\n var obj = {};\n sExpr(lisp, obj);\n cleanWKT(obj);\n return obj[type];\n}\n","import globals from './global';\nimport parseProj from './projString';\nimport wkt from 'wkt-parser';\n\nfunction defs(name) {\n /*global console*/\n var that = this;\n if (arguments.length === 2) {\n var def = arguments[1];\n if (typeof def === 'string') {\n if (def.charAt(0) === '+') {\n defs[name] = parseProj(arguments[1]);\n }\n else {\n defs[name] = wkt(arguments[1]);\n }\n } else {\n defs[name] = def;\n }\n }\n else if (arguments.length === 1) {\n if (Array.isArray(name)) {\n return name.map(function(v) {\n if (Array.isArray(v)) {\n defs.apply(that, v);\n }\n else {\n defs(v);\n }\n });\n }\n else if (typeof name === 'string') {\n if (name in defs) {\n return defs[name];\n }\n }\n else if ('EPSG' in name) {\n defs['EPSG:' + name.EPSG] = name;\n }\n else if ('ESRI' in name) {\n defs['ESRI:' + name.ESRI] = name;\n }\n else if ('IAU2000' in name) {\n defs['IAU2000:' + name.IAU2000] = name;\n }\n else {\n console.log(name);\n }\n return;\n }\n\n\n}\nglobals(defs);\nexport default defs;\n","export default function(defs) {\n defs('EPSG:4326', \"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\");\n defs('EPSG:4269', \"+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\");\n defs('EPSG:3857', \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs\");\n // UTM WGS84\n for (var i = 1; i <= 60; ++i) {\n defs('EPSG:' + (32600 + i), \"+proj=utm +zone=\" + i + \" +datum=WGS84 +units=m\");\n defs('EPSG:' + (32700 + i), \"+proj=utm +zone=\" + i + \" +south +datum=WGS84 +units=m\");\n }\n\n defs.WGS84 = defs['EPSG:4326'];\n defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857\n defs.GOOGLE = defs['EPSG:3857'];\n defs['EPSG:900913'] = defs['EPSG:3857'];\n defs['EPSG:102113'] = defs['EPSG:3857'];\n}\n","import defs from './defs';\nimport wkt from 'wkt-parser';\nimport projStr from './projString';\nimport match from './match';\nfunction testObj(code){\n return typeof code === 'string';\n}\nfunction testDef(code){\n return code in defs;\n}\nvar codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\nfunction testWKT(code){\n return codeWords.some(function (word) {\n return code.indexOf(word) > -1;\n });\n}\nvar codes = ['3857', '900913', '3785', '102113'];\nfunction checkMercator(item) {\n var auth = match(item, 'authority');\n if (!auth) {\n return;\n }\n var code = match(auth, 'epsg');\n return code && codes.indexOf(code) > -1;\n}\nfunction checkProjStr(item) {\n var ext = match(item, 'extension');\n if (!ext) {\n return;\n }\n return match(ext, 'proj4');\n}\nfunction testProj(code){\n return code[0] === '+';\n}\nfunction parse(code){\n if (testObj(code)) {\n //check to see if this is a WKT string\n if (testDef(code)) {\n return defs[code];\n }\n if (testWKT(code)) {\n var out = wkt(code);\n // test of spetial case, due to this being a very common and often malformed\n if (checkMercator(out)) {\n return defs['EPSG:3857'];\n }\n var maybeProjStr = checkProjStr(out);\n if (maybeProjStr) {\n return projStr(maybeProjStr);\n }\n return out;\n }\n if (testProj(code)) {\n return projStr(code);\n }\n }else{\n return code;\n }\n}\n\nexport default parse;\n","export default function(destination, source) {\n destination = destination || {};\n var value, property;\n if (!source) {\n return destination;\n }\n for (property in source) {\n value = source[property];\n if (value !== undefined) {\n destination[property] = value;\n }\n }\n return destination;\n}\n","export default function(eccent, sinphi, cosphi) {\n var con = eccent * sinphi;\n return cosphi / (Math.sqrt(1 - con * con));\n}","export default function(x) {\n return x<0 ? -1 : 1;\n}","\nimport {TWO_PI, SPI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, phi, sinphi) {\n var con = eccent * sinphi;\n var com = 0.5 * eccent;\n con = Math.pow(((1 - con) / (1 + con)), com);\n return (Math.tan(0.5 * (HALF_PI - phi)) / con);\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, ts) {\n var eccnth = 0.5 * eccent;\n var con, dphi;\n var phi = HALF_PI - 2 * Math.atan(ts);\n for (var i = 0; i <= 15; i++) {\n con = eccent * Math.sin(phi);\n dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n //console.log(\"phi2z has NoConvergence\");\n return -9999;\n}\n","export function init() {\n //no-op for longlat\n}\n\nfunction identity(pt) {\n return pt;\n}\nexport {identity as forward};\nexport {identity as inverse};\nexport var names = [\"longlat\", \"identity\"];\nexport default {\n init: init,\n forward: identity,\n inverse: identity,\n names: names\n};\n","import merc from \"./projections/merc\";\nimport longlat from \"./projections/longlat\";\nvar projs = [merc, longlat];\nvar names = {};\nvar projStore = [];\n\nfunction add(proj, i) {\n var len = projStore.length;\n if (!proj.names) {\n console.log(i);\n return true;\n }\n projStore[len] = proj;\n proj.names.forEach(function(n) {\n names[n.toLowerCase()] = len;\n });\n return this;\n}\n\nexport {add};\n\nexport function get(name) {\n if (!name) {\n return false;\n }\n var n = name.toLowerCase();\n if (typeof names[n] !== 'undefined' && projStore[names[n]]) {\n return projStore[names[n]];\n }\n}\n\nexport function start() {\n projs.forEach(add);\n}\nexport default {\n start: start,\n add: add,\n get: get\n};\n","import msfnz from '../common/msfnz';\n\nimport adjust_lon from '../common/adjust_lon';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport {FORTPI, R2D, EPSLN, HALF_PI} from '../constants/values';\nexport function init() {\n var con = this.b / this.a;\n this.es = 1 - con * con;\n if(!('x0' in this)){\n this.x0 = 0;\n }\n if(!('y0' in this)){\n this.y0 = 0;\n }\n this.e = Math.sqrt(this.es);\n if (this.lat_ts) {\n if (this.sphere) {\n this.k0 = Math.cos(this.lat_ts);\n }\n else {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n }\n else {\n if (!this.k0) {\n if (this.k) {\n this.k0 = this.k;\n }\n else {\n this.k0 = 1;\n }\n }\n }\n}\n\n/* Mercator forward equations--mapping lat,long to x,y\n --------------------------------------------------*/\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n // convert to radians\n if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {\n return null;\n }\n\n var x, y;\n if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n return null;\n }\n else {\n if (this.sphere) {\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\n }\n else {\n var sinphi = Math.sin(lat);\n var ts = tsfnz(this.e, lat, sinphi);\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 - this.a * this.k0 * Math.log(ts);\n }\n p.x = x;\n p.y = y;\n return p;\n }\n}\n\n/* Mercator inverse equations--mapping x,y to lat/long\n --------------------------------------------------*/\nexport function inverse(p) {\n\n var x = p.x - this.x0;\n var y = p.y - this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));\n }\n else {\n var ts = Math.exp(-y / (this.a * this.k0));\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n lon = adjust_lon(this.long0 + x / (this.a * this.k0));\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Mercator\", \"Popular Visualisation Pseudo Mercator\", \"Mercator_1SP\", \"Mercator_Auxiliary_Sphere\", \"merc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","var exports = {};\nexport {exports as default};\nexports.MERIT = {\n a: 6378137.0,\n rf: 298.257,\n ellipseName: \"MERIT 1983\"\n};\n\nexports.SGS85 = {\n a: 6378136.0,\n rf: 298.257,\n ellipseName: \"Soviet Geodetic System 85\"\n};\n\nexports.GRS80 = {\n a: 6378137.0,\n rf: 298.257222101,\n ellipseName: \"GRS 1980(IUGG, 1980)\"\n};\n\nexports.IAU76 = {\n a: 6378140.0,\n rf: 298.257,\n ellipseName: \"IAU 1976\"\n};\n\nexports.airy = {\n a: 6377563.396,\n b: 6356256.910,\n ellipseName: \"Airy 1830\"\n};\n\nexports.APL4 = {\n a: 6378137,\n rf: 298.25,\n ellipseName: \"Appl. Physics. 1965\"\n};\n\nexports.NWL9D = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"Naval Weapons Lab., 1965\"\n};\n\nexports.mod_airy = {\n a: 6377340.189,\n b: 6356034.446,\n ellipseName: \"Modified Airy\"\n};\n\nexports.andrae = {\n a: 6377104.43,\n rf: 300.0,\n ellipseName: \"Andrae 1876 (Den., Iclnd.)\"\n};\n\nexports.aust_SA = {\n a: 6378160.0,\n rf: 298.25,\n ellipseName: \"Australian Natl & S. Amer. 1969\"\n};\n\nexports.GRS67 = {\n a: 6378160.0,\n rf: 298.2471674270,\n ellipseName: \"GRS 67(IUGG 1967)\"\n};\n\nexports.bessel = {\n a: 6377397.155,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841\"\n};\n\nexports.bess_nam = {\n a: 6377483.865,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841 (Namibia)\"\n};\n\nexports.clrk66 = {\n a: 6378206.4,\n b: 6356583.8,\n ellipseName: \"Clarke 1866\"\n};\n\nexports.clrk80 = {\n a: 6378249.145,\n rf: 293.4663,\n ellipseName: \"Clarke 1880 mod.\"\n};\n\nexports.clrk80ign = {\n a: 6378249.2,\n b: 6356515,\n rf: 293.4660213,\n ellipseName: \"Clarke 1880 (IGN)\"\n};\n\nexports.clrk58 = {\n a: 6378293.645208759,\n rf: 294.2606763692654,\n ellipseName: \"Clarke 1858\"\n};\n\nexports.CPM = {\n a: 6375738.7,\n rf: 334.29,\n ellipseName: \"Comm. des Poids et Mesures 1799\"\n};\n\nexports.delmbr = {\n a: 6376428.0,\n rf: 311.5,\n ellipseName: \"Delambre 1810 (Belgium)\"\n};\n\nexports.engelis = {\n a: 6378136.05,\n rf: 298.2566,\n ellipseName: \"Engelis 1985\"\n};\n\nexports.evrst30 = {\n a: 6377276.345,\n rf: 300.8017,\n ellipseName: \"Everest 1830\"\n};\n\nexports.evrst48 = {\n a: 6377304.063,\n rf: 300.8017,\n ellipseName: \"Everest 1948\"\n};\n\nexports.evrst56 = {\n a: 6377301.243,\n rf: 300.8017,\n ellipseName: \"Everest 1956\"\n};\n\nexports.evrst69 = {\n a: 6377295.664,\n rf: 300.8017,\n ellipseName: \"Everest 1969\"\n};\n\nexports.evrstSS = {\n a: 6377298.556,\n rf: 300.8017,\n ellipseName: \"Everest (Sabah & Sarawak)\"\n};\n\nexports.fschr60 = {\n a: 6378166.0,\n rf: 298.3,\n ellipseName: \"Fischer (Mercury Datum) 1960\"\n};\n\nexports.fschr60m = {\n a: 6378155.0,\n rf: 298.3,\n ellipseName: \"Fischer 1960\"\n};\n\nexports.fschr68 = {\n a: 6378150.0,\n rf: 298.3,\n ellipseName: \"Fischer 1968\"\n};\n\nexports.helmert = {\n a: 6378200.0,\n rf: 298.3,\n ellipseName: \"Helmert 1906\"\n};\n\nexports.hough = {\n a: 6378270.0,\n rf: 297.0,\n ellipseName: \"Hough\"\n};\n\nexports.intl = {\n a: 6378388.0,\n rf: 297.0,\n ellipseName: \"International 1909 (Hayford)\"\n};\n\nexports.kaula = {\n a: 6378163.0,\n rf: 298.24,\n ellipseName: \"Kaula 1961\"\n};\n\nexports.lerch = {\n a: 6378139.0,\n rf: 298.257,\n ellipseName: \"Lerch 1979\"\n};\n\nexports.mprts = {\n a: 6397300.0,\n rf: 191.0,\n ellipseName: \"Maupertius 1738\"\n};\n\nexports.new_intl = {\n a: 6378157.5,\n b: 6356772.2,\n ellipseName: \"New International 1967\"\n};\n\nexports.plessis = {\n a: 6376523.0,\n rf: 6355863.0,\n ellipseName: \"Plessis 1817 (France)\"\n};\n\nexports.krass = {\n a: 6378245.0,\n rf: 298.3,\n ellipseName: \"Krassovsky, 1942\"\n};\n\nexports.SEasia = {\n a: 6378155.0,\n b: 6356773.3205,\n ellipseName: \"Southeast Asia\"\n};\n\nexports.walbeck = {\n a: 6376896.0,\n b: 6355834.8467,\n ellipseName: \"Walbeck\"\n};\n\nexports.WGS60 = {\n a: 6378165.0,\n rf: 298.3,\n ellipseName: \"WGS 60\"\n};\n\nexports.WGS66 = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"WGS 66\"\n};\n\nexports.WGS7 = {\n a: 6378135.0,\n rf: 298.26,\n ellipseName: \"WGS 72\"\n};\n\nexport var WGS84 = exports.WGS84 = {\n a: 6378137.0,\n rf: 298.257223563,\n ellipseName: \"WGS 84\"\n};\n\nexports.sphere = {\n a: 6370997.0,\n b: 6370997.0,\n ellipseName: \"Normal Sphere (r=6370997)\"\n};\n","var datums = {\n wgs84: {\n towgs84: \"0,0,0\",\n ellipse: \"WGS84\",\n datumName: \"WGS84\"\n },\n ch1903: {\n towgs84: \"674.374,15.056,405.346\",\n ellipse: \"bessel\",\n datumName: \"swiss\"\n },\n ggrs87: {\n towgs84: \"-199.87,74.79,246.62\",\n ellipse: \"GRS80\",\n datumName: \"Greek_Geodetic_Reference_System_1987\"\n },\n nad83: {\n towgs84: \"0,0,0\",\n ellipse: \"GRS80\",\n datumName: \"North_American_Datum_1983\"\n },\n nad27: {\n nadgrids: \"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",\n ellipse: \"clrk66\",\n datumName: \"North_American_Datum_1927\"\n },\n potsdam: {\n towgs84: \"598.1,73.7,418.2,0.202,0.045,-2.455,6.7\",\n ellipse: \"bessel\",\n datumName: \"Potsdam Rauenberg 1950 DHDN\"\n },\n carthage: {\n towgs84: \"-263.0,6.0,431.0\",\n ellipse: \"clark80\",\n datumName: \"Carthage 1934 Tunisia\"\n },\n hermannskogel: {\n towgs84: \"577.326,90.129,463.919,5.137,1.474,5.297,2.4232\",\n ellipse: \"bessel\",\n datumName: \"Hermannskogel\"\n },\n mgi: {\n towgs84: \"577.326,90.129,463.919,5.137,1.474,5.297,2.4232\",\n ellipse: \"bessel\",\n datumName: \"Militar-Geographische Institut\",\n },\n osni52: {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"airy\",\n datumName: \"Irish National\"\n },\n ire65: {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"mod_airy\",\n datumName: \"Ireland 1965\"\n },\n rassadiran: {\n towgs84: \"-133.63,-157.5,-158.62\",\n ellipse: \"intl\",\n datumName: \"Rassadiran\"\n },\n nzgd49: {\n towgs84: \"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",\n ellipse: \"intl\",\n datumName: \"New Zealand Geodetic Datum 1949\"\n },\n osgb36: {\n towgs84: \"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",\n ellipse: \"airy\",\n datumName: \"Ordnance Survey of Great Britain 1936\"\n },\n s_jtsk: {\n towgs84: \"589,76,480\",\n ellipse: 'bessel',\n datumName: 'S-JTSK (Ferro)'\n },\n beduaram: {\n towgs84: '-106,-87,188',\n ellipse: 'clrk80',\n datumName: 'Beduaram'\n },\n gunung_segara: {\n towgs84: '-403,684,41',\n ellipse: 'bessel',\n datumName: 'Gunung Segara Jakarta'\n },\n rnb72: {\n towgs84: \"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1\",\n ellipse: \"intl\",\n datumName: \"Reseau National Belge 1972\"\n }\n};\n\nfor (var key in datums) {\n var datum = datums[key];\n datums[datum.datumName] = datum;\n}\n\nexport default datums;\n","import {PJD_3PARAM, PJD_7PARAM, PJD_GRIDSHIFT, PJD_WGS84, PJD_NODATUM, SEC_TO_RAD} from './constants/values';\n\nfunction datum(datumCode, datum_params, a, b, es, ep2, nadgrids) {\n var out = {};\n\n if (datumCode === undefined || datumCode === 'none') {\n out.datum_type = PJD_NODATUM;\n } else {\n out.datum_type = PJD_WGS84;\n }\n\n if (datum_params) {\n out.datum_params = datum_params.map(parseFloat);\n if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {\n out.datum_type = PJD_3PARAM;\n }\n if (out.datum_params.length > 3) {\n if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {\n out.datum_type = PJD_7PARAM;\n out.datum_params[3] *= SEC_TO_RAD;\n out.datum_params[4] *= SEC_TO_RAD;\n out.datum_params[5] *= SEC_TO_RAD;\n out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;\n }\n }\n }\n\n if (nadgrids) {\n out.datum_type = PJD_GRIDSHIFT;\n out.grids = nadgrids;\n }\n out.a = a; //datum object also uses these values\n out.b = b;\n out.es = es;\n out.ep2 = ep2;\n return out;\n}\n\nexport default datum;\n","/**\n * Resources for details of NTv2 file formats:\n * - https://web.archive.org/web/20140127204822if_/http://www.mgs.gov.on.ca:80/stdprodconsume/groups/content/@mgs/@iandit/documents/resourcelist/stel02_047447.pdf\n * - http://mimaka.com/help/gs/html/004_NTV2%20Data%20Format.htm\n */\n\nvar loadedNadgrids = {};\n\n/**\n * Load a binary NTv2 file (.gsb) to a key that can be used in a proj string like +nadgrids=. Pass the NTv2 file\n * as an ArrayBuffer.\n */\nexport default function nadgrid(key, data) {\n var view = new DataView(data);\n var isLittleEndian = detectLittleEndian(view);\n var header = readHeader(view, isLittleEndian);\n var subgrids = readSubgrids(view, header, isLittleEndian);\n var nadgrid = {header: header, subgrids: subgrids};\n loadedNadgrids[key] = nadgrid;\n return nadgrid;\n}\n\n/**\n * Given a proj4 value for nadgrids, return an array of loaded grids\n */\nexport function getNadgrids(nadgrids) {\n // Format details: http://proj.maptools.org/gen_parms.html\n if (nadgrids === undefined) { return null; }\n var grids = nadgrids.split(',');\n return grids.map(parseNadgridString);\n}\n\nfunction parseNadgridString(value) {\n if (value.length === 0) {\n return null;\n }\n var optional = value[0] === '@';\n if (optional) {\n value = value.slice(1);\n }\n if (value === 'null') {\n return {name: 'null', mandatory: !optional, grid: null, isNull: true};\n }\n return {\n name: value,\n mandatory: !optional,\n grid: loadedNadgrids[value] || null,\n isNull: false\n };\n}\n\nfunction secondsToRadians(seconds) {\n return (seconds / 3600) * Math.PI / 180;\n}\n\nfunction detectLittleEndian(view) {\n var nFields = view.getInt32(8, false);\n if (nFields === 11) {\n return false;\n }\n nFields = view.getInt32(8, true);\n if (nFields !== 11) {\n console.warn('Failed to detect nadgrid endian-ness, defaulting to little-endian');\n }\n return true;\n}\n\nfunction readHeader(view, isLittleEndian) {\n return {\n nFields: view.getInt32(8, isLittleEndian),\n nSubgridFields: view.getInt32(24, isLittleEndian),\n nSubgrids: view.getInt32(40, isLittleEndian),\n shiftType: decodeString(view, 56, 56 + 8).trim(),\n fromSemiMajorAxis: view.getFloat64(120, isLittleEndian),\n fromSemiMinorAxis: view.getFloat64(136, isLittleEndian),\n toSemiMajorAxis: view.getFloat64(152, isLittleEndian),\n toSemiMinorAxis: view.getFloat64(168, isLittleEndian),\n };\n}\n\nfunction decodeString(view, start, end) {\n return String.fromCharCode.apply(null, new Uint8Array(view.buffer.slice(start, end)));\n}\n\nfunction readSubgrids(view, header, isLittleEndian) {\n var gridOffset = 176;\n var grids = [];\n for (var i = 0; i < header.nSubgrids; i++) {\n var subHeader = readGridHeader(view, gridOffset, isLittleEndian);\n var nodes = readGridNodes(view, gridOffset, subHeader, isLittleEndian);\n var lngColumnCount = Math.round(\n 1 + (subHeader.upperLongitude - subHeader.lowerLongitude) / subHeader.longitudeInterval);\n var latColumnCount = Math.round(\n 1 + (subHeader.upperLatitude - subHeader.lowerLatitude) / subHeader.latitudeInterval);\n // Proj4 operates on radians whereas the coordinates are in seconds in the grid\n grids.push({\n ll: [secondsToRadians(subHeader.lowerLongitude), secondsToRadians(subHeader.lowerLatitude)],\n del: [secondsToRadians(subHeader.longitudeInterval), secondsToRadians(subHeader.latitudeInterval)],\n lim: [lngColumnCount, latColumnCount],\n count: subHeader.gridNodeCount,\n cvs: mapNodes(nodes)\n });\n gridOffset += 176 + subHeader.gridNodeCount * 16;\n }\n return grids;\n}\n\nfunction mapNodes(nodes) {\n return nodes.map(function (r) {return [secondsToRadians(r.longitudeShift), secondsToRadians(r.latitudeShift)];});\n}\n\nfunction readGridHeader(view, offset, isLittleEndian) {\n return {\n name: decodeString(view, offset + 8, offset + 16).trim(),\n parent: decodeString(view, offset + 24, offset + 24 + 8).trim(),\n lowerLatitude: view.getFloat64(offset + 72, isLittleEndian),\n upperLatitude: view.getFloat64(offset + 88, isLittleEndian),\n lowerLongitude: view.getFloat64(offset + 104, isLittleEndian),\n upperLongitude: view.getFloat64(offset + 120, isLittleEndian),\n latitudeInterval: view.getFloat64(offset + 136, isLittleEndian),\n longitudeInterval: view.getFloat64(offset + 152, isLittleEndian),\n gridNodeCount: view.getInt32(offset + 168, isLittleEndian)\n };\n}\n\nfunction readGridNodes(view, offset, gridHeader, isLittleEndian) {\n var nodesOffset = offset + 176;\n var gridRecordLength = 16;\n var gridShiftRecords = [];\n for (var i = 0; i < gridHeader.gridNodeCount; i++) {\n var record = {\n latitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength, isLittleEndian),\n longitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength + 4, isLittleEndian),\n latitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 8, isLittleEndian),\n longitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 12, isLittleEndian),\n };\n gridShiftRecords.push(record);\n }\n return gridShiftRecords;\n}\n","import parseCode from './parseCode';\nimport extend from './extend';\nimport projections from './projections';\nimport {sphere as dc_sphere, eccentricity as dc_eccentricity} from './deriveConstants';\nimport Datum from './constants/Datum';\nimport datum from './datum';\nimport match from './match';\nimport {getNadgrids} from \"./nadgrid\";\n\nfunction Projection(srsCode,callback) {\n if (!(this instanceof Projection)) {\n return new Projection(srsCode);\n }\n callback = callback || function(error){\n if(error){\n throw error;\n }\n };\n var json = parseCode(srsCode);\n if(typeof json !== 'object'){\n callback('Could not parse to valid json: ' + srsCode);\n return;\n }\n var ourProj = Projection.projections.get(json.projName);\n if(!ourProj){\n callback('Could not get projection name from: ' + srsCode);\n return;\n }\n if (json.datumCode && json.datumCode !== 'none') {\n var datumDef = match(Datum, json.datumCode);\n if (datumDef) {\n json.datum_params = json.datum_params || (datumDef.towgs84 ? datumDef.towgs84.split(',') : null);\n json.ellps = datumDef.ellipse;\n json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;\n }\n }\n json.k0 = json.k0 || 1.0;\n json.axis = json.axis || 'enu';\n json.ellps = json.ellps || 'wgs84';\n json.lat1 = json.lat1 || json.lat0; // Lambert_Conformal_Conic_1SP, for example, needs this\n\n var sphere_ = dc_sphere(json.a, json.b, json.rf, json.ellps, json.sphere);\n var ecc = dc_eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);\n var nadgrids = getNadgrids(json.nadgrids);\n var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2,\n nadgrids);\n\n extend(this, json); // transfer everything over from the projection because we don't know what we'll need\n extend(this, ourProj); // transfer all the methods from the projection\n\n // copy the 4 things over we calculated in deriveConstants.sphere\n this.a = sphere_.a;\n this.b = sphere_.b;\n this.rf = sphere_.rf;\n this.sphere = sphere_.sphere;\n\n // copy the 3 things we calculated in deriveConstants.eccentricity\n this.es = ecc.es;\n this.e = ecc.e;\n this.ep2 = ecc.ep2;\n\n // add in the datum object\n this.datum = datumObj;\n\n // init the projection\n this.init();\n\n // legecy callback from back in the day when it went to spatialreference.org\n callback(null, this);\n\n}\nProjection.projections = projections;\nProjection.projections.start();\nexport default Projection;\n","import {SIXTH, RA4, RA6, EPSLN} from './constants/values';\nimport {default as Ellipsoid, WGS84} from './constants/Ellipsoid';\nimport match from './match';\n\nexport function eccentricity(a, b, rf, R_A) {\n var a2 = a * a; // used in geocentric\n var b2 = b * b; // used in geocentric\n var es = (a2 - b2) / a2; // e ^ 2\n var e = 0;\n if (R_A) {\n a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));\n a2 = a * a;\n es = 0;\n } else {\n e = Math.sqrt(es); // eccentricity\n }\n var ep2 = (a2 - b2) / b2; // used in geocentric\n return {\n es: es,\n e: e,\n ep2: ep2\n };\n}\nexport function sphere(a, b, rf, ellps, sphere) {\n if (!a) { // do we have an ellipsoid?\n var ellipse = match(Ellipsoid, ellps);\n if (!ellipse) {\n ellipse = WGS84;\n }\n a = ellipse.a;\n b = ellipse.b;\n rf = ellipse.rf;\n }\n\n if (rf && !b) {\n b = (1.0 - 1.0 / rf) * a;\n }\n if (rf === 0 || Math.abs(a - b) < EPSLN) {\n sphere = true;\n b = a;\n }\n return {\n a: a,\n b: b,\n rf: rf,\n sphere: sphere\n };\n}\n","'use strict';\nimport {PJD_3PARAM, PJD_7PARAM, HALF_PI} from './constants/values';\nexport function compareDatums(source, dest) {\n if (source.datum_type !== dest.datum_type) {\n return false; // false, datums are not equal\n } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {\n // the tolerance for es is to ensure that GRS80 and WGS84\n // are considered identical\n return false;\n } else if (source.datum_type === PJD_3PARAM) {\n return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);\n } else if (source.datum_type === PJD_7PARAM) {\n return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);\n } else {\n return true; // datums are equal\n }\n} // cs_compare_datums()\n\n/*\n * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates\n * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),\n * according to the current ellipsoid parameters.\n *\n * Latitude : Geodetic latitude in radians (input)\n * Longitude : Geodetic longitude in radians (input)\n * Height : Geodetic height, in meters (input)\n * X : Calculated Geocentric X coordinate, in meters (output)\n * Y : Calculated Geocentric Y coordinate, in meters (output)\n * Z : Calculated Geocentric Z coordinate, in meters (output)\n *\n */\nexport function geodeticToGeocentric(p, es, a) {\n var Longitude = p.x;\n var Latitude = p.y;\n var Height = p.z ? p.z : 0; //Z value not always supplied\n\n var Rn; /* Earth radius at location */\n var Sin_Lat; /* Math.sin(Latitude) */\n var Sin2_Lat; /* Square of Math.sin(Latitude) */\n var Cos_Lat; /* Math.cos(Latitude) */\n\n /*\n ** Don't blow up if Latitude is just a little out of the value\n ** range as it may just be a rounding issue. Also removed longitude\n ** test, it should be wrapped by Math.cos() and Math.sin(). NFW for PROJ.4, Sep/2001.\n */\n if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {\n Latitude = -HALF_PI;\n } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n Latitude = HALF_PI;\n } else if (Latitude < -HALF_PI) {\n /* Latitude out of range */\n //..reportError('geocent:lat out of range:' + Latitude);\n return { x: -Infinity, y: -Infinity, z: p.z };\n } else if (Latitude > HALF_PI) {\n /* Latitude out of range */\n return { x: Infinity, y: Infinity, z: p.z };\n }\n\n if (Longitude > Math.PI) {\n Longitude -= (2 * Math.PI);\n }\n Sin_Lat = Math.sin(Latitude);\n Cos_Lat = Math.cos(Latitude);\n Sin2_Lat = Sin_Lat * Sin_Lat;\n Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));\n return {\n x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),\n y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),\n z: ((Rn * (1 - es)) + Height) * Sin_Lat\n };\n} // cs_geodetic_to_geocentric()\n\nexport function geocentricToGeodetic(p, es, a, b) {\n /* local defintions and variables */\n /* end-criterium of loop, accuracy of sin(Latitude) */\n var genau = 1e-12;\n var genau2 = (genau * genau);\n var maxiter = 30;\n\n var P; /* distance between semi-minor axis and location */\n var RR; /* distance between center and location */\n var CT; /* sin of geocentric latitude */\n var ST; /* cos of geocentric latitude */\n var RX;\n var RK;\n var RN; /* Earth radius at location */\n var CPHI0; /* cos of start or old geodetic latitude in iterations */\n var SPHI0; /* sin of start or old geodetic latitude in iterations */\n var CPHI; /* cos of searched geodetic latitude */\n var SPHI; /* sin of searched geodetic latitude */\n var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */\n var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */\n\n var X = p.x;\n var Y = p.y;\n var Z = p.z ? p.z : 0.0; //Z value not always supplied\n var Longitude;\n var Latitude;\n var Height;\n\n P = Math.sqrt(X * X + Y * Y);\n RR = Math.sqrt(X * X + Y * Y + Z * Z);\n\n /* special cases for latitude and longitude */\n if (P / a < genau) {\n\n /* special case, if P=0. (X=0., Y=0.) */\n Longitude = 0.0;\n\n /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis\n * of ellipsoid (=center of mass), Latitude becomes PI/2 */\n if (RR / a < genau) {\n Latitude = HALF_PI;\n Height = -b;\n return {\n x: p.x,\n y: p.y,\n z: p.z\n };\n }\n } else {\n /* ellipsoidal (geodetic) longitude\n * interval: -PI < Longitude <= +PI */\n Longitude = Math.atan2(Y, X);\n }\n\n /* --------------------------------------------------------------\n * Following iterative algorithm was developped by\n * \"Institut for Erdmessung\", University of Hannover, July 1988.\n * Internet: www.ife.uni-hannover.de\n * Iterative computation of CPHI,SPHI and Height.\n * Iteration of CPHI and SPHI to 10**-12 radian resp.\n * 2*10**-7 arcsec.\n * --------------------------------------------------------------\n */\n CT = Z / RR;\n ST = P / RR;\n RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);\n CPHI0 = ST * (1.0 - es) * RX;\n SPHI0 = CT * RX;\n iter = 0;\n\n /* loop to find sin(Latitude) resp. Latitude\n * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */\n do {\n iter++;\n RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);\n\n /* ellipsoidal (geodetic) height */\n Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);\n\n RK = es * RN / (RN + Height);\n RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);\n CPHI = ST * (1.0 - RK) * RX;\n SPHI = CT * RX;\n SDPHI = SPHI * CPHI0 - CPHI * SPHI0;\n CPHI0 = CPHI;\n SPHI0 = SPHI;\n }\n while (SDPHI * SDPHI > genau2 && iter < maxiter);\n\n /* ellipsoidal (geodetic) latitude */\n Latitude = Math.atan(SPHI / Math.abs(CPHI));\n return {\n x: Longitude,\n y: Latitude,\n z: Height\n };\n} // cs_geocentric_to_geodetic()\n\n/****************************************************************/\n// pj_geocentic_to_wgs84( p )\n// p = point to transform in geocentric coordinates (x,y,z)\n\n\n/** point object, nothing fancy, just allows values to be\n passed back and forth by reference rather than by value.\n Other point classes may be used as long as they have\n x and y properties, which will get modified in the transform method.\n*/\nexport function geocentricToWgs84(p, datum_type, datum_params) {\n\n if (datum_type === PJD_3PARAM) {\n // if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: p.x + datum_params[0],\n y: p.y + datum_params[1],\n z: p.z + datum_params[2],\n };\n } else if (datum_type === PJD_7PARAM) {\n var Dx_BF = datum_params[0];\n var Dy_BF = datum_params[1];\n var Dz_BF = datum_params[2];\n var Rx_BF = datum_params[3];\n var Ry_BF = datum_params[4];\n var Rz_BF = datum_params[5];\n var M_BF = datum_params[6];\n // if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,\n y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,\n z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF\n };\n }\n} // cs_geocentric_to_wgs84\n\n/****************************************************************/\n// pj_geocentic_from_wgs84()\n// coordinate system definition,\n// point to transform in geocentric coordinates (x,y,z)\nexport function geocentricFromWgs84(p, datum_type, datum_params) {\n\n if (datum_type === PJD_3PARAM) {\n //if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: p.x - datum_params[0],\n y: p.y - datum_params[1],\n z: p.z - datum_params[2],\n };\n\n } else if (datum_type === PJD_7PARAM) {\n var Dx_BF = datum_params[0];\n var Dy_BF = datum_params[1];\n var Dz_BF = datum_params[2];\n var Rx_BF = datum_params[3];\n var Ry_BF = datum_params[4];\n var Rz_BF = datum_params[5];\n var M_BF = datum_params[6];\n var x_tmp = (p.x - Dx_BF) / M_BF;\n var y_tmp = (p.y - Dy_BF) / M_BF;\n var z_tmp = (p.z - Dz_BF) / M_BF;\n //if( x[io] === HUGE_VAL )\n // continue;\n\n return {\n x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,\n y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,\n z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp\n };\n } //cs_geocentric_from_wgs84()\n}\n","import {\n PJD_3PARAM,\n PJD_7PARAM,\n PJD_GRIDSHIFT,\n PJD_NODATUM,\n R2D,\n SRS_WGS84_ESQUARED,\n SRS_WGS84_SEMIMAJOR, SRS_WGS84_SEMIMINOR\n} from './constants/values';\n\nimport {geodeticToGeocentric, geocentricToGeodetic, geocentricToWgs84, geocentricFromWgs84, compareDatums} from './datumUtils';\nimport adjust_lon from \"./common/adjust_lon\";\nfunction checkParams(type) {\n return (type === PJD_3PARAM || type === PJD_7PARAM);\n}\n\nexport default function(source, dest, point) {\n // Short cut if the datums are identical.\n if (compareDatums(source, dest)) {\n return point; // in this case, zero is sucess,\n // whereas cs_compare_datums returns 1 to indicate TRUE\n // confusing, should fix this\n }\n\n // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest\n if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {\n return point;\n }\n\n // If this datum requires grid shifts, then apply it to geodetic coordinates.\n var source_a = source.a;\n var source_es = source.es;\n if (source.datum_type === PJD_GRIDSHIFT) {\n var gridShiftCode = applyGridShift(source, false, point);\n if (gridShiftCode !== 0) {\n return undefined;\n }\n source_a = SRS_WGS84_SEMIMAJOR;\n source_es = SRS_WGS84_ESQUARED;\n }\n\n var dest_a = dest.a;\n var dest_b = dest.b;\n var dest_es = dest.es;\n if (dest.datum_type === PJD_GRIDSHIFT) {\n dest_a = SRS_WGS84_SEMIMAJOR;\n dest_b = SRS_WGS84_SEMIMINOR;\n dest_es = SRS_WGS84_ESQUARED;\n }\n\n // Do we need to go through geocentric coordinates?\n if (source_es === dest_es && source_a === dest_a && !checkParams(source.datum_type) && !checkParams(dest.datum_type)) {\n return point;\n }\n\n // Convert to geocentric coordinates.\n point = geodeticToGeocentric(point, source_es, source_a);\n // Convert between datums\n if (checkParams(source.datum_type)) {\n point = geocentricToWgs84(point, source.datum_type, source.datum_params);\n }\n if (checkParams(dest.datum_type)) {\n point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);\n }\n point = geocentricToGeodetic(point, dest_es, dest_a, dest_b);\n\n if (dest.datum_type === PJD_GRIDSHIFT) {\n var destGridShiftResult = applyGridShift(dest, true, point);\n if (destGridShiftResult !== 0) {\n return undefined;\n }\n }\n\n return point;\n}\n\nexport function applyGridShift(source, inverse, point) {\n if (source.grids === null || source.grids.length === 0) {\n console.log('Grid shift grids not found');\n return -1;\n }\n var input = {x: -point.x, y: point.y};\n var output = {x: Number.NaN, y: Number.NaN};\n var onlyMandatoryGrids = false;\n var attemptedGrids = [];\n outer:\n for (var i = 0; i < source.grids.length; i++) {\n var grid = source.grids[i];\n attemptedGrids.push(grid.name);\n if (grid.isNull) {\n output = input;\n break;\n }\n onlyMandatoryGrids = grid.mandatory;\n if (grid.grid === null) {\n if (grid.mandatory) {\n console.log(\"Unable to find mandatory grid '\" + grid.name + \"'\");\n return -1;\n }\n continue;\n }\n var subgrids = grid.grid.subgrids;\n for (var j = 0, jj = subgrids.length; j < jj; j++) {\n var subgrid = subgrids[j];\n // skip tables that don't match our point at all\n var epsilon = (Math.abs(subgrid.del[1]) + Math.abs(subgrid.del[0])) / 10000.0;\n var minX = subgrid.ll[0] - epsilon;\n var minY = subgrid.ll[1] - epsilon;\n var maxX = subgrid.ll[0] + (subgrid.lim[0] - 1) * subgrid.del[0] + epsilon;\n var maxY = subgrid.ll[1] + (subgrid.lim[1] - 1) * subgrid.del[1] + epsilon;\n if (minY > input.y || minX > input.x || maxY < input.y || maxX < input.x ) {\n continue;\n }\n output = applySubgridShift(input, inverse, subgrid);\n if (!isNaN(output.x)) {\n break outer;\n }\n }\n }\n if (isNaN(output.x)) {\n console.log(\"Failed to find a grid shift table for location '\"+\n -input.x * R2D + \" \" + input.y * R2D + \" tried: '\" + attemptedGrids + \"'\");\n return -1;\n }\n point.x = -output.x;\n point.y = output.y;\n return 0;\n}\n\nfunction applySubgridShift(pin, inverse, ct) {\n var val = {x: Number.NaN, y: Number.NaN};\n if (isNaN(pin.x)) { return val; }\n var tb = {x: pin.x, y: pin.y};\n tb.x -= ct.ll[0];\n tb.y -= ct.ll[1];\n tb.x = adjust_lon(tb.x - Math.PI) + Math.PI;\n var t = nadInterpolate(tb, ct);\n if (inverse) {\n if (isNaN(t.x)) {\n return val;\n }\n t.x = tb.x - t.x;\n t.y = tb.y - t.y;\n var i = 9, tol = 1e-12;\n var dif, del;\n do {\n del = nadInterpolate(t, ct);\n if (isNaN(del.x)) {\n console.log(\"Inverse grid shift iteration failed, presumably at grid edge. Using first approximation.\");\n break;\n }\n dif = {x: tb.x - (del.x + t.x), y: tb.y - (del.y + t.y)};\n t.x += dif.x;\n t.y += dif.y;\n } while (i-- && Math.abs(dif.x) > tol && Math.abs(dif.y) > tol);\n if (i < 0) {\n console.log(\"Inverse grid shift iterator failed to converge.\");\n return val;\n }\n val.x = adjust_lon(t.x + ct.ll[0]);\n val.y = t.y + ct.ll[1];\n } else {\n if (!isNaN(t.x)) {\n val.x = pin.x + t.x;\n val.y = pin.y + t.y;\n }\n }\n return val;\n}\n\nfunction nadInterpolate(pin, ct) {\n var t = {x: pin.x / ct.del[0], y: pin.y / ct.del[1]};\n var indx = {x: Math.floor(t.x), y: Math.floor(t.y)};\n var frct = {x: t.x - 1.0 * indx.x, y: t.y - 1.0 * indx.y};\n var val= {x: Number.NaN, y: Number.NaN};\n var inx;\n if (indx.x < 0 || indx.x >= ct.lim[0]) {\n return val;\n }\n if (indx.y < 0 || indx.y >= ct.lim[1]) {\n return val;\n }\n inx = (indx.y * ct.lim[0]) + indx.x;\n var f00 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx++;\n var f10= {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx += ct.lim[0];\n var f11 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx--;\n var f01 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n var m11 = frct.x * frct.y, m10 = frct.x * (1.0 - frct.y),\n m00 = (1.0 - frct.x) * (1.0 - frct.y), m01 = (1.0 - frct.x) * frct.y;\n val.x = (m00 * f00.x + m10 * f10.x + m01 * f01.x + m11 * f11.x);\n val.y = (m00 * f00.y + m10 * f10.y + m01 * f01.y + m11 * f11.y);\n return val;\n}\n","export default function(crs, denorm, point) {\n var xin = point.x,\n yin = point.y,\n zin = point.z || 0.0;\n var v, t, i;\n var out = {};\n for (i = 0; i < 3; i++) {\n if (denorm && i === 2 && point.z === undefined) {\n continue;\n }\n if (i === 0) {\n v = xin;\n if (\"ew\".indexOf(crs.axis[i]) !== -1) {\n t = 'x';\n } else {\n t = 'y';\n }\n\n }\n else if (i === 1) {\n v = yin;\n if (\"ns\".indexOf(crs.axis[i]) !== -1) {\n t = 'y';\n } else {\n t = 'x';\n }\n }\n else {\n v = zin;\n t = 'z';\n }\n switch (crs.axis[i]) {\n case 'e':\n out[t] = v;\n break;\n case 'w':\n out[t] = -v;\n break;\n case 'n':\n out[t] = v;\n break;\n case 's':\n out[t] = -v;\n break;\n case 'u':\n if (point[t] !== undefined) {\n out.z = v;\n }\n break;\n case 'd':\n if (point[t] !== undefined) {\n out.z = -v;\n }\n break;\n default:\n //console.log(\"ERROR: unknow axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n return null;\n }\n }\n return out;\n}\n","export default function (array){\n var out = {\n x: array[0],\n y: array[1]\n };\n if (array.length>2) {\n out.z = array[2];\n }\n if (array.length>3) {\n out.m = array[3];\n }\n return out;\n}","export default function (point) {\n checkCoord(point.x);\n checkCoord(point.y);\n}\nfunction checkCoord(num) {\n if (typeof Number.isFinite === 'function') {\n if (Number.isFinite(num)) {\n return;\n }\n throw new TypeError('coordinates must be finite numbers');\n }\n if (typeof num !== 'number' || num !== num || !isFinite(num)) {\n throw new TypeError('coordinates must be finite numbers');\n }\n}\n","import {D2R, R2D, PJD_3PARAM, PJD_7PARAM, PJD_GRIDSHIFT} from './constants/values';\nimport datum_transform from './datum_transform';\nimport adjust_axis from './adjust_axis';\nimport proj from './Proj';\nimport toPoint from './common/toPoint';\nimport checkSanity from './checkSanity';\n\nfunction checkNotWGS(source, dest) {\n return (\n (source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM || source.datum.datum_type === PJD_GRIDSHIFT) && dest.datumCode !== 'WGS84') ||\n ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM || dest.datum.datum_type === PJD_GRIDSHIFT) && source.datumCode !== 'WGS84');\n}\n\nexport default function transform(source, dest, point, enforceAxis) {\n var wgs84;\n if (Array.isArray(point)) {\n point = toPoint(point);\n } else {\n // Clone the point object so inputs don't get modified\n point = {\n x: point.x,\n y: point.y,\n z: point.z,\n m: point.m\n };\n }\n var hasZ = point.z !== undefined;\n checkSanity(point);\n // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n if (source.datum && dest.datum && checkNotWGS(source, dest)) {\n wgs84 = new proj('WGS84');\n point = transform(source, wgs84, point, enforceAxis);\n source = wgs84;\n }\n // DGR, 2010/11/12\n if (enforceAxis && source.axis !== 'enu') {\n point = adjust_axis(source, false, point);\n }\n // Transform source points to long/lat, if they aren't already.\n if (source.projName === 'longlat') {\n point = {\n x: point.x * D2R,\n y: point.y * D2R,\n z: point.z || 0\n };\n } else {\n if (source.to_meter) {\n point = {\n x: point.x * source.to_meter,\n y: point.y * source.to_meter,\n z: point.z || 0\n };\n }\n point = source.inverse(point); // Convert Cartesian to longlat\n if (!point) {\n return;\n }\n }\n // Adjust for the prime meridian if necessary\n if (source.from_greenwich) {\n point.x += source.from_greenwich;\n }\n\n // Convert datums if needed, and if possible.\n point = datum_transform(source.datum, dest.datum, point);\n if (!point) {\n return;\n }\n\n // Adjust for the prime meridian if necessary\n if (dest.from_greenwich) {\n point = {\n x: point.x - dest.from_greenwich,\n y: point.y,\n z: point.z || 0\n };\n }\n\n if (dest.projName === 'longlat') {\n // convert radians to decimal degrees\n point = {\n x: point.x * R2D,\n y: point.y * R2D,\n z: point.z || 0\n };\n } else { // else project\n point = dest.forward(point);\n if (dest.to_meter) {\n point = {\n x: point.x / dest.to_meter,\n y: point.y / dest.to_meter,\n z: point.z || 0\n };\n }\n }\n\n // DGR, 2010/11/12\n if (enforceAxis && dest.axis !== 'enu') {\n return adjust_axis(dest, true, point);\n }\n\n if (point && !hasZ) {\n delete point.z;\n }\n return point;\n}\n","import proj from './Proj';\nimport transform from './transform';\nvar wgs84 = proj('WGS84');\n\nfunction transformer(from, to, coords, enforceAxis) {\n var transformedArray, out, keys;\n if (Array.isArray(coords)) {\n transformedArray = transform(from, to, coords, enforceAxis) || {x: NaN, y: NaN};\n if (coords.length > 2) {\n if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n if (typeof transformedArray.z === 'number') {\n return [transformedArray.x, transformedArray.y, transformedArray.z].concat(coords.slice(3));\n } else {\n return [transformedArray.x, transformedArray.y, coords[2]].concat(coords.slice(3));\n }\n } else {\n return [transformedArray.x, transformedArray.y].concat(coords.slice(2));\n }\n } else {\n return [transformedArray.x, transformedArray.y];\n }\n } else {\n out = transform(from, to, coords, enforceAxis);\n keys = Object.keys(coords);\n if (keys.length === 2) {\n return out;\n }\n keys.forEach(function (key) {\n if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n if (key === 'x' || key === 'y' || key === 'z') {\n return;\n }\n } else {\n if (key === 'x' || key === 'y') {\n return;\n }\n }\n out[key] = coords[key];\n });\n return out;\n }\n}\n\nfunction checkProj(item) {\n if (item instanceof proj) {\n return item;\n }\n if (item.oProj) {\n return item.oProj;\n }\n return proj(item);\n}\n\nfunction proj4(fromProj, toProj, coord) {\n fromProj = checkProj(fromProj);\n var single = false;\n var obj;\n if (typeof toProj === 'undefined') {\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n } else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {\n coord = toProj;\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n }\n toProj = checkProj(toProj);\n if (coord) {\n return transformer(fromProj, toProj, coord);\n } else {\n obj = {\n forward: function (coords, enforceAxis) {\n return transformer(fromProj, toProj, coords, enforceAxis);\n },\n inverse: function (coords, enforceAxis) {\n return transformer(toProj, fromProj, coords, enforceAxis);\n }\n };\n if (single) {\n obj.oProj = toProj;\n }\n return obj;\n }\n}\nexport default proj4;","\n\n\n/**\n * UTM zones are grouped, and assigned to one of a group of 6\n * sets.\n *\n * {int} @private\n */\nvar NUM_100K_SETS = 6;\n\n/**\n * The column letters (for easting) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n/**\n * The row letters (for northing) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\nvar A = 65; // A\nvar I = 73; // I\nvar O = 79; // O\nvar V = 86; // V\nvar Z = 90; // Z\nexport default {\n forward: forward,\n inverse: inverse,\n toPoint: toPoint\n};\n/**\n * Conversion of lat/lon to MGRS.\n *\n * @param {object} ll Object literal with lat and lon properties on a\n * WGS84 ellipsoid.\n * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n * 100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.\n * @return {string} the MGRS string for the given location and accuracy.\n */\nexport function forward(ll, accuracy) {\n accuracy = accuracy || 5; // default accuracy 1m\n return encode(LLtoUTM({\n lat: ll[1],\n lon: ll[0]\n }), accuracy);\n};\n\n/**\n * Conversion of MGRS to lat/lon.\n *\n * @param {string} mgrs MGRS string.\n * @return {array} An array with left (longitude), bottom (latitude), right\n * (longitude) and top (latitude) values in WGS84, representing the\n * bounding box for the provided MGRS reference.\n */\nexport function inverse(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n if (bbox.lat && bbox.lon) {\n return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];\n }\n return [bbox.left, bbox.bottom, bbox.right, bbox.top];\n};\n\nexport function toPoint(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n if (bbox.lat && bbox.lon) {\n return [bbox.lon, bbox.lat];\n }\n return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];\n};\n/**\n * Conversion from degrees to radians.\n *\n * @private\n * @param {number} deg the angle in degrees.\n * @return {number} the angle in radians.\n */\nfunction degToRad(deg) {\n return (deg * (Math.PI / 180.0));\n}\n\n/**\n * Conversion from radians to degrees.\n *\n * @private\n * @param {number} rad the angle in radians.\n * @return {number} the angle in degrees.\n */\nfunction radToDeg(rad) {\n return (180.0 * (rad / Math.PI));\n}\n\n/**\n * Converts a set of Longitude and Latitude co-ordinates to UTM\n * using the WGS84 ellipsoid.\n *\n * @private\n * @param {object} ll Object literal with lat and lon properties\n * representing the WGS84 coordinate to be converted.\n * @return {object} Object literal containing the UTM value with easting,\n * northing, zoneNumber and zoneLetter properties, and an optional\n * accuracy property in digits. Returns null if the conversion failed.\n */\nfunction LLtoUTM(ll) {\n var Lat = ll.lat;\n var Long = ll.lon;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var k0 = 0.9996;\n var LongOrigin;\n var eccPrimeSquared;\n var N, T, C, A, M;\n var LatRad = degToRad(Lat);\n var LongRad = degToRad(Long);\n var LongOriginRad;\n var ZoneNumber;\n // (int)\n ZoneNumber = Math.floor((Long + 180) / 6) + 1;\n\n //Make sure the longitude 180.00 is in Zone 60\n if (Long === 180) {\n ZoneNumber = 60;\n }\n\n // Special zone for Norway\n if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {\n ZoneNumber = 32;\n }\n\n // Special zones for Svalbard\n if (Lat >= 72.0 && Lat < 84.0) {\n if (Long >= 0.0 && Long < 9.0) {\n ZoneNumber = 31;\n }\n else if (Long >= 9.0 && Long < 21.0) {\n ZoneNumber = 33;\n }\n else if (Long >= 21.0 && Long < 33.0) {\n ZoneNumber = 35;\n }\n else if (Long >= 33.0 && Long < 42.0) {\n ZoneNumber = 37;\n }\n }\n\n LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin\n // in middle of\n // zone\n LongOriginRad = degToRad(LongOrigin);\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));\n T = Math.tan(LatRad) * Math.tan(LatRad);\n C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);\n A = Math.cos(LatRad) * (LongRad - LongOriginRad);\n\n M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));\n\n var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);\n\n var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));\n if (Lat < 0.0) {\n UTMNorthing += 10000000.0; //10000000 meter offset for\n // southern hemisphere\n }\n\n return {\n northing: Math.round(UTMNorthing),\n easting: Math.round(UTMEasting),\n zoneNumber: ZoneNumber,\n zoneLetter: getLetterDesignator(Lat)\n };\n}\n\n/**\n * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience\n * class where the Zone can be specified as a single string eg.\"60N\" which\n * is then broken down into the ZoneNumber and ZoneLetter.\n *\n * @private\n * @param {object} utm An object literal with northing, easting, zoneNumber\n * and zoneLetter properties. If an optional accuracy property is\n * provided (in meters), a bounding box will be returned instead of\n * latitude and longitude.\n * @return {object} An object literal containing either lat and lon values\n * (if no accuracy was provided), or top, right, bottom and left values\n * for the bounding box calculated according to the provided accuracy.\n * Returns null if the conversion failed.\n */\nfunction UTMtoLL(utm) {\n\n var UTMNorthing = utm.northing;\n var UTMEasting = utm.easting;\n var zoneLetter = utm.zoneLetter;\n var zoneNumber = utm.zoneNumber;\n // check the ZoneNummber is valid\n if (zoneNumber < 0 || zoneNumber > 60) {\n return null;\n }\n\n var k0 = 0.9996;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var eccPrimeSquared;\n var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));\n var N1, T1, C1, R1, D, M;\n var LongOrigin;\n var mu, phi1Rad;\n\n // remove 500,000 meter offset for longitude\n var x = UTMEasting - 500000.0;\n var y = UTMNorthing;\n\n // We must know somehow if we are in the Northern or Southern\n // hemisphere, this is the only time we use the letter So even\n // if the Zone letter isn't exactly correct it should indicate\n // the hemisphere correctly\n if (zoneLetter < 'N') {\n y -= 10000000.0; // remove 10,000,000 meter offset used\n // for southern hemisphere\n }\n\n // There are 60 zones with zone 1 being at West -180 to -174\n LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin\n // in middle of\n // zone\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n M = y / k0;\n mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));\n\n phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);\n // double phi1 = ProjMath.radToDeg(phi1Rad);\n\n N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));\n T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);\n C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);\n R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);\n D = x / (N1 * k0);\n\n var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);\n lat = radToDeg(lat);\n\n var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);\n lon = LongOrigin + radToDeg(lon);\n\n var result;\n if (utm.accuracy) {\n var topRight = UTMtoLL({\n northing: utm.northing + utm.accuracy,\n easting: utm.easting + utm.accuracy,\n zoneLetter: utm.zoneLetter,\n zoneNumber: utm.zoneNumber\n });\n result = {\n top: topRight.lat,\n right: topRight.lon,\n bottom: lat,\n left: lon\n };\n }\n else {\n result = {\n lat: lat,\n lon: lon\n };\n }\n return result;\n}\n\n/**\n * Calculates the MGRS letter designator for the given latitude.\n *\n * @private\n * @param {number} lat The latitude in WGS84 to get the letter designator\n * for.\n * @return {char} The letter designator.\n */\nfunction getLetterDesignator(lat) {\n //This is here as an error flag to show that the Latitude is\n //outside MGRS limits\n var LetterDesignator = 'Z';\n\n if ((84 >= lat) && (lat >= 72)) {\n LetterDesignator = 'X';\n }\n else if ((72 > lat) && (lat >= 64)) {\n LetterDesignator = 'W';\n }\n else if ((64 > lat) && (lat >= 56)) {\n LetterDesignator = 'V';\n }\n else if ((56 > lat) && (lat >= 48)) {\n LetterDesignator = 'U';\n }\n else if ((48 > lat) && (lat >= 40)) {\n LetterDesignator = 'T';\n }\n else if ((40 > lat) && (lat >= 32)) {\n LetterDesignator = 'S';\n }\n else if ((32 > lat) && (lat >= 24)) {\n LetterDesignator = 'R';\n }\n else if ((24 > lat) && (lat >= 16)) {\n LetterDesignator = 'Q';\n }\n else if ((16 > lat) && (lat >= 8)) {\n LetterDesignator = 'P';\n }\n else if ((8 > lat) && (lat >= 0)) {\n LetterDesignator = 'N';\n }\n else if ((0 > lat) && (lat >= -8)) {\n LetterDesignator = 'M';\n }\n else if ((-8 > lat) && (lat >= -16)) {\n LetterDesignator = 'L';\n }\n else if ((-16 > lat) && (lat >= -24)) {\n LetterDesignator = 'K';\n }\n else if ((-24 > lat) && (lat >= -32)) {\n LetterDesignator = 'J';\n }\n else if ((-32 > lat) && (lat >= -40)) {\n LetterDesignator = 'H';\n }\n else if ((-40 > lat) && (lat >= -48)) {\n LetterDesignator = 'G';\n }\n else if ((-48 > lat) && (lat >= -56)) {\n LetterDesignator = 'F';\n }\n else if ((-56 > lat) && (lat >= -64)) {\n LetterDesignator = 'E';\n }\n else if ((-64 > lat) && (lat >= -72)) {\n LetterDesignator = 'D';\n }\n else if ((-72 > lat) && (lat >= -80)) {\n LetterDesignator = 'C';\n }\n return LetterDesignator;\n}\n\n/**\n * Encodes a UTM location as MGRS string.\n *\n * @private\n * @param {object} utm An object literal with easting, northing,\n * zoneLetter, zoneNumber\n * @param {number} accuracy Accuracy in digits (1-5).\n * @return {string} MGRS string for the given UTM location.\n */\nfunction encode(utm, accuracy) {\n // prepend with leading zeroes\n var seasting = \"00000\" + utm.easting,\n snorthing = \"00000\" + utm.northing;\n\n return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);\n}\n\n/**\n * Get the two letter 100k designator for a given UTM easting,\n * northing and zone number value.\n *\n * @private\n * @param {number} easting\n * @param {number} northing\n * @param {number} zoneNumber\n * @return the two letter 100k designator for the given UTM location.\n */\nfunction get100kID(easting, northing, zoneNumber) {\n var setParm = get100kSetForZone(zoneNumber);\n var setColumn = Math.floor(easting / 100000);\n var setRow = Math.floor(northing / 100000) % 20;\n return getLetter100kID(setColumn, setRow, setParm);\n}\n\n/**\n * Given a UTM zone number, figure out the MGRS 100K set it is in.\n *\n * @private\n * @param {number} i An UTM zone number.\n * @return {number} the 100k set the UTM zone is in.\n */\nfunction get100kSetForZone(i) {\n var setParm = i % NUM_100K_SETS;\n if (setParm === 0) {\n setParm = NUM_100K_SETS;\n }\n\n return setParm;\n}\n\n/**\n * Get the two-letter MGRS 100k designator given information\n * translated from the UTM northing, easting and zone number.\n *\n * @private\n * @param {number} column the column index as it relates to the MGRS\n * 100k set spreadsheet, created from the UTM easting.\n * Values are 1-8.\n * @param {number} row the row index as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM northing value. Values\n * are from 0-19.\n * @param {number} parm the set block, as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM zone. Values are from\n * 1-60.\n * @return two letter MGRS 100k code.\n */\nfunction getLetter100kID(column, row, parm) {\n // colOrigin and rowOrigin are the letters at the origin of the set\n var index = parm - 1;\n var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);\n var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);\n\n // colInt and rowInt are the letters to build to return\n var colInt = colOrigin + column - 1;\n var rowInt = rowOrigin + row;\n var rollover = false;\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n rollover = true;\n }\n\n if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {\n colInt++;\n }\n\n if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {\n colInt++;\n\n if (colInt === I) {\n colInt++;\n }\n }\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n rollover = true;\n }\n else {\n rollover = false;\n }\n\n if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {\n rowInt++;\n }\n\n if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {\n rowInt++;\n\n if (rowInt === I) {\n rowInt++;\n }\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n }\n\n var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);\n return twoLetter;\n}\n\n/**\n * Decode the UTM parameters from a MGRS string.\n *\n * @private\n * @param {string} mgrsString an UPPERCASE coordinate string is expected.\n * @return {object} An object literal with easting, northing, zoneLetter,\n * zoneNumber and accuracy (in meters) properties.\n */\nfunction decode(mgrsString) {\n\n if (mgrsString && mgrsString.length === 0) {\n throw (\"MGRSPoint coverting from nothing\");\n }\n\n var length = mgrsString.length;\n\n var hunK = null;\n var sb = \"\";\n var testChar;\n var i = 0;\n\n // get Zone number\n while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {\n if (i >= 2) {\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n sb += testChar;\n i++;\n }\n\n var zoneNumber = parseInt(sb, 10);\n\n if (i === 0 || i + 3 > length) {\n // A good MGRS string has to be 4-5 digits long,\n // ##AAA/#AAA at least.\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n\n var zoneLetter = mgrsString.charAt(i++);\n\n // Should we check the zone letter here? Why not.\n if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {\n throw (\"MGRSPoint zone letter \" + zoneLetter + \" not handled: \" + mgrsString);\n }\n\n hunK = mgrsString.substring(i, i += 2);\n\n var set = get100kSetForZone(zoneNumber);\n\n var east100k = getEastingFromChar(hunK.charAt(0), set);\n var north100k = getNorthingFromChar(hunK.charAt(1), set);\n\n // We have a bug where the northing may be 2000000 too low.\n // How\n // do we know when to roll over?\n\n while (north100k < getMinNorthing(zoneLetter)) {\n north100k += 2000000;\n }\n\n // calculate the char index for easting/northing separator\n var remainder = length - i;\n\n if (remainder % 2 !== 0) {\n throw (\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\" + mgrsString);\n }\n\n var sep = remainder / 2;\n\n var sepEasting = 0.0;\n var sepNorthing = 0.0;\n var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;\n if (sep > 0) {\n accuracyBonus = 100000.0 / Math.pow(10, sep);\n sepEastingString = mgrsString.substring(i, i + sep);\n sepEasting = parseFloat(sepEastingString) * accuracyBonus;\n sepNorthingString = mgrsString.substring(i + sep);\n sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;\n }\n\n easting = sepEasting + east100k;\n northing = sepNorthing + north100k;\n\n return {\n easting: easting,\n northing: northing,\n zoneLetter: zoneLetter,\n zoneNumber: zoneNumber,\n accuracy: accuracyBonus\n };\n}\n\n/**\n * Given the first letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the easting value that\n * should be added to the other, secondary easting value.\n *\n * @private\n * @param {char} e The first letter from a two-letter MGRS 100´k zone.\n * @param {number} set The MGRS table set for the zone number.\n * @return {number} The easting value for the given letter and set.\n */\nfunction getEastingFromChar(e, set) {\n // colOrigin is the letter at the origin of the set for the\n // column\n var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);\n var eastingValue = 100000.0;\n var rewindMarker = false;\n\n while (curCol !== e.charCodeAt(0)) {\n curCol++;\n if (curCol === I) {\n curCol++;\n }\n if (curCol === O) {\n curCol++;\n }\n if (curCol > Z) {\n if (rewindMarker) {\n throw (\"Bad character: \" + e);\n }\n curCol = A;\n rewindMarker = true;\n }\n eastingValue += 100000.0;\n }\n\n return eastingValue;\n}\n\n/**\n * Given the second letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the northing value that\n * should be added to the other, secondary northing value. You have to\n * remember that Northings are determined from the equator, and the vertical\n * cycle of letters mean a 2000000 additional northing meters. This happens\n * approx. every 18 degrees of latitude. This method does *NOT* count any\n * additional northings. You have to figure out how many 2000000 meters need\n * to be added for the zone letter of the MGRS coordinate.\n *\n * @private\n * @param {char} n Second letter of the MGRS 100k zone\n * @param {number} set The MGRS table set number, which is dependent on the\n * UTM zone number.\n * @return {number} The northing value for the given letter and set.\n */\nfunction getNorthingFromChar(n, set) {\n\n if (n > 'V') {\n throw (\"MGRSPoint given invalid Northing \" + n);\n }\n\n // rowOrigin is the letter at the origin of the set for the\n // column\n var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);\n var northingValue = 0.0;\n var rewindMarker = false;\n\n while (curRow !== n.charCodeAt(0)) {\n curRow++;\n if (curRow === I) {\n curRow++;\n }\n if (curRow === O) {\n curRow++;\n }\n // fixing a bug making whole application hang in this loop\n // when 'n' is a wrong character\n if (curRow > V) {\n if (rewindMarker) { // making sure that this loop ends\n throw (\"Bad character: \" + n);\n }\n curRow = A;\n rewindMarker = true;\n }\n northingValue += 100000.0;\n }\n\n return northingValue;\n}\n\n/**\n * The function getMinNorthing returns the minimum northing value of a MGRS\n * zone.\n *\n * Ported from Geotrans' c Lattitude_Band_Value structure table.\n *\n * @private\n * @param {char} zoneLetter The MGRS zone to get the min northing for.\n * @return {number}\n */\nfunction getMinNorthing(zoneLetter) {\n var northing;\n switch (zoneLetter) {\n case 'C':\n northing = 1100000.0;\n break;\n case 'D':\n northing = 2000000.0;\n break;\n case 'E':\n northing = 2800000.0;\n break;\n case 'F':\n northing = 3700000.0;\n break;\n case 'G':\n northing = 4600000.0;\n break;\n case 'H':\n northing = 5500000.0;\n break;\n case 'J':\n northing = 6400000.0;\n break;\n case 'K':\n northing = 7300000.0;\n break;\n case 'L':\n northing = 8200000.0;\n break;\n case 'M':\n northing = 9100000.0;\n break;\n case 'N':\n northing = 0.0;\n break;\n case 'P':\n northing = 800000.0;\n break;\n case 'Q':\n northing = 1700000.0;\n break;\n case 'R':\n northing = 2600000.0;\n break;\n case 'S':\n northing = 3500000.0;\n break;\n case 'T':\n northing = 4400000.0;\n break;\n case 'U':\n northing = 5300000.0;\n break;\n case 'V':\n northing = 6200000.0;\n break;\n case 'W':\n northing = 7000000.0;\n break;\n case 'X':\n northing = 7900000.0;\n break;\n default:\n northing = -1.0;\n }\n if (northing >= 0.0) {\n return northing;\n }\n else {\n throw (\"Invalid zone letter: \" + zoneLetter);\n }\n\n}\n","import {toPoint, forward} from 'mgrs';\n\nfunction Point(x, y, z) {\n if (!(this instanceof Point)) {\n return new Point(x, y, z);\n }\n if (Array.isArray(x)) {\n this.x = x[0];\n this.y = x[1];\n this.z = x[2] || 0.0;\n } else if(typeof x === 'object') {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z || 0.0;\n } else if (typeof x === 'string' && typeof y === 'undefined') {\n var coords = x.split(',');\n this.x = parseFloat(coords[0], 10);\n this.y = parseFloat(coords[1], 10);\n this.z = parseFloat(coords[2], 10) || 0.0;\n } else {\n this.x = x;\n this.y = y;\n this.z = z || 0.0;\n }\n console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');\n}\n\nPoint.fromMGRS = function(mgrsStr) {\n return new Point(toPoint(mgrsStr));\n};\nPoint.prototype.toMGRS = function(accuracy) {\n return forward([this.x, this.y], accuracy);\n};\nexport default Point;\n","var C00 = 1;\nvar C02 = 0.25;\nvar C04 = 0.046875;\nvar C06 = 0.01953125;\nvar C08 = 0.01068115234375;\nvar C22 = 0.75;\nvar C44 = 0.46875;\nvar C46 = 0.01302083333333333333;\nvar C48 = 0.00712076822916666666;\nvar C66 = 0.36458333333333333333;\nvar C68 = 0.00569661458333333333;\nvar C88 = 0.3076171875;\n\nexport default function(es) {\n var en = [];\n en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));\n en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));\n var t = es * es;\n en[2] = t * (C44 - es * (C46 + es * C48));\n t *= es;\n en[3] = t * (C66 - es * C68);\n en[4] = t * es * C88;\n return en;\n}","export default function(phi, sphi, cphi, en) {\n cphi *= sphi;\n sphi *= sphi;\n return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));\n}","import pj_mlfn from \"./pj_mlfn\";\nimport {EPSLN} from '../constants/values';\n\nvar MAX_ITER = 20;\n\nexport default function(arg, es, en) {\n var k = 1 / (1 - es);\n var phi = arg;\n for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */\n var s = Math.sin(phi);\n var t = 1 - es * s * s;\n //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;\n //phi -= t * (t * Math.sqrt(t)) * k;\n t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;\n phi -= t;\n if (Math.abs(t) < EPSLN) {\n return phi;\n }\n }\n //..reportError(\"cass:pj_inv_mlfn: Convergence error\");\n return phi;\n}\n","// Heavily based on this tmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js\n\nimport pj_enfn from '../common/pj_enfn';\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport adjust_lon from '../common/adjust_lon';\n\nimport {EPSLN, HALF_PI} from '../constants/values';\nimport sign from '../common/sign';\n\nexport function init() {\n this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n if (this.es) {\n this.en = pj_enfn(this.es);\n this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);\n }\n}\n\n/**\n Transverse Mercator Forward - long/lat to x/y\n long/lat in radians\n */\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var con;\n var x, y;\n var sin_phi = Math.sin(lat);\n var cos_phi = Math.cos(lat);\n\n if (!this.es) {\n var b = cos_phi * Math.sin(delta_lon);\n\n if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {\n return (93);\n }\n else {\n x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;\n y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));\n b = Math.abs(y);\n\n if (b >= 1) {\n if ((b - 1) > EPSLN) {\n return (93);\n }\n else {\n y = 0;\n }\n }\n else {\n y = Math.acos(y);\n }\n\n if (lat < 0) {\n y = -y;\n }\n\n y = this.a * this.k0 * (y - this.lat0) + this.y0;\n }\n }\n else {\n var al = cos_phi * delta_lon;\n var als = Math.pow(al, 2);\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var cs = Math.pow(c, 2);\n var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;\n var t = Math.pow(tq, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n al = al / Math.sqrt(con);\n var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);\n\n x = this.a * (this.k0 * al * (1 +\n als / 6 * (1 - t + c +\n als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +\n als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +\n this.x0;\n\n y = this.a * (this.k0 * (ml - this.ml0 +\n sin_phi * delta_lon * al / 2 * (1 +\n als / 12 * (5 - t + 9 * c + 4 * cs +\n als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +\n als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +\n this.y0;\n }\n\n p.x = x;\n p.y = y;\n\n return p;\n}\n\n/**\n Transverse Mercator Inverse - x/y to long/lat\n */\nexport function inverse(p) {\n var con, phi;\n var lat, lon;\n var x = (p.x - this.x0) * (1 / this.a);\n var y = (p.y - this.y0) * (1 / this.a);\n\n if (!this.es) {\n var f = Math.exp(x / this.k0);\n var g = 0.5 * (f - 1 / f);\n var temp = this.lat0 + y / this.k0;\n var h = Math.cos(temp);\n con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));\n lat = Math.asin(con);\n\n if (y < 0) {\n lat = -lat;\n }\n\n if ((g === 0) && (h === 0)) {\n lon = 0;\n }\n else {\n lon = adjust_lon(Math.atan2(g, h) + this.long0);\n }\n }\n else { // ellipsoidal form\n con = this.ml0 + y / this.k0;\n phi = pj_inv_mlfn(con, this.es, this.en);\n\n if (Math.abs(phi) < HALF_PI) {\n var sin_phi = Math.sin(phi);\n var cos_phi = Math.cos(phi);\n var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var cs = Math.pow(c, 2);\n var t = Math.pow(tan_phi, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n var d = x * Math.sqrt(con) / this.k0;\n var ds = Math.pow(d, 2);\n con = con * tan_phi;\n\n lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -\n ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -\n ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -\n ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));\n\n lon = adjust_lon(this.long0 + (d * (1 -\n ds / 6 * (1 + 2 * t + c -\n ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -\n ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));\n }\n else {\n lat = HALF_PI * sign(y);\n lon = 0;\n }\n }\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"Fast_Transverse_Mercator\", \"Fast Transverse Mercator\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(x) {\n var r = Math.exp(x);\n r = (r - 1 / r) / 2;\n return r;\n}","export default function(x, y) {\n x = Math.abs(x);\n y = Math.abs(y);\n var a = Math.max(x, y);\n var b = Math.min(x, y) / (a ? a : 1);\n\n return a * Math.sqrt(1 + Math.pow(b, 2));\n}\n","import hypot from './hypot';\nimport log1py from './log1py';\n\nexport default function(x) {\n var y = Math.abs(x);\n y = log1py(y * (1 + y / (hypot(1, y) + 1)));\n\n return x < 0 ? -y : y;\n}\n","export default function(x) {\n var y = 1 + x;\n var z = y - 1;\n\n return z === 0 ? x : x * Math.log(y) / z;\n}\n","export default function(pp, B) {\n var cos_2B = 2 * Math.cos(2 * B);\n var i = pp.length - 1;\n var h1 = pp[i];\n var h2 = 0;\n var h;\n\n while (--i >= 0) {\n h = -h2 + cos_2B * h1 + pp[i];\n h2 = h1;\n h1 = h;\n }\n\n return (B + h * Math.sin(2 * B));\n}\n","import sinh from './sinh';\nimport cosh from './cosh';\n\nexport default function(pp, arg_r, arg_i) {\n var sin_arg_r = Math.sin(arg_r);\n var cos_arg_r = Math.cos(arg_r);\n var sinh_arg_i = sinh(arg_i);\n var cosh_arg_i = cosh(arg_i);\n var r = 2 * cos_arg_r * cosh_arg_i;\n var i = -2 * sin_arg_r * sinh_arg_i;\n var j = pp.length - 1;\n var hr = pp[j];\n var hi1 = 0;\n var hr1 = 0;\n var hi = 0;\n var hr2;\n var hi2;\n\n while (--j >= 0) {\n hr2 = hr1;\n hi2 = hi1;\n hr1 = hr;\n hi1 = hi;\n hr = -hr2 + r * hr1 - i * hi1 + pp[j];\n hi = -hi2 + i * hr1 + r * hi1;\n }\n\n r = sin_arg_r * cosh_arg_i;\n i = cos_arg_r * sinh_arg_i;\n\n return [r * hr - i * hi, r * hi + i * hr];\n}\n","export default function(x) {\n var r = Math.exp(x);\n r = (r + 1 / r) / 2;\n return r;\n}","// Heavily based on this etmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js\n\nimport tmerc from '../projections/tmerc';\nimport sinh from '../common/sinh';\nimport hypot from '../common/hypot';\nimport asinhy from '../common/asinhy';\nimport gatg from '../common/gatg';\nimport clens from '../common/clens';\nimport clens_cmplx from '../common/clens_cmplx';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n if (!this.approx && (isNaN(this.es) || this.es <= 0)) {\n throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION[\"Fast_Transverse_Mercator\"] in the WKT.');\n }\n if (this.approx) {\n // When '+approx' is set, use tmerc instead\n tmerc.init.apply(this);\n this.forward = tmerc.forward;\n this.inverse = tmerc.inverse;\n }\n\n this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n this.cgb = [];\n this.cbg = [];\n this.utg = [];\n this.gtu = [];\n\n var f = this.es / (1 + Math.sqrt(1 - this.es));\n var n = f / (2 - f);\n var np = n;\n\n this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));\n this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));\n\n np = np * n;\n this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));\n this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));\n\n np = np * n;\n this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));\n this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));\n\n np = np * n;\n this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));\n this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));\n\n np = np * n;\n this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));\n this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));\n\n np = np * n;\n this.cgb[5] = np * (601676 / 22275);\n this.cbg[5] = np * (444337 / 155925);\n\n np = Math.pow(n, 2);\n this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));\n\n this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));\n this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));\n\n this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));\n this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));\n\n np = np * n;\n this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));\n this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));\n\n np = np * n;\n this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));\n this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));\n\n np = np * n;\n this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));\n this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));\n\n np = np * n;\n this.utg[5] = np * (-20648693 / 638668800);\n this.gtu[5] = np * (212378941 / 319334400);\n\n var Z = gatg(this.cbg, this.lat0);\n this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));\n}\n\nexport function forward(p) {\n var Ce = adjust_lon(p.x - this.long0);\n var Cn = p.y;\n\n Cn = gatg(this.cbg, Cn);\n var sin_Cn = Math.sin(Cn);\n var cos_Cn = Math.cos(Cn);\n var sin_Ce = Math.sin(Ce);\n var cos_Ce = Math.cos(Ce);\n\n Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);\n Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));\n Ce = asinhy(Math.tan(Ce));\n\n var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);\n\n Cn = Cn + tmp[0];\n Ce = Ce + tmp[1];\n\n var x;\n var y;\n\n if (Math.abs(Ce) <= 2.623395162778) {\n x = this.a * (this.Qn * Ce) + this.x0;\n y = this.a * (this.Qn * Cn + this.Zb) + this.y0;\n }\n else {\n x = Infinity;\n y = Infinity;\n }\n\n p.x = x;\n p.y = y;\n\n return p;\n}\n\nexport function inverse(p) {\n var Ce = (p.x - this.x0) * (1 / this.a);\n var Cn = (p.y - this.y0) * (1 / this.a);\n\n Cn = (Cn - this.Zb) / this.Qn;\n Ce = Ce / this.Qn;\n\n var lon;\n var lat;\n\n if (Math.abs(Ce) <= 2.623395162778) {\n var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);\n\n Cn = Cn + tmp[0];\n Ce = Ce + tmp[1];\n Ce = Math.atan(sinh(Ce));\n\n var sin_Cn = Math.sin(Cn);\n var cos_Cn = Math.cos(Cn);\n var sin_Ce = Math.sin(Ce);\n var cos_Ce = Math.cos(Ce);\n\n Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));\n Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);\n\n lon = adjust_lon(Ce + this.long0);\n lat = gatg(this.cgb, Cn);\n }\n else {\n lon = Infinity;\n lat = Infinity;\n }\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"Extended_Transverse_Mercator\", \"Extended Transverse Mercator\", \"etmerc\", \"Transverse_Mercator\", \"Transverse Mercator\", \"Gauss Kruger\", \"Gauss_Kruger\", \"tmerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(pp, arg_r) {\n var r = 2 * Math.cos(arg_r);\n var i = pp.length - 1;\n var hr1 = pp[i];\n var hr2 = 0;\n var hr;\n\n while (--i >= 0) {\n hr = -hr2 + r * hr1 + pp[i];\n hr2 = hr1;\n hr1 = hr;\n }\n\n return Math.sin(arg_r) * hr;\n}\n","import adjust_zone from '../common/adjust_zone';\nimport etmerc from './etmerc';\nexport var dependsOn = 'etmerc';\nimport {D2R} from '../constants/values';\n\n\nexport function init() {\n var zone = adjust_zone(this.zone, this.long0);\n if (zone === undefined) {\n throw new Error('unknown utm zone');\n }\n this.lat0 = 0;\n this.long0 = ((6 * Math.abs(zone)) - 183) * D2R;\n this.x0 = 500000;\n this.y0 = this.utmSouth ? 10000000 : 0;\n this.k0 = 0.9996;\n\n etmerc.init.apply(this);\n this.forward = etmerc.forward;\n this.inverse = etmerc.inverse;\n}\n\nexport var names = [\"Universal Transverse Mercator System\", \"utm\"];\nexport default {\n init: init,\n names: names,\n dependsOn: dependsOn\n};\n","import adjust_lon from './adjust_lon';\n\nexport default function(zone, lon) {\n if (zone === undefined) {\n zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;\n\n if (zone < 0) {\n return 0;\n } else if (zone > 60) {\n return 60;\n }\n }\n return zone;\n}\n","export default function(esinp, exp) {\n return (Math.pow((1 - esinp) / (1 + esinp), exp));\n}","import srat from '../common/srat';\nvar MAX_ITER = 20;\nimport {HALF_PI, FORTPI} from '../constants/values';\n\nexport function init() {\n var sphi = Math.sin(this.lat0);\n var cphi = Math.cos(this.lat0);\n cphi *= cphi;\n this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);\n this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));\n this.phic0 = Math.asin(sphi / this.C);\n this.ratexp = 0.5 * this.C * this.e;\n this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));\n}\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n\n p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;\n p.x = this.C * lon;\n return p;\n}\n\nexport function inverse(p) {\n var DEL_TOL = 1e-14;\n var lon = p.x / this.C;\n var lat = p.y;\n var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);\n for (var i = MAX_ITER; i > 0; --i) {\n lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;\n if (Math.abs(lat - p.y) < DEL_TOL) {\n break;\n }\n p.y = lat;\n }\n /* convergence failed */\n if (!i) {\n return null;\n }\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"gauss\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import gauss from './gauss';\nimport adjust_lon from '../common/adjust_lon';\nimport hypot from '../common/hypot';\n\nexport function init() {\n gauss.init.apply(this);\n if (!this.rc) {\n return;\n }\n this.sinc0 = Math.sin(this.phic0);\n this.cosc0 = Math.cos(this.phic0);\n this.R2 = 2 * this.rc;\n if (!this.title) {\n this.title = \"Oblique Stereographic Alternative\";\n }\n}\n\nexport function forward(p) {\n var sinc, cosc, cosl, k;\n p.x = adjust_lon(p.x - this.long0);\n gauss.forward.apply(this, [p]);\n sinc = Math.sin(p.y);\n cosc = Math.cos(p.y);\n cosl = Math.cos(p.x);\n k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);\n p.x = k * cosc * Math.sin(p.x);\n p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);\n p.x = this.a * p.x + this.x0;\n p.y = this.a * p.y + this.y0;\n return p;\n}\n\nexport function inverse(p) {\n var sinc, cosc, lon, lat, rho;\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n if ((rho = hypot(p.x, p.y))) {\n var c = 2 * Math.atan2(rho, this.R2);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);\n lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n gauss.inverse.apply(this, [p]);\n p.x = adjust_lon(p.x + this.long0);\n return p;\n}\n\nexport var names = [\"Stereographic_North_Pole\", \"Oblique_Stereographic\", \"sterea\",\"Oblique Stereographic Alternative\",\"Double_Stereographic\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {EPSLN, HALF_PI} from '../constants/values';\n\nimport sign from '../common/sign';\nimport msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function ssfn_(phit, sinphi, eccen) {\n sinphi *= eccen;\n return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));\n}\n\nexport function init() {\n\n // setting default parameters\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n\n this.coslat0 = Math.cos(this.lat0);\n this.sinlat0 = Math.sin(this.lat0);\n if (this.sphere) {\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));\n }\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (this.lat0 > 0) {\n //North pole\n //trace('stere:north pole');\n this.con = 1;\n }\n else {\n //South pole\n //trace('stere:south pole');\n this.con = -1;\n }\n }\n this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN && Math.abs(Math.cos(this.lat_ts)) > EPSLN) {\n // When k0 is 1 (default value) and lat_ts is a vaild number and lat0 is at a pole and lat_ts is not at a pole\n // Recalculate k0 using formula 21-35 from p161 of Snyder, 1987\n this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));\n }\n this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);\n this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;\n this.cosX0 = Math.cos(this.X0);\n this.sinX0 = Math.sin(this.X0);\n }\n}\n\n// Stereographic forward equations--mapping lat,long to x,y\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var sinlat = Math.sin(lat);\n var coslat = Math.cos(lat);\n var A, X, sinX, cosX, ts, rh;\n var dlon = adjust_lon(lon - this.long0);\n\n if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {\n //case of the origine point\n //trace('stere:this is the origin point');\n p.x = NaN;\n p.y = NaN;\n return p;\n }\n if (this.sphere) {\n //trace('stere:sphere case');\n A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));\n p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;\n p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;\n return p;\n }\n else {\n X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;\n cosX = Math.cos(X);\n sinX = Math.sin(X);\n if (Math.abs(this.coslat0) <= EPSLN) {\n ts = tsfnz(this.e, lat * this.con, this.con * sinlat);\n rh = 2 * this.a * this.k0 * ts / this.cons;\n p.x = this.x0 + rh * Math.sin(lon - this.long0);\n p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);\n //trace(p.toString());\n return p;\n }\n else if (Math.abs(this.sinlat0) < EPSLN) {\n //Eq\n //trace('stere:equateur');\n A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));\n p.y = A * sinX;\n }\n else {\n //other case\n //trace('stere:normal case');\n A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));\n p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;\n }\n p.x = A * cosX * Math.sin(dlon) + this.x0;\n }\n //trace(p.toString());\n return p;\n}\n\n//* Stereographic inverse equations--mapping x,y to lat/long\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat, ts, ce, Chi;\n var rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (this.sphere) {\n var c = 2 * Math.atan(rh / (2 * this.a * this.k0));\n lon = this.long0;\n lat = this.lat0;\n if (rh <= EPSLN) {\n p.x = lon;\n p.y = lat;\n return p;\n }\n lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);\n if (Math.abs(this.coslat0) < EPSLN) {\n if (this.lat0 > 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n }\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));\n }\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (rh <= EPSLN) {\n lat = this.lat0;\n lon = this.long0;\n p.x = lon;\n p.y = lat;\n //trace(p.toString());\n return p;\n }\n p.x *= this.con;\n p.y *= this.con;\n ts = rh * this.cons / (2 * this.a * this.k0);\n lat = this.con * phi2z(this.e, ts);\n lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));\n lon = this.long0;\n if (rh <= EPSLN) {\n Chi = this.X0;\n }\n else {\n Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));\n }\n lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));\n }\n }\n p.x = lon;\n p.y = lat;\n\n //trace(p.toString());\n return p;\n\n}\n\nexport var names = [\"stere\", \"Stereographic_South_Pole\", \"Polar Stereographic (variant B)\", \"Polar_Stereographic\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n ssfn_: ssfn_\n};\n","/*\n references:\n Formules et constantes pour le Calcul pour la\n projection cylindrique conforme à axe oblique et pour la transformation entre\n des systèmes de référence.\n http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf\n */\n\nexport function init() {\n var phy0 = this.lat0;\n this.lambda0 = this.long0;\n var sinPhy0 = Math.sin(phy0);\n var semiMajorAxis = this.a;\n var invF = this.rf;\n var flattening = 1 / invF;\n var e2 = 2 * flattening - Math.pow(flattening, 2);\n var e = this.e = Math.sqrt(e2);\n this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));\n this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));\n this.b0 = Math.asin(sinPhy0 / this.alpha);\n var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));\n var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));\n var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));\n this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;\n}\n\nexport function forward(p) {\n var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));\n var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));\n var S = -this.alpha * (Sa1 + Sa2) + this.K;\n\n // spheric latitude\n var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);\n\n // spheric longitude\n var I = this.alpha * (p.x - this.lambda0);\n\n // psoeudo equatorial rotation\n var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));\n\n var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));\n\n p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;\n p.x = this.R * rotI + this.x0;\n return p;\n}\n\nexport function inverse(p) {\n var Y = p.x - this.x0;\n var X = p.y - this.y0;\n\n var rotI = Y / this.R;\n var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);\n\n var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));\n var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));\n\n var lambda = this.lambda0 + I / this.alpha;\n\n var S = 0;\n var phy = b;\n var prevPhy = -1000;\n var iteration = 0;\n while (Math.abs(phy - prevPhy) > 0.0000001) {\n if (++iteration > 20) {\n //...reportError(\"omercFwdInfinity\");\n return;\n }\n //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));\n S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));\n prevPhy = phy;\n phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;\n }\n\n p.x = lambda;\n p.y = phy;\n return p;\n}\n\nexport var names = [\"somerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import tsfnz from '../common/tsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport { D2R, EPSLN, HALF_PI, TWO_PI, FORTPI } from '../constants/values';\n\nvar TOL = 1e-7;\n\nfunction isTypeA(P) {\n var typeAProjections = ['Hotine_Oblique_Mercator','Hotine_Oblique_Mercator_Azimuth_Natural_Origin'];\n var projectionName = typeof P.PROJECTION === \"object\" ? Object.keys(P.PROJECTION)[0] : P.PROJECTION;\n \n return 'no_uoff' in P || 'no_off' in P || typeAProjections.indexOf(projectionName) !== -1;\n}\n\n\n/* Initialize the Oblique Mercator projection\n ------------------------------------------*/\nexport function init() { \n var con, com, cosph0, D, F, H, L, sinph0, p, J, gamma = 0,\n gamma0, lamc = 0, lam1 = 0, lam2 = 0, phi1 = 0, phi2 = 0, alpha_c = 0, AB;\n \n // only Type A uses the no_off or no_uoff property\n // https://github.com/OSGeo/proj.4/issues/104\n this.no_off = isTypeA(this);\n this.no_rot = 'no_rot' in this;\n \n var alp = false;\n if (\"alpha\" in this) {\n alp = true;\n }\n\n var gam = false;\n if (\"rectified_grid_angle\" in this) {\n gam = true;\n }\n\n if (alp) {\n alpha_c = this.alpha;\n }\n \n if (gam) {\n gamma = (this.rectified_grid_angle * D2R);\n }\n \n if (alp || gam) {\n lamc = this.longc;\n } else {\n lam1 = this.long1;\n phi1 = this.lat1;\n lam2 = this.long2;\n phi2 = this.lat2;\n \n if (Math.abs(phi1 - phi2) <= TOL || (con = Math.abs(phi1)) <= TOL ||\n Math.abs(con - HALF_PI) <= TOL || Math.abs(Math.abs(this.lat0) - HALF_PI) <= TOL ||\n Math.abs(Math.abs(phi2) - HALF_PI) <= TOL) {\n throw new Error();\n }\n }\n \n var one_es = 1.0 - this.es;\n com = Math.sqrt(one_es);\n \n if (Math.abs(this.lat0) > EPSLN) {\n sinph0 = Math.sin(this.lat0);\n cosph0 = Math.cos(this.lat0);\n con = 1 - this.es * sinph0 * sinph0;\n this.B = cosph0 * cosph0;\n this.B = Math.sqrt(1 + this.es * this.B * this.B / one_es);\n this.A = this.B * this.k0 * com / con;\n D = this.B * com / (cosph0 * Math.sqrt(con));\n F = D * D -1;\n \n if (F <= 0) {\n F = 0;\n } else {\n F = Math.sqrt(F);\n if (this.lat0 < 0) {\n F = -F;\n }\n }\n \n this.E = F += D;\n this.E *= Math.pow(tsfnz(this.e, this.lat0, sinph0), this.B);\n } else {\n this.B = 1 / com;\n this.A = this.k0;\n this.E = D = F = 1;\n }\n \n if (alp || gam) {\n if (alp) {\n gamma0 = Math.asin(Math.sin(alpha_c) / D);\n if (!gam) {\n gamma = alpha_c;\n }\n } else {\n gamma0 = gamma;\n alpha_c = Math.asin(D * Math.sin(gamma0));\n }\n this.lam0 = lamc - Math.asin(0.5 * (F - 1 / F) * Math.tan(gamma0)) / this.B;\n } else {\n H = Math.pow(tsfnz(this.e, phi1, Math.sin(phi1)), this.B);\n L = Math.pow(tsfnz(this.e, phi2, Math.sin(phi2)), this.B);\n F = this.E / H;\n p = (L - H) / (L + H);\n J = this.E * this.E;\n J = (J - L * H) / (J + L * H);\n con = lam1 - lam2;\n \n if (con < -Math.pi) {\n lam2 -=TWO_PI;\n } else if (con > Math.pi) {\n lam2 += TWO_PI;\n }\n \n this.lam0 = adjust_lon(0.5 * (lam1 + lam2) - Math.atan(J * Math.tan(0.5 * this.B * (lam1 - lam2)) / p) / this.B);\n gamma0 = Math.atan(2 * Math.sin(this.B * adjust_lon(lam1 - this.lam0)) / (F - 1 / F));\n gamma = alpha_c = Math.asin(D * Math.sin(gamma0));\n }\n \n this.singam = Math.sin(gamma0);\n this.cosgam = Math.cos(gamma0);\n this.sinrot = Math.sin(gamma);\n this.cosrot = Math.cos(gamma);\n \n this.rB = 1 / this.B;\n this.ArB = this.A * this.rB;\n this.BrA = 1 / this.ArB;\n AB = this.A * this.B;\n \n if (this.no_off) {\n this.u_0 = 0;\n } else {\n this.u_0 = Math.abs(this.ArB * Math.atan(Math.sqrt(D * D - 1) / Math.cos(alpha_c)));\n \n if (this.lat0 < 0) {\n this.u_0 = - this.u_0;\n } \n }\n \n F = 0.5 * gamma0;\n this.v_pole_n = this.ArB * Math.log(Math.tan(FORTPI - F));\n this.v_pole_s = this.ArB * Math.log(Math.tan(FORTPI + F));\n}\n\n\n/* Oblique Mercator forward equations--mapping lat,long to x,y\n ----------------------------------------------------------*/\nexport function forward(p) {\n var coords = {};\n var S, T, U, V, W, temp, u, v;\n p.x = p.x - this.lam0;\n \n if (Math.abs(Math.abs(p.y) - HALF_PI) > EPSLN) {\n W = this.E / Math.pow(tsfnz(this.e, p.y, Math.sin(p.y)), this.B);\n \n temp = 1 / W;\n S = 0.5 * (W - temp);\n T = 0.5 * (W + temp);\n V = Math.sin(this.B * p.x);\n U = (S * this.singam - V * this.cosgam) / T;\n \n if (Math.abs(Math.abs(U) - 1.0) < EPSLN) {\n throw new Error();\n }\n \n v = 0.5 * this.ArB * Math.log((1 - U)/(1 + U));\n temp = Math.cos(this.B * p.x);\n \n if (Math.abs(temp) < TOL) {\n u = this.A * p.x;\n } else {\n u = this.ArB * Math.atan2((S * this.cosgam + V * this.singam), temp);\n } \n } else {\n v = p.y > 0 ? this.v_pole_n : this.v_pole_s;\n u = this.ArB * p.y;\n }\n \n if (this.no_rot) {\n coords.x = u;\n coords.y = v;\n } else {\n u -= this.u_0;\n coords.x = v * this.cosrot + u * this.sinrot;\n coords.y = u * this.cosrot - v * this.sinrot;\n }\n \n coords.x = (this.a * coords.x + this.x0);\n coords.y = (this.a * coords.y + this.y0);\n \n return coords;\n}\n\nexport function inverse(p) {\n var u, v, Qp, Sp, Tp, Vp, Up;\n var coords = {};\n \n p.x = (p.x - this.x0) * (1.0 / this.a);\n p.y = (p.y - this.y0) * (1.0 / this.a);\n\n if (this.no_rot) {\n v = p.y;\n u = p.x;\n } else {\n v = p.x * this.cosrot - p.y * this.sinrot;\n u = p.y * this.cosrot + p.x * this.sinrot + this.u_0;\n }\n \n Qp = Math.exp(-this.BrA * v);\n Sp = 0.5 * (Qp - 1 / Qp);\n Tp = 0.5 * (Qp + 1 / Qp);\n Vp = Math.sin(this.BrA * u);\n Up = (Vp * this.cosgam + Sp * this.singam) / Tp;\n \n if (Math.abs(Math.abs(Up) - 1) < EPSLN) {\n coords.x = 0;\n coords.y = Up < 0 ? -HALF_PI : HALF_PI;\n } else {\n coords.y = this.E / Math.sqrt((1 + Up) / (1 - Up));\n coords.y = phi2z(this.e, Math.pow(coords.y, 1 / this.B));\n \n if (coords.y === Infinity) {\n throw new Error();\n }\n \n coords.x = -this.rB * Math.atan2((Sp * this.cosgam - Vp * this.singam), Math.cos(this.BrA * u));\n }\n \n coords.x += this.lam0;\n \n return coords;\n}\n\nexport var names = [\"Hotine_Oblique_Mercator\", \"Hotine Oblique Mercator\", \"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\", \"Hotine_Oblique_Mercator_Two_Point_Natural_Origin\", \"Hotine_Oblique_Mercator_Azimuth_Center\", \"Oblique_Mercator\", \"omerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport sign from '../common/sign';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport {HALF_PI, EPSLN} from '../constants/values';\nexport function init() {\n \n //double lat0; /* the reference latitude */\n //double long0; /* the reference longitude */\n //double lat1; /* first standard parallel */\n //double lat2; /* second standard parallel */\n //double r_maj; /* major axis */\n //double r_min; /* minor axis */\n //double false_east; /* x offset in meters */\n //double false_north; /* y offset in meters */\n \n //the above value can be set with proj4.defs\n //example: proj4.defs(\"EPSG:2154\",\"+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs\");\n\n if (!this.lat2) {\n this.lat2 = this.lat1;\n } //if lat2 is not defined\n if (!this.k0) {\n this.k0 = 1;\n }\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n\n var temp = this.b / this.a;\n this.e = Math.sqrt(1 - temp * temp);\n\n var sin1 = Math.sin(this.lat1);\n var cos1 = Math.cos(this.lat1);\n var ms1 = msfnz(this.e, sin1, cos1);\n var ts1 = tsfnz(this.e, this.lat1, sin1);\n\n var sin2 = Math.sin(this.lat2);\n var cos2 = Math.cos(this.lat2);\n var ms2 = msfnz(this.e, sin2, cos2);\n var ts2 = tsfnz(this.e, this.lat2, sin2);\n\n var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);\n }\n else {\n this.ns = sin1;\n }\n if (isNaN(this.ns)) {\n this.ns = sin1;\n }\n this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));\n this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);\n if (!this.title) {\n this.title = \"Lambert Conformal Conic\";\n }\n}\n\n// Lambert Conformal conic forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n // singular cases :\n if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {\n lat = sign(lat) * (HALF_PI - 2 * EPSLN);\n }\n\n var con = Math.abs(Math.abs(lat) - HALF_PI);\n var ts, rh1;\n if (con > EPSLN) {\n ts = tsfnz(this.e, lat, Math.sin(lat));\n rh1 = this.a * this.f0 * Math.pow(ts, this.ns);\n }\n else {\n con = lat * this.ns;\n if (con <= 0) {\n return null;\n }\n rh1 = 0;\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;\n p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;\n\n return p;\n}\n\n// Lambert Conformal Conic inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n var rh1, con, ts;\n var lat, lon;\n var x = (p.x - this.x0) / this.k0;\n var y = (this.rh - (p.y - this.y0) / this.k0);\n if (this.ns > 0) {\n rh1 = Math.sqrt(x * x + y * y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(x * x + y * y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2((con * x), (con * y));\n }\n if ((rh1 !== 0) || (this.ns > 0)) {\n con = 1 / this.ns;\n ts = Math.pow((rh1 / (this.a * this.f0)), con);\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n else {\n lat = -HALF_PI;\n }\n lon = adjust_lon(theta / this.ns + this.long0);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\n \"Lambert Tangential Conformal Conic Projection\",\n \"Lambert_Conformal_Conic\",\n \"Lambert_Conformal_Conic_1SP\",\n \"Lambert_Conformal_Conic_2SP\",\n \"lcc\",\n \"Lambert Conic Conformal (1SP)\",\n \"Lambert Conic Conformal (2SP)\"\n];\n\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n this.a = 6377397.155;\n this.es = 0.006674372230614;\n this.e = Math.sqrt(this.es);\n if (!this.lat0) {\n this.lat0 = 0.863937979737193;\n }\n if (!this.long0) {\n this.long0 = 0.7417649320975901 - 0.308341501185665;\n }\n /* if scale not set default to 0.9999 */\n if (!this.k0) {\n this.k0 = 0.9999;\n }\n this.s45 = 0.785398163397448; /* 45 */\n this.s90 = 2 * this.s45;\n this.fi0 = this.lat0;\n this.e2 = this.es;\n this.e = Math.sqrt(this.e2);\n this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));\n this.uq = 1.04216856380474;\n this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);\n this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);\n this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;\n this.k1 = this.k0;\n this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));\n this.s0 = 1.37008346281555;\n this.n = Math.sin(this.s0);\n this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);\n this.ad = this.s90 - this.uq;\n}\n\n/* ellipsoid */\n/* calculate xy from lat/lon */\n/* Constants, identical to inverse transform function */\nexport function forward(p) {\n var gfi, u, deltav, s, d, eps, ro;\n var lon = p.x;\n var lat = p.y;\n var delta_lon = adjust_lon(lon - this.long0);\n /* Transformation */\n gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));\n u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);\n deltav = -delta_lon * this.alfa;\n s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));\n d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));\n eps = this.n * d;\n ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);\n p.y = ro * Math.cos(eps) / 1;\n p.x = ro * Math.sin(eps) / 1;\n\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n return (p);\n}\n\n/* calculate lat/lon from xy */\nexport function inverse(p) {\n var u, deltav, s, d, eps, ro, fi1;\n var ok;\n\n /* Transformation */\n /* revert y, x*/\n var tmp = p.x;\n p.x = p.y;\n p.y = tmp;\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n ro = Math.sqrt(p.x * p.x + p.y * p.y);\n eps = Math.atan2(p.y, p.x);\n d = eps / Math.sin(this.s0);\n s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);\n u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));\n deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));\n p.x = this.long0 - deltav / this.alfa;\n fi1 = u;\n ok = 0;\n var iter = 0;\n do {\n p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);\n if (Math.abs(fi1 - p.y) < 0.0000000001) {\n ok = 1;\n }\n fi1 = p.y;\n iter += 1;\n } while (ok === 0 && iter < 15);\n if (iter >= 15) {\n return null;\n }\n\n return (p);\n}\n\nexport var names = [\"Krovak\", \"krovak\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(e0, e1, e2, e3, phi) {\n return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));\n}","export default function(x) {\n return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n}","export default function(x) {\n return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n}","export default function(x) {\n return (0.05859375 * x * x * (1 + 0.75 * x));\n}","export default function(x) {\n return (x * x * x * (35 / 3072));\n}","export default function(a, e, sinphi) {\n var temp = e * sinphi;\n return a / Math.sqrt(1 - temp * temp);\n}","import {HALF_PI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n}\n","export default function(ml, e0, e1, e2, e3) {\n var phi;\n var dphi;\n\n phi = ml / e0;\n for (var i = 0; i < 15; i++) {\n dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //..reportError(\"IMLFN-CONV:Latitude failed to converge after 15 iterations\");\n return NaN;\n}","import mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nexport function init() {\n if (!this.sphere) {\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n }\n}\n\n/* Cassini forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var x, y;\n var lam = p.x;\n var phi = p.y;\n lam = adjust_lon(lam - this.long0);\n\n if (this.sphere) {\n x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));\n y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);\n }\n else {\n //ellipsoid\n var sinphi = Math.sin(phi);\n var cosphi = Math.cos(phi);\n var nl = gN(this.a, this.e, sinphi);\n var tl = Math.tan(phi) * Math.tan(phi);\n var al = lam * Math.cos(phi);\n var asq = al * al;\n var cl = this.es * cosphi * cosphi / (1 - this.es);\n var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\n x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));\n y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);\n\n\n }\n\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var phi, lam;\n\n if (this.sphere) {\n var dd = y + this.lat0;\n phi = Math.asin(Math.sin(dd) * Math.cos(x));\n lam = Math.atan2(Math.tan(x), Math.cos(dd));\n }\n else {\n /* ellipsoid */\n var ml1 = this.ml0 / this.a + y;\n var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);\n if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {\n p.x = this.long0;\n p.y = HALF_PI;\n if (y < 0) {\n p.y *= -1;\n }\n return p;\n }\n var nl1 = gN(this.a, this.e, Math.sin(phi1));\n\n var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);\n var tl1 = Math.pow(Math.tan(phi1), 2);\n var dl = x * this.a / nl1;\n var dsq = dl * dl;\n phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);\n lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);\n\n }\n\n p.x = adjust_lon(lam + this.long0);\n p.y = adjust_lat(phi);\n return p;\n\n}\n\nexport var names = [\"Cassini\", \"Cassini_Soldner\", \"cass\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(eccent, sinphi) {\n var con;\n if (eccent > 1.0e-7) {\n con = eccent * sinphi;\n return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));\n }\n else {\n return (2 * sinphi);\n }\n}","\nimport {HALF_PI, EPSLN, FORTPI} from '../constants/values';\n\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\n\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\nexport var S_POLE = 1;\n\nexport var N_POLE = 2;\nexport var EQUIT = 3;\nexport var OBLIQ = 4;\n\n/* Initialize the Lambert Azimuthal Equal Area projection\n ------------------------------------------------------*/\nexport function init() {\n var t = Math.abs(this.lat0);\n if (Math.abs(t - HALF_PI) < EPSLN) {\n this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;\n }\n else if (Math.abs(t) < EPSLN) {\n this.mode = this.EQUIT;\n }\n else {\n this.mode = this.OBLIQ;\n }\n if (this.es > 0) {\n var sinphi;\n\n this.qp = qsfnz(this.e, 1);\n this.mmf = 0.5 / (1 - this.es);\n this.apa = authset(this.es);\n switch (this.mode) {\n case this.N_POLE:\n this.dd = 1;\n break;\n case this.S_POLE:\n this.dd = 1;\n break;\n case this.EQUIT:\n this.rq = Math.sqrt(0.5 * this.qp);\n this.dd = 1 / this.rq;\n this.xmf = 1;\n this.ymf = 0.5 * this.qp;\n break;\n case this.OBLIQ:\n this.rq = Math.sqrt(0.5 * this.qp);\n sinphi = Math.sin(this.lat0);\n this.sinb1 = qsfnz(this.e, sinphi) / this.qp;\n this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);\n this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);\n this.ymf = (this.xmf = this.rq) / this.dd;\n this.xmf *= this.dd;\n break;\n }\n }\n else {\n if (this.mode === this.OBLIQ) {\n this.sinph0 = Math.sin(this.lat0);\n this.cosph0 = Math.cos(this.lat0);\n }\n }\n}\n\n/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;\n var lam = p.x;\n var phi = p.y;\n\n lam = adjust_lon(lam - this.long0);\n if (this.sphere) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n coslam = Math.cos(lam);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n if (y <= EPSLN) {\n return null;\n }\n y = Math.sqrt(2 / y);\n x = y * cosphi * Math.sin(lam);\n y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n coslam = -coslam;\n }\n if (Math.abs(phi + this.lat0) < EPSLN) {\n return null;\n }\n y = FORTPI - phi * 0.5;\n y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));\n x = y * Math.sin(lam);\n y *= coslam;\n }\n }\n else {\n sinb = 0;\n cosb = 0;\n b = 0;\n coslam = Math.cos(lam);\n sinlam = Math.sin(lam);\n sinphi = Math.sin(phi);\n q = qsfnz(this.e, sinphi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinb = q / this.qp;\n cosb = Math.sqrt(1 - sinb * sinb);\n }\n switch (this.mode) {\n case this.OBLIQ:\n b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;\n break;\n case this.EQUIT:\n b = 1 + cosb * coslam;\n break;\n case this.N_POLE:\n b = HALF_PI + phi;\n q = this.qp - q;\n break;\n case this.S_POLE:\n b = phi - HALF_PI;\n q = this.qp + q;\n break;\n }\n if (Math.abs(b) < EPSLN) {\n return null;\n }\n switch (this.mode) {\n case this.OBLIQ:\n case this.EQUIT:\n b = Math.sqrt(2 / b);\n if (this.mode === this.OBLIQ) {\n y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);\n }\n else {\n y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;\n }\n x = this.xmf * b * cosb * sinlam;\n break;\n case this.N_POLE:\n case this.S_POLE:\n if (q >= 0) {\n x = (b = Math.sqrt(q)) * sinlam;\n y = coslam * ((this.mode === this.S_POLE) ? b : -b);\n }\n else {\n x = y = 0;\n }\n break;\n }\n }\n\n p.x = this.a * x + this.x0;\n p.y = this.a * y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var lam, phi, cCe, sCe, q, rho, ab;\n if (this.sphere) {\n var cosz = 0,\n rh, sinz = 0;\n\n rh = Math.sqrt(x * x + y * y);\n phi = rh * 0.5;\n if (phi > 1) {\n return null;\n }\n phi = 2 * Math.asin(phi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinz = Math.sin(phi);\n cosz = Math.cos(phi);\n }\n switch (this.mode) {\n case this.EQUIT:\n phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);\n x *= sinz;\n y = cosz * rh;\n break;\n case this.OBLIQ:\n phi = (Math.abs(rh) <= EPSLN) ? this.lat0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);\n x *= sinz * this.cosph0;\n y = (cosz - Math.sin(phi) * this.sinph0) * rh;\n break;\n case this.N_POLE:\n y = -y;\n phi = HALF_PI - phi;\n break;\n case this.S_POLE:\n phi -= HALF_PI;\n break;\n }\n lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);\n }\n else {\n ab = 0;\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n x /= this.dd;\n y *= this.dd;\n rho = Math.sqrt(x * x + y * y);\n if (rho < EPSLN) {\n p.x = this.long0;\n p.y = this.lat0;\n return p;\n }\n sCe = 2 * Math.asin(0.5 * rho / this.rq);\n cCe = Math.cos(sCe);\n x *= (sCe = Math.sin(sCe));\n if (this.mode === this.OBLIQ) {\n ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;\n q = this.qp * ab;\n y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;\n }\n else {\n ab = y * sCe / rho;\n q = this.qp * ab;\n y = rho * cCe;\n }\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n y = -y;\n }\n q = (x * x + y * y);\n if (!q) {\n p.x = this.long0;\n p.y = this.lat0;\n return p;\n }\n ab = 1 - q / this.qp;\n if (this.mode === this.S_POLE) {\n ab = -ab;\n }\n }\n lam = Math.atan2(x, y);\n phi = authlat(Math.asin(ab), this.apa);\n }\n\n p.x = adjust_lon(this.long0 + lam);\n p.y = phi;\n return p;\n}\n\n/* determine latitude from authalic latitude */\nvar P00 = 0.33333333333333333333;\n\nvar P01 = 0.17222222222222222222;\nvar P02 = 0.10257936507936507936;\nvar P10 = 0.06388888888888888888;\nvar P11 = 0.06640211640211640211;\nvar P20 = 0.01641501294219154443;\n\nfunction authset(es) {\n var t;\n var APA = [];\n APA[0] = es * P00;\n t = es * es;\n APA[0] += t * P01;\n APA[1] = t * P10;\n t *= es;\n APA[0] += t * P02;\n APA[1] += t * P11;\n APA[2] = t * P20;\n return APA;\n}\n\nfunction authlat(beta, APA) {\n var t = beta + beta;\n return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));\n}\n\nexport var names = [\"Lambert Azimuthal Equal Area\", \"Lambert_Azimuthal_Equal_Area\", \"laea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n S_POLE: S_POLE,\n N_POLE: N_POLE,\n EQUIT: EQUIT,\n OBLIQ: OBLIQ\n};\n","export default function(x) {\n if (Math.abs(x) > 1) {\n x = (x > 1) ? 1 : -1;\n }\n return Math.asin(x);\n}","import msfnz from '../common/msfnz';\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e3 = Math.sqrt(this.es);\n\n this.sin_po = Math.sin(this.lat1);\n this.cos_po = Math.cos(this.lat1);\n this.t1 = this.sin_po;\n this.con = this.sin_po;\n this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs1 = qsfnz(this.e3, this.sin_po);\n\n this.sin_po = Math.sin(this.lat2);\n this.cos_po = Math.cos(this.lat2);\n this.t2 = this.sin_po;\n this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs2 = qsfnz(this.e3, this.sin_po);\n\n this.sin_po = Math.sin(this.lat0);\n this.cos_po = Math.cos(this.lat0);\n this.t3 = this.sin_po;\n this.qs0 = qsfnz(this.e3, this.sin_po);\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);\n }\n else {\n this.ns0 = this.con;\n }\n this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;\n this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;\n}\n\n/* Albers Conical Equal Area forward equations--mapping lat,long to x,y\n -------------------------------------------------------------------*/\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n this.sin_phi = Math.sin(lat);\n this.cos_phi = Math.cos(lat);\n\n var qs = qsfnz(this.e3, this.sin_phi);\n var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;\n var theta = this.ns0 * adjust_lon(lon - this.long0);\n var x = rh1 * Math.sin(theta) + this.x0;\n var y = this.rh - rh1 * Math.cos(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh1, qs, con, theta, lon, lat;\n\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n if (this.ns0 >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n con = rh1 * this.ns0 / this.a;\n if (this.sphere) {\n lat = Math.asin((this.c - con * con) / (2 * this.ns0));\n }\n else {\n qs = (this.c - con * con) / this.ns0;\n lat = this.phi1z(this.e3, qs);\n }\n\n lon = adjust_lon(theta / this.ns0 + this.long0);\n p.x = lon;\n p.y = lat;\n return p;\n}\n\n/* Function to compute phi1, the latitude for the inverse of the\n Albers Conical Equal-Area projection.\n-------------------------------------------*/\nexport function phi1z(eccent, qs) {\n var sinphi, cosphi, con, com, dphi;\n var phi = asinz(0.5 * qs);\n if (eccent < EPSLN) {\n return phi;\n }\n\n var eccnts = eccent * eccent;\n for (var i = 1; i <= 25; i++) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n con = eccent * sinphi;\n com = 1 - con * con;\n dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi = phi + dphi;\n if (Math.abs(dphi) <= 1e-7) {\n return phi;\n }\n }\n return null;\n}\n\nexport var names = [\"Albers_Conic_Equal_Area\", \"Albers\", \"aea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n phi1z: phi1z\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\n/*\n reference:\n Wolfram Mathworld \"Gnomonic Projection\"\n http://mathworld.wolfram.com/GnomonicProjection.html\n Accessed: 12th November 2009\n */\nexport function init() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.sin_p14 = Math.sin(this.lat0);\n this.cos_p14 = Math.cos(this.lat0);\n // Approximation for projecting points to the horizon (infinity)\n this.infinity_dist = 1000 * this.a;\n this.rc = 1;\n}\n\n/* Gnomonic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var sinphi, cosphi; /* sin and cos value */\n var dlon; /* delta longitude value */\n var coslon; /* cos of longitude */\n var ksp; /* scale factor */\n var g;\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n dlon = adjust_lon(lon - this.long0);\n\n sinphi = Math.sin(lat);\n cosphi = Math.cos(lat);\n\n coslon = Math.cos(dlon);\n g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n ksp = 1;\n if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;\n }\n else {\n\n // Point is in the opposing hemisphere and is unprojectable\n // We still need to return a reasonable point, so we project\n // to infinity, on a bearing\n // equivalent to the northern hemisphere equivalent\n // This is a reasonable approximation for short shapes and lines that\n // straddle the horizon.\n\n x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);\n y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh; /* Rho */\n var sinc, cosc;\n var c;\n var lon, lat;\n\n /* Inverse equations\n -----------------*/\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n\n if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {\n c = Math.atan2(rh, this.rc);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n\n lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);\n lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);\n lon = adjust_lon(this.long0 + lon);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"gnom\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport qsfnz from '../common/qsfnz';\nimport msfnz from '../common/msfnz';\nimport iqsfnz from '../common/iqsfnz';\n\n/*\n reference:\n \"Cartographic Projection Procedures for the UNIX Environment-\n A User's Manual\" by Gerald I. Evenden,\n USGS Open File Report 90-284and Release 4 Interim Reports (2003)\n*/\nexport function init() {\n //no-op\n if (!this.sphere) {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n}\n\n/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n if (this.sphere) {\n x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);\n y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);\n }\n else {\n var qs = qsfnz(this.e, Math.sin(lat));\n x = this.x0 + this.a * this.k0 * dlon;\n y = this.y0 + this.a * qs * 0.5 / this.k0;\n }\n\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));\n lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\n }\n else {\n lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);\n lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"cea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, q) {\n var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));\n if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {\n if (q < 0) {\n return (-1 * HALF_PI);\n }\n else {\n return HALF_PI;\n }\n }\n //var phi = 0.5* q/(1-eccent*eccent);\n var phi = Math.asin(0.5 * q);\n var dphi;\n var sin_phi;\n var cos_phi;\n var con;\n for (var i = 0; i < 30; i++) {\n sin_phi = Math.sin(phi);\n cos_phi = Math.cos(phi);\n con = eccent * sin_phi;\n dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //console.log(\"IQSFN-CONV:Latitude failed to converge after 30 iterations\");\n return NaN;\n}\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\n\nexport function init() {\n\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n this.lat_ts = this.lat_ts || 0;\n this.title = this.title || \"Equidistant Cylindrical (Plate Carre)\";\n\n this.rc = Math.cos(this.lat_ts);\n}\n\n// forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n var dlon = adjust_lon(lon - this.long0);\n var dlat = adjust_lat(lat - this.lat0);\n p.x = this.x0 + (this.a * dlon * this.rc);\n p.y = this.y0 + (this.a * dlat);\n return p;\n}\n\n// inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n var x = p.x;\n var y = p.y;\n\n p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));\n p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n return p;\n}\n\nexport var names = [\"Equirectangular\", \"Equidistant_Cylindrical\", \"eqc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport mlfn from '../common/mlfn';\nimport {EPSLN} from '../constants/values';\n\nimport gN from '../common/gN';\nvar MAX_ITER = 20;\n\nexport function init() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas\n}\n\n/* Polyconic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y, el;\n var dlon = adjust_lon(lon - this.long0);\n el = dlon * Math.sin(lat);\n if (this.sphere) {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.a * this.lat0;\n }\n else {\n x = this.a * Math.sin(el) / Math.tan(lat);\n y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));\n }\n }\n else {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.ml0;\n }\n else {\n var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);\n x = nl * Math.sin(el);\n y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));\n }\n\n }\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n var lon, lat, x, y, i;\n var al, bl;\n var phi, dphi;\n x = p.x - this.x0;\n y = p.y - this.y0;\n\n if (this.sphere) {\n if (Math.abs(y + this.a * this.lat0) <= EPSLN) {\n lon = adjust_lon(x / this.a + this.long0);\n lat = 0;\n }\n else {\n al = this.lat0 + y / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var tanphi;\n for (i = MAX_ITER; i; --i) {\n tanphi = Math.tan(phi);\n dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);\n phi += dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));\n }\n }\n else {\n if (Math.abs(y + this.ml0) <= EPSLN) {\n lat = 0;\n lon = adjust_lon(this.long0 + x / this.a);\n }\n else {\n\n al = (this.ml0 + y) / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var cl, mln, mlnp, ma;\n var con;\n for (i = MAX_ITER; i; --i) {\n con = this.e * Math.sin(phi);\n cl = Math.sqrt(1 - con * con) * Math.tan(phi);\n mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);\n ma = mln / this.a;\n dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);\n phi -= dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n\n //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);\n cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);\n lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Polyconic\", \"poly\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {SEC_TO_RAD} from '../constants/values';\n\n/*\n reference\n Department of Land and Survey Technical Circular 1973/32\n http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf\n OSG Technical Report 4.1\n http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf\n */\n\n/**\n * iterations: Number of iterations to refine inverse transform.\n * 0 -> km accuracy\n * 1 -> m accuracy -- suitable for most mapping applications\n * 2 -> mm accuracy\n */\nexport var iterations = 1;\n\nexport function init() {\n this.A = [];\n this.A[1] = 0.6399175073;\n this.A[2] = -0.1358797613;\n this.A[3] = 0.063294409;\n this.A[4] = -0.02526853;\n this.A[5] = 0.0117879;\n this.A[6] = -0.0055161;\n this.A[7] = 0.0026906;\n this.A[8] = -0.001333;\n this.A[9] = 0.00067;\n this.A[10] = -0.00034;\n\n this.B_re = [];\n this.B_im = [];\n this.B_re[1] = 0.7557853228;\n this.B_im[1] = 0;\n this.B_re[2] = 0.249204646;\n this.B_im[2] = 0.003371507;\n this.B_re[3] = -0.001541739;\n this.B_im[3] = 0.041058560;\n this.B_re[4] = -0.10162907;\n this.B_im[4] = 0.01727609;\n this.B_re[5] = -0.26623489;\n this.B_im[5] = -0.36249218;\n this.B_re[6] = -0.6870983;\n this.B_im[6] = -1.1651967;\n\n this.C_re = [];\n this.C_im = [];\n this.C_re[1] = 1.3231270439;\n this.C_im[1] = 0;\n this.C_re[2] = -0.577245789;\n this.C_im[2] = -0.007809598;\n this.C_re[3] = 0.508307513;\n this.C_im[3] = -0.112208952;\n this.C_re[4] = -0.15094762;\n this.C_im[4] = 0.18200602;\n this.C_re[5] = 1.01418179;\n this.C_im[5] = 1.64497696;\n this.C_re[6] = 1.9660549;\n this.C_im[6] = 2.5127645;\n\n this.D = [];\n this.D[1] = 1.5627014243;\n this.D[2] = 0.5185406398;\n this.D[3] = -0.03333098;\n this.D[4] = -0.1052906;\n this.D[5] = -0.0368594;\n this.D[6] = 0.007317;\n this.D[7] = 0.01220;\n this.D[8] = 0.00394;\n this.D[9] = -0.0013;\n}\n\n/**\n New Zealand Map Grid Forward - long/lat to x/y\n long/lat in radians\n */\nexport function forward(p) {\n var n;\n var lon = p.x;\n var lat = p.y;\n\n var delta_lat = lat - this.lat0;\n var delta_lon = lon - this.long0;\n\n // 1. Calculate d_phi and d_psi ... // and d_lambda\n // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.\n var d_phi = delta_lat / SEC_TO_RAD * 1E-5;\n var d_lambda = delta_lon;\n var d_phi_n = 1; // d_phi^0\n\n var d_psi = 0;\n for (n = 1; n <= 10; n++) {\n d_phi_n = d_phi_n * d_phi;\n d_psi = d_psi + this.A[n] * d_phi_n;\n }\n\n // 2. Calculate theta\n var th_re = d_psi;\n var th_im = d_lambda;\n\n // 3. Calculate z\n var th_n_re = 1;\n var th_n_im = 0; // theta^0\n var th_n_re1;\n var th_n_im1;\n\n var z_re = 0;\n var z_im = 0;\n for (n = 1; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;\n z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;\n }\n\n // 4. Calculate easting and northing\n p.x = (z_im * this.a) + this.x0;\n p.y = (z_re * this.a) + this.y0;\n\n return p;\n}\n\n/**\n New Zealand Map Grid Inverse - x/y to long/lat\n */\nexport function inverse(p) {\n var n;\n var x = p.x;\n var y = p.y;\n\n var delta_x = x - this.x0;\n var delta_y = y - this.y0;\n\n // 1. Calculate z\n var z_re = delta_y / this.a;\n var z_im = delta_x / this.a;\n\n // 2a. Calculate theta - first approximation gives km accuracy\n var z_n_re = 1;\n var z_n_im = 0; // z^0\n var z_n_re1;\n var z_n_im1;\n\n var th_re = 0;\n var th_im = 0;\n for (n = 1; n <= 6; n++) {\n z_n_re1 = z_n_re * z_re - z_n_im * z_im;\n z_n_im1 = z_n_im * z_re + z_n_re * z_im;\n z_n_re = z_n_re1;\n z_n_im = z_n_im1;\n th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;\n th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;\n }\n\n // 2b. Iterate to refine the accuracy of the calculation\n // 0 iterations gives km accuracy\n // 1 iteration gives m accuracy -- good enough for most mapping applications\n // 2 iterations bives mm accuracy\n for (var i = 0; i < this.iterations; i++) {\n var th_n_re = th_re;\n var th_n_im = th_im;\n var th_n_re1;\n var th_n_im1;\n\n var num_re = z_re;\n var num_im = z_im;\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n th_n_re = 1;\n th_n_im = 0;\n var den_re = this.B_re[1];\n var den_im = this.B_im[1];\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n // Complex division\n var den2 = den_re * den_re + den_im * den_im;\n th_re = (num_re * den_re + num_im * den_im) / den2;\n th_im = (num_im * den_re - num_re * den_im) / den2;\n }\n\n // 3. Calculate d_phi ... // and d_lambda\n var d_psi = th_re;\n var d_lambda = th_im;\n var d_psi_n = 1; // d_psi^0\n\n var d_phi = 0;\n for (n = 1; n <= 9; n++) {\n d_psi_n = d_psi_n * d_psi;\n d_phi = d_phi + this.D[n] * d_psi_n;\n }\n\n // 4. Calculate latitude and longitude\n // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.\n var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);\n var lon = this.long0 + d_lambda;\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"New_Zealand_Map_Grid\", \"nzmg\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\n\n/* Initialize the Miller Cylindrical projection\n -------------------------------------------*/\nexport function init() {\n //no-op\n}\n\n/* Miller Cylindrical forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x = this.x0 + this.a * dlon;\n var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Miller Cylindrical inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n\n var lon = adjust_lon(this.long0 + p.x / this.a);\n var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Miller_Cylindrical\", \"mill\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport pj_enfn from '../common/pj_enfn';\nvar MAX_ITER = 20;\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n\nexport function init() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n\n\n if (!this.sphere) {\n this.en = pj_enfn(this.es);\n }\n else {\n this.n = 1;\n this.m = 0;\n this.es = 0;\n this.C_y = Math.sqrt((this.m + 1) / this.n);\n this.C_x = this.C_y / (this.m + 1);\n }\n\n}\n\n/* Sinusoidal forward equations--mapping lat,long to x,y\n -----------------------------------------------------*/\nexport function forward(p) {\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n lon = adjust_lon(lon - this.long0);\n\n if (this.sphere) {\n if (!this.m) {\n lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\n }\n else {\n var k = this.n * Math.sin(lat);\n for (var i = MAX_ITER; i; --i) {\n var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));\n lat -= V;\n if (Math.abs(V) < EPSLN) {\n break;\n }\n }\n }\n x = this.a * this.C_x * lon * (this.m + Math.cos(lat));\n y = this.a * this.C_y * lat;\n\n }\n else {\n\n var s = Math.sin(lat);\n var c = Math.cos(lat);\n y = this.a * pj_mlfn(lat, s, c, this.en);\n x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);\n }\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var lat, temp, lon, s;\n\n p.x -= this.x0;\n lon = p.x / this.a;\n p.y -= this.y0;\n lat = p.y / this.a;\n\n if (this.sphere) {\n lat /= this.C_y;\n lon = lon / (this.C_x * (this.m + Math.cos(lat)));\n if (this.m) {\n lat = asinz((this.m * lat + Math.sin(lat)) / this.n);\n }\n else if (this.n !== 1) {\n lat = asinz(Math.sin(lat) / this.n);\n }\n lon = adjust_lon(lon + this.long0);\n lat = adjust_lat(lat);\n }\n else {\n lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);\n s = Math.abs(lat);\n if (s < HALF_PI) {\n s = Math.sin(lat);\n temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));\n //temp = this.long0 + p.x / (this.a * Math.cos(lat));\n lon = adjust_lon(temp);\n }\n else if ((s - EPSLN) < HALF_PI) {\n lon = this.long0;\n }\n }\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Sinusoidal\", \"sinu\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nexport function init() {}\nimport {EPSLN} from '../constants/values';\n/* Mollweide forward equations--mapping lat,long to x,y\n ----------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var theta = lat;\n var con = Math.PI * Math.sin(lat);\n\n /* Iterate using the Newton-Raphson method to find theta\n -----------------------------------------------------*/\n while (true) {\n var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));\n theta += delta_theta;\n if (Math.abs(delta_theta) < EPSLN) {\n break;\n }\n }\n theta /= 2;\n\n /* If the latitude is 90 deg, force the x coordinate to be \"0 + false easting\"\n this is done here because of precision problems with \"cos(theta)\"\n --------------------------------------------------------------------------*/\n if (Math.PI / 2 - Math.abs(lat) < EPSLN) {\n delta_lon = 0;\n }\n var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;\n var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var theta;\n var arg;\n\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n arg = p.y / (1.4142135623731 * this.a);\n\n /* Because of division by zero problems, 'arg' can not be 1. Therefore\n a number very close to one is used instead.\n -------------------------------------------------------------------*/\n if (Math.abs(arg) > 0.999999999999) {\n arg = 0.999999999999;\n }\n theta = Math.asin(arg);\n var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));\n if (lon < (-Math.PI)) {\n lon = -Math.PI;\n }\n if (lon > Math.PI) {\n lon = Math.PI;\n }\n arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;\n if (Math.abs(arg) > 1) {\n arg = 1;\n }\n var lat = Math.asin(arg);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Mollweide\", \"moll\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport msfnz from '../common/msfnz';\nimport mlfn from '../common/mlfn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.lat2 = this.lat2 || this.lat1;\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n\n this.sinphi = Math.sin(this.lat1);\n this.cosphi = Math.cos(this.lat1);\n\n this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);\n\n if (Math.abs(this.lat1 - this.lat2) < EPSLN) {\n this.ns = this.sinphi;\n }\n else {\n this.sinphi = Math.sin(this.lat2);\n this.cosphi = Math.cos(this.lat2);\n this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);\n this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);\n }\n this.g = this.ml1 + this.ms1 / this.ns;\n this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n this.rh = this.a * (this.g - this.ml0);\n}\n\n/* Equidistant Conic forward equations--mapping lat,long to x,y\n -----------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var rh1;\n\n /* Forward equations\n -----------------*/\n if (this.sphere) {\n rh1 = this.a * (this.g - lat);\n }\n else {\n var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n rh1 = this.a * (this.g - ml);\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n var x = this.x0 + rh1 * Math.sin(theta);\n var y = this.y0 + this.rh - rh1 * Math.cos(theta);\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n var con, rh1, lat, lon;\n if (this.ns >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + theta / this.ns);\n lat = adjust_lat(this.g - rh1 / this.a);\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n var ml = this.g - rh1 / this.a;\n lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);\n lon = adjust_lon(this.long0 + theta / this.ns);\n p.x = lon;\n p.y = lat;\n return p;\n }\n\n}\n\nexport var names = [\"Equidistant_Conic\", \"eqdc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n/* Initialize the Van Der Grinten projection\n ----------------------------------------*/\nexport function init() {\n //this.R = 6370997; //Radius of earth\n this.R = this.a;\n}\n\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x, y;\n\n if (Math.abs(lat) <= EPSLN) {\n x = this.x0 + this.R * dlon;\n y = this.y0;\n }\n var theta = asinz(2 * Math.abs(lat / Math.PI));\n if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {\n x = this.x0;\n if (lat >= 0) {\n y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);\n }\n else {\n y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);\n }\n // return(OK);\n }\n var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));\n var asq = al * al;\n var sinth = Math.sin(theta);\n var costh = Math.cos(theta);\n\n var g = costh / (sinth + costh - 1);\n var gsq = g * g;\n var m = g * (2 / sinth - 1);\n var msq = m * m;\n var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);\n if (dlon < 0) {\n con = -con;\n }\n x = this.x0 + con;\n //con = Math.abs(con / (Math.PI * this.R));\n var q = asq + g;\n con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);\n if (lat >= 0) {\n //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 + con;\n }\n else {\n //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 - con;\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Van Der Grinten inverse equations--mapping x,y to lat/long\n ---------------------------------------------------------*/\nexport function inverse(p) {\n var lon, lat;\n var xx, yy, xys, c1, c2, c3;\n var a1;\n var m1;\n var con;\n var th1;\n var d;\n\n /* inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n con = Math.PI * this.R;\n xx = p.x / con;\n yy = p.y / con;\n xys = xx * xx + yy * yy;\n c1 = -Math.abs(yy) * (1 + xys);\n c2 = c1 - 2 * yy * yy + xx * xx;\n c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;\n d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;\n a1 = (c1 - c2 * c2 / 3 / c3) / c3;\n m1 = 2 * Math.sqrt(-a1 / 3);\n con = ((3 * d) / a1) / m1;\n if (Math.abs(con) > 1) {\n if (con >= 0) {\n con = 1;\n }\n else {\n con = -1;\n }\n }\n th1 = Math.acos(con) / 3;\n if (p.y >= 0) {\n lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n else {\n lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n\n if (Math.abs(xx) < EPSLN) {\n lon = this.long0;\n }\n else {\n lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Van_der_Grinten_I\", \"VanDerGrinten\", \"vandg\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport asinz from '../common/asinz';\nimport imlfn from '../common/imlfn';\n\n\n\nexport function init() {\n this.sin_p12 = Math.sin(this.lat0);\n this.cos_p12 = Math.cos(this.lat0);\n}\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var sinphi = Math.sin(p.y);\n var cosphi = Math.cos(p.y);\n var dlon = adjust_lon(lon - this.long0);\n var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;\n if (this.sphere) {\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);\n p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);\n p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);\n return p;\n }\n else {\n //default case\n cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);\n c = Math.acos(cos_c);\n kp = c ? c / Math.sin(c) : 1;\n p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);\n p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));\n return p;\n }\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);\n p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);\n p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);\n return p;\n }\n else {\n //Default case\n tanphi = sinphi / cosphi;\n Nl1 = gN(this.a, this.e, this.sin_p12);\n Nl = gN(this.a, this.e, sinphi);\n psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));\n Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));\n if (Az === 0) {\n s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {\n s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else {\n s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));\n }\n G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);\n H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);\n GH = G * H;\n Hs = H * H;\n s2 = s * s;\n s3 = s2 * s;\n s4 = s3 * s;\n s5 = s4 * s;\n c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);\n p.x = this.x0 + c * Math.sin(Az);\n p.y = this.y0 + c * Math.cos(Az);\n return p;\n }\n }\n\n\n}\n\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F, sinpsi;\n if (this.sphere) {\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (rh > (2 * HALF_PI * this.a)) {\n return;\n }\n z = rh / this.a;\n\n sinz = Math.sin(z);\n cosz = Math.cos(z);\n\n lon = this.long0;\n if (Math.abs(rh) <= EPSLN) {\n lat = this.lat0;\n }\n else {\n lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);\n con = Math.abs(this.lat0) - HALF_PI;\n if (Math.abs(con) <= EPSLN) {\n if (this.lat0 >= 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n }\n else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n }\n }\n else {\n /*con = cosz - this.sin_p12 * Math.sin(lat);\n if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {\n //no-op, just keep the lon value as is\n } else {\n var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));\n }*/\n lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = Mlp - rh;\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = rh - Mlp;\n\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n //default case\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n Az = Math.atan2(p.x, p.y);\n N1 = gN(this.a, this.e, this.sin_p12);\n cosAz = Math.cos(Az);\n tmp = this.e * this.cos_p12 * cosAz;\n A = -tmp * tmp / (1 - this.es);\n B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);\n D = rh / N1;\n Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;\n F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;\n psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);\n lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));\n sinpsi = Math.sin(psi);\n lat = Math.atan2((sinpsi - this.es * F * this.sin_p12) * Math.tan(psi), sinpsi * (1 - this.es));\n p.x = lon;\n p.y = lat;\n return p;\n }\n }\n\n}\n\nexport var names = [\"Azimuthal_Equidistant\", \"aeqd\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nexport function init() {\n //double temp; /* temporary variable */\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.sin_p14 = Math.sin(this.lat0);\n this.cos_p14 = Math.cos(this.lat0);\n}\n\n/* Orthographic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var sinphi, cosphi; /* sin and cos value */\n var dlon; /* delta longitude value */\n var coslon; /* cos of longitude */\n var ksp; /* scale factor */\n var g, x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n dlon = adjust_lon(lon - this.long0);\n\n sinphi = Math.sin(lat);\n cosphi = Math.cos(lat);\n\n coslon = Math.cos(dlon);\n g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n ksp = 1;\n if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n x = this.a * ksp * cosphi * Math.sin(dlon);\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh; /* height above ellipsoid */\n var z; /* angle */\n var sinz, cosz; /* sin of z and cos of z */\n var con;\n var lon, lat;\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n z = asinz(rh / this.a);\n\n sinz = Math.sin(z);\n cosz = Math.cos(z);\n\n lon = this.long0;\n if (Math.abs(rh) <= EPSLN) {\n lat = this.lat0;\n p.x = lon;\n p.y = lat;\n return p;\n }\n lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);\n con = Math.abs(this.lat0) - HALF_PI;\n if (Math.abs(con) <= EPSLN) {\n if (this.lat0 >= 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n }\n else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n }\n p.x = lon;\n p.y = lat;\n return p;\n }\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"ortho\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","// QSC projection rewritten from the original PROJ4\n// https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c\n\nimport {EPSLN, TWO_PI, SPI, HALF_PI, FORTPI} from '../constants/values';\n\n/* constants */\nvar FACE_ENUM = {\n FRONT: 1,\n RIGHT: 2,\n BACK: 3,\n LEFT: 4,\n TOP: 5,\n BOTTOM: 6\n};\n\nvar AREA_ENUM = {\n AREA_0: 1,\n AREA_1: 2,\n AREA_2: 3,\n AREA_3: 4\n};\n\nexport function init() {\n\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n this.lat_ts = this.lat_ts || 0;\n this.title = this.title || \"Quadrilateralized Spherical Cube\";\n\n /* Determine the cube face from the center of projection. */\n if (this.lat0 >= HALF_PI - FORTPI / 2.0) {\n this.face = FACE_ENUM.TOP;\n } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {\n this.face = FACE_ENUM.BOTTOM;\n } else if (Math.abs(this.long0) <= FORTPI) {\n this.face = FACE_ENUM.FRONT;\n } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {\n this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;\n } else {\n this.face = FACE_ENUM.BACK;\n }\n\n /* Fill in useful values for the ellipsoid <-> sphere shift\n * described in [LK12]. */\n if (this.es !== 0) {\n this.one_minus_f = 1 - (this.a - this.b) / this.a;\n this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;\n }\n}\n\n// QSC forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n var xy = {x: 0, y: 0};\n var lat, lon;\n var theta, phi;\n var t, mu;\n /* nu; */\n var area = {value: 0};\n\n // move lon according to projection's lon\n p.x -= this.long0;\n\n /* Convert the geodetic latitude to a geocentric latitude.\n * This corresponds to the shift from the ellipsoid to the sphere\n * described in [LK12]. */\n if (this.es !== 0) {//if (P->es != 0) {\n lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));\n } else {\n lat = p.y;\n }\n\n /* Convert the input lat, lon into theta, phi as used by QSC.\n * This depends on the cube face and the area on it.\n * For the top and bottom face, we can compute theta and phi\n * directly from phi, lam. For the other faces, we must use\n * unit sphere cartesian coordinates as an intermediate step. */\n lon = p.x; //lon = lp.lam;\n if (this.face === FACE_ENUM.TOP) {\n phi = HALF_PI - lat;\n if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n theta = lon - HALF_PI;\n } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_1;\n theta = (lon > 0.0 ? lon - SPI : lon + SPI);\n } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {\n area.value = AREA_ENUM.AREA_2;\n theta = lon + HALF_PI;\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta = lon;\n }\n } else if (this.face === FACE_ENUM.BOTTOM) {\n phi = HALF_PI + lat;\n if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n theta = -lon + HALF_PI;\n } else if (lon < FORTPI && lon >= -FORTPI) {\n area.value = AREA_ENUM.AREA_1;\n theta = -lon;\n } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_2;\n theta = -lon - HALF_PI;\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);\n }\n } else {\n var q, r, s;\n var sinlat, coslat;\n var sinlon, coslon;\n\n if (this.face === FACE_ENUM.RIGHT) {\n lon = qsc_shift_lon_origin(lon, +HALF_PI);\n } else if (this.face === FACE_ENUM.BACK) {\n lon = qsc_shift_lon_origin(lon, +SPI);\n } else if (this.face === FACE_ENUM.LEFT) {\n lon = qsc_shift_lon_origin(lon, -HALF_PI);\n }\n sinlat = Math.sin(lat);\n coslat = Math.cos(lat);\n sinlon = Math.sin(lon);\n coslon = Math.cos(lon);\n q = coslat * coslon;\n r = coslat * sinlon;\n s = sinlat;\n\n if (this.face === FACE_ENUM.FRONT) {\n phi = Math.acos(q);\n theta = qsc_fwd_equat_face_theta(phi, s, r, area);\n } else if (this.face === FACE_ENUM.RIGHT) {\n phi = Math.acos(r);\n theta = qsc_fwd_equat_face_theta(phi, s, -q, area);\n } else if (this.face === FACE_ENUM.BACK) {\n phi = Math.acos(-q);\n theta = qsc_fwd_equat_face_theta(phi, s, -r, area);\n } else if (this.face === FACE_ENUM.LEFT) {\n phi = Math.acos(-r);\n theta = qsc_fwd_equat_face_theta(phi, s, q, area);\n } else {\n /* Impossible */\n phi = theta = 0;\n area.value = AREA_ENUM.AREA_0;\n }\n }\n\n /* Compute mu and nu for the area of definition.\n * For mu, see Eq. (3-21) in [OL76], but note the typos:\n * compare with Eq. (3-14). For nu, see Eq. (3-38). */\n mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));\n t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));\n\n /* Apply the result to the real area. */\n if (area.value === AREA_ENUM.AREA_1) {\n mu += HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_2) {\n mu += SPI;\n } else if (area.value === AREA_ENUM.AREA_3) {\n mu += 1.5 * SPI;\n }\n\n /* Now compute x, y from mu and nu */\n xy.x = t * Math.cos(mu);\n xy.y = t * Math.sin(mu);\n xy.x = xy.x * this.a + this.x0;\n xy.y = xy.y * this.a + this.y0;\n\n p.x = xy.x;\n p.y = xy.y;\n return p;\n}\n\n// QSC inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n var lp = {lam: 0, phi: 0};\n var mu, nu, cosmu, tannu;\n var tantheta, theta, cosphi, phi;\n var t;\n var area = {value: 0};\n\n /* de-offset */\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n /* Convert the input x, y to the mu and nu angles as used by QSC.\n * This depends on the area of the cube face. */\n nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));\n mu = Math.atan2(p.y, p.x);\n if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {\n area.value = AREA_ENUM.AREA_0;\n } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {\n area.value = AREA_ENUM.AREA_1;\n mu -= HALF_PI;\n } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {\n area.value = AREA_ENUM.AREA_2;\n mu = (mu < 0.0 ? mu + SPI : mu - SPI);\n } else {\n area.value = AREA_ENUM.AREA_3;\n mu += HALF_PI;\n }\n\n /* Compute phi and theta for the area of definition.\n * The inverse projection is not described in the original paper, but some\n * good hints can be found here (as of 2011-12-14):\n * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302\n * (search for \"Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>\") */\n t = (SPI / 12) * Math.tan(mu);\n tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));\n theta = Math.atan(tantheta);\n cosmu = Math.cos(mu);\n tannu = Math.tan(nu);\n cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));\n if (cosphi < -1) {\n cosphi = -1;\n } else if (cosphi > +1) {\n cosphi = +1;\n }\n\n /* Apply the result to the real area on the cube face.\n * For the top and bottom face, we can compute phi and lam directly.\n * For the other faces, we must use unit sphere cartesian coordinates\n * as an intermediate step. */\n if (this.face === FACE_ENUM.TOP) {\n phi = Math.acos(cosphi);\n lp.phi = HALF_PI - phi;\n if (area.value === AREA_ENUM.AREA_0) {\n lp.lam = theta + HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_1) {\n lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);\n } else if (area.value === AREA_ENUM.AREA_2) {\n lp.lam = theta - HALF_PI;\n } else /* area.value == AREA_ENUM.AREA_3 */ {\n lp.lam = theta;\n }\n } else if (this.face === FACE_ENUM.BOTTOM) {\n phi = Math.acos(cosphi);\n lp.phi = phi - HALF_PI;\n if (area.value === AREA_ENUM.AREA_0) {\n lp.lam = -theta + HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_1) {\n lp.lam = -theta;\n } else if (area.value === AREA_ENUM.AREA_2) {\n lp.lam = -theta - HALF_PI;\n } else /* area.value == AREA_ENUM.AREA_3 */ {\n lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);\n }\n } else {\n /* Compute phi and lam via cartesian unit sphere coordinates. */\n var q, r, s;\n q = cosphi;\n t = q * q;\n if (t >= 1) {\n s = 0;\n } else {\n s = Math.sqrt(1 - t) * Math.sin(theta);\n }\n t += s * s;\n if (t >= 1) {\n r = 0;\n } else {\n r = Math.sqrt(1 - t);\n }\n /* Rotate q,r,s into the correct area. */\n if (area.value === AREA_ENUM.AREA_1) {\n t = r;\n r = -s;\n s = t;\n } else if (area.value === AREA_ENUM.AREA_2) {\n r = -r;\n s = -s;\n } else if (area.value === AREA_ENUM.AREA_3) {\n t = r;\n r = s;\n s = -t;\n }\n /* Rotate q,r,s into the correct cube face. */\n if (this.face === FACE_ENUM.RIGHT) {\n t = q;\n q = -r;\n r = t;\n } else if (this.face === FACE_ENUM.BACK) {\n q = -q;\n r = -r;\n } else if (this.face === FACE_ENUM.LEFT) {\n t = q;\n q = r;\n r = -t;\n }\n /* Now compute phi and lam from the unit sphere coordinates. */\n lp.phi = Math.acos(-s) - HALF_PI;\n lp.lam = Math.atan2(r, q);\n if (this.face === FACE_ENUM.RIGHT) {\n lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);\n } else if (this.face === FACE_ENUM.BACK) {\n lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);\n } else if (this.face === FACE_ENUM.LEFT) {\n lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);\n }\n }\n\n /* Apply the shift from the sphere to the ellipsoid as described\n * in [LK12]. */\n if (this.es !== 0) {\n var invert_sign;\n var tanphi, xa;\n invert_sign = (lp.phi < 0 ? 1 : 0);\n tanphi = Math.tan(lp.phi);\n xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);\n lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));\n if (invert_sign) {\n lp.phi = -lp.phi;\n }\n }\n\n lp.lam += this.long0;\n p.x = lp.lam;\n p.y = lp.phi;\n return p;\n}\n\n/* Helper function for forward projection: compute the theta angle\n * and determine the area number. */\nfunction qsc_fwd_equat_face_theta(phi, y, x, area) {\n var theta;\n if (phi < EPSLN) {\n area.value = AREA_ENUM.AREA_0;\n theta = 0.0;\n } else {\n theta = Math.atan2(y, x);\n if (Math.abs(theta) <= FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_1;\n theta -= HALF_PI;\n } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_2;\n theta = (theta >= 0.0 ? theta - SPI : theta + SPI);\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta += HALF_PI;\n }\n }\n return theta;\n}\n\n/* Helper function: shift the longitude. */\nfunction qsc_shift_lon_origin(lon, offset) {\n var slon = lon + offset;\n if (slon < -SPI) {\n slon += TWO_PI;\n } else if (slon > +SPI) {\n slon -= TWO_PI;\n }\n return slon;\n}\n\nexport var names = [\"Quadrilateralized Spherical Cube\", \"Quadrilateralized_Spherical_Cube\", \"qsc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n\n","// Robinson projection\n// Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c\n// Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039\n\nimport {HALF_PI, D2R, R2D, EPSLN} from '../constants/values';\nimport adjust_lon from '../common/adjust_lon';\n\nvar COEFS_X = [\n [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],\n [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],\n [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],\n [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],\n [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],\n [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],\n [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],\n [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],\n [0.9216, -0.00467746, -0.00010457, 4.81243e-06],\n [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],\n [0.8679, -0.00609363, -0.000113898, 3.32484e-06],\n [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],\n [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],\n [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],\n [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],\n [0.6732, -0.00986209, -0.000199569, 1.91974e-05],\n [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],\n [0.5722, -0.00906601, 0.000182, 6.24051e-06],\n [0.5322, -0.00677797, 0.000275608, 6.24051e-06]\n];\n\nvar COEFS_Y = [\n [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],\n [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],\n [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],\n [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],\n [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],\n [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],\n [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],\n [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],\n [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],\n [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],\n [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],\n [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],\n [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],\n [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],\n [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],\n [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],\n [0.9394, 0.00840947, -0.000192841, -4.2106e-06],\n [0.9761, 0.00616527, -0.000256, -4.2106e-06],\n [1.0000, 0.00328947, -0.000319159, -4.2106e-06]\n];\n\nvar FXC = 0.8487;\nvar FYC = 1.3523;\nvar C1 = R2D/5; // rad to 5-degree interval\nvar RC1 = 1/C1;\nvar NODES = 18;\n\nvar poly3_val = function(coefs, x) {\n return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));\n};\n\nvar poly3_der = function(coefs, x) {\n return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);\n};\n\nfunction newton_rapshon(f_df, start, max_err, iters) {\n var x = start;\n for (; iters; --iters) {\n var upd = f_df(x);\n x -= upd;\n if (Math.abs(upd) < max_err) {\n break;\n }\n }\n return x;\n}\n\nexport function init() {\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.long0 = this.long0 || 0;\n this.es = 0;\n this.title = this.title || \"Robinson\";\n}\n\nexport function forward(ll) {\n var lon = adjust_lon(ll.x - this.long0);\n\n var dphi = Math.abs(ll.y);\n var i = Math.floor(dphi * C1);\n if (i < 0) {\n i = 0;\n } else if (i >= NODES) {\n i = NODES - 1;\n }\n dphi = R2D * (dphi - RC1 * i);\n var xy = {\n x: poly3_val(COEFS_X[i], dphi) * lon,\n y: poly3_val(COEFS_Y[i], dphi)\n };\n if (ll.y < 0) {\n xy.y = -xy.y;\n }\n\n xy.x = xy.x * this.a * FXC + this.x0;\n xy.y = xy.y * this.a * FYC + this.y0;\n return xy;\n}\n\nexport function inverse(xy) {\n var ll = {\n x: (xy.x - this.x0) / (this.a * FXC),\n y: Math.abs(xy.y - this.y0) / (this.a * FYC)\n };\n\n if (ll.y >= 1) { // pathologic case\n ll.x /= COEFS_X[NODES][0];\n ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;\n } else {\n // find table interval\n var i = Math.floor(ll.y * NODES);\n if (i < 0) {\n i = 0;\n } else if (i >= NODES) {\n i = NODES - 1;\n }\n for (;;) {\n if (COEFS_Y[i][0] > ll.y) {\n --i;\n } else if (COEFS_Y[i+1][0] <= ll.y) {\n ++i;\n } else {\n break;\n }\n }\n // linear interpolation in 5 degree interval\n var coefs = COEFS_Y[i];\n var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]);\n // find t so that poly3_val(coefs, t) = ll.y\n t = newton_rapshon(function(x) {\n return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);\n }, t, EPSLN, 100);\n\n ll.x /= poly3_val(COEFS_X[i], t);\n ll.y = (5 * i + t) * D2R;\n if (xy.y < 0) {\n ll.y = -ll.y;\n }\n }\n\n ll.x = adjust_lon(ll.x + this.long0);\n return ll;\n}\n\nexport var names = [\"Robinson\", \"robin\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {\n geodeticToGeocentric,\n geocentricToGeodetic\n} from '../datumUtils';\n\nexport function init() {\n this.name = 'geocent';\n\n}\n\nexport function forward(p) {\n var point = geodeticToGeocentric(p, this.es, this.a);\n return point;\n}\n\nexport function inverse(p) {\n var point = geocentricToGeodetic(p, this.es, this.a, this.b);\n return point;\n}\n\nexport var names = [\"Geocentric\", 'geocentric', \"geocent\", \"Geocent\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};","\nvar mode = {\n N_POLE: 0,\n S_POLE: 1,\n EQUIT: 2,\n OBLIQ: 3\n};\n\nimport { D2R, HALF_PI, EPSLN } from \"../constants/values\";\nimport hypot from \"../common/hypot\";\n\nvar params = {\n h: { def: 100000, num: true }, // default is Karman line, no default in PROJ.7\n azi: { def: 0, num: true, degrees: true }, // default is North\n tilt: { def: 0, num: true, degrees: true }, // default is Nadir\n long0: { def: 0, num: true }, // default is Greenwich, conversion to rad is automatic\n lat0: { def: 0, num: true } // default is Equator, conversion to rad is automatic\n};\n\nexport function init() {\n Object.keys(params).forEach(function (p) {\n if (typeof this[p] === \"undefined\") {\n this[p] = params[p].def;\n } else if (params[p].num && isNaN(this[p])) {\n throw new Error(\"Invalid parameter value, must be numeric \" + p + \" = \" + this[p]);\n } else if (params[p].num) {\n this[p] = parseFloat(this[p]);\n }\n if (params[p].degrees) {\n this[p] = this[p] * D2R;\n }\n }.bind(this));\n\n if (Math.abs((Math.abs(this.lat0) - HALF_PI)) < EPSLN) {\n this.mode = this.lat0 < 0 ? mode.S_POLE : mode.N_POLE;\n } else if (Math.abs(this.lat0) < EPSLN) {\n this.mode = mode.EQUIT;\n } else {\n this.mode = mode.OBLIQ;\n this.sinph0 = Math.sin(this.lat0);\n this.cosph0 = Math.cos(this.lat0);\n }\n\n this.pn1 = this.h / this.a; // Normalize relative to the Earth's radius\n\n if (this.pn1 <= 0 || this.pn1 > 1e10) {\n throw new Error(\"Invalid height\");\n }\n \n this.p = 1 + this.pn1;\n this.rp = 1 / this.p;\n this.h1 = 1 / this.pn1;\n this.pfact = (this.p + 1) * this.h1;\n this.es = 0;\n\n var omega = this.tilt;\n var gamma = this.azi;\n this.cg = Math.cos(gamma);\n this.sg = Math.sin(gamma);\n this.cw = Math.cos(omega);\n this.sw = Math.sin(omega);\n}\n\nexport function forward(p) {\n p.x -= this.long0;\n var sinphi = Math.sin(p.y);\n var cosphi = Math.cos(p.y);\n var coslam = Math.cos(p.x);\n var x, y;\n switch (this.mode) {\n case mode.OBLIQ:\n y = this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n break;\n case mode.EQUIT:\n y = cosphi * coslam;\n break;\n case mode.S_POLE:\n y = -sinphi;\n break;\n case mode.N_POLE:\n y = sinphi;\n break;\n }\n y = this.pn1 / (this.p - y);\n x = y * cosphi * Math.sin(p.x);\n\n switch (this.mode) {\n case mode.OBLIQ:\n y *= this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n break;\n case mode.EQUIT:\n y *= sinphi;\n break;\n case mode.N_POLE:\n y *= -(cosphi * coslam);\n break;\n case mode.S_POLE:\n y *= cosphi * coslam;\n break;\n }\n\n // Tilt \n var yt, ba;\n yt = y * this.cg + x * this.sg;\n ba = 1 / (yt * this.sw * this.h1 + this.cw);\n x = (x * this.cg - y * this.sg) * this.cw * ba;\n y = yt * ba;\n\n p.x = x * this.a;\n p.y = y * this.a;\n return p;\n}\n\nexport function inverse(p) {\n p.x /= this.a;\n p.y /= this.a;\n var r = { x: p.x, y: p.y };\n\n // Un-Tilt\n var bm, bq, yt;\n yt = 1 / (this.pn1 - p.y * this.sw);\n bm = this.pn1 * p.x * yt;\n bq = this.pn1 * p.y * this.cw * yt;\n p.x = bm * this.cg + bq * this.sg;\n p.y = bq * this.cg - bm * this.sg;\n\n var rh = hypot(p.x, p.y);\n if (Math.abs(rh) < EPSLN) {\n r.x = 0;\n r.y = p.y;\n } else {\n var cosz, sinz;\n sinz = 1 - rh * rh * this.pfact;\n sinz = (this.p - Math.sqrt(sinz)) / (this.pn1 / rh + rh / this.pn1);\n cosz = Math.sqrt(1 - sinz * sinz);\n switch (this.mode) {\n case mode.OBLIQ:\n r.y = Math.asin(cosz * this.sinph0 + p.y * sinz * this.cosph0 / rh);\n p.y = (cosz - this.sinph0 * Math.sin(r.y)) * rh;\n p.x *= sinz * this.cosph0;\n break;\n case mode.EQUIT:\n r.y = Math.asin(p.y * sinz / rh);\n p.y = cosz * rh;\n p.x *= sinz;\n break;\n case mode.N_POLE:\n r.y = Math.asin(cosz);\n p.y = -p.y;\n break;\n case mode.S_POLE:\n r.y = -Math.asin(cosz);\n break;\n }\n r.x = Math.atan2(p.x, p.y);\n }\n\n p.x = r.x + this.long0;\n p.y = r.y;\n return p;\n}\n\nexport var names = [\"Tilted_Perspective\", \"tpers\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import hypot from '../common/hypot';\n\nexport function init() {\n this.flip_axis = (this.sweep === 'x' ? 1 : 0);\n this.h = Number(this.h);\n this.radius_g_1 = this.h / this.a;\n\n if (this.radius_g_1 <= 0 || this.radius_g_1 > 1e10) {\n throw new Error();\n }\n\n this.radius_g = 1.0 + this.radius_g_1;\n this.C = this.radius_g * this.radius_g - 1.0;\n\n if (this.es !== 0.0) {\n var one_es = 1.0 - this.es;\n var rone_es = 1 / one_es;\n\n this.radius_p = Math.sqrt(one_es);\n this.radius_p2 = one_es;\n this.radius_p_inv2 = rone_es;\n\n this.shape = 'ellipse'; // Use as a condition in the forward and inverse functions.\n } else {\n this.radius_p = 1.0;\n this.radius_p2 = 1.0;\n this.radius_p_inv2 = 1.0;\n\n this.shape = 'sphere'; // Use as a condition in the forward and inverse functions.\n }\n\n if (!this.title) {\n this.title = \"Geostationary Satellite View\";\n }\n}\n\nfunction forward(p) {\n var lon = p.x;\n var lat = p.y;\n var tmp, v_x, v_y, v_z;\n lon = lon - this.long0;\n\n if (this.shape === 'ellipse') {\n lat = Math.atan(this.radius_p2 * Math.tan(lat));\n var r = this.radius_p / hypot(this.radius_p * Math.cos(lat), Math.sin(lat));\n\n v_x = r * Math.cos(lon) * Math.cos(lat);\n v_y = r * Math.sin(lon) * Math.cos(lat);\n v_z = r * Math.sin(lat);\n\n if (((this.radius_g - v_x) * v_x - v_y * v_y - v_z * v_z * this.radius_p_inv2) < 0.0) {\n p.x = Number.NaN;\n p.y = Number.NaN;\n return p;\n }\n\n tmp = this.radius_g - v_x;\n if (this.flip_axis) {\n p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp));\n p.y = this.radius_g_1 * Math.atan(v_z / tmp);\n } else {\n p.x = this.radius_g_1 * Math.atan(v_y / tmp);\n p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp));\n }\n } else if (this.shape === 'sphere') {\n tmp = Math.cos(lat);\n v_x = Math.cos(lon) * tmp;\n v_y = Math.sin(lon) * tmp;\n v_z = Math.sin(lat);\n tmp = this.radius_g - v_x;\n\n if (this.flip_axis) {\n p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp));\n p.y = this.radius_g_1 * Math.atan(v_z / tmp);\n } else {\n p.x = this.radius_g_1 * Math.atan(v_y / tmp);\n p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp));\n }\n }\n p.x = p.x * this.a;\n p.y = p.y * this.a;\n return p;\n}\n\nfunction inverse(p) {\n var v_x = -1.0;\n var v_y = 0.0;\n var v_z = 0.0;\n var a, b, det, k;\n\n p.x = p.x / this.a;\n p.y = p.y / this.a;\n\n if (this.shape === 'ellipse') {\n if (this.flip_axis) {\n v_z = Math.tan(p.y / this.radius_g_1);\n v_y = Math.tan(p.x / this.radius_g_1) * hypot(1.0, v_z);\n } else {\n v_y = Math.tan(p.x / this.radius_g_1);\n v_z = Math.tan(p.y / this.radius_g_1) * hypot(1.0, v_y);\n }\n\n var v_zp = v_z / this.radius_p;\n a = v_y * v_y + v_zp * v_zp + v_x * v_x;\n b = 2 * this.radius_g * v_x;\n det = (b * b) - 4 * a * this.C;\n\n if (det < 0.0) {\n p.x = Number.NaN;\n p.y = Number.NaN;\n return p;\n }\n\n k = (-b - Math.sqrt(det)) / (2.0 * a);\n v_x = this.radius_g + k * v_x;\n v_y *= k;\n v_z *= k;\n\n p.x = Math.atan2(v_y, v_x);\n p.y = Math.atan(v_z * Math.cos(p.x) / v_x);\n p.y = Math.atan(this.radius_p_inv2 * Math.tan(p.y));\n } else if (this.shape === 'sphere') {\n if (this.flip_axis) {\n v_z = Math.tan(p.y / this.radius_g_1);\n v_y = Math.tan(p.x / this.radius_g_1) * Math.sqrt(1.0 + v_z * v_z);\n } else {\n v_y = Math.tan(p.x / this.radius_g_1);\n v_z = Math.tan(p.y / this.radius_g_1) * Math.sqrt(1.0 + v_y * v_y);\n }\n\n a = v_y * v_y + v_z * v_z + v_x * v_x;\n b = 2 * this.radius_g * v_x;\n det = (b * b) - 4 * a * this.C;\n if (det < 0.0) {\n p.x = Number.NaN;\n p.y = Number.NaN;\n return p;\n }\n\n k = (-b - Math.sqrt(det)) / (2.0 * a);\n v_x = this.radius_g + k * v_x;\n v_y *= k;\n v_z *= k;\n\n p.x = Math.atan2(v_y, v_x);\n p.y = Math.atan(v_z * Math.cos(p.x) / v_x);\n }\n p.x = p.x + this.long0;\n return p;\n}\n\nexport var names = [\"Geostationary Satellite View\", \"Geostationary_Satellite\", \"geos\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n};\n\n","/**\n * Copyright 2018 Bernie Jenny, Monash University, Melbourne, Australia.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Equal Earth is a projection inspired by the Robinson projection, but unlike\n * the Robinson projection retains the relative size of areas. The projection\n * was designed in 2018 by Bojan Savric, Tom Patterson and Bernhard Jenny.\n *\n * Publication:\n * Bojan Savric, Tom Patterson & Bernhard Jenny (2018). The Equal Earth map\n * projection, International Journal of Geographical Information Science,\n * DOI: 10.1080/13658816.2018.1504949\n *\n * Code released August 2018\n * Ported to JavaScript and adapted for mapshaper-proj by Matthew Bloch August 2018\n * Modified for proj4js by Andreas Hocevar by Andreas Hocevar March 2024\n */\n\nimport adjust_lon from \"../common/adjust_lon\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = Math.sqrt(3) / 2.0;\n\nexport function init() {\n this.es = 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n}\n\nexport function forward(p) {\n var lam = adjust_lon(p.x - this.long0);\n var phi = p.y;\n var paramLat = Math.asin(M * Math.sin(phi)),\n paramLatSq = paramLat * paramLat,\n paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n p.x = lam * Math.cos(paramLat) /\n (M * (A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq)));\n p.y = paramLat * (A1 + A2 * paramLatSq + paramLatPow6 * (A3 + A4 * paramLatSq));\n\n p.x = this.a * p.x + this.x0;\n p.y = this.a * p.y + this.y0;\n return p;\n}\n\nexport function inverse(p) {\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n var EPS = 1e-9,\n NITER = 12,\n paramLat = p.y,\n paramLatSq, paramLatPow6, fy, fpy, dlat, i;\n\n for (i = 0; i < NITER; ++i) {\n paramLatSq = paramLat * paramLat;\n paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n fy = paramLat * (A1 + A2 * paramLatSq + paramLatPow6 * (A3 + A4 * paramLatSq)) - p.y;\n fpy = A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq);\n paramLat -= dlat = fy / fpy;\n if (Math.abs(dlat) < EPS) {\n break;\n }\n }\n paramLatSq = paramLat * paramLat;\n paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n p.x = M * p.x * (A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq)) /\n Math.cos(paramLat);\n p.y = Math.asin(Math.sin(paramLat) / M);\n\n p.x = adjust_lon(p.x + this.long0);\n return p;\n}\n\nexport var names = [\"eqearth\", \"Equal Earth\", \"Equal_Earth\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};","import adjust_lat from \"../common/adjust_lat\";\nimport adjust_lon from \"../common/adjust_lon\";\nimport hypot from \"../common/hypot\";\nimport pj_enfn from \"../common/pj_enfn\";\nimport pj_inv_mlfn from \"../common/pj_inv_mlfn\";\nimport pj_mlfn from \"../common/pj_mlfn\";\nimport { HALF_PI } from \"../constants/values\";\n\nvar EPS10 = 1e-10;\n\nexport function init() {\n var c;\n\n this.phi1 = this.lat1;\n if (Math.abs(this.phi1) < EPS10) {\n throw new Error();\n }\n if (this.es) {\n this.en = pj_enfn(this.es);\n this.m1 = pj_mlfn(this.phi1, this.am1 = Math.sin(this.phi1),\n c = Math.cos(this.phi1), this.en);\n this.am1 = c / (Math.sqrt(1 - this.es * this.am1 * this.am1) * this.am1);\n this.inverse = e_inv;\n this.forward = e_fwd;\n } else {\n if (Math.abs(this.phi1) + EPS10 >= HALF_PI) {\n this.cphi1 = 0;\n }\n else {\n this.cphi1 = 1 / Math.tan(this.phi1);\n }\n this.inverse = s_inv;\n this.forward = s_fwd;\n }\n}\n\nfunction e_fwd(p) {\n var lam = adjust_lon(p.x - (this.long0 || 0));\n var phi = p.y;\n var rh, E, c;\n rh = this.am1 + this.m1 - pj_mlfn(phi, E = Math.sin(phi), c = Math.cos(phi), this.en);\n E = c * lam / (rh * Math.sqrt(1 - this.es * E * E));\n p.x = rh * Math.sin(E);\n p.y = this.am1 - rh * Math.cos(E);\n\n p.x = this.a * p.x + (this.x0 || 0);\n p.y = this.a * p.y + (this.y0 || 0);\n return p;\n}\n\nfunction e_inv(p) {\n p.x = (p.x - (this.x0 || 0)) / this.a;\n p.y = (p.y - (this.y0 || 0)) / this.a;\n\n var s, rh, lam, phi;\n rh = hypot(p.x, p.y = this.am1 - p.y);\n phi = pj_inv_mlfn(this.am1 + this.m1 - rh, this.es, this.en);\n if ((s = Math.abs(phi)) < HALF_PI) {\n s = Math.sin(phi);\n lam = rh * Math.atan2(p.x, p.y) * Math.sqrt(1 - this.es * s * s) / Math.cos(phi);\n } else if (Math.abs(s - HALF_PI) <= EPS10) {\n lam = 0;\n }\n else {\n throw new Error();\n }\n p.x = adjust_lon(lam + (this.long0 || 0));\n p.y = adjust_lat(phi);\n return p;\n}\n\nfunction s_fwd(p) {\n var lam = adjust_lon(p.x - (this.long0 || 0));\n var phi = p.y;\n var E, rh;\n rh = this.cphi1 + this.phi1 - phi;\n if (Math.abs(rh) > EPS10) {\n p.x = rh * Math.sin(E = lam * Math.cos(phi) / rh);\n p.y = this.cphi1 - rh * Math.cos(E);\n } else {\n p.x = p.y = 0;\n }\n\n p.x = this.a * p.x + (this.x0 || 0);\n p.y = this.a * p.y + (this.y0 || 0);\n return p;\n}\n\nfunction s_inv(p) {\n p.x = (p.x - (this.x0 || 0)) / this.a;\n p.y = (p.y - (this.y0 || 0)) / this.a;\n\n var lam, phi;\n var rh = hypot(p.x, p.y = this.cphi1 - p.y);\n phi = this.cphi1 + this.phi1 - rh;\n if (Math.abs(phi) > HALF_PI) {\n throw new Error();\n }\n if (Math.abs(Math.abs(phi) - HALF_PI) <= EPS10) {\n lam = 0;\n } else {\n lam = rh * Math.atan2(p.x, p.y) / Math.cos(phi);\n }\n p.x = adjust_lon(lam + (this.long0 || 0));\n p.y = adjust_lat(phi);\n return p;\n}\n\nexport var names = [\"bonne\", \"Bonne (Werner lat_1=90)\"];\nexport default {\n init: init,\n names: names\n};","import proj4 from './core';\nimport Proj from \"./Proj\";\nimport Point from \"./Point\";\nimport common from \"./common/toPoint\";\nimport defs from \"./defs\";\nimport nadgrid from \"./nadgrid\";\nimport transform from \"./transform\";\nimport mgrs from \"mgrs\";\nimport includedProjections from \"../projs\";\n\nproj4.defaultDatum = 'WGS84'; //default datum\nproj4.Proj = Proj;\nproj4.WGS84 = new proj4.Proj('WGS84');\nproj4.Point = Point;\nproj4.toPoint = common;\nproj4.defs = defs;\nproj4.nadgrid = nadgrid;\nproj4.transform = transform;\nproj4.mgrs = mgrs;\nproj4.version = '__VERSION__';\nincludedProjections(proj4);\nexport default proj4;\n","import tmerc from './lib/projections/tmerc';\nimport etmerc from './lib/projections/etmerc';\nimport utm from './lib/projections/utm';\nimport sterea from './lib/projections/sterea';\nimport stere from './lib/projections/stere';\nimport somerc from './lib/projections/somerc';\nimport omerc from './lib/projections/omerc';\nimport lcc from './lib/projections/lcc';\nimport krovak from './lib/projections/krovak';\nimport cass from './lib/projections/cass';\nimport laea from './lib/projections/laea';\nimport aea from './lib/projections/aea';\nimport gnom from './lib/projections/gnom';\nimport cea from './lib/projections/cea';\nimport eqc from './lib/projections/eqc';\nimport poly from './lib/projections/poly';\nimport nzmg from './lib/projections/nzmg';\nimport mill from './lib/projections/mill';\nimport sinu from './lib/projections/sinu';\nimport moll from './lib/projections/moll';\nimport eqdc from './lib/projections/eqdc';\nimport vandg from './lib/projections/vandg';\nimport aeqd from './lib/projections/aeqd';\nimport ortho from './lib/projections/ortho';\nimport qsc from './lib/projections/qsc';\nimport robin from './lib/projections/robin';\nimport geocent from './lib/projections/geocent';\nimport tpers from './lib/projections/tpers';\nimport geos from './lib/projections/geos';\nimport eqearth from './lib/projections/eqearth';\nimport bonne from './lib/projections/bonne';\nexport default function(proj4){\n proj4.Proj.projections.add(tmerc);\n proj4.Proj.projections.add(etmerc);\n proj4.Proj.projections.add(utm);\n proj4.Proj.projections.add(sterea);\n proj4.Proj.projections.add(stere);\n proj4.Proj.projections.add(somerc);\n proj4.Proj.projections.add(omerc);\n proj4.Proj.projections.add(lcc);\n proj4.Proj.projections.add(krovak);\n proj4.Proj.projections.add(cass);\n proj4.Proj.projections.add(laea);\n proj4.Proj.projections.add(aea);\n proj4.Proj.projections.add(gnom);\n proj4.Proj.projections.add(cea);\n proj4.Proj.projections.add(eqc);\n proj4.Proj.projections.add(poly);\n proj4.Proj.projections.add(nzmg);\n proj4.Proj.projections.add(mill);\n proj4.Proj.projections.add(sinu);\n proj4.Proj.projections.add(moll);\n proj4.Proj.projections.add(eqdc);\n proj4.Proj.projections.add(vandg);\n proj4.Proj.projections.add(aeqd);\n proj4.Proj.projections.add(ortho);\n proj4.Proj.projections.add(qsc);\n proj4.Proj.projections.add(robin);\n proj4.Proj.projections.add(geocent);\n proj4.Proj.projections.add(tpers);\n proj4.Proj.projections.add(geos);\n proj4.Proj.projections.add(eqearth);\n proj4.Proj.projections.add(bonne);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = ol.proj.transforms;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.proj.Projection;","import {\n addCoordinateTransforms,\n addProjection,\n addEquivalentProjections,\n get\n} from \"ol/proj\";\nimport { get as getTransform } from \"ol/proj/transforms\";\nimport Projection from \"ol/proj/Projection\";\n\nimport Logger from \"../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"CRS\");\n\nexport function register (proj4) {\n const projCodes = Object.keys(proj4.defs);\n logger.trace(\"proj. codes :\", projCodes);\n\n const len = projCodes.length;\n let i, j;\n for (i = 0; i < len; ++i) {\n const code = projCodes[i];\n if (!get(code)) {\n const def = proj4.defs(code);\n addProjection(new Projection({\n code : code,\n axisOrientation : def.axis,\n metersPerUnit : def.to_meter,\n units : def.units\n }));\n }\n }\n for (i = 0; i < len; ++i) {\n const code1 = projCodes[i];\n const proj1 = get(code1);\n\n for (j = 0; j < len; ++j) {\n const code2 = projCodes[j];\n const proj2 = get(code2);\n\n if (!getTransform(code1, code2)) {\n if (proj4.defs[code1] === proj4.defs[code2]) {\n addEquivalentProjections([proj1, proj2]);\n } else {\n const transform = proj4(code1, code2);\n addCoordinateTransforms(proj1, proj2, transform.forward, transform.inverse);\n }\n }\n }\n }\n}\n","/**\n * @module Register\n * @alias module:~utils/Register\n * @description\n * Register definition for IGNF, and EPSG CRS.\n *\n * @example\n * Gp.Register.IGNF.AMST63\n * // return : \"+title=Amsterdam 1963 +proj=geocent +towgs84=109.753,-528.133,-362.244,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\"\n * Gp.Register.get(\"IGNF:AMST63\")\n * // same as Gp.Register.IGNF.AMST63\n */\nvar Register = {\n\n /**\n * instance already loaded into proj4\n */\n isLoaded : false,\n\n /**\n * get the definition for a code\n *\n * @function get\n * @param {String} name - ie. EPSG:2154 (Lambert)\n * @returns {Object} definition\n * @example\n * Register.get(\"EPSG:2154\");\n * // \"+title=RGF93 / Lambert-93 +proj=lcc +lat_1=49 ...\"\n */\n get : function (name) {\n if (name === \"\" || name === null || typeof name === \"undefined\") {\n return;\n }\n\n var s = name.split(\":\");\n if (s.length !== 2) {\n return;\n }\n\n var _register = s[0];\n var _code = s[1];\n\n if (!this.hasOwnProperty(_register)) {\n return;\n }\n\n if (!this[_register].hasOwnProperty(_code)) {\n return;\n }\n\n return this[_register][_code];\n },\n\n /**\n * does projection code exist ?\n *\n * @function exist\n * @param {String} name - ie. EPSG:2154 (Lambert)\n * @returns {Boolean} true/false\n * @example\n * Register.exist(\"EPSG:2154\"); // true\n */\n exist : function (name) {\n if (name === \"\" || name === null || typeof name === \"undefined\") {\n return false;\n }\n\n var s = name.split(\":\");\n if (s.length !== 2) {\n return false;\n }\n\n var _register = s[0];\n var _code = s[1];\n\n if (!this.hasOwnProperty(_register)) {\n return false;\n }\n\n if (!this[_register].hasOwnProperty(_code)) {\n return false;\n }\n\n return true;\n },\n\n /**\n * load all defs to proj4\n * @function load\n * @param {Object} Proj4 - proj4 instance\n */\n load : function (Proj4) {\n // un flag pour savoir si le chargement est déjà realisé\n // (car ceci peut être couteux !)\n if (!this.isLoaded) {\n var registers = [\n \"IGNF\", // exception lors du register IGNF ?\n \"EPSG\",\n \"CRS\"\n ];\n for (var i = 0; i < registers.length; i++) {\n var _register = registers[i];\n var codes = this[_register];\n for (var _code in codes) {\n if (codes.hasOwnProperty(_code)) {\n var name = _register + \":\" + _code;\n Proj4.defs(name, this.get(name));\n // on enlève la dependance à OpenLayers...\n // la fonction register est donc à appeller afin d'enregistrer\n // les definitions dans OpenLayers :\n // import { get } from \"ol/proj\";\n // import proj4 from \"proj4\";\n // import { register } from \"ol/proj/proj4\";\n // Register.load();\n // // Make projections defined in proj4 (with proj4.defs()) available in OpenLayers.\n // // see ol/proj/proj4.register (https://openlayers.org/en/latest/apidoc/module-ol_proj_proj4.html)\n // register(proj4);\n // console.log(get(\"CRS:84\").getCode()); // \"CRS:84\"\n }\n }\n }\n /** ts-syntax */ (this.isLoaded) = true;\n }\n },\n\n /**\n * load defs by default to proj4\n *\n * include into proj4 :\n * - WGS84\n * - ['EPSG:4326']\n * - ['EPSG:3785'], ['EPSG:3857'], GOOGLE, ['EPSG:900913'], ['EPSG:102113']\n * +\n * - [\"EPSG:2154\"], [\"EPSG:27571\"], [\"EPSG:27572\"], [\"EPSG:27573\"], [\"EPSG:2757\"],\n * - [\"CRS:84\"],\n * - [\"IGNF:LAMB93\"],\n * - [\"IGNF:LAMBE\"], [\"IGNF:LAMB1\"], [\"IGNF:LAMB2\"], [\"IGNF:LAMB3\"], [\"IGNF:LAMB4\"],\n * - [\"IGNF:RGF93G\"],\n * - [\"IGNF:WGS84G\"]\n *\n * @function loadByDefault\n * @param {Object} Proj4 - proj4 instance\n */\n loadByDefault : function (Proj4) {\n // la liste de projections par defaut...\n var registers = {\n EPSG : {\n 2154 : Register[\"EPSG\"][\"2154\"],\n 27571 : Register[\"EPSG\"][\"27571\"],\n 27572 : Register[\"EPSG\"][\"27572\"],\n 27573 : Register[\"EPSG\"][\"27573\"],\n 27574 : Register[\"EPSG\"][\"27574\"]\n },\n CRS : {\n 84 : Register[\"CRS\"][\"84\"]\n },\n IGNF : {\n LAMB93 : Register[\"IGNF\"][\"LAMB93\"],\n LAMBE : Register[\"IGNF\"][\"LAMBE\"],\n LAMB1 : Register[\"IGNF\"][\"LAMB1\"],\n LAMB2 : Register[\"IGNF\"][\"LAMB2\"],\n LAMB3 : Register[\"IGNF\"][\"LAMB3\"],\n LAMB4 : Register[\"IGNF\"][\"LAMB4\"],\n RGF93G : Register[\"IGNF\"][\"RGF93G\"],\n WGS84G : Register[\"IGNF\"][\"WGS84G\"]\n }\n };\n\n for (var register in registers) {\n if (registers.hasOwnProperty(register)) {\n var codes = registers[register];\n for (var code in codes) {\n if (codes.hasOwnProperty(code)) {\n var name = register + \":\" + code;\n Proj4.defs(name, codes[code]);\n }\n }\n }\n }\n },\n\n /**\n * load only a def to proj4\n *\n * @function loadByName\n * @param {Object} Proj4 - proj4 instance\n * @param {String} name - ie. EPSG:2154 (Lambert)\n * @returns {Boolean} true/false\n */\n loadByName : function (Proj4, name) {\n if (!this.exist(name)) {\n return false;\n }\n\n try {\n Proj4.defs(name, this.get(name));\n } catch (e) {\n // FIXME message !?\n return false;\n }\n\n return true;\n },\n\n /**\n * definitions EPSG\n * @enum\n */\n EPSG : {\n 4978 : \"+proj=geocent +datum=WGS84 +units=m +no_defs \",\n 3857 : \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs\",\n 3785 : \"+title=WGS 84 / Pseudo-Mercator (deprecated) +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs\",\n 4149 : \"+title=CH1903 +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs \",\n 4150 : \"+title=CH1903plus +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs \",\n 4151 : \"+title=CHTRF95 +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4171 : \"+title=RGF93 +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4230 : \"+title=ED50 +proj=longlat +ellps=intl +no_defs \",\n 4235 : \"+title=Guyane Francaise +proj=longlat +ellps=intl +no_defs \",\n 4258 : \"+title=ETRS89 +proj=longlat +ellps=GRS80 +no_defs \",\n 4275 : \"+title=NTF +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs \",\n 4322 : \"+title=WGS 72 +proj=longlat +ellps=WGS72 +no_defs \",\n 4326 : \"+title=WGS 84 +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs \",\n 4467 : \"+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 4470 : \"+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4471 : \"+proj=utm +zone=38 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 4474 : \"+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs \",\n 4558 : \"+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4559 : \"+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 4621 : \"+title=Fort Marigot +proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs \",\n 4622 : \"+title=Guadeloupe 1948 +proj=longlat +ellps=intl +no_defs \",\n 4623 : \"+title=CSG67 +proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 +no_defs \",\n 4624 : \"+title=RGFG95 +proj=longlat +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +no_defs \",\n 4625 : \"+title=Martinique 1938 +proj=longlat +ellps=intl +no_defs \",\n 4626 : \"+title=Reunion 1947 +proj=longlat +ellps=intl +no_defs \",\n 4627 : \"+title=RGR92 +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4628 : \"+title=Tahiti 52 +proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +no_defs \",\n 4629 : \"+title=Tahaa 54 +proj=longlat +ellps=intl +no_defs \",\n 4630 : \"+title=IGN72 Nuku Hiva +proj=longlat +ellps=intl +no_defs \",\n 4632 : \"+title=Combani 1950 +proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +no_defs \",\n 4633 : \"+title=IGN56 Lifou +proj=longlat +ellps=intl +no_defs \",\n 4634 : \"+title=IGN72 Grand Terre +proj=longlat +ellps=intl +no_defs \",\n 4637 : \"+title=Perroud 1950 +proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +no_defs \",\n 4638 : \"+title=Saint Pierre et Miquelon 1950 +proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +no_defs \",\n 4640 : \"+title=RRAF 1991 +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4641 : \"+title=IGN53 Mare +proj=longlat +ellps=intl +no_defs \",\n 4645 : \"+title=RGNC 1991 +proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4687 : \"+proj=longlat +ellps=GRS80 +no_defs \",\n 4662 : \"+title=IGN72 Grande Terre +proj=longlat +ellps=intl +no_defs \",\n 4689 : \"+title=IGN63 Hiva Oa +proj=longlat +ellps=intl +no_defs \",\n 4690 : \"+title=Tahiti 79 +proj=longlat +ellps=intl +no_defs \",\n 4691 : \"+title=Moorea 87 +proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +no_defs \",\n 4692 : \"+title=Maupiti 83 +proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +no_defs \",\n 4698 : \"+title=IGN 1962 Kerguelen +proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs \",\n 4749 : \"+title=RGNC91-93 +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4750 : \"+title=ST87 Ouvea +proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +no_defs \",\n 4807 : \"+title=NTF (Paris) +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs \",\n 2056 : \"+title=CH1903+ / LV95 +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs \",\n 2154 : \"+title=RGF93 / Lambert-93 +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 2213 : \"+title=ETRS89 / TM 30 NE +proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs \",\n 2969 : \"+title=Fort Marigot / UTM zone 20N +proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m +no_defs \",\n 2970 : \"+title=Guadeloupe 1948 / UTM zone 20N +proj=utm +zone=20 +ellps=intl +units=m +no_defs \",\n 2971 : \"+title=CSG67 / UTM zone 22N +proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs \",\n 2972 : \"+title=RGFG95 / UTM zone 22N +proj=utm +zone=22 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs \",\n 2973 : \"+title=Martinique 1938 / UTM zone 20N +proj=utm +zone=20 +ellps=intl +units=m +no_defs \",\n 2975 : \"+title=RGR92 / UTM zone 40S +proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 2976 : \"+title=Tahiti 52 / UTM zone 6S +proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m +no_defs \",\n 2977 : \"+title=Tahaa 54 / UTM zone 5S +proj=utm +zone=5 +south +ellps=intl +units=m +no_defs \",\n 2978 : \"+title=IGN72 Nuku Hiva / UTM zone 7S +proj=utm +zone=7 +south +ellps=intl +units=m +no_defs \",\n 2980 : \"+title=Combani 1950 / UTM zone 38S +proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs \",\n 2981 : \"+title=IGN56 Lifou / UTM zone 58S +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs \",\n 2982 : \"+title=IGN72 Grand Terre / UTM zone 58S (deprecated) +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs \",\n 2984 : \"+title=RGNC 1991 / Lambert New Caledonia (deprecated) +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=intl +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 2986 : \"+title=Terre Adelie 1950 +proj=stere +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-90.000000000 +lon_0=140.000000000 +lat_ts=-67.000000000 +k=0.96027295 +x_0=300000.000 +y_0=-2299363.482 +units=m +no_defs\",\n 2987 : \"+title=Saint Pierre et Miquelon 1950 / UTM zone 21N +proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m +no_defs \",\n 2989 : \"+title=RRAF 1991 / UTM zone 20N +proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 2990 : \"+title=Reunion 1947 / TM Reunion (deprecated) +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +units=m +no_defs \",\n 2995 : \"+title=IGN53 Mare / UTM zone 58S +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs \",\n 3038 : \"+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3039 : \"+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3040 : \"+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3041 : \"+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 3042 : \"+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 3043 : \"+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 3044 : \"+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3045 : \"+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3046 : \"+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3047 : \"+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3048 : \"+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3049 : \"+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3050 : \"+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3051 : \"+proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3034 : \"+title=ETRS89 / ETRS-LCC +proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +units=m +no_defs \",\n 3035 : \"+title=ETRS89 / ETRS-LAEA +proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs \",\n 3042 : \"+title=ETRS89 / ETRS-TM30 +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs \",\n 3043 : \"+title=ETRS89 / ETRS-TM31 +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs \",\n 3044 : \"+title=ETRS89 / ETRS-TM32 +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs \",\n 25828 : \"+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25829 : \"+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 25830 : \"+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 25831 : \"+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 25832 : \"+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25833 : \"+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25834 : \"+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25835 : \"+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25836 : \"+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25837 : \"+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25838 : \"+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3060 : \"+title=IGN72 Grande Terre / UTM zone 58S +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs \",\n 3163 : \"+title=RGNC91-93 / Lambert New Caledonia +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3164 : \"+title=ST87 Ouvea / UTM zone 58S +proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m +no_defs \",\n 3165 : \"+title=NEA74 Noumea / Noumea Lambert +proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +units=m +no_defs \",\n 3166 : \"+title=NEA74 Noumea / Noumea Lambert 2 +proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +units=m +no_defs \",\n 3169 : \"+title=RGNC91-93 / UTM zone 57S +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3170 : \"+title=RGNC91-93 / UTM zone 58S +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3171 : \"+title=RGNC91-93 / UTM zone 59S +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3172 : \"+title=IGN53 Mare / UTM zone 59S +proj=utm +zone=59 +south +ellps=intl +units=m +no_defs \",\n 3296 : \"+title=RGPF / UTM zone 5S +proj=utm +zone=5 +south +ellps=GRS80 +units=m +no_defs \",\n 3297 : \"+title=RGPF / UTM zone 6S +proj=utm +zone=6 +south +ellps=GRS80 +units=m +no_defs \",\n 3298 : \"+title=RGPF / UTM zone 7S +proj=utm +zone=7 +south +ellps=GRS80 +units=m +no_defs \",\n 3299 : \"+title=RGPF / UTM zone 8S +proj=utm +zone=8 +south +ellps=GRS80 +units=m +no_defs \",\n 3302 : \"+title=IGN63 Hiva Oa / UTM zone 7S +proj=utm +zone=7 +south +ellps=intl +units=m +no_defs \",\n 3303 : \"+title=Fatu Iva 72 / UTM zone 7S +proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m +no_defs \",\n 3304 : \"+title=Tahiti 79 / UTM zone 6S +proj=utm +zone=6 +south +ellps=intl +units=m +no_defs \",\n 3305 : \"+title=Moorea 87 / UTM zone 6S +proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m +no_defs \",\n 3306 : \"+title=Maupiti 83 / UTM zone 5S +proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m +no_defs \",\n 3312 : \"+title=CSG67 / UTM zone 21N +proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs \",\n 3313 : \"+title=RGFG95 / UTM zone 21N +proj=utm +zone=21 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs \",\n 3336 : \"+title=IGN 1962 Kerguelen / UTM zone 42S +proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs \",\n 3395 : \"+title=WGS 84 / World Mercator +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 3727 : \"+title=Reunion 1947 / TM Reunion +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +units=m +no_defs \",\n 21781 : \"+title=CH1903 / LV03 +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs \",\n 25830 : \"+title=ETRS89 / UTM zone 30N +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs \",\n 25831 : \"+title=ETRS89 / UTM zone 31N +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs \",\n 25832 : \"+title=ETRS89 / UTM zone 32N +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs \",\n 27561 : \"+title=NTF (Paris) / Lambert Nord France +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27562 : \"+title=NTF (Paris) / Lambert Centre France +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27563 : \"+title=NTF (Paris) / Lambert Sud France +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.9998774990000001 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27564 : \"+title=NTF (Paris) / Lambert Corse +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.9999447100000001 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27571 : \"+title=NTF (Paris) / Lambert zone I +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27572 : \"+title=NTF (Paris) / Lambert zone II +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27573 : \"+title=NTF (Paris) / Lambert zone III +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.9998774990000001 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27574 : \"+title=NTF (Paris) / Lambert zone IV +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.9999447100000001 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27581 : \"+title=NTF (Paris) / France I (deprecated) +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27582 : \"+title=NTF (Paris) / France II (deprecated) +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27583 : \"+title=NTF (Paris) / France III (deprecated) +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.9998774990000001 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27584 : \"+title=NTF (Paris) / France IV (deprecated) +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.9999447100000001 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27591 : \"+title=NTF (Paris) / Nord France (deprecated) +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27592 : \"+title=NTF (Paris) / Centre France (deprecated) +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27593 : \"+title=NTF (Paris) / Sud France (deprecated) +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.9998774990000001 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27594 : \"+title=NTF (Paris) / Corse (deprecated) +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.9999447100000001 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 32601 : \"+proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32602 : \"+proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32603 : \"+proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32604 : \"+proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32605 : \"+proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32606 : \"+proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32607 : \"+proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32608 : \"+proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32609 : \"+proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32610 : \"+proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32611 : \"+proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32612 : \"+proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32613 : \"+proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32614 : \"+proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32615 : \"+proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32616 : \"+proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32617 : \"+proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32618 : \"+proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32619 : \"+proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32620 : \"+proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32621 : \"+proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32622 : \"+proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32623 : \"+proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32624 : \"+proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32625 : \"+proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32626 : \"+proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32627 : \"+proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32628 : \"+proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32629 : \"+proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32630 : \"+proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32631 : \"+proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32632 : \"+proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32633 : \"+proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32634 : \"+proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32635 : \"+proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32636 : \"+proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32637 : \"+proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32638 : \"+proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32639 : \"+proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32640 : \"+proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32641 : \"+proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32642 : \"+proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32643 : \"+proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32644 : \"+proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32645 : \"+proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32646 : \"+proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32647 : \"+proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32648 : \"+proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32649 : \"+proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32650 : \"+proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32651 : \"+proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32652 : \"+proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32653 : \"+proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32654 : \"+proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32655 : \"+proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32656 : \"+proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32657 : \"+proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32658 : \"+proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32659 : \"+proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32660 : \"+proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32661 : \"+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32662 : \"+title=WGS 84 / Plate Carree +proj=eqc +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32701 : \"+proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32702 : \"+proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32703 : \"+proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32704 : \"+proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32705 : \"+proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32706 : \"+proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32707 : \"+proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32708 : \"+proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32709 : \"+proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32710 : \"+proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32711 : \"+proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32712 : \"+proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32713 : \"+proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32714 : \"+proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32715 : \"+proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32716 : \"+proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32717 : \"+proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32718 : \"+proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32719 : \"+proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32720 : \"+proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32721 : \"+proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32722 : \"+proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32723 : \"+proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32724 : \"+proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32725 : \"+proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32726 : \"+proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32727 : \"+proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32728 : \"+proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32729 : \"+proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32730 : \"+proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32731 : \"+proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32732 : \"+proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32733 : \"+proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32734 : \"+proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32735 : \"+proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32736 : \"+proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32737 : \"+proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32738 : \"+proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32739 : \"+proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32740 : \"+proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32741 : \"+proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32742 : \"+proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32743 : \"+proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32744 : \"+proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32745 : \"+proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32746 : \"+proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32747 : \"+proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32748 : \"+proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32749 : \"+proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32750 : \"+proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32751 : \"+proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32752 : \"+proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32753 : \"+proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32754 : \"+proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32755 : \"+proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32756 : \"+proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32757 : \"+proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32758 : \"+proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32759 : \"+proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32760 : \"+proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32761 : \"+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 310024802 : \"+title=Geoportail - France metropolitaine +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=46.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310915814 : \"+title=Geoportail - Antilles francaises +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310486805 : \"+title=Geoportail - Guyane +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=4.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310700806 : \"+title=Geoportail - Reunion et dependances +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-21.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310702807 : \"+title=Geoportail - Mayotte +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-12.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310706808 : \"+title=Geoportail - Saint-Pierre et Miquelon +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=47.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310547809 : \"+title=Geoportail - Nouvelle-Caledonie +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-22.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642810 : \"+title=Geoportail - Wallis et Futuna +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-14.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310032811 : \"+title=Geoportail - Polynesie francaise +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642812 : \"+title=Geoportail - Kerguelen +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-49.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642801 : \"+title=Geoportail - Crozet +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-46.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642813 : \"+title=Geoportail - Amsterdam et Saint-Paul +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-38.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642901 : \"+title=Geoportail - Monde +proj=mill +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lon_0=0.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 5489 : \"+title=RGAF09 geographiques (dms) +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137 +rf=298.257222101 +units=m +no_defs\",\n 5490 : \"+title=RGAF09 UTM Nord Fuseau 20 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137 +rf=298.257222101 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\"\n },\n /**\n * definitions CRS\n * @enum\n */\n CRS : {\n 84 : \"+title=WGS 84 longitude-latitude +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs \"\n },\n /**\n * definitions IGNF\n * @enum\n */\n IGNF : {\n AMST63 : \"+title=Amsterdam 1963 +proj=geocent +towgs84=109.753,-528.133,-362.244,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n CROZ63 : \"+title=Crozet 1963 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n CSG67 : \"+title=Guyane CSG67 +proj=geocent +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n ED50 : \"+title=ED50 +proj=geocent +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n ETRS89 : \"+title=Systeme de reference terrestre Europeen (1989) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n GUAD48 : \"+title=Guadeloupe Ste Anne +proj=geocent +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n GUADFM49 : \"+title=Guadeloupe Fort Marigot +proj=geocent +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n IGN63 : \"+title=IGN 1963 (Hiva Oa, Tahuata, Mohotani) +proj=geocent +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n IGN72 : \"+title=IGN 1972 Grande-Terre / Ile des Pins +proj=geocent +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n KERG62CAR : \"+title=Kerguelen - K0 +proj=geocent +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MART38 : \"+title=Martinique Fort-Desaix +proj=geocent +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MAYO50 : \"+title=Mayotte Combani +proj=geocent +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MOOREA87 : \"+title=Moorea 1987 +proj=geocent +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n NTF : \"+title=Nouvelle Triangulation Francaise +proj=geocent +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +units=m +no_defs\",\n NUKU72 : \"+title=IGN 1972 Nuku Hiva +proj=geocent +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n REUN47 : \"+title=Reunion 1947 +proj=geocent +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n RGF93 : \"+title=Reseau geodesique francais 1993 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGFG95 : \"+title=Reseau geodesique francais de Guyane 1995 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGM04 : \"+title=RGM04 (Reseau Geodesique de Mayotte 2004) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGNC : \"+title=Reseau Geodesique de Nouvelle-Caledonie +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGPF : \"+title=RGPF (Reseau Geodesique de Polynesie Francaise) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGR92 : \"+title=Reseau geodesique Reunion 1992 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGSPM06 : \"+title=Reseau Geodesique Saint-Pierre-et-Miquelon (2006) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGTAAF07 : \"+title=Reseau Geodesique des TAAF (2007) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RRAF91 : \"+title=RRAF 1991 (Reseau de Reference des Antilles Francaises) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n STPL69 : \"+title=Saint-Paul 1969 +proj=geocent +towgs84=225.571,-346.608,-46.567,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n STPM50 : \"+title=St Pierre et Miquelon 1950 +proj=geocent +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +units=m +no_defs\",\n TAHAA : \"+title=Raiatea - Tahaa 51-54 (Tahaa, Base Terme Est) +proj=geocent +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n TAHI79 : \"+title=IGN79 (Tahiti) Iles de la Societe +proj=geocent +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n TERA50 : \"+title=Pointe Geologie - Perroud 1950 +proj=geocent +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n WALL78 : \"+title=Wallis-Uvea 1978 (MOP78) +proj=geocent +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n WGS72 : \"+title=World Geodetic System 1972 +proj=geocent +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +units=m +no_defs\",\n WGS84 : \"+title=World Geodetic System 1984 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n AMST63GEO : \"+title=Amsterdam 1963 +proj=longlat +towgs84=109.753,-528.133,-362.244,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n CROZ63GEO : \"+title=Crozet 1963 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n CSG67GEO : \"+title=Guyane CSG67 +proj=longlat +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n ED50G : \"+title=ED50 +proj=longlat +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n GUAD48GEO : \"+title=Guadeloupe Ste Anne +proj=longlat +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n GUADFM49GEO : \"+title=Guadeloupe Fort Marigot +proj=longlat +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n IGN63GEO : \"+title=IGN 1963 (Hiva Oa, Tahuata, Mohotani) +proj=longlat +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n IGN72GEO : \"+title=IGN 1972 Grande-Terre / Ile des Pins +proj=longlat +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n KERG62GEO : \"+title=Kerguelen - K0 +proj=longlat +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MART38GEO : \"+title=Martinique Fort-Desaix +proj=longlat +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MAYO50GEO : \"+title=Mayotte Combani +proj=longlat +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MOOREA87GEO : \"+title=Moorea 1987 +proj=longlat +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n NTFG : \"+title=Nouvelle Triangulation Francaise Greenwich degres sexagesimaux +proj=longlat +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +units=m +no_defs\",\n NTFP : \"+title=Nouvelle Triangulation Francaise Paris grades +proj=longlat +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +units=m +no_defs\",\n NUKU72GEO : \"+title=IGN 1972 Nuku Hiva +proj=longlat +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n REUN47GEO : \"+title=Reunion 1947 +proj=longlat +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n RGF93G : \"+title=Reseau geodesique francais 1993 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGFG95GEO : \"+title=Reseau geodesique francais de Guyane 1995 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGM04GEO : \"+title=RGM04 (Reseau Geodesique de Mayotte 2004) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGNCGEO : \"+title=Reseau Geodesique de Nouvelle-Caledonie +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGPFGEO : \"+title=RGPF (Reseau Geodesique de Polynesie Francaise) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGR92GEO : \"+title=Reseau geodesique de la Reunion 1992 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGSPM06GEO : \"+title=Saint-Pierre-et-Miquelon (2006) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGTAAF07G : \"+title=Reseau Geodesique des TAAF (2007) (dms) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n STPL69GEO : \"+title=Saint-Paul 1969 +proj=longlat +towgs84=225.571,-346.608,-46.567,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n STPM50GEO : \"+title=St Pierre et Miquelon 1950 +proj=longlat +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +units=m +no_defs\",\n TAHAAGEO : \"+title=Raiatea - Tahaa 51-54 (Tahaa, Base Terme Est) +proj=longlat +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n TAHI79GEO : \"+title=IGN79 (Tahiti) Iles de la Societe +proj=longlat +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n TERA50G : \"+title=Pointe Geologie - Perroud 1950 +proj=longlat +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n WALL78GEO : \"+title=Wallis - Uvea 1978 (MOP78) +proj=longlat +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n WGS72G : \"+title=WGS72 +proj=longlat +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +units=m +no_defs\",\n WGS84G : \"+title=World Geodetic System 1984 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n WGS84RRAFGEO : \"+title=Reseau de reference des Antilles francaises (1988-1991) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n XGEO : \"+title=Systeme CIO-BIH +proj=longlat +towgs84=0.0000,0.0000,0.5000,0.0000,0.0000,0.0140,-0.100000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n AMST63UTM43S : \"+title=Amsterdam 1963 UTM fuseau 43 Sud +proj=tmerc +towgs84=109.753,-528.133,-362.244,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n CROZ63UTM39S : \"+title=Crozet 1963 +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n CSG67UTM21 : \"+title=Guyane CSG67 UTM fuseau 21 +proj=tmerc +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n CSG67UTM22 : \"+title=Guyane CSG67 UTM fuseau 22 +proj=tmerc +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALANF : \"+title=Geoportail - Antilles francaises +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALASP : \"+title=Geoportail - Amsterdam et Saint-Paul +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-38.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALCRZ : \"+title=Geoportail - Crozet +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-46.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALFXX : \"+title=Geoportail - France metropolitaine +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=46.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALGUF : \"+title=Geoportail - Guyane +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=4.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALKER : \"+title=Geoportail - Kerguelen +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-49.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALMYT : \"+title=Geoportail - Mayotte +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-12.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALNCL : \"+title=Geoportail - Nouvelle-Caledonie +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-22.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALPYF : \"+title=Geoportail - Polynesie francaise +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALREU : \"+title=Geoportail - Reunion et dependances +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-21.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALSPM : \"+title=Geoportail - Saint-Pierre et Miquelon +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=47.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALWLF : \"+title=Geoportail - Wallis et Futuna +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-14.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GUAD48UTM20 : \"+title=Guadeloupe Ste Anne +proj=tmerc +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n GUADFM49U20 : \"+title=Guadeloupe Fort Marigot +proj=tmerc +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n IGN63UTM7S : \"+title=IGN 1963 - Hiva Oa, Tahuata, Mohotani - UTM fuseau 7 Sud +proj=tmerc +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n IGN72UTM58S : \"+title=IGN 1972 - UTM fuseau 58 Sud +proj=tmerc +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n KERG62UTM42S : \"+title=Kerguelen 1962 +proj=tmerc +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n LAMB1 : \"+title=Lambert I +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=49.500000000 +lon_0=0.000000000 +k_0=0.99987734 +lat_1=49.500000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs\",\n LAMB1C : \"+title=Lambert I Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=49.500000000 +lon_0=0.000000000 +k_0=0.99987734 +lat_1=49.500000000 +x_0=600000.000 +y_0=1200000.000 +units=m +no_defs\",\n LAMB2 : \"+title=Lambert II +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs\",\n LAMB2C : \"+title=Lambert II Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=2200000.000 +units=m +no_defs\",\n LAMB3 : \"+title=Lambert III +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=44.100000000 +lon_0=0.000000000 +k_0=0.99987750 +lat_1=44.100000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs\",\n LAMB3C : \"+title=Lambert III Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=44.100000000 +lon_0=0.000000000 +k_0=0.99987750 +lat_1=44.100000000 +x_0=600000.000 +y_0=3200000.000 +units=m +no_defs\",\n LAMB4 : \"+title=Lambert IV +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=42.165000000 +lon_0=0.000000000 +k_0=0.99994471 +lat_1=42.165000000 +x_0=234.358 +y_0=185861.369 +units=m +no_defs\",\n LAMB4C : \"+title=Lambert IV Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=42.165000000 +lon_0=0.000000000 +k_0=0.99994471 +lat_1=42.165000000 +x_0=234.358 +y_0=4185861.369 +units=m +no_defs\",\n LAMB93 : \"+title=Lambert 93 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=46.500000000 +lon_0=3.000000000 +lat_1=44.000000000 +lat_2=49.000000000 +x_0=700000.000 +y_0=6600000.000 +units=m +no_defs\",\n RGF93CC42 : \"+title=Lambert conique conforme Zone 1 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=42.000000000 +lon_0=3.000000000 +lat_1=41.200000000 +lat_2=42.800000000 +x_0=1700000.000 +y_0=1200000.000 +units=m +no_defs\",\n RGF93CC43 : \"+title=Lambert conique conforme Zone 2 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=43.000000000 +lon_0=3.000000000 +lat_1=42.200000000 +lat_2=43.800000000 +x_0=1700000.000 +y_0=2200000.000 +units=m +no_defs\",\n RGF93CC44 : \"+title=Lambert conique conforme Zone 3 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=44.000000000 +lon_0=3.000000000 +lat_1=43.200000000 +lat_2=44.800000000 +x_0=1700000.000 +y_0=3200000.000 +units=m +no_defs\",\n RGF93CC45 : \"+title=Lambert conique conforme Zone 4 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=45.000000000 +lon_0=3.000000000 +lat_1=44.200000000 +lat_2=45.800000000 +x_0=1700000.000 +y_0=4200000.000 +units=m +no_defs\",\n RGF93CC46 : \"+title=Lambert conique conforme Zone 5 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=46.000000000 +lon_0=3.000000000 +lat_1=45.200000000 +lat_2=46.800000000 +x_0=1700000.000 +y_0=5200000.000 +units=m +no_defs\",\n RGF93CC47 : \"+title=Lambert conique conforme Zone 6 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=47.000000000 +lon_0=3.000000000 +lat_1=46.200000000 +lat_2=47.800000000 +x_0=1700000.000 +y_0=6200000.000 +units=m +no_defs\",\n RGF93CC48 : \"+title=Lambert conique conforme Zone 7 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=48.000000000 +lon_0=3.000000000 +lat_1=47.200000000 +lat_2=48.800000000 +x_0=1700000.000 +y_0=7200000.000 +units=m +no_defs\",\n RGF93CC49 : \"+title=Lambert conique conforme Zone 8 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=49.000000000 +lon_0=3.000000000 +lat_1=48.200000000 +lat_2=49.800000000 +x_0=1700000.000 +y_0=8200000.000 +units=m +no_defs\",\n RGF93CC50 : \"+title=Lambert conique conforme Zone 9 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=50.000000000 +lon_0=3.000000000 +lat_1=49.200000000 +lat_2=50.800000000 +x_0=1700000.000 +y_0=9200000.000 +units=m +no_defs\",\n LAMBE : \"+title=Lambert II etendu +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=2200000.000 +units=m +no_defs\",\n MART38UTM20 : \"+title=Martinique Fort-Desaix +proj=tmerc +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n MAYO50UTM38S : \"+title=Mayotte Combani +proj=tmerc +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n MILLER : \"+title=Geoportail - Monde +proj=mill +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lon_0=0.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n MOOREA87U6S : \"+title=Moorea 1987 - UTM fuseau 6 Sud +proj=tmerc +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n NUKU72U7S : \"+title=IGN 1972 Nuku Hiva - UTM fuseau 7 Sud +proj=tmerc +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n // REUN47GAUSSL : \"+title=Reunion Gauss Laborde +proj=gstmerc +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-21.116666667 +lon_0=55.533333333 +k_0=1.00000000 +x_0=160000.000 +y_0=50000.000 +units=m +no_defs\",\n RGM04UTM38S : \"+title=UTM fuseau 38 Sud (Reseau Geodesique de Mayotte 2004) +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGNCUTM57S : \"+title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 57 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGNCUTM58S : \"+title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 58 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGNCUTM59S : \"+title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 59 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGPFUTM5S : \"+title=RGPF - UTM fuseau 5 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGPFUTM6S : \"+title=RGPF - UTM fuseau 6 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGPFUTM7S : \"+title=RGPF - UTM fuseau 7 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGR92UTM40S : \"+title=RGR92 UTM fuseau 40 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGSPM06U21 : \"+title=Saint-Pierre-et-Miquelon (2006) UTM Fuseau 21 Nord +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n STPL69UTM43S : \"+title=Saint-Paul 1969 UTM fuseau 43 Sud +proj=tmerc +towgs84=225.571,-346.608,-46.567,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n STPM50UTM21 : \"+title=St Pierre et Miquelon 1950 +proj=tmerc +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n TAHAAUTM05S : \"+title=Tahaa 1951 +proj=tmerc +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n TAHI51UTM06S : \"+title=Tahiti-Terme Nord UTM fuseau 6 Sud +proj=tmerc +towgs84=162.0000,117.0000,154.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n TAHI79UTM6S : \"+title=Tahiti 1979 +proj=tmerc +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n TERA50STEREO : \"+title=Terre Adelie 1950 +proj=stere +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-90.000000000 +lon_0=140.000000000 +lat_ts=-67 +k=0.96027295 +x_0=300000.000 +y_0=-2299363.482 +units=m +no_defs\",\n UTM01SW84 : \"+title=World Geodetic System 1984 UTM fuseau 01 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n UTM20W84GUAD : \"+title=World Geodetic System 1984 UTM fuseau 20 Nord-Guadeloupe +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM20W84MART : \"+title=World Geodetic System 1984 UTM fuseau 20 Nord-Martinique +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM22RGFG95 : \"+title=RGFG95 UTM fuseau 22 Nord-Guyane +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM39SW84 : \"+title=World Geodetic System 1984 UTM fuseau 39 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n UTM42SW84 : \"+title=World Geodetic System 1984 UTM fuseau 42 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n UTM43SW84 : \"+title=World Geodetic System 1984 UTM fuseau 43 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n WALL78UTM1S : \"+title=Wallis-Uvea 1978 (MOP78) UTM 1 SUD +proj=tmerc +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n ETRS89GEO : \"+title=ETRS89 geographiques (dms) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n ETRS89LAEA : \"+title=ETRS89 Lambert Azimutal Equal Area +proj=laea +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=52.000000000 +lon_0=10.000000000 +x_0=4321000.000 +y_0=3210000.000 +units=m +no_defs\",\n ETRS89LCC : \"+title=ETRS89 Lambert Conformal Conic +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=52.000000000 +lon_0=9.999999995 +lat_1=35.000000000 +lat_2=65.000000000 +x_0=4000000.000 +y_0=2800000.000 +units=m +no_defs\",\n UTM26ETRS89 : \"+title=Europe - de 30d a 24d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM27ETRS89 : \"+title=Europe - de 24d a 18d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM28ETRS89 : \"+title=Europe - de 18d a 12d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM29ETRS89 : \"+title=Europe - de 12d a 6d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM30ETRS89 : \"+title=Europe - de -6d a 0d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM31ETRS89 : \"+title=Europe - de 0d a 6d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM32ETRS89 : \"+title=Europe - de 6d a 12d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM33ETRS89 : \"+title=Europe - de 12d a 18d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM34ETRS89 : \"+title=Europe - de 18d a 24d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM35ETRS89 : \"+title=Europe - de 24d a 30d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM36ETRS89 : \"+title=Europe - de 30d a 36d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM37ETRS89 : \"+title=Europe - de 36d a 42d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM38ETRS89 : \"+title=Europe - de 42d a 48d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\"\n }\n};\n\nexport default Register;\n","/*\n * FIXME\n * en mode bundle, l'action register des methodes de chargement est executée 2 fois.\n * mais aucun impact sur performance, car le register teste si la projection a été déjà\n * chargé...\n */\n\n// import external\nimport Proj4 from \"proj4\";\n// import OpenLayers\n// import { register } from \"ol/proj/proj4\";\nimport { register } from \"./Proj4\";\nimport {\n getTransform,\n addProjection,\n get as getProjection\n} from \"ol/proj\";\n// import { clear as clearProj } from \"ol/proj/transforms\";\nimport { applyTransform } from \"ol/extent\";\n// import local\nimport Register from \"../Utils/Register\";\nimport Logger from \"../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"CRS\");\n\nvar CRS = {\n\n /**\n * List of extent projections\n */\n projectionsExtent : {\n \"EPSG:2154\" : {\n left : -9.62,\n bottom : 41.18,\n right : 10.3,\n top : 51.54\n },\n \"EPSG:27572\" : {\n left : -4.87,\n bottom : 42.33,\n right : 8.23,\n top : 51.14\n }\n },\n\n /**\n * Load all custom definition projection\n */\n load : function () {\n logger.trace(\"Loading custom definitions projections\");\n // loading except if it's already loaded...\n if (!Register.isLoaded) {\n // load all defs into proj4\n Register.load(Proj4);\n try {\n // register all defs\n register(Proj4);\n // Expose proj4 with custom defs into OpenLayers global variable\n if (window.ol && window.ol.proj && window.ol.proj.proj4) {\n window.ol.proj.proj4.register = register;\n window.ol.proj.proj4.register(Proj4);\n }\n } catch (e) {\n // FIXME ?\n logger.error(e);\n // clearProj();\n }\n }\n },\n\n /**\n * Load definition projection by default\n *\n * include into proj4 :\n * - WGS84\n * - ['EPSG:4326']\n * - ['EPSG:3785'], ['EPSG:3857'], GOOGLE, ['EPSG:900913'], ['EPSG:102113']\n * +\n * - [\"EPSG:2154\"], [\"EPSG:27571\"], [\"EPSG:27572\"], [\"EPSG:27573\"], [\"EPSG:2757\"],\n * - [\"CRS:84\"],\n * - [\"IGNF:LAMB93\"],\n * - [\"IGNF:LAMBE\"], [\"IGNF:LAMB1\"], [\"IGNF:LAMB2\"], [\"IGNF:LAMB3\"], [\"IGNF:LAMB4\"],\n * - [\"IGNF:RGF93G\"],\n * - [\"IGNF:WGS84G\"]\n */\n loadByDefault : function () {\n logger.trace(\"Loading custom definitions projections by default\");\n // loading except if it's already loaded...\n if (!Register.isLoaded) {\n // load defs by default into proj4\n Register.loadByDefault(Proj4);\n try {\n // register all defs\n register(Proj4);\n // Expose proj4 with custom defs into OpenLayers global variable\n if (window.ol && window.ol.proj && window.ol.proj.proj4) {\n window.ol.proj.proj4.register = register;\n window.ol.proj.proj4.register(Proj4);\n }\n } catch (e) {\n // FIXME une projection ne passe pas avec ol.proj/proj4.register()...\n // on fait quoi ?\n logger.error(e);\n // clearProj();\n }\n }\n },\n\n /**\n * Load a custom definition projection\n * @param {String} name - ie. EPSG:2154 (Lambert)\n */\n loadByName : function (name) {\n logger.trace(\"Loading a custom definition projection : \", name);\n // loading except if it's already loaded...\n if (!Register.isLoaded) {\n // load defs by default into proj4\n Register.loadByName(Proj4, name);\n try {\n // register all defs\n register(Proj4);\n // Expose proj4 with custom defs into OpenLayers global variable\n if (window.ol && window.ol.proj && window.ol.proj.proj4) {\n window.ol.proj.proj4.register = register;\n window.ol.proj.proj4.register(Proj4);\n }\n } catch (e) {\n // FIXME ?\n logger.error(e);\n // clearProj();\n }\n }\n },\n\n /**\n * Overload OpenLayers ol.proj parameters,\n * to manage EPSG:2154 extent restriction\n */\n overload : function () {\n logger.trace(\"Loading projections aera (extent)\");\n for (var code in this.projectionsExtent) {\n if (this.projectionsExtent.hasOwnProperty(code)) {\n var extent = this.projectionsExtent[code];\n var proj = getProjection(code);\n var fromLonLat = getTransform(\"EPSG:4326\", proj);\n\n // very approximate calculation of projection extent\n var _extent = applyTransform([extent.bottom, extent.right, extent.top, extent.left], fromLonLat);\n proj.setExtent(_extent);\n addProjection(proj);\n\n // Expose projection extent with custom defs into OpenLayers global variable\n if (window.ol && window.ol.proj && window.ol.proj.addProjection) {\n window.ol.proj.addProjection(proj);\n }\n }\n }\n }\n};\n\nexport default CRS;\n\n// Expose proj4 with custom defs into OpenLayers global variable\nif (window.ol && window.ol.proj && window.ol.proj.proj4) {\n window.ol.proj.proj4.register = register;\n}\n","import ID from \"../../Utils/SelectorID\";\nimport GeocodeUtils from \"../../Utils/GeocodeUtils\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar SearchEngineDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPsearchEngine\");\n container.className = \"GPwidget gpf-widget\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * SElement with picto and search input\n * @returns {DOMElement} DOM element\n */\n _createSearchDivElement : function () {\n var searchDiv = document.createElement(\"div\");\n searchDiv.id = this._addUID(\"GPshowSearchDiv\");\n return searchDiv;\n },\n\n /**\n * Show search engine\n * @param {Boolean} collapsible - ...\n * @returns {DOMElement} DOM element\n */\n _createShowSearchEnginePictoElement : function (collapsible) {\n // contexte d'execution\n var self = this;\n if (checkDsfr()) {\n // Jamais collapsible en DSFR\n collapsible = true;\n }\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowSearchEnginePicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowSearchEnginePicto gpf-btn gpf-btn-icon-search fr-btn\";\n button.title = \"Afficher/masquer la recherche par lieux\";\n if (checkDsfr()) {\n // Pas la même du bouton fonction en DSFR\n button.title = \"Rechercher\";\n }\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", !collapsible);\n button.disabled = !collapsible;\n button.setAttribute(\"type\", \"button\");\n\n // Close all results and panels when minimizing the widget\n button.addEventListener(\"click\", function (e) {\n if (checkDsfr()) {\n // En DSFR, le bouton fait la même chose que la touche Entrée\n var container = document.getElementById(self._addUID(\"GPautocompleteResults\"));\n var curr = container.getElementsByClassName(\"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\");\n var list = container.getElementsByClassName(\"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\");\n\n // si aucune suggestion, on ne va pas plus loin !\n var length = list.length;\n if (!length) {\n return;\n }\n\n var current = null;\n\n // si aucun item courant, on prend le 1er !\n if (!curr.length) {\n current = list[0];\n current.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\";\n current.style.color = \"#000000\";\n current.style[\"background-color\"] = \"#CEDBEF\";\n } else {\n current = curr[0];\n }\n current.click();\n return;\n }\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n if (status) {}\n\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n var showAdvancedSearch = document.getElementById(self._addUID(\"GPshowAdvancedSearch\"));\n if (showAdvancedSearch) {\n showAdvancedSearch.style.display = null;\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n var showGeolocate = document.getElementById(self._addUID(\"GPshowGeolocate\"));\n if (showGeolocate) {\n showGeolocate.style.display = null;\n }\n var showCoordinate = document.getElementById(self._addUID(\"GPshowSearchByCoordinate\"));\n if (showCoordinate) {\n showCoordinate.style.display = null;\n }\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false; // FIXME form[id^=GPsearchInput] = #GPsearchInput ?\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n self.onShowSearchEngineClick(e);\n });\n\n return button;\n },\n\n /**\n * Simple search input\n * @param {String} placeholder - placeholder\n *\n * @returns {DOMElement} DOM element\n */\n _createSearchInputElement : function (placeholder) {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GPsearchInput\");\n form.className = \"gpf-panel__content fr-modal__content\";\n // Open geocode results panel when submitting the input\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n if (document.getElementById(self._addUID(\"GPsearchInputText\")).value === \"\") {\n return false;\n }\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n // cf. FIXME\n // document.querySelector(\"#GPsearchInput input\").blur ();\n\n // gestionnaire d'evenement :\n // on récupère la valeur de saisie pour requête sur le service de geocodage\n self.onGeocodingSearchSubmit(e);\n return false;\n });\n\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPsearchInputText\");\n input.className = \"GPsearchInputText gpf-input fr-input\";\n input.type = \"text\";\n input.placeholder = placeholder;\n input.autocomplete = \"off\";\n // Manage autocomplete list appearance when filling the address input\n input.addEventListener(\"keyup\", function (e) {\n var charCode = e.which || e.keyCode;\n if (charCode === 13 || charCode === 10 || charCode === 38 || charCode === 40) {\n return;\n }\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n if (input.value.length > 2) {\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n } else {\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n // gestionnaire d'evenement :\n // on récupère la valeur de saisie pour requête sur le service d'autocompletion\n self.onAutoCompleteSearchText(e);\n });\n\n // FIXME ce code interfere avec le click sur la liste des suggested locations !\n // input.addEventListener(\"blur\", function (e) {\n // document.getElementById(self._addUID(\"GPautoCompleteList\")).style.display = \"none\";\n // });\n\n input.addEventListener(\"keydown\", function (e) {\n // FIXME\n // l'action clavier 'enter (13)' lance le submit de la form !\n // Ce comportement n'est pas souhaité car le submit execute un geocodage !\n // Il faut donc trouver le moyen d'eviter le submit sur un return venant\n // seulement d'une selection de suggestion...\n\n var charCode = e.which || e.keyCode;\n if (charCode === 13) {\n e.preventDefault();\n }\n var container = document.getElementById(self._addUID(\"GPautocompleteResults\"));\n\n // si aucun container !?\n if (!container) {\n return;\n }\n\n var curr = container.getElementsByClassName(\"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\");\n var list = container.getElementsByClassName(\"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\");\n\n // si aucune suggestion, on ne va pas plus loin !\n var length = list.length;\n if (!length) {\n return;\n }\n\n var current = null;\n\n // si aucun item courant, on prend le 1er !\n if (!curr.length) {\n current = list[0];\n current.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\";\n current.style.color = \"#000000\";\n current.style[\"background-color\"] = \"#CEDBEF\";\n if (charCode !== 13) {\n return;\n }\n } else {\n current = curr[0];\n }\n\n var index = parseInt(ID.index(current.id), 10);\n var next = (index === length - 1) ? list[0] : list[index + 1];\n var prev = (index === 0) ? list[length - 1] : list[index - 1];\n\n current.style[\"background-color\"] = \"\";\n current.style.color = \"\";\n prev.style[\"background-color\"] = \"\";\n prev.style.color = \"\";\n next.style[\"background-color\"] = \"\";\n next.style.color = \"\";\n\n switch (charCode) {\n case 38: // arrow up\n current.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n prev.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\";\n prev.style.color = \"#000000\";\n prev.style[\"background-color\"] = \"#CEDBEF\";\n current.scrollIntoView();\n break;\n case 40: // arrow down\n current.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n next.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\";\n next.style.color = \"#000000\";\n next.style[\"background-color\"] = \"#CEDBEF\";\n current.scrollIntoView();\n break;\n case 13: // enter\n // cf. FIXME\n e.preventDefault();\n current.click(e);\n break;\n }\n\n current.focus();\n });\n\n form.appendChild(input);\n\n return form;\n },\n\n _createSearchResetElement : function () {\n // contexte d'execution\n var self = this;\n\n var buttonReset = document.createElement(\"button\");\n buttonReset.id = this._addUID(\"GPsearchInputReset\");\n buttonReset.className = \"GPshowOpen GPsearchInputReset gpf-btn gpf-btn-icon-reset gpf-btn-icon-search-reset fr-btn fr-btn--secondary gpf-btn--secondary\"; /* not use : fr-btn--close */\n buttonReset.setAttribute(\"aria-label\", \"Supprimer la recherche\");\n // Reset input\n buttonReset.addEventListener(\"click\", function (e) {\n // FIXME event déclenché sur la frappe \"return\" dans la zone de saisie !?\n document.getElementById(self._addUID(\"GPsearchInputText\")).value = \"\";\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n self.onSearchResetClick();\n });\n\n return buttonReset;\n },\n\n\n _createButtonsElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPbuttonsContainer\";\n return div;\n },\n\n _createFirstLineWrapper : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPsearchFirstLineWrapper\";\n return div;\n },\n\n _createRadioContainer : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPsearchRadioContainer\";\n return div;\n },\n\n _createRadioElements : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPsearchRadioElements\";\n var choiceLocations = document.createElement(\"div\");\n choiceLocations.className = \"GPsearchSplitChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w\";\n var inputLocations = document.createElement(\"input\");\n inputLocations.id = this._addUID(\"GPsearchSplitLocations\");\n inputLocations.type = \"radio\";\n inputLocations.name = \"GPsearchSplit\";\n inputLocations.value = \"address\";\n inputLocations.checked = true;\n\n choiceLocations.appendChild(inputLocations);\n\n var labelLocations = document.createElement(\"label\");\n labelLocations.className = \"gpf-label fr-label\";\n labelLocations.htmlFor = this._addUID(\"GPsearchSplitLocations\");\n labelLocations.title = \"Adresses\";\n labelLocations.innerHTML = \"Adresses\";\n choiceLocations.appendChild(labelLocations);\n if (inputLocations.addEventListener) {\n inputLocations.addEventListener(\"change\", function () {\n if (inputLocations.checked) {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n } else {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n }\n });\n } else if (inputLocations.attachEvent) {\n inputLocations.attachEvent(\"onchange\", function () {\n if (inputLocations.checked) {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n } else {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n }\n });\n }\n\n var choiceData = document.createElement(\"div\");\n choiceData.className = \"GPsearchSplitChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w\";\n var inputData = document.createElement(\"input\");\n inputData.id = this._addUID(\"GPsearchSplitData\");\n inputData.type = \"radio\";\n inputData.name = \"GPsearchSplit\";\n inputData.value = \"data\";\n\n choiceData.appendChild(inputData);\n\n var labelData = document.createElement(\"label\");\n labelData.className = \"gpf-label fr-label\";\n labelData.htmlFor = this._addUID(\"GPsearchSplitData\");\n labelData.title = \"Cartes et données\";\n labelData.innerHTML = \"Cartes et données\";\n choiceData.appendChild(labelData);\n if (inputData.addEventListener) {\n inputData.addEventListener(\"change\", function () {\n if (inputData.checked) {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n } else {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n }\n });\n } else if (inputData.attachEvent) {\n inputData.attachEvent(\"onchange\", function () {\n if (inputData.checked) {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n } else {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n }\n });\n }\n\n div.appendChild(choiceLocations);\n div.appendChild(choiceData);\n\n return [div, inputLocations, inputData];\n },\n\n /**\n * Show advanced search panel\n *\n * @returns {DOMElement} DOM element\n */\n _createShowAdvancedSearchElement : function () {\n // contexte d'execution\n var self = this;\n\n var span = document.createElement(\"span\");\n span.id = this._addUID(\"GPshowAdvancedSearch\");\n span.className = \"GPshowOpen GPshowAdvancedSearch\";\n span.innerText = \"Recherche avancée\";\n span.setAttribute(\"tabindex\", \"0\");\n span.setAttribute(\"aria-pressed\", false);\n\n // Open advanced search\n span.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n\n var id = \"#GPsearchInput-\" + self._uid;\n if (status) {\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n } else {\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n document.querySelector(id + \" input\").disabled = true;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = true;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = true;\n }\n }\n\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.getElementById(self._addUID(\"GPshowSearchByCoordinate\")).setAttribute(\"aria-pressed\", false);\n });\n\n return span;\n },\n\n /**\n * Show geolocate button\n *\n * @returns {DOMElement} DOM element\n */\n _createShowGeolocateElement : function () {\n // contexte d'execution\n var self = this;\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowGeolocate\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowGeolocate gpf-btn gpf-btn-icon-search-geolocate fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w\";\n button.title = \"Activer la géolocalisation\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n\n // Open advanced search\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n if (status) {\n // somme stuff...\n }\n self.onShowSearchGeolocateClick(e);\n });\n\n return button;\n },\n\n /**\n * Show search by coordinate button\n *\n * @returns {DOMElement} DOM element\n */\n _createShowSearchByCoordinateElement : function () {\n // contexte d'execution\n var self = this;\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowSearchByCoordinate\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowSearchByCoordinate gpf-btn gpf-btn-icon-search-coordinate fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w\";\n button.title = \"Ouvrir la recherche par coordonnées\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n\n // Open advanced search\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n var id = \"#GPsearchInput-\" + self._uid;\n if (status) {\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.querySelector(id + \" input\").disabled = false;\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n } else {\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n document.querySelector(id + \" input\").disabled = true;\n document.querySelector(id + \" .GPsearchInputReset\").disabled = true;\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = true;\n }\n }\n\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).setAttribute(\"aria-pressed\", false);\n });\n\n return button;\n },\n\n\n\n // ################################################################### //\n // ################### Methods of advanced search #################### //\n // ################################################################### //\n\n /**\n * Advanced search panel\n *\n * FIXME\n * don't call this._createAdvancedSearchPanelHeaderElement\n * don't call this._createAdvancedSearchPanelFormElement\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchPanelElement : function () {\n var div = document.createElement(\"dialog\");\n div.id = this._addUID(\"GPadvancedSearchPanel\");\n div.className = \"GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal\";\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n // div.appendChild(this._createAdvancedSearchPanelHeaderElement ());\n // div.appendChild(this._createAdvancedSearchPanelFormElement ());\n\n return div;\n },\n\n _createAdvancedSearchPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Geocoding results\n *\n * FIXME\n * don't call this._createGeocodeResultsListElement\n *\n * @returns {DOMElement} DOM element\n */\n _createGeocodeResultsElement : function () {\n var div = document.createElement(\"dialog\");\n div.id = this._addUID(\"GPgeocodeResultsList\");\n div.className = \"GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal\";\n\n div.appendChild(this._createGeocodeResultsHeaderElement());\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n // div.appendChild(this._createGeocodeResultsListElement ());\n\n return div;\n },\n\n _createGeocodeResultsDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Autocompletion results\n *\n * FIXME\n * don't call this._createAutoCompleteListElement\n *\n * @returns {DOMElement} DOM element\n */\n _createAutoCompleteElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPautoCompleteList\");\n div.className = \"GPautoCompleteList GPelementHidden gpf-panel fr-modal gpf-hidden \"; // GPpanel ?\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n // div.appendChild(this._createAutoCompleteListElement ());\n\n return div;\n },\n\n /**\n * Coordinate search panel\n *\n * FIXME\n * don't call this._createCoordinateSearchPanelHeaderElement\n * don't call this._createCoordinateSearchPanelFormElement\n *\n * @returns {DOMElement} DOM element\n */\n _createCoordinateSearchPanelElement : function () {\n var div = document.createElement(\"dialog\");\n div.id = this._addUID(\"GPcoordinateSearchPanel\");\n div.className = \"GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal\";\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n // div.appendChild(this._createCoordinateSearchPanelHeaderElement ());\n // div.appendChild(this._createCoordinateSearchPanelFormElement ());\n\n return div;\n },\n\n _createCoordinateSearchPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n // ################################################################### //\n // ################### Autocompletion container ###################### //\n // ################################################################### //\n\n /**\n * Autocompletion results list.\n *\n * @returns {DOMElement} DOM element\n */\n _createAutoCompleteListElement : function () {\n // contexte d'execution\n var self = this;\n\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPautocompleteResults\");\n container.className = \"\";\n\n if (container.addEventListener) {\n container.addEventListener(\"click\", function (e) {\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }, false);\n } else if (container.attachEvent) {\n container.attachEvent(\"onclick\", function (e) {\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n });\n }\n\n // Proposals are dynamically filled in Javascript by autocomplete or search service\n //
...
\n\n return container;\n },\n\n _createAutoCompletedLocationContainer () {\n var container = document.createElement(\"select\");\n container.id = this._addUID(\"GPautocompleteResultsLocation\");\n container.className = \"GPelementHidden gpf-hidden gpf-select\";\n container.size = 20;\n container.autofocus = true;\n return container;\n },\n _createAutoCompletedLocationTitleElement () {\n var container = document.getElementById(this._addUID(\"GPautocompleteResultsLocation\"));\n var label = document.createElement(\"option\");\n label.className = \"GPlabel GPlabelTitle gpf-label fr-label\";\n label.innerHTML = \"Lieux et adresses\";\n container.appendChild(label);\n },\n\n /**\n * Autocompletion result.\n * Proposals are dynamically filled in Javascript by autocomplete service\n *\n * TODO formaliser le contenu des reponse\n *\n * @param {Object} location - suggested or geocoded location results\n * @param {Number} id - ID\n */\n _createAutoCompletedLocationElement : function (location, id) {\n // contexte d'execution\n var self = this;\n\n var container = document.getElementById(this._addUID(\"GPautocompleteResultsLocation\"));\n\n var div = document.createElement(\"option\");\n div.id = this._addUID(\"AutoCompletedLocation_\" + id);\n div.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n var value = GeocodeUtils.getSuggestedLocationFreeform(location);\n div.innerHTML = value;\n div.title = value;\n if (div.addEventListener) {\n div.addEventListener(\"click\", function (e) {\n self.onAutoCompletedResultsItemClick(e);\n }, false);\n } else if (div.attachEvent) {\n div.attachEvent(\"onclick\", function (e) {\n self.onAutoCompletedResultsItemClick(e);\n });\n }\n\n container.appendChild(div);\n },\n\n _createSearchedSuggestContainer () {\n var container = document.createElement(\"select\");\n container.id = this._addUID(\"GPautocompleteResultsSuggest\");\n container.className = \"GPelementHidden gpf-hidden gpf-select\";\n container.size = 6;\n container.autofocus = true;\n return container;\n },\n _createSearchedSuggestTitleElement () {\n var container = document.getElementById(this._addUID(\"GPautocompleteResultsSuggest\"));\n var label = document.createElement(\"option\");\n label.className = \"GPlabel GPlabelTitle gpf-label fr-label\";\n label.innerHTML = \"Cartes et données\";\n container.appendChild(label);\n },\n\n /**\n * Autocompletion result of search service.\n * Proposals are dynamically filled in Javascript by autocomplete service\n *\n *\n * @param {Object} suggest - suggested results\n * @param {Number} id - ID\n */\n _createSearchedSuggestElement : function (suggest, id) {\n // contexte d'execution\n var self = this;\n\n var container = document.getElementById(this._addUID(\"GPautocompleteResultsSuggest\"));\n\n var div = document.createElement(\"option\");\n div.id = this._addUID(\"AutoCompletedSuggest_\" + id);\n div.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n div.innerHTML = suggest.title + \" (\" + suggest.service + \")\";\n div.dataset.layer = suggest.name;\n div.title = `${suggest.description} (nom technique : ${suggest.name})`;\n if (div.addEventListener) {\n div.addEventListener(\"click\", function (e) {\n self.onSearchedResultsItemClick(e);\n }, false);\n } else if (div.attachEvent) {\n div.attachEvent(\"onclick\", function (e) {\n self.onSearchedResultsItemClick(e);\n });\n }\n\n container.appendChild(div);\n },\n\n // ################################################################### //\n // ############### Geocoding with advanced container ################# //\n // ################################################################### //\n\n /**\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchPanelHeaderElement : function () {\n // contexte d'execution\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = \"Recherche avancée\";\n container.appendChild(divTitle);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPadvancedSearchClose\");\n divClose.className = \"GPpanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer la recherche avancée\";\n\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n // document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).style.display = \"inline-block\";\n document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).setAttribute(\"aria-pressed\", false);\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n // document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).style.display = \"inline-block\";\n document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).setAttribute(\"aria-pressed\", false);\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n\n /**\n * @param {Object[]} advancedSearchCodes - codes\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchPanelFormElement : function (advancedSearchCodes) {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GPadvancedSearchForm\");\n form.className = \"gpf-panel__content fr-modal__content\";\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n // data\n var data = [];\n // liste des attributs de la ressource de geocodage\n var id = \"#GPadvancedSearchFilters-\" + self._uid;\n var matchesFilters = document.querySelectorAll(id + \" > div > div > input,select#category\");\n for (var i = 0; i < matchesFilters.length; i++) {\n var element = matchesFilters[i];\n data.push({\n key : element.name,\n value : element.value\n });\n }\n\n // gestionnaire d'evenement :\n // on récupère les valeurs de saisies pour requête sur le service de geocodage\n self.onGeocodingAdvancedSearchSubmit(e, data);\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n\n return false;\n });\n\n var div = document.createElement(\"div\");\n div.className = \"GPflexInput gpf-flex-column \";\n\n var label = document.createElement(\"label\");\n label.className = \"GPadvancedSearchCodeLabel gpf-label fr-label\";\n label.innerHTML = \"Recherche par\";\n div.appendChild(label);\n\n var select = this._createAdvancedSearchFormCodeElement(advancedSearchCodes);\n div.appendChild(select);\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n\n // var filters = this._createAdvancedSearchFormFiltersElement ();\n // form.appendChild(filters);\n\n // var input = this._createAdvancedSearchFormInputElement ();\n // form.appendChild(input);\n\n form.appendChild(div);\n\n return form;\n },\n\n /**\n * @param {Object[]} codes - codes\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFormCodeElement : function (codes) {\n // contexte d'execution\n var self = this;\n\n var select = document.createElement(\"select\");\n select.id = this._addUID(\"GPadvancedSearchCode\");\n select.title = \"Choisir un type de recherche\";\n select.className = \"GPadvancedSearchCode gpf-select fr-select\";\n select.addEventListener(\"change\", function (e) {\n // var idx = e.target.selectedIndex;\n // var value = e.target.options[idx].value;\n // gestionnaire d'evenement :\n // permet de recuperer des informations diverses...\n self.onGeocodingAdvancedSearchCodeChange(e);\n }, false);\n\n // liste statique au cas où des codes n'ont pas été passés en entrée\n if (!codes) {\n codes = [{\n id : \"PositionOfInterest\",\n title : \"Lieux/toponymes\"\n }, {\n id : \"StreetAddress\",\n title : \"Adresses\"\n }, {\n id : \"CadastralParcel\",\n title : \"Parcelles cadastrales\"\n }];\n }\n\n for (var i = 0; i < codes.length; i++) {\n var option = document.createElement(\"option\");\n option.value = codes[i].id;\n option.text = codes[i].title;\n select.appendChild(option);\n }\n\n return select;\n },\n\n /**\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFormInputElement : function () {\n var input = document.createElement(\"input\");\n input.type = \"submit\";\n input.id = this._addUID(\"GPadvancedSearchSubmit\");\n input.className = \"GPsubmit gpf-btn gpf-btn-icon-submit fr-btn fr-btn--secondary gpf-btn--secondary\";\n input.value = \"Chercher\";\n\n return input;\n },\n\n /**\n * Filters geocoding.\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFormFiltersElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPadvancedSearchFilters\");\n return container;\n },\n\n /**\n * Create filter container for resources :\n * \"PositionOfInterest\", \"StreetAddress\", ...\n *\n * @param {String} code - code of geocoding resource\n * @param {Boolean} display - display\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFiltersTableElement : function (code, display) {\n var container = document.createElement(\"div\");\n container.id = this._addUID(code);\n if (!display) {\n container.style.display = \"none\";\n }\n\n return container;\n },\n\n /**\n * Create filter attribut for a resource :\n * \"PositionOfInterest\", \"StreetAddress\", ...\n * Research filters are filled in Javascript depending on developer choice\n *\n * @param {Object} filterAttributes - filter attributes :\n * @param {String} filterAttributes.code - code of geocoding resource\n * @param {String} filterAttributes.name - ID\n * @param {String} filterAttributes.title - label\n * @param {String} filterAttributes.description - description\n * @param {String} filterAttributes.value - value\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFiltersAttributElement : function (filterAttributes) {\n // INFORMATION\n // cette methode peut être appelée si le document n'existe pas, elle\n // permet ainsi de creer une div sans insertion dans le container...\n\n var container = null;\n var name = filterAttributes.name;\n var title = filterAttributes.title;\n var description = filterAttributes.description;\n var code = filterAttributes.code;\n var value = filterAttributes.value;\n\n var div = document.createElement(\"div\");\n div.className = \"GPflexInput gpf-flex-column \";\n\n var label = document.createElement(\"label\");\n label.className = \"GPadvancedSearchFilterLabel gpf-label fr-label\";\n label.htmlFor = name;\n label.title = description || title;\n label.innerHTML = title;\n div.appendChild(label);\n\n if (name === \"category\") {\n var select = document.createElement(\"select\");\n select.id = name;\n select.name = name;\n select.title = title;\n select.className = \"GPadvancedSearchFilterInput gpf-select fr-select\";\n if (value) {\n if (Array.isArray(value)) {\n for (var i = 0; i < value.length; i++) {\n var option = document.createElement(\"option\");\n option.value = value[i];\n option.text = value[i];\n select.appendChild(option);\n }\n }\n }\n div.appendChild(select);\n } else {\n var input = document.createElement(\"input\");\n input.id = name;\n input.className = \"GPadvancedSearchFilterInput gpf-input fr-input\";\n input.type = \"text\";\n input.name = name;\n if (value) {\n if (Array.isArray(value)) {\n var listId = name + \"_list\";\n input.setAttribute(\"list\", listId);\n var dl = document.createElement(\"datalist\");\n dl.id = listId;\n for (var i = 0; i < value.length; ++i) {\n var option = document.createElement(\"option\");\n option.value = value[i];\n dl.appendChild(option);\n }\n div.appendChild(dl);\n } else {\n input.value = value;\n }\n }\n div.appendChild(input);\n }\n\n container = document.getElementById(this._addUID(code));\n\n if (container) {\n container.appendChild(div);\n } else {\n // le container, c'est la div !\n container = div;\n }\n\n return container;\n },\n\n // ################################################################### //\n // ################## Geocoding results container #################### //\n // ################################################################### //\n\n /**\n * @returns {DOMElement} DOM element\n */\n _createGeocodeResultsHeaderElement : function () {\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = \"Résultats de la recherche\";\n container.appendChild(divTitle);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPgeocodeResultsClose\");\n divClose.className = \"GPpanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer la fenêtre de résultats\";\n\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n\n /**\n * Geocoding results list.\n *\n * @returns {DOMElement} DOM element\n */\n _createGeocodeResultsListElement : function () {\n // contexte d'execution\n var self = this;\n\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPgeocodeResults\");\n container.className = \"gpf-panel__list\";\n container.setAttribute(\"tabindex\", \"0\");\n\n if (container.addEventListener) {\n container.addEventListener(\"click\", function (e) {\n if (!e.ctrlKey) {\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n self.onGeocodedResultsItemClick(e);\n }, false);\n } else if (container.attachEvent) {\n container.attachEvent(\"onclick\", function (e) {\n if (!e.ctrlKey) {\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n self.onGeocodedResultsItemClick(e);\n });\n }\n // Results are dynamically filled in Javascript by geocoding service\n //
...
\n\n return container;\n },\n\n /**\n * Geocoding result.\n * Results are dynamically filled in Javascript by geocoding service\n *\n * TODO formaliser le contenu des reponses\n * FIXME formater la reponse en amont !\n *\n * @param {Object} location - suggested or geocoded location results\n * @param {Number} id - ID\n */\n _createGeocodedLocationElement : function (location, id) {\n var container = document.getElementById(this._addUID(\"GPgeocodeResults\"));\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GeocodedLocation_\" + id);\n div.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n\n if (typeof location === \"string\") {\n div.innerHTML = location;\n } else {\n div.innerHTML = GeocodeUtils.getGeocodedLocationFreeform(location);\n }\n\n container.appendChild(div);\n },\n\n // ################################################################### //\n // ################## Coordinate search container #################### //\n // ################################################################### //\n\n _createCoordinateSearchPanelHeaderElement () {\n // contexte d'execution\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = \"Recherche par coordonnées\";\n container.appendChild(divTitle);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPcoordinateSearchClose\");\n divClose.className = \"GPpanelClose GPcoordinateSearchClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer la recherche par coordonnées\";\n\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n document.getElementById(self._addUID(\"GPshowSearchByCoordinate\")).setAttribute(\"aria-pressed\", false);\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n self.onCoordinateSearchClose();\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n document.getElementById(self._addUID(\"GPshowSearchByCoordinate\")).setAttribute(\"aria-pressed\", false);\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n self.onCoordinateSearchClose();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n _createCoordinateSearchPanelFormElement () {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GPcoordinateSearchForm\");\n form.className = \"gpf-panel__content fr-modal__content\";\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n self.onShowSearchByCoordinateClick();\n return false;\n });\n\n return form;\n },\n\n __createCoordinateSearchDivElement () {\n var div = document.createElement(\"div\");\n div.className = \"GPflexInput gpf-flex-column \";\n return div;\n },\n\n _createCoordinateSearchSystemsLabelElement () {\n var label = document.createElement(\"label\");\n label.className = \"GPcoordinateSearchSystemsLabel gpf-label fr-label\";\n label.innerHTML = \"Système de référence\";\n return label;\n },\n _setCoordinateSearchSystemsSelectElement (systems) {\n if (document.getElementById(this._addUID(\"GPcoordinateSearchSystem\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchSystem\")).remove();\n }\n // contexte d'execution\n var context = this;\n\n var selectSystem = document.createElement(\"select\");\n selectSystem.id = this._addUID(\"GPcoordinateSearchSystem\");\n selectSystem.title = \"Choisir un système de réference\";\n selectSystem.className = \"GPselect GPcoordinateSearchSystemsSelect gpf-select fr-select\";\n selectSystem.addEventListener(\"change\", function (e) {\n context.onCoordinateSearchSystemChange(e);\n });\n\n for (var i = 0; i < systems.length; i++) {\n var obj = systems[i];\n var option = document.createElement(\"option\");\n option.value = obj.code;\n option.text = obj.label || i;\n // option.label = obj.label;\n selectSystem.appendChild(option);\n }\n\n return selectSystem;\n },\n\n _createCoordinateSearchUnitsLabelElement () {\n var label = document.createElement(\"label\");\n label.className = \"GPcoordinateSearchUnitsLabel gpf-label fr-label\";\n label.innerHTML = \"Unités\";\n return label;\n },\n _setCoordinateSearchUnitsSelectElement (units) {\n if (document.getElementById(this._addUID(\"GPcoordinateSearchUnits\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchUnits\")).remove();\n }\n // contexte d'execution\n var context = this;\n\n var selectUnits = document.createElement(\"select\");\n selectUnits.id = this._addUID(\"GPcoordinateSearchUnits\");\n selectUnits.title = \"Choisir un type d'unité\";\n selectUnits.className = \"GPselect GPcoordinateSearchUnitsSelect gpf-select fr-select\";\n selectUnits.addEventListener(\"change\", function (e) {\n context.onCoordinateSearchUnitsChange(e);\n });\n\n for (var j = 0; j < units.length; j++) {\n var obj = units[j];\n var option = document.createElement(\"option\");\n option.value = (obj.code) ? obj.code : j;\n option.text = obj.label || j;\n // option.label = obj.label;\n selectUnits.appendChild(option);\n }\n\n return selectUnits;\n },\n\n /**\n * update Label\n * @param {String} type - Geographical or Metric\n * @returns {DOMElement} label\n */\n _setCoordinateSearchLngLabelElement (type) {\n // type geographical ou metric\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLngLabel\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLngLabel\")).remove();\n }\n var labelLng = document.createElement(\"label\");\n labelLng.className = \"GPcoordinateSearchLabel gpf-label fr-label\";\n labelLng.id = this._addUID(\"GPcoordinateSearchLngLabel\");\n labelLng.htmlFor = \"coordinate-lng\";\n labelLng.innerHTML = (type === \"Geographical\") ? \"Longitude :\" : \"Y :\";\n\n return labelLng;\n },\n /**\n * update Input coordinate\n * @param {String} code - ex. DMS : degrés sexadecimaux\n * @returns {DOMElement} input\n */\n _setCoordinateSearchLngInputElement (code) {\n // code DMS ou other\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLngInput\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLngInput\")).remove();\n }\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLngDMS\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLngDMS\")).remove();\n }\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPcoordinateSearchLngInput\");\n input.className = \"GPcoordinateSearchInput gpf-input fr-input\";\n input.title = \"Saisir des coordonnées\";\n input.name = \"coordinate-lng\";\n input.type = \"number\";\n input.step = \"any\";\n input.required = \"\";\n switch (code) {\n case \"DMS\":\n input.title += \" géographiques (en sexa)\";\n input.className = \"GPelementHidden gpf-hidden\";\n return this._setCoordinateSearchLngDMSElement();\n break;\n case \"DEC\":\n input.title += \" géographiques (en decimal)\";\n input.min = \"-180\";\n input.max = \"180\";\n break;\n case \"M\":\n input.title += \" cartésiennes (en mètre)\";\n break;\n case \"KM\":\n input.title += \" cartésiennes (en kilomètre)\";\n break;\n default:\n break;\n }\n return input;\n },\n _setCoordinateSearchLngDMSElement () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPcoordinateSearchLngDMS\");\n div.innerHTML = `\n
\n \n \n \n \n \n \n \n \n \n \n
\n `;\n return div;\n },\n /**\n * update Label\n * @param {String} type - Geographical or Metric\n * @returns {DOMElement} label\n */\n _setCoordinateSearchLatLabelElement (type) {\n // type geographical ou metric\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLatLabel\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLatLabel\")).remove();\n }\n var labelLat = document.createElement(\"label\");\n labelLat.className = \"GPcoordinateSearchLabel gpf-label fr-label\";\n labelLat.id = this._addUID(\"GPcoordinateSearchLatLabel\");\n labelLat.htmlFor = \"coordinate-lat\";\n labelLat.innerHTML = (type === \"Geographical\") ? \"Latitude :\" : \"X :\";\n\n return labelLat;\n },\n /**\n * update Input coordinate\n * @param {String} code - ex. DMS : degrés sexadecimaux\n * @returns {DOMElement} input\n */\n _setCoordinateSearchLatInputElement (code) {\n // code DMS ou other\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLatInput\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLatInput\")).remove();\n }\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLatDMS\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLatDMS\")).remove();\n }\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPcoordinateSearchLatInput\");\n input.className = \"GPcoordinateSearchInput gpf-input fr-input\";\n input.title =\"Saisir des coordonnées\";\n input.name = \"coordinate-lat\";\n input.type = \"number\";\n input.step = \"any\";\n input.required = \"\";\n switch (code) {\n case \"DMS\":\n input.title += \" géographiques (en sexa)\";\n input.className = \"GPelementHidden gpf-hidden\";\n return this._setCoordinateSearchLatDMSElement();\n break;\n case \"DEC\":\n input.title += \" géographiques (en decimal)\";\n input.min = \"-180\";\n input.max = \"180\";\n break;\n case \"M\":\n input.title += \" cartésiennes (en mètre)\";\n break;\n case \"KM\":\n input.title += \" cartésiennes (en kilomètre)\";\n break;\n default:\n break;\n }\n return input;\n },\n _setCoordinateSearchLatDMSElement () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPcoordinateSearchLatDMS\");\n div.innerHTML = `\n
\n \n \n \n \n \n \n \n \n \n \n
\n `;\n return div;\n },\n\n /**\n * submit\n * @returns {DOMElement} input\n */\n _createCoordinateSearchSubmitElement () {\n var input = document.createElement(\"input\");\n input.type = \"submit\";\n input.id = this._addUID(\"GPcoordinateSearchSubmit\");\n input.className = \"GPsubmit gpf-btn gpf-btn-icon-submit fr-btn fr-btn--secondary gpf-btn--secondary\";\n input.value = \"Chercher\";\n return input;\n },\n};\n\nexport default SearchEngineDOM;\n","// import CSS\nimport \"../../CSS/Controls/SearchEngine/GPFsearchEngine.css\";\n// import \"../../CSS/Controls/SearchEngine/GPFsearchEngineStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Control from \"../Control\";\nimport Widget from \"../Widget\";\nimport Overlay from \"ol/Overlay\";\nimport {\n transform as olProjTransform,\n get as olProjGet,\n transformExtent as olProjTransformExtent\n} from \"ol/proj\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Config from \"../../Utils/Config\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Utils from \"../../Utils/Helper\";\nimport Markers from \"../Utils/Markers\";\nimport Interactions from \"../Utils/Interactions\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport MathUtils from \"../../Utils/MathUtils\";\nimport SearchEngineUtils from \"../../Utils/SearchEngineUtils\";\nimport GeocodeUtils from \"../../Utils/GeocodeUtils\";\nimport CRS from \"../../CRS/CRS\";\n// import local des layers\nimport GeoportalWMS from \"../../Layers/LayerWMS\";\nimport GeoportalWMTS from \"../../Layers/LayerWMTS\";\nimport GeoportalMapBox from \"../../Layers/LayerMapBox\";\n// Service\nimport Search from \"../../Services/Search\";\n// DOM\nimport SearchEngineDOM from \"./SearchEngineDOM\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar logger = Logger.getLogger(\"searchengine\");\n\n/**\n * @classdesc\n * SearchEngine control\n *\n * @constructor\n * @extends {ol.control.Control}\n * @type {ol.control.SearchEngine}\n * @alias ol.control.SearchEngine\n * @param {Object} options - control options\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {String} [options.apiKey] - API key. The key \"calcul\" is used by default.\n * @param {Boolean} [options.ssl = true] - use of ssl or not (default true, service requested using https protocol)\n * @param {Boolean} [options.collapsed = true] - collapse mode, true by default\n * @param {Boolean} [options.collapsible = true] - force control to be collapsed or not, true by default.\n * @param {String} [options.direction = \"start\"] - TODO : position of picto, by default : \"start\"\n * @param {String} [options.placeholder] - Placeholder in search bar. Default is \"Rechercher un lieu, une adresse\".\n * @param {Boolean} [options.displayMarker = true] - set a marker on search result, defaults to true.\n * @param {String} [options.markerStyle = \"lightOrange\"] - Marker style. Currently possible values are \"lightOrange\" (default value), \"darkOrange\", \"red\" and \"turquoiseBlue\".\n * @param {String} [options.markerUrl = \"\"] - Marker url. By default, if not specified, use option markerStyle. Otherwise, you can added a http url or a base64 image.\n * @param {Boolean} [options.splitResults = true] - False to disable layers search\n * @param {Boolean} [options.displayButtonAdvancedSearch = false] - False to disable advanced search tools (it will not be displayed). Default is false (not displayed)\n * @param {Boolean} [options.displayButtonGeolocate = false] - False to disable advanced search tools (it will not be displayed). Default is false (not displayed)\n * @param {Boolean} [options.displayButtonCoordinateSearch = false] - False to disable advanced search tools (it will not be displayed). Default is false (not displayed)\n * @param {Boolean} [options.displayButtonClose = true] - False to disable advanced search tools (it will not be displayed). Default is true (displayed)\n * @param {Object} [options.coordinateSearch] - coordinates search options.\n * @param {DOMElement} [options.coordinateSearch.target = null] - TODO : target location of results window. By default under the search bar.\n * @param {Array} [options.coordinateSearch.units] - list of coordinates units, to be displayed in control units list.\n * Values may be \"DEC\" (decimal degrees), \"DMS\" (sexagecimal) for geographical coordinates,\n * and \"M\" or \"KM\" for metric coordinates\n * @param {Array} [options.coordinateSearch.systems] - list of projection systems, default are Geographical (\"EPSG:4326\"), Web Mercator (\"EPSG:3857\") and Lambert 93 (\"EPSG:2154\").\n * Each array element (=system) is an object with following properties :\n * @param {String} [options.coordinateSearch.systems.crs] - Proj4 crs alias (from proj4 defs). e.g. : \"EPSG:4326\". Required\n * @param {String} [options.coordinateSearch.systems.label] - CRS label to be displayed in control. Default is crs code (e.g. \"EPSG:4326\")\n * @param {String} [options.coordinateSearch.systems.type] - CRS units type for coordinates conversion : \"Geographical\" or \"Metric\". Default: \"Geographical\"\n * @param {Object} [options.advancedSearch] - advanced search options for geocoding (filters). Properties can be found among geocode options.filterOptions (see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~geocode Gp.Services.geocode})\n * @param {DOMElement} [options.advancedSearch.target = null] - TODO : target location of results window. By default under the search bar.\n * @param {Object} [options.resources] - resources to be used by geocode and autocompletion services :\n * @param {String} [options.resources.geocode = \"location\"] - resources geocoding, by default : \"location\"\n * @param {Array} [options.resources.autocomplete] - resources autocompletion, by default : [\"PositionOfInterest\", \"StreetAddress\"]\n * @param {Boolean} [options.resources.search = false] - false to disable search service, by default : \"false\"\n * @param {Object} [options.searchOptions = {}] - options of search service\n * @param {Boolean} [options.searchOptions.addToMap = true] - add layer automatically to map, defaults to true.\n * @param {String} [options.searchOptions.filterServices] - filter on a list of search services, each field is separated by a comma. \"WMTS,TMS\" by default\n * @param {String} [options.searchOptions.filterWMTSPriority] - filter on priority WMTS layer in search, each field is separated by a comma. \"PLAN.IGN,ORTHOIMAGERY.ORTHOPHOTOS\" by default\n * @param {Boolean} [options.searchOptions.filterLayersPriority = false] - filter on priority layers in search, false by default\n * @param {String} [options.searchOptions.filterVectortiles] - filter on list of search layers only on service TMS, each field is separated by a comma. \"PLAN.IGN, ...\" by default\n * @param {Boolean} [options.searchOptions.updateVectortiles = false] - updating the list of search layers only on service TMS\n * @param {Object} [options.searchOptions.serviceOptions] - options of search service\n * @param {Sring} [options.searchOptions.serviceOptions.url] - url of service\n * @param {String} [options.searchOptions.serviceOptions.index] - index of search, \"standard\" by default\n * @param {String} [options.searchOptions.serviceOptions.fields] - list of search fields, each field is separated by a comma. \"title,layer_name\" by default\n * @param {Number} [options.searchOptions.serviceOptions.size] - number of response in the service. 1000 by default\n * @param {Number} [options.searchOptions.serviceOptions.maximumResponses] - number of results in the response. 10 by default\n * @param {Object} [options.geocodeOptions = {}] - options of geocode service (see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~geocode Gp.Services.geocode})\n * @param {Object} [options.geocodeOptions.serviceOptions] - options of geocode service\n * @param {Object} [options.autocompleteOptions = {}] - options of autocomplete service (see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~autoComplete Gp.Services.autoComplete})\n * @param {Object} [options.autocompleteOptions.serviceOptions] - options of autocomplete service\n * @param {Boolean} [options.autocompleteOptions.triggerGeocode = false] - trigger a geocoding request if the autocompletion does not return any suggestions, false by default\n * @param {Number} [options.autocompleteOptions.triggerDelay = 1000] - waiting time before sending the geocoding request, 1000ms by default\n * @param {Number} [options.autocompleteOptions.maximumEntries] - maximum autocompletion results we want to display\n * @param {Boolean} [options.autocompleteOptions.prettifyResults = false] - apply a filter/prettifier function to clean or prettify autocomplete entries\n * @param {Sting|Numeric|Function} [options.zoomTo] - zoom to results, by default, current zoom.\n * Value possible : auto or zoom level.\n * Possible to overload it with a function :\n * zoomTo : function (info) {\n * // do some stuff...\n * return zoom;\n * }\n * @fires searchengine:autocomplete:click\n * @fires searchengine:geocode:click\n * @fires searchengine:search:click\n * @fires searchengine:geolocation:click\n * @fires searchengine:coordinates:click\n * @todo option : direction (start|end) de la position du picto (loupe)\n * @todo option : choix du target pour les fenetres geocodage ou recherche par coordonnées\n * @example\n * var SearchEngine = ol.control.SearchEngine({\n * apiKey : \"CLEAPI\",\n * collapsed : true,\n * collapsible : true,\n * displayButtonAdvancedSearch : true,\n * displayButtonGeolocate : true,\n * displayButtonCoordinateSearch : true,\n * markerStyle : \"lightOrange\" // \"http://...\" or \"data/base64...\"\n * resources : {\n * geocode : [\"StreetAddress\", \"PositionOfInterest\"],\n * autocomplete : [\"StreetAddress\"],\n * search : false\n * },\n * advancedSearch : {\n * target : document.getElementById(\"dialog\"),\n * PositionOfInterest : [{name : \"municipality\", title : \"Ville\"}],\n * StreetAddress : [{...}]\n * },\n * coordinateSearch : {\n * target : null\n * systems : [\n * {\n * \"crs\" : \"EPSG:3857\",\n * \"label\" : \"Web Mercator\",\n * \"type\" : \"Metric\"\n * },\n * {\n * \"crs\" : \"EPSG:4326\",\n * \"label\" : \"Géographiques\",\n * \"type\" : \"Geographical\"\n * }\n * ],\n * units : [\"DEC\", \"DMS\"]\n * },\n * geocodeOptions : {},\n * autocompleteOptions : {},\n * searchOptions : {}\n * });\n *\n * SearchEngine.on(\"searchengine:autocomplete:click\", function (e) {\n * console.warn(\"autocomplete\", e.location);\n * });\n * SearchEngine.on(\"searchengine:search:click\", function (e) {\n * console.warn(\"search\", e.suggest);\n * });\n * SearchEngine.on(\"searchengine:geocode:click\", function (e) {\n * console.warn(\"geocode\", e.location);\n * });\n * SearchEngine.on(\"searchengine:geolocation:click\", function (e) {\n * console.warn(\"geolocation\", e.);\n * });\n * SearchEngine.on(\"searchengine:coordinate:click\", function (e) {\n * console.warn(\"coordinate\", e.);\n * });\n */\nvar SearchEngine = class SearchEngine extends Control {\n\n /**\n * See {@link ol.control.SearchEngine}\n * @module SearchEngine\n * @alias module:~controls/SearchEngine\n * @param {*} options - options\n * @example\n * import SearchEngine from \"gpf-ext-ol/controls/SearchEngine\"\n * ou\n * import { SearchEngine } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof SearchEngine)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"SearchEngine\";\n // initialisation du composant\n this.initialize(options);\n\n // // Widget main DOM container\n this.container = this._initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this.container) : this.element = this.container;\n\n return this;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (!map) {\n this._clearResults();\n }\n\n // mode \"collapsed\"\n if (!this.collapsed) {\n this._showSearchEngineButton.setAttribute(\"aria-pressed\", true);\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Returns true if widget is collapsed (minimized), false otherwise\n *\n * @returns {Boolean} collapsed - true if widget is collapsed\n */\n getCollapsed () {\n return this.collapsed;\n }\n\n /**\n * Collapse or display widget main container\n *\n * @param {Boolean} collapsed - True to collapse widget, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.log(\"[ERROR] SearchEngine:setCollapsed - missing collapsed parameter\");\n return;\n }\n\n if (!this.options.collapsible) {\n return; // on interdit le mode pliable !\n }\n\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n\n this._showSearchEngineButton.click();\n this.collapsed = collapsed;\n }\n\n /**\n * Get locations data from geocode service\n *\n * @returns {Object} data - locations\n */\n getData () {\n return this._geocodedLocations;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize SearchEngine control (called by SearchEngine constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n this._checkInputOptions(options);\n\n // define default options\n this.options = {\n collapsed : true,\n collapsible : true,\n zoomTo : \"\",\n resources : {\n geocode : [],\n autocomplete : [],\n search : false\n },\n displayButtonClose : true,\n displayButtonAdvancedSearch : false,\n displayButtonGeolocate : false,\n displayButtonCoordinateSearch : false,\n advancedSearch : {},\n coordinateSearch : {},\n searchOptions : {\n addToMap : true,\n serviceOptions : {\n maximumResponses : 5,\n }\n },\n geocodeOptions : {\n serviceOptions : {}\n },\n autocompleteOptions : {\n serviceOptions : {\n maximumResponses : 5,\n },\n triggerGeocode : false,\n triggerDelay : 1000,\n prettifyResults : false\n },\n displayMarker : true,\n markerStyle : \"lightOrange\",\n markerUrl : \"\",\n placeholder : \"Rechercher un lieu, une adresse\",\n splitResults : true,\n };\n\n // merge with user options\n Utils.mergeParams(this.options, options);\n if (this.options.resources.geocode === \"\") {\n this.options.resources.geocode = [\"PositionOfInterest\", \"StreetAddress\"];\n }\n if (this.options.resources.autocomplete.length === 0) {\n this.options.resources.autocomplete = [\"PositionOfInterest\", \"StreetAddress\"];\n }\n if (this.options.resources.search) {\n // configuration avec gestion des options surchargées du service\n if (this.options.searchOptions) {\n if (this.options.searchOptions.serviceOptions) {\n if (this.options.searchOptions.serviceOptions.url) {\n Search.setUrl(this.options.searchOptions.serviceOptions.url);\n }\n if (this.options.searchOptions.serviceOptions.fields) {\n Search.setFields(this.options.searchOptions.serviceOptions.fields);\n }\n if (this.options.searchOptions.serviceOptions.index) {\n Search.setIndex(this.options.searchOptions.serviceOptions.index);\n }\n if (this.options.searchOptions.serviceOptions.size) {\n Search.setSize(this.options.searchOptions.serviceOptions.size);\n }\n if (this.options.searchOptions.serviceOptions.maximumResponses) {\n Search.setMaximumResponses(this.options.searchOptions.serviceOptions.maximumResponses);\n }\n }\n if (this.options.searchOptions.filterServices) {\n Search.setFiltersByService(this.options.searchOptions.filterServices);\n }\n if (this.options.searchOptions.filterLayersPriority) {\n Search.setFiltersByLayerPriority(this.options.searchOptions.filterLayersPriority);\n }\n if (this.options.searchOptions.filterWMTSPriority) {\n Search.setFilterWMTSPriority(this.options.searchOptions.filterWMTSPriority);\n }\n if (this.options.searchOptions.filterVectortiles) {\n Search.setFiltersByTMS(this.options.searchOptions.filterVectortiles);\n }\n if (this.options.searchOptions.updateVectortiles) {\n Search.updateFilterByTMS(); // url par defaut\n }\n }\n // abonnement au service\n Search.target.addEventListener(\"suggest\", (e) => {\n logger.debug(e);\n this._fillSearchedSuggestListContainer(e.detail);\n });\n }\n\n if (!this.options.collapsible) {\n this.options.collapsed = false; // on interdit le mode pliable !\n }\n /** {Boolean} specify if searchEngine control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n // identifiant du contrôle : utile pour suffixer les identifiants CSS (pour gérer le cas où il y en a plusieurs dans la même page)\n this._uid = this.options.id || SelectorID.generate();\n\n this._showSearchEngineButton = null;\n\n // container de l'input de recherche\n this._inputSearchContainer = null;\n\n // container des reponses de l'autocompletion / du service de recherche\n this._autocompleteContainer = null;\n this._containerResultsLocation = null;\n this._containerResultsSuggest = null;\n // Radio buttons correspondants\n this._radioButtonLocation = null;\n this._radioButtonSuggest = null;\n\n // listes des reponses de l'autocompletion\n this._suggestedLocations = [];\n\n // container des reponses du geocodage\n this._geocodedContainer = null;\n\n // liste des reponses du geocodage\n this._geocodedLocations = [];\n\n // container des filtres du geocodage\n this._filterContainer = null;\n\n // ressource de geocodage selectionnée pour le geocodage avancé\n this._currentGeocodingCode = null;\n\n // localisant\n this._currentGeocodingLocation = null;\n\n // liste des filtres du geocodage pour le geocodage avancé\n this._advancedSearchFilters = {};\n this._initAdvancedSearchFilters();\n\n // liste des ressources du geocodage pour le geocodage avancé\n this._advancedSearchCodes = [];\n this._initAdvancedSearchCodes();\n\n // recherche par coordonnées : systemes de projections\n this._coordinateSearchSystems = [];\n if (this.options.displayButtonCoordinateSearch) {\n this._initCoordinateSearchSystems();\n this._currentCoordinateSearchSystems = this._coordinateSearchSystems[0]; // epsg:4326\n this._currentCoordinateSearchType = this._coordinateSearchSystems[0].type; // geographical ou metric\n }\n\n // recherche par coordonnées : unités\n this._coordinateSearchUnits = [];\n if (this.options.displayButtonCoordinateSearch) {\n this._initCoordinateSearchUnits();\n this._currentCoordinateSearchUnits = this._coordinateSearchUnits[this._currentCoordinateSearchType][0].code; // decimal\n }\n\n\n this._coordinateSearchLngInput = null;\n this._coordinateSearchLatInput = null;\n\n // marker\n this._marker = null;\n\n // marker style or url\n var _markerStyle = this.options.markerStyle;\n var _markerUrl = this.options.markerUrl;\n if (_markerUrl) {\n this._markerUrl = _markerUrl;\n } else {\n this._markerUrl = (Object.keys(Markers).indexOf(_markerStyle) === -1) ? Markers[\"lightOrange\"] : Markers[_markerStyle];\n }\n\n // marker display\n this._displayMarker = this.options.displayMarker;\n\n // popup\n this._popupContent = null;\n this._popupDiv = this._initPopupDiv();\n this._popupOverlay = null;\n\n // trigger geocode\n this._triggerHandler = null;\n }\n\n /**\n * this method is called by this.initialize()\n * and makes sure input options are correctly formated\n *\n * @param {Object} options - options\n *\n * @private\n */\n _checkInputOptions (options) {\n var i;\n\n if (options.resources) {\n // on vérifie que resources est bien un objet\n if (typeof options.resources === \"object\") {\n // ressources de geocodage\n var geocodeResources = options.resources.geocode;\n if (geocodeResources) {\n // on vérifie que la liste des ressources de geocodage est bien un tableau\n if (Array.isArray(geocodeResources)) {\n var geocodeResourcesList = [\"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\", \"Administratif\"];\n for (i = 0; i < geocodeResources.length; i++) {\n if (geocodeResourcesList.indexOf(geocodeResources[i]) === -1) {\n // si la resource n'est pas référencée, on l'enlève\n // geocodeResources.splice(i, 1);\n logger.log(\"[SearchEngine] options.resources.geocode : \" + geocodeResources[i] + \" is not a resource for geocode\");\n }\n }\n } else {\n logger.log(\"[SearchEngine] 'options.resources.geocode' parameter should be an array\");\n geocodeResources = null;\n }\n }\n\n // ressources d'autocompletion\n var autocompleteResources = options.resources.autocomplete;\n if (autocompleteResources) {\n // on vérifie que la liste des ressources d'autocompletion est bien un tableau\n if (Array.isArray(autocompleteResources)) {\n var autocompleteResourcesList = [\"StreetAddress\", \"PositionOfInterest\"];\n for (i = 0; i < autocompleteResources.length; i++) {\n if (autocompleteResourcesList.indexOf(autocompleteResources[i]) === -1) {\n // si la resource n'est pas référencée, on l'enlève\n // autocompleteResources.splice(i, 1);\n logger.log(\"[SearchEngine] options.resources.autocomplete : \" + autocompleteResources[i] + \" is not a resource for autocomplete\");\n }\n }\n } else {\n logger.log(\"[SearchEngine] 'options.resources.autocomplete' parameter should be an array\");\n autocompleteResources = null;\n }\n }\n } else {\n logger.log(\"[SearchEngine] 'resources' parameter should be an object\");\n options.resources = null;\n }\n }\n }\n\n /**\n * this method is called by this.initialize()\n * and initialize the geocoding resources titles.\n *\n * @private\n */\n _initAdvancedSearchCodes () {\n // INFORMATION\n // on y ajoute les filtres attributaires pour une table de ressources\n // selectionnée via un evenement (onchange) de la liste deroulante du\n // menu avancé du geocodage.\n // cf. onGeocodingAdvancedSearchCodeChange() pour la selection de la\n // ressource de geocodage à afficher\n\n var geocodeResources = this.options.resources.geocode;\n if (geocodeResources === \"location\") {\n geocodeResources = [\"PositionOfInterest\", \"StreetAddress\", \"CadastralParcel\"];\n }\n if (!Array.isArray(geocodeResources)) {\n geocodeResources = [geocodeResources];\n }\n for (var i = 0; i < geocodeResources.length; i++) {\n switch (geocodeResources[i]) {\n case \"PositionOfInterest\":\n this._advancedSearchCodes.push({\n id : \"PositionOfInterest\",\n title : \"Lieux/toponymes\"\n });\n break;\n case \"StreetAddress\":\n this._advancedSearchCodes.push({\n id : \"StreetAddress\",\n title : \"Adresses\"\n });\n break;\n case \"CadastralParcel\":\n this._advancedSearchCodes.push({\n id : \"CadastralParcel\",\n title : \"Parcelles cadastrales\"\n });\n break;\n default:\n break;\n }\n }\n // par défaut, au cas où aucune ressource passée en option ne correspond à celles attendues\n if (this._advancedSearchCodes.length === 0) {\n this._advancedSearchCodes = [{\n id : \"StreetAddress\",\n title : \"Adresses\"\n }, {\n id : \"PositionOfInterest\",\n title : \"Lieux/toponymes\"\n }, {\n id : \"CadastralParcel\",\n title : \"Cadastre\"\n }];\n }\n\n logger.log(\"advancedSearchCodes\", this._advancedSearchCodes);\n }\n\n /**\n * this method is called by this.onAdd()\n * and initialize the advanced geocoding filters.\n *\n * @private\n */\n _initAdvancedSearchFilters () {\n // liste des filtres par defauts pour toutes les ressources\n this._advancedSearchFilters = SearchEngineUtils.advancedSearchFiltersByDefault;\n\n // on merge les options avancées avec celles par defaut\n var advancedSearchFiltersCustom = this.options.advancedSearch;\n Utils.assign(this._advancedSearchFilters, advancedSearchFiltersCustom);\n\n logger.log(\"advancedSearchFilters\", this._advancedSearchFilters);\n }\n\n /**\n * this method is called by the constructor and initialize the projection\n * systems.\n * getting coordinates in the requested projection :\n * see this.onCoordinateSearchSystemChange()\n *\n * @private\n */\n _initCoordinateSearchSystems () {\n // on donne la possibilité à l'utilisateur de modifier\n // la liste des systèmes à afficher\n // Ex. this.options.coordinateSearch.systems\n\n // systemes de projection disponible par defaut\n var projectionSystemsByDefault = [{\n label : \"G\\u00e9ographique\",\n crs : \"EPSG:4326\",\n type : \"Geographical\"\n }, {\n label : \"Web Mercator\",\n crs : \"EPSG:3857\",\n type : \"Metric\"\n }, {\n label : \"Lambert 93\",\n crs : \"EPSG:2154\",\n type : \"Metric\"\n }];\n\n var systems = this.options.coordinateSearch.systems;\n if (systems) {\n // on ajoute les definitions d'un systeme de reference fournies par l'utilisateur\n for (var i = 0; i < systems.length; i++) {\n var sys = systems[i];\n this._setSystem(sys);\n }\n }\n\n // on ajoute les systèmes de projections par défaut\n if (this._coordinateSearchSystems.length === 0) {\n for (var j = 0; j < projectionSystemsByDefault.length; j++) {\n this._setSystem(projectionSystemsByDefault[j]);\n }\n }\n }\n\n /**\n * this method is called by the constructor and initialize the units.\n * getting coordinates in the requested units :\n * see this.onCoordinateSearchUnitsChange()\n *\n * @private\n */\n _initCoordinateSearchUnits () {\n // on donne la possibilité à l'utilisateur de modifier\n // la liste des unités à afficher\n // Ex.\n // this.options.units : [\"DEC\", \"DMS\"]\n\n // unités disponible par defaut\n var projectionUnitsByDefault = {\n Geographical : [{\n code : \"DEC\",\n label : \"degrés décimaux\",\n format : MathUtils.coordinateToDecimal\n }, {\n code : \"DMS\",\n label : \"degrés sexagésimaux\",\n format : MathUtils.coordinateToDMS\n }],\n Metric : [{\n code : \"M\",\n label : \"mètres\",\n format : MathUtils.coordinateToMeter\n }, {\n code : \"KM\",\n label : \"kilomètres\",\n format : MathUtils.coordinateToKMeter\n }]\n };\n\n var units = this.options.coordinateSearch.units;\n if (units) {\n for (var type in projectionUnitsByDefault) {\n if (projectionUnitsByDefault.hasOwnProperty(type)) {\n var found = false;\n for (var j = 0; j < projectionUnitsByDefault[type].length; j++) {\n var obj = projectionUnitsByDefault[type][j];\n for (var i = 0; i < units.length; i++) {\n var unit = units[i];\n if (obj.code === unit) {\n found = true;\n if (!this._coordinateSearchUnits[type]) {\n this._coordinateSearchUnits[type] = [];\n }\n this._coordinateSearchUnits[type].push(obj);\n }\n }\n }\n if (!found) {\n this._coordinateSearchUnits[type] = projectionUnitsByDefault[type];\n }\n }\n }\n }\n\n // au cas où...\n if (typeof this._coordinateSearchUnits === \"object\" && Object.keys(this._coordinateSearchUnits).length === 0) {\n this._coordinateSearchUnits = projectionUnitsByDefault;\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize popup div\n * (to display results information on marker click)\n *\n * @return {Object} element - DOM element for popup\n * @private\n */\n _initPopupDiv () {\n var context = this;\n var element = document.createElement(\"div\");\n element.className = \"gp-feature-info-div gpf-widget-color\";\n // bouton de fermeture de la pop-up\n var closer = document.createElement(\"button\");\n closer.title = \"Fermer la pop-up\";\n closer.className = \"gp-styling-button closer gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-mt-1v fr-mr-2v\";\n\n // on closer click : remove popup\n closer.onclick = function () {\n if (context._popupOverlay != null) {\n context._popupOverlay.setPosition(undefined);\n }\n return false;\n };\n this._popupContent = document.createElement(\"div\");\n this._popupContent.className = \"gp-features-content-div\";\n this._popupContent.style[\"min-width\"] = \"200px\";\n element.appendChild(this._popupContent);\n element.appendChild(closer);\n\n return element;\n }\n\n // ################################################################### //\n // ######################## DOM initialize ########################### //\n // ################################################################### //\n\n /**\n * Create control main container\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initContainer () {\n // create main container\n var container = this._createMainContainerElement();\n\n var searchDiv = this._createSearchDivElement();\n // create search engine picto\n var picto = this._showSearchEngineButton = this._createShowSearchEnginePictoElement(this.options.collapsible);\n searchDiv.appendChild(picto);\n\n // only dsfr : on applique un fond blanc sur une barre de recherche fixe\n if (!this.options.collapsible) {\n container.classList.add(\"gpf-widget-color\", \"gpf-widget-padding\");\n }\n\n var search = this._inputSearchContainer = this._createSearchInputElement(this.options.placeholder);\n if (this.options.displayButtonClose) {\n search.appendChild(this._createSearchResetElement());\n }\n\n var context = this;\n if (search.addEventListener) {\n search.addEventListener(\"click\", function () {\n context.onAutoCompleteInputClick();\n });\n } else if (search.attachEvent) {\n search.attachEvent(\"onclick\", function () {\n context.onAutoCompleteInputClick();\n });\n }\n searchDiv.appendChild(search);\n\n var buttonsContainer = this._createButtonsElement();\n var firstLineWrapper = this._createFirstLineWrapper();\n firstLineWrapper.appendChild(searchDiv);\n firstLineWrapper.appendChild(buttonsContainer);\n container.appendChild(firstLineWrapper);\n\n if (checkDsfr() && this.options.splitResults || this.options.displayButtonAdvancedSearch) {\n var radioContainer = this._createRadioContainer();\n container.appendChild(radioContainer);\n }\n\n if (checkDsfr() && this.options.splitResults) {\n var radioElements;\n [radioElements, this._radioButtonLocation, this._radioButtonSuggest] = this._createRadioElements();\n radioContainer.appendChild(radioElements);\n }\n\n if (this.options.displayButtonAdvancedSearch) {\n var advancedShow = this._createShowAdvancedSearchElement();\n radioContainer.appendChild(advancedShow);\n\n // INFO je decompose les appels car j'ai besoin de recuperer le container\n // des filtres\n var advancedPanel = this._createAdvancedSearchPanelElement();\n var advancedPanelDiv = this._createAdvancedSearchPanelDivElement();\n var advancedHeader = this._createAdvancedSearchPanelHeaderElement();\n var advancedForm = this._createAdvancedSearchPanelFormElement(this._advancedSearchCodes);\n var advancedFormFilters = this._filterContainer = this._createAdvancedSearchFormFiltersElement();\n this._setFilter(this._advancedSearchCodes[0].id); // ex \"PositionOfInterest\"\n var advancedFormInput = this._createAdvancedSearchFormInputElement();\n\n advancedForm.appendChild(advancedFormFilters);\n advancedForm.appendChild(advancedFormInput);\n advancedPanelDiv.appendChild(advancedHeader);\n advancedPanelDiv.appendChild(advancedForm);\n advancedPanel.appendChild(advancedPanelDiv);\n container.appendChild(advancedPanel);\n }\n\n if (this.options.displayButtonGeolocate) {\n var geolocateShow = this._createShowGeolocateElement();\n buttonsContainer.appendChild(geolocateShow);\n }\n\n if (this.options.displayButtonCoordinateSearch) {\n var searchByCoordinateShow = this._createShowSearchByCoordinateElement();\n buttonsContainer.appendChild(searchByCoordinateShow);\n\n var coordinatePanel = this._createCoordinateSearchPanelElement();\n var coordinatePanelDiv = this._createCoordinateSearchPanelDivElement();\n var coordinateHeader = this._createCoordinateSearchPanelHeaderElement();\n var coordinateForm = this._createCoordinateSearchPanelFormElement();\n\n var div = null;\n div = this._containerSystems = this.__createCoordinateSearchDivElement();\n coordinateForm.appendChild(div);\n var labelSystems = this._createCoordinateSearchSystemsLabelElement();\n var systems = this._setCoordinateSearchSystemsSelectElement(this._coordinateSearchSystems);\n div.appendChild(labelSystems);\n div.appendChild(systems);\n\n div = this._containerUnits = this.__createCoordinateSearchDivElement();\n coordinateForm.appendChild(div);\n var labelUnits = this._createCoordinateSearchUnitsLabelElement();\n var units = this._setCoordinateSearchUnitsSelectElement(this._coordinateSearchUnits[this._currentCoordinateSearchType]);\n div.appendChild(labelUnits);\n div.appendChild(units);\n\n div = this._containerCoordinateLng = this.__createCoordinateSearchDivElement();\n coordinateForm.appendChild(div);\n var coordinateLng = this._setCoordinateSearchLngLabelElement(this._currentCoordinateSearchType);\n var coordinateInputLng = this._coordinateSearchLngInput = this._setCoordinateSearchLngInputElement(this._currentCoordinateSearchUnits);\n div.appendChild(coordinateLng);\n div.appendChild(coordinateInputLng);\n\n div = this._containerCoordinateLat = this.__createCoordinateSearchDivElement();\n coordinateForm.appendChild(div);\n var coordinateLat = this._setCoordinateSearchLatLabelElement(this._currentCoordinateSearchType);\n var coordinateInputLat = this._coordinateSearchLatInput = this._setCoordinateSearchLatInputElement(this._currentCoordinateSearchUnits);\n div.appendChild(coordinateLat);\n div.appendChild(coordinateInputLat);\n\n var submit = this._createCoordinateSearchSubmitElement();\n coordinateForm.appendChild(submit);\n\n coordinatePanelDiv.appendChild(coordinateHeader);\n coordinatePanelDiv.appendChild(coordinateForm);\n\n coordinatePanel.appendChild(coordinatePanelDiv);\n container.appendChild(coordinatePanel);\n }\n\n // INFO je decompose les appels car j'ai besoin de recuperer le container\n // des resultats de l'autocompletion\n var autocomplete = this._autocompleteContainer = this._createAutoCompleteElement();\n var autocompleteList = this._createAutoCompleteListElement();\n var containerResultsLocation = this._containerResultsLocation = this._createAutoCompletedLocationContainer();\n var containerResultsSuggest = this._containerResultsSuggest = this._createSearchedSuggestContainer();\n autocompleteList.appendChild(containerResultsLocation);\n autocompleteList.appendChild(containerResultsSuggest);\n autocomplete.appendChild(autocompleteList);\n container.appendChild(autocomplete);\n\n // INFO je decompose les appels car j'ai besoin de recuperer le container\n // des resultats du geocodage\n var geocode = this._createGeocodeResultsElement();\n var geocodeDiv = this._createGeocodeResultsDivElement();\n geocode.appendChild(geocodeDiv);\n var geocodeList = this._geocodedContainer = this._createGeocodeResultsListElement();\n geocodeDiv.appendChild(geocodeList);\n container.appendChild(geocode);\n\n return container;\n }\n\n /**\n * this method is called by :\n * - this._initContainer() : ...\n * - this.onGeocodingAdvancedSearchCodeChoice() : ...\n * and initialize or create the filters container HTMLElement\n * to the geocoding advanced menu.\n *\n * @param {String} code - resource geocoding name\n *\n * @returns {DOMElement} DOM element\n * @private\n */\n _setFilter (code) {\n // INFORMATION\n // Nous avons 2 solutions possibles pour la mise en place des filtres.\n // 1. Soit on decide de creer tous les filtres pour chaque ressource\n // de geocodage à l'initialisation du composant, et on joue sur le\n // mode 'hidden' pour n'afficher que la ressource selectionnée.\n // 2. Soit on decide de creer à chaque fois les filtres pour la\n // ressource selectionnée.\n // Chaque solution a ses inconvenients/avantages.\n // Implementation du choix 2 car elle offre plus de souplesse pour\n // recuperer les 'form-data'...\n\n var container = this._filterContainer;\n\n var codeFound = false;\n for (var i = 0; i < this._advancedSearchCodes.length; i++) {\n if (this._advancedSearchCodes[i].id === code) {\n codeFound = true;\n break;\n }\n }\n\n if (!codeFound) {\n // cette ressource n'est pas disponible,\n // on supprime les anciens enfants...\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n return;\n }\n\n // on sauvegarde la ressource de geocodage sélectionnée\n this._currentGeocodingCode = code;\n\n // on supprime les enfants...\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n\n var lstAttributs = this._advancedSearchFilters[code];\n if (!lstAttributs || lstAttributs.length === 0) {\n // cette ressource n'est pas parametrable\n return;\n }\n\n var divTable = this._createAdvancedSearchFiltersTableElement(code, true);\n\n for (var j = 0; j < lstAttributs.length; j++) {\n var divFilter = this._createAdvancedSearchFiltersAttributElement(lstAttributs[j]);\n divTable.appendChild(divFilter);\n }\n\n container.appendChild(divTable);\n\n return container;\n }\n\n // ################################################################### //\n // ################ methods to request and results ################### //\n // ################################################################### //\n\n /**\n * this method is called by this.onAutoCompleteSearch()\n * and executes a request to the service.\n *\n * @param {Object} settings - service settings\n * @param {String} settings.text - text\n * @param {Function} settings.onSuccess - callback\n * @param {Function} settings.onFailure - callback\n * @private\n */\n _requestAutoComplete (settings) {\n // on ne fait pas de requête si on n'a pas renseigné de parametres !\n if (!settings || (typeof settings === \"object\" && Object.keys(settings).length === 0)) {\n return;\n }\n\n // on ne fait pas de requête si la parametre 'text' est vide !\n if (!settings.text) {\n return;\n }\n\n logger.log(settings);\n\n var options = {};\n // on recupere les options du service\n Utils.assign(options, this.options.autocompleteOptions.serviceOptions);\n // ainsi que la recherche et les callbacks\n Utils.assign(options, settings);\n\n // on ajoute le paramètre filterOptions.type spécifiant les ressources.\n var resources = this.options.resources.autocomplete;\n if (resources && Array.isArray(resources)) {\n // il se peut que l'utilisateur ait surchargé ce paramètre dans geocodeOptions,\n if (!options.type) {\n options.type = resources;\n }\n }\n\n // cas où la clef API n'est pas renseignée dans les options du service,\n // on utilise celle renseignée au niveau du controle ou la clé \"calcul\" par défaut.\n options.apiKey = options.apiKey || this.options.apiKey;\n\n // si l'utilisateur a spécifié le paramètre ssl au niveau du control, on s'en sert\n // true par défaut (https)\n if (typeof options.ssl !== \"boolean\") {\n if (typeof this.options.ssl === \"boolean\") {\n options.ssl = this.options.ssl;\n } else {\n options.ssl = true;\n }\n }\n logger.log(options);\n\n Gp.Services.autoComplete(options);\n }\n\n /**\n * this method is called by this.onAutoCompleteSearchText() (case of success)\n * and fills the container of the location list.\n * it creates a HTML Element per location\n *\n * @param {Array} locations - Array of Gp.Services.AutoComplete.SuggestedLocation corresponding to autocomplete results list\n * @private\n */\n _fillAutoCompletedLocationListContainer (locations) {\n if (!locations || locations.length === 0) {\n return;\n }\n\n // on vide la liste avant de la construire\n var element = this._containerResultsLocation;\n if (element.childElementCount) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n element.classList.add(\"GPelementHidden\", \"gpf-hidden\");\n if (locations.length) {\n if (!this._radioButtonLocation || (this._radioButtonLocation && this._radioButtonLocation.checked)) {\n element.classList.remove(\"GPelementHidden\", \"gpf-hidden\");\n }\n this._displaySuggestedLocation();\n if (!checkDsfr() || !this.options.splitResults) {\n this._createAutoCompletedLocationTitleElement();\n }\n for (var i = 0; i < locations.length; i++) {\n // Proposals are dynamically filled in Javascript by autocomplete service\n this._createAutoCompletedLocationElement(locations[i], i);\n }\n }\n }\n\n /**\n * this method is called by this.() (case of success)\n * and fills the container of the suggest list.\n * it creates a HTML Element per suggest\n *\n * @param {Array} suggests - Array of suggested corresponding to search results list\n * @private\n */\n _fillSearchedSuggestListContainer (suggests) {\n // on vide la liste avant de la construire\n var element = this._containerResultsSuggest;\n if (element.childElementCount) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n element.classList.add(\"GPelementHidden\", \"gpf-hidden\");\n if (suggests.length) {\n if (!this._radioButtonSuggest || (this._radioButtonSuggest && this._radioButtonSuggest.checked)) {\n element.classList.remove(\"GPelementHidden\", \"gpf-hidden\");\n }\n if (!checkDsfr() || !this.options.splitResults) {\n this._createSearchedSuggestTitleElement();\n }\n for (let i = 0; i < suggests.length; i++) {\n const suggest = suggests[i];\n this._createSearchedSuggestElement(suggest, i);\n }\n }\n }\n\n /**\n * this method is called by this.onAutoCompleteSearch()\n * and executes a request to the service.\n *\n * @param {Object} settings - service settings\n * @param {String} settings.location - text\n * @param {Function} settings.onSuccess - callback\n * @param {Function} settings.onFailure - callback\n * @private\n */\n _requestGeocoding (settings) {\n // on ne fait pas de requête si on n'a pas renseigné de parametres !\n if (!settings || (typeof settings === \"object\" && Object.keys(settings).length === 0)) {\n return;\n }\n\n // on ne fait pas de requête si la parametre 'text' est vide !\n if (settings.query === null) {\n return;\n }\n\n logger.log(settings);\n\n var options = {};\n // on recupere les options du service\n Utils.assign(options, this.options.geocodeOptions.serviceOptions);\n // ainsi que la recherche et les callbacks\n Utils.assign(options, settings);\n // on redefinie les callbacks si les callbacks de service existent\n var self = this;\n var bOnFailure = !!(this.options.geocodeOptions.serviceOptions.onFailure !== null && typeof this.options.geocodeOptions.serviceOptions.onFailure === \"function\"); // cast variable to boolean\n var bOnSuccess = !!(this.options.geocodeOptions.serviceOptions.onSuccess !== null && typeof this.options.geocodeOptions.serviceOptions.onSuccess === \"function\");\n if (bOnSuccess) {\n var cbOnSuccess = function (e) {\n settings.onSuccess.call(self, e);\n self.options.geocodeOptions.serviceOptions.onSuccess.call(self, e);\n };\n options.onSuccess = cbOnSuccess;\n }\n if (bOnFailure) {\n var cbOnFailure = function (e) {\n settings.onFailure.call(self, e);\n self.options.geocodeOptions.serviceOptions.onFailure.call(self, e);\n };\n options.onFailure = cbOnFailure;\n }\n\n // on ajoute le paramètre index spécifiant les ressources.\n var resources = this.options.resources.geocode;\n if (resources) {\n // il se peut que l'utilisateur ait surchargé ce paramètre dans geocodeOptions,\n // ou qu'il ait déjà été rempli (cas de la recherche avancée)\n if (!options.index) {\n options.index = resources;\n }\n }\n\n // cas où la clef API n'est pas renseignée dans les options du service,\n // on utilise celle renseignée au niveau du controle ou la clé \"calcul\" par défaut\n options.apiKey = options.apiKey || this.options.apiKey;\n\n // si l'utilisateur a spécifié le paramètre ssl au niveau du control, on s'en sert\n // true par défaut (https)\n if (typeof options.ssl !== \"boolean\") {\n if (typeof this.options.ssl === \"boolean\") {\n options.ssl = this.options.ssl;\n } else {\n options.ssl = true;\n }\n }\n\n logger.log(options);\n\n Gp.Services.geocode(options);\n }\n\n /**\n * this method is called by this.onGeocodingSearch()\n * and fills the container of the location results.\n * it creates a HTML Element per location\n * (cf. this. ...)\n *\n * @param {Object[]} locations - locations\n *\n * @private\n */\n _fillGeocodedLocationListContainer (locations) {\n if (!locations || locations.length === 0) {\n this._clearGeocodedLocation();\n return;\n }\n\n // on vide la liste avant de la construire\n var element = this._geocodedContainer;\n if (element.childElementCount) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n\n for (var i = 0; i < locations.length; i++) {\n logger.log(locations[i]);\n // Proposals are dynamically filled in Javascript by autocomplete service\n this._createGeocodedLocationElement(locations[i], i);\n }\n\n // sauvegarde de l'etat des locations\n this._geocodedLocations = locations;\n }\n\n // ################################################################### //\n // ######################### other methods ########################### //\n // ################################################################### //\n\n /**\n * this sends the label to the panel.\n *\n * @param {String} label - label suggested location\n * @private\n */\n _setLabel (label) {\n document.getElementById(\"GPsearchInputText-\" + this._uid).value = label;\n }\n\n /**\n * this method is called by this.on*ResultsItemClick()\n * and move/zoom on a position.\n *\n * @param {Array} position - ol.Coordinate object [lon, lat] (en lat/lon : \"EPSG:4326\")\n * @param {Number} zoom - zoom level\n * @private\n */\n _setPosition (position, zoom) {\n var view = this.getMap().getView();\n view.setCenter(position);\n view.setZoom(zoom);\n }\n\n /**\n * this method is called by this.on*ResultsItemClick()\n * and displays a marker.\n * FIXME\n *\n * @param {Array} position - ol.Coordinate object [lon, lat] ou [x, y]\n * @param {Object} info - location information\n * @private\n */\n _setMarker (position, info) {\n var map = this.getMap();\n var context = this;\n\n // remove previous markers\n if (this._marker != null) {\n map.removeOverlay(this._marker);\n this._marker = null;\n }\n\n if (position) {\n // création de l'élément DOM\n var markerDiv = document.createElement(\"img\");\n markerDiv.src = this._markerUrl;\n\n // ajout de l'évènement onclick (pour afficher une popup)\n if (markerDiv.addEventListener) {\n markerDiv.addEventListener(\n \"click\",\n function () {\n context._onResultMarkerSelect(info);\n }\n );\n } else if (markerDiv.attachEvent) {\n // Internet Explorer\n markerDiv.attachEvent(\n \"onclick\",\n function () {\n context._onResultMarkerSelect(info);\n }\n );\n }\n\n // création du marker (overlay)\n this._marker = new Overlay({\n position : position,\n // offset : [-25.5, -38], // FIXME mauvais rendu !?\n positioning : \"center-center\",\n element : markerDiv,\n stopEvent : false\n });\n map.addOverlay(this._marker);\n }\n }\n\n /**\n * this method is called by this.on*ResultsItemClick()\n * and get zoom to results.\n *\n * @param {Object} info - info\n *\n * @returns {Integer} zoom\n * @private\n */\n _getZoom (info) {\n var map = this.getMap();\n var key = this.options.zoomTo;\n var zoom = null;\n\n // les valeurs du zooms sont determinées\n // soit par les mots clefs suivants : max, min ou auto\n // soit par un niveau de zoom\n // soit defini par l'utilisateur via une fonction\n\n if (typeof key === \"function\") {\n logger.trace(\"zoom function\");\n zoom = key.call(this, info);\n }\n\n if (typeof key === \"number\") {\n logger.trace(\"zoom level\");\n zoom = key;\n }\n\n if (typeof key === \"string\") {\n // if (key === \"max\") {\n // zoom = map.getMaxZoom();\n // } else if (key === \"min\") {\n // zoom = map.getMinZoom();\n // } else\n\n if (key === \"auto\") {\n logger.trace(\"zoom auto\");\n zoom = SearchEngineUtils.zoomToResultsByDefault(info);\n } else {\n logger.trace(\"zoom level parsing\");\n var value = parseInt(key, 10);\n if (!isNaN(value)) {\n logger.trace(\"zoom parsing\");\n zoom = value;\n }\n }\n }\n\n // polyfill IE\n Number.isInteger = Number.isInteger || function (value) {\n return typeof value === \"number\" &&\n isFinite(value) &&\n Math.floor(value) === value;\n };\n\n // test de validité du zoom,\n // on prend le zoom courant par defaut ...\n if (!zoom || zoom === \"\" || !Number.isInteger(zoom)) {\n logger.trace(\"zoom not found, current zoom...\");\n zoom = map.getView().getZoom();\n }\n\n // FIXME test si le zoom est dans l'espace de la carte\n var min = map.minZoom; // .getMinZoom();\n var max = map.maxZoom; // .getMaxZoom();\n if (zoom < min) {\n logger.trace(\"zoom level min...\");\n zoom = min;\n }\n if (zoom > max) {\n logger.trace(\"zoom level max...\");\n zoom = max;\n }\n\n logger.trace(\"zoom\", zoom);\n return zoom;\n }\n\n /**\n * this method is called on 'click' on this._marker\n * (cf. this._setMarker() )\n * and sets a popup with marker information\n *\n * @param {Object} information - location information\n * @private\n */\n _onResultMarkerSelect (information) {\n var map = this.getMap();\n\n var popupContent = \"\";\n if (typeof information !== \"string\") {\n if (information.service === \"GeocodedLocation\") {\n popupContent = \"
    \";\n var attributes = information.location.placeAttributes;\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr)) {\n if (attr !== \"trueGeometry\" && attr !== \"extraFields\" && attr !== \"houseNumberInfos\" && attr !== \"_count\") {\n popupContent += \"
  • \";\n popupContent += \"\" + attr.toUpperCase() + \" : \";\n popupContent += attributes[attr];\n popupContent += \"
  • \";\n }\n }\n }\n popupContent += \"
\";\n } else if (information.service === \"SuggestedLocation\") {\n popupContent = GeocodeUtils.getSuggestedLocationFreeform(information.location);\n } else {\n popupContent = \"sans informations.\";\n }\n } else {\n popupContent = information;\n }\n\n this._popupContent.innerHTML = popupContent;\n if (!this._popupOverlay) {\n // ajout de la popup a la carte comme un overlay\n this._popupOverlay = new Overlay({\n element : this._popupDiv,\n positioning : \"bottom-center\",\n position : this._marker.getPosition(),\n offset : [0, -42]\n });\n map.addOverlay(this._popupOverlay);\n } else {\n // si l'overlay est déjà créé, on modifie juste sa position\n this._popupOverlay.setPosition(this._marker.getPosition());\n }\n }\n\n /**\n * Set additional projection system\n *\n * @param {Object} system - projection system\n * @param {String} system.crs - Proj4 crs alias (from proj4 defs) e.g. \"EPSG:4326\"\n * @param {String} [system.label] - CRS label to be displayed in control. Default is system.crs alias\n * @param {String} [system.type] - CRS units type for coordinates conversion (one of control options.units). Default is \"Metric\"\n */\n _setSystem (system) {\n if (typeof system !== \"object\") {\n logger.log(\"[ERROR] MousePosition:addSystem - system parameter should be an object\");\n return;\n }\n if (!system.crs) {\n logger.error(\"crs not defined !\");\n return;\n }\n if (!system.label) {\n logger.warn(\"crs label not defined, use crs code by default.\");\n system.label = system.crs;\n }\n if (!system.type) {\n logger.warn(\"type srs not defined, use 'Metric' by default.\");\n system.type = \"Metric\";\n }\n\n // chargement de la definition de la projection\n // même si déjà chargé...\n CRS.loadByName(system.crs);\n\n if (!olProjGet(system.crs)) {\n logger.error(\"crs '{}' not available into proj4 definitions !\", system.crs);\n return;\n }\n\n // add system to control systems\n for (var j = 0; j < this._coordinateSearchSystems.length; j++) {\n var obj = this._coordinateSearchSystems[j];\n if (system.crs === obj.crs) {\n // warn user\n logger.info(\"crs '{}' already configured\", obj.crs);\n }\n }\n system.code = this._coordinateSearchSystems.length;\n this._coordinateSearchSystems.push(system);\n }\n\n // ################################################################### //\n // ###################### other handlers events ###################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on 'GPshowSearchEnginePicto' tag label\n * (cf. this._createShowSearchEnginePictoElement), and it cleans the component\n * when it's closed.\n *\n * @param { event } e évènement associé au clic\n * @private\n */\n onShowSearchEngineClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n // on supprime toutes les interactions\n Interactions.unset(map);\n var opened = this._showSearchEngineButton.ariaPressed;\n this.collapsed = !(opened === \"true\");\n // on génère nous même l'evenement OpenLayers de changement de propriété\n // (utiliser ol.control.SearchEngine.on(\"change:collapsed\", function ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n\n // on nettoie si on ferme le composant\n if (this.collapsed) {\n this._clearResults();\n }\n }\n\n /**\n * this method is called by event 'click' on 'GPsearchInputReset' tag div\n * (cf. this._createSearchInputElement), and it cleans the value of input.\n *\n * @private\n */\n onSearchResetClick () {\n this._clearResults();\n }\n\n /**\n * this method is called by event 'click' on 'GPshowGeolocate' tag div\n * (cf. this._createShowGeolocateElement)\n *\n * @private\n */\n onShowSearchGeolocateClick () {\n if (\"geolocation\" in navigator) {\n /* geolocation is available */\n navigator.geolocation.getCurrentPosition((position) => {\n var view = this.getMap().getView();\n var viewProj = view.getProjection().getCode();\n var coordinates_4326 = [position.coords.longitude, position.coords.latitude];\n var coordinates;\n if (viewProj !== \"EPSG:4326\") {\n // on retransforme les coordonnées de la position dans la projection de la carte\n coordinates = olProjTransform(coordinates_4326, \"EPSG:4326\", viewProj);\n } else {\n coordinates = coordinates_4326;\n }\n if (isNaN(coordinates[0]) || isNaN(coordinates[1])) {\n this._setMarker();\n return;\n }\n this._setPosition(coordinates, 15); // FIXME zoom fixe !\n if (this._displayMarker) {\n var markerInfo = \"
Ma position
longitude : \" + coordinates_4326[0] + \"
latitude : \" + coordinates_4326[1];\n this._setMarker(coordinates, markerInfo);\n }\n /**\n * event triggered when i want a geolocation\n *\n * @event searchengine:geolocation:click\n * @property {Object} type - event\n * @property {Object} coordinates - coordinates\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:geolocation:click\", function (e) {\n * console.log(e.coordinates);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:geolocation:click\",\n coordinates : coordinates\n });\n });\n } else {\n /* geolocation IS NOT available */\n }\n }\n\n /**\n * this method is called by event 'click' on 'GPshowSearchByCoordinate' tag div\n * (cf. this._createShowSearchByCoordinateElement)\n *\n * @private\n */\n onShowSearchByCoordinateClick () {\n var lng = null;\n var lat = null;\n if (this._coordinateSearchLngInput && this._coordinateSearchLngInput.nodeName === \"DIV\" &&\n this._coordinateSearchLatInput && this._coordinateSearchLatInput.nodeName === \"DIV\"\n ) {\n lng = this._getCoordinateSearchDMS(this._coordinateSearchLngInput);\n lat = this._getCoordinateSearchDMS(this._coordinateSearchLatInput);\n } else {\n lng = this._coordinateSearchLngInput.value;\n lat = this._coordinateSearchLatInput.value;\n }\n\n if (!lng || !lat) {\n return;\n }\n\n var coordinates = [lng, lat];\n\n var view = this.getMap().getView();\n var viewProj = view.getProjection().getCode();\n if (viewProj !== \"EPSG:4326\") {\n coordinates = olProjTransform(coordinates, \"EPSG:4326\", viewProj);\n }\n if (isNaN(coordinates[0]) || isNaN(coordinates[1])) {\n this._setMarker();\n return;\n }\n this._setPosition(coordinates, 10); // FIXME zoom fixe !\n if (this._displayMarker) {\n this._setMarker(coordinates, \"sans information\");\n }\n\n /**\n * event triggered when we are positioned\n *\n * @event searchengine:coordinates:click\n * @property {Object} type - event\n * @property {Object} coordinates - coordinates\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:coordinates:click\", function (e) {\n * console.log(e.coordinates);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:coordinates:click\",\n coordinates : coordinates\n });\n }\n\n _getCoordinateSearchDMS (dom) {\n if (dom && dom.nodeName === \"DIV\") {\n var nodes = dom.querySelectorAll(\"[name]\");\n if (nodes) {\n var degrees = MathUtils.toInteger(nodes[0].value);\n var minutes = MathUtils.toInteger(nodes[1].value);\n var seconds = MathUtils.toInteger(nodes[2].value);\n var hemispheres = nodes[3].options[nodes[3].selectedIndex].text;\n if (!degrees || !minutes || !seconds || !hemispheres) {\n return;\n }\n return MathUtils.dmsToDecimal(degrees, minutes, seconds, hemispheres);\n }\n }\n }\n // ################################################################### //\n // ################## handlers events AutoComplete ################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on 'GPlocationOrigin' input\n *\n * @private\n */\n onAutoCompleteInputClick () {\n var inputSearchTextContainer = document.getElementById(\"GPsearchInputText-\" + this._uid);\n if (inputSearchTextContainer && !inputSearchTextContainer.disabled && inputSearchTextContainer.value.length > 2) {\n this._displaySuggestedLocation();\n }\n }\n\n /**\n * this method is called by event 'keyup' on 'GPsearchInputText' tag input\n * (cf. this._createSearchInputElement), and it gets the value of input.\n * this value is passed as a parameter for the service autocomplete (text).\n * the results of the request are displayed into a drop down menu.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onAutoCompleteSearchText (e) {\n var value = e.target.value;\n if (!value) {\n return;\n }\n\n // on sauvegarde le localisant\n this._currentGeocodingLocation = value;\n\n // on limite les requêtes à partir de 3 car. saisie !\n if (value.length < 3) {\n this._clearSuggestedLocation();\n return;\n }\n\n var _triggerGeocode = this.options.autocompleteOptions.triggerGeocode;\n var _triggerDelay = this.options.autocompleteOptions.triggerDelay;\n var _maximumEntries = this.options.autocompleteOptions.maximumEntries;\n var _prettifyResults = this.options.autocompleteOptions.prettifyResults;\n\n // INFORMATION\n // on effectue la requête au service d'autocompletion.\n // on met en place des callbacks afin de recuperer les resultats ou\n // les messages d'erreurs du service.\n // les resultats sont affichés dans une liste deroulante.\n var context = this;\n this._requestAutoComplete({\n text : value,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(\"request from AutoComplete\", results);\n if (results) {\n // on sauvegarde l'etat des résultats\n context._suggestedLocations = results.suggestedLocations;\n context._locationsToBeDisplayed = [];\n // on vérifie qu'on n'a pas récupéré des coordonnées nulles (par ex recherche par code postal)\n for (var i = 0; i < context._suggestedLocations.length; i++) {\n var ilocation = context._suggestedLocations[i];\n if (ilocation.position && ilocation.position.x === 0 && ilocation.position.y === 0 && ilocation.fullText) {\n // si les coordonnées sont nulles, il faut relancer une requête de géocodage avec l'attribut \"fullText\" récupéré\n context._getGeocodeCoordinatesFromFullText(ilocation, i);\n } else {\n // sinon on peut afficher normalement le résultat dans la liste\n context._locationsToBeDisplayed.push(ilocation);\n }\n };\n // on filtre et enjolive éventuellement les résultats\n if (_prettifyResults === true) {\n context._prettifyAutocompleteResults(context._locationsToBeDisplayed);\n }\n // on ne garde que le nombre de résultats que l'on veut afficher\n if (_maximumEntries) {\n context._locationsToBeDisplayed = context._locationsToBeDisplayed.slice(0, _maximumEntries);\n }\n\n // on affiche les résultats qui n'ont pas des coordonnées nulles\n context._fillAutoCompletedLocationListContainer(context._locationsToBeDisplayed);\n // on annule eventuellement une requete de geocodage en cours car on obtient des\n // de nouveau des resultats d'autocompletion...\n if (context._triggerHandler) {\n clearTimeout(context._triggerHandler);\n context._triggerHandler = null;\n logger.warn(\"Cancel a geocode request !\");\n }\n }\n },\n // callback onFailure\n onFailure : function (error) {\n // FIXME\n // où affiche t on les messages : ex. 'No suggestion matching the search' ?\n context._clearSuggestedLocation();\n logger.log(error.message);\n // on envoie une requete de geocodage si aucun resultat d'autocompletion\n // n'a été trouvé ! Et on n'oublie pas d'annuler celle qui est en cours !\n if (error.message === \"No suggestion matching the search\" && _triggerGeocode /* && value.length === 5 */) {\n if (context._triggerHandler) {\n clearTimeout(context._triggerHandler);\n logger.warn(\"Cancel the last geocode request !\");\n }\n context._triggerHandler = setTimeout(\n function () {\n logger.warn(\"Launch a geocode request !\");\n context._requestGeocoding({\n location : value,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(\"request from Geocoding\", results);\n if (results) {\n context._locationsToBeDisplayed = [];\n // on modifie la structure des reponses pour être\n // compatible avec l'autocompletion !\n var locations = results.locations;\n for (var i = 0; i < locations.length; i++) {\n var location = locations[i];\n location.fullText = GeocodeUtils.getGeocodedLocationFreeform(location);\n location.position = {\n x : location.position.lon,\n y : location.position.lat\n };\n context._locationsToBeDisplayed.push(location);\n }\n context._fillAutoCompletedLocationListContainer(locations);\n }\n },\n // callback onFailure\n onFailure : function (error) {\n logger.log(error.message);\n }\n });\n }, _triggerDelay\n );\n }\n }\n });\n\n // INFORMATION\n // on effectue une requête au service de recherche.\n // les resultats sont ajoutées à la suite de l'autocompletion,\n // et un abonnement est mis en place pour les récuperer.\n if (this.options.resources.search) {\n // appel du service (cf. abonnement : Search.target.addEventListener(\"suggest\"))\n Search.suggest(value);\n }\n\n var map = this.getMap();\n map.on(\n \"click\",\n this._hideSuggestedLocation,\n this\n );\n map.on(\n \"pointerdrag\",\n this._hideSuggestedLocation,\n this\n );\n }\n\n /**\n * this method is called by Gp.Services.autoComplete callback in case of success\n * (cf. this.onAutoCompleteSearchText), for suggested locations with null coordinates\n * (case of postalCode research for instance).\n * Send a geocode request with suggested location 'fullText' attribute, to get its coordinates and display it in autocomplete results list container.\n *\n * @param {Gp.Services.AutoCompleteResponse.SuggestedLocation} suggestedLocation - autocompletion result (with null coordinates) to be geocoded\n * @param {Number} i - suggestedLocation position in Gp.Services.AutoCompleteResponse.suggestedLocations autocomplete results list\n * @private\n */\n _getGeocodeCoordinatesFromFullText (suggestedLocation, i) {\n var context = this;\n Gp.Services.geocode({\n apiKey : this.options.apiKey,\n ssl : this.options.ssl,\n q : GeocodeUtils.getSuggestedLocationFreeform(suggestedLocation),\n index : suggestedLocation.type,\n // callback onSuccess\n onSuccess : function (response) {\n logger.log(\"request from Geocoding (coordinates null)\", response);\n if (response.locations && response.locations.length !== 0 && response.locations[0].position) {\n // on modifie les coordonnées du résultat en EPSG:4326 donc lat,lon\n /// \\TODO verifier si l'inversion des coordonnees est necessaire\n if (context._suggestedLocations && context._suggestedLocations[i]) {\n context._suggestedLocations[i].position = {\n lon : response.locations[0].position.y,\n lat : response.locations[0].position.x\n };\n // et on l'affiche dans la liste\n context._locationsToBeDisplayed.unshift(context._suggestedLocations[i]);\n context._fillAutoCompletedLocationListContainer(context._locationsToBeDisplayed);\n }\n }\n },\n // callback onFailure\n onFailure : function () {\n // si on n'a pas réussi à récupérer les coordonnées, on affiche quand même le résultat\n if (context._suggestedLocations && context._suggestedLocations[i]) {\n context._createAutoCompletedLocationElement(context._suggestedLocations[i], i);\n }\n }\n });\n }\n\n /**\n * this method is called by event 'click' on 'GPautoCompleteResultsList' tag div\n * (cf. this._createAutoCompleteListElement), and it selects the location.\n * this location displays a marker on the map.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onAutoCompletedResultsItemClick (e) {\n // TODO on souhaite un comportement different pour la selection des reponses\n // de l'autocompletion :\n // - liste deroulante des reponses,\n // - puis possibilité de cliquer sur une suggestion\n // - mais aussi de la choisir avec le clavier (arrow up/down), puis valider\n // par un return\n // cette selection avec les fleches doit mettre à jour le input !\n // (comme un moteur de recherche de navigateur)\n\n var idx = SelectorID.index(e.target.id);\n logger.log(idx);\n logger.log(this._locationsToBeDisplayed[idx]);\n\n if (!idx) {\n return;\n }\n\n var position = [\n this._locationsToBeDisplayed[idx].position.x,\n this._locationsToBeDisplayed[idx].position.y\n ];\n var info = {\n service : \"SuggestedLocation\",\n location : this._locationsToBeDisplayed[idx]\n };\n\n // on ajoute le texte de l'autocomplétion dans l'input\n var label = GeocodeUtils.getSuggestedLocationFreeform(this._locationsToBeDisplayed[idx]);\n this._setLabel(label);\n\n // on sauvegarde le localisant\n this._currentGeocodingLocation = label;\n\n // Info : la position est en EPSG:4326, à transformer dans la projection de la carte\n var view = this.getMap().getView();\n var mapProj = view.getProjection().getCode();\n if (mapProj !== \"EPSG:4326\") {\n // on retransforme les coordonnées de la position dans la projection de la carte\n position = olProjTransform(position, \"EPSG:4326\", mapProj);\n }\n // on centre la vue et positionne le marker, à la position reprojetée dans la projection de la carte\n var zoom = this._getZoom(info);\n this._setPosition(position, zoom);\n if (this._displayMarker) {\n this._setMarker(position, info);\n }\n /**\n * event triggered when an element of the results is clicked for autocompletion\n *\n * @event searchengine:autocomplete:click\n * @property {Object} type - event\n * @property {Object} location - location\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:autocomplete:click\", function (e) {\n * console.log(e.location);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:autocomplete:click\",\n location : this._locationsToBeDisplayed[idx]\n });\n }\n\n /**\n * this method is called by event 'click' on '' tag div\n * (cf. this.), and it selects the suggest.\n * this suggest call an event to added layer on the map.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onSearchedResultsItemClick (e) {\n var idx = SelectorID.index(e.target.id);\n\n var error = null;\n try {\n var suggest = Search.getSuggestions()[idx];\n if (!suggest) {\n throw \"No suggestions found !\";\n }\n\n // Ajout de la couche sur la carte si l'option le permet\n if (this.options.searchOptions.addToMap) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw \"ERROR : contract key configuration has to be loaded to load Geoportal layers.\";\n }\n var service = suggest.service;\n var name = suggest.name;\n var layer = null;\n switch (service) {\n case \"WMS\":\n layer = new GeoportalWMS({\n layer : name\n });\n break;\n case \"WMTS\":\n layer = new GeoportalWMTS({\n layer : name\n });\n break;\n case \"TMS\":\n layer = new GeoportalMapBox({\n layer : name\n });\n default:\n break;\n }\n if (layer) {\n var map = this.getMap();\n map.addLayer(layer);\n }\n }\n } catch (e) {\n error = e;\n }\n\n /**\n * event triggered when an element of the results is clicked for search service\n *\n * @event searchengine:search:click\n * @property {Object} type - event\n * @property {Object} suggest - suggest\n * @property {Object} error - error\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:search:click\", function (e) {\n * console.log(e.suggest);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:search:click\",\n suggest : suggest,\n error : error\n });\n }\n\n // ################################################################### //\n // ################### handlers events Geocode ####################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'submit' on 'GPsearchInput' tag form\n * (cf. this._createSearchInputElement), and it gets the value of input.\n * this value is passed as a parameter for the service geocoding.\n * the results of the request are displayed into a window.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onGeocodingSearchSubmit (e) {\n var value = e.target[0].value;\n if (!value) {\n return;\n }\n\n // on sauvegarde le localisant\n this._currentGeocodingLocation = value;\n\n // on met en place l'affichage des resultats dans une fenetre de recherche.\n var context = this;\n this._requestGeocoding({\n query : value,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(\"request from Geocoding\", results);\n if (results) {\n var locations = results.locations;\n context._fillGeocodedLocationListContainer(locations);\n }\n },\n // callback onFailure\n onFailure : function (error) {\n // FIXME cf. this.onAutoCompleteSearch()\n context._clearGeocodedLocation();\n logger.log(error.message);\n }\n });\n }\n\n /**\n * this method is called by event 'submit' on 'GPgeocodeResultsList' tag div\n * (cf. this._createGeocodeResultsListElement), and it selects the location.\n * this location displays a marker on the map.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onGeocodedResultsItemClick (e) {\n var idx = SelectorID.index(e.target.id);\n\n if (!idx) {\n return;\n }\n\n var position = [\n this._geocodedLocations[idx].position.lon,\n this._geocodedLocations[idx].position.lat\n ];\n var info = {\n service : \"GeocodedLocation\",\n location : this._geocodedLocations[idx]\n };\n\n // on ajoute le texte du géocodage dans l'input\n var label = GeocodeUtils.getGeocodedLocationFreeform(this._geocodedLocations[idx]);\n this._setLabel(label);\n\n // Info : la position est en EPSG:4326, à transformer dans la projection de la carte\n var view = this.getMap().getView();\n var mapProj = view.getProjection().getCode();\n if (mapProj !== \"EPSG:4326\") {\n // on retransforme les coordonnées de la position dans la projection de la carte\n position = olProjTransform(position, \"EPSG:4326\", mapProj);\n }\n // on centre la vue et positionne le marker, à la position reprojetée dans la projection de la carte\n var zoom = this._getZoom(this.options.zoomTo);\n this._setPosition(position, zoom);\n if (this._displayMarker) {\n this._setMarker(position, info);\n }\n /**\n * event triggered when an element of the results is clicked for geocoding\n *\n * @event searchengine:geocode:click\n * @property {Object} type - event\n * @property {Object} location - location\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:geocode:click\", function (e) {\n * console.log(e.location);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:geocode:click\",\n location : this._geocodedLocations[idx]\n });\n }\n\n // ################################################################### //\n // ############## handlers events Geocode Advanced ################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'change' on 'GPadvancedSearchCode' tag select\n * (cf. this._createAdvancedSearchFormCodeElement), and it gets the value of\n * option selected.\n * this value is passed as a parameter to create the attributs container.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onGeocodingAdvancedSearchCodeChange (e) {\n logger.log(e);\n var idx = e.target.selectedIndex;\n var value = e.target.options[idx].value;\n\n if (!value) {\n return;\n }\n\n // INFORMATION\n // le declenchement de l'evenement va creer un container de filtre à la volée...\n // l'insertion des containers d'attributs dans le DOM sont :\n // - soit GPadvancedSearchFilters > PositionOfInterest\n // - soit GPadvancedSearchFilters > StreetAddress\n // - soit GPadvancedSearchFilters > CadastralParcel\n // cf. _setFilter() pour la creation du container\n\n this._setFilter(value);\n }\n\n /**\n * this method is called by event 'submit' on 'GPadvancedSearchForm' tag form\n * (cf. this._createAdvancedSearchPanelFormElement), and it gets the value of all input.\n * this value is passed as a parameter for the service geocoding.\n * the results of the request are displayed into a window.\n *\n * @param {Object} e - HTMLElement\n * @param {Array} data - [{key: ..., value: ...}]\n * @private\n */\n onGeocodingAdvancedSearchSubmit (e, data) {\n logger.log(data);\n if (!data || data.length === 0) {\n return;\n }\n\n var _location;\n var _filterOptions = {};\n\n for (var i = 0; i < data.length; i++) {\n var filter = data[i];\n if (filter.value) {\n if (filter.key === \"section\") {\n filter.value = filter.value.toUpperCase();\n }\n _filterOptions[filter.key] = filter.value;\n }\n }\n\n var inputSearchTextContainer = document.getElementById(\"GPsearchInputText-\" + this._uid);\n _location = inputSearchTextContainer.value;\n\n // On ne prend pas en compte ce qu'il y a dans l'input de recherche simple pour la recherche avance de PC\n if (this._currentGeocodingCode === \"CadastralParcel\") {\n _location = \"\";\n }\n\n // on met en place l'affichage des resultats dans une fenetre de recherche.\n var context = this;\n this._requestGeocoding({\n query : _location,\n index : this._currentGeocodingCode,\n filters : _filterOptions,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(results);\n if (results) {\n var locations = results.locations;\n context._fillGeocodedLocationListContainer(locations);\n }\n },\n // callback onFailure\n onFailure : function (error) {\n // FIXME cf. this.onAutoCompleteSearch()\n context._clearGeocodedLocation();\n logger.log(error.message);\n }\n });\n }\n\n /**\n * this method is called by 'onGeocodingAdvancedSearchSubmit' method,\n * in case geocoding type is 'CadastralParcel',\n * and gets request parameters from inputs\n *\n * @param {Object} filterOptions - object with inputs value (department, insee, ...)\n * @returns {String} location - cadastral parcel number : concatenation of inputs values (e.g. : 940670000D0041 or 94067_____0041)\n * @private\n */\n _getCadastralParcelRequestParams (filterOptions) {\n /* info:\n la parcelle cadastrale se compose de 14 chiffres ou lettres, indiquant, de gauche à droite :\n - le code du département (2 caractères)\n - le code commune (3 caractères). (Remarque : code département + code commune = code INSEE)\n - OU le code INSEE de la commune (5 chiffres) (remplace les 2 précédents)\n - le code commune absorbée INSEE, ou '000' (3 caractères),\n - la section (2 caractères),\n - le numéro de parcelle (4 caractères).\n Exemple de parcelle : '940670000D0041'. Si l'identifiant est incomplet (par exemple '940670000D'), le service renverra uniquement les 25 premiers résultats pouvant correspondre.\n */\n\n var _location = \"\";\n\n var l;\n // code département (2 caractères)\n var dep = filterOptions.department;\n if (dep) {\n l = dep.length;\n if (l === 2) {\n _location = dep;\n } else if (l === 1) {\n // si un seul numéro a été saisi, on présume que c'est un numéro < 10\n _location = \"0\" + dep;\n } else {\n _location = dep.substring(0, 2);\n }\n } else {\n _location = \"__\";\n }\n\n // code commune insee (3 caractères)\n var commune = filterOptions.commune;\n if (commune) {\n l = commune.length;\n if (l === 3) {\n _location += commune;\n } else if (l === 2) {\n _location += \"_\" + commune;\n } else if (l === 1) {\n _location += \"__\" + commune;\n } else { // l > 3\n _location += commune.substring(0, 3);\n }\n } else {\n _location += \"___\";\n }\n\n // code insee (5 caractères) : surcharge les 2 autres si renseigné\n var insee = filterOptions.insee;\n if (insee) {\n if (insee.length === 5) {\n _location = insee;\n }\n }\n\n // code commune absorbee INSEE (3 caractères)\n var absorbedCity = filterOptions.absorbedCity;\n if (absorbedCity) {\n l = absorbedCity.length;\n if (l === 3) {\n _location += absorbedCity;\n } else if (l < 3) {\n if (l === 2) {\n _location += \"_\" + absorbedCity;\n } else if (l === 1) {\n _location += \"__\" + absorbedCity;\n }\n } else { // l > 3\n _location += absorbedCity.substring(0, 3);\n }\n } else {\n _location += \"___\";\n }\n\n // section (2 caractères)\n var section = filterOptions.section;\n if (section) {\n l = section.length;\n if (l === 2) {\n _location += section;\n } else if (l === 1) {\n _location += \"_\" + section;\n } else {\n _location += section.substring(0, 2);\n }\n } else {\n _location += \"__\";\n }\n\n // numéro de parcelle (4 caractères)\n var number = filterOptions.number;\n if (number) {\n l = number.length;\n if (l === 4) {\n _location += number;\n } else if (l === 3) {\n _location += \"_\" + number;\n } else if (l === 2) {\n _location += \"__\" + number;\n } else if (l === 1) {\n _location += \"___\" + number;\n } else { // l > 4\n _location += number.substring(0, 4);\n }\n } else {\n _location += \"___\";\n }\n\n logger.log(\"location : \" + _location);\n\n return _location;\n }\n\n // ################################################################### //\n // ############### handlers events Coordinate Search ################# //\n // ################################################################### //\n\n /**\n * this method is called by event 'change' on ''\n * tag select (cf. this.),\n * and selects the system projection.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onCoordinateSearchSystemChange (e) {\n var idx = e.target.selectedIndex; // index\n var value = e.target.options[idx].value; // crs\n\n // on nettoie les coordonnées saisies\n this._coordinateSearchLngInput.value = \"\";\n this._coordinateSearchLatInput.value = \"\";\n\n // INFO\n // si on change de type de systeme, on doit aussi changer le type d'unités !\n var type = null;\n for (var i = 0; i < this._coordinateSearchSystems.length; ++i) {\n if (this._coordinateSearchSystems[i].code === Number(value)) {\n type = this._coordinateSearchSystems[i].type;\n break;\n }\n }\n\n if (!type) {\n logger.log(\"system not found in projection systems container\");\n return;\n }\n\n // on enregistre le systeme courant\n this._currentCoordinateSearchSystems = this._coordinateSearchSystems[Number(value)];\n\n if (type !== this._currentCoordinateSearchType) {\n // on met à jour les unités du menu deroulant : Geographique ou Métrique\n this._currentCoordinateSearchType = type;\n this._currentCoordinateSearchUnits = this._coordinateSearchUnits[type][0].code;\n this._containerUnits.appendChild(this._setCoordinateSearchUnitsSelectElement(this._coordinateSearchUnits[type]));\n // et on modifie la zone de saisie des coordonnées (label + input)\n this._updateCoordinateSearchElements();\n }\n }\n\n /**\n * this method is called by event 'change' on ''\n * tag select (cf. this.),\n * and selects the units projection.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onCoordinateSearchUnitsChange (e) {\n var idx = e.target.selectedIndex;\n var value = e.target.options[idx].value;\n\n // on nettoie les coordonnées saisies\n this._coordinateSearchLngInput.value = \"\";\n this._coordinateSearchLatInput.value = \"\";\n\n // et on modifie la zone de saisie des coordonnées (label + input)\n this._currentCoordinateSearchUnits = value;\n this._updateCoordinateSearchElements();\n }\n\n /**\n * this method is called by event 'click' on ''\n * tag select (cf. this.),\n * and clear app.\n *\n * @private\n */\n onCoordinateSearchClose () {\n this._setMarker();\n this._coordinateSearchLngInput.value = \"\";\n this._coordinateSearchLatInput.value = \"\";\n }\n\n _updateCoordinateSearchElements () {\n var lbl = this._setCoordinateSearchLngLabelElement(this._currentCoordinateSearchType);\n var input = this._coordinateSearchLngInput = this._setCoordinateSearchLngInputElement(this._currentCoordinateSearchUnits);\n this._containerCoordinateLng.appendChild(lbl);\n this._containerCoordinateLng.appendChild(input);\n lbl = this._setCoordinateSearchLatLabelElement(this._currentCoordinateSearchType);\n input = this._coordinateSearchLatInput = this._setCoordinateSearchLatInputElement(this._currentCoordinateSearchUnits);\n this._containerCoordinateLat.appendChild(lbl);\n this._containerCoordinateLat.appendChild(input);\n }\n\n // ################################################################### //\n // ############################## clean ############################## //\n // ################################################################### //\n\n /**\n * this method is called by this.onSearchReset()\n * and it clears all results and the marker.\n *\n * @private\n */\n _clearResults () {\n var map = this.getMap();\n\n this._currentGeocodingLocation = null;\n\n this._clearSuggestedLocation();\n this._clearGeocodedLocation();\n\n this._setMarker();\n // on retire l'overlay de la popup de la carte\n if (this._popupOverlay != null) {\n map.removeOverlay(this._popupOverlay);\n this._popupOverlay = null;\n }\n }\n\n /**\n * this method is called by this.onAutoCompleteSearchText()\n * and it clears all suggested location.\n *\n * @private\n */\n _clearSuggestedLocation () {\n this._suggestedLocations = [];\n if (this._containerResultsLocation) {\n while (this._containerResultsLocation.firstChild) {\n this._containerResultsLocation.removeChild(this._containerResultsLocation.firstChild);\n }\n }\n if (this.options.resources.search) {\n Search.clear();\n if (this._containerResultsSuggest) {\n while (this._containerResultsSuggest.firstChild) {\n this._containerResultsSuggest.removeChild(this._containerResultsSuggest.firstChild);\n }\n }\n }\n }\n\n /**\n * this method is called by this.onAutoCompleteSearchText()\n * and it clears suggested location from duplicate entries and improve unprecise fulltext entries.\n *\n * @param {Array} autocompleteResults - Array of autocompleteResults to display\n * @private\n */\n _prettifyAutocompleteResults (autocompleteResults) {\n for (var i = autocompleteResults.length - 1; i >= 0; i--) {\n var autocompleteResult = autocompleteResults[i];\n if ((autocompleteResult.type === \"StreetAddress\" && autocompleteResult.kind === \"municipality\") ||\n autocompleteResult.type === \"PositionOfInterest\" && autocompleteResult.poiType[0] === \"lieu-dit habité\" && autocompleteResult.poiType[1] === \"zone d'habitation\") {\n // on retire les éléments streetAdress - municipality car déjà pris en compte par POI\n autocompleteResults.splice(i, 1);\n }\n // on précise le type dans le fulltext au POI des types département et région\n if ((autocompleteResult.type === \"PositionOfInterest\" && autocompleteResult.poiType[0] === \"administratif\" &&\n (autocompleteResult.poiType[1] === \"département\" || autocompleteResult.poiType[1] === \"région\"))) {\n autocompleteResult.fullText = autocompleteResult.fullText + \", \" + autocompleteResult.poiType[1];\n }\n };\n }\n\n /**\n * this method is called to hide suggested locations\n *\n * @private\n */\n _hideSuggestedLocation () {\n if (this._autocompleteContainer) {\n this._autocompleteContainer.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n this._autocompleteContainer.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n }\n\n /**\n * this method is called to display suggested location.\n *\n * @private\n */\n _displaySuggestedLocation () {\n if (this._autocompleteContainer) {\n this._autocompleteContainer.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n this._autocompleteContainer.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n }\n }\n\n /**\n * this method is called by this.onGeocodingAdvancedSearchSubmit()\n * and it clears all geocoded location.\n *\n * @private\n */\n _clearGeocodedLocation () {\n this._geocodedLocations = [];\n if (this._geocodedContainer) {\n while (this._geocodedContainer.firstChild) {\n this._geocodedContainer.removeChild(this._geocodedContainer.firstChild);\n }\n }\n }\n\n};\n\n// on récupère les méthodes de la classe commune ReverseGeocoding\nObject.assign(SearchEngine.prototype, SearchEngineDOM);\nObject.assign(SearchEngine.prototype, Widget);\n\nexport default SearchEngine;\n\n// Expose SearchEngine as ol.control.SearchEngine (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.SearchEngine = SearchEngine;\n}\n","var MousePositionDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPmousePosition\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show mouse position control\n * @param {Boolean} isDesktop - specifies if the support is desktop or tactile\n *\n * @returns {DOMElement} DOM element\n */\n _createShowMousePositionPictoElement : function (isDesktop) {\n // contexte d'execution\n var self = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowMousePositionPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-position fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Afficher les coordonnées du curseur\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // Close all results and panels when minimizing the widget\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowMousePositionClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowMousePositionClick(e);\n });\n }\n\n return button;\n },\n\n /**\n * Create Container Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createMousePositionPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPmousePositionPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n return dialog;\n },\n\n _createMousePositionPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Map center localisation (tactile use)\n *\n * @returns {DOMElement} container\n */\n _createMapCenter : function () {\n var div = document.createElement(\"div\");\n div.id = \"GPmapCenter\";\n div.className = \"\";\n return div;\n },\n\n // ################################################################### //\n // ####################### Panel container ########################### //\n // ################################################################### //\n\n /**\n * @returns {DOMElement} container\n */\n\n /**\n * Create Header Title Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createMousePositionPanelTitleElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n div.id = this._addUID(\"GPmousePositionHeaderTitle\");\n div.innerHTML = \"Coordonnées\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createMousePositionPanelHeaderElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n // info: on sépare les appels pour la création du picto de retour,\n // du titre et de la croix de fermeture pour les récupérer dans le composant\n return container;\n },\n\n /**\n * Create Header close div\n *\n * @returns {DOMElement} DOM element\n */\n _createMousePositionPanelCloseElement : function () {\n // contexte\n var self = this;\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPmousePositionPanelClose\");\n divClose.className = \"GPpanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowMousePositionPicto\")).click();\n }, false);\n divClose.addEventListener(\"keydown\", function (event) {\n if (event.keyCode === 13) {\n document.getElementById(self._addUID(\"GPshowMousePositionPicto\")).click();\n }\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowMousePositionPicto\")).click();\n });\n divClose.attachEvent(\"onkeydown\", function (event) {\n if (event.keyCode === 13) {\n document.getElementById(self._addUID(\"GPshowMousePositionPicto\")).click();\n }\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n return divClose;\n },\n\n /**\n * coordinate panel\n * @param {Boolean} [displayAltitude] - specifies if the altitude panel must be displayed\n * @param {Boolean} [displayCoordinates] - specifies if the coordinates panel must be displayed\n * @param {Boolean} [editCoordinates] - specifies if the coordinates edition is allowed\n * @param {Boolean} [currentProjectionUnits] - specifies if the current projection units\n *\n * FIXME\n * call this._createMousePositionPanelBasicCoordinateElement\n * call this._createMousePositionPanelBasicAltitudeElement\n *\n * @returns {DOMElement} DOM element\n */\n _createMousePositionPanelBasicElement : function (displayAltitude, displayCoordinates, editCoordinates, currentProjectionUnits) {\n // default Values\n displayAltitude = (typeof displayAltitude === \"undefined\") ? true : displayAltitude;\n displayCoordinates = (typeof displayCoordinates === \"undefined\") ? true : displayCoordinates;\n editCoordinates = (typeof editCoordinates === \"undefined\") ? false : editCoordinates;\n\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPmousePositionBasicPanel\");\n container.classList.add(\"fr-mx-1w\");\n\n // FIXME on devrait decomposer la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n container.appendChild(this._createMousePositionPanelBasicCoordinateElement(displayCoordinates, editCoordinates, currentProjectionUnits));\n container.appendChild(this._createMousePositionPanelEditToolsElement(editCoordinates));\n container.appendChild(this._createMousePositionPanelBasicAltitudeElement(displayAltitude));\n\n return container;\n },\n\n /**\n * create coordinate elements\n *\n * @param {String} coordType - (\"Lon\" ou \"Lat\")\n * @param {Boolean} [editCoordinates=false] - specifies if the coordinates edition is allowed\n *\n * @returns {Array} list of DOM elements\n */\n _createCoordinateElement : function (coordType, editCoordinates) {\n var context = this;\n\n if ([\"Lon\", \"Lat\"].indexOf(coordType) === -1) {\n return [];\n }\n\n var list = [];\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPmousePosition\" + coordType);\n input.title = editCoordinates === true ? \"Cliquer pour saisir des coordonnées\" : \"\";\n input.readOnly = true;\n\n if (editCoordinates) {\n input.addEventListener(\"click\", function () {\n context.onMousePositionEditModeClick(true);\n });\n input.addEventListener(\"change\", function (e) {\n this.classList.remove(\"error\");\n var valid = context.validateExtentCoordinate(coordType, this.value, e);\n valid ? this.classList.remove(\"error\") : this.classList.add(\"error\");\n });\n }\n list.push(input);\n\n var span = document.createElement(\"span\");\n span.className = \"GPmousePositionUnits\";\n list.push(span);\n\n return list;\n },\n\n /**\n *\n * @param {String} coordType - (\"Lon\" ou \"Lat\")\n * @param {Boolean} [editCoordinates=false] - specifies if the coordinates edition is allowed\n *\n * @returns {Array} list of DOM elements\n */\n _createDMSCoordinateElement : function (coordType, editCoordinates) {\n if ([\"Lon\", \"Lat\"].indexOf(coordType) === -1) {\n return [];\n }\n\n var context = this;\n\n var list = [];\n\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPmousePosition\" + coordType + \"Degrees\");\n input.className = \"GPSexagesimal\";\n input.setAttribute(\"name\", \"degrees\");\n input.title = editCoordinates === true ? \"Cliquer pour saisir des coordonnées\" : \"\";\n input.readOnly = true;\n input.dataset.min = 0;\n input.dataset.max = (coordType === \"Lon\") ? 180 : 90;\n if (editCoordinates) {\n input.addEventListener(\"click\", function () {\n context.onMousePositionEditModeClick(true);\n });\n input.addEventListener(\"change\", function () {\n this.classList.remove(\"error\");\n var valid = context._checkDMSDegrees(coordType, this);\n valid ? this.classList.remove(\"error\") : this.classList.add(\"error\");\n });\n }\n list.push(input);\n\n var span = document.createElement(\"span\");\n span.className = \"GPmousePositionSexagesimalLabel\";\n span.innerHTML = \"°\";\n list.push(span);\n\n var input1 = document.createElement(\"input\");\n input1.id = this._addUID(\"GPmousePosition\" + coordType + \"Minutes\");\n input1.className = \"GPSexagesimal\";\n input1.setAttribute(\"name\", \"minutes\");\n input1.title = editCoordinates === true ? \"Cliquer pour saisir des coordonnées\" : \"\";\n input1.readOnly = true;\n input1.dataset.min = 0;\n input1.dataset.max = 59;\n if (editCoordinates) {\n input1.addEventListener(\"click\", function () {\n context.onMousePositionEditModeClick(true);\n });\n input1.addEventListener(\"change\", function () {\n this.classList.remove(\"error\");\n var valid = context._checkDMSElement(this);\n valid ? this.classList.remove(\"error\") : this.classList.add(\"error\");\n });\n }\n list.push(input1);\n\n var span1 = document.createElement(\"span\");\n span1.className = \"GPmousePositionSexagesimalLabel\";\n span1.innerHTML = \"'\";\n list.push(span1);\n\n var input2 = document.createElement(\"input\");\n input2.id = this._addUID(\"GPmousePosition\" + coordType + \"Seconds\");\n input2.className = \"GPSexagesimalsec\";\n input2.setAttribute(\"name\", \"seconds\");\n input2.title = editCoordinates === true ? \"Cliquer pour saisir des coordonnées\" : \"\";\n input2.readOnly = true;\n input2.dataset.min = 0;\n input2.dataset.max = 59;\n if (editCoordinates) {\n input2.addEventListener(\"click\", function () {\n context.onMousePositionEditModeClick(true);\n });\n input2.addEventListener(\"change\", function () {\n this.classList.remove(\"error\");\n var valid = context._checkDMSElement(this, true);\n valid ? this.classList.remove(\"error\") : this.classList.add(\"error\");\n });\n }\n list.push(input2);\n\n var span2 = document.createElement(\"span\");\n span2.className = \"GPmousePositionSexagesimalLabel\";\n span2.innerHTML = \"''\";\n list.push(span2);\n\n var select = document.createElement(\"select\");\n select.id = this._addUID(\"GPmousePosition\" + coordType + \"Direction\");\n select.className = \"GPmousePositionDirection\";\n select.setAttribute(\"name\", \"direction\");\n select.disabled = true;\n\n var option = document.createElement(\"option\");\n option.value = (coordType === \"Lon\") ? \"E\" : \"N\";\n option.innerHTML = (coordType === \"Lon\") ? \"E\" : \"N\";\n select.appendChild(option);\n\n var option1 = document.createElement(\"option\");\n option1.value = (coordType === \"Lon\") ? \"O\" : \"S\";\n option1.innerHTML = (coordType === \"Lon\") ? \"O\" : \"S\";\n select.appendChild(option1);\n list.push(select);\n\n return list;\n },\n\n /**\n * @param {Boolean} [display=false] - specifies if the coordinates panel must be displayed\n * @param {Boolean} [editCoordinates] - specifies if the coordinates edition is allowed\n * @param {Boolean} [currentProjectionUnits] - specifies if the current projection units\n *\n * @returns {DOMElement} container\n */\n _createMousePositionPanelBasicCoordinateElement : function (display, editCoordinates, currentProjectionUnits) {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPmousePositionCoordinate\");\n div.style.display = display ? \"block\" : \"none\";\n\n // latitude\n var divLat = document.createElement(\"div\");\n divLat.classList.add(\"fr-mb-1w\");\n\n var spanLat = document.createElement(\"span\");\n spanLat.className = \"GPmousePositionLabel\";\n spanLat.id = this._addUID(\"GPmousePositionLatLabel\");\n spanLat.innerHTML = \"Latitude : \";\n divLat.appendChild(spanLat);\n\n var span = document.createElement(\"span\");\n span.id = this._addUID(\"GPmousePositionLatCoordinate\");\n\n var arrayCoords;\n if (currentProjectionUnits === \"DMS\") {\n arrayCoords = this._createDMSCoordinateElement(\"Lat\", editCoordinates);\n } else {\n arrayCoords = this._createCoordinateElement(\"Lat\", editCoordinates);\n }\n for (var i = 0; i < arrayCoords.length; i++) {\n span.appendChild(arrayCoords[i]);\n }\n divLat.appendChild(span);\n div.appendChild(divLat);\n\n // longitude\n var divLon = document.createElement(\"div\");\n divLon.classList.add(\"fr-mb-1w\");\n\n var spanLon = document.createElement(\"span\");\n spanLon.className = \"GPmousePositionLabel\";\n spanLon.id = this._addUID(\"GPmousePositionLonLabel\");\n spanLon.innerHTML = \"Longitude : \";\n divLon.appendChild(spanLon);\n\n var span1 = document.createElement(\"span\");\n span1.id = this._addUID(\"GPmousePositionLonCoordinate\");\n\n var arrayCoords1;\n if (currentProjectionUnits === \"DMS\") {\n arrayCoords1 = this._createDMSCoordinateElement(\"Lon\", editCoordinates);\n } else {\n arrayCoords1 = this._createCoordinateElement(\"Lon\", editCoordinates);\n }\n for (var j = 0; j < arrayCoords1.length; j++) {\n span1.appendChild(arrayCoords1[j]);\n }\n divLon.appendChild(span1);\n div.appendChild(divLon);\n\n return div;\n },\n\n /**\n * @param {Boolean} [display=false] - specifies if the altitude panel must be displayed\n *\n * @returns {DOMElement} container\n */\n _createMousePositionPanelBasicAltitudeElement : function (display) {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPmousePositionAltitude\");\n div.classList.add(\"fr-mb-1w\");\n div.style.display = display ? \"block\" : \"none\";\n\n var spanLabel = document.createElement(\"span\");\n spanLabel.className = \"GPmousePositionLabel\";\n spanLabel.innerHTML = \"Altitude : \";\n div.appendChild(spanLabel);\n\n var spanAlt = document.createElement(\"span\");\n spanAlt.className = \"GPmousePositionCoords\";\n spanAlt.id = this._addUID(\"GPmousePositionAlt\");\n spanAlt.innerHTML = \"...\";\n div.appendChild(spanAlt);\n\n var spanUnits = document.createElement(\"span\");\n spanUnits.className = \"GPmousePositionAltitudeUnits\";\n spanUnits.innerHTML = \"m\";\n div.appendChild(spanUnits);\n\n return div;\n },\n\n /**\n * @param {Boolean} [editCoordinates=false] - specifies if the coordinates edition is allowed\n *\n * @returns {DOMElement} container\n */\n _createMousePositionPanelEditToolsElement : function (editCoordinates) {\n var context = this;\n\n var div = document.createElement(\"div\");\n div.className = \"GPmousePositionPanelEditTools\";\n div.id = this._addUID(\"GPmousePositionPanelEditTools\");\n if (!editCoordinates) {\n div.style.display = \"none\";\n }\n\n var span1 = document.createElement(\"span\");\n span1.className = \"GPmousePositionEditTool\";\n span1.id = this._addUID(\"GPmousePositionLocate\");\n span1.title = editCoordinates === true ? \"Cliquer pour saisir des coordonnées\" : \"\";\n if (editCoordinates) {\n span1.addEventListener(\"click\", function () {\n context.onMousePositionEditModeLocateClick();\n });\n }\n div.appendChild(span1);\n\n var span2 = document.createElement(\"span\");\n span2.className = \"GPmousePositionEditTool\";\n span2.id = this._addUID(\"GPmousePositionCloseEdit\");\n span2.title = \"Quitter la saisie des coordonnées\";\n span2.style.display = \"none\";\n if (editCoordinates) {\n span2.addEventListener(\"click\", function () {\n context.onMousePositionEditModeClick(false);\n });\n }\n div.appendChild(span2);\n\n return div;\n },\n\n // ################################################################### //\n // #################### Settings container ########################### //\n // ################################################################### //\n\n /**\n * @param {Boolean} [display=false] - specifies if the settings panel must be displayed\n *\n * @returns {DOMElement[]} array containing input and label elements\n */\n _createShowMousePositionSettingsElement : function (display) {\n // contexte d'execution\n var self = this;\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowMousePositionSettings\");\n\n button.className = \"GPelementHidden GPshowAdvancedToolPicto GPshowMoreOptionsImage GPshowMoreOptions GPshowMousePositionSettingsPicto gpf-hidden gpf-btn fr-btn--sm fr-btn--tertiary gpf-btn--tertiary fr-icon-arrow-down-fill\";\n button.title = \"Réglages\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", true);\n\n // Close all results and panels when minimizing the widget\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowMousePositionSettingsClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowMousePositionSettingsClick(e);\n });\n }\n\n return button;\n },\n\n /**\n * settings panel\n * @param {Boolean} [display=true] - specifies if the settings panel must be displayed\n *\n * FIXME\n * don't call this._createMousePositionSettingsSystemsElement\n * don't call this._createMousePositionSettingsUnitsElement\n *\n * @returns {DOMElement} DOM element\n */\n _createMousePositionSettingsElement : function (display) {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPmousePositionSettings\");\n container.style.display = (display === undefined || display) ? \"block\" : \"none\";\n container.classList.add(\"fr-m-1w\");\n\n var span = document.createElement(\"span\");\n span.className = \"GPmousePositionSettingsLabel\";\n span.innerHTML = \"Système de référence\";\n container.appendChild(span);\n\n return container;\n },\n\n /**\n * @param {Object[]} systems - list of systems\n *\n * @returns {DOMElement} DOM element select\n */\n _createMousePositionSettingsSystemsElement : function (systems) {\n // contexte d'execution\n var context = this;\n\n var selectSystem = document.createElement(\"select\");\n selectSystem.id = this._addUID(\"GPmousePositionProjectionSystem\");\n selectSystem.className = \"GPselect GPmousePositionSettingsSelect gpf-select fr-select fr-my-1w\";\n selectSystem.addEventListener(\"change\", function (e) {\n context.onMousePositionProjectionSystemChange(e);\n });\n selectSystem.addEventListener(\"mouseover\", function (e) {\n // FIXME mettre une condition si target === option\n if (e.target.nodeName !== \"OPTION\") {\n context.onMousePositionProjectionSystemMouseOver(e);\n }\n });\n\n selectSystem.title = \"Type de système\";\n\n for (var i = 0; i < systems.length; i++) {\n var obj = systems[i];\n var option = document.createElement(\"option\");\n option.value = obj.code;\n option.text = obj.label || i;\n // option.label = obj.label;\n selectSystem.appendChild(option);\n }\n\n return selectSystem;\n },\n\n /**\n * @param {Object[]} units - list of units\n *\n * @returns {DOMElement} DOM element select\n */\n _createMousePositionSettingsUnitsElement : function (units) {\n // contexte d'execution\n var context = this;\n\n var selectUnits = document.createElement(\"select\");\n selectUnits.id = this._addUID(\"GPmousePositionProjectionUnits\");\n selectUnits.className = \"GPselect GPmousePositionSettingsSelect gpf-select fr-select\";\n selectUnits.addEventListener(\"change\", function (e) {\n context.onMousePositionProjectionUnitsChange(e);\n });\n\n selectUnits.title = \"Unités du système\";\n\n for (var j = 0; j < units.length; j++) {\n var obj = units[j];\n var option = document.createElement(\"option\");\n option.value = (obj.code) ? obj.code : j;\n option.text = obj.label || j;\n // option.label = obj.label;\n selectUnits.appendChild(option);\n }\n\n return selectUnits;\n },\n\n /**\n * @param {String} [currentProjectionType=\"Metric\"] - \"Geographical\" or \"Metric\"\n */\n _resetLabelElements : function (currentProjectionType) {\n // Changement des labels dans le formulaire de saisie\n var spanLat = document.getElementById(this._addUID(\"GPmousePositionLatLabel\"));\n spanLat.innerHTML = currentProjectionType === \"Geographical\" ? \"Latitude :\" : \"X :\";\n\n var spanLon = document.getElementById(this._addUID(\"GPmousePositionLonLabel\"));\n spanLon.innerHTML = currentProjectionType === \"Geographical\" ? \"Longitude :\" : \"Y :\";\n },\n\n /**\n * @param {String} currentProjectionUnits - projection units\n */\n _resetUnitElements : function (currentProjectionUnits) {\n var value = \"\";\n if (currentProjectionUnits === \"M\" || currentProjectionUnits === \"KM\") {\n value = currentProjectionUnits.toLowerCase();\n }\n\n var elts = document.getElementsByClassName(\"GPmousePositionUnits\");\n for (var e = 0; e < elts.length; e++) {\n elts[e].innerHTML = value;\n }\n },\n\n /**\n * @param {Boolean} editCoordinates - edit coordinates option\n * @param {String} currentProjectionType - current projection type\n * @param {String} currentProjectionUnits - current projection unit\n */\n _resetCoordinateElements : function (editCoordinates, currentProjectionType, currentProjectionUnits) {\n // Suppression de tous les enfants de GPmousePositionLatCoordinate\n var latElt = document.getElementById(this._addUID(\"GPmousePositionLatCoordinate\"));\n while (latElt.firstChild) {\n latElt.removeChild(latElt.firstChild);\n }\n\n var arrayCoords;\n if (currentProjectionUnits === \"DMS\") {\n arrayCoords = this._createDMSCoordinateElement(\"Lat\", editCoordinates);\n } else {\n arrayCoords = this._createCoordinateElement(\"Lat\", editCoordinates);\n }\n for (var i = 0; i < arrayCoords.length; i++) {\n latElt.appendChild(arrayCoords[i]);\n }\n\n // Suppression de tous les enfants de GPmousePositionLonCoordinate\n var lonElt = document.getElementById(this._addUID(\"GPmousePositionLonCoordinate\"));\n while (lonElt.firstChild) {\n lonElt.removeChild(lonElt.firstChild);\n }\n\n var arrayCoords1;\n if (currentProjectionUnits === \"DMS\") {\n arrayCoords1 = this._createDMSCoordinateElement(\"Lon\", editCoordinates);\n } else {\n arrayCoords1 = this._createCoordinateElement(\"Lon\", editCoordinates);\n }\n for (var j = 0; j < arrayCoords1.length; j++) {\n lonElt.appendChild(arrayCoords1[j]);\n }\n\n // FIXME on simule un deplacement ?\n // this.onMapMove();\n },\n\n /**\n * Set/unset editing mode\n *\n * @param {Boolean} editing - active edit coordinates mode\n */\n _setEditMode : function (editing) {\n var locateElt = document.getElementById(this._addUID(\"GPmousePositionLocate\"));\n locateElt.title = editing ? \"Aller à la position ...\" : \"Cliquer pour saisir des coordonnées\";\n\n var closeEditElt = document.getElementById(this._addUID(\"GPmousePositionCloseEdit\"));\n closeEditElt.style.display = editing ? \"inline-block\" : \"none\";\n\n var selector = \"div[id^=\" + this._addUID(\"GPmousePositionCoordinate\") + \"]\";\n var inputs = document.querySelectorAll(selector + \" input\");\n for (var i = 0; i < inputs.length; i++) {\n inputs[i].readOnly = !editing;\n if (editing) {\n inputs[i].value = \"\";\n inputs[i].classList.remove(\"error\");\n }\n }\n var selects = document.querySelectorAll(selector + \" select\");\n for (var j = 0; j < selects.length; j++) {\n selects[j].disabled = !editing;\n }\n },\n\n /**\n *\n * @param {DOMElement} input - input element\n * @param {Boolean} isFloat - check for float value\n *\n * @returns {Boolean} true if input value is within bounds\n */\n _checkDMSElement : function (input, isFloat) {\n var b = isFloat !== undefined;\n\n var value = input.value;\n if (b) {\n value = value.replace(\",\", \".\");\n }\n if (isNaN(value)) {\n return false;\n }\n\n var v = parseFloat(value);\n if (!b && (v | 0) !== v) { // is it an integer\n return false;\n }\n\n var min = Number(input.dataset.min);\n var max = Number(input.dataset.max);\n return (v >= min && v <= max);\n },\n\n /**\n * @param {String} coordType - \"Lon\" or \"Lat\"\n * @param {DOMElement} input - input element\n *\n * @returns {Boolean} true if input value is within bounds\n */\n _checkDMSDegrees : function (coordType, input) {\n if (isNaN(input.value)) {\n return false;\n }\n\n var v = parseFloat(input.value);\n if ((v | 0) !== v) { // is it an integer\n return false;\n }\n\n var min = Number(input.dataset.min);\n var max = Number(input.dataset.max);\n if (v < min || v > max) {\n return false;\n }\n\n var inputMinutes = document.getElementById(this._addUID(\"GPmousePosition\" + coordType + \"Minutes\"));\n var inputSeconds = document.getElementById(this._addUID(\"GPmousePosition\" + coordType + \"Seconds\"));\n\n if (v >= max) {\n inputMinutes.dataset.max = 0;\n inputSeconds.dataset.max = 0;\n } else {\n inputMinutes.dataset.max = 59;\n inputSeconds.dataset.max = 59.9999;\n }\n\n return true;\n },\n\n // ################################################################### //\n // ####################### handlers Event ############################ //\n // ################################################################### //\n\n /**\n * Function displaying coordinates from cursor position (desktop)\n * or map center (tactile)\n * @param {Object} coordinate - coordinates\n */\n GPdisplayCoords : function (coordinate) {\n // Compute coords in case of cursor position (desktop)\n if (coordinate) {\n var labelLon = document.getElementById(this._addUID(\"GPmousePositionLonLabel\"));\n var labelLat = document.getElementById(this._addUID(\"GPmousePositionLatLabel\"));\n\n if (coordinate.x || coordinate.y) {\n labelLat.innerHTML = \"X : \";\n labelLon.innerHTML = \"Y : \";\n } else if (coordinate.e || coordinate.n) {\n labelLat.innerHTML = \"E : \";\n labelLon.innerHTML = \"N : \";\n } else {\n labelLat.innerHTML = \"Latitude : \";\n labelLon.innerHTML = \"Longitude : \";\n }\n\n if (typeof coordinate.lat === \"object\" && typeof coordinate.lng === \"object\") {\n var parts = {\n lng : \"Lon\",\n lat : \"Lat\"\n };\n var units = [\"Degrees\", \"Minutes\", \"Seconds\"];\n for (var p in parts) {\n for (var u = 0; u < units.length; ++u) {\n var selector = \"GPmousePosition\" + parts[p] + units[u];\n var elt = document.getElementById(this._addUID(selector));\n var key = units[u].charAt(0).toLowerCase();\n elt.value = coordinate[p][key];\n }\n }\n // directions\n document.getElementById(this._addUID(\"GPmousePositionLonDirection\")).value = coordinate.lng.direction;\n document.getElementById(this._addUID(\"GPmousePositionLatDirection\")).value = coordinate.lat.direction;\n } else {\n var elLat = document.getElementById(this._addUID(\"GPmousePositionLat\"));\n var elLon = document.getElementById(this._addUID(\"GPmousePositionLon\"));\n\n elLat.value = coordinate.x || coordinate.lat || coordinate.e || \"0\";\n elLon.value = coordinate.y || coordinate.lng || coordinate.lon || coordinate.n || \"0\";\n\n elLat.title = \"Latitude\";\n elLon.title = \"Longitude\";\n\n elLat.type = \"text\";\n elLon.type = \"text\";\n\n // les unites\n var unit = (coordinate.unit === undefined) ? \"\" : coordinate.unit;\n var elements = document.getElementsByClassName(\"GPmousePositionUnits\");\n for (var n = 0; n < elements.length; ++n) {\n elements[n].innerHTML = unit;\n }\n }\n }\n },\n\n /**\n * Function displaying altitude from cursor position (desktop)\n * or map center (tactile)\n * @param {Object} coordinate - coordinates\n * @param {Number} altitudeTimeoutDelay - when the mouse stop moving, delay before the altitude request is launched\n * @param {Number} noDataValue - the no data value\n * @param {Number} noDataValueTolerance - the no data value tolerance\n */\n GPdisplayElevation : function (coordinate, altitudeTimeoutDelay, noDataValue, noDataValueTolerance) {\n // contexte d'execution\n var self = this;\n\n // Latency for altitude request\n var altitudeTimeout;\n if (!altitudeTimeoutDelay) {\n altitudeTimeoutDelay = 500;\n }\n\n clearTimeout(altitudeTimeout);\n document.getElementById(this._addUID(\"GPmousePositionAlt\")).innerHTML = \"...\";\n\n if (noDataValue == null) {\n noDataValue = -99999;\n }\n if (noDataValueTolerance == null) {\n noDataValueTolerance = 99980;\n }\n var maxThreshold = noDataValue + noDataValueTolerance;\n var minThreshold = noDataValue - noDataValueTolerance;\n\n // Compute coords in case of cursor position (desktop)\n if (coordinate) {\n // If no altitude panel, don't call altitude request\n if (document.getElementById(this._addUID(\"GPmousePositionAltitude\"))) {\n altitudeTimeout = setTimeout(function () {\n self.onRequestAltitude(coordinate, function (z) {\n if (minThreshold < z && z < maxThreshold) {\n self.GPresetElevation();\n } else {\n document.getElementById(self._addUID(\"GPmousePositionAlt\")).innerHTML = z;\n }\n });\n }, altitudeTimeoutDelay);\n }\n }\n },\n\n /**\n * Function reseting altitude value\n */\n GPresetElevation : function () {\n if (document.getElementById(this._addUID(\"GPmousePositionAltitude\"))) {\n document.getElementById(this._addUID(\"GPmousePositionAlt\")).innerHTML = \"---\";\n }\n }\n};\n\nexport default MousePositionDOM;\n","// import CSS\nimport \"../../CSS/Controls/MousePosition/GPFmousePosition.css\";\n// import \"../../CSS/Controls/MousePosition/GPFmousePositionStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport Overlay from \"ol/Overlay\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\nimport {\n transform as olTransformProj,\n get as olGetProj,\n transformExtent as olTransformExtentProj\n} from \"ol/proj\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Utils from \"../../Utils/Helper\";\nimport Interactions from \"../Utils/Interactions\";\nimport Markers from \"../Utils/Markers\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport MathUtils from \"../../Utils/MathUtils\";\nimport Draggable from \"../../Utils/Draggable\";\n// import defs proj4 manually (cf. line 125)\n// import Proj4 from \"proj4\";\n// import { register } from \"ol/proj/proj4\";\n// import Register from \"../../Utils/Register\";\n// import local with ol dependencies\nimport CRS from \"../../CRS/CRS\";\n// import \"../CRS/AutoLoadCRS\";\n\n// DOM\nimport MousePositionDOM from \"./MousePositionDOM\";\n\nvar logger = Logger.getLogger(\"GeoportalMousePosition\");\n\n/**\n * @classdesc\n * MousePosition Control.\n *\n * @constructor\n * @alias ol.control.GeoportalMousePosition\n * @type {ol.control.GeoportalMousePosition}\n * @extends {ol.control.Control}\n * @param {Object} options - options for function call.\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {String} [options.apiKey] - API key. The key \"calcul\" is used by default.\n * @param {Boolean} [options.ssl = true] - use of ssl or not (default true, service requested using https protocol)\n * @param {Boolean} [options.draggable = false] - Specify if widget is draggable\n * @param {Boolean} [options.collapsed = true] - Specify if MousePosition control should be collapsed at startup. Default is true.\n * @param {Array} [options.units] - list of coordinates units, to be displayed in control units list.\n * Values may be \"DEC\" (decimal degrees), \"DMS\" (sexagecimal), \"RAD\" (radians) and \"GON\" (grades) for geographical coordinates,\n * and \"M\" or \"KM\" for metric coordinates\n * @param {Boolean} [options.displayAltitude = true] - activate (true) or deactivate (false) the altitude panel. True by default\n * @param {Boolean} [options.displayCoordinates = true] - activate (true) or deactivate (false) the coordinates panel. True by default\n * @param {Boolean} [options.editCoordinates = false] - If true, coordinates from the MousePosition control can be edited by users to re-center the view. False by default.\n * @param {Function} [options.mapCenterCallback] - callback...\n * @param {Array} [options.systems] - list of projection systems, default are Geographical (\"EPSG:4326\"), Web Mercator (\"EPSG:3857\"), Lambert 93 (\"EPSG:2154\") and extended Lambert 2 (\"EPSG:27572\").\n * Each array element (=system) is an object with following properties :\n * @param {String} options.systems.crs - Proj4 crs alias (from proj4 defs). e.g. : \"EPSG:4326\". Required\n * @param {String} [options.systems.label] - CRS label to be displayed in control. Default is crs code (e.g. \"EPSG:4326\")\n * @param {String} options.systems.type - CRS units type for coordinates conversion : \"Geographical\" or \"Metric\". Default: \"Metric\"\n * @param {Object} [options.systems.geoBBox] - Aera covered by the system (WGS84 coordinates).\n * @param {Number} options.systems.geoBBox.right - Right bound.\n * @param {Number} options.systems.geoBBox.left - Left bound.\n * @param {Number} options.systems.geoBBox.top - Top bound.\n * @param {Number} options.systems.geoBBox.bottom - Bottom bound.\n * @param {Object} [options.positionMarker] - options for position marker\n * @param {String} options.positionMarker.url - Marker url (define in src/Openlayers/Controls/Utils/Markers.js)\n * @param {Array} options.positionMarker.offset - Offsets in pixels used when positioning the marker towards targeted point.\n * The first element in the array is the horizontal offset. A positive value shifts the marker right.\n * The second element in the array is the vertical offset. A positive value shifts the marker down. [0,0] value positions the top-left corner of the marker image to the targeted point.\n * Default is offset associated to default marker image.\n * @param {Boolean} options.positionMarker.hide - if true, marker is not displayed, otherwise displayed (False by default.)\n * @param {Object} [options.altitude] - elevation configuration\n * @param {Object} [options.altitude.serviceOptions] - options of elevation service\n * @param {Number} [options.altitude.responseDelay] - latency for altitude request, 500 ms by default\n * @param {Number} [options.altitude.triggerDelay] - immobilisation time of movement on the map to trigger the elevation calculation, 200 ms by default\n * @param {Number} [options.altitude.noDataValue] - value used for altitude service no data (default is -99999). In this case, \"---m\" will be displayed instead of \"-99999m\"\n * @param {Number} [options.altitude.noDataValueTolerance] - tolerance for no data value :\n * values in [noDataValue + noDataValueTolerance ; noDataValue - noDataValueTolerance] interval will not be displayed, but \"---m\" will be displayed instead.\n * Default is 90000 (no data values = [-9999 ; -189999])\n * @example\n * var MousePosition = new ol.control.GeoportalMousePosition({\n * \"collapsed\" : false,\n * \"graggable\" : true,\n * \"displayCoordinates\" : true,\n * \"displayAltitude\" : true,\n * \"altitude\" : {\n * \"triggerDelay\" : 100,\n * \"responseDelay\" : 500,\n * \"noDataValue\" : -99999,\n * \"noDataValueTolerance\" : 99000,\n * \"serviceOptions\" : {}\n * },\n * \"systems\" : [\n * {\n * \"crs\" : \"EPSG:3857\",\n * \"label\" : \"Web Mercator\",\n * \"type\" : \"Metric\"\n * },\n * {\n * \"crs\" : \"EPSG:4326\",\n * \"label\" : \"Géographiques\",\n * \"type\" : \"Geographical\"\n * },\n * {\n * \"label\" : \"Lambert 93\",\n * \"crs\" : \"EPSG:2154\",\n * \"type\" : \"Metric\",\n * \"geoBBox\" : {\n * \"left\" : -9.86,\n * \"bottom\" : 41.15,\n * \"right\" : 10.38,\n * \"top\" : 51.56\n * }\n * }\n * ],\n * \"units\" : [\"DEC\", \"DMS\"]\n * });\n */\nvar MousePosition = class MousePosition extends Control {\n\n /**\n * See {@link ol.control.GeoportalMousePosition}\n * @module MousePosition\n * @alias module:~controls/MousePosition\n * @param {*} options - options\n * @example\n * import GeoportalMousePosition from \"gpf-ext-ol/controls/MousePosition\"\n * ou\n * import { GeoportalMousePosition } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof MousePosition)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"MousePosition\";\n // init Proj4 defs manually\n // Register.load(Proj4);\n // try {\n // register(Proj4);\n // } catch (e) {}\n\n this._initialize(options);\n\n // init control DOM container\n this.container = this._initContainer(this.options);\n\n // ajout du container\n (this.element) ? this.element.appendChild(this.container) : this.element = this.container;\n\n return this;\n };\n\n /**\n * Overload ol.control.Control setMap method, called when\n *\n * @param {Object} map - the map\n *\n */\n setMap (map) {\n var context = this;\n\n if (map) { // dans le cas de l'ajout du contrôle à la map\n var center = this._createMapCenter();\n map.getViewport().appendChild(center);\n if (!this.collapsed && !this._isDesktop) {\n center.className = \"GPmapCenterVisible\";\n }\n\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this._panelMousePositionContainer,\n this._panelHeaderContainer,\n map.getTargetElement()\n );\n }\n\n // on met en place l'evenement sur la carte pour recuperer les coordonnées,\n // on l'active à l'ouverture du panneau uniquement !\n if (!this.collapsed) {\n // evenement valable pour le mode desktop !\n if (this._isDesktop) {\n this.listenerKey = map.on(\n \"pointermove\",\n (e) => { this.onMouseMove(e); }\n );\n } else {\n this.listenerKey = map.on(\n \"moveend\",\n (e) => this.onMapMove(e)\n );\n }\n\n this._showMousePositionButton.setAttribute(\"aria-pressed\", true);\n }\n\n // add overlay only if option editCoordinates is true\n if (this.options.editCoordinates) {\n // création de l'élément DOM\n var markerDiv = document.createElement(\"img\");\n markerDiv.id = this._addUID(\"GPmousePositionMarker\");\n markerDiv.src = this._markerUrl;\n markerDiv.title = \"Cliquer pour supprimer\";\n markerDiv.addEventListener(\"click\", function () {\n context._markerOverlay.setPosition(undefined);\n });\n\n this._markerOverlay = new Overlay({\n offset : this._markerOffset,\n element : markerDiv,\n stopEvent : false\n });\n map.addOverlay(this._markerOverlay);\n }\n } else {\n olObservableUnByKey(this.listenerKey);\n }\n\n // call original setMap method\n super.setMap(map);\n\n // HACK: on arrête l'execution de la fonction...\n if (map === null) {\n return;\n }\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n\n // mode \"collapsed\"\n if (!this.collapsed) {\n var inputShow = document.getElementById(\"GPshowMousePosition-\" + this._uid);\n inputShow.checked = \"checked\";\n this._setElevationPanel(this.options.displayAltitude);\n this._setCoordinatesPanel(this.options.displayCoordinates);\n if (!this.options.displayCoordinates) {\n this._setSettingsPanel(false);\n }\n }\n }\n\n // ################################################################### //\n // #################### user interface methods ####################### //\n // ################################################################### //\n\n /**\n * Set additional projection system\n *\n * @param {Object} system - projection system\n * @param {String} system.crs - Proj4 crs alias (from proj4 defs) e.g. \"EPSG:4326\"\n * @param {String} [system.label] - CRS label to be displayed in control. Default is system.crs alias\n * @param {String} [system.type] - CRS units type for coordinates conversion (one of control options.units). Default is \"Metric\"\n */\n addSystem (system) {\n if (typeof system !== \"object\") {\n logger.log(\"[ERROR] MousePosition:addSystem - system parameter should be an object\");\n return;\n }\n if (!system.crs) {\n logger.error(\"crs not defined !\");\n return;\n }\n if (!system.label) {\n logger.warn(\"crs label not defined, use crs code by default.\");\n system.label = system.crs;\n }\n if (!system.type) {\n logger.warn(\"type srs not defined, use 'Metric' by default.\");\n system.type = \"Metric\";\n }\n\n // chargement de la definition de la projection\n // même si déjà chargé...\n CRS.loadByName(system.crs);\n\n if (!olGetProj(system.crs)) {\n logger.error(\"crs '{}' not available into proj4 definitions !\", system.crs);\n return;\n }\n\n // 1. add system to control systems\n for (var j = 0; j < this._projectionSystems.length; j++) {\n var obj = this._projectionSystems[j];\n if (system.crs === obj.crs) {\n // warn user\n logger.info(\"crs '{}' already configured\", obj.crs);\n }\n }\n system.code = this._projectionSystems.length;\n this._projectionSystems.push(system);\n\n // 2. add system settings option to container (if it was already build)\n var selectSystem = document.getElementById(\"GPmousePositionProjectionSystem-\" + this._uid);\n if (selectSystem) {\n var option = document.createElement(\"option\");\n option.value = system.code;\n option.text = system.label;\n selectSystem.appendChild(option);\n }\n }\n\n /**\n * Set additional projection systems\n *\n * @param {Array} systems - Array of system object, with following properties :\n * @param {String} systems.crs - Proj4 CRS alias (from proj4 defs) e.g. \"EPSG:4326\"\n * @param {String} systems.label - CRS label (for coordinates conversion)\n * @param {String} systems.type - CRS units type to be displayed in control (one of control options.units). Default is \"Metric\"\n */\n addSystems (systems) {\n if (!systems) {\n return;\n }\n if (!Array.isArray(systems)) {\n logger.log(\"[ERROR] MousePosition:addSystems - systems parameter should be an array\");\n return;\n }\n for (var i = 0; i < systems.length; i++) {\n this.addSystem(systems[i]);\n }\n }\n\n /**\n * Remove projection system (in case there are several system with same code, only the first one will be removed)\n *\n * @param {String} systemCrs - CRS alias (from proj4 defs)\n */\n removeSystem (systemCrs) {\n if (!systemCrs || typeof systemCrs !== \"string\") {\n logger.log(\"[ERROR] MousePosition:removeSystem - systemCode parameter should be a string\");\n return;\n }\n\n var systemList = document.getElementById(\"GPmousePositionProjectionSystem-\" + this._uid);\n\n var systemCode = null;\n // find system in control projection systems list\n for (var i = 0; i < this._projectionSystems.length; i++) {\n var proj = this._projectionSystems[i];\n if (systemCrs === proj.crs) {\n systemCode = proj.code;\n // remove system from control projection systems list\n this._projectionSystems.splice(i, 1);\n break;\n }\n }\n\n if (systemCode == null) {\n logger.log(\"[WARN] MousePosition:removeSystem - system not found\");\n return;\n }\n\n /* re-initialization of codes */\n var oldNewCodeMap = [];\n\n for (var j = 0; j < this._projectionSystems.length; j++) {\n oldNewCodeMap[Number(this._projectionSystems[j].code)] = j;\n this._projectionSystems[j].code = j;\n }\n\n /* find system in control container systems list */\n var indexChildToRemove = null;\n\n for (var k = 0; k < systemList.childNodes.length; k++) {\n if (systemCode === systemList.childNodes[j].value) {\n indexChildToRemove = k;\n continue;\n }\n systemList.childNodes[j].value = oldNewCodeMap[Number(systemList.childNodes[j].value)];\n }\n /* remove system from control container systems list */\n if (indexChildToRemove != null) {\n systemList.removeChild(systemList.childNodes[indexChildToRemove]);\n }\n\n // choose arbitrarily a new current system if needed\n if (this._currentProjectionSystems.code === Number(systemCode)) {\n systemList.childNodes[0].setAttribute(\"selected\", \"selected\");\n this._setCurrentSystem(systemList.childNodes[0].value);\n }\n }\n\n /**\n * Set control units (to be displayed)\n *\n * @param {Array} units - list of all coordinates units, to be displayed in control units list.\n * Values may be \"DEC\" (decimal degrees), \"DMS\" (sexagecimal), \"RAD\" (radians) and \"GON\" (grades) for geographical coordinates,\n * and \"M\" or \"KM\" for metric coordinates\n */\n setUnits (units) {\n if (!units || !Array.isArray(units)) {\n return;\n }\n this.options.units = units;\n this._projectionUnits = [];\n this._initProjectionUnits();\n if (this._currentProjectionType) {\n this._setTypeUnitsPanel(this._currentProjectionType);\n }\n }\n\n /**\n * Set control altitude options (useless if displayAltitude == false)\n *\n * @param {Object} options - altitude options\n * @param {Object} [options.serviceOptions] - options of elevation service\n * @param {Number} [options.responseDelay] - latency for elevation request, 500 ms by default\n * @param {Number} [options.triggerDelay] - immobilisation time of movement on the map to trigger the elevation calculation, 200 ms by default\n */\n setAltitudeOptions (options) {\n if (!options || typeof options !== \"object\") {\n return;\n }\n this.options.altitude.triggerDelay = options.triggerDelay;\n this.options.altitude.responseDelay = options.responseDelay;\n if (options.serviceOptions) {\n for (var opt in options.serviceOptions) {\n if (options.serviceOptions.hasOwnProperty(opt)) {\n this.options.altitude.serviceOptions[opt] = options.serviceOptions[opt];\n }\n }\n }\n }\n\n /**\n * Display or hide elevation panel\n *\n * @param {Boolean} displayAltitude - true to display elevation panel, false to hide it\n */\n displayAltitude (displayAltitude) {\n if (displayAltitude === undefined) {\n return;\n }\n\n this.options.displayAltitude = displayAltitude;\n this._setElevationPanel(displayAltitude);\n }\n\n /**\n * Display or hide coordinates panel\n *\n * @param {Boolean} displayCoordinates - true to display coordinates panel, false to hide it\n */\n displayCoordinates (displayCoordinates) {\n if (displayCoordinates === undefined) {\n return;\n }\n this.options.displayCoordinates = displayCoordinates;\n this._setCoordinatesPanel(displayCoordinates);\n this._setSettingsPanel(displayCoordinates);\n }\n\n /**\n * Collapse or display control main container\n *\n * @param {Boolean} collapsed - True to collapse control, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.log(\"[ERROR] MousePosition:setCollapsed - missing collapsed parameter\");\n return;\n }\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n if (!this._isDesktop) {\n document.getElementById(\"GPmapCenter\").className = collapsed ? \"\" : \"GPmapCenterVisible\";\n }\n // on simule l'ouverture du panneau après un click\n this.onShowMousePositionClick();\n this._showMousePositionContainer.checked = !collapsed;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n // ################################################################### //\n // ######################## initialize control ####################### //\n // ################################################################### //\n\n /**\n * Initialize control (called by MousePosition constructor)\n *\n * @param {Object} options - control options (set by user)\n * @private\n */\n _initialize (options) {\n // Set default options\n options = options || {};\n // {Object} control options - set by user or by default\n this.options = options;\n this.options.collapsed = (options.collapsed !== undefined) ? options.collapsed : true;\n /** {Boolean} specify if MousePosition control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n this.options.draggable = (options.draggable !== undefined) ? options.draggable : false;\n /** {Boolean} specify if MousePosition control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n // position marker\n this._markerOverlay = null;\n this._markerUrl = null;\n this._markerOffset = [0, 0];\n this._hideMarker = false;\n this._initMarker(options.positionMarker);\n\n this.options.units = options.units || [];\n this.options.displayAltitude = (options.displayAltitude !== undefined) ? options.displayAltitude : true;\n this.options.displayCoordinates = (options.displayCoordinates !== undefined) ? options.displayCoordinates : true;\n if (this.options.displayCoordinates) {\n this.options.editCoordinates = (options.editCoordinates !== undefined) ? options.editCoordinates : false;\n } else {\n // si les coordonnées ne sont pas affichées : pas besoin de les éditer...\n this.options.editCoordinates = false;\n }\n this.editing = false;\n\n this.options.systems = options.systems || [];\n if (options.altitude) {\n var altitude = options.altitude;\n this.options.altitude = {\n triggerDelay : (altitude.triggerDelay !== undefined) ? altitude.triggerDelay : 200,\n responseDelay : (altitude.responseDelay !== undefined) ? altitude.responseDelay : 500,\n serviceOptions : altitude.serviceOptions || {},\n noDataValue : (altitude.noDataValue !== undefined) ? altitude.noDataValue : -99999,\n noDataValueTolerance : (altitude.noDataValueTolerance !== undefined) ? altitude.noDataValueTolerance : 90000\n };\n } else {\n this.options.altitude = {\n triggerDelay : 200,\n responseDelay : 500,\n serviceOptions : {}\n };\n }\n\n // identifiant du contrôle : utile pour suffixer les identifiants CSS (pour gérer le cas où il y en a plusieurs dans la même page)\n this._uid = this.options.id || SelectorID.generate();\n\n // initialisation des systemes de projections\n this._projectionSystems = [];\n this._initProjectionSystems();\n\n // initialisation des systemes des unités\n this._projectionUnits = {};\n this._initProjectionUnits();\n\n // detection du support : desktop ou tactile\n this._isDesktop = Utils.detectSupport();\n\n // on met en place un seuil sur le timer\n if (this.options.altitude.triggerDelay < 100) {\n this.options.altitude.triggerDelay = 100;\n }\n\n // {Number} timer on movestopped delay (altitude calculation)\n this._timer = this.options.altitude.triggerDelay;\n\n // {Object} Selected projection system\n this._currentProjectionSystems = this._projectionSystems[0];\n\n // {String} Selected projection units typs : Geographical or metric\n this._currentProjectionType = this._projectionSystems[0].type;\n\n // {String} Selected projection unit\n this._currentProjectionUnits = this._projectionUnits[this._currentProjectionType][0].code;\n\n // {Object} Projection units container (DOM Element)\n this._projectionUnitsContainer = null;\n\n // {Object} control panel container (DOM Element)\n this._showMousePositionContainer = null;\n this._panelMousePositionContainer = null;\n this._panelHeaderMousePositionContainer = null;\n\n // gestion de l'affichage du panneau de l'altitude\n if (!this.options.displayAltitude && !this.options.displayCoordinates) {\n // on reactive l'affichage des coordonnées, pour ne pas afficher un panneau vide !\n this.options.displayCoordinates = true;\n }\n\n // listener key for event on pointermove or moveend map\n this.listenerKey = null;\n }\n\n /**\n *\n * @param {Object} option - positionMarker option\n * @private\n */\n _initMarker (option) {\n if (!this.options.editCoordinates) {\n return;\n }\n\n if (!option) {\n this._markerUrl = Markers[\"lightOrange\"];\n this._markerOffset = Markers.defaultOffset;\n return;\n }\n\n // hide\n this._hideMarker = (option.hide !== undefined) ? option.hide : false;\n\n // offset\n if (option.offset) {\n if (Array.isArray(option.offset) && option.offset.length === 2) {\n this._markerOffset = option.offset;\n } else {\n logger.log(\"positionMarker.offset should be an array. e.g. : [0,0]\");\n this._markerOffset = Markers.defaultOffset;\n }\n } else {\n this._markerOffset = Markers.defaultOffset;\n }\n\n var url = option.url;\n if (!url) {\n this._markerUrl = Markers[\"lightOrange\"];\n } else if (url.match(/^[a-zA-Z]+$/)) { // un seul mot\n this._markerUrl = (Markers[url] !== undefined) ? Markers[url] : Markers[\"lightOrange\"];\n } else {\n this._markerUrl = url;\n }\n }\n\n /**\n * this method is called by the constructor and initialize the projection\n * systems.\n * getting coordinates in the requested projection :\n * see this.onMousePositionProjectionSystemChange()\n *\n * @private\n */\n _initProjectionSystems () {\n // on donne la possibilité à l'utilisateur de modifier\n // la liste des systèmes à afficher\n // Ex. this.options.systems\n\n // FIXME doit on charger des projections par defaut dans ce composant ?\n // chargement des projections par defaut\n // CRS.loadByDefault();\n // CRS.overload();\n\n // systemes de projection disponible par defaut\n var projectionSystemsByDefault = [{\n label : \"G\\u00e9ographique\",\n crs : olGetProj(\"EPSG:4326\").getCode(),\n type : \"Geographical\"\n }, {\n label : \"Web Mercator\",\n crs : olGetProj(\"EPSG:3857\").getCode(),\n type : \"Metric\"\n }, {\n label : \"Lambert 93\",\n crs : olGetProj(\"EPSG:2154\").getCode(),\n type : \"Metric\",\n geoBBox : {\n left : -9.86,\n bottom : 41.15,\n right : 10.38,\n top : 51.56\n }\n }, {\n label : \"Lambert II \\u00e9tendu\",\n crs : olGetProj(\"EPSG:27572\").getCode(),\n type : \"Metric\",\n geoBBox : {\n left : -4.87,\n bottom : 42.33,\n right : 8.23,\n top : 51.14\n }\n }];\n\n var systems = this.options.systems;\n for (var i = 0; i < systems.length; i++) {\n /* definition d'un systeme de reference */\n var sys = systems[i];\n this.addSystem(sys);\n }\n\n if (this._projectionSystems.length === 0) {\n // on ajoute les systèmes de projections par défaut\n for (var j = 0; j < projectionSystemsByDefault.length; j++) {\n this.addSystem(projectionSystemsByDefault[j]);\n }\n }\n }\n\n /**\n * this method is called by the constructor and initialize the units.\n * getting coordinates in the requested units :\n * see this.onMousePositionProjectionUnitsChange()\n *\n * @private\n */\n _initProjectionUnits () {\n // on donne la possibilité à l'utilisateur de modifier\n // la liste des unités à afficher\n // Ex.\n // this.options.units : [\"DEC\", \"DMS\"]\n\n // unités disponible par defaut\n var projectionUnitsByDefault = {\n Geographical : [{\n code : \"DEC\",\n label : \"Degrés décimaux\",\n format : MathUtils.coordinateToDecimal\n }, {\n code : \"DMS\",\n label : \"Degrés sexagésimaux\",\n format : MathUtils.coordinateToDMS\n }, {\n code : \"RAD\",\n label : \"Radians\",\n format : MathUtils.coordinateToRad\n }, {\n code : \"GON\",\n label : \"Grades\",\n format : MathUtils.coordinateToGon\n }],\n Metric : [{\n code : \"M\",\n label : \"Mètres\",\n format : MathUtils.coordinateToMeter\n }, {\n code : \"KM\",\n label : \"Kilomètres\",\n format : MathUtils.coordinateToKMeter\n }]\n };\n\n var units = this.options.units;\n\n for (var type in projectionUnitsByDefault) {\n if (projectionUnitsByDefault.hasOwnProperty(type)) {\n var found = false;\n for (var j = 0; j < projectionUnitsByDefault[type].length; j++) {\n var obj = projectionUnitsByDefault[type][j];\n for (var i = 0; i < units.length; i++) {\n var unit = units[i];\n if (obj.code === unit) {\n found = true;\n if (!this._projectionUnits[type]) {\n this._projectionUnits[type] = [];\n }\n this._projectionUnits[type].push(obj);\n }\n }\n }\n if (!found) {\n this._projectionUnits[type] = projectionUnitsByDefault[type];\n }\n }\n }\n\n // au cas où...\n if (typeof this._projectionUnits === \"object\" && Object.keys(this._projectionUnits).length === 0) {\n this._projectionUnits = projectionUnitsByDefault;\n }\n }\n\n /**\n * this method get label from the current projection units\n *\n * @returns {String} projection information\n *\n * @private\n */\n _getCurrentProjectionInformation () {\n var systemInfo = [\n this._currentProjectionSystems.label,\n \"en\"\n ];\n\n var units = this._projectionUnits[this._currentProjectionType];\n for (var u = 0; u < units.length; ++u) {\n if (units[u].code === this._currentProjectionUnits) {\n systemInfo.push(units[u].label);\n break;\n }\n }\n return systemInfo.join(\" \");\n }\n\n // ################################################################### //\n // ######################## methods handle dom ####################### //\n // ################################################################### //\n\n /**\n * Create control main container (called by MousePosition constructor)\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initContainer () {\n // creation du container principal\n var container = this._createMainContainerElement();\n\n // create ReverseGeocode picto\n var picto = this._showMousePositionButton = this._createShowMousePositionPictoElement();\n container.appendChild(picto);\n\n // panel\n var mousePositionPanel = this._panelMousePositionContainer = this._createMousePositionPanelElement();\n var mousePositionPanelDiv = this._createMousePositionPanelDivElement();\n mousePositionPanel.appendChild(mousePositionPanelDiv);\n\n // header\n var panelHeader = this._panelHeaderContainer = this._createMousePositionPanelHeaderElement();\n\n // panel title\n var panelTitle = this._panelTitleContainer = this._createMousePositionPanelTitleElement();\n panelHeader.appendChild(panelTitle);\n\n // close picto\n var closeDiv = this._panelCloseButton = this._createMousePositionPanelCloseElement();\n panelHeader.appendChild(closeDiv);\n mousePositionPanelDiv.appendChild(panelHeader);\n\n var basic = this._createMousePositionPanelBasicElement(\n this.options.displayAltitude,\n this.options.displayCoordinates,\n this.options.editCoordinates,\n this._currentProjectionUnits\n );\n mousePositionPanelDiv.appendChild(basic);\n\n var buttonSettings = this._createShowMousePositionSettingsElement(this.options.displayCoordinates);\n mousePositionPanelDiv.appendChild(buttonSettings);\n\n var settings = this._createMousePositionSettingsElement();\n var systems = this._projectionSystemsContainer = this._createMousePositionSettingsSystemsElement(this._projectionSystems);\n var units = this._projectionUnitsContainer = this._createMousePositionSettingsUnitsElement(this._projectionUnits[this._currentProjectionType]);\n settings.appendChild(systems);\n settings.appendChild(units);\n mousePositionPanelDiv.appendChild(settings);\n\n container.appendChild(mousePositionPanel);\n\n return container;\n }\n\n /**\n * this method is called by this.()\n * and it changes the elevation view panel into the dom.\n *\n * @param {Boolean} active - true:active, false:disable\n * @private\n */\n _setElevationPanel (active) {\n var div = null;\n\n if (!active) {\n div = document.getElementById(\"GPmousePositionAltitude-\" + this._uid);\n div.style.display = \"none\";\n } else {\n div = document.getElementById(\"GPmousePositionAltitude-\" + this._uid);\n div.style.display = \"\";\n }\n }\n\n /**\n * this method is called by this.()\n * and it changes the coordinate view panel into the dom.\n *\n * @param {Boolean} active - true:active, false:disable\n * @private\n */\n _setCoordinatesPanel (active) {\n var div = document.getElementById(\"GPmousePositionCoordinate-\" + this._uid);\n if (!active) {\n div.style.display = \"none\";\n } else {\n div.style.display = \"\";\n }\n }\n\n /**\n * this method is called by this.()\n * and it changes the settings view panel into the dom.\n *\n * @param {Boolean} active - true:active, false:disable\n * @private\n */\n _setSettingsPanel (active) {\n var divPicto = document.getElementById(\"GPshowMousePositionSettingsPicto-\" + this._uid);\n var divPanel = document.getElementById(\"GPmousePositionSettings-\" + this._uid);\n if (!active) {\n divPicto.style.display = \"none\";\n divPanel.style.display = \"none\";\n } else {\n divPicto.style.display = \"\";\n divPanel.style.display = \"\";\n }\n }\n\n /**\n * this method is called by this.onMousePositionProjectionSystemChange()\n * when changes to a metric or a geographical units.\n *\n * @param {String} type - Geographical or Metric\n * @private\n */\n _setTypeUnitsPanel (type) {\n var container = this._projectionUnitsContainer;\n\n // on supprime les enfants...\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n\n var units = this._projectionUnits[type];\n for (var j = 0; j < units.length; j++) {\n var obj = units[j];\n var option = document.createElement(\"option\");\n option.value = (obj.code) ? obj.code : j;\n option.text = obj.label || j;\n // option.label = obj.label;\n container.appendChild(option);\n }\n\n var projectionUnits = this._projectionUnits[type][0].code;\n\n if (this._currentProjectionUnits === \"DMS\" || projectionUnits === \"DMS\") {\n this._resetCoordinateElements(this.options.editCoordinates, type, projectionUnits);\n this._setEditMode(this.editing);\n }\n\n // le nouveau type de system ...\n this._currentProjectionType = type;\n\n // Mise a jour des elements labels et unites\n this._resetLabelElements(type);\n this._resetUnitElements(projectionUnits);\n\n // et comme on a changé de type de systeme,\n // il faut changer aussi d'unité !\n this._currentProjectionUnits = projectionUnits;\n }\n\n // ################################################################### //\n // ##################### handlers events to control ################## //\n // ################################################################### //\n\n /**\n * this sends the coordinates to the panel.\n * (cf. this.GPdisplayCoords() into the DOM functions)\n *\n * @param {Array} olCoordinate - ol.Coordinate object [lon, lat]\n * @param {Object} crs - coordinate CRS (ol.proj.Projection)\n * @private\n */\n _setCoordinate (olCoordinate, crs) {\n // structure\n // ol.Coordinate\n // [\n // 4 // lon\n // 48 // lat\n // ]\n\n // structure pour les coordonnées en fonctin du type demandé :\n // {x:, y:, unit:} ou {lng:, lat:} ou {lon:, lat:} ou {e:, n:, unit:}...\n var coordinate = {};\n // on projete le point dans le systeme demandé\n var oSrs = this._currentProjectionSystems.crs;\n if (!oSrs) {\n logger.log(\"ERROR : system crs not found\");\n return;\n }\n // on reprojette les coordonnées depuis leur CRS d'origine (CRS) vers le CRS demandé (oSrs)\n olCoordinate = olTransformProj(olCoordinate, crs, oSrs);\n\n // type de systeme : Geographical ou Metric\n var type = this._currentProjectionSystems.type;\n\n // on recherche la fonction de formatage dans l'unité demandée\n var format = null;\n var units = this._projectionUnits[type];\n for (var i = 0; i < units.length; i++) {\n if (units[i].code === this._currentProjectionUnits) {\n format = units[i].format;\n break;\n }\n }\n if (!format || typeof format !== \"function\") {\n logger.log(\"WARNING : coordinates format function not found\");\n return;\n } else {\n coordinate = format(olCoordinate);\n }\n\n if (!coordinate || Object.keys(coordinate).length === 0) {\n return;\n }\n\n this.GPdisplayCoords(coordinate);\n }\n\n /**\n * this sends the coordinates to the panel.\n * (cf. this.GPdisplayElevation() into the DOM functions)\n *\n * @param {Array} olCoordinate - ol.Coordinate object [lon, lat]\n * @private\n */\n _setElevation (olCoordinate) {\n // gestion du timer de la requete du service d'altitude\n var delay = this.options.altitude.responseDelay;\n var noDataValue = this.options.altitude.noDataValue;\n var noDataValueTolerance = this.options.altitude.noDataValueTolerance;\n this.GPdisplayElevation(olCoordinate, delay, noDataValue, noDataValueTolerance);\n }\n\n /**\n * this method is triggered when the mouse or the map is stopped.\n * (cf. onMouseMove and onMapMove)\n *\n * @param {Array} olCoordinate - ol.Coordinate object [lon, lat]\n * @param {Object} crs - coordinate CRS (ol.proj.Projection)\n * @private\n */\n onMoveStopped (olCoordinate, crs) {\n // reprojection en CRS:84 (EPSG:4326) pour le calcul alti\n var oLatLng = olTransformProj(olCoordinate, crs, \"EPSG:4326\");\n this._setElevation(oLatLng);\n }\n\n /**\n * this method is an handler event to control. The event is 'mousemove' on\n * the map. The handler sends the coordinates to the panel.\n * (cf. this.GPdisplayCoords() into the DOM functions)\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onMouseMove (e) {\n var self = this;\n\n // info: coordinate = [x, y]\n var coordinate = e.coordinate;\n if (!e.map || !e.map.getView()) {\n return;\n }\n var crs = e.map.getView().getProjection();\n\n this._setCoordinate(coordinate, crs);\n\n // calcul de l'altitude après un certain délai après l'arrêt du mouvement de la souris\n clearTimeout(this._timer);\n this._timer = setTimeout(function () {\n self.onMoveStopped(coordinate, crs);\n }, this.options.altitude.triggerDelay);\n }\n\n /**\n * this method is an handler event to control. The event is 'moveend' on\n * the map. The handler sends the coordinates to the panel.\n * (cf. this.GPdisplayCoords() into the DOM functions)\n *\n * @private\n */\n onMapMove () {\n var self = this;\n\n var map = this.getMap();\n if (!map || !map.getView()) {\n return;\n }\n var view = map.getView();\n var coordinate = view.getCenter();\n var crs = view.getProjection();\n\n this._setCoordinate(coordinate, crs);\n\n // calcul de l'altitude après un certain délai après l'arrêt du mouvement de la souris\n clearTimeout(this._timer);\n this._timer = setTimeout(function () {\n self.onMoveStopped(coordinate, crs);\n }, this.options.altitude.triggerDelay);\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by this.GPdisplayElevation() in the dom, and\n * it executes a request to the elevation service.\n *\n * @param {Object} coordinate - {lat:..., lng:...}\n * @param {Function} callback - callback\n * @private\n */\n onRequestAltitude (coordinate, callback) {\n // INFORMATION\n // on effectue la requête au service d'altitude...\n // on met en place des callbacks afin de recuperer les resultats ou\n // les messages d'erreurs du service.\n // le resultat est affiché dans une balise du dom.\n\n if (!coordinate || Object.keys(coordinate).length === 0) {\n return;\n }\n\n // si on ne veut pas de calcul d'altitude, on ne continue pas !\n if (!this.options.displayAltitude) {\n return;\n }\n\n // on recupere les options du service\n var options = this.options.altitude.serviceOptions || {};\n\n // gestion du protocole et du timeout\n // le timeout est indispensable sur le protocole JSONP.\n var _protocol = options.protocol || \"XHR\";\n var _timeout = options.timeOut || 0;\n if (_protocol === \"JSONP\" && _timeout === 0) {\n _timeout = 15000;\n }\n\n // format de sortie si spécifié\n var _outputFormat = options.outputFormat || \"json\";\n\n // ainsi que les coordonnées : si l'utilisateur explicite zonly false\n var _zonly = true;\n // cela permet d'activer l'option measures côté service d'alti (surchargée si zonly = true)\n var _zonly;\n if (options.zonly === false) {\n _zonly = options.zonly;\n } else {\n _zonly = true;\n }\n\n // récupération d'une réponse complète avec source et précision\n var _measures = options.measures || false;\n\n\n var _positions = [{\n lon : coordinate[0],\n lat : coordinate[1]\n }];\n\n // utilisation d'une ressource spécifique\n var _resource = options.resource;\n\n // et les callbacks\n var _scope = this;\n var _rawResponse = options.rawResponse || false;\n var _customOnSuccess = options.onSuccess || null;\n var _onSuccess = null;\n var _onFailure = null;\n\n if (!_rawResponse) {\n // dans le cas général\n // callback onSuccess\n _onSuccess = function (results) {\n if (results && Object.keys(results).length) {\n if (_customOnSuccess) {\n _customOnSuccess.call(this, results);\n }\n callback.call(this, results.elevations[0].z);\n }\n };\n } else {\n // callback onSuccess\n _onSuccess = function (results) {\n if (_customOnSuccess) {\n _customOnSuccess.call(this, results);\n }\n logger.log(\"alti service raw response : \", results);\n };\n }\n\n // callback onFailure\n _onFailure = function (error) {\n logger.log(\"[getAltitude] ERROR : \" + error.message);\n };\n\n // cas où la clef API n'est pas renseignée dans les options du service,\n // on utilise celle renseignée au niveau du controle ou la clé \"calcul\" par défaut.\n var _apiKey = options.apiKey || this.options.apiKey;\n\n // si l'utilisateur a spécifié le paramètre ssl au niveau du control, on s'en sert\n // true par défaut (https)\n if (typeof options.ssl !== \"boolean\") {\n if (typeof this.options.ssl === \"boolean\") {\n options.ssl = this.options.ssl;\n } else {\n options.ssl = true;\n }\n }\n var _ssl = options.ssl;\n\n Gp.Services.getAltitude({\n apiKey : _apiKey,\n protocol : _protocol,\n ssl : _ssl,\n timeOut : _timeout,\n scope : _scope,\n outputFormat : _outputFormat,\n rawResponse : _rawResponse,\n onSuccess : _onSuccess,\n onFailure : _onFailure,\n zonly : _zonly,\n measures : _measures,\n resource : _resource,\n positions : _positions\n });\n }\n\n /**\n * this method is called by event 'click' on 'GPshowMousePositionPicto' tag label\n * (cf. this._createShowMousePositionPictoElement),\n * and toggles event 'mousemove' on map.\n *\n * @param { event } e évènement associé au clic\n * @private\n */\n onShowMousePositionClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n // checked : true - panel close\n // checked : false - panel open\n var map = this.getMap();\n // on supprime toutes les interactions\n Interactions.unset(map);\n var opened = this._showMousePositionButton.ariaPressed;\n this.collapsed = !(opened === \"true\");\n // on génère nous même l'evenement OpenLayers de changement de propriété\n // (utiliser mousePosition.on(\"change:collapsed\", function(e) ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n\n // evenement declenché à l'ouverture/fermeture du panneau,\n // et en fonction du mode : desktop ou tactile !\n if (opened === \"false\") {\n olObservableUnByKey(this.listenerKey);\n } else if (!this.editing) {\n if (this._isDesktop) {\n this.listenerKey = map.on(\"pointermove\", (e) => { this.onMouseMove(e); });\n } else {\n this.listenerKey = map.on(\"moveend\", (e) => this.onMapMove(e));\n // on simule un deplacement en mode tactile\n this.onMapMove();\n }\n }\n\n // FIXME\n // on gère l'affichage des panneaux ici..., même si ce n'est pas l'endroit\n // adequate...\n this._setElevationPanel(this.options.displayAltitude);\n this._setCoordinatesPanel(this.options.displayCoordinates);\n if (!this.options.displayCoordinates) {\n this._setSettingsPanel(false);\n }\n }\n\n /**\n * this method is called by event 'click' on 'GPshowMousePositionPicto' tag label\n * (cf. this._createShowMousePositionPictoElement),\n * and toggles event 'mousemove' on map.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onShowMousePositionSettingsClick (e) {\n if (!this.draggable) {\n var opened = e.target.ariaPressed;\n if (opened === \"true\") {\n // somme stuff...\n }\n }\n }\n\n /**\n * this method is called by event 'click' on input coordinate\n *\n * @param {Boolean} editing - editing mode\n */\n onMousePositionEditModeClick (editing) {\n if (!this.options.editCoordinates) {\n return;\n }\n if (this.editing === editing) {\n return;\n }\n\n this.editing = editing;\n\n // Affichage des outils, input en ecriture\n this._setEditMode(this.editing);\n\n var map = this.getMap();\n if (this._isDesktop) {\n if (this.editing) { // Unlisten for 'pointermove' events\n // map.un(\"pointermove\", (e) => { this.onMouseMove(e); });\n olObservableUnByKey(this.listenerKey);\n } else { // Listen for 'pointermove' events\n this.listenerKey = map.on(\"pointermove\", (e) => { this.onMouseMove(e); });\n // on simule un deplacement\n this.onMapMove();\n }\n } else {\n if (this.editing) { // Unlisten for 'moveend' events\n // map.un(\"moveend\", (e) => this.onMapMove(e));\n olObservableUnByKey(this.listenerKey);\n } else { // Listen for moveend' events\n this.listenerKey = map.on(\"moveend\", (e) => this.onMapMove(e));\n // on simule un deplacement\n this.onMapMove();\n }\n }\n\n // clear _markerOverlay\n if (!this.editing && this._markerOverlay) {\n this._markerOverlay.setPosition(undefined);\n }\n }\n\n /**\n * Get coordinate from inputs and select in decimal degrees\n *\n * @param {String} coordType - \"Lon\" or \"Lat\"\n * @returns {undefined}\n * @private\n */\n getCoordinate (coordType) {\n var inputDegrees = document.getElementById(this._addUID(\"GPmousePosition\" + coordType + \"Degrees\"));\n var degrees = inputDegrees.value;\n if (!degrees) {\n return null;\n }\n\n degrees = degrees.replace(\",\", \".\");\n if (!MathUtils.isInteger(degrees)) {\n return null;\n }\n\n var result = MathUtils.toInteger(degrees);\n if (result < Number(inputDegrees.dataset.min) || result > Number(inputDegrees.dataset.max)) {\n return null;\n }\n\n var direction = document.getElementById(this._addUID(\"GPmousePosition\" + coordType + \"Direction\")).value;\n\n var inputMinutes = document.getElementById(this._addUID(\"GPmousePosition\" + coordType + \"Minutes\"));\n var minutes = inputMinutes.value;\n if (minutes) {\n minutes = minutes.replace(\",\", \".\");\n if (MathUtils.isInteger(minutes)) {\n var mins = MathUtils.toInteger(minutes);\n if (mins >= Number(inputMinutes.dataset.min) && mins <= Number(inputMinutes.dataset.max)) {\n result += (mins / 60);\n }\n }\n }\n\n var inputSeconds = document.getElementById(this._addUID(\"GPmousePosition\" + coordType + \"Seconds\"));\n var seconds = inputSeconds.value;\n if (seconds) {\n seconds = seconds.replace(\",\", \".\");\n var secs = MathUtils.toFloat(seconds);\n if (secs && secs >= Number(inputSeconds.dataset.min) && secs <= Number(inputSeconds.dataset.max)) {\n result += (secs / 3600);\n }\n }\n\n if (direction === \"O\" || direction === \"S\") {\n result = -result;\n }\n\n return result;\n }\n\n /**\n * locate DMS coordinates on map\n *\n * @private\n */\n locateDMSCoordinates () {\n var lonlat = [\n this.getCoordinate(\"Lon\"),\n this.getCoordinate(\"Lat\")\n ];\n\n if (lonlat[0] === null || lonlat[1] === null) {\n return;\n }\n\n var oSrs = this._currentProjectionSystems.crs;\n if (!oSrs) {\n logger.log(\"ERROR : system crs not found\");\n return;\n }\n\n var view = this.getMap().getView();\n\n var coordinate = olTransformProj(lonlat, oSrs, view.getProjection());\n view.setCenter(coordinate);\n\n if (this._markerOverlay && !this._hideMarker) {\n this._markerOverlay.setPosition(coordinate);\n }\n }\n\n /**\n * locate coordinates on map (not DMS)\n *\n * @private\n */\n locateCoordinates () {\n var lon = document.getElementById(this._addUID(\"GPmousePositionLon\")).value;\n\n lon = lon.replace(\",\", \".\");\n lon = MathUtils.toFloat(lon);\n if (lon === null) {\n return;\n }\n\n var lat = document.getElementById(this._addUID(\"GPmousePositionLat\")).value;\n lat = lat.replace(\",\", \".\");\n lat = MathUtils.toFloat(lat);\n if (lat === null) {\n return;\n }\n\n var oSrs = this._currentProjectionSystems.crs;\n if (!oSrs) {\n logger.log(\"ERROR : system crs not found\");\n return;\n }\n\n var xy;\n if (this._currentProjectionSystems.type === \"Geographical\") {\n xy = [this.convert(lon), this.convert(lat)];\n } else {\n xy = [this.convert(lat), this.convert(lon)];\n }\n var xyWGS84 = olTransformProj(xy, this._currentProjectionSystems.crs, \"EPSG:4326\");\n\n var geoBBox = this._currentProjectionSystems.geoBBox;\n if (geoBBox) { // check if coordinates are in the extent\n var extent = [geoBBox.left, geoBBox.bottom, geoBBox.right, geoBBox.top];\n if (xyWGS84[0] < extent[0] || xyWGS84[0] > extent[2]) {\n return;\n }\n if (xyWGS84[1] < extent[1] || xyWGS84[1] > extent[3]) {\n return;\n }\n }\n\n var view = this.getMap().getView();\n\n var coordinate = olTransformProj(xy, oSrs, view.getProjection());\n view.setCenter(coordinate);\n\n if (this._markerOverlay && !this._hideMarker) {\n this._markerOverlay.setPosition(coordinate);\n }\n }\n\n /**\n * locate coordinates on map\n *\n * @private\n */\n onMousePositionEditModeLocateClick () {\n if (!this.options.editCoordinates) {\n return;\n }\n if (!this.editing) {\n this.onMousePositionEditModeClick(true);\n return;\n }\n\n if (this._currentProjectionUnits === \"DMS\") {\n this.locateDMSCoordinates();\n } else {\n this.locateCoordinates();\n }\n\n // fonction\n var mapCenterFunction = this.options.mapCenterCallback;\n\n // execution...\n if (typeof mapCenterFunction === \"function\") {\n var view = this.getMap().getView();\n var center = view.getCenter();\n mapCenterFunction.call(this, center);\n }\n }\n\n /**\n * this method is called by event 'change' on 'GPmousePositionProjectionSystem'\n * tag select (cf. this._createMousePositionSettingsElement),\n * and selects the system projection.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onMousePositionProjectionSystemChange (e) {\n var idx = e.target.selectedIndex; // index\n var value = e.target.options[idx].value; // crs\n\n this._setCurrentSystem(value);\n }\n\n /**\n * this method selects the current system projection.\n *\n * @param {String} systemCode - inner code (rank in array _projectionSystems)\n * @private\n */\n _setCurrentSystem (systemCode) {\n // si on change de type de systeme, on doit aussi changer le type d'unités !\n var type = null;\n for (var i = 0; i < this._projectionSystems.length; ++i) {\n if (this._projectionSystems[i].code === Number(systemCode)) {\n type = this._projectionSystems[i].type;\n break;\n }\n }\n\n if (!type) {\n logger.log(\"system not found in projection systems container\");\n return;\n }\n\n // on enregistre le systeme courant\n this._currentProjectionSystems = this._projectionSystems[Number(systemCode)];\n\n if (type !== this._currentProjectionType) {\n this._setTypeUnitsPanel(type);\n }\n\n // on simule un deplacement en mode tactile pour mettre à jour les\n // resultats\n if (!this._isDesktop) {\n this.onMapMove();\n }\n }\n\n /**\n * this method is called by event 'mouseover' on 'GPmousePositionProjectionSystem'\n * tag select (cf. this._createMousePositionSettingsElement),\n * and selects the system projection.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onMousePositionProjectionSystemMouseOver (e) {\n logger.trace(e);\n\n // map infos\n var map = this.getMap();\n if (!map || !map.getView()) {\n return;\n }\n var view = map.getView();\n var crs = view.getProjection();\n var mapExtent = view.calculateExtent(map.getSize());\n\n // get extent in WGS84 coordinates\n mapExtent = olTransformExtentProj(mapExtent, crs, \"EPSG:4326\");\n\n /* clear select */\n var systemList = document.getElementById(this._addUID(\"GPmousePositionProjectionSystem\"));\n systemList.innerHTML = \"\";\n\n // add systems whose extent intersects the map extent\n for (var j = 0; j < this._projectionSystems.length; j++) {\n var proj = this._projectionSystems[j];\n var option = null;\n\n if (proj.geoBBox) {\n /* bboxes intersection test */\n if (mapExtent[0] > proj.geoBBox.right ||\n mapExtent[1] > proj.geoBBox.top ||\n mapExtent[2] < proj.geoBBox.left ||\n mapExtent[3] < proj.geoBBox.bottom\n ) {\n if (proj === this._currentProjectionSystems) {\n option = document.createElement(\"option\");\n option.value = proj.code;\n option.text = proj.label || j;\n option.setAttribute(\"selected\", \"selected\");\n option.setAttribute(\"disabled\", \"disabled\");\n\n systemList.appendChild(option);\n }\n continue; // do not intersect\n }\n }\n\n var optionElement = document.createElement(\"option\");\n optionElement.value = proj.code;\n optionElement.text = proj.label || j;\n\n if (proj === this._currentProjectionSystems) {\n optionElement.setAttribute(\"selected\", \"selected\");\n }\n systemList.appendChild(optionElement);\n }\n }\n\n /**\n * this method is called by event 'change' on 'GPmousePositionProjectionUnits'\n * tag select (cf. this._createMousePositionSettingsElement),\n * and selects the units projection.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onMousePositionProjectionUnitsChange (e) {\n var idx = e.target.selectedIndex;\n var value = e.target.options[idx].value;\n\n var oldProjectionUnits = this._currentProjectionUnits;\n this._currentProjectionUnits = value;\n\n // Mise a jour des elements lebels et unites\n this._resetLabelElements(this._currentProjectionType);\n this._resetUnitElements(this._currentProjectionUnits);\n\n // mise a jour des inputs pour les coordonnees\n if (oldProjectionUnits === \"DMS\" || this._currentProjectionUnits === \"DMS\") {\n this._resetCoordinateElements(this.options.editCoordinates, this._currentProjectionType, this._currentProjectionUnits);\n this._setEditMode(this.editing);\n }\n\n // on simule un deplacement en mode tactile pour mettre à jour les\n // resultats\n if (!this._isDesktop) {\n this.onMapMove();\n }\n }\n\n /**\n *\n * @param {Number} value - value to convert (km to meters, radians, grades to decimal degrees)\n * @returns {undefined}\n * @private\n */\n convert (value) {\n var result;\n if (this._currentProjectionUnits === \"M\" || this._currentProjectionUnits === \"DEC\") {\n result = value;\n } else if (this._currentProjectionUnits === \"KM\") {\n result = value * 1000;\n } else if (this._currentProjectionUnits === \"RAD\") {\n var rd = (180 / Math.PI).toFixed(20);\n result = (value * rd).toFixed(20);\n } else if (this._currentProjectionUnits === \"GON\") {\n var d = (9 / 10).toFixed(20);\n result = (value * d).toFixed(20);\n }\n\n return result;\n }\n\n /**\n * @param {String} coordType - \"Lon\" or \"Lat\"\n * @param {String} value - input value\n *\n * @returns {Boolean} value is within extent\n *\n * @private\n */\n validateExtentCoordinate (coordType, value) {\n if ([\"Lon\", \"Lat\"].indexOf(coordType) === -1) {\n return false;\n }\n\n var coord = value.replace(\",\", \".\");\n coord = MathUtils.toFloat(coord);\n if (coord === null) {\n return false;\n }\n\n // convert depending on _currentProjectionUnits\n coord = this.convert(coord);\n\n var geoBBox = this._currentProjectionSystems.geoBBox;\n if (geoBBox === undefined) {\n return true;\n }\n\n // convert to current projection system\n var extent = [geoBBox.left, geoBBox.bottom, geoBBox.right, geoBBox.top];\n extent = olTransformExtentProj(extent, \"EPSG:4326\", this._currentProjectionSystems.crs);\n\n // checking if value is in the right interval\n if (coordType === \"Lat\" && (coord < extent[0] || coord > extent[2])) {\n return false;\n }\n if (coordType === \"Lon\" && (coord < extent[1] || coord > extent[3])) {\n return false;\n }\n\n return true;\n }\n\n};\n\n// on récupère les méthodes de la classe commune MousePosition\nObject.assign(MousePosition.prototype, MousePositionDOM);\nObject.assign(MousePosition.prototype, Widget);\n\nexport default MousePosition;\n\n// Expose MousePosition as ol.control.MousePosition (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.GeoportalMousePosition = MousePosition;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.Collection;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.geom;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.events.condition;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.sphere;","var MarkersOther = {\n /**\n * portail icons used by drawing control with a good ratio !\n *\n * @example\n * image size : [32, 41]\n * scale : 32 / Math.min(size[0], size[1]) = 1\n */\n drawing_portail : [\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAClFBMVEUAAAD//////////////////////////////////////////////////////////fv/+fL//////////////////////////////////////////////////////////////////////////////////////v7//////fr/////+vL//////////////////Pj//////////////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7/////////////9+v/9ej/9+z/7tT/3q3/y3//v2D/uU//+O7/5L3/xW//piH/mQH/mAD//v7/79f/yXj/oxr/lwD/mQD//fv/58T/tkr/mQL//v3/58P/sTz/79b/tUf/x3X/mQP/5Lv/oRX/ng3/s0H/w2n/u1b/4rf/8Nr/9eb/7tX/pBv/x3P/8d7/3av/79j///7/zH//mgX/2qP//vz/9+3/wGH/qyz/6Mb/vFj/sj//7NH/wGL/rTP/6sr/+fH/yXf/oBP/37H/2aH/6sz/nw//oBT/0pD/+vT/9OX/uE7/pB3/y33/7ND//Pj/26b/mwj/nAn/sT7/w2r/zYL/8+P/ulT/mwb/5Lz/qCj/+/b/1JT/nQz/nQ3/9uj/w2j/mAH/9un/6sv/skH/lwH/3Kf/pB7/pR7/3Kj/nAj/y37/+/f/8t//mQT/rDD/rDH/1JX/7tb/4LT/pR//z4j/z4n/vFn/7dP/4rn//fq31ydlAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKnVAysoAAAMmSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oBAMCvLzcnOSJcTFGGHyklJFxSWlZYWF5WBQWFhWWlJcJCUJUcEoLSNbUVlVDZWFqqmuqqyQlZEGqZCTV6iprStDkQeqKKurrVGQlwMawMWTXN+ALg9S0VCfzMPFyCAorpjW2ASzvQwIYOymxjRFcUEGLqWa5pZCqONa27Ky2lqhji1saa5R4mJQVklpL4M6rKOzq7u7q7MD6uCy9hQVZQZVtZ5eML+woK+/KBkIivr7CiAivT1qqgzqGhPA3MKy7ImTksFg0sRssEMKCyZoqDNoak2GKJ8ydVoyFEybOgUiNllLk0F7+gwwp2zmrGQ4mDUT7KzCGdO1GZJTZkMUzJmLUDB3DkTB7JRkBp3p8yAK5i9AKFgwH6Jg3nQdBt2FiyD2LV5SBJMvWrIYIrZooS6Dnv5SCKesPQ2mIK0dEpyFS/X1GAwMly2H8FasXAWRX7VyBURk+TJDAwYj49VroAG3dt16oC1F69ethQbtmtXGRgwmphs2boKq2Lxl67ZtW7dshspv2rjB1ITBzFxn+44yeGTu3AmPzrId23XMzRg4LSwrdu2GJQdQkoQxd++qsLTgZGC0MrLes3cfZoLZv3ePtZEVMM0x2tjqHDh4CD3JHdp62M7eBpxqOR0cnY4cPYaaaI8dPeLk7MAJSfZyLq4Vx08UIqkoLDx5qsLNRQ6WMQTdPfasO42sYPOZsx6eiKzF6eXtc27HebiKwvM7zvl4e3EiZU5fv+TcC4icdTFX1M8XNXv7yyZfaoEpaLmULBuAIs/AEGivsrAd4ozCze0LVYICUeUZGIND+C63gTJQYVNbMV9oMJoBQBVh4clXroKC+uqV5PAIDHmgCsnIimv7Cgv3Xa+IlMQiDwzyqOiUG1Om3EiJjrLBpgDojBi7mxcu3LSLCcYqD1QRGzft1q1pcbE45IExH59w+3ZCvBUuBUBnJCYlJaI6AABB269xUXFElwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDM6MjIrMDA6MDB1WI3HAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACplBMVEUAAAD//////////////////////////////////////////////////////////fz/9/P//////////////////////////////////////////////////////////////////////////////////////v7//////Pr/////////////////////+/n//////////////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7/////////////8+3/8er/9O7/5dj/zrX/s4z/oHH/lmL/9fD/2MT/qX7/ejj/Zxz/Zhn/Zhr//v7/59z/rof/djL/ZBf/Zxv//fz/3Mr/k13/aBz/ZRn//f3/i1D/5tr/kVr/ZRj/rIP//v3/1sL/cy3/byf/jVX/pnn/aB3/mmf/077/6d7/8On/5tn/dzT/q4H/6+H/zbP/lmH/s43/ah//yK3/9O//oXL/gUP/3cz/m2n/jVT/5Nb/onP/hkn/4ND/9vL/rob/cSv/0Ln/x6r/Zxr/Yxb/pXn/8+7/4NH/cCj/ciz/vZz/+PX/7+f/lWH/eDT/sov/49X/+/n/ya//ayH/bCP/jFL/pnr/tJD/7ub/mWb/ZBb/aiD/18P/fj3/+vf/vp//bSX/bib/v5//pXj/8uv/yrD/eDX/eTb/y7H/bCL/soz/7OL/18T/g0b/hEb/v6D/cy7/wKH/9vP/5tv/jlX/59v/0rz/ejf/uJX/nGr/aR//nGv/g0X/1cD//PvyoJNrAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAA0JJREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/oBAICvLzcnOykyTExRhh8pJSRcUlpWWFheVgUFhYVlpSXCQlCVHBKC0jW1FZVV1TjgRqqqsqK2RlpEEq5OQVaivrygrLUUBhWV1lrYK8HNAALp6k+oZGNHmgisaG+iQeLkYGQXHF1KZ8mO2NZWUwtYX5TamK4oIMXErNLa0FEKGatvbMzPa2GoiSgtaWZiUuBmWV5I5GiHxnV3dPb29Pd1cnREVjR7KKMoOqWl9/IcTICROLkoCgaOIEiJWF/X1qqgzqGpPA3MKyycVgeaCK4slgTxXmT9JQZ9AUmAJRPnVaRRIUVEybChGbIqDJoDV9BpjTOHNWEhzMmgl2VuGM6VoMScmzwQrK5sxFKJg7pwysYHZyEoP29HkQE+YvQChYMB9iwrzp2gw6CxeBFRQsXlIEky9ashgcMoWLFuow6OotBXOWLV+xEqZg5Yrly8CalurpMugbrFoNMWLN2nUQ+XVr10AMWL3KQJ/B0Gj9BkhINm7ctBkkv3nTRqjAhvVGhgzGJlu2boMG7fYdO3ft2rljOzTot23dYmLMYGqmvXvPXmgE7i3bt69sLzQ69+7ZrW1mysBpblGx/0AjLLGBAITdeGB/hYU5JwOjpaHVwUOHMRPMkaMHrQwtgWmO0dpGO+VYAXqSK+g4bmtnDU61nPYOjgvaURNdYWP7Kkcne05Ispdzdqk4cbIGSUVhzanTFa7OcrCMIejmfnDTmQKEgoIzZw+6eyCyFqenl/e5PeVwIwrL95zz9vLkRMqcPr5J5y/AHFpYcPG8qK8Pavb2k026dBkaGo2XryTJ+qPIMzAE2KlcXbEN7IyCbR1XVQIDUOUZGIOC+a61VwMtKay+foMvJAjNAKCK0LCkm7dAIX3rZlJYOIY8UIVkRMXtI4WFR25XREhikQcGeWRU8p27d+8lR0VaY1MAdEa0bdr9+2m20UFY5YEqYmJrHzyojY3BIQ+M+bj4hw/j4yxxKQA6IyExMQHVAQBpWLIaKI0lIgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDQ6MDYrMDA6MDAh7rXQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACbVBMVEUAAAD/////////////////////////////////////////////////////////+/v/8vL//////////////////////////////////////////////////////////////////////////////////////v7/////+vr/////////////////////+Pj//////////////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7/////////////6+v/6Oj/7Oz/1NT/ra3/f3//YGD/T0//7u7/vb3/b2//ISH/AQH/AAD//v7/19f/eHj/Ghr/+/v/xMT/Skr/AgL//f3/w8P/PDz/1tb/R0f/dXX/AwP/u7v/FRX/DQ3/QUH/aWn/Vlb/t7f/2tr/5ub/1dX/Gxv/c3P/3t7/q6v/2Nj/BQX/o6P//Pz/7e3/YWH/LCz/xsb/WFj/Pz//0dH/YmL/MzP/ysr/8fH/d3f/ExP/sbH/oaH/zMz/Dw//FBT/kJD/9PT/5eX/Tk7/HR3/fX3/0ND/+Pj/pqb/CAj/CQn/Pj7/amr/goL/4+P/VFT/Bgb/vLz/KCj/9vb/lJT/DAz/aGj/6en/y8v/p6f/Hh7/qKj/fn7/9/f/39//BAT/MDD/MTH/lZX/tLT/Hx//iIj/iYn/WVn/09P/ubn/+vpgzcAPAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAu1JREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSUFSKCkuKhQShKiglFaRra0rLyiAAVUlJeVyspIg1TIyStUVlUXYIDqqkoFeTmgAVw8STW1BVhAbU0SDxcjg6C4YmpdPTYF9XWpiuKCDFxKlQ2NMLGm5szM5iYYr7GhUomLQVkluQXmsNa29o6O9rZWmINbklWUGVTVOrug3u/uKUwCgsKebmiAdHWqqTKoa/RCuVl9YHmgir4sqJZeDXUGTYEMCK9/wsQkKJg4oR8iliGgyaA1aTKEM2VqEhxMnQIRmzxJiyEpeRqEM30GQsGM6RCxaclJDNqTZkI4s2YjFMyeBRGbOUmbQWfOXAhn3vxCmHzh/HkQsblzdBh09RbAfJ0KU5AKC5kFeroM+gYLF0F4i5cshcgvXbIYIrJooYE+g6HRsuVQ9StWrgLaUrhq5QqowPJlRoYMxiar16yFCqxbv2Hjxg3r10G5a9esNjFmMDXT3rQZEYVbtiDYmzdpm5kycJpblG7dhi26t20ttTDnZGC0NLTavmMnpnzTju1WhpbANMdobaOdsisfXT5/w25bO2twquW0d3Dc04ymIr95j6OTPSck2cs5u5Tu3YeqYN/+UldnOVjGEHRz375yLbL8ugMH3T0QWYvT08v70ObDCPnDmw95e3lyImVOH9+knCMIBUdzRH19ULO3n2zSMXjibjyWJOuPIs/AEGCnMqcF6ox1LXNUAgNQ5RkYg4L5aprBGai+uYgvJAjNAKCK0LCk4ydACk4cTwoLx5AHqpCMKD0JDPKdp0ojJLHIA4M8Mir5dH//6eSoSGtsCoDOiLY9c+TIGdvoIKzyQBUxsRPPnp0YG4NDHhjzcfHnzsXHWeJSAHRGQmJiAqoDAOgCnVLAYqeOAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo0NDoxOSswMDowMBsMxacAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACf1BMVEUAAAD//////////////////////////////////////////////////////////P3/9Pn//////////////////////////////////////////////////////////////////////////////////////v7/////+/3/////9fr/////////////////+vz//////////////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7/////////////7/f/7PX/8Pf/3O7/vd7/mcv/gL//c7n/8fj/yuT/jMX/Tab/NJn/MZj/Mpj//v7/3+//k8n/R6P/L5f/M5n//P3/0Of/brb//f7/z+f/Y7H/MJf/bLX/kcf/yeT/Q6H/PZ7/ZrP/h8P/d7v/xeL/4fD/6/X/3e7/SaT/j8f/5PH/u93/crn//v//mMz/N5r/tdr/gcD/Vqv/0ej/ebz/ZrL/2uz/gsD/XK3/1er/8/n/ksn/QaD/wN//tNn/1ur/P5//QqD/ptL/9vr/6vT/cbj/l8v/+vz/t9v/OJv/Opz/ZLH/iMP/m83/6fP/d7r/N5v/Uqj/Mpn/+Pv/qdT/PJ3/7fb/Z7L/uNz/SqT/S6X/udz/OZz/mMv/5fL/drr/Waz/Wqz/qtT/RKH/q9T/9Pn/3u7/Z7P/w+D/TKX/oM//PZ3/erz/Npr/3O3/x+L/+/0F2pMDAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAM4SURBVDjLdZNnWxNBFIVnEZGEGpBeROkSuoIUwS4KFkTFQp+wFEWzk+AmEFhEDBZQlA5ioxcRsCDYELADSvlBbnY2kACeTztz3r1znztnAOBEEAYbDDcabTKG0HiT0UbDDQYEAXRECIQmpmbmFpaS7GyJpYW5mamJUKBDECIr6802ZE5uXv6lS/l5uTmkzWZrK9EyQdja2cPLBVeuSinEipJevVJwGdrb2RJa38FRJi+8RiOk4IQQfa1QLnN0wATh5OyiLCqWUgodUdLiIqWLs5OGcN3ipiopZZBCT4gpLVG5bXFlCwhNobxsta8hyuTQVEgAkd1W8rpUezrDSvstvU5utRMB4TZV+Q18PqIqbubn36ygMELdKFdtEwJ3D4ma4X+pvHX7zp3btyr5goxa4uEOPL3uViHsV9+TQVaye9WYQFV3vTyBt899bomYGvkDyOmBvIZrBEnv+3gD3+0PMV5bp4K8VHW1eO/hdl/gR9ZzC6ahES6rsYFrC9WTfgBKmjiAbm5ZAVqaaQ5okkAgJltxhUdtK0DbI1yhlRQD/8dPOIB6+kym9WXPnnKTQU8e+4OAwOe4IVpNagFSTeO954EBICi4vQOvOru6sd/d1Yl3OtqDg0BIaE8vnjRT1dfCniJr6avCo6V6e0JDwI6d/QMv+NEOvhwaHh56OciP/sVA/84dICxcPPKK5i+Qpl+/pmn+OulXI+LwMCDYFaEsf8PH6a0mk2/5UL0pV0bsEgAiMiRq9N3Y2sCMvRuNColkM0dE7xaPq6nVkaPU4zGx0VxqBXv27mtr1g8dYt637du/R4Bj73rgoPLDR90aiPr0WXnogKv2YYgOx432Tejknhr8Mhp3ZOVpCY7GJ0xOKZZLIMXUZEL8UYHO4zx2HBZMaw9B1NcCm+PH9J/3CRf47Tt/CPX9B3Q5qecDkBjr8VON26Amhn56nErU9wGRdNr8129NfJH0t9z8TNKqAixxNhnOzGpGPTsDk8+t8VnC4bxybgyhP3PK8w7r+OzIL1yU/J2f/yu5eCF6PYBtIyVmYXp6ISYlaV2fJVLTVIuLqrTU//jszadnLC1lpEf+D2DbyMzKytRv4B+n7ayGbXJj1gAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDQ6MjkrMDA6MDCVg8JEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACslBMVEUAAAD////////////////////////////////////////////////////////+/fz79/T////////////////////////////////////////////////////////////////////////////////////+/v7////9/Pv////79/X////////////////9+/r////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////58+/48ez69PDz5dzpzr3cspnUoIDQlXP69PHt18rYqIzDeU27ZjS6ZTG6ZTL+/v7059/brpPCdUe6Yy+7ZjP+/fzv29DOkm67ZzS6ZDH+/f3v28/LiWO6YzD05t/OkGy6ZDDarJH+/v3t1snAckO+bj3MjWbUn4DXpYfRmXfr08X16eH48Ovz5t3CdknZqo/26+TozLvQlXL//v7dspi8aTfmyLXUoIHGgFbv3NHSm3m5Yy/LjGby49rVoYLIhVzx39X79vPbrZK/cEHq0MDmxrS6ZjK5Yi/58/Dx4Na+bz/AcULhvab8+Pb47+rPlHHCd0ncsZf9+/rnybe9aji9azrLi2TXpojdtJv37unt18nFfVK7ZTL8+vjivqm+bTziv6n58e3WpIfWpYfx4NXMjWfnyrjCd0rDeEvoyrm9azncsZj27OXRmHbHg1nIg1rt2Mriv6rAckTjwKv79vS8ajm9ajnXpYj05t7r0sPDeUzfuKC+bT3Sm3q8aTbIglns1cf9/Pua7OXrAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAANISURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oLAICAoL8vNyc5IlxMUYYfKSUsUlpWXlRUUVYFBUVF5WWlIsJQlRwSgtI1tZVV1TW4EEamuqqyplZaRBKuTkFerqGxqLKlBAUWNDfZ2CvBzQAC6e5KbmFjR5oIqW5qZkHi5GBkFxxbTWApjtLY2NMLVFBa1piuKCDFxKbe0dhRCh2s6u7u6uzlqIksKO9jYlLgZllZSeFoh8TW9f/4QJ/X29NRAVLT0pKsoMqmoTJxVBjJw8pTgZCIqnTIZYWTRpopoqg7rGVDC3qHFayfRkMJheMg3sqaKCqRrqDJpaMyDKZ86qS4aCulkzIWIztDQZtNNmgzktc+Ymw8HcOWBnFc1O02ZITpkHVjB/wUKEgoUL5oMVzEtJZtBJWwQxYfEShIIliyEmLErTYdBdugysoHD5imKYfPGK5eCQKVq2VJdBT38lWMGq1T1rYArW9KxeBVawUl+PwcBw7TqIk9dv2AiR37hhPURk3VpDAwYj402bITHdsmXrQqAtxQu3boEEbe3mTcZGDCam27bvgAbtzl279+zZvWsnNOh3bN9masJgZq6zt3c+NALnz585c/58aHTO792rY27GwGlhWblvPzQ5HQClyQPQRLV/X6WlBScDo5WR9cFDhzETzOEjB62NrIBpjtHGVufosUL0JFd4/KidvQ041XI6ODqd6EJNdEUtJ084OTtwQpK9nItr5anTtUgqimrPnK10c5GDZQxBd4+DW88VIhQU7jx/0MMTkbU4vbx9LlysgBtRVHHxgo+3FydS5vT1S869BHNoUeHlK6J+vqjZ2182+eo1aGjUXrueLBuAIs/AEGivcqPnJtgZhbdu31AJCkSVZ2AMDuG7cxKU3otqTpbwhQajGQBUERaefPceKKjv3U0Oj8CQB6qQjKy8f7io6MH9ykhJLPLAII+KTnn46NHDlOgoG2wKgM6IsUt//DjdLiYYqzxQRWxc3ZMndXGxOOSBMR+f8PRpQrwVLgVAZyQmJSWiOgAArqa4BP2YBKMAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjQ0OjQ2KzAwOjAwpaS7KgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAChVBMVEUAAAD//////////////////////////////////////////////////////////vv//fL//////////////////////////////////////////////////////////////////////////////////////v7//////vr//////////////////////vj//////v///////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7//////////////Ov/++j//Oz/+dT/863/7X//6mD/50///O7/9r3/62//4SH/3QH/3AD//v7/+df/7Xj/4Br/3QD//vv/98T/5kr/3QL//v3/98P/5Tz/+db/5kf/7HX/3QP/9rv/4BX/3g3/5UH/6WD/62n/6Fb/9bf/+tr/++b/+dX/4Bv/7HP/+t7///7/86v/+dj/3QX/8qP//vz//O3/6mH/4iz/98b/6Fj/5T//+dH/6mL/4zP/+Mr//fH/7Hf/3xP/9LH/8qH/6mn/+Mz/3g//3xT/8JD//fT/++X/507/4B3/7X3/+ND//vj/86b/3Qj/3gn/5T7/62r/7oL/++P/6FT/3Qb/9rz/4ij//fb/8ZT/3gz//Oj/62j/3AH//On/+Mv/86f/4R7/86j/7n7//vf/+t//3QT/4zD/4zH/8JX/3xX/3gj/9bT/4R//74j/74n/6Fn/+dP/9bn//vrsMn7uAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAxZJREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSVAqVIwADJKiosKpSQhKhilZWTLyisqobJQNZUV5WWyMtIgFXLyClXVNQUo8iBTaqqrFOTlgAZw8STV1qHLg1TU1SbxcDEyCIorptY3IGxHuKShPlVRXJCBS6mqsakAKt3c0tra0gxVUtDUWKXExaCsktwGFahs7+js6ursaIc6uKAtWUWZQVWtuwfML8jv7etPAoL+vt58iEhPt5oqg7rGBDC3oCBrYmESGBROzALbUpA/QUOdQVMgA6J80uQpSVAwZfIkiFiGgCaD1tRpEM70GUlwMGM6RGzaVC2GpOSZEM6s2QgFs2dBxGYmJzFoT50D4cydh1Awby5EbM5UbQad+QsgnIWLCmHyhYsWQsQWzNdh0NVbDPX1klSYgtQlUKHFeroM+gZLl0GUL1+xEiK/csVyiMiypQb6DIZGq1ZD1a9Zuw5oS+G6tWugAqtXGRkyGJus37ARKrBp85atW7ds3gTlbtyw3sSYwdRMe9t2RGTu2IGIzu3btM1MGTjNLcp27oIlB0Rslxbs2llmYc7JwGhpaLV7z17MBNO8Z7eVoSUwzTFa22jv238APckd2HLQ1s4anGo57R0cD7Wgqig40HLI0cmeE5Ls5Zxdyg4fQVZQUHDkaJmrsxwsYwi6ue9euxFJRcGmY8fdPRBZi9PTy/vE9pNwFQUnt5/w9vLkRMqcPr5JOacQOet0jqivD2r29pNNOnMWpuDsmSRZfxR5BoYAO5X5becgcbSpbb5KYACqPANjUDBfbQsoAxU0tBTxhQShGQBUERqWdP4CKKgvnE8KC8eQB6qQjCi7uLegYO+lsghJLPLAII+MSr48adLl5KhIa2wKgM6Itr1y6tQV2+ggrPJAFTGxU65enRIbg0MeGPNx8deuxcdZ4lIAdEZCYmICqgMA6f6os3UKuXAAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjQ0OjU4KzAwOjAwOTHA6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACr1BMVEUAAAD////////////////////////////////////////////////////////7/v3y+/n////////////////////////////////////////////////////////////////////////////////////+/v7////6/f3////y+/r////////////////4/fz//////v/////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////r+ffo+PXs+ffU8+2t591/28tg0r5Pzbju+vi97ORv1sQhwKUBt5gAtpf+/v7X9O942ckavqIAtZYAt5j7/v3E7udKy7UCt5j9/v7D7uY8x7DW8+5Hy7QAtpZ118cDt5i77OQVvKANup1BybJg0b5p1cJWz7q36uLa9PDm9/XV8u4bvqNz18be9fGr59zY8+9/2ssFuJmj5dr8/v7t+fdh0r8sw6rG7+hYz7s/ybHR8uxi0r8zxazK8Onx+/l32MgTvJ+x6N+h5Nlp1MLM8OoPu54UvJ+Q39L0/Prl9/ROzbcdv6N92srQ8ez4/fym5tsIuJoJuZs+yLBq1cOC28zj9/NUz7oGuJq87OMowaf2/PuU4NQMupwNupyU4dTo+PZo1MIBtpdq1cLp+fbL8OoBtpan5tsev6Mev6So5twIuZt+2sv3/Pvf9fJUzroEt5gwxKsxxKuV4NQVvaCV4dTW8+/X8++06eEfv6T7/f2I3c6J3c9Zz7wFuJrT8u256+L6/f3ow7cxAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAMvSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oBAMCvLzcnOSJcTFGGHyklJFxSWlZYWF5WBQWFhWWlJcJCUJUcEoLSNbUVlVDZWFqqmuqqyQlZEGqZCTV6iprStDkQeqKKurrVGQlwMawMWTXN/QiCYPVNHYUJ/Mw8XIICiumNbUDLO9sawMprawuSlNUVyQgUuppqW1EOq4tvaOjvY2qGMLW1tqlLgYlFVSOhuhDuvq7unt7enugjq4sTNFRZlBVa2vH8wvLJgwsSgZCIomTiiAiPT3qakyqGtMAnMLG7Mng+WBKiZngx1SWDBJQ51BU2sKRPnUadOToWD6tKkQsSlamgzaM2aCOY2zZifDwexZYGcVzpyhzZCcMgesoGzuPISCeXPLwArmpCQz6MyYDzFhwUKEgoULICbMn6HDoLtoMcS+JUuLYPJFS5dAxBYv0mXQ018G4ZQtT4MpSFsOiZrCZfp6DAaGK1ZCeKtWr4HIr1m9CiKycoWhAYOR8dp10IBbv2Ej0JaijRvWQ4N23VpjIwYT002bt0BVbN22fceO7du2QuW3bN5kasJgZq6zc1cZLBGU7d5dBksaZbt26pibMXBaWFbs2QtLDqAkCWPu3VNhacHJwGhlZL1v/wHMBHPw0D5rIytgmmO0sdU5fOQoepI7euy4nb0NONVyOjg6nWg/iZpoT7afcHJ24IQkezkX14pTpwuRVBQWnjlb4eYiB8sYgu4e+zacQ1aw9fwFD09E1uL08va5eOkyXEXh5UsXfby9OJEyp69fcu4VRM66mivq54uavf1lk6+1whRcv5EsG4Aiz8AQaK+yaDnEGYVbly9SCQpElWdgDA7hu9kOykCFze23+EKD0QwAqggLT759BxTUd24nh0dgyANVSEbevXegsPDA/buRkljkgUEeFZ3y4OHDBynRUTbYFACdEWP36MqVR3YxwVjlgSpi46Y/fjw9LhaHPDDm4xOePEmIt8KlAOiMxKSkRFQHAAAsgrQ2sknLAAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDU6MTIrMDA6MDD2yfpjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACfFBMVEUAAAD////////////////////////////////////////////////////////8/vz0/fT////////////////////////////////////////////////////////////////////////////////////+/v7////7/vv////1/fX////////////////6/vr//////v/////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////v/O/s++zw/PDc+dy9872Z7ZmA6oBz53Px/PHK9sqM64xN4U003TQx3DEy3DL+/v7f+d+T7ZNH4Ecv3C8z3TP8/vzQ99Bu5m79/v3P989j5WMw3DBs5myR7JHJ9slD4EM93j1m5WaA6YCH64d36HfF9cXh+uHr++vd+d1J4EmP7I/k+uT+//6787ty53KY7Zg33Te18rWB6oFW4lbR99F56Hna+dqC6oJc41zV+NXz/fOS7JJB30HA9MC08rQy3TKH6ofW+NY/3j9C30Km8Kb2/fbq++px53GX7Zfa+Nr6/vq387c43Tg63jpk5WSI64ib7pvp++lS4lL4/fip8ak83jzt/O1n5We487hK4UpL4Uu587k53TmY7pj4/vjl+uV26HZZ41la41qq8KpE30Sr8Kv0/fQ53jne+d7D9cNM4Uyg76B66Ho23TbH9cf7/vts+qXUAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAM8SURBVDjLdZP3X9NQFMVfFIUWLJRpVcoeYlVEQEUExIUyFFFRcfJqqiyb12paDQQKpQXZorJXARcbFRC3oohb/yHTJIUW8fyU5Hxz7/3cdx4ArDBs2XK7FSvtHSB0sF+5wm75MgwDVsIEQkenVSJnF/mlS3IXZ9EqJ0ehwIrAxK5u7h644vKVnNzcnCuXFbiHu5ureJ7APL1Ww7z8gqtKAjEilFcL8vPgai9PzOJL1qjU166TCGlYIURev6ZWrZFwBLZ2nbf2xk0lobESobx5Q+u9bq2ZkPr4UoVFNNLYCNFFhZSvj5QpIHSC6uLFvpkoVkMnIQbEXn54idLSnWZkeVaW4H5eYiD0p3SlXH9ElOnLy/VlBIcQpTrKXwgCAuUGmv/FWFF561ZlhZEvSBvkgQEgKLiqGnF+TW0dZFRXW8MRqLoqOAiEhNazr4huUKsgK5W6gR0EKetDQ8D6sNsc3niHgryoO43ct9th68EG/C77Qt9rgvNquseOhe7iGwCUN7MAqW9ZAFr0JAs0yyGQ4a1chbb2BaC9javQisvAxo5OFiC6ulUWX9XdxW4GdXZsBJs297CAiezFLQDeS5pYoGfzJhC+pa+fG/n+g4ec//DBfe5Lf9+WcBCx9dFjbtN09cAg00U1OFDNrZZ4/GhrBIiMGhoe4Vc7Ojb+5Mn42Ci/+pHhoahIEL1N9tRI8gdIko2NJMkfJ2l8KtsWDQTbd2h1z/g4mcyZNPGheqbT7tguAFhMxM6Jyal/AzM1ObEzIobJHBa7S/bcQCyOHGF4Hhcfy6ZWkLA7sV1vGzpET7cn7kkQcLGX7t2nffGSMFn//+q1dv9eqeViiA8kTQy8sco9Mfr2XdLBhaslOJSc8v6DZr4J0nx4n5J8SGB1OVPTYP6MZVBEfMz3SEu1vd6HveGnWb4JMfsZeh+x8QFIjw+cM3xhCeLL+Fzg0XRbH2AZx0Rfp83xRcppteh4xqICDHEiE377bl71928w8+Q/PkNITml/TCFU9kN7SrKEz6z8dJb8569fP+VZp2OXApgxzsQpZmYUcWcylvQZ4uw56vdv6tzZ//jMyZ+/8OfPhfMx/wOYMS5mZ1+0HeAvs9msMpv5tz0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjQ1OjQxKzAwOjAwj8HumgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACr1BMVEUAAAD////////////////////////////////////////////////////////9/vv5+/L////////////////////////////////////////////////////////////////////////////////////+/v7////9/fr////5+/P////////////////8/fn////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////3+uz1+en3+u3t9Nbd6rHK34W912i20lj4+u/j7sDD23ajxyyWvw6VvguVvgz+/v7u9drH3X+gxSWUvgmWvw39/vvm8Me00VP+/v3m8MauzkXu9Nmz0FDG3HyUvgrj7r+exCCbwhqwz0rB2XGWvw+51F7h7Lrv9dz0+Oft9NehxifF3Hrx9t/c6a+201j+//7K3oaYwBHZ56j+/vy+12moyjfn8Mn2+uy61WCwzkns89P3+u6+12qryz7p8c35+/HH3X6dwx7e67XY56aVvg2UvQjq8s6cwhuexB/R45b6/PT0+Oa20leVvgqhxijJ3oT8/fna6KqYwBOZwRavzkfB2XLL34nz+OS41F2UvQmYwBKmyDGWvwz7/PfS5JmawRebwhjT5JrB2XD1+erp8s79/vzb6ayiximixir7/PbJ3oOZwRXK3oTx9+Cpyzuqyzvj7sGexCH5+/KZwBSwz0vu9dng7LijxivO4Y6awRjO4Y+61WGXwBHt89Wpyzri7bz9/frM0I39AAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAANESURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oLAICAoL8vNyc5IlxMUYYfKSUsUlpWXlhUUVYFBUWF5WWlIsJQlRwSgtI1tZVV1QWIEECguqqyplZaRBKuTkFWpq68qLKlBAUXldbY2CvBzQAC6e5PoGdHmQiob6ZB4uRgZBccW0xgKY7U3l5U0wdkFjmqK4IAOXUk1zSyHUca1tWVltrVDHFrY01yhxMSirpLQ3QeQ7Oru6e3q6uzo7ICqa2lNUlBlU1Xr7iiBG9k8oTgaC4gn9ECuL+nrVVBnUNSaCuUXlk0omJ4PB5JJJYEcXFUzUUGfQ1JoCUT512vRkKJg+bSpEbIqWJoN22gwwp2nmrGQ4mDUT7KyiGWnaDMmz54AVlM+dh1Awb245WMGc2ckMOvMXQBQsXIRQsGghRMGC+ToMuouXgBUULl1WDJMvXrYUHDJFSxbrMujpLwdzVqxsT4MpSGtfuQKsabm+HoOB4arVECPWrF0HkV+3dg3EgNWrDA0YjIzXb9gICbhNm+cBbSmet3kTJGg3blhvbMRgYrpl6zZo0G7fsXPXrp07tkODftvWLaYmDGbmOrv3rIQmk5V79+3buxKadFbu2a1jbsbAaWFZ2bwfYknFAVCaPABhb9zfXGlpwcnAaGVkffDQYcwEc+ToQWsjK2CaY7Sx1Uk9Voie5Ap3HreztwGnWk4HR6cTbU0oKoqa2k44OTtwQpK9nIvryVOnNyKpKNp45tRJNxc5WMYQdPc4e+48UrovPH/hoIcnImtxenn7XNxTATeiqGLPRR9vL06kzOnrl5x7CZGzLl8R9fNFzd7+sslHr0JDY+PVo8myASjyDAyB9irX2q+DnVF4vf2aSlAgqjwDY3AIX30bKPkWFdy4yRcajGYAUEVYePKt26Cgvn0rOTwCQx6oQjKy8s7doqK79yojJbHIA4M8Knr2/QcP7s+OjrLBpgDojBi7h48ePbSLCcYqD1QRGzf98ePpcbE45IExH5/w5ElCvBUuBUBnJCYlJaI6AADXv7i4Kd/lawAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDk6NDUrMDA6MDBhsioHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACnVBMVEUAAAD////////////////////////////////////////////////////////7/fvy+fL////////////////////////////////////////////////////////////////////////////////////+/v7////6/Pr////////////////////4/Pj////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////r9uvo9Ojs9uzU69St2K1/w39gtWBPrU/u9+694L1vu28hlyEBiAEAhwD+/v7X7Nd4wHgalBoAhgAAiAD7/fvE48RKqkoCiAL9/v3D48M8pDzW7NZHqUd1vnUDiAO737sVkRUNjg1BpkFgtGBpuWkCiQJWsFa33bfa7drm8+bV69UblBtzvXPe796r16vY7Nj+//4FigWj1KP8/fzt9u1htWEsnCzG5Mbr9etYsVg/pT/R6dFitmIzoDPK5srx+PF3wHcTkBOx2rGh06EAhQDM58wPjg8UkRSQy5D0+vTl8uVOrE4dlR19wn3Q6dD4/Pim1aYIiwgJjAk+pD5qumqCxYLj8uNUr1QGiga837womij2+/aUzZQMjQwNjQ1ouGgBhwFquWrp9OnL5ssBhgGn1qcelR4elh6o1qj2+vZ+w373+/ff8N8EiAQwnjAxnjGVzZUVkhUJiwm03LQflh+IyIiJyIlZsVnT6tP8/vy53rn6/Pq97PRtAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAzFJREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSWlBQVlYFBQUFpSXFQoJQlRwSgtI1teUVkFlYWqqaqsKJeVkQapkJNXqK6pLUWRB6oora2pVpCXAxrAxZNUV48uD1JRX5fEw8XIICiumNrQCLO9FAhg7MaGVEVxQQYupeqm5gKo41pa29paW6COLWhuqlbiYlBWSW4vhQh0dHZ19/R0d3V2QFSUtierKDOoqvX2gfkF+f0TCpOAoHBCfz5EpK9XTZVBXWMimFtQmjVpchIYTJ6UBXZIQf5EDXUGTYEMiPIpU6clQcG0qVMgYhkCmgxa02eAOaUzZyXBwayZYGcVzJiuxZA0ew5Ewdx5CAXz5kIUzJmdxKA9fT5EwYKFCAULF0AUzJ+uzaCzaDHEviVLC2HyhUuXQMQWL9Jh0NVbBuEsb0+FKUhtXw4RW6any6BvsGIlhLdq9RqI/JrVqyAiK1cY6DMYGq1dBwnJ0vUbNgJDYvLGDeuhAuvWGhkyGJts2rwFGrRbt23fsWP7tq3QoN+yeZOJMYOpmfbOXcuhEbi8dPfu0uXQ6Fy+a6e2mSkDp7lF+Z69pbBUUABLd2Wle/eUW5hzMjBaGlrt238AM8Ec3L/PytASmOYYrW20Uw4dRk9yh48ctbWzBqdaTnsHx2Otx1ET7fHWY45O9pyQZC/n7FJ+4mQBkoqCglOny12d5WAZQ9DN/cyGLcgKtp495+6ByFqcnl7e53ddgKsouLDrvLeXJydS5vTxTcq5iMhZl3JEfX1Qs7efbNLlK9DQKL1yOUnWH0WegSHATmVRO8QZBVfbF6kEBqDKMzAGBfPVtYIyUEFjaxFfSBCaAUAVoWFJ166Dgvr6taSwcAx5oArJiPIbBwoKDtwsj5DEIg8M8sio2bemTLk1OyrSGpsCoDOibW9fvHjbNjoIqzxQRUzsnbt378TG4JAHxnxc/L178XGWuBQAnZGQmJiA6gAAFLyvxAL3bxQAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjQ5OjU2KzAwOjAwnPAwBAAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAClFBMVEUAAAD////////////////////////////////////////////////////////7//3y//n////////////////////////////////////////////////////////////////////////////////////+//7////6//3////y//r////////////////4//z////////////////////////////////////////////////////////////////////////+//7////////////////////////////////////+//7////////////////////////////////////////////////////////////////////////////+//7////////////r//fo//Xs//fU/+6t/95//8tg/79P/7nu//i9/+Rv/8Uh/6YB/5kA/5j+//7X/+94/8ka/6MA/5cA/5n7//3E/+dK/7YC/5n9//7D/+c8/7HW/+9H/7V1/8cD/5m7/+QV/6EN/55B/7Np/8NW/7u3/+La//Dm//XV/+4b/6Rz/8fe//Gr/93Y/+/+//9//8wF/5qj/9r8//7t//dh/8As/6vG/+hY/7w//7LR/+xi/8Az/63K/+rx//l3/8kT/6Cx/9+h/9nM/+oP/58U/6CQ/9L0//rl//RO/7gd/6R9/8vQ/+z4//ym/9sI/5sJ/5w+/7Fq/8OC/83j//NU/7oG/5u8/+Qo/6j2//uU/9QM/50N/53o//Zo/8MB/5jp//bL/+pB/7IB/5en/9we/6Qe/6Wo/9wI/5x+/8v3//vf//IE/5kw/6wx/6yV/9TW/+60/+Af/6WI/8+J/89Z/7zT/+25/+L6//2DMMmrAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAMmSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oBAMCvLzcnOSJcTFGGHyklJFxSWlZYWF5WBQWFhWWlJcJCUJUcEoLSNbUVlVDZWFqqmuqqyQlZEGqZCTV6iprStDkQeqKKurrVGQlwMawMWTXN+ALg9S0VCfzMPFyCAorpjW2ASzvQwIYOymxjRFcUEGLqWa5pZCqONa27Ky2lqhji1saa5R4mJQVklpL4M6rKOzq7u7q7MD6uCy9hQVZQZVtZ5eML+woK+/KBkIivr7CiAivT1qqgzqGhPA3MKy7ImTksFg0sRssEMKCyZoqDNoak2GKJ8ydVoyFEybOgUiNllLk0F7+gwwp2zmrGQ4mDUT7KzCGdO1GZJTZkMUzJmLUDB3DkTB7JRkBp3p8yAK5i9AKFgwH6Jg3nQdBt2FiyD2LV5SBJMvWrIYIrZooS6Dnv5SCKesPQ2mIK0dEpyFS/X1GAwMly2H8FasXAWRX7VyBURk+TJDAwYj49VroAG3dt16oC1F69ethQbtmtXGRgwmphs2boKq2Lxl67ZtW7dshspv2rjB1ITBzFxn+44yeGTu3AmPzrId23XMzRg4LSwrdu2GJQdQkoQxd++qsLTgZGC0MrLes3cfZoLZv3ePtZEVMM0x2tjqHDh4CD3JHdp62M7eBpxqOR0cnY4cPYaaaI8dPeLk7MAJSfZyLq4Vx08UIqkoLDx5qsLNRQ6WMQTdPfasO42sYPOZsx6eiKzF6eXtc27HebiKwvM7zvl4e3EiZU5fv+TcC4icdTFX1M8XNXv7yyZfaoEpaLmULBuAIs/AEGivsrAd4ozCze0LVYICUeUZGIND+C63gTJQYVNbMV9oMJoBQBVh4clXroKC+uqV5PAIDHmgCsnIimv7Cgv3Xa+IlMQiDwzyqOiUG1Om3EiJjrLBpgDojBi7mxcu3LSLCcYqD1QRGzft1q1pcbE45IExH59w+3ZCvBUuBUBnJCYlJaI6AABB269xUXFElwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NTA6MDYrMDA6MDDpi8pqAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACbVBMVEUAAAD////////////////////////////////////////////////////////7///y///////////////////////////////////////////////////////////////////////////////////////+///////6///////////////////////4///////////////////////////////////////////////////////////////////////////+///////////////////////////////////////+///////////////////////////////////////////////////////////////////////////////+///////////////r///o///s///U//+t//9///9g//9P///u//+9//9v//8h//8B//8A///+///X//94//8a///7///E//9K//8C///9///D//88///W//9H//91//8D//+7//8V//8N//9B//9p//9W//+3///a///m///V//8b//9z///e//+r///Y//8F//+j///8///t//9h//8s///G//9Y//8////R//9i//8z///K///x//93//8T//+x//+h///M//8P//8U//+Q///0///l//9O//8d//99///Q///4//+m//8I//8J//8+//9q//+C///j//9U//8G//+8//8o///2//+U//8M//9o///p///L//+n//8e//+o//9+///3///f//8E//8w//8x//+V//+0//8f//+I//+J//9Z///T//+5///6//8Ngdu6AAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAu1JREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSUFSKCkuKhQShKiglFaRra0rLyiAAVUlJeVyspIg1TIyStUVlUXYIDqqkoFeTmgAVw8STW1BVhAbU0SDxcjg6C4YmpdPTYF9XWpiuKCDFxKlQ2NMLGm5szM5iYYr7GhUomLQVkluQXmsNa29o6O9rZWmINbklWUGVTVOrug3u/uKUwCgsKebmiAdHWqqTKoa/RCuVl9YHmgir4sqJZeDXUGTYEMCK9/wsQkKJg4oR8iliGgyaA1aTKEM2VqEhxMnQIRmzxJiyEpeRqEM30GQsGM6RCxaclJDNqTZkI4s2YjFMyeBRGbOUmbQWfOXAhn3vxCmHzh/HkQsblzdBh09RbAfJ0KU5AKC5kFeroM+gYLF0F4i5cshcgvXbIYIrJooYE+g6HRsuVQ9StWrgLaUrhq5QqowPJlRoYMxiar16yFCqxbv2Hjxg3r10G5a9esNjFmMDXT3rQZEYVbtiDYmzdpm5kycJpblG7dhi26t20ttTDnZGC0NLTavmMnpnzTju1WhpbANMdobaOdsisfXT5/w25bO2twquW0d3Dc04ymIr95j6OTPSck2cs5u5Tu3YeqYN/+UldnOVjGEHRz375yLbL8ugMH3T0QWYvT08v70ObDCPnDmw95e3lyImVOH9+knCMIBUdzRH19ULO3n2zSMXjibjyWJOuPIs/AEGCnMqcF6ox1LXNUAgNQ5RkYg4L5aprBGai+uYgvJAjNAKCK0LCk4ydACk4cTwoLx5AHqpCMKD0JDPKdp0ojJLHIA4M8Mir5dH//6eSoSGtsCoDOiLY9c+TIGdvoIKzyQBUxsRPPnp0YG4NDHhjzcfHnzsXHWeJSAHRGQmJiAqoDAOgCnVLAYqeOAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1MDoyMSswMDowMG4J85kAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACu1BMVEUAAAD////////////////////////////////////////////////////////8/f3y9/r////////////////////////////////////////////////////////////////////////////////////+/v7////6/P3////z9/r////////////////5+/z//////v/////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////s8/jp8fft9PjW5vCwz+KEtdJno8hXmcLu9fnA2Oh1q80qfrIMa6cJaqYKaqb+/v7Z6PF+sdAkea8HaKULa6f8/f3G3epRlcAJaab9/f7G3OpEjrsHaaXY5/FOlL97rs8Iaab9/v6+2Ocfdq0Yc6tJkb1no8dvqMsIaaUNbKhdncS61ebb6fLn8PbX5vAle7B5rs7f7POuzuGFtdMPbainyt/8/f5oo8g1hbbI3utfnsVHkLzT5O/u9PhppMk8ibjM4Ozx9/p9sNAcda200eSlyN4La6YGaKVwqMvO4e0Zc6wddq2Vv9j0+Pvm8PZWmMIme7GDs9LS5O/+/v/5+/ypy98Rb6kTcKpGj7xxqcyIt9Pk7/VcnMQQbqj7/f0wgbQKaqf3+vyYwdkVcaoWcquZwdpvp8vq8vfN4e1JkL2rzOAnfLEofLGszOH2+vyCs9ITb6mDtNLg7PNbnMQ5h7c5h7jA2egfd66awtry9/pvqMoSb6kMbKe30+UpfbGNutaOutZgn8XV5vC81ub7/P0PF+8/AAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAANLSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oLAICAoL8vNyc5IlxMUYYfKSUsUlpWXlhUUVYFBUWF5WWlIsJQlRwSgtI1tZVV1QU4EEagqqqyplZaRBKuTkFWrr6huKKlBAUUN9Xa2CvBzQAC6e5MYmdHmQiqbGZB4uRgZBccW05gKY7S3l5S0wdkFzmqK4IAOXUmtbeyFEqKajs6urs6MGoqSwva1ViYtBWSWluwci39vXP2HixAn9fb0QFT3dKSrKDKpqkyYXQYycMrU4GQiKp06BWFk0eZKaKoO6xjQwt6ghuwQsD1RRkg12dFHBNA11Bk2t6RDlM2bOSoaCWTNnQMSma2kyaKfNBnNa5sxNhoO5c1rACmanaTMkp8wDKyifvwChYMH8crCCeSnJDDoLF4EVNCxeglCwZHEDWMGihToMukuXgRUULl9RDJMvXrEcHDJFy5bqMujprwRzVq1ekwZTkLZm9SqwppX6egwGhmvXQYxYv2EjRH7jhvUQA9atNTRgMDLetBns5IqWLVu3bU9O3r5t6xaowOZNxkYMJqY7du6CBG3L7j179+3bu2c3RL5o184dpiYMZuY6+w+shkRg4erygwfLV0OirmL1gf065mYMnBaWh9oOQ/RUHAGlySMQdsvhtkOWFpwMjFZG1kePHcdMMCdOHrU2sgKmOUYbW53UU4XoSa5wzWk7extwquV0cHQ6c7YFRUVRy9kzTs4OnJBkL+fiWnnuPLKKopYLFyvdXORgGUPQ3ePS5SuFCAWFu68e9fBEZC1OL2+fa9cr4EYUVRy45uPtxYmUOX39knNvIHLWzVuifr6o2dtfNvnkbWhotNy+kywbgCLPwBBor3L33n2wMwrvr7mrEhSIKs/AGBzC13j2AdCSogdnS/hCg9EMAKoIC09++AgU1I8eJodHYMgDVUhGHnp8oqjoxJNDkZJY5IFBHhWd8nTGjKcp0VE22BQAnRFj9+zGjWd2McFY5YEqYuNmPX8+Ky4Whzww5uMTXrxIiLfCpQDojMSkpERUBwAAPAa7YJpbYIgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjUwOjM0KzAwOjAw8JvcoAAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACzVBMVEUAAAD////////////////////////////////////////////////////////7/Pzy9Pb////////////////////////////////////////////////////////////////////////////////////+/v7////6+/v////////////////////4+fr////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////r7/Ho7O/s7/LU2+GtusZ/lKdge5JPbIfu8fO9yNFvh5whRWYBK1AAKE8AKU/+/v7X3uR4j6IaP2EAJk0AKlD7/PzEztZKZ4ICK1EAKE79/f3DzdY8XHkAJ03W3eNHZYB1jKADK1EAJ067xtAVO14NNVlBYHxgepHr7vFpgpgCLFFWcou3ws3a4OXm6u3V2+IbQWMBK1Fzip7e4+iruMVPbIbY3uQFLlOjssD8/f3t8PJhe5IsT27Gz9hYc4w/X3vR2d9ifJMzVXPK09vx8/V3jqITOVyxvcmhsL4AKVAAJUzM1NwPNloUOl2QorP09vfl6e1Oa4UdQmN9k6bQ2N/4+fqmtMIIL1QJMVY+XXpqg5mCl6nj6OxUcYoAJkwGL1S8x9EoSmr2+PmUpbUMM1cNNFiUprVogZgBKE5qgpjp7PDL1NsBJ06ntcIeQmQeQ2WotsP29/l9kqUIMVV+k6b3+Pnf5OlUcIoEKlAwUnExUnG9yNKVprYVPF4IMFUJMFVBYH3X3uO0wMwfRGWInK0MNFiJnK5ZdI3T2uEwUnC5xM/6+/yAxxLtAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAA0hJREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/oBAICvLzcnOykyTExRhh8pJSRcUlpWWFheVgUFhYVlpSXCQlCVHBKC0jW1FZVV1TjgRqqqsqK2RlpEEq5OQVauvqGwrLUUBhQ31drYK8HNAALp6kxiZ0eZCKpsYkHi5GBkFxxdTmFpjtrWVlrTB2S3OqorggA5dSbVs7xP7Cmo7Orq7OjhqIkpr2tlolLgZlle6eBoh8b1//hIkTJ/T39UJUNPR0qygzqKpNmgzmF06ZOq0oCQiKpk2dAhGZPElNlUFdY3p+IdhRM2aC5YEqZs4AO7owf7qGOoOmQAZE+azZc5KgYM7sWRCxDAFNBq2588Cc1vkLkuBgwfxWsIJ5c7UYkroXghWULVqMULB4URlYwcLuJAbtuUvAChqWLkMoWLYU7LHCJXO1GXSWrwArKFi5qggmX7RqZQFYwYrlOgy6eqvBCtas7UmFKUjtWbsGrGC1ni6DvsG69RAnb9i4CSK/aeMGiMj6dQb6DIZGm7dAQrp167btQFuKtm/b2goJ6y2bjQwZjE127NwFCdrW3Xv27tu3d89uiHzhrp07TIwZTM209x84CI3AgwcPHTp4EBqdBw/s1zYzZeA0t6g4fKQGlthAAJqojhyusDDnZGC0NLQ6euw4ZoI5cfKolaElMM0xWttop5w6jZ7kTp85a2tnDU61nPYOjuc6z6OoKDzfec7RyZ4TkuzlnF0qLlysQVJRWHPpcoWrsxwsYwi6uV+5eg0p3dfsvn7D3QORtTg9vbxv3roNN6Lw9q2b3l6enEiZ08c3KecOzJLCmrv3RH19ULO3n2zSfWjiLq95cD9J1h9FnoEhwE5lec9DcCQXPOpZrhIYgCrPwBgUzNfYCcpAhS2Pn/CFBKEZAFQRGpb09BkopJ89TQoLx5AHqpCMqHj+orDwxcuKCEks8sAgj4zqfjVr1qvuqEhrbAqAzoi2ff3mzWvb6CCs8kAVMbFz3r6dExuDQx4Y83Hx797Fx1niUgB0RkJiYgKqAwC8prs7Sn3FCAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NTA6NDMrMDA6MDA/+es3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACfFBMVEUAAAD////////////////////////////////////////////////////////8/P709P3////////////////////////////////////////////////////////////////////////////////////+/v7////7+/7////19f3////////////////6+v7///////7////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////v7/zs7Pvw8Pzc3Pm9vfOZme2AgOpzc+fx8fzKyvaMjOtNTeE0NN0xMdwyMtz+/v7f3/mTk+1HR+AvL9wzM938/P7Q0Pdubub9/f7Pz/djY+UwMNxsbOaRkezJyfZDQ+A9Pd5mZuWAgOmHh+t3d+jFxfXh4frr6/vd3flJSeCPj+zk5Pr+/v+7u/NycueYmO03N921tfKBgepWVuLR0fd5eeja2vmCgupcXOPV1fjz8/2SkuxBQd/AwPS0tPIyMt2Hh+rW1vg/P95CQt+mpvD29v3q6vtxceeXl+3a2vj6+v63t/M4ON06Ot5kZOWIiOubm+7p6ftSUuL4+P2pqfE8PN7t7fxnZ+W4uPNKSuFLS+G5ufM5Od2YmO74+P7l5fp2duhZWeNaWuOqqvBERN+rq/D09P05Od7e3vnDw/VMTOGgoO96eug2Nt3Hx/X7+/4Nm4E+AAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAM8SURBVDjLdZP3X9NQFMVfFIUWLJRpVcoeYlVEQEUExIUyFFFRcfJqqiyb12paDQQKpQXZorJXARcbFRC3oohb/yHTJIUW8fyU5Hxz7/3cdx4ArDBs2XK7FSvtHSB0sF+5wm75MgwDVsIEQkenVSJnF/mlS3IXZ9EqJ0ehwIrAxK5u7h644vKVnNzcnCuXFbiHu5ureJ7APL1Ww7z8gqtKAjEilFcL8vPgai9PzOJL1qjU166TCGlYIURev6ZWrZFwBLZ2nbf2xk0lobESobx5Q+u9bq2ZkPr4UoVFNNLYCNFFhZSvj5QpIHSC6uLFvpkoVkMnIQbEXn54idLSnWZkeVaW4H5eYiD0p3SlXH9ElOnLy/VlBIcQpTrKXwgCAuUGmv/FWFF561ZlhZEvSBvkgQEgKLiqGnF+TW0dZFRXW8MRqLoqOAiEhNazr4huUKsgK5W6gR0EKetDQ8D6sNsc3niHgryoO43ct9th68EG/C77Qt9rgvNquseOhe7iGwCUN7MAqW9ZAFr0JAs0yyGQ4a1chbb2BaC9javQisvAxo5OFiC6ulUWX9XdxW4GdXZsBJs297CAiezFLQDeS5pYoGfzJhC+pa+fG/n+g4ec//DBfe5Lf9+WcBCx9dFjbtN09cAg00U1OFDNrZZ4/GhrBIiMGhoe4Vc7Ojb+5Mn42Ci/+pHhoahIEL1N9tRI8gdIko2NJMkfJ2l8KtsWDQTbd2h1z/g4mcyZNPGheqbT7tguAFhMxM6Jyal/AzM1ObEzIobJHBa7S/bcQCyOHGF4Hhcfy6ZWkLA7sV1vGzpET7cn7kkQcLGX7t2nffGSMFn//+q1dv9eqeViiA8kTQy8sco9Mfr2XdLBhaslOJSc8v6DZr4J0nx4n5J8SGB1OVPTYP6MZVBEfMz3SEu1vd6HveGnWb4JMfsZeh+x8QFIjw+cM3xhCeLL+Fzg0XRbH2AZx0Rfp83xRcppteh4xqICDHEiE377bl71928w8+Q/PkNITml/TCFU9kN7SrKEz6z8dJb8569fP+VZp2OXApgxzsQpZmYUcWcylvQZ4uw56vdv6tzZ//jMyZ+/8OfPhfMx/wOYMS5mZ1+0HeAvs9msMpv5tz0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjUwOjU2KzAwOjAwoWvEDgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACTFBMVEUAAAD////////////////////////////////////////////////////////9/v/5+v/////////////////////////////////////////////////////////////////////////////////////+/v/////8/f/////////////////////8/P///////v/////////////////////////////////////////////////////////////////+/v/////////////////////////////////////+/v/////////////////////////////////////////////////////////////////////////////+/v/////////////2+P/09//r8P/Y5P/D1P+1yv+txP/3+f/g6f+7z/+Xtf+Iqv+Hqf/+/v/s8f/A0v+Usv+GqP/9/f/j6/+qwv+kvv+pwf++0f+Gqf/f6P+RsP+Orv+mv/+0yv+5zf+Jq/+wxv/d5//t8v/z9v+Us/+90P/v9P/X4/+Kq//U4P/9/v/2+f+cuP/k7P/1+P+xx/+lv//p7/+2yv+gu//m7f/4+v+Qr//a5P/T3/+FqP/n7f/L2v/6+//y9v+sxP+Vs//C1P/8/P/V4f+LrP+Mrf+6zf/F1f/y9f+vxv+KrP+atv/7/P/N2/+Nrf+Nrv+4zP/W4v+VtP+WtP/6/P/C0/+MrP/D0//w9P+euv+SsP+Ssf/N3P/c5v/I1//q8P/e5//8/f/tCMxjAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAyFJREFUOMt1k+db01AUxm+U1QKllT0KAlXUInsjoOICRREVFZGRMMrKTSFlBVoKKGgZUqZShiJDUUARFyrrHzPkJrRlnE855/09J+9z7jkAcIFhx47b2NrZO+C4g72drc3xYxgGLAITiR2dnCUuUqKkhJC6SJydHMUiCwKTnXB1cydKy8pVFRWq8rJSwt3N9YRsj8A8PL3wyqrqGhJyQdZUV1XiXp4emKB7+1Dq2jqalbiAkK6rVVM+3ojAfP3kmvoGkld5hmyo18j9fHcJ/4CTVH0jbaWzBN1YT50M8GcbiJ1wddN+fZdoUuNOYgzIPAOJZqE/ZGiaEb7JZiLQUwbEQVRLK+TNaXVtbTotbxa2tlBBYhCsIPQ0KrR3dD57/vxZZ0c7Img9oQgGp06XdkHUsvsFhbNBvehGv4RdpadPgZAzL7kU0hVqnA91BWcaki/PhICz0nKEG3p6BaC3x4Bq5dKz4FyfikuY/lf4XrzqZzhA1XcO4ANGDqAHh8zA0CDnGxoHcKDsG0bAyKgZGB1BwHCfEoSO1aL/vX5DCTr15jWq1Y6FgvNh4ygx6QkBIPQmVBsPOw/CIya0KGudnEL61CQaLdRORISDyKjpt5xlknk3w/kcmnnHF95OR0WC6Jj3s3NotMx848KHDwuN80iHc7PvY6JBbJzy46KJf0AT/ekTbeKf07T4URkXC0TxCZqWz4ywBVDYO5L53KJJiBcBLDEyaWl55eDCfFleSopMZHcOS76gLPkK968c1JekpCZzWytKu3hpVMdYLy2jG710OU2E1t4//Ypm9ZtlDwjXVjVX0/2Fw5Bdu/79x5wl8PPX0vUb5tMSZWTe/L1ovgxILv6+mZkhsjjOW1l41br5star3LNuWZ/3bTm+/IefBvP3Hy6/Y6UDkJ2qGNMjG3BOP6a4m22tAyznnkSt27UBSZ1acj9nXwOWeJCLb6ztjnptA899eEBnCe9Hms0VCFc2NY+8D9HZkT/OGzAaDMaBvMfJhwGsjScpW+vrWylPcg7VWSL/KbW9TT3NP0JnX76gcGensCDxKIC1UVRcXGRt4D+SPpTGEJHXggAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NTE6MDYrMDA6MDAGSaFUAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAClFBMVEUAAAD////////////////////////////////////////////////////////9+//58v/////////////////////////////////////////////////////////////////////////////////////+/v/////9+v/////68v/////////////////8+P/////////////////////////////////////////////////////////////////////////+/v/////////////////////////////////////+/v/////////////////////////////////////////////////////////////////////////////+/v/////////////36//16P/37P/u1P/erf/Lf/+/YP+5T//47v/kvf/Fb/+mIf+ZAf+YAP/+/v/v1//JeP+jGv+XAP+ZAP/9+//nxP+2Sv+ZAv/+/f/nw/+xPP/v1v+1R//Hdf+ZA//ku/+hFf+eDf+zQf/Daf+7Vv/it//w2v/15v/u1f+kG//Hc//x3v/dq//v2P///v/Mf/+aBf/ao//+/P/37f/AYf+rLP/oxv+8WP+yP//s0f/AYv+tM//qyv/58f/Jd/+gE//fsf/Zof/qzP+fD/+gFP/SkP/69P/05f+4Tv+kHf/Lff/s0P/8+P/bpv+bCP+cCf+xPv/Dav/Ngv/z4/+6VP+bBv/kvP+oKP/79v/UlP+dDP+dDf/26P/DaP+YAf/26f/qy/+yQf+XAf/cp/+kHv+lHv/cqP+cCP/Lfv/79//y3/+ZBP+sMP+sMf/Ulf/u1v/gtP+lH//PiP/Pif+8Wf/t0//iuf/9+v/1rAt3AAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAMmSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oBAMCvLzcnOSJcTFGGHyklJFxSWlZYWF5WBQWFhWWlJcJCUJUcEoLSNbUVlVDZWFqqmuqqyQlZEGqZCTV6iprStDkQeqKKurrVGQlwMawMWTXN+ALg9S0VCfzMPFyCAorpjW2ASzvQwIYOymxjRFcUEGLqWa5pZCqONa27Ky2lqhji1saa5R4mJQVklpL4M6rKOzq7u7q7MD6uCy9hQVZQZVtZ5eML+woK+/KBkIivr7CiAivT1qqgzqGhPA3MKy7ImTksFg0sRssEMKCyZoqDNoak2GKJ8ydVoyFEybOgUiNllLk0F7+gwwp2zmrGQ4mDUT7KzCGdO1GZJTZkMUzJmLUDB3DkTB7JRkBp3p8yAK5i9AKFgwH6Jg3nQdBt2FiyD2LV5SBJMvWrIYIrZooS6Dnv5SCKesPQ2mIK0dEpyFS/X1GAwMly2H8FasXAWRX7VyBURk+TJDAwYj49VroAG3dt16oC1F69ethQbtmtXGRgwmphs2boKq2Lxl67ZtW7dshspv2rjB1ITBzFxn+44yeGTu3AmPzrId23XMzRg4LSwrdu2GJQdQkoQxd++qsLTgZGC0MrLes3cfZoLZv3ePtZEVMM0x2tjqHDh4CD3JHdp62M7eBpxqOR0cnY4cPYaaaI8dPeLk7MAJSfZyLq4Vx08UIqkoLDx5qsLNRQ6WMQTdPfasO42sYPOZsx6eiKzF6eXtc27HebiKwvM7zvl4e3EiZU5fv+TcC4icdTFX1M8XNXv7yyZfaoEpaLmULBuAIs/AEGivsrAd4ozCze0LVYICUeUZGIND+C63gTJQYVNbMV9oMJoBQBVh4clXroKC+uqV5PAIDHmgCsnIimv7Cgv3Xa+IlMQiDwzyqOiUG1Om3EiJjrLBpgDojBi7mxcu3LSLCcYqD1QRGzft1q1pcbE45IExH59w+3ZCvBUuBUBnJCYlJaI6AABB269xUXFElwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NTE6MjArMDA6MDAnvJMTAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACbVBMVEUAAAD/////////////////////////////////////////////////////////+///8v///////////////////////////////////////////////////////////////////////////////////////v//////+v//////////////////////+P///////////////////////////////////////////////////////////////////////////v///////////////////////////////////////v///////////////////////////////////////////////////////////////////////////////v//////////////6///6P//7P//1P//rf//f///YP//T///7v//vf//b///If//Af//AP///v//1///eP//Gv//+///xP//Sv//Av///f//w///PP//1v//R///df//A///u///Ff//Df//Qf//af//Vv//t///2v//5v//1f//G///c///3v//q///2P//Bf//o////P//7f//Yf//LP//xv//WP//P///0f//Yv//M///yv//8f//d///E///sf//of//zP//D///FP//kP//9P//5f//Tv//Hf//ff//0P//+P//pv//CP//Cf//Pv//av//gv//4///VP//Bv//vP//KP//9v//lP//DP//aP//6f//y///p///Hv//qP//fv//9///3///BP//MP//Mf//lf//tP//H///iP//if//Wf//0///uf//+v8BRUUXAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAu1JREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSUFSKCkuKhQShKiglFaRra0rLyiAAVUlJeVyspIg1TIyStUVlUXYIDqqkoFeTmgAVw8STW1BVhAbU0SDxcjg6C4YmpdPTYF9XWpiuKCDFxKlQ2NMLGm5szM5iYYr7GhUomLQVkluQXmsNa29o6O9rZWmINbklWUGVTVOrug3u/uKUwCgsKebmiAdHWqqTKoa/RCuVl9YHmgir4sqJZeDXUGTYEMCK9/wsQkKJg4oR8iliGgyaA1aTKEM2VqEhxMnQIRmzxJiyEpeRqEM30GQsGM6RCxaclJDNqTZkI4s2YjFMyeBRGbOUmbQWfOXAhn3vxCmHzh/HkQsblzdBh09RbAfJ0KU5AKC5kFeroM+gYLF0F4i5cshcgvXbIYIrJooYE+g6HRsuVQ9StWrgLaUrhq5QqowPJlRoYMxiar16yFCqxbv2Hjxg3r10G5a9esNjFmMDXT3rQZEYVbtiDYmzdpm5kycJpblG7dhi26t20ttTDnZGC0NLTavmMnpnzTju1WhpbANMdobaOdsisfXT5/w25bO2twquW0d3Dc04ymIr95j6OTPSck2cs5u5Tu3YeqYN/+UldnOVjGEHRz375yLbL8ugMH3T0QWYvT08v70ObDCPnDmw95e3lyImVOH9+knCMIBUdzRH19ULO3n2zSMXjibjyWJOuPIs/AEGCnMqcF6ox1LXNUAgNQ5RkYg4L5aprBGai+uYgvJAjNAKCK0LCk4ydACk4cTwoLx5AHqpCMKD0JDPKdp0ojJLHIA4M8Mir5dH//6eSoSGtsCoDOiLY9c+TIGdvoIKzyQBUxsRPPnp0YG4NDHhjzcfHnzsXHWeJSAHRGQmJiAqoDAOgCnVLAYqeOAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1MTo0MiswMDowMHZMi70AAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAADj0lEQVRIx5WWO2xURxSGvzN7H7a0AdFRkFSQBovKqcCyBF0kmlDS0SHRpkJKEYmGEBeENImFRJMoLlLk4caJrCguEDSguMEijYMQAu+uwfZ672v+FHe93nu9fnCmO3P+f87jn7nXGDIBNPiAD5limgk+oglsssoyf/E3/7FBAcZIEzKd0CXd1yslPve+ULm897kSvdJ9XdIJmfaBhzqnu1qTL5QrUVeb2tCGNtVVolyF5LWmuzqnUCPg47qsJalQqi2tq63W0GprXVtKVUjSki5rfIfC+rWP8xlf6GNPSoLf3RruDo6YCIet8CU/s21llCDiU77S6YJtMvZtEgJCxmlgz/mceVLDAY4Jbh4OL3cytinQaW4ygQMnOM4NJv2h8GEKD5Pc4LhwhFzgiifZA9fQqlMkeLjCBUJHk2s6VpBW4EIYITExIVYhMSClQMe4RjPgDNMixVfgJdhhgCjz0yDC8KQ0sGnOBFxUU2S1XsfENAaeBg5Hb4gCMsZQ0y46pnBFZQuiCrykiIkqnRAFOKYcZ0uC4fQj3J7+OyKsEleA46zjpMzXTnMjhmm4WlYeGScd8d7Q0VoY6Y8dvu6rzv0Qv3e0rFaxx48IFb52lsOg5XiGH67N8GQjCbKKVqABnmeOR+YdrgLJSGsUIq1pxeEwzyPHApkjqOWQ0KMYeAp6JLXzAxxkLDie8NRqMzYKenTpss02Xbr0KGpSjzB4yhNHh1nzAWFtZCKj119ZTakQEmCeWTqOlAUWjZhG7draYHRWu+YNYgwWWSB1iJfcsdcBcaWMHZK6fIQjJsBec4eXyBnkLDFjPiKCfUS0C4eICCv4miVyw4HBFj8xZ4oJD6QoH9UIE3PMsWXQF6FY5RtbbhCPuIdV9cU0sH+4x2p5kitrxfOYGVsPR3RieHgxIbbODI/xxoAADHJ+Y5Zk5w0cBQ+JIWGW38ltkNNOx8UaD2zR9V+jupTLV8nJFnnA2u73dahkg2W+5XkwshPl8PiXeyxbxV+ZO3/wvXWiWhll+hHW4Tv+tBpx1Xr8wK+WjhEMKIQRMIal/MKP9DjYhD7RQylRRy211VZLHSWS9FCT4ggmdFUvvLr9f4S2uvLSC109EhyEmrqtd4U21FZbGyqkd7qt5hEJQOiU5pXnequ3yqVc8zp1ZHif4rxWvFKl8tKKzr8XHIQCXfdvvLz8G11X8J4E/U7cUkst3Tqo+v8BGqkQrMMFpyAAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjUyOjAxKzAwOjAwKNkk2QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAAD/0lEQVRIx5WVP2wcRRTGf29u9/44a5/Pd2cHEagIEgoFRYSQHMtSQkVJOsoICUVKi+gokFIgghubArAipTHCBVL448ZBFiI0caQ4whGKFRoTx3aS89k+fL7b3ZtHcb7zzdkOyWyzOzPf99773jezQsdQgAS9vMIIo7zJqwTAvyyzyG/8zj9UaIBw6FBUNKfn9Kquad3GsY001FAjja2Nta5relXPaU5FO1DSEd3nDT7kAwZiiaixS0gMeCTJkMbHUzaYYpK/iMQlUMjwLp8wHFNli01C3DhJ+snSgwd/8Dk32JV9AoUM7/Opvl6nRInQTa6lDkny5EkhS3zGD00KAYUk7/GFvrbDKtvoUSKhCH28xDHkAR8zQygIqOEtvtbTO6xQ4UiN25n08jLHkNt8xIJYo5DlEqdrrP4vvLlaYZUanOYSWcXgc4bzMSW2D9S9/7gU25SI4Txn8A0BF7SvSsmpXVES9FGgQB8Jh0RQSlTRPi4QeJxktEGZyIELOfKkSAAN6pQodwQQIsr04I1y0uOsBhFbXVoPUSS5B/BJkSbJupPjFoMkAjlrGMHUiBydsxTa8JaNCmTbfgCIqIFhxHDKml2HW8iR6uqGkCLn7FF2sYZThuMqobM5cwDeosg4MyEqHDekwDoLCcyhHjAknG8LkDJYugDW6XunuLaLELCGkuA7C3WiQyiUiLoz4yNQMtwXm3ZqjdiicYCgwZbjFUgjlvuGW8am8RynldnoomiwQdmxmkcaY7llmCXyCZwcYtZYp9qeqbLOGrETP8CHiFmPBe567wywje2wasgaFTL4QMQuOx2roBgG8OAuCx5lJs3bgclSdrKwVKhgWu3qckaWAGOZpGwImWXOp0i669gKYLHt9/34aYr4MMcsoUF5xBV5HDBIoqt9sve47UwwSIA85gqPUCMQc5MxY3MMwBEm2odDnhymwZfcJBYMCOzwPdOeFuh9JkXzRszjKdNMsyMtP6IsMy6LPRRJHkmhQJIiPcifTLDc3Gb2FLbMMyab/RSOOErNzQX6kU3GmMcKbQIQiPmZSannySKHngWhnzxSZ5JfiKVN2lJceco1mUtRJHOgDAUyFEmpzHGNp/v/1458BRb5igd9FLrOJ4BPgV74mwkWOxvrFCxwg28p5+nHdOSgGPrJQ5lv+NX1RbdiNab4KREOEbSVUISAIRIhP/IdNZ5FIPCQCe6kGdxraLN5g6ThDhM87L4tD/RMYJ5xVrIU9+7ABEWysMI4tw9etoc3/TpTUimQxWDIUkAqTHGd5x2KntAZjat6T+9pVTXWGT2hz41vUgzrktVN3VSruqTDLwQHRT29aJ9YtWqf6EX1XpAAFA30spa0pJc1OBr+H/Nbm042akI7AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1MjoyOCswMDowMP9kZncAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAAEJklEQVRIx5XVT2xc1RUG8N+9M2M79tgxJDLR1MHYjosQrdRFVFUKUSToqsuy6xJVqpDYVuy6qMSiKmSTdNHWQmKTqllUon+yIFRRVbohSAQRgRxRJXWwSQzGjpzYnsnMOyzsOPPGNoX7Nk9P9/vO+b7z5yVdJ6Bi2FEnnfI9j6vjrnlX/cu/3bSmQ7LnCZHikXguXo9b0SzarWIzNmIjNqNVFO1oxq14PZ6LRyJFFyp1Ra95ys/9zKPNtOmuVeta6DNoVN2A/vClc2Z97H4qEwQH/NjLTrSsWrTonnKcIQ0No/r4j99420Z6SBAc8FO/iu+u+Z8b1iVlpYEw6AkThqVrfu0vWxSJoM9P/LY49qWP3RL7mSQkRzzlUfkTv3RBK0lE9gO/j+PLPrQk7QvfNtqY7zskvecXrqQiBwe95Piaj/4vnCRZ8pE1jnvJwZDVPOP5phtu98BDKBSix87kthuaPO8ZtazuhRhZdb2kPYSaMVOmjKmVSJJw3aoY8YJ61YxTLQs25S549h2ThlTRds91CwoPa79pwaj+U2aqno36psVS9GTGMYM73+qGDbrWlWOyaFpfPT2bnYy8ZqOUfMOkoS7KZMikRknIhjWRncye7uQ7Jf0V44Z3+T9sXKXkwx2d7OnsSKT1nqv1PYqZ1Hto10VyJOsPnVLx+rsidZ+K/lJBO4L+rEg9gLZiT4JCu4cwUWTLyUAp1bs2SpEeZLbhbknagMRyNpeLsram21q7CFpua/Z4lQtz2bu5GFHbiZkkN833pNs272ZXq4eaEbnwbnYx3T9grCSiac6c1Z0vq+bMaZYEjDkg3Xex6ooP+n501C2drj5bN2fJQQPYdMeKdqlXK47q4wNXqlbMVn54ODfMl3qvbcnS9izYNacNh1UKs1aylosuDZgy0jO2WdLR2X7rho+YMsAlF7WysOjVvHTYjGpP+dL2Uy5nzYzD8pJXLYqcaHvH6UoxboI9OqAMZ8K4Ssdr3tFOMol7/ux8f0wa+1qKwJgn9IfzzruX2N4iYd6ZdHXUtKF9KQJDpo1KHzprfuta3tKqcNnpvNowsc8oQcWEhrzqtMuKLW/yA7u0/d1sbk5qSHvOQtIwKTfN+of2A2t3FmEKX3gjXdpKsldGYNS0oUiXvOGLh//Xh5tU4qrf+WTMpP5dGQyYMsZ/nXW1u7C5+1LibX+0MuGoSlcOoWLc46z4g3+W+yL3BNp0zt9qrWMO7TgRkkOOqbX81Z9s+jqCxKfOen/EkwbZ3sODnjTC+876tHdb9mYgcdkZC4+ZVgVV0x5jwRnv7V62uwjAm87ltUkNWd4q3ppz3vRNT4jxuBDt1Xgr3orViHZciPH4xvgtihNxrYjP4rMoIq7FiW8FJ0Q1Xiw+70Qnis/jxah+SwJC1OOVWI7leCXq+8O/AuFKp/3c1qOQAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1Mjo0MiswMDowMJ17ML4AAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAAER0lEQVRIx5XVS2xV1xXG8d/evrbxC7CpMbVSECGg2qlRU5tXDEVNOmmHzazDqFIVKdOqsw4qZVA1RZGgg7ZWpEyoyqBS+qADgpxSOglYkIQE2aFCIuGNMcEOhsu9Z3WAgXts0yb7zI7O919nfevbeycNK6BJl2/YY69vWa8Tcy4445/+5VOz6iTLrhApuuPFeDOuxL167W4xF7fjdszF3aJei3txJd6MF6M7UjSoUkP1ZgN+4sd67qRZ110xYx5tuq3Tq0t7uOmgMWfdT2VA0Ob7fm503iUf+9iMcp1ugwb1a+PffuUd8+kxIGjzI7+ILTdMmHBLVu40UFht2LCvSVN+6c8PEImgxQ/9unjmgnFT6vLyJik02eJ71svn/Mxh1SQR2bf9rhi54B/OS0/y+KHRNvqB9fJJP3U6FTlY5VUjNxz9v3KS5LyjbjDiVatC1my3l+446ZNF8lAsPLEI8YmT7vCS3ZqzTi/HyosmRIM8FFbYbJttNltRgiRhwkWx0ss6Kzbbe8dHZhusC9mQYWu0oGrahA8VHs9+1kf6dey1ueKF6JxztlQ9222X7kfv1ui1yvES4qxd2jvTC9meIl/zecnnAdsb5A9itN2AaGjkc9cU2Z7s2Vq+Wuq/YsiaRdNI1hhSKflwVS17NltXTzMl73v1LBOlrEdvaR4z6sm6rDXUSoB2LctmoEV7CVATtGZF0lz62ar6soC6aqmxZokim846SoCbbpcqPfyz226WAB0y09lkpVhbAsyZMr8EMG/KXAmwVqUwmb3XVPRpa6iZfeCUakledcoHpai16dNUeC87ku6v9HQpqnOOedflhXfhsncdK9UPT1sp3Xek4rT323duNan26INsxjHn9enCrKs+VS3Vb7ZVO+87XTFjrLJ9Yx50WlNDG/edc25hL5BLySgM2qhSGDOTVR0x3mWHPkXJzCZZTU3WVDKv0GeHLsYdUc3CJa/naxs8r3XR+NLCUx7nCqM2yNe87pLIiZrj9jUXWw2zTALKcr5jSHPdbxxXSzKJL/zJoY4Ysam045bKwyYjOsIhh3yRWPAmXLA/nem3Q88TESH02KFf+tABFx58lh/0qnDCvnxr0PATthK0GDYo37LPCUXyCECi5m/GKveGfVNadi8kA4ZV7hnzd7XHmXnoeLjhrTTeY6evLzEz0G+nnkjj3nLj8f3akI/EGb917hnbdS4BdNpmE/9xwJnGwZaOnsQ7/mDmOUNaGhChxZDnmPF7R8u5WHx23XXQX1dUn7f+kRMh2WDUiqq/+KO7/hcg8ZkDTq31XasXRsdqe/RyygGfLb76lpyeiRP2u7jFTq2g1S5buGi/k0tvzuVv8rcdzLPbDGjSZMCIPOugt33ZFeKpOBy1y/FGvBGXI2pxOJ6KL61/gBiNqXpMxmTUI6Zi9CvJCVGJV4rrtahFcT1eicpXBBCiM16L6ZiO16LzyfL/AjzmtojnBFLlAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1Mjo1NCswMDowMDIBBRoAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAAEXklEQVRIx5XVS2xdxR3H8c/MuX5g/CBGTQzkATIggQt1K7fNgzgI5YVDWmjaRdsdrRQhsa2666ISi6o0m6SLtu6CRYIS1Er0EdGYEKV1GwlbTaxGRYkCgWAiYuKH4kaxfX3PdOHg3HPttDBnNXPm9x39/vObmaCqJci0WGOzLb5orWb8xyVnnfQ3H5pWIVRpQkEe3OUrvq/Piko2G8shR1SXGvKsYtJRB/3TlBSWAhJ1HvFD39N+LUz40EVjptFipQes0a41mXBIv3eUQxGQuMNWP7Zp2rtO+YcrKov0JLPKRht0auHvfuZNN8ItQOIO3/KT9PCoYwaMiUV3EnIrbbPdauG8n/r9AiKQqNfn55UH3/GqIRXR8i2X+arvekR2wY8cNRcEUtTtV3nPv/3WiFhYubYluS/5gUfFYXudCXlMtHlRz6iD/1dOEI04aJQeL2pLojpP2HPNG4Zr5EmuoiJfyEcVYtgbrrHHE+pKmj2ft15wTF7lPUnu9LBVuOK864JbG5c7pkd3a3zeYMlDtkwbNCGrkke9drhXI2Zc9hd/lS8iogmDOrVt8VDJU6l5yqnC6tEe39CxKLjXal/wuwLilG9qbQ5PRZsr8QNXC8436KuSE3Tos6FQjas+UIk2R11z8X2panq9XvfV7EZwn171Vf3kfXNRV9QxH8YKYVnrnmWiFN1jrbxqZMx80BE1JLOFqS0al81Ao5ZCf1aiIcpDjeCG8rKAshs1wEAejWfaCm4/Nl6IzqfFHfdxoTJtMsajc/X5uoLXScOmlwCmDZss1Gad+ty56O26fJ3mqjUzJx03U5DPOO5kIWrN1qnLvR0NKN/t8SpAMOU1h723OPKew14zVWUgedzdlA2UnDHSuv5JQ8pVObviiBEPaMeEi86ZKWS13pNaGXGmZFJ/3dceixu9pVRViVmnnb55FsgK7iu2eExdrt9kNGfAiXa73F+ISZDJlJVlskL1c/fbpZ0TBsxFyWUvZ2NdntVUc/JvfdXbeafndMnGvOyyFAPzBu1ryHttY5kEFNPANr0aKn5h0HwQCVx32JG70k7d0v9AJEm3HdqSI464HrhZm+SS/eFsp11W3RaRJB2e0Sn8ywGXFqbFBbdyQ/ZlUxtt13hbQKPtNsqm7DMkDxYBBOb9SX/97E5fF5c9C9F6O9TN6vdn87cy82nNk6teCSc67Na5xEaSPGi3jhROeMXVsPi7Kh+Bs37pwpf1WbEEsMLTunnXAWert7Vw9QTe9BuTW/VqqEIkDXptZdKvHS9edrV314xD/tg096xHFyuRRF2e0zTnD16tOaa1gMCoA06v9R0rb3pnpW9bw2kHjNY+fUtuz8CQ/T7q8Ywm0GS3Hj6y3/DSl3P5l/x1h7Lpp61XUrLeTtm0Q173WVuSVqejaf5i2pv2pospzaejaXX6zPoFxKZ0vpKG0lCqpHQ+bfpccpJUSi/kn5RTOeWfpBdS6XMCSFJzeimNp/H0Umq+vfy/0JikOgfvvUIAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjUzOjA1KzAwOjAwM1Rr9AAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAADzElEQVRIx5WVTUxUVxiG33tnhmF0iJ0iCVF+NJpghTSUVNOoTTMrCS1qm4mJZVFSu+h048Jg2dCdSatb3TWkTaw2ISkbBY2waGBBJGmsoggkasEfyDhDsQjM33m6YGjnzgw4fmd1v++8z7nnnPecYykrkCSXylStD/WRGlQjv6RFTWtMv2tIM/pHacnK0lgOuaW31KQ2tSiQci3bcSstySUvPuNOa159+kV/6G9h5QOQPHpHX+lzvR21ZjWhO/pL85ICqtW7qlOlylFMl/WjxpXM/gtJCB+tDEOMQU6xEwtlNYudnGKQGMAwrfjIk7cxYRink20OaXbbRifjGJigLQuBKOEYU0mGacFeVy6ETQvDJGGKY5RkENg0MZpmiEMbitfaIYZIwyhN2KvjB+iG+xwuSi7EYe4DdBNAwkMrCy/owFU0wEUHL2CBVjwiQG+am1TkdSsjSDvtBCnLq1VwkzT0EhD7iUUI5y3WcfqZ5BnPmKSf43mLGyYCMfaLTpO4x/acXT/NQwxrYXjI6RxnbOceJkGnuJZI9eQUj/IgS76KeMDRnEF6SKS4Zqt+xR5Ttq88Cmm3nFa1tFsheRzmG9OKrXpblUlr2tG5TrvkUm64tEt1jsy0kpYqbXmNlh2Fcm1Wodiscsf3sozktWVsbXIUFhUvCIhr0fG9SbZkbEXdqnAUHuu5Y03W5vxcjx2ZCrmlqK0Jr9nrKER1XbE8QEzXFXVk9sprNGHrltfUa4uj1KNLeuXIvNIl9TgyW1Qvr9Et0czSU47k+KyaLm5nvGC4TRfVOT2O8BSWaLaoVG/8g9/0pVYcI/i0Tw2qlDSrMY3m7FSpuvWZvCP6VHg5SXqGUMFzV0JJwXyIGUhzEq+wqGEgyQB7ij7OexggCQPUYAnhppm5JS7gL0pexgWWYI5m3KzuMH6+JT3L1zmHqlCz+IY5SHEG///XqsUOrhgzSvA1CIsgoxjDZXZkvS4ImwPcSXKFmg0BNfxKEv7kAHbuy+ChnfkluihdV+7jO5Zhni/w5Jkdi62cNyuPCOEuKHcT4hFmhfNsxVJ+IBroh0EaCwLeYxAM/TSgdQLxCVNwscAdXcFFgCk+XlcuSZRyhtgC4ZyV8BFmAWJ0UKoNAaKKn4nfJ5j10LgIMg5xfqJqw/EziH2MwFVq/wPUchVghPdfK88g2niS5PuMtf38QBKe0FaUPGPtc7yMcAIPHk4QgZecy7JuEYgq+kjdpZFG7kKKviJmn4M4yGSKG9wgBZMcfCO5Vo0XNpEECUyEcObgviHCz1miRDm70ez/BYYI/lv2W3BZAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1MzoxNiswMDowMM4WcfcAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC\",\n anchor : [0.5, 1]\n }\n ],\n /**\n * api icons used by drawing control with a good ratio !\n *\n * @example\n * image size : [43, 32]\n * scale : 32 / Math.min(size[0], size[1]) = 1\n */\n drawing_api : [\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAgCAYAAACLmoEDAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5wUZACIosGP4JQAABm5JREFUWMO1mFtsXFcVhr+195mLx3bshNghKWkNpCglPEBpUYSAKg88gGigUftARSJzkbiIB54QalQkKvGISkGQSkTQplJBKQgQbbmUW6CkTZuGVq0pjV3n4jSOnUzG47HHM545++fhjNs6npDjISzpaDQ6s9f69tr/XnvtMTo0fbYfAhACbN5knJ1ch9QHlseIgAZSHbMyhRsvUj0qvIPeHPbd6Y5iRp3CIkGjy8jUtnJ28mbgg8B7gEGgB5gDpoCXmD92GOxZ3pt/haN1dRrSOuLcvQYitwHpNsTtwE0gj5kAXeLfkGLgKGaPgPslIZ62A7P/X9hk6YMRuB5nX8PYBeoBiy+BbBfHA3OIXyDdh7NRXFP24/nU8VcnA3OG6R047QXtTACsmWaeQBNUAO7E6Ea6B984cYVJLjOXOqvD/aC4D/gSxk7MPFhY1WSx0Bq3E/gizVyf9vSmHp0aloBH3ALcCeZIakEnFkgk8RmCfQTkryqshvshoh/4AtBNu6WTjBAbzUWjUYfmYvJdWrkvDLX8fB58n/b0p4JNp1lhBG0D3k+yWZbDJkCBd95c5H0fz1LoX0u1VOKfv11k/Ln1SNaqFMuR4SaMbYgnSaHddLAmD+wAsm0zigI33lrh09/OMzDUD3QBxvY7Zvjp3lmO/aYX4ZYBmwHkEDswPQVccaOm1KwcaCuJ1i55FWDDlgq79i4yMLSJZHkd0M3A0CZ23bXIhi0V1FbiHtNWTKk4UsKagQ22/X0IMDhU4JobBlhZt41r3j3A4FCB0BbWgW1YSvOVLK1mAfKAtTbHm18Kn4kwy11mnll8RpeRpLX8prK0pUvALO0imjMqF+aols+3HTk/c4HZC3NJtVvhVUhlpFQHQ1rNCvQqEK/04GFiJMuhB+uEUFn2LoQKhx6sc2Yki2tbTptgY8hSwaY9bgNwBNMdYMujmkG9muPR7/RTnZ3glt095HsHWKic59CBOf68fwP1agbXLi9qAs9i6Q6YVMLWcK8hfx3oVxhvZ6UcDAl8pkmuYPjIEzdj6lURN6LW/mlXZ09g9knUPG0PzF0xu+k1GzSFeAQRt5mkMCBuRFTLnkpRVMv+v4KKGHEQaRrSySB1i6jdfeDYAuzD2E47/aY3j/Q0xpd3He0de74S4QLEweF9IDjDgEKtxofPnWNfa1DqFtEeKqPhNSeR7UNch/FWVtHMSK3EGIY0WWy4n9z2zJriVMMGWxyu9cQtv4uC6vmuQu1dA4NszIRVNt/DfRAoYHwd01fBMlz2TBfSG8VeyCRzTaF/lKKnvvHv7sfPL7paZIqUQFqr7VDrWA6IJqLkYMScRld9rdGePjBdC9wLfHTlVeYNyCC5gHmBCZmBjc378W8e7/79c+Wo7F2SLHvTWLCkUtpSf0QwWAjoifT97JIcDpTBwgTSD4Fxlu5ZCEkWZC4WviGyTcgE4aQkc6WGK/1sMvfMsdloxhuyBCTw+mPJp1kAC2YKZphQAal/1bAA9sCcmF74K/AjpPmlbAaZb4pMLKKAnLBkp5hoBGv8pZh5/ueTuVOOtN2AGZLJ7KycG+0IFoCLzZhgD4M9KpliETUhkuRkMsPUWlAk00jFH7//dP6FxWAhBagBTlADXnDwuMvnX+v8f4MtfVDIzlCvf09ia4x9QBKtZC5p2Awxtein9p/JH5lY8AsrOWVLZwqtNh+pCoxh9gowUerqmutrNFZxB7t06g+Xod4QxCO12H4Qi7IlZUnQSimiHlvt11PZI4eKmWnj9eVPlle4pHdXE5gHTgr+5KPoIcHvPnby5MvA3OaZGcbHxjr7k2NZXoZ7GatE/etzujvn9RVnconMZEEW/n4xc/Rbo4UnJ+uu7pcULGFmi8C8RMnQKTM3GsN5Gc2FYjHuXrsWvOfV8fFl2vif7fAn1tr6vG1bn42/3+X5kFlyLTgx70/eM1b4w+FSphglV6MGUDKzaWDSzCZ8FL2GaITQJG7EUuQp9PTw0osvrlzNqwELcPz2deRd+NS6rO7NODaXG1a6/1T+if1nci9nnJUMJpHOCM4V8vmphXq9Zmb4TIa3bd/OHw8cuGKMqwYL8NitA7kb8s27+jL63NOl6G93j/UcnGnYCYeK3mxmIpud31irkctm+dfo6Kr9d14N2thbolA/VbP7rnc6ODIXzZyqZy76M6cX1ly7EUnsuHCBx4rFjv3/B5an/+2QIsMIAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI4OjU5KzAwOjAwM8i5WwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMzowMjo1MCswMDowMGqPVM4AAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAgCAYAAACLmoEDAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5wUZACIpx2TIswAABQpJREFUWMO9mNtvVFUUh7+1z5nOTKWUSsE2ahRUQiRootGIiQ++mJhIYoJ/gIlPPmhi4u3F+GR8MN4gBokaFRU0Jt4SlYSLQhSIKAhyibRMWy6l9xl6nTLnnJ8Pc4pFmOFMW1yTlZMz++y1v73WPmvtfYwZitD0WwOagUYgA/hAABSBAjAI/3YwbEZj+jOFnQZ5O7AKeAC4E2gB5gGjQA9wENgF7AWOTof+X0TlX4vQ00J7hZRA9wg9JXSd/g/eGNKElgt9KDSWEHRKx+J+y2M7VxXWhG4T+lKoVCPolJaEvhC6VWhmizehV5uE1s0CdDrw2tjeVYH1hNYIjcwSdEpHYnve1fBqs9COOQKd0q2x3UQcSVOXA+4A7q06p7vpYTUeTSwgT4HvCNlPC1RMrKuAlcDPzFVKE/KFXq24Vk2hVqtf7eqWNCopkDSqNnXrEfULRVXW7itCs833F8HWCX1bcdBbNKSDykkKdbGEOqCclmqoAmwU261LGt4kYlAlnDeTZSULL2PPcSfXsoRsFbvXQbL6W4v7MxVbUvgVC76RJkW1Nz5LQknqWYBzFVsGGCXPwGXbhhign7EqdgtzDRsBbUB42dajZNhARMjIRf+HjPAu4lhF74XA8dj+3EhcEJ4QmqiYMxs1qRfUrnadVJ8m1K6Tek7tmq/JKnl2IrY7d4Uh3hMsFTpRNcn7CjRfga6VNF+BfAVXKAonhJYk3SMkXQYCzgKbqoYswGMYjyFgGI+g6osVAZ9R3vMmKgiJdz1xSVwGfAzcN9MoTZM9wOOPtTx6fH/6T1wEYeTwvIjIlVNLfbHIAz09rI87JE5dhiHUAbwFvAm0zpRS6OyQG9qw5vo1/d2uc3HM4WINY6+fF4z3Z+uLyxYtpjUV1XYYir1bD7wMPAOkagWNiKJfM7/senbRM9/2eX1FX56vMqSVAy1hJiBCBIi8gyPm1FZTTY69Ow6sp3zeeogal1Iuletct+DtQ31eb5OHb7Lp1URlc1L5UuZvFSwJxdZaisIFYKCL8lLoqKXvOVcobG74dPfvmX15D1+GRVYOeaxWvppFYJGZIjNMqB5pQc2wMbCAbcA7wHiSPiVKwU/ZHb9vbtjU4XAJj+NmSCazbjnXNiPYWELgI+AbrpB6hDiSPnxs3YK1B87b+SgBqAFO5e8OBx384DKZM7PdR+aB14SWA3dVgujzens3NK7f3ZXqHL/0GRkYUjwvI0IaB9ox+xs4lc9mRxtLpZo2Mv+ZuhF79FCJ0psh4cjlnitSnPx63le7t2e39xo21a8cXuEkAykAxoBOwXbP9z8RbHm4s/MYMHpjoUCuvX12X2Ti7BB1e93fL4oWfeTknnS4CzZDgnBvZs+BTxs2Hg+sJA/PAJOEmZ03GJPIA13OrC2EfhnBcH9/eE1TEz8uXcqJXO7CeLM+ThjGPrevgOP95qD57nrV3+9wCNHld538oPG9P077p4u+fE+oBOTNrA84a2an/JR/BlGKogArhcL3aL7pJg7/9dclY83J2eee0j3qSHUcGnbDb6TD9BKHax224ZEvGj7/bVd2Z2+KurwZZ5FOC3qy6XTvxORksTxb44ZV97Ft48YEjplD2dKwJbNiYsVLTWHTE3syu3e+uPj5TXk31OHkBj2zwqm6urHWYpF0XR1H29pqtj93p0pgYbCw2Ol3vp6JMpsPp4/kc5ncoN81XGxsuRlJPDgwwPeDgzO2/w/IRTXCFJZFPwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyODo1OSswMDowMDPIuVsAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjM6MTA6MTMrMDA6MDAaVk9UAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAgCAYAAACLmoEDAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5wUZACIpx2TIswAABihJREFUWMO1mF9sW2cVwH/n+6597aRVbLykf0S0iiJGpwLSGkGHtAcmQOINDWlIEw9DvIAmTeKhoAnxgHhCCFVa1UIRDxBEkaZ1He2YUCnQDalUqdextmvnpUs60sVxbMdO4tROfO93eMhNadO4vXbLka6u7v3uOefn853zfeez0KMUCgWazSbOOWZnZyWXyz0EDIhICvBUNRCRFlDPZDLVubk5tdbi+z67d+/uyafXK+z8/Dy7du2SQqHwaC6Xexx4AvgcsBXYBDSAGeCder3+pjHm7NDQ0OVSqaS9+pRelPL5PM65rcaYp4FngC9s9J3q/7hE5CxwREReUtXSyMjI/xd2bGwMa62o6iOq+kPgaaBP5N5mVBURuQG8BPxMVQvGGN2zZ09s/12lQRiGYoz5JPBT4OsiEls/+kF9qvotEekTkR+JyAdA7LQw3UTV87yMqj7fLeg6aE9VnwKeV9VMPp+PrRsbVkQs8CTwLPdRmGvAwLdV9UlVtQ8UNiqoLPAcq5V+h6gqqopz7ua19q6DbAK+a63Njo2NxYKNGyFjjPmsiHy+Eyig/f39MwMDA9bzvEwQBPX5+flwaWlpq6pKhyJ8PAzDzwCniZG7sWBV1QBfUVV/vdMI1GUymbnh4WF83+8HLNCfy+UWpqamqvV6PbcRsKr6wJdF5J9AcM+IxY0s8GgEcYekUqn57du3L/q+vwW4Cev7/pbofb2DXQvsjssRK7JRSLbSYV1OJpPpdDptN3Bq0un0x3zf95eXlzc0DWwh5nrfTVWnNnoZLfZep6QUEV9EbPTd+jGAdFyA2EsXMN8BhiAIGkEQVDYaD4KgEgTBUqddTlXrd1kxuodVVaeq40C40Xiz2UyVy2Wnqovr9BbL5bI2m81O0QtF5H0RcXE44qaBA86o6jPR5nBbZJ1zqVKptCUMw6nBwcG6MWbQOVcul8srlUpl2DmX3CiyqtoGzkb2Hwysqjpr7T+cc9PAJ9aPR6mQLJVKOyqVCqxW+fYwDFFV2ykFRGQa+HsYhrFg4+ashmFYBI50ioKIoKo2CAIbBAFBENi7gUZ2/gDMiEispI3dIkbt4adU9XfA3rh6d5F/WWuffWHfvvcL4+MYB6EzWOtwRhCgr9XiiZkZftktLMC5c+cSIvIUsB/Y1iulqhYXFhZe+MG+fccXqtVEAJ5xmNAZY60LnREnsJJutW7sml9oXRgcYlvCddc9iUgbOAE8BnwfSHQBuFaM7uKFC4WDL76YrdVq37TGeAYMBrFmtccwq32Ca/mp4O3BVM3Au8VQxrs+1kT95w7gV8BXu52d69evTxw+dOi1K5cv1z3PE73NQPSkGt0EwAk0HfrXbjYFAKKz04equl9VJ7vRXVxcrJ86efJM4b33atZajUAcNy9ZvYs4ECeiTgRRtA/VTNewEbA2m81TwEFVvRFHJwiC4Hw+nz918uSkiBDn3AYiqIqKTKsx4z3BAjQajVBEfisir3KXXnStAZ+cmLhy9OWX32632y4GqABGoQW8Y+B1k0p91PPxZGhoiGQyWVtZWfm5qn4aeGwjCBFhbm6u9Kdjx87MFIs37vxGBYSoPVAEx+psXUWkAEzV0unGQLvdVSNzm4yMjNBut1VVLwRBsN85t7gWyVvvK8vLy2+ePn3mrXy+dMv0r06vYlQFVANgCbim8Dfreb9X+MvXrl27AjSG63Umrl7t7U+OWyWfzzM9PZ3NZrM/8X3/e8YYb22ZUtXw3+fPn/v14cNvVCuVljFGAInGV4AlVWqCfihixkMoqxA0q9WwP5sFa/lgYuKmr/s6pa5FeHR0tC4iv8lkMntSqdQX16a6WCz+57UTJ94qz862rLU2alxqIjILFEVkykt4H6G0nQuQdqh4locefphLFy/emVL3C7smx48fJ5FIfCObzR7wPG9bo9FYfPWVV14/dvTou14iURMoonpdYaYvlSo1l5dbIoJNJPj43r2cGh29p48HBgtw4MCB1M6dO3+8efPm71y6eOmNw4cOHllYXJw0IlUrUp9KJpe2tVr4ySSXx8e7tn/faXCrZDKZVqlU+kUymfzj5ORkbbpYrJpqtbVpxw5UlS9VKvy5Wu3Z/n8BcY8RVtNG93EAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjg6NTkrMDA6MDAzyLlbAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIzOjEwOjQwKzAwOjAwY15brQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAASUVORK5CYII=\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAgCAYAAACLmoEDAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5wUZACIpx2TIswAABjJJREFUWMO1mE1sFOcZx3//d9beXePixQvCpFSp0qopNGlFKlGn2EhF5VIulSqlUsQhqDduPfClqqdeiEJPPeTApY1UKuVUCcIhaikpBrxRKEmJ7RrMR7CNd8GuP3a9O/bszNPDrhE4Xjy7oY80GmneeZ/nN8/832eed0SLduLECaIoAqCtrU1BEGw2sy5JKSBhZlVJPjCXyWRmZmZmLIoiisUip0+fbilmolXYarVKKpXS0tLSziAIXgf6gR8APUAnUALywGdzc3P/dM4NDgwMDO/du9dajalWJh09ehQz65H0hqQ3gR+ZGdLT7sye4hoEzpjZ+2ZWOHXq1P8X9siRIwCS9DJwDHhDUkfc+WZWBt6Pouht59yoc85OnjwZO36zMhDwbeB3kn7e7HxJHWZ20DnXIek3zrnbQGxZeE1mdZOk48BBSS3pXZKrvxnPzAb7+/v9gYGBWHNdE3E8YB/wVqugT1gCOATsM7PYCYt14/HjxwGykt4BXl69kKC2mMyMMAyJouhxWatncy237UC3c+6Dvr6+cpzsxs2Qk/R9YPdag/VKYNu3b8/v2LHDS6fTmUqlMjcyMhJOTEz0mJkaAL9uZq8CF4mh3ViwZuaA/UByLVAg2rlz538PHDhANpvdQO2Nbdi1a9fCuXPnZoaHh7MNgJNm9lPgElBdN2NxYc1sJ2vIxszIZrPz+/fvL2az2a3AY9hsNru1fn1uVc1dMc/MXqknY12LdZNq1sMaddnM6O7uTvf09GTX8Oe2bdvW3d3dnW4AK0lbG2lktTWzqlMNn9i5RKOAkpLOuWct5HRcgGZK13yjgXK5XKpUKtMNxqYXFxcX1xqrV5BGEmkZNgJuAeGXHDhHPp9P5XK5KIqi4lOToqg4ODhohUIh7dyaoULgZt3/uhZXBhFwBXiTVYtMEkEQpC5evLi1UqmM7969ey6VSm3xff9RLpdbzuVy3wiCoL2BSgJqDc7zhZX0DzN7ALy0elASlUql/dKlS98cHBzEOedFUfRCEASEYeg9Y/08AC6YWSzYuDIwM5sCzjTKgiTCMPR83/fK5TK+73vrgEaS/kyt540l2tgt4rFjxwC+A/wJ6I077xl2VdJbFz788OajmRlcBGHk8LyIyAkBHb5Pfz7Pu/UJsZuIy5cvs2fPngVJ88Ae4GutUprZ1NLS0tvnzp69XikWN0bQJaPLTBnnrNOkTkEyUa3SEUZh9YWv65XNG5vrniQFwFngNTP7taS2FkCjQj4/+kkutynw/V86KeHA4ZDnDMBcTRaRn0xVr29JzToYmgp1K3ZmV7Lb19cXAGOSvgd8iyZ3G8WFhbv//vTTSwvz83LObTRpg6SO2mG1s9kGiU7QRsRmxEshlJqCfQJ4HngE7DGzTTG/liwvLc3dGh39+8T4+ANJSDLVslg/VDtLBjKp1v0Y1oZZoWnYFeB9+/bdq1arDuiPI4coiqqTExNXhoeGblitBYsRScJMJj0wKdfM5/Ypy2QyoZn9UdJfWaf0mBmzs7Mjw8PD18MwjGKACnAGPvCZg/MulZpseXsyOTlJV1fXbLlcfsfMvgu81gjC9/3CzZGRK4vFYnmNRxGIentgiIjaLngMaRQYn02nS11BEL90rbarV6/S29uLmT2MomgR2C8pufL/YOUcVqtLd27fvnBnbOwOPN7i1F4vciCEVUEVYNLEJ4lE4mIURUM/++KL/Fgms7xlcZGR+/dbhwUYGBigr6/PSqXSuOd5m5xzP5TkngAOHxYK14Y///xfQRBU622kq+8aAokFYEpww8l9FEk5k+4vTk8X29Pp6lg2y+1798iXSo+18ZXt0KFD6ujoeDWZTL6bSCR+vCKH4sLC3evXrp0v5PPTkjxqjcuspIfAlKRxL5GYxAiiqEoYhGYJj47OTj6/ceNLcZ4LLMDhw4dxzv0inU7/wTm3bXl5ufifoaHzoyMjQ87zZoEpzCYM8h2pVKGytORLwmtrY3tvL3977711Yzw3WICDBw+mMpnMb5PJ5K8eFgofXfv44zNLy8t3BTOeNDfe3r64zfdJtrczfOtW0/6/6s+KpyyZTPqlUun3nuf9ZW5ufnaxXJ6JJif95IsvYmb8ZHqaD2ZmWvb/PzZaBDRi9tDdAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI4OjU5KzAwOjAwM8i5WwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMzoxMTowMCswMDowMAjWPmkAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n }\n ]\n};\n\nexport default MarkersOther;\n","import Logger from \"../../Utils/LoggerByDefault\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar logger = Logger.getLogger(\"DrawingDOM\");\n\n/**\n * DrawingDOM\n * @type {Object}\n */\nvar DrawingDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPdrawing\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show mouse position control\n *\n * @returns {DOMElement} DOM element\n */\n _createShowDrawingPictoElement : function () {\n var self = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowDrawingPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowDrawingPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-drawing fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", this.options.labels.control);\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n\n // gestionnaire d'evenement :\n // on ouvre le menu de saisie de saisie\n // L'ouverture/Fermeture permet de faire le menage\n // (reinitialisation)\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowDrawingClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowDrawingClick(e);\n });\n }\n\n return button;\n },\n\n /**\n * Drawing panel\n *\n * @returns {DOMElement} DOM element\n */\n _createDrawingPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPdrawingPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n return dialog;\n },\n\n _createDrawingPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n _createDrawingToolsDivSections : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__content fr-modal__content\";\n return div;\n },\n\n // ################################################################### //\n // ####################### Panel container ########################### //\n // ################################################################### //\n\n /**\n * Creates drawing Panel header DOM structure\n * @returns {DOMElement} DOM element\n */\n _createDrawingPanelHeaderElement : function () {\n /*\n *
\n *
Annoter la carte
\n *
\n *
\n */\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header fr-m-1w\";\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = this.options.controlLabel || \"Annoter la carte\";\n container.appendChild(divTitle);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPdrawingPanelClose\");\n divClose.className = \"GPpanelClose GPdrawingPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n var dtObj = this;\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n document.getElementById(dtObj._addUID(\"GPshowDrawingPicto\")).click();\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n document.getElementById(dtObj._addUID(\"GPshowDrawingPicto\")).click();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n\n /**\n * Creates drawing tools section.\n *\n * @returns {DOMElement} DOM element\n */\n _createDrawingToolsSections : function () {\n var tools = [];\n\n this.dtOptions = {};\n if (this.options.tools.points) {\n this.dtOptions.points = {\n label : this.options.labels.points,\n active : false,\n panel : \"draw\",\n id : \"point\"\n };\n }\n if (this.options.tools.lines) {\n this.dtOptions.lines = {\n label : this.options.labels.lines,\n active : false,\n panel : \"draw\",\n id : \"line\"\n };\n }\n if (this.options.tools.polygons) {\n this.dtOptions.polygons = {\n label : this.options.labels.polygons,\n active : false,\n panel : \"draw\",\n id : \"polygon\"\n };\n }\n if (this.options.tools.holes) {\n this.dtOptions.holes = {\n label : this.options.labels.holes,\n active : false,\n panel : \"draw\",\n id : \"holes\"\n };\n }\n if (this.options.tools.text) {\n this.dtOptions.text = {\n label : this.options.labels.text,\n active : false,\n panel : \"draw\",\n id : \"text\"\n };\n }\n if (this.options.tools.edit) {\n this.dtOptions.edit = {\n label : this.options.labels.edit,\n active : false,\n panel : \"edit\",\n id : \"edit\"\n };\n }\n if (this.options.tools.display) {\n this.dtOptions.display = {\n label : this.options.labels.display,\n active : false,\n panel : \"edit\",\n id : \"display\"\n };\n }\n if (this.options.tools.tooltip) {\n this.dtOptions.tooltip = {\n label : this.options.labels.tooltip,\n active : false,\n panel : \"edit\",\n id : \"tooltip\"\n };\n }\n if (this.options.tools.remove) {\n this.dtOptions.remove = {\n label : this.options.labels.remove,\n active : false,\n panel : \"edit\",\n id : \"remove\"\n };\n }\n // ajout drawing tools\n if (this.dtOptions.points ||\n this.dtOptions.lines ||\n this.dtOptions.polygons ||\n this.dtOptions.text) {\n tools.push(this._createDrawingToolSection(this.options.labels.creatingTools, \"draw\"));\n }\n // ajout editing tools\n if (this.dtOptions.edit ||\n this.dtOptions.display ||\n this.dtOptions.tooltip ||\n this.dtOptions.remove) {\n tools.push(this._createDrawingToolSection(this.options.labels.editingTools, \"edit\"));\n }\n // ajout export tools\n if (this.options.tools.export) {\n tools.push(this._createSavingSection(\n this.options.labels.export,\n this.options.labels.exportTitle\n ));\n }\n\n return tools;\n },\n\n /**\n * Creates drawing tool section DOM structure.\n *\n * @param {String} sectionLabel - section title\n * @param {String} panelType - Drawing (\"draw\") or editing (\"edit\") tools panel\n * @returns {DOMElement} DOM element\n */\n _createDrawingToolSection : function (sectionLabel, panelType) {\n /*\n * Exemple panelType == \"draw\"\n *\n *
\n *

Outils de création

\n *
    \n *
  • \n *
  • \n *
  • \n *
  • \n *
\n *
\n */\n var container = document.createElement(\"div\");\n container.className = \"drawing-tool-section fr-m-1w\";\n\n var p = document.createElement(\"p\");\n p.className = \"drawing-tool-section-title fr-m-1w\";\n p.innerHTML = sectionLabel;\n container.appendChild(p);\n\n var ul = document.createElement(\"div\");\n ul.className = \"drawing-tools-flex-display fr-m-1w\";\n var context = this;\n // li click handler function\n function liClickHandler (e) {\n /* jshint validthis: true */\n // this == elem clicked\n context._handleDOMToolClick(e, this.id, context);\n context._handleToolClick(e, this.id, context);\n }\n for (var type in this.dtOptions) {\n if (this.dtOptions[type].panel !== panelType) {\n continue;\n }\n var li = document.createElement(\"button\");\n li.className = \"drawing-tool fr-m-1w fr-btn fr-btn--tertiary gpf-btn--tertiary\";\n li.id = this._addUID(\"drawing-tool-\" + this.dtOptions[type].id);\n li.title = this.dtOptions[type].label;\n li.addEventListener(\"click\", liClickHandler);\n ul.appendChild(li);\n }\n container.appendChild(ul);\n\n return container;\n },\n\n /**\n * Creates drawing tool section DOM structure.\n *\n * @param {String} buttonLabel - Button label\n * @param {String} buttonTitle - Button title\n * @returns {DOMElement} DOM element\n */\n _createSavingSection : function (buttonLabel, buttonTitle) {\n /*\n *
\n * \n *
\n */\n var container = document.createElement(\"div\");\n container.className = \"drawing-tool-section drawing-tools-flex-display fr-m-1w\";\n\n var button = document.createElement(\"button\");\n button.title = buttonTitle;\n button.className = \"tool-form-submit drawing-button fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w\";\n button.id = this._addUID(\"drawing-export\");\n button.setAttribute(\"type\", \"button\");\n button.textContent = buttonLabel;\n var context = this;\n /** export function */\n button.onclick = function () {\n context.onExportFeatureClick();\n };\n container.appendChild(button);\n\n return container;\n },\n\n /**\n * Creates input for color choosing\n *\n * @param {Object} options - options\n * @param {String} options.defaultValue - defaultValue\n * @param {String} options.className - input className\n * @returns {DOMElement} - created li element\n */\n _createMarkersChooser : function (options) {\n var li = document.createElement(\"div\");\n li.className = options.className;\n for (var i = 0; i < this.options.markersList.length; i++) {\n // radio bouton pour la selection\n var inputElem = document.createElement(\"input\");\n inputElem.type = \"radio\";\n inputElem.name = \"marker\";\n inputElem.id = this._addUID(\"marker-\" + i);\n inputElem.value = this.options.markersList[i].src;\n inputElem.className = \"marker-input-radio\";\n if (options.defaultValue === inputElem.value) {\n inputElem.checked = true;\n }\n li.appendChild(inputElem);\n // label pour l'affichage du marker\n var labelElem = document.createElement(\"label\");\n labelElem.className = \"marker-label\"; // utile ?\n labelElem.setAttribute(\"for\", inputElem.id);\n var imgElem = document.createElement(\"img\");\n imgElem.src = inputElem.value;\n labelElem.appendChild(imgElem);\n li.appendChild(labelElem);\n }\n return li;\n },\n\n /**\n * Creates input for color choosing\n *\n * @param {Object} options - options\n * @param {String} options.label - label\n * @param {String} options.type - input type for element (\"color\")\n * @param {String} options.defaultValue - defaultValue\n * @param {String} options.id - input id\n * @param {String} options.title - input title\n * @param {String} options.className - input className\n * @returns {DOMElement} - created li element\n */\n _createStylingElement : function (options) {\n var li = document.createElement(\"div\");\n li.className = options.className;\n var textNode = document.createTextNode(options.label);\n li.appendChild(textNode);\n var inputElem = document.createElement(\"input\");\n try {\n inputElem.type = options.type;\n } catch (e) {\n // ie 11 input type== color ne marche pas...\n inputElem.type = \"text\";\n }\n if (options.type === \"range\") {\n // For DSFR\n li.dataset.frJsRange = \"true\";\n li.title = options.label;\n\n var value = options.defaultValue;\n value = Math.round(((value - options.min) / (options.max - options.min)) * 100);\n li.style.setProperty(\"--progress-right\", value + \"%\");\n\n inputElem.addEventListener(\"change\", (e) => {\n e.target.parentNode.style.setProperty(\"--progress-right\", `${((e.target.value - options.min) / (options.max - options.min)) * 100}%`);\n });\n }\n inputElem.id = options.id;\n inputElem.value = options.defaultValue;\n if (options.title) {\n inputElem.title = options.title;\n }\n // si options.type == \"checkbox\"\n if (options.checked !== undefined) {\n inputElem.checked = options.checked;\n }\n // si options.type == \"range\"\n if (options.min !== undefined) {\n inputElem.min = options.min;\n }\n if (options.max !== undefined) {\n inputElem.max = options.max;\n }\n if (options.step !== undefined) {\n inputElem.step = options.step;\n }\n li.appendChild(inputElem);\n return li;\n },\n\n /**\n * Creates Styling div to include in popup.\n *\n * @param {Object} options - toolId selected\n * @param {String} options.geomType - gemeotryType selected (\"Point\", \"Line\" or \"Polygon\")\n * @param {Object} options.labels - values to title\n * @param {Object} options.initValues - values to init fields\n * @param {Function} options.applyFunc - function called when apply is selected\n * @returns {DOMElement} DOM element created\n */\n _createStylingDiv : function (options) {\n var dialog = document.createElement(\"dialog\");\n dialog.className = \"gp-styling-div gpf-panel fr-modal gpf-visible GPelementVisible\";\n var mainDiv = document.createElement(\"div\");\n mainDiv.className = \"gpf-modal__body fr-modal__body\";\n dialog.appendChild(mainDiv);\n\n // header DSFR\n if (checkDsfr()) {\n var header = document.createElement(\"div\");\n header.className = \"GPpanelHeader gpf-panel__header fr-modal__header fr-m-1w\";\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = \"Modifier le style\";\n header.appendChild(divTitle);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPdrawingStylePanelClose\");\n divClose.className = \"GPpanelClose GPdrawingStylePanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n var dtObj = this;\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n options.applyFunc.call(this, \"cancel\");\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n options.applyFunc.call(this, \"cancel\");\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n header.appendChild(divClose);\n\n mainDiv.appendChild(header);\n }\n\n var div = document.createElement(\"div\");\n div.className = \"gpf-modal__content fr-modal__content\";\n mainDiv.appendChild(div);\n\n var ul = document.createElement(\"div\");\n var li = null;\n /*\n * TODO : finir de remplir la div pour tous les styles éditables.\n */\n var geomType = options.geomType.toLowerCase();\n switch (geomType) {\n case \"point&text\":\n case \"point\":\n li = this._createMarkersChooser({\n className : \"gp-styling-option\",\n // defaultValue : this.options.markersList[0].src\n defaultValue : options.initValues.markerSrc\n });\n ul.appendChild(li);\n li = this._createStylingElement({\n type : \"range\",\n className : \"gp-styling-option fr-range fr-range--sm\",\n label : this.options.labels.markerSize,\n title : \"petit, moyen ou grand\",\n id : this._addUID(\"markerSize\"),\n min : 5,\n max : 15,\n step : 5,\n defaultValue : options.initValues.markerSize * 10\n });\n ul.appendChild(li);\n // EVOL\n // proposer une palette de couleur pour peindre un pictogramme monochrome\n // li = this._createStylingElement({\n // type : \"color\",\n // className : \"gp-styling-option\",\n // label : this.options.labels.markerColor,\n // id : this._addUID(\"markerColor\"),\n // defaultValue : options.initValues.markerColor\n // });\n // ul.appendChild(li);\n if (options.initValues.markerCustom) {\n // FIXME que faire des icones customisés ?\n }\n if (geomType === \"point&text\") {\n li = this._createStylingElement({\n type : \"checkbox\",\n className : \"gp-styling-option\",\n label : this.options.labels.labelDisplay,\n id : this._addUID(\"labelDisplay\"),\n checked : options.initValues.labelDisplay,\n defaultValue : options.initValues.labelDisplay\n });\n ul.appendChild(li);\n }\n break;\n case \"text\":\n li = this._createStylingElement({\n type : \"color\",\n className : \"gp-styling-option\",\n label : this.options.labels.fillColor,\n id : this._addUID(\"fillColor\"),\n defaultValue : options.initValues.fillColor\n });\n ul.appendChild(li);\n li = this._createStylingElement({\n type : \"color\",\n className : \"gp-styling-option\",\n label : this.options.labels.strokeColor,\n id : this._addUID(\"strokeColor\"),\n defaultValue : options.initValues.strokeColor\n });\n ul.appendChild(li);\n li = this._createStylingElement({\n type : \"range\",\n className : \"gp-styling-option\",\n label : this.options.labels.strokeWidth,\n title : \"1 à 10 pixels\",\n id : this._addUID(\"strokeWidth\"),\n min : 1,\n max : 10,\n step : 1,\n defaultValue : options.initValues.strokeWidth\n });\n ul.appendChild(li);\n break;\n case \"line\":\n li = this._createStylingElement({\n type : \"color\",\n className : \"gp-styling-option\",\n label : this.options.labels.strokeColor,\n id : this._addUID(\"strokeColor\"),\n defaultValue : options.initValues.strokeColor\n });\n ul.appendChild(li);\n li = this._createStylingElement({\n type : \"range\",\n className : \"gp-styling-option fr-range fr-range--sm\",\n label : this.options.labels.strokeWidth,\n title : \"1 à 10 pixels\",\n id : this._addUID(\"strokeWidth\"),\n min : 1,\n max : 10,\n step : 1,\n defaultValue : options.initValues.strokeWidth\n });\n ul.appendChild(li);\n break;\n case \"polygon\":\n li = this._createStylingElement({\n type : \"color\",\n className : \"gp-styling-option\",\n label : this.options.labels.strokeColor,\n id : this._addUID(\"strokeColor\"),\n defaultValue : options.initValues.strokeColor\n });\n ul.appendChild(li);\n li = this._createStylingElement({\n type : \"range\",\n className : \"gp-styling-option fr-range fr-range--sm\",\n label : this.options.labels.strokeWidth,\n title : \"1 à 10 pixels\",\n id : this._addUID(\"strokeWidth\"),\n min : 1,\n max : 10,\n step : 1,\n defaultValue : options.initValues.strokeWidth\n });\n ul.appendChild(li);\n li = this._createStylingElement({\n type : \"color\",\n className : \"gp-styling-option\",\n label : this.options.labels.fillColor,\n id : this._addUID(\"fillColor\"),\n defaultValue : options.initValues.fillColor\n });\n ul.appendChild(li);\n li = this._createStylingElement({\n type : \"range\",\n className : \"gp-styling-option fr-range fr-range--sm\",\n label : this.options.labels.fillOpacity,\n title : \"0 (transparent) à 100% (opaque)\",\n id : this._addUID(\"fillOpacity\"),\n min : 0,\n max : 10,\n step : 1,\n defaultValue : options.initValues.fillOpacity * 10\n });\n ul.appendChild(li);\n break;\n default:\n logger.log(\"Unhandled geometry type for styling.\");\n }\n div.appendChild(ul);\n // apply button\n var applyButton = document.createElement(\"input\");\n applyButton.type = \"button\";\n applyButton.className = \"gp-styling-button fr-btn fr-btn--tertiary\";\n applyButton.value = this.options.labels.applyToObject;\n /** click sur applyButton */\n applyButton.onclick = function () {\n options.applyFunc.call(this, \"apply\");\n };\n div.appendChild(applyButton);\n // set default button\n var setDefaultButton = document.createElement(\"input\");\n setDefaultButton.type = \"button\";\n setDefaultButton.value = this.options.labels.setAsDefault;\n setDefaultButton.className = \"gp-styling-button fr-btn fr-btn--tertiary\";\n /** click sur set Default Button */\n setDefaultButton.onclick = function () {\n options.applyFunc.call(this, \"default\");\n };\n div.appendChild(setDefaultButton);\n // cancel Button\n var cancelButton = document.createElement(\"input\");\n cancelButton.type = \"button\";\n // cancelButton.value = \"X\" ;\n cancelButton.className = \"gp-styling-button closer\";\n /** click sur cancel Button */\n cancelButton.onclick = function () {\n options.applyFunc.call(this, \"cancel\");\n };\n div.appendChild(cancelButton);\n return dialog;\n },\n\n /**\n * Creates Text editing div to include in popup.\n *\n * @param {Object} options - options for popup\n * @param {String} options.geomType - gemeotryType selected (\"Point\", \"Line\" or \"Polygon\")\n * @param {String} options.text - text to fill input.\n * @param {String} options.key - property name called when text is to be saved.\n * @param {String} options.measure - measure to fill input.\n * @param {String} options.placeholder - placeholder for text input.\n * @param {String} options.inputId - text input id.\n * @param {Function} options.applyFunc - function called when text is to be saved.\n * @returns {DOMElement} DOM element created\n * @private\n */\n _createLabelDiv : function (options) {\n var popup = document.createElement(\"dialog\");\n popup.className = \"gp-label-div gpf-panel fr-modal gpf-visible GPelementVisible\";\n var mainDiv = document.createElement(\"div\");\n mainDiv.className = \"gpf-modal__body fr-modal__body\";\n popup.appendChild(mainDiv);\n // header DSFR\n if (checkDsfr()) {\n var header = document.createElement(\"div\");\n header.className = \"GPpanelHeader gpf-panel__header fr-modal__header fr-m-1w\";\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = \"Texte de l'annotation\";\n header.appendChild(divTitle);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPdrawingStylePanelClose\");\n divClose.className = \"GPpanelClose GPdrawingStylePanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n var dtObj = this;\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n options.applyFunc.call(this, \"cancel\");\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n options.applyFunc.call(this, \"cancel\");\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n header.appendChild(divClose);\n\n mainDiv.appendChild(header);\n }\n var div = document.createElement(\"div\");\n div.className = \"gpf-modal__content fr-modal__content\";\n mainDiv.appendChild(div);\n var inputLabel = null;\n if (options.geomType === \"Text\") {\n inputLabel = document.createElement(\"input\");\n inputLabel.type = \"text\";\n inputLabel.className = \"gp-input-label-style fr-input\";\n } else {\n inputLabel = document.createElement(\"textArea\");\n inputLabel.rows = 2;\n inputLabel.cols = 40;\n inputLabel.className = \"gp-textarea-att-label-style fr-input\";\n }\n\n if (options.text) {\n inputLabel.value = options.text;\n }\n\n inputLabel.autocomplete = \"off\";\n inputLabel.placeholder = options.placeholder;\n inputLabel.id = options.inputId;\n div.appendChild(inputLabel);\n // keyup\n inputLabel.onkeyup = function (evtk) {\n if (options.geomType === \"Text\" && evtk.keyCode === 13) {\n options.applyFunc.call(this, options.key, inputLabel.value, true);\n }\n if (evtk.keyCode === 27) {\n options.applyFunc.call(this, options.key, inputLabel.value, false);\n }\n };\n\n if (options.measure && options.geomType !== \"Text\") {\n var inputMeasure = document.createElement(\"input\");\n inputMeasure.type = \"text\";\n inputMeasure.readonly = true;\n inputMeasure.className = \"gp-input-measure-style\";\n inputMeasure.value = options.measure;\n div.appendChild(inputMeasure);\n }\n\n if (options.geomType !== \"Text\") {\n // apply button\n var applyButton = document.createElement(\"input\");\n applyButton.type = \"button\";\n applyButton.className = \"gp-styling-button fr-btn fr-btn--tertiary\";\n applyButton.value = this.options.labels.saveDescription;\n /** click sur applyButton */\n applyButton.onclick = function () {\n options.applyFunc.call(this, options.key, inputLabel.value, true);\n };\n div.appendChild(applyButton);\n // cancel Button\n var cancelButton = document.createElement(\"input\");\n cancelButton.type = \"button\";\n cancelButton.className = \"gp-styling-button closer\";\n /** click sur cancel Button */\n cancelButton.onclick = function () {\n options.applyFunc.call(this, options.key, inputLabel.value, false);\n };\n div.appendChild(cancelButton);\n }\n\n return popup;\n },\n\n /**\n * Handles drawing tool selection from a DOM point of view.\n *\n * @param {Event} e - DOM Event\n * @param {String} toolId - toolId selected\n * @param {DrawingDOM} context - Drawing control instance\n */\n _handleDOMToolClick : function (e, toolId, context) {\n for (var availType in context.dtOptions) {\n var availToolId = context._addUID(\"drawing-tool-\" + context.dtOptions[availType].id);\n var li = document.getElementById(availToolId);\n // ce n'est pas l'outil selectionne : on le desactive (s'il ne l'était pas déjà).\n if (availToolId !== toolId) {\n li.className = \"drawing-tool fr-m-1w fr-btn fr-btn--tertiary gpf-btn--tertiary\";\n context.dtOptions[availType].active = false;\n continue;\n }\n // ici, c'est le l'outil selectionne\n if (context.dtOptions[availType].active) {\n li.className = \"drawing-tool fr-m-1w fr-btn fr-btn--tertiary gpf-btn--tertiary\";\n } else {\n li.className = \"drawing-tool drawing-tool-active fr-m-1w fr-btn fr-btn--tertiary gpf-btn--tertiary\";\n }\n context.dtOptions[availType].active = !context.dtOptions[availType].active;\n }\n }\n\n};\n\nexport default DrawingDOM;\n","// import CSS\nimport \"../../CSS/Controls/Drawing/GPFdrawing.css\";\n// import \"../../CSS/Controls/Drawing/GPFdrawingStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\nimport Collection from \"ol/Collection\";\nimport Overlay from \"ol/Overlay\";\nimport { transform as olTransformProj } from \"ol/proj\";\nimport VectorSource from \"ol/source/Vector\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport {\n Fill,\n Icon,\n Stroke,\n Style,\n Text,\n Circle\n} from \"ol/style\";\nimport {\n LineString,\n LinearRing,\n Point,\n Polygon,\n MultiLineString,\n MultiPoint,\n MultiPolygon\n} from \"ol/geom\";\nimport {\n Select as SelectInteraction,\n Modify as ModifyInteraction,\n Draw as DrawInteraction\n} from \"ol/interaction\";\nimport {\n singleClick as eventSingleClick,\n pointerMove as eventPointerMove\n} from \"ol/events/condition\";\nimport {\n getArea as olGetAreaSphere,\n getDistance as olGetDistanceSphere\n} from \"ol/sphere\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Interactions from \"../Utils/Interactions\";\nimport MarkersOther from \"../Utils/MarkersOther\";\nimport Draggable from \"../../Utils/Draggable\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Color from \"../../Utils/ColorUtils\";\n// DOM\nimport DrawingDOM from \"./DrawingDOM\";\n// import local with ol dependencies\nimport KMLExtended from \"../../Formats/KML\";\nimport GeoJSONExtended from \"../../Formats/GeoJSON\";\nimport GPXExtended from \"../../Formats/GPX\";\nimport LayerSwitcher from \"../LayerSwitcher/LayerSwitcher\";\n\nvar logger = Logger.getLogger(\"Drawing\");\n\n/**\n * @classdesc\n *\n * Drawing Control.\n *\n * @constructor\n * @alias ol.control.Drawing\n * @type {ol.control.Drawing}\n * @extends {ol.control.Control}\n * @param {Object} options - options for function call.\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {Boolean} [options.collapsed = true] - Specify if Drawing control should be collapsed at startup. Default is true.\n * @param {Boolean} [options.draggable = false] - Specify if widget is draggable\n * @param {Object} [options.layer = {}] - Openlayers layer that will hosts created features. If none, an empty vector layer will be created.\n * @param {Object} [options.popup = {}] - Popup informations\n * @param {Boolean} [options.popup.display = true] - Specify if popup is displayed when create a drawing\n * @param {Function} [options.popup.function] - Function to display popup informations if you want to cutomise it. You may also provide your own function with params : {geomType / feature / saveFunc(message) / closeFunc()}. This function must return the DOM object of the popup content.\n * @param {Object} [options.layerDescription = {}] - Layer informations to be displayed in LayerSwitcher widget (only if a LayerSwitcher is also added to the map)\n * @param {String} [options.layerDescription.title = \"Croquis\"] - Layer title to be displayed in LayerSwitcher\n * @param {String} [options.layerDescription.description = \"Mon croquis\"] - Layer description to be displayed in LayerSwitcher\n * @param {Object} options.tools - Tools to display in the drawing toolbox. All by default.\n * @param {Boolean} [options.tools.points = true] - Display points drawing tool\n * @param {Boolean} [options.tools.lines = true] - Display lines drawing tool\n * @param {Boolean} [options.tools.polygons = true] - Display polygons drawing tool\n * @param {Boolean} [options.tools.holes = false] - Display polygons with holes drawing tool\n * @param {Boolean} [options.tools.text = true] - Display text drawing tool\n * @param {Boolean} [options.tools.remove = true] - Display feature removing tool\n * @param {Boolean} [options.tools.display = true] - Display style editing tool\n * @param {Boolean} [options.tools.tooltip = true] - Display text editing tool\n * @param {Boolean} [options.tools.edit = true] - Display editing tool\n * @param {Boolean} [options.tools.export = true] - Display exporting tool\n * @param {Boolean} [options.tools.measure = false] - Display measure drawing into popup info\n * @param {String} [options.labels] - Labels for Control\n * @param {String} [options.labels.control] - Label for Control\n * @param {String} [options.labels.points] - Label for points drawing tool\n * @param {String} [options.labels.lines] - Label for lines drawing tool\n * @param {String} [options.labels.polygons] - Label for polygons drawing tool\n * @param {String} [options.labels.holes] - Label for polygons with holes drawing tool\n * @param {String} [options.labels.text] - Label for text drawing tool\n * @param {String} [options.labels.edit] - Label for editing tool\n * @param {String} [options.labels.display] - Label for style editing tool\n * @param {String} [options.labels.tooltip] - Label for text editing tool\n * @param {String} [options.labels.remove] - Label for feature removing tool\n * @param {String} [options.labels.export] - Label for exporting tool.\n * @param {String} [options.labels.exportTitle] - Title for exporting tool.\n * @param {String} [options.labels.applyToObject] - Label for apply to object button.\n * @param {String} [options.labels.saveDescription] - Label for save description button.\n * @param {String} [options.labels.setAsDefault] - Label for set as default style button.\n * @param {String} [options.labels.strokeColor] - Label for stroke color.\n * @param {String} [options.labels.strokeWidth] - Label for stroke width.\n * @param {String} [options.labels.fillColor] - Label for fill color.\n * @param {String} [options.labels.fillOpacity] - Label for fillOpacity.\n * @param {String} [options.labels.markerSize] - Label for markerSize.\n * @param {Array.} [options.markersList = [{\"src\" : \"data:image/png;base64,xxxx\", \"anchor\" : [0.5,1]}]] - List of markers src to be used for points with their anchor offsets See {@link http://openlayers.org/en/latest/apidoc/ol.style.Icon.html OpenLayers params} for anchor offset options.\n * @param {Object} options.defaultStyles - Default styles applying to geometries (labels, lines and polygons).\n * @param {String} [options.defaultStyles.textFillColor = \"#000000\"] - Text fill color for labels (RGB hex value).\n * @param {String} [options.defaultStyles.textStrokeColor = \"#FFFFFF\"] - Text surrounding color for labels (RGB hex value).\n * @param {String} [options.defaultStyles.strokeColor = \"#ffcc33\"] - Stroke color (RGB hex value).\n * @param {Number} [options.defaultStyles.strokeWidth = 2] - Stroke width in pixels.\n * @param {String} [options.defaultStyles.polyStrokeColor = \"#ffcc33\"] - Stroke color (RGB hex value) for polygons.\n * @param {Number} [options.defaultStyles.polyStrokeWidth = 2] - Stroke width in pixels for polygons.\n * @param {String} [options.defaultStyles.polyFillColor = \"#ffffff\"] - Polygons fill color (RGB hex value).\n * @param {Number} [options.defaultStyles.polyFillOpacity = 0.2] - Polygon fill opacity (alpha value between 0:transparent and 1:opaque).\n * @param {Object} options.cursorStyle - cursor (circle) style when drawing or editing.\n * @param {String} [options.cursorStyle.fillColor = \"rgba(0, 153, 255, 1)\"] - Cursor fill color.\n * @param {String} [options.cursorStyle.strokeColor = \"#FFF\"] - Cursor stroke color.\n * @param {String} [options.cursorStyle.strokeWidth = 1] - Cursor surrounding stroke width.\n * @param {String} [options.cursorStyle.radius = 6] - Cursor radius.\n * @example\n * var drawing = new ol.control.Drawing({\n * collapsed : false,\n * draggable : true,\n * layerswitcher : {\n * title : \"Dessins\",\n * description : \"Mes dessins...\"\n * },\n * markersList : [{\n * src : \"http://api.ign.fr/api/images/api/markers/marker_01.png\",\n * anchor : [0.5, 1]\n * }],\n * defaultStyles : {},\n * cursorStyle : {},\n * tools : {\n * points : true,\n * lines : true,\n * polygons :true,\n * holes : true,\n * text : false,\n * remove : true,\n * display : true,\n * tooltip : true,\n * export : true,\n * measure : true\n * },\n * popup : {\n * display : true,\n * function : function (params) {\n * var container = document.createElement(\"div\");\n * // - params.geomType;\n * // - params.feature;\n * // Les 2 fonctions ferment la popup avec ou sans sauvegarde des informations\n * // dans les properties de la feature (key : description)\n * // - params.saveFunc(message);\n * // - params.closeFunc();\n * return container;\n * }\n * });\n */\nvar Drawing = class Drawing extends Control {\n\n /**\n * See {@link ol.control.Drawing}\n * @module Drawing\n * @alias module:~controls/Drawing\n * @param {*} options - options\n * @example\n * import Drawing from \"gpf-ext-ol/controls/Drawing\"\n * ou\n * import { Drawing } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof Drawing)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"Drawing\";\n\n this._initialize(options);\n\n // init control DOM container\n this._container = this._initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n }\n\n /**\n * Default tools to display for widget\n *\n * @private\n */\n static DefaultTools = {\n points : true,\n lines : true,\n polygons : true,\n holes : false,\n text : true,\n remove : true,\n display : true,\n tooltip : true,\n edit : true,\n export : true,\n measure : false\n };\n\n /**\n * Default labels for widget\n *\n * @private\n */\n static DefaultLabels = {\n control : \"Annoter la carte\",\n creatingTools : \"Outils de création\",\n points : \"Placer des points\",\n lines : \"Dessiner des lignes\",\n polygons : \"Dessiner des polygones\",\n holes : \"Créer des trous sur un polygone\",\n text : \"Ecrire sur la carte\",\n editingTools : \"Outils d'édition\",\n edit : \"Editer les tracés\",\n display : \"Modifier l'apparence des objets\",\n tooltip : \"Modifier les textes / infos-bulles\",\n remove : \"Supprimer des objets\",\n export : \"Exporter\",\n exportTitle : \"Exporter en KML\",\n applyToObject : \"Appliquer à l'objet\",\n saveDescription : \"Enregistrer\",\n setAsDefault : \"Définir par défaut\",\n strokeColor : \"Couleur du trait : \",\n strokeWidth : \"Epaisseur du trait : \",\n fillColor : \"Couleur de remplissage : \",\n fillOpacity : \"Opacité du remplissage : \",\n markerSize : \"Taille du pictogramme : \",\n markerColor : \"Couleur du pictogramme : \",\n labelDisplay : \"Afficher le label : \"\n };\n\n /**\n * Default styles applyied to drawn features.\n *\n * @private\n */\n static DefaultStyles = {\n textFillColor : \"#000000\",\n textStrokeColor : \"#FFFFFF\",\n textStrokeWidth : 6,\n // INFO : cette option n'est pas surchargeable via les options du constructeur !\n textIcon1x1 : {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNiYAAAAAkAAxkR2eQAAAAASUVORK5CYII=\",\n anchor : [0, 0]\n },\n polyFillColor : \"#ffffff\",\n polyFillOpacity : 0.4,\n polyStrokeColor : \"#ffcc33\",\n polyStrokeWidth : 4,\n strokeColor : \"#ffcc33\",\n strokeWidth : 4,\n markerSize : 1,\n markerColor : \"#ffcc33\",\n // INFO : cette option n'est pas surchargeable via les options du constructeur !\n labelDisplay : true\n };\n\n /**\n * Default styles when drawing\n *\n * @private\n */\n static DefaultCursorStyle = {\n radius : 6,\n strokeColor : \"#FFF\",\n strokeWidth : 1,\n fillColor : \"rgba(0, 153, 255, 1)\"\n };\n\n /**\n * Overload of {@link http://openlayers.org/en/latest/apidoc/ol.control.Control.html#setMap ol.control.Control.setMap()} method, called when control is added to or removed from map.\n *\n * @param {Object} map - {@link http://openlayers.org/en/latest/apidoc/ol.Map.html ol.Map} object.\n */\n setMap (map) {\n // call original setMap method\n super.setMap(map);\n\n if (this.getMap() && this.eventKey) {\n olObservableUnByKey(this.eventKey);\n }\n\n // nothing else to do if map == null\n if (map == null) {\n return;\n }\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this._drawingPanel,\n this._drawingPanelHeader,\n map.getTargetElement()\n );\n }\n\n // mode \"collapsed\"\n if (!this.collapsed) {\n this._showDrawingButton.setAttribute(\"aria-pressed\", true);\n }\n\n if (this.layer) {\n // ajout du layer de dessin à la carte s'il n'y est pas déjà\n this.setLayer(this.layer);\n }\n\n // gestion des suppressions \"externes\" de la couche de dessin.\n this.eventKey = this.getMap().getLayers().on(\"remove\", (evtRm) => {\n if (evtRm.element === this.layer) { // FIXME object comparison\n // found layer removed.\n this.layer = null;\n // on supprime l'interaction en cours si besoin\n if (this.interactionCurrent) {\n this.getMap().removeInteraction(this.interactionCurrent);\n this.interactionCurrent = null;\n }\n }\n });\n }\n\n /**\n * Export features of current drawing layer (KML by default).\n *\n * @returns {String} a representation of drawn features (KML, GPX or GeoJSON) or null if not possible.\n */\n exportFeatures () {\n var result = null;\n if (Control.prototype.getMap.call(this) == null) {\n logger.log(\"Impossible to export : control isn't attached to any map.\");\n return result;\n }\n if (!this.layer) {\n logger.log(\"Impossible to export : no layer is hosting features.\");\n return result;\n }\n if (!this.layer.getSource() ||\n !this.layer.getSource().getFeatures() ||\n !this.layer.getSource().getFeatures().length) {\n logger.log(\"Impossible to export : no features found.\");\n return result;\n }\n\n // on invalide les features...\n if (this.featuresCollectionSelected) {\n this.featuresCollectionSelected.clear();\n }\n\n var ClassName = null;\n switch (this.getExportFormat()) {\n case \"KML\":\n ClassName = new KMLExtended({\n writeStyles : true\n });\n break;\n case \"GPX\":\n ClassName = new GPXExtended({\n // readExtensions : function (ext) {/* only extensions nodes from wpt, rte and trk can be processed */ }\n });\n break;\n case \"GEOJSON\":\n ClassName = new GeoJSONExtended({});\n break;\n default:\n break;\n }\n\n if (!ClassName) {\n logger.log(\"Impossible to export : format unknown !?\");\n return result;\n }\n\n var featProj = this.layer.getSource().getProjection();\n featProj = featProj || this.getMap().getView().getProjection();\n\n result = ClassName.writeFeatures(this.layer.getSource().getFeatures(), {\n dataProjection : \"EPSG:4326\",\n featureProjection : featProj\n });\n\n return result;\n }\n\n // ################################################################### //\n // #################### user interface methods ####################### //\n // ################################################################### //\n\n /**\n * Collapse or display control main container\n *\n * @param {Boolean} collapsed - True to collapse control, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.error(\"[ERROR] Drawing:setCollapsed - missing collapsed parameter\");\n return;\n }\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n // on simule l'ouverture du panneau après un click\n this.onShowDrawingClick();\n this._showDrawingButton.click();\n }\n\n /**\n * Setter for Export Name.\n *\n * @param {String} name - Export Name. By default, \"Croquis\".\n */\n setExportName (name) {\n this._exportName = name;\n }\n\n /**\n * getter for Export Name.\n *\n * @returns {String} export name\n */\n getExportName () {\n return this._exportName;\n }\n\n /**\n * Setter for Export format (KML, GPX or GeoJSON).\n *\n * @param {String} format - Export format. By default, \"KML\".\n */\n setExportFormat (format) {\n this._exportFormat = (format) ? format.toUpperCase() : \"KML\";\n switch (format.toUpperCase()) {\n case \"KML\":\n this._exportExt = \".kml\";\n this._exportMimeType = \"application/vnd.google-earth.kml+xml\";\n break;\n case \"GPX\":\n this._exportExt = \".gpx\";\n this._exportMimeType = \"application/gpx+xml\";\n break;\n case \"GEOJSON\":\n this._exportExt = \".geojson\";\n this._exportMimeType = \"application/geo+json\";\n break;\n default:\n // redefine format by default !\n this._exportFormat = \"KML\";\n break;\n }\n }\n\n /**\n * getter for Export format.\n *\n * @returns {String} export format\n */\n getExportFormat () {\n return this._exportFormat;\n }\n\n /**\n * Sets vector layer to hosts feature.\n *\n * @param {ol.layer.Vector} vlayer - vector layer\n */\n setLayer (vlayer) {\n if (!vlayer) {\n this.layer = null;\n return;\n }\n\n if (!(vlayer instanceof VectorLayer)) {\n logger.log(\"no valid layer given for hosting drawn features.\");\n return;\n }\n\n // ajout du layer de dessin à la carte s'il n'y est pas déjà\n var layers = this.getMap().getLayers();\n if (layers) {\n var found = false;\n layers.forEach((mapLayer) => {\n if (mapLayer === vlayer) {\n logger.trace(\"layer already in map. Not adding.\");\n found = true;\n }\n });\n // si le layer n'est pas sur la carte, on l'ajoute.\n if (!found) {\n this.getMap().addLayer(vlayer);\n }\n // style par defaut !\n // application des styles ainsi que ceux par defaut de ol sur le layer\n vlayer.getSource().getFeatures().forEach((feature) => {\n var style = feature.getStyle();\n if (typeof style !== \"function\") {\n return;\n }\n var featureStyleFunction = feature.getStyleFunction();\n if (featureStyleFunction) {\n var styles = featureStyleFunction.call(this, feature, 0);\n if (styles && styles.length !== 0) {\n feature.setStyle((Array.isArray(styles)) ? styles[0] : styles);\n }\n }\n });\n this.layer = vlayer;\n\n // Si un layer switcher est présent dans la carte, on lui affecte des informations pour cette couche\n this.getMap().getControls().forEach(\n (control) => {\n if (control instanceof LayerSwitcher) {\n // un layer switcher est présent dans la carte\n var layerId = this.layer.gpLayerId;\n // on n'ajoute des informations que s'il n'y en a pas déjà (si le titre est le numéro par défaut)\n if (control._layers[layerId].title === layerId) {\n control.addLayer(\n this.layer, {\n title : this.options.layerDescription.title,\n description : this.options.layerDescription.description\n }\n );\n }\n }\n }\n );\n }\n }\n\n /**\n * Get vector layer\n *\n * @returns {Object} layer - isocurve layer\n */\n getLayer () {\n return this.layer;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this._container;\n }\n\n // ################################################################### //\n // ######################## initialize control ####################### //\n // ################################################################### //\n\n /**\n * Gets marker options in options.markersList given its src.\n *\n * @param {String} src - marker image URI,\n * @returns {Object} markers options\n * @private\n */\n _getsMarkersOptionsFromSrc (src) {\n var markerOptions = null;\n for (var i = 0; i < this.options.markersList.length; i++) {\n if (src && this.options.markersList[i].src === src) {\n markerOptions = this.options.markersList[i];\n return markerOptions;\n }\n }\n return markerOptions;\n }\n\n /**\n * Converts markerElement options into Openlayers IconStyles options.\n *\n * @param {Object} markerElement - marker element\n * @returns {Object} ol.Style.Icon constructor options.\n * @private\n */\n _getIconStyleOptions (markerElement) {\n var iconOptions = {};\n Object.keys(markerElement).forEach((key) => {\n switch (key) {\n case \"src\":\n case \"size\":\n case \"scale\":\n case \"color\":\n case \"anchor\":\n case \"anchorOrigin\":\n case \"anchorXUnits\":\n case \"anchorYUnits\":\n iconOptions[key] = markerElement[key];\n break;\n }\n });\n\n return iconOptions;\n }\n\n /**\n * Initialize control (called by Drawing constructor)\n *\n * @method _initialize\n * @param {Object} options - control options (set by user)\n * @private\n */\n _initialize (options) {\n // determination d'un uid\n this._uid = options.id || SelectorID.generate();\n\n // export name / format / ...\n this._exportName = \"Croquis\";\n this._exportFormat = \"KML\";\n this._exportMimeType = \"application/vnd.google-earth.kml+xml\";\n this._exportExt = \".kml\";\n\n options = options || {};\n // Set default options\n this.options = options;\n\n if (!this.options.layerDescription) {\n this.options.layerDescription = {\n title : \"Croquis\",\n description : \"Mon croquis\"\n };\n }\n\n // applying default tools\n if (!this.options.tools) {\n this.options.tools = {};\n }\n Object.keys(Drawing.DefaultTools).forEach((key) => {\n if (!this.options.tools.hasOwnProperty(key)) {\n this.options.tools[key] = Drawing.DefaultTools[key];\n }\n });\n // styles par defaut lors du dessin\n if (!this.options.cursorStyle) {\n this.options.cursorStyle = {};\n }\n Object.keys(Drawing.DefaultCursorStyle).forEach((key) => {\n if (!this.options.cursorStyle.hasOwnProperty(key)) {\n this.options.cursorStyle[key] = Drawing.DefaultCursorStyle[key];\n }\n });\n\n this.options.collapsed = (options.collapsed !== undefined) ? options.collapsed : true;\n /** {Boolean} specify if Drawing control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n this.options.draggable = (options.draggable !== undefined) ? options.draggable : false;\n /** {Boolean} specify if Drawing control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n this.options.markersList = options.markersList || MarkersOther[\"drawing_api\"];\n\n // applying default labels\n if (!this.options.labels) {\n this.options.labels = {};\n }\n Object.keys(Drawing.DefaultLabels).forEach((key) => {\n if (!this.options.labels.hasOwnProperty(key)) {\n this.options.labels[key] = Drawing.DefaultLabels[key];\n }\n });\n\n // applying default styles\n if (!this.options.defaultStyles) {\n this.options.defaultStyles = {};\n }\n Object.keys(Drawing.DefaultStyles).forEach((key) => {\n if (!options.defaultStyles.hasOwnProperty(key)) {\n this.options.defaultStyles[key] = Drawing.DefaultStyles[key];\n return;\n }\n if (key === \"polyFillOpacity\" &&\n (options.defaultStyles[key] < 0 ||\n options.defaultStyles[key] > 1)) {\n logger.log(\"Wrong value (\" + options.defaultStyles[key] + \") for defaultStyles.polyFillOpactity. Must be between 0 and 1\");\n this.options.defaultStyles[key] = Drawing.DefaultStyles[key];\n return;\n }\n if (key === \"strokeWidth\" || key === \"polyStrokeWidth\") {\n var intValue = parseInt(options.defaultStyles[key], 10);\n if (isNaN(intValue) || intValue < 0) {\n logger.log(\"Wrong value (\" + options.defaultStyles[key] + \") for defaultStyles.strokeWidth. Must be a positive interger value.\");\n this.options.defaultStyles[key] = Drawing.DefaultStyles[key];\n return;\n }\n this.options.defaultStyles[key] = intValue;\n }\n if (key === \"markerSize\") {\n var floatValue = parseFloat(options.defaultStyles[key]);\n if (isNaN(floatValue) || floatValue < 0) {\n logger.log(\"Wrong value (\" + options.defaultStyles[key] + \") for defaultStyles.markerSize. Must be a positive value.\");\n this.options.defaultStyles[key] = Drawing.DefaultStyles[key];\n return;\n }\n this.options.defaultStyles[key] = floatValue;\n }\n });\n\n this.interactionCurrent = null;\n this.interactionSelectEdit = null;\n this.featuresCollectionSelected = null;\n\n this.stylingOvl = null;\n this.popupOvl = null;\n\n this.layer = null;\n if (this.options.layer && this.options.layer instanceof VectorLayer) {\n this.layer = this.options.layer;\n }\n\n // detection du support : desktop ou tactile\n // FIXME : utile ?\n this._isDesktop = this._detectSupport();\n\n // applying default popup\n if (!this.options.popup) {\n this.options.popup = {\n display : true,\n apply : null\n };\n }\n }\n\n /**\n * Creates empty layer to host features\n *\n * @private\n */\n _createEmptyLayer () {\n var features = new Collection();\n var layer = new VectorLayer({\n source : new VectorSource({\n features : features\n }),\n title : \"Mon Croquis\"\n });\n // on rajoute le champ gpResultLayerId permettant d'identifier une couche crée par le composant.\n layer.gpResultLayerId = \"drawing\";\n // on le rajoute au controle (et à la carte)\n this.setLayer(layer);\n }\n\n /**\n * this method is called by the constructor.\n * this information is useful to switch to touch mode.\n * Detection : test for desktop or tactile\n *\n * @method _detectSupport\n *\n * @returns {Boolean} is desktop\n * @private\n */\n _detectSupport () {\n // TODO\n // Choix de gérer la détection dans le code du composant au lieu du DOM car :\n // Utilisation de l'implémentation Leaflet\n // http://leafletjs.com/reference.html#browser\n\n var isDesktop = true;\n var userAgent = window.navigator.userAgent.toLowerCase();\n\n if (userAgent.indexOf(\"iphone\") !== -1 ||\n userAgent.indexOf(\"ipod\") !== -1 ||\n userAgent.indexOf(\"ipad\") !== -1 ||\n userAgent.indexOf(\"android\") !== -1 ||\n userAgent.indexOf(\"mobile\") !== -1 ||\n userAgent.indexOf(\"blackberry\") !== -1 ||\n userAgent.indexOf(\"tablet\") !== -1 ||\n userAgent.indexOf(\"phone\") !== -1 ||\n userAgent.indexOf(\"touch\") !== -1) {\n isDesktop = false;\n }\n\n if (userAgent.indexOf(\"msie\") !== -1 ||\n userAgent.indexOf(\"trident\") !== -1) {\n isDesktop = true;\n }\n\n return isDesktop;\n }\n\n // ################################################################### //\n // ######################## methods handle dom ####################### //\n // ################################################################### //\n\n /**\n * Create control main container (called by Drawing constructor)\n *\n * @method _initContainer\n *\n * @returns {DOMElement} DOM element\n * @private\n */\n _initContainer () {\n // creation du container principal\n var container = this._createMainContainerElement();\n\n var picto = this._showDrawingButton =this._createShowDrawingPictoElement();\n container.appendChild(picto);\n\n var panel = this._drawingPanel = this._createDrawingPanelElement();\n var panelDiv = this._createDrawingPanelDivElement();\n panel.appendChild(panelDiv);\n\n var header = this._drawingPanelHeader = this._createDrawingPanelHeaderElement();\n panelDiv.appendChild(header);\n\n var sections = this._createDrawingToolsDivSections();\n panelDiv.appendChild(sections);\n\n var tools = this._createDrawingToolsSections();\n for (var i = 0; i < tools.length; i++) {\n sections.appendChild(tools[i]);\n }\n\n container.appendChild(panel);\n\n return container;\n }\n\n // ################################################################### //\n // ##################### handlers events to control ################## //\n // ################################################################### //\n\n /**\n * Callback de fin de dessin de geometrie\n * @param {Object} feature - ol feature\n * @param {String} geomType - geometry type\n * @param {Boolean} clean - clean last feature\n *\n * @private\n */\n _drawEndFeature (feature, geomType) {\n // application des styles par defaut.\n var style = null;\n\n switch (geomType) {\n case \"Point\":\n style = new Style({\n image : new Icon(this._getIconStyleOptions(this.options.markersList[0]))\n });\n break;\n case \"LineString\":\n style = new Style({\n stroke : new Stroke({\n color : this.options.defaultStyles.strokeColor,\n width : this.options.defaultStyles.strokeWidth\n })\n });\n break;\n case \"Polygon\":\n style = new Style({\n fill : new Fill({\n color : Color.hexToRgba(\n this.options.defaultStyles.polyFillColor,\n this.options.defaultStyles.polyFillOpacity\n )\n }),\n stroke : new Stroke({\n color : this.options.defaultStyles.polyStrokeColor,\n width : this.options.defaultStyles.polyStrokeWidth\n })\n });\n break;\n }\n feature.setStyle(style);\n\n // gestion des mesures\n this._updateMeasure(feature, geomType);\n\n if (this.options.popup.display) {\n // creation overlay pour saisie du label\n // contexte\n var context = this;\n\n /**\n * Enregistrement de la valeur saisie dans l'input.\n *\n * @param {String} key - clef de l'attribut.\n * @param {String} value - valeur de l'attribut.\n * @param {Boolean} save - true si on garde le label.\n */\n var setAttValue = function (key, value, save) {\n context.getMap().removeOverlay(context.popupOvl);\n context.popupOvl = null;\n if (save && value && value.trim().length > 0) {\n var obj = {};\n obj[key] = value.replace(/\\n/g, \"
\");\n feature.setProperties(obj);\n }\n };\n\n var popup = null;\n var popupByDefault = true;\n\n var displayFunction = this.options.popup.function;\n if (displayFunction && typeof displayFunction === \"function\") {\n // la sauvegarde et la fermeture sont des actions à implementer par l'utilisateur\n // par contre, la destruction est à gerer en interne\n popup = displayFunction.call(context, {\n feature : feature,\n geomType : geomType,\n closeFunc : function () {\n setAttValue(null, false);\n },\n saveFunc : function (message) {\n setAttValue(message, true);\n }\n });\n if (popup) {\n // on est sûr que la popup customisée existe,\n // donc on n'utilise pas celle par defaut...\n popupByDefault = false;\n // FIXME comment forcer le focus sur une div ?\n popup.tabIndex = -1; // hack sur le focus sur une div ?\n popup.onblur = function () {\n context.getMap().removeOverlay(context.popupOvl);\n context.popupOvl = null;\n };\n }\n }\n // use popup by default\n if (popupByDefault) {\n // function by default\n popup = this._createLabelDiv({\n applyFunc : setAttValue,\n inputId : this._addUID(\"att-input\"),\n placeholder : \"Saisir une description...\",\n measure : (this.options.tools.measure) ? feature.getProperties().measure : null,\n geomType : geomType,\n key : \"description\"\n });\n }\n // un peu de menage...\n if (this.popupOvl) {\n this.getMap().removeOverlay(this.popupOvl);\n this.popupOvl = null;\n }\n // creation de l'overlay\n this.popupOvl = new Overlay({\n element : popup,\n // FIXME : autres valeurs.\n positioning : \"top-center\"\n // stopEvent : false\n });\n this.getMap().addOverlay(this.popupOvl);\n var geomExtent = feature.getGeometry().getExtent();\n this.popupOvl.setPosition([\n (geomExtent[0] + geomExtent[2]) / 2, (geomExtent[1] + geomExtent[3]) / 2\n ]);\n if (document.getElementById(this._addUID(\"att-input\"))) {\n document.getElementById(this._addUID(\"att-input\")).focus();\n }\n }\n }\n\n /**\n * Creates Interaction for features removal.\n *\n * @returns {SelectInteraction} created interaction.\n * @private\n */\n _createRemoveInteraction () {\n var interaction = new SelectInteraction({\n // features : this.layer.getSource().getFeaturesCollection(),\n layers : [this.layer],\n style : false\n });\n interaction.on(\"select\", (seEv) => {\n if (!seEv || !seEv.selected || seEv.selected.length === 0) {\n return;\n }\n this.layer.getSource().removeFeature(seEv.selected[0]);\n // suppression puis rajout de l'interaction pour appliquer le changement tout de suite...\n this.getMap().removeInteraction(this.interactionCurrent);\n this.interactionCurrent = this._createRemoveInteraction();\n this.getMap().addInteraction(this.interactionCurrent);\n });\n return interaction;\n }\n\n /**\n * Creates Interaction for features style definition.\n *\n * @returns {ol.interaction.Select} created interaction.\n * @private\n */\n _createStylingInteraction () {\n var interaction = new SelectInteraction({\n layers : [this.layer],\n style : false\n });\n interaction.on(\"select\", (seEv) => {\n // suppression de toute popup existante\n if (this.stylingOvl) {\n this.getMap().removeOverlay(this.stylingOvl);\n }\n if (!seEv || !seEv.selected || seEv.selected.length === 0) {\n return;\n }\n\n var valuesColor = null;\n var hexColor = null;\n var popupOvl = null;\n var geomType = null;\n var initValues = {};\n\n // FIXME\n // l'appel feature.getStyle() est parfois nul pour des geometries Point\n // avec un style par defaut !\n\n var geom = seEv.selected[0].getGeometry();\n var style = seEv.selected[0].getStyle();\n if (geom instanceof Point || geom instanceof MultiPoint) {\n // INFO\n // on determine si c'est un marker (ou cercle), un label ou les 2.\n // un label a un pixel transparent comme icone\n if (style &&\n style.getImage() &&\n typeof style.getImage().getSrc === \"function\" &&\n style.getImage().getSrc() !== this.options.defaultStyles.textIcon1x1.src) {\n geomType = \"Point\";\n // on traite un marker\n // mais si c'est un cercle !?\n if (typeof style.getImage().getSrc === \"function\") {\n initValues.markerSrc = style.getImage().getSrc();\n initValues.markerSize = style.getImage().getScale() || 1;\n initValues.markerAnchor = style.getImage().getAnchor();\n if (style.getImage().getColor()) {\n valuesColor = style.getImage().getColor();\n if (Array.isArray(valuesColor)) { // FIXME Array !?\n valuesColor = \"rgba(\" + valuesColor.join() + \")\";\n } else {\n initValues.markerColor = valuesColor;\n }\n hexColor = Color.isRGB(valuesColor) ? Color.rgbaToHex(valuesColor) : {\n hex : valuesColor,\n opacity : 1\n };\n initValues.markerColor = hexColor.hex;\n initValues.markerOpacity = hexColor.opacity;\n } else {\n initValues.markerColor = this.options.markersList[0].color || \"#ffffff\";\n }\n } else {\n initValues.markerSrc = this.options.markersList[0].src;\n initValues.markerSize = this.options.markersList[0].scale || 1;\n initValues.markerColor = this.options.markersList[0].color || \"#ffffff\";\n initValues.markerAnchor = this.options.markersList[0].anchor;\n }\n initValues.markerCustom = !(this._getsMarkersOptionsFromSrc(initValues.markerSrc));\n }\n if (style && style.getText()) {\n var labelName = seEv.selected[0].getProperties().name;\n if (labelName) {\n // test si on a un marker avec un label\n geomType = (geomType === \"Point\") ? \"Point&Text\" : \"Text\";\n if (style.getText().getStroke() && style.getText().getStroke().getColor()) {\n valuesColor = style.getText().getStroke().getColor();\n if (Array.isArray(valuesColor)) { // FIXME Array !?\n valuesColor = \"rgba(\" + valuesColor.join() + \")\";\n } else {\n initValues.strokeColor = valuesColor;\n }\n hexColor = Color.isRGB(valuesColor) ? Color.rgbaToHex(valuesColor) : {\n hex : valuesColor,\n opacity : 1\n };\n initValues.strokeColor = hexColor.hex;\n initValues.strokeOpacity = hexColor.opacity;\n }\n if (style.getText().getStroke() && style.getText().getStroke().getWidth()) {\n initValues.strokeWidth = style.getText().getStroke().getWidth();\n }\n if (style.getText().getFill() && style.getText().getFill().getColor()) {\n valuesColor = style.getText().getFill().getColor();\n if (Array.isArray(valuesColor)) {\n valuesColor = \"rgba(\" + valuesColor.join() + \")\";\n } else {\n initValues.fillColor = valuesColor;\n }\n hexColor = Color.isRGB(valuesColor) ? Color.rgbaToHex(valuesColor) : {\n hex : valuesColor,\n opacity : 1\n };\n initValues.fillColor = hexColor.hex;\n initValues.fillOpacity = hexColor.opacity;\n }\n initValues.strokeColor = initValues.hasOwnProperty(\"strokeColor\") ? initValues.strokeColor : this.options.defaultStyles.textStrokeColor;\n initValues.strokeWidth = initValues.hasOwnProperty(\"strokeWidth\") ? initValues.strokeWidth : this.options.defaultStyles.textStrokeWidth;\n initValues.fillColor = initValues.hasOwnProperty(\"fillColor\") ? initValues.fillColor : this.options.defaultStyles.textFillColor;\n // Par defaut, pour un marker avec un label, on affiche le label si le tag \"name\" est renseigné.\n if (geomType === \"Point&Text\") {\n var value = style.getText().getText();\n if (!value) {\n style.getText().setText(labelName);\n }\n var checked = seEv.selected[0].get(\"checked\");\n initValues.labelDisplay = (checked === undefined) ? this.options.defaultStyles.labelDisplay : checked;\n }\n }\n }\n } else if (geom instanceof LineString || geom instanceof MultiLineString) {\n geomType = \"Line\";\n if (style && style.getStroke()) {\n if (style.getStroke().getWidth()) {\n initValues.strokeWidth = style.getStroke().getWidth();\n }\n if (style.getStroke().getColor()) {\n valuesColor = style.getStroke().getColor();\n if (Array.isArray(valuesColor)) {\n valuesColor = \"rgba(\" + valuesColor.join() + \")\";\n } else {\n initValues.strokeColor = valuesColor;\n }\n hexColor = Color.isRGB(valuesColor) ? Color.rgbaToHex(valuesColor) : {\n hex : valuesColor,\n opacity : 1\n };\n initValues.strokeColor = hexColor.hex;\n initValues.strokeOpacity = hexColor.opacity;\n }\n }\n initValues.strokeWidth = initValues.hasOwnProperty(\"strokeWidth\") ? initValues.strokeWidth : this.options.defaultStyles.strokeWidth;\n initValues.strokeColor = initValues.hasOwnProperty(\"strokeColor\") ? initValues.strokeColor : this.options.defaultStyles.strokeColor;\n } else if (geom instanceof Polygon || geom instanceof MultiPolygon) {\n geomType = \"Polygon\";\n if (style && style.getStroke()) {\n if (style.getStroke().getWidth()) {\n initValues.strokeWidth = style.getStroke().getWidth();\n }\n if (style.getStroke().getColor()) {\n valuesColor = style.getStroke().getColor();\n if (Array.isArray(valuesColor)) {\n valuesColor = \"rgba(\" + valuesColor.join() + \")\";\n } else {\n initValues.strokeColor = valuesColor;\n }\n hexColor = Color.isRGB(valuesColor) ? Color.rgbaToHex(valuesColor) : {\n hex : valuesColor,\n opacity : 1\n };\n initValues.strokeColor = hexColor.hex;\n initValues.strokeOpacity = hexColor.opacity;\n }\n }\n if (style && style.getFill()) {\n if (style.getFill().getColor()) {\n valuesColor = style.getFill().getColor();\n if (Array.isArray(valuesColor)) {\n valuesColor = \"rgba(\" + valuesColor.join() + \")\";\n } else {\n initValues.fillColor = valuesColor;\n }\n hexColor = Color.isRGB(valuesColor) ? Color.rgbaToHex(valuesColor) : {\n hex : valuesColor,\n opacity : 1\n };\n initValues.fillColor = hexColor.hex;\n initValues.fillOpacity = hexColor.opacity;\n }\n }\n initValues.strokeWidth = initValues.hasOwnProperty(\"strokeWidth\") ? initValues.strokeWidth : this.options.defaultStyles.polyStrokeWidth;\n initValues.strokeColor = initValues.hasOwnProperty(\"strokeColor\") ? initValues.strokeColor : this.options.defaultStyles.polyStrokeColor;\n initValues.fillColor = initValues.hasOwnProperty(\"fillColor\") ? initValues.fillColor : this.options.defaultStyles.polyFillColor;\n initValues.fillOpacity = initValues.hasOwnProperty(\"fillOpacity\") ? initValues.fillOpacity : this.options.defaultStyles.polyFillOpacity;\n }\n if (!geomType) {\n logger.log(\"Unhandled geometry type for styling.\");\n return;\n }\n var dtObj = this;\n /**\n * function called when apply button is pressed.\n *\n * @param {String} action - \"apply\" (to selected object), \"default\" (set as default), \"cancel\" (do nothing).\n */\n var applyStyle = function (action) {\n if (action === \"cancel\") {\n dtObj.getMap().removeOverlay(popupOvl);\n return;\n }\n var setDefault = action !== \"apply\";\n\n var fillColorElem = document.getElementById(dtObj._addUID(\"fillColor\"));\n var fillOpacityElem = document.getElementById(dtObj._addUID(\"fillOpacity\"));\n var strokeColorElem = document.getElementById(dtObj._addUID(\"strokeColor\"));\n var strokeWidthElem = document.getElementById(dtObj._addUID(\"strokeWidth\"));\n var markerSizeElem = document.getElementById(dtObj._addUID(\"markerSize\"));\n // var markerColorElem = document.getElementById(dtObj._addUID(\"markerColor\"));\n switch (geomType.toLowerCase()) {\n case \"text\":\n if (setDefault) {\n dtObj.options.defaultStyles.textStrokeColor = strokeColorElem.value;\n dtObj.options.defaultStyles.textStrokeWidth = strokeWidthElem.value;\n dtObj.options.defaultStyles.textFillColor = fillColorElem.value;\n } else {\n seEv.selected[0].setStyle(new Style({\n text : new Text({\n font : \"16px sans\",\n textAlign : \"left\",\n text : style.getText().getText(),\n fill : new Fill({\n color : fillColorElem.value\n }),\n stroke : new Stroke({\n color : strokeColorElem.value,\n width : parseInt(strokeWidthElem.value, 10)\n })\n })\n }));\n }\n break;\n case \"point&text\":\n case \"point\":\n var labelDisplay = document.querySelector(\"input[type='checkbox']\");\n // FIXME cas où le marker n'est pas dans la liste ?\n // si le marker n'existe pas dans le liste, on ne souhaite donc que changer la couleur du\n // pictogramme ou la taille..., on garde donc le picto initial.\n var markerSelected = null;\n var scale = parseInt(markerSizeElem.value, 10) / 10;\n var markerChecked = document.querySelector(\"input[name='marker']:checked\");\n if (markerChecked) {\n markerSelected = dtObj._getsMarkersOptionsFromSrc(markerChecked.value);\n markerSelected.scale = scale;\n // markerSelected.color = markerColorElem.value;\n }\n if (setDefault) {\n dtObj.options.defaultStyles.markerSize = scale;\n if (dtObj.options.markersList.length > 1) {\n // index du marker dans la liste des markers\n var idxMarker = dtObj.options.markersList.findIndex(function (mrk) {\n if (mrk === markerSelected) { // FIXME object comparison\n return true;\n }\n return false;\n });\n if (idxMarker > 0) {\n // on enleve le marker de son ancienne position\n dtObj.options.markersList.splice(idxMarker, 1);\n // on le place en tête de liste\n dtObj.options.markersList.splice(0, 0, markerSelected);\n }\n }\n if (geomType.toLowerCase() === \"point&text\") {\n dtObj.options.defaultStyles.textStrokeColor = initValues.strokeColor;\n dtObj.options.defaultStyles.textStrokeWidth = initValues.strokeWidth;\n dtObj.options.defaultStyles.textFillColor = initValues.fillColor;\n dtObj.options.defaultStyles.labelDisplay = initValues.labelDisplay;\n }\n } else {\n var text = {};\n if (geomType.toLowerCase() === \"point&text\") {\n seEv.selected[0].set(\"checked\", labelDisplay.checked);\n text = {\n text : new Text({\n font : \"16px sans\",\n textAlign : \"left\",\n text : (labelDisplay.checked) ? seEv.selected[0].get(\"name\") : \"\",\n fill : new Fill({\n color : initValues.fillColor\n }),\n stroke : new Stroke({\n color : initValues.strokeColor,\n width : parseInt(initValues.strokeWidth, 10)\n })\n })\n };\n }\n if (markerSelected) {\n seEv.selected[0].setStyle(new Style(Object.assign({\n image : new Icon(dtObj._getIconStyleOptions(markerSelected))\n }, text)));\n } else {\n // FIXME anchor !?\n seEv.selected[0].setStyle(new Style(Object.assign({\n image : new Icon({\n src : initValues.markerSrc, // on garde le pictogramme initial !\n // color : markerColorElem.value, // on recupère la couleur !\n anchor : initValues.markerAnchor, // on garde la position initial !\n anchorOrigin : \"top-left\",\n anchorXUnits : \"pixels\",\n anchorYUnits : \"pixels\",\n scale : scale\n })\n }, text)));\n }\n }\n break;\n case \"line\":\n if (setDefault) {\n dtObj.options.defaultStyles.strokeColor = strokeColorElem.value;\n dtObj.options.defaultStyles.strokeWidth = parseInt(strokeWidthElem.value, 10);\n } else {\n seEv.selected[0].setStyle(new Style({\n stroke : new Stroke({\n width : parseInt(strokeWidthElem.value, 10),\n color : strokeColorElem.value\n })\n }));\n }\n break;\n case \"polygon\":\n var opacity = parseInt(fillOpacityElem.value, 10) / 10;\n if (setDefault) {\n dtObj.options.defaultStyles.polyStrokeColor = strokeColorElem.value;\n dtObj.options.defaultStyles.polyFillColor = fillColorElem.value;\n dtObj.options.defaultStyles.polyFillOpacity = opacity;\n dtObj.options.defaultStyles.polyStrokeWidth = parseInt(strokeWidthElem.value, 10);\n } else {\n seEv.selected[0].setStyle(new Style({\n stroke : new Stroke({\n width : parseInt(strokeWidthElem.value, 10),\n color : strokeColorElem.value\n }),\n fill : new Fill({\n // color : fillColorElem.value\n color : Color.hexToRgba(fillColorElem.value, opacity)\n })\n }));\n }\n break;\n }\n if (!setDefault) {\n // application des styles par defaut\n // fermeture de la popup (si on applique le style à l'objet)\n dtObj.getMap().removeOverlay(popupOvl);\n }\n };\n\n var popupDiv = this._createStylingDiv({\n geomType : geomType,\n initValues : initValues,\n applyFunc : applyStyle\n });\n popupOvl = new Overlay({\n element : popupDiv,\n // FIXME : autres valeurs.\n positioning : \"top-center\"\n // stopEvent : false\n });\n this.getMap().addOverlay(popupOvl);\n popupOvl.setPosition(seEv.mapBrowserEvent.coordinate);\n this.stylingOvl = popupOvl;\n // suppression puis rajout de l'interaction pour appliquer le changement tout de suite...\n this.getMap().removeInteraction(this.interactionCurrent);\n this.interactionCurrent = this._createStylingInteraction();\n this.getMap().addInteraction(this.interactionCurrent);\n });\n return interaction;\n }\n\n /**\n * Creates Interaction for text definition.\n *\n * @returns {SelectInteraction} created interaction.\n * @private\n */\n _createLabelInteraction () {\n var interaction = new SelectInteraction({\n layers : [this.layer],\n style : false\n });\n interaction.on(\"select\", (seEv) => {\n // suppression de toute popup existante\n if (this.labelOvl) {\n this.getMap().removeOverlay(this.labelOvl);\n }\n if (!seEv || !seEv.selected || seEv.selected.length === 0) {\n return;\n }\n var popupOvl = null;\n var geomType = null;\n var _textValue = null;\n var _measure = null;\n\n var geom = seEv.selected[0].getGeometry();\n var style = seEv.selected[0].getStyle();\n if (geom instanceof Point || geom instanceof MultiPoint) {\n // on determine si c'est un marker ou un label.\n var _label = seEv.selected[0].getProperties().name;\n if (style && style.getText() && _label) {\n geomType = \"Text\";\n } else if (style && style.getImage()) {\n geomType = \"Point\";\n }\n } else if (geom instanceof LineString || geom instanceof MultiLineString) {\n geomType = \"Line\";\n } else if (geom instanceof Polygon || geom instanceof MultiPolygon) {\n geomType = \"Polygon\";\n } else {\n logger.log(\"Geometry type for styling not supported .\");\n return;\n }\n\n if (!geomType) {\n logger.log(\"Unhandled geometry type for styling.\");\n return;\n }\n\n if (geomType === \"Text\") {\n // pour les labels on récupère la valeur dans le style\n _textValue = style.getText().getText();\n } else {\n // pour les autres, c'est un attribut du feature\n // choix à faire entre description (KML et GeoJSON) ou desc (GPX)\n var featProps = seEv.selected[0].getProperties();\n if (featProps && (featProps.hasOwnProperty(\"description\") || featProps.hasOwnProperty(\"desc\"))) {\n _textValue = featProps[\"description\"] || featProps[\"desc\"];\n }\n if (featProps && featProps.hasOwnProperty(\"measure\")) {\n _measure = featProps[\"measure\"];\n }\n }\n\n var context = this;\n /**\n * Enregistrement de la valeur saisie dans l'input.\n *\n * @param {String} key - clef de l'attribut.\n * @param {String} value - valeur de l'attribut.\n * @param {Boolean} save - true si on garde le label.\n */\n var setTextValue = function (key, value, save) {\n context.getMap().removeOverlay(popupOvl);\n if (!save) {\n return;\n }\n\n var feature = seEv.selected[0];\n if (geomType === \"Text\") {\n var style = feature.getStyle();\n style.getText().setText(value);\n feature.setProperties({\n name : value\n });\n feature.setStyle(style);\n return;\n }\n\n var obj = {};\n obj[key] = value.replace(/\\n/g, \"
\");\n feature.setProperties(obj);\n };\n\n var popupDiv = this._createLabelDiv({\n applyFunc : setTextValue,\n inputId : this._addUID(\"label-input\"),\n placeholder : (geomType === \"Text\" ? \"Saisir un label...\" : \"Saisir une description...\"),\n text : _textValue,\n key : \"description\",\n measure : (this.options.tools.measure) ? _measure : null,\n geomType : geomType\n });\n\n popupOvl = new Overlay({\n element : popupDiv,\n // FIXME : autres valeurs.\n positioning : \"top-center\"\n // stopEvent : false\n });\n\n this.getMap().addOverlay(popupOvl);\n popupOvl.setPosition(seEv.mapBrowserEvent.coordinate);\n document.getElementById(this._addUID(\"label-input\")).focus();\n this.labelOvl = popupOvl;\n // suppression puis rajout de l'interaction pour appliquer le changement tout de suite...\n this.getMap().removeInteraction(this.interactionCurrent);\n this.interactionCurrent = this._createLabelInteraction();\n this.getMap().addInteraction(this.interactionCurrent);\n });\n return interaction;\n }\n\n /**\n * Callback de fin de modification du dessin afin de mettre à jour la mesure\n * TODO\n * @param {Object} feature - ol feature\n * @param {String} geomType - geometry type\n *\n * @private\n */\n _updateMeasure (feature, geomType) {\n logger.log(feature);\n\n var measure = null;\n\n var projection = this.getMap().getView().getProjection();\n\n // arrondi\n function __roundDecimal (nombre, precision) {\n precision = precision || 2;\n var factor = Math.pow(10, precision);\n return Math.round(nombre * factor) / factor;\n }\n\n var type = (geomType) || feature.getProperties().type;\n switch (type) {\n case \"Point\":\n var coordinatesPoint = (feature.getGeometry()).getCoordinates();\n var c = olTransformProj(coordinatesPoint, projection, \"EPSG:4326\");\n measure = \"lon : \";\n measure += __roundDecimal(c[0], 4) + \"°\";\n measure += \" / \";\n measure += \"lat : \";\n measure += __roundDecimal(c[1], 4) + \"°\";\n\n break;\n case \"LineString\":\n var measureLength = 0;\n var coordinatesLine = (feature.getGeometry()).getCoordinates();\n for (var i = 0, ii = coordinatesLine.length - 1; i < ii; ++i) {\n var c1 = olTransformProj(coordinatesLine[i], projection, \"EPSG:4326\");\n var c2 = olTransformProj(coordinatesLine[i + 1], projection, \"EPSG:4326\");\n measureLength += olGetDistanceSphere(c1, c2);\n }\n measure = (measureLength > 1000)\n ? __roundDecimal(measureLength / 1000, 3) + \" km\"\n : __roundDecimal(measureLength, 3) + \" m\";\n\n break;\n case \"Polygon\":\n var measureArea = 0;\n var geom = (feature.getGeometry()).clone();\n var coordinatesAera = geom.getLinearRing(0).getCoordinates();\n measureArea = Math.abs(olGetAreaSphere(new Polygon([coordinatesAera])));\n\n // FIXME on se limite à des trous uniquement !\n // cad les polygones sont strictement contenus dans le 1er !\n var rings = geom.getLinearRings();\n if (rings.length > 1) {\n for (var ij = 1; ij < rings.length; ij++) {\n var coordinatesRings = rings[ij].getCoordinates();\n measureArea -= Math.abs(olGetAreaSphere(new Polygon([coordinatesRings])));\n }\n }\n\n measure = (measureArea > 1000000)\n ? __roundDecimal(measureArea / 1000000, 3) + \" km^2\"\n : __roundDecimal(measureArea, 2) + \" m^2\";\n\n break;\n }\n\n // enregistrement de la mesure dans la feature\n feature.setProperties({\n measure : measure,\n type : type\n });\n }\n\n /**\n * Handles click on drawing tools icons\n *\n * @param {Event} clickEvent - click event\n * @param {String} toolId - selected tool Id\n * @param {Drawing} context - Drawing control.\n * @private\n */\n _handleToolClick (clickEvent, toolId, context) {\n var map = context.getMap();\n if (!map) {\n logger.trace(\"Drawing control not attached to any map.\");\n return;\n }\n // on supprime les interactions des autres extensions\n Interactions.unset(map, {\n current : \"Drawing\"\n });\n\n // on supprime l'interaction courante s'il y en a une.\n if (context.interactionCurrent) {\n map.removeInteraction(context.interactionCurrent);\n context.interactionCurrent = null;\n }\n\n // on supprime l'interaction de selection courante s'il y en a une.\n if (context.interactionSelectEdit) {\n map.removeInteraction(context.interactionSelectEdit);\n context.interactionSelectEdit = null;\n }\n\n // on supprime la popup courante s'il y en a une.\n if (context.popupOvl) {\n context.getMap().removeOverlay(context.popupOvl);\n context.popupOvl = null;\n }\n\n // si aucune couche de dessin, on en crée une vide.\n if (!this.layer) {\n this._createEmptyLayer();\n }\n switch (toolId) {\n case this._addUID(\"drawing-tool-point\"):\n if (context.dtOptions[\"points\"].active) {\n context.interactionCurrent = new DrawInteraction({\n stopClick : true,\n // features : context.layer.getSource().getFeaturesCollection(),\n source : context.layer.getSource(),\n style : new Style({\n image : new Icon(this._getIconStyleOptions(this.options.markersList[0]))\n }),\n type : (\"Point\")\n });\n context.interactionCurrent.on(\"drawend\", function (deEv) {\n // ajout eventuel d'un attribut description sur le feature\n context._drawEndFeature(deEv.feature, \"Point\");\n },\n context);\n }\n break;\n case this._addUID(\"drawing-tool-line\"):\n if (context.dtOptions[\"lines\"].active) {\n context.interactionCurrent = new DrawInteraction({\n stopClick : true,\n // features : context.layer.getSource().getFeaturesCollection(),\n source : context.layer.getSource(),\n style : new Style({\n image : new Circle({\n radius : this.options.cursorStyle.radius,\n stroke : new Stroke({\n color : this.options.cursorStyle.strokeColor,\n width : this.options.cursorStyle.strokeWidth\n }),\n fill : new Fill({\n color : this.options.cursorStyle.fillColor\n })\n }),\n stroke : new Stroke({\n color : this.options.defaultStyles.strokeColor,\n width : this.options.defaultStyles.strokeWidth\n })\n }),\n type : (\"LineString\")\n });\n context.interactionCurrent.on(\"drawend\", function (deEv) {\n // ajout eventuel d'un attribut description sur le feature\n context._drawEndFeature(deEv.feature, \"LineString\");\n },\n context);\n }\n break;\n case this._addUID(\"drawing-tool-polygon\"):\n if (context.dtOptions[\"polygons\"].active) {\n context.interactionCurrent = new DrawInteraction({\n stopClick : true,\n // features : context.layer.getSource().getFeaturesCollection(),\n source : context.layer.getSource(),\n style : new Style({\n image : new Circle({\n radius : this.options.cursorStyle.radius,\n stroke : new Stroke({\n color : this.options.cursorStyle.strokeColor,\n width : this.options.cursorStyle.strokeWidth\n }),\n fill : new Fill({\n color : this.options.cursorStyle.fillColor\n })\n }),\n stroke : new Stroke({\n color : this.options.defaultStyles.polyStrokeColor,\n width : this.options.defaultStyles.polyStrokeWidth\n }),\n fill : new Fill({\n color : Color.hexToRgba(\n this.options.defaultStyles.polyFillColor,\n this.options.defaultStyles.polyFillOpacity\n )\n })\n }),\n type : (\"Polygon\")\n });\n context.interactionCurrent.on(\"drawend\", function (deEv) {\n // ajout eventuel d'un attribut description sur le feature\n context._drawEndFeature(deEv.feature, \"Polygon\");\n },\n context);\n }\n break;\n case this._addUID(\"drawing-tool-holes\"):\n if (context.dtOptions[\"holes\"].active) {\n // selection du polygone à modifier\n context.interactionSelectEdit = new SelectInteraction({\n stopClick : true,\n condition : eventPointerMove,\n layers : [this.layer]\n });\n context.interactionSelectEdit.setProperties({\n name : \"Drawing\",\n source : context\n });\n map.addInteraction(context.interactionSelectEdit);\n\n // saisie\n context.interactionCurrent = new DrawInteraction({\n stopClick : true,\n features : this.interactionSelectEdit.getFeatures(),\n style : new Style({\n image : new Circle({\n radius : this.options.cursorStyle.radius,\n stroke : new Stroke({\n color : this.options.cursorStyle.strokeColor,\n width : this.options.cursorStyle.strokeWidth\n }),\n fill : new Fill({\n color : this.options.cursorStyle.fillColor\n })\n }),\n stroke : new Stroke({\n color : this.options.defaultStyles.polyStrokeColor,\n width : this.options.defaultStyles.polyStrokeWidth\n }),\n fill : new Fill({\n color : Color.hexToRgba(\n this.options.defaultStyles.polyFillColor,\n this.options.defaultStyles.polyFillOpacity\n )\n })\n }),\n type : (\"Polygon\")\n });\n\n context.interactionCurrent.on(\"drawstart\", function (deEv) {}, context);\n\n context.interactionCurrent.on(\"drawend\", function (deEv) {\n // recuperation du feature selectionné\n var features = context.interactionSelectEdit.getFeatures();\n if (features.getLength()) {\n // choix sur le 1er feature de la liste\n var feature = features.item(0);\n var hole = deEv.feature.getGeometry().getCoordinates()[0];\n // test pour savoir si le polygone est entièrement\n // inclu dans l'autre afin de faciliter les calculs d'aire !\n var bHoleIsIncluded = true;\n for (var i = 0; i < hole.length; i++) {\n if (!feature.getGeometry().intersectsCoordinate(hole[i])) {\n bHoleIsIncluded = false;\n break;\n }\n }\n if (!bHoleIsIncluded) {\n return;\n }\n // ajout du rings\n feature.getGeometry().appendLinearRing(new LinearRing(hole));\n // enregistrement !\n deEv.feature = feature;\n // finalisation du dessin...\n context._drawEndFeature(deEv.feature, \"Polygon\");\n }\n },\n context);\n }\n break;\n case this._addUID(\"drawing-tool-text\"):\n // text : creation de points invisibles avec un label.\n if (context.dtOptions[\"text\"].active) {\n context.interactionCurrent = new DrawInteraction({\n stopClick : true,\n // features : context.layer.getSource().getFeaturesCollection(),\n source : context.layer.getSource(),\n style : new Style({\n image : new Circle({\n radius : this.options.cursorStyle.radius,\n stroke : new Stroke({\n color : this.options.cursorStyle.strokeColor,\n width : this.options.cursorStyle.strokeWidth\n }),\n fill : new Fill({\n color : this.options.cursorStyle.fillColor\n })\n })\n }),\n type : (\"Point\")\n });\n context.interactionCurrent.on(\"drawend\", (deEv) => {\n // creation overlay pour saisie du label\n var popupOvl = null;\n /**\n * Enregistrement de la valeur saisie dans l'input.\n *\n * @param {String} key - clef du label\n * @param {String} value - valeur du label\n * @param {Boolean} save - true si on garde le label.\n */\n var setTextValue = function (key, value, save) {\n context.getMap().removeOverlay(popupOvl);\n if (!save) {\n // removes feature from overlay.\n context.layer.getSource().removeFeature(deEv.feature);\n return;\n }\n\n var obj = {};\n obj[key] = value;\n deEv.feature.setProperties(obj);\n\n deEv.feature.setStyle(new Style({\n // HACK : on ajoute un icone invisible de 1x1 pixel afin d'eviter\n // l'affichage d'une punaise google !\n image : new Icon(context._getIconStyleOptions(context.options.defaultStyles.textIcon1x1)),\n text : new Text({\n textAlign : \"left\",\n font : \"16px sans\",\n text : value,\n fill : new Fill({\n color : context.options.defaultStyles.textFillColor\n }),\n stroke : new Stroke({\n color : context.options.defaultStyles.textStrokeColor,\n width : 3\n })\n })\n }));\n };\n var popup = this._createLabelDiv({\n applyFunc : setTextValue,\n inputId : context._addUID(\"label-input\"),\n geomType : \"Text\",\n key : \"name\",\n placeholder : \"Saisir un label...\"\n });\n popupOvl = new Overlay({\n element : popup,\n // FIXME : autres valeurs.\n positioning : \"top-center\" // par defaut, top-left...\n // stopEvent : false\n });\n context.getMap().addOverlay(popupOvl);\n popupOvl.setPosition(deEv.feature.getGeometry().getCoordinates());\n document.getElementById(this._addUID(\"label-input\")).focus();\n });\n }\n break;\n case this._addUID(\"drawing-tool-edit\"):\n if (context.dtOptions[\"edit\"].active) {\n this.featuresCollectionSelected = new Collection();\n context.interactionSelectEdit = new SelectInteraction({\n condition : eventSingleClick,\n layers : [this.layer],\n features : this.featuresCollectionSelected\n });\n context.interactionSelectEdit.on(\"select\", (e) => {\n // ...\n });\n context.interactionSelectEdit.setProperties({\n name : \"Drawing\",\n source : context\n });\n map.addInteraction(context.interactionSelectEdit);\n\n context.interactionCurrent = new ModifyInteraction({\n stopClick : true,\n // features : context.layer.getSource().getFeaturesCollection(),\n features : this.interactionSelectEdit.getFeatures(),\n style : new Style({\n image : new Circle({\n radius : this.options.cursorStyle.radius,\n stroke : new Stroke({\n color : this.options.cursorStyle.strokeColor,\n width : this.options.cursorStyle.strokeWidth\n }),\n fill : new Fill({\n color : this.options.cursorStyle.fillColor\n })\n })\n })\n // deleteCondition : function (/* event */) { return false },\n // insertVertexCondition : function (/* event */) { return false }\n });\n context.interactionCurrent.on(\"modifyend\", (deEv) => {\n var feature = deEv.features.item(0);\n context._updateMeasure(feature);\n });\n }\n break;\n case this._addUID(\"drawing-tool-display\"):\n if (context.dtOptions[\"display\"].active) {\n context.interactionCurrent = this._createStylingInteraction();\n }\n break;\n case this._addUID(\"drawing-tool-tooltip\"):\n\n if (context.dtOptions[\"tooltip\"].active) {\n context.interactionCurrent = this._createLabelInteraction();\n }\n break;\n case this._addUID(\"drawing-tool-remove\"):\n if (context.dtOptions[\"remove\"].active) {\n context.interactionCurrent = context._createRemoveInteraction();\n }\n break;\n default:\n logger.trace(\"unhandled tool type\");\n }\n if (context.interactionCurrent) {\n context.interactionCurrent.setProperties({\n name : \"Drawing\",\n source : this\n });\n map.addInteraction(context.interactionCurrent);\n }\n logger.log(\"interactions\", map.getInteractions());\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on 'GPshowDrawingPicto' tag label\n * (cf. this._createShowDrawingPictoElement),\n * and toggles event 'mousemove' on map.\n *\n * @method onShowDrawingClick\n * @param { event } e évènement associé au clic\n * @private\n */\n onShowDrawingClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n // on supprime toutes les interactions\n Interactions.unset(map);\n\n var opened = this._showDrawingButton.ariaPressed;\n this.collapsed = !(opened === \"true\");// on génère nous même l'evenement OpenLayers de changement de propriété\n // (utiliser mousePosition.on(\"change:collapsed\", function(e) ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n // on deselectionne les Tools\n for (var toolsType in this.dtOptions) {\n if (this.dtOptions.hasOwnProperty(toolsType)) {\n if (this.dtOptions[toolsType].active) {\n var toolsId = this._addUID(\"drawing-tool-\" + this.dtOptions[toolsType].id);\n document.getElementById(toolsId).className = \"drawing-tool fr-m-1w fr-btn fr-btn--tertiary gpf-btn--tertiary\";\n this.dtOptions[toolsType].active = false;\n }\n }\n }\n }\n\n /**\n * this method is called by event 'click' on 'drawing-export' tag button.\n *\n * @method onExportFeatureClick\n * @private\n */\n onExportFeatureClick () {\n var content = this.exportFeatures();\n if (!content) {\n return;\n }\n var link = document.createElement(\"a\");\n // FIXME : determiner le bon charset !\n var charset = \"utf-8\";\n link.setAttribute(\"href\", \"data:\" + this._exportMimeType + \";charset=\" + charset + \",\" + encodeURIComponent(content));\n link.setAttribute(\"download\", this.getExportName() + this._exportExt);\n if (document.createEvent) {\n var event = document.createEvent(\"MouseEvents\");\n event.initEvent(\"click\", true, true);\n link.dispatchEvent(event);\n } else {\n link.click();\n }\n }\n\n};\n\n// on récupère les méthodes de la classe commune Drawing\nObject.assign(Drawing.prototype, DrawingDOM);\nObject.assign(Drawing.prototype, Widget);\n\nexport default Drawing;\n\n// Expose Drawing as ol.control.Drawing (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.Drawing = Drawing;\n}\n","import ID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport GeocodeUtils from \"../../Utils/GeocodeUtils\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar logger = Logger.getLogger(\"LocationSelectorDOM\");\n\nvar LocationSelectorDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.className = this._addUID(\"GPlocationPoint\"); // ceci permet de gerer les groupes de points !\n container.className += \" GPwidget gpf-widget \";\n return container;\n },\n\n /**\n * Create Container Point\n * see event !\n *\n * @param {Number} id - tag ID\n * @param {Number} display - display\n * @returns {DOMElement} DOM element\n */\n _createLocationPointElement : function (id, display) {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPlocationPoint_\" + id);\n div.className = (display) ? \"GPflexInput GPlocationStageFlexInput gpf-flex\" : \"GPflexInput GPelementHidden gpf-flex gpf-hidden\";\n div.style.cssText = \"\";\n\n return div;\n },\n\n /**\n * Create Container Point\n * see event !\n *\n * @param {Number} id - tag ID\n * @param {String} text - label\n * @returns {DOMElement} DOM element\n */\n _createLocationPointLabelElement : function (id, text) {\n // contexte d'execution\n var self = this;\n\n var buttonOrigin = document.createElement(\"button\");\n buttonOrigin.id = this._addUID(\"GPlocationOriginLabel_\" + id);\n buttonOrigin.innerHTML = text;\n buttonOrigin.className = \"GPlocationOriginLabel gpf-btn gpf-btn-icon-label fr-btn fr-btn--secondary gpf-btn--secondary\";\n buttonOrigin.setAttribute(\"type\", \"button\");\n buttonOrigin.addEventListener(\"click\", function (e) {\n var i = ID.index(this.id);\n var points = document.getElementsByClassName(self._addUID(\"GPlocationPoint\"));\n for (var j = 0; j < points.length; j++) {\n var tag = points[j].childNodes[0].id;\n var id = ID.index(tag);\n document.getElementById(self._addUID(\"GPlocationPoint_\" + id)).style.cssText = \"\";\n }\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).value = \"\";\n document.getElementById(self._addUID(\"GPlocationOrigin_\" + i)).value = \"\";\n document.getElementById(self._addUID(\"GPlocationPoint_\" + i)).style.cssText = \"\";\n document.getElementById(self._addUID(\"GPlocationOriginPointer_\" + i)).checked = false;\n document.getElementById(self._addUID(\"GPlocationOrigin_\" + i)).className = \"GPelementShow gpf-show gpf-input fr-input\";\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).className = \"GPelementHidden gpf-hidden\";\n if (document.getElementById(self._addUID(\"GPlocationStageRemove_\" + i))) {\n document.getElementById(self._addUID(\"GPlocationStageRemove_\" + i)).className = \"GPlocationStageRemove gpf-btn gpf-btn-icon-remove fr-btn--sm fr-btn--secondary gpf-btn--secondary\";\n }\n if (document.getElementById(self._addUID(\"GPlocationStageAdd\"))) {\n document.getElementById(self._addUID(\"GPlocationStageAdd\")).className = \"GPlocationStageAdd gpf-btn gpf-btn-icon-add fr-btn--sm fr-btn--secondary gpf-btn--secondary fr-mt-2w\";\n }\n // document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).disabled = true;\n self.onLocationClearPointClick(e);\n });\n\n return buttonOrigin;\n },\n\n /**\n * Create Input AutoComplete Point tag\n *\n * @param {Number} id - tag ID\n * @returns {DOMElement} DOM element\n */\n _createLocationAutoCompleteteInputElement : function (id) {\n // contexte d'execution\n var self = this;\n\n var inputOrigin = document.createElement(\"input\");\n inputOrigin.id = this._addUID(\"GPlocationOrigin_\" + id);\n inputOrigin.className = \"GPelementShow gpf-show gpf-input fr-input\";\n inputOrigin.type = \"text\";\n inputOrigin.placeholder = \"Saisir une adresse, un lieu...\";\n inputOrigin.autocomplete = \"off\";\n inputOrigin.addEventListener(\"keyup\", function (e) {\n var charCode = e.which || e.keyCode;\n if (charCode === 13 || charCode === 10 || charCode === 38 || charCode === 40) {\n return;\n }\n\n var i = ID.index(this.id);\n if (document.getElementById(self._addUID(\"GPlocationOrigin_\" + i)).value.length > 2) {\n document.getElementById(self._addUID(\"GPlocationAutoCompleteList_\" + i)).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPlocationAutoCompleteList_\" + i)).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n } else {\n document.getElementById(self._addUID(\"GPlocationAutoCompleteList_\" + i)).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPlocationAutoCompleteList_\" + i)).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n // gestionnaire d'evenement :\n // on récupère la valeur de saisie pour une requête sur le service d'autocompletion.\n // le resultat de la requête nous permet de recuperer les coordonnées du point...\n self.onAutoCompleteSearchText(e);\n });\n\n inputOrigin.addEventListener(\"keydown\", function (e) {\n var charCode = e.which || e.keyCode;\n\n var container = document.getElementById(self._addUID(\"GPlocationAutoCompleteResult_\" + id));\n\n // si aucun container !?\n if (!container) {\n return;\n }\n\n var curr = container.getElementsByClassName(\"GPautoCompleteProposal current\");\n var list = container.getElementsByClassName(\"GPautoCompleteProposal\");\n\n // si aucune suggestion, on ne va pas plus loin !\n var length = list.length;\n if (!length) {\n return;\n }\n\n var current = null;\n\n // si aucun item courant, on prend le 1er !\n if (!curr.length) {\n current = list[0];\n current.className = \"GPautoCompleteProposal current\";\n current.style.color = \"#000000\";\n current.style[\"background-color\"] = \"#CEDBEF\";\n return;\n } else {\n current = curr[0];\n }\n\n var index = parseInt(ID.index(current.id), 10);\n var next = (index === length - 1) ? list[0] : list[index + 1];\n var prev = (index === 0) ? list[length - 1] : list[index - 1];\n\n current.style[\"background-color\"] = \"\";\n current.style.color = \"\";\n prev.style[\"background-color\"] = \"\";\n prev.style.color = \"\";\n next.style[\"background-color\"] = \"\";\n next.style.color = \"\";\n\n switch (charCode) {\n case 38: // arrow up\n logger.log(\"arrow up\");\n current.className = \"GPautoCompleteProposal\";\n prev.className = \"GPautoCompleteProposal current\";\n prev.style.color = \"#000000\";\n prev.style[\"background-color\"] = \"#CEDBEF\";\n break;\n case 40: // arrow down\n logger.log(\"arrow down\");\n current.className = \"GPautoCompleteProposal\";\n next.className = \"GPautoCompleteProposal current\";\n next.style.color = \"#000000\";\n next.style[\"background-color\"] = \"#CEDBEF\";\n break;\n case 13: // enter\n logger.log(\"enter\");\n current.click(e);\n break;\n }\n\n current.focus();\n });\n\n return inputOrigin;\n },\n\n /**\n * Create Input Coordinate Point tag\n *\n * @param {Number} id - tag ID\n * @returns {DOMElement} DOM element\n */\n _createLocationCoordinateInputElement : function (id) {\n // contexte d'execution\n var self = this;\n\n var inputOriginCoord = document.createElement(\"input\");\n inputOriginCoord.id = this._addUID(\"GPlocationOriginCoords_\" + id);\n inputOriginCoord.className = \"GPelementHidden gpf-input gpf-hidden fr-input\";\n inputOriginCoord.type = \"text\";\n inputOriginCoord.disabled = false;\n inputOriginCoord.addEventListener(\"click\", function () {\n var i = ID.index(this.id);\n document.getElementById(self._addUID(\"GPlocationOriginLabel_\" + i)).click();\n });\n return inputOriginCoord;\n },\n\n /**\n * Create Show Pointer tag\n *\n * @param {Number} id - tag ID\n * @returns {DOMElement} DOM element\n */\n _createLocationPointerShowInputElement : function (id) {\n var inputOriginPointer = document.createElement(\"input\");\n inputOriginPointer.id = this._addUID(\"GPlocationOriginPointer_\" + id);\n inputOriginPointer.className = \"GPelementHidden gpf-hidden\";\n inputOriginPointer.type = \"checkbox\";\n\n return inputOriginPointer;\n },\n\n /**\n * Create Input Pointer tag\n *\n * @param {Number} id - tag ID\n * @returns {DOMElement} DOM element\n */\n _createLocationPointerInputElement : function (id) {\n // contexte d'execution\n var self = this;\n\n var buttonOriginPointer = document.createElement(\"button\");\n buttonOriginPointer.id = this._addUID(\"GPlocationOriginPointerImg_\" + id);\n buttonOriginPointer.htmlFor = this._addUID(\"GPlocationOriginPointer_\" + id);\n buttonOriginPointer.className = \"GPlocationOriginPointerImg gpf-btn gpf-btn-icon-pointer fr-btn\";\n buttonOriginPointer.title = \"Pointer un lieu sur la carte\";\n buttonOriginPointer.setAttribute(\"type\", \"button\");\n buttonOriginPointer.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n var i = ID.index(this.id);\n var points = document.getElementsByClassName(self._addUID(\"GPlocationPoint\"));\n var j;\n var tag;\n var id;\n for (j = 0; j < points.length; j++) {\n tag = points[j].childNodes[0].id;\n id = ID.index(tag);\n if (i !== id) {\n document.getElementById(self._addUID(\"GPlocationOriginPointer_\" + id)).checked = false;\n if (document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + id)).value === \"Pointer un lieu sur la carte\") {\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + id)).value = \"\";\n document.getElementById(self._addUID(\"GPlocationOrigin_\" + id)).className = \"GPelementShow gpf-show gpf-input fr-input\";\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + id)).className = \"GPelementHidden gpf-hidden\";\n }\n }\n }\n if (document.getElementById(self._addUID(\"GPlocationOriginPointer_\" + i)).checked) {\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).value = \"\";\n for (j = 0; j < points.length; j++) {\n tag = points[j].childNodes[0].id;\n id = ID.index(tag);\n document.getElementById(self._addUID(\"GPlocationPoint_\" + id)).style.cssText = \"\";\n }\n if (document.getElementById(self._addUID(\"GPlocationStageRemove_\" + i))) {\n document.getElementById(self._addUID(\"GPlocationStageRemove_\" + i)).className = \"GPlocationStageRemove gpf-btn gpf-btn-icon-remove fr-btn--sm fr-btn--secondary gpf-btn--secondary\";\n }\n if (document.getElementById(self._addUID(\"GPlocationStageAdd\"))) {\n document.getElementById(self._addUID(\"GPlocationStageAdd\")).className = \"GPlocationStageAdd gpf-btn gpf-btn-icon-add fr-btn--sm fr-btn--secondary gpf-btn--secondary fr-mt-2w\";\n }\n document.getElementById(self._addUID(\"GPlocationOriginPointer_\" + i)).checked = false;\n document.getElementById(self._addUID(\"GPlocationOrigin_\" + i)).className = \"GPelementShow gpf-show gpf-input fr-input\";\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).className = \"GPelementHidden gpf-hidden\";\n } else {\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).value = \"Pointer un lieu sur la carte\";\n for (j = 0; j < points.length; j++) {\n tag = points[j].childNodes[0].id;\n id = ID.index(tag);\n if (i === id) {\n document.getElementById(self._addUID(\"GPlocationPoint_\" + id)).style.cssText = \"\";\n } else {\n document.getElementById(self._addUID(\"GPlocationPoint_\" + id)).style.display = \"none\";\n }\n }\n if (document.getElementById(self._addUID(\"GPlocationStageRemove_\" + i))) {\n document.getElementById(self._addUID(\"GPlocationStageRemove_\" + i)).className = \"GPelementHidden gpf-hidden\";\n }\n if (document.getElementById(self._addUID(\"GPlocationStageAdd\"))) {\n document.getElementById(self._addUID(\"GPlocationStageAdd\")).className = \"GPelementHidden gpf-hidden\";\n }\n document.getElementById(self._addUID(\"GPlocationOriginPointer_\" + i)).checked = true;\n document.getElementById(self._addUID(\"GPlocationOrigin_\" + i)).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).className = \"GPelementShow gpf-show gpf-input fr-input\";\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).disabled = true;\n }\n // gestionnaire d'evenement :\n // on stocke la valeur du point, utilisée pour la requête sur le service de calcul d'itiniraire\n self.onActivateMapPointClick(e);\n });\n\n return buttonOriginPointer;\n },\n\n /**\n * Create Remove Point tag\n * see event !\n *\n * @param {Number} id - tag ID\n * @returns {DOMElement} DOM element\n */\n _createLocationRemovePointElement : function (id) {\n // contexte d'execution\n var self = this;\n\n var buttonRm = document.createElement(\"button\");\n buttonRm.id = this._addUID(\"GPlocationStageRemove_\" + id);\n buttonRm.className = \"GPlocationOpen GPlocationStageRemove gpf-btn gpf-btn-icon-remove fr-btn--sm fr-btn--secondary gpf-btn--secondary\";\n buttonRm.title = \"Supprimer l'étape\";\n buttonRm.setAttribute(\"tabindex\", \"0\");\n buttonRm.setAttribute(\"aria-pressed\", false);\n buttonRm.setAttribute(\"type\", \"button\");\n buttonRm.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n var points = document.getElementsByClassName(self._addUID(\"GPlocationPoint\"));\n var last = points.length - 1;\n var start = points[0].childNodes[0].id;\n var end = points[last].childNodes[0].id;\n\n var startID = ID.index(start);\n var endID = ID.index(end);\n\n if (id !== startID && id !== endID) {\n var i = ID.index(this.id);\n document.getElementById(self._addUID(\"GPlocationPoint_\" + i)).className = \"GPflexInput GPelementHidden gpf-flex gpf-hidden\";\n document.getElementById(self._addUID(\"GPlocationOrigin_\" + i)).value = \"\";\n document.getElementById(self._addUID(\"GPlocationOrigin_\" + i)).className = \"GPelementShow gpf-show gpf-input fr-input\";\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).value = \"\";\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPlocationStageAdd\")).style.display = \"\";\n document.getElementById(self._addUID(\"GPlocationPoint_\" + i)).parentElement.previousSibling.classList.add(\"GPelementHidden\", \"gpf-hidden\");\n // Moving up exclusions picto\n // var exclusionsPictoTop = document.getElementById(self._addUID(\"GPshowLocationExclusionsPicto\")).style.top;\n // document.getElementById(self._addUID(\"GPshowLocationExclusionsPicto\")).style.top = (parseInt(exclusionsPictoTop) - 33).toString() + \"px\";\n\n // gestionnaire d'evenement :\n // on supprime le point, utilisé pour la requête sur le service d'itiniraire\n self.onLocationRemovePointClick(e);\n }\n });\n\n return buttonRm;\n },\n\n /**\n * Create Add Point tag\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createLocationAddPointElement : function () {\n // contexte d'execution\n var self = this;\n\n var buttonAdd = document.createElement(\"button\");\n buttonAdd.id = this._addUID(\"GPlocationStageAdd\");\n buttonAdd.className = \"GPlocationOpen GPlocationStageAdd gpf-btn gpf-btn-icon-add fr-btn--sm fr-btn--secondary gpf-btn--secondary fr-mt-2w\";\n buttonAdd.title = \"Ajouter une étape\";\n if (checkDsfr()) {\n buttonAdd.innerText = \"Ajouter une étape\";\n }\n buttonAdd.setAttribute(\"tabindex\", \"0\");\n buttonAdd.setAttribute(\"aria-pressed\", false);\n buttonAdd.setAttribute(\"type\", \"button\");\n buttonAdd.addEventListener(\"click\", function (e) {\n var lastStage = 1;\n var nbStages = 0;\n var points = document.getElementsByClassName(self._addUID(\"GPlocationPoint\"));\n for (var i = 1; i < points.length - 1; i++) {\n var tag = points[i].childNodes[0].id;\n var id = ID.index(tag);\n if (document.getElementById(self._addUID(\"GPlocationPoint_\" + id))) {\n if (document.getElementById(self._addUID(\"GPlocationPoint_\" + id)).className === \"GPflexInput GPelementHidden gpf-flex gpf-hidden\") {\n if (lastStage === 1) {\n lastStage = id;\n }\n } else {\n nbStages++;\n }\n }\n }\n // FIXME algo à revoir : lastStage = id hors si id = 300 sur 3 points !?\n if (lastStage < points.length) {\n document.getElementById(self._addUID(\"GPlocationPoint_\" + lastStage)).className = \"GPflexInput GPlocationStageFlexInput gpf-flex\";\n document.getElementById(self._addUID(\"GPlocationPoint_\" + lastStage)).parentElement.previousSibling.classList.remove(\"GPelementHidden\", \"gpf-hidden\");\n // Moving down exclusions picto\n // var exclusionsPictoTop = document.getElementById(self._addUID(\"GPshowLocationExclusionsPicto\")).style.top;\n // document.getElementById(self._addUID(\"GPshowLocationExclusionsPicto\")).style.top = (parseInt(exclusionsPictoTop) + 33).toString() + \"px\";\n }\n if (nbStages === 4) {\n document.getElementById(self._addUID(\"GPlocationStageAdd\")).style.display = \"none\";\n }\n // gestionnaire d'evenement :\n // on ajoute le point, utilisé pour la requête sur le service d'itiniraire\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onLocationAddPointClick(e);\n });\n\n return buttonAdd;\n },\n\n _createLocationAutoCompleteElement : function (id) {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPlocationAutoCompleteList_\" + id);\n div.className = \"GPlocationAutoCompleteList GPelementHidden gpf-panel gpf-hidden fr-modal\"; // GPpanel ?\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n // div.appendChild(this._createLocationAutoCompleteResultElement ());\n\n return div;\n },\n\n /**\n * Create Results autocompletion to the point\n * see event!\n *\n * @param {Number} id - tag ID\n * @returns {DOMElement} DOM element\n */\n _createLocationAutoCompleteResultElement : function (id) {\n // contexte d'execution\n var self = this;\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPlocationAutoCompleteResult_\" + id);\n div.className = \"GPadvancedAutoCompleteResult gpf-panel__list\";\n\n if (div.addEventListener) {\n div.addEventListener(\"click\", function (e) {\n self.onAutoCompletedResultsItemClick(e);\n document.getElementById(self._addUID(\"GPlocationAutoCompleteList_\" + id)).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPlocationAutoCompleteList_\" + id)).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n }, false);\n } else if (div.attachEvent) {\n div.attachEvent(\"onclick\", function (e) {\n self.onAutoCompletedResultsItemClick(e);\n document.getElementById(self._addUID(\"GPlocationAutoCompleteList_\" + id)).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPlocationAutoCompleteList_\" + id)).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n });\n }\n\n return div;\n },\n\n /**\n * Autocompletion result to a point.\n * Proposals are dynamically filled in Javascript by autocomplete service\n *\n * TODO formaliser le contenu des reponse\n *\n * @param {Number} id - tag ID\n * @param {Object} location - suggested location result\n * @param {Number} n - number of the point\n */\n _createLocationAutoCompletedLocationElement : function (id, location, n) {\n var container = document.getElementById(this._addUID(\"GPlocationAutoCompleteResult_\" + id));\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"AutoCompletedLocation_\" + n);\n div.className = \"GPautoCompleteProposal gpf-panel__items\";\n div.innerHTML = GeocodeUtils.getSuggestedLocationFreeform(location);\n\n container.appendChild(div);\n },\n\n /**\n * Display Coordinate\n * @param {String} value - a Coordinate\n */\n GPdisplayCoordinate : function (value) {\n var points = document.getElementsByClassName(this._addUID(\"GPlocationPoint\"));\n for (var i = 0; i < points.length; i++) {\n var tag = points[i].childNodes[0].id;\n var id1 = ID.index(tag);\n if (document.getElementById(this._addUID(\"GPlocationOriginPointer_\" + id1)).checked) {\n document.getElementById(this._addUID(\"GPlocationOriginCoords_\" + id1)).value = value;\n document.getElementById(this._addUID(\"GPlocationOriginCoords_\" + id1)).disabled = false;\n for (var j = 0; j < points.length; j++) {\n tag = points[j].childNodes[0].id;\n var id2 = ID.index(tag);\n document.getElementById(this._addUID(\"GPlocationPoint_\" + id2)).style.cssText = \"\";\n if (document.getElementById(this._addUID(\"GPlocationStageRemove_\" + id2))) {\n document.getElementById(this._addUID(\"GPlocationStageRemove_\" + id2)).className = \"GPlocationStageRemove gpf-btn gpf-btn-icon-remove fr-btn--sm fr-btn--secondary gpf-btn--secondary\";\n }\n }\n document.getElementById(this._addUID(\"GPlocationOriginPointer_\" + id1)).checked = false;\n if (document.getElementById(this._addUID(\"GPlocationStageAdd\"))) {\n document.getElementById(this._addUID(\"GPlocationStageAdd\")).className = \"GPlocationStageAdd gpf-btn gpf-btn-icon-add fr-btn--sm\";\n }\n return;\n }\n }\n }\n};\n\nexport default LocationSelectorDOM;\n","// import CSS\nimport \"../../CSS/Controls/LocationSelector/GPFlocation.css\";\n// import \"../../CSS/Controls/LocationSelector/GPFlocationStyle.css\";\n// import OpenLayers\nimport Control from \"ol/control/Control\";\nimport Overlay from \"ol/Overlay\";\nimport { transform as olTransformProj } from \"ol/proj\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Utils from \"../../Utils/Helper\";\nimport GeocodeUtils from \"../../Utils/GeocodeUtils\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Markers from \"../Utils/Markers\";\n// DOM\nimport LocationSelectorDOM from \"./LocationSelectorDOM\";\n\nvar logger = Logger.getLogger(\"locationselector\");\n\n/**\n * @classdesc\n *\n * LocationSelector component. Enables to select a location, using autocompletion or picking location on the map\n * @constructor\n * @extends {ol.control.Control}\n * @alias ol.control.LocationSelector\n * @type {ol.control.LocationSelector}\n * @param {Object} [options] - component options\n * @param {String} [options.apiKey] - API key for autocomplete service call. The key \"calcul\" is used by default.\n * @param {Boolean} [options.ssl = true] - use of ssl or not (default true, service requested using https protocol)\n * @param {Boolean} [options.displayInfo = true] - whether to display info in a popup or not (not implemented yet) Default is true\n * @param {Object} [options.tag] - tag options\n * @param {Number} [options.tag.id = 1] - order id number in a locations group, in case several LocationSelector are used. For instance in route case : departure tag id should be 0, arrival tag id should be 1, and other ones : 2, 3, ...\n * @param {Number} [options.tag.groupId = null] - locationSelector global component id (in case locationSelector is called by another graphic component, e.g. route control)\n * @param {String} [options.tag.label] - text to display in component (e.g. \"Departure\"). Default is \">\"\n * @param {Object} [options.tag.markerOpts] - options to use your own marker. Default is a lightOrange marker.\n * @param {String} [options.tag.markerOpts.url] - marker base64 encoded url (ex \"data:image/png;base64,...\"\"). Mandatory for a custom marker\n * @param {Array} [options.tag.markerOpts.offset] - Offsets in pixels used when positioning the overlay. The first element in the array is the horizontal offset. A positive value shifts the overlay right. The second element in the array is the vertical offset. A positive value shifts the overlay down. Default is [0, 0]. (see {@link http://openlayers.org/en/latest/apidoc/ol.Overlay.html ol.Overlay})\n * @param {Boolean} [options.tag.display = true] - whether to display or hide component. Default is true\n * @param {Boolean} [options.tag.addOption = false] - whether to display picto to add another LocationSelector (in case of route control)\n * @param {Boolean} [options.tag.removeOption = false] - whether to display picto to remove a LocationSelector (in case of route control)\n * @param {Object} [options.autocompleteOptions] - autocomplete service options (see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~autoComplete Gp.Services.autoComplete()} to know all autocomplete options)\n * @example\n * var locationselector = new LocationSelector({\n * apiKey : \"\",\n * tag : {\n * id : 1,\n * groupId : null,\n * label : \"Départ\",\n * markerOpts : {\n * url : \"...\",\n * offset : [0,0]\n * },\n * display : true\n * },\n * autocompleteOptions : {}\n * });\n */\nvar LocationSelector = class LocationSelector extends Control {\n\n /**\n * See {@link ol.control.LocationSelector}\n * @module LocationSelector\n * @alias module:~controls/LocationSelector\n * @param {*} options - options\n * @example\n * import LocationSelector from \"gpf-ext-ol/controls/LocationSelector\"\n * ou \n * import { LocationSelector } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n super({\n element : options.element || document.createElement(\"div\"),\n render : options.render,\n target : options.target\n });\n\n if (!(this instanceof LocationSelector)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"LocationSelector\";\n // initialisation du composant\n this.initialize(options);\n\n // creation du DOM\n this._container = this._initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n }\n\n /**\n * initialize component\n *\n * @param {Object} options - options\n */\n initialize (options) {\n // set default options\n this.options = {\n tag : {\n id : 1, // numero d'ordre sur un groupe de locations\n groupId : null, // id du composant global contenant le LocationSelector\n label : \">\",\n display : true,\n addOption : false,\n removeOption : false\n },\n displayInfo : true,\n autocompleteOptions : {}\n };\n\n // merge with user options\n Utils.mergeParams(this.options, options);\n\n /** uuid */\n this._uid = this.options.tag.groupId || SelectorID.generate();\n // info : si un uid (groupId) est spécifié\n // (par ex si ce composant est appélé par un autre composant graphique)\n // alors on le récupère, sinon c'est qu'il est indépendant : on génère donc un uuid\n\n /** container map */\n this._map = null;\n\n /** container principal des entrées */\n this._inputsContainer = null;\n\n /** container du label du point */\n this._buttonLabel = null;\n\n /** container de la saisi de l'autocompletion */\n this._inputAutoComplete = null;\n\n /** container du pointer de saisi sur la carte */\n this._inputShowPointerContainer = null;\n\n /** label du pointer de saisi sur la carte (avec img) */\n this._inputShowPointer = null;\n\n /** container des coordonnées */\n this._inputCoordinateContainer = null;\n\n /** elements pour ajouter ou supprimer un nouveau point */\n this._addPointElement = null;\n this._removePointElement = null;\n\n /** coordonnées du point selectionné, en EPSG:4326 */\n this._coordinate = null;\n\n /** container des reponses de l'autocompletion */\n this._suggestedContainer = null;\n this._suggestedList = null;\n\n /** listes des reponses de l'autocompletion */\n this._suggestedLocations = [];\n\n /** localisant */\n this._currentLocation = null;\n\n /** marker */\n this._initMarker();\n\n /** ressources du services d'autocompletion (ayant droit!) */\n this._resources = {};\n\n // listener key for event click on map\n this.listenerKey = null;\n }\n\n /**\n * initialize marker : url and offset\n *\n * @private\n */\n _initMarker () {\n // init marker properties\n this._marker = null;\n this._markerUrl = \"\";\n this._markerOffset = [0, 0];\n\n if (this.options.tag.markerOpts && this.options.tag.markerOpts.url) {\n // get marker src url\n this._markerUrl = this.options.tag.markerOpts.url;\n\n // get marker offset\n var offset = this.options.tag.markerOpts.offset;\n if (offset) {\n if (Array.isArray(offset) && offset.length === 2) {\n this._markerOffset = offset;\n } else {\n logger.log(\"markerOpts.offset should be an array. e.g. : [0,0]\");\n }\n }\n } else {\n // set default options for marker\n this._markerUrl = Markers[\"lightOrange\"];\n this._markerOffset = Markers.defaultOffset;\n }\n }\n\n // ################################################################### //\n // ########################## publics methods ######################## //\n // ################################################################### //\n\n /**\n * get coordinate\n *\n * @returns {Array} this._coordinate - point coordinate (EPSG:4326) : [lon, lat]\n */\n getCoordinate () {\n return this._coordinate;\n }\n\n /**\n * set coordinate\n * @param {Object} coordinate - Coordinate in the map projection by default, otherwise, the projection is entered in the following parameter\n * @param {String} crs - Coordinate projection\n */\n setCoordinate (coordinate, crs) {\n var map = this.getMap();\n var proj = map.getView().getProjection().getCode();\n // on utilise la projection de la carte\n if (!crs) {\n crs = proj;\n }\n\n this._setCoordinate(coordinate, crs);\n\n // on utilise toujours la projection de la carte pour placer le marker\n coordinate = olTransformProj(coordinate, crs, proj);\n this._setMarker([\n coordinate[0],\n coordinate[1]\n ], null, false);\n }\n\n /**\n * clean all and input\n */\n clear () {\n this.clearResults();\n this._buttonLabel.click();\n }\n\n /**\n * clear all results and the marker.\n */\n clearResults () {\n this._currentLocation = null;\n this._coordinate = null;\n this._hideSuggestedLocation();\n this._clearSuggestedLocation();\n this._setMarker();\n // map.un(\"click\", (e) => this.onMouseMapClick(e));\n olObservableUnByKey(this.listenerKey);\n }\n\n // ################################################################### //\n // ##################### init component (private) #################### //\n // ################################################################### //\n\n /**\n * initialize component container\n *\n * @returns {DOMElement} DOM element\n */\n _initContainer () {\n var id = this.options.tag.id;\n\n // create main container\n var container = this._createMainContainerElement();\n\n var inputs = this._inputsContainer = this._createLocationPointElement(id, this.options.tag.display);\n container.appendChild(inputs);\n\n var _buttonLabel = this._buttonLabel = this._createLocationPointLabelElement(id, this.options.tag.label);\n inputs.appendChild(_buttonLabel);\n var _inputAutoComplete = this._inputAutoComplete = this._createLocationAutoCompleteteInputElement(id);\n if (_inputAutoComplete.addEventListener) {\n _inputAutoComplete.addEventListener(\"click\", () => this.onAutoCompleteInputClick());\n } else if (_inputAutoComplete.attachEvent) {\n _inputAutoComplete.attachEvent(\"onclick\", () => this.onAutoCompleteInputClick());\n }\n inputs.appendChild(_inputAutoComplete);\n var _inputCoordinate = this._inputCoordinateContainer = this._createLocationCoordinateInputElement(id);\n inputs.appendChild(_inputCoordinate);\n var _inputShowPointer = this._inputShowPointerContainer = this._createLocationPointerShowInputElement(id);\n inputs.appendChild(_inputShowPointer);\n var _inputPointer = this._inputShowPointer = this._createLocationPointerInputElement(id);\n inputs.appendChild(_inputPointer);\n\n if (this.options.tag.addOption) {\n var _inputAddStage = this._addPointElement = this._createLocationAddPointElement();\n inputs.appendChild(_inputAddStage);\n }\n\n if (this.options.tag.removeOption) {\n var _inputRemoveStage = this._removePointElement = this._createLocationRemovePointElement(id);\n inputs.appendChild(_inputRemoveStage);\n }\n\n var resultsPanel = this._suggestedContainer = this._createLocationAutoCompleteElement(id);\n var results = this._suggestedList = this._createLocationAutoCompleteResultElement(id);\n resultsPanel.appendChild(results);\n container.appendChild(resultsPanel);\n\n return container;\n }\n\n // ################################################################### //\n // ###################### handlers events (dom) ###################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on 'GPlocationOrigin' input\n *\n * @private\n */\n onAutoCompleteInputClick () {\n if (this._inputAutoComplete && this._inputAutoComplete.value.length > 2) {\n this._displaySuggestedLocation();\n }\n }\n\n /**\n * this method is called by event 'keyup' on 'GProuteOrigin' tag input\n * (cf. this._createRouteAutoCompleteteInputElement), and it gets the value of input.\n * this value is passed as a parameter for the service autocomplete (text).\n * the results of the request are displayed into a drop down menu.\n * FIXME\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onAutoCompleteSearchText (e) {\n var value = e.target.value;\n if (!value) {\n return;\n }\n\n // on recupere les options du service\n var serviceOptions = this.options.autocompleteOptions || {};\n var _customOnSuccess = serviceOptions.onSuccess || null;\n var _customOnFailure = serviceOptions.onFailure || null;\n\n // on sauvegarde le localisant\n this._currentLocation = value;\n\n // on limite les requêtes à partir de 3 car. saisie !\n if (value.length < 3) {\n this._clearSuggestedLocation();\n return;\n }\n\n // INFORMATION\n // on effectue la requête au service d'autocompletion.\n // on met en place des callbacks afin de recuperer les resultats ou\n // les messages d'erreurs du service.\n // les resultats sont affichés dans une liste deroulante.\n // les messages d'erreurs sont affichés sur la console (?)\n var context = this;\n this._requestAutoComplete({\n text : value,\n maximumResponses : 5, // FIXME je limite le nombre de reponse car le container DOM est limité dans l'affichage !!!\n // callback onSuccess\n onSuccess : function (results) {\n if (results) {\n var locations = results.suggestedLocations;\n context._fillAutoCompletedLocationListContainer(locations);\n if (_customOnSuccess) {\n _customOnSuccess.call(this, results);\n }\n }\n },\n // callback onFailure\n onFailure : function (error) {\n // FIXME\n // où affiche t on les messages : ex. 'No suggestion matching the search' ?\n // doit on nettoyer la liste des suggestions dernierement enregistrée :\n context._clearSuggestedLocation();\n logger.log(error.message);\n if (_customOnFailure) {\n _customOnFailure.call(this, error);\n }\n }\n });\n\n var map = this.getMap();\n map.on(\n \"click\",\n () => this._hideSuggestedLocation()\n );\n map.on(\n \"pointerdrag\",\n () => this._hideSuggestedLocation()\n );\n }\n\n /**\n * this method is called by event 'click' on 'GPautoCompleteResultsList' tag div\n * (cf. this._createAutoCompleteListElement), and it selects the location.\n * this location displays a marker on the map.\n * FIXME\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onAutoCompletedResultsItemClick (e) {\n var idx = SelectorID.index(e.target.id);\n\n if (!idx) {\n return;\n }\n\n // FIXME\n // les coordonnées sont inversées entre les 2 services !?\n // AutoCompletion : lon/lat (\"EPSG:4326\")\n // Geocoding : lat/lon\n var position = [\n this._suggestedLocations[idx].position.x,\n this._suggestedLocations[idx].position.y\n ];\n // on sauvegarde le point courant (en EPSG:4326, [lon, lat])\n this._coordinate = position;\n\n var info = {\n type : this._suggestedLocations[idx].type,\n fields : this._suggestedLocations[idx]\n };\n\n // on ajoute le texte de l'autocomplétion dans l'input\n var label = GeocodeUtils.getSuggestedLocationFreeform(this._suggestedLocations[idx]);\n this._setLabel(label);\n\n // Info : la position est en EPSG:4326, à transformer dans la projection de la carte\n var view = this.getMap().getView();\n var mapProj = view.getProjection().getCode();\n if (mapProj !== \"EPSG:4326\") {\n // on retransforme les coordonnées de la position dans la projection de la carte\n position = olTransformProj(position, \"EPSG:4326\", mapProj);\n }\n // on centre la vue et positionne le marker, à la position reprojetée dans la projection de la carte\n this._setPosition(position);\n this._setMarker(position, info, this.options.displayInfo);\n }\n\n /**\n * this method is called by event 'click' on 'GProuteOriginPointerImg' tag input\n * (cf. this._createRoutePointerInputElement), and it create or remove the event of click map.\n *\n * @private\n */\n onActivateMapPointClick () {\n var map = this.getMap();\n\n if (this._inputShowPointerContainer.checked) {\n // on efface l'ancien resultat\n this.clearResults();\n this.listenerKey = map.on(\n \"click\",\n (e) => this.onMouseMapClick(e)\n );\n this._setCursor(\"crosshair\");\n } else {\n // map.un(\"click\", (e) => this.onMouseMapClick(e));\n olObservableUnByKey(this.listenerKey);\n this._setCursor();\n }\n }\n\n /**\n * this method is called by event 'click' on 'GProuteOriginLabel' tag label\n * (cf. this._createRoutePointLabelElement).\n * this point is erased.\n *Missing\n * @private\n */\n onLocationClearPointClick () {\n this._setCursor();\n this.clearResults();\n }\n\n /**\n * this method is called by event 'click' on 'GProuteStageRemove' tag input\n * (cf. this._createRouteRemovePointElement).\n * this point is deleted\n *\n * @private\n */\n onLocationRemovePointClick () {\n this._setCursor();\n this.clearResults();\n }\n\n /**\n * TODO this method is called by event 'click' on 'GProuteStageAdd' tag input\n * (cf. this._createRouteAddPointElement).\n * this point is added as a parameter for the service route.\n *\n * @param {Object} e - HTMLElement\n */\n onLocationAddPointClick (e) {\n logger.log(\"onRouteAddPointClick\", e);\n }\n\n // ################################################################### //\n // #################### handlers events (control) #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on map\n * (cf. this.onRouteMapPointClick), and it gets the coordinate of click on map.\n * this point is saved as a parameter for the service route.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onMouseMapClick (e) {\n var coordinate = e.coordinate;\n if (!e.map || !e.map.getView()) {\n return;\n }\n var crs = e.map.getView().getProjection();\n\n this._setCoordinate(coordinate, crs);\n\n this._setMarker([\n coordinate[0],\n coordinate[1]\n ], null, false);\n\n // on desactive l'event sur la map !\n this.onActivateMapPointClick(e);\n }\n\n // ################################################################### //\n // ################# pivates methods use by events ################### //\n // ################################################################### //\n\n /**\n * this sends the label to the panel.\n *\n * @param {String} label - label suggested location\n * @private\n */\n _setLabel (label) {\n this._inputAutoComplete.value = label;\n }\n\n /**\n * this change the cursor of the map when entering a point.\n *\n * @param {String} cursor - cursor style\n * @private\n */\n _setCursor (cursor) {\n var map = this.getMap();\n var div = map.getTargetElement();\n\n if (cursor) {\n div.style.cursor = cursor;\n } else {\n div.style.cursor = null;\n }\n }\n\n /**\n * this sends the coordinates to the panel.\n *\n * @method _setCoordinate\n * @param {Array} olCoordinate - ol.Coordinate object [lon, lat] ou [x, y] (proj = map proj system)\n * @param {Object} crs - coordinate CRS (ol.proj.Projection)\n * @private\n */\n _setCoordinate (olCoordinate, crs) {\n // structure\n // ol.Coordinate\n // [\n // 4 // lon ou x\n // 48 // lat ou y\n // ]\n\n // on transforme olCoodinate (dont la projection est celle de la carte) en EPSG:4326\n this._coordinate = olTransformProj(olCoordinate, crs, \"EPSG:4326\");\n\n // INFO : si on veut des DMS\n // var coords = ol.coordinate.toStringHDMS(this._coordinate, 2).split(\"N \");\n // // coords est du type : \"48° 00′ 00″ N 2° 00′ 00″ E\". On veut récupérer les 2 coordonnées séparément.\n // var lat = coords[0] + \"N\";\n // var lng = coords[1];\n\n // Pour avoir des degrés décimaux :\n var lat = this._coordinate[0].toFixed(4);\n var lng = this._coordinate[1].toFixed(4);\n\n var value = lng + \" / \" + lat;\n this.GPdisplayCoordinate(value);\n }\n\n /**\n * this method is called by this.on*ResultsItemClick()\n * and set center at given position.\n *\n * @param {Array} position - ol.Coordinate object [lon, lat] (en lat/lon : \"EPSG:4326\")\n * @private\n */\n _setPosition (position) {\n var view = this.getMap().getView();\n view.setCenter(position);\n }\n\n /**\n * this method is called by this.on*ResultsItemClick()\n * and displays a marker.\n * FIXME : marker IGN et informations ?\n *\n * @param {Array} position - ol.Coordinate object [lon, lat] ou [x, y]\n * @param {Object} information - suggested or geocoded information\n * @param {Boolean} display - display a popup information\n * @private\n */\n _setMarker (position, information, display) {\n var map = this.getMap();\n // remove previous markers\n if (this._marker != null) {\n map.removeOverlay(this._marker);\n this._marker = null;\n }\n\n if (position) {\n var markerDiv = document.createElement(\"img\");\n markerDiv.src = this._markerUrl;\n this._marker = new Overlay({\n position : position,\n offset : this._markerOffset,\n element : markerDiv,\n stopEvent : false\n });\n map.addOverlay(this._marker);\n\n if (display) {\n logger.log(\"marker information : \", information);\n }\n // // FIXME\n // // doit on mettre une information\n // // - correctement construite ?\n // // - uniquement informatif ?\n // // - RIEN ?\n // if (display) {\n // var popupContent = null;\n //\n // var values = [];\n //\n // values.push(information.fields.fullText || \"\");\n // values.push(information.fields.street || \"\");\n // values.push(information.fields.postalCode || \"\");\n // values.push(information.fields.commune || \"\");\n //\n // if (information.type === \"PositionOfInterest\") {\n // values.push(information.fields.poi || \"\");\n // values.push(information.fields.kind || \"\");\n // }\n //\n // popupContent = values.join(\" | \");\n //\n // this._marker.bindPopup(popupContent);\n // }\n }\n }\n\n /**\n * this method is called by this.onAutoCompleteSearchText()\n * and it clears all suggested location.\n *\n * @private\n */\n _clearSuggestedLocation () {\n // suppression du dom\n this._suggestedLocations = [];\n if (this._suggestedList) {\n while (this._suggestedList.firstChild) {\n this._suggestedList.removeChild(this._suggestedList.firstChild);\n }\n }\n }\n\n /**\n * this method is called by event 'click' on map\n * and it hide suggested locations\n *\n * @private\n */\n _hideSuggestedLocation () {\n if (this._suggestedContainer) {\n this._suggestedContainer.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n this._suggestedContainer.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n }\n\n /**\n * this method is called by this.onAutoCompleteSearchText()\n * and it clears all suggested location.\n *\n * @private\n */\n _displaySuggestedLocation () {\n if (this._suggestedContainer) {\n this._suggestedContainer.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n this._suggestedContainer.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n }\n }\n\n /**\n * this method is called by this.onAutoCompleteSearch()\n * and executes a request to the service.\n *\n * @param {Object} settings - service settings\n * @param {String} settings.text - text\n * @param {Function} settings.onSuccess - callback\n * @param {Function} settings.onFailure - callback\n * @private\n */\n _requestAutoComplete (settings) {\n logger.log(\"_requestAutoComplete()\", settings);\n\n // on ne fait pas de requête si on n'a pas renseigné de parametres !\n if (!settings || Object.keys(settings).length === 0) {\n return;\n }\n\n // on ne fait pas de requête si la parametre 'text' est vide !\n if (!settings.text) {\n return;\n }\n\n logger.log(settings);\n\n var options = {};\n // on recupere les options du service\n Utils.assign(options, this.options.autocompleteOptions);\n // ainsi que la recherche et les callbacks\n Utils.assign(options, settings);\n\n // les ressources\n var resources = this._resources[\"AutoCompletion\"] || null;\n if (resources && Array.isArray(resources)) {\n if (!options.filterOptions) {\n options.filterOptions = {};\n }\n options.filterOptions.type = resources;\n }\n\n // cas où la clef API n'est pas renseignée dans les options du service,\n // on utilise celle renseignée au niveau du controle ou la clé \"calcul\" par défaut.\n options.apiKey = options.apiKey || this.options.apiKey;\n\n // si l'utilisateur a spécifié le paramètre ssl au niveau du control, on s'en sert\n // true par défaut (https)\n if (typeof options.ssl !== \"boolean\") {\n if (typeof this.options.ssl === \"boolean\") {\n options.ssl = this.options.ssl;\n } else {\n options.ssl = true;\n }\n }\n\n logger.log(options);\n\n Gp.Services.autoComplete(options);\n }\n\n /**\n * this method is called by this.onAutoCompleteSearchText()\n * and fills the container of the location list.\n * it creates a HTML Element per location\n * (cf. this. ...)\n *\n * @param {Object[]} locations - locations\n *\n * @private\n */\n _fillAutoCompletedLocationListContainer (locations) {\n if (!locations || locations.length === 0) {\n return;\n }\n\n // on vide la liste avant de la construire\n var element = this._suggestedList;\n if (element.childElementCount) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n\n for (var i = 0; i < locations.length; i++) {\n // Proposals are dynamically filled in Javascript by autocomplete service\n this._createLocationAutoCompletedLocationElement(this.options.tag.id, locations[i], i);\n }\n\n // sauvegarde de l'etat des locations\n this._suggestedLocations = locations;\n }\n\n};\n\n// on récupère les méthodes de la classe DOM\nObject.assign(LocationSelector.prototype, LocationSelectorDOM);\n\nexport default LocationSelector;\n\n// Expose LocationSelector as ol.control.LocationSelector (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.LocationSelector = LocationSelector;\n}\n","var ExportDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this.uid) ? id + \"-\" + this.uid : id;\n return uid;\n }\n};\n\nexport default ExportDOM;\n","// import CSS\nimport \"../../CSS/Controls/Export/GPFexport.css\";\n// import \"../../CSS/Controls/Export/GPFexportStyle.css\";\n\n// import OpenLayers\nimport Widget from \"../Widget\";\nimport Control from \"ol/control/Control\";\n\n// import local\nimport ID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\n\n// import local with ol dependencies\nimport KMLExtended from \"../../Formats/KML\";\nimport GeoJSONExtended from \"../../Formats/GeoJSON\";\nimport GPXExtended from \"../../Formats/GPX\";\n\n// DOM\nimport ExportDOM from \"./ExportDOM\";\n\nvar logger = Logger.getLogger(\"export\");\n\n/**\n * @classdesc\n *\n * Export button\n *\n * @constructor\n * @alias ol.control.Export\n * @param {Object} options - options for function call.\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {String} [options.format = \"geojson\"] - geojson / kml / gpx\n * @param {String} [options.name = \"export\"] - export name\n * @param {String} [options.title = \"Exporter\"] - button name\n * @param {Boolean} [options.menu = false] - displays the format choice menu\n * @param {Function} [options.onExport] - callback\n * @param {DOMElement} [options.target] - target\n * @param {Object} options.control - instance of control\n * @fires export:compute\n * @example\n * // pluggued widget Export into control Isocurve\n * var iso = new ol.control.Isocurve();\n * map.addControl(iso);\n *\n * // method : call render()\n * var export = new ButtonExport();\n * export.setControl(iso);\n * export.setTarget();\n * export.setName(\"export\");\n * export.setFormat(\"geojson\");\n * export.setTitle(\"Exporter\");\n * export.setMenu(false);\n * export.render(); // <-- direct call to render function !\n * export.on(\"export:compute\", (data) => { console.log(data); });\n *\n * // method : call map.addControl()\n * var export = new ButtonExport();\n * export.setControl(iso);\n * export.setTarget();\n * export.setName(\"export\");\n * export.setFormat(\"geojson\");\n * export.setTitle(\"Exporter\");\n * export.setMenu(false);\n * export.on(\"export:compute\", (data) => { console.log(data); });\n * map.addControl(export); // <-- using the OpenLayers mechanism, don't call to render function !\n *\n * // use control options instead of setters\n * var export = new ButtonExport({\n * control : iso,\n * target : ,\n * name : \"export\",\n * format : \"geojson\",\n * title : \"Exporter\",\n * menu : false\n * });\n * map.addControl(export);\n *\n * // method with passing option into the control Isocurve\n * var iso = new ol.control.Isocurve({ export : true });\n * // with control options :\n * var iso = new ol.control.Isocurve({ export : {\n * name : \"export\",\n * format : \"geojson\",\n * title : \"Exporter\",\n * menu : false\n * }});\n */\nclass ButtonExport extends Control {\n\n /**\n * See {@link ol.control.Export}\n * @module ButtonExport\n * @alias module:~controls/ButtonExport\n * @param {Object} [options] - options\n * @example\n * import ButtonExport from \"gpf-ext-ol/controls/ButtonExport\"\n * ou \n * import { ButtonExport } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {\n control : null,\n target : null,\n format : \"geojson\",\n name : \"export\",\n title : \"Exporter\",\n menu : false,\n onExport : null\n };\n\n logger.trace(\"[constructor] Export\", options);\n\n super({\n element : document.createElement(\"div\"),\n render : options.render,\n target : options.target\n });\n\n if (!(this instanceof ButtonExport)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"Export\";\n /**\n * Response to the export of the route calculation\n * (only for jsdoc)\n *\n * @example\n * // GeoJSON format\n * {\n * \"type\":\"FeatureCollection\",\n * \"features\":[...],\n * \"geoportail:compute\":{\n * \"points\":[ [2.588024210134887, 48.84192678293002 ] ],\n * \"transport\":\"Voiture\",\n * \"exclusions\":[...],\n * \"computation\":\"fastest\",\n * \"results\":{ }\n * }\n *\n * @see {@link https://ignf.github.io/geoportal-access-lib/latest/jsdoc/Gp.Services.RouteResponse.html|Service}\n */\n // eslint-disable-next-line no-undef\n this.EXPORT_ROUTE = {};\n\n /**\n * Response to the export of the isochron calculation\n * (only for jsdoc)\n *\n * @example\n * // GeoJSON format\n * {\n * \"type\":\"FeatureCollection\",\n * \"features\":[...],\n * \"geoportail:compute\":{\n * \"transport\":\"Pieton\",\n * \"computation\":\"time\",\n * \"exclusions\":[\n *\n * ],\n * \"direction\":\"departure\",\n * \"point\":[ 2.587835382718464, 48.84192678293002 ],\n * \"results\":{\n * \"message\":\"\",\n * \"id\":\"\",\n * \"location\":{\n * \"x\":\"2.587835382718464\",\n * \"y\":\"48.84192678293002\"\n * },\n * \"srs\":\"EPSG:4326\",\n * \"geometry\":{\n * \"type\":\"Polygon\",\n * \"coordinates\":[[...]]\n * },\n * \"time\":180,\n * \"distance\":\"\"\n * }\n * }\n * }\n *\n * @see {@link https://ignf.github.io/geoportal-access-lib/latest/jsdoc/Gp.Services.IsoCurveResponse.html|Service}\n */\n // eslint-disable-next-line no-undef\n this.EXPORT_ISOCHRON = {};\n\n /**\n * Response to the export of the profile calculation\n * (only for jsdoc)\n *\n * @example\n * // GeoJSON format\n * {\n * \"type\":\"FeatureCollection\",\n * \"features\":[...],\n * \"geoportail:compute\":{\n * \"greaterSlope\":76,\n * \"meanSlope\":7,\n * \"distancePlus\":84,\n * \"distanceMinus\":48,\n * \"ascendingElevation\":5,\n * \"descendingElevation\":-4,\n * \"altMin\":\"92,04\",\n * \"altMax\":\"96,71\",\n * \"distance\":163,\n * \"unit\":\"m\",\n * \"points\":[\n * {\n * \"z\":95.68,\n * \"lon\":2.5874,\n * \"lat\":48.8419,\n * \"acc\":2.5,\n * \"dist\":0,\n * \"slope\":0\n * }\n * ]\n * }\n * }\n *\n * @see {@link https://ignf.github.io/geoportal-access-lib/latest/jsdoc/Gp.Services.AltiResponse.html|Service}\n */\n // eslint-disable-next-line no-undef\n this.EXPORT_PROFILE = {};\n\n // id unique\n this.uid = options.id || ID.generate();\n\n // export\n this.extension = null;\n this.mimeType = null;\n\n // dom\n this.container = null;\n this.button = null;\n this.menu = null;\n this.icon = \"\\u2630 \";\n this.menuClassHidden = \"GPelementHidden gpf-hidden\";\n\n this.initOptions(options);\n this.initContainer();\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Render DOM\n *\n * @public\n */\n render () {\n // container principal\n if (!this.options.target) {\n if (this.options.control) {\n // insertion du composant dans le panneau du controle\n var container = this.options.control.getContainer();\n // ex. GP(iso|route)Panel-\n this.options.target = container.lastChild;\n }\n }\n if (this.container) {\n this.options.target.appendChild(this.container);\n }\n }\n\n // ################################################################### //\n // #################### privates methods ############################# //\n // ################################################################### //\n\n /**\n * Initialize options\n * (called by constructor)\n *\n * @param {Object} options - options\n * @private\n */\n initOptions (options) {\n // options\n this.options = options;\n\n if (this.options.control) {\n // ...\n }\n\n if (this.options.target) {\n // ...\n }\n\n var format = this.options.format;\n (format) ? this.setFormat(format) : this.setFormat(\"\");\n\n if (!this.options.name) {\n this.setName(\"export\");\n }\n\n if (!this.options.title) {\n this.setTitle(\"Exporter\");\n }\n\n if (this.options.menu === undefined) {\n this.setMenu(false);\n }\n }\n\n /**\n * Initialize container\n * (called by constructor)\n *\n * @private\n * @todo menu des options\n */\n initContainer () {\n // TODO\n // menu des options de l'export :\n // * [ nom ]\n // * format\n // https://www.w3schools.com/howto/howto_css_dropdown.asp\n // https://www.w3schools.com/howto/howto_css_custom_checkbox.asp\n\n // afficher l'icone du menu\n var title = this.options.title;\n if (this.options.menu) {\n title = this.icon + this.options.title;\n }\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPexportContainer\");\n div.className = \"GPexportMenuContainer\";\n\n // bouton Exporter\n // utiliser les templates literals avec la substitution ${...}\n var button = this.stringToHTML(`\n \n `);\n\n // add event click button\n this.button = button.firstChild;\n if (this.button) {\n this.button.addEventListener(\"click\", (e) => this.onClickButtonExport(e));\n }\n div.appendChild(button.firstChild);\n\n // menu des options\n // utiliser les templates literals avec la substitution ${...}\n var menu = this.stringToHTML(`\n
\n \n \n \n
\n `);\n\n this.menu = menu.firstChild;\n if (this.menu) {\n if (this.options.menu) {\n var className = this.menu.className;\n this.menu.className = className.replace(this.menuClassHidden, \"\");\n }\n var radios = this.menu.querySelectorAll(`input[type=radio][name=\"format\"]`);\n radios.forEach((radio) => {\n // radio checked par defaut\n if (radio.id.toUpperCase().includes(this.options.format.toUpperCase())) {\n radio.checked = true;\n }\n // ecouteur pour changer de format\n radio.addEventListener(\"change\", (e) => {\n this.setFormat(e.target.value);\n });\n });\n }\n div.appendChild(menu.firstChild);\n\n this.container = div;\n }\n\n /**\n * ...\n *\n * @param {String} str - ...\n * @returns {DOMElement} - ...\n * @private\n */\n stringToHTML (str) {\n var support = function () {\n if (!window.DOMParser) {\n return false;\n }\n var parser = new DOMParser();\n try {\n parser.parseFromString(\"x\", \"text/html\");\n } catch (err) {\n return false;\n }\n return true;\n };\n\n // If DOMParser is supported, use it\n if (support()) {\n var parser = new DOMParser();\n var doc = parser.parseFromString(str, \"text/html\");\n return doc.body;\n }\n\n // Otherwise, fallback to old-school method\n var dom = document.createElement(\"div\");\n dom.innerHTML = str;\n return dom;\n }\n\n /**\n * ...\n * @returns {Boolean} - ...\n * @private\n */\n isPluggableControl () {\n // tester toutes les méthodes des widgets pluggable\n // la méthode getData() n'est pas obligatoire car certains widgets\n // n'ont pas de configuration.\n if (this.options.control &&\n typeof this.options.control.getContainer === \"function\" &&\n typeof this.options.control.getLayer === \"function\") {\n return true;\n }\n return false;\n }\n\n /**\n * ...\n * @param {Object} layer - ...\n * @param {Object} [data] - ...\n * @param {Object} [style] - ...\n * @returns {String} - ...\n * @private\n */\n exportFeatures (layer, data, style) {\n var result = null;\n if (!layer) {\n logger.warn(\"Impossible to export : no layer is hosting features.\");\n return result;\n }\n if (!layer.getSource() ||\n !layer.getSource().getFeatures() ||\n !layer.getSource().getFeatures().length) {\n logger.warn(\"Impossible to export : no features found.\");\n return result;\n }\n\n // INFO\n // les styles sont bien transmis pour l'outil de dessin\n // mais, ce n'est pas toujours le cas pour certains widgets !?\n // donc, on y ajoute les styles par defaut...\n layer.getSource().getFeatures().forEach((feature) => {\n var style = feature.getStyle();\n if (!style && this.options.control && typeof this.options.control.getStyle === \"function\") {\n feature.setStyle(this.options.control.getStyle());\n }\n });\n\n // ajouter les metadonnées de calcul et de configuration\n var options = {\n defaultStyle : style\n };\n if (data) {\n // properties ajoutées à la racine :\n // ex. \"geoportail:compute\" : {}\n options.extensions = {\n \"geoportail:compute\" : data\n };\n }\n\n var ClassName = null;\n switch (this.options.format.toUpperCase()) {\n case \"KML\":\n options.writeStyles = true;\n options.showPointNames = true;\n ClassName = new KMLExtended(options);\n break;\n case \"GPX\":\n ClassName = new GPXExtended(options);\n break;\n case \"GEOJSON\":\n ClassName = new GeoJSONExtended(options);\n break;\n default:\n break;\n }\n\n if (!ClassName) {\n logger.warn(\"Impossible to export : format unknown !?\");\n return result;\n }\n\n var featProj = layer.getSource().getProjection();\n\n // INFO\n // on determine la projection de la carte\n // si le composant a été ajouté sur la carte via le mécanisme d'OpenLayer...\n var map = this.getMap();\n if (map) {\n featProj = featProj || map.getView().getProjection();\n }\n\n var features = layer.getSource().getFeatures();\n\n // INFO\n // par defaut, webmercator ou \"EPSG:3857\"\n result = ClassName.writeFeatures(features, {\n dataProjection : \"EPSG:4326\",\n featureProjection : featProj || \"EPSG:3857\"\n });\n\n return result;\n }\n // ################################################################### //\n // ######################## event dom ################################ //\n // ################################################################### //\n\n /**\n * ...\n * @param {*} e - Click\n */\n onClickButtonExport (e) {\n if (!this.isPluggableControl()) {\n logger.warn(\"Componant not pluggable with the control !\");\n // return;\n }\n\n var layer = (this.options.control && this.options.control.getLayer !== undefined) ? this.options.control.getData() : this.options.layer;\n var data = (this.options.control && this.options.control.getData !== undefined) ? this.options.control.getData() : {};\n var style = (this.options.control && this.options.control.getStyle !== undefined) ? this.options.control.getStyle() : {};\n\n var content = this.exportFeatures(layer, data, style);\n if (!content || content === \"null\") {\n return;\n }\n\n /**\n * event triggered when the export is finished\n *\n * @event export:compute\n * @typedef {Object}\n * @property {Object} type - event\n * @property {Object} target - instance Export\n * @property {String} content - export data\n * @example\n * Export.on(\"export:compute\", function (e) {\n * console.log(e.target);\n * })\n */\n this.dispatchEvent({\n type : \"export:compute\",\n content : content\n });\n\n // INFO\n // la callback annule le download du fichier.\n if (this.options.onExport && typeof this.options.onExport === \"function\") {\n this.options.onExport(content);\n return;\n }\n\n var link = document.createElement(\"a\");\n // determiner le bon charset !\n var charset = \"utf-8\";\n link.setAttribute(\"href\", \"data:\" + this.mimeType + \";charset=\" + charset + \",\" + encodeURIComponent(content));\n link.setAttribute(\"download\", this.options.name + this.extension);\n if (document.createEvent) {\n var event = document.createEvent(\"MouseEvents\");\n event.initEvent(\"click\", true, true);\n link.dispatchEvent(event);\n } else {\n link.click();\n }\n }\n\n // ################################################################### //\n // ################# public getters/setters ########################## //\n // ################################################################### //\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n\n /**\n * ...\n * @param {Object} control - ...\n * @public\n */\n setControl (control) {\n this.options.control = control;\n }\n\n /**\n * ...\n * @param {DOMElement} target - ...\n * @public\n */\n setTarget (target) {\n this.options.target = target;\n }\n\n /**\n * ...\n * @param {String} format - ...\n * @public\n */\n setFormat (format) {\n this.options.format = format.toUpperCase();\n switch (this.options.format) {\n case \"KML\":\n this.extension = \".kml\";\n this.mimeType = \"application/vnd.google-earth.kml+xml\";\n break;\n case \"GPX\":\n this.extension = \".gpx\";\n this.mimeType = \"application/gpx+xml\";\n break;\n case \"GEOJSON\":\n this.extension = \".geojson\";\n this.mimeType = \"application/geo+json\";\n break;\n default:\n // redefine format by default !\n this.options.format = \"GEOJSON\";\n this.extension = \".geojson\";\n this.mimeType = \"application/geo+json\";\n break;\n }\n }\n\n /**\n * ...\n * @param {String} name - ...\n * @public\n */\n setName (name) {\n this.options.name = name;\n }\n\n /**\n * ...\n * @param {String} title - ...\n * @public\n */\n setTitle (title) {\n this.options.title = title;\n if (this.button) {\n // afficher l'icone du menu / titre\n this.button.value = (this.options.menu) ? this.icon + title : title;\n }\n }\n\n /**\n * ...\n * @param {Boolean} active - ...\n * @public\n */\n setMenu (active) {\n this.options.menu = active;\n if (this.button) {\n // afficher l'icone du menu / titre\n this.button.value = (this.options.menu) ? this.icon + this.options.title : this.options.title;\n }\n if (this.menu && this.options.menu) {\n // afficher le menu\n var className = this.menu.className;\n this.menu.className = className.replace(this.menuClassHidden, \"\");\n // format par defaut\n var radios = this.menu.querySelectorAll(`input[type=radio][name=\"format\"]`);\n radios.forEach((radio) => {\n // radio checked par defaut\n if (radio.id.toUpperCase().includes(this.options.format.toUpperCase())) {\n radio.checked = true;\n }\n });\n }\n }\n\n setLayer (layer) {\n this.options.layer = layer;\n }\n\n};\n\n// on récupère les méthodes de la classe DOM\nObject.assign(ButtonExport.prototype, ExportDOM);\nObject.assign(ButtonExport.prototype, Widget);\n\nexport default ButtonExport;\n\n// Expose Export as ol.control.Export (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.Export = ButtonExport;\n}\n","import ID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport GeocodeUtils from \"../../Utils/GeocodeUtils\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar logger = Logger.getLogger(\"RouteDOM\");\n\nvar RouteDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GProute\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################# Methods to display Main Panel ################### //\n // ################################################################### //\n\n /**\n * Show route control\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createShowRoutePictoElement : function () {\n // contexte d'execution\n var context = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowRoutePicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowRoutePicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-route fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Ouvrir le calcul d'itinéraire\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // gestionnaire d'evenement :\n // on ouvre le menu de saisie du calcul d'itiniraire\n // L'ouverture/Fermeture permet de faire le menage\n // (reinitialisation)\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowRoutePanelClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowRoutePanelClick(e);\n });\n }\n\n return button;\n },\n\n // ################################################################### //\n // ################## Methods to display Inputs Panel ################ //\n // ################################################################### //\n\n /**\n * Create Container Panel\n *\n * FIXME\n * don't call this._createRoutePanelHeaderElement\n * don't call this._createRoutePanelFormElement\n * don't call this._createRoutePanelResultsElement\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GProutePanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n // dialog.appendChild(this._createRoutePanelHeaderElement());\n // dialog.appendChild(this._createRoutePanelFormElement());\n // dialog.appendChild(this._createRoutePanelResultsElement());\n\n return dialog;\n },\n\n _createRoutePanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelHeaderElement : function () {\n // contexte d'execution\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n var div = document.createElement(\"div\");\n div.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n div.innerHTML = \"Calcul d'itinéraire\";\n container.appendChild(div);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GProutePanelClose\");\n divClose.className = \"GPpanelClose GProutePanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Masquer le panneau\";\n\n // Link panel close / visibility checkbox\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowRoutePicto\")).click();\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowRoutePicto\")).click();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n\n /**\n * Create Footer Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFooterElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"GPpanelFooter gpf-panel__footer fr-modal__footer\";\n\n return container;\n },\n\n /**\n * Create Point label\n *\n * @param {String} innerHTML text to display\n * @param {Boolean} display should the label be dsiplayed?\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormPointLabel : function (innerHTML, display = true) {\n var p = document.createElement(\"p\");\n p.innerHTML = innerHTML;\n var classesToAdd = !display ? \" GPelementHidden gpf-hidden\" : \"\";\n p.className = \"GProutePointLabelP gpf-label fr-label\" + classesToAdd;\n\n return p;\n },\n\n /**\n * Create Form\n * see evenement !\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormElement : function () {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GProuteForm\");\n form.className = \"gpf-panel__content fr-modal__content\";\n form.setAttribute(\"onkeypress\", \"return event.keyCode != 13;\"); // FIXME hack pour desactiver l'execution via 'enter' au clavier !\n\n form.addEventListener(\"submit\", function (e) {\n logger.log(e);\n e.preventDefault();\n\n // points\n var points = document.getElementsByClassName(self._addUID(\"GPlocationPoint\"));\n\n // Must have at least two origin points\n var start = points[0].childNodes[0].id;\n var end = points[points.length - 1].childNodes[0].id;\n var startID = ID.index(start);\n var endID = ID.index(end);\n\n if ((document.getElementById(self._addUID(\"GPlocationOrigin_\" + startID)).value === \"\" &&\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + startID)).value === \"\") ||\n (document.getElementById(self._addUID(\"GPlocationOrigin_\" + endID)).value === \"\" &&\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + endID)).value === \"\")) {\n return false;\n }\n\n // Send stages to results panel\n self._addRouteResultsStagesValuesElement(points);\n\n // on peut récuperer les valeurs utiles pour les transmettre au service d'iti...\n // - le mode de calcul\n // - le mode de transport\n // - les exclusions\n // Les points sont déjà stockés dans l'application.\n\n // computation mode params\n var modeComputation = null;\n if (document.getElementById(self._addUID(\"GProuteComputationChoice\"))) {\n // plus rapide ?\n if (document.getElementById(self._addUID(\"GProuteComputationFastest\"))) {\n if (document.getElementById(self._addUID(\"GProuteComputationFastest\")).checked) {\n modeComputation = document.getElementById(self._addUID(\"GProuteComputationFastest\")).value;\n }\n }\n // plus court ?\n if (document.getElementById(self._addUID(\"GProuteComputationShortest\"))) {\n if (document.getElementById(self._addUID(\"GProuteComputationShortest\")).checked) {\n modeComputation = document.getElementById(self._addUID(\"GProuteComputationShortest\")).value;\n }\n }\n }\n\n // transport mode params\n var modeTransport = null;\n // voiture ?\n if (document.getElementById(self._addUID(\"GProuteTransportCar\"))) {\n if (document.getElementById(self._addUID(\"GProuteTransportCar\")).checked) {\n modeTransport = document.getElementById(self._addUID(\"GProuteTransportCar\")).value;\n }\n }\n // pieton ?\n if (document.getElementById(self._addUID(\"GProuteTransportPedestrian\"))) {\n if (document.getElementById(self._addUID(\"GProuteTransportPedestrian\")).checked) {\n modeTransport = document.getElementById(self._addUID(\"GProuteTransportPedestrian\")).value;\n }\n }\n\n // exclusions params\n var exclusions = [];\n var exclusionsElement = document.getElementsByClassName(\"GProuteExclusionsOption\");\n for (var j = 0; j < exclusionsElement.length; j++) {\n var id = exclusionsElement[j].htmlFor;\n var el = document.getElementById(id);\n if (!el.checked) {\n exclusions.push(el.value);\n }\n }\n\n self.onRouteComputationSubmit({\n computation : modeComputation,\n transport : modeTransport,\n exclusions : exclusions\n });\n\n // FIXME mise à jour du controle dans le composant JS !\n // document.getElementById(self._addUID(\"GProuteForm\")).className = \"GPelementHidden\";\n // document.getElementById(self._addUID(\"GProuteResultsPanel\")).className = \"\";\n\n return false;\n });\n\n return form;\n },\n\n /**\n * Create Results Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelResultsElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GProuteResultsPanel\");\n container.className = \"GPelementHidden gpf-hidden\";\n\n container.appendChild(this._createRouteResultsStagesElement());\n container.appendChild(this._createRouteResultsElement());\n container.appendChild(this._createRouteShowResultsDetailsElement());\n container.appendChild(this._createRouteResultsDetailsElement());\n\n return container;\n },\n\n /**\n * Create Waiting Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createRouteWaitingElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GProuteCalcWaitingContainer\");\n div.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n\n var p = document.createElement(\"p\");\n p.className = \"GPwaitingContainerInfo gpf-waiting_info\";\n p.innerHTML = \"Recherche en cours...\";\n\n div.appendChild(p);\n\n return div;\n },\n\n // ################################################################### //\n // ############### Methods to the window results ##################### //\n // ################################################################### //\n\n /**\n * Create Results Stages\n * (results dynamically generate !)\n *\n * @returns {DOMElement} DOM element\n */\n _createRouteResultsStagesElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GProuteResultsStages\");\n return div;\n },\n\n /**\n * Add Stages Results\n *\n * @param {DOMElement} points - list of points\n */\n _addRouteResultsStagesValuesElement : function (points) {\n document.getElementById(this._addUID(\"GProuteResultsStages\")).innerHTML = \"\";\n for (var i = 0; i < points.length; i++) {\n var tag = points[i].childNodes[0].id;\n var id = ID.index(tag);\n if (document.getElementById(this._addUID(\"GPlocationPoint_\" + id)).className === \"GPflexInput GPlocationStageFlexInput gpf-flex\") {\n var resultStage = document.createElement(\"div\");\n resultStage.className = \"GProuteResultsStages\";\n var resultStageLabel = document.createElement(\"div\");\n resultStageLabel.className = \"GProuteResultStageLabel\";\n resultStageLabel.innerHTML = document.getElementById(this._addUID(\"GPlocationOriginLabel_\" + id)).innerHTML + \" :\";\n resultStage.appendChild(resultStageLabel);\n var resultStageValue = document.createElement(\"div\");\n resultStageValue.className = \"GProuteResultStageValue\";\n var elementCoords = document.getElementById(this._addUID(\"GPlocationOriginCoords_\" + id));\n var stageCoords = elementCoords.value;\n var visible = (elementCoords.className === \"GPelementVisible gpf-visible\");\n if (stageCoords !== null && stageCoords !== \"\" && visible) {\n resultStageValue.innerHTML = stageCoords;\n } else {\n resultStageValue.innerHTML = document.getElementById(this._addUID(\"GPlocationOrigin_\" + id)).value;\n }\n resultStage.appendChild(resultStageValue);\n if (resultStageValue.innerHTML !== \"\") {\n document.getElementById(this._addUID(\"GProuteResultsStages\")).appendChild(resultStage);\n }\n }\n }\n },\n\n /**\n * Create Show Results\n * see event!\n *\n * @returns {DOMElement} DOM element\n */\n _createRouteResultsElement : function () {\n // contexte\n var self = this;\n\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GProuteResults\");\n\n // FIXME Route results are dynamically filled in Javascript by route service\n var divValue = document.createElement(\"div\");\n divValue.id = this._addUID(\"GProuteResultsValues\");\n container.appendChild(divValue);\n\n var divMode = document.createElement(\"div\");\n divMode.id = this._addUID(\"GProuteResultsMode\");\n\n var select = document.createElement(\"select\");\n select.id = this._addUID(\"GProuteResultsComputationSelect\");\n select.className = \"GPselect gpf-select fr-select\";\n // gestionnaire d'evenement :\n // on stocke la valeur du mode de calcul, et on relance le calcul d'itiniraire\n select.addEventListener(\"change\", function (e) {\n self.onRouteModeComputationChangeAndRun(e);\n });\n\n var computes = [{\n code : \"fastest\",\n label : \"Plus rapide\"\n }, {\n code : \"shortest\",\n label : \"Plus court\"\n }];\n\n for (var i = 0; i < computes.length; i++) {\n var option = document.createElement(\"option\");\n option.value = computes[i].code;\n option.text = computes[i].label;\n select.appendChild(option);\n }\n divMode.appendChild(select);\n container.appendChild(divMode);\n\n var divNew = document.createElement(\"div\");\n divNew.id = this._addUID(\"GProuteResultsNew\");\n divNew.className = \"GPresetPicto gpf-btn gpf-btn-icon-reset fr-btn fr-btn--secondary gpf-btn--secondary\";\n divNew.title = \"Modifier le calcul\";\n divNew.addEventListener(\"click\", function (e) {\n document.getElementById(self._addUID(\"GProuteResultsPanel\")).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GProuteForm\")).className = \"gpf-panel__content fr-modal__content\";\n self.onShowRouteResultsNewClick(e);\n });\n container.appendChild(divNew);\n\n return container;\n },\n\n /**\n * Add Results Duration and Distance\n * (results dynamically generate !)\n * see event!\n * @param {Number} distance - distance\n * @param {Number} duration - duration\n * @param {Function} fconvert - fconvert\n *\n * @returns {DOMElement} DOM element\n */\n _addRouteResultsValuesElement : function (distance, duration, fconvert) {\n var div = document.getElementById(this._addUID(\"GProuteResultsValues\"));\n\n // clean !\n if (div.childElementCount) {\n while (div.firstChild) {\n div.removeChild(div.firstChild);\n }\n }\n\n var containerDistance = document.createElement(\"div\");\n containerDistance.className = \"GProuteResultsValue\";\n\n var labelDistance = document.createElement(\"label\");\n labelDistance.className = \"GProuteResultsValueLabel\";\n labelDistance.innerHTML = \"Distance :\";\n containerDistance.appendChild(labelDistance);\n\n var distanceLabel = 0;\n var isKm = parseInt(distance / 1000, 10);\n\n if (!isKm) {\n distanceLabel = Math.round(distance) + \" m\";\n } else {\n var distanceArrondi = Math.round(distance);\n distanceArrondi = distanceArrondi / 1000;\n distanceLabel = distanceArrondi + \" km\";\n }\n\n var divDistance = document.createElement(\"div\");\n divDistance.id = this._addUID(\"GProuteResultsValueDist\");\n divDistance.innerHTML = distanceLabel;\n containerDistance.appendChild(divDistance);\n\n div.appendChild(containerDistance);\n\n var containerDuration = document.createElement(\"div\");\n containerDuration.className = \"GProuteResultsValue\";\n\n var labelDuration = document.createElement(\"label\");\n labelDuration.className = \"GProuteResultsValueLabel\";\n labelDuration.innerHTML = \"Durée :\";\n containerDuration.appendChild(labelDuration);\n\n var divDuration = document.createElement(\"div\");\n divDuration.id = this._addUID(\"GProuteResultsValueDist\");\n divDuration.innerHTML = fconvert(duration);\n containerDuration.appendChild(divDuration);\n\n div.appendChild(containerDuration);\n\n return div;\n },\n\n /**\n * Create Show Results Details\n *\n * @returns {DOMElement} DOM element\n */\n _createRouteShowResultsDetailsElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"GProuteResultsShowDetailsDiv gpf-flex fr-checkbox-group fr-m-1w\";\n if (!checkDsfr()) {\n var divBorderUp = document.createElement(\"div\");\n divBorderUp.className = \"GPfakeBorder GPfakeBorderLeft\";\n div.appendChild(divBorderUp);\n }\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GProuteResultsShowDetails\");\n input.type = \"checkbox\";\n div.appendChild(input);\n var labelShow = document.createElement(\"label\");\n labelShow.className = \"gpf-label fr-label\";\n labelShow.htmlFor = this._addUID(\"GProuteResultsShowDetails\");\n labelShow.innerHTML = \"Afficher le détail\";\n div.appendChild(labelShow);\n if (!checkDsfr()) {\n var labelHide = document.createElement(\"label\");\n labelHide.htmlFor = this._addUID(\"GProuteResultsShowDetails\");\n labelHide.innerHTML = \"Masquer le détail\";\n div.appendChild(labelHide);\n var divBorderDown = document.createElement(\"div\");\n divBorderDown.className = \"GPfakeBorder\";\n div.appendChild(divBorderDown);\n }\n return div;\n },\n\n /**\n * Create Results Details\n *\n * @returns {DOMElement} DOM element\n */\n _createRouteResultsDetailsElement : function () {\n // \n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GProuteResultsDetails\");\n return div;\n },\n\n /**\n * Add Results Details\n * (results dynamically generate !)\n * @param {Object[]} instructions - instructions\n * @param {Function} fconvert - fconvert\n *\n * @returns {DOMElement} DOM element\n */\n _addRouteResultsDetailsElement : function (instructions, fconvert) {\n // contexte\n var context = this;\n\n var div = document.getElementById(this._addUID(\"GProuteResultsDetails\"));\n\n // clean !\n if (div.childElementCount) {\n while (div.firstChild) {\n div.removeChild(div.firstChild);\n }\n }\n\n // calcul des valeurs cumulé !\n var distanceCumul = 0;\n var durationCumul = 0;\n\n /* jshint -W083 */\n for (var i = 0; i < instructions.length; i++) {\n var id = i + 1;\n\n var o = instructions[i];\n\n var divNum = document.createElement(\"div\");\n divNum.className = \"GProuteResultsDetailsNumber\";\n divNum.innerHTML = id + \".\";\n div.appendChild(divNum);\n\n durationCumul += parseFloat(o.duration);\n distanceCumul += parseFloat(o.distance);\n\n var distance = 0;\n var isCumulKm = parseInt(distanceCumul / 1000, 10);\n if (!isCumulKm) {\n distance = Math.round(distanceCumul) + \" m\";\n } else {\n var distanceArrondi = Math.round(distanceCumul);\n distanceArrondi = distanceArrondi / 1000;\n distance = distanceArrondi + \" km\";\n }\n\n var divIns = document.createElement(\"div\");\n divIns.className = \"GProuteResultsDetailsInstruction\";\n divIns.id = this._addUID(\"GProuteResultsDetailsInstruction_\" + id);\n divIns.title = \"distance : \" + distance + \" / \" + \"temps : \" + fconvert(durationCumul);\n divIns.innerHTML = o.instruction;\n\n divIns.addEventListener(\"mouseover\", function (e) {\n context.onRouteResultsDetailsMouseOver(e);\n });\n divIns.addEventListener(\"mouseout\", function (e) {\n context.onRouteResultsDetailsMouseOut(e);\n });\n divIns.addEventListener(\"click\", function (e) {\n // mode mobile !\n if (typeof context.onRouteResultsDetailsClick === \"function\") {\n context.onRouteResultsDetailsClick(e);\n }\n });\n div.appendChild(divIns);\n }\n\n return div;\n },\n\n // ################################################################### //\n // ################### Methods to the form points #################### //\n // ################# OVERWRITTEN BY LOCATIONSELECTOR ! ################# //\n\n /**\n * Create Point\n * see event !\n * OVERWRITTEN BY LOCATIONSELECTOR !\n * (version initial without LOCATIONSELECTOR PLUGIN)\n * @param {Integer} n - n\n * @param {String} text - text\n * @param {Boolean} visibility - visibility\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormPointElement : function (n, text, visibility) {\n // contexte d'execution\n var context = this;\n\n var div = document.createElement(\"div\");\n div.id = \"GProutePoint\" + n;\n div.className = (visibility) ? \"GPflexInput GProuteStageFlexInput\" : \"GPflexInput GProuteStageFlexInputHidden\";\n\n var labelOrigin = document.createElement(\"label\");\n labelOrigin.id = \"GProuteOriginLabel\" + n;\n labelOrigin.htmlFor = \"GProuteOrigin\" + n;\n labelOrigin.innerHTML = text;\n labelOrigin.addEventListener(\"click\", function () {\n var i = this.id.charAt(this.id.length - 1);\n document.getElementById(\"GProuteOriginCoords\" + i).value = \"\";\n for (var j = 1; j < 8; j++) {\n document.getElementById(\"GProutePoint\" + j).style.display = \"flex\";\n }\n document.getElementById(\"GProuteForm\").className = \"gpf-panel__content fr-modal__content\";\n document.getElementById(\"GProuteOriginPointer\" + i).checked = false;\n document.getElementById(\"GProuteOrigin\" + i).className = \"GPelementVisible gpf-visible\";\n document.getElementById(\"GProuteOriginCoords\" + i).className = \"GPelementHidden gpf-hidden\";\n });\n div.appendChild(labelOrigin);\n\n var inputOrigin = document.createElement(\"input\");\n inputOrigin.id = \"GProuteOrigin\" + n;\n inputOrigin.className = \"GPelementVisible gpf-visible\";\n inputOrigin.type = \"text\";\n inputOrigin.placeholder = \"Saisir une adresse, un lieu...\";\n inputOrigin.addEventListener(\"keyup\", function (e) {\n var charCode = e.which || e.keyCode;\n if (charCode === 13 || charCode === 10) {\n return;\n }\n var i = this.id.charAt(this.id.length - 1);\n if (document.getElementById(\"GProuteOrigin\" + i).value.length > 2) {\n document.getElementById(\"GProuteAutoCompleteList\" + i).style.display = \"block\";\n } else {\n document.getElementById(\"GProuteAutoCompleteList\" + i).style.display = \"none\";\n }\n // gestionnaire d'evenement :\n // on récupère la valeur de saisie pour une requête sur le service d'autocompletion.\n // le resultat de la requête nous permet de recuperer les coordonnées du point...\n context.onAutoCompleteSearchText(e);\n });\n inputOrigin.addEventListener(\"blur\", function () {\n var i = this.id.charAt(this.id.length - 1);\n document.getElementById(\"GProuteAutoCompleteList\" + i).style.display = \"none\";\n });\n div.appendChild(inputOrigin);\n\n var inputOriginCoord = document.createElement(\"input\");\n inputOriginCoord.id = \"GProuteOriginCoords\" + n;\n inputOriginCoord.className = \"GPelementHidden gpf-hidden\";\n inputOriginCoord.type = \"text\";\n inputOriginCoord.disabled = true;\n div.appendChild(inputOriginCoord);\n\n var inputOriginPointer = document.createElement(\"input\");\n inputOriginPointer.id = \"GProuteOriginPointer\" + n;\n inputOriginPointer.type = \"checkbox\";\n div.appendChild(inputOriginPointer);\n\n var labelOriginPointer = document.createElement(\"label\");\n labelOriginPointer.id = \"GProuteOriginPointerImg\" + n;\n labelOriginPointer.htmlFor = \"GProuteOriginPointer\" + n;\n labelOriginPointer.className = \"GProuteOriginPointerImg\";\n labelOriginPointer.title = \"Pointer un lieu sur la carte\";\n labelOriginPointer.addEventListener(\"click\", function (evt) {\n evt.preventDefault();\n evt.stopPropagation();\n var i = this.id.charAt(this.id.length - 1);\n var j;\n for (j = 1; j < 8; j++) {\n if (i !== j) {\n document.getElementById(\"GProuteOriginPointer\" + j).checked = false;\n if (document.getElementById(\"GProuteOriginCoords\" + j).value === \"Pointer un lieu sur la carte\") {\n document.getElementById(\"GProuteOriginCoords\" + j).value = \"\";\n document.getElementById(\"GProuteOrigin\" + j).className = \"GPelementVisible gpf-visible\";\n document.getElementById(\"GProuteOriginCoords\" + j).className = \"GPelementHidden gpf-hidden\";\n }\n }\n }\n if (document.getElementById(\"GProuteOriginPointer\" + i).checked) {\n document.getElementById(\"GProuteOriginCoords\" + i).value = \"\";\n for (j = 1; j < 8; j++) {\n document.getElementById(\"GProutePoint\" + j).style.display = \"flex\";\n }\n document.getElementById(\"GProuteForm\").className = \"gpf-panel__content fr-modal__content\";\n document.getElementById(\"GProuteOriginPointer\" + i).checked = false;\n document.getElementById(\"GProuteOrigin\" + i).className = \"GPelementVisible gpf-visible\";\n document.getElementById(\"GProuteOriginCoords\" + i).className = \"GPelementHidden gpf-hidden\";\n } else {\n document.getElementById(\"GProuteOriginCoords\" + i).value = \"Pointer un lieu sur la carte\";\n for (j = 1; j < 8; j++) {\n if (i === j) {\n document.getElementById(\"GProutePoint\" + j).style.display = \"flex\";\n } else {\n document.getElementById(\"GProutePoint\" + j).style.display = \"none\";\n }\n }\n document.getElementById(\"GProuteForm\").className = \"GProuteFormMini gpf-panel__content fr-modal__content\";\n document.getElementById(\"GProuteOriginPointer\" + i).checked = true;\n document.getElementById(\"GProuteOrigin\" + i).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(\"GProuteOriginCoords\" + i).className = \"GPelementVisible gpf-visible\";\n }\n // gestionnaire d'evenement :\n // on stocke la valeur du point, utilisée pour la requête sur le service de calcul d'itiniraire\n context.onRouteMapPointClick(evt);\n });\n div.appendChild(labelOriginPointer);\n\n return div;\n },\n\n /**\n * Create Remove Point tag\n * see event !\n * OVERWRITTEN BY LOCATIONSELECTOR !\n * (version initial without LOCATIONSELECTOR PLUGIN)\n * @param {Integer} n - n\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormRemoveStageElement : function (n) {\n // contexte d'execution\n var context = this;\n\n var divRm = document.createElement(\"div\");\n divRm.id = \"GProuteStageRemove\" + n;\n divRm.className = \"GProuteStageRemove\";\n divRm.title = \"Supprimer l'étape\";\n if (n !== 1 && n !== 7) {\n divRm.addEventListener(\"click\", function (e) {\n var i = this.id.charAt(this.id.length - 1);\n document.getElementById(\"GProutePoint\" + i).className = \"GPflexInput GProuteStageFlexInputHidden\";\n document.getElementById(\"GProuteOrigin\" + i).value = \"\";\n document.getElementById(\"GProuteOrigin\" + i).className = \"GPelementVisible gpf-visible\";\n document.getElementById(\"GProuteOriginCoords\" + i).value = \"\";\n document.getElementById(\"GProuteOriginCoords\" + i).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(\"GProuteStageAdd\").style.display = \"\";\n // Moving up exclusions picto\n // var exclusionsPictoTop = document.getElementById(\"GPshowRouteExclusionsPicto\").style.top;\n // document.getElementById(\"GPshowRouteExclusionsPicto\").style.top = (parseInt(exclusionsPictoTop, 10) - 33).toString() + \"px\";\n // gestionnaire d'evenement :\n // on supprime le point, utilisé pour la requête sur le service d'itiniraire\n context.onRouteRemovePointClick(e);\n });\n }\n return divRm;\n },\n\n /**\n * Create Add Point tag\n * see event !\n * OVERWRITTEN BY LOCATIONSELECTOR !\n * (version initial without LOCATIONSELECTOR PLUGIN)\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormAddStageElement : function () {\n // contexte d'execution\n var context = this;\n\n var divAdd = document.createElement(\"div\");\n divAdd.id = \"GProuteStageAdd\";\n divAdd.title = \"Ajouter une étape\";\n divAdd.addEventListener(\"click\", function (e) {\n var lastStage = 1;\n var nbStages = 0;\n for (var i = 2; i < 7; i++) {\n if (document.getElementById(\"GProutePoint\" + i).className === \"GPflexInput GProuteStageFlexInputHidden\") {\n if (lastStage === 1) {\n lastStage = i;\n }\n } else {\n nbStages++;\n }\n }\n if (lastStage < 7) {\n document.getElementById(\"GProutePoint\" + lastStage).className = \"GPflexInput GProuteStageFlexInput\";\n // Moving down exclusions picto\n // var exclusionsPictoTop = document.getElementById(\"GPshowRouteExclusionsPicto\").style.top;\n // document.getElementById(\"GPshowRouteExclusionsPicto\").style.top = (parseInt(exclusionsPictoTop, 10) + 33).toString() + \"px\";\n }\n if (nbStages === 4) {\n document.getElementById(\"GProuteStageAdd\").style.display = \"none\";\n }\n // gestionnaire d'evenement :\n // on ajoute le point, utilisé pour la requête sur le service d'itiniraire\n context.onRouteAddPointClick(e);\n });\n\n return divAdd;\n },\n\n /**\n * Create Results autocompletion to the point\n * see event!\n * OVERWRITTEN BY LOCATIONSELECTOR !\n * (version initial without LOCATIONSELECTOR PLUGIN)\n * @param {Integer} n - n\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormAutoCompleteListElement : function (n) {\n // contexte d'execution\n var context = this;\n\n var div = document.createElement(\"div\");\n div.id = \"GProuteAutoCompleteList\" + n;\n div.className = \"GPadvancedAutoCompleteList\";\n\n if (div.addEventListener) {\n div.addEventListener(\"click\", function (e) {\n context.onAutoCompletedResultsItemClick(e);\n document.getElementById(\"GProuteAutoCompleteList\" + n).style.display = \"none\";\n }, false);\n } else if (div.attachEvent) {\n div.attachEvent(\"onclick\", function (e) {\n context.onAutoCompletedResultsItemClick(e);\n document.getElementById(\"GProuteAutoCompleteList\" + n).style.display = \"none\";\n });\n }\n\n // Proposals are dynamically filled in Javascript by autocomplete service\n //
...
\n\n return div;\n },\n\n /**\n * Autocompletion result to a point.\n * Proposals are dynamically filled in Javascript by autocomplete service\n * OVERWRITTEN BY LOCATIONSELECTOR !\n * (version initial without LOCATIONSELECTOR PLUGIN)\n *\n *\n * @param {Object} location - suggested location results\n * @param {Number} n - number of the point\n * @param {Number} id - ID\n */\n _createRouteAutoCompletedLocationElement : function (location, n, id) {\n var container = document.getElementById(\"GProuteAutoCompleteList\" + n);\n\n var div = document.createElement(\"div\");\n div.id = \"AutoCompletedLocation\" + id;\n div.className = \"GPautoCompleteProposal\";\n div.innerHTML = GeocodeUtils.getSuggestedLocationFreeform(location);\n\n container.appendChild(div);\n },\n\n // ################################################################### //\n // ############## Methods to the choice mode into form ############### //\n // ################################################################### //\n\n /**\n * Create Mode choice transport\n * see event !\n * FIXME event not useful\n * @param {String[]} transports - transports\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormModeChoiceTransportElement : function (transports) {\n // contexte d'execution\n var context = this;\n\n var divContainer = document.createElement(\"div\");\n divContainer.id = this._addUID(\"GProuteTransportChoice\");\n\n var label = document.createElement(\"label\");\n label.className = \"GProuteModeLabel gpf-label fr-label\";\n label.innerHTML = \"Choisir un mode de déplacement\";\n divContainer.appendChild(label);\n\n var divRadio = document.createElement(\"div\");\n divRadio.className = \"gpf-radio-btn-group\";\n /* jshint -W083 */\n for (var i = 0; i < transports.length; i++) {\n var transport = transports[i];\n\n var div = document.createElement(\"div\");\n div.className = \"GProuteTransportChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w\";\n\n if (transport === \"Voiture\") {\n var inputCar = document.createElement(\"input\");\n inputCar.id = this._addUID(\"GProuteTransportCar\");\n inputCar.type = \"radio\";\n inputCar.name = \"GProuteTransport\";\n inputCar.value = \"Voiture\";\n if (i === 0) {\n inputCar.checked = true;\n }\n // gestionnaire d'evenement :\n // on stocke le mode de transport,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputCar.addEventListener) {\n inputCar.addEventListener(\"change\", function (e) {\n context.onRouteModeTransportChange(e);\n });\n } else if (inputCar.attachEvent) {\n inputCar.attachEvent(\"onchange\", function (e) {\n context.onRouteModeTransportChange(e);\n });\n }\n div.appendChild(inputCar);\n\n var labelCar = document.createElement(\"label\");\n labelCar.className = \"GProuteTransportImg gpf-label fr-label\";\n labelCar.htmlFor = this._addUID(\"GProuteTransportCar\");\n labelCar.title = \"Voiture\";\n labelCar.innerHTML = \"Voiture\";\n div.appendChild(labelCar);\n }\n\n if (transport === \"Pieton\") {\n var inputPedestrian = document.createElement(\"input\");\n inputPedestrian.id = this._addUID(\"GProuteTransportPedestrian\");\n inputPedestrian.type = \"radio\";\n inputPedestrian.name = \"GProuteTransport\";\n inputPedestrian.value = \"Pieton\";\n if (i === 0) {\n inputPedestrian.checked = true;\n }\n // gestionnaire d'evenement :\n // on stocke le mode de transport,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputPedestrian.addEventListener) {\n inputPedestrian.addEventListener(\"change\", function (e) {\n context.onRouteModeTransportChange(e);\n });\n } else if (inputPedestrian.attachEvent) {\n inputPedestrian.attachEvent(\"onchange\", function (e) {\n context.onRouteModeTransportChange(e);\n });\n }\n div.appendChild(inputPedestrian);\n\n var labelPedestrian = document.createElement(\"label\");\n labelPedestrian.className = \"GProuteTransportImg gpf-label fr-label\";\n labelPedestrian.htmlFor = this._addUID(\"GProuteTransportPedestrian\");\n labelPedestrian.title = \"Piéton\";\n labelPedestrian.innerHTML = \"Piéton\";\n div.appendChild(labelPedestrian);\n }\n\n divRadio.appendChild(div);\n }\n divContainer.appendChild(divRadio);\n\n return divContainer;\n },\n\n /**\n * Create Mode choice computation\n * see event!\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormModeChoiceComputeElement : function () {\n // contexte d'execution\n var context = this;\n\n var divContainer = document.createElement(\"div\");\n divContainer.id = this._addUID(\"GProuteComputationChoice\");\n divContainer.className = \"fr-mt-2w\";\n\n var label = document.createElement(\"label\");\n label.className = \"GProuteComputationLabel gpf-label fr-label\";\n label.innerHTML = \"Mode de calcul\";\n divContainer.appendChild(label);\n\n var divRadio = document.createElement(\"div\");\n divRadio.className = \"gpf-radio-btn-group\";\n\n var div = document.createElement(\"div\");\n div.className = \"GProuteComputationChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w\";\n var inputFastest = document.createElement(\"input\");\n inputFastest.id = this._addUID(\"GProuteComputationFastest\");\n inputFastest.type = \"radio\";\n inputFastest.name = \"GProuteComputation\";\n inputFastest.value = \"fastest\";\n inputFastest.checked = true;\n // gestionnaire d'evenement :\n // on stocke le mode de transport,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputFastest.addEventListener) {\n inputFastest.addEventListener(\"change\", function (e) {\n context.onRouteModeComputationChange(e);\n });\n } else if (inputFastest.attachEvent) {\n inputFastest.attachEvent(\"onchange\", function (e) {\n context.onRouteModeComputationChange(e);\n });\n }\n div.appendChild(inputFastest);\n\n var labelFastest = document.createElement(\"label\");\n labelFastest.className = \"gpf-label fr-label\";\n labelFastest.htmlFor = this._addUID(\"GProuteComputationFastest\");\n labelFastest.title = \"Plus rapide\";\n labelFastest.innerHTML = \"Plus rapide\";\n div.appendChild(labelFastest);\n divRadio.appendChild(div);\n\n var div2 = document.createElement(\"div\");\n div2.className = \"GProuteComputationChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w\";\n var inputShortest = document.createElement(\"input\");\n inputShortest.id = this._addUID(\"GProuteComputationShortest\");\n inputShortest.type = \"radio\";\n inputShortest.name = \"GProuteComputation\";\n inputShortest.value = \"shortest\";\n // gestionnaire d'evenement :\n // on stocke le mode de transport,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputShortest.addEventListener) {\n inputShortest.addEventListener(\"change\", function (e) {\n context.onRouteModeComputationChange(e);\n });\n } else if (inputShortest.attachEvent) {\n inputShortest.attachEvent(\"onchange\", function (e) {\n context.onRouteModeComputationChange(e);\n });\n }\n div2.appendChild(inputShortest);\n\n var labelShortest = document.createElement(\"label\");\n labelShortest.className = \"gpf-label fr-label\";\n labelShortest.htmlFor = this._addUID(\"GProuteComputationShortest\");\n labelShortest.title = \"Plus court\";\n labelShortest.innerHTML = \"Plus court\";\n div2.appendChild(labelShortest);\n\n divRadio.appendChild(div2);\n divContainer.appendChild(divRadio);\n\n return divContainer;\n },\n\n // ################################################################### //\n // ################# Methods to the choice exclusions ################ //\n // ################################################################### //\n\n /**\n * Label to Exclusions Options\n * see event !\n * FIXME event not useful\n *\n * @returns {DOMElement} DOM element\n */\n _createShowRouteExclusionsPictoElement : function () {\n // contexte d'execution\n var context = this;\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowRouteExclusionsPicto\");\n var hidden = \"\";\n if (checkDsfr()) {\n hidden = \"GPelementHidden gpf-hidden\";\n }\n button.className = `GPshowAdvancedToolPicto GPshowMoreOptionsImage GPshowMoreOptions GPshowRouteExclusionsPicto ${hidden} gpf-btn fr-btn--sm fr-btn--tertiary gpf-btn--tertiary fr-icon-arrow-down-fill`;\n button.title = \"Exclusions\";\n // button.style.top = \"185px\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", true);\n\n // gestionnaire d'evenement :\n // on ouvre le menu des options des exclusions\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n e.preventDefault();\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowRouteExclusionsClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n e.preventDefault();\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowRouteExclusionsClick(e);\n });\n }\n\n return button;\n },\n\n /**\n * Create Container to Exclusions\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormExclusionsElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GProuteExclusions\");\n div.className = \"fr-mt-2w\";\n\n var label = document.createElement(\"label\");\n label.className = \"GProuteExclusionsLabel fr-label\";\n label.innerHTML = \"Passages autorisés\";\n div.appendChild(label);\n\n // div.appendChild(this._createRoutePanelFormExclusionOptionsElement());\n\n return div;\n },\n\n /**\n * Create Exclusions Options\n * see event !\n * FIXME event not useful\n * @param {Object[]} exclusions - exclusions\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormExclusionOptionsElement : function (exclusions) {\n // contexte d'execution\n var context = this;\n\n var div = document.createElement(\"div\");\n div.className = \"GProuteExclusionsOptions gpf-flex fr-checkbox-group fr-m-1w\";\n\n /* jshint -W083 */\n for (var value in exclusions) {\n if (exclusions.hasOwnProperty(value)) {\n var status = exclusions[value];\n switch (value) {\n case \"toll\":\n var inputToll = document.createElement(\"input\");\n inputToll.id = this._addUID(\"GProuteExclusionsToll\");\n inputToll.type = \"checkbox\";\n inputToll.value = \"Toll\";\n inputToll.name = \"Peage\";\n inputToll.checked = !status;\n // gestionnaire d'evenement :\n // on stocke l'exclusion,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputToll.addEventListener) {\n inputToll.addEventListener(\"change\", function (e) {\n context.onRouteExclusionsChange(e);\n });\n } else if (inputToll.attachEvent) {\n inputToll.attachEvent(\"onchange\", function (e) {\n context.onRouteExclusionsChange(e);\n });\n }\n div.appendChild(inputToll);\n\n var labelToll = document.createElement(\"label\");\n labelToll.className = \"GProuteExclusionsOption\";\n labelToll.htmlFor = this._addUID(\"GProuteExclusionsToll\");\n labelToll.innerHTML = \"Péages\";\n div.appendChild(labelToll);\n break;\n\n case \"tunnel\":\n var inputTunnel = document.createElement(\"input\");\n inputTunnel.id = this._addUID(\"GProuteExclusionsTunnel\");\n inputTunnel.type = \"checkbox\";\n inputTunnel.value = \"Tunnel\";\n inputTunnel.name = \"Tunnel\";\n inputTunnel.checked = !status;\n // gestionnaire d'evenement :\n // on stocke l'exclusion,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputTunnel.addEventListener) {\n inputTunnel.addEventListener(\"change\", function (e) {\n context.onRouteExclusionsChange(e);\n });\n } else if (inputTunnel.attachEvent) {\n inputTunnel.attachEvent(\"onchange\", function (e) {\n context.onRouteExclusionsChange(e);\n });\n }\n div.appendChild(inputTunnel);\n\n var labelTunnel = document.createElement(\"label\");\n labelTunnel.className = \"GProuteExclusionsOption\";\n labelTunnel.htmlFor = this._addUID(\"GProuteExclusionsTunnel\");\n labelTunnel.innerHTML = \"Tunnels\";\n div.appendChild(labelTunnel);\n break;\n\n case \"bridge\":\n var inputBridge = document.createElement(\"input\");\n inputBridge.id = this._addUID(\"GProuteExclusionsBridge\");\n inputBridge.type = \"checkbox\";\n inputBridge.value = \"Bridge\";\n inputBridge.name = \"Ponts\";\n inputBridge.checked = !status;\n // gestionnaire d'evenement :\n // on stocke l'exclusion,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputBridge.addEventListener) {\n inputBridge.addEventListener(\"change\", function (e) {\n context.onRouteExclusionsChange(e);\n });\n } else if (inputBridge.attachEvent) {\n inputBridge.attachEvent(\"onchange\", function (e) {\n context.onRouteExclusionsChange(e);\n });\n }\n div.appendChild(inputBridge);\n\n var labelBridge = document.createElement(\"label\");\n labelBridge.className = \"GProuteExclusionsOption\";\n labelBridge.htmlFor = this._addUID(\"GProuteExclusionsBridge\");\n labelBridge.innerHTML = \"Ponts\";\n div.appendChild(labelBridge);\n break;\n }\n }\n }\n\n return div;\n },\n\n // ################################################################### //\n // ############################### Submit Form ####################### //\n // ################################################################### //\n\n /**\n * Create Submit Form Element\n *\n * @returns {DOMElement} DOM element\n */\n _createRouteSubmitFormElement : function () {\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GProuteSubmit\");\n input.className = \"GPsubmit gpf-btn gpf-btn-icon-submit fr-btn\";\n input.type = \"submit\";\n input.value = \"Calculer l'itinéraire\";\n\n return input;\n },\n\n // ################################################################### //\n // ############################### Reset picto ####################### //\n // ################################################################### //\n\n /**\n * Create Reset Picto Element\n *\n * @returns {DOMElement} DOM element\n */\n _createRouteFormResetElement : function () {\n var self = this;\n\n var buttonReset = document.createElement(\"button\");\n buttonReset.id = this._addUID(\"GProuteReset\");\n buttonReset.title = \"Réinitialiser les paramètres\";\n buttonReset.className = \"GPresetPicto gpf-btn gpf-btn-icon-reset fr-btn fr-btn--secondary gpf-btn--secondary\";\n buttonReset.title = \"Réinitialiser les paramètres\";\n buttonReset.setAttribute(\"tabindex\", \"0\");\n buttonReset.setAttribute(\"aria-pressed\", false);\n buttonReset.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onRouteResetClick(e);\n });\n\n return buttonReset;\n }\n};\n\nexport default RouteDOM;\n","// import CSS\nimport \"../../CSS/Controls/Route/GPFroute.css\";\n// import \"../../CSS/Controls/Route/GPFrouteStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\nimport Overlay from \"ol/Overlay\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport VectorSource from \"ol/source/Vector\";\n// import GeoJSON from \"ol/format/GeoJSON\";\nimport { pointerMove as eventPointerMove } from \"ol/events/condition\";\nimport { Select as SelectInteraction } from \"ol/interaction\";\nimport {\n Stroke,\n Style\n} from \"ol/style\";\nimport { transformExtent as olTransformExtentProj } from \"ol/proj\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Utils from \"../../Utils/Helper\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Markers from \"../Utils/Markers\";\nimport Draggable from \"../../Utils/Draggable\";\nimport Interactions from \"../Utils/Interactions\";\n// import local with ol dependencies\nimport LocationSelector from \"../LocationSelector/LocationSelector\";\nimport ButtonExport from \"../Export/Export\";\nimport LayerSwitcher from \"../LayerSwitcher/LayerSwitcher\";\nimport GeoJSONExtended from \"../../Formats/GeoJSON\";\n// DOM\nimport RouteDOM from \"./RouteDOM\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar logger = Logger.getLogger(\"route\");\n\n/**\n * @classdesc\n *\n * Route Control.\n *\n * @constructor\n * @alias ol.control.Route\n * @type {ol.control.Route}\n * @extends {ol.control.Control}\n * @param {Object} options - route control options\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {String} [options.apiKey] - API key for services call (route and autocomplete services). The key \"calcul\" is used by default.\n * @param {Boolean} [options.ssl = true] - use of ssl or not (default true, service requested using https protocol)\n * @param {Boolean} [options.collapsed = true] - Specify if widget has to be collapsed (true) or not (false) on map loading. Default is true.\n * @param {Boolean} [options.draggable = false] - Specify if widget is draggable\n * @param {Boolean|Object} [options.export = false] - Specify if button \"Export\" is displayed. For the use of the options of the \"Export\" control, see {@link ol.control.Export}\n * @param {Object} [options.exclusions = {\"toll\" : false, \"tunnel\" : false, \"bridge\" : false}] - list of exclusions with status (true = checked). By default : no exclusions checked.\n * @param {Array} [options.graphs = [\"Voiture\", \"Pieton\"]] - list of resources, by default : [\"Voiture\", \"Pieton\"]. The first element is selected.\n * @param {Object} [options.routeOptions = {}] - route service options. see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~route Gp.Services.route()} to know all route options.\n * @param {Object} [options.autocompleteOptions = {}] - autocomplete service options. see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~autoComplete Gp.Services.autoComplete()} to know all autocomplete options\n * @param {Object} [options.markersOpts] - options to use your own markers. Object properties can be \"departure\", \"stages\" or \"arrival\". Corresponding value is an object with following properties :\n * @param {String} [options.markersOpts.url] - marker base64 encoded url (ex \"data:image/png;base64,...\"\"). Mandatory for a custom marker\n * @param {Array} [options.markersOpts.offset] - Offsets in pixels used when positioning the overlay. The first element in the array is the horizontal offset. A positive value shifts the overlay right. The second element in the array is the vertical offset. A positive value shifts the overlay down. Default is [0, 0]. (see http://openlayers.org/en/latest/apidoc/ol.Overlay.html)\n * @param {Object} [options.layerDescription = {}] - Layer informations to be displayed in LayerSwitcher widget (only if a LayerSwitcher is also added to the map)\n * @param {String} [options.layerDescription.title = \"Itinéraire\"] - Layer title to be displayed in LayerSwitcher\n * @param {String} [options.layerDescription.description = \"Itinéraire basé sur un graphe\"] - Layer description to be displayed in LayerSwitcher\n * @fires route:drawstart\n * @fires route:drawend\n * @fires route:compute\n * @fires export:compute\n * @example\n * var route = ol.control.Route({\n * \"collapsed\" : true\n * \"draggable\" : true,\n * \"export\" : false,\n * \"exclusions\" : {\n * \"toll\" : true,\n * \"bridge\" : false,\n * \"tunnel\" : true\n * },\n * \"graphs\" : ['Pieton', 'Voiture'],\n * \"markersOpts\" : {\n * \"departure\" : {\n * \"url\" : \"...\",\n * \"offset\" : [0,0]\n * },\n * \"stages\" : {\n * \"url\" : \"...\",\n * \"offset\" : [0,0]\n * },\n * \"arrival\" : {\n * \"url\" : \"...\",\n * \"offset\" : [0,0]\n * }\n * }\n * \"autocompleteOptions\" : {},\n * \"routeOptions\" : {}\n * });\n *\n * // if you want to pluggued the control Export with options :\n * var route = new ol.control.Route({\n * export : {\n * name : \"export\",\n * format : \"geojson\",\n * title : \"Exporter\",\n * menu : false\n * }\n * });\n */\nvar Route = class Route extends Control {\n\n /**\n * See {@link ol.control.Route}\n * @module Route\n * @alias module:~controls/Route\n * @param {*} options - options\n * @example\n * import Route from \"gpf-ext-ol/controls/Route\"\n * ou\n * import { Route } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof Route)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"Route\";\n // initialisation du composant\n this.initialize(options);\n\n // Widget main DOM container\n this._container = this._createMainContainerElement();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n }\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n // enrichissement du DOM du container\n this._container = this._initContainer(map);\n this.element = this._container;\n\n // ajout d'un bouton d'export\n if (this.options.export) {\n var opts = Utils.assign({ control : this }, this.options.export);\n this.export = new ButtonExport(opts);\n this.export.render();\n var self = this;\n this.export.on(\"export:compute\", (e) => {\n self.dispatchEvent({\n type : \"export:compute\",\n content : e.content\n });\n });\n }\n\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this._panelRouteContainer,\n this._panelHeaderRouteContainer,\n map.getTargetElement()\n );\n }\n\n // mode \"collapsed\"\n if (!this.collapsed) {\n this._showRouteButton.setAttribute(\"aria-pressed\", true);\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n };\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Returns true if widget is collapsed (minimized), false otherwise\n *\n * @returns {Boolean} collapsed - true if widget is collapsed\n */\n getCollapsed () {\n return this.collapsed;\n }\n\n /**\n * Collapse or display widget main container\n *\n * @param {Boolean} collapsed - True to collapse widget, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.log(\"[ERROR] Route:setCollapsed - missing collapsed parameter\");\n return;\n }\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n if (collapsed) {\n document.getElementById(\"GProutePanelClose-\" + this._uid).click();\n } else {\n this._showRouteButton.click();\n }\n this.collapsed = collapsed;\n }\n\n /**\n * Get vector layer where geoJson route is drawn\n *\n * @returns {Object} layer - ol.layer.Vector route layer\n */\n getLayer () {\n return this._geojsonSections;\n }\n\n /**\n * Set vector layer where route geometry is drawn\n *\n * @param {Object} layer - ol.layer.Vector route layer\n */\n setLayer (layer) {\n if (!layer) {\n this._geojsonSections = null;\n return;\n }\n\n if (!(layer instanceof VectorLayer)) {\n logger.log(\"no valid layer given for hosting drawn features.\");\n return;\n }\n\n // application des styles\n layer.setStyle(this._defaultFeatureStyle);\n // sauvegarde\n this._geojsonSections = layer;\n }\n\n /**\n * Get vector layer\n *\n * @returns {String} geojson - GeoJSON format layer\n */\n getGeoJSON () {\n return JSON.stringify(this._geojsonObject);\n }\n\n /**\n * Set vector layer\n *\n * @param {String} geojson - GeoJSON format layer\n */\n setGeoJSON (geojson) {\n try {\n this._geojsonObject = JSON.parse(geojson);\n } catch (e) {\n logger.log(\"no valid geojson given :\" + e.message);\n }\n }\n\n /**\n * Get route informations\n *\n * @returns {Object} data - route informations\n */\n getData () {\n var points = [];\n for (let index = 0; index < this._currentPoints.length; index++) {\n const p = this._currentPoints[index];\n points.push(p.getCoordinate());\n }\n var data = {\n type : \"route\",\n points : points,\n transport : this._currentTransport,\n exclusions : this._currentExclusions,\n computation : this._currentComputation,\n results : {}\n };\n Utils.assign(data.results, this._currentRouteInformations);\n return data;\n }\n\n /**\n * Set route data\n *\n * @param {Object} data - control informations\n * @param {String} data.transport - transport type\n * @param {String} data.computation - computation type\n * @param {Array} data.exclusions - list of exclusions\n * @param {Array} data.points - list of points : [[lon, lat]]\n * @param {Object} data.results - service response\n */\n setData (data) {\n // INFO\n // transmettre toutes les informations necessaires pour reconstruire le panneau de resultats\n this._currentTransport = data.transport;\n this._currentComputation = data.computation;\n this._currentExclusions = data.exclusions;\n // INFO\n // nettoyer les points du calcul précedent\n for (var i = 0; i < this._currentPoints.length; i++) {\n var point = this._currentPoints[i];\n if (point.getCoordinate()) {\n // clean de l'objet sans declencher les evenements qui suppriment la couche précedente !\n // /!\\ point.clear()\n point.clearResults();\n // clean du dom\n var id = (i + 1) + \"-\" + this._uid;\n document.getElementById(\"GPlocationOriginCoords_\" + id).value = \"\";\n document.getElementById(\"GPlocationOrigin_\" + id).value = \"\";\n document.getElementById(\"GPlocationPoint_\" + id).style.cssText = \"\";\n if (i > 0 && i < 6) {\n // on masque les points intermediaires\n document.getElementById(\"GPlocationPoint_\" + id).className = \"GPflexInput GPelementHidden gpf-flex gpf-hidden \";\n }\n document.getElementById(\"GPlocationOriginPointer_\" + id).checked = false;\n document.getElementById(\"GPlocationOrigin_\" + id).className = \"GPelementVisible gpf-visible\";\n document.getElementById(\"GPlocationOriginCoords_\" + id).className = \"GPelementHidden gpf-hidden\";\n }\n }\n // ajout des nouvelles coordonnnées\n for (var j = 0; j < data.points.length; j++) {\n const c = data.points[j];\n if (c) {\n this._currentPoints[j].setCoordinate(c, \"EPSG:4326\");\n }\n }\n this._currentRouteInformations = data.results;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this._container;\n }\n\n /**\n * Get default style\n *\n * @returns {ol.style} style\n */\n getStyle () {\n return this._defaultFeatureStyle;\n }\n\n /**\n * This method is public.\n * It allows to init the control.\n */\n init () {\n // INFO\n // reconstruire le panneau de resultats sans lancer de calcul\n // * construire la liste des points (cf. RouteDOM._createRoutePanelFormElement())\n // * construire les resultats\n\n // init points\n for (let index = 0; index < this._currentPoints.length; index++) {\n const point = this._currentPoints[index];\n var id = index + 1;\n var coordinate = point.getCoordinate();\n if (coordinate) {\n var input = document.getElementById(\"GPlocationOrigin_\" + id + \"-\" + this._uid);\n input.value = coordinate[1].toFixed(4) + \" / \" + coordinate[0].toFixed(4);\n if (index > 0 && index < 6) {\n document.getElementById(\"GPlocationPoint_\" + id + \"-\" + this._uid).className = \"GPflexInput GPlocationStageFlexInput gpf-flex\";\n }\n }\n }\n\n // add points into panel\n var points = document.getElementsByClassName(\"GPlocationPoint-\" + this._uid);\n this._addRouteResultsStagesValuesElement(points);\n\n // set transport mode\n var transportdiv;\n if (this._currentTransport === \"Pieton\") {\n transportdiv = document.getElementById(\"GProuteTransportPedestrian-\" + this._uid);\n if (transportdiv) {\n transportdiv.checked = \"true\";\n }\n } else {\n transportdiv = document.getElementById(\"GProuteTransportCar-\" + this._uid);\n if (transportdiv) {\n transportdiv.checked = \"true\";\n }\n }\n\n // set computation mode\n var computationdiv = document.getElementById(\"GProuteComputationSelect-\" + this._uid);\n if (computationdiv) {\n computationdiv.value = this._currentComputation;\n }\n\n // set exclusions\n var tollInput = document.getElementById(\"GProuteExclusionsToll-\" + this._uid);\n if (tollInput) {\n if (this._currentExclusions.indexOf(\"toll\") !== -1) {\n tollInput.checked = false;\n } else {\n tollInput.checked = true;\n }\n }\n\n var tunnelInput = document.getElementById(\"GProuteExclusionsTunnel-\" + this._uid);\n if (tunnelInput) {\n if (this._currentExclusions.indexOf(\"tunnel\") !== -1) {\n tunnelInput.checked = false;\n } else {\n tunnelInput.checked = true;\n }\n }\n\n var bridgeInput = document.getElementById(\"GProuteExclusionsBridge-\" + this._uid);\n if (bridgeInput) {\n if (this._currentExclusions.indexOf(\"bridge\") !== -1) {\n bridgeInput.checked = false;\n } else {\n bridgeInput.checked = true;\n }\n }\n\n var distance = this._currentRouteInformations.totalDistance;\n var duration = this._currentRouteInformations.totalTime;\n\n // Détails avec simplifications des troncons\n var instructions = this._simplifiedInstructions(this._currentRouteInformations.routeInstructions);\n\n if (instructions) {\n this._fillRouteResultsDetailsContainer(distance, duration, instructions);\n }\n\n // affichage du panneau de details du controle !\n this._formRouteContainer.className = \"GPelementHidden gpf-hidden gpf-panel__content fr-modal__content\";\n this._hideWaitingContainer();\n this._resultsRouteContainer.className = \"\";\n }\n\n /**\n * Clean UI : reinit control\n */\n clean () {\n this._currentTransport = null;\n this._currentExclusions = [];\n this._currentComputation = null;\n\n for (var i = 0; i < this._currentPoints.length; i++) {\n this._currentPoints[i].clear();\n }\n\n this._removeRouteStepLocations();\n this._clearRouteInputOptions();\n this._clearRouteResultsDetails();\n\n this.setLayer();\n\n this._formRouteContainer.className = \"gpf-panel__content fr-modal__content\";\n this._resultsRouteContainer.className = \"GPelementHidden gpf-hidden\";\n }\n\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize route control (called by Route constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n this._checkInputOptions(options);\n\n // set default options\n this.options = {\n collapsed : true,\n draggable : false,\n export : false,\n graphs : [\"Pieton\", \"Voiture\"],\n exclusions : {\n toll : false,\n tunnel : false,\n bridge : false\n },\n routeOptions : {},\n autocompleteOptions : {},\n layerDescription : {\n title : \"Itinéraire\",\n description : \"Itinéraire basé sur un graphe\"\n }\n };\n\n // merge with user options\n Utils.assign(this.options, options);\n\n // cas particulier des markers par défaut\n var defaultMarkersOpts = {\n departure : {\n url : Markers[\"red\"],\n offset : Markers.defaultOffset\n },\n stages : {\n url : Markers[\"lightOrange\"],\n offset : Markers.defaultOffset\n },\n arrival : {\n url : Markers[\"darkOrange\"],\n offset : Markers.defaultOffset\n }\n };\n // on récupère les options de chaque type de marker si spécifié\n this.options.markersOpts = Utils.assign(defaultMarkersOpts, options.markersOpts);\n\n /** {Boolean} specify if Route control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n /** {Boolean} specify if Route control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n this._uid = this.options.id || SelectorID.generate();\n\n // containers principaux\n this._showRouteButton = null;\n this._panelRouteContainer = null;\n this._panelHeaderRouteContainer = null;\n this._waitingContainer = null;\n this._formRouteContainer = null;\n this._resultsRouteContainer = null;\n this._showRouteExclusionsElement = null;\n\n // liste de points selectionnée\n this._currentPoints = [];\n\n // Mode de transport selectionné : 'Voiture' ou 'Pieton'\n this._currentTransport = null;\n this._initTransport();\n\n // Mode de calcul selectionné : 'Plus rapide' ou 'plus court'\n this._currentComputation = null;\n this._initComputation();\n\n // Exclusions selectionnées : Tunnel, Toll et Bridge\n this._currentExclusions = [];\n this._initExclusions();\n\n // si un calcul est en cours ou non\n this._waiting = false;\n // timer pour cacher la patience après un certain temps\n this._timer = null;\n\n // la geometrie du parcours\n this._geojsonRoute = null;\n\n // la geometrie des troncons\n this._geojsonSections = null;\n\n // la geometrie des troncons au format GeoJSON\n this._geojsonObject = null;\n\n // bouton export\n this.export = null;\n\n // le container de la popup (pour les troncons selectionnés)\n this._popupContent = null;\n this._popupDiv = this._initPopupDiv();\n // l'overlay ol.Overlay correspondant à la popup (pour les troncons selectionnés)\n this._popupOverlay = null;\n\n // ol.interaction.Select associées à la couche des résultats (troncons)\n this._resultsSelectInteraction = null;\n this._resultsHoverInteraction = null;\n\n // styles pour les sélections des features\n this._defaultFeatureStyle = new Style({\n stroke : new Stroke({\n color : \"rgba(0,183,152,0.9)\",\n width : 12\n })\n });\n this._selectedFeatureStyle = new Style({\n stroke : new Stroke({\n color : \"rgba(255,102,0,0.9)\",\n width : 12\n })\n });\n\n // reponse du service\n // Ex. {\n // totalTime, totalDistance, bbox, routeGeometry,\n // routeInstructions : [{duration, distance, code, instruction, bbox, geometry}]\n // }\n this._currentRouteInformations = null;\n\n // liste des ressources avec droits par service\n // Ex. {\n // \"Route\" : {\n // key : \"ger4g456re45er456t4er5ge5\",\n // resources : [\"Pieton\", \"Voiture\"]\n // }\n // }\n this._resources = {};\n\n // listener key for event on pointermove or moveend map\n this.listenerKey = null;\n }\n\n /**\n * this method is called by this.initialize()\n *\n * @param {Object} options - options\n *\n * @private\n */\n _checkInputOptions (options) {\n // vérification des options\n // mode de transport\n if (options.graphs) {\n // on ne permet pas de passer un tableau vide : on spécifie au moins un graph\n if (Array.isArray(options.graphs) && options.graphs.length) {\n for (var i = 0; i < options.graphs.length; i++) {\n if (typeof options.graphs[i] === \"string\") {\n if (options.graphs[i].toLowerCase() === \"pieton\") {\n options.graphs[i] = \"Pieton\";\n }\n if (options.graphs[i].toLowerCase() === \"voiture\") {\n options.graphs[i] = \"Voiture\";\n }\n } else {\n logger.log(\"[ol.control.Route] ERROR : parameter 'graphs' elements should be of type 'string'\");\n options.graphs[i] = null;\n }\n }\n } else {\n logger.warn(\"'graphs' parameter should be an array\");\n options.graphs = null;\n }\n }\n\n // collapsed\n if (options.collapsed === \"true\") {\n options.collapsed = true;\n }\n if (options.collapsed === \"false\") {\n options.collapsed = false;\n }\n }\n\n /**\n * initialize component container (DOM)\n *\n * @param {Object} map - the map\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initContainer (map) {\n // get main container\n var container = this._container;\n if (container.childElementCount > 0) {\n return container;\n }\n\n var picto = this._showRouteButton = this._createShowRoutePictoElement();\n container.appendChild(picto);\n\n var routePanel = this._panelRouteContainer = this._createRoutePanelElement();\n var routePanelDiv = this._createRoutePanelDivElement();\n routePanel.appendChild(routePanelDiv);\n\n // header form\n var routeHeader = this._panelHeaderRouteContainer = this._createRoutePanelHeaderElement();\n routePanelDiv.appendChild(routeHeader);\n\n // form\n var routeForm = this._formRouteContainer = this._createRoutePanelFormElement();\n\n // form: menu des modes\n routeForm.appendChild(this._createRoutePanelFormModeChoiceTransportElement(this.options.graphs));\n\n // form: menu des points\n var points = this._createRoutePanelFormPointsElement(map);\n for (var i = 0; i < points.length; i++) {\n routeForm.appendChild(points[i]);\n }\n\n routeForm.appendChild(this._createRoutePanelFormModeChoiceComputeElement());\n\n // form: menu des exclusions\n this._showRouteExclusionsElement = this._createShowRouteExclusionsPictoElement();\n routeForm.appendChild(this._showRouteExclusionsElement);\n var exclusion = this._createRoutePanelFormExclusionsElement();\n exclusion.appendChild(this._createRoutePanelFormExclusionOptionsElement(this.options.exclusions));\n routeForm.appendChild(exclusion);\n\n var panelFooter = this._createRoutePanelFooterElement();\n routeForm.appendChild(panelFooter);\n\n if (!checkDsfr()) {\n var buttonReset = this._createRouteFormResetElement();\n panelFooter.appendChild(buttonReset);\n }\n\n // form: bouton du calcul\n var buttonSubmit = this._createRouteSubmitFormElement();\n panelFooter.appendChild(buttonSubmit);\n\n routePanelDiv.appendChild(routeForm);\n\n // results\n var routeResults = this._resultsRouteContainer = this._createRoutePanelResultsElement();\n routePanelDiv.appendChild(routeResults);\n\n // waiting\n var waiting = this._waitingContainer = this._createRouteWaitingElement();\n routePanelDiv.appendChild(waiting);\n\n container.appendChild(routePanel);\n // hide autocomplete suggested locations on container click\n if (container.addEventListener) {\n container.addEventListener(\"click\", (e) => this._hideRouteSuggestedLocations(e));\n }\n\n return container;\n }\n\n // ################################################################### //\n // ####################### init application ########################## //\n // ################################################################### //\n\n /**\n * this method is called by the constructor and initialize transport mode\n * (\"Voiture\" ou \"Pieton\")\n *\n * @private\n */\n _initTransport () {\n // Mode de transport selectionné\n this._currentTransport = \"Pieton\"; // par defaut\n\n // par defaut\n var transport = this.options.graphs;\n if (!transport || transport.length === 0) {\n this.options.graphs = [\"Pieton\", \"Voiture\"];\n }\n\n // option\n if (Array.isArray(transport) && transport.length) {\n // FIXME pb si le 1er graphe n'est pas une ressource connue !\n if (transport[0] === \"Voiture\" || transport[0] === \"Pieton\") {\n this._currentTransport = transport[0];\n }\n }\n\n // TODO option sur le service\n var serviceOptions = this.options.routeOptions;\n if (serviceOptions.graph) {\n this._currentTransport = serviceOptions.graph;\n }\n }\n\n /**\n * this method is called by the constructor and initialize computation mode\n * (fastest or shortest)\n *\n * @private\n */\n _initComputation () {\n // Mode de calcul selectionné\n this._currentComputation = \"fastest\"; // par defaut\n\n // TODO option sur le service\n var serviceOptions = this.options.routeOptions;\n if (serviceOptions.routePreference) {\n this._currentComputation = serviceOptions.routePreference;\n }\n }\n\n /**\n * this method is called by the constructor and initialize exclusions\n *\n * @private\n */\n _initExclusions () {\n // Exclusions selectionnées : Tunnel, Toll et Bridge\n this._currentExclusions = []; // par defaut\n\n // par defaut\n var exclusion = this.options.exclusions;\n if (!exclusion || (typeof exclusion === \"object\" && Object.keys(exclusion).length === 0)) {\n this.options.exclusions = {\n toll : false,\n tunnel : false,\n bridge : false\n };\n }\n\n // option\n if (exclusion && typeof exclusion === \"object\" && Object.keys(exclusion).length) {\n for (var k in exclusion) {\n if (exclusion.hasOwnProperty(k)) {\n if (exclusion[k]) {\n this._currentExclusions.push(k);\n }\n }\n }\n }\n\n // TODO option sur le service\n var serviceOptions = this.options.routeOptions;\n if (Array.isArray(serviceOptions.exclusions)) {\n this._currentExclusions = serviceOptions.exclusions;\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize popup div\n * (to display results information on route result click)\n *\n * @return {Object} element - DOM element for popup\n * @private\n */\n _initPopupDiv () {\n var context = this;\n var element = document.createElement(\"div\");\n element.className = \"gp-feature-info-div\";\n var closer = document.createElement(\"button\");\n closer.className = \"gp-styling-button closer\";\n // on closer click : remove popup\n closer.onclick = function () {\n if (context._popupOverlay != null) {\n context._popupOverlay.setPosition(undefined);\n }\n return false;\n };\n this._popupContent = document.createElement(\"div\");\n this._popupContent.className = \"gp-features-content-div\";\n element.appendChild(this._popupContent);\n element.appendChild(closer);\n\n return element;\n }\n\n // ################################################################### //\n // ############################## DOM ################################ //\n // ################################################################### //\n\n /**\n * Create List Points\n * Overwrite RouteDOM method !\n *\n * @param {Object} map - the map\n *\n * @returns {Array} List DOM element\n * @private\n */\n _createRoutePanelFormPointsElement (map) {\n var points = [];\n var count = 1;\n\n // point de depart\n var start = new LocationSelector({\n apiKey : this.options.apiKey || null,\n tag : {\n id : count,\n groupId : this._uid,\n markerOpts : this.options.markersOpts[\"departure\"],\n display : true\n },\n autocompleteOptions : this.options.autocompleteOptions || null\n });\n start.setMap(map);\n // on ajoute des écouteurs d'évènements (en plus de ceux de LocationSelector),\n // pour prendre en compte les CSS spécifiques de GProuteForm\n this._addFormPointsEventListeners(start);\n points.push(this._createRoutePanelFormPointLabel(\"Départ\"));\n points.push(start._container);\n this._currentPoints.push(start);\n\n // points intermediaires\n for (count = 2; count < 7; count++) {\n var step = new LocationSelector({\n apiKey : this.options.apiKey || null,\n tag : {\n id : count,\n groupId : this._uid,\n markerOpts : this.options.markersOpts[\"stages\"],\n display : false,\n removeOption : true\n },\n autocompleteOptions : this.options.autocompleteOptions || null\n });\n step.setMap(map);\n this._addFormPointsEventListeners(step);\n points.push(this._createRoutePanelFormPointLabel(\"Étape\", false));\n points.push(step._container);\n this._currentPoints.push(step);\n }\n\n // point d'arrivée\n var end = new LocationSelector({\n apiKey : this.options.apiKey || null,\n tag : {\n id : count,\n groupId : this._uid,\n markerOpts : this.options.markersOpts[\"arrival\"],\n display : true,\n addOption : true\n },\n autocompleteOptions : this.options.autocompleteOptions || null\n });\n end.setMap(map);\n this._addFormPointsEventListeners(end);\n points.push(this._createRoutePanelFormPointLabel(\"Arrivée\"));\n points.push(end._container);\n this._currentPoints.push(end);\n\n return points;\n }\n\n /**\n * Attach events listeners to route form points (locationSelector)\n *\n * @param {Object} formPoint - route form point (locationSelector)\n * @private\n */\n _addFormPointsEventListeners (formPoint) {\n if (!formPoint) {\n return;\n }\n\n if (formPoint._buttonLabel.addEventListener) {\n // display form on origin label click\n formPoint._buttonLabel.addEventListener(\n \"click\",\n (e) => this.onRouteOriginLabelClick(e)\n );\n // minimize form on input show pointer, and set map event listeners (see this.onRouteOriginPointerClick)\n formPoint._inputShowPointer.addEventListener(\n \"click\",\n (e) => this.onRouteOriginPointerClick(e, formPoint)\n );\n if (formPoint._removePointElement) {\n formPoint._removePointElement.addEventListener(\n \"click\",\n (e) => {\n logger.trace(\"click on _removePointElement\", e);\n // Moving up exclusions picto\n // var exclusionsPictoTop = context._showRouteExclusionsElement.style.top;\n // context._showRouteExclusionsElement.style.top = (parseInt(exclusionsPictoTop, 10) - 33).toString() + \"px\";\n }\n );\n }\n if (formPoint._addPointElement) {\n formPoint._addPointElement.addEventListener(\n \"click\",\n (e) => {\n logger.trace(\"click on _addPointElement\", e);\n // Moving down exclusions picto\n // var exclusionsPictoTop = context._showRouteExclusionsElement.style.top;\n // context._showRouteExclusionsElement.style.top = (parseInt(exclusionsPictoTop, 10) + 33).toString() + \"px\";\n }\n );\n }\n } else if (formPoint._buttonLabel.attachEvent) {\n // attachEvent: Internet explorer event listeners management\n formPoint._buttonLabel.attachEvent(\n \"onclick\",\n (e) => this.onRouteOriginLabelClick(e)\n );\n formPoint._inputShowPointer.attachEvent(\n \"onclick\",\n (e) => this.onRouteOriginPointerClick(e, formPoint)\n );\n if (formPoint._removePointElement) {\n formPoint._removePointElement.attachEvent(\n \"onclick\",\n (e) => {\n // Moving up exclusions picto\n // var exclusionsPictoTop = context._showRouteExclusionsElement.style.top;\n // context._showRouteExclusionsElement.style.top = (parseInt(exclusionsPictoTop, 10) - 33).toString() + \"px\";\n }\n );\n }\n if (formPoint._addPointElement) {\n formPoint._addPointElement.attachEvent(\n \"onclick\",\n (e) => {\n // Moving down exclusions picto\n // var exclusionsPictoTop = context._showRouteExclusionsElement.style.top;\n // context._showRouteExclusionsElement.style.top = (parseInt(exclusionsPictoTop, 10) + 33).toString() + \"px\";\n }\n );\n }\n }\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'submit' on 'GProuteForm' tag form\n * (cf. this._createRoutePanelFormElement), and it displays the results.\n *\n * @param {Object} options - options\n * @private\n */\n onRouteComputationSubmit (options) {\n logger.log(\"onRouteComputationSubmit\", options);\n\n // FIXME on lance une requête en EPSG:4326, les coordonnées\n // doivent donc être du type cad en lat/lon.\n // or, BUG du service du calcul d'itineraire car les\n // coordonnées envoyées doivent être en lon/lat avec une SRS en EPSG:4326 !?\n // sinon, ça plante...\n\n // Liste des points\n var points = this._currentPoints;\n\n // - point de depart (info: points[0].getCoordinate est du type [lon, lat], en EPSG:4326)\n var start;\n if (points[0] && points[0].getCoordinate) {\n var startCoordinate = points[0].getCoordinate();\n start = {\n x : startCoordinate[0],\n y : startCoordinate[1]\n };\n logger.log(\"start\", start);\n }\n\n // - point d'arrivée\n var end;\n var endPoint = points[points.length - 1];\n if (endPoint && endPoint.getCoordinate) {\n var endCoordinate = endPoint.getCoordinate();\n end = {\n x : endCoordinate[0],\n y : endCoordinate[1]\n };\n logger.log(\"end\", end);\n }\n\n // - les étapes\n var step = [];\n for (var i = 1; i < points.length - 1; i++) {\n if (points[i] && points[i].getCoordinate) {\n var iCoordinate = points[i].getCoordinate();\n if (iCoordinate) {\n var coordinate = {\n x : iCoordinate[0],\n y : iCoordinate[1]\n };\n logger.log(\"step\", coordinate);\n step.push(coordinate);\n }\n }\n }\n\n // valeurs selectionnées\n this._currentTransport = options.transport;\n this._currentComputation = options.computation;\n this._currentExclusions = options.exclusions;\n\n // on recupere les éventuelles options du service passées par l'utilisateur\n var routeOptions = this.options.routeOptions;\n\n // OVERLOAD : la resource bd-topo-osrm ne gère pas le calcul piéton en mode fastest\n // dans ce cas, on utilise valhalla dans le cas d'une utilisation par défaut du widget\n // sans paramétrage de resource explicitement demandé\n var routeResource;\n if (!routeOptions.resource) {\n if (this._currentComputation === \"fastest\" && this._currentTransport === \"Pieton\") {\n routeResource = \"bdtopo-valhalla\";\n }\n } else {\n routeResource = routeOptions.resource;\n }\n\n // gestion du protocole et du timeout\n // le timeout est indispensable sur le protocole JSONP.\n var _protocol = routeOptions.protocol || \"XHR\";\n var _timeout = routeOptions.timeOut || 0;\n if (_protocol === \"JSONP\" && _timeout === 0) {\n // FIXME le timeout est obligatoire pour ce type de protocole...\n _timeout = 15000;\n }\n\n // gestion des callback\n var bOnFailure = !!(routeOptions.onFailure !== null && typeof routeOptions.onFailure === \"function\"); // cast variable to boolean\n var bOnSuccess = !!(routeOptions.onSuccess !== null && typeof routeOptions.onSuccess === \"function\");\n\n // on met en place l'affichage des resultats dans la fenetre de resultats.\n var context = this;\n this._requestRouting({\n startPoint : start,\n endPoint : end,\n viaPoints : step,\n graph : routeOptions.graph || this._currentTransport,\n routePreference : routeOptions.routePreference || this._currentComputation,\n exclusions : routeOptions.exclusions || this._currentExclusions,\n geometryInInstructions : true,\n distanceUnit : \"m\",\n timeOut : _timeout,\n protocol : _protocol,\n resource : routeResource,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(results);\n if (results) {\n context._fillRouteResultsDetails(results);\n }\n if (bOnSuccess) {\n routeOptions.onSuccess.call(context, results);\n }\n },\n // callback onFailure\n onFailure : function (error) {\n context._hideWaitingContainer();\n context._clearRouteResultsDetails();\n logger.log(error.message);\n if (bOnFailure) {\n routeOptions.onFailure.call(context, error);\n }\n }\n });\n }\n\n /**\n * this method is called by event 'click' on 'GPlocationOriginLabel' label\n * and set 'GProuteForm' CSS class to \"\" (normal)\n *\n * @param {Object} routeControl - context : route Control (this)\n * @private\n */\n onRouteOriginLabelClick () {\n this._formRouteContainer.className = \"gpf-panel__content gpf-mobile-form fr-modal__content\";\n // on désactive l'écouteur d'événements sur la carte (pour ne pas placer un marker au clic)\n // map.un(\n // \"click\",\n // () => {\n // // on ne rétablit pas le mode \"normal\" si on est dans le panel des résultats (où className = \"GProuteComponentHidden\")\n // if (this._formRouteContainer.className === \"GProuteFormMini\") {\n // this._formRouteContainer.className = \"gpf-panel__content fr-modal__content\";\n // }\n // }\n // );\n olObservableUnByKey(this.listenerKey);\n this.dispatchEvent(\"route:drawend\");\n }\n\n /**\n * this method is called by event 'click' on 'GPlocationOriginPointerImg' label\n * and display or minimize 'GProuteForm', using CSS class (\"GProuteFormMini\" or \"\")\n *\n * @param {Object} e - context : route Control (equivalent to this)\n * @param {Object} locationSelector - context : locationSelector input (one of this._currentPoints)\n * @private\n */\n onRouteOriginPointerClick (e, locationSelector) {\n var map = this.getMap();\n if (locationSelector._inputShowPointerContainer.checked) {\n // au click sur l'input pour pointer sur la carte: on minimise le formulaire\n this._formRouteContainer.className = \"GProuteFormMini gpf-panel__content fr-modal__content\";\n e.target.parentElement.parentElement.classList.add(\"selected\");\n // et au clic sur la carte, on réaffichera le formulaire \"normal\"\n this.listenerKey = map.on(\n \"click\",\n () => {\n e.target.parentElement.parentElement.classList.remove(\"selected\");\n // on ne rétablit pas le mode \"normal\" si on est dans le panel des résultats (où className = \"GProuteComponentHidden\")\n if (this._formRouteContainer.className === \"GProuteFormMini gpf-panel__content fr-modal__content\") {\n this._formRouteContainer.className = \"gpf-panel__content fr-modal__content\";\n }\n olObservableUnByKey(this.listenerKey);\n /**\n * event triggered at the end of drawing input\n *\n * @event route:drawend\n */\n this.dispatchEvent(\"route:drawend\");\n }\n );\n /**\n * event triggered at the start of drawing input\n *\n * @event route:drawstart\n */\n this.dispatchEvent(\"route:drawstart\");\n } else {\n // si on déselectionne le pointer, on rétablit le formulaire en mode normal\n this._formRouteContainer.className = \"\";\n // et on enlève l'écouteur d'évènement sur la carte\n // map.un(\n // \"click\",\n // () => {\n // // on ne rétablit pas le mode \"normal\" si on est dans le panel des résultats (où className = \"GProuteComponentHidden\")\n // if (this._formRouteContainer.className === \"GProuteFormMini\") {\n // this._formRouteContainer.className = \"gpf-panel__content fr-modal__content\";\n // }\n // }\n // );\n olObservableUnByKey(this.listenerKey);\n this.dispatchEvent(\"route:drawend\");\n }\n }\n\n /**\n * this method is called by event 'click' on 'GPshowRoutePicto'\n * tag label (cf. this._createShowRoutePictoElement),\n * and it cleans all value of input.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onShowRoutePanelClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n // on supprime toutes les interactions\n Interactions.unset(map);\n // clean !\n if (!this._geojsonSections && !this._waiting) {\n this._clear();\n }\n var opened = this._showRouteButton.ariaPressed;\n this.collapsed = !(opened === \"true\");\n // on génère nous même l'evenement OpenLayers de changement de pté\n // (utiliser ol.control.Route.on(\"change:collapsed\", function ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n }\n\n /**\n * this method is called by event 'change' on 'GProuteComputationSelect' tag select\n * (cf. this._createRoutePanelFormModeChoiceComputeElement).\n * this value is saved as a parameter for the service route.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onRouteModeComputationChange (e) {\n var value = e.target.value;\n\n if (!value) {\n return;\n }\n\n logger.log(value);\n this._currentComputation = value;\n }\n\n /**\n * this method is called by event 'change' on 'GProuteResultsComputationSelect' tag select\n * (cf. this._createRouteResultsElement).\n * this value is saved as a parameter for the service route,\n * and this launches the route request !\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onRouteModeComputationChangeAndRun (e) {\n // event choice computation\n this.onRouteModeComputationChange(e);\n\n // clean avant un nouveau calcul !\n this._clearRouteResultsDetails();\n this._clearRouteResultsGeometry();\n this._clearRouteResultsFeatureGeometry();\n\n // submit request\n this.onRouteComputationSubmit({\n computation : this._currentComputation,\n transport : this._currentTransport,\n exclusions : this._currentExclusions\n });\n }\n\n /**\n * this method is called by event 'change' on 'GProuteTransportCar' or 'GProuteTransportPedestrian' tag input\n * (cf. this._createRoutePanelFormModeChoiceTransportElement).\n * this value is saved as a parameter for the service route.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onRouteModeTransportChange (e) {\n var value = e.target.value;\n if (!value) {\n return;\n }\n this._currentTransport = value;\n }\n\n /**\n * TODO this method is called by event 'click' on 'GPshowRouteExclusionsPicto' tag input\n * (cf. this._createShowRouteExclusionsPictoElement), and it displays the panel options of exclusions.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onShowRouteExclusionsClick (e) {\n logger.log(\"onShowRouteExclusionsClick\", e);\n // FIXME not use ?!\n }\n\n /**\n * this method is called by event 'change' on 'GProuteExclusionsToll'\n * or 'GProuteExclusionsTunnel' or 'GProuteExclusionsBridge' tag input\n * (cf. this._createRoutePanelFormExclusionOptionsElement).\n * this value is saved as a parameter for the service route.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onRouteExclusionsChange (e) {\n var value = e.target.value;\n var checked = e.target.checked;\n\n if (!value || (typeof value !== \"string\")) {\n return;\n }\n value = value.toLowerCase();\n\n var bFound = false;\n var iFound = null;\n for (var i = 0; i < this._currentExclusions.length; i++) {\n if (this._currentExclusions[i] === value) {\n iFound = i;\n bFound = true;\n }\n }\n // on l'ajoute si la valeur n'existe pas et est déselectionnée\n // info : checked = passage autorisé (ce n'est pas une exclusion)\n if (!bFound && !checked) {\n this._currentExclusions.push(value);\n }\n // on la retire si la valeur existe et est selectionnée\n if (bFound && checked) {\n this._currentExclusions.splice(iFound, 1);\n }\n }\n\n /**\n * this method is called by event 'click' on 'GProuteReset'\n * tag label (cf. this._createRouteFormResetElement),\n * and it cleans all route input options and results.\n *\n * @private\n */\n onRouteResetClick () {\n // clear points\n var currentPoints = this._currentPoints;\n for (var i = 0; i < currentPoints.length; i++) {\n currentPoints[i].clear();\n }\n\n // clear results\n this._clear();\n\n this._clearRouteInputOptions();\n }\n\n /**\n * this method is called by event 'click' on 'GProuteSubmit'\n * tag label (cf. this._createRouteSubmitFormElement),\n * and it cleans the route geometry.\n *\n * @private\n */\n onShowRouteResultsNewClick () {\n // clean avant un nouveau calcul !\n this._clearRouteResultsDetails();\n this._clearRouteResultsGeometry();\n this._clearRouteResultsFeatureGeometry();\n }\n\n /**\n * this method is called by event 'mouseover' on 'GProuteResultsDetailsInstruction_'\n * tag label (cf. this._addRouteResultsDetailsElement),\n * and it makes a style on feature route.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onRouteResultsDetailsMouseOver (e) {\n // récupération de l'id de l'instruction survolée\n var tagid = e.target.id; // ex GProuteResultsDetailsInstruction_125\n var idx = tagid.substring(tagid.indexOf(\"_\") + 1); // ex. 125\n\n // on passe le texte en gras\n if (e.target.classList) {\n e.target.classList.add(\"GProuteResultsDetailsInstructionHighlight\");\n }\n\n if (!this._geojsonSections) {\n return;\n }\n\n // on récupère l'entité correspondante à l'instruction survolée\n var f = this._geojsonSections.getSource().getFeatureById(parseInt(idx, 10));\n // et on lui affecte un nouveau style\n f.setStyle(this._selectedFeatureStyle);\n }\n\n /**\n * this method is called by event 'mouseout' on 'GProuteResultsDetailsInstruction_'\n * tag label (cf. this._addRouteResultsDetailsElement),\n * and it deletes a style on feature route.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onRouteResultsDetailsMouseOut (e) {\n // récupération de l'id de l'instruction survolée\n var tagid = e.target.id; // ex GProuteResultsDetailsInstruction_125\n var idx = tagid.substring(tagid.indexOf(\"_\") + 1); // ex. 125\n\n // on repasse le texte en style normal\n if (e.target.classList) {\n e.target.classList.remove(\"GProuteResultsDetailsInstructionHighlight\");\n }\n\n if (!this._geojsonSections) {\n return;\n }\n // on récupère l'entité correspondante à l'instruction qui était survolée\n var f = this._geojsonSections.getSource().getFeatureById(parseInt(idx, 10));\n // et on lui réaffecte un style normal\n f.setStyle(null);\n }\n\n // ################################################################### //\n // ########################### Routing ############################### //\n // ############## (methods to request and results) ################### //\n\n /**\n * this method is called by this.onRouteComputationSubmit()\n * and executes a request to the service.\n *\n * @param {Object} options - route service request options\n * @param {Function} options.onSuccess - callback\n * @param {Function} options.onFailure - callback\n * @private\n */\n _requestRouting (options) {\n // on ne fait pas de requête si on n'a pas renseigné de parametres !\n if (!options || (typeof options === \"object\" && Object.keys(options).length === 0)) {\n return;\n }\n\n // on ne fait pas de requête si\n // - la parametre 'startPoint' est vide !\n if (!options.startPoint) {\n return;\n }\n // - la parametre 'endPoint' est vide !\n if (!options.endPoint) {\n return;\n }\n\n // cas où la clef API n'est pas renseignée dans les options du service,\n // on utilise celle renseignée au niveau du controle (calcul par défaut)\n options.apiKey = this.options.routeOptions.apiKey || this.options.apiKey;\n\n // si l'utilisateur a spécifié le paramètre ssl au niveau du control, on s'en sert\n // true par défaut (https)\n if (typeof options.ssl !== \"boolean\") {\n if (typeof this.options.ssl === \"boolean\") {\n options.ssl = this.options.ssl;\n } else {\n options.ssl = true;\n }\n }\n logger.log(options);\n\n // mise en place de la patience\n this._displayWaitingContainer();\n\n // appel du service de calcul d'itinéraires\n Gp.Services.route(options);\n }\n\n /**\n * this method is called by this.onRouteComputationSubmit() (in case of route computation success)\n * and fills the container of the route instructions list, distance and time\n * information, also, constructs the geometry route.\n *\n * @param {Object} results - results of the route calculation\n *\n * @private\n */\n _fillRouteResultsDetails (results) {\n // 1. Affichage des distances et durées\n var distance = results.totalDistance;\n var duration = results.totalTime;\n // Détails avec simplifications des troncons\n var instructions = this._simplifiedInstructions(results.routeInstructions);\n // var instructions = results.routeInstructions;\n\n if (instructions) {\n this._fillRouteResultsDetailsContainer(distance, duration, instructions);\n }\n\n // 2. Affichage des géométries\n // Geometrie simplifiée (si renseignée)\n var geometry = results.routeGeometry;\n if (geometry) {\n this._fillRouteResultsDetailsGeometry(geometry, this._defaultFeatureStyle);\n }\n\n // Geometries des tronçon (si renseignée)\n if (instructions && instructions[0].geometry) {\n this._fillRouteResultsDetailsFeatureGeometry(instructions, this._defaultFeatureStyle);\n }\n\n // 3. Zoom sur l'emprise de l'itinéraire (si spécifiée)\n var bbox = results.bbox;\n if (bbox) {\n var map = this.getMap();\n var bounds = [bbox.left, bbox.bottom, bbox.right, bbox.top];\n // reprojection dans la projection de la carte (bbox initialement en EPSG:4326)\n var mapProj = map.getView().getProjection().getCode();\n if (mapProj !== \"EPSG:4326\") {\n bounds = olTransformExtentProj(bounds, \"EPSG:4326\", mapProj);\n }\n map.getView().fit(bounds, map.getSize());\n }\n\n // sauvegarde de l'etat des resultats\n this._currentRouteInformations = results;\n\n /**\n * event triggered when the compute is finished\n *\n * @event route:compute\n * @property {Object} type - event\n * @property {Object} target - instance Route\n * @example\n * Route.on(\"route:compute\", function (e) {\n * console.log(e.target.getData());\n * })\n */\n this.dispatchEvent({\n type : \"route:compute\"\n });\n\n // mise à jour du controle !\n this._formRouteContainer.className = \"GPelementHidden gpf-hidden gpf-panel__content fr-modal__content\";\n this._hideWaitingContainer();\n this._resultsRouteContainer.className = \"\";\n }\n\n /**\n * this method is called by this._fillRouteResultsDetails()\n * and fills the container of the route instructions list, distance and time\n * information.\n *\n * @param {Number} distance - distance\n * @param {Number} duration - duration\n * @param {Object[]} instructions - list of instructions\n *\n * @private\n */\n _fillRouteResultsDetailsContainer (distance, duration, instructions) {\n // Distance et Durée\n this._resultsRouteValuesContainer = this._addRouteResultsValuesElement(distance, duration, this._convertSecondsToTime);\n\n // Détails\n this._resultsRouteDetailsContainer = this._addRouteResultsDetailsElement(instructions, this._convertSecondsToTime);\n }\n\n /**\n * this method is called by this._fillRouteResultsDetails()\n * and constructs the geometry route.\n *\n * @param {Object} geometry - geoJSON object for route geometry\n * @param {Object} style - route ol.style.Style object\n * @private\n */\n _fillRouteResultsDetailsGeometry (geometry, style) {\n this._clearRouteResultsGeometry();\n\n var map = this.getMap();\n\n if (!geometry) {\n return;\n }\n\n // création de l'objet geoJSON\n var geojsonObject = {\n type : \"FeatureCollection\",\n features : [\n {\n type : \"Feature\",\n crs : {\n type : \"name\",\n properties : {\n name : \"EPSG:4326\"\n }\n },\n geometry : geometry\n }\n ]\n };\n\n var geojsonformat = new GeoJSONExtended({\n defaultDataProjection : \"EPSG:4326\",\n defaultStyle : style\n\n });\n var features = geojsonformat.readFeatures(\n geojsonObject, {\n dataProjection : \"EPSG:4326\",\n featureProjection : \"EPSG:3857\"\n }\n );\n\n // ajout de la géométrie comme nouvelle couche vecteur à la carte\n this._geojsonRoute = new VectorLayer({\n source : new VectorSource({\n features : features\n }),\n style : style,\n title : \"Mon Itinéraire\"\n });\n map.addLayer(this._geojsonRoute);\n }\n\n /**\n * this method is called by this._fillRouteResultsDetails()\n * and constructs the geometries street with informations.\n *\n * @param {Array} instructions - route instructions list (containing geoJSON geometry)\n * @param {Object} style - route ol.style.Style object\n * @private\n */\n _fillRouteResultsDetailsFeatureGeometry (instructions, style) {\n this._clearRouteResultsFeatureGeometry();\n\n var map = this.getMap();\n\n // 1. création de l'objet geoJSON\n this._geojsonObject = {\n type : \"FeatureCollection\",\n crs : {\n type : \"name\",\n properties : {\n name : \"EPSG:4326\"\n }\n },\n features : []\n };\n\n // 2. Remplissage de l'objet geoJSON : ajout des géométries de chaque instruction\n for (var i = 0; i < instructions.length; i++) {\n var o = instructions[i];\n var id = i + 1;\n\n var coords = o.geometry.coordinates;\n for (var j = 0; j < coords.length; j++) {\n // remarque : les coordonnées sont au format string, à convertir en nombres\n if (typeof coords[j][0] === \"string\") {\n coords[j][0] = parseFloat(coords[j][0]);\n coords[j][1] = parseFloat(coords[j][1]);\n }\n }\n\n this._geojsonObject.features.push({\n type : \"Feature\",\n geometry : o.geometry,\n properties : {\n popupContent : \"(\" + id + \") distance : \" + this._convertDistance(o.distance) +\n \" / temps : \" + this._convertSecondsToTime(o.duration)\n },\n id : id\n });\n }\n\n // Ajout du point de depart du tracé\n this._geojsonObject.features.push({\n type : \"Feature\",\n geometry : {\n type : \"Point\",\n coordinates : this._currentPoints[0].getCoordinate()\n },\n properties : {\n description : \"Point de départ\",\n \"marker-symbol\" : this.options.markersOpts.departure.url\n }\n });\n\n // Ajout des points d'étapes\n for (var k = 1; k < this._currentPoints.length - 1; k++) {\n if (this._currentPoints[k] && this._currentPoints[k].getCoordinate) {\n var coordinates = this._currentPoints[k].getCoordinate();\n if (coordinates) {\n this._geojsonObject.features.push({\n type : \"Feature\",\n geometry : {\n type : \"Point\",\n coordinates : coordinates\n },\n properties : {\n description : \"Point d'étape\",\n \"marker-symbol\" : this.options.markersOpts.stages.url\n }\n });\n }\n }\n }\n\n // Ajout du point d'arrivée du tracé\n this._geojsonObject.features.push({\n type : \"Feature\",\n geometry : {\n type : \"Point\",\n coordinates : this._currentPoints[this._currentPoints.length - 1].getCoordinate()\n },\n properties : {\n description : \"Point d'arrivée\",\n \"marker-symbol\" : this.options.markersOpts.arrival.url\n }\n });\n\n // Création du format GeoJSON, avec reprojection des géométries\n var geojsonformat = new GeoJSONExtended({\n defaultDataProjection : \"EPSG:4326\",\n defaultStyle : style\n });\n var mapProj = this.getMap().getView().getProjection().getCode();\n var features = geojsonformat.readFeatures(\n this._geojsonObject, {\n dataProjection : \"EPSG:4326\",\n featureProjection : mapProj\n }\n );\n\n // 3. Ajout du tracé de l'itinéraire (geoJSON) comme nouvelle couche vecteur à la carte\n this._geojsonSections = new VectorLayer({\n source : new VectorSource({\n features : features\n }),\n style : style,\n opacity : 0.9,\n title : \"Mon Itinéraire\"\n });\n\n var graph;\n if (this._currentTransport === \"Pieton\") {\n graph = \"piéton\";\n this._geojsonSections.gpResultLayerId = \"compute:Pieton$OGC:OPENLS;Itineraire\";\n } else {\n graph = \"voiture\";\n this._geojsonSections.gpResultLayerId = \"compute:Voiture$OGC:OPENLS;Itineraire\";\n }\n // ajout à la carte\n map.addLayer(this._geojsonSections);\n\n // 4. Si un layer switcher est présent dans la carte, on lui affecte des informations pour cette couche\n map.getControls().forEach(\n (control) => {\n if (control instanceof LayerSwitcher) {\n // un layer switcher est présent dans la carte\n var layerId = this._geojsonSections.gpLayerId;\n // on n'ajoute des informations que s'il n'y en a pas déjà (si le titre est le numéro par défaut)\n if (control._layers[layerId].title === layerId) {\n control.addLayer(\n this._geojsonSections, {\n title : this.options.layerDescription.title + \" (\" + graph + \")\",\n description : this.options.layerDescription.description\n }\n );\n }\n }\n },\n this\n );\n\n // 5. Ajout de popups aux troncons\n // Création de l'interaction : survol des features (=troncons de l'itinéraire)\n this._resultsHoverInteraction = new SelectInteraction({\n condition : eventPointerMove,\n layers : [this._geojsonSections],\n style : this._selectedFeatureStyle\n });\n this._resultsHoverInteraction.on(\n \"select\",\n (e) => this._onResultsFeatureMouseOver(e)\n );\n map.addInteraction(this._resultsHoverInteraction);\n\n // Création de l'interaction : selection des features (=troncons de l'itinéraire)\n this._resultsSelectInteraction = new SelectInteraction({\n layers : [this._geojsonSections],\n style : this._selectedFeatureStyle\n });\n this._resultsSelectInteraction.on(\n \"select\",\n (e) => this._onResultsFeatureSelect(e)\n );\n map.addInteraction(this._resultsSelectInteraction);\n }\n\n /**\n * this method is called on route features hover\n * and highlight instruction label\n *\n * @param {Object} e - event\n *\n * @private\n */\n _onResultsFeatureMouseOver (e) {\n if (e.selected.length !== 0) {\n // si on a bien survolé un tronçon, on surligne l'instruction correspondante\n var f = e.selected[0];\n var selectedInstruction = document.getElementById(\"GProuteResultsDetailsInstruction_\" + f.getId() + \"-\" + this._uid);\n if (selectedInstruction && selectedInstruction.classList) {\n selectedInstruction.classList.add(\"GProuteResultsDetailsInstructionHighlight\");\n }\n }\n\n // si on déselectionne un tronçon (mouseout), on rétablit un style normal pour l'instruction\n if (e.deselected.length !== 0) {\n var deselectedFeature = e.deselected[0];\n // on repasse l'instruction correspondante en normal\n var deSelectedInstruction = document.getElementById(\"GProuteResultsDetailsInstruction_\" + deselectedFeature.getId() + \"-\" + this._uid);\n if (deSelectedInstruction && deSelectedInstruction.classList) {\n deSelectedInstruction.classList.remove(\"GProuteResultsDetailsInstructionHighlight\");\n }\n }\n }\n\n /**\n * this method is called on route features select\n * and set a popup with feature information\n *\n * @param {Object} e - on select event\n * @private\n */\n _onResultsFeatureSelect (e) {\n var map = this.getMap();\n if (e.selected.length !== 0) {\n // si on a sélectionné un troncon, on lui ajoute une popup\n var f = e.selected[0];\n this._popupContent.innerHTML = f.getProperties().popupContent;\n\n if (!this._popupOverlay) {\n // ajout de la popup a la carte comme un overlay\n this._popupOverlay = new Overlay({\n element : this._popupDiv,\n positioning : \"bottom-center\",\n position : e.mapBrowserEvent.coordinate\n });\n map.addOverlay(this._popupOverlay);\n } else {\n // si l'overlay est déjà créé, on modifie juste sa position\n this._popupOverlay.setPosition(e.mapBrowserEvent.coordinate);\n }\n } else {\n // si aucun troncon n'est sélectionné (click à côté du tracé),\n // on fait disparaitre la popup si elle existe\n if (this._popupOverlay != null) {\n this._popupOverlay.setPosition(undefined);\n }\n }\n }\n\n // ################################################################### //\n // ############################# Clean ############################### //\n // ################################################################### //\n\n /**\n * this method is called by this.onShowRoutePanelClick()\n * and it clears all elements (reinit).\n *\n * @private\n */\n _clear () {\n this._currentTransport = null;\n this._currentExclusions = [];\n this._currentComputation = null;\n\n // les resultats\n this._clearRouteResultsDetails();\n // la geometrie\n this._clearRouteResultsGeometry();\n this._clearRouteResultsFeatureGeometry();\n // les points\n for (var i = 0; i < this._currentPoints.length; i++) {\n this._currentPoints[i].clear();\n }\n // suppression des points intermédiaires\n this._removeRouteStepLocations();\n }\n\n /**\n * this method is called by this.onRouteResetClick()\n * and it clears all options inputs (reinit).\n *\n * @private\n */\n _clearRouteInputOptions () {\n // reinit options to default\n this._initTransport();\n this._initComputation();\n this._initExclusions();\n\n // set transport mode to default\n var transportdiv;\n if (this._currentTransport === \"Pieton\") {\n transportdiv = document.getElementById(\"GProuteTransportPedestrian-\" + this._uid);\n if (transportdiv) {\n transportdiv.checked = \"true\";\n }\n } else {\n transportdiv = document.getElementById(\"GProuteTransportCar-\" + this._uid);\n if (transportdiv) {\n transportdiv.checked = \"true\";\n }\n }\n\n // set computation mode to default\n var computationdiv = document.getElementById(\"GProuteComputationSelect-\" + this._uid);\n if (computationdiv) {\n computationdiv.value = this._currentComputation;\n }\n\n // set exclusions to default\n var tollInput = document.getElementById(\"GProuteExclusionsToll-\" + this._uid);\n if (tollInput) {\n if (this._currentExclusions.indexOf(\"toll\") !== -1) {\n tollInput.checked = false;\n } else {\n tollInput.checked = true;\n }\n }\n\n var tunnelInput = document.getElementById(\"GProuteExclusionsTunnel-\" + this._uid);\n if (tunnelInput) {\n if (this._currentExclusions.indexOf(\"tunnel\") !== -1) {\n tunnelInput.checked = false;\n } else {\n tunnelInput.checked = true;\n }\n }\n\n var bridgeInput = document.getElementById(\"GProuteExclusionsBridge-\" + this._uid);\n if (bridgeInput) {\n if (this._currentExclusions.indexOf(\"bridge\") !== -1) {\n bridgeInput.checked = false;\n } else {\n bridgeInput.checked = true;\n }\n }\n }\n\n /**\n * this method is called by this._clear()\n * and it removes step location inputs (excepted departure and arrival)\n *\n * @private\n */\n _removeRouteStepLocations () {\n var points = document.querySelectorAll(\"div[id^=\\\"GPlocationPoint\\\"]\");\n if (points.length !== 0) {\n var goodPoints = [];\n for (var k = 0; k < points.length; k++) {\n if (points[k].id.indexOf(this._uid) !== -1) {\n goodPoints.push(points[k]);\n }\n }\n // on boucle sur les points intermédiaires\n for (var i = 1; i < (goodPoints.length - 1); i++) {\n // on va regarder les classes associées\n var classList = goodPoints[i].classList;\n if (classList.length !== 0) {\n for (var j = 0; j < classList.length; j++) {\n if (classList[j] === \"GPlocationStageFlexInput\") {\n // si l'élément est visible, on le supprime en simulant un clic sur la croix (x)\n document.getElementById(this._addUID(\"GPlocationStageRemove_\" + (i + 1))).click();\n }\n }\n }\n }\n }\n }\n\n /**\n * this method is called by this.onRouteComputationSubmit() (in case of failure)\n * and it clears all route instructions.\n *\n * @private\n */\n _clearRouteResultsDetails () {\n this._currentRouteInformations = null;\n\n // doit on nettoyer le container \"GProuteResultsDetails\" ?\n // il sera de toute façon écrasé par la prochaine requête...\n if (this._resultsRouteDetailsContainer) {\n var detailsDiv = this._resultsRouteDetailsContainer;\n if (detailsDiv.childElementCount) {\n while (detailsDiv.firstChild) {\n detailsDiv.removeChild(detailsDiv.firstChild);\n }\n }\n }\n\n if (this._resultsRouteValuesContainer) {\n var valuesDiv = this._resultsRouteValuesContainer;\n if (valuesDiv.childElementCount) {\n while (valuesDiv.firstChild) {\n valuesDiv.removeChild(valuesDiv.firstChild);\n }\n }\n }\n }\n\n /**\n * this method is called by this.onRouteComputationSubmit()\n * and it clears all route geometries.\n *\n * @private\n */\n _clearRouteResultsGeometry () {\n var map = this.getMap();\n\n if (this._geojsonRoute != null) {\n map.removeLayer(this._geojsonRoute);\n this._geojsonRoute = null;\n }\n }\n\n /**\n * this method is called by this.onRouteComputationSubmit()\n * and it clears all route geometries.\n *\n * @private\n */\n _clearRouteResultsFeatureGeometry () {\n var map = this.getMap();\n\n // on retire la couche itinéraire de la carte\n if (this._geojsonSections != null) {\n map.removeLayer(this._geojsonSections);\n this._geojsonSections = null;\n this._geojsonObject = null;\n }\n // on retire l'overlay de la popup de la carte\n if (this._popupOverlay != null) {\n map.removeOverlay(this._popupOverlay);\n this._popupOverlay = null;\n }\n // et les interactions liées à cette couche\n if (this._resultsSelectInteraction != null) {\n map.removeInteraction(this._resultsSelectInteraction);\n this._resultsSelectInteraction = null;\n }\n if (this._resultsHoverInteraction != null) {\n map.removeInteraction(this._resultsHoverInteraction);\n this._resultsHoverInteraction = null;\n }\n }\n\n /**\n * this method is called by event 'click' on control main container\n * and hide suggested Locations (unless target is an autocomplete input)\n *\n * @param {Object} e - event\n *\n * @private\n */\n _hideRouteSuggestedLocations (e) {\n // si on clique sur un input de saisie de locationSelector\n if (e.target && e.target.id && e.target.id.indexOf(\"GPlocationOrigin_\") !== -1) {\n // on récupère le numéro du point\n var pointId = parseInt(e.target.id.split(\"_\")[1][0], 10) - 1;\n // et on cache les autres résultats d'autocomplétion (sauf celui sur lequel on clique)\n for (var j = 0; j < this._currentPoints.length; j++) {\n if (j !== parseInt(pointId, 10)) {\n this._currentPoints[j]._hideSuggestedLocation();\n }\n }\n } else {\n // si on clique ailleurs dans le DOM du control, on cache tous les résultats d'autocomplétion\n for (var i = 0; i < this._currentPoints.length; i++) {\n this._currentPoints[i]._hideSuggestedLocation();\n }\n }\n }\n\n /**\n * this method displays waiting container and sets a timeout\n *\n * @private\n */\n _displayWaitingContainer () {\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerVisible gpf-waiting gpf-waiting--visible\";\n this._waiting = true;\n\n // mise en place d'un timeout pour réinitialiser le panel (cacher la patience)\n // si on est toujours en attente (si la requête est bloquée par exemple)\n // ceci est vrai, uniquement sur le protocole JSONP !\n var opts = this.options.routeOptions;\n if (opts && opts.timeOut) {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n var context = this;\n this._timer = setTimeout(function () {\n if (context._waiting === true) {\n context._hideWaitingContainer();\n } else {\n if (context._timer) {\n clearTimeout(context._timer);\n }\n }\n }, 16000);\n }\n }\n\n /**\n * this method hides waiting container and clears timeout\n *\n * @private\n */\n _hideWaitingContainer () {\n if (this._waiting) {\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n this._waiting = false;\n var opts = this.options.routeOptions;\n if (opts && opts.timeOut) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n }\n }\n\n // ################################################################### //\n // ########################## Geometry ############################### //\n // ################################################################### //\n\n /**\n * simplified instructions\n *\n * @param {Object[]} instructions - list of instructions\n *\n * @returns {Object[]} simplified instructions\n *\n * @private\n */\n _simplifiedInstructions (instructions) {\n var newInstructions = [];\n\n // cas où...\n var current = instructions[0];\n if (instructions.length === 1) {\n newInstructions.push(current);\n }\n\n for (var i = 1; i < instructions.length; i++) {\n var o = instructions[i];\n if (o.instruction === current.instruction) {\n current.distance = (parseFloat(o.distance) + parseFloat(current.distance)).toString();\n current.duration = (parseFloat(o.duration) + parseFloat(current.duration)).toString();\n for (var j = 1; j < o.geometry.coordinates.length; j++) {\n current.geometry.coordinates.push(o.geometry.coordinates[j]);\n }\n } else {\n newInstructions.push(current);\n current = o;\n // last\n if (i === instructions.length - 1) {\n newInstructions.push(o);\n current = null;\n }\n }\n }\n logger.log(newInstructions);\n return newInstructions;\n }\n\n // ################################################################### //\n // ################# Utils for Distance/Duration ##################### //\n // ################################################################### //\n\n /**\n * convert seconds to time : HH:MM:SS\n *\n * @param {Number} duration - duration in seconds\n *\n * @returns {String} time in hours/minutes/seconds\n *\n * @private\n */\n _convertSecondsToTime (duration) {\n var time = \"\";\n\n duration = Math.round(duration);\n var hours = Math.floor(duration / (60 * 60));\n\n var divisor4minutes = duration % (60 * 60);\n var minutes = Math.floor(divisor4minutes / 60);\n // if (!minutes) {\n // minutes = \"00\";\n // }\n\n // var divisor4seconds = divisor4minutes % 60;\n // var seconds = Math.ceil(divisor4seconds);\n // if (!seconds) {\n // seconds = \"00\";\n // }\n\n if (hours) {\n time = hours + \"h \";\n }\n time += minutes + \" min\";\n return time;\n }\n\n /**\n * convert distance in meters or kilometers\n *\n * @param {Number} distance - distance in meters\n *\n * @returns {String} distance in km\n *\n * @private\n */\n _convertDistance (distance) {\n var d = \"\";\n\n var distanceKm = parseInt(distance / 1000, 10);\n if (!distanceKm) {\n d = parseInt(distance, 10) + \" m\"; // arrondi !\n } else {\n d = distanceKm + \" km\";\n }\n\n return d;\n }\n\n};\n\n// on récupère les méthodes de la classe commune ReverseGeocodingDOM\nObject.assign(Route.prototype, RouteDOM);\nObject.assign(Route.prototype, Widget);\n\nexport default Route;\n\n// Expose Route as ol.control.Route (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.Route = Route;\n}\n","import checkDsfr from \"../Utils/CheckDsfr\";\n\nvar IsoDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPisochron\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################# Methods to display Main Panel ################### //\n // ################################################################### //\n\n /**\n * Show iso control\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createShowIsoPictoElement : function () {\n // contexte d'execution\n var context = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowIsochronPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowIsochronPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-isocurve fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Calculer une isochrone\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // gestionnaire d'evenement :\n // on ouvre le menu de saisie du calcul d'isochrone\n // L'ouverture/Fermeture permet de faire le menage\n // (reinitialisation)\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowIsoPanelClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowIsoPanelClick(e);\n });\n }\n\n return button;\n },\n\n // ################################################################### //\n // ################## Methods to display Inputs Panel ################ //\n // ################################################################### //\n\n /**\n * Create Container Panel\n *\n * FIXME\n * don't call this._createIsoPanelHeaderElement\n * don't call this._createIsoPanelFormElement\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPisochronPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n // dialog.appendChild(this._createIsoPanelHeaderElement());\n // dialog.appendChild(this._createIsoPanelFormElement());\n\n return dialog;\n },\n\n _createIsoPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelHeaderElement : function () {\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n var div = document.createElement(\"div\");\n div.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n div.innerHTML = \"Calcul d'isochrone\";\n container.appendChild(div);\n\n // on desactive l'impl. reduction de la fenetre\n // var divReduce = document.createElement(\"div\");\n // divReduce.id = this._addUID(\"GPisochronPanelReduce\");\n // divReduce.className = \"GPpanelReduce\";\n // divReduce.title = \"Masquer le panneau\";\n //\n // if (divReduce.addEventListener) {\n // divReduce.addEventListener(\"click\", function () {\n // if ( typeof self.onReduceIsoPanelClick === \"function\") {\n // document.getElementById(self._addUID(\"GPshowIsochron\")).checked = false;\n // self.onReduceIsoPanelClick();\n // }\n // }, false);\n // } else if (divReduce.attachEvent) {\n // divReduce.attachEvent(\"onclick\", function () {\n // if ( typeof self.onReduceIsoPanelClick === \"function\") {\n // document.getElementById(self._addUID(\"GPshowIsochron\")).checked = false;\n // self.onReduceIsoPanelClick();\n // }\n // });\n // }\n // container.appendChild(divReduce);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPisochronPanelClose\");\n divClose.className = \"GPpanelClose GPisochronPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowIsochronPicto\")).click();\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowIsochronPicto\")).click();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n\n /**\n * Create Form\n * see evenement !\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormElement : function () {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GPisochronForm\");\n form.className = \"GPform gpf-panel__content gpf-mobile-form fr-modal__content\";\n\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n self.onIsoComputationSubmit(e);\n return false;\n });\n\n return form;\n },\n\n /**\n * Create Waiting Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoWaitingElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPisochronCalcWaitingContainer\");\n div.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n\n var p = document.createElement(\"p\");\n p.className = \"GPwaitingContainerInfo gpf-waiting_info\";\n p.innerHTML = \"Recherche en cours...\";\n\n div.appendChild(p);\n\n return div;\n },\n\n /**\n * Create Footer Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFooterElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"GPpanelFooter gpf-panel__footer fr-modal__footer\";\n\n return container;\n },\n\n /**\n * Create Point label\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormPointLabel : function () {\n var p = document.createElement(\"p\");\n p.id = this._addUID(\"GPisochronPointLabelP\");\n p.className = \"gpf-label fr-label\";\n p.innerHTML = \"Départ\";\n\n return p;\n },\n\n // ################################################################### //\n // ############# Methods to the type choice into form ################ //\n // ################################################################### //\n\n /**\n * Create Container to type choice\n *\n * FIXME\n * don't call this._createIsoPanelFormTypeChoiceChronElement\n * don't call this._createIsoPanelFormTypeChoiceDistElement\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormTypeChoiceElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPisochronChoice\");\n div.className = \"fr-mt-2w\";\n\n // div.appendChild(this._createIsoPanelFormTypeChoiceChronElement());\n // div.appendChild(this._createIsoPanelFormTypeChoiceDistElement());\n\n return div;\n },\n\n /**\n * Create Type choice Chron\n * see event !\n * FIXME event not useful\n * @param {Boolean} checked - checked\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormTypeChoiceChronElement : function (checked) {\n var self = this;\n\n var div = document.createElement(\"div\");\n div.className = \"GPisochronChoiceAlt gpf-flex gpf-flex-isocurve gpf-radio-group fr-radio-group\";\n\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPisochronChoiceAltChron\");\n input.name = \"GPisochronChoiceMode\";\n input.type = \"radio\";\n input.checked = !!(checked);\n if (input.addEventListener) {\n input.addEventListener(\"change\", function (e) {\n document.getElementById(self._addUID(\"GPisochronValueChron\")).className = \"GPflexInput gpf-flex fr-mt-1w\";\n document.getElementById(self._addUID(\"GPisochronValueDist\")).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPisochronValueChronLabelP\")).className = \"gpf-label fr-label\";\n document.getElementById(self._addUID(\"GPisochronValueDistLabelP\")).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPisochronSubmit\")).value = \"Calculer l'isochrone\";\n self.onIsoTypeChoiceChange(e);\n }, false);\n } else if (input.attachEvent) {\n input.attachEvent(\"onchange\", function () {\n document.getElementById(self._addUID(\"GPisochronValueChron\")).className = \"GPflexInput gpf-flex fr-mt-1w\";\n document.getElementById(self._addUID(\"GPisochronValueDist\")).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPisochronValueChronLabelP\")).className = \"gpf-label fr-label\";\n document.getElementById(self._addUID(\"GPisochronValueDistLabelP\")).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPisochronSubmit\")).value = \"Calculer l'isochrone\";\n self.onIsoTypeChoiceChange();\n });\n }\n // info: Internet explorer support\n input.value = \"isochron\";\n div.appendChild(input);\n\n var label = document.createElement(\"label\");\n label.className = \"GPisochronChoiceAltImg gpf-label fr-label\";\n label.htmlFor = this._addUID(\"GPisochronChoiceAltChron\");\n label.innerHTML = \"Durée\";\n label.title = \"Durée\";\n div.appendChild(label);\n\n var span = document.createElement(\"span\");\n span.id = this._addUID(\"GPisochronChoiceAltChronTxt\");\n span.className = \"gpf-hidden\";\n span.innerHTML = \"Durée\";\n if (span.addEventListener) {\n span.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPisochronChoiceAltChron\")).click();\n }, false);\n } else if (span.attachEvent) {\n span.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPisochronChoiceAltChron\")).click();\n });\n }\n div.appendChild(span);\n\n return div;\n },\n\n /**\n * Create Type choice Dist\n * see event !\n * FIXME event not useful\n * @param {Boolean} checked - checked\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormTypeChoiceDistElement : function (checked) {\n var self = this;\n\n var div = document.createElement(\"div\");\n div.className = \"GPisochronChoiceAlt gpf-flex gpf-flex-isocurve gpf-radio-group fr-radio-group\";\n\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPisochronChoiceAltDist\");\n input.name = \"GPisochronChoiceMode\";\n input.type = \"radio\";\n input.checked = !!(checked);\n if (input.addEventListener) {\n input.addEventListener(\"change\", function (e) {\n document.getElementById(self._addUID(\"GPisochronValueDist\")).className = \"GPflexInput gpf-flex fr-mt-1w\";\n document.getElementById(self._addUID(\"GPisochronValueChron\")).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPisochronValueDistLabelP\")).className = \"gpf-label fr-label\";\n document.getElementById(self._addUID(\"GPisochronValueChronLabelP\")).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPisochronSubmit\")).value = \"Calculer l'isodistance\";\n self.onIsoTypeChoiceChange(e);\n }, false);\n } else if (input.attachEvent) {\n input.attachEvent(\"onchange\", function () {\n document.getElementById(self._addUID(\"GPisochronValueDist\")).className = \"GPflexInput gpf-flex fr-mt-1w\";\n document.getElementById(self._addUID(\"GPisochronValueChron\")).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPisochronValueDistLabelP\")).className = \"gpf-label fr-label\";\n document.getElementById(self._addUID(\"GPisochronValueChronLabelP\")).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPisochronSubmit\")).value = \"Calculer l'isodistance\";\n self.onIsoTypeChoiceChange();\n });\n }\n // info: Internet explorer support\n input.value = \"isodistance\";\n div.appendChild(input);\n\n var label = document.createElement(\"label\");\n label.className = \"GPisochronChoiceAltImg gpf-label fr-label\";\n label.htmlFor = this._addUID(\"GPisochronChoiceAltDist\");\n label.innerHTML = \"Distance\";\n label.title = \"Distance\";\n\n div.appendChild(label);\n\n var span = document.createElement(\"span\");\n span.id = this._addUID(\"GPisochronChoiceAltDistTxt\");\n span.className = \"gpf-hidden\";\n span.innerHTML = \"Distance\";\n if (span.addEventListener) {\n span.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPisochronChoiceAltDist\")).click();\n }, false);\n } else if (span.attachEvent) {\n span.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPisochronChoiceAltDist\")).click();\n });\n }\n div.appendChild(span);\n\n return div;\n },\n\n // ################################################################### //\n // ############### Methods to the value iso into form ################ //\n // ################################################################### //\n\n /**\n * Create isochron inputs label\n * see event !\n * @param {Boolean} checked - checked\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormLabelIsochronElement : function (checked) {\n var context = this;\n var p = document.createElement(\"p\");\n p.id = this._addUID(\"GPisochronValueChronLabelP\");\n p.className = (checked) ? \"gpf-label fr-label\" : \"GPelementHidden gpf-hidden\";\n p.innerHTML = \"Définir un temps de trajet\";\n\n return p;\n },\n\n /**\n * Create isochron inputs values\n * see event !\n * @param {Boolean} checked - checked\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormValueIsochronElement : function (checked) {\n // contexte\n var context = this;\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPisochronValueChron\");\n div.className = (checked) ? \"GPflexInput gpf-flex fr-mt-1w\" : \"GPelementHidden gpf-hidden\";\n\n var input1 = document.createElement(\"input\");\n input1.id = this._addUID(\"GPisochronValueChronInput1\");\n input1.className = \"gpf-input fr-input\";\n input1.min = \"0\";\n input1.step = \"1\";\n input1.value = \"0\";\n input1.type = \"number\";\n input1.title = \"Temps\";\n if (input1.addEventListener) {\n input1.addEventListener(\"change\", function (e) {\n if (typeof context.onIsoValueChronTimeMinuteChange === \"function\") {\n context.onIsoValueChronTimeHourChange(e);\n }\n });\n } else if (input1.attachEvent) {\n input1.attachEvent(\"onchange\", function (e) {\n if (typeof context.onIsoValueChronTimeMinuteChange === \"function\") {\n context.onIsoValueChronTimeHourChange(e);\n }\n });\n }\n div.appendChild(input1);\n\n var label1 = document.createElement(\"label\");\n label1.innerHTML = \"h\";\n label1.className = \"gpf-label fr-label\";\n div.appendChild(label1);\n\n var input2 = document.createElement(\"input\");\n input2.id = this._addUID(\"GPisochronValueChronInput2\");\n input2.className = \"gpf-input fr-input\";\n input2.min = \"0\";\n input2.max = \"59\";\n input2.step = \"1\";\n input2.value = \"0\";\n input2.type = \"number\";\n input2.title = \"Heures\";\n if (input2.addEventListener) {\n input2.addEventListener(\"change\", function (e) {\n if (typeof context.onIsoValueChronTimeMinuteChange === \"function\") {\n context.onIsoValueChronTimeMinuteChange(e);\n }\n });\n } else if (input2.attachEvent) {\n input2.attachEvent(\"onchange\", function (e) {\n if (typeof context.onIsoValueChronTimeMinuteChange === \"function\") {\n context.onIsoValueChronTimeMinuteChange(e);\n }\n });\n }\n div.appendChild(input2);\n\n var label2 = document.createElement(\"label\");\n label2.innerHTML = \"min\";\n label2.className = \"gpf-label fr-label\";\n div.appendChild(label2);\n\n return div;\n },\n\n /**\n * Create isodistance inputs label\n * see event !\n * @param {Boolean} checked - checked\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormLabelIsodistanceElement : function (checked) {\n var context = this;\n var p = document.createElement(\"p\");\n p.id = this._addUID(\"GPisochronValueDistLabelP\");\n p.className = (checked) ? \"gpf-label fr-label\" : \"GPelementHidden gpf-hidden\";\n p.innerHTML = \"Définir une distance\";\n\n return p;\n },\n\n /**\n * Create isodistance inputs values\n * see event !\n * @param {Boolean} checked - checked\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormValueIsodistanceElement : function (checked) {\n // contexte\n var context = this;\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPisochronValueDist\");\n div.className = (checked) ? \"GPflexInput gpf-flex fr-mt-1w\" : \"GPelementHidden gpf-hidden\";\n\n var input1 = document.createElement(\"input\");\n input1.id = this._addUID(\"GPisochronValueDistInput\");\n input1.className = \"gpf-input fr-input fr-ml-1w\";\n input1.min = \"0\";\n input1.step = \"any\";\n input1.value = \"0\";\n input1.type = \"number\";\n input1.title = \"Distance\";\n if (input1.addEventListener) {\n input1.addEventListener(\"change\", function (e) {\n if (typeof context.onIsoValueDistChange === \"function\") {\n context.onIsoValueDistChange(e);\n }\n });\n } else if (input1.attachEvent) {\n input1.attachEvent(\"onchange\", function (e) {\n if (typeof context.onIsoValueDistChange === \"function\") {\n context.onIsoValueDistChange(e);\n }\n });\n }\n div.appendChild(input1);\n\n var label1 = document.createElement(\"label\");\n label1.innerHTML = \"km\";\n label1.className = \"gpf-label fr-label\";\n div.appendChild(label1);\n\n return div;\n },\n\n // ################################################################### //\n // ############ Methods to the mode choice into form ################# //\n // ################################################################### //\n\n /**\n * Create Mode choice transport\n * see event !\n * FIXME event not useful\n * @param {Array} transports - transports in a list\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormModeChoiceTransportElement : function (transports) {\n // contexte d'execution\n var context = this;\n\n var divContainer = document.createElement(\"div\");\n divContainer.id = this._addUID(\"GPisochronTransportChoice\");\n\n var label = document.createElement(\"label\");\n label.className = \"GPisochronModeLabel gpf-label fr-label\";\n label.innerHTML = \"Choisir un mode de déplacement\";\n divContainer.appendChild(label);\n\n var radioContainer = document.createElement(\"div\");\n\n /* jshint -W083 */\n for (var i = 0; i < transports.length; i++) {\n var transport = transports[i];\n\n var div = document.createElement(\"div\");\n div.className = \"GPisochronTransportChoice gpf-flex gpf-radio-group fr-radio-group\";\n\n if (transport === \"Voiture\") {\n var inputCar = document.createElement(\"input\");\n inputCar.id = this._addUID(\"GPisochronTransportCar\");\n inputCar.type = \"radio\";\n inputCar.name = \"GPisochronTransport\";\n if (i === 0) {\n inputCar.checked = true;\n }\n // gestionnaire d'evenement :\n // on stocke le mode de transport,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputCar.addEventListener) {\n inputCar.addEventListener(\"change\", function (e) {\n context.onIsoModeTransportChange(e);\n });\n } else if (inputCar.attachEvent) {\n inputCar.attachEvent(\"onchange\", function (e) {\n context.onIsoModeTransportChange(e);\n });\n }\n // info : internet explorer support\n inputCar.value = \"Voiture\";\n div.appendChild(inputCar);\n\n var labelCar = document.createElement(\"label\");\n labelCar.className = \"GPisochronTransportImg gpf-label fr-label\";\n labelCar.htmlFor = this._addUID(\"GPisochronTransportCar\");\n labelCar.title = \"Voiture\";\n labelCar.innerHTML = \"Voiture\";\n div.appendChild(labelCar);\n }\n\n if (transport === \"Pieton\") {\n var inputPedestrian = document.createElement(\"input\");\n inputPedestrian.id = this._addUID(\"GPisochronTransportPedestrian\");\n inputPedestrian.type = \"radio\";\n inputPedestrian.name = \"GPisochronTransport\";\n if (i === 0) {\n inputPedestrian.checked = true;\n }\n // gestionnaire d'evenement :\n // on stocke le mode de transport,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputPedestrian.addEventListener) {\n inputPedestrian.addEventListener(\"change\", function (e) {\n context.onIsoModeTransportChange(e);\n });\n } else if (inputPedestrian.attachEvent) {\n inputPedestrian.attachEvent(\"onchange\", function (e) {\n context.onIsoModeTransportChange(e);\n });\n }\n // info : internet explorer support\n inputPedestrian.value = \"Pieton\";\n div.appendChild(inputPedestrian);\n\n var labelPedestrian = document.createElement(\"label\");\n labelPedestrian.className = \"GPisochronTransportImg gpf-label fr-label\";\n labelPedestrian.htmlFor = this._addUID(\"GPisochronTransportPedestrian\");\n labelPedestrian.title = \"Piéton\";\n labelPedestrian.innerHTML = \"Piéton\";\n div.appendChild(labelPedestrian);\n }\n\n radioContainer.appendChild(div);\n }\n divContainer.appendChild(radioContainer);\n\n return divContainer;\n },\n\n /**\n * Create Mode choice direction\n * see event!\n *\n * @param {Array} directions - directions to display in list (\"Departure\", \"Arrival\"). First element will be selected by default\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormModeChoiceDirectionElement : function (directions) {\n // contexte d'execution\n var self = this;\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPisochronDirectionChoice\");\n div.className = \"fr-my-2w\";\n\n var label = document.createElement(\"label\");\n label.innerHTML = \"Définir un sens de parcours\";\n label.className = \"fr-label\";\n div.appendChild(label);\n\n var select = document.createElement(\"select\");\n select.id = this._addUID(\"GPisochronDirectionSelect\");\n select.className = \"GPselect gpf-select fr-select\";\n select.title = \"Sens de parcours\";\n // gestionnaire d'evenement :\n // on stocke la valeur du mode de calcul,\n // utilisation pour la requête sur le service de calcul d'iso\n select.addEventListener(\"change\", function (e) {\n self.onIsoModeDirectionChange(e);\n });\n\n for (var i = 0; i < directions.length; i++) {\n var direction = directions[i];\n if (direction.toLowerCase() === \"departure\") {\n var departureOption = document.createElement(\"option\");\n if (i === 0) {\n departureOption.selected = \"selected\";\n }\n departureOption.value = \"departure\";\n departureOption.text = \"Départ\";\n select.appendChild(departureOption);\n }\n if (direction.toLowerCase() === \"arrival\") {\n var arrivalOption = document.createElement(\"option\");\n if (i === 0) {\n arrivalOption.selected = \"selected\";\n }\n arrivalOption.value = \"arrival\";\n arrivalOption.text = \"Arrivée\";\n select.appendChild(arrivalOption);\n }\n }\n div.appendChild(select);\n\n return div;\n },\n\n // ################################################################### //\n // ################# Methods to the choice exclusions ################ //\n // ################################################################### //\n\n /**\n * Label to Exclusions Options\n *\n * @returns {DOMElement} DOM element\n */\n _createShowIsoExclusionsPictoElement : function () {\n var self = this;\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowIsoExclusionsPicto\");\n var hidden = \"\";\n if (checkDsfr()) {\n hidden = \"GPelementHidden gpf-hidden\";\n }\n button.className = `GPshowAdvancedToolPicto GPshowMoreOptionsImage GPshowMoreOptions GPshowIsoExclusionsPicto ${hidden} gpf-btn fr-btn--sm fr-btn--tertiary gpf-btn--tertiary fr-icon-arrow-down-fill`;\n button.title = \"Exclusions\";\n // button.style.top = \"240px\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", true);\n\n // Close all results and panels when minimizing the widget\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n e.preventDefault();\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowIsoSettingsClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n e.preventDefault();\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowIsoSettingsClick(e);\n });\n }\n\n return button;\n },\n\n /**\n * Create Container to Exclusions\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormExclusionsElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPisoExclusions\");\n\n var label = document.createElement(\"label\");\n label.className = \"GPisoExclusionsLabel gpf-label fr-label\";\n label.innerHTML = \"Passages autorisés\";\n div.appendChild(label);\n\n // div.appendChild(this._createIsoPanelFormExclusionOptionsElement());\n\n return div;\n },\n\n /**\n * Create Exclusions Options\n * see event !\n * FIXME event not useful\n * @param {Array} exclusions - exclusions to display in list\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormExclusionOptionsElement : function (exclusions) {\n // contexte d'execution\n var context = this;\n\n var div = document.createElement(\"div\");\n div.className = \"GPisoExclusionsOptions gpf-flex fr-checkbox-group fr-m-1w\";\n\n /* jshint -W083 */\n for (var value in exclusions) {\n if (exclusions.hasOwnProperty(value)) {\n var status = exclusions[value];\n switch (value) {\n case \"toll\":\n var inputToll = document.createElement(\"input\");\n inputToll.id = this._addUID(\"GPisoExclusionsToll\");\n inputToll.type = \"checkbox\";\n inputToll.name = \"Péages\";\n inputToll.checked = !status;\n // gestionnaire d'evenement :\n // on stocke l'exclusion,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputToll.addEventListener) {\n inputToll.addEventListener(\"change\", function (e) {\n context.onIsoExclusionsChange(e);\n });\n } else if (inputToll.attachEvent) {\n inputToll.attachEvent(\"onchange\", function (e) {\n context.onIsoExclusionsChange(e);\n });\n }\n // info : internet explorer support\n inputToll.value = \"Toll\";\n div.appendChild(inputToll);\n\n var labelToll = document.createElement(\"label\");\n labelToll.className = \"GPisoExclusionsOption\";\n labelToll.htmlFor = this._addUID(\"GPisoExclusionsToll\");\n labelToll.innerHTML = \"Péages\";\n div.appendChild(labelToll);\n break;\n\n case \"tunnel\":\n var inputTunnel = document.createElement(\"input\");\n inputTunnel.id = this._addUID(\"GPisoExclusionsTunnel\");\n inputTunnel.type = \"checkbox\";\n inputTunnel.name = \"Tunnel\";\n inputTunnel.checked = !status;\n // gestionnaire d'evenement :\n // on stocke l'exclusion,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputTunnel.addEventListener) {\n inputTunnel.addEventListener(\"change\", function (e) {\n context.onIsoExclusionsChange(e);\n });\n } else if (inputTunnel.attachEvent) {\n inputTunnel.attachEvent(\"onchange\", function (e) {\n context.onIsoExclusionsChange(e);\n });\n }\n // info : internet explorer support\n inputTunnel.value = \"Tunnel\";\n div.appendChild(inputTunnel);\n\n var labelTunnel = document.createElement(\"label\");\n labelTunnel.className = \"GPisoExclusionsOption\";\n labelTunnel.htmlFor = this._addUID(\"GPisoExclusionsTunnel\");\n labelTunnel.innerHTML = \"Tunnels\";\n div.appendChild(labelTunnel);\n break;\n\n case \"bridge\":\n var inputBridge = document.createElement(\"input\");\n inputBridge.id = this._addUID(\"GPisoExclusionsBridge\");\n inputBridge.type = \"checkbox\";\n inputBridge.name = \"Ponts\";\n inputBridge.checked = !status;\n // gestionnaire d'evenement :\n // on stocke l'exclusion,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputBridge.addEventListener) {\n inputBridge.addEventListener(\"change\", function (e) {\n context.onIsoExclusionsChange(e);\n });\n } else if (inputBridge.attachEvent) {\n inputBridge.attachEvent(\"onchange\", function (e) {\n context.onIsoExclusionsChange(e);\n });\n }\n // info : internet explorer support\n inputBridge.value = \"Bridge\";\n div.appendChild(inputBridge);\n\n var labelBridge = document.createElement(\"label\");\n labelBridge.className = \"GPisoExclusionsOption\";\n labelBridge.htmlFor = this._addUID(\"GPisoExclusionsBridge\");\n labelBridge.innerHTML = \"Ponts\";\n div.appendChild(labelBridge);\n break;\n }\n }\n }\n\n return div;\n },\n\n // ################################################################### //\n // ############################### Submit Form ####################### //\n // ################################################################### //\n\n\n /**\n * Create Submit Form Element\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoSubmitFormElement : function () {\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPisochronSubmit\");\n input.className = \"GPsubmit gpf-btn fr-btn\";\n input.type = \"submit\";\n input.value = \"Calculer l'isochrone\";\n\n return input;\n },\n\n // ################################################################### //\n // ############################### Reset picto ####################### //\n // ################################################################### //\n\n /**\n * Create Reset Picto Element\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoFormResetElement : function () {\n var self = this;\n\n var buttonReset = document.createElement(\"button\");\n buttonReset.id = this._addUID(\"GPisochronReset\");\n buttonReset.className = \"GPresetPicto GPisochronReset gpf-btn gpf-btn-icon-reset gpf-btn-icon-isocurve-reset fr-btn fr-btn--secondary gpf-btn--secondary\";\n buttonReset.title = \"Réinitialiser les paramètres\";\n buttonReset.setAttribute(\"tabindex\", \"0\");\n buttonReset.setAttribute(\"aria-pressed\", false);\n\n buttonReset.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onIsoResetClick(e);\n });\n\n return buttonReset;\n }\n};\n\nexport default IsoDOM;\n","// import CSS\nimport \"../../CSS/Controls/Isochron/GPFisochron.css\";\n// import \"../../CSS/Controls/Isochron/GPFisochronStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport VectorSource from \"ol/source/Vector\";\n// import GeoJSON from \"ol/format/GeoJSON\";\nimport {\n Fill,\n Stroke,\n Style\n} from \"ol/style\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Utils from \"../../Utils/Helper\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Markers from \"../Utils/Markers\";\nimport Draggable from \"../../Utils/Draggable\";\nimport Interactions from \"../Utils/Interactions\";\n// import local with ol dependencies\nimport LayerSwitcher from \"../LayerSwitcher/LayerSwitcher\";\nimport LocationSelector from \"../LocationSelector/LocationSelector\";\nimport ButtonExport from \"../Export/Export\";\nimport GeoJSONExtended from \"../../Formats/GeoJSON\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\n// DOM\nimport IsocurveDOM from \"./IsocurveDOM\";\n\nvar logger = Logger.getLogger(\"isocurve\");\n\n/**\n * @classdesc\n *\n * Isocurve Control.\n *\n * @constructor\n * @alias ol.control.Isocurve\n * @type {ol.control.Isocurve}\n * @extends {ol.control.Control}\n * @param {Object} options - Isocurve control options\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {String} [options.apiKey] - API key for services call (isocurve and autocomplete services). The key \"calcul\" is used by default.\n * @param {Boolean} [options.ssl = true] - use of ssl or not (default true, service requested using https protocol)\n * @param {Boolean} [options.collapsed = true] - Specify if widget has to be collapsed (true) or not (false) on map loading. Default is true.\n * @param {Boolean} [options.draggable = false] - Specify if widget is draggable\n * @param {Boolean|Object} [options.export = false] - Specify if button \"Export\" is displayed. For the use of the options of the \"Export\" control, see {@link ol.control.Export}\n * @param {Object} [options.exclusions = {\"toll\" : false, \"tunnel\" : false, \"bridge\" : false}] - list of exclusions with status (true = checked). By default : no exclusions checked.\n * @param {Array} [options.graphs = [\"Voiture\", \"Pieton\"]] - list of graph resources to be used for isocurve calculation, by default : [\"Voiture\", \"Pieton\"]. Possible values are \"Voiture\" and \"Pieton\". The first element is selected.\n * @param {Array} [options.methods = [\"time\", \"distance\"]] - list of methods, by default : [\"time\", \"distance\"]. Possible values are \"time\" and \"distance\". The first element is selected by default.\n * @param {Array} [options.directions = [\"departure\", \"arrival\"]] - list of directions to be displayed, by default : [\"departure\", \"arrival\"]. The first element is selected by default. Possible values are \"departure\" and \"arrival\".\n * Directions enable to specify if input location point will be used as a departure point (\"departure\") or as an arrival point (\"arrival\")\n * @param {Object} [options.isocurveOptions = {}] - isocurve service options. see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~isoCurve Gp.Services.isoCurve()} to know all isocurve options.\n * @param {Object} [options.autocompleteOptions = {}] - autocomplete service options. see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~autoComplete Gp.Services.autoComplete()} to know all autocomplete options\n * @param {Object} [options.markerOpts] - options to use your own marker. Default is a lightOrange marker.\n * @param {String} [options.markerOpts.url] - marker base64 encoded url (ex \"data:image/png;base64,...\"\"). Mandatory for a custom marker\n * @param {Array} [options.markerOpts.offset] - Offsets in pixels used when positioning the overlay. The first element in the array is the horizontal offset. A positive value shifts the overlay right. The second element in the array is the vertical offset. A positive value shifts the overlay down. Default is [0, 0]. (see http://openlayers.org/en/latest/apidoc/ol.Overlay.html)\n * @param {Object} [options.layerDescription = {}] - Layer informations to be displayed in LayerSwitcher widget (only if a LayerSwitcher is also added to the map)\n * @param {String} [options.layerDescription.title = \"Isochrone/Isodistance\"] - Layer title to be displayed in LayerSwitcher\n * @param {String} [options.layerDescription.description = \"isochrone/isodistance basé sur un graphe\"] - Layer description to be displayed in LayerSwitcher\n * @fires isocurve:drawstart\n * @fires isocurve:drawend\n * @fires isocurve:compute\n * @fires export:compute\n * @example\n * var iso = ol.control.Isocurve({\n * \"collapsed\" : false,\n * \"draggable\" : true,\n * \"export\" : false,\n * \"methods\" : [\"time\", \"distance\"],\n * \"exclusions\" : {\n * \"toll\" : true,\n * \"bridge\" : false,\n * \"tunnel\" : true\n * },\n * \"graphs\" : [\"Pieton\", \"Voiture\"],\n * \"markerOpts\" : {\n * \"url\" : \"...\",\n * \"offset\" : [0,0]\n * }\n * \"isocurveOptions\" : {},\n * \"autocompleteOptions\" : {}\n * });\n *\n * // if you want to pluggued the control Export with options :\n * var iso = new ol.control.Isocurve({\n * export : {\n * name : \"export\",\n * format : \"geojson\",\n * title : \"Exporter\",\n * menu : false\n * }\n * });\n */\nvar Isocurve = class Isocurve extends Control {\n\n /**\n * See {@link ol.control.Isocurve}\n * @module Isocurve\n * @alias module:~controls/Isocurve\n * @param {*} options - options\n * @example\n * import Isocurve from from \"gpf-ext-ol/controls/Isocurve\"\n * ou\n * import { Isocurve } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof Isocurve)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"Isocurve\";\n // initialisation du composant\n this.initialize(options);\n\n // // Widget main DOM container\n this._container = this._createMainContainerElement();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n }\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n // enrichissement du DOM du container lors de l'ajout à la carte\n this._container = this._initContainer(map);\n\n // ajout d'un bouton d'export\n if (this.options.export) {\n var opts = Utils.assign({ control : this }, this.options.export);\n this.export = new ButtonExport(opts);\n this.export.render();\n var self = this;\n this.export.on(\"export:compute\", (e) => {\n self.dispatchEvent({\n type : \"export:compute\",\n content : e.content\n });\n });\n }\n\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this._IsoPanelContainer,\n this._IsoPanelHeaderContainer,\n map.getTargetElement()\n );\n }\n\n // mode \"collapsed\"\n if (!this.collapsed) {\n this._pictoIsoButton.setAttribute(\"aria-pressed\", true);\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Returns true if widget is collapsed (minimized), false otherwise\n *\n * @returns {Boolean} collapsed - true if widget is collapsed\n */\n getCollapsed () {\n return this.collapsed;\n }\n\n /**\n * Collapse or display widget main container\n *\n * @param {Boolean} collapsed - True to collapse widget, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.log(\"[ERROR] Isocurve:setCollapsed - missing collapsed parameter\");\n return;\n }\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n if (collapsed) {\n document.getElementById(\"GPisochronPanelClose-\" + this._uid).click();\n } else {\n this._pictoIsoButton.click();\n }\n this.collapsed = collapsed;\n }\n\n /**\n * Get vector layer where Isocurve geometry is drawn\n *\n * @returns {Object} layer - ol.layer.Vector isocurve layer\n */\n getLayer () {\n return this._geojsonLayer;\n }\n\n /**\n * Set vector layer where Isocurve geometry is drawn\n *\n * @param {Object} layer - ol.layer.Vector isocurve layer\n */\n setLayer (layer) {\n if (!layer) {\n this._geojsonLayer = null;\n return;\n }\n\n if (!(layer instanceof VectorLayer)) {\n logger.log(\"no valid layer given for hosting drawn features.\");\n return;\n }\n\n // application des styles\n layer.setStyle(this._defaultFeatureStyle);\n\n // sauvegarde\n this._geojsonLayer = layer;\n }\n\n /**\n * Get vector layer\n *\n * @returns {String} geojson - GeoJSON format layer\n */\n getGeoJSON () {\n return JSON.stringify(this._geojsonObject);\n }\n\n /**\n * Set vector layer\n *\n * @param {String} geojson - GeoJSON format layer\n */\n setGeoJSON (geojson) {\n try {\n this._geojsonObject = JSON.parse(geojson);\n } catch (e) {\n logger.log(\"no valid geojson given :\" + e.message);\n }\n }\n\n /**\n * Get isocurve data\n *\n * @returns {Object} data - process results\n */\n getData () {\n var data = {\n type : \"isocurve\",\n transport : this._currentTransport,\n computation : this._currentComputation,\n exclusions : this._currentExclusions,\n direction : this._currentDirection,\n point : this._originPoint.getCoordinate(), // lon/lat wgs84\n results : {}\n };\n Utils.assign(data.results, this._currentIsoResults);\n return data;\n }\n\n /**\n * Set isocurve data\n *\n * @param {Object} data - control informations\n * @param {String} data.transport - transport type\n * @param {String} data.computation - computation type\n * @param {Array} data.exclusions - list of exclusions\n * @param {String} data.direction - direction type\n * @param {Array} data.point - [lon, lat]\n * @param {Object} data.results - service response\n */\n setData (data) {\n this._currentTransport = data.transport;\n this._currentComputation = data.computation;\n this._currentExclusions = data.exclusions;\n this._currentDirection = data.direction;\n // INFO\n // > this._originPoint.clear();\n // l'utilisation de cette méthode declenche des evenements qui retirent la couche en cours !\n // (cf. _createIsoPanelFormPointElement),\n var inputPointer = document.getElementById(\"GPlocationOriginPointer_\" + 1 + \"-\" + this._uid);\n inputPointer.checked = true;\n var inputCoords = document.getElementById(\"GPlocationOriginCoords_\" + 1 + \"-\" + this._uid);\n inputCoords.value = \"\";\n this._originPoint.setCoordinate(data.point, \"EPSG:4326\");\n this._currentIsoResults = data.results;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this._container;\n }\n\n /**\n * Get default style\n *\n * @returns {ol.style} style\n */\n getStyle () {\n return this._defaultFeatureStyle;\n }\n\n /**\n * This method is public.\n * It allows to control the execution of a traitment.\n *\n * @param {Array} position - position in the projection map [ x, y ]\n * @param {Object} value - distance in km or hours-minutes\n * @param {Object} options - options = {...}\n */\n compute (position, value, options) {\n this._clear();\n\n var opened = this._pictoIsoButton.ariaPressed;\n if (!(opened === \"true\")) {\n this._pictoIsoButton.click();\n }\n\n var map = this.getMap();\n if (!map) {\n return;\n }\n\n // Les options par defauts\n var settings = {\n direction : \"departure\",\n method : \"time\",\n transport : \"Voiture\",\n exclusions : []\n };\n\n // On recupere les options\n Utils.assign(settings, options);\n\n this._originPoint.setCoordinate(position);\n var coordinate = this._originPoint.getCoordinate();\n\n var input = document.getElementById(\"GPlocationOrigin_\" + 1 + \"-\" + this._uid);\n input.value = coordinate[0].toFixed(4) + \" / \" + coordinate[1].toFixed(4);\n\n this._currentTransport = settings.transport;\n if (settings.transport === \"Voiture\") {\n document.getElementById(\"GPisochronTransportCar-\" + this._uid).checked = true;\n } else {\n document.getElementById(\"GPisochronTransportPedestrian-\" + this._uid).checked = true;\n }\n\n this._currentExclusions = settings.exclusions;\n\n this._currentComputation = settings.method;\n if (settings.method === \"time\") {\n var time = value.split(\".\");\n this._currentTimeHour = time[0] || 0;\n document.getElementById(\"GPisochronValueChronInput1-\" + this._uid).value = this._currentTimeHour;\n this._currentTimeMinute = time[1] || 0;\n document.getElementById(\"GPisochronValueChronInput2-\" + this._uid).value = this._currentTimeMinute;\n document.getElementById(\"GPisochronChoiceAltChron-\" + this._uid).click();\n } else {\n this._currentDistance = value;\n document.getElementById(\"GPisochronValueDistInput-\" + this._uid).value = this._currentDistance;\n document.getElementById(\"GPisochronChoiceAltDist-\" + this._uid).click();\n }\n\n this._currentDirection = settings.direction;\n (settings.direction === \"departure\")\n ? document.getElementById(\"GPisochronDirectionSelect-\" + this._uid).selectedIndex = 0 : document.getElementById(\"GPisochronDirectionSelect-\" + this._uid).selectedIndex = 1;\n\n this.onIsoComputationSubmit();\n }\n\n /**\n * This method is public.\n * It allows to init the control.\n */\n init () {\n // point\n var coordinate = this._originPoint.getCoordinate();\n\n var input = document.getElementById(\"GPlocationOrigin_\" + 1 + \"-\" + this._uid);\n input.value = coordinate[1].toFixed(4) + \" / \" + coordinate[0].toFixed(4);\n\n // transport\n if (this._currentTransport === \"Voiture\") {\n document.getElementById(\"GPisochronTransportCar-\" + this._uid).checked = true;\n } else {\n document.getElementById(\"GPisochronTransportPedestrian-\" + this._uid).checked = true;\n }\n\n // method\n if (this._currentComputation === \"time\") {\n var minutes = this._currentIsoResults.time / 60;\n this._currentTimeHour = Math.floor(minutes / 60);\n document.getElementById(\"GPisochronValueChronInput1-\" + this._uid).value = this._currentTimeHour;\n this._currentTimeMinute = Math.round(((minutes / 60) - this._currentTimeHour) * 60);\n document.getElementById(\"GPisochronValueChronInput2-\" + this._uid).value = this._currentTimeMinute;\n document.getElementById(\"GPisochronChoiceAltChron-\" + this._uid).click();\n } else {\n this._currentDistance = this._currentIsoResults.distance / 1000;\n document.getElementById(\"GPisochronValueDistInput-\" + this._uid).value = this._currentDistance;\n document.getElementById(\"GPisochronChoiceAltDist-\" + this._uid).click();\n }\n\n // direction\n (this._currentDirection === \"departure\")\n ? document.getElementById(\"GPisochronDirectionSelect-\" + this._uid).selectedIndex = 0 : document.getElementById(\"GPisochronDirectionSelect-\" + this._uid).selectedIndex = 1;\n }\n\n /**\n * Clean UI : reinit control\n */\n clean () {\n this._clearIsoInputs();\n // INFO\n // le comportement est surchargé, ceci supprime la couche !?\n // cf. _createIsoPanelFormPointElement()\n this._originPoint.clearResults();\n document.getElementById(\"GPlocationPoint_1-\" + this._uid).style.cssText = \"\";\n document.getElementById(\"GPlocationOriginCoords_1-\" + this._uid).value = \"\";\n document.getElementById(\"GPlocationOrigin_1-\" + this._uid).value = \"\";\n document.getElementById(\"GPlocationPoint_1-\" + this._uid).style.cssText = \"\";\n document.getElementById(\"GPlocationOriginPointer_1-\" + this._uid).checked = false;\n document.getElementById(\"GPlocationOrigin_1-\" + this._uid).className = \"GPlocationOriginVisible gpf-visible\";\n document.getElementById(\"GPlocationOriginCoords_1-\" + this._uid).className = \"GPlocationOriginHidden gpf-hidden\";\n this._currentIsoResults = null;\n this.setLayer();\n }\n\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize Isocurve control (called by Isocurve constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n this._checkInputOptions(options);\n\n // set default options\n this.options = {\n collapsed : true,\n draggable : false,\n export : false,\n methods : [\"time\", \"distance\"],\n graphs : [\"Pieton\", \"Voiture\"],\n exclusions : {\n toll : false,\n tunnel : false,\n bridge : false\n },\n directions : [\"departure\", \"arrival\"],\n markerOpts : {\n url : Markers[\"lightOrange\"],\n offset : Markers.defaultOffset\n },\n isocurveOptions : {},\n autocompleteOptions : {},\n layerDescription : {\n title : \"Isochrone/Isodistance\",\n description : \"isochrone/isodistance basé sur un graphe\"\n }\n };\n\n // merge with user options\n Utils.assign(this.options, options);\n\n /** {Boolean} specify if isocurve control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n /** {Boolean} specify if isocurve control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n // identifiant du contrôle : utile pour suffixer les identifiants CSS (pour gérer le cas où il y en a plusieurs dans la même page)\n this._uid = this.options.id || SelectorID.generate();\n\n // Options du service paramétrables via l'interface (graph, method, exclusions)\n // Mode de transport selectionné : 'Voiture' ou 'Pieton'\n this._currentTransport = null;\n this._initTransport();\n // Mode de calcul selectionné : 'time' (isochron) ou 'distance' (isodistance)\n this._currentComputation = null;\n this._initComputation();\n // Exclusions selectionnées : Tunnel, Toll et Bridge\n this._currentExclusions = [];\n this._initExclusions();\n // sens de parcours : \"departure\" ou \"arrival\"\n this._currentDirection = null;\n this._initDirection();\n\n // point de saisie\n this._originPoint = null;\n\n // containers principaux\n this._pictoIsoButton = null;\n this._waitingContainer = null;\n this._formContainer = null;\n this._IsoPanelContainer = null;\n this._IsoPanelHeaderContainer = null;\n\n // les résultats du calcul\n this._currentIsoResults = null;\n\n // la géométrie\n this._geojsonLayer = null;\n this._geojsonObject = null;\n\n // bouton export\n this.export = null;\n\n // si un calcul est en cours ou non\n this._waiting = false;\n // timer pour cacher la patience après un certain temps\n this._timer = null;\n\n // styles pour les sélections des features\n this._defaultFeatureStyle = new Style({\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.7)\"\n }),\n stroke : new Stroke({\n color : \"rgba(0, 183, 152, 0)\",\n width : 1\n })\n });\n\n // liste des ressources avec droits par service\n // Ex. {\n // \"Isocurve\" : {\n // key : \"ger4g456re45er456t4er5ge5\",\n // resources : [\"Pieton\", \"Voiture\"]\n // }\n // }\n this._resources = {};\n\n // listener key for event click on map\n this.listenerKey = null;\n }\n\n /**\n * this method is called by this.initialize()\n *\n * @param {Object} options - options\n *\n * @private\n */\n _checkInputOptions (options) {\n // vérification des options\n // on ne permet pas de n'afficher aucun mode de calcul ou aucun mode de transport ?\n var i;\n\n // modes de calcul\n if (options.methods) {\n if (Array.isArray(options.methods)) {\n // on ne permet pas de passer un tableau vide : on spécifie au moins une méthode\n if (options.methods.length === 0) {\n options.methods = null;\n } else {\n for (i = 0; i < options.methods.length; i++) {\n if (typeof options.methods[i] !== \"string\") {\n logger.log(\"[ol.control.Isocurve] ERROR : parameter 'methods' elements should be of type 'string'\");\n }\n }\n }\n } else {\n logger.warn(\"'methods' parameter should be an array\");\n options.methods = null;\n }\n }\n\n // mode de transport\n if (options.graphs) {\n if (Array.isArray(options.graphs)) {\n // on ne permet pas de passer un tableau vide : on spécifie au moins un graph\n if (options.graphs.length === 0) {\n options.graphs = null;\n } else {\n for (i = 0; i < options.graphs.length; i++) {\n if (typeof options.graphs[i] !== \"string\") {\n logger.log(\"[ol.control.Isocurve] ERROR : parameter 'graphs' elements should be of type 'string'\");\n } else {\n if (options.graphs[i].toLowerCase() === \"pieton\") {\n options.graphs[i] = \"Pieton\";\n }\n if (options.graphs[i].toLowerCase() === \"voiture\") {\n options.graphs[i] = \"Voiture\";\n }\n }\n }\n }\n } else {\n logger.warn(\"'graphs' parameter should be an array\");\n options.graphs = null;\n }\n }\n\n // sens du parcours\n if (options.directions) {\n if (Array.isArray(options.directions)) {\n // on ne permet pas de passer un tableau vide : on spécifie au moins une direction\n if (options.directions.length === 0) {\n options.directions = null;\n } else {\n for (i = 0; i < options.directions.length; i++) {\n if (typeof options.directions[i] !== \"string\") {\n logger.log(\"[ol.control.Isocurve] ERROR : parameter 'directions' elements should be of type 'string'\");\n }\n }\n }\n } else {\n logger.warn(\"'directions' parameter should be an array\");\n options.directions = null;\n }\n }\n\n // collapsed\n if (options.collapsed === \"true\") {\n options.collapsed = true;\n }\n if (options.collapsed === \"false\") {\n options.collapsed = false;\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize transport mode\n * (\"Voiture\" ou \"Pieton\")\n *\n * @private\n */\n _initTransport () {\n // Mode de transport selectionné\n this._currentTransport = \"Piéton\"; // par defaut\n\n // par defaut\n var transports = this.options.graphs;\n if (!transports || transports.length === 0) {\n this.options.graphs = [\"Pieton\", \"Voiture\"];\n }\n\n // option\n if (Array.isArray(transports) && transports.length) {\n // FIXME pb si le 1er graphe n'est pas une ressource connue !\n if (transports[0] === \"Voiture\" || transports[0] === \"Pieton\") {\n this._currentTransport = transports[0];\n }\n }\n\n // si l'utilisateur a spécifié un graph dans le service, on surcharge les options du widget\n var serviceOptions = this.options.isocurveOptions;\n if (serviceOptions.graph) {\n this._currentTransport = serviceOptions.graph;\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize computation mode\n * (time or distance)\n *\n * @private\n */\n _initComputation () {\n // Mode de calcul selectionné\n this._currentComputation = \"time\"; // par defaut\n\n // par defaut\n var methods = this.options.methods;\n if (!methods || methods.length === 0) {\n this.options.methods = [\"time\", \"distance\"];\n }\n\n // option\n if (Array.isArray(methods) && methods.length) {\n // FIXME pb si le 1er graphe n'est pas une ressource connue !\n if (methods[0] === \"time\" || methods[0] === \"distance\") {\n this._currentComputation = methods[0];\n }\n }\n\n // si l'utilisateur a spécifié une méthode dans le service, on surcharge les options du widget\n var serviceOptions = this.options.isocurveOptions;\n if (serviceOptions.method) {\n this._currentComputation = serviceOptions.method;\n }\n if (serviceOptions.time) {\n this._currentComputation = \"time\";\n }\n if (serviceOptions.distance) {\n this._currentComputation = \"distance\";\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize direction mode\n * (departure or arrival)\n *\n * @private\n */\n _initDirection () {\n // Mode de calcul selectionné\n this._currentDirection = \"departure\"; // par defaut\n\n // par defaut\n var directions = this.options.directions;\n if (!directions || directions.length === 0) {\n this.options.directions = [\"departure\", \"arrival\"];\n }\n\n // option\n if (Array.isArray(directions) && directions.length) {\n // FIXME pb si le 1er graphe n'est pas une ressource connue !\n if (directions[0] === \"departure\" || directions[0] === \"arrival\") {\n this._currentDirection = directions[0];\n }\n }\n\n // si l'utilisateur a spécifié une méthode dans le service, on surcharge les options du widget\n var serviceOptions = this.options.isocurveOptions;\n if (!serviceOptions.reverse) {\n this._currentDirection = \"departure\";\n }\n if (serviceOptions.reverse === true) {\n this._currentDirection = \"arrival\";\n this.options.directions = [\"arrival\", \"departure\"];\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize exclusions\n *\n * @private\n */\n _initExclusions () {\n // Exclusions selectionnées : Tunnel, Toll et Bridge\n this._currentExclusions = []; // par defaut\n\n // par defaut\n var exclusion = this.options.exclusions;\n if (!exclusion || (typeof exclusion === \"object\" && Object.keys(exclusion).length === 0)) {\n this.options.exclusions = {\n toll : false,\n tunnel : false,\n bridge : false\n };\n }\n\n // option\n if (exclusion && typeof exclusion === \"object\" && Object.keys(exclusion).length) {\n for (var k in exclusion) {\n if (exclusion.hasOwnProperty(k)) {\n if (exclusion.k) {\n this._currentExclusions.push(k);\n }\n }\n }\n }\n\n // si l'utilisateur a spécifié des exclusions dans le service, on surcharge les options du widget\n var serviceOptions = this.options.isocurveOptions;\n if (Array.isArray(serviceOptions.exclusions)) {\n this._currentExclusions = serviceOptions.exclusions;\n }\n }\n\n // ################################################################### //\n // ######################## DOM initialize ########################### //\n // ################################################################### //\n\n /**\n * initialize component container (DOM)\n *\n * @param {Object} map - the map\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initContainer (map) {\n // get main container\n var container = this._container;\n if (container.childElementCount > 0) {\n return container;\n }\n\n var picto = this._pictoIsoButton = this._createShowIsoPictoElement();\n container.appendChild(picto);\n\n // panneau\n var panel = this._IsoPanelContainer = this._createIsoPanelElement();\n var panelDiv = this._createIsoPanelDivElement();\n panel.appendChild(panelDiv);\n\n // header\n var header = this._IsoPanelHeaderContainer = this._createIsoPanelHeaderElement();\n panelDiv.appendChild(header);\n\n // form\n var form = this._formContainer = this._createIsoPanelFormElement();\n\n form.appendChild(this._createIsoPanelFormModeChoiceTransportElement(this.options.graphs));\n\n // form: input de saisie de la localisation (fonction de Isocurve, voir ci-dessous)\n form.appendChild(this._createIsoPanelFormPointLabel());\n var point = this._createIsoPanelFormPointElement(map);\n form.appendChild(point);\n\n var isoChronChecked = false;\n var isoDistChecked = false;\n var typeChoice = this._createIsoPanelFormTypeChoiceElement();\n for (var i = 0; i < this.options.methods.length; i++) {\n if (this.options.methods[i] === \"time\") {\n isoChronChecked = (i === 0);\n typeChoice.appendChild(this._createIsoPanelFormTypeChoiceChronElement(isoChronChecked));\n }\n if (this.options.methods[i] === \"distance\") {\n isoDistChecked = (i === 0);\n typeChoice.appendChild(this._createIsoPanelFormTypeChoiceDistElement(isoDistChecked));\n }\n }\n form.appendChild(typeChoice);\n\n // form: menu du choix des valeurs\n form.appendChild(this._createIsoPanelFormLabelIsochronElement(isoChronChecked));\n form.appendChild(this._createIsoPanelFormValueIsochronElement(isoChronChecked));\n form.appendChild(this._createIsoPanelFormLabelIsodistanceElement(isoDistChecked));\n form.appendChild(this._createIsoPanelFormValueIsodistanceElement(isoDistChecked));\n\n // FIXME : doit on passer le paramètre defaultDirection ?\n form.appendChild(this._createIsoPanelFormModeChoiceDirectionElement(this.options.directions));\n\n // form: menu des exclusions\n if (this.options.exclusions && (typeof this.options.exclusions === \"object\") && (Object.keys(this.options.exclusions).length !== 0)) {\n form.appendChild(this._createShowIsoExclusionsPictoElement());\n var exclusion = this._createIsoPanelFormExclusionsElement();\n exclusion.appendChild(this._createIsoPanelFormExclusionOptionsElement(this.options.exclusions));\n form.appendChild(exclusion);\n }\n\n // footer\n var footer = this._createIsoPanelFooterElement();\n form.appendChild(footer);\n\n if (!checkDsfr()) {\n var buttonReset = this._createIsoFormResetElement();\n footer.appendChild(buttonReset);\n }\n\n\n // form: bouton du calcul\n var buttonSubmit = this._submitContainer = this._createIsoSubmitFormElement();\n footer.appendChild(buttonSubmit);\n\n panelDiv.appendChild(form);\n\n // waiting\n var waiting = this._waitingContainer = this._createIsoWaitingElement();\n panel.appendChild(waiting);\n\n container.appendChild(panel);\n\n // hide autocomplete suggested locations on container click\n if (container.addEventListener) {\n container.addEventListener(\"click\", (e) => this._hideIsoSuggestedLocations(e));\n }\n\n return container;\n }\n\n /**\n * Create start point\n *\n * @param {Object} map - the map\n *\n * @returns {Object} DOM element\n * @private\n */\n _createIsoPanelFormPointElement (map) {\n this._originPoint = new LocationSelector({\n apiKey : this.options.apiKey || null,\n tag : {\n id : 1,\n groupId : this._uid,\n markerOpts : this.options.markerOpts,\n display : true\n },\n autocompleteOptions : this.options.autocompleteOptions || null\n });\n this._originPoint.setMap(map);\n // a la sélection d'un nouveau point, on réinitialise aussi le tracé\n var self = this;\n // click sur le pointer\n document.getElementById(\"GPlocationOriginPointerImg_1-\" + this._uid).onclick = function () {\n self._clearGeojsonLayer();\n var map = self.getMap();\n if (self._originPoint._inputShowPointerContainer.checked) {\n // au click sur l'input pour pointer sur la carte: on minimise le formulaire\n self._formContainer.className = \"GPisochronFormMini gpf-panel__content fr-modal__content\";\n // et au clic sur la carte, on réaffichera le formulaire \"normal\"\n this.listenerKey = map.on(\n \"click\",\n () => {\n self._formContainer.className = \"gpf-panel__content fr-modal__content\";\n self.dispatchEvent(\"isocurve:drawend\");\n }\n );\n } else {\n // si on déselectionne le pointer, on rétablit le formulaire en mode normal\n self._formContainer.className = \"gpf-panel__content fr-modal__content\";\n // et on enlève l'écouteur d'évènement sur la carte\n // map.un(\"click\", () => { self._formContainer.className = \"\"; });\n olObservableUnByKey(this.listenerKey);\n }\n /**\n * event triggered at the start of drawing input\n *\n * @event isocurve:drawstart\n */\n self.dispatchEvent(\"isocurve:drawstart\");\n };\n // click sur le label\n document.getElementById(\"GPlocationOriginLabel_1-\" + this._uid).onclick = function () {\n self._clearGeojsonLayer();\n self._formContainer.className = \"gpf-panel__content fr-modal__content\";\n // on désactive l'écouteur d'événements sur la carte (pour ne pas placer un marker au clic)\n map.un(\n \"click\",\n () => {\n self._formContainer.className = \"gpf-panel__content fr-modal__content\";\n }\n );\n self.dispatchEvent(\"isocurve:drawend\");\n };\n // click sur la zone de saisie\n document.getElementById(\"GPlocationOrigin_1-\" + this._uid).onclick = function () {\n self._clearGeojsonLayer();\n /**\n * event triggered at the end of drawing input\n *\n * @event isocurve:drawend\n */\n self.dispatchEvent(\"isocurve:drawend\");\n };\n return this._originPoint._container;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'submit' on 'GPisochronForm' tag form\n * (cf. this._createIsoPanelFormElement),\n * and call isocurve service to display results\n *\n * @private\n */\n onIsoComputationSubmit () {\n // si on n'a pas de valeur récupérée pour notre point origine, on ne fait rien\n if (!this._originPoint || !this._originPoint.getCoordinate || !this._originPoint.getCoordinate()) {\n logger.log(\"[Isocurve] Missing position parameter to submit isocurve request\");\n return;\n }\n\n // récupération de l'origine\n var positionCoordinates = this._originPoint.getCoordinate();\n var position = {\n x : positionCoordinates[0],\n y : positionCoordinates[1]\n };\n logger.log(\"origin : \", position);\n\n // récupération du temps ou de la distance\n var time;\n var distance;\n if (this._currentComputation.toLowerCase() === \"time\") {\n var timeHourInput = document.getElementById(\"GPisochronValueChronInput1-\" + this._uid);\n var hours = parseInt(timeHourInput.value, 10);\n if (isNaN && isNaN(hours)) {\n hours = 0;\n }\n var timeMinutesInput = document.getElementById(\"GPisochronValueChronInput2-\" + this._uid);\n var minutes = parseInt(timeMinutesInput.value, 10);\n if (isNaN && isNaN(minutes)) {\n minutes = 0;\n }\n // durée exprimée en secondes\n time = hours * 3600 + minutes * 60;\n logger.log(\"time : \" + time);\n }\n if (this._currentComputation.toLowerCase() === \"distance\") {\n var distInput = document.getElementById(\"GPisochronValueDistInput-\" + this._uid);\n // distance exprimée en mètres\n distance = parseFloat(distInput.value) * 1000;\n logger.log(\"distance : \" + distance);\n }\n\n // si on n'a pas de valeur de calcul renseignée, on ne lance pas la requête.\n if (!time && !distance) {\n logger.log(\"[Isocurve] Missing time or distance parameter to submit isocurve request\");\n return;\n }\n\n // on recupere les éventuelles options du service passées par l'utilisateur\n var options = this.options.isocurveOptions || {};\n\n // gestion du protocole et du timeout\n // le timeout est indispensable sur le protocole JSONP.\n var _protocol = options.protocol || \"XHR\";\n var _timeout = options.timeOut || 0;\n if (_protocol === \"JSONP\" && _timeout === 0) {\n // FIXME le timeout est obligatoire pour ce type de protocole...\n _timeout = 15000;\n }\n\n // gestion des callback\n var bOnFailure = !!(options.onFailure !== null && typeof options.onFailure === \"function\"); // cast variable to boolean\n var bOnSuccess = !!(options.onSuccess !== null && typeof options.onSuccess === \"function\");\n\n // on met en place l'affichage des resultats dans la fenetre de resultats.\n var context = this;\n var isoRequestOptions = {\n position : position,\n graph : options.graph || this._currentTransport,\n exclusions : options.exclusions || this._currentExclusions,\n method : options.method || this._currentComputation,\n smoothing : options.smoothing || true,\n timeOut : _timeout,\n protocol : _protocol,\n resource : options.resource,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(results);\n if (results) {\n context._drawIsoResults(results);\n }\n if (bOnSuccess) {\n options.onSuccess.call(context, results);\n }\n },\n // callback onFailure\n onFailure : function (error) {\n // FIXME mise à jour du controle mais le service ne repond pas en 200 !?\n context._hideWaitingContainer();\n logger.log(error.message);\n if (bOnFailure) {\n options.onFailure.call(context, error);\n }\n }\n };\n if ((this._currentDirection.toLowerCase() === \"arrival\") || (options.reverse)) {\n isoRequestOptions.reverse = true;\n }\n if (time) {\n isoRequestOptions.time = time;\n }\n if (distance) {\n isoRequestOptions.distance = distance;\n }\n\n this._requestIsoCurve(isoRequestOptions);\n }\n\n /**\n * this method is called by event 'click' on 'GPshowIsochronPicto' picto\n * (cf. this._createShowIsoPictoElement),\n * and clear inputs and previous isocurve drawings\n *\n * @param { event } e évènement associé au clic\n * @private\n */\n onShowIsoPanelClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n // on supprime toutes les interactions\n Interactions.unset(map);\n var opened = this._pictoIsoButton.ariaPressed;\n this.collapsed = !(opened === \"true\");\n // on génère nous même l'evenement OpenLayers de changement de propriété\n // (utiliser ol.control.Isocurve.on(\"change:collapsed\", function ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n }\n\n /**\n * this method is called by event 'change' on 'GPisochronChoiceAltDist' or 'GPisochronChoiceAltChron'\n * input (cf. this._createIsoPanelFormTypeChoiceElement),\n * and updates current computation mode\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onIsoTypeChoiceChange (e) {\n var value = e.target.value;\n if (!value) {\n return;\n }\n if (value === \"isodistance\") {\n this._currentComputation = \"distance\";\n }\n if (value === \"isochron\") {\n this._currentComputation = \"time\";\n }\n }\n\n /**\n * this method is called by event 'click' on 'GPisochronTransportPedestrian' or 'GPisochronTransportCar'\n * input (cf. this._createIsoPanelFormModeChoiceTransportElement),\n * and updates current transport mode\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onIsoModeTransportChange (e) {\n var value = e.target.value;\n if (!value) {\n return;\n }\n this._currentTransport = value;\n }\n\n /**\n * this method is called by event 'change' on 'GPisochronDirectionSelect' select\n * (cf. this._createIsoPanelFormModeChoiceDirectionElement),\n * and updates current direction mode\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onIsoModeDirectionChange (e) {\n var value = e.target.value;\n if (!value) {\n return;\n }\n if (value.toLowerCase() === \"arrival\") {\n document.getElementById(\"GPisochronPointLabelP-\" + this._uid).innerHTML = \"Arrivée\";\n } else {\n document.getElementById(\"GPisochronPointLabelP-\" + this._uid).innerHTML = \"Départ\";\n }\n this._currentDirection = value;\n }\n\n /**\n * this method is called by event 'change' on 'GPIsoExclusionsToll'\n * or 'GPIsoeExclusionsTunnel' or 'GPIsoExclusionsBridge' tag input\n * (cf. this._createIsoPanelFormExclusionOptionsElement).\n * this value is saved as a parameter for the service isocurve.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onIsoExclusionsChange (e) {\n var value = e.target.value;\n var checked = e.target.checked;\n\n if (!value) {\n return;\n }\n\n var bFound = false;\n var iFound = null;\n for (var i = 0; i < this._currentExclusions.length; i++) {\n if (deepEqual(this._currentExclusions[i], value.toLowerCase())) {\n iFound = i;\n bFound = true;\n }\n }\n // on l'ajoute si la valeur n'existe pas et est selectionnée\n if (!bFound && !checked) {\n this._currentExclusions.push(value.toLowerCase());\n }\n // on la retire si la valeur existe et est deselectionnée\n if (bFound && checked) {\n this._currentExclusions[iFound] = null;\n }\n }\n\n /**\n * this method is called by event 'click' on 'GPisoReset'\n * tag label (cf. this._createIsoFormResetElement),\n * and it cleans all isochron input options and results.\n *\n * @private\n */\n onIsoResetClick () {\n // clear\n this._clear();\n }\n\n /**\n * ...\n * @private\n */\n onShowIsoSettingsClick () {}\n\n // ################################################################### //\n // ######################## isocurve calculation ##################### //\n // ################################################################### //\n\n /**\n * this method is called by this.onIsoComputationSubmit\n * and executes a request to the service.\n *\n * @param {Object} options - isocurve service request options\n * @private\n */\n _requestIsoCurve (options) {\n // on ne fait pas de requête si on n'a pas renseigné de parametres !\n if (!options || ((typeof options === \"object\") && (Object.keys(options).length === 0))) {\n return;\n }\n // on ne fait pas de requête si on n'a pas de point d'origine\n if (!options.position) {\n return;\n }\n\n // si l'utilisateur a spécifié le paramètre ssl au niveau du control, on s'en sert\n // true par défaut (https)\n if (typeof options.ssl !== \"boolean\") {\n if (typeof this.options.ssl === \"boolean\") {\n options.ssl = this.options.ssl;\n } else {\n options.ssl = true;\n }\n }\n\n logger.log(options);\n\n // on efface une éventuelle précédente couche\n this._clearGeojsonLayer();\n\n // mise en place de la patience\n this._displayWaitingContainer();\n\n // appel du service de calcul d'isochrones\n Gp.Services.isoCurve(options);\n }\n\n /**\n * this method is called by this.onIsoComputationSubmit (in case of success)\n * and draw isocurve results geometry on map\n *\n * @param {Object} results - isocurve response results\n * @private\n */\n _drawIsoResults (results) {\n // sauvegarde de l'etat des resultats\n this._currentIsoResults = results;\n // cache la patience\n this._hideWaitingContainer();\n\n if (!results.geometry) {\n return;\n }\n\n var map = this.getMap();\n\n // 1. création de l'objet geoJSON\n this._geojsonObject = {\n type : \"FeatureCollection\",\n crs : {\n type : \"name\",\n properties : {\n name : \"EPSG:4326\"\n }\n },\n features : [\n {\n type : \"Feature\",\n crs : {\n type : \"name\",\n properties : {\n name : \"EPSG:4326\"\n }\n },\n geometry : results.geometry\n }\n ]\n };\n this._geojsonObject.features.push({\n type : \"Feature\",\n geometry : {\n type : \"Point\",\n coordinates : this._originPoint.getCoordinate()\n },\n properties : {\n description : \"Point d'origine\",\n \"marker-symbol\" : this.options.markerOpts.url\n }\n });\n var geojsonformat = new GeoJSONExtended({\n defaultDataProjection : \"EPSG:4326\",\n defaultStyle : this._defaultFeatureStyle\n });\n var mapProj = map.getView().getProjection().getCode();\n var features = geojsonformat.readFeatures(\n this._geojsonObject, {\n dataProjection : \"EPSG:4326\",\n featureProjection : mapProj\n }\n );\n\n // 2. ajout de la géométrie comme nouvelle couche vecteur à la carte\n var method = (this._currentComputation === \"time\") ? \"Isochrone\" : \"Isodistance\";\n\n this._geojsonLayer = new VectorLayer({\n source : new VectorSource({\n features : features\n }),\n style : this._defaultFeatureStyle,\n opacity : 0.9,\n title : \"Mon \" + method\n });\n // ajout d'un identifiant à la couche\n var graph;\n if (this._currentTransport === \"Pieton\") {\n graph = \"piéton\";\n this._geojsonLayer.gpResultLayerId = \"compute:Pieton$GEOPORTAIL:GPP:Isocurve\";\n } else {\n graph = \"voiture\";\n this._geojsonLayer.gpResultLayerId = \"compute:Voiture$GEOPORTAIL:GPP:Isocurve\";\n }\n // ajout à la carte\n map.addLayer(this._geojsonLayer);\n\n /**\n * event triggered when the compute is finished\n *\n * @event isocurve:compute\n * @typedef {Object}\n * @property {Object} type - event\n * @property {Object} target - instance Isocurve\n * @example\n * Isocurve.on(\"isocurve:compute\", function (e) {\n * console.log(e.target.getData());\n * })\n */\n this.dispatchEvent({\n type : \"isocurve:compute\"\n });\n\n // 3. Zoom sur l'emprise de la geometry\n if (features[0] && features[0].getGeometry() && features[0].getGeometry().getExtent()) {\n var extent = features[0].getGeometry().getExtent();\n map.getView().fit(extent, map.getSize());\n }\n\n // 5. Si un layer switcher est présent dans la carte, on lui affecte des informations pour cette couche\n var method = (this._currentComputation === \"time\") ? \"Isochrone\" : \"Isodistance\";\n map.getControls().forEach(\n (control) => {\n if (control instanceof LayerSwitcher) {\n // un layer switcher est présent dans la carte\n var layerId = this._geojsonLayer.gpLayerId;\n // on n'ajoute des informations que s'il n'y en a pas déjà (si le titre est le numéro par défaut)\n if (control._layers[layerId].title === layerId) {\n control.addLayer(\n this._geojsonLayer, {\n title : this.options.layerDescription.title + \" (\" + method + \"/\" + graph + \")\",\n description : this.options.layerDescription.description\n }\n );\n }\n }\n }\n );\n }\n\n // ################################################################### //\n // ############################# Clean ############################### //\n // ################################################################### //\n\n /**\n * this method is called by this.onShowIsoPanelClick()\n * and it clears all elements (reinit).\n *\n * @private\n */\n _clear () {\n // clear inputs\n this._clearIsoInputs();\n\n // clear origin point (and marker)\n this._originPoint.clear();\n\n // remove geometry layer\n this._clearGeojsonLayer();\n\n // clear results\n this._currentIsoResults = null;\n }\n\n /**\n * this method is called by this._clear()\n * and it clears all input elements (dist and time)\n *\n * @private\n */\n _clearIsoInputs () {\n // 1. clear inputs\n // clear time inputs (if exists) :\n // hours\n var timeHourInput = document.getElementById(\"GPisochronValueChronInput1-\" + this._uid);\n if (timeHourInput) {\n timeHourInput.value = \"0\";\n }\n // minutes\n var timeMinutesInput = document.getElementById(\"GPisochronValueChronInput2-\" + this._uid);\n if (timeMinutesInput) {\n timeMinutesInput.value = \"0\";\n }\n // clear distance input (if exists)\n var distInput = document.getElementById(\"GPisochronValueDistInput-\" + this._uid);\n if (distInput) {\n distInput.value = \"0\";\n }\n\n // 2. reinit options to default\n this._initTransport();\n this._initComputation();\n this._initDirection();\n this._initExclusions();\n\n // 3. set transport mode to default\n var transportdiv;\n if (this._currentTransport === \"Pieton\") {\n transportdiv = document.getElementById(\"GPisochronTransportPedestrian-\" + this._uid);\n if (transportdiv) {\n transportdiv.checked = \"true\";\n }\n } else {\n transportdiv = document.getElementById(\"GPisochronTransportCar-\" + this._uid);\n if (transportdiv) {\n transportdiv.checked = \"true\";\n }\n }\n\n // 4. set computation mode to default (distance or time)\n var computationdiv;\n if (this._currentComputation.toLowerCase() === \"distance\") {\n computationdiv = document.getElementById(\"GPisochronChoiceAltDist-\" + this._uid);\n if (computationdiv) {\n computationdiv.checked = \"true\";\n }\n if (document.getElementById(\"GPisochronValueDist-\" + this._uid)) {\n document.getElementById(\"GPisochronValueDist-\" + this._uid).className = \"GPflexInput gpf-flex\";\n }\n if (document.getElementById(\"GPisochronValueChron-\" + this._uid)) {\n document.getElementById(\"GPisochronValueChron-\" + this._uid).className = \"GPelementHidden gpf-hidden\";\n }\n } else {\n computationdiv = document.getElementById(\"GPisochronChoiceAltChron-\" + this._uid);\n if (computationdiv) {\n computationdiv.checked = \"true\";\n }\n if (document.getElementById(\"GPisochronValueChron-\" + this._uid)) {\n document.getElementById(\"GPisochronValueChron-\" + this._uid).className = \"GPflexInput gpf-flex\";\n }\n if (document.getElementById(\"GPisochronValueDist-\" + this._uid)) {\n document.getElementById(\"GPisochronValueDist-\" + this._uid).className = \"GPelementHidden gpf-hidden\";\n }\n }\n\n // 5. set direction mode to default (arrival or departure)\n var directionSelect = document.getElementById(\"GPisochronDirectionSelect-\" + this._uid);\n if (directionSelect) {\n directionSelect.value = this._currentDirection;\n }\n if (directionSelect.value.toLowerCase() === \"arrival\") {\n document.getElementById(\"GPisochronPointLabelP-\" + this._uid).innerHTML = \"Arrivée\";\n } else {\n document.getElementById(\"GPisochronPointLabelP-\" + this._uid).innerHTML = \"Départ\";\n }\n\n // 6. set exclusions to default\n var tollInput = document.getElementById(\"GPisoExclusionsToll-\" + this._uid);\n if (tollInput) {\n if (this._currentExclusions.indexOf(\"toll\") !== -1) {\n tollInput.checked = false;\n } else {\n tollInput.checked = true;\n }\n }\n var tunnelInput = document.getElementById(\"GPisoExclusionsTunnel-\" + this._uid);\n if (tunnelInput) {\n if (this._currentExclusions.indexOf(\"tunnel\") !== -1) {\n tunnelInput.checked = false;\n } else {\n tunnelInput.checked = true;\n }\n }\n var bridgeInput = document.getElementById(\"GPisoExclusionsBridge-\" + this._uid);\n if (bridgeInput) {\n if (this._currentExclusions.indexOf(\"bridge\") !== -1) {\n bridgeInput.checked = false;\n } else {\n bridgeInput.checked = true;\n }\n }\n }\n\n /**\n * this method is called by this.onIsoComputationSubmit (in case of failure)\n * and it clears all geometries\n *\n * @private\n */\n _clearGeojsonLayer () {\n var map = this.getMap();\n // remove layer\n if (this._geojsonLayer) {\n map.removeLayer(this._geojsonLayer);\n this._geojsonLayer = null;\n }\n // remove geojson object\n this._geojsonObject = null;\n }\n\n /**\n * this method is called by event 'click' on control main container\n * and hide suggested Locations (unless target is an autocomplete input)\n *\n * @param {Object} e - event\n *\n * @private\n */\n _hideIsoSuggestedLocations (e) {\n // si on clique sur l'input de saisie du point d'origine\n if (e.target && e.target.id && e.target.id.indexOf(\"GPlocationOrigin_\") !== -1) {\n\n } else {\n // si on clique ailleurs dans le DOM du control, on cache tous les résultats d'autocomplétion\n this._originPoint._hideSuggestedLocation();\n }\n }\n\n /**\n * this method displays waiting container and sets a timeout\n *\n * @private\n */\n _displayWaitingContainer () {\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerVisible gpf-waiting gpf-waiting--visible\";\n this._waiting = true;\n\n // mise en place d'un timeout pour réinitialiser le panel (cacher la patience)\n // si on est toujours en attente (si la requête est bloquée par exemple)\n var opts = this.options.isocurveOptions;\n if (opts && opts.timeOut) {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n var context = this;\n this._timer = setTimeout(function () {\n if (context._waiting === true) {\n context._hideWaitingContainer();\n } else {\n if (context._timer) {\n clearTimeout(context._timer);\n }\n }\n }, 16000);\n }\n }\n\n /**\n * this method hides waiting container and clears timeout\n *\n * @private\n */\n _hideWaitingContainer () {\n if (this._waiting) {\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n this._waiting = false;\n var opts = this.options.isocurveOptions;\n if (opts && opts.timeOut) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n }\n }\n\n};\n\n// on récupère les méthodes de la classe commune MousePosition\nObject.assign(Isocurve.prototype, IsocurveDOM);\nObject.assign(Isocurve.prototype, Widget);\n\nexport default Isocurve;\n\n// Expose Isocurve as ol.control.Isocurve (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.Isocurve = Isocurve;\n}\n\nconst deepEqual = function (x, y) {\n if (x === y) {\n return true;\n } else if ((typeof x === \"object\" && x != null) && (typeof y === \"object\" && y != null)) {\n if (Object.keys(x).length !== Object.keys(y).length) {\n return false;\n }\n\n for (var prop in x) {\n if (y.hasOwnProperty(prop)) {\n if (!deepEqual(x[prop], y[prop])) {\n return false;\n }\n } else {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n};\n","import checkDsfr from \"../Utils/CheckDsfr\";\n\nvar ReverseGeocodeDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPreverseGeocoding\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show ReverseGeocoding\n *\n * @returns {DOMElement} DOM element\n */\n _createShowReverseGeocodingPictoElement : function () {\n // contexte d'execution\n var self = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowReverseGeocodingPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowReverseGeocodingPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-reverse fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Ouvrir la recherche inverse\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // Close all results and panels when minimizing the widget\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowReverseGeocodingClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowReverseGeocodingClick(e);\n });\n }\n\n return button;\n },\n\n /**\n * Create Waiting Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingWaitingElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPreverseGeocodingCalcWaitingContainer\");\n div.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n\n var p = document.createElement(\"p\");\n p.className = \"GPwaitingContainerInfo gpf-waiting_info\";\n p.innerHTML = \"Recherche en cours...\";\n\n div.appendChild(p);\n\n return div;\n },\n\n /**\n * Reverse geocoding results panel element.\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingResultsPanelElement : function () {\n var resultsPanelDiv = document.createElement(\"div\");\n resultsPanelDiv.id = this._addUID(\"GPreverseGeocodingResultsPanel\");\n resultsPanelDiv.className = \"GPpanel GPelementHidden gpf-panel gpf-panel-reverse gpf-panel--hidden\";\n return resultsPanelDiv;\n },\n\n /**\n * Reverse geocoding results list.\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingResultsListElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPreverseGeocodingResultsList\");\n container.className = \"gpf-panel__list\";\n container.setAttribute(\"tabindex\", \"0\");\n // Results are dynamically filled in Javascript by reverse geocoding service\n return container;\n },\n\n /**\n * Add Result\n * (results dynamically generate !)\n *\n * @param {String} locationDescription - reverse geocoded location results\n * @param {Number} id - ID\n */\n _createReverseGeocodingResultElement : function (locationDescription, id) {\n // contexte\n var context = this;\n\n var container = document.getElementById(this._addUID(\"GPreverseGeocodingResultsList\"));\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPreverseGeocodedLocation_\" + id);\n div.setAttribute(\"tabindex\", \"0\");\n div.className = \"GPautoCompleteProposal gpf-panel__items\";\n div.innerHTML = locationDescription;\n div.title = locationDescription;\n\n if (div.addEventListener) {\n div.addEventListener(\"mouseover\", function (e) {\n context.onReverseGeocodingResultMouseOver(e);\n });\n div.addEventListener(\"focus\", function (e) {\n context.onReverseGeocodingResultMouseOver(e);\n });\n div.addEventListener(\"mouseout\", function (e) {\n context.onReverseGeocodingResultMouseOut(e);\n });\n div.addEventListener(\"blur\", function (e) {\n context.onReverseGeocodingResultMouseOut(e);\n });\n div.addEventListener(\"click\", function (e) {\n if (typeof context.onReverseGeocodingResultClick === \"function\") {\n context.onReverseGeocodingResultClick(e);\n }\n });\n } else if (div.attachEvent) {\n div.attachEvent(\"onmouseover\", function (e) {\n context.onReverseGeocodingResultMouseOver(e);\n });\n div.attachEvent(\"onmouseout\", function (e) {\n context.onReverseGeocodingResultMouseOut(e);\n });\n div.attachEvent(\"onclick\", function (e) {\n if (typeof context.onReverseGeocodingResultClick === \"function\") {\n context.onReverseGeocodingResultClick(e);\n }\n });\n }\n\n container.appendChild(div);\n },\n\n // ################################################################### //\n // ######################### Inputs panel ############################ //\n // ################################################################### //\n\n /**\n * Create Container Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPreverseGeocodingPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n return dialog;\n },\n\n _createReverseGeocodingPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingPanelHeaderElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n // info: on sépare les appels pour la création du picto de retour,\n // du titre et de la croix de fermeture pour les récupérer dans le composant\n return container;\n },\n\n /**\n * Create return picto in panel header\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingPanelReturnPictoElement : function () {\n // contexte\n var self = this;\n\n var buttonNew = document.createElement(\"button\");\n buttonNew.id = this._addUID(\"GPreverseGeocodingReturnPicto\");\n buttonNew.title = \"Nouvelle recherche\";\n buttonNew.className = \"GPreturnPicto GPimportPanelReturnPicto gpf-btn gpf-btn-icon-return fr-btn fr-btn--close fr-btn--tertiary-no-outline fr-m-1w\";\n\n buttonNew.classList.add(\"GPelementHidden\");\n buttonNew.classList.add(\"gpf-hidden\");\n\n if (checkDsfr()) {\n var returnSpan = document.createElement(\"span\");\n returnSpan.className = \"GPelementHidden gpf-visible\";\n returnSpan.innerHTML = \"Retour\";\n buttonNew.appendChild(returnSpan);\n }\n\n if (buttonNew.addEventListener) {\n buttonNew.addEventListener(\"click\", function (e) {\n document.getElementById(self._addUID(\"GPreverseGeocodingResultsPanel\")).className = \"GPelementHidden gpf-panel--hidden\";\n document.getElementById(self._addUID(\"GPreverseGeocodingForm\")).className = \"GPform gpf-panel__content fr-modal__content\";\n document.getElementById(self._addUID(\"GPreverseGeocodingHeaderTitle\")).innerHTML = \"Recherche inverse\";\n document.getElementById(self._addUID(\"GPreverseGeocodingReturnPicto\")).classList.add(\"GPelementHidden\");\n document.getElementById(self._addUID(\"GPreverseGeocodingReturnPicto\")).classList.add(\"gpf-hidden\");\n self.onGPreverseGeocodingReturnPictoClick(e);\n });\n } else if (buttonNew.attachEvent) {\n buttonNew.attachEvent(\"onclick\", function (e) {\n document.getElementById(self._addUID(\"GPreverseGeocodingResultsPanel\")).className = \"GPelementHidden gpf-panel--hidden\";\n document.getElementById(self._addUID(\"GPreverseGeocodingForm\")).className = \"GPform gpf-panel__content fr-modal__content\";\n document.getElementById(self._addUID(\"GPreverseGeocodingHeaderTitle\")).innerHTML = \"Recherche inverse\";\n document.getElementById(self._addUID(\"GPreverseGeocodingReturnPicto\")).classList.add(\"GPelementHidden\");\n document.getElementById(self._addUID(\"GPreverseGeocodingReturnPicto\")).classList.add(\"gpf-hidden\");\n self.onGPreverseGeocodingReturnPictoClick(e);\n });\n }\n return buttonNew;\n },\n\n /**\n * Create Header Title Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingPanelTitleElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n div.id = this._addUID(\"GPreverseGeocodingHeaderTitle\");\n div.innerHTML = \"Recherche inverse\";\n return div;\n },\n\n /**\n * Create Header close div\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingPanelCloseElement : function () {\n // contexte\n var self = this;\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPreverseGeocodingPanelClose\");\n divClose.className = \"GPpanelClose GPreverseGeocodingPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowReverseGeocodingPicto\")).click();\n }, false);\n divClose.addEventListener(\"keydown\", function (event) {\n if (event.keyCode === 13) {\n document.getElementById(self._addUID(\"GPshowReverseGeocodingPicto\")).click();\n }\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowReverseGeocodingPicto\")).click();\n });\n divClose.attachEvent(\"onkeydown\", function (event) {\n if (event.keyCode === 13) {\n document.getElementById(self._addUID(\"GPshowReverseGeocodingPicto\")).click();\n }\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n return divClose;\n },\n\n /**\n * Create Form\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingPanelFormElement : function () {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GPreverseGeocodingForm\");\n form.className = \"GPform gpf-panel__content fr-modal__content\";\n\n if (form.addEventListener) {\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n self.onReverseGeocodingSubmit();\n });\n } else if (form.attachEvent) {\n form.attachEvent(\"onsubmit\", function (e) {\n e.preventDefault();\n self.onReverseGeocodingSubmit();\n });\n }\n\n return form;\n },\n\n // ################################################################### //\n // ####################### Choice mode into form ##################### //\n // ################################################################### //\n\n /**\n * Create Container to Mode choice geocoding type\n *\n * @param {Array} resources - geocoding resources to be displayed (and used)\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingFormModeChoiceGeocodingTypeElement : function (resources) {\n // contexte d'execution\n var context = this;\n\n var div = document.createElement(\"div\");\n div.className = \"GPflexInput gpf-flex gpf-flex-reverse fr-mb-1w\";\n\n var label = document.createElement(\"label\");\n label.id = \"label-recherche-par\";\n label.className = \"GPlabel gpf-label fr-label\";\n label.innerHTML = \"Recherche par\";\n label.title = \"Recherche par\";\n div.appendChild(label);\n\n var select = document.createElement(\"select\");\n select.setAttribute(\"aria-labelledby\", \"label-recherche-par\");\n select.className = \"GPselect gpf-select fr-select\";\n // gestionnaire d'evenement : on stocke la valeur du type de geocodage,\n // utilisé dans la requête de géocodage inverse\n if (select.addEventListener) {\n select.addEventListener(\"change\", function (e) {\n context.onReverseGeocodingTypeChange(e);\n });\n } else if (select.attachEvent) {\n select.attachEvent(\"onchange\", function (e) {\n context.onReverseGeocodingTypeChange(e);\n });\n }\n\n // on prend soit les valeurs passées par l'utilisateur, soit des valeurs par défaut\n if (!resources || !Array.isArray(resources)) {\n resources = [\"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\"];\n }\n for (var i = 0; i < resources.length; i++) {\n switch (resources[i]) {\n case \"PositionOfInterest\":\n var POIOption = document.createElement(\"option\");\n POIOption.value = \"PositionOfInterest\";\n POIOption.text = \"Lieux/toponymes\";\n select.appendChild(POIOption);\n break;\n case \"StreetAddress\":\n var SAOption = document.createElement(\"option\");\n SAOption.value = \"StreetAddress\";\n SAOption.text = \"Adresses\";\n select.appendChild(SAOption);\n break;\n case \"CadastralParcel\":\n var CPOption = document.createElement(\"option\");\n CPOption.value = \"CadastralParcel\";\n CPOption.text = \"Parcelles cadastrales\";\n select.appendChild(CPOption);\n break;\n default:\n break;\n }\n }\n\n div.appendChild(select);\n\n return div;\n },\n\n /**\n * Create Container to Mode choice geocoding delimitation\n *\n * @param {Array} delimitations - geocoding delimitations to be displayed (and used)\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingFormModeChoiceGeocodingDelimitationElement : function (delimitations) {\n // contexte d'execution\n var context = this;\n\n var div = document.createElement(\"div\");\n div.className = \"GPflexInput gpf-flex gpf-flex-reverse fr-mb-2w\";\n\n var label = document.createElement(\"label\");\n label.id = \"label-delimitation\";\n label.className = \"GPlabel gpf-label fr-label\";\n label.innerHTML = \"Délimitation\";\n label.title = \"Délimitation\";\n div.appendChild(label);\n\n var select = document.createElement(\"select\");\n select.setAttribute(\"aria-labelledby\", \"label-delimitation\");\n select.className = \"GPselect gpf-select fr-select\";\n // gestionnaire d'evenement : on stocke la valeur du type de délimitation,\n // et on modifie l'événement de pointage sur la carte en fonction\n if (select.addEventListener) {\n select.addEventListener(\"change\", function (e) {\n context.onReverseGeocodingDelimitationChange(e);\n });\n } else if (select.attachEvent) {\n select.attachEvent(\"onchange\", function (e) {\n context.onReverseGeocodingDelimitationChange(e);\n });\n }\n\n // on prend soit les valeurs passées par l'utilisateur, soit des valeurs par défaut\n if (!delimitations || !Array.isArray(delimitations)) {\n delimitations = [\"Point\", \"Circle\", \"Extent\"];\n }\n for (var i = 0; i < delimitations.length; i++) {\n switch (delimitations[i].toLowerCase()) {\n case \"point\":\n var pointOption = document.createElement(\"option\");\n pointOption.value = \"point\";\n pointOption.text = \"Pointer un lieu\";\n select.appendChild(pointOption);\n break;\n case \"circle\":\n var circleOption = document.createElement(\"option\");\n circleOption.value = \"circle\";\n circleOption.text = \"Dessiner un cercle\";\n select.appendChild(circleOption);\n break;\n case \"extent\":\n var extentOption = document.createElement(\"option\");\n extentOption.value = \"extent\";\n extentOption.text = \"Dessiner une emprise\";\n select.appendChild(extentOption);\n break;\n default:\n break;\n }\n }\n\n div.appendChild(select);\n\n return div;\n },\n\n // ################################################################### //\n // ########################### Submit Form ########################### //\n // ################################################################### //\n\n /**\n * Create Submit Form Element\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingSubmitFormElement : function () {\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPreverseGeocodingSubmit\");\n input.className = \"GPsubmit gpf-btn fr-btn\";\n input.type = \"submit\";\n input.value = \"Rechercher\";\n\n return input;\n }\n\n};\n\nexport default ReverseGeocodeDOM;\n","// import CSS\nimport \"../../CSS/Controls/ReverseGeocoding/GPFreverseGeocoding.css\";\n// import \"../../CSS/Controls/ReverseGeocoding/GPFreverseGeocodingStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport Overlay from \"ol/Overlay\";\nimport Collection from \"ol/Collection\";\nimport Feature from \"ol/Feature\";\nimport {\n Fill,\n Icon,\n Stroke,\n Style,\n Circle\n} from \"ol/style\";\nimport {\n LineString,\n Point,\n Polygon\n} from \"ol/geom\";\nimport {\n Select as SelectInteraction,\n Draw as DrawInteraction\n} from \"ol/interaction\";\nimport { pointerMove as eventPointerMove } from \"ol/events/condition\";\nimport { transform as olTransformProj } from \"ol/proj\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport VectorSource from \"ol/source/Vector\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Utils from \"../../Utils/Helper\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Markers from \"../Utils/Markers\";\nimport Draggable from \"../../Utils/Draggable\";\nimport Interactions from \"../Utils/Interactions\";\n// import local with ol dependencies\nimport LayerSwitcher from \"../LayerSwitcher/LayerSwitcher\";\n// DOM\nimport ReverseGeocodeDOM from \"./ReverseGeocodeDOM\";\n\nvar logger = Logger.getLogger(\"reversegeocoding\");\n\n/**\n * @classdesc\n *\n * ReverseGeocode Control.\n *\n * @constructor\n * @alias ol.control.ReverseGeocode\n * @type {ol.control.ReverseGeocode}\n * @extends {ol.control.Control}\n * @param {Object} options - ReverseGeocode control options\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {String} [options.apiKey] - API key for services call (reverse geocode service). The key \"calcul\" is used by default.\n * @param {String} [options.ssl = true] - use of ssl or not (default true, service requested using https protocol)\n * @param {Boolean} [options.collapsed = true] - Specify if widget has to be collapsed (true) or not (false) on map loading. Default is true.\n * @param {Boolean} [options.draggable = false] - Specify if widget is draggable\n * @param {Object} [options.resources = [\"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\"]] - resources for geocoding, by default : [\"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\"]. Possible values are : \"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\". Resources will be displayed in the same order in widget list.\n * @param {Object} [options.delimitations = [\"Point\", \"Circle\", \"Extent\"]] - delimitations for reverse geocoding, by default : [\"Point\", \"Circle\", \"Extent\"]. Possible values are : \"Point\", \"Circle\", \"Extent\". Delimitations will be displayed in the same order in widget list.\n * @param {Object} [options.reverseGeocodeOptions = {}] - reverse geocode service options. see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~reverseGeocode Gp.Services.reverseGeocode()} to know all reverse geocode options.\n * @param {Object} [options.layerDescription = {}] - Layer informations to be displayed in LayerSwitcher widget (only if a LayerSwitcher is also added to the map)\n * @param {String} [options.layerDescription.title = \"Saisie (recherche inverse)\"] - Layer title to be displayed in LayerSwitcher\n * @param {String} [options.layerDescription.description = \"Couche de saisie d'une zone de recherche pour la recherche inverse\"] - Layer description to be displayed in LayerSwitcher\n * @fires reversegeocode:compute\n * @fires reversegeocode:onclickresult\n * @example\n * var iso = ol.control.ReverseGeocode({\n * \"collapsed\" : false,\n * \"draggable\" : true,\n * \"resources\" : [\"StreetAddress\", \"PositionOfInterest\"],\n * \"delimitations\" : [\"Point\", \"Circle\"],\n * \"reverseGeocodeOptions\" : {}\n * });\n */\nvar ReverseGeocode = class ReverseGeocode extends Control {\n\n /**\n * See {@link ol.control.ReverseGeocode}\n * @module ReverseGeocode\n * @alias module:~controls/ReverseGeocode\n * @param {*} options - options\n * @example\n * import ReverseGeocode from \"gpf-ext-ol/controls/ReverseGeocode\"\n * ou\n * import { ReverseGeocode } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof ReverseGeocode)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"ReverseGeocode\";\n // initialisation du composant\n this.initialize(options);\n\n // Widget main DOM container\n this.container = this._initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this.container) : this.element = this.container;\n\n return this;\n }\n\n // ################################################################### //\n // ############## public methods (getters, setters) ################## //\n // ################################################################### //\n\n /**\n * Returns true if widget is collapsed (minimized), false otherwise\n *\n * @returns {Boolean} collapsed - true if widget is collapsed\n */\n getCollapsed () {\n return this.collapsed;\n }\n\n /**\n * Collapse or display widget main container\n *\n * @param {Boolean} collapsed - True to collapse widget, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.log(\"[ERROR] ReverseGeocode:setCollapsed - missing collapsed parameter\");\n return;\n }\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n if (collapsed) {\n this._panelCloseButton.click();\n } else {\n this._showReverseGeocodingButton.click();\n }\n this.collapsed = collapsed;\n }\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n // lors de l'ajout à la map, on active la saisie du point ou de la zone de recherche sur la carte,\n // mais seulement si le widget est ouvert\n this._activateMapInteraction(map);\n\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this._panelContainer,\n this._panelHeaderContainer,\n map.getTargetElement()\n );\n }\n // mode \"collapsed\"\n if (!this.collapsed) {\n // this._showReverseGeocodingButton.click();\n this._showReverseGeocodingButton.setAttribute(\"aria-pressed\", true);\n }\n } else {\n var _map = this.getMap();\n // on remet à zéro = on efface les géométries + interactions + valeurs stockées\n // suppression des résultats précédents\n this._clearResults();\n // on efface les points qui ont pu être saisis précédemment\n this._clearInputFeatures();\n // on supprime l'éventuelle précédente interaction\n this._removeMapInteraction(_map);\n // on retire aussi la couche de saisie de la zone de recherche à la fermeture du widget\n if (this._inputFeaturesLayer != null) {\n _map.removeLayer(this._inputFeaturesLayer);\n this._inputFeaturesLayer = null;\n this._inputFeaturesSources = null;\n this._inputFeatures = null;\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Get locations data\n *\n * @returns {Object} data - locations\n */\n getData () {\n return this._reverseGeocodingLocations;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize ReverseGeocode control (called by ReverseGeocode constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n // ############################################################ //\n // ################### Options du composant ################### //\n\n // check input options format (resources and delimitations arrays)\n this._checkInputOptions(options);\n\n // set default options\n this.options = {\n collapsed : true,\n draggable : false,\n resources : [\"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\"],\n delimitations : [\"Point\", \"Circle\", \"Extent\"],\n reverseGeocodeOptions : {},\n layerDescription : {\n title : \"Saisie (recherche inverse)\",\n description : \"Couche de saisie d'une zone de recherche pour la recherche inverse\"\n }\n };\n\n // merge with user options\n Utils.assign(this.options, options);\n\n /** {Boolean} specify if reverseGeocoding control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n /** {Boolean} specify if reverseGeocoding control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n // identifiant du contrôle : utile pour suffixer les identifiants CSS (pour gérer le cas où il y en a plusieurs dans la même page)\n this._uid = this.options.id || SelectorID.generate();\n\n // #################################################################### //\n // ################### informations sur les droits #################### //\n\n // Type de géocodage sélectionné (StreetAddress, PositionOfInterest, ...)\n this._currentGeocodingType = null;\n this._initGeocodingType();\n\n // Type de délimitation à utiliser pour la requête + pour sélection sur la containerDistance\n this._currentGeocodingDelimitation = null;\n this._initGeocodingDelimitation();\n\n // ################################################################## //\n // ################### Elements principaux du DOM ################### //\n\n // containers principaux\n this._showReverseGeocodingButton = null;\n // panel\n this._panelContainer = null;\n this._panelHeaderContainer = null;\n this._panelTitleContainer = null;\n this._returnPictoContainer = null;\n this._panelCloseButton = null;\n // form\n this._formContainer = null;\n // results\n this._resultsContainer = null;\n this._resultsListContainer = null;\n // waiting\n this._waitingContainer = null;\n\n // ###################################################################### //\n // ################### informations des points saisis ################### //\n\n // collection des points saisis sur la carte\n this._inputFeatures = null;\n // source contenant les features ci-dessus\n this._inputFeaturesSource = null;\n // couche vectorielle dans laquelle seront saisis les points (features ci-dessus)\n this._inputFeaturesLayer = null;\n // interaction avec la carte (de type \"Point\", \"Circle\" ou \"Polygon\")\n this._mapInteraction = null;\n\n // #################################################################### //\n // ################### informations pour la requête ################### //\n\n // options pour la requête de géocodage inverse\n this._requestOptions = null;\n // geometrie de recherche du géocodage inverse qui sera envoyée dans la requête\n this._requestGeom = null;\n this._requestPosition = null;\n // pour savoir si un calcul est en cours ou non\n this._waiting = false;\n // timer pour cacher la patience après un certain temps\n this._timer = null;\n\n // #################################################################### //\n // #################### informations des résultats #################### //\n\n this._reverseGeocodingLocations = [];\n this._reverseGeocodingLocationsMarkers = [];\n this._resultsDefaultStyle = new Style({\n image : new Icon({\n src : Markers[\"lightOrange\"],\n anchor : [0.5, 1]\n })\n });\n this._resultsSelectedStyle = new Style({\n image : new Icon({\n src : Markers[\"red\"],\n anchor : [0.5, 1]\n })\n });\n this._resultsHoverInteraction = null;\n this._resultsSelectInteraction = null;\n // container de la popup (affichage des infos au clic sur les markers)\n this._popupContent = null;\n this._popupDiv = this._initPopupDiv();\n this._popupOverlay = null;\n }\n\n /**\n * this method is called by this.initialize()\n * and makes sure input options are correctly formated\n *\n * @param {Object} options - options\n *\n * @private\n */\n _checkInputOptions (options) {\n var i;\n var j;\n\n // on vérifie le tableau des resources\n if (options.resources) {\n var resources = options.resources;\n // on vérifie que la liste des ressources de geocodage est bien un tableau\n if (Array.isArray(resources)) {\n var resourcesList = [\"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\"];\n var wrongResourcesIndexes = [];\n for (i = 0; i < resources.length; i++) {\n if (resourcesList.indexOf(resources[i]) === -1) {\n // si la resource n'est pas référencée, on stocke son index pour la retirer du tableau (après avoir terminé de parcourir le tableau)\n wrongResourcesIndexes.push(i);\n logger.log(\"[ReverseGeocode] options.resources : \" + resources[i] + \" is not a resource for reverse geocode\");\n }\n }\n // on retire les ressoures non référencées qu'on a pu rencontrer\n if (wrongResourcesIndexes.length !== 0) {\n for (j = 0; j < wrongResourcesIndexes.length; j++) {\n resources.splice(wrongResourcesIndexes[j], 1);\n }\n }\n } else {\n logger.log(\"[ReverseGeocode] 'options.resources' parameter should be an array\");\n resources = null;\n }\n }\n\n // et le tableau des délimitations\n if (options.delimitations) {\n var delimitations = options.delimitations;\n // on vérifie que la liste des delimitations est bien un tableau\n if (Array.isArray(delimitations)) {\n var delimitationsList = [\"Circle\", \"Point\", \"Extent\"];\n var wrongDelimitationsIndexes = [];\n for (i = 0; i < delimitations.length; i++) {\n if (delimitationsList.indexOf(delimitations[i]) === -1) {\n // si la delimitations n'est pas référencée, on stocke son index pour la retirer du tableau (après avoir terminé de parcourir le tableau)\n wrongDelimitationsIndexes.push(i);\n logger.log(\"[ReverseGeocode] options.delimitations : \" + delimitations[i] + \" is not a delimitation for reverse geocode\");\n }\n }\n // on retire les ressoures non référencées qu'on a pu rencontrer\n if (wrongDelimitationsIndexes.length !== 0) {\n for (j = 0; j < wrongDelimitationsIndexes.length; j++) {\n delimitations.splice(wrongDelimitationsIndexes[j], 1);\n }\n }\n } else {\n logger.log(\"[ReverseGeocode] 'options.delimitations' parameter should be an array\");\n delimitations = null;\n }\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize geocoding type (=resource)\n * (\"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\")\n *\n * @private\n */\n _initGeocodingType () {\n // Type de géocodage selectionné\n this._currentGeocodingType = \"StreetAddress\"; // par defaut\n\n // par defaut\n var resources = this.options.resources;\n if (!resources || resources.length === 0) {\n this.options.resources = [\"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\"];\n }\n\n // options utilisateur\n if (Array.isArray(resources) && resources.length) {\n // récupération du type par défaut\n if (resources[0] === \"StreetAddress\" || resources[0] === \"PositionOfInterest\" || resources[0] === \"CadastralParcel\") {\n this._currentGeocodingType = resources[0];\n }\n }\n\n // si l'utilisateur a spécifié au moins une ressource dans le service, on surcharge les options du widget\n var serviceOptions = this.options.reverseGeocodeOptions;\n if (serviceOptions.filterOptions && Array.isArray(serviceOptions.filterOptions.type) && serviceOptions.filterOptions.type.length !== 0) {\n this._currentGeocodingType = serviceOptions.filterOptions.type[0];\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize geocoding delimitation\n * (\"Point\", \"Circle\", \"Extent\")\n *\n * @private\n */\n _initGeocodingDelimitation () {\n // Type de délimitation selectionné\n this._currentGeocodingDelimitation = \"Point\"; // par defaut\n\n // par defaut\n var delimitations = this.options.delimitations;\n if (!delimitations || delimitations.length === 0) {\n this.options.delimitations = [\"Point\", \"Circle\", \"Extent\"];\n }\n\n // options utilisateur\n if (Array.isArray(delimitations) && delimitations.length) {\n var d = delimitations[0].toLowerCase();\n if (d === \"point\" || d === \"circle\" || d === \"extent\") {\n this._currentGeocodingDelimitation = delimitations[0];\n }\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize popup div\n * (to display results information on marker click)\n *\n * @return {Object} element - DOM element for popup\n * @private\n */\n _initPopupDiv () {\n var context = this;\n var element = document.createElement(\"div\");\n element.className = \"gp-feature-info-div\";\n var closer = document.createElement(\"button\");\n closer.className = \"gp-styling-button closer\";\n // on closer click : remove popup\n closer.onclick = function () {\n if (context._popupOverlay != null) {\n context._popupOverlay.setPosition(undefined);\n }\n return false;\n };\n this._popupContent = document.createElement(\"div\");\n this._popupContent.className = \"gp-features-content-div\";\n element.appendChild(this._popupContent);\n element.appendChild(closer);\n\n return element;\n }\n\n /**\n * Create control main container (DOM initialize)\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initContainer () {\n // create main container\n var container = this._createMainContainerElement();\n\n // create ReverseGeocode picto\n var picto = this._showReverseGeocodingButton = this._createShowReverseGeocodingPictoElement();\n container.appendChild(picto);\n\n // panel\n var reverseGeocodingPanel = this._panelContainer = this._createReverseGeocodingPanelElement();\n var reverseGeocodingPanelDiv = this._createReverseGeocodingPanelDivElement();\n reverseGeocodingPanel.appendChild(reverseGeocodingPanelDiv);\n\n // header\n var panelHeader = this._panelHeaderContainer = this._createReverseGeocodingPanelHeaderElement();\n\n // return picto (hidden at start)\n var returnPicto = this._returnPictoContainer = this._createReverseGeocodingPanelReturnPictoElement();\n panelHeader.appendChild(returnPicto);\n // title\n var panelTitle = this._panelTitleContainer = this._createReverseGeocodingPanelTitleElement();\n panelHeader.appendChild(panelTitle);\n // close picto\n var closeDiv = this._panelCloseButton = this._createReverseGeocodingPanelCloseElement();\n panelHeader.appendChild(closeDiv);\n reverseGeocodingPanelDiv.appendChild(panelHeader);\n\n // form\n var reverseGeocodingForm = this._formContainer = this._createReverseGeocodingPanelFormElement();\n // choices element\n reverseGeocodingForm.appendChild(this._createReverseGeocodingFormModeChoiceGeocodingTypeElement(this.options.resources));\n reverseGeocodingForm.appendChild(this._createReverseGeocodingFormModeChoiceGeocodingDelimitationElement(this.options.delimitations));\n\n // submit (bouton \"Chercher\")\n var submit = this._createReverseGeocodingSubmitFormElement();\n reverseGeocodingForm.appendChild(submit);\n\n reverseGeocodingPanelDiv.appendChild(reverseGeocodingForm);\n\n // waiting\n var waiting = this._waitingContainer = this._createReverseGeocodingWaitingElement();\n reverseGeocodingPanelDiv.appendChild(waiting);\n\n // results (dans le panel)\n var resultsPanel = this._resultsContainer = this._createReverseGeocodingResultsPanelElement();\n var reverseGeocodingResultsList = this._resultsListContainer = this._createReverseGeocodingResultsListElement();\n resultsPanel.appendChild(reverseGeocodingResultsList);\n reverseGeocodingPanelDiv.appendChild(resultsPanel);\n\n container.appendChild(reverseGeocodingPanel);\n\n logger.log(container);\n\n return container;\n }\n\n // ################################################################### //\n // ################### Map interactions management ################### //\n // ################################################################### //\n\n /**\n * this method is called by this.setMap,\n * or by this.onShowReverseGeocodingClick,\n * and calls method corresponding to current delimitation, if widget is not collapsed.\n *\n * @param {ol.Map} map - control map.\n * @private\n */\n _activateMapInteraction (map) {\n if (!this.collapsed) {\n // 1. Creation de la couche vectorielle sur laquelle on va dessiner\n if (this._inputFeaturesLayer == null) {\n // on crée une collection, qui accueillera les points saisis sur la carte par les interactions,\n // sous formes de features (dans une couche vectorielle).\n // on les stocke de sorte à pouvoir les supprimer facilement\n this._inputFeatures = new Collection();\n\n // on crée la couche qui va accueillir les features\n this._inputFeaturesSource = new VectorSource({\n features : this._inputFeatures\n });\n this._inputFeaturesLayer = new VectorLayer({\n source : this._inputFeaturesSource,\n style : new Style({\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.3)\"\n }),\n stroke : new Stroke({\n color : \"rgba(0, 183, 152, 0.8)\",\n width : 3\n }),\n image : new Icon({\n src : Markers[\"turquoiseBlue\"],\n anchor : [0.5, 1]\n })\n })\n });\n // on rajoute le champ gpResultLayerId permettant d'identifier une couche crée par le composant. (pour layerSwitcher par ex)\n this._inputFeaturesLayer.gpResultLayerId = \"reverseGeocoding\";\n // on ajoute la couche à la carte\n map.addLayer(this._inputFeaturesLayer);\n }\n\n // 2. Création de l'interaction de dessin, selon le type de délimitation sélectionné\n var delimitation = this._currentGeocodingDelimitation.toLowerCase();\n switch (delimitation) {\n case \"point\":\n this._activatePointInteraction(map);\n break;\n case \"circle\":\n this._activateCircleInteraction(map);\n break;\n case \"extent\":\n this._activateBoxInteraction(map);\n break;\n default:\n break;\n }\n\n // 3. Si un layer switcher est présent dans la carte, on lui affecte des informations pour cette couche\n map.getControls().forEach(\n (control) => {\n if (control instanceof LayerSwitcher) {\n // un layer switcher est présent dans la carte\n var layerId = this._inputFeaturesLayer.gpLayerId;\n // on n'ajoute des informations que s'il n'y en a pas déjà (si le titre est le numéro par défaut)\n if (control._layers[layerId].title === layerId) {\n control.addLayer(\n this._inputFeaturesLayer, {\n title : this.options.layerDescription.title,\n description : this.options.layerDescription.description\n }\n );\n control.setRemovable(this._inputFeaturesLayer, false);\n }\n }\n }\n );\n }\n };\n\n /**\n * this method is called by this._activateMapInteraction,\n * and creates map point drawing interaction.\n *\n * @param {ol.Map} map - control map.\n * @private\n */\n _activatePointInteraction (map) {\n // interaction permettant de dessiner un point\n this._mapInteraction = new DrawInteraction({\n style : new Style({\n image : new Circle({\n radius : 0,\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.8)\"\n })\n })\n }),\n type : (\"Point\"),\n source : this._inputFeaturesSource\n });\n\n this._mapInteraction.on(\n \"drawstart\",\n (e) => {\n logger.log(\"on drawstart \", e);\n\n // on efface les points qui ont pu être saisis précédemment (on vide la collection des features de la couche)\n this._inputFeatures.clear();\n\n // on récupère les coordonnées du point qui vient d'être saisi\n this._onDrawStart(e, \"point\");\n }\n );\n\n this._mapInteraction.on(\n \"drawend\",\n (e) => {\n logger.log(\"on drawend\", e);\n\n // on récupère le rayon du cercle qui vient d'être tracé\n if (e.feature && e.feature.getGeometry) {\n this._requestGeom = {\n type : \"Point\",\n coordinates : [\n this._requestPosition.lon,\n this._requestPosition.lat\n ]\n };\n }\n }\n );\n\n map.addInteraction(this._mapInteraction);\n this._setCursor(\"crosshair\", map);\n }\n\n /**\n * this method is called by this._activateMapInteraction,\n * and creates map circle drawing interaction.\n *\n * @param {ol.Map} map - control map.\n * @private\n */\n _activateCircleInteraction (map) {\n // interaction permettant de dessiner un cercle\n this._mapInteraction = new DrawInteraction({\n style : new Style({\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.3)\"\n }),\n stroke : new Stroke({\n color : \"rgba(0, 183, 152, 0.8)\",\n width : 3\n }),\n image : new Circle({\n radius : 4,\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.8)\"\n })\n })\n }),\n type : (\"Circle\"),\n source : this._inputFeaturesSource,\n geometryFunction : function (coordinates, geometry) {\n const center = coordinates[0];\n const last = coordinates[coordinates.length - 1];\n const dx = center[0] - last[0];\n const dy = center[1] - last[1];\n const maxRadius = 500;\n const radius = Math.min(Math.sqrt(dx * dx + dy * dy), maxRadius);\n if (!geometry) {\n geometry = new ol.geom.Circle(center, radius);\n } else {\n geometry.setCenterAndRadius(center, radius);\n }\n return geometry;\n }\n });\n\n this._mapInteraction.on(\n \"drawstart\",\n (e) => {\n logger.log(\"on drawstart \", e);\n // on efface les points qui ont pu être saisis précédemment (on vide la collection des features de la couche)\n this._inputFeatures.clear();\n // on récupère les coordonnées du centre du cercle = premier point du tracé\n this._onDrawStart(e, \"circle\");\n }\n );\n\n this._mapInteraction.on(\n \"drawend\",\n (e) => {\n logger.log(\"on drawend\", e);\n\n // on récupère le rayon du cercle qui vient d'être tracé\n if (e.feature && e.feature.getGeometry) {\n var radius = e.feature.getGeometry().getRadius();\n // et on le stocke comme filtre pour la requête\n this._requestGeom = {};\n this._requestGeom.type = \"Circle\";\n this._requestGeom.radius = radius;\n if (this._requestPosition) {\n this._requestGeom.coordinates = [\n this._requestPosition.lon,\n this._requestPosition.lat\n ];\n }\n logger.log(\"circle radius : \", radius);\n }\n }\n );\n\n map.addInteraction(this._mapInteraction);\n }\n\n /**\n * this method is called by this._activateMapInteraction,\n * and creates map box drawing interaction.\n *\n * @param {ol.Map} map - control map.\n * @private\n */\n _activateBoxInteraction (map) {\n // info : il n'y a pas de geometry de type rectangle, donc on va créer un objet de type \"LineString\",\n // avec seulement 2 points qui formeront les extrémités du rectangle.\n // on aura donc une géométrie LineString avec 5 coordonnées : start, point2, end, point4, start,\n // où les coordonnées de point2 et point4 sont calculées à partir de start et end, et start est répété à la fin pour fermer la géométrie.\n\n // function to draw rectangle with only 2 points\n var geometryFunction = function (coordinates, geometry) {\n if (!geometry) {\n geometry = new Polygon([]);\n }\n var start = coordinates[0];\n var end = coordinates[1];\n const dx = start[0] - end[0];\n const dy = start[1] - end[1];\n const maxLength = 1000;\n const lengthX = Math.max(-maxLength, Math.min(dx, maxLength));\n const lengthY = Math.max(-maxLength, Math.min(dy, maxLength));\n // on crée les 5 coordonnées de la ligne à partir des 2 points saisis.\n geometry.setCoordinates([\n [start, [start[0], start[1] - lengthY], [start[0] - lengthX, start[1] - lengthY], [start[0] - lengthX, start[1]], start]\n ]);\n return geometry;\n };\n\n // interaction permettant de dessiner un rectangle (= LineString de 5 points, à partir de 2 points saisis)\n this._mapInteraction = new DrawInteraction({\n style : new Style({\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.3)\"\n }),\n stroke : new Stroke({\n color : \"rgba(0, 183, 152, 0.8)\",\n width : 3\n }),\n image : new Circle({\n radius : 4,\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.8)\"\n })\n })\n }),\n type : (\"LineString\"),\n source : this._inputFeaturesSource,\n maxPoints : 2,\n geometryFunction : geometryFunction\n });\n\n this._mapInteraction.on(\n \"drawstart\",\n (e) => {\n logger.log(\"on drawstart\", e);\n // on efface les points qui ont pu être saisis précédemment (on vide la collection des features de la couche)\n this._inputFeatures.clear();\n // on récupère les coordonnées du premier point du tracé\n this._onDrawStart(e, \"polygon\");\n }\n );\n\n this._mapInteraction.on(\n \"drawend\",\n (e) => {\n logger.log(\"on drawend\", e);\n // on va récupérer les coordonnées du rectangle qui vient d'être tracé\n this._onBoxDrawEnd(e);\n }\n );\n\n map.addInteraction(this._mapInteraction);\n }\n\n /**\n * remove draw interaction from map (if exists)\n *\n * @param {ol.Map} map - control map.\n * @private\n */\n _removeMapInteraction (map) {\n if (this._mapInteraction != null) {\n map.removeInteraction(this._mapInteraction);\n this._mapInteraction = null;\n }\n this._setCursor();\n }\n\n /**\n * this method is called by event 'drawstart' on map point or circle drawing interaction\n * (cf. this._activatePointInteraction), and it gets map click coordinates.\n * this point is saved as a parameter for reverse Geocode service.\n *\n * @param {Object} e - HTMLElement\n * @param {String} type - geometry type : \"point\" or \"circle\"\n * @private\n */\n _onDrawStart (e, type) {\n var coordinate;\n if (e.feature && e.feature.getGeometry) {\n var geometry = e.feature.getGeometry();\n if (type === \"point\") {\n coordinate = geometry.getCoordinates();\n }\n if (type === \"circle\") {\n coordinate = geometry.getCenter();\n }\n if (type === \"polygon\") {\n coordinate = geometry.getFirstCoordinate();\n }\n }\n if (!coordinate) {\n return;\n }\n\n var crs;\n if (this.options.reverseGeocodeOptions && this.options.reverseGeocodeOptions.srs) {\n crs = this.options.reverseGeocodeOptions.srs;\n } else {\n var map = this.getMap();\n if (!map || !map.getView()) {\n return;\n }\n crs = map.getView().getProjection();\n }\n\n var geoCoordinate = olTransformProj(coordinate, crs, \"EPSG:4326\");\n this._requestPosition = {\n lon : geoCoordinate[0],\n lat : geoCoordinate[1]\n };\n logger.log(\"position coordinates : \", this._requestPosition);\n }\n\n /**\n * this method is called by event 'drawend' on map box drawing interaction\n * (cf. this._activateBoxInteraction), and it gets geometry coordinates,\n * to be saved as a filter parameter for reverse Geocode service.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onBoxDrawEnd (e) {\n // on va récupérer les coordonnées du rectangle qui vient d'être tracé\n if (e.feature && e.feature.getGeometry) {\n // info: coordinates est un tableau [start, point2, end, point4, start]\n // car c'est une linestring donc on a 5 coordonnées pour boucler\n var coordinates = e.feature.getGeometry().getCoordinates()[0];\n var start = coordinates[0];\n var end = coordinates[2];\n\n var crs;\n if (this.options.reverseGeocodeOptions && this.options.reverseGeocodeOptions.srs) {\n crs = this.options.reverseGeocodeOptions.srs;\n } else {\n var map = this.getMap();\n if (!map || !map.getView()) {\n return;\n }\n crs = map.getView().getProjection();\n }\n\n // on reprojette les coordonnées des deux extrémités du rectangle (start et end)\n var startGeoCoordinate = olTransformProj(start, crs, \"EPSG:4326\");\n var endGeoCoordinate = olTransformProj(end, crs, \"EPSG:4326\");\n\n var bbox = {};\n // on récupère les valeurs left, right, top et bottom, pour le filtre bbox du service reverseGeocode\n if (startGeoCoordinate[0] < endGeoCoordinate[0]) {\n bbox.left = startGeoCoordinate[0];\n bbox.right = endGeoCoordinate[0];\n } else {\n bbox.left = endGeoCoordinate[0];\n bbox.right = startGeoCoordinate[0];\n }\n if (startGeoCoordinate[1] < endGeoCoordinate[1]) {\n bbox.bottom = startGeoCoordinate[1];\n bbox.top = endGeoCoordinate[1];\n } else {\n bbox.bottom = endGeoCoordinate[1];\n bbox.top = startGeoCoordinate[1];\n }\n\n this._requestGeom = {\n type : \"Polygon\",\n coordinates : [[\n [bbox.left, bbox.top],\n [bbox.left, bbox.bottom],\n [bbox.right, bbox.bottom],\n [bbox.right, bbox.top],\n [bbox.left, bbox.top]\n ]]\n };\n\n logger.log(\"searchGeometry filter : \", this._requestGeom);\n }\n }\n\n /**\n * this change the cursor of the map when entering a point.\n *\n * @param {String} cursor - cursor style\n * @param {ol.Map} map - control map (optional)\n * @private\n */\n _setCursor (cursor, map) {\n map = map || this.getMap();\n if (!map) {\n return;\n }\n var div = map.getTargetElement();\n\n if (cursor) {\n div.style.cursor = cursor;\n } else {\n div.style.cursor = null;\n }\n }\n\n // ################################################################### //\n // ##################### Reverse Geocoding request ################### //\n // ################################################################### //\n\n /**\n * this methode is called by this.onReverseGeocodingSubmit method,\n * it generates and sends reverse geocode request, then displays results\n *\n * @private\n */\n _reverseGeocodingRequest () {\n var map = this.getMap();\n\n // on construit les options pour la requête\n this._requestOptions = this._getReverseGeocodingRequestOptions();\n\n // retrait de l'interaction sur la map pendant l'attente (et l'affichage des résultats)\n this._removeMapInteraction(map);\n // affichage d'une patience pendant l'attente\n this._displayWaitingContainer();\n\n // envoi de la requête\n Gp.Services.reverseGeocode(this._requestOptions);\n }\n\n /**\n * this methode is called by this._reverseGeocodingRequest method,\n * and returns options object for Gp.Services.reverseGeocode request\n *\n * @returns {Object} requestOptions - reverse geocode options\n * @private\n */\n _getReverseGeocodingRequestOptions () {\n var map = this.getMap();\n\n // on recupere les éventuelles options du service passées par l'utilisateur\n var reverseGeocodeOptions = this.options.reverseGeocodeOptions;\n\n // on crée les options pour le service reverseGeocode\n var context = this;\n if (typeof this.options.ssl !== \"boolean\") {\n this.options.ssl = true;\n }\n // gestion des callback\n var bOnFailure = !!(reverseGeocodeOptions.onFailure !== null && typeof reverseGeocodeOptions.onFailure === \"function\"); // cast variable to boolean\n var bOnSuccess = !!(reverseGeocodeOptions.onSuccess !== null && typeof reverseGeocodeOptions.onSuccess === \"function\");\n\n var requestOptions = {\n apiKey : reverseGeocodeOptions.apiKey || this.options.apiKey,\n ssl : this.options.ssl,\n position : this._requestPosition,\n filterOptions : {\n type : [this._currentGeocodingType]\n },\n srs : \"CRS:84\",\n returnFreeForm : false,\n maximumResponses : reverseGeocodeOptions.maximumResponses || 18,\n timeOut : reverseGeocodeOptions.timeOut || 30000,\n // protocol : reverseGeocodeOptions.protocol || \"XHR\",\n // callback onSuccess\n onSuccess : function (response) {\n if (response.locations) {\n logger.log(\"reverseGeocode results : \", response.locations);\n context._displayGeocodedLocations(response.locations);\n }\n if (bOnSuccess) {\n reverseGeocodeOptions.onSuccess.call(context, response.locations);\n }\n },\n // callback onFailure\n onFailure : function (error) {\n // FIXME mise à jour du controle mais le service ne repond pas en 200 !?\n\n // on cache la patience\n context._hideWaitingContainer();\n\n // suppression d'éventuels résultats précédents\n context._clearResults();\n // on efface les points qui ont été saisis précédemment\n context._clearInputFeatures();\n\n // et on réactive l'interaction sur la map\n context._activateMapInteraction(map);\n logger.log(error.message);\n\n if (bOnFailure) {\n reverseGeocodeOptions.onFailure.call(context, error);\n }\n }\n };\n\n // on récupère d'éventuels filtres\n if (this._requestGeom.type.toLowerCase() === \"circle\") {\n // FIXME : a confirmer en fonction du service !\n if (this._requestGeom.radius > 500) {\n logger.log(\"INFO : initial circle radius (\" + this._requestGeom.radius + \") limited to 1000m.\");\n this._requestGeom.radius = 500;\n }\n requestOptions.searchGeometry = this._requestGeom;\n } else if (this._requestGeom.type.toLowerCase() === \"polygon\") {\n // FIXME : geom bbox max length 1000m !\n requestOptions.searchGeometry = this._requestGeom;\n } else if (this._requestGeom.type.toLowerCase() === \"point\") {\n if (this._currentGeocodingType === \"StreetAddress\") {\n requestOptions.searchGeometry = {\n type : \"Circle\",\n radius : 50,\n coordinates : this._requestGeom.coordinates\n };\n requestOptions.maximumResponses = 1;\n } else {\n requestOptions.searchGeometry = this._requestGeom;\n }\n }\n\n logger.log(\"reverseGeocode request options : \", requestOptions);\n\n return requestOptions;\n }\n\n /**\n * this method is called by this._reverseGeocodingRequest() (in case of reverse geocode success)\n * and display results : in both container list and map\n *\n * @param {Array} locations - array of geocoded locations (reverse geocode results)\n * @private\n */\n _displayGeocodedLocations (locations) {\n // 1. on vide les résultats précédents\n this._clearResults();\n this._reverseGeocodingLocations = locations;\n\n /**\n * event triggered when the compute is finished\n *\n * @event reversegeocode:compute\n * @property {Object} type - event\n * @property {Object} target - instance ReverseGeocode\n * @example\n * ReverseGeocode.on(\"reversegeocode:compute\", function (e) {\n * console.log(e.target.getData());\n * })\n */\n this.dispatchEvent({\n type : \"reversegeocode:compute\"\n });\n\n // 2. cache de la patience et du formulaire\n this._formContainer.className = \"GPelementHidden gpf-hidden\";\n this._hideWaitingContainer();\n // affichage de la div des résultats (et changement du titre)\n this._panelTitleContainer.innerHTML = \"Résultats de la recherche\";\n this._returnPictoContainer.classList.remove(\"GPelementHidden\");\n this._returnPictoContainer.classList.remove(\"gpf-hidden\");\n this._resultsContainer.className = \"GPpanel gpf-panel gpf-panel-reverse\";\n\n // 3. ajout de la liste des résultats dans le container des resultats\n this._fillGeocodedLocationListContainer(locations);\n\n // 4. affichage des résultats sur la carte (+ zoom ?)\n this._displayGeocodedLocationsOnMap(locations);\n }\n\n // ################################################################### //\n // ############################# results list ######################## //\n // ################################################################### //\n\n /**\n * this method is called by this._displayGeocodedLocations()\n * and fills the container with results list\n *\n * @param {Array} locations - array of geocoded locations (reverse geocode results)\n * @private\n */\n _fillGeocodedLocationListContainer (locations) {\n // ajout de la liste des résultats dans le container des resultats\n for (var i = 0; i < locations.length; i++) {\n var location = locations[i];\n logger.log(location);\n // on récupère la description à afficher dans la liste\n var locationDescription = this._fillGeocodedLocationDescription(location);\n // on ajoute chaque résutat à la liste\n if (locationDescription && locationDescription.length !== 0) {\n this._createReverseGeocodingResultElement(locationDescription, i);\n }\n }\n }\n\n /**\n * this method is called by this._fillGeocodedLocationListContainer()\n * and fills location description (String), depending on matchType\n *\n * @param {Object} location - geocoded location (from reverse geocode results)\n * @returns {String} locationDescription - geocoded location description to be displayed\n * @private\n */\n _fillGeocodedLocationDescription (location) {\n if (!location || !location.placeAttributes) {\n return;\n }\n var attr = location.placeAttributes;\n\n var locationDescription = \"\";\n // on sélectionne les infos à afficher selon le type\n switch (location.type) {\n case \"StreetAddress\":\n if (attr.street) {\n locationDescription += attr.housenumber ? attr.housenumber + \" \" : \"\";\n locationDescription += attr.street + \", \";\n }\n locationDescription += attr.postcode + \" \" + attr.city;\n break;\n\n case \"PositionOfInterest\":\n locationDescription += attr.toponym;\n if (attr.postcode && attr.postcode.length === 1) {\n locationDescription += \", \" + attr.postcode[0];\n }\n locationDescription += \" (\" + attr.category.join(\",\") + \")\";\n break;\n\n case \"CadastralParcel\":\n locationDescription += attr.id;\n locationDescription += attr.city ? \" (\" + attr.city + \")\" : \"\";\n break;\n\n default:\n locationDescription += attr.city ? attr.city : \"\";\n break;\n };\n\n return locationDescription;\n }\n\n // ################################################################### //\n // ######################## map results (markers) #################### //\n // ################################################################### //\n\n /**\n * this method is called by this._displayGeocodedLocations()\n * and display locations in map (markers)\n *\n * @param {Object} locations - geocoded locations (reverse geocode result)\n * @private\n */\n _displayGeocodedLocationsOnMap (locations) {\n if (this._reverseGeocodingLocations.length !== 0) {\n var map = this.getMap();\n\n // 1. création de la couche où seront ajoutés les résultats\n this._createResultsLayer();\n // ajout de chaque résultat à la couche (marker)\n for (var i = 0; i < locations.length; i++) {\n this._addResultFeature(locations[i], i);\n }\n\n // 2. Zoom sur l'étendue des résultats (features)\n if (this._resultsFeatures.getLength() > 1) {\n // TODO : appeler fonction commune\n if (this._resultsFeaturesSource && this._resultsFeaturesSource.getExtent) {\n var extent = this._resultsFeaturesSource.getExtent();\n map.getView().fit(extent, map.getSize());\n }\n } else {\n // dans le cas où on n'a qu'un seul résultat, l'étendue n'est pas définie, on zoome donc sur le résulat\n var feature = this._resultsFeatures.item(0);\n var coords = feature.getGeometry().getCoordinates();\n map.getView().setCenter(coords);\n map.getView().setZoom(17);\n }\n\n // 3. ajout des interactions (survol, click)\n // au survol : modification des styles (marker et list)\n this._resultsHoverInteraction = new SelectInteraction({\n condition : eventPointerMove,\n layers : [this._resultsFeaturesLayer]\n });\n this._resultsHoverInteraction.on(\n \"select\",\n (e) => this._onResultsFeatureMouseOver(e)\n );\n map.addInteraction(this._resultsHoverInteraction);\n\n // au click : affichage popup\n this._resultsSelectInteraction = new SelectInteraction({\n layers : [this._resultsFeaturesLayer]\n });\n this._resultsSelectInteraction.on(\n \"select\",\n (e) => this._onResultsFeatureSelect(e)\n );\n map.addInteraction(this._resultsSelectInteraction);\n\n // 4. Si un layer switcher est présent dans la carte, on lui affecte des informations pour cette couche\n var geocodeType = \"\";\n switch (this._currentGeocodingType) {\n case \"StreetAddress\":\n geocodeType = \"adresses\";\n break;\n case \"PositionOfInterest\":\n geocodeType = \"toponymes\";\n break;\n case \"CadastralParcel\":\n geocodeType = \"parcelles cadastrales\";\n break;\n default:\n break;\n }\n map.getControls().forEach(\n (control) => {\n if (control instanceof LayerSwitcher) {\n // un layer switcher est présent dans la carte\n var layerId = this._resultsFeaturesLayer.gpLayerId;\n // on n'ajoute des informations que s'il n'y en a pas déjà (si le titre est le numéro par défaut)\n if (control._layers[layerId].title === layerId) {\n control.addLayer(\n this._resultsFeaturesLayer, {\n title : \"Résultats de la recherche inverse\",\n description : \"Résultats de la recherche inverse sur les \" + geocodeType\n }\n );\n control.setRemovable(this._resultsFeaturesLayer, false);\n }\n }\n }\n );\n }\n }\n\n /**\n * this method is called by this._displayGeocodedLocations()\n * and creates result layer (where geocoded locations will be displayed)\n *\n * @private\n */\n _createResultsLayer () {\n var map = this.getMap();\n\n this._resultsFeatures = new Collection();\n\n // on crée la couche qui va accueillir les features\n this._resultsFeaturesSource = new VectorSource({\n features : this._resultsFeatures\n });\n this._resultsFeaturesLayer = new VectorLayer({\n source : this._resultsFeaturesSource\n });\n // on rajoute le champ gpResultLayerId permettant d'identifier une couche crée par le composant. (pour layerSwitcher par ex)\n this._resultsFeaturesLayer.gpResultLayerId = \"reverseGeocodingResults\";\n // on ajoute la couche à la carte\n map.addLayer(this._resultsFeaturesLayer);\n }\n\n /**\n * this method is called by this._displayGeocodedLocations()\n * and displays locations in map (markers) : add new feature to results layer\n *\n * @param {Object} location - geocoded location (reverse geocode result)\n * @param {Number} i - geocoded location index in response list\n * @private\n */\n _addResultFeature (location, i) {\n var map = this.getMap();\n // récupération de la position\n var position = [location.position.lon, location.position.lat];\n if (position.length === 0) {\n return;\n }\n var view = map.getView();\n var mapProj = view.getProjection().getCode();\n if (mapProj !== \"EPSG:4326\") {\n // on retransforme les coordonnées de la position dans la projection de la carte\n position = olTransformProj(position, \"EPSG:4326\", mapProj);\n }\n\n // on ajoute le résultat à la collection de points existantes (composant la couche vectorielle this._inputFeaturesLayer)\n var feature = new Feature({\n geometry : new Point(position)\n });\n feature.setStyle(this._resultsDefaultStyle);\n feature.setId(i);\n feature.setProperties({\n location : location,\n popupContent : this._fillPopupContent(location)\n });\n this._resultsFeatures.push(feature);\n }\n\n /**\n * this method is called by this._addResultFeature()\n * and fills popup content (to be displayed on marker click) for a given geocoded location\n *\n * @param {Object} location - geocoded location (reverse geocode result)\n * @returns {String} popupContent - text to be displayed in popup\n * @private\n */\n _fillPopupContent (location) {\n var popupContent = \"
    \";\n\n var attributes = location.placeAttributes;\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr)) {\n if (attr !== \"trueGeometry\" && attr !== \"extraFields\" && attr !== \"houseNumberInfos\" && attr !== \"_count\") {\n popupContent += \"
  • \";\n popupContent += \"\" + attr.toUpperCase() + \" : \";\n popupContent += attributes[attr];\n popupContent += \"
  • \";\n }\n }\n }\n popupContent += \"
\";\n\n return popupContent;\n }\n\n /**\n * this method is called on 'pointerMove' on this._resultsFeaturesLayer (ol.interaction.Select)\n * (cf. this._displayGeocodedLocationsOnMap() )\n * and highlights result in list container\n *\n * @param {Object} e - on select event\n * @private\n */\n _onResultsFeatureMouseOver (e) {\n var f;\n\n // si on survole un résultat, on change son style (marker)\n if (e.selected.length !== 0) {\n // on change le style du marker (red)\n f = e.selected[0];\n f.setStyle(this._resultsSelectedStyle);\n\n // on surligne le résultat correspondant dans la liste des résultats\n if (f.getId() != null) {\n var selectedResultDiv = document.getElementById(\"GPreverseGeocodedLocation_\" + f.getId() + \"-\" + this._uid);\n if (selectedResultDiv && selectedResultDiv.classList) {\n selectedResultDiv.classList.add(\"GPlocationHighlight\");\n }\n }\n document.getElementById(\"GPreverseGeocodedLocation_\" + f.getId() + \"-\" + this._uid);\n }\n\n // si on déselectionne un résultat (mouseout), on rétablit un style normal pour le marker\n if (e.deselected.length !== 0) {\n // on change le style du marker (lightOrange)\n f = e.deselected[0];\n f.setStyle(this._resultsDefaultStyle);\n\n // on rétablit un style normal pour le résultat correspondant dans la liste des résultats\n var deSelectedResultDiv = document.getElementById(\"GPreverseGeocodedLocation_\" + f.getId() + \"-\" + this._uid);\n if (deSelectedResultDiv && deSelectedResultDiv.classList) {\n deSelectedResultDiv.classList.remove(\"GPlocationHighlight\");\n }\n }\n }\n\n /**\n * this method is called on 'click' on this._resultsFeaturesLayer (ol.interaction.Select)\n * (cf. this._displayGeocodedLocationsOnMap() )\n * and sets a popup with feature information\n *\n * @param {Object} e - on select event\n * @private\n */\n _onResultsFeatureSelect (e) {\n var map = this.getMap();\n if (e.selected.length !== 0) {\n // si on a sélectionné un marker, on lui ajoute une popup\n var f = e.selected[0];\n this._popupContent.innerHTML = f.getProperties().popupContent;\n\n if (!this._popupOverlay) {\n // ajout de la popup a la carte comme un overlay\n this._popupOverlay = new Overlay({\n element : this._popupDiv,\n positioning : \"bottom-center\",\n position : e.mapBrowserEvent.coordinate\n });\n map.addOverlay(this._popupOverlay);\n } else {\n // si l'overlay est déjà créé, on modifie juste sa position\n this._popupOverlay.setPosition(e.mapBrowserEvent.coordinate);\n }\n\n /**\n * event triggered when an element of the results is clicked\n *\n * @event reversegeocode:onclickresult\n * @property {Object} type - event\n * @property {Object} location - location\n * @property {Object} target - instance ReverseGeocode\n * @example\n * Reverse.on(\"reverse:onclickresult\", function (e) {\n * console.log(e.location);\n * })\n */\n this.dispatchEvent({\n type : \"reversegeocode:onclickresult\",\n location : f.getProperties().location\n });\n } else {\n // si aucun troncon n'est sélectionné (click à côté du tracé),\n // on fait disparaitre la popup si elle existe\n if (this._popupOverlay != null) {\n this._popupOverlay.setPosition(undefined);\n }\n }\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on 'GPshowReverseGeocodingPicto' tag label\n * (cf. ReverseGeocodeDOM._createShowReverseGeocodingPictoElement), and it cleans the component\n * when it's closed.\n *\n * @param { event } e évènement associé au clic\n * @private\n */\n onShowReverseGeocodingClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n if (!map) {\n return;\n }\n // on supprime toutes les interactions\n Interactions.unset(map);\n var opened = this._showReverseGeocodingButton.ariaPressed;\n this.collapsed = !(opened === \"true\");\n // info : on génère nous même l'evenement OpenLayers de changement de propriété\n // (utiliser ol.control.ReverseGeocode.on(\"change:collapsed\", function ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n\n if (!this._waiting && !this._reverseGeocodingLocations.length) {\n // Cas 1 : input panel (ni en attente, ni sur le panel des résultats)\n if (this.collapsed) {\n // on remet à zéro = on efface les géométries + interactions + valeurs stockées\n // suppression des résultats précédents\n this._clearResults();\n // on efface les points qui ont pu être saisis précédemment\n this._clearInputFeatures();\n // on supprime l'éventuelle précédente interaction\n this._removeMapInteraction(map);\n // on retire aussi la couche de saisie de la zone de recherche à la fermeture du widget\n if (this._inputFeaturesLayer != null) {\n map.removeLayer(this._inputFeaturesLayer);\n this._inputFeaturesLayer = null;\n this._inputFeaturesSources = null;\n this._inputFeatures = null;\n }\n } else {\n // on réactive l'interaction\n this._activateMapInteraction(map);\n }\n }\n // info : si on est en attente ou sur le panel des résultats : on ne fait rien.\n }\n\n /**\n * this method is called by event 'change' on 'GPreverseGeocodingCode' tag select\n * (cf. ReverseGeocodeDOM._createReverseGeocodingFormModeChoiceGeocodingTypeElement).\n * this value is saved as a parameter for reverseGeocode service.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onReverseGeocodingTypeChange (e) {\n var idx = e.target.selectedIndex;\n var value = e.target.options[idx].value;\n\n if (!value) {\n return;\n }\n logger.log(value);\n this._currentGeocodingType = value;\n }\n\n /**\n * this method is called by event 'change' on 'GPreverseGeocodingCode' tag select\n * (cf. ReverseGeocodeDOM._createReverseGeocodingFormModeChoiceGeocodingDelimitationElement).\n * this value is saved as a parameter for reverseGeocode service.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onReverseGeocodingDelimitationChange (e) {\n var idx = e.target.selectedIndex;\n var value = e.target.options[idx].value;\n\n if (!value) {\n return;\n }\n\n logger.log(value);\n this._currentGeocodingDelimitation = value;\n\n // on met à jour l'interaction de la map en fonction de la nouvelle délimitation\n var map = this.getMap();\n // on supprime l'interaction précédente, ainsi que les géométries et valeurs stockées (filtres, position)\n this._clearInputFeatures();\n // on supprime l'éventuelle précédente interaction\n this._removeMapInteraction(map);\n // on crée une nouvelle interaction\n this._activateMapInteraction(map);\n }\n\n /**\n * this method is called by event 'click' on 'GPreverseGeocodingReturnPicto' div\n * (cf. ReverseGeocodeDOM._createReverseGeocodingPanelReturnPictoElement),\n * and clear geocoded location (from both list container and map)\n *\n * @private\n */\n onGPreverseGeocodingReturnPictoClick () {\n // suppression des résultats précédents\n this._clearResults();\n // on efface les points qui ont pu être saisis précédemment\n this._clearInputFeatures();\n // et on réactive l'interaction sur la map\n this._activateMapInteraction(this.getMap());\n }\n\n /**\n * this methode is called by event 'submit' on reverseGeocoding form ('GPreverseGeocodingForm')\n * (cf. ReverseGeocodeDOM._createReverseGeocodingPanelFormElement),\n * it checks reverse geocode mandatory parameters,\n * then call this._reverseGeocodingRequest() to generate and send request\n *\n * @private\n */\n onReverseGeocodingSubmit () {\n // le paramètre position est obligatoire\n if (!this._requestPosition) {\n logger.log(\"missing position\");\n return;\n }\n\n this._reverseGeocodingRequest();\n }\n\n /**\n * this method is called by event 'click' on 'GPreverseGeocodedLocation_' div\n * (cf. ReverseGeocodeDOM._createReverseGeocodingResultElement),\n * and zoom to location ?\n * TODO\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onReverseGeocodingResultClick (e) {\n // récupération de l'id du résultat survolé\n var tagid = e.target.id; // ex GPreverseGeocodedLocation_21\n var idx = tagid.substring(tagid.indexOf(\"_\") + 1); // ex. 21\n\n var f = this._resultsFeaturesSource.getFeatureById(parseInt(idx, 10));\n\n this.dispatchEvent({\n type : \"reversegeocode:onclickresult\",\n location : f.getProperties().location\n });\n }\n\n /**\n * this method is called by event 'mouseover' on 'GPreverseGeocodedLocation_' div\n * (cf. ReverseGeocodeDOM._createReverseGeocodingResultElement),\n * and changes style of matching marker on map (selected)\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onReverseGeocodingResultMouseOver (e) {\n // récupération de l'id du résultat survolé\n var tagid = e.target.id; // ex GPreverseGeocodedLocation_21\n var idx = tagid.substring(tagid.indexOf(\"_\") + 1); // ex. 21\n\n // on passe le texte en gras\n if (e.target.classList) {\n e.target.classList.add(\"GPlocationHighlight\");\n }\n\n if (!this._resultsFeaturesSource) {\n return;\n }\n\n // on récupère l'entité correspondante au résultat survolé\n var f = this._resultsFeaturesSource.getFeatureById(parseInt(idx, 10));\n // et on lui affecte un nouveau style\n f.setStyle(this._resultsSelectedStyle);\n }\n\n /**\n * this method is called by event 'mouseout' on 'GPreverseGeocodedLocation_' div\n * (cf. ReverseGeocodeDOM._createReverseGeocodingResultElement),\n * and changes style of matching marker on map (default)\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onReverseGeocodingResultMouseOut (e) {\n // récupération de l'id du résultat survolé\n var tagid = e.target.id; // ex GProuteResultsDetailsInstruction_125\n var idx = tagid.substring(tagid.indexOf(\"_\") + 1); // ex. 125\n\n // on repasse le texte en style normal\n if (e.target.classList) {\n e.target.classList.remove(\"GPlocationHighlight\");\n }\n\n if (!this._resultsFeaturesSource) {\n return;\n }\n // on récupère l'entité correspondante au résultat qui était survolé\n var f = this._resultsFeaturesSource.getFeatureById(parseInt(idx, 10));\n // et on lui réaffecte un style normal\n f.setStyle(this._resultsDefaultStyle);\n }\n\n // ################################################################### //\n // ################################ clean ############################ //\n // ################################################################### //\n\n /**\n * this method clears previous location results\n *\n * @private\n */\n _clearResults () {\n var map = this.getMap();\n\n this._reverseGeocodingLocations = [];\n // on vide le container avec la liste des résultats\n if (this._resultsListContainer) {\n while (this._resultsListContainer.firstChild) {\n this._resultsListContainer.removeChild(this._resultsListContainer.firstChild);\n }\n }\n // on retire la couche des résultats\n if (this._resultsFeaturesLayer) {\n map.removeLayer(this._resultsFeaturesLayer);\n this._resultsFeaturesLayer = null;\n }\n // on retire l'overlay de la popup de la carte\n if (this._popupOverlay != null) {\n map.removeOverlay(this._popupOverlay);\n this._popupOverlay = null;\n }\n // on retire les interactions sur les markers (select et mouseover)\n if (this._resultsSelectInteraction != null) {\n map.removeInteraction(this._resultsSelectInteraction);\n this._resultsSelectInteraction = null;\n }\n if (this._resultsHoverInteraction != null) {\n map.removeInteraction(this._resultsHoverInteraction);\n this._resultsHoverInteraction = null;\n }\n }\n\n /**\n * this method clears previous input features (features, layer, position and filters)\n *\n * @private\n */\n _clearInputFeatures () {\n // on efface les points qui ont pu être saisis précédemment (on vide la collection des features de la couche)\n if (this._inputFeatures) {\n this._inputFeatures.clear();\n }\n\n // on supprime les valeurs stockées\n this._requestGeom = null;\n this._requestPosition = null;\n }\n\n /**\n * this method displays waiting container and sets a timeout\n *\n * @private\n */\n _displayWaitingContainer () {\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerVisible gpf-waiting gpf-waiting--visible\";\n this._waiting = true;\n\n // mise en place d'un timeout pour réinitialiser le panel (cacher la patience)\n // si on est toujours en attente (si la requête est bloquée par exemple)\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n var context = this;\n this._timer = setTimeout(function () {\n if (context._waiting === true) {\n context._hideWaitingContainer();\n } else {\n if (context._timer) {\n clearTimeout(context._timer);\n }\n }\n }, 16000);\n }\n\n /**\n * this method hides waiting container and clears timeout\n *\n * @private\n */\n _hideWaitingContainer () {\n if (this._waiting) {\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n this._waiting = false;\n clearTimeout(this._timer);\n this._timer = null;\n }\n }\n\n};\n\n// on récupère les méthodes de la classe commune ReverseGeocodeDOM\nObject.assign(ReverseGeocode.prototype, ReverseGeocodeDOM);\nObject.assign(ReverseGeocode.prototype, Widget);\n\nexport default ReverseGeocode;\n\n// Expose ReverseGeocode as ol.control.ReverseGeocode (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.ReverseGeocode = ReverseGeocode;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.format.WMSCapabilities;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.format.WMTSCapabilities;","/**\n* managing events\n*\n* See {@link http://krasimirtsonev.com/blog/article/javascript-managing-events-dispatch-listen}\n* See {@link https://github.com/krasimir/EventBus}\n*\n* @property {Event} \"editor:layer:onclickvisibility\" - event ...\n* @property {Event} \"editor:layer:onclickclone\" - event ...\n* @property {Event} \"editor:layer:onclickremove\" - event ...\n* @property {Event} \"editor:style:oneditjson\" - event ...\n* @property {Event} \"editor:style:scale:onchangemin\" - event ...\n* @property {Event} \"editor:style:scale:onchangemax\" - event ...\n* @property {Event} \"editor:legend:onclickedition\" - event ...\n* @property {Event} \"editor:legend:onchangevalue\" - event ...\n* @property {Event} \"editor:filter:oneditjson\" - event ...\n* @property {Event} \"editor:themes:onclickimage\" - event ...\n* @property {Event} \"editor:themes:onclicktitle\" - event ...\n* @property {Event} \"editor:search:onsubmit\" - event ...\n* @property {Event} \"editor:search:onautocomplete\" - event ...\n* @property {Event} \"editor:group:oncollapse\" - event ...\n* @property {Event} \"editor:onloaded\" - event ...\n*\n* @mixin\n*\n* @example\n* // dispatch event\n* EventBus.dispatch(EventEditor.layer.visibility, e);\n* // listener\n* EventBus.addEventListener(EventEditor.layer.visibility, function (e) {...}, this);\n*/\nvar EventEditor = {\n /** evenement sur la fin de chargement de l'editeur */\n onloaded : \"editor:onloaded\",\n layer : {\n /** evenement sur la visibilité : clic sur le bouton 'oeil' */\n onclickvisibility : \"editor:layer:onclickvisibility\",\n /** evenement sur la duplication : clic sur le bouton\n (not yet implemented !) */\n onclickclone : \"editor:layer:onclickclone\",\n /** evenement sur la suppression : clic sur le bouton\n (not yet implemented !) */\n onclickremove : \"editor:layer:onclickremove\"\n },\n legend : {\n /** evenement sur l'affichage du mode edition */\n onclickedition : \"editor:legend:onclickedition\",\n /** evenement sur la modification d'une valeur */\n onchangevalue : \"editor:legend:onchangevalue\"\n },\n group : {\n /** evenement pour deplier/plier le groupe\n (not yet implemented !) */\n oncollapse : \"editor:group:oncollapse\"\n },\n style : {\n /** evenement sur l'édition du style\n (not yet implemented !) */\n oneditjson : \"editor:style:oneditjson\",\n /** evenement sur la modification de l'echelle d'affichage */\n scale : {\n onchangemin : \"editor:style:scale:onchangemin\",\n onchangemax : \"editor:style:scale:onchangemax\"\n }\n },\n filter : {\n /** evenement sur l'édition du filtre\n (not yet implemented !) */\n oneditjson : \"editor:filter:oneditjson\"\n },\n themes : {\n /** evenement sur le clic de l'image */\n onclickimage : \"editor:themes:onclickimage\",\n /** evenement sur le clic du titre */\n onclicktitle : \"editor:themes:onclicktitle\"\n },\n search : {\n /** evenement sur la recherche */\n onsubmit : \"editor:search:onsubmit\",\n onautocomplete : \"editor:search:onautocomplete\"\n }\n};\n\nexport default EventEditor;\n","import EventBus from \"eventbusjs\";\nimport EventEditor from \"./Event\";\nimport Utils from \"../../Utils/Helper\";\nimport Logger from \"../../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"editor-style\");\n\n/**\n * @classdesc\n *\n * MapBox styles management\n *\n * @constructor\n * @alias ol.style.editor.Style\n * @param {Object} options - options for function call.\n * @example\n * var style = new Style ({\n * target : ...,\n * position : 1, // identifiant de position (unique !)\n * tools : {\n * edition : false,\n * scale : true\n * },\n * title : \"Styles (JSON)\",\n * obj : {\n * paint : {},\n * layout : {}\n * }\n * });\n * style.add();\n * style.display(true);\n * style.getContainer();\n */\nclass Style {\n\n constructor (options) {\n logger.trace(\"[constructor] Style\", options);\n\n // options\n this.options = options || {\n // default...\n target : null,\n position : 0,\n tools : null,\n title : null,\n obj : null\n };\n\n if (!(this instanceof Style)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this._initialize();\n\n this._initContainer();\n }\n\n /**\n * Initialize component\n * (called by constructor)\n *\n * @private\n */\n _initialize () {\n // unique editor id (optional!)\n this.id = this.options.id || null;\n\n if (!this.options.target) {\n // cf. add()\n }\n\n if (!this.options.position) {\n this.options.position = 0;\n }\n\n var _toolsDefault = {\n scale : true,\n edition : false\n };\n\n if (!this.options.tools) {\n this.options.tools = _toolsDefault;\n }\n\n Utils.mergeParams(this.options.tools, _toolsDefault, false);\n\n if (!this.options.obj) {\n // choix d'avoir un objet vide pour une edition futur...\n this.options.obj = {\n paint : {},\n layout : {}\n };\n }\n\n if (!this.options.title) {\n this.options.title = \"JSON Styles :\";\n }\n\n this.container = null;\n\n // DOM : className or id\n this.name = {\n target : \"GPEditorMapBoxStyleTarget\",\n container : \"GPEditorMapBoxStyleContainer\",\n containerjson : \"GPEditorMapBoxStyleJsonContainer\",\n jsonlabel : \"GPEditorMapBoxStyleJsonTitle\",\n jsondisplay : \"GPEditorMapBoxStyleJsonDisplay\",\n containertoolsscale : \"GPEditorMapBoxStyleToolsScaleContainer\",\n scaletitle : \"GPEditorMapBoxStyleScaleTitle\",\n containertoolsminscale : \"GPEditorMapBoxStyleToolsScaleMinContainer\",\n scalelabelmin : \"GPEditorMapBoxStyleScaleLabelMin\",\n scaleinputmin : \"GPEditorMapBoxStyleScaleInputMin\",\n containertoolsmaxscale : \"GPEditorMapBoxStyleToolsScaleMaxContainer\",\n scalelabelmax : \"GPEditorMapBoxStyleScaleLabelMax\",\n scaleinputmax : \"GPEditorMapBoxStyleScaleInputMax\",\n containertoolsedit : \"GPEditorMapBoxStyleToolsEditionContainer\"\n };\n }\n\n /**\n * Graphical rendering of the component\n * ie. this.container\n * (called by constructor)\n *\n * @private\n * @example\n *
\n *
\n * \n *
...
\n *
\n *
\n *
\n *
\n */\n _initContainer () {\n // contexte\n var self = this;\n\n var _found = false;\n var _obj = JSON.parse(JSON.stringify(this.options.obj)); // on manipule une copie !\n var _style = {};\n\n // styles into tag 'paint' ?\n if (_obj.paint) {\n _found = true;\n _style.paint = _obj.paint;\n if (Object.keys(_obj.paint).length === 0) {\n logger.info(\"tag 'paint' is empty !\");\n }\n }\n\n // if not, search into tag 'layout' !\n if (_obj.layout) {\n _found = true;\n _style.layout = _obj.layout;\n // FIXME delete visibility from display ?\n if (_obj.layout.visibility) {\n delete _style.visibility;\n }\n if (Object.keys(_obj.layout).length === 0) {\n logger.info(\"tag 'layout' is empty !\");\n }\n }\n\n var div = document.createElement(\"div\");\n div.className = this.name.container;\n\n var json = null;\n if (_found) {\n var strJson = JSON.stringify(_style, null, 4);\n json = this._syntaxHighlight(strJson);\n }\n\n var divJson = document.createElement(\"div\");\n divJson.className = this.name.containerjson;\n\n var label = document.createElement(\"label\");\n label.className = this.name.jsonlabel;\n label.innerHTML = this.options.title;\n divJson.appendChild(label);\n\n var pre = document.createElement(\"pre\");\n pre.className = this.name.jsondisplay;\n pre.innerHTML = json;\n if (pre.addEventListener) {\n pre.addEventListener(\"click\", function (e) {\n if (self.options.tools.edition) {\n self.onEditJsonStyleMapBox(e);\n }\n });\n } else if (pre.attachEvent) {\n pre.attachEvent(\"onclick\", function (e) {\n if (self.options.tools.edition) {\n self.onEditJsonStyleMapBox(e);\n }\n });\n }\n divJson.appendChild(pre);\n div.appendChild(divJson);\n\n // scale\n if (this.options.tools.scale) {\n div.appendChild(this._createElementToolsScale({\n min : (_style.layout) ? _style.layout.minzoom : 0,\n max : (_style.layout) ? _style.layout.maxzoom : 21\n }));\n }\n\n // TODO menu d'edition\n if (this.options.tools.edition) {\n div.appendChild(this._createElementToolsEdition());\n }\n\n // main container\n this.container = div;\n }\n\n /**\n * Graphical rendering of the scale tools\n *\n * @param {Object} scale - {min,max} or 0|21\n * @returns {DOMElement} DOM element\n *\n * @private\n * @example\n *
\n */\n _createElementToolsScale (scale) {\n logger.trace(\"_createElementToolsScale\");\n\n var self = this;\n\n var obj = this.options.obj;\n\n var divToolsScale = document.createElement(\"div\");\n divToolsScale.className = this.name.containertoolsscale;\n\n // FIXME Titre ?\n // var label = document.createElement(\"label\");\n // label.className = this.name.scaletitle;\n // label.innerHTML = \"Scale :\";\n // divToolsScale.appendChild(label);\n var divMin = document.createElement(\"div\");\n divMin.className = this.name.containertoolsminscale;\n\n var labelMin = document.createElement(\"label\");\n labelMin.className = this.name.scalelabelmin;\n labelMin.innerHTML = \"min :\";\n divMin.appendChild(labelMin);\n\n var inputMin = document.createElement(\"input\");\n inputMin.className = this.name.scaleinputmin;\n inputMin.type = \"range\";\n inputMin.value = scale.min || 0;\n inputMin.title = scale.min || 0;\n inputMin.disabled = false;\n inputMin.min = 0;\n inputMin.max = 21;\n inputMin.data = obj; // on lie le DOM et la couche, utile lors d'evenement !\n if (inputMin.addEventListener) {\n inputMin.addEventListener(\"change\", function (e) {\n self.onChangeStyleScaleMinMapBox(e);\n });\n } else if (inputMin.appendChild) {\n inputMin.appendChild(\"onchange\", function (e) {\n self.onChangeStyleScaleMinMapBox(e);\n });\n }\n divMin.appendChild(inputMin);\n\n divToolsScale.appendChild(divMin);\n\n var divMax = document.createElement(\"div\");\n divMax.className = this.name.containertoolsmaxscale;\n\n var labelMax = document.createElement(\"label\");\n labelMax.className = this.name.scalelabelmax;\n labelMax.innerHTML = \"max :\";\n divMax.appendChild(labelMax);\n\n var inputMax = document.createElement(\"input\");\n inputMax.className = this.name.scaleinputmin;\n inputMax.type = \"range\";\n inputMax.value = scale.max || 21;\n inputMax.title = scale.max || 21;\n inputMax.disabled = false;\n inputMax.min = 0;\n inputMax.max = 21;\n inputMax.data = obj; // on lie le DOM et la couche, utile lors d'evenement !\n if (inputMax.addEventListener) {\n inputMax.addEventListener(\"change\", function (e) {\n self.onChangeStyleScaleMaxMapBox(e);\n });\n } else if (inputMax.appendChild) {\n inputMax.appendChild(\"onchange\", function (e) {\n self.onChangeStyleScaleMaxMapBox(e);\n });\n }\n divMax.appendChild(inputMax);\n\n divToolsScale.appendChild(divMax);\n\n return divToolsScale;\n }\n\n /**\n * Graphical rendering of the edition tools\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n * @example\n *
\n */\n _createElementToolsEdition () {\n logger.warn(\"_createElementToolsEdition, it's not yet implemented !\");\n\n var divToolsEdit = document.createElement(\"div\");\n divToolsEdit.className = this.name.containertoolsedit;\n\n return divToolsEdit;\n }\n\n // ################################################################### //\n // ##################### private methods ############################# //\n // ################################################################### //\n /**\n * Transform a JSON into a DOM with a syntax in color\n *\n * @private\n * @param {Object} json - json.\n * @returns {DOMElement} dom element\n */\n _syntaxHighlight (json) {\n json = json.replace(/&/g, \"&\").replace(//g, \">\");\n return json.replace(/(\"(\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(true|false|null)\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/g, function (match) {\n var cls = \"gp-json-number\";\n if (/^\"/.test(match)) {\n if (/:$/.test(match)) {\n cls = \"gp-json-key\";\n } else {\n cls = \"gp-json-string\";\n }\n } else if (/true|false/.test(match)) {\n cls = \"gp-json-boolean\";\n } else if (/null/.test(match)) {\n cls = \"gp-json-null\";\n }\n return \"\" + match + \"\";\n });\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n /**\n * Add element into target DOM\n * @returns {Object} - Legend instance\n */\n add () {\n if (!this.options.target) {\n if (!document.getElementById(this.name.target)) {\n var div = document.createElement(\"div\");\n div.id = this.name.target;\n var node = document.documentElement ||\n document.getElementsByTagName(\"body\")[0] ||\n document.getElementsByTagName(\"head\")[0];\n node.appendChild(div);\n }\n this.options.target = document.getElementById(this.name.target);\n }\n if (this.container) {\n this.options.target.appendChild(this.container);\n }\n return this;\n }\n\n /**\n * Set display container or get\n *\n * @param {Boolean} display - show/hidden container or get status\n * @returns {Boolean} - true/false\n */\n display (display) {\n logger.trace(\"display()\", display);\n if (typeof display !== \"undefined\") {\n this.container.style.display = (display) ? \"flex\" : \"none\";\n }\n return (this.container.style.display === \"flex\");\n }\n\n /**\n * Get container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Style#editor:style:oneditjson\n */\n onEditJsonStyleMapBox (e) {\n logger.trace(\"onEditJsonStyleMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.style.oneditjson, e);\n }\n\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Style#editor:style:scale:onchangemin\n */\n onChangeStyleScaleMinMapBox (e) {\n logger.trace(\"onChangeStyleScaleMinMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.style.scale.onchangemin, e);\n }\n\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Style#editor:style:scale:onchangemax\n */\n onChangeStyleScaleMaxMapBox (e) {\n logger.trace(\"onChangeStyleScaleMaxMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.style.scale.onchangemax, e);\n }\n\n};\n\nexport default Style;\n\n// Expose Editor as ol.editor.View (for a build bundle)\nif (window.ol && window.ol.style) {\n if (!window.ol.style.editor) {\n window.ol.style.editor = {};\n } \n window.ol.style.editor.Style = Style;\n}\n\n","import EventBus from \"eventbusjs\";\nimport EventEditor from \"./Event\";\nimport Utils from \"../../Utils/Helper\";\nimport ID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"editor-themes\");\n\n/**\n * @classdesc\n *\n * Mapbox Themes management\n *\n * @constructor\n * @alias ol.style.editor.Theme\n * @param {Object} options - options for function call.\n * @example\n * var theme = new Themes ({\n * \"target\": \"\",\n * \"tools\": {\n * \"thumbnails\": true,\n * \"button\" : {\n * \"visible\" : true,\n * \"type\" : \"radio\" (par defaut) | \"checkbox\"\n * }\n * },\n * \"obj\": {\n * \"themesSummary\": \"\", // Titre du composant (non graphique !)\n * \"themes\": [{\n * \"thumbnail\": \"data/images/layer0.png\",\n * \"name\": \"standard0\",\n * \"url\": \"data/styles/layer0.json\",\n * \"description\": \"\",\n * \"selected\" : true\n * },{\n * \"thumbnail\": \"data/images/layer1.png\",\n * \"name\": \"standard1\",\n * \"url\": \"data/styles/layer1.json\",\n * \"description\": \"\"\n * }]\n * }\n * });\n * theme.add();\n * theme.display(true);\n * theme.getContainer();\n */\nclass Themes {\n\n constructor (options) {\n logger.trace(\"[constructor] Themes\", options);\n\n // options\n this.options = options || {\n // TODO default...\n };\n\n if (!(this instanceof Themes)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this._initialize();\n\n this._initContainer();\n }\n\n /**\n * Initialize component\n * (called by constructor)\n *\n * @private\n */\n _initialize () {\n // unique editor id (optional!)\n this.id = this.options.id || null;\n\n if (!this.options.target) {\n // cf. add()\n }\n\n var _toolsDefault = {\n thumbnails : true,\n button : {\n visible : true,\n type : \"radio\"\n }\n };\n\n if (!this.options.tools || Object.keys(this.options.tools).length === 0) {\n this.options.tools = _toolsDefault;\n }\n\n Utils.mergeParams(this.options.tools, _toolsDefault, false);\n\n if (typeof this.options.obj === \"undefined\" ||\n this.options.obj === null ||\n !this.options.obj) {\n // vide par defaut ?\n this.options.obj = {\n themesSummary : \"\",\n themes : []\n };\n }\n\n this.container = null;\n\n // DOM : className or id\n this.name = {\n target : \"GPEditorMapBoxThemeTarget\",\n container : \"GPEditorMapBoxThemesContainer\",\n containertheme : \"GPEditorMapBoxThemeContainer\",\n containerthemeID : \"GPEditorMapBoxThemeContainer_ID_\",\n input : \"GPEditorMapBoxThemeInput\",\n inputID : \"GPEditorMapBoxThemeInput_ID_\",\n label : \"GPEditorMapBoxThemeTitle\",\n labelID : \"GPEditorMapBoxThemeTitle_ID_\",\n image : \"GPEditorMapBoxThemeImage\",\n imageID : \"GPEditorMapBoxThemeImage_ID_\",\n message : \"GPEditorMapBoxThemeMessage\"\n };\n }\n\n /**\n * Graphical rendering of the component\n * (called by constructor)\n *\n * @private\n * @example\n *
\n *
\n * \n * \"Description1\"\n * \n *
\n *
\n * \n * \"Description2\"\n * \n *
\n *
\n */\n _initContainer () {\n // contexte\n var self = this;\n\n var obj = this.options.obj;\n\n var id = this.id || ID.generate();\n\n // div principale\n var div = document.createElement(\"div\");\n div.className = this.name.container;\n div.title = obj.themesSummary || \"\";\n\n var _lstThemes = obj.themes;\n if (_lstThemes) {\n for (var i = 0; i < _lstThemes.length; i++) {\n var _theme = _lstThemes[i];\n\n // div pour chaque theme\n var divTheme = document.createElement(\"div\");\n divTheme.id = this.name.containerthemeID + i + \"_\" + id;\n divTheme.className = this.name.containertheme;\n divTheme.tabIndex = i;\n\n // url du style est obligatoire !\n var _url = _theme.url;\n // style selectionné par defaut (uniquement en mode radio-button !?)\n var _selected = _theme.selected || false;\n if (_url) {\n // bouton\n var button = this.options.tools.button;\n if (button.visible) {\n var _type = (button.type === \"checkbox\") ? \"checkbox\" : \"radio\";\n var _button = document.createElement(\"input\");\n _button.type = _type;\n _button.id = this.name.inputID + i + \"_\" + id;\n _button.className = this.name.input;\n _button.name = id;\n _button.checked = _selected;\n _button.data = _url; // on lie le DOM et la couche, utile lors d'evenement !\n if (_button.addEventListener) {\n _button.addEventListener(\"click\", function (e) {\n self.onClickThemeTitleMapBox(e);\n });\n } else if (_button.attachEvent) {\n _button.attachEvent(\"onclick\", function (e) {\n self.onClickThemeTitleMapBox(e);\n });\n }\n divTheme.appendChild(_button);\n }\n // vignette\n if (this.options.tools.thumbnails) {\n if (_theme.thumbnail) {\n var _img = document.createElement(\"img\");\n _img.id = this.name.imageID + i + \"_\" + id;\n _img.className = this.name.image;\n _img.src = _theme.thumbnail;\n _img.alt = _theme.thumbnail;\n _img.title = _theme.description || \"\"; // une description au survol de l'image ou titre...\n _img.data = _url; // on lie le DOM et la couche, utile lors d'evenement !\n if (_img.addEventListener) {\n _img.addEventListener(\"click\", function (e) {\n self.onClickThemeImageMapBox(e);\n // maj du radio button\n var nodes = e.target.parentElement.childNodes;\n if (nodes) {\n var node = nodes[0];\n if (node.tagName.toLowerCase() === \"input\") {\n node.checked = !node.checked;\n }\n }\n });\n } else if (_img.attachEvent) {\n _img.attachEvent(\"onclick\", function (e) {\n self.onClickThemeImageMapBox(e);\n var nodes = e.target.parentElement.childNodes;\n if (nodes) {\n var node = nodes[0];\n if (node.tagName.toLowerCase() === \"input\") {\n node.checked = !node.checked;\n }\n }\n });\n }\n divTheme.appendChild(_img);\n }\n }\n // label\n if (_theme.name) {\n var _label = document.createElement(\"label\");\n _label.id = this.name.labelID + i + \"_\" + id;\n if (this.options.tools.button.visible) {\n _label.htmlFor = _button.id;\n }\n _label.className = this.name.label;\n _label.innerHTML = _theme.name;\n _label.title = _theme.description || \"\"; // une description au survol de l'image ou titre...\n _label.data = _url; // on lie le DOM et la couche, utile lors d'evenement !\n if (!this.options.tools.button.visible) {\n if (_label.addEventListener) {\n _label.addEventListener(\"click\", function (e) {\n self.onClickThemeTitleMapBox(e);\n });\n } else if (_label.attachEvent) {\n _label.attachEvent(\"onclick\", function (e) {\n self.onClickThemeTitleMapBox(e);\n });\n }\n }\n divTheme.appendChild(_label);\n }\n } else {\n var _msg = document.createElement(\"label\");\n _msg.className = this.name.message;\n _msg.innerHTML = \"Thème non disponible...\";\n divTheme.appendChild(_msg);\n }\n\n div.appendChild(divTheme);\n }\n }\n\n this.container = div;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n /**\n * Add element into target DOM\n * @returns {Object} - Legend instance\n */\n add () {\n if (!this.options.target) {\n if (!document.getElementById(this.name.target)) {\n var div = document.createElement(\"div\");\n div.id = this.name.target;\n var node = document.documentElement ||\n document.getElementsByTagName(\"body\")[0] ||\n document.getElementsByTagName(\"head\")[0];\n node.appendChild(div);\n }\n this.options.target = document.getElementById(this.name.target);\n }\n if (this.container) {\n this.options.target.appendChild(this.container);\n }\n return this;\n }\n\n /**\n * Set display container or get\n *\n * @param {Boolean} display - show/hidden container or get status\n * @returns {Boolean} - true/false\n */\n display (display) {\n logger.trace(\"display()\", display);\n if (typeof display !== \"undefined\") {\n this.container.style.display = (display) ? \"flex\" : \"none\";\n }\n return (this.container.style.display === \"flex\");\n }\n\n /**\n * Get container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n /**\n * this method is called by event '' on '' tag form\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Themes#editor:themes:image\n */\n onClickThemeImageMapBox (e) {\n logger.trace(\"onClickThemeImageMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n if (this.options.tools.button.type === \"checkbox\") {\n // GPEditorMapBoxThemeInput_ID_0_1571317605868\n var targetIDX = e.target.previousSibling.id.substring(\n e.target.previousSibling.id.lastIndexOf(\"_\") + 1\n );\n var _inputs = document.getElementsByClassName(this.name.input);\n for (var i = 0; i < _inputs.length; i++) {\n var el = _inputs[i];\n if (el.id === e.target.previousSibling.id) {\n continue;\n }\n var elIDX = el.id.substring(el.id.lastIndexOf(\"_\") + 1);\n if (elIDX !== targetIDX) {\n continue;\n }\n el.checked = false;\n }\n }\n EventBus.dispatch(EventEditor.themes.onclickimage, e);\n }\n\n /**\n * this method is called by event '' on '' tag form\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Themes#editor:themes:title\n */\n onClickThemeTitleMapBox (e) {\n logger.trace(\"onClickThemeTitleMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n if (this.options.tools.button.type === \"checkbox\") {\n // GPEditorMapBoxThemeInput_ID_0_1571317605868\n var targetIDX = e.target.id.substring(e.target.id.lastIndexOf(\"_\") + 1);\n var _inputs = document.getElementsByClassName(this.name.input);\n for (var i = 0; i < _inputs.length; i++) {\n var el = _inputs[i];\n if (el.id === e.target.id) {\n continue;\n }\n var elIDX = el.id.substring(el.id.lastIndexOf(\"_\") + 1);\n if (elIDX !== targetIDX) {\n continue;\n }\n el.checked = false;\n }\n }\n EventBus.dispatch(EventEditor.themes.onclicktitle, e);\n }\n\n};\n\nexport default Themes;\n\n// Expose Editor as ol.editor.View (for a build bundle)\nif (window.ol && window.ol.style) {\n if (!window.ol.style.editor) {\n window.ol.style.editor = {};\n } \n window.ol.style.editor.Themes = Themes;\n}\n\n","import EventBus from \"eventbusjs\";\nimport EventEditor from \"./Event\";\nimport Utils from \"../../Utils/Helper\";\nimport Logger from \"../../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"editor-filter\");\n\n/**\n * @classdesc\n *\n * MapBox filter management\n *\n * @constructor\n * @alias ol.style.editor.Filter\n * @param {Object} options - options for function call.\n * @example\n * var filter = new Filter ({\n * target : ...,\n * position : 1, // identifiant de position (unique !)\n * tools : {\n * edition : false\n * },\n * title : \"Filtres (JSON)\",\n * obj : {\n * filter : []\n * }\n * });\n * filter.add();\n * filter.display(true);\n * filter.getContainer();\n */\nclass Filter {\n\n constructor (options) {\n logger.trace(\"[constructor] Filter\", options);\n\n // options\n this.options = options || {\n // default...\n target : null,\n position : 0,\n tools : null,\n title : null,\n obj : null\n };\n\n if (!(this instanceof Filter)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this._initialize();\n\n this._initContainer();\n }\n\n /**\n * Initialize component\n * (called by constructor)\n *\n * @private\n */\n _initialize () {\n // unique editor id (optional!)\n this.id = this.options.id || null;\n\n if (!this.options.target) {\n // cf. add()\n }\n\n if (!this.options.position) {\n this.options.position = 0;\n }\n\n var _toolsDefault = {\n edition : false\n };\n\n if (!this.options.tools) {\n this.options.tools = _toolsDefault;\n }\n\n Utils.mergeParams(this.options.tools, _toolsDefault, false);\n\n if (!this.options.obj) {\n // choix d'avoir un objet vide pour une edition futur...\n this.options.obj = {\n filter : []\n };\n }\n\n if (!this.options.title) {\n this.options.title = \"JSON Filtres :\";\n }\n this.container = null;\n\n // DOM : className or id\n this.name = {\n target : \"GPEditorMapBoxFilterTarget\",\n container : \"GPEditorMapBoxFilterContainer\",\n containerjson : \"GPEditorMapBoxFilterJsonContainer\",\n jsonlabel : \"GPEditorMapBoxFilterTitleJson\",\n jsondisplay : \"GPEditorMapBoxFilterDisplayJson\",\n containertoolsedit : \"GPEditorMapBoxFilterToolsEditionContainer\"\n };\n }\n\n /**\n * Graphical rendering of the component\n * (called by constructor)\n *\n * @private\n * @example\n *
\n *
\n * \n *
...
\n *
\n *
\n *
\n */\n _initContainer () {\n // contexte\n var self = this;\n\n var _found = false;\n var _filter = JSON.parse(JSON.stringify(this.options.obj)); // on manipule une copie !\n\n // FIXME tag filter est obselete !\n // on doit utiliser les expressions dans \"paint\" ou \"layout\" !\n if (_filter.filter) {\n _found = true;\n if (_filter.filter.length === 0) {\n logger.info(\"tag 'filter' is empty !\");\n }\n }\n\n var div = document.createElement(\"div\");\n div.className = this.name.container;\n\n var json = null;\n if (_found) {\n json = JSON.stringify(_filter.filter, null, 4);\n }\n\n var divJson = document.createElement(\"div\");\n divJson.className = this.name.containerjson;\n\n var labelJson = document.createElement(\"label\");\n labelJson.className = this.name.jsonlabel;\n labelJson.innerHTML = this.options.title;\n divJson.appendChild(labelJson);\n\n var preJson = document.createElement(\"pre\");\n preJson.className = this.name.jsondisplay;\n preJson.innerHTML = json;\n if (preJson.addEventListener) {\n preJson.addEventListener(\"click\", function (e) {\n if (self.options.tools.edition) {\n self.onEditJsonFilterMapBox(e);\n }\n });\n } else if (preJson.attachEvent) {\n preJson.attachEvent(\"onclick\", function (e) {\n if (self.options.tools.edition) {\n self.onEditJsonFilterMapBox(e);\n }\n });\n }\n divJson.appendChild(preJson);\n div.appendChild(divJson);\n\n if (this.options.tools.edition) {\n var divEdit = document.createElement(\"div\");\n divEdit.className = this.name.containertoolsedit;\n div.appendChild(divEdit);\n }\n\n // main container\n this.container = div;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n /**\n * Add element into target DOM\n * @returns {Object} - Legend instance\n */\n add () {\n if (!this.options.target) {\n if (!document.getElementById(this.name.target)) {\n var div = document.createElement(\"div\");\n div.id = this.name.target;\n var node = document.documentElement ||\n document.getElementsByTagName(\"body\")[0] ||\n document.getElementsByTagName(\"head\")[0];\n node.appendChild(div);\n }\n this.options.target = document.getElementById(this.name.target);\n }\n if (this.container) {\n this.options.target.appendChild(this.container);\n }\n return this;\n }\n\n /**\n * Set display container or get\n *\n * @param {Boolean} display - show/hidden container or get status\n * @returns {Boolean} - true/false\n */\n display (display) {\n logger.trace(\"display()\", display);\n if (typeof display !== \"undefined\") {\n this.container.style.display = (display) ? \"flex\" : \"none\";\n }\n return (this.container.style.display === \"flex\");\n }\n\n /**\n * Get container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Filter#editor:style:oneditjson\n */\n onEditJsonFilterMapBox (e) {\n logger.trace(\"onEditJsonFilterMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.filter.oneditjson, e);\n }\n\n};\n\nexport default Filter;\n\n// Expose Editor as ol.editor.View (for a build bundle)\nif (window.ol && window.ol.style) {\n if (!window.ol.style.editor) {\n window.ol.style.editor = {};\n } \n window.ol.style.editor.Filter = Filter;\n}\n","import EventBus from \"eventbusjs\";\nimport EventEditor from \"./Event\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Color from \"../../Utils/ColorUtils\";\n\nvar logger = Logger.getLogger(\"editor-legend\");\n\n/**\n * @classdesc\n *\n * MapBox Legend management\n *\n * @constructor\n * @alias ol.style.editor.Legend\n * @param {Object} options - options for function call.\n * @param {Object} [options.target = null] - ...\n * @param {Number} [options.position = 0] - ...\n * @param {Number} [options.id = null] - (internal) ...\n * @param {Object} [options.sprites = null] - ...\n * @param {String} [options.sprites.url] - ...\n * @param {Object} [options.sprites.size] - {h:, w:} ...\n * @param {Object} [options.sprites.json] - ...\n * @param {Object} options.obj - ...\n * @param {String} [options.obj.title] - ...\n * @param {Boolean} [options.obj.editable = true] - ...\n * @param {Object} options.obj.paint - ...\n * @param {Object} options.obj.layout - ...\n * @example\n * var legend = new Legend ({\n * target : ...,\n * position : 1, // identifiant de position (unique !)\n * sprites : {\n * url : \"http://localhost/sprites.png\",\n * size : { w : 450, h : 550 },\n * json : {\n * icon-1 : {x:,y:,height:,width:,pixelRatio:},\n * icon-2 : {x:,y:,height:,width:,pixelRatio:}\n * }\n * },\n * obj : {\n * title : \"\",\n * editable : true, // tag non standard issue du style json dédié à l'edition\n * paint : {\"fill-color\": \"#2BB3E1\"},\n * layout : {visibility:\"none\"}\n * }\n * });\n * legend.add();\n * legend.display(true);\n * legend.isEditable();\n * legend.getRenderContainer();\n * legend.getToolsContainer();\n * legend.getContainer();\n */\nclass Legend {\n\n constructor (options) {\n logger.trace(\"[constructor] Legend\", options);\n\n // options\n this.options = options || {\n // default...\n target : null,\n position : 0,\n sprites : null,\n obj : null\n };\n\n if (!(this instanceof Legend)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this._initialize();\n\n this._initContainer();\n }\n\n // ################################################################### //\n // ########################## init methods ########################### //\n // ################################################################### //\n /**\n * Initialize component\n * (called by constructor)\n *\n * @private\n */\n _initialize () {\n // unique editor id (optional!)\n this.id = this.options.id || null;\n\n if (!this.options.target) {\n // cf. add()\n }\n\n // permet d'avoir un identifiant de position dans la liste des layers\n if (!this.options.position) {\n this.options.position = 0;\n }\n\n if (!this.options.obj) {\n // choix d'avoir un objet vide pour une edition...\n this.options.obj = {\n title : \"vide...\",\n editable : true,\n paint : {\n \"fill-color\" : \"#FFFFFF\"\n }\n };\n }\n\n // la legende est elle editable ?\n // le tag 'editable' est à placer dans le fichier de style (dans le layer)...\n var _editable = this.options.obj.editable;\n this.editable = (typeof _editable !== \"undefined\") ? _editable : false;\n\n // liste des caractéristiques de la legende par defaut\n this.legendRender = {\n type : \"fill\",\n values : {\n width : 1,\n stroke : \"#FFFFFF\",\n color : \"#000000\",\n opacity : 1\n }\n };\n\n // DOM : pointer\n this.container = null;\n this.rendercontainer = null;\n this.toolscontainer = null;\n\n // DOM : className or id\n this.name = {\n target : \"GPEditorMapBoxLegendTarget\",\n container : \"GPEditorMapBoxLegendContainer\",\n containerlegendrender : \"GPEditorMapBoxLegendRenderContainer\",\n legendrender : \"GPEditorMapBoxLegendRender\",\n legendeditable : \"GPEditorMapBoxLegendEditable\",\n legendtitle : \"GPEditorMapBoxLegendTitle\",\n containerlegendtools : \"GPEditorMapBoxLegendToolsContainer\"\n };\n\n // DOM : Label menu Edition\n this.labels = {\n \"line-color\" : \"Couleur du trait\",\n \"line-width\" : \"Epaisseur du trait\",\n \"line-opacity\" : \"Opacité du trait\",\n \"fill-color\" : \"Couleur de remplissage\",\n \"fill-opacity\" : \"Opacité du remplissage\"\n };\n }\n\n /**\n * Graphical rendering of the component\n * (called by constructor)\n *\n * @private\n * @example\n *
\n *
\n *
\n * test circle editable...\n *
\n *
...
\n *
\n */\n _initContainer () {\n var _obj = this.options.obj;\n\n var div = document.createElement(\"div\");\n div.className = this.name.container;\n\n // INFO\n // on recherche les informations dans le tag 'paint' en priorité, mais pour\n // les icones ou textes, les informations peuvent se trouver aussi dans le tag 'layout'...\n // on fusionnne paint et layout par facilité\n var style = Object.assign({}, _obj.paint, _obj.layout);\n\n // liste des properties mapbox\n // ex. fill-color\n var keys = Object.keys(style);\n if (keys.length === 0) {\n logger.info(\"tag 'paint' or 'layout' is empty !\");\n return;\n }\n\n // FIXME\n // - gestion de type plus complexe : texte avec/sans symbole ou symbole !\n // - pour les textes ou icones, les info peuvent être aussi dans le tag 'layout' !\n var params = {};\n var bFound = false;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n // recherche du type\n // ex. fill\n if (/fill-/.test(key) ||\n /line-/.test(key) ||\n /circle-/.test(key) ||\n /background-/.test(key) ||\n /text-/.test(key) ||\n /icon-/.test(key)) {\n // style geré & trouvé\n bFound = true;\n\n var title = _obj.title || \"\";\n\n // INFO\n // le type texte ou icone est difficile à trouver car les 2 types cohabitent,\n // on le gère en symbole...\n var type = key.split(\"-\")[0];\n if (type === \"text\" || type === \"icon\") {\n type = \"symbol\";\n }\n\n this.legendRender = this._getProperties(type, style);\n params = {\n edit : this.editable,\n title : title,\n type : this.legendRender.type,\n values : this.legendRender.values\n };\n div.appendChild(this._createElementIconLegend(params));\n\n // on stoppe la recherche\n break;\n }\n }\n\n // legende avec un style indeterminé ou non géré !?\n if (!bFound) {\n // on prend la legende par defaut\n params = {\n edit : this.editable,\n title : \"\",\n type : this.legendRender.type,\n values : this.legendRender.values\n };\n div.appendChild(this._createElementIconLegend(params));\n logger.warn(\"legend type unknown, default legend used...\");\n }\n\n // ajout mode edition graphique de la legende\n this.toolscontainer = this._createElementEditionLegend(params);\n div.appendChild(this.toolscontainer);\n\n // main container\n this.container = div;\n }\n\n // ################################################################### //\n // ##################### private methods ############################# //\n // ################################################################### //\n /**\n * Get properties supported\n *\n * @param {Object} type - fill, line, circle, text, icon...\n * @param {Object} values - raw values from the JSON file\n * @returns {Object} - { type : (fill | line | circle | symbol), values : valuesSupported }\n *\n * @private\n * @example\n *\n * // TODO\n * // symbol with text (1) / symbol without text (2) / text (3)\n * // \"layout\":{\n * // \"icon-image\":\"{maki}-11\", \n * // \"text-font\":[\n * // \"Open Sans Semibold\",\n * // \"Arial Unicode MS Bold\"\n * // ],\n * // \"text-field\":\"{name_en}\", \n * // \"text-max-width\":9,\n * // \"text-padding\":2,\n * // \"text-offset\":[\n * // 0,\n * // 0.6\n * // ],\n * // \"text-anchor\":\"top\",\n * // \"text-size\":12\n * // },\n * // \"paint\":{\n * // \"text-color\":\"#666\",\n * // \"text-halo-color\":\"#ffffff\",\n * // \"text-halo-width\":1,\n * // \"text-halo-blur\":0.5\n * // },\n *\n */\n _getProperties (type, values) {\n // cas particulier du symbole complexe\n // il existe plusieurs types pour un symbole :\n // - text\n // - icon\n // - icon with text\n if (type === \"symbol\") {\n var isTextValue = values[\"text-field\"];\n var isIconValue = values[\"icon-image\"];\n type = (isTextValue && isIconValue) ? \"icon\" : (isTextValue) ? \"text\" : (isIconValue) ? \"icon\" : \"unknow\";\n if (type === \"unknow\") {\n logger.warn(\"type unknow !?\");\n return;\n }\n }\n\n var valuesSupported = {};\n for (const key in values) {\n if (Object.hasOwnProperty.call(values, key)) {\n const val = values[key];\n if (Legend.PROPERTIES[type].includes(key)) {\n var prop = key.replace(type, \"\").slice(1);\n var value = this._getValue(val);\n if (value) {\n // cas particulier des sprites\n if (prop === \"pattern\" || prop === \"image\") {\n if (!this.options.sprites ||\n !this.options.sprites.json ||\n !this.options.sprites.json[value]) {\n var k = type + \":\" + prop;\n logger.warn(\"sprites mandatory for key \", k);\n break;\n }\n }\n valuesSupported[prop] = value;\n }\n } else {\n logger.warn(\"property not supported : \", key);\n }\n }\n }\n\n return {\n type : type,\n values : valuesSupported\n };\n }\n\n /**\n * Render thumbnail (SVG)\n *\n * @param {Object} type - fill, line, circle, text, ...\n * @param {Object} values - {\"color\":..., \"width\":..., \"stroke\":...., \"opacity\":...}\n * @returns {Boolean} true/false\n *\n * @private\n * @example\n * (...)\n */\n _renderThumbnail (type, values) {\n // div de rendu de la legende\n var div = this.rendercontainer;\n\n if (!div) {\n return false;\n }\n\n // SVG\n var svg = null;\n // facteur grossissement (x10) pour le trait\n var factor = 3;\n\n // valeur par defaut\n if (!values.color) {\n values.color = \"#FFFFFF\";\n }\n // en fonction du type, on y ajoute le style\n switch (type) {\n case \"text\":\n var styleText = \"font-size: 5em;font-weight: bold;\";\n svg = \"url(\\\"data:image/svg+xml;utf8, T \\\")\";\n div.style[\"background\"] = svg\n .replace(\"%color%\", (values.color.indexOf(\"rgb\") === 0) ? values.color : Color.hexToRgba(values.color, 1))\n .replace(\"%opacity%\", values.opacity || 1)\n .replace(\"%style%\", styleText);\n break;\n case \"icon\":\n if (values.image) {\n // FIXME on reste dans le paradigme d'utilisation du SVG...,\n // mais probleme de ratio de l'image !?\n svg = \"\"\n .replace(\"%x%\", this.options.sprites.json[values.image].x)\n .replace(\"%y%\", this.options.sprites.json[values.image].y)\n .replace(/%w%/g, this.options.sprites.json[values.image].width)\n .replace(/%h%/g, this.options.sprites.json[values.image].height)\n .replace(\"%W%\", this.options.sprites.size.w)\n .replace(\"%H%\", this.options.sprites.size.h)\n .replace(\"%URL%\", this.options.sprites.url);\n div.innerHTML = svg;\n } else {\n var styleTextIcon = \"fill: transparent;stroke-width: 10;\";\n svg = \"url(\\\"data:image/svg+xml;utf8,\\\")\";\n div.style[\"background\"] = svg\n .replace(\"%color%\", (values.color.indexOf(\"rgb\") === 0) ? values.color : Color.hexToRgba(values.color, 1))\n .replace(\"%style%\", styleTextIcon);\n }\n break;\n case \"line\":\n var lstrockedasharray = (Array.isArray(values[\"dasharray\"])) ? values[\"dasharray\"].join(\" \") : 0;\n svg = \"url(\\\"data:image/svg+xml;utf8,\\\")\";\n // svg = \"url(\\\"data:image/svg+xml;utf8,\\\")\";\n div.style[\"background\"] = svg\n .replace(\"%color%\", (values.color.indexOf(\"rgb\") === 0) ? values.color : Color.hexToRgba(values.color, 1))\n .replace(\"%stroke-opacity%\", values.opacity || 1)\n .replace(\"%stroke-dasharray%\", lstrockedasharray)\n .replace(\"%stroke-width%\", (values.width || 0) * factor);\n break;\n case \"circle\":\n var cstrockcolor = values[\"stroke-color\"] || \"#FFFFFF\";\n svg = \"url(\\\"data:image/svg+xml;utf8,\\\")\";\n div.style[\"background\"] = svg\n .replace(\"%color%\", (values.color.indexOf(\"rgb\") === 0) ? values.color : Color.hexToRgba(values.color, 1))\n .replace(\"%opacity%\", values.opacity || 1)\n .replace(\"%stroke-color%\", (cstrockcolor.indexOf(\"rgb\") === 0) ? cstrockcolor : Color.hexToRgba(cstrockcolor, 1))\n .replace(\"%stroke-opacity%\", values[\"stroke-opacity\"] || 1)\n .replace(\"%stroke-width%\", (values[\"stroke-width\"] || 0) * factor);\n break;\n case \"background\":\n case \"fill\":\n if (values.pattern) {\n svg = \"\"\n .replace(\"%x%\", this.options.sprites.json[values.pattern].x)\n .replace(\"%y%\", this.options.sprites.json[values.pattern].y)\n .replace(/%w%/g, this.options.sprites.json[values.pattern].width)\n .replace(/%h%/g, this.options.sprites.json[values.pattern].height)\n .replace(\"%W%\", this.options.sprites.size.w)\n .replace(\"%H%\", this.options.sprites.size.h)\n .replace(\"%URL%\", this.options.sprites.url);\n div.innerHTML = svg;\n } else {\n var fstrokecolor = values[\"outline-color\"] || \"#FFFFFF\";\n svg = \"url(\\\"data:image/svg+xml;utf8,\\\")\";\n div.style[\"background\"] = svg\n .replace(\"%color%\", (values.color.indexOf(\"rgb\") === 0) ? values.color : Color.hexToRgba(values.color, 1))\n .replace(\"%opacity%\", values.opacity || 1)\n .replace(\"%stroke-color%\", (fstrokecolor.indexOf(\"rgb\") === 0) ? fstrokecolor : Color.hexToRgba(fstrokecolor, 1));\n }\n break;\n default:\n logger.warn(\"type not found, no thumbnail...\");\n return false;\n }\n\n return true;\n }\n\n /**\n * Get value\n *\n * @param {*} value - value of a property (ex. \"#2BB3E1\")\n * @returns {*} return a verified value (ex. color\": \"#2BB3E1\")\n *\n * @private\n * @example\n * // type simple for fill, line or circle type with string :\n * // \"paint\": {\n * // \"fill-color\": \"#2BB3E1\"\n * // }\n *\n * // type simple for fill, line or circle type with array :\n * // \"paint\": {\n * // \"line-dasharray\": [2,10]\n * // }\n *\n * // TODO type complexe : not yet implemented !\n * // \"paint\": {\n * // \"fill-color\": [\n * // \"match\",\n * // [\"get\",\"symbo\"],\n * // \"ZONE_BOISEE\",\"#A7DA81\",\n * // \"ZONE_MANGROVE\",\"#7E8AB5\",\n * // \"#A7DA81\"\n * // ]\n * // }\n *\n * // other type complexe :\n * // \"paint\": {\n * // \"fill-color\": {\n * // \"base\": 1,\n * // \"stops\": [\n * // [\n * // 15.5,\n * // \"#f2eae2\"\n * // ],\n * // [\n * // 16,\n * // \"#dfdbd7\"\n * // ]\n * // ]\n * // }\n * // }\n */\n _getValue (value) {\n var result = null;\n if (typeof value === \"string\") {\n result = value;\n } else if (typeof value === \"number\") {\n result = value;\n } else if (Array.isArray(value)) {\n // cas d'un tableau de valeurs numériques : [1,2,3]\n var isNumber = true;\n value.forEach(v => {\n if (typeof v !== \"number\") {\n isNumber = false;\n }\n });\n if (isNumber) {\n result = value;\n }\n } else if (typeof value === \"object\") {\n result = null;\n if (\"stops\" in value) {\n // on realise un ordre inversé sur les zooms\n value.stops.sort((a, b) => {\n var numA = a[0];\n var numB = b[0];\n if (numA > numB) {\n return -1;\n }\n if (numA < numB) {\n return 1;\n }\n return 0;\n });\n // et, on prend le plus petit zoom\n var lastStopsValue = value.stops.slice(-1);\n result = lastStopsValue[0][1];\n }\n } else {\n logger.warn(\"value not supported !\");\n }\n return result;\n }\n\n // ################################################################### //\n // ######################### DOM methods ############################# //\n // ################################################################### //\n /**\n * Create a Graphical Legend Icon\n *\n * @param {Object} params - param\n * @param {String} params.title - title\n * @param {String} params.type - fill, line, circle, text, icon, ...\n * @param {String} params.values - {\"color\": \"#2BB3E1\", \"width\": 10, \"opacity\": 0.5, \"stroke\": \"#2BB3E1\"}\n * @param {Boolean} params.edit - editable with a colorPicker for only line, fill and circle legend !\n * @returns {DOMElement} DOM element\n *\n * @private\n * @example\n *
\n *
");\">\n *
\n * vide...\n *
\n */\n _createElementIconLegend (params) {\n // contexte\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = this.name.containerlegendrender;\n\n var div = this.rendercontainer = document.createElement(\"div\");\n div.className = this.name.legendrender;\n if (params.edit) {\n div.className += \" \";\n div.className += this.name.legendeditable;\n if (div.addEventListener) {\n div.addEventListener(\"click\", function (e) {\n self.onEditionLegendMapBox(e);\n });\n } else if (div.attachEvent) {\n div.attachEvent(\"onclick\", function (e) {\n self.onEditionLegendMapBox(e);\n });\n }\n }\n\n // type de legende\n var type = params.type;\n\n // TODO className\n // div.className += \" legend-not-implemented\";\n // ajout du style sur la div de rendu\n if (this._renderThumbnail(type, params.values)) {\n // className possibles :\n // \" legend-text\"\n // \" legend-icon\"\n // \" legend-background\"\n // \" legend-line\"\n // \" legend-line-not-editable\"\n // \" legend-circle\"\n // \" legend-circle-not-editable\"\n // \" legend-fill\"\n // \" legend-fill-not-editable\"\n div.className += (params.edit) ? \" legend-\" + type : \" legend-\" + type + \"-not-editable\";\n } else {\n div.className += \" legend-unknow\";\n }\n\n container.appendChild(div);\n\n var span = document.createElement(\"span\");\n span.className = this.name.legendtitle;\n span.innerHTML = params.title || \"\";\n container.appendChild(span);\n\n return container;\n }\n\n /**\n * Create a Graphical Legend Edition\n *\n * @param {Object} params - param\n * @param {String} params.type - fill, line, (TODO : circle, icon or text)\n * @param {String} params.values - {\"fill-color\": \"#2BB3E1\"}\n * @param {Boolean} params.edit - editable with a colorPicker for only line and fill legend !\n * @returns {DOMElement} DOM element\n *\n * @private\n * @example\n *
\n *
\n * \n * \n *
\n *
\n * \n * \n *
\n *
\n * \n * \n *
\n *
\n * \n * \n *
\n *
\n * \n * \n *
\n *
\n */\n _createElementEditionLegend (params) {\n // contexte\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = this.name.containerlegendtools;\n\n // uniquement les elements editables !\n if (!params.edit) {\n return container;\n }\n\n // on ne traite que l'edition du mode 'traits' ou 'surfaciques'\n // mode 'line'\n switch (params.type) {\n case \"line\":\n createLineColor.call(self);\n createLineWidth.call(self);\n createLineOpacity.call(self);\n break;\n case \"background\":\n case \"fill\":\n createFillColor.call(self);\n createFillOpacity.call(self);\n break;\n default:\n break;\n }\n\n // couleur du trait\n function createLineColor () {\n var linecolor = document.createElement(\"div\");\n linecolor.className = \"legend-styling-div\";\n var lLineColor = document.createElement(\"label\");\n lLineColor.className = \"legend-line\";\n lLineColor.htmlFor = this.id ? \"line-color-\" + this.id : \"line-color\";\n lLineColor.innerHTML = this.labels[\"line-color\"];\n var inputLineColor = document.createElement(\"input\");\n inputLineColor.className = \"legend-styling\";\n inputLineColor.id = this.id ? \"line-color-\" + this.id : \"line-color\";\n inputLineColor.title = \"Selectionner une couleur de trait\";\n inputLineColor.type = \"color\";\n inputLineColor.value = params.values.color;\n inputLineColor.setAttribute(\"data-id\", \"line-color\");\n if (inputLineColor.addEventListener) {\n inputLineColor.addEventListener(\"change\", function (e) {\n self._renderThumbnail(params.type, Object.assign(params.values, {\n color : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n } else if (inputLineColor.attachEvent) {\n inputLineColor.attachEvent(\"onchange\", function (e) {\n self._renderThumbnail(params.type, Object.assign(params.values, {\n color : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n }\n linecolor.appendChild(lLineColor);\n linecolor.appendChild(inputLineColor);\n container.appendChild(linecolor);\n }\n\n // epaisseur du trait\n function createLineWidth () {\n var linewidth = document.createElement(\"div\");\n linewidth.className = \"legend-styling-div\";\n var lLineWidth = document.createElement(\"label\");\n lLineWidth.className = \"legend-line\";\n lLineWidth.htmlFor = this.id ? \"line-width-\" + this.id : \"line-width\";\n lLineWidth.innerHTML = this.labels[\"line-width\"];\n var inputLineWidth = document.createElement(\"input\");\n inputLineWidth.className = \"legend-styling\";\n inputLineWidth.id = this.id ? \"line-width-\" + this.id : \"line-width\";\n inputLineWidth.title = params.values.width;\n inputLineWidth.type = \"range\";\n inputLineWidth.min = \"0\";\n inputLineWidth.max = \"10\";\n inputLineWidth.step = \"1\";\n inputLineWidth.defaultValue = params.values.width;\n inputLineWidth.setAttribute(\"data-id\", \"line-width\");\n if (inputLineWidth.addEventListener) {\n inputLineWidth.addEventListener(\"change\", function (e) {\n logger.trace(e);\n e.target.title = e.target.value;\n self._renderThumbnail(params.type, Object.assign(params.values, {\n width : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n } else if (inputLineWidth.attachEvent) {\n inputLineWidth.attachEvent(\"onchange\", function (e) {\n logger.trace(e);\n e.target.title = e.target.value;\n self._renderThumbnail(params.type, Object.assign(params.values, {\n width : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n }\n linewidth.appendChild(lLineWidth);\n linewidth.appendChild(inputLineWidth);\n container.appendChild(linewidth);\n }\n\n // opacité du trait\n function createLineOpacity () {\n var lineopacity = document.createElement(\"div\");\n lineopacity.className = \"legend-styling-div\";\n var lLineOpacity = document.createElement(\"label\");\n lLineOpacity.className = \"legend-line\";\n lLineOpacity.htmlFor = this.id ? \"line-opacity-\" + this.id : \"line-opacity\";\n lLineOpacity.innerHTML = this.labels[\"line-opacity\"];\n var inputLineOpacity = document.createElement(\"input\");\n inputLineOpacity.className = \"legend-styling\";\n inputLineOpacity.id = this.id ? \"line-opacity-\" + this.id : \"line-opacity\";\n inputLineOpacity.title = params.values.opacity;\n inputLineOpacity.type = \"range\";\n inputLineOpacity.min = \"0\";\n inputLineOpacity.max = \"1\";\n inputLineOpacity.step = \"0.1\";\n inputLineOpacity.defaultValue = params.values.opacity;\n inputLineOpacity.setAttribute(\"data-id\", \"line-opacity\");\n if (inputLineOpacity.addEventListener) {\n inputLineOpacity.addEventListener(\"change\", function (e) {\n logger.trace(e);\n e.target.title = e.target.value;\n self._renderThumbnail(params.type, Object.assign(params.values, {\n opacity : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n } else if (inputLineOpacity.attachEvent) {\n inputLineOpacity.attachEvent(\"onchange\", function (e) {\n logger.trace(e);\n e.target.title = e.target.value;\n self._renderThumbnail(params.type, Object.assign(params.values, {\n opacity : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n }\n lineopacity.appendChild(lLineOpacity);\n lineopacity.appendChild(inputLineOpacity);\n container.appendChild(lineopacity);\n }\n\n // couleur de remplissage\n function createFillColor () {\n var fillcolor = document.createElement(\"div\");\n fillcolor.className = \"legend-styling-div\";\n var lFillColor = document.createElement(\"label\");\n lFillColor.className = \"legend-fill\";\n lFillColor.htmlFor = this.id ? \"fill-color-\" + this.id : \"fill-color\";\n lFillColor.innerHTML = this.labels[\"fill-color\"];\n var inputFillColor = document.createElement(\"input\");\n inputFillColor.className = \"legend-styling\";\n inputFillColor.id = this.id ? \"fill-color-\" + this.id : \"fill-color\";\n inputFillColor.title = \"Selectionner une couleur de remplissage\";\n inputFillColor.type = \"color\";\n inputFillColor.value = params.values.color;\n inputFillColor.setAttribute(\"data-id\", \"fill-color\");\n if (inputFillColor.addEventListener) {\n inputFillColor.addEventListener(\"change\", function (e) {\n self._renderThumbnail(params.type, Object.assign(params.values, {\n color : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n } else if (inputFillColor.attachEvent) {\n inputFillColor.attachEvent(\"onchange\", function (e) {\n self._renderThumbnail(params.type, Object.assign(params.values, {\n color : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n }\n fillcolor.appendChild(lFillColor);\n fillcolor.appendChild(inputFillColor);\n container.appendChild(fillcolor);\n }\n\n // opacité du remplissage\n function createFillOpacity () {\n var fillopacity = document.createElement(\"div\");\n fillopacity.className = \"legend-styling-div\";\n var lFillOpacity = document.createElement(\"label\");\n lFillOpacity.className = \"legend-fill\";\n lFillOpacity.htmlFor = this.id ? \"fill-opacity-\" + this.id : \"fill-opacity\";\n lFillOpacity.innerHTML = this.labels[\"fill-opacity\"];\n var inputFillOpacity = document.createElement(\"input\");\n inputFillOpacity.className = \"legend-styling\";\n inputFillOpacity.id = this.id ? \"fill-opacity-\" + this.id : \"fill-opacity\";\n inputFillOpacity.title = params.values.opacity;\n inputFillOpacity.type = \"range\";\n inputFillOpacity.min = \"0\";\n inputFillOpacity.max = \"1\";\n inputFillOpacity.step = \"0.1\";\n inputFillOpacity.defaultValue = params.values.opacity;\n inputFillOpacity.setAttribute(\"data-id\", \"fill-opacity\");\n if (inputFillOpacity.addEventListener) {\n inputFillOpacity.addEventListener(\"change\", function (e) {\n e.target.title = e.target.value;\n self._renderThumbnail(params.type, Object.assign(params.values, {\n opacity : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n } else if (inputFillOpacity.attachEvent) {\n inputFillOpacity.attachEvent(\"onchange\", function (e) {\n e.target.title = e.target.value;\n self._renderThumbnail(params.type, Object.assign(params.values, {\n opacity : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n }\n fillopacity.appendChild(lFillOpacity);\n fillopacity.appendChild(inputFillOpacity);\n container.appendChild(fillopacity);\n }\n\n return container;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n /**\n * Add element into target DOM\n *\n * @returns {Object} - Legend instance\n */\n add () {\n if (!this.options.target) {\n if (!document.getElementById(this.name.target)) {\n var div = document.createElement(\"div\");\n div.id = this.name.target;\n var node = document.documentElement ||\n document.getElementsByTagName(\"body\")[0] ||\n document.getElementsByTagName(\"head\")[0];\n node.appendChild(div);\n }\n this.options.target = document.getElementById(this.name.target);\n }\n if (this.container) {\n this.options.target.appendChild(this.container);\n }\n return this;\n }\n\n /**\n * Set display container or get\n *\n * @param {Boolean} display - show/hidden container or get status\n * @returns {Boolean} - true/false\n */\n display (display) {\n logger.trace(\"display()\", display);\n if (typeof display !== \"undefined\") {\n this.container.style.display = (display) ? \"flex\" : \"none\";\n }\n return (this.container.style.display === \"flex\");\n }\n\n /**\n * Is editable\n *\n * @returns {Boolean} - true/false\n */\n isEditable () {\n return this.editable;\n }\n\n /**\n * Get container Legend Render (DOM)\n *\n * @returns {DOMElement} DOM element\n * @see Layer.prototype.slotLegend()\n * @example\n *
\n */\n getRenderContainer () {\n return this.rendercontainer;\n }\n\n /**\n * Get container Legend Tools (DOM)\n *\n * @returns {DOMElement} DOM element\n * @see Layer.prototype.slotLegend()\n * @example\n *
...
\n */\n getToolsContainer () {\n return this.toolscontainer;\n }\n\n /**\n * Get container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Legend#editor:legend:onclickedition\n */\n onEditionLegendMapBox (e) {\n logger.trace(\"onEditionLegendMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.legend.onclickedition, e);\n }\n\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Legend#editor:legend:onchangevalue\n */\n onChangeValueLegendMapBox (e) {\n logger.trace(\"onChangeValueLegendMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.legend.onchangevalue, e);\n }\n\n};\n\n// ################################################################### //\n// ########################## CONSTANTES ############################# //\n// ################################################################### //\n\n/**\n * List of supported properties\n */\nLegend.PROPERTIES = {\n line : [\n \"line-color\",\n \"line-dasharray\",\n \"line-opacity\",\n \"line-width\"\n ],\n fill : [\n \"fill-color\",\n \"fill-opacity\",\n \"fill-outline-color\",\n \"fill-pattern\"\n ],\n background : [\n \"background-color\",\n \"background-opacity\",\n \"background-pattern\"\n ],\n circle : [\n \"circle-color\",\n \"circle-opacity\",\n \"circle-stroke-color\",\n \"circle-stroke-opacity\",\n \"circle-stroke-width\"\n ],\n icon : [\n \"icon-color\",\n \"icon-image\",\n \"icon-opacity\",\n \"__icon-size\"\n ],\n text : [\n \"__text-anchor\",\n \"text-color\",\n \"text-field\",\n \"__text-font\",\n \"__text-opacity\",\n \"__text-size\"\n ]\n};\n\nexport default Legend;\n\n// Expose Editor as ol.editor.View (for a build bundle)\nif (window.ol && window.ol.style) {\n if (!window.ol.style.editor) {\n window.ol.style.editor = {};\n } \n window.ol.style.editor.Legend = Legend;\n}\n","import EventBus from \"eventbusjs\";\nimport EventEditor from \"./Event\";\nimport Style from \"./Style\";\nimport Legend from \"./Legend\";\nimport Filter from \"./Filter\";\nimport Utils from \"../../Utils/Helper\";\nimport Logger from \"../../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"editor-layer\");\n\n/**\n * @classdesc\n *\n * MapBox filter management\n *\n * @constructor\n * @alias ol.style.editor.Layer\n * @param {Object} options - options for function call.\n * @example\n * var layers = new Layer ({\n * target : ...,\n * position : 1, // identifiant de position (unique !)\n * tools : {\n * \"visibility\" : true, // afficher l'icone de visibilité\n * \"icon\" : {\n * \"image\" : true, // afficher l'icone \"oeil\" (defaut) ou une checkbox\n * \"anchor\" : \"start\" | \"end\" // afficher l'icone au debut ou à la fin (defaut)\n * },\n * \"type\" : true, // afficher l'icone du type de geometrie\n * \"pin\" : true, // afficher l'icone de puce\n * \"remove\" : false, // TODO afficher l'icone de suppression\n * \"clone\" : false // TODO afficher l'icone de duplication\n * },\n * obj : {\n * \"id\": \"ocs - vegetation\", // MANDATORY\n * \"type\": \"fill\", // OPTIONAL\n * \"source\": \"pyramide_proto\", // OPTIONAL\n * \"source-layer\": \"ocs_vegetation_surf\" // OPTIONAL\n * }\n * });\n * layers.addLegend(oLegend);\n * layers.slotLegend();\n * layers.addStyle(oStyle);\n * layers.addFilter(oFilter);\n * layers.add();\n * layers.active(false);\n * layers.visibility(false);\n * layers.display(false);\n * layers.collapse();\n * EventBus.addEventListener(\"editor:layer:onclickvisibility\", function (e) {\n * // e.target.data : options !\n * // e.target.editorID : id or null\n * }, this);\n */\nclass Layer {\n\n constructor (options) {\n logger.trace(\"[constructor] Layer\", options);\n\n // options\n this.options = options || {};\n\n if (!(this instanceof Layer)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this._initialize();\n\n this._initContainer();\n }\n\n // ################################################################### //\n // ##################### private methods ############################# //\n // ################################################################### //\n /**\n * Initialize component\n * (called by constructor)\n *\n * @private\n */\n _initialize () {\n // unique editor id (optional!)\n this.id = this.options.id || null; // null si le layer n'appartient pas à un editeur !\n\n if (!this.options.target) {\n // cf. add()\n }\n\n if (!this.options.position) {\n this.options.position = 0;\n }\n\n var _toolsDefault = {\n visibility : true,\n icon : {\n image : true,\n anchor : \"end\"\n },\n type : true,\n pin : true,\n remove : false, // TODO\n clone : false // TODO\n };\n\n if (!this.options.tools) {\n this.options.tools = _toolsDefault;\n }\n\n Utils.mergeParams(this.options.tools, _toolsDefault, false);\n\n var _objDefault = {\n id : \"\",\n type : \"\", // icone sur le type de geometrie\n source : \"\",\n \"source-layer\" : \"\"\n };\n\n if (!this.options.obj) {\n this.options.obj = _objDefault;\n }\n\n Utils.mergeParams(this.options.obj, _objDefault, false);\n\n // legende intégrée\n this.bSlotLegend = false;\n\n // obj\n this.oFilter = null;\n this.oStyle = null;\n this.oLegend = null;\n\n // dom\n this.container = null;\n this.DomVisibility = null;\n this.DomToggle = null;\n\n // DOM : className or id\n this.name = {\n target : \"GPEditorMapBoxLayerTarget\",\n container : \"GPEditorMapBoxLayerContainer\",\n containerlegend : \"GPEditorMapBoxLayerLegendContainer\",\n containertitle : \"GPEditorMapBoxLayerTitleContainer\",\n imagelabelinput : \"GPEditorMapBoxLayerImageInput\",\n imagelabel : \"GPEditorMapBoxLayerImageLabel\",\n typeimg : \"GPEditorMapBoxLayerTypeImage\",\n titleinput : \"GPEditorMapBoxLayerTitleInput\",\n titlelabel : \"GPEditorMapBoxLayerTitleLabel\",\n containertools : \"GPEditorMapBoxToolsContainer\",\n visibilityinput : \"GPEditorMapBoxToolsVisibilityInput\",\n visibilitylabel : \"GPEditorMapBoxToolsVisibilityLabel\",\n visibilityinputdisable : \"GPEditorMapBoxToolsVisibilityInputDisable\",\n visibilitylabeldisable : \"GPEditorMapBoxToolsVisibilityLabelDisable\"\n };\n }\n\n /**\n * Graphical rendering of the component\n * (called by constructor)\n *\n * @private\n * @example\n * // >> Titre 1 |OOO| <- menu tools : visibility, clone, remove\n * // >> Titre 2 |OXX| <- affichage configurable (cf. options.tools)\n * // Event : clic sur le titre -> ex. affiche le menu des styles / filtres\n * // : clic visibility, clone, remove\n * // DOM :\n *
\n *
\n * \n * \n * \n * \n *
\n *
\n * \n * \n *
\n *
\n */\n _initContainer () {\n // contexte\n var self = this;\n\n var obj = this.options.obj;\n\n var div = document.createElement(\"div\");\n div.className = this.name.container;\n\n // title\n var divTitle = document.createElement(\"div\");\n divTitle.id = this.name.containertitle + \"-\" + this.options.position;\n divTitle.className = this.name.containertitle;\n\n // puce\n if (this.options.tools.pin) { // Optionnel !\n // input\n var inputImage = document.createElement(\"input\");\n inputImage.id = this.name.imagelabelinput + \"-\" + this.options.position;\n inputImage.className = this.name.imagelabelinput;\n inputImage.type = \"checkbox\";\n divTitle.appendChild(inputImage);\n // puce\n var labelImage = document.createElement(\"label\");\n labelImage.className = this.name.imagelabel;\n labelImage.htmlFor = inputImage.id;\n if (labelImage.addEventListener) {\n labelImage.addEventListener(\"click\", function (e) {\n self.onClickLayerMapBox(e);\n });\n } else if (labelImage.attachEvent) {\n labelImage.attachEvent(\"onclick\", function (e) {\n self.onClickLayerMapBox(e);\n });\n }\n divTitle.appendChild(labelImage);\n }\n\n // tools :\n // visibility, (remove, clone)\n var _addTools = function () {\n var divTools = document.createElement(\"div\");\n divTools.id = this.name.containertools + \"-\" + this.options.position;\n divTools.className = this.name.containertools;\n\n // visibility\n if (this.options.tools.visibility) {\n var inputTools = document.createElement(\"input\");\n inputTools.id = this.name.visibilityinput + \"-\" + this.options.position;\n inputTools.className = (this.options.tools.icon.image) ? this.name.visibilityinput : this.name.visibilityinputdisable;\n inputTools.type = \"checkbox\";\n inputTools.checked = \"checked\"; // par défaut, à modifier via visibility(true|false) !\n\n // event for visibility change\n if (inputTools.addEventListener) {\n inputTools.addEventListener(\"click\", function (e) {\n self.onVisibilityLayerMapBox(e);\n });\n } else if (inputTools.attachEvent) {\n // internet explorer\n inputTools.attachEvent(\"onclick\", function (e) {\n self.onVisibilityLayerMapBox(e);\n });\n }\n divTools.appendChild(inputTools);\n // enregistrement utile pour la méthode : visibility()\n this.DomVisibility = inputTools;\n\n var labelTools = document.createElement(\"label\");\n labelTools.htmlFor = this.name.visibilityinput + \"-\" + this.options.position;\n labelTools.id = this.name.visibilitylabel + \"-\" + this.options.position;\n labelTools.className = (this.options.tools.icon.image) ? this.name.visibilitylabel : this.name.visibilitylabeldisable;\n labelTools.title = \"Afficher/masquer la couche\";\n divTools.appendChild(labelTools);\n\n div.appendChild(divTools);\n }\n\n // clone\n if (this.options.tools.clone) {\n // TODO...\n logger.warn(\"Dom for tools clone, it's not yet implemented !\");\n }\n\n // remove\n if (this.options.tools.remove) {\n // TODO...\n logger.warn(\"Dom for tools remove, it's not yet implemented !\");\n }\n };\n\n // ajout des outils au debut du composant\n if (this.options.tools.icon.anchor === \"start\") {\n _addTools.apply(this);\n }\n\n // type\n if (this.options.tools.type && obj.type) { // Optionnel !\n var imgType = document.createElement(\"img\");\n imgType.className = this.name.typeimg;\n // FIXME il faudrait faire la difference entre :\n // - icone uniquement : SYMBOL-ICON\n // - texte uniquement : SYMBOL-TEXT\n // - les 2 : SYMBOL\n // Mais il nous faut les styles complets (paint & layout)\n // pour determiner les 3 types !\n switch (obj.type.toUpperCase()) {\n case \"SYMBOL-ICON\": // not used !\n imgType.style[\"background-position\"] = \"0px 0\";\n break;\n case \"SYMBOL-TEXT\": // not used !\n imgType.style[\"background-position\"] = \"-194px 0\";\n break;\n case \"SYMBOL\":\n imgType.style[\"background-position\"] = \"-84px 0\";\n break;\n case \"LINE\":\n imgType.style[\"background-position\"] = \"-28px 0\";\n break;\n case \"FILL\":\n imgType.style[\"background-position\"] = \"-56px 0\";\n break;\n case \"BACKGROUND\":\n imgType.style[\"background-position\"] = \"-140px 0\";\n break;\n case \"CIRCLE\":\n imgType.style[\"background-position\"] = \"-168px 0\";\n break;\n default:\n // type inconnu ou non pris en charge ou par defaut\n imgType.style[\"background-position\"] = \"-112px 0\";\n }\n divTitle.appendChild(imgType);\n }\n\n // container legend (empty)\n var divLegend = document.createElement(\"div\");\n divLegend.id = this.name.containerlegend + \"-\" + this.options.position;\n divLegend.className = this.name.containerlegend;\n divTitle.appendChild(divLegend);\n\n // input\n var inputTitle = document.createElement(\"input\");\n inputTitle.id = this.name.titleinput + \"-\" + this.options.position;\n inputTitle.className = this.name.titleinput;\n inputTitle.type = \"checkbox\";\n divTitle.appendChild(inputTitle);\n\n // label for\n var labelTitle = document.createElement(\"label\");\n labelTitle.className = this.name.titlelabel;\n labelTitle.htmlFor = inputTitle.id;\n labelTitle.innerHTML = obj[\"id\"] || obj[\"source-layer\"] || obj[\"source\"];\n labelTitle.title = obj[\"source-layer\"] || obj[\"source\"] || obj[\"id\"];\n if (labelTitle.addEventListener) {\n labelTitle.addEventListener(\"click\", function (e) {\n self.onClickLayerMapBox(e);\n });\n } else if (labelTitle.attachEvent) {\n labelTitle.attachEvent(\"onclick\", function (e) {\n self.onClickLayerMapBox(e);\n });\n }\n divTitle.appendChild(labelTitle);\n // enregistrement utile pour la méthode : collapse()\n this.DomToggle = labelTitle;\n\n div.appendChild(divTitle);\n\n // ajout des outils au fin du composant\n if (this.options.tools.icon.anchor === \"end\") {\n _addTools.apply(this);\n }\n\n // main container\n this.container = div;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n /**\n * Add element into target DOM\n * @returns {Object} - Layer instance\n */\n add () {\n logger.trace(\"add()\");\n if (!this.options.target) {\n if (!document.getElementById(this.name.target)) {\n var div = document.createElement(\"div\");\n div.id = this.name.target;\n var node = document.documentElement ||\n document.getElementsByTagName(\"body\")[0] ||\n document.getElementsByTagName(\"head\")[0];\n node.appendChild(div);\n }\n this.options.target = document.getElementById(this.name.target);\n }\n if (this.container) {\n this.options.target.appendChild(this.container);\n }\n return this;\n }\n\n /**\n * Add style in the submenu\n *\n * @param {Object} style - style object\n */\n addStyle (style) {\n logger.trace(\"addStyle()\", style);\n if (style && typeof style === \"object\" && style instanceof Style) {\n this.oStyle = style;\n this.oStyle.display(false); // par defaut !\n }\n }\n\n /**\n * Add filter in the submenu\n *\n * @param {Object} filter - filter object\n */\n addFilter (filter) {\n logger.trace(\"addFilter()\", filter);\n if (filter && typeof filter === \"object\" && filter instanceof Filter) {\n this.oFilter = filter;\n this.oFilter.display(false); // par defaut !\n }\n }\n\n /**\n * Add Legend in the submenu\n *\n * @param {Object} legend - legend object\n */\n addLegend (legend) {\n logger.trace(\"addLegend()\", legend);\n if (legend && typeof legend === \"object\" && legend instanceof Legend) {\n this.oLegend = legend;\n this.oLegend.display(false); // par defaut !\n }\n }\n\n /**\n * Integrate Legend to the layer container\n */\n slotLegend () {\n // cas particulier :\n // on souhaite intégrer une partie de la legende dans le container du layer.\n var legend = this.oLegend;\n if (legend) {\n // FIXME c'est pourri...\n var node = null;\n var nodesLvl1 = this.container.childNodes;\n if (nodesLvl1.length) {\n // selon où se situe l'icone de visibilité : au debut ou à la fin...\n var idx = (this.options.tools.icon.anchor === \"start\") ? 1 : 0;\n var nodesLvl2 = nodesLvl1[idx].childNodes;\n // on recherche le container de la legende\n for (var i = 0; i < nodesLvl2.length; i++) {\n var curnode = nodesLvl2[i];\n if (curnode.id.indexOf(this.name.containerlegend) !== -1) {\n node = curnode;\n }\n }\n }\n if (node) {\n var render = legend.getRenderContainer();\n if (render) {\n node.appendChild(render);\n // legende intégrée\n this.bSlotLegend = true;\n }\n }\n }\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n /**\n * Set visibility or get\n *\n * @param {Boolean} display - set visibility or undefined to get status\n * @returns {Boolean} - true/false\n */\n visibility (display) {\n logger.trace(\"visibility()\", display);\n if (!this.options.tools.visibility) {\n return;\n }\n if (typeof display !== \"undefined\") {\n this.DomVisibility.checked = (display) ? \"checked\" : \"\";\n }\n return this.DomVisibility.checked;\n }\n\n /**\n * Collapse a layer panel (event)\n */\n collapse () {\n logger.trace(\"collapse()\");\n this.DomToggle.click();\n }\n\n /**\n * Click on visibility icon (event)\n */\n visible () {\n logger.trace(\"visible()\");\n if (!this.options.tools.visibility) {\n return;\n }\n this.DomVisibility.click();\n }\n\n /**\n * Set collapse or get\n *\n * @param {Boolean} display - show/hidden container or get status\n * @returns {Boolean} - true/false\n */\n display (display) {\n logger.trace(\"display()\", display);\n var checked = document.getElementById(this.DomToggle.htmlFor).checked;\n if (typeof display !== \"undefined\") {\n this.container.style.display = (display) ? \"inline-flex\" : \"none\";\n if (this.oStyle) {\n this.oStyle.display(display && checked);\n }\n if (this.oFilter) {\n this.oFilter.display(display && checked);\n }\n if (this.oLegend) {\n this.oLegend.display(display && checked);\n }\n }\n return checked;\n }\n\n /**\n * Set disabled/enabled status or get\n *\n * @param {Boolean} active - disable/enable layer interaction or get status\n * @returns {Boolean} - true/false\n */\n active (active) {\n logger.trace(\"active()\", active);\n if (typeof active !== \"undefined\") {\n this.container.className = (active)\n ? this.name.container\n : this.name.container + \" disabled\";\n }\n return (this.container.className === this.name.container);\n }\n\n /**\n * Get container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n /**\n * this method is called by event '' on '' tag form\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onClickLayerMapBox (e) {\n logger.trace(\"onClickLayerMapBox\", e);\n\n var id = e.target.htmlFor.substring(e.target.htmlFor.indexOf(\"-\"));\n var checked = document.getElementById(e.target.htmlFor).checked;\n\n // gestion des inputs\n if (e.target.htmlFor === this.name.imagelabelinput + id) {\n document.getElementById(this.name.titleinput + id).checked = !checked;\n }\n if (e.target.htmlFor === this.name.titleinput + id) {\n // si options.pin:false, ce DOM n'existe pas !\n if (document.getElementById(this.name.imagelabelinput + id)) {\n document.getElementById(this.name.imagelabelinput + id).checked = !checked;\n }\n }\n\n // ouverture du panneau des styles / filtres\n if (this.oStyle) {\n this.oStyle.display(!checked);\n }\n if (this.oFilter) {\n this.oFilter.display(!checked);\n }\n // attention,\n // si la legende est non editable, elle ne se trouve pas dans le sous menu !\n if (this.oLegend && this.oLegend.isEditable()) {\n this.oLegend.display(!checked);\n }\n }\n\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Layer#editor:layer:onclickvisibility\n */\n onVisibilityLayerMapBox (e) {\n logger.trace(\"onVisibilityLayerMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.layer.onclickvisibility, e);\n }\n\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Layer#editor:layer:onclickclone\n */\n onCloneLayerMapBox (e) {\n logger.trace(\"onCloneLayerMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.layer.onclickclone, e);\n }\n\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Layer#editor:layer:onclickremove\n */\n onRemoveLayerMapBox (e) {\n logger.trace(\"onRemoveLayerMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.layer.onclickremove, e);\n }\n\n};\n\nexport default Layer;\n\n// Expose Editor as ol.editor.View (for a build bundle)\nif (window.ol && window.ol.style) {\n if (!window.ol.style.editor) {\n window.ol.style.editor = {};\n } \n window.ol.style.editor.Layer = Layer;\n}\n","import EventBus from \"eventbusjs\";\nimport EventEditor from \"./Event\";\nimport Logger from \"../../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"editor-group\");\n\n/**\n * @classdesc\n *\n * MapBox group management\n *\n * @constructor\n * @alias ol.style.editor.Group\n * @param {Object} options - options for function call.\n * @example\n * var group = new Group ({\n * title : \"MyGroup\",\n * collapse : true, // plier/deplier\n * target : ...\n * });\n * group.add();\n * group.add();\n */\nclass Group {\n\n constructor (options) {\n logger.trace(\"[constructor] Group\", options);\n\n // options\n this.options = options || {\n // default...\n };\n\n if (!(this instanceof Group)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this._initialize();\n\n this._initContainer();\n }\n\n /**\n * Initialize component\n * (called by constructor)\n *\n * @private\n */\n _initialize () {\n // unique editor id (optional!)\n this.id = this.options.id || null;\n\n if (!this.options.target) {\n // cf. add()\n }\n\n if (!this.options.title) {\n // cf. summary\n this.options.title = \"Détails du groupe...\";\n }\n\n // plier par defaut\n if (typeof this.options.collapse === \"undefined\") {\n this.options.collapse = true;\n }\n\n this.container = null;\n\n // DOM : className or id\n this.name = {\n target : \"GPEditorMapBoxGroupTarget\",\n container : \"GPEditorMapBoxGroupContainer\",\n details : \"GPEditorMapBoxGroupDetails\",\n summary : \"GPEditorMapBoxGroupSummary\"\n };\n }\n\n /**\n * Graphical rendering of the component\n * (called by constructor)\n *\n * @private\n * @example\n *
...
\n */\n _initContainer () {\n var div = document.createElement(\"div\");\n div.className = this.name.container;\n\n // FIXME pas compatible IE !\n // https://caniuse.com/#search=details\n // cf. https://css-tricks.com/quick-reminder-that-details-summary-is-the-easiest-way-ever-to-make-an-accordion/\n var details = document.createElement(\"details\");\n details.className = this.name.details;\n details.open = !this.options.collapse;\n div.appendChild(details);\n\n var summary = document.createElement(\"summary\");\n summary.className = this.name.summary;\n summary.innerHTML = this.options.title;\n details.appendChild(summary);\n\n // main container\n this.container = div;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n /**\n * Add element into target DOM\n */\n add () {\n if (!this.options.target) {\n if (!document.getElementById(this.name.target)) {\n var div = document.createElement(\"div\");\n div.id = this.name.target;\n var node = document.documentElement ||\n document.getElementsByTagName(\"body\")[0] ||\n document.getElementsByTagName(\"head\")[0];\n node.appendChild(div);\n }\n this.options.target = document.getElementById(this.name.target);\n }\n if (this.container) {\n this.options.target.appendChild(this.container);\n }\n }\n\n /**\n * Set display container (DOM)\n *\n * @param {Boolean} display - show/hidden container\n */\n display (display) {\n this.container.style.display = (display) ? \"flex\" : \"none\";\n }\n\n /**\n * Get container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n getContainer () {\n var nodes = this.container.childNodes;\n if (nodes.length) {\n // retourne le noeud \"details\" !\n return nodes[0];\n }\n // sinon le container principal\n return this.container;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n /**\n * this method is called by event '' on '' tag form\n *\n * NOT USED !\n * @param {Object} e - HTMLElement\n * @private\n * @fires Group#editor:group:oncollapse\n */\n onCollapseGroupMapBox (e) {\n logger.trace(\"onCollapseGroupMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.group.oncollapse, e);\n }\n\n};\n\nexport default Group;\n","import EventBus from \"eventbusjs\";\nimport EventEditor from \"./Event\";\nimport Utils from \"../../Utils/Helper\";\nimport Logger from \"../../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"editor-search\");\n\n/**\n * @classdesc\n *\n * TODO MapBox search management\n *\n * @constructor\n * @alias ol.style.editor.Search\n * @param {Object} options - options for function call.\n * @todo\n * @example\n * var Search = new Search ({\n * target : ...,\n * tools : {\n * // ...\n * }\n * title : \"Filtres de recherche :\",\n * obj : {}\n * });\n * Search.add();\n * Search.display(true);\n * Search.getContainer();\n */\nclass Search {\n\n constructor (options) {\n logger.trace(\"[constructor] Search\", options);\n\n // options\n this.options = options || {\n // default...\n target : null,\n tools : null,\n title : null,\n obj : null\n };\n\n if (!(this instanceof Search)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this._initialize();\n\n this._initContainer();\n }\n\n /**\n * Initialize component\n * (called by constructor)\n *\n * @private\n */\n _initialize () {\n // unique editor id (optional!)\n this.id = this.options.id || null;\n\n if (!this.options.target) {\n // cf. add()\n }\n\n var _toolsDefault = {};\n\n if (!this.options.tools) {\n this.options.tools = _toolsDefault;\n }\n\n Utils.mergeParams(this.options.tools, _toolsDefault, false);\n\n if (!this.options.obj) {\n // choix d'avoir un objet vide pour une edition futur...\n this.options.obj = {};\n }\n\n if (!this.options.title) {\n this.options.title = \"Recherche de couches :\";\n }\n this.container = null;\n\n // DOM : className or id\n this.name = {\n target : \"GPEditorMapBoxSearchTarget\",\n container : \"GPEditorMapBoxSearchContainer\"\n // TODO ...\n };\n }\n\n /**\n * Graphical rendering of the component\n * (called by constructor)\n *\n * @private\n * @example\n *
\n * // ...\n *
\n */\n _initContainer () {\n // contexte\n // var self = this;\n var _search = JSON.parse(JSON.stringify(this.options.obj)); // on manipule une copie !\n\n if (_search.layers) {\n if (_search.layers.length === 0) {\n logger.info(\"tag 'layers' is empty !\");\n }\n }\n\n var div = document.createElement(\"div\");\n div.className = this.name.container;\n\n // TODO...\n // outil de recherche des couches mapbox.\n // 2 modes de recherches : exact ou par autocompletion\n // affichage des resultats directement dans la liste des couches\n // la recherche porte sur les champs suiavnts (options):\n // * id (par defaut)\n // * source-layer (par defaut)\n // * type (ex. Symbol)\n // * field (ex. HOPITAL_PONC) > recherche dans le champs filtre\n // main container\n this.container = div;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n /**\n * Add element into target DOM\n * @returns {Object} - Search instance\n */\n add () {\n if (!this.options.target) {\n if (!document.getElementById(this.name.target)) {\n var div = document.createElement(\"div\");\n div.id = this.name.target;\n var node = document.documentElement ||\n document.getElementsByTagName(\"body\")[0] ||\n document.getElementsByTagName(\"head\")[0];\n node.appendChild(div);\n }\n this.options.target = document.getElementById(this.name.target);\n }\n if (this.container) {\n this.options.target.appendChild(this.container);\n }\n return this;\n }\n\n /**\n * Set display container or get\n *\n * @param {Boolean} display - show/hidden container or get status\n * @returns {Boolean} - true/false\n */\n display (display) {\n logger.trace(\"display()\", display);\n if (typeof display !== \"undefined\") {\n this.container.style.display = (display) ? \"flex\" : \"none\";\n }\n return (this.container.style.display === \"flex\");\n }\n\n /**\n * Get container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Search#editor:search:onsubmit\n */\n onSubmitSearchLayersMapBox (e) {\n logger.trace(\"onSubmitSearchLayersMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.search.onsubmit, e);\n }\n\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Search#editor:search:onautocomplete\n */\n onAutocompleteSearchLayersMapBox (e) {\n logger.trace(\"onAutocompleteSearchLayersMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.search.onautocomplete, e);\n }\n\n};\n\nexport default Search;\n","var EditorDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n }\n};\n\nexport default EditorDOM;\n","// import CSS\nimport \"../../CSS/Controls/Editor/GPFeditor.css\";\n// import \"../../CSS/Controls/Editor/GPFeditorStyle.css\";\n// import library\nimport EventBus from \"eventbusjs\";\n// import local\nimport Utils from \"../../Utils/Helper\";\nimport ID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Style from \"./Style\";\nimport Themes from \"./Themes\";\nimport Filter from \"./Filter\";\nimport Legend from \"./Legend\";\nimport Layer from \"./Layer\";\nimport Group from \"./Group\";\nimport Event from \"./Event\";\nimport Search from \"./Search\";\n\n// DOM\nimport EditorDOM from \"./EditorDOM\";\n\nvar logger = Logger.getLogger(\"editor\");\n\n/**\n * @classdesc\n *\n * Editor Styles MapBox...\n *\n * @constructor\n * @alias ol.style.Editor\n * @param {Object} options - options for function call.\n * @fires editor:layer:onclickvisibility\n * @fires editor:layer:onclickclone\n * @fires editor:layer:onclickremove\n * @fires editor:style:oneditjson\n * @fires editor:style:scale:onchangemin\n * @fires editor:style:scale:onchangemax\n * @fires editor:legend:onclickedition\n * @fires editor:legend:onchangevalue\n * @fires editor:filter:oneditjson\n * @fires editor:themes:onclickimage\n * @fires editor:themes:onclicktitle\n * @fires editor:group:oncollapse\n * @fires editor:onloaded\n * @example\n * var editor = new Editor ({\n * target : \"\",\n * style : \"data/styles/layer.json\",\n * themes: {\n * themesSummary : \"\",\n * themes : [{\n * \"thumbnail\": \"data/images/layer0.png\",\n * \"name\": \"standard0\",\n * \"url\": \"data/styles/layer0.json\",\n * \"description\": \"\",\n * \"selected\" : true\n * },{\n * \"thumbnail\": \"data/images/layer1.png\",\n * \"name\": \"standard1\",\n * \"url\": \"data/styles/layer1.json\",\n * \"description\": \"\"\n * }]\n * },\n * scope : this,\n * events : {\n * \"editor:layer:onclickvisibility\" : ...,\n * \"editor:layer:onclickclone\" : ...,\n * \"editor:layer:onclickremove\" : ...,\n * \"editor:style:oneditjson\" : ...,\n * \"editor:style:scale:onchangemin\" : ...,\n * \"editor:style:scale:onchangemax\" : ...,\n * \"editor:filter:oneditjson\" : ...,\n * \"editor:themes:onclickimage\" : this._onClickEventImageTheme(),\n * \"editor:themes:onclicktitle\" : function(e) {...}\n * },\n * tools : {\n * // afficher/cacher les themes (par defaut) ou utiliser les options\n * themes : true | false | {\n * target : \"...\",\n * tools : {\n * \"thumbnails\": true,\n * \"button\": { visible : true, type : \"checkbox\" }\n * },\n * },\n * layers : true | false, // afficher les couches (layers)\n * search : true | false, // TODO : afficher l'outil de recheche de couches\n * style : true | false, // afficher les styles (sous menu layers)\n * filter : true | false, // afficher les filtres (sous menu layers)\n * legend : true | false, // afficher les legendes (layers)\n * group : true | false, // grouper les couches, l'option 'sort' doit être activée (layers)\n * groupAuto : true | false, // definir la construction automatiques des groupes\n * sort : true | false, // trier les couches (layers)\n * sortBy : \"id|class|geom\", // definir le type de tri (layers)\n * sortOrder : \"asc, desc\", // definir l'ordre de tri (layers)\n * title : true | false // afficher les titres des rubriques,\n * collapse : true | false | undefined // afficher et/ou plier les couches ou ne pas afficher l'option,\n * type : true | false, // afficher le type de geometrie (layers)\n * pin : true | false, // afficher la puce pour chaque couche (layers)\n * visibility : true | false, // afficher l'icone de visibilité (layers),\n * icon : { // afficher l'icone \"oeil\" ou \"checkbox\" (layers),\n * \"image\" : true,\n * \"anchor\" : \"start\" // afficher l'icone au debut ou à la fin de la ligne\n * },\n * editable : true | false // active l'edition de la legende (legendes)\n * }\n * });\n * // options par defaut\n * {\n * themes : false,\n * layers : true,\n * search : false,\n * style : false,\n * filter : false,\n * legend : false,\n * group : false,\n * groupAuto : false,\n * sort : true,\n * sortBy : \"id\",\n * sortOrder : \"asc\",\n * title : true,\n * collapse : undefined,\n * type : true,\n * pin : true,\n * visibility : true,\n * icon : {\n * image : true,\n * anchor : \"end\"\n * },\n * editable : true\n * }\n * // Context\n * editor.setContext(\"map\", map);\n * editor.setContext(\"layer\", layer);\n * // create DOM\n * editor.createElement()\n * .then(() => {\n * console.warn(editor.getID());\n * console.log(this.getContext(\"map\"));\n * console.log(this.getContext(\"layer\"));\n * })\n * .catch(error => {});\n * // possibility to add listeners with globale variable : eventbus\n * eventbus.addEventListener(\"editor:style:scale:onchangemin\", function (e) {...});\n */\nclass Editor {\n\n constructor (options) {\n logger.trace(\"[constructor] Editor\", options);\n\n // options\n this.options = options || {\n // TODO default...\n };\n\n if (!(this instanceof Editor)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this._initialize();\n }\n\n /**\n * Initialize component\n * (called by constructor)\n *\n * @private\n */\n _initialize () {\n // gestion des options\n if (!this.options.target) {\n logger.info(\"La 'target' n'est pas renseignée (options.target).\");\n }\n\n if (!this.options.style) {\n logger.error(\"Le 'style' MapBox n'est pas renseigné (options.style) !\");\n return;\n }\n\n if (this.options.events) {\n this._initEvents();\n } else {\n logger.warn(\"Les 'handlers' ne sont pas renseignés (options.events) !\");\n }\n\n if (!this.options.themes) {\n logger.info(\"Les 'themes' MapBox ne sont pas renseignés (options.themes).\");\n }\n\n // options par defaut\n var _toolsDefault = {\n themes : false,\n layers : true,\n search : false,\n style : false,\n filter : false,\n legend : false,\n group : false,\n groupAuto : false,\n sort : true,\n sortBy : \"id\",\n sortOrder : \"asc\",\n title : true,\n collapse : undefined,\n type : true,\n pin : true,\n visibility : true,\n icon : {\n image : true,\n anchor : \"end\"\n },\n editable : true\n };\n\n if (!this.options.tools) {\n logger.trace(\"Utilisation des outils MapBox par défaut (options.tools).\");\n this.options.tools = _toolsDefault;\n }\n\n Utils.mergeParams(this.options.tools, _toolsDefault, false);\n\n // id unique\n this.id = this.options.id || ID.generate();\n\n // context\n this.context = {};\n // property layers\n this.layers = [];\n // dom container\n this.container = null;\n // dom name\n this.name = {\n target : \"GPEditorMapBoxTarget\",\n container : \"GPEditorMapBoxContainer\",\n containerID : \"GPEditorMapBoxContainer_ID_\",\n containerLayers : \"GPEditorMapBoxLayersContainer\",\n titleLayers : \"GPEditorMapBoxLayersTitle\",\n titleLayersID : \"GPEditorMapBoxLayersTitle_ID_\",\n titleThemes : \"GPEditorMapBoxThemesTitle\",\n titleThemesID : \"GPEditorMapBoxThemesTitle_ID_\",\n sep : \"GPEditorMapBoxSep\"\n };\n // style json\n this.mapbox = {};\n // INFO\n // sprites :\n // {\n // url : null,\n // size : {\n // h : null,\n // w : null\n // },\n // json : {}\n // }\n this.sprites = {};\n }\n\n /**\n * Initialize events with handlers\n * (called by constructor)\n *\n * List Events :\n * \"editor:layer:visibility\"\n * \"editor:layer:clone\"\n * \"editor:layer:remove\"\n * \"editor:style:edit\"\n * \"editor:style:minScale\"\n * \"editor:style:maxScale\"\n * \"editor:filter:edit\"\n * \"editor:themes:image\",\n * \"editor:themes:title\"\n * @private\n */\n _initEvents () {\n var ctx = this.options.scope || this;\n var events = this.options.events;\n if (events) {\n for (var event in events) {\n if (events.hasOwnProperty(event)) {\n var handler = events[event];\n // test sur les events disponibles !\n if (handler) {\n if (!EventBus.hasEventListener(event, handler, ctx)) {\n EventBus.addEventListener(event, handler, ctx);\n }\n }\n }\n }\n }\n }\n\n /**\n * Graphical rendering of the component\n * (called by constructor)\n *\n * @example\n *
\n *
Liste des 'thèmes'
\n *
\n * ...\n *
\n *
Liste des 'couches'
\n *
\n *
\n *
\n * \n * \n * \n *
\n *
\n *
...
\n *
...
\n *
\n *
\n * @private\n */\n _initContainer () {\n logger.trace(this.mapbox);\n\n // existance d'un autre container (editeur) ?\n // var _idx = 0;\n // var elements = document.querySelectorAll(\"div[id^=\" + this.name.containerID + \"]\");\n // for (var j = 0; j < elements.length; j++) {\n // var element = elements[j];\n // var num = parseInt(element.id.substring(element.id.lastIndexOf(\"_\") + 1), 10);\n // if (num > _idx) {\n // _idx = num;\n // }\n // }\n // if (elements.length) {\n // _idx += 1;\n // }\n // container principal de l'editeur\n var div = document.createElement(\"div\");\n div.id = this.name.containerID + this.id;\n div.className = this.name.container;\n\n // Themes\n var _toolsThemes = this.options.tools.themes;\n if (_toolsThemes && this.options.themes) {\n // title\n if (this.options.tools.title) {\n var titleThemes = document.createElement(\"div\");\n titleThemes.id = this.name.titleThemesID + this.id;\n titleThemes.className = this.name.titleThemes;\n titleThemes.innerHTML = \"Liste des 'thèmes'\";\n div.appendChild(titleThemes);\n }\n\n // lien vers les styles\n var themes = new Themes({\n id : this.id,\n target : div,\n tools : (typeof _toolsThemes === \"object\") ? _toolsThemes : {},\n obj : this.options.themes\n });\n themes.add();\n }\n\n // TODO : Recheche / filtre de couches\n if (this.options.tools.search) {\n var search = new Search({\n id : this.id,\n target : div,\n tools : {},\n obj : this.mapbox.layers // liste des objets layers\n });\n search.add();\n }\n\n for (var source in this.mapbox.sources) {\n if (this.mapbox.sources.hasOwnProperty(source)) {\n if (this.options.tools.layers) {\n // multisources ? Si oui, on renseigne un titre...\n var multisources = (Object.keys(this.mapbox.sources).length > 1) ? 1 : 0;\n if (multisources) {\n var hr = document.createElement(\"hr\");\n hr.className = this.name.sep;\n div.appendChild(hr);\n }\n // title\n if (this.options.tools.title) {\n var titleLayers = document.createElement(\"div\");\n titleLayers.id = this.name.titleLayersID + this.id;\n titleLayers.className = this.name.titleLayers;\n titleLayers.innerHTML = (multisources) ? \"Liste des 'couches' (\" + source + \")\" : \"Liste des 'couches'\";\n div.appendChild(titleLayers);\n }\n }\n\n // gestion de l'ordre avant tri avec la metadata 'order'\n var _layers = this.mapbox.layers.slice(); // clone\n\n // une fois les layers triés, la metadata:geoportail:order permet\n // de savoir l'emplacement du layers dans le fichier de style.\n _layers.forEach(function (layer, order) {\n // on écarte les layers sans source: ex. \"background\"\n // if (!layer.source) {\n // return;\n // }\n // ajout de la metadata d'ordre\n var _metadata = layer[\"metadata\"];\n if (_metadata) {\n _metadata[\"geoportail:order\"] = order;\n } else {\n layer[\"metadata\"] = {\n \"geoportail:order\" : order\n };\n }\n });\n // tri des layers\n if (this.options.tools.sort) {\n var sortBy = this.options.tools.sortBy;\n var sortOrder = this.options.tools.sortOrder;\n var sortFct = function (a, b) {\n // si on utilise les groupements utilisateurs, ils doivent\n // tous être renseignés sinon..., ça va coincer !\n var result = 0;\n if (a[\"metadata\"] &&\n a[\"metadata\"][\"geoportail:group\"] &&\n b[\"metadata\"] &&\n b[\"metadata\"][\"geoportail:group\"]) {\n var cmpA = null;\n var cmpB = null;\n cmpA = a[\"metadata\"][\"geoportail:group\"];\n cmpB = b[\"metadata\"][\"geoportail:group\"];\n result = cmpA.localeCompare(cmpB);\n } else {\n switch (sortBy) {\n case \"geom\":\n result = sortOrder === \"asc\" ? a.type.localeCompare(b.type) || a.id.localeCompare(b.id)\n : b.type.localeCompare(a.type) || b.id.localeCompare(a.id);\n break;\n case \"class\":\n result = sortOrder === \"asc\" ? a[\"source-layer\"].localeCompare(b[\"source-layer\"]) || a.id.localeCompare(b.id)\n : b[\"source-layer\"].localeCompare(a[\"source-layer\"]) || b.id.localeCompare(a.id);\n break;\n case \"id\":\n default:\n // tri sur l'id par defaut\n result = sortOrder === \"asc\" ? a.id.localeCompare(b.id) : b.id.localeCompare(a.id);\n break;\n }\n }\n return result;\n };\n\n _layers.sort(sortFct);\n }\n\n logger.trace(\"Layers : \", _layers);\n\n // gestion des groupes avec la metadata de groupe\n var groupBy = this.options.tools.sortBy; // le même type de tri que les couches !\n var groupAuto = this.options.tools.groupAuto;\n var _groups = {}; // liste et comptage des layers dans chaque groupes\n _layers.forEach(function (layer) {\n // on écarte les layers sans source: ex. \"background\"\n // if (!layer.source) {\n // return;\n // }\n // balise metadata\n var _metadata = layer[\"metadata\"];\n // s'il existe déjà une meta de groupe, on l'utilise...\n // sinon, on la met en place.\n if (_metadata && _metadata[\"geoportail:group\"]) {\n var _groupName = _metadata[\"geoportail:group\"];\n _groups[_groupName] = (_groups[_groupName])\n ? _groups[_groupName] + 1 : 1;\n } else {\n var _field = null;\n switch (groupBy) {\n case \"class\":\n _field = layer[\"source-layer\"];\n break;\n case \"geom\":\n _field = layer.type;\n break;\n case \"id\":\n default:\n _field = layer.id;\n break;\n }\n var _newGroupName = _field;\n if (groupAuto) {\n // separateur\n var _regex = /_|-|:|=/; // TODO à definir via une option !\n\n // index\n var _idx = _field.search(_regex);\n // y'a t il un separateur ?\n _newGroupName = (_idx !== -1) ? _field.substring(0, _idx).trim() : _field;\n }\n // on compte le nombre d'entrée dans un groupe\n _groups[_newGroupName] = (_groups[_newGroupName])\n ? _groups[_newGroupName] + 1 : 1;\n\n // ajout de la metadata de groupe\n if (_metadata) {\n _metadata[\"geoportail:group\"] = _newGroupName;\n } else {\n layer[\"metadata\"] = {\n \"geoportail:group\" : _newGroupName\n };\n }\n }\n });\n\n logger.trace(\"Groups : \", _groups);\n\n // container principal des couches\n var divLayers = document.createElement(\"div\");\n divLayers.className = this.name.containerLayers;\n div.appendChild(divLayers);\n\n var details;\n if (this.options.tools.collapse !== undefined) {\n details = document.createElement(\"details\");\n details.className = \"\";\n details.open = !this.options.tools.collapse;\n divLayers.appendChild(details);\n\n var summary = document.createElement(\"summary\");\n summary.className = \"\";\n summary.innerHTML = \"\";\n details.appendChild(summary);\n }\n\n // container courant (cf. groupe) pour l'ajout des elements\n var target = (this.options.tools.collapse !== undefined) ? details : divLayers;\n\n // Ex. Layers, Styles, Groups et Filtres\n // \"id\": \"ocs - vegetation\",\n // \"type\": \"fill\",\n // \"source\": \"pyramide_proto\",\n // \"source-layer\": \"ocs_vegetation_surf\",\n // \"metadata\" : {\n // \"geoportail:group\": \"ocs\"\n // },\n // \"layout\": {\n // \"visibility\": \"visible\"\n // },\n // \"filter\": [\"in\",\"symbo\",\n // \"SURFACE_D_EAU\",\n // \"BASSIN\",\n // \"ZONE_MARINE\"\n // ],\n // \"paint\": {\n // \"fill-color\": \"#2BB3E1\"\n // }\n var index = -1;\n for (var ii = 0; ii < _layers.length; ii++) {\n var data = _layers[ii];\n index++;\n\n // traitement dans l'ordre des sources\n if (data.source === source) {\n // Groups\n // INFO la gestion des groupes est basée sur la balise metadata::geoportail:group\n // ainsi que sur l'ordre des couches.\n // il n'y a pas de regroupement sans tri des couches !\n if (this.options.tools.group && this.options.tools.sort) {\n var mtd = data.metadata;\n // creation du container de groupe\n // si le tag metadata existe\n if (mtd) {\n var grp = data.metadata[\"geoportail:group\"];\n if (grp) {\n // le groupe doit contenir plus d'un element\n if (_groups[grp] > 1) {\n // le groupe est déjà créé, on en veut plus par la suite...\n _groups[grp] = -1;\n // creation du groupe\n var oGroup = new Group({\n id : this.id,\n target : (this.options.tools.collapse !== undefined) ? details : divLayers,\n title : grp,\n collapse : true\n });\n oGroup.add();\n // le nouveau container pour les elements suivants\n target = oGroup.getContainer();\n } else if (_groups[grp] === 1) {\n // l'element est seul, donc pas d'ajout dans le\n // groupe en cours\n target = (this.options.tools.collapse !== undefined) ? details : divLayers;\n } else {\n // on ajoute l'element dans le groupe courant...\n }\n } else {\n target = (this.options.tools.collapse !== undefined) ? details : divLayers;\n }\n } else {\n target = (this.options.tools.collapse !== undefined) ? details : divLayers;\n }\n }\n // Layers\n if (this.options.tools.layers) {\n var oLayer = new Layer({\n id : this.id,\n target : target,\n position : index + \"_\" + this.id, // unique !\n tools : {\n visibility : this.options.tools.visibility,\n icon : this.options.tools.icon,\n type : this.options.tools.type,\n pin : this.options.tools.pin\n },\n obj : {\n id : data.id,\n type : data.type,\n source : data.source,\n \"source-layer\" : data[\"source-layer\"]\n }\n });\n oLayer.add();\n // update visibility layer\n if (data.layout && data.layout.visibility && data.layout.visibility === \"none\") {\n oLayer.visibility(false);\n }\n // sauvegarde des layers\n this.layers.push(oLayer);\n }\n // Legende\n if (this.options.tools.legend) {\n // gestion de l'edition de la legende :\n // l'option \"editable\" est prioritaire sur le tag \"editable\" du fichier de style !\n var isEditable = this.options.tools.editable;\n if (typeof isEditable === \"undefined\") {\n isEditable = data.editable;\n }\n var oLegend = new Legend({\n id : this.id,\n target : target,\n sprites : this.sprites,\n obj : {\n id : data.id,\n source : data.source,\n title : data.id,\n editable : (typeof isEditable !== \"undefined\") ? isEditable : false,\n paint : data.paint,\n layout : data.layout\n }\n });\n oLegend.add();\n oLegend.display(false);\n if (oLayer) {\n oLayer.addLegend(oLegend);\n oLayer.slotLegend(); // integration de la legende dans le container du layers !\n }\n }\n // Style\n if (this.options.tools.style) {\n var oStyle = new Style({\n id : this.id,\n target : target,\n position : index + \"_\" + this.id, // unique !,\n obj : {\n id : data.id,\n source : data.source,\n layout : data.layout,\n paint : data.paint\n }\n });\n oStyle.add();\n oStyle.display(false);\n if (oLayer) {\n oLayer.addStyle(oStyle);\n }\n // update visibility layer\n if (data.layout && data.layout.visibility && data.layout.visibility === \"none\") {\n oLayer.visibility(false);\n }\n }\n // Filter\n if (this.options.tools.filter) {\n var oFilter = new Filter({\n id : this.id,\n target : target,\n position : index + \"_\" + this.id, // unique !,\n obj : {\n id : data.id,\n source : data.source,\n filter : data.Filter\n }\n });\n oFilter.add();\n oFilter.display(false);\n if (oLayer) {\n oLayer.addFilter(oFilter);\n }\n }\n } else {\n // on ecarte un layer car il n'est pas reconnu dans la source\n // on decremente la position du layer\n if (index >= 0) {\n index--;\n }\n }\n }\n }\n }\n\n // sauvegarde\n this.container = div;\n\n // container principal\n if (!this.options.target) {\n if (!document.getElementById(this.name.target)) {\n var _target = document.createElement(\"div\");\n _target.id = this.name.target;\n var node = document.getElementsByTagName(\"body\")[0] ||\n document.getElementsByTagName(\"head\")[0] ||\n document.documentElement;\n node.appendChild(_target);\n }\n this.options.target = document.getElementById(this.name.target);\n }\n if (this.container) {\n this.options.target.appendChild(this.container);\n }\n // dispatch event\n EventBus.dispatch(Event.onloaded, this);\n }\n\n /**\n * Getting Sprites informations\n * (called by _initialize)\n *\n * @param {String} sprites - url des sprites\n * @returns {Promise} - promise\n * @private\n */\n _getSprites (sprites) {\n var self = this;\n\n // on ne doit pas mettre de promise en échec...\n // car on souhaite continuer le traitement même si on n'a pas de sprites !\n // si le protocole est mapbox://\n if (sprites && sprites.startsWith(\"mapbox://\")) {\n return new Promise((resolve, reject) => {\n logger.error(\"Protocole mapbox:// non géré !\");\n resolve(self);\n });\n }\n // si pas de sprites\n if (!sprites) {\n return new Promise((resolve, reject) => {\n logger.error(\"Auncun sprites disponibles !\");\n resolve(self);\n });\n }\n\n var fetchSpritesImage = function () {\n var spritesImage = sprites + \".png\";\n return fetch(spritesImage, {\n credentials : \"same-origin\"\n })\n .then(function (response) {\n if (response.ok) {\n return response.blob()\n .then(function (blob) {\n self.sprites.url = spritesImage;\n // decode de l'image\n var theImage = new Image();\n theImage.src = spritesImage;\n return theImage.decode()\n .then(function () {\n self.sprites.size = {};\n self.sprites.size.h = theImage.height;\n self.sprites.size.w = theImage.width;\n });\n })\n .catch(error => {\n logger.warn(\"fetch image sprites exception :\", error);\n });\n } else {\n var err = new Error(\"HTTP status code: \" + response.status);\n throw err;\n }\n })\n .catch(error => {\n return new Promise((resolve, reject) => {\n logger.error(\"fetch image sprites exception :\", error);\n reject(error);\n });\n });\n };\n var fetchSpritesJson = function () {\n var spritesJson = sprites + \".json\";\n return fetch(spritesJson, {\n credentials : \"same-origin\"\n })\n .then(function (response) {\n if (response.ok) {\n return response.json()\n .then(function (json) {\n self.sprites.json = json;\n })\n .catch(error => {\n logger.warn(\"fetch json sprites exception :\", error);\n });\n } else {\n var err = new Error(\"HTTP status code: \" + response.status);\n throw err;\n }\n })\n .catch(error => {\n return new Promise((resolve, reject) => {\n logger.error(\"fetch json sprites exception :\", error);\n reject(error);\n });\n });\n };\n\n // promise\n return Promise.all([\n fetchSpritesImage(),\n fetchSpritesJson()\n ]);\n }\n\n // ################################################################### //\n // ########################## INTERFACE ############################## //\n // ################################################################### //\n /**\n * Create Editor\n *\n * @returns {Promise} - promise\n */\n createElement () {\n var self = this;\n // objet json\n if (typeof this.options.style === \"object\") {\n this.mapbox = this.options.style;\n // les sprites sont utiles que si on veut une legende !\n if (this.options.tools.legend) {\n return this._getSprites(this.mapbox.sprite)\n .then(function () {\n // init du DOM\n self._initContainer();\n return self;\n })\n .catch(error => {\n logger.warn(\"fetch sprites exception :\", error);\n });\n } else {\n return new Promise((resolve, reject) => {\n self._initContainer();\n resolve(self);\n });\n }\n }\n\n // url\n if (typeof this.options.style === \"string\") {\n return fetch(this.options.style, {\n credentials : \"same-origin\"\n })\n .then(response => {\n // sauvegarde du json\n return response.json()\n .then(style => {\n self.mapbox = style;\n })\n .then(function () {\n // les sprites sont utiles que si on veut une legende !\n if (self.options.tools.legend) {\n return self._getSprites(self.mapbox.sprite)\n .then(function () {\n // init du DOM\n self._initContainer();\n return self;\n })\n .catch(error => {\n logger.warn(\"fetch sprites exception :\", error);\n });\n } else {\n return new Promise((resolve, reject) => {\n self._initContainer();\n resolve(self);\n });\n }\n })\n .catch(error => {\n logger.error(\"json exception :\", error);\n });\n })\n .catch(error => {\n logger.error(\"fetch exception :\", error);\n });\n }\n }\n\n /**\n * Set display container (DOM)\n *\n * @param {Boolean} display - show/hidden container\n */\n display (display) {\n this.container.style.display = (display) ? \"block\" : \"none\";\n }\n\n setContext (key, value) {\n this.context[key] = value;\n }\n\n getContext (key) {\n return this.context[key];\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n /**\n * Get id editor\n * @returns {Number} id\n */\n getID () {\n return this.id;\n }\n\n /**\n * Get container (DOM)\n * @returns {DOMElement} DOM element\n */\n getContainer () {\n return this.container;\n }\n\n /**\n * Get Style (json)\n * @returns {Object} Style MapBox\n */\n getStyle () {\n return this.mapbox;\n }\n\n /**\n * Get layer style (json)\n * @param {Number} i - index\n * @returns {Object} Style MapBox of a layers\n */\n getStyleLayer (i) {\n var layer = null;\n var o = this.getLayer(i);\n var id = o.options.obj.id;\n for (var k = 0; k < this.mapbox.layers.length; k++) {\n var l = this.mapbox.layers[k];\n if (l.id === id) {\n layer = l;\n break;\n }\n }\n return layer;\n }\n\n /**\n * Get layer object from json style\n * @param {Number} i - index into style json\n * @returns {Object} Style MapBox of a layers\n */\n getLayerFromStyle (i) {\n var layer = null;\n var l = this.mapbox.layers[i];\n for (var k = 0; k < this.getLayers().length; k++) {\n var o = this.getLayer(k);\n if (l.id === o.options.obj.id) {\n layer = o;\n break;\n }\n }\n return layer;\n }\n\n /**\n * Get a list of layer object sorted or not (see options.tools.sort)\n * @returns {Array} - List of layer object\n * @see {ol.style.editor.Layer}\n */\n getLayers () {\n return this.layers;\n }\n\n /**\n * Get the layer object from a list sorted or not (see options.tools.sort)\n * @param {Number} i - index\n * @returns {Object} - layer object\n * @see {ol.style.editor.Layer}\n */\n getLayer (i) {\n return this.layers[i];\n }\n\n};\n\n// on récupère les méthodes de la classe DOM\nUtils.assign(Editor.prototype, EditorDOM);\n\n// ################################################################### //\n// ####################### handlers events to dom #################### //\n// ################################################################### //\n\nexport default Editor;\n\n// Expose Editor as ol.editor.View (for a build bundle)\nif (window.ol && window.ol.style) {\n window.ol.style.Editor = Editor;\n}\n","import SelectorID from \"../../Utils/SelectorID\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar LayerImportDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Map loading\n *\n * @returns {DOMElement} container\n */\n _createLoadingElement : function () {\n var div = document.createElement(\"div\");\n div.id = \"GPmapLoading\";\n div.className = \"\";\n return div;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPimport\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ######################### show widget ############################# //\n // ################################################################### //\n\n\n /**\n * Show Import\n *\n * @returns {DOMElement} DOM element\n */\n _createShowImportPictoElement : function () {\n // contexte d'execution\n var self = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowImportPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowImportPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-import fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Ouvrir l'import de couches\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // Close all results and panels when minimizing the widget\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self._onShowImportClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self._onShowImportClick(e);\n });\n }\n\n return button;\n },\n\n // ################################################################### //\n // ################################ Panel ############################ //\n // ################################################################### //\n\n /**\n * Create Container Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createImportPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPimportPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n return dialog;\n },\n\n _createImportPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createImportPanelHeaderElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader GPelementVisible gpf-visible gpf-panel__header fr-modal__header\";\n return container;\n },\n\n /**\n * Create Return PIcto into Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createImportPanelReturnPictoElement : function () {\n var self = this;\n // return picto\n var returnDiv = document.createElement(\"button\");\n returnDiv.id = this._addUID(\"GPimportPanelReturnPicto\");\n returnDiv.title = \"Masquer le panneau\";\n returnDiv.className = \"GPreturnPicto GPimportPanelReturnPicto GPelementHidden gpf-hidden gpf-btn gpf-btn-icon-return fr-btn fr-btn--close fr-btn--tertiary-no-outline\";\n \n if (checkDsfr()) {\n var returnSpan = document.createElement(\"span\");\n returnSpan.className = \"GPelementHidden\";\n returnSpan.innerHTML = \"Retour\";\n returnDiv.appendChild(returnSpan);\n }\n if (returnDiv.addEventListener) {\n returnDiv.addEventListener(\"click\", function (e) {\n // on ferme le panneau\n document.getElementById(self._addUID(\"GPshowImportPicto\")).click();\n // on nettoie la fenêtre de résultats\n self._onReturnPictoClick(e);\n // on rouvre le panneau vierge\n document.getElementById(self._addUID(\"GPshowImportPicto\")).click();\n });\n } else if (returnDiv.attachEvent) {\n returnDiv.attachEvent(\"onclick\", function (e) {\n document.getElementById(self._addUID(\"GPshowImportPicto\")).click();\n self._onReturnPictoClick(e);\n document.getElementById(self._addUID(\"GPshowImportPicto\")).click();\n });\n }\n return returnDiv;\n },\n\n /**\n * Create Header Title Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createImportPanelTitleElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportHeaderTitle\");\n div.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n div.innerHTML = \"Import de données\";\n return div;\n },\n\n /**\n * Create Header close div\n *\n * @returns {DOMElement} DOM element\n */\n _createImportPanelCloseElement : function () {\n // contexte\n var self = this;\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPimportPanelClose\");\n divClose.className = \"GPpanelClose GPimportPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline\";\n divClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowImportPicto\")).click();\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowImportPicto\")).click();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n return divClose;\n },\n\n // ################################################################### //\n // ########################### Form panel ############################ //\n // ################################################################### //\n\n /**\n * Create Form\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createImportPanelFormElement : function () {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GPimportForm\");\n form.className = \"GPform GPelementVisible gpf-visible gpf-mobile-form gpf-panel__content fr-modal__content\";\n\n // TODO ?\n if (form.addEventListener) {\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n self._onImportSubmit();\n });\n } else if (form.attachEvent) {\n form.attachEvent(\"onsubmit\", function (e) {\n e.preventDefault();\n self._onImportSubmit();\n });\n }\n\n return form;\n },\n\n /**\n * Create Container for import type choice\n *\n * @param {Array} importTypes - import types to be displayed (and used)\n * @returns {DOMElement} DOM element\n */\n _createImportTypeLineElement : function (importTypes) {\n // contexte d'execution\n var context = this;\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportTypeLine\");\n div.className = \"GPimportInputLine\";\n\n var label = document.createElement(\"label\");\n label.id = this._addUID(\"GPimportTypeLabel\");\n label.className = \"GPlabel gpf-label fr-label\";\n label.innerHTML = \"Type de donnée\";\n label.title = \"Type de donnée\";\n div.appendChild(label);\n\n var select = document.createElement(\"select\");\n select.setAttribute(\"aria-labelledby\", this._addUID(\"GPimportTypeLabel\"));\n select.className = \"GPselect gpf-select fr-select\";\n // gestionnaire d'evenement : on stocke la valeur du type d'import\n if (select.addEventListener) {\n select.addEventListener(\"change\", function (e) {\n if (this.value === \"KML\" || this.value === \"GPX\" || this.value === \"GeoJSON\" || this.value === \"MAPBOX\") {\n // static import\n document.getElementById(context._addUID(\"GPimportStaticParams\")).className = \"GPelementVisible gpf-visible fr-my-4w\";\n document.getElementById(context._addUID(\"GPimportServiceParams\")).className = \"GPelementHidden gpf-hidden\";\n } else if (this.value === \"WMS\" || this.value === \"WMTS\" || this.value === \"WFS\") {\n // service import\n document.getElementById(context._addUID(\"GPimportServiceParams\")).className = \"GPelementVisible gpf-visible fr-my-4w\";\n document.getElementById(context._addUID(\"GPimportStaticParams\")).className = \"GPelementHidden gpf-hidden\";\n }\n context._onImportTypeChange(e);\n });\n } else if (select.attachEvent) {\n select.attachEvent(\"onchange\", function () {\n if (this.value === \"KML\" || this.value === \"GPX\" || this.value === \"GeoJSON\" || this.value === \"MAPBOX\") {\n // static import\n document.getElementById(context._addUID(\"GPimportStaticParams\")).className = \"GPelementVisible gpf-visible fr-my-4w\";\n document.getElementById(context._addUID(\"GPimportServiceParams\")).className = \"GPelementHidden gpf-hidden\";\n } else if (this.value === \"WMS\" || this.value === \"WMTS\" || this.value === \"WFS\") {\n // service import\n document.getElementById(context._addUID(\"GPimportServiceParams\")).className = \"GPelementVisible gpf-visible fr-my-4w\";\n document.getElementById(context._addUID(\"GPimportStaticParams\")).className = \"GPelementHidden gpf-hidden\";\n }\n context._onImportTypeChange();\n });\n }\n select.id = this._addUID(\"GPimportTypeSelect\");\n\n // on prend soit les valeurs passées par l'utilisateur, soit des valeurs par défaut\n if (!importTypes || !Array.isArray(importTypes)) {\n importTypes = [\n \"KML\",\n \"GPX\",\n \"GeoJSON\",\n \"MAPBOX\",\n \"WMS\",\n \"WMTS\",\n \"WFS\"\n ];\n }\n var option;\n for (var i = 0; i < importTypes.length; i++) {\n option = document.createElement(\"option\");\n option.value = importTypes[i];\n option.text = (importTypes[i] === \"MAPBOX\") ? \"Tuiles vectorielles\" : importTypes[i];\n select.appendChild(option);\n }\n\n div.appendChild(select);\n\n return div;\n },\n\n /**\n * Create Waiting Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createImportWaitingElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportWaitingContainer\");\n div.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n\n var p = document.createElement(\"p\");\n p.className = \"GPwaitingContainerInfo gpf-waiting_info\";\n p.innerHTML = \"Recherche en cours...\";\n div.appendChild(p);\n\n return div;\n },\n\n // ################################################################### //\n // ##### Params for static import (KML / GPX / GeoJSON) ############## //\n // ################################################################### //\n\n /**\n * Create container for KML/GPX/GeoJSON parameters\n * @param {String} currentType - GeoJSON, GPX or KML value\n * @returns {DOMElement} DOM element\n */\n _createImportStaticParamsContainer : function (currentType) {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportStaticParams\");\n if (currentType === \"KML\" || currentType === \"GPX\" || currentType === \"GeoJSON\" || currentType === \"MAPBOX\") {\n div.className = \"GPelementVisible gpf-visible fr-my-4w\";\n } else {\n div.className = \"GPelementHidden gpf-hidden\";\n }\n\n return div;\n },\n\n /**\n * Create name label for KML/GPX/GeoJSON parameters\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticNameLabel : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPimportInputLine fr-mb-1w\";\n\n var label = document.createElement(\"label\");\n label.className = \"GPlabel gpf-label fr-label\";\n label.htmlFor = this._addUID(\"GPimportName\");\n label.innerHTML = \"Nom\";\n label.title = \"Nom\";\n div.appendChild(label);\n\n var input = document.createElement(\"input\");\n input.type = \"text\";\n input.id = this._addUID(\"GPimportName\");\n input.className = \"GPinput gpf-input fr-input\";\n div.appendChild(input);\n\n return div;\n },\n\n /**\n * Create import choice for KML/GPX/GeoJSON parameters (local or url)\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticModeChoiceDiv : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportChoice\");\n div.className = \"fr-my-1w\";\n return div;\n },\n\n /**\n * Create local import choice for KML/GPX/GeoJSON parameters\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticLocalChoiceDiv : function () {\n var context = this;\n\n var div = document.createElement(\"div\");\n div.className = \"GPimportChoiceAlt gpf-radio-group fr-radio-group\";\n\n var input = document.createElement(\"input\");\n input.type = \"radio\";\n if (input.addEventListener) {\n input.addEventListener(\"change\", function (e) {\n document.getElementById(context._addUID(\"GPimportValueLocal\")).className = \"GPimportInputLine fr-mb-1w\";\n document.getElementById(context._addUID(\"GPimportValueUrl\")).className = \"GPelementHidden gpf-hidden\";\n context._onStaticImportTypeChange(e);\n });\n } else if (input.appendChild) {\n input.appendChild(\"onchange\", function () {\n document.getElementById(context._addUID(\"GPimportValueLocal\")).className = \"GPimportInputLine fr-mb-1w\";\n document.getElementById(context._addUID(\"GPimportValueUrl\")).className = \"GPelementHidden gpf-hidden\";\n context._onStaticImportTypeChange();\n });\n }\n input.name = \"GPimportChoiceMode\";\n input.value = \"local\";\n input.checked = true;\n input.id = this._addUID(\"GPimportChoiceAltLocal\");\n div.appendChild(input);\n\n var label = document.createElement(\"label\");\n label.className = \"GPimportChoiceAltTxt gpf-label fr-label\";\n label.htmlFor = this._addUID(\"GPimportChoiceAltLocal\");\n label.innerHTML = \"par fichier local\";\n label.title = \"par fichier local\";\n div.appendChild(label);\n\n return div;\n },\n\n /**\n * Create url import choice for KML/GPX/GeoJSON parameters\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticUrlChoiceDiv : function () {\n var context = this;\n\n var div = document.createElement(\"div\");\n div.className = \"GPimportChoiceAlt gpf-radio-group fr-radio-group\";\n\n var input = document.createElement(\"input\");\n input.type = \"radio\";\n if (input.addEventListener) {\n input.addEventListener(\"change\", function (e) {\n document.getElementById(context._addUID(\"GPimportValueUrl\")).className = \"GPimportInputLine\";\n document.getElementById(context._addUID(\"GPimportValueLocal\")).className = \"GPelementHidden gpf-hidden\";\n context._onStaticImportTypeChange(e);\n });\n } else if (input.appendChild) {\n input.appendChild(\"onchange\", function () {\n document.getElementById(context._addUID(\"GPimportValueUrl\")).className = \"GPimportInputLine\";\n document.getElementById(context._addUID(\"GPimportValueLocal\")).className = \"GPelementHidden gpf-hidden\";\n context._onStaticImportTypeChange();\n });\n }\n input.id = this._addUID(\"GPimportChoiceAltUrl\");\n input.name = \"GPimportChoiceMode\";\n input.value = \"url\";\n input.checked = false;\n div.appendChild(input);\n\n var label = document.createElement(\"label\");\n label.className = \"GPimportChoiceAltTxt gpf-label fr-label\";\n label.htmlFor = this._addUID(\"GPimportChoiceAltUrl\");\n label.innerHTML = \"par URL\";\n label.title = \"par URL\";\n div.appendChild(label);\n\n return div;\n },\n\n /**\n * Create input div for KML/GPX/GeoJSON parameters local import\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticLocalInputDiv : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportValueLocal\");\n div.className = \"GPimportInputLine\";\n return div;\n },\n\n /**\n * Create input label for KML/GPX/GeoJSON parameters local import\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticLocalInputLabel : function () {\n var label = document.createElement(\"label\");\n label.className = \"GPlabel gpf-label fr-label fr-mb-1w\";\n label.htmlFor = this._addUID(\"GPimportFile\");\n label.innerHTML = \"Fichier local\";\n label.title = \"Fichier local\";\n return label;\n },\n\n /**\n * Create file input for KML/GPX/GeoJSON parameters local import\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticLocalInput : function () {\n var input = document.createElement(\"input\");\n input.type = \"file\";\n input.id = this._addUID(\"GPimportFile\");\n input.className = \"GPimportInputFile gpf-upload fr-upload\";\n return input;\n },\n\n /**\n * Create input div for KML/GPX/GeoJSON parameters url import\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticUrlInputDiv : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportValueUrl\");\n div.className = \"GPelementHidden gpf-hidden\";\n return div;\n },\n\n /**\n * Create input label for KML/GPX/GeoJSON parameters url import\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticUrlInputLabel : function () {\n var label = document.createElement(\"label\");\n label.className = \"GPlabel gpf-label fr-label\";\n label.htmlFor = this._addUID(\"GPimportUrl\");\n label.innerHTML = \"URL\";\n label.title = \"URL\";\n return label;\n },\n\n /**\n * Create url input for KML/GPX/GeoJSON parameters url import\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticUrlInput : function () {\n var input = document.createElement(\"input\");\n input.type = \"text\";\n input.id = this._addUID(\"GPimportUrl\");\n input.className = \"GPinput gpf-input fr-input\";\n return input;\n },\n\n // ################################################################### //\n // ######## Params for service params import (WMS//WMTS/WFS) ######### //\n // ################################################################### //\n\n /**\n * Create container for WMS/WMTS/WFS parameters\n * @param {String} currentType - WMS, WMTS or WFS value\n * @returns {DOMElement} DOM element\n */\n _createServiceParamsContainer : function (currentType) {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportServiceParams\");\n if (currentType === \"WMS\" || currentType === \"WMTS\" || currentType === \"WFS\") {\n div.className = \"GPelementVisible gpf-visible\";\n } else {\n div.className = \"GPelementHidden gpf-hidden\";\n }\n\n return div;\n },\n\n /**\n * Create div for WMS/WMTS/WFS url\n *\n * @returns {DOMElement} DOM element\n */\n _createServiceUrlDiv : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPimportInputLine\";\n return div;\n },\n\n /**\n * Create input label for WMS/WMTS/WFS url\n *\n * @returns {DOMElement} DOM element\n */\n _createServiceUrlInputLabel : function () {\n var label = document.createElement(\"label\");\n label.className = \"GPlabel gpf-label fr-label\";\n label.htmlFor = this._addUID(\"GPimportServiceUrl\");\n label.innerHTML = \"URL du service\";\n label.title = \"URL du service\";\n return label;\n },\n\n /**\n * Create input for WMS/WMTS/WFS parameters url\n *\n * @returns {DOMElement} DOM element\n */\n _createServiceUrlInput : function () {\n var input = document.createElement(\"input\");\n input.type = \"text\";\n input.id = this._addUID(\"GPimportServiceUrl\");\n input.className = \"GPinput gpf-input fr-input\";\n return input;\n },\n\n // ################################################################### //\n // ########################### Submit Form ########################### //\n // ################################################################### //\n\n /**\n * Create Submit Form Element\n *\n * @returns {DOMElement} DOM element\n */\n _createImportSubmitFormElement : function () {\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPimportSubmit\");\n input.className = \"GPsubmit gpf-btn fr-btn\";\n input.type = \"submit\";\n input.value = \"Importer\";\n\n return input;\n },\n\n // ################################################################### //\n // ########################### GetCap Panel ########################## //\n // ################################################################### //\n\n /**\n * Create GetCap Panel Element\n *\n * @returns {DOMElement} DOM element\n */\n _createImportGetCapPanelElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportGetCapPanel\");\n div.className = \"GPpanel GPelementHidden gpf-panel fr-modal gpf-hidden\";\n return div;\n },\n\n /**\n * Create GetCap Panel Header Element\n *\n * @returns {DOMElement} DOM element\n */\n _createImportGetCapPanelHeaderElement : function () {\n // contexte\n var context = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n // panel title\n var panelTitle = document.createElement(\"div\");\n panelTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n panelTitle.innerHTML = \"Couches accessibles\";\n panelTitle.title = \"Couches accessibles\";\n container.appendChild(panelTitle);\n\n // close picto\n var closeDiv = document.createElement(\"button\");\n closeDiv.className = \"GPpanelClose GPimportGetCapPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n closeDiv.title = \"Fermer le panneau\";\n closeDiv.id = this._addUID(\"GPimportGetCapPanelClose\");\n if (closeDiv.addEventListener) {\n closeDiv.addEventListener(\"click\", function () {\n document.getElementById(context._addUID(\"GPshowImportPicto\")).click();\n document.getElementById(context._addUID(\"GPimportGetCapPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(context._addUID(\"GPimportGetCapPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n context._onGetCapPanelClose();\n });\n } else if (closeDiv.attachEvent) {\n closeDiv.attachEvent(\"click\", function () {\n document.getElementById(context._addUID(\"GPshowImportPicto\")).click();\n document.getElementById(context._addUID(\"GPimportGetCapPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(context._addUID(\"GPimportGetCapPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n context._onGetCapPanelClose();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n closeDiv.appendChild(span);\n\n container.appendChild(closeDiv);\n\n return container;\n },\n\n /**\n * Create GetCap Results List Element\n *\n * @returns {DOMElement} DOM element\n */\n _createImportGetCapResultsContainer : function () {\n var container = document.createElement(\"div\");\n container.className = \"GPimportGetCapRoot gpf-panel__list\";\n container.id = this._addUID(\"GPimportGetCapResults\");\n\n return container;\n },\n\n _addImportGetCapResultListRubrique : function (title, container) {\n var ul = document.createElement(\"ul\");\n ul.className = \"GPimportGetCapListRubrique\";\n ul.title = title;\n\n container.appendChild(ul);\n return container;\n },\n\n _addImportGetCapResultRubrique : function (title, container) {\n var li = document.createElement(\"li\");\n li.className = \"GPimportGetCapRubrique gpf-panel__items_layerimport\"; /* gpf-panel__items */\n\n // input\n var input = document.createElement(\"input\");\n input.id = \"GPimportGetCapRubrique-\" + SelectorID.generate();\n input.className = \"GPimportGetCapRubrique\";\n input.type = \"checkbox\";\n li.appendChild(input);\n\n // label for\n var label = document.createElement(\"label\");\n label.className = \"GPimportGetCapRubriqueTitle gpf-label fr-btn fr-btn--secondary\";\n label.htmlFor = input.id;\n label.innerHTML = title;\n label.title = title;\n li.appendChild(label);\n\n container.appendChild(li);\n return container;\n },\n\n _addImportGetCapResultListLayer : function (container) {\n var ul = document.createElement(\"ul\");\n ul.className = \"GPimportGetCapListLayer\";\n\n container.appendChild(ul);\n return container;\n },\n\n _addImportGetCapResultLayer : function (description, id, container) {\n var li = document.createElement(\"li\");\n li.className = \"GPimportGetCapProposal gpf-panel__items_layerimport gpf-panel__items\";\n li.innerHTML = description.content;\n li.title = description.title;\n li.id = \"GPimportGetCapProposal_\" + id;\n\n var context = this;\n if (li.addEventListener) {\n li.addEventListener(\"click\", function (e) {\n context._onGetCapResponseLayerClick(e);\n });\n } else if (li.attachEvent) {\n li.attachEvent(\"onclick\", function () {\n context._onGetCapResponseLayerClick();\n });\n }\n\n container.appendChild(li);\n return container;\n },\n\n // ################################################################### //\n // ########################### MapBox Panel ########################## //\n // ################################################################### //\n\n /**\n * Create MapBox Panel Element\n *\n * @returns {DOMElement} DOM element\n */\n _createImportMapBoxPanelElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportMapBoxPanel\");\n div.className = \"GPpanel GPelementHidden gpf-panel fr-modal gpf-hidden\";\n return div;\n },\n\n /**\n * Create MapBox Panel Header Element\n *\n * @returns {DOMElement} DOM element\n */\n _createImportMapBoxPanelHeaderElement : function () {\n // contexte\n var context = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n // return picto\n var returnDiv = document.createElement(\"button\");\n returnDiv.id = this._addUID(\"GPimportMapBoxPanelReturnPicto\");\n returnDiv.title = \"Nouvel import\";\n returnDiv.className = \"GPreturnPicto GPimportMapBoxPanelReturnPicto gpf-btn gpf-btn-icon-return fr-btn fr-btn--secondary gpf-btn--secondary\";\n if (returnDiv.addEventListener) {\n returnDiv.addEventListener(\"click\", function (e) {\n document.getElementById(context._addUID(\"GPshowImportPicto\")).click();\n context._onMapBoxReturnPictoClick(e);\n });\n } else if (returnDiv.attachEvent) {\n returnDiv.attachEvent(\"onclick\", function (e) {\n document.getElementById(context._addUID(\"GPshowImportPicto\")).click();\n context._onMapBoxReturnPictoClick(e);\n });\n }\n container.appendChild(returnDiv);\n\n // panel title\n var panelTitle = document.createElement(\"div\");\n panelTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n panelTitle.innerHTML = \"Edition des styles\";\n panelTitle.title = \"Edition des styles\";\n container.appendChild(panelTitle);\n\n // close picto\n var closeDiv = document.createElement(\"button\");\n closeDiv.className = \"GPpanelClose GPimportMapBoxPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n closeDiv.title = \"Fermer le panneau\";\n closeDiv.id = this._addUID(\"GPimportMapBoxPanelClose\");\n if (closeDiv.addEventListener) {\n closeDiv.addEventListener(\"click\", function () {\n document.getElementById(context._addUID(\"GPshowImportPicto\")).click();\n document.getElementById(context._addUID(\"GPimportMapBoxPanel\")).style.display = \"none\";\n context._onMapBoxPanelClose();\n });\n } else if (closeDiv.attachEvent) {\n closeDiv.attachEvent(\"click\", function () {\n document.getElementById(context._addUID(\"GPshowImportPicto\")).click();\n document.getElementById(context._addUID(\"GPimportMapBoxPanel\")).style.display = \"none\";\n context._onMapBoxPanelClose();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n closeDiv.appendChild(span);\n\n container.appendChild(closeDiv);\n\n return container;\n },\n\n /**\n * Create MapBox Results List Element\n *\n * @returns {DOMElement} DOM element\n */\n _createImportMapBoxResultsContainer : function () {\n var container = document.createElement(\"div\");\n container.className = \"GPimportMapBoxpRoot\";\n container.id = this._addUID(\"GPimportMapBoxResults\");\n return container;\n }\n\n // _addImportMapBoxResultListSource : function (id, source, container) {\n // var ul = document.createElement(\"ul\");\n // ul.className = \"GPimportMapBoxListSource\";\n // ul.title = id;\n //\n // var label = document.createElement(\"label\");\n // label.className = \"GPimportMapBoxListSourceTitle\";\n // label.innerHTML = \"Listes des couches pour la source '\" + id + \"' :\";\n // label.title = source.attribution || id;\n // ul.appendChild(label);\n //\n // container.appendChild(ul);\n // return container;\n // },\n //\n // _addImportMapBoxResultSource : function (layer, container) {\n // var li = document.createElement(\"li\");\n // li.className = \"GPimportMapBoxSource\";\n //\n // // input\n // var input = document.createElement(\"input\");\n // input.id = \"GPimportMapBoxSource-\" + SelectorID.generate();\n // input.className = \"GPimportMapBoxSource\";\n // input.type = \"checkbox\";\n // li.appendChild(input);\n //\n // // label for\n // var name = layer[\"source-layer\"] || layer.id || layer.source;\n // var label = document.createElement(\"label\");\n // label.className = \"GPimportMapBoxSourceTitle\";\n // label.htmlFor = input.id;\n // label.innerHTML = name;\n // label.title = JSON.stringify(layer.metadata) || name;\n // li.appendChild(label);\n //\n // container.appendChild(li);\n // return container;\n // },\n //\n // _addImportMapBoxStyleSource : function (layer, container) {\n // // contexte\n // var self = this;\n //\n // var _style = false;\n // var _obj = {};\n // var _layer = JSON.parse(JSON.stringify(layer)); // on utilise une copie !\n // if (_layer.paint && Object.keys(_layer.paint).length) {\n // _style = true;\n // _obj.paint = _layer.paint;\n // }\n //\n // // pas de style dans paint, on teste dans layout !\n // if (_layer.layout && Object.keys(_layer.layout).length) {\n // _style = true;\n // _obj.layout = _layer.layout;\n // // on supprime visibility à l'affichage uniquement\n // // cf. _addImportMapBoxVisibilitySource !\n // if (_layer.layout.visibility) {\n // delete _obj.visibility;\n // }\n // }\n //\n // function syntaxHighlight (json) {\n // json = json.replace(/&/g, \"&\").replace(//g, \">\");\n // return json.replace(/(\"(\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(true|false|null)\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/g, function (match) {\n // var cls = \"gp-json-number\";\n // if (/^\"/.test(match)) {\n // if (/:$/.test(match)) {\n // cls = \"gp-json-key\";\n // } else {\n // cls = \"gp-json-string\";\n // }\n // } else if (/true|false/.test(match)) {\n // cls = \"gp-json-boolean\";\n // } else if (/null/.test(match)) {\n // cls = \"gp-json-null\";\n // }\n // return \"\" + match + \"\";\n // });\n // }\n //\n // var div = document.createElement(\"div\");\n // div.className = \"GPimportMapBoxSourceStyle\";\n //\n // if (_style) {\n // var strJson = JSON.stringify(_obj, null, 4);\n //\n // var label = document.createElement(\"label\");\n // label.innerHTML = \"JSON Styles :\";\n // div.appendChild(label);\n // var pre = document.createElement(\"pre\");\n // pre.className = \"GPimportMapBoxJsonEdit\";\n // pre.innerHTML = syntaxHighlight(strJson);\n // if (pre.addEventListener) {\n // pre.addEventListener(\"click\", function (e) {\n // self._onSwitchStyleEditSourceMapBox(e);\n // });\n // } else if (pre.appendChild) {\n // pre.appendChild(\"onclick\", function (e) {\n // self._onSwitchStyleEditSourceMapBox(e);\n // });\n // }\n // div.appendChild(pre);\n // }\n //\n // container.appendChild(div);\n // return container;\n // },\n //\n // _addImportMapBoxFilterSource : function (layer, container) {\n // // contexte\n // var self = this;\n //\n // var _filter = false;\n // // FIXME tag filter est obselete !\n // // on doit utiliser les expressions dans \"paint\" ou \"layout\" !\n // if (layer.filter && layer.filter.length) {\n // _filter = true;\n // }\n //\n // var div = document.createElement(\"div\");\n // div.className = \"GPimportMapBoxSourceFilter\";\n //\n // if (_filter) {\n // var label = document.createElement(\"label\");\n // label.innerHTML = \"JSON Filtres :\";\n // div.appendChild(label);\n // var pre = document.createElement(\"pre\");\n // pre.className = \"GPimportMapBoxJsonEdit\";\n // pre.innerHTML = JSON.stringify(layer.filter, null, 4);\n // if (pre.addEventListener) {\n // pre.addEventListener(\"click\", function (e) {\n // self._onSwitchFilterEditSourceMapBox(e);\n // });\n // } else if (pre.appendChild) {\n // pre.appendChild(\"onclick\", function (e) {\n // self._onSwitchFilterEditSourceMapBox(e);\n // });\n // }\n // div.appendChild(pre);\n // }\n //\n // container.appendChild(div);\n // return container;\n // },\n //\n // _addImportMapBoxScaleSource : function (layer, container) {\n // // contexte\n // var self = this;\n //\n // var _scaleMin = layer.minzoom || 0;\n // var _scaleMax = layer.maxzoom || 21;\n //\n // var div = document.createElement(\"div\");\n // div.className = \"GPimportMapBoxSourceScale\";\n //\n // var labelMin = document.createElement(\"label\");\n // labelMin.className = \"GPimportMapBoxSourceScaleLabel\";\n // labelMin.innerHTML = \"minZoom :\";\n // div.appendChild(labelMin);\n //\n // var inputMin = document.createElement(\"input\");\n // inputMin.className = \"GPimportMapBoxSourceScaleInput\";\n // inputMin.type = \"range\";\n // inputMin.value = _scaleMin;\n // inputMin.title = _scaleMin;\n // inputMin.disabled = false;\n // inputMin.min = 0;\n // inputMin.max = 21;\n // if (inputMin.addEventListener) {\n // inputMin.addEventListener(\"change\", function (e) {\n // self._onChangeScaleMinSourceMapBox(e, layer);\n // });\n // } else if (inputMin.appendChild) {\n // inputMin.appendChild(\"onchange\", function (e) {\n // self._onChangeScaleMinSourceMapBox(e, layer);\n // });\n // }\n // div.appendChild(inputMin);\n //\n // div.appendChild(document.createElement(\"br\"));\n //\n // var labelMax = document.createElement(\"label\");\n // labelMax.className = \"GPimportMapBoxSourceScaleLabel\";\n // labelMax.innerHTML = \"maxZoom :\";\n // div.appendChild(labelMax);\n //\n // var inputMax = document.createElement(\"input\");\n // inputMax.className = \"GPimportMapBoxSourceScaleInput\";\n // inputMax.type = \"range\";\n // inputMax.value = _scaleMax;\n // inputMax.title = _scaleMax;\n // inputMax.disabled = false;\n // inputMax.min = 0;\n // inputMax.max = 21;\n // if (inputMax.addEventListener) {\n // inputMax.addEventListener(\"change\", function (e) {\n // self._onChangeScaleMaxSourceMapBox(e, layer);\n // });\n // } else if (inputMax.appendChild) {\n // inputMax.appendChild(\"onchange\", function (e) {\n // self._onChangeScaleMaxSourceMapBox(e, layer);\n // });\n // }\n // div.appendChild(inputMax);\n //\n // container.appendChild(div);\n // return container;\n // },\n //\n // _addImportMapBoxVisibilitySource : function (layer, container) {\n // // contexte\n // var self = this;\n //\n // var _visibility = true;\n // if (layer.layout && layer.layout.visibility && layer.layout.visibility === \"none\") {\n // _visibility = false;\n // }\n //\n // var div = document.createElement(\"div\");\n // div.className = \"GPimportMapBoxSourceVisibility\";\n //\n // var label = document.createElement(\"label\");\n // label.className = \"GPimportMapBoxSourceVisibilityLabel\";\n // label.innerHTML = \"Visibilité :\";\n // div.appendChild(label);\n //\n // var input = document.createElement(\"input\");\n // input.className = \"GPimportMapBoxSourceVisibilityInput\";\n // input.type = \"checkbox\";\n // input.checked = _visibility;\n // input.disabled = false;\n // if (input.addEventListener) {\n // input.addEventListener(\"change\", function (e) {\n // self._onChangeVisibilitySourceMapBox(e, layer);\n // });\n // } else if (input.appendChild) {\n // input.appendChild(\"onchange\", function (e) {\n // self._onChangeVisibilitySourceMapBox(e, layer);\n // });\n // }\n // div.appendChild(input);\n //\n // container.appendChild(div);\n // return container;\n // }\n};\n\nexport default LayerImportDOM;\n","var MeasureToolBoxDOM = {\n\n _toolboxId : \"GPtoolbox-measure-main\",\n _buttonId : \"GPtoolbox-measure-button\",\n _widgetId : \"GPtoolbox-measure-widget\",\n\n /**\n * get toolBox ID\n * @param {Number} uid - uid\n * @returns {String} id selector unique\n */\n getToolBoxID : function (uid) {\n return (uid) ? this._toolboxId + \"-\" + uid : this._toolboxId;\n },\n\n /**\n * get button ID\n * @param {Number} uid - uid\n * @returns {String} id selector unique\n */\n getButtonID : function (uid) {\n return (uid) ? this._buttonId + \"-\" + uid : this._buttonId;\n },\n\n /**\n * get toolBox Container for widget\n * @param {Number} uid - uid\n * @returns {String} id selector unique\n */\n getWidgetID : function (uid) {\n return (uid) ? this._widgetId + \"-\" + uid : this._widgetId;\n },\n\n /**\n * Main container (DOM)\n * @param {Number} uid - uid\n * @returns {DOMElement} DOM element\n */\n _createToolBoxContainerElement : function (uid) {\n //
\n // \n //
\n // \n //
\n //
\n var container = document.createElement(\"div\");\n container.id = this.getToolBoxID(uid);\n container.className = \"GPshowAdvancedToolPicto\";\n\n var button = document.createElement(\"button\");\n button.id = this.getButtonID(uid);\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowToolBoxPicto gpf-btn gpf-btn-icon-toolbox fr-btn\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n var self = this;\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n this.blur(); // permet de perdre le focus !\n var widget = document.getElementById(self.getWidgetID(uid));\n if (widget.style.display === \"block\") {\n widget.style.display = \"none\";\n } else {\n widget.style.display = \"block\";\n }\n });\n container.appendChild(button);\n\n var widget = document.createElement(\"div\");\n widget.id = this.getWidgetID(uid);\n widget.addEventListener(\"click\", function () {\n\n /*\n e.preventDefault();\n\n // FIXME desactiver tous les outils sur\n // l'ouverture/fermeture de la toolbox ?\n\n var current = e.target.parentNode.getAttribute(\"for\");\n var widgets = this.querySelectorAll(\"div > input\");\n for (var i = 0; i < widgets.length; i++) {\n var id = widgets[i].id;\n\n if (document.getElementById(id) &&\n document.getElementById(id).checked &&\n document.querySelector(\"#\" + id + \" + label\")) {\n document.querySelector(\"#\" + id + \" + label\").click();\n // document.getElementById(id).checked = true;\n }\n\n if (current === id && widgets[i].checked) {\n widgets[i].checked = false;\n } else if (current === id && !widgets[i].checked) {\n widgets[i].checked = true;\n }\n }\n */\n\n }, false);\n\n container.appendChild(widget);\n\n return container;\n }\n};\n\nexport default MeasureToolBoxDOM;\n","// import CSS\nimport \"../../CSS/Controls/ToolBoxMeasure/GPFtoolBoxMeasure.css\";\n// import \"../../CSS/Controls/ToolBoxMeasure/GPFtoolBoxMeasureStyle.css\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Utils from \"../../Utils/Helper\";\nimport ID from \"../../Utils/SelectorID\";\n// DOM\nimport MeasureToolBoxDOM from \"./MeasureToolBoxDOM\";\n\nvar logger = Logger.getLogger(\"toolbox\");\n\n/**\n * @type {ol.control.MeasureToolBox}\n * MeasureToolBox - Boite à outils (ToolBox) pour les outils de mesures.\n * - distance\n * - aire\n * - azimut\n */\nvar MeasureToolBox = {\n\n /**\n * liste des uid/map (pour chaque toolbox)\n * { map : uid }\n * Ex. { \"map1\" : 465456456486845 }\n */\n _toolbox : {},\n\n /**\n * Ajout d'un controle dans la ToolBox.\n * Creation de la toolbox si besoin...\n *\n * @param {ol.Map} map - map\n * @param {ol.control.Control} ctrl - objet à ajouter\n */\n add : function (map, ctrl) {\n logger.trace(\"ToolBox.add()\", ctrl);\n\n if (!map) {\n logger.trace(\"map doesn't exist !?\");\n return;\n }\n\n // contexte d'execution\n var context = typeof window !== \"undefined\" ? window : typeof self !== \"undefined\" ? self : null;\n if (context) {\n // Pour info\n // l'objet ToolBox devrait être partagé avec les outils de mesures...,\n // mais, ce n'est pas le cas pour le mode modules cad un module par extension.\n // c'est pourquoi, on l'enregistre dans le contexte, qui lui est partagé (ex. window)\n this._toolbox = context.gpShareMeasureToolBox || {};\n }\n\n var mapContainer = map.getTargetElement();\n var mapDocument = mapContainer.ownerDocument;\n var mapId = mapContainer.id;\n\n if (!this._toolbox || Object.keys(this._toolbox).length === 0) {\n this._toolbox = {};\n this._toolbox[mapId] = ID.generate();\n } else {\n if (!this._toolbox[mapId]) {\n this._toolbox[mapId] = ID.generate();\n }\n }\n\n var uid = this._toolbox[mapId];\n if (!mapDocument.getElementById(this.getToolBoxID(uid))) {\n logger.trace(\"create toolbox !\");\n // creation et ajout de la toolbox sur la map\n var toolboxContainer = this._createToolBoxContainerElement(uid);\n toolboxContainer.style.pointerEvents = \"auto\"; // ajout pour ol6\n var overlaysContainer = mapContainer.getElementsByClassName(\"ol-overlaycontainer-stopevent\");\n overlaysContainer[0].appendChild(toolboxContainer);\n // mapContainer.appendChild(toolboxContainer);\n }\n\n // ajout du widget dans la toolbox\n var widgetContainer = mapDocument.getElementById(this.getWidgetID(uid));\n ctrl.setTarget(widgetContainer);\n if (context) {\n // Pour info\n // on partage (enregistre) l'objet ToolBox dans le contexte d'execution !\n context.gpShareMeasureToolBox = this._toolbox;\n }\n logger.trace(\"add control to toolbox !\");\n }\n};\n\nUtils.assign(MeasureToolBox, MeasureToolBoxDOM);\n\nexport default MeasureToolBox;\n","// import OpenLayers\nimport Overlay from \"ol/Overlay\";\nimport { Draw as DrawInteraction } from \"ol/interaction\";\nimport {\n Fill,\n Stroke,\n Style,\n Circle\n} from \"ol/style\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport VectorSource from \"ol/source/Vector\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Interactions from \"../Utils/Interactions\";\n// import local with ol dependencies\nimport LayerSwitcher from \"../LayerSwitcher/LayerSwitcher\";\n\n// Derived from OpenLayers measure example\n// http://openlayers.org/en/latest/examples/measure.html\n\nvar logger = Logger.getLogger(\"measures\");\n\n/**\n * @type {ol.control.Measures}\n * @abstract\n * Measures Tools :\n * - length\n * - aera\n * - azimut\n */\nvar Measures = {\n\n // ****************************************************************** //\n // > Default Styles\n // ****************************************************************** //\n\n /*\n * Pointer\n */\n DEFAULT_POINTER_STYLE : new Circle({\n radius : 5,\n stroke : new Stroke({\n color : \"#002A50\",\n width : 2\n }),\n fill : new Fill({\n color : \"rgba(255, 155, 0, 0.7)\"\n })\n }),\n\n /*\n * Measures style line\n */\n DEFAULT_DRAW_START_STYLE : new Style({\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.2)\"\n }),\n stroke : new Stroke({\n color : \"#002A50\",\n lineDash : [10, 10],\n width : 2\n })\n }),\n\n /*\n * Measures final style line\n */\n DEFAULT_DRAW_FINISH_STYLE : new Style({\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.3)\"\n }),\n stroke : new Stroke({\n color : \"#002A50\",\n width : 3\n })\n }),\n\n // ****************************************************************** //\n // > ToolBox : these tools work together\n // ****************************************************************** //\n // sample :\n // tools[name_control][0].(active|instance|map)\n // tools : {\n // MeasureLength : [\n // { active : true, instance : [Object MeasureLength], map : \"map1\" },\n // { active : true, instance : [Object MeasureLength], map : \"map2\" }\n // ],\n // MeasureArea : [],\n // MeasureAzimuth : []\n // }\n tools : {\n MeasureLength : [],\n MeasureArea : [],\n MeasureAzimuth : []\n },\n\n // ****************************************************************** //\n // > Variables\n // ****************************************************************** //\n\n /**\n * Global measure draw interaction\n * @type {ol.interaction.Draw}\n */\n measureDraw : null,\n\n /**\n * Global vector source for measure\n * @type {ol.source.Vector}\n */\n measureSource : null,\n\n /**\n * Global vector layer for measure\n * @type {ol.layer.Vector}\n */\n measureVector : null,\n\n /**\n * Event on removing map layer\n * @type {ol.CollectionEventType}\n */\n eventLayerRemove : null,\n\n /**\n * Currently drawn feature.\n * @type {ol.Feature}\n */\n sketch : null,\n\n /**\n * The measure tooltip element.\n * @type {Element}\n */\n measureTooltipElement : null,\n\n /**\n * Overlay to show the measurement.\n * @type {ol.Overlay}\n */\n measureTooltip : null,\n\n /**\n * TODO The help tooltip element.\n * @type {Element}\n */\n helpTooltipElement : null,\n\n /**\n * TODO Overlay to show the help.\n * @type {ol.Overlay}\n */\n helpTooltip : null,\n\n // ****************************************************************** //\n // > Methods Public\n // ****************************************************************** //\n\n /** Desactived Tool Measure */\n clean : function () {\n var _class = this.CLASSNAME;\n\n logger.trace(\"[\" + _class + \"] deactived tool !\");\n // sur la desactivation de l'outil de mesure\n // on fait un nettoyage des ressources\n // ainsi que le DOM\n this.clearMeasure();\n this.clearMeasureToolTip();\n this.removeMeasureEvents();\n this._pictoContainer.setAttribute(\"aria-pressed\", false);\n },\n\n // ****************************************************************** //\n // > Methods Events\n // ****************************************************************** //\n\n /**\n * Handle pointer move.\n *\n * @param {ol.MapBrowserEvent} e - The event.\n */\n onPointerMoveHandler : function (e) {\n if (e.dragging) {\n return;\n }\n\n /** @type {ol.Coordinate|undefined} */\n var tooltipCoord = e.coordinate;\n\n if (this.sketch) {\n var output;\n var geom = (this.sketch.getGeometry());\n output = this.format((geom));\n if (geom.getType() === \"LineString\") {\n tooltipCoord = geom.getLastCoordinate();\n } else if (geom.getType() === \"Polygon\") {\n tooltipCoord = geom.getInteriorPoint().getCoordinates();\n } else {\n return;\n }\n this.measureTooltipElement.innerHTML = output;\n this.measureTooltip.setPosition(tooltipCoord);\n }\n },\n\n /**\n * Main program !\n * This method is called by event 'click' on control picto\n *\n * @param {Object} e - HTMLElement\n * @param {String} type - LineString or Polygon\n * @private\n */\n onShowMeasureClick : function (e, type) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n var currentMapId = map.getTargetElement().id;\n\n // contexte d'execution\n var context = typeof window !== \"undefined\" ? window : typeof self !== \"undefined\" ? self : null;\n if (context) {\n // Pour info\n // les objets de mesures ont du code partagé\n // (afin de gerer les interactions entre eux).\n // Dans un mode \"modules\", on partage cet objet (this.tools) via le contexte\n // d'execution (ex. avec window)\n this.tools = context.gpShareMeasures || {};\n }\n\n // desactivation des controles de mesures sur la carte courrante\n var mySelf = this.CLASSNAME; // this.constructor.name : pas possible en mode minifié/manglifié !\n for (var className in this.tools) {\n if (this.tools.hasOwnProperty(className)) {\n var measures = this.tools[className];\n for (var i = 0; i < measures.length; i++) {\n var o = measures[i];\n if (o && o.active && className !== mySelf && o.map.id === currentMapId) {\n o.active = false;\n if (o.instance !== null) { // au cas où le controle a été supprimé !\n o.instance.clean();\n }\n }\n }\n }\n }\n\n // desactivation des autres interactions parasites\n Interactions.unset(map, {\n current : \"Measures\"\n });\n\n var opened = this._pictoContainer.ariaPressed;\n if (opened === \"true\") {\n this.addMeasureEvents();\n this.initMeasureInteraction();\n this.addMeasureInteraction(type);\n for (var j = 0; j < this.tools[mySelf].length; j++) {\n if (this.tools[mySelf][j].map.id === currentMapId) {\n this.tools[mySelf][j].active = true;\n }\n }\n } else {\n this.clearMeasure();\n this.clearMeasureToolTip();\n this.removeMeasureEvents();\n for (var k = 0; k < this.tools[mySelf].length; k++) {\n if (this.tools[mySelf][k].map.id === currentMapId) {\n this.tools[mySelf][k].active = false;\n }\n }\n }\n },\n\n // ****************************************************************** //\n // > Methods not Public\n // ****************************************************************** //\n\n /**\n * Clear all dom tooltip of length, area or azimut object.\n */\n clearMeasureToolTip : function () {\n var map = this.getMap();\n if (!map) {\n return;\n }\n\n var mapContainer = map.getTargetElement();\n // au cas où il y'aurait plusieurs container de carte !\n var overlays = mapContainer.getElementsByClassName(\"ol-overlaycontainer\");\n for (var k = 0; k < overlays.length; k++) {\n var nodes = overlays[k];\n var len = nodes.children.length;\n var nodesToRemove = [];\n for (var i = 0; i < len; i++) {\n var node = nodes.children[i];\n if (node.children.length !== 0) {\n var child = node.children[0];\n if (child.className === \"GPmeasureTooltip GPmeasureTooltip-static\" ||\n child.className === \"GPmeasureTooltip GPmeasureTooltip-measure\") {\n nodesToRemove.push(node);\n }\n }\n }\n for (var j = 0; j < nodesToRemove.length; j++) {\n nodes.removeChild(nodesToRemove[j]);\n }\n }\n },\n\n /**\n * Clear all length, area or azimut object.\n */\n clearMeasure : function () {\n var map = this.getMap();\n\n // FIXME !?\n // if (this.measureTooltip) {\n // map.removeOverlay(this.measureTooltip);\n // this.measureTooltip = null;\n // }\n\n if (this.measureVector) {\n map.removeLayer(this.measureVector);\n this.measureVector = null;\n }\n\n if (this.measureDraw) {\n map.removeInteraction(this.measureDraw);\n this.measureDraw = null;\n }\n },\n\n /**\n * Creates a new measure tooltip\n * FIXME bug d'affichage de la tooltip de saisie en cours si on ne termine pas\n * la saisie !?\n *\n * @param {ol.Map} map - The Map.\n */\n createMeasureTooltip : function (map) {\n if (this.measureTooltipElement) {\n this.measureTooltipElement.parentNode.removeChild(this.measureTooltipElement);\n }\n\n this.measureTooltipElement = document.createElement(\"div\");\n this.measureTooltipElement.className = \"GPmeasureTooltip GPmeasureTooltip-measure\";\n\n this.measureTooltip = new Overlay({\n element : this.measureTooltipElement,\n stopEvent : false,\n offset : [0, -15],\n positioning : \"bottom-center\"\n });\n\n map.addOverlay(this.measureTooltip);\n },\n\n /**\n * TODO evolution\n * Creates a new help tooltip\n *\n * @param {ol.Map} map - The Map.\n */\n createHelpTooltip : function (map) {\n if (this.helpTooltipElement) {\n this.helpTooltipElement.parentNode.removeChild(this.helpTooltipElement);\n }\n\n this.helpTooltipElement = document.createElement(\"div\");\n this.helpTooltipElement.className = \"tooltip hidden\";\n\n this.helpTooltip = new Overlay({\n element : this.helpTooltipElement,\n stopEvent : false,\n offset : [15, 0],\n positioning : \"center-left\"\n });\n\n map.addOverlay(this.helpTooltip);\n },\n\n /**\n * Creates a style for drawing\n *\n * @param {Object} styles - styles.\n */\n createStylingMeasureInteraction : function (styles) {\n this.options.styles = styles || {};\n\n // style de depart\n logger.trace(\"style start\", this.options.styles.start);\n\n // Creation à partir des styles par défaut\n var startStyleOpts = {\n image : Measures.DEFAULT_POINTER_STYLE,\n fill : Measures.DEFAULT_DRAW_START_STYLE.getFill(),\n stroke : Measures.DEFAULT_DRAW_START_STYLE.getStroke()\n };\n // ecrasement à partir des propriétés renseignées\n if (this.options.styles.hasOwnProperty(\"pointer\") && this.options.styles.pointer instanceof Image) {\n startStyleOpts.image = this.options.styles.pointer;\n }\n if (this.options.styles.hasOwnProperty(\"start\") && this.options.styles.start instanceof Style) {\n if (this.options.styles.start.getFill() != null) {\n startStyleOpts.fill = this.options.styles.start.getFill();\n }\n if (this.options.styles.start.getStroke() != null) {\n startStyleOpts.stroke = this.options.styles.start.getStroke();\n }\n }\n\n this.options.styles.start = new Style(startStyleOpts);\n\n // style de fin\n logger.trace(\"style finish\", this.options.styles.finish);\n\n var finishStyleOpts = {\n fill : Measures.DEFAULT_DRAW_FINISH_STYLE.getFill(),\n stroke : Measures.DEFAULT_DRAW_FINISH_STYLE.getStroke()\n };\n // ecrasement à partir des propriétés renseignées\n if (this.options.styles.hasOwnProperty(\"finish\") && this.options.styles.finish instanceof Style) {\n if (this.options.styles.finish.getFill() != null) {\n finishStyleOpts.fill = this.options.styles.finish.getFill();\n }\n if (this.options.styles.finish.getStroke() != null) {\n finishStyleOpts.stroke = this.options.styles.finish.getStroke();\n }\n }\n\n this.options.styles.finish = new Style(finishStyleOpts);\n },\n\n /**\n * Add the measure interaction\n *\n * @param {String} type - LineString or Polygon.\n */\n addMeasureInteraction : function (type) {\n var map = this.getMap();\n\n // Creates and adds the interaction\n var self = this;\n this.measureDraw = new DrawInteraction({\n source : this.measureSource,\n // condition : permet de gerer la suppression des derniers points saisis\n condition : function (event) {\n if (event.originalEvent.ctrlKey) {\n if (self.sketch) {\n this.removeLastPoint();\n }\n return false;\n }\n return true;\n },\n type : type,\n style : this.options.styles.start || Measures.DEFAULT_DRAW_START_STYLE\n });\n this.measureDraw.setProperties({\n name : \"Measures\",\n source : this\n });\n map.addInteraction(this.measureDraw);\n\n // Create tooltips\n this.createMeasureTooltip(map);\n\n // Event start measuring\n this.measureDraw.on(\"drawstart\", (evt) => {\n // set sketch\n self.sketch = evt.feature;\n });\n\n // Event end measuring\n this.measureDraw.on(\"drawend\", () => {\n // FIXME MaJ de la tooltip en mode mobile !\n if (self.sketch) {\n var output;\n var tooltipCoord;\n var geom = (self.sketch.getGeometry());\n output = self.format((geom));\n if (geom.getType() === \"LineString\") {\n tooltipCoord = geom.getLastCoordinate();\n } else if (geom.getType() === \"Polygon\") {\n tooltipCoord = geom.getInteriorPoint().getCoordinates();\n } else {\n return;\n }\n self.measureTooltipElement.innerHTML = output;\n self.measureTooltip.setPosition(tooltipCoord);\n }\n\n self.measureTooltipElement.className = \"GPmeasureTooltip GPmeasureTooltip-static\";\n self.measureTooltip.setOffset([0, -7]);\n\n // unset sketch\n self.sketch = null;\n // unset tooltip so that a new one can be created\n self.measureTooltipElement = null;\n self.createMeasureTooltip(map);\n });\n },\n\n /**\n * Init the measure interaction\n */\n initMeasureInteraction : function () {\n var map = this.getMap();\n\n this.measureSource = new VectorSource();\n\n this.measureVector = new VectorLayer({\n source : this.measureSource,\n style : this.options.styles.finish || Measures.DEFAULT_DRAW_FINISH_STYLE\n });\n\n // on rajoute le champ gpResultLayerId permettant d'identifier une couche crée par le composant.\n this.measureVector.gpResultLayerId = \"measure\";\n\n map.addLayer(this.measureVector);\n\n // Si un layer switcher est présent dans la carte, on lui affecte des informations pour cette couche\n map.getControls().forEach(\n (control) => {\n if (control.CLASSNAME === \"LayerSwitcher\") {\n // un layer switcher est présent dans la carte\n var layerId = this.measureVector.gpLayerId;\n // on n'ajoute des informations que s'il n'y en a pas déjà (si le titre est le numéro par défaut)\n if (control._layers[layerId].title === layerId) {\n control.addLayer(\n this.measureVector, {\n title : this.options.layerDescription.title,\n description : this.options.layerDescription.description\n }\n );\n }\n }\n }\n );\n }\n};\n\nexport default Measures;\n","import checkDsfr from \"../Utils/CheckDsfr\";\n\nvar ElevationPathDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPelevationPath\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################# Methods to display Main Panel ################### //\n // ################################################################### //\n\n /**\n * Show control\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createShowElevationPathPictoElement : function () {\n // contexte d'execution\n var context = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowElevationPathPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-elevation fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Calculer un profil altimétrique\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // gestionnaire d'evenement :\n // on ouvre le menu de saisie de saisie\n // L'ouverture/Fermeture permet de faire le menage\n // (reinitialisation)\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowElevationPathClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowElevationPathClick(e);\n });\n }\n\n return button;\n },\n\n // ################################################################### //\n // ######################### Methods to Panel ######################## //\n // ################################################################### //\n\n /**\n * Create Container Panel\n *\n * FIXME\n * don't call this._createElevationPathPanelHeaderElement\n * don't call this._createElevationPathPanelProfilElement\n *\n * @returns {DOMElement} DOM element\n */\n _createElevationPathPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPelevationPathPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n // dialog.appendChild(this._createElevationPathPanelHeaderElement());\n // dialog.appendChild(this._createElevationPathPanelProfilElement());\n\n return dialog;\n },\n\n _createElevationPathPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createElevationPathPanelHeaderElement : function () {\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n if (!checkDsfr()) {\n var divInfo = document.createElement(\"button\");\n divInfo.id = this._addUID(\"GPelevationPathPanelInfo\");\n divInfo.className = \"GPpanelInfo gpf-btn gpf-btn-icon-info fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w\";\n divInfo.title = \"Informations\";\n // add event on click\n if (divInfo.addEventListener) {\n divInfo.addEventListener(\n \"click\",\n function () {\n self.onOpenElevationPathInfoClick();\n }\n );\n } else if (divInfo.attachEvent) {\n // internet explorer\n divInfo.attachEvent(\n \"onclick\",\n function () {\n self.onOpenElevationPathInfoClick();\n }\n );\n }\n container.appendChild(divInfo);\n }\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = \"Profil Altimétrique\";\n container.appendChild(divTitle);\n\n var buttonReduce = document.createElement(\"button\");\n buttonReduce.id = this._addUID(\"GPelevationPathPanelReduce\");\n buttonReduce.className = \"GPpanelReduce gpf-btn gpf-btn-icon-reduce fr-btn fr-btn--secondary gpf-btn--secondary\";\n buttonReduce.title = \"Masquer le panneau\";\n\n if (buttonReduce.addEventListener) {\n buttonReduce.addEventListener(\"click\", function (e) {\n if (typeof self.onReduceElevationPathPanelClick === \"function\") {\n self.onReduceElevationPathPanelClick();\n }\n }, false);\n } else if (buttonReduce.attachEvent) {\n buttonReduce.attachEvent(\"onclick\", function (e) {\n if (typeof self.onReduceElevationPathPanelClick === \"function\") {\n self.onReduceElevationPathPanelClick();\n }\n });\n }\n container.appendChild(buttonReduce);\n\n var buttonClose = document.createElement(\"button\");\n buttonClose.id = this._addUID(\"GPelevationPathPanelClose\");\n buttonClose.className = \"GPpanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n buttonClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n if (buttonClose.addEventListener) {\n buttonClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowElevationPathPicto\")).click();\n }, false);\n } else if (buttonClose.attachEvent) {\n buttonClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowElevationPathPicto\")).click();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n buttonClose.appendChild(span);\n container.appendChild(buttonClose);\n\n return container;\n },\n\n /**\n * Create Form\n * see evenement !\n *\n * @returns {DOMElement} DOM element\n */\n _createElevationPathPanelProfilElement : function () {\n var wrapper = document.createElement(\"div\");\n wrapper.className = \"GPelevationPathProfilWrapper\";\n var div = document.createElement(\"div\");\n div.id = \"GPelevationPathProfil\";\n wrapper.appendChild(div);\n\n return wrapper;\n },\n\n /**\n * Create Waiting Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createElevationPathWaitingElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPelevationPathCalcWaitingContainer\");\n div.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n\n var p = document.createElement(\"p\");\n p.className = \"GPwaitingContainerInfo gpf-waiting_info\";\n p.innerHTML = \"Recherche en cours...\";\n\n div.appendChild(p);\n\n return div;\n },\n\n /**\n * Create information Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createElevationPathInformationsElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPelevationPathInformationsContainer\");\n if (!checkDsfr()) {\n div.className = \"GPelementHidden gpf-hidden\";\n }\n\n var p = document.createElement(\"p\");\n p.className = \"GPelevationPathInformations\";\n p.innerHTML = \"Aucune information...\";\n div.appendChild(p);\n\n return div;\n },\n\n /**\n * Add a information into Panel\n *\n * @param {String} name - name of item\n * @param {String} value - value of item\n * @returns {DOMElement} DOM element\n */\n _addElevationPathInformationsItem : function (name, value) {\n var div = document.getElementById(this._addUID(\"GPelevationPathInformationsContainer\"));\n\n if (div) {\n var p = document.createElement(\"p\");\n p.className = \"GPelevationPathInformations\";\n var nameEl = document.createElement(\"span\");\n nameEl.innerText = name;\n var valueEl = document.createElement(\"span\");\n valueEl.innerText = value;\n p.appendChild(nameEl);\n p.appendChild(valueEl);\n div.appendChild(p);\n }\n\n return div;\n }\n};\n\nexport default ElevationPathDOM;\n","import checkDsfr from \"../Utils/CheckDsfr\";\n\n/* globals AmCharts, d3 */\nvar ProfileElevationPathDOM = {\n\n /**\n * Gets a css property from an element\n *\n * @private\n * @param {HTMLElement} element The element to get the property from\n * @param {String} property The css property\n * @returns {String} The value of the property\n *\n * @see https://stackoverflow.com/questions/7444451/how-to-get-the-actual-rendered-font-when-its-not-defined-in-css\n */\n _getCssProperty : function (element, property) {\n return window.getComputedStyle(element, null).getPropertyValue(property);\n },\n\n /**\n * Uses canvas.measureText to compute and return the width of the given text of given font in pixels.\n *\n * @private\n * @param {String} text The text to be rendered.\n * @param {HTMLElement} container The container of the text\n * @param {String} font The font of the container if known, format: 'weight size familiy'\n * @returns {Number} The width of the text\n *\n * @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393\n */\n _getTextWidth : function (text, container, font = null) {\n // re-use canvas object for better performance\n var canvas = /** ts-syntax */(this.canvas) || ((this.canvas) = document.createElement(\"canvas\"));\n var context = canvas.getContext(\"2d\");\n if (font === null) {\n context.font = `${this._getCssProperty(container, \"font-weight\")} ${this._getCssProperty(container, \"font-size\")} ${this._getCssProperty(container, \"font-family\")}`;\n } else {\n context.font = font;\n }\n\n var metrics = context.measureText(text);\n return metrics.width;\n },\n\n /**\n * Converts a data point z to svg y coord\n *\n * @private\n * @param {Object} z The z to convert.\n * @param {Number} pathHeight The height of the path in the svg container in px\n * @param {Number} minGraphZ Min z of the graph\n * @param {Number} pxPerMZ Number of pixels per meter for the z (y) axis\n * @returns {Number} The y svg coordinate of the point\n *\n */\n _dataZToSvgY : function (z, pathHeight, minGraphZ, pxPerMZ) {\n return pathHeight - (z - minGraphZ) * pxPerMZ - 0.5;\n },\n\n /**\n * Converts a data point dist value to svg x coord\n *\n * @private\n * @param {Number} dist The dist to convert\n * @param {Number} svgWidth The witdth of the svg container in px\n * @param {Number} pathWidth The witdth of the path in the svg container in px\n * @param {Number} pxPerMX Number of pixels per meter for the x axis\n * @returns {Array} The x svg coordinate of the point\n *\n */\n _dataDistToSvgX : function (dist, svgWidth, pathWidth, pxPerMX) {\n return (svgWidth - pathWidth) + dist * pxPerMX;\n },\n\n /**\n * Converts a svg x coord to dist value\n *\n * @private\n * @param {Number} svgX The dist to convert\n * @param {Number} svgWidth The witdth of the svg container in px\n * @param {Number} pathWidth The witdth of the path in the svg container in px\n * @param {Number} pxPerMX Number of pixels per meter for the x axis\n * @returns {Array} The dist value\n *\n */\n _svgXToDataDist : function (svgX, svgWidth, pathWidth, pxPerMX) {\n return (svgX + pathWidth - svgWidth) / pxPerMX;\n },\n\n /**\n * Returns the index of value if it were inserted in sorted (by dist) array of data points.\n *\n * @private\n * @param {Array} array Sorted array of data points (with dist property)\n * @param {Number} value Value to test the index of.\n * @returns {Number} The index the value would have.\n *\n */\n _arrayBisect : function (array, value) {\n let idx;\n if (array.length === 0) {\n return 0;\n }\n for (idx = 0; idx < array.length; idx++) {\n if (value < array[idx].dist) {\n return idx;\n }\n }\n return idx - 1;\n },\n\n /**\n * Display Profile function used by default : no additonal framework needed.\n *\n * @public\n * @param {Object} data - elevations values for profile\n * @param {HTMLElement} container - html container where to display profile\n * @param {Object} context - this control object\n * @param {Object} className - calling class (ie ElevationPath)\n * @returns {DOMElement} profil container\n */\n displayProfileByDefault : function (data, container, context, className) {\n var self = context;\n\n if (!container) {\n return;\n }\n\n if (!data) {\n return;\n }\n\n const style = {\n fontFamily : \"Arial\",\n strokeColor : \"#0B6BA7\",\n fillColor : \"#00B798\",\n focusLineColor : \"#F90\",\n };\n\n if (checkDsfr()) {\n style.fontFamily = \"Marianne\";\n style.strokeColor = \"#2F4077\";\n style.fillColor = \"#2F4077\";\n style.focusLineColor = \"#639f6a\";\n };\n\n // on nettoie toujours...\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n\n const margin = {\n top : 25,\n right : 15,\n bottom : 10,\n left : 10\n };\n\n var _displayProfileOptions = self.options.displayProfileOptions;\n var _points = data.points;\n\n var sortedElev = JSON.parse(JSON.stringify(_points));\n sortedElev.sort(function (e1, e2) {\n return e1.z - e2.z;\n });\n\n var minZ = sortedElev[0].z;\n var maxZ = sortedElev[sortedElev.length - 1].z;\n var dist = data.distance;\n let distUnit = \"m\";\n\n const widgetDiv = document.createElement(\"div\");\n widgetDiv.id = \"profileElevationByDefault\";\n container.appendChild(widgetDiv);\n\n // Détermination des tailles en pixels des éléments du widget\n var clientWidth = window.getComputedStyle(container).getPropertyValue(\"width\").replace(/px/, \"\");\n var clientHeight = window.getComputedStyle(container).getPropertyValue(\"height\").replace(/px/, \"\");\n const widgetHeigth = clientHeight - margin.top - margin.bottom;\n const widgetWidth = clientWidth - margin.left - margin.right;\n // const widgetHeigth = container.clientHeight - margin.top - margin.bottom;\n // const widgetWidth = container.clientWidth - margin.left - margin.right;\n\n const zLabelWidth = 17;\n const zGradWidth = this._getTextWidth(Math.round(maxZ).toLocaleString() + \",88\", container, `400 10 ${style.fontFamily}`);\n const xLabelHeight = 17;\n const xGradHeight = 15;\n\n const minZguideHeigth = 15;\n const minXguideWidth = this._getTextWidth(Math.round(dist).toLocaleString() + \",5\", container);\n const minNumXGuides = 1;\n\n const pathHeight = widgetHeigth - xLabelHeight - xGradHeight;\n const pathWidth = widgetWidth - zLabelWidth - zGradWidth;\n\n const elevationSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n elevationSvg.id = \"profileElevationByDefaultSvg\";\n elevationSvg.setAttribute(\"style\", \"display: block; margin: auto; overflow: visible;\");\n elevationSvg.setAttribute(\"viewBox\", `0 0 ${clientWidth} ${clientHeight}`);\n elevationSvg.setAttribute(\"width\", \"100%\");\n elevationSvg.setAttribute(\"height\", \"100%\");\n\n // Détermination des guides en ordonnée :\n const maxNumZguides = Math.floor(pathHeight / minZguideHeigth);\n let gradZ;\n // Traitement du cas altitude max = altitude min\n if (maxZ === minZ) {\n gradZ = 0.1;\n } else {\n gradZ = Math.pow(10, (Math.ceil(Math.log((maxZ - minZ) / maxNumZguides) / Math.log(10)))) / 2;\n }\n let minGraphZ = Math.floor(minZ / gradZ) * gradZ;\n let maxGraphZ = Math.ceil(maxZ / gradZ) * gradZ;\n // cas où le path atteint pile les graduations extremes : ajout d'une gradiation\n if (maxGraphZ === maxZ) {\n maxGraphZ += gradZ;\n }\n // cas où gradZ < 1 : nombres flottants capricieux...\n minGraphZ = Math.round(minGraphZ * 100) / 100;\n maxGraphZ = Math.round(maxGraphZ * 100) / 100;\n\n let numZguides = Math.round((maxGraphZ - minGraphZ) / gradZ);\n\n // Si plus de guides que le max, on passe à une graduation de 10**x en 10**x (et non 10**x / 2)\n if (numZguides + 1 > maxNumZguides) {\n gradZ = Math.pow(10, (Math.ceil(Math.log((maxZ - minZ) / maxNumZguides) / Math.log(10))));\n minGraphZ = Math.floor(minZ / gradZ) * gradZ;\n maxGraphZ = Math.ceil(maxZ / gradZ) * gradZ;\n // cas où le path atteint pile les graduations extremes : ajout d'une gradiation\n if (maxGraphZ === maxZ) {\n maxGraphZ += gradZ;\n }\n // cas où gradZ < 1 : nombres flottants capricieux...\n minGraphZ = Math.round(minGraphZ * 100) / 100;\n maxGraphZ = Math.round(maxGraphZ * 100) / 100;\n numZguides = Math.floor((maxGraphZ - minGraphZ) / gradZ);\n }\n\n numZguides = Math.max(Math.round(numZguides), 1);\n\n const axisZ = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n axisZ.setAttribute(\"class\", \"profile-z-vertical\");\n\n const guidesZ = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\n const gradZyOffsetPx = pathHeight / numZguides;\n let pxPerMZ;\n // Traitement du cas altitude max = altitude min\n if (maxZ === minZ) {\n pxPerMZ = pathHeight / 0.2;\n } else {\n pxPerMZ = pathHeight / (maxGraphZ - minGraphZ);\n }\n\n let gradZtext;\n let yTextTranslation;\n let yStrokeTranslation;\n let gradZstroke;\n let gradZpath;\n let gradZgrad;\n // Ajout des graduations au graphique\n for (let i = 0; i <= numZguides; i++) {\n gradZtext = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n gradZtext.setAttribute(\"class\", \"profile-z-graduation\");\n gradZtext.setAttribute(\"font-family\", style.fontFamily);\n gradZtext.setAttribute(\"font-size\", \"10px\");\n gradZtext.setAttribute(\"fill\", \"#5E5E5E\");\n // Cas où gradZ < 1 : nombres flottants capricieux...\n // Le Math.round est pour éviter des ennuis du genre 3 * 0.1 = 0.300000000000004\n gradZtext.textContent = (Math.round(100 * (minGraphZ + i * gradZ)) / 100).toLocaleString();\n\n yTextTranslation = pathHeight - i * gradZyOffsetPx;\n\n gradZtext.setAttribute(\"transform\", `translate(${zLabelWidth + zGradWidth - 8}, ${yTextTranslation + 5})`);\n gradZtext.setAttribute(\"text-anchor\", \"end\");\n axisZ.appendChild(gradZtext);\n\n yStrokeTranslation = Math.round(yTextTranslation) - 0.5;\n\n gradZstroke = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n gradZpath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n gradZpath.setAttribute(\"cs\", \"100,100\");\n gradZpath.setAttribute(\"stroke-width\", \"1\");\n if (i !== 0) {\n gradZpath.setAttribute(\"stroke-opacity\", \"0.2\");\n } else {\n gradZpath.setAttribute(\"stroke-opacity\", \"1\");\n }\n gradZpath.setAttribute(\"stroke\", \"#000000\");\n gradZpath.setAttribute(\"fill\", \"none\");\n gradZpath.setAttribute(\"d\", `M${zLabelWidth + zGradWidth},${yStrokeTranslation} L${pathWidth + zLabelWidth + zGradWidth},${yStrokeTranslation}`);\n\n gradZgrad = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n gradZgrad.setAttribute(\"cs\", \"100,100\");\n gradZgrad.setAttribute(\"stroke-width\", \"1\");\n gradZgrad.setAttribute(\"stroke-opacity\", \"1\");\n gradZgrad.setAttribute(\"stroke\", \"#000000\");\n gradZgrad.setAttribute(\"fill\", \"none\");\n gradZgrad.setAttribute(\"d\", `M${zLabelWidth + zGradWidth},${yStrokeTranslation} L${zLabelWidth + zGradWidth + 5},${yStrokeTranslation}`);\n gradZgrad.setAttribute(\"transform\", \"translate(-5, 0)\");\n\n gradZstroke.appendChild(gradZgrad);\n gradZstroke.appendChild(gradZpath);\n guidesZ.appendChild(gradZstroke);\n }\n\n var axisZLegend = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n axisZLegend.setAttribute(\"class\", \"profile-z-legend\");\n axisZLegend.setAttribute(\"font-family\", style.fontFamily);\n axisZLegend.setAttribute(\"font-size\", \"11px\");\n axisZLegend.setAttribute(\"fill\", \"#5E5E5E\");\n axisZLegend.textContent = \"Altitude (m)\";\n\n axisZLegend.setAttribute(\"transform\", `translate(${zLabelWidth - 8}, ${Math.round(pathHeight / 2)}) rotate(-90)`);\n axisZLegend.setAttribute(\"text-anchor\", \"middle\");\n\n axisZ.appendChild(axisZLegend);\n elevationSvg.appendChild(axisZ);\n elevationSvg.appendChild(guidesZ);\n\n // Détermination des guides en abscisse :\n // Passage éventuel en km\n if (dist > 2000) {\n dist /= 1000;\n distUnit = \"km\";\n }\n\n const maxNumXguides = Math.floor(pathWidth / minXguideWidth);\n let gradX = Math.pow(10, (Math.ceil(Math.log((dist) / maxNumXguides) / Math.log(10)))) / 2;\n const maxGraphX = dist;\n\n // Si plus de guides que le max, on passe à une graduation de 10**x en 10**x (et non 10**x / 2)\n let numXguides = Math.floor(maxGraphX / gradX);\n if (numXguides > maxNumXguides) {\n gradX = Math.pow(10, (Math.ceil(Math.log((dist) / maxNumXguides) / Math.log(10))));\n numXguides = Math.floor(maxGraphX / gradX);\n } else if (numXguides < minNumXGuides) {\n gradX = Math.pow(10, (Math.ceil(Math.log((dist) / maxNumXguides) / Math.log(10))) - 1);\n numXguides = Math.floor(maxGraphX / gradX);\n }\n\n numXguides = Math.max(numXguides, 1);\n const lastGradX = gradX * numXguides;\n\n const axisX = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n axisX.setAttribute(\"class\", \"profile-x-vertical\");\n\n const guidesX = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\n // Décalage des graduations pour que la dernière corresponde à la distance max\n const pxPerMX = pathWidth / maxGraphX;\n const xOffset = (maxGraphX - lastGradX) * pxPerMX;\n const gradXxOffsetPx = Math.round((pathWidth - xOffset) / numXguides);\n\n let gradXtext;\n let xTextTranslation;\n let xStrokeTranslation;\n let gradXstroke;\n let gradXpath;\n let gradXgrad;\n // Ajout des graduations au graphique\n for (let i = 0; i <= numXguides + 1; i++) {\n gradXtext = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n gradXtext.setAttribute(\"class\", \"profile-x-graduation\");\n gradXtext.setAttribute(\"font-family\", style.fontFamily);\n gradXtext.setAttribute(\"font-size\", \"10px\");\n gradXtext.setAttribute(\"fill\", \"#5E5E5E\");\n\n // Exclusion du cas de la dernière graduation : correspond à la distance max : pas de texte\n if (i !== numXguides + 1) {\n // Cas où gradX < 1 : nombres flottants capricieux...\n gradXtext.textContent = (Math.round(100 * i * gradX) / 100).toLocaleString();\n }\n\n xTextTranslation = zLabelWidth + zGradWidth + i * gradXxOffsetPx;\n // Cas de la dernière graduation : correspond à la distance max\n if (i === numXguides + 1) {\n xTextTranslation = zLabelWidth + zGradWidth + pathWidth;\n }\n\n gradXtext.setAttribute(\"transform\", `translate(${xTextTranslation}, ${pathHeight + xGradHeight + 5})`);\n gradXtext.setAttribute(\"text-anchor\", \"middle\");\n axisX.appendChild(gradXtext);\n\n xStrokeTranslation = xTextTranslation - 0.5;\n\n gradXstroke = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n gradXpath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n gradXpath.setAttribute(\"cs\", \"100,100\");\n gradXpath.setAttribute(\"stroke-width\", \"1\");\n if (i !== 0) {\n gradXpath.setAttribute(\"stroke-opacity\", \"0.2\");\n } else {\n gradXpath.setAttribute(\"stroke-opacity\", \"1\");\n }\n gradXpath.setAttribute(\"stroke\", \"#000000\");\n gradXpath.setAttribute(\"fill\", \"none\");\n gradXpath.setAttribute(\"d\", `M${xStrokeTranslation},${pathHeight} L${xStrokeTranslation},0`);\n\n gradXgrad = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n gradXgrad.setAttribute(\"cs\", \"100,100\");\n gradXgrad.setAttribute(\"stroke-width\", \"1\");\n gradXgrad.setAttribute(\"stroke-opacity\", \"1\");\n gradXgrad.setAttribute(\"stroke\", \"#000000\");\n gradXgrad.setAttribute(\"fill\", \"none\");\n gradXgrad.setAttribute(\"d\", `M${xStrokeTranslation},${pathHeight} L${xStrokeTranslation},${pathHeight - 5}`);\n gradXgrad.setAttribute(\"transform\", \"translate(0, 5)\");\n\n gradXstroke.appendChild(gradXgrad);\n gradXstroke.appendChild(gradXpath);\n guidesX.appendChild(gradXstroke);\n }\n\n var axisXLegend = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n axisXLegend.setAttribute(\"class\", \"profile-x-legend\");\n axisXLegend.setAttribute(\"font-family\", style.fontFamily);\n axisXLegend.setAttribute(\"font-size\", \"11px\");\n axisXLegend.setAttribute(\"fill\", \"#5E5E5E\");\n axisXLegend.textContent = `Distance (${distUnit})`;\n\n axisXLegend.setAttribute(\"transform\", `translate(${zLabelWidth + zGradWidth + pathWidth / 2}, ${pathHeight + xGradHeight + xLabelHeight + 3})`);\n axisXLegend.setAttribute(\"text-anchor\", \"middle\");\n\n axisX.appendChild(axisXLegend);\n elevationSvg.appendChild(axisX);\n elevationSvg.appendChild(guidesX);\n\n const elevationPathG = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\n let factor = 1;\n if (distUnit === \"km\") {\n factor = 1000;\n }\n\n let pointX = this._dataDistToSvgX(_points[0].dist / factor, widgetWidth, pathWidth, pxPerMX);\n let pointY = this._dataZToSvgY(_points[0].z, pathHeight, minGraphZ, pxPerMZ);\n let pathD = `M${pointX},${pointY}`;\n\n for (let i = 1; i < _points.length; i++) {\n pointX = this._dataDistToSvgX(_points[i].dist / factor, widgetWidth, pathWidth, pxPerMX);\n pointY = this._dataZToSvgY(_points[i].z, pathHeight, minGraphZ, pxPerMZ);\n pathD += ` L${pointX},${pointY}`;\n }\n\n const pathPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n pathPath.setAttribute(\"cs\", \"100,100\");\n pathPath.setAttribute(\"stroke-width\", \"1\");\n pathPath.setAttribute(\"stroke-opacity\", \"1\");\n pathPath.setAttribute(\"stroke\", style.strokeColor);\n pathPath.setAttribute(\"fill\", \"none\");\n pathPath.setAttribute(\"d\", pathD);\n\n // Fermeture du path pour le fill\n pathD += ` L${pointX},${pathHeight}`;\n pathD += ` L${widgetWidth - pathWidth},${pathHeight}`;\n\n const pathFill = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n pathFill.setAttribute(\"cs\", \"100,100\");\n pathFill.setAttribute(\"stroke-width\", \"1\");\n pathFill.setAttribute(\"stroke-opacity\", \"0\");\n pathFill.setAttribute(\"stroke\", \"#000000\");\n pathFill.setAttribute(\"fill\", style.fillColor);\n pathFill.setAttribute(\"fill-opacity\", \"0.2\");\n pathFill.setAttribute(\"d\", pathD);\n\n elevationPathG.appendChild(pathPath);\n elevationPathG.appendChild(pathFill);\n elevationSvg.appendChild(elevationPathG);\n\n // Mise en place de l'écouteur d'évènement : pour l'affichage dynamique\n const dynamicsG = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n // Pour écouter la position de la souris\n const pathRectangle = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n pathRectangle.setAttribute(\"width\", pathWidth);\n pathRectangle.setAttribute(\"height\", pathHeight);\n pathRectangle.setAttribute(\"transform\", `translate(${widgetWidth - pathWidth},0)`);\n pathRectangle.setAttribute(\"visibility\", \"hidden\");\n pathRectangle.setAttribute(\"pointer-events\", \"all\");\n\n const sortedDist = JSON.parse(JSON.stringify(_points));\n sortedDist.sort(function (e1, e2) {\n return e1.dist - e2.dist;\n });\n\n const focusLineX = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n focusLineX.setAttribute(\"id\", \"focusLineX\");\n focusLineX.setAttribute(\"class\", \"focusLine-default\");\n focusLineX.setAttribute(\"fill\", \"none\");\n focusLineX.setAttribute(\"stroke\", style.focusLineColor);\n focusLineX.setAttribute(\"stroke-width\", \"0.5px\");\n focusLineX.setAttribute(\"visibility\", \"hidden\");\n\n const focusLineY = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n focusLineY.setAttribute(\"id\", \"focusLineY\");\n focusLineY.setAttribute(\"class\", \"focusLine-default\");\n focusLineY.setAttribute(\"fill\", \"none\");\n focusLineY.setAttribute(\"stroke\", style.focusLineColor);\n focusLineY.setAttribute(\"stroke-width\", \"0.5px\");\n focusLineY.setAttribute(\"visibility\", \"hidden\");\n\n const focusCircle = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n focusCircle.setAttribute(\"id\", \"focusCircle\");\n focusCircle.setAttribute(\"r\", 4);\n focusCircle.setAttribute(\"class\", \"circle-default focusCircle-default\");\n focusCircle.setAttribute(\"fill\", style.focusLineColor);\n focusCircle.setAttribute(\"visibility\", \"hidden\");\n\n dynamicsG.appendChild(focusCircle);\n dynamicsG.appendChild(focusLineX);\n dynamicsG.appendChild(focusLineY);\n\n // Tooltip\n const tooltipDiv = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n const altiSpan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n const slopeSpan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n const coordsSpan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n\n tooltipDiv.setAttribute(\"style\", `text-align:center; max-width:220px; font-size:10px; color:#000000; font-family:${style.fontFamily}; z-index:50;`);\n tooltipDiv.style.pointerEvents = \"none\";\n tooltipDiv.style.position = \"fixed\";\n // tooltipDiv.classList.add(\"tooltipInit\");\n // IE...\n tooltipDiv.setAttribute(\"class\", \"tooltipInit\");\n tooltipDiv.setAttribute(\"text-anchor\", \"middle\");\n\n widgetDiv.appendChild(tooltipDiv);\n\n altiSpan.setAttribute(\"class\", \"altiPathValue\");\n altiSpan.setAttribute(\"x\", \"0\");\n altiSpan.setAttribute(\"dy\", \"-.7em\");\n\n slopeSpan.setAttribute(\"class\", \"altiPathValue\");\n slopeSpan.setAttribute(\"x\", \"0\");\n slopeSpan.setAttribute(\"dy\", \"1em\");\n\n coordsSpan.setAttribute(\"class\", \"altiPathCoords\");\n coordsSpan.setAttribute(\"x\", \"0\");\n coordsSpan.setAttribute(\"dy\", \"1em\");\n\n tooltipDiv.appendChild(altiSpan);\n if (_displayProfileOptions.currentSlope) {\n tooltipDiv.appendChild(slopeSpan);\n }\n tooltipDiv.appendChild(coordsSpan);\n\n const tooltipG = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\n dynamicsG.appendChild(tooltipG);\n\n const tooltipBubble = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n tooltipBubble.setAttribute(\"cs\", \"100,100\");\n tooltipBubble.setAttribute(\"fill\", \"#FFFFFF\");\n tooltipBubble.setAttribute(\"stroke\", \"#CCCCCC\");\n tooltipBubble.setAttribute(\"fill-opacity\", \"0.8\");\n tooltipBubble.setAttribute(\"stroke-width\", \"1\");\n tooltipBubble.setAttribute(\"stroke-opacity\", \"1\");\n\n const tooltipBubbleShadow = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n tooltipBubbleShadow.setAttribute(\"cs\", \"100,100\");\n tooltipBubbleShadow.setAttribute(\"fill\", \"#FFFFFF\");\n tooltipBubbleShadow.setAttribute(\"stroke\", \"#000000\");\n tooltipBubbleShadow.setAttribute(\"fill-opacity\", \"0\");\n tooltipBubbleShadow.setAttribute(\"stroke-width\", \"1\");\n tooltipBubbleShadow.setAttribute(\"stroke-opacity\", \"0.4\");\n tooltipBubbleShadow.setAttribute(\"transform\", \"translate(1,1)\");\n\n tooltipG.appendChild(tooltipBubbleShadow);\n tooltipG.appendChild(tooltipBubble);\n tooltipG.appendChild(tooltipDiv);\n\n // tooltipG.classList.add(\"tooltipInit\");\n // IE... deprecated\n tooltipG.setAttribute(\"class\", \"tooltipInit\");\n tooltipG.style.pointerEvents = \"none\";\n\n function onMouseOver () {\n focusLineX.setAttribute(\"visibility\", \"visible\");\n focusLineY.setAttribute(\"visibility\", \"visible\");\n focusCircle.setAttribute(\"visibility\", \"visible\");\n className.__createProfileMarker(self, _points[0]);\n\n // tooltips\n tooltipDiv.classList.remove(\"tooltipInit\");\n tooltipG.classList.remove(\"tooltipInit\");\n tooltipDiv.classList.remove(\"tooltipFadeOut\");\n tooltipG.classList.remove(\"tooltipFadeOut\");\n tooltipDiv.classList.add(\"tooltipFadeIn\");\n tooltipG.classList.add(\"tooltipFadeIn\");\n }\n\n function onMouseOut () {\n focusLineX.setAttribute(\"visibility\", \"hidden\");\n focusLineY.setAttribute(\"visibility\", \"hidden\");\n focusCircle.setAttribute(\"visibility\", \"hidden\");\n className.__removeProfileMarker(self);\n // tooltips\n tooltipDiv.classList.remove(\"tooltipFadeIn\");\n tooltipG.classList.remove(\"tooltipFadeIn\");\n tooltipDiv.classList.add(\"tooltipFadeOut\");\n tooltipG.classList.add(\"tooltipFadeOut\");\n }\n\n function onMouseMove (e) {\n const mousePoint = elevationSvg.createSVGPoint();\n mousePoint.x = e.clientX;\n mousePoint.y = e.clientY;\n const svgMousePoint = mousePoint.matrixTransform(elevationSvg.getScreenCTM().inverse());\n const mouseDist = this._svgXToDataDist(svgMousePoint.x, widgetWidth, pathWidth, pxPerMX) * factor;\n\n // Math.max pour éviter de sortir de l'array\n const distIndex = Math.max(1, this._arrayBisect(sortedDist, mouseDist));\n\n const d0 = _points[distIndex - 1];\n const d1 = _points[distIndex];\n let d = d0;\n if (mouseDist - d0.dist > d1.dist - mouseDist) {\n d = d1;\n }\n\n const focusX = this._dataDistToSvgX(d.dist / factor, widgetWidth, pathWidth, pxPerMX);\n const focusY = this._dataZToSvgY(d.z, pathHeight, minGraphZ, pxPerMZ);\n\n // Mise à jour des éléments graphiques\n focusCircle.setAttribute(\"cx\", focusX);\n focusCircle.setAttribute(\"cy\", focusY);\n\n focusLineX.setAttribute(\"x1\", focusX);\n focusLineX.setAttribute(\"y1\", pathHeight);\n focusLineX.setAttribute(\"x2\", focusX);\n focusLineX.setAttribute(\"y2\", 0);\n\n focusLineY.setAttribute(\"x1\", zLabelWidth + zGradWidth);\n focusLineY.setAttribute(\"y1\", focusY);\n focusLineY.setAttribute(\"x2\", pathWidth + zLabelWidth + zGradWidth);\n focusLineY.setAttribute(\"y2\", focusY);\n\n className.__updateProfileMarker(self, d);\n\n // Mise à jour du tooltip\n const altiSpanTxt = `Altitude : ${d.z.toLocaleString()} m`;\n const slopeSpanTxt = `Pente : ${d.slope} %`;\n const coordsSpanTxt = `(lat : ${d.lat.toLocaleString()} / lon : ${d.lon.toLocaleString()})`;\n\n altiSpan.innerHTML = altiSpanTxt;\n slopeSpan.innerHTML = slopeSpanTxt;\n coordsSpan.innerHTML = coordsSpanTxt;\n\n const tooltipTextWidth = Math.max(\n this._getTextWidth(coordsSpanTxt, coordsSpan),\n this._getTextWidth(altiSpanTxt, altiSpan)\n );\n\n let toolTipBubbleD;\n if (d.dist > (dist * factor) / 2) {\n toolTipBubbleD = `M -0.5 -0.5 l -6 6 l 0 16 l -${tooltipTextWidth + 10} 0 l 0 -44 l ${tooltipTextWidth + 10} 0 l 0 16 l 6 6`;\n tooltipDiv.setAttribute(\"transform\", `translate(${-(tooltipTextWidth / 2 + 12)},0)`); // IE11 !\n } else if (d.dist <= (dist * factor) / 2) {\n toolTipBubbleD = `M -0.5 -0.5 l 6 6 l 0 16 l ${tooltipTextWidth + 10} 0 l 0 -44 l -${tooltipTextWidth + 10} 0 l 0 16 l -6 6`;\n // Largeur de la fleche de la bulle du tooltip\n tooltipDiv.setAttribute(\"transform\", `translate(${(tooltipTextWidth / 2 + 12)},0)`); // IE11 !\n }\n\n tooltipBubble.setAttribute(\"d\", toolTipBubbleD);\n tooltipBubbleShadow.setAttribute(\"d\", toolTipBubbleD);\n\n tooltipG.setAttribute(\"transform\", `translate(${focusX},${focusY})`); // IE11 !\n tooltipG.style.transform = `translate(${focusX}px,${focusY}px)`;\n }\n\n pathRectangle.addEventListener(\"pointerover\", onMouseOver);\n pathRectangle.addEventListener(\"pointerout\", onMouseOut);\n pathRectangle.addEventListener(\"pointermove\", onMouseMove.bind(this));\n\n dynamicsG.appendChild(pathRectangle);\n elevationSvg.appendChild(dynamicsG);\n\n widgetDiv.appendChild(elevationSvg);\n\n return container;\n },\n\n /**\n * Display Profile without graphical rendering (raw service response)\n *\n * @public\n * @param {Object} data - elevations values for profile\n * @param {HTMLElement} container - html container where to display profile\n * @param {Object} context - this control object\n * @param {Object} className - calling class (ie ElevationPath)\n * @returns {DOMElement} profil container\n */\n displayProfileRaw : function (data, container, context, className) {\n if (!container) {\n return;\n }\n\n // on nettoie toujours...\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n\n var _points = (data && data.points) ? data.points : {};\n\n var div = document.createElement(\"textarea\");\n div.id = \"profilElevationResults\";\n div.rows = 10;\n div.cols = 50;\n div.style.width = \"100%\";\n div.innerHTML = JSON.stringify(_points, undefined, 4);\n div.addEventListener(\"mouseover\", function (e) {\n className.__customRawProfileMouseOverEvent(context, e);\n });\n\n // TODO\n // for (var i = 0; i < _points.length; i++) {\n // var point = _points[i];\n // var divC = document.createElement(\"code\");\n // divC.id = \"point_\" + i;\n // divC.innerHTML = JSON.stringify(point, undefined, 4);\n // div.appendChild(divC);\n // divC.addEventListener(\"mouseover\", function (e) {\n // className.__customRawProfileMouseOverEvent(context, e);\n // });\n // }\n\n container.appendChild(div);\n\n return container;\n },\n\n /**\n * Display Profile using D3 javascript framework. This method needs D3 libraries to be loaded.\n *\n * @public\n * @param {Object} data - elevations values for profile\n * @param {HTMLElement} container - html container where to display profile\n * @param {Object} context - this control object\n * @param {Object} className - calling class (ie ElevationPath)\n * @returns {DOMElement} profil container\n */\n displayProfileLibD3 : function (data, container, context, className) {\n var self = context;\n\n if (!container) {\n return;\n }\n\n if (!data) {\n return;\n }\n\n // on nettoie toujours...\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n\n var _points = data.points;\n\n if (data.distance > 2000) {\n data.unit = \"km\";\n for (let i = 0; i < _points.length; i++) {\n _points[i].dist /= 1000;\n }\n }\n\n var _displayProfileOptions = self.options.displayProfileOptions;\n\n var margin = {\n top : 20,\n right : 20,\n bottom : 30,\n left : 40\n };\n\n var widgetWidth = window.getComputedStyle(container).getPropertyValue(\"width\");\n var widgetHeigth = window.getComputedStyle(container).getPropertyValue(\"height\");\n var width = widgetWidth.replace(/px/, \"\") - margin.left - margin.right;\n var height = widgetHeigth.replace(/px/, \"\") - margin.top - margin.bottom;\n\n var x = d3.scale.linear()\n .range([0, width]);\n\n var y = d3.scale.linear()\n .range([height, 0]);\n\n var xAxis = d3.svg.axis()\n .scale(x)\n .orient(\"bottom\")\n .ticks(5);\n\n var yAxis = d3.svg.axis()\n .scale(y)\n .orient(\"left\")\n .ticks(5);\n\n var line = d3.svg.line()\n .interpolate(\"basis\")\n .x(function (d) {\n return x(d.dist);\n })\n .y(function (d) {\n return y(d.z);\n });\n\n var area = d3.svg.area()\n .interpolate(\"basis\")\n .x(function (d) {\n return x(d.dist);\n })\n .y0(height)\n .y1(function (d) {\n return y(d.z);\n });\n\n var svg = d3.select(container)\n .append(\"svg\")\n .attr(\"width\", width + margin.left + margin.right)\n .attr(\"height\", height + margin.top + margin.bottom)\n .append(\"g\")\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\");\n\n var xDomain = d3.extent(_points, function (d) {\n return d.dist;\n });\n x.domain(xDomain);\n\n var yDomain = [\n 0,\n d3.max(_points, function (d) {\n return d.z;\n })\n ];\n y.domain(yDomain);\n\n svg.append(\"path\")\n .datum(_points)\n .attr(\"class\", \"area-d3\")\n .attr(\"d\", area);\n\n svg.append(\"g\")\n .attr(\"class\", \"x axis-d3\")\n .attr(\"transform\", \"translate(0,\" + height + \")\")\n .call(xAxis)\n .append(\"text\")\n .attr(\"y\", -15)\n .attr(\"dy\", \".71em\")\n .attr(\"x\", width)\n .text(\"Distance (\" + data.unit + \")\");\n\n svg.append(\"g\")\n .attr(\"class\", \"y axis-d3\")\n .call(yAxis)\n .append(\"text\")\n .attr(\"transform\", \"rotate(-90)\")\n .attr(\"y\", 6)\n .attr(\"dy\", \".71em\")\n .text(\"Altitude (m)\");\n\n svg.append(\"g\")\n .attr(\"class\", \"grid-d3 vertical\")\n .attr(\"transform\", \"translate(0,\" + height + \")\")\n .call(xAxis\n .orient(\"bottom\")\n .tickSize(-height, 0, 0)\n .tickFormat(\"\")\n );\n\n svg.append(\"g\")\n .attr(\"class\", \"grid-d3 horizontal\")\n .call(yAxis\n .orient(\"left\")\n .tickSize(-width, 0, 0)\n .tickFormat(\"\")\n );\n\n svg.append(\"path\")\n .datum(_points)\n .attr(\"class\", \"line-d3\")\n .attr(\"d\", line);\n\n svg.selectAll(\"circle\")\n .data(_points)\n .enter()\n .append(\"circle\")\n .attr(\"cx\", function (d) {\n return x(d.dist);\n })\n .attr(\"cy\", function (d) {\n return y(d.z);\n })\n .attr(\"r\", 0)\n .attr(\"class\", \"circle-d3\");\n\n var focus = svg.append(\"g\").style(\"display\", \"none\");\n\n focus.append(\"line\")\n .attr(\"id\", \"focusLineX\")\n .attr(\"class\", \"focusLine-d3\");\n focus.append(\"line\")\n .attr(\"id\", \"focusLineY\")\n .attr(\"class\", \"focusLine-d3\");\n focus.append(\"circle\")\n .attr(\"id\", \"focusCircle\")\n .attr(\"r\", 4)\n .attr(\"class\", \"circle-d3 focusCircle-d3\");\n\n var div = d3.select(container).append(\"div\")\n .attr(\"class\", \"tooltip-d3\")\n .style(\"opacity\", 0);\n\n var bisectDist = d3.bisector(function (d) {\n return d.dist;\n }).left;\n\n svg.append(\"rect\")\n .attr(\"class\", \"overlay-d3\")\n .attr(\"width\", width)\n .attr(\"height\", height)\n .on(\"mouseover\", function () {\n focus.style(\"display\", null);\n className.__createProfileMarker(self, _points[0]);\n })\n .on(\"mouseout\", function () {\n focus.style(\"display\", \"none\");\n className.__removeProfileMarker(self);\n\n // tooltips\n div.transition()\n .duration(500)\n .style(\"opacity\", 0);\n })\n .on(\"mousemove\", function () {\n var m = d3.mouse(this);\n var distance = x.invert(m[0]);\n // Math.max pour éviter de sortir de l'array\n var i = Math.max(1, bisectDist(_points, distance));\n\n var d0 = _points[i - 1];\n var d1 = _points[i];\n var d = distance - d0[0] > d1[0] - distance ? d1 : d0;\n\n var xc = x(d.dist);\n var yc = y(d.z);\n\n focus.select(\"#focusCircle\")\n .attr(\"cx\", xc)\n .attr(\"cy\", yc);\n focus.select(\"#focusLineX\")\n .attr(\"x1\", xc).attr(\"y1\", y(yDomain[0]))\n .attr(\"x2\", xc).attr(\"y2\", y(yDomain[1]));\n focus.select(\"#focusLineY\")\n .attr(\"x1\", x(xDomain[0])).attr(\"y1\", yc)\n .attr(\"x2\", x(xDomain[1])).attr(\"y2\", yc);\n\n className.__updateProfileMarker(self, d);\n\n // tooltips\n div.transition()\n .duration(200)\n .style(\"opacity\", 0.9);\n\n var _message = \"\";\n _message += \" Altitude : \" + d.z + \" m\";\n if (_displayProfileOptions.currentSlope) {\n _message += \"
Pente : \" + d.slope + \" %\";\n }\n _message += \"
(Lat : \" + d.lat + \"/ Lon : \" + d.lon + \")\";\n\n div.html(_message)\n .style(\"left\", (d3.event.pageX) + \"px\")\n .style(\"top\", (d3.event.pageY - 28) + \"px\");\n });\n\n // return d3.selectAll(\"rect.overlay\")[0][0];\n return svg;\n },\n\n /**\n * Display Profile using Amcharts framework. This method needs AmCharts libraries to be loaded.\n *\n * @public\n * @param {Object} data - elevations values for profile\n * @param {HTMLElement} container - html container where to display profile\n * @param {Object} context - this control object\n * @param {Object} className - calling class (ie ElevationPath)\n * @returns {DOMElement} profil container\n */\n displayProfileLibAmCharts : function (data, container, context, className) {\n var self = context;\n\n if (!container) {\n return;\n }\n\n if (!data) {\n return;\n }\n\n var _points = data.points;\n\n var ballonText = \"[[title]] : [[value]]m
\";\n var currentSlope = self.options.displayProfileOptions.currentSlope;\n if (currentSlope) {\n ballonText += \"Pente : [[slope]] %
\";\n }\n ballonText += \"(Lat: [[lat]] / Lon:[[lon]])\";\n\n AmCharts.addInitHandler(function () {});\n\n if (data.distance > 2000) {\n data.unit = \"km\";\n for (let i = 0; i < _points.length; i++) {\n _points[i].dist /= 1000;\n }\n }\n\n for (let i = 0; i < _points.length; i++) {\n var dist = _points[i].dist;\n var coeffArrond = 100;\n if (dist > 100) {\n coeffArrond = 1;\n } else if (dist > 10) {\n coeffArrond = 10;\n }\n\n // Correction arrondi distance totale\n dist = Math.round(dist * coeffArrond) / coeffArrond;\n _points[i].dist = dist;\n }\n\n var settings = {\n type : \"serial\",\n pathToImages : \"http://cdn.amcharts.com/lib/3/images/\",\n categoryField : \"dist\",\n autoMarginOffset : 0,\n marginRight : 10,\n marginTop : 10,\n startDuration : 0,\n color : \"#5E5E5E\",\n fontSize : 8,\n theme : \"light\",\n thousandsSeparator : \"\",\n numberFormatter : {\n precision : -1,\n decimalSeparator : \",\",\n thousandsSeparator : \" \"\n },\n categoryAxis : {\n color : \"#5E5E5E\",\n gridPosition : \"start\",\n minHorizontalGap : 40,\n tickPosition : \"start\",\n title : \"Distance (\" + data.unit + \")\",\n titleColor : \"#5E5E5E\",\n labelOffset : 0,\n startOnAxis : true\n },\n chartCursor : {\n animationDuration : 0,\n bulletsEnabled : true,\n bulletSize : 10,\n categoryBalloonEnabled : false,\n cursorColor : \"#F90\",\n graphBulletAlpha : 1,\n graphBulletSize : 1,\n zoomable : false\n },\n trendLines : [],\n graphs : [{\n balloonColor : \"#CCCCCC\",\n balloonText : ballonText,\n bullet : \"round\",\n bulletAlpha : 0,\n bulletBorderColor : \"#FFF\",\n bulletBorderThickness : 2,\n bulletColor : \"#F90\",\n bulletSize : 6,\n hidden : false,\n id : \"AmGraph-1\",\n fillAlphas : 0.4,\n fillColors : \"#C77A04\",\n lineAlpha : 1,\n lineColor : \"#C77A04\",\n lineThickness : 1,\n title : \"Altitude\",\n valueField : \"z\"\n }],\n guides : [],\n valueAxes : [{\n id : \"ValueAxis-1\",\n minVerticalGap : 20,\n title : \"Altitude (m)\"\n }],\n balloon : {\n borderColor : \"#CCCCCC\",\n borderThickness : 1,\n fillColor : \"#FFFFFF\",\n showBullet : true\n },\n titles : [],\n allLabels : [],\n dataProvider : _points\n };\n\n var _containerProfile = AmCharts.makeChart(container, settings);\n\n _containerProfile.addListener(\"changed\", function (e) {\n var obj = e.chart.dataProvider[e.index];\n className.__updateProfileMarker(self, obj);\n });\n\n return _containerProfile;\n }\n};\n\nexport default ProfileElevationPathDOM;\n","/** globals AmCharts, d3 */\n// import CSS\nimport \"../../CSS/Controls/ElevationPath/GPFelevationPath.css\";\n// import \"../../CSS/Controls/ElevationPath/GPFelevationPathStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport {\n Fill,\n Icon,\n Stroke,\n Style,\n Image,\n Circle\n} from \"ol/style\";\nimport { Point } from \"ol/geom\";\nimport { Draw as DrawInteraction } from \"ol/interaction\";\nimport { transform as olTransformProj } from \"ol/proj\";\nimport { getDistance as olGetDistanceSphere } from \"ol/sphere\";\nimport Feature from \"ol/Feature\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport VectorSource from \"ol/source/Vector\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Utils from \"../../Utils/Helper\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport ID from \"../../Utils/SelectorID\";\nimport Markers from \"../Utils/Markers\";\n// import local with ol dependencies\nimport Interactions from \"../Utils/Interactions\";\nimport MeasureToolBox from \"../ToolBoxMeasure/MeasureToolBox\";\nimport Measures from \"../Measures/Measures\";\nimport LayerSwitcher from \"../LayerSwitcher/LayerSwitcher\";\nimport ButtonExport from \"../Export/Export\";\nimport GeoJSONExtended from \"../../Formats/GeoJSON\";\n// DOM\nimport ElevationPathDOM from \"./ElevationPathDOM\";\nimport ProfileElevationPathDOM from \"./ProfileElevationPathDOM\";\n\nvar logger = Logger.getLogger(\"elevationpath\");\n\n/**\n * @classdesc\n *\n * Elevation Path Control. Allows users to draw a path on a Openlayers map see the elevation profile computed with geoportal elevation path web service along that path.\n *\n * @constructor\n * @alias ol.control.ElevationPath\n * @type {ol.control.ElevationPath}\n * @extends ol.control.Control\n * @param {Object} options - options for function call.\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {String} [options.apiKey] - API key for services call (isocurve and autocomplete services). The key \"calcul\" is used by default.\n * @param {Boolean} [options.active = false] - specify if control should be actived at startup. Default is false.\n * @param {Boolean} [options.ssl = true] - use of ssl or not (default true, service requested using https protocol)\n * @param {Boolean|Object} [options.export = false] - Specify if button \"Export\" is displayed. For the use of the options of the \"Export\" control, see {@link ol.control.Export}\n * @param {Object} [options.elevationOptions = {}] - elevation path service options. See {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~getAltitude Gp.Services.getAltitude()} for available options\n * @param {Object} [options.layerDescription = {}] - Layer informations to be displayed in LayerSwitcher widget (only if a LayerSwitcher is also added to the map)\n * @param {String} [options.layerDescription.title = \"Profil altimétrique\"] - Layer title to be displayed in LayerSwitcher\n * @param {String} [options.layerDescription.description = \"Mon profil altimétrique\"] - Layer description to be displayed in LayerSwitcher\n * @param {Object} [options.stylesOptions] - styles management\n * @param {Object} [options.stylesOptions.marker = {}] - styles management of marker displayed on map when the user follows the elevation path. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Image-ImageStyle.html ol.style.Image} subclass object\n * @param {Object} [options.stylesOptions.draw = {}] - styles used when drawing. Specified with following properties.\n * @param {Object} [options.stylesOptions.draw.pointer = {}] - Style for mouse pointer when drawing the line. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Image-ImageStyle.html ol.style.Image} subclass object.\n * @param {Object} [options.stylesOptions.draw.start = {}] - Line Style when drawing. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Stroke-Stroke.html ol.style.Stroke} object.\n * @param {Object} [options.stylesOptions.draw.finish = {}] - Line Style when finished drawing. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Stroke-Stroke.html ol.style.Stroke} object.\n * @param {Object} [options.displayProfileOptions = {}] - profile options.\n * @param {Boolean} [options.displayProfileOptions.totalDistance = true] - display the total distance of the path\n * @param {Boolean} [options.displayProfileOptions.greaterSlope = true] - display the greater slope into the graph\n * @param {Boolean} [options.displayProfileOptions.meanSlope = true] - display the mean slope into the graph\n * @param {Boolean} [options.displayProfileOptions.ascendingElevation = true] - display the ascending elevation into the graph\n * @param {Boolean} [options.displayProfileOptions.descendingElevation = true] - display the descending elevation into the graph\n * @param {Boolean} [options.displayProfileOptions.currentSlope = true] - display current slope value on profile mouseover\n * @param {Function} [options.displayProfileOptions.apply] - function to display profile if you want to cutomise it. By default, ([DISPLAY_PROFILE_BY_DEFAULT()](./ol.control.ElevationPath.html#.DISPLAY_PROFILE_BY_DEFAULT)) is used. Helper functions to use with D3 ([DISPLAY_PROFILE_LIB_D3()](./ol.control.ElevationPath.html#.DISPLAY_PROFILE_LIB_D3)) or AmCharts ([DISPLAY_PROFILE_LIB_AMCHARTS()](./ol.control.ElevationPath.html#.DISPLAY_PROFILE_LIB_AMCHARTS)) frameworks are also provided. You may also provide your own function.\n * @param {Object} [options.displayProfileOptions.target] - DOM container to use to display the profile.\n * @fires elevationpath:drawstart\n * @fires elevationpath:drawend\n * @fires elevationpath:compute\n * @fires export:compute\n * @example\n *\n * var measure = new ol.control.ElevationPath({\n * export : false,\n * stylesOptions : {\n * draw : {\n * finish : new ol.style.Stroke({\n * color : \"rgba(0, 0, 0, 0.5)\",\n * width : 2\n * })\n * },\n * }\n * displayProfileOptions : {\n * apply : ol.control.ElevationPath.DISPLAY_PROFILE_RAW,\n * }\n * });\n *\n * // if you want to pluggued the control Export with options :\n * var measure = new ol.control.ElevationPath({\n * export : {\n * name : \"export\",\n * format : \"geojson\",\n * title : \"Exporter\",\n * menu : false\n * }\n * });\n *\n * Exemples :\n * - displayProfileOptions.apply : null\n * - displayProfileOptions.apply : function (elevations, container, context) { // do some stuff... }\n * - displayProfileOptions.apply : ol.control.ElevationPath.DISPLAY_PROFILE_{LIB_AMCHARTS | LIB_D3 | RAW}\n *\n */\nvar ElevationPath = class ElevationPath extends Control {\n\n /**\n * See {@link ol.control.ElevationPath}\n * @module ElevationPath\n * @alias module:~controls/ElevationPath\n * @param {*} options - options\n * @example\n * import ElevationPath from \"gpf-ext-ol/controls/ElevationPath\"\n * ou\n * import { ElevationPath } from \"gpf-ext-ol\"\n */\n constructor (options) {\n logger.trace(\"ElevationPath()\");\n\n /**\n * options\n * @private\n */\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof ElevationPath)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"ElevationPath\";\n\n // uuid\n this._uid = options.id || ID.generate();\n\n // container : HTMLElement\n this._showContainer = null;\n this._pictoButton = null;\n this._panelContainer = null;\n this._profileContainer = null;\n this._waitingContainer = null;\n this._infoContainer = null;\n\n // timer sur la fenetre d'informations des données\n this._timerHdlr = null;\n\n // objet de type \"ol.style\"\n this._drawStyleStart = null;\n this._drawStyleFinish = null;\n this._markerStyle = null;\n\n // graph\n this._profile = null;\n\n // data elevations\n this._data = {};\n\n /* objet de type\n \"ol.source.Vector\",\n \"ol.layer.Vector\",\n \"ol.interaction.Draw\"\n */\n this._measureSource = null;\n this._measureVector = null;\n this._measureDraw = null;\n\n // objet de type ol.feature, saisie en cours\n this._lastSketch = null;\n this._currentSketch = null;\n\n // objet de type ol.feature, marker\n this._marker = null;\n\n // initialisation du composant\n this._initialize(options);\n\n // creation du DOM container\n this._container = this._initializeContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n }\n\n /**\n * Styles applied by default if stylesOptions property is not set.\n */\n static DEFAULT_STYLES = {\n // styling drawing by default\n // see => Measures.DEFAULTS_STYLES\n // stying marker to the profile by default\n MARKER : new Icon({\n src : Markers[\"lightOrange\"],\n // image avec un mauvais ratio size 51/38 pixels\n // src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAsCAYAAAAATWqyAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABTtJREFUeNq8WGtsFUUU/rb3gtdCAykFG9AUDTQUKimhxUewEusrJYoBo4FfEgoqotHERH6oP9TGmJhIrIlWAf9hjAaEiME2pgFfVVpFii8sWqIQLLSx3EJLW7p+Z2Z2b2l7d/b23vZLTmZ2duacb2fmnDk7DlKA67rXs1hJKacsohRQppjXFygnKT9TDlH2O47zFzIFGnco91EOuqnjoBnr2Ow4FhIlLN6m3DykFTh3BGj/Doj/CfSe082xPCDnBmDWTUBeyXDVjZTHOUNHUiZCEs+weI0ySTV0/w0c2wa07gIungn+vOx8YN46oPhpYOp1Xms/5TmSeSMUERKImFnYqBoGuPRNL5LEW8BgX2rrmjWZZLYApS8BUW8r4T0zO5eTEjFr+S6lSjV0HgPqVwNdf6S30abNB+7aDeQWey3bKZtIxvU5DxvyrE/izJfAvuXpkxCIDtElOjWqjK2RM8LZWMbiG0oEnUc5kB7a14WMYvI04H56du5ieZKluZWz8r0/IyQh5TuKRH8cqFuTeRIC0Sm6xYbYok1j21+ahyhLVO3wC8D5VowbRLfY0FhibOulIavDLEoRZyD8sJDeMWBXKG5ZsIobsdDsg+OMq3u1m1u9KQo8zP45EqjRxOUpk6i50IRl4FuGjpZtwUoiMYa314GFj/EzIsN8n8v+C1e4kfvwcm+wnhsZY27xQ8oiWZpKrWRQB6tAElfxpKnjsCdGklDzG9HvpI/0DYLYEpsalVnmAAM6fgR62oMHl70C5N9mn3rpI32DILbEpkZ5ljlFgbPNFtebzij5VPhNKX1lTBASNtXSzPZ3cxCuvVOH7FTCu4yxeZDGbCES0z5+PniQ3uGpwTYmYTOWCPGTpgYP6u9OnYhtzBCbQkSH0NiM4EEdP6VOxDYmYbNLiJxQ1elFwYPaG3XQCn3QHddjgpCweUKI6K2bvzw4YROf//rJob6fZl/H2FRoFiINfqo3qyzYwD8MVIeYLw32J+8j76SP9A2C2BKbGg1CZL+EF/W4YKP9a3/fCeyhkrY9DOOXEu1SlzZ5J31sSNjqURm/OfQkY9qgvkYOvXhbuH0g505Oga7HT9rPF9+t5+pDL0ulwzt46FV5ROax+JUSRRtP0LoHMK64+xNg7iqVEVOKSKRVxRGpsKhRnaRD4SPjR0J0axKCGmP7ilQxm4X8d8xXmfvHJZlPkCR3WfODl9FLMlxCIhevSJ5Nwzo1XdKxYpe3hpmB6BKdmoS43VqPxIgsni+aWOg8biZ3f+nLmSMiuvKWek/P01az7QdLyNVT7lC/l59WAKcb0iMxhzpW1nvmvpDtSiKD1l9OkpnDgv8UyMWFU9wvTP8vdY6NhJwnD1JVtso2OiiLSeL0iJUbNfg6zikVVwRTyOn2HWOfjfLtHgnBhtFIJCViyNDZUatdmnGlaFPqJIoe1WM1aqlz71ivJbLNobgAA9zgu7nZ/vstHAk5WVdzaPRqmGC5lER6kjpV4OWJdq+1kkshSk4VH9izcy/bV66qSPQZV+0J9G7rTY6+XNmqHmYwyJVV24kse1X31dhKHdasygkzy+a64oC4nWr47F4e858nSbLv4V/KAe9JKpVDrx/SImLIXMOiRUKdujESl+49O8xVZxpXzVc/C/I/RxL/hgq8YYkYhev9q6kVO4d9B+sr3vdICNaHJTHWW8Ya/87wqy2uWwstUk/gTYw3aCRGOarMDfS67kfFWqSuIe9imAjQEC272nJHixYNaSvGRIIGN49ywbsZEw1zI11N6TZSHeaGORn+F2AAJtRIMx4t+hUAAAAASUVORK5CYII=\",\n anchor : [0.5, 1],\n snapToPixel : true\n }),\n // styling service results points by default\n RESULTS : {\n // INFO orienté maintenance !\n imageRadius : 5,\n imageFillColor : \"rgba(128, 128, 128, 0.2)\",\n imageStrokeColor : \"rgba(0, 0, 0, 0.7)\",\n imageStrokeWidth : 2\n }\n // FIXME ???\n // PROFILE : {\n // type : \"serial\",\n // pathToImages : \"http://cdn.amcharts.com/lib/3/images/\",\n // categoryField : \"dist\",\n // autoMarginOffset : 0,\n // marginRight : 10,\n // marginTop : 10,\n // startDuration : 0,\n // color : \"#5E5E5E\",\n // fontSize : 10,\n // theme : \"light\",\n // thousandsSeparator : \"\",\n // categoryAxis : {\n // color : \"#5E5E5E\",\n // gridPosition : \"start\",\n // minHorizontalGap : 40,\n // tickPosition : \"start\",\n // title : \"Distance (km)\",\n // titleColor : \"#5E5E5E\",\n // startOnAxis : true\n // },\n // chartCursor : {\n // animationDuration : 0,\n // bulletsEnabled : true,\n // bulletSize : 10,\n // categoryBalloonEnabled : false,\n // cursorColor : \"#F90\",\n // graphBulletAlpha : 1,\n // graphBulletSize : 1,\n // zoomable : false\n // },\n // trendLines : [],\n // graphs : [\n // {\n // balloonColor : \"#CCCCCC\",\n // balloonText : \"[[title]] : [[value]]m
(lat: [[lat]] / lon:[[lon]])\",\n // bullet : \"round\",\n // bulletAlpha : 0,\n // bulletBorderColor : \"#FFF\",\n // bulletBorderThickness : 2,currentSlope\n // bulletColor : \"#F90\",\n // bulletSize : 6,\n // hidden : false,\n // id : \"AmGraph-1\",\n // fillAlphas : 0.4,\n // fillColors : \"#C77A04\",\n // lineAlpha : 1,\n // lineColor : \"#C77A04\",\n // lineThickness : 1,\n // title : \"Altitude\",\n // valueField : \"z\"\n // }\n // ],\n // guides : [],\n // valueAxes : [\n // {\n // id : \"ValueAxis-1\",\n // minVerticalGap : 20,\n // title : \"Altitude (m)\"\n // }\n // ],\n // allLabels : [],\n // balloon : {\n // borderColor : \"#CCCCCC\",\n // borderThickness : 1,\n // fillColor : \"#FFFFFF\",\n // showBullet : true\n // },\n // titles : []\n // }\n };\n\n /**\n * suppression du marker\n *\n * @param {Object} context - context\n *\n * @private\n */\n static __removeProfileMarker (context) {\n var self = context;\n // suppression de l'ancien marker\n if (self._marker) {\n self._measureSource.removeFeature(self._marker);\n self._marker = null;\n }\n };\n\n /**\n * suppression du marker\n *\n * @param {Object} context - context\n * @param {Object} d - d\n *\n * @private\n */\n static __createProfileMarker (context, d) {\n var self = context;\n // suppression de l'ancien marker\n if (self._marker) {\n self._measureSource.removeFeature(self._marker);\n self._marker = null;\n }\n var map = self.getMap();\n var proj = map.getView().getProjection();\n\n var _coordinate = olTransformProj([d.lon, d.lat], \"EPSG:4326\", proj);\n var _coordinateProj = self._measureSource\n .getFeatures()[0]\n .getGeometry()\n .getClosestPoint(_coordinate);\n\n var _geometry = new Point(_coordinateProj);\n\n self._marker = new Feature({\n geometry : _geometry\n });\n logger.trace(_geometry);\n\n // style\n self._marker.setStyle(self._markerStyle);\n\n // ajout du marker sur la map\n self._measureSource.addFeature(self._marker);\n }\n\n /**\n * mise à jour du marker\n *\n * @param {Object} context - context\n * @param {Object} d - data\n *\n * @private\n */\n static __updateProfileMarker (context, d) {\n var self = context;\n ElevationPath.__removeProfileMarker(self);\n ElevationPath.__createProfileMarker(self, d);\n }\n\n /**\n * TODO : customisation possible d'une opération sur le profil\n *\n * @param {Object} context - context\n * @param {Object} d - data\n *\n * @private\n */\n static __customRawProfileOperation (context, d) {\n logger.log(\"__customRawProfileOperation\");\n\n var self = context;\n\n var _pts = d.points;\n var _proj = self.getMap().getView().getProjection();\n for (var i = 0; i < _pts.length; i++) {\n var obj = _pts[i];\n var _coordinate = olTransformProj([obj.lon, obj.lat], \"EPSG:4326\", _proj);\n var _geometry = new Point(_coordinate);\n\n self._marker = new Feature({\n geometry : _geometry\n });\n logger.trace(_geometry);\n\n // TODO style en options ?\n var styles = ElevationPath.DEFAULT_STYLES.RESULTS;\n var _image = new Circle({\n radius : styles.imageRadius,\n stroke : new Stroke({\n color : styles.imageStrokeColor,\n width : styles.imageStrokeWidth\n }),\n fill : new Fill({\n color : styles.imageFillColor\n })\n });\n self._marker.setStyle(new Style({\n image : _image\n }));\n\n // ajout du marker sur la map\n self._measureSource.addFeature(self._marker);\n }\n }\n\n /**\n * TODO : customisation possible d'une opération sur le profil\n * Ex. Methode appélée dans le DOM : ProfileElevationPathDOM\n *\n * @param {Object} context - context\n * @param {Object} e - event\n * @private\n */\n static __customRawProfileMouseOverEvent (context, e) {\n logger.log(\"__customRawProfileMouseOverEvent\", context, e);\n }\n\n /**\n * display Profile using Amcharts framework. This method needs AmCharts libraries to be loaded.\n *\n * @param {Object} data - collection elevations\n * @param {HTMLElement} container - container\n * @param {Object} context - this control object\n */\n static DISPLAY_PROFILE_LIB_AMCHARTS (data, container, context) {\n logger.trace(\"ElevationPath.DISPLAY_PROFILE_LIB_AMCHARTS\");\n\n // Calcul du profile\n if (typeof AmCharts === \"undefined\") {\n logger.log(\"Lib. AmCharts is not loaded !\");\n return;\n }\n\n var profile = ProfileElevationPathDOM.displayProfileLibAmCharts(data, container, context, ElevationPath);\n // on sauvegarde le profil du container dans l'objet\n if (profile) {\n this._profile = profile;\n }\n }\n\n /**\n * display Profile using D3 javascript framework. This method needs D3 libraries to be loaded.\n *\n * @param {Object} data - elevations values for profile\n * @param {HTMLElement} container - html container where to display profile\n * @param {Object} context - this control object\n */\n static DISPLAY_PROFILE_LIB_D3 (data, container, context) {\n logger.trace(\"ElevationPath.DISPLAY_PROFILE_LIB_D3\");\n\n // Calcul du profile\n if (typeof d3 === \"undefined\") {\n logger.log(\"Lib. D3 is not loaded !\");\n return;\n }\n\n var profile = ProfileElevationPathDOM.displayProfileLibD3(data, container, context, ElevationPath);\n // on sauvegarde le profil du container dans l'objet\n if (profile) {\n this._profile = profile;\n }\n }\n\n /**\n * display Profile without graphical rendering (raw service response)\n *\n * @param {Object} data - elevations values for profile\n * @param {HTMLElement} container - html container where to display profile\n * @param {Object} context - this control object\n */\n static DISPLAY_PROFILE_RAW (data, container, context) {\n logger.trace(\"ElevationPath.DISPLAY_PROFILE_RAW\");\n\n var profile = ProfileElevationPathDOM.displayProfileRaw(data, container, context, ElevationPath);\n // on sauvegarde le profil du container dans l'objet\n if (profile) {\n this._profile = profile;\n }\n };\n\n /**\n * Display Profile function used by default : no additonal framework needed.\n *\n * @param {Object} data - elevations values for profile\n * @param {HTMLElement} container - html container where to display profile\n * @param {Object} context - this control object\n */\n static DISPLAY_PROFILE_BY_DEFAULT (data, container, context) {\n logger.trace(\"ElevationPath.DISPLAY_PROFILE_BY_DEFAULT\");\n\n var profile = ProfileElevationPathDOM.displayProfileByDefault(data, container, context, ElevationPath);\n // on sauvegarde le profil du container dans l'objet\n if (profile) {\n this._profile = profile;\n }\n };\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Attach control to map. Overloaded ol.control.Control.setMap() method.\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n logger.trace(\"ElevationPath::setMap\");\n\n if (map) {\n // activation des interactions de dessin selon la valeur de\n // l'option active\n if (this.options.active) {\n // on n'affiche pas la fenetre de profile s'il n'existe pas...\n if (this._profile === null) {\n this._panelContainer.style.display = \"none\";\n // this._panelContainer.style.visibility = \"hidden\";\n }\n this._initMeasureInteraction(map);\n this._addMeasureInteraction(map);\n }\n\n // ajout du composant dans une toolbox\n if (!this.options.target && !this.options.position) {\n MeasureToolBox.add(map, this);\n }\n\n // ajout d'un bouton d'export\n if (this.options.export) {\n var opts = Utils.assign({ control : this }, this.options.export);\n this.export = new ButtonExport(opts);\n this.export.render();\n var self = this;\n this.export.on(\"export:compute\", (e) => {\n self.dispatchEvent({\n type : \"export:compute\",\n content : e.content\n });\n });\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n };\n\n /**\n * Returns true if widget is actived (drawing),\n * false otherwise\n *\n * @returns {Boolean} active - true or false\n */\n getActive () {\n logger.trace(\"ElevationPath::getActive\");\n return this.options.active;\n }\n\n /**\n * Actived widget drawing or not\n *\n * @param {Boolean} active - true / false\n */\n setActive (active) {\n logger.trace(\"ElevationPath::setActive\");\n this.options.active = active;\n }\n\n /**\n * Get elevation data\n *\n * @returns {Object} data - elevations\n * @example\n * {\n * type // \"elevationpath\"\n * greaterSlope // pente max\n * meanSlope // pente moyenne\n * distancePlus // distance cumulée positive\n * distanceMinus // distance cumulée négative\n * ascendingElevation // dénivelé cumulée positive\n * descendingElevation // dénivelé cumulée négative\n * altMin // altitude min\n * altMax // altitude max\n * distance // distance totale\n * unit // unité des mesures de distance\n * points // elevations\n * }\n */\n getData () {\n return Utils.assign({\n type : \"elevationpath\"\n }, this._data);\n }\n\n /**\n * Set profile data\n *\n * @param {*} data - elevations\n * @example\n * {\n * greaterSlope // pente max\n * meanSlope // pente moyenne\n * distancePlus // distance cumulée positive\n * distanceMinus // distance cumulée négative\n * ascendingElevation // dénivelé cumulée positive\n * descendingElevation // dénivelé cumulée négative\n * altMin // altitude min\n * altMax // altitude max\n * distance // distance totale\n * unit // unité des mesures de distance\n * points // elevations\n * }\n */\n setData (data) {\n this._data = data;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this._container;\n }\n\n /**\n * Get layer\n *\n * @returns {ol.layer.Vector} layer\n */\n getLayer () {\n return this._measureVector;\n }\n\n /**\n * Set layer\n *\n * @param {Object} layer - ol.layer.Vector profil layer\n */\n setLayer (layer) {\n if (!layer) {\n this._measureVector = null;\n return;\n }\n\n if (!(layer instanceof VectorLayer)) {\n logger.log(\"no valid layer given for hosting drawn features.\");\n return;\n }\n\n // application des styles\n layer.setStyle(this._drawStyleFinish);\n // sauvegarde\n this._measureVector = layer;\n this._measureSource = layer.getSource();\n }\n\n /**\n * Get vector layer\n *\n * @returns {String} geojson - GeoJSON format layer\n */\n getGeoJSON () {\n var features = this._measureVector.getSource().getFeatures();\n\n var Format = new GeoJSONExtended({\n defaultStyle : this._drawStyleFinish\n });\n // INFO\n // par defaut, webmercator ou \"EPSG:3857\"\n var geojson = Format.writeFeatures(features, {\n dataProjection : \"EPSG:4326\",\n featureProjection : \"EPSG:3857\"\n });\n\n return geojson;\n }\n\n /**\n * Get default style\n *\n * @returns {ol.style} style\n */\n getStyle () {\n return this._drawStyleFinish;\n }\n\n /**\n * clean\n * @param {Boolean} remove - remove layer\n */\n clean (remove) {\n logger.trace(\"ElevationPath::clean\");\n\n var map = this.getMap();\n\n // fenetre du profil\n this._panelContainer.style.display = \"none\";\n // this._panelContainer.style.visibility = \"hidden\";\n\n // picto\n this._pictoButton.setAttribute(\"aria-pressed\", false);\n\n // this._removeMeasure();\n this._removeProfile();\n this._removeMeasureInteraction(map, typeof remove !== \"undefined\" ? remove : false);\n\n this.setLayer();\n }\n\n /**\n * This method is public.\n * It allows to init the control.\n * @fixme\n */\n init () {\n // FIXME\n // le panneau du profil ne peut pas afficher un profil si il est caché\n // car le profil est calculé en fonction de la taille du panneau (clientHeight / clientWidth),\n // et ces valeurs sont à 0 !?\n this._pictoButton.setAttribute(\"aria-pressed\", true);\n this._panelContainer.style.display = \"block\";\n this._displayProfile(this._data);\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n }\n\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize control (called by constructor)\n *\n * @param {Object} options - options\n *\n * @private\n */\n _initialize (options) {\n logger.trace(\"ElevationPath::_initialize : \", options);\n\n // liste des options\n this.options = {\n target : null,\n render : null,\n active : false,\n apiKey : null,\n export : false,\n elevationOptions : {\n outputFormat : \"json\"\n },\n layerDescription : {\n title : \"Profil altimétrique\",\n description : \"Mon profil altimétrique\"\n },\n displayProfileOptions : {\n totalDistance : true,\n greaterSlope : true,\n meanSlope : true,\n ascendingElevation : true,\n descendingElevation : true,\n currentSlope : true,\n apply : null,\n target : null\n },\n stylesOptions : {\n profile : null,\n draw : null,\n marker : null\n }\n };\n\n // merge with user options\n Utils.mergeParams(this.options, options);\n\n this.options.target = options.target || null;\n // this.options.render = options.render || null;\n\n // cle API sur le service\n this.options.apiKey = options.apiKey;\n\n // gestion de l'affichage du profil\n var _profile = options.displayProfileOptions || {};\n\n // bouton export\n this.export = null;\n\n // gestion de la fonction du profil\n var displayFunction = _profile.apply;\n this.options.displayProfileOptions.apply = (typeof displayFunction === \"function\")\n ? displayFunction : ElevationPath.DISPLAY_PROFILE_BY_DEFAULT;\n\n // gestion du container du profil\n var displayContainer = _profile.target;\n this.options.displayProfileOptions.target = (typeof displayContainer !== \"undefined\")\n ? displayContainer : null;\n\n // gestion des styles\n var _styles = options.stylesOptions || {};\n\n // FIXME ???\n // gestion du style du profil\n // var profileStyle = _styles.profile;\n // this.options.stylesOptions.profile = ( typeof profileStyle === \"undefined\" || Object.keys(profileStyle).length === 0 ) ?\n // ElevationPath.DEFAULT_STYLES.PROFILE : profileStyle;\n // this._createStylingProfile();\n\n // gestion des styles du tracé\n this.options.stylesOptions.draw = _styles.draw || {};\n this._createStylingDraw();\n\n // gestion des styles du marker\n this.options.stylesOptions.marker = _styles.marker || {};\n this._createStylingMarker();\n }\n\n /**\n * initialize component container (DOM)\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initializeContainer () {\n logger.trace(\"ElevationPath::_initializeContainer : \", this._uid);\n\n // create main container\n var container = this._createMainContainerElement();\n\n var picto = this._pictoButton = this._createShowElevationPathPictoElement();\n container.appendChild(picto);\n\n // mode \"active\"\n if (this.options.active) {\n this._pictoButton.click();\n }\n\n // panneau\n var panel = this._panelContainer = this._createElevationPathPanelElement();\n var panelDiv = this._createElevationPathPanelDivElement();\n panel.appendChild(panelDiv);\n\n // header\n var header = this._createElevationPathPanelHeaderElement();\n panelDiv.appendChild(header);\n\n // profile\n var profile = this._createElevationPathPanelProfilElement();\n this._profileContainer = profile.firstChild;\n panelDiv.appendChild(profile);\n\n // waiting\n var waiting = this._waitingContainer = this._createElevationPathWaitingElement();\n panelDiv.appendChild(waiting);\n\n // info\n var info = this._infoContainer = this._createElevationPathInformationsElement();\n panelDiv.appendChild(info);\n\n if (this.options.displayProfileOptions.target === null) {\n container.appendChild(panel);\n }\n\n return container;\n }\n\n // ################################################################### //\n // ###################### init styles ################################ //\n // ################################################################### //\n\n /**\n * create style marker object : \"ol.style\"\n *\n * @private\n */\n _createStylingMarker () {\n logger.trace(\"ElevationPath::_createStylingMarker \");\n\n var marker = ElevationPath.DEFAULT_STYLES.MARKER;\n logger.trace(\"style marker\", marker);\n\n // si marker n'est pas un objet ol.style.Image, on applique le\n // style par défaut.\n if (this.options.stylesOptions.marker instanceof Image) {\n marker = this.options.stylesOptions.marker;\n }\n\n this._markerStyle = new Style({\n image : marker\n });\n }\n\n /**\n * create style draw object : \"ol.style\"\n *\n * @private\n */\n _createStylingDraw () {\n logger.trace(\"ElevationPath::_createStylingDraw\");\n\n // on interprete les params pour y creer un objet ol.Style\n var styles = this.options.stylesOptions.draw;\n\n // style de depart\n logger.trace(\"style start\", styles.start);\n\n // Creation à partir des styles par défaut\n var startStyleOpts = {\n image : Measures.DEFAULT_POINTER_STYLE,\n stroke : Measures.DEFAULT_DRAW_START_STYLE.getStroke()\n };\n // ecrasement à partir des propriétés renseignées\n if (styles.hasOwnProperty(\"pointer\") && styles.pointer instanceof Image) {\n startStyleOpts.image = styles.pointer;\n }\n if (styles.hasOwnProperty(\"start\") && styles.start instanceof Stroke) {\n startStyleOpts.stroke = styles.start;\n }\n\n this._drawStyleStart = new Style(startStyleOpts);\n\n // style de fin\n logger.trace(\"style finish\", styles.finish);\n\n var finishStyleOpts = {\n stroke : Measures.DEFAULT_DRAW_FINISH_STYLE.getStroke()\n };\n // ecrasement à partir des propriétés renseignées\n if (styles.hasOwnProperty(\"finish\") && styles.finish instanceof Stroke) {\n finishStyleOpts.stroke = styles.finish;\n }\n\n this._drawStyleFinish = new Style(finishStyleOpts);\n }\n\n /**\n * create style graph\n * FIXME : à revoir car ne sert que pour AmCharts !?\n *\n * @private\n */\n _createStylingProfile () {\n logger.trace(\"ElevationPath::_createStylingProfile\");\n\n var userStyles = this.options.stylesOptions.profile;\n\n logger.trace(\"style profile\", userStyles);\n\n var defaultStyle = ElevationPath.DEFAULT_STYLES.PROFILE;\n Object.keys(defaultStyle).forEach((key) => {\n if (!userStyles.hasOwnProperty(key)) {\n // si le style user n'existe pas, on ajoute celui par defaut\n userStyles[key] = defaultStyle[key];\n } else {\n var _defaultStyle = defaultStyle[key];\n if (typeof _defaultStyle === \"object\") {\n // on merge avec un objet,\n // les styles user ecrasent ceux par defaut...\n Utils.mergeParams(_defaultStyle, userStyles[key]);\n userStyles[key] = _defaultStyle;\n }\n }\n });\n }\n\n // ################################################################### //\n // ################### Map interactions management ################### //\n // ################################################################### //\n\n /**\n * this method is called by this.onShowElevationPathClick,\n * and initialize a vector layer, if widget is active.\n *\n * @param {ol.Map} map - Map\n * @private\n */\n _initMeasureInteraction (map) {\n logger.trace(\"ElevationPath::_initMeasureInteraction()\");\n\n // var map = this.getMap();\n if (!map) {\n return;\n }\n\n this._measureSource = new VectorSource();\n\n this._measureVector = new VectorLayer({\n source : this._measureSource,\n style : this._drawStyleFinish\n });\n\n // on rajoute le champ gpResultLayerId permettant d'identifier une couche crée par le composant.\n this._measureVector.gpResultLayerId = \"measure:profil\";\n\n map.addLayer(this._measureVector);\n\n // Si un layer switcher est présent dans la carte, on lui affecte des informations pour cette couche\n map.getControls().forEach(\n (control) => {\n if (control instanceof LayerSwitcher) {\n // un layer switcher est présent dans la carte\n var layerId = this._measureVector.gpLayerId;\n // on n'ajoute des informations que s'il n'y en a pas déjà (si le titre est le numéro par défaut)\n if (control._layers[layerId].title === layerId) {\n control.addLayer(\n this._measureVector, {\n title : this.options.layerDescription.title,\n description : this.options.layerDescription.description\n }\n );\n }\n }\n }\n );\n }\n\n /**\n * this method is called by this.onShowElevationPathClick,\n * and add draw interaction to map, if widget is not active.\n *\n * @param {ol.Map} map - Map\n * @private\n */\n _addMeasureInteraction (map) {\n logger.trace(\"ElevationPath::_addMeasureInteraction()\");\n\n // var map = this.getMap();\n if (!map) {\n return;\n }\n\n // Creates and adds the interaction\n this._measureDraw = new DrawInteraction({\n source : this._measureSource,\n type : \"LineString\",\n style : this._drawStyleStart,\n stopClick : true\n });\n\n this._measureDraw.setProperties({\n name : \"ElevationPath\",\n source : this\n });\n\n map.addInteraction(this._measureDraw);\n\n // Event start\n this._measureDraw.on(\"drawstart\", (evt) => {\n logger.trace(\"drawstart\", evt);\n\n // delete marker current\n if (this._marker !== null) {\n this._measureSource.removeFeature(this._marker);\n this._marker = null;\n }\n\n // set new feature and remove last feature\n if (this._lastSketch !== null) {\n this._measureSource.removeFeature(this._lastSketch);\n this._lastSketch = null;\n }\n this._currentSketch = evt.feature;\n\n // and, all features\n var _features = this._measureSource.getFeatures();\n for (var i = 0; i < _features.length; i++) {\n this._measureSource.removeFeature(_features[i]);\n }\n /**\n * event triggered at the start of drawing input\n * @event elevationpath:drawstart\n */\n this.dispatchEvent(\"elevationpath:drawstart\");\n });\n\n // Event end\n this._measureDraw.on(\"drawend\", (evt) => {\n logger.trace(\"drawend\", evt);\n /**\n * event triggered at the end of drawing input\n * @event elevationpath:drawend\n */\n this.dispatchEvent(\"elevationpath:drawend\");\n\n // set feature\n this._lastSketch = this._currentSketch;\n\n // Si il n'y a pas de surcharge utilisateur de la fonction de recuperation des\n // resultats, on realise l'affichage du panneau\n if (typeof this.options.elevationOptions.onSuccess === \"undefined\" && this.options.displayProfileOptions.target === null) {\n this._panelContainer.style.display = \"block\";\n // self._panelContainer.style.visibility = \"visible\";\n }\n\n // set an alti request and display results\n this._measureDraw.setActive(false);\n this._requestService();\n });\n }\n\n /**\n * this method is called by this.onShowElevationPathClick,\n * and removes draw interaction from map (if exists)\n * And removes layer too...\n *\n * @param {ol.Map} map - Map\n * @param {Boolean} remove - Remove layer\n * @private\n */\n _removeMeasureInteraction (map, remove) {\n logger.trace(\"ElevationPath::_removeMeasureInteraction()\");\n\n // var map = this.getMap();\n if (!map) {\n return;\n }\n\n if (remove) {\n if (this._measureVector) {\n map.removeLayer(this._measureVector);\n this._measureVector = null;\n }\n }\n\n if (this._measureDraw) {\n map.removeInteraction(this._measureDraw);\n this._measureDraw = null;\n }\n }\n\n // ################################################################### //\n // ############################ Alti request ######################### //\n // ################################################################### //\n\n /**\n * transforme geometry feature to position coordinate (service)\n *\n * @returns {Object[]} geometry\n *\n * @private\n */\n _getGeometry () {\n // INFO\n // on transmet toujours des coordonnées au service en EPSG:4326\n\n if (this._currentSketch === null) {\n logger.warn(\"Current Feature undefined !?\");\n return;\n }\n\n var geometry = [];\n\n var map = this.getMap();\n var projSrc = map.getView().getProjection();\n var projDest = \"EPSG:4326\";\n var coordinates = this._currentSketch.getGeometry().getCoordinates();\n for (var i = 0; i < coordinates.length; i++) {\n var xy = coordinates[i];\n var ll = xy;\n // on transmet au service des coordonnées en EPSG:4326\n if (projSrc !== projDest) {\n ll = olTransformProj(xy, projSrc, projDest);\n }\n geometry.push({\n lon : Math.round(ll[0] * 1e8) / 1e8,\n lat : Math.round(ll[1] * 1e8) / 1e8\n });\n }\n\n return geometry;\n }\n\n /**\n * get geometry feature length\n *\n * @returns {Integer} length\n *\n * @private\n */\n _getLength () {\n if (this._currentSketch === null) {\n logger.warn(\"Current Feature undefined !?\");\n return;\n }\n\n var length = 0;\n\n var map = this.getMap();\n var projSrc = map.getView().getProjection();\n var projDest = \"EPSG:4326\";\n\n var coordinates = this._currentSketch.getGeometry().getCoordinates();\n for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n var c1 = olTransformProj(coordinates[i], projSrc, projDest);\n var c2 = olTransformProj(coordinates[i + 1], projSrc, projDest);\n c1[0] = Math.round(c1[0] * 1e8) / 1e8;\n c1[1] = Math.round(c1[1] * 1e8) / 1e8;\n c2[0] = Math.round(c2[0] * 1e8) / 1e8;\n c2[1] = Math.round(c2[1] * 1e8) / 1e8;\n length += olGetDistanceSphere(c1, c2);\n }\n\n return length;\n }\n\n /**\n * get geometry feature point coords in EPSG:4326 [lon, lat]\n *\n * @returns {Array} point coords in EPSG:4326 [lon, lat]\n *\n * @private\n */\n _getSketchCoords () {\n if (this._currentSketch === null) {\n logger.warn(\"Current Feature undefined !?\");\n return;\n }\n\n var map = this.getMap();\n var projSrc = map.getView().getProjection();\n var projDest = \"EPSG:4326\";\n\n var pointCoords = [];\n\n var coordinates = this._currentSketch.getGeometry().getCoordinates();\n for (var i = 0; i < coordinates.length; i++) {\n var c1 = olTransformProj(coordinates[i], projSrc, projDest);\n c1[0] = Math.round(c1[0] * 1e8) / 1e8;\n c1[1] = Math.round(c1[1] * 1e8) / 1e8;\n pointCoords.push(c1);\n }\n\n return pointCoords;\n }\n\n /**\n * this method is called at the end of the path,\n * it generates and sends alti request, then displays results\n *\n * @private\n */\n _requestService () {\n logger.trace(\"ElevationPath::_requestService\");\n\n // les coordonnées sont obligatoires\n var geometry = this._getGeometry();\n logger.trace(\"geometry\", geometry);\n if (!geometry) {\n logger.warn(\"missing geometry !?\");\n return;\n }\n\n // on construit les options pour la requête\n var options = {};\n\n // on surcharge avec les options de l'utilisateur\n Utils.mergeParams(options, this.options.elevationOptions);\n\n // au cas où ...\n Utils.mergeParams(options, {\n apiKey : options.apiKey || this.options.apiKey\n });\n\n // si l'utilisateur a spécifié le paramètre ssl au niveau du control, on s'en sert\n // true par défaut (https)\n if (typeof options.ssl !== \"boolean\") {\n if (typeof this.options.ssl === \"boolean\") {\n options.ssl = this.options.ssl;\n } else {\n options.ssl = true;\n }\n }\n\n Utils.mergeParams(options, {\n ssl : options.ssl\n });\n\n // les callbacks\n var self = this;\n\n // gestion des callback\n var bOnFailure = !!(this.options.elevationOptions.onFailure !== null && typeof this.options.elevationOptions.onFailure === \"function\"); // cast variable to boolean\n var bOnSuccess = !!(this.options.elevationOptions.onSuccess !== null && typeof this.options.elevationOptions.onSuccess === \"function\");\n\n // callback _requestServiceOnSuccess\n var _requestServiceOnSuccess = function (result) {\n logger.trace(result);\n if (result) {\n self._panelContainer.style.display = \"block\";\n // self._panelContainer.style.visibility = \"visible\";\n if (self._data) {\n self._data = {};\n }\n self._data = self._computeElevationMeasure(result.elevations);\n self._displayProfile(self._data);\n self._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n self._waiting = false;\n self._measureDraw.setActive(true);\n }\n if (bOnSuccess) {\n self.options.elevationOptions.onSuccess.call(self, self.getData());\n }\n };\n\n // callback _requestServiceOnFailure\n var _requestServiceOnFailure = function (error) {\n // on ferme le panneau en cas d'erreur !\n self._panelContainer.style.display = \"none\";\n // self._panelContainer.style.visibility = \"hidden\";\n logger.error(error.message);\n self._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n self._waiting = false;\n self._measureDraw.setActive(true);\n if (bOnFailure) {\n self.options.elevationOptions.onFailure.call(self, error);\n }\n };\n\n Utils.mergeParams(options, {\n onSuccess : _requestServiceOnSuccess,\n onFailure : _requestServiceOnFailure\n });\n\n // le sampling est soit defini par l'utilisateur (opts),\n // ou soit calculé dynamiquement...\n var sampling = options.sampling || 200;\n\n if (sampling > 0) {\n Utils.mergeParams(options, {\n sampling : sampling\n });\n }\n\n // et enfin, la geometrie\n Utils.mergeParams(options, {\n positions : geometry\n });\n\n logger.trace(\"options du service\", options);\n\n // mise en place de la patience\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerVisible gpf-waiting gpf-waiting--visible\";\n\n // Request altitude service\n Gp.Services.getAltitude(options);\n }\n\n // ################################################################### //\n // ########################## Profil display ######################### //\n // ################################################################### //\n\n /**\n * this method computes results elevations (Z and distance)\n *\n * @param {Array} elevations - array of elevation\n * @return {Array} elevations\n * @private\n */\n _computeElevationMeasure (elevations) {\n logger.trace(\"ElevationPath::_computeElevationMeasure\", elevations);\n\n var _data = elevations;\n var _unit = \"m\";\n\n var _sketchPoints = this._getSketchCoords();\n if (!_sketchPoints) {\n return;\n }\n // Calcul de la distance au départ pour chaque point + arrondi des lat/lon\n _data[0].dist = 0;\n _data[0].slope = 0;\n _data[0].oldlat = _data[0].lat;\n _data[0].oldlon = _data[0].lon;\n _data[0].lat = Math.round(_data[0].lat * 100000) / 100000;\n _data[0].lon = Math.round(_data[0].lon * 100000) / 100000;\n\n var _distanceMinus = 0;\n var _distancePlus = 0;\n var _ascendingElevation = 0;\n var _descendingElevation = 0;\n var _distance = 0;\n var _slopes = 0;\n\n var distances = [];\n console.log(_data);\n for (var i = 1; i < _data.length; i++) {\n var a = [_data[i].lon, _data[i].lat];\n var distanceToPrevious = olGetDistanceSphere(a, [_data[i-1].oldlon, _data[i-1].oldlat]);\n var dist = distanceToPrevious + _distance;\n\n var za = _data[i].z;\n var zb = _data[i - 1].z;\n if (za < 0) {\n za = 0;\n }\n if (zb < 0) {\n zb = 0;\n }\n var slope = za - zb;\n if (slope < 0) {\n _distanceMinus += distanceToPrevious;\n _descendingElevation += slope;\n } else if (slope > 0) {\n _distancePlus += distanceToPrevious;\n _ascendingElevation += slope;\n }\n _distance = dist;\n _data[i].dist = dist;\n\n distances.push(_distance);\n\n _slopes += (slope) ? Math.abs(Math.round(slope / dist * 100)) : 0;\n _data[i].slope = (slope) ? Math.abs(Math.round(slope / dist * 100)) : 0;\n\n // EVOL ?\n // cf. gradiant\n // http://www.color-hex.com/color/00b798\n var value = _data[i].slope;\n if (value > 15 && value < 30) {\n _data[i].color = \"#005b4c\";\n } else if (value > 30 && value < 45) {\n _data[i].color = \"#00362d\";\n } else if (value > 45) {\n _data[i].color = \"#00120f\";\n } else {\n _data[i].color = \"#00B798\";\n }\n _data[i].oldlat = _data[i].lat;\n _data[i].oldlon = _data[i].lon;\n _data[i].lat = Math.round(_data[i].lat * 100000) / 100000;\n _data[i].lon = Math.round(_data[i].lon * 100000) / 100000;\n }\n\n // check distance totale\n logger.trace(\"List Distances\", distances);\n\n // Correction des altitudes aberrantes + arrondi des calculs de distance + ...\n var _altMin = _data[0].z;\n var _altMax = _data[0].z;\n var _greaterSlope = _data[0].slope;\n\n for (var ji = 0; ji < _data.length; ji++) {\n var d = _data[ji];\n if (d.z < -100) {\n d.z = 0;\n }\n if (d.z > _altMax) {\n _altMax = d.z;\n }\n if (d.z < _altMin) {\n _altMin = d.z;\n }\n\n if (d.slope > _greaterSlope) {\n _greaterSlope = d.slope;\n }\n }\n\n return {\n greaterSlope : _greaterSlope, // pente max\n meanSlope : Math.round(_slopes / _data.length), // pente moyenne\n distancePlus : _distancePlus, // distance cumulée positive\n distanceMinus : _distanceMinus, // distance cumulée négative\n ascendingElevation : _ascendingElevation, // dénivelé cumulée positive\n descendingElevation : _descendingElevation, // dénivelé cumulée négative\n altMin : _altMin.toLocaleString(), // altitude min TODO: inutile ?\n altMax : _altMax.toLocaleString(), // altitude max TODO: inutile ?\n distance : this._getLength(), // distance totale\n unit : _unit, // unité des mesures de distance\n points : _data\n };\n }\n\n /**\n * this method is called after service request (in case of success)\n * and display results\n *\n * @param {Array} elevations - array of elevation\n * @private\n */\n _displayProfile (elevations) {\n logger.trace(\"ElevationPath::_displayProfile\", elevations);\n\n this._updateInfoContainer();\n\n // container\n var container = this.options.displayProfileOptions.target;\n if (container) {\n container.appendChild(this._panelContainer);\n }\n container = this._profileContainer;\n\n // TODO contexte ?\n var context = this;\n\n // fonction\n var displayFunction = this.options.displayProfileOptions.apply;\n\n // execution...\n displayFunction.call(this, elevations, container, context);\n\n var opts = this.options.displayProfileOptions;\n var element = document.getElementById(\"GPelevationPathPanelInfo-\" + this._uid);\n if (element) {\n if (opts.totalDistance ||\n opts.greaterSlope ||\n opts.meanSlope ||\n opts.ascendingElevation ||\n opts.descendingElevation) {\n // on affiche les informations\n element.style.display = \"block\";\n }\n }\n\n /**\n * event triggered when the compute is finished\n *\n * @event elevationpath:compute\n * @typedef {Object}\n * @property {Object} type - event\n * @property {Object} target - instance ElevationPath\n * @example\n * ElevationPath.on(\"elevationpath:compute\", function (e) {\n * console.log(e.target.getData());\n * })\n */\n this.dispatchEvent({\n type : \"elevationpath:compute\"\n });\n }\n\n /**\n * update info container\n *\n * @private\n */\n _updateInfoContainer () {\n logger.trace(\"ElevationPath::_updateInfoContainer\");\n\n // options d'affichage\n var totalDistance = this.options.displayProfileOptions.totalDistance;\n var meanSlope = this.options.displayProfileOptions.meanSlope;\n var greaterSlope = this.options.displayProfileOptions.greaterSlope;\n var ascendingElevation = this.options.displayProfileOptions.ascendingElevation;\n var descendingElevation = this.options.displayProfileOptions.descendingElevation;\n\n // clean\n var div = this._infoContainer;\n if (div.childElementCount) {\n while (div.firstChild) {\n div.removeChild(div.firstChild);\n }\n }\n\n // creation des infomations\n if (totalDistance) {\n this._addElevationPathInformationsItem(\"Distance totale : \", Math.round(this._data.distance).toLocaleString() + \" m\");\n }\n\n if (ascendingElevation) {\n this._addElevationPathInformationsItem(\"Dénivelé positif : \", this._data.ascendingElevation.toLocaleString() + \" m\");\n }\n\n if (descendingElevation) {\n this._addElevationPathInformationsItem(\"Dénivelé négatif : \", this._data.descendingElevation.toLocaleString() + \" m\");\n }\n\n if (meanSlope) {\n this._addElevationPathInformationsItem(\"Pente moyenne : \", this._data.meanSlope.toLocaleString() + \" %\");\n }\n\n if (greaterSlope) {\n this._addElevationPathInformationsItem(\"Plus forte pente : \", this._data.greaterSlope.toLocaleString() + \" %\");\n }\n }\n\n /**\n * Remove measure\n * @private\n */\n _removeMeasure () {\n // sketch\n this._lastSketch = null;\n this._currentSketch = null;\n\n if (this._measureSource) {\n // marker\n if (this._marker) {\n this._measureSource.removeFeature(this._marker);\n this._marker = null;\n }\n\n // all other features\n var _features = this._measureSource.getFeatures();\n for (var i = 0; i < _features.length; i++) {\n this._measureSource.removeFeature(_features[i]);\n }\n }\n }\n\n /**\n * Remove profile\n * @private\n */\n _removeProfile () {\n // graph\n this._profile = null;\n\n // on vide le container\n if (this._profileContainer) {\n while (this._profileContainer.firstChild) {\n this._profileContainer.removeChild(this._profileContainer.firstChild);\n }\n }\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on '' picto\n * and enable or disable the entry of the path\n *\n * @param {Object} e - event\n * @private\n */\n onShowElevationPathClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n Interactions.unset(map, {\n current : \"ElevationPath\"\n });\n\n // Activation/Desactivation des interactions de dessins\n var opened = this._pictoButton.ariaPressed;\n if (opened === \"true\") {\n // on n'affiche pas la fenetre de profile s'il n'existe pas...\n if (this._profile === null) {\n this._panelContainer.style.display = \"none\";\n // this._panelContainer.style.visibility = \"hidden\";\n }\n this._initMeasureInteraction(map);\n this._addMeasureInteraction(map);\n } else {\n this._panelContainer.style.display = \"none\";\n // HACK\n // il est possible de faire passer une instruction via le DOM et les dataset :\n // * data-remove-measure : true|false\n // * data-remove-layer : true|false\n if (e && e.target.dataset && e.target.dataset.removeMeasure) {\n if (e.target.dataset.removeMeasure === \"true\") {\n this._removeMeasure();\n } else {\n // sketch\n this._lastSketch = null;\n this._currentSketch = null;\n }\n } else {\n this._removeMeasure();\n }\n this._removeProfile();\n\n if (e && e.target.dataset && e.target.dataset.removeLayer) {\n this._removeMeasureInteraction(map, (e.target.dataset.removeLayer === \"true\"));\n } else {\n this._removeMeasureInteraction(map, true);\n }\n }\n }\n\n /**\n * this method is called by event 'click' on '' picto\n * (cf. this.),\n * and display the panel info\n *\n * @private\n */\n onOpenElevationPathInfoClick () {\n var div = this._infoContainer;\n\n // show des informations !\n if (div.className === \"GPelementVisible gpf-visible\") {\n clearTimeout(this._timerHdlr);\n div.className = \"GPelementHidden gpf-hidden\";\n } else {\n div.className = \"GPelevationPathInformationsContainerVisible\";\n }\n\n // hidden des informations !\n this._timerHdlr = setTimeout(function () {\n div.className = \"GPelementHidden gpf-hidden\";\n }, 4000);\n }\n\n};\n\n// on récupère les méthodes de la classe commune ElevationPath\nObject.assign(ElevationPath.prototype, ElevationPathDOM);\nObject.assign(ElevationPath.prototype, Widget);\n\nexport default ElevationPath;\n\n// Expose ElevationPath as ol.control.ElevationPath (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.ElevationPath = ElevationPath;\n}\n","// import CSS\nimport \"../../CSS/Controls/LayerImport/GPFlayerImport.css\";\n// import \"../../CSS/Controls/LayerImport/GPFlayerImportStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\nimport Collection from \"ol/Collection\";\nimport Feature from \"ol/Feature\";\nimport WMTSTileGrid from \"ol/tilegrid/WMTS\";\n// import { createXYZ as olCreateXYZTileGrid } from \"ol/tilegrid\"; // FIXME olCreateXYZTileGrid !?\nimport {\n transform as olTransformProj,\n get as olGetProj,\n transformExtent as olTransformExtentProj\n} from \"ol/proj\";\nimport MVT from \"ol/format/MVT\";\nimport WMSCapabilities from \"ol/format/WMSCapabilities\";\nimport WMTSCapabilities from \"ol/format/WMTSCapabilities\";\nimport VectorTileLayer from \"ol/layer/VectorTile\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport TileLayer from \"ol/layer/Tile\";\nimport VectorTileSource from \"ol/source/VectorTile\";\nimport VectorSource from \"ol/source/Vector\";\nimport TileWMSSource from \"ol/source/TileWMS\";\nimport WMTSSource from \"ol/source/WMTS\";\nimport TileJSONSource from \"ol/source/TileJSON\";\nimport {\n Fill,\n Icon,\n Stroke,\n Style,\n Text\n} from \"ol/style\";\n// import olms : module ES6\nimport { applyStyle as applyStyleOlms } from \"ol-mapbox-style\";\n// import olms : bundle\n// import olms from \"ol-mapbox-style\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Editor from \"../Editor/Editor\";\nimport Markers from \"../Utils/Markers\";\nimport Draggable from \"../../Utils/Draggable\";\nimport Interactions from \"../Utils/Interactions\";\nimport Utils from \"../../Utils/Helper\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport ProxyUtils from \"../../Utils/ProxyUtils\";\n// DOM\nimport LayerImportDOM from \"./LayerImportDOM\";\n// import local with ol dependencies\nimport KMLExtended from \"../../Formats/KML\";\nimport GeoJSONExtended from \"../../Formats/GeoJSON\";\nimport GPXExtended from \"../../Formats/GPX\";\nimport LayerSwitcher from \"../LayerSwitcher/LayerSwitcher\";\nimport Route from \"../Route/Route\";\nimport Isocurve from \"../Isocurve/Isocurve\";\nimport ElevationPath from \"../ElevationPath/ElevationPath\";\n\nvar logger = Logger.getLogger(\"layerimport\");\n\n/**\n * @classdesc\n *\n * LayerImport Control. Allows users to add geographical data in standards formats from their own sources to the map.\n *\n * @constructor\n * @alias ol.control.LayerImport\n * @extends {ol.control.Control}\n * @type {ol.control.LayerImport}\n * @param {Object} options - options for function call.\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {Boolean} [options.collapsed = true] - Specify if LayerImport control should be collapsed at startup. Default is true.\n * @param {Boolean} [options.draggable = false] - Specify if widget is draggable\n * @param {Array} [options.layerTypes = [\"KML\", \"GPX\", \"GeoJSON\", \"WMS\", \"WMTS\", \"MAPBOX\"]] - data types that could be imported : \"KML\", \"GPX\", \"GeoJSON\", \"WMS\", \"WMTS\" and \"MAPBOX\". Values will be displayed in the same order in widget list.\n * @param {Object} [options.webServicesOptions = {}] - Options to import WMS or WMTS layers\n * @param {String} [options.webServicesOptions.proxyUrl] - Proxy URL to avoid cross-domain problems. Mandatory to import WMS and WMTS layer.\n * @param {Array.} [options.webServicesOptions.noProxyDomains] - Proxy will not be used for this list of domain names. Only use if you know what you're doing.\n * @param {Object} [options.vectorStyleOptions] - Options for imported vector layer styling (KML, GPX, GeoJSON)\n * @param {Object} [options.vectorStyleOptions.KML] - Options for KML layer styling\n * @param {Boolean} [options.vectorStyleOptions.KML.extractStyles = true] - Extract styles from the KML. Default is true.\n * @param {Boolean} [options.vectorStyleOptions.KML.showPointNames = true] - Show names as labels for KML placemarks which contain points. Default is true.\n * @param {Object} [options.vectorStyleOptions.KML.defaultStyle] - default style to be applied to KML imports in case no style is defined. defaultStyle is an {@link http://openlayers.org/en/latest/apidoc/ol.style.Style.html ol.style.Style} object.\n * @param {Object} [options.vectorStyleOptions.GPX] - Options for GPX layer styling\n * @param {Object} [options.vectorStyleOptions.GPX.defaultStyle] - default style to be applied to GPX imports in case no style is defined. defaultStyle is an {@link http://openlayers.org/en/latest/apidoc/ol.style.Style.html ol.style.Style} object.\n * @param {Object} [options.vectorStyleOptions.GeoJSON] - Options for GeoJSON layer styling\n * @param {Object} [options.vectorStyleOptions.GeoJSON.defaultStyle] - default style to be applied to GeoJSON imports in case no style is defined. defaultStyle is an {@link http://openlayers.org/en/latest/apidoc/ol.style.Style.html ol.style.Style} object.\n * @param {Object} [options.vectorStyleOptions.MapBox] - Options for MapBox layer styling\n * @param {Object} [options.vectorStyleOptions.MapBox.defaultStyle] - default style to be applied to MapBox imports in case no style is defined. defaultStyle is an {@link http://openlayers.org/en/latest/apidoc/ol.style.Style.html ol.style.Style} object.\n * @param {Object} [options.vectorStyleOptions.MapBox.editor] - options for tools editor\n * @param {Boolean} [options.vectorStyleOptions.MapBox.display = true] - display tools editor\n * @example\n * var LayerImport = new ol.control.LayerImport({\n * \"collapsed\" : false,\n * \"draggable\" : true,\n * \"layerTypes\" : [\"KML\", \"GPX\"],\n * \"webServicesOptions\" : {\n * \"proxyUrl\" : \"http://localhost/proxy/php/proxy.php?url=\",\n * \"noProxyDomains\" : []\n * },\n * \"vectorStyleOptions\" : {\n * \"KML\" : {\n * extractStyles : true,\n * defaultStyle : new ol.style.Style({\n * image : new ol.style.Icon({\n * src : \"data:image/png;base64....\",\n * size : [51, 38],\n * }),\n * stroke : new ol.style.Stroke({\n * color : \"#ffffff\",\n * width : 7\n * }),\n * fill : new ol.style.Fill({\n * color : \"rgba(255, 183, 152, 0.2)\"\n * }),\n * text : new ol.style.Text({\n * font : \"16px Sans\",\n * textAlign : \"left\",\n * fill : new ol.style.Fill({\n * color : \"rgba(255, 255, 255, 1)\"\n * }),\n * stroke : new ol.style.Stroke({\n * color : \"rgba(0, 0, 0, 1)\",\n * width : 2\n * })\n * })\n * })\n * },\n * \"GPX\" : {\n * defaultStyle : new ol.style.Style({\n * image : new ol.style.Icon({\n * src : \"path/to/my/icon.png\",\n * size : [51, 38],\n * }),\n * stroke : new ol.style.Stroke({\n * color : \"#ffffff\",\n * width : 7\n * })\n * })\n * }\n * }\n * });\n */\nvar LayerImport = class LayerImport extends Control {\n\n /**\n * See {@link ol.control.LayerImport}\n * @module LayerImport\n * @alias module:~controls/LayerImport\n * @param {*} options - options\n * @example\n * import LayerImport from \"gpf-ext-ol/controls/LayerImport\"\n * ou\n * import { LayerImport } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"LayerImport\";\n\n if (!(this instanceof LayerImport)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this._initialize(options);\n\n // init control DOM container\n this._container = this._initContainer(options);\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n };\n\n /**\n * Default styles applyied to KML, GPX and GeoJSON features.\n *\n * @private\n */\n static DefaultStyles = {\n image : new Icon({\n src : Markers[\"lightOrange\"],\n anchor : [25.5, 38],\n anchorOrigin : \"top-left\",\n anchorXUnits : \"pixels\",\n anchorYUnits : \"pixels\"\n }),\n stroke : new Stroke({\n color : \"rgba(0,42,80,0.8)\",\n width : 4\n }),\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.5)\"\n }),\n text : new Text({\n font : \"16px Sans\",\n textAlign : \"left\",\n fill : new Fill({\n color : \"rgba(255, 255, 255, 1)\"\n }),\n stroke : new Stroke({\n color : \"rgba(0, 0, 0, 1)\",\n width : 2\n })\n })\n };\n\n // ################################################################### //\n // ############## public methods (getters, setters) ################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n // ajout de la patience pour le chargement des tuiles\n if (map) {\n // Animation au centre de la carte ?\n // var center = this._loadingContainer = this._createLoadingElement();\n // map.getViewport().appendChild(center);\n\n var self = this;\n map.getLayers().on(\n \"remove\",\n function (e) {\n // import de type layerimport:MapBox ?\n if (e.element.gpResultLayerId === \"layerimport:MAPBOX\") {\n // layer ayant un editor ID associé ?\n if (e.element.gpEditorId) {\n // le panneau des résultats existe t il ?\n if (self._mapBoxPanel && self._importPanel) {\n self.cleanMapBoxResults(e.element.gpEditorId);\n self._mapBoxPanel.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n self._mapBoxPanel.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n }\n }\n },\n self\n );\n\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this._importPanel,\n this._importPanelHeader,\n map.getTargetElement()\n );\n\n // panneau draggable pour les resultats ?\n // Draggable.dragElement(\n // this._getCapPanel,\n // this._getCapPanelHeader,\n // map.getTargetElement()\n\n // );\n // Draggable.dragElement(\n // this._mapBoxPanel,\n // this._mapBoxPanelHeader,\n // map.getTargetElement()\n // );\n }\n // mode \"collapsed\"\n if (!this.collapsed) {\n this._showImportButton.setAttribute(\"aria-pressed\", true);\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Returns true if widget is collapsed (minimized), false otherwise\n *\n * @returns {Boolean} collapsed - true if widget is collapsed\n */\n getCollapsed () {\n return this.collapsed;\n }\n\n /**\n * Collapse or display widget main container\n *\n * @param {Boolean} collapsed - True to collapse widget, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.error(\"[ERROR] LayerImport:setCollapsed - missing collapsed parameter\");\n return;\n }\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n if (collapsed) {\n this._panelCloseButton.click();\n } else {\n this._showImportButton.click();\n }\n this.collapsed = collapsed;\n }\n\n /**\n * Returns content of a static import (KML, GPX or GeoJSON)\n *\n * @returns {String} contentStatic - content static\n */\n getStaticImportContent () {\n return this.contentStatic;\n }\n\n /**\n * Returns content of a service import (GetCapabilities)\n *\n * @returns {String} contentService - content service\n */\n getServiceImportContent () {\n return this.contentService;\n }\n\n /**\n * Returns layer name\n *\n * @returns {String} name - layer name\n */\n getName () {\n return this._name;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this._container;\n }\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize LayerImport control (called by LayerImport constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n _initialize (options) {\n // ############################################################ //\n // ################### Options du composant ################### //\n\n // check input options format\n this._checkInputOptions(options);\n\n // set default options\n this.options = {\n collapsed : true,\n draggable : false,\n layerTypes : [\"KML\", \"GPX\", \"GeoJSON\", \"WMS\", \"WMTS\", \"MAPBOX\"],\n webServicesOptions : {},\n vectorStyleOptions : {\n KML : {\n extractStyles : true,\n showPointNames : true,\n defaultStyle : {}\n },\n GPX : {\n defaultStyle : {}\n },\n GeoJSON : {\n defaultStyle : {}\n },\n MapBox : {\n defaultStyle : {},\n editor : {}\n }\n }\n };\n\n // TODO gestion du proxy\n\n // set extractStyles parameter\n if (options.vectorStyleOptions && options.vectorStyleOptions.KML && options.vectorStyleOptions.KML.extractStyles) {\n this.options.vectorStyleOptions.KML.extractStyles = options.vectorStyleOptions.KML.extractStyles;\n } // TODO\n // set showPointNames parameter\n if (options.vectorStyleOptions && options.vectorStyleOptions.KML && options.vectorStyleOptions.KML.showPointNames) {\n this.options.vectorStyleOptions.KML.showPointNames = options.vectorStyleOptions.KML.showPointNames;\n }\n\n // set vector layers default styles (KML, GPX, GeoJSON, MapBox)\n if (options.vectorStyleOptions && options.vectorStyleOptions.KML && options.vectorStyleOptions.KML.defaultStyle) {\n // get from options if specified\n this.options.vectorStyleOptions.KML.defaultStyle = options.vectorStyleOptions.KML.defaultStyle;\n } else {\n // get from control default options otherwise\n this.options.vectorStyleOptions.KML.defaultStyle = new Style({\n image : LayerImport.DefaultStyles.image,\n stroke : LayerImport.DefaultStyles.stroke,\n fill : LayerImport.DefaultStyles.fill,\n text : LayerImport.DefaultStyles.text\n });\n }\n if (options.vectorStyleOptions && options.vectorStyleOptions.GPX && options.vectorStyleOptions.GPX.defaultStyle) {\n // get from options if specified\n this.options.vectorStyleOptions.GPX.defaultStyle = options.vectorStyleOptions.GPX.defaultStyle;\n } else {\n // get from control default options otherwise\n this.options.vectorStyleOptions.GPX.defaultStyle = new Style({\n image : LayerImport.DefaultStyles.image,\n stroke : LayerImport.DefaultStyles.stroke,\n fill : LayerImport.DefaultStyles.fill,\n text : LayerImport.DefaultStyles.text\n });\n }\n if (options.vectorStyleOptions && options.vectorStyleOptions.GeoJSON && options.vectorStyleOptions.GeoJSON.defaultStyle) {\n // get from options if specified\n this.options.vectorStyleOptions.GeoJSON.defaultStyle = options.vectorStyleOptions.GeoJSON.defaultStyle;\n } else {\n // get from control default options otherwise\n this.options.vectorStyleOptions.GeoJSON.defaultStyle = new Style({\n image : LayerImport.DefaultStyles.image,\n stroke : LayerImport.DefaultStyles.stroke,\n fill : LayerImport.DefaultStyles.fill,\n text : LayerImport.DefaultStyles.text\n });\n }\n // FIXME tester les styles par defaut sur une couche vecteur tuilé sans style !\n if (options.vectorStyleOptions && options.vectorStyleOptions.MapBox && options.vectorStyleOptions.MapBox.defaultStyle) {\n // get from options if specified\n this.options.vectorStyleOptions.MapBox.defaultStyle = options.vectorStyleOptions.MapBox.defaultStyle;\n } else {\n // get from control default options otherwise\n this.options.vectorStyleOptions.MapBox.defaultStyle = new Style({\n image : LayerImport.DefaultStyles.image,\n stroke : LayerImport.DefaultStyles.stroke,\n fill : LayerImport.DefaultStyles.fill,\n text : LayerImport.DefaultStyles.text\n });\n }\n\n if (options.vectorStyleOptions && options.vectorStyleOptions.MapBox && options.vectorStyleOptions.MapBox.editor) {\n // get from options if specified\n this.options.vectorStyleOptions.MapBox.editor = options.vectorStyleOptions.MapBox.editor;\n } else {\n this.options.vectorStyleOptions.MapBox.editor = {\n title : true,\n collapse : false,\n themes : false,\n layers : true,\n style : true,\n filter : false,\n legend : true,\n group : false\n };\n }\n\n if (options.vectorStyleOptions && options.vectorStyleOptions.MapBox && options.vectorStyleOptions.MapBox.hasOwnProperty(\"display\")) {\n this.options.vectorStyleOptions.MapBox.display = options.vectorStyleOptions.MapBox.display;\n } else {\n this.options.vectorStyleOptions.MapBox.display = true;\n }\n\n // merge layer types\n if (Array.isArray(options.layerTypes)) {\n var layerTypes = [];\n for (var i = 0; i < options.layerTypes.length; i++) {\n layerTypes.push(options.layerTypes[i]);\n }\n this.options.layerTypes = layerTypes;\n }\n\n // merge with user options\n Utils.mergeParams(this.options, options);\n\n /** {Boolean} specify if LayerImport control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n /** {Boolean} specify if LayerImport control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n // identifiant du contrôle : utile pour suffixer les identifiants CSS (pour gérer le cas où il y en a plusieurs dans la même page)\n this._uid = this.options.id || SelectorID.generate();\n\n // si une requête est en cours ou non\n this._waiting = false;\n // timer pour cacher la patience après un certain temps\n this._timer = null;\n\n // initialisation des types d'import\n this._initImportTypes();\n // initialisation des styles par défaut\n this._initDefaultStyles();\n\n // ################################################################## //\n // ################### Elements principaux du DOM ################### //\n\n // containers principaux (FIXME : tous utiles ?)\n this._showImportButton = null;\n this._importPanel = null;\n this._panelCloseButton = null;\n this._importPanelHeader = null;\n this._importPanelTitle = null;\n this._importPanelReturnPicto = null;\n this._formContainer = null;\n this._staticLocalImportInput = null;\n this._staticUrlImportInput = null;\n this._serviceUrlImportInput = null;\n this._getCapPanel = null;\n this._getCapPanelHeader = null;\n this._getCapResultsListContainer = null;\n this._mapBoxPanel = null;\n this._mapBoxPanelHeader = null;\n this._mapBoxResultsListContainer = null;\n\n this._waitingContainer = null;\n this._loadingContainer = null;\n\n // ################################################################## //\n // ################ Interrogation du GetCapabilities ################ //\n this._hasGetCapResults = false;\n this._getCapRequestUrl = null;\n this._getCapResponseWMS = null;\n this._getCapResponseWMSLayers = [];\n this._getCapResponseWMTS = null;\n this._getCapResponseWMTSLayers = [];\n\n // ################################################################## //\n // ########################### MapBox ############################### //\n this._hasMapBoxResults = false;\n\n // ################################################################## //\n // ########################### file or url ########################## //\n this.contentStatic = null;\n this._url = null;\n this._file = null;\n this._name = null;\n }\n\n /**\n * this method is called by this.initialize()\n * and makes sure input options are correctly formated\n *\n * @param {Object} options - control input options\n * @private\n */\n _checkInputOptions (options) {\n // on vérifie le tableau des types\n if (options.layerTypes) {\n var layerTypes = options.layerTypes;\n // on vérifie que la liste des types est bien un tableau\n if (!Array.isArray(layerTypes)) {\n logger.warn(\"[ol.control.LayerImport] 'options.layerTypes' parameter should be an array. Set default values [\\\"KML\\\", \\\"GPX\\\", \\\"GeoJSON\\\", \\\"WMS\\\", \\\"WMTS\\\"]\");\n options.layerTypes = [\n \"KML\",\n \"GPX\",\n \"GeoJSON\",\n \"WMS\",\n \"WMTS\",\n \"MAPBOX\"\n ];\n } else {\n var typesList = [\n \"KML\",\n \"GPX\",\n \"GEOJSON\",\n \"WMS\",\n \"WMTS\",\n \"WFS\",\n \"MAPBOX\"\n ];\n var wrongTypesIndexes = [];\n for (var i = 0; i < layerTypes.length; i++) {\n if (typeof layerTypes[i] !== \"string\") {\n // si l'élément du tableau n'est pas une chaine de caractères, on stocke l'index pour le retirer du tableau\n wrongTypesIndexes.push(i);\n logger.warn(\"[ol.control.LayerImport] 'options.layerTypes' elements should be of type string (\" + layerTypes[i] + \")\");\n } else {\n // on passe en majuscules pour comparer\n layerTypes[i] = layerTypes[i].toUpperCase();\n if (typesList.indexOf(layerTypes[i]) === -1) {\n // si le type n'est pas référencé, on stocke son index pour le retirer du tableau (après avoir terminé de parcourir le tableau)\n wrongTypesIndexes.push(i);\n logger.log(\"[ol.control.LayerImport] options.layerTypes : \" + layerTypes[i] + \" is not a supported type\");\n }\n // cas spécial du GeoJSON qu'on ne laisse pas en majuscules\n if (layerTypes[i] === \"GEOJSON\") {\n layerTypes[i] = \"GeoJSON\";\n }\n if (layerTypes[i] === \"MAPBOX\") {\n layerTypes[i] = \"MAPBOX\";\n }\n }\n }\n // on retire les types non référencés qu'on a pu rencontrer\n if (wrongTypesIndexes.length !== 0) {\n for (var j = wrongTypesIndexes.length - 1; j >= 0; j--) {\n layerTypes.splice(wrongTypesIndexes[j], 1);\n }\n }\n }\n }\n }\n\n /**\n * this method is called by this.initialize()\n * and initializes default styles for vector layers (KML/GPX/GeoJSON)\n *\n * @private\n */\n _initDefaultStyles () {\n var kmlDefaultStyles = this.options.vectorStyleOptions.KML.defaultStyle;\n this._defaultKMLStyle = new Style({\n image : kmlDefaultStyles.image,\n stroke : kmlDefaultStyles.stroke,\n fill : kmlDefaultStyles.fill,\n text : kmlDefaultStyles.text\n });\n var gpxDefaultStyles = this.options.vectorStyleOptions.GPX.defaultStyle;\n this._defaultGPXStyle = new Style({\n image : gpxDefaultStyles.image,\n stroke : gpxDefaultStyles.stroke,\n fill : gpxDefaultStyles.fill,\n text : gpxDefaultStyles.text\n });\n var geoJSONDefaultStyles = this.options.vectorStyleOptions.GeoJSON.defaultStyle;\n this._defaultGeoJSONStyle = new Style({\n image : geoJSONDefaultStyles.image,\n stroke : geoJSONDefaultStyles.stroke,\n fill : geoJSONDefaultStyles.fill,\n text : geoJSONDefaultStyles.text\n });\n var MapBoxDefaultStyles = this.options.vectorStyleOptions.MapBox.defaultStyle;\n this._defaultMapBoxStyle = new Style({\n image : MapBoxDefaultStyles.image,\n stroke : MapBoxDefaultStyles.stroke,\n fill : MapBoxDefaultStyles.fill,\n text : MapBoxDefaultStyles.text\n });\n }\n\n /**\n * this method is called by this.initialize()\n * and initializes import types parameter\n *\n * @private\n */\n _initImportTypes () {\n this._currentImportType = this.options.layerTypes[0] || \"KML\";\n if (this._currentImportType === \"KML\" || this._currentImportType === \"GPX\" || this._currentImportType === \"GeoJSON\" || this._currentImportType === \"MAPBOX\") {\n this._isCurrentImportTypeStatic = true;\n } else if (this._currentImportType === \"WMS\" || this._currentImportType === \"WMTS\" || this._currentImportType === \"WFS\") {\n this._isCurrentImportTypeStatic = false;\n }\n this._currentStaticImportType = \"local\";\n }\n\n /**\n * Create control main container (DOM initialize)\n *\n * @private\n * @returns {DOMElement} container - control main container\n */\n _initContainer () {\n // create main container\n var container = this._createMainContainerElement();\n\n // create Import picto\n var picto = this._showImportButton = this._createShowImportPictoElement();\n container.appendChild(picto);\n\n // panel\n var importPanel = this._importPanel = this._createImportPanelElement();\n var importPanelPanelDiv = this._createImportPanelDivElement();\n importPanel.appendChild(importPanelPanelDiv);\n\n // header\n var panelHeader = this._importPanelHeader = this._createImportPanelHeaderElement();\n // return\n var panelReturn = this._importPanelReturnPicto = this._createImportPanelReturnPictoElement();\n panelHeader.appendChild(panelReturn);\n\n // panel title\n var panelTitle = this._importPanelTitle = this._createImportPanelTitleElement();\n panelHeader.appendChild(panelTitle);\n // close picto\n var panelClose = this._panelCloseButton = this._createImportPanelCloseElement();\n panelHeader.appendChild(panelClose);\n importPanelPanelDiv.appendChild(panelHeader);\n\n // form : initialisation du formulaire d'import des couches (types d'import et saisie de l'url / du fichier)\n var importForm = this._formContainer = this._initInputFormElement();\n importPanelPanelDiv.appendChild(importForm);\n\n // results (dans le panel)\n var getCapPanel = this._getCapPanel = this._createImportGetCapPanelElement();\n // var getCapPanelHeader = this._getCapPanelHeader = this._createImportGetCapPanelHeaderElement();\n // getCapPanel.appendChild(getCapPanelHeader);\n var importGetCapResultsList = this._getCapResultsListContainer = this._createImportGetCapResultsContainer();\n getCapPanel.appendChild(importGetCapResultsList);\n importPanelPanelDiv.appendChild(getCapPanel);\n\n // mapbox panel results\n var mapBoxPanel = this._mapBoxPanel = this._createImportMapBoxPanelElement();\n // var mapBoxPanelHeader = this._mapBoxPanelHeader = this._createImportMapBoxPanelHeaderElement();\n // mapBoxPanel.appendChild(mapBoxPanelHeader);\n var importMapBoxResultsList = this._mapBoxResultsListContainer = this._createImportMapBoxResultsContainer();\n mapBoxPanel.appendChild(importMapBoxResultsList);\n\n // loading element mapbox\n var loading = this._loadingContainer = this._createLoadingElement();\n mapBoxPanel.appendChild(loading);\n\n importPanelPanelDiv.appendChild(mapBoxPanel);\n\n // waiting\n var waiting = this._waitingContainer = this._createImportWaitingElement();\n importPanelPanelDiv.appendChild(waiting);\n\n container.appendChild(importPanel);\n\n return container;\n }\n\n /**\n * Create control main container (DOM initialize)\n *\n * @private\n * @returns {DOMElement} importForm - form main container\n */\n _initInputFormElement () {\n // form main container\n var importForm = this._createImportPanelFormElement();\n\n // Format choice\n var importTypeChoiceDiv = this._createImportTypeLineElement(this.options.layerTypes);\n importForm.appendChild(importTypeChoiceDiv);\n\n // params for KML/GPX/GeoJSON\n\n var importStaticParamsContainer = this._createImportStaticParamsContainer(this.options.layerTypes[0]);\n // static file name\n var staticNameLabel = this._createStaticNameLabel();\n importStaticParamsContainer.appendChild(staticNameLabel);\n // static import choice (local / url)\n var staticImportChoice = this._createStaticModeChoiceDiv();\n // TODO : passer un paramètre \"checked\" ??\n var staticLocalImportChoice = this._createStaticLocalChoiceDiv();\n staticImportChoice.appendChild(staticLocalImportChoice);\n var staticUrlImportChoice = this._createStaticUrlChoiceDiv();\n staticImportChoice.appendChild(staticUrlImportChoice);\n importStaticParamsContainer.appendChild(staticImportChoice);\n\n // div for local file import\n var staticLocalInputDiv = this._createStaticLocalInputDiv();\n // label\n staticLocalInputDiv.appendChild(this._createStaticLocalInputLabel());\n // file input\n this._staticLocalImportInput = this._createStaticLocalInput();\n staticLocalInputDiv.appendChild(this._staticLocalImportInput);\n // append div to params container\n importStaticParamsContainer.appendChild(staticLocalInputDiv);\n\n // div for url input (info: séparation pour récupérer l'élément input)\n var staticUrlInputDiv = this._createStaticUrlInputDiv();\n // label\n staticUrlInputDiv.appendChild(this._createStaticUrlInputLabel());\n // url input\n this._staticUrlImportInput = this._createStaticUrlInput();\n staticUrlInputDiv.appendChild(this._staticUrlImportInput);\n // append div to params container\n importStaticParamsContainer.appendChild(staticUrlInputDiv);\n\n // append static params container to form container\n importForm.appendChild(importStaticParamsContainer);\n\n // params for WMS/WMTS/WFS\n\n var importServiceParamsContainer = this._createServiceParamsContainer(this.options.layerTypes[0]);\n // div for service url\n var importServiceUrlDiv = this._createServiceUrlDiv();\n // label\n importServiceUrlDiv.appendChild(this._createServiceUrlInputLabel());\n // input\n this._serviceUrlImportInput = this._createServiceUrlInput();\n importServiceUrlDiv.appendChild(this._serviceUrlImportInput);\n // append div to params container\n importServiceParamsContainer.appendChild(importServiceUrlDiv);\n // append service params container to form container\n importForm.appendChild(importServiceParamsContainer);\n\n // submit (bouton \"Importer\")\n var submit = this._createImportSubmitFormElement();\n importForm.appendChild(submit);\n\n return importForm;\n }\n\n // ################################################################### //\n // ######################### DOM events ############################## //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on 'GPshowImportPicto' picto\n * (cf. LayerImportDOM._createShowImportPictoElement),\n * and dispatch event change:collapsed (for tools listening this property)\n *\n * @param { event } e évènement associé au clic\n * @private\n */\n _onShowImportClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n // on supprime toutes les interactions\n Interactions.unset(map);\n // info : on génère nous même l'evenement OpenLayers de changement de propriété\n // (utiliser ol.control.LayerImport.on(\"change:collapsed\", function ) pour s'abonner à cet évènement)\n var opened = this._showImportButton.ariaPressed;\n this.collapsed = !(opened === \"true\");\n this.dispatchEvent(\"change:collapsed\");\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n // on affiche les resultats d'une couche MapBox\n // car on garde la possibilité de modifier la configuration des layers\n if (this._hasMapBoxResults) {\n this._mapBoxPanel.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n this._mapBoxPanel.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n this._hideFormContainer();\n } else if (this._hasGetCapResults) {\n this._getCapPanel.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n this._getCapPanel.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n this._hideFormContainer();\n } else {\n this._getCapPanel.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n this._getCapPanel.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n this._mapBoxPanel.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n this._mapBoxPanel.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n this._displayFormContainer();\n }\n }\n\n /**\n * this method is called by event 'change' on 'GPimportType' tag form\n * (cf. LayerImportDOM._createImportTypeLineElement),\n * and change current import type\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onImportTypeChange (e) {\n this._currentImportType = e.target.value;\n if (this._currentImportType === \"KML\" || this._currentImportType === \"GPX\" || this._currentImportType === \"GeoJSON\" || this._currentImportType === \"MAPBOX\") {\n this._isCurrentImportTypeStatic = true;\n } else if (this._currentImportType === \"WMS\" || this._currentImportType === \"WMTS\" || this._currentImportType === \"WFS\") {\n this._isCurrentImportTypeStatic = false;\n }\n }\n\n /**\n * this method is called by event 'change' on 'GPimportType' tag form\n * (cf. LayerImportDOM._createImportTypeLineElement),\n * and change current import type\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onStaticImportTypeChange (e) {\n this._currentStaticImportType = e.target.value;\n }\n\n /**\n * this method is called by event 'click' on 'GPimportGetCapPanelClose' tag form\n * (cf. LayerImportDOM._createImportGetCapPanelHeaderElement),\n * and reset getCapabilities information\n *\n * @private\n */\n _onGetCapPanelClose () {\n // this._clearGetCapParams();\n if (this._currentImportType === \"WMS\" ||\n this._currentImportType === \"WMTS\" ||\n this._currentImportType === \"WFS\") {\n this.cleanGetCapResultsList();\n }\n }\n\n /**\n * this method is called by event 'click' on 'GPimportMapBoxPanelClose' tag form\n * (cf. LayerImportDOM._createImportMapBoxPanelHeaderElement),\n * and reset mapbox information\n *\n * @private\n */\n _onMapBoxPanelClose () {\n this.cleanMapBoxResultsList();\n this._loadingContainer.className = \"\";\n this._importPanelReturnPicto.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n this._importPanelReturnPicto.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n this._mapBoxPanel.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n this._mapBoxPanel.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n\n /**\n * this method is called by event 'click' on 'GPimportPanelReturnPicto' tag form\n * (cf. LayerImportDOM._createImportMapBoxPanelHeaderElement),\n * and return to information\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onReturnPictoClick (e) {\n // on bascule sur l'icone d'ouverture du composant\n this._onGetCapPanelClose();\n this._onMapBoxPanelClose();\n this._loadingContainer.className = \"\";\n }\n\n // ################################################################### //\n // ######################## Submit form ############################## //\n // ################################################################### //\n\n /**\n * this method is called by event 'submit' on 'GPimportForm' tag form\n * (cf. LayerImportDOM._createImportPanelFormElement),\n * and import static layer or call getCap service (according to import type)\n *\n * @private\n */\n _onImportSubmit () {\n logger.log(\"import d'une couche de type : \" + this._currentImportType);\n\n // reinitialisation du contenu d'un import de type\n // - static (KML ou GPX ou GeoJSON)\n this.contentStatic = null;\n // - service (WMS, ...)\n this.contentService = null;\n\n if (this._isCurrentImportTypeStatic) {\n // on ferme le widget à l'import d'une couche statique\n this.setCollapsed(true);\n this._importStaticLayer();\n } else {\n this._importServiceLayers();\n }\n }\n\n // ################################################################### //\n // ############## Import KML/GPX/GeoJSON/MapBox layers ############### //\n // ################################################################### //\n\n /**\n * this method is called by this_onImportSubmit method\n * and import static layer (KML/GPX/GeoJSON) from url or file\n *\n * @private\n */\n _importStaticLayer () {\n var layerName;\n var staticImportNameInput = document.getElementById(this._addUID(\"GPimportName\"));\n if (staticImportNameInput) {\n layerName = staticImportNameInput.value || \"\";\n logger.log(\"import layer name : \" + layerName);\n }\n\n if (this._currentStaticImportType === \"local\") {\n logger.log(\"import static layer from local file\");\n this._importStaticLayerFromLocalFile(layerName);\n } else if (this._currentStaticImportType === \"url\") {\n logger.log(\"import static layer from url\");\n this._importStaticLayerFromUrl(layerName);\n }\n }\n\n /**\n * this method is called by _importStaticLayer method\n * and import static layer (KML/GPX/GeoJSON) from url\n *\n * @param {String} layerName - imported layer name\n * @private\n */\n _importStaticLayerFromUrl (layerName) {\n // 1. Récupération de l'url\n var url = this._staticUrlImportInput.value;\n logger.log(\"url : \", url);\n if (url.length === 0) {\n logger.error(\"[ol.control.LayerImport] url parameter is mandatory\");\n return;\n }\n // on supprime les éventuels espaces avant ou après\n if (url.trim) {\n url = url.trim();\n }\n\n // sauvegarde\n this._url = url;\n\n // si le nom n'est pas renseigné, on extrait le nom du fichier\n if (!layerName) {\n layerName = this._url.substring(this._url.lastIndexOf(\"/\") + 1, this._url.lastIndexOf(\".\"));\n }\n\n // sauvegarde\n this._name = layerName;\n\n // 2. récupération proxy\n if (this.options.webServicesOptions && this.options.webServicesOptions.proxyUrl) {\n url = ProxyUtils.proxifyUrl(url, this.options.webServicesOptions);\n }\n\n // FIXME pb de surcharge en mode UMD !? ça ne marche pas...\n // this._hideWaitingContainer();\n // this._addFeaturesFromImportStaticLayerUrl(url, layerName);\n\n var context = this;\n Gp.Protocols.XHR.call({\n url : url,\n method : \"GET\",\n timeOut : 15000,\n // on success callback : display results in container\n onResponse : function (response) {\n context._hideWaitingContainer();\n context._addFeaturesFromImportStaticLayer(response, layerName);\n },\n // on error callback : log error\n onFailure : function (error) {\n // en cas d'erreur, on revient au panel initial et on cache la patience\n context._hideWaitingContainer();\n logger.error(\"[ol.control.LayerImport] KML/GPX/GeoJSON/MapBox request failed : \", error);\n }\n });\n }\n\n /**\n * this method is called by _importStaticLayer method\n * and import static layer (KML/GPX/GeoJSON) from local file\n *\n * @param {String} layerName - imported layer name\n * @private\n */\n _importStaticLayerFromLocalFile (layerName) {\n var file = this._staticLocalImportInput.files[0];\n if (!file) {\n logger.warn(\"[ol.control.LayerImport] missing file\");\n return;\n }\n\n // sauvegarde\n this._file = file;\n\n // si le nom n'est pas renseigné, on extrait le nom du fichier\n if (!layerName) {\n layerName = this._file.name.substring(this._file.name.lastIndexOf(\"/\") + 1, this._file.name.lastIndexOf(\".\"));\n }\n\n // sauvegarde\n this._name = layerName;\n\n // Création d'un objet FileReader qui permet de lire le contenu du fichier chargé\n var fReader = new FileReader();\n\n // Définition des fonctions de callbacks associées au reader,\n // notamment la fonction onload qui affichera les entités chargées à la carte\n var context = this;\n // on readAsText error\n fReader.onerror = (e) => {\n // en cas d'erreur, on revient au panel initial et on cache la patience\n context._hideWaitingContainer();\n logger.error(\"error fileReader : \", e);\n };\n /** on readAsText progress */\n fReader.onprogress = () => {\n logger.log(\"onprogress\");\n };\n /** on load start */\n fReader.onloadstart = () => {\n // affichage d'une patience le temps du chargement\n context._displayWaitingContainer();\n logger.log(\"onloadstart\");\n };\n /** on readAsText abort */\n fReader.onabort = () => {\n // en cas d'erreur, on revient au panel initial et on cache la patience\n context._hideWaitingContainer();\n logger.log(\"onabort\");\n };\n // on readAsText loadend\n fReader.onloadend = (e) => {\n // fReader = null ?\n // en cas d'erreur, on revient au panel initial et on cache la patience\n // context._hideWaitingContainer();\n // TODO : replier le formulaire ?\n logger.log(\"onloadend : \", e);\n };\n // on readAsText load\n fReader.onload = (e) => {\n logger.log(\"fileReader onload - file content : \", e.target.result);\n\n // on cache la patience\n context._hideWaitingContainer();\n context._addFeaturesFromImportStaticLayer(e.target.result, layerName);\n };\n\n // Lecture du fichier chargé à l'aide de fileReader\n fReader.readAsText(file);\n }\n\n /**\n * this method is called by _importStaticLayerFom* method\n * and add features to the map\n *\n * @param {String} fileContent - content file\n * @param {String} layerName - imported layer name\n * @private\n */\n _addFeaturesFromImportStaticLayer (fileContent, layerName) {\n // récupération du contenu du fichier\n var map = this.getMap();\n if (!map || !fileContent) {\n return;\n }\n\n var vectorLayer = null;\n var vectorSource = null;\n var vectorFormat = null;\n var vectorStyle = null;\n\n // sauvegarde du content KML/GPX/GeoJSON/MapBox\n this.contentStatic = fileContent;\n\n if (this._currentImportType === \"MAPBOX\") {\n // INFO\n // on ne nettoie pas délibérément la liste de résultats de type MapBox\n // car on souhaite pouvoir interagir sur les couches (editeur).\n // du coup, à chaque import, on empile les éditeurs.\n this._hasMapBoxResults = true;\n\n // contexte\n var self = this;\n\n // style mapbox\n var _glStyles = JSON.parse(fileContent);\n\n // liste des sources\n var _glSources = _glStyles.sources;\n\n // FIXME a t on du multi-sources ?\n // mais comment doit on les traiter ?\n // EXPERIMENTAL !\n var _multiSources = (Object.keys(_glSources).length > 1) ? 1 : 0;\n\n for (var _glSourceId in _glSources) {\n if (_glSources.hasOwnProperty(_glSourceId)) {\n var _title = \"\";\n var _description = \"\";\n var _quicklookUrl = null;\n var _legends = null;\n var _metadata = null;\n var _originators = null;\n\n // lecture des informations dans le style\n // ex. metadata : {\n // geoportail:[title | description | quicklookUrl | legends | originators | metadata]\n // }\n if (_glStyles.metadata) {\n for (var ns in _glStyles.metadata) {\n if (_glStyles.metadata.hasOwnProperty(ns)) {\n var _keys = ns.split(\":\");\n if (_keys[0] === \"geoportail\") {\n var key = _keys[1];\n if (key === \"title\") {\n _title = _glStyles.metadata[ns];\n continue;\n }\n if (key === \"description\") {\n _description = _glStyles.metadata[ns];\n continue;\n }\n if (key === \"quicklookUrl\") {\n _quicklookUrl = _glStyles.metadata[ns];\n continue;\n }\n if (key === \"legends\") {\n _legends = _glStyles.metadata[ns];\n continue;\n }\n if (key === \"metadata\") {\n _metadata = _glStyles.metadata[ns];\n continue;\n }\n if (key === \"originators\") {\n _originators = _glStyles.metadata[ns];\n continue;\n }\n }\n }\n }\n }\n\n // titre par defaut\n if (!_title) {\n _title = \"Couche MapBox\";\n }\n // description par defaut\n if (!_description) {\n _description = \"Couche MapBox\";\n }\n // cas des multisources\n _title = (_multiSources) ? _title + \"(\" + _glSourceId + \")\" : _title;\n\n // source mapbox\n var _glSource = _glSources[_glSourceId];\n\n // construction de la couche en fonction du type\n var _glType = _glSource.type;\n\n if (_glType === \"vector\") {\n // url du tilejson ou flux mapbox\n var _glUrl = _glSource.url;\n // url du service tuilé\n var _glTiles = _glSource.tiles;\n // sprites\n var _glSprite = _glStyles.sprite;\n\n // FIXME si on a un import par fichier local (this._file),\n // - comment passe t on la clef / le token ?\n // - comment remplacer un flux mapbox sur une url de service tuilé avec un import local ?\n if (_glUrl && _glUrl.indexOf(\"mapbox://\") === 0) {\n var _urlService = this._url; // FIXME si fichier local !?\n if (_urlService) {\n _glTiles = [\"a\", \"b\", \"c\", \"d\"].map(function (host) {\n var path = _glUrl.replace(\"mapbox://\", \"\");\n var accessToken = _urlService.split(\"?\")[1];\n return \"https://\" +\n host + \".tiles.mapbox.com/v4/\" +\n path + \"/{z}/{x}/{y}.vector.pbf?\" +\n accessToken;\n });\n // conversion des sprites sur un autre scheme que \"mapbox://\"\n if (_glSprite.indexOf(\"mapbox://\") === 0) {\n var s = _urlService.split(\"?\"); // FIXME si fichier local !?\n _glStyles.sprite = s[0] + \"/sprite\" + \"?\" + s[1];\n }\n } else {\n logger.warn(\"Not yet implemented, can't use the local import scheme with a 'mapbox://' in the file.!\");\n }\n }\n\n if (_glTiles) {\n // service tuilé et/ou mapbox\n vectorFormat = new MVT({\n featureClass : Feature\n });\n vectorSource = new VectorTileSource({\n attributions : _glSource.attribution,\n format : vectorFormat,\n // INFO\n // on supprime la grille pour forcer l'utilisation par defaut des tuiles en 512\n // sur du vecteur tuilé\n // tileGrid : olCreateXYZTileGrid({ // TODO scheme tms ?\n // extent : _glSource.bounds, // [minx, miny, maxx, maxy]\n // maxZoom : _glSource.maxzoom || 22,\n // minZoom : _glSource.minzoom || 1,\n // tileSize : _glSource.tileSize || 256\n // }),\n urls : _glTiles\n });\n vectorSource._title = _title;\n vectorSource._description = _description;\n vectorSource._quicklookUrl = _quicklookUrl;\n vectorSource._metadata = _metadata;\n vectorSource._legends = _legends;\n vectorSource._originators = _originators;\n // waiting\n vectorSource.on(\"tileloadstart\", function (e) {\n self._loadingContainer.className = \"GPmapLoadingVisible\";\n });\n vectorSource.on(\"tileloadend\", function (e) {\n self._loadingContainer.className = \"\";\n });\n vectorSource.on(\"tileloaderror\", function (e) {\n self._loadingContainer.className = \"\";\n });\n vectorLayer = new VectorTileLayer({\n source : vectorSource,\n visible : false,\n // zIndex: 0, // FIXME gerer l'ordre sur des multisources ?\n declutter : true // TODO utile ?\n });\n vectorLayer.id = _glSourceId;\n vectorLayer.gpResultLayerId = \"layerimport:\" + this._currentImportType;\n } else if (_glUrl) {\n // service avec un tilejson\n vectorFormat = new MVT({\n featureClass : Feature\n });\n vectorLayer = new VectorTileLayer({\n visible : false,\n // zIndex : 0\n declutter : true\n });\n vectorLayer.id = _glSourceId;\n vectorLayer.gpResultLayerId = \"layerimport:\" + this._currentImportType;\n var vectorTileJson = new TileJSONSource({\n url : _glUrl\n });\n // lecture du tilejson avec extension IGN\n // les extensions sont enregistrées\n // dans les propriétés de la couche : layer.set(mapbox-extension)\n // pour une utilisation ulterieur (ex. editeur)\n var _key = vectorTileJson.on(\"change\", function () {\n if (vectorTileJson.getState() === \"ready\") {\n var _tileJSONDoc = vectorTileJson.getTileJSON();\n\n var tiles = Array.isArray(_tileJSONDoc.tiles) ? _tileJSONDoc.tiles : [_tileJSONDoc.tiles];\n for (var i = 0; i < tiles.length; i++) {\n var tile = tiles[i];\n if (tile.indexOf(\"http\") !== 0) {\n tiles[i] = _glUrl + tile;\n }\n }\n vectorSource = new VectorTileSource({\n attributions : vectorTileJson.getAttributions() || _tileJSONDoc.attribution,\n format : vectorFormat,\n // tileGrid : olCreateXYZTileGrid({\n // extent : _glSource.bounds, // [minx, miny, maxx, maxy]\n // maxZoom : _glSource.maxzoom || 22,\n // minZoom : _glSource.minzoom || 1,\n // tileSize : _glSource.tileSize || 256\n // }),\n urls : tiles\n });\n vectorSource._title = _title;\n vectorSource._description = _description;\n vectorSource._quicklookUrl = _quicklookUrl;\n vectorSource._metadata = _metadata;\n vectorSource._legends = _legends;\n vectorSource._originators = _originators;\n // waiting\n vectorSource.on(\"tileloadstart\", function (e) {\n self._loadingContainer.className = \"GPmapLoadingVisible\";\n });\n vectorSource.on(\"tileloadend\", function (e) {\n self._loadingContainer.className = \"\";\n });\n vectorLayer.setSource(vectorSource);\n vectorLayer.set(\"mapbox-extension\", _tileJSONDoc[\"vector_layers\"]);\n olObservableUnByKey(_key);\n }\n });\n }\n } else if (_glType === \"geojson\") {\n // FIXME\n // - cas avec un objet de type features ?\n // - cas avec une url relative ?\n var _glData = _glSource.data;\n\n vectorFormat = new GeoJSONExtended();\n vectorSource = new VectorTileSource({\n attributions : _glSource.attribution,\n format : vectorFormat,\n url : _glData\n });\n vectorSource._title = _title;\n vectorSource._description = _description;\n vectorSource._quicklookUrl = _quicklookUrl;\n vectorSource._metadata = _metadata;\n vectorSource._legends = _legends;\n vectorSource._originators = _originators;\n vectorLayer = new VectorTileLayer({\n source : vectorSource,\n visible : false,\n // zIndex: 0, // FIXME gerer l'ordre sur des multisources ?\n declutter : true // TODO utile ?\n });\n vectorLayer.id = _glSourceId;\n vectorLayer.gpResultLayerId = \"layerimport:\" + this._currentImportType;\n } else {\n logger.warn(\"Type MapBox format unknown !\");\n return;\n }\n\n // clone\n var _glStyle = JSON.parse(JSON.stringify(_glStyles));\n // cas du multi source\n if (_multiSources) {\n // on supprime les layers inutiles\n var _glLayers = _glStyle.layers;\n for (var ii = 0; ii < _glLayers.length; ii++) {\n var _glLayer = _glLayers[ii];\n if (_glLayer.source !== _glSourceId) {\n _glLayers.splice(ii, 1);\n continue;\n }\n }\n // on supprime les sources inutiles\n for (var keySource in _glStyle.sources) {\n if (_glStyle.sources.hasOwnProperty(keySource)) {\n if (keySource !== _glSourceId) {\n delete _glStyle.sources[keySource];\n }\n }\n }\n }\n\n // parametre à transmettre à la fonction auto-invoquée\n var params = {\n id : _glSourceId,\n styles : _glStyle,\n layer : vectorLayer,\n options : {\n title : layerName || _title,\n description : _description,\n quicklookUrl : _quicklookUrl,\n metadata : _metadata,\n legends : _legends,\n originators : _originators\n }\n };\n // fonction auto-invoquée\n (function (p) {\n // TODO ajouter le style de type background !\n // fonction de style de la couche\n var setStyle = () => {\n applyStyleOlms(p.layer, p.styles, { source : p.id })\n .then(function () {\n var visibility = true;\n p.layer.setVisible(visibility);\n var opacity = 1;\n p.layer.setOpacity(opacity);\n })\n .then(function () {\n // gestion du centre sur la carte si center renseigné !\n var projCode = map.getView().getProjection().getCode();\n if (map.getView() && p.styles.center && p.styles.center.length) {\n map.getView().setCenter(olTransformProj(p.styles.center, \"EPSG:4326\", projCode));\n }\n\n // gestion du zoom sur la carte si zoom renseigné !\n if (map.getView() && (p.styles.zoom || p.styles.zoom === 0)) {\n map.getView().setZoom(p.styles.zoom);\n }\n\n // TODO : appeler fonction commune\n // zoom sur l'étendue des entités récupérées (si possible)\n var source = p.layer.getSource();\n if (map.getView() && map.getSize() && source.getExtent) {\n var sourceExtent = source.getExtent();\n if (sourceExtent && sourceExtent[0] !== Infinity) {\n map.getView().fit(sourceExtent, map.getSize());\n }\n }\n })\n .then(function () {\n // on cache le panneau principal des imports\n self._hideFormContainer();\n self._importPanelHeader.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n self._importPanelHeader.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n self._importPanelTitle.innerHTML = \"Edition des styles\";\n\n // editeur de styles\n var editor = new Editor({\n target : self._mapBoxResultsListContainer,\n style : JSON.parse(JSON.stringify(p.styles)), // clone\n scope : this,\n events : {\n \"editor:onloaded\" : self._onLoadedMapBox, // utile ?\n \"editor:layer:onclickvisibility\" : self._onChangeVisibilitySourceMapBox,\n \"editor:style:scale:onchangemin\" : self._onChangeScaleMinSourceMapBox,\n \"editor:style:scale:onchangemax\" : self._onChangeScaleMaxSourceMapBox,\n \"editor:legend:onchangevalue\" : self._onChangeLegendValueSourceMapBox,\n \"editor:legend:onclickedition\" : self._onDisplayLayerSourceMapBox\n },\n tools : self.options.vectorStyleOptions.MapBox.editor\n });\n editor.setContext(\"map\", map);\n editor.setContext(\"layer\", p.layer);\n // creation de l'editeur\n return editor.createElement()\n .then(function () {\n // exception...\n if (editor.getLayers().length === 0) {\n throw new Error(\"Il n'existe pas de styles pour la source demandée !?\");\n }\n })\n .then(function () {\n // affichage du panneau des couches accessibles à l'edition\n if (self.options.vectorStyleOptions.MapBox.display) {\n self._importPanelHeader.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n self._importPanelHeader.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n self._mapBoxPanel.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n self._mapBoxPanel.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n self._importPanelReturnPicto.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n self._importPanelReturnPicto.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n }\n })\n .then(function () {\n // hack pour modifier le titre de la couche de fond\n var elements = self._mapBoxResultsListContainer.getElementsByClassName(\"GPEditorMapBoxLayerTitleLabel\");\n for (let index = 0; index < elements.length; index++) {\n const element = elements[index];\n if (element.textContent === \"bckgrd\") {\n element.textContent = \"Couleur de remplissage\";\n }\n }\n })\n .then(function () {\n // association entre le layer et l'editeur via l'id\n p.layer.set(\"mapbox-editor\", editor.getID());\n // envoi d'un evenement\n // un peu en décalé pour laisser le temps au DOM de faire le job...\n setTimeout(function () {\n map.dispatchEvent({\n id : editor.getID(),\n type : \"editor:loaded\",\n style : p.styles,\n layer : p.layer\n });\n }, 100);\n })\n .catch(function (e) {\n // on propage l'exception\n throw e;\n });\n })\n .then(function () {\n // envoi d'un evenement !\n map.dispatchEvent({\n id : p.id,\n type : \"render:success\",\n style : p.styles\n });\n })\n .catch(function (e) {\n logger.error(e);\n // envoi d'un evenement !\n map.dispatchEvent({\n id : p.id,\n type : \"render:failure\",\n error : e\n });\n });\n };\n\n // etat des layers en cours\n logger.warn(p.layer);\n\n // ajout des styles dans la carte pour une utilisation\n // eventuelle (ex. editeur)\n // > map.set(\"mapbox-styles\")\n var styles = map.get(\"mapbox-styles\") || {};\n var id = p.id; // FIXME : construction d'un id unique\n styles[id] = p.styles;\n map.set(\"mapbox-styles\", styles);\n\n // ajout des differents styles de la couche\n // pour une utilisation eventuelle (ex. editeur)\n // > layer.set(\"mapbox-styles\")\n p.layer.set(\"mapbox-styles\", p.styles);\n\n // ajout du layer sur la carte\n map.addLayer(p.layer);\n\n // application du style\n if (p.layer.getSource()) {\n setStyle();\n } else {\n p.layer.once(\"change:source\", setStyle);\n }\n\n // maj du gestionnaire de couche\n map.getControls().forEach(\n (control) => {\n if (control instanceof LayerSwitcher) {\n control.addLayer(\n p.layer,\n p.options\n );\n }\n }\n );\n })(params);\n }\n }\n\n // TODO style par defaut au cas où l'application du style échoue !\n // TODO au niveau de la couche : minResolution et maxResolution\n // FIXME bug avec le geojson, très bizarre !?\n // Si on desactive l'editeur, OK\n // Sinon NOK !?\n } else {\n if (this._currentImportType === \"KML\") {\n // lecture du fichier KML : création d'un format ol.format.KML, qui possède une méthode readFeatures (et readProjection)\n vectorStyle = this.options.vectorStyleOptions.KML.defaultStyle;\n vectorFormat = new KMLExtended({\n showPointNames : this.options.vectorStyleOptions.KML.showPointNames,\n extractStyles : this.options.vectorStyleOptions.KML.extractStyles,\n defaultStyle : [\n vectorStyle\n ]\n });\n } else if (this._currentImportType === \"GPX\") {\n // lecture du fichier GPX : création d'un format ol.format.GPX, qui possède une méthode readFeatures (et readProjection)\n vectorStyle = this.options.vectorStyleOptions.GPX.defaultStyle;\n vectorFormat = new GPXExtended({\n defaultStyle : vectorStyle\n });\n } else if (this._currentImportType === \"GeoJSON\") {\n // lecture du fichier GeoJSON : création d'un format ol.format.GeoJSON, qui possède une méthode readFeatures (et readProjection)\n vectorStyle = this.options.vectorStyleOptions.GeoJSON.defaultStyle;\n vectorFormat = new GeoJSONExtended({\n defaultStyle : vectorStyle\n });\n }\n\n // lecture de la géométrie des entités à partir du fichier, pour éventuelle reprojection.\n var fileProj = vectorFormat.readProjection(fileContent);\n // récupération de la projection de la carte pour reprojection des géométries\n var mapProj = this._getMapProjectionCode();\n\n // récupération des entités avec reprojection éventuelle des géométries\n var features = null;\n features = vectorFormat.readFeatures(\n fileContent, {\n dataProjection : fileProj,\n featureProjection : mapProj\n }\n );\n\n logger.log(\"loaded features : \", features);\n\n // création d'une couche vectorielle à partir de ces features\n vectorSource = new VectorSource({\n features : new Collection()\n });\n vectorSource.addFeatures(features);\n\n logger.trace(vectorSource);\n\n // ajout des informations pour le layerSwitcher (titre, description)\n vectorSource._title = vectorSource._description = layerName;\n\n vectorLayer = new VectorLayer({\n source : vectorSource,\n style : vectorStyle\n });\n\n // on rajoute le champ gpResultLayerId permettant d'identifier une couche crée par le composant.\n vectorLayer.gpResultLayerId = \"layerimport:\" + this._currentImportType;\n\n // cette couche est elle une couche de calcul ?\n var configControl = vectorFormat.readRootExtensions(\"geoportail:compute\");\n if (configControl && Object.keys(configControl).length !== 0) {\n // identifier le type de calcul authorisé :\n // * route\n // * isocurve\n // * elevationpath\n var authorizedControls = {\n route : { class : Route, name : \"itineraire\" },\n isocurve : { class : Isocurve, name : \"isocurve\" },\n elevationpath : { class : ElevationPath, name : \"profil altimetrique\" }\n };\n // information à transmettre à la couche\n var typeControl = configControl.type;\n var graphControl = configControl.transport;\n if (typeControl) {\n // la classe du controle\n var nameControl = authorizedControls[typeControl].name;\n var titleControl = (graphControl) ? nameControl + \" (\" + graphControl + \")\" : nameControl;\n var classControl = authorizedControls[typeControl].class;\n if (classControl) {\n // on est bien sur une couche de calcul authorisé !\n vectorLayer.gpResultLayerId = \"layerimport:COMPUTE\";\n // on transmet les infomations utiles\n vectorLayer.set(\"control\", typeControl);\n vectorLayer.set(\"name\", nameControl);\n vectorLayer.set(\"graph\", graphControl);\n vectorLayer.set(\"data\", configControl);\n vectorLayer.set(\"title\", titleControl);\n var formatGeoJSON = new GeoJSONExtended({\n defaultStyle : vectorStyle\n });\n var geojson = formatGeoJSON.writeFeatures(features, {\n dataProjection : \"EPSG:4326\",\n featureProjection : \"EPSG:3857\"\n });\n vectorLayer.set(\"geojson\", geojson);\n // recherche et initialiser le controle\n this.getMap().getControls().forEach((control) => {\n if (control instanceof classControl) {\n control.setData(configControl);\n control.setLayer(vectorLayer);\n control.init();\n }\n });\n }\n }\n }\n\n map.addLayer(vectorLayer);\n\n // TODO : appeler fonction commune\n // zoom sur l'étendue des entités récupérées (si possible)\n if (map.getView() && map.getSize() && vectorSource.getExtent) {\n var sourceExtent = vectorSource.getExtent();\n if (sourceExtent && sourceExtent[0] !== Infinity) {\n map.getView().fit(sourceExtent, map.getSize());\n }\n }\n }\n }\n\n /**\n * NOT USE : this method is called by _importStaticLayerFom* method\n * and add features to the map\n *\n * @param {String} url - url\n * @param {String} layerName - imported layer name\n * @private\n */\n _addFeaturesFromImportStaticLayerUrl (url, layerName) {\n // récupération du contenu du fichier\n var map = this.getMap();\n if (!map || !url) {\n return;\n }\n\n var vectorSource;\n var vectorLayer;\n var vectorFormat;\n if (this._currentImportType === \"MAPBOX\") {\n // TODO\n logger.trace(\"Not yet implemented !\");\n } else {\n if (this._currentImportType === \"KML\") {\n // lecture du fichier KML : création d'un format ol.format.KML, qui possède une méthode readFeatures (et readProjection)\n vectorFormat = new KMLExtended({\n showPointNames : true, // FIXME option !\n extractStyles : this.options.vectorStyleOptions.KML.extractStyles,\n defaultStyle : [\n this.options.vectorStyleOptions.KML.defaultStyle\n ]\n });\n } else if (this._currentImportType === \"GPX\") {\n // lecture du fichier GPX : création d'un format ol.format.GPX, qui possède une méthode readFeatures (et readProjection)\n vectorFormat = new GPXExtended({\n defaultStyle : this.options.vectorStyleOptions.GPX.defaultStyle\n });\n } else if (this._currentImportType === \"GeoJSON\") {\n // lecture du fichier GeoJSON : création d'un format ol.format.GeoJSON, qui possède une méthode readFeatures (et readProjection)\n vectorFormat = new GeoJSONExtended({\n defaultStyle : this.options.vectorStyleOptions.GeoJSON.defaultStyle\n });\n }\n\n // création d'une couche vectorielle à partir de ces features\n vectorSource = new VectorSource({\n url : url,\n format : vectorFormat\n });\n\n if (this._currentImportType === \"GPX\") {\n vectorSource.forEachFeature(\n function (feature) {\n // si aucun style n'est associé au feature\n if (feature.getStyle() == null) {\n logger.log(\"[ol.control.LayerImport] set default style for GPX feature\");\n feature.setStyle(\n this.options.vectorStyleOptions.GPX.defaultStyle\n );\n }\n }\n );\n }\n if (this._currentImportType === \"GeoJSON\") {\n vectorSource.forEachFeature(\n function (feature) {\n // si aucun style n'est associé au feature\n if (feature.getStyle() == null) {\n logger.log(\"[ol.control.LayerImport] set default style for GeoJSON feature\");\n feature.setStyle(\n this.options.vectorStyleOptions.GeoJSON.defaultStyle\n );\n }\n }\n );\n }\n\n // ajout des informations pour le layerSwitcher (titre, description)\n vectorSource._title = vectorSource._description = layerName;\n\n vectorLayer = new VectorLayer({\n source : vectorSource\n });\n }\n\n // on rajoute le champ gpResultLayerId permettant d'identifier une couche crée par le composant. (pour layerSwitcher par ex)\n vectorLayer.gpResultLayerId = \"layerimport:\" + this._currentImportType;\n map.addLayer(vectorLayer);\n\n // TODO : appeler fonction commune\n // zoom sur l'étendue des entités récupérées (si possible)\n if (map.getView() && map.getSize() && vectorSource.getExtent) {\n var sourceExtent = vectorSource.getExtent();\n if (sourceExtent && sourceExtent[0] !== Infinity) {\n map.getView().fit(sourceExtent, map.getSize());\n }\n }\n }\n\n // Events MapBox DOM\n\n /**\n * this method is called when the editor is loaded\n *\n * @param {Object} e - editor\n */\n _onLoadedMapBox (e) {\n var data = e.target.data.obj;\n var layer = this.getContext(\"layer\");\n if (layer.get(\"mapbox-source\") === data.source && layer.get(\"mapbox-editor\") === e.target.editorID) {\n // some stuff..\n }\n }\n\n /**\n * this method is called on '_addImportMapBoxVisibilitySource' input click\n * and change visibility source to map\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onChangeVisibilitySourceMapBox (e) {\n var data = e.target.data.obj;\n var target = e.target.srcElement;\n var layer = this.getContext(\"layer\");\n\n // logger.trace(layer);\n if (layer.get(\"mapbox-source\") === data.source && layer.get(\"mapbox-editor\") === e.target.editorID) {\n // reload style with new param : layout.visibility : \"visible\" or \"none\"...\n var styles = layer.get(\"mapbox-styles\");\n var layers = styles.layers;\n for (var i = 0; i < layers.length; i++) {\n if (layers[i].id === data.id) {\n var layout = layers[i].layout;\n if (layout) {\n layout.visibility = (target.checked) ? \"visible\" : \"none\";\n } else {\n layers[i].layout = {\n visibility : (target.checked) ? \"visible\" : \"none\"\n };\n }\n break;\n }\n }\n applyStyleOlms(layer, styles, { source : data.source })\n .then(function () {})\n .catch(function (error) {\n logger.error(error);\n });\n }\n }\n\n /**\n * this method is called on '_addImportMapBoxScaleSource' input slide\n * and change zoom source to map\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onChangeScaleMinSourceMapBox (e) {\n var data = e.target.data.obj;\n var target = e.target.srcElement;\n var layer = this.getContext(\"layer\");\n\n if (layer.get(\"mapbox-source\") === data.source && layer.get(\"mapbox-editor\") === e.target.editorID) {\n // reload style with new param : minZoom = ...\n var styles = layer.get(\"mapbox-styles\");\n var layers = styles.layers;\n for (var i = 0; i < layers.length; i++) {\n if (layers[i].id === data.id) {\n layers[i].minzoom = target.value;\n target.title = target.value;\n break;\n }\n }\n applyStyleOlms(layer, styles, { source : data.source })\n .then(function () {})\n .catch(function (error) {\n logger.error(error);\n });\n }\n }\n\n /**\n * this method is called on '_addImportMapBoxScaleSource' input slide\n * and change zoom source to map\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onChangeScaleMaxSourceMapBox (e) {\n var data = e.target.data.obj;\n var target = e.target.srcElement;\n var layer = this.getContext(\"layer\");\n\n // logger.trace(layer);\n if (layer.get(\"mapbox-source\") === data.source && layer.get(\"mapbox-editor\") === e.target.editorID) {\n // reload style with new param : minZoom = ...\n var styles = layer.get(\"mapbox-styles\");\n var layers = styles.layers;\n for (var i = 0; i < layers.length; i++) {\n if (layers[i].id === data.id) {\n layers[i].maxzoom = target.value;\n target.title = target.value;\n break;\n }\n }\n applyStyleOlms(layer, styles, { source : data.source })\n .then(function () {})\n .catch(function (error) {\n logger.error(error);\n });\n }\n }\n\n /**\n * this method is called on ''\n * and change zoom source to map\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onChangeLegendValueSourceMapBox (e) {\n var data = e.target.data.obj;\n var target = e.target.srcElement;\n var layer = this.getContext(\"layer\");\n\n // logger.trace(layer);\n if (layer.get(\"mapbox-source\") === data.source && layer.get(\"mapbox-editor\") === e.target.editorID) {\n // reload style with new param :\n var styles = layer.get(\"mapbox-styles\");\n var layers = styles.layers;\n for (var i = 0; i < layers.length; i++) {\n if (layers[i].id === data.id) {\n var paint = layers[i].paint;\n if (paint) {\n paint[target.dataset.id] = target.value;\n }\n break;\n }\n }\n applyStyleOlms(layer, styles, { source : data.source, updateSource : true })\n .then(function () {})\n .catch(function (error) {\n logger.error(error);\n });\n }\n }\n\n /**\n * this method is called on ''\n * and change zoom source to map\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onDisplayLayerSourceMapBox (e) {\n var data = e.target.data.obj;\n var layer = this.getContext(\"layer\");\n\n if (layer.get(\"mapbox-source\") === data.source && layer.get(\"mapbox-editor\") === e.target.editorID) {\n var idDOM = e.target.currentTarget.parentNode.id;\n var id = idDOM.substring(idDOM.indexOf(\"-\") + 1, idDOM.indexOf(\"_\"));\n var l = this.getLayer(id);\n l.collapse();\n }\n }\n\n // ################################################################### //\n // #################### Import WMS/WMTS layers ####################### //\n // ################################################################### //\n\n /**\n * this method is called by this_onImportSubmit method\n * and call getCap service from specified url, then display layers list in new panel\n *\n * @private\n */\n _importServiceLayers () {\n if (this._currentImportType === \"WFS\") {\n logger.warn(\"[ol.control.LayerImport] WFS layer import is not implemented yet\");\n return;\n }\n\n // 0. on vide d'éventuels résultats précédents dans le panel GetCapResults\n this.cleanGetCapResultsList();\n\n // 1. récupération de l'url renseignée\n var url = this._getCapRequestUrl = this._serviceUrlImportInput.value;\n if (!url) {\n logger.error(\"[ol.control.LayerImport] url parameter is mandatory\");\n return;\n }\n logger.log(\"url : \", url);\n\n // on supprime les éventuels espaces avant ou après\n if (url.trim) {\n url = url.trim();\n }\n // Info : on ajoute des paramètres uniquement si l'utilisateur n'en a pas déjà saisi (on vérifie la position du caractère \"?\")\n var questionMarkIndex = url.indexOf(\"?\");\n if (questionMarkIndex < 0) {\n // dans le cas d'une url du type https://data.geopf.fr/wmts\n url += \"?SERVICE=\" + this._currentImportType + \"&REQUEST=GetCapabilities\";\n } else if (questionMarkIndex === (url.length - 1)) {\n // dans le cas où l'url se termine par \"?\"\n url += \"SERVICE=\" + this._currentImportType + \"&REQUEST=GetCapabilities\";\n }\n // si on n'est pas dans ces deux cas : l'utilisateur a déjà saisit des paramètres après \"?\" => on ne fait rien.\n\n // 2. récupération proxy\n if (this.options.webServicesOptions && this.options.webServicesOptions.proxyUrl) {\n url = ProxyUtils.proxifyUrl(url, this.options.webServicesOptions);\n }\n\n // 3. affichage d'une patience le temps de la requête\n this._displayWaitingContainer();\n\n // 4. send getcapabilities request (XHR protocol => proxy Url is needed)\n var context = this;\n Gp.Protocols.XHR.call({\n url : url,\n method : \"GET\",\n timeOut : 15000,\n // on success callback : display results in container\n onResponse : function (response) {\n context._hideWaitingContainer();\n context._displayGetCapResponseLayers(response);\n },\n // on error callback : log error\n onFailure : function (error) {\n // en cas d'erreur, on revient au panel initial et on cache la patience\n context._hideWaitingContainer();\n logger.error(\"[ol.control.LayerImport] getCapabilities request failed : \", error);\n }\n });\n }\n\n /**\n * this method is called by this._importServiceLayers method\n * and display layers list from getcapabilities response\n *\n * @param {Object} xmlResponse - getCapabilities response (xml format)\n * @private\n */\n _displayGetCapResponseLayers (xmlResponse) {\n var parser;\n var layers;\n var layerDescription = {\n content : null,\n title : null\n };\n var projection;\n this._getCapResponseWMSLayers = [];\n\n // sauvegarde du content d'un GetCapabilities\n this.contentService = xmlResponse;\n\n // Affichage du panel des couches accessibles\n this._hideFormContainer();\n this._getCapPanel.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n this._getCapPanel.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n this._importPanelTitle.innerHTML = \"Couches accessibles\";\n this._importPanelReturnPicto.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n this._importPanelReturnPicto.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n this._hasGetCapResults = true;\n // Parse GetCapabilities Response\n if (this._currentImportType === \"WMS\") {\n parser = new WMSCapabilities();\n var getCapResponseWMS = this._getCapResponseWMS = parser.read(xmlResponse);\n logger.log(\"getCapabilities response : \", getCapResponseWMS);\n\n if (getCapResponseWMS && getCapResponseWMS.Capability && getCapResponseWMS.Capability.Layer) {\n // info: le parser Openlayers récupère la première layer de comme un unique objet (il écrase les précédents s'il y a pls à la racine de )\n // /!\\ être vigilant si le parser est modifié (notamment pour récupérer les différentes layers à la racine. ex http://geoservices.brgm.fr/geologie?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities)\n\n var getCapLayer = getCapResponseWMS.Capability.Layer;\n // on va lire le contenu de la (ou les) pour l'afficher ou en afficher les couches disponibles\n if (Array.isArray(getCapLayer)) {\n // cas où on a plusieurs à la racine, mais non géré encore par ol.format.WMSCapabilities jusqu'à la v3.18.2.\n for (var i = 0; i < getCapLayer.length; i++) {\n this._displayGetCapResponseWMSLayer(getCapLayer[i]);\n }\n } else {\n // cas du parser ol.format.WMSCapabilities jusqu'à la v3.18.2.\n this._displayGetCapResponseWMSLayer(getCapLayer);\n }\n }\n } else if (this._currentImportType === \"WMTS\") {\n parser = new WMTSCapabilities();\n var getCapResponseWMTS = this._getCapResponseWMTS = parser.read(xmlResponse);\n logger.log(\"getCapabilities response : \", getCapResponseWMTS);\n\n if (getCapResponseWMTS && getCapResponseWMTS.Contents && getCapResponseWMTS.Contents.Layer) {\n layers = getCapResponseWMTS.Contents.Layer;\n\n if (Array.isArray(layers)) {\n // on stocke la liste des couches pour faire le lien avec le DOM\n this._getCapResponseWMTSLayers = layers;\n\n for (var j = 0; j < layers.length; j++) {\n // on vérifie que la projection de la couche WMTS est compatible avec celle de la carte\n // (ie elle doit être connue par ol.proj)\n projection = this._getWMTSLayerProjection(layers[j], getCapResponseWMTS);\n if (projection && typeof projection === \"string\") {\n if (olGetProj(projection) || olGetProj(projection.toUpperCase())) {\n // si la projection de la couche est connue par ol.proj,\n // on ajoute chaque couche de la réponse dans la liste des couches accessibles\n layerDescription = {\n content : layers[j].Title,\n title : layers[j].Abstract || layers[j].Title\n };\n if (this._getCapResultsListContainer) {\n this._addImportGetCapResultLayer(layerDescription, j, this._getCapResultsListContainer);\n }\n } else {\n // si la projection de la couche n'est pas connue par ol.proj,\n // on n'affiche pas la couche dans le panel des résultats\n logger.warn(\"[ol.control.LayerImport] wmts layer cannot be added to map : unknown projection\", layers[j]);\n continue;\n }\n }\n }\n }\n }\n }\n }\n\n /**\n * this method is called by this._displayGetCapResponseLayers method\n * and display WMS layer in list from getcapabilities response\n *\n * @param {Object} layerObj - object corresponding to content in WMS GetCapabilities response\n * @param {Object} [parentLayersInfos] - object corresponding to parents content in WMS GetCapabilities response (without children infos)\n * @private\n */\n _displayGetCapResponseWMSLayer (layerObj, parentLayersInfos) {\n if (!layerObj) {\n logger.warn(\"[ol.control.LayerImport] _displayGetCapResponseWMSLayer : getCapabilities layer object not found\");\n return;\n }\n\n logger.log(\"[ol.control.LayerImport] _displayGetCapResponseWMSLayer - layerObj : \", layerObj);\n\n // récupération de la projection de la map (pour vérifier que l'on peut reprojeter les couches disponibles)\n var mapProjCode = this._getMapProjectionCode();\n var projection;\n var layerDescription = {\n content : null,\n title : null\n };\n\n // 1. héritage éventuels des informations de la couche parent\n if (parentLayersInfos) {\n var key;\n var i;\n\n // propriétés héritées à ajouter aux propriétés parent\n var addKeys = [\n \"CRS\",\n \"Style\"\n // \"AuthorityURL\" // TODO\n ];\n for (i = 0; i < addKeys.length; i++) {\n key = addKeys[i];\n if (Array.isArray(parentLayersInfos[key]) && parentLayersInfos[key].length !== 0) {\n if (Array.isArray(layerObj[key]) && layerObj[key].length !== 0) {\n // on ajoute celles de la couche parent\n for (var n = 0; n < parentLayersInfos[key].length; n++) {\n if (layerObj[key].indexOf(parentLayersInfos[key][n]) === -1) {\n // si le CRS/Style parent n'est pas dans les CRS/Style de la couche, on l'ajoute\n layerObj[key].push(parentLayersInfos[key][n]);\n }\n }\n } else {\n // si la couche n'a pas de CRS ou Style, on récupère ceux de la couche parent\n layerObj[key] = parentLayersInfos[key];\n }\n }\n }\n\n // propriétés qui remplacent les valeurs des propriétés héritées,\n // càd on récupère la propriété parent seulement si elle n'est pas définie pour l'élément enfant\n var replaceKeys = [\n \"BoundingBox\",\n \"EX_GeographicBoundingBox\",\n \"MaxScaleDenominator\",\n \"MinScaleDenominator\",\n \"Attribution\",\n \"Dimension\",\n \"queryable\",\n \"cascaded\",\n \"opaque\",\n \"noSubsets\",\n \"fixedWidth\",\n \"fixedHeight\"\n ];\n for (i = 0; i < replaceKeys.length; i++) {\n key = replaceKeys[i];\n if (parentLayersInfos[key] && !layerObj[key]) {\n layerObj[key] = parentLayersInfos[key];\n }\n }\n } else {\n // si on n'a pas d'infos de couche parent, on est à la racine du Capability, on le note\n layerObj._isRootLayer = true;\n layerObj._container = this._getCapResultsListContainer;\n if (!layerObj.Title) {\n layerObj.Title = \"Liste des couches\";\n }\n }\n\n // 2. si on a d'autres couches imbriquées, on descend d'un niveau, sinon on affiche la couche dans la liste des résultats\n if (layerObj.Layer) {\n if (Array.isArray(layerObj.Layer)) {\n var _container = (layerObj) ? layerObj._container : parentLayersInfos._container;\n var _title = (layerObj) ? layerObj.Title : parentLayersInfos.Title;\n layerObj._container = this._addImportGetCapResultListRubrique(_title, _container).lastChild;\n for (var j = 0; j < layerObj.Layer.length; j++) {\n // on recommence pour chaque sous couche, avec les infos éventuellement héritées\n var bRubriqueExist = false;\n var lstRubrique = layerObj._container.getElementsByClassName(\"GPimportGetCapRubriqueTitle\");\n for (var ii = 0; ii < lstRubrique.length; ii++) {\n if (lstRubrique[ii].title === layerObj.Title) {\n bRubriqueExist = true;\n layerObj.Layer[j]._container = lstRubrique[ii].parentElement;\n }\n }\n if (!bRubriqueExist) {\n layerObj.Layer[j]._container = this._addImportGetCapResultRubrique(layerObj.Title, layerObj._container).lastChild;\n }\n this._displayGetCapResponseWMSLayer(layerObj.Layer[j], layerObj);\n }\n }\n } else {\n // on récupère la longueur de la liste des couches déjà récupérées, pour avoir ce qui sera l'index de la couche à ajouter.\n var lastIndex = this._getCapResponseWMSLayers.length;\n\n // on vérifie que la couche ait une projection compatible avec celle de la carte\n // ou soit connue par proj4js, et on stocke cette projection dans les infos de la couche.\n projection = this._getWMSLayerProjection(layerObj, mapProjCode);\n\n if (!projection) {\n // si aucune projection n'est compatible avec celle de la carte ou connue par ol.proj,\n // on n'affiche pas la couche dans le panel des résultats\n logger.warn(\"[ol.control.LayerImport] wms layer cannot be added to map : unknown projection\", layerObj);\n } else {\n // si on a une projection compatible : on la stocke et la couche sera éventuellement reprojetée à l'ajout\n layerObj._projection = projection;\n // on ajoute chaque couche de la réponse dans la liste des couches accessibles\n layerDescription = {\n content : layerObj.Title,\n title : layerObj.Abstract || layerObj.Title\n };\n // FIXME beurk !?\n var _isGoodContainer = layerObj._container;\n if (_isGoodContainer.localName === \"ul\") {\n _isGoodContainer = _isGoodContainer.lastChild;\n }\n this._addImportGetCapResultLayer(layerDescription, lastIndex, _isGoodContainer);\n\n // puis on stoke la couche dans la liste pour faire le lien avec le DOM\n this._getCapResponseWMSLayers[lastIndex] = layerObj;\n }\n }\n }\n\n /**\n * this method is called on 'GPimportGetCapProposal' div click\n * and add corresponding layer to map\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onGetCapResponseLayerClick (e) {\n if (e.target && e.target.id) {\n var proposalId = parseInt(e.target.id.substr(23), 10);\n\n if (isNaN(proposalId)) {\n return;\n }\n\n var layerInfo;\n\n if (this._currentImportType === \"WMS\") {\n // récupération des informations liées à la couche\n layerInfo = this._getCapResponseWMSLayers[proposalId];\n // ajout de la couche à la carte\n this._addGetCapWMSLayer(layerInfo);\n } else if (this._currentImportType === \"WMTS\") {\n // récupération des informations liées à la couche\n layerInfo = this._getCapResponseWMTSLayers[proposalId];\n // ajout de la couche à la carte\n this._addGetCapWMTSLayer(layerInfo);\n }\n }\n }\n\n // ################################################################### //\n // ######### create WMS layer from getCapabilities response ######### //\n // ################################################################### //\n\n /**\n * this method is called by this._onGetCapResponseLayerClick\n * and add WMS layer to map using parameters from getCapabilities response\n *\n * @param {Object} layerInfo - layer information from getCapabilities response\n * @private\n */\n _addGetCapWMSLayer (layerInfo) {\n var map = this.getMap();\n if (!map) {\n logger.warn(\"[ol.control.LayerImport] _addGetCapWMSLayer error : map is not defined\");\n return;\n }\n if (!layerInfo) {\n logger.warn(\"[ol.control.LayerImport] _addGetCapWMSLayer error : layerInfo is not defined\");\n return;\n }\n\n // récupération de la projection de la carte\n var mapProjCode = this._getMapProjectionCode();\n\n var wmsSourceOptions = {};\n\n // Récupération de l'url\n var getMapUrl = this._getWMSLayerGetMapUrl();\n // on essaie de récupérer l'url du service dans le getCapbilities\n if (getMapUrl) {\n wmsSourceOptions.url = getMapUrl;\n } else {\n // sinon, on récupère l'url du getCapabilities, à laquelle on enlève éventuellement les paramètres\n var questionMarkIndex = this._getCapRequestUrl.indexOf(\"?\");\n if (questionMarkIndex !== -1) {\n wmsSourceOptions.url = this._getCapRequestUrl.substring(0, questionMarkIndex);\n } else {\n wmsSourceOptions.url = this._getCapRequestUrl;\n }\n }\n\n wmsSourceOptions.params = {};\n if (layerInfo.Name) {\n wmsSourceOptions.params[\"LAYERS\"] = layerInfo.Name;\n } else {\n logger.warn(\"[ol.control.LayerImport] unable to add wms layer : mandatory layer 'name' parameter cannot be found\", layerInfo);\n return;\n }\n wmsSourceOptions.params[\"SERVICE\"] = \"WMS\";\n if (this._getCapResponseWMS.version) {\n wmsSourceOptions.params[\"VERSION\"] = this._getCapResponseWMS.version;\n }\n\n // on a déjà vérifié que la couche peut être reprojetée,\n // on vérifie que la couche ait une projection compatible avec celle de la carte\n // ou soit connue par proj4js\n var projection = layerInfo._projection;\n if (!projection) {\n logger.warn(\"[ol.control.LayerImport] wms layer cannot be added to map : unknown projection\");\n return;\n } else if (projection !== mapProjCode) {\n // si la projection de la carte n'est pas disponible pour cette couche,\n // on spécifie une projection (qui doit avoir été définie dans proj4js) pour reprojection par Openlayers\n wmsSourceOptions.projection = projection;\n }\n\n // récupération du premier style disponible (pas d'info default?)\n var legend;\n if (layerInfo.Style && Array.isArray(layerInfo.Style)) {\n var style = layerInfo.Style[0];\n wmsSourceOptions.params[\"STYLES\"] = style.Name;\n if (style.LegendURL && Array.isArray(style.LegendURL) && style.LegendURL.length !== 0) {\n legend = style.LegendURL[0].OnlineResource;\n }\n }\n\n // Création de la source (tester un try catch ?)\n var wmsSource = new TileWMSSource(wmsSourceOptions);\n // ajout des informations pour le layerSwitcher (titre, description, legendes, metadata) ou originators\n this._getWMSLayerInfoForLayerSwitcher(layerInfo, legend, wmsSource);\n\n var layerTileOptions = {};\n layerTileOptions[\"source\"] = wmsSource;\n // récupération des résolutions min et max de la layer à partir des dénominateurs d'échelle\n this._getWMSLayerMinMaxResolution(layerInfo, mapProjCode, layerTileOptions);\n // récupération de l'étendue (bbox)\n this._getWMSLayerExtent(layerInfo, mapProjCode, layerTileOptions);\n\n // création de la couche à partir de la source\n var wmsLayer = new TileLayer(layerTileOptions);\n wmsLayer.setExtent(layerTileOptions.extent);\n // on rajoute le champ gpResultLayerId permettant d'identifier une couche crée par le composant. (pour layerSwitcher par ex)\n wmsLayer.gpResultLayerId = \"layerimport:WMS\";\n // on rajoute le champ gpGFIparams permettant d'identifier si la couche est queryable, et de transmettre les formats reconnus par GetFeatureInfo\n if (layerInfo.queryable) {\n wmsLayer.gpGFIparams = {\n queryable : true\n };\n // récupération des différents formats reconnus par le GetFeatureInfo\n if (this._getCapResponseWMS && this._getCapResponseWMS.Capability && this._getCapResponseWMS.Capability.Request && this._getCapResponseWMS.Capability.Request.GetFeatureInfo && this._getCapResponseWMS.Capability.Request.GetFeatureInfo.Format && Array.isArray(this._getCapResponseWMS.Capability.Request.GetFeatureInfo.Format)) {\n wmsLayer.gpGFIparams.formats = this._getCapResponseWMS.Capability.Request.GetFeatureInfo.Format;\n }\n }\n\n map.addLayer(wmsLayer);\n\n // zoom sur l'étendue des entités récupérées (si possible)\n if (map.getView() && map.getSize() && wmsLayer.getExtent) {\n var sourceExtent = wmsLayer.getExtent();\n if (sourceExtent && sourceExtent[0] !== Infinity) {\n map.getView().fit(sourceExtent, map.getSize());\n }\n }\n }\n\n /**\n * this method is called by this._addGetCapWMSLayer\n * and gets service getMap request url\n *\n * @return {String} getmapurl - service getMap request url\n * @private\n */\n _getWMSLayerGetMapUrl () {\n var getmapurl;\n if (this._getCapResponseWMS && this._getCapResponseWMS.Capability && this._getCapResponseWMS.Capability.Request && this._getCapResponseWMS.Capability.Request.GetMap) {\n var getmap = this._getCapResponseWMS.Capability.Request.GetMap;\n if (getmap.DCPType && Array.isArray(getmap.DCPType) && getmap.DCPType.length !== 0) {\n var url = getmap.DCPType[0];\n if (url && url.HTTP && url.HTTP.Get) {\n getmapurl = url.HTTP.Get.OnlineResource;\n }\n }\n }\n return getmapurl;\n }\n\n /**\n * this method is called by this._addGetCapWMSLayer\n * and gets a projection both available for a given layer and already defined in proj4js (ol.proj)\n * (openlayers raster reprojection will be then able to reproject layer in map projection)\n *\n * @param {Object} layerInfo - layer information from getCapabilities response\n * @param {String} mapProjCode - map projection code (e.g. \"EPSG:4326\")\n * @return {String} projection - ol.proj projection alias (e.g. \"EPSG:4326\")\n * @private\n */\n _getWMSLayerProjection (layerInfo, mapProjCode) {\n var projection;\n\n if (!layerInfo || typeof layerInfo !== \"object\") {\n logger.warn(\"missing layer information (from getCapabilities)\");\n return;\n }\n\n // on va parcourir la liste des CRS disponibles pour la couche\n // si on trouve la projection de la carte : c'est parfait\n // si on trouve une projection qui est connue par ol.proj : Openlayers gère la reprojection\n var CRSList = layerInfo.CRS;\n if (Array.isArray(CRSList)) {\n // on check si la projection de la carte est dans le tableau de projections issues du getCap,\n // si oui, on la prend\n if (CRSList.includes(mapProjCode)) {\n projection = mapProjCode;\n return projection;\n }\n var layerCRS, i;\n // si aucune projection du getCap pour la couche n'est égale à celle de la carte\n // on retourne la première projection listée dans le getCap qui est gérée par openLayers\n for (i = 0; i < CRSList.length; i++) {\n layerCRS = CRSList[i];\n if (layerCRS && typeof layerCRS === \"string\") {\n if (olGetProj(layerCRS) || olGetProj(layerCRS.toUpperCase())) {\n projection = layerCRS;\n // on renvoie la première projection gérée par openLayers\n return projection;\n }\n }\n }\n }\n // si la liste des projections n'est pas un tableau ou si aucune projection n'est égale à celle de la carte ou si aucune n'est gérée par openLayers\n // on return undefined (comportement d'origine de la fonction)\n return projection;\n }\n\n /**\n * this method is called by this._addGetCapWMSLayer\n * and sets minResolution and maxResolution parameters for WMS layer (if available in getCapabilities response)\n *\n * @param {Object} layerInfo - layer information from getCapabilities response\n * @param {String} mapProjCode - map projection code (e.g. \"EPSG:4326\")\n * @param {Object} layerTileOptions - options for ol.layer.Tile (to be filled)\n * @private\n */\n _getWMSLayerMinMaxResolution (layerInfo, mapProjCode, layerTileOptions) {\n // récupération des résolutions min et max à partir des dénominateurs d'échelle\n var mapUnits = olGetProj(mapProjCode).getUnits();\n if (mapUnits === \"m\") {\n // info : 1 pixel = 0.00028 m\n if (layerInfo.MinScaleDenominator) {\n layerTileOptions.minResolution = layerInfo.MinScaleDenominator * 0.00028;\n }\n if (layerInfo.MaxScaleDenominator) {\n layerTileOptions.maxResolution = layerInfo.MaxScaleDenominator * 0.00028;\n }\n } else if (mapUnits === \"degrees\") {\n // info : 6378137 * 2 * pi / 360 = rayon de la terre (ellipsoide WGS84)\n var cste = 0.00028 * 180 / (Math.PI * 6378137);\n if (layerInfo.MinScaleDenominator) {\n layerTileOptions.minResolution = layerInfo.MinScaleDenominator * cste;\n }\n if (layerInfo.MaxScaleDenominator) {\n layerTileOptions.maxResolution = layerInfo.MaxScaleDenominator * cste;\n }\n }\n }\n\n /**\n * this method is called by this._addGetCapWMSLayer\n * and sets extent for WMS layer in map projection (if available in getCapabilities response)\n *\n * @param {Object} layerInfo - layer information from getCapabilities response\n * @param {String} mapProjCode - map projection code (e.g. \"EPSG:4326\")\n * @param {Object} layerTileOptions - options for ol.layer.Tile (to be filled)\n * @private\n */\n _getWMSLayerExtent (layerInfo, mapProjCode, layerTileOptions) {\n if (!layerInfo) {\n logger.warn(\"[ol.control.LayerImport] _getWMSLayerExtent error : layerInfo is not defined\");\n return;\n }\n\n // récupération des 2 propriétés qui peuvent spécifier l'étendue (bbox) selon les specs OGC WMS 1.3.0 :\n // 1. layerInfo.EX_GeographicBoundingBox est un tableau de type [westBoundLongitude, southBoundLatitude, eastBoundLongitude, northBoundLatitude] en WGS84\n var exGeographicBoundingBox = layerInfo[\"EX_GeographicBoundingBox\"];\n // 2. layerInfo.BoundingBox est un tableau dont chaque élément est un objet (balise bbox) avec les propriétés suivantes :\n // crs (String) et extent (tableau de type [minx, miny, maxx, maxy])\n var boundingBox = layerInfo.BoundingBox;\n\n if (exGeographicBoundingBox && Array.isArray(exGeographicBoundingBox)) {\n if (mapProjCode === \"EPSG:4326\") {\n // si la projection de la carte est la même que celle de l'extent (EPSG:4326), on la passe telle quelle\n layerTileOptions.extent = exGeographicBoundingBox;\n } else {\n layerTileOptions.extent = olTransformExtentProj(exGeographicBoundingBox, \"EPSG:4326\", mapProjCode);\n }\n\n // si jamais EX_GeographicBoundingBox n'est pas ou est mal renseigné, on essaie de récupérer via le paramètre BoundingBox\n } else if (boundingBox && Array.isArray(boundingBox)) {\n var crs;\n var extent;\n for (var i = 0; i < boundingBox.length; i++) { // on peut avoir plusieurs BoundingBox\n crs = boundingBox[i].crs;\n extent = boundingBox[i].extent;\n if (crs) {\n if (crs === mapProjCode) {\n // si la bbox est dans la projection de la carte, on la passe telle quelle\n layerTileOptions.extent = extent;\n break;\n } else {\n if (typeof crs === \"string\") {\n var olProj = olGetProj(crs) ? olGetProj(crs) : olGetProj(crs.toUpperCase());\n // if ( olGetProj(crs) || olGetProj(crs.toUpperCase()) ) {\n if (olProj) {\n // si la bbox est dans une projection connue, on va la reprojeter\n // tout d'abord, on gère le cas des systèmes EPSG géographiques : inversion des axes x et y\n if (olProj.getUnits() === \"degrees\" && crs.toUpperCase().indexOf(\"EPSG\") === 0) {\n // le tableau extent est inversé, on a besoin de : [miny, minx, maxx, maxy]\n var reversedExtent = [extent[1], extent[0], extent[3], extent[2]];\n layerTileOptions.extent = olTransformExtentProj(reversedExtent, olProj, mapProjCode);\n } else {\n // reprojection dans la projection de la carte\n layerTileOptions.extent = olTransformExtentProj(extent, olProj, mapProjCode);\n }\n break;\n }\n }\n }\n }\n }\n }\n }\n\n /**\n * this method is called by this._addGetCapWMSLayer\n * and sets more information about layer (legends, title, description, metadata, originators) for layerSwitcher or attributions controls\n *\n * @param {Object} layerInfo - layer information from getCapabilities response\n * @param {String} legend - legend url\n * @param {Object} wmsSource - options for ol.source.TileWMS (to be filled)\n * @private\n */\n _getWMSLayerInfoForLayerSwitcher (layerInfo, legend, wmsSource) {\n // ajout des informations pour le layerSwitcher (titre, description)\n if (layerInfo.Title) {\n wmsSource._title = layerInfo.Title;\n wmsSource._description = layerInfo.Abstract ? layerInfo.Abstract : layerInfo.Title;\n } else {\n wmsSource._title = layerInfo.Name;\n wmsSource._description = layerInfo.Abstract ? layerInfo.Abstract : layerInfo.Name;\n }\n // ajout de légende si on en a trouvé\n if (legend) {\n wmsSource._legends = [{\n url : legend\n }];\n }\n // ajout d'éventuelles métadonnées\n if (layerInfo.MetadataURL && Array.isArray(layerInfo.MetadataURL)) {\n wmsSource._metadata = [];\n for (var i = 0; i < layerInfo.MetadataURL.length; i++) {\n var metadata = layerInfo.MetadataURL[i].OnlineResource;\n if (metadata) {\n wmsSource._metadata.push({\n url : metadata\n });\n }\n }\n }\n // ajout d'éventuelles attributions / originators\n if (layerInfo.Attribution) {\n var attribution = layerInfo.Attribution;\n wmsSource._originators = {};\n if (attribution.OnlineResource) {\n wmsSource._originators.url = attribution.OnlineResource;\n }\n if (attribution.Title) {\n wmsSource._originators.name = wmsSource._originators.attribution = attribution.Title;\n }\n if (attribution.LogoURL && attribution.LogoURL.OnlineResource) {\n wmsSource._originators.logo = attribution.LogoURL.OnlineResource;\n }\n }\n }\n\n // ################################################################### //\n // ######### create WMTS layer from getCapabilities response ######### //\n // ################################################################### //\n\n /**\n * this method is called by this._onGetCapResponseLayerClick\n * and add WMTS layer to map using parameters from getCapabilities response\n *\n * @param {Object} layerInfo - layer information from getCapabilities response\n * @private\n */\n _addGetCapWMTSLayer (layerInfo) {\n if (!layerInfo || !layerInfo.Identifier) {\n logger.warn(\"[ol.control.LayerImport] layer information not found in getCapabilities response for layer \");\n return;\n }\n\n var map = this.getMap();\n if (!map) {\n return;\n }\n\n var wmtsSourceOptions = {};\n wmtsSourceOptions.layer = layerInfo.Identifier;\n // service version\n if (this._getCapResponseWMTS.version) {\n wmtsSourceOptions.version = this._getCapResponseWMTS.version;\n }\n // Récupération de l'url\n var getMapUrl = this._getWMTSLayerGetTileUrl();\n // on essaie de récupérer l'url du service dans le getCapbilities\n if (getMapUrl) {\n wmtsSourceOptions.url = getMapUrl;\n } else {\n // sinon, on récupère l'url du getCapabilities, à laquelle on enlève éventuellement les paramètres\n var questionMarkIndex = this._getCapRequestUrl.indexOf(\"?\");\n if (questionMarkIndex !== -1) {\n wmtsSourceOptions.url = this._getCapRequestUrl.substring(0, questionMarkIndex);\n } else {\n wmtsSourceOptions.url = this._getCapRequestUrl;\n }\n }\n\n // Récupération des informations de la pyramide (tileGrid information) : matrixIds, resolutions, origin et projection\n var tmsOptions = this._getTMSParams(layerInfo);\n wmtsSourceOptions.matrixSet = tmsOptions.tms;\n wmtsSourceOptions.projection = tmsOptions.projCode;\n wmtsSourceOptions.tileGrid = new WMTSTileGrid({\n resolutions : tmsOptions.resolutions,\n matrixIds : tmsOptions.matrixIds,\n origin : tmsOptions.origin\n });\n\n // Récupération du style par défaut\n var defaultStyle;\n var legend;\n if (layerInfo.Style && Array.isArray(layerInfo.Style)) {\n var style;\n for (var s = 0; s < layerInfo.Style.length; s++) {\n style = layerInfo.Style[s];\n // on récupère le style\n defaultStyle = style.Identifier;\n if (style.isDefault) {\n // si c'est celui par défaut, on le garde (on ne boucle plus sur les autres styles)\n break;\n }\n // et une éventuelle légende\n if (style.LegendURL && Array.isArray(style.LegendURL) && style.LegendURL.length !== 0) {\n legend = style.LegendURL[0].href;\n }\n }\n }\n if (defaultStyle == null) {\n logger.warn(\"[ol.control.LayerImport] style information not found in getCapabilities response for layer \" + layerInfo.Identifier);\n }\n wmtsSourceOptions.style = defaultStyle;\n\n // Récupération du format (le premier trouvé)\n var format;\n if (layerInfo.Format && Array.isArray(layerInfo.Format)) {\n format = layerInfo.Format[0];\n }\n if (format == null) {\n logger.warn(\"[ol.control.LayerImport] format information not found in getCapabilities response for layer \" + layerInfo.Identifier);\n }\n wmtsSourceOptions.format = format;\n\n // Création de la source (tester un try catch ?)\n var wmtsSource = new WMTSSource(wmtsSourceOptions);\n\n // ajout des informations pour le layerSwitcher (titre, description)\n if (layerInfo.Title) {\n wmtsSource._title = layerInfo.Title;\n wmtsSource._description = layerInfo.Abstract ? layerInfo.Abstract : layerInfo.Title;\n } else {\n wmtsSource._title = layerInfo.Identifier;\n wmtsSource._description = layerInfo.Abstract ? layerInfo.Abstract : layerInfo.Identifier;\n }\n // ajout d'une éventuelle légende\n if (legend) {\n wmtsSource._legends = [{\n url : legend\n }];\n }\n\n var layerTileOptions = {};\n layerTileOptions.source = wmtsSource;\n // récupération de l'étendue (bbox)\n layerTileOptions.extent = this._getWMTSLayerExtent(layerInfo);\n var wmtsLayer;\n try {\n wmtsLayer = new TileLayer(layerTileOptions);\n wmtsLayer.setExtent(layerTileOptions.extent);\n } catch (e) {\n logger.warn(\"[ol.control.LayerImport] an error occured while trying to create ol.layer.Tile from getCapabilities information. error : \", e);\n return;\n }\n // on rajoute le champ gpResultLayerId permettant d'identifier une couche crée par le composant. (pour layerSwitcher par ex)\n wmtsLayer.gpResultLayerId = \"layerimport:WMTS\";\n\n map.addLayer(wmtsLayer);\n\n // zoom sur l'étendue des entités récupérées (si possible)\n if (map.getView() && map.getSize() && wmtsLayer.getExtent) {\n var sourceExtent = wmtsLayer.getExtent();\n if (sourceExtent && sourceExtent[0] !== Infinity) {\n map.getView().fit(sourceExtent, map.getSize());\n }\n }\n }\n\n /**\n * this method is called by this._addGetCapWMTSLayer\n * and gets service getTile request url\n *\n * @return {String} gettileurl - service getTile request url\n * @private\n */\n _getWMTSLayerGetTileUrl () {\n var gettileurl;\n if (this._getCapResponseWMTS && this._getCapResponseWMTS.OperationsMetadata && this._getCapResponseWMTS.OperationsMetadata.GetTile) {\n var gettile = this._getCapResponseWMTS.OperationsMetadata.GetTile;\n if (gettile.DCP && gettile.DCP.HTTP && gettile.DCP.HTTP.Get && Array.isArray(gettile.DCP.HTTP.Get) && gettile.DCP.HTTP.Get.length !== 0) {\n gettileurl = gettile.DCP.HTTP.Get[0].href;\n }\n }\n return gettileurl;\n }\n\n /**\n * this method is called by this._displayGetCapResponseLayers\n * and gets layer TileMatrixSet projection if defined in proj4js\n *\n * @param {Object} layerInfo - layer information from getCapabilities response\n * @param {Object} getCapResponseWMTS - whole getCapabilities response\n * @return {String} projection - ol.proj projection alias (e.g. \"EPSG:4326\")\n * @private\n */\n _getWMTSLayerProjection (layerInfo, getCapResponseWMTS) {\n var projection;\n\n if (!layerInfo || typeof layerInfo !== \"object\") {\n logger.warn(\"missing layer information (from getCapabilities)\");\n return;\n }\n\n if (!getCapResponseWMTS || typeof getCapResponseWMTS !== \"object\") {\n logger.warn(\"missing getCapabilities response\");\n return;\n }\n\n if (layerInfo.TileMatrixSetLink && Array.isArray(layerInfo.TileMatrixSetLink)) {\n var tms = layerInfo.TileMatrixSetLink[0].TileMatrixSet;\n var crs;\n if (getCapResponseWMTS.Contents && Array.isArray(getCapResponseWMTS.Contents.TileMatrixSet)) {\n var tileMatrixSets = getCapResponseWMTS.Contents.TileMatrixSet;\n for (var i = 0; i < tileMatrixSets.length; i++) {\n if (tileMatrixSets[i].Identifier === tms && tileMatrixSets[i].TileMatrix) {\n // on a trouvé le TMS correspondant\n var tileMatrixSet = tileMatrixSets[i];\n crs = tileMatrixSet.SupportedCRS;\n if (crs && typeof crs === \"string\") {\n if (olGetProj(crs) || olGetProj(crs.toUpperCase())) {\n projection = crs;\n }\n }\n break;\n }\n }\n }\n };\n\n return projection;\n }\n\n /**\n * this method is called by this._addGetCapWMTSLayer\n * and get ol.tileGrid.WMTS parameters using getCapabilities response\n *\n * @param {Object} layerInfo - layer information from getCapabilities response\n * @return {Object} tmsOptions - ol.tileGrid.WMTS options\n * @private\n */\n _getTMSParams (layerInfo) {\n var tmsOptions = {};\n\n var matrixIds = [];\n var resolutions = [];\n var origin = [];\n var tms;\n var projCode;\n var projection;\n\n // TODO : recup TOUS les autres params d'un tileGrid ! (tileSize, width...)\n\n var map = this.getMap();\n if (!map) {\n return;\n }\n\n // Récupération des informations de la pyramide (tileGrid information) : matrixIds, resolutions, origin\n if (layerInfo.TileMatrixSetLink && Array.isArray(layerInfo.TileMatrixSetLink)) {\n tms = layerInfo.TileMatrixSetLink[0].TileMatrixSet;\n\n if (this._getCapResponseWMTS.Contents && Array.isArray(this._getCapResponseWMTS.Contents.TileMatrixSet)) {\n var tileMatrixSets = this._getCapResponseWMTS.Contents.TileMatrixSet;\n for (var i = 0; i < tileMatrixSets.length; i++) {\n if (tileMatrixSets[i].Identifier === tms && tileMatrixSets[i].TileMatrix) {\n // on a trouvé le TMS correspondant\n var tileMatrixSet = tileMatrixSets[i];\n\n var tilematrix;\n var id;\n var scaledenominator;\n var resolution;\n var units;\n\n if (tileMatrixSet.SupportedCRS) {\n projCode = tileMatrixSet.SupportedCRS;\n projection = olGetProj(projCode);\n }\n if (projection && projection.getUnits) {\n units = projection.getUnits();\n }\n\n if (Array.isArray(tileMatrixSet.TileMatrix)) {\n for (var j = 0; j < tileMatrixSet.TileMatrix.length; j++) {\n // construction du tableau des matrixIds\n tilematrix = tileMatrixSet.TileMatrix[j];\n if (tilematrix.Identifier != null) {\n id = parseInt(tilematrix.Identifier, 10);\n matrixIds.push(id);\n }\n\n // construction du tableau des résolutions, calculées à partir des dénominateurs d'échelle (scaledenominator)\n scaledenominator = tilematrix.ScaleDenominator;\n // calcul des résolutions selon la projection du TMS : selon si on a des coordonnées planes ou géographiques\n if (units === \"degrees\") {\n // info : 6378137 * 2 * pi / 360 = rayon de la terre (ellipsoide WGS84)\n resolution = scaledenominator * 0.00028 * 180 / (Math.PI * 6378137);\n } else {\n // info : 1 pixel = 0.00028 m\n resolution = scaledenominator * 0.00028;\n }\n resolutions.push(resolution);\n\n origin = tilematrix.TopLeftCorner;\n }\n }\n\n // tri des résolutions par ordre décroissant\n if (resolutions.sort !== undefined) {\n resolutions.sort(\n function (x, y) {\n return y - x;\n }\n );\n }\n // tri des identifiants des niveaux de pyramide (matrixIds) par ordre croissant\n if (matrixIds.sort !== undefined) {\n matrixIds.sort(\n function (x, y) {\n return x - y;\n }\n );\n }\n }\n }\n } else {\n logger.warn(\"[ol.control.LayerImport] TileMatrixSet data not found in getCapabilities response for layer \" + layerInfo.Identifier);\n }\n } else {\n return;\n }\n\n tmsOptions.tms = tms;\n tmsOptions.projCode = projCode;\n tmsOptions.matrixIds = matrixIds;\n tmsOptions.resolutions = resolutions;\n tmsOptions.origin = origin;\n\n return tmsOptions;\n }\n\n /**\n * this method is called by this._addGetCapWMTSLayer\n * and sets extent for WMTS layer in map projection (if available in getCapabilities response)\n *\n * @param {Object} layerInfo - layer information from getCapabilities response\n * @return {Array} extent - layer extent\n * @private\n */\n _getWMTSLayerExtent (layerInfo) {\n var extent;\n var mapProjCode = this._getMapProjectionCode();\n\n // récupération de l'étendue (bbox)\n if (layerInfo.WGS84BoundingBox && Array.isArray(layerInfo.WGS84BoundingBox)) {\n extent = olTransformExtentProj(layerInfo.WGS84BoundingBox, \"EPSG:4326\", mapProjCode);\n }\n\n return extent;\n }\n\n // ################################################################### //\n // ################################ utils ############################ //\n // ################################################################### //\n\n /**\n * gets control map projection code\n *\n * @return {String} mapProjCode - control map projection code (e.g. \"EPSG:3857\")\n * @private\n */\n _getMapProjectionCode () {\n var map = this.getMap();\n if (!map || !map.getView || !map.getView().getProjection) {\n logger.warn(\"unable to get layerimport's map\");\n return;\n }\n var mapProjCode = map.getView().getProjection().getCode();\n return mapProjCode;\n }\n\n // ################################################################### //\n // ################################ clean ############################ //\n // ################################################################### //\n\n /**\n * this method displays waiting container and sets a timeout\n *\n * @private\n */\n _displayWaitingContainer () {\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerVisible gpf-waiting gpf-waiting--visible\";\n this._waiting = true;\n\n // mise en place d'un timeout pour réinitialiser le panel (cacher la patience)\n // si on est toujours en attente (si la requête est bloquée par exemple)\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n var context = this;\n this._timer = setTimeout(function () {\n if (context._waiting === true) {\n context._hideWaitingContainer();\n } else {\n if (context._timer) {\n clearTimeout(context._timer);\n }\n }\n }, 16000);\n }\n\n /**\n * this method hides waiting container and clears timeout\n *\n * @private\n */\n _hideWaitingContainer () {\n if (this._waiting) {\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n this._waiting = false;\n clearTimeout(this._timer);\n this._timer = null;\n }\n }\n\n _displayFormContainer () {\n this._formContainer.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n this._formContainer.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n this._importPanelTitle.innerHTML = \"Import de données\";\n // this._importPanelHeader.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n // this._importPanelHeader.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n }\n _hideFormContainer () {\n this._formContainer.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n this._formContainer.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n // this._importPanelHeader.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n // this._importPanelHeader.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n /**\n * this method empties getCap results list (DOM element)\n *\n * @private\n */\n cleanGetCapResultsList () {\n this._hasGetCapResults = false;\n this._getCapRequestUrl = null;\n this._getCapResponseWMS = null;\n this._getCapResponseWMTS = null;\n this._getCapResponseWMSLayers = null;\n this._getCapResponseWMTSLayers = null;\n if (this._getCapResultsListContainer) {\n while (this._getCapResultsListContainer.firstChild) {\n this._getCapResultsListContainer.removeChild(this._getCapResultsListContainer.firstChild);\n }\n }\n }\n\n /**\n * this method empties MapBox results list (DOM element)\n *\n * @private\n */\n cleanMapBoxResultsList () {\n this._hasMapBoxResults = false;\n if (this._mapBoxResultsListContainer) {\n while (this._mapBoxResultsListContainer.firstChild) {\n this._mapBoxResultsListContainer.removeChild(this._mapBoxResultsListContainer.firstChild);\n }\n }\n }\n\n /**\n * this method empties MapBox results list (DOM element)\n *\n * @param {*} id - DOM id\n * @private\n */\n cleanMapBoxResults (id) {\n this._hasMapBoxResults = false;\n if (this._mapBoxResultsListContainer) {\n var nodes = this._mapBoxResultsListContainer.childNodes;\n for (let index = 0; index < nodes.length; index++) {\n const element = nodes[index];\n if (element.id === \"GPEditorMapBoxContainer_ID_\" + id) {\n element.remove();\n }\n }\n }\n }\n\n};\n\n// on récupère les méthodes de la classe commune LayerImport\nObject.assign(LayerImport.prototype, LayerImportDOM);\nObject.assign(LayerImport.prototype, Widget);\n\nexport default LayerImport;\n\n// Expose LayerImport as ol.control.LayerImport (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.LayerImport = LayerImport;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.control.Attribution;","// import CSS\nimport \"../../CSS/Controls/Attribution/GPFattribution.css\";\n// import \"../../CSS/Controls/Attribution/GPFattributionStyle.css\";\n// import OpenLayers\nimport Attribution from \"ol/control/Attribution\";\nimport { transformExtent as olTransformExtentProj } from \"ol/proj\";\n// import local\nimport LayerUtils from \"../../Utils/LayerUtils\";\nimport Logger from \"../../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"geoportalattribution\");\n\n/**\n * @classdesc\n * OpenLayers Control to manage Originators for layer resources\n *\n * @constructor\n * @extends {ol.control.Attribution}\n * @alias ol.control.GeoportalAttribution\n * @type {ol.control.GeoportalAttribution}\n * @param {Object} options - ol.control.Attribution options (see {@link http://openlayers.org/en/latest/apidoc/ol.control.Attribution.html ol.Control.Attribution})\n * @fires attributions:update\n * @example\n * var attribution = new ol.control.GeoportalAttribution({\n * collapsed : false\n * });\n * map.addControl(attribution);\n * // listeners for attributions update :\n * attribution.on(\"attributions:update\", function (e) {});\n */\nvar GeoportalAttribution = class GeoportalAttribution extends Attribution {\n\n /**\n * See {@link ol.control.GeoportalAttribution}\n * @module GeoportalAttribution\n * @alias module:~controls/GeoportalAttribution\n * @param {*} options - options\n * @example\n * import GeoportalAttribution from \"gpf-ext-ol/controls/GeoportalAttribution\"\n * ou \n * import { GeoportalAttribution } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // Attributions are not collapsible for ol/source/OSM except if ...\n options.collapsible = true;\n options.collapsed = true;\n\n super(options);\n\n if (!(this instanceof GeoportalAttribution)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n\n return this;\n }\n\n /**\n * Overload setMap function, that enables to catch map events,\n * such as movend events.\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map != null) {\n // Remove default ol.control.Attribution\n var ctrls = map.getControls();\n ctrls.forEach(\n (ctrl) => {\n if (ctrl instanceof GeoportalAttribution) {\n return;\n }\n if (ctrl) {\n var classList = ctrl.element.classList;\n for (var i = 0; i < classList.length; i++) {\n if (classList[i] === \"ol-attribution\") {\n ctrls.remove(ctrl);\n break;\n }\n }\n }\n }\n );\n\n // on récupère les attributions des couches déjà ajoutées à la carte.\n this._updateAttributions(map);\n\n // At every map movement, layers attributions have to be updated,\n // according to map and originators zoom and extent.\n map.on(\n \"moveend\",\n () => {\n this._updateAttributions(map);\n }\n );\n map.getLayers().on(\n \"add\",\n () => {\n this._updateAttributions(map);\n }\n );\n map.getLayers().on(\n \"remove\",\n () => {\n this._updateAttributions(map);\n }\n );\n }\n\n super.setMap(map);\n }\n\n /**\n * Update map layers attributions\n *\n * @param {ol.Map} map - Map.\n * @private\n */\n _updateAttributions (map) {\n // get map parameters\n var mapAttributions = {};\n\n var view = map.getView();\n // extent, then convert to geographical coordinates\n var extent = view.calculateExtent(map.getSize());\n var mapProjection = view.getProjection().getCode();\n var geoExtent = olTransformExtentProj(extent, mapProjection, \"EPSG:4326\");\n // transform extent from [minx, miny, maxx, maxy] to [maxy, minx, miny, maxx]\n var standardExtent = [geoExtent[3], geoExtent[0], geoExtent[1], geoExtent[2]];\n // zoom\n var zoom = view.getZoom();\n // layers\n var layers = map.getLayers().getArray();\n\n // info : This option suppresses warnings about functions inside of loops.\n /* jshint loopfunc: true */\n\n // loop on layers to get their originators, if there is at least one originator, and if layer is visible.\n for (var i = 0; i < layers.length; i++) {\n // distinguish case of ol.layer.Group (which is made up of layers with their own source)\n // and other ol.layer (with their own source)\n if (layers[i].getSource) {\n // single ol.layer\n this._updateLayerAttributions(layers[i], mapAttributions, standardExtent, mapProjection, zoom);\n } else if (layers[i].getLayers) {\n // ol.layer.Group\n var lyrs = layers[i].getLayers();\n lyrs.forEach(\n (lyr) => {\n if (lyr.getSource) {\n this._updateLayerAttributions(lyr, mapAttributions, standardExtent, mapProjection, zoom);\n } else {\n logger.log(\"cannot find layer source in layergroup \", layers[i]);\n }\n }\n );\n }\n }\n }\n\n /**\n * Update a layer attributions\n *\n * @param {ol.layer} layer - layer\n * @param {Object} mapAttributions - object recensing attributions already added, to prevent displaying twice the same producer\n * @param {Array} mapExtent - map current extent\n * @param {String} mapCrs - map current crs\n * @param {Number} mapZoom - map current zoom\n * @private\n */\n _updateLayerAttributions (layer, mapAttributions, mapExtent, mapCrs, mapZoom) {\n if (!layer) {\n logger.trace(\"layer is null !?\");\n return;\n }\n\n var src = layer.getSource();\n if (!src) {\n logger.trace(\"source is not yet loaded !\");\n return;\n }\n\n if (!mapAttributions) {\n mapAttributions = {};\n }\n\n var attributions = [];\n\n var visibility = layer.getVisible();\n var originators = src._originators;\n\n // info : clean previous attributions ONLY for Geoportal Layers (when src._originators is defined)\n if (typeof originators !== \"undefined\") {\n src.setAttributions(); // clean\n }\n\n if (originators && visibility) {\n // get layer's attributions array\n var layerAttributions = LayerUtils.getAttributions({\n extent : mapExtent,\n crs : mapCrs,\n zoom : mapZoom,\n visibility : visibility,\n originators : originators\n });\n\n for (var j = 0; j < layerAttributions.length; j++) {\n var attributionj = layerAttributions[j];\n // check that this attribution hasn't been added yet for another layer\n if (!mapAttributions.hasOwnProperty(attributionj)) {\n // add attribution html\n attributions.push(attributionj);\n\n // add attribution to mapAttributions, to manage all layers attributions\n mapAttributions[attributionj] = true;\n }\n };\n\n // update source attribution\n if (attributions.length !== 0) {\n src.setAttributions(attributions);\n /**\n * event triggered when the attributions are updated\n *\n * @event attributions:update\n * @type Object\n * @property {Array} attributions - list of attributions\n */\n this.dispatchEvent({\n type : \"attributions:update\",\n attributions : attributions\n });\n }\n }\n }\n\n};\n\nexport default GeoportalAttribution;\n\n// Expose GeoportalAttribution as ol.control.GeoportalAttribution (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.GeoportalAttribution = GeoportalAttribution;\n}\n","var MeasureLengthDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPmeasureLength\");\n container.className = \"GPwidget gpf-widget gpf-widget-button\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show control\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createShowMeasureLengthPictoElement : function () {\n // contexte d'execution\n var context = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowMeasureLengthPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-length fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Mesurer une distance\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // gestionnaire d'evenement :\n // on ouvre le menu de saisie...\n // L'ouverture/Fermeture permet de faire le menage\n // (reinitialisation)\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowMeasureLengthClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowMeasureLengthClick(e);\n });\n }\n\n return button;\n }\n};\n\nexport default MeasureLengthDOM;\n","// import CSS\nimport \"../../CSS/Controls/Measures/GPFmeasureLength.css\";\n// import \"../../CSS/Controls/Measures/GPFmeasureLengthStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport { getDistance as olGetDistanceSphere } from \"ol/sphere\";\nimport { transform as olTransformProj } from \"ol/proj\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport ID from \"../../Utils/SelectorID\";\n// DOM\nimport MeasureLengthDOM from \"./MeasureLengthDOM\";\n// import local with ol dependencies\nimport MeasureToolBox from \"../ToolBoxMeasure/MeasureToolBox\";\nimport Measures from \"./Measures\";\n\n// Derived from OpenLayers measure example\n// http://openlayers.org/en/latest/examples/measure.html\n\nvar logger = Logger.getLogger(\"measurelength\");\n\n/**\n * @classdesc\n *\n * Length measurement Control. Allows users to draw a path on Openlayers map and have its length computed and displayed.\n *\n * @constructor\n * @alias ol.control.MeasureLength\n * @type {ol.control.MeasureLength}\n * @extends {ol.control.Control}\n * @param {Object} options - options for function call.\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {Boolean} [options.geodesic = true] - If true, length will be computed on the global sphere using the {@link https://openlayers.org/en/latest/apidoc/module-ol_sphere.html#haversineDistance ol.Sphere.haversineDistance()} function. Otherwise, length will be computed on the projected plane.\n * @param {String} [options.unit] - If not specified, the measure will be displayed in m until 999m, then in km. Values possible : m or km.\n * @param {Object} [options.styles = {}] - styles used when drawing. Specified with following properties.\n * @param {Object} [options.styles.pointer = {}] - Style for mouse pointer when drawing the path. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Image-ImageStyle.html ol.style.Image} subclass object.\n * @param {Object} [options.styles.start = {}] - Line Style when drawing. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Style-Style.htmll ol.style.Style} object.\n * @param {Object} [options.styles.finish = {}] - Line Style when finished drawing. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Style-Style.htmll ol.style.Style} object.\n * \n * @param {Object} [options.layerDescription = {}] - Layer informations to be displayed in LayerSwitcher widget (only if a LayerSwitcher is also added to the map)\n * @param {String} [options.layerDescription.title = \"Mesures de distance\"] - Layer title to be displayed in LayerSwitcher\n * @param {String} [options.layerDescription.description = \"Mes mesures\"] - Layer description to be displayed in LayerSwitcher\n * @example\n * var measureLength = new ol.control.MeasureLength({\n * geodesic : false\n * });\n */\nvar MeasureLength = class MeasureLength extends Control {\n\n constructor (options) {\n // options\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof MeasureLength)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n // Nom de la classe (heritage)\n this.CLASSNAME = \"MeasureLength\";\n\n // uuid\n this._uid = options.id || ID.generate();\n\n // container d'activation du controle\n this._pictoContainer = null;\n\n // initialisation du composant\n this._initialize(options);\n\n // creation du DOM container\n this._container = this._initializeContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n logger.trace(\"setMap()\");\n\n var className = this.CLASSNAME;\n\n // on fait le choix de ne pas activer les events sur la map à l'init de l'outil,\n // mais uniquement à son utilisation !\n if (map) {\n // var self = this;\n // map.on(\"click\", function (e) {\n // logger.trace(\"event on map with click!\");\n // self.onPointerMoveHandler(e);\n // });\n //\n // map.on(\"singleclick\", function (e) {\n // logger.trace(\"event on map with singleclick!\");\n // self.onPointerMoveHandler(e);\n // });\n //\n // map.on(\"pointermove\", function (e) {\n // logger.trace(\"event on map with pointermove!\");\n // self.onPointerMoveHandler(e);\n // });\n\n if (!this.options.target && !this.options.position) {\n MeasureToolBox.add(map, this);\n }\n } else {\n this.clean();\n }\n\n // sauvegarde de l'état de l'outil\n this.tools[className].push({\n instance : (map) ? this : null,\n active : false,\n map : (map) ? map.getTargetElement() : null\n });\n\n // contexte d'execution\n var context = typeof window !== \"undefined\" ? window : typeof self !== \"undefined\" ? self : null;\n if (context) {\n // Pour info\n // les objets de mesures ont du code partagé\n // (afin de gerer les interactions entre eux).\n // Dans un mode \"modules\", on partage cet objet (this.tools) via le contexte\n // d'execution (ex. avec window)\n if (!context.gpShareMeasures) {\n context.gpShareMeasures = {};\n }\n context.gpShareMeasures[className] = this.tools[className];\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this._container;\n }\n\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize measure control (called by constructor)\n *\n * @param {Object} options - options\n *\n * @private\n */\n _initialize (options) {\n logger.trace(\"call MeasureLength::_initialize() : \", options);\n\n // liste des options\n this.options = {};\n this.options.geodesic = (typeof options.geodesic !== \"undefined\") ? options.geodesic : true;\n this.options.unit = (typeof options.unit !== \"undefined\") ? options.unit : null;\n this.options.position = (typeof options.position !== \"undefined\") ? options.position : null;\n this.options.target = (typeof options.target !== \"undefined\") ? options.target : null;\n this.options.render = (typeof options.render !== \"undefined\") ? options.render : null;\n this.options.gutter = (typeof options.gutter !== \"undefined\") ? options.gutter : null;\n this.options.layerDescription = (typeof options.layerDescription !== \"undefined\") ? options.layerDescription : {\n title : \"Mesures de distance\",\n description : \"Mes mesures\"\n };\n\n // gestion des styles !\n this.createStylingMeasureInteraction(options.styles);\n }\n\n /**\n * initialize component container (DOM)\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initializeContainer () {\n logger.trace(\"call MeasureLength::_initializeContainer() : \", this._uid);\n\n var container = this._createMainContainerElement();\n\n var picto = this._pictoContainer = this._createShowMeasureLengthPictoElement();\n container.appendChild(picto);\n\n return container;\n }\n\n // ################################################################### //\n // ########################## methods ################################ //\n // ################################################################### //\n\n /**\n * Add all events on map\n *\n * @private\n */\n addMeasureEvents () {\n logger.trace(\"call MeasureLength::addMeasureEvents()\");\n\n var map = this.getMap();\n\n map.on(\"singleclick\", (e) => this.onPointerMoveHandler(e));\n map.on(\"pointermove\", (e) => this.onPointerMoveHandler(e));\n this.eventLayerRemove = map.getLayers().on(\"remove\", (e) => {\n if (e.element === this.measureVector) { // FIXME object comparison\n this.clean();\n }\n });\n }\n\n /**\n * Remove all events on map\n *\n * @private\n */\n removeMeasureEvents () {\n logger.trace(\"call MeasureLength::removeMeasureEvents()\");\n\n var map = this.getMap();\n\n map.un(\"singleclick\", (e) => this.onPointerMoveHandle(e));\n map.un(\"pointermove\", (e) => this.onPointerMoveHandler(e));\n if (this.eventLayerRemove) {\n olObservableUnByKey(this.eventLayerRemove);\n }\n }\n\n /**\n * Format length output.\n *\n * @param {ol.geom.Line} line - geometry line.\n * @return {String} The formatted output.\n * @private\n */\n format (line) {\n logger.trace(\"call MeasureLength::format()\");\n\n var map = this.getMap();\n\n var measure;\n if (this.options.geodesic) {\n var coordinates = line.getCoordinates();\n measure = 0;\n var sourceProj = map.getView().getProjection();\n for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n var c1 = olTransformProj(coordinates[i], sourceProj, \"EPSG:4326\");\n var c2 = olTransformProj(coordinates[i + 1], sourceProj, \"EPSG:4326\");\n measure += olGetDistanceSphere(c1, c2);\n }\n } else {\n measure = Math.round(line.getLength() * 100) / 100;\n }\n\n var output;\n // si option unit spécifiée, on force l'unité\n // sinon on est en mode automatique entre m et km.\n if (this.options.unit === \"km\") {\n output = (Math.round(measure / 1000 * 100) / 100) + \" \" + \"km\";\n } else if (this.options.unit === \"m\") {\n output = (Math.round(measure * 100) / 100) + \" \" + \"m\";\n } else {\n if (measure > 1000) {\n output = (Math.round(measure / 1000 * 100) / 100) + \" \" + \"km\";\n } else {\n output = (Math.round(measure * 100) / 100) + \" \" + \"m\";\n }\n }\n return output;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on picto\n *\n * @param {Object} e - HTMLElement\n *\n * @private\n */\n onShowMeasureLengthClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n logger.trace(\"call MeasureLength::onShowMeasureLengthClick()\", e);\n\n // appel de la methode commune\n this.onShowMeasureClick(e, \"LineString\");\n }\n\n};\n\n// on récupère les mixins de la classe \"MeasureAreaDOM\" ainsi que celles\n// de \"Measures\".\nObject.assign(MeasureLength.prototype, Measures);\nObject.assign(MeasureLength.prototype, MeasureLengthDOM);\nObject.assign(MeasureLength.prototype, Widget);\n\nexport default MeasureLength;\n\n// Expose MeasureLength as ol.control.MeasureLength (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.MeasureLength = MeasureLength;\n}\n","var MeasureAreaDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPmeasureArea\");\n container.className = \"GPwidget gpf-widget gpf-widget-button\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show control\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createShowMeasureAreaPictoElement : function () {\n // contexte d'execution\n var context = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowMeasureAreaPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-area fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Mesurer une surface\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // gestionnaire d'evenement :\n // on ouvre le menu de saisie...\n // L'ouverture/Fermeture permet de faire le menage\n // (reinitialisation)\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowMeasureAreaClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowMeasureAreaClick(e);\n });\n }\n\n return button;\n }\n};\n\nexport default MeasureAreaDOM;\n","// import CSS\nimport \"../../CSS/Controls/Measures/GPFmeasureArea.css\";\n// import \"../../CSS/Controls/Measures/GPFmeasureAreaStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport { getArea as olGetAreaSphere } from \"ol/sphere\";\nimport { Polygon } from \"ol/geom\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport ID from \"../../Utils/SelectorID\";\n// DOM\nimport MeasureAreaDOM from \"./MeasureAreaDOM\";\n// import local with ol dependencies\nimport Measures from \"./Measures\";\nimport MeasureToolBox from \"../ToolBoxMeasure/MeasureToolBox\";\n\n// Derived from OpenLayers measure example\n// http://openlayers.org/en/latest/examples/measure.html\n\nvar logger = Logger.getLogger(\"measurearea\");\n\n/**\n * @classdesc\n *\n * Tool Measure Area Control. Allows users to measure the length of a path drawn on the map.\n *\n * @constructor\n * @alias ol.control.MeasureArea\n * @type {ol.control.MeasureArea}\n * @extends {ol.control.Control}\n * @param {Object} options - options for function call.\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {Boolean} [options.geodesic = true] - If true, area will be computed on the global sphere using the {@link https://openlayers.org/en/latest/apidoc/module-ol_sphere.html#geodesicArea ol.Sphere.geodesicArea()} function. Otherwise, area will be computed on the projected plane.\n * @param {Object} [options.styles = {}] - styles used when drawing. Specified with following properties.\n * @param {Object} [options.styles.pointer = {}] - Style for mouse pointer when drawing the polygon to measure. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Image-ImageStyle.html ol.style.Image} subclass object.\n * @param {Object} [options.styles.start = {}] - Polygon Style when drawing. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Style-Style.htmll ol.style.Style} object.\n * @param {Object} [options.styles.finish = {}] - Polygon Style when finished drawing. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Style-Style.htmll ol.style.Style} object.\n * \n * @param {Object} [options.layerDescription = {}] - Layer informations to be displayed in LayerSwitcher widget (only if a LayerSwitcher is also added to the map)\n * @param {String} [options.layerDescription.title = \"Mesures de surface\"] - Layer title to be displayed in LayerSwitcher\n * @param {String} [options.layerDescription.description = \"Mes mesures\"] - Layer description to be displayed in LayerSwitcher\n * @example\n * var measureArea = new ol.control.MeasureArea({\n * geodesic : false\n * });\n */\nvar MeasureArea = class MeasureArea extends Control {\n\n constructor (options) {\n /**\n * options\n * @private\n */\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof MeasureArea)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"MeasureArea\";\n\n // uuid\n this._uid = options.id || ID.generate();\n\n // container d'activation du controle\n this._pictoContainer = null;\n\n // initialisation du composant\n this._initialize(options);\n\n // creation du DOM container\n this._container = this._initializeContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n logger.trace(\"setMap()\");\n\n var className = this.CLASSNAME;\n\n // on fait le choix de ne pas activer les events sur la map à l'init de l'outil,\n // mais uniquement à son utilisation !\n if (map) {\n // var self = this;\n // map.on(\"click\", function (e) {\n // logger.trace(\"event on map with click!\");\n // self.onPointerMoveHandler(e);\n // });\n //\n // map.on(\"singleclick\", function (e) {\n // logger.trace(\"event on map with singleclick!\");\n // self.onPointerMoveHandler(e);\n // });\n //\n // map.on(\"pointermove\", function (e) {\n // logger.trace(\"event on map with pointermove!\");\n // self.onPointerMoveHandler(e);\n // });\n\n if (!this.options.target && !this.options.position) {\n MeasureToolBox.add(map, this);\n }\n } else {\n this.clean();\n }\n\n // sauvegarde de l'état de l'outil\n this.tools[className].push({\n instance : (map) ? this : null,\n active : false,\n map : (map) ? map.getTargetElement() : null\n });\n\n // contexte d'execution\n var context = typeof window !== \"undefined\" ? window : typeof self !== \"undefined\" ? self : null;\n if (context) {\n // Pour info\n // les objets de mesures ont du code partagé\n // (afin de gerer les interactions entre eux).\n // Dans un mode \"modules\", on partage cet objet (this.tools) via le contexte\n // d'execution (ex. avec window)\n if (!context.gpShareMeasures) {\n context.gpShareMeasures = {};\n }\n context.gpShareMeasures[className] = this.tools[className];\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this._container;\n }\n\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize measure control (called by constructor)\n *\n * @param {Object} options - options\n *\n * @private\n */\n _initialize (options) {\n logger.trace(\"call MeasureArea::_initialize() : \", options);\n\n // liste des options\n this.options = {};\n this.options.geodesic = (typeof options.geodesic !== \"undefined\") ? options.geodesic : true;\n this.options.position = (typeof options.position !== \"undefined\") ? options.position : null;\n this.options.target = (typeof options.target !== \"undefined\") ? options.target : null;\n this.options.render = (typeof options.render !== \"undefined\") ? options.render : null;\n this.options.gutter = (typeof options.gutter !== \"undefined\") ? options.gutter : null;\n this.options.layerDescription = (typeof options.layerDescription !== \"undefined\") ? options.layerDescription : {\n title : \"Mesures de surface\",\n description : \"Mes mesures\"\n };\n\n // gestion des styles !\n this.createStylingMeasureInteraction(options.styles);\n }\n\n /**\n * initialize component container (DOM)\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initializeContainer () {\n logger.trace(\"call MeasureArea::_initializeContainer() : \", this._uid);\n\n var container = this._createMainContainerElement(); ;\n\n var picto = this._pictoContainer = this._createShowMeasureAreaPictoElement();\n container.appendChild(picto);\n\n return container;\n }\n\n // ################################################################### //\n // ##################### overridden methods ########################## //\n // ################################################################### //\n\n /**\n * Add all events on map\n *\n * @private\n */\n addMeasureEvents () {\n logger.trace(\"call MeasureArea::addMeasureEvents()\");\n\n var map = this.getMap();\n\n map.on(\"singleclick\", (e) => this.onPointerMoveHandler(e));\n map.on(\"pointermove\", (e) => this.onPointerMoveHandler(e));\n this.eventLayerRemove = map.getLayers().on(\"remove\", (e) => {\n if (e.element === this.measureVector) { // FIXME object comparison\n this.clean();\n }\n });\n }\n\n /**\n * Remove all events on map\n *\n * @private\n */\n removeMeasureEvents () {\n logger.trace(\"call MeasureArea::removeMeasureEvents()\");\n\n var map = this.getMap();\n\n map.un(\"singleclick\", (e) => this.onPointerMoveHandler(e));\n map.un(\"pointermove\", (e) => this.onPointerMoveHandler(e));\n if (this.eventLayerRemove) {\n olObservableUnByKey(this.eventLayerRemove);\n }\n }\n\n /**\n * Format length output.\n *\n * @param {ol.geom.Polygon} polygon - geometry polygon.\n * @return {String} The formatted output.\n * @private\n */\n format (polygon) {\n logger.trace(\"call MeasureArea::format()\");\n\n var measure;\n if (this.options.geodesic) {\n var geom = polygon.clone();\n var coordinates = geom.getLinearRing(0).getCoordinates();\n measure = Math.abs(olGetAreaSphere(new Polygon([coordinates])));\n } else {\n measure = polygon.getArea();\n }\n\n var output;\n if (measure > 1000000) {\n output = (Math.round(measure / 1000000 * 100) / 100) + \" \" + \"km2\";\n } else if (measure > 100000) {\n output = (Math.round(measure / 1000000 * 1000) / 1000) + \" \" + \"km2\";\n } else if (measure > 1000) {\n output = (Math.round(measure / 10) * 10) + \" \" + \"m2\";\n } else {\n output = (Math.round(measure * 100) / 100) + \" \" + \"m2\";\n }\n return output;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on picto\n *\n * @param {Object} e - HTMLElement\n *\n * @private\n */\n onShowMeasureAreaClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n logger.trace(\"call MeasureArea::onShowMeasureAreaClick()\", e);\n\n // appel de la methode commune\n this.onShowMeasureClick(e, \"Polygon\");\n }\n\n};\n\n// on récupère les mixins de la classe \"MeasureAreaDOM\" ainsi que celles\n// de \"Measures\".\nObject.assign(MeasureArea.prototype, Measures);\nObject.assign(MeasureArea.prototype, MeasureAreaDOM);\nObject.assign(MeasureArea.prototype, Widget);\n\nexport default MeasureArea;\n\n// Expose MeasureArea as ol.control.MeasureArea (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.MeasureArea = MeasureArea;\n}\n","var MeasureAzimuthDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPmeasureAzimuth\");\n container.className = \"GPwidget gpf-widget gpf-widget-button\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show control\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createShowMeasureAzimuthPictoElement : function () {\n // contexte d'execution\n var context = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowMeasureAzimuthPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-azimuth fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Mesurer un azimut\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n\n // gestionnaire d'evenement :\n // on ouvre le menu de saisie...\n // L'ouverture/Fermeture permet de faire le menage\n // (reinitialisation)\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowMeasureAzimuthClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowMeasureAzimuthClick(e);\n });\n }\n\n return button;\n }\n};\n\nexport default MeasureAzimuthDOM;\n","// import CSS\nimport \"../../CSS/Controls/Measures/GPFmeasureAzimuth.css\";\n// import \"../../CSS/Controls/Measures/GPFmeasureAzimuthStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport { getDistance as olGetDistanceSphere } from \"ol/sphere\";\nimport { transform as olTransformProj } from \"ol/proj\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport ID from \"../../Utils/SelectorID\";\n// DOM\nimport MeasureAzimuthDOM from \"./MeasureAzimuthDOM\";\n// import local with ol dependencies\nimport MeasureToolBox from \"../ToolBoxMeasure/MeasureToolBox\";\nimport Measures from \"./Measures\";\n\n// Derived from OpenLayers measure example\n// http://openlayers.org/en/latest/examples/measure.html\n\nvar logger = Logger.getLogger(\"measureazimut\");\n\n/**\n * @classdesc\n *\n * Azimuth measurement Control. Allows users to draw a line on an Openlayers map and have its angle in decimal degrees clockwise from the geographical north.\n *\n * @constructor\n * @alias ol.control.MeasureAzimuth\n * @type {ol.control.MeasureAzimuth}\n * @extends {ol.control.Control}\n * @param {Object} options - options for function call.\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {Boolean} [options.geodesic = false] - If true, azimuth will be computed on the global sphere. Otherwise, it will be computed on the projected plane.\n * @param {Object} [options.styles = {}] - styles used when drawing. Specified with following properties.\n * @param {Object} [options.styles.pointer = {}] - Style for mouse pointer when drawing the line. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Image-ImageStyle.html ol.style.Image} subclass object.\n * @param {Object} [options.styles.start = {}] - Line Style when drawing. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Style-Style.htmll ol.style.Style} object.\n * @param {Object} [options.styles.finish = {}] - Line Style when finished drawing. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Style-Style.htmll ol.style.Style} object.\n * \n * @param {Object} [options.layerDescription = {}] - Layer informations to be displayed in LayerSwitcher widget (only if a LayerSwitcher is also added to the map)\n * @param {String} [options.layerDescription.title = \"Mesures d'azimuth\"] - Layer title to be displayed in LayerSwitcher\n * @param {String} [options.layerDescription.description = \"Mes mesures\"] - Layer description to be displayed in LayerSwitcher\n * @example\n * var measure = new ol.control.MeasureAzimuth({\n * geodesic : true\n * });\n */\nvar MeasureAzimuth = class MeasureAzimuth extends Control {\n\n constructor (options) {\n /**\n * options\n * @private\n */\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof MeasureAzimuth)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"MeasureAzimuth\";\n\n // uuid\n this._uid = options.id || ID.generate();\n\n // container d'activation du controle\n this._pictoContainer = null;\n\n // initialisation du composant\n this._initialize(options);\n\n // creation du DOM container\n this._container = this._initializeContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n logger.trace(\"setMap()\");\n\n var className = this.CLASSNAME;\n\n // on fait le choix de ne pas activer les events sur la map à l'init de l'outil,\n // mais uniquement à son utilisation !\n if (map) {\n // var self = this;\n // map.on(\"click\", function (e) {\n // logger.trace(\"event on map with click!\");\n // self.onPointerMoveAzimutHandler(e);\n // });\n //\n // map.on(\"singleclick\", function (e) {\n // logger.trace(\"event on map with singleclick!\");\n // self.onPointerMoveAzimutHandler(e);\n // });\n //\n // map.on(\"pointermove\", function (e) {\n // logger.trace(\"event on map with pointermove!\");\n // self.onPointerMoveAzimutHandler(e);\n // });\n\n if (!this.options.target && !this.options.position) {\n MeasureToolBox.add(map, this);\n }\n } else {\n this.clean();\n }\n\n // sauvegarde de l'état de l'outil\n this.tools[className].push({\n instance : (map) ? this : null,\n active : false,\n map : (map) ? map.getTargetElement() : null\n });\n\n // contexte d'execution\n var context = typeof window !== \"undefined\" ? window : typeof self !== \"undefined\" ? self : null;\n if (context) {\n // Pour info\n // les objets de mesures ont du code partagé\n // (afin de gerer les interactions entre eux).\n // Dans un mode \"modules\", on partage cet objet (this.tools) via le contexte\n // d'execution (ex. avec window)\n if (!context.gpShareMeasures) {\n context.gpShareMeasures = {};\n }\n context.gpShareMeasures[className] = this.tools[className];\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Setter for option Geodesic\n *\n * @param {Boolean} value - geodesic value\n */\n setGeodesic (value) {\n this.options.geodesic = (typeof value !== \"undefined\") ? value : false;\n }\n\n /**\n * Getter for option Geodesic\n *\n * @return {Boolean} geodesic value\n */\n isGeodesic () {\n return this.options.geodesic;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this._container;\n }\n\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize measure control (called by constructor)\n *\n * @param {Object} options - options\n *\n * @private\n */\n _initialize (options) {\n logger.trace(\"call MeasureAzimuth::_initialize() : \", options);\n\n // liste des options\n this.options = {};\n this.options.geodesic = (typeof options.geodesic !== \"undefined\") ? options.geodesic : false;\n this.options.position = (typeof options.position !== \"undefined\") ? options.position : null;\n this.options.target = (typeof options.target !== \"undefined\") ? options.target : null;\n this.options.render = (typeof options.render !== \"undefined\") ? options.render : null;\n this.options.gutter = (typeof options.gutter !== \"undefined\") ? options.gutter : null;\n this.options.layerDescription = (typeof options.layerDescription !== \"undefined\") ? options.layerDescription : {\n title : \"Mesures d'azimuth\",\n description : \"Mes mesures\"\n };\n\n // gestion des styles !\n this.createStylingMeasureInteraction(options.styles);\n }\n\n /**\n * initialize component container (DOM)\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initializeContainer () {\n logger.trace(\"call MeasureAzimuth::_initializeContainer() : \", this._uid);\n\n var container = this._createMainContainerElement(); ;\n\n var picto = this._pictoContainer = this._createShowMeasureAzimuthPictoElement();\n container.appendChild(picto);\n\n return container;\n }\n\n // ################################################################### //\n // ##################### overridden methods ########################## //\n // ################################################################### //\n\n /**\n * Add all events on map\n *\n * @private\n */\n addMeasureEvents () {\n logger.trace(\"call MeasureAzimuth::addMeasureEvents()\");\n\n var map = this.getMap();\n\n map.on(\"singleclick\", (e) => this.onPointerMoveAzimutHandler(e));\n map.on(\"pointermove\", (e) => this.onPointerMoveAzimutHandler(e));\n this.eventLayerRemove = map.getLayers().on(\"remove\", (e) => {\n if (e.element === this.measureVector) { // FIXME object comparison\n this.clean();\n }\n });\n }\n\n /**\n * Remove all events on map\n *\n * @private\n */\n removeMeasureEvents () {\n logger.trace(\"call MeasureAzimuth::removeMeasureEvents()\");\n\n var map = this.getMap();\n\n map.un(\"singleclick\", (e) => this.onPointerMoveAzimutHandler(e));\n map.un(\"pointermove\", (e) => this.onPointerMoveAzimutHandler(e));\n if (this.eventLayerRemove) {\n olObservableUnByKey(this.eventLayerRemove);\n }\n }\n\n /**\n * Format length output.\n *\n * @param {ol.geom.LineString} line - geometry line.\n * @return {String} The formatted output.\n * @private\n */\n format (line) {\n logger.trace(\"call MeasureAzimuth::format()\");\n\n var map = this.getMap();\n\n var sourceProj = map.getView().getProjection();\n\n var c1 = olTransformProj(line.getFirstCoordinate(), sourceProj, \"EPSG:4326\");\n var c2 = olTransformProj(line.getLastCoordinate(), sourceProj, \"EPSG:4326\");\n\n if (!this.options.geodesic) {\n // TODO calcul sur une petite distance (>500m) afin de simuler un cap !\n var lengthGeodesic = olGetDistanceSphere(c1, c2);\n logger.trace(\"measure between 2 points with geodesic method\", lengthGeodesic);\n if (lengthGeodesic > 500) {\n var fraction = 500.0 / lengthGeodesic;\n logger.trace(\"%\", fraction);\n c2 = olTransformProj(line.getCoordinateAt(fraction), sourceProj, \"EPSG:4326\");\n }\n }\n\n var degrees2radians = Math.PI / 180;\n var radians2degrees = 180 / Math.PI;\n\n var lon1 = degrees2radians * c1[0];\n var lon2 = degrees2radians * c2[0];\n\n var lat1 = degrees2radians * c1[1];\n var lat2 = degrees2radians * c2[1];\n\n var a = Math.sin(lon2 - lon1) * Math.cos(lat2);\n var b = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1);\n\n var atan = Math.atan2(a, b);\n\n var azimut = radians2degrees * atan;\n logger.trace(\"azimut\", azimut);\n\n if (azimut < 0) {\n azimut += 360;\n }\n var output = Math.round(azimut * 100) / 100 + \" °\";\n\n return output;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on picto\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onShowMeasureAzimuthClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n logger.trace(\"call MeasureAzimuth::onShowMeasureAzimuthClick()\", e);\n\n // appel de la methode commune\n this.onShowMeasureClick(e, \"LineString\");\n }\n\n /**\n * Handle pointer click.\n *\n * @param {ol.MapBrowserEvent} e - The event.\n * @private\n */\n onPointerMoveAzimutHandler (e) {\n this.onPointerMoveHandler(e);\n\n if (this.sketch) {\n var geom = (/** @type {ol.geom.LineString} */ (this.sketch.getGeometry()));\n if (geom.getCoordinates().length > 2) {\n this.measureDraw.finishDrawing();\n }\n }\n }\n\n};\n\n// on récupère les mixins de la classe \"MeasureAreaDOM\" ainsi que celles\n// de \"Measures\".\nObject.assign(MeasureAzimuth.prototype, Measures);\nObject.assign(MeasureAzimuth.prototype, MeasureAzimuthDOM);\nObject.assign(MeasureAzimuth.prototype, Widget);\n\nexport default MeasureAzimuth;\n\n// Expose MeasureAzimuth as ol.control.MeasureAzimuth (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.MeasureAzimuth = MeasureAzimuth;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.control.Zoom;","// import CSS\nimport \"../../CSS/Controls/Zoom/GPFzoom.css\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport SelectorID from \"../../Utils/SelectorID\";\n// import ol\nimport Zoom from \"ol/control/Zoom\";\n\nvar logger = Logger.getLogger(\"zoom\");\n\n/**\n * @classdesc\n * OpenLayers Control to manage zoom\n *\n * @constructor\n * @extends {ol.control.Zoom}\n * @alias ol.control.GeoportalZoom\n * @type {ol.control.GeoportalZoom}\n * @param {Object} options - ol.control.Zoom options (see {@link http://openlayers.org/en/latest/apidoc/ol.control.Zoom.html ol.Control.Zoom})\n * @fire zoom:in\n * @fire zoom:out\n * @example\n * var zoom = new ol.control.GeoportalZoom({\n * position: \"top-left\"\n * });\n * map.addControl(zoom);\n */\nvar GeoportalZoom = class GeoportalZoom extends Zoom {\n\n /**\n * See {@link ol.control.GeoportalZoom}\n * @module GeoportalZoom\n * @alias module:~controls/GeoportalZoom\n * @param {*} options - options\n * @example\n * import GeoportalZoom from \"gpf-ext-ol/controls/GeoportalZoom\"\n * ou\n * import { GeoportalZoom } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // FIXME comment traite t on les options sur les classes\n // du contrôle natif ?\n // * className,\n // * zoomInClassName, zoomOutClassName,\n // * zoomInLabel, zoomOutLabel,\n // * zoomInTipLabel, zoomOutTipLabel\n var className = \"ol-custom-zoom\";\n options.className = className;\n super(options);\n\n this.container = null;\n this.options = options;\n }\n\n _createContainerPosition (map) {\n this.container = map.getOverlayContainerStopEvent();\n this.options.target = this.container;\n if (this.options.position) {\n var id = \"position-container-\" + this.options.position;\n if (!document.getElementById(id)) {\n // Creation manuelle du container de position\n var div = document.createElement(\"div\");\n div.id = id;\n div.classList.add(\"position\");\n div.classList.add(id);\n this.container.appendChild(div);\n }\n this.options.target = this.container.children[id];\n }\n }\n\n _initContainer () {\n // UID interne pour chaque controle\n this._uid = this.options.id || SelectorID.generate();\n\n // Ajout / Suppression des attributs du DOM\n this.element.id = \"GPzoom-\" + this._uid;\n this.element.classList.add(\"GPwidget\", \"gpf-widget\", \"gpf-widget-button\");\n this.element.classList.add(this.options.className);\n this.element.classList.remove(\"ol-zoom\", \"ol-unselectable\", \"ol-control\");\n\n var self = this;\n var buttons = this.element.childNodes;\n for (let index = 0; index < buttons.length; index++) {\n const btn = buttons[index];\n if (btn.classList.contains(this.options.className + \"-in\")) {\n // btn.classList.remove(\"ol-custom-zoom-in\");\n btn.classList.add(\"GPzoomIn\", \"GPshowOpen\", \"GPshowAdvancedToolPicto\", \"gpf-btn-icon-zoom-in\", \"fr-btn\", \"fr-btn--tertiary\", \"gpf-btn\", \"gpf-btn--tertiary\", \"gpf-btn-icon\");\n btn.id = \"GPzoomIn\";\n btn.innerHTML = \"\";\n btn.removeAttribute(\"title\");\n btn.setAttribute(\"aria-label\", \"Zoomer\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n btn.appendChild(span);\n if (btn.addEventListener) {\n btn.addEventListener(\"click\", function () {\n /**\n * event triggered on zoom in\n * @event zoom:in\n */\n self.dispatchEvent(\"zoom:in\");\n });\n } else if (btn.attachEvent) {\n btn.attachEvent(\"onclick\", function () {\n self.dispatchEvent(\"zoom:in\");\n });\n }\n }\n if (btn.classList.contains(this.options.className + \"-out\")) {\n // btn.classList.remove(\"ol-custom-zoom-out\");\n btn.classList.add(\"GPzoomOut\", \"GPshowOpen\", \"GPshowAdvancedToolPicto\", \"gpf-btn-icon-zoom-out\", \"fr-btn\", \"fr-btn--tertiary\", \"gpf-btn\", \"gpf-btn--tertiary\", \"gpf-btn-icon\");\n btn.id = \"GPzoomOut\";\n btn.innerHTML = \"\";\n btn.removeAttribute(\"title\");\n btn.setAttribute(\"aria-label\", \"Dézoomer\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n btn.appendChild(span);\n if (btn.addEventListener) {\n btn.addEventListener(\"click\", function () {\n /**\n * event triggered on zoom out\n * @event zoom:out\n */\n self.dispatchEvent(\"zoom:out\");\n });\n } else if (btn.attachEvent) {\n btn.attachEvent(\"onclick\", function () {\n self.dispatchEvent(\"zoom:out\");\n });\n }\n }\n }\n\n // Surcharge CSS de positionnement par defaut\n if (this.options.position) {\n this.element.style.position = \"unset\";\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.element.classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Overload setMap function\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n this._createContainerPosition(map);\n this._initContainer();\n // INFO\n // on ne supprime pas le zoom par defaut,\n // on le desactive simplement pour éviter des effets de bords\n // (ex. evenement de suppression d'un element de la collection)\n var controls = map.getControls();\n controls.forEach(ctrl => {\n if (ctrl.element.classList.contains(\"ol-zoom\")) {\n ctrl.element.classList.add(\"ol-hidden\");\n ctrl.element.style.display = \"none\";\n }\n });\n }\n this.setTarget(this.options.target);\n super.setMap(map);\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n\n};\n\nexport default GeoportalZoom;\n\n// Expose GeoportalZoom as ol.control.GeoportalZoom (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.GeoportalZoom = GeoportalZoom;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.control.FullScreen;","// import CSS\nimport \"../../CSS/Controls/FullScreen/GPFfullScreen.css\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport SelectorID from \"../../Utils/SelectorID\";\n// import ol\nimport FullScreen from \"ol/control/FullScreen\";\n\nvar logger = Logger.getLogger(\"fullscreen\");\n\n/**\n * @classdesc\n * OpenLayers Control to manage full screen\n *\n * @constructor\n * @extends {ol.control.FullScreen}\n * @alias ol.control.GeoportalFullScreen\n * @type {ol.control.GeoportalFullScreen}\n * @param {Object} options - ol.control.FullScreen options (see {@link http://openlayers.org/en/latest/apidoc/ol.control.FullScreen.html ol.Control.FullScreen})\n * @example\n * var zoom = new ol.control.GeoportalFullScreen({\n * position: \"top-left\"\n * });\n * map.addControl(zoom);\n */\nvar GeoportalFullScreen = class GeoportalFullScreen extends FullScreen {\n\n /**\n * See {@link ol.control.GeoportalFullScreen}\n * @module GeoportalFullScreen\n * @alias module:~controls/GeoportalFullScreen\n * @param {*} options - options\n * @example\n * import GeoportalFullScreen from \"gpf-ext-ol/controls/GeoportalFullScreen\"\n * ou\n * import { GeoportalFullScreen } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n var className = \"ol-custom-full-screen\";\n options.className = options.className || className;\n options.label = options.label || \"\";\n options.labelActive = options.labelActive || \"\";\n options.activeClassName = options.activeClassName || className + \"-true\";\n options.inactiveClassName = options.inactiveClassName || className + \"-false\";\n options.tipLabel = options.tipLabel || \"Basculer en mode plein écran\";\n\n super(options);\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"FullScreen\";\n this.container = null;\n this.options = options;\n }\n\n _createContainerPosition (map) {\n this.container = map.getOverlayContainerStopEvent();\n this.options.target = this.container;\n if (this.options.position) {\n var id = \"position-container-\" + this.options.position;\n if (!document.getElementById(id)) {\n // Creation manuelle du container de position\n var div = document.createElement(\"div\");\n div.id = id;\n div.classList.add(\"position\");\n div.classList.add(id);\n this.container.appendChild(div);\n }\n this.options.target = this.container.children[id];\n }\n }\n\n _initContainer () {\n // UID interne pour chaque controle\n this._uid = this.options.id || SelectorID.generate();\n\n // Ajout / Suppression des attributs du DOM\n this.element.id = \"GPfullScreen-\" + this._uid;\n this.element.classList.add(\"GPwidget\", \"gpf-widget\", \"gpf-widget-button\");\n this.element.classList.add(this.options.className);\n this.element.classList.remove(\"ol-full-screen\", \"ol-unselectable\", \"ol-control\");\n\n var button = this.element.childNodes[0];\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.classList.add(\"GPshowOpen\", \"GPshowAdvancedToolPicto\", \"GPfullScreenPicto\", \"fr-btn\", \"fr-btn--tertiary\", \"gpf-btn--tertiary\", \"gpf-btn\", \"gpf-btn-icon\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n button.removeAttribute(\"title\");\n button.setAttribute(\"aria-label\", this.options.tipLabel);\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n });\n }\n\n // Surcharge CSS de positionnement par defaut\n if (this.options.position) {\n this.element.style.position = \"unset\";\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.element.classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Overload setMap function\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n this._createContainerPosition(map);\n this._initContainer();\n // INFO\n // on ne supprime pas le zoom par defaut,\n // on le desactive simplement pour éviter des effets de bords\n // (ex. evenement de suppression d'un element de la collection)\n var controls = map.getControls();\n controls.forEach(ctrl => {\n if (ctrl.element.classList.contains(\"ol-full-screen\")) {\n ctrl.element.classList.add(\"ol-hidden\");\n ctrl.element.style.display = \"none\";\n }\n });\n }\n this.setTarget(this.options.target);\n super.setMap(map);\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n\n};\n\nexport default GeoportalFullScreen;\n\n// Expose GeoportalFullScreen as ol.control.GeoportalFullScreen (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.GeoportalFullScreen = GeoportalFullScreen;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.control.OverviewMap;","// import CSS\nimport \"../../CSS/Controls/OverviewMap/GPFoverviewMap.css\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport GeoportalWMTS from \"../../Layers/LayerWMTS\";\n// import ol\nimport OverviewMap from \"ol/control/OverviewMap\";\n\nvar logger = Logger.getLogger(\"overviewMap\");\n\n/**\n * @classdesc\n * OpenLayers Control to manage overviewMap\n *\n * @constructor\n * @extends {ol.control.OverviewMap}\n * @alias ol.control.GeoportalOverviewMap\n * @type {ol.control.GeoportalOverviewMap}\n * @param {Object} options - ol.control.OverviewMap options (see {@link http://openlayers.org/en/latest/apidoc/ol.control.OverviewMap.html ol.Control.OverviewMap})\n * @fire overviewmap:toggle\n * @example\n * var overviewmap = new ol.control.GeoportalOverviewMap({\n * position: \"top-left\"\n * });\n * map.addControl(overviewmap);\n */\nvar GeoportalOverviewMap = class GeoportalOverviewMap extends OverviewMap {\n\n /**\n * See {@link ol.control.GeoportalOverviewMap}\n * @module GeoportalOverviewMap\n * @alias module:~controls/GeoportalOverviewMap\n * @param {*} options - options\n * @example\n * import GeoportalOverviewMap from \"gpf-ext-ol/controls/GeoportalOverviewMap\"\n * ou\n * import { GeoportalOverviewMap } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n /**\n * Layer by default\n */\n const LAYER_CONFIG = {\n \"name\" : \"GEOGRAPHICALGRIDSYSTEMS.MAPS.OVERVIEW\",\n \"globalConstraint\" : {\n \"maxScaleDenominator\" : 279541132.01435894,\n \"minScaleDenominator\" : 2183915.0938621787,\n \"bbox\" : {\n \"left\" : -179.5,\n \"right\" : 179.5,\n \"top\" : 75,\n \"bottom\" : -75\n }\n },\n \"params\" : {\n \"url\" : \"https://data.geopf.fr/wmts\",\n \"styles\" : \"normal\",\n \"version\" : \"1.0.0\",\n \"format\" : \"image/jpeg\",\n \"projection\" : \"EPSG:3857\",\n \"minScale\" : 2183915.0938621787,\n \"maxScale\" : 279541132.01435894,\n \"extent\" : {\n \"left\" : -179.5,\n \"right\" : 179.5,\n \"top\" : 75,\n \"bottom\" : -75\n },\n \"legends\" : [\n {\n \"format\" : \"image/jpeg\",\n \"url\" : \"https://data.geopf.fr/annexes/ressources/legendes/LEGEND.jpg\",\n \"minScaleDenominator\" : \"200\"\n }\n ],\n \"title\" : \"Carte Mondiale pour la mini-vue\",\n \"description\" : \"Carte Mondiale pour la mini-vue\",\n \"tileMatrixSetLimits\" : {\n \"1\" : {\n \"minTileRow\" : \"0\",\n \"maxTileRow\" : \"1\",\n \"minTileCol\" : \"0\",\n \"maxTileCol\" : \"1\"\n },\n \"2\" : {\n \"minTileRow\" : \"0\",\n \"maxTileRow\" : \"3\",\n \"minTileCol\" : \"0\",\n \"maxTileCol\" : \"3\"\n },\n \"3\" : {\n \"minTileRow\" : \"1\",\n \"maxTileRow\" : \"6\",\n \"minTileCol\" : \"0\",\n \"maxTileCol\" : \"7\"\n },\n \"4\" : {\n \"minTileRow\" : \"2\",\n \"maxTileRow\" : \"13\",\n \"minTileCol\" : \"0\",\n \"maxTileCol\" : \"15\"\n },\n \"5\" : {\n \"minTileRow\" : \"5\",\n \"maxTileRow\" : \"26\",\n \"minTileCol\" : \"0\",\n \"maxTileCol\" : \"31\"\n },\n \"6\" : {\n \"minTileRow\" : \"11\",\n \"maxTileRow\" : \"52\",\n \"minTileCol\" : \"0\",\n \"maxTileCol\" : \"63\"\n },\n \"7\" : {\n \"minTileRow\" : \"22\",\n \"maxTileRow\" : \"105\",\n \"minTileCol\" : \"0\",\n \"maxTileCol\" : \"127\"\n },\n \"8\" : {\n \"minTileRow\" : \"45\",\n \"maxTileRow\" : \"210\",\n \"minTileCol\" : \"0\",\n \"maxTileCol\" : \"255\"\n }\n },\n \"TMSLink\" : \"PM_1_8\",\n \"matrixIds\" : [\n \"1\",\n \"2\",\n \"3\",\n \"4\",\n \"5\",\n \"6\",\n \"7\",\n \"8\"\n ],\n \"tileMatrices\" : {\n \"1\" : {\n \"matrixId\" : \"1\",\n \"matrixHeight\" : 2,\n \"matrixWidth\" : 2,\n \"scaleDenominator\" : 279541132.01435894,\n \"tileHeight\" : 256,\n \"tileWidth\" : 256,\n \"topLeftCorner\" : {\n \"x\" : -20037508.3427892,\n \"y\" : 20037508.3427892\n }\n },\n \"2\" : {\n \"matrixId\" : \"2\",\n \"matrixHeight\" : 4,\n \"matrixWidth\" : 4,\n \"scaleDenominator\" : 139770566.0071793,\n \"tileHeight\" : 256,\n \"tileWidth\" : 256,\n \"topLeftCorner\" : {\n \"x\" : -20037508.3427892,\n \"y\" : 20037508.3427892\n }\n },\n \"3\" : {\n \"matrixId\" : \"3\",\n \"matrixHeight\" : 8,\n \"matrixWidth\" : 8,\n \"scaleDenominator\" : 69885283.00358965,\n \"tileHeight\" : 256,\n \"tileWidth\" : 256,\n \"topLeftCorner\" : {\n \"x\" : -20037508.3427892,\n \"y\" : 20037508.3427892\n }\n },\n \"4\" : {\n \"matrixId\" : \"4\",\n \"matrixHeight\" : 16,\n \"matrixWidth\" : 16,\n \"scaleDenominator\" : 34942641.50179486,\n \"tileHeight\" : 256,\n \"tileWidth\" : 256,\n \"topLeftCorner\" : {\n \"x\" : -20037508.3427892,\n \"y\" : 20037508.3427892\n }\n },\n \"5\" : {\n \"matrixId\" : \"5\",\n \"matrixHeight\" : 32,\n \"matrixWidth\" : 32,\n \"scaleDenominator\" : 17471320.75089743,\n \"tileHeight\" : 256,\n \"tileWidth\" : 256,\n \"topLeftCorner\" : {\n \"x\" : -20037508.3427892,\n \"y\" : 20037508.3427892\n }\n },\n \"6\" : {\n \"matrixId\" : \"6\",\n \"matrixHeight\" : 64,\n \"matrixWidth\" : 64,\n \"scaleDenominator\" : 8735660.375448715,\n \"tileHeight\" : 256,\n \"tileWidth\" : 256,\n \"topLeftCorner\" : {\n \"x\" : -20037508.3427892,\n \"y\" : 20037508.3427892\n }\n },\n \"7\" : {\n \"matrixId\" : \"7\",\n \"matrixHeight\" : 128,\n \"matrixWidth\" : 128,\n \"scaleDenominator\" : 4367830.1877243575,\n \"tileHeight\" : 256,\n \"tileWidth\" : 256,\n \"topLeftCorner\" : {\n \"x\" : -20037508.3427892,\n \"y\" : 20037508.3427892\n }\n },\n \"8\" : {\n \"matrixId\" : \"8\",\n \"matrixHeight\" : 256,\n \"matrixWidth\" : 256,\n \"scaleDenominator\" : 2183915.0938621787,\n \"tileHeight\" : 256,\n \"tileWidth\" : 256,\n \"topLeftCorner\" : {\n \"x\" : -20037508.3427892,\n \"y\" : 20037508.3427892\n }\n }\n },\n \"nativeResolutions\" : [\n \"78271.51696402048\",\n \"39135.75848201023\",\n \"19567.87924100512\",\n \"9783.939620502561\",\n \"4891.969810251280\",\n \"2445.984905125640\",\n \"1222.992452562820\",\n \"611.4962262814100\"\n ]\n }\n };\n\n // optiopns par defaut\n var className = \"ol-overviewmap\";\n options.className = options.className || className;\n options.collapseLabel = options.collapseLabel || \"\";\n options.collapsed = options.collapsed;\n if (options.collapsed === undefined) {\n options.collapsed = true;\n }\n options.label = options.label || \"\";\n options.tipLabel = \"Carte générale\";\n options.layers = options.layers || [\n new GeoportalWMTS({\n layer : \"GEOGRAPHICALGRIDSYSTEMS.MAPS.OVERVIEW\",\n configuration : LAYER_CONFIG\n })\n ];\n\n super(options);\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"OverviewMap\";\n this.container = null;\n this.options = options;\n }\n\n _createContainerPosition (map) {\n this.container = map.getOverlayContainerStopEvent();\n this.options.target = this.container;\n if (this.options.position) {\n var id = \"position-container-\" + this.options.position;\n if (!document.getElementById(id)) {\n // Creation manuelle du container de position\n var div = document.createElement(\"div\");\n div.id = id;\n div.classList.add(\"position\");\n div.classList.add(id);\n this.container.appendChild(div);\n }\n this.options.target = this.container.children[id];\n }\n }\n\n _initContainer () {\n // UID interne pour chaque controle\n this._uid = this.options.id || SelectorID.generate();\n\n // Ajout / Suppression des attributs du DOM\n this.element.id = \"GPoverviewMap-\" + this._uid;\n this.element.classList.add(\"GPwidget\", \"gpf-widget\", \"gpf-widget-button\");\n this.element.classList.remove(\"ol-control\");\n\n var elements = this.element.childNodes;\n // button\n var button = elements[1];\n button.id = \"GPshowOverviewMap-\" + this._uid;\n button.classList.add(\"GPshowOpen\", \"GPshowAdvancedToolPicto\", \"GPshowOverviewMap\", \"gpf-btn-icon\", \"gpf-btn-icon-overviewmap\", \"fr-btn\", \"fr-btn--tertiary\", \"gpf-btn--tertiary\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", !this.options.collapsed);\n button.setAttribute(\"type\", \"button\");\n button.removeAttribute(\"title\");\n button.setAttribute(\"aria-label\", this.options.tipLabel);\n var self = this;\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n /**\n * event triggered on toggle map\n * @event overviewmap:toggle\n */\n self.dispatchEvent({\n type : \"overviewmap:toggle\",\n status : status\n });\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.dispatchEvent({\n type : \"overviewmap:toggle\",\n status : status\n });\n });\n }\n\n // Surcharge CSS de positionnement par defaut\n if (this.options.position) {\n this.element.style.position = \"unset\";\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.element.classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Overload setMap function\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n this._createContainerPosition(map);\n this._initContainer();\n }\n this.setTarget(this.options.target);\n super.setMap(map);\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n\n};\n\nexport default GeoportalOverviewMap;\n\n// Expose GeoportalOverviewMap as ol.control.GeoportalOverviewMap (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.GeoportalOverviewMap = GeoportalOverviewMap;\n}\n","var LegendsDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this.uid) ? id + \"-\" + this.uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPlegends\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show Legends\n *\n * @returns {DOMElement} DOM element\n */\n _createShowLegendsPictoElement : function () {\n // contexte d'execution\n var self = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowLegendsPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowLegendsPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-legends fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Afficher les légendes\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // Close all results and panels when minimizing the widget\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowLegendsClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowLegendsClick(e);\n });\n }\n\n return button;\n },\n\n // ################################################################### //\n // ################### Methods of panel container #################### //\n // ################################################################### //\n\n /**\n * Create Container Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createLegendsPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPlegendsPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n return dialog;\n },\n\n _createLegendsPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__legends\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createLegendsPanelHeaderElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"gpf-panel__header_legends\";\n return container;\n },\n _createLegendsPanelIconElement : function () {\n var label = document.createElement(\"label\");\n label.className = \"gpf-btn-header-legends gpf-btn-icon-header-legends\";\n label.title = \"Légendes\";\n return label;\n },\n _createLegendsPanelTitleElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__title_legends\";\n div.innerHTML = \"Légendes\";\n return div;\n },\n _createLegendsPanelCloseElement : function () {\n // contexte\n var self = this;\n\n var btnClose = document.createElement(\"button\");\n btnClose.className = \"gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline\";\n btnClose.title = \"Fermer le panneau\";\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n btnClose.appendChild(span);\n\n // Link panel close / visibility checkbox\n if (btnClose.addEventListener) {\n btnClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowLegendsPicto\")).click();\n }, false);\n } else if (btnClose.attachEvent) {\n btnClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowLegendsPicto\")).click();\n });\n }\n\n return btnClose;\n },\n\n // ################################################################### //\n // ####################### Methods dynamics ########################## //\n // ################################################################### //\n\n _createLegendElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"legends-entries gpf-panel__body fr-modal__body\";\n return div;\n },\n\n _createLegendEntry : function (o) {\n // Liste des informations :\n // id\n // title\n // legends\n // metadatas\n // desc\n // url\n // partners\n\n const stringToHTML = (str) => {\n var support = function () {\n if (!window.DOMParser) {\n return false;\n }\n var parser = new DOMParser();\n try {\n parser.parseFromString(\"x\", \"text/html\");\n } catch (err) {\n return false;\n }\n return true;\n };\n\n // If DOMParser is supported, use it\n if (support()) {\n var parser = new DOMParser();\n var doc = parser.parseFromString(str, \"text/html\");\n return doc.body;\n }\n\n // Otherwise, fallback to old-school method\n var dom = document.createElement(\"div\");\n dom.innerHTML = str;\n return dom;\n };\n\n if (o) {\n if (o.legends && o.legends.length) {\n var url = o.legends[0].url; // 1ere valeur par defaut\n var entry = stringToHTML(`\n \n \n \n
\n \"${o.desc}\"\n
\n \n `);\n // add event click button\n var button = entry.firstChild.querySelector(\"button\");\n if (button) {\n button.addEventListener(\"click\", (e) => {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n var element = document.getElementById(\"GPlegend_ID_\" + o.id);\n (status) ?\n element.classList.replace(\"gpf-visible\", \"gpf-hidden\") : element.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n });\n }\n return entry.firstChild;\n }\n }\n }\n\n};\n\nexport default LegendsDOM;\n","// import CSS\nimport \"../../CSS/Controls/Legends/GPFlegends.css\";\n\n// import OpenLayers\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\n\n// import local\nimport Utils from \"../../Utils/Helper\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Draggable from \"../../Utils/Draggable\";\n\n// DOM\nimport LegendsDOM from \"./LegendsDOM\";\n\nvar logger = Logger.getLogger(\"legends\");\n\n/**\n * @classdesc\n *\n * Legends button\n *\n * @constructor\n * @alias ol.control.Legends\n * @type {ol.control.Legends}\n * @extends {ol.control.Control}\n * @param {Object} options - options for function call.\n *\n * @fires legends:add\n * @fires legends:remove\n * @fires legends:modify\n * @example\n * var legends = new ol.control.Legends();\n * map.addControl(legends);\n */\nvar Legends = class Legends extends Control {\n\n /**\n * See {@link ol.control.Legends}\n * @module Legends\n * @alias module:~controls/Legends\n * @param {Object} [options] - options\n * @example\n * import Legends from \"gpf-ext-ol/controls/Legends\"\n * ou\n * import { Legends } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof Legends)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"Legends\";\n // initialisation du composant\n this.initialize(options);\n\n // Widget main DOM container\n this.container = this.initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this.container) : this.element = this.container;\n\n return this;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this.panelLegendsContainer,\n this.panelLegendsHeaderContainer,\n map.getTargetElement()\n );\n }\n // mode \"collapsed\"\n if (!this.collapsed) {\n this.buttonLegendsShow.setAttribute(\"aria-pressed\", true);\n }\n // ajout des legendes déjà sur la carte\n if (this.auto) {\n var self = this;\n map.getLayers().forEach((layer) => {\n self.add(layer);\n });\n }\n\n // ajout des evenements sur la carte\n // pour les futurs ajouts de couche\n if (this.auto) {\n this.addEventsListeners(map);\n }\n } else {\n // suppression des evenements sur la carte\n // pour les futurs suppressions de couche\n if (this.auto) {\n this.removeEventsListeners();\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // ################### getters / setters ############################# //\n // ################################################################### //\n\n /**\n * Get all meta informations of a IGN's layer\n *\n * @param {*} layer - layer\n * @returns {*} informations\n * @public\n * @example\n * getLegends() :\n * \"legends\" : [\n * {\n * \"format\" : \"image/jpeg\",\n * \"url\" : \"https:*data.geopf.fr/annexes/ressources/legendes/LEGEND.jpg\",\n * \"minScaleDenominator\" : \"200\"\n * }\n * ],\n */\n getMetaInformations (layer) {\n // INFO\n // condition pour être une couche issue du catalogue IGN\n if (layer.hasOwnProperty(\"name\")) {\n return {\n id : layer.name,\n title : layer.getTitle(),\n legends : layer.getLegends(),\n metadatas : layer.getMetadata(),\n desc : layer.getDescription(),\n url : layer.getQuicklookUrl(),\n partners : layer.getOriginators()\n };\n }\n return;\n }\n\n /**\n * Add legends from layers\n * @param {*} layers - ...\n * @public\n */\n adds (layers) {\n if (layers) {\n for (let index = 0; index < layers.length; index++) {\n if (!this.add(layer)) {\n continue;\n }\n }\n }\n }\n\n /**\n * Add a legend from a layer\n * @param {*} layer - ...\n * @returns {Boolean} - true|false\n * @public\n */\n add (layer) {\n if (layer) {\n var entry = this._createLegendEntry(this.getMetaInformations(layer));\n if (entry) {\n if (this.exist(entry)) {\n return false;\n }\n this.panelLegendsEntriesContainer.prepend(entry);\n this.legends.push({\n obj : layer,\n dom : entry\n });\n return true;\n }\n }\n return false;\n }\n\n /**\n * Remove a legend from a layer\n * @param {*} layer - ...\n * @returns {Boolean} - true|false\n * @public\n */\n remove (layer) {\n var found = false;\n if (layer) {\n for (let i = 0; i < this.legends.length; i++) {\n const legend = this.legends[i];\n if (layer.name === legend.obj.name &&\n layer.service === legend.obj.service\n ) {\n if (legend.dom) {\n this.legends[i].dom.remove();\n }\n this.legends.splice(i, 1);\n found = true;\n break;\n }\n }\n }\n return found;\n }\n\n /**\n * Has already a DOM legend\n * @param {*} dom - ...\n * @returns {Boolean} - true|false\n * @public\n */\n exist (dom) {\n var found = false;\n for (let i = 0; i < this.legends.length; i++) {\n const legend = this.legends[i];\n if (legend.dom.id === dom.id) {\n found = true;\n break;\n }\n }\n return found;\n }\n\n // ################################################################### //\n // #################### privates methods ############################# //\n // ################################################################### //\n\n /**\n * Initialize Legends control (called by Legends constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n this.uid = options.id || SelectorID.generate();\n\n // set default options\n this.options = {\n collapsed : true,\n draggable : false,\n auto : true,\n panel : false\n };\n\n // merge with user options\n Utils.assign(this.options, options);\n\n /** {Boolean} specify if control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n /** {Boolean} specify if control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n /** {Boolean} specify if control add layers auto */\n this.auto = this.options.auto;\n\n this.buttonLegendsShow = null;\n this.panelLegendsContainer = null;\n this.panelLegendsEntriesContainer = null; // c'est là où on ajoute nos entrées legendes !\n this.panelLegendsHeaderContainer = null; // c'est pour le dragNdrop\n this.buttonLegendsClose = null; // utile ?\n\n this.eventsListeners = [];\n\n // tableau des entrées des legendes\n // ex.\n // {\n // obj: layer openlayers,\n // dom: DOMElement\n // }\n this.legends = [];\n }\n\n /**\n * Create control main container (DOM initialize)\n *\n * @returns {DOMElement} DOM element\n * @private\n */\n initContainer () {\n // create main container\n var container = this._createMainContainerElement();\n\n var picto = this.buttonLegendsShow = this._createShowLegendsPictoElement();\n container.appendChild(picto);\n\n // panel\n var legendsPanel = this.panelLegendsContainer = this._createLegendsPanelElement();\n var legendsPanelDiv = this._createLegendsPanelDivElement();\n legendsPanel.appendChild(legendsPanelDiv);\n\n var legendsEntriesDiv = this.panelLegendsEntriesContainer = this._createLegendElement();\n legendsPanel.appendChild(legendsEntriesDiv);\n\n\n // header ?\n if (this.options.panel) {\n var legendsPanelHeader = this.panelLegendsHeaderContainer = this._createLegendsPanelHeaderElement();\n // icone\n var legendsPanelIcon = this._createLegendsPanelIconElement();\n legendsPanelHeader.appendChild(legendsPanelIcon);\n // title\n var legendsPanelTitle = this._createLegendsPanelTitleElement();\n legendsPanelHeader.appendChild(legendsPanelTitle);\n // close picto\n var legendsCloseBtn = this.buttonLegendsClose = this._createLegendsPanelCloseElement();\n legendsPanelHeader.appendChild(legendsCloseBtn);\n legendsPanelDiv.appendChild(legendsPanelHeader);\n }\n\n container.appendChild(legendsPanel);\n\n logger.log(container);\n\n return container;\n }\n\n /**\n * Add events listeners on map (called by setMap)\n *\n * @param {*} map - map\n * @private\n * @todo listener on change:position\n */\n addEventsListeners (map) {\n var self = this;\n this.eventsListeners[\"layer:add\"] = function (e) {\n logger.trace(e);\n // INFO\n // à l'ajout d'une couche, on ajoute l'entrée\n // * dans le DOM\n // * dans la liste des entrées\n // un test est à realiser pour savoir si cette couche possède\n // des meta informations, sinon, on placera une legende par defaut :\n // > pas de légende disponible (au format texte)\n if (!self.add(e.element)) {\n logger.error(\"Layer already added...\");\n return;\n }\n };\n this.eventsListeners[\"layer:remove\"] = function (e) {\n logger.trace(e);\n // INFO\n // à la suppression de la couche, on supprime l'entrée\n // * du DOM\n // * de la liste des entrées\n if (!self.remove(e.element)) {\n logger.error(\"Layer already removed...\");\n return;\n }\n };\n this.eventsListeners[\"layer:change:position\"] = function (e) {\n logger.trace(e);\n // TODO\n // à la modification de l'ordre de la couche, on modifie l'entrée\n // * du DOM\n // * de la liste des entrées\n };\n this.eventsListeners[\"view:change:resolution\"] = function (e) {\n logger.trace(e);\n // à la modification de l'echelle de la carte, on modifie les entrées\n // * du DOM si necessaire\n // * de la liste des entrées si necessaire\n var map = self.getMap();\n for (let j = 0; j < self.legends.length; j++) {\n const legend = self.legends[j];\n\n var infos = self.getMetaInformations(legend.obj);\n if (!infos) {\n continue;\n }\n // conversion resolution vers échelle\n var resolution = map.getView().getResolution() || map.getView().getResolutionForZoom(map.getZoom());\n var scaleDenominator = resolution*3570;\n\n // recherche de la legende en fonction de l'échelle\n var cloneInfoLegends = infos.legends.slice(); //clone\n var bestInfoLegend = cloneInfoLegends[0];\n for (let i = 0; i < cloneInfoLegends.length; ++i) {\n const InfoLegend = cloneInfoLegends[i];\n\n if (!InfoLegend.minScaleDenominator) {\n InfoLegend.minScaleDenominator = 0;\n }\n\n if ( ( scaleDenominator > bestInfoLegend.minScaleDenominator && InfoLegend.minScaleDenominator > bestInfoLegend.minScaleDenominator && InfoLegend.minScaleDenominator < scaleDenominator ) ||\n ( scaleDenominator < bestInfoLegend.minScaleDenominator && InfoLegend.minScaleDenominator < bestInfoLegend.minScaleDenominator ) ) {\n bestInfoLegend = InfoLegend;\n }\n }\n // si pas de changement, on ne met pas à jour de DOM\n if (infos.legends[0] === bestInfoLegend) {\n continue;\n }\n infos.legends = [];\n infos.legends.push(bestInfoLegend);\n\n // mise à jour du DOM\n var newEntry = self._createLegendEntry(infos);\n var oldEntry = legend.dom;\n oldEntry.replaceWith(newEntry);\n\n // mise à jour de l'entrée\n legend.dom = newEntry;\n }\n };\n\n map.getLayers().on(\"add\", this.eventsListeners[\"layer:add\"]);\n map.getLayers().on(\"remove\", this.eventsListeners[\"layer:remove\"]);\n map.getLayers().on(\"change:zIndex\", this.eventsListeners[\"layer:change:position\"]);\n map.getView().on(\"change:resolution\", this.eventsListeners[\"view:change:resolution\"]);\n }\n\n /**\n * Remove events listeners on map (called by setMap)\n * @private\n */\n removeEventsListeners () {\n var map = this.getMap();\n map.getLayers().un(\"add\", this.eventsListeners[\"layer:add\"]);\n map.getLayers().un(\"remove\", this.eventsListeners[\"layer:remove\"]);\n map.getLayers().un(\"change:zIndex\", this.eventsListeners[\"layer:change:position\"]);\n map.getView().un(\"change:resolution\", this.eventsListeners[\"view:change:resolution\"]);\n delete this.eventsListeners[\"layer:add\"];\n delete this.eventsListeners[\"layer:remove\"];\n delete this.eventsListeners[\"layer:change:position\"];\n delete this.eventsListeners[\"view:change:resolution\"];\n }\n\n // ################################################################### //\n // ######################## event dom ################################ //\n // ################################################################### //\n /**\n * ...\n * @param {*} e - ...\n */\n onShowLegendsClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n logger.trace(e);\n var opened = this.buttonLegendsShow.ariaPressed;\n this.collapsed = !(opened === \"true\");\n this.dispatchEvent(\"change:collapsed\");\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n }\n\n};\n\n// on récupère les méthodes de la classe DOM\nObject.assign(Legends.prototype, LegendsDOM);\nObject.assign(Legends.prototype, Widget);\n\nexport default Legends;\n\n// Expose Export as ol.control.Legends (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.Legends = Legends;\n}\n","var TerritoriesDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this.uid) ? id + \"-\" + this.uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPterritories\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show Territories\n *\n * @returns {DOMElement} DOM element\n */\n _createShowTerritoriesPictoElement : function () {\n var self = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowTerritoriesPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowTerritoriesPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-territories fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Sélecteur de territoire\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // Close all results and panels when minimizing the widget\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowTerritoriesClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowTerritoriesClick(e);\n });\n }\n\n return button;\n },\n\n // ################################################################### //\n // ################### Methods of panel container #################### //\n // ################################################################### //\n\n /**\n * Create Container Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createTerritoriesPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPterritoriesPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n return dialog;\n },\n\n _createTerritoriesPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__territories\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createTerritoriesPanelHeaderElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"gpf-panel__header_territories\";\n return container;\n },\n _createTerritoriesPanelIconElement : function () {\n var label = document.createElement(\"label\");\n label.className = \"gpf-btn-header-territories gpf-btn-icon-header-territories\";\n label.title = \"Selecteur de territoires\";\n return label;\n },\n _createTerritoriesPanelTitleElement : function (title) {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__title_territories\";\n div.innerHTML = title;\n return div;\n },\n _createTerritoriesPanelCloseElement : function () {\n var self = this;\n\n var btnClose = document.createElement(\"button\");\n btnClose.id = \"GPterritoriesPanelClose\";\n btnClose.className = \"gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n btnClose.title = \"Fermer le panneau\";\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n btnClose.appendChild(span);\n\n // Link panel close / visibility checkbox\n if (btnClose.addEventListener) {\n btnClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowTerritoriesPicto\")).click();\n self.onCloseTerritoriesClick();\n }, false);\n } else if (btnClose.attachEvent) {\n btnClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowTerritoriesPicto\")).click();\n self.onCloseTerritoriesClick();\n });\n }\n\n return btnClose;\n },\n\n // ################################################################### //\n // ####################### Methods for entries ####################### //\n // ################################################################### //\n\n _createTerritoriesElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"territories-entries gpf-panel__body_territories fr-modal__body\";\n return div;\n },\n\n _createTerritoryEntry : function (o) {\n var self = this;\n const stringToHTML = (str) => {\n var support = function () {\n if (!window.DOMParser) {\n return false;\n }\n var parser = new DOMParser();\n try {\n parser.parseFromString(\"x\", \"text/html\");\n } catch (err) {\n return false;\n }\n return true;\n };\n\n // If DOMParser is supported, use it\n if (support()) {\n var parser = new DOMParser();\n var doc = parser.parseFromString(str, \"text/html\");\n return doc.body;\n }\n\n // Otherwise, fallback to old-school method\n var dom = document.createElement(\"div\");\n dom.innerHTML = str;\n return dom;\n };\n if (o) {\n // test si la vignette est renseignée\n var defaultImage = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiB3aWR0aD0iNTgxLjAwMDAwMHB0IiBoZWlnaHQ9IjM1Ni4wMDAwMDBwdCIgdmlld0JveD0iMCAwIDU4MS4wMDAwMDAgMzU2LjAwMDAwMCIKIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgoKPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsMzU2LjAwMDAwMCkgc2NhbGUoMC4xMDAwMDAsLTAuMTAwMDAwKSIKZmlsbD0iI2I0YjNiMyIgc3Ryb2tlPSJub25lIj4KPHBhdGggZD0iTTAgMTc4MCBsMCAtMTc4MCAyOTA1IDAgMjkwNSAwIDAgMTc4MCAwIDE3ODAgLTI5MDUgMCAtMjkwNSAwIDAKLTE3ODB6Ii8+CjwvZz4KPC9zdmc+Cg==\";\n var thumbnail = o.thumbnail || defaultImage;\n var icon = o.icon || defaultImage;\n var id = o.id.toLowerCase();\n // tile dsfr\n var entry = stringToHTML(`\n
\n
\n
\n

\n \n

\n
\n
\n
\n
\n \n
\n
\n \n \n \n
\n
\n
\n `);\n // add event click on main div\n var div = entry.firstChild;\n if (div) {\n div.addEventListener(\"click\", (e) => {\n self.onImageTerritoriesClick(e, o.id);\n });\n }\n return entry.firstChild;\n }\n }\n\n};\n\nexport default TerritoriesDOM;\n","// import CSS\nimport \"../../CSS/Controls/Territories/GPFterritories.css\";\n\n// import OpenLayers\nimport Control from \"../Control\";\nimport Widget from \"../Widget\";\nimport { transformExtent as olTransformExtentProj } from \"ol/proj\";\n\n// import local\nimport Utils from \"../../Utils/Helper\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Draggable from \"../../Utils/Draggable\";\n\nimport TerritoriesJson from \"./Territories.json\";\n\n// DOM\nimport TerritoriesDOM from \"./TerritoriesDOM\";\n\nvar logger = Logger.getLogger(\"territories\");\n\n/**\n * @classdesc\n *\n * Territories map widget\n *\n * @constructor\n * @alias ol.control.Territories\n * @type {ol.control.Territories}\n * @extends {ol.control.Control}\n * @param {Object} options - options for function call.\n *\n * @fires custom:action\n * @example\n * var territories = new ol.control.Territories({\n * collapsed: true,\n * panel: true,\n * auto: true\n * });\n * map.addControl(territories);\n *\n * or/and\n *\n * var territories = new ol.control.Territories({});\n * territories.setTerritory({id: \"MTQ\", title: \"Martinique\", description: \"\", bbox: [], thumbnail: \"data:image/png;base64,...\"});\n * territories.setTerritory({id: \"GLP\", title: \"Guadeloupe\", description: \"\", bbox: [], thumbnail: \"http://...\"});\n * map.addControl(territories);\n */\nvar Territories = class Territories extends Control {\n\n /**\n * See {@link ol.control.Territories}\n * @module Territories\n * @alias module:~controls/Territories\n * @param {Object} [options] - options\n * @example\n * import Territories from \"gpf-ext-ol/controls/Territories\"\n * ou\n * import { Territories } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof Territories)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"Territories\";\n // initialisation du composant\n this.initialize(options);\n\n // Territories main DOM container\n this.container = this.initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this.container) : this.element = this.container;\n\n return this;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this.panelTerritoriesContainer,\n this.panelTerritoriesHeaderContainer,\n map.getTargetElement()\n );\n }\n // mode \"collapsed\"\n if (!this.collapsed) {\n this.buttonTerritoriesShow.setAttribute(\"aria-pressed\", true);\n }\n\n // Ajout des territoires par defaut\n if (this.auto) {\n for (let index = 0; index < TerritoriesJson.length; index++) {\n const territory = TerritoriesJson[index];\n this.setTerritory(territory);\n }\n }\n } else {\n // some stuff when remove widget\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n // ################################################################### //\n // ################### getters / setters ############################# //\n // ################################################################### //\n\n /**\n * Add a territory\n *\n * @param {Object} territory - territory\n * @returns {Boolean} - true|false\n * @public\n * @example\n * territories.setTerritory ({\n * id: \"MTQ\",\n * title: \"Martinique\",\n * description: \"\",\n * bbox: [minx, miny, maxx, maxy],\n * thumbnail: \"data:image/png;base64,...\"\n * });\n */\n setTerritory (territory) {\n // Test if a territory already exist\n var founded = this.territories.some(e => e.data.id === territory.id);\n if (territory && !founded) {\n var entry = this._createTerritoryEntry(territory);\n if (entry) {\n this.panelTerritoriesEntriesContainer.appendChild(entry);\n this.territories.push({\n data : territory,\n dom : entry\n });\n return true;\n }\n }\n return false;\n }\n\n /**\n * Remove a territory\n *\n * @param {String} territory - territory id (FRA, MTQ, ...)\n * @returns {Boolean} - true|false\n * @public\n * @example\n * territories.removeTerritory(\"MTQ\"); // id du territoire\n */\n removeTerritory (territory) {\n var found = false;\n if (territory) {\n for (let i = 0; i < this.territories.length; i++) {\n const o = this.territories[i];\n if (o.data.id === territory) {\n this.territories[i].dom.remove();\n this.territories.splice(i, 1);\n found = true;\n break;\n }\n }\n }\n return found;\n }\n\n /**\n * Set collapse\n *\n * @param {Boolean} collapsed - true|false\n * @todo ...\n * @public\n */\n setCollapse (collapsed) {\n if (collapsed === undefined) {\n logger.log(\"[ERROR] Territory:setCollapsed - missing collapsed parameter\");\n return;\n }\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n if (collapsed) {\n document.getElementById(\"GPterritoriesPanelClose\").click();\n } else {\n this.buttonTerritoriesShow.click();\n }\n this.collapsed = collapsed;\n }\n\n /**\n * Mode reduit des tuiles (uniquement le nom du territoire)\n *\n * @param {*} reduce - true|false\n * @public\n */\n setReduce (reduce) {\n if (reduce) {\n this.panelTerritoriesEntriesContainer.classList.add(\"tiles-reduce\");\n } else {\n this.panelTerritoriesEntriesContainer.classList.remove(\"tiles-reduce\");\n }\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // #################### privates methods ############################# //\n // ################################################################### //\n\n /**\n * Initialize Territories control (called by Territories constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n this.uid = options.id || SelectorID.generate();\n\n // set default options\n this.options = {\n collapsed : true,\n draggable : false,\n panel : true, // titre\n title : \"Sélectionner un territoire\",\n auto : false, // chargement auto des territoires par defaut\n thumbnail : false, // imagette des territoires\n reduce : false, // tuiles reduites par defaut\n tiles : 3, // nombre de tuiles affichables, 0 = toutes !\n territories : [] // TODO à spécifier...\n };\n\n // merge with user options\n Utils.assign(this.options, options);\n\n /** {Boolean} specify if control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n /** {Boolean} specify if control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n /** {Boolean} specify if we load the list of territories by default */\n this.auto = this.options.auto;\n /**\n * {Array} list of object territories\n * @example\n * {\n * dom : { HTMLelment },\n * data : {\n * id: \"MTQ\", title: \"Martinique\", description: \"\", bbox: [minx, miny, maxx, maxy], thumbnail: \"data:image/png;base64,...\"\n * }\n * }\n */\n this.territories = [];\n\n this.buttonTerritoriesShow = null;\n this.panelTerritoriesContainer = null;\n this.panelTerritoriesHeaderContainer = null; // usefull for the dragNdrop\n this.buttonTerritoriesClose = null;\n\n this.panelTerritoriesEntriesContainer = null;\n }\n\n /**\n * Create control main container (DOM initialize)\n *\n * @returns {DOMElement} DOM element\n * @private\n */\n initContainer () {\n // create main container\n var container = this._createMainContainerElement();\n\n var picto = this.buttonTerritoriesShow = this._createShowTerritoriesPictoElement();\n container.appendChild(picto);\n\n // panel\n var territoriesPanel = this.panelTerritoriesContainer = this._createTerritoriesPanelElement();\n territoriesPanel.classList.add(\"tiles-direction\");\n territoriesPanel.classList.add(\"tiles-\" + this.options.tiles);\n var territoriesPanelDiv = this._createTerritoriesPanelDivElement();\n territoriesPanel.appendChild(territoriesPanelDiv);\n\n // container for the custom code\n var territoriesEntriesDiv = this.panelTerritoriesEntriesContainer = this._createTerritoriesElement();\n territoriesEntriesDiv.classList.add(\"tiles-direction\");\n territoriesEntriesDiv.classList.add(\"tiles-\" + this.options.tiles);\n if (this.options.reduce) {\n territoriesEntriesDiv.classList.add(\"tiles-reduce\");\n }\n if (this.options.thumbnail) {\n territoriesEntriesDiv.classList.add(\"tiles-thumbnail\");\n } else {\n territoriesEntriesDiv.classList.add(\"tiles-icon\");\n }\n territoriesPanel.appendChild(territoriesEntriesDiv);\n\n\n // header ?\n if (this.options.panel) {\n var territoriesPanelHeader = this.panelTerritoriesHeaderContainer = this._createTerritoriesPanelHeaderElement();\n // icone\n var territoriesPanelIcon = this._createTerritoriesPanelIconElement();\n territoriesPanelHeader.appendChild(territoriesPanelIcon);\n // title\n var territoriesPanelTitle = this._createTerritoriesPanelTitleElement(this.options.title);\n territoriesPanelHeader.appendChild(territoriesPanelTitle);\n // close picto\n var territoriesCloseBtn = this.buttonTerritoriesClose = this._createTerritoriesPanelCloseElement();\n territoriesPanelHeader.appendChild(territoriesCloseBtn);\n territoriesPanelDiv.appendChild(territoriesPanelHeader);\n }\n\n container.appendChild(territoriesPanel);\n\n logger.log(container);\n\n return container;\n }\n\n // ################################################################### //\n // ######################## event dom ################################ //\n // ################################################################### //\n\n /**\n * ...\n * @param {*} e - ...\n */\n onShowTerritoriesClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n logger.trace(e);\n this.collapsed = !this.collapsed;\n }\n\n /**\n * ...\n * @param {*} e - ...\n */\n onCloseTerritoriesClick (e) {\n logger.trace(e);\n }\n\n /**\n * ...\n * @param {*} e - ...\n * @param {*} id - ...\n * @todo ...\n */\n onImageTerritoriesClick (e, id) {\n logger.trace(e, id);\n var territory = this.territories.find(e => e.data.id === id);\n if (territory) {\n var zoom = territory.data.zoom;\n var bbox = territory.data.bbox || []; // left, bottom, right, top\n if (!bbox.length) {\n return;\n }\n\n var map = this.getMap();\n var proj = map.getView().getProjection().getCode();\n var extent = olTransformExtentProj(bbox, \"EPSG:4326\", proj);\n map.getView().fit(extent, map.getSize());\n if (zoom) {\n map.getView().setZoom(zoom);\n }\n this.setCollapse(true);\n }\n }\n\n};\n\n// on récupère les méthodes de la classe DOM\nObject.assign(Territories.prototype, TerritoriesDOM);\nObject.assign(Territories.prototype, Widget);\n\nexport default Territories;\n\n// Expose Export as ol.control.Territories (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.Territories = Territories;\n}\n","import checkDsfr from \"../Utils/CheckDsfr\";\n\nvar ControlListDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPcontrolList\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################# Methods to display Main Panel ################### //\n // ################################################################### //\n\n /**\n * Show control\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createShowControlListPictoElement : function () {\n // contexte d'execution\n var context = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n span.innerText = \"+\";\n button.id = this._addUID(\"GPshowControlListPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowControlListPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-controllist fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Tous mes outils\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // gestionnaire d'evenement :\n // on ouvre le menu\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowControlListPanelClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowControlListPanelClick(e);\n });\n }\n\n return button;\n },\n\n\n // ################################################################### //\n // ################## Methods to display Inputs Panel ################ //\n // ################################################################### //\n\n /**\n * Create Container Panel\n * @returns {DOMElement} DOM element\n */\n _createControlListPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPcontrolListPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n return dialog;\n },\n\n _createControlListPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createControlListPanelHeaderElement : function () {\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n var div = document.createElement(\"div\");\n div.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n div.innerHTML = \"Mes outils\";\n container.appendChild(div);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPcontrolListPanelClose\");\n divClose.className = \"GPpanelClose GPcontrolListPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowControlListPicto\")).click();\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowControlListPicto\")).click();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n\n /**\n * Create Content Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createControlListPanelContentElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"gpf-panel__content fr-modal__content\";\n return container;\n },\n\n /**\n * Create Footer Panel\n *\n * @param {DOMElement} controlCatalogelement - DOM element\n * @returns {DOMElement} DOM element\n */\n _createControlListPanelFooterElement : function (controlCatalogelement) {\n var container = document.createElement(\"div\");\n container.className = \"GPpanelFooter gpf-panel__footer fr-modal__footer\";\n var addToolsBtn = document.createElement(\"button\");\n addToolsBtn.classList.add(\"gpf-btn\", \"gpf-btn--tertiary\", \"fr-btn\", \"fr-btn--tertiary\");\n addToolsBtn.innerText = \"+ Ajouter plus d'outils\";\n addToolsBtn.addEventListener(\"click\", function () {\n controlCatalogelement.click();\n });\n container.appendChild(addToolsBtn);\n return container;\n },\n\n /**\n * Create div for control\n *\n * @param {ol.Control} control control to add in the panel\n * @returns {DOMElement} DOM element\n */\n _createControlListPanelControl : function (control) {\n let controlContainer;\n try {\n controlContainer = control.getContainer();\n } catch (e) {\n controlContainer = control.container;\n }\n var container = document.createElement(\"div\");\n var btn = controlContainer.querySelector(\".GPshowOpen\").cloneNode();\n btn.id = btn.id + \"-controllist\";\n btn.classList.add(\"inside-control-list\");\n container.appendChild(btn);\n var divText = document.createElement(\"div\");\n var spanTitle = document.createElement(\"span\");\n divText.appendChild(spanTitle);\n if (controlContainer.querySelector(\".GPshowOpen\").ariaLabel) {\n spanTitle.innerText = controlContainer.querySelector(\".GPshowOpen\").ariaLabel;\n } else if (controlContainer.querySelector(\".GPpanelTitle\")) {\n spanTitle.innerText = controlContainer.querySelector(\".GPpanelTitle\").innerText;\n } else if (controlContainer.querySelector(\"[class^='gpf-btn-header-']\")) {\n spanTitle.innerText = controlContainer.querySelector(\"[class^='gpf-btn-header-']\").title;\n }\n if (control.description) {\n var spanDescription = document.createElement(\"span\");\n spanDescription.innerText = control.description;\n divText.appendChild(spanDescription);\n }\n container.appendChild(divText);\n\n container.addEventListener(\"click\", function () {\n controlContainer.querySelector(\".GPshowOpen\").click();\n });\n return container;\n },\n\n};\n\nexport default ControlListDOM;\n","// import CSS\nimport \"../../CSS/Controls/ControlList/GPFcontrolList.css\";\n// import OpenLayers\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\n\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Utils from \"../../Utils/Helper\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Draggable from \"../../Utils/Draggable\";\nimport Interactions from \"../Utils/Interactions\";\n// import local with ol dependencies\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\n// DOM\nimport ControlListDOM from \"./ControlListDOM\";\n\nvar logger = Logger.getLogger(\"controlList\");\n\n/**\n * @classdesc\n *\n * ControlList Control.\n *\n * @constructor\n * @alias ol.control.ControlList\n * @type {ol.control.ControlList}\n * @extends {ol.control.ControlList}\n * @param {Object} options - ControlList control options\n */\nvar ControlList = class ControlList extends Control {\n\n /**\n * See {@link ol.control.ControlList}\n * @module ControlList\n * @alias module:~controls/ControlList\n * @param {*} options - options\n * @example\n * import ControlList from from \"gpf-ext-ol/controls/ControlList\"\n * ou\n * import { ControlList } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof ControlList)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n if (options.controlCatalogElement) {\n this.controlCatalogElement = options.controlCatalogElement;\n } else {\n this.controlCatalogElement = null;\n }\n\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"ControlList\";\n\n // initialisation du composant\n this.initialize(options);\n // // Widget main DOM container\n this._container = this._initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n }\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this._ControlListPanelContainer,\n this._ControlListPanelHeaderContainer,\n map.getTargetElement()\n );\n }\n\n // mode \"collapsed\"\n if (!this.collapsed) {\n this._pictoControlListButton.setAttribute(\"aria-pressed\", true);\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Returns true if widget is collapsed (minimized), false otherwise\n *\n * @returns {Boolean} collapsed - true if widget is collapsed\n */\n getCollapsed () {\n return this.collapsed;\n }\n\n /**\n * Collapse or display widget main container\n *\n * @param {Boolean} collapsed - True to collapse widget, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.log(\"[ERROR] ControlList:setCollapsed - missing collapsed parameter\");\n return;\n }\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n if (collapsed) {\n document.getElementById(\"GPcontrolListPanelClose-\" + this._uid).click();\n } else {\n this._pictoIsoButton.click();\n }\n this.collapsed = collapsed;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this._container;\n }\n\n /**\n * Clean UI : reinit control\n */\n clean () {\n this._clearIsoInputs();\n // INFO\n // le comportement est surchargé, ceci supprime la couche !?\n // cf. _createIsoPanelFormPointElement()\n this._originPoint.clearResults();\n document.getElementById(\"GPlocationPoint_1-\" + this._uid).style.cssText = \"\";\n document.getElementById(\"GPlocationOriginCoords_1-\" + this._uid).value = \"\";\n document.getElementById(\"GPlocationOrigin_1-\" + this._uid).value = \"\";\n document.getElementById(\"GPlocationPoint_1-\" + this._uid).style.cssText = \"\";\n document.getElementById(\"GPlocationOriginPointer_1-\" + this._uid).checked = false;\n document.getElementById(\"GPlocationOrigin_1-\" + this._uid).className = \"GPlocationOriginVisible gpf-visible\";\n document.getElementById(\"GPlocationOriginCoords_1-\" + this._uid).className = \"GPlocationOriginHidden gpf-hidden\";\n this._currentIsoResults = null;\n this.setLayer();\n }\n\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize control (called by constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n // collapsed\n if (options.collapsed === \"true\") {\n options.collapsed = true;\n }\n if (options.collapsed === \"false\") {\n options.collapsed = false;\n }\n\n // set default options\n this.options = {\n collapsed : true,\n draggable : false,\n };\n\n // merge with user options\n Utils.assign(this.options, options);\n\n /** {Boolean} specify if control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n /** {Boolean} specify if control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n // identifiant du contrôle : utile pour suffixer les identifiants CSS (pour gérer le cas où il y en a plusieurs dans la même page)\n this._uid = this.options.id || SelectorID.generate();\n }\n\n // ################################################################### //\n // ######################## DOM initialize ########################### //\n // ################################################################### //\n\n /**\n * initialize component container (DOM)\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initContainer () {\n // creation du container principal\n var container = this._createMainContainerElement();\n\n var picto = this._pictoControlListButton = this._createShowControlListPictoElement();\n container.appendChild(picto);\n\n // panneau\n var panel = this._ControlListPanelContainer = this._createControlListPanelElement();\n var panelDiv = this._createControlListPanelDivElement();\n panel.appendChild(panelDiv);\n\n // header\n var header = this._ControlListPanelHeaderContainer = this._createControlListPanelHeaderElement();\n panelDiv.appendChild(header);\n\n // content\n var content = this._ControlListPanelContentContainer = this._createControlListPanelContentElement();\n panelDiv.appendChild(content);\n\n if (this.controlCatalogElement) {\n // footer\n var footer = this._createControlListPanelFooterElement(this.controlCatalogElement);\n panelDiv.appendChild(footer);\n }\n\n container.appendChild(panel);\n return container;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on 'GPshowControlListPicto' picto\n * (cf. this._createShowControlListPictoElement),\n *\n * @param { event } e évènement associé au clic\n * @private\n */\n onShowControlListPanelClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n // on supprime toutes les interactions\n Interactions.unset(map);\n var opened = this._pictoControlListButton.ariaPressed;\n this.collapsed = !(opened === \"true\");\n // on génère nous même l'evenement OpenLayers de changement de propriété\n // (utiliser ol.control.ControlList.on(\"change:collapsed\", function ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n if (!this.collapsed) {\n const controls = this.getMap().getControls().getArray();\n controls.forEach(control => {\n if (control.listable) {\n let element = this._createControlListPanelControl(control);\n this._ControlListPanelContentContainer.appendChild(element);\n }\n });\n } else {\n this._ControlListPanelContentContainer.innerHTML = \"\";\n }\n }\n\n};\n\n// on récupère les méthodes de la classe commune ControlList\nObject.assign(ControlList.prototype, ControlListDOM);\nObject.assign(ControlList.prototype, Widget);\n\nexport default ControlList;\n\n// Expose ControlList as ol.control.ControlList (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.ControlList = ControlList;\n}\n","const stringToHTML = (str) => {\n var support = function () {\n if (!window.DOMParser) {\n return false;\n }\n var parser = new DOMParser();\n try {\n parser.parseFromString(\"x\", \"text/html\");\n } catch (err) {\n return false;\n }\n return true;\n };\n\n // If DOMParser is supported, use it\n if (support()) {\n var parser = new DOMParser();\n var doc = parser.parseFromString(str, \"text/html\");\n return doc.body;\n }\n\n // Otherwise, fallback to old-school method\n var dom = document.createElement(\"div\");\n dom.innerHTML = str;\n return dom;\n};\n\nvar CatalogDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this.uid) ? id + \"-\" + this.uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPcatalog\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show Catalog\n *\n * @returns {DOMElement} DOM element\n */\n _createShowCatalogPictoElement : function () {\n var self = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowCatalogPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowCatalogPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-catalog fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Catalogue de données\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // Close all results and panels when minimizing the widget\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowCatalogClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowCatalogClick(e);\n });\n }\n\n return button;\n },\n\n // ################################################################### //\n // ################### Methods of panel container #################### //\n // ################################################################### //\n\n /**\n * Create Container Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createCatalogPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPcatalogPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n return dialog;\n },\n\n _createCatalogPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n _createCatalogPanelContentDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__content fr-modal__content\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createCatalogPanelHeaderElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n return container;\n },\n _createCatalogPanelTitleElement : function (title) {\n var div = document.createElement(\"div\");\n div.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n div.innerHTML = title;\n return div;\n },\n _createCatalogPanelCloseElement : function () {\n var self = this;\n\n var btnClose = document.createElement(\"button\");\n btnClose.id = this._addUID(\"GPcatalogPanelClose\");\n btnClose.className = \"GPpanelClose GPcatalogPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n btnClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n if (btnClose.addEventListener) {\n btnClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowCatalogPicto\")).click();\n self.onCloseCatalogClick();\n }, false);\n } else if (btnClose.attachEvent) {\n btnClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowCatalogPicto\")).click();\n self.onCloseCatalogClick();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n btnClose.appendChild(span);\n\n return btnClose;\n },\n\n // ################################################################### //\n // ####################### Methods for panel ######################### //\n // ################################################################### //\n\n _createCatalogContentDivElement : function () {\n var container = stringToHTML(`
`);\n return container.firstChild;\n },\n _createCatalogContentTitleElement : function (title) {\n var container = stringToHTML(`\n \n
\n
\n
${title}
\n
\n
\n `);\n return container.firstChild;\n },\n _createCatalogContentSearchElement : function () {\n var strContainer = `\n \n \n
\n
\n \n \n \n
\n
\n `;\n var container = stringToHTML(strContainer);\n\n // ajout du shadow DOM pour creer les listeners\n const shadow = container.attachShadow({ mode : \"open\" });\n shadow.innerHTML = strContainer.trim();\n\n // event listener sur le DOM\n var button = shadow.getElementById(\"search-button\");\n if (button) {\n button.addEventListener(\"click\", () => {\n this.onSearchCatalogButtonClick();\n });\n }\n\n var input = shadow.getElementById(\"search-input\");\n if (input) {\n input.addEventListener(\"search\", () => {\n this.onSearchCatalogInputChange();\n });\n }\n\n return shadow;\n },\n /**\n * Create Waiting Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createCatalogWaitingElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPcatalogCalcWaitingContainer\");\n // /* GPwaitingContainer */\n // /* gpf-waiting */\n div.className = \"GPwaitingContainerHidden gpf-waiting--hidden\";\n\n var p = document.createElement(\"p\");\n p.className = \"GPwaitingContainerInfo gpf-waiting_info\";\n p.innerHTML = \"Recherche en cours...\";\n\n div.appendChild(p);\n\n return div;\n },\n _createCatalogContentCategoriesTabs : function (categories) {\n var strTabButtons = \"\";\n var tmplTabButton = (i, id, title, selected) => {\n var className = \"GPtabButton fr-tabs__tab\";\n var value = \"false\";\n var tabindex = -1;\n if (selected) {\n className = \"GPtabButton GPtabButtonActive fr-tabs__tab\";\n value = \"true\";\n tabindex = 0;\n }\n // le listener sur le bouton permet de récuperer à partir de l'ID la catégorie (id) :\n // > \"tabbutton-${i}_${id}\".split('_')[1]\n // et l'attribut 'aria-controls' permet de retrouver le panneau du contenu\n return `\n
  • \n \n
  • \n `;\n };\n\n var strSectionRadios = \"\";\n var tmplSectionRadio = (section) => {\n var checked = (section.default) ? \"checked\" : \"\";\n return `\n \n
    \n
    \n \n \n
    \n
    \n `;\n };\n var tmplSectionRadios = (id, sections) => {\n // chaque sous categories à son propre container de couches\n // et son bouton radio de groupe\n var strTabContents = \"\";\n for (let j = 0; j < sections.length; j++) {\n const section = sections[j];\n strSectionRadios += tmplSectionRadio(section);\n var hidden = \"\";\n if (!section.default) {\n hidden = \"GPelementHidden gpf-hidden\";\n }\n strTabContents += `
    `;\n }\n return `\n \n
    \n ${strSectionRadios}\n
    \n
    \n ${strTabContents}\n `;\n };\n\n var strTabPanelContents = \"\";\n var tmplTabPanelContent = (i, id, selected, sections) => {\n var className = \"GPtabContent fr-tabs__panel\";\n var tabindex = -1;\n if (selected) {\n className = \"GPtabContent GPtabContentSelected fr-tabs__panel fr-tabs__panel--selected\";\n tabindex = 0;\n }\n var strTabContent = \"
    \";\n if (sections) {\n strTabContent = tmplSectionRadios(id, sections);\n }\n // le listener sur le panneau permet de récuperer à partir de l'ID la catégorie (id) :\n // > \"tabpanel-${i}-panel_${id}}\".split('_')[1]\n return `\n \n
    \n ${strTabContent}\n
    \n `;\n };\n\n for (let i = 0; i < categories.length; i++) {\n const category = categories[i];\n strTabButtons += tmplTabButton(i, category.id, category.title, category.default);\n strTabPanelContents += tmplTabPanelContent(i, category.id, category.default, category.items);\n }\n\n var strContainer = `\n \n
    \n
    \n
      \n ${strTabButtons}\n
    \n ${strTabPanelContents}\n
    \n
    \n `;\n var container = stringToHTML(strContainer.trim());\n\n // ajout du shadow DOM pour creer les listeners\n const shadow = container.attachShadow({ mode : \"open\" });\n shadow.innerHTML = strContainer.trim();\n\n // event listener sur le DOM\n var panelSections = shadow.querySelectorAll(\"[role=\\\"tabpanel-section\\\"]\");\n var radios = shadow.querySelectorAll(\"[name=\\\"radio-inline\\\"]\");\n if (radios) {\n radios.forEach((radio) => {\n radio.addEventListener(\"change\", (e) => {\n for (let j = 0; j < panelSections.length; j++) {\n const section = panelSections[j];\n section.classList.add(\"gpf-hidden\");\n section.classList.add(\"GPelementHidden\");\n }\n var panel = document.getElementById(e.target.getAttribute(\"aria-controls\"));\n panel.classList.remove(\"gpf-hidden\");\n panel.classList.remove(\"GPelementHidden\");\n });\n });\n }\n var panelContents = shadow.querySelectorAll(\"[role=\\\"tabpanel\\\"]\");\n var buttons = shadow.querySelectorAll(\"[role=\\\"tabbutton\\\"]\");\n if (buttons) {\n buttons.forEach((btn) => {\n btn.addEventListener(\"click\", (e) => {\n // gestion de l'affichage\n\n // modifier les autres buttons :\n // tabindex=-1\n // aria-selected=false\n for (let i = 0; i < buttons.length; i++) {\n const button = buttons[i];\n button.setAttribute(\"tabindex\", -1);\n button.ariaSelected = false;\n button.classList.remove(\"GPtabButtonActive\");\n }\n // modif tabindex=0\n e.target.setAttribute(\"tabindex\", 0);\n // modif aria-selected=true\n e.target.ariaSelected = true;\n e.target.classList.add(\"GPtabButtonActive\");\n // modifier les autres panneaux :\n // supp class fr-tabs__panel--selected\n // modif tabindex=-1\n for (let j = 0; j < panelContents.length; j++) {\n const panel = panelContents[j];\n panel.setAttribute(\"tabindex\", -1);\n panel.classList.remove(\"fr-tabs__panel--selected\");\n panel.classList.remove(\"GPtabContentSelected\");\n panel.classList.add(\"gpf-hidden\");\n panel.classList.add(\"GPelementHidden\");\n }\n // recup id du panneau avec aria-controls\n // ajouter class fr-tabs__panel--selected\n // modif tabindex=0\n var panel = document.getElementById(e.target.getAttribute(\"aria-controls\"));\n panel.setAttribute(\"tabindex\", 0);\n panel.classList.add(\"fr-tabs__panel--selected\");\n panel.classList.add(\"GPtabContentSelected\");\n panel.classList.remove(\"gpf-hidden\");\n panel.classList.remove(\"GPelementHidden\");\n // appel\n this.onSelectCatalogTabClick(e);\n });\n });\n }\n\n return shadow;\n },\n _createCatalogContentCategoryTabContent : function (category, layersFiltered) {\n var layers = Object.values(layersFiltered); // object -> array\n\n var strElements = \"\";\n var tmplElement = (i, name, title, service, categoryId) => {\n // FIXME doit on l'utiliser le champ description en HTML ?\n\n // le listener sur l'input permet de récuperer à partir de l'ID\n // la paire name/service pour identifier la couche:\n // > \"checkboxes-${categoryId}-${i}_${name}-${service}\".split('_')[1]\n return `\n
    \n
    \n \n \n
    \n
    \n
    \n `;\n };\n\n // cf. https://www.systeme-de-design.gouv.fr/composants-et-modeles/composants/accordeon\n var tmplSection = (id, categoryId, title, count, data) => {\n // INFO\n // - la maquette ne possède pas de compteur de couches\n // - hack pour le thème dsfr, on masque l'icone collapse du thème classic\n return `\n \n
    \n

    \n \n

    \n
    \n ${data}\n
    \n
    \n `;\n };\n\n // INFO\n // les couches par catégorie sont filtrées au préalable\n // on ajoute la repartition par section des couches !\n var isSection = category.section;\n if (isSection) {\n // on procède à un tri\n // ex. tri sur le champ 'thematic'\n layers = layers.sort((a, b) => {\n return a[category.filter.field].localeCompare(b[category.filter.field]);\n });\n }\n\n var sections = {};\n for (let i = 0; i < layers.length; i++) {\n const layer = layers[i];\n // INFO\n // a t on des sections ?\n // - oui, si elle correspond au filtre, on ajoute la couche dans la section\n // sinon, on ecarte cette couche ou on la met dans la section \"Autres\"\n // - non, on ajoute directement la couche\n if (isSection) {\n var title = layer[category.filter.field];\n if (title) {\n if (!sections.hasOwnProperty(title)) {\n sections[title] = \"\";\n }\n sections[title] += tmplElement(i, layer.name, layer.title, layer.service, category.id);\n }\n } else {\n strElements += tmplElement(i, layer.name, layer.title, layer.service, category.id);\n }\n }\n\n if (isSection) {\n for (const title in sections) {\n if (Object.prototype.hasOwnProperty.call(sections, title)) {\n const data = sections[title];\n var count = [...data.matchAll(/fr-fieldset__element/g)].length;\n var id = Math.abs(Array.from(title).reduce((s, c) => Math.imul(31, s) + c.charCodeAt(0) | 0, 0));\n strElements += tmplSection(id, category.id, title, count, data);\n }\n }\n }\n var strContainer = `\n \n
    \n ${strElements}\n
    \n `;\n var container = stringToHTML(strContainer);\n\n // ajout du shadow DOM pour creer les listeners\n const shadow = container.attachShadow({ mode : \"open\" });\n shadow.innerHTML = strContainer.trim();\n\n // event listener sur le DOM\n var inputName = `checkboxes-${category.id}`;\n var inputs = shadow.querySelectorAll(\"[name=\" + \"\\\"\" + inputName + \"\\\"]\");\n if (inputs) {\n inputs.forEach((input) => {\n input.addEventListener(\"click\", (e) => {\n // appel gestionnaire d'evenement pour traitement :\n // - ajout ou pas de la couche à la carte\n // - envoi d'un evenement avec la conf tech\n this.onSelectCatalogEntryClick(e);\n });\n });\n }\n var buttonName = `button-collapse-${category.id}`;\n var buttons = shadow.querySelectorAll(\"[role=\" + \"\\\"\" + buttonName + \"\\\"]\");\n if (buttons) {\n buttons.forEach((button) => {\n button.addEventListener(\"click\", (e) => {\n e.target.ariaExpanded = !(e.target.ariaExpanded === \"true\");\n var collapse = document.getElementById(e.target.getAttribute(\"aria-controls\"));\n if (!collapse) {\n return;\n }\n if (e.target.ariaExpanded === \"true\") {\n collapse.classList.add(\"fr-collapse--expanded\");\n collapse.classList.remove(\"GPelementHidden\");\n } else {\n collapse.classList.remove(\"fr-collapse--expanded\");\n collapse.classList.add(\"GPelementHidden\");\n }\n }, false);\n });\n }\n var spanName = `button-icon-collapse-${category.id}`;\n var spans = shadow.querySelectorAll(\"[role=\" + \"\\\"\" + buttonName + \"\\\"]\");\n if (spans) {\n spans.forEach((span) => {\n span.addEventListener(\"click\", (e) => {\n e.target.parentElement.click();\n });\n });\n }\n return shadow;\n }\n\n};\n\nexport default CatalogDOM;\n","// import CSS\nimport \"../../CSS/Controls/Catalog/GPFcatalog.css\";\n\n// import OpenLayers\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\n\n// import local\nimport Utils from \"../../Utils/Helper\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Draggable from \"../../Utils/Draggable\";\nimport Config from \"../../Utils/Config\";\n\n// import local des layers\nimport GeoportalWFS from \"../../Layers/LayerWFS\";\nimport GeoportalWMS from \"../../Layers/LayerWMS\";\nimport GeoportalWMTS from \"../../Layers/LayerWMTS\";\nimport GeoportalMapBox from \"../../Layers/LayerMapBox\";\n\n// DOM\nimport CatalogDOM from \"./CatalogDOM\";\n\nvar logger = Logger.getLogger(\"widget\");\n\n/**\n * @classdesc\n *\n * Catalog Data\n *\n * @constructor\n * @alias ol.control.Catalog\n * @type {ol.control.Catalog}\n * @extends {ol.control.Control}\n * @param {Object} options - options for function call.\n *\n * @fires catalog:loaded\n * @fires catalog:layer:add\n * @fires catalog:layer:remove\n * @see schema : https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/doc/schema.json\n * @see jsdoc : https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/doc/schema.jsdoc\n * @example\n * var widget = new ol.control.Catalog({\n * collapsed : true,\n * draggable : false,\n * titlePrimary : \"\",\n * titleSecondary : \"Gérer vos couches de données\",\n * layerLabel : \"title\",\n * layerFilter : [],\n * search : {\n * display : true,\n * criteria : [\n * \"name\",\n * \"title\",\n * \"description\"\n * ]\n * },\n * addToMap : true,\n * categories : [\n * {\n * title : \"Données\",\n * id : \"data\",\n * default : true,\n * filter : null\n * // sous categories\n * // items : [\n * // {\n * // title : \"\",\n * // default : true,\n * // filter : {\n * // field : \"\",\n * // value : \"\"\n * // }\n * // }\n * // ]\n * }\n * ],\n * configuration : {\n * type : \"json\", // type:\"service\"\n * urls : [ // data:{}\n * \"https://raw.githubusercontent.com/IGNF/cartes.gouv.fr-entree-carto/main/public/data/layers.json\",\n * \"https://raw.githubusercontent.com/IGNF/cartes.gouv.fr-entree-carto/main/public/data/edito.json\"\n * ]\n * }\n * });\n * widget.on(\"catalog:loaded\", (e) => { console.log(e.data); });\n * widget.on(\"catalog:layer:add\", (e) => { console.log(e); });\n * widget.on(\"catalog:layer:remove\", (e) => { console.log(e); });\n * map.addControl(widget);\n *\n * @todo filtrage des couches\n * @todo type:service\n * @todo validation du schema\n */\nvar Catalog = class Catalog extends Control {\n\n /**\n * See {@link ol.control.Catalog}\n * @module Catalog\n * @alias module:~controls/Catalog\n * @param {Object} [options] - options\n * @example\n * import Catalog from \"gpf-ext-ol/controls/Catalog\"\n * ou\n * import { Catalog } from \"gpf-ext-ol\"\n *\n * var widget = new Catalog({\n * collapsed : true,\n * draggable : false,\n * titlePrimary : \"\",\n * titleSecondary : \"Gérer vos couches de données\",\n * layerLabel : \"title\",\n * layerFilter : [],\n * search : {\n * display : true,\n * criteria : [\n * \"name\",\n * \"title\",\n * \"description\"\n * ]\n * },\n * addToMap : true,\n * categories : [\n * {\n * title : \"Données\",\n * id : \"data\",\n * default : true,\n * filter : null\n * // sous categories\n * // items : [\n * // {\n * // title : \"\",\n * // default : true,\n * // filter : {\n * // field : \"\",\n * // value : \"\"\n * // }\n * // }\n * // ]\n * }\n * ],\n * configuration : {\n * type : \"json\", // type:\"service\"\n * urls : [ // data:{}\n * \"https://raw.githubusercontent.com/IGNF/cartes.gouv.fr-entree-carto/main/public/data/layers.json\",\n * \"https://raw.githubusercontent.com/IGNF/cartes.gouv.fr-entree-carto/main/public/data/edito.json\"\n * ]\n * }\n * });\n * widget.on(\"catalog:loaded\", (e) => { console.log(e.data); });\n * widget.on(\"catalog:layer:add\", (e) => { console.log(e); });\n * widget.on(\"catalog:layer:remove\", (e) => { console.log(e); });\n * map.addControl(widget);\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof Catalog)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"Catalog\";\n\n // initialisation du composant\n this.initialize(options);\n\n // Widget main DOM container\n this.container = this.initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this.container) : this.element = this.container;\n\n // INFO\n // le DOM est mis en place sans la liste des couches du catalogue\n // car l'opération peut être async si un download est demandé.\n // une patience permet d'attendre que la liste soit récupérée.\n this.showWaiting();\n this.initLayersList()\n .then((data) => {\n logger.trace(this, data);\n this.hideWaiting();\n /**\n * event triggered when data is loaded\n *\n * @event catalog:loaded\n * @property {Object} type - event\n * @property {Object} data - data\n * @property {Object} target - instance Catalog\n * @example\n * Catalog.on(\"catalog:loaded\", function (e) {\n * console.log(e.data);\n * })\n */\n this.dispatchEvent({\n type : \"catalog:loaded\",\n data : data\n });\n })\n .catch((e) => {\n this.hideWaiting();\n // TODO gestion des erreurs\n logger.error(e);\n });\n\n return this;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n // INFO\n // on verifie les couches déjà présentes sur la cartes\n this.on(\"catalog:loaded\", this.initMapLayers);\n\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this.panelCatalogContainer,\n this.panelCatalogHeaderContainer,\n map.getTargetElement()\n );\n }\n\n // mode \"collapsed\"\n if (!this.collapsed) {\n this.buttonCatalogShow.setAttribute(\"aria-pressed\", true);\n }\n\n // ajout des evenements sur la carte\n if (this.auto) {\n this.addEventsListeners(map);\n }\n } else {\n this.un(\"catalog:loaded\", this.initMapLayers);\n // suppression des evenements sur la carte\n // pour les futurs suppressions de couche\n if (this.auto) {\n this.removeEventsListeners();\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n // ################################################################### //\n // ################### getters / setters ############################# //\n // ################################################################### //\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // #################### privates methods ############################# //\n // ################################################################### //\n\n /**\n * Initialize Catalog control (called by Catalog constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n this.uid = options.id || SelectorID.generate();\n\n // set default options\n this.options = {\n collapsed : true,\n draggable : false,\n auto : true,\n titlePrimary : \"Gérer vos couches de données\",\n titleSecondary : \"\",\n layerLabel : \"title\",\n layerFilter : [], // TODO filtre\n search : {\n display : true,\n criteria : [\n \"name\",\n \"title\",\n \"description\"\n ]\n },\n addToMap : true,\n categories : [\n {\n title : \"Données\",\n id : \"data\",\n default : true,\n filter : null\n // INFO\n // > sous categories avec ou sans section\n // items : [\n // {\n // title : \"\",\n // default : true,\n // section : true,\n // filter : {\n // field : \"\",\n // value : \"\"\n // }\n // }\n // ]\n }\n ],\n configuration : {\n type : \"json\", // TODO type:\"service\"\n urls : [ // data:{}\n \"https://raw.githubusercontent.com/IGNF/cartes.gouv.fr-entree-carto/main/public/data/layers.json\",\n \"https://raw.githubusercontent.com/IGNF/cartes.gouv.fr-entree-carto/main/public/data/edito.json\"\n ]\n }\n };\n\n // merge with user options\n Utils.assign(this.options, options);\n\n /**\n * specify if control is collapsed (true) or not (false)\n * @type {Boolean}\n */\n this.collapsed = this.options.collapsed;\n\n /**\n * specify if control is draggable (true) or not (false)\n * @type {Boolean}\n */\n this.draggable = this.options.draggable;\n\n /**\n * specify if control add some stuff auto\n * @type {Boolean}\n */\n this.auto = this.options.auto;\n\n /**\n * specify some events listeners\n * @type {Array}\n */\n this.eventsListeners = [];\n\n // DOM\n this.buttonCatalogShow = null;\n this.panelCatalogContainer = null;\n this.panelCatalogHeaderContainer = null; // usefull for the dragNdrop\n this.buttonCatalogClose = null;\n this.contentCatalogContainer = null;\n this.waitingContainer = null;\n\n /**\n * specify all list of layers (configuration service)\n * @type {Object}\n * @see [schema](https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/doc/schema.json)\n * @see [jsdoc](https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/doc/schema.jsdoc)\n */\n this.layersList = [];\n\n /**\n * specify all categories\n * @type {Array}\n */\n this.categories = this.options.categories.map((cat) => {\n // INFO\n // on reecrit correctement les categories\n // ex. properties mal renseignées tels que id ou default\n var items = cat.items;\n if (cat.items) {\n items = cat.items.map((i) => {\n return {\n title : i.title,\n id : i.id || Math.abs(Array.from(i.title).reduce((s, c) => Math.imul(31, s) + c.charCodeAt(0) | 0, 0)),\n section : i.hasOwnProperty(\"section\") ? i.section : false,\n default : i.hasOwnProperty(\"default\") ? i.default : false,\n filter : i.filter || null,\n };\n });\n }\n return {\n title : cat.title,\n id : cat.id || Math.abs(Array.from(cat.title).reduce((s, c) => Math.imul(31, s) + c.charCodeAt(0) | 0, 0)),\n default : cat.hasOwnProperty(\"default\") ? cat.default : false,\n filter : cat.filter || null,\n items : items || null\n };\n });\n\n /**\n * specify the current category selected\n * @type {String}\n */\n this.categoryId = (() => {\n // INFO\n // par défaut, la categorie affichée sera la 1ere\n // sauf si on a specifié une categorie avec l'attribut 'default:true'\n var index = this.categories.findIndex((category) => category.default);\n if (index === -1) {\n index = 0;\n this.categories[index].default = true;\n }\n return this.categories[index].id;\n })();\n\n /**\n * list of layers added on map by key pair : name/service\n * @type {Object}\n * @example\n * {\n * \"GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2:WMTS\" : ol/layer/Tile,\n * \"PLAN.IGN$GEOPORTAIL:TMS\" : ol/layer/VectorTile\n * }\n */\n this.layersListOnMap = {};\n }\n\n /**\n * Create control main container (DOM initialize)\n *\n * @returns {DOMElement} DOM element\n * @private\n */\n initContainer () {\n // create main container\n var container = this._createMainContainerElement();\n\n var picto = this.buttonCatalogShow = this._createShowCatalogPictoElement();\n container.appendChild(picto);\n\n // panel\n var widgetPanel = this.panelCatalogContainer = this._createCatalogPanelElement();\n var widgetPanelDiv = this._createCatalogPanelDivElement();\n widgetPanel.appendChild(widgetPanelDiv);\n\n // header\n var widgetPanelHeader = this.panelCatalogHeaderContainer = this._createCatalogPanelHeaderElement();\n // title\n var widgetPanelTitle = this._createCatalogPanelTitleElement(this.options.titlePrimary);\n widgetPanelHeader.appendChild(widgetPanelTitle);\n // close picto\n var widgetCloseBtn = this.buttonCatalogClose = this._createCatalogPanelCloseElement();\n widgetPanelHeader.appendChild(widgetCloseBtn);\n widgetPanelDiv.appendChild(widgetPanelHeader);\n\n var widgetContentDiv = this._createCatalogPanelContentDivElement();\n\n // container for the custom dynamic code (cf. initLayersList())\n var widgetContentElementDiv = this.contentCatalogContainer = this._createCatalogContentDivElement();\n widgetContentElementDiv.appendChild(this._createCatalogContentTitleElement(this.options.titleSecondary));\n if (this.options.search.display) {\n widgetContentElementDiv.appendChild(this._createCatalogContentSearchElement());\n }\n // waiting\n var waiting = this.waitingContainer = this._createCatalogWaitingElement();\n widgetContentElementDiv.appendChild(waiting);\n\n widgetContentDiv.appendChild(widgetContentElementDiv);\n widgetPanelDiv.appendChild(widgetContentDiv);\n\n container.appendChild(widgetPanel);\n\n return container;\n }\n\n /**\n * ...\n * @private\n */\n initMapLayers () {\n var map = this.getMap();\n if (!map) {\n return;\n }\n var layers = map.getLayers();\n layers.forEach((layer) => {\n if (layer.name && layer.service) {\n // sauvegarde\n this.layersListOnMap[layer.name + \":\" + layer.service] = layer;\n // cocher la case dans le catalogue\n var inputs = document.querySelectorAll(`input[data-layer=\"${layer.name}:${layer.service}\"]`);\n if (inputs) {\n inputs.forEach((input) => {\n input.checked = true;\n });\n }\n }\n });\n }\n\n /**\n * Configuration loading\n *\n * @returns {Promise} - promise\n * @private\n */\n async initLayersList () {\n var data = null; // reponse brute du service\n\n var self = this;\n const createCatalogContentEntries = (layers) => {\n var container = self.contentCatalogContainer;\n\n var widgetContentEntryTabs = self._createCatalogContentCategoriesTabs(this.categories);\n container.appendChild(widgetContentEntryTabs);\n\n var categories = []; // remise à plat des catégories / sous-categories\n self.categories.forEach((category) => {\n if (category.items) {\n for (let i = 0; i < category.items.length; i++) {\n const element = category.items[i];\n categories.push(element);\n }\n } else {\n categories.push(category);\n }\n });\n // INFO\n // les containers de contenu sont definis à partir\n // de l'ordre des catégories / sous-categories\n // il y'a autant de catégories / sous-categories que de containers\n var contents = container.querySelectorAll(\".tabcontent\");\n for (let i = 0; i < contents.length; i++) {\n const content = contents[i];\n var layersCategorised = getLayersByCategory(categories[i], layers);\n content.appendChild(self._createCatalogContentCategoryTabContent(categories[i], layersCategorised));\n }\n };\n\n // traitement du contenu (liste de couches) d'une categorie\n // en fonction d'un filtre\n const getLayersByCategory = (category, layers) => {\n // INFO\n // comment gerer les listes de layers filtrées pour chaque categorie ?\n // on doit les stocker si l'on souhaite faire des requêtes\n // avec l'outil de recherche par la suite\n var layersCategorised = layers;\n var filter = category.filter;\n if (filter) {\n layersCategorised = {};\n for (const key in layers) {\n if (Object.prototype.hasOwnProperty.call(layers, key)) {\n const layer = layers[key];\n if (layer[filter.field]) { // FIXME impl. clef multiple : property.property !\n var condition = Array.isArray(filter.value) ? filter.value.includes(layer[filter.field].toString()) : (filter.value === \"*\" || layer[filter.field].toString() === filter.value);\n if (condition) {\n layersCategorised[key] = layer;\n // on ajoute l'appartenance de la couche à une categorie\n this.layersList[key].categories.push(category.id);\n }\n }\n }\n }\n }\n\n return layersCategorised;\n };\n\n // TODO filtre sur la liste de couches à prendre en compte\n const getLayersByFilter = (filter, layers) => {\n // INFO\n // definir les filtres possibles :\n // - sur un champ spécifique : ex field:\"service\"\n // - sur des valeurs : ex. value:\"[WMS,TMS,WMTS]\" ou \"*\"\n // - ...\n return layers;\n };\n\n if (this.options.configuration.data) {\n data = this.options.configuration.data || {};\n\n // TODO gestion du type service\n\n if (Config.isConfigLoaded()) {\n Utils.mergeParams(data, Config.configuration);\n }\n\n // INFO\n // on en profite pour ajouter des properties :\n // - service : utile pour identifier la couche\n // de manière unique : name + service\n // - categories : utile pour definir l'appartenance d'une couche\n // à une ou plusieurs categories\n for (const key in data.layers) {\n if (Object.prototype.hasOwnProperty.call(data.layers, key)) {\n const layer = data.layers[key];\n var service = layer.serviceParams.id.split(\":\").slice(-1)[0]; // beurk!\n layer.service = service; // new proprerty !\n layer.categories = []; // new property ! vide pour le moment\n }\n }\n\n // on applique un filtre sur la liste des couches\n var layers = getLayersByFilter(this.options.layerFilter, data.layers);\n\n // sauvegarde de la liste des couches\n this.layersList = layers;\n\n createCatalogContentEntries(layers);\n return new Promise((resolve, reject) => {\n resolve(data);\n });\n }\n\n if (this.options.configuration.urls) {\n var fetchUrls = [];\n for (let i = 0; i < this.options.configuration.urls.length; i++) {\n const url = this.options.configuration.urls[i];\n const fetchUrl = function () {\n return fetch(url, {})\n .then(function (response) {\n if (response.ok) {\n return response.json()\n .then(function (json) {\n return json;\n })\n .catch(error => {\n logger.warn(\"fetch json exception :\", error);\n });\n } else {\n var err = new Error(\"HTTP status code: \" + response.status);\n throw err;\n }\n })\n .catch(error => {\n return new Promise((resolve, reject) => {\n logger.error(\"fetch json exception :\", error);\n reject(error);\n });\n });\n };\n fetchUrls.push(fetchUrl());\n }\n\n try {\n const values = await Promise.all(fetchUrls);\n\n data = values[0];\n for (let i = 1; i < values.length; i++) {\n const value = values[i];\n Utils.mergeParams(data, value);\n }\n\n // TODO gestion du type service\n\n if (Config.isConfigLoaded()) {\n Utils.mergeParams(data, Config.configuration);\n }\n\n // INFO\n // on en profite pour ajouter des properties :\n // - service : utile pour identifier la couche\n // de manière unique : name + service\n // - categories : utile pour definir l'appartenance d'une couche\n // à une ou plusieurs categories\n for (const key in data.layers) {\n if (Object.prototype.hasOwnProperty.call(data.layers, key)) {\n const layer = data.layers[key];\n var service = layer.serviceParams.id.split(\":\").slice(-1)[0]; // beurk!\n layer.service = service; // new proprerty !\n layer.categories = []; // new property ! vide pour le moment\n }\n }\n\n // on applique un filtre sur la liste des couches\n var layers = getLayersByFilter(this.options.layerFilter, data.layers);\n\n // sauvegarde de la liste des couches\n this.layersList = layers;\n\n createCatalogContentEntries(layers);\n return await new Promise((resolve, reject) => {\n resolve(data);\n });\n } catch (e) {\n return await new Promise((resolve, reject) => {\n reject(e);\n });\n }\n }\n }\n\n // ################################################################### //\n // ######################## methods on map ########################### //\n // ################################################################### //\n\n /**\n * Add events listeners on map (called by setMap)\n *\n * @param {*} map - map\n * @private\n */\n addEventsListeners (map) {\n var self = this;\n this.eventsListeners[\"map:add\"] = function (e) {\n logger.trace(e);\n var name = e.element.name;\n var service = e.element.service;\n // sauvegarde\n self.layersListOnMap[name + \":\" + service] = e.element;\n // cocher la case dans le catalogue\n var inputs = document.querySelectorAll(`input[data-layer=\"${name}:${service}\"]`);\n if (inputs) {\n inputs.forEach((input) => {\n input.checked = true;\n });\n }\n };\n // the event custom:action is associate with an openlayers event\n map.getLayers().on(\"add\", this.eventsListeners[\"map:add\"]);\n\n this.eventsListeners[\"map:remove\"] = function (e) {\n logger.trace(e);\n var name = e.element.name;\n var service = e.element.service;\n // sauvegarde\n delete self.layersListOnMap[name + \":\" + service];\n // decocher la case dans le catalogue\n var inputs = document.querySelectorAll(`input[data-layer=\"${name}:${service}\"]`);\n if (inputs) {\n inputs.forEach((input) => {\n input.checked = false;\n });\n }\n };\n // the event custom:action is associate with an openlayers event\n map.getLayers().on(\"remove\", this.eventsListeners[\"map:remove\"]);\n }\n\n /**\n * Remove events listeners on map (called by setMap)\n * @private\n */\n removeEventsListeners () {\n var map = this.getMap();\n map.getLayers().un(\"add\", this.eventsListeners[\"map:add\"]);\n delete this.eventsListeners[\"map:add\"];\n map.getLayers().un(\"remove\", this.eventsListeners[\"map:remove\"]);\n delete this.eventsListeners[\"map:remove\"];\n }\n\n /**\n * Add layer on map\n *\n * @param {*} name - layer name\n * @param {*} service - layer service\n * @returns {Object} - layer config\n * @private\n */\n addLayer (name, service) {\n var layerConf = null;\n var layer = null;\n switch (service) {\n case \"WMS\":\n layer = new GeoportalWMS({\n layer : name\n });\n break;\n case \"WMTS\":\n layer = new GeoportalWMTS({\n layer : name\n });\n break;\n case \"TMS\":\n layer = new GeoportalMapBox({\n layer : name\n });\n break;\n case \"WFS\":\n layer = new GeoportalWFS({\n layer : name\n });\n break;\n default:\n break;\n }\n\n if (layer) {\n var map = this.getMap();\n map.addLayer(layer);\n // sauvegarde\n this.layersListOnMap[name + \":\" + service] = layer;\n // layer configuration\n layerConf = layer.getConfiguration();\n }\n\n return layerConf;\n }\n\n /**\n * Remove Layer on map\n *\n * @param {*} name - layer name\n * @param {*} service - layer service\n * @returns {Object} - layer config\n * @private\n */\n removeLayer (name, service) {\n var layerConf = null;\n var layer = this.layersListOnMap[name + \":\" + service];\n if (layer) {\n // layer configuration\n layerConf = layer.getConfiguration();\n var map = this.getMap();\n map.removeLayer(layer);\n // sauvegarde\n delete this.layersListOnMap[name + \":\" + service];\n }\n\n return layerConf;\n }\n\n // ################################################################### //\n // ######################## methods waiting ########################## //\n // ################################################################### //\n\n hideWaiting () {\n // /* GPwaitingContainer */\n // /* gpf-waiting */\n this.waitingContainer.className = \"GPwaitingContainerHidden gpf-waiting--hidden\";\n }\n\n showWaiting () {\n this.waitingContainer.className = \"GPwaitingContainerVisible gpf-waiting--visible\";\n }\n // ################################################################### //\n // ######################## methods search ########################### //\n // ################################################################### //\n\n /**\n * Reset filtered layers\n * @private\n */\n resetFilteredLayersList () {\n // INFO\n // l'outil de recherche filtre les couches via un critère de recherche.\n // l'affichage des couches filtrées est realisé en cachant\n // les couches non conforme au critère.\n // le parametre pour masquer les couches : hidden\n for (const key in this.layersList) {\n if (Object.prototype.hasOwnProperty.call(this.layersList, key)) {\n const layer = this.layersList[key];\n layer.hidden = false;\n this.updateFilteredLayersListDOM(layer.name, layer.service, layer.hidden);\n }\n }\n }\n\n /**\n * Set filtered layers\n *\n * @param {*} value - value\n * @private\n */\n setFilteredLayersList (value) {\n var criteria = this.options.search.criteria;\n for (const key in this.layersList) {\n if (Object.prototype.hasOwnProperty.call(this.layersList, key)) {\n const layer = this.layersList[key];\n var words = \"\";\n for (let i = 0; i < criteria.length; i++) {\n const c = criteria[i];\n if (layer[c]) {\n words += layer[c].toLowerCase();\n }\n }\n layer.hidden = !words.includes(value.toLowerCase());\n this.updateFilteredLayersListDOM(layer.name, layer.service, layer.hidden);\n }\n }\n }\n\n /**\n * Update DOM layer visibility\n *\n * @param {*} id - ...\n * @param {*} service - ...\n * @param {*} hidden - ...\n * @private\n */\n updateFilteredLayersListDOM (id, service, hidden) {\n var categories = []; // remise à plat des catégories / sous-categories\n this.categories.forEach((category) => {\n if (category.items) {\n for (let i = 0; i < category.items.length; i++) {\n const element = category.items[i];\n categories.push(element.id);\n }\n } else {\n categories.push(category.id);\n }\n });\n\n for (let i = 0; i < categories.length; i++) {\n const category = categories[i];\n var container = document.getElementById(`fieldset-${category}_${id}-${service}`);\n if (container) {\n if (hidden) {\n container.classList.add(\"gpf-hidden\");\n container.classList.add(\"GPelementHidden\");\n } else {\n container.classList.remove(\"gpf-hidden\");\n container.classList.remove(\"GPelementHidden\");\n }\n }\n }\n }\n\n // ################################################################### //\n // ######################## event dom ################################ //\n // ################################################################### //\n\n /**\n * ...\n * @param {*} e - ...\n * @private\n */\n onShowCatalogClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n logger.trace(e);\n }\n\n /**\n * ...\n * @param {*} e - ...\n * @private\n */\n onCloseCatalogClick (e) {\n logger.trace(e);\n }\n\n /**\n * ...\n * @param {*} e - ...\n * @private\n */\n onSelectCatalogTabClick (e) {\n logger.trace(e);\n // sauvegarde de la categorie courrante pour la gestion de la recherche\n // de couches dans la liste associée à la categorie\n var id = e.target.id;\n var category = id.split(\"_\")[1];\n this.categoryId = category;\n }\n\n /**\n * ...\n * @param {*} e - ...\n * @private\n */\n onSelectCatalogEntryClick (e) {\n logger.trace(e);\n // appel gestionnaire d'evenement pour traitement :\n // - ajout ou pas de la couche à la carte\n // - envoi d'un evenement avec la conf tech\n\n var ds = e.target.dataset.layer;\n var name = ds.substring(0, ds.lastIndexOf(\":\"));\n var service = ds.substring(ds.lastIndexOf(\":\") + 1);\n var layer = {}; // TODO fournir la conf tech\n\n if (e.target.checked) {\n if (this.options.addToMap) {\n layer = this.addLayer(name, service);\n }\n /**\n * event triggered when layer is added\n *\n * @event catalog:layer:add\n * @property {Object} type - event\n * @property {String} name - layer name\n * @property {String} service - service name\n * @property {Object} layer - layer conf\n * @property {Object} target - instance Catalog\n * @example\n * Catalog.on(\"catalog:layer:add\", function (e) {\n * console.log(e.layer);\n * })\n */\n this.dispatchEvent({\n type : \"catalog:layer:add\",\n name : name,\n service : service,\n layer : layer\n });\n } else {\n if (this.options.addToMap) {\n layer = this.removeLayer(name, service);\n }\n /**\n * event triggered when layer is removed\n *\n * @event catalog:layer:remove\n * @property {Object} type - event\n * @property {String} name - layer name\n * @property {String} service - service name\n * @property {Object} layer - layer conf\n * @property {Object} target - instance Catalog\n * @example\n * Catalog.on(\"catalog:layer:remove\", function (e) {\n * console.log(e.layer);\n * })\n */\n this.dispatchEvent({\n type : \"catalog:layer:remove\",\n name : name,\n service : service,\n layer : layer\n });\n }\n }\n\n /**\n *\n * @private\n */\n onSearchCatalogButtonClick () {\n // INFO\n // la saisie du critère de recherche doit filtrer la liste des couches affichée\n // dans l'onglet courant.\n // on masque les entrées non conforme\n // - en ajoutant la classe 'gpf-hidden' dans le DOM\n // - en sauvegardant l'état avec la property 'hidden:true'\n var value = document.getElementById(\"search-input\").value;\n this.setFilteredLayersList(value);\n }\n\n /**\n *\n * @private\n */\n onSearchCatalogInputChange () {\n this.onSearchCatalogButtonClick();\n }\n\n};\n\n// on récupère les méthodes de la classe DOM\nObject.assign(Catalog.prototype, CatalogDOM);\nObject.assign(Catalog.prototype, Widget);\n\nexport default Catalog;\n\n// Expose Export as ol.control.Catalog (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.Catalog = Catalog;\n}\n","import Gp from \"geoportal-access-lib\";\n\n(function () {\n var scripts = document.getElementsByTagName(\"script\");\n\n var key = scripts[scripts.length - 1].getAttribute(\"data-key\");\n var url = scripts[scripts.length - 1].getAttribute(\"data-url\");\n var timeout = scripts[scripts.length - 1].getAttribute(\"data-timeout\");\n\n // callback\n var success = function (data) {\n // Pas de messages en mode prod\n console.log(\"GetConfig success!\");\n window.Gp.Config = data;\n };\n\n // callback\n var error = function (e) {\n throw new Error(\"Configuration load failed : \" + e.message);\n };\n\n if (!key && !url) {\n // pas de message d'information !\n // console.log(\"WARNING : parameters missing 'data-key' and 'data-url', the loading of configuration can not be done !\");\n return;\n }\n\n var options = {\n apiKey : key,\n sync : true,\n onSuccess : success,\n onFailure : error\n };\n\n if (url) {\n options.customConfigFile = url;\n options.callbackSuffix = \"\";\n }\n\n if (timeout) {\n options.timeOut = timeout;\n }\n\n // test d'existance de la varibale globale Gp.Config\n if (window.Gp) {\n // appel du service\n Gp.Services.getConfig(options);\n }\n})();\n","import CRS from \"./CRS\";\n\n/**\n * Autoload function that loads defs into proj4\n * and adds proj4 defs into ol.\n */\n(function () {\n // if you want to load all defs into proj4\n // you can call :\n // inside code, CRS.load()\n // or\n // outside code, Gp.olExtended.includeProjections()\n // but you can call only once...\n\n // load default defs into proj4\n CRS.loadByDefault();\n // and register defs into openlayers\n CRS.overload();\n})();\n","/**\n* Global variable Gp.\n*\n* @module Gp\n* @alias Gp\n* @description\n*\n* This is the global variable that is exposed in the browser environment.\n* Content is composed of constructor, functions and properties...\n*\n* > Config: (...)\n*\n* > ColorUtils: (...)\n* > LayerUtils: (...)\n* > MathUtils: (...)\n* > ProxyUtils: (...)\n* > Logger: (...)\n*\n* > olExtended: (...)\n*\n* > date: \"YYYY-MM-DD\"\n* > version: \"X.X.X\"\n*\n* > Error: (...)\n* > Helper: (...)\n* > Protocols: (...)\n* > Services: (...)\n* > servicesDate: \"YYYY-MM-DD\"\n* > servicesVersion: \"X.X.X\"\n*\n* **Note :**\n*\n* function to add projections in 'proj4',\n* they are exposed in the global variable 'ol':\n* > Gp.olExtended.includeProjections()\n*\n* You can test it :\n* - ol.proj.proj4(\"EPSG:43260\")\n*\n* Projections include by default into proj4 and ol :\n* > WGS84\n* > ['EPSG:4326']\n* > ['EPSG:3785'], ['EPSG:3857'],\n* > ['EPSG:900913'], ['EPSG:102113']\n*\n* and\n*\n* > [\"EPSG:2154\"],\n* > [\"EPSG:27571\"], [\"EPSG:27572\"], [\"EPSG:27573\"], [\"EPSG:2757\"],\n* > [\"CRS:84\"],\n* > [\"IGNF:LAMB93\"],\n* > [\"IGNF:LAMBE\"],\n* > [\"IGNF:LAMB1\"], [\"IGNF:LAMB2\"], [\"IGNF:LAMB3\"], [\"IGNF:LAMB4\"],\n* > [\"IGNF:RGF93G\"],\n* > [\"IGNF:WGS84G\"]\n*\n* The following variables are aslo global :\n* - ol,\n* - eventbus\n*/\n\nimport Pkg from \"../../package.json\";\n\nimport GfiUtils from \"./Controls/Utils/Gfi\";\n\nimport KML from \"./Formats/KML\";\nimport GPX from \"./Formats/GPX\";\nimport GeoJSON from \"./Formats/GeoJSON\";\n\nimport WMTS from \"./Sources/WMTS\";\nimport SourceWMTS from \"./Layers/SourceWMTS\";\nimport SourceWMS from \"./Layers/SourceWMS\";\nimport SourceWFS from \"./Layers/SourceWFS\";\nimport LayerWMTS from \"./Layers/LayerWMTS\";\nimport LayerWMS from \"./Layers/LayerWMS\";\nimport LayerWFS from \"./Layers/LayerWFS\";\nimport LayerMapBox from \"./Layers/LayerMapBox\";\n\nimport LayerSwitcher from \"./Controls/LayerSwitcher/LayerSwitcher\";\nimport GetFeatureInfo from \"./Controls/GetFeatureInfo/GetFeatureInfo\";\nimport SearchEngine from \"./Controls/SearchEngine/SearchEngine\";\nimport MousePosition from \"./Controls/MousePosition/MousePosition\";\nimport Drawing from \"./Controls/Drawing/Drawing\";\nimport Route from \"./Controls/Route/Route\";\nimport Isocurve from \"./Controls/Isocurve/Isocurve\";\nimport ReverseGeocode from \"./Controls/ReverseGeocode/ReverseGeocode\";\nimport LocationSelector from \"./Controls/LocationSelector/LocationSelector\";\nimport LayerImport from \"./Controls/LayerImport/LayerImport\";\nimport GeoportalAttribution from \"./Controls/Attribution/GeoportalAttribution\";\nimport Markers from \"./Controls/Utils/Markers\";\nimport ElevationPath from \"./Controls/ElevationPath/ElevationPath\";\nimport MeasureLength from \"./Controls/Measures/MeasureLength\";\nimport MeasureArea from \"./Controls/Measures/MeasureArea\";\nimport MeasureAzimuth from \"./Controls/Measures/MeasureAzimuth\";\nimport ButtonExport from \"./Controls/Export/Export\";\nimport GeoportalZoom from \"./Controls/Zoom/GeoportalZoom\";\nimport GeoportalFullScreen from \"./Controls/FullScreen/GeoportalFullScreen\";\nimport GeoportalOverviewMap from \"./Controls/OverviewMap/GeoportalOverviewMap\";\nimport Legends from \"./Controls/Legends/Legends\";\nimport Territories from \"./Controls/Territories/Territories\";\nimport ControlList from \"./Controls/ControlList/ControlList\";\nimport Catalog from \"./Controls/Catalog/Catalog\";\n\nimport Proj4 from \"proj4\";\n\nimport Style from \"./Controls/Editor/Style\";\nimport Filter from \"./Controls/Editor/Filter\";\nimport Layer from \"./Controls/Editor/Layer\";\nimport Themes from \"./Controls/Editor/Themes\";\nimport Legend from \"./Controls/Editor/Legend\";\nimport Group from \"./Controls/Editor/Group\";\nimport Search from \"./Controls/Editor/Search\";\nimport Editor from \"./Controls/Editor/Editor\";\n\nimport HelperUtils from \"./Utils/Helper\";\nimport LayerUtils from \"./Utils/LayerUtils\";\nimport ProxyUtils from \"./Utils/ProxyUtils\";\nimport ColorUtils from \"./Utils/ColorUtils\";\nimport MathUtils from \"./Utils/MathUtils\";\nimport Logger from \"./Utils/LoggerByDefault\";\nimport Parser from \"./Utils/Parser\";\nimport Register from \"./Utils/Register\";\n\n// Les autoload...\nimport \"./Utils/AutoLoadConfig\";\nimport \"./CRS/AutoLoadCRS\";\n\n// export des services\nimport Gp from \"geoportal-access-lib\";\n\nimport CRS from \"./CRS/CRS\";\n\nvar Services = Gp.Services;\nvar Error = Gp.Error;\nvar Helper = Gp.Helper;\nvar Protocols = Gp.Protocols;\n\nvar servicesDate = Gp.servicesDate;\nvar servicesVersion = Gp.servicesVersion;\n\n// HACK !?\nvar Config = window.Gp.Config || {};\nObject.defineProperty(Gp, \"Config\", {\n get () {\n return Config;\n },\n set (value) {\n Config = value;\n },\n enumerable : true,\n configurable : true,\n});\nexport { Config };\n\nexport {\n /** Services\n * @see {@link http://ignf.github.io/geoportal-access-lib/current/jsdoc/module-Services.html|geoportal-access-lib}\n */\n Services,\n /** Error\n * @see {@link http://ignf.github.io/geoportal-access-lib/current/jsdoc/Gp.Error.html|geoportal-access-lib}\n */\n Error,\n /** Helper\n * @see {@link http://ignf.github.io/geoportal-access-lib/current/jsdoc/module-Helper.html|geoportal-access-lib}\n */\n Helper,\n /** Protocols\n * @see {@link http://ignf.github.io/geoportal-access-lib/current/jsdoc/module-XHR.html|geoportal-access-lib}\n */\n Protocols,\n /** servicesDate\n * @see {@link http://ignf.github.io/geoportal-access-lib/current/jsdoc/module-Gp.html|geoportal-access-lib}\n */\n servicesDate,\n /** servicesVersion\n * @see {@link http://ignf.github.io/geoportal-access-lib/current/jsdoc/module-Gp.html|geoportal-access-lib}\n */\n servicesVersion\n};\n\n/** Version */\nexport const version = Pkg.version;\n/** Publication date */\nexport const date = Pkg.date;\n\nexport {\n /** @see Gp.HelperUtils */\n HelperUtils,\n /** @see Gp.LayerUtils */\n LayerUtils,\n /** @see Gp.ProxyUtils */\n ProxyUtils,\n /** @see Gp.ColorUtils */\n ColorUtils,\n /** @see Gp.MathUtils */\n MathUtils,\n /** @see Gp.Logger */\n Logger,\n /** @see Gp.Parser */\n Parser,\n /** @see Gp.Register */\n Register\n};\n\nfunction deepCopy (source, target) {\n // Implementing Tail Call Elimination\n function tce (source, target) {\n for (var prop in source) {\n if (source.hasOwnProperty(prop)) {\n if (!target.hasOwnProperty(prop)) {\n target[prop] = source[prop];\n } else if (typeof source[prop] === \"object\") {\n tce(source[prop], target[prop]);\n }\n }\n }\n }\n return tce(source, target);\n}\n\nvar Ol = {};\n\n// FIXME : est il utile d'avoir un ns particulier \"gp\" ?\nOl.gp = {};\nOl.gp.GfiUtils = GfiUtils;\n\n// proposer une fonction de chargement des projections !\nOl.includeProjections = CRS.load;\n\n// Editeur MapBox\nOl.style = Ol.style || {};\nOl.style.Editor = Editor;\nOl.style.editor = Ol.style.editor || {};\nOl.style.editor.Style = Style;\nOl.style.editor.Filter = Filter;\nOl.style.editor.Layer = Layer;\nOl.style.editor.Legend = Legend;\nOl.style.editor.Group = Group;\nOl.style.editor.Themes = Themes;\nOl.style.editor.Search = Search;\n\n// Rajout des propriétés dans le namespace Ol\nOl.format = Ol.format || {};\nOl.format.KMLExtended = KML;\nOl.format.GPXExtended = GPX;\nOl.format.GeoJSONExtended = GeoJSON;\n\nOl.source = Ol.source || {};\nOl.source.WMTSExtended = WMTS;\nOl.source.GeoportalWMTS = SourceWMTS;\nOl.source.GeoportalWMS = SourceWMS;\nOl.source.GeoportalWFS = SourceWFS;\n\nOl.layer = Ol.layer || {};\nOl.layer.GeoportalWMTS = LayerWMTS;\nOl.layer.GeoportalWMS = LayerWMS;\nOl.layer.GeoportalWFS = LayerWFS;\nOl.layer.GeoportalMapBox = LayerMapBox;\n\nOl.control = Ol.control || {};\nOl.control.LayerSwitcher = LayerSwitcher;\nOl.control.GeoportalAttribution = GeoportalAttribution;\nOl.control.GetFeatureInfo = GetFeatureInfo;\nOl.control.SearchEngine = SearchEngine;\nOl.control.Route = Route;\nOl.control.Isocurve = Isocurve;\nOl.control.GeoportalMousePosition = MousePosition;\nOl.control.Drawing = Drawing;\nOl.control.ReverseGeocode = ReverseGeocode;\nOl.control.LayerImport = LayerImport;\nOl.control.MeasureLength = MeasureLength;\nOl.control.MeasureArea = MeasureArea;\nOl.control.MeasureAzimuth = MeasureAzimuth;\nOl.control.DefaultMarkers = Markers;\nOl.control.ElevationPath = ElevationPath;\nOl.control.LocationSelector = LocationSelector;\nOl.control.Export = ButtonExport;\nOl.control.GeoportalZoom = GeoportalZoom;\nOl.control.GeoportalFullScreen = GeoportalFullScreen;\nOl.control.GeoportalOverviewMap = GeoportalOverviewMap;\nOl.control.Legends = Legends;\nOl.control.Catalog = Catalog;\nOl.control.Territories = Territories;\nOl.control.ControlList = ControlList;\n\nexport {\n /**\n * Expose extensions openlayers extended\n * @see ol.control.LayerSwitcher\n * @see ol.control.GeoportalAttribution\n * @see ol.control.GetFeatureInfo\n * @see ol.control.SearchEngine\n * @see ol.control.Route\n * @see ol.control.Isocurve\n * @see ol.control.GeoportalMousePosition\n * @see ol.control.GeoportalFullScreen\n * @see ol.control.GeoportalZoom\n * @see ol.control.GeoportalOverviewMap\n * @see ol.control.Drawing\n * @see ol.control.ReverseGeocode\n * @see ol.control.MeasureLength\n * @see ol.control.MeasureArea\n * @see ol.control.MeasureAzimuth\n * @see ol.control.DefaultMarkers\n * @see ol.control.ElevationPath\n * @see ol.control.LocationSelector\n * @see ol.control.Export\n * @see ol.control.Legends\n * @see ol.layer.GeoportalWMTS\n * @see ol.layer.GeoportalWMS\n * @see ol.layer.GeoportalWFS\n * @see ol.layer.GeoportalMapBox\n * @see ol.source.GeoportalWMTS\n * @see ol.source.GeoportalWMS\n * @see ol.source.GeoportalWFS\n * @see ol.format.KMLExtended\n * @see ol.format.GPXExtended\n * @see ol.format.GeoJSONExtended\n * @see ol.style.Editor\n * @see ol.includeProjections\n */\n Ol as olExtended\n};\n\n// \"proj4\" is not exposed into window with webpack !\n// But, it's useful to expose it into OpenLayers :\n// console > ol.proj.get(\"EPSG:2154\")\nif (window.ol && window.ol.proj && window.ol.proj.proj4) {\n try {\n window.ol.proj.proj4.register(Proj4);\n } catch (e) {}\n}\n\n// Expose extensions openlayers extended into ol\nif (window.ol) {\n // on fusionne les fonctionnalités openlayers / étendues\n // Gp.olExtended -> ol\n deepCopy(Ol, window.ol);\n // ol -> Gp.olExtended\n deepCopy(window.ol, Ol);\n}\n"],"names":["freeze","object","oc","undefined","Object","getOwnPropertyDescriptors","create","hasOwn","key","prototype","hasOwnProperty","call","HTML_BOOLEAN_ATTRIBUTES","allowfullscreen","async","autofocus","autoplay","checked","controls","default","defer","disabled","formnovalidate","hidden","ismap","itemscope","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected","HTML_VOID_ELEMENTS","area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr","HTML_RAW_TEXT_ELEMENTS","script","style","textarea","title","isHTMLMimeType","mimeType","MIME_TYPE","HTML","XML_APPLICATION","XML_TEXT","XML_XHTML_APPLICATION","XML_SVG_IMAGE","_MIME_TYPES","keys","map","NAMESPACE","SVG","XML","XMLNS","exports","assign","target","TypeError","find","list","predicate","ac","Array","i","length","item","hasDefaultHTMLNamespace","isHTMLBooleanAttribute","name","toLowerCase","isHTMLRawTextElement","tagName","isHTMLEscapableRawTextElement","isHTMLVoidElement","isValidMimeType","indexOf","conventions","dom","errors","entities","sax","DOMImplementation","ParseError","XMLReader","normalizeLineEndings","replace","DOMParser","options","locator","this","domHandler","DOMHandler","onError","errorHandler","xmlns","opt","defaultNamespace","cdata","currentElement","doc","position","node","lineNumber","columnNumber","_toString","chars","start","substr","java","lang","String","appendElement","handler","appendChild","parseFromString","defaultNSMap","entityMap","XML_ENTITIES","HTML_ENTITIES","xml","domBuilder","setDocumentLocator","fatalError","parse","documentElement","startDocument","impl","createHTMLDocument","createDocument","startElement","namespaceURI","localName","qName","attrs","el","createElementNS","len","getURI","value","getValue","attr","getQName","createAttributeNS","getLocator","nodeValue","setAttributeNode","endElement","parentNode","startPrefixMapping","prefix","uri","endPrefixMapping","processingInstruction","data","ins","createProcessingInstruction","ignorableWhitespace","ch","characters","apply","arguments","charNode","createCDATASection","createTextNode","test","skippedEntity","endDocument","normalize","comment","comm","createComment","startCDATA","endCDATA","startDTD","publicId","systemId","internalSubset","implementation","createDocumentType","dt","doctype","reportError","level","message","e","console","error","l","_locator","warning","__DOMHandler","onErrorStopParsing","onWarningStopParsing","PDC","Symbol","DOMException","DOMExceptionName","g","checkSymbol","symbol","notEmptyString","orderedSetReducer","current","element","toOrderedSet","split","filter","splitOnASCIIWhitespace","reduce","validateQualifiedName","qualifiedName","QName_exact","INVALID_CHARACTER_ERR","validateAndExtract","namespace","splitResult","NAMESPACE_ERR","copy","src","dest","p","_extends","Class","Super","pt","t","constructor","NodeType","ELEMENT_NODE","ATTRIBUTE_NODE","TEXT_NODE","CDATA_SECTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","PROCESSING_INSTRUCTION_NODE","COMMENT_NODE","DOCUMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","NOTATION_NODE","DocumentPosition","DOCUMENT_POSITION_DISCONNECTED","DOCUMENT_POSITION_PRECEDING","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_CONTAINS","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC","parentChain","chain","ownerElement","unshift","commonAncestor","a","b","c","n","docGUID","guid","Math","random","NodeList","LiveNodeList","refresh","_node","_refresh","_updateLiveList","inc","_inc","ownerDocument","ls","__set__","$$length","NamedNodeMap","_findNodeIndex","_addNamedNode","newAttr","oldAttr","_onRemoveAttribute","ns","_nsMap","_onAddAttribute","_removeNamedNode","lastIndex","Node","_xmlEncoder","charCodeAt","_visitNode","callback","firstChild","nextSibling","Document","contentType","type","remove","_onUpdateChild","parent","newChild","childNodes","child","_removeChild","NOT_FOUND_ERR","oldPreviousSibling","previousSibling","oldNextSibling","lastChild","isDocTypeNode","nodeType","isElementNode","isTextNode","isElementInsertionPossible","parentChildNodes","docTypeNode","isElementReplacementPossible","assertPreInsertionValidity1to5","hasValidParentNodeType","HIERARCHY_REQUEST_ERR","hasInsertableNodeType","assertPreInsertionValidityInDocument","nodeChildNodes","nodeChildElements","parentElementChild","assertPreReplacementValidityInDocument","hasDoctypeChildThatIsNotChild","_insertBefore","_inDocumentAssertion","cp","removeChild","newFirst","newLast","pre","Element","Attr","CharacterData","Text","Comment","CDATASection","DocumentType","Notation","Entity","EntityReference","DocumentFragment","ProcessingInstruction","XMLSerializer","nodeSerializeToString","nodeFilter","buf","refNode","lookupPrefix","visibleNamespaces","serializeToString","join","needNamespaceDefine","isHTML","addSerializedAttribute","push","attributes","nodeName","prefixedNodeName","defaultNS","ai","nsi","canCloseTag","slice","CDATA_START","CDATA_END","COMMENT_START","COMMENT_END","pubid","sysid","DOCTYPE_DECL_START","PUBLIC","SYSTEM","importNode","deep","node2","cloneNode","v","attrs2","_ownerElement","index","toString","iterator","me","next","done","return","getNamedItem","_isInHTMLDocumentAndNamespace","setNamedItem","INUSE_ATTRIBUTE_ERR","getNamedItemNS","setNamedItemNS","removeNamedItem","removeNamedItemNS","hasFeature","feature","version","root","htmlNode","createElement","headNode","titleNode","parentElement","baseURI","isConnected","rootNode","getRootNode","contains","other","isEqualNode","otherNode","getAttributeNodeNS","isSameNode","insertBefore","refChild","replaceChild","oldChild","hasChildNodes","appendData","isSupported","lookupNamespaceURI","isDefaultNamespace","compareDocumentPosition","node1","attr1","attr2","chain1","chain2","ca","removed","importedNode","getElementById","id","rtv","getAttribute","createDocumentFragment","createAttribute","_createAttribute","specified","createEntityReference","Name","NotSupportedError","validated","getQualifiedName","hasAttribute","getAttributeNode","setAttribute","removeAttribute","removeAttributeNode","setAttributeNodeNS","removeAttributeNS","old","hasAttributeNS","getAttributeNS","setAttributeNS","getElementsByClassName","classNames","classNamesSet","nodeClassNames","matches","nodeClassNamesSet","every","getElementsByTagName","isHTMLDocument","lowerQualifiedName","getElementsByTagNameNS","substringData","offset","count","substring","text","insertData","replaceData","deleteData","splitText","newText","newNode","defineProperty","getTextContent","get","set","amp","apos","gt","lt","quot","Aacute","aacute","Abreve","abreve","acd","acE","Acirc","acirc","acute","Acy","acy","AElig","aelig","af","Afr","afr","Agrave","agrave","alefsym","aleph","Alpha","alpha","Amacr","amacr","amalg","AMP","And","and","andand","andd","andslope","andv","ang","ange","angle","angmsd","angmsdaa","angmsdab","angmsdac","angmsdad","angmsdae","angmsdaf","angmsdag","angmsdah","angrt","angrtvb","angrtvbd","angsph","angst","angzarr","Aogon","aogon","Aopf","aopf","ap","apacir","apE","ape","apid","ApplyFunction","approx","approxeq","Aring","aring","Ascr","ascr","Assign","ast","asymp","asympeq","Atilde","atilde","Auml","auml","awconint","awint","backcong","backepsilon","backprime","backsim","backsimeq","Backslash","Barv","barvee","Barwed","barwed","barwedge","bbrk","bbrktbrk","bcong","Bcy","bcy","bdquo","becaus","Because","because","bemptyv","bepsi","bernou","Bernoullis","Beta","beta","beth","between","Bfr","bfr","bigcap","bigcirc","bigcup","bigodot","bigoplus","bigotimes","bigsqcup","bigstar","bigtriangledown","bigtriangleup","biguplus","bigvee","bigwedge","bkarow","blacklozenge","blacksquare","blacktriangle","blacktriangledown","blacktriangleleft","blacktriangleright","blank","blk12","blk14","blk34","block","bne","bnequiv","bNot","bnot","Bopf","bopf","bot","bottom","bowtie","boxbox","boxDL","boxDl","boxdL","boxdl","boxDR","boxDr","boxdR","boxdr","boxH","boxh","boxHD","boxHd","boxhD","boxhd","boxHU","boxHu","boxhU","boxhu","boxminus","boxplus","boxtimes","boxUL","boxUl","boxuL","boxul","boxUR","boxUr","boxuR","boxur","boxV","boxv","boxVH","boxVh","boxvH","boxvh","boxVL","boxVl","boxvL","boxvl","boxVR","boxVr","boxvR","boxvr","bprime","Breve","breve","brvbar","Bscr","bscr","bsemi","bsim","bsime","bsol","bsolb","bsolhsub","bull","bullet","bump","bumpE","bumpe","Bumpeq","bumpeq","Cacute","cacute","Cap","cap","capand","capbrcup","capcap","capcup","capdot","CapitalDifferentialD","caps","caret","caron","Cayleys","ccaps","Ccaron","ccaron","Ccedil","ccedil","Ccirc","ccirc","Cconint","ccups","ccupssm","Cdot","cdot","cedil","Cedilla","cemptyv","cent","CenterDot","centerdot","Cfr","cfr","CHcy","chcy","check","checkmark","Chi","chi","cir","circ","circeq","circlearrowleft","circlearrowright","circledast","circledcirc","circleddash","CircleDot","circledR","circledS","CircleMinus","CirclePlus","CircleTimes","cirE","cire","cirfnint","cirmid","cirscir","ClockwiseContourIntegral","CloseCurlyDoubleQuote","CloseCurlyQuote","clubs","clubsuit","Colon","colon","Colone","colone","coloneq","comma","commat","comp","compfn","complement","complexes","cong","congdot","Congruent","Conint","conint","ContourIntegral","Copf","copf","coprod","Coproduct","COPY","copysr","CounterClockwiseContourIntegral","crarr","Cross","cross","Cscr","cscr","csub","csube","csup","csupe","ctdot","cudarrl","cudarrr","cuepr","cuesc","cularr","cularrp","Cup","cup","cupbrcap","CupCap","cupcap","cupcup","cupdot","cupor","cups","curarr","curarrm","curlyeqprec","curlyeqsucc","curlyvee","curlywedge","curren","curvearrowleft","curvearrowright","cuvee","cuwed","cwconint","cwint","cylcty","Dagger","dagger","daleth","Darr","dArr","darr","dash","Dashv","dashv","dbkarow","dblac","Dcaron","dcaron","Dcy","dcy","DD","dd","ddagger","ddarr","DDotrahd","ddotseq","deg","Del","Delta","delta","demptyv","dfisht","Dfr","dfr","dHar","dharl","dharr","DiacriticalAcute","DiacriticalDot","DiacriticalDoubleAcute","DiacriticalGrave","DiacriticalTilde","diam","Diamond","diamond","diamondsuit","diams","die","DifferentialD","digamma","disin","div","divide","divideontimes","divonx","DJcy","djcy","dlcorn","dlcrop","dollar","Dopf","dopf","Dot","dot","DotDot","doteq","doteqdot","DotEqual","dotminus","dotplus","dotsquare","doublebarwedge","DoubleContourIntegral","DoubleDot","DoubleDownArrow","DoubleLeftArrow","DoubleLeftRightArrow","DoubleLeftTee","DoubleLongLeftArrow","DoubleLongLeftRightArrow","DoubleLongRightArrow","DoubleRightArrow","DoubleRightTee","DoubleUpArrow","DoubleUpDownArrow","DoubleVerticalBar","DownArrow","Downarrow","downarrow","DownArrowBar","DownArrowUpArrow","DownBreve","downdownarrows","downharpoonleft","downharpoonright","DownLeftRightVector","DownLeftTeeVector","DownLeftVector","DownLeftVectorBar","DownRightTeeVector","DownRightVector","DownRightVectorBar","DownTee","DownTeeArrow","drbkarow","drcorn","drcrop","Dscr","dscr","DScy","dscy","dsol","Dstrok","dstrok","dtdot","dtri","dtrif","duarr","duhar","dwangle","DZcy","dzcy","dzigrarr","Eacute","eacute","easter","Ecaron","ecaron","ecir","Ecirc","ecirc","ecolon","Ecy","ecy","eDDot","Edot","eDot","edot","ee","efDot","Efr","efr","eg","Egrave","egrave","egs","egsdot","elinters","ell","els","elsdot","Emacr","emacr","empty","emptyset","EmptySmallSquare","emptyv","EmptyVerySmallSquare","emsp","emsp13","emsp14","ENG","eng","ensp","Eogon","eogon","Eopf","eopf","epar","eparsl","eplus","epsi","Epsilon","epsilon","epsiv","eqcirc","eqcolon","eqsim","eqslantgtr","eqslantless","Equal","equals","EqualTilde","equest","Equilibrium","equiv","equivDD","eqvparsl","erarr","erDot","Escr","escr","esdot","Esim","esim","Eta","eta","ETH","eth","Euml","euml","euro","excl","exist","Exists","expectation","ExponentialE","exponentiale","fallingdotseq","Fcy","fcy","female","ffilig","fflig","ffllig","Ffr","ffr","filig","FilledSmallSquare","FilledVerySmallSquare","fjlig","flat","fllig","fltns","fnof","Fopf","fopf","ForAll","forall","fork","forkv","Fouriertrf","fpartint","frac12","frac13","frac14","frac15","frac16","frac18","frac23","frac25","frac34","frac35","frac38","frac45","frac56","frac58","frac78","frasl","frown","Fscr","fscr","gacute","Gamma","gamma","Gammad","gammad","gap","Gbreve","gbreve","Gcedil","Gcirc","gcirc","Gcy","gcy","Gdot","gdot","gE","ge","gEl","gel","geq","geqq","geqslant","ges","gescc","gesdot","gesdoto","gesdotol","gesl","gesles","Gfr","gfr","Gg","gg","ggg","gimel","GJcy","gjcy","gl","gla","glE","glj","gnap","gnapprox","gnE","gne","gneq","gneqq","gnsim","Gopf","gopf","grave","GreaterEqual","GreaterEqualLess","GreaterFullEqual","GreaterGreater","GreaterLess","GreaterSlantEqual","GreaterTilde","Gscr","gscr","gsim","gsime","gsiml","Gt","GT","gtcc","gtcir","gtdot","gtlPar","gtquest","gtrapprox","gtrarr","gtrdot","gtreqless","gtreqqless","gtrless","gtrsim","gvertneqq","gvnE","Hacek","hairsp","half","hamilt","HARDcy","hardcy","hArr","harr","harrcir","harrw","Hat","hbar","Hcirc","hcirc","hearts","heartsuit","hellip","hercon","Hfr","hfr","HilbertSpace","hksearow","hkswarow","hoarr","homtht","hookleftarrow","hookrightarrow","Hopf","hopf","horbar","HorizontalLine","Hscr","hscr","hslash","Hstrok","hstrok","HumpDownHump","HumpEqual","hybull","hyphen","Iacute","iacute","ic","Icirc","icirc","Icy","icy","Idot","IEcy","iecy","iexcl","iff","Ifr","ifr","Igrave","igrave","ii","iiiint","iiint","iinfin","iiota","IJlig","ijlig","Im","Imacr","imacr","image","ImaginaryI","imagline","imagpart","imath","imof","imped","Implies","in","incare","infin","infintie","inodot","Int","int","intcal","integers","Integral","intercal","Intersection","intlarhk","intprod","InvisibleComma","InvisibleTimes","IOcy","iocy","Iogon","iogon","Iopf","iopf","Iota","iota","iprod","iquest","Iscr","iscr","isin","isindot","isinE","isins","isinsv","isinv","it","Itilde","itilde","Iukcy","iukcy","Iuml","iuml","Jcirc","jcirc","Jcy","jcy","Jfr","jfr","jmath","Jopf","jopf","Jscr","jscr","Jsercy","jsercy","Jukcy","jukcy","Kappa","kappa","kappav","Kcedil","kcedil","Kcy","kcy","Kfr","kfr","kgreen","KHcy","khcy","KJcy","kjcy","Kopf","kopf","Kscr","kscr","lAarr","Lacute","lacute","laemptyv","lagran","Lambda","lambda","Lang","langd","langle","lap","Laplacetrf","laquo","Larr","lArr","larr","larrb","larrbfs","larrfs","larrhk","larrlp","larrpl","larrsim","larrtl","lat","lAtail","latail","late","lates","lBarr","lbarr","lbbrk","lbrace","lbrack","lbrke","lbrksld","lbrkslu","Lcaron","lcaron","Lcedil","lcedil","lceil","lcub","Lcy","lcy","ldca","ldquo","ldquor","ldrdhar","ldrushar","ldsh","lE","le","LeftAngleBracket","LeftArrow","Leftarrow","leftarrow","LeftArrowBar","LeftArrowRightArrow","leftarrowtail","LeftCeiling","LeftDoubleBracket","LeftDownTeeVector","LeftDownVector","LeftDownVectorBar","LeftFloor","leftharpoondown","leftharpoonup","leftleftarrows","LeftRightArrow","Leftrightarrow","leftrightarrow","leftrightarrows","leftrightharpoons","leftrightsquigarrow","LeftRightVector","LeftTee","LeftTeeArrow","LeftTeeVector","leftthreetimes","LeftTriangle","LeftTriangleBar","LeftTriangleEqual","LeftUpDownVector","LeftUpTeeVector","LeftUpVector","LeftUpVectorBar","LeftVector","LeftVectorBar","lEg","leg","leq","leqq","leqslant","les","lescc","lesdot","lesdoto","lesdotor","lesg","lesges","lessapprox","lessdot","lesseqgtr","lesseqqgtr","LessEqualGreater","LessFullEqual","LessGreater","lessgtr","LessLess","lesssim","LessSlantEqual","LessTilde","lfisht","lfloor","Lfr","lfr","lg","lgE","lHar","lhard","lharu","lharul","lhblk","LJcy","ljcy","Ll","ll","llarr","llcorner","Lleftarrow","llhard","lltri","Lmidot","lmidot","lmoust","lmoustache","lnap","lnapprox","lnE","lne","lneq","lneqq","lnsim","loang","loarr","lobrk","LongLeftArrow","Longleftarrow","longleftarrow","LongLeftRightArrow","Longleftrightarrow","longleftrightarrow","longmapsto","LongRightArrow","Longrightarrow","longrightarrow","looparrowleft","looparrowright","lopar","Lopf","lopf","loplus","lotimes","lowast","lowbar","LowerLeftArrow","LowerRightArrow","loz","lozenge","lozf","lpar","lparlt","lrarr","lrcorner","lrhar","lrhard","lrm","lrtri","lsaquo","Lscr","lscr","Lsh","lsh","lsim","lsime","lsimg","lsqb","lsquo","lsquor","Lstrok","lstrok","Lt","LT","ltcc","ltcir","ltdot","lthree","ltimes","ltlarr","ltquest","ltri","ltrie","ltrif","ltrPar","lurdshar","luruhar","lvertneqq","lvnE","macr","male","malt","maltese","Map","mapsto","mapstodown","mapstoleft","mapstoup","marker","mcomma","Mcy","mcy","mdash","mDDot","measuredangle","MediumSpace","Mellintrf","Mfr","mfr","mho","micro","mid","midast","midcir","middot","minus","minusb","minusd","minusdu","MinusPlus","mlcp","mldr","mnplus","models","Mopf","mopf","mp","Mscr","mscr","mstpos","Mu","mu","multimap","mumap","nabla","Nacute","nacute","nang","nap","napE","napid","napos","napprox","natur","natural","naturals","nbsp","nbump","nbumpe","ncap","Ncaron","ncaron","Ncedil","ncedil","ncong","ncongdot","ncup","Ncy","ncy","ndash","ne","nearhk","neArr","nearr","nearrow","nedot","NegativeMediumSpace","NegativeThickSpace","NegativeThinSpace","NegativeVeryThinSpace","nequiv","nesear","nesim","NestedGreaterGreater","NestedLessLess","NewLine","nexist","nexists","Nfr","nfr","ngE","nge","ngeq","ngeqq","ngeqslant","nges","nGg","ngsim","nGt","ngt","ngtr","nGtv","nhArr","nharr","nhpar","ni","nis","nisd","niv","NJcy","njcy","nlArr","nlarr","nldr","nlE","nle","nLeftarrow","nleftarrow","nLeftrightarrow","nleftrightarrow","nleq","nleqq","nleqslant","nles","nless","nLl","nlsim","nLt","nlt","nltri","nltrie","nLtv","nmid","NoBreak","NonBreakingSpace","Nopf","nopf","Not","not","NotCongruent","NotCupCap","NotDoubleVerticalBar","NotElement","NotEqual","NotEqualTilde","NotExists","NotGreater","NotGreaterEqual","NotGreaterFullEqual","NotGreaterGreater","NotGreaterLess","NotGreaterSlantEqual","NotGreaterTilde","NotHumpDownHump","NotHumpEqual","notin","notindot","notinE","notinva","notinvb","notinvc","NotLeftTriangle","NotLeftTriangleBar","NotLeftTriangleEqual","NotLess","NotLessEqual","NotLessGreater","NotLessLess","NotLessSlantEqual","NotLessTilde","NotNestedGreaterGreater","NotNestedLessLess","notni","notniva","notnivb","notnivc","NotPrecedes","NotPrecedesEqual","NotPrecedesSlantEqual","NotReverseElement","NotRightTriangle","NotRightTriangleBar","NotRightTriangleEqual","NotSquareSubset","NotSquareSubsetEqual","NotSquareSuperset","NotSquareSupersetEqual","NotSubset","NotSubsetEqual","NotSucceeds","NotSucceedsEqual","NotSucceedsSlantEqual","NotSucceedsTilde","NotSuperset","NotSupersetEqual","NotTilde","NotTildeEqual","NotTildeFullEqual","NotTildeTilde","NotVerticalBar","npar","nparallel","nparsl","npart","npolint","npr","nprcue","npre","nprec","npreceq","nrArr","nrarr","nrarrc","nrarrw","nRightarrow","nrightarrow","nrtri","nrtrie","nsc","nsccue","nsce","Nscr","nscr","nshortmid","nshortparallel","nsim","nsime","nsimeq","nsmid","nspar","nsqsube","nsqsupe","nsub","nsubE","nsube","nsubset","nsubseteq","nsubseteqq","nsucc","nsucceq","nsup","nsupE","nsupe","nsupset","nsupseteq","nsupseteqq","ntgl","Ntilde","ntilde","ntlg","ntriangleleft","ntrianglelefteq","ntriangleright","ntrianglerighteq","Nu","nu","num","numero","numsp","nvap","nVDash","nVdash","nvDash","nvdash","nvge","nvgt","nvHarr","nvinfin","nvlArr","nvle","nvlt","nvltrie","nvrArr","nvrtrie","nvsim","nwarhk","nwArr","nwarr","nwarrow","nwnear","Oacute","oacute","oast","ocir","Ocirc","ocirc","Ocy","ocy","odash","Odblac","odblac","odiv","odot","odsold","OElig","oelig","ofcir","Ofr","ofr","ogon","Ograve","ograve","ogt","ohbar","ohm","oint","olarr","olcir","olcross","oline","olt","Omacr","omacr","Omega","omega","Omicron","omicron","omid","ominus","Oopf","oopf","opar","OpenCurlyDoubleQuote","OpenCurlyQuote","operp","oplus","Or","or","orarr","ord","order","orderof","ordf","ordm","origof","oror","orslope","orv","oS","Oscr","oscr","Oslash","oslash","osol","Otilde","otilde","Otimes","otimes","otimesas","Ouml","ouml","ovbar","OverBar","OverBrace","OverBracket","OverParenthesis","par","para","parallel","parsim","parsl","part","PartialD","Pcy","pcy","percnt","period","permil","perp","pertenk","Pfr","pfr","Phi","phi","phiv","phmmat","phone","Pi","pi","pitchfork","piv","planck","planckh","plankv","plus","plusacir","plusb","pluscir","plusdo","plusdu","pluse","PlusMinus","plusmn","plussim","plustwo","pm","Poincareplane","pointint","Popf","popf","pound","Pr","pr","prap","prcue","prE","prec","precapprox","preccurlyeq","Precedes","PrecedesEqual","PrecedesSlantEqual","PrecedesTilde","preceq","precnapprox","precneqq","precnsim","precsim","Prime","prime","primes","prnap","prnE","prnsim","prod","Product","profalar","profline","profsurf","prop","Proportion","Proportional","propto","prsim","prurel","Pscr","pscr","Psi","psi","puncsp","Qfr","qfr","qint","Qopf","qopf","qprime","Qscr","qscr","quaternions","quatint","quest","questeq","QUOT","rAarr","race","Racute","racute","radic","raemptyv","Rang","rang","rangd","range","rangle","raquo","Rarr","rArr","rarr","rarrap","rarrb","rarrbfs","rarrc","rarrfs","rarrhk","rarrlp","rarrpl","rarrsim","Rarrtl","rarrtl","rarrw","rAtail","ratail","ratio","rationals","RBarr","rBarr","rbarr","rbbrk","rbrace","rbrack","rbrke","rbrksld","rbrkslu","Rcaron","rcaron","Rcedil","rcedil","rceil","rcub","Rcy","rcy","rdca","rdldhar","rdquo","rdquor","rdsh","Re","real","realine","realpart","reals","rect","REG","reg","ReverseElement","ReverseEquilibrium","ReverseUpEquilibrium","rfisht","rfloor","Rfr","rfr","rHar","rhard","rharu","rharul","Rho","rho","rhov","RightAngleBracket","RightArrow","Rightarrow","rightarrow","RightArrowBar","RightArrowLeftArrow","rightarrowtail","RightCeiling","RightDoubleBracket","RightDownTeeVector","RightDownVector","RightDownVectorBar","RightFloor","rightharpoondown","rightharpoonup","rightleftarrows","rightleftharpoons","rightrightarrows","rightsquigarrow","RightTee","RightTeeArrow","RightTeeVector","rightthreetimes","RightTriangle","RightTriangleBar","RightTriangleEqual","RightUpDownVector","RightUpTeeVector","RightUpVector","RightUpVectorBar","RightVector","RightVectorBar","ring","risingdotseq","rlarr","rlhar","rlm","rmoust","rmoustache","rnmid","roang","roarr","robrk","ropar","Ropf","ropf","roplus","rotimes","RoundImplies","rpar","rpargt","rppolint","rrarr","Rrightarrow","rsaquo","Rscr","rscr","Rsh","rsh","rsqb","rsquo","rsquor","rthree","rtimes","rtri","rtrie","rtrif","rtriltri","RuleDelayed","ruluhar","rx","Sacute","sacute","sbquo","Sc","sc","scap","Scaron","scaron","sccue","scE","sce","Scedil","scedil","Scirc","scirc","scnap","scnE","scnsim","scpolint","scsim","Scy","scy","sdot","sdotb","sdote","searhk","seArr","searr","searrow","sect","semi","seswar","setminus","setmn","sext","Sfr","sfr","sfrown","sharp","SHCHcy","shchcy","SHcy","shcy","ShortDownArrow","ShortLeftArrow","shortmid","shortparallel","ShortRightArrow","ShortUpArrow","shy","Sigma","sigma","sigmaf","sigmav","sim","simdot","sime","simeq","simg","simgE","siml","simlE","simne","simplus","simrarr","slarr","SmallCircle","smallsetminus","smashp","smeparsl","smid","smile","smt","smte","smtes","SOFTcy","softcy","sol","solb","solbar","Sopf","sopf","spades","spadesuit","spar","sqcap","sqcaps","sqcup","sqcups","Sqrt","sqsub","sqsube","sqsubset","sqsubseteq","sqsup","sqsupe","sqsupset","sqsupseteq","squ","Square","square","SquareIntersection","SquareSubset","SquareSubsetEqual","SquareSuperset","SquareSupersetEqual","SquareUnion","squarf","squf","srarr","Sscr","sscr","ssetmn","ssmile","sstarf","Star","star","starf","straightepsilon","straightphi","strns","Sub","sub","subdot","subE","sube","subedot","submult","subnE","subne","subplus","subrarr","Subset","subset","subseteq","subseteqq","SubsetEqual","subsetneq","subsetneqq","subsim","subsub","subsup","succ","succapprox","succcurlyeq","Succeeds","SucceedsEqual","SucceedsSlantEqual","SucceedsTilde","succeq","succnapprox","succneqq","succnsim","succsim","SuchThat","Sum","sum","sung","Sup","sup","sup1","sup2","sup3","supdot","supdsub","supE","supe","supedot","Superset","SupersetEqual","suphsol","suphsub","suplarr","supmult","supnE","supne","supplus","Supset","supset","supseteq","supseteqq","supsetneq","supsetneqq","supsim","supsub","supsup","swarhk","swArr","swarr","swarrow","swnwar","szlig","Tab","Tau","tau","tbrk","Tcaron","tcaron","Tcedil","tcedil","Tcy","tcy","tdot","telrec","Tfr","tfr","there4","Therefore","therefore","Theta","theta","thetasym","thetav","thickapprox","thicksim","ThickSpace","thinsp","ThinSpace","thkap","thksim","THORN","thorn","Tilde","tilde","TildeEqual","TildeFullEqual","TildeTilde","times","timesb","timesbar","timesd","tint","toea","top","topbot","topcir","Topf","topf","topfork","tosa","tprime","TRADE","trade","triangle","triangledown","triangleleft","trianglelefteq","triangleq","triangleright","trianglerighteq","tridot","trie","triminus","TripleDot","triplus","trisb","tritime","trpezium","Tscr","tscr","TScy","tscy","TSHcy","tshcy","Tstrok","tstrok","twixt","twoheadleftarrow","twoheadrightarrow","Uacute","uacute","Uarr","uArr","uarr","Uarrocir","Ubrcy","ubrcy","Ubreve","ubreve","Ucirc","ucirc","Ucy","ucy","udarr","Udblac","udblac","udhar","ufisht","Ufr","ufr","Ugrave","ugrave","uHar","uharl","uharr","uhblk","ulcorn","ulcorner","ulcrop","ultri","Umacr","umacr","uml","UnderBar","UnderBrace","UnderBracket","UnderParenthesis","Union","UnionPlus","Uogon","uogon","Uopf","uopf","UpArrow","Uparrow","uparrow","UpArrowBar","UpArrowDownArrow","UpDownArrow","Updownarrow","updownarrow","UpEquilibrium","upharpoonleft","upharpoonright","uplus","UpperLeftArrow","UpperRightArrow","Upsi","upsi","upsih","Upsilon","upsilon","UpTee","UpTeeArrow","upuparrows","urcorn","urcorner","urcrop","Uring","uring","urtri","Uscr","uscr","utdot","Utilde","utilde","utri","utrif","uuarr","Uuml","uuml","uwangle","vangrt","varepsilon","varkappa","varnothing","varphi","varpi","varpropto","vArr","varr","varrho","varsigma","varsubsetneq","varsubsetneqq","varsupsetneq","varsupsetneqq","vartheta","vartriangleleft","vartriangleright","Vbar","vBar","vBarv","Vcy","vcy","VDash","Vdash","vDash","vdash","Vdashl","Vee","vee","veebar","veeeq","vellip","Verbar","verbar","Vert","vert","VerticalBar","VerticalLine","VerticalSeparator","VerticalTilde","VeryThinSpace","Vfr","vfr","vltri","vnsub","vnsup","Vopf","vopf","vprop","vrtri","Vscr","vscr","vsubnE","vsubne","vsupnE","vsupne","Vvdash","vzigzag","Wcirc","wcirc","wedbar","Wedge","wedge","wedgeq","weierp","Wfr","wfr","Wopf","wopf","wp","wr","wreath","Wscr","wscr","xcap","xcirc","xcup","xdtri","Xfr","xfr","xhArr","xharr","Xi","xi","xlArr","xlarr","xmap","xnis","xodot","Xopf","xopf","xoplus","xotime","xrArr","xrarr","Xscr","xscr","xsqcup","xuplus","xutri","xvee","xwedge","Yacute","yacute","YAcy","yacy","Ycirc","ycirc","Ycy","ycy","yen","Yfr","yfr","YIcy","yicy","Yopf","yopf","Yscr","yscr","YUcy","yucy","Yuml","yuml","Zacute","zacute","Zcaron","zcaron","Zcy","zcy","Zdot","zdot","zeetrf","ZeroWidthSpace","Zeta","zeta","Zfr","zfr","ZHcy","zhcy","zigrarr","Zopf","zopf","Zscr","zscr","zwj","zwnj","extendError","writableName","Error","enumerable","writable","IndexSizeError","DomstringSizeError","HierarchyRequestError","WrongDocumentError","InvalidCharacterError","NoDataAllowedError","NoModificationAllowedError","NotFoundError","InUseAttributeError","InvalidStateError","SyntaxError","InvalidModificationError","NamespaceError","InvalidAccessError","ValidationError","TypeMismatchError","SecurityError","NetworkError","AbortError","URLMismatchError","QuotaExceededError","TimeoutError","InvalidNodeTypeError","DataCloneError","EncodingError","NotReadableError","UnknownError","ConstraintError","DataError","TransactionInactiveError","ReadOnlyError","VersionError","OperationError","NotAllowedError","OptOutError","DOMExceptionNames","isValidDomExceptionCode","messageOrCode","nameOrMessage","captureStackTrace","defineProperties","code","ExceptionCode","INDEX_SIZE_ERR","DOMSTRING_SIZE_ERR","WRONG_DOCUMENT_ERR","NO_DATA_ALLOWED_ERR","NO_MODIFICATION_ALLOWED_ERR","NOT_SUPPORTED_ERR","INVALID_STATE_ERR","SYNTAX_ERR","INVALID_MODIFICATION_ERR","INVALID_ACCESS_ERR","VALIDATION_ERR","TYPE_MISMATCH_ERR","SECURITY_ERR","NETWORK_ERR","ABORT_ERR","URL_MISMATCH_ERR","QUOTA_EXCEEDED_ERR","TIMEOUT_ERR","INVALID_NODE_TYPE_ERR","DATA_CLONE_ERR","entries","detectUnicodeSupport","RegExpImpl","RegExp","match","exec","UNICODE_SUPPORT","regexp","lastIndexOf","chars_without","search","JSON","stringify","args","self","isStr","regg","concat","Char","_SChar","SChar_s","S","S_OPT","NameStartChar","NameChar","Nmtoken","EntityRef","CharRef","Reference","PEReference","EntityValue","AttValue","NCName","QName","QName_group","SystemLiteral","PI","PubidChar","PubidLiteral","PCDATA","Mixed","contentspec","elementdecl","NotationType","Enumeration","EnumeratedType","AttType","DefaultDecl","AttlistDecl","ExternalID","ExternalID_match","NDataDecl","ENTITY_DECL_START","GEDecl","PEDef","EntityDecl","PublicID","NotationDecl","Eq","VersionNum","VersionInfo","EncName","XMLDecl","CData","CDSect","UNICODE_REPLACEMENT_CHARACTER","domParser","_copy","defaultNSMapCopy","fixedFromCharCode","surrogate1","surrogate2","fromCharCode","entityReplacer","complete","k","charAt","parseInt","appendText","end","xt","ENTITY_REG","m","lineEnd","linePattern","lineStart","parseStack","currentNSMap","unclosedTags","tagStart","fromSource","tagNameRaw","tagNameMatch","currentTagName","tagNameLower","config","pop","localNSMap","parseProcessingInstruction","parseDoctypeCommentOrCData","ElementAttributes","parseElementStartPart","closed","locator2","copyLocator","parseHtmlSpecialContent","max","f","addAttribute","qname","startIndex","attributeNames","addValue","attrName","s","setTagName","nsp","nsPrefix","elStartEnd","isEscapableRaw","elEndStart","parseUtils","char","skip","substringFromIndex","getIndex","getMatch","getSource","skipBlanks","blanks","substringStartsWith","groups","SystemLiteralOnly","parsePI","intSubsetStart","parseDoctypeInternalSubset","endDTD","getLocalName","_regeneratorRuntime","r","o","asyncIterator","u","toStringTag","define","configurable","wrap","Generator","Context","makeInvokeMethod","tryCatch","arg","h","y","GeneratorFunction","GeneratorFunctionPrototype","d","getPrototypeOf","values","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","resultName","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","mark","setPrototypeOf","__proto__","awrap","Promise","reverse","prev","stop","rval","handle","finish","delegateYield","asyncGeneratorStep","_asyncToGenerator","_next","_throw","m_suggestions","controller","AbortController","m_index","m_fields","m_size","m_maximumResponses","m_filterByService","m_filterByProjection","m_filterByLayerPriority","m_filterWMTSPriority","m_filterByTMS","m_url","EventTarget","suggest","_ref","_callee","url","params","response","results","_loop","_i","result","_context2","clear","URL","fields","size","searchParams","append","fetch","json","status","_context","findIndex","includes","layer_name","score","sort","inventory","unique","attribution","srs","keywords","extent","metadata","metadata_urls","description","service","tech","tags","theme","producer","dispatchEvent","CustomEvent","bubbles","detail","getSuggestions","_x","abort","getNames","getTitles","setIndex","setFields","setSize","setUrl","eval","setMaximumResponses","setFiltersByService","setFiltersByProjection","setFiltersByLayerPriority","setFilterWMTSPriority","setFiltersByTMS","updateFilterByTMS","_ref2","_callee2","lstName","_context3","layers","_x2","module","objectOrFunction","x","isFunction","isArray","vertxNext","customSchedulerFn","asap","queue","flush","scheduleFlush","setScheduler","scheduleFn","setAsap","asapFn","browserWindow","window","browserGlobal","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","isNode","process","isWorker","Uint8ClampedArray","importScripts","MessageChannel","useNextTick","nextTick","useVertxTimer","useSetTimeout","useMutationObserver","iterations","observer","document","observe","characterData","useMessageChannel","channel","port1","onmessage","port2","postMessage","globalSetTimeout","setTimeout","attemptVertx","vertx","Function","require","runOnLoop","runOnContext","onFulfillment","onRejection","noop","PROMISE_ID","makePromise","_state","invokeCallback","_result","subscribe","resolve$1","Constructor","promise","PENDING","FULFILLED","REJECTED","selfFulfillment","cannotReturnOwn","tryThen","then$$1","fulfillmentHandler","rejectionHandler","handleForeignThenable","thenable","sealed","fulfill","reason","reject","_label","handleOwnThenable","handleMaybeThenable","maybeThenable","publishRejection","_onerror","publish","_subscribers","subscribers","settled","hasCallback","succeeded","initializePromise","resolver","nextId","validationError","Enumerator","_instanceConstructor","_remaining","_enumerate","_eachEntry","entry","resolve$$1","_then","didError","_settledAt","Promise$1","_willSettleAt","state","enumerator","all","_","reject$1","needsResolver","needsNew","catch","finally","polyfill","local","P","promiseToString","cast","_setScheduler","_setAsap","_asap","factory","EventBusClass","listeners","addEventListener","scope","numOfArgs","splice","removeEventListener","numOfCallbacks","newArray","listener","hasEventListener","dispatch","event","concatArgs","getEvents","str","className","undefinedType","isIE","navigator","userAgent","logMethods","_loggersByName","defaultLogger","bindMethod","obj","methodName","bind","traceForIE","log","trace","realMethod","replaceLoggingMethods","getLevel","methodFactory","debug","levels","SILENT","enableLoggingWhenConsoleArrives","defaultMethodFactory","_level","_loggerName","Logger","inheritedLevel","defaultLevel","userLevel","storageKey","persistLevelIfPossible","levelNum","levelName","toUpperCase","localStorage","ignore","cookie","encodeURIComponent","getPersistedLevel","storedLevel","cookieName","location","clearPersistedLevel","removeItem","normalizeLevel","setLevel","persist","setDefaultLevel","resetLevel","enableAll","TRACE","disableAll","rebuild","childName","initialLevel","getLogger","logger","_log","noConflict","getLoggers","globalObject","getGlobal","Headers","Request","Response","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","definition","globalThis","ol","Overlay","VectorTile","Vector","TileWMS","WMTS","ImageWMS","interaction","VERBOSE","env","logname","MessagesResources","PARAM_MISSING","PARAM_EMPTY","PARAM_TYPE","PARAM_FORMAT","PARAM_NOT_SUPPORT","PARAM_NOT_SUPPORT_NODEJS","PARAM_UNKNOWN","SERVICE_REQUEST_BUILD","SERVICE_REQUEST_EMPTY","SERVICE_RESPONSE_EXCEPTION","SERVICE_RESPONSE_EXCEPTION_2","SERVICE_RESPONSE_ANALYSE","SERVICE_RESPONSE_ANALYSE_2","SERVICE_RESPONSE_EMPTY","SERVICE_RESPONSE_EMPTY_2","SERVICE_RESPONSE_FORMAT","SERVICE_RESPONSE_FORMAT_2","SERVICE_RESPONSE_FORMAT_3","CLASS_CONSTRUCTOR","getMessage","clef","parametres","shift","Helper","normalyzeParameters","myParams","tabParams","normalyzeUrl","encode","myUrl","firstOccuranceIndex","indent","msg","XHR","settings","format","timeOut","proxy","content","headers","referer","__call","onResponse","onFailure","__callJSON","__callXML","corps","hXHR","nodefetch","opts","Referer","body","ok","statusText","XMLHttpRequest","overrideMimeType","onTimeOutTrigger","setRequestHeader","onerror","ontimeout","onreadystatechange","readyState","clearTimeout","responseURL","data4xhr","send","XDomainRequest","timeout","onload","responseText","data4xdr","xmlDoc","ActiveXObject","loadXML","JSONP","uuid","floor","Date","now","info","callbackId","callbackSuffix","urlHasCallbackKey","urlHasCallbackName","idx","j","callbackName","HasCallbackName","onTimeOut","_deleteScript","_createScript","scriptu","scripto","Protocol","protocol","nocache","output","getTime","ErrorService","TYPE_UNKERR","stack","TYPE_SRVERR","TYPE_USEERR","CommonService","ssl","proxyURL","httpMethod","rawResponse","onSuccess","outputFormat","request","context","onBuildRequest","callService","onCallService","analyzeResponse","onAnalyzeResponse","buildRequest","success","strUrlProxified","strData","bUrlProxified","requestMetaOptions","apiKey","serverUrl","http","onBeforeParse","newResponse","DefaultUrlService","newUrl","path","Alti","new_key","ProcessIsoCurve","Config","_key","AutoComplete","ReverseGeocode","Geocode","Route","ConfigInterface","generalOptions","apiKeys","defaultGMLGFIStyle","wgs84Resolutions","tileMatrixSets","isKeyConfLoaded","getLayersId","getLayerId","layerName","layerId","parts","servicePartsLayer","getLayersConf","layersIdArray","lyrId","getLayerConf","getLayerParams","layerConf","getLayerKey","serviceParams","styles","formats","projection","defaultProjection","minScale","globalConstraint","minScaleDenominator","maxScale","maxScaleDenominator","bbox","legends","wmtsOptions","tileMatrixSetLimits","TMSLink","tileMatrixSetLink","tmsConf","getTMSConf","matrixIds","tileMatrices","nativeResolutions","layerKey","resourcesByKey","arrayLayerId","getTileMatrixSets","tmsID","getGlobalConstraints","CLASSNAME","customConfigFile","sync","listConfigUrls","__callServiceSync","__callService","listConfigResults","Fetch","fetchFactory","credentials","promises","ConfigJSON","objects","allLayersConfig","allKeysConfig","allTMSConfig","mergeConfig","IConfig","Gp","property","AltiRequest","positions","delimiter","crs","resource","measures","setPositions","lstPosition","lon","getPositions","pos","warn","addPositions","getLon","lstLon","getLat","lstLat","getData","AltiElevationRequest","zonly","_zonly","z","AltiProfilRequest","sampling","_sampling","AltiRequestREST","DataObject","requestString","template","point","profil","post","processRequestString","__addDataInputs","myTemplate","WPS","paramservice","paramversion","paramidentifier","identifier","paramrawdataoutput","rawdataoutput","paramrequest","namespaceByDefault","schemaLocationByDefault","tmpl","sep","that","__addDataInput","tmp","setMethod","getMethod","build","wps","rqstWPS","bOnError","bOnSuccess","api","myReq","xmlString","reader","__getXMLDOC","setReader","parser","errorMsg","parseError","errorCode","line","linepos","parsererror","innerHTML","__readDefault","dataAttributes","nodeAttributes","attribute","__getAttributes","childData","children","getXMLString","setXMLString","getReader","read","getXMLDoc","setXMLDoc","parserOutput","__getRootNode","AltiResponse","elevations","Elevation","Measure","source_name","source_measure","acc","AltiResponseReader","READERS","altiResponse","elevation","textNode","parseFloat","elevationObject","measure","measureChildren","exceptionreport","exceptionReport","exception","exceptionCode","AltiResponseFactory","JSONResponse","errorMess","lstUrlByDefault","urlFound","extension","GeocodeParamREST","geocodeMethod","query","searchGeometry","maxResp","returnTrueGeometry","filters","getFilters","getSearchGeometry","getParams","GeocodeRequestREST","GeocodeRequestFactory","GeocodeResponse","locations","GeocodedLocation","matchType","placeAttributes","accuracy","GeocodeResponseParser","_parseFeature","geocodeResponse","geometry","coordinates","properties","_type","number","features","_parseError","mess","GeocodeReponseFactory","options_","patchOptionConvertor","maximumResponses","filterOptions","returnFreeForm","GeocodeResponseFactory","bbox2Json","circle","circle2Json","polygon","polygon2Json","left","right","radius","jsonGeom","geoEPSG","AutoCompleteResponse","suggestedLocations","SuggestedLocation","commune","fullText","postalCode","classification","street","poi","kind","AutoCompleteResponseFactory","suggestedLocation","country","poiType","city","fulltext","zipcode","territory","terr","RouteParamREST","startPoint","endPoint","intermediates","viaPoints","profile","graph","constraints","optimization","routePreference","getSteps","distanceUnit","timeUnit","waysAttributes","getIntermediates","array","getWaysAttributes","getProfile","getDistanceUnit","getOptimization","getConstraints","constraintArray","RouteRequestREST","RouteResponse","totalTime","totalDistance","routeGeometry","routeInstructions","RouteInstruction","duration","distance","instruction","RouteResponseFactory","legs","legSteps","steps","geometryInInstructions","legList","portions","step","modifier","exit","nom_1_droite","toponyme","constraintTunnel","constraintPont","constraintAutoroute","exclusions","constraintType","operator","provideBbox","expectedStartTime","UrlByDefault","ProcessIsoCurveParam","costType","costValue","time","getLocation","getDirection","ProcessIsoCurveRequest","mode","postRequest","direction","ProcessIsoCurveResponse","ProcessIsoCurveResponseFactory","coords","smoothing","holes","oIsoCurve","getConfig","getAltitude","geocode","reverseGeocode","autoComplete","route","isoCurve","servicesVersion","servicesDate","Protocols","Services","DefaultUrl","IsoCurveResponse","LoggerByDefault","Log","loggers","ProxyUtils","proxifyUrl","proxyOptions","proxyUrl","trim","noProxyDomains","Gfi","getLayerFormat","getType","tileGrid","TileWMSSource","ImageWMSSource","WMTSSource","VectorSource","VectorTileSource","displayInfo","autoPanOptions","_htmlDoc","_content","closer","onclick","featuresOverlay","removeOverlay","contentDiv","autoPan","autoPanAnimation","autoPanMargin","positioning","insertFirst","stopEvent","addOverlay","setPosition","render","features2html","props","getProperties","insertAdjacentHTML","nameDiv","descDiv","others","oDiv","ul","li","listForbidden","span","layerGetFeatureAtCoordinates","olLayer","olCoordinate","pixel","getPixelFromCoordinate","hasFeatureAtPixel","layer","displayVectorFeatureInfo","olLayers","forEachFeatureAtPixel","displayFeatureInfo","gfiLayers","layersOrdered","getZIndex","requests","infoFormat","minMaxResolutionOk","minResolution","getResolution","maxResolution","getVisible","coordinate","_res","getView","_url","getFeatureInfoUrl","getProjection","INFOFORMAT","INFO_FORMAT","vectorLayersOrdered","nextItemIndex","report","displayed","requestsSync","resp","getPosition","offsetX","offsetY","pointerType","pointers","pageX","pageY","getCoordinateFromPixel","onDisplayFeatureInfo","gfiObj","isActive","getMap","preventDefault","interactions","getInteractions","getArray","getActive","SelectInteraction","ModifyInteraction","DrawInteraction","_proxyUrl","_noProxyDomains","_autoPan","_autoPanAnimation","_autoPanMargin","eventLayers","_layers","_defaultEvent","ind","_defaultInfoFormat","gp","GfiUtils","KML","ColorUtils","hex","Number","hexa","arrayToRgba","red","green","blue","arrayToHex","elems","opacity","rgbaToHex","rgba","parsed","hexToRgba","rgb","isHex","isRGB","lightOrange","darkOrange","turquoiseBlue","defaultOffset","Feature","Style","Circle","Icon","Fill","Stroke","geom","Polygon","MultiPolygon","setPropertyFill","getStyle","fill","getFill","colorFill","getColor","cf","Color","oColorFill","setPropertyStroke","stroke","getStroke","colorStroke","cs","oColorStroke","getWidth","setPropertyLabel","isName","getText","getFont","Styling","DEFAULT_TEXT","font","getTextAlign","textAlign","setPropertyMarker","getImage","IconStyle","color","colorIcon","scaleIcon","getScale","round","srcImage","getSrc","unset","fillImg","colorFillImg","cfi","oColorFillImg","strokeImg","colorStrokeImg","csi","oColorStrokeImg","getRadius","APPLY_CONVERT_GEOM_GPX","DEFAULT_ICON","Markers","anchor","scale","DEFAULT_CIRCLE","width","DEFAULT_STROKE","DEFAULT_FILL","opactity","getListTags","defineStyleFromProperties","symbolMarker","colorMarker","labelStroke","labelFill","isLabel","circleRadius","circleStroke","circleFill","getGeometry","isCircle","optionsCircle","StrokeStyle","FillStyle","CircleStyle","optionsText","TextStyle","styleText","cloneStyleText","clone","setText","initType","ClassPoly","setGeometry","getCoordinates","defineStyleFunctionByDefault","defaultStyle","resolution","optsc","optsCircle","styleTextCircle","optsp","optsl","definePropertiesFromStyleByType","definePropertiesFromStyle","getStyleFunction","setStyle","defineTagFromStyle","errorNode","querySelector","formatted","lines","lastType","transitions","ln","single","Boolean","closing","opening","fromTo","padding","detectSupport","isDesktop","mergeParams","_olKML","_this","_classCallCheck","extensions","_possibleConstructorReturn","_inherits","kmlNode","firstNodeLevel","nodes","ik","stylesUrl","_v","types","poly","domStyles","hdlDomStyle","domExtendedData","domNameTag","_idStyle","textContent","fctExtend","extendedData","fctName","nameData","labelStyleDom","iconStyleDom","labelName","labelDescription","fctLabel","labelStyle","fctIcon","iconStyle","fctIconLabel","iconLabelStyle","fstyles","fctPoly","polygonStyle","fctLine","lineStringStyle","fctCircle","circleStyle","fctPoint","pointStyle","_superPropGet","_writeRootExtensions","kmlStringExtended","_writeExtendStylesFeatures","kmlStringFormatted","Parser","__convertRGBColorsToKML","strColor","__createExtendedStyleLabel","textStyle","_fontFamily","_fontSize","_font","splits","strokeTextStyle","_haloColor","colorHex","_haloRadius","labelExtended","fImageStyle","strokeColor","strokeWidth","cfs","strokeColorHex","fillColor","cff","fillColorHex","iconExtended","__createExtendedStyleIcon","yunits","getSize","getAnchor","hotspot","_processKml","nodeIconStyle","nodeLabelStyle","fillColorImgHex","circleExtended","removeNodes","extendDataElement","dataElement","_readExtendStylesFeatures","kmlDoc","kmlString","outerHTML","__convertKMLColorsToRGB","__getExtendedStyleToFeatureLabel","_text","_color","_colorHalo","_radiusHalo","_circleType","_circleRadius","_circleFillColor","_circleStrokeColor","_circleStrokeWidth","bLabelStyleSimpleExtensionGroup","bObjectSimpleExtensionGroup","nodeStyles","attributs","attributsExt","fillColorValue","fillOpacity","fillColorHexa","strokeColorValue","strokeOpacity","strokeColorHexa","StyleInstance","anchorOrigin","anchorXUnits","anchorYUnits","__getExtendedStyleToFeatureIcon","_src","_scale","_bSizeIcon","_sizeW","_sizeH","_bHotSpot","_anchorX","_anchorXUnits","_anchorY","_anchorYUnits","bIconStyle","optionsIcon","crossOrigin","Utils","featureStyleFunction","_styles","_style","__getStyleToDefaultFeature","showPointNames_","extend","_fname","_fdescription","_ftitle","setProperties","childNodesLevel","childNodesExtended","olKML","KMLExtended","GPX","MultiLineString","LineString","_olGPX","readExtensions","clbk","setId","desc","styleFunction","fp","fm","orderBy","cmpA","cmpB","localeCompare","numeric","gpxNode","writeRootExtensions_","processExtensions_","writeExtensions_","gpxStringExtended","gpxStringFormatted","searchChildNodesMeta","nodeMeta","searchChildNodesExt","nodeExt","searchChildNodesData","nodeData","extensionsRoot","toDOM","tag","extensionsNode","actions","fct","olGPX","GPXExtended","GeoJSON","_olGeoJSON","_this2","geoJSONObject","writeFeaturesObject","olGeoJSON","GeoJSONExtended","_WMTSSource","_callSuper","pixelRatio","tilePixelRatio","tileCoord","getTileCoordForCoordAndResolution","tileExtent","getTileCoordExtent","transformedTileCoord","tmpTileCoord","tmpExtent","olCreateEmpty","getExtent","isGlobal","ceil","olGetWidth","olIntersects","getTransformedTileCoord","getResolutions","tileResolution","tileMatrix","getMatrixIds","baseParams","SERVICE","VERSION","REQUEST","LAYER","getLayer","TILECOL","TILEROW","TILEMATRIX","TILEMATRIXSET","getMatrixSet","FORMAT","getFormat","STYLE","tileSize","getTileSize","min","urls","WMTSExtended","tilegrid","LayerUtils","getZoomLevelFromScaleDenominator","scaleDenominator","resolutionsNatives","getAttributions","zoom","attributions","originators","visibility","drawLogo","jl","originator","kl","constraint","minZoomLevel","maxZoomLevel","viewExtent","bounds","intersects","logo","container","href","height","extent1","extent2","intersectsX","intersectsY","configuration","isConfigLoaded","global","SourceWMTS","_WMTSExtended","layerCfg","wmtsParams","urlParams","Pkg","olExtVersion","wmtsSourceOptions","maxZoom","matrixSet","WMTSTileGrid","resolutions","origin","topLeftCorner","olParams","_originators","_legends","_metadata","_description","_title","_quicklookUrl","quicklookUrl","GeoportalWMTS","SourceWMS","_TileWMSSource","wmsParams","wmsSourceOptions","LAYERS","STYLES","GeoportalWMS","loadingstrategy","SourceWFS","_VectorSource","wfsParams","loadFeatures","failure","xhr","removeLoadedExtent","readFeatures","addFeatures","links","rel","wfsSourceOptions","loader","maxFeatures","proj","getCode","strategy","olLoadingstrategyTile","olTilegrid","minZoom","GeoportalWFS","Tile","LayerWMTS","_TileLayer","olSourceParams","sourceParams","wmtsSource","layerTileOptions","globalConstrainWFSts","globalConstraints","olGetProj","getUnits","TileLayer","LayerWMS","wmsSource","geobbox","olTransformExtentProj","STYLEBYDEFAULT","LayerWFS","_VectorLayer","layerVectorOptions","VectorLayer","TileJSON","MVT","Observable","compose","transform","dx1","dy1","sx","sy","dx2","dy2","sin","cos","createOrUpdate","minX","minY","maxX","maxY","createOrUpdateEmpty","Infinity","createOrUpdateFromFlatCoordinates","flatCoordinates","stride","extendXY","extendFlatCoordinates","getHeight","squaredSegmentDistance","x1","y1","x2","y2","dx","dy","douglasPeucker","squaredTolerance","simplifiedFlatCoordinates","simplifiedOffset","markers","last","first","maxSquaredDistance","squaredDistance","douglasPeuckerArray","ends","simplifiedEnds","snap","tolerance","quantize","x3","y3","quantizeArray","ascending","arr","linearRingContainsXY","wn","linearRingsContainsXY","getInteriorPointOfArray","flatCenters","flatCentersOffset","intersections","rr","pointX","NaN","maxSegmentLength","segmentLength","abs","code_","units_","extent_","worldExtent_","worldExtent","axisOrientation_","axisOrientation","global_","canWrapX_","getPointResolutionFunc_","getPointResolution","defaultTileGrid_","metersPerUnit_","metersPerUnit","canWrapX","getMetersPerUnit","getWorldExtent","getAxisOrientation","setGlobal","getDefaultTileGrid","setDefaultTileGrid","setExtent","setWorldExtent","setGetPointResolution","func","getPointResolutionFunc","RADIUS","HALF_SIZE","EXTENT","WORLD_EXTENT","MAX_SAFE_Y","tan","EPSG3857Projection","super","units","cosh","PROJECTIONS","fromEPSG4326","dimension","toEPSG4326","atan","exp","EPSG4326Projection","cache","transforms","destination","transformFn","sourceCode","destinationCode","E","sqrt","epsgRegExes","zoneFromCode","epsgId","re","north","projectionFactories","cloneTransform","addProjection","add","projectionLike","makeProjection","addEquivalentProjections","projections","addProjections","projections2","forwardTransform","inverseTransform","linearRingIsClockwise","edge","interpolatePoint","fraction","cumulativeLengths","haystack","needle","comparator","cmp","low","high","found","binarySearch","projection1","projection2","tmpTransform","RenderFeature","id_","type_","flatCoordinates_","flatInteriorPoints_","flatMidpoints_","ends_","properties_","squaredTolerance_","stride_","simplifiedGeometry_","createOrUpdateFromCoordinate","getFlatInteriorPoint","flatCenter","getFlatInteriorPoints","endss","startOrientation","prevEndIndex","orientation","linearRingss","interiorPoints","getInteriorPointsOfMultiArray","getFlatMidpoint","getFlatMidpoints","midpoint","getId","getOrientedFlatCoordinates","getSimplifiedGeometry","simplifyTransformed","getPropertiesInternal","getStride","pixelExtent","projectedExtent","destinationStride","transform2D","applyTransform","getEnds","enableSimplifyTransformed","fn","lastResult","lastArgs","lastThis","nextArgs","arr1","arr2","len1","memoizeOne","getFlatCoordinates","functions","canvas","TileState","util","Image","Layer","Group","Raster","Source","TileGrid","View","Units","events","Event","getDefaultExportFromCjs","parseCSSColor_1","kCSSColorTable","clamp_css_byte","clamp_css_float","parse_css_int","parse_css_float","css_hue_to_rgb","m1","m2","parseCSSColor","css_str","iv","op","ep","fname","toArray","toArray01","toArray01PremultipliedAlpha","black","white","transparent","Color$1","convertLiteral","convertFunction","parameters","propertySpec","stops","expression","convertIdentityFunction","zoomAndFeatureDependent","featureDependent","zoomDependent","tokens","convertTokenString","featureFunctionParameters","featureFunctionStops","zoomStops","functionType","getFunctionType","getInterpolateOperator","appendStopPair","convertPropertyFunction","fixupDegenerateStepCurve","convertZoomAndPropertyFunction","isStep","convertZoomFunction","colorSpace","getFallback","defaultValue","curve","interpolated","literal","ParsingError","ParsingError$1","Scope","bindings","has","Scope$1","NullType","NumberType","StringType","BooleanType","ColorType","ObjectType","ValueType","CollatorType","FormattedType","ResolvedImageType","array$1","itemType","N","toString$1","valueMemberTypes","checkSubtype","expected","memberType","isValidType","provided","allowedTypes","some","isValidNativeType","Collator","caseSensitive","diacriticSensitive","locale","sensitivity","collator","Intl","usage","compare","lhs","rhs","resolvedLocale","resolvedOptions","FormattedSection","fontStack","textColor","Formatted","sections","fromString","unformatted","isEmpty","section","serialize","serialized","ResolvedImage","available","validateRGBA","isValue","mixed","typeOf","Literal","expectedType","evaluate","eachChild","outputDefined","Literal$1","RuntimeError$1","toJSON","types$2","string","boolean","Assertion","ctx","Assertion$1","FormatExpression","firstArg","nextTokenMayBeObject","lastExpression","evaluatedContent","ImageExpression","evaluatedImageName","availableImages","types$1","Coercion","parseColor","Coercion$1","geometryTypes","EvaluationContext$1","globals","featureState","formattedSection","_parseColorCache","canonical","featureTileCoord","featureDistanceData","geometryType","canonicalID","distanceFromCenter","center","dX","dY","bearing","cached","CompoundExpression","_evaluate","definitions","availableOverloads","overloads","signature","signatureContext","ParsingContext$1","registry","parsedArgs","argParseFailed","signatures","stringifySignature","actualTypes","register","CompoundExpression$1","CollatorExpression","updateBBox","coord","boxWithinBox","bbox1","bbox2","getTileCoordinates","tilesAtZoom","pow","onBoundary","p1","p2","pointWithinPolygon","rings","inside","len2","pointWithinPolygons","polygons","twoSided","q1","q2","det1","det2","lineIntersectLine","vectorP","vectorQ","v1","v2","lineIntersectPolygon","lineStringWithinPolygon","lineStringWithinPolygons","getTilePolygon","getTilePolygons","updatePoint","polyBBox","worldSize","halfWorldSize","getTilePoints","pointBBox","shifts","tilePoints","points","getTileLines","lineBBox","tileLines","tileLine","resetBBox","Within","geojson","geometries","polygonGeometry","tilePolygon","tilePolygons","pointsWithinPolygons","linesWithinPolygons","Within$1","isFeatureConstant","isStateConstant","isGlobalPropertyConstant","Var","boundExpression","Var$1","ParsingContext","expr","_parse","annotate","typeAnnotation","Expr","actual","isConstant","ec","isTypeAnnotation","childrenConstant","findStopLessThanOrEqualTo","currentValue","nextValue","lowerIndex","upperIndex","currentIndex","Step","labels","outputs","label","outputType","labelKey","valueKey","stopCount","out","Step$1","unitbezier","UnitBezier","p1x","p1y","p2x","p2y","cx","bx","ax","cy","by","ay","sampleCurveX","sampleCurveY","sampleCurveDerivativeX","solveCurveX","t0","t1","t2","d2","solve","UnitBezier$1","interpolate","from","to","Xn","Zn","t3","deg2rad$1","rad2deg","xyz2lab","lab2xyz","xyz2rgb","rgb2xyz","rgbToLab","rgbColor","labToRgb","labColor","interpolateHue","lab","forward","hcl","atan2","hclColor","Interpolate","interpolation","interpolationFactor","lower","upper","exponentialInterpolation","controlPoints","rest","outputLower","outputUpper","lowerValue","upperValue","difference","progress","Interpolate$1","Coalesce","needsAnnotation","firstImage","argCount","Coalesce$1","Let","binding","Let$1","At","At$1","In","In$1","IndexOf","fromIndex","IndexOf$1","Match","inputType","cases","otherwise","labelContext","MAX_SAFE_INTEGER","sortedLabels","groupedByOutput","outputLookup","outputIndex","coerceLabel","Match$1","Case","branches","Case$1","Slice","beginIndex","endIndex","Slice$1","isComparableType","eqCollate","makeComparison","compareBasic","compareWithCollator","isOrderComparison","Comparison","hasUntypedArgument","rt","Equals","NotEquals","LessThan","GreaterThan","LessThanOrEqual","GreaterThanOrEqual","NumberFormat","currency","unit","minFractionDigits","maxFractionDigits","minimumFractionDigits","maximumFractionDigits","Length","expressions","varargs","pitch","heatmapDensity","lineProgress","skyRadialProgress","accumulated","LN2","LN10","asin","acos","isSupportedScript","StyleExpression","_warningHistory","_evaluator","_defaultValue","spec","getDefaultValue","_enumValues","evaluateWithoutErrorHandling","val","createExpression","enum","resolvedImage","getExpectedType","ZoomConstantExpression","_styleExpression","isStateDependent","ZoomDependentExpression","interpolationType","createPropertyExpression","isFeatureConstant$1","supportsPropertyExpression","isZoomConstant","supportsZoomExpression","zoomCurve","findZoomCurve","supportsInterpolation","childResult","deepUnbundle","unbundledValue","valueOf","unbundle","isExpressionFilter","createFilter","layerType","needGeometry","needFeature","convertFilter","filterExp","staticFilter","isDynamicFilter","unionDynamicBranches","collapseDynamicBooleanExpressions","extractStaticFilter","filterSpec","compiledStaticFilter","filterFunc","err","globalProperties","dynamicFilterFunc","compiledDynamicFilter","dynamicFilter","geometryNeeded","collapsed","dynamicConditionExpressions","collapsedExpression","subExpression","isBranchingDynamically","Set","convertComparisonOp","convertNegation","convertInOp","convertHasOp","refProperties","deref","derefLayers","ref","fontWeights","thin","hairline","light","book","regular","normal","plain","roman","standard","medium","bold","heavy","fat","poster","sp","italicRE","fontCache","mb2css","fonts","lineHeight","cssData","haveWeight","haveStyle","weight","fontFamilies","maybeWeight","w","previousPart","startsWith","fontFamily","mapboxBaseUrl","getMapboxPath","normalizeStyleUrl","token","mapboxPath","decodeURI","mapboxSubdomains","normalizeSourceUrl","tokenParam","styleUrl","urlObject","sizeFactor","devicePixelRatio","functionCacheByStyleId","filterCacheByStyleId","styleId","getStyleId","glStyle","getStyleFunctionKey","getUid","getFunctionCache","functionCache","getFilterCache","filterCache","deg2rad","degrees","defaultResolutions","res","createCanvas","WorkerGlobalScope","OffscreenCanvas","getZoomForResolution","zoomFactor","getResolutionForZoom","factor","pendingRequests","fetchResource","resourceType","transformedRequest","transformRequest","pendingRequest","toPromise","getGlStyle","glStyleOrUrl","accessToken","tilejsonCache","getTileJson","glSource","cacheKey","tileLoadFunction","tile","setLoader","arrayBuffer","featureProjection","setFeatures","setState","blob","createObjectURL","revokeObjectURL","tiles","normalizedSourceUrl","accessTokenParam","tileJson","tileUrl","scheme","drawIconHalo","spriteImage","spriteImageData","haloWidth","haloColor","imgSize","imageCanvas","imageContext","getContext","drawImage","imageData","getImageData","globalCompositeOperation","fillStyle","jj","arc","smoothstep","drawSDF","buffer","putImageData","hairSpacePool","applyLetterSpacing","letterSpacing","textWithLetterSpacing","joinSpaceString","measureContext","getMeasureContext","measureText","measureCache","wrapText","em","hardLines","wrappedText","words","maxWidth","word","testLine","prevWidth","nextWidth","lineWords","lastWord","fontFamilyRegEx","stripQuotesRegEx","loadedFontFamilies","hasFontFamily","family","styleSheets","styleSheet","cssRules","rules","cssRule","cssText","processedFontFamilies","emptyObj$1","zoomObj","renderFeatureCoordinates","renderFeature","layoutOrPaint","isExpr","compiledExpression","rawExpression","expressionData","getDeclutterMode","evaluateFilter","renderTransparentEnabled","colorWithOpacity","templateRegEx","fromTemplate","recordLayer","styleFunctionArgs","stylefunction","sourceOrLayers","spriteData","spriteImageUrl","getFonts","spriteImageSize","spriteImageUnSDFed","blobUrl","changed","worker","action","allLayers","layersBySourceLayer","mapboxLayers","iconImageCache","patternCache","mapboxSource","sourceLayer","sources","textHalo","onlyLayer","featureBelongsToLayer","stylesLength","layerData","layout","paint","minzoom","maxzoom","fillIcon","icon","setZIndex","icon_cache_key","pattern","globalAlpha","createPattern","setColor","setWidth","setLineCap","setLineJoin","setMiterLimit","setLineDash","iconImg","skipLabel","textLineHeight","textSize","maxTextWidth","hasImage","placementAngle","iconImage","styleGeom","imageElement","iconRotationAlignment","xM","dotProduct","iconSize","iconColor","iconCacheKey","declutterMode","displacement","iconOptions","rotateWithView","sdf","setRotation","setOpacity","setAnchor","setImage","circleStrokeColor","circleTranslate","circleColor","circleStrokeWidth","cache_key","fontArray","textField","chunk","chunkFont","textTransform","wrappedLabel","setFont","setKeepUpright","keepUpright","textAnchor","placement","setPlacement","setRepeat","symbolSpacing","setOverflow","textHaloWidth","textOffset","textTranslate","vOffset","hOffset","textRotationAlignment","setRotateWithView","setMaxAngle","setTextAlign","textBaseline","setTextBaseline","textJustify","setJustify","setOffsetX","setOffsetY","setFill","halfTextSize","setStroke","textPadding","getPadding","getTileResolutions","createXYZ","completeOptions","applyStyle","sourceOrLayersOrOptions","optionsOrPath","sourceId","updateSource","assignSource","setupVectorSource","targetSource","setTileUrlFunction","getTileUrlFunction","setUrls","getUrls","format_","setAttributions","getTileLoadFunction","defaultLoadFunction","setTileLoadFunction","equivalent","getTileGrid","setSource","isFinite","getMaxResolution","getMinZoom","setMaxResolution","setupGeoJSONSource","url_","getUrl","spriteScale","onChange","sprite","METERS_PER_UNIT","templateUrl","webfonts","fontsKey","fontDescriptions","cssFont","registerFont","fontDescription","checkedFonts","fontUrl","markup","head","normalizeSpriteUrl","spriteUrl","pathname","spritesJson","transformed","sourceOptionsFromTileJSON","tileJSON","tileJSONSource","tileJSONDoc","getTileJSON","fromLonLat","tr","extentFromTileJSON","projectionExtent","sourceOptions","getTopLeft","getOrigin","getBboxTemplate","geoJsonFormat","dataProjection","geoJsonUrl","extentUrl","bboxTemplate","getUserProjection","LayerMapBox","_VectorTileLayer","styleTitle","styleName","layerVectorTileOptions","setStyleMapBox","onStyleMapBoxLoad","onStyleMapBoxError","styleSource","vectorTileJson","TileJSONSource","on","getState","observableUnByKey","VectorTileLayer","GeoportalMapBox","exceptions","openedPanelID","openedPanel","exceptionPanel","controlPanels","bottomLeft","topLeft","_toConsumableArray","bottomRight","topRight","panelID","isException","getSameSideOpenedPanel","click","onPanelOpen","PanelManager","control","Control","getComputedStyle","getPropertyValue","ControlExtended","_Control","listable","_createClass","PositionFactory","update","ANCHORS","_PositionFactory_brand","WeakSet","caller","_classPrivateMethodInitSpec","_assertClassBrand","_createContainer","_setAnchor","prepend","_existContainer","getOverlayContainerStopEvent","sizeW","offsetWidth","sizeH","offsetHeight","panels","panel","checkDsfr","timestamp","SelectorID","generate","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread2","_defineProperty","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","off","selector","msMatchesSelector","webkitMatchesSelector","getParentOrHost","host","closest","includeCTX","_throttleTimeout","R_SPACE","toggleClass","classList","css","defaultView","currentStyle","matrix","selfOnly","appliedTransforms","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","getBoundingClientRect","elRect","innerHeight","innerWidth","containerRect","elMatrix","scaleX","scaleY","isScrolledPast","elSide","parentSide","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","display","Sortable","ghost","dragged","draggable","lastElementChild","previousElementSibling","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","isRectEqual","rect1","rect2","throttle","ms","scrollBy","Polymer","$","jQuery","Zepto","getChildContainingRectFromElement","ghostEl","_rect$left","_rect$top","_rect$right","_rect$bottom","animated","childRect","expando","AnimationStateManager","animationCallbackId","animationStates","captureAnimationState","animation","fromRect","thisAnimationDuration","childMatrix","addAnimationState","removeAnimationState","indexOfObject","animateAll","animating","animationTime","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","animate","animationResetTimer","currentRect","translateX","translateY","animatingX","animatingY","forRepaintDummy","repaint","easing","plugins","defaults","initializeByDefault","PluginManager","mount","plugin","option","pluginName","pluginEvent","eventName","sortable","evt","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","createEvent","initEvent","cancelable","pullMode","lastPutMode","allEventProperties","_excluded","dragEl","parentEl","nextEl","lastDownEl","cloneHidden","dragStarted","moved","activeSortable","active","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","touchingSideChild2","_prepareGroup","toFn","pull","sameGroup","group","otherGroup","originalGroup","checkPull","checkPut","put","revertClone","stopPropagation","stopImmediatePropagation","nearestEmptyInsertDetectEvent","touches","nearest","clientX","clientY","threshold","emptyInsertThreshold","insideHorizontally","insideVertically","ret","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","store","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","ghostClass","chosenClass","dragClass","preventOnFilter","setData","dataTransfer","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_generateId","_nextTick","_cancelNextTick","_getDirection","touch","originalTarget","shadowRoot","composedPath","inputs","_saveInputCheckedState","button","isContentEditable","criteria","_prepareDragStart","dragStartFn","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","_onTouchMove","_onDragStart","selection","getSelection","removeAllRanges","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","ghostMatrix","relativeScrollOffset","cssMatrix","_hideClone","cloneId","_loopId","setInterval","effectAllowed","_dragStartId","revert","vertical","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","lastElRect","childContainingRect","spacer","_ghostIsLast","firstElRect","_ghostIsFirst","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_getSwapDirection","dragIndex","nextElementSibling","after","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","save","handleEvent","dropEffect","_globalDragOver","useAnimation","items","destroy","querySelectorAll","utils","is","dst","cancelNextTick","detectDirection","_len","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","pid","clearPointerElemChangedInterval","isFallback","scroll","scrollCustomFn","sens","scrollSensitivity","speed","scrollSpeed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","scrollOffsetY","scrollOffsetX","bubbleScroll","drop","toSortable","changedTouches","onSpill","Revert","Remove","dragStart","_ref3","_ref4","parentSortable","AutoScroll","forceAutoScrollFallback","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","LayerSwitcherDOM","_createDraggableElement","elementDraggable","handleClass","onEnd","_onEndDragAndDropLayerClick","_addUID","_uid","_createMainContainerElement","_createMainLayersShowElement","_createMainLayersElement","dialog","_createMainLayersDivElement","_createMainPictoElement","htmlFor","ariaPressed","onShowLayerSwitcherClick","attachEvent","_createMainCounterLayersElement","_createMainInfoElement","divP","_createMainInfoDivElement","_createLayersPanelHeaderElement","_createLayersPanelIconElement","_createLayersPanelTitleElement","_createLayersPanelCloseElement","btnClose","innerText","_createContainerLayerElement","_createBasicToolElement","_createAdvancedToolShowElement","_createAdvancedToolElement","_createBasicToolNameElement","_createBasicToolVisibilityElement","_createBasicToolDragNDropElement","_onStartDragAndDropLayerClick","visible","_onVisibilityLayerClick","_createAdvancedToolDeleteElement","_createAdvancedToolInformationElement","_createAdvancedToolOpacityElement","_createAdvancedToolExtentElement","btn","contextual","_onDropLayerClick","btnInfo","_onOpenLayerInfoClick","divO","dataset","frJsRange","setProperty","ariaLabel","_onChangeLayerOpacity","divC","_onZoomToExtentClick","_createContainerLayerInfoElement","header","onCloseClick","quick","refquick","mtd","mtdtitle","urlmtd","mtdlink","refmtd","lgd","lgdtitle","urllgd","lgdlink","reflgd","LayerSwitcher","_options","_initialize","_initContainer","_addMapLayers","_showLayerSwitcherButton","_listeners","onMoveListener","_onMapMoveEnd","onAddListener","getLayers","gpLayerId","_layerId","addLayer","onRemoveListener","removeLayer","olObservableUnByKey","_layersOrder","gutter","getContainer","_this3","isLayerInMap","lyr","infodiv","advancedTools","layerInfos","getLayerInfo","getOpacity","isInRange","layerOptions","inRange","layerDiv","_createLayerDiv","_forceNullzIndex","_updateLayersOrder","_lastZIndex","_layerListContainer","updateLayerOpacity","_updateLayerOpacity","updateLayerVisibility","_updateLayerVisibility","onZIndexChangeEvent","_updateLayerCounter","layerID","layerIndex","layerOrderTemp","isCollapsed","removable","removalDiv","_layersIndex","conf","changeCollapsed","picto","counter","_layerSwitcherCounter","divL","panelHeader","panelIcon","panelTitle","panelClose","divI","divD","_this4","zindex","isLegends","isMetadata","isQuicklookUrl","displayInformationElement","opened","updatePosition","divId","opacityValue","layerOpacityInput","layerOpacitySpan","setVisible","layerVisibility","_this5","_maxScaleDenominator","infoLayer","_this6","matchesLayers","maxZIndex","updateSize","domIDShort","domIDLong","gpResultLayerId","layerService","view","crsTarget","crsSource","fit","sourceExtent","_this7","foundId","mapResolution","getMinResolution","mapExtent","calculateExtent","layerExtent","layerInfo","layerProperties","Widget","Draggable","dragElement","dragStartMouseX","dragStartMouseY","diffX","diffY","positionX","positionY","dragMouseDown","viewport","viewPortRect","closeDragElement","elementDrag","currentMouseX","currentMouseY","oldDiffX","oldDiffY","newLeft","newTop","newX","newY","_defineProperties","_toPropertyKey","toPrimitive","_toPrimitive","AsyncData","initialData","_set","updates","_x3","allSettled","GetFeatureInfoDOM","uid","stringToHTML","support","_createShowGetFeatureInfoPictoElement","onShowGetFeatureInfoClick","_createGetFeatureInfoPanelElement","_createGetFeatureInfoPanelDivElement","_createGetFeatureInfoPanelHeaderElement","_createGetFeatureInfoPanelTitleElement","_createGetFeatureInfoPanelCloseElement","onCloseGetFeatureInfoClick","_createGetFeatureInfoWaitingDiv","_createGetFeatureInfoAccordionGroup","_createGetFeatureInfoLayerAccordion","layername","accordeon","currentTarget","ariaExpanded","collapse","_objectSpread","ReferenceError","_assertThisInitialized","_isNativeReflectConstruct","Reflect","construct","_get","_getPrototypeOf","_superPropBase","_setPrototypeOf","GetFeatureInfo","initialize","initContainer","panelGetFeatureInfoContainer","panelGetFeatureInfoHeaderContainer","getTargetElement","buttonGetFeatureInfoShow","auto","addEventsListeners","removeEventsListeners","getFeatureInfoPanelDiv","buttonGetFeatureInfoClose","getFeatureInfoAccordionGroup","panelGetFeatureInfoEntriesContainer","eventsListeners","getFeatureInfoPanel","getFeatureInfoPanelHeader","getFeatureInfoPanelTitle","getFeatureInfoCloseBtn","accordionGroup","onMapClick","un","getFeatureInfoIsActive","isVisible","displayGetFeatureInfo","gfiLayer","getFeaturesAtClick","_getGetFeatureInfoContent","layerTitle","gfiContent","getGetFeatureInfoLayer","getLayerTitle","pending","gfi","asyncD","getGetFeatureInfoContent","_extensions","clean","setActive","MathUtils","modulo","decimalToDMS","hemispheres","numDigits","normalizedDegrees","dflPrecision","precision","sec","dmsToDecimal","minutes","seconds","coordinateToDecimal","toFixed","lng","coordinateToDMS","coordinateToRad","coordinateToGon","coordinateToMeter","coordinateToKMeter","toInteger","isInteger","toFloat","advancedSearchFiltersByDefault","PositionOfInterest","StreetAddress","CadastralParcel","zoomToResultsByDefault","importance","getGeocodedLocationFreeform","geocodedLocation","resultToReturn","toponym","category","postcode","housenumber","getSuggestedLocationFreeform","SRS_WGS84_SEMIMAJOR","SRS_WGS84_ESQUARED","SEC_TO_RAD","HALF_PI","EPSLN","D2R","R2D","FORTPI","TWO_PI","SPI","to_meter","ignoredChar","testkey","lkey","defData","paramName","paramVal","paramOutname","paramObj","datum","rf","lat_0","lat0","lat_1","lat1","lat_2","lat2","lat_ts","lon_0","long0","lon_1","long1","lon_2","long2","rectified_grid_angle","lonc","longc","x_0","x0","y_0","y0","k_0","k0","r_a","R_A","zone","south","utmSouth","towgs84","datum_params","from_greenwich","nadgrids","datumCode","legalAxis","txt","NEUTRAL","whitespace","latin","keyword","endThings","digets","place","currentObject","mapit","thing","newObj","sExpr","convert","readCharicter","neutral","quoted","afterquote","afterItem","newObjects","knownTypes","d2r","cleanWKT","wkt","setPropertiesFromWkt","AUTHORITY","authority","projName","PROJECTION","AXIS","axisOrder","UNIT","DATUM","SPHEROID","geogcs","GEOGCS","toMeter","sphere","ellps","TOWGS84","outName","inName","rename","lisp","defs","def","EPSG","ESRI","IAU2000","WGS84","GOOGLE","codeWords","codes","testObj","testDef","testWKT","auth","checkMercator","maybeProjStr","ext","checkProjStr","testProj","eccent","sinphi","cosphi","con","sign","com","ts","dphi","eccnth","identity","projs","init","es","msfnz","adjust_lon","tsfnz","inverse","phi2z","names","projStore","ellipseName","datums","wgs84","ellipse","datumName","ch1903","ggrs87","nad83","nad27","potsdam","carthage","hermannskogel","mgi","osni52","ire65","rassadiran","nzgd49","osgb36","s_jtsk","beduaram","gunung_segara","rnb72","ep2","datum_type","grids","loadedNadgrids","parseNadgridString","optional","mandatory","grid","isNull","secondsToRadians","decodeString","Uint8Array","mapNodes","longitudeShift","latitudeShift","readGridHeader","isLittleEndian","lowerLatitude","getFloat64","upperLatitude","lowerLongitude","upperLongitude","latitudeInterval","longitudeInterval","gridNodeCount","getInt32","readGridNodes","gridHeader","nodesOffset","gridShiftRecords","record","getFloat32","latitudeAccuracy","longitudeAccuracy","srsCode","parseCode","ourProj","datumDef","Datum","a2","b2","sphere_","ecc","getNadgrids","datumObj","geodeticToGeocentric","Rn","Sin_Lat","Sin2_Lat","Cos_Lat","Longitude","Latitude","Height","geocentricToGeodetic","RR","CT","ST","RX","RK","RN","CPHI0","SPHI0","CPHI","SPHI","SDPHI","iter","genau","X","Y","Z","checkParams","compareDatums","source_a","source_es","applyGridShift","dest_a","dest_b","dest_es","Dx_BF","Dy_BF","Dz_BF","Rx_BF","Ry_BF","Rz_BF","M_BF","geocentricToWgs84","x_tmp","y_tmp","z_tmp","geocentricFromWgs84","attemptedGrids","outer","subgrids","subgrid","del","lim","applySubgridShift","pin","ct","tb","nadInterpolate","dif","inx","indx","frct","f00","cvs","f10","f11","f01","m11","m10","m00","m01","denorm","xin","yin","zin","checkCoord","enforceAxis","hasZ","toPoint","checkSanity","checkNotWGS","adjust_axis","datum_transform","transformer","transformedArray","checkProj","oProj","fromProj","toProj","SET_ORIGIN_COLUMN_LETTERS","SET_ORIGIN_ROW_LETTERS","A","I","O","V","mgrs","UTMtoLL","decode","utm","seasting","easting","snorthing","northing","zoneNumber","zoneLetter","setParm","get100kSetForZone","setColumn","setRow","column","row","parm","colOrigin","rowOrigin","colInt","rowInt","rollover","getLetter100kID","eccPrimeSquared","T","C","M","LongOriginRad","ZoneNumber","Lat","Long","eccSquared","LatRad","degToRad","LongRad","UTMEasting","UTMNorthing","getLetterDesignator","LLtoUTM","radToDeg","rad","N1","T1","C1","R1","D","LongOrigin","phi1Rad","e1","LetterDesignator","mgrsString","testChar","hunK","sb","east100k","curCol","eastingValue","rewindMarker","getEastingFromChar","north100k","curRow","northingValue","getNorthingFromChar","getMinNorthing","remainder","accuracyBonus","sepEastingString","sepNorthingString","sepEasting","sepNorthing","fromMGRS","mgrsStr","toMGRS","C04","C06","C08","en","sphi","cphi","pj_mlfn","pj_enfn","ml0","delta_lon","sin_phi","cos_phi","al","als","tq","ml","pj_inv_mlfn","tan_phi","ds","temp","log1py","hypot","pp","B","cos_2B","h1","h2","arg_r","arg_i","hr2","hi2","sin_arg_r","cos_arg_r","sinh_arg_i","sinh","cosh_arg_i","hi1","hr1","hi","tmerc","cgb","cbg","utg","gtu","np","Qn","gatg","Zb","clens","Ce","Cn","sin_Cn","cos_Cn","sin_Ce","cos_Ce","asinhy","clens_cmplx","adjust_zone","etmerc","dependsOn","esinp","rc","phic0","ratexp","K","srat","gauss","sinc0","cosc0","R2","sinc","cosc","cosl","coslat0","sinlat0","cons","ms1","X0","ssfn_","cosX0","sinX0","sinX","cosX","rh","sinlat","coslat","dlon","ce","phit","eccen","phy0","lambda0","sinPhy0","semiMajorAxis","flattening","e2","R","b0","k1","k2","k3","Sa1","Sa2","rotI","rotB","phy","prevPhy","iteration","TOL","cosph0","F","H","L","sinph0","J","gamma0","projectionName","lamc","lam1","lam2","phi1","phi2","alpha_c","no_off","no_rot","alp","gam","one_es","lam0","singam","cosgam","sinrot","cosrot","rB","ArB","BrA","u_0","v_pole_n","v_pole_s","U","W","Qp","Sp","Tp","Vp","Up","sin1","cos1","ts1","sin2","cos2","ms2","ts2","ts0","f0","rh1","s45","s90","fi0","alfa","uq","u0","n0","s0","ro0","ad","deltav","eps","ro","czech","fi1","e0","e3","e0fn","e1fn","e2fn","e3fn","mlfn","lam","nl","gN","tl","asq","cl","imlfn","nl1","rl1","tl1","dl","dsq","adjust_lat","P00","P01","P02","P10","P11","P20","S_POLE","N_POLE","EQUIT","OBLIQ","qp","qsfnz","mmf","apa","APA","authset","rq","xmf","ymf","sinb1","cosb1","coslam","sinlam","q","sinb","cosb","cCe","sCe","ab","cosz","sinz","sin_po","cos_po","qs1","qs2","qs0","ns0","qs","phi1z","asinz","eccnts","sin_p14","cos_p14","infinity_dist","coslon","iqsfnz","dlat","bl","tanphi","mln","mlnp","ma","B_re","B_im","C_re","C_im","delta_lat","d_phi","d_lambda","d_phi_n","d_psi","th_n_im1","th_re","th_im","th_n_re","th_n_im","z_re","z_im","z_n_im1","delta_x","z_n_re","z_n_im","num_re","num_im","den_re","den_im","den2","d_psi_n","C_y","C_x","delta_theta","ml1","ml2","sinth","costh","gsq","msq","xx","yy","xys","c1","c2","c3","a1","th1","sin_p12","cos_p12","Mlp","Ml","Nl1","Nl","Az","G","GH","Hs","kp","cos_c","s2","s3","s4","cosAz","Ee","sinpsi","FACE_ENUM","AREA_ENUM","qsc_fwd_equat_face_theta","qsc_shift_lon_origin","slon","face","one_minus_f","one_minus_f_squared","xy","sinlon","cosmu","tannu","tantheta","invert_sign","xa","lp","COEFS_X","COEFS_Y","FXC","FYC","RC1","NODES","poly3_val","coefs","f_df","max_err","iters","upd","newton_rapshon","poly3_der","azi","tilt","pn1","rp","pfact","cg","sg","cw","sw","yt","ba","bm","bq","flip_axis","sweep","radius_g_1","radius_g","rone_es","radius_p","radius_p2","radius_p_inv2","shape","v_x","v_y","v_z","det","v_zp","A1","A2","A3","A4","paramLat","paramLatSq","paramLatPow6","EPS10","e_fwd","am1","e_inv","s_fwd","cphi1","s_inv","defaultDatum","Proj","Point","nadgrid","DataView","nFields","detectLittleEndian","nSubgridFields","nSubgrids","shiftType","fromSemiMajorAxis","fromSemiMinorAxis","toSemiMajorAxis","toSemiMinorAxis","readHeader","gridOffset","subHeader","lngColumnCount","latColumnCount","readSubgrids","proj4","sterea","stere","somerc","omerc","lcc","krovak","cass","laea","aea","gnom","cea","eqc","nzmg","mill","sinu","moll","eqdc","vandg","aeqd","ortho","qsc","robin","geocent","tpers","geos","eqearth","bonne","Projection","projCodes","code1","proj1","code2","proj2","getTransform","addCoordinateTransforms","Register","isLoaded","_register","_code","load","Proj4","registers","loadByDefault","CRS","IGNF","LAMB93","LAMBE","LAMB1","LAMB2","LAMB3","LAMB4","RGF93G","WGS84G","loadByName","AMST63","CROZ63","CSG67","ED50","ETRS89","GUAD48","GUADFM49","IGN63","IGN72","KERG62CAR","MART38","MAYO50","MOOREA87","NTF","NUKU72","REUN47","RGF93","RGFG95","RGM04","RGNC","RGPF","RGR92","RGSPM06","RGTAAF07","RRAF91","STPL69","STPM50","TAHAA","TAHI79","TERA50","WALL78","WGS72","AMST63GEO","CROZ63GEO","CSG67GEO","ED50G","GUAD48GEO","GUADFM49GEO","IGN63GEO","IGN72GEO","KERG62GEO","MART38GEO","MAYO50GEO","MOOREA87GEO","NTFG","NTFP","NUKU72GEO","REUN47GEO","RGFG95GEO","RGM04GEO","RGNCGEO","RGPFGEO","RGR92GEO","RGSPM06GEO","RGTAAF07G","STPL69GEO","STPM50GEO","TAHAAGEO","TAHI79GEO","TERA50G","WALL78GEO","WGS72G","WGS84RRAFGEO","XGEO","AMST63UTM43S","CROZ63UTM39S","CSG67UTM21","CSG67UTM22","GEOPORTALANF","GEOPORTALASP","GEOPORTALCRZ","GEOPORTALFXX","GEOPORTALGUF","GEOPORTALKER","GEOPORTALMYT","GEOPORTALNCL","GEOPORTALPYF","GEOPORTALREU","GEOPORTALSPM","GEOPORTALWLF","GUAD48UTM20","GUADFM49U20","IGN63UTM7S","IGN72UTM58S","KERG62UTM42S","LAMB1C","LAMB2C","LAMB3C","LAMB4C","RGF93CC42","RGF93CC43","RGF93CC44","RGF93CC45","RGF93CC46","RGF93CC47","RGF93CC48","RGF93CC49","RGF93CC50","MART38UTM20","MAYO50UTM38S","MILLER","MOOREA87U6S","NUKU72U7S","RGM04UTM38S","RGNCUTM57S","RGNCUTM58S","RGNCUTM59S","RGPFUTM5S","RGPFUTM6S","RGPFUTM7S","RGR92UTM40S","RGSPM06U21","STPL69UTM43S","STPM50UTM21","TAHAAUTM05S","TAHI51UTM06S","TAHI79UTM6S","TERA50STEREO","UTM01SW84","UTM20W84GUAD","UTM20W84MART","UTM22RGFG95","UTM39SW84","UTM42SW84","UTM43SW84","WALL78UTM1S","ETRS89GEO","ETRS89LAEA","ETRS89LCC","UTM26ETRS89","UTM27ETRS89","UTM28ETRS89","UTM29ETRS89","UTM30ETRS89","UTM31ETRS89","UTM32ETRS89","UTM33ETRS89","UTM34ETRS89","UTM35ETRS89","UTM36ETRS89","UTM37ETRS89","UTM38ETRS89","projectionsExtent","overload","_extent","SearchEngineDOM","_createSearchDivElement","searchDiv","_createShowSearchEnginePictoElement","collapsible","curr","showAdvancedSearch","showGeolocate","showCoordinate","onShowSearchEngineClick","_createSearchInputElement","placeholder","form","onGeocodingSearchSubmit","autocomplete","charCode","which","keyCode","onAutoCompleteSearchText","ID","scrollIntoView","focus","_createSearchResetElement","buttonReset","onSearchResetClick","_createButtonsElement","_createFirstLineWrapper","_createRadioContainer","_createRadioElements","choiceLocations","inputLocations","labelLocations","choiceData","inputData","labelData","_createShowAdvancedSearchElement","_createShowGeolocateElement","onShowSearchGeolocateClick","_createShowSearchByCoordinateElement","_createAdvancedSearchPanelElement","_createAdvancedSearchPanelDivElement","_createGeocodeResultsElement","_createGeocodeResultsHeaderElement","_createGeocodeResultsDivElement","_createAutoCompleteElement","_createCoordinateSearchPanelElement","_createCoordinateSearchPanelDivElement","_createAutoCompleteListElement","_createAutoCompletedLocationContainer","_createAutoCompletedLocationTitleElement","_createAutoCompletedLocationElement","GeocodeUtils","onAutoCompletedResultsItemClick","_createSearchedSuggestContainer","_createSearchedSuggestTitleElement","_createSearchedSuggestElement","onSearchedResultsItemClick","_createAdvancedSearchPanelHeaderElement","divTitle","divClose","_createAdvancedSearchPanelFormElement","advancedSearchCodes","matchesFilters","onGeocodingAdvancedSearchSubmit","select","_createAdvancedSearchFormCodeElement","onGeocodingAdvancedSearchCodeChange","_createAdvancedSearchFormInputElement","_createAdvancedSearchFormFiltersElement","_createAdvancedSearchFiltersTableElement","_createAdvancedSearchFiltersAttributElement","filterAttributes","listId","_createGeocodeResultsListElement","ctrlKey","onGeocodedResultsItemClick","_createGeocodedLocationElement","_createCoordinateSearchPanelHeaderElement","onCoordinateSearchClose","_createCoordinateSearchPanelFormElement","onShowSearchByCoordinateClick","__createCoordinateSearchDivElement","_createCoordinateSearchSystemsLabelElement","_setCoordinateSearchSystemsSelectElement","systems","selectSystem","onCoordinateSearchSystemChange","_createCoordinateSearchUnitsLabelElement","_setCoordinateSearchUnitsSelectElement","selectUnits","onCoordinateSearchUnitsChange","_setCoordinateSearchLngLabelElement","labelLng","_setCoordinateSearchLngInputElement","_setCoordinateSearchLngDMSElement","_setCoordinateSearchLatLabelElement","labelLat","_setCoordinateSearchLatInputElement","_setCoordinateSearchLatDMSElement","_createCoordinateSearchSubmitElement","SearchEngine","_clearResults","_showSearchEngineButton","_geocodedLocations","_checkInputOptions","zoomTo","resources","displayButtonClose","displayButtonAdvancedSearch","displayButtonGeolocate","displayButtonCoordinateSearch","advancedSearch","coordinateSearch","searchOptions","addToMap","serviceOptions","geocodeOptions","autocompleteOptions","triggerGeocode","triggerDelay","prettifyResults","displayMarker","markerStyle","markerUrl","splitResults","Search","filterServices","filterLayersPriority","filterWMTSPriority","filterVectortiles","updateVectortiles","_fillSearchedSuggestListContainer","_inputSearchContainer","_autocompleteContainer","_containerResultsLocation","_containerResultsSuggest","_radioButtonLocation","_radioButtonSuggest","_suggestedLocations","_geocodedContainer","_filterContainer","_currentGeocodingCode","_currentGeocodingLocation","_advancedSearchFilters","_initAdvancedSearchFilters","_advancedSearchCodes","_initAdvancedSearchCodes","_coordinateSearchSystems","_initCoordinateSearchSystems","_currentCoordinateSearchSystems","_currentCoordinateSearchType","_coordinateSearchUnits","_initCoordinateSearchUnits","_currentCoordinateSearchUnits","_coordinateSearchLngInput","_coordinateSearchLatInput","_marker","_markerStyle","_markerUrl","_displayMarker","_popupContent","_popupDiv","_initPopupDiv","_popupOverlay","_triggerHandler","geocodeResources","geocodeResourcesList","autocompleteResources","autocompleteResourcesList","SearchEngineUtils","advancedSearchFiltersCustom","projectionSystemsByDefault","sys","_setSystem","projectionUnitsByDefault","Geographical","Metric","onAutoCompleteInputClick","buttonsContainer","firstLineWrapper","radioContainer","radioElements","_this$_createRadioEle2","_slicedToArray","advancedShow","advancedPanel","advancedPanelDiv","advancedHeader","advancedForm","advancedFormFilters","_setFilter","advancedFormInput","geolocateShow","searchByCoordinateShow","coordinatePanel","coordinatePanelDiv","coordinateHeader","coordinateForm","_containerSystems","labelSystems","_containerUnits","labelUnits","_containerCoordinateLng","coordinateLng","coordinateInputLng","_containerCoordinateLat","coordinateLat","coordinateInputLat","submit","autocompleteList","containerResultsLocation","containerResultsSuggest","geocodeDiv","geocodeList","codeFound","lstAttributs","divTable","divFilter","childElementCount","_displaySuggestedLocation","suggests","bOnFailure","_clearGeocodedLocation","setCenter","setZoom","markerDiv","_onResultMarkerSelect","getZoom","information","popupContent","system","olProjGet","Interactions","geolocation","getCurrentPosition","viewProj","coordinates_4326","longitude","latitude","olProjTransform","_setMarker","_setPosition","markerInfo","_getCoordinateSearchDMS","selectedIndex","inputSearchTextContainer","_clearSuggestedLocation","_triggerGeocode","_triggerDelay","_maximumEntries","maximumEntries","_prettifyResults","_requestAutoComplete","_locationsToBeDisplayed","ilocation","_getGeocodeCoordinatesFromFullText","_prettifyAutocompleteResults","_fillAutoCompletedLocationListContainer","_requestGeocoding","_hideSuggestedLocation","_setLabel","mapProj","_getZoom","_fillGeocodedLocationListContainer","_location","_filterOptions","dep","department","insee","absorbedCity","_updateCoordinateSearchElements","lbl","autocompleteResults","autocompleteResult","MousePositionDOM","_createShowMousePositionPictoElement","onShowMousePositionClick","_createMousePositionPanelElement","_createMousePositionPanelDivElement","_createMapCenter","_createMousePositionPanelTitleElement","_createMousePositionPanelHeaderElement","_createMousePositionPanelCloseElement","_createMousePositionPanelBasicElement","displayAltitude","displayCoordinates","editCoordinates","currentProjectionUnits","_createMousePositionPanelBasicCoordinateElement","_createMousePositionPanelEditToolsElement","_createMousePositionPanelBasicAltitudeElement","_createCoordinateElement","coordType","readOnly","onMousePositionEditModeClick","validateExtentCoordinate","_createDMSCoordinateElement","_checkDMSDegrees","input1","_checkDMSElement","span1","input2","span2","option1","divLat","spanLat","arrayCoords","divLon","spanLon","arrayCoords1","spanLabel","spanAlt","spanUnits","onMousePositionEditModeLocateClick","_createShowMousePositionSettingsElement","onShowMousePositionSettingsClick","_createMousePositionSettingsElement","_createMousePositionSettingsSystemsElement","onMousePositionProjectionSystemChange","onMousePositionProjectionSystemMouseOver","_createMousePositionSettingsUnitsElement","onMousePositionProjectionUnitsChange","_resetLabelElements","currentProjectionType","_resetUnitElements","elts","_resetCoordinateElements","latElt","lonElt","_setEditMode","editing","selects","isFloat","inputMinutes","inputSeconds","GPdisplayCoords","labelLon","elt","elLat","elLon","elements","GPdisplayElevation","altitudeTimeoutDelay","noDataValue","noDataValueTolerance","altitudeTimeout","maxThreshold","minThreshold","onRequestAltitude","GPresetElevation","MousePosition","getViewport","_isDesktop","_panelMousePositionContainer","_panelHeaderContainer","listenerKey","onMouseMove","onMapMove","_showMousePositionButton","_markerOverlay","_markerOffset","_setElevationPanel","_setCoordinatesPanel","_setSettingsPanel","_projectionSystems","addSystem","systemCrs","systemList","systemCode","oldNewCodeMap","indexChildToRemove","_currentProjectionSystems","_setCurrentSystem","_projectionUnits","_initProjectionUnits","_currentProjectionType","_setTypeUnitsPanel","altitude","responseDelay","_showMousePositionContainer","_hideMarker","_initMarker","positionMarker","_initProjectionSystems","_timer","_currentProjectionUnits","_projectionUnitsContainer","_panelHeaderMousePositionContainer","hide","geoBBox","systemInfo","mousePositionPanel","mousePositionPanelDiv","_panelTitleContainer","closeDiv","_panelCloseButton","basic","buttonSettings","_projectionSystemsContainer","divPicto","divPanel","projectionUnits","oSrs","olTransformProj","oLatLng","_setElevation","_setCoordinate","onMoveStopped","getCenter","_protocol","_timeout","_outputFormat","_onFailure","_measures","_positions","_resource","_rawResponse","_customOnSuccess","_onSuccess","_apiKey","_ssl","inputDegrees","mins","secs","lonlat","getCoordinate","xyWGS84","locateDMSCoordinates","locateCoordinates","mapCenterFunction","mapCenterCallback","optionElement","oldProjectionUnits","GeoportalMousePosition","Collection","condition","drawing_portail","drawing_api","DrawingDOM","_createShowDrawingPictoElement","onShowDrawingClick","_createDrawingPanelElement","_createDrawingPanelDivElement","_createDrawingToolsDivSections","_createDrawingPanelHeaderElement","controlLabel","dtObj","_createDrawingToolsSections","tools","dtOptions","edit","tooltip","_createDrawingToolSection","creatingTools","editingTools","_createSavingSection","exportTitle","sectionLabel","panelType","liClickHandler","_handleDOMToolClick","_handleToolClick","buttonLabel","buttonTitle","onExportFeatureClick","_createMarkersChooser","markersList","inputElem","labelElem","imgElem","_createStylingElement","_createStylingDiv","mainDiv","applyFunc","geomType","initValues","markerSrc","markerSize","markerCustom","labelDisplay","applyButton","applyToObject","setDefaultButton","setAsDefault","cancelButton","_createLabelDiv","popup","inputLabel","rows","cols","inputId","onkeyup","evtk","inputMeasure","saveDescription","toolId","availType","availToolId","Drawing","_Drawing","_container","eventKey","_drawingPanel","_drawingPanelHeader","_showDrawingButton","setLayer","evtRm","interactionCurrent","removeInteraction","getFeatures","featuresCollectionSelected","ClassName","getExportFormat","writeStyles","featProj","writeFeatures","_exportName","_exportFormat","_exportExt","_exportMimeType","vlayer","mapLayer","getControls","layerDescription","markerOptions","markerElement","DefaultTools","cursorStyle","DefaultCursorStyle","MarkersOther","DefaultLabels","defaultStyles","DefaultStyles","intValue","floatValue","interactionSelectEdit","stylingOvl","popupOvl","_detectSupport","panelDiv","_getIconStyleOptions","polyFillColor","polyFillOpacity","polyStrokeColor","polyStrokeWidth","_updateMeasure","setAttValue","popupByDefault","displayFunction","closeFunc","saveFunc","tabIndex","onblur","geomExtent","seEv","removeFeature","_createRemoveInteraction","addInteraction","valuesColor","hexColor","MultiPoint","textIcon1x1","markerAnchor","markerColor","markerOpacity","_getsMarkersOptionsFromSrc","textStrokeColor","textStrokeWidth","textFillColor","popupDiv","setDefault","fillColorElem","fillOpacityElem","strokeColorElem","strokeWidthElem","markerSizeElem","markerSelected","markerChecked","idxMarker","mrk","mapBrowserEvent","_createStylingInteraction","labelOvl","_textValue","_measure","featProps","_createLabelInteraction","__roundDecimal","nombre","coordinatesPoint","measureLength","coordinatesLine","olGetDistanceSphere","measureArea","coordinatesAera","getLinearRing","olGetAreaSphere","getLinearRings","ij","coordinatesRings","clickEvent","_this8","_createEmptyLayer","stopClick","deEv","_drawEndFeature","eventPointerMove","getLength","hole","bHoleIsIncluded","intersectsCoordinate","appendLinearRing","LinearRing","eventSingleClick","toolsType","toolsId","exportFeatures","getExportName","export","LocationSelectorDOM","_createLocationPointElement","_createLocationPointLabelElement","buttonOrigin","onLocationClearPointClick","_createLocationAutoCompleteteInputElement","inputOrigin","_createLocationCoordinateInputElement","inputOriginCoord","_createLocationPointerShowInputElement","inputOriginPointer","_createLocationPointerInputElement","buttonOriginPointer","onActivateMapPointClick","_createLocationRemovePointElement","buttonRm","startID","endID","onLocationRemovePointClick","_createLocationAddPointElement","buttonAdd","lastStage","nbStages","onLocationAddPointClick","_createLocationAutoCompleteElement","_createLocationAutoCompleteResultElement","_createLocationAutoCompletedLocationElement","GPdisplayCoordinate","id1","id2","LocationSelector","groupId","addOption","removeOption","_map","_inputsContainer","_buttonLabel","_inputAutoComplete","_inputShowPointerContainer","_inputShowPointer","_inputCoordinateContainer","_addPointElement","_removePointElement","_coordinate","_suggestedContainer","_suggestedList","_currentLocation","_resources","markerOpts","clearResults","_inputCoordinate","_inputPointer","_inputAddStage","_inputRemoveStage","resultsPanel","_customOnFailure","onMouseMapClick","_setCursor","cursor","ButtonExport","menu","onExport","EXPORT_ROUTE","EXPORT_ISOCHRON","EXPORT_PROFILE","menuClassHidden","initOptions","setFormat","setName","setTitle","setMenu","onClickButtonExport","radio","showPointNames","isPluggableControl","ExportDOM","Export","RouteDOM","_createShowRoutePictoElement","onShowRoutePanelClick","_createRoutePanelElement","_createRoutePanelDivElement","_createRoutePanelHeaderElement","_createRoutePanelFooterElement","_createRoutePanelFormPointLabel","classesToAdd","_createRoutePanelFormElement","_addRouteResultsStagesValuesElement","modeComputation","modeTransport","exclusionsElement","onRouteComputationSubmit","computation","transport","_createRoutePanelResultsElement","_createRouteResultsStagesElement","_createRouteResultsElement","_createRouteShowResultsDetailsElement","_createRouteResultsDetailsElement","_createRouteWaitingElement","resultStage","resultStageLabel","resultStageValue","elementCoords","stageCoords","divValue","divMode","onRouteModeComputationChangeAndRun","computes","divNew","onShowRouteResultsNewClick","_addRouteResultsValuesElement","fconvert","containerDistance","labelDistance","distanceLabel","distanceArrondi","divDistance","containerDuration","labelDuration","divDuration","divBorderUp","labelShow","labelHide","divBorderDown","_addRouteResultsDetailsElement","instructions","distanceCumul","durationCumul","divNum","divIns","onRouteResultsDetailsMouseOver","onRouteResultsDetailsMouseOut","onRouteResultsDetailsClick","_createRoutePanelFormPointElement","labelOrigin","labelOriginPointer","onRouteMapPointClick","_createRoutePanelFormRemoveStageElement","divRm","onRouteRemovePointClick","_createRoutePanelFormAddStageElement","divAdd","onRouteAddPointClick","_createRoutePanelFormAutoCompleteListElement","_createRouteAutoCompletedLocationElement","_createRoutePanelFormModeChoiceTransportElement","transports","divContainer","divRadio","inputCar","onRouteModeTransportChange","labelCar","inputPedestrian","labelPedestrian","_createRoutePanelFormModeChoiceComputeElement","inputFastest","onRouteModeComputationChange","labelFastest","div2","inputShortest","labelShortest","_createShowRouteExclusionsPictoElement","onShowRouteExclusionsClick","_createRoutePanelFormExclusionsElement","_createRoutePanelFormExclusionOptionsElement","inputToll","onRouteExclusionsChange","labelToll","inputTunnel","labelTunnel","inputBridge","labelBridge","_createRouteSubmitFormElement","_createRouteFormResetElement","onRouteResetClick","_panelRouteContainer","_panelHeaderRouteContainer","_showRouteButton","_geojsonSections","_defaultFeatureStyle","_geojsonObject","_currentPoints","_currentTransport","_currentExclusions","_currentComputation","_currentRouteInformations","setCoordinate","transportdiv","computationdiv","tollInput","tunnelInput","bridgeInput","_simplifiedInstructions","_fillRouteResultsDetailsContainer","_formRouteContainer","_hideWaitingContainer","_resultsRouteContainer","_removeRouteStepLocations","_clearRouteInputOptions","_clearRouteResultsDetails","graphs","toll","tunnel","bridge","routeOptions","defaultMarkersOpts","departure","stages","arrival","markersOpts","_waitingContainer","_showRouteExclusionsElement","_initTransport","_initComputation","_initExclusions","_waiting","_geojsonRoute","_resultsSelectInteraction","_resultsHoverInteraction","_selectedFeatureStyle","routePanel","routePanelDiv","routeHeader","routeForm","_createRoutePanelFormPointsElement","exclusion","panelFooter","buttonSubmit","routeResults","waiting","_hideRouteSuggestedLocations","setMap","_addFormPointsEventListeners","formPoint","onRouteOriginLabelClick","onRouteOriginPointerClick","startCoordinate","endCoordinate","iCoordinate","routeResource","_requestRouting","_fillRouteResultsDetails","locationSelector","_clear","_clearRouteResultsGeometry","_clearRouteResultsFeatureGeometry","bFound","iFound","currentPoints","tagid","getFeatureById","_displayWaitingContainer","_fillRouteResultsDetailsGeometry","_fillRouteResultsDetailsFeatureGeometry","_resultsRouteValuesContainer","_convertSecondsToTime","_resultsRouteDetailsContainer","geojsonObject","defaultDataProjection","_convertDistance","geojsonformat","_onResultsFeatureMouseOver","_onResultsFeatureSelect","selectedInstruction","deselected","deselectedFeature","deSelectedInstruction","goodPoints","detailsDiv","valuesDiv","pointId","newInstructions","hours","divisor4minutes","distanceKm","IsoDOM","_createShowIsoPictoElement","onShowIsoPanelClick","_createIsoPanelElement","_createIsoPanelDivElement","_createIsoPanelHeaderElement","_createIsoPanelFormElement","onIsoComputationSubmit","_createIsoWaitingElement","_createIsoPanelFooterElement","_createIsoPanelFormPointLabel","_createIsoPanelFormTypeChoiceElement","_createIsoPanelFormTypeChoiceChronElement","onIsoTypeChoiceChange","_createIsoPanelFormTypeChoiceDistElement","_createIsoPanelFormLabelIsochronElement","_createIsoPanelFormValueIsochronElement","onIsoValueChronTimeMinuteChange","onIsoValueChronTimeHourChange","label1","label2","_createIsoPanelFormLabelIsodistanceElement","_createIsoPanelFormValueIsodistanceElement","onIsoValueDistChange","_createIsoPanelFormModeChoiceTransportElement","onIsoModeTransportChange","_createIsoPanelFormModeChoiceDirectionElement","directions","onIsoModeDirectionChange","departureOption","arrivalOption","_createShowIsoExclusionsPictoElement","onShowIsoSettingsClick","_createIsoPanelFormExclusionsElement","_createIsoPanelFormExclusionOptionsElement","onIsoExclusionsChange","_createIsoSubmitFormElement","_createIsoFormResetElement","onIsoResetClick","Isocurve","_IsoPanelContainer","_IsoPanelHeaderContainer","_pictoIsoButton","_geojsonLayer","_currentDirection","_originPoint","_currentIsoResults","_currentTimeHour","_currentTimeMinute","_currentDistance","_clearIsoInputs","methods","isocurveOptions","_initDirection","_formContainer","_createIsoPanelFormPointElement","isoChronChecked","isoDistChecked","typeChoice","footer","_submitContainer","_hideIsoSuggestedLocations","_clearGeojsonLayer","positionCoordinates","timeHourInput","timeMinutesInput","distInput","isoRequestOptions","_drawIsoResults","_requestIsoCurve","deepEqual","directionSelect","IsocurveDOM","ReverseGeocodeDOM","_createShowReverseGeocodingPictoElement","onShowReverseGeocodingClick","_createReverseGeocodingWaitingElement","_createReverseGeocodingResultsPanelElement","resultsPanelDiv","_createReverseGeocodingResultsListElement","_createReverseGeocodingResultElement","locationDescription","onReverseGeocodingResultMouseOver","onReverseGeocodingResultMouseOut","onReverseGeocodingResultClick","_createReverseGeocodingPanelElement","_createReverseGeocodingPanelDivElement","_createReverseGeocodingPanelHeaderElement","_createReverseGeocodingPanelReturnPictoElement","buttonNew","returnSpan","onGPreverseGeocodingReturnPictoClick","_createReverseGeocodingPanelTitleElement","_createReverseGeocodingPanelCloseElement","_createReverseGeocodingPanelFormElement","onReverseGeocodingSubmit","_createReverseGeocodingFormModeChoiceGeocodingTypeElement","onReverseGeocodingTypeChange","POIOption","SAOption","CPOption","_createReverseGeocodingFormModeChoiceGeocodingDelimitationElement","delimitations","onReverseGeocodingDelimitationChange","pointOption","circleOption","extentOption","_createReverseGeocodingSubmitFormElement","_showReverseGeocodingButton","_activateMapInteraction","_panelContainer","_clearInputFeatures","_removeMapInteraction","_inputFeaturesLayer","_inputFeaturesSources","_inputFeatures","_reverseGeocodingLocations","reverseGeocodeOptions","_currentGeocodingType","_initGeocodingType","_currentGeocodingDelimitation","_initGeocodingDelimitation","_returnPictoContainer","_resultsContainer","_resultsListContainer","_inputFeaturesSource","_mapInteraction","_requestOptions","_requestGeom","_requestPosition","_reverseGeocodingLocationsMarkers","_resultsDefaultStyle","_resultsSelectedStyle","resourcesList","wrongResourcesIndexes","delimitationsList","wrongDelimitationsIndexes","reverseGeocodingPanel","reverseGeocodingPanelDiv","returnPicto","reverseGeocodingForm","reverseGeocodingResultsList","_activatePointInteraction","_activateCircleInteraction","_activateBoxInteraction","setRemovable","_onDrawStart","geometryFunction","setCenterAndRadius","maxPoints","maxLength","lengthX","lengthY","setCoordinates","_onBoxDrawEnd","getFirstCoordinate","geoCoordinate","startGeoCoordinate","endGeoCoordinate","_getReverseGeocodingRequestOptions","requestOptions","_displayGeocodedLocations","_displayGeocodedLocationsOnMap","_fillGeocodedLocationDescription","_createResultsLayer","_addResultFeature","_resultsFeatures","_resultsFeaturesSource","_resultsFeaturesLayer","geocodeType","_fillPopupContent","selectedResultDiv","deSelectedResultDiv","_reverseGeocodingRequest","WMSCapabilities","WMTSCapabilities","onloaded","onclickvisibility","onclickclone","onclickremove","legend","onclickedition","onchangevalue","oncollapse","oneditjson","onchangemin","onchangemax","themes","onclickimage","onclicktitle","onsubmit","onautocomplete","_toolsDefault","edition","containerjson","jsonlabel","jsondisplay","containertoolsscale","scaletitle","containertoolsminscale","scalelabelmin","scaleinputmin","containertoolsmaxscale","scalelabelmax","scaleinputmax","containertoolsedit","_found","_obj","strJson","_syntaxHighlight","divJson","onEditJsonStyleMapBox","_createElementToolsScale","_createElementToolsEdition","divToolsScale","divMin","labelMin","inputMin","onChangeStyleScaleMinMapBox","divMax","labelMax","inputMax","onChangeStyleScaleMaxMapBox","divToolsEdit","cls","editorID","EventBus","EventEditor","editor","Themes","thumbnails","themesSummary","containertheme","containerthemeID","inputID","labelID","imageID","_lstThemes","_theme","divTheme","_selected","_button","onClickThemeTitleMapBox","thumbnail","_img","alt","onClickThemeImageMapBox","_msg","targetIDX","_inputs","Filter","_filter","labelJson","preJson","onEditJsonFilterMapBox","divEdit","Legend","sprites","editable","_editable","legendRender","rendercontainer","toolscontainer","containerlegendrender","legendrender","legendeditable","legendtitle","containerlegendtools","_getProperties","_createElementIconLegend","_createElementEditionLegend","isTextValue","isIconValue","valuesSupported","PROPERTIES","_getValue","svg","lstrockedasharray","cstrockcolor","fstrokecolor","isNumber","numA","numB","onEditionLegendMapBox","_renderThumbnail","linecolor","lLineColor","inputLineColor","onChangeValueLegendMapBox","linewidth","lLineWidth","inputLineWidth","lineopacity","lLineOpacity","inputLineOpacity","fillcolor","lFillColor","inputFillColor","fillopacity","lFillOpacity","inputFillOpacity","background","_objDefault","bSlotLegend","oFilter","oStyle","oLegend","DomVisibility","DomToggle","containerlegend","containertitle","imagelabelinput","imagelabel","typeimg","titleinput","titlelabel","containertools","visibilityinput","visibilitylabel","visibilityinputdisable","visibilitylabeldisable","inputImage","labelImage","onClickLayerMapBox","_addTools","divTools","inputTools","onVisibilityLayerMapBox","labelTools","imgType","divLegend","inputTitle","labelTitle","nodesLvl1","nodesLvl2","curnode","getRenderContainer","isEditable","details","summary","_search","Editor","_initEvents","groupAuto","sortBy","sortOrder","containerID","containerLayers","titleLayers","titleLayersID","titleThemes","titleThemesID","mapbox","_toolsThemes","multisources","groupBy","_groups","_groupName","_field","_newGroupName","_idx","divLayers","grp","oGroup","oLayer","addLegend","slotLegend","addStyle","addFilter","_target","spritesImage","theImage","_getSprites","EditorDOM","LayerImportDOM","_createLoadingElement","_createShowImportPictoElement","_onShowImportClick","_createImportPanelElement","_createImportPanelDivElement","_createImportPanelHeaderElement","_createImportPanelReturnPictoElement","returnDiv","_onReturnPictoClick","_createImportPanelTitleElement","_createImportPanelCloseElement","_createImportPanelFormElement","_onImportSubmit","_createImportTypeLineElement","importTypes","_onImportTypeChange","_createImportWaitingElement","_createImportStaticParamsContainer","currentType","_createStaticNameLabel","_createStaticModeChoiceDiv","_createStaticLocalChoiceDiv","_onStaticImportTypeChange","_createStaticUrlChoiceDiv","_createStaticLocalInputDiv","_createStaticLocalInputLabel","_createStaticLocalInput","_createStaticUrlInputDiv","_createStaticUrlInputLabel","_createStaticUrlInput","_createServiceParamsContainer","_createServiceUrlDiv","_createServiceUrlInputLabel","_createServiceUrlInput","_createImportSubmitFormElement","_createImportGetCapPanelElement","_createImportGetCapPanelHeaderElement","_onGetCapPanelClose","_createImportGetCapResultsContainer","_addImportGetCapResultListRubrique","_addImportGetCapResultRubrique","_addImportGetCapResultListLayer","_addImportGetCapResultLayer","_onGetCapResponseLayerClick","_createImportMapBoxPanelElement","_createImportMapBoxPanelHeaderElement","_onMapBoxReturnPictoClick","_onMapBoxPanelClose","_createImportMapBoxResultsContainer","MeasureToolBoxDOM","_toolboxId","_buttonId","_widgetId","getToolBoxID","getButtonID","getWidgetID","_createToolBoxContainerElement","blur","widget","MeasureToolBox","_toolbox","ctrl","gpShareMeasureToolBox","mapContainer","mapDocument","mapId","toolboxContainer","widgetContainer","setTarget","Measures","DEFAULT_POINTER_STYLE","DEFAULT_DRAW_START_STYLE","lineDash","DEFAULT_DRAW_FINISH_STYLE","MeasureLength","MeasureArea","MeasureAzimuth","measureDraw","measureSource","measureVector","eventLayerRemove","sketch","measureTooltipElement","measureTooltip","helpTooltipElement","helpTooltip","_class","clearMeasure","clearMeasureToolTip","removeMeasureEvents","_pictoContainer","onPointerMoveHandler","dragging","tooltipCoord","getLastCoordinate","getInteriorPoint","onShowMeasureClick","currentMapId","gpShareMeasures","mySelf","instance","addMeasureEvents","initMeasureInteraction","addMeasureInteraction","overlays","nodesToRemove","createMeasureTooltip","createHelpTooltip","createStylingMeasureInteraction","startStyleOpts","pointer","finishStyleOpts","removeLastPoint","setOffset","ElevationPathDOM","_createShowElevationPathPictoElement","onShowElevationPathClick","_createElevationPathPanelElement","_createElevationPathPanelDivElement","_createElevationPathPanelHeaderElement","divInfo","onOpenElevationPathInfoClick","buttonReduce","onReduceElevationPathPanelClick","buttonClose","_createElevationPathPanelProfilElement","wrapper","_createElevationPathWaitingElement","_createElevationPathInformationsElement","_addElevationPathInformationsItem","nameEl","valueEl","ProfileElevationPathDOM","_getCssProperty","_getTextWidth","_dataZToSvgY","pathHeight","minGraphZ","pxPerMZ","_dataDistToSvgX","dist","svgWidth","pathWidth","pxPerMX","_svgXToDataDist","svgX","_arrayBisect","displayProfileByDefault","focusLineColor","margin","_displayProfileOptions","displayProfileOptions","_points","sortedElev","minZ","maxZ","distUnit","widgetDiv","widgetHeigth","widgetWidth","zLabelWidth","zGradWidth","toLocaleString","minXguideWidth","elevationSvg","gradZ","maxNumZguides","maxGraphZ","numZguides","axisZ","gradZtext","yTextTranslation","yStrokeTranslation","gradZstroke","gradZpath","gradZgrad","guidesZ","gradZyOffsetPx","axisZLegend","maxNumXguides","gradX","maxGraphX","numXguides","lastGradX","axisX","gradXtext","xTextTranslation","xStrokeTranslation","gradXstroke","gradXpath","gradXgrad","guidesX","xOffset","gradXxOffsetPx","axisXLegend","elevationPathG","pointY","pathD","pathPath","pathFill","dynamicsG","pathRectangle","sortedDist","focusLineX","focusLineY","focusCircle","tooltipDiv","altiSpan","slopeSpan","coordsSpan","currentSlope","tooltipG","tooltipBubble","tooltipBubbleShadow","__createProfileMarker","__removeProfileMarker","mousePoint","createSVGPoint","svgMousePoint","matrixTransform","getScreenCTM","mouseDist","distIndex","d0","d1","focusX","focusY","__updateProfileMarker","altiSpanTxt","slopeSpanTxt","slope","coordsSpanTxt","toolTipBubbleD","tooltipTextWidth","displayProfileRaw","__customRawProfileMouseOverEvent","displayProfileLibD3","d3","linear","xAxis","orient","ticks","yAxis","xDomain","domain","yDomain","tickSize","tickFormat","selectAll","enter","bisectDist","bisector","transition","mouse","xc","yc","_message","html","displayProfileLibAmCharts","ballonText","AmCharts","addInitHandler","coeffArrond","pathToImages","categoryField","autoMarginOffset","marginTop","startDuration","fontSize","thousandsSeparator","numberFormatter","decimalSeparator","categoryAxis","gridPosition","minHorizontalGap","tickPosition","titleColor","labelOffset","startOnAxis","chartCursor","animationDuration","bulletsEnabled","bulletSize","categoryBalloonEnabled","cursorColor","graphBulletAlpha","graphBulletSize","zoomable","trendLines","balloonColor","balloonText","bulletAlpha","bulletBorderColor","bulletBorderThickness","bulletColor","fillAlphas","fillColors","lineAlpha","lineColor","lineThickness","valueField","guides","valueAxes","minVerticalGap","balloon","borderColor","borderThickness","showBullet","titles","allLabels","dataProvider","_containerProfile","makeChart","addListener","chart","ElevationPath","_ElevationPath","_showContainer","_pictoButton","_profileContainer","_infoContainer","_timerHdlr","_drawStyleStart","_drawStyleFinish","_profile","_data","_measureSource","_measureVector","_measureDraw","_lastSketch","_currentSketch","_initializeContainer","_initMeasureInteraction","_addMeasureInteraction","_removeProfile","_removeMeasureInteraction","_displayProfile","elevationOptions","greaterSlope","meanSlope","ascendingElevation","descendingElevation","stylesOptions","draw","DISPLAY_PROFILE_BY_DEFAULT","displayContainer","_createStylingDraw","_createStylingMarker","DEFAULT_STYLES","MARKER","userStyles","PROFILE","_defaultStyle","_features","_requestService","projSrc","projDest","pointCoords","_getGeometry","_computeElevationMeasure","_getSketchCoords","oldlat","oldlon","_distanceMinus","_distancePlus","_ascendingElevation","_descendingElevation","_distance","_slopes","distances","distanceToPrevious","za","zb","_altMin","_altMax","_greaterSlope","ji","distancePlus","distanceMinus","altMin","altMax","_getLength","_updateInfoContainer","removeMeasure","_removeMeasure","_coordinateProj","getClosestPoint","_geometry","addFeature","_pts","_proj","RESULTS","_image","imageRadius","imageStrokeColor","imageStrokeWidth","imageFillColor","snapToPixel","LayerImport","_LayerImport","gpEditorId","_mapBoxPanel","_importPanel","cleanMapBoxResults","_importPanelHeader","_showImportButton","contentStatic","contentService","_name","layerTypes","webServicesOptions","vectorStyleOptions","extractStyles","MapBox","_initImportTypes","_initDefaultStyles","_importPanelTitle","_importPanelReturnPicto","_staticLocalImportInput","_staticUrlImportInput","_serviceUrlImportInput","_getCapPanel","_getCapPanelHeader","_getCapResultsListContainer","_mapBoxPanelHeader","_mapBoxResultsListContainer","_loadingContainer","_hasGetCapResults","_getCapRequestUrl","_getCapResponseWMS","_getCapResponseWMSLayers","_getCapResponseWMTS","_getCapResponseWMTSLayers","_hasMapBoxResults","_file","typesList","wrongTypesIndexes","kmlDefaultStyles","_defaultKMLStyle","gpxDefaultStyles","_defaultGPXStyle","geoJSONDefaultStyles","_defaultGeoJSONStyle","MapBoxDefaultStyles","_defaultMapBoxStyle","_currentImportType","_isCurrentImportTypeStatic","_currentStaticImportType","importPanel","importPanelPanelDiv","panelReturn","importForm","_initInputFormElement","getCapPanel","importGetCapResultsList","mapBoxPanel","importMapBoxResultsList","loading","importTypeChoiceDiv","importStaticParamsContainer","staticNameLabel","staticImportChoice","staticLocalImportChoice","staticUrlImportChoice","staticLocalInputDiv","staticUrlInputDiv","importServiceParamsContainer","importServiceUrlDiv","_hideFormContainer","_displayFormContainer","cleanGetCapResultsList","cleanMapBoxResultsList","setCollapsed","_importStaticLayer","_importServiceLayers","staticImportNameInput","_importStaticLayerFromLocalFile","_importStaticLayerFromUrl","_addFeaturesFromImportStaticLayer","file","files","fReader","FileReader","onprogress","onloadstart","onabort","onloadend","readAsText","fileContent","vectorLayer","vectorSource","vectorFormat","vectorStyle","_glStyles","_glSources","_multiSources","_glSourceId","_keys","_glSource","_glType","_glUrl","_glTiles","_glSprite","_urlService","featureClass","declutter","_tileJSONDoc","_glData","_glStyle","_glLayers","keySource","applyStyleOlms","projCode","_onLoadedMapBox","_onChangeVisibilitySourceMapBox","_onChangeScaleMinSourceMapBox","_onChangeScaleMaxSourceMapBox","_onChangeLegendValueSourceMapBox","_onDisplayLayerSourceMapBox","setContext","getID","once","fileProj","readProjection","_getMapProjectionCode","configControl","readRootExtensions","authorizedControls","class","isocurve","elevationpath","typeControl","graphControl","nameControl","titleControl","classControl","forEachFeature","srcElement","idDOM","questionMarkIndex","_displayGetCapResponseLayers","xmlResponse","getCapResponseWMS","Capability","getCapLayer","_displayGetCapResponseWMSLayer","getCapResponseWMTS","Contents","_getWMTSLayerProjection","Title","Abstract","layerObj","parentLayersInfos","mapProjCode","addKeys","replaceKeys","_isRootLayer","bRubriqueExist","lstRubrique","_getWMSLayerProjection","_projection","_isGoodContainer","proposalId","_addGetCapWMSLayer","_addGetCapWMTSLayer","getMapUrl","_getWMSLayerGetMapUrl","LegendURL","OnlineResource","_getWMSLayerInfoForLayerSwitcher","_getWMSLayerMinMaxResolution","_getWMSLayerExtent","wmsLayer","queryable","gpGFIparams","Format","getmapurl","GetMap","getmap","DCPType","HTTP","Get","CRSList","layerCRS","mapUnits","MinScaleDenominator","MaxScaleDenominator","cste","exGeographicBoundingBox","boundingBox","BoundingBox","olProj","reversedExtent","MetadataURL","Attribution","LogoURL","Identifier","_getWMTSLayerGetTileUrl","tmsOptions","_getTMSParams","tms","isDefault","wmtsLayer","_getWMTSLayerExtent","gettileurl","OperationsMetadata","GetTile","gettile","DCP","TileMatrixSetLink","TileMatrixSet","TileMatrix","SupportedCRS","tilematrix","scaledenominator","tileMatrixSet","ScaleDenominator","TopLeftCorner","WGS84BoundingBox","GeoportalAttribution","_Attribution","ctrls","_updateAttributions","mapAttributions","mapProjection","geoExtent","standardExtent","_updateLayerAttributions","mapCrs","mapZoom","layerAttributions","attributionj","MeasureLengthDOM","_createShowMeasureLengthPictoElement","onShowMeasureLengthClick","geodesic","onPointerMoveHandle","sourceProj","MeasureAreaDOM","_createShowMeasureAreaPictoElement","onShowMeasureAreaClick","getArea","MeasureAzimuthDOM","_createShowMeasureAzimuthPictoElement","onShowMeasureAzimuthClick","onPointerMoveAzimutHandler","lengthGeodesic","getCoordinateAt","degrees2radians","radians2degrees","lon1","lon2","azimut","finishDrawing","Zoom","GeoportalZoom","_Zoom","buttons","_createContainerPosition","FullScreen","GeoportalFullScreen","_FullScreen","labelActive","activeClassName","inactiveClassName","tipLabel","OverviewMap","GeoportalOverviewMap","_OverviewMap","collapseLabel","LegendsDOM","_createShowLegendsPictoElement","onShowLegendsClick","_createLegendsPanelElement","_createLegendsPanelDivElement","_createLegendsPanelHeaderElement","_createLegendsPanelIconElement","_createLegendsPanelTitleElement","_createLegendsPanelCloseElement","_createLegendElement","_createLegendEntry","Legends","panelLegendsContainer","panelLegendsHeaderContainer","buttonLegendsShow","getTitle","getLegends","metadatas","getMetadata","getDescription","getQuicklookUrl","partners","getOriginators","getMetaInformations","panelLegendsEntriesContainer","buttonLegendsClose","legendsPanel","legendsPanelDiv","legendsEntriesDiv","legendsPanelHeader","legendsPanelIcon","legendsPanelTitle","legendsCloseBtn","infos","cloneInfoLegends","bestInfoLegend","InfoLegend","newEntry","replaceWith","TerritoriesDOM","_createShowTerritoriesPictoElement","onShowTerritoriesClick","_createTerritoriesPanelElement","_createTerritoriesPanelDivElement","_createTerritoriesPanelHeaderElement","_createTerritoriesPanelIconElement","_createTerritoriesPanelTitleElement","_createTerritoriesPanelCloseElement","onCloseTerritoriesClick","_createTerritoriesElement","_createTerritoryEntry","defaultImage","onImageTerritoriesClick","Territories","panelTerritoriesContainer","panelTerritoriesHeaderContainer","buttonTerritoriesShow","TerritoriesJson","setTerritory","founded","territories","panelTerritoriesEntriesContainer","buttonTerritoriesClose","territoriesPanel","territoriesPanelDiv","territoriesEntriesDiv","territoriesPanelHeader","territoriesPanelIcon","territoriesPanelTitle","territoriesCloseBtn","setCollapse","ControlListDOM","_createShowControlListPictoElement","onShowControlListPanelClick","_createControlListPanelElement","_createControlListPanelDivElement","_createControlListPanelHeaderElement","_createControlListPanelContentElement","_createControlListPanelFooterElement","controlCatalogelement","addToolsBtn","_createControlListPanelControl","controlContainer","divText","spanTitle","spanDescription","ControlList","controlCatalogElement","_ControlListPanelContainer","_ControlListPanelHeaderContainer","_pictoControlListButton","_ControlListPanelContentContainer","CatalogDOM","_createShowCatalogPictoElement","onShowCatalogClick","_createCatalogPanelElement","_createCatalogPanelDivElement","_createCatalogPanelContentDivElement","_createCatalogPanelHeaderElement","_createCatalogPanelTitleElement","_createCatalogPanelCloseElement","onCloseCatalogClick","_createCatalogContentDivElement","_createCatalogContentTitleElement","_createCatalogContentSearchElement","strContainer","shadow","attachShadow","onSearchCatalogButtonClick","onSearchCatalogInputChange","_createCatalogWaitingElement","_createCatalogContentCategoriesTabs","categories","strTabButtons","tmplTabButton","tabindex","strSectionRadios","tmplSectionRadio","strTabPanelContents","tmplTabPanelContent","strTabContent","strTabContents","tmplSectionRadios","panelSections","radios","panelContents","ariaSelected","onSelectCatalogTabClick","_createCatalogContentCategoryTabContent","layersFiltered","strElements","tmplElement","categoryId","tmplSection","isSection","field","matchAll","imul","inputName","onSelectCatalogEntryClick","buttonName","spans","Catalog","showWaiting","initLayersList","hideWaiting","initMapLayers","panelCatalogContainer","panelCatalogHeaderContainer","buttonCatalogShow","titlePrimary","titleSecondary","layerLabel","layerFilter","buttonCatalogClose","contentCatalogContainer","waitingContainer","layersList","cat","layersListOnMap","widgetPanel","widgetPanelDiv","widgetPanelHeader","widgetPanelTitle","widgetCloseBtn","widgetContentDiv","widgetContentElementDiv","createCatalogContentEntries","getLayersByCategory","getLayersByFilter","fetchUrls","_layer","widgetContentEntryTabs","contents","layersCategorised","fetchUrl","_initLayersList","getConfiguration","updateFilteredLayersListDOM","setFilteredLayersList","scripts","date","deepCopy","tce","Ol","includeProjections","DefaultMarkers"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"GpfExtOL.js","mappings":"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ACA,GAEJ,WAAc,CACV,IACA,IACA,IACA,GAEJ,MAAS,CACL,IACA,IACA,IACA,GAEJ,MAAS,CACL,IACA,IACA,IACA,GAEJ,OAAU,CACN,IACA,IACA,IACA,GAEJ,MAAS,CACL,EACA,EACA,EACA,GAEJ,eAAkB,CACd,IACA,IACA,IACA,GAEJ,KAAQ,CACJ,EACA,EACA,IACA,GAEJ,WAAc,CACV,IACA,GACA,IACA,GAEJ,MAAS,CACL,IACA,GACA,GACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,UAAa,CACT,GACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,IACA,EACA,GAEJ,UAAa,CACT,IACA,IACA,GACA,GAEJ,MAAS,CACL,IACA,IACA,GACA,GAEJ,eAAkB,CACd,IACA,IACA,IACA,GAEJ,SAAY,CACR,IACA,IACA,IACA,GAEJ,QAAW,CACP,IACA,GACA,GACA,GAEJ,KAAQ,CACJ,EACA,IACA,IACA,GAEJ,SAAY,CACR,EACA,EACA,IACA,GAEJ,SAAY,CACR,EACA,IACA,IACA,GAEJ,cAAiB,CACb,IACA,IACA,GACA,GAEJ,SAAY,CACR,IACA,IACA,IACA,GAEJ,UAAa,CACT,EACA,IACA,EACA,GAEJ,SAAY,CACR,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,YAAe,CACX,IACA,EACA,IACA,GAEJ,eAAkB,CACd,GACA,IACA,GACA,GAEJ,WAAc,CACV,IACA,IACA,EACA,GAEJ,WAAc,CACV,IACA,GACA,IACA,GAEJ,QAAW,CACP,IACA,EACA,EACA,GAEJ,WAAc,CACV,IACA,IACA,IACA,GAEJ,aAAgB,CACZ,IACA,IACA,IACA,GAEJ,cAAiB,CACb,GACA,GACA,IACA,GAEJ,cAAiB,CACb,GACA,GACA,GACA,GAEJ,cAAiB,CACb,GACA,GACA,GACA,GAEJ,cAAiB,CACb,EACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,EACA,IACA,GAEJ,SAAY,CACR,IACA,GACA,IACA,GAEJ,YAAe,CACX,EACA,IACA,IACA,GAEJ,QAAW,CACP,IACA,IACA,IACA,GAEJ,QAAW,CACP,IACA,IACA,IACA,GAEJ,WAAc,CACV,GACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,GACA,GACA,GAEJ,YAAe,CACX,IACA,IACA,IACA,GAEJ,YAAe,CACX,GACA,IACA,GACA,GAEJ,QAAW,CACP,IACA,EACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,IACA,IACA,GAEJ,KAAQ,CACJ,IACA,IACA,EACA,GAEJ,UAAa,CACT,IACA,IACA,GACA,GAEJ,KAAQ,CACJ,IACA,IACA,IACA,GAEJ,MAAS,CACL,EACA,IACA,EACA,GAEJ,YAAe,CACX,IACA,IACA,GACA,GAEJ,KAAQ,CACJ,IACA,IACA,IACA,GAEJ,SAAY,CACR,IACA,IACA,IACA,GAEJ,QAAW,CACP,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,GACA,GACA,GAEJ,OAAU,CACN,GACA,EACA,IACA,GAEJ,MAAS,CACL,IACA,IACA,IACA,GAEJ,MAAS,CACL,IACA,IACA,IACA,GAEJ,SAAY,CACR,IACA,IACA,IACA,GAEJ,cAAiB,CACb,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,EACA,GAEJ,aAAgB,CACZ,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,qBAAwB,CACpB,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,YAAe,CACX,IACA,IACA,IACA,GAEJ,cAAiB,CACb,GACA,IACA,IACA,GAEJ,aAAgB,CACZ,IACA,IACA,IACA,GAEJ,eAAkB,CACd,IACA,IACA,IACA,GAEJ,eAAkB,CACd,IACA,IACA,IACA,GAEJ,eAAkB,CACd,IACA,IACA,IACA,GAEJ,YAAe,CACX,IACA,IACA,IACA,GAEJ,KA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CJoH,YAAa,4BAGf,SAAmB,CACjB10L,EAAG,YACHC,EAAG,YACHy0L,YAAa,iBAGf,OAAiB,CACf10L,EAAG,WACHstL,GAAI,IACJoH,YAAa,8BAGf,QAAkB,CAChB10L,EAAG,QACHstL,GAAI,OACJoH,YAAa,mCAGf,MAAgB,CACd10L,EAAG,QACHstL,GAAI,cACJoH,YAAa,qBAGf,OAAiB,CACf10L,EAAG,YACHstL,GAAI,YACJoH,YAAa,eAGf,SAAmB,CACjB10L,EAAG,YACHstL,GAAI,YACJoH,YAAa,yBAGf,OAAiB,CACf10L,EAAG,UACHC,EAAG,UACHy0L,YAAa,eAGf,OAAiB,CACf10L,EAAG,YACHstL,GAAI,SACJoH,YAAa,oBAGf,UAAoB,CAClB10L,EAAG,UACHC,EAAG,QACHqtL,GAAI,YACJoH,YAAa,qBAGf,OAAiB,CACf10L,EAAG,kBACHstL,GAAI,kBACJoH,YAAa,eAGf,IAAc,CACZ10L,EAAG,UACHstL,GAAI,OACJoH,YAAa,mCAGf,OAAiB,CACf10L,EAAG,QACHstL,GAAI,MACJoH,YAAa,2BAGf,QAAkB,CAChB10L,EAAG,WACHstL,GAAI,SACJoH,YAAa,gBAGf,QAAkB,CAChB10L,EAAG,YACHstL,GAAI,SACJoH,YAAa,gBAGf,QAAkB,CAChB10L,EAAG,YACHstL,GAAI,SACJoH,YAAa,gBAGf,QAAkB,CAChB10L,EAAG,YACHstL,GAAI,SACJoH,YAAa,gBAGf,QAAkB,CAChB10L,EAAG,YACHstL,GAAI,SACJoH,YAAa,gBAGf,QAAkB,CAChB10L,EAAG,YACHstL,GAAI,SACJoH,YAAa,6BAGf,QAAkB,CAChB10L,EAAG,QACHstL,GAAI,MACJoH,YAAa,gCAGf,SAAmB,CACjB10L,EAAG,QACHstL,GAAI,MACJoH,YAAa,gBAGf,QAAkB,CAChB10L,EAAG,QACHstL,GAAI,MACJoH,YAAa,gBAGf,QAAkB,CAChB10L,EAAG,QACHstL,GAAI,MACJoH,YAAa,gBAGf,MAAgB,CACd10L,EAAG,QACHstL,GAAI,IACJoH,YAAa,SAGf,KAAe,CACb10L,E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","sources":["webpack://Gp/./node_modules/@xmldom/xmldom/lib/conventions.js","webpack://Gp/./node_modules/@xmldom/xmldom/lib/dom-parser.js","webpack://Gp/./node_modules/@xmldom/xmldom/lib/dom.js","webpack://Gp/./node_modules/@xmldom/xmldom/lib/entities.js","webpack://Gp/./node_modules/@xmldom/xmldom/lib/errors.js","webpack://Gp/./node_modules/@xmldom/xmldom/lib/grammar.js","webpack://Gp/./node_modules/@xmldom/xmldom/lib/index.js","webpack://Gp/./node_modules/@xmldom/xmldom/lib/sax.js","webpack://Gp/./src/packages/Services/Search.js","webpack://Gp/./node_modules/es6-promise/dist/es6-promise.js","webpack://Gp/./node_modules/eventbusjs/lib/eventbus.min.js","webpack://Gp/./node_modules/loglevel/lib/loglevel.js","webpack://Gp/./node_modules/node-fetch/browser.js","webpack://Gp/webpack/bootstrap","webpack://Gp/webpack/runtime/compat get default export","webpack://Gp/webpack/runtime/define property getters","webpack://Gp/webpack/runtime/global","webpack://Gp/webpack/runtime/hasOwnProperty shorthand","webpack://Gp/webpack/runtime/make namespace object","webpack://Gp/external var \"ol.Overlay\"","webpack://Gp/external var \"ol.source.VectorTile\"","webpack://Gp/external var \"ol.source.Vector\"","webpack://Gp/external var \"ol.source.TileWMS\"","webpack://Gp/external var \"ol.source.WMTS\"","webpack://Gp/external var \"ol.source.ImageWMS\"","webpack://Gp/external var \"ol.interaction\"","webpack://Gp/./node_modules/geoportal-access-lib/src/Utils/LoggerByDefault.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Utils/MessagesResources.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Utils/Helper.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Protocols/XHR.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Protocols/JSONP.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Protocols/Protocol.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Exceptions/ErrorService.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/CommonService.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/DefaultUrlService.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Config/ConfigInterface.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Config/Config.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Alti/Request/model/AltiRequest.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Alti/Request/model/AltiElevationRequest.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Alti/Request/model/AltiProfilRequest.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Alti/Request/AltiRequestREST.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Formats/WPS.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Alti/Request/AltiRequestWPS.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Alti/Request/AltiRequestFactory.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Formats/XML.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Alti/Response/model/AltiResponse.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Alti/Response/model/Elevation.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Alti/Response/model/Measure.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Alti/Formats/AltiResponseReader.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Alti/Response/AltiResponseFactory.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Alti/Alti.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Geocode/Request/model/GeocodeParamREST.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Geocode/Request/GeocodeRequestREST.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Geocode/Request/GeocodeRequestFactory.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Geocode/Response/model/GeocodeResponse.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Geocode/Response/model/GeocodedLocation.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Geocode/Formats/GeocodeResponseParser.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Geocode/Response/GeocodeResponseFactory.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Geocode/Geocode.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Geocode/ReverseGeocode.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/AutoComplete/Response/model/AutoCompleteResponse.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/AutoComplete/Response/model/SuggestedLocation.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/AutoComplete/Response/AutoCompleteResponseFactory.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/AutoComplete/AutoComplete.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Route/Request/model/RouteParamREST.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Route/Request/RouteRequestREST.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Route/Request/RouteRequestFactory.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Route/Response/model/RouteResponse.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Route/Response/model/RouteInstruction.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Route/Response/RouteResponseFactory.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Route/Route.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/ProcessIsoCurve/Request/model/ProcessIsoCurveParam.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/ProcessIsoCurve/Request/ProcessIsoCurveRequest.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/ProcessIsoCurve/Response/model/ProcessIsoCurveResponse.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/ProcessIsoCurve/Response/ProcessIsoCurveResponseFactory.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/ProcessIsoCurve/ProcessIsoCurve.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Services/Services.js","webpack://Gp/./node_modules/geoportal-access-lib/src/Gp.js","webpack://Gp/./src/packages/Utils/LoggerByDefault.js","webpack://Gp/./src/packages/Utils/ProxyUtils.js","webpack://Gp/./src/packages/Controls/Utils/Gfi.js","webpack://Gp/external var \"ol.format.KML\"","webpack://Gp/external var \"ol.style\"","webpack://Gp/./src/packages/Utils/ColorUtils.js","webpack://Gp/./src/packages/Controls/Utils/Markers.js","webpack://Gp/external var \"ol.Feature\"","webpack://Gp/external var \"ol.style.Style\"","webpack://Gp/external var \"ol.style.Circle\"","webpack://Gp/external var \"ol.style.Icon\"","webpack://Gp/external var \"ol.style.Fill\"","webpack://Gp/external var \"ol.style.Stroke\"","webpack://Gp/external var \"ol.style.Text\"","webpack://Gp/external var \"ol.geom.Polygon\"","webpack://Gp/external var \"ol.geom.MultiPolygon\"","webpack://Gp/./src/packages/Formats/Styling.js","webpack://Gp/./src/packages/Utils/Parser.js","webpack://Gp/./src/packages/Utils/Helper.js","webpack://Gp/./src/packages/Formats/KML.js","webpack://Gp/external var \"ol.format.GPX\"","webpack://Gp/external var \"ol.geom.MultiLineString\"","webpack://Gp/external var \"ol.geom.LineString\"","webpack://Gp/./src/packages/Formats/GPX.js","webpack://Gp/external var \"ol.format.GeoJSON\"","webpack://Gp/./src/packages/Formats/GeoJSON.js","webpack://Gp/external var \"ol.extent\"","webpack://Gp/./src/packages/Sources/WMTS.js","webpack://Gp/external var \"ol.tilegrid.WMTS\"","webpack://Gp/./src/packages/Utils/LayerUtils.js","webpack://Gp/./src/packages/Utils/Config.js","webpack://Gp/./src/packages/Layers/SourceWMTS.js","webpack://Gp/./src/packages/Layers/SourceWMS.js","webpack://Gp/external var \"ol.loadingstrategy\"","webpack://Gp/external var \"ol.tilegrid\"","webpack://Gp/./src/packages/Layers/SourceWFS.js","webpack://Gp/external var \"ol.proj\"","webpack://Gp/external var \"ol.layer.Tile\"","webpack://Gp/./src/packages/Layers/LayerWMTS.js","webpack://Gp/./src/packages/Layers/LayerWMS.js","webpack://Gp/external var \"ol.layer.Vector\"","webpack://Gp/./src/packages/Layers/LayerWFS.js","webpack://Gp/external var \"ol.layer.VectorTile\"","webpack://Gp/external var \"ol.source.TileJSON\"","webpack://Gp/external var \"ol.format.MVT\"","webpack://Gp/external var \"ol.Observable\"","webpack://Gp/./node_modules/ol/transform.js","webpack://Gp/./node_modules/ol/extent.js","webpack://Gp/./node_modules/ol/math.js","webpack://Gp/./node_modules/ol/geom/flat/simplify.js","webpack://Gp/./node_modules/ol/array.js","webpack://Gp/./node_modules/ol/geom/flat/contains.js","webpack://Gp/./node_modules/ol/geom/flat/interiorpoint.js","webpack://Gp/./node_modules/ol/proj/Units.js","webpack://Gp/./node_modules/ol/proj/Projection.js","webpack://Gp/./node_modules/ol/proj/epsg3857.js","webpack://Gp/./node_modules/ol/proj/epsg4326.js","webpack://Gp/./node_modules/ol/proj/projections.js","webpack://Gp/./node_modules/ol/proj/transforms.js","webpack://Gp/./node_modules/ol/proj/utm.js","webpack://Gp/./node_modules/ol/proj.js","webpack://Gp/./node_modules/ol/geom/flat/orient.js","webpack://Gp/./node_modules/ol/geom/flat/interpolate.js","webpack://Gp/./node_modules/ol/render/Feature.js","webpack://Gp/./node_modules/ol/geom/flat/center.js","webpack://Gp/./node_modules/ol/geom/flat/transform.js","webpack://Gp/./node_modules/ol/functions.js","webpack://Gp/external var \"ol.functions\"","webpack://Gp/external var \"ol.render.canvas\"","webpack://Gp/external var \"ol.TileState\"","webpack://Gp/external var \"ol.util\"","webpack://Gp/external var \"ol.tilegrid.TileGrid\"","webpack://Gp/external var \"ol.layer.Image\"","webpack://Gp/external var \"ol.layer.Layer\"","webpack://Gp/external var \"ol.layer.Group\"","webpack://Gp/external var \"ol.Map\"","webpack://Gp/external var \"ol.source.Raster\"","webpack://Gp/external var \"ol.source.Source\"","webpack://Gp/external var \"ol.proj.Units\"","webpack://Gp/external var \"ol.View\"","webpack://Gp/external var \"ol.events.Event\"","webpack://Gp/./node_modules/ol-mapbox-style/dist/index.js","webpack://Gp/external var {\"commonjs\":\"ol\",\"commonjs2\":\"ol\",\"amd\":\"ol\",\"root\":\"ol\"}","webpack://Gp/./src/packages/Layers/LayerMapBox.js","webpack://Gp/./src/packages/Utils/PanelManager.js","webpack://Gp/./src/packages/Controls/Widget.js","webpack://Gp/external var \"ol.control.Control\"","webpack://Gp/./src/packages/Controls/Utils/CheckDsfr.js","webpack://Gp/./src/packages/Controls/Control.js","webpack://Gp/./src/packages/Utils/SelectorID.js","webpack://Gp/./node_modules/sortablejs/modular/sortable.esm.js","webpack://Gp/./src/packages/Controls/LayerSwitcher/LayerSwitcherDOM.js","webpack://Gp/./src/packages/Controls/LayerSwitcher/LayerSwitcher.js","webpack://Gp/./src/packages/Utils/Draggable.js","webpack://Gp/./src/packages/Controls/Utils/AsyncData.js","webpack://Gp/./src/packages/Controls/GetFeatureInfo/GetFeatureInfoDOM.js","webpack://Gp/./src/packages/Controls/GetFeatureInfo/GetFeatureInfo.js","webpack://Gp/./src/packages/Controls/Utils/Interactions.js","webpack://Gp/./src/packages/Utils/MathUtils.js","webpack://Gp/./src/packages/Utils/SearchEngineUtils.js","webpack://Gp/./src/packages/Utils/GeocodeUtils.js","webpack://Gp/./node_modules/proj4/lib/constants/values.js","webpack://Gp/./node_modules/proj4/lib/constants/PrimeMeridian.js","webpack://Gp/./node_modules/proj4/lib/constants/units.js","webpack://Gp/./node_modules/proj4/lib/match.js","webpack://Gp/./node_modules/proj4/lib/projString.js","webpack://Gp/./node_modules/wkt-parser/parser.js","webpack://Gp/./node_modules/wkt-parser/process.js","webpack://Gp/./node_modules/wkt-parser/index.js","webpack://Gp/./node_modules/proj4/lib/defs.js","webpack://Gp/./node_modules/proj4/lib/global.js","webpack://Gp/./node_modules/proj4/lib/parseCode.js","webpack://Gp/./node_modules/proj4/lib/extend.js","webpack://Gp/./node_modules/proj4/lib/common/msfnz.js","webpack://Gp/./node_modules/proj4/lib/common/sign.js","webpack://Gp/./node_modules/proj4/lib/common/adjust_lon.js","webpack://Gp/./node_modules/proj4/lib/common/tsfnz.js","webpack://Gp/./node_modules/proj4/lib/common/phi2z.js","webpack://Gp/./node_modules/proj4/lib/projections/longlat.js","webpack://Gp/./node_modules/proj4/lib/projections.js","webpack://Gp/./node_modules/proj4/lib/projections/merc.js","webpack://Gp/./node_modules/proj4/lib/constants/Ellipsoid.js","webpack://Gp/./node_modules/proj4/lib/constants/Datum.js","webpack://Gp/./node_modules/proj4/lib/datum.js","webpack://Gp/./node_modules/proj4/lib/nadgrid.js","webpack://Gp/./node_modules/proj4/lib/Proj.js","webpack://Gp/./node_modules/proj4/lib/deriveConstants.js","webpack://Gp/./node_modules/proj4/lib/datumUtils.js","webpack://Gp/./node_modules/proj4/lib/datum_transform.js","webpack://Gp/./node_modules/proj4/lib/adjust_axis.js","webpack://Gp/./node_modules/proj4/lib/common/toPoint.js","webpack://Gp/./node_modules/proj4/lib/checkSanity.js","webpack://Gp/./node_modules/proj4/lib/transform.js","webpack://Gp/./node_modules/proj4/lib/core.js","webpack://Gp/./node_modules/mgrs/mgrs.js","webpack://Gp/./node_modules/proj4/lib/Point.js","webpack://Gp/./node_modules/proj4/lib/common/pj_enfn.js","webpack://Gp/./node_modules/proj4/lib/common/pj_mlfn.js","webpack://Gp/./node_modules/proj4/lib/common/pj_inv_mlfn.js","webpack://Gp/./node_modules/proj4/lib/projections/tmerc.js","webpack://Gp/./node_modules/proj4/lib/common/sinh.js","webpack://Gp/./node_modules/proj4/lib/common/hypot.js","webpack://Gp/./node_modules/proj4/lib/common/asinhy.js","webpack://Gp/./node_modules/proj4/lib/common/log1py.js","webpack://Gp/./node_modules/proj4/lib/common/gatg.js","webpack://Gp/./node_modules/proj4/lib/common/clens_cmplx.js","webpack://Gp/./node_modules/proj4/lib/common/cosh.js","webpack://Gp/./node_modules/proj4/lib/projections/etmerc.js","webpack://Gp/./node_modules/proj4/lib/common/clens.js","webpack://Gp/./node_modules/proj4/lib/projections/utm.js","webpack://Gp/./node_modules/proj4/lib/common/adjust_zone.js","webpack://Gp/./node_modules/proj4/lib/common/srat.js","webpack://Gp/./node_modules/proj4/lib/projections/gauss.js","webpack://Gp/./node_modules/proj4/lib/projections/sterea.js","webpack://Gp/./node_modules/proj4/lib/projections/stere.js","webpack://Gp/./node_modules/proj4/lib/projections/somerc.js","webpack://Gp/./node_modules/proj4/lib/projections/omerc.js","webpack://Gp/./node_modules/proj4/lib/projections/lcc.js","webpack://Gp/./node_modules/proj4/lib/projections/krovak.js","webpack://Gp/./node_modules/proj4/lib/common/mlfn.js","webpack://Gp/./node_modules/proj4/lib/common/e0fn.js","webpack://Gp/./node_modules/proj4/lib/common/e1fn.js","webpack://Gp/./node_modules/proj4/lib/common/e2fn.js","webpack://Gp/./node_modules/proj4/lib/common/e3fn.js","webpack://Gp/./node_modules/proj4/lib/common/gN.js","webpack://Gp/./node_modules/proj4/lib/common/adjust_lat.js","webpack://Gp/./node_modules/proj4/lib/common/imlfn.js","webpack://Gp/./node_modules/proj4/lib/projections/cass.js","webpack://Gp/./node_modules/proj4/lib/common/qsfnz.js","webpack://Gp/./node_modules/proj4/lib/projections/laea.js","webpack://Gp/./node_modules/proj4/lib/common/asinz.js","webpack://Gp/./node_modules/proj4/lib/projections/aea.js","webpack://Gp/./node_modules/proj4/lib/projections/gnom.js","webpack://Gp/./node_modules/proj4/lib/projections/cea.js","webpack://Gp/./node_modules/proj4/lib/common/iqsfnz.js","webpack://Gp/./node_modules/proj4/lib/projections/eqc.js","webpack://Gp/./node_modules/proj4/lib/projections/poly.js","webpack://Gp/./node_modules/proj4/lib/projections/nzmg.js","webpack://Gp/./node_modules/proj4/lib/projections/mill.js","webpack://Gp/./node_modules/proj4/lib/projections/sinu.js","webpack://Gp/./node_modules/proj4/lib/projections/moll.js","webpack://Gp/./node_modules/proj4/lib/projections/eqdc.js","webpack://Gp/./node_modules/proj4/lib/projections/vandg.js","webpack://Gp/./node_modules/proj4/lib/projections/aeqd.js","webpack://Gp/./node_modules/proj4/lib/projections/ortho.js","webpack://Gp/./node_modules/proj4/lib/projections/qsc.js","webpack://Gp/./node_modules/proj4/lib/projections/robin.js","webpack://Gp/./node_modules/proj4/lib/projections/geocent.js","webpack://Gp/./node_modules/proj4/lib/projections/tpers.js","webpack://Gp/./node_modules/proj4/lib/projections/geos.js","webpack://Gp/./node_modules/proj4/lib/projections/eqearth.js","webpack://Gp/./node_modules/proj4/lib/projections/bonne.js","webpack://Gp/./node_modules/proj4/lib/index.js","webpack://Gp/./node_modules/proj4/projs.js","webpack://Gp/external var \"ol.proj.transforms\"","webpack://Gp/external var \"ol.proj.Projection\"","webpack://Gp/./src/packages/CRS/Proj4.js","webpack://Gp/./src/packages/Utils/Register.js","webpack://Gp/./src/packages/CRS/CRS.js","webpack://Gp/./src/packages/Controls/SearchEngine/SearchEngineDOM.js","webpack://Gp/./src/packages/Controls/SearchEngine/SearchEngine.js","webpack://Gp/./src/packages/Controls/MousePosition/MousePositionDOM.js","webpack://Gp/./src/packages/Controls/MousePosition/MousePosition.js","webpack://Gp/external var \"ol.Collection\"","webpack://Gp/external var \"ol.geom\"","webpack://Gp/external var \"ol.events.condition\"","webpack://Gp/external var \"ol.sphere\"","webpack://Gp/./src/packages/Controls/Utils/MarkersOther.js","webpack://Gp/./src/packages/Controls/Drawing/DrawingDOM.js","webpack://Gp/./src/packages/Controls/Drawing/Drawing.js","webpack://Gp/./src/packages/Controls/LocationSelector/LocationSelectorDOM.js","webpack://Gp/./src/packages/Controls/LocationSelector/LocationSelector.js","webpack://Gp/./src/packages/Controls/Export/ExportDOM.js","webpack://Gp/./src/packages/Controls/Export/Export.js","webpack://Gp/./src/packages/Controls/Route/RouteDOM.js","webpack://Gp/./src/packages/Controls/Route/Route.js","webpack://Gp/./src/packages/Controls/Isocurve/IsocurveDOM.js","webpack://Gp/./src/packages/Controls/Isocurve/Isocurve.js","webpack://Gp/./src/packages/Controls/ReverseGeocode/ReverseGeocodeDOM.js","webpack://Gp/./src/packages/Controls/ReverseGeocode/ReverseGeocode.js","webpack://Gp/external var \"ol.format.WMSCapabilities\"","webpack://Gp/external var \"ol.format.WMTSCapabilities\"","webpack://Gp/./src/packages/Controls/Editor/Event.js","webpack://Gp/./src/packages/Controls/Editor/Style.js","webpack://Gp/./src/packages/Controls/Editor/Themes.js","webpack://Gp/./src/packages/Controls/Editor/Filter.js","webpack://Gp/./src/packages/Controls/Editor/Legend.js","webpack://Gp/./src/packages/Controls/Editor/Layer.js","webpack://Gp/./src/packages/Controls/Editor/Group.js","webpack://Gp/./src/packages/Controls/Editor/Search.js","webpack://Gp/./src/packages/Controls/Editor/EditorDOM.js","webpack://Gp/./src/packages/Controls/Editor/Editor.js","webpack://Gp/./src/packages/Controls/LayerImport/LayerImportDOM.js","webpack://Gp/./src/packages/Controls/ToolBoxMeasure/MeasureToolBoxDOM.js","webpack://Gp/./src/packages/Controls/ToolBoxMeasure/MeasureToolBox.js","webpack://Gp/./src/packages/Controls/Measures/Measures.js","webpack://Gp/./src/packages/Controls/ElevationPath/ElevationPathDOM.js","webpack://Gp/./src/packages/Controls/ElevationPath/ProfileElevationPathDOM.js","webpack://Gp/./src/packages/Controls/ElevationPath/ElevationPath.js","webpack://Gp/./src/packages/Controls/LayerImport/LayerImport.js","webpack://Gp/external var \"ol.control.Attribution\"","webpack://Gp/./src/packages/Controls/Attribution/GeoportalAttribution.js","webpack://Gp/./src/packages/Controls/Measures/MeasureLengthDOM.js","webpack://Gp/./src/packages/Controls/Measures/MeasureLength.js","webpack://Gp/./src/packages/Controls/Measures/MeasureAreaDOM.js","webpack://Gp/./src/packages/Controls/Measures/MeasureArea.js","webpack://Gp/./src/packages/Controls/Measures/MeasureAzimuthDOM.js","webpack://Gp/./src/packages/Controls/Measures/MeasureAzimuth.js","webpack://Gp/external var \"ol.control.Zoom\"","webpack://Gp/./src/packages/Controls/Zoom/GeoportalZoom.js","webpack://Gp/external var \"ol.control.FullScreen\"","webpack://Gp/./src/packages/Controls/FullScreen/GeoportalFullScreen.js","webpack://Gp/external var \"ol.control.OverviewMap\"","webpack://Gp/./src/packages/Controls/OverviewMap/GeoportalOverviewMap.js","webpack://Gp/./src/packages/Controls/Legends/LegendsDOM.js","webpack://Gp/./src/packages/Controls/Legends/Legends.js","webpack://Gp/./src/packages/Controls/Territories/TerritoriesDOM.js","webpack://Gp/./src/packages/Controls/Territories/Territories.js","webpack://Gp/./src/packages/Controls/ControlList/ControlListDOM.js","webpack://Gp/./src/packages/Controls/ControlList/ControlList.js","webpack://Gp/./src/packages/Controls/Catalog/CatalogDOM.js","webpack://Gp/./src/packages/Controls/Catalog/Catalog.js","webpack://Gp/./src/packages/Utils/AutoLoadConfig.js","webpack://Gp/./src/packages/CRS/AutoLoadCRS.js","webpack://Gp/./src/packages/bundle.js"],"sourcesContent":["'use strict';\n\n/**\n * Ponyfill for `Array.prototype.find` which is only available in ES6 runtimes.\n *\n * Works with anything that has a `length` property and index access properties,\n * including NodeList.\n *\n * @param {T[] | { length: number; [number]: T }} list\n * @param {function (item: T, index: number, list:T[]):boolean} predicate\n * @param {Partial>?} ac\n * Allows injecting a custom implementation in tests (`Array.prototype` by default).\n * @returns {T | undefined}\n * @template {unknown} T\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n * @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find\n */\nfunction find(list, predicate, ac) {\n\tif (ac === undefined) {\n\t\tac = Array.prototype;\n\t}\n\tif (list && typeof ac.find === 'function') {\n\t\treturn ac.find.call(list, predicate);\n\t}\n\tfor (var i = 0; i < list.length; i++) {\n\t\tif (hasOwn(list, i)) {\n\t\t\tvar item = list[i];\n\t\t\tif (predicate.call(undefined, item, i, list)) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * \"Shallow freezes\" an object to render it immutable.\n * Uses `Object.freeze` if available,\n * otherwise the immutability is only in the type.\n *\n * Is used to create \"enum like\" objects.\n *\n * If `Object.getOwnPropertyDescriptors` is available,\n * a new object with all properties of object but without any prototype is created and returned\n * after freezing it.\n *\n * @param {T} object\n * The object to freeze.\n * @param {Pick} [oc=Object]\n * `Object` by default,\n * allows to inject custom object constructor for tests.\n * @returns {Readonly}\n * @template {Object} T\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n * @prettierignore\n */\nfunction freeze(object, oc) {\n\tif (oc === undefined) {\n\t\toc = Object;\n\t}\n\tif (oc && typeof oc.getOwnPropertyDescriptors === 'function') {\n\t\tobject = oc.create(null, oc.getOwnPropertyDescriptors(object));\n\t}\n\treturn oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object;\n}\n\n/**\n * Implementation for `Object.hasOwn` but ES5 compatible.\n *\n * @param {any} object\n * @param {string | number} key\n * @returns {boolean}\n */\nfunction hasOwn(object, key) {\n\treturn Object.prototype.hasOwnProperty.call(object, key);\n}\n\n/**\n * Since xmldom can not rely on `Object.assign`,\n * it uses/provides a simplified version that is sufficient for its needs.\n *\n * @param {Object} target\n * @param {Object | null | undefined} source\n * @returns {Object}\n * The target with the merged/overridden properties.\n * @throws {TypeError}\n * If target is not an object.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign\n */\nfunction assign(target, source) {\n\tif (target === null || typeof target !== 'object') {\n\t\tthrow new TypeError('target is not an object');\n\t}\n\tfor (var key in source) {\n\t\tif (hasOwn(source, key)) {\n\t\t\ttarget[key] = source[key];\n\t\t}\n\t}\n\treturn target;\n}\n\n/**\n * A number of attributes are boolean attributes.\n * The presence of a boolean attribute on an element represents the `true` value,\n * and the absence of the attribute represents the `false` value.\n *\n * If the attribute is present, its value must either be the empty string, or a value that is\n * an ASCII case-insensitive match for the attribute's canonical name,\n * with no leading or trailing whitespace.\n *\n * Note: The values `\"true\"` and `\"false\"` are not allowed on boolean attributes.\n * To represent a `false` value, the attribute has to be omitted altogether.\n *\n * @see https://html.spec.whatwg.org/#boolean-attributes\n * @see https://html.spec.whatwg.org/#attributes-3\n */\nvar HTML_BOOLEAN_ATTRIBUTES = freeze({\n\tallowfullscreen: true,\n\tasync: true,\n\tautofocus: true,\n\tautoplay: true,\n\tchecked: true,\n\tcontrols: true,\n\tdefault: true,\n\tdefer: true,\n\tdisabled: true,\n\tformnovalidate: true,\n\thidden: true,\n\tismap: true,\n\titemscope: true,\n\tloop: true,\n\tmultiple: true,\n\tmuted: true,\n\tnomodule: true,\n\tnovalidate: true,\n\topen: true,\n\tplaysinline: true,\n\treadonly: true,\n\trequired: true,\n\treversed: true,\n\tselected: true,\n});\n\n/**\n * Check if `name` is matching one of the HTML boolean attribute names.\n * This method doesn't check if such attributes are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} name\n * @returns {boolean}\n * @see {@link HTML_BOOLEAN_ATTRIBUTES}\n * @see https://html.spec.whatwg.org/#boolean-attributes\n * @see https://html.spec.whatwg.org/#attributes-3\n */\nfunction isHTMLBooleanAttribute(name) {\n\treturn hasOwn(HTML_BOOLEAN_ATTRIBUTES, name.toLowerCase());\n}\n\n/**\n * Void elements only have a start tag; end tags must not be specified for void elements.\n * These elements should be written as self-closing like this: ``.\n * This should not be confused with optional tags that HTML allows to omit the end tag for\n * (like `li`, `tr` and others), which can have content after them,\n * so they can not be written as self-closing.\n * xmldom does not have any logic for optional end tags cases,\n * and will report them as a warning.\n * Content that would go into the unopened element,\n * will instead be added as a sibling text node.\n *\n * @type {Readonly<{\n * \tarea: boolean;\n * \tcol: boolean;\n * \timg: boolean;\n * \twbr: boolean;\n * \tlink: boolean;\n * \thr: boolean;\n * \tsource: boolean;\n * \tbr: boolean;\n * \tinput: boolean;\n * \tparam: boolean;\n * \tmeta: boolean;\n * \tembed: boolean;\n * \ttrack: boolean;\n * \tbase: boolean;\n * }>}\n * @see https://html.spec.whatwg.org/#void-elements\n * @see https://html.spec.whatwg.org/#optional-tags\n */\nvar HTML_VOID_ELEMENTS = freeze({\n\tarea: true,\n\tbase: true,\n\tbr: true,\n\tcol: true,\n\tembed: true,\n\thr: true,\n\timg: true,\n\tinput: true,\n\tlink: true,\n\tmeta: true,\n\tparam: true,\n\tsource: true,\n\ttrack: true,\n\twbr: true,\n});\n\n/**\n * Check if `tagName` is matching one of the HTML void element names.\n * This method doesn't check if such tags are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} tagName\n * @returns {boolean}\n * @see {@link HTML_VOID_ELEMENTS}\n * @see https://html.spec.whatwg.org/#void-elements\n */\nfunction isHTMLVoidElement(tagName) {\n\treturn hasOwn(HTML_VOID_ELEMENTS, tagName.toLowerCase());\n}\n\n/**\n * Tag names that are raw text elements according to HTML spec.\n * The value denotes whether they are escapable or not.\n *\n * @see {@link isHTMLEscapableRawTextElement}\n * @see {@link isHTMLRawTextElement}\n * @see https://html.spec.whatwg.org/#raw-text-elements\n * @see https://html.spec.whatwg.org/#escapable-raw-text-elements\n */\nvar HTML_RAW_TEXT_ELEMENTS = freeze({\n\tscript: false,\n\tstyle: false,\n\ttextarea: true,\n\ttitle: true,\n});\n\n/**\n * Check if `tagName` is matching one of the HTML raw text element names.\n * This method doesn't check if such tags are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} tagName\n * @returns {boolean}\n * @see {@link isHTMLEscapableRawTextElement}\n * @see {@link HTML_RAW_TEXT_ELEMENTS}\n * @see https://html.spec.whatwg.org/#raw-text-elements\n * @see https://html.spec.whatwg.org/#escapable-raw-text-elements\n */\nfunction isHTMLRawTextElement(tagName) {\n\tvar key = tagName.toLowerCase();\n\treturn hasOwn(HTML_RAW_TEXT_ELEMENTS, key) && !HTML_RAW_TEXT_ELEMENTS[key];\n}\n/**\n * Check if `tagName` is matching one of the HTML escapable raw text element names.\n * This method doesn't check if such tags are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} tagName\n * @returns {boolean}\n * @see {@link isHTMLRawTextElement}\n * @see {@link HTML_RAW_TEXT_ELEMENTS}\n * @see https://html.spec.whatwg.org/#raw-text-elements\n * @see https://html.spec.whatwg.org/#escapable-raw-text-elements\n */\nfunction isHTMLEscapableRawTextElement(tagName) {\n\tvar key = tagName.toLowerCase();\n\treturn hasOwn(HTML_RAW_TEXT_ELEMENTS, key) && HTML_RAW_TEXT_ELEMENTS[key];\n}\n/**\n * Only returns true if `value` matches MIME_TYPE.HTML, which indicates an HTML document.\n *\n * @param {string} mimeType\n * @returns {mimeType is 'text/html'}\n * @see https://www.iana.org/assignments/media-types/text/html\n * @see https://en.wikipedia.org/wiki/HTML\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring\n */\nfunction isHTMLMimeType(mimeType) {\n\treturn mimeType === MIME_TYPE.HTML;\n}\n/**\n * For both the `text/html` and the `application/xhtml+xml` namespace the spec defines that the\n * HTML namespace is provided as the default.\n *\n * @param {string} mimeType\n * @returns {boolean}\n * @see https://dom.spec.whatwg.org/#dom-document-createelement\n * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument\n * @see https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument\n */\nfunction hasDefaultHTMLNamespace(mimeType) {\n\treturn isHTMLMimeType(mimeType) || mimeType === MIME_TYPE.XML_XHTML_APPLICATION;\n}\n\n/**\n * All mime types that are allowed as input to `DOMParser.parseFromString`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02\n * MDN\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype\n * WHATWG HTML Spec\n * @see {@link DOMParser.prototype.parseFromString}\n */\nvar MIME_TYPE = freeze({\n\t/**\n\t * `text/html`, the only mime type that triggers treating an XML document as HTML.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring\n\t * WHATWG HTML Spec\n\t */\n\tHTML: 'text/html',\n\n\t/**\n\t * `application/xml`, the standard mime type for XML documents.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType\n\t * registration\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_APPLICATION: 'application/xml',\n\n\t/**\n\t * `text/html`, an alias for `application/xml`.\n\t *\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303\n\t * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_TEXT: 'text/xml',\n\n\t/**\n\t * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,\n\t * but is parsed as an XML document.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType\n\t * registration\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec\n\t * @see https://en.wikipedia.org/wiki/XHTML Wikipedia\n\t */\n\tXML_XHTML_APPLICATION: 'application/xhtml+xml',\n\n\t/**\n\t * `image/svg+xml`,\n\t *\n\t * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration\n\t * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1\n\t * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia\n\t */\n\tXML_SVG_IMAGE: 'image/svg+xml',\n});\n/**\n * @typedef {'application/xhtml+xml' | 'application/xml' | 'image/svg+xml' | 'text/html' | 'text/xml'}\n * MimeType\n */\n/**\n * @type {MimeType[]}\n * @private\n * Basically `Object.values`, which is not available in ES5.\n */\nvar _MIME_TYPES = Object.keys(MIME_TYPE).map(function (key) {\n\treturn MIME_TYPE[key];\n});\n\n/**\n * Only returns true if `mimeType` is one of the allowed values for\n * `DOMParser.parseFromString`.\n *\n * @param {string} mimeType\n * @returns {mimeType is 'application/xhtml+xml' | 'application/xml' | 'image/svg+xml' | 'text/html' | 'text/xml'}\n *\n */\nfunction isValidMimeType(mimeType) {\n\treturn _MIME_TYPES.indexOf(mimeType) > -1;\n}\n/**\n * Namespaces that are used in this code base.\n *\n * @see http://www.w3.org/TR/REC-xml-names\n */\nvar NAMESPACE = freeze({\n\t/**\n\t * The XHTML namespace.\n\t *\n\t * @see http://www.w3.org/1999/xhtml\n\t */\n\tHTML: 'http://www.w3.org/1999/xhtml',\n\n\t/**\n\t * The SVG namespace.\n\t *\n\t * @see http://www.w3.org/2000/svg\n\t */\n\tSVG: 'http://www.w3.org/2000/svg',\n\n\t/**\n\t * The `xml:` namespace.\n\t *\n\t * @see http://www.w3.org/XML/1998/namespace\n\t */\n\tXML: 'http://www.w3.org/XML/1998/namespace',\n\n\t/**\n\t * The `xmlns:` namespace.\n\t *\n\t * @see https://www.w3.org/2000/xmlns/\n\t */\n\tXMLNS: 'http://www.w3.org/2000/xmlns/',\n});\n\nexports.assign = assign;\nexports.find = find;\nexports.freeze = freeze;\nexports.HTML_BOOLEAN_ATTRIBUTES = HTML_BOOLEAN_ATTRIBUTES;\nexports.HTML_RAW_TEXT_ELEMENTS = HTML_RAW_TEXT_ELEMENTS;\nexports.HTML_VOID_ELEMENTS = HTML_VOID_ELEMENTS;\nexports.hasDefaultHTMLNamespace = hasDefaultHTMLNamespace;\nexports.hasOwn = hasOwn;\nexports.isHTMLBooleanAttribute = isHTMLBooleanAttribute;\nexports.isHTMLRawTextElement = isHTMLRawTextElement;\nexports.isHTMLEscapableRawTextElement = isHTMLEscapableRawTextElement;\nexports.isHTMLMimeType = isHTMLMimeType;\nexports.isHTMLVoidElement = isHTMLVoidElement;\nexports.isValidMimeType = isValidMimeType;\nexports.MIME_TYPE = MIME_TYPE;\nexports.NAMESPACE = NAMESPACE;\n","'use strict';\n\nvar conventions = require('./conventions');\nvar dom = require('./dom');\nvar errors = require('./errors');\nvar entities = require('./entities');\nvar sax = require('./sax');\n\nvar DOMImplementation = dom.DOMImplementation;\n\nvar hasDefaultHTMLNamespace = conventions.hasDefaultHTMLNamespace;\nvar isHTMLMimeType = conventions.isHTMLMimeType;\nvar isValidMimeType = conventions.isValidMimeType;\nvar MIME_TYPE = conventions.MIME_TYPE;\nvar NAMESPACE = conventions.NAMESPACE;\nvar ParseError = errors.ParseError;\n\nvar XMLReader = sax.XMLReader;\n\n/**\n * Normalizes line ending according to :\n *\n * > XML parsed entities are often stored in computer files which,\n * > for editing convenience, are organized into lines.\n * > These lines are typically separated by some combination\n * > of the characters CARRIAGE RETURN (#xD) and LINE FEED (#xA).\n * >\n * > To simplify the tasks of applications, the XML processor must behave\n * > as if it normalized all line breaks in external parsed entities (including the document entity)\n * > on input, before parsing, by translating all of the following to a single #xA character:\n * >\n * > 1. the two-character sequence #xD #xA,\n * > 2. the two-character sequence #xD #x85,\n * > 3. the single character #x85,\n * > 4. the single character #x2028,\n * > 5. any #xD character that is not immediately followed by #xA or #x85.\n *\n * @param {string} input\n * @returns {string}\n * @prettierignore\n */\nfunction normalizeLineEndings(input) {\n\treturn input.replace(/\\r[\\n\\u0085]/g, '\\n').replace(/[\\r\\u0085\\u2028]/g, '\\n');\n}\n\n/**\n * @typedef Locator\n * @property {number} [columnNumber]\n * @property {number} [lineNumber]\n */\n\n/**\n * @typedef DOMParserOptions\n * @property {typeof assign} [assign]\n * The method to use instead of `conventions.assign`, which is used to copy values from\n * `options` before they are used for parsing.\n * @property {typeof DOMHandler} [domHandler]\n * For internal testing: The class for creating an instance for handling events from the SAX\n * parser.\n * *****Warning: By configuring a faulty implementation, the specified behavior can completely\n * be broken.*****.\n * @property {Function} [errorHandler]\n * DEPRECATED! use `onError` instead.\n * @property {function(level:ErrorLevel, message:string, context: DOMHandler):void}\n * [onError]\n * A function that is invoked for every error that occurs during parsing.\n *\n * If it is not provided, all errors are reported to `console.error`\n * and only `fatalError`s are thrown as a `ParseError`,\n * which prevents any further processing.\n * If the provided method throws, a `ParserError` is thrown,\n * which prevents any further processing.\n *\n * Be aware that many `warning`s are considered an error that prevents further processing in\n * most implementations.\n * @property {boolean} [locator=true]\n * Configures if the nodes created during parsing will have a `lineNumber` and a `columnNumber`\n * attribute describing their location in the XML string.\n * Default is true.\n * @property {(string) => string} [normalizeLineEndings]\n * used to replace line endings before parsing, defaults to `normalizeLineEndings`\n * @property {Object} [xmlns]\n * The XML namespaces that should be assumed when parsing.\n * The default namespace can be provided by the key that is the empty string.\n * When the `mimeType` for HTML, XHTML or SVG are passed to `parseFromString`,\n * the default namespace that will be used,\n * will be overridden according to the specification.\n * @see {@link normalizeLineEndings}\n */\n\n/**\n * The DOMParser interface provides the ability to parse XML or HTML source code from a string\n * into a DOM `Document`.\n *\n * ***xmldom is different from the spec in that it allows an `options` parameter,\n * to control the behavior***.\n *\n * @class\n * @param {DOMParserOptions} [options]\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization\n */\nfunction DOMParser(options) {\n\toptions = options || { locator: true };\n\n\t/**\n\t * The method to use instead of `conventions.assign`, which is used to copy values from\n\t * `options`\n\t * before they are used for parsing.\n\t *\n\t * @type {conventions.assign}\n\t * @private\n\t * @see {@link conventions.assign}\n\t * @readonly\n\t */\n\tthis.assign = options.assign || conventions.assign;\n\n\t/**\n\t * For internal testing: The class for creating an instance for handling events from the SAX\n\t * parser.\n\t * *****Warning: By configuring a faulty implementation, the specified behavior can completely\n\t * be broken*****.\n\t *\n\t * @type {typeof DOMHandler}\n\t * @private\n\t * @readonly\n\t */\n\tthis.domHandler = options.domHandler || DOMHandler;\n\n\t/**\n\t * A function that is invoked for every error that occurs during parsing.\n\t *\n\t * If it is not provided, all errors are reported to `console.error`\n\t * and only `fatalError`s are thrown as a `ParseError`,\n\t * which prevents any further processing.\n\t * If the provided method throws, a `ParserError` is thrown,\n\t * which prevents any further processing.\n\t *\n\t * Be aware that many `warning`s are considered an error that prevents further processing in\n\t * most implementations.\n\t *\n\t * @type {function(level:ErrorLevel, message:string, context: DOMHandler):void}\n\t * @see {@link onErrorStopParsing}\n\t * @see {@link onWarningStopParsing}\n\t */\n\tthis.onError = options.onError || options.errorHandler;\n\tif (options.errorHandler && typeof options.errorHandler !== 'function') {\n\t\tthrow new TypeError('errorHandler object is no longer supported, switch to onError!');\n\t} else if (options.errorHandler) {\n\t\toptions.errorHandler('warning', 'The `errorHandler` option has been deprecated, use `onError` instead!', this);\n\t}\n\n\t/**\n\t * used to replace line endings before parsing, defaults to `normalizeLineEndings`\n\t *\n\t * @type {(string) => string}\n\t * @readonly\n\t */\n\tthis.normalizeLineEndings = options.normalizeLineEndings || normalizeLineEndings;\n\n\t/**\n\t * Configures if the nodes created during parsing will have a `lineNumber` and a\n\t * `columnNumber`\n\t * attribute describing their location in the XML string.\n\t * Default is true.\n\t *\n\t * @type {boolean}\n\t * @readonly\n\t */\n\tthis.locator = !!options.locator;\n\n\t/**\n\t * The default namespace can be provided by the key that is the empty string.\n\t * When the `mimeType` for HTML, XHTML or SVG are passed to `parseFromString`,\n\t * the default namespace that will be used,\n\t * will be overridden according to the specification.\n\t *\n\t * @type {Readonly}\n\t * @readonly\n\t */\n\tthis.xmlns = this.assign(Object.create(null), options.xmlns);\n}\n\n/**\n * Parses `source` using the options in the way configured by the `DOMParserOptions` of `this`\n * `DOMParser`. If `mimeType` is `text/html` an HTML `Document` is created,\n * otherwise an XML `Document` is created.\n *\n * __It behaves different from the description in the living standard__:\n * - Uses the `options` passed to the `DOMParser` constructor to modify the behavior.\n * - Any unexpected input is reported to `onError` with either a `warning`,\n * `error` or `fatalError` level.\n * - Any `fatalError` throws a `ParseError` which prevents further processing.\n * - Any error thrown by `onError` is converted to a `ParseError` which prevents further\n * processing - If no `Document` was created during parsing it is reported as a `fatalError`.\n * *****Warning: By configuring a faulty DOMHandler implementation,\n * the specified behavior can completely be broken*****.\n *\n * @param {string} source\n * The XML mime type only allows string input!\n * @param {string} [mimeType='application/xml']\n * the mimeType or contentType of the document to be created determines the `type` of document\n * created (XML or HTML)\n * @returns {Document}\n * The `Document` node.\n * @throws {ParseError}\n * for any `fatalError` or anything that is thrown by `onError`\n * @throws {TypeError}\n * for any invalid `mimeType`\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString\n * @see https://html.spec.whatwg.org/#dom-domparser-parsefromstring-dev\n */\nDOMParser.prototype.parseFromString = function (source, mimeType) {\n\tif (!isValidMimeType(mimeType)) {\n\t\tthrow new TypeError('DOMParser.parseFromString: the provided mimeType \"' + mimeType + '\" is not valid.');\n\t}\n\tvar defaultNSMap = this.assign(Object.create(null), this.xmlns);\n\tvar entityMap = entities.XML_ENTITIES;\n\tvar defaultNamespace = defaultNSMap[''] || null;\n\tif (hasDefaultHTMLNamespace(mimeType)) {\n\t\tentityMap = entities.HTML_ENTITIES;\n\t\tdefaultNamespace = NAMESPACE.HTML;\n\t} else if (mimeType === MIME_TYPE.XML_SVG_IMAGE) {\n\t\tdefaultNamespace = NAMESPACE.SVG;\n\t}\n\tdefaultNSMap[''] = defaultNamespace;\n\tdefaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML;\n\n\tvar domBuilder = new this.domHandler({\n\t\tmimeType: mimeType,\n\t\tdefaultNamespace: defaultNamespace,\n\t\tonError: this.onError,\n\t});\n\tvar locator = this.locator ? {} : undefined;\n\tif (this.locator) {\n\t\tdomBuilder.setDocumentLocator(locator);\n\t}\n\n\tvar sax = new XMLReader();\n\tsax.errorHandler = domBuilder;\n\tsax.domBuilder = domBuilder;\n\tvar isXml = !conventions.isHTMLMimeType(mimeType);\n\tif (isXml && typeof source !== 'string') {\n\t\tsax.errorHandler.fatalError('source is not a string');\n\t}\n\tsax.parse(this.normalizeLineEndings(String(source)), defaultNSMap, entityMap);\n\tif (!domBuilder.doc.documentElement) {\n\t\tsax.errorHandler.fatalError('missing root element');\n\t}\n\treturn domBuilder.doc;\n};\n\n/**\n * @typedef DOMHandlerOptions\n * @property {string} [mimeType=MIME_TYPE.XML_APPLICATION]\n * @property {string | null} [defaultNamespace=null]\n */\n/**\n * The class that is used to handle events from the SAX parser to create the related DOM\n * elements.\n *\n * Some methods are only implemented as an empty function,\n * since they are (at least currently) not relevant for xmldom.\n *\n * @class\n * @param {DOMHandlerOptions} [options]\n * @see http://www.saxproject.org/apidoc/org/xml/sax/ext/DefaultHandler2.html\n */\nfunction DOMHandler(options) {\n\tvar opt = options || {};\n\t/**\n\t * The mime type is used to determine if the DOM handler will create an XML or HTML document.\n\t * Only if it is set to `text/html` it will create an HTML document.\n\t * It defaults to MIME_TYPE.XML_APPLICATION.\n\t *\n\t * @type {string}\n\t * @see {@link MIME_TYPE}\n\t * @readonly\n\t */\n\tthis.mimeType = opt.mimeType || MIME_TYPE.XML_APPLICATION;\n\n\t/**\n\t * The namespace to use to create an XML document.\n\t * For the following reasons this is required:\n\t * - The SAX API for `startDocument` doesn't offer any way to pass a namespace,\n\t * since at that point there is no way for the parser to know what the default namespace from\n\t * the document will be.\n\t * - When creating using `DOMImplementation.createDocument` it is required to pass a\n\t * namespace,\n\t * to determine the correct `Document.contentType`, which should match `this.mimeType`.\n\t * - When parsing an XML document with the `application/xhtml+xml` mimeType,\n\t * the HTML namespace needs to be the default namespace.\n\t *\n\t * @type {string | null}\n\t * @private\n\t * @readonly\n\t */\n\tthis.defaultNamespace = opt.defaultNamespace || null;\n\n\t/**\n\t * @type {boolean}\n\t * @private\n\t */\n\tthis.cdata = false;\n\n\t/**\n\t * The last `Element` that was created by `startElement`.\n\t * `endElement` sets it to the `currentElement.parentNode`.\n\t *\n\t * Note: The sax parser currently sets it to white space text nodes between tags.\n\t *\n\t * @type {Element | Node | undefined}\n\t * @private\n\t */\n\tthis.currentElement = undefined;\n\n\t/**\n\t * The Document that is created as part of `startDocument`,\n\t * and returned by `DOMParser.parseFromString`.\n\t *\n\t * @type {Document | undefined}\n\t * @readonly\n\t */\n\tthis.doc = undefined;\n\n\t/**\n\t * The locator is stored as part of setDocumentLocator.\n\t * It is controlled and mutated by the SAX parser to store the current parsing position.\n\t * It is used by DOMHandler to set `columnNumber` and `lineNumber`\n\t * on the DOM nodes.\n\t *\n\t * @type {Readonly | undefined}\n\t * @private\n\t * @readonly (the\n\t * sax parser currently sometimes set's it)\n\t */\n\tthis.locator = undefined;\n\t/**\n\t * @type {function (level:ErrorLevel ,message:string, context:DOMHandler):void}\n\t * @readonly\n\t */\n\tthis.onError = opt.onError;\n}\n\nfunction position(locator, node) {\n\tnode.lineNumber = locator.lineNumber;\n\tnode.columnNumber = locator.columnNumber;\n}\n\nDOMHandler.prototype = {\n\t/**\n\t * Either creates an XML or an HTML document and stores it under `this.doc`.\n\t * If it is an XML document, `this.defaultNamespace` is used to create it,\n\t * and it will not contain any `childNodes`.\n\t * If it is an HTML document, it will be created without any `childNodes`.\n\t *\n\t * @see http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html\n\t */\n\tstartDocument: function () {\n\t\tvar impl = new DOMImplementation();\n\t\tthis.doc = isHTMLMimeType(this.mimeType) ? impl.createHTMLDocument(false) : impl.createDocument(this.defaultNamespace, '');\n\t},\n\tstartElement: function (namespaceURI, localName, qName, attrs) {\n\t\tvar doc = this.doc;\n\t\tvar el = doc.createElementNS(namespaceURI, qName || localName);\n\t\tvar len = attrs.length;\n\t\tappendElement(this, el);\n\t\tthis.currentElement = el;\n\n\t\tthis.locator && position(this.locator, el);\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tvar namespaceURI = attrs.getURI(i);\n\t\t\tvar value = attrs.getValue(i);\n\t\t\tvar qName = attrs.getQName(i);\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\n\t\t\tthis.locator && position(attrs.getLocator(i), attr);\n\t\t\tattr.value = attr.nodeValue = value;\n\t\t\tel.setAttributeNode(attr);\n\t\t}\n\t},\n\tendElement: function (namespaceURI, localName, qName) {\n\t\tthis.currentElement = this.currentElement.parentNode;\n\t},\n\tstartPrefixMapping: function (prefix, uri) {},\n\tendPrefixMapping: function (prefix) {},\n\tprocessingInstruction: function (target, data) {\n\t\tvar ins = this.doc.createProcessingInstruction(target, data);\n\t\tthis.locator && position(this.locator, ins);\n\t\tappendElement(this, ins);\n\t},\n\tignorableWhitespace: function (ch, start, length) {},\n\tcharacters: function (chars, start, length) {\n\t\tchars = _toString.apply(this, arguments);\n\t\t//console.log(chars)\n\t\tif (chars) {\n\t\t\tif (this.cdata) {\n\t\t\t\tvar charNode = this.doc.createCDATASection(chars);\n\t\t\t} else {\n\t\t\t\tvar charNode = this.doc.createTextNode(chars);\n\t\t\t}\n\t\t\tif (this.currentElement) {\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t} else if (/^\\s*$/.test(chars)) {\n\t\t\t\tthis.doc.appendChild(charNode);\n\t\t\t\t//process xml\n\t\t\t}\n\t\t\tthis.locator && position(this.locator, charNode);\n\t\t}\n\t},\n\tskippedEntity: function (name) {},\n\tendDocument: function () {\n\t\tthis.doc.normalize();\n\t},\n\t/**\n\t * Stores the locator to be able to set the `columnNumber` and `lineNumber`\n\t * on the created DOM nodes.\n\t *\n\t * @param {Locator} locator\n\t */\n\tsetDocumentLocator: function (locator) {\n\t\tif (locator) {\n\t\t\tlocator.lineNumber = 0;\n\t\t}\n\t\tthis.locator = locator;\n\t},\n\t//LexicalHandler\n\tcomment: function (chars, start, length) {\n\t\tchars = _toString.apply(this, arguments);\n\t\tvar comm = this.doc.createComment(chars);\n\t\tthis.locator && position(this.locator, comm);\n\t\tappendElement(this, comm);\n\t},\n\n\tstartCDATA: function () {\n\t\t//used in characters() methods\n\t\tthis.cdata = true;\n\t},\n\tendCDATA: function () {\n\t\tthis.cdata = false;\n\t},\n\n\tstartDTD: function (name, publicId, systemId, internalSubset) {\n\t\tvar impl = this.doc.implementation;\n\t\tif (impl && impl.createDocumentType) {\n\t\t\tvar dt = impl.createDocumentType(name, publicId, systemId, internalSubset);\n\t\t\tthis.locator && position(this.locator, dt);\n\t\t\tappendElement(this, dt);\n\t\t\tthis.doc.doctype = dt;\n\t\t}\n\t},\n\treportError: function (level, message) {\n\t\tif (typeof this.onError === 'function') {\n\t\t\ttry {\n\t\t\t\tthis.onError(level, message, this);\n\t\t\t} catch (e) {\n\t\t\t\tthrow new ParseError('Reporting ' + level + ' \"' + message + '\" caused ' + e, this.locator);\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.error('[xmldom ' + level + ']\\t' + message, _locator(this.locator));\n\t\t}\n\t},\n\t/**\n\t * @see http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html\n\t */\n\twarning: function (message) {\n\t\tthis.reportError('warning', message);\n\t},\n\terror: function (message) {\n\t\tthis.reportError('error', message);\n\t},\n\t/**\n\t * This function reports a fatal error and throws a ParseError.\n\t *\n\t * @param {string} message\n\t * - The message to be used for reporting and throwing the error.\n\t * @returns {never}\n\t * This function always throws an error and never returns a value.\n\t * @throws {ParseError}\n\t * Always throws a ParseError with the provided message.\n\t */\n\tfatalError: function (message) {\n\t\tthis.reportError('fatalError', message);\n\t\tthrow new ParseError(message, this.locator);\n\t},\n};\n\nfunction _locator(l) {\n\tif (l) {\n\t\treturn '\\n@#[line:' + l.lineNumber + ',col:' + l.columnNumber + ']';\n\t}\n}\n\nfunction _toString(chars, start, length) {\n\tif (typeof chars == 'string') {\n\t\treturn chars.substr(start, length);\n\t} else {\n\t\t//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\n\t\tif (chars.length >= start + length || start) {\n\t\t\treturn new java.lang.String(chars, start, length) + '';\n\t\t}\n\t\treturn chars;\n\t}\n}\n\n/*\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html\n * used method of org.xml.sax.ext.LexicalHandler:\n * #comment(chars, start, length)\n * #startCDATA()\n * #endCDATA()\n * #startDTD(name, publicId, systemId)\n *\n *\n * IGNORED method of org.xml.sax.ext.LexicalHandler:\n * #endDTD()\n * #startEntity(name)\n * #endEntity(name)\n *\n *\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html\n * IGNORED method of org.xml.sax.ext.DeclHandler\n * \t#attributeDecl(eName, aName, type, mode, value)\n * #elementDecl(name, model)\n * #externalEntityDecl(name, publicId, systemId)\n * #internalEntityDecl(name, value)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html\n * IGNORED method of org.xml.sax.EntityResolver2\n * #resolveEntity(String name,String publicId,String baseURI,String systemId)\n * #resolveEntity(publicId, systemId)\n * #getExternalSubset(name, baseURI)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html\n * IGNORED method of org.xml.sax.DTDHandler\n * #notationDecl(name, publicId, systemId) {};\n * #unparsedEntityDecl(name, publicId, systemId, notationName) {};\n */\n'endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl'.replace(\n\t/\\w+/g,\n\tfunction (key) {\n\t\tDOMHandler.prototype[key] = function () {\n\t\t\treturn null;\n\t\t};\n\t}\n);\n\n/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */\nfunction appendElement(handler, node) {\n\tif (!handler.currentElement) {\n\t\thandler.doc.appendChild(node);\n\t} else {\n\t\thandler.currentElement.appendChild(node);\n\t}\n}\n\n/**\n * A method that prevents any further parsing when an `error`\n * with level `error` is reported during parsing.\n *\n * @see {@link DOMParserOptions.onError}\n * @see {@link onWarningStopParsing}\n */\nfunction onErrorStopParsing(level) {\n\tif (level === 'error') throw 'onErrorStopParsing';\n}\n\n/**\n * A method that prevents any further parsing when any `error` is reported during parsing.\n *\n * @see {@link DOMParserOptions.onError}\n * @see {@link onErrorStopParsing}\n */\nfunction onWarningStopParsing() {\n\tthrow 'onWarningStopParsing';\n}\n\nexports.__DOMHandler = DOMHandler;\nexports.DOMParser = DOMParser;\nexports.normalizeLineEndings = normalizeLineEndings;\nexports.onErrorStopParsing = onErrorStopParsing;\nexports.onWarningStopParsing = onWarningStopParsing;\n","'use strict';\n\nvar conventions = require('./conventions');\nvar find = conventions.find;\nvar hasDefaultHTMLNamespace = conventions.hasDefaultHTMLNamespace;\nvar hasOwn = conventions.hasOwn;\nvar isHTMLMimeType = conventions.isHTMLMimeType;\nvar isHTMLRawTextElement = conventions.isHTMLRawTextElement;\nvar isHTMLVoidElement = conventions.isHTMLVoidElement;\nvar MIME_TYPE = conventions.MIME_TYPE;\nvar NAMESPACE = conventions.NAMESPACE;\n\n/**\n * Private DOM Constructor symbol\n *\n * Internal symbol used for construction of all classes whose constructors should be private.\n * Currently used for checks in `Node`, `Document`, `Element`, `Attr`, `CharacterData`, `Text`, `Comment`,\n * `CDATASection`, `DocumentType`, `Notation`, `Entity`, `EntityReference`, `DocumentFragment`, `ProcessingInstruction`\n * so the constructor can't be used from outside the module.\n */\nvar PDC = Symbol();\n\nvar errors = require('./errors');\nvar DOMException = errors.DOMException;\nvar DOMExceptionName = errors.DOMExceptionName;\n\nvar g = require('./grammar');\n\n/**\n * Checks if the given symbol equals the Private DOM Constructor symbol (PDC)\n * and throws an Illegal constructor exception when the symbols don't match.\n * This ensures that the constructor remains private and can't be used outside this module.\n */\nfunction checkSymbol(symbol) {\n\tif (symbol !== PDC) {\n\t\tthrow new TypeError('Illegal constructor');\n\t}\n}\n\n/**\n * A prerequisite for `[].filter`, to drop elements that are empty.\n *\n * @param {string} input\n * The string to be checked.\n * @returns {boolean}\n * Returns `true` if the input string is not empty, `false` otherwise.\n */\nfunction notEmptyString(input) {\n\treturn input !== '';\n}\n/**\n * Splits a string on ASCII whitespace characters (U+0009 TAB, U+000A LF, U+000C FF, U+000D CR,\n * U+0020 SPACE).\n * It follows the definition from the infra specification from WHATWG.\n *\n * @param {string} input\n * The string to be split.\n * @returns {string[]}\n * An array of the split strings. The array can be empty if the input string is empty or only\n * contains whitespace characters.\n * @see {@link https://infra.spec.whatwg.org/#split-on-ascii-whitespace}\n * @see {@link https://infra.spec.whatwg.org/#ascii-whitespace}\n */\nfunction splitOnASCIIWhitespace(input) {\n\t// U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE\n\treturn input ? input.split(/[\\t\\n\\f\\r ]+/).filter(notEmptyString) : [];\n}\n\n/**\n * Adds element as a key to current if it is not already present.\n *\n * @param {Record} current\n * The current record object to which the element will be added as a key.\n * The object's keys are string types and values are either boolean or undefined.\n * @param {string} element\n * The string to be added as a key to the current record.\n * @returns {Record}\n * The updated record object after the addition of the new element.\n */\nfunction orderedSetReducer(current, element) {\n\tif (!hasOwn(current, element)) {\n\t\tcurrent[element] = true;\n\t}\n\treturn current;\n}\n\n/**\n * Converts a string into an ordered set by splitting the input on ASCII whitespace and\n * ensuring uniqueness of elements.\n * This follows the definition of an ordered set from the infra specification by WHATWG.\n *\n * @param {string} input\n * The input string to be transformed into an ordered set.\n * @returns {string[]}\n * An array of unique strings obtained from the input, preserving the original order.\n * The array can be empty if the input string is empty or only contains whitespace characters.\n * @see {@link https://infra.spec.whatwg.org/#ordered-set}\n */\nfunction toOrderedSet(input) {\n\tif (!input) return [];\n\tvar list = splitOnASCIIWhitespace(input);\n\treturn Object.keys(list.reduce(orderedSetReducer, {}));\n}\n\n/**\n * Uses `list.indexOf` to implement a function that behaves like `Array.prototype.includes`.\n * This function is used in environments where `Array.prototype.includes` may not be available.\n *\n * @param {any[]} list\n * The array in which to search for the element.\n * @returns {function(any): boolean}\n * A function that accepts an element and returns a boolean indicating whether the element is\n * included in the provided list.\n */\nfunction arrayIncludes(list) {\n\treturn function (element) {\n\t\treturn list && list.indexOf(element) !== -1;\n\t};\n}\n\n/**\n * Validates a qualified name based on the criteria provided in the DOM specification by\n * WHATWG.\n *\n * @param {string} qualifiedName\n * The qualified name to be validated.\n * @throws {DOMException}\n * With code {@link DOMException.INVALID_CHARACTER_ERR} if the qualified name contains an\n * invalid character.\n * @see {@link https://dom.spec.whatwg.org/#validate}\n */\nfunction validateQualifiedName(qualifiedName) {\n\tif (!g.QName_exact.test(qualifiedName)) {\n\t\tthrow new DOMException(DOMException.INVALID_CHARACTER_ERR, 'invalid character in qualified name \"' + qualifiedName + '\"');\n\t}\n}\n\n/**\n * Validates a qualified name and the namespace associated with it,\n * based on the criteria provided in the DOM specification by WHATWG.\n *\n * @param {string | null} namespace\n * The namespace to be validated. It can be a string or null.\n * @param {string} qualifiedName\n * The qualified name to be validated.\n * @returns {[namespace: string | null, prefix: string | null, localName: string]}\n * Returns a tuple with the namespace,\n * prefix and local name of the qualified name.\n * @throws {DOMException}\n * Throws a DOMException if the qualified name or the namespace is not valid.\n * @see {@link https://dom.spec.whatwg.org/#validate-and-extract}\n */\nfunction validateAndExtract(namespace, qualifiedName) {\n\tvalidateQualifiedName(qualifiedName);\n\tnamespace = namespace || null;\n\t/**\n\t * @type {string | null}\n\t */\n\tvar prefix = null;\n\tvar localName = qualifiedName;\n\tif (qualifiedName.indexOf(':') >= 0) {\n\t\tvar splitResult = qualifiedName.split(':');\n\t\tprefix = splitResult[0];\n\t\tlocalName = splitResult[1];\n\t}\n\tif (prefix !== null && namespace === null) {\n\t\tthrow new DOMException(DOMException.NAMESPACE_ERR, 'prefix is non-null and namespace is null');\n\t}\n\tif (prefix === 'xml' && namespace !== conventions.NAMESPACE.XML) {\n\t\tthrow new DOMException(DOMException.NAMESPACE_ERR, 'prefix is \"xml\" and namespace is not the XML namespace');\n\t}\n\tif ((prefix === 'xmlns' || qualifiedName === 'xmlns') && namespace !== conventions.NAMESPACE.XMLNS) {\n\t\tthrow new DOMException(\n\t\t\tDOMException.NAMESPACE_ERR,\n\t\t\t'either qualifiedName or prefix is \"xmlns\" and namespace is not the XMLNS namespace'\n\t\t);\n\t}\n\tif (namespace === conventions.NAMESPACE.XMLNS && prefix !== 'xmlns' && qualifiedName !== 'xmlns') {\n\t\tthrow new DOMException(\n\t\t\tDOMException.NAMESPACE_ERR,\n\t\t\t'namespace is the XMLNS namespace and neither qualifiedName nor prefix is \"xmlns\"'\n\t\t);\n\t}\n\treturn [namespace, prefix, localName];\n}\n\n/**\n * Copies properties from one object to another.\n * It only copies the object's own (not inherited) properties.\n *\n * @param {Object} src\n * The source object from which properties are copied.\n * @param {Object} dest\n * The destination object to which properties are copied.\n */\nfunction copy(src, dest) {\n\tfor (var p in src) {\n\t\tif (hasOwn(src, p)) {\n\t\t\tdest[p] = src[p];\n\t\t}\n\t}\n}\n\n/**\n * Extends a class with the properties and methods of a super class.\n * It uses a form of prototypal inheritance, and establishes the `constructor` property\n * correctly(?).\n *\n * It is not clear to the current maintainers if this implementation is making sense,\n * since it creates an intermediate prototype function,\n * which all properties of `Super` are copied onto using `_copy`.\n *\n * @param {Object} Class\n * The class that is to be extended.\n * @param {Object} Super\n * The super class from which properties and methods are inherited.\n * @private\n */\nfunction _extends(Class, Super) {\n\tvar pt = Class.prototype;\n\tif (!(pt instanceof Super)) {\n\t\tfunction t() {}\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt, t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif (pt.constructor != Class) {\n\t\tif (typeof Class != 'function') {\n\t\t\tconsole.error('unknown Class:' + Class);\n\t\t}\n\t\tpt.constructor = Class;\n\t}\n}\n\nvar NodeType = {};\nvar ELEMENT_NODE = (NodeType.ELEMENT_NODE = 1);\nvar ATTRIBUTE_NODE = (NodeType.ATTRIBUTE_NODE = 2);\nvar TEXT_NODE = (NodeType.TEXT_NODE = 3);\nvar CDATA_SECTION_NODE = (NodeType.CDATA_SECTION_NODE = 4);\nvar ENTITY_REFERENCE_NODE = (NodeType.ENTITY_REFERENCE_NODE = 5);\nvar ENTITY_NODE = (NodeType.ENTITY_NODE = 6);\nvar PROCESSING_INSTRUCTION_NODE = (NodeType.PROCESSING_INSTRUCTION_NODE = 7);\nvar COMMENT_NODE = (NodeType.COMMENT_NODE = 8);\nvar DOCUMENT_NODE = (NodeType.DOCUMENT_NODE = 9);\nvar DOCUMENT_TYPE_NODE = (NodeType.DOCUMENT_TYPE_NODE = 10);\nvar DOCUMENT_FRAGMENT_NODE = (NodeType.DOCUMENT_FRAGMENT_NODE = 11);\nvar NOTATION_NODE = (NodeType.NOTATION_NODE = 12);\n\nvar DocumentPosition = conventions.freeze({\n\tDOCUMENT_POSITION_DISCONNECTED: 1,\n\tDOCUMENT_POSITION_PRECEDING: 2,\n\tDOCUMENT_POSITION_FOLLOWING: 4,\n\tDOCUMENT_POSITION_CONTAINS: 8,\n\tDOCUMENT_POSITION_CONTAINED_BY: 16,\n\tDOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 32,\n});\n\n//helper functions for compareDocumentPosition\n/**\n * Constructs a parent chain for a node.\n *\n * @param {Node} node\n * The start node from which the parent chain will be constructed.\n * @returns {Node[]}\n * The array of nodes representing the parent chain from the root to the specified node.\n */\nfunction parentChain(node) {\n\tvar chain = [];\n\twhile (node.parentNode || node.ownerElement) {\n\t\tnode = node.parentNode || node.ownerElement;\n\t\tchain.unshift(node);\n\t}\n\treturn chain;\n}\n\n/**\n * Finds the common ancestor in two parent chains.\n *\n * @param {Node[]} a\n * The first parent chain.\n * @param {Node[]} b\n * The second parent chain.\n * @returns {Node}\n * The common ancestor node if it exists. If there is no common ancestor, the function will\n * return `null`.\n */\nfunction commonAncestor(a, b) {\n\tif (b.length < a.length) return commonAncestor(b, a);\n\tvar c = null;\n\tfor (var n in a) {\n\t\tif (a[n] !== b[n]) return c;\n\t\tc = a[n];\n\t}\n\treturn c;\n}\n\n/**\n * Assigns a unique identifier to a document to ensure consistency while comparing unrelated\n * nodes.\n *\n * @param {Document} doc\n * The document to which a unique identifier is to be assigned.\n * @returns {string}\n * The unique identifier of the document. If the document already had a unique identifier, the\n * function will return the existing one.\n */\nfunction docGUID(doc) {\n\tif (!doc.guid) doc.guid = Math.random();\n\treturn doc.guid;\n}\n//-- end of helper functions\n\n/**\n * The NodeList interface provides the abstraction of an ordered collection of nodes,\n * without defining or constraining how this collection is implemented.\n * NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n * You can also access the items of the NodeList with a `for...of` loop.\n *\n * @class NodeList\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * @constructs NodeList\n */\nfunction NodeList() {}\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1\n\t * inclusive.\n\t *\n\t * @type {number}\n\t */\n\tlength: 0,\n\t/**\n\t * Returns the item at `index`. If index is greater than or equal to the number of nodes in\n\t * the list, this returns null.\n\t *\n\t * @param index\n\t * Unsigned long Index into the collection.\n\t * @returns {Node | null}\n\t * The node at position `index` in the NodeList,\n\t * or null if that is not a valid index.\n\t */\n\titem: function (index) {\n\t\treturn index >= 0 && index < this.length ? this[index] : null;\n\t},\n\t/**\n\t * Returns a string representation of the NodeList.\n\t *\n\t * @param {unknown} nodeFilter\n\t * __A filter function? Not implemented according to the spec?__.\n\t * @returns {string}\n\t * A string representation of the NodeList.\n\t */\n\ttoString: function (nodeFilter) {\n\t\tfor (var buf = [], i = 0; i < this.length; i++) {\n\t\t\tserializeToString(this[i], buf, nodeFilter);\n\t\t}\n\t\treturn buf.join('');\n\t},\n\t/**\n\t * Filters the NodeList based on a predicate.\n\t *\n\t * @param {function(Node): boolean} predicate\n\t * - A predicate function to filter the NodeList.\n\t * @returns {Node[]}\n\t * An array of nodes that satisfy the predicate.\n\t * @private\n\t */\n\tfilter: function (predicate) {\n\t\treturn Array.prototype.filter.call(this, predicate);\n\t},\n\t/**\n\t * Returns the first index at which a given node can be found in the NodeList, or -1 if it is\n\t * not present.\n\t *\n\t * @param {Node} item\n\t * - The Node item to locate in the NodeList.\n\t * @returns {number}\n\t * The first index of the node in the NodeList; -1 if not found.\n\t * @private\n\t */\n\tindexOf: function (item) {\n\t\treturn Array.prototype.indexOf.call(this, item);\n\t},\n};\nNodeList.prototype[Symbol.iterator] = function () {\n\tvar me = this;\n\tvar index = 0;\n\n\treturn {\n\t\tnext: function () {\n\t\t\tif (index < me.length) {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: me[index++],\n\t\t\t\t\tdone: false,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tdone: true,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\treturn: function () {\n\t\t\treturn {\n\t\t\t\tdone: true,\n\t\t\t};\n\t\t},\n\t};\n};\n\n/**\n * Represents a live collection of nodes that is automatically updated when its associated\n * document changes.\n *\n * @class LiveNodeList\n * @param {Node} node\n * The associated node.\n * @param {function} refresh\n * The function to refresh the live node list.\n * @augments NodeList\n * @constructs LiveNodeList\n */\nfunction LiveNodeList(node, refresh) {\n\tthis._node = node;\n\tthis._refresh = refresh;\n\t_updateLiveList(this);\n}\n/**\n * Updates the live node list.\n *\n * @param {LiveNodeList} list\n * The live node list to update.\n * @private\n */\nfunction _updateLiveList(list) {\n\tvar inc = list._node._inc || list._node.ownerDocument._inc;\n\tif (list._inc !== inc) {\n\t\tvar ls = list._refresh(list._node);\n\t\t__set__(list, 'length', ls.length);\n\t\tif (!list.$$length || ls.length < list.$$length) {\n\t\t\tfor (var i = ls.length; i in list; i++) {\n\t\t\t\tif (hasOwn(list, i)) {\n\t\t\t\t\tdelete list[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcopy(ls, list);\n\t\tlist._inc = inc;\n\t}\n}\n/**\n * Returns the node at position `index` in the LiveNodeList, or null if that is not a valid\n * index.\n *\n * @param {number} i\n * Index into the collection.\n * @returns {Node | null}\n * The node at position `index` in the LiveNodeList, or null if that is not a valid index.\n */\nLiveNodeList.prototype.item = function (i) {\n\t_updateLiveList(this);\n\treturn this[i] || null;\n};\n\n_extends(LiveNodeList, NodeList);\n\n/**\n * Objects implementing the NamedNodeMap interface are used to represent collections of nodes\n * that can be accessed by name.\n * Note that NamedNodeMap does not inherit from NodeList;\n * NamedNodeMaps are not maintained in any particular order.\n * Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal\n * index,\n * but this is simply to allow convenient enumeration of the contents of a NamedNodeMap,\n * and does not imply that the DOM specifies an order to these Nodes.\n * NamedNodeMap objects in the DOM are live.\n * used for attributes or DocumentType entities\n *\n * This implementation only supports property indices, but does not support named properties,\n * as specified in the living standard.\n *\n * @class NamedNodeMap\n * @see https://dom.spec.whatwg.org/#interface-namednodemap\n * @see https://webidl.spec.whatwg.org/#dfn-supported-property-names\n * @constructs NamedNodeMap\n */\nfunction NamedNodeMap() {}\n/**\n * Returns the index of a node within the list.\n *\n * @param {Array} list\n * The list of nodes.\n * @param {Node} node\n * The node to find.\n * @returns {number}\n * The index of the node within the list, or -1 if not found.\n * @private\n */\nfunction _findNodeIndex(list, node) {\n\tvar i = 0;\n\twhile (i < list.length) {\n\t\tif (list[i] === node) {\n\t\t\treturn i;\n\t\t}\n\t\ti++;\n\t}\n}\n/**\n * Adds a new attribute to the list and updates the owner element of the attribute.\n *\n * @param {Element} el\n * The element which will become the owner of the new attribute.\n * @param {NamedNodeMap} list\n * The list to which the new attribute will be added.\n * @param {Attr} newAttr\n * The new attribute to be added.\n * @param {Attr} oldAttr\n * The old attribute to be replaced, or null if no attribute is to be replaced.\n * @returns {void}\n * @private\n */\nfunction _addNamedNode(el, list, newAttr, oldAttr) {\n\tif (oldAttr) {\n\t\tlist[_findNodeIndex(list, oldAttr)] = newAttr;\n\t} else {\n\t\tlist[list.length] = newAttr;\n\t\tlist.length++;\n\t}\n\tif (el) {\n\t\tnewAttr.ownerElement = el;\n\t\tvar doc = el.ownerDocument;\n\t\tif (doc) {\n\t\t\toldAttr && _onRemoveAttribute(doc, el, oldAttr);\n\t\t\t_onAddAttribute(doc, el, newAttr);\n\t\t}\n\t}\n}\n/**\n * Removes an attribute from the list and updates the owner element of the attribute.\n *\n * @param {Element} el\n * The element which is the current owner of the attribute.\n * @param {NamedNodeMap} list\n * The list from which the attribute will be removed.\n * @param {Attr} attr\n * The attribute to be removed.\n * @returns {void}\n * @private\n */\nfunction _removeNamedNode(el, list, attr) {\n\t//console.log('remove attr:'+attr)\n\tvar i = _findNodeIndex(list, attr);\n\tif (i >= 0) {\n\t\tvar lastIndex = list.length - 1;\n\t\twhile (i <= lastIndex) {\n\t\t\tlist[i] = list[++i];\n\t\t}\n\t\tlist.length = lastIndex;\n\t\tif (el) {\n\t\t\tvar doc = el.ownerDocument;\n\t\t\tif (doc) {\n\t\t\t\t_onRemoveAttribute(doc, el, attr);\n\t\t\t}\n\t\t\tattr.ownerElement = null;\n\t\t}\n\t}\n}\nNamedNodeMap.prototype = {\n\tlength: 0,\n\titem: NodeList.prototype.item,\n\n\t/**\n\t * Get an attribute by name. Note: Name is in lower case in case of HTML namespace and\n\t * document.\n\t *\n\t * @param {string} localName\n\t * The local name of the attribute.\n\t * @returns {Attr | null}\n\t * The attribute with the given local name, or null if no such attribute exists.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-get-by-name\n\t */\n\tgetNamedItem: function (localName) {\n\t\tif (this._ownerElement && this._ownerElement._isInHTMLDocumentAndNamespace()) {\n\t\t\tlocalName = localName.toLowerCase();\n\t\t}\n\t\tvar i = 0;\n\t\twhile (i < this.length) {\n\t\t\tvar attr = this[i];\n\t\t\tif (attr.nodeName === localName) {\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\treturn null;\n\t},\n\n\t/**\n\t * Set an attribute.\n\t *\n\t * @param {Attr} attr\n\t * The attribute to set.\n\t * @returns {Attr | null}\n\t * The old attribute with the same local name and namespace URI as the new one, or null if no\n\t * such attribute exists.\n\t * @throws {DOMException}\n\t * With code:\n\t * - {@link INUSE_ATTRIBUTE_ERR} - If the attribute is already an attribute of another\n\t * element.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-set\n\t */\n\tsetNamedItem: function (attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif (el && el !== this._ownerElement) {\n\t\t\tthrow new DOMException(DOMException.INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItemNS(attr.namespaceURI, attr.localName);\n\t\tif (oldAttr === attr) {\n\t\t\treturn attr;\n\t\t}\n\t\t_addNamedNode(this._ownerElement, this, attr, oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/**\n\t * Set an attribute, replacing an existing attribute with the same local name and namespace\n\t * URI if one exists.\n\t *\n\t * @param {Attr} attr\n\t * The attribute to set.\n\t * @returns {Attr | null}\n\t * The old attribute with the same local name and namespace URI as the new one, or null if no\n\t * such attribute exists.\n\t * @throws {DOMException}\n\t * Throws a DOMException with the name \"InUseAttributeError\" if the attribute is already an\n\t * attribute of another element.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-set\n\t */\n\tsetNamedItemNS: function (attr) {\n\t\treturn this.setNamedItem(attr);\n\t},\n\n\t/**\n\t * Removes an attribute specified by the local name.\n\t *\n\t * @param {string} localName\n\t * The local name of the attribute to be removed.\n\t * @returns {Attr}\n\t * The attribute node that was removed.\n\t * @throws {DOMException}\n\t * With code:\n\t * - {@link DOMException.NOT_FOUND_ERR} if no attribute with the given name is found.\n\t * @see https://dom.spec.whatwg.org/#dom-namednodemap-removenameditem\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-remove-by-name\n\t */\n\tremoveNamedItem: function (localName) {\n\t\tvar attr = this.getNamedItem(localName);\n\t\tif (!attr) {\n\t\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, localName);\n\t\t}\n\t\t_removeNamedNode(this._ownerElement, this, attr);\n\t\treturn attr;\n\t},\n\n\t/**\n\t * Removes an attribute specified by the namespace and local name.\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI of the attribute to be removed.\n\t * @param {string} localName\n\t * The local name of the attribute to be removed.\n\t * @returns {Attr}\n\t * The attribute node that was removed.\n\t * @throws {DOMException}\n\t * With code:\n\t * - {@link DOMException.NOT_FOUND_ERR} if no attribute with the given namespace URI and local\n\t * name is found.\n\t * @see https://dom.spec.whatwg.org/#dom-namednodemap-removenameditemns\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-remove-by-namespace\n\t */\n\tremoveNamedItemNS: function (namespaceURI, localName) {\n\t\tvar attr = this.getNamedItemNS(namespaceURI, localName);\n\t\tif (!attr) {\n\t\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, namespaceURI ? namespaceURI + ' : ' + localName : localName);\n\t\t}\n\t\t_removeNamedNode(this._ownerElement, this, attr);\n\t\treturn attr;\n\t},\n\n\t/**\n\t * Get an attribute by namespace and local name.\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI of the attribute.\n\t * @param {string} localName\n\t * The local name of the attribute.\n\t * @returns {Attr | null}\n\t * The attribute with the given namespace URI and local name, or null if no such attribute\n\t * exists.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-get-by-namespace\n\t */\n\tgetNamedItemNS: function (namespaceURI, localName) {\n\t\tif (!namespaceURI) {\n\t\t\tnamespaceURI = null;\n\t\t}\n\t\tvar i = 0;\n\t\twhile (i < this.length) {\n\t\t\tvar node = this[i];\n\t\t\tif (node.localName === localName && node.namespaceURI === namespaceURI) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\treturn null;\n\t},\n};\nNamedNodeMap.prototype[Symbol.iterator] = function () {\n\tvar me = this;\n\tvar index = 0;\n\n\treturn {\n\t\tnext: function () {\n\t\t\tif (index < me.length) {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: me[index++],\n\t\t\t\t\tdone: false,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tdone: true,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\treturn: function () {\n\t\t\treturn {\n\t\t\t\tdone: true,\n\t\t\t};\n\t\t},\n\t};\n};\n\n/**\n * The DOMImplementation interface provides a number of methods for performing operations that\n * are independent of any particular instance of the document object model.\n *\n * The DOMImplementation interface represents an object providing methods which are not\n * dependent on any particular document.\n * Such an object is returned by the `Document.implementation` property.\n *\n * **The individual methods describe the differences compared to the specs**.\n *\n * @class DOMImplementation\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN\n * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core\n * (Initial)\n * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core\n * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard\n * @constructs DOMImplementation\n */\nfunction DOMImplementation() {}\n\nDOMImplementation.prototype = {\n\t/**\n\t * Test if the DOM implementation implements a specific feature and version, as specified in\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMFeatures DOM Features}.\n\t *\n\t * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given\n\t * feature is supported. The different implementations fairly diverged in what kind of\n\t * features were reported. The latest version of the spec settled to force this method to\n\t * always return true, where the functionality was accurate and in use.\n\t *\n\t * @deprecated\n\t * It is deprecated and modern browsers return true in all cases.\n\t * @function DOMImplementation#hasFeature\n\t * @param {string} feature\n\t * The name of the feature to test.\n\t * @param {string} [version]\n\t * This is the version number of the feature to test.\n\t * @returns {boolean}\n\t * Always returns true.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN\n\t * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-5CED94D7 DOM Level 3 Core\n\t */\n\thasFeature: function (feature, version) {\n\t\treturn true;\n\t},\n\t/**\n\t * Creates a DOM Document object of the specified type with its document element. Note that\n\t * based on the {@link DocumentType}\n\t * given to create the document, the implementation may instantiate specialized\n\t * {@link Document} objects that support additional features than the \"Core\", such as \"HTML\"\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#DOM2HTML DOM Level 2 HTML}.\n\t * On the other hand, setting the {@link DocumentType} after the document was created makes\n\t * this very unlikely to happen. Alternatively, specialized {@link Document} creation methods,\n\t * such as createHTMLDocument\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#DOM2HTML DOM Level 2 HTML},\n\t * can be used to obtain specific types of {@link Document} objects.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - There is no interface/class `XMLDocument`, it returns a `Document`\n\t * instance (with it's `type` set to `'xml'`).\n\t * - `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t *\n\t * @function DOMImplementation.createDocument\n\t * @param {string | null} namespaceURI\n\t * The\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-namespaceURI namespace URI}\n\t * of the document element to create or null.\n\t * @param {string | null} qualifiedName\n\t * The\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-qualifiedname qualified name}\n\t * of the document element to be created or null.\n\t * @param {DocumentType | null} [doctype=null]\n\t * The type of document to be created or null. When doctype is not null, its\n\t * {@link Node#ownerDocument} attribute is set to the document being created. Default is\n\t * `null`\n\t * @returns {Document}\n\t * A new {@link Document} object with its document element. If the NamespaceURI,\n\t * qualifiedName, and doctype are null, the returned {@link Document} is empty with no\n\t * document element.\n\t * @throws {DOMException}\n\t * With code:\n\t *\n\t * - `INVALID_CHARACTER_ERR`: Raised if the specified qualified name is not an XML name\n\t * according to {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#XML XML 1.0}.\n\t * - `NAMESPACE_ERR`: Raised if the qualifiedName is malformed, if the qualifiedName has a\n\t * prefix and the namespaceURI is null, or if the qualifiedName is null and the namespaceURI\n\t * is different from null, or if the qualifiedName has a prefix that is \"xml\" and the\n\t * namespaceURI is different from \"{@link http://www.w3.org/XML/1998/namespace}\"\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#Namespaces XML Namespaces},\n\t * or if the DOM implementation does not support the \"XML\" feature but a non-null namespace\n\t * URI was provided, since namespaces were defined by XML.\n\t * - `WRONG_DOCUMENT_ERR`: Raised if doctype has already been used with a different document\n\t * or was created from a different implementation.\n\t * - `NOT_SUPPORTED_ERR`: May be raised if the implementation does not support the feature\n\t * \"XML\" and the language exposed through the Document does not support XML Namespaces (such\n\t * as {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#HTML40 HTML 4.01}).\n\t * @since DOM Level 2.\n\t * @see {@link #createHTMLDocument}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument DOM Living Standard\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocument DOM\n\t * Level 3 Core\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM\n\t * Level 2 Core (initial)\n\t */\n\tcreateDocument: function (namespaceURI, qualifiedName, doctype) {\n\t\tvar contentType = MIME_TYPE.XML_APPLICATION;\n\t\tif (namespaceURI === NAMESPACE.HTML) {\n\t\t\tcontentType = MIME_TYPE.XML_XHTML_APPLICATION;\n\t\t} else if (namespaceURI === NAMESPACE.SVG) {\n\t\t\tcontentType = MIME_TYPE.XML_SVG_IMAGE;\n\t\t}\n\t\tvar doc = new Document(PDC, { contentType: contentType });\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype || null;\n\t\tif (doctype) {\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif (qualifiedName) {\n\t\t\tvar root = doc.createElementNS(namespaceURI, qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t/**\n\t * Creates an empty DocumentType node. Entity declarations and notations are not made\n\t * available. Entity reference expansions and default attribute additions do not occur.\n\t *\n\t * **This behavior is slightly different from the one in the specs**:\n\t * - `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t * - `publicId` and `systemId` contain the raw data including any possible quotes,\n\t * so they can always be serialized back to the original value\n\t * - `internalSubset` contains the raw string between `[` and `]` if present,\n\t * but is not parsed or validated in any form.\n\t *\n\t * @function DOMImplementation#createDocumentType\n\t * @param {string} qualifiedName\n\t * The {@link https://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-qualifiedname qualified\n\t * name} of the document type to be created.\n\t * @param {string} [publicId]\n\t * The external subset public identifier.\n\t * @param {string} [systemId]\n\t * The external subset system identifier.\n\t * @param {string} [internalSubset]\n\t * the internal subset or an empty string if it is not present\n\t * @returns {DocumentType}\n\t * A new {@link DocumentType} node with {@link Node#ownerDocument} set to null.\n\t * @throws {DOMException}\n\t * With code:\n\t *\n\t * - `INVALID_CHARACTER_ERR`: Raised if the specified qualified name is not an XML name\n\t * according to {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#XML XML 1.0}.\n\t * - `NAMESPACE_ERR`: Raised if the qualifiedName is malformed.\n\t * - `NOT_SUPPORTED_ERR`: May be raised if the implementation does not support the feature\n\t * \"XML\" and the language exposed through the Document does not support XML Namespaces (such\n\t * as {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#HTML40 HTML 4.01}).\n\t * @since DOM Level 2.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType\n\t * MDN\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living\n\t * Standard\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-3-Core-DOM-createDocType DOM\n\t * Level 3 Core\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM\n\t * Level 2 Core\n\t * @see https://github.com/xmldom/xmldom/blob/master/CHANGELOG.md#050\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/#core-ID-Core-DocType-internalSubset\n\t * @prettierignore\n\t */\n\tcreateDocumentType: function (qualifiedName, publicId, systemId, internalSubset) {\n\t\tvalidateQualifiedName(qualifiedName);\n\t\tvar node = new DocumentType(PDC);\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId || '';\n\t\tnode.systemId = systemId || '';\n\t\tnode.internalSubset = internalSubset || '';\n\t\tnode.childNodes = new NodeList();\n\n\t\treturn node;\n\t},\n\t/**\n\t * Returns an HTML document, that might already have a basic DOM structure.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - If the first argument is `false` no initial nodes are added (steps 3-7 in the specs are\n\t * omitted)\n\t * - `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t *\n\t * @param {string | false} [title]\n\t * A string containing the title to give the new HTML document.\n\t * @returns {Document}\n\t * The HTML document.\n\t * @since WHATWG Living Standard.\n\t * @see {@link #createDocument}\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument\n\t * @see https://dom.spec.whatwg.org/#html-document\n\t */\n\tcreateHTMLDocument: function (title) {\n\t\tvar doc = new Document(PDC, { contentType: MIME_TYPE.HTML });\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tif (title !== false) {\n\t\t\tdoc.doctype = this.createDocumentType('html');\n\t\t\tdoc.doctype.ownerDocument = doc;\n\t\t\tdoc.appendChild(doc.doctype);\n\t\t\tvar htmlNode = doc.createElement('html');\n\t\t\tdoc.appendChild(htmlNode);\n\t\t\tvar headNode = doc.createElement('head');\n\t\t\thtmlNode.appendChild(headNode);\n\t\t\tif (typeof title === 'string') {\n\t\t\t\tvar titleNode = doc.createElement('title');\n\t\t\t\ttitleNode.appendChild(doc.createTextNode(title));\n\t\t\t\theadNode.appendChild(titleNode);\n\t\t\t}\n\t\t\thtmlNode.appendChild(doc.createElement('body'));\n\t\t}\n\t\treturn doc;\n\t},\n};\n\n/**\n * The DOM Node interface is an abstract base class upon which many other DOM API objects are\n * based, thus letting those object types to be used similarly and often interchangeably. As an\n * abstract class, there is no such thing as a plain Node object. All objects that implement\n * Node functionality are based on one of its subclasses. Most notable are Document, Element,\n * and DocumentFragment.\n *\n * In addition, every kind of DOM node is represented by an interface based on Node. These\n * include Attr, CharacterData (which Text, Comment, CDATASection and ProcessingInstruction are\n * all based on), and DocumentType.\n *\n * In some cases, a particular feature of the base Node interface may not apply to one of its\n * child interfaces; in that case, the inheriting node may return null or throw an exception,\n * depending on circumstances. For example, attempting to add children to a node type that\n * cannot have children will throw an exception.\n *\n * **This behavior is slightly different from the in the specs**:\n * - unimplemented interfaces: `EventTarget`\n *\n * @class\n * @abstract\n * @param {Symbol} symbol\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n * @see https://dom.spec.whatwg.org/#node\n * @prettierignore\n */\nfunction Node(symbol) {\n\tcheckSymbol(symbol);\n}\n\nNode.prototype = {\n\t/**\n\t * The first child of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tfirstChild: null,\n\t/**\n\t * The last child of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tlastChild: null,\n\t/**\n\t * The previous sibling of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tpreviousSibling: null,\n\t/**\n\t * The next sibling of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tnextSibling: null,\n\t/**\n\t * The parent node of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tparentNode: null,\n\t/**\n\t * The parent element of this node.\n\t *\n\t * @type {Element | null}\n\t */\n\tget parentElement() {\n\t\treturn this.parentNode && this.parentNode.nodeType === this.ELEMENT_NODE ? this.parentNode : null;\n\t},\n\t/**\n\t * The child nodes of this node.\n\t *\n\t * @type {NodeList}\n\t */\n\tchildNodes: null,\n\t/**\n\t * The document object associated with this node.\n\t *\n\t * @type {Document | null}\n\t */\n\townerDocument: null,\n\t/**\n\t * The value of this node.\n\t *\n\t * @type {string | null}\n\t */\n\tnodeValue: null,\n\t/**\n\t * The namespace URI of this node.\n\t *\n\t * @type {string | null}\n\t */\n\tnamespaceURI: null,\n\t/**\n\t * The prefix of the namespace for this node.\n\t *\n\t * @type {string | null}\n\t */\n\tprefix: null,\n\t/**\n\t * The local part of the qualified name of this node.\n\t *\n\t * @type {string | null}\n\t */\n\tlocalName: null,\n\t/**\n\t * The baseURI is currently always `about:blank`,\n\t * since that's what happens when you create a document from scratch.\n\t *\n\t * @type {'about:blank'}\n\t */\n\tbaseURI: 'about:blank',\n\t/**\n\t * Is true if this node is part of a document.\n\t *\n\t * @type {boolean}\n\t */\n\tget isConnected() {\n\t\tvar rootNode = this.getRootNode();\n\t\treturn rootNode && rootNode.nodeType === rootNode.DOCUMENT_NODE;\n\t},\n\t/**\n\t * Checks whether `other` is an inclusive descendant of this node.\n\t *\n\t * @param {Node | null | undefined} other\n\t * The node to check.\n\t * @returns {boolean}\n\t * True if `other` is an inclusive descendant of this node; false otherwise.\n\t * @see https://dom.spec.whatwg.org/#dom-node-contains\n\t */\n\tcontains: function (other) {\n\t\tif (!other) return false;\n\t\tvar parent = other;\n\t\tdo {\n\t\t\tif (this === parent) return true;\n\t\t\tparent = other.parentNode;\n\t\t} while (parent);\n\t\treturn false;\n\t},\n\t/**\n\t * @typedef GetRootNodeOptions\n\t * @property {boolean} [composed=false]\n\t */\n\t/**\n\t * Searches for the root node of this node.\n\t *\n\t * **This behavior is slightly different from the in the specs**:\n\t * - ignores `options.composed`, since `ShadowRoot`s are unsupported, always returns root.\n\t *\n\t * @param {GetRootNodeOptions} [options]\n\t * @returns {Node}\n\t * Root node.\n\t * @see https://dom.spec.whatwg.org/#dom-node-getrootnode\n\t * @see https://dom.spec.whatwg.org/#concept-shadow-including-root\n\t */\n\tgetRootNode: function (options) {\n\t\tvar parent = this;\n\t\tdo {\n\t\t\tif (!parent.parentNode) {\n\t\t\t\treturn parent;\n\t\t\t}\n\t\t\tparent = parent.parentNode;\n\t\t} while (parent);\n\t},\n\t/**\n\t * Checks whether the given node is equal to this node.\n\t *\n\t * @param {Node} [otherNode]\n\t * @see https://dom.spec.whatwg.org/#concept-node-equals\n\t */\n\tisEqualNode: function (otherNode) {\n\t\tif (!otherNode) return false;\n\n\t\tif (this.nodeType !== otherNode.nodeType) return false;\n\n\t\tswitch (this.nodeType) {\n\t\t\tcase this.DOCUMENT_TYPE_NODE:\n\t\t\t\tif (this.name !== otherNode.name) return false;\n\t\t\t\tif (this.publicId !== otherNode.publicId) return false;\n\t\t\t\tif (this.systemId !== otherNode.systemId) return false;\n\t\t\t\tbreak;\n\t\t\tcase this.ELEMENT_NODE:\n\t\t\t\tif (this.namespaceURI !== otherNode.namespaceURI) return false;\n\t\t\t\tif (this.prefix !== otherNode.prefix) return false;\n\t\t\t\tif (this.localName !== otherNode.localName) return false;\n\t\t\t\tif (this.attributes.length !== otherNode.attributes.length) return false;\n\t\t\t\tfor (var i = 0; i < this.attributes.length; i++) {\n\t\t\t\t\tvar attr = this.attributes.item(i);\n\t\t\t\t\tif (!attr.isEqualNode(otherNode.getAttributeNodeNS(attr.namespaceURI, attr.localName))) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase this.ATTRIBUTE_NODE:\n\t\t\t\tif (this.namespaceURI !== otherNode.namespaceURI) return false;\n\t\t\t\tif (this.localName !== otherNode.localName) return false;\n\t\t\t\tif (this.value !== otherNode.value) return false;\n\n\t\t\t\tbreak;\n\t\t\tcase this.PROCESSING_INSTRUCTION_NODE:\n\t\t\t\tif (this.target !== otherNode.target || this.data !== otherNode.data) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase this.TEXT_NODE:\n\t\t\tcase this.COMMENT_NODE:\n\t\t\t\tif (this.data !== otherNode.data) return false;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (this.childNodes.length !== otherNode.childNodes.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (var i = 0; i < this.childNodes.length; i++) {\n\t\t\tif (!this.childNodes[i].isEqualNode(otherNode.childNodes[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t},\n\t/**\n\t * Checks whether or not the given node is this node.\n\t *\n\t * @param {Node} [otherNode]\n\t */\n\tisSameNode: function (otherNode) {\n\t\treturn this === otherNode;\n\t},\n\t/**\n\t * Inserts a node before a reference node as a child of this node.\n\t *\n\t * @param {Node} newChild\n\t * The new child node to be inserted.\n\t * @param {Node | null} refChild\n\t * The reference node before which newChild will be inserted.\n\t * @returns {Node}\n\t * The new child node successfully inserted.\n\t * @throws {DOMException}\n\t * Throws a DOMException if inserting the node would result in a DOM tree that is not\n\t * well-formed, or if `child` is provided but is not a child of `parent`.\n\t * See {@link _insertBefore} for more details.\n\t * @since Modified in DOM L2\n\t */\n\tinsertBefore: function (newChild, refChild) {\n\t\treturn _insertBefore(this, newChild, refChild);\n\t},\n\t/**\n\t * Replaces an old child node with a new child node within this node.\n\t *\n\t * @param {Node} newChild\n\t * The new node that is to replace the old node.\n\t * If it already exists in the DOM, it is removed from its original position.\n\t * @param {Node} oldChild\n\t * The existing child node to be replaced.\n\t * @returns {Node}\n\t * Returns the replaced child node.\n\t * @throws {DOMException}\n\t * Throws a DOMException if replacing the node would result in a DOM tree that is not\n\t * well-formed, or if `oldChild` is not a child of `this`.\n\t * This can also occur if the pre-replacement validity assertion fails.\n\t * See {@link _insertBefore}, {@link Node.removeChild}, and\n\t * {@link assertPreReplacementValidityInDocument} for more details.\n\t * @see https://dom.spec.whatwg.org/#concept-node-replace\n\t */\n\treplaceChild: function (newChild, oldChild) {\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\t/**\n\t * Removes an existing child node from this node.\n\t *\n\t * @param {Node} oldChild\n\t * The child node to be removed.\n\t * @returns {Node}\n\t * Returns the removed child node.\n\t * @throws {DOMException}\n\t * Throws a DOMException if `oldChild` is not a child of `this`.\n\t * See {@link _removeChild} for more details.\n\t */\n\tremoveChild: function (oldChild) {\n\t\treturn _removeChild(this, oldChild);\n\t},\n\t/**\n\t * Appends a child node to this node.\n\t *\n\t * @param {Node} newChild\n\t * The child node to be appended to this node.\n\t * If it already exists in the DOM, it is removed from its original position.\n\t * @returns {Node}\n\t * Returns the appended child node.\n\t * @throws {DOMException}\n\t * Throws a DOMException if appending the node would result in a DOM tree that is not\n\t * well-formed, or if `newChild` is not a valid Node.\n\t * See {@link insertBefore} for more details.\n\t */\n\tappendChild: function (newChild) {\n\t\treturn this.insertBefore(newChild, null);\n\t},\n\t/**\n\t * Determines whether this node has any child nodes.\n\t *\n\t * @returns {boolean}\n\t * Returns true if this node has any child nodes, and false otherwise.\n\t */\n\thasChildNodes: function () {\n\t\treturn this.firstChild != null;\n\t},\n\t/**\n\t * Creates a copy of the calling node.\n\t *\n\t * @param {boolean} deep\n\t * If true, the contents of the node are recursively copied.\n\t * If false, only the node itself (and its attributes, if it is an element) are copied.\n\t * @returns {Node}\n\t * Returns the newly created copy of the node.\n\t * @throws {DOMException}\n\t * May throw a DOMException if operations within {@link Element#setAttributeNode} or\n\t * {@link Node#appendChild} (which are potentially invoked in this method) do not meet their\n\t * specific constraints.\n\t * @see {@link cloneNode}\n\t */\n\tcloneNode: function (deep) {\n\t\treturn cloneNode(this.ownerDocument || this, this, deep);\n\t},\n\t/**\n\t * Puts the specified node and all of its subtree into a \"normalized\" form. In a normalized\n\t * subtree, no text nodes in the subtree are empty and there are no adjacent text nodes.\n\t *\n\t * Specifically, this method merges any adjacent text nodes (i.e., nodes for which `nodeType`\n\t * is `TEXT_NODE`) into a single node with the combined data. It also removes any empty text\n\t * nodes.\n\t *\n\t * This method operates recursively, so it also normalizes any and all descendent nodes within\n\t * the subtree.\n\t *\n\t * @throws {DOMException}\n\t * May throw a DOMException if operations within removeChild or appendData (which are\n\t * potentially invoked in this method) do not meet their specific constraints.\n\t * @since Modified in DOM Level 2\n\t * @see {@link Node.removeChild}\n\t * @see {@link CharacterData.appendData}\n\t */\n\tnormalize: function () {\n\t\tvar child = this.firstChild;\n\t\twhile (child) {\n\t\t\tvar next = child.nextSibling;\n\t\t\tif (next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE) {\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t} else {\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Checks whether the DOM implementation implements a specific feature and its version.\n\t *\n\t * @deprecated\n\t * Since `DOMImplementation.hasFeature` is deprecated and always returns true.\n\t * @param {string} feature\n\t * The package name of the feature to test. This is the same name that can be passed to the\n\t * method `hasFeature` on `DOMImplementation`.\n\t * @param {string} version\n\t * This is the version number of the package name to test.\n\t * @returns {boolean}\n\t * Returns true in all cases in the current implementation.\n\t * @since Introduced in DOM Level 2\n\t * @see {@link DOMImplementation.hasFeature}\n\t */\n\tisSupported: function (feature, version) {\n\t\treturn this.ownerDocument.implementation.hasFeature(feature, version);\n\t},\n\t/**\n\t * Look up the prefix associated to the given namespace URI, starting from this node.\n\t * **The default namespace declarations are ignored by this method.**\n\t * See Namespace Prefix Lookup for details on the algorithm used by this method.\n\t *\n\t * **This behavior is different from the in the specs**:\n\t * - no node type specific handling\n\t * - uses the internal attribute _nsMap for resolving namespaces that is updated when changing attributes\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI for which to find the associated prefix.\n\t * @returns {string | null}\n\t * The associated prefix, if found; otherwise, null.\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix\n\t * @see https://github.com/xmldom/xmldom/issues/322\n\t * @prettierignore\n\t */\n\tlookupPrefix: function (namespaceURI) {\n\t\tvar el = this;\n\t\twhile (el) {\n\t\t\tvar map = el._nsMap;\n\t\t\t//console.dir(map)\n\t\t\tif (map) {\n\t\t\t\tfor (var n in map) {\n\t\t\t\t\tif (hasOwn(map, n) && map[n] === namespaceURI) {\n\t\t\t\t\t\treturn n;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tel = el.nodeType == ATTRIBUTE_NODE ? el.ownerDocument : el.parentNode;\n\t\t}\n\t\treturn null;\n\t},\n\t/**\n\t * This function is used to look up the namespace URI associated with the given prefix,\n\t * starting from this node.\n\t *\n\t * **This behavior is different from the in the specs**:\n\t * - no node type specific handling\n\t * - uses the internal attribute _nsMap for resolving namespaces that is updated when changing attributes\n\t *\n\t * @param {string | null} prefix\n\t * The prefix for which to find the associated namespace URI.\n\t * @returns {string | null}\n\t * The associated namespace URI, if found; otherwise, null.\n\t * @since DOM Level 3\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupnamespaceuri\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI\n\t * @prettierignore\n\t */\n\tlookupNamespaceURI: function (prefix) {\n\t\tvar el = this;\n\t\twhile (el) {\n\t\t\tvar map = el._nsMap;\n\t\t\t//console.dir(map)\n\t\t\tif (map) {\n\t\t\t\tif (hasOwn(map, prefix)) {\n\t\t\t\t\treturn map[prefix];\n\t\t\t\t}\n\t\t\t}\n\t\t\tel = el.nodeType == ATTRIBUTE_NODE ? el.ownerDocument : el.parentNode;\n\t\t}\n\t\treturn null;\n\t},\n\t/**\n\t * Determines whether the given namespace URI is the default namespace.\n\t *\n\t * The function works by looking up the prefix associated with the given namespace URI. If no\n\t * prefix is found (i.e., the namespace URI is not registered in the namespace map of this\n\t * node or any of its ancestors), it returns `true`, implying the namespace URI is considered\n\t * the default.\n\t *\n\t * **This behavior is different from the in the specs**:\n\t * - no node type specific handling\n\t * - uses the internal attribute _nsMap for resolving namespaces that is updated when changing attributes\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI to be checked.\n\t * @returns {boolean}\n\t * Returns true if the given namespace URI is the default namespace, false otherwise.\n\t * @since DOM Level 3\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace\n\t * @see https://dom.spec.whatwg.org/#dom-node-isdefaultnamespace\n\t * @prettierignore\n\t */\n\tisDefaultNamespace: function (namespaceURI) {\n\t\tvar prefix = this.lookupPrefix(namespaceURI);\n\t\treturn prefix == null;\n\t},\n\t/**\n\t * Compares the reference node with a node with regard to their position in the document and\n\t * according to the document order.\n\t *\n\t * @param {Node} other\n\t * The node to compare the reference node to.\n\t * @returns {number}\n\t * Returns how the node is positioned relatively to the reference node according to the\n\t * bitmask. 0 if reference node and given node are the same.\n\t * @since DOM Level 3\n\t * @see https://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#Node3-compare\n\t * @see https://dom.spec.whatwg.org/#dom-node-comparedocumentposition\n\t */\n\tcompareDocumentPosition: function (other) {\n\t\tif (this === other) return 0;\n\t\tvar node1 = other;\n\t\tvar node2 = this;\n\t\tvar attr1 = null;\n\t\tvar attr2 = null;\n\t\tif (node1 instanceof Attr) {\n\t\t\tattr1 = node1;\n\t\t\tnode1 = attr1.ownerElement;\n\t\t}\n\t\tif (node2 instanceof Attr) {\n\t\t\tattr2 = node2;\n\t\t\tnode2 = attr2.ownerElement;\n\t\t\tif (attr1 && node1 && node2 === node1) {\n\t\t\t\tfor (var i = 0, attr; (attr = node2.attributes[i]); i++) {\n\t\t\t\t\tif (attr === attr1)\n\t\t\t\t\t\treturn DocumentPosition.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC + DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t\t\t\tif (attr === attr2)\n\t\t\t\t\t\treturn DocumentPosition.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC + DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!node1 || !node2 || node2.ownerDocument !== node1.ownerDocument) {\n\t\t\treturn (\n\t\t\t\tDocumentPosition.DOCUMENT_POSITION_DISCONNECTED +\n\t\t\t\tDocumentPosition.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC +\n\t\t\t\t(docGUID(node2.ownerDocument) > docGUID(node1.ownerDocument)\n\t\t\t\t\t? DocumentPosition.DOCUMENT_POSITION_FOLLOWING\n\t\t\t\t\t: DocumentPosition.DOCUMENT_POSITION_PRECEDING)\n\t\t\t);\n\t\t}\n\t\tvar chain1 = parentChain(node1);\n\t\tvar chain2 = parentChain(node2);\n\t\tif ((!attr1 && chain2.indexOf(node1) >= 0) || (attr2 && node1 === node2)) {\n\t\t\treturn DocumentPosition.DOCUMENT_POSITION_CONTAINS + DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t}\n\t\tif ((!attr2 && chain1.indexOf(node2) >= 0) || (attr1 && node1 === node2)) {\n\t\t\treturn DocumentPosition.DOCUMENT_POSITION_CONTAINED_BY + DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t}\n\t\tvar ca = commonAncestor(chain2, chain1);\n\t\tfor (var n in ca.childNodes) {\n\t\t\tvar child = ca.childNodes[n];\n\t\t\tif (child === node2) return DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t\tif (child === node1) return DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t\tif (chain2.indexOf(child) >= 0) return DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t\tif (chain1.indexOf(child) >= 0) return DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t}\n\t\treturn 0;\n\t},\n};\n\n/**\n * Encodes special XML characters to their corresponding entities.\n *\n * @param {string} c\n * The character to be encoded.\n * @returns {string}\n * The encoded character.\n * @private\n */\nfunction _xmlEncoder(c) {\n\treturn (\n\t\t(c == '<' && '<') || (c == '>' && '>') || (c == '&' && '&') || (c == '\"' && '"') || '&#' + c.charCodeAt() + ';'\n\t);\n}\n\ncopy(NodeType, Node);\ncopy(NodeType, Node.prototype);\ncopy(DocumentPosition, Node);\ncopy(DocumentPosition, Node.prototype);\n\n/**\n * @param callback\n * Return true for continue,false for break.\n * @returns\n * boolean true: break visit;\n */\nfunction _visitNode(node, callback) {\n\tif (callback(node)) {\n\t\treturn true;\n\t}\n\tif ((node = node.firstChild)) {\n\t\tdo {\n\t\t\tif (_visitNode(node, callback)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} while ((node = node.nextSibling));\n\t}\n}\n\n/**\n * @typedef DocumentOptions\n * @property {string} [contentType=MIME_TYPE.XML_APPLICATION]\n */\n/**\n * The Document interface describes the common properties and methods for any kind of document.\n *\n * It should usually be created using `new DOMImplementation().createDocument(...)`\n * or `new DOMImplementation().createHTMLDocument(...)`.\n *\n * The constructor is considered a private API and offers to initially set the `contentType`\n * property via it's options parameter.\n *\n * @class\n * @param {Symbol} symbol\n * @param {DocumentOptions} [options]\n * @augments Node\n * @private\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document\n * @see https://dom.spec.whatwg.org/#interface-document\n */\nfunction Document(symbol, options) {\n\tcheckSymbol(symbol);\n\n\tvar opt = options || {};\n\tthis.ownerDocument = this;\n\t/**\n\t * The mime type of the document is determined at creation time and can not be modified.\n\t *\n\t * @type {string}\n\t * @see https://dom.spec.whatwg.org/#concept-document-content-type\n\t * @see {@link DOMImplementation}\n\t * @see {@link MIME_TYPE}\n\t * @readonly\n\t */\n\tthis.contentType = opt.contentType || MIME_TYPE.XML_APPLICATION;\n\t/**\n\t * @type {'html' | 'xml'}\n\t * @see https://dom.spec.whatwg.org/#concept-document-type\n\t * @see {@link DOMImplementation}\n\t * @readonly\n\t */\n\tthis.type = isHTMLMimeType(this.contentType) ? 'html' : 'xml';\n}\n\n/**\n * Updates the namespace mapping of an element when a new attribute is added.\n *\n * @param {Document} doc\n * The document that the element belongs to.\n * @param {Element} el\n * The element to which the attribute is being added.\n * @param {Attr} newAttr\n * The new attribute being added.\n * @private\n */\nfunction _onAddAttribute(doc, el, newAttr) {\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI;\n\tif (ns === NAMESPACE.XMLNS) {\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix ? newAttr.localName : ''] = newAttr.value;\n\t}\n}\n\n/**\n * Updates the namespace mapping of an element when an attribute is removed.\n *\n * @param {Document} doc\n * The document that the element belongs to.\n * @param {Element} el\n * The element from which the attribute is being removed.\n * @param {Attr} newAttr\n * The attribute being removed.\n * @param {boolean} remove\n * Indicates whether the attribute is to be removed.\n * @private\n */\nfunction _onRemoveAttribute(doc, el, newAttr, remove) {\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI;\n\tif (ns === NAMESPACE.XMLNS) {\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix ? newAttr.localName : ''];\n\t}\n}\n\n/**\n * Updates `parent.childNodes`, adjusting the indexed items and its `length`.\n * If `newChild` is provided and has no nextSibling, it will be appended.\n * Otherwise, it's assumed that an item has been removed or inserted,\n * and `parent.firstNode` and its `.nextSibling` to re-indexing all child nodes of `parent`.\n *\n * @param {Document} doc\n * The parent document of `el`.\n * @param {Node} parent\n * The parent node whose childNodes list needs to be updated.\n * @param {Node} [newChild]\n * The new child node to be appended. If not provided, the function assumes a node has been\n * removed.\n * @private\n */\nfunction _onUpdateChild(doc, parent, newChild) {\n\tif (doc && doc._inc) {\n\t\tdoc._inc++;\n\t\tvar childNodes = parent.childNodes;\n\t\t// assumes nextSibling and previousSibling were already configured upfront\n\t\tif (newChild && !newChild.nextSibling) {\n\t\t\t// if an item has been appended, we only need to update the last index and the length\n\t\t\tchildNodes[childNodes.length++] = newChild;\n\t\t} else {\n\t\t\t// otherwise we need to reindex all items,\n\t\t\t// which can take a while when processing nodes with a lot of children\n\t\t\tvar child = parent.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile (child) {\n\t\t\t\tchildNodes[i++] = child;\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\tchildNodes.length = i;\n\t\t\tdelete childNodes[childNodes.length];\n\t\t}\n\t}\n}\n\n/**\n * Removes the connections between `parentNode` and `child`\n * and any existing `child.previousSibling` or `child.nextSibling`.\n *\n * @param {Node} parentNode\n * The parent node from which the child node is to be removed.\n * @param {Node} child\n * The child node to be removed from the parentNode.\n * @returns {Node}\n * Returns the child node that was removed.\n * @throws {DOMException}\n * With code:\n * - {@link DOMException.NOT_FOUND_ERR} If the parentNode is not the parent of the child node.\n * @private\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n */\nfunction _removeChild(parentNode, child) {\n\tif (parentNode !== child.parentNode) {\n\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, \"child's parent is not parent\");\n\t}\n\tvar oldPreviousSibling = child.previousSibling;\n\tvar oldNextSibling = child.nextSibling;\n\tif (oldPreviousSibling) {\n\t\toldPreviousSibling.nextSibling = oldNextSibling;\n\t} else {\n\t\tparentNode.firstChild = oldNextSibling;\n\t}\n\tif (oldNextSibling) {\n\t\toldNextSibling.previousSibling = oldPreviousSibling;\n\t} else {\n\t\tparentNode.lastChild = oldPreviousSibling;\n\t}\n\t_onUpdateChild(parentNode.ownerDocument, parentNode);\n\tchild.parentNode = null;\n\tchild.previousSibling = null;\n\tchild.nextSibling = null;\n\treturn child;\n}\n\n/**\n * Returns `true` if `node` can be a parent for insertion.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasValidParentNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE)\n\t);\n}\n\n/**\n * Returns `true` if `node` can be inserted according to it's `nodeType`.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasInsertableNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.CDATA_SECTION_NODE ||\n\t\t\tnode.nodeType === Node.COMMENT_NODE ||\n\t\t\tnode.nodeType === Node.DOCUMENT_FRAGMENT_NODE ||\n\t\t\tnode.nodeType === Node.DOCUMENT_TYPE_NODE ||\n\t\t\tnode.nodeType === Node.ELEMENT_NODE ||\n\t\t\tnode.nodeType === Node.PROCESSING_INSTRUCTION_NODE ||\n\t\t\tnode.nodeType === Node.TEXT_NODE)\n\t);\n}\n\n/**\n * Returns true if `node` is a DOCTYPE node.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isDocTypeNode(node) {\n\treturn node && node.nodeType === Node.DOCUMENT_TYPE_NODE;\n}\n\n/**\n * Returns true if the node is an element.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isElementNode(node) {\n\treturn node && node.nodeType === Node.ELEMENT_NODE;\n}\n/**\n * Returns true if `node` is a text node.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isTextNode(node) {\n\treturn node && node.nodeType === Node.TEXT_NODE;\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Document} doc\n * The document node.\n * @param {Node} child\n * The node that would become the nextSibling if the element would be inserted.\n * @returns {boolean}\n * `true` if an element can be inserted before child.\n * @private\n */\nfunction isElementInsertionPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\tif (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Node} doc\n * The document node.\n * @param {Node} child\n * The node that would become the nextSibling if the element would be inserted.\n * @returns {boolean}\n * `true` if an element can be inserted before child.\n * @private\n */\nfunction isElementReplacementPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\n\tfunction hasElementChildThatIsNotChild(node) {\n\t\treturn isElementNode(node) && node !== child;\n\t}\n\n\tif (find(parentChildNodes, hasElementChildThatIsNotChild)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Asserts pre-insertion validity of a node into a parent before a child.\n * Throws errors for invalid node combinations that would result in an ill-formed DOM.\n *\n * @param {Node} parent\n * The parent node to insert `node` into.\n * @param {Node} node\n * The node to insert.\n * @param {Node | null} child\n * The node that should become the `nextSibling` of `node`. If null, no sibling is considered.\n * @throws {DOMException}\n * With code:\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `parent` is not a Document,\n * DocumentFragment, or Element node.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a host-including inclusive\n * ancestor of `parent`. (Currently not implemented)\n * - {@link DOMException.NOT_FOUND_ERR} If `child` is non-null and its `parent` is not\n * `parent`.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is not a DocumentFragment,\n * DocumentType, Element, or CharacterData node.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If either `node` is a Text node and `parent` is\n * a document, or if `node` is a doctype and `parent` is not a document.\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidity1to5(parent, node, child) {\n\t// 1. If `parent` is not a Document, DocumentFragment, or Element node, then throw a \"HierarchyRequestError\" DOMException.\n\tif (!hasValidParentNodeType(parent)) {\n\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Unexpected parent node type ' + parent.nodeType);\n\t}\n\t// 2. If `node` is a host-including inclusive ancestor of `parent`, then throw a \"HierarchyRequestError\" DOMException.\n\t// not implemented!\n\t// 3. If `child` is non-null and its parent is not `parent`, then throw a \"NotFoundError\" DOMException.\n\tif (child && child.parentNode !== parent) {\n\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, 'child not in parent');\n\t}\n\tif (\n\t\t// 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a \"HierarchyRequestError\" DOMException.\n\t\t!hasInsertableNodeType(node) ||\n\t\t// 5. If either `node` is a Text node and `parent` is a document,\n\t\t// the sax parser currently adds top level text nodes, this will be fixed in 0.9.0\n\t\t// || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)\n\t\t// or `node` is a doctype and `parent` is not a document, then throw a \"HierarchyRequestError\" DOMException.\n\t\t(isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE)\n\t) {\n\t\tthrow new DOMException(\n\t\t\tDOMException.HIERARCHY_REQUEST_ERR,\n\t\t\t'Unexpected node type ' + node.nodeType + ' for parent node type ' + parent.nodeType\n\t\t);\n\t}\n}\n\n/**\n * Asserts pre-insertion validity of a node into a document before a child.\n * Throws errors for invalid node combinations that would result in an ill-formed DOM.\n *\n * @param {Document} parent\n * The parent node to insert `node` into.\n * @param {Node} node\n * The node to insert.\n * @param {Node | undefined} child\n * The node that should become the `nextSibling` of `node`. If undefined, no sibling is\n * considered.\n * @returns {Node}\n * @throws {DOMException}\n * With code:\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a DocumentFragment with more than\n * one element child or has a Text node child.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a DocumentFragment with one\n * element child and either `parent` has an element child, `child` is a doctype, or `child` is\n * non-null and a doctype is following `child`.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is an Element and `parent` has an\n * element child, `child` is a doctype, or `child` is non-null and a doctype is following\n * `child`.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a DocumentType and `parent` has a\n * doctype child, `child` is non-null and an element is preceding `child`, or `child` is null\n * and `parent` has an element child.\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If node has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child,\n\t\t// `child` is a doctype, or `child` is non-null and a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child, `child` is a doctype,\n\t\t// or `child` is non-null and a doctype is following `child`.\n\t\tif (!isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\t// `parent` has a doctype child,\n\t\tif (find(parentChildNodes, isDocTypeNode)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// `child` is non-null and an element is preceding `child`,\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t\t// or `child` is null and `parent` has an element child.\n\t\tif (!child && parentElementChild) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Doctype can not be appended since element is present');\n\t\t}\n\t}\n}\n\n/**\n * @param {Document} parent\n * The parent node to insert `node` into.\n * @param {Node} node\n * The node to insert.\n * @param {Node | undefined} child\n * the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws {DOMException}\n * For several node combinations that would create a DOM that is not well-formed.\n * @throws {DOMException}\n * If `child` is provided but is not a child of `parent`.\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreReplacementValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If `node` has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (!isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\tfunction hasDoctypeChildThatIsNotChild(node) {\n\t\t\treturn isDocTypeNode(node) && node !== child;\n\t\t}\n\n\t\t// `parent` has a doctype child that is not `child`,\n\t\tif (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// or an element is preceding `child`.\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t}\n}\n\n/**\n * Inserts a node into a parent node before a child node.\n *\n * @param {Node} parent\n * The parent node to insert the node into.\n * @param {Node} node\n * The node to insert into the parent.\n * @param {Node | null} child\n * The node that should become the next sibling of the node.\n * If null, the function inserts the node at the end of the children of the parent node.\n * @param {Function} [_inDocumentAssertion]\n * An optional function to check pre-insertion validity if parent is a document node.\n * Defaults to {@link assertPreInsertionValidityInDocument}\n * @returns {Node}\n * Returns the inserted node.\n * @throws {DOMException}\n * Throws a DOMException if inserting the node would result in a DOM tree that is not\n * well-formed. See {@link assertPreInsertionValidity1to5},\n * {@link assertPreInsertionValidityInDocument}.\n * @throws {DOMException}\n * Throws a DOMException if child is provided but is not a child of the parent. See\n * {@link Node.removeChild}\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction _insertBefore(parent, node, child, _inDocumentAssertion) {\n\t// To ensure pre-insertion validity of a node into a parent before a child, run these steps:\n\tassertPreInsertionValidity1to5(parent, node, child);\n\n\t// If parent is a document, and any of the statements below, switched on the interface node implements,\n\t// are true, then throw a \"HierarchyRequestError\" DOMException.\n\tif (parent.nodeType === Node.DOCUMENT_NODE) {\n\t\t(_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child);\n\t}\n\n\tvar cp = node.parentNode;\n\tif (cp) {\n\t\tcp.removeChild(node); //remove and update\n\t}\n\tif (node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n\t\tvar newFirst = node.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn node;\n\t\t}\n\t\tvar newLast = node.lastChild;\n\t} else {\n\t\tnewFirst = newLast = node;\n\t}\n\tvar pre = child ? child.previousSibling : parent.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = child;\n\n\tif (pre) {\n\t\tpre.nextSibling = newFirst;\n\t} else {\n\t\tparent.firstChild = newFirst;\n\t}\n\tif (child == null) {\n\t\tparent.lastChild = newLast;\n\t} else {\n\t\tchild.previousSibling = newLast;\n\t}\n\tdo {\n\t\tnewFirst.parentNode = parent;\n\t} while (newFirst !== newLast && (newFirst = newFirst.nextSibling));\n\t_onUpdateChild(parent.ownerDocument || parent, parent, node);\n\tif (node.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnode.firstChild = node.lastChild = null;\n\t}\n\n\treturn node;\n}\n\nDocument.prototype = {\n\t/**\n\t * The implementation that created this document.\n\t *\n\t * @type DOMImplementation\n\t * @readonly\n\t */\n\timplementation: null,\n\tnodeName: '#document',\n\tnodeType: DOCUMENT_NODE,\n\t/**\n\t * The DocumentType node of the document.\n\t *\n\t * @type DocumentType\n\t * @readonly\n\t */\n\tdoctype: null,\n\tdocumentElement: null,\n\t_inc: 1,\n\n\tinsertBefore: function (newChild, refChild) {\n\t\t//raises\n\t\tif (newChild.nodeType === DOCUMENT_FRAGMENT_NODE) {\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile (child) {\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child, refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\t_insertBefore(this, newChild, refChild);\n\t\tnewChild.ownerDocument = this;\n\t\tif (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn newChild;\n\t},\n\tremoveChild: function (oldChild) {\n\t\tvar removed = _removeChild(this, oldChild);\n\t\tif (removed === this.documentElement) {\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn removed;\n\t},\n\treplaceChild: function (newChild, oldChild) {\n\t\t//raises\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\tnewChild.ownerDocument = this;\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t\tif (isElementNode(newChild)) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t},\n\t// Introduced in DOM Level 2:\n\timportNode: function (importedNode, deep) {\n\t\treturn importNode(this, importedNode, deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById: function (id) {\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement, function (node) {\n\t\t\tif (node.nodeType == ELEMENT_NODE) {\n\t\t\t\tif (node.getAttribute('id') == id) {\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn rtv;\n\t},\n\n\t/**\n\t * Creates a new `Element` that is owned by this `Document`.\n\t * In HTML Documents `localName` is the lower cased `tagName`,\n\t * otherwise no transformation is being applied.\n\t * When `contentType` implies the HTML namespace, it will be set as `namespaceURI`.\n\t *\n\t * __This implementation differs from the specification:__ - The provided name is not checked\n\t * against the `Name` production,\n\t * so no related error will be thrown.\n\t * - There is no interface `HTMLElement`, it is always an `Element`.\n\t * - There is no support for a second argument to indicate using custom elements.\n\t *\n\t * @param {string} tagName\n\t * @returns {Element}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement\n\t * @see https://dom.spec.whatwg.org/#dom-document-createelement\n\t * @see https://dom.spec.whatwg.org/#concept-create-element\n\t */\n\tcreateElement: function (tagName) {\n\t\tvar node = new Element(PDC);\n\t\tnode.ownerDocument = this;\n\t\tif (this.type === 'html') {\n\t\t\ttagName = tagName.toLowerCase();\n\t\t}\n\t\tif (hasDefaultHTMLNamespace(this.contentType)) {\n\t\t\tnode.namespaceURI = NAMESPACE.HTML;\n\t\t}\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.localName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs = (node.attributes = new NamedNodeMap());\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t/**\n\t * @returns {DocumentFragment}\n\t */\n\tcreateDocumentFragment: function () {\n\t\tvar node = new DocumentFragment(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\t/**\n\t * @param {string} data\n\t * @returns {Text}\n\t */\n\tcreateTextNode: function (data) {\n\t\tvar node = new Text(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\t/**\n\t * @param {string} data\n\t * @returns {Comment}\n\t */\n\tcreateComment: function (data) {\n\t\tvar node = new Comment(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\t/**\n\t * @param {string} data\n\t * @returns {CDATASection}\n\t */\n\tcreateCDATASection: function (data) {\n\t\tvar node = new CDATASection(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\t/**\n\t * @param {string} target\n\t * @param {string} data\n\t * @returns {ProcessingInstruction}\n\t */\n\tcreateProcessingInstruction: function (target, data) {\n\t\tvar node = new ProcessingInstruction(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.nodeName = node.target = target;\n\t\tnode.nodeValue = node.data = data;\n\t\treturn node;\n\t},\n\t/**\n\t * Creates an `Attr` node that is owned by this document.\n\t * In HTML Documents `localName` is the lower cased `name`,\n\t * otherwise no transformation is being applied.\n\t *\n\t * __This implementation differs from the specification:__ - The provided name is not checked\n\t * against the `Name` production,\n\t * so no related error will be thrown.\n\t *\n\t * @param {string} name\n\t * @returns {Attr}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/createAttribute\n\t * @see https://dom.spec.whatwg.org/#dom-document-createattribute\n\t */\n\tcreateAttribute: function (name) {\n\t\tif (!g.QName_exact.test(name)) {\n\t\t\tthrow new DOMException(DOMException.INVALID_CHARACTER_ERR, 'invalid character in name \"' + name + '\"');\n\t\t}\n\t\tif (this.type === 'html') {\n\t\t\tname = name.toLowerCase();\n\t\t}\n\t\treturn this._createAttribute(name);\n\t},\n\t_createAttribute: function (name) {\n\t\tvar node = new Attr(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.name = name;\n\t\tnode.nodeName = name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\t/**\n\t * Creates an EntityReference object.\n\t * The current implementation does not fill the `childNodes` with those of the corresponding\n\t * `Entity`\n\t *\n\t * @deprecated\n\t * In DOM Level 4.\n\t * @param {string} name\n\t * The name of the entity to reference. No namespace well-formedness checks are performed.\n\t * @returns {EntityReference}\n\t * @throws {DOMException}\n\t * With code `INVALID_CHARACTER_ERR` when `name` is not valid.\n\t * @throws {DOMException}\n\t * with code `NOT_SUPPORTED_ERR` when the document is of type `html`\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-392B75AE\n\t */\n\tcreateEntityReference: function (name) {\n\t\tif (!g.Name.test(name)) {\n\t\t\tthrow new DOMException(DOMException.INVALID_CHARACTER_ERR, 'not a valid xml name \"' + name + '\"');\n\t\t}\n\t\tif (this.type === 'html') {\n\t\t\tthrow new DOMException('document is an html document', DOMExceptionName.NotSupportedError);\n\t\t}\n\n\t\tvar node = new EntityReference(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.nodeName = name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\t/**\n\t * @param {string} namespaceURI\n\t * @param {string} qualifiedName\n\t * @returns {Element}\n\t */\n\tcreateElementNS: function (namespaceURI, qualifiedName) {\n\t\tvar validated = validateAndExtract(namespaceURI, qualifiedName);\n\t\tvar node = new Element(PDC);\n\t\tvar attrs = (node.attributes = new NamedNodeMap());\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = validated[0];\n\t\tnode.prefix = validated[1];\n\t\tnode.localName = validated[2];\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\t/**\n\t * @param {string} namespaceURI\n\t * @param {string} qualifiedName\n\t * @returns {Attr}\n\t */\n\tcreateAttributeNS: function (namespaceURI, qualifiedName) {\n\t\tvar validated = validateAndExtract(namespaceURI, qualifiedName);\n\t\tvar node = new Attr(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.specified = true;\n\t\tnode.namespaceURI = validated[0];\n\t\tnode.prefix = validated[1];\n\t\tnode.localName = validated[2];\n\t\treturn node;\n\t},\n};\n_extends(Document, Node);\n\nfunction Element(symbol) {\n\tcheckSymbol(symbol);\n\n\tthis._nsMap = Object.create(null);\n}\nElement.prototype = {\n\tnodeType: ELEMENT_NODE,\n\t/**\n\t * The attributes of this element.\n\t *\n\t * @type {NamedNodeMap | null}\n\t */\n\tattributes: null,\n\tgetQualifiedName: function () {\n\t\treturn this.prefix ? this.prefix + ':' + this.localName : this.localName;\n\t},\n\t_isInHTMLDocumentAndNamespace: function () {\n\t\treturn this.ownerDocument.type === 'html' && this.namespaceURI === NAMESPACE.HTML;\n\t},\n\thasAttribute: function (name) {\n\t\treturn !!this.getAttributeNode(name);\n\t},\n\t/**\n\t * Returns element’s first attribute whose qualified name is `name`, and `null`\n\t * if there is no such attribute.\n\t *\n\t * @param {string} name\n\t * @returns {string | null}\n\t */\n\tgetAttribute: function (name) {\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr ? attr.value : null;\n\t},\n\tgetAttributeNode: function (name) {\n\t\tif (this._isInHTMLDocumentAndNamespace()) {\n\t\t\tname = name.toLowerCase();\n\t\t}\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\t/**\n\t * Sets the value of element’s first attribute whose qualified name is qualifiedName to value.\n\t *\n\t * @param {string} name\n\t * @param {string} value\n\t */\n\tsetAttribute: function (name, value) {\n\t\tif (this._isInHTMLDocumentAndNamespace()) {\n\t\t\tname = name.toLowerCase();\n\t\t}\n\t\tvar attr = this.getAttributeNode(name);\n\t\tif (attr) {\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t} else {\n\t\t\tattr = this.ownerDocument._createAttribute(name);\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t\tthis.setAttributeNode(attr);\n\t\t}\n\t},\n\tremoveAttribute: function (name) {\n\t\tvar attr = this.getAttributeNode(name);\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\tsetAttributeNode: function (newAttr) {\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS: function (newAttr) {\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode: function (oldAttr) {\n\t\t//console.log(this == oldAttr.ownerElement)\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS: function (namespaceURI, localName) {\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS: function (namespaceURI, localName) {\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName) != null;\n\t},\n\t/**\n\t * Returns element’s attribute whose namespace is `namespaceURI` and local name is\n\t * `localName`,\n\t * or `null` if there is no such attribute.\n\t *\n\t * @param {string} namespaceURI\n\t * @param {string} localName\n\t * @returns {string | null}\n\t */\n\tgetAttributeNS: function (namespaceURI, localName) {\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr ? attr.value : null;\n\t},\n\t/**\n\t * Sets the value of element’s attribute whose namespace is `namespaceURI` and local name is\n\t * `localName` to value.\n\t *\n\t * @param {string} namespaceURI\n\t * @param {string} qualifiedName\n\t * @param {string} value\n\t * @see https://dom.spec.whatwg.org/#dom-element-setattributens\n\t */\n\tsetAttributeNS: function (namespaceURI, qualifiedName, value) {\n\t\tvar validated = validateAndExtract(namespaceURI, qualifiedName);\n\t\tvar localName = validated[2];\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\tif (attr) {\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t} else {\n\t\t\tattr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t\tthis.setAttributeNode(attr);\n\t\t}\n\t},\n\tgetAttributeNodeNS: function (namespaceURI, localName) {\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\t/**\n\t * Returns a LiveNodeList of all child elements which have **all** of the given class name(s).\n\t *\n\t * Returns an empty list if `classNames` is an empty string or only contains HTML white space\n\t * characters.\n\t *\n\t * Warning: This returns a live LiveNodeList.\n\t * Changes in the DOM will reflect in the array as the changes occur.\n\t * If an element selected by this array no longer qualifies for the selector,\n\t * it will automatically be removed. Be aware of this for iteration purposes.\n\t *\n\t * @param {string} classNames\n\t * Is a string representing the class name(s) to match; multiple class names are separated by\n\t * (ASCII-)whitespace.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByClassName\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname\n\t */\n\tgetElementsByClassName: function (classNames) {\n\t\tvar classNamesSet = toOrderedSet(classNames);\n\t\treturn new LiveNodeList(this, function (base) {\n\t\t\tvar ls = [];\n\t\t\tif (classNamesSet.length > 0) {\n\t\t\t\t_visitNode(base, function (node) {\n\t\t\t\t\tif (node !== base && node.nodeType === ELEMENT_NODE) {\n\t\t\t\t\t\tvar nodeClassNames = node.getAttribute('class');\n\t\t\t\t\t\t// can be null if the attribute does not exist\n\t\t\t\t\t\tif (nodeClassNames) {\n\t\t\t\t\t\t\t// before splitting and iterating just compare them for the most common case\n\t\t\t\t\t\t\tvar matches = classNames === nodeClassNames;\n\t\t\t\t\t\t\tif (!matches) {\n\t\t\t\t\t\t\t\tvar nodeClassNamesSet = toOrderedSet(nodeClassNames);\n\t\t\t\t\t\t\t\tmatches = classNamesSet.every(arrayIncludes(nodeClassNamesSet));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matches) {\n\t\t\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn ls;\n\t\t});\n\t},\n\n\t/**\n\t * Returns a LiveNodeList of elements with the given qualifiedName.\n\t * Searching for all descendants can be done by passing `*` as `qualifiedName`.\n\t *\n\t * All descendants of the specified element are searched, but not the element itself.\n\t * The returned list is live, which means it updates itself with the DOM tree automatically.\n\t * Therefore, there is no need to call `Element.getElementsByTagName()`\n\t * with the same element and arguments repeatedly if the DOM changes in between calls.\n\t *\n\t * When called on an HTML element in an HTML document,\n\t * `getElementsByTagName` lower-cases the argument before searching for it.\n\t * This is undesirable when trying to match camel-cased SVG elements (such as\n\t * ``) in an HTML document.\n\t * Instead, use `Element.getElementsByTagNameNS()`,\n\t * which preserves the capitalization of the tag name.\n\t *\n\t * `Element.getElementsByTagName` is similar to `Document.getElementsByTagName()`,\n\t * except that it only searches for elements that are descendants of the specified element.\n\t *\n\t * @param {string} qualifiedName\n\t * @returns {LiveNodeList}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByTagName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbytagname\n\t */\n\tgetElementsByTagName: function (qualifiedName) {\n\t\tvar isHTMLDocument = (this.nodeType === DOCUMENT_NODE ? this : this.ownerDocument).type === 'html';\n\t\tvar lowerQualifiedName = qualifiedName.toLowerCase();\n\t\treturn new LiveNodeList(this, function (base) {\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base, function (node) {\n\t\t\t\tif (node === base || node.nodeType !== ELEMENT_NODE) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (qualifiedName === '*') {\n\t\t\t\t\tls.push(node);\n\t\t\t\t} else {\n\t\t\t\t\tvar nodeQualifiedName = node.getQualifiedName();\n\t\t\t\t\tvar matchingQName = isHTMLDocument && node.namespaceURI === NAMESPACE.HTML ? lowerQualifiedName : qualifiedName;\n\t\t\t\t\tif (nodeQualifiedName === matchingQName) {\n\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS: function (namespaceURI, localName) {\n\t\treturn new LiveNodeList(this, function (base) {\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base, function (node) {\n\t\t\t\tif (\n\t\t\t\t\tnode !== base &&\n\t\t\t\t\tnode.nodeType === ELEMENT_NODE &&\n\t\t\t\t\t(namespaceURI === '*' || node.namespaceURI === namespaceURI) &&\n\t\t\t\t\t(localName === '*' || node.localName == localName)\n\t\t\t\t) {\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n};\nDocument.prototype.getElementsByClassName = Element.prototype.getElementsByClassName;\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n_extends(Element, Node);\nfunction Attr(symbol) {\n\tcheckSymbol(symbol);\n\n\tthis.namespaceURI = null;\n\tthis.prefix = null;\n\tthis.ownerElement = null;\n}\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr, Node);\n\nfunction CharacterData(symbol) {\n\tcheckSymbol(symbol);\n}\nCharacterData.prototype = {\n\tdata: '',\n\tsubstringData: function (offset, count) {\n\t\treturn this.data.substring(offset, offset + count);\n\t},\n\tappendData: function (text) {\n\t\ttext = this.data + text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function (offset, text) {\n\t\tthis.replaceData(offset, 0, text);\n\t},\n\tdeleteData: function (offset, count) {\n\t\tthis.replaceData(offset, count, '');\n\t},\n\treplaceData: function (offset, count, text) {\n\t\tvar start = this.data.substring(0, offset);\n\t\tvar end = this.data.substring(offset + count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n};\n_extends(CharacterData, Node);\nfunction Text(symbol) {\n\tcheckSymbol(symbol);\n}\nText.prototype = {\n\tnodeName: '#text',\n\tnodeType: TEXT_NODE,\n\tsplitText: function (offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif (this.parentNode) {\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t},\n};\n_extends(Text, CharacterData);\nfunction Comment(symbol) {\n\tcheckSymbol(symbol);\n}\nComment.prototype = {\n\tnodeName: '#comment',\n\tnodeType: COMMENT_NODE,\n};\n_extends(Comment, CharacterData);\n\nfunction CDATASection(symbol) {\n\tcheckSymbol(symbol);\n}\nCDATASection.prototype = {\n\tnodeName: '#cdata-section',\n\tnodeType: CDATA_SECTION_NODE,\n};\n_extends(CDATASection, Text);\n\nfunction DocumentType(symbol) {\n\tcheckSymbol(symbol);\n}\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType, Node);\n\nfunction Notation(symbol) {\n\tcheckSymbol(symbol);\n}\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation, Node);\n\nfunction Entity(symbol) {\n\tcheckSymbol(symbol);\n}\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity, Node);\n\nfunction EntityReference(symbol) {\n\tcheckSymbol(symbol);\n}\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference, Node);\n\nfunction DocumentFragment(symbol) {\n\tcheckSymbol(symbol);\n}\nDocumentFragment.prototype.nodeName = '#document-fragment';\nDocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment, Node);\n\nfunction ProcessingInstruction(symbol) {\n\tcheckSymbol(symbol);\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction, CharacterData);\nfunction XMLSerializer() {}\nXMLSerializer.prototype.serializeToString = function (node, nodeFilter) {\n\treturn nodeSerializeToString.call(node, nodeFilter);\n};\nNode.prototype.toString = nodeSerializeToString;\nfunction nodeSerializeToString(nodeFilter) {\n\tvar buf = [];\n\tvar refNode = (this.nodeType === DOCUMENT_NODE && this.documentElement) || this;\n\tvar prefix = refNode.prefix;\n\tvar uri = refNode.namespaceURI;\n\n\tif (uri && prefix == null) {\n\t\tvar prefix = refNode.lookupPrefix(uri);\n\t\tif (prefix == null) {\n\t\t\tvar visibleNamespaces = [\n\t\t\t\t{ namespace: uri, prefix: null },\n\t\t\t\t//{namespace:uri,prefix:''}\n\t\t\t];\n\t\t}\n\t}\n\tserializeToString(this, buf, nodeFilter, visibleNamespaces);\n\treturn buf.join('');\n}\n\nfunction needNamespaceDefine(node, isHTML, visibleNamespaces) {\n\tvar prefix = node.prefix || '';\n\tvar uri = node.namespaceURI;\n\t// According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) ,\n\t// and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl :\n\t// > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty.\n\t// in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using)\n\t// and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared :\n\t// > [...] Furthermore, the attribute value [...] must not be an empty string.\n\t// so serializing empty namespace value like xmlns:ds=\"\" would produce an invalid XML document.\n\tif (!uri) {\n\t\treturn false;\n\t}\n\tif ((prefix === 'xml' && uri === NAMESPACE.XML) || uri === NAMESPACE.XMLNS) {\n\t\treturn false;\n\t}\n\n\tvar i = visibleNamespaces.length;\n\twhile (i--) {\n\t\tvar ns = visibleNamespaces[i];\n\t\t// get namespace prefix\n\t\tif (ns.prefix === prefix) {\n\t\t\treturn ns.namespace !== uri;\n\t\t}\n\t}\n\treturn true;\n}\n/**\n * Literal whitespace other than space that appear in attribute values are serialized as\n * their entity references, so they will be preserved.\n * (In contrast to whitespace literals in the input which are normalized to spaces).\n *\n * Well-formed constraint: No < in Attribute Values:\n * > The replacement text of any entity referred to directly or indirectly\n * > in an attribute value must not contain a <.\n *\n * @see https://www.w3.org/TR/xml11/#CleanAttrVals\n * @see https://www.w3.org/TR/xml11/#NT-AttValue\n * @see https://www.w3.org/TR/xml11/#AVNormalize\n * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes\n * @prettierignore\n */\nfunction addSerializedAttribute(buf, qualifiedName, value) {\n\tbuf.push(' ', qualifiedName, '=\"', value.replace(/[<>&\"\\t\\n\\r]/g, _xmlEncoder), '\"');\n}\n\nfunction serializeToString(node, buf, nodeFilter, visibleNamespaces) {\n\tif (!visibleNamespaces) {\n\t\tvisibleNamespaces = [];\n\t}\n\tvar doc = node.nodeType === DOCUMENT_NODE ? node : node.ownerDocument;\n\tvar isHTML = doc.type === 'html';\n\n\tif (nodeFilter) {\n\t\tnode = nodeFilter(node);\n\t\tif (node) {\n\t\t\tif (typeof node == 'string') {\n\t\t\t\tbuf.push(node);\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t\t//buf.sort.apply(attrs, attributeSorter);\n\t}\n\n\tswitch (node.nodeType) {\n\t\tcase ELEMENT_NODE:\n\t\t\tvar attrs = node.attributes;\n\t\t\tvar len = attrs.length;\n\t\t\tvar child = node.firstChild;\n\t\t\tvar nodeName = node.tagName;\n\n\t\t\tvar prefixedNodeName = nodeName;\n\t\t\tif (!isHTML && !node.prefix && node.namespaceURI) {\n\t\t\t\tvar defaultNS;\n\t\t\t\t// lookup current default ns from `xmlns` attribute\n\t\t\t\tfor (var ai = 0; ai < attrs.length; ai++) {\n\t\t\t\t\tif (attrs.item(ai).name === 'xmlns') {\n\t\t\t\t\t\tdefaultNS = attrs.item(ai).value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!defaultNS) {\n\t\t\t\t\t// lookup current default ns in visibleNamespaces\n\t\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\t\tvar namespace = visibleNamespaces[nsi];\n\t\t\t\t\t\tif (namespace.prefix === '' && namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\t\tdefaultNS = namespace.namespace;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (defaultNS !== node.namespaceURI) {\n\t\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\t\tvar namespace = visibleNamespaces[nsi];\n\t\t\t\t\t\tif (namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\t\tif (namespace.prefix) {\n\t\t\t\t\t\t\t\tprefixedNodeName = namespace.prefix + ':' + nodeName;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbuf.push('<', prefixedNodeName);\n\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\t// add namespaces for attributes\n\t\t\t\tvar attr = attrs.item(i);\n\t\t\t\tif (attr.prefix == 'xmlns') {\n\t\t\t\t\tvisibleNamespaces.push({\n\t\t\t\t\t\tprefix: attr.localName,\n\t\t\t\t\t\tnamespace: attr.value,\n\t\t\t\t\t});\n\t\t\t\t} else if (attr.nodeName == 'xmlns') {\n\t\t\t\t\tvisibleNamespaces.push({ prefix: '', namespace: attr.value });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\tvar attr = attrs.item(i);\n\t\t\t\tif (needNamespaceDefine(attr, isHTML, visibleNamespaces)) {\n\t\t\t\t\tvar prefix = attr.prefix || '';\n\t\t\t\t\tvar uri = attr.namespaceURI;\n\t\t\t\t\taddSerializedAttribute(buf, prefix ? 'xmlns:' + prefix : 'xmlns', uri);\n\t\t\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace: uri });\n\t\t\t\t}\n\t\t\t\tserializeToString(attr, buf, nodeFilter, visibleNamespaces);\n\t\t\t}\n\n\t\t\t// add namespace for current node\n\t\t\tif (nodeName === prefixedNodeName && needNamespaceDefine(node, isHTML, visibleNamespaces)) {\n\t\t\t\tvar prefix = node.prefix || '';\n\t\t\t\tvar uri = node.namespaceURI;\n\t\t\t\taddSerializedAttribute(buf, prefix ? 'xmlns:' + prefix : 'xmlns', uri);\n\t\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace: uri });\n\t\t\t}\n\t\t\t// in XML elements can be closed when they have no children\n\t\t\tvar canCloseTag = !child;\n\t\t\tif (canCloseTag && (isHTML || node.namespaceURI === NAMESPACE.HTML)) {\n\t\t\t\t// in HTML (doc or ns) only void elements can be closed right away\n\t\t\t\tcanCloseTag = isHTMLVoidElement(nodeName);\n\t\t\t}\n\t\t\tif (canCloseTag) {\n\t\t\t\tbuf.push('/>');\n\t\t\t} else {\n\t\t\t\tbuf.push('>');\n\t\t\t\t//if is cdata child node\n\t\t\t\tif (isHTML && isHTMLRawTextElement(nodeName)) {\n\t\t\t\t\twhile (child) {\n\t\t\t\t\t\tif (child.data) {\n\t\t\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tserializeToString(child, buf, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\twhile (child) {\n\t\t\t\t\t\tserializeToString(child, buf, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbuf.push('');\n\t\t\t}\n\t\t\t// remove added visible namespaces\n\t\t\t//visibleNamespaces.length = startVisibleNamespaces;\n\t\t\treturn;\n\t\tcase DOCUMENT_NODE:\n\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\tvar child = node.firstChild;\n\t\t\twhile (child) {\n\t\t\t\tserializeToString(child, buf, nodeFilter, visibleNamespaces.slice());\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\treturn;\n\t\tcase ATTRIBUTE_NODE:\n\t\t\treturn addSerializedAttribute(buf, node.name, node.value);\n\t\tcase TEXT_NODE:\n\t\t\t/*\n\t\t\t * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form,\n\t\t\t * except when used as markup delimiters, or within a comment, a processing instruction,\n\t\t\t * or a CDATA section.\n\t\t\t * If they are needed elsewhere, they must be escaped using either numeric character\n\t\t\t * references or the strings `&` and `<` respectively.\n\t\t\t * The right angle bracket (>) may be represented using the string \" > \",\n\t\t\t * and must, for compatibility, be escaped using either `>`,\n\t\t\t * or a character reference when it appears in the string `]]>` in content,\n\t\t\t * when that string is not marking the end of a CDATA section.\n\t\t\t *\n\t\t\t * In the content of elements, character data is any string of characters which does not\n\t\t\t * contain the start-delimiter of any markup and does not include the CDATA-section-close\n\t\t\t * delimiter, `]]>`.\n\t\t\t *\n\t\t\t * @see https://www.w3.org/TR/xml/#NT-CharData\n\t\t\t * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node\n\t\t\t */\n\t\t\treturn buf.push(node.data.replace(/[<&>]/g, _xmlEncoder));\n\t\tcase CDATA_SECTION_NODE:\n\t\t\treturn buf.push(g.CDATA_START, node.data, g.CDATA_END);\n\t\tcase COMMENT_NODE:\n\t\t\treturn buf.push(g.COMMENT_START, node.data, g.COMMENT_END);\n\t\tcase DOCUMENT_TYPE_NODE:\n\t\t\tvar pubid = node.publicId;\n\t\t\tvar sysid = node.systemId;\n\t\t\tbuf.push(g.DOCTYPE_DECL_START, ' ', node.name);\n\t\t\tif (pubid) {\n\t\t\t\tbuf.push(' ', g.PUBLIC, ' ', pubid);\n\t\t\t\tif (sysid && sysid !== '.') {\n\t\t\t\t\tbuf.push(' ', sysid);\n\t\t\t\t}\n\t\t\t} else if (sysid && sysid !== '.') {\n\t\t\t\tbuf.push(' ', g.SYSTEM, ' ', sysid);\n\t\t\t}\n\t\t\tif (node.internalSubset) {\n\t\t\t\tbuf.push(' [', node.internalSubset, ']');\n\t\t\t}\n\t\t\tbuf.push('>');\n\t\t\treturn;\n\t\tcase PROCESSING_INSTRUCTION_NODE:\n\t\t\treturn buf.push('');\n\t\tcase ENTITY_REFERENCE_NODE:\n\t\t\treturn buf.push('&', node.nodeName, ';');\n\t\t//case ENTITY_NODE:\n\t\t//case NOTATION_NODE:\n\t\tdefault:\n\t\t\tbuf.push('??', node.nodeName);\n\t}\n}\nfunction importNode(doc, node, deep) {\n\tvar node2;\n\tswitch (node.nodeType) {\n\t\tcase ELEMENT_NODE:\n\t\t\tnode2 = node.cloneNode(false);\n\t\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i',\n\tlt: '<',\n\tquot: '\"',\n});\n\n/**\n * A map of all entities that are detected in an HTML document.\n * They contain all entries from `XML_ENTITIES`.\n *\n * @see {@link XML_ENTITIES}\n * @see {@link DOMParser.parseFromString}\n * @see {@link DOMImplementation.prototype.createHTMLDocument}\n * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5)\n * Spec\n * @see https://html.spec.whatwg.org/entities.json JSON\n * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names\n * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML\n * Wikipedia (HTML)\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML\n * Wikpedia (XHTML)\n */\nexports.HTML_ENTITIES = freeze({\n\tAacute: '\\u00C1',\n\taacute: '\\u00E1',\n\tAbreve: '\\u0102',\n\tabreve: '\\u0103',\n\tac: '\\u223E',\n\tacd: '\\u223F',\n\tacE: '\\u223E\\u0333',\n\tAcirc: '\\u00C2',\n\tacirc: '\\u00E2',\n\tacute: '\\u00B4',\n\tAcy: '\\u0410',\n\tacy: '\\u0430',\n\tAElig: '\\u00C6',\n\taelig: '\\u00E6',\n\taf: '\\u2061',\n\tAfr: '\\uD835\\uDD04',\n\tafr: '\\uD835\\uDD1E',\n\tAgrave: '\\u00C0',\n\tagrave: '\\u00E0',\n\talefsym: '\\u2135',\n\taleph: '\\u2135',\n\tAlpha: '\\u0391',\n\talpha: '\\u03B1',\n\tAmacr: '\\u0100',\n\tamacr: '\\u0101',\n\tamalg: '\\u2A3F',\n\tAMP: '\\u0026',\n\tamp: '\\u0026',\n\tAnd: '\\u2A53',\n\tand: '\\u2227',\n\tandand: '\\u2A55',\n\tandd: '\\u2A5C',\n\tandslope: '\\u2A58',\n\tandv: '\\u2A5A',\n\tang: '\\u2220',\n\tange: '\\u29A4',\n\tangle: '\\u2220',\n\tangmsd: '\\u2221',\n\tangmsdaa: '\\u29A8',\n\tangmsdab: '\\u29A9',\n\tangmsdac: '\\u29AA',\n\tangmsdad: '\\u29AB',\n\tangmsdae: '\\u29AC',\n\tangmsdaf: '\\u29AD',\n\tangmsdag: '\\u29AE',\n\tangmsdah: '\\u29AF',\n\tangrt: '\\u221F',\n\tangrtvb: '\\u22BE',\n\tangrtvbd: '\\u299D',\n\tangsph: '\\u2222',\n\tangst: '\\u00C5',\n\tangzarr: '\\u237C',\n\tAogon: '\\u0104',\n\taogon: '\\u0105',\n\tAopf: '\\uD835\\uDD38',\n\taopf: '\\uD835\\uDD52',\n\tap: '\\u2248',\n\tapacir: '\\u2A6F',\n\tapE: '\\u2A70',\n\tape: '\\u224A',\n\tapid: '\\u224B',\n\tapos: '\\u0027',\n\tApplyFunction: '\\u2061',\n\tapprox: '\\u2248',\n\tapproxeq: '\\u224A',\n\tAring: '\\u00C5',\n\taring: '\\u00E5',\n\tAscr: '\\uD835\\uDC9C',\n\tascr: '\\uD835\\uDCB6',\n\tAssign: '\\u2254',\n\tast: '\\u002A',\n\tasymp: '\\u2248',\n\tasympeq: '\\u224D',\n\tAtilde: '\\u00C3',\n\tatilde: '\\u00E3',\n\tAuml: '\\u00C4',\n\tauml: '\\u00E4',\n\tawconint: '\\u2233',\n\tawint: '\\u2A11',\n\tbackcong: '\\u224C',\n\tbackepsilon: '\\u03F6',\n\tbackprime: '\\u2035',\n\tbacksim: '\\u223D',\n\tbacksimeq: '\\u22CD',\n\tBackslash: '\\u2216',\n\tBarv: '\\u2AE7',\n\tbarvee: '\\u22BD',\n\tBarwed: '\\u2306',\n\tbarwed: '\\u2305',\n\tbarwedge: '\\u2305',\n\tbbrk: '\\u23B5',\n\tbbrktbrk: '\\u23B6',\n\tbcong: '\\u224C',\n\tBcy: '\\u0411',\n\tbcy: '\\u0431',\n\tbdquo: '\\u201E',\n\tbecaus: '\\u2235',\n\tBecause: '\\u2235',\n\tbecause: '\\u2235',\n\tbemptyv: '\\u29B0',\n\tbepsi: '\\u03F6',\n\tbernou: '\\u212C',\n\tBernoullis: '\\u212C',\n\tBeta: '\\u0392',\n\tbeta: '\\u03B2',\n\tbeth: '\\u2136',\n\tbetween: '\\u226C',\n\tBfr: '\\uD835\\uDD05',\n\tbfr: '\\uD835\\uDD1F',\n\tbigcap: '\\u22C2',\n\tbigcirc: '\\u25EF',\n\tbigcup: '\\u22C3',\n\tbigodot: '\\u2A00',\n\tbigoplus: '\\u2A01',\n\tbigotimes: '\\u2A02',\n\tbigsqcup: '\\u2A06',\n\tbigstar: '\\u2605',\n\tbigtriangledown: '\\u25BD',\n\tbigtriangleup: '\\u25B3',\n\tbiguplus: '\\u2A04',\n\tbigvee: '\\u22C1',\n\tbigwedge: '\\u22C0',\n\tbkarow: '\\u290D',\n\tblacklozenge: '\\u29EB',\n\tblacksquare: '\\u25AA',\n\tblacktriangle: '\\u25B4',\n\tblacktriangledown: '\\u25BE',\n\tblacktriangleleft: '\\u25C2',\n\tblacktriangleright: '\\u25B8',\n\tblank: '\\u2423',\n\tblk12: '\\u2592',\n\tblk14: '\\u2591',\n\tblk34: '\\u2593',\n\tblock: '\\u2588',\n\tbne: '\\u003D\\u20E5',\n\tbnequiv: '\\u2261\\u20E5',\n\tbNot: '\\u2AED',\n\tbnot: '\\u2310',\n\tBopf: '\\uD835\\uDD39',\n\tbopf: '\\uD835\\uDD53',\n\tbot: '\\u22A5',\n\tbottom: '\\u22A5',\n\tbowtie: '\\u22C8',\n\tboxbox: '\\u29C9',\n\tboxDL: '\\u2557',\n\tboxDl: '\\u2556',\n\tboxdL: '\\u2555',\n\tboxdl: '\\u2510',\n\tboxDR: '\\u2554',\n\tboxDr: '\\u2553',\n\tboxdR: '\\u2552',\n\tboxdr: '\\u250C',\n\tboxH: '\\u2550',\n\tboxh: '\\u2500',\n\tboxHD: '\\u2566',\n\tboxHd: '\\u2564',\n\tboxhD: '\\u2565',\n\tboxhd: '\\u252C',\n\tboxHU: '\\u2569',\n\tboxHu: '\\u2567',\n\tboxhU: '\\u2568',\n\tboxhu: '\\u2534',\n\tboxminus: '\\u229F',\n\tboxplus: '\\u229E',\n\tboxtimes: '\\u22A0',\n\tboxUL: '\\u255D',\n\tboxUl: '\\u255C',\n\tboxuL: '\\u255B',\n\tboxul: '\\u2518',\n\tboxUR: '\\u255A',\n\tboxUr: '\\u2559',\n\tboxuR: '\\u2558',\n\tboxur: '\\u2514',\n\tboxV: '\\u2551',\n\tboxv: '\\u2502',\n\tboxVH: '\\u256C',\n\tboxVh: '\\u256B',\n\tboxvH: '\\u256A',\n\tboxvh: '\\u253C',\n\tboxVL: '\\u2563',\n\tboxVl: '\\u2562',\n\tboxvL: '\\u2561',\n\tboxvl: '\\u2524',\n\tboxVR: '\\u2560',\n\tboxVr: '\\u255F',\n\tboxvR: '\\u255E',\n\tboxvr: '\\u251C',\n\tbprime: '\\u2035',\n\tBreve: '\\u02D8',\n\tbreve: '\\u02D8',\n\tbrvbar: '\\u00A6',\n\tBscr: '\\u212C',\n\tbscr: '\\uD835\\uDCB7',\n\tbsemi: '\\u204F',\n\tbsim: '\\u223D',\n\tbsime: '\\u22CD',\n\tbsol: '\\u005C',\n\tbsolb: '\\u29C5',\n\tbsolhsub: '\\u27C8',\n\tbull: '\\u2022',\n\tbullet: '\\u2022',\n\tbump: '\\u224E',\n\tbumpE: '\\u2AAE',\n\tbumpe: '\\u224F',\n\tBumpeq: '\\u224E',\n\tbumpeq: '\\u224F',\n\tCacute: '\\u0106',\n\tcacute: '\\u0107',\n\tCap: '\\u22D2',\n\tcap: '\\u2229',\n\tcapand: '\\u2A44',\n\tcapbrcup: '\\u2A49',\n\tcapcap: '\\u2A4B',\n\tcapcup: '\\u2A47',\n\tcapdot: '\\u2A40',\n\tCapitalDifferentialD: '\\u2145',\n\tcaps: '\\u2229\\uFE00',\n\tcaret: '\\u2041',\n\tcaron: '\\u02C7',\n\tCayleys: '\\u212D',\n\tccaps: '\\u2A4D',\n\tCcaron: '\\u010C',\n\tccaron: '\\u010D',\n\tCcedil: '\\u00C7',\n\tccedil: '\\u00E7',\n\tCcirc: '\\u0108',\n\tccirc: '\\u0109',\n\tCconint: '\\u2230',\n\tccups: '\\u2A4C',\n\tccupssm: '\\u2A50',\n\tCdot: '\\u010A',\n\tcdot: '\\u010B',\n\tcedil: '\\u00B8',\n\tCedilla: '\\u00B8',\n\tcemptyv: '\\u29B2',\n\tcent: '\\u00A2',\n\tCenterDot: '\\u00B7',\n\tcenterdot: '\\u00B7',\n\tCfr: '\\u212D',\n\tcfr: '\\uD835\\uDD20',\n\tCHcy: '\\u0427',\n\tchcy: '\\u0447',\n\tcheck: '\\u2713',\n\tcheckmark: '\\u2713',\n\tChi: '\\u03A7',\n\tchi: '\\u03C7',\n\tcir: '\\u25CB',\n\tcirc: '\\u02C6',\n\tcirceq: '\\u2257',\n\tcirclearrowleft: '\\u21BA',\n\tcirclearrowright: '\\u21BB',\n\tcircledast: '\\u229B',\n\tcircledcirc: '\\u229A',\n\tcircleddash: '\\u229D',\n\tCircleDot: '\\u2299',\n\tcircledR: '\\u00AE',\n\tcircledS: '\\u24C8',\n\tCircleMinus: '\\u2296',\n\tCirclePlus: '\\u2295',\n\tCircleTimes: '\\u2297',\n\tcirE: '\\u29C3',\n\tcire: '\\u2257',\n\tcirfnint: '\\u2A10',\n\tcirmid: '\\u2AEF',\n\tcirscir: '\\u29C2',\n\tClockwiseContourIntegral: '\\u2232',\n\tCloseCurlyDoubleQuote: '\\u201D',\n\tCloseCurlyQuote: '\\u2019',\n\tclubs: '\\u2663',\n\tclubsuit: '\\u2663',\n\tColon: '\\u2237',\n\tcolon: '\\u003A',\n\tColone: '\\u2A74',\n\tcolone: '\\u2254',\n\tcoloneq: '\\u2254',\n\tcomma: '\\u002C',\n\tcommat: '\\u0040',\n\tcomp: '\\u2201',\n\tcompfn: '\\u2218',\n\tcomplement: '\\u2201',\n\tcomplexes: '\\u2102',\n\tcong: '\\u2245',\n\tcongdot: '\\u2A6D',\n\tCongruent: '\\u2261',\n\tConint: '\\u222F',\n\tconint: '\\u222E',\n\tContourIntegral: '\\u222E',\n\tCopf: '\\u2102',\n\tcopf: '\\uD835\\uDD54',\n\tcoprod: '\\u2210',\n\tCoproduct: '\\u2210',\n\tCOPY: '\\u00A9',\n\tcopy: '\\u00A9',\n\tcopysr: '\\u2117',\n\tCounterClockwiseContourIntegral: '\\u2233',\n\tcrarr: '\\u21B5',\n\tCross: '\\u2A2F',\n\tcross: '\\u2717',\n\tCscr: '\\uD835\\uDC9E',\n\tcscr: '\\uD835\\uDCB8',\n\tcsub: '\\u2ACF',\n\tcsube: '\\u2AD1',\n\tcsup: '\\u2AD0',\n\tcsupe: '\\u2AD2',\n\tctdot: '\\u22EF',\n\tcudarrl: '\\u2938',\n\tcudarrr: '\\u2935',\n\tcuepr: '\\u22DE',\n\tcuesc: '\\u22DF',\n\tcularr: '\\u21B6',\n\tcularrp: '\\u293D',\n\tCup: '\\u22D3',\n\tcup: '\\u222A',\n\tcupbrcap: '\\u2A48',\n\tCupCap: '\\u224D',\n\tcupcap: '\\u2A46',\n\tcupcup: '\\u2A4A',\n\tcupdot: '\\u228D',\n\tcupor: '\\u2A45',\n\tcups: '\\u222A\\uFE00',\n\tcurarr: '\\u21B7',\n\tcurarrm: '\\u293C',\n\tcurlyeqprec: '\\u22DE',\n\tcurlyeqsucc: '\\u22DF',\n\tcurlyvee: '\\u22CE',\n\tcurlywedge: '\\u22CF',\n\tcurren: '\\u00A4',\n\tcurvearrowleft: '\\u21B6',\n\tcurvearrowright: '\\u21B7',\n\tcuvee: '\\u22CE',\n\tcuwed: '\\u22CF',\n\tcwconint: '\\u2232',\n\tcwint: '\\u2231',\n\tcylcty: '\\u232D',\n\tDagger: '\\u2021',\n\tdagger: '\\u2020',\n\tdaleth: '\\u2138',\n\tDarr: '\\u21A1',\n\tdArr: '\\u21D3',\n\tdarr: '\\u2193',\n\tdash: '\\u2010',\n\tDashv: '\\u2AE4',\n\tdashv: '\\u22A3',\n\tdbkarow: '\\u290F',\n\tdblac: '\\u02DD',\n\tDcaron: '\\u010E',\n\tdcaron: '\\u010F',\n\tDcy: '\\u0414',\n\tdcy: '\\u0434',\n\tDD: '\\u2145',\n\tdd: '\\u2146',\n\tddagger: '\\u2021',\n\tddarr: '\\u21CA',\n\tDDotrahd: '\\u2911',\n\tddotseq: '\\u2A77',\n\tdeg: '\\u00B0',\n\tDel: '\\u2207',\n\tDelta: '\\u0394',\n\tdelta: '\\u03B4',\n\tdemptyv: '\\u29B1',\n\tdfisht: '\\u297F',\n\tDfr: '\\uD835\\uDD07',\n\tdfr: '\\uD835\\uDD21',\n\tdHar: '\\u2965',\n\tdharl: '\\u21C3',\n\tdharr: '\\u21C2',\n\tDiacriticalAcute: '\\u00B4',\n\tDiacriticalDot: '\\u02D9',\n\tDiacriticalDoubleAcute: '\\u02DD',\n\tDiacriticalGrave: '\\u0060',\n\tDiacriticalTilde: '\\u02DC',\n\tdiam: '\\u22C4',\n\tDiamond: '\\u22C4',\n\tdiamond: '\\u22C4',\n\tdiamondsuit: '\\u2666',\n\tdiams: '\\u2666',\n\tdie: '\\u00A8',\n\tDifferentialD: '\\u2146',\n\tdigamma: '\\u03DD',\n\tdisin: '\\u22F2',\n\tdiv: '\\u00F7',\n\tdivide: '\\u00F7',\n\tdivideontimes: '\\u22C7',\n\tdivonx: '\\u22C7',\n\tDJcy: '\\u0402',\n\tdjcy: '\\u0452',\n\tdlcorn: '\\u231E',\n\tdlcrop: '\\u230D',\n\tdollar: '\\u0024',\n\tDopf: '\\uD835\\uDD3B',\n\tdopf: '\\uD835\\uDD55',\n\tDot: '\\u00A8',\n\tdot: '\\u02D9',\n\tDotDot: '\\u20DC',\n\tdoteq: '\\u2250',\n\tdoteqdot: '\\u2251',\n\tDotEqual: '\\u2250',\n\tdotminus: '\\u2238',\n\tdotplus: '\\u2214',\n\tdotsquare: '\\u22A1',\n\tdoublebarwedge: '\\u2306',\n\tDoubleContourIntegral: '\\u222F',\n\tDoubleDot: '\\u00A8',\n\tDoubleDownArrow: '\\u21D3',\n\tDoubleLeftArrow: '\\u21D0',\n\tDoubleLeftRightArrow: '\\u21D4',\n\tDoubleLeftTee: '\\u2AE4',\n\tDoubleLongLeftArrow: '\\u27F8',\n\tDoubleLongLeftRightArrow: '\\u27FA',\n\tDoubleLongRightArrow: '\\u27F9',\n\tDoubleRightArrow: '\\u21D2',\n\tDoubleRightTee: '\\u22A8',\n\tDoubleUpArrow: '\\u21D1',\n\tDoubleUpDownArrow: '\\u21D5',\n\tDoubleVerticalBar: '\\u2225',\n\tDownArrow: '\\u2193',\n\tDownarrow: '\\u21D3',\n\tdownarrow: '\\u2193',\n\tDownArrowBar: '\\u2913',\n\tDownArrowUpArrow: '\\u21F5',\n\tDownBreve: '\\u0311',\n\tdowndownarrows: '\\u21CA',\n\tdownharpoonleft: '\\u21C3',\n\tdownharpoonright: '\\u21C2',\n\tDownLeftRightVector: '\\u2950',\n\tDownLeftTeeVector: '\\u295E',\n\tDownLeftVector: '\\u21BD',\n\tDownLeftVectorBar: '\\u2956',\n\tDownRightTeeVector: '\\u295F',\n\tDownRightVector: '\\u21C1',\n\tDownRightVectorBar: '\\u2957',\n\tDownTee: '\\u22A4',\n\tDownTeeArrow: '\\u21A7',\n\tdrbkarow: '\\u2910',\n\tdrcorn: '\\u231F',\n\tdrcrop: '\\u230C',\n\tDscr: '\\uD835\\uDC9F',\n\tdscr: '\\uD835\\uDCB9',\n\tDScy: '\\u0405',\n\tdscy: '\\u0455',\n\tdsol: '\\u29F6',\n\tDstrok: '\\u0110',\n\tdstrok: '\\u0111',\n\tdtdot: '\\u22F1',\n\tdtri: '\\u25BF',\n\tdtrif: '\\u25BE',\n\tduarr: '\\u21F5',\n\tduhar: '\\u296F',\n\tdwangle: '\\u29A6',\n\tDZcy: '\\u040F',\n\tdzcy: '\\u045F',\n\tdzigrarr: '\\u27FF',\n\tEacute: '\\u00C9',\n\teacute: '\\u00E9',\n\teaster: '\\u2A6E',\n\tEcaron: '\\u011A',\n\tecaron: '\\u011B',\n\tecir: '\\u2256',\n\tEcirc: '\\u00CA',\n\tecirc: '\\u00EA',\n\tecolon: '\\u2255',\n\tEcy: '\\u042D',\n\tecy: '\\u044D',\n\teDDot: '\\u2A77',\n\tEdot: '\\u0116',\n\teDot: '\\u2251',\n\tedot: '\\u0117',\n\tee: '\\u2147',\n\tefDot: '\\u2252',\n\tEfr: '\\uD835\\uDD08',\n\tefr: '\\uD835\\uDD22',\n\teg: '\\u2A9A',\n\tEgrave: '\\u00C8',\n\tegrave: '\\u00E8',\n\tegs: '\\u2A96',\n\tegsdot: '\\u2A98',\n\tel: '\\u2A99',\n\tElement: '\\u2208',\n\telinters: '\\u23E7',\n\tell: '\\u2113',\n\tels: '\\u2A95',\n\telsdot: '\\u2A97',\n\tEmacr: '\\u0112',\n\temacr: '\\u0113',\n\tempty: '\\u2205',\n\temptyset: '\\u2205',\n\tEmptySmallSquare: '\\u25FB',\n\temptyv: '\\u2205',\n\tEmptyVerySmallSquare: '\\u25AB',\n\temsp: '\\u2003',\n\temsp13: '\\u2004',\n\temsp14: '\\u2005',\n\tENG: '\\u014A',\n\teng: '\\u014B',\n\tensp: '\\u2002',\n\tEogon: '\\u0118',\n\teogon: '\\u0119',\n\tEopf: '\\uD835\\uDD3C',\n\teopf: '\\uD835\\uDD56',\n\tepar: '\\u22D5',\n\teparsl: '\\u29E3',\n\teplus: '\\u2A71',\n\tepsi: '\\u03B5',\n\tEpsilon: '\\u0395',\n\tepsilon: '\\u03B5',\n\tepsiv: '\\u03F5',\n\teqcirc: '\\u2256',\n\teqcolon: '\\u2255',\n\teqsim: '\\u2242',\n\teqslantgtr: '\\u2A96',\n\teqslantless: '\\u2A95',\n\tEqual: '\\u2A75',\n\tequals: '\\u003D',\n\tEqualTilde: '\\u2242',\n\tequest: '\\u225F',\n\tEquilibrium: '\\u21CC',\n\tequiv: '\\u2261',\n\tequivDD: '\\u2A78',\n\teqvparsl: '\\u29E5',\n\terarr: '\\u2971',\n\terDot: '\\u2253',\n\tEscr: '\\u2130',\n\tescr: '\\u212F',\n\tesdot: '\\u2250',\n\tEsim: '\\u2A73',\n\tesim: '\\u2242',\n\tEta: '\\u0397',\n\teta: '\\u03B7',\n\tETH: '\\u00D0',\n\teth: '\\u00F0',\n\tEuml: '\\u00CB',\n\teuml: '\\u00EB',\n\teuro: '\\u20AC',\n\texcl: '\\u0021',\n\texist: '\\u2203',\n\tExists: '\\u2203',\n\texpectation: '\\u2130',\n\tExponentialE: '\\u2147',\n\texponentiale: '\\u2147',\n\tfallingdotseq: '\\u2252',\n\tFcy: '\\u0424',\n\tfcy: '\\u0444',\n\tfemale: '\\u2640',\n\tffilig: '\\uFB03',\n\tfflig: '\\uFB00',\n\tffllig: '\\uFB04',\n\tFfr: '\\uD835\\uDD09',\n\tffr: '\\uD835\\uDD23',\n\tfilig: '\\uFB01',\n\tFilledSmallSquare: '\\u25FC',\n\tFilledVerySmallSquare: '\\u25AA',\n\tfjlig: '\\u0066\\u006A',\n\tflat: '\\u266D',\n\tfllig: '\\uFB02',\n\tfltns: '\\u25B1',\n\tfnof: '\\u0192',\n\tFopf: '\\uD835\\uDD3D',\n\tfopf: '\\uD835\\uDD57',\n\tForAll: '\\u2200',\n\tforall: '\\u2200',\n\tfork: '\\u22D4',\n\tforkv: '\\u2AD9',\n\tFouriertrf: '\\u2131',\n\tfpartint: '\\u2A0D',\n\tfrac12: '\\u00BD',\n\tfrac13: '\\u2153',\n\tfrac14: '\\u00BC',\n\tfrac15: '\\u2155',\n\tfrac16: '\\u2159',\n\tfrac18: '\\u215B',\n\tfrac23: '\\u2154',\n\tfrac25: '\\u2156',\n\tfrac34: '\\u00BE',\n\tfrac35: '\\u2157',\n\tfrac38: '\\u215C',\n\tfrac45: '\\u2158',\n\tfrac56: '\\u215A',\n\tfrac58: '\\u215D',\n\tfrac78: '\\u215E',\n\tfrasl: '\\u2044',\n\tfrown: '\\u2322',\n\tFscr: '\\u2131',\n\tfscr: '\\uD835\\uDCBB',\n\tgacute: '\\u01F5',\n\tGamma: '\\u0393',\n\tgamma: '\\u03B3',\n\tGammad: '\\u03DC',\n\tgammad: '\\u03DD',\n\tgap: '\\u2A86',\n\tGbreve: '\\u011E',\n\tgbreve: '\\u011F',\n\tGcedil: '\\u0122',\n\tGcirc: '\\u011C',\n\tgcirc: '\\u011D',\n\tGcy: '\\u0413',\n\tgcy: '\\u0433',\n\tGdot: '\\u0120',\n\tgdot: '\\u0121',\n\tgE: '\\u2267',\n\tge: '\\u2265',\n\tgEl: '\\u2A8C',\n\tgel: '\\u22DB',\n\tgeq: '\\u2265',\n\tgeqq: '\\u2267',\n\tgeqslant: '\\u2A7E',\n\tges: '\\u2A7E',\n\tgescc: '\\u2AA9',\n\tgesdot: '\\u2A80',\n\tgesdoto: '\\u2A82',\n\tgesdotol: '\\u2A84',\n\tgesl: '\\u22DB\\uFE00',\n\tgesles: '\\u2A94',\n\tGfr: '\\uD835\\uDD0A',\n\tgfr: '\\uD835\\uDD24',\n\tGg: '\\u22D9',\n\tgg: '\\u226B',\n\tggg: '\\u22D9',\n\tgimel: '\\u2137',\n\tGJcy: '\\u0403',\n\tgjcy: '\\u0453',\n\tgl: '\\u2277',\n\tgla: '\\u2AA5',\n\tglE: '\\u2A92',\n\tglj: '\\u2AA4',\n\tgnap: '\\u2A8A',\n\tgnapprox: '\\u2A8A',\n\tgnE: '\\u2269',\n\tgne: '\\u2A88',\n\tgneq: '\\u2A88',\n\tgneqq: '\\u2269',\n\tgnsim: '\\u22E7',\n\tGopf: '\\uD835\\uDD3E',\n\tgopf: '\\uD835\\uDD58',\n\tgrave: '\\u0060',\n\tGreaterEqual: '\\u2265',\n\tGreaterEqualLess: '\\u22DB',\n\tGreaterFullEqual: '\\u2267',\n\tGreaterGreater: '\\u2AA2',\n\tGreaterLess: '\\u2277',\n\tGreaterSlantEqual: '\\u2A7E',\n\tGreaterTilde: '\\u2273',\n\tGscr: '\\uD835\\uDCA2',\n\tgscr: '\\u210A',\n\tgsim: '\\u2273',\n\tgsime: '\\u2A8E',\n\tgsiml: '\\u2A90',\n\tGt: '\\u226B',\n\tGT: '\\u003E',\n\tgt: '\\u003E',\n\tgtcc: '\\u2AA7',\n\tgtcir: '\\u2A7A',\n\tgtdot: '\\u22D7',\n\tgtlPar: '\\u2995',\n\tgtquest: '\\u2A7C',\n\tgtrapprox: '\\u2A86',\n\tgtrarr: '\\u2978',\n\tgtrdot: '\\u22D7',\n\tgtreqless: '\\u22DB',\n\tgtreqqless: '\\u2A8C',\n\tgtrless: '\\u2277',\n\tgtrsim: '\\u2273',\n\tgvertneqq: '\\u2269\\uFE00',\n\tgvnE: '\\u2269\\uFE00',\n\tHacek: '\\u02C7',\n\thairsp: '\\u200A',\n\thalf: '\\u00BD',\n\thamilt: '\\u210B',\n\tHARDcy: '\\u042A',\n\thardcy: '\\u044A',\n\thArr: '\\u21D4',\n\tharr: '\\u2194',\n\tharrcir: '\\u2948',\n\tharrw: '\\u21AD',\n\tHat: '\\u005E',\n\thbar: '\\u210F',\n\tHcirc: '\\u0124',\n\thcirc: '\\u0125',\n\thearts: '\\u2665',\n\theartsuit: '\\u2665',\n\thellip: '\\u2026',\n\thercon: '\\u22B9',\n\tHfr: '\\u210C',\n\thfr: '\\uD835\\uDD25',\n\tHilbertSpace: '\\u210B',\n\thksearow: '\\u2925',\n\thkswarow: '\\u2926',\n\thoarr: '\\u21FF',\n\thomtht: '\\u223B',\n\thookleftarrow: '\\u21A9',\n\thookrightarrow: '\\u21AA',\n\tHopf: '\\u210D',\n\thopf: '\\uD835\\uDD59',\n\thorbar: '\\u2015',\n\tHorizontalLine: '\\u2500',\n\tHscr: '\\u210B',\n\thscr: '\\uD835\\uDCBD',\n\thslash: '\\u210F',\n\tHstrok: '\\u0126',\n\thstrok: '\\u0127',\n\tHumpDownHump: '\\u224E',\n\tHumpEqual: '\\u224F',\n\thybull: '\\u2043',\n\thyphen: '\\u2010',\n\tIacute: '\\u00CD',\n\tiacute: '\\u00ED',\n\tic: '\\u2063',\n\tIcirc: '\\u00CE',\n\ticirc: '\\u00EE',\n\tIcy: '\\u0418',\n\ticy: '\\u0438',\n\tIdot: '\\u0130',\n\tIEcy: '\\u0415',\n\tiecy: '\\u0435',\n\tiexcl: '\\u00A1',\n\tiff: '\\u21D4',\n\tIfr: '\\u2111',\n\tifr: '\\uD835\\uDD26',\n\tIgrave: '\\u00CC',\n\tigrave: '\\u00EC',\n\tii: '\\u2148',\n\tiiiint: '\\u2A0C',\n\tiiint: '\\u222D',\n\tiinfin: '\\u29DC',\n\tiiota: '\\u2129',\n\tIJlig: '\\u0132',\n\tijlig: '\\u0133',\n\tIm: '\\u2111',\n\tImacr: '\\u012A',\n\timacr: '\\u012B',\n\timage: '\\u2111',\n\tImaginaryI: '\\u2148',\n\timagline: '\\u2110',\n\timagpart: '\\u2111',\n\timath: '\\u0131',\n\timof: '\\u22B7',\n\timped: '\\u01B5',\n\tImplies: '\\u21D2',\n\tin: '\\u2208',\n\tincare: '\\u2105',\n\tinfin: '\\u221E',\n\tinfintie: '\\u29DD',\n\tinodot: '\\u0131',\n\tInt: '\\u222C',\n\tint: '\\u222B',\n\tintcal: '\\u22BA',\n\tintegers: '\\u2124',\n\tIntegral: '\\u222B',\n\tintercal: '\\u22BA',\n\tIntersection: '\\u22C2',\n\tintlarhk: '\\u2A17',\n\tintprod: '\\u2A3C',\n\tInvisibleComma: '\\u2063',\n\tInvisibleTimes: '\\u2062',\n\tIOcy: '\\u0401',\n\tiocy: '\\u0451',\n\tIogon: '\\u012E',\n\tiogon: '\\u012F',\n\tIopf: '\\uD835\\uDD40',\n\tiopf: '\\uD835\\uDD5A',\n\tIota: '\\u0399',\n\tiota: '\\u03B9',\n\tiprod: '\\u2A3C',\n\tiquest: '\\u00BF',\n\tIscr: '\\u2110',\n\tiscr: '\\uD835\\uDCBE',\n\tisin: '\\u2208',\n\tisindot: '\\u22F5',\n\tisinE: '\\u22F9',\n\tisins: '\\u22F4',\n\tisinsv: '\\u22F3',\n\tisinv: '\\u2208',\n\tit: '\\u2062',\n\tItilde: '\\u0128',\n\titilde: '\\u0129',\n\tIukcy: '\\u0406',\n\tiukcy: '\\u0456',\n\tIuml: '\\u00CF',\n\tiuml: '\\u00EF',\n\tJcirc: '\\u0134',\n\tjcirc: '\\u0135',\n\tJcy: '\\u0419',\n\tjcy: '\\u0439',\n\tJfr: '\\uD835\\uDD0D',\n\tjfr: '\\uD835\\uDD27',\n\tjmath: '\\u0237',\n\tJopf: '\\uD835\\uDD41',\n\tjopf: '\\uD835\\uDD5B',\n\tJscr: '\\uD835\\uDCA5',\n\tjscr: '\\uD835\\uDCBF',\n\tJsercy: '\\u0408',\n\tjsercy: '\\u0458',\n\tJukcy: '\\u0404',\n\tjukcy: '\\u0454',\n\tKappa: '\\u039A',\n\tkappa: '\\u03BA',\n\tkappav: '\\u03F0',\n\tKcedil: '\\u0136',\n\tkcedil: '\\u0137',\n\tKcy: '\\u041A',\n\tkcy: '\\u043A',\n\tKfr: '\\uD835\\uDD0E',\n\tkfr: '\\uD835\\uDD28',\n\tkgreen: '\\u0138',\n\tKHcy: '\\u0425',\n\tkhcy: '\\u0445',\n\tKJcy: '\\u040C',\n\tkjcy: '\\u045C',\n\tKopf: '\\uD835\\uDD42',\n\tkopf: '\\uD835\\uDD5C',\n\tKscr: '\\uD835\\uDCA6',\n\tkscr: '\\uD835\\uDCC0',\n\tlAarr: '\\u21DA',\n\tLacute: '\\u0139',\n\tlacute: '\\u013A',\n\tlaemptyv: '\\u29B4',\n\tlagran: '\\u2112',\n\tLambda: '\\u039B',\n\tlambda: '\\u03BB',\n\tLang: '\\u27EA',\n\tlang: '\\u27E8',\n\tlangd: '\\u2991',\n\tlangle: '\\u27E8',\n\tlap: '\\u2A85',\n\tLaplacetrf: '\\u2112',\n\tlaquo: '\\u00AB',\n\tLarr: '\\u219E',\n\tlArr: '\\u21D0',\n\tlarr: '\\u2190',\n\tlarrb: '\\u21E4',\n\tlarrbfs: '\\u291F',\n\tlarrfs: '\\u291D',\n\tlarrhk: '\\u21A9',\n\tlarrlp: '\\u21AB',\n\tlarrpl: '\\u2939',\n\tlarrsim: '\\u2973',\n\tlarrtl: '\\u21A2',\n\tlat: '\\u2AAB',\n\tlAtail: '\\u291B',\n\tlatail: '\\u2919',\n\tlate: '\\u2AAD',\n\tlates: '\\u2AAD\\uFE00',\n\tlBarr: '\\u290E',\n\tlbarr: '\\u290C',\n\tlbbrk: '\\u2772',\n\tlbrace: '\\u007B',\n\tlbrack: '\\u005B',\n\tlbrke: '\\u298B',\n\tlbrksld: '\\u298F',\n\tlbrkslu: '\\u298D',\n\tLcaron: '\\u013D',\n\tlcaron: '\\u013E',\n\tLcedil: '\\u013B',\n\tlcedil: '\\u013C',\n\tlceil: '\\u2308',\n\tlcub: '\\u007B',\n\tLcy: '\\u041B',\n\tlcy: '\\u043B',\n\tldca: '\\u2936',\n\tldquo: '\\u201C',\n\tldquor: '\\u201E',\n\tldrdhar: '\\u2967',\n\tldrushar: '\\u294B',\n\tldsh: '\\u21B2',\n\tlE: '\\u2266',\n\tle: '\\u2264',\n\tLeftAngleBracket: '\\u27E8',\n\tLeftArrow: '\\u2190',\n\tLeftarrow: '\\u21D0',\n\tleftarrow: '\\u2190',\n\tLeftArrowBar: '\\u21E4',\n\tLeftArrowRightArrow: '\\u21C6',\n\tleftarrowtail: '\\u21A2',\n\tLeftCeiling: '\\u2308',\n\tLeftDoubleBracket: '\\u27E6',\n\tLeftDownTeeVector: '\\u2961',\n\tLeftDownVector: '\\u21C3',\n\tLeftDownVectorBar: '\\u2959',\n\tLeftFloor: '\\u230A',\n\tleftharpoondown: '\\u21BD',\n\tleftharpoonup: '\\u21BC',\n\tleftleftarrows: '\\u21C7',\n\tLeftRightArrow: '\\u2194',\n\tLeftrightarrow: '\\u21D4',\n\tleftrightarrow: '\\u2194',\n\tleftrightarrows: '\\u21C6',\n\tleftrightharpoons: '\\u21CB',\n\tleftrightsquigarrow: '\\u21AD',\n\tLeftRightVector: '\\u294E',\n\tLeftTee: '\\u22A3',\n\tLeftTeeArrow: '\\u21A4',\n\tLeftTeeVector: '\\u295A',\n\tleftthreetimes: '\\u22CB',\n\tLeftTriangle: '\\u22B2',\n\tLeftTriangleBar: '\\u29CF',\n\tLeftTriangleEqual: '\\u22B4',\n\tLeftUpDownVector: '\\u2951',\n\tLeftUpTeeVector: '\\u2960',\n\tLeftUpVector: '\\u21BF',\n\tLeftUpVectorBar: '\\u2958',\n\tLeftVector: '\\u21BC',\n\tLeftVectorBar: '\\u2952',\n\tlEg: '\\u2A8B',\n\tleg: '\\u22DA',\n\tleq: '\\u2264',\n\tleqq: '\\u2266',\n\tleqslant: '\\u2A7D',\n\tles: '\\u2A7D',\n\tlescc: '\\u2AA8',\n\tlesdot: '\\u2A7F',\n\tlesdoto: '\\u2A81',\n\tlesdotor: '\\u2A83',\n\tlesg: '\\u22DA\\uFE00',\n\tlesges: '\\u2A93',\n\tlessapprox: '\\u2A85',\n\tlessdot: '\\u22D6',\n\tlesseqgtr: '\\u22DA',\n\tlesseqqgtr: '\\u2A8B',\n\tLessEqualGreater: '\\u22DA',\n\tLessFullEqual: '\\u2266',\n\tLessGreater: '\\u2276',\n\tlessgtr: '\\u2276',\n\tLessLess: '\\u2AA1',\n\tlesssim: '\\u2272',\n\tLessSlantEqual: '\\u2A7D',\n\tLessTilde: '\\u2272',\n\tlfisht: '\\u297C',\n\tlfloor: '\\u230A',\n\tLfr: '\\uD835\\uDD0F',\n\tlfr: '\\uD835\\uDD29',\n\tlg: '\\u2276',\n\tlgE: '\\u2A91',\n\tlHar: '\\u2962',\n\tlhard: '\\u21BD',\n\tlharu: '\\u21BC',\n\tlharul: '\\u296A',\n\tlhblk: '\\u2584',\n\tLJcy: '\\u0409',\n\tljcy: '\\u0459',\n\tLl: '\\u22D8',\n\tll: '\\u226A',\n\tllarr: '\\u21C7',\n\tllcorner: '\\u231E',\n\tLleftarrow: '\\u21DA',\n\tllhard: '\\u296B',\n\tlltri: '\\u25FA',\n\tLmidot: '\\u013F',\n\tlmidot: '\\u0140',\n\tlmoust: '\\u23B0',\n\tlmoustache: '\\u23B0',\n\tlnap: '\\u2A89',\n\tlnapprox: '\\u2A89',\n\tlnE: '\\u2268',\n\tlne: '\\u2A87',\n\tlneq: '\\u2A87',\n\tlneqq: '\\u2268',\n\tlnsim: '\\u22E6',\n\tloang: '\\u27EC',\n\tloarr: '\\u21FD',\n\tlobrk: '\\u27E6',\n\tLongLeftArrow: '\\u27F5',\n\tLongleftarrow: '\\u27F8',\n\tlongleftarrow: '\\u27F5',\n\tLongLeftRightArrow: '\\u27F7',\n\tLongleftrightarrow: '\\u27FA',\n\tlongleftrightarrow: '\\u27F7',\n\tlongmapsto: '\\u27FC',\n\tLongRightArrow: '\\u27F6',\n\tLongrightarrow: '\\u27F9',\n\tlongrightarrow: '\\u27F6',\n\tlooparrowleft: '\\u21AB',\n\tlooparrowright: '\\u21AC',\n\tlopar: '\\u2985',\n\tLopf: '\\uD835\\uDD43',\n\tlopf: '\\uD835\\uDD5D',\n\tloplus: '\\u2A2D',\n\tlotimes: '\\u2A34',\n\tlowast: '\\u2217',\n\tlowbar: '\\u005F',\n\tLowerLeftArrow: '\\u2199',\n\tLowerRightArrow: '\\u2198',\n\tloz: '\\u25CA',\n\tlozenge: '\\u25CA',\n\tlozf: '\\u29EB',\n\tlpar: '\\u0028',\n\tlparlt: '\\u2993',\n\tlrarr: '\\u21C6',\n\tlrcorner: '\\u231F',\n\tlrhar: '\\u21CB',\n\tlrhard: '\\u296D',\n\tlrm: '\\u200E',\n\tlrtri: '\\u22BF',\n\tlsaquo: '\\u2039',\n\tLscr: '\\u2112',\n\tlscr: '\\uD835\\uDCC1',\n\tLsh: '\\u21B0',\n\tlsh: '\\u21B0',\n\tlsim: '\\u2272',\n\tlsime: '\\u2A8D',\n\tlsimg: '\\u2A8F',\n\tlsqb: '\\u005B',\n\tlsquo: '\\u2018',\n\tlsquor: '\\u201A',\n\tLstrok: '\\u0141',\n\tlstrok: '\\u0142',\n\tLt: '\\u226A',\n\tLT: '\\u003C',\n\tlt: '\\u003C',\n\tltcc: '\\u2AA6',\n\tltcir: '\\u2A79',\n\tltdot: '\\u22D6',\n\tlthree: '\\u22CB',\n\tltimes: '\\u22C9',\n\tltlarr: '\\u2976',\n\tltquest: '\\u2A7B',\n\tltri: '\\u25C3',\n\tltrie: '\\u22B4',\n\tltrif: '\\u25C2',\n\tltrPar: '\\u2996',\n\tlurdshar: '\\u294A',\n\tluruhar: '\\u2966',\n\tlvertneqq: '\\u2268\\uFE00',\n\tlvnE: '\\u2268\\uFE00',\n\tmacr: '\\u00AF',\n\tmale: '\\u2642',\n\tmalt: '\\u2720',\n\tmaltese: '\\u2720',\n\tMap: '\\u2905',\n\tmap: '\\u21A6',\n\tmapsto: '\\u21A6',\n\tmapstodown: '\\u21A7',\n\tmapstoleft: '\\u21A4',\n\tmapstoup: '\\u21A5',\n\tmarker: '\\u25AE',\n\tmcomma: '\\u2A29',\n\tMcy: '\\u041C',\n\tmcy: '\\u043C',\n\tmdash: '\\u2014',\n\tmDDot: '\\u223A',\n\tmeasuredangle: '\\u2221',\n\tMediumSpace: '\\u205F',\n\tMellintrf: '\\u2133',\n\tMfr: '\\uD835\\uDD10',\n\tmfr: '\\uD835\\uDD2A',\n\tmho: '\\u2127',\n\tmicro: '\\u00B5',\n\tmid: '\\u2223',\n\tmidast: '\\u002A',\n\tmidcir: '\\u2AF0',\n\tmiddot: '\\u00B7',\n\tminus: '\\u2212',\n\tminusb: '\\u229F',\n\tminusd: '\\u2238',\n\tminusdu: '\\u2A2A',\n\tMinusPlus: '\\u2213',\n\tmlcp: '\\u2ADB',\n\tmldr: '\\u2026',\n\tmnplus: '\\u2213',\n\tmodels: '\\u22A7',\n\tMopf: '\\uD835\\uDD44',\n\tmopf: '\\uD835\\uDD5E',\n\tmp: '\\u2213',\n\tMscr: '\\u2133',\n\tmscr: '\\uD835\\uDCC2',\n\tmstpos: '\\u223E',\n\tMu: '\\u039C',\n\tmu: '\\u03BC',\n\tmultimap: '\\u22B8',\n\tmumap: '\\u22B8',\n\tnabla: '\\u2207',\n\tNacute: '\\u0143',\n\tnacute: '\\u0144',\n\tnang: '\\u2220\\u20D2',\n\tnap: '\\u2249',\n\tnapE: '\\u2A70\\u0338',\n\tnapid: '\\u224B\\u0338',\n\tnapos: '\\u0149',\n\tnapprox: '\\u2249',\n\tnatur: '\\u266E',\n\tnatural: '\\u266E',\n\tnaturals: '\\u2115',\n\tnbsp: '\\u00A0',\n\tnbump: '\\u224E\\u0338',\n\tnbumpe: '\\u224F\\u0338',\n\tncap: '\\u2A43',\n\tNcaron: '\\u0147',\n\tncaron: '\\u0148',\n\tNcedil: '\\u0145',\n\tncedil: '\\u0146',\n\tncong: '\\u2247',\n\tncongdot: '\\u2A6D\\u0338',\n\tncup: '\\u2A42',\n\tNcy: '\\u041D',\n\tncy: '\\u043D',\n\tndash: '\\u2013',\n\tne: '\\u2260',\n\tnearhk: '\\u2924',\n\tneArr: '\\u21D7',\n\tnearr: '\\u2197',\n\tnearrow: '\\u2197',\n\tnedot: '\\u2250\\u0338',\n\tNegativeMediumSpace: '\\u200B',\n\tNegativeThickSpace: '\\u200B',\n\tNegativeThinSpace: '\\u200B',\n\tNegativeVeryThinSpace: '\\u200B',\n\tnequiv: '\\u2262',\n\tnesear: '\\u2928',\n\tnesim: '\\u2242\\u0338',\n\tNestedGreaterGreater: '\\u226B',\n\tNestedLessLess: '\\u226A',\n\tNewLine: '\\u000A',\n\tnexist: '\\u2204',\n\tnexists: '\\u2204',\n\tNfr: '\\uD835\\uDD11',\n\tnfr: '\\uD835\\uDD2B',\n\tngE: '\\u2267\\u0338',\n\tnge: '\\u2271',\n\tngeq: '\\u2271',\n\tngeqq: '\\u2267\\u0338',\n\tngeqslant: '\\u2A7E\\u0338',\n\tnges: '\\u2A7E\\u0338',\n\tnGg: '\\u22D9\\u0338',\n\tngsim: '\\u2275',\n\tnGt: '\\u226B\\u20D2',\n\tngt: '\\u226F',\n\tngtr: '\\u226F',\n\tnGtv: '\\u226B\\u0338',\n\tnhArr: '\\u21CE',\n\tnharr: '\\u21AE',\n\tnhpar: '\\u2AF2',\n\tni: '\\u220B',\n\tnis: '\\u22FC',\n\tnisd: '\\u22FA',\n\tniv: '\\u220B',\n\tNJcy: '\\u040A',\n\tnjcy: '\\u045A',\n\tnlArr: '\\u21CD',\n\tnlarr: '\\u219A',\n\tnldr: '\\u2025',\n\tnlE: '\\u2266\\u0338',\n\tnle: '\\u2270',\n\tnLeftarrow: '\\u21CD',\n\tnleftarrow: '\\u219A',\n\tnLeftrightarrow: '\\u21CE',\n\tnleftrightarrow: '\\u21AE',\n\tnleq: '\\u2270',\n\tnleqq: '\\u2266\\u0338',\n\tnleqslant: '\\u2A7D\\u0338',\n\tnles: '\\u2A7D\\u0338',\n\tnless: '\\u226E',\n\tnLl: '\\u22D8\\u0338',\n\tnlsim: '\\u2274',\n\tnLt: '\\u226A\\u20D2',\n\tnlt: '\\u226E',\n\tnltri: '\\u22EA',\n\tnltrie: '\\u22EC',\n\tnLtv: '\\u226A\\u0338',\n\tnmid: '\\u2224',\n\tNoBreak: '\\u2060',\n\tNonBreakingSpace: '\\u00A0',\n\tNopf: '\\u2115',\n\tnopf: '\\uD835\\uDD5F',\n\tNot: '\\u2AEC',\n\tnot: '\\u00AC',\n\tNotCongruent: '\\u2262',\n\tNotCupCap: '\\u226D',\n\tNotDoubleVerticalBar: '\\u2226',\n\tNotElement: '\\u2209',\n\tNotEqual: '\\u2260',\n\tNotEqualTilde: '\\u2242\\u0338',\n\tNotExists: '\\u2204',\n\tNotGreater: '\\u226F',\n\tNotGreaterEqual: '\\u2271',\n\tNotGreaterFullEqual: '\\u2267\\u0338',\n\tNotGreaterGreater: '\\u226B\\u0338',\n\tNotGreaterLess: '\\u2279',\n\tNotGreaterSlantEqual: '\\u2A7E\\u0338',\n\tNotGreaterTilde: '\\u2275',\n\tNotHumpDownHump: '\\u224E\\u0338',\n\tNotHumpEqual: '\\u224F\\u0338',\n\tnotin: '\\u2209',\n\tnotindot: '\\u22F5\\u0338',\n\tnotinE: '\\u22F9\\u0338',\n\tnotinva: '\\u2209',\n\tnotinvb: '\\u22F7',\n\tnotinvc: '\\u22F6',\n\tNotLeftTriangle: '\\u22EA',\n\tNotLeftTriangleBar: '\\u29CF\\u0338',\n\tNotLeftTriangleEqual: '\\u22EC',\n\tNotLess: '\\u226E',\n\tNotLessEqual: '\\u2270',\n\tNotLessGreater: '\\u2278',\n\tNotLessLess: '\\u226A\\u0338',\n\tNotLessSlantEqual: '\\u2A7D\\u0338',\n\tNotLessTilde: '\\u2274',\n\tNotNestedGreaterGreater: '\\u2AA2\\u0338',\n\tNotNestedLessLess: '\\u2AA1\\u0338',\n\tnotni: '\\u220C',\n\tnotniva: '\\u220C',\n\tnotnivb: '\\u22FE',\n\tnotnivc: '\\u22FD',\n\tNotPrecedes: '\\u2280',\n\tNotPrecedesEqual: '\\u2AAF\\u0338',\n\tNotPrecedesSlantEqual: '\\u22E0',\n\tNotReverseElement: '\\u220C',\n\tNotRightTriangle: '\\u22EB',\n\tNotRightTriangleBar: '\\u29D0\\u0338',\n\tNotRightTriangleEqual: '\\u22ED',\n\tNotSquareSubset: '\\u228F\\u0338',\n\tNotSquareSubsetEqual: '\\u22E2',\n\tNotSquareSuperset: '\\u2290\\u0338',\n\tNotSquareSupersetEqual: '\\u22E3',\n\tNotSubset: '\\u2282\\u20D2',\n\tNotSubsetEqual: '\\u2288',\n\tNotSucceeds: '\\u2281',\n\tNotSucceedsEqual: '\\u2AB0\\u0338',\n\tNotSucceedsSlantEqual: '\\u22E1',\n\tNotSucceedsTilde: '\\u227F\\u0338',\n\tNotSuperset: '\\u2283\\u20D2',\n\tNotSupersetEqual: '\\u2289',\n\tNotTilde: '\\u2241',\n\tNotTildeEqual: '\\u2244',\n\tNotTildeFullEqual: '\\u2247',\n\tNotTildeTilde: '\\u2249',\n\tNotVerticalBar: '\\u2224',\n\tnpar: '\\u2226',\n\tnparallel: '\\u2226',\n\tnparsl: '\\u2AFD\\u20E5',\n\tnpart: '\\u2202\\u0338',\n\tnpolint: '\\u2A14',\n\tnpr: '\\u2280',\n\tnprcue: '\\u22E0',\n\tnpre: '\\u2AAF\\u0338',\n\tnprec: '\\u2280',\n\tnpreceq: '\\u2AAF\\u0338',\n\tnrArr: '\\u21CF',\n\tnrarr: '\\u219B',\n\tnrarrc: '\\u2933\\u0338',\n\tnrarrw: '\\u219D\\u0338',\n\tnRightarrow: '\\u21CF',\n\tnrightarrow: '\\u219B',\n\tnrtri: '\\u22EB',\n\tnrtrie: '\\u22ED',\n\tnsc: '\\u2281',\n\tnsccue: '\\u22E1',\n\tnsce: '\\u2AB0\\u0338',\n\tNscr: '\\uD835\\uDCA9',\n\tnscr: '\\uD835\\uDCC3',\n\tnshortmid: '\\u2224',\n\tnshortparallel: '\\u2226',\n\tnsim: '\\u2241',\n\tnsime: '\\u2244',\n\tnsimeq: '\\u2244',\n\tnsmid: '\\u2224',\n\tnspar: '\\u2226',\n\tnsqsube: '\\u22E2',\n\tnsqsupe: '\\u22E3',\n\tnsub: '\\u2284',\n\tnsubE: '\\u2AC5\\u0338',\n\tnsube: '\\u2288',\n\tnsubset: '\\u2282\\u20D2',\n\tnsubseteq: '\\u2288',\n\tnsubseteqq: '\\u2AC5\\u0338',\n\tnsucc: '\\u2281',\n\tnsucceq: '\\u2AB0\\u0338',\n\tnsup: '\\u2285',\n\tnsupE: '\\u2AC6\\u0338',\n\tnsupe: '\\u2289',\n\tnsupset: '\\u2283\\u20D2',\n\tnsupseteq: '\\u2289',\n\tnsupseteqq: '\\u2AC6\\u0338',\n\tntgl: '\\u2279',\n\tNtilde: '\\u00D1',\n\tntilde: '\\u00F1',\n\tntlg: '\\u2278',\n\tntriangleleft: '\\u22EA',\n\tntrianglelefteq: '\\u22EC',\n\tntriangleright: '\\u22EB',\n\tntrianglerighteq: '\\u22ED',\n\tNu: '\\u039D',\n\tnu: '\\u03BD',\n\tnum: '\\u0023',\n\tnumero: '\\u2116',\n\tnumsp: '\\u2007',\n\tnvap: '\\u224D\\u20D2',\n\tnVDash: '\\u22AF',\n\tnVdash: '\\u22AE',\n\tnvDash: '\\u22AD',\n\tnvdash: '\\u22AC',\n\tnvge: '\\u2265\\u20D2',\n\tnvgt: '\\u003E\\u20D2',\n\tnvHarr: '\\u2904',\n\tnvinfin: '\\u29DE',\n\tnvlArr: '\\u2902',\n\tnvle: '\\u2264\\u20D2',\n\tnvlt: '\\u003C\\u20D2',\n\tnvltrie: '\\u22B4\\u20D2',\n\tnvrArr: '\\u2903',\n\tnvrtrie: '\\u22B5\\u20D2',\n\tnvsim: '\\u223C\\u20D2',\n\tnwarhk: '\\u2923',\n\tnwArr: '\\u21D6',\n\tnwarr: '\\u2196',\n\tnwarrow: '\\u2196',\n\tnwnear: '\\u2927',\n\tOacute: '\\u00D3',\n\toacute: '\\u00F3',\n\toast: '\\u229B',\n\tocir: '\\u229A',\n\tOcirc: '\\u00D4',\n\tocirc: '\\u00F4',\n\tOcy: '\\u041E',\n\tocy: '\\u043E',\n\todash: '\\u229D',\n\tOdblac: '\\u0150',\n\todblac: '\\u0151',\n\todiv: '\\u2A38',\n\todot: '\\u2299',\n\todsold: '\\u29BC',\n\tOElig: '\\u0152',\n\toelig: '\\u0153',\n\tofcir: '\\u29BF',\n\tOfr: '\\uD835\\uDD12',\n\tofr: '\\uD835\\uDD2C',\n\togon: '\\u02DB',\n\tOgrave: '\\u00D2',\n\tograve: '\\u00F2',\n\togt: '\\u29C1',\n\tohbar: '\\u29B5',\n\tohm: '\\u03A9',\n\toint: '\\u222E',\n\tolarr: '\\u21BA',\n\tolcir: '\\u29BE',\n\tolcross: '\\u29BB',\n\toline: '\\u203E',\n\tolt: '\\u29C0',\n\tOmacr: '\\u014C',\n\tomacr: '\\u014D',\n\tOmega: '\\u03A9',\n\tomega: '\\u03C9',\n\tOmicron: '\\u039F',\n\tomicron: '\\u03BF',\n\tomid: '\\u29B6',\n\tominus: '\\u2296',\n\tOopf: '\\uD835\\uDD46',\n\toopf: '\\uD835\\uDD60',\n\topar: '\\u29B7',\n\tOpenCurlyDoubleQuote: '\\u201C',\n\tOpenCurlyQuote: '\\u2018',\n\toperp: '\\u29B9',\n\toplus: '\\u2295',\n\tOr: '\\u2A54',\n\tor: '\\u2228',\n\torarr: '\\u21BB',\n\tord: '\\u2A5D',\n\torder: '\\u2134',\n\torderof: '\\u2134',\n\tordf: '\\u00AA',\n\tordm: '\\u00BA',\n\torigof: '\\u22B6',\n\toror: '\\u2A56',\n\torslope: '\\u2A57',\n\torv: '\\u2A5B',\n\toS: '\\u24C8',\n\tOscr: '\\uD835\\uDCAA',\n\toscr: '\\u2134',\n\tOslash: '\\u00D8',\n\toslash: '\\u00F8',\n\tosol: '\\u2298',\n\tOtilde: '\\u00D5',\n\totilde: '\\u00F5',\n\tOtimes: '\\u2A37',\n\totimes: '\\u2297',\n\totimesas: '\\u2A36',\n\tOuml: '\\u00D6',\n\touml: '\\u00F6',\n\tovbar: '\\u233D',\n\tOverBar: '\\u203E',\n\tOverBrace: '\\u23DE',\n\tOverBracket: '\\u23B4',\n\tOverParenthesis: '\\u23DC',\n\tpar: '\\u2225',\n\tpara: '\\u00B6',\n\tparallel: '\\u2225',\n\tparsim: '\\u2AF3',\n\tparsl: '\\u2AFD',\n\tpart: '\\u2202',\n\tPartialD: '\\u2202',\n\tPcy: '\\u041F',\n\tpcy: '\\u043F',\n\tpercnt: '\\u0025',\n\tperiod: '\\u002E',\n\tpermil: '\\u2030',\n\tperp: '\\u22A5',\n\tpertenk: '\\u2031',\n\tPfr: '\\uD835\\uDD13',\n\tpfr: '\\uD835\\uDD2D',\n\tPhi: '\\u03A6',\n\tphi: '\\u03C6',\n\tphiv: '\\u03D5',\n\tphmmat: '\\u2133',\n\tphone: '\\u260E',\n\tPi: '\\u03A0',\n\tpi: '\\u03C0',\n\tpitchfork: '\\u22D4',\n\tpiv: '\\u03D6',\n\tplanck: '\\u210F',\n\tplanckh: '\\u210E',\n\tplankv: '\\u210F',\n\tplus: '\\u002B',\n\tplusacir: '\\u2A23',\n\tplusb: '\\u229E',\n\tpluscir: '\\u2A22',\n\tplusdo: '\\u2214',\n\tplusdu: '\\u2A25',\n\tpluse: '\\u2A72',\n\tPlusMinus: '\\u00B1',\n\tplusmn: '\\u00B1',\n\tplussim: '\\u2A26',\n\tplustwo: '\\u2A27',\n\tpm: '\\u00B1',\n\tPoincareplane: '\\u210C',\n\tpointint: '\\u2A15',\n\tPopf: '\\u2119',\n\tpopf: '\\uD835\\uDD61',\n\tpound: '\\u00A3',\n\tPr: '\\u2ABB',\n\tpr: '\\u227A',\n\tprap: '\\u2AB7',\n\tprcue: '\\u227C',\n\tprE: '\\u2AB3',\n\tpre: '\\u2AAF',\n\tprec: '\\u227A',\n\tprecapprox: '\\u2AB7',\n\tpreccurlyeq: '\\u227C',\n\tPrecedes: '\\u227A',\n\tPrecedesEqual: '\\u2AAF',\n\tPrecedesSlantEqual: '\\u227C',\n\tPrecedesTilde: '\\u227E',\n\tpreceq: '\\u2AAF',\n\tprecnapprox: '\\u2AB9',\n\tprecneqq: '\\u2AB5',\n\tprecnsim: '\\u22E8',\n\tprecsim: '\\u227E',\n\tPrime: '\\u2033',\n\tprime: '\\u2032',\n\tprimes: '\\u2119',\n\tprnap: '\\u2AB9',\n\tprnE: '\\u2AB5',\n\tprnsim: '\\u22E8',\n\tprod: '\\u220F',\n\tProduct: '\\u220F',\n\tprofalar: '\\u232E',\n\tprofline: '\\u2312',\n\tprofsurf: '\\u2313',\n\tprop: '\\u221D',\n\tProportion: '\\u2237',\n\tProportional: '\\u221D',\n\tpropto: '\\u221D',\n\tprsim: '\\u227E',\n\tprurel: '\\u22B0',\n\tPscr: '\\uD835\\uDCAB',\n\tpscr: '\\uD835\\uDCC5',\n\tPsi: '\\u03A8',\n\tpsi: '\\u03C8',\n\tpuncsp: '\\u2008',\n\tQfr: '\\uD835\\uDD14',\n\tqfr: '\\uD835\\uDD2E',\n\tqint: '\\u2A0C',\n\tQopf: '\\u211A',\n\tqopf: '\\uD835\\uDD62',\n\tqprime: '\\u2057',\n\tQscr: '\\uD835\\uDCAC',\n\tqscr: '\\uD835\\uDCC6',\n\tquaternions: '\\u210D',\n\tquatint: '\\u2A16',\n\tquest: '\\u003F',\n\tquesteq: '\\u225F',\n\tQUOT: '\\u0022',\n\tquot: '\\u0022',\n\trAarr: '\\u21DB',\n\trace: '\\u223D\\u0331',\n\tRacute: '\\u0154',\n\tracute: '\\u0155',\n\tradic: '\\u221A',\n\traemptyv: '\\u29B3',\n\tRang: '\\u27EB',\n\trang: '\\u27E9',\n\trangd: '\\u2992',\n\trange: '\\u29A5',\n\trangle: '\\u27E9',\n\traquo: '\\u00BB',\n\tRarr: '\\u21A0',\n\trArr: '\\u21D2',\n\trarr: '\\u2192',\n\trarrap: '\\u2975',\n\trarrb: '\\u21E5',\n\trarrbfs: '\\u2920',\n\trarrc: '\\u2933',\n\trarrfs: '\\u291E',\n\trarrhk: '\\u21AA',\n\trarrlp: '\\u21AC',\n\trarrpl: '\\u2945',\n\trarrsim: '\\u2974',\n\tRarrtl: '\\u2916',\n\trarrtl: '\\u21A3',\n\trarrw: '\\u219D',\n\trAtail: '\\u291C',\n\tratail: '\\u291A',\n\tratio: '\\u2236',\n\trationals: '\\u211A',\n\tRBarr: '\\u2910',\n\trBarr: '\\u290F',\n\trbarr: '\\u290D',\n\trbbrk: '\\u2773',\n\trbrace: '\\u007D',\n\trbrack: '\\u005D',\n\trbrke: '\\u298C',\n\trbrksld: '\\u298E',\n\trbrkslu: '\\u2990',\n\tRcaron: '\\u0158',\n\trcaron: '\\u0159',\n\tRcedil: '\\u0156',\n\trcedil: '\\u0157',\n\trceil: '\\u2309',\n\trcub: '\\u007D',\n\tRcy: '\\u0420',\n\trcy: '\\u0440',\n\trdca: '\\u2937',\n\trdldhar: '\\u2969',\n\trdquo: '\\u201D',\n\trdquor: '\\u201D',\n\trdsh: '\\u21B3',\n\tRe: '\\u211C',\n\treal: '\\u211C',\n\trealine: '\\u211B',\n\trealpart: '\\u211C',\n\treals: '\\u211D',\n\trect: '\\u25AD',\n\tREG: '\\u00AE',\n\treg: '\\u00AE',\n\tReverseElement: '\\u220B',\n\tReverseEquilibrium: '\\u21CB',\n\tReverseUpEquilibrium: '\\u296F',\n\trfisht: '\\u297D',\n\trfloor: '\\u230B',\n\tRfr: '\\u211C',\n\trfr: '\\uD835\\uDD2F',\n\trHar: '\\u2964',\n\trhard: '\\u21C1',\n\trharu: '\\u21C0',\n\trharul: '\\u296C',\n\tRho: '\\u03A1',\n\trho: '\\u03C1',\n\trhov: '\\u03F1',\n\tRightAngleBracket: '\\u27E9',\n\tRightArrow: '\\u2192',\n\tRightarrow: '\\u21D2',\n\trightarrow: '\\u2192',\n\tRightArrowBar: '\\u21E5',\n\tRightArrowLeftArrow: '\\u21C4',\n\trightarrowtail: '\\u21A3',\n\tRightCeiling: '\\u2309',\n\tRightDoubleBracket: '\\u27E7',\n\tRightDownTeeVector: '\\u295D',\n\tRightDownVector: '\\u21C2',\n\tRightDownVectorBar: '\\u2955',\n\tRightFloor: '\\u230B',\n\trightharpoondown: '\\u21C1',\n\trightharpoonup: '\\u21C0',\n\trightleftarrows: '\\u21C4',\n\trightleftharpoons: '\\u21CC',\n\trightrightarrows: '\\u21C9',\n\trightsquigarrow: '\\u219D',\n\tRightTee: '\\u22A2',\n\tRightTeeArrow: '\\u21A6',\n\tRightTeeVector: '\\u295B',\n\trightthreetimes: '\\u22CC',\n\tRightTriangle: '\\u22B3',\n\tRightTriangleBar: '\\u29D0',\n\tRightTriangleEqual: '\\u22B5',\n\tRightUpDownVector: '\\u294F',\n\tRightUpTeeVector: '\\u295C',\n\tRightUpVector: '\\u21BE',\n\tRightUpVectorBar: '\\u2954',\n\tRightVector: '\\u21C0',\n\tRightVectorBar: '\\u2953',\n\tring: '\\u02DA',\n\trisingdotseq: '\\u2253',\n\trlarr: '\\u21C4',\n\trlhar: '\\u21CC',\n\trlm: '\\u200F',\n\trmoust: '\\u23B1',\n\trmoustache: '\\u23B1',\n\trnmid: '\\u2AEE',\n\troang: '\\u27ED',\n\troarr: '\\u21FE',\n\trobrk: '\\u27E7',\n\tropar: '\\u2986',\n\tRopf: '\\u211D',\n\tropf: '\\uD835\\uDD63',\n\troplus: '\\u2A2E',\n\trotimes: '\\u2A35',\n\tRoundImplies: '\\u2970',\n\trpar: '\\u0029',\n\trpargt: '\\u2994',\n\trppolint: '\\u2A12',\n\trrarr: '\\u21C9',\n\tRrightarrow: '\\u21DB',\n\trsaquo: '\\u203A',\n\tRscr: '\\u211B',\n\trscr: '\\uD835\\uDCC7',\n\tRsh: '\\u21B1',\n\trsh: '\\u21B1',\n\trsqb: '\\u005D',\n\trsquo: '\\u2019',\n\trsquor: '\\u2019',\n\trthree: '\\u22CC',\n\trtimes: '\\u22CA',\n\trtri: '\\u25B9',\n\trtrie: '\\u22B5',\n\trtrif: '\\u25B8',\n\trtriltri: '\\u29CE',\n\tRuleDelayed: '\\u29F4',\n\truluhar: '\\u2968',\n\trx: '\\u211E',\n\tSacute: '\\u015A',\n\tsacute: '\\u015B',\n\tsbquo: '\\u201A',\n\tSc: '\\u2ABC',\n\tsc: '\\u227B',\n\tscap: '\\u2AB8',\n\tScaron: '\\u0160',\n\tscaron: '\\u0161',\n\tsccue: '\\u227D',\n\tscE: '\\u2AB4',\n\tsce: '\\u2AB0',\n\tScedil: '\\u015E',\n\tscedil: '\\u015F',\n\tScirc: '\\u015C',\n\tscirc: '\\u015D',\n\tscnap: '\\u2ABA',\n\tscnE: '\\u2AB6',\n\tscnsim: '\\u22E9',\n\tscpolint: '\\u2A13',\n\tscsim: '\\u227F',\n\tScy: '\\u0421',\n\tscy: '\\u0441',\n\tsdot: '\\u22C5',\n\tsdotb: '\\u22A1',\n\tsdote: '\\u2A66',\n\tsearhk: '\\u2925',\n\tseArr: '\\u21D8',\n\tsearr: '\\u2198',\n\tsearrow: '\\u2198',\n\tsect: '\\u00A7',\n\tsemi: '\\u003B',\n\tseswar: '\\u2929',\n\tsetminus: '\\u2216',\n\tsetmn: '\\u2216',\n\tsext: '\\u2736',\n\tSfr: '\\uD835\\uDD16',\n\tsfr: '\\uD835\\uDD30',\n\tsfrown: '\\u2322',\n\tsharp: '\\u266F',\n\tSHCHcy: '\\u0429',\n\tshchcy: '\\u0449',\n\tSHcy: '\\u0428',\n\tshcy: '\\u0448',\n\tShortDownArrow: '\\u2193',\n\tShortLeftArrow: '\\u2190',\n\tshortmid: '\\u2223',\n\tshortparallel: '\\u2225',\n\tShortRightArrow: '\\u2192',\n\tShortUpArrow: '\\u2191',\n\tshy: '\\u00AD',\n\tSigma: '\\u03A3',\n\tsigma: '\\u03C3',\n\tsigmaf: '\\u03C2',\n\tsigmav: '\\u03C2',\n\tsim: '\\u223C',\n\tsimdot: '\\u2A6A',\n\tsime: '\\u2243',\n\tsimeq: '\\u2243',\n\tsimg: '\\u2A9E',\n\tsimgE: '\\u2AA0',\n\tsiml: '\\u2A9D',\n\tsimlE: '\\u2A9F',\n\tsimne: '\\u2246',\n\tsimplus: '\\u2A24',\n\tsimrarr: '\\u2972',\n\tslarr: '\\u2190',\n\tSmallCircle: '\\u2218',\n\tsmallsetminus: '\\u2216',\n\tsmashp: '\\u2A33',\n\tsmeparsl: '\\u29E4',\n\tsmid: '\\u2223',\n\tsmile: '\\u2323',\n\tsmt: '\\u2AAA',\n\tsmte: '\\u2AAC',\n\tsmtes: '\\u2AAC\\uFE00',\n\tSOFTcy: '\\u042C',\n\tsoftcy: '\\u044C',\n\tsol: '\\u002F',\n\tsolb: '\\u29C4',\n\tsolbar: '\\u233F',\n\tSopf: '\\uD835\\uDD4A',\n\tsopf: '\\uD835\\uDD64',\n\tspades: '\\u2660',\n\tspadesuit: '\\u2660',\n\tspar: '\\u2225',\n\tsqcap: '\\u2293',\n\tsqcaps: '\\u2293\\uFE00',\n\tsqcup: '\\u2294',\n\tsqcups: '\\u2294\\uFE00',\n\tSqrt: '\\u221A',\n\tsqsub: '\\u228F',\n\tsqsube: '\\u2291',\n\tsqsubset: '\\u228F',\n\tsqsubseteq: '\\u2291',\n\tsqsup: '\\u2290',\n\tsqsupe: '\\u2292',\n\tsqsupset: '\\u2290',\n\tsqsupseteq: '\\u2292',\n\tsqu: '\\u25A1',\n\tSquare: '\\u25A1',\n\tsquare: '\\u25A1',\n\tSquareIntersection: '\\u2293',\n\tSquareSubset: '\\u228F',\n\tSquareSubsetEqual: '\\u2291',\n\tSquareSuperset: '\\u2290',\n\tSquareSupersetEqual: '\\u2292',\n\tSquareUnion: '\\u2294',\n\tsquarf: '\\u25AA',\n\tsquf: '\\u25AA',\n\tsrarr: '\\u2192',\n\tSscr: '\\uD835\\uDCAE',\n\tsscr: '\\uD835\\uDCC8',\n\tssetmn: '\\u2216',\n\tssmile: '\\u2323',\n\tsstarf: '\\u22C6',\n\tStar: '\\u22C6',\n\tstar: '\\u2606',\n\tstarf: '\\u2605',\n\tstraightepsilon: '\\u03F5',\n\tstraightphi: '\\u03D5',\n\tstrns: '\\u00AF',\n\tSub: '\\u22D0',\n\tsub: '\\u2282',\n\tsubdot: '\\u2ABD',\n\tsubE: '\\u2AC5',\n\tsube: '\\u2286',\n\tsubedot: '\\u2AC3',\n\tsubmult: '\\u2AC1',\n\tsubnE: '\\u2ACB',\n\tsubne: '\\u228A',\n\tsubplus: '\\u2ABF',\n\tsubrarr: '\\u2979',\n\tSubset: '\\u22D0',\n\tsubset: '\\u2282',\n\tsubseteq: '\\u2286',\n\tsubseteqq: '\\u2AC5',\n\tSubsetEqual: '\\u2286',\n\tsubsetneq: '\\u228A',\n\tsubsetneqq: '\\u2ACB',\n\tsubsim: '\\u2AC7',\n\tsubsub: '\\u2AD5',\n\tsubsup: '\\u2AD3',\n\tsucc: '\\u227B',\n\tsuccapprox: '\\u2AB8',\n\tsucccurlyeq: '\\u227D',\n\tSucceeds: '\\u227B',\n\tSucceedsEqual: '\\u2AB0',\n\tSucceedsSlantEqual: '\\u227D',\n\tSucceedsTilde: '\\u227F',\n\tsucceq: '\\u2AB0',\n\tsuccnapprox: '\\u2ABA',\n\tsuccneqq: '\\u2AB6',\n\tsuccnsim: '\\u22E9',\n\tsuccsim: '\\u227F',\n\tSuchThat: '\\u220B',\n\tSum: '\\u2211',\n\tsum: '\\u2211',\n\tsung: '\\u266A',\n\tSup: '\\u22D1',\n\tsup: '\\u2283',\n\tsup1: '\\u00B9',\n\tsup2: '\\u00B2',\n\tsup3: '\\u00B3',\n\tsupdot: '\\u2ABE',\n\tsupdsub: '\\u2AD8',\n\tsupE: '\\u2AC6',\n\tsupe: '\\u2287',\n\tsupedot: '\\u2AC4',\n\tSuperset: '\\u2283',\n\tSupersetEqual: '\\u2287',\n\tsuphsol: '\\u27C9',\n\tsuphsub: '\\u2AD7',\n\tsuplarr: '\\u297B',\n\tsupmult: '\\u2AC2',\n\tsupnE: '\\u2ACC',\n\tsupne: '\\u228B',\n\tsupplus: '\\u2AC0',\n\tSupset: '\\u22D1',\n\tsupset: '\\u2283',\n\tsupseteq: '\\u2287',\n\tsupseteqq: '\\u2AC6',\n\tsupsetneq: '\\u228B',\n\tsupsetneqq: '\\u2ACC',\n\tsupsim: '\\u2AC8',\n\tsupsub: '\\u2AD4',\n\tsupsup: '\\u2AD6',\n\tswarhk: '\\u2926',\n\tswArr: '\\u21D9',\n\tswarr: '\\u2199',\n\tswarrow: '\\u2199',\n\tswnwar: '\\u292A',\n\tszlig: '\\u00DF',\n\tTab: '\\u0009',\n\ttarget: '\\u2316',\n\tTau: '\\u03A4',\n\ttau: '\\u03C4',\n\ttbrk: '\\u23B4',\n\tTcaron: '\\u0164',\n\ttcaron: '\\u0165',\n\tTcedil: '\\u0162',\n\ttcedil: '\\u0163',\n\tTcy: '\\u0422',\n\ttcy: '\\u0442',\n\ttdot: '\\u20DB',\n\ttelrec: '\\u2315',\n\tTfr: '\\uD835\\uDD17',\n\ttfr: '\\uD835\\uDD31',\n\tthere4: '\\u2234',\n\tTherefore: '\\u2234',\n\ttherefore: '\\u2234',\n\tTheta: '\\u0398',\n\ttheta: '\\u03B8',\n\tthetasym: '\\u03D1',\n\tthetav: '\\u03D1',\n\tthickapprox: '\\u2248',\n\tthicksim: '\\u223C',\n\tThickSpace: '\\u205F\\u200A',\n\tthinsp: '\\u2009',\n\tThinSpace: '\\u2009',\n\tthkap: '\\u2248',\n\tthksim: '\\u223C',\n\tTHORN: '\\u00DE',\n\tthorn: '\\u00FE',\n\tTilde: '\\u223C',\n\ttilde: '\\u02DC',\n\tTildeEqual: '\\u2243',\n\tTildeFullEqual: '\\u2245',\n\tTildeTilde: '\\u2248',\n\ttimes: '\\u00D7',\n\ttimesb: '\\u22A0',\n\ttimesbar: '\\u2A31',\n\ttimesd: '\\u2A30',\n\ttint: '\\u222D',\n\ttoea: '\\u2928',\n\ttop: '\\u22A4',\n\ttopbot: '\\u2336',\n\ttopcir: '\\u2AF1',\n\tTopf: '\\uD835\\uDD4B',\n\ttopf: '\\uD835\\uDD65',\n\ttopfork: '\\u2ADA',\n\ttosa: '\\u2929',\n\ttprime: '\\u2034',\n\tTRADE: '\\u2122',\n\ttrade: '\\u2122',\n\ttriangle: '\\u25B5',\n\ttriangledown: '\\u25BF',\n\ttriangleleft: '\\u25C3',\n\ttrianglelefteq: '\\u22B4',\n\ttriangleq: '\\u225C',\n\ttriangleright: '\\u25B9',\n\ttrianglerighteq: '\\u22B5',\n\ttridot: '\\u25EC',\n\ttrie: '\\u225C',\n\ttriminus: '\\u2A3A',\n\tTripleDot: '\\u20DB',\n\ttriplus: '\\u2A39',\n\ttrisb: '\\u29CD',\n\ttritime: '\\u2A3B',\n\ttrpezium: '\\u23E2',\n\tTscr: '\\uD835\\uDCAF',\n\ttscr: '\\uD835\\uDCC9',\n\tTScy: '\\u0426',\n\ttscy: '\\u0446',\n\tTSHcy: '\\u040B',\n\ttshcy: '\\u045B',\n\tTstrok: '\\u0166',\n\ttstrok: '\\u0167',\n\ttwixt: '\\u226C',\n\ttwoheadleftarrow: '\\u219E',\n\ttwoheadrightarrow: '\\u21A0',\n\tUacute: '\\u00DA',\n\tuacute: '\\u00FA',\n\tUarr: '\\u219F',\n\tuArr: '\\u21D1',\n\tuarr: '\\u2191',\n\tUarrocir: '\\u2949',\n\tUbrcy: '\\u040E',\n\tubrcy: '\\u045E',\n\tUbreve: '\\u016C',\n\tubreve: '\\u016D',\n\tUcirc: '\\u00DB',\n\tucirc: '\\u00FB',\n\tUcy: '\\u0423',\n\tucy: '\\u0443',\n\tudarr: '\\u21C5',\n\tUdblac: '\\u0170',\n\tudblac: '\\u0171',\n\tudhar: '\\u296E',\n\tufisht: '\\u297E',\n\tUfr: '\\uD835\\uDD18',\n\tufr: '\\uD835\\uDD32',\n\tUgrave: '\\u00D9',\n\tugrave: '\\u00F9',\n\tuHar: '\\u2963',\n\tuharl: '\\u21BF',\n\tuharr: '\\u21BE',\n\tuhblk: '\\u2580',\n\tulcorn: '\\u231C',\n\tulcorner: '\\u231C',\n\tulcrop: '\\u230F',\n\tultri: '\\u25F8',\n\tUmacr: '\\u016A',\n\tumacr: '\\u016B',\n\tuml: '\\u00A8',\n\tUnderBar: '\\u005F',\n\tUnderBrace: '\\u23DF',\n\tUnderBracket: '\\u23B5',\n\tUnderParenthesis: '\\u23DD',\n\tUnion: '\\u22C3',\n\tUnionPlus: '\\u228E',\n\tUogon: '\\u0172',\n\tuogon: '\\u0173',\n\tUopf: '\\uD835\\uDD4C',\n\tuopf: '\\uD835\\uDD66',\n\tUpArrow: '\\u2191',\n\tUparrow: '\\u21D1',\n\tuparrow: '\\u2191',\n\tUpArrowBar: '\\u2912',\n\tUpArrowDownArrow: '\\u21C5',\n\tUpDownArrow: '\\u2195',\n\tUpdownarrow: '\\u21D5',\n\tupdownarrow: '\\u2195',\n\tUpEquilibrium: '\\u296E',\n\tupharpoonleft: '\\u21BF',\n\tupharpoonright: '\\u21BE',\n\tuplus: '\\u228E',\n\tUpperLeftArrow: '\\u2196',\n\tUpperRightArrow: '\\u2197',\n\tUpsi: '\\u03D2',\n\tupsi: '\\u03C5',\n\tupsih: '\\u03D2',\n\tUpsilon: '\\u03A5',\n\tupsilon: '\\u03C5',\n\tUpTee: '\\u22A5',\n\tUpTeeArrow: '\\u21A5',\n\tupuparrows: '\\u21C8',\n\turcorn: '\\u231D',\n\turcorner: '\\u231D',\n\turcrop: '\\u230E',\n\tUring: '\\u016E',\n\turing: '\\u016F',\n\turtri: '\\u25F9',\n\tUscr: '\\uD835\\uDCB0',\n\tuscr: '\\uD835\\uDCCA',\n\tutdot: '\\u22F0',\n\tUtilde: '\\u0168',\n\tutilde: '\\u0169',\n\tutri: '\\u25B5',\n\tutrif: '\\u25B4',\n\tuuarr: '\\u21C8',\n\tUuml: '\\u00DC',\n\tuuml: '\\u00FC',\n\tuwangle: '\\u29A7',\n\tvangrt: '\\u299C',\n\tvarepsilon: '\\u03F5',\n\tvarkappa: '\\u03F0',\n\tvarnothing: '\\u2205',\n\tvarphi: '\\u03D5',\n\tvarpi: '\\u03D6',\n\tvarpropto: '\\u221D',\n\tvArr: '\\u21D5',\n\tvarr: '\\u2195',\n\tvarrho: '\\u03F1',\n\tvarsigma: '\\u03C2',\n\tvarsubsetneq: '\\u228A\\uFE00',\n\tvarsubsetneqq: '\\u2ACB\\uFE00',\n\tvarsupsetneq: '\\u228B\\uFE00',\n\tvarsupsetneqq: '\\u2ACC\\uFE00',\n\tvartheta: '\\u03D1',\n\tvartriangleleft: '\\u22B2',\n\tvartriangleright: '\\u22B3',\n\tVbar: '\\u2AEB',\n\tvBar: '\\u2AE8',\n\tvBarv: '\\u2AE9',\n\tVcy: '\\u0412',\n\tvcy: '\\u0432',\n\tVDash: '\\u22AB',\n\tVdash: '\\u22A9',\n\tvDash: '\\u22A8',\n\tvdash: '\\u22A2',\n\tVdashl: '\\u2AE6',\n\tVee: '\\u22C1',\n\tvee: '\\u2228',\n\tveebar: '\\u22BB',\n\tveeeq: '\\u225A',\n\tvellip: '\\u22EE',\n\tVerbar: '\\u2016',\n\tverbar: '\\u007C',\n\tVert: '\\u2016',\n\tvert: '\\u007C',\n\tVerticalBar: '\\u2223',\n\tVerticalLine: '\\u007C',\n\tVerticalSeparator: '\\u2758',\n\tVerticalTilde: '\\u2240',\n\tVeryThinSpace: '\\u200A',\n\tVfr: '\\uD835\\uDD19',\n\tvfr: '\\uD835\\uDD33',\n\tvltri: '\\u22B2',\n\tvnsub: '\\u2282\\u20D2',\n\tvnsup: '\\u2283\\u20D2',\n\tVopf: '\\uD835\\uDD4D',\n\tvopf: '\\uD835\\uDD67',\n\tvprop: '\\u221D',\n\tvrtri: '\\u22B3',\n\tVscr: '\\uD835\\uDCB1',\n\tvscr: '\\uD835\\uDCCB',\n\tvsubnE: '\\u2ACB\\uFE00',\n\tvsubne: '\\u228A\\uFE00',\n\tvsupnE: '\\u2ACC\\uFE00',\n\tvsupne: '\\u228B\\uFE00',\n\tVvdash: '\\u22AA',\n\tvzigzag: '\\u299A',\n\tWcirc: '\\u0174',\n\twcirc: '\\u0175',\n\twedbar: '\\u2A5F',\n\tWedge: '\\u22C0',\n\twedge: '\\u2227',\n\twedgeq: '\\u2259',\n\tweierp: '\\u2118',\n\tWfr: '\\uD835\\uDD1A',\n\twfr: '\\uD835\\uDD34',\n\tWopf: '\\uD835\\uDD4E',\n\twopf: '\\uD835\\uDD68',\n\twp: '\\u2118',\n\twr: '\\u2240',\n\twreath: '\\u2240',\n\tWscr: '\\uD835\\uDCB2',\n\twscr: '\\uD835\\uDCCC',\n\txcap: '\\u22C2',\n\txcirc: '\\u25EF',\n\txcup: '\\u22C3',\n\txdtri: '\\u25BD',\n\tXfr: '\\uD835\\uDD1B',\n\txfr: '\\uD835\\uDD35',\n\txhArr: '\\u27FA',\n\txharr: '\\u27F7',\n\tXi: '\\u039E',\n\txi: '\\u03BE',\n\txlArr: '\\u27F8',\n\txlarr: '\\u27F5',\n\txmap: '\\u27FC',\n\txnis: '\\u22FB',\n\txodot: '\\u2A00',\n\tXopf: '\\uD835\\uDD4F',\n\txopf: '\\uD835\\uDD69',\n\txoplus: '\\u2A01',\n\txotime: '\\u2A02',\n\txrArr: '\\u27F9',\n\txrarr: '\\u27F6',\n\tXscr: '\\uD835\\uDCB3',\n\txscr: '\\uD835\\uDCCD',\n\txsqcup: '\\u2A06',\n\txuplus: '\\u2A04',\n\txutri: '\\u25B3',\n\txvee: '\\u22C1',\n\txwedge: '\\u22C0',\n\tYacute: '\\u00DD',\n\tyacute: '\\u00FD',\n\tYAcy: '\\u042F',\n\tyacy: '\\u044F',\n\tYcirc: '\\u0176',\n\tycirc: '\\u0177',\n\tYcy: '\\u042B',\n\tycy: '\\u044B',\n\tyen: '\\u00A5',\n\tYfr: '\\uD835\\uDD1C',\n\tyfr: '\\uD835\\uDD36',\n\tYIcy: '\\u0407',\n\tyicy: '\\u0457',\n\tYopf: '\\uD835\\uDD50',\n\tyopf: '\\uD835\\uDD6A',\n\tYscr: '\\uD835\\uDCB4',\n\tyscr: '\\uD835\\uDCCE',\n\tYUcy: '\\u042E',\n\tyucy: '\\u044E',\n\tYuml: '\\u0178',\n\tyuml: '\\u00FF',\n\tZacute: '\\u0179',\n\tzacute: '\\u017A',\n\tZcaron: '\\u017D',\n\tzcaron: '\\u017E',\n\tZcy: '\\u0417',\n\tzcy: '\\u0437',\n\tZdot: '\\u017B',\n\tzdot: '\\u017C',\n\tzeetrf: '\\u2128',\n\tZeroWidthSpace: '\\u200B',\n\tZeta: '\\u0396',\n\tzeta: '\\u03B6',\n\tZfr: '\\u2128',\n\tzfr: '\\uD835\\uDD37',\n\tZHcy: '\\u0416',\n\tzhcy: '\\u0436',\n\tzigrarr: '\\u21DD',\n\tZopf: '\\u2124',\n\tzopf: '\\uD835\\uDD6B',\n\tZscr: '\\uD835\\uDCB5',\n\tzscr: '\\uD835\\uDCCF',\n\tzwj: '\\u200D',\n\tzwnj: '\\u200C',\n});\n\n/**\n * @deprecated\n * Use `HTML_ENTITIES` instead.\n * @see {@link HTML_ENTITIES}\n */\nexports.entityMap = exports.HTML_ENTITIES;\n","'use strict';\n\nvar conventions = require('./conventions');\n\nfunction extendError(constructor, writableName) {\n\tconstructor.prototype = Object.create(Error.prototype, {\n\t\tconstructor: { value: constructor },\n\t\tname: { value: constructor.name, enumerable: true, writable: writableName },\n\t});\n}\n\nvar DOMExceptionName = conventions.freeze({\n\t/**\n\t * the default value as defined by the spec\n\t */\n\tError: 'Error',\n\t/**\n\t * @deprecated\n\t * Use RangeError instead.\n\t */\n\tIndexSizeError: 'IndexSizeError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tDomstringSizeError: 'DomstringSizeError',\n\tHierarchyRequestError: 'HierarchyRequestError',\n\tWrongDocumentError: 'WrongDocumentError',\n\tInvalidCharacterError: 'InvalidCharacterError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tNoDataAllowedError: 'NoDataAllowedError',\n\tNoModificationAllowedError: 'NoModificationAllowedError',\n\tNotFoundError: 'NotFoundError',\n\tNotSupportedError: 'NotSupportedError',\n\tInUseAttributeError: 'InUseAttributeError',\n\tInvalidStateError: 'InvalidStateError',\n\tSyntaxError: 'SyntaxError',\n\tInvalidModificationError: 'InvalidModificationError',\n\tNamespaceError: 'NamespaceError',\n\t/**\n\t * @deprecated\n\t * Use TypeError for invalid arguments,\n\t * \"NotSupportedError\" DOMException for unsupported operations,\n\t * and \"NotAllowedError\" DOMException for denied requests instead.\n\t */\n\tInvalidAccessError: 'InvalidAccessError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tValidationError: 'ValidationError',\n\t/**\n\t * @deprecated\n\t * Use TypeError instead.\n\t */\n\tTypeMismatchError: 'TypeMismatchError',\n\tSecurityError: 'SecurityError',\n\tNetworkError: 'NetworkError',\n\tAbortError: 'AbortError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tURLMismatchError: 'URLMismatchError',\n\tQuotaExceededError: 'QuotaExceededError',\n\tTimeoutError: 'TimeoutError',\n\tInvalidNodeTypeError: 'InvalidNodeTypeError',\n\tDataCloneError: 'DataCloneError',\n\tEncodingError: 'EncodingError',\n\tNotReadableError: 'NotReadableError',\n\tUnknownError: 'UnknownError',\n\tConstraintError: 'ConstraintError',\n\tDataError: 'DataError',\n\tTransactionInactiveError: 'TransactionInactiveError',\n\tReadOnlyError: 'ReadOnlyError',\n\tVersionError: 'VersionError',\n\tOperationError: 'OperationError',\n\tNotAllowedError: 'NotAllowedError',\n\tOptOutError: 'OptOutError',\n});\nvar DOMExceptionNames = Object.keys(DOMExceptionName);\n\nfunction isValidDomExceptionCode(value) {\n\treturn typeof value === 'number' && value >= 1 && value <= 25;\n}\nfunction endsWithError(value) {\n\treturn typeof value === 'string' && value.substring(value.length - DOMExceptionName.Error.length) === DOMExceptionName.Error;\n}\n/**\n * DOM operations only raise exceptions in \"exceptional\" circumstances, i.e., when an operation\n * is impossible to perform (either for logical reasons, because data is lost, or because the\n * implementation has become unstable). In general, DOM methods return specific error values in\n * ordinary processing situations, such as out-of-bound errors when using NodeList.\n *\n * Implementations should raise other exceptions under other circumstances. For example,\n * implementations should raise an implementation-dependent exception if a null argument is\n * passed when null was not expected.\n *\n * This implementation supports the following usages:\n * 1. according to the living standard (both arguments are optional):\n * ```\n * new DOMException(\"message (can be empty)\", DOMExceptionNames.HierarchyRequestError)\n * ```\n * 2. according to previous xmldom implementation (only the first argument is required):\n * ```\n * new DOMException(DOMException.HIERARCHY_REQUEST_ERR, \"optional message\")\n * ```\n * both result in the proper name being set.\n *\n * @class DOMException\n * @param {number | string} messageOrCode\n * The reason why an operation is not acceptable.\n * If it is a number, it is used to determine the `name`, see\n * {@link https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF ExceptionCode}\n * @param {string | keyof typeof DOMExceptionName | Error} [nameOrMessage]\n * The `name` to use for the error.\n * If `messageOrCode` is a number, this arguments is used as the `message` instead.\n * @augments Error\n * @see https://webidl.spec.whatwg.org/#idl-DOMException\n * @see https://webidl.spec.whatwg.org/#dfn-error-names-table\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-17189187\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n */\nfunction DOMException(messageOrCode, nameOrMessage) {\n\t// support old way of passing arguments: first argument is a valid number\n\tif (isValidDomExceptionCode(messageOrCode)) {\n\t\tthis.name = DOMExceptionNames[messageOrCode];\n\t\tthis.message = nameOrMessage || '';\n\t} else {\n\t\tthis.message = messageOrCode;\n\t\tthis.name = endsWithError(nameOrMessage) ? nameOrMessage : DOMExceptionName.Error;\n\t}\n\tif (Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n}\nextendError(DOMException, true);\nObject.defineProperties(DOMException.prototype, {\n\tcode: {\n\t\tenumerable: true,\n\t\tget: function () {\n\t\t\tvar code = DOMExceptionNames.indexOf(this.name);\n\t\t\tif (isValidDomExceptionCode(code)) return code;\n\t\t\treturn 0;\n\t\t},\n\t},\n});\n\nvar ExceptionCode = {\n\tINDEX_SIZE_ERR: 1,\n\tDOMSTRING_SIZE_ERR: 2,\n\tHIERARCHY_REQUEST_ERR: 3,\n\tWRONG_DOCUMENT_ERR: 4,\n\tINVALID_CHARACTER_ERR: 5,\n\tNO_DATA_ALLOWED_ERR: 6,\n\tNO_MODIFICATION_ALLOWED_ERR: 7,\n\tNOT_FOUND_ERR: 8,\n\tNOT_SUPPORTED_ERR: 9,\n\tINUSE_ATTRIBUTE_ERR: 10,\n\tINVALID_STATE_ERR: 11,\n\tSYNTAX_ERR: 12,\n\tINVALID_MODIFICATION_ERR: 13,\n\tNAMESPACE_ERR: 14,\n\tINVALID_ACCESS_ERR: 15,\n\tVALIDATION_ERR: 16,\n\tTYPE_MISMATCH_ERR: 17,\n\tSECURITY_ERR: 18,\n\tNETWORK_ERR: 19,\n\tABORT_ERR: 20,\n\tURL_MISMATCH_ERR: 21,\n\tQUOTA_EXCEEDED_ERR: 22,\n\tTIMEOUT_ERR: 23,\n\tINVALID_NODE_TYPE_ERR: 24,\n\tDATA_CLONE_ERR: 25,\n};\n\nvar entries = Object.entries(ExceptionCode);\nfor (var i = 0; i < entries.length; i++) {\n\tvar key = entries[i][0];\n\tDOMException[key] = entries[i][1];\n}\n\n/**\n * Creates an error that will not be caught by XMLReader aka the SAX parser.\n *\n * @class\n * @param {string} message\n * @param {any} [locator]\n */\nfunction ParseError(message, locator) {\n\tthis.message = message;\n\tthis.locator = locator;\n\tif (Error.captureStackTrace) Error.captureStackTrace(this, ParseError);\n}\nextendError(ParseError);\n\nexports.DOMException = DOMException;\nexports.DOMExceptionName = DOMExceptionName;\nexports.ExceptionCode = ExceptionCode;\nexports.ParseError = ParseError;\n","'use strict';\n\n/**\n * Detects relevant unicode support for regular expressions in the runtime.\n * Should the runtime not accepts the flag `u` or unicode ranges,\n * character classes without unicode handling will be used.\n *\n * @param {typeof RegExp} [RegExpImpl=RegExp]\n * For testing: the RegExp class.\n * @returns {boolean}\n * @see https://node.green/#ES2015-syntax-RegExp--y--and--u--flags\n */\nfunction detectUnicodeSupport(RegExpImpl) {\n\ttry {\n\t\tif (typeof RegExpImpl !== 'function') {\n\t\t\tRegExpImpl = RegExp;\n\t\t}\n\t\t// eslint-disable-next-line es5/no-unicode-regex,es5/no-unicode-code-point-escape\n\t\tvar match = new RegExpImpl('\\u{1d306}', 'u').exec('𝌆');\n\t\treturn !!match && match[0].length === 2;\n\t} catch (error) {}\n\treturn false;\n}\nvar UNICODE_SUPPORT = detectUnicodeSupport();\n\n/**\n * Removes `[`, `]` and any trailing quantifiers from the source of a RegExp.\n *\n * @param {RegExp} regexp\n */\nfunction chars(regexp) {\n\tif (regexp.source[0] !== '[') {\n\t\tthrow new Error(regexp + ' can not be used with chars');\n\t}\n\treturn regexp.source.slice(1, regexp.source.lastIndexOf(']'));\n}\n\n/**\n * Creates a new character list regular expression,\n * by removing `search` from the source of `regexp`.\n *\n * @param {RegExp} regexp\n * @param {string} search\n * The character(s) to remove.\n * @returns {RegExp}\n */\nfunction chars_without(regexp, search) {\n\tif (regexp.source[0] !== '[') {\n\t\tthrow new Error('/' + regexp.source + '/ can not be used with chars_without');\n\t}\n\tif (!search || typeof search !== 'string') {\n\t\tthrow new Error(JSON.stringify(search) + ' is not a valid search');\n\t}\n\tif (regexp.source.indexOf(search) === -1) {\n\t\tthrow new Error('\"' + search + '\" is not is /' + regexp.source + '/');\n\t}\n\tif (search === '-' && regexp.source.indexOf(search) !== 1) {\n\t\tthrow new Error('\"' + search + '\" is not at the first postion of /' + regexp.source + '/');\n\t}\n\treturn new RegExp(regexp.source.replace(search, ''), UNICODE_SUPPORT ? 'u' : '');\n}\n\n/**\n * Combines and Regular expressions correctly by using `RegExp.source`.\n *\n * @param {...(RegExp | string)[]} args\n * @returns {RegExp}\n */\nfunction reg(args) {\n\tvar self = this;\n\treturn new RegExp(\n\t\tArray.prototype.slice\n\t\t\t.call(arguments)\n\t\t\t.map(function (part) {\n\t\t\t\tvar isStr = typeof part === 'string';\n\t\t\t\tif (isStr && self === undefined && part === '|') {\n\t\t\t\t\tthrow new Error('use regg instead of reg to wrap expressions with `|`!');\n\t\t\t\t}\n\t\t\t\treturn isStr ? part : part.source;\n\t\t\t})\n\t\t\t.join(''),\n\t\tUNICODE_SUPPORT ? 'mu' : 'm'\n\t);\n}\n\n/**\n * Like `reg` but wraps the expression in `(?:`,`)` to create a non tracking group.\n *\n * @param {...(RegExp | string)[]} args\n * @returns {RegExp}\n */\nfunction regg(args) {\n\tif (arguments.length === 0) {\n\t\tthrow new Error('no parameters provided');\n\t}\n\treturn reg.apply(regg, ['(?:'].concat(Array.prototype.slice.call(arguments), [')']));\n}\n\n// /**\n// * Append ^ to the beginning of the expression.\n// * @param {...(RegExp | string)[]} args\n// * @returns {RegExp}\n// */\n// function reg_start(args) {\n// \tif (arguments.length === 0) {\n// \t\tthrow new Error('no parameters provided');\n// \t}\n// \treturn reg.apply(reg_start, ['^'].concat(Array.prototype.slice.call(arguments)));\n// }\n\n// https://www.w3.org/TR/xml/#document\n// `[1] document ::= prolog element Misc*`\n// https://www.w3.org/TR/xml11/#NT-document\n// `[1] document ::= ( prolog element Misc* ) - ( Char* RestrictedChar Char* )`\n\n/**\n * A character usually appearing in wrongly converted strings.\n *\n * @type {string}\n * @see https://en.wikipedia.org/wiki/Specials_(Unicode_block)#Replacement_character\n * @see https://nodejs.dev/en/api/v18/buffer/#buffers-and-character-encodings\n * @see https://www.unicode.org/faq/utf_bom.html#BOM\n * @readonly\n */\nvar UNICODE_REPLACEMENT_CHARACTER = '\\uFFFD';\n// https://www.w3.org/TR/xml/#NT-Char\n// any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.\n// `[2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]`\n// https://www.w3.org/TR/xml11/#NT-Char\n// `[2] Char ::= [#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]`\n// https://www.w3.org/TR/xml11/#NT-RestrictedChar\n// `[2a] RestrictedChar ::= [#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]`\n// https://www.w3.org/TR/xml11/#charsets\nvar Char = /[-\\x09\\x0A\\x0D\\x20-\\x2C\\x2E-\\uD7FF\\uE000-\\uFFFD]/; // without \\u10000-\\uEFFFF\nif (UNICODE_SUPPORT) {\n\t// eslint-disable-next-line es5/no-unicode-code-point-escape\n\tChar = reg('[', chars(Char), '\\\\u{10000}-\\\\u{10FFFF}', ']');\n}\n\nvar _SChar = /[\\x20\\x09\\x0D\\x0A]/;\nvar SChar_s = chars(_SChar);\n// https://www.w3.org/TR/xml11/#NT-S\n// `[3] S ::= (#x20 | #x9 | #xD | #xA)+`\nvar S = reg(_SChar, '+');\n// optional whitespace described as `S?` in the grammar,\n// simplified to 0-n occurrences of the character class\n// instead of 0-1 occurrences of a non-capturing group around S\nvar S_OPT = reg(_SChar, '*');\n\n// https://www.w3.org/TR/xml11/#NT-NameStartChar\n// `[4] NameStartChar ::= \":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]`\nvar NameStartChar =\n\t/[:_a-zA-Z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02FF\\u0370-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/; // without \\u10000-\\uEFFFF\nif (UNICODE_SUPPORT) {\n\t// eslint-disable-next-line es5/no-unicode-code-point-escape\n\tNameStartChar = reg('[', chars(NameStartChar), '\\\\u{10000}-\\\\u{10FFFF}', ']');\n}\nvar NameStartChar_s = chars(NameStartChar);\n\n// https://www.w3.org/TR/xml11/#NT-NameChar\n// `[4a] NameChar ::= NameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]`\nvar NameChar = reg('[', NameStartChar_s, chars(/[-.0-9\\xB7]/), chars(/[\\u0300-\\u036F\\u203F-\\u2040]/), ']');\n// https://www.w3.org/TR/xml11/#NT-Name\n// `[5] Name ::= NameStartChar (NameChar)*`\nvar Name = reg(NameStartChar, NameChar, '*');\n/*\nhttps://www.w3.org/TR/xml11/#NT-Names\n`[6] Names ::= Name (#x20 Name)*`\n*/\n\n// https://www.w3.org/TR/xml11/#NT-Nmtoken\n// `[7] Nmtoken ::= (NameChar)+`\nvar Nmtoken = reg(NameChar, '+');\n/*\nhttps://www.w3.org/TR/xml11/#NT-Nmtokens\n`[8] Nmtokens ::= Nmtoken (#x20 Nmtoken)*`\nvar Nmtokens = reg(Nmtoken, regg(/\\x20/, Nmtoken), '*');\n*/\n\n// https://www.w3.org/TR/xml11/#NT-EntityRef\n// `[68] EntityRef ::= '&' Name ';'` [WFC: Entity Declared] [VC: Entity Declared] [WFC: Parsed Entity] [WFC: No Recursion]\nvar EntityRef = reg('&', Name, ';');\n// https://www.w3.org/TR/xml11/#NT-CharRef\n// `[66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'` [WFC: Legal Character]\nvar CharRef = regg(/&#[0-9]+;|&#x[0-9a-fA-F]+;/);\n\n/*\nhttps://www.w3.org/TR/xml11/#NT-Reference\n- `[67] Reference ::= EntityRef | CharRef`\n- `[66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'` [WFC: Legal Character]\n- `[68] EntityRef ::= '&' Name ';'` [WFC: Entity Declared] [VC: Entity Declared] [WFC: Parsed Entity] [WFC: No Recursion]\n*/\nvar Reference = regg(EntityRef, '|', CharRef);\n\n// https://www.w3.org/TR/xml11/#NT-PEReference\n// `[69] PEReference ::= '%' Name ';'`\n// [VC: Entity Declared] [WFC: No Recursion] [WFC: In DTD]\nvar PEReference = reg('%', Name, ';');\n\n// https://www.w3.org/TR/xml11/#NT-EntityValue\n// `[9] EntityValue ::= '\"' ([^%&\"] | PEReference | Reference)* '\"' | \"'\" ([^%&'] | PEReference | Reference)* \"'\"`\nvar EntityValue = regg(\n\treg('\"', regg(/[^%&\"]/, '|', PEReference, '|', Reference), '*', '\"'),\n\t'|',\n\treg(\"'\", regg(/[^%&']/, '|', PEReference, '|', Reference), '*', \"'\")\n);\n\n// https://www.w3.org/TR/xml11/#NT-AttValue\n// `[10] AttValue ::= '\"' ([^<&\"] | Reference)* '\"' | \"'\" ([^<&'] | Reference)* \"'\"`\nvar AttValue = regg('\"', regg(/[^<&\"]/, '|', Reference), '*', '\"', '|', \"'\", regg(/[^<&']/, '|', Reference), '*', \"'\");\n\n// https://www.w3.org/TR/xml-names/#ns-decl\n// https://www.w3.org/TR/xml-names/#ns-qualnames\n// NameStartChar without \":\"\nvar NCNameStartChar = chars_without(NameStartChar, ':');\n// https://www.w3.org/TR/xml-names/#orphans\n// `[5] NCNameChar ::= NameChar - ':'`\n// An XML NameChar, minus the \":\"\nvar NCNameChar = chars_without(NameChar, ':');\n// https://www.w3.org/TR/xml-names/#NT-NCName\n// `[4] NCName ::= Name - (Char* ':' Char*)`\n// An XML Name, minus the \":\"\nvar NCName = reg(NCNameStartChar, NCNameChar, '*');\n\n/**\nhttps://www.w3.org/TR/xml-names/#ns-qualnames\n\n```\n[7] QName ::= PrefixedName | UnprefixedName\n\t\t\t\t === (NCName ':' NCName) | NCName\n\t\t\t\t === NCName (':' NCName)?\n[8] PrefixedName ::= Prefix ':' LocalPart\n\t\t\t\t\t\t\t\t === NCName ':' NCName\n[9] UnprefixedName ::= LocalPart\n\t\t\t\t\t\t\t\t\t === NCName\n[10] Prefix ::= NCName\n[11] LocalPart ::= NCName\n```\n*/\nvar QName = reg(NCName, regg(':', NCName), '?');\nvar QName_exact = reg('^', QName, '$');\nvar QName_group = reg('(', QName, ')');\n\n// https://www.w3.org/TR/xml11/#NT-SystemLiteral\n// `[11] SystemLiteral ::= ('\"' [^\"]* '\"') | (\"'\" [^']* \"'\")`\nvar SystemLiteral = regg(/\"[^\"]*\"|'[^']*'/);\n\n/*\n https://www.w3.org/TR/xml11/#NT-PI\n ```\n [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))\n [16] PI ::= '' Char*)))? '?>'\n ```\n target /xml/i is not excluded!\n*/\nvar PI = reg(/^<\\?/, '(', Name, ')', regg(S, '(', Char, '*?)'), '?', /\\?>/);\n\n// https://www.w3.org/TR/xml11/#NT-PubidChar\n// `[13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]`\nvar PubidChar = /[\\x20\\x0D\\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/;\n\n// https://www.w3.org/TR/xml11/#NT-PubidLiteral\n// `[12] PubidLiteral ::= '\"' PubidChar* '\"' | \"'\" (PubidChar - \"'\")* \"'\"`\nvar PubidLiteral = regg('\"', PubidChar, '*\"', '|', \"'\", chars_without(PubidChar, \"'\"), \"*'\");\n\n// https://www.w3.org/TR/xml11/#NT-CharData\n// `[14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)`\n\nvar COMMENT_START = '';\n// https://www.w3.org/TR/xml11/#NT-Comment\n// `[15] Comment ::= ''`\nvar Comment = reg(COMMENT_START, regg(chars_without(Char, '-'), '|', reg('-', chars_without(Char, '-'))), '*', COMMENT_END);\n\nvar PCDATA = '#PCDATA';\n// https://www.w3.org/TR/xml11/#NT-Mixed\n// `[51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' | '(' S? '#PCDATA' S? ')'`\n// https://www.w3.org/TR/xml-names/#NT-Mixed\n// `[51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? QName)* S? ')*' | '(' S? '#PCDATA' S? ')'`\n// [VC: Proper Group/PE Nesting] [VC: No Duplicate Types]\nvar Mixed = regg(\n\treg(/\\(/, S_OPT, PCDATA, regg(S_OPT, /\\|/, S_OPT, QName), '*', S_OPT, /\\)\\*/),\n\t'|',\n\treg(/\\(/, S_OPT, PCDATA, S_OPT, /\\)/)\n);\n\nvar _children_quantity = /[?*+]?/;\n/*\n `[49] choice ::= '(' S? cp ( S? '|' S? cp )+ S? ')'` [VC: Proper Group/PE Nesting]\n `[50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')'` [VC: Proper Group/PE Nesting]\n simplification to solve circular referencing, but doesn't check validity constraint \"Proper Group/PE Nesting\"\n var _choice_or_seq = reg('[', NameChar_s, SChar_s, chars(_children_quantity), '()|,]*');\n ```\n [48] cp ::= (Name | choice | seq) ('?' | '*' | '+')?\n === (Name | '(' S? cp ( S? '|' S? cp )+ S? ')' | '(' S? cp ( S? ',' S? cp )* S? ')') ('?' | '*' | '+')?\n !== (Name | [_choice_or_seq]*) ('?' | '*' | '+')?\n ```\n simplification to solve circular referencing, but doesn't check validity constraint \"Proper Group/PE Nesting\"\n var cp = reg(regg(Name, '|', _choice_or_seq), _children_quantity);\n*/\n/*\nInefficient regular expression (High)\nThis part of the regular expression may cause exponential backtracking on strings starting with '(|' and containing many repetitions of '|'.\nhttps://github.com/xmldom/xmldom/security/code-scanning/91\nvar choice = regg(/\\(/, S_OPT, cp, regg(S_OPT, /\\|/, S_OPT, cp), '+', S_OPT, /\\)/);\n*/\n/*\nInefficient regular expression (High)\nThis part of the regular expression may cause exponential backtracking on strings starting with '(,' and containing many repetitions of ','.\nhttps://github.com/xmldom/xmldom/security/code-scanning/92\nvar seq = regg(/\\(/, S_OPT, cp, regg(S_OPT, /,/, S_OPT, cp), '*', S_OPT, /\\)/);\n*/\n\n// `[47] children ::= (choice | seq) ('?' | '*' | '+')?`\n// simplification to solve circular referencing, but doesn't check validity constraint \"Proper Group/PE Nesting\"\nvar children = reg(/\\([^>]+\\)/, _children_quantity /*regg(choice, '|', seq), _children_quantity*/);\n\n// https://www.w3.org/TR/xml11/#NT-contentspec\n// `[46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children`\nvar contentspec = regg('EMPTY', '|', 'ANY', '|', Mixed, '|', children);\n\nvar ELEMENTDECL_START = ''`\n// https://www.w3.org/TR/xml-names/#NT-elementdecl\n// `[17] elementdecl ::= ''`\n// because of https://www.w3.org/TR/xml11/#NT-PEReference\n// since xmldom is not supporting replacements of PEReferences in the DTD\n// this also supports PEReference in the possible places\nvar elementdecl = reg(ELEMENTDECL_START, S, regg(QName, '|', PEReference), S, regg(contentspec, '|', PEReference), S_OPT, '>');\n\n// https://www.w3.org/TR/xml11/#NT-NotationType\n// `[58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')'`\n// [VC: Notation Attributes] [VC: One Notation Per Element Type] [VC: No Notation on Empty Element] [VC: No Duplicate Tokens]\nvar NotationType = reg('NOTATION', S, /\\(/, S_OPT, Name, regg(S_OPT, /\\|/, S_OPT, Name), '*', S_OPT, /\\)/);\n// https://www.w3.org/TR/xml11/#NT-Enumeration\n// `[59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'`\n// [VC: Enumeration] [VC: No Duplicate Tokens]\nvar Enumeration = reg(/\\(/, S_OPT, Nmtoken, regg(S_OPT, /\\|/, S_OPT, Nmtoken), '*', S_OPT, /\\)/);\n\n// https://www.w3.org/TR/xml11/#NT-EnumeratedType\n// `[57] EnumeratedType ::= NotationType | Enumeration`\nvar EnumeratedType = regg(NotationType, '|', Enumeration);\n\n/*\n```\n[55] StringType ::= 'CDATA'\n[56] TokenizedType ::= 'ID' [VC: ID] [VC: One ID per Element Type] [VC: ID Attribute Default]\n | 'IDREF' [VC: IDREF]\n | 'IDREFS' [VC: IDREF]\n\t | 'ENTITY' [VC: Entity Name]\n\t | 'ENTITIES' [VC: Entity Name]\n\t | 'NMTOKEN' [VC: Name Token]\n\t | 'NMTOKENS' [VC: Name Token]\n [54] AttType ::= StringType | TokenizedType | EnumeratedType\n```*/\nvar AttType = regg(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/, '|', EnumeratedType);\n\n// `[60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue)`\n// [WFC: No < in Attribute Values] [WFC: No External Entity References]\n// [VC: Fixed Attribute Default] [VC: Required Attribute] [VC: Attribute Default Value Syntactically Correct]\nvar DefaultDecl = regg(/#REQUIRED|#IMPLIED/, '|', regg(regg('#FIXED', S), '?', AttValue));\n\n// https://www.w3.org/TR/xml11/#NT-AttDef\n// [53] AttDef ::= S Name S AttType S DefaultDecl\n// https://www.w3.org/TR/xml-names/#NT-AttDef\n// [1] NSAttName ::= PrefixedAttName | DefaultAttName\n// [2] PrefixedAttName ::= 'xmlns:' NCName [NSC: Reserved Prefixes and Namespace Names]\n// [3] DefaultAttName ::= 'xmlns'\n// [21] AttDef ::= S (QName | NSAttName) S AttType S DefaultDecl\n// \t\t\t\t\t\t === S Name S AttType S DefaultDecl\n// xmldom is not distinguishing between QName and NSAttName on this level\n// to support XML without namespaces in DTD we can not restrict it to QName\nvar AttDef = regg(S, Name, S, AttType, S, DefaultDecl);\n\nvar ATTLIST_DECL_START = ''`\n// https://www.w3.org/TR/xml-names/#NT-AttlistDecl\n// `[20] AttlistDecl ::= ''`\n// to support XML without namespaces in DTD we can not restrict it to QName\nvar AttlistDecl = reg(ATTLIST_DECL_START, S, Name, AttDef, '*', S_OPT, '>');\n\nvar SYSTEM = 'SYSTEM';\nvar PUBLIC = 'PUBLIC';\n// https://www.w3.org/TR/xml11/#NT-ExternalID\n// `[75] ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral`\nvar ExternalID = regg(regg(SYSTEM, S, SystemLiteral), '|', regg(PUBLIC, S, PubidLiteral, S, SystemLiteral));\nvar ExternalID_match = reg(\n\t'^',\n\tregg(\n\t\tregg(SYSTEM, S, '(?', SystemLiteral, ')'),\n\t\t'|',\n\t\tregg(PUBLIC, S, '(?', PubidLiteral, ')', S, '(?', SystemLiteral, ')')\n\t)\n);\n\n// https://www.w3.org/TR/xml11/#NT-NDataDecl\n// `[76] NDataDecl ::= S 'NDATA' S Name` [VC: Notation Declared]\nvar NDataDecl = regg(S, 'NDATA', S, Name);\n\n// https://www.w3.org/TR/xml11/#NT-EntityDef\n// `[73] EntityDef ::= EntityValue | (ExternalID NDataDecl?)`\nvar EntityDef = regg(EntityValue, '|', regg(ExternalID, NDataDecl, '?'));\n\nvar ENTITY_DECL_START = ''`\nvar GEDecl = reg(ENTITY_DECL_START, S, Name, S, EntityDef, S_OPT, '>');\n// https://www.w3.org/TR/xml11/#NT-PEDef\n// `[74] PEDef ::= EntityValue | ExternalID`\nvar PEDef = regg(EntityValue, '|', ExternalID);\n// https://www.w3.org/TR/xml11/#NT-PEDecl\n// `[72] PEDecl ::= ''`\nvar PEDecl = reg(ENTITY_DECL_START, S, '%', S, Name, S, PEDef, S_OPT, '>');\n// https://www.w3.org/TR/xml11/#NT-EntityDecl\n// `[70] EntityDecl ::= GEDecl | PEDecl`\nvar EntityDecl = regg(GEDecl, '|', PEDecl);\n\n// https://www.w3.org/TR/xml11/#NT-PublicID\n// `[83] PublicID ::= 'PUBLIC' S PubidLiteral`\nvar PublicID = reg(PUBLIC, S, PubidLiteral);\n// https://www.w3.org/TR/xml11/#NT-NotationDecl\n// `[82] NotationDecl ::= ''` [VC: Unique Notation Name]\nvar NotationDecl = reg('');\n\n// https://www.w3.org/TR/xml11/#NT-Eq\n// `[25] Eq ::= S? '=' S?`\nvar Eq = reg(S_OPT, '=', S_OPT);\n// https://www.w3.org/TR/xml/#NT-VersionNum\n// `[26] VersionNum ::= '1.' [0-9]+`\n// https://www.w3.org/TR/xml11/#NT-VersionNum\n// `[26] VersionNum ::= '1.1'`\nvar VersionNum = /1[.]\\d+/;\n// https://www.w3.org/TR/xml11/#NT-VersionInfo\n// `[24] VersionInfo ::= S 'version' Eq (\"'\" VersionNum \"'\" | '\"' VersionNum '\"')`\nvar VersionInfo = reg(S, 'version', Eq, regg(\"'\", VersionNum, \"'\", '|', '\"', VersionNum, '\"'));\n// https://www.w3.org/TR/xml11/#NT-EncName\n// `[81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*`\nvar EncName = /[A-Za-z][-A-Za-z0-9._]*/;\n// https://www.w3.org/TR/xml11/#NT-EncDecl\n// `[80] EncodingDecl ::= S 'encoding' Eq ('\"' EncName '\"' | \"'\" EncName \"'\" )`\nvar EncodingDecl = regg(S, 'encoding', Eq, regg('\"', EncName, '\"', '|', \"'\", EncName, \"'\"));\n// https://www.w3.org/TR/xml11/#NT-SDDecl\n// `[32] SDDecl ::= S 'standalone' Eq ((\"'\" ('yes' | 'no') \"'\") | ('\"' ('yes' | 'no') '\"'))`\nvar SDDecl = regg(S, 'standalone', Eq, regg(\"'\", regg('yes', '|', 'no'), \"'\", '|', '\"', regg('yes', '|', 'no'), '\"'));\n// https://www.w3.org/TR/xml11/#NT-XMLDecl\n// [23] XMLDecl ::= ''\nvar XMLDecl = reg(/^<\\?xml/, VersionInfo, EncodingDecl, '?', SDDecl, '?', S_OPT, /\\?>/);\n\n/*\n https://www.w3.org/TR/xml/#NT-markupdecl\n https://www.w3.org/TR/xml11/#NT-markupdecl\n `[29] markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment`\n var markupdecl = regg(elementdecl, '|', AttlistDecl, '|', EntityDecl, '|', NotationDecl, '|', PI_unsafe, '|', Comment);\n*/\n/*\n https://www.w3.org/TR/xml-names/#NT-doctypedecl\n`[28a] DeclSep ::= PEReference | S`\n https://www.w3.org/TR/xml11/#NT-intSubset\n```\n [28b] intSubset ::= (markupdecl | DeclSep)*\n === (markupdecl | PEReference | S)*\n```\n [WFC: PE Between Declarations]\n var intSubset = reg(regg(markupdecl, '|', PEReference, '|', S), '*');\n*/\nvar DOCTYPE_DECL_START = ''`\n https://www.afterwardsw3.org/TR/xml-names/#NT-doctypedecl\n `[16] doctypedecl ::= ''`\n var doctypedecl = reg('');\n*/\n\nvar CDATA_START = '';\nvar CDStart = //;\nvar CData = reg(Char, '*?', CDEnd);\n/*\n https://www.w3.org/TR/xml/#dt-cdsection\n `[18] \tCDSect\t ::= \tCDStart CData CDEnd`\n `[19] \tCDStart\t ::= \t'' Char*))`\n `[21] \tCDEnd\t ::= \t']]>'`\n*/\nvar CDSect = reg(CDStart, CData);\n\n// unit tested\nexports.chars = chars;\nexports.chars_without = chars_without;\nexports.detectUnicodeSupport = detectUnicodeSupport;\nexports.reg = reg;\nexports.regg = regg;\nexports.AttlistDecl = AttlistDecl;\nexports.CDATA_START = CDATA_START;\nexports.CDATA_END = CDATA_END;\nexports.CDSect = CDSect;\nexports.Char = Char;\nexports.Comment = Comment;\nexports.COMMENT_START = COMMENT_START;\nexports.COMMENT_END = COMMENT_END;\nexports.DOCTYPE_DECL_START = DOCTYPE_DECL_START;\nexports.elementdecl = elementdecl;\nexports.EntityDecl = EntityDecl;\nexports.EntityValue = EntityValue;\nexports.ExternalID = ExternalID;\nexports.ExternalID_match = ExternalID_match;\nexports.Name = Name;\nexports.NotationDecl = NotationDecl;\nexports.Reference = Reference;\nexports.PEReference = PEReference;\nexports.PI = PI;\nexports.PUBLIC = PUBLIC;\nexports.PubidLiteral = PubidLiteral;\nexports.QName = QName;\nexports.QName_exact = QName_exact;\nexports.QName_group = QName_group;\nexports.S = S;\nexports.SChar_s = SChar_s;\nexports.S_OPT = S_OPT;\nexports.SYSTEM = SYSTEM;\nexports.SystemLiteral = SystemLiteral;\nexports.UNICODE_REPLACEMENT_CHARACTER = UNICODE_REPLACEMENT_CHARACTER;\nexports.UNICODE_SUPPORT = UNICODE_SUPPORT;\nexports.XMLDecl = XMLDecl;\n","'use strict';\nvar conventions = require('./conventions');\nexports.assign = conventions.assign;\nexports.hasDefaultHTMLNamespace = conventions.hasDefaultHTMLNamespace;\nexports.isHTMLMimeType = conventions.isHTMLMimeType;\nexports.isValidMimeType = conventions.isValidMimeType;\nexports.MIME_TYPE = conventions.MIME_TYPE;\nexports.NAMESPACE = conventions.NAMESPACE;\n\nvar errors = require('./errors');\nexports.DOMException = errors.DOMException;\nexports.DOMExceptionName = errors.DOMExceptionName;\nexports.ExceptionCode = errors.ExceptionCode;\nexports.ParseError = errors.ParseError;\n\nvar dom = require('./dom');\nexports.Attr = dom.Attr;\nexports.CDATASection = dom.CDATASection;\nexports.CharacterData = dom.CharacterData;\nexports.Comment = dom.Comment;\nexports.Document = dom.Document;\nexports.DocumentFragment = dom.DocumentFragment;\nexports.DocumentType = dom.DocumentType;\nexports.DOMImplementation = dom.DOMImplementation;\nexports.Element = dom.Element;\nexports.Entity = dom.Entity;\nexports.EntityReference = dom.EntityReference;\nexports.LiveNodeList = dom.LiveNodeList;\nexports.NamedNodeMap = dom.NamedNodeMap;\nexports.Node = dom.Node;\nexports.NodeList = dom.NodeList;\nexports.Notation = dom.Notation;\nexports.ProcessingInstruction = dom.ProcessingInstruction;\nexports.Text = dom.Text;\nexports.XMLSerializer = dom.XMLSerializer;\n\nvar domParser = require('./dom-parser');\nexports.DOMParser = domParser.DOMParser;\nexports.onErrorStopParsing = domParser.onErrorStopParsing;\nexports.onWarningStopParsing = domParser.onWarningStopParsing;\n","'use strict';\n\nvar conventions = require('./conventions');\nvar g = require('./grammar');\nvar errors = require('./errors');\n\nvar isHTMLEscapableRawTextElement = conventions.isHTMLEscapableRawTextElement;\nvar isHTMLMimeType = conventions.isHTMLMimeType;\nvar isHTMLRawTextElement = conventions.isHTMLRawTextElement;\nvar hasOwn = conventions.hasOwn;\nvar NAMESPACE = conventions.NAMESPACE;\nvar ParseError = errors.ParseError;\nvar DOMException = errors.DOMException;\n\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\nvar S_TAG = 0; //tag name offerring\nvar S_ATTR = 1; //attr name offerring\nvar S_ATTR_SPACE = 2; //attr name end and space offer\nvar S_EQ = 3; //=space?\nvar S_ATTR_NOQUOT_VALUE = 4; //attr value(no quot value only)\nvar S_ATTR_END = 5; //attr value end and no space(quot end)\nvar S_TAG_SPACE = 6; //(attr value end || tag end ) && (space offer)\nvar S_TAG_CLOSE = 7; //closed el\n\nfunction XMLReader() {}\n\nXMLReader.prototype = {\n\tparse: function (source, defaultNSMap, entityMap) {\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap, (defaultNSMap = Object.create(null)));\n\t\tparse(source, defaultNSMap, entityMap, domBuilder, this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t},\n};\n\n/**\n * Detecting everything that might be a reference,\n * including those without ending `;`, since those are allowed in HTML.\n * The entityReplacer takes care of verifying and transforming each occurrence,\n * and reports to the errorHandler on those that are not OK,\n * depending on the context.\n */\nvar ENTITY_REG = /&#?\\w+;?/g;\n\nfunction parse(source, defaultNSMapCopy, entityMap, domBuilder, errorHandler) {\n\tvar isHTML = isHTMLMimeType(domBuilder.mimeType);\n\tif (source.indexOf(g.UNICODE_REPLACEMENT_CHARACTER) >= 0) {\n\t\terrorHandler.warning('Unicode replacement character detected, source encoding issues?');\n\t}\n\n\tfunction fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10),\n\t\t\t\tsurrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\n\tfunction entityReplacer(a) {\n\t\tvar complete = a[a.length - 1] === ';' ? a : a + ';';\n\t\tif (!isHTML && complete !== a) {\n\t\t\terrorHandler.error('EntityRef: expecting ;');\n\t\t\treturn a;\n\t\t}\n\t\tvar match = g.Reference.exec(complete);\n\t\tif (!match || match[0].length !== complete.length) {\n\t\t\terrorHandler.error('entity not matching Reference production: ' + a);\n\t\t\treturn a;\n\t\t}\n\t\tvar k = complete.slice(1, -1);\n\t\tif (hasOwn(entityMap, k)) {\n\t\t\treturn entityMap[k];\n\t\t} else if (k.charAt(0) === '#') {\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x', '0x')));\n\t\t} else {\n\t\t\terrorHandler.error('entity not found:' + a);\n\t\t\treturn a;\n\t\t}\n\t}\n\n\tfunction appendText(end) {\n\t\t//has some bugs\n\t\tif (end > start) {\n\t\t\tvar xt = source.substring(start, end).replace(ENTITY_REG, entityReplacer);\n\t\t\tlocator && position(start);\n\t\t\tdomBuilder.characters(xt, 0, end - start);\n\t\t\tstart = end;\n\t\t}\n\t}\n\n\tfunction position(p, m) {\n\t\twhile (p >= lineEnd && (m = linePattern.exec(source))) {\n\t\t\tlineStart = m.index;\n\t\t\tlineEnd = lineStart + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t}\n\t\tlocator.columnNumber = p - lineStart + 1;\n\t}\n\n\tvar lineStart = 0;\n\tvar lineEnd = 0;\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g;\n\tvar locator = domBuilder.locator;\n\n\tvar parseStack = [{ currentNSMap: defaultNSMapCopy }];\n\tvar unclosedTags = [];\n\tvar start = 0;\n\twhile (true) {\n\t\ttry {\n\t\t\tvar tagStart = source.indexOf('<', start);\n\t\t\tif (tagStart < 0) {\n\t\t\t\tif (!isHTML && unclosedTags.length > 0) {\n\t\t\t\t\treturn errorHandler.fatalError('unclosed xml tag(s): ' + unclosedTags.join(', '));\n\t\t\t\t}\n\t\t\t\tif (!source.substring(start).match(/^\\s*$/)) {\n\t\t\t\t\tvar doc = domBuilder.doc;\n\t\t\t\t\tvar text = doc.createTextNode(source.substr(start));\n\t\t\t\t\tif (doc.documentElement) {\n\t\t\t\t\t\treturn errorHandler.error('Extra content at the end of the document');\n\t\t\t\t\t}\n\t\t\t\t\tdoc.appendChild(text);\n\t\t\t\t\tdomBuilder.currentElement = text;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (tagStart > start) {\n\t\t\t\tvar fromSource = source.substring(start, tagStart);\n\t\t\t\tif (!isHTML && unclosedTags.length === 0) {\n\t\t\t\t\tfromSource = fromSource.replace(new RegExp(g.S_OPT.source, 'g'), '');\n\t\t\t\t\tfromSource && errorHandler.error(\"Unexpected content outside root element: '\" + fromSource + \"'\");\n\t\t\t\t}\n\t\t\t\tappendText(tagStart);\n\t\t\t}\n\t\t\tswitch (source.charAt(tagStart + 1)) {\n\t\t\t\tcase '/':\n\t\t\t\t\tvar end = source.indexOf('>', tagStart + 2);\n\t\t\t\t\tvar tagNameRaw = source.substring(tagStart + 2, end > 0 ? end : undefined);\n\t\t\t\t\tif (!tagNameRaw) {\n\t\t\t\t\t\treturn errorHandler.fatalError('end tag name missing');\n\t\t\t\t\t}\n\t\t\t\t\tvar tagNameMatch = end > 0 && g.reg('^', g.QName_group, g.S_OPT, '$').exec(tagNameRaw);\n\t\t\t\t\tif (!tagNameMatch) {\n\t\t\t\t\t\treturn errorHandler.fatalError('end tag name contains invalid characters: \"' + tagNameRaw + '\"');\n\t\t\t\t\t}\n\t\t\t\t\tif (!domBuilder.currentElement && !domBuilder.doc.documentElement) {\n\t\t\t\t\t\t// not enough information to provide a helpful error message,\n\t\t\t\t\t\t// but parsing will throw since there is no root element\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar currentTagName =\n\t\t\t\t\t\tunclosedTags[unclosedTags.length - 1] ||\n\t\t\t\t\t\tdomBuilder.currentElement.tagName ||\n\t\t\t\t\t\tdomBuilder.doc.documentElement.tagName ||\n\t\t\t\t\t\t'';\n\t\t\t\t\tif (currentTagName !== tagNameMatch[1]) {\n\t\t\t\t\t\tvar tagNameLower = tagNameMatch[1].toLowerCase();\n\t\t\t\t\t\tif (!isHTML || currentTagName.toLowerCase() !== tagNameLower) {\n\t\t\t\t\t\t\treturn errorHandler.fatalError('Opening and ending tag mismatch: \"' + currentTagName + '\" != \"' + tagNameRaw + '\"');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar config = parseStack.pop();\n\t\t\t\t\tunclosedTags.pop();\n\t\t\t\t\tvar localNSMap = config.localNSMap;\n\t\t\t\t\tdomBuilder.endElement(config.uri, config.localName, currentTagName);\n\t\t\t\t\tif (localNSMap) {\n\t\t\t\t\t\tfor (var prefix in localNSMap) {\n\t\t\t\t\t\t\tif (hasOwn(localNSMap, prefix)) {\n\t\t\t\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tend++;\n\t\t\t\t\tbreak;\n\t\t\t\t// end element\n\t\t\t\tcase '?': // \n\t\t\t\t\tlocator && position(tagStart);\n\t\t\t\t\tend = parseProcessingInstruction(source, tagStart, domBuilder, errorHandler);\n\t\t\t\t\tbreak;\n\t\t\t\tcase '!': // start) {\n\t\t\tstart = end;\n\t\t} else {\n\t\t\t//Possible sax fallback here, risk of positional error\n\t\t\tappendText(Math.max(tagStart, start) + 1);\n\t\t}\n\t}\n}\n\nfunction copyLocator(f, t) {\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n}\n\n/**\n * @returns\n * end of the elementStartPart(end of elementEndPart for selfClosed el)\n * @see {@link #appendElement}\n */\nfunction parseElementStartPart(source, start, el, currentNSMap, entityReplacer, errorHandler, isHTML) {\n\t/**\n\t * @param {string} qname\n\t * @param {string} value\n\t * @param {number} startIndex\n\t */\n\tfunction addAttribute(qname, value, startIndex) {\n\t\tif (hasOwn(el.attributeNames, qname)) {\n\t\t\treturn errorHandler.fatalError('Attribute ' + qname + ' redefined');\n\t\t}\n\t\tif (!isHTML && value.indexOf('<') >= 0) {\n\t\t\treturn errorHandler.fatalError(\"Unescaped '<' not allowed in attributes values\");\n\t\t}\n\t\tel.addValue(\n\t\t\tqname,\n\t\t\t// @see https://www.w3.org/TR/xml/#AVNormalize\n\t\t\t// since the xmldom sax parser does not \"interpret\" DTD the following is not implemented:\n\t\t\t// - recursive replacement of (DTD) entity references\n\t\t\t// - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA\n\t\t\tvalue.replace(/[\\t\\n\\r]/g, ' ').replace(ENTITY_REG, entityReplacer),\n\t\t\tstartIndex\n\t\t);\n\t}\n\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG; //status\n\twhile (true) {\n\t\tvar c = source.charAt(p);\n\t\tswitch (c) {\n\t\t\tcase '=':\n\t\t\t\tif (s === S_ATTR) {\n\t\t\t\t\t//attrName\n\t\t\t\t\tattrName = source.slice(start, p);\n\t\t\t\t\ts = S_EQ;\n\t\t\t\t} else if (s === S_ATTR_SPACE) {\n\t\t\t\t\ts = S_EQ;\n\t\t\t\t} else {\n\t\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\t\tthrow new Error('attribute equal must after attrName'); // No known test case\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"'\":\n\t\t\tcase '\"':\n\t\t\t\tif (\n\t\t\t\t\ts === S_EQ ||\n\t\t\t\t\ts === S_ATTR //|| s == S_ATTR_SPACE\n\t\t\t\t) {\n\t\t\t\t\t//equal\n\t\t\t\t\tif (s === S_ATTR) {\n\t\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"');\n\t\t\t\t\t\tattrName = source.slice(start, p);\n\t\t\t\t\t}\n\t\t\t\t\tstart = p + 1;\n\t\t\t\t\tp = source.indexOf(c, start);\n\t\t\t\t\tif (p > 0) {\n\t\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\t\taddAttribute(attrName, value, start - 1);\n\t\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\t\tthrow new Error(\"attribute value no end '\" + c + \"' match\");\n\t\t\t\t\t}\n\t\t\t\t} else if (s == S_ATTR_NOQUOT_VALUE) {\n\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\t\terrorHandler.warning('attribute \"' + attrName + '\" missed start quot(' + c + ')!!');\n\t\t\t\t\tstart = p + 1;\n\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t} else {\n\t\t\t\t\t//fatalError: no equal before\n\t\t\t\t\tthrow new Error('attribute value must after \"=\"'); // No known test case\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '/':\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase S_TAG:\n\t\t\t\t\t\tel.setTagName(source.slice(start, p));\n\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\t\ts = S_TAG_CLOSE;\n\t\t\t\t\t\tel.closed = true;\n\t\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\tcase S_ATTR:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\t\tel.closed = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t//case S_EQ:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error(\"attribute invalid close char('/')\"); // No known test case\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '': //end document\n\t\t\t\terrorHandler.error('unexpected end of input');\n\t\t\t\tif (s == S_TAG) {\n\t\t\t\t\tel.setTagName(source.slice(start, p));\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\tcase '>':\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase S_TAG:\n\t\t\t\t\t\tel.setTagName(source.slice(start, p));\n\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\t\tbreak; //normal\n\t\t\t\t\tcase S_ATTR_NOQUOT_VALUE: //Compatible state\n\t\t\t\t\tcase S_ATTR:\n\t\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\t\tif (value.slice(-1) === '/') {\n\t\t\t\t\t\t\tel.closed = true;\n\t\t\t\t\t\t\tvalue = value.slice(0, -1);\n\t\t\t\t\t\t}\n\t\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\t\tif (s === S_ATTR_SPACE) {\n\t\t\t\t\t\t\tvalue = attrName;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (s == S_ATTR_NOQUOT_VALUE) {\n\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + value + '\" missed quot(\")!');\n\t\t\t\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!isHTML) {\n\t\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + value + '\" missed value!! \"' + value + '\" instead!!');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\taddAttribute(value, value, start);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase S_EQ:\n\t\t\t\t\t\tif (!isHTML) {\n\t\t\t\t\t\t\treturn errorHandler.fatalError('AttValue: \\' or \" expected');\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\t\tcase '\\u0080':\n\t\t\t\tc = ' ';\n\t\t\tdefault:\n\t\t\t\tif (c <= ' ') {\n\t\t\t\t\t//space\n\t\t\t\t\tswitch (s) {\n\t\t\t\t\t\tcase S_TAG:\n\t\t\t\t\t\t\tel.setTagName(source.slice(start, p)); //tagName\n\t\t\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_ATTR:\n\t\t\t\t\t\t\tattrName = source.slice(start, p);\n\t\t\t\t\t\t\ts = S_ATTR_SPACE;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\t\t\tvar value = source.slice(start, p);\n\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + value + '\" missed quot(\")!!');\n\t\t\t\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t//case S_TAG_SPACE:\n\t\t\t\t\t\t//case S_EQ:\n\t\t\t\t\t\t//case S_ATTR_SPACE:\n\t\t\t\t\t\t//\tvoid();break;\n\t\t\t\t\t\t//case S_TAG_CLOSE:\n\t\t\t\t\t\t//ignore warning\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t//not space\n\t\t\t\t\t//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n\t\t\t\t\t//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\n\t\t\t\t\tswitch (s) {\n\t\t\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\n\t\t\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\t\t\tif (!isHTML) {\n\t\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + attrName + '\" missed value!! \"' + attrName + '\" instead2!!');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\taddAttribute(attrName, attrName, start);\n\t\t\t\t\t\t\tstart = p;\n\t\t\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\t\t\terrorHandler.warning('attribute space is required\"' + attrName + '\"!!');\n\t\t\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\t\t\tstart = p;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_EQ:\n\t\t\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\n\t\t\t\t\t\t\tstart = p;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t} //end outer switch\n\t\tp++;\n\t}\n}\n\n/**\n * @returns\n * `true` if a new namespace has been defined.\n */\nfunction appendElement(el, domBuilder, currentNSMap) {\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\tvar i = el.length;\n\twhile (i--) {\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif (nsp > 0) {\n\t\t\tvar prefix = (a.prefix = qName.slice(0, nsp));\n\t\t\tvar localName = qName.slice(nsp + 1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName;\n\t\t} else {\n\t\t\tlocalName = qName;\n\t\t\tprefix = null;\n\t\t\tnsPrefix = qName === 'xmlns' && '';\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName;\n\t\t//prefix == null for no ns prefix attribute\n\t\tif (nsPrefix !== false) {\n\t\t\t//hack!!\n\t\t\tif (localNSMap == null) {\n\t\t\t\tlocalNSMap = Object.create(null);\n\t\t\t\t_copy(currentNSMap, (currentNSMap = Object.create(null)));\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = NAMESPACE.XMLNS;\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value);\n\t\t}\n\t}\n\tvar i = el.length;\n\twhile (i--) {\n\t\ta = el[i];\n\t\tif (a.prefix) {\n\t\t\t//no prefix attribute has no namespace\n\t\t\tif (a.prefix === 'xml') {\n\t\t\t\ta.uri = NAMESPACE.XML;\n\t\t\t}\n\t\t\tif (a.prefix !== 'xmlns') {\n\t\t\t\ta.uri = currentNSMap[a.prefix];\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif (nsp > 0) {\n\t\tprefix = el.prefix = tagName.slice(0, nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp + 1);\n\t} else {\n\t\tprefix = null; //important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = (el.uri = currentNSMap[prefix || '']);\n\tdomBuilder.startElement(ns, localName, tagName, el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif (el.closed) {\n\t\tdomBuilder.endElement(ns, localName, tagName);\n\t\tif (localNSMap) {\n\t\t\tfor (prefix in localNSMap) {\n\t\t\t\tif (hasOwn(localNSMap, prefix)) {\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\t//parseStack.push(el);\n\t\treturn true;\n\t}\n}\n\nfunction parseHtmlSpecialContent(source, elStartEnd, tagName, entityReplacer, domBuilder) {\n\t// https://html.spec.whatwg.org/#raw-text-elements\n\t// https://html.spec.whatwg.org/#escapable-raw-text-elements\n\t// https://html.spec.whatwg.org/#cdata-rcdata-restrictions:raw-text-elements\n\t// TODO: https://html.spec.whatwg.org/#cdata-rcdata-restrictions\n\tvar isEscapableRaw = isHTMLEscapableRawTextElement(tagName);\n\tif (isEscapableRaw || isHTMLRawTextElement(tagName)) {\n\t\tvar elEndStart = source.indexOf('', elStartEnd);\n\t\tvar text = source.substring(elStartEnd + 1, elEndStart);\n\n\t\tif (isEscapableRaw) {\n\t\t\ttext = text.replace(ENTITY_REG, entityReplacer);\n\t\t}\n\t\tdomBuilder.characters(text, 0, text.length);\n\t\treturn elEndStart;\n\t}\n\treturn elStartEnd + 1;\n}\n\nfunction _copy(source, target) {\n\tfor (var n in source) {\n\t\tif (hasOwn(source, n)) {\n\t\t\ttarget[n] = source[n];\n\t\t}\n\t}\n}\n\n/**\n * @typedef ParseUtils\n * @property {function(relativeIndex: number?): string | undefined} char\n * Provides look ahead access to a singe character relative to the current index.\n * @property {function(): number} getIndex\n * Provides read-only access to the current index.\n * @property {function(reg: RegExp): string | null} getMatch\n * Applies the provided regular expression enforcing that it starts at the current index and\n * returns the complete matching string,\n * and moves the current index by the length of the matching string.\n * @property {function(): string} getSource\n * Provides read-only access to the complete source.\n * @property {function(places: number?): void} skip\n * moves the current index by places (defaults to 1)\n * @property {function(): number} skipBlanks\n * Moves the current index by the amount of white space that directly follows the current index\n * and returns the amount of whitespace chars skipped (0..n),\n * or -1 if the end of the source was reached.\n * @property {function(): string} substringFromIndex\n * creates a substring from the current index to the end of `source`\n * @property {function(compareWith: string): boolean} substringStartsWith\n * Checks if source contains `compareWith`,\n * starting from the current index.\n * @see {@link parseUtils}\n */\n\n/**\n * A temporary scope for parsing and look ahead operations in `source`,\n * starting from index `start`.\n *\n * Some operations move the current index by a number of positions,\n * after which `getIndex` returns the new index.\n *\n * @param {string} source\n * @param {number} start\n * @returns {ParseUtils}\n */\nfunction parseUtils(source, start) {\n\tvar index = start;\n\n\tfunction char(n) {\n\t\tn = n || 0;\n\t\treturn source.charAt(index + n);\n\t}\n\n\tfunction skip(n) {\n\t\tn = n || 1;\n\t\tindex += n;\n\t}\n\n\tfunction skipBlanks() {\n\t\tvar blanks = 0;\n\t\twhile (index < source.length) {\n\t\t\tvar c = char();\n\t\t\tif (c !== ' ' && c !== '\\n' && c !== '\\t' && c !== '\\r') {\n\t\t\t\treturn blanks;\n\t\t\t}\n\t\t\tblanks++;\n\t\t\tskip();\n\t\t}\n\t\treturn -1;\n\t}\n\tfunction substringFromIndex() {\n\t\treturn source.substring(index);\n\t}\n\tfunction substringStartsWith(text) {\n\t\treturn source.substring(index, index + text.length) === text;\n\t}\n\n\tfunction getMatch(args) {\n\t\tvar expr = g.reg('^', args);\n\t\tvar match = expr.exec(substringFromIndex());\n\t\tif (match) {\n\t\t\tskip(match[0].length);\n\t\t\treturn match[0];\n\t\t}\n\t\treturn null;\n\t}\n\treturn {\n\t\tchar: char,\n\t\tgetIndex: function () {\n\t\t\treturn index;\n\t\t},\n\t\tgetMatch: getMatch,\n\t\tgetSource: function () {\n\t\t\treturn source;\n\t\t},\n\t\tskip: skip,\n\t\tskipBlanks: skipBlanks,\n\t\tsubstringFromIndex: substringFromIndex,\n\t\tsubstringStartsWith: substringStartsWith,\n\t};\n}\n\n/**\n * @param {ParseUtils} p\n * @param {DOMHandler} errorHandler\n * @returns {string}\n */\nfunction parseDoctypeInternalSubset(p, errorHandler) {\n\t/**\n\t * @param {ParseUtils} p\n\t * @param {DOMHandler} errorHandler\n\t * @returns {string}\n\t */\n\tfunction parsePI(p, errorHandler) {\n\t\tvar match = g.PI.exec(p.substringFromIndex());\n\t\tif (!match) {\n\t\t\treturn errorHandler.fatalError('processing instruction is not well-formed at position ' + p.getIndex());\n\t\t}\n\t\tif (match[1].toLowerCase() === 'xml') {\n\t\t\treturn errorHandler.fatalError(\n\t\t\t\t'xml declaration is only allowed at the start of the document, but found at position ' + p.getIndex()\n\t\t\t);\n\t\t}\n\t\tp.skip(match[0].length);\n\t\treturn match[0];\n\t}\n\t// Parse internal subset\n\tvar source = p.getSource();\n\tif (p.char() === '[') {\n\t\tp.skip(1);\n\t\tvar intSubsetStart = p.getIndex();\n\t\twhile (p.getIndex() < source.length) {\n\t\t\tp.skipBlanks();\n\t\t\tif (p.char() === ']') {\n\t\t\t\tvar internalSubset = source.substring(intSubsetStart, p.getIndex());\n\t\t\t\tp.skip(1);\n\t\t\t\treturn internalSubset;\n\t\t\t}\n\t\t\tvar current = null;\n\t\t\t// Only in external subset\n\t\t\t// if (char() === '<' && char(1) === '!' && char(2) === '[') {\n\t\t\t// \tparseConditionalSections(p, errorHandler);\n\t\t\t// } else\n\t\t\tif (p.char() === '<' && p.char(1) === '!') {\n\t\t\t\tswitch (p.char(2)) {\n\t\t\t\t\tcase 'E': // ELEMENT | ENTITY\n\t\t\t\t\t\tif (p.char(3) === 'L') {\n\t\t\t\t\t\t\tcurrent = p.getMatch(g.elementdecl);\n\t\t\t\t\t\t} else if (p.char(3) === 'N') {\n\t\t\t\t\t\t\tcurrent = p.getMatch(g.EntityDecl);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'A': // ATTRIBUTE\n\t\t\t\t\t\tcurrent = p.getMatch(g.AttlistDecl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'N': // NOTATION\n\t\t\t\t\t\tcurrent = p.getMatch(g.NotationDecl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '-': // COMMENT\n\t\t\t\t\t\tcurrent = p.getMatch(g.Comment);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if (p.char() === '<' && p.char(1) === '?') {\n\t\t\t\tcurrent = parsePI(p, errorHandler);\n\t\t\t} else if (p.char() === '%') {\n\t\t\t\tcurrent = p.getMatch(g.PEReference);\n\t\t\t} else {\n\t\t\t\treturn errorHandler.fatalError('Error detected in Markup declaration');\n\t\t\t}\n\t\t\tif (!current) {\n\t\t\t\treturn errorHandler.fatalError('Error in internal subset at position ' + p.getIndex());\n\t\t\t}\n\t\t}\n\t\treturn errorHandler.fatalError('doctype internal subset is not well-formed, missing ]');\n\t}\n}\n\n/**\n * Called when the parser encounters an element starting with '') {\n\t\t\t\treturn errorHandler.fatalError('doctype not terminated with > at position ' + p.getIndex());\n\t\t\t}\n\t\t\tp.skip(1);\n\t\t\tdomBuilder.startDTD(doctype.name, doctype.publicId, doctype.systemId, doctype.internalSubset);\n\t\t\tdomBuilder.endDTD();\n\t\t\treturn p.getIndex();\n\t\t}\n\t\tdefault:\n\t\t\treturn errorHandler.fatalError('Not well-formed XML starting with \" 0) {\n\t\t\treturn errorHandler.fatalError(\n\t\t\t\t'processing instruction at position ' + start + ' is an xml declaration which is only at the start of the document'\n\t\t\t);\n\t\t}\n\t\tif (!g.XMLDecl.test(source.substring(start))) {\n\t\t\treturn errorHandler.fatalError('xml declaration is not well-formed');\n\t\t}\n\t}\n\tdomBuilder.processingInstruction(match[1], match[2]);\n\treturn start + match[0].length;\n}\n\nfunction ElementAttributes() {\n\tthis.attributeNames = Object.create(null);\n}\n\nElementAttributes.prototype = {\n\tsetTagName: function (tagName) {\n\t\tif (!g.QName_exact.test(tagName)) {\n\t\t\tthrow new Error('invalid tagName:' + tagName);\n\t\t}\n\t\tthis.tagName = tagName;\n\t},\n\taddValue: function (qName, value, offset) {\n\t\tif (!g.QName_exact.test(qName)) {\n\t\t\tthrow new Error('invalid attribute:' + qName);\n\t\t}\n\t\tthis.attributeNames[qName] = this.length;\n\t\tthis[this.length++] = { qName: qName, value: value, offset: offset };\n\t},\n\tlength: 0,\n\tgetLocalName: function (i) {\n\t\treturn this[i].localName;\n\t},\n\tgetLocator: function (i) {\n\t\treturn this[i].locator;\n\t},\n\tgetQName: function (i) {\n\t\treturn this[i].qName;\n\t},\n\tgetURI: function (i) {\n\t\treturn this[i].uri;\n\t},\n\tgetValue: function (i) {\n\t\treturn this[i].value;\n\t},\n\t//\t,getIndex:function(uri, localName)){\n\t//\t\tif(localName){\n\t//\n\t//\t\t}else{\n\t//\t\t\tvar qName = uri\n\t//\t\t}\n\t//\t},\n\t//\tgetValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},\n\t//\tgetType:function(uri,localName){}\n\t//\tgetType:function(i){},\n};\n\nexports.XMLReader = XMLReader;\nexports.parseUtils = parseUtils;\nexports.parseDoctypeCommentOrCData = parseDoctypeCommentOrCData;\n","/**\n * @classdesc\n * \n * Gestion du service de recherche de couches\n * \n * @module Search\n * @alias module:~services/Search\n * @fixme en attente d'evolution du service pour le filtrage sur le type \n * afin d'écarter des reponses de la recherche (ex. DOWNLOAD)\n * @see https://geoservices.ign.fr/documentation/services/services-geoplateforme/service-geoplateforme-de-recherche\n */\n\n/** resultats du service */\nlet m_suggestions = [];\n\n/** gestion annulation du fetch */\nlet controller = new AbortController();\n\n/** index de recherche */\nlet m_index = \"geoplateforme\";\n\n/** \n * liste des champs de recherche\n * valeurs : \"title, description, theme, keywords, layer_name\"\n */\nlet m_fields = \"title,layer_name\";\n\n/** nombre de suggestions du service */\nlet m_size = \"1000\";\n\n/** nombre maximum de réponses */\nlet m_maximumResponses = 10;\n\n/** \n * liste des filtres sur les services\n * @type {Array}\n * @example\n * valeurs : [\"WMTS\", \"TMS\", \"WMS\", \"WFS\", ...]\n */\nlet m_filterByService = [\"WMTS\", \"TMS\"];\n\n/** \n * liste des couches à exclure avec ces projections \n * @type {Array}\n * @example\n * [\"EPSG:4326\",...]\n */\nlet m_filterByProjection = [];\n\n/** \n * liste des couches priortaires dans la recherche\n * sous la forme : [name]\n * > mettre un poids au score des couches que l'on souhaite \n * > mettre en avant dans la recherche\n * \n * @type {Array}\n * @example\n * \"PLAN.IGN$GEOPORTAIL:GPP:TMS\" ou \"PLAN.IGN:TMS\" ou \"PLAN.IGN\"\n * \n */\nlet m_filterByLayerPriority = [];\n\n/** Prioriser les couches de type WMTS sur le service WMS */\nlet m_filterWMTSPriority = false;\n\n/** \n * filtres les services uniquement en TMS\n * @fixme en attente d'evolution du service pour determiner les \"real\" couches vecteurs\n * @type {Array}\n */\nlet m_filterByTMS = [\n \"ADMIN_EXPRESS\",\n \"ISOHYPSE\",\n \"PLAN.IGN\",\n \"OCSGE_2016\",\n \"OCSGE_2019\",\n \"PCI\",\n \"BDTOPO\"\n];\n\n/** url du service (template avec ${m_index}) */\nlet m_url = `https://data.geopf.fr/recherche/api/indexes/${m_index}/suggest`;\n\n/**\n * Interface pour les evenements\n * @example\n * target.dispatchEvent(new CustomEvent(\"myEvent\", { detail : {} }));\n * target.addEventListener(\"myEvent\", handler);\n */\nconst target = new EventTarget();\n\n/**\n * Appel du service de recherche\n * @param {*} text - recherche\n * @returns {Object} json\n * @fire suggest\n * @example\n * {\n * \"attribution\": {},\n * \"srs\": [\n * \"EPSG:3857\"\n * ],\n * \"keywords\": [],\n * \"extent\": {\n * \"type\": \"Polygon\",\n * \"coordinates\": [\n * [\n * [\n * 55.9423828,\n * -21.5354858\n * ],\n * [\n * 55.9423828,\n * 51.1237818\n * ],\n * [\n * -63.28125,\n * 51.1237818\n * ],\n * [\n * -63.28125,\n * -21.5354858\n * ],\n * [\n * 55.9423828,\n * -21.5354858\n * ]\n * ]\n * ]\n * },\n * \"metadata\": [],\n * \"name\": \"PLAN.IGN\",\n * \"title\": \"Plan IGN\",\n * \"description\": \"Plan IGN personnalisable\",\n * \"service\": \"TMS\",\n * \"url\": \"https://data.geopf.fr/tms/1.0.0/PLAN.IGN\"\n * }\n * @fire suggest\n */\nconst suggest = async (text) => {\n // ex. request\n // https://data.geopf.fr/recherche/api/indexes/geoplateforme/suggest?text=ORTHO&fields=title\n clear();\n\n controller = new AbortController();\n\n let url = new URL(m_url);\n let params = {\n text : text,\n fields : m_fields,\n size : m_size\n };\n\n Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));\n\n var response = await fetch(url, {\n // FIXME\n // signal : controller.signal\n });\n\n var results = await response.json();\n\n if (response.status !== 200) {\n throw new Error(response.message);\n }\n\n // ex. response\n // [\n // {\n // \"index\": \"geoplateforme\",\n // \"score\": 3.4832718,\n // \"source\": {\n // \"id\": \"fc2af911-d9c2-4fc8-aee7-46034eebf821\",\n // \"offering_id\": \"faa4c69c-d03b-4502-af87-7f3667411321\",\n // \"index_name\": \"geoplateforme\",\n // \"layer_name\": \"nl_bdtopo_allauch\",\n // \"title\": \"NL - BD Topo : Allauch\",\n // \"description\": \"Extrait de BD TOPo sur Allauch\",\n // \"type\": \"WMS\",\n // \"url\": \"https://data.geopf.fr/wms-v?service=WMS&version=1.3.0&request=GetMap&layers=nl_bdtopo_allauch&bbox={xmin},{ymin},{xmax},{ymax}&styles={styles}&width={width}&height={height}&srs={srs}&format={format}\",\n // \"open\": true,\n // \"publication_date\": \"2023-11-27\",\n // \"keywords\": [\n // \"BDTOPO\",\n // \"Recette\"\n // ],\n // \"extent\": {},\n // \"metadata_urls\": [],\n // \"srs\": [\n // \"EPSG:2154\"\n // ],\n // \"attribution\": {\n // \"title\": \"Ministère de la Transition écologique et de la Cohésion des territoires\",\n // \"url\": \"https://www.ecologie.gouv.fr/\",\n // \"logo\": {\n // \"format\": \"image/png\",\n // \"url\": \"https://data.geopf.fr/annexes/ressources/logos/mtect.png\",\n // \"width\": 294,\n // \"height\": 171\n // }\n // }\n // }\n // }\n // ]\n if (!results || results.length === 0) {\n return;\n }\n\n // INFO\n // Attribution d'un score bonus aux couches priortaires,\n // puis retriage des résultats en fonction du score\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n const found = m_filterByLayerPriority.findIndex((element) => { return element.includes(result.source.layer_name); });\n if (found >= 0) {\n results[i].score += 100;\n // console.log(\"found\", result);\n }\n }\n results.sort((a, b) => b.score - a.score);\n\n var filter = null;\n if (m_filterWMTSPriority) {\n filter = inventory(results);\n }\n\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n var services = (m_filterByService.length === 0 || m_filterByService.includes(result.source.type));\n // FIXME \n // utilisation le champ : result.source.open ?\n if (services) {\n if (unique().length >= m_maximumResponses) {\n break;\n }\n // INFO\n // champs possibles mais pas toujours remplis :\n // srs[], attributions{}, extent{}, metada_url[]\n var o = {\n attribution : result.source.attribution || {},\n srs : result.source.srs || [],\n keywords : result.source.keywords || [],\n extent : result.source.extent || {},\n metadata : result.source.metadata_urls || [], // mapping ?\n name : result.source.layer_name || \"\",\n title : result.source.title || \"\",\n description : result.source.description,\n service : result.source.type || \"\", // mapping\n url : result.source.url || \"\",\n tech : result.source.tech || {},\n tags : result.source.tags || {},\n theme : result.source.theme || \"\",\n producer : result.source.producer || \"\"\n };\n if (m_filterByTMS.length) {\n if ((o.service === \"WMTS\" && m_filterByTMS.includes(o.name)) ||\n (o.service === \"TMS\" && !m_filterByTMS.includes(o.name))) {\n continue;\n }\n }\n if (m_filterByProjection.length) {\n // FIXME Array !?\n if (m_filterByProjection.includes(o.srs[0])) {\n continue;\n }\n }\n if (filter && filter[o.name] && o.service === \"WMS\") {\n continue;\n }\n m_suggestions.push(o);\n // console.log(\"suggestion\", result);\n }\n }\n\n target.dispatchEvent(\n new CustomEvent(\"suggest\", {\n bubbles : true,\n detail : getSuggestions()\n })\n );\n\n return getSuggestions();\n};\n\n/**\n * Retourne la liste des suggestions sans doublons\n * @returns {Object} liste des suggestions sans doublons\n */\nconst unique = () => {\n return m_suggestions.filter((value, index, self) =>\n index === self.findIndex((t) => (\n t.service === value.service &&\n t.name === value.name &&\n t.title === value.title &&\n t.description === value.description\n ))\n );\n // INFO\n // soit on trie, \n // soit on laisse le trie natif en fonction du score\n // .sort((a, b) => {\n // // INFO\n // // titleA (WMTS)\n // // titleA (WMS)\n // // titleA (WFS)\n // // titleA (TMS)\n // // titleB (WMTS)\n // return a.title.localeCompare(b.title) || b.service - a.service;\n // });\n};\n\n/**\n * Clear\n */\nconst clear = () => {\n controller.abort();\n m_suggestions = [];\n};\n\n/** \n * Determine si une couche est associé avec des services WMS et/ou WMTS\n * \n * true : WMTS only ou WMTS avec des WMS associés ou pas\n * false : WMS only\n * @param {Array} results - réponse de la recherche\n * @returns {Object} - ...\n * @example\n * {\n * PLAN.IGN: true, // WMTS et des WMS\n * BDTOPO:batiments: false // uniquements des WMS\n * }\n */\nconst inventory = (results) => {\n var inventory = {};\n for (let i = 0; i < results.length; i++) {\n const type = results[i].source.type;\n const name = results[i].source.layer_name;\n if (type === \"WMTS\" || type === \"WMS\") {\n if (inventory[name] === undefined) {\n inventory[name] = type === \"WMTS\";\n }\n inventory[name] ||= type === \"WMTS\";\n }\n }\n // console.log(inventory);\n return inventory;\n};\n\n// getter (reponse)\n\n/**\n * Liste des suggestions (unique)\n * @returns {Array} Liste des suggestions (unique)\n */\nconst getSuggestions = () => {\n return unique();\n};\n/**\n * Liste des noms (unique)\n * @returns {Array} Liste des noms (unique)\n */\nconst getNames = () => {\n return unique().map((o) => { return o.name; });\n};\n/**\n * Liste des titres (unique)\n * @returns {Array} Liste des titres (unique)\n */\nconst getTitles = () => {\n return unique().map((o) => { return o.title; });\n};\n\n// setter (conf)\n\n/**\n * Renseigne le nom de l'indexe\n * @param {String} value - nom de l'indexe\n * @see m_index\n */\nconst setIndex = (value) => {\n m_index = value;\n};\n/**\n * Renseigne la liste des champs de recherche\n * @param {Array} value - liste des champs de recherche\n * @see m_fields\n */\nconst setFields = (value) => {\n m_fields = value;\n};\n/**\n * Renseigne le nombre de suggestions du service\n * @param {Number} value - le nombre de suggestions du service\n * @see m_size\n */\nconst setSize = (value) => {\n m_size = parseInt(value);\n};\n/**\n * Renseigne l'url du service\n * @param {String} value - url du service\n * @see m_url\n */\nconst setUrl = (value) => {\n m_url = eval(\"`\" + value + \"`\"); // insecure !\n};\n/**\n * Renseigne le nombre de réponse souhaitée\n * @param {Number} value - nombre de réponse\n * @see m_maximumResponses\n */\nconst setMaximumResponses = (value) => {\n m_maximumResponses = parseInt(value);\n};\n/**\n * Filtre sur la liste des services à selectionner\n * @param {String} value - liste de service\n * @see m_filterByService\n */\nconst setFiltersByService = (value) => {\n m_filterByService = value === \"\" ? [] : value.split(\",\");\n};\n/**\n * Filtre sur les couches à exclure\n * @param {String} value - liste des projections\n * @see m_filterByProjection\n */\nconst setFiltersByProjection = (value) => {\n m_filterByProjection = value === \"\" ? [] : value.split(\",\");\n};\n/**\n * Filtre sur les couches prioritaires dans la recherche\n * @param {String} value - liste des couches prioritaires\n * @see m_filterByLayerPriority\n */\nconst setFiltersByLayerPriority = (value) => {\n m_filterByLayerPriority = value === \"\" ? [] : value.split(\",\");\n};\n/** \n * Active ou non le filtre 'strange' \n * @param {Boolean} value - active le filtre\n */\nconst setFilterWMTSPriority = (value) => {\n m_filterWMTSPriority = value;\n};\n/**\n * Filtre sur les \"purs\" couches vecteurs tuilés\n * @param {String} value - liste des couches\n * @see m_filterByTMS\n */\nconst setFiltersByTMS = (value) => {\n m_filterByTMS = value === \"\" ? [] : value.split(\",\");\n};\n/**\n * Mise à jour de la liste des \"purs\" couches vecteurs tuilés\n * @param {String} value - url\n */\nconst updateFilterByTMS = async (value) => {\n var url = value;\n if (!url) {\n url = \"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/vectorTileConfig/fullVectorTileConfig.json\";\n }\n const response = await fetch(url);\n const results = await response.json();\n\n if (response.status !== 200) {\n throw new Error(response.message);\n }\n\n if (!results) {\n throw new Error(\"Liste vide !\");\n }\n\n var lstName = Object.keys(results.layers).map((k) => { return k.split(\"$\")[0]; });\n if (lstName) {\n setFiltersByTMS(lstName.toString());\n }\n\n return m_filterByTMS;\n};\n\nexport default {\n target,\n suggest,\n clear,\n getSuggestions,\n getNames,\n getTitles,\n setIndex,\n setFields,\n setSize,\n setUrl,\n setMaximumResponses,\n setFiltersByService,\n setFiltersByTMS,\n updateFilterByTMS,\n setFiltersByProjection,\n setFiltersByLayerPriority,\n setFilterWMTSPriority\n};\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version v4.2.8+1e68dce6\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\n\n\nvar _isArray = void 0;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var vertx = Function('return this')().require('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n\n if (_state) {\n var callback = arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve$1(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n try {\n then$$1.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then$$1, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$1 === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$1)) {\n handleForeignThenable(promise, maybeThenable, then$$1);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n var then$$1 = void 0;\n try {\n then$$1 = value.then;\n } catch (error) {\n reject(promise, error);\n return;\n }\n handleMaybeThenable(promise, value, then$$1);\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = void 0,\n callback = void 0,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = void 0,\n error = void 0,\n succeeded = true;\n\n if (hasCallback) {\n try {\n value = callback(detail);\n } catch (e) {\n succeeded = false;\n error = e;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (succeeded === false) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n}\n\nvar Enumerator = function () {\n function Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n }\n\n Enumerator.prototype._enumerate = function _enumerate(input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n var c = this._instanceConstructor;\n var resolve$$1 = c.resolve;\n\n\n if (resolve$$1 === resolve$1) {\n var _then = void 0;\n var error = void 0;\n var didError = false;\n try {\n _then = entry.then;\n } catch (e) {\n didError = true;\n error = e;\n }\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise$1) {\n var promise = new c(noop);\n if (didError) {\n reject(promise, error);\n } else {\n handleMaybeThenable(promise, entry, _then);\n }\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$1) {\n return resolve$$1(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$1(entry), i);\n }\n };\n\n Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n var promise = this.promise;\n\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n };\n\n Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n };\n\n return Enumerator;\n}();\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all(entries) {\n return new Enumerator(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {Function} resolver\n Useful for tooling.\n @constructor\n*/\n\nvar Promise$1 = function () {\n function Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n }\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n Chaining\n --------\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n Assimilation\n ------------\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n If the assimliated promise rejects, then the downstream promise will also reject.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n Simple Example\n --------------\n Synchronous Example\n ```javascript\n let result;\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n Advanced Example\n --------------\n Synchronous Example\n ```javascript\n let author, books;\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n function foundBooks(books) {\n }\n function failure(reason) {\n }\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n\n\n Promise.prototype.catch = function _catch(onRejection) {\n return this.then(null, onRejection);\n };\n\n /**\n `finally` will be invoked regardless of the promise's fate just as native\n try/catch/finally behaves\n \n Synchronous example:\n \n ```js\n findAuthor() {\n if (Math.random() > 0.5) {\n throw new Error();\n }\n return new Author();\n }\n \n try {\n return findAuthor(); // succeed or fail\n } catch(error) {\n return findOtherAuther();\n } finally {\n // always runs\n // doesn't affect the return value\n }\n ```\n \n Asynchronous example:\n \n ```js\n findAuthor().catch(function(reason){\n return findOtherAuther();\n }).finally(function(){\n // author was either found, or not\n });\n ```\n \n @method finally\n @param {Function} callback\n @return {Promise}\n */\n\n\n Promise.prototype.finally = function _finally(callback) {\n var promise = this;\n var constructor = promise.constructor;\n\n if (isFunction(callback)) {\n return promise.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n throw reason;\n });\n });\n }\n\n return promise.then(callback, callback);\n };\n\n return Promise;\n}();\n\nPromise$1.prototype.then = then;\nPromise$1.all = all;\nPromise$1.race = race;\nPromise$1.resolve = resolve$1;\nPromise$1.reject = reject$1;\nPromise$1._setScheduler = setScheduler;\nPromise$1._setAsap = setAsap;\nPromise$1._asap = asap;\n\n/*global self*/\nfunction polyfill() {\n var local = void 0;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$1;\n}\n\n// Strange compat..\nPromise$1.polyfill = polyfill;\nPromise$1.Promise = Promise$1;\n\nreturn Promise$1;\n\n})));\n\n\n\n//# sourceMappingURL=es6-promise.map\n","(function(root,factory){if(typeof exports===\"object\"&&typeof module===\"object\")module.exports=factory();else if(typeof define===\"function\"&&define.amd)define(\"EventBus\",[],factory);else if(typeof exports===\"object\")exports[\"EventBus\"]=factory();else root[\"EventBus\"]=factory()})(this,function(){var EventBusClass={};EventBusClass=function(){this.listeners={}};EventBusClass.prototype={addEventListener:function(type,callback,scope){var args=[];var numOfArgs=arguments.length;for(var i=0;i3?args.splice(3,args.length-1):[];if(typeof this.listeners[type]!=\"undefined\"){this.listeners[type].push({scope:scope,callback:callback,args:args})}else{this.listeners[type]=[{scope:scope,callback:callback,args:args}]}},removeEventListener:function(type,callback,scope){if(typeof this.listeners[type]!=\"undefined\"){var numOfCallbacks=this.listeners[type].length;var newArray=[];for(var i=0;i0}for(var i=0;i2?args.splice(2,args.length-1):[];args=[event].concat(args);if(typeof this.listeners[type]!=\"undefined\"){var listeners=this.listeners[type].slice();var numOfCallbacks=listeners.length;for(var i=0;i= 0 && level <= self.levels.SILENT) {\n return level;\n } else {\n throw new TypeError(\"log.setLevel() called with invalid level: \" + input);\n }\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n if (userLevel != null) {\n return userLevel;\n } else if (defaultLevel != null) {\n return defaultLevel;\n } else {\n return inheritedLevel;\n }\n };\n\n self.setLevel = function (level, persist) {\n userLevel = normalizeLevel(level);\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(userLevel);\n }\n\n // NOTE: in v2, this should call rebuild(), which updates children.\n return replaceLoggingMethods.call(self);\n };\n\n self.setDefaultLevel = function (level) {\n defaultLevel = normalizeLevel(level);\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.resetLevel = function () {\n userLevel = null;\n clearPersistedLevel();\n replaceLoggingMethods.call(self);\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n self.rebuild = function () {\n if (defaultLogger !== self) {\n inheritedLevel = normalizeLevel(defaultLogger.getLevel());\n }\n replaceLoggingMethods.call(self);\n\n if (defaultLogger === self) {\n for (var childName in _loggersByName) {\n _loggersByName[childName].rebuild();\n }\n }\n };\n\n // Initialize all the internal levels.\n inheritedLevel = normalizeLevel(\n defaultLogger ? defaultLogger.getLevel() : \"WARN\"\n );\n var initialLevel = getPersistedLevel();\n if (initialLevel != null) {\n userLevel = normalizeLevel(initialLevel);\n }\n replaceLoggingMethods.call(self);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n defaultLogger = new Logger();\n\n defaultLogger.getLogger = function getLogger(name) {\n if ((typeof name !== \"symbol\" && typeof name !== \"string\") || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name,\n defaultLogger.methodFactory\n );\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = (typeof window !== undefinedType) ? window.log : undefined;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n };\n\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n // ES6 default export, for compatibility\n defaultLogger['default'] = defaultLogger;\n\n return defaultLogger;\n}));\n","\"use strict\";\n\n// ref: https://github.com/tc39/proposal-global\nvar getGlobal = function () {\n\t// the only reliable means to get the global object is\n\t// `Function('return this')()`\n\t// However, this causes CSP violations in Chrome apps.\n\tif (typeof self !== 'undefined') { return self; }\n\tif (typeof window !== 'undefined') { return window; }\n\tif (typeof global !== 'undefined') { return global; }\n\tthrow new Error('unable to locate global object');\n}\n\nvar globalObject = getGlobal();\n\nmodule.exports = exports = globalObject.fetch;\n\n// Needed for TypeScript and Webpack.\nif (globalObject.fetch) {\n\texports.default = globalObject.fetch.bind(globalObject);\n}\n\nexports.Headers = globalObject.Headers;\nexports.Request = globalObject.Request;\nexports.Response = globalObject.Response;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = ol.Overlay;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.VectorTile;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.Vector;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.TileWMS;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.WMTS;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.ImageWMS;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.interaction;","import * as Log from \"loglevel\";\n\nvar LoggerByDefault = {\n /**\n * logger statique\n *\n * @static\n * @param {String} name - nom du logger\n * @returns {Object} retourne un logger\n */\n getLogger : function (name) {\n // Substitute global constants configured at compile time\n // cf. webpack.config.js\n // on définit process si non défini dans l'environnement\n // eslint-disable-next-line no-use-before-define\n if (typeof process === \"undefined\") {\n var process = {};\n process.env = {\n VERBOSE : false\n };\n }\n (process.env.VERBOSE) ? Log.enableAll() : Log.disableAll();\n var logname = name || \"default\";\n return Log.getLogger(logname);\n }\n};\n\nexport default LoggerByDefault;\n","/**\n * Classe de gestion des erreurs qui permer d'associer un message d'erreur à l'exception lancée.\n *\n * @example\n * MessagesResources.getMessage(\"ERROR_PARAM_MISSING\", \"x\", \"y\", \"z\")));\n * // --> output : Parameter(s) 'x - y - z' missing\n *\n * @module MessagesResources\n * @alias Gp.Utils.MessagesResources\n * @private\n */\nvar MessagesResources = {\n\n // Paramètres\n PARAM_MISSING : \"Parameter(s) '%var%' missing\",\n PARAM_EMPTY : \"Parameter(s) '%var%' empty\",\n PARAM_TYPE : \"Wrong type(s) for parameter(s) '%var%'\",\n PARAM_FORMAT : \"Parameter(s) '%var%' not correctly formatted\",\n PARAM_NOT_SUPPORT : \"Value(s) for parameter(s) '%var%' not supported\",\n PARAM_NOT_SUPPORT_NODEJS : \"Value(s) for parameter(s) '%var%' not supported to NodeJS\",\n PARAM_UNKNOWN : \"Value(s) for parameter(s) '%var%' unknown\",\n\n // Services\n // Requête\n SERVICE_REQUEST_BUILD : \"An error occurred during the request building of the service\",\n SERVICE_REQUEST_EMPTY : \"The request sent to the service is empty\",\n\n // Réponse\n SERVICE_RESPONSE_EXCEPTION : \"The service returned an exception : '%var%'\",\n SERVICE_RESPONSE_EXCEPTION_2 : \"The service returned an exception\",\n SERVICE_RESPONSE_ANALYSE : \"An error occurred while parsing the response '%var%' of the service\",\n SERVICE_RESPONSE_ANALYSE_2 : \"An unknown error occurred while parsing the response\",\n SERVICE_RESPONSE_EMPTY : \"The response of the service is empty\",\n SERVICE_RESPONSE_EMPTY_2 : \"The response from the service could not be analyzed or is empty\",\n SERVICE_RESPONSE_FORMAT : \"The format of the service response is not supported (handled format(s) : '%var%')\",\n SERVICE_RESPONSE_FORMAT_2 : \"The format of the service response is not supported\",\n SERVICE_RESPONSE_FORMAT_3 : \"No suggestion matching the search\",\n\n // Classes\n CLASS_CONSTRUCTOR : \"'%var%' constructor cannot be called as a function.\",\n\n /**\n * Fonction qui va retourner le message d'erreur associé à la clé donnée\n *\n * @method getMessage\n * @param {String} clef - Clef de l'erreur (ex : ERROR_PARAM)\n * @param {String[]} parametres - Paramètres/variables concernés par le message d'erreur associé à la clef donnée\n * @return {String} message - String contenant le message de l'exception\n */\n getMessage : function (clef, parametres) {\n // param de la fonction uniquement pour la documentation...\n\n if (Object.keys(arguments).length === 0) {\n return \"Message indefined !\";\n }\n\n var params = Array.prototype.slice.call(arguments);\n var key = params.shift();\n var args = params;\n\n var message = this[key];\n\n try {\n if (Array.isArray(args) && args.length > 0) {\n message = message.replace(\"%var%\", args.join(\" - \"));\n } else {\n message = message.replace(\"%var%\", \"%var% (not specified)\");\n }\n } catch (e) {\n // error de string.replace()\n\n }\n\n return message;\n }\n};\n\nexport default MessagesResources;\n","/**\n * Classe utilitaire\n *\n * @module Helper\n * @alias Gp.Helper\n */\nvar Helper = {\n\n /**\n * concatenation des parametres key/value dans les urls\n *\n * @method normalyzeParameters\n * @static\n * @param {Object} params - tableau de clef/valeur\n *\n * @example\n * Gp.Utils.Helper.normalyzeParameters ({\n * key1:value1,\n * key2:value2,\n * key3:value3\n * });\n * // out : \"key1=value1&key2=value2&key3=value3\"\n *\n * @returns {String} retourne les paramètres concaténés\n */\n normalyzeParameters : function (params) {\n var myParams = null;\n\n if (params) {\n var tabParams = [];\n for (var key in params) {\n if (params.hasOwnProperty(key)) {\n var value = params[key];\n if (!value) {\n value = \"\";\n }\n tabParams.push(key + \"=\" + value);\n }\n }\n\n myParams = tabParams.join(\"&\");\n }\n\n return myParams;\n },\n\n /**\n * Concaténation et encodage des urls.\n *\n * @method normalyzeUrl\n * @static\n * @param {String} url - url\n * @param {Object|String} params - tableau de clef/valeur ou string\n * @param {Boolean} encode - true|false, false par defaut\n *\n * @example\n * Gp.Utils.Helper.normalyzeUrl (url, {\n * key1:value1,\n * key2=:value2,\n * key3:value3\n * });\n * // out : \"url?key1=value1&key2=value2&key3=value3\"\n *\n * @returns {String} retourne une url normalisée\n */\n normalyzeUrl : function (url, params, encode) {\n var myUrl = url;\n\n if (url) {\n if (url.split(\"?\").length - 1 >= 2) {\n // S'il y a plusieurs \"?\" dans l'URL, on garde le premier et on remplace les autres par des &\n var firstOccuranceIndex = url.search(/\\?/) + 1;\n myUrl = url.substring(0, firstOccuranceIndex) + url.slice(firstOccuranceIndex).replace(/\\?/g, \"&\");\n }\n\n var k = url.indexOf(\"?\");\n if (k === -1) { // pas de ? et KVP\n myUrl += \"?\";\n }\n\n if (k !== -1 && k !== url.length - 1) { // KVP\n myUrl += \"&\";\n }\n }\n\n if (params) {\n if (typeof params === \"string\") {\n params = params.replace(\"?\", \"\");\n myUrl += params;\n } else {\n myUrl += this.normalyzeParameters(params);\n }\n }\n\n if (encode) {\n // FIXME bonne idée ?\n myUrl = encodeURIComponent(myUrl);\n }\n\n return myUrl;\n },\n\n /**\n * Indentation d'une chaine\n *\n * @method indent\n * @static\n * @param {Number} n - nombre de tabulation\n * @param {String} msg - chaine\n *\n * @example\n * Gp.Utils.Helper.indent (2, \"message à indenter\")\n * // out\n * // ........message à indenter\n *\n * @returns {String} retourne une chaine indentée\n */\n indent : function (n, msg) {\n var num = n || 0;\n return new Array(num + 1).join(\"\\t\") + msg;\n }\n};\n\nexport default Helper;\n","/* global Promise, require, XDomainRequest */\n\nimport Logger from \"../Utils/LoggerByDefault\";\nimport Helper from \"../Utils/Helper\";\nimport ES6Promise from \"es6-promise\";\n// import __request from \"request\";\n// import __xmldom from \"xmldom\";\n\n/**\n * Ajax Request (use of Promises)\n *\n * @module XHR\n * @alias Gp.Protocols.XHR\n * @see dependance 'es6-promise'\n */\n\n// cf. https://xhr.spec.whatwg.org/\n// cf. https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest\n\nvar XHR = {\n\n /**\n * Interface unique d'envoi d'une requête.\n *\n * @method call\n * @static\n * @param {Object} settings - options generales\n * @param {String} settings.url - url du service\n * @param {String} settings.method - GET, POST, PUT, DELETE\n * @param {String} settings.format - format de la reponse du service : json, xml ou null (brute)\n * @param {String} settings.data - content (post) ou param (get)\n * @param {String} settings.proxy - proxy url\n * @param {Object|String} settings.headers - (post) ex. referer\n * @param {Object|String} settings.content - (post) ex. 'application/json'\n * @param {String} settings.timeOut - timeout = 0 par defaut\n * @param {String} settings.scope - this\n * @param {Function} settings.onResponse - callback\n * @param {Function} settings.onFailure - callback\n */\n call : function (settings) {\n // logger\n var logger = Logger.getLogger(\"XHR\");\n logger.trace(\"[XHR::call()]\");\n\n // FIXME\n // To polyfill the global environment\n ES6Promise.polyfill();\n\n // test sur les settings obligatoires\n if (!settings.url) {\n throw new Error(\"missing parameter : url is not defined !\");\n }\n\n if (!settings.method) {\n throw new Error(\"missing parameter : method is not defined !\");\n }\n\n if (!settings.format) {\n settings.format = \"text\"; // reponse brute !\n }\n\n var options = {};\n options.url = settings.url;\n options.data = settings.data ? settings.data : null;\n options.method = settings.method;\n options.timeOut = settings.timeOut || 0;\n options.scope = settings.scope || this;\n options.proxy = settings.proxy || null;\n options.content = settings.content || null;\n options.headers = settings.headers || {\n referer : \"http://localhost\"\n };\n\n // test sur les valeurs de 'settings.method'\n switch (settings.method) {\n case \"DELETE\":\n case \"GET\":\n break;\n case \"PUT\":\n case \"POST\":\n // on force sur ces params spécifiques au mode POST\n options.content = settings.content ? settings.content : \"application/x-www-form-urlencoded\"; // FIXME en attente des services : bascule en \"application/xml\" ou \"application/json\"\n options.headers = settings.headers ? settings.headers : { referer : \"http://localhost\" }; // FIXME parametrable...\n break;\n case \"HEAD\":\n case \"OPTIONS\":\n throw new Error(\"HTTP method not yet supported !\");\n default:\n throw new Error(\"HTTP method unknown !\");\n }\n\n // test sur les valeurs de 'settings.format'\n switch (settings.format) {\n case \"text\":\n this.__call(options)\n .then(function (response) {\n logger.trace(response);\n settings.onResponse.call(this, response);\n })\n .catch(function (error) {\n settings.onFailure.call(this, error);\n });\n break;\n case \"json\":\n this.__callJSON(options)\n .then(function (response) {\n logger.trace(response);\n settings.onResponse.call(this, response);\n })\n .catch(function (error) {\n settings.onFailure.call(this, error);\n });\n break;\n case \"xml\":\n this.__callXML(options)\n .then(function (response) {\n logger.trace(response);\n settings.onResponse.call(this, response);\n })\n .catch(function (error) {\n settings.onFailure.call(this, error);\n });\n break;\n default:\n throw new Error(\"This output Format is not yet supported !\");\n }\n },\n\n /**\n * Requete\n *\n * @method __call\n * @private\n * @param {Object} options - options\n * @return {Object} promise\n */\n __call : function (options) {\n var logger = Logger.getLogger(\"XHR\");\n logger.trace(\"[XHR::__call()]\");\n\n var promise = new Promise(\n function (resolve, reject) {\n // traitement du corps de la requête\n var corps = (options.method === \"POST\" || options.method === \"PUT\") ? 1 : 0;\n\n // seulement si options.data n'est pas vide (peut être un objet ou une chaine de caractères)\n if (options.data && ((typeof options.data === \"object\" && Object.keys(options.data).length) || (typeof options.data === \"string\" && options.data.length)) && !corps) {\n options.url = Helper.normalyzeUrl(options.url, options.data);\n }\n\n logger.trace(\"URL = \", options.url);\n\n var hXHR = null;\n\n // test on env. nodejs or browser\n if (typeof window === \"undefined\") {\n var nodefetch = require(\"node-fetch\");\n\n var opts = {\n headers : {\n Referer : \"https://localhost\"\n }\n };\n\n if (options.data && typeof options.data === \"string\" && corps) {\n opts = {\n method : options.method,\n body : options.data,\n headers : {\n \"Content-Type\" : options.content,\n Referer : \"https://localhost\"\n }\n };\n }\n\n return nodefetch(options.url, opts)\n .then(function (response) {\n if (response.ok) { // res.status >= 200 && res.status < 300\n resolve(response.text());\n } else {\n var message = \"Errors Occured on Http Request (status : '\" + response.statusText + \"' | url : '\" + response.url + \"')\";\n var status = response.status;\n reject({\n message : message,\n status : status\n });\n }\n })\n .catch(function (e) {\n reject({\n message : e,\n status : -1\n });\n });\n } else {\n if (window.XMLHttpRequest) {\n logger.trace(\"XMLHttpRequest\");\n\n hXHR = new XMLHttpRequest();\n hXHR.open(options.method, options.url, true); // async\n hXHR.overrideMimeType = options.content;\n\n // gestion du timeout\n var onTimeOutTrigger = null;\n if (options.timeOut > 0) {\n // FIXME le timeout interne ne me permet pas de declencher le bon message...\n // hXHR.timeout = options.timeOut;\n logger.trace(\"XHR - TimeOut actif !\");\n /**\n * Description\n *\n * @method onTimeOutTrigger\n * @private\n */\n onTimeOutTrigger = window.setTimeout(\n function () {\n var message = \"TimeOut Occured on Http Request with XMLHttpRequest !\";\n reject({\n message : message,\n status : -1\n });\n }, options.timeOut);\n }\n\n if (corps) {\n // headers, data, content of data\n // cf. https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-setrequestheader\n logger.trace(\"data = \", options.data);\n hXHR.setRequestHeader(\"Content-type\", options.content);\n // FIXME refused to set unsafe header content-length javascript\n // hXHR.setRequestHeader (\"Content-length\", options.data.length);\n // hXHR.setRequestHeader (\"Referer\", options.headers.referer);\n }\n\n /**\n * On Error\n * FIXME ne se declenche pas !?\n *\n * @param {Object} e - Event\n * @method onerror\n * @private\n */\n hXHR.onerror = function (e) {\n console.log(e);\n reject(new Error(\"Errors Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * On Timeout\n * FIXME ne se declenche pas !?\n *\n * @param {Object} e - Event\n * @method ontimeout\n * @private\n */\n hXHR.ontimeout = function (e) {\n console.log(e);\n reject(new Error(\"TimeOut Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * Description\n *\n * @method onreadystatechange\n * @private\n */\n hXHR.onreadystatechange = function (e) {\n if (hXHR.readyState === 4) { // DONE\n if (hXHR.status === 200) {\n window.clearTimeout(onTimeOutTrigger);\n resolve(hXHR.response);\n } else {\n var message = \"Errors Occured on Http Request (status : '\" + e.target.statusText + \"' | url : '\" + e.target.responseURL + \"' | response : '\" + e.target.response + \"')\";\n var status = e.target.status;\n reject({\n message : message,\n status : status\n });\n }\n }\n };\n\n // gestion du content data\n var data4xhr = (options.data && corps) ? options.data : null;\n\n hXHR.send(data4xhr);\n } else if (window.XDomainRequest) {\n // worked in Internet Explorer 8–10 only !\n logger.trace(\"XDomainRequest\");\n\n hXHR = new XDomainRequest();\n hXHR.open(options.method, options.url);\n\n hXHR.overrideMimeType = options.content;\n\n if (options.timeOut > 0) {\n hXHR.timeout = options.timeout;\n logger.trace(\"XHR - TimeOut actif !\");\n }\n\n if (corps) {\n // headers, data, content of data\n // cf. https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-setrequestheader\n hXHR.setRequestHeader(\"Content-type\", options.content);\n // FIXME refused to set unsafe header content-length javascript\n // hXHR.setRequestHeader (\"Content-length\", options.data.length);\n // hXHR.setRequestHeader (\"Referer\", options.headers.referer);\n }\n\n /**\n * Description\n *\n * @method onerror\n * @private\n */\n hXHR.onerror = function () {\n reject(new Error(\"Errors Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * Description\n *\n * @method ontimeout\n * @private\n */\n hXHR.ontimeout = function () {\n reject(new Error(\"TimeOut Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * On Load\n *\n * @method onload\n * @private\n */\n hXHR.onload = function (e) {\n if (hXHR.status === 200) {\n resolve(hXHR.responseText);\n } else {\n var message = \"Errors Occured on Http Request (status : '\" + e.target.statusText + \"' | url : '\" + e.target.responseURL + \"')\";\n var status = e.target.status;\n reject({\n message : message,\n status : status\n });\n }\n };\n\n var data4xdr = (options.data && corps) ? options.data : null;\n\n hXHR.send(data4xdr);\n } else {\n throw new Error(\"CORS not supported\");\n }\n }\n }\n );\n\n return promise;\n },\n\n /**\n * Requete avec parser JSON\n *\n * @method __callJSON\n * @private\n * @param {Object} options - options\n * @return {Object} promise\n */\n __callJSON : function (options) {\n return this.__call(options)\n .then(JSON.parse)\n .catch(function (error) {\n console.log(\"_callJSON failed on : \", options.url, error);\n // FIXME pas d'exception, laissons le fil se derouler...\n // throw error;\n });\n },\n\n /**\n * Requete avec parser XML\n *\n * @method __callXML\n * @private\n * @param {Object} options - options\n * @return {Object} promise\n */\n __callXML : function (options) {\n return this.__call(options)\n .then(function (response) {\n var xmlDoc;\n\n // test on env. nodejs or browser\n if (typeof window === \"undefined\") {\n var DOMParser = require(\"@xmldom/xmldom\").DOMParser; // __xmldom.DOMParser\n xmlDoc = new DOMParser().parseFromString(response, \"text/xml\");\n } else {\n if (window.DOMParser) {\n var parser = new window.DOMParser();\n xmlDoc = parser.parseFromString(response, \"text/xml\");\n } else { // IE\n xmlDoc = new window.ActiveXObject(\"Microsoft.XMLDOM\");\n xmlDoc.async = false;\n xmlDoc.loadXML(response);\n }\n }\n\n return xmlDoc;\n })\n .catch(function (error) {\n console.log(\"__callXML failed on : \", options.url, error);\n // FIXME pas d'exception, laissons le fil se derouler...\n // throw error;\n });\n }\n\n};\n\nexport default XHR;\n","/**\n * JSONP : Implémentation du protocole JSONP de la plateforme Géoportail\n *\n * @module JSONP\n * @private\n * @alias Gp.Protocols.JSONP\n */\nimport Logger from \"../Utils/LoggerByDefault\";\n\n// cf. https://github.com/sobstel/jsonp.js\nvar JSONP = {\n\n /**\n * Construction d'un identifiant statique basé sur le timestamp,\n * et qui s'incremente de +1 à chaque appel\n */\n uuid : (function () {\n var id = Math.floor(Date.now());\n return function () {\n return id++;\n };\n })(),\n\n /**\n * Cette fonction réalise l'appel du service fourni via le paramètre \"options.url\"\n * en mettant en œuvre le protocole JSONP.\n *\n * @method call\n * @static\n * @param {Object} options - parametres d'invocation du service en JSONP\n * @param {String} options.url - URL du service à invoquer (indépendamment du protocole JSONP).\n * Cette URL contient déjà les paramètres du service.\n * Si le paramètre dédié à la mise en oeuvre du protocole JSONP (callback=xxx) n'est pas présent, il est rajouté par la fonction ;\n * sa valeur est déterminée en fonction du paramètre callbackName.\n * @param {Number} [options.timeOut = 0] - Nombre de ms au bout duquel on considère que le service n'a pas répondu.\n * Une valeur de 0 pour ce paramètre permet de désactiver la gestion du timeOut.\n * @param {String} [options.callbackSuffix = null] - Suffixe de la fonction de callback à rajouter sur l'URL.\n * Si aucun suffixe n'est spécifié (cas par défaut), on utilisera l'identifiant this.uuid () comme suffixe. Ex: \"callback1458574396582 ()\"\n * @param {String} [options.callbackName = gp.protocol.jsonp] - Valeur du paramètre callback à rajouter sur l'URL.\n * Si l'URL fournie contient déjà le paramètre callback, le paramètre callbackName ne sera pas pris en compte.\n * La fonction de callback est créée dynamiquement par la fonction JSONP ;\n * elle a deux fonctions :\n * elle annule la condition de timeOut\n * puis appelle la fonction fournie par l'utilisateur via le paramètre onResponse.\n * @param {Function} options.onResponse - Nom de la fonction qui sera appelée lors de la réception des résultats du service.\n * Ce paramètre sera ignoré si l'URL contient déjà le paramètre callback.\n * La fonction de rappel appelée sera alors celle ayant pour nom la valeur de ce paramètre.\n * @param {Function} [options.onTimeOut] - Nom de la fonction qui sera appelée en cas de non réponse du service.\n * Le temps au bout duquel on considère que le service n'a pas répondu est déterminé par le paramètre timeOut.\n * @example\n * var options = {\n * url : 'http://localhost/some/test.json&callback=myResults',\n * timeOut : 100,\n * callbackName : 'myResults',\n * callbackSuffix : \"\",\n * onResponse : function (response) {\n * console.log('results : ', response);\n * },\n *\n * };\n * JSONP.call(options);\n */\n call : function (options) {\n // logger\n var logger = Logger.getLogger(\"JSONP\");\n logger.trace(\"[JSONP::call ()]\");\n\n // analyse parametres\n\n if (!options) {\n logger.error(\"missing parameter : options !\");\n throw new Error(\"missing parameter : options !\");\n }\n\n if (!options.url) {\n logger.error(\"missing parameter : options.url !\");\n throw new Error(\"missing parameter : options.url !\");\n }\n\n if (!options.timeOut) {\n logger.info(\"setting 'options.timeOut' default value\");\n options.timeOut = 0;\n }\n\n // FIXME si un callback coté client a été mis en place,\n // cette condition sur cette methode n'a pas de sens !?\n if (!options.onResponse) {\n logger.error(\"missing parameter : options.onResponse !\");\n throw new Error(\"missing parameter : options.onResponse !\");\n // FIXME doit on definir un callback interne par defaut !?\n // options.onResponse = function (data) {\n // console.log(\"response callback (inner) : \", data);\n // };\n }\n\n // ID du callback à utiliser : null ou string.\n // si l'utilisateur a spécifié un suffixe pour le callback, on le récupère comme un ID (ex: options.callbackSuffix = \"\")\n // sinon, on utilise un timestamp : this.uuid ()\n var callbackId = (typeof options.callbackSuffix === \"string\") ? options.callbackSuffix : this.uuid();\n\n // on recherche le parametre callback et son nom de fonction dans l'url\n var urlHasCallbackKey = false;\n var urlHasCallbackName = false;\n\n var idx = options.url.indexOf(\"callback=\");\n\n if (idx !== -1) {\n urlHasCallbackKey = true;\n // extraction callbackName de l'url : entre \"callback=\" et \"&\" ou fin de ligne\n var j = options.url.indexOf(\"&\", idx);\n if (j === -1) {\n j = options.url.length;\n }\n\n // on ecrase le parametre options.callbackName s'il avait été défini\n var callbackName = options.url.substring(idx + 9, j);\n\n if (callbackName) {\n urlHasCallbackName = true;\n options.callbackName = callbackName;\n logger.info(\"setting 'options.callbackName' value (\" + options.callbackName + \") from 'options.url' parameter\");\n }\n }\n\n // on ajoute le parametre callback dans l'URL s'il n'existe pas\n if (!urlHasCallbackKey) {\n // gestion des autres param. et \"?\"\n var k = options.url.indexOf(\"?\");\n if (k === -1) {\n // aucun param., ni de '?'\n options.url = options.url + \"?\" + \"callback=\";\n } else if (k === options.url.length) {\n // uniquement le '?'\n options.url = options.url + \"callback=\";\n } else {\n // le '?' et les param. existent\n options.url = options.url + \"&\" + \"callback=\";\n }\n logger.info(\"setting callback default key in 'options.url' : \" + options.url);\n }\n\n // utilisation de la fonction callback coté client ?\n var HasCallbackName = options.callbackName ? true : urlHasCallbackName;\n\n // on ajoute le nom de la fonction callback dans l'URL si elle n'existe pas\n if (!urlHasCallbackName) {\n // fonction callback par defaut\n if (!options.callbackName) {\n logger.info(\"setting 'options.callbackName' default value\");\n options.callbackName = \"callback\"; // ou \"gp.protocol.jsonp\" ?\n // info : si on ne veut pas gerer d'ID dans le callback,\n // options.callbackSuffix = \"\"\n if (callbackId || callbackId === \"\") {\n options.callbackName += callbackId;\n }\n }\n options.url = options.url.replace(\"callback=\", \"callback=\" + options.callbackName);\n logger.info(\"setting callback function name in 'options.url' : \" + options.url);\n }\n\n // timeOut par defaut\n if (!options.onTimeOut) {\n logger.info(\"setting 'options.onTimeOut' default value\");\n /** callback timeout par defaut */\n options.onTimeOut = function (/* error */) {\n console.log(\"TimeOut while invoking url : \" + options.url);\n };\n }\n\n if (!HasCallbackName) {\n var self = this;\n\n // event du timeout\n var onTimeOutTrigger = null;\n\n // declenche le timeout si > à 0 !\n if (options.timeOut > 0) {\n onTimeOutTrigger = window.setTimeout(\n function () {\n /** fonction de reponse du service */\n window[options.callbackName] = function () {};\n options.onTimeOut();\n self._deleteScript(callbackId);\n }, options.timeOut);\n }\n\n // FIXME le nom de la fonction n'accepte pas de namespace !\n // ex. Gp.Function.callback\n /**\n * fonction de reponse du service\n * @param {Object} data - data\n * @private\n */\n window[options.callbackName] = function (data) {\n window.clearTimeout(onTimeOutTrigger);\n options.onResponse(data);\n self._deleteScript(callbackId);\n };\n }\n\n this._createScript(callbackId, options.url);\n },\n\n /**\n * create Script\n * @param {String} callbackId - callback Id\n * @param {String} url - url\n * @private\n */\n _createScript : function (callbackId, url) {\n var scriptu;\n var scripto = document.getElementById(\"results\" + callbackId);\n\n scriptu = document.createElement(\"script\");\n scriptu.setAttribute(\"type\", \"text/javascript\");\n scriptu.setAttribute(\"src\", url);\n scriptu.setAttribute(\"charset\", \"UTF-8\");\n scriptu.setAttribute(\"id\", \"results\" + callbackId);\n scriptu.setAttribute(\"async\", \"true\"); // FIXME async ?\n // head ou body ou autres ?\n var node = document.documentElement || document.getElementsByTagName(\"head\")[0];\n if (scripto === null) {\n node.appendChild(scriptu);\n } else {\n // s'il existe déjà, on le remplace !\n node.replaceChild(scriptu, scripto);\n }\n },\n\n /**\n * delete Script\n * @param {String} callbackId - callback Id\n * @private\n */\n _deleteScript : function (callbackId) {\n var script = document.getElementById(\"results\" + callbackId);\n if (script) {\n var node = script.parentNode || document.documentElement;\n if (!node) {\n return;\n }\n node.removeChild(script);\n }\n }\n};\n\nexport default JSONP;\n","/**\n * Interface de dialogue avec les webservices\n *\n * @module Protocols\n * @private\n * @alias Gp.Protocols\n */\nimport Helper from \"../Utils/Helper\";\nimport XHR from \"./XHR\";\nimport JSONP from \"./JSONP\";\n\nvar Protocol = {\n\n /**\n * Interface unique d\"envoi d\"une requête.\n *\n * @method send\n * @static\n * @param {Object} options - options generales\n * @param {String} options.url - url du service\n * @param {String} options.method - GET, POST, PUT, DELETE\n * @param {String} options.protocol - XHR | JSONP\n * @param {String} options.format - format de la reponse du service : json, xml ou null (brute)...\n * @param {String} options.wrap - encapsuler la reponse du service dans du JSON : true|false (true par defaut sur le protocole JSONP)\n * @param {String} options.callbackSuffix - suffixe de la fonction de callback (JSONP uniquement) (ex: si callbackSuffix=\"\", la fonction s'appellera \"callback\")\n * @param {String} options.timeOut - 0 ms\n * @param {Boolean} options.nocache - true|false\n * @param {Object|String} options.data - content (post) ou param (get)\n * @param {Object|String} options.headers - (post) ex. referer\n * @param {Object|String} options.content - (post) ex. \"application/json\"\n * @param {String} options.scope - this (TODO)\n * @param {Function} options.onResponse - callback\n * @param {Function} options.onFailure - callback\n * @param {Function} options.onTimeOut - callback\n * @param {String} options.proxyUrl - (TODO)\n */\n send : function (options) {\n // INFO\n // \"output\" - param est interne à la classe \"Protocol\" (parametrable via \"wrap\"), et à ajouter à l\"url\n // ce param est independant du service car il est géré par le filtre LUA :\n // ex. json|xml (json par defaut).\n // Ce param. permet d\"encapsuler du XML dans du JSON :\n // {http : {status:200, error:null},xml :\"réponse du service\"}\n // Utile pour les services qui ne repondent que du XML (ex. Geocodage)\n //\n // |-------------------------------------------------|\n // | \\service | | | |\n // | output\\ format| json | xml | remarques |\n // |--------\\------|------|-----|--------------------|\n // | json | json | json| json/xml encapsulé |\n // | xml | json | xml | param inactif |\n // |-------------------------------------------------|\n // ex. le service demande une reponse native au \"format\" json et avec un \"output\" json.\n // on a donc une reponse json encapsulé dans un json : ce qu'on ne souhaite pas !\n // dans ce cas on ne renseigne pas output=json\n\n // INFO\n // \"wrap\" - choix d\"encapsuler ou non les reponses dans du JSON.\n // Par defaut, on encapsule uniquement les reponses sur le protocole JSONP (et qui sont en xml) !\n\n // INFO\n // \"callback\" - param est interne à la classe \"Protocol\" (non parametrable), et à ajouter à l\"url\n // ce param est independant du service car il est géré aussi par le filtre LUA :\n // ex. callback|null\n // Ce param. permet de renvoyer une reponse javascript :\n // callback ({http : {status:200, error:null},xml :\"réponse du service\"})\n // Ce param. est non renseigné par defaut car pour du JSONP, on utilise le\n // le protocol JSONP, et ce dernier implemente déjà le callback !\n\n // settings par defaut\n var settings = options || {\n method : \"GET\",\n // protocol : \"JSONP\",\n protocol : \"XHR\",\n timeOut : 0,\n format : null,\n wrap : true,\n nocache : true,\n output : \"json\",\n callback : null,\n callbackSuffix : null\n };\n\n // on determine l'environnement d'execution : browser ou non ?\n // et on stoppe pour nodeJS... sur un protocole JSONP !\n if (typeof window === \"undefined\" && options.protocol === \"JSONP\") {\n console.log(\"Value (s) for parameter (s) 'protocol=JSONP (instead use XHR)' not supported to NodeJS\");\n return;\n }\n\n if (options.protocol === \"XHR\" || options.format === \"json\") {\n settings.wrap = false;\n } else if (options.protocol === \"JSONP\" && options.format === \"xml\") {\n settings.wrap = true;\n }\n\n settings.callback = null; // FIXME non géré !?\n settings.output = settings.wrap ? \"json\" : null;\n\n // on encapsule les reponses dans un objet JSON\n if (settings.wrap) {\n var params = {};\n params.output = settings.output;\n params.callback = settings.callback;\n delete params.callback; // FIXME non géré !?\n settings.url = Helper.normalyzeUrl(options.url, params);\n }\n\n // choix de l\"implementation :\n // XHR ou JSONP\n switch (settings.protocol) {\n case \"XHR\":\n // on normalise l'url (gestion du cache)\n if (options.method === \"GET\" && options.nocache) {\n settings.url = Helper.normalyzeUrl(settings.url, {\n t : new Date().getTime()\n });\n }\n // appel du service en XHR\n XHR.call(settings);\n break;\n case \"JSONP\":\n\n // on normalise l'url si les params. sont renseignés dans la string|object \"data\"\n if (settings.data) {\n settings.url = Helper.normalyzeUrl(settings.url, settings.data);\n }\n\n // appel du service en JSONP\n JSONP.call(settings);\n break;\n default:\n throw new Error(\"protocol not supported (XHR|JSONP) !\");\n }\n }\n\n};\n\nexport default Protocol;\n","/**\n * Errors raised by API for one among three reasons : wrong API usage, underlying service error or unknown reason.\n *\n * @property {String} message - Error message\n * @property {Number} status - Error status : when {@link Gp.Error.TYPE_SRVERR}, gives the [HTTP status of the underlying web service response]{@link https://en.wikipedia.org/wiki/List_of_HTTP_status_codes} ; -1 otherwise.\n * @property {String} type - Error type ({@link Gp.Error.TYPE_SRVERR}, {@link Gp.Error.TYPE_USEERR} or {@link Gp.Error.TYPE_UNKERR}).\n *\n * @namespace\n * @alias Gp.Error\n * @param {Object|String} error - Options for creating error object. Can be a String (message) or an Object.\n * @param {String} error.message - Error message to return to user.\n * @param {enum} [error.type=TYPE_UNKERR] - Error type\n * @param {status} [error.status=-1] - Error status : when {@link Gp.Error.TYPE_SRVERR}, gives the [HTTP status of the underlying web service response]{@link https://en.wikipedia.org/wiki/List_of_HTTP_status_codes}.\n *\n */\nfunction ErrorService (error) {\n if (!(this instanceof ErrorService)) {\n throw new TypeError(\"ErrorService constructor cannot be called as a function.\");\n }\n\n var e = error;\n if (typeof error === \"string\" || error instanceof String) {\n this.message = error;\n this.status = -1;\n this.type = ErrorService.TYPE_UNKERR;\n } else {\n this.message = e.message || \"undefined!?\";\n this.type = e.type;\n this.status = e.status || -1;\n }\n\n this.name = \"ErrorService\";\n this.stack = (new Error()).stack;\n}\n\n/**\n * Error raised when underlying geoportal service answers on error.\n *\n * @type {String}\n * @constant\n * @static\n */\nErrorService.TYPE_SRVERR = \"SERVICE_ERROR\";\n/**\n * Error raised when funcion use is inappropriate\n *\n * @type {String}\n * @constant\n * @static\n */\nErrorService.TYPE_USEERR = \"USAGE_ERROR\";\n/**\n * Error raised when API can't perform the job for a reason other than the two other ones.\n *\n * @type {String}\n * @constant\n * @static\n */\nErrorService.TYPE_UNKERR = \"UNKNOWN_ERROR\";\n\n/**\n * @lends module:ErrorService\n */\nErrorService.prototype = Object.create(Error.prototype, {\n constructor : {\n value : ErrorService,\n writable : true,\n configurable : true\n }\n});\n\nexport default ErrorService;\n","import Logger from \"../Utils/LoggerByDefault\";\nimport Helper from \"../Utils/Helper\";\nimport _ from \"../Utils/MessagesResources\";\nimport Protocol from \"../Protocols/Protocol\";\nimport ErrorService from \"../Exceptions/ErrorService\";\n// import DefaultUrlService from \"./DefaultUrlService\";\n// package.json (extract version)\nimport Pkg from \"../../package.json\";\n\n/**\n * @classdesc\n * Composant Service\n *\n * @constructor\n * @alias Gp.Services.CommonService\n * @param {Object} options - options communes à tous les services\n *\n * @param {String} [options.serverUrl] - URL d'accès au service. Par défaut \"https://data.geopf.fr/SERVICE/\".\n * Permet de forcer l'utilisation d'un service équivalent déployé derrière une éventuelle autre URL d'accès.\n * Si ce paramètre est renseigné alors, le paramètre par défaut est ignoré.\n *\n * @param {String} [options.protocol] - Le protocole à utiliser pour récupérer les informations du service :\n * peut valoir 'JSONP' ou 'XHR'.\n * Par défaut, c'est le protocole XHR qui sera utilisé.\n * Attention, le protocole JSONP n'est pas valide dans un environnement NodeJS (Utilisation du mode XHR).\n *\n * @param {Boolean} [options.ssl] - Indique si l'on souhaite intérroger les services en https.\n * Ce paramètre ne fonctionne que pour une utilisation hors navigateur (ex. NodeJS).\n * Sur un navigateur, le protocole est automatiquement extrait de l'url du site...\n * Par défaut, on utilise le protocole http (ssl=false).\n *\n * @param {String} [options.proxyURL] - Le proxy à utiliser pour pallier au problème de cross-domain dans le cas d'une requête XHR.\n * Utile si le paramètre 'protocol' vaut 'XHR', il ne sera pas pris en compte si protocol vaut JSONP.\n *\n * @param {String} [options.callbackSuffix] - Suffixe de la fonction de callback à utiliser, dans le cas du protocole JSONP.\n * Par défaut, la fonction de callback portera un nom du type \"callback\"+ID, où ID est soit un identifiant unique généré à chaque requête,\n * soit le paramètre callbackSuffix s'il est spécifié. Par exemple, si callbackSuffix=\"_2\", la fonction sera \"callback_2 ()\".\n * Utile pour utiliser une réponse déjà encapsulée dans une fonction de callback, dont le nom est connu\n * Utile seulement si le paramètre 'protocol' vaut 'JSONP', il ne sera pas pris en compte si protocol vaut 'XHR'.\n *\n * @param {String} [options.httpMethod] - La méthode HTTP\n * à utiliser dans le cas d'une requête XHR : peut valoir 'GET' ou 'POST'.\n * Non pris en compte si 'protocol' vaut JSONP qui fonctionne obligatoirement en GET.\n * Par défaut, c'est la méthode GET qui est utilisée.\n *\n * @param {String} [options.contentType] - Content-Type de la requete\n * à utiliser dans le cas d'une requête XHR en mode POST.\n * Non pris en compte si 'protocol' vaut JSONP et/ou la méthode HTTP vaut GET.\n * Par défaut, c'est la méthode GET qui est utilisée donc on n'utilise pas de Content-Type.\n *\n * @param {Number} [options.timeOut] - Délai d'attente maximal (en ms) de la réponse du service (à partir de l'envoi de la requête).\n * Par défaut, aucun timeOut n'est pris en compte (timeoutDelay= 0).\n *\n * @param {Boolean} [options.rawResponse] - Indique si l'on souhaite que la réponse du service ne soit pas parsée par l'API avant d'être restituée.\n * (Cf. paramètre « onSuccess » pour plus de détails).\n *\n * @param {Function} [options.onSuccess] - Fonction appelée lorsque le service répond correctement à la requête\n * (code HTTP 200, sans message d'erreur).\n * Cette fonction prend en paramètre la réponse du service,\n * soit sous la forme d'un Object Javascript formaté par le parseur dédié à la syntaxe du service (comportement par défaut) ;\n * soit brute au format String non prétraité si le paramètre « rawResponse » a été précisé avec la valeur « true ».\n *\n * @param {Function} [options.onFailure] - Fonction appelée lorsque le service ne répond pas correctement\n * (code HTTP de retour différent de 200 ou pas de réponse).\n *\n * @param {Function} [options.onBeforeParse] - Fonction appelée avant le parsing de la réponse\n * Permet de modifier la réponse avant parsing et la fonction doit retourner une String.\n * Cette fonction prend en paramètre la réponse telle que renvoyée par le service\n * (cad au format json ou xml).\n * Pour le JSONP, si le paramètre \"rawResponse\" a été précisé avec la valeur \"true\",\n * la fonction prend en paramètre un Object JavaScript contenant la réponse XML.\n *\n * @example\n * var options = {\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * ssl : false,\n * proxyURL : null,\n * callbackName : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * onBeforeParse : function (rawResponse) {}\n * };\n */\nfunction CommonService (options) {\n if (!(this instanceof CommonService)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\"));\n }\n\n this.logger = Logger.getLogger(\"CommonService\");\n this.logger.trace(\"[Constructeur CommonService (options)]\");\n\n // #####################\n // récupération des options par défaut pour les paramètres optionnels\n // #####################\n\n /**\n * Options du service\n * @type {Object}\n */\n this.options = {\n // protocol : \"JSONP\",\n protocol : \"XHR\",\n ssl : true,\n proxyURL : \"\",\n // callbackName : \"\",\n callbackSuffix : null,\n httpMethod : \"GET\",\n timeOut : 0,\n rawResponse : false,\n scope : this,\n /**\n * callback par defaut pour la reponse\n * @param {Object} response - response\n * @private\n */\n onSuccess : function (response) {\n console.log(\"onSuccess - la reponse est la suivante : \", response);\n },\n /**\n * callback par defaut pour les erreurs\n * @param {Object} error - error\n * @private\n */\n onFailure : function (error) {\n if (error.status === 200 || !error.status) {\n console.log(\"onFailure : \", error.message);\n } else {\n console.log(\"onFailure - Erreur (\", error.status, \") : \", error.message);\n }\n }\n };\n\n // et on ajoute les options en paramètre aux options par défaut\n for (var opt in options) {\n if (options.hasOwnProperty(opt)) {\n this.options[opt] = options[opt];\n }\n }\n\n // #####################\n // analyse des options\n // #####################\n\n // modification de la fonction de callback onSuccess dans le cas où la réponse brute est demandée\n if (this.options.rawResponse && !this.options.onSuccess) {\n /**\n * callback par defaut pour la reponse\n * @param {Object} response - response\n * @private\n */\n this.options.onSuccess = function (response) {\n console.log(\"onSuccess - la réponse brute du service est la suivante : \", response);\n };\n }\n\n // gestion du callback onSuccess\n var bOnSuccess = !!(this.options.onSuccess !== null && typeof this.options.onSuccess === \"function\");\n if (!bOnSuccess) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"onSuccess()\"));\n }\n\n // gestion de la methode HTTP\n this.options.httpMethod = (typeof options.httpMethod === \"string\") ? options.httpMethod.toUpperCase() : \"GET\";\n\n switch (this.options.httpMethod) {\n case \"POST\":\n case \"GET\":\n break;\n case \"PUT\":\n case \"DELETE\":\n case \"HEAD\":\n case \"OPTIONS\":\n throw new Error(_.getMessage(\"PARAM_NOT_SUPPORT\", \"httpMethod\"));\n default:\n throw new Error(_.getMessage(\"PARAM_UNKNOWN\", \"httpMethod\"));\n }\n\n // gestion du protocole\n // this.options.protocol = (typeof options.protocol === \"string\" ) ? options.protocol.toUpperCase() : \"JSONP\";\n this.options.protocol = (typeof options.protocol === \"string\") ? options.protocol.toUpperCase() : \"XHR\";\n\n switch (this.options.protocol) {\n case \"JSONP\":\n case \"XHR\":\n break;\n default:\n throw new Error(_.getMessage(\"PARAM_UNKNOWN\", \"protocol\"));\n }\n\n // on determine l'environnement d'execution : browser ou non ?\n // et on lance une exception sur l'utilisation du protocole JSONP pour nodeJS...\n if (typeof window === \"undefined\" && this.options.protocol === \"JSONP\") {\n throw new Error(_.getMessage(\"PARAM_NOT_SUPPORT_NODEJS\", \"protocol=JSONP (instead use XHR)\"));\n }\n\n // le protocole JSONP ne fonctionne qu'en GET.\n if (this.options.protocol === \"JSONP\") {\n this.options.httpMethod = \"GET\";\n }\n\n // gestion du cache\n this.options.nocache = options.nocache || false;\n\n // #####################\n // attributs d'instances\n // #####################\n\n /**\n * Format de réponse du service\n */\n this.options.outputFormat = null;\n /**\n * Requête envoyée au service\n */\n this.request = null;\n /**\n * Reponse du service\n */\n this.response = null;\n}\n\n/**\n * @lends module:CommonService\n */\nCommonService.prototype = {\n\n /*\n * Constructeur (alias)\n */\n constructor : CommonService,\n\n /**\n * Appel du service Géoportail\n */\n call : function () {\n /* jshint validthis : true */\n this.logger.trace(\"CommonService::call ()\");\n\n var context = this;\n /** fonction d'execution */\n function run () {\n this.logger.trace(\"CommonService::run ()\");\n this.buildRequest.call(context, onError, onBuildRequest);\n }\n\n run.call(context);\n\n // callback de fin de construction de la requête\n function onBuildRequest (result) {\n this.logger.trace(\"CommonService::onBuildRequest : \", result);\n this.callService.call(context, onError, onCallService);\n }\n\n // callback de fin d'appel au service\n function onCallService (result) {\n this.logger.trace(\"CommonService::onCallService : \", result);\n this.analyzeResponse.call(context, onError, onAnalyzeResponse);\n }\n\n // callback de fin de lecture de la reponse\n function onAnalyzeResponse (result) {\n this.logger.trace(\"CommonService::onAnalyzeResponse : \", result);\n if (result) {\n this.options.onSuccess.call(this, result);\n } else {\n return onError.call(this, new ErrorService(\"Analyse de la reponse en échec !?\"));\n }\n }\n\n // callback de gestion des erreurs : renvoit un objet de type ErrorService\n function onError (error) {\n this.logger.trace(\"CommonService::onError()\");\n // error : l'objet est du type ErrorService ou Error\n var e = error;\n if (!(e instanceof ErrorService)) {\n e = new ErrorService(error.message);\n }\n this.options.onFailure.call(this, e);\n }\n },\n\n /**\n * Création de la requête\n * @param {Function} error - callback\n * @param {Function} success - callback\n */\n buildRequest : function (error, success) {\n // INFO\n this.logger.error(\"overwritten method !\");\n // retourne l'objet 'this.request'\n if (error) {\n error.call(this, \"This method must be overwritten !\");\n }\n success.call(this, \"This method must be overwritten !\");\n },\n\n /**\n * Appel du service\n * @param {Function} error - callback\n * @param {Function} success - callback\n */\n callService : function (error, success) {\n // INFO\n // retourne l'objet 'this.response'\n\n // NOTES\n // Pour le mode XHR, on recupère une reponse sous forme d'un json ou xml (#document).\n // Pour le mode JSONP, on a toujours un objet JSON mais sous 2 formes :\n // - natif\n // - XML encapsulé :\n // {http : {status:200, error:null},xml :'réponse du service'}\n // {http : {status:400, error:'reponse du service'},xml :null}\n // En XHR, la reponse est directement sauvegardée dans 'this.response'.\n // Par contre, en JSONP, on doit analyser la reponse (status ou non vide),\n // et ne renvoyer que le contenu (xml ou l'objet)\n\n // gestion de la proxification du service\n var strUrlProxified = null;\n var strData = this.request;\n\n // a t on mis en place un proxy ?\n // la proxyfication est valable uniquement en mode XHR !\n var bUrlProxified = !!(this.options.proxyURL && this.options.protocol === \"XHR\");\n\n // rajout de l'option gpbibaccess\n // INFO : acces au numero de version de package.conf aprés compilation !\n var requestMetaOptions = {\n \"gp-access-lib\" : Pkg.version\n };\n\n if (this.options.apiKey) {\n requestMetaOptions.apiKey = this.options.apiKey;\n }\n\n this.options.serverUrl = Helper.normalyzeUrl(this.options.serverUrl, requestMetaOptions, false);\n\n // si le proxy est renseigné, on proxifie l'url du service\n if (bUrlProxified) {\n if (this.options.httpMethod === \"GET\") {\n strUrlProxified = this.options.proxyURL + Helper.normalyzeUrl(this.options.serverUrl, this.request, true);\n strData = null;\n }\n\n if (this.options.httpMethod === \"POST\") {\n strUrlProxified = this.options.proxyURL + Helper.normalyzeUrl(this.options.serverUrl, null, true);\n strData = this.request;\n }\n }\n\n // contexte du composant spécifique !\n var self = this;\n\n var options = {\n url : strUrlProxified || this.options.serverUrl,\n method : this.options.httpMethod,\n protocol : this.options.protocol,\n timeOut : this.options.timeOut || 0,\n format : this.options.outputFormat, // ceci declenche le parsing de la reponse du service, mais on souhaite toujours une reponse brute (string) !\n nocache : this.options.nocache || false, // ceci permet d'ajouter un timestamp dans la requête\n wrap : this.options.protocol !== \"XHR\", // ceci declenche l'encapsulation de la reponse XML du service dans du JSON, mais pas en mode XHR !\n callbackSuffix : this.options.callbackSuffix,\n // callbackName : this.options.callbackName || null,\n data : strData,\n headers : null, // TODO...\n content : this.options.contentType || \"application/xml\",\n scope : this.options.scope || this,\n // callback de reponse\n onResponse : function (response) {\n self.logger.trace(\"callService::onResponse()\");\n\n // le contenu de la reponse à renvoyer !\n var content = null;\n\n // XHR : on renvoie toujours la reponse brute du service (json ou xml)\n // au parser du composant...\n if (self.options.protocol === \"XHR\") {\n self.logger.trace(\"Response XHR\", response);\n content = response; // par defaut, la reponse du service !\n }\n\n // JSONP : on pre-analyse la reponse brute du service (encapsuler ou pas)\n // avant de l'envoyer au parser du composant...\n if (self.options.protocol === \"JSONP\") {\n self.logger.trace(\"Response JSON\", response);\n if (response) {\n if (response.http) {\n // reponse encapsulée :\n // ex. reponse du service en xml\n // > {http : {status:200, error:null},xml :'réponse du service'}\n if (response.http.status !== 200) {\n error.call(self, new ErrorService({\n status : response.http.status,\n message : response.http.error,\n type : ErrorService.TYPE_SRVERR\n }));\n return;\n } else {\n content = response.xml; // par defaut !\n if (self.options.rawResponse) {\n content = response;\n }\n }\n } else {\n // reponse non encapsulée :\n // ex. reponse du service en json ou xml\n content = response;\n }\n } else {\n error.call(self, new ErrorService(\"Le contenu de la reponse est vide !?\"));\n return;\n }\n }\n\n // si on souhaite parser la reponse du service\n if (typeof self.options.onBeforeParse === \"function\") {\n var newResponse = self.options.onBeforeParse(content);\n if (typeof newResponse === \"string\") {\n // la reponse parsée par l'utilisateur est retournée sous\n // forme de string !\n content = newResponse;\n }\n }\n // sauvegarde de la reponse dans l'objet parent (CommonService)\n self.response = content;\n // on renvoie la reponse...\n success.call(self, content);\n },\n // callback des erreurs\n onFailure : function (e) {\n self.logger.trace(\"callService::onFailure()\");\n // on est forcement sur une erreur levée par un service !\n e.type = ErrorService.TYPE_SRVERR;\n error.call(self, new ErrorService(e));\n },\n // callback de timeOut\n onTimeOut : function () {\n self.logger.trace(\"callService::onTimeOut()\");\n error.call(self, new ErrorService(\"TimeOut!\"));\n }\n };\n\n Protocol.send(options);\n },\n\n /**\n * Analyse de la réponse\n * @param {Function} error - callback\n * @param {Function} success - callback\n */\n analyzeResponse : function (error, success) {\n // INFO\n this.logger.error(\"overwritten method !\");\n // retourne l'objet spécifique au type de composant (json)\n if (error) {\n error.call(this, \"This method must be overwritten !\");\n }\n success.call(this, \"This method must be overwritten !\");\n }\n\n};\n\nexport default CommonService;\n","// cette classe contient les URLs par defaut des services.\n// DefaultUrlService.Alti.url(key)[elevation-json]\n// DefaultUrlService.Alti.url(key)[elevation-xml]\n// DefaultUrlService.Alti.url(key)[profil-json]\n// DefaultUrlService.Alti.url(key)[profil-xml]\n// DefaultUrlService.ProcessIsoCurve.url(key)\n// DefaultUrlService.AutoComplete.url(key)\n// DefaultUrlService.ReverseGeocode.url(key)\n// DefaultUrlService.Geocode.url(key)\n// DefaultUrlService.Route.url(key)\n\n// Example :\n//\n// DefaultUrlService.Alti.url('alti')[elevation-json]\n// output {String} -> http://wxs.ign.fr/calcul/alti/rest/elevation.json\n//\n// DefaultUrlService.Alti.url('calcul')\n// output {Object|String}\n// -> http://wxs.ign.fr/calcul/alti/rest/elevation.json\n// -> http://wxs.ign.fr/calcul/alti/rest/elevation.xml\n// -> http://wxs.ign.fr/calcul/alti/rest/elevationLine.json\n// -> http://wxs.ign.fr/calcul/alti/rest/elevationLine.xml\n//\n// ssl by default.\n//\n// Force to not do ssl :\n// DefaultUrlService.ssl = false;\n//\n// DefaultUrlService.AutoComplete.url('calcul')\n// output {Object|String}\n// -> https://wxs.ign.fr/calcul/ols/apis/completion\n\n/**\n * Default Geoportal web services URLs access.\n *\n * @namespace\n * @alias Gp.Services.DefaultUrl\n */\nvar DefaultUrlService = {\n\n /** if set true, require the use of https protocol */\n ssl : true,\n\n /**\n * base new-url of geoplateforme services (ssl protocol management)\n * @param {String} path - path\n * @returns {String} url\n */\n newUrl : function (path) {\n var NEW_GPF_HOSTNAME = \"data.geopf.fr\";\n\n // comportement par défaut => https\n // sinon, il est fixé par l'option 'ssl' (false => http)\n var _protocol;\n if (DefaultUrlService.ssl === false) {\n _protocol = \"http://\";\n } else {\n _protocol = \"https://\";\n }\n\n return _protocol + NEW_GPF_HOSTNAME + path;\n },\n\n /**\n * Elevation web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns elevation service default urls with or without geoportal access key given as a parameter. The result is a javascript object with different urls given used protocols (\"elevation-json\", \"elevation-xml\", \"profil-json\" or \"profil-xml\").\n */\n Alti : {\n new_key : {\n // rest\n \"elevation-json\" : \"/altimetrie/1.0/calcul/alti/rest/elevation.json\",\n \"elevation-xml\" : \"/altimetrie/1.0/calcul/alti/rest/elevation.xml\",\n \"profil-json\" : \"/altimetrie/1.0/calcul/alti/rest/elevationLine.json\",\n \"profil-xml\" : \"/altimetrie/1.0/calcul/alti/rest/elevationLine.xml\"\n },\n\n /**\n * newurl from geoplateforme service\n * @param {String} key - key\n * @returns {String} url\n */\n newUrl : function () {\n return {\n // rest\n \"elevation-json\" : DefaultUrlService.newUrl(this.new_key[\"elevation-json\"]),\n \"elevation-xml\" : DefaultUrlService.newUrl(this.new_key[\"elevation-xml\"]),\n \"profil-json\" : DefaultUrlService.newUrl(this.new_key[\"profil-json\"]),\n \"profil-xml\" : DefaultUrlService.newUrl(this.new_key[\"profil-xml\"])\n };\n }\n },\n /**\n * IsoCurve web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns isocurve service default urls with or without geoportal access key given as a parameter. The result is a javascript object with different urls given used protocols (\"iso-json\" or \"iso-xml\").\n */\n ProcessIsoCurve : {\n\n new_key : \"/navigation/isochrone\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Config web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns config service default urls with or without geoportal access key given as a parameter.\n */\n Config : {\n _key : \"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/dist/\",\n /**\n * url\n * @param {String} key - key\n * @returns {String} url\n */\n url : function (key) {\n // key must be an array of one or several keys\n if (!Array.isArray(key)) {\n key = key.split(\",\");\n }\n // not homogeneous with others geoportal services URLs\n var url = [];\n for (var i = 0; i < key.length; i++) {\n url[i] = this._key + key[i] + \"Config.json\";\n }\n return url;\n }\n },\n /**\n * Autocompletion web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns autocomplete service default urls with or without geoportal access key given as a parameter. The result is a String.\n */\n AutoComplete : {\n new_key : \"/geocodage/completion\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Reverse geocoding web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns reverse geocoding service default urls with or without geoportal access key given as a parameter. The result is a String.\n */\n ReverseGeocode : {\n new_key : \"/geocodage/reverse\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Geocoding web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns geocoding service default urls with or without geoportal access key given as a parameter. The result is a String.\n */\n Geocode : {\n new_key : \"/geocodage/search\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Routing web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns routing service default urls with or without geoportal access key given as a parameter. The result is a javascript object with different urls given used protocols.\n */\n Route : {\n new_key : \"/navigation/itineraire\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n }\n};\n\nexport default DefaultUrlService;\n","\n/**\n * Response object for {@link module:Services~getConfig Gp.Services.getConfig ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Object} generalOptions - General properties for default map configuration resources.\n * @property {Object} generalOptions.apiKeys - Object that associates apiKey (s) with an array of resources IDs availables with that key.\n * @property {String} generalOptions.title - Underlying web service Title.\n * @property {String} generalOptions.defaultGMLGFIStyle - XSL URL used by default to translate an XML GetFeatureInfo response into an HTML array.\n * @property {String} generalOptions.theme - default theme (FIXME : for what ?)\n * @property {Array.} generalOptions.wgs84Resolutions - geographical resolutions Array for each [zoom level of the Geoportal platform]{@link http://api.ign.fr/tech-docs-js/webmaster/layers.html#Geoportal_resolutions} from 0 to 21. Expressed in degrees/pixel.\n * @property {Object} layers - Associative array mapping resources availables IDs (keys) with their properties (values given as {@link Gp.Services.Config.Layer}).\n * @property {Object} tileMatrixSets - Associative Array mapping TileMatrixSets IDs (keys) availables with their properties (values given as {@link Gp.Services.Config.TileMatrixSet}).\n *\n * @namespace\n * @alias Gp.Services.GetConfigInterface\n */\nfunction ConfigInterface () {\n if (!(this instanceof ConfigInterface)) {\n throw new TypeError(\"ConfigInterface constructor cannot be called as a function.\");\n }\n\n this.generalOptions = {\n apiKeys : {},\n title : null,\n defaultGMLGFIStyle : null,\n theme : null,\n wgs84Resolutions : []\n };\n\n this.layers = {};\n\n this.tileMatrixSets = {};\n}\n\nConfigInterface.prototype = {\n\n /*\n * Constructor (alias)\n */\n constructor : ConfigInterface,\n\n /**\n * Check if config is loaded for a given key\n *\n * @param {String} apiKey - Access key to Geoportal platform\n * @returns {Boolean} isKeyConfLoaded - true if config of the key is already loaded, false otherwise\n */\n isKeyConfLoaded : function (apiKey) {\n if (!apiKey) {\n return;\n }\n if (this.generalOptions.apiKeys[apiKey]) {\n return true;\n }\n return false;\n },\n\n /**\n * Returns an array of Geoportal layers identifiers, corresponding to an API contract key.\n *\n * @param {String} apiKey - Access key to Geoportal platform\n * @returns {Array} apiKeys - Array of geoportal layers identifiers\n */\n getLayersId : function (apiKey) {\n return this.generalOptions.apiKeys[apiKey];\n },\n\n /**\n * Returns the id of a Geoportal layer with its name and its service.\n *\n * @param {String} layerName - name of the layer (ex. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {String} service - name of the service (ex. \"WMS\" ou \"WMTS\")\n * @returns {String} Id of the layer (ex. \"ORTHOIMAGERY.ORTHOPHOTOS$GEOPORTAIL:OGC:WMTS\")\n */\n getLayerId : function (layerName, service) {\n if (!layerName || !service) {\n return;\n }\n var layerId = null;\n\n // layer\n // key : [layerName]$[contexte]:OGC:[service]\n // ex : \"ORTHOIMAGERY.ORTHOPHOTOS$GEOPORTAIL:OGC:WMTS\"\n\n // service\n // key : [layerName]$[contexte];[service]\n // ex : PositionOfInterest$OGC:OPENLS;ReverseGeocode\n\n if (this.layers) {\n var layers = this.layers;\n for (var key in layers) {\n if (layers.hasOwnProperty(key)) {\n var parts = key.split(\"$\");\n if (layerName === parts[0]) {\n if (parts[1]) {\n var servicePartsLayer = parts[1].split(\":\");\n var servicePartsService = parts[1].split(\";\");\n\n if (servicePartsService[1] === service.toUpperCase()) {\n layerId = key;\n break;\n }\n if (servicePartsLayer[2] === service.toUpperCase()) {\n layerId = key;\n break;\n }\n }\n }\n }\n }\n }\n if (!layerId) {\n return;\n }\n return layerId;\n },\n\n /**\n * Returns an associative array of Geoportal layers configurations, corresponding to an API contract key.\n * If no key is specified, all layers from configuration are returned.\n *\n * @param {String} apiKey - Access key to Geoportal platform\n * @returns {Object} layers - Object which properties are layers identifiers.\n */\n getLayersConf : function (apiKey) {\n var layers = {};\n var layersIdArray = this.getLayersId(apiKey);\n if (layersIdArray) {\n for (var i = 0; i < layersIdArray.length; i++) {\n var lyrId = layersIdArray[i];\n layers[lyrId] = this.layers[lyrId];\n }\n }\n return layers;\n },\n\n /**\n * Returns a geoportal layer configuration, given its identifier\n *\n * @param {String} layerId - Geoportal layer identifier (e.g. \"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\")\n * @return {Object} layer - Layer configuration\n * @see Gp.Services.Config.Layer\n */\n getLayerConf : function (layerId) {\n if (!this.layers) {\n return;\n }\n return this.layers[layerId];\n },\n\n /**\n * Get all parameters needed to display a WFS, WMS or WMTS layer given its name, its service and its key\n *\n * @param {String} layerName - name of the layer (ex. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {String} service - name of the service (ex. \"WMS\" ou \"WMTS\")\n * @param {String} [apiKey] - Contract API key\n * @returns {Object} params - params of the service (WFS, WMS or WMTS) for the given layer\n * @returns {String} params.url - Url of the service to reach to display the layer\n * @returns {String} params.version - Version of the service\n * @returns {String} params.styles - Default style of the layer\n * @returns {String} params.format - Default format of the layer\n * @returns {String} params.projection - Default projection of the layer\n * @returns {Number} params.minScale - Min scale denominator of the layer\n * @returns {Number} params.maxScale - Max scale denominator of the layer\n * @returns {Gp.BBox} params.extent - Extent of the layer, in the projection of the layer\n * @returns {Array} params.legends - Array of legends associated to the layer\n * @returns {Array} params.title - Name of the layer, readable by a human\n * @returns {Array} params.description - Description of the layer\n * @returns {String} params.[TMSLink] - Id of the Tile Matrix Set (TMS), in the case of WMTS layer\n * @returns {Gp.Point} params.[matrixOrigin] - Originof the tile matrix (top left corner), in the case of WMTS layer\n * @returns {Array} params.[nativeResolutions] - Array with the resolution of each level of the tile matrix set, in the case of WMTS layer\n * @returns {Array} params.[matrixIds] - Array with the ID of each level of the tile matrix set, in the case of WMTS layer\n */\n getLayerParams : function (layerName, service) {\n var params = {};\n\n if ((service === \"WMS\" || Object.keys(this.tileMatrixSets).length !== 0) && Object.keys(this.layers).length !== 0) {\n // get the layerId of the layer\n var layerId = this.getLayerId(layerName, service);\n\n if (layerId) {\n // get the layer Conf Object\n var layerConf = this.getLayerConf(layerId);\n\n var keys = this.getLayerKey(layerId);\n if (keys.length === 0) {\n return;\n }\n\n // get services params\n for (var i = 0; i < keys.length; i++) {\n // only one serverUrl is saved in Gp.Config : with multiKeys, we have to retrieve the key used in the serverUrl property\n if (layerConf.serviceParams.serverUrl[keys[i]]) {\n params.url = layerConf.serviceParams.serverUrl[keys[i]];\n }\n }\n\n if (service !== \"WFS\") {\n const wmsTypeRegex = /\\/v\\//;\n // WMS vector style always empty (not in getCap)\n if (wmsTypeRegex.test(params.url)) {\n params.styles = \" \";\n } else {\n // WMS raster style is defined in getCap\n params.styles = layerConf.styles[0].name;\n }\n }\n\n params.version = layerConf.serviceParams.version;\n params.format = (layerConf.formats && layerConf.formats.length) ? layerConf.formats[0].name : \"\";\n params.projection = layerConf.defaultProjection;\n\n // get layer info and constraints\n params.minScale = layerConf.globalConstraint.minScaleDenominator;\n params.maxScale = layerConf.globalConstraint.maxScaleDenominator;\n params.extent = layerConf.globalConstraint.bbox;\n params.legends = layerConf.legends;\n params.title = layerConf.title;\n params.description = layerConf.description;\n\n if (service === \"WMS\") {\n params.metadata = layerConf.metadata;\n }\n\n // Informations non disponibles avec les getCap\n // params.metadata = layerConf.getMetadata();\n // params.originators = layerConf.getOriginators();\n // params.quicklookUrl = layerConf.getQuicklookUrl();\n\n // WMTS : get the tileMatrixSetLimits\n if (layerConf.wmtsOptions) {\n params.tileMatrixSetLimits = layerConf.wmtsOptions.tileMatrixSetLimits;\n var TMSLink = layerConf.wmtsOptions.tileMatrixSetLink;\n if (TMSLink) {\n params.TMSLink = TMSLink;\n var tmsConf = this.getTMSConf(TMSLink);\n // Get matrix origin : Gp.Point = Object{x:Float, y:Float}\n // params.matrixOrigin = tmsConf.getTopLeftCorner();\n params.matrixIds = Object.keys(tmsConf.tileMatrices);\n params.tileMatrices = tmsConf.tileMatrices;\n // by default, pseudo mercator resolutions\n params.nativeResolutions = tmsConf.nativeResolutions || this.getTMSConf(\"PM\").nativeResolutions;\n }\n }\n }\n }\n return params;\n },\n\n /**\n * Get the contract key(s) associated to a given layer.\n *\n * @param {String} layerId - Geoportal layer identifier (e.g. \"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\")\n * @return {Array} layerKey - array of key(s) associated to the given layer\n */\n getLayerKey : function (layerId) {\n var layerKey = [];\n if (this.generalOptions && this.generalOptions.apiKeys && Object.keys(this.generalOptions.apiKeys).length !== 0) {\n var resourcesByKey = this.generalOptions.apiKeys;\n for (var key in resourcesByKey) {\n var resourcesArray = resourcesByKey[key];\n resourcesArray.forEach(function (arrayLayerId) {\n if (arrayLayerId === layerId) {\n layerKey.push(key);\n }\n });\n }\n }\n return layerKey;\n },\n\n /**\n * Returns an associative array of Tile Matrix Sets configurations.\n *\n * @return {Object} tileMatrixSets - Object which properties are TMS identifiers\n *\n */\n getTileMatrixSets : function () {\n return this.tileMatrixSets;\n },\n\n /**\n * Returns a Tile Matrix Sets configuration, given its identifier.\n *\n * @param {String} tmsID - Tile Matrix Set identifier (e.g. : \"PM\")\n * @return {Object} tileMatrixSet - Tile Matrix Set configuration\n * @see Gp.Services.Config.TileMatrixSet\n */\n getTMSConf : function (tmsID) {\n if (!this.tileMatrixSets) {\n return;\n }\n return this.tileMatrixSets[tmsID];\n },\n\n /**\n * Get global constraints for a given Layer : extent, minScale, maxScale, projection\n *\n * @param {String} layerId - Geoportal layer identifier (e.g. \"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\")\n * @returns {Object} params - layer constraints\n * @returns {String} params.projection - default layer projection\n * @returns {Number} params.minScale - layer min scale denominator\n * @returns {Number} params.maxScale - layer max scale denominator\n * @returns {Gp.BBox} params.extent - layer extent expressed in the layer projection\n */\n getGlobalConstraints : function (layerId) {\n var params = {};\n\n if (layerId) {\n // get layer configuration object\n var layerConf = this.getLayerConf(layerId);\n params.projection = layerConf.defaultProjection;\n params.minScale = layerConf.globalConstraint.minScaleDenominator;\n params.maxScale = layerConf.globalConstraint.maxScaleDenominator;\n params.extent = layerConf.globalConstraint.bbox;\n }\n\n return params;\n }\n\n};\n\nexport default ConfigInterface;\n","import Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport ConfigInterface from \"./ConfigInterface\";\n\n/**\n * @classdesc\n *\n * Recupération de la configuration de clés Géoportail sous forme de JSON\n *\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.Config\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n * @param {Sting} options.apiKey - clé(s) dont on veut obtenir la configuration. Si plusieurs clés, séparer chacune par une virgule\n * @param {Boolean} [options.sync=false] - force le mode synchrone\n * @param {String} options.customConfigFile - chemin vers un fichier de configuration personnalisé. Surcharge le paramètre apiKey.\n * @see Gp.Services.GetConfigInterface\n *\n * @example\n * var options = {\n * apiKey : \"cartes,ortho\",\n * sync : false,\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * };\n *\n */\nfunction Config (options) {\n if (!(this instanceof Config)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"Config\"));\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"Config\";\n\n this.logger = Logger.getLogger(\"Gp.Config\");\n this.logger.trace(\"[Constructeur Config (options)]\");\n\n // #####################\n // analyse des options\n // #####################\n\n // gestion du callback onSuccess\n var bOnSuccess = !!(options.onSuccess !== null && typeof options.onSuccess === \"function\");\n if (!bOnSuccess) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"onSuccess()\"));\n }\n if (!options.apiKey && !options.customConfigFile) {\n // si pas de thème spécifié, on récupère toutes les ressources possibles dans l'objet Config\n options.apiKey = \"full\";\n }\n this.options = {};\n this.options.onSuccess = options.onSuccess;\n this.options.onFailure = options.onFailure;\n\n // mode sync\n this.options.sync = options.sync || false;\n\n // gestion d'un tableau d'url des fichiers de configuration\n this.options.listConfigUrls = (options.customConfigFile)\n ? [options.customConfigFile]\n : !Array.isArray(options.apiKey)\n ? DefaultUrlService.Config.url(options.apiKey.split(\",\"))\n : DefaultUrlService.Config.url(options.apiKey);\n}\n\n/**\n * @lends module:Config#\n */\nConfig.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/**\n * Constructeur (alias)\n */\nConfig.prototype.constructor = Config;\n\n/**\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n * @overload\n */\nConfig.prototype.buildRequest = function (error, success) {\n // liste des urls des fichiers de configuration en JSON\n this.listConfigUrls = this.options.listConfigUrls;\n\n if (!this.listConfigUrls) {\n error.call(this, new Error(\"url by default not found !\"));\n return;\n }\n\n // INFO :\n // il n'y a pas de construction de requête,\n // on passe directement à l'appel des requêtes\n success.call(this, this.listConfigUrls);\n};\n\n/**\n * Récupération des configuration\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n * @overload\n */\nConfig.prototype.callService = function (error, success) {\n if (this.options.sync) {\n __callServiceSync.call(this, error, success);\n } else {\n __callService.call(this, error, success);\n }\n};\n\n/**\n * Requêtes en mode asynchrone\n *\n * @param {*} error\n * @param {*} success\n * @private\n */\nvar __callService = function (error, success) {\n // liste des resultats au format JSON\n this.listConfigResults = [];\n\n // test on env. nodejs or browser\n let Fetch = null;\n if (typeof window === \"undefined\") {\n var nodefetch = require(\"node-fetch\");\n Fetch = nodefetch;\n } else {\n Fetch = window.fetch;\n }\n\n // the factory of fetch !\n var fetchFactory = (url) => {\n return Fetch(url, { credentials : \"same-origin\" })\n .then((response) => {\n if (response.ok) {\n return response.json()\n .then((json) => {\n // TODO :\n // tester le contenu !\n return json;\n })\n .catch((error) => {\n throw new Error(\"Exception Json : \" + error);\n });\n } else {\n throw new Error(\"Exception HTTP : \" + response.status + \" (status code) !\");\n }\n })\n .catch((error) => {\n return new Promise((resolve, reject) => {\n // eslint-disable-line no-unused-vars\n reject(error);\n });\n });\n };\n\n // construction des promises fetch\n var promises = [];\n for (let index = 0; index < this.listConfigUrls.length; index++) {\n const url = this.listConfigUrls[index];\n promises.push(fetchFactory(url));\n }\n\n Promise.all(promises)\n .then((results) => {\n if (!results) {\n throw new Error(\"results config empty !?\");\n }\n results.forEach((result) => {\n // TODO :\n // verification des resultats\n this.listConfigResults.push(result);\n });\n })\n .then(() => {\n success.call(this, this.listConfigResults);\n })\n .catch((e) => {\n // TODO :\n // construction d'un message\n error.call(this, e);\n });\n};\n\n/**\n * Requêtes en mode synchrone\n *\n * @param {*} error\n * @param {*} success\n * @private\n */\nvar __callServiceSync = function (error, success) {\n // liste des resultats au format JSON\n this.listConfigResults = [];\n\n // FIXME :\n // boucle synchrone !\n for (var i = 0; i < this.listConfigUrls.length; i++) {\n const url = this.listConfigUrls[i];\n // TODO :\n // prévoir le CORS, headers, ...\n const request = new XMLHttpRequest();\n request.open(\"GET\", url, false);\n request.send(null);\n if (request.status === 200) {\n // TODO :\n // tester la reponse !\n var response = JSON.parse(request.responseText);\n this.listConfigResults.push(response);\n }\n }\n // callback\n if (this.listConfigResults.length !== 0) {\n success.call(this, this.listConfigResults);\n } else {\n error.call(this, new Error(\"...\"));\n }\n};\n\n/**\n * Analyse et mise en forme de la réponse en fusionnant les configurations\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n * @overload\n */\nConfig.prototype.analyzeResponse = function (error, success) {\n // fonction de merge des objects JSON\n var mergeConfig = function (objects) {\n // objet fusion des couches\n var allLayersConfig = {};\n // objet fusion des clés\n var allKeysConfig = {};\n // objet fusion des TMS\n var allTMSConfig = {};\n\n // on fusionne les résultat\n for (var i = 0; i < objects.length; i++) {\n if (!objects[i].generalOptions || !objects[i].layers) {\n return;\n }\n allKeysConfig = {\n ...allKeysConfig,\n ...objects[i].generalOptions.apiKeys\n };\n allLayersConfig = {\n ...allLayersConfig,\n ...objects[i].layers\n };\n allTMSConfig = {\n ...allTMSConfig,\n ...objects[i].tileMatrixSets\n };\n }\n\n var mergedConfig = {\n generalOptions : {\n apiKeys : allKeysConfig\n },\n layers : allLayersConfig,\n tileMatrixSets : allTMSConfig\n };\n return mergedConfig;\n };\n\n // fusion des configurations JSON\n var ConfigJSON = mergeConfig(this.listConfigResults);\n if (!ConfigJSON) {\n error.call(this, new Error(\"configuration structure not conforme !\"));\n return;\n }\n\n // creation des interfaces\n var IConfig = new ConfigInterface();\n // ajout des interfaces avec la configuration JSON\n Object.assign(IConfig, ConfigJSON);\n\n // définition de la variable globale Gp.Config\n var scope = typeof window !== \"undefined\" ? window : {};\n if (!scope.Gp) {\n scope.Gp = {};\n }\n\n // enregistrement\n if (scope.Gp.Config) {\n Object.assign(scope.Gp.Config, IConfig);\n // dans le doute..., ceinture et bretelles !\n for (var property in IConfig) {\n scope.Gp.Config[property] = IConfig[property];\n }\n } else {\n scope.Gp.Config = IConfig;\n }\n\n // INFO :\n // il n'y a pas d'analyse des résultats,\n // on passe directement à l'appel de la callback utilisateur\n success.call(this, scope.Gp.Config);\n};\n\nexport default Config;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes du service altimetrique.\n *\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiRequest\n * @param {Object} options - options\n * @param {Object} options.positions - tableau de coordonnées lon/lat\n * @param {String} options.delimiter - \"|\"\n * @param {Boolean} options.indent - false|true\n * @param {String} options.crs - \"CRS:84\"\n * @param {String} options.format - \"JSON|XML\"\n *\n * @private\n */\nfunction AltiRequest (options) {\n if (!(this instanceof AltiRequest)) {\n throw new TypeError(\"AltiRequest constructor cannot be called as a function.\");\n }\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur AltiRequest ()]\");\n\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n /**\n * Liste des coordonnées.\n * @example\n * var c = [{lon : \"\", lat : \"\"}, {lon : \"\", lat : \"\"}];\n */\n this.positions = this.options.positions || [];\n\n /**\n * Caractère de séparation.\n * Par defaut, \"|\".\n */\n this.delimiter = this.options.delimiter || \"|\";\n\n /**\n * Indentation.\n * true|false\n */\n this.indent = this.options.indent || false;\n\n /**\n * Projection.\n * Par defaut, CRS:84.\n */\n this.crs = this.options.crs || \"CRS:84\";\n\n /**\n * format de sortie.\n * Par defaut, \"json\".\n */\n this.format = this.options.format || \"json\";\n\n /*\n * Ressource utilisée\n */\n this.resource = this.options.resource;\n\n /**\n * Réponse détaillée (source & accuracy)\n * true|false\n */\n this.measures = this.options.measures || false;\n}\n\n/**\n * CLASSNAME\n */\nAltiRequest.CLASSNAME = \"AltiRequest\";\n\nAltiRequest.prototype = {\n\n /**\n * @lends module:AltiRequest#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor : AltiRequest,\n\n /**\n * Ajout d\"une liste de coordonnées.\n *\n * @param {Object[]} lstPosition - liste de positions\n * @example\n * obj.setPositions ([{lon : \"0.15\", lat : \"0.15\"}, {lon : \"1.15\", lat : \"1.15\"}]);\n */\n setPositions : function (lstPosition) {\n var positions = [];\n for (var i = 0; i < lstPosition.length; i++) {\n var o = lstPosition[i];\n if (o.lon && o.lat) {\n positions.push(o);\n }\n }\n\n this.positions = positions;\n },\n\n /**\n * Liste des coordonnées.\n *\n * @param {Int} pos - position\n * @returns {positions}\n * @example\n * obj.getPositions (); // [{lon : \"\", lat : \"\"}, {lon : \"\", lat : \"\"}]\n * obj.getPositions (0); // [{lon : \"\", lat : \"\"}]\n */\n getPositions : function (pos) {\n // FIXME test if not a number !?\n if (!pos) {\n return this.positions;\n }\n\n var index = this.positions.length - 1;\n if (pos > index || pos < index) {\n this.logger.warn(\"index out of range !\");\n return this.positions;\n }\n\n return this.positions[pos];\n },\n\n /**\n * Ajout d\"une liste de coordonnées.\n *\n * @param {Object[]} lstPosition - liste de positions\n * @example\n * obj.addPositions ([{lon : \"0.15\", lat : \"0.15\"}, {lon : \"1.15\", lat : \"1.15\"}]);\n */\n addPositions : function (lstPosition) {\n for (var i = 0; i < lstPosition.length; i++) {\n var o = lstPosition[i];\n if (o.lon && o.lat) {\n this.positions.push(lstPosition[i]);\n }\n }\n },\n\n /**\n * Retourne la liste des longitudes avec un caractère de séparation.\n *\n * @returns {String} - une liste de longitudes\n * @example\n * // out : 0.2367|2.1570|43.789|...\n */\n getLon : function () {\n var lstLon = [];\n for (var i = 0; i < this.positions.length; i++) {\n lstLon.push(this.positions[i].lon);\n }\n this.logger.trace(lstLon);\n return lstLon.join(this.delimiter);\n },\n\n /**\n * Retourne la liste des lattitudes avec un caractère de séparation.\n *\n * @returns {String} - une liste de lattitudes\n * @example\n * // out : 0.2367|2.1570|43.789|...\n */\n getLat : function () {\n var lstLat = [];\n for (var i = 0; i < this.positions.length; i++) {\n lstLat.push(this.positions[i].lat);\n }\n this.logger.trace(lstLat);\n return lstLat.join(this.delimiter);\n }\n\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Object[]}\n */\nAltiRequest.prototype.getData = function () {\n var map = [];\n\n map.push({\n k : \"lon\",\n v : this.getLon()\n });\n map.push({\n k : \"lat\",\n v : this.getLat()\n });\n map.push({\n k : \"delimiter\",\n v : this.delimiter\n });\n map.push({\n k : \"indent\",\n v : this.indent\n });\n map.push({\n k : \"crs\",\n v : this.crs\n });\n map.push({\n k : \"format\",\n v : this.format\n });\n\n return map;\n};\n\nexport default AltiRequest;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\nimport AltiRequest from \"./AltiRequest\";\n\n/**\n * @classdesc\n *\n * Classe de gestion des param. des requêtes de type POINT du service altimetrique.\n *\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiElevationRequest\n * @param {Object} options - options\n * @param {Boolean} options.zonly - false|true\n *\n * @private\n */\nfunction AltiElevationRequest (options) {\n if (!(this instanceof AltiElevationRequest)) {\n throw new TypeError(\"AltiElevationRequest constructor cannot be called as a function.\");\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"AltiElevationRequest\";\n\n // appel du constructeur par heritage\n AltiRequest.apply(this, arguments);\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur AltiElevationRequest ()]\");\n\n /**\n * Z uniquement.\n * true|false\n */\n this.zonly = this.options.zonly || false; // test des options héritées !\n}\n\n/**\n * @lends module:AltiElevationRequest#\n */\n\nAltiElevationRequest.prototype = Object.create(AltiRequest.prototype, {\n\n /**\n * Setter/getter pour \"zonly\"\n */\n zonly : {\n /** getter */\n get : function () {\n return this._zonly;\n },\n /** setter */\n set : function (z) {\n this._zonly = z;\n }\n }\n\n});\n\n/**\n * Constructeur (alias)\n */\nAltiElevationRequest.prototype.constructor = AltiElevationRequest;\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Array}\n */\nAltiElevationRequest.prototype.getData = function () {\n // par glop..., appel de AltiRequest::getData () !\n var map = [];\n map.push({\n k : \"lon\",\n v : this.getLon()\n });\n map.push({\n k : \"lat\",\n v : this.getLat()\n });\n // map.push({k : \"delimiter\", v : this.delimiter}); // FIXME on retire le param \"delimiter\"\n map.push({\n k : \"indent\",\n v : this.indent\n });\n map.push({\n k : \"crs\",\n v : this.crs\n });\n map.push({\n k : \"zonly\",\n v : this.zonly\n });\n map.push({\n k : \"format\",\n v : this.format\n });\n map.push({\n k : \"resource\",\n v : this.resource\n });\n\n return map;\n};\n\nexport default AltiElevationRequest;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\nimport AltiRequest from \"./AltiRequest\";\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes de type PROFIL du service altimetrique.\n *\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiProfilRequest\n * @param {Object} options - options\n * @param {String} options.sampling - 3\n *\n * @private\n */\nfunction AltiProfilRequest (options) {\n if (!(this instanceof AltiProfilRequest)) {\n throw new TypeError(\"AltiProfilRequest constructor cannot be called as a function.\");\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"AltiProfilRequest\";\n\n // appel du constructeur par heritage\n AltiRequest.apply(this, arguments);\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur AltiProfilRequest ()]\");\n\n /**\n * Sampling\n * Par defaut, 3\n */\n this.sampling = this.options.sampling || 3; // test des options héritées !\n}\n\n/**\n * @lends module:AltiProfilRequest#\n */\n\nAltiProfilRequest.prototype = Object.create(AltiRequest.prototype, {\n\n /**\n * Setter/getter pour \"sampling\"\n */\n sampling : {\n /** getter */\n get : function () {\n return this._sampling;\n },\n /** setter */\n set : function (value) {\n this._sampling = value;\n }\n }\n});\n\n/**\n * Constructeur (alias)\n */\nAltiProfilRequest.prototype.constructor = AltiProfilRequest;\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Object[]}\n */\nAltiProfilRequest.prototype.getData = function () {\n // par glop..., appel de AltiRequest::getData () !\n var map = [];\n map.push({\n k : \"lon\",\n v : this.getLon()\n });\n map.push({\n k : \"lat\",\n v : this.getLat()\n });\n // map.push({k : \"delimiter\", v : this.delimiter}); // FIXME on retire le param \"delimiter\"\n map.push({\n k : \"indent\",\n v : this.indent\n });\n map.push({\n k : \"crs\",\n v : this.crs\n });\n map.push({\n k : \"sampling\",\n v : this.sampling\n });\n map.push({\n k : \"format\",\n v : this.format\n });\n map.push({\n k : \"resource\",\n v : this.resource\n });\n\n return map;\n};\n\nexport default AltiProfilRequest;\n","/* jshint multistr : true */\n\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport AltiElevationRequest from \"./model/AltiElevationRequest\";\nimport AltiProfilRequest from \"./model/AltiProfilRequest\";\n\n/**\n * @classdesc\n * Classe de gestion des requêtes de type REST sur le service altimetrique.\n *\n * @todo Le service Alti n'implemente pas le POST !?\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiRequestREST\n * @param {Object} options - options\n * @param {Object} options.param.positions - tableau de coordonnées lon/lat\n * @param {String} options.param.delimiter - '|'\n * @param {Boolean} options.param.indent - false|true\n * @param {String} options.param.crs - 'CRS:84'\n * @param {String} options.param.sampling - 3\n * @param {String} options.param.resource - 'rge_alti_corse2a_float32_zip_lamb93'\n * @param {Boolean} options.param.zonly - false|true\n * @param {Boolean} options.param.measures - false|true\n * @param {String} options.param.format - \"JSON|XML\"\n * @param {String} options.type - \"Profil|Elevation\"\n * @param {String} options.method - GET|POST\n *\n * @example\n * var options = {\n * type : 'Profil', // Elevation\n * method : 'GET', // par defaut\n * param : {\n * positions : [\n * {lon:'1.11', lat:'1.11'},\n * {lon:'1.10', lat:'1.10'},\n * {lon:'1.12', lat:'1.12'}\n * ],\n * delimiter : \";\", // par defaut\n * indent : true, // par defaut\n * crs : 'EPSG:4326', // par defaut\n * format : 'json', // par defaut (only to POST)\n * sampling : 3 , // par defaut (only use by Profil)\n * zonly : false // par defaut (only use by Elevation)\n * measures : false // par defaut (only use by Elevation)\n * }\n * };\n *\n * var result;\n * try {\n * var obj = new AltiRequestREST (options);\n * if (! obj.processRequestString ()) {\n * throw new Error(\"Request empty !?\")\n * }\n * result = obj.requestString;\n * } catch (e) {\n * // exceptions...\n * }\n * @private\n */\nfunction AltiRequestREST (options) {\n this.logger = Logger.getLogger(\"AltiRequestREST\");\n this.logger.trace(\"[Constructeur AltiRequestREST ()]\");\n\n if (!(this instanceof AltiRequestREST)) {\n throw new TypeError(\"AltiRequestREST constructor cannot be called as a function.\");\n }\n\n this.options = options || {};\n\n // existance des options\n if (!this.options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n // type de requete : Altitude ou Profil\n // (param. à determiner en fonction des parametres d'entrée)\n if (!this.options.type) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"type (Elevation or Profil)\"));\n }\n\n // construction du modele de requête\n // (test du type d'objet candidat)\n this.DataObject = null;\n switch (this.options.type) {\n case \"Elevation\":\n this.DataObject = new AltiElevationRequest(this.options.param);\n break;\n case \"Profil\":\n this.DataObject = new AltiProfilRequest(this.options.param);\n break;\n default:\n throw new Error(_.getMessage(\"PARAM_TYPE\", \"type (Elevation or Profil)\"));\n }\n\n /**\n * methode.\n * Par defaut, \"GET\".\n */\n this.method = this.options.method || \"GET\";\n}\n\nAltiRequestREST.prototype = {\n\n /**\n * request\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : AltiRequestREST,\n\n /**\n * Template de la requête.\n */\n template : {\n get : {\n // FIXME on retire le param 'delimiter' : &delimiter='__DELIMITER__'\n value : \"lon=__LON__&lat=__LAT__&indent=__INDENT__&crs='__CRS__'&resource=__RESOURCE__&measures=__MEASURES__\",\n input : {\n point : \"&zonly=__ZONLY__\",\n profil : \"&sampling=__SAMPLING__\"\n }\n },\n post : {\n // FIXME on retire le param 'delimiter' : delimiter='__DELIMITER__'\\n\\\n value : \"lon=__LON__\\n\" +\n \"lat=__LAT__\\n\" +\n \"indent=__INDENT__\\n\" +\n \"crs='__CRS__'\\n\" +\n \"resource='__RESOURCE__'\\n\" +\n \"measures='__MEASURES__'\\n\",\n input : {\n point : \"zonly=__ZONLY__\\n\",\n profil : \"sampling=__SAMPLING__\"\n }\n }\n },\n\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out : lon=0.2367,2.1570&lat=48.0551,46.6077&delimiter=,&indent=true&zonly=true&crs='CRS:84'\n * // POST out : Not yet supported method POST !\n * @returns {String}\n */\n processRequestString : function () {\n this.logger.trace(\"AltiRequestREST::processRequestString ()\");\n\n var template = \"\";\n if (this.method === \"POST\") {\n template = this.template.post.value;\n } else if (this.method === \"GET\") {\n template = this.template.get.value;\n }\n\n template = template.replace(/__LON__/g, this.DataObject.getLon());\n template = template.replace(/__LAT__/g, this.DataObject.getLat());\n // FIXME on retire le param 'delimiter'\n // template = template.replace(/__DELIMITER__/g, this.DataObject.delimiter);\n template = template.replace(/__INDENT__/g, this.DataObject.indent);\n template = template.replace(/__CRS__/g, this.DataObject.crs);\n template = template.replace(/__RESOURCE__/g, this.DataObject.resource);\n template = template.replace(/__MEASURES__/g, this.DataObject.measures);\n\n // ajout +\n template = template + this.__addDataInputs();\n this.logger.trace(\"traduction tmpl\", template);\n\n // sauvegarde\n this.requestString = template;\n\n return this.requestString;\n },\n\n /**\n * Ajout de parametres spécifiques (ex. zonly)\n *\n * @returns {String}\n */\n __addDataInputs : function () {\n this.logger.trace(\"AltiRequestREST::addDataInput ()\");\n\n var myTemplate;\n if (this.method === \"POST\") {\n myTemplate = this.template.post;\n } else if (this.method === \"GET\") {\n myTemplate = this.template.get;\n } else {\n throw new Error(\"No other HTTP method supported by the service !\");\n }\n\n var tmpl = null;\n if (this.DataObject.CLASSNAME === \"AltiElevationRequest\") {\n tmpl = myTemplate.input.point;\n return tmpl.replace(/__ZONLY__/g, this.DataObject.zonly.toString());\n } else if (this.DataObject.CLASSNAME === \"AltiProfilRequest\") {\n tmpl = myTemplate.input.profil;\n return tmpl.replace(/__SAMPLING__/g, this.DataObject.sampling);\n } else {\n throw new Error(\"No other object supported than elevation or profil !?\");\n }\n }\n};\n\nexport default AltiRequestREST;\n","import Logger from \"../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n * Standard WPS\n *\n * @constructor\n * @alias Gp.Formats.WPS\n * @param {Object} options - options\n * @param {Object} options.data - objet\n * @param {String} options.method - POST|GET\n * @param {String} options.param.service - \"WPS\"\n * @param {String} options.param.version - \"1.0.0\"\n * @param {String} options.param.identifier - \"gs:WPSElevation|gs:WPSLineElevation\"\n * @param {String} options.param.rawdataoutput - \"result\"\n * @param {String} options.param.request - \"Execute\"\n * @param {Function} options.onsuccess - function callback success (TODO)\n * @param {Function} options.onerror - function callback error (TODO)\n * @private\n */\nfunction WPS (options) {\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur WPS()]\");\n\n if (!(this instanceof WPS)) {\n throw new TypeError(\"WPS constructor cannot be called as a function.\");\n }\n\n this.options = options || {};\n\n /**\n * Objet DATA\n */\n this.DataObject = this.options.data;\n\n if (!this.DataObject) {\n throw new TypeError(\"This data object is not defined !\");\n }\n\n /**\n * param service.\n * Par defaut, \"WPS\".\n */\n this.paramservice = this.options.param.service || \"WPS\";\n\n /**\n * param version.\n * Par defaut, \"1.0.0\".\n */\n this.paramversion = this.options.param.version || \"1.0.0\";\n\n /**\n * param identifier\n * Par defaut, \"gs:WPS\"\n */\n this.paramidentifier = this.options.param.identifier || \"gs:WPS\";\n\n /**\n * param rawdataoutput\n * Par defaut, \"result\".\n */\n this.paramrawdataoutput = this.options.param.rawdataoutput || \"result\";\n\n /**\n * param request\n * Par defaut, \"Execute\".\n */\n this.paramrequest = this.options.param.request || \"Execute\";\n\n /**\n * methode.\n * Par defaut, \"GET\".\n */\n this.method = this.options.method || \"GET\";\n}\n\nWPS.prototype = {\n\n /**\n * @lends module:WPS#\n */\n\n /**\n * request\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : WPS,\n\n /**\n * Template de la requête.\n */\n template : {\n get : {\n value : \"service=__SERVICE__\" +\n \"&version=__VERSION__\" +\n \"&rawdataoutput=__RAWDATAOUTPUT__\" +\n \"&identifier=__IDENTIFIER__\" +\n \"&request=__REQUEST__\" +\n \"&datainputs=\",\n\n input : \"__KEY__=__DATA__\"\n\n },\n post : {\n\n value : \"\" +\n \"\" +\n \"__IDENTIFIER__\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"__RAWDATAOUTPUT__\" +\n \"\" +\n \"\" +\n \"\",\n\n input : \"\" +\n \"__KEY__\" +\n \"\" +\n \"__DATA__\" +\n \"\" +\n \"\"\n }\n },\n\n /**\n * Namespace par defaut de la requete POST.\n *\n * @returns {String} namespace\n */\n namespaceByDefault : function () {\n var ns = [\n \"xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\"\",\n \"xmlns=\\\"http://www.opengis.net/wps/1.0.0\\\"\",\n \"xmlns:wfs=\\\"http://www.opengis.net/wfs\\\"\",\n \"xmlns:wps=\\\"http://www.opengis.net/wps/1.0.0\\\"\",\n \"xmlns:ows=\\\"http://www.opengis.net/ows/1.1\\\"\",\n \"xmlns:gml=\\\"http://www.opengis.net/gml\\\"\",\n \"xmlns:ogc=\\\"http://www.opengis.net/ogc\\\"\",\n \"xmlns:wcs=\\\"http://www.opengis.net/wcs/1.1.1\\\"\",\n \"xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\"\n ];\n\n return ns.join(\" \");\n },\n\n /**\n * Schemalocation par defaut.\n *\n * @returns {String} schemaLocation\n */\n schemaLocationByDefault : function () {\n return \"xsi:schemaLocation=\\\"http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd\\\"\";\n },\n\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out :\n * // service=__SERVICE__\n * // &version=__VERSION__\n * // &rawdataoutput=__RAWDATAOUTPUT__\n * // &identifier=__IDENTIFIER__\n * // &request=__REQUEST__\n * // &datainputs=\"__DATAINPUTS__\"\n * // avec __DATAINPUTS__ = __KEY__=__DATA__;...\n *\n * // POST out :\n * // \n * // \n * // __IDENTIFIER__\n * // \n * // \n * // \n * // \n * // \n * // __RAWDATAOUTPUT__\n * // \n * // \n * // \",\n * // avec __DATAINPUTS__\n * // \n * // __KEY__\n * // \n * // __DATA__\n * // \n * // \n *\n * @returns {Boolean} validation de la construction de la requete\n */\n processRequestString : function () {\n this.logger.trace(\"WPS::processRequestString ()\");\n\n var template = \"\";\n if (this.method === \"POST\") {\n template = this.template.post.value;\n } else if (this.method === \"GET\") {\n template = this.template.get.value;\n } else {\n this.logger.error(\"No other method supported by the service !\");\n return false;\n }\n\n template = template.replace(/__SERVICE__/g, this.paramservice);\n template = template.replace(/__VERSION__/g, this.paramversion);\n template = template.replace(/__RAWDATAOUTPUT__/g, this.paramrawdataoutput);\n template = template.replace(/__IDENTIFIER__/g, this.paramidentifier);\n template = template.replace(/__REQUEST__/g, this.paramrequest);\n\n // ajout +\n if (this.method === \"POST\") {\n template = template.replace(/__NAMESPACE__/g, this.namespaceByDefault);\n template = template.replace(/__SCHEMALOCATION__/g, this.schemaLocationByDefault);\n }\n\n // ajout des datainputs\n template = template.replace(//g, this.__addDataInputs());\n\n if (!template) {\n this.logger.warn(\"traduction tmpl : empty request !?\");\n return false;\n }\n\n this.requestString = template;\n this.logger.trace(\"traduction tmpl\", template);\n\n return true;\n },\n\n /**\n * Ajout des données\n *\n * @returns {String} Données concaténées dans une chaine\n */\n __addDataInputs : function () {\n this.logger.trace(\"WPS::__addDataInputs ()\");\n\n // c'est un peu grossier...\n var tmpl = this.method === \"GET\" ? this.template.get.input : this.template.post.input;\n var sep = this.method === \"GET\" ? \";\" : \"\";\n\n var result = \"\";\n var that = this;\n var map = this.DataObject.getData();\n for (var i = 0; i < map.length; i++) {\n // FIXME closure ?\n (function (j) {\n if (sep) {\n sep = (j === map.length - 1) ? \"\" : \";\";\n }\n result = result.concat(that.__addDataInput(tmpl, map[j].k, map[j].v), sep);\n })(i);\n }\n\n return result;\n },\n\n /**\n * Ajout d'une donnée.\n *\n * @param {String} tmpl - template\n * @param {String} key - clef\n * @param {String} data - valeur\n * @returns {String} chaine avec les substitutions clef/valeur\n */\n __addDataInput : function (tmpl, key, data) {\n var tmp = tmpl;\n tmp = tmp.replace(/__KEY__/g, key);\n tmp = tmp.replace(/__DATA__/g, data);\n return tmp;\n },\n\n /**\n * Definir le mode de requête\n *\n * @param {String} method - GET|POST\n */\n setMethod : function (method) {\n if (method === \"GET\" || method === \"POST\") {\n this.method = method;\n } else {\n this.logger.warn(\"support only GET and POST method !\");\n }\n },\n\n /**\n * Retourne le mode de requete (GET|POST).\n *\n * @returns {AltiRequest.options.mode|String} methode (GET|POST)\n */\n getMethod : function () {\n return this.method;\n }\n};\n\nexport default WPS;\n","/**\n * Classe d'interface des requêtes de type WPS sur le service altimetrique.\n * (Factory)\n *\n * @module Gp.Services.Alti.Request.AltiRequestWPS\n * @alias Gp.Services.Alti.Request.AltiRequestWPS\n * @private\n */\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport WPS from \"../../../Formats/WPS\";\nimport AltiElevationRequest from \"./model/AltiElevationRequest\";\nimport AltiProfilRequest from \"./model/AltiProfilRequest\";\n\nvar AltiRequestWPS = {\n\n /**\n * Interface unique de construction de la requête.\n *\n * @method build\n * @param {Object} options - options\n * @param {Object} options.param.positions - tableau de coordonnées lon/lat\n * @param {String} options.param.delimiter - '|'\n * @param {Boolean} options.param.indent - false|true\n * @param {String} options.param.crs - 'CRS:84'\n * @param {String} options.param.sampling - 3\n * @param {Boolean} options.param.zonly - false|true\n * @param {String} options.param.format - \"JSON|XML\" (only to POST)\n * @param {String} options.wps.service - \"WPS\"\n * @param {String} options.wps.version - \"1.0.0\"\n * @param {String} options.wps.identifier - \"gs:WPSElevation|gs:WPSLineElevation\"\n * @param {String} options.wps.rawdataoutput - \"result\"\n * @param {String} options.wps.request - \"Execute\"\n * @param {String} options.type - \"Profil|Elevation\"\n * @param {String} options.method - GET|POST\n * @example\n * var options = {\n * type : 'Profil', // Elevation\n * method : 'GET', // par defaut\n * param : {\n * positions : [\n * {lon:'1.11', lat:'1.11'},\n * {lon:'1.10', lat:'1.10'},\n * {lon:'1.12', lat:'1.12'}\n * ],\n * delimiter : \";\", // par defaut\n * indent : true, // par defaut\n * crs : 'EPSG:4326', // par defaut\n * format : 'json', // par defaut (only to POST)\n * sampling : 3 , // par defaut (only use by Profil)\n * zonly : false, // par defaut (only use by Elevation)\n * },\n * wps : {\n * service : 'WPS', // par defaut\n * version : '1.0.0', // par defaut\n * identifier : 'gs:WPS', // par defaut, Elevation = gs:WPSElevation, Profil = gs:WPSLineElevation\n * rawdataoutput : 'result',// par defaut\n * request : 'Execute' // par defaut\n * }\n * };\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"AltiRequestWPS\");\n logger.trace([\"AltiRequestWPS::build()\"]);\n\n // existance des options\n if (!options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n // type de requete : Altitude ou Profil\n // (param. à determiner en fonction des parametres d'entrée)\n if (!options.type) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"type (Elevation or Profil)\"));\n }\n\n // construction du modele de requête\n // (test du type d'objet candidat)\n var DataObject = null;\n switch (options.type) {\n case \"Elevation\":\n // surcharge\n options.wps.identifier = \"gs:WPSElevation\";\n DataObject = new AltiElevationRequest(options.param);\n break;\n case \"Profil\":\n // surcharge\n options.wps.identifier = \"gs:WPSLineElevation\";\n DataObject = new AltiProfilRequest(options.param);\n break;\n default:\n throw new Error(_.getMessage(\"PARAM_TYPE\", \"type (Elevation or Profil)\"));\n }\n\n // construction de la requête WPS\n var settings = {\n data : DataObject,\n method : options.method,\n param : options.wps\n };\n\n var rqstWPS = new WPS(settings);\n\n if (!rqstWPS.processRequestString()) {\n throw new Error(\"Enable to process request !\");\n }\n\n return rqstWPS.requestString;\n }\n};\n\nexport default AltiRequestWPS;\n","/**\n * Creation d'une requête en REST ou WPS\n * (Factory)\n *\n * @module AltiRequestFactory\n * @alias Gp.Services.Alti.Request.AltiRequestFactory\n * @private\n */\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport AltiRequestREST from \"./AltiRequestREST\";\nimport AltiRequestWPS from \"./AltiRequestWPS\";\n\nvar AltiRequestFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Alti\n *\n * @example\n * var options = {\n * httpMethod : 'GET', // GET|POST\n * onSuccess : function (response) {},\n * onError : function (error) {},\n * scope : this,\n * positions : [{lon:, lat:}, {lon:, lat:}],\n * outputFormat : 'json' // json|xml\n * sampling : 3,\n * api : 'REST', // REST|WPS\n * zonly : false // false|true\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"AltiRequestFactory\");\n logger.trace([\"AltiRequestFactory::build()\"]);\n\n var request = null;\n\n // on factorise les options par groupe;\n // - global,\n // - param, les params pour les data inputs\n // - wps, les param du service\n // - callback\n\n var settings = {\n // ajout des valeurs par defaut spécifiques au service\n type : options.sampling ? \"Profil\" : \"Elevation\",\n method : options.httpMethod,\n param : {\n positions : null,\n delimiter : null, // FIXME par defaut, on ne le met pas en place car ça fait planter la requête !?\n indent : null, // par defaut\n crs : null, // par defaut\n format : null, // (only to POST)\n sampling : null, // (only use by Profil)\n zonly : null, // (only use by Elevation)\n measures : null // (only use by Elevation)\n }\n };\n\n // surcharge des valeurs obligatoires\n settings.param.positions = options.positions;\n settings.param.format = options.outputFormat;\n settings.param.sampling = options.sampling;\n settings.param.zonly = options.zonly;\n settings.param.measures = options.measures;\n settings.param.resource = options.resource;\n\n // gestion des callback\n var bOnError = !!(options.onError !== null && typeof options.onError === \"function\"); // cast variable to boolean\n var bOnSuccess = !!(options.onSuccess !== null && typeof options.onSuccess === \"function\");\n\n var message = null;\n switch (options.api) {\n case \"REST\":\n // FIXME les exceptions ne sont pas 'catchées' sur le constructeur !\n var myReq = new AltiRequestREST(settings);\n if (!myReq.processRequestString()) {\n message = \"Error in process request (rest) !\";\n if (bOnError) {\n options.onError.call(options.scope, new ErrorService(message));\n return;\n }\n throw new Error(message);\n }\n request = myReq.requestString;\n break;\n case \"WPS\":\n // ajout des valeurs par defaut spécifiques au service WPS\n settings.wps = {\n service : null, // par defaut\n version : null, // par defaut\n identifier : null, // par defaut\n rawdataoutput : null, // par defaut\n request : null // par defaut\n };\n\n request = AltiRequestWPS.build(settings);\n if (!request) {\n message = \"Error in process request (wps) !\";\n if (bOnError) {\n options.onError.call(options.scope, new ErrorService(message));\n return;\n }\n throw new Error(message);\n }\n break;\n default:\n message = \"Type of API is not supported by service (REST or WPS) !\";\n if (bOnError) {\n options.onError.call(options.scope, new ErrorService(message));\n return;\n }\n throw new Error(message);\n }\n\n if (bOnSuccess) {\n options.onSuccess.call(options.scope, request);\n }\n\n return request;\n }\n};\n\nexport default AltiRequestFactory;\n","/* global require */\n\nimport Logger from \"../Utils/LoggerByDefault\";\n// import __xmldom from \"xmldom\";\n\n/**\n * @classdesc\n *\n * Classe permettant d'écrire ou de lire du XML, sous forme de document DOM,\n * éventuellement selon des clés de lecture (readers) ou d'écriture (writers) spécifiques.\n *\n * @constructor\n * @alias Gp.Formats.XML\n *\n * @param {Object} [options] - options du format XML\n *\n * @param {Object} [options.reader] - Instance d'un Reader de service (AltiResponseReader, GeocodeRequestReader, etc.)\n * utile pour interpréter le XML lorsque sa structure est connue.\n * Ce reader doit comporter au moins une fonction statique read (root) permettant d'initialiser la lecture.\n *\n * @param {Object} [options.writers] - writers\n *\n * @param {String} [options.xmlString] - chaîne de caractère contenant du XML à interpréter.\n *\n * @private\n */\nfunction XML (options) {\n if (!(this instanceof XML)) {\n throw new TypeError(\"XML constructor cannot be called as a function.\");\n }\n\n // FIXME : notion de singleton\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur XML ()]\");\n\n /**\n * Chaîne de caractères contenant le texte XML\n * @type {String}\n */\n this.xmlString = null;\n\n /**\n * DOM Element correspondant à la structure du XML.\n * @type {DOMElement}\n */\n this.xmlDoc = null;\n\n /**\n * Objet contenant des fonctions de lecture des différentes balises XML.\n * @type {Object}\n */\n this.reader = null;\n\n // traitement des paramètres d'options s'il y en a\n if (options) {\n if (options.xmlString && typeof options.xmlString === \"string\") {\n this.xmlString = options.xmlString;\n // Si une chaine de caractère a été passée en entrée : on la transforme aussi en XML document\n this.xmlDoc = __getXMLDOC(options.xmlString);\n }\n if (options.reader) {\n this.setReader(options.reader);\n }\n }\n}\n\nXML.prototype = {\n\n /**\n * @lends module:XML\n */\n\n /*\n * Constructeur (alias)\n */\n constructor : XML,\n\n /**\n * Méthode permettant de récupérer la chaîne de caractères associée au format XML\n *\n * @returns {String} xmlString - la chaîne de caractères correspondant au format XML\n */\n getXMLString : function () {\n return this.xmlString;\n },\n\n /**\n * Méthode permettant d'attribuer une chaîne de caractères au format XML (attribut xmlString).\n * La méthode va aussi transformer cette chaîne de caractères en document XML,\n * afin de remplir l'attribut xmlDoc.\n *\n * @param {String} xmlString - la chaîne de caractères correspondant au format XML\n */\n setXMLString : function (xmlString) {\n if (xmlString && typeof xmlString === \"string\") {\n this.xmlString = xmlString;\n this.xmlDoc = __getXMLDOC(xmlString);\n }\n },\n\n /**\n * Méthode permettant de récupérer les readers associés au format XML, s'ils ont été définis\n *\n * @return {Object} readers - les readers associés au format XML, s'ils existent,\n * sous forme d'une collection de fonctions\n */\n getReader : function () {\n return this.reader;\n },\n\n /**\n * Méthode permettant d'attribuer des readers, sous la forme d'un objet de fonctions (node, data),\n * lorsqu'ils n'ont pas été définis lors de l'instanciation par exemple (new XML (options)).\n *\n * @param {Object} reader - Instance d'un Reader de service (AltiResponseReader, GeocodeRequestReader, etc.)\n * utile pour interpréter le XML lorsque sa structure est connue.\n * Ce reader doit comporter au moins une fonction statique read (root) permettant d'initialiser la lecture.\n */\n setReader : function (reader) {\n if (reader && reader.read && typeof reader.read === \"function\") {\n this.reader = reader;\n }\n },\n\n /**\n * Méthode permettant de récupérer le document XML associé au format, s'il existe.\n *\n * @return {DOMElement} xmlDoc - le document XML (DOM document node) s'il existe\n */\n getXMLDoc : function () {\n return this.xmlDoc;\n },\n\n /**\n * Setter\n */\n setXMLDoc : function (doc) {\n this.xmlDoc = doc;\n },\n /**\n * Méthode initialisant la lecture du XML, à partir d'un XML Document :\n * création d'un objet JavaScript contenant les informations du XML,\n * sauf dans le cas où il n'existe pas de XML Document à interpréter (retourne un objet vide).\n *\n * @return {Object} [parserOutput] - un objet JavaScript contenant les informations du XML :\n * - soit toutes les informations si aucun reader n'a été spécifié à la création du format\n * - soit les informations spécifiées dans le reader.\n */\n parse : function () {\n // build xml document from xmlString\n if (!this.xmlDoc && this.xmlString) {\n this.xmlDoc = __getXMLDOC(this.xmlString);\n }\n if (this.xmlDoc) {\n var root = __getRootNode(this.xmlDoc);\n if (root) {\n var parserOutput;\n // call reader if exists\n if (this.reader && this.reader.read) {\n parserOutput = this.reader.read(root);\n } else {\n parserOutput = {};\n parserOutput[root.nodeName] = __readDefault(root);\n }\n return parserOutput;\n } else {\n return {};\n }\n }\n }\n\n};\n\n/**\n * Méthode de la classe (privée) permettant de créer un XML Document à partir d'une chaîne de caractères XML,\n * en utilisant DOMParser () lorsque c'est possible.\n * For more information, see: https://dvcs.w3.org/hg/innerhtml/raw-file/tip/index.html#the-domparser-interface\n *\n * @private\n * @memberof XML\n * @method __getXMLDOC\n * @param {String} xmlString - xml string to be converted into DOM element\n * @return {DOMElement} - the corresponding XML Document\n */\nfunction __getXMLDOC (xmlString) {\n if (typeof window === \"undefined\") {\n // env. nodejs\n var DOMParser = require(\"@xmldom/xmldom\").DOMParser; // __xmldom.DOMParser;\n return new DOMParser().parseFromString(xmlString, \"text/xml\");\n } else {\n // env. browser\n\n var parser;\n var xmlDoc;\n var errorMsg = \"Erreur lors du parsing de la réponse du service : XML non conforme\";\n\n if (window.ActiveXObject) {\n // Internet Explorer < 9\n xmlDoc = new window.ActiveXObject(\"Microsoft.XMLDOM\");\n xmlDoc.async = false;\n xmlDoc.loadXML(xmlString);\n var parseError = xmlDoc.parseError;\n if (parseError.errorCode) {\n if (parseError.line && parseError.linepos) {\n errorMsg += \"( ligne \" + parseError.line + \", colonne \" + parseError.linepos;\n }\n if (parseError.reason) {\n errorMsg += \": \" + parseError.reason + \")\";\n }\n throw new Error(errorMsg);\n }\n return xmlDoc;\n } else if (window.DOMParser) {\n // les autres (Chrome, Mozilla, IE >= 9)\n parser = new window.DOMParser();\n try {\n xmlDoc = parser.parseFromString(xmlString, \"text/xml\");\n } catch (e) {\n // Internet Explorer browser raises exception if xmlString is not valid XML\n if (e.message === \"SyntaxError\") {\n throw new Error(errorMsg);\n } else {\n throw new Error(\"Erreur lors du parsing de la réponse du service : \" + e.message);\n }\n }\n // look for parsing error in case no exception was raised\n if (xmlDoc.getElementsByTagName(\"parsererror\").length > 0) {\n var parsererror = xmlDoc.getElementsByTagName(\"parsererror\");\n for (var i = 0; i < parsererror.length; i++) {\n var content = parsererror[i].innerHTML;\n // except in case parsererror is just because of huge xml, but parsing is done.\n if (content.indexOf(\"Huge input lookup\") === -1) {\n errorMsg += \"(\" + content + \")\";\n throw new Error(errorMsg);\n }\n }\n } else if (!xmlDoc.documentElement) { // may happen in chrome browser\n throw new Error(errorMsg);\n }\n return xmlDoc;\n } else {\n // FIXME\n throw new Error(\"Incompatible DOM Parser pour ce navigateur !\");\n }\n }\n}\n\n/**\n * Méthode de la classe (privée) permettant de récupérer le noeud racine du document,\n * à partir d'un document node (nodeType=9), puis lecture de ce noeud (readNode)\n *\n * @private\n * @memberof XML\n * @method __getRootNode\n * @param {DOMElement} [xmlDoc] - a Document Node\n * @return {DOMElement} root - the document root node\n */\nfunction __getRootNode (xmlDoc) {\n var root;\n if (xmlDoc.nodeType === 9) {\n // INFO : nodeType 9 represents the entire document (the root-node of the DOM tree)\n root = xmlDoc.documentElement;\n } else if (xmlDoc.nodeType === 1) {\n root = xmlDoc;\n }\n return root;\n}\n\n/**\n * Méthode de la classe (privée) permettant de lire automatiquement un noeud XML,\n * lorsqu'aucun reader spécifique n'a été spécifié (parser brut)\n *\n * @private\n * @memberof XML\n * @method readDefault\n * @param {DOMElement} node - a DOM element node\n * @example final data object looks like :\n * data = {\n * attributeName: attributeValue,\n * childName: {\n * attributeName: attributeValue,\n * attributeName: attributeValue,\n * childName: {\n * \"textContent\": textContent\n * },\n * childName: {\n * childName: {\n * attributeName:attributeValue\n * }\n * }\n * }\n * }\n */\nfunction __readDefault (node) {\n var data = {};\n\n // if element node has attributes, set their values to data\n if (node.attributes.length > 0) {\n var dataAttributes = __getAttributes(node);\n data[\"attributes\"] = dataAttributes;\n }\n\n // if element node has childNodes, read them and set them to data\n if (node.hasChildNodes()) {\n var childData = {};\n var child;\n var children = node.childNodes;\n\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n\n if (child.nodeType === 3) { // TEXT_NODE\n data[\"textContent\"] = child.nodeValue;\n } else if (child.nodeType === 1) {\n childData = __readDefault(child);\n\n if (!data[child.nodeName]) {\n // store childData in an object\n data[child.nodeName] = childData;\n } else {\n // in case several childNodes has the same name : store them in an array.\n // if data[nodeName] already exists but is not an array\n if (!Array.isArray(data[child.nodeName])) {\n var old = data[child.nodeName];\n data[child.nodeName] = [];\n data[child.nodeName].push(old);\n }\n data[child.nodeName].push(childData);\n }\n }\n // TODO : manage other node types (4=CDATA, etc)\n }\n }\n\n return data;\n}\n\n/**\n * Méthode de la classe (privée) permettant de récupérer les attributs d'un noeud élément\n *\n * @private\n * @memberof XML\n * @method __getAttributes\n * @param {DOMElement} node - noeud contenant l'attribut recherché\n * @return {Object} nodeAttributes - objet contenant les noms et valeurs des différents attributs\n */\nfunction __getAttributes (node) {\n if (node.attributes.length > 0) {\n var nodeAttributes = {};\n var attributes = node.attributes;\n for (var i = 0; i < attributes.length; i++) {\n var attribute = attributes[i];\n nodeAttributes[attribute.nodeName] = attribute.nodeValue;\n }\n return nodeAttributes;\n }\n}\n\nexport default XML;\n","/**\n * Response object for {@link module:Services~getAltitude Gp.Services.getAltitude ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Array.} elevations - Elevations array.\n *\n * @namespace\n * @alias Gp.Services.AltiResponse\n */\nfunction AltiResponse () {\n if (!(this instanceof AltiResponse)) {\n throw new TypeError(\"AltiResponse constructor cannot be called as a function.\");\n }\n\n this.elevations = [];\n}\n\nAltiResponse.prototype = {\n\n constructor : AltiResponse\n\n};\n\nexport default AltiResponse;\n","\n/**\n * Single elevation object returned by underlying web service. Contains at least, one elevation (z). May also contain point coordinates and elevation accuracy if \"zonly\" parameter wasn't set to true.\n *\n * @property {Float} lat - Point latitude. (only if zonly=false)\n * @property {Float} lon - Point longitude. (only if zonly=false)\n * @property {Float} z - Point elevation.\n * @property {Float} acc - Accuracy of elevation for this point. (only if zonly=false)\n *\n * @namespace\n * @alias Gp.Services.Alti.Elevation\n */\nfunction Elevation () {\n if (!(this instanceof Elevation)) {\n throw new TypeError(\"Elevation constructor cannot be called as a function.\");\n }\n\n this.z = null;\n}\n\nElevation.prototype = {\n\n constructor : Elevation\n\n};\n\nexport default Elevation;\n","\n/**\n * Single measure object returned by underlying web service if measures = true and zonly = false\n *\n * @property {String} source_name - Name of the source\n * @property {String} source_measure - Name of the measure\n * @property {Float} z - Point elevation.\n * @property {Float} acc - Accuracy of elevation for this point. (only if zonly=false)\n *\n * @namespace\n * @alias Gp.Services.Alti.Measure\n */\nfunction Measure () {\n if (!(this instanceof Measure)) {\n throw new TypeError(\"Measure constructor cannot be called as a function.\");\n }\n\n this.source_name = null;\n this.source_measure = null;\n this.z = null;\n this.acc = null;\n}\n\nMeasure.prototype = {\n\n constructor : Measure\n\n};\n\nexport default Measure;\n","\n/**\n * Fonction retournant un objet contenant des clés de lecture (readers)\n * qui permettent de parser des réponses XML du service Altimétrique du Géoportail\n * (calcul altimétrique simple ou profil altimétrique d'une courbe),\n * lorsque le paramètre output = xml,\n * afin de récupérer les élévations retournées.\n *\n * @module AltiResponseReader\n * @alias Gp.Services.Alti.Formats.AltiResponseReader\n * @private\n */\n\n// import Logger from \"../../../Utils/LoggerByDefault\";\nimport AltiResponse from \"../Response/model/AltiResponse\";\nimport Elevation from \"../Response/model/Elevation\";\nimport Measure from \"../Response/model/Measure\";\n\n/**\n *\n * Objet AltiResponseReader\n *\n * @member {Object} AltiResponseReader\n *\n * @property {Object} AltiResponseReader.READERS - Objet contenant des fonctions de lecture, appelées \"readers\"\n * dont chaque clé correspond au nom d'un tag du XML que l'on souhaite lire\n * et la valeur associée est une fonction (node, data)\n * où node est un noeud du document DOM\n * et data est un objet où l'on stocke les informations lues dans le XML.\n *\n * @property {Method} AltiResponseReader.READERS.elevations - Lecture d'un noeud \"elevations\" de la réponse XML\n * du service alti, correspondant logiquement à la racine du document\n * (contient un ou plusieurs childNodes correspondant chacun à une élévation retournée)\n *\n * @property {Method} AltiResponseReader.READERS.elevation - Lecture d'un noeud \"elevation\" de la réponse xml du service alti.\n * (contient un ou 4 childNode (s) correspondant à l'altitude (z) et éventuellement lat, lon, et acc)\n *\n * @property {Method} AltiResponseReader.READERS.lat - Lecture d'un noeud \"lat\" de la réponse xml du service alti.\n * (contient une valeur de latitude, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.lon - Lecture d'un noeud \"lon\" de la réponse xml du service alti.\n * (contient une valeur de longitude, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.z - Lecture d'un noeud \"z\" de la réponse xml du service alti.\n * (contient une valeur d'altitude, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.acc - Lecture d'un noeud \"acc\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.measures - Lecture d'un noeud \"measures\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.source_name - Lecture d'un noeud \"source_name\" de la réponse xml du service alti.\n * (pour remplir l'éventuel objet measure)\n *\n * @property {Method} AltiResponseReader.READERS.source_mesure - Lecture d'un noeud \"source_mesure\" de la réponse xml du service alti.\n * (pour remplir l'éventuel objet measure)\n *\n * @property {Method} AltiResponseReader.READERS.exceptionreport - Lecture d'un noeud \"ExceptionReport\" de la réponse xml du service alti.\n *\n * @property {Method} AltiResponseReader.READERS.exception - Lecture d'un noeud \"Exception\" de la réponse xml du service alti.\n *\n * @property {Method} AltiResponseReader.read - Méthode permettant de lancer la lecture d'une réponse XML du service altimétrique,\n * à l'aide des readers de la classe.\n *\n */\nvar AltiResponseReader = {};\n\nAltiResponseReader.READERS = {\n\n /**\n * Lecture d'un noeud \"elevations\" de la réponse XML du service alti, correspondant logiquement à la racine du document\n * (contient un ou plusieurs childNodes correspondant chacun à une élévation retournée)\n *\n * @param {DOMElement} root - racine de la réponse XML\n * @static\n * @memberof AltiResponseReader\n * @returns {Object} Retourne un objet de type AltiResponse\n */\n elevations : function (root) {\n // INFO : on passe en paramètre l'objet en entrée elevations, vide, à remplir.\n var altiResponse = new AltiResponse();\n\n if (root.hasChildNodes()) {\n var children = root.childNodes;\n var child;\n var elevation;\n\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n\n if (AltiResponseReader.READERS[child.nodeName]) {\n elevation = AltiResponseReader.READERS[child.nodeName](child);\n altiResponse.elevations.push(elevation);\n }\n }\n }\n\n return altiResponse;\n },\n\n /**\n * Lecture d'un noeud \"elevation\" de la réponse xml du service alti.\n * (contient un ou 5 childNode (s) correspondant à l'altitude (z) et éventuellement lat, lon, acc et measures)\n *\n * @param {DOMElement} node - noeud elevation à lire pour récupérer les informations de l'élévation retournée (z [, lon, lat, acc, measures])\n * @return {Array} elevationResponse - format de la réponse en sortie, instance de AltiResponse\n * @static\n * @memberof AltiResponseReader\n */\n elevation : function (node) {\n var elevation = new Elevation();\n\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (AltiResponseReader.READERS[child.nodeName]) {\n // INFO : on passe en paramètre l'objet en entrée elevation, vide, à remplir.\n AltiResponseReader.READERS[child.nodeName](child, elevation);\n }\n }\n }\n return elevation;\n },\n\n /**\n * Lecture d'un noeud \"lat\" de la réponse xml du service alti.\n * (contient une valeur de latitude, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la latitude\n * @param {Object} elevation - objet dans lequel stocker la latitude retournée\n * @static\n * @memberof AltiResponseReader\n */\n lat : function (node, elevation) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n elevation.lat = parseFloat(textNode.nodeValue);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : latitude attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"lon\" de la réponse xml du service alti.\n * (contient une valeur de longitude, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la longitude\n * @param {Object} elevation - objet dans lequel stocker la longitude retournée\n * @static\n * @memberof AltiResponseReader\n */\n lon : function (node, elevation) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n elevation.lon = parseFloat(textNode.nodeValue);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : longitude attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"z\" de la réponse xml du service alti.\n * (contient une valeur d'altitude, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'altitude\n * @param {Object} elevationObject - objet dans lequel stocker l'altitude retournée : elevation ou measure\n * @static\n * @memberof AltiResponseReader\n */\n z : function (node, elevationObject) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n if (elevationObject) {\n elevationObject.z = parseFloat(textNode.nodeValue);\n } else {\n elevationObject = new Elevation();\n elevationObject.z = parseFloat(textNode.nodeValue);\n return elevationObject;\n }\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : altitude attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"acc\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} elevationObject - objet dans lequel stocker la précision retournée : elevation ou measure\n * @static\n * @memberof AltiResponseReader\n */\n acc : function (node, elevationObject) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n elevationObject.acc = parseFloat(textNode.nodeValue);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : précision (acc) attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"source_name\" de la réponse xml du service alti.\n * (contient le nom de la source, qui est un string)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} measure - objet dans lequel stocker le nom de la source retourné\n * @static\n * @memberof AltiResponseReader\n */\n source_name : function (node, measure) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n measure.source_name = textNode.nodeValue;\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : source_name attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"source_measure\" de la réponse xml du service alti.\n * (contient le nom de la mesure, qui est un string)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} measure - objet dans lequel stocker le nom de la source retourné\n * @static\n * @memberof AltiResponseReader\n */\n source_measure : function (node, measure) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n measure.source_measure = textNode.nodeValue;\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : source_measure attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"measures\" et de ses enfants \"measure\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} elevation - objet dans lequel stocker la précision retournée\n * @static\n * @memberof AltiResponseReader\n */\n measures : function (node, elevation) {\n elevation.measures = [];\n var measure;\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var measureNode;\n var measureChildren;\n for (var i = 0; i < children.length; i++) {\n measure = new Measure();\n measureNode = children[i];\n measureChildren = measureNode.childNodes;\n for (var j = 0; j < measureChildren.length; j++) {\n if (AltiResponseReader.READERS[measureChildren[j].nodeName]) {\n // INFO : on passe en paramètre l'objet en entrée elevation, vide, à remplir.\n AltiResponseReader.READERS[measureChildren[j].nodeName](measureChildren[j], measure);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : measures attendues mais absentes\");\n }\n }\n elevation.measures.push(measure);\n }\n }\n },\n\n /**\n * Lecture d'un noeud \"ExceptionReport\" de la réponse xml du service alti.\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'exception\n * @return {Object} exceptionReport - objet contenant l'exception\n * @static\n * @memberof AltiResponseReader\n */\n exceptionreport : function (node) {\n var response = {};\n\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (child.nodeName === \"Exception\") {\n response.exceptionReport = AltiResponseReader.READERS.exception(child);\n }\n }\n }\n\n return response;\n },\n\n /**\n * Lecture d'un noeud \"Exception\" de la réponse xml du service alti.\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'exception\n * @return {Object} exceptionReport - objet contenant l'exception, avec deux attributs :\n * {String} exceptionReport.exceptionCode - qui contient l'identifiant du code de l'exception\n * {String} exceptionReport.exception - qui contient le message de l'exception\n * @static\n * @memberof AltiResponseReader\n */\n exception : function (node) {\n var exceptionReport = {};\n\n // get exception code\n var exceptionCode = node.getAttribute(\"exceptionCode\");\n if (exceptionCode) {\n exceptionReport.exceptionCode = exceptionCode;\n }\n\n // get exception message\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n exceptionReport.exception = textNode.nodeValue;\n }\n\n return exceptionReport;\n },\n\n /**\n * Lecture d'un noeud \"Error\" de la réponse xml du service alti.\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'exception\n * @return {Object} error - objet contenant l'exception\n * @static\n */\n error : function (node) {\n var response = {\n error : {}\n };\n // get error code and description\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n var textNode;\n // get error code\n if (child.nodeType === 1 && child.nodeName === \"code\") { // 1 === node.ELEMENT_NODE\n textNode = child.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n response.error.code = textNode.nodeValue;\n }\n }\n // get error description\n if (child.nodeType === 1 && child.nodeName === \"description\") { // 1 === node.ELEMENT_NODE\n textNode = child.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n response.error.description = textNode.nodeValue;\n }\n }\n }\n }\n return response;\n }\n\n};\n\n/**\n * Méthode permettant de lancer la lecture d'une réponse XML du service altimétrique,\n * à l'aide des readers de la classe.\n *\n * @method AltiResponseReader.read\n * @param {DOMElement} root - racine de la réponse XML à lire\n * @static\n * @memberof AltiResponseReader\n */\nAltiResponseReader.read = function (root) {\n if (root.nodeName === \"elevations\") {\n var altiResponse = AltiResponseReader.READERS.elevations(root);\n return altiResponse;\n } else if (root.nodeName === \"ExceptionReport\") {\n var exceptionReport = AltiResponseReader.READERS.exceptionreport(root);\n return exceptionReport;\n } else if (root.nodeName === \"error\") {\n var error = AltiResponseReader.READERS.error(root);\n return error;\n } else {\n throw new Error(\"Erreur lors de la lecture de la réponse : elle n'est pas au format attendu.\");\n }\n};\n\nexport default AltiResponseReader;\n","/**\n * Factory pour générer une reponse JSON à partir d'un XML ou d'un JSON\n * (Factory)\n *\n * @module AltiResponseFactory\n * @private\n * @alias Gp.Services.Alti.Response.AltiResponseFactory\n */\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport XML from \"../../../Formats/XML\";\nimport AltiResponseReader from \"../Formats/AltiResponseReader\";\nimport AltiResponse from \"./model/AltiResponse\";\nimport Elevation from \"./model/Elevation\";\n\nvar AltiResponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Alti\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"AltiResponseFactory\");\n logger.trace([\"AltiResponseFactory::build()\"]);\n\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n switch (options.outputFormat) {\n case \"xml\":\n logger.trace(\"analyze response : xml\");\n\n try {\n var p = new XML({\n reader : AltiResponseReader\n });\n\n if (typeof options.response === \"string\") {\n p.setXMLString(options.response);\n } else {\n p.setXMLDoc(options.response);\n }\n\n data = p.parse();\n\n if (!data) {\n throw new Error(MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION_2\"));\n }\n } catch (e) {\n var message = e.message;\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", message),\n status : 200,\n type : ErrorService.TYPE_SRVERR\n }));\n return;\n }\n\n break;\n\n case \"json\":\n logger.trace(\"analyze response : json\");\n logger.trace(\"analyze response : \", typeof options.response);\n\n var JSONResponse = null;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // le service renvoie t il une erreur ?\n if (JSONResponse && JSONResponse.error) {\n // ex. {\"error\": {\"code\": \"BAD_PARAMETER\",\"description\": \"The values () cannot be parsed as a valid longitude (double value such as -180 < lat < 180).\"}}\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", JSONResponse.error.description),\n status : 200,\n type : ErrorService.TYPE_SRVERR\n }));\n return;\n }\n\n // analyse de la reponse\n if (JSONResponse) {\n var elevations = JSONResponse.elevations;\n var altiResponse = new AltiResponse();\n var elevation;\n if (Array.isArray(elevations) && elevations.length) {\n for (var i = 0; i < elevations.length; i++) {\n elevation = new Elevation();\n\n if (typeof elevations[i] === \"object\") {\n // elevations[i] est un objet elevation\n if (elevations[i].lon) {\n elevation.lon = elevations[i].lon;\n }\n if (elevations[i].lat) {\n elevation.lat = elevations[i].lat;\n }\n if (elevations[i].z) {\n elevation.z = elevations[i].z;\n }\n if (elevations[i].acc) {\n elevation.acc = elevations[i].acc;\n }\n if (elevations[i].measures) {\n elevation.measures = elevations[i].measures;\n }\n } else if (typeof elevations[i] === \"number\") {\n // elevations[i] est un nombre, dans le cas de zonly=true notamment\n elevation.z = elevations[i];\n }\n\n if (Array.isArray(altiResponse.elevations)) {\n altiResponse.elevations.push(elevation);\n }\n }\n }\n data = altiResponse;\n }\n\n if (!data) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE_2\"),\n type : ErrorService.TYPE_UNKERR,\n status : -1\n }));\n return;\n }\n break;\n\n default:\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_FORMAT_2\"),\n type : ErrorService.TYPE_UNKERR,\n status : -1\n }));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type : ErrorService.TYPE_SRVERR,\n status : 200\n }));\n return;\n } else if (data.error) {\n var errorMess = data.error.description;\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", errorMess),\n type : ErrorService.TYPE_SRVERR,\n status : 200\n }));\n return;\n }\n }\n } else {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default AltiResponseFactory;\n","\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport AltiRequestFactory from \"./Request/AltiRequestFactory\";\nimport AltiResponseFactory from \"./Response/AltiResponseFactory\";\n\n/**\n * @classdesc\n *\n * Appel du service d'altimétrie du Géoportail\n *\n * @todo gestion du parma. output et callback\n * @todo outputFormat (REST) et format (WPS)\n * @todo La reponse JSON peut encapsuler un XML !\n *\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.Alti\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {Array.} options.positions - Tableau ({lon:float,lat:float}) contenant les coordonnées des points (CRS:84)\n * dont on veut connaître les altitudes (ou à partir desquelles on va calculer le profil).\n * Chaque élément du tableau est un objet JavaScript avec deux attributs : lon et lat, qui sont des flottants.\n * Minimum 2 éléments si on souhaite calculer un profil altimétrique (ElevationLine).\n * Maximum 50 éléments.\n *\n * @param {String} options.outputFormat - Le format de la réponse du service alti : 'xml' ou 'json'.\n * Ce paramètre déterminera l'extension '.xml' ou '.json' du service dans le cas de l'API REST,\n * ou la valeur du paramètre 'format' dans le cas de la norme WPS.\n * Nécessaire si serverUrl est renseigné, et qu'on souhaite passer par l'API REST,\n * pour connaître le format dans lequel sera fournie la réponse (pour son traitement).\n * Non nécessaire pour la norme WPS. Par défaut, ce paramètre vaut 'json'.\n *\n * @param {Number} [options.sampling] - Nombre de points à utiliser pour déterminer le tracé d'un profil altimétrique, compris entre 2 et 5000.\n * A spécifier lorsqu'on souhaite accéder à cette fonctionnalité.\n * Dans ce cas, les points fournis en entrée (au minimum de deux) servent à déterminer l'axe planimétrique\n * le long duquel le profil doit être calculé.\n * Si le paramètre sampling n'est pas spécifié ou moins de deux points sont fournis,\n * c'est le service Elevation qui sera interrogé (altitudes simples calculées pour les points fournis).\n * Une valeur de sampling strictement inférieure à 2 déclenchera un échantillonnage avec la valeur par défaut du service (3 points).\n *\n * @param {String} [options.api] - Manière d'accéder au service : 'REST' (via l'API REST) ou 'WPS' (via la norme WPS).\n * Par défaut, on utilise l'API REST.\n *\n * @param {Boolean} [options.zonly] - Permet de ne récupérer que les altitudes en sortie s'il vaut 'true'.\n * Vaut 'false' par défaut.\n *\n * @param {String} [options.resource] - Resource utilisée pour réaliser le calcul.\n *\n * @example\n * var options = {\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * positions : [{lon:, lat:}, {lon:, lat:}],\n * outputFormat : 'json' // json|xml\n * sampling : 3,\n * api : 'REST', // REST|WPS\n * zonly : false // false|true,\n * resource : \"resource-par-defaut\"\n * };\n *\n */\nfunction Alti (options) {\n if (!(this instanceof Alti)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"Alti\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"Alti\";\n\n // appel du constructeur par heritage\n CommonService.apply(this, arguments);\n\n this.logger = Logger.getLogger(\"Gp.Services.Alti\");\n this.logger.trace(\"[Constructeur Alti (options)]\");\n\n // #####################\n // analyse des options\n // #####################\n\n if (!options.positions) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"positions\"));\n }\n\n if (options.positions.length === 0) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"positions\"));\n }\n\n // ajout des options spécifiques au service\n this.options.positions = options.positions;\n\n // format de réponse du service : \"json\" ou \"xml\" (valeur par défaut), en minuscule !\n this.options.outputFormat = (typeof options.outputFormat === \"string\") ? options.outputFormat.toLowerCase() : \"xml\";\n\n // ressource utilisée pour le calcul altimétrique\n this.options.resource = options.resource || \"ign_rge_alti_wld\";\n\n // sampling\n this.options.sampling = options.sampling || null;\n\n // type d'api utilisé pour requeter le service, en majuscule !\n this.options.api = (typeof options.api === \"string\") ? options.api.toUpperCase() : \"REST\";\n\n // l'api ne peut être interrogée qu'en GET.\n if (this.options.api === \"REST\") {\n this.options.httpMethod = \"GET\";\n }\n\n // param. zonly\n this.options.zonly = options.zonly || false;\n\n // param. measures\n this.options.measures = options.measures || false;\n\n // gestion de l'url du service par defaut\n // si l'url n'est pas renseignée, il faut utiliser les urls par defaut\n // en fonction du type d'api, REST ou WPS, du format de reponse demandé (outputFormat)\n // ainsi que sur le type de service (profil ou elevation)\n if (!this.options.serverUrl) {\n var lstUrlByDefault = DefaultUrlService.Alti.newUrl();\n var urlFound = null;\n switch (this.options.api) {\n case \"WPS\":\n urlFound = lstUrlByDefault.wps;\n break;\n case \"REST\":\n var key = (options.sampling ? \"profil\" : \"elevation\") + \"-\" + this.options.outputFormat;\n urlFound = lstUrlByDefault[key];\n break;\n default:\n throw new Error(_.getMessage(\"PARAM_UNKNOWN\", \"api\"));\n }\n\n if (!urlFound) {\n throw new Error(\"Url by default not found !\");\n }\n this.options.serverUrl = urlFound;\n this.logger.trace(\"Server URL by default : \" + this.options.serverUrl);\n }\n\n // gestion du type de service\n // si l'extension de l'url est .json ou .xml, on surcharge le format de sortie (outputFormat)\n var idx = this.options.serverUrl.lastIndexOf(\".\");\n if (idx !== -1) {\n var extension = this.options.serverUrl.substring(idx + 1);\n if (extension && extension.length < 5) { // FIXME extension de moins de 4 car. ...\n this.logger.trace(\"Server Extension URL : \" + extension);\n switch (extension.toLowerCase()) {\n case \"json\":\n case \"xml\":\n this.options.outputFormat = extension.toLowerCase();\n break;\n default:\n throw new Error(\"type of service : unknown or unsupported (json or xml) !\");\n }\n }\n }\n}\n\n/**\n * @lends module:Alti#\n */\nAlti.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/**\n * Constructeur (alias)\n */\nAlti.prototype.constructor = Alti;\n\n/**\n * Création de la requête (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nAlti.prototype.buildRequest = function (error, success) {\n // utilisation en mode callback\n var options = {\n httpMethod : this.options.httpMethod,\n // callback\n onSuccess : function (result) {\n // sauvegarde de la requete !\n this.request = result;\n success.call(this, this.request);\n },\n onError : error,\n scope : this,\n // spécifique au service :\n resource : this.options.resource,\n positions : this.options.positions,\n outputFormat : this.options.outputFormat,\n sampling : this.options.sampling,\n api : this.options.api,\n zonly : this.options.zonly,\n measures : this.options.measures\n };\n\n AltiRequestFactory.build(options);\n};\n\n/**\n * Analyse de la reponse (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nAlti.prototype.analyzeResponse = function (error, success) {\n // INFO\n // Factory pour masquer la complexité du retour du service qui renvoie soit\n // - une 'string' qui contient du XML ou JSON natif en mode XHR\n // - un objet JSON qui est natif ou encapsulé\n\n if (this.response) {\n var options = {\n response : this.response,\n outputFormat : this.options.outputFormat, // utile pour parser la string en mode XHR : JSON ou XML !\n rawResponse : this.options.rawResponse,\n onError : error,\n onSuccess : success,\n scope : this\n };\n\n AltiResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default Alti;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes du service de calcul d'itineraire (REST).\n * Permet le mapping avec les options du service.\n * @constructor\n * @alias Gp.Services.Route.Request.RouteParamREST\n * @param {Object} options - options\n *\n * @private\n */\nfunction GeocodeParamREST (options) {\n if (!(this instanceof GeocodeParamREST)) {\n throw new TypeError(\"GeocodeParamREST constructor cannot be called as a function.\");\n }\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur GeocodeParamREST ()]\");\n\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n // methode de geocodage\n if (!this.options.geocodeMethod || (this.options.geocodeMethod !== \"search\" && this.options.geocodeMethod !== \"reverse\")) {\n throw new Error(\"Error geocodeMethod not valid\");\n }\n this.geocodeMethod = this.options.geocodeMethod;\n\n // mapping des options avec l'API REST\n this.query = (typeof this.options !== \"undefined\") ? this.options.query : null;\n\n this.searchGeometry = this.options.searchGeometry || null;\n\n this.index = this.options.index || null;\n\n this.lon = this.options.position && this.options.position.lon ? this.options.position.lon : null;\n\n this.lat = this.options.position && this.options.position.lat ? this.options.position.lat : null;\n\n this.maxResp = this.options.maxResp || null;\n\n this.returnTrueGeometry = this.options.returnTrueGeometry || null;\n\n this.filters = this.options.filters || {};\n}\n\n/**\n * CLASSNAME\n */\nGeocodeParamREST.CLASSNAME = \"GeocodeParamREST\";\n\nGeocodeParamREST.prototype = {\n\n /**\n * @lends module:GeocodeParamREST#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor : GeocodeParamREST,\n\n /**\n * Retourne les filtres\n * @returns {String} les filtres\n */\n getFilters : function () {\n var filters = {};\n for (var prop in this.filters) {\n if (this.filters.hasOwnProperty(prop)) {\n filters[prop] = this.filters[prop];\n }\n }\n return filters;\n },\n\n /**\n * Retourne l'index\n * @returns {String} l'index\n */\n getIndex : function () {\n if (this.index === undefined) {\n return null;\n }\n if (this.index === \"StreetAddress\") {\n return \"address\";\n } else if (this.index === \"CadastralParcel\") {\n return \"parcel\";\n } else if (this.index === \"PositionOfInterest\") {\n return \"poi\";\n } else if (this.index === \"location\") {\n return \"location\";\n }\n return this.index;\n },\n\n /**\n * Retourne la géométrie de recherche\n * @returns {String} la géométrie de recherche au format json\n */\n getSearchGeometry : function () {\n return JSON.stringify(this.searchGeometry);\n }\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Array} liste de paramêtres\n */\nGeocodeParamREST.prototype.getParams = function () {\n var map = [];\n\n if (this.geocodeMethod === \"search\") {\n map.push({\n k : \"q\",\n v : this.query\n });\n }\n\n if (this.index) {\n map.push({\n k : \"index\",\n v : this.getIndex()\n });\n }\n\n if (this.geocodeMethod === \"reverse\" && this.searchGeometry) {\n map.push({\n k : \"searchgeom\",\n v : this.getSearchGeometry()\n });\n }\n\n if (this.lon && this.lat) {\n map.push({\n k : \"lon\",\n v : this.lon\n });\n map.push({\n k : \"lat\",\n v : this.lat\n });\n }\n\n if (this.maxResp) {\n map.push({\n k : \"limit\",\n v : this.maxResp\n });\n }\n\n if (this.returnTrueGeometry) {\n map.push({\n k : \"returntruegeometry\",\n v : this.returnTrueGeometry\n });\n }\n\n const filters = this.getFilters();\n for (var key in filters) {\n map.push({\n k : key,\n v : filters[key]\n });\n }\n\n return map;\n};\n\nexport default GeocodeParamREST;\n","\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport GeocodeParamREST from \"./model/GeocodeParamREST\";\n\n/**\n * @classdesc\n * Classe de gestion des requêtes de type REST sur le service de calcul d'itineraire\n * (uniquement en GET)\n *\n * @constructor\n * @alias Gp.Services.Geocode.Request.GeocodeRequestREST\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * var options = {\n * (...)\n * };\n *\n * @private\n */\nfunction GeocodeRequestREST (options) {\n this.logger = Logger.getLogger(\"GeocodeRequestREST\");\n this.logger.trace(\"[Constructeur GeocodeRequestREST ()]\");\n\n if (!(this instanceof GeocodeRequestREST)) {\n throw new TypeError(\"GeocodeRequestREST constructor cannot be called as a function.\");\n }\n\n // existance des options\n if (!options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n /** liste des options */\n this.settings = options;\n}\n\nGeocodeRequestREST.prototype = {\n\n /**\n * @lends module:GeocodeRequestREST#\n */\n\n /**\n * request\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : GeocodeRequestREST,\n\n /**\n * Construction de la requête.\n *\n * @returns {String} request\n */\n processRequestString : function () {\n var request = \"\";\n\n // Mapping des options avec le service de l'API REST\n const oParams = new GeocodeParamREST(this.settings);\n\n const params = oParams.getParams();\n for (var i = 0; i < params.length; i++) {\n var o = params[i];\n if (request) {\n request += \"&\";\n }\n request += o.k + \"=\" + o.v;\n }\n\n if (!this.settings.geocodeMethod || (this.settings.geocodeMethod !== \"search\" && this.settings.geocodeMethod !== \"reverse\")) {\n throw new Error(\"Error geocodeMethod not valid\");\n }\n\n this.requestString = \"?\" + request;\n this.logger.trace(this.requestString);\n\n return this.requestString;\n }\n};\n\nexport default GeocodeRequestREST;\n","import Logger from \"../../../Utils/LoggerByDefault\";\nimport GeocodeRequestREST from \"./GeocodeRequestREST\";\n\n/**\n * Creation d'une requête\n * (Factory)\n *\n * @module GeocodeRequestFactory\n * @alias Gp.Services.Geocode.Request.GeocodeRequestFactory\n * @private\n */\nvar GeocodeRequestFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Geocode\n *\n * @example\n * var options = {\n * // options specifiques du service\n * geocodeMethod:\n * query:\n * filters:\n * maximumResponses:\n * };\n * var result = GeocodeRequestFactory.build(options);\n * if (!result) {\n * // error...\n * }\n * @returns {String} request\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"GeocodeRequestFactory\");\n logger.trace([\"GeocodeRequestFactory::build()\"]);\n\n var settings = options || {};\n\n var myReq = new GeocodeRequestREST(settings);\n if (!myReq.processRequestString()) {\n throw new Error(\"Error process request (rest) !\");\n }\n var request = myReq.requestString;\n\n logger.trace(request);\n\n return request;\n }\n};\n\nexport default GeocodeRequestFactory;\n","\n/**\n * Response object for {@link module:Services~geocode Gp.Services.geocode ()} or {@link module:Services~reverseGeocode Gp.Services.reverseGeocode ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Array.} locations - locations array.\n *\n * @namespace\n * @alias Gp.Services.GeocodeResponse\n */\nfunction GeocodeResponse () {\n if (!(this instanceof GeocodeResponse)) {\n throw new TypeError(\"GeocodeResponse constructor cannot be called as a function.\");\n }\n\n this.locations = [];\n}\n\nGeocodeResponse.prototype = {\n\n constructor : GeocodeResponse\n\n};\n\nexport default GeocodeResponse;\n","\n/**\n * Single location object returned by the underlying geocoding web service.\n *\n * @property {Gp.Point} position - Position of the location given in the requested coordinates system.\n * @property {String} type - location type \"StreetAddress\" (for an address), \"PositionOfInterest\" (for a place name) or \"CadastralParcel\" (for cadastral parcel).\n * @property {String} matchType - how geocoding is performed : \"street number\" (exact address), \"street enhanced\" (street number calculated by interpolation), \"street\" (only the street), \"city\" (only the city).\n * @property {Float} accuracy - Accuracy of the response towards the requested location between 0 (unaccurate) and 1 (exact match).\n * @property {Object} placeAttributes - Associative array matching the following attributes with their values given by the underlying web service :\n *\n * *Common attributes : *\n *\n * - **trueGeometry** - the 'real life' geometry if different from 'Point' type.\n *\n * *if type === \"StreetAddress\" :*\n *\n * - **number** - Street number.\n * - **postalCode** - PostCode\n * - **street** - Street name\n * - **city** - City\n * - **houseNumberInfos** - additional street number information\n * - **inseeCode** - INSEE Code\n *\n *\n * *if type === \"PositionOfInterest\" :*\n *\n * - **type** - Place name type\n * - **postalCode** - PostCode\n * - **toponyme** - Toponyme\n * - **extraFields** - additional place name properties\n * - **inseeCode** - INSEE Code\n *\n *\n * *si type = \"CadastralParcel\" :*\n *\n * - **codeCommuneAbs** - when a parcel comes from a city that was absorbed by another, code of that old city. \"000\" otherwise.\n * - **codeArrondissement** - arrondissement\n * - **identifiant** - cadastral parcel code\n * - **feuille** - Parcel Sheet (eg. \"1\").\n * - **numero** - Parcel Number (eg. \"0041\")\n * - **section** - Parcel Section (eg. \"0D\").\n * - **nomCommune** - Parcel municipality name.\n * - **codeCommune** - Parcel municipality.\n * - **codeDepartement** - Parcel Department.\n *\n * @namespace\n * @alias Gp.Services.Geocode.GeocodedLocation\n */\nfunction GeocodedLocation () {\n if (!(this instanceof GeocodedLocation)) {\n throw new TypeError(\"GeocodedLocation constructor cannot be called as a function.\");\n }\n\n this.position = null;\n\n this.matchType = null;\n\n this.placeAttributes = {};\n\n this.type = null;\n\n this.accuracy = null;\n\n /**\n * Nom de la classe : \"GeocodedLocation\"\n * @type {String}\n */\n this.CLASSNAME = \"GeocodedLocation\";\n}\n\nGeocodedLocation.prototype = {\n\n constructor : GeocodedLocation\n\n};\n\nexport default GeocodedLocation;\n","// import Logger from \"../../../Utils/LoggerByDefault\";\nimport MR from \"../../../Utils/MessagesResources\";\nimport ErrSrv from \"../../../Exceptions/ErrorService\";\nimport GeocodeResponse from \"../Response/model/GeocodeResponse\";\nimport GeocodedLocation from \"../Response/model/GeocodedLocation\";\n\n/**\n * Fonction retournant un objet contenant des clés de lecture (readers)\n * qui permettent de parser des réponses XML du service de géocodage direct du Géoportail\n * afin de récupérer les résultats retournés.\n * @module GeocodeResponseParser\n * @alias Gp.Services.Geocode.Formats.GeocodeResponseParser\n * @private\n */\n\n/**\n * @classdesc\n *\n * Classe permettant de parser une réponse GeoJSON\n *\n * @constructor\n * @alias Gp.Formats.GeocodeResponseParser\n *\n * @private\n */\nfunction GeocodeResponseParser () {\n if (!(this instanceof GeocodeResponseParser)) {\n throw new TypeError(\"GeocodeResponseParser constructor cannot be called as a function.\");\n }\n}\n\nGeocodeResponseParser.prototype = {\n\n /**\n * @lends module:GeocodeResponseParser\n */\n\n /*\n * Constructeur (alias)\n */\n constructor : GeocodeResponseParser,\n\n /**\n * Méthode permettant de lancer la lecture d'une réponse GeoJSON,\n *\n * @param {String} json - réponse au format GeoJSON\n * @return {Object} geocodeResponse|exceptionReport : l'objet contenant les informations de la réponse GeoJSON,\n * sous la forme d'un objet GeocodeResponse, ou un objet littéral exceptionReport si le service a renvoyé une exception.\n */\n parse : function (json) {\n var geocodeResponse = new GeocodeResponse();\n\n const obj = JSON.parse(json);\n\n if (obj.type === \"FeatureCollection\") {\n for (var i = 0; i < obj.features.length; ++i) {\n _parseFeature(obj.features[i], geocodeResponse);\n }\n } else if (obj.type === \"Feature\") {\n _parseFeature(obj, geocodeResponse);\n } else if (obj.type === \"SERVICE_ERROR\") {\n return _parseError(obj);\n } else {\n var mess = MR.getMessage(\"SERVICE_RESPONSE_ANALYSE\", obj.type);\n throw new ErrSrv({\n message : mess,\n type : ErrSrv.TYPE_UNKERR,\n status : 200\n });\n }\n\n return geocodeResponse;\n }\n};\n\n/**\n * Méthode permettant de parser un feature\n *\n * @private\n *\n * @param {Object} feature\n * @param {Object} geocodeResponse\n *\n * @memberof GeocodeResponseParser\n * @return {Object} objet GeocodedLocation\n */\nfunction _parseFeature (feature, geocodeResponse) {\n var location = new GeocodedLocation();\n if (feature.geometry && feature.geometry.type === \"Point\") {\n location.position = {\n lon : feature.geometry.coordinates[0],\n lat : feature.geometry.coordinates[1]\n };\n }\n if (feature.properties) {\n for (var prop in feature.properties) {\n if (prop === \"score\") {\n location.accuracy = feature.properties[prop];\n } else if (prop === \"_type\") {\n if (feature.properties[prop] === \"address\") {\n location.type = \"StreetAddress\";\n } else if (feature.properties[prop] === \"poi\") {\n location.type = \"PositionOfInterest\";\n } else if (feature.properties[prop] === \"parcel\" || feature.properties[prop] === \"cadastral\") {\n location.type = \"CadastralParcel\";\n }\n } else {\n location.placeAttributes[prop] = feature.properties[prop];\n }\n }\n if (feature.properties._type === \"address\") {\n location.matchType = feature.properties.number !== undefined && feature.properties.number !== null ? \"street number\" : \"street\";\n }\n }\n geocodeResponse.locations.push(location);\n}\n\n/**\n * Méthode permettant de parser une erreur\n *\n * @private\n *\n * @param {Object} error\n *\n * @memberof GeocodeResponseParser\n * @return {Object}\n */\nfunction _parseError (error) {\n return {\n exceptionReport : error\n };\n}\n\nexport default GeocodeResponseParser;\n","/**\n * Factory pour générer une reponse JSON à partir d'un XML\n * (Factory)\n *\n * @module GeocodeResponseFactory\n * @alias Gp.Services.Geocode.Response.GeocodeResponseFactory\n * @private\n */\n// import Logger from \"../../../Utils/LoggerByDefault\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport GeocodeResponseParser from \"../Formats/GeocodeResponseParser\";\n\nvar GeocodeReponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Geocode\n *\n * @example\n * var options = {\n * response :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // data de type GeocodeResponse\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n data = options.response;\n } else {\n try {\n const parser = new GeocodeResponseParser();\n data = parser.parse(options.response);\n\n if (!data) {\n throw new Error(\"L'analyse de la réponse du service !?\");\n }\n } catch (e) {\n var message = e.message;\n if (typeof options.response === \"string\") {\n message += \"('\" + options.response + \"')\";\n } else {\n message += \"('\" + options.response.documentElement.innerHTML + \"')\";\n }\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE\", message),\n type : ErrorService.TYPE_UNKERR,\n status : -1\n }));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type : ErrorService.TYPE_SRVERR,\n status : 200 // FIXME : 200 ?\n }));\n return;\n }\n }\n } else {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\"),\n type : ErrorService.TYPE_SRVERR,\n status : -1 // FIXME : status response\n }));\n return;\n }\n\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default GeocodeReponseFactory;\n","import Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport GeocodeRequestFactory from \"./Request/GeocodeRequestFactory\";\nimport GeocodeResponseFactory from \"./Response/GeocodeResponseFactory\";\n\n/**\n * @classdesc\n * Appel du service de géocodage direct du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n *\n *\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.Geocode\n *\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String|Object} options.query - Nom de l'adresse, du toponyme, de l'unité administrative ou de la parcelle cadastrale recherchée.\n *\n * @param {Object} [options.filters] - Les propriétés possibles de cet objet sont décrites ci-après.\n * @param {String} [options.filters.[prop]] - Critère supplémentaire pour filtrer la recherche sous la forme\n * d'un couple clé/valeur à définir selon les possibilités du serveur ajouté à la requête.\n * Le service de géocodage du Géoportail permet de filtrer les adresses postales avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"city\".\n * Il permet également de filtrer les toponymes avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"type\".\n * Enfin, il permet de filtrer les parcelles cadastrales avec les propriétés :\n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n *\n * @param {String} [options.index = \"StreetAddress\"] - Type de l'objet recherché.\n * Le service de géocodage du Géoportail permet de rechercher des 'PositionOfInterest' pour des toponymes, des 'StreetAddress'\n * pour des adresses postales ou des 'CadastralParcel' pour des parcelles cadastrales.\n * L'index 'location' regroupe les indexes 'StreetAddress' et 'PositionOfInterest'.\n * D'autres types pourront être rajoutés selon l'évolution du service.\n * Par défaut, index = 'StreetAddress'.\n *\n * @param {Object} options.position - Position du point de référence pour le calcul de proximité exprimée dans le système de référence spécifié par le srs.\n * @param {Float} options.position.lon - Longitude du point de référence pour le calcul de proximité.\n * @param {Float} options.position.lat - Latitude du point de référence pour le calcul de proximité.\n *\n * @param {Number} [options.maximumResponses] - Nombre de réponses maximal que l'on souhaite recevoir.\n * Pas de valeur par défaut.\n * Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 20.\n *\n * @param {Boolean} [options.returnTrueGeometry = false] - Booléen indiquant si l'on souhaite récupérer la géométrie vraie des objects géolocalisés.\n * false par défaut.\n *\n *\n * @example\n * var options = {\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * proxyURL : null,\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * position : {lon:, lat:},\n * index : 'StreetAddress',\n * query : '10 rue du pont Machin-ville'\n * (...)\n * };\n */\nfunction Geocode (options_) {\n if (!(this instanceof Geocode)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"Geocode\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"Geocode\";\n\n this.logger = Logger.getLogger(\"Gp.Services.Geocode\");\n this.logger.trace(\"[Constructeur Geocode (options)]\");\n\n var options = this.patchOptionConvertor(options_);\n if (!options.serverUrl) {\n options.serverUrl = DefaultUrlService.Geocode.newUrl();\n }\n\n // appel du constructeur par heritage\n CommonService.apply(this, [options]);\n\n if (!options.hasOwnProperty(\"query\")) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"query\"));\n }\n\n // ajout des options spécifiques au service\n this.options.query = options.query;\n\n // on definit l'index par defaut\n if (!options.index) {\n this.options.index = options.index = \"StreetAddress\";\n }\n\n if (options.filters) {\n var filter = Object.keys(options.filters);\n for (var i = 0; i < filter.length; i++) {\n var key = filter[i];\n // on supprime les filtres vides\n if (typeof options.filters[key] === \"undefined\" ||\n (typeof options.filters[key] === \"object\" && Object.keys(options.filters[key]).length === 0) ||\n (typeof options.filters[key] === \"string\" && options.filters[key].length === 0) ||\n (Array.isArray(options.filters[key]) && options.filters[key].length === 0)\n ) {\n delete this.options.filters[key];\n }\n }\n }\n\n this.options.index = options.index || \"StreetAddress\";\n this.options.maximumResponses = options.maximumResponses || 20;\n}\n\n/**\n * @lends module:Geocode#\n */\nGeocode.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nGeocode.prototype.constructor = Geocode;\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} options_ - options du service\n * @return {Object} - options\n */\nGeocode.prototype.patchOptionConvertor = function (options_) {\n const options = options_;\n\n if (options.hasOwnProperty(\"location\")) {\n this.logger.warn(\"The parameter 'location' is deprecated\");\n\n if (!options.query) {\n options.query = options.location;\n }\n delete options.location;\n }\n\n if (options.filterOptions) {\n this.logger.warn(\"The parameter 'filterOptions' is deprecated\");\n\n if (!options.filters) {\n options.filters = options.filterOptions;\n\n if (options.filters.type) {\n this.logger.warn(\"The parameter 'filterOptions.type' is deprecated\");\n if (!options.index) {\n if (Array.isArray(options.filters.type) && options.filters.type.length > 0) {\n options.index = options.filters.type[0];\n } else {\n options.index = options.filters.type;\n }\n }\n delete options.filters.type;\n }\n\n if (options.filters.bbox) {\n this.logger.warn(\"The parameter 'filterOptions.bbox' is deprecated\");\n delete options.filters.bbox;\n }\n }\n delete options.filterOptions;\n }\n\n if (options.position) {\n if (options.position.x) {\n this.logger.warn(\"The parameter 'position.x' is deprecated\");\n\n if (!options.position.lon) {\n options.position.lon = options.position.x;\n }\n delete options.position.x;\n }\n\n if (options.position.y) {\n this.logger.warn(\"The parameter 'position.y' is deprecated\");\n\n if (!options.position.lat) {\n options.position.lat = options.position.y;\n }\n delete options.position.y;\n }\n }\n\n if (options.returnFreeForm) {\n this.logger.warn(\"The parameter 'returnFreeForm' is deprecated\");\n delete options.returnFreeForm;\n }\n\n if (options.srs) {\n this.logger.warn(\"The parameter 'srs' is deprecated\");\n delete options.srs;\n }\n\n return options;\n};\n\n/**\n * Création de la requête (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nGeocode.prototype.buildRequest = function (error, success) {\n var options = {\n httpMethod : this.options.httpMethod,\n // options specifiques du service\n geocodeMethod : \"search\",\n query : this.options.query,\n index : this.options.index,\n returnTrueGeometry : this.options.returnTrueGeometry,\n position : this.options.position,\n maxResp : this.options.maximumResponses,\n filters : this.options.filters\n };\n\n this.request = GeocodeRequestFactory.build(options);\n\n // on teste si la requete a bien été construite !\n (!this.request)\n ? error.call(this, new ErrorService(_.getMessage(\"SERVICE_REQUEST_BUILD\")))\n : success.call(this, this.request);\n};\n\n/**\n * Analyse de la reponse (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nGeocode.prototype.analyzeResponse = function (error, success) {\n /* INFO :\n Etape 1 : Création de la requête (URL)\n -> stockage de la requête dans this.request\n Etape 2 : Envoi de la requête\n -> appel du protocol XHR, et envoi (par ex send ())\n -> récupération de la réponse JSON dans la fonction onSuccess () (this.response)\n -> si code HTTP 200 et pas de message d'erreur : etape 3\n -> si code HTTP != 200 : lancement de la fonction de callback onFailure avec le message d'erreur\n Etape 3 : Analyse de la réponse JSON (si rawResponse === false )\n -> appel du parser pour récupérer le document\n Etape 4 : Lancement de la fonction de callback onSuccess avec la réponse :\n -> JSON (si rawResponse === true)\n -> ou geocodedLocations\n */\n\n if (this.response) {\n var options = {\n response : this.response,\n rawResponse : this.options.rawResponse,\n onError : error,\n onSuccess : success,\n scope : this\n };\n\n GeocodeResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default Geocode;\n","import Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport GeocodeRequestFactory from \"./Request/GeocodeRequestFactory\";\nimport GeocodeResponseFactory from \"./Response/GeocodeResponseFactory\";\n\n/**\n * @classdesc\n * Appel du service de géocodage inverse du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.ReverseGeocode\n *\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {Object} options.position - Position du point de référence pour le calcul de proximité exprimée dans le système de référence spécifié par le srs.\n * @param {Float} options.position.lon - Longitude du point de référence pour le calcul de proximité.\n * @param {Float} options.position.lat - Latitude du point de référence pour le calcul de proximité.\n *\n * @param {Object} [options.filters] - Les propriétés possibles de cet objet.\n * @param {String} [options.filters.[proprietes du filtre]] - Critère supplémentaire pour filtrer la recherche sous la forme\n * d'un couple clé/valeur à définir selon les possibilités du serveur ajouté à la requête.\n * Le service de géocodage du Géoportail permet de filtrer les adresses postales avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"city\".\n * Il permet également de filtrer les toponymes avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"type\".\n * Enfin, il permet de filtrer les parcelles cadastrales avec les propriétés :\n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n *\n * @param {Object} [options.searchGeometry] - Emprise dans laquelle on souhaite effectuer la recherche.\n * Les propriétés possibles de cet objet sont décrites ci-après.\n * @param {String} options.searchGeometry.type - Type de géometrie (Point|Circle|Linestring|Polygon)\n * @param {Array.|Array.Array.} options.searchGeometry.coordinates - Coordonnées des points constituant la géométrie.\n * @param {Float} options.searchGeometry.radius - Rayon. Paramètre applicable uniquement pour le type 'Circle'.\n *\n * @param {String} [options.index = \"StreetAddress\"] - Type de l'objet recherché.\n * Le service de géocodage du Géoportail permet de rechercher des 'PositionOfInterest' pour des toponymes, des 'StreetAddress'\n * pour des adresses postales ou des 'CadastralParcel' pour des parcelles cadastrales. L'index 'location' permet une recherche\n * multi-indexes en regroupant les indexes 'PositionOfInterest' et 'StreetAddress'.\n * D'autres types pourront être rajoutés selon l'évolution du service.\n * Par défaut, index = 'StreetAddress'.\n *\n * @param {Number} [options.maximumResponses] - Nombre de réponses maximal que l'on souhaite recevoir.\n * Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 20s.\n *\n * @param {Boolean} [options.returnTrueGeometry] - Booléen indiquant si l'on souhaite récupérer la géométrie vraie des objects géolocalisés.\n * false par défaut.\n *\n * @example\n * var options = {\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * proxyURL : null,\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * index : 'StreetAddress',\n * searchGeometry : {\n * type : Circle,\n * coordinates : [48, 2],\n * radius : 100\n * },\n * position : {lon:2 , lat:48.5},\n * maximumResponses : 25,\n * };\n *\n */\nfunction ReverseGeocode (options_) {\n if (!(this instanceof ReverseGeocode)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"ReverseGeocode\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"ReverseGeocode\";\n\n this.logger = Logger.getLogger(\"Gp.Services.ReverseGeocode\");\n this.logger.trace(\"[Constructeur ReverseGeocode (options)]\");\n\n var options = this.patchOptionConvertor(options_);\n if (!options.serverUrl) {\n options.serverUrl = DefaultUrlService.ReverseGeocode.newUrl();\n }\n\n // appel du constructeur par heritage\n CommonService.apply(this, [options]);\n\n if (!options.searchGeometry) {\n if (!options.position) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"searchGeometry\"));\n }\n } else {\n this.options.searchGeometry = options.searchGeometry;\n }\n\n // on definit l'index par defaut\n if (!options.index) {\n this.options.index = options.index = \"StreetAddress\";\n }\n\n if (options.filters) {\n var filter = Object.keys(options.filters);\n for (var i = 0; i < filter.length; i++) {\n var key = filter[i];\n // on supprime les filtres vides\n if (typeof options.filters[key] === \"undefined\" ||\n (typeof options.filters[key] === \"object\" && Object.keys(options.filters[key]).length === 0) ||\n (typeof options.filters[key] === \"string\" && options.filters[key].length === 0) ||\n (Array.isArray(options.filters[key]) && options.filters[key].length === 0)\n ) {\n delete this.options.filters[key];\n }\n }\n }\n\n this.options.position = options.position;\n this.options.index = options.index || \"StreetAddress\";\n this.options.maximumResponses = options.maximumResponses || 20;\n}\n\n/**\n * @lends module:ReverseGeocode#\n */\nReverseGeocode.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nReverseGeocode.prototype.constructor = ReverseGeocode;\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} options_ - options du service\n * @return {Object} - options\n */\nReverseGeocode.prototype.patchOptionConvertor = function (options_) {\n var options = options_;\n\n if (options.filterOptions) {\n this.logger.warn(\"The parameter 'filterOptions' is deprecated\");\n\n if (options.filterOptions.type) {\n this.logger.warn(\"The parameter 'filterOptions.type' is deprecated\");\n if (!options.index) {\n if (Array.isArray(options.filterOptions.type) && options.filterOptions.type.length > 0) {\n options.index = options.filterOptions.type[0];\n } else {\n options.index = options.filterOptions.type;\n }\n }\n delete options.filterOptions.type;\n }\n\n if (options.filterOptions.bbox) {\n this.logger.warn(\"The parameter 'filterOptions.bbox' is deprecated\");\n if (!options.searchGeometry) {\n // convertir la geometrie\n options.searchGeometry = this.bbox2Json(options.filterOptions.bbox);\n }\n delete options.filterOptions.bbox;\n }\n\n if (options.filterOptions.circle) {\n this.logger.warn(\"The parameter 'filterOptions.circle' is deprecated\");\n if (!options.searchGeometry) {\n // convertir la geometrie\n options.searchGeometry = this.circle2Json(options.filterOptions.circle);\n }\n delete options.filterOptions.circle;\n }\n\n if (options.filterOptions.polygon) {\n this.logger.warn(\"The parameter 'filterOptions.polygon' is deprecated\");\n if (!options.searchGeometry) {\n // convertir la geometrie\n options.searchGeometry = this.polygon2Json(options.filterOptions.polygon);\n }\n delete options.filterOptions.polygon;\n }\n\n if (!options.filters && Object.keys(options.filterOptions).length > 0) {\n options.filters = options.filterOptions;\n }\n\n delete options.filterOptions;\n }\n\n if (options.position) {\n if (options.position.x) {\n this.logger.warn(\"The parameter 'position.x' is deprecated\");\n\n if (!options.position.lon) {\n options.position.lon = options.position.x;\n }\n delete options.position.x;\n }\n\n if (options.position.y) {\n this.logger.warn(\"The parameter 'position.y' is deprecated\");\n\n if (!options.position.lat) {\n options.position.lat = options.position.y;\n }\n delete options.position.y;\n }\n }\n\n if (options.srs) {\n this.logger.warn(\"The parameter 'srs' is deprecated\");\n delete options.srs;\n }\n\n return options;\n};\n\n/**\n * (overwrite)\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nReverseGeocode.prototype.buildRequest = function (error, success) {\n var options = {\n httpMethod : this.options.httpMethod,\n // options specifiques du service\n geocodeMethod : \"reverse\",\n searchGeometry : this.options.searchGeometry,\n index : this.options.index,\n position : this.options.position,\n returnTrueGeometry : this.options.returnTrueGeometry,\n maxResp : this.options.maximumResponses,\n filters : this.options.filters\n };\n\n this.request = GeocodeRequestFactory.build(options);\n\n // on teste si la requete a bien été construite !\n (!this.request)\n ? error.call(this, new ErrorService(_.getMessage(\"SERVICE_REQUEST_BUILD\")))\n : success.call(this, this.request);\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nReverseGeocode.prototype.analyzeResponse = function (error, success) {\n if (this.response) {\n var options = {\n response : this.response,\n rawResponse : this.options.rawResponse,\n onError : error,\n onSuccess : success,\n scope : this\n };\n\n GeocodeResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Array} bbox - bbox\n * @return {Object} - geometrie au format json\n */\nReverseGeocode.prototype.bbox2Json = function (bbox) {\n return {\n type : \"Polygon\",\n coordinates : [[\n [bbox.left, bbox.top],\n [bbox.right, bbox.top],\n [bbox.right, bbox.bottom],\n [bbox.left, bbox.bottom],\n [bbox.left, bbox.top]\n ]]\n };\n};\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} circle - circle\n * @return {Object} - geometrie au format json\n */\nReverseGeocode.prototype.circle2Json = function (circle) {\n return {\n type : \"Circle\",\n radius : circle.radius,\n coordinates : [circle.x, circle.y]\n };\n};\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Array} polygon - polygon\n * @return {Object} - geometrie au format json\n */\nReverseGeocode.prototype.polygon2Json = function (polygon) {\n var jsonGeom = {\n type : \"Polygon\",\n coordinates : [[]]\n };\n\n for (var i = 0; i < polygon.length; ++i) {\n jsonGeom.coordinates[0].push([polygon[i].x, polygon[i].y]);\n }\n\n return jsonGeom;\n};\n\n/**\n * Codes EPSG géographiques (lat/lon). Utiles car les coordonnées doivent être inversées.\n */\nReverseGeocode.geoEPSG = [\"EPSG:4326\"];\n\nexport default ReverseGeocode;\n","/**\n * Response object for {@link module:Services~autoComplete Gp.Services.autoComplete ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Array.} suggestedLocations - SuggestedLocations array.\n *\n * @namespace\n * @alias Gp.Services.AutoCompleteResponse\n */\nfunction AutoCompleteResponse () {\n if (!(this instanceof AutoCompleteResponse)) {\n throw new TypeError(\"AutoCompleteResponse constructor cannot be called as a function.\");\n }\n\n this.suggestedLocations = [];\n}\n\nAutoCompleteResponse.prototype = {\n\n constructor : AutoCompleteResponse\n\n};\n\nexport default AutoCompleteResponse;\n","\n/**\n * Single SuggestedLocation Object returned by underlying web service.\n * Each suggested location represents a street address (\"StreetAddress\") or a place name (\"PositionOfInterest\").\n *\n * @property {String} type - Suggested location type : \"StreetAddress\" ou \"PositionOfInterest\"\n * @property {Gp.Point} position - Position of the suggested location given in requested coordinates system.\n * @property {String} commune - Suggested municipality\n * @property {String} fullText - Full text representation of the suggested location.\n * @property {String} postalCode - Suggested location postcode\n * @property {Integer} classification - Number used to classify the importance of the place where is the suggested location from 1 (most important) to 7 (less important).\n * @property {String} street - Street name of the suggested location (\"StreetAddress\" only).\n * @property {String} kind - Nature of the suggested location : \"prefecture\", \"monument\", \"commune\", ... for instance (\"PositionOfInterest\" only).\n *\n * @namespace\n * @alias Gp.Services.AutoComplete.SuggestedLocation\n */\nfunction SuggestedLocation () {\n if (!(this instanceof SuggestedLocation)) {\n throw new TypeError(\"SuggestedLocation constructor cannot be called as a function.\");\n }\n\n /* REPONSE :\n {\n \"status\" : \"OK\",\n \"results\" : [\n {\n \"country\":\"PositionOfInterest\",\n \"x\":-1.559185,\n \"y\":47.952603,\n \"city\":\"Brie\",\n \"zipcode\":\"35150\",\n \"street\":\"corbe\",\n \"kind\":\"Lieu-dit habité\",\n \"fulltext\":\"corbe, 35150 Brie\",\n \"classification\":6\n },\n {\n \"country\":\"StreetAddress\",\n \"x\":1.538295,\n \"y\":43.19646,\n \"city\":\"Brie\",\n \"zipcode\":\"09700\",\n \"street\":\"courreste\",\n \"kind\":\"\",\n \"fulltext\":\"courreste, 09700 Brie\",\n \"classification\":7\n }\n ]\n }\n */\n\n /* REPONSE EN ERREUR\n {\n status : \"ERROR\",\n results : [ ]\n }\n */\n\n /**\n * Suggested location type : \"StreetAddress\" ou \"PositionOfInterest\"\n * @type {String}\n */\n this.type = null;\n\n /**\n * Position of the suggested location given in requested coordinates system.\n * @type {Gp.Point}\n */\n this.position = {\n x : null,\n y : null\n };\n\n /**\n * Suggested municipality\n * @type {String}\n */\n this.commune = null;\n\n /**\n * Full text representation of the suggested location.\n * @type {String}\n */\n this.fullText = null;\n\n /**\n * Suggested location postcode\n * @type {Number}\n */\n this.postalCode = null;\n\n /**\n * Number used to classify the importance of the place where is the suggested location from 1 (most important) to 7 (less important).\n * @type {Integer}\n */\n this.classification = null;\n\n /**\n * Street name of the suggested location (\"StreetAddress\" only).\n * @type {String}\n */\n this.street = null;\n\n /**\n * Place name of the suggested location (\"PositionOfInterest\" only).\n * @type {String}\n */\n this.poi = null;\n\n /**\n * Nature of the suggested location : \"prefecture\", \"monument\", \"commune\", ... for instance (\"PositionOfInterest\" only).\n * @type {String}\n */\n this.kind = null;\n}\n\nSuggestedLocation.prototype = {\n\n constructor : SuggestedLocation\n};\n\nexport default SuggestedLocation;\n","/**\n * Factory pour générer une reponse JSON à partir d'un XML ou d'un JSON\n * (Factory)\n *\n * @module AutoCompleteResponseFactory\n * @private\n * @alias Gp.Services.AutoComplete.Response.AutoCompleteResponseFactory\n */\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport AutoCompleteResponse from \"./model/AutoCompleteResponse\";\nimport SuggestedLocation from \"./model/SuggestedLocation\";\n\nvar AutoCompleteResponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Alti\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"AutoCompleteResponseFactory\");\n logger.trace([\"AutoCompleteResponseFactory::build()\"]);\n\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n var JSONResponse = null;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // analyse de la réponse\n if (JSONResponse) {\n // le service renvoie t il une erreur ?\n if (JSONResponse.error) {\n // ex. ?\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", JSONResponse.error.description),\n status : JSONResponse.error.code,\n type : ErrorService.TYPE_SRVERR\n }));\n return;\n }\n\n // création de l'objet réponse\n data = new AutoCompleteResponse();\n\n // boucle sur les résultats de l'autocomplétion\n if (JSONResponse.results && Array.isArray(JSONResponse.results)) {\n var suggestedLocation = null;\n\n for (var i = 0; i < JSONResponse.results.length; i++) {\n var result = JSONResponse.results[i];\n suggestedLocation = new SuggestedLocation();\n\n if (result) {\n if (result.country === \"StreetAddress\") {\n suggestedLocation.street = result.street;\n suggestedLocation.type = \"StreetAddress\";\n } else if (result.country === \"PositionOfInterest\") {\n suggestedLocation.poi = result.street;\n suggestedLocation.type = \"PositionOfInterest\";\n suggestedLocation.poiType = result.poiType;\n }\n\n if (suggestedLocation.position) {\n suggestedLocation.position.x = result.x;\n suggestedLocation.position.y = result.y;\n }\n\n suggestedLocation.kind = result.kind;\n suggestedLocation.commune = result.city;\n suggestedLocation.fullText = result.fulltext;\n suggestedLocation.postalCode = result.zipcode;\n suggestedLocation.classification = result.classification;\n }\n // Ajout du résultat au tableau reverseGeocodedLocations de geocodedLocation\n data.suggestedLocations.push(suggestedLocation);\n }\n } else {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_FORMAT_3\")));\n return;\n }\n\n if (!data.suggestedLocations.length) {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_FORMAT_3\")));\n return;\n }\n }\n\n if (!data) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE_2\"),\n type : ErrorService.TYPE_UNKERR,\n status : -1\n }));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type : ErrorService.TYPE_SRVERR,\n status : 200\n }));\n return;\n }\n }\n } else {\n // si la réponse (xmlString) est vide, on appelle le callback d'erreur\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n\n // si tout s'est bien passé, on appelle le callback de succès\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default AutoCompleteResponseFactory;\n","import CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport AutoCompleteResponseFactory from \"./Response/AutoCompleteResponseFactory\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport MR from \"../../Utils/MessagesResources\";\nimport Helper from \"../../Utils/Helper\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\n\n/**\n * @classdesc\n * Appel du service d'autocomplétion du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.AutoComplete\n *\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String} options.text - La chaîne de caractère à compléter.\n * Cette chaîne n'est pas \"URL encodée\".\n * C'est l'API qui s'occupe de l'encoder pour l'inclure dans la requête.\n *\n * @param {Array.} [options.type = [\"StreetAddress\"]] - Type de l'objet recherché.\n * Le service d'autocomplétion du Géoportail permet de rechercher des toponymes 'PositionOfInterest' et/ou des adresses postales 'StreetAddress'.\n * D'autres types pourront être rajoutés selon l'évolution du service.\n * Par défaut, type = ['StreetAddress'].\n *\n * @param {String} [options.territory] - Limitation de la zone de recherche de localisants.\n * Le service d'autocomplétion du Géoportail permet de limiter la recherche à la métropole et la Corse : options.territory = 'METROPOLE',\n * DOMS TOMS : options.territory = 'DOMTOM', ou à un département : options.territory = '31'\n * Pas de valeur par défaut.\n * La valeur par défaut est donc celle du service.\n * Le service d'autocomplétion du Géoportail renvoie toutes les informations quand aucun territoire n'est spécifié.\n *\n * @param {Number} [options.maximumResponses = 10] - Nombre de réponses maximal que l'on souhaite recevoir.\n * Pas de valeur par défaut.\n * La valeur par défaut sera donc celle du service : 10.\n *\n * @example\n * var options = {\n * // options communes aux services\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * text : \"\",\n * type : \"StreetAddress\",\n * territory : 'METROPOLE',\n * maximumResponses : 10\n * };\n */\nfunction AutoComplete (options_) {\n if (!(this instanceof AutoComplete)) {\n throw new TypeError(MR.getMessage(\"CLASS_CONSTRUCTOR\", \"AutoComplete\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"AutoComplete\";\n\n this.logger = Logger.getLogger(\"Gp.Services.AutoComplete\");\n this.logger.trace(\"[Constructeur AutoComplete (options)]\");\n\n var options = this.patchOptionConvertor(options_);\n\n if (!options.serverUrl) {\n options.serverUrl = DefaultUrlService.AutoComplete.newUrl();\n }\n\n // appel du constructeur par heritage\n CommonService.apply(this, arguments);\n\n if (!options.text) {\n throw new Error(MR.getMessage(\"PARAM_MISSING\", \"text\"));\n }\n\n // ajout des options spécifiques au service\n this.options.text = options.text;\n\n // on definit des parametres par defaut\n if (!options.type) {\n options.type = [\"StreetAddress,PositionOfInterest\"];\n }\n\n this.options.type = options.type;\n this.options.territory = options.terr || \"\";\n this.options.maximumResponses = options.maximumResponses || 10;\n\n // INFO\n // le service ne repond pas en mode POST (405 Method Not Allowed)\n if (this.options.protocol === \"XHR\" && this.options.httpMethod === \"POST\") {\n this.logger.warn(\"Le service ne gére pas le mode d'interrogation en POST, on bascule sur du GET !\");\n this.options.httpMethod = \"GET\"; // on surcharge !\n }\n\n // attributs d'instances\n\n /**\n * Format forcé de la réponse du service : \"json\"\n * sauf si l'on souhaite une reponse brute (options.rawResponse)\n */\n this.options.outputFormat = (this.options.rawResponse) ? \"\" : \"json\";\n}\n\n/**\n * @lends module:AutoComplete#\n */\n\nAutoComplete.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nAutoComplete.prototype.constructor = AutoComplete;\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} options_ - options du service\n * @return {Object} - options\n */\nAutoComplete.prototype.patchOptionConvertor = function (options_) {\n const options = options_;\n\n if (options.filterOptions) {\n this.logger.warn(\"The parameter 'filterOptions' is deprecated\");\n\n if (options.filterOptions.type) {\n this.logger.warn(\"The parameter 'filterOptions.type' is deprecated\");\n if (!options.type) {\n options.type = options.filterOptions.type;\n }\n }\n\n if (options.filterOptions.territory) {\n this.logger.warn(\"The parameter 'filterOptions.territory' is deprecated\");\n if (!options.terr) {\n options.terr = options.filterOptions.territory;\n }\n }\n\n delete options.filterOptions;\n }\n\n return options;\n};\n\n/**\n * (overwrite)\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nAutoComplete.prototype.buildRequest = function (error, success) {\n // ex.\n // http://wxs.ign.fr/CLEF/ols/apis/completion?\n // text=Brie-Comt&\n // type=StreetAddress,PositionOfInterest&\n // territory=METROPOLE&\n // maximumResponses=10\n\n // traitement des param KPV sous forme de tableau\n var territory = \"\";\n if (this.options.territory) {\n territory = this.options.territory;\n }\n\n var type = \"\";\n if (this.options.type) {\n type = this.options.type.join(\",\");\n }\n\n // normalisation de la requete avec param KPV\n this.request = Helper.normalyzeParameters({\n text : encodeURIComponent(this.options.text),\n type : type,\n terr : territory,\n maximumResponses : this.options.maximumResponses\n });\n\n (!this.request)\n ? error.call(this, new ErrorService(MR.getMessage(\"SERVICE_REQUEST_BUILD\")))\n : success.call(this, this.request);\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback de succès de l'analyse de la réponse\n */\nAutoComplete.prototype.analyzeResponse = function (error, success) {\n if (this.response) {\n var options = {\n response : this.response,\n rawResponse : this.options.rawResponse,\n onSuccess : success,\n onError : error,\n scope : this\n };\n\n AutoCompleteResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(MR.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default AutoComplete;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes du service de calcul d'itineraire (REST).\n * Permet le mapping avec les options du service.\n * @constructor\n * @alias Gp.Services.Route.Request.RouteParamREST\n * @param {Object} options - options\n *\n * @private\n */\nfunction RouteParamREST (options) {\n if (!(this instanceof RouteParamREST)) {\n throw new TypeError(\"RouteParamREST constructor cannot be called as a function.\");\n }\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur RouteParamREST ()]\");\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n // mapping des options avec l'API REST\n\n /** Ressource utilisée */\n this.resource = this.options.resource;\n\n /** Coordonnées du point de départ. */\n this.start = this.options.startPoint.x + \",\" + this.options.startPoint.y;\n\n /** Coordonnées du point d’arrivée. */\n this.end = this.options.endPoint.x + \",\" + this.options.endPoint.y;\n\n /** Coordonnées des étapes point de départ. */\n this.intermediates = this.options.viaPoints;\n\n /** Nom du profile à utiliser */\n this.profile = this.options.graph;\n\n /** projection (code EPSG comme epsg:4326 ou wgs84) */\n this.crs = this.options.srs;\n\n /** Liste des contraintes */\n this.constraints = this.options.constraints;\n\n /** Nom de l'optimisation à utiliser */\n this.optimization = this.options.routePreference;\n\n /** Format de sortie (résumé de l’itinéraire) */\n this.getSteps = (this.options.geometryInInstructions) ? \"true\" : \"false\";\n\n /** Unité des distances */\n this.distanceUnit = this.options.distanceUnit;\n\n /** Unité des durées */\n this.timeUnit = this.options.timeUnit;\n\n /** Attributs des voies */\n this.waysAttributes = this.options.waysAttributes;\n}\n\n/**\n * CLASSNAME\n */\nRouteParamREST.CLASSNAME = \"RouteParamREST\";\n\nRouteParamREST.prototype = {\n\n /**\n * @lends module:RouteParamREST#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor : RouteParamREST,\n\n /**\n * Retourne une liste de points\n * @returns {String} une liste de points (sep '|')\n */\n getIntermediates : function () {\n var array = [];\n if (this.intermediates.length !== 0) {\n for (var i = 0; i < this.intermediates.length; i++) {\n var obj = this.intermediates[i];\n array.push(obj.x + \",\" + obj.y);\n }\n }\n\n return array.join(\"|\");\n },\n\n /**\n * Retourne une liste d'attributs\n * @returns {String} une liste d'attributs (sep '|')\n */\n getWaysAttributes : function () {\n return this.waysAttributes.join(\"|\");\n },\n\n /**\n * Retourne un profile\n * @returns {String} profile\n */\n getProfile : function () {\n return this.profile;\n },\n\n /**\n * Retourne un distanceUnit\n * @returns {String} distanceUnit\n */\n getDistanceUnit : function () {\n if (this.distanceUnit === \"m\") {\n return \"meter\";\n }\n if (this.distanceUnit === \"km\") {\n return \"kilometer\";\n }\n return \"\";\n },\n\n /**\n * Retourne une optimisation\n * @returns {String} optimization\n */\n getOptimization : function () {\n if (this.optimization) {\n return this.optimization;\n } else {\n return \"\";\n }\n },\n\n /**\n * Retourne la liste des constraints\n * @returns {String} une liste des constraints (sep '|')\n */\n getConstraints : function () {\n var constraintArray = [];\n\n if (this.constraints.length !== 0) {\n for (var k = 0; k < this.constraints.length; k++) {\n constraintArray.push(JSON.stringify(this.constraints[k]));\n }\n }\n return constraintArray.join(\"|\");\n }\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Array} liste de paramêtres\n */\nRouteParamREST.prototype.getParams = function () {\n var map = [];\n\n map.push({\n k : \"resource\",\n v : this.resource\n });\n\n map.push({\n k : \"start\",\n v : this.start\n });\n\n map.push({\n k : \"end\",\n v : this.end\n });\n\n map.push({\n k : \"geometryFormat\",\n v : \"geojson\"\n });\n\n if (this.optimization) {\n map.push({\n k : \"optimization\",\n v : this.getOptimization()\n });\n }\n\n if (this.intermediates) {\n map.push({\n k : \"intermediates\",\n v : this.getIntermediates()\n });\n }\n\n if (this.profile) {\n map.push({\n k : \"profile\",\n v : this.getProfile()\n });\n }\n\n if (this.constraints) {\n map.push({\n k : \"constraints\",\n v : this.getConstraints()\n });\n }\n\n if (this.crs) {\n map.push({\n k : \"crs\",\n v : this.crs\n });\n }\n\n if (this.distanceUnit) {\n map.push({\n k : \"distanceUnit\",\n v : this.getDistanceUnit()\n });\n }\n\n if (this.timeUnit) {\n map.push({\n k : \"timeUnit\",\n v : this.timeUnit\n });\n }\n\n if (this.waysAttributes) {\n map.push({\n k : \"waysAttributes\",\n v : this.getWaysAttributes()\n });\n }\n\n return map;\n};\n\nexport default RouteParamREST;\n","\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport RouteParamREST from \"./model/RouteParamREST\";\n\n/**\n * @classdesc\n * Classe de gestion des requêtes de type REST sur le service de calcul d'itineraire\n * (uniquement en GET)\n *\n * @constructor\n * @alias Gp.Services.Route.Request.RouteRequestREST\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * var options = {\n * (...)\n * };\n *\n * @private\n */\nfunction RouteRequestREST (options) {\n this.logger = Logger.getLogger(\"RouteRequestREST\");\n this.logger.trace(\"[Constructeur RouteRequestREST ()]\");\n\n if (!(this instanceof RouteRequestREST)) {\n throw new TypeError(\"RouteRequestREST constructor cannot be called as a function.\");\n }\n\n // existance des options\n if (!options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n /** liste des options */\n this.settings = options;\n}\n\nRouteRequestREST.prototype = {\n\n /**\n * @lends module:RouteRequestREST#\n */\n\n /**\n * request\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : RouteRequestREST,\n\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out : origin=2.416907353809513,48.8465772142297&destination=2.4248037771493673,48.84591353161838\n * // POST out : Not yet supported method POST !\n * @returns {String} request\n */\n processRequestString : function () {\n // INFO\n // construction simple sans template...,\n // mais en attendant que les services soient fixés, on taggue ce composant en mode PROTOTYPE !\n this.logger.warn(\" PROTOTYPE !\");\n\n // Mapping des options avec le service de l'API REST\n var oParams = new RouteParamREST(this.settings);\n var params = oParams.getParams();\n\n var request = \"\";\n for (var i = 0; i < params.length; i++) {\n var o = params[i];\n if (request) {\n request += \"&\";\n }\n request += o.k + \"=\" + o.v;\n }\n\n // Exemple :\n // http://wxs.ign.fr/KEY/itineraire/rest/route.json?\n // origin=&\n // destination=&\n // waypoints=&\n // method=DISTANCE&\n // graph=Pieton&\n // graphName=Pieton&\n // exclusions=&\n // tolerance=10&\n // srs=\n\n this.logger.trace(request);\n this.requestString = request;\n\n return this.requestString;\n }\n};\n\nexport default RouteRequestREST;\n","import Logger from \"../../../Utils/LoggerByDefault\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport RouteRequestREST from \"./RouteRequestREST\";\n\n/**\n * Creation d'une requête REST en mode POST ou GET\n * (Factory)\n *\n * @module RouteRequestFactory\n * @alias Gp.Services.Route.Request.RouteRequestFactory\n * @private\n */\nvar RouteRequestFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * // utilisation avec les callback\n * var options = {\n * (...)\n * onSuccess : function (response) {},\n * onError : function (error) {},\n * // spécifique au service\n * startPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * endPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * provideBbox : false,\n * exclusions : [\"bridge\", \"tunnel\", \"toll\"],\n * distanceUnit : \"km\",\n * graph : \"Voiture\",\n * geometryInInstructions : false,\n * routePreference : \"fastest\"\n * };\n * RouteRequestFactory.build(options);\n *\n * // utilisation sans callback\n * var options = {...};\n * try {\n * var result = RouteRequestFactory.build(options);\n * if (! result) { throw new Error(\"...\"):}\n * } catch (e) {\n * // todo\n * }\n * @returns {String} request\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"RouteRequestFactory\");\n logger.trace([\"RouteRequestFactory::build()\"]);\n\n var request = null;\n\n var settings = options || {};\n\n // gestion des callback\n var bOnError = !!(options.onError !== null && typeof options.onError === \"function\");\n\n var message = null;\n\n // FIXME les exceptions ne sont pas 'catchées' sur le constructeur !\n var myReq = new RouteRequestREST(settings);\n if (!myReq.processRequestString()) {\n message = \"Error process request (rest) !\";\n if (bOnError) {\n options.onError.call(options.scope, new ErrorService(message));\n return;\n }\n throw new Error(message);\n }\n request = myReq.requestString;\n\n return request;\n }\n};\n\nexport default RouteRequestFactory;\n","/**\n * Response object for {@link module:Services~route Gp.Services.route ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Gp.BBox} bbox - Bounding Box of the route. Given when provideBBox parameter is used in function call.\n * @property {Object} routeGeometry - Geometry (expressed in [GeoJSON]{@link http://geojson.org/}) of the route.\n * @property {Array.} routeInstructions - Instructions of the route.\n * @property {String} totalDistance - Length of the route. If distanceUnit parameter was set to \"km\" (default), totalDistance is a string containing the total distance expressed in kilometers, followed by \" Km\" (e.g. : \"19.6 Km\"). If distanceUnit parameter was set to \"m\", totalDistance is a string containing the total distance expressed in meters (e.g. : \"19599.14\").\n * @property {Float} totalTime - Route duration in seconds.\n *\n * @namespace\n * @alias Gp.Services.RouteResponse\n */\nfunction RouteResponse () {\n if (!(this instanceof RouteResponse)) {\n throw new TypeError(\"RouteResponse constructor cannot be called as a function.\");\n }\n\n this.totalTime = null;\n\n this.totalDistance = null;\n\n this.bbox = {\n left : null,\n right : null,\n top : null,\n bottom : null\n };\n\n this.routeGeometry = null; // FIXME can be null if option 'geometryInInstructions' is true !\n\n this.routeInstructions = [];\n}\n\nRouteResponse.prototype = {\n\n constructor : RouteResponse\n\n};\n\nexport default RouteResponse;\n","\n/**\n * Single Route Instruction object.\n *\n * @property {String} code - Instruction code :\n *\n * - \"F\" : Straight forward\n * - \"B\" : U-turn\n * - \"L\" : turn left\n * - \"R\" : turn right\n * - \"BL\" : turn left strongly\n * - \"BR\" : turn right strongly\n * - \"FL\" : turn lightly to the left\n * - \"FR\" : turn lightly to the right\n * - \"round_about_entry\" : round about entry\n * - \"round_about_exit\" : round about exit\n *\n * @property {String} instruction - Instruction text : translated code + street name\n * @property {Object} geometry - Geometry (expressed in [GeoJSON]{@link http://geojson.org/}) of the street.\n * @property {Float} distance - Length of the instruction. Expressed in km or m, depending on distanceUnit parameter.\n * @property {Float} duration - Instruction duration in seconds.\n *\n * @namespace\n * @alias Gp.Services.Route.RouteInstruction\n */\nfunction RouteInstruction () {\n if (!(this instanceof RouteInstruction)) {\n throw new TypeError(\"RouteInstruction constructor cannot be called as a function.\");\n }\n\n this.duration = null;\n\n this.distance = null;\n\n this.code = null;\n\n this.instruction = null;\n\n this.geometry = null; // FIXME can be null if option 'geometryInInstructions' is false !\n}\n\nRouteInstruction.prototype = {\n\n constructor : RouteInstruction\n\n};\n\nexport default RouteInstruction;\n","import Logger from \"../../../Utils/LoggerByDefault\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport RouteResponse from \"./model/RouteResponse\";\nimport RouteInstruction from \"./model/RouteInstruction\";\n\n/**\n * Factory pour générer une reponse JSON à partir d'un XML ou d'un JSON\n * (Factory)\n *\n * @module RouteResponseFactory\n * @alias Gp.Services.Route.Response.RouteResponseFactory\n * @private\n */\nvar RouteResponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"RouteResponseFactory\");\n logger.trace(\"RouteResponseFactory::build()\");\n\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n logger.trace(\"analyze response : json\");\n\n var JSONResponse;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // construction de l'objet réponse JSON\n if (JSONResponse) {\n // le service renvoie t il une erreur ?\n if (JSONResponse.message) {\n // ex. {\"message\":\"message not null\", \"status\":\"ERROR\"}\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", JSONResponse.message)));\n return;\n }\n var legs = [];\n var legSteps = [];\n var steps = [];\n\n data = new RouteResponse();\n\n if (data.hasOwnProperty(\"totalTime\")) {\n data.totalTime = parseFloat(JSONResponse.duration);\n }\n if (data.hasOwnProperty(\"totalDistance\")) {\n data.totalDistance = parseFloat(JSONResponse.distance);\n }\n\n if (data.hasOwnProperty(\"bbox\")) {\n data.bbox.left = parseFloat(JSONResponse.bbox[0]);\n data.bbox.bottom = parseFloat(JSONResponse.bbox[1]);\n data.bbox.right = parseFloat(JSONResponse.bbox[2]);\n data.bbox.top = parseFloat(JSONResponse.bbox[3]);\n }\n\n if (data.hasOwnProperty(\"routeGeometry\") && !options.geometryInInstructions) {\n data.routeGeometry = JSONResponse.geometry;\n }\n\n if (data.hasOwnProperty(\"routeInstructions\") && options.geometryInInstructions) {\n var legList = JSONResponse.portions;\n var i;\n if (Array.isArray(legList) && legList.length) {\n for (i = 0; i < legList.length; i++) {\n legs.push(legList[i]);\n }\n }\n if (legs.length) {\n for (i = 0; i < legs.length; i++) {\n legSteps.push(legs[i].steps);\n }\n }\n if (legSteps.length) {\n for (i = 0; i < legSteps.length; i++) {\n steps = steps.concat(legSteps[i]);\n }\n }\n\n steps.forEach(function (step) {\n data.routeInstructions.push(new RouteInstruction());\n data.routeInstructions[data.routeInstructions.length - 1].duration = step.duration;\n data.routeInstructions[data.routeInstructions.length - 1].distance = step.distance;\n data.routeInstructions[data.routeInstructions.length - 1].code = \"\";\n data.routeInstructions[data.routeInstructions.length - 1].instruction = \"\";\n data.routeInstructions[data.routeInstructions.length - 1].geometry = step.geometry;\n\n // on ne souhaite pas de ce type de valeur...\n if (step.name === \"Valeur non renseignée\") {\n step.name = \"\";\n }\n\n switch (step.instruction.type) {\n case \"turn\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Tourner\";\n break;\n case \"new name\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Continuer tout droit\";\n break;\n case \"depart\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Départ\";\n break;\n case \"arrive\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Arrivée\";\n break;\n case \"merge\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Rejoindre\";\n break;\n case \"ramp\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Prendre la bretelle\";\n break;\n case \"on ramp\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Prendre la bretelle\";\n break;\n case \"off ramp\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Prendre la sortie\";\n break;\n case \"fork\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Sur la bifurcation, prendre\";\n break;\n case \"end of road\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"À la fin de la route, prendre\";\n break;\n case \"use lane\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Utiliser la file\";\n break;\n case \"continue\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Continuer\";\n break;\n case \"roundabout\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Au rond-point\";\n break;\n case \"rotary\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Au rond-point\";\n break;\n case \"roundabout turn\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Au rond point, tourner\";\n break;\n case \"notification\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"\";\n break;\n default:\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"?\" + step.instruction.type + \"?\";\n break;\n }\n\n if (step.instruction.modifier) {\n switch (step.instruction.modifier) {\n case \"uturn\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction = \"Faire demi-tour\";\n break;\n case \"sharp right\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" complètement à droite\";\n break;\n case \"right\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" à droite\";\n break;\n case \"slight right\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" légèrement à droite\";\n break;\n case \"straight\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction = \"Continuer tout droit\";\n break;\n case \"slight left\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" lègèrement à gauche\";\n break;\n case \"left\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" à gauche\";\n break;\n case \"sharp left\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" complètement à gauche\";\n break;\n default:\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" ?\" + step.instruction.modifier + \"?\";\n break;\n }\n }\n\n if (step.instruction.exit) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += `${step.instruction.exit}e sortie`;\n }\n\n if (step.attributes.name) {\n if (step.attributes.name.nom_1_droite || step.attributes.name.toponyme) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" sur\";\n }\n\n if (step.attributes.name.nom_1_droite) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += ` ${step.attributes.name.nom_1_droite}`;\n }\n\n if (step.attributes.name.toponyme) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += ` ${step.attributes.name.toponyme}`;\n }\n }\n });\n }\n }\n\n if (!data) {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE\", \"json\")));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION_2\")));\n return;\n }\n }\n } else {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default RouteResponseFactory;\n","\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport RouteRequestFactory from \"./Request/RouteRequestFactory\";\nimport RouteResponseFactory from \"./Response/RouteResponseFactory\";\n\n/**\n * @classdesc\n * Appel du service d'itinéraire du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n *\n * @alias Gp.Services.Route\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String} options.resource - La ressource utilisée pour le calcul. Ce paramètre devrait être obligatoire car il l'est dans l'appel au service. Mais il ne l'est pas pour des raisons de rétrocompatibilité.\n *\n * @param {String} options.outputFormat - Le format de la réponse du service itineraire : 'json' uniquement et par défaut.\n *\n * @param {String} [options.routePreference = \"fastest\"] - Mode de calcul à utiliser :\n * - le plus rapide « fastest »\n * - le plus court « shortest »\n * Par défaut : « fastest ».\n *\n * @param {Object} options.startPoint - Point de départ du calcul. Coordonnées exprimées en longitudes, latitudes (EPSG:4326)\n * @param {Float} options.startPoint.x - Abcisse du point de départ du calcul d'itinéraire.\n * @param {Float} options.startPoint.y - Ordonnée du point de départ du calcul d'itinéraire.\n *\n * @param {Object} options.endPoint - Point d'arrivée du calcul. Coordonnées exprimées en longitudes, latitudes (EPSG:4326)\n * @param {Float} options.endPoint.x - Abcisse du point d'arrivée du calcul d'itinéraire.\n * @param {Float} options.endPoint.y - Ordonnée du point d'arrivée du calcul d'itinéraire.\n *\n * @param {Object[]} [options.viaPoints] - Liste de point ({x:Float,y:Float}) intermédaires que l'itinéraire doit emprunter dans l'ordre du tableau.\n * Coordonnées exprimées en longitudes, latitudes (EPSG:4326) :{x:float, y:float}\n *\n * @param {String} [options.graph = \"voiture\"] - Type de graphe utilisé : \"Voiture\" ou \"Pieton\".\n * Détermine le profil de vitesses utilisé pour le calcul ainsi que les tronçons autorisés ou non.\n * Par défaut, c'est la valeur \"Voiture\" qui sera utilisée.\n *\n * @param {String[]} [options.exclusions] - DEPRECATED: Critères d'exclusions à appliquer pour le calcul. (correspond au paramètre \"avoidFeature\" d'OpenLS)\n * On précise ici le type de tronçons que l'on ne veut pas que l'itinéraire emprunte\n * (valeurs possibles : « toll » (éviter les péages), « bridge », « tunnel »).\n * Ce paramètre est conservé pour une rétrocompatibilité de l'api. Le nouveau paramètre à utiliser est options.constraints\n *\n * @param {Object[]} [options.constraints] - Critères de contraintes à appliquer sur un itinéraire. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities.\n * @param {String} [options.constraints.constraintType] - Type de la contrainte. Généralement \"banned\".\n * @param {String} [options.constraints.key] - Clé de la contrainte. Généralement \"wayType\".\n * @param {String} [options.constraints.operator] - Opérateur de la contrainte. Généralement \"=\".\n * @param {String} [options.constraints.value] - Valeur de la contrainte. Généralement \"autoroute\".\n *\n * @param {Boolean} [options.geometryInInstructions = false] - Indique si la géométrie de l'itinéraire doit être reprise morceau par morceau dans les instructions.\n * (correspond au paramètre \"provideGeometry\" d'OpenLS) Par défaut : false.\n *\n * @param {Boolean} [options.provideBbox = true] - Indique si les instructions doivent être localisées par une bbox dans la réponse.\n * Par défaut : true.\n *\n * @param {String} [options.distanceUnit = \"m\"] - Indique si la distance doit être exprimée en km ou m dans la réponse.\n * Par défaut : m.\n * @param {String} [options.timeUnit = \"second\"] - Indique si la durée doit être exprimée en seconde, minute ou heure dans la réponse. Il peut-être formatté hh:mm::ss avec la valeur standard.\n * Les valeurs possibles sont \"standard\", \"second\", \"minute\" ou \"hour\".\n * Par défaut : \"standard\".\n *\n * @param {String} [options.srs] - Système de coordonnées dans lequel les paramètres géographiques en entrée et la réponse du service sont exprimés.\n * Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 'EPSG:4326'.\n *\n * @param {String[]} [options.waysAttributes] - Nom des attributs des voies. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities.\n *\n * @example\n * var options = {\n * // options communes aux services\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'XHR',\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * resource : 'bdtopo'\n * outputFormat : 'json',\n * startPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * endPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * provideBbox : true,\n * exclusions : [\"Bridge\", \"Tunnel\", \"Toll\"],\n * distanceUnit : \"km\",\n * graph : \"Voiture\",\n * geometryInInstructions : true,\n * routePreference : \"fastest\"\n * };\n *\n */\nfunction Route (options) {\n if (!(this instanceof Route)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"Route\"));\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"Route\";\n\n // appel du constructeur par heritage\n CommonService.apply(this, arguments);\n\n this.logger = Logger.getLogger(\"Gp.Services.Route\");\n this.logger.trace(\"[Constructeur Route (options)]\");\n\n if (!options.startPoint) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"startPoint\"));\n }\n\n // on lance une exception afin d'eviter au service de le faire...\n if (options.startPoint.x === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"startPoint.x\"));\n }\n\n if (options.startPoint.y === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"startPoint.y\"));\n }\n\n if (!options.endPoint) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"endPoint\"));\n }\n\n // on lance une exception afin d'eviter au service de le faire...\n if (options.endPoint.x === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"endPoint.x\"));\n }\n\n if (options.endPoint.y === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"endPoint.y\"));\n }\n\n // options par defaut\n\n // on passe l'option outputFormat en minuscules afin d'éviter des exceptions.\n if (options.outputFormat && options.outputFormat !== \"json\") {\n this.logger.warn(\"options.outputFormat could only be json\");\n }\n this.options.outputFormat = \"json\";\n\n this.options.resource = options.resource || \"bdtopo-osrm\";\n this.options.startPoint = options.startPoint;\n this.options.endPoint = options.endPoint;\n this.options.viaPoints = options.viaPoints || [];\n this.options.routePreference = options.routePreference || \"fastest\";\n /** Gestion des anciennes valeurs de graph */\n if (options.graph) {\n if (options.graph === \"Voiture\") {\n this.options.graph = \"car\";\n }\n if (options.graph === \"Pieton\") {\n this.options.graph = \"pedestrian\";\n }\n } else {\n this.options.graph = \"car\";\n }\n this.options.constraints = [];\n if (options.constraints) {\n if (Array.isArray(options.constraints)) {\n for (var k = 0; k < options.constraints.length; k++) {\n this.options.constraints.push(options.constraints[k]);\n }\n } else {\n throw new Error(_.getMessage(\"PARAM_TYPE\", \"constraints\"));\n }\n }\n\n /** Gestion de l'ancien paramètre exclusion */\n var constraintTunnel = {};\n var constraintPont = {};\n var constraintAutoroute = {};\n if (options.exclusions) {\n if (options.exclusions.length !== 0) {\n this.logger.warn(\"options.exclusions is DEPRECATED !!\");\n for (var c = 0; c < options.exclusions.length; c++) {\n if (typeof options.exclusions[c] === \"string\") {\n options.exclusions[c] = options.exclusions[c].toLowerCase();\n } else {\n // on ne crée pas une erreur pour rétro-compatibilité avec les anciennes versions\n continue;\n }\n if (options.exclusions[c] === \"toll\") {\n constraintAutoroute.constraintType = \"banned\";\n constraintAutoroute.key = \"wayType\";\n constraintAutoroute.operator = \"=\";\n constraintAutoroute.value = \"autoroute\";\n this.options.constraints.push(constraintAutoroute);\n }\n if (options.exclusions[c] === \"tunnel\") {\n constraintTunnel.constraintType = \"banned\";\n constraintTunnel.key = \"wayType\";\n constraintTunnel.operator = \"=\";\n constraintTunnel.value = \"tunnel\";\n this.options.constraints.push(constraintTunnel);\n }\n if (options.exclusions[c] === \"bridge\") {\n constraintPont.constraintType = \"banned\";\n constraintPont.key = \"wayType\";\n constraintPont.operator = \"=\";\n constraintPont.value = \"pont\";\n this.options.constraints.push(constraintPont);\n }\n }\n }\n }\n\n this.options.geometryInInstructions = options.geometryInInstructions || false;\n this.options.provideBbox = options.provideBbox || true;\n this.options.distanceUnit = options.distanceUnit || \"m\";\n this.options.timeUnit = options.timeUnit || \"second\";\n this.options.expectedStartTime = null; // FIXME not yet implemented !\n this.options.srs = options.srs || \"EPSG:4326\";\n this.options.waysAttributes = options.waysAttributes || [];\n\n // gestion de l'url du service par defaut\n // si l'url n'est pas renseignée, il faut utiliser les urls par defaut\n if (!this.options.serverUrl) {\n var UrlByDefault = DefaultUrlService.Route.newUrl();\n\n if (!UrlByDefault) {\n throw new Error(\"Url by default not found !\");\n }\n this.options.serverUrl = UrlByDefault;\n this.logger.trace(\"Serveur URL par defaut : \" + this.options.serverUrl);\n }\n}\n\n/**\n * @lends module:Route#\n */\nRoute.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nRoute.prototype.constructor = Route;\n\n/**\n * (overwrite)\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nRoute.prototype.buildRequest = function (error, success) {\n var options = {\n // spécifique au service\n resource : this.options.resource,\n startPoint : this.options.startPoint,\n endPoint : this.options.endPoint,\n viaPoints : this.options.viaPoints,\n provideBbox : this.options.provideBbox,\n constraints : this.options.constraints,\n distanceUnit : this.options.distanceUnit,\n timeUnit : this.options.timeUnit,\n graph : this.options.graph,\n geometryInInstructions : this.options.geometryInInstructions,\n routePreference : this.options.routePreference,\n srs : this.options.srs,\n waysAttributes : this.options.waysAttributes\n };\n\n this.request = RouteRequestFactory.build(options);\n\n // on teste si la requete a bien été construite !\n if (!this.request) {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_REQUEST_BUILD\")));\n } else {\n success.call(this, this.request);\n }\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nRoute.prototype.analyzeResponse = function (error, success) {\n // INFO\n // Factory pour masquer la complexité du retour du service\n\n if (this.response) {\n var options = {\n distanceUnit : this.options.distanceUnit,\n timeUnit : this.options.timeUnit,\n response : this.response,\n outputFormat : this.options.outputFormat, // utile pour parser la string en mode XHR : JSON ou XML !\n rawResponse : this.options.rawResponse,\n onError : error,\n onSuccess : success,\n scope : this,\n geometryInInstructions : this.options.geometryInInstructions\n };\n\n RouteResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default Route;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n *\n * Classe de gestion des param. des requêtes du service de calcul des iso.\n * Permet le mapping avec les options du service.\n *\n * @constructor\n * @alias Gp.Services.ProcessIsoCurve.Request.ProcessIsoCurveParam\n * @param {Object} options - options\n * @private\n *\n */\nfunction ProcessIsoCurveParam (options) {\n if (!(this instanceof ProcessIsoCurveParam)) {\n throw new TypeError(\"ProcessIsoCurveParam constructor cannot be called as a function.\");\n }\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur ProcessIsoCurveParam ()]\");\n\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n // mapping des options avec l'API REST\n\n /** Identifiant de l’isochrone */\n this.id = this.options.id;\n\n /** Resource */\n this.resource = this.options.resource;\n\n /** Coordonnées de départ (ou arrivée si le reverse est à true). */\n this.point = this.options.position;\n\n /** projection (code EPSG comme epsg:4326 ou wgs84) */\n this.crs = this.options.srs;\n\n /**\n * Profil de véhicule à utiliser pour le calcul.\n * Voiture ou Pieton\n */\n this.profile = this.options.graph;\n\n /** Liste des règles de restrictions à utiliser */\n this.constraints = this.options.constraints;\n\n this.reverse = this.options.reverse;\n\n this.timeUnit = this.options.timeUnit;\n\n this.distanceUnit = this.options.distanceUnit;\n\n /**\n * \"time\" pour isochrone ou \"distance\" for isodistance.\n * Par defaut, time...\n */\n if (this.options.method === \"distance\") {\n this.costType = \"distance\";\n this.costValue = this.options.distance;\n if (this.distanceUnit === \"m\" && this.costValue >= 50000) {\n this.distanceUnit = \"km\";\n this.costValue /= 1000;\n }\n } else {\n this.costType = \"time\";\n this.costValue = this.options.time;\n }\n}\n\n/**\n * CLASSNAME\n */\nProcessIsoCurveParam.CLASSNAME = \"ProcessIsoCurveParam\";\n\nProcessIsoCurveParam.prototype = {\n\n /**\n * @lends module:ProcessIsoCurveParam#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor : ProcessIsoCurveParam,\n\n /**\n * Retourne le point\n * @returns {String} x,y\n */\n getLocation : function () {\n return this.point.x + \",\" + this.point.y;\n },\n\n /**\n * Retourne l'unité de la distance\n * @returns {String}\n */\n getDistanceUnit : function () {\n if (this.distanceUnit === \"m\") {\n return \"meter\";\n }\n if (this.distanceUnit === \"km\") {\n return \"kilometer\";\n }\n return \"\";\n },\n\n /**\n * Retourne la liste des contraintes\n * @returns {String}\n */\n getConstraints : function () {\n var constraintArray = [];\n\n if (this.constraints.length !== 0) {\n for (var k = 0; k < this.constraints.length; k++) {\n constraintArray.push(JSON.stringify(this.constraints[k]));\n }\n }\n return constraintArray.join(\"|\");\n },\n\n /**\n * Retourne la direction\n * @returns {String}\n */\n getDirection : function () {\n if (this.reverse) {\n return \"arrival\";\n } else {\n return \"departure\";\n }\n }\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Object[]} KVP\n */\nProcessIsoCurveParam.prototype.getParams = function () {\n var map = [];\n\n map.push({\n k : \"resource\",\n v : this.resource\n });\n\n map.push({\n k : \"point\",\n v : this.getLocation()\n });\n\n map.push({\n k : \"direction\",\n v : this.getDirection()\n });\n\n map.push({\n k : \"costType\",\n v : this.costType\n });\n\n map.push({\n k : \"costValue\",\n v : this.costValue\n });\n\n map.push({\n k : \"profile\",\n v : this.profile\n });\n\n map.push({\n k : \"timeUnit\",\n v : this.timeUnit\n });\n\n map.push({\n k : \"distanceUnit\",\n v : this.getDistanceUnit()\n });\n\n if (this.crs) {\n map.push({\n k : \"crs\",\n v : this.crs\n });\n }\n\n if (this.constraints) {\n map.push({\n k : \"constraints\",\n v : this.getConstraints()\n });\n }\n\n return map;\n};\n\nexport default ProcessIsoCurveParam;\n","\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport ProcessIsoCurveParam from \"./model/ProcessIsoCurveParam\";\n\n/**\n * @classdesc\n * Classe de gestion des requêtes sur le service de calcul d'isoschrone/isodistance.\n * Les requêtes peuvent être en mode GET ou POST,\n * et le format de sorti est en JSON.\n *\n * @constructor\n * @alias Gp.Services.ProcessIsoCurve.Request.ProcessIsoCurveRequest\n * @param {Object} options - options\n *\n * @example\n * var options = {\n * httpMethod : 'GET', // GET|POST\n * // spécifique au service\n * position : {\n * x : 2.3242664298058053,\n * y : 48.86118017324745\n * },\n * graph : \"car\",\n * method : 'time',\n * time : 1000, //distance : 200\n * reverse : false,\n * srs : 'EPSG:4326'\n * };\n *\n * try {\n *\n * var oIsoCurve = new ProcessIsoCurveRequest (options);\n * if (!oIsoCurve.processRequestString ()) {\n * // error\n * }\n *\n * var request = oIsoCurve.requestString;\n *\n * } catch (e) {\n * // error\n * }\n * @private\n */\nfunction ProcessIsoCurveRequest (options) {\n this.logger = Logger.getLogger(\"ProcessIsoCurveRequest\");\n this.logger.trace(\"[Constructeur ProcessIsoCurveRequest ()]\");\n\n if (!(this instanceof ProcessIsoCurveRequest)) {\n throw new TypeError(\"ProcessIsoCurveRequest constructor cannot be called as a function.\");\n }\n\n // existance des options\n if (!options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n /**\n * Liste des options\n */\n this.settings = options;\n\n /**\n * Mode HTPP.\n * Par defaut, \"GET\".\n * @type {String}\n */\n this.mode = this.settings.httpMethod || \"GET\";\n}\n\nProcessIsoCurveRequest.prototype = {\n\n /**\n * @lends module:ProcessIsoCurveRequest#\n */\n\n /**\n * Requête\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : ProcessIsoCurveRequest,\n\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out :\n * // (http://wxs.ign.fr/KEY/isochrone?)\n * // resource=&\n * // point=&\n * // costValue=&\n * // costType=&\n * // profile=&\n * // constraints=&\n * // direction=&\n * // crs=\n *\n * // POST out :\n * {\n * resource: \"bduni-idf-pgr\",\n * point: \"2.337306,48.849319\",\n * costValue: 100,\n * costType: \"time\",\n * profile: \"car\",\n * constraints: [{\n * constraintType: \"banned\",\n * key: \"ways_type\",\n * operator: \"=\",\n * value: \"autoroute\"\n * }]\n * }\n *\n * @returns {String} request\n */\n processRequestString : function () {\n var request = \"\";\n var i = 0;\n\n switch (this.mode) {\n case \"GET\":\n this.logger.trace(\"Process GET Request\");\n\n // Mapping des options avec le service de l'API REST\n var oParams = new ProcessIsoCurveParam(this.settings);\n var params = oParams.getParams();\n\n for (i = 0; i < params.length; i++) {\n var o = params[i];\n if (request) {\n request += \"&\";\n }\n request += o.k + \"=\" + o.v;\n }\n\n break;\n\n case \"POST\":\n this.logger.trace(\"Process POST Request\");\n // creation du JSON\n var postRequest = {};\n\n postRequest.resource = this.settings.resource;\n\n postRequest.point = this.settings.position.x + \",\" + this.settings.position.y;\n\n if (this.settings.method === \"distance\") {\n postRequest.costType = \"distance\";\n postRequest.costValue = this.settings.distance;\n } else {\n postRequest.costType = \"time\";\n postRequest.costValue = this.settings.time;\n }\n\n postRequest.profile = this.settings.graph;\n\n if (this.settings.reverse) {\n postRequest.direction = \"arrival\";\n } else {\n postRequest.direction = \"departure\";\n }\n\n postRequest.constraints = this.settings.constraints;\n\n postRequest.distanceUnit = this.settings.distanceUnit;\n\n postRequest.timeUnit = this.settings.timeUnit;\n\n postRequest.crs = this.settings.srs;\n\n // conversion en chaîne de caractères\n request = JSON.stringify(postRequest);\n break;\n\n default:\n this.logger.error(\"No other HTTP method supported by the service !\");\n }\n\n this.logger.trace(request);\n this.requestString = request;\n\n return this.requestString;\n }\n};\n\nexport default ProcessIsoCurveRequest;\n","\n/**\n * Response object for {@link module:Services~isoCurve Gp.Services.isoCurve ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Float} distance - distance (expressed in meters) used for the request.\n * @property {Float} time - time (expressed in seconds) used for the request.\n * @property {Object} geometry - Geometry (expressed in [GeoJSON]{@link http://geojson.org/}) of the isocurve.\n * @property {String} id - request id (used by underlying webservice).\n * @property {Gp.Point} location - Position of the start or end point used for the request (expressed in \"srs\" coordinates system).\n * @property {String} message - message\n * @property {String} srs - Identifier of the coordinates system used for the isocurve.\n *\n * @namespace\n * @alias Gp.Services.IsoCurveResponse\n *\n */\nfunction ProcessIsoCurveResponse () {\n if (!(this instanceof ProcessIsoCurveResponse)) {\n throw new TypeError(\"ProcessIsoCurveResponse constructor cannot be called as a function.\");\n }\n\n this.message = null;\n\n this.id = null;\n\n this.location = {};\n this.location.x = null;\n this.location.y = null;\n\n this.srs = null;\n\n this.geometry = null;\n\n this.time = null;\n\n this.distance = null;\n}\n\nProcessIsoCurveResponse.prototype = {\n\n constructor : ProcessIsoCurveResponse\n\n};\n\nexport default ProcessIsoCurveResponse;\n","import Logger from \"../../../Utils/LoggerByDefault\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport ProcessIsoCurveResponse from \"./model/ProcessIsoCurveResponse\";\n\n/**\n * Factory pour générer une reponse JSON à partir d'un JSON\n * (Factory)\n *\n * @module ProcessIsoCurveResponseFactory\n * @alias Gp.Services.ProcessIsoCurve.Response.ProcessIsoCurveResponseFactory\n * @private\n */\nvar ProcessIsoCurveResponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant ProcessIsoCurve\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"ProcessIsoCurveResponseFactory\");\n logger.trace([\"ProcessIsoCurveResponseFactory::build()\"]);\n\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n logger.trace(\"analyze response : json\");\n\n var JSONResponse;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // analyse de la reponse\n // création de l'objet de réponse\n data = new ProcessIsoCurveResponse();\n\n // remplissage de l'objet créé avec les attribtuts de la réponse du service\n if (JSONResponse) {\n if (JSONResponse.costType === \"distance\") {\n data.time = \"\";\n data.distance = JSONResponse.costValue;\n } else {\n data.time = JSONResponse.costValue;\n data.distance = \"\";\n }\n\n data.message = \"\";\n data.id = \"\";\n data.srs = JSONResponse.crs;\n data.geometry = JSONResponse.geometry;\n var coords = JSONResponse.point.split(\",\");\n if (data.location) {\n data.location.x = coords[0];\n data.location.y = coords[1];\n }\n } else {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE\", options.response)));\n return;\n }\n\n // info : en cas de problèmes de droits (clé invalide ou autre), la réponse est au format XML !!\n // ex. Key does not exist or has expired\n // mais le statut est 403, l'erreur est donc remontée plus tôt.\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type : ErrorService.TYPE_SRVERR,\n status : 200\n }));\n return;\n }\n }\n } else {\n // si la réponse est vide, on appelle le callback d'erreur\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n\n // si tout s'est bien passé, on appelle le callback de succès\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default ProcessIsoCurveResponseFactory;\n","\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport ProcessIsoCurveRequest from \"./Request/ProcessIsoCurveRequest\";\nimport ProcessIsoCurveResponseFactory from \"./Response/ProcessIsoCurveResponseFactory\";\n\n/**\n * @classdesc\n * Appel du service d'isochrone/distance du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.ProcessIsoCurve\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String} options.resource - La ressource utilisée pour le calcul : bdtopo-valhalla (par défaut) ou bdtopo-pgr.\n *\n * @param {String} options.outputFormat - Le format de la réponse du service iso : 'json' uniquement et par défaut.\n *\n * @param {Object} options.position - Point de départ du calcul.\n * Coordonnées exprimées en longitudes, latitudes (EPSG:4326)\n * @param {Float} options.position.x - Abcisse du point de départ du calcul d'isochrone/distance.\n * @param {Float} options.position.y - Ordonnée du point de départ du calcul d'isochrone/distance.\n *\n * @param {String} options.srs - Projection.\n * Système de coordonnées dans lequel les coordonnées du point « location » sont exprimées et\n * dans lequel la géométrie de la courbe résultante sera exprimée.\n * Par défaut, le système de coordonnées utilisé sera « EPSG:4326 ».\n *\n * @param {String} [options.graph = \"voiture\"] - Nom du graphe à utiliser pour le calcul (« Pieton » ou « Voiture »).\n * La valeur par défaut est : «voiture»\n *\n * @param {Array.} [options.exclusions] - DEPRECATED: Ce paramètre est conservé pour une rétrocompatibilité de l'api. Le nouveau paramètre à utiliser est options.constraints.\n * Critères d'exclusions à appliquer pour le calcul.\n * On précise ici le type de tronçons que l'on ne veut pas que l'isochrone/distance emprunte\n * (valeurs possibles : « toll » (éviter les péages), « bridge », « tunnel »).\n *\n * @param {Object[]} [options.constraints] - Critères de contraintes à appliquer sur un itinéraire. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities.\n * @param {String} [options.constraints.constraintType] - Type de la contrainte. Généralement \"banned\".\n * @param {String} [options.constraints.key] - Clé de la contrainte. Généralement \"wayType\".\n * @param {String} [options.constraints.operator] - Opérateur de la contrainte. Généralement \"=\".\n * @param {String} [options.constraints.value] - Valeur de la contrainte. Généralement \"autoroute\".\n *\n * @param {String} [options.method = \"time\"] - Méthode utilisée pour le calcul de la courbe iso.\n * Les valeurs possible sont \"time\" pour un calcul d'isochrone, \"distance\" pour un calcul d'isodistance.\n * Pas de valeur spécifié équivaut à un calcul d'isochrone.\n *\n * @param {String} [options.distanceUnit = \"m\"] - Indique si la distance doit être exprimée en km ou m dans la réponse (\"m\" or \"km\").\n *\n * @param {String} [options.timeUnit = \"second\"] - Indique si la durée doit être exprimée en seconde, minute ou heure dans la réponse (\"standard\", \"second\", \"minute\", \"hour\"). Il peut-être formatté hh:mm::ss avec la valeur standard.\n *\n * @param {Float} options.time - Durée maximum (exprimée en secondes) à utiliser pour le calcul de la courbe à partir du ou jusqu'au point « location ».\n * Ce paramètre doit être renseigné si l'option \"méthod\" a la valeur \"time\".\n * Si l'option method n'est pas renseignée, ce paramètre doit être renseigné.\n *\n * @param {Float} options.distance - Distance maximum (exprimée en metres) à utiliser pour le calcul de la courbe à partir du ou j'usqu'au point « location ».\n * Ce paramètre doit être renseigné si l'option \"méthod\" a la valeur \"DISTANCE\".\n * Si l'option \"method\" n'est pas renseignée, ce paramètre sera ignoré.\n *\n * @param {Boolean} [options.reverse = false] - Indique si la géométrie résultante doit être lissée (« true ») pour ne pas avoir d'effet d'escalier.\n * Par défaut, la valeur « false » est appliquée.\n *\n * @param {Boolean} [options.smoothing = false] - Indique si la géométrie résultante doit être lissée (« true ») pour ne pas avoir d'effet d'escalier.\n * Par défaut, la valeur « false » est appliquée.\n *\n * @param {Boolean} [options.holes = false] - Indique si la géométrie résultante (surface) doit être retournée avec des trous (« true »).\n * Par défaut, la valeur « false » est appliquée.\n *\n * @example\n * var options = {\n * // options communes aux services\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * position : {\n * x : 2.3242664298058053,\n * y : 48.86118017324745\n * },\n * resource : bdtopo-valhalla,\n * distance : 200,\n * [time : ]\n * method : \"distance\",\n * graph : \"voiture\",\n * reverse : false\n * };\n */\n\nfunction ProcessIsoCurve (options) {\n if (!(this instanceof ProcessIsoCurve)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"ProcessIsoCurve\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"ProcessIsoCurve\";\n\n // appel du constructeur par heritage\n CommonService.apply(this, arguments);\n\n this.logger = Logger.getLogger(\"Gp.Services.ProcessIsoCurve\");\n this.logger.trace(\"[Constructeur ProcessIsoCurve (options)]\");\n\n if (!options.position) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"position\"));\n }\n\n // on lance une exception afin d'eviter au service de le faire...\n if (options.position.x === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"position.x\"));\n }\n\n if (options.position.y === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"position.y\"));\n }\n\n if (!options.time && !options.distance) {\n throw new Error(\"Parameter (s) 'distance' missing. Parameter time to calculate an isochrone, parameter distance for an isodistance\");\n }\n\n // si on a que le paramètre \"distance\" en entrée, on calcule une isodistance.\n // Le paramètre \"méthode\" doit pour avoir une réponse du service, être passé à \"distance\"\n if (!options.time && options.distance) {\n this.options.method = \"distance\";\n // on supprime l'éventuel attribut time, résidu d'un appel antérieur\n if (this.options.time) {\n delete this.options.time;\n }\n }\n\n // si on a que le paramètre \"time\" en entrée, on calcule une isochrone.\n // Le paramètre \"méthode\" doit pour avoir une réponse du service, être passé à \"time\"\n if (options.time && !options.distance) {\n this.options.method = \"time\";\n // on supprime l'éventuel attribut time, résidu d'un appel antérieur\n if (this.options.distance) {\n delete this.options.distance;\n }\n }\n\n // au cas où on a ni l'un, ni l'autre...\n this.options.method = this.options.method || \"time\";\n\n // options par defaut du service\n // TODO: modifier la ressource lors de la mise en production du service\n this.options.resource = options.resource || \"bdtopo-valhalla\";\n this.options.exclusions = options.exclusions || [];\n this.options.reverse = options.reverse || false;\n this.options.srs = options.srs || \"EPSG:4326\";\n this.options.distanceUnit = options.distanceUnit || \"m\";\n this.options.timeUnit = options.timeUnit || \"second\";\n\n // options depreciees\n if (options.smoothing) {\n this.logger.warn(\"options.smoothing is DEPRECATED\");\n }\n this.options.smoothing = false;\n if (options.holes) {\n this.logger.warn(\"options.holes is DEPRECATED\");\n }\n this.options.holes = false;\n\n // Gestion du graphe\n if (options.graph) {\n if (options.graph === \"Voiture\") {\n this.options.graph = \"car\";\n }\n if (options.graph === \"Pieton\") {\n this.options.graph = \"pedestrian\";\n }\n } else {\n this.options.graph = \"car\";\n }\n\n // Gestions des contraintes\n this.options.constraints = [];\n if (options.constraints) {\n if (Array.isArray(options.constraints)) {\n for (var k = 0; k < options.constraints.length; k++) {\n this.options.constraints.push(options.constraints[k]);\n }\n } else {\n throw new Error(_.getMessage(\"PARAM_TYPE\", \"constraints\"));\n }\n }\n\n // Gestion de l'ancien paramètre exclusions\n var constraintTunnel = {};\n var constraintPont = {};\n var constraintAutoroute = {};\n if (options.exclusions) {\n if (options.exclusions.length !== 0) {\n this.logger.warn(\"options.exclusions is DEPRECATED !!\");\n for (var c = 0; c < options.exclusions.length; c++) {\n if (typeof options.exclusions[c] === \"string\") {\n options.exclusions[c] = options.exclusions[c].toLowerCase();\n } else {\n // on ne crée pas une erreur pour rétro-compatibilité avec les anciennes versions\n continue;\n }\n if (options.exclusions[c] === \"toll\") {\n constraintAutoroute.constraintType = \"banned\";\n constraintAutoroute.key = \"wayType\";\n constraintAutoroute.operator = \"=\";\n constraintAutoroute.value = \"autoroute\";\n this.options.constraints.push(constraintAutoroute);\n }\n if (options.exclusions[c] === \"tunnel\") {\n constraintTunnel.constraintType = \"banned\";\n constraintTunnel.key = \"wayType\";\n constraintTunnel.operator = \"=\";\n constraintTunnel.value = \"tunnel\";\n this.options.constraints.push(constraintTunnel);\n }\n if (options.exclusions[c] === \"bridge\") {\n constraintPont.constraintType = \"banned\";\n constraintPont.key = \"wayType\";\n constraintPont.operator = \"=\";\n constraintPont.value = \"pont\";\n this.options.constraints.push(constraintPont);\n }\n }\n }\n }\n\n // on passe l'option outputFormat en minuscules afin d'éviter des exceptions.\n this.options.outputFormat = (typeof options.outputFormat === \"string\") ? options.outputFormat.toLowerCase() : \"json\";\n if (options.outputFormat && options.outputFormat !== \"json\") {\n throw new Error(_.getMessage(\"PARAM_NOT_SUPPORT\", \"outputFormat\"));\n }\n this.options.outputFormat = \"json\";\n\n // gestion de l'url du service par defaut\n // si l'url n'est pas renseignée, il faut utiliser les urls par defaut\n if (!this.options.serverUrl) {\n var urlFound = DefaultUrlService.ProcessIsoCurve.newUrl();\n if (!urlFound) {\n throw new Error(\"Url by default not found !\");\n }\n this.options.serverUrl = urlFound;\n this.logger.trace(\"Serveur URL par defaut : \" + this.options.serverUrl);\n }\n}\n\n/**\n * @lends module:ProcessIsoCurve#\n */\nProcessIsoCurve.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nProcessIsoCurve.prototype.constructor = ProcessIsoCurve;\n\n/**\n * Création de la requête (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nProcessIsoCurve.prototype.buildRequest = function (error, success) {\n try {\n var oIsoCurve = new ProcessIsoCurveRequest(this.options);\n if (!oIsoCurve.processRequestString()) {\n throw new Error(_.getMessage(\"SERVICE_REQUEST_BUILD\"));\n }\n\n this.request = oIsoCurve.requestString;\n } catch (e) {\n error.call(this, new ErrorService(e.message));\n return;\n }\n\n success.call(this, this.request);\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} onError - callback des erreurs\n * @param {Function} onSuccess - callback de succès de l'analyse de la réponse\n */\nProcessIsoCurve.prototype.analyzeResponse = function (onError, onSuccess) {\n if (this.response) {\n var options = {\n response : this.response,\n outputFormat : this.options.outputFormat,\n rawResponse : this.options.rawResponse,\n onSuccess : onSuccess,\n onError : onError,\n scope : this\n };\n\n ProcessIsoCurveResponseFactory.build(options);\n } else {\n onError.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default ProcessIsoCurve;\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"point|circle|bbox\" }] */\n\n/**\n* Geoportal web services invocation namespace.\n*\n* @module Services\n* @alias Gp.Services\n*/\nimport Config from \"./Config/Config\";\nimport Alti from \"./Alti/Alti\";\nimport Geocode from \"./Geocode/Geocode\";\nimport ReverseGeocode from \"./Geocode/ReverseGeocode\";\nimport AutoComplete from \"./AutoComplete/AutoComplete\";\nimport Route from \"./Route/Route\";\nimport ProcessIsoCurve from \"./ProcessIsoCurve/ProcessIsoCurve\";\n\nvar Services = {\n /**\n * Access to Geoportal resources metadata availables with one ore several keys\n *\n * @method getConfig\n * @param {Object} options - Options for function call.\n * @param {String} [options.apiKey] - Access key(s) (\",\" as separator, no spaces) to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}\n * @param {String} [options.customConfigFile] - path to a local config file. Overload the apiKey parameter\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.GetConfigResponse} object as a parameter except if \"rawResponse\" parameter is set to true : a String will be returned.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n */\n getConfig : function (options) {\n var configService = new Config(options);\n configService.call();\n },\n /**\n * Getting elevations in or along of one or several points on french territories using the [elevation services of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/alti.html}.
    \n * Two use cases are availables :
    \n * 1. getting elevations of the given points : don't use the options.sampling parameter ;
    \n * 2. getting a regular set of elevations along the given points : use the options.sampling parameter.\n *\n * @method getAltitude\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {Array.} options.positions - Array of positions ({lon:float, lat:float}) expressed in CRS:84 coordinates system, where to get elevations. 50 positions maximum may be given. 2 positions minimum are required if you use the options.sampling parameter.\n * @param {Number} [options.sampling] - Number of points to use (between 2 and 5000) in order to compute an elevation path. The points given with the options.positions parameter are used to fix the planimetric path along which the elevations will be computed.
    \n * If not used, only elevations of these positions will be returned.\n * @param {Boolean} [options.zonly=false] - Set this parameter to true if you only want to have elevations returned without corresponding coordinates.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.AltiResponse} object as a parameter, except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n * @param {String} [options.api='REST'] - What API to use for interacting with underlying web service : 'REST'. Only use if you know what you are doing.\n * @param {String} [options.outputFormat='xml'] - Output format for underlying web service response : 'xml' or 'json'. Only use if you know what you are doing.\n */\n getAltitude : function (options) {\n var altiService = new Alti(options);\n altiService.call();\n },\n /**\n * Getting positon of a geographic identifier (places names, address, cadastral parcel, other...) using the [geocoding web service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/geocodage.html}.\n *\n * @example\n * Gp.Services.geocode ({\n * apiKey : \"carte\",\n * location : \"73 avenue de Paris, Saint-Mandé\",\n * // traitement des resultats\n * onSuccess : function (result) {\n * console.log(\"found (x:\"+result.position.x+\", y:\"+result.position.y+\")\") ;\n * }\n * }) ;\n *\n *\n * @method geocode\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} [options.index=\"StreetAddress\"] - Geographical identifier type to search. Values currently availables are : \"PositionOfInterest\" for place names, \"StreetAddress\" for address search, \"CadastralParcel\" for Cadastral parcels search, \"location\" for a multi-index search on \"StreetAddress\" and \"PositionOfInterest\". Default is \"StreetAddress\".\n * @param {String} options.query - Geographic identifier to locate.\n * @param {Object} [options.filters] - Additional filters to apply to search. The following properties may be given.\n * @param {String} [options.filters.[prop]] - Additionnal properties to filter search. Properties depends on options.index, and values type should be \"String\".\n *

    \n * Properties availables for address search :
    \n * \"postalCode\", \"inseeCode\" and \"city\".\n *

    \n * Properties availables for place names search :
    \n * \"postalCode\", \"inseeCode\" and \"type\".\n *

    \n * Properties availables for cadastral parcels search :
    \n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n * @param {Number} [options.maximumResponses=20] - Maximum number of responses. Default underlying service value applies (20) if not provided.\n * @param {Boolean} [options.returnTrueGeometry=false] - Set this parameter to true if you wish to have the true geometrie returned.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.GeocodeResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=http (s)://data.geopf.fr/geocodage/search] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n geocode : function (options) {\n var geocodeService = new Geocode(options);\n geocodeService.call();\n },\n /**\n * Retrieving geographical identifiers (place names, address, cadastral parcels, ...) near a given position, using the [reverse geocoding web service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/geocodage-inverse.html}.\n *\n * @method reverseGeocode\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} [options.index=\"StreetAddress\"] - Geographical identifier type to search. Values currently availables are : \"PositionOfInterest\" for place names, \"StreetAddress\" for address search, \"CadastralParcel\" for Cadastral parcels search, \"location\" for a multi-index search on \"StreetAddress\" and \"PositionOfInterest\". Default is \"StreetAddress\".\n * @param {Object} options.position - Reference position where to search geographical identifiers.\n * @param {Float} options.position.lon - Longitude\n * @param {Float} options.position.lat - Latitude\n * @param {Object} [options.filters] - Additional filters to apply to search. The following properties may be given.\n * @param {String} [options.filters.[prop]] - Additionnal properties to filter search. Properties depends on options.index, and values type should be \"String\".\n *

    \n * Properties availables for address search :
    \n * \"postalCode\", \"inseeCode\" and \"city\".\n *

    \n * Properties availables for place names search :
    \n * \"postalCode\", \"inseeCode\" and \"type\".\n *

    \n * Properties availables for cadastral parcels search :
    \n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n * @param {Object} [options.searchGeometry] - Location where to perform the search.\n * @param {String} options.searchGeometry.type - Geometry type (Point|Circle|Linestring|Polygon)\n * @param {Array.|Array.Array.} options.searchGeometry.coordinates - Coordinates\n * @param {Float} [options.searchGeometry.radius] - Radius (only for type 'Circle')\n * @param {Number} [options.maximumResponses=20] - Maximum number of responses. Default underlying service value applies (20) if not provided.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.GeocodeResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=https://data.geopf.fr/geocodage/reverse] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n reverseGeocode : function (options) {\n var reverseGeocodeService = new ReverseGeocode(options);\n reverseGeocodeService.call();\n },\n /**\n * Getting suggestions of probable places names or address based on uncomplete texts, using the [autocompletion service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/autocompletion.html}\n *\n * @method autoComplete\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} options.text - Text input to complete.\n * @param {Array.} [options.filterOptions.type = \"StreetAddress\"] - Suggestion types to provide : address (\"StreetAddress\") and/or place name (\"PositionOfInterest\").\n * @param {Array.} [options.filterOptions.territory] - Places where to limit the search of suggestions : \"METROPOLE\" (Corsica and metropolitan France), \"DOMTOM\" (French overseas departments and territories), or an INSEE code of a department. No limitation by default. For instance : ['METROPOLE', '31']\n * @param {Number} [options.maximumResponses = 10] - Maximum number of responses.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.AutoCompleteResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=https://data.geopf.fr/geocodage/completion] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n autoComplete : function (options) {\n var autoCompleteService = new AutoComplete(options);\n autoCompleteService.call();\n },\n /**\n * Getting a route from one point to another using the [route service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/itineraires.html}.\n *\n * @method route\n * @param {Object} options - Options for function call.\n * @param {String} options.resource - Resource used to compute the route. Available values are in the GetCapabilities.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} [options.routePreference = \"fastest\"] - Indicates the way to compute the route : \"fastest\" (time optimisation) or \"shortest\" (distance optimisation). Available values are in the GetCapabilities.\n * @param {Gp.Point} options.startPoint - Start point of the route. Expressed in CRS:84 coordinates system (startPoint.x corresponds to longitude, startPoint.y corresponds to latitude). Available bbox are in the GetCapabilities.\n * @param {Gp.Point} options.endPoint - End point of the route. Expressed in CRS:84 coordinates system (endPoint.x corresponds to longitude, endPoint.y corresponds to latitude). Available bbox are in the GetCapabilities.\n * @param {Array.} [options.viaPoints] - Ordered via Points of the route. Expressed in CRS:84 coordinates system (viaPoints[i].x corresponds to longitude, viaPoints[i].y corresponds to latitude). Available bbox are in the GetCapabilities.\n * @param {String} [options.graph = \"Voiture\"] - User profile to use to compute the route : \"Voiture\" (using a vehicule) or \"Pieton\" (pedestrian). Has an influence on the kind of roads the route may use and the average speed. Available bbox are in the GetCapabilities.\n * @param {Array.} [options.exclusions] - DEPRECATED: use options.constraints. Indicates if route has to avoid some features (\"toll\", \"bridge\" or \"tunnel\").\n * @param {Boolean} [options.geometryInInstructions = false] - Indicates if route geometry has to be also returned with route instructions.\n * @param {Boolean} [options.provideBoundingBox = true] - Indicates if route instructions has to be localised with a BBOX in the response.\n * @param {String} [options.distanceUnit = \"m\"] - The unit used to provide distances in the response (\"meter\" or \"kilometer\").\n * @param {String} [options.timeUnit = \"second\"] - The unit used to provide duration in the response (\"standard\", \"second\", \"minute\", \"hour\").\n * @param {Array.} [options.waysAttributes] - Way Attributes to add in the response. Available values are in the GetCapabilities.\n * @param {Array.} [options.constraints] - Constraints used ({'constraintType':'banned','key':'ways_type','operator':'=','value':'autoroute'}). Available values are in the GetCapabilities.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.RouteResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.outputFormat='json'] - Output format (\"json\" or \"xml\") to use for underlying webService. Only use if you know what you are doing.\n * @param {String} [options.serverUrl=https://data.geopf.fr/navigation/itineraire] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n route : function (options) {\n var routeService = new Route(options);\n routeService.call();\n },\n /**\n * Computing a set of places (curve) reachable from a given point (or from where to start to reach a given point) within a time or distance constraint using the [isochrone service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/isochrones.html}.\n *\n * @method isoCurve\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} options.resource - Resource used to compute the route. Available values are in the GetCapabilities.\n * @param {Gp.Point} options.position - Start or Arrival (options.reverse===true) Point for the computing. Expressed in CRS:84 coordinates system (position.x corresponds to longitude, position.y corresponds to latitude).\n * @param {String} [options.graph = \"Voiture\"] - User profile to use to compute the isoCurve : \"Voiture\" (using a vehicule) or \"Pieton\" (pedestrian). Has an influence on the kind of roads to use and the average speed. Available values are in the GetCapabilities.\n * @param {Array.} [options.exclusions] - DEPRECATED: use options.constraints. Indicates if route has to avoid some features (\"toll\", \"bridge\" or \"tunnel\").\n * @param {Array.} [options.constraints] - Constraints used ({'constraintType':'banned','key':'ways_type','operator':'=','value':'autoroute'}). Available values are in the GetCapabilities.\n * @param {String} [options.method = \"time\"] - Computing method to use : \"time\" (using a duration as a constraint) or \"distance\" (using a distance as a constraint). Available values are in the GetCapabilities.\n * @param {Float} options.time - Maximum duration (expressed in seconds) to use when options.method is set to \"time\".\n * @param {Float} options.distance - Maximum distance (expressed in meters) to use when options.method is set to \"distance\".\n * @param {Boolean} [options.reverse = false] - Set this parameter to true if you want options.position to be the destination (instead of departure) for the computing.\n * @param {String} [options.distanceUnit = \"km\"] - The unit used to provide distances in the response (\"m\" or \"km\").\n * @param {String} [options.timeUnit = \"second\"] - The unit used to provide duration in the response (\"standard\", \"second\", \"minute\", \"hour\").\n * @param {Boolean} [options.smoothing = false] - DEPRECATED: Set this parameter to true if you want the resulting geometry to be smoothed.\n * @param {Boolean} [options.holes = false] - DEPRECATED: Set this parameter to true if you want the resulting geometry (polygon) to have holes if pertinent.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.IsoCurveResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.outputFormat='json'] - Output format (\"json\") to use for underlying webService. Only use if you know what you are doing.\n * @param {String} [options.serverUrl=https://data.geopf.fr/navigation/isochrone] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n isoCurve : function (options) {\n var processIsoCurveService = new ProcessIsoCurve(options);\n processIsoCurveService.call();\n }\n};\n\n/**\n * Point object.\n *\n * @namespace\n * @alias Gp.Point\n *\n * @property {Float} x - Point abscissa\n * @property {Float} y - Point ordinate\n */\nvar point = {};\n\n/**\n * Circle object.\n *\n * @namespace\n * @alias Gp.Circle\n *\n * @property {Float} x - Circle center abscissa.\n * @property {Float} y - Circle center ordinate.\n * @property {Float} radius - Circle radius.\n */\nvar circle = {};\n\n/**\n * Bounding box object, expressed with four coordinates.\n *\n * @namespace\n * @alias Gp.BBox\n *\n * @property {Float} left - minimum abscissa\n * @property {Float} right - maximum abscissa\n * @property {Float} bottom - minimum ordinate\n * @property {Float} top - maximum ordinate\n */\nvar bbox = {};\n\nexport default Services;\n","/**\n* Global variable Gp.\n*\n* @module Gp\n* @alias Gp\n* @description\n*\n* This is the global variable that is exposed in the browser environment.\n* Content is composed of constructor, functions and properties...\n*\n* > {@link Gp.Error Error()}\n* - .TYPE_SRVERR : \"SERVICE_ERROR\"\n* - .TYPE_UNKERR : \"UNKNOWN_ERROR\"\n* - .TYPE_USEERR : \"USAGE_ERROR\"\n*\n* > {@link module:Helper Helper}\n* - .indent()\n* - .normalyzeParameters()\n* - .normalyzeUrl()\n*\n* > {@link module:XHR Protocols.XHR}\n* - .call()\n*\n* > {@link module:Services Services (objects)}\n* - .Alti\n* - {@link Gp.Services.Alti.Elevation .Elevation()}\n* - {@link Gp.Services.AltiResponse .AltiResponse()}\n* - .AutoComplete\n* - {@link Gp.Services.AutoComplete.SuggestedLocation .SuggestedLocation()}\n* - {@link Gp.Services.AutoCompleteResponse .AutoCompleteResponse()}\n* - {@link Gp.Services.Config .Config()}\n* - {@link Gp.Services.DefaultUrl .DefaultUrl()}\n* - {@link Gp.Services.GeocodeResponse .GeocodeResponse()}\n* - {@link Gp.Services.GetConfigResponse .GetConfigResponse()}\n* - {@link Gp.Services.IsoCurveResponse .IsoCurveResponse()}\n* - .Route\n* - {@link Gp.Services.Route.RouteInstruction .RouteInstruction()}\n* - {@link Gp.Services.RouteResponse .RouteResponse()}\n*\n* > Services (factory)\n* - {@link module:Services~autoComplete .autoComplete()}\n* - {@link module:Services~geocode .geocode()}\n* - {@link module:Services~getAltitude .getAltitude()}\n* - {@link module:Services~getConfig .getConfig()}\n* - {@link module:Services~isoCurve .isoCurve()}\n* - {@link module:Services~reverseGeocode .reverseGeocode()}\n* - {@link module:Services~route .route()}\n*\n* > servicesDate : \"YYYY-MM-DD\"\n*\n* > servicesVersion : \"X.X.X\"\n*\n*/\n\nimport Services from \"./Services/Services\";\nimport DefaultUrl from \"./Services/DefaultUrlService\";\nimport AltiResponse from \"./Services/Alti/Response/model/AltiResponse\";\nimport Elevation from \"./Services/Alti/Response/model/Elevation\";\nimport AutoCompleteResponse from \"./Services/AutoComplete/Response/model/AutoCompleteResponse\";\nimport SuggestedLocation from \"./Services/AutoComplete/Response/model/SuggestedLocation\";\nimport IsoCurveResponse from \"./Services/ProcessIsoCurve/Response/model/ProcessIsoCurveResponse\";\nimport RouteResponse from \"./Services/Route/Response/model/RouteResponse\";\nimport RouteInstruction from \"./Services/Route/Response/model/RouteInstruction\";\nimport Config from \"./Services/Config/Config\";\nimport XHR from \"./Protocols/XHR\";\nimport Error from \"./Exceptions/ErrorService\";\nimport Helper from \"./Utils/Helper\";\n\nimport Pkg from \"../package.json\";\n\n/** Version */\nexport const servicesVersion = Pkg.version;\n/** Publication date */\nexport const servicesDate = Pkg.date;\n\n// on declare les ns dans root global\nvar Gp = {};\n\nGp.servicesVersion = servicesVersion;\nGp.servicesDate = servicesDate;\n\n// Export Protocols\nGp.Protocols = {};\nGp.Protocols.XHR = XHR;\n// Export services\nGp.Services = Services;\n// Export DefaultUrls\nGp.Services.DefaultUrl = DefaultUrl;\n// Export Alti\nGp.Services.AltiResponse = AltiResponse;\nGp.Services.Alti = {};\nGp.Services.Alti.Elevation = Elevation;\n// Export Autocomplete\nGp.Services.AutoCompleteResponse = AutoCompleteResponse;\nGp.Services.AutoComplete = {};\nGp.Services.AutoComplete.SuggestedLocation = SuggestedLocation;\n// Export Config\nGp.Services.Config = Config;\n// Export IsoCurve\nGp.Services.IsoCurveResponse = IsoCurveResponse;\n// Export Route\nGp.Services.RouteResponse = RouteResponse;\nGp.Services.Route = {};\nGp.Services.Route.RouteInstruction = RouteInstruction;\n// Export Erreurs et Outils\nGp.Error = Error;\nGp.Helper = Helper;\n\nexport default Gp;\n","import * as Log from \"loglevel\";\n\n/**\n * @module LoggerByDefault\n * @alias module:~utils/Logger\n * @description\n * ...\n *\n * @example\n * import Logger from \"gpf-ext-ol/utils/LoggerByDefault\"\n * ou \n * import {Logger} from \"gpf-ext-ol\n * \n * Logger.getLogger();\n * Logger.disableAll();\n * Logger.enableAll();\n */\nvar LoggerByDefault = {\n /**\n * creation d'un logger statique\n *\n * @function getLogger\n * @param {String} [name=\"default\"] - the logger name\n * @returns {Object} logger\n */\n getLogger : function (name) {\n // on définit process si non défini dans l'environnement\n if (typeof process === \"undefined\") {\n var process = {};\n process.env = {\n VERBOSE : false\n };\n }\n (process.env.VERBOSE) ? Log.enableAll() : Log.disableAll();\n var logname = name || \"default\";\n return Log.getLogger(logname);\n },\n /**\n * desactive tous les loggers\n * @function disableAll\n */\n disableAll : function () {\n var loggers = Log.getLoggers();\n for (const key in loggers) {\n if (Object.hasOwnProperty.call(loggers, key)) {\n const logger = loggers[key];\n logger.disableAll();\n }\n }\n },\n /**\n * active tous les loggers\n * @function enableAll\n */\n enableAll : function () {\n var loggers = Log.getLoggers();\n for (const key in loggers) {\n if (Object.hasOwnProperty.call(loggers, key)) {\n const logger = loggers[key];\n logger.enableAll();\n }\n }\n }\n};\n\nexport default LoggerByDefault;\n\n// Expose Export as ol.control.Catalog (for a build bundle)\nif (window.Gp) {\n window.Gp.Logger = LoggerByDefault;\n}\n","import Logger from \"./LoggerByDefault\";\n\n/**\n* @module ProxyUtils\n* @alias module:~utils/ProxyUtils\n* @description\n* ...\n*\n* @example\n* proxifyUrl();\n*/\nvar ProxyUtils = {\n /**\n * Ajoute un proxy aux url des couches vecteurs si besoin.\n *\n * @function proxifyUrl\n * @param {String} url - Url to proxify.\n * @param {Object} [proxyOptions] - Object defining proxy options.\n * @param {String} proxyOptions.proxyUrl - Proxy URL.\n * @param {Array.} [proxyOptions.noProxyDomains] - Proxy will not be used for this list of domain names.\n *\n * @returns {String} proxy url\n */\n proxifyUrl : function (url, proxyOptions) {\n // logger\n\n var logger = Logger.getLogger(\"proxifyUrl\");\n\n if (!proxyOptions ||\n !proxyOptions.hasOwnProperty(\"proxyUrl\") ||\n proxyOptions.proxyUrl === null ||\n proxyOptions.proxyUrl.trim().length === 0) {\n return url;\n }\n // on regarde si l'url nest pas dans les domaines sans proxy\n if (proxyOptions.noProxyDomains &&\n Array.isArray(proxyOptions.noProxyDomains) &&\n proxyOptions.noProxyDomains.length > 0) {\n for (var i in proxyOptions.noProxyDomains) {\n logger.trace(\"[ProxyUtils] proxifyUrl : analyzing \" + proxyOptions.noProxyDomains[i]);\n if (url.indexOf(proxyOptions.noProxyDomains[i]) !== -1) {\n logger.info(\"[ProxyUtils] proxifyUrl : \" + url + \" found in noProxyDomains list (\" + proxyOptions.noProxyDomains[i] + \").\");\n return url;\n }\n }\n }\n return proxyOptions.proxyUrl + encodeURIComponent(url);\n }\n};\n\nexport default ProxyUtils;\n","// import OpenLayers\nimport Overlay from \"ol/Overlay\";\nimport VectorTileSource from \"ol/source/VectorTile\";\nimport VectorSource from \"ol/source/Vector\";\nimport TileWMSSource from \"ol/source/TileWMS\";\nimport WMTSSource from \"ol/source/WMTS\";\nimport ImageWMSSource from \"ol/source/ImageWMS\";\nimport {\n Select as SelectInteraction,\n Modify as ModifyInteraction,\n Draw as DrawInteraction\n} from \"ol/interaction\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport ProxyUtils from \"../../Utils/ProxyUtils\";\n// import $__xmldom from \"xmldom\";\n\nvar logger = Logger.getLogger(\"GfiUtils\");\n\nvar Gfi = {\n\n /**\n * Return layer format\n *\n * @param {ol.layer.Layer} l - layer openlayers\n *\n * @return {String} format - layer format can be wms, wmts, vector or unknown\n *\n */\n getLayerFormat : function (l) {\n // la fonction 'getType' existe uniquement en mode source es6.\n // le bundle ol ne fournit pas cette fonction !?\n var type = (typeof l.getType === \"function\") ? l.getType() : null;\n var source = l.getSource();\n if (type) {\n if (type === \"VECTOR\" || type === \"VECTOR_TILE\") {\n return \"vector\";\n }\n if (type === \"TILE\") {\n if (source.tileGrid) {\n return \"wmts\";\n } else {\n return \"wms\";\n }\n }\n if (type === \"IMAGE\") {\n return \"wms\";\n }\n } else {\n if (source instanceof TileWMSSource || source instanceof ImageWMSSource) {\n return \"wms\";\n }\n if (source instanceof WMTSSource) {\n return \"wmts\";\n }\n if (source instanceof VectorSource || source instanceof VectorTileSource) {\n return \"vector\";\n }\n }\n return \"unknown\";\n },\n\n /**\n * Info Popup creation and display\n *\n * @param {ol.Map} map - map openlayers\n * @param {ol.Coordinate} coords - coordinates where to anchor popup.\n * @param {String} content - content to display\n * @param {String} [contentType='text/html'] - content mime-type\n * @param {Object} autoPanOptions - Auto-pan pop-up options\n * @param {Boolean|Object} [autoPanOptions.autoPan] - Specifies whether the map should auto-pan if the pop-up is rendered outside of the canvas (See {@link https://openlayers.org/en/latest/apidoc/module-ol_Overlay.html#~PanIntoViewOptions PanIntoViewOptions})\n * @param {Object} [autoPanOptions.autoPanAnimation] - Used to customize the auto-pan animation. See {@link https://openlayers.org/en/latest/apidoc/module-ol_Overlay.html#~PanOptions PanOptions}.\n * @param {Number} [autoPanOptions.autoPanMargin] - Margin (in pixels) between the pop-up and the border of the map when autopanning. Default is 20.\n * @return {Boolean} displayed - indicates if something has been displayed\n */\n displayInfo : function (map, coords, content, contentType, autoPanOptions) {\n logger.trace(\"[Gfi] : displayInfo...\");\n\n if (!contentType) {\n contentType = \"text/html\";\n }\n\n if (content === null) {\n return;\n }\n\n var _htmlDoc = null;\n var _parser = null;\n\n var _content = content;\n _content = _content.replace(/\\n/g, \"\");\n _content = _content.replace(/(>)\\s*(<)/g, \"$1$2\");\n\n var scope = typeof window !== \"undefined\" ? window : null;\n\n if (typeof exports === \"object\" && window === null) {\n // code for nodejs\n var DOMParser = require(\"@xmldom/xmldom\").DOMParser;\n _parser = new DOMParser();\n _htmlDoc = _parser.parseFromString(_content, contentType);\n } else if (scope.DOMParser) {\n // code for modern browsers\n _parser = new scope.DOMParser();\n _htmlDoc = _parser.parseFromString(_content, contentType);\n } else if (scope.ActiveXObject) {\n // code for old IE browsers\n _htmlDoc = new scope.ActiveXObject(\"Microsoft.XMLDOM\");\n _htmlDoc.async = false;\n _htmlDoc.loadXML(_content);\n } else {\n logger.log(\"Incompatible environment for DOM Parser !\");\n return false;\n }\n\n var body = _htmlDoc.getElementsByTagName(\"body\");\n if (body && body.length === 1) {\n if (!body[0].hasChildNodes()) {\n return false;\n }\n }\n\n // Affichage des features.\n var element = document.createElement(\"div\");\n element.className = \"gp-feature-info-div\";\n\n var closer = document.createElement(\"button\");\n closer.className = \"gp-styling-button closer\";\n\n // fait disparaître la popup au clic sur x\n closer.onclick = function () {\n if (map.featuresOverlay) {\n map.removeOverlay(map.featuresOverlay);\n map.featuresOverlay = null;\n }\n return false;\n };\n\n var contentDiv = document.createElement(\"div\");\n contentDiv.className = \"gp-features-content-div\";\n contentDiv.innerHTML = content;\n /*\n if (content instanceof HTMLElement) {\n this.logger.trace(\"[Openlayers] : _displayInfo : pure HTMLElement\") ;\n contentDiv.appendChild(content) ;\n } else {\n var parser = new DOMParser() ;\n var doc = null ;\n try {\n doc = parser.parseFromString(content,contentType) ;\n this.logger.trace(\"[Openlayers] : _displayInfo : HTMLElement from parser\") ;\n // FIXME : avec cette methode, on a une balise html + body qui s'insère...\n contentDiv.appendChild(doc.documentElement) ;\n } catch (e) {\n console.log(e) ;\n this.logger.trace(\"[Openlayers] : _displayInfo : parsing content failed (not HTML)\") ;\n // en cas d'erreur : on se contente de recopier le contenu.\n contentDiv.innerHTML = content ;\n }\n }\n */\n element.appendChild(contentDiv);\n element.appendChild(closer);\n\n if (map.featuresOverlay) {\n // fermeture d'une éventuelle popup déjà ouverte.\n map.removeOverlay(map.featuresOverlay);\n map.featuresOverlay = null;\n }\n map.featuresOverlay = new Overlay({\n // id : id,\n element : element,\n autoPan : autoPanOptions.autoPan,\n autoPanAnimation : autoPanOptions.autoPanAnimation,\n autoPanMargin : autoPanOptions.autoPanMargin,\n positioning : \"bottom-center\",\n insertFirst : false, // popup appears on top of other overlays if any\n stopEvent : true\n });\n map.addOverlay(map.featuresOverlay);\n map.featuresOverlay.setPosition(coords);\n map.featuresOverlay.render();\n\n return true;\n },\n\n /**\n * Gets HTML content from features array\n *\n * @param {ol.Map} map - map openlayers\n * @param {Array.} features - openlayers features Array\n * @returns {HTMLElement} HTML content.\n */\n features2html : function (map, features) {\n var content = document.createElement(\"div\");\n features.forEach(function (f) {\n var props = f.getProperties();\n // si la properties 'render' est presente,\n // on ajoute directement le rendu HTML dans la balise principale\n if (props.hasOwnProperty(\"render\")) {\n // content.innerHTML = props[\"render\"].trim();\n // content.appendChild(props[\"render\"]);\n content.insertAdjacentHTML(\"beforeend\", props[\"render\"]);\n } else {\n if (props.hasOwnProperty(\"name\")) {\n var nameDiv = document.createElement(\"div\");\n nameDiv.className = \"gp-att-name-div\";\n // nameDiv.appendChild(document.createTextNode(props[\"name\"])) ;\n nameDiv.insertAdjacentHTML(\"afterbegin\", props[\"name\"]);\n content.appendChild(nameDiv);\n }\n if (props.hasOwnProperty(\"description\")) {\n var descDiv = document.createElement(\"div\");\n descDiv.className = \"gp-att-description-div\";\n // descDiv.appendChild(document.createTextNode(props[\"description\"])) ;\n descDiv.insertAdjacentHTML(\"afterbegin\", props[\"description\"]);\n content.appendChild(descDiv);\n }\n var p = null;\n var others = false;\n var oDiv = null;\n var ul = null;\n var li = null;\n // Liste des properties à retirer de la visualisation :\n var listForbidden = [\n // styles\n \"fill\",\n \"fill-opacity\",\n \"stroke\",\n \"stroke-opacity\",\n \"stroke-width\",\n \"marker-symbol\",\n \"marker-color\",\n \"marker-size\",\n \"geometry\", // geometrie\n \"value\",\n \"name\", // déjà traité\n \"description\", // déjà traité\n \"styleUrl\",\n \"extensionsNode_\", // extensions GPX\n \"icon\" // ajouté par la 3D en cas de switch\n ];\n for (p in props) {\n if (props[p] === undefined) {\n continue;\n }\n if (listForbidden.indexOf(p) !== -1) {\n continue;\n }\n if (!others) {\n oDiv = document.createElement(\"div\");\n oDiv.className = \"gp-att-others-div\";\n ul = document.createElement(\"ul\");\n others = true;\n }\n li = document.createElement(\"li\");\n var span = document.createElement(\"span\");\n span.className = \"gp-attname-others-span\";\n span.appendChild(document.createTextNode(p + \" : \"));\n li.appendChild(span);\n li.appendChild(document.createTextNode(props[p]));\n ul.appendChild(li);\n }\n if (ul) {\n oDiv.appendChild(ul);\n content.appendChild(oDiv);\n }\n }\n }, map);\n\n // pas de contenu !\n if (!content.hasChildNodes()) {\n content = null;\n }\n\n return content;\n },\n\n /**\n * Indicates if there is a feature at the given coordinates for the given layer\n *\n * @param {ol.Map} map - map openlayers\n * @param {ol.layer.Layer} olLayer - vector layer openlayers\n * @param {ol.Coordinate} olCoordinate - coordinates pointed by user\n *\n * @return {Boolean} has feature\n *\n */\n layerGetFeatureAtCoordinates : function (map, olLayer, olCoordinate) {\n var pixel = map.getPixelFromCoordinate(olCoordinate);\n return map.hasFeatureAtPixel(pixel, function (layer) {\n if (layer === olLayer) {\n return true;\n }\n return false;\n });\n },\n\n /**\n * Get information from all the features located at the specified coordinates\n * and belonging to the layers list argument. Those information are gathered\n * and displayed in an info popup.\n *\n * @param {ol.Map} map - map openlayers\n * @param {ol.Coordinate} olCoordinate - coordinates pointed by user\n * @param {Array.} olLayers - layers requested\n * @param {Object} autoPanOptions - autopan options\n *\n * @returns {Boolean} something is displayed\n *\n */\n displayVectorFeatureInfo : function (map, olCoordinate, olLayers, autoPanOptions) {\n var pixel = map.getPixelFromCoordinate(olCoordinate);\n\n // couches vecteur : on remplit un tableau avec les features à proximité.\n var features = [];\n map.forEachFeatureAtPixel(pixel, function (feature, layer) {\n if (!olLayers || olLayers.indexOf(layer) > -1) {\n features.push(feature);\n }\n });\n if (features.length === 0) {\n // no features\n return false;\n }\n var content = this.features2html(map, features);\n // pas de contenu !\n if (content === null) {\n return false;\n }\n // Affichage des features.\n this.displayInfo(map, olCoordinate, content.innerHTML, \"text/html\", autoPanOptions);\n // this._displayInfo(evt.coordinate,content,\"text/html\") ;\n return true;\n },\n\n /**\n * Method to manage the request of information from a list of layers already added to the map.\n * Among the given list of layers only the visible ones are requested.\n * The priority is given to the upper layer having a feature at the pointed coordinates.\n * If the first (upper) feature encountered is from a vector layer the info popup will\n * display the information of the features from all visible vector layers and located at\n * the specified coordinates.\n *\n * @param {ol.Map} map - map openlayers\n * @param {ol.Coordinate} olCoordinate - coordinates pointed by user\n * @param {Array.} gfiLayers - list of layers which can be requested through the control. Each array element is an object, with following properties :\n * @param {ol.layer.Layer} gfiLayers.obj - ol.layer.Layer layer handled by the control (that has been added to map).\n * @param {String} [gfiLayers.event] - name of the mouse event triggering getFeatureInfo on this layer (that has been added to map). allowed values are : 'singleclick', 'dblclick' and 'contextmenu'\n * @param {String} [gfiLayers.infoFormat] - indicates the format mime-type of the response of GetFeatureInfo requests.\n * @param {Object} [proxyOptions] - options for poxy configuration :\n * @param {String} [proxyOptions.proxyUrl] - Proxy URL to avoid cross-domain problems, if not already set in mapOptions. Mandatory to import WMS and WMTS layer.\n * @param {Array.} [proxyOptions.noProxyDomains] - Proxy will not be used for this list of domain names. Only use if you know what you're doing (if not already set in mapOptions).\n * @param {Object} [autoPanOptions] - Auto-pan pop-up options\n * @param {Boolean} [autoPanOptions.autoPan = true] - Specifies whether the map should auto-pan if the pop-up is rendered outside of the canvas. Defaults to true.\n * @param {Object} [autoPanOptions.autoPanAnimation] - Used to customize the auto-pan animation. See {@link https://openlayers.org/en/latest/apidoc/module-ol_Overlay.html#~PanOptions PanOptions}.\n * @param {Number} [autoPanOptions.autoPanMargin] - Margin (in pixels) between the pop-up and the border of the map when autopanning. Default is 20.\n *\n */\n displayFeatureInfo : function (map, olCoordinate, gfiLayers, proxyOptions, autoPanOptions) {\n // Layers orders\n var layersOrdered = {};\n for (var j = 0; j < gfiLayers.length; j++) {\n var layer = gfiLayers[j];\n var position = layer.obj.getZIndex();\n if (!layersOrdered[position]) {\n layersOrdered[position] = [];\n }\n layersOrdered[position].push(layer);\n }\n\n // affichage de la première popup d'informations en partant du dessus...\n var requests = [];\n // inversion de l'ordre des layers\n var positions = Object.keys(layersOrdered);\n positions.sort(function (a, b) {\n return b - a;\n });\n\n // si la 1ere couche affichable est de type vecteur on affiche les infos de toutes\n // les couches vecteur qui suivent. Par consequent, une seule requete vecteur suffit\n // (celle correspondant au premier objet vecteur rencontre)\n var foundFeature = false;\n\n for (var k = 0; k < positions.length; k++) {\n var p = positions[k];\n for (var h = 0; h < layersOrdered[p].length; ++h) {\n var l = layersOrdered[p][h].obj;\n var infoFormat = layersOrdered[p][h].infoFormat || \"text/html\";\n var minMaxResolutionOk = true;\n if (l.minResolution &&\n l.minResolution > map.getResolution()) {\n minMaxResolutionOk = false;\n }\n if (minMaxResolutionOk &&\n l.maxResolution &&\n l.maxResolution < map.getResolution()) {\n minMaxResolutionOk = false;\n }\n\n if (l.getVisible() && minMaxResolutionOk) {\n var format = this.getLayerFormat(l);\n if (format === \"vector\") {\n if (!foundFeature && this.layerGetFeatureAtCoordinates(map, l, olCoordinate)) {\n requests.push({\n format : format,\n scope : this,\n coordinate : olCoordinate\n });\n }\n continue;\n } else if (format !== \"wms\" && format !== \"wmts\") {\n logger.log(\"[ERROR] DisplayFeatureInfo - layer format '\" + format + \"' not allowed\");\n continue;\n }\n\n var _res = map.getView().getResolution();\n var _url = null;\n // INFO\n // en fonction de la version d'openlayers, la méthode est differente :\n // - getGetFeatureInfoUrl en v5\n // - getFeatureInfoUrl en v6\n if (format === \"wmts\") {\n // eslint-disable-next-line no-useless-call\n _url = l.getSource().getFeatureInfoUrl.call(l.getSource(),\n olCoordinate,\n _res,\n map.getView().getProjection(), {\n INFOFORMAT : infoFormat\n }\n );\n } else {\n // eslint-disable-next-line no-useless-call\n _url = l.getSource().getFeatureInfoUrl.call(l.getSource(),\n olCoordinate,\n _res,\n map.getView().getProjection(), {\n INFO_FORMAT : infoFormat\n }\n );\n }\n\n requests.push({\n // id : _id,\n format : infoFormat,\n url : ProxyUtils.proxifyUrl(_url, proxyOptions),\n scope : this,\n coordinate : olCoordinate\n });\n }\n }\n }\n\n // on recupere les couches vecteur ordonnees (a utiliser dans le cas de l'affichage de donnees vecteur)\n var vectorLayersOrdered = null;\n\n // call request sync\n function requestsSync (list, iterator, callback) {\n if (list.length === 0) {\n return;\n }\n var nextItemIndex = 0;\n // function report next request\n function report (displayed) {\n nextItemIndex++;\n if (displayed || nextItemIndex === list.length) {\n callback();\n } else {\n iterator(list[nextItemIndex], report);\n }\n }\n // instead of starting all the iterations, we only start the 1st one\n iterator(list[0], report);\n };\n\n var context = this;\n\n requestsSync(requests,\n function (data, report) {\n if (data.format === \"vector\") {\n if (!vectorLayersOrdered) {\n vectorLayersOrdered = [];\n for (var m = 0; m < positions.length; m++) {\n var p = positions[m];\n for (var n = 0; n < layersOrdered[p].length; ++n) {\n vectorLayersOrdered.push(layersOrdered[p][n].obj);\n }\n }\n }\n report(data.scope.displayVectorFeatureInfo(map, data.coordinate, vectorLayersOrdered, autoPanOptions));\n } else {\n // var self = data.scope;\n Gp.Protocols.XHR.call({\n url : data.url,\n method : \"GET\",\n scope : data.scope,\n // Handles GFI response\n onResponse : function (resp) {\n var exception = false;\n\n // a t on une exception ?\n // \n // \n // \n // java.lang.OutOfMemoryError: Java heap space\n // Java heap space\n // \n // \n if (resp.trim().length === 0 ||\n resp.indexOf(\"ServiceExceptionReport\") !== -1 ||\n resp.indexOf(\"java.lang.NullPointerException\") !== -1 ||\n resp.indexOf(\"java.lang.OutOfMemoryError\") !== -1 ||\n resp.indexOf(\"not queryable\") !== -1) {\n // rien à afficher\n exception = true;\n }\n\n // on affiche la popup GFI !\n var displayed = !exception && context.displayInfo(map, data.coordinate, resp, \"text/html\", autoPanOptions);\n // on reporte sur la prochaine requête...\n report(displayed);\n },\n // Handles GFI response error\n onFailure : function (error) {\n logger.log(error);\n report(false);\n }\n });\n }\n },\n function () {\n logger.trace(\"Finish sync to GFI !\");\n }\n );\n },\n\n // Function returning the clicked position of an event\n getPosition : function (e, map) {\n if (e.coordinate) {\n return e.coordinate;\n }\n\n var pixel = [0, 0];\n\n if (e.offsetX || e.offsetY) {\n pixel[0] = e.offsetX; // + document.body.scrollLeft + document.documentElement.scrollLeft;\n pixel[1] = e.offsetY; // + document.body.scrollTop + document.documentElement.scrollTop;\n } else if (e.pointerType === \"touch\") {\n // a implementer !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n // Safari iOS / iPhone en mode Touch (cf. hammer)\n var p = e.pointers[0];\n pixel[0] = p.pageX;\n pixel[1] = p.pageY;\n }\n\n var coordinate = map.getCoordinateFromPixel(pixel);\n return coordinate;\n },\n\n // onDisplayFeatureInfo\n onDisplayFeatureInfo : function (e, gfiObj) {\n if (!gfiObj.isActive()) {\n return;\n }\n\n logger.trace(e);\n\n var map = gfiObj.getMap();\n\n if (e.type === \"contextmenu\" || e.type === \"dblclick\") {\n e.preventDefault();\n } else if (e.type === \"singleclick\") {\n var interactions = map.getInteractions().getArray();\n for (var i = 0; i < interactions.length; i++) {\n if (interactions[i].getActive() &&\n (interactions[i] instanceof SelectInteraction ||\n interactions[i] instanceof ModifyInteraction ||\n interactions[i] instanceof DrawInteraction)\n ) {\n // si on a une interaction de dessin ou de sélection en cours, on ne fait rien.\n return;\n }\n }\n }\n\n var proxyOptions = {};\n if (gfiObj._proxyUrl) {\n proxyOptions.proxyUrl = gfiObj._proxyUrl;\n }\n if (gfiObj._noProxyDomains) {\n proxyOptions.noProxyDomains = gfiObj._noProxyDomains;\n }\n\n var autoPanOptions = {};\n if (gfiObj._autoPan) {\n autoPanOptions.autoPan = gfiObj._autoPan;\n }\n if (gfiObj._autoPanAnimation) {\n autoPanOptions.autoPanAnimation = gfiObj._autoPanAnimation;\n }\n if (gfiObj._autoPanMargin) {\n autoPanOptions.autoPanMargin = gfiObj._autoPanMargin;\n }\n\n var eventLayers = [];\n for (var j = 0; j < gfiObj._layers.length; ++j) {\n var event = (gfiObj._layers[j].event) ? gfiObj._layers[j].event : gfiObj._defaultEvent;\n if (event === e.type) {\n var ind = eventLayers.push(gfiObj._layers[j]) - 1;\n if (!eventLayers[ind].infoFormat) {\n eventLayers[ind].infoFormat = gfiObj._defaultInfoFormat;\n }\n }\n }\n\n var coords = this.getPosition(e, map);\n\n this.displayFeatureInfo(map, coords, eventLayers, proxyOptions, autoPanOptions);\n }\n};\n\nexport default Gfi;\n\n// Expose Gfi as ol.gp.GfiUtils (for a build bundle)\nif (window.ol) {\n if (window.ol.gp) {\n window.ol.gp.GfiUtils = Gfi;\n } else {\n window.ol.gp = {\n GfiUtils : Gfi\n };\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.format.KML;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style;","/**\n * @module ColorUtils\n * @alias module:~utils/ColorUtils\n * @description\n * ...\n *\n * @example\n * import ColorUtils from \"gpf-ext-ol/utils/ColorUtils\"\n * ou \n * import {ColorUtils} from \"gpf-ext-ol\n * \n * ColorUtils.hex();\n * ColorUtils.num();\n * ColorUtils.arrayTorgba();\n * ColorUtils.arrayToHex();\n * ColorUtils.rgbaToHex();\n * ColorUtils.hexToRgba();\n * ColorUtils.isHex();\n * ColorUtils.isRGB();\n */\nvar ColorUtils = {\n\n /**\n * Number to hex conversion\n *\n * @param {Number} number - 0-255\n * @returns {String} hex value\n */\n hex : function (number) {\n if (number > 255) {\n throw new Error(\"'\" + number + \"'' is greater than 255(0xff);\");\n }\n var str = Number(number).toString(16);\n return (\"0\" + str).slice(-2);\n },\n\n /**\n * Hexa to number conversion\n *\n * @param {*} hexa 00-FF\n * @returns {Number} number value\n */\n num : function (hexa) {\n return parseInt(hexa, 16);\n },\n\n /**\n * Converts an array ([255,255,255,1]) to rgba string\n *\n * @function arrayToRgba\n * @param {Array} values - array of values\n * @returns {String} A color of RGB or RGBA format\n */\n arrayToRgba : function (values) {\n if (!Array.isArray(values)) {\n throw new Error(\"Not an array !\");\n }\n var red = values[0];\n var green = values[1];\n var blue = values[2];\n var alpha = values[3] || 1;\n var result = \"rgba(\" + red + \", \" + green + \", \" + blue + \", \" + parseFloat(alpha) + \")\";\n return result;\n },\n\n /**\n * Converts an array ([255,255,255,1]) to #RRGGBBAA\n *\n * @function arrayToHex\n * @param {Array} values - array of values\n * @returns {Object} hex and opacity formated values\n */\n arrayToHex : function (values) {\n if (!Array.isArray(values)) {\n throw new Error(\"Not an array !\");\n }\n var red = values[0];\n var green = values[1];\n var blue = values[2];\n var alpha = values[3];\n var elems = [this.hex(red), this.hex(green), this.hex(blue)];\n var result = {};\n result.hex = \"#\" + elems.join(\"\");\n if (alpha) {\n // elems.push(hex(alpha));\n result.opacity = parseFloat(alpha);\n }\n return result;\n },\n\n /**\n * Converts rgba string to #RRGGBBAA\n * (Code adapted from : https://gist.github.com/mstssk/afda4ce9e5c335fd79cd)\n *\n * @function rgbaToHex\n * @param {String} rgba - A color of RGB or RGBA format.\n * @returns {Object} hex and opacity formated values\n */\n rgbaToHex : function (rgba) {\n var regex = /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(0?.?\\d+)\\s*)?\\)/;\n var parsed = regex.exec(rgba);\n if (!parsed) {\n throw new Error(\"Invalid format: \" + rgba);\n }\n var red = parsed[1];\n var green = parsed[2];\n var blue = parsed[3];\n var alpha = parsed[4];\n var elems = [this.hex(red), this.hex(green), this.hex(blue)];\n var result = {};\n result.hex = \"#\" + elems.join(\"\");\n if (alpha) {\n // elems.push(hex(alpha));\n result.opacity = parseFloat(alpha);\n }\n return result;\n },\n\n /**\n * Converts hex color and opacity value to rgba string.\n * (Code adapted from : http://stackoverflow.com/a/5624139)\n *\n * @function hexToRgba\n * @param {String} hex - A color value on RGB format (hexa).\n * @param {Number} opacity - A opacity value.\n * @returns {String} A color of RGB or RGBA format\n */\n hexToRgba : function (hex, opacity) {\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n if (!hex) {\n throw new Error(\"Invalid format\");\n }\n hex = hex.replace(shorthandRegex, function (m, r, g, b) {\n return r + r + g + g + b + b;\n });\n\n var rgb = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n rgb = rgb ? {\n r : parseInt(rgb[1], 16),\n g : parseInt(rgb[2], 16),\n b : parseInt(rgb[3], 16)\n } : null;\n var result = rgb ? \"rgba(\" + rgb.r + \", \" + rgb.g + \", \" + rgb.b + \", \" + opacity + \")\" : null;\n return result;\n },\n\n /**\n * Determine if value is a correct hexa color.\n * @param {*} value - hex color (#FFFFFF)\n * @returns {Boolean} True if value is a hexa color\n */\n isHex : function (value) {\n if (!value) {\n return false;\n }\n if (value.charAt(0) !== \"#\") {\n return false;\n }\n var regex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n var parsed = regex.exec(value);\n if (!parsed) {\n return false;\n }\n return true;\n },\n\n /**\n * Determine if value is a correct rgba color.\n * @param {*} value - rgba color (rgba(125,125,125,1))\n * @returns {Boolean} True if value is a rgba color\n */\n isRGB : function (value) {\n if (!value) {\n return false;\n }\n var regex = /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(0?.?\\d+)\\s*)?\\)/;\n var parsed = regex.exec(value);\n if (!parsed) {\n return false;\n }\n return true;\n }\n};\n\nexport default ColorUtils;\n","var Marker = {\n lightOrange : \"data:image/png;base64,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IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjkyYWVkNjM2LWY3MDMtNDAzOC1hNzM4LWZiYzYxYzZlMTljNCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5NWMzZWI3NC0zYWRmLTRkYzUtOWZjZS1iODQ4NTc3Nzg4ODQiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0NjI3ZDg3NC1lZDIyLTRiZTUtYTlkNS00NDlmMzVhZDIxYzgiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5Mjc4OTUzMDYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphM2U3ZWQ1MS0xNTI4LTRhYjAtODVjOS0zNzNkNzgxZGM2ZmMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjI3KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PofUkY4AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGRuA4VZTAAAFcElEQVRYw82YW2xbVRaGv7XP8bHjXByHQkNhWigdVX1AikRBMBoQ8wASl4fRqPDAAxIPKAVxeRqQRohHBEVCaoGKUBCl4qHcNKCZVKMRRQxtgTaACLRKqlwB14NzM2ni2D2XvXjgBFXQOnFiA1uy/HB89u9/7bX+vf4l1HnpK57hTNCE0AzqAS5gAAuEID5KiWSiLPf4tp7YUjcSu4yLZzdi2IJyNXANcBlwAdAKzAHTwDhwDKEPywC+GZWHbPi7IKOvZIWguAnlr8BtwJ+AxDJeDYCPgF6Ed0hkh+Weov5mZLTHJMDeBjwYk0itYJtKTOpZML3SbYNfnYz2SBr0buARYENcFytdFvga2AGyT7p14Vcjoz3ShOgdKDuAi+pUewpMIDyCypvSreWGk9HdroOEV2F4A1hfTxGJCX2D5U7U/UzuD6NaXq49NRJhBsOjwMVLEtE4gaL4W5cV3IsxPEoizDT0ZLTHcSH6M/BWLLlVwpQKuPzhb+i8sRkv04Y/e5rvPigxtnM9trKU2k0D28A5LN3RsmXbrbFOU8DtQLpqfJqu97nh6TydmzvwWpOI8VDbxqbrkmz62yk+/Ps6yoe8KkeV/hHHfgrMNyrNEkBX1SAktgRs3T7ApV1rSWayiEkDLmLSJDNZLu1ay9btAyS2BEsEuWuZ99WKyRhgHeCcn8wGw/qbOnAS3jmfOwmP9Td1kNhQDduJcUwjyciS0RJXMMkWkPPUo/z4XFxZRhZII8mEwFCsT+f5xXTE7FAOteduItVaZodyhNPVZDeKccJGkxmsChIMOvTt6aRSzIP+7A9rRKWYp29PJ8GgsyqcVauZSADaj+IDTecWvBlD4e01HKjM07XtOOuuy+A2X0BYmib/8SxfvLWRYm8LdqZaCvkI/SDBci6nld0ze7KCLa4F3gSurR4MB5x1FnMhiCeor9hJiPKmWpbGp3EU2IbJFuTe5XfStbczLxgP7K0IPcCFDWhnJoFuMAek2/oNbWdku/WxHATejT1JPZcPvINysFYiK+gAFkXTK6H+MyhXADeseJ9fmrVDM6X080/+p1M2/yFsD1zjEIauEeMAqNpQE16oaKiqwfjYeLk+fuYl10HDq7DsBTavxs8o6FzFKez/dM3rLx9LjUyVxcb7yVkfzmpXFbACJURHIxgyxkyu1ml6qL0Z4YX4xl7Jfrrgm9Ov9bX/e++x1tHCgkQ11lgELGA4sBp3iHRbH5GDwJPAFLXo6KJnDmTh/aG2w2/3t47VSGQxs1zAE9U2s9pEjx3hXuBloCa7G1rxv8o3f/7SkUz/UFFWMqGRWMpHAqsDbl00KGotIXM7MawF7gKSS5oJJRospI7v+rD96Ikp8aV2EgrkVPW4OnIy6SVL9ZubvZgyaOVyYDfwl2oNqVWiXNEb231oTe+/BrzvK9Gy01MFyoiOKzIEmqsEfjGf/39U1yHgosJFUXhlFMl+z9E/nkvhVNHZsjux+9Caf77RnyzMBaJLmW4RrWAlB3Y4Uh13HLOA4wQjo6O2IRPNxVV4JuG5Et2SSelzjtFLzsZQ0NIZ8/2rx7K9+/paxqbKvyh4Bc4AFQxzau23Dow7FS+nHmfEUz05OqINH8+evXJPJVOuE93XkY4eSziaXcQpB2b+vZNt7+/8IPPl2OxPRMJ4dDsLzIho3hpzamJ6aqJ0ei6qtZAasmZ2OS1RyOMd6egBIzSFVoKj4y1Hnvhv+8cD02ZOkEmgIKITVnXKWDs1ksvNrgbTbRSZ46cypY50aWcllIsyKXvr8GTyi9f6WvePFGVQhO8EPW2NzI+OfV2pF2bDTgbg8D/aJeVUspd1BK3/G24u7/skO3+iYP3h3LdhI/B+AGodUpo8WKwoAAAAAElFTkSuQmCC\",\n darkOrange : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAgCAYAAAC/40AfAAAStXpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjapZpplmO5boT/cxVeAkeQWA4H8BzvwMv3B0pV7qou26/tyk5JeXXFAQgEIqgO9h//fsO/8a/2KKG2PkRFIv+qVs2TFyN+/s33mGJ9j+9fKd/30q/XQ/5ej5lLftP3xiHf+39cTz8H+DxNXrW/DDT294316xtav+OP3wb6TlR8Rb6K8x1IvwOV/HkjfQeYn21F0dH/uoVln+fzYyfj8xv84f6ISf88/f537UTvNOYpOVtJJfL4DVbJxX9LKJMXjcdcKjem0t/r9q7/2BIB+VOcfv5TVnR9qfWPN/2SlZ+vfsvWNwJs7bds1fy9pfwWZPn5/MfrIbU/Z+WF/i8z1/F9lX+9nkpKnxX9Fv0X/HvGfXtmF7MKoZbvpn5s8b3ivsUUPvUILE3IjoChwbP/KD+DzW+gcOKOi5+dNGXSdVNNJ810k73nnTZLrNlC7rzIeefyLo7Ss+ZdPH/Vf9LNvWg5ZZDL/dJeS/65lvSm1bjDm20w80ncmhODJT7yj3/CP/3AvV4KBHi81KdPfnP2YLMMz5w/chsZSfcb1PYC/OPn93+e10IGm0fZS0QZen2GWC39FxOUl+jCjY3nTw2mfr4DECKmbiwGBNRE1lJpSVLsOfeUCOQgQZOle80sMpBay4dF5lqKkJuRfWo+0tO7NbfM5cB1yIxMtCLU2SBDk2TV2sBPrwMMzVZaba1J6200bVOKVGki0sVJcfbSa+itS+99dO1zlFFHGzL6GEPH1KwF0mwq2nWo6pzMORl58unJDXOuvMqqq4Ulq6+xdM0NfHbdbcvue2zd8+RTDvxx5PQzjp5pyYCSVWsm1m2Y2rxA7ZZw621Xbr/j6p0/s/ZN699+/kHW0jdr+WXKb+w/s8bV3n8MkZxOmueMhOVQExnvngIAnT1ncaRas2fOcxYV+ists8jmOTvJM0YGq6XcbvqRu5A/GfXM/b/yFnr9JW/5/5q54Kn7h5n7e97+lLXjJLxfxj5V+BiwUH3cM/PgP6r178/h+2IWNXr3IZDKnG1YHtrtFtaVWu1ilevx7tYtr7VXOy3nSum0NHSeHSC4lcbIFUozk32J9iFdrXthMcaFq0z0Wlp6+qg7HfZer+Z0+zpjlQ5fRmKkS8fOua1j1CP7llovW7E816hHdHtUrZ5+oz0IDLDFuIMOT2Rma2CHreke6c5TYFqCY9puXmPuPRcL6KvoarLOvlBpNrRL37lJbySs733aav2UesPNIHA2O7WlZr3tW+ML4QSvXKsuLPpsgL0u/mbyXnZpdPGZjOttnz2khypsW2Jt5Fozqdl8qnedcofdunR20BHbANt15T1WAltjrZ53p6nfQqC6rqBWe6l0nMIi9+69RD0LYHu7WZT7SBuQzttKZNQmaIJGvHZZtrsC2T07siMATFvb7ja2C4/eLpMY6Y3jssO25l3SrxyZyBE7R4kTA+Zia60CIJVPnhkqFFtZ7lbmX7OMuH2OHEEBv42VEN66HZf+st21L32sSZIpaVIuvZie0Ge0B9BFHxzfMMd/8DzkZjNwFFdW4zWFApTWlpP3vCOzxUm1FWKkBtHMW+zI2iReZFFt7DcKsCld21qB8OQjdRDXQhXmKB1CEcC+q2c0bT7SjLbfG228GPk7hRnhmQNmEQOdQj6htHgI3AZ5KV/KSy5Qvz4ukCY1hWWM0YhnSa3Uk9dmzdAdoeYHkiPXuQbNHUoZk0+U1KEXyZnw7UUCFyAmnmlQI1tjE1u3fEp+abX5p+r/Iz2QS1Kc9umzQg1lt3Lhw1NuHXclsLDiGHcfUBnKZe/sIx0kz6JICFA+2cTpDpqVDFCytG0wMyxRxibwdjZ7Il4ytbdVoBED6TSBNCbLX7lBnKTOUXZxF2o2nAngN2KboX6uU13NKlAVjWsOwqVSAwGjKo22ARgudUtcr3jbr7JqqgS73qGbknEAGrMVbrKz7oxe06mx+Z3Ct8DT//JMvxjD+NC4EX461F1OUiEZ9Fo6PQak4+Q9cFXp/RXYwfqdetl701wUChFKMN42b+9HHuVV8vC2TBo2vXVGDSCqz6sQl2sSK9HIcSu0Boa7ZhMwb2bxhfVtCl19V/kBwlpSpmxq7XRkqEtPSbqTM/gr6VupkEZLO4fWYHXTxiKN58CCXNsCME6+O0Pc7LgEgroA87HqGzRqHg7g1iwoZdilXwZ1KQgjzcFdjZZAWs+iOv16vVkgmkBYdJF2PuA6s/DJnibdlxZzJwDhCu6LAGRQmeH6TpWowl4bxmBRWhagC2iAc05T0HOmEgY2Au9Qj3bpoMwJCCe7bsTXYPTvhMNbNy35wNACBQfebVUHW6cb07j9jtu4NhM6gGYFw2/BSEz7shWMncc+X1RAvc6jEiaCB4r2pC2MMTlBMZVELQMZ8sm87CGvc2yZLlbHzL5AGkM370hIm3UtpL4vKf2U9EEeSP1X6XGmaf1u5kU+BYRD0+6xqOhky2zr/PWGv79/S1EEBfVpo592XV3EGVjeB2AddoXuX/mwwVzp5WiI5K2oRm6nfGNeDSKS00DeGClvsFMQXpYCssEzwwNTL5wNayGwm/Z/EJA80jz7ukpsB3THWulMHV13IAfym+m+VAleRFOX4kRD6SEbCCQl4mKfAWCOJhC9AtoeUZMtbl7SD8aBayBoffyKhlwj0/zovihoCM2J6cwrkAYIoUEAvaO8n82lBUATNBjkBuFAz2jX69Gii1xgw/YFTl9mr6KFjXbxEih0lDTYKeQDaGlYWEA21FAdcME9yQnMc3hDivcvCX9w+QmbsVAVDI0MBeQQnLNu/lxhFsL3+SBgK+Gf4ebcDyzS32AR/jFu+gc3v8IG6fcDNwhHF3qHHr2JKxWOxa4GvSBc5MDZFQxAfgK1S3NJHLvz9aTBQRjBdTjkIZooUtwD+YcX9bWmaXD04mOOlQcfkghzo2hSvcz6GCkT/9bCKBEhhWrfyE6KFNm7EVoFtQCBILKAYro1Ge9EBFtVWGDZhCwaHNAQyAnJH8MtiKZVBxYBAYpEVEJZkQkoCMNQb2xFRX4AJ8iqpu7AqLZ9YXR/yB6mA/BBYR6iTfPcvZZ4yvTwcA3VjiY/9MkL6fVUNBu690BZQJXyQOShufFPKAW2dg6qJaPqaRfwIi2p+/pxEpdcokQK3RHJqILUAfKsNV1uRStfGq4e8Or4COhH4vE/IvJ3PCqY/hWNgDH8y2hcU3c+NAb0VY2If0FNd5zlrVtbph0h75BRgNL7LH/ePtT7LAouIZ6E5v/6rFs9Yo8NQaluBzGOrKGMHVkrFJe+bVOGy7B/GAhBBjJg75Wx8G/e6RgXkjmsCy14jXxw+63UNLEr04kNyoc4BNw3rJ0r0a7S3L/ebkgoIU3XOR/oYyHZFn+IkR8FYWQQfYgUa8hjrIJMUtkPsgHxr191N/JPtdzzIlqomkJs0dZIJ0rB1wCVQlNSLeBzyAw6N4vEM1B34oIfH5zBSOXNT4Mp+a8iHItfoMZdELWsAuILvO7QH/VNQo6rWzx9o4niuNx/Alw25XGqqBW8GS0x0TSN1TcuirqCbick1OFedZ+IZm00BUGeI6Iw5+7wwDNekAElOjrPoEAQ7vlaLndsJwZlnb25zTqYKdmUHgoVoW/TbQoQRyzdJ6egYhzH0x7R4sddUrh0GdT7wJTo0UAhkp5zgScViyGnkayJFFkIPW9+h05xySh/5Sdw8JFU/JvgRGjuWkxoyPeWx5SFsobrf+Nz3o0uOrgyBhFBfZHXtly3UTF9g4+Bw4iobQRTCahTcObjlt7co60nhwsZBdPNRKhMbYcFF39nVRsJk77A2qiMd8yPxDQUc8qtLjMhaH6n4s/cxkTEKvwwky/eF/Bx3lD7/INVCN8X0LRRg/vNekelk+FYGNfdY8IvYHUQXnZN7B5cyj2zAWqmX/idg86erDH7wYsiP5GtFcqPFEfCn70MQZ7AFbbod2La6ap4VgiTKoVgGoaku4ZMKOzW+TVv1V7KG4HMipBvtHCASd/Jxc+astMWOkDIOk0ZW1vOVZT5PrWESpfBRY423JcjvphjR0FHIPgorIt1VCrZGzjsbhQQ5EDFYudxaui3LJk1YPxw5fQVGo1+Gp47uF9F+R+dGKUKbcEHMIR1Cdk7Iu02D0X1WK4R4+7apqMdkDdMookuMgfea/phsvh3H8go/AOWFZZiQWWFjHhGiqSCUySO9FC6wXN41dWxHwSYPTG2l6cpDTYLzeNgMRqHoqKfdoJN53Syk04No6vmpGJKrscZchpwv8fe+U9EdomvwN1Pxh3Mi6LVtAFtaQitxVbBbSWOWKFnwA4suZPO5n+75os4exayDhZ83KN+ZnjdpGdaHAvut4Y5n/LGW7RKye3E/CiA5Qt87ANeWC14hAhGfLUIVEg+1oduAjaf1Apo9P/W9KFvcN2jEGpgDBoLPJz/puvRFGyNlWOhEhtxu9DRKNV0ozFB9xP1Y3WUTfFGRM+1om4xKgHeKeGMB2oEFje6CDRa0cBIJz/FchGAmHATTihQBojPgf5160WbqQpsN1IgDWFfup1Yd4KzMXjXpZQlbpWOIE+U1UkKqT+bTyXjre0dZ1U/Tft64hr/65nghzq2nw+q0zs0kw+2aMCBLR3UZZ2IMJQz0sUD0Zz9E5YS4vfmQTy2lwziI7RSITFofBE5qbGwBD/NOE8rUi/gqnk3AjzIJef0w/4+X58ISyh8hDQEQu1npzAGoCHoSE8IzskbcY76Wl9z/8HWH/JLInx7oUFd7APzRdOjJQgM7vYYyUTSucMPiunOIMij04t9FLqfV/81VuGXoH0VLjIL+d/84G/gxPMp3vAuQo6OFxH+Ha5Cd7k5Ue8bNUtwn1txU2cWDOIUJOeC7JSST8MPjXZVVAP9TEmddbQdoQX64PA08TZsxi82SzY2G95A/0CUbjSKwxIiq610mIy9IJmmH7AOQFE9KJQe8pgxyi4EAM6mC1HLSsshbMJO1Pzgjj6DWb906nvgnn7xBgoPQENyHul725zomKKEDXMMs0A/AitvQzdvNDVvmDMo5BCJd6e14c2Vhr4GmYGAzVHUq3+TMEv207ca/HAPoda7Vcyklg77X+9nFfXgehp7dyraEC1HyG8FTlOyOsSRlbGgWSjAFHCnAnfDZ2jq/NqAkGzsQETfUyaHlZXL6ogHrTopSECq09eoP4llyTvWC24H4NTNJhpcpAhXq09Wt+GYbnul7vb+nbF/TL0r9NcFqh8PrYoK2OHRb3QHiysgU2DERaHhACp967hQTKgmcN2JWUreSXNZHUshBZOCLnI7GlCFKArV+U7Vp94l5xB9MgRbH2gYGQOZOj46DQeF3tG9hrDU9mQOThdP8mTNfCrnwJwISKQPnT0uR7VNigXpWiEFP0Lxr98KaVRvvbFK9W99yFLG00LSEBRM6N9hdpSdn1v1xajAaNI5aoM1RvOvbtFmReiHev0we/lXd/QOdgDhk35za4XWdq2Kq0CLNKSaZSMmiFa3b52utEkcBgkaBtPuvCgUnUfhvWgjBioKqFKmzXuYpxTl/eQshPPO2ShJRza2dD8dmfb8nMrEf/mI9cczhuFgqAQhsyhVlS50UbeZhXJw12E90H4zEaXeyEpzm1hL9S8p8IDmB3Uoe0SMkyiamhaFiUZRkxc/jhjIoYNyQNaQfNBIVzUIyF2vZUKndnGxeMRUKB8atHpXwjJENI834Aua3xE9HrDApxJwLZAABnp544Cu6gTzDanTXSRBCgWnZa1TIFQX/aCR3IJnEahlwKxX5PoZ2xzJv1FDSTHR2I/yJ5bIE+PfISQqkGpHdqMYFqq1uu8F/1n8izQPIr5lhztexUKSUDfKYvHn8KA6E7wzR1wtru04SeGJVKUgRZzL9yofVU7H6QEpk7p/0zasYFQpSSG90K2fcl64K5m79bFoTBb91AYHjv+/uSLhYRe6bvajej/vvKkVHJ0TPF4buZAoev8WpEDemJctMADcTzd4GkafL0juiyEKwG0XETEBfR4bioCLBmZlDprvZuGtR/zHJPHinE9Ok5/YQ3yYCfrV8iOC1oAVOgDBDksbjH9wOmwIuBPo5icdgiwS1wbND9YU/UHbRZBMgo0IV1jpSUKhQlaYrnkehdAkrI/jgs7JwVWXutTfHbKGdLO6gSFyCyp2j738tB41BgTSDRFYZZQCTKx0bOZkVEiuHFbhtecqYjkv107p0VeeJ6GFqZ+UMrS5tr5BQKz3toOfxbe3a1dtvW+oRnvdOiOWQK+fRFWJgk9hWwgNBvX6peddODKw713i8VM+1Bw+zzXE80FMMd0LY9XoxN0P/Nty75bP4xRkTPHvFMwzuwKeBW3l38aB4uaPlBEG8s8HGwhv/x9y/hPOIdIfHx3GqQAAAYRpQ0NQSUNDIHByb2ZpbGUAAHicfZE9SMNQFIVPU0tFKh3sUMQhQ3WyIFrEUatQhAqhVmjVweSlf9CkJUlxcRRcCw7+LFYdXJx1dXAVBMEfEFcXJ0UXKfG+pNAixgeX93HeO4f77gOEVpVpZt8EoOmWkUklxVx+VQy+IoAowlQJmZn1OUlKw3N93cPH97s4z/K+9+caVAsmA3wi8SyrGxbxBvH0plXnvE8cYWVZJT4nHjeoQeJHrisuv3EuOSzwzIiRzcwTR4jFUg8rPczKhkacII6pmk75Qs5llfMWZ63aYJ0++QtDBX1lmetUI0hhEUuQIEJBAxVUYSFOu06KiQydJz38w45fIpdCrgoYORZQgwbZ8YP/we/ZmsWpSTcplAQCL7b9MQoEd4F207a/j227fQL4n4ErveuvtYCZT9KbXS12BIS3gYvrrqbsAZc7QPSpLhuyI/mphGIReD+jb8oDQ7fAwJo7t845Th+ALM0qfQMcHAJjJcpe93h3f+/c/r3Tmd8PnXByuOaabnkAAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjIxNDZjMzUzLWIxZjItNGVjOC04NzQ3LTIwMGEyYWExM2ViMyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2NGViNmI2Ni03Y2I2LTRkZGUtYTI3OS01MGY0ZWFiZGFhODAiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1ODRhM2VjZC1kNGFmLTQ3NjItYjA1ZS04ODk2MGQ4ZTk0Y2MiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5MDM3ODI2MTQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxYzNjOGRkZi1kMjVkLTQ4YzQtYTAwYS0yMmU3ZDYwMzg1YjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjAzKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PuhCAHgAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGQOTjc4FAAAFdklEQVRYw82YW2gcZRTHf+eb2dlkc9lsrFYr2notfSgWxKKiog8VvIFI9UFQEaWtYPFJfREfRRSEeqlttViLD/WGisYXrShWpfWC1WpSN5eN3cZumkuTzWY3c/mOD9lI0WSTTXbVA8M8zMz3n//5zvl/5xyhxqb3ewYvaERpAvUAFzCABUIQH6GAHyvKa76tJbbUjMRW4+LbC7GsQbgCWA+sAs4AWoA8MAxkgEMo32LoxDO98oIN/xdk9IGUYEYvRrgduAW4Gogt4NMA+BroQHkfm+qW3aP6n5HRTSYG9hZga5lEwyKWKZVJvQCmQ3bZ4F8no5skAXov8BiwspwXizUL9APPgOyVXTr5r5HRzdKI1TsRngHOqlHuKTCI8hhG3padWqw7GX3IddDwcixvAefXUkTKhH7HcBfifi8vh1E1H1cfGkGYxPI4cM68RGw5zf3y3S7IuedgeZwgTNZ1Z3Sz46LRNcA7Zcmd25yGgPWP/M7q65toTLZSHBvn6OcFDm07n6g0n9oNAxsR54DsjBYs2251QWAbgFuBREX/tF3rc9+zA6xa3U5jSxwxHmpbueyqOOvvOM7rj67g1JfedFTNagngVtR+B0zUK8xiwLqKTmhcE3Dblk4uXbecRDKFmATgIiZBIpni0nXLuW1LJ41rgnmcvG6B59WiyRhgBeDM+UZipWHthnbcmDf7b8Y81m5oJ7GyErZTxjH1JCPzesu4ghtvBpkjH2X6uXFlAVEg9SMjhEAamFsyp4Yjcuks1s6uXdZacuksU8OVZDcC0mW8OpFRQqBruvqdwwpdDh+9cjaF0QHQv/2wRhRGB6afdzkVkKZxtDoyVaqZBKCHEXygcXafjhi63l3G9tIEGzYe4ZKrksSbzmCqMEz6mzE+eedC+juaiUYqhZCPchgkqKB4SzxntqQEO7oceBu4srIzHIitsMTOBOMJ1leCkxAMmEpRWt6Vg8BGTConOxZeSVdfzmwxHmpvRtkJnFmHcuYksBkxH8tO69e1nJEd1sdhP/BBuUippfnA+3jsr5ZI9TnzV33mFcB/DuEi4LpFr/PPZu3LkanES08fOltWnxe2Ba5xCEPXiHEAVG2oMS9UNFTVINOXKdamn3nQdSC8HMMeYPVS+hkFzQdObl9m2Zu7+xt6hkKx5fXktGumdNXyZQUKiPZGkDbGnFxqp+kh9kaUHeUTezHr6WRkxt/oa/toT39Lby6QqMoci4BJDB8vpTtEdlkflf3A08AQ1ejoTM8cyeRnudYD72Zb+qokMhNZLuCJaqtZaqDLLi0i7EHYDVTV7oZW/J9PNf3wanfycLoki5nQSFnKewKrnW5NNMhtKRDlt6EsB+4G4vM2/UrUNd5w5Pl028FfiuJL9SQUyKrqEXXkaNyLF2o3N9vUYKB0AbAduKFSQWqVKFv0+rYfXdbx4aB3qqQLDk8VKCKaUSQNmi0F/ujAwB9RTYeAMwoXabg2QvZ5jl4ym8Ip6FjgDm7/bdl7bw3Ec/lItEJyWyAS0RJWsmC7I9WM45hJHCfo6e21dZlozlju3pjnSnRT0tMXHdFzT8dQ0EJoTr2eSXXs7W/uG/pnwiswBZQw5NXaYw5knJKXVY8p8VSP9vZo3cezp1v2nniDK9FD7V70RMxoaganGJmJT0+0frbtt+RPfVN/EQnLo9sxYEREB6wxxweHhwYL4/mo2kSqi43c5zRH8GS7Fz1shMZQJTg41PzVU7+2fdNZNHlBTgI5ER20qkPG2qGebHZsSTpULzJH8slCe6ywrWTlrGTM3tw9Ef/xjUzLvp6idIlwQtBxa2Sit6+/VCvMuu0MwIE726RBSqlViaDli6Gm4t6e1MQveet3Z4+F9cD7Ewo4WRJBbaaSAAAAAElFTkSuQmCC\",\n red : \"data:image/png;base64,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293bv2fa/f0ASM5yljz/NiUAAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmI5YjA2YTAwLWZkOTQtNDc5MC1hNzIzLTlkMGUwNGRiNTRlNyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1MTQ3ZGU5Yi1kOTA0LTRlNWYtYjIyYy0wZmMzOGRmMWI3ZGEiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YzBjNTI2YS1lYTkyLTQxYWItODM5Yy05OWFhYTM0YjdlYzciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE2NDAxNTU0MjYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowMjQ4MDc5ZS1kMTYyLTQxZmItOGViYS1lMzY2NTRiNGRjMjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjIwOjQwKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PkaovgIAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPFCiKn0kIAAAFfUlEQVRYw82YTWxc1RXHf+e+N2/GH+Px2IEEV02AgqIsIkwgoYS2ahepVGCBUOiCRRdsAAnECthErBBCICGFj4gqRQqBRSABUrVm1URtCSATJ5ASZCPHH0kGgx1/xJl5nvH7uIcFY4iIM/GzZyhHenqL994993/u+f/fOUeos+nNnkHCJoQWRD0UFzCARYhQCVB8NFWWTwNbT99SNxC3GZfIXg9sADYDWxCuRekEskARYQplFPgEOAr045ph6bXRzwKM3pEX5mduQLkHuAvYCqSW8GkIfAT0IBwknT8lH87o/w2M3mpSqL0LeLQKIrOMZSpVUC8hpkf6bPiTg9FbpBn0L8ATwLoqL5ZrFjgNPAeyV47p3E8GRjdLE6r3oTwHXF0n7ikwgfAEIvvlqJYbDkY3uw4a3YLyNrC2niJSBXQG4c+Ie0yORnGSj5OnRhzlUJ4ErrkikBAoAjPVe7ik4F6D8iRxlGvoyegmx4X4NwgHgM6a8fUyIfc8doZbf99Ca66N0uwF+v7tc3DnWoJK6gqep1C2g3NEjsdLlm03GXSbAe4GmmvGZ91vA3Y8P8aN6ztoyaYxxsPaNrbcnmbbvV/x9ONdnPnA+w71otaMcDfYPqDUmDQTUgjdNYPQsSHkgYf62di9mmwujzHNgIsxzWRzeTZ2r+aBh/rp2BDWDLLQjSzpf7VMMIpB6QKcy77Tuc6wdVsHbspbfJspj63bOuhcV8u3g9KFJtufWQbHakfLdQUv3YrI4qwQ+e65616Jr6mknE4KJgIGgctLZnEq5vRgAWsXLyKttZweLFCcqiW7cdVP1DgwQoQwUNPJxIDDG7vXMDszBvqjDWvM7MwYb+xew8SAUzNowgCSDEwyNVMJQU8AAdC06DvBtOG/76xirlLi3u0nufn2HJmWTir+FJ9+PMu7B66nr6eVYLpWCgUoJ0DCGoq3wv/MbXkhmlkN7Ad+XTMY4kBTl6XlKnA8IQ4U/xyUx8wlB3ZpKvcC23Hz49K79Ep6GeWM8VB7J8pfgasaUM6cAx5EzPvSZ4OGljNy1AYIh4C/L6lASWYBcBCHQ0mBJOfM94rk+WjwAsKvgN8te51LK7kPpm3zK89OrZH1v4zaQ9c4RJFrxDgAqjbSlBcpGqlqODoyWq5TP1OtnoU9wPqV9DMKWlRnfJ+/6q3XKpmhSRVbXU8uuhb6Hq1eVsBHdDiGQWPMuZV1mpuMB/aPCK8CXcsMjs6pufCm3/7PPZXs8LhKnJBjMTCH4f2VdIfIcRsgcgh4FpgkiY4u9Mwqc4fn2468M58dSQhkIbNcwBPVNrPSRJdjWgb2AK8BidrdSCX4PGw5/re53IlBK8uZ0EhVyodCq/1uXTTIzfrExZ0oq4H7gfQSmv54IMqcfNFv7/0ilkCSg1CgoKon1ZEv017ar9/cbEvGEFeuQ9mF8IdaBamFuBB7I7tKq3r+EXjnK0tPTxUoIzqqyCBooRIGM2NjX8d1HQIuKFys0cYY2eeJ3riYwinorHUndvmr3nt7Pj1eVNEa5LZALKIVrBTAnopVRx3HzOE44dDwsG3IRHPBxrtTnkv8p5yjLzvoLy72oaC+mvOvz+V79pZbRyYvJbwC80AFQ1GtPevAqFPxCuoxL57ql8ND2vDx7MVW2JTOuMQPdxDvSInmF/yU1ZT+Nd92eGcp97+RH4BE1XHHLDAtomPWmK8mpiYn/AvFOCmRGmLTm53WOOKpDhM/YqApQsLe+dYPnym1f9xvTVGQc8C4iE5Y1Ulj7eRQoTC7Ih1qFJiTQc7vwN9ZUbk6Z+ydp6L0Z2+Ws/uGrAyI8I2gF6yR0vDI6Uq9fDbsZACO3NQuGa3kr3XC7H+ClvJeP1/6IrbBqbNno0b4+xbMlmARngcRbAAAAABJRU5ErkJggg==\",\n turquoiseBlue : \"data:image/png;base64,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/MUi8H5G35QHBm+BvjV3bu1znD4AWZpV+gY4OARGS5S97vHu3u65/XunPb8fN2tyj8UDOK0AAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjEwNGNlNWFhLTE1YzctNGI4Yi1iOGU1LTFmYWQyNWFiYzBhZCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpkNDMyZTY1Zi0xOThhLTQxM2EtYWYyMy1jNzhlNzczNGRlN2QiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyNzExODVkMi03MWZiLTRhZDMtYTJmMi1iNjM3OWU3MDc1OTEiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE4NjYyMzgzMjQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NGFiYzNkYS1lZWJiLTRlZjctYjdjNS04ZDRjODY5OGVjODMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI0OjI2KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pj0tlUwAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGBru/VeEAAAABmJLR0QA/wD/AP+gvaeTAAAFO0lEQVRYw9WYe2xTVRzHTx97dYS5B1UHa+/tY12dDoOKWyIGlfgHkCkSNTHGwHxA3NiAP/A5x4CMKEzdYL29YyAyBxKQZbI+NvYIaowaH9Ogi2GRbGjcFrbBNrq2a2/9nq5LCFnbbfSOeZJPTs/t6Tm/7/39zu+cU0IiXc7WSImNX0BsZiVYAhigmah5tHklsZrjSYtJSuZtaeSiiJU3gHUwfC9oARfBIHBP1DzaPH1eRuzmp0E6aTgSNX9EWMwSvOkMGPgG+CpguG8a0H7nA78zkMYqye0V0lYXDSHrYUw7cE5TxM04/b+38+vJ+RPRt0eIjVeAAhhyCQizFDKJEBjndaCY49Di4+CRlzFxfwSE3Ciol9i4DSBujoRUy7HIszFxdwSF3CioBy8qm1g5ufhirHwyJqwHrrDGWTlg8hFL1URN2+EF0XFPkyYuSWwhUVgnT2CygXBG3dFcM7bz1/au1u7OK9/93eWidUlHe1dCc810EsUAsXOPQZCI3rGZ6Wb4EXAEM0SCUFnZduz6T/09l4bHXYOCz+f0+XxeWg+7XYM/4vnKtlqHJHSIOrAHlYMFYmawRNCKycaDGZLVfMRdf/nPDpfXM+abotDnpy93dtzXfNgdZg+im2uimJ6h66UTeIMZsrat1jvkdPRRb/imLt4hl6N3DfqFEIPvOMzDJYspJsWfbUKEyFNttcKoyzkKo4UgYoRRt3OE9guT1br984nsmQ7gCWbIipaj4xeu9v/hFQTPlG7B89+u9v9O+4UQQ8f/BSlaVM8kgBOhji4p9mpvwQ+Wfwddjp6bQw2u8g44HT3535/tTUa/0Eccvg4sFDE1m2PBZkx2LVRqVcLQvG/PDDX1/tVxze38x+UZH6O1He28b764qgwtxOcf327eBGLFE9NikiD3qzDZhVBJgCJH3KubDnkfbD4s5Jw74qM1bcvDnxq8/vHt1SrS9InIJ2m7OQ4UYsKhCB9lJqHj0gPsHJzPvsS9w8rRRPDptI40M8PlH9fOJ5M5K008rsZmIwi5gc4QN9Zja8zn+5epch9PTFepU1iGuVunVqeyS9g0iv8zy96l0WiSjIsXx28iJEJhaONkMGB5YP14bkmI1SzIz1T0pRa9VKnNzCjUMcwWUAS2BtgWYLJN+xTo1OyrOhW7xsAwqnSGkd3i+uGjkT5Xw6DLt3AdEKQNB4YXbdtwQpuVuRtG7pwhxWA7vJgRib0nDuSDvtkIkjYcHE3aVWjRLL9/zyyETPK2Vq3OidAaOhiPDLcbxo3MRIik0eReWPnO15pHHiqbpYhS6hkNw7wAz0To6GM5hAzH3wkDa6b7x4bEwnkUfMnP6idX7Nex7GxElIDNerV6hU6jSdbp9RHck2w0w/FaGGoJm7KtnCfmWNlF1fOrK3Q6bekMRFABO7QM8yxewFLUi+5JSxPpAmcxy0gjt1Rytir4NcHKCfJTH/al5j1j1hr0pWEML55YD+x2GP6cVqNZZjQYEvUsG4vP4v8jKju5L1p6qnytxGKa6qogyOorBpVbXvxMe69xdxABb9I0DAGvIIRWp7NsBsJIoWVZKfaXuf+jMKp2b6z8+Adb4aErNwpCCh5J2pnfoH0ga08g7invBfaQjXjjuQifhyEgLdNolJP5UqR17y+QnSwvk1i565OZK6F8RzubvWwvDH8LvKZnmHXY8HKws+sNLJtI5muJ/7hYElOzJ1V+fN9R7CVDClPJOVXuqo06vS4HQjTwgDKDZRXk/1JiD7wrieFLk6T1lczCXUVK7aPZinS9XrTw+Q+Tql7SUmvGuQAAAABJRU5ErkJggg==\",\n defaultOffset : [-25.5, -32]\n};\n\nexport default Marker;\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.Feature;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Style;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Circle;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Icon;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Fill;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Stroke;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Text;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.geom.Polygon;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.geom.MultiPolygon;","import Color from \"../Utils/ColorUtils\";\nimport Logger from \"../Utils/LoggerByDefault\";\nimport Markers from \"../Controls/Utils/Markers\";\n// import ol\nimport Feature from \"ol/Feature\";\n// import Style\nimport Style from \"ol/style/Style\";\nimport CircleStyle from \"ol/style/Circle\";\nimport IconStyle from \"ol/style/Icon\";\nimport FillStyle from \"ol/style/Fill\";\nimport StrokeStyle from \"ol/style/Stroke\";\nimport TextStyle from \"ol/style/Text\";\n// import geom\nimport Polygon from \"ol/geom/Polygon\";\nimport MultiPolygon from \"ol/geom/MultiPolygon\";\n\nvar logger = Logger.getLogger(\"styling\");\n\nFeature.prototype.setPropertyFill = function () {\n var style = this.getStyle();\n if (!style) {\n return;\n }\n if (Array.isArray(style) && style.length === 0) {\n return;\n }\n var fill = style.getFill();\n if (fill) {\n var colorFill = fill.getColor();\n // array\n if (Array.isArray(colorFill)) {\n var cf = \"rgba(\";\n cf += colorFill[0] + \",\";\n cf += colorFill[1] + \",\";\n cf += colorFill[2] + \",\";\n cf += colorFill[3] + \")\";\n colorFill = cf;\n }\n if (Color.isRGB(colorFill)) {\n var oColorFill = Color.rgbaToHex(colorFill);\n this.set(\"fill\", oColorFill.hex);\n this.set(\"fill-opacity\", oColorFill.opacity);\n } else {\n this.set(\"fill\", colorFill);\n this.set(\"fill-opacity\", 1);\n }\n }\n};\n\nFeature.prototype.setPropertyStroke = function () {\n var style = this.getStyle();\n if (!style) {\n return;\n }\n if (Array.isArray(style) && style.length === 0) {\n return;\n }\n var stroke = style.getStroke();\n if (stroke) {\n var colorStroke = stroke.getColor();\n // array\n if (Array.isArray(colorStroke)) {\n var cs = \"rgba(\";\n cs += colorStroke[0] + \",\";\n cs += colorStroke[1] + \",\";\n cs += colorStroke[2] + \",\";\n cs += colorStroke[3] + \")\";\n colorStroke = cs;\n }\n if (Color.isRGB(colorStroke)) {\n var oColorStroke = Color.rgbaToHex(colorStroke);\n this.set(\"stroke\", oColorStroke.hex);\n this.set(\"stroke-opacity\", oColorStroke.opacity);\n } else {\n this.set(\"stroke\", colorStroke);\n this.set(\"stroke-opacity\", 1);\n }\n this.set(\"stroke-width\", stroke.getWidth());\n }\n};\n\nFeature.prototype.setPropertyLabel = function () {\n var style = this.getStyle();\n if (!style) {\n return;\n }\n if (Array.isArray(style) && style.length === 0) {\n return;\n }\n var isName = this.get(\"name\") !== undefined;\n var label = style.getText();\n if (label && isName) {\n var fill = style.getText().getFill();\n if (fill) {\n var colorFill = fill.getColor();\n // array\n if (Array.isArray(colorFill)) {\n var cf = \"rgba(\";\n cf += colorFill[0] + \",\";\n cf += colorFill[1] + \",\";\n cf += colorFill[2] + \",\";\n cf += colorFill[3] + \")\";\n colorFill = cf;\n }\n if (Color.isRGB(colorFill)) {\n var oColorFill = Color.rgbaToHex(colorFill);\n this.set(\"label-fill\", oColorFill.hex);\n this.set(\"label-fill-opacity\", oColorFill.opacity);\n } else {\n this.set(\"label-fill\", colorFill);\n this.set(\"label-fill-opacity\", 1);\n }\n }\n var stroke = style.getText().getStroke();\n if (stroke) {\n var colorStroke = stroke.getColor();\n // array\n if (Array.isArray(colorStroke)) {\n var cs = \"rgba(\";\n cs += colorStroke[0] + \",\";\n cs += colorStroke[1] + \",\";\n cs += colorStroke[2] + \",\";\n cs += colorStroke[3] + \")\";\n colorStroke = cs;\n }\n if (Color.isRGB(colorStroke)) {\n var oColorStroke = Color.rgbaToHex(colorStroke);\n this.set(\"label-stroke\", oColorStroke.hex);\n this.set(\"label-stroke-opacity\", oColorStroke.opacity);\n } else {\n this.set(\"label-stroke\", colorStroke);\n this.set(\"label-stroke-opacity\", 1);\n }\n this.set(\"label-stroke-width\", stroke.getWidth());\n }\n this.set(\"label-font\", style.getText().getFont() || Styling.DEFAULT_TEXT.font);\n this.set(\"label-textAlign\", style.getText().getTextAlign() || Styling.DEFAULT_TEXT.textAlign);\n }\n};\n\nFeature.prototype.setPropertyMarker = function () {\n var style = this.getStyle();\n if (!style) {\n return;\n }\n if (Array.isArray(style) && style.length === 0) {\n return;\n }\n var image = style.getImage();\n if (image) {\n // si le tag image est seul...\n // c'est soit un marker ou soit un cercle !\n if (image instanceof IconStyle) {\n var color = image.getColor();\n // array\n if (Array.isArray(color)) {\n var c = \"rgba(\";\n c += color[0] + \",\";\n c += color[1] + \",\";\n c += color[2] + \",\";\n c += color[3] + \")\";\n color = c;\n }\n // feature.set(\"marker-color\", \"\"); // par defaut\n if (color) {\n var colorIcon = Color.rgbaToHex(color);\n this.set(\"marker-color\", colorIcon.hex);\n }\n var scaleIcon = image.getScale();\n switch (Math.round(scaleIcon * 2) / 2) {\n case 0:\n case 0.5:\n this.set(\"marker-size\", \"small\");\n break;\n case 1:\n this.set(\"marker-size\", \"medium\");\n break;\n case 1.5:\n case 2:\n this.set(\"marker-size\", \"large\");\n break;\n default:\n // this.set(\"marker-size\", \"\"); // par defaut\n break;\n }\n // feature.set(\"marker-symbol\", \"\"); // par defaut\n var srcImage = image.getSrc();\n if (srcImage) {\n this.set(\"marker-symbol\", srcImage);\n }\n // INFO\n // cas particulier où un objet est transformé :\n // * un cercle est transformé en icone\n // > les attributs du cercle sont à supprimer !\n this.unset(\"circle-fill\");\n this.unset(\"circle-fill-opacity\");\n this.unset(\"circle-stroke\");\n this.unset(\"circle-stroke-width\");\n this.unset(\"circle-stroke-opacity\");\n this.unset(\"circle-radius\");\n } else {\n var fillImg = image.getFill();\n if (fillImg) {\n var colorFillImg = fillImg.getColor();\n // array\n if (Array.isArray(colorFillImg)) {\n var cfi = \"rgba(\";\n cfi += colorFillImg[0] + \",\";\n cfi += colorFillImg[1] + \",\";\n cfi += colorFillImg[2] + \",\";\n cfi += colorFillImg[3] + \")\";\n colorFillImg = cfi;\n }\n if (Color.isRGB(colorFillImg)) {\n var oColorFillImg = Color.rgbaToHex(colorFillImg);\n this.set(\"circle-fill\", oColorFillImg.hex);\n this.set(\"circle-fill-opacity\", oColorFillImg.opacity);\n } else {\n this.set(\"circle-fill\", colorFillImg);\n this.set(\"circle-fill-opacity\", 1);\n }\n }\n var strokeImg = image.getStroke();\n if (strokeImg) {\n var colorStrokeImg = strokeImg.getColor();\n // array\n if (Array.isArray(colorStrokeImg)) {\n var csi = \"rgba(\";\n csi += colorStrokeImg[0] + \",\";\n csi += colorStrokeImg[1] + \",\";\n csi += colorStrokeImg[2] + \",\";\n csi += colorStrokeImg[3] + \")\";\n colorStrokeImg = csi;\n }\n if (Color.isRGB(colorStrokeImg)) {\n var oColorStrokeImg = Color.rgbaToHex(colorStrokeImg);\n this.set(\"circle-stroke\", oColorStrokeImg.hex);\n this.set(\"circle-stroke-opacity\", oColorStrokeImg.opacity);\n } else {\n this.set(\"circle-stroke\", colorStrokeImg);\n this.set(\"circle-stroke-opacity\", 1);\n }\n this.set(\"circle-stroke-width\", strokeImg.getWidth());\n }\n var radius = image.getRadius();\n this.set(\"circle-radius\", radius);\n }\n }\n};\n\n/**\n * @module Styling\n * @alias Gp.Styling\n * @private\n * @todo ...\n * @description\n * A simple specification for styling GeoJSON / GPX / KML data.\n *\n * @see ol.format.GeoJSONExtended\n * @see ol.format.KMLExtended\n * @see ol.format.GPXExtended\n *\n * @example\n * feature.getStyle(); // null\n * feature.getProperties(); // {\"stroke\": \"#ff0000\", \"stroke-width\": 2}\n * Styling.defineStyleFromProperties(feature);\n * feature.getStyle(); // [Object Style]\n *\n * feature.getStyle(); // [Object Style]\n * feature.getProperties(); // {}\n * Styling.definePropertiesFromStyle(feature);\n * feature.getProperties(); // {\"stroke\": \"#ff0000\", \"stroke-width\": 2}\n *\n * var style = feature.getStyle(); // [Object Style]\n * var tag = Styling.setTag(style, \"GPX\");\n *\n * ex. output GeoJSON:\n * ```json\n * \"properties\": {\n * \"stroke\": \"#ff0000\",\n * \"stroke-width\": 2\n * }\n * ```\n */\nvar Styling = {\n\n /**\n * Options to convert geometry\n */\n APPLY_CONVERT_GEOM_GPX : true,\n\n /**\n * Default icon style options\n */\n DEFAULT_ICON : {\n src : Markers[\"lightOrange\"],\n anchor : [0.5, 1],\n scale : 1\n },\n\n /**\n * Default circle style options\n */\n DEFAULT_CIRCLE : {\n radius : 10,\n fill : {\n opacity : 1,\n color : [0, 0, 0, 1]\n },\n stroke : {\n width : 1,\n opacity : 1,\n color : [0, 0, 0, 1]\n }\n },\n\n /**\n * Default stroke style options\n */\n DEFAULT_STROKE : {\n width : 5,\n opacity : 1,\n color : [250, 250, 250, 1]\n },\n\n /**\n * Default fill style options\n */\n DEFAULT_FILL : {\n opacity : 1,\n color : [0, 0, 0, 1]\n },\n\n /**\n * Default text style options\n * @see https://openlayers.org/en/v6.15.1/apidoc/module-ol_style_Text-Text.html\n */\n DEFAULT_TEXT : {\n font : \"16px sans\",\n textAlign : \"left\",\n stroke : {\n color : [250, 250, 250, 1],\n width : 5,\n opactity : 1\n },\n fill : {\n opacity : 1,\n color : [0, 0, 0, 1]\n }\n // offsetX\n // offsetY\n // placement\n // scale\n // rotation\n // justify\n // padding\n },\n\n /**\n * All styling tags\n * @function getListTags\n * @returns {Array} all styling tags\n * @example\n * \"type\", // type de geometrie\n * \"fill\",\n * \"fill-opacity\",\n * \"stroke\",\n * \"stroke-opacity\",\n * \"stroke-width\",\n * \"circle-fill\",\n * \"circle-fill-opacity\",\n * \"circle-stroke\",\n * \"circle-stroke-opacity\",\n * \"circle-stroke-width\",\n * \"circle-radius\",\n * \"marker-symbol\",\n * \"marker-color\",\n * \"marker-size\"\n */\n getListTags : function () {\n return [\n \"type\",\n \"fill\",\n \"fill-opacity\",\n \"stroke\",\n \"stroke-opacity\",\n \"stroke-width\",\n \"circle-fill\",\n \"circle-fill-opacity\",\n \"circle-stroke\",\n \"circle-stroke-opacity\",\n \"circle-stroke-width\",\n \"circle-radius\",\n \"marker-symbol\",\n \"marker-color\",\n \"marker-size\",\n \"label-fill\",\n \"label-fill-opacity\",\n \"label-stroke\",\n \"label-stroke-width\",\n \"label-stroke-opacity\",\n \"label-font\",\n \"label-textAlign\"\n ];\n },\n\n /**\n * Transform feature properties to a native style\n *\n * @function defineStyleFromProperties\n * @param {*} feature - ...\n * @returns {*} style - ...\n * @public\n *\n * @description\n * A la lecture du format :\n * > tag styling ---> feature properties ---> feature style\n *\n * Les balises de 'styling' du fichier sont ajoutées dans les properties de chaque features\n * (opération native sous OpenLayers):\n *\n * Ex. avec le format GeoJSON :\n * ```json\n * \"properties\": {\n * \"stroke\": \"#000000\", -> feature.get(\"stroke\");\n * \"stroke-width\": 13, -> feature.get(\"stroke-width\");\n * \"stroke-opacity\": 0.8, -> feature.get(\"stroke-opacity\");\n * \"fill\": \"#a03737\", -> feature.get(\"fill\");\n * \"fill-opacity\": 0.5 -> feature.get(\"fill-opacity\");\n * }\n * ```\n *\n * Ensuite, les properties des features sont transformées dans le style natif :\n *\n * ```js\n * // Ex.\n * feature.setStyle(new Style({\n * fill : new FillStyle({\n * color : Color.hexToRgba(feature.get(\"fill\"), feature.get(\"fill-opacity\") || 1)\n * }),\n * stroke : new StrokeStyle({\n * color : Color.hexToRgba(feature.get(\"stroke\"), feature.get(\"stroke-opacity\"))\n * width : feature.get(\"stroke-width\")\n * })\n * }));\n * ```\n */\n defineStyleFromProperties : function (feature) {\n // style\n var style = null;\n\n // les options de styles définis dans le format\n var options = {};\n\n // properties :\n // \"marker-size\" -> icon\n // \"marker-symbol\" -> icon\n // \"marker-color\" -> icon\n var marker = null;\n if (feature.get(\"marker-color\") ||\n feature.get(\"marker-size\") ||\n feature.get(\"marker-symbol\")) {\n marker = {};\n // icone par defaut\n marker[\"src\"] = this.DEFAULT_ICON.src;\n marker[\"anchor\"] = this.DEFAULT_ICON.anchor;\n var symbolMarker = feature.get(\"marker-symbol\");\n if (symbolMarker) {\n if (symbolMarker.search(\"data:image/png;base64\") !== -1) {\n // icone du portail\n marker[\"src\"] = symbolMarker;\n } else {\n // TODO\n // utiliser les symboles de Maki\n // (cf. https://labs.mapbox.com/maki-icons/)\n }\n }\n var colorMarker = feature.get(\"marker-color\");\n if (Color.isHex(colorMarker)) {\n marker[\"color\"] = Color.hexToRgba(colorMarker, 1);\n }\n var size = feature.get(\"marker-size\");\n if (size) {\n switch (size) {\n case \"small\":\n marker[\"scale\"] = 0.5;\n break;\n case \"medium\":\n marker[\"scale\"] = 1;\n break;\n case \"large\":\n marker[\"scale\"] = 1.5;\n break;\n default:\n marker[\"scale\"] = this.DEFAULT_ICON.scale;\n break;\n }\n }\n }\n\n // properties :\n // \"stroke\" -> line / polygon\n // \"stroke-opacity\" -> line / polygon\n // \"stroke-width\" -> line / polygon\n var stroke = null;\n if (feature.get(\"stroke\") ||\n feature.get(\"stroke-opacity\") ||\n feature.get(\"stroke-width\")) {\n stroke = {};\n stroke[\"color\"] = Color.hexToRgba(feature.get(\"stroke\"), +feature.get(\"stroke-opacity\") || this.DEFAULT_STROKE.opacity);\n stroke[\"width\"] = +feature.get(\"stroke-width\") || this.DEFAULT_STROKE.width;\n }\n\n // properties :\n // \"fill\" -> polygon\n // \"fill-opacity\" -> polygon\n var fill = null;\n if (feature.get(\"fill\") ||\n feature.get(\"fill-opacity\")) {\n fill = {};\n fill[\"color\"] = Color.hexToRgba(feature.get(\"fill\"), +feature.get(\"fill-opacity\") || this.DEFAULT_FILL.opacity);\n }\n\n // properties :\n // \"label-fill\",\n // \"label-fill-opacity\",\n // \"label-stroke\",\n // \"label-stroke-width\",\n // \"label-stroke-opacity\",\n // \"label-font\",\n // \"label-textAlign\"\n // \"name\" -> text\n var labelStroke = null;\n var labelFill = null;\n var isLabel = feature.get(\"name\") !== \"\";\n if (isLabel) {\n if (feature.get(\"label-fill\") ||\n feature.get(\"label-fill-opacity\")) {\n labelFill = {};\n labelFill[\"color\"] = Color.hexToRgba(feature.get(\"label-fill\"), +feature.get(\"label-fill-opacity\") || this.DEFAULT_TEXT.fill.opacity);\n }\n if (feature.get(\"label-stroke\") ||\n feature.get(\"label-stroke-opacity\") ||\n feature.get(\"label-stroke-width\")) {\n labelStroke = {};\n labelStroke[\"color\"] = Color.hexToRgba(feature.get(\"label-stroke\"), +feature.get(\"label-stroke-opacity\") || this.DEFAULT_TEXT.stroke.opacity);\n labelStroke[\"width\"] = +feature.get(\"label-stroke-width\") || this.DEFAULT_TEXT.stroke.width;\n }\n }\n\n // properties :\n // \"circle-fill\"\n // \"circle-stroke\"\n // \"circle-stroke-width\"\n // \"circle-radius\"\n var circleRadius = feature.get(\"circle-radius\") || this.DEFAULT_CIRCLE.radius;\n var circleStroke = null;\n if (feature.get(\"circle-stroke\") ||\n feature.get(\"circle-stroke-opacity\") ||\n feature.get(\"circle-stroke-width\")) {\n circleStroke = {};\n circleStroke[\"color\"] = Color.hexToRgba(feature.get(\"circle-stroke\"), +feature.get(\"circle-stroke-opacity\") || this.DEFAULT_CIRCLE.stroke.opacity);\n circleStroke[\"width\"] = +feature.get(\"circle-stroke-width\") || this.DEFAULT_CIRCLE.stroke.width;\n }\n var circleFill = null;\n if (feature.get(\"circle-fill\") ||\n feature.get(\"circle-fill-opacity\")) {\n circleFill = {};\n circleFill[\"color\"] = Color.hexToRgba(feature.get(\"circle-fill\"), +feature.get(\"circle-fill-opacity\") || this.DEFAULT_CIRCLE.fill.opacity);\n }\n\n // options du Style en fonction du type de geometrie\n if (feature.getGeometry()) {\n var type = feature.getGeometry().getType();\n switch (type) {\n case \"Circle\":\n case \"Point\":\n case \"MultiPoint\":\n // Cercle\n var isCircle = false;\n var optionsCircle = {};\n if (circleStroke) {\n optionsCircle[\"stroke\"] = new StrokeStyle(circleStroke);\n }\n if (circleFill) {\n optionsCircle[\"fill\"] = new FillStyle(circleFill);\n }\n if (Object.keys(optionsCircle).length !== 0) {\n isCircle = true;\n optionsCircle[\"radius\"] = +circleRadius; // Conversion en nombre\n options[\"image\"] = new CircleStyle(optionsCircle);\n }\n // Ponctuel\n if (marker) {\n options[\"image\"] = new IconStyle(marker);\n }\n // Label\n if (isLabel) {\n var optionsText = {};\n \n if (labelStroke) {\n optionsText[\"stroke\"] = new StrokeStyle(labelStroke);\n }\n if (labelFill) {\n optionsText[\"fill\"] = new FillStyle(labelFill);\n }\n if (Object.keys(optionsText).length !== 0) {\n optionsText[\"text\"] = feature.get(\"name\");\n optionsText[\"textAlign\"] = feature.get(\"label-textAlign\") || this.DEFAULT_TEXT.textAlign;\n optionsText[\"font\"] = feature.get(\"label-font\") || this.DEFAULT_TEXT.font;\n options[\"text\"] = new TextStyle(\n Object.assign({},\n this.DEFAULT_TEXT,\n optionsText\n ));\n } else {\n // on applique un style par defaut sur le label\n // pour un marker ou un cercle\n if (marker || isCircle) {\n var styleText = new TextStyle(\n Object.assign({},\n this.DEFAULT_TEXT, {\n fill : new FillStyle(this.DEFAULT_TEXT.fill),\n stroke : new StrokeStyle(this.DEFAULT_TEXT.stroke)\n }\n )\n );\n if (styleText) {\n var cloneStyleText = styleText.clone();\n cloneStyleText.setText(feature.get(\"name\"));\n options[\"text\"] = cloneStyleText;\n }\n }\n }\n }\n break;\n \n case \"Polygon\":\n case \"MultiPolygon\":\n if (stroke) {\n options[\"stroke\"] = new StrokeStyle(stroke);\n }\n if (fill) {\n options[\"fill\"] = new FillStyle(fill);\n }\n break;\n \n case \"LineString\":\n case \"MultiLineString\":\n if (stroke) {\n options[\"stroke\"] = new StrokeStyle(stroke);\n }\n if (this.APPLY_CONVERT_GEOM_GPX && fill) {\n // INFO\n // Lors d'une transformation de type de geometrie, le type est renseigné.\n // Pour le format GPX,\n // -> on transforme une surface vers ligne lors de l'écriture\n // -> on transforme une ligne vers une surface lors de la lecture si le type est précisé !\n var initType = feature.get(\"type\");\n if (initType && (initType === \"Polygon\" || initType === \"MultiPolygon\")) {\n options[\"fill\"] = new FillStyle(fill);\n var f = feature.clone();\n var ClassPoly = (type === \"LineString\") ? Polygon : MultiPolygon;\n feature.setGeometry(new ClassPoly([f.getGeometry().getCoordinates()]));\n }\n }\n break;\n \n default:\n break;\n }\n }\n\n // si aucun style disponible, on utilisera le style par defaut defini\n // par l'utilisateur ou l'application\n if (Object.keys(options).length !== 0) {\n style = new Style(options);\n }\n\n return style;\n },\n\n /**\n * Define a default style function to apply to a feature\n *\n * @function defineStyleFunctionByDefault\n * @param {Object} defaultStyle - ...\n * @returns {Function} style function\n * @public\n *\n * @description\n * ...\n */\n defineStyleFunctionByDefault : function (defaultStyle) {\n if (!defaultStyle) {\n return [];\n }\n\n if (Object.keys(defaultStyle).length === 0) {\n return [];\n }\n\n // les styles par defaut\n var styleFunction = (feature, resolution) => {\n if (feature.getGeometry()) {\n var style = null;\n var type = feature.getGeometry().getType();\n switch (type) {\n case \"Point\":\n case \"MultiPoint\":\n // on n'a aucune information sur le type de style à appliquer sur un \"Point\" :\n // * label ou\n // * marker ou\n // * marker avec label\n // donc, c'est en fonction des styles par defaut...\n var opts = {};\n if (defaultStyle.getImage()) {\n opts[\"image\"] = defaultStyle.getImage();\n }\n if (defaultStyle.getText() && feature.get(\"name\")) {\n var styleText = defaultStyle.getText().clone();\n styleText.setText(feature.get(\"name\"));\n opts[\"text\"] = styleText;\n }\n style = new Style(opts);\n break;\n case \"Circle\":\n var optsc = {};\n \n var optsCircle = {};\n if (defaultStyle.getFill()) {\n optsCircle.fill = defaultStyle.getFill();\n }\n if (defaultStyle.getStroke()) {\n optsCircle.stroke = defaultStyle.getStroke();\n }\n if (defaultStyle.getText() && feature.get(\"name\")) {\n var styleTextCircle = defaultStyle.getText().clone();\n styleTextCircle.setText(feature.get(\"name\"));\n optsc.text = styleTextCircle;\n }\n if (Object.keys(optsCircle).length !== 0) {\n // FIXME param radius ?\n optsCircle.radius = 3;\n optsc.image = new CircleStyle(optsCircle);\n }\n style = new Style(optsc);\n break;\n case \"Polygon\":\n case \"MultiPolygon\":\n var optsp = {};\n if (defaultStyle.getFill()) {\n optsp.fill = defaultStyle.getFill();\n }\n if (defaultStyle.getStroke()) {\n optsp.stroke = defaultStyle.getStroke();\n }\n style = new Style(optsp);\n break;\n case \"LineString\":\n case \"LinearRing\":\n case \"MultiLineString\":\n var optsl = {};\n if (defaultStyle.getStroke()) {\n optsl.stroke = defaultStyle.getStroke();\n }\n style = new Style(optsl);\n break;\n }\n return [style];\n }\n };\n return styleFunction;\n },\n\n /**\n * Transform a native style to feature properties by type of geometry\n *\n * @todo not yet implemented !\n * @param {*} feature - feature\n */\n definePropertiesFromStyleByType : function (feature) {\n if (feature.getGeometry()) {\n var geomType = feature.getGeometry().getType();\n switch (geomType) {\n case \"Point\":\n case \"MultiPoint\":\n feature.setPropertyMarker();\n feature.setPropertyLabel();\n break;\n case \"LineString\":\n case \"MultiLineString\":\n feature.setPropertyStroke();\n break;\n case \"Polygon\":\n case \"MultiPolygon\":\n feature.setPropertyStroke();\n feature.setPropertyFill();\n break;\n default:\n break;\n }\n }\n },\n\n /**\n * Transform a native style to feature properties\n *\n * @function definePropertiesFromStyle\n * @param {*} feature - ...\n * @public\n *\n * @description\n * A l'écriture du format.\n * > feature style --> feature properties --> tag styling\n *\n * Le style natif est récupéré pour chaque feature :\n *\n * ```js\n * // Ex.\n * var style = feature.getStyle();\n * ```\n *\n * Ensuite, le style natif est transformé en properties pour chaque feature :\n *\n * ```js\n * // Ex.\n * var stroke = style.getStroke();\n * var oColorStroke = Color.rgbaToHex(stroke.getColor());\n * feature.set(\"stroke\", oColorStroke.hex); // #000000\n * feature.set(\"stroke-opacity\", oColorStroke.opacity); // 0.8\n * ```\n *\n * Et, chaque properties des features sont ecrites dans le format du fichier\n * (opération native sous OpenLayers) :\n *\n * Ex. avec le format GeoJSON :\n * ```json\n * \"properties\": {\n * \"stroke\": \"#000000\",\n * \"stroke-opacity\": 0.8\n * }\n * ```\n */\n definePropertiesFromStyle : function (feature) {\n var style = feature.getStyle() || feature.getStyleFunction();\n if (style) {\n // style ajouté via une fonction, pour les styles par defaut par ex.\n if (typeof style === \"function\") {\n var styles = style.call(this, feature, 0);\n if (styles && styles.length !== 0) {\n style = (Array.isArray(styles)) ? styles[0] : styles;\n feature.setStyle(style);\n } else {\n // au cas où...\n return;\n }\n }\n this.definePropertiesFromStyleByType(feature);\n }\n },\n\n /**\n * Transform a native style to tags 'styling' into the format\n *\n * @function defineTagFromStyle\n * @param {*} style - ...\n * @param {String} format - ...\n * @returns {String} tags stringify into the format (json / xml)\n * @todo\n * @public\n *\n * @description\n * A partir d'un style natif, on le transforme en balise de 'styling' dans le format demandé,\n * que l'on peut ensuite inserer dans le fichier.\n * > style ---> tag styling\n *\n */\n defineTagFromStyle : function (style, format) {\n logger.trace(\"todo...\");\n return null;\n }\n};\n\nexport default Styling;\n","import Logger from \"./LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"parser\");\n\n/**\n* @module Parser\n* @alias module:~utils/Parser\n* @description\n* ...\n*\n* @example\n* parse();\n* toString();\n*/\nvar Parser = {\n\n /**\n * ...\n *\n * @param {String} xml - XML string\n * @returns {DOMElement} doc\n */\n parse : function (xml) {\n var doc = null;\n var parser = null;\n var scope = typeof window !== \"undefined\" ? window : null;\n\n if (typeof exports === \"object\" && window === null) {\n // code for nodejs\n var DOMParser = require(\"@xmldom/xmldom\").DOMParser;\n parser = new DOMParser();\n doc = parser.parseFromString(xml, \"text/xml\");\n } else if (scope.DOMParser) {\n // code for modern browsers\n parser = new scope.DOMParser();\n doc = parser.parseFromString(xml, \"text/xml\");\n } else if (scope.ActiveXObject) {\n // code for old IE browsers\n doc = new scope.ActiveXObject(\"Microsoft.XMLDOM\");\n doc.async = false;\n doc.loadXML(xml);\n } else {\n logger.log(\"Incompatible environment for DOM Parser !\");\n }\n\n var errorNode = doc.querySelector(\"parsererror\");\n if (errorNode) {\n // INFO parsing failed\n // eslint-disable-next-line no-console\n console.error(errorNode);\n return null;\n }\n\n logger.trace(doc);\n return doc;\n },\n\n /**\n * ...\n *\n * @param {DOMElement} doc - doc\n * @returns {String} XML string\n */\n toString : function (doc) {\n // TODO\n // try catch pour les exceptions !\n // cf. https://developer.mozilla.org/en-US/docs/Web/API/XMLSerializer/serializeToString\n var oSerializer = new XMLSerializer();\n var xml = oSerializer.serializeToString(doc);\n\n logger.trace(xml);\n return xml;\n },\n\n /**\n * ...\n * cf. https://stackoverflow.com/questions/376373/pretty-printing-xml-with-javascript/\n *\n * @param {String} xml - XML string\n * @returns {String} XML string formatted\n */\n format : function (xml) {\n var reg = /(>)\\s*(<)(\\/*)/g; // updated Mar 30, 2015\n var wsexp = / *(.*) +\\n/g;\n var contexp = /(<.+>)(.+\\n)/g;\n xml = xml.replace(reg, \"$1\\n$2$3\").replace(wsexp, \"$1\\n\").replace(contexp, \"$1\\n$2\");\n var formatted = \"\";\n var lines = xml.split(\"\\n\");\n var indent = 0;\n var lastType = \"other\";\n // 4 types of tags - single, closing, opening, other (text, doctype, comment) - 4*4 = 16 transitions\n var transitions = {\n \"single->single\" : 0,\n \"single->closing\" : -1,\n \"single->opening\" : 0,\n \"single->other\" : 0,\n \"closing->single\" : 0,\n \"closing->closing\" : -1,\n \"closing->opening\" : 0,\n \"closing->other\" : 0,\n \"opening->single\" : 1,\n \"opening->closing\" : 0,\n \"opening->opening\" : 1,\n \"opening->other\" : 1,\n \"other->single\" : 0,\n \"other->closing\" : -1,\n \"other->opening\" : 0,\n \"other->other\" : 0\n };\n\n for (var i = 0; i < lines.length; i++) {\n var ln = lines[i];\n var single = Boolean(ln.match(/<.+\\/>/)); // is this line a single tag? ex.
    \n var closing = Boolean(ln.match(/<\\/.+>/)); // is this a closing tag? ex. \n var opening = Boolean(ln.match(/<[^!].*>/)); // is this even a tag (that's not )\n var type = single ? \"single\" : closing ? \"closing\" : opening ? \"opening\" : \"other\";\n var fromTo = lastType + \"->\" + type;\n lastType = type;\n var padding = \"\";\n\n indent += transitions[fromTo];\n for (var j = 0; j < indent; j++) {\n padding += \"\\t\";\n }\n if (fromTo === \"opening->closing\") {\n formatted = formatted.substr(0, formatted.length - 1) + ln + \"\\n\"; // substr removes line break (\\n) from prev loop\n } else {\n formatted += padding + ln + \"\\n\";\n }\n }\n\n logger.trace(formatted);\n return formatted;\n }\n};\n\nexport default Parser;\n","/**\n* @module Helper\n* @alias module:~utils/HelperUtils\n* @description\n* ...\n*\n* @example\n* import HelperUtils from \"gpf-ext-ol/utils/HelperUtils\"\n* ou \n* import {HelperUtils} from \"gpf-ext-ol\n* \n* HelperUtils.detectSupport();\n* HelperUtils.assign();\n* HelperUtils.mergeParams();\n*/\nvar Helper = {\n\n /**\n * this method is called by the constructor.\n * this information is useful to switch to touch mode.\n * Detection : test for desktop or tactile\n *\n * @function detectSupport\n * @returns {Boolean} isDesktop - true for desktop userAgent, false for mobile\n */\n detectSupport : function () {\n var isDesktop = true;\n var userAgent = window.navigator.userAgent.toLowerCase();\n\n if (userAgent.indexOf(\"iphone\") !== -1 ||\n userAgent.indexOf(\"ipod\") !== -1 ||\n userAgent.indexOf(\"ipad\") !== -1 ||\n userAgent.indexOf(\"android\") !== -1 ||\n userAgent.indexOf(\"mobile\") !== -1 ||\n userAgent.indexOf(\"blackberry\") !== -1 ||\n userAgent.indexOf(\"tablet\") !== -1 ||\n userAgent.indexOf(\"phone\") !== -1 ||\n userAgent.indexOf(\"touch\") !== -1) {\n isDesktop = false;\n }\n\n if (userAgent.indexOf(\"msie\") !== -1 ||\n userAgent.indexOf(\"trident\") !== -1) {\n isDesktop = true;\n }\n\n return isDesktop;\n },\n\n /**\n * Copies all source object members to dest\n *\n * @function assign\n * @param {Object} dest - destination object where properties and method will be copied\n * @param {Object} source - source object from which properties and method will be copied\n * @returns {Object} dest\n */\n assign : function (dest, source) {\n dest = dest || {};\n for (var prop in source) {\n if (source.hasOwnProperty(prop)) {\n dest[prop] = source[prop];\n }\n }\n return dest;\n },\n\n /**\n * Merge two objects parameters (deeper than assign)\n *\n * @function mergeParams\n * @param {Object} dest - destination object where properties and method will be merge\n * @param {Object} source - source object from which properties and method will be merge\n * @param {Boolean} replace - replace destination value by source if exists or not (true by default)\n */\n mergeParams : function (dest, source, replace) {\n if (typeof dest === \"undefined\" || typeof source === \"undefined\") {\n return;\n }\n if (typeof replace === \"undefined\") {\n replace = true;\n }\n for (var param in source) {\n if (source.hasOwnProperty(param)) {\n if (typeof source[param] === \"object\") {\n if (dest.hasOwnProperty(param)) {\n this.mergeParams(dest[param], source[param], replace);\n } else {\n dest[param] = source[param];\n }\n } else {\n if (dest.hasOwnProperty(param)) {\n if (replace) {\n dest[param] = source[param];\n }\n } else {\n dest[param] = source[param];\n }\n }\n }\n }\n }\n};\n\nexport default Helper;\n","// import openlayers\nimport olKML from \"ol/format/KML\";\nimport {\n Fill,\n Icon,\n Stroke,\n Style,\n Text,\n Circle\n} from \"ol/style\";\n// import local\nimport Styling from \"./Styling\";\nimport Color from \"../Utils/ColorUtils\";\nimport Logger from \"../Utils/LoggerByDefault\";\nimport Parser from \"../Utils/Parser\";\nimport Utils from \"../Utils/Helper\";\n\nvar logger = Logger.getLogger(\"extended KML format\");\n\n/**\n * @classdesc\n *\n * Extended Styles KML format to export (internal use only !)\n *\n * INFO\n * only ol.Control is a user-extendable class.\n * Everything else requires integration with the original openlayers source and a new ol.js\n * to be built with your new classes incorporated.\n *\n * SPEC\n * cf. https://developers.google.com/kml/forum/advanced\n *\n * ISSUES\n * cf. https://github.com/openlayers/openlayers/issues/4829\n * cf. https://github.com/openlayers/openlayers/issues/4460\n * cf. https://github.com/openlayers/openlayers/pull/5590\n * cf. https://github.com/openlayers/openlayers/issues/5229\n * cf. https://github.com/openlayers/openlayers/issues/3371\n *\n * @constructor\n * @alias ol.format.KMLExtended\n * @type {ol.format.KMLExtended}\n * @extends {ol.format.KML}\n * @param {Object} options - Options\n * @param {Object} [options.extensions] - Add properties to file root\n */\nvar KML = class KML extends olKML {\n\n /**\n * See {@link ol.format.KMLExtended}\n * @module KMLExtended\n * @alias module:~formats/KMLExtended\n * @param {*} options - options\n * @example\n * import KMLExtended from \"gpf-ext-ol/formats/KMLExtended\"\n * ou \n * import { KMLExtended } from \"gpf-ext-ol\"\n */\n constructor (options) {\n super(options);\n\n if (!(this instanceof KML)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n options = options || {};\n\n // INFO\n // source DOM (Document ou Node)\n this.source = null;\n\n // INFO\n // gestion des extensions\n this.extensions = options.extensions || null;\n\n // INFO\n // defaultStyle est un tableau d'objet de type Style\n if (options.defaultStyle && !Array.isArray(options.defaultStyle)) {\n options.defaultStyle = [options.defaultStyle];\n }\n\n if (options.defaultStyle === null || typeof options.defaultStyle === \"undefined\") {\n options.defaultStyle = [];\n }\n\n return this;\n }\n\n /**\n *\n * En lecture, on surcharge la méthode readFeatures.\n * ✔️ In : kml string + features du format original\n * ✔️ Out : features étendus avec des styles, et des metadatas (name ou extendData)\n * > on modifie les features du format original avec les fonctionnalités non gérées.\n *\n * En écriture, on surcharge la méthode writeFearures.\n * ✔️ In : kml du format original + features étendus\n * ✔️ Out : kml étendu avec des styles, et des metadatas (name ou extendData)\n * > on modifie le kml généré par le format original avec les fonctionnalités que nous avons ajoutées aux features.\n *\n * Le principe\n * On parse le kml, et on lit (get) ou on ajoute (set) des fonctionnalités.\n *\n * Les getters vont lire le kml (ex. LabelExtendStyle), et ajouter le style ainsi que le nom du label dans le feature original.\n * getLabelIconStyle (appel des 2 fonctions suivantes)\n * getLabelExtendStyle (New)\n * getHotSpotIconStyle (Bug sur la lecture du hotspot)\n * getExtendData (New)\n *\n * Les setters vont écrire dans le dom du kml original les fonctionnalités ajoutées dans les features.\n * setLabelExtendStyle (New)\n * setHotSpotIconStyle (Bug sur l'écriture du hotspot)\n * setNameData (Bug suppression de cette balise du format par défaut).\n *\n */\n\n /**\n * Fonction de lecture du KML avec fonction de traitement en fonction du type\n * PlaceMark (Label ou Marker).\n * Les traitements sont de 2 types :\n * - creation de styles étendus ou correctifs sur le KML\n * - ajout de styles étendus sur les features\n *\n * @param {DOMElement} kmlNode - kml nodes\n * @param {Object[]} features - features\n * @param {Object} process - process\n *\n * @example\n * // ajoute des fonctionnalités dans le KML\n * _processKml(kmlDoc, {\n * labelStyle : createStyleLabel,\n * iconStyle : createStyleIcon\n * });\n *\n * // lit des fonctionnalités du KML non impl. par OpenLayers\n * _processKml(kmlNode, {\n * labelStyle : getStyleToFeatureLabel,\n * iconStyle : getStyleToFeatureIcon,\n * extendedData : getExtendedData\n * });\n */\n _processKml (kmlNode, features, process) {\n var firstNodeLevel = (kmlNode.nodeName === \"#document\") ? kmlNode.childNodes[0].childNodes : kmlNode.childNodes;\n\n // Si le DOM contient un seul objet, le noeud est directement un PlaceMark\n // sinon, c'est un ensemble de noeuds PlaceMark contenus dans le noeud Document.\n var nodes = firstNodeLevel;\n for (var ik = 0; ik < firstNodeLevel.length; ik++) {\n const element = firstNodeLevel[ik];\n if (element.nodeName === \"Document\") {\n nodes = element.childNodes;\n break;\n }\n if (element.nodeName === \"Placemark\") {\n nodes = [element];\n break;\n }\n }\n\n // On recherche les PlaceMark de type Point ayant un Style...\n // Le style peut être placé directement dans le PlaceMark\n // ou lié avec un id (share)\n var stylesUrl = {}; // listes des styles\n var index = -1; // index du features...\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n switch (node.nodeName) {\n case \"Style\":\n // INFO\n // pour le traitement des balises Styles liées avec styleUrl,\n // elles doivent être toujours déclarées avant les PlaceMark !\n // On ne prend en compte que celles qui sont identifiées via un ID !\n var id = node.attributes[0];\n if (id && id.nodeName === \"id\") {\n var _k = id.nodeValue;\n var _v = node;\n stylesUrl[_k] = _v;\n }\n break;\n\n case \"Placemark\":\n\n index++;\n var types = node.childNodes; // Point, LineString, Polygon, Style, ...\n var point = false;\n var line = false;\n var poly = false;\n var domStyles = null; // dom\n var hdlDomStyle = null; // dom\n var domExtendedData = null; // dom\n var domNameTag = node; // dom\n for (var j = 0; j < types.length; j++) {\n switch (types[j].nodeName) {\n case \"Polygon\":\n poly = true;\n break;\n case \"LineString\":\n line = true;\n break;\n case \"Point\":\n point = true;\n break;\n case \"Style\":\n hdlDomStyle = types[j];\n domStyles = types[j].childNodes; // liste de styles\n break;\n case \"styleUrl\":\n // style avec lien vers...\n var _idStyle = types[j].textContent.slice(1);\n if (stylesUrl[_idStyle]) {\n domStyles = stylesUrl[_idStyle].childNodes;\n }\n break;\n case \"ExtendedData\":\n domExtendedData = types[j].childNodes;\n break;\n case \"name\":\n domNameTag = null;\n break;\n default:\n // on ne traite pas les autres informations ...\n // car elles seront gérées par defaut par le format standard...\n }\n }\n\n // On traite les balises kml:extendedData pour tous les objets !\n if (domExtendedData) {\n logger.log(\"ExtendedData :\", domExtendedData);\n var fctExtend = process.extendedData;\n if (fctExtend && typeof fctExtend === \"function\") {\n fctExtend(features[index], domExtendedData);\n }\n }\n\n // On traite la balise kml:name\n if (domNameTag) {\n logger.log(\"Name :\", domNameTag);\n var fctName = process.nameData;\n if (fctName && typeof fctName === \"function\") {\n fctName(features[index], domNameTag);\n }\n }\n\n // On a un Marker avec un Style.\n // Il peut être associé avec un Label !\n // Les markers sans styles ne doivent pas être gérées par les styles par defaut\n // car le KML met en place une punaise google !\n if (point && domStyles && domStyles.length !== 0) {\n var labelStyleDom = null;\n var iconStyleDom = null;\n // On recherche le type de Style\n for (var k = 0; k < domStyles.length; k++) {\n switch (domStyles[k].nodeName) {\n case \"LabelStyle\":\n labelStyleDom = domStyles[k];\n break;\n case \"IconStyle\":\n iconStyleDom = domStyles[k];\n break;\n default:\n // on ne traite pas les autres informations ...\n }\n }\n\n // Pour un label, il nous faut un titre !\n var labelName = features[index].getProperties().name;\n var labelDescription = features[index].getProperties().description;\n var value = labelName || labelDescription;\n logger.trace(value);\n\n // C'est uniquement un Label !\n if (!iconStyleDom && labelStyleDom) {\n var fctLabel = process.labelStyle;\n if (fctLabel && typeof fctLabel === \"function\") {\n fctLabel(features[index], labelStyleDom);\n }\n // C'est uniquement un marker !\n } else if (iconStyleDom && !labelStyleDom) {\n var fctIcon = process.iconStyle;\n if (fctIcon && typeof fctIcon === \"function\") {\n fctIcon(features[index], iconStyleDom);\n }\n // C'est un marker avec un label !\n } else if (iconStyleDom && labelStyleDom) {\n var fctIconLabel = process.iconLabelStyle;\n if (fctIconLabel && typeof fctIconLabel === \"function\") {\n fctIconLabel(features[index], iconStyleDom, labelStyleDom);\n }\n } else {\n // ...\n }\n } else {\n var feature = features[index];\n var style = feature.getStyle();\n if (style && typeof style === \"function\") {\n var fstyles = style.call(this, feature, 0);\n if (fstyles && fstyles.length !== 0) {\n style = fstyles[0];\n }\n }\n\n if (poly) {\n var fctPoly = process.polygonStyle;\n if (fctPoly && typeof fctPoly === \"function\") {\n fctPoly(features[index], domStyles);\n }\n }\n\n if (line) {\n var fctLine = process.lineStringStyle;\n if (fctLine && typeof fctLine === \"function\") {\n fctLine(features[index], domStyles);\n }\n }\n\n // INFO\n // On est sur un Point mais sans style dans le DOM.\n // On regarde le style dans le Feature : Icon ou Circle ?\n if (point && style) {\n var image = style.getImage();\n if (image && image instanceof Circle) {\n var fctCircle = process.circleStyle;\n if (fctCircle && typeof fctCircle === \"function\") {\n fctCircle(features[index], hdlDomStyle);\n }\n } else if (image && image instanceof Icon) {\n var fctPoint = process.pointStyle;\n if (fctPoint && typeof fctPoint === \"function\") {\n fctPoint(features[index], hdlDomStyle);\n }\n } else {\n // ...\n }\n }\n }\n break;\n default:\n logger.trace(\"tag is not processing !\");\n }\n }\n }\n\n /**\n * Write Extend for Features.\n * This function overloads ol.format.KML.writeFeatures ...\n *\n * @see ol.format.KML.prototype.writeFeatures\n * @param {Object[]} features - Features.\n * @param {Object} options - Options.\n *\n * @return {String} kml string formatted\n */\n writeFeatures (features, options) {\n logger.log(\"overload : ol.format.KML.writeFeatures\");\n var kmlNode = super.writeFeaturesNode(features, options);\n if (kmlNode === null) {\n return null;\n }\n\n // on ajoute les extensions à la racine pour les metadonnées de calcul\n if (this.hasOwnProperty(\"extensions\")) {\n this._writeRootExtensions(kmlNode, this.extensions);\n }\n\n // On ajoute les styles étendus\n var kmlStringExtended = this._writeExtendStylesFeatures(kmlNode, features, options);\n\n // On realise un formattage du KML\n var kmlStringFormatted = Parser.format(kmlStringExtended);\n if (kmlStringFormatted === \"\") {\n return null;\n }\n\n return kmlStringFormatted;\n };\n\n /**\n * Write Extended Styles for each features\n *\n * @param {DOMElement} kmlNode - kml nodes\n * @param {Object[]} features - features\n * @param {Object} options - options\n *\n * @returns {String} kml string extended\n *\n * @private\n */\n _writeExtendStylesFeatures (kmlNode, features, options) {\n // RGB Colors (RRGGBB) To KML Colors (AABBGGRR)\n function __convertRGBColorsToKML (data, opacity) {\n var strColor = data.toString(16);\n\n if (strColor.charAt(0) === \"#\") {\n strColor = strColor.slice(1);\n }\n\n opacity = opacity || 1;\n opacity = parseInt(opacity * 255, 10);\n opacity = opacity.toString(16);\n var color = opacity;\n color = color + strColor.substr(4, 2);\n color = color + strColor.substr(2, 2);\n color = color + strColor.substr(0, 2);\n return color.toLowerCase();\n }\n\n /**\n * C'est un Label !\n * On va donc y ajouter qq styles sur le Label (police, halo, ...) :\n * Insertion : PlaceMark>Style>LabelStyle\n *\n * @param {Object} feature - feature\n * @param {DOMElement} node - node\n *\n * @example\n * \n */\n var __createExtendedStyleLabel = function (feature, node) {\n logger.trace(\"label with style :\", node);\n\n if (!feature) {\n return;\n }\n\n // Si pas de style defini, c'est donc que l'on va utiliser celui par defaut...\n if (feature.getStyle() instanceof Style) {\n var textStyle = feature.getStyle().getText();\n if (!textStyle) {\n return;\n }\n\n var _fontFamily = \"Sans\";\n var _fontSize = \"16px\";\n var _font = textStyle.getFont();\n if (_font) {\n var splits = _font.split(\" \", 2);\n _fontSize = splits[0];\n _fontFamily = splits[1];\n }\n\n var strokeTextStyle = feature.getStyle().getText().getStroke();\n if (!strokeTextStyle) {\n return;\n }\n if (strokeTextStyle instanceof Stroke) {\n var _haloColor = __convertRGBColorsToKML(\"#FFFFFF\"); // Par defaut\n var color = strokeTextStyle.getColor();\n // array ?\n if (Array.isArray(color)) {\n var cf = \"rgba(\";\n cf += color[0] + \",\";\n cf += color[1] + \",\";\n cf += color[2] + \",\";\n cf += color[3] + \")\";\n color = cf;\n }\n if (Color.isRGB(color)) {\n var colorHex = Color.rgbaToHex(color);\n _haloColor = __convertRGBColorsToKML(colorHex.hex, colorHex.opacity);\n } else {\n _haloColor = __convertRGBColorsToKML(color);\n }\n var _haloRadius = strokeTextStyle.getWidth() || \"0\";\n var _haloOpacity = \"1\"; // TODO lire param\n\n if (node && node.getElementsByTagName(\"LabelStyleSimpleExtensionGroup\").length === 0) {\n var labelExtended = document.createElementNS(kmlNode.namespaceURI, \"LabelStyleSimpleExtensionGroup\");\n labelExtended.setAttribute(\"fontSize\", _fontSize);\n labelExtended.setAttribute(\"fontFamily\", _fontFamily);\n labelExtended.setAttribute(\"haloColor\", _haloColor);\n labelExtended.setAttribute(\"haloRadius\", _haloRadius);\n labelExtended.setAttribute(\"haloOpacity\", _haloOpacity);\n node.appendChild(labelExtended);\n }\n }\n\n var fImageStyle = feature.getStyle().getImage();\n if (!fImageStyle) {\n return;\n }\n if (fImageStyle instanceof Circle) {\n var strokeColor = null;\n var strokeWidth = null;\n if (fImageStyle.getStroke()) {\n strokeWidth = fImageStyle.getStroke().getWidth();\n strokeColor = fImageStyle.getStroke().getColor();\n // array ?\n if (Array.isArray(strokeColor)) {\n var cfs = \"rgba(\";\n cfs += strokeColor[0] + \",\";\n cfs += strokeColor[1] + \",\";\n cfs += strokeColor[2] + \",\";\n cfs += strokeColor[3] + \")\";\n strokeColor = cfs;\n }\n if (Color.isRGB(strokeColor)) {\n var strokeColorHex = Color.rgbaToHex(strokeColor);\n strokeColor = __convertRGBColorsToKML(strokeColorHex.hex, strokeColorHex.opacity);\n } else {\n strokeColor = __convertRGBColorsToKML(strokeColor);\n }\n }\n\n var fillColor = null;\n if (fImageStyle.getFill()) {\n fillColor = fImageStyle.getFill().getColor();\n // array ?\n if (Array.isArray(fillColor)) {\n var cff = \"rgba(\";\n cff += fillColor[0] + \",\";\n cff += fillColor[1] + \",\";\n cff += fillColor[2] + \",\";\n cff += fillColor[3] + \")\";\n fillColor = cff;\n }\n if (Color.isRGB(fillColor)) {\n var fillColorHex = Color.rgbaToHex(fillColor);\n fillColor = __convertRGBColorsToKML(fillColorHex.hex, fillColorHex.opacity);\n } else {\n fillColor = __convertRGBColorsToKML(fillColor);\n }\n }\n\n if (node && node.getElementsByTagName(\"ObjectSimpleExtensionGroup\").length === 0) {\n var iconExtended = document.createElementNS(kmlNode.namespaceURI, \"ObjectSimpleExtensionGroup\");\n iconExtended.setAttribute(\"type\", \"circle\"); // FIXME type circle only !\n iconExtended.setAttribute(\"radius\", fImageStyle.getRadius());\n iconExtended.setAttribute(\"fillColor\", fillColor);\n iconExtended.setAttribute(\"strokeColor\", strokeColor);\n iconExtended.setAttribute(\"strokeWidth\", strokeWidth);\n node.appendChild(iconExtended);\n }\n }\n }\n };\n\n /**\n * C'est un marker !\n * On va donc ajouter la balise hotspot :\n * Traiter le cas où les unités sont de type\n * - FRACTION\n * - PIXELS\n * Insertion du correctif dans le noeud : \n */\n var __createExtendedStyleIcon = function (feature, node) {\n logger.trace(\"marker with style (hotspot):\", node);\n\n if (!feature) {\n return;\n }\n\n // Si pas de style defini, c'est donc que l'on va utiliser celui par defaut...\n if (feature.getStyle() instanceof Style) {\n var fImageStyle = feature.getStyle().getImage();\n\n if (!fImageStyle) {\n return;\n }\n\n if (fImageStyle instanceof Icon) {\n var x = 0;\n var y = 0;\n var xunits = \"pixels\";\n var yunits = \"pixels\";\n\n var size = fImageStyle.getSize();\n var anchor = fImageStyle.getAnchor(); // pixels ! but anchor_ in the current unit !\n\n if (anchor.length) {\n x = anchor[0];\n y = anchor[1];\n if (yunits === \"fraction\") {\n y = (y === 1) ? 0 : 1 - y; // cf. fixme contribution à faire !\n } else {\n y = (yunits === \"pixels\" && y === size[1]) ? 0 : size[1] - y; // cf. fixme contribution à faire !\n }\n }\n\n if (node && node.getElementsByTagName(\"hotSpot\").length === 0) {\n var hotspot = document.createElementNS(kmlNode.namespaceURI, \"hotSpot\");\n hotspot.setAttribute(\"x\", x);\n hotspot.setAttribute(\"y\", y);\n hotspot.setAttribute(\"xunits\", xunits);\n hotspot.setAttribute(\"yunits\", yunits);\n node.appendChild(hotspot);\n }\n }\n }\n };\n\n /**\n * ...\n * @param {*} feature - feature\n * @param {DOMElement} node - node\n */\n var __createExtendedStyleToCircle = function (feature, node) {\n if (!feature) {\n return;\n }\n\n // Si pas de style defini, c'est donc que l'on va utiliser celui par defaut...\n if (feature.getStyle() instanceof Style) {\n var fImageStyle = feature.getStyle().getImage();\n if (!fImageStyle) {\n return;\n }\n if (fImageStyle instanceof Circle) {\n var strokeColor = null;\n var strokeWidth = null;\n if (fImageStyle.getStroke()) {\n strokeWidth = fImageStyle.getStroke().getWidth();\n strokeColor = fImageStyle.getStroke().getColor();\n // array ?\n if (Array.isArray(strokeColor)) {\n var cf = \"rgba(\";\n cf += strokeColor[0] + \",\";\n cf += strokeColor[1] + \",\";\n cf += strokeColor[2] + \",\";\n cf += strokeColor[3] + \")\";\n strokeColor = cf;\n }\n if (Color.isRGB(strokeColor)) {\n var colorHex = Color.rgbaToHex(strokeColor);\n strokeColor = __convertRGBColorsToKML(colorHex.hex, colorHex.opacity);\n } else {\n strokeColor = __convertRGBColorsToKML(strokeColor);\n }\n }\n\n var fillColor = null;\n if (fImageStyle.getFill()) {\n fillColor = fImageStyle.getFill().getColor();\n // array ?\n if (Array.isArray(fillColor)) {\n var cfi = \"rgba(\";\n cfi += fillColor[0] + \",\";\n cfi += fillColor[1] + \",\";\n cfi += fillColor[2] + \",\";\n cfi += fillColor[3] + \")\";\n fillColor = cfi;\n }\n if (Color.isRGB(fillColor)) {\n var fillColorImgHex = Color.rgbaToHex(fillColor);\n fillColor = __convertRGBColorsToKML(fillColorImgHex.hex, fillColorImgHex.opacity);\n } else {\n fillColor = __convertRGBColorsToKML(fillColor);\n }\n }\n\n if (node && node.getElementsByTagName(\"ObjectSimpleExtensionGroup\").length === 0) {\n var labelStyle = document.createElementNS(kmlNode.namespaceURI, \"LabelStyle\");\n var circleExtended = document.createElementNS(kmlNode.namespaceURI, \"ObjectSimpleExtensionGroup\");\n circleExtended.setAttribute(\"type\", \"circle\"); // FIXME type circle only !\n circleExtended.setAttribute(\"radius\", fImageStyle.getRadius());\n circleExtended.setAttribute(\"fillColor\", fillColor);\n circleExtended.setAttribute(\"strokeColor\", strokeColor);\n circleExtended.setAttribute(\"strokeWidth\", strokeWidth);\n labelStyle.appendChild(circleExtended);\n node.appendChild(labelStyle);\n }\n }\n }\n };\n\n /**\n * ...\n * @param {*} feature - feature\n * @param {DOMElement} node - node\n */\n var __createExtendedStyleToPoint = function (feature, node) {};\n\n // TODO\n var __createExtendedStyleToIconLabel = function (feature, nodeIconStyle, nodeLabelStyle) {\n logger.trace(\"write an icon with a label\");\n __createExtendedStyleIcon(feature, nodeIconStyle);\n __createExtendedStyleLabel(feature, nodeLabelStyle);\n };\n\n // TODO\n var __setNameData = function (feature, tags) {\n for (var i = 0; i < tags.length; i++) {\n var tag = tags[i];\n if (tag.nodeName === \"name\") {\n return;\n }\n }\n\n var labelName = feature.getProperties().name;\n if (labelName) {\n var name = document.createElement(\"name\");\n name.innerHTML = labelName;\n tags.appendChild(name);\n }\n };\n\n // TODO\n var _setExtendedDataStyle = function (feature, node) {\n if (node && node.length) {\n var removeNodes = [];\n for (var k = 0; k < node.length; k++) {\n const element = node[k];\n if (element.nodeName === \"Data\") {\n var key = element.getAttribute(\"name\");\n if (Styling.getListTags().includes(key)) {\n removeNodes.push(element);\n }\n }\n }\n if (removeNodes && removeNodes.length) {\n removeNodes.forEach(e => {\n e.remove();\n });\n }\n }\n };\n\n // On ajoute les styles étendus dans le DOM\n this._processKml(kmlNode, features, {\n labelStyle : __createExtendedStyleLabel,\n iconStyle : __createExtendedStyleIcon,\n iconLabelStyle : __createExtendedStyleToIconLabel,\n circleStyle : __createExtendedStyleToCircle,\n pointStyle : __createExtendedStyleToPoint,\n nameData : __setNameData,\n extendedData : _setExtendedDataStyle\n });\n\n // On convertit le DOM en String...\n var kmlStringExtended = Parser.toString(kmlNode);\n if (!kmlStringExtended) {\n return null;\n }\n\n return kmlStringExtended;\n };\n\n /**\n * ...\n *\n * @param {*} kmlNode - ...\n * @param {*} extensions - ...\n */\n _writeRootExtensions (kmlNode, extensions) {\n var extendDataElement = document.createElementNS(kmlNode.namespaceURI, \"ExtendedData\");\n // on boucle sur toutes les clefs\n for (const key in extensions) {\n if (Object.hasOwnProperty.call(extensions, key)) {\n const value = extensions[key];\n var dataElement = document.createElementNS(kmlNode.namespaceURI, \"Data\");\n dataElement.setAttribute(\"name\", key);\n var data = document.createTextNode(JSON.stringify(value));\n dataElement.appendChild(data);\n extendDataElement.appendChild(dataElement);\n }\n }\n // insertion en 1ere place !\n var firstChild = kmlNode.firstChild;\n kmlNode.insertBefore(extendDataElement, firstChild);\n }\n\n /**\n * Read Extend for Features.\n * This function overloads ol.format.KML.readFeatures ...\n *\n * @see ol.format.KML.prototype.readFeatures\n * @param {Document|Node} source - Source.\n * @param {olx.format.ReadOptions=} options - options.\n * @return {Array.} Features.\n */\n readFeatures (source, options) {\n logger.log(\"overload : ol.format.KML.readFeatures\");\n\n // String ou Dom\n if (typeof source === \"string\") {\n this.source = Parser.parse(source);\n } else if (source !== null) {\n this.source = source;\n }\n\n var features = this._readExtendStylesFeatures(source, options);\n logger.trace(\"Styles étendus\", features);\n\n // On met à jour les attributs de style dans les features\n features.forEach(feature => {\n Styling.definePropertiesFromStyle(feature);\n });\n\n return features;\n };\n\n /**\n * Read Extended Styles for each features\n *\n * @param {(Document|Node|ArrayBuffer|Object|String)} source - source\n * @param {olx.format.ReadOptions=} options - options\n *\n * @returns {Object[]} features\n *\n * @private\n */\n _readExtendStylesFeatures (source, options) {\n var features = super.readFeatures(source, options);\n\n var kmlDoc = null;\n var kmlString = \"\";\n\n if (typeof source === \"string\") {\n kmlString = source;\n } else {\n kmlString = source.documentElement.outerHTML;\n }\n\n // On 'deformatte' le KML afin d'eviter des pb de parsing...\n kmlString = kmlString.replace(/\\n/g, \"\");\n kmlString = kmlString.replace(/(>)\\s*(<)/g, \"$1$2\");\n\n // On met en place un Parser sur le KML\n kmlDoc = Parser.parse(kmlString);\n\n if (kmlDoc === null) {\n // au cas où...\n return features;\n }\n\n // KML Colors (AABBGGRR) To RGB Colors (RRGGBB)\n function __convertKMLColorsToRGB (data) {\n var color = \"\";\n color = color + data.substr(6, 2);\n color = color + data.substr(4, 2);\n color = color + data.substr(2, 2);\n var hex = parseInt(color, 16).toString(16);\n var comp = \"\";\n var len = hex.length || 0;\n for (var i = 0; i < (6 - len); i++) {\n comp += \"0\";\n }\n hex = \"#\" + comp + hex;\n return hex;\n }\n\n /**\n * Gestion des styles étendus sur le Label\n *\n * @param {Object} feature - ol feature\n * @param {DOMElement} node - node\n *\n * @example\n * \n * Un label\n * C'est un label étendu !\n * \n * \n * 2,48\n * \n * \n */\n var __getExtendedStyleToFeatureLabel = function (feature, node) {\n logger.trace(\"label with style :\", node);\n\n if (!feature) {\n return;\n }\n\n // label\n var _text = feature.getProperties().name;\n var _color = __convertKMLColorsToRGB(\"ff000000\"); // \"#000000\"\n var _colorHalo = \"#FFFFFF\";\n var _radiusHalo = 0;\n // var _opacityHalo = 1; // TODO\n var _font = \"Sans\";\n var _fontSize = \"16px\";\n\n // cercle\n var _circleType = null;\n var _circleRadius = 5;\n var _circleFillColor = \"#000000\";\n var _circleStrokeColor = \"#ffffff\";\n var _circleStrokeWidth = 1;\n\n // On recherche les balises du Style\n var bLabelStyleSimpleExtensionGroup = false;\n var bObjectSimpleExtensionGroup = false;\n var nodeStyles = node.childNodes;\n for (var k = 0; k < nodeStyles.length; k++) {\n switch (nodeStyles[k].nodeName) {\n case \"scale\":\n // TODO\n break;\n case \"colorMode\":\n // TODO\n break;\n case \"color\":\n _color = __convertKMLColorsToRGB(nodeStyles[k].textContent);\n break;\n case \"LabelStyleSimpleExtensionGroup\":\n bLabelStyleSimpleExtensionGroup = true;\n var attributs = nodeStyles[k].attributes;\n for (var l = 0; l < attributs.length; l++) {\n switch (attributs[l].nodeName) {\n case \"fontFamily\":\n _font = attributs[l].nodeValue;\n break;\n case \"fontSize\":\n _fontSize = attributs[l].nodeValue;\n break;\n case \"haloColor\":\n _colorHalo = __convertKMLColorsToRGB(attributs[l].nodeValue);\n break;\n case \"haloRadius\":\n _radiusHalo = parseInt(attributs[l].nodeValue, 10);\n break;\n case \"haloOpacity\":\n // _opacityHalo = parseFloat(attributs[l].nodeValue);\n // TODO opacité !\n // if (_opacityHalo !== 1) {\n // _colorHalo = Color.hexToRgba(_colorHalo, _opacityHalo);\n // }\n break;\n default:\n }\n }\n break;\n case \"ObjectSimpleExtensionGroup\":\n bObjectSimpleExtensionGroup = true;\n var attributsExt = nodeStyles[k].attributes;\n for (var ll = 0; ll < attributsExt.length; ll++) {\n // type=\"circle\" radius=\"15\" fillColor=\"7f3737a0\" strokeColor=\"cc000000\" strokeWidth=\"2\"\n switch (attributsExt[ll].nodeName) {\n case \"type\":\n _circleType = attributsExt[ll].nodeValue;\n break;\n case \"radius\":\n _circleRadius = parseInt(attributsExt[ll].nodeValue, 10);\n break;\n case \"fillColor\":\n var fillColorValue = attributsExt[ll].nodeValue;\n var fillOpacity = Math.round((Color.num(fillColorValue.substr(0, 2)) / 255) * 10) / 10;\n var fillColorHexa = __convertKMLColorsToRGB(fillColorValue);\n _circleFillColor = Color.hexToRgba(fillColorHexa, fillOpacity);\n break;\n case \"strokeColor\":\n var strokeColorValue = attributsExt[ll].nodeValue;\n var strokeOpacity = Math.round((Color.num(strokeColorValue.substr(0, 2)) / 255) * 10) / 10;\n var strokeColorHexa = __convertKMLColorsToRGB(strokeColorValue);\n _circleStrokeColor = Color.hexToRgba(strokeColorHexa, strokeOpacity);\n break;\n case \"strokeWidth\":\n _circleStrokeWidth = parseInt(attributsExt[ll].nodeValue, 10);\n break;\n default:\n }\n }\n break;\n default:\n // on ne traite pas les autres informations ...\n }\n }\n\n var StyleInstance = null;\n if (bObjectSimpleExtensionGroup && _circleType === \"circle\") {\n StyleInstance = new Circle({\n radius : _circleRadius,\n fill : new Fill({\n color : _circleFillColor\n }),\n stroke : new Stroke({\n color : _circleStrokeColor,\n width : _circleStrokeWidth\n })\n });\n } else if (bLabelStyleSimpleExtensionGroup) {\n // INFO\n // on ajoute une image magique 1x1 pixel invisible\n // afin d'eviter l'affichage d'une punaise google !\n StyleInstance = new Icon({\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNiYAAAAAkAAxkR2eQAAAAASUVORK5CYII=\",\n size : [51, 38],\n anchor : [25.5, 38],\n anchorOrigin : \"top-left\",\n anchorXUnits : \"pixels\",\n anchorYUnits : \"pixels\"\n });\n } else {\n // ...\n }\n // On reconstruit le style !\n feature.setStyle(new Style({\n image : StyleInstance,\n text : new Text({\n font : _fontSize + \" \" + _font,\n textAlign : \"left\",\n text : _text,\n // offsetX : 5, // FIXME valeur arbitraire MAIS esthétique !\n fill : new Fill({\n color : _color\n }),\n stroke : new Stroke({\n color : _colorHalo,\n width : _radiusHalo\n })\n })\n }));\n };\n\n /**\n * Gestion des styles étendus sur un Marker\n *\n * > correctif sur la balise kml:hostSpot\n * - problème avec 'hotspot y === 0' (?)\n *\n * @param {Object} feature - ol feature\n * @param {DOMElement} node - node\n *\n * @example\n * \n * \n * \n * 2,48\n * \n * \n */\n var __getExtendedStyleToFeatureIcon = function (feature, node) {\n logger.trace(\"hotspot :\", node);\n\n // marker\n var _src = null;\n var _scale = null;\n var _color = __convertKMLColorsToRGB(\"ffffffff\");\n\n var _bSizeIcon = false;\n var _sizeW = 51;\n var _sizeH = 38;\n\n var _bHotSpot = false;\n var _anchorX = 25.5;\n var _anchorXUnits = \"pixels\";\n var _anchorY = 38;\n var _anchorYUnits = \"pixels\";\n\n var nodeStyles = node.childNodes;\n var bIconStyle = false;\n for (var k = 0; k < nodeStyles.length; k++) {\n switch (nodeStyles[k].nodeName) {\n case \"Icon\":\n bIconStyle = true;\n var nodes = nodeStyles[k].childNodes;\n for (var i = 0; i < nodes.length; i++) {\n switch (nodes[i].nodeName) {\n case \"href\":\n _src = nodes[i].textContent;\n break;\n case \"gx:w\":\n _bSizeIcon = true;\n _sizeW = parseFloat(nodes[i].textContent);\n break;\n case \"gx:h\":\n _bSizeIcon = true;\n _sizeH = parseFloat(nodes[i].textContent);\n break;\n default:\n }\n }\n break;\n case \"hotSpot\":\n _bHotSpot = true;\n var attributs = nodeStyles[k].attributes;\n for (var l = 0; l < attributs.length; l++) {\n switch (attributs[l].nodeName) {\n case \"x\":\n _anchorX = parseFloat(attributs[l].nodeValue);\n break;\n case \"y\":\n _anchorY = parseFloat(attributs[l].nodeValue);\n break;\n case \"yunits\":\n _anchorXUnits = attributs[l].nodeValue;\n break;\n case \"xunits\":\n _anchorYUnits = attributs[l].nodeValue;\n break;\n default:\n }\n }\n break;\n case \"scale\":\n _scale = parseFloat(nodeStyles[k].textContent);\n break;\n case \"color\":\n _color = __convertKMLColorsToRGB(nodeStyles[k].textContent);\n break;\n default:\n // on ne traite pas les autres informations ...\n }\n }\n\n var StyleInstance = null;\n if (bIconStyle) {\n // une image magique 1x1 pixel invisible\n var optionsIcon = {\n src : _src || \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNiYAAAAAkAAxkR2eQAAAAASUVORK5CYII=\",\n color : _color,\n crossOrigin : \"anonymous\", // cf. https://gis.stackexchange.com/questions/121555/wms-server-with-cors-enabled/147403#147403\n scale : _scale || 1\n };\n\n if (_bSizeIcon) {\n Utils.mergeParams(optionsIcon, {\n size : [_sizeW, _sizeH]\n });\n }\n\n if (_bHotSpot) {\n Utils.mergeParams(optionsIcon, {\n anchor : [_anchorX, _anchorY],\n anchorOrigin : \"bottom-left\",\n anchorXUnits : _anchorXUnits || \"pixels\",\n anchorYUnits : _anchorYUnits || \"pixels\"\n });\n }\n\n StyleInstance = new Icon(optionsIcon);\n }\n\n // existe il déjà le style du label ?\n var featureStyleFunction = feature.getStyleFunction();\n if (featureStyleFunction) {\n var _styles = featureStyleFunction(feature, 0);\n if (_styles && !Array.isArray(_styles)) {\n _styles = [_styles];\n }\n if (_styles && _styles.length !== 0) {\n var _style = (_styles.length === 1) ? _styles[0] : _styles[_styles.length - 1];\n // on écrase l'icone magic du label !\n feature.setStyle(new Style({\n image : StyleInstance,\n text : _style.getText()\n }));\n }\n }\n };\n\n /**\n * Gestion de la balise kml:ExtendedData\n *\n * @param {Object} feature - ol feature\n * @param {DOMElement[]} extend - extend\n *\n * @example\n * //--> Marker (Point), LineString, Polygon\n * \n * \n * title\n * Titre à concatener avec la valeur de la balise \"kml:description\"\n * \n * \n * //--> Label\n * \n * \n * PARIS // valeur à remplacer dans \"kml:name\"\n * \n * \n * title\n * Titre à concatener avec la valeur de la balise \"kml:description\"\n * \n * \n */\n var __getExtendedData = function (feature, extend) {\n logger.trace(\"extendData :\", extend);\n\n if (!feature) {\n return;\n }\n\n var props = {};\n\n var _fname = feature.get(\"name\") || \"\";\n var _fdescription = feature.get(\"description\") || \"\";\n var _ftitle = null;\n for (var i = 0; i < extend.length; i++) {\n var data = extend[i];\n var name = data.attributes[0]; // 1 seul attribut !\n var nodes = data.childNodes;\n if (name.nodeName === \"name\") {\n switch (name.nodeValue) {\n // compatibilité ancien geoportail !\n case \"label\":\n _fname = data.textContent;\n props.name = _fname;\n break;\n // compatibilité ancien geoportail !\n case \"title\":\n case \"attributetitle\":\n for (var j = 0; j < nodes.length; j++) {\n if (nodes[j].nodeName === \"value\") {\n _ftitle = nodes[j].textContent;\n }\n }\n break;\n default:\n props[name.nodeValue] = data.textContent;\n break;\n }\n }\n }\n\n // Modification des properties \"name\" et \"description\"\n if (_ftitle) {\n _fdescription = (_fdescription) ? _ftitle + \" : \" + _fdescription : _ftitle;\n props.description = _fdescription;\n }\n\n if (Object.keys(props).length) {\n feature.setProperties(props, true);\n }\n };\n\n /**\n * TODO\n * ...\n *\n * @param {Object} feature - ol feature\n * @param {DOMElement} nodeIconStyle - icon style\n * @param {DOMElement} nodeLabelStyle - label style\n * @example\n * ...\n */\n var __getExtendedStyleToFeatureIconLabel = function (feature, nodeIconStyle, nodeLabelStyle) {\n logger.trace(\"display icon and label\");\n __getExtendedStyleToFeatureLabel(feature, nodeLabelStyle);\n __getExtendedStyleToFeatureIcon(feature, nodeIconStyle);\n };\n\n // TODO...\n var __getStyleToDefaultFeature = function (feature, node) {};\n\n // On lit les styles étendus et on les ajoute aux features\n this._processKml(kmlDoc, features, {\n lineStringStyle : __getStyleToDefaultFeature,\n polygonStyle : __getStyleToDefaultFeature,\n pointStyle : __getStyleToDefaultFeature,\n labelStyle : this.showPointNames_ ? __getExtendedStyleToFeatureLabel : null,\n iconStyle : __getExtendedStyleToFeatureIcon,\n iconLabelStyle : this.showPointNames_ ? __getExtendedStyleToFeatureIconLabel : __getExtendedStyleToFeatureIcon,\n extendedData : __getExtendedData\n });\n\n return features;\n };\n\n /**\n * ...\n * @param {*} key ...\n * @returns {Object} json\n */\n readRootExtensions (key) {\n var value = {};\n // Rechercher le tag avec la clef : geoportail:compute\n // \n // {...}\n // \n var firstNodeLevelKml = (this.source.nodeName === \"#document\") ? this.source.childNodes[0] : this.source;\n var childNodesLevel = firstNodeLevelKml.childNodes;\n for (var i = 0; i < childNodesLevel.length; i++) {\n var node1 = childNodesLevel[i];\n if (node1.nodeName === \"ExtendedData\") {\n var childNodesExtended = node1.childNodes;\n for (var j = 0; j < childNodesExtended.length; j++) {\n var node2 = childNodesExtended[j];\n if (node2.nodeName === \"Data\") {\n var name = node2.attributes[0];\n if (name && name.nodeName === \"name\") {\n if (name.nodeValue === key) {\n value = JSON.parse(node2.textContent);\n break;\n }\n }\n }\n }\n }\n }\n return value;\n }\n\n};\n\nexport default KML;\n\n// Expose KML as ol.source.KMLExtended. (for a build bundle)\nif (window.ol && window.ol.format) {\n window.ol.format.KMLExtended = KML;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.format.GPX;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.geom.MultiLineString;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.geom.LineString;","// import openlayers\nimport olGPX from \"ol/format/GPX\";\n// import Geometry\nimport MultiLineString from \"ol/geom/MultiLineString\";\nimport LineString from \"ol/geom/LineString\";\n// import local\nimport Styling from \"./Styling\";\nimport Parser from \"../Utils/Parser\";\n\n/**\n * @classdesc\n *\n * Extended Styles GPX format to export (internal use only !)\n *\n * SPEC\n * cf. https://www.topografix.com/gpx.asp\n *\n *\n * @constructor\n * @alias ol.format.GPXExtended\n * @extends {ol.format.GPX}\n * @type {ol.format.GPXExtended}\n * @param {Object} options - Options\n * @param {Object} [options.defaultStyle] - Styles by default\n * @param {String} [options.orderBy] - Sort by key the feature before writing. By default, no sorting\n * @param {Object} [options.extensions] - Add properties to file root\n * @param {function} [options.readExtensions] - Reading extensions (native)\n */\nvar GPX = class GPX extends olGPX {\n\n /**\n * See {@link ol.format.GPXExtended}\n * @module GPXExtended\n * @alias module:~formats/GPXExtended\n * @param {*} options - options\n * @example\n * import GPXExtended from from \"gpf-ext-ol/formats/GPXExtended\"\n * ou \n * import { GPXExtended } from \"gpf-ext-ol\"\n */\n constructor (options) {\n super(options);\n\n if (!(this instanceof GPX)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this.options = options || {};\n\n // INFO\n // surcharge de la callback : readExtensions\n if (this.options.readExtensions && typeof this.options.readExtensions === \"function\") {\n var clbk = this.options.readExtensions; // callback definie par l'utilisateur\n this.options.readExtensions = function (feature, node) {\n this.readExtensions(feature, node);\n clbk.call(this, feature, node);\n };\n } else {\n this.options.readExtensions = this.readExtensions;\n }\n\n // INFO\n // defaultStyle est un objet de type Style\n if (this.options.defaultStyle === null || typeof this.options.defaultStyle === \"undefined\") {\n this.options.defaultStyle = {};\n }\n\n this.source = null;\n\n return this;\n }\n\n /**\n * Read Extend Styles for Features.\n * This function overloads ol.format.GPX.readFeatures ...\n *\n * @see ol.format.GPX.prototype.readFeatures\n * @param {Document|Node} source - Source.\n * @param {olx.format.ReadOptions=} options - options.\n * @return {Array.} Features.\n */\n readFeatures (source, options) {\n // INFO\n // le travail de lecture des extensions du format est porté\n // par la callback des options : readExtensions\n var features = super.readFeatures(source, options);\n\n // String ou Dom\n if (typeof source === \"string\") {\n this.source = Parser.parse(source);\n } else if (source !== null) {\n this.source = source;\n }\n\n // INFO\n // on applique les styles par defaut definis avec l'option defaultStyle\n // sauf sur les features qui possèdent des extensions.\n // les features avec extensions sont traité au préalable\n // dans la callback des options : readExtensions\n var self = this;\n features.forEach(function (feature, index, array) {\n feature.setId(index + 1);\n // HACK : enregistrement de la description de la balise 'desc' du format GPX\n var value = feature.getProperties().desc;\n if (value) {\n feature.setProperties({\n description : value\n });\n }\n var featureStyleFunction = feature.getStyleFunction();\n if (!featureStyleFunction) {\n var styleFunction = Styling.defineStyleFunctionByDefault(self.options.defaultStyle);\n if (styleFunction) {\n feature.setStyle(styleFunction);\n }\n }\n });\n return features;\n }\n\n /**\n * Write Extend Styles for Features.\n * This function overloads ol.format.GPX.writeFeatures ...\n *\n * @see ol.format.GPX.prototype.writeFeatures\n * @param {Object[]} features - Features.\n * @param {Object} options - Options.\n *\n * @return {String} Result or null.\n */\n writeFeatures (features, options) {\n // INFO\n // il n'est pas possible de surcharger les parsers d'OpenLayers (private),\n // on decide de (re)parser la sortie d'OpenLayers afin d'y placer les balises\n // d'extensions\n\n // on met à jour les properties de styles\n features.forEach(function (feature, index, array) {\n // HACK : enregistrement de la description dans la balise 'desc' du format GPX\n var value = feature.getProperties().description;\n if (value) {\n feature.setProperties({\n desc : value\n });\n }\n\n Styling.definePropertiesFromStyle(feature);\n\n // HACK : Le type surfacique n'existe pas au format GPX,\n // on doit la transformer en un lineaire.\n // Par contre, on garde un trace de la transformation :\n // * le style surfacique\n // * le type de geometrie initiale\n var type = feature.getGeometry().getType();\n if (type === \"Polygon\") {\n // creation d'une copie pour ne pas modifier les features de carte\n var fp = feature.clone();\n fp.set(\"type\", type);\n fp.setGeometry(new LineString(feature.getGeometry().getCoordinates()));\n features.push(fp);\n // feature à supprimer de l'export\n array.splice(index, 1);\n } else if (type === \"MultiPolygon\") {\n // creation d'une copie pour ne pas modifier les features de carte\n var fm = feature.clone();\n fm.set(\"type\", type);\n fm.setGeometry(new MultiLineString(feature.getGeometry().getCoordinates()));\n features.push(fm);\n // feature à supprimer de l'export\n array.splice(index, 1);\n }\n });\n\n // tri des features en fonction de la balise \"number\" || \"id\" || \"order\"\n if (this.options.orderBy !== undefined) {\n var key = this.options.orderBy;\n if (key) {\n var sortFct = function (a, b) {\n var cmpA = a.get(key) || 0;\n var cmpB = b.get(key) || 0;\n return cmpA.toString().localeCompare(cmpB.toString(), undefined, { numeric : true });\n };\n features.sort(sortFct);\n }\n }\n\n // nodes\n var gpxNode = super.writeFeaturesNode(features, options);\n if (gpxNode === null) {\n return null;\n }\n\n // on ajoute les extensions à la racine pour les metadonnées de calcul\n if (this.options.hasOwnProperty(\"extensions\")) {\n this.writeRootExtensions_(gpxNode, this.options.extensions);\n }\n\n // INFO\n // à chaque fois qu'un style est trouvé dans un feature,\n // on appelle la fonction d'insertion des balises extensions dans le DOM.\n this.processExtensions_(gpxNode, features, {\n extensions : this.writeExtensions_\n });\n\n // dom -> string\n var gpxStringExtended = Parser.toString(gpxNode);\n if (!gpxStringExtended) {\n return null;\n }\n\n // format string\n var gpxStringFormatted = Parser.format(gpxStringExtended);\n if (gpxStringFormatted === \"\") {\n return null;\n }\n\n return gpxStringFormatted;\n }\n\n /**\n * Callback to read extensions from options : readExtensions\n *\n * @param {*} feature - ...\n * @param {*} node - ...\n */\n readExtensions (feature, node) {\n var _node = node;\n // recherche de la properties de type Node ou Element\n // si le node n'est pas renseigné...\n if (!node) {\n var props = feature.getProperties();\n for (const key in props) {\n if (Object.hasOwnProperty.call(props, key)) {\n const element = props[key];\n if (element instanceof Node) {\n _node = element;\n break;\n }\n }\n }\n }\n\n if (!_node) {\n // eslint-disable-next-line no-console\n console.warn(\"node not found !\");\n return;\n }\n\n // ex. de nodes :\n // \n // medium\n // \n // #ffffff\n // \n for (var index = 0; index < _node.childNodes.length; index++) {\n var element = _node.childNodes[index];\n if (element.nodeType === 1) {\n feature.set(element.nodeName, element.textContent);\n }\n }\n\n // cas particulier du format GPX :\n // il n'existe pas de surfacique sur ce format, mais il est possible de forcer\n // la transformation en polygone pour des besoins particuliers de visualisation\n Styling.APPLY_CONVERT_GEOM_GPX = true;\n var style = Styling.defineStyleFromProperties(feature);\n if (style) {\n feature.setStyle(style);\n }\n }\n\n /**\n * ...\n * @param {*} key ...\n * @returns {Object} json\n * @todo\n */\n readRootExtensions (key) {\n var value = {};\n // Rechercher :\n // \n // \n // {...}\n // \n // \n\n var firstNodeLevelGpx = this.source.childNodes[0]; // gpx\n var searchChildNodesMeta = firstNodeLevelGpx.childNodes; // search metadata\n for (var k = 0; k < searchChildNodesMeta.length; k++) {\n var nodeMeta = searchChildNodesMeta[k];\n if (nodeMeta.nodeName === \"metadata\") {\n var searchChildNodesExt = nodeMeta.childNodes; // search extensions\n for (var i = 0; i < searchChildNodesExt.length; i++) {\n var nodeExt = searchChildNodesExt[i];\n if (nodeExt.nodeName === \"extensions\") {\n var searchChildNodesData = nodeExt.childNodes; // search data\n for (var j = 0; j < searchChildNodesData.length; j++) {\n var nodeData = searchChildNodesData[j];\n if (nodeData.nodeName === \"data\") {\n var name = nodeData.attributes[0];\n if (name && name.nodeName === \"name\") {\n if (name.nodeValue === key) {\n value = JSON.parse(nodeData.textContent);\n break;\n }\n }\n }\n }\n }\n }\n }\n }\n return value;\n }\n\n /**\n * ...\n *\n * @param {*} doc - ...\n * @param {*} extensions - ...\n * @param {Boolean} [xml=false] - write tag xml or json\n */\n writeRootExtensions_ (doc, extensions, xml) {\n // TODO namespace ?\n var metadata = document.createElement(\"metadata\");\n var extensionsRoot = document.createElement(\"extensions\");\n // INFO\n // convert JSON to XML (dom)\n // * type string :\n // { typestring: \"string\" } -> string\n //\n // * type object :\n // { typeobject: { typestring1: \"string\", typestring2: \"string\" } }\n // -> \n // string\n // string\n // \n //\n // * type array :\n // { typearray : [\"item1\", \"item2\"] }\n // -> \n // item1\n // item2\n // \n //\n // * type array of array\n // -> \n // \n // 1\n // 2\n // \n // \n //\n // * type array of object\n // -> \n // \n // string\n // string\n // \n // \n // string\n // string\n // \n // \n function toDOM (node, json) {\n for (const key in json) {\n if (Object.hasOwnProperty.call(json, key)) {\n var element = json[key] || \"\"; // au cas où...\n var tag = document.createElement(key);\n // eslint-disable-next-line valid-typeof\n if (typeof element === \"string\" || typeof element === \"number\") {\n tag.innerHTML = element;\n node.appendChild(tag);\n } else if (element instanceof Array) {\n tag.setAttribute(\"type\", \"array\");\n tag.setAttribute(\"index\", element.length);\n for (let index = 0; index < element.length; index++) {\n var item = element[index] || \"\"; // au cas où...\n var n = document.createElement(\"value\");\n if (typeof item === \"string\" || typeof item === \"number\") {\n n.innerHTML = item;\n tag.appendChild(n);\n } else if (item instanceof Array) {\n n.setAttribute(\"type\", \"array\");\n n.setAttribute(\"index\", item.length);\n for (let i = 0; i < item.length; i++) {\n var value = item[i] || \"\"; // au cas où...\n var k = document.createElement(\"value\");\n if (typeof value === \"string\" || typeof value === \"number\") {\n k.innerHTML = value;\n n.appendChild(k);\n }\n }\n tag.appendChild(n);\n } else if (item instanceof Object) {\n tag.appendChild(toDOM(n, item));\n } else {\n // \"Unknown element !\"\n }\n }\n node.appendChild(tag);\n } else if (element instanceof Object) {\n node.appendChild(toDOM(tag, element));\n } else {\n // \"Unknown element !\"\n }\n }\n }\n return node;\n }\n\n if (xml) {\n // structure xml\n toDOM(extensionsRoot, extensions);\n } else {\n // structure json par defaut\n // ex.\n // \n // \n // {...}\n // \n // \n for (const key in extensions) {\n if (Object.hasOwnProperty.call(extensions, key)) {\n const value = extensions[key];\n var dataElement = document.createElement(\"data\");\n dataElement.setAttribute(\"name\", key);\n var data = document.createTextNode(JSON.stringify(value));\n dataElement.appendChild(data);\n extensionsRoot.appendChild(dataElement);\n }\n }\n }\n metadata.appendChild(extensionsRoot);\n // insertion en 1ere place !\n var firstChild = doc.firstChild;\n doc.insertBefore(metadata, firstChild);\n }\n\n /**\n * ...\n *\n * @param {Object} feature - ...\n * @param {DOMElement} node - ...\n * @private\n */\n writeExtensions_ (feature, node) {\n // creation du DOM\n var extensionsNode = document.createElementNS(node.parentNode.namespaceURI, \"extensions\");\n Styling.getListTags().forEach(key => {\n if (feature.get(key)) {\n var extension = document.createElementNS(node.parentNode.namespaceURI, key);\n extension.innerHTML = feature.get(key);\n extensionsNode.appendChild(extension);\n }\n });\n node.appendChild(extensionsNode);\n }\n\n /**\n * ...\n *\n * @param {DOMElement} doc - ...\n * @param {Object} features - ...\n * @param {Object} actions - ...\n * @private\n */\n processExtensions_ (doc, features, actions) {\n // INFO\n // OpenLayers ne gère pas tous les tags du format GPX : ex. metadata\n // Liste des tags :\n // * wpt\n // * rte\n // * trk\n // On peut y placer nos balises extensions.\n\n var index = -1;\n var nodes = doc.childNodes;\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n switch (node.nodeName) {\n case \"wpt\":\n case \"rte\":\n case \"trk\":\n index++;\n var feature = features[index];\n var style = feature.getStyle();\n if (style) {\n var fct = actions.extensions;\n if (fct && typeof fct === \"function\") {\n fct(feature, node);\n }\n }\n break;\n case \"metadata\":\n break;\n default:\n // on ne devrait jamais passer à ce niveau !?\n // eslint-disable-next-line no-console\n console.warn(\"nodename unknown :\", node.nodeName);\n break;\n }\n }\n }\n\n};\n\nexport default GPX;\n\n// Expose GPX as ol.source.GPXExtended. (for a build bundle)\nif (window.ol && window.ol.format) {\n window.ol.format.GPXExtended = GPX;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.format.GeoJSON;","// import openlayers\nimport olGeoJSON from \"ol/format/GeoJSON\";\n// import local\nimport Styling from \"./Styling\";\n\n/**\n * @classdesc\n *\n * Extended Styles GeoJSON format to export (internal use only !)\n *\n * SPEC\n * cf. https://github.com/mapbox/simplestyle-spec/\n * cf. https://geojson.org/\n *\n *\n * @constructor\n * @alias ol.format.GeoJSONExtended\n * @extends {ol.format.GeoJSON}\n * @type {ol.format.GeoJSONExtended}\n * @param {Object} options - Options\n * @param {Object} [options.defaultStyle] - Styles by default\n * @param {Object} [options.extensions] - Add properties to file root\n */\nvar GeoJSON = class GeoJSON extends olGeoJSON {\n\n /**\n * See {@link ol.format.GeoJSONExtended}\n * @module GeoJSONExtended\n * @alias module:~formats/GeoJSONExtended\n * @param {*} options - options\n * @example\n * import GeoJSONExtended from \"gpf-ext-ol/formats/GeoJSONExtended\"\n * ou \n * import { GeoJSONExtended } from \"gpf-ext-ol\"\n */\n constructor (options) {\n super(options);\n\n if (!(this instanceof GeoJSON)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this.options = options || {};\n\n // INFO\n // defaultStyle est un objet de type Style\n if (this.options.defaultStyle === null || typeof this.options.defaultStyle === \"undefined\") {\n this.options.defaultStyle = {};\n }\n\n this.source = null;\n\n return this;\n }\n\n /**\n * Read Extend Styles for Features.\n * This function overloads ol.format.GeoJSON.readFeatures ...\n *\n * @see ol.format.GeoJSON.prototype.readFeatures\n * @param {Object|String} source - Source.\n * @param {olx.format.ReadOptions} [options] - Options.\n * @return {Array.} Features.\n */\n readFeatures (source, options) {\n var features = super.readFeatures(source, options);\n\n // String ou Object\n if (typeof source === \"string\") {\n this.source = JSON.parse(source);\n } else if (source !== null) {\n this.source = source;\n }\n\n features.forEach((feature) => {\n var featureStyleFunction = feature.getStyleFunction();\n // existe t il déjà une fonction de style ?\n // si oui, on l'applique !\n if (featureStyleFunction) {\n var styles = featureStyleFunction.call(this, feature, 0);\n if (styles && styles.length !== 0) {\n feature.setStyle(styles[0]);\n }\n } else {\n // à ce niveau, il n'existe pas de styles, donc :\n // soit, on applique les styles par defaut\n // soit, on prend en compte les styles definis dans les properties / tag du fichier\n // les styles définis ecrasent les styles par defaut...\n var style = Styling.defineStyleFromProperties(feature);\n if (style) {\n feature.setStyle(style);\n } else {\n // si aucun style disponible, on utilisera le style par defaut defini\n // par l'utilisateur ou l'application\n var styleFunction = Styling.defineStyleFunctionByDefault(this.options.defaultStyle);\n if (styleFunction) {\n feature.setStyle(styleFunction);\n Styling.definePropertiesFromStyle(feature);\n }\n }\n }\n });\n\n return features;\n }\n\n /**\n * Write Extend Styles for Features.\n * This function overloads ol.format.GeoJSON.writeFeatures ...\n *\n * @see ol.format.GeoJSON.prototype.writeFeatures\n * @param {Array.} features - Features.\n * @param {Object} [options] - Options.\n *\n * @return {String} Result.\n */\n writeFeatures (features, options) {\n // on met à jour les properties de styles\n features.forEach(function (feature) {\n Styling.definePropertiesFromStyle(feature);\n });\n\n var geoJSONObject = this.writeFeaturesObject(features, options);\n\n // ajout des properties à la racine du fichier\n // ex. options : {\n // extensions : { /* liste des objets à ajouter */ }\n // }\n if (this.options.hasOwnProperty(\"extensions\")) {\n Object.assign(geoJSONObject, this.options.extensions);\n }\n\n return JSON.stringify(geoJSONObject);\n }\n\n /**\n * ...\n * @param {*} key ...\n * @returns {Object} json\n */\n readRootExtensions (key) {\n return this.source[key];\n }\n\n};\n\nexport default GeoJSON;\n\n// Expose GeoJSON as ol.source.GeoJSONExtended. (for a build bundle)\nif (window.ol && window.ol.format) {\n window.ol.format.GeoJSONExtended = GeoJSON;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.extent;","// import OpenLayers\nimport WMTSSource from \"ol/source/WMTS\";\nimport {\n extend,\n createEmpty as olCreateEmpty,\n getWidth as olGetWidth,\n intersects as olIntersects\n} from \"ol/extent\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Utils from \"../Utils/Helper\";\n\n/**\n * @classdesc\n *\n * Extended ol.source.WMTS.\n *\n * @constructor\n * @alias ol.source.WMTSExtended\n * @type {ol.source.WMTS}\n * @extends {ol.source.WMTS}\n * @param {Object} options - Options\n */\nvar WMTS = class WMTS extends WMTSSource {\n\n constructor (options) {\n // if (!(this instanceof WMTS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n\n // call constructor\n super(options);\n }\n\n /**\n * Return the GetFeatureInfo URL for the passed coordinate, resolution, and\n * projection. Return `undefined` if the GetFeatureInfo URL cannot be\n * constructed.\n * @param {ol.Coordinate} coordinate - Coordinate.\n * @param {Number} resolution - Resolution.\n * @param {ol.proj.Projection} projection - Projection.\n * @param {!Object} params - GetFeatureInfo params. `INFOFORMAT` at least should\n * be provided.\n * @return {String|undefined} GetFeatureInfo URL.\n */\n getFeatureInfoUrl (coordinate, resolution, projection, params) {\n // INFO\n // en fonction de la version d'openlayers, la méthode est differente :\n // - getGetFeatureInfoUrl en v5\n // - getFeatureInfoUrl en v6\n var pixelRatio = (this.options && this.options.tilePixelRatio) ? this.options.tilePixelRatio : 1;\n\n var tileGrid = this.tileGrid;\n var tileCoord = this.tileGrid.getTileCoordForCoordAndResolution(coordinate, resolution);\n\n // this code is duplicated from createFromWMTSTemplate function\n var getTransformedTileCoord = function (tileCoord, tileGrid, projection) {\n var tmpTileCoord = [0, 0, 0]; /* Note : [z(zoomLevel),x,y] */\n var tmpExtent = olCreateEmpty();\n var x = tileCoord[1];\n var y = tileCoord[2];\n var tileExtent = tileGrid.getTileCoordExtent(tileCoord);\n var extent = projection.getExtent();\n\n if (extent != null && projection.isGlobal()) {\n var numCols = Math.ceil(olGetWidth(extent) / olGetWidth(tileExtent));\n x = x % numCols;\n tmpTileCoord[0] = tileCoord[0];\n tmpTileCoord[1] = x;\n tmpTileCoord[2] = tileCoord[2];\n tileExtent = tileGrid.getTileCoordExtent(tmpTileCoord, tmpExtent);\n }\n if (!olIntersects(tileExtent, extent) /* || ol.extent.touches(tileExtent, extent) */) {\n return null;\n }\n return [tileCoord[0], x, y];\n };\n\n var tileExtent = tileGrid.getTileCoordExtent(tileCoord);\n var transformedTileCoord = getTransformedTileCoord(tileCoord, tileGrid, projection);\n\n if (tileGrid.getResolutions().length <= tileCoord[0]) {\n return undefined;\n }\n\n var tileResolution = tileGrid.getResolution(tileCoord[0]);\n var tileMatrix = tileGrid.getMatrixIds()[tileCoord[0]];\n\n var baseParams = {\n SERVICE : \"WMTS\",\n VERSION : \"1.0.0\",\n REQUEST : \"GetFeatureInfo\",\n LAYER : this.getLayer(),\n TILECOL : transformedTileCoord[1],\n TILEROW : transformedTileCoord[2],\n TILEMATRIX : tileMatrix,\n TILEMATRIXSET : this.getMatrixSet(),\n FORMAT : this.getFormat() || \"image/png\",\n STYLE : this.getStyle() || \"normal\"\n };\n\n Utils.assign(baseParams, params);\n\n /* var tileSize = tileGrid.getTileSize();\n var x = Math.floor(tileSize*((coordinate[0]-tileExtent[0])/(tileExtent[2]-tileExtent[0])));\n var y = Math.floor(tileSize*((tileExtent[3]-coordinate[1])/(tileExtent[3]-tileExtent[1]))); */\n\n var x = Math.floor((coordinate[0] - tileExtent[0]) / (tileResolution / pixelRatio));\n var y = Math.floor((tileExtent[3] - coordinate[1]) / (tileResolution / pixelRatio));\n\n /* patch parce que la fonction getTileCoordForCoordAndResolution(coords,res) d'Openlayers peut renvoyer\n une tuile dont l'étendue (getTileCoordExtent) ne contient pas le point passé en paramètre (coords) */\n var tileSize = tileGrid.getTileSize(tileCoord[0]);\n x = Math.min(x, (tileSize[0] | tileSize) - 1);\n y = Math.max(y, 0);\n\n baseParams[\"I\"] = x;\n baseParams[\"J\"] = y;\n\n var url = this.urls[0];\n\n var featureInfoUrl = Gp.Helper.normalyzeUrl(url, baseParams);\n\n return featureInfoUrl;\n };\n\n};\n\nexport default WMTS;\n\n// Expose WMTS as ol.source.WMTSExtended. (for a build bundle)\nif (window.ol && window.ol.source) {\n window.ol.source.WMTSExtended = WMTS;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.tilegrid.WMTS;","/**\n* @module LayerUtils\n* @alias module:~utils/LayerUtils\n* @description\n* ...\n*\n* @example\n* import LayerUtils from \"gpf-ext-ol/utils/LayerUtils\"\n* ou \n* import {LayerUtils} from \"gpf-ext-ol\n\n* LayerUtils.getZoomLevelFromScaleDenominator();\n* LayerUtils.getAttributions();\n* LayerUtils.intersects();\n*/\nvar LayerUtils = {\n\n /**\n * Obtenir le ZoomLevel à partir du ScaleDenominator\n * @function getZoomLevelFromScaleDenominator\n * @param {Number} scaleDenominator - the scale denominator\n * @param {String} crs - the crs\n *\n * @returns {Integer} zoom level\n */\n getZoomLevelFromScaleDenominator : function (scaleDenominator, crs) {\n // ------------------------------------------------- //\n // Code issu de l'API Geoportal/Catalogue/Config.js //\n // ------------------------------------------------- //\n // var configuration = Gp.Config;\n // var general = configuration.generalOptions;\n // var layers = configuration.layersContext;\n //\n // for (var tms in general.tileMatrixSets) {\n // var tileMatrixSet = general.tileMatrixSets[tms];\n // // IGN's WMTS bug : epsg:nnnn instead of EPSG:nnnn\n // var crs = tileMatrixSet.supportedCRS = tileMatrixSet.supportedCRS.replace(/epsg/,\"EPSG\");\n //\n // if (!Geoportal.Catalogue.CRSRESOLUTIONS.hasOwnProperty(crs)) {\n // var p= new OpenLayers.Projection(crs);\n // Geoportal.Catalogue.CRSRESOLUTIONS[crs]= [];\n // var matrixIds= tileMatrixSet.matrixIds;\n // for (var i= 0, li= matrixIds.length; i} params.extent - map current geographical extent (EPSG:4326) : [top, left, bottom, right] = [maxy, minx, miny, maxx]\n * @param {Number} params.zoom - map current zoom\n * @param {String} params.crs - map current projection code (ex \"EPSG:2154\")\n * @param {Boolean} params.visibility - layer visibility\n * @param {Gp.Services.Config.Originator} params.originators - resource originators (from Gp.Config.layers[].originators)\n * @returns {Object} attributions - associative array, mapping originators url (keys) with their properties : html attributions elements\n */\n getAttributions : function (params) {\n var zoom = params.zoom;\n\n var attributions = [];\n\n if (params.originators != null && params.visibility) {\n // drawLogo = boolean, true if attribution should be displayed (zoom, extent), false otherwise\n var drawLogo;\n for (var j = 0, jl = params.originators.length; j < jl; j++) {\n drawLogo = true;\n var originator = params.originators[j];\n\n var constraints = params.originators[j].constraints || [];\n for (var k = 0, kl = constraints.length; k < kl; k++) {\n var constraint = constraints[k];\n drawLogo = true;\n\n var minZoomLevel = this.getZoomLevelFromScaleDenominator(constraint.maxScaleDenominator, params.crs);\n var maxZoomLevel = this.getZoomLevelFromScaleDenominator(constraint.minScaleDenominator, params.crs) || 21;\n\n // min zoom constraints\n if (minZoomLevel && (minZoomLevel > zoom)) {\n drawLogo = false;\n }\n\n // max zoom constraints\n if (drawLogo && maxZoomLevel && (maxZoomLevel < zoom)) {\n drawLogo = false;\n }\n\n // bbox constraints\n var bbox = constraint.bbox;\n if (drawLogo && bbox) {\n drawLogo = false;\n var viewExtent = params.extent;\n if (viewExtent) {\n var bounds = [bbox.top, bbox.left, bbox.bottom, bbox.right];\n if (this.intersects(viewExtent, bounds)) {\n // at least one constraint matches the map ones\n drawLogo = true;\n break;\n }\n }\n }\n }\n\n if (drawLogo) {\n // on a un originator qui correspond au zoom et à l'étendue.\n\n var logo = originator.logo;\n var url = originator.url;\n var name = originator.name ? originator.name : \"\";\n var text = originator.attribution;\n\n var container = document.createElement(\"div\");\n container.className = \"gp-control-attribution\";\n\n // on crée un lien dans tous les cas (même s'il ne pointe pas vers une référence), pour avoir accès à la class CSS (pour surcharge)\n var link = null;\n link = document.createElement(\"a\");\n link.className = \"gp-control-attribution-link\";\n link.target = \"_blank\";\n container.appendChild(link);\n if (url) {\n link.href = url;\n }\n\n var bImage = !!(logo);\n var image = null;\n // si on a un logo, on l'affiche à l'interieur du lien\n if (bImage) {\n image = document.createElement(\"img\");\n if (link) {\n image.className = \"gp-control-attribution-image\";\n link.appendChild(image);\n } else {\n image.className = \"\";\n container.appendChild(image);\n }\n image.src = logo;\n image.title = text || name;\n image.style.height = \"30px\";\n image.style.width = \"30px\";\n } else {\n // sinon, on affiche le nom de l'originator, ou sa description ou l'url.\n if (name) {\n link.textContent = name;\n } else if (text) {\n link.textContent = text;\n } else if (url) {\n link.textContent = url;\n } else {\n link.textContent = \"\";\n }\n }\n\n attributions.push(container.innerHTML + \" \");\n }\n }\n }\n\n return attributions;\n },\n\n /**\n * Determines if one extent (extent1) intersects another (extent2)\n *\n * @function intersects\n * @param {Array.} extent1 - First extent : [top, left, bottom, right] = [maxy, minx, miny, maxx]\n * @param {Array.} extent2 - Second extent : [top, left, bottom, right] = [maxy, minx, miny, maxx]\n * @return {Boolean} intersects - True if the two extents intersect, false otherwise.\n */\n intersects : function (extent1, extent2) {\n var intersectsX = (extent1[1] <= extent2[3]) && (extent2[1] <= extent1[3]);\n var intersectsY = (extent1[2] <= extent2[0]) && (extent2[2] <= extent1[0]);\n return intersectsX && intersectsY;\n }\n};\n\nexport default LayerUtils;\n","/**\n * @module Config\n * @alias module:~utils/Config\n * @private\n * @description\n * ...\n *\n * @example\n * isConfigLoaded();\n */\nvar Config = {\n\n /**\n * Config\n *\n * @public\n * @type {Object}\n */\n configuration : {},\n\n /**\n * Check if the configuration is loaded\n *\n * @returns {Boolean} True if Config is loaded, false otherwise\n */\n isConfigLoaded : function () {\n // config already loaded !\n if (this.configuration && Object.keys(this.configuration).length !== 0) {\n return true;\n }\n var scope = typeof window !== \"undefined\" ? window : typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : {};\n if (scope.Gp && scope.Gp.Config && scope.Gp.Config.layers && Object.keys(scope.Gp.Config.layers).length !== 0) {\n /** ts-syntax */ (this.configuration) = scope.Gp.Config;\n return true;\n }\n return false;\n }\n\n};\n\nexport default Config;\n","import Gp from \"geoportal-access-lib\";\n// import OpenLayers\nimport WMTSTileGrid from \"ol/tilegrid/WMTS\";\n// import local with ol dependencies\nimport WMTSExtended from \"../Sources/WMTS\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport LayerUtils from \"../Utils/LayerUtils\";\nimport Logger from \"../Utils/LoggerByDefault\";\nimport Config from \"../Utils/Config\";\n// package.json (extract version)\nimport Pkg from \"../../../package.json\";\n\nvar logger = Logger.getLogger(\"sourcewmts\");\n\n/**\n * @classdesc\n * Geoportal WMTS source creation (inherit from ol.source.WMTS)\n *\n * @constructor\n * @alias ol.source.GeoportalWMTS\n * @type {ol.source.GeoportalWMTS}\n * @extends {WMTSExtended}\n * @param {Object} options - options for function call.\n * @param {String} options.layer - Layer name (e.g. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {Object} [options.configuration] - configuration (cf. example) \n * @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n * @param {String} [options.apiKey] - Access key to Geoportal platform\n * @param {Array} [options.legends] - Legends objects associated to the layer\n * @param {Array} [options.metadata] - Metadata objects associated to the layer\n * @param {String} [options.title] - title of the layer\n * @param {String} [options.description] - description of the layer\n * @param {String} [options.quicklookUrl] - quicklookUrl of the layer\n * @param {Object} [options.olParams] - other options for ol.source.WMTS function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.WMTS.html ol.source.WMTS})\n * @example\n * var sourceWMTS = new ol.source.GeoportalWMTS({\n * layer : \"ORTHOIMAGERY.ORTHOPHOTOS\"\n * });\n */\nvar SourceWMTS = class SourceWMTS extends WMTSExtended {\n\n constructor (options) {\n // if (!(this instanceof SourceWMTS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n\n // check layer params\n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n\n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n\n // configuration de la ressource\n var layerCfg = options.configuration;\n var wmtsParams = (layerCfg) ? layerCfg.params : null;\n var apiKey = options.apiKey;\n \n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n\n var layerId = Config.configuration.getLayerId(options.layer, \"WMTS\");\n if (!layerId) {\n throw new Error(`ERROR : WMTS Layer ID ${options.layer} cannot be found in Geoportal Configuration. Make sure that this resource is included in your contract key.`);\n }\n\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : WMTS Layer configuration cannot be found in Geoportal.\");\n }\n\n apiKey = Config.configuration.getLayerKey(layerId)[0];\n wmtsParams = Config.configuration.getLayerParams(options.layer, \"WMTS\");\n }\n\n // si ssl = false on fait du http\n // par défaut, ssl = true, on fait du https\n var protocol = options.ssl === false ? \"http://\" : \"https://\";\n\n var urlParams = {\n \"gp-ol-ext\" : Pkg.olExtVersion || Pkg.version\n };\n if (wmtsParams.url.includes(\"/private/\")) {\n // si l'url est privée\n // Ajout de la clef d'API fournie par l'utilisateur en prioritée\n // ou récupérée depuis la configuration\n var key = options.apiKey || apiKey;\n if (!key) {\n throw new Error(\"ERROR : WMS Layer apiKey cannot be found in Geoportal Configuration.\");\n }\n urlParams[\"apikey\"] = key;\n }\n\n var wmtsSourceOptions = {\n // tracker extension openlayers\n // FIXME : gp-ext version en mode AMD\n url : Gp.Helper.normalyzeUrl(wmtsParams.url.replace(/(http|https):\\/\\//, protocol), urlParams, false),\n version : wmtsParams.version,\n style : wmtsParams.styles,\n format : wmtsParams.format,\n projection : wmtsParams.projection,\n maxZoom : LayerUtils.getZoomLevelFromScaleDenominator(wmtsParams.minScale),\n layer : options.layer,\n matrixSet : wmtsParams.TMSLink,\n tileGrid : new WMTSTileGrid({\n resolutions : wmtsParams.nativeResolutions,\n matrixIds : wmtsParams.matrixIds,\n origin : [Object.values(wmtsParams.tileMatrices)[0].topLeftCorner.x, Object.values(wmtsParams.tileMatrices)[0].topLeftCorner.y]\n }),\n crossOrigin : \"anonymous\"\n };\n\n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(wmtsSourceOptions, options.olParams);\n\n // on surcharge les originators (non récupérés depuis configuration de la couche)\n if (options.olParams && !wmtsParams.originators) {\n wmtsParams.originators = options.olParams.attributions;\n }\n \n // returns a WMTS object, that inherits from WMTSExtended.\n super(wmtsSourceOptions);\n\n // add originators to layer source (to be updated by Originators control)\n this._originators = wmtsParams.originators;\n\n // add legends and metadata (to be added to LayerSwitcher control)\n this._legends = options.legends || wmtsParams.legends;\n this._metadata = options.metadata || wmtsParams.metadata;\n this._description = options.description || wmtsParams.description;\n this._title = options.title || wmtsParams.title;\n this._quicklookUrl = options.quicklookUrl || wmtsParams.quicklookUrl;\n\n this.name = options.layer;\n this.service = \"WMTS\";\n \n return this;\n }\n\n};\n\nexport default SourceWMTS;\n\n// Expose SourceWMTS as ol.source.GeoportalWMTS. (for a build bundle)\nif (window.ol && window.ol.source) {\n window.ol.source.GeoportalWMTS = SourceWMTS;\n}\n","import Gp from \"geoportal-access-lib\";\n// import OpenLayers\nimport TileWMSSource from \"ol/source/TileWMS\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Logger from \"../Utils/LoggerByDefault\";\nimport Config from \"../Utils/Config\";\n// package.json (extract version)\nimport Pkg from \"../../../package.json\";\n\nvar logger = Logger.getLogger(\"sourcewms\");\n\n/**\n * @classdesc\n * Geoportal tile WMS source creation (inherit from ol.source.TileWMS)\n *\n * @constructor\n * @alias ol.source.GeoportalWMS\n * @type {ol.source.GeoportalWMS}\n * @extends {ol.source.TileWMS}\n * @param {Object} options - options for function call.\n * @param {String} options.layer - Layer name (e.g. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {Object} [options.configuration] - configuration (cf. example) \n * @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n * @param {String} [options.apiKey] - Access key to Geoportal platform\n * @param {Array} [options.legends] - Legends objects associated to the layer\n * @param {Array} [options.metadata] - Metadata objects associated to the layer\n * @param {String} [options.title] - title of the layer\n * @param {String} [options.description] - description of the layer\n * @param {String} [options.quicklookUrl] - quicklookUrl of the layer\n * @param {Object} [options.olParams] - other options for ol.source.TileWMS function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.TileWMS.html ol.source.TileWMS})\n * @example\n * var sourceWMS = new ol.source.GeoportalWMS({\n * layer : \"ORTHOIMAGERY.ORTHOPHOTOS\"\n * });\n */\nvar SourceWMS = class SourceWMS extends TileWMSSource {\n\n constructor (options) {\n // if (!(this instanceof SourceWMS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n\n // check layer params\n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n\n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n\n // configuration de la ressource\n var layerCfg = options.configuration;\n var wmsParams = (layerCfg) ? layerCfg.params : null;\n var apiKey = options.apiKey;\n\n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n\n var layerId = Config.configuration.getLayerId(options.layer, \"WMS\");\n if (!layerId) {\n throw new Error(`ERROR : WMS Layer ID ${options.layer} cannot be found in Geoportal Configuration. Make sure that this resource is included in your contract key.`);\n }\n\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : WMS Layer configuration cannot be found in Geoportal.\");\n }\n\n apiKey = Config.configuration.getLayerKey(layerId)[0];\n wmsParams = Config.configuration.getLayerParams(options.layer, \"WMS\");\n }\n\n // si ssl = false on fait du http\n // par défaut, ssl = true, on fait du https\n var protocol = options.ssl === false ? \"http://\" : \"https://\";\n\n var urlParams = {\n \"gp-ol-ext\" : Pkg.olExtVersion || Pkg.version\n };\n if (wmsParams.url.includes(\"/private/\")) {\n // si l'url est privée\n // Ajout de la clef d'API fournie par l'utilisateur en prioritée\n // ou récupérée depuis la configuration\n var key = options.apiKey || apiKey;\n if (!key) {\n throw new Error(\"ERROR : WMS Layer apiKey cannot be found in Geoportal Configuration.\");\n }\n urlParams[\"apikey\"] = key;\n }\n\n var wmsSourceOptions = {\n // tracker extension openlayers\n url : Gp.Helper.normalyzeUrl(wmsParams.url.replace(/(http|https):\\/\\//, protocol), urlParams, false),\n params : {\n SERVICE : \"WMS\",\n LAYERS : options.layer,\n VERSION : wmsParams.version,\n STYLES : wmsParams.styles,\n FORMAT : wmsParams.format\n },\n crossOrigin : \"anonymous\"\n // ,\n // attributions : [\n // new ol.Attribution({\n // html : \"\"\n // })\n // ]\n };\n\n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(wmsSourceOptions, options.olParams);\n\n // on surcharge les originators (non récupérés depuis configuration de la couche)\n if (options.olParams && !wmsParams.originators) {\n wmsParams.originators = options.olParams.attributions;\n }\n\n // returns a WMS object, that inherits from ol.source.TileWMS.\n super(wmsSourceOptions);\n\n // save originators (to be updated by Originators control)\n this._originators = wmsParams.originators;\n\n // save legends and metadata (to be added to LayerSwitcher control)\n this._legends = options.legends || wmsParams.legends;\n this._metadata = options.metadata || wmsParams.metadata;\n this._title = options.title || wmsParams.title;\n this._description = options.description || wmsParams.description;\n this._quicklookUrl = options.quicklookUrl || wmsParams.quicklookUrl;\n\n this.name = options.layer;\n this.service = \"WMS\";\n\n return this;\n }\n\n};\n\nexport default SourceWMS;\n\n// Expose SourceWMS as ol.source.GeoportalWMTS. (for a build bundle)\nif (window.ol && window.ol.source) {\n window.ol.source.GeoportalWMS = SourceWMS;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.loadingstrategy;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.tilegrid;","import VectorSource from \"ol/source/Vector\";\nimport GeoJSON from \"ol/format/GeoJSON\";\nimport { tile as olLoadingstrategyTile } from \"ol/loadingstrategy\";\nimport * as olTilegrid from \"ol/tilegrid\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Logger from \"../Utils/LoggerByDefault\";\nimport Config from \"../Utils/Config\";\n// package.json (extract version)\nimport Pkg from \"../../../package.json\";\n\nvar logger = Logger.getLogger(\"sourcewfs\");\n\n/**\n * @classdesc\n * Geoportal tile WMS source creation (inherit from ol.source.TileWMS)\n *\n * @constructor\n * @alias ol.source.GeoportalWFS\n * @type {ol.source.GeoportalWFS}\n * @extends {ol.source.Vector}\n * @param {Object} options - options for function call.\n * @param {String} options.layer - Layer name (e.g. \"\")\n * @param {Number} [options.maxFeatures] - maximum features (max: 5000) \n * @param {Object} [options.configuration] - configuration (cf. example) \n * @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n * @param {String} [options.apiKey] - Access key to Geoportal platform\n * @param {Array} [options.legends] - Legends objects associated to the layer\n * @param {Array} [options.metadata] - Metadata objects associated to the layer\n * @param {String} [options.title] - title of the layer\n * @param {String} [options.description] - description of the layer\n * @param {String} [options.quicklookUrl] - quicklookUrl of the layer\n * @param {Object} [options.olParams] - other options for ol.source.Vector function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.Vector.html ol.source.Vector})\n * @example\n * var sourceWFS = new ol.source.GeoportalWFS({\n * layer: \"\",\n * maxFeatures: 500,\n * olParams: {}\n * });\n */\nvar SourceWFS = class SourceWFS extends VectorSource {\n\n constructor (options) {\n // check layer params\n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n\n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n\n // configuration de la ressource\n var layerCfg = options.configuration;\n var wfsParams = (layerCfg) ? layerCfg.params : null;\n var apiKey = options.apiKey;\n\n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n\n var layerId = Config.configuration.getLayerId(options.layer, \"WFS\");\n if (!layerId) {\n throw new Error(`ERROR : WFS Layer ID ${options.layer} cannot be found in Geoportal Configuration. Make sure that this resource is included in your contract key.`);\n }\n\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : WFS Layer configuration cannot be found in Geoportal.\");\n }\n\n apiKey = Config.configuration.getLayerKey(layerId)[0];\n wfsParams = Config.configuration.getLayerParams(options.layer, \"WFS\");\n }\n\n // si ssl = false on fait du http\n // par défaut, ssl = true, on fait du https\n var protocol = options.ssl === false ? \"http://\" : \"https://\";\n\n var urlParams = {\n \"gp-ol-ext\" : Pkg.olExtVersion || Pkg.version\n };\n if (wfsParams.url.includes(\"/private/\")) {\n // si l'url est privée\n // Ajout de la clef d'API fournie par l'utilisateur en prioritée\n // ou récupérée depuis la configuration\n var key = options.apiKey || apiKey;\n if (!key) {\n throw new Error(\"ERROR : WFS Layer apiKey cannot be found in Geoportal Configuration.\");\n }\n urlParams[\"apikey\"] = key;\n }\n\n var loadFeatures = (self, url, success, failure) => {\n const xhr = new XMLHttpRequest();\n xhr.open(\"GET\", url);\n const onError = function () {\n self.removeLoadedExtent(extent);\n failure();\n };\n xhr.onerror = onError;\n xhr.onload = function () {\n if (xhr.status == 200) {\n var response = JSON.parse(xhr.responseText);\n const features = self.getFormat().readFeatures(response);\n self.addFeatures(features);\n success(features);\n // next page ?\n // \"links\": [\n // {\n // \"title\": \"next page\",\n // \"type\": \"application/json\",\n // \"rel\": \"next\",\n // \"href\": \"https://data.geopf.fr/wfs/wfs?GP-OL-EXT=1.0.0-beta.0-260&TYPENAME=BDTOPO_V3%3Abatiment&REQUEST=GetFeature&BBOX=261720.38484844193%2C6249491.432596011%2C262943.3773010048%2C6250714.425048574%2CEPSG%3A3857&SRSNAME=EPSG%3A3857&OUTPUTFORMAT=application%2Fjson&VERSION=2.0.0&MAXFEATURES=500&COUNT=500&SERVICE=WFS&STARTINDEX=500\"\n // }\n // ],\n if (response.links) {\n for (let i = 0; i < response.links.length; i++) {\n const link = response.links[i];\n if (link.rel === \"next\") {\n loadFeatures(self, link.href, success, failure);\n }\n }\n }\n } else {\n onError();\n }\n };\n xhr.send();\n };\n var wfsSourceOptions = {\n format : new GeoJSON(),\n loader : function (extent, resolution, projection, success, failure) {\n var self = this;\n const maxFeatures = options.maxFeatures;\n const layerName = options.layer;\n const proj = projection.getCode();\n const url = Gp.Helper.normalyzeUrl(wfsParams.url.replace(/(http|https):\\/\\//, protocol), urlParams, false) +\n \"&SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&\" +\n \"typename=\" + layerName + \"&\" +\n \"outputFormat=application/json&srsname=\" + proj + \"&\" +\n \"bbox=\" + extent.join(\",\") + \",\" + proj\n + \"&maxFeatures=\" + maxFeatures + \"&count=\" + maxFeatures + \"&startIndex=0\";\n\n loadFeatures(self, url, success, failure);\n },\n strategy : olLoadingstrategyTile(olTilegrid.createXYZ({\n minZoom : options.olParams.minZoom || 15, \n maxZoom : options.olParams.maxZoom || 21, \n tileSize : 512\n })),\n crossOrigin : \"anonymous\"\n };\n\n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(wfsSourceOptions, options.olParams);\n\n // on surcharge les originators (non récupérés depuis configuration de la couche)\n if (options.olParams && !wfsParams.originators) {\n wfsParams.originators = options.olParams.attributions;\n }\n\n // returns a WMS object, that inherits from ol.source.TileWMS.\n super(wfsSourceOptions);\n\n // save originators (to be updated by Originators control)\n this._originators = wfsParams.originators;\n\n // save legends and metadata (to be added to LayerSwitcher control)\n this._legends = options.legends || wfsParams.legends;\n this._metadata = options.metadata || wfsParams.metadata;\n this._title = options.title || wfsParams.title;\n this._description = options.description || wfsParams.description;\n this._quicklookUrl = options.quicklookUrl || wfsParams.quicklookUrl;\n\n this.name = options.layer;\n this.service = \"WFS\";\n\n return this;\n }\n \n};\n\nexport default SourceWFS;\n\n// Expose SourceWFS as ol.source.GeoportalWFTS. (for a build bundle)\nif (window.ol && window.ol.source) {\n window.ol.source.GeoportalWFS = SourceWFS;\n}","const __WEBPACK_NAMESPACE_OBJECT__ = ol.proj;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.Tile;","// import openlayers\nimport { get as olGetProj } from \"ol/proj\";\nimport TileLayer from \"ol/layer/Tile\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Config from \"../Utils/Config\";\n// import local with ol dependencies\nimport SourceWMTS from \"./SourceWMTS\";\n\n/**\n* @classdesc\n* Geoportal LayerWMTS source creation (inherit from ol.layer.Tile)\n*\n* @constructor\n* @extends {ol.layer.Tile}\n* @alias ol.layer.GeoportalWMTS\n* @type {ol.layer.GeoportalWMTS}\n* @param {Object} options - options for function call.\n* @param {String} options.layer - Layer name (e.g. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n* @param {Object} [options.configuration] - configuration (cf. example) \n* @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n* @param {String} [options.apiKey] - Access key to Geoportal platform\n* @param {Object} [options.olParams] - other options for ol.layer.Tile function (see {@link http://openlayers.org/en/latest/apidoc/ol.layer.Tile.html ol.layer.Tile})\n* @param {Object} [options.olParams.sourceParams] - other options for ol.source.WMTS function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.WMTS.html ol.source.WMTS})\n* @example\n* var layerWMTS = new ol.layer.GeoportalWMTS({\n* layer : \"ORTHOIMAGERY.ORTHOPHOTOS\"\n* });\n* layerWMTS.getLegends();\n* layerWMTS.getMetadata();\n* layerWMTS.getTitle();\n* layerWMTS.getDescription();\n* layerWMTS.getQuicklookUrl();\n* layerWMTS.getOriginators();\n* \n* // Ex. configuration object for WMTS Layer\n* {\n* \"name\" : \"GEOGRAPHICALGRIDSYSTEMS.MAPS.OVERVIEW\",\n* \"globalConstraint\" : {\n* \"maxScaleDenominator\" : 279541132.01435894,\n* \"minScaleDenominator\" : 2183915.0938621787,\n* \"bbox\" : {\n* \"left\" : -179.5,\n* \"right\" : 179.5,\n* \"top\" : 75,\n* \"bottom\" : -75\n* }\n* },\n* \"params\" : {\n* \"url\" : \"https:*data.geopf.fr/wmts\",\n* \"styles\" : \"normal\",\n* \"version\" : \"1.0.0\",\n* \"format\" : \"image/jpeg\",\n* \"projection\" : \"EPSG:3857\",\n* \"minScale\" : 2183915.0938621787,\n* \"maxScale\" : 279541132.01435894,\n* \"extent\" : {\n* \"left\" : -179.5,\n* \"right\" : 179.5,\n* \"top\" : 75,\n* \"bottom\" : -75\n* },\n* \"legends\" : [\n* {\n* \"format\" : \"image/jpeg\",\n* \"url\" : \"https:*data.geopf.fr/annexes/ressources/legendes/LEGEND.jpg\",\n* \"minScaleDenominator\" : \"200\"\n* }\n* ],\n* \"title\" : \"Carte Mondiale pour la mini-vue\",\n* \"description\" : \"Carte Mondiale pour la mini-vue\",\n* \"tileMatrixSetLimits\" : {\n* \"1\" : {\n* \"minTileRow\" : \"0\",\n* \"maxTileRow\" : \"1\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"1\"\n* },\n* \"2\" : {\n* \"minTileRow\" : \"0\",\n* \"maxTileRow\" : \"3\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"3\"\n* },\n* \"3\" : {\n* \"minTileRow\" : \"1\",\n* \"maxTileRow\" : \"6\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"7\"\n* },\n* \"4\" : {\n* \"minTileRow\" : \"2\",\n* \"maxTileRow\" : \"13\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"15\"\n* },\n* \"5\" : {\n* \"minTileRow\" : \"5\",\n* \"maxTileRow\" : \"26\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"31\"\n* },\n* \"6\" : {\n* \"minTileRow\" : \"11\",\n* \"maxTileRow\" : \"52\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"63\"\n* },\n* \"7\" : {\n* \"minTileRow\" : \"22\",\n* \"maxTileRow\" : \"105\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"127\"\n* },\n* \"8\" : {\n* \"minTileRow\" : \"45\",\n* \"maxTileRow\" : \"210\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"255\"\n* }\n* },\n* \"TMSLink\" : \"PM_1_8\",\n* \"matrixIds\" : [\n* \"1\",\n* \"2\",\n* \"3\",\n* \"4\",\n* \"5\",\n* \"6\",\n* \"7\",\n* \"8\"\n* ],\n* \"tileMatrices\" : {\n* \"1\" : {\n* \"matrixId\" : \"1\",\n* \"matrixHeight\" : 2,\n* \"matrixWidth\" : 2,\n* \"scaleDenominator\" : 279541132.01435894,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"2\" : {\n* \"matrixId\" : \"2\",\n* \"matrixHeight\" : 4,\n* \"matrixWidth\" : 4,\n* \"scaleDenominator\" : 139770566.0071793,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"3\" : {\n* \"matrixId\" : \"3\",\n* \"matrixHeight\" : 8,\n* \"matrixWidth\" : 8,\n* \"scaleDenominator\" : 69885283.00358965,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"4\" : {\n* \"matrixId\" : \"4\",\n* \"matrixHeight\" : 16,\n* \"matrixWidth\" : 16,\n* \"scaleDenominator\" : 34942641.50179486,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"5\" : {\n* \"matrixId\" : \"5\",\n* \"matrixHeight\" : 32,\n* \"matrixWidth\" : 32,\n* \"scaleDenominator\" : 17471320.75089743,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"6\" : {\n* \"matrixId\" : \"6\",\n* \"matrixHeight\" : 64,\n* \"matrixWidth\" : 64,\n* \"scaleDenominator\" : 8735660.375448715,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"7\" : {\n* \"matrixId\" : \"7\",\n* \"matrixHeight\" : 128,\n* \"matrixWidth\" : 128,\n* \"scaleDenominator\" : 4367830.1877243575,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"8\" : {\n* \"matrixId\" : \"8\",\n* \"matrixHeight\" : 256,\n* \"matrixWidth\" : 256,\n* \"scaleDenominator\" : 2183915.0938621787,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* }\n* },\n* \"nativeResolutions\" : [\n* \"78271.51696402048\",\n* \"39135.75848201023\",\n* \"19567.87924100512\",\n* \"9783.939620502561\",\n* \"4891.969810251280\",\n* \"2445.984905125640\",\n* \"1222.992452562820\",\n* \"611.4962262814100\"\n* ]\n* }\n*/\nvar LayerWMTS = class LayerWMTS extends TileLayer {\n \n /**\n * See {@link ol.layer.GeoportalWMTS}\n * @module LayerWMTS\n * @alias module:~layers/GeoportalWMTS\n * @param {*} options - options\n * @example\n * import LayerWMTS from \"gpf-ext-ol/layers/LayerWMTS\n * ou \n * import { LayerWMTS } from \"gpf-ext-ol\"\n */\n constructor (options) {\n // if (!(this instanceof LayerWMTS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n \n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n \n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n \n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n \n // configuration de la ressource\n var layerCfg = options.configuration;\n \n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config chargée\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n // récupération des autres paramètres nécessaires à la création de la layer\n var layerId = Config.configuration.getLayerId(options.layer, \"WMTS\");\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : Layer ID not found into the catalogue !?\");\n }\n }\n \n // création de la source WMTS\n var olSourceParams;\n if (options.olParams && options.olParams.sourceParams) {\n olSourceParams = options.olParams.sourceParams;\n }\n var wmtsSource = new SourceWMTS({\n layer : options.layer,\n configuration : options.configuration,\n ssl : options.ssl,\n apiKey : options.apiKey,\n olParams : olSourceParams\n });\n \n var layerTileOptions = {\n source : wmtsSource\n };\n \n // si le param layer n'a pas été renseigné lors de la création de la source,\n // c'est que l'identifiant de la couche n'a pas été trouvé. on passe donc la recherche des paramètres.\n if (wmtsSource.getLayer() !== undefined) {\n if (layerCfg.globalConstrainWFSts && layerCfg.globalConstraints.projection) {\n /* INFO : désactivation temporaire de l'étendue, car certaines étendues (trop grandes ?)\n provoquent quelques bugs d'affichage (zoom > 16 par exemple) */\n // récupération de l'étendue (en EPSG:4326), et reprojection dans la proj de la couche\n // var geobbox = [\n // layerCfg.globalConstraints.extent.left,\n // layerCfg.globalConstraints.extent.bottom,\n // layerCfg.globalConstraints.extent.right,\n // layerCfg.globalConstraints.extent.top\n // ];\n // layerTileOptions.extent = ol.proj.transformExtent(geobbox, \"EPSG:4326\", layerCfg.globalConstraints.projection);\n \n // récupération des résolutions min et max\n var p;\n // on récupère tout d'abord la projection\n if (typeof layerCfg.globalConstraints.projection === \"string\") {\n p = olGetProj(layerCfg.globalConstraints.projection);\n }\n // puis, selon l'unité de la projection, on calcule la résolution correspondante\n if (p && p.getUnits()) {\n if (p.getUnits() === \"m\") {\n /* fixme : fix temporaire pour gérer les min/max scaledenominator qui sont arrondis dans la configuration !\n * on les arrondit respectivement à l'unité inférieure et supérieure\n * pour que les couches soient bien disponibles aux niveaux de zoom correspondants */\n // info : 1 pixel = 0.00028 m\n layerTileOptions.minResolution = (layerCfg.globalConstraints.minScale - 1) * 0.00028;\n layerTileOptions.maxResolution = (layerCfg.globalConstraints.maxScale + 1) * 0.00028;\n } else if (p.getUnits() === \"degrees\") {\n /* fixme : fix temporaire pour gérer les min/max scaledenominator qui sont arrondis dans la configuration !\n * on les arrondit respectivement à l'unité inférieure et supérieure\n * pour que les couches soient bien disponibles aux niveaux de zoom correspondants */\n // info : 6378137 * 2 * pi / 360 = rayon de la terre (ellipsoide WGS84)\n layerTileOptions.minResolution = (layerCfg.globalConstraints.minScale - 1) * 0.00028 * 180 / (Math.PI * 6378137);\n layerTileOptions.maxResolution = (layerCfg.globalConstraints.maxScale + 1) * 0.00028 * 180 / (Math.PI * 6378137);\n }\n }\n }\n }\n \n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(layerTileOptions, options.olParams);\n \n // création d'une ol.layer.Tile avec les options récupérées ci-dessus.\n super(layerTileOptions);\n \n this.name = options.layer;\n this.service = \"WMTS\";\n this.config = layerCfg;\n\n return this;\n }\n \n /**\n * Get configuration\n * @returns {Object} - configuration\n */\n getConfiguration () {\n return this.config;\n }\n \n /**\n * Get legends\n * @returns {Array} - legends\n */\n getLegends () {\n return this.getSource()._legends;\n }\n\n /**\n * Get metadata\n * @returns {Array} - metadata\n */\n getMetadata () {\n return this.getSource()._metadata;\n }\n\n /**\n * Get description\n * @returns {String} - description\n */\n getDescription () {\n return this.getSource()._description;\n }\n\n /**\n * Get title\n * @returns {String} - title\n */\n getTitle () {\n return this.getSource()._title;\n }\n\n /**\n * Get quicklook url\n * @returns {String} - quicklook\n */\n getQuicklookUrl () {\n return this.getSource()._quicklookUrl;\n }\n\n /**\n * Get originators\n * @returns {Array} - originators\n */\n getOriginators () {\n return this.getSource()._originators;\n }\n \n};\n\nexport default LayerWMTS;\n\n// Expose LayerWMTS as ol.layerGeoportalWMTS. (for a build bundle)\nif (window.ol && window.ol.layer) {\n window.ol.layer.GeoportalWMTS = LayerWMTS;\n}\n","// import openlayers\nimport {\n get as olGetProj,\n transformExtent as olTransformExtentProj\n} from \"ol/proj\";\nimport TileLayer from \"ol/layer/Tile\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Config from \"../Utils/Config\";\n// import local with ol dependencies\nimport SourceWMS from \"./SourceWMS\";\n\n/**\n * @classdesc\n * Geoportal LayerWMS source creation (inherit from ol.layer.Tile)\n *\n * @constructor\n * @extends {ol.layer.Tile}\n * @alias ol.layer.GeoportalWMS\n * @type {ol.layer.GeoportalWMS}\n * @param {Object} options - options for function call.\n * @param {String} options.layer - Layer name (e.g. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {Object} [options.configuration] - configuration (cf. example) \n * @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n * @param {String} [options.apiKey] - Access key to Geoportal platform\n * @param {Object} [options.olParams] - other options for ol.layer.Tile function (see {@link http://openlayers.org/en/latest/apidoc/ol.layer.Tile.html ol.layer.Tile})\n * @param {Object} [options.olParams.sourceParams] - other options for ol.source.TileWMS function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.TileWMS.html ol.source.TileWMS})\n * @example\n * var layerWMS = new ol.layer.GeoportalWMS({\n * layer : \"ORTHOIMAGERY.ORTHOPHOTOS\"\n * });\n * \n * layerWMS.getLegends();\n * layerWMS.getMetadata();\n * layerWMS.getTitle();\n * layerWMS.getDescription();\n * layerWMS.getQuicklookUrl();\n * layerWMS.getOriginators();\n */\nvar LayerWMS = class LayerWMS extends TileLayer {\n\n /**\n * See {@link ol.layer.GeoportalWMS}\n * @module LayerWMS\n * @alias module:~layers/GeoportalWMS\n * @param {*} options - options\n * @example\n * import LayerWMS from \"gpf-ext-ol/layers/LayerWMS\"\n * ou \n * import { LayerWMS } from \"gpf-ext-ol\"\n */\n constructor (options) {\n // if (!(this instanceof LayerWMS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n\n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n\n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n\n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n\n // configuration de la ressource\n var layerCfg = options.configuration;\n\n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config chargée\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n // récupération des autres paramètres nécessaires à la création de la layer\n var layerId = Config.configuration.getLayerId(options.layer, \"WMS\");\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : Layer ID not found into the catalogue !?\");\n }\n }\n\n // création de la source WMS\n var olSourceParams;\n if (options.olParams && options.olParams.sourceParams) {\n olSourceParams = options.olParams.sourceParams;\n }\n var wmsSource = new SourceWMS({\n layer : options.layer,\n configuration : options.configuration,\n ssl : options.ssl,\n apiKey : options.apiKey,\n olParams : olSourceParams\n });\n\n var layerTileOptions = {\n source : wmsSource\n };\n\n // si le param LAYERS n'a pas été renseigné lors de la création de la source,\n // c'est que l'identifiant de la couche n'a pas été trouvé. on passe donc la recherche des paramètres.\n if (wmsSource.getParams().LAYERS !== undefined) {\n /* INFO : on ne récupère l'emprise de la couche que lorsque que l'utilisateur spécifie la projection.\n Si aucune projection n'est spécifiée, il faudrait spécifier l'emprise dans la projection de la carte (car OpenLayers reprojette),\n mais on ne peut pas la récupérer à ce niveau. On ne spécifie donc aucune emprise.\n Idem pour les résolutions : il faut connaitre l'unité de la projection (metres ou degrés) pour pouvoir calculer la résolution.\n */\n if (olSourceParams && olSourceParams.projection) {\n // récupération de l'étendue (en EPSG:4326), et reprojection dans la proj spécifiée\n var geobbox = [\n layerCfg.globalConstraints.extent.left,\n layerCfg.globalConstraints.extent.bottom,\n layerCfg.globalConstraints.extent.right,\n layerCfg.globalConstraints.extent.top\n ];\n layerTileOptions.extent = olTransformExtentProj(geobbox, \"EPSG:4326\", olSourceParams.projection);\n\n // récupération des résolutions min et max\n var p;\n // on récupère tout d'abord la projection\n if (typeof olSourceParams.projection === \"string\") {\n p = olGetProj(olSourceParams.projection);\n } else if (typeof olSourceParams.projection === \"object\" && olSourceParams.projection.getCode()) {\n p = olGetProj(olSourceParams.projection.getCode());\n }\n // puis, selon l'unité de la projection, on calcule la résolution correspondante\n if (p && p.getUnits()) {\n if (p.getUnits() === \"m\") {\n /* fixme : fix temporaire pour gérer les min/max scaledenominator qui sont arrondis dans la configuration !\n * on les arrondit respectivement à l'unité inférieure et supérieure\n * pour que les couches soient bien disponibles aux niveaux de zoom correspondants */\n // info : 1 pixel = 0.00028 m\n layerTileOptions.minResolution = (layerCfg.globalConstraints.minScale - 1) * 0.00028;\n layerTileOptions.maxResolution = (layerCfg.globalConstraints.maxScale + 1) * 0.00028;\n } else if (p.getUnits() === \"degrees\") {\n /* fixme : fix temporaire pour gérer les min/max scaledenominator qui sont arrondis dans la configuration !\n * on les arrondit respectivement à l'unité inférieure et supérieure\n * pour que les couches soient bien disponibles aux niveaux de zoom correspondants */\n // info : 6378137 * 2 * pi / 360 = rayon de la terre (ellipsoide WGS84)\n layerTileOptions.minResolution = (layerCfg.globalConstraints.minScale - 1) * 0.00028 * 180 / (Math.PI * 6378137);\n layerTileOptions.maxResolution = (layerCfg.globalConstraints.maxScale + 1) * 0.00028 * 180 / (Math.PI * 6378137);\n }\n }\n }\n }\n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(layerTileOptions, options.olParams);\n\n // création d'une ol.layer.Tile avec les options récupérées ci-dessus.\n super(layerTileOptions);\n\n this.name = options.layer;\n this.service = \"WMS\";\n this.config = layerCfg;\n\n return this;\n }\n\n /**\n * Get configuration\n * @returns {Object} - configuration\n */\n getConfiguration () {\n return this.config;\n }\n \n /**\n * Get legends\n * @returns {Array} - legends\n */\n getLegends () {\n return this.getSource()._legends;\n }\n\n /**\n * Get metadata\n * @returns {Array} - metadata\n */\n getMetadata () {\n return this.getSource()._metadata;\n }\n\n /**\n * Get description\n * @returns {String} - description\n */\n getDescription () {\n return this.getSource()._description;\n }\n\n /**\n * Get title\n * @returns {String} - title\n */\n getTitle () {\n return this.getSource()._title;\n }\n\n /**\n * Get quicklook url\n * @returns {String} - quicklook\n */\n getQuicklookUrl () {\n return this.getSource()._quicklookUrl;\n }\n\n /**\n * Get originators\n * @returns {Array} - originators\n */\n getOriginators () {\n return this.getSource()._originators;\n }\n\n};\n\nexport default LayerWMS;\n\n// Expose LayerWMS as ol.layerGeoportalWMS. (for a build bundle)\nif (window.ol && window.ol.layer) {\n window.ol.layer.GeoportalWMS = LayerWMS;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.Vector;","import VectorLayer from \"ol/layer/Vector\";\nimport {\n Fill,\n Stroke,\n Style\n} from \"ol/style\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Config from \"../Utils/Config\";\n// import local with ol dependencies\nimport SourceWFS from \"./SourceWFS\";\n\nconst MAXFEATURES = 500;\nconst MINZOOMDEFAULT = 15;\nconst MAXZOOMDEFAULT = 21;\nconst STYLEBYDEFAULT = new Style({\n stroke : new Stroke({\n color : \"rgba(0, 0, 255, 1.0)\",\n width : 2,\n }),\n fill : new Fill({\n color : \"rgba(0, 0, 255, 0.5)\"\n }),\n});\n\n/**\n * @classdesc\n * Geoportal LayerWMS source creation (inherit from ol.layer.Tile)\n *\n * @constructor\n * @extends {ol.layer.Vector}\n * @alias ol.layer.GeoportalWFS\n * @type {ol.layer.GeoportalWFS}\n * @param {Object} options - options for function call.\n * @param {String} options.layer - Layer name (e.g. \"\")\n * @param {Number} [options.maxFeatures] - maximum features (max: 5000) \n * @param {Object} [options.configuration] - configuration (cf. example) \n * @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n * @param {String} [options.apiKey] - Access key to Geoportal platform\n * @param {Object} [options.olParams] - other options for ol.layer.Vector function (see {@link http://openlayers.org/en/latest/apidoc/ol.layer.Vector.html ol.layer.Vector})\n * @param {Object} [options.olParams.sourceParams] - other options for ol.source.Vector function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.Vector.html ol.source.Vector})\n * @example\n * var layerWFS = new ol.layer.GeoportalWFS({\n * layer : \"BDTOPO_V3:batiment\",\n * maxFeatures: 500,\n * olParams : {\n * minZoom: 15,\n * maxZoom: 21,\n * style: new ol.style.Style(...),\n * sourceParams: {}\n * }\n * });\n * \n * layerWFS.getLegends();\n * layerWFS.getMetadata();\n * layerWFS.getTitle();\n * layerWFS.getDescription();\n * layerWFS.getQuicklookUrl();\n * layerWFS.getOriginators();\n */\nvar LayerWFS = class LayerWFS extends VectorLayer {\n\n /**\n * See {@link ol.layer.GeoportalWFS}\n * @module LayerWFS\n * @alias module:~layers/GeoportalWFS\n * @param {*} options - options\n * @example\n * import LayerWFS from \"gpf-ext-ol/layers/LayerWFS\"\n * ou \n * import { LayerWFS } from \"gpf-ext-ol\"\n */\n constructor (options) {\n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n\n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n\n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n\n // configuration de la ressource\n var layerCfg = options.configuration;\n\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n // récupération des autres paramètres nécessaires à la création de la layer\n var layerId = Config.configuration.getLayerId(options.layer, \"WFS\");\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : Layer ID not found into the catalogue !?\");\n }\n }\n\n // création de la source WFS\n var olSourceParams;\n if (options.olParams && options.olParams.sourceParams) {\n olSourceParams = options.olParams.sourceParams;\n }\n\n var wfsSource = new SourceWFS({\n layer : options.layer,\n configuration : options.configuration,\n maxFeatures : options.maxFeatures || MAXFEATURES,\n ssl : options.ssl,\n apiKey : options.apiKey,\n olParams : olSourceParams || {\n minZoom : MINZOOMDEFAULT,\n maxZoom : MAXZOOMDEFAULT\n }\n });\n\n var layerVectorOptions = {\n source : wfsSource\n };\n\n // récupération des autres paramètres passés par l'utilisateur\n // avec application des contraintes\n if (!options.olParams) {\n options.olParams = {\n minZoom : MINZOOMDEFAULT,\n maxZoom : MAXZOOMDEFAULT,\n style : STYLEBYDEFAULT\n };\n } else {\n Utils.mergeParams({\n minZoom : MINZOOMDEFAULT,\n maxZoom : MAXZOOMDEFAULT,\n style : STYLEBYDEFAULT\n }, options.olParams);\n }\n Utils.mergeParams(layerVectorOptions, options.olParams);\n\n // création d'une ol.layer.Vector avec les options récupérées ci-dessus.\n super(layerVectorOptions);\n\n this.name = options.layer;\n this.service = \"WFS\";\n this.config = layerCfg;\n\n return this;\n }\n\n /**\n * Get configuration\n * @returns {Object} - configuration\n */\n getConfiguration () {\n return this.config;\n }\n \n /**\n * Get legends\n * @returns {Array} - legends\n */\n getLegends () {\n return this.getSource()._legends;\n }\n\n /**\n * Get metadata\n * @returns {Array} - metadata\n */\n getMetadata () {\n return this.getSource()._metadata;\n }\n\n /**\n * Get description\n * @returns {String} - description\n */\n getDescription () {\n return this.getSource()._description;\n }\n\n /**\n * Get title\n * @returns {String} - title\n */\n getTitle () {\n return this.getSource()._title;\n }\n\n /**\n * Get quicklook url\n * @returns {String} - quicklook\n */\n getQuicklookUrl () {\n return this.getSource()._quicklookUrl;\n }\n\n /**\n * Get originators\n * @returns {Array} - originators\n */\n getOriginators () {\n return this.getSource()._originators;\n }\n\n};\n\nexport default LayerWFS;\n\n// Expose LayerWFS as ol.layerGeoportalWFS. (for a build bundle)\nif (window.ol && window.ol.layer) {\n window.ol.layer.GeoportalWFS = LayerWFS;\n}","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.VectorTile;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.TileJSON;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.format.MVT;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.Observable;","/**\n * @module ol/transform\n */\nimport {assert} from './asserts.js';\n\n/**\n * An array representing an affine 2d transformation for use with\n * {@link module:ol/transform} functions. The array has 6 elements.\n * @typedef {!Array} Transform\n * @api\n */\n\n/**\n * Collection of affine 2d transformation functions. The functions work on an\n * array of 6 elements. The element order is compatible with the [SVGMatrix\n * interface](https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix) and is\n * a subset (elements a to f) of a 3×3 matrix:\n * ```\n * [ a c e ]\n * [ b d f ]\n * [ 0 0 1 ]\n * ```\n */\n\n/**\n * @private\n * @type {Transform}\n */\nconst tmp_ = new Array(6);\n\n/**\n * Create an identity transform.\n * @return {!Transform} Identity transform.\n */\nexport function create() {\n return [1, 0, 0, 1, 0, 0];\n}\n\n/**\n * Resets the given transform to an identity transform.\n * @param {!Transform} transform Transform.\n * @return {!Transform} Transform.\n */\nexport function reset(transform) {\n return set(transform, 1, 0, 0, 1, 0, 0);\n}\n\n/**\n * Multiply the underlying matrices of two transforms and return the result in\n * the first transform.\n * @param {!Transform} transform1 Transform parameters of matrix 1.\n * @param {!Transform} transform2 Transform parameters of matrix 2.\n * @return {!Transform} transform1 multiplied with transform2.\n */\nexport function multiply(transform1, transform2) {\n const a1 = transform1[0];\n const b1 = transform1[1];\n const c1 = transform1[2];\n const d1 = transform1[3];\n const e1 = transform1[4];\n const f1 = transform1[5];\n const a2 = transform2[0];\n const b2 = transform2[1];\n const c2 = transform2[2];\n const d2 = transform2[3];\n const e2 = transform2[4];\n const f2 = transform2[5];\n\n transform1[0] = a1 * a2 + c1 * b2;\n transform1[1] = b1 * a2 + d1 * b2;\n transform1[2] = a1 * c2 + c1 * d2;\n transform1[3] = b1 * c2 + d1 * d2;\n transform1[4] = a1 * e2 + c1 * f2 + e1;\n transform1[5] = b1 * e2 + d1 * f2 + f1;\n\n return transform1;\n}\n\n/**\n * Set the transform components a-f on a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} a The a component of the transform.\n * @param {number} b The b component of the transform.\n * @param {number} c The c component of the transform.\n * @param {number} d The d component of the transform.\n * @param {number} e The e component of the transform.\n * @param {number} f The f component of the transform.\n * @return {!Transform} Matrix with transform applied.\n */\nexport function set(transform, a, b, c, d, e, f) {\n transform[0] = a;\n transform[1] = b;\n transform[2] = c;\n transform[3] = d;\n transform[4] = e;\n transform[5] = f;\n return transform;\n}\n\n/**\n * Set transform on one matrix from another matrix.\n * @param {!Transform} transform1 Matrix to set transform to.\n * @param {!Transform} transform2 Matrix to set transform from.\n * @return {!Transform} transform1 with transform from transform2 applied.\n */\nexport function setFromArray(transform1, transform2) {\n transform1[0] = transform2[0];\n transform1[1] = transform2[1];\n transform1[2] = transform2[2];\n transform1[3] = transform2[3];\n transform1[4] = transform2[4];\n transform1[5] = transform2[5];\n return transform1;\n}\n\n/**\n * Transforms the given coordinate with the given transform returning the\n * resulting, transformed coordinate. The coordinate will be modified in-place.\n *\n * @param {Transform} transform The transformation.\n * @param {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} coordinate The coordinate to transform.\n * @return {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} return coordinate so that operations can be\n * chained together.\n */\nexport function apply(transform, coordinate) {\n const x = coordinate[0];\n const y = coordinate[1];\n coordinate[0] = transform[0] * x + transform[2] * y + transform[4];\n coordinate[1] = transform[1] * x + transform[3] * y + transform[5];\n return coordinate;\n}\n\n/**\n * Applies rotation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} angle Angle in radians.\n * @return {!Transform} The rotated transform.\n */\nexport function rotate(transform, angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n return multiply(transform, set(tmp_, cos, sin, -sin, cos, 0, 0));\n}\n\n/**\n * Applies scale to a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scaled transform.\n */\nexport function scale(transform, x, y) {\n return multiply(transform, set(tmp_, x, 0, 0, y, 0, 0));\n}\n\n/**\n * Creates a scale transform.\n * @param {!Transform} target Transform to overwrite.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scale transform.\n */\nexport function makeScale(target, x, y) {\n return set(target, x, 0, 0, y, 0, 0);\n}\n\n/**\n * Applies translation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} dx Translation x.\n * @param {number} dy Translation y.\n * @return {!Transform} The translated transform.\n */\nexport function translate(transform, dx, dy) {\n return multiply(transform, set(tmp_, 1, 0, 0, 1, dx, dy));\n}\n\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative).\n * @param {!Transform} transform The transform (will be modified in place).\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {!Transform} The composite transform.\n */\nexport function compose(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {\n const sin = Math.sin(angle);\n const cos = Math.cos(angle);\n transform[0] = sx * cos;\n transform[1] = sy * sin;\n transform[2] = -sx * sin;\n transform[3] = sy * cos;\n transform[4] = dx2 * sx * cos - dy2 * sx * sin + dx1;\n transform[5] = dx2 * sy * sin + dy2 * sy * cos + dy1;\n return transform;\n}\n\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative). The resulting transform\n * string can be applied as `transform` property of an HTMLElement's style.\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {string} The composite css transform.\n * @api\n */\nexport function composeCssTransform(dx1, dy1, sx, sy, angle, dx2, dy2) {\n return toString(compose(create(), dx1, dy1, sx, sy, angle, dx2, dy2));\n}\n\n/**\n * Invert the given transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (source) transform.\n */\nexport function invert(source) {\n return makeInverse(source, source);\n}\n\n/**\n * Invert the given transform.\n * @param {!Transform} target Transform to be set as the inverse of\n * the source transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (target) transform.\n */\nexport function makeInverse(target, source) {\n const det = determinant(source);\n assert(det !== 0, 'Transformation matrix cannot be inverted');\n\n const a = source[0];\n const b = source[1];\n const c = source[2];\n const d = source[3];\n const e = source[4];\n const f = source[5];\n\n target[0] = d / det;\n target[1] = -b / det;\n target[2] = -c / det;\n target[3] = a / det;\n target[4] = (c * f - d * e) / det;\n target[5] = -(a * f - b * e) / det;\n\n return target;\n}\n\n/**\n * Returns the determinant of the given matrix.\n * @param {!Transform} mat Matrix.\n * @return {number} Determinant.\n */\nexport function determinant(mat) {\n return mat[0] * mat[3] - mat[1] * mat[2];\n}\n\n/**\n * @type {Array}\n */\nconst matrixPrecision = [1e6, 1e6, 1e6, 1e6, 2, 2];\n\n/**\n * A rounded string version of the transform. This can be used\n * for CSS transforms.\n * @param {!Transform} mat Matrix.\n * @return {string} The transform as a string.\n */\nexport function toString(mat) {\n const transformString =\n 'matrix(' +\n mat\n .map(\n (value, i) =>\n Math.round(value * matrixPrecision[i]) / matrixPrecision[i],\n )\n .join(', ') +\n ')';\n return transformString;\n}\n","/**\n * @module ol/extent\n */\nimport Relationship from './extent/Relationship.js';\n\n/**\n * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`.\n * @typedef {Array} Extent\n * @api\n */\n\n/**\n * Extent corner.\n * @typedef {'bottom-left' | 'bottom-right' | 'top-left' | 'top-right'} Corner\n */\n\n/**\n * Build an extent that includes all given coordinates.\n *\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Bounding extent.\n * @api\n */\nexport function boundingExtent(coordinates) {\n const extent = createEmpty();\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Array} xs Xs.\n * @param {Array} ys Ys.\n * @param {Extent} [dest] Destination extent.\n * @private\n * @return {Extent} Extent.\n */\nfunction _boundingExtentXYs(xs, ys, dest) {\n const minX = Math.min.apply(null, xs);\n const minY = Math.min.apply(null, ys);\n const maxX = Math.max.apply(null, xs);\n const maxY = Math.max.apply(null, ys);\n return createOrUpdate(minX, minY, maxX, maxY, dest);\n}\n\n/**\n * Return extent increased by the provided value.\n * @param {Extent} extent Extent.\n * @param {number} value The amount by which the extent should be buffered.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n * @api\n */\nexport function buffer(extent, value, dest) {\n if (dest) {\n dest[0] = extent[0] - value;\n dest[1] = extent[1] - value;\n dest[2] = extent[2] + value;\n dest[3] = extent[3] + value;\n return dest;\n }\n return [\n extent[0] - value,\n extent[1] - value,\n extent[2] + value,\n extent[3] + value,\n ];\n}\n\n/**\n * Creates a clone of an extent.\n *\n * @param {Extent} extent Extent to clone.\n * @param {Extent} [dest] Extent.\n * @return {Extent} The clone.\n */\nexport function clone(extent, dest) {\n if (dest) {\n dest[0] = extent[0];\n dest[1] = extent[1];\n dest[2] = extent[2];\n dest[3] = extent[3];\n return dest;\n }\n return extent.slice();\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {number} Closest squared distance.\n */\nexport function closestSquaredDistanceXY(extent, x, y) {\n let dx, dy;\n if (x < extent[0]) {\n dx = extent[0] - x;\n } else if (extent[2] < x) {\n dx = x - extent[2];\n } else {\n dx = 0;\n }\n if (y < extent[1]) {\n dy = extent[1] - y;\n } else if (extent[3] < y) {\n dy = y - extent[3];\n } else {\n dy = 0;\n }\n return dx * dx + dy * dy;\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n * @api\n */\nexport function containsCoordinate(extent, coordinate) {\n return containsXY(extent, coordinate[0], coordinate[1]);\n}\n\n/**\n * Check if one extent contains another.\n *\n * An extent is deemed contained if it lies completely within the other extent,\n * including if they share one or more edges.\n *\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The second extent is contained by or on the edge of the\n * first.\n * @api\n */\nexport function containsExtent(extent1, extent2) {\n return (\n extent1[0] <= extent2[0] &&\n extent2[2] <= extent1[2] &&\n extent1[1] <= extent2[1] &&\n extent2[3] <= extent1[3]\n );\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @return {boolean} The x, y values are contained in the extent.\n * @api\n */\nexport function containsXY(extent, x, y) {\n return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];\n}\n\n/**\n * Get the relationship between a coordinate and extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate The coordinate.\n * @return {import(\"./extent/Relationship.js\").default} The relationship (bitwise compare with\n * import(\"./extent/Relationship.js\").Relationship).\n */\nexport function coordinateRelationship(extent, coordinate) {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const x = coordinate[0];\n const y = coordinate[1];\n let relationship = Relationship.UNKNOWN;\n if (x < minX) {\n relationship = relationship | Relationship.LEFT;\n } else if (x > maxX) {\n relationship = relationship | Relationship.RIGHT;\n }\n if (y < minY) {\n relationship = relationship | Relationship.BELOW;\n } else if (y > maxY) {\n relationship = relationship | Relationship.ABOVE;\n }\n if (relationship === Relationship.UNKNOWN) {\n relationship = Relationship.INTERSECTING;\n }\n return relationship;\n}\n\n/**\n * Create an empty extent.\n * @return {Extent} Empty extent.\n * @api\n */\nexport function createEmpty() {\n return [Infinity, Infinity, -Infinity, -Infinity];\n}\n\n/**\n * Create a new extent or update the provided extent.\n * @param {number} minX Minimum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxX Maximum X.\n * @param {number} maxY Maximum Y.\n * @param {Extent} [dest] Destination extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdate(minX, minY, maxX, maxY, dest) {\n if (dest) {\n dest[0] = minX;\n dest[1] = minY;\n dest[2] = maxX;\n dest[3] = maxY;\n return dest;\n }\n return [minX, minY, maxX, maxY];\n}\n\n/**\n * Create a new empty extent or make the provided one empty.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateEmpty(dest) {\n return createOrUpdate(Infinity, Infinity, -Infinity, -Infinity, dest);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinate(coordinate, dest) {\n const x = coordinate[0];\n const y = coordinate[1];\n return createOrUpdate(x, y, x, y, dest);\n}\n\n/**\n * @param {Array} coordinates Coordinates.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinates(coordinates, dest) {\n const extent = createOrUpdateEmpty(dest);\n return extendCoordinates(extent, coordinates);\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromFlatCoordinates(\n flatCoordinates,\n offset,\n end,\n stride,\n dest,\n) {\n const extent = createOrUpdateEmpty(dest);\n return extendFlatCoordinates(extent, flatCoordinates, offset, end, stride);\n}\n\n/**\n * @param {Array>} rings Rings.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromRings(rings, dest) {\n const extent = createOrUpdateEmpty(dest);\n return extendRings(extent, rings);\n}\n\n/**\n * Determine if two extents are equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The two extents are equivalent.\n * @api\n */\nexport function equals(extent1, extent2) {\n return (\n extent1[0] == extent2[0] &&\n extent1[2] == extent2[2] &&\n extent1[1] == extent2[1] &&\n extent1[3] == extent2[3]\n );\n}\n\n/**\n * Determine if two extents are approximately equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {number} tolerance Tolerance in extent coordinate units.\n * @return {boolean} The two extents differ by less than the tolerance.\n */\nexport function approximatelyEquals(extent1, extent2, tolerance) {\n return (\n Math.abs(extent1[0] - extent2[0]) < tolerance &&\n Math.abs(extent1[2] - extent2[2]) < tolerance &&\n Math.abs(extent1[1] - extent2[1]) < tolerance &&\n Math.abs(extent1[3] - extent2[3]) < tolerance\n );\n}\n\n/**\n * Modify an extent to include another extent.\n * @param {Extent} extent1 The extent to be modified.\n * @param {Extent} extent2 The extent that will be included in the first.\n * @return {Extent} A reference to the first (extended) extent.\n * @api\n */\nexport function extend(extent1, extent2) {\n if (extent2[0] < extent1[0]) {\n extent1[0] = extent2[0];\n }\n if (extent2[2] > extent1[2]) {\n extent1[2] = extent2[2];\n }\n if (extent2[1] < extent1[1]) {\n extent1[1] = extent2[1];\n }\n if (extent2[3] > extent1[3]) {\n extent1[3] = extent2[3];\n }\n return extent1;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n */\nexport function extendCoordinate(extent, coordinate) {\n if (coordinate[0] < extent[0]) {\n extent[0] = coordinate[0];\n }\n if (coordinate[0] > extent[2]) {\n extent[2] = coordinate[0];\n }\n if (coordinate[1] < extent[1]) {\n extent[1] = coordinate[1];\n }\n if (coordinate[1] > extent[3]) {\n extent[3] = coordinate[1];\n }\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Extent.\n */\nexport function extendCoordinates(extent, coordinates) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Extent} Extent.\n */\nexport function extendFlatCoordinates(\n extent,\n flatCoordinates,\n offset,\n end,\n stride,\n) {\n for (; offset < end; offset += stride) {\n extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array>} rings Rings.\n * @return {Extent} Extent.\n */\nexport function extendRings(extent, rings) {\n for (let i = 0, ii = rings.length; i < ii; ++i) {\n extendCoordinates(extent, rings[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n */\nexport function extendXY(extent, x, y) {\n extent[0] = Math.min(extent[0], x);\n extent[1] = Math.min(extent[1], y);\n extent[2] = Math.max(extent[2], x);\n extent[3] = Math.max(extent[3], y);\n}\n\n/**\n * This function calls `callback` for each corner of the extent. If the\n * callback returns a truthy value the function returns that value\n * immediately. Otherwise the function returns `false`.\n * @param {Extent} extent Extent.\n * @param {function(import(\"./coordinate.js\").Coordinate): S} callback Callback.\n * @return {S|boolean} Value.\n * @template S\n */\nexport function forEachCorner(extent, callback) {\n let val;\n val = callback(getBottomLeft(extent));\n if (val) {\n return val;\n }\n val = callback(getBottomRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopLeft(extent));\n if (val) {\n return val;\n }\n return false;\n}\n\n/**\n * Get the size of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Area.\n * @api\n */\nexport function getArea(extent) {\n let area = 0;\n if (!isEmpty(extent)) {\n area = getWidth(extent) * getHeight(extent);\n }\n return area;\n}\n\n/**\n * Get the bottom left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom left coordinate.\n * @api\n */\nexport function getBottomLeft(extent) {\n return [extent[0], extent[1]];\n}\n\n/**\n * Get the bottom right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom right coordinate.\n * @api\n */\nexport function getBottomRight(extent) {\n return [extent[2], extent[1]];\n}\n\n/**\n * Get the center coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Center.\n * @api\n */\nexport function getCenter(extent) {\n return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];\n}\n\n/**\n * Get a corner coordinate of an extent.\n * @param {Extent} extent Extent.\n * @param {Corner} corner Corner.\n * @return {import(\"./coordinate.js\").Coordinate} Corner coordinate.\n */\nexport function getCorner(extent, corner) {\n let coordinate;\n if (corner === 'bottom-left') {\n coordinate = getBottomLeft(extent);\n } else if (corner === 'bottom-right') {\n coordinate = getBottomRight(extent);\n } else if (corner === 'top-left') {\n coordinate = getTopLeft(extent);\n } else if (corner === 'top-right') {\n coordinate = getTopRight(extent);\n } else {\n throw new Error('Invalid corner');\n }\n return coordinate;\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Enlarged area.\n */\nexport function getEnlargedArea(extent1, extent2) {\n const minX = Math.min(extent1[0], extent2[0]);\n const minY = Math.min(extent1[1], extent2[1]);\n const maxX = Math.max(extent1[2], extent2[2]);\n const maxY = Math.max(extent1[3], extent2[3]);\n return (maxX - minX) * (maxY - minY);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @param {Extent} [dest] Destination extent.\n * @return {Extent} Extent.\n */\nexport function getForViewAndSize(center, resolution, rotation, size, dest) {\n const [x0, y0, x1, y1, x2, y2, x3, y3] = getRotatedViewport(\n center,\n resolution,\n rotation,\n size,\n );\n return createOrUpdate(\n Math.min(x0, x1, x2, x3),\n Math.min(y0, y1, y2, y3),\n Math.max(x0, x1, x2, x3),\n Math.max(y0, y1, y2, y3),\n dest,\n );\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array} Linear ring representing the viewport.\n */\nexport function getRotatedViewport(center, resolution, rotation, size) {\n const dx = (resolution * size[0]) / 2;\n const dy = (resolution * size[1]) / 2;\n const cosRotation = Math.cos(rotation);\n const sinRotation = Math.sin(rotation);\n const xCos = dx * cosRotation;\n const xSin = dx * sinRotation;\n const yCos = dy * cosRotation;\n const ySin = dy * sinRotation;\n const x = center[0];\n const y = center[1];\n return [\n x - xCos + ySin,\n y - xSin - yCos,\n x - xCos - ySin,\n y - xSin + yCos,\n x + xCos - ySin,\n y + xSin + yCos,\n x + xCos + ySin,\n y + xSin - yCos,\n x - xCos + ySin,\n y - xSin - yCos,\n ];\n}\n\n/**\n * Get the height of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Height.\n * @api\n */\nexport function getHeight(extent) {\n return extent[3] - extent[1];\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Intersection area.\n */\nexport function getIntersectionArea(extent1, extent2) {\n const intersection = getIntersection(extent1, extent2);\n return getArea(intersection);\n}\n\n/**\n * Get the intersection of two extents.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {Extent} [dest] Optional extent to populate with intersection.\n * @return {Extent} Intersecting extent.\n * @api\n */\nexport function getIntersection(extent1, extent2, dest) {\n const intersection = dest ? dest : createEmpty();\n if (intersects(extent1, extent2)) {\n if (extent1[0] > extent2[0]) {\n intersection[0] = extent1[0];\n } else {\n intersection[0] = extent2[0];\n }\n if (extent1[1] > extent2[1]) {\n intersection[1] = extent1[1];\n } else {\n intersection[1] = extent2[1];\n }\n if (extent1[2] < extent2[2]) {\n intersection[2] = extent1[2];\n } else {\n intersection[2] = extent2[2];\n }\n if (extent1[3] < extent2[3]) {\n intersection[3] = extent1[3];\n } else {\n intersection[3] = extent2[3];\n }\n } else {\n createOrUpdateEmpty(intersection);\n }\n return intersection;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @return {number} Margin.\n */\nexport function getMargin(extent) {\n return getWidth(extent) + getHeight(extent);\n}\n\n/**\n * Get the size (width, height) of an extent.\n * @param {Extent} extent The extent.\n * @return {import(\"./size.js\").Size} The extent size.\n * @api\n */\nexport function getSize(extent) {\n return [extent[2] - extent[0], extent[3] - extent[1]];\n}\n\n/**\n * Get the top left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top left coordinate.\n * @api\n */\nexport function getTopLeft(extent) {\n return [extent[0], extent[3]];\n}\n\n/**\n * Get the top right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top right coordinate.\n * @api\n */\nexport function getTopRight(extent) {\n return [extent[2], extent[3]];\n}\n\n/**\n * Get the width of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Width.\n * @api\n */\nexport function getWidth(extent) {\n return extent[2] - extent[0];\n}\n\n/**\n * Determine if one extent intersects another.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent.\n * @return {boolean} The two extents intersect.\n * @api\n */\nexport function intersects(extent1, extent2) {\n return (\n extent1[0] <= extent2[2] &&\n extent1[2] >= extent2[0] &&\n extent1[1] <= extent2[3] &&\n extent1[3] >= extent2[1]\n );\n}\n\n/**\n * Determine if an extent is empty.\n * @param {Extent} extent Extent.\n * @return {boolean} Is empty.\n * @api\n */\nexport function isEmpty(extent) {\n return extent[2] < extent[0] || extent[3] < extent[1];\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function returnOrUpdate(extent, dest) {\n if (dest) {\n dest[0] = extent[0];\n dest[1] = extent[1];\n dest[2] = extent[2];\n dest[3] = extent[3];\n return dest;\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} value Value.\n */\nexport function scaleFromCenter(extent, value) {\n const deltaX = ((extent[2] - extent[0]) / 2) * (value - 1);\n const deltaY = ((extent[3] - extent[1]) / 2) * (value - 1);\n extent[0] -= deltaX;\n extent[2] += deltaX;\n extent[1] -= deltaY;\n extent[3] += deltaY;\n}\n\n/**\n * Determine if the segment between two coordinates intersects (crosses,\n * touches, or is contained by) the provided extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} start Segment start coordinate.\n * @param {import(\"./coordinate.js\").Coordinate} end Segment end coordinate.\n * @return {boolean} The segment intersects the extent.\n */\nexport function intersectsSegment(extent, start, end) {\n let intersects = false;\n const startRel = coordinateRelationship(extent, start);\n const endRel = coordinateRelationship(extent, end);\n if (\n startRel === Relationship.INTERSECTING ||\n endRel === Relationship.INTERSECTING\n ) {\n intersects = true;\n } else {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const startX = start[0];\n const startY = start[1];\n const endX = end[0];\n const endY = end[1];\n const slope = (endY - startY) / (endX - startX);\n let x, y;\n if (!!(endRel & Relationship.ABOVE) && !(startRel & Relationship.ABOVE)) {\n // potentially intersects top\n x = endX - (endY - maxY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.RIGHT) &&\n !(startRel & Relationship.RIGHT)\n ) {\n // potentially intersects right\n y = endY - (endX - maxX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.BELOW) &&\n !(startRel & Relationship.BELOW)\n ) {\n // potentially intersects bottom\n x = endX - (endY - minY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.LEFT) &&\n !(startRel & Relationship.LEFT)\n ) {\n // potentially intersects left\n y = endY - (endX - minX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n }\n return intersects;\n}\n\n/**\n * Apply a transform function to the extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./proj.js\").TransformFunction} transformFn Transform function.\n * Called with `[minX, minY, maxX, maxY]` extent coordinates.\n * @param {Extent} [dest] Destination extent.\n * @param {number} [stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {Extent} Extent.\n * @api\n */\nexport function applyTransform(extent, transformFn, dest, stops) {\n if (isEmpty(extent)) {\n return createOrUpdateEmpty(dest);\n }\n let coordinates = [];\n if (stops > 1) {\n const width = extent[2] - extent[0];\n const height = extent[3] - extent[1];\n for (let i = 0; i < stops; ++i) {\n coordinates.push(\n extent[0] + (width * i) / stops,\n extent[1],\n extent[2],\n extent[1] + (height * i) / stops,\n extent[2] - (width * i) / stops,\n extent[3],\n extent[0],\n extent[3] - (height * i) / stops,\n );\n }\n } else {\n coordinates = [\n extent[0],\n extent[1],\n extent[2],\n extent[1],\n extent[2],\n extent[3],\n extent[0],\n extent[3],\n ];\n }\n transformFn(coordinates, coordinates, 2);\n const xs = [];\n const ys = [];\n for (let i = 0, l = coordinates.length; i < l; i += 2) {\n xs.push(coordinates[i]);\n ys.push(coordinates[i + 1]);\n }\n return _boundingExtentXYs(xs, ys, dest);\n}\n\n/**\n * Modifies the provided extent in-place to be within the real world\n * extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @return {Extent} The extent within the real world extent.\n */\nexport function wrapX(extent, projection) {\n const projectionExtent = projection.getExtent();\n const center = getCenter(extent);\n if (\n projection.canWrapX() &&\n (center[0] < projectionExtent[0] || center[0] >= projectionExtent[2])\n ) {\n const worldWidth = getWidth(projectionExtent);\n const worldsAway = Math.floor(\n (center[0] - projectionExtent[0]) / worldWidth,\n );\n const offset = worldsAway * worldWidth;\n extent[0] -= offset;\n extent[2] -= offset;\n }\n return extent;\n}\n\n/**\n * Fits the extent to the real world\n *\n * If the extent does not cross the anti meridian, this will return the extent in an array\n * If the extent crosses the anti meridian, the extent will be sliced, so each part fits within the\n * real world\n *\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @param {boolean} [multiWorld] Return all worlds\n * @return {Array} The extent within the real world extent.\n */\nexport function wrapAndSliceX(extent, projection, multiWorld) {\n if (projection.canWrapX()) {\n const projectionExtent = projection.getExtent();\n\n if (!isFinite(extent[0]) || !isFinite(extent[2])) {\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n }\n\n wrapX(extent, projection);\n const worldWidth = getWidth(projectionExtent);\n\n if (getWidth(extent) > worldWidth && !multiWorld) {\n // the extent wraps around on itself\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n }\n if (extent[0] < projectionExtent[0]) {\n // the extent crosses the anti meridian, so it needs to be sliced\n return [\n [extent[0] + worldWidth, extent[1], projectionExtent[2], extent[3]],\n [projectionExtent[0], extent[1], extent[2], extent[3]],\n ];\n }\n if (extent[2] > projectionExtent[2]) {\n // the extent crosses the anti meridian, so it needs to be sliced\n return [\n [extent[0], extent[1], projectionExtent[2], extent[3]],\n [projectionExtent[0], extent[1], extent[2] - worldWidth, extent[3]],\n ];\n }\n }\n\n return [extent];\n}\n","/**\n * @module ol/math\n */\n\n/**\n * Takes a number and clamps it to within the provided bounds.\n * @param {number} value The input number.\n * @param {number} min The minimum value to return.\n * @param {number} max The maximum value to return.\n * @return {number} The input number if it is within bounds, or the nearest\n * number within the bounds.\n */\nexport function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Returns the square of the closest distance between the point (x, y) and the\n * line segment (x1, y1) to (x2, y2).\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredSegmentDistance(x, y, x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n if (dx !== 0 || dy !== 0) {\n const t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n x1 = x2;\n y1 = y2;\n } else if (t > 0) {\n x1 += dx * t;\n y1 += dy * t;\n }\n }\n return squaredDistance(x, y, x1, y1);\n}\n\n/**\n * Returns the square of the distance between the points (x1, y1) and (x2, y2).\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredDistance(x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n return dx * dx + dy * dy;\n}\n\n/**\n * Solves system of linear equations using Gaussian elimination method.\n *\n * @param {Array>} mat Augmented matrix (n x n + 1 column)\n * in row-major order.\n * @return {Array|null} The resulting vector.\n */\nexport function solveLinearSystem(mat) {\n const n = mat.length;\n\n for (let i = 0; i < n; i++) {\n // Find max in the i-th column (ignoring i - 1 first rows)\n let maxRow = i;\n let maxEl = Math.abs(mat[i][i]);\n for (let r = i + 1; r < n; r++) {\n const absValue = Math.abs(mat[r][i]);\n if (absValue > maxEl) {\n maxEl = absValue;\n maxRow = r;\n }\n }\n\n if (maxEl === 0) {\n return null; // matrix is singular\n }\n\n // Swap max row with i-th (current) row\n const tmp = mat[maxRow];\n mat[maxRow] = mat[i];\n mat[i] = tmp;\n\n // Subtract the i-th row to make all the remaining rows 0 in the i-th column\n for (let j = i + 1; j < n; j++) {\n const coef = -mat[j][i] / mat[i][i];\n for (let k = i; k < n + 1; k++) {\n if (i == k) {\n mat[j][k] = 0;\n } else {\n mat[j][k] += coef * mat[i][k];\n }\n }\n }\n }\n\n // Solve Ax=b for upper triangular matrix A (mat)\n const x = new Array(n);\n for (let l = n - 1; l >= 0; l--) {\n x[l] = mat[l][n] / mat[l][l];\n for (let m = l - 1; m >= 0; m--) {\n mat[m][n] -= mat[m][l] * x[l];\n }\n }\n return x;\n}\n\n/**\n * Converts radians to to degrees.\n *\n * @param {number} angleInRadians Angle in radians.\n * @return {number} Angle in degrees.\n */\nexport function toDegrees(angleInRadians) {\n return (angleInRadians * 180) / Math.PI;\n}\n\n/**\n * Converts degrees to radians.\n *\n * @param {number} angleInDegrees Angle in degrees.\n * @return {number} Angle in radians.\n */\nexport function toRadians(angleInDegrees) {\n return (angleInDegrees * Math.PI) / 180;\n}\n\n/**\n * Returns the modulo of a / b, depending on the sign of b.\n *\n * @param {number} a Dividend.\n * @param {number} b Divisor.\n * @return {number} Modulo.\n */\nexport function modulo(a, b) {\n const r = a % b;\n return r * b < 0 ? r + b : r;\n}\n\n/**\n * Calculates the linearly interpolated value of x between a and b.\n *\n * @param {number} a Number\n * @param {number} b Number\n * @param {number} x Value to be interpolated.\n * @return {number} Interpolated value.\n */\nexport function lerp(a, b, x) {\n return a + x * (b - a);\n}\n\n/**\n * Returns a number with a limited number of decimal digits.\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The input number with a limited number of decimal digits.\n */\nexport function toFixed(n, decimals) {\n const factor = Math.pow(10, decimals);\n return Math.round(n * factor) / factor;\n}\n\n/**\n * Rounds a number to the nearest integer value considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The nearest integer.\n */\nexport function round(n, decimals) {\n return Math.round(toFixed(n, decimals));\n}\n\n/**\n * Rounds a number to the next smaller integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next smaller integer.\n */\nexport function floor(n, decimals) {\n return Math.floor(toFixed(n, decimals));\n}\n\n/**\n * Rounds a number to the next bigger integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next bigger integer.\n */\nexport function ceil(n, decimals) {\n return Math.ceil(toFixed(n, decimals));\n}\n\n/**\n * Wraps a number between some minimum and maximum values.\n * @param {number} n The number to wrap.\n * @param {number} min The minimum of the range (inclusive).\n * @param {number} max The maximum of the range (exclusive).\n * @return {number} The wrapped number.\n */\nexport function wrap(n, min, max) {\n if (n >= min && n < max) {\n return n;\n }\n const range = max - min;\n return ((((n - min) % range) + range) % range) + min;\n}\n","/**\n * @module ol/geom/flat/simplify\n */\n// Based on simplify-js https://github.com/mourner/simplify-js\n// Copyright (c) 2012, Vladimir Agafonkin\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//\n// 1. Redistributions of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n\nimport {squaredDistance, squaredSegmentDistance} from '../../math.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {boolean} highQuality Highest quality.\n * @param {Array} [simplifiedFlatCoordinates] Simplified flat\n * coordinates.\n * @return {Array} Simplified line string.\n */\nexport function simplifyLineString(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n highQuality,\n simplifiedFlatCoordinates,\n) {\n simplifiedFlatCoordinates =\n simplifiedFlatCoordinates !== undefined ? simplifiedFlatCoordinates : [];\n if (!highQuality) {\n end = radialDistance(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n );\n flatCoordinates = simplifiedFlatCoordinates;\n offset = 0;\n stride = 2;\n }\n simplifiedFlatCoordinates.length = douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n );\n return simplifiedFlatCoordinates;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n) {\n const n = (end - offset) / stride;\n if (n < 3) {\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n /** @type {Array} */\n const markers = new Array(n);\n markers[0] = 1;\n markers[n - 1] = 1;\n /** @type {Array} */\n const stack = [offset, end - stride];\n let index = 0;\n while (stack.length > 0) {\n const last = stack.pop();\n const first = stack.pop();\n let maxSquaredDistance = 0;\n const x1 = flatCoordinates[first];\n const y1 = flatCoordinates[first + 1];\n const x2 = flatCoordinates[last];\n const y2 = flatCoordinates[last + 1];\n for (let i = first + stride; i < last; i += stride) {\n const x = flatCoordinates[i];\n const y = flatCoordinates[i + 1];\n const squaredDistance = squaredSegmentDistance(x, y, x1, y1, x2, y2);\n if (squaredDistance > maxSquaredDistance) {\n index = i;\n maxSquaredDistance = squaredDistance;\n }\n }\n if (maxSquaredDistance > squaredTolerance) {\n markers[(index - offset) / stride] = 1;\n if (first + stride < index) {\n stack.push(first, index);\n }\n if (index + stride < last) {\n stack.push(index, last);\n }\n }\n }\n for (let i = 0; i < n; ++i) {\n if (markers[i]) {\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride + 1];\n }\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n simplifiedOffset = douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n );\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEndss,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n /** @type {Array} */\n const simplifiedEnds = [];\n simplifiedOffset = douglasPeuckerArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n );\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function radialDistance(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n) {\n if (end <= offset + stride) {\n // zero or one point, no simplification possible, so copy and return\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n // copy first point\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n let x2 = x1;\n let y2 = y1;\n for (offset += stride; offset < end; offset += stride) {\n x2 = flatCoordinates[offset];\n y2 = flatCoordinates[offset + 1];\n if (squaredDistance(x1, y1, x2, y2) > squaredTolerance) {\n // copy point at offset\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n }\n }\n if (x2 != x1 || y2 != y1) {\n // copy last point\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {number} value Value.\n * @param {number} tolerance Tolerance.\n * @return {number} Rounded value.\n */\nexport function snap(value, tolerance) {\n return tolerance * Math.round(value / tolerance);\n}\n\n/**\n * Simplifies a line string using an algorithm designed by Tim Schaub.\n * Coordinates are snapped to the nearest value in a virtual grid and\n * consecutive duplicate coordinates are discarded. This effectively preserves\n * topology as the simplification of any subsection of a line string is\n * independent of the rest of the line string. This means that, for examples,\n * the common edge between two polygons will be simplified to the same line\n * string independently in both polygons. This implementation uses a single\n * pass over the coordinates and eliminates intermediate collinear points.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function quantize(\n flatCoordinates,\n offset,\n end,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n) {\n // do nothing if the line is empty\n if (offset == end) {\n return simplifiedOffset;\n }\n // snap the first coordinate (P1)\n let x1 = snap(flatCoordinates[offset], tolerance);\n let y1 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // add the first coordinate to the output\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n // find the next coordinate that does not snap to the same value as the first\n // coordinate (P2)\n let x2, y2;\n do {\n x2 = snap(flatCoordinates[offset], tolerance);\n y2 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n if (offset == end) {\n // all coordinates snap to the same value, the line collapses to a point\n // push the last snapped value anyway to ensure that the output contains\n // at least two points\n // FIXME should we really return at least two points anyway?\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n }\n } while (x2 == x1 && y2 == y1);\n while (offset < end) {\n // snap the next coordinate (P3)\n const x3 = snap(flatCoordinates[offset], tolerance);\n const y3 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // skip P3 if it is equal to P2\n if (x3 == x2 && y3 == y2) {\n continue;\n }\n // calculate the delta between P1 and P2\n const dx1 = x2 - x1;\n const dy1 = y2 - y1;\n // calculate the delta between P3 and P1\n const dx2 = x3 - x1;\n const dy2 = y3 - y1;\n // if P1, P2, and P3 are colinear and P3 is further from P1 than P2 is from\n // P1 in the same direction then P2 is on the straight line between P1 and\n // P3\n if (\n dx1 * dy2 == dy1 * dx2 &&\n ((dx1 < 0 && dx2 < dx1) || dx1 == dx2 || (dx1 > 0 && dx2 > dx1)) &&\n ((dy1 < 0 && dy2 < dy1) || dy1 == dy2 || (dy1 > 0 && dy2 > dy1))\n ) {\n // discard P2 and set P2 = P3\n x2 = x3;\n y2 = y3;\n continue;\n }\n // either P1, P2, and P3 are not colinear, or they are colinear but P3 is\n // between P3 and P1 or on the opposite half of the line to P2. add P2,\n // and continue with P1 = P2 and P2 = P3\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n x2 = x3;\n y2 = y3;\n }\n // add the last point (P2)\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function quantizeArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n simplifiedOffset = quantize(\n flatCoordinates,\n offset,\n end,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n );\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function quantizeMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEndss,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n /** @type {Array} */\n const simplifiedEnds = [];\n simplifiedOffset = quantizeArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n );\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n","/**\n * @module ol/array\n */\n\n/**\n * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1.\n * https://github.com/darkskyapp/binary-search\n *\n * @param {Array<*>} haystack Items to search through.\n * @param {*} needle The item to look for.\n * @param {Function} [comparator] Comparator function.\n * @return {number} The index of the item if found, -1 if not.\n */\nexport function binarySearch(haystack, needle, comparator) {\n let mid, cmp;\n comparator = comparator || ascending;\n let low = 0;\n let high = haystack.length;\n let found = false;\n\n while (low < high) {\n /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n * to double (which gives the wrong results). */\n mid = low + ((high - low) >> 1);\n cmp = +comparator(haystack[mid], needle);\n\n if (cmp < 0.0) {\n /* Too low. */\n low = mid + 1;\n } else {\n /* Key found or too high */\n high = mid;\n found = !cmp;\n }\n }\n\n /* Key not found. */\n return found ? low : ~low;\n}\n\n/**\n * Compare function sorting arrays in ascending order. Safe to use for numeric values.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is less than, equal to, or greater than the second.\n */\nexport function ascending(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n}\n\n/**\n * Compare function sorting arrays in descending order. Safe to use for numeric values.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is greater than, equal to, or less than the second.\n */\nexport function descending(a, b) {\n return a < b ? 1 : a > b ? -1 : 0;\n}\n\n/**\n * {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution} can use a function\n * of this type to determine which nearest resolution to use.\n *\n * This function takes a `{number}` representing a value between two array entries,\n * a `{number}` representing the value of the nearest higher entry and\n * a `{number}` representing the value of the nearest lower entry\n * as arguments and returns a `{number}`. If a negative number or zero is returned\n * the lower value will be used, if a positive number is returned the higher value\n * will be used.\n * @typedef {function(number, number, number): number} NearestDirectionFunction\n * @api\n */\n\n/**\n * @param {Array} arr Array in descending order.\n * @param {number} target Target.\n * @param {number|NearestDirectionFunction} direction\n * 0 means return the nearest,\n * > 0 means return the largest nearest,\n * < 0 means return the smallest nearest.\n * @return {number} Index.\n */\nexport function linearFindNearest(arr, target, direction) {\n if (arr[0] <= target) {\n return 0;\n }\n\n const n = arr.length;\n if (target <= arr[n - 1]) {\n return n - 1;\n }\n\n if (typeof direction === 'function') {\n for (let i = 1; i < n; ++i) {\n const candidate = arr[i];\n if (candidate === target) {\n return i;\n }\n if (candidate < target) {\n if (direction(target, arr[i - 1], candidate) > 0) {\n return i - 1;\n }\n return i;\n }\n }\n return n - 1;\n }\n\n if (direction > 0) {\n for (let i = 1; i < n; ++i) {\n if (arr[i] < target) {\n return i - 1;\n }\n }\n return n - 1;\n }\n\n if (direction < 0) {\n for (let i = 1; i < n; ++i) {\n if (arr[i] <= target) {\n return i;\n }\n }\n return n - 1;\n }\n\n for (let i = 1; i < n; ++i) {\n if (arr[i] == target) {\n return i;\n }\n if (arr[i] < target) {\n if (arr[i - 1] - target < target - arr[i]) {\n return i - 1;\n }\n return i;\n }\n }\n return n - 1;\n}\n\n/**\n * @param {Array<*>} arr Array.\n * @param {number} begin Begin index.\n * @param {number} end End index.\n */\nexport function reverseSubArray(arr, begin, end) {\n while (begin < end) {\n const tmp = arr[begin];\n arr[begin] = arr[end];\n arr[end] = tmp;\n ++begin;\n --end;\n }\n}\n\n/**\n * @param {Array} arr The array to modify.\n * @param {!Array|VALUE} data The elements or arrays of elements to add to arr.\n * @template VALUE\n */\nexport function extend(arr, data) {\n const extension = Array.isArray(data) ? data : [data];\n const length = extension.length;\n for (let i = 0; i < length; i++) {\n arr[arr.length] = extension[i];\n }\n}\n\n/**\n * @param {Array} arr The array to modify.\n * @param {VALUE} obj The element to remove.\n * @template VALUE\n * @return {boolean} If the element was removed.\n */\nexport function remove(arr, obj) {\n const i = arr.indexOf(obj);\n const found = i > -1;\n if (found) {\n arr.splice(i, 1);\n }\n return found;\n}\n\n/**\n * @param {Array|Uint8ClampedArray} arr1 The first array to compare.\n * @param {Array|Uint8ClampedArray} arr2 The second array to compare.\n * @return {boolean} Whether the two arrays are equal.\n */\nexport function equals(arr1, arr2) {\n const len1 = arr1.length;\n if (len1 !== arr2.length) {\n return false;\n }\n for (let i = 0; i < len1; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Sort the passed array such that the relative order of equal elements is preserved.\n * See https://en.wikipedia.org/wiki/Sorting_algorithm#Stability for details.\n * @param {Array<*>} arr The array to sort (modifies original).\n * @param {!function(*, *): number} compareFnc Comparison function.\n * @api\n */\nexport function stableSort(arr, compareFnc) {\n const length = arr.length;\n const tmp = Array(arr.length);\n let i;\n for (i = 0; i < length; i++) {\n tmp[i] = {index: i, value: arr[i]};\n }\n tmp.sort(function (a, b) {\n return compareFnc(a.value, b.value) || a.index - b.index;\n });\n for (i = 0; i < arr.length; i++) {\n arr[i] = tmp[i].value;\n }\n}\n\n/**\n * @param {Array<*>} arr The array to test.\n * @param {Function} [func] Comparison function.\n * @param {boolean} [strict] Strictly sorted (default false).\n * @return {boolean} Return index.\n */\nexport function isSorted(arr, func, strict) {\n const compare = func || ascending;\n return arr.every(function (currentVal, index) {\n if (index === 0) {\n return true;\n }\n const res = compare(arr[index - 1], currentVal);\n return !(res > 0 || (strict && res === 0));\n });\n}\n","/**\n * @module ol/geom/flat/contains\n */\nimport {forEachCorner} from '../../extent.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} Contains extent.\n */\nexport function linearRingContainsExtent(\n flatCoordinates,\n offset,\n end,\n stride,\n extent,\n) {\n const outside = forEachCorner(\n extent,\n /**\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} Contains (x, y).\n */\n function (coordinate) {\n return !linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n coordinate[0],\n coordinate[1],\n );\n },\n );\n return !outside;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n x,\n y,\n) {\n // https://geomalgorithms.com/a03-_inclusion.html\n // Copyright 2000 softSurfer, 2012 Dan Sunday\n // This code may be freely used and modified for any purpose\n // providing that this copyright notice is included with it.\n // SoftSurfer makes no warranty for this code, and cannot be held\n // liable for any real or imagined damage resulting from its use.\n // Users of this code must verify correctness for their application.\n let wn = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n if (y1 <= y) {\n if (y2 > y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) > 0) {\n wn++;\n }\n } else if (y2 <= y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) < 0) {\n wn--;\n }\n x1 = x2;\n y1 = y2;\n }\n return wn !== 0;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingsContainsXY(\n flatCoordinates,\n offset,\n ends,\n stride,\n x,\n y,\n) {\n if (ends.length === 0) {\n return false;\n }\n if (!linearRingContainsXY(flatCoordinates, offset, ends[0], stride, x, y)) {\n return false;\n }\n for (let i = 1, ii = ends.length; i < ii; ++i) {\n if (\n linearRingContainsXY(flatCoordinates, ends[i - 1], ends[i], stride, x, y)\n ) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingssContainsXY(\n flatCoordinates,\n offset,\n endss,\n stride,\n x,\n y,\n) {\n if (endss.length === 0) {\n return false;\n }\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n return true;\n }\n offset = ends[ends.length - 1];\n }\n return false;\n}\n","/**\n * @module ol/geom/flat/interiorpoint\n */\nimport {ascending} from '../../array.js';\nimport {linearRingsContainsXY} from './contains.js';\n\n/**\n * Calculates a point that is likely to lie in the interior of the linear rings.\n * Inspired by JTS's com.vividsolutions.jts.geom.Geometry#getInteriorPoint.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Array} flatCenters Flat centers.\n * @param {number} flatCentersOffset Flat center offset.\n * @param {Array} [dest] Destination.\n * @return {Array} Destination point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointOfArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n flatCenters,\n flatCentersOffset,\n dest,\n) {\n let i, ii, x, x1, x2, y1, y2;\n const y = flatCenters[flatCentersOffset + 1];\n /** @type {Array} */\n const intersections = [];\n // Calculate intersections with the horizontal line\n for (let r = 0, rr = ends.length; r < rr; ++r) {\n const end = ends[r];\n x1 = flatCoordinates[end - stride];\n y1 = flatCoordinates[end - stride + 1];\n for (i = offset; i < end; i += stride) {\n x2 = flatCoordinates[i];\n y2 = flatCoordinates[i + 1];\n if ((y <= y1 && y2 <= y) || (y1 <= y && y <= y2)) {\n x = ((y - y1) / (y2 - y1)) * (x2 - x1) + x1;\n intersections.push(x);\n }\n x1 = x2;\n y1 = y2;\n }\n }\n // Find the longest segment of the horizontal line that has its center point\n // inside the linear ring.\n let pointX = NaN;\n let maxSegmentLength = -Infinity;\n intersections.sort(ascending);\n x1 = intersections[0];\n for (i = 1, ii = intersections.length; i < ii; ++i) {\n x2 = intersections[i];\n const segmentLength = Math.abs(x2 - x1);\n if (segmentLength > maxSegmentLength) {\n x = (x1 + x2) / 2;\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n pointX = x;\n maxSegmentLength = segmentLength;\n }\n }\n x1 = x2;\n }\n if (isNaN(pointX)) {\n // There is no horizontal line that has its center point inside the linear\n // ring. Use the center of the the linear ring's extent.\n pointX = flatCenters[flatCentersOffset];\n }\n if (dest) {\n dest.push(pointX, y, maxSegmentLength);\n return dest;\n }\n return [pointX, y, maxSegmentLength];\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array} flatCenters Flat centers.\n * @return {Array} Interior points as XYM coordinates, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointsOfMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n flatCenters,\n) {\n /** @type {Array} */\n let interiorPoints = [];\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n interiorPoints = getInteriorPointOfArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n flatCenters,\n 2 * i,\n interiorPoints,\n );\n offset = ends[ends.length - 1];\n }\n return interiorPoints;\n}\n","/**\n * @module ol/proj/Units\n */\n\n/**\n * @typedef {'radians' | 'degrees' | 'ft' | 'm' | 'pixels' | 'tile-pixels' | 'us-ft'} Units\n * Projection units.\n */\n\n/**\n * See http://duff.ess.washington.edu/data/raster/drg/docs/geotiff.txt\n * @type {Object}\n */\nconst unitByCode = {\n '9001': 'm',\n '9002': 'ft',\n '9003': 'us-ft',\n '9101': 'radians',\n '9102': 'degrees',\n};\n\n/**\n * @param {number} code Unit code.\n * @return {Units} Units.\n */\nexport function fromCode(code) {\n return unitByCode[code];\n}\n\n/**\n * @typedef {Object} MetersPerUnitLookup\n * @property {number} radians Radians\n * @property {number} degrees Degrees\n * @property {number} ft Feet\n * @property {number} m Meters\n * @property {number} us-ft US feet\n */\n\n/**\n * Meters per unit lookup table.\n * @const\n * @type {MetersPerUnitLookup}\n * @api\n */\nexport const METERS_PER_UNIT = {\n // use the radius of the Normal sphere\n 'radians': 6370997 / (2 * Math.PI),\n 'degrees': (2 * Math.PI * 6370997) / 360,\n 'ft': 0.3048,\n 'm': 1,\n 'us-ft': 1200 / 3937,\n};\n","/**\n * @module ol/proj/Projection\n */\nimport {METERS_PER_UNIT} from './Units.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} code The SRS identifier code, e.g. `EPSG:4326`.\n * @property {import(\"./Units.js\").Units} [units] Units. Required unless a\n * proj4 projection is defined for `code`.\n * @property {import(\"../extent.js\").Extent} [extent] The validity extent for the SRS.\n * @property {string} [axisOrientation='enu'] The axis orientation as specified in Proj4.\n * @property {boolean} [global=false] Whether the projection is valid for the whole globe.\n * @property {number} [metersPerUnit] The meters per unit for the SRS.\n * If not provided, the `units` are used to get the meters per unit from the {@link METERS_PER_UNIT}\n * lookup table.\n * @property {import(\"../extent.js\").Extent} [worldExtent] The world extent for the SRS.\n * @property {function(number, import(\"../coordinate.js\").Coordinate):number} [getPointResolution]\n * Function to determine resolution at a point. The function is called with a\n * `number` view resolution and a {@link module:ol/coordinate~Coordinate} as arguments, and returns\n * the `number` resolution in projection units at the passed coordinate. If this is `undefined`,\n * the default {@link module:ol/proj.getPointResolution} function will be used.\n */\n\n/**\n * @classdesc\n * In most cases, you should not need to create instances of this class.\n * Instead, where projection information is required, you can use a string\n * projection code or identifier (e.g. `EPSG:4326`) instead of a projection\n * instance.\n *\n * The library includes support for transforming coordinates between the following\n * projections:\n *\n * * WGS 84 / Geographic - Using codes `EPSG:4326`, `CRS:84`, `urn:ogc:def:crs:EPSG:6.6:4326`,\n * `urn:ogc:def:crs:OGC:1.3:CRS84`, `urn:ogc:def:crs:OGC:2:84`, `http://www.opengis.net/gml/srs/epsg.xml#4326`,\n * or `urn:x-ogc:def:crs:EPSG:4326`\n * * WGS 84 / Spherical Mercator - Using codes `EPSG:3857`, `EPSG:102100`, `EPSG:102113`, `EPSG:900913`,\n * `urn:ogc:def:crs:EPSG:6.18:3:3857`, or `http://www.opengis.net/gml/srs/epsg.xml#3857`\n * * WGS 84 / UTM zones - Using codes `EPSG:32601` through `EPSG:32660` for northern zones\n * and `EPSG:32701` through `EPSG:32760` for southern zones. Note that the built-in UTM transforms\n * are lower accuracy (with errors on the order of 0.1 m) than those that you might get in a\n * library like [proj4js](https://github.com/proj4js/proj4js).\n *\n * For additional projection support, or to use higher accuracy transforms than the built-in ones, you can use\n * the [proj4js](https://github.com/proj4js/proj4js) library. With `proj4js`, after adding any new projection\n * definitions, call the {@link module:ol/proj/proj4.register} function.\n *\n * You can use the {@link module:ol/proj.get} function to retrieve a projection instance\n * for one of the registered projections.\n *\n * @api\n */\nclass Projection {\n /**\n * @param {Options} options Projection options.\n */\n constructor(options) {\n /**\n * @private\n * @type {string}\n */\n this.code_ = options.code;\n\n /**\n * Units of projected coordinates. When set to `TILE_PIXELS`, a\n * `this.extent_` and `this.worldExtent_` must be configured properly for each\n * tile.\n * @private\n * @type {import(\"./Units.js\").Units}\n */\n this.units_ = /** @type {import(\"./Units.js\").Units} */ (options.units);\n\n /**\n * Validity extent of the projection in projected coordinates. For projections\n * with `TILE_PIXELS` units, this is the extent of the tile in\n * tile pixel space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.extent_ = options.extent !== undefined ? options.extent : null;\n\n /**\n * Extent of the world in EPSG:4326. For projections with\n * `TILE_PIXELS` units, this is the extent of the tile in\n * projected coordinate space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.worldExtent_ =\n options.worldExtent !== undefined ? options.worldExtent : null;\n\n /**\n * @private\n * @type {string}\n */\n this.axisOrientation_ =\n options.axisOrientation !== undefined ? options.axisOrientation : 'enu';\n\n /**\n * @private\n * @type {boolean}\n */\n this.global_ = options.global !== undefined ? options.global : false;\n\n /**\n * @private\n * @type {boolean}\n */\n this.canWrapX_ = !!(this.global_ && this.extent_);\n\n /**\n * @private\n * @type {function(number, import(\"../coordinate.js\").Coordinate):number|undefined}\n */\n this.getPointResolutionFunc_ = options.getPointResolution;\n\n /**\n * @private\n * @type {import(\"../tilegrid/TileGrid.js\").default}\n */\n this.defaultTileGrid_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.metersPerUnit_ = options.metersPerUnit;\n }\n\n /**\n * @return {boolean} The projection is suitable for wrapping the x-axis\n */\n canWrapX() {\n return this.canWrapX_;\n }\n\n /**\n * Get the code for this projection, e.g. 'EPSG:4326'.\n * @return {string} Code.\n * @api\n */\n getCode() {\n return this.code_;\n }\n\n /**\n * Get the validity extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getExtent() {\n return this.extent_;\n }\n\n /**\n * Get the units of this projection.\n * @return {import(\"./Units.js\").Units} Units.\n * @api\n */\n getUnits() {\n return this.units_;\n }\n\n /**\n * Get the amount of meters per unit of this projection. If the projection is\n * not configured with `metersPerUnit` or a units identifier, the return is\n * `undefined`.\n * @return {number|undefined} Meters.\n * @api\n */\n getMetersPerUnit() {\n return this.metersPerUnit_ || METERS_PER_UNIT[this.units_];\n }\n\n /**\n * Get the world extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getWorldExtent() {\n return this.worldExtent_;\n }\n\n /**\n * Get the axis orientation of this projection.\n * Example values are:\n * enu - the default easting, northing, elevation.\n * neu - northing, easting, up - useful for \"lat/long\" geographic coordinates,\n * or south orientated transverse mercator.\n * wnu - westing, northing, up - some planetary coordinate systems have\n * \"west positive\" coordinate systems\n * @return {string} Axis orientation.\n * @api\n */\n getAxisOrientation() {\n return this.axisOrientation_;\n }\n\n /**\n * Is this projection a global projection which spans the whole world?\n * @return {boolean} Whether the projection is global.\n * @api\n */\n isGlobal() {\n return this.global_;\n }\n\n /**\n * Set if the projection is a global projection which spans the whole world\n * @param {boolean} global Whether the projection is global.\n * @api\n */\n setGlobal(global) {\n this.global_ = global;\n this.canWrapX_ = !!(global && this.extent_);\n }\n\n /**\n * @return {import(\"../tilegrid/TileGrid.js\").default} The default tile grid.\n */\n getDefaultTileGrid() {\n return this.defaultTileGrid_;\n }\n\n /**\n * @param {import(\"../tilegrid/TileGrid.js\").default} tileGrid The default tile grid.\n */\n setDefaultTileGrid(tileGrid) {\n this.defaultTileGrid_ = tileGrid;\n }\n\n /**\n * Set the validity extent for this projection.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n setExtent(extent) {\n this.extent_ = extent;\n this.canWrapX_ = !!(this.global_ && extent);\n }\n\n /**\n * Set the world extent for this projection.\n * @param {import(\"../extent.js\").Extent} worldExtent World extent\n * [minlon, minlat, maxlon, maxlat].\n * @api\n */\n setWorldExtent(worldExtent) {\n this.worldExtent_ = worldExtent;\n }\n\n /**\n * Set the getPointResolution function (see {@link module:ol/proj.getPointResolution}\n * for this projection.\n * @param {function(number, import(\"../coordinate.js\").Coordinate):number} func Function\n * @api\n */\n setGetPointResolution(func) {\n this.getPointResolutionFunc_ = func;\n }\n\n /**\n * Get the custom point resolution function for this projection (if set).\n * @return {function(number, import(\"../coordinate.js\").Coordinate):number|undefined} The custom point\n * resolution function (if set).\n */\n getPointResolutionFunc() {\n return this.getPointResolutionFunc_;\n }\n}\n\nexport default Projection;\n","/**\n * @module ol/proj/epsg3857\n */\nimport Projection from './Projection.js';\n\n/**\n * Radius of WGS84 sphere\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n/**\n * @const\n * @type {number}\n */\nexport const HALF_SIZE = Math.PI * RADIUS;\n\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const EXTENT = [-HALF_SIZE, -HALF_SIZE, HALF_SIZE, HALF_SIZE];\n\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const WORLD_EXTENT = [-180, -85, 180, 85];\n\n/**\n * Maximum safe value in y direction\n * @const\n * @type {number}\n */\nexport const MAX_SAFE_Y = RADIUS * Math.log(Math.tan(Math.PI / 2));\n\n/**\n * @classdesc\n * Projection object for web/spherical Mercator (EPSG:3857).\n */\nclass EPSG3857Projection extends Projection {\n /**\n * @param {string} code Code.\n */\n constructor(code) {\n super({\n code: code,\n units: 'm',\n extent: EXTENT,\n global: true,\n worldExtent: WORLD_EXTENT,\n getPointResolution: function (resolution, point) {\n return resolution / Math.cosh(point[1] / RADIUS);\n },\n });\n }\n}\n\n/**\n * Projections equal to EPSG:3857.\n *\n * @const\n * @type {Array}\n */\nexport const PROJECTIONS = [\n new EPSG3857Projection('EPSG:3857'),\n new EPSG3857Projection('EPSG:102100'),\n new EPSG3857Projection('EPSG:102113'),\n new EPSG3857Projection('EPSG:900913'),\n new EPSG3857Projection('http://www.opengis.net/def/crs/EPSG/0/3857'),\n new EPSG3857Projection('http://www.opengis.net/gml/srs/epsg.xml#3857'),\n];\n\n/**\n * Transformation from EPSG:4326 to EPSG:3857.\n *\n * @param {Array} input Input array of coordinate values.\n * @param {Array} [output] Output array of coordinate values.\n * @param {number} [dimension] Dimension (default is `2`).\n * @param {number} [stride] Stride (default is `dimension`).\n * @return {Array} Output array of coordinate values.\n */\nexport function fromEPSG4326(input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n stride = stride ?? dimension;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += stride) {\n output[i] = (HALF_SIZE * input[i]) / 180;\n let y = RADIUS * Math.log(Math.tan((Math.PI * (+input[i + 1] + 90)) / 360));\n if (y > MAX_SAFE_Y) {\n y = MAX_SAFE_Y;\n } else if (y < -MAX_SAFE_Y) {\n y = -MAX_SAFE_Y;\n }\n output[i + 1] = y;\n }\n return output;\n}\n\n/**\n * Transformation from EPSG:3857 to EPSG:4326.\n *\n * @param {Array} input Input array of coordinate values.\n * @param {Array} [output] Output array of coordinate values.\n * @param {number} [dimension] Dimension (default is `2`).\n * @param {number} [stride] Stride (default is `dimension`).\n * @return {Array} Output array of coordinate values.\n */\nexport function toEPSG4326(input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n stride = stride ?? dimension;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += stride) {\n output[i] = (180 * input[i]) / HALF_SIZE;\n output[i + 1] =\n (360 * Math.atan(Math.exp(input[i + 1] / RADIUS))) / Math.PI - 90;\n }\n return output;\n}\n","/**\n * @module ol/proj/epsg4326\n */\nimport Projection from './Projection.js';\n\n/**\n * Semi-major radius of the WGS84 ellipsoid.\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n/**\n * Extent of the EPSG:4326 projection which is the whole world.\n *\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const EXTENT = [-180, -90, 180, 90];\n\n/**\n * @const\n * @type {number}\n */\nexport const METERS_PER_UNIT = (Math.PI * RADIUS) / 180;\n\n/**\n * @classdesc\n * Projection object for WGS84 geographic coordinates (EPSG:4326).\n *\n * Note that OpenLayers does not strictly comply with the EPSG definition.\n * The EPSG registry defines 4326 as a CRS for Latitude,Longitude (y,x).\n * OpenLayers treats EPSG:4326 as a pseudo-projection, with x,y coordinates.\n */\nclass EPSG4326Projection extends Projection {\n /**\n * @param {string} code Code.\n * @param {string} [axisOrientation] Axis orientation.\n */\n constructor(code, axisOrientation) {\n super({\n code: code,\n units: 'degrees',\n extent: EXTENT,\n axisOrientation: axisOrientation,\n global: true,\n metersPerUnit: METERS_PER_UNIT,\n worldExtent: EXTENT,\n });\n }\n}\n\n/**\n * Projections equal to EPSG:4326.\n *\n * @const\n * @type {Array}\n */\nexport const PROJECTIONS = [\n new EPSG4326Projection('CRS:84'),\n new EPSG4326Projection('EPSG:4326', 'neu'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:1.3:CRS84'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:2:84'),\n new EPSG4326Projection('http://www.opengis.net/def/crs/OGC/1.3/CRS84'),\n new EPSG4326Projection('http://www.opengis.net/gml/srs/epsg.xml#4326', 'neu'),\n new EPSG4326Projection('http://www.opengis.net/def/crs/EPSG/0/4326', 'neu'),\n];\n","/**\n * @module ol/proj/projections\n */\n\n/**\n * @type {Object}\n */\nlet cache = {};\n\n/**\n * Clear the projections cache.\n */\nexport function clear() {\n cache = {};\n}\n\n/**\n * Get a cached projection by code.\n * @param {string} code The code for the projection.\n * @return {import(\"./Projection.js\").default|null} The projection (if cached).\n */\nexport function get(code) {\n return (\n cache[code] ||\n cache[code.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\\w+)$/, 'EPSG:$3')] ||\n null\n );\n}\n\n/**\n * Add a projection to the cache.\n * @param {string} code The projection code.\n * @param {import(\"./Projection.js\").default} projection The projection to cache.\n */\nexport function add(code, projection) {\n cache[code] = projection;\n}\n","/**\n * @module ol/proj/transforms\n */\nimport {isEmpty} from '../obj.js';\n\n/**\n * @private\n * @type {!Object>}\n */\nlet transforms = {};\n\n/**\n * Clear the transform cache.\n */\nexport function clear() {\n transforms = {};\n}\n\n/**\n * Registers a conversion function to convert coordinates from the source\n * projection to the destination projection.\n *\n * @param {import(\"./Projection.js\").default} source Source.\n * @param {import(\"./Projection.js\").default} destination Destination.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform.\n */\nexport function add(source, destination, transformFn) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n if (!(sourceCode in transforms)) {\n transforms[sourceCode] = {};\n }\n transforms[sourceCode][destinationCode] = transformFn;\n}\n\n/**\n * Unregisters the conversion function to convert coordinates from the source\n * projection to the destination projection. This method is used to clean up\n * cached transforms during testing.\n *\n * @param {import(\"./Projection.js\").default} source Source projection.\n * @param {import(\"./Projection.js\").default} destination Destination projection.\n * @return {import(\"../proj.js\").TransformFunction} transformFn The unregistered transform.\n */\nexport function remove(source, destination) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n const transform = transforms[sourceCode][destinationCode];\n delete transforms[sourceCode][destinationCode];\n if (isEmpty(transforms[sourceCode])) {\n delete transforms[sourceCode];\n }\n return transform;\n}\n\n/**\n * Get a transform given a source code and a destination code.\n * @param {string} sourceCode The code for the source projection.\n * @param {string} destinationCode The code for the destination projection.\n * @return {import(\"../proj.js\").TransformFunction|null} The transform function (if found).\n */\nexport function get(sourceCode, destinationCode) {\n if (sourceCode in transforms && destinationCode in transforms[sourceCode]) {\n return transforms[sourceCode][destinationCode];\n }\n return null;\n}\n","/**\n * @module ol/proj/utm\n */\n\n/**\n * Adapted from https://github.com/Turbo87/utm\n * Copyright (c) 2012-2017 Tobias Bieniek\n *\n * The functions here provide approximate transforms to and from UTM.\n * They are not appropriate for use beyond the validity extend of a UTM\n * zone, and the accuracy of the transform decreases toward the zone\n * edges.\n */\n\nimport Projection from './Projection.js';\nimport {toDegrees, toRadians, wrap} from '../math.js';\n\n/**\n * @typedef {Object} UTMZone\n * @property {number} number The zone number (1 - 60).\n * @property {boolean} north The northern hemisphere.\n */\n\nconst K0 = 0.9996;\n\nconst E = 0.00669438;\nconst E2 = E * E;\nconst E3 = E2 * E;\nconst E_P2 = E / (1 - E);\n\nconst SQRT_E = Math.sqrt(1 - E);\nconst _E = (1 - SQRT_E) / (1 + SQRT_E);\nconst _E2 = _E * _E;\nconst _E3 = _E2 * _E;\nconst _E4 = _E3 * _E;\nconst _E5 = _E4 * _E;\n\nconst M1 = 1 - E / 4 - (3 * E2) / 64 - (5 * E3) / 256;\nconst M2 = (3 * E) / 8 + (3 * E2) / 32 + (45 * E3) / 1024;\nconst M3 = (15 * E2) / 256 + (45 * E3) / 1024;\nconst M4 = (35 * E3) / 3072;\n\nconst P2 = (3 / 2) * _E - (27 / 32) * _E3 + (269 / 512) * _E5;\nconst P3 = (21 / 16) * _E2 - (55 / 32) * _E4;\nconst P4 = (151 / 96) * _E3 - (417 / 128) * _E5;\nconst P5 = (1097 / 512) * _E4;\n\nconst R = 6378137;\n\n/**\n * @param {number} easting Easting value of coordinate.\n * @param {number} northing Northing value of coordinate.\n * @param {UTMZone} zone The UTM zone.\n * @return {import(\"../coordinate.js\").Coordinate} The transformed coordinate.\n */\nfunction toLonLat(easting, northing, zone) {\n const x = easting - 500000;\n const y = zone.north ? northing : northing - 10000000;\n\n const m = y / K0;\n const mu = m / (R * M1);\n\n const pRad =\n mu +\n P2 * Math.sin(2 * mu) +\n P3 * Math.sin(4 * mu) +\n P4 * Math.sin(6 * mu) +\n P5 * Math.sin(8 * mu);\n\n const pSin = Math.sin(pRad);\n const pSin2 = pSin * pSin;\n\n const pCos = Math.cos(pRad);\n\n const pTan = pSin / pCos;\n const pTan2 = pTan * pTan;\n const pTan4 = pTan2 * pTan2;\n\n const epSin = 1 - E * pSin2;\n const epSinSqrt = Math.sqrt(1 - E * pSin2);\n\n const n = R / epSinSqrt;\n const r = (1 - E) / epSin;\n\n const c = E_P2 * pCos ** 2;\n const c2 = c * c;\n\n const d = x / (n * K0);\n const d2 = d * d;\n const d3 = d2 * d;\n const d4 = d3 * d;\n const d5 = d4 * d;\n const d6 = d5 * d;\n\n const latitude =\n pRad -\n (pTan / r) *\n (d2 / 2 - (d4 / 24) * (5 + 3 * pTan2 + 10 * c - 4 * c2 - 9 * E_P2)) +\n (d6 / 720) * (61 + 90 * pTan2 + 298 * c + 45 * pTan4 - 252 * E_P2 - 3 * c2);\n\n let longitude =\n (d -\n (d3 / 6) * (1 + 2 * pTan2 + c) +\n (d5 / 120) * (5 - 2 * c + 28 * pTan2 - 3 * c2 + 8 * E_P2 + 24 * pTan4)) /\n pCos;\n\n longitude = wrap(\n longitude + toRadians(zoneToCentralLongitude(zone.number)),\n -Math.PI,\n Math.PI,\n );\n\n return [toDegrees(longitude), toDegrees(latitude)];\n}\n\nconst MIN_LATITUDE = -80;\nconst MAX_LATITUDE = 84;\nconst MIN_LONGITUDE = -180;\nconst MAX_LONGITUDE = 180;\n\n/**\n * @param {number} longitude The longitude.\n * @param {number} latitude The latitude.\n * @param {UTMZone} zone The UTM zone.\n * @return {import('../coordinate.js').Coordinate} The UTM coordinate.\n */\nfunction fromLonLat(longitude, latitude, zone) {\n longitude = wrap(longitude, MIN_LONGITUDE, MAX_LONGITUDE);\n\n if (latitude < MIN_LATITUDE) {\n latitude = MIN_LATITUDE;\n } else if (latitude > MAX_LATITUDE) {\n latitude = MAX_LATITUDE;\n }\n\n const latRad = toRadians(latitude);\n const latSin = Math.sin(latRad);\n const latCos = Math.cos(latRad);\n\n const latTan = latSin / latCos;\n const latTan2 = latTan * latTan;\n const latTan4 = latTan2 * latTan2;\n\n const lonRad = toRadians(longitude);\n const centralLon = zoneToCentralLongitude(zone.number);\n const centralLonRad = toRadians(centralLon);\n\n const n = R / Math.sqrt(1 - E * latSin ** 2);\n const c = E_P2 * latCos ** 2;\n\n const a = latCos * wrap(lonRad - centralLonRad, -Math.PI, Math.PI);\n const a2 = a * a;\n const a3 = a2 * a;\n const a4 = a3 * a;\n const a5 = a4 * a;\n const a6 = a5 * a;\n\n const m =\n R *\n (M1 * latRad -\n M2 * Math.sin(2 * latRad) +\n M3 * Math.sin(4 * latRad) -\n M4 * Math.sin(6 * latRad));\n\n const easting =\n K0 *\n n *\n (a +\n (a3 / 6) * (1 - latTan2 + c) +\n (a5 / 120) * (5 - 18 * latTan2 + latTan4 + 72 * c - 58 * E_P2)) +\n 500000;\n\n let northing =\n K0 *\n (m +\n n *\n latTan *\n (a2 / 2 +\n (a4 / 24) * (5 - latTan2 + 9 * c + 4 * c ** 2) +\n (a6 / 720) * (61 - 58 * latTan2 + latTan4 + 600 * c - 330 * E_P2)));\n\n if (!zone.north) {\n northing += 10000000;\n }\n\n return [easting, northing];\n}\n\n/**\n * @param {number} zone The zone number.\n * @return {number} The central longitude in degrees.\n */\nfunction zoneToCentralLongitude(zone) {\n return (zone - 1) * 6 - 180 + 3;\n}\n\n/**\n * @type {Array}\n */\nconst epsgRegExes = [\n /^EPSG:(\\d+)$/,\n /^urn:ogc:def:crs:EPSG::(\\d+)$/,\n /^http:\\/\\/www\\.opengis\\.net\\/def\\/crs\\/EPSG\\/0\\/(\\d+)$/,\n];\n\n/**\n * @param {string} code The projection code.\n * @return {UTMZone|null} The UTM zone info (or null if not UTM).\n */\nexport function zoneFromCode(code) {\n let epsgId = 0;\n for (const re of epsgRegExes) {\n const match = code.match(re);\n if (match) {\n epsgId = parseInt(match[1]);\n break;\n }\n }\n if (!epsgId) {\n return null;\n }\n\n let number = 0;\n let north = false;\n if (epsgId > 32700 && epsgId < 32761) {\n number = epsgId - 32700;\n } else if (epsgId > 32600 && epsgId < 32661) {\n north = true;\n number = epsgId - 32600;\n }\n if (!number) {\n return null;\n }\n\n return {number, north};\n}\n\n/**\n * @param {function(number, number, UTMZone): import('../coordinate.js').Coordinate} transformer The transformer.\n * @param {UTMZone} zone The UTM zone.\n * @return {import('../proj.js').TransformFunction} The transform function.\n */\nfunction makeTransformFunction(transformer, zone) {\n return function (input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n stride = stride ?? dimension;\n if (!output) {\n if (dimension > 2) {\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += stride) {\n const x = input[i];\n const y = input[i + 1];\n const coord = transformer(x, y, zone);\n output[i] = coord[0];\n output[i + 1] = coord[1];\n }\n return output;\n };\n}\n\n/**\n * @param {string} code The projection code.\n * @return {import('./Projection.js').default|null} A projection or null if unable to create one.\n */\nexport function makeProjection(code) {\n const zone = zoneFromCode(code);\n if (!zone) {\n return null;\n }\n return new Projection({code, units: 'm'});\n}\n\n/**\n * @param {import('./Projection.js').default} projection The projection.\n * @return {import('../proj.js').Transforms|null} The transforms lookup or null if unable to handle projection.\n */\nexport function makeTransforms(projection) {\n const zone = zoneFromCode(projection.getCode());\n if (!zone) {\n return null;\n }\n\n return {\n forward: makeTransformFunction(fromLonLat, zone),\n inverse: makeTransformFunction(toLonLat, zone),\n };\n}\n","/**\n * @module ol/proj\n */\n\n/**\n * The ol/proj module stores:\n * * a list of {@link module:ol/proj/Projection~Projection}\n * objects, one for each projection supported by the application\n * * a list of transform functions needed to convert coordinates in one projection\n * into another.\n *\n * The static functions are the methods used to maintain these.\n * Each transform function can handle not only simple coordinate pairs, but also\n * large arrays of coordinates such as vector geometries.\n *\n * When loaded, the library adds projection objects for EPSG:4326 (WGS84\n * geographic coordinates) and EPSG:3857 (Web or Spherical Mercator, as used\n * for example by Bing Maps or OpenStreetMap), together with the relevant\n * transform functions.\n *\n * Additional transforms may be added by using the http://proj4js.org/\n * library (version 2.2 or later). You can use the full build supplied by\n * Proj4js, or create a custom build to support those projections you need; see\n * the Proj4js website for how to do this. You also need the Proj4js definitions\n * for the required projections. These definitions can be obtained from\n * https://epsg.io/, and are a JS function, so can be loaded in a script\n * tag (as in the examples) or pasted into your application.\n *\n * After all required projection definitions are added to proj4's registry (by\n * using `proj4.defs()`), simply call `register(proj4)` from the `ol/proj/proj4`\n * package. Existing transforms are not changed by this function. See\n * examples/wms-image-custom-proj for an example of this.\n *\n * Additional projection definitions can be registered with `proj4.defs()` any\n * time. Just make sure to call `register(proj4)` again; for example, with user-supplied data where you don't\n * know in advance what projections are needed, you can initially load minimal\n * support and then load whichever are requested.\n *\n * Note that Proj4js does not support projection extents. If you want to add\n * one for creating default tile grids, you can add it after the Projection\n * object has been created with `setExtent`, for example,\n * `get('EPSG:1234').setExtent(extent)`.\n *\n * In addition to Proj4js support, any transform functions can be added with\n * {@link module:ol/proj.addCoordinateTransforms}. To use this, you must first create\n * a {@link module:ol/proj/Projection~Projection} object for the new projection and add it with\n * {@link module:ol/proj.addProjection}. You can then add the forward and inverse\n * functions with {@link module:ol/proj.addCoordinateTransforms}. See\n * examples/wms-custom-proj for an example of this.\n *\n * Note that if no transforms are needed and you only need to define the\n * projection, just add a {@link module:ol/proj/Projection~Projection} with\n * {@link module:ol/proj.addProjection}. See examples/wms-no-proj for an example of\n * this.\n */\nimport Projection from './proj/Projection.js';\nimport {\n PROJECTIONS as EPSG3857_PROJECTIONS,\n fromEPSG4326,\n toEPSG4326,\n} from './proj/epsg3857.js';\nimport {PROJECTIONS as EPSG4326_PROJECTIONS} from './proj/epsg4326.js';\nimport {METERS_PER_UNIT} from './proj/Units.js';\nimport {\n add as addProj,\n clear as clearProj,\n get as getProj,\n} from './proj/projections.js';\nimport {\n add as addTransformFunc,\n clear as clearTransformFuncs,\n get as getTransformFunc,\n} from './proj/transforms.js';\nimport {applyTransform, getWidth} from './extent.js';\nimport {clamp, modulo} from './math.js';\nimport {equals, getWorldsAway} from './coordinate.js';\nimport {getDistance} from './sphere.js';\nimport {\n makeProjection as makeUTMProjection,\n makeTransforms as makeUTMTransforms,\n} from './proj/utm.js';\nimport {warn} from './console.js';\n\n/**\n * A projection as {@link module:ol/proj/Projection~Projection}, SRS identifier\n * string or undefined.\n * @typedef {Projection|string|undefined} ProjectionLike\n * @api\n */\n\n/**\n * @typedef {Object} Transforms\n * @property {TransformFunction} forward The forward transform (from geographic).\n * @property {TransformFunction} inverse The inverse transform (to geographic).\n */\n\n/**\n * @type {Array}\n */\nconst transformFactories = [makeUTMTransforms];\n\n/**\n * @type {Array}\n */\nconst projectionFactories = [makeUTMProjection];\n\n/**\n * A transform function accepts an array of input coordinate values, an optional\n * output array, and an optional dimension (default should be 2). The function\n * transforms the input coordinate values, populates the output array, and\n * returns the output array.\n *\n * @callback TransformFunction\n * @param {Array} input\n * @param {Array} [output]\n * @param {number} [dimension]\n * @param {number} [stride]\n * @return {Array}\n *\n * @api\n */\n\nexport {METERS_PER_UNIT};\n\nexport {Projection};\n\nlet showCoordinateWarning = true;\n\n/**\n * @param {boolean} [disable = true] Disable console info about `useGeographic()`\n */\nexport function disableCoordinateWarning(disable) {\n const hide = disable === undefined ? true : disable;\n showCoordinateWarning = !hide;\n}\n\n/**\n * @param {Array} input Input coordinate array.\n * @param {Array} [output] Output array of coordinate values.\n * @return {Array} Output coordinate array (new array, same coordinate\n * values).\n */\nexport function cloneTransform(input, output) {\n if (output !== undefined) {\n for (let i = 0, ii = input.length; i < ii; ++i) {\n output[i] = input[i];\n }\n output = output;\n } else {\n output = input.slice();\n }\n return output;\n}\n\n/**\n * @param {Array} input Input coordinate array.\n * @param {Array} [output] Output array of coordinate values.\n * @return {Array} Input coordinate array (same array as input).\n */\nexport function identityTransform(input, output) {\n if (output !== undefined && input !== output) {\n for (let i = 0, ii = input.length; i < ii; ++i) {\n output[i] = input[i];\n }\n input = output;\n }\n return input;\n}\n\n/**\n * Add a Projection object to the list of supported projections that can be\n * looked up by their code.\n *\n * @param {Projection} projection Projection instance.\n * @api\n */\nexport function addProjection(projection) {\n addProj(projection.getCode(), projection);\n addTransformFunc(projection, projection, cloneTransform);\n}\n\n/**\n * @param {Array} projections Projections.\n */\nexport function addProjections(projections) {\n projections.forEach(addProjection);\n}\n\n/**\n * Fetches a Projection object for the code specified.\n *\n * @param {ProjectionLike} projectionLike Either a code string which is\n * a combination of authority and identifier such as \"EPSG:4326\", or an\n * existing projection object, or undefined.\n * @return {Projection|null} Projection object, or null if not in list.\n * @api\n */\nexport function get(projectionLike) {\n if (!(typeof projectionLike === 'string')) {\n return projectionLike;\n }\n const projection = getProj(projectionLike);\n if (projection) {\n return projection;\n }\n for (const makeProjection of projectionFactories) {\n const projection = makeProjection(projectionLike);\n if (projection) {\n return projection;\n }\n }\n return null;\n}\n\n/**\n * Get the resolution of the point in degrees or distance units.\n * For projections with degrees as the unit this will simply return the\n * provided resolution. For other projections the point resolution is\n * by default estimated by transforming the `point` pixel to EPSG:4326,\n * measuring its width and height on the normal sphere,\n * and taking the average of the width and height.\n * A custom function can be provided for a specific projection, either\n * by setting the `getPointResolution` option in the\n * {@link module:ol/proj/Projection~Projection} constructor or by using\n * {@link module:ol/proj/Projection~Projection#setGetPointResolution} to change an existing\n * projection object.\n * @param {ProjectionLike} projection The projection.\n * @param {number} resolution Nominal resolution in projection units.\n * @param {import(\"./coordinate.js\").Coordinate} point Point to find adjusted resolution at.\n * @param {import(\"./proj/Units.js\").Units} [units] Units to get the point resolution in.\n * Default is the projection's units.\n * @return {number} Point resolution.\n * @api\n */\nexport function getPointResolution(projection, resolution, point, units) {\n projection = get(projection);\n let pointResolution;\n const getter = projection.getPointResolutionFunc();\n if (getter) {\n pointResolution = getter(resolution, point);\n if (units && units !== projection.getUnits()) {\n const metersPerUnit = projection.getMetersPerUnit();\n if (metersPerUnit) {\n pointResolution =\n (pointResolution * metersPerUnit) / METERS_PER_UNIT[units];\n }\n }\n } else {\n const projUnits = projection.getUnits();\n if ((projUnits == 'degrees' && !units) || units == 'degrees') {\n pointResolution = resolution;\n } else {\n // Estimate point resolution by transforming the center pixel to EPSG:4326,\n // measuring its width and height on the normal sphere, and taking the\n // average of the width and height.\n const toEPSG4326 = getTransformFromProjections(\n projection,\n get('EPSG:4326'),\n );\n if (!toEPSG4326 && projUnits !== 'degrees') {\n // no transform is available\n pointResolution = resolution * projection.getMetersPerUnit();\n } else {\n let vertices = [\n point[0] - resolution / 2,\n point[1],\n point[0] + resolution / 2,\n point[1],\n point[0],\n point[1] - resolution / 2,\n point[0],\n point[1] + resolution / 2,\n ];\n vertices = toEPSG4326(vertices, vertices, 2);\n const width = getDistance(vertices.slice(0, 2), vertices.slice(2, 4));\n const height = getDistance(vertices.slice(4, 6), vertices.slice(6, 8));\n pointResolution = (width + height) / 2;\n }\n const metersPerUnit = units\n ? METERS_PER_UNIT[units]\n : projection.getMetersPerUnit();\n if (metersPerUnit !== undefined) {\n pointResolution /= metersPerUnit;\n }\n }\n }\n return pointResolution;\n}\n\n/**\n * Registers transformation functions that don't alter coordinates. Those allow\n * to transform between projections with equal meaning.\n *\n * @param {Array} projections Projections.\n * @api\n */\nexport function addEquivalentProjections(projections) {\n addProjections(projections);\n projections.forEach(function (source) {\n projections.forEach(function (destination) {\n if (source !== destination) {\n addTransformFunc(source, destination, cloneTransform);\n }\n });\n });\n}\n\n/**\n * Registers transformation functions to convert coordinates in any projection\n * in projection1 to any projection in projection2.\n *\n * @param {Array} projections1 Projections with equal\n * meaning.\n * @param {Array} projections2 Projections with equal\n * meaning.\n * @param {TransformFunction} forwardTransform Transformation from any\n * projection in projection1 to any projection in projection2.\n * @param {TransformFunction} inverseTransform Transform from any projection\n * in projection2 to any projection in projection1..\n */\nexport function addEquivalentTransforms(\n projections1,\n projections2,\n forwardTransform,\n inverseTransform,\n) {\n projections1.forEach(function (projection1) {\n projections2.forEach(function (projection2) {\n addTransformFunc(projection1, projection2, forwardTransform);\n addTransformFunc(projection2, projection1, inverseTransform);\n });\n });\n}\n\n/**\n * Clear all cached projections and transforms.\n */\nexport function clearAllProjections() {\n clearProj();\n clearTransformFuncs();\n}\n\n/**\n * @param {Projection|string|undefined} projection Projection.\n * @param {string} defaultCode Default code.\n * @return {Projection} Projection.\n */\nexport function createProjection(projection, defaultCode) {\n if (!projection) {\n return get(defaultCode);\n }\n if (typeof projection === 'string') {\n return get(projection);\n }\n return /** @type {Projection} */ (projection);\n}\n\n/**\n * Creates a {@link module:ol/proj~TransformFunction} from a simple 2D coordinate transform\n * function.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} coordTransform Coordinate\n * transform.\n * @return {TransformFunction} Transform function.\n */\nexport function createTransformFromCoordinateTransform(coordTransform) {\n return (\n /**\n * @param {Array} input Input.\n * @param {Array} [output] Output.\n * @param {number} [dimension] Dimensions that should be transformed.\n * @param {number} [stride] Stride.\n * @return {Array} Output.\n */\n function (input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension !== undefined ? dimension : 2;\n stride = stride ?? dimension;\n output = output !== undefined ? output : new Array(length);\n for (let i = 0; i < length; i += stride) {\n const point = coordTransform(input.slice(i, i + dimension));\n const pointLength = point.length;\n for (let j = 0, jj = stride; j < jj; ++j) {\n output[i + j] = j >= pointLength ? input[i + j] : point[j];\n }\n }\n return output;\n }\n );\n}\n\n/**\n * Registers coordinate transform functions to convert coordinates between the\n * source projection and the destination projection.\n * The forward and inverse functions convert coordinate pairs; this function\n * converts these into the functions used internally which also handle\n * extents and coordinate arrays.\n *\n * @param {ProjectionLike} source Source projection.\n * @param {ProjectionLike} destination Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} forward The forward transform\n * function (that is, from the source projection to the destination\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} inverse The inverse transform\n * function (that is, from the destination projection to the source\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}. If the transform function can only\n * transform less dimensions than the input coordinate, it is supposeed to return a coordinate\n * with only the length it can transform. The other dimensions will be taken unchanged from the\n * source.\n * @api\n */\nexport function addCoordinateTransforms(source, destination, forward, inverse) {\n const sourceProj = get(source);\n const destProj = get(destination);\n addTransformFunc(\n sourceProj,\n destProj,\n createTransformFromCoordinateTransform(forward),\n );\n addTransformFunc(\n destProj,\n sourceProj,\n createTransformFromCoordinateTransform(inverse),\n );\n}\n\n/**\n * Transforms a coordinate from longitude/latitude to a different projection.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate as longitude and latitude, i.e.\n * an array with longitude as 1st and latitude as 2nd element.\n * @param {ProjectionLike} [projection] Target projection. The\n * default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate projected to the target projection.\n * @api\n */\nexport function fromLonLat(coordinate, projection) {\n disableCoordinateWarning();\n return transform(\n coordinate,\n 'EPSG:4326',\n projection !== undefined ? projection : 'EPSG:3857',\n );\n}\n\n/**\n * Transforms a coordinate to longitude/latitude.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Projected coordinate.\n * @param {ProjectionLike} [projection] Projection of the coordinate.\n * The default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate as longitude and latitude, i.e. an array\n * with longitude as 1st and latitude as 2nd element.\n * @api\n */\nexport function toLonLat(coordinate, projection) {\n const lonLat = transform(\n coordinate,\n projection !== undefined ? projection : 'EPSG:3857',\n 'EPSG:4326',\n );\n const lon = lonLat[0];\n if (lon < -180 || lon > 180) {\n lonLat[0] = modulo(lon + 180, 360) - 180;\n }\n return lonLat;\n}\n\n/**\n * Checks if two projections are the same, that is every coordinate in one\n * projection does represent the same geographic point as the same coordinate in\n * the other projection.\n *\n * @param {Projection} projection1 Projection 1.\n * @param {Projection} projection2 Projection 2.\n * @return {boolean} Equivalent.\n * @api\n */\nexport function equivalent(projection1, projection2) {\n if (projection1 === projection2) {\n return true;\n }\n const equalUnits = projection1.getUnits() === projection2.getUnits();\n if (projection1.getCode() === projection2.getCode()) {\n return equalUnits;\n }\n const transformFunc = getTransformFromProjections(projection1, projection2);\n return transformFunc === cloneTransform && equalUnits;\n}\n\n/**\n * Searches in the list of transform functions for the function for converting\n * coordinates from the source projection to the destination projection.\n *\n * @param {Projection} source Source Projection object.\n * @param {Projection} destination Destination Projection\n * object.\n * @return {TransformFunction|null} Transform function.\n */\nexport function getTransformFromProjections(source, destination) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n let transformFunc = getTransformFunc(sourceCode, destinationCode);\n if (transformFunc) {\n return transformFunc;\n }\n\n /**\n * @type {Transforms|null}\n */\n let sourceTransforms = null;\n\n /**\n * @type {Transforms|null}\n */\n let destinationTransforms = null;\n\n // lazily add projections if we have supported transforms\n for (const makeTransforms of transformFactories) {\n if (!sourceTransforms) {\n sourceTransforms = makeTransforms(source);\n }\n if (!destinationTransforms) {\n destinationTransforms = makeTransforms(destination);\n }\n }\n\n if (!sourceTransforms && !destinationTransforms) {\n return null;\n }\n\n const intermediateCode = 'EPSG:4326';\n if (!destinationTransforms) {\n const toDestination = getTransformFunc(intermediateCode, destinationCode);\n if (toDestination) {\n transformFunc = composeTransformFuncs(\n sourceTransforms.inverse,\n toDestination,\n );\n }\n } else if (!sourceTransforms) {\n const fromSource = getTransformFunc(sourceCode, intermediateCode);\n if (fromSource) {\n transformFunc = composeTransformFuncs(\n fromSource,\n destinationTransforms.forward,\n );\n }\n } else {\n transformFunc = composeTransformFuncs(\n sourceTransforms.inverse,\n destinationTransforms.forward,\n );\n }\n\n if (transformFunc) {\n addProjection(source);\n addProjection(destination);\n addTransformFunc(source, destination, transformFunc);\n }\n\n return transformFunc;\n}\n\n/**\n * @param {TransformFunction} t1 The first transform function.\n * @param {TransformFunction} t2 The second transform function.\n * @return {TransformFunction} The composed transform function.\n */\nfunction composeTransformFuncs(t1, t2) {\n return function (input, output, dimensions, stride) {\n output = t1(input, output, dimensions, stride);\n return t2(output, output, dimensions, stride);\n };\n}\n\n/**\n * Given the projection-like objects, searches for a transformation\n * function to convert a coordinates array from the source projection to the\n * destination projection.\n *\n * @param {ProjectionLike} source Source.\n * @param {ProjectionLike} destination Destination.\n * @return {TransformFunction} Transform function.\n * @api\n */\nexport function getTransform(source, destination) {\n const sourceProjection = get(source);\n const destinationProjection = get(destination);\n return getTransformFromProjections(sourceProjection, destinationProjection);\n}\n\n/**\n * Transforms a coordinate from source projection to destination projection.\n * This returns a new coordinate (and does not modify the original). If there\n * is no available transform between the two projection, the function will throw\n * an error.\n *\n * See {@link module:ol/proj.transformExtent} for extent transformation.\n * See the transform method of {@link module:ol/geom/Geometry~Geometry} and its\n * subclasses for geometry transforms.\n *\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\nexport function transform(coordinate, source, destination) {\n const transformFunc = getTransform(source, destination);\n if (!transformFunc) {\n const sourceCode = get(source).getCode();\n const destinationCode = get(destination).getCode();\n throw new Error(\n `No transform available between ${sourceCode} and ${destinationCode}`,\n );\n }\n return transformFunc(coordinate, undefined, coordinate.length);\n}\n\n/**\n * Transforms an extent from source projection to destination projection. This\n * returns a new extent (and does not modify the original).\n *\n * @param {import(\"./extent.js\").Extent} extent The extent to transform.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @param {number} [stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {import(\"./extent.js\").Extent} The transformed extent.\n * @api\n */\nexport function transformExtent(extent, source, destination, stops) {\n const transformFunc = getTransform(source, destination);\n return applyTransform(extent, transformFunc, undefined, stops);\n}\n\n/**\n * Transforms the given point to the destination projection.\n *\n * @param {import(\"./coordinate.js\").Coordinate} point Point.\n * @param {Projection} sourceProjection Source projection.\n * @param {Projection} destinationProjection Destination projection.\n * @return {import(\"./coordinate.js\").Coordinate} Point.\n */\nexport function transformWithProjections(\n point,\n sourceProjection,\n destinationProjection,\n) {\n const transformFunc = getTransformFromProjections(\n sourceProjection,\n destinationProjection,\n );\n return transformFunc(point);\n}\n\n/**\n * @type {Projection|null}\n */\nlet userProjection = null;\n\n/**\n * Set the projection for coordinates supplied from and returned by API methods.\n * This includes all API methods except for those interacting with tile grids,\n * plus {@link import(\"./Map.js\").FrameState} and {@link import(\"./View.js\").State}.\n * @param {ProjectionLike} projection The user projection.\n * @api\n */\nexport function setUserProjection(projection) {\n userProjection = get(projection);\n}\n\n/**\n * Clear the user projection if set.\n * @api\n */\nexport function clearUserProjection() {\n userProjection = null;\n}\n\n/**\n * Get the projection for coordinates supplied from and returned by API methods.\n * @return {Projection|null} The user projection (or null if not set).\n * @api\n */\nexport function getUserProjection() {\n return userProjection;\n}\n\n/**\n * Use geographic coordinates (WGS-84 datum) in API methods.\n * This includes all API methods except for those interacting with tile grids,\n * plus {@link import(\"./Map.js\").FrameState} and {@link import(\"./View.js\").State}.\n * @api\n */\nexport function useGeographic() {\n setUserProjection('EPSG:4326');\n}\n\n/**\n * Return a coordinate transformed into the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array} coordinate Input coordinate.\n * @param {ProjectionLike} sourceProjection The input coordinate projection.\n * @return {Array} The input coordinate in the user projection.\n */\nexport function toUserCoordinate(coordinate, sourceProjection) {\n if (!userProjection) {\n return coordinate;\n }\n return transform(coordinate, sourceProjection, userProjection);\n}\n\n/**\n * Return a coordinate transformed from the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array} coordinate Input coordinate.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {Array} The input coordinate transformed.\n */\nexport function fromUserCoordinate(coordinate, destProjection) {\n if (!userProjection) {\n if (\n showCoordinateWarning &&\n !equals(coordinate, [0, 0]) &&\n coordinate[0] >= -180 &&\n coordinate[0] <= 180 &&\n coordinate[1] >= -90 &&\n coordinate[1] <= 90\n ) {\n showCoordinateWarning = false;\n warn(\n 'Call useGeographic() from ol/proj once to work with [longitude, latitude] coordinates.',\n );\n }\n return coordinate;\n }\n return transform(coordinate, userProjection, destProjection);\n}\n\n/**\n * Return an extent transformed into the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} sourceProjection The input extent projection.\n * @return {import(\"./extent.js\").Extent} The input extent in the user projection.\n */\nexport function toUserExtent(extent, sourceProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, sourceProjection, userProjection);\n}\n\n/**\n * Return an extent transformed from the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {import(\"./extent.js\").Extent} The input extent transformed.\n */\nexport function fromUserExtent(extent, destProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, userProjection, destProjection);\n}\n\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in input projection units per pixel.\n * @param {ProjectionLike} sourceProjection The input projection.\n * @return {number} Resolution in user projection units per pixel.\n */\nexport function toUserResolution(resolution, sourceProjection) {\n if (!userProjection) {\n return resolution;\n }\n const sourceMetersPerUnit = get(sourceProjection).getMetersPerUnit();\n const userMetersPerUnit = userProjection.getMetersPerUnit();\n return sourceMetersPerUnit && userMetersPerUnit\n ? (resolution * sourceMetersPerUnit) / userMetersPerUnit\n : resolution;\n}\n\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in user projection units per pixel.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {number} Resolution in destination projection units per pixel.\n */\nexport function fromUserResolution(resolution, destProjection) {\n if (!userProjection) {\n return resolution;\n }\n const destMetersPerUnit = get(destProjection).getMetersPerUnit();\n const userMetersPerUnit = userProjection.getMetersPerUnit();\n return destMetersPerUnit && userMetersPerUnit\n ? (resolution * userMetersPerUnit) / destMetersPerUnit\n : resolution;\n}\n\n/**\n * Creates a safe coordinate transform function from a coordinate transform function.\n * \"Safe\" means that it can handle wrapping of x-coordinates for global projections,\n * and that coordinates exceeding the source projection validity extent's range will be\n * clamped to the validity range.\n * @param {Projection} sourceProj Source projection.\n * @param {Projection} destProj Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} transform Transform function (source to destination).\n * @return {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} Safe transform function (source to destination).\n */\nexport function createSafeCoordinateTransform(sourceProj, destProj, transform) {\n return function (coord) {\n let transformed, worldsAway;\n if (sourceProj.canWrapX()) {\n const sourceExtent = sourceProj.getExtent();\n const sourceExtentWidth = getWidth(sourceExtent);\n coord = coord.slice(0);\n worldsAway = getWorldsAway(coord, sourceProj, sourceExtentWidth);\n if (worldsAway) {\n // Move x to the real world\n coord[0] = coord[0] - worldsAway * sourceExtentWidth;\n }\n coord[0] = clamp(coord[0], sourceExtent[0], sourceExtent[2]);\n coord[1] = clamp(coord[1], sourceExtent[1], sourceExtent[3]);\n transformed = transform(coord);\n } else {\n transformed = transform(coord);\n }\n if (worldsAway && destProj.canWrapX()) {\n // Move transformed coordinate back to the offset world\n transformed[0] += worldsAway * getWidth(destProj.getExtent());\n }\n return transformed;\n };\n}\n\n/**\n * Add transforms to and from EPSG:4326 and EPSG:3857. This function is called\n * by when this module is executed and should only need to be called again after\n * `clearAllProjections()` is called (e.g. in tests).\n */\nexport function addCommon() {\n // Add transformations that don't alter coordinates to convert within set of\n // projections with equal meaning.\n addEquivalentProjections(EPSG3857_PROJECTIONS);\n addEquivalentProjections(EPSG4326_PROJECTIONS);\n // Add transformations to convert EPSG:4326 like coordinates to EPSG:3857 like\n // coordinates and back.\n addEquivalentTransforms(\n EPSG4326_PROJECTIONS,\n EPSG3857_PROJECTIONS,\n fromEPSG4326,\n toEPSG4326,\n );\n}\n\naddCommon();\n","/**\n * @module ol/geom/flat/orient\n */\nimport {coordinates as reverseCoordinates} from './reverse.js';\n\n/**\n * Is the linear ring oriented clockwise in a coordinate system with a bottom-left\n * coordinate origin? For a coordinate system with a top-left coordinate origin,\n * the ring's orientation is clockwise when this function returns false.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {boolean|undefined} Is clockwise.\n */\nexport function linearRingIsClockwise(flatCoordinates, offset, end, stride) {\n // https://stackoverflow.com/q/1165647/clockwise-method#1165943\n // https://github.com/OSGeo/gdal/blob/master/gdal/ogr/ogrlinearring.cpp\n let edge = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n edge += (x2 - x1) * (y2 + y1);\n x1 = x2;\n y1 = y2;\n }\n return edge === 0 ? undefined : edge > 0;\n}\n\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingsAreOriented(\n flatCoordinates,\n offset,\n ends,\n stride,\n right,\n) {\n right = right !== undefined ? right : false;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const isClockwise = linearRingIsClockwise(\n flatCoordinates,\n offset,\n end,\n stride,\n );\n if (i === 0) {\n if ((right && isClockwise) || (!right && !isClockwise)) {\n return false;\n }\n } else {\n if ((right && !isClockwise) || (!right && isClockwise)) {\n return false;\n }\n }\n offset = end;\n }\n return true;\n}\n\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingssAreOriented(\n flatCoordinates,\n offset,\n endss,\n stride,\n right,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (!linearRingsAreOriented(flatCoordinates, offset, ends, stride, right)) {\n return false;\n }\n if (ends.length) {\n offset = ends[ends.length - 1];\n }\n }\n return true;\n}\n\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {boolean} [right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRings(\n flatCoordinates,\n offset,\n ends,\n stride,\n right,\n) {\n right = right !== undefined ? right : false;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const isClockwise = linearRingIsClockwise(\n flatCoordinates,\n offset,\n end,\n stride,\n );\n const reverse =\n i === 0\n ? (right && isClockwise) || (!right && !isClockwise)\n : (right && !isClockwise) || (!right && isClockwise);\n if (reverse) {\n reverseCoordinates(flatCoordinates, offset, end, stride);\n }\n offset = end;\n }\n return offset;\n}\n\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRingsArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n right,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n offset = orientLinearRings(\n flatCoordinates,\n offset,\n endss[i],\n stride,\n right,\n );\n }\n return offset;\n}\n\n/**\n * Return a two-dimensional endss\n * @param {Array} flatCoordinates Flat coordinates\n * @param {Array} ends Linear ring end indexes\n * @return {Array>} Two dimensional endss array that can\n * be used to construct a MultiPolygon\n */\nexport function inflateEnds(flatCoordinates, ends) {\n const endss = [];\n let offset = 0;\n let prevEndIndex = 0;\n let startOrientation;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n // classifies an array of rings into polygons with outer rings and holes\n const orientation = linearRingIsClockwise(flatCoordinates, offset, end, 2);\n if (startOrientation === undefined) {\n startOrientation = orientation;\n }\n if (orientation === startOrientation) {\n endss.push(ends.slice(prevEndIndex, i + 1));\n } else {\n if (endss.length === 0) {\n continue;\n }\n endss[endss.length - 1].push(ends[prevEndIndex]);\n }\n prevEndIndex = i + 1;\n offset = end;\n }\n return endss;\n}\n","/**\n * @module ol/geom/flat/interpolate\n */\nimport {binarySearch} from '../../array.js';\nimport {lerp} from '../../math.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} fraction Fraction.\n * @param {Array} [dest] Destination.\n * @param {number} [dimension] Destination dimension (default is `2`)\n * @return {Array} Destination.\n */\nexport function interpolatePoint(\n flatCoordinates,\n offset,\n end,\n stride,\n fraction,\n dest,\n dimension,\n) {\n let o, t;\n const n = (end - offset) / stride;\n if (n === 1) {\n o = offset;\n } else if (n === 2) {\n o = offset;\n t = fraction;\n } else if (n !== 0) {\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n let length = 0;\n const cumulativeLengths = [0];\n for (let i = offset + stride; i < end; i += stride) {\n const x2 = flatCoordinates[i];\n const y2 = flatCoordinates[i + 1];\n length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n cumulativeLengths.push(length);\n x1 = x2;\n y1 = y2;\n }\n const target = fraction * length;\n const index = binarySearch(cumulativeLengths, target);\n if (index < 0) {\n t =\n (target - cumulativeLengths[-index - 2]) /\n (cumulativeLengths[-index - 1] - cumulativeLengths[-index - 2]);\n o = offset + (-index - 2) * stride;\n } else {\n o = offset + index * stride;\n }\n }\n dimension = dimension > 1 ? dimension : 2;\n dest = dest ? dest : new Array(dimension);\n for (let i = 0; i < dimension; ++i) {\n dest[i] =\n o === undefined\n ? NaN\n : t === undefined\n ? flatCoordinates[o + i]\n : lerp(flatCoordinates[o + i], flatCoordinates[o + stride + i], t);\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} m M.\n * @param {boolean} extrapolate Extrapolate.\n * @return {import(\"../../coordinate.js\").Coordinate|null} Coordinate.\n */\nexport function lineStringCoordinateAtM(\n flatCoordinates,\n offset,\n end,\n stride,\n m,\n extrapolate,\n) {\n if (end == offset) {\n return null;\n }\n let coordinate;\n if (m < flatCoordinates[offset + stride - 1]) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(offset, offset + stride);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n return null;\n }\n if (flatCoordinates[end - 1] < m) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(end - stride, end);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n return null;\n }\n // FIXME use O(1) search\n if (m == flatCoordinates[offset + stride - 1]) {\n return flatCoordinates.slice(offset, offset + stride);\n }\n let lo = offset / stride;\n let hi = end / stride;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (m < flatCoordinates[(mid + 1) * stride - 1]) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n const m0 = flatCoordinates[lo * stride - 1];\n if (m == m0) {\n return flatCoordinates.slice((lo - 1) * stride, (lo - 1) * stride + stride);\n }\n const m1 = flatCoordinates[(lo + 1) * stride - 1];\n const t = (m - m0) / (m1 - m0);\n coordinate = [];\n for (let i = 0; i < stride - 1; ++i) {\n coordinate.push(\n lerp(\n flatCoordinates[(lo - 1) * stride + i],\n flatCoordinates[lo * stride + i],\n t,\n ),\n );\n }\n coordinate.push(m);\n return coordinate;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} m M.\n * @param {boolean} extrapolate Extrapolate.\n * @param {boolean} interpolate Interpolate.\n * @return {import(\"../../coordinate.js\").Coordinate|null} Coordinate.\n */\nexport function lineStringsCoordinateAtM(\n flatCoordinates,\n offset,\n ends,\n stride,\n m,\n extrapolate,\n interpolate,\n) {\n if (interpolate) {\n return lineStringCoordinateAtM(\n flatCoordinates,\n offset,\n ends[ends.length - 1],\n stride,\n m,\n extrapolate,\n );\n }\n let coordinate;\n if (m < flatCoordinates[stride - 1]) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(0, stride);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n return null;\n }\n if (flatCoordinates[flatCoordinates.length - 1] < m) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(flatCoordinates.length - stride);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n return null;\n }\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n if (offset == end) {\n continue;\n }\n if (m < flatCoordinates[offset + stride - 1]) {\n return null;\n }\n if (m <= flatCoordinates[end - 1]) {\n return lineStringCoordinateAtM(\n flatCoordinates,\n offset,\n end,\n stride,\n m,\n false,\n );\n }\n offset = end;\n }\n return null;\n}\n","/**\n * @module ol/render/Feature\n */\nimport Feature from '../Feature.js';\nimport {\n LineString,\n MultiLineString,\n MultiPoint,\n MultiPolygon,\n Point,\n Polygon,\n} from '../geom.js';\nimport {\n compose as composeTransform,\n create as createTransform,\n} from '../transform.js';\nimport {\n createOrUpdateFromCoordinate,\n createOrUpdateFromFlatCoordinates,\n getCenter,\n getHeight,\n} from '../extent.js';\nimport {\n douglasPeucker,\n douglasPeuckerArray,\n quantizeArray,\n} from '../geom/flat/simplify.js';\nimport {extend} from '../array.js';\nimport {\n getInteriorPointOfArray,\n getInteriorPointsOfMultiArray,\n} from '../geom/flat/interiorpoint.js';\nimport {get as getProjection} from '../proj.js';\nimport {inflateEnds} from '../geom/flat/orient.js';\nimport {interpolatePoint} from '../geom/flat/interpolate.js';\nimport {linearRingss as linearRingssCenter} from '../geom/flat/center.js';\nimport {memoizeOne} from '../functions.js';\nimport {transform2D} from '../geom/flat/transform.js';\n\n/**\n * @typedef {'Point' | 'LineString' | 'LinearRing' | 'Polygon' | 'MultiPoint' | 'MultiLineString'} Type\n * The geometry type. One of `'Point'`, `'LineString'`, `'LinearRing'`,\n * `'Polygon'`, `'MultiPoint'` or 'MultiLineString'`.\n */\n\n/**\n * @type {import(\"../transform.js\").Transform}\n */\nconst tmpTransform = createTransform();\n\n/**\n * Lightweight, read-only, {@link module:ol/Feature~Feature} and {@link module:ol/geom/Geometry~Geometry} like\n * structure, optimized for vector tile rendering and styling. Geometry access\n * through the API is limited to getting the type and extent of the geometry.\n */\nclass RenderFeature {\n /**\n * @param {Type} type Geometry type.\n * @param {Array} flatCoordinates Flat coordinates. These always need\n * to be right-handed for polygons.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Object} properties Properties.\n * @param {number|string|undefined} id Feature id.\n */\n constructor(type, flatCoordinates, ends, stride, properties, id) {\n /**\n * @type {import(\"../style/Style.js\").StyleFunction|undefined}\n */\n this.styleFunction;\n\n /**\n * @private\n * @type {import(\"../extent.js\").Extent|undefined}\n */\n this.extent_;\n\n /**\n * @private\n * @type {number|string|undefined}\n */\n this.id_ = id;\n\n /**\n * @private\n * @type {Type}\n */\n this.type_ = type;\n\n /**\n * @private\n * @type {Array}\n */\n this.flatCoordinates_ = flatCoordinates;\n\n /**\n * @private\n * @type {Array}\n */\n this.flatInteriorPoints_ = null;\n\n /**\n * @private\n * @type {Array}\n */\n this.flatMidpoints_ = null;\n\n /**\n * @private\n * @type {Array|null}\n */\n this.ends_ = ends || null;\n\n /**\n * @private\n * @type {Object}\n */\n this.properties_ = properties;\n\n /**\n * @private\n * @type {number}\n */\n this.squaredTolerance_;\n\n /**\n * @private\n * @type {number}\n */\n this.stride_ = stride;\n\n /**\n * @private\n * @type {RenderFeature}\n */\n this.simplifiedGeometry_;\n }\n\n /**\n * Get a feature property by its key.\n * @param {string} key Key\n * @return {*} Value for the requested key.\n * @api\n */\n get(key) {\n return this.properties_[key];\n }\n\n /**\n * Get the extent of this feature's geometry.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getExtent() {\n if (!this.extent_) {\n this.extent_ =\n this.type_ === 'Point'\n ? createOrUpdateFromCoordinate(this.flatCoordinates_)\n : createOrUpdateFromFlatCoordinates(\n this.flatCoordinates_,\n 0,\n this.flatCoordinates_.length,\n 2,\n );\n }\n return this.extent_;\n }\n\n /**\n * @return {Array} Flat interior points.\n */\n getFlatInteriorPoint() {\n if (!this.flatInteriorPoints_) {\n const flatCenter = getCenter(this.getExtent());\n this.flatInteriorPoints_ = getInteriorPointOfArray(\n this.flatCoordinates_,\n 0,\n this.ends_,\n 2,\n flatCenter,\n 0,\n );\n }\n return this.flatInteriorPoints_;\n }\n\n /**\n * @return {Array} Flat interior points.\n */\n getFlatInteriorPoints() {\n if (!this.flatInteriorPoints_) {\n const ends = inflateEnds(this.flatCoordinates_, this.ends_);\n const flatCenters = linearRingssCenter(this.flatCoordinates_, 0, ends, 2);\n this.flatInteriorPoints_ = getInteriorPointsOfMultiArray(\n this.flatCoordinates_,\n 0,\n ends,\n 2,\n flatCenters,\n );\n }\n return this.flatInteriorPoints_;\n }\n\n /**\n * @return {Array} Flat midpoint.\n */\n getFlatMidpoint() {\n if (!this.flatMidpoints_) {\n this.flatMidpoints_ = interpolatePoint(\n this.flatCoordinates_,\n 0,\n this.flatCoordinates_.length,\n 2,\n 0.5,\n );\n }\n return this.flatMidpoints_;\n }\n\n /**\n * @return {Array} Flat midpoints.\n */\n getFlatMidpoints() {\n if (!this.flatMidpoints_) {\n this.flatMidpoints_ = [];\n const flatCoordinates = this.flatCoordinates_;\n let offset = 0;\n const ends = /** @type {Array} */ (this.ends_);\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const midpoint = interpolatePoint(flatCoordinates, offset, end, 2, 0.5);\n extend(this.flatMidpoints_, midpoint);\n offset = end;\n }\n }\n return this.flatMidpoints_;\n }\n\n /**\n * Get the feature identifier. This is a stable identifier for the feature and\n * is set when reading data from a remote source.\n * @return {number|string|undefined} Id.\n * @api\n */\n getId() {\n return this.id_;\n }\n\n /**\n * @return {Array} Flat coordinates.\n */\n getOrientedFlatCoordinates() {\n return this.flatCoordinates_;\n }\n\n /**\n * For API compatibility with {@link module:ol/Feature~Feature}, this method is useful when\n * determining the geometry type in style function (see {@link #getType}).\n * @return {RenderFeature} Feature.\n * @api\n */\n getGeometry() {\n return this;\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {RenderFeature} Simplified geometry.\n */\n getSimplifiedGeometry(squaredTolerance) {\n return this;\n }\n\n /**\n * Get a transformed and simplified version of the geometry.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [transform] Optional transform function.\n * @return {RenderFeature} Simplified geometry.\n */\n simplifyTransformed(squaredTolerance, transform) {\n return this;\n }\n\n /**\n * Get the feature properties.\n * @return {Object} Feature properties.\n * @api\n */\n getProperties() {\n return this.properties_;\n }\n\n /**\n * Get an object of all property names and values. This has the same behavior as getProperties,\n * but is here to conform with the {@link module:ol/Feature~Feature} interface.\n * @return {Object?} Object.\n */\n getPropertiesInternal() {\n return this.properties_;\n }\n\n /**\n * @return {number} Stride.\n */\n getStride() {\n return this.stride_;\n }\n\n /**\n * @return {import('../style/Style.js').StyleFunction|undefined} Style\n */\n getStyleFunction() {\n return this.styleFunction;\n }\n\n /**\n * Get the type of this feature's geometry.\n * @return {Type} Geometry type.\n * @api\n */\n getType() {\n return this.type_;\n }\n\n /**\n * Transform geometry coordinates from tile pixel space to projected.\n *\n * @param {import(\"../proj.js\").ProjectionLike} projection The data projection\n */\n transform(projection) {\n projection = getProjection(projection);\n const pixelExtent = projection.getExtent();\n const projectedExtent = projection.getWorldExtent();\n if (pixelExtent && projectedExtent) {\n const scale = getHeight(projectedExtent) / getHeight(pixelExtent);\n composeTransform(\n tmpTransform,\n projectedExtent[0],\n projectedExtent[3],\n scale,\n -scale,\n 0,\n 0,\n 0,\n );\n transform2D(\n this.flatCoordinates_,\n 0,\n this.flatCoordinates_.length,\n 2,\n tmpTransform,\n this.flatCoordinates_,\n );\n }\n }\n\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n */\n applyTransform(transformFn) {\n transformFn(this.flatCoordinates_, this.flatCoordinates_, this.stride_);\n }\n\n /**\n * @return {RenderFeature} A cloned render feature.\n */\n clone() {\n return new RenderFeature(\n this.type_,\n this.flatCoordinates_.slice(),\n this.ends_?.slice(),\n this.stride_,\n Object.assign({}, this.properties_),\n this.id_,\n );\n }\n\n /**\n * @return {Array|null} Ends.\n */\n getEnds() {\n return this.ends_;\n }\n\n /**\n * Add transform and resolution based geometry simplification to this instance.\n * @return {RenderFeature} This render feature.\n */\n enableSimplifyTransformed() {\n this.simplifyTransformed = memoizeOne((squaredTolerance, transform) => {\n if (squaredTolerance === this.squaredTolerance_) {\n return this.simplifiedGeometry_;\n }\n this.simplifiedGeometry_ = this.clone();\n if (transform) {\n this.simplifiedGeometry_.applyTransform(transform);\n }\n const simplifiedFlatCoordinates =\n this.simplifiedGeometry_.getFlatCoordinates();\n let simplifiedEnds;\n switch (this.type_) {\n case 'LineString':\n simplifiedFlatCoordinates.length = douglasPeucker(\n simplifiedFlatCoordinates,\n 0,\n this.simplifiedGeometry_.flatCoordinates_.length,\n this.simplifiedGeometry_.stride_,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n );\n simplifiedEnds = [simplifiedFlatCoordinates.length];\n break;\n case 'MultiLineString':\n simplifiedEnds = [];\n simplifiedFlatCoordinates.length = douglasPeuckerArray(\n simplifiedFlatCoordinates,\n 0,\n this.simplifiedGeometry_.ends_,\n this.simplifiedGeometry_.stride_,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n simplifiedEnds,\n );\n break;\n case 'Polygon':\n simplifiedEnds = [];\n simplifiedFlatCoordinates.length = quantizeArray(\n simplifiedFlatCoordinates,\n 0,\n this.simplifiedGeometry_.ends_,\n this.simplifiedGeometry_.stride_,\n Math.sqrt(squaredTolerance),\n simplifiedFlatCoordinates,\n 0,\n simplifiedEnds,\n );\n break;\n default:\n }\n if (simplifiedEnds) {\n this.simplifiedGeometry_ = new RenderFeature(\n this.type_,\n simplifiedFlatCoordinates,\n simplifiedEnds,\n 2,\n this.properties_,\n this.id_,\n );\n }\n this.squaredTolerance_ = squaredTolerance;\n return this.simplifiedGeometry_;\n });\n return this;\n }\n}\n\n/**\n * @return {Array} Flat coordinates.\n */\nRenderFeature.prototype.getFlatCoordinates =\n RenderFeature.prototype.getOrientedFlatCoordinates;\n\n/**\n * Create a geometry from an `ol/render/Feature`\n * @param {RenderFeature} renderFeature\n * Render Feature\n * @return {Point|MultiPoint|LineString|MultiLineString|Polygon|MultiPolygon}\n * New geometry instance.\n * @api\n */\nexport function toGeometry(renderFeature) {\n const geometryType = renderFeature.getType();\n switch (geometryType) {\n case 'Point':\n return new Point(renderFeature.getFlatCoordinates());\n case 'MultiPoint':\n return new MultiPoint(renderFeature.getFlatCoordinates(), 'XY');\n case 'LineString':\n return new LineString(renderFeature.getFlatCoordinates(), 'XY');\n case 'MultiLineString':\n return new MultiLineString(\n renderFeature.getFlatCoordinates(),\n 'XY',\n /** @type {Array} */ (renderFeature.getEnds()),\n );\n case 'Polygon':\n const flatCoordinates = renderFeature.getFlatCoordinates();\n const ends = renderFeature.getEnds();\n const endss = inflateEnds(flatCoordinates, ends);\n return endss.length > 1\n ? new MultiPolygon(flatCoordinates, 'XY', endss)\n : new Polygon(flatCoordinates, 'XY', ends);\n default:\n throw new Error('Invalid geometry type:' + geometryType);\n }\n}\n\n/**\n * Create an `ol/Feature` from an `ol/render/Feature`\n * @param {RenderFeature} renderFeature RenderFeature\n * @param {string} [geometryName='geometry'] Geometry name to use\n * when creating the Feature.\n * @return {Feature} Newly constructed `ol/Feature` with properties,\n * geometry, and id copied over.\n * @api\n */\nexport function toFeature(renderFeature, geometryName) {\n const id = renderFeature.getId();\n const geometry = toGeometry(renderFeature);\n const properties = renderFeature.getProperties();\n const feature = new Feature();\n if (geometryName !== undefined) {\n feature.setGeometryName(geometryName);\n }\n feature.setGeometry(geometry);\n if (id !== undefined) {\n feature.setId(id);\n }\n feature.setProperties(properties, true);\n return feature;\n}\n\nexport default RenderFeature;\n","/**\n * @module ol/geom/flat/center\n */\nimport {createEmpty, createOrUpdateFromFlatCoordinates} from '../../extent.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @return {Array} Flat centers.\n */\nexport function linearRingss(flatCoordinates, offset, endss, stride) {\n const flatCenters = [];\n let extent = createEmpty();\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n extent = createOrUpdateFromFlatCoordinates(\n flatCoordinates,\n offset,\n ends[0],\n stride,\n );\n flatCenters.push((extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2);\n offset = ends[ends.length - 1];\n }\n return flatCenters;\n}\n","/**\n * @module ol/geom/flat/transform\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {Array} [dest] Destination.\n * @param {number} [destinationStride] Stride of destination coordinates; if unspecified, assumed to be 2.\n * @return {Array} Transformed coordinates.\n */\nexport function transform2D(\n flatCoordinates,\n offset,\n end,\n stride,\n transform,\n dest,\n destinationStride,\n) {\n dest = dest ? dest : [];\n destinationStride = destinationStride ? destinationStride : 2;\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const x = flatCoordinates[j];\n const y = flatCoordinates[j + 1];\n dest[i++] = transform[0] * x + transform[2] * y + transform[4];\n dest[i++] = transform[1] * x + transform[3] * y + transform[5];\n\n for (let k = 2; k < destinationStride; k++) {\n dest[i++] = flatCoordinates[j + k];\n }\n }\n\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} angle Angle.\n * @param {Array} anchor Rotation anchor point.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function rotate(\n flatCoordinates,\n offset,\n end,\n stride,\n angle,\n anchor,\n dest,\n) {\n dest = dest ? dest : [];\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const anchorX = anchor[0];\n const anchorY = anchor[1];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const deltaX = flatCoordinates[j] - anchorX;\n const deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + deltaX * cos - deltaY * sin;\n dest[i++] = anchorY + deltaX * sin + deltaY * cos;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * Scale the coordinates.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} sx Scale factor in the x-direction.\n * @param {number} sy Scale factor in the y-direction.\n * @param {Array} anchor Scale anchor point.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function scale(\n flatCoordinates,\n offset,\n end,\n stride,\n sx,\n sy,\n anchor,\n dest,\n) {\n dest = dest ? dest : [];\n const anchorX = anchor[0];\n const anchorY = anchor[1];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const deltaX = flatCoordinates[j] - anchorX;\n const deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + sx * deltaX;\n dest[i++] = anchorY + sy * deltaY;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function translate(\n flatCoordinates,\n offset,\n end,\n stride,\n deltaX,\n deltaY,\n dest,\n) {\n dest = dest ? dest : [];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n dest[i++] = flatCoordinates[j] + deltaX;\n dest[i++] = flatCoordinates[j + 1] + deltaY;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n","/**\n * @module ol/functions\n */\n\nimport {equals as arrayEquals} from './array.js';\n\n/**\n * Always returns true.\n * @return {boolean} true.\n */\nexport function TRUE() {\n return true;\n}\n\n/**\n * Always returns false.\n * @return {boolean} false.\n */\nexport function FALSE() {\n return false;\n}\n\n/**\n * A reusable function, used e.g. as a default for callbacks.\n *\n * @return {void} Nothing.\n */\nexport function VOID() {}\n\n/**\n * Wrap a function in another function that remembers the last return. If the\n * returned function is called twice in a row with the same arguments and the same\n * this object, it will return the value from the first call in the second call.\n *\n * @param {function(...any): ReturnType} fn The function to memoize.\n * @return {function(...any): ReturnType} The memoized function.\n * @template ReturnType\n */\nexport function memoizeOne(fn) {\n /** @type {ReturnType} */\n let lastResult;\n\n /** @type {Array|undefined} */\n let lastArgs;\n\n let lastThis;\n\n /**\n * @this {*} Only need to know if `this` changed, don't care what type\n * @return {ReturnType} Memoized value\n */\n return function () {\n const nextArgs = Array.prototype.slice.call(arguments);\n if (!lastArgs || this !== lastThis || !arrayEquals(nextArgs, lastArgs)) {\n lastThis = this;\n lastArgs = nextArgs;\n lastResult = fn.apply(this, arguments);\n }\n return lastResult;\n };\n}\n\n/**\n * @template T\n * @param {function(): (T | Promise)} getter A function that returns a value or a promise for a value.\n * @return {Promise} A promise for the value.\n */\nexport function toPromise(getter) {\n function promiseGetter() {\n let value;\n try {\n value = getter();\n } catch (err) {\n return Promise.reject(err);\n }\n if (value instanceof Promise) {\n return value;\n }\n return Promise.resolve(value);\n }\n return promiseGetter();\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.functions;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.render.canvas;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.TileState;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.util;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.tilegrid.TileGrid;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.Image;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.Layer;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.Group;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.Map;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.Raster;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.Source;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.proj.Units;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.View;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.events.Event;","import Circle from 'ol/style/Circle.js';\nimport Fill from 'ol/style/Fill.js';\nimport Icon from 'ol/style/Icon.js';\nimport RenderFeature from 'ol/render/Feature.js';\nimport Stroke from 'ol/style/Stroke.js';\nimport Style from 'ol/style/Style.js';\nimport Text from 'ol/style/Text.js';\nimport { toPromise } from 'ol/functions.js';\nimport { registerFont, checkedFonts } from 'ol/render/canvas.js';\nimport TileState from 'ol/TileState.js';\nimport { VectorTile } from 'ol';\nimport { getUid } from 'ol/util.js';\nimport GeoJSON from 'ol/format/GeoJSON.js';\nimport ImageLayer from 'ol/layer/Image.js';\nimport Layer from 'ol/layer/Layer.js';\nimport LayerGroup from 'ol/layer/Group.js';\nimport MVT from 'ol/format/MVT.js';\nimport Map from 'ol/Map.js';\nimport Raster from 'ol/source/Raster.js';\nimport Source from 'ol/source/Source.js';\nimport TileGrid from 'ol/tilegrid/TileGrid.js';\nimport TileJSON from 'ol/source/TileJSON.js';\nimport TileLayer from 'ol/layer/Tile.js';\nimport VectorLayer from 'ol/layer/Vector.js';\nimport VectorSource from 'ol/source/Vector.js';\nimport VectorTileLayer from 'ol/layer/VectorTile.js';\nimport VectorTileSource, { defaultLoadFunction } from 'ol/source/VectorTile.js';\nimport View from 'ol/View.js';\nimport { METERS_PER_UNIT } from 'ol/proj/Units.js';\nimport { bbox } from 'ol/loadingstrategy.js';\nimport { createXYZ } from 'ol/tilegrid.js';\nimport { get as get$1, getUserProjection, getPointResolution, fromLonLat, equivalent } from 'ol/proj.js';\nimport { getCenter, getTopLeft } from 'ol/extent.js';\nimport BaseEvent from 'ol/events/Event.js';\nimport EventType from 'ol/events/EventType.js';\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nvar csscolorparser = {};\n\nvar parseCSSColor_1;\n// (c) Dean McNamee , 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n 'transparent': [\n 0,\n 0,\n 0,\n 0\n ],\n 'aliceblue': [\n 240,\n 248,\n 255,\n 1\n ],\n 'antiquewhite': [\n 250,\n 235,\n 215,\n 1\n ],\n 'aqua': [\n 0,\n 255,\n 255,\n 1\n ],\n 'aquamarine': [\n 127,\n 255,\n 212,\n 1\n ],\n 'azure': [\n 240,\n 255,\n 255,\n 1\n ],\n 'beige': [\n 245,\n 245,\n 220,\n 1\n ],\n 'bisque': [\n 255,\n 228,\n 196,\n 1\n ],\n 'black': [\n 0,\n 0,\n 0,\n 1\n ],\n 'blanchedalmond': [\n 255,\n 235,\n 205,\n 1\n ],\n 'blue': [\n 0,\n 0,\n 255,\n 1\n ],\n 'blueviolet': [\n 138,\n 43,\n 226,\n 1\n ],\n 'brown': [\n 165,\n 42,\n 42,\n 1\n ],\n 'burlywood': [\n 222,\n 184,\n 135,\n 1\n ],\n 'cadetblue': [\n 95,\n 158,\n 160,\n 1\n ],\n 'chartreuse': [\n 127,\n 255,\n 0,\n 1\n ],\n 'chocolate': [\n 210,\n 105,\n 30,\n 1\n ],\n 'coral': [\n 255,\n 127,\n 80,\n 1\n ],\n 'cornflowerblue': [\n 100,\n 149,\n 237,\n 1\n ],\n 'cornsilk': [\n 255,\n 248,\n 220,\n 1\n ],\n 'crimson': [\n 220,\n 20,\n 60,\n 1\n ],\n 'cyan': [\n 0,\n 255,\n 255,\n 1\n ],\n 'darkblue': [\n 0,\n 0,\n 139,\n 1\n ],\n 'darkcyan': [\n 0,\n 139,\n 139,\n 1\n ],\n 'darkgoldenrod': [\n 184,\n 134,\n 11,\n 1\n ],\n 'darkgray': [\n 169,\n 169,\n 169,\n 1\n ],\n 'darkgreen': [\n 0,\n 100,\n 0,\n 1\n ],\n 'darkgrey': [\n 169,\n 169,\n 169,\n 1\n ],\n 'darkkhaki': [\n 189,\n 183,\n 107,\n 1\n ],\n 'darkmagenta': [\n 139,\n 0,\n 139,\n 1\n ],\n 'darkolivegreen': [\n 85,\n 107,\n 47,\n 1\n ],\n 'darkorange': [\n 255,\n 140,\n 0,\n 1\n ],\n 'darkorchid': [\n 153,\n 50,\n 204,\n 1\n ],\n 'darkred': [\n 139,\n 0,\n 0,\n 1\n ],\n 'darksalmon': [\n 233,\n 150,\n 122,\n 1\n ],\n 'darkseagreen': [\n 143,\n 188,\n 143,\n 1\n ],\n 'darkslateblue': [\n 72,\n 61,\n 139,\n 1\n ],\n 'darkslategray': [\n 47,\n 79,\n 79,\n 1\n ],\n 'darkslategrey': [\n 47,\n 79,\n 79,\n 1\n ],\n 'darkturquoise': [\n 0,\n 206,\n 209,\n 1\n ],\n 'darkviolet': [\n 148,\n 0,\n 211,\n 1\n ],\n 'deeppink': [\n 255,\n 20,\n 147,\n 1\n ],\n 'deepskyblue': [\n 0,\n 191,\n 255,\n 1\n ],\n 'dimgray': [\n 105,\n 105,\n 105,\n 1\n ],\n 'dimgrey': [\n 105,\n 105,\n 105,\n 1\n ],\n 'dodgerblue': [\n 30,\n 144,\n 255,\n 1\n ],\n 'firebrick': [\n 178,\n 34,\n 34,\n 1\n ],\n 'floralwhite': [\n 255,\n 250,\n 240,\n 1\n ],\n 'forestgreen': [\n 34,\n 139,\n 34,\n 1\n ],\n 'fuchsia': [\n 255,\n 0,\n 255,\n 1\n ],\n 'gainsboro': [\n 220,\n 220,\n 220,\n 1\n ],\n 'ghostwhite': [\n 248,\n 248,\n 255,\n 1\n ],\n 'gold': [\n 255,\n 215,\n 0,\n 1\n ],\n 'goldenrod': [\n 218,\n 165,\n 32,\n 1\n ],\n 'gray': [\n 128,\n 128,\n 128,\n 1\n ],\n 'green': [\n 0,\n 128,\n 0,\n 1\n ],\n 'greenyellow': [\n 173,\n 255,\n 47,\n 1\n ],\n 'grey': [\n 128,\n 128,\n 128,\n 1\n ],\n 'honeydew': [\n 240,\n 255,\n 240,\n 1\n ],\n 'hotpink': [\n 255,\n 105,\n 180,\n 1\n ],\n 'indianred': [\n 205,\n 92,\n 92,\n 1\n ],\n 'indigo': [\n 75,\n 0,\n 130,\n 1\n ],\n 'ivory': [\n 255,\n 255,\n 240,\n 1\n ],\n 'khaki': [\n 240,\n 230,\n 140,\n 1\n ],\n 'lavender': [\n 230,\n 230,\n 250,\n 1\n ],\n 'lavenderblush': [\n 255,\n 240,\n 245,\n 1\n ],\n 'lawngreen': [\n 124,\n 252,\n 0,\n 1\n ],\n 'lemonchiffon': [\n 255,\n 250,\n 205,\n 1\n ],\n 'lightblue': [\n 173,\n 216,\n 230,\n 1\n ],\n 'lightcoral': [\n 240,\n 128,\n 128,\n 1\n ],\n 'lightcyan': [\n 224,\n 255,\n 255,\n 1\n ],\n 'lightgoldenrodyellow': [\n 250,\n 250,\n 210,\n 1\n ],\n 'lightgray': [\n 211,\n 211,\n 211,\n 1\n ],\n 'lightgreen': [\n 144,\n 238,\n 144,\n 1\n ],\n 'lightgrey': [\n 211,\n 211,\n 211,\n 1\n ],\n 'lightpink': [\n 255,\n 182,\n 193,\n 1\n ],\n 'lightsalmon': [\n 255,\n 160,\n 122,\n 1\n ],\n 'lightseagreen': [\n 32,\n 178,\n 170,\n 1\n ],\n 'lightskyblue': [\n 135,\n 206,\n 250,\n 1\n ],\n 'lightslategray': [\n 119,\n 136,\n 153,\n 1\n ],\n 'lightslategrey': [\n 119,\n 136,\n 153,\n 1\n ],\n 'lightsteelblue': [\n 176,\n 196,\n 222,\n 1\n ],\n 'lightyellow': [\n 255,\n 255,\n 224,\n 1\n ],\n 'lime': [\n 0,\n 255,\n 0,\n 1\n ],\n 'limegreen': [\n 50,\n 205,\n 50,\n 1\n ],\n 'linen': [\n 250,\n 240,\n 230,\n 1\n ],\n 'magenta': [\n 255,\n 0,\n 255,\n 1\n ],\n 'maroon': [\n 128,\n 0,\n 0,\n 1\n ],\n 'mediumaquamarine': [\n 102,\n 205,\n 170,\n 1\n ],\n 'mediumblue': [\n 0,\n 0,\n 205,\n 1\n ],\n 'mediumorchid': [\n 186,\n 85,\n 211,\n 1\n ],\n 'mediumpurple': [\n 147,\n 112,\n 219,\n 1\n ],\n 'mediumseagreen': [\n 60,\n 179,\n 113,\n 1\n ],\n 'mediumslateblue': [\n 123,\n 104,\n 238,\n 1\n ],\n 'mediumspringgreen': [\n 0,\n 250,\n 154,\n 1\n ],\n 'mediumturquoise': [\n 72,\n 209,\n 204,\n 1\n ],\n 'mediumvioletred': [\n 199,\n 21,\n 133,\n 1\n ],\n 'midnightblue': [\n 25,\n 25,\n 112,\n 1\n ],\n 'mintcream': [\n 245,\n 255,\n 250,\n 1\n ],\n 'mistyrose': [\n 255,\n 228,\n 225,\n 1\n ],\n 'moccasin': [\n 255,\n 228,\n 181,\n 1\n ],\n 'navajowhite': [\n 255,\n 222,\n 173,\n 1\n ],\n 'navy': [\n 0,\n 0,\n 128,\n 1\n ],\n 'oldlace': [\n 253,\n 245,\n 230,\n 1\n ],\n 'olive': [\n 128,\n 128,\n 0,\n 1\n ],\n 'olivedrab': [\n 107,\n 142,\n 35,\n 1\n ],\n 'orange': [\n 255,\n 165,\n 0,\n 1\n ],\n 'orangered': [\n 255,\n 69,\n 0,\n 1\n ],\n 'orchid': [\n 218,\n 112,\n 214,\n 1\n ],\n 'palegoldenrod': [\n 238,\n 232,\n 170,\n 1\n ],\n 'palegreen': [\n 152,\n 251,\n 152,\n 1\n ],\n 'paleturquoise': [\n 175,\n 238,\n 238,\n 1\n ],\n 'palevioletred': [\n 219,\n 112,\n 147,\n 1\n ],\n 'papayawhip': [\n 255,\n 239,\n 213,\n 1\n ],\n 'peachpuff': [\n 255,\n 218,\n 185,\n 1\n ],\n 'peru': [\n 205,\n 133,\n 63,\n 1\n ],\n 'pink': [\n 255,\n 192,\n 203,\n 1\n ],\n 'plum': [\n 221,\n 160,\n 221,\n 1\n ],\n 'powderblue': [\n 176,\n 224,\n 230,\n 1\n ],\n 'purple': [\n 128,\n 0,\n 128,\n 1\n ],\n 'rebeccapurple': [\n 102,\n 51,\n 153,\n 1\n ],\n 'red': [\n 255,\n 0,\n 0,\n 1\n ],\n 'rosybrown': [\n 188,\n 143,\n 143,\n 1\n ],\n 'royalblue': [\n 65,\n 105,\n 225,\n 1\n ],\n 'saddlebrown': [\n 139,\n 69,\n 19,\n 1\n ],\n 'salmon': [\n 250,\n 128,\n 114,\n 1\n ],\n 'sandybrown': [\n 244,\n 164,\n 96,\n 1\n ],\n 'seagreen': [\n 46,\n 139,\n 87,\n 1\n ],\n 'seashell': [\n 255,\n 245,\n 238,\n 1\n ],\n 'sienna': [\n 160,\n 82,\n 45,\n 1\n ],\n 'silver': [\n 192,\n 192,\n 192,\n 1\n ],\n 'skyblue': [\n 135,\n 206,\n 235,\n 1\n ],\n 'slateblue': [\n 106,\n 90,\n 205,\n 1\n ],\n 'slategray': [\n 112,\n 128,\n 144,\n 1\n ],\n 'slategrey': [\n 112,\n 128,\n 144,\n 1\n ],\n 'snow': [\n 255,\n 250,\n 250,\n 1\n ],\n 'springgreen': [\n 0,\n 255,\n 127,\n 1\n ],\n 'steelblue': [\n 70,\n 130,\n 180,\n 1\n ],\n 'tan': [\n 210,\n 180,\n 140,\n 1\n ],\n 'teal': [\n 0,\n 128,\n 128,\n 1\n ],\n 'thistle': [\n 216,\n 191,\n 216,\n 1\n ],\n 'tomato': [\n 255,\n 99,\n 71,\n 1\n ],\n 'turquoise': [\n 64,\n 224,\n 208,\n 1\n ],\n 'violet': [\n 238,\n 130,\n 238,\n 1\n ],\n 'wheat': [\n 245,\n 222,\n 179,\n 1\n ],\n 'white': [\n 255,\n 255,\n 255,\n 1\n ],\n 'whitesmoke': [\n 245,\n 245,\n 245,\n 1\n ],\n 'yellow': [\n 255,\n 255,\n 0,\n 1\n ],\n 'yellowgreen': [\n 154,\n 205,\n 50,\n 1\n ]\n};\nfunction clamp_css_byte(i) {\n // Clamp to integer 0 .. 255.\n i = Math.round(i);\n // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\nfunction clamp_css_float(f) {\n // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\nfunction parse_css_int(str) {\n // int or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_byte(parseFloat(str) / 100 * 255);\n return clamp_css_byte(parseInt(str));\n}\nfunction parse_css_float(str) {\n // float or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_float(parseFloat(str) / 100);\n return clamp_css_float(parseFloat(str));\n}\nfunction css_hue_to_rgb(m1, m2, h) {\n if (h < 0)\n h += 1;\n else if (h > 1)\n h -= 1;\n if (h * 6 < 1)\n return m1 + (m2 - m1) * h * 6;\n if (h * 2 < 1)\n return m2;\n if (h * 3 < 2)\n return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n return m1;\n}\nfunction parseCSSColor(css_str) {\n // Remove all whitespace, not compliant, but should just be more accepting.\n var str = css_str.replace(/ /g, '').toLowerCase();\n // Color keywords (and transparent) lookup.\n if (str in kCSSColorTable)\n return kCSSColorTable[str].slice();\n // dup.\n // #abc and #abc123 syntax.\n if (str[0] === '#') {\n if (str.length === 4) {\n var iv = parseInt(str.substr(1), 16);\n // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 4095))\n return null;\n // Covers NaN.\n return [\n (iv & 3840) >> 4 | (iv & 3840) >> 8,\n iv & 240 | (iv & 240) >> 4,\n iv & 15 | (iv & 15) << 4,\n 1\n ];\n } else if (str.length === 7) {\n var iv = parseInt(str.substr(1), 16);\n // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 16777215))\n return null;\n // Covers NaN.\n return [\n (iv & 16711680) >> 16,\n (iv & 65280) >> 8,\n iv & 255,\n 1\n ];\n }\n return null;\n }\n var op = str.indexOf('('), ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === str.length) {\n var fname = str.substr(0, op);\n var params = str.substr(op + 1, ep - (op + 1)).split(',');\n var alpha = 1;\n // To allow case fallthrough.\n switch (fname) {\n case 'rgba':\n if (params.length !== 4)\n return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'rgb':\n if (params.length !== 3)\n return null;\n return [\n parse_css_int(params[0]),\n parse_css_int(params[1]),\n parse_css_int(params[2]),\n alpha\n ];\n case 'hsla':\n if (params.length !== 4)\n return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'hsl':\n if (params.length !== 3)\n return null;\n var h = (parseFloat(params[0]) % 360 + 360) % 360 / 360;\n // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n var s = parse_css_float(params[1]);\n var l = parse_css_float(params[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n return [\n clamp_css_byte(css_hue_to_rgb(m1, m2, h + 1 / 3) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h - 1 / 3) * 255),\n alpha\n ];\n default:\n return null;\n }\n }\n return null;\n}\ntry {\n parseCSSColor_1 = csscolorparser.parseCSSColor = parseCSSColor;\n} catch (e) {\n}\n\n// \n/**\n * An RGBA color value. Create instances from color strings using the static\n * method `Color.parse`. The constructor accepts RGB channel values in the range\n * `[0, 1]`, premultiplied by A.\n *\n * @param {number} r The red channel.\n * @param {number} g The green channel.\n * @param {number} b The blue channel.\n * @param {number} a The alpha channel.\n * @private\n */\nclass Color {\n constructor(r, g, b, a = 1) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n }\n /**\n * Parses valid CSS color strings and returns a `Color` instance.\n * @returns A `Color` instance, or `undefined` if the input is not a valid color string.\n */\n static parse(input) {\n if (!input) {\n return undefined;\n }\n if (input instanceof Color) {\n return input;\n }\n if (typeof input !== 'string') {\n return undefined;\n }\n const rgba = parseCSSColor_1(input);\n if (!rgba) {\n return undefined;\n }\n return new Color(rgba[0] / 255 * rgba[3], rgba[1] / 255 * rgba[3], rgba[2] / 255 * rgba[3], rgba[3]);\n }\n /**\n * Returns an RGBA string representing the color value.\n *\n * @returns An RGBA string.\n * @example\n * var purple = new Color.parse('purple');\n * purple.toString; // = \"rgba(128,0,128,1)\"\n * var translucentGreen = new Color.parse('rgba(26, 207, 26, .73)');\n * translucentGreen.toString(); // = \"rgba(26,207,26,0.73)\"\n */\n toString() {\n const [r, g, b, a] = this.toArray();\n return `rgba(${ Math.round(r) },${ Math.round(g) },${ Math.round(b) },${ a })`;\n }\n /**\n * Returns an RGBA array of values representing the color, unpremultiplied by A.\n *\n * @returns An array of RGBA color values in the range [0, 255].\n */\n toArray() {\n const {r, g, b, a} = this;\n return a === 0 ? [\n 0,\n 0,\n 0,\n 0\n ] : [\n r * 255 / a,\n g * 255 / a,\n b * 255 / a,\n a\n ];\n }\n /**\n * Returns a RGBA array of float values representing the color, unpremultiplied by A.\n *\n * @returns An array of RGBA color values in the range [0, 1].\n */\n toArray01() {\n const {r, g, b, a} = this;\n return a === 0 ? [\n 0,\n 0,\n 0,\n 0\n ] : [\n r / a,\n g / a,\n b / a,\n a\n ];\n }\n /**\n * Returns an RGBA array of values representing the color, premultiplied by A.\n *\n * @returns An array of RGBA color values in the range [0, 1].\n */\n toArray01PremultipliedAlpha() {\n const {r, g, b, a} = this;\n return [\n r,\n g,\n b,\n a\n ];\n }\n}\nColor.black = new Color(0, 0, 0, 1);\nColor.white = new Color(1, 1, 1, 1);\nColor.transparent = new Color(0, 0, 0, 0);\nColor.red = new Color(1, 0, 0, 1);\nColor.blue = new Color(0, 0, 1, 1);\nvar Color$1 = Color;\n\nfunction convertLiteral(value) {\n return typeof value === 'object' ? [\n 'literal',\n value\n ] : value;\n}\nfunction convertFunction(parameters, propertySpec) {\n let stops = parameters.stops;\n if (!stops) {\n // identity function\n return convertIdentityFunction(parameters, propertySpec);\n }\n const zoomAndFeatureDependent = stops && typeof stops[0][0] === 'object';\n const featureDependent = zoomAndFeatureDependent || parameters.property !== undefined;\n const zoomDependent = zoomAndFeatureDependent || !featureDependent;\n stops = stops.map(stop => {\n if (!featureDependent && propertySpec.tokens && typeof stop[1] === 'string') {\n return [\n stop[0],\n convertTokenString(stop[1])\n ];\n }\n return [\n stop[0],\n convertLiteral(stop[1])\n ];\n });\n if (zoomAndFeatureDependent) {\n return convertZoomAndPropertyFunction(parameters, propertySpec, stops);\n } else if (zoomDependent) {\n return convertZoomFunction(parameters, propertySpec, stops);\n } else {\n return convertPropertyFunction(parameters, propertySpec, stops);\n }\n}\nfunction convertIdentityFunction(parameters, propertySpec) {\n const get = [\n 'get',\n parameters.property\n ];\n if (parameters.default === undefined) {\n // By default, expressions for string-valued properties get coerced. To preserve\n // legacy function semantics, insert an explicit assertion instead.\n return propertySpec.type === 'string' ? [\n 'string',\n get\n ] : get;\n } else if (propertySpec.type === 'enum') {\n return [\n 'match',\n get,\n Object.keys(propertySpec.values),\n get,\n parameters.default\n ];\n } else {\n const expression = [\n propertySpec.type === 'color' ? 'to-color' : propertySpec.type,\n get,\n convertLiteral(parameters.default)\n ];\n if (propertySpec.type === 'array') {\n expression.splice(1, 0, propertySpec.value, propertySpec.length || null);\n }\n return expression;\n }\n}\nfunction getInterpolateOperator(parameters) {\n switch (parameters.colorSpace) {\n case 'hcl':\n return 'interpolate-hcl';\n case 'lab':\n return 'interpolate-lab';\n default:\n return 'interpolate';\n }\n}\nfunction convertZoomAndPropertyFunction(parameters, propertySpec, stops) {\n const featureFunctionParameters = {};\n const featureFunctionStops = {};\n const zoomStops = [];\n for (let s = 0; s < stops.length; s++) {\n const stop = stops[s];\n const zoom = stop[0].zoom;\n if (featureFunctionParameters[zoom] === undefined) {\n featureFunctionParameters[zoom] = {\n zoom,\n type: parameters.type,\n property: parameters.property,\n default: parameters.default\n };\n featureFunctionStops[zoom] = [];\n zoomStops.push(zoom);\n }\n featureFunctionStops[zoom].push([\n stop[0].value,\n stop[1]\n ]);\n }\n // the interpolation type for the zoom dimension of a zoom-and-property\n // function is determined directly from the style property specification\n // for which it's being used: linear for interpolatable properties, step\n // otherwise.\n const functionType = getFunctionType({}, propertySpec);\n if (functionType === 'exponential') {\n const expression = [\n getInterpolateOperator(parameters),\n ['linear'],\n ['zoom']\n ];\n for (const z of zoomStops) {\n const output = convertPropertyFunction(featureFunctionParameters[z], propertySpec, featureFunctionStops[z]);\n appendStopPair(expression, z, output, false);\n }\n return expression;\n } else {\n const expression = [\n 'step',\n ['zoom']\n ];\n for (const z of zoomStops) {\n const output = convertPropertyFunction(featureFunctionParameters[z], propertySpec, featureFunctionStops[z]);\n appendStopPair(expression, z, output, true);\n }\n fixupDegenerateStepCurve(expression);\n return expression;\n }\n}\nfunction coalesce(a, b) {\n if (a !== undefined)\n return a;\n if (b !== undefined)\n return b;\n}\nfunction getFallback(parameters, propertySpec) {\n const defaultValue = convertLiteral(coalesce(parameters.default, propertySpec.default));\n /*\n * Some fields with type: resolvedImage have an undefined default.\n * Because undefined is an invalid value for resolvedImage, set fallback to\n * an empty string instead of undefined to ensure output\n * passes validation.\n */\n if (defaultValue === undefined && propertySpec.type === 'resolvedImage') {\n return '';\n }\n return defaultValue;\n}\nfunction convertPropertyFunction(parameters, propertySpec, stops) {\n const type = getFunctionType(parameters, propertySpec);\n const get = [\n 'get',\n parameters.property\n ];\n if (type === 'categorical' && typeof stops[0][0] === 'boolean') {\n const expression = ['case'];\n for (const stop of stops) {\n expression.push([\n '==',\n get,\n stop[0]\n ], stop[1]);\n }\n expression.push(getFallback(parameters, propertySpec));\n return expression;\n } else if (type === 'categorical') {\n const expression = [\n 'match',\n get\n ];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], false);\n }\n expression.push(getFallback(parameters, propertySpec));\n return expression;\n } else if (type === 'interval') {\n const expression = [\n 'step',\n [\n 'number',\n get\n ]\n ];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], true);\n }\n fixupDegenerateStepCurve(expression);\n return parameters.default === undefined ? expression : [\n 'case',\n [\n '==',\n [\n 'typeof',\n get\n ],\n 'number'\n ],\n expression,\n convertLiteral(parameters.default)\n ];\n } else if (type === 'exponential') {\n const base = parameters.base !== undefined ? parameters.base : 1;\n const expression = [\n getInterpolateOperator(parameters),\n base === 1 ? ['linear'] : [\n 'exponential',\n base\n ],\n [\n 'number',\n get\n ]\n ];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], false);\n }\n return parameters.default === undefined ? expression : [\n 'case',\n [\n '==',\n [\n 'typeof',\n get\n ],\n 'number'\n ],\n expression,\n convertLiteral(parameters.default)\n ];\n } else {\n throw new Error(`Unknown property function type ${ type }`);\n }\n}\nfunction convertZoomFunction(parameters, propertySpec, stops, input = ['zoom']) {\n const type = getFunctionType(parameters, propertySpec);\n let expression;\n let isStep = false;\n if (type === 'interval') {\n expression = [\n 'step',\n input\n ];\n isStep = true;\n } else if (type === 'exponential') {\n const base = parameters.base !== undefined ? parameters.base : 1;\n expression = [\n getInterpolateOperator(parameters),\n base === 1 ? ['linear'] : [\n 'exponential',\n base\n ],\n input\n ];\n } else {\n throw new Error(`Unknown zoom function type \"${ type }\"`);\n }\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], isStep);\n }\n fixupDegenerateStepCurve(expression);\n return expression;\n}\nfunction fixupDegenerateStepCurve(expression) {\n // degenerate step curve (i.e. a constant function): add a noop stop\n if (expression[0] === 'step' && expression.length === 3) {\n expression.push(0);\n expression.push(expression[3]);\n }\n}\nfunction appendStopPair(curve, input, output, isStep) {\n // Skip duplicate stop values. They were not validated for functions, but they are for expressions.\n // https://github.com/mapbox/mapbox-gl-js/issues/4107\n if (curve.length > 3 && input === curve[curve.length - 2]) {\n return;\n }\n // step curves don't get the first input value, as it is redundant.\n if (!(isStep && curve.length === 2)) {\n curve.push(input);\n }\n curve.push(output);\n}\nfunction getFunctionType(parameters, propertySpec) {\n if (parameters.type) {\n return parameters.type;\n } else {\n return propertySpec.expression.interpolated ? 'exponential' : 'interval';\n }\n}\n// \"String with {name} token\" => [\"concat\", \"String with \", [\"get\", \"name\"], \" token\"]\nfunction convertTokenString(s) {\n const result = ['concat'];\n const re = /{([^{}]+)}/g;\n let pos = 0;\n for (let match = re.exec(s); match !== null; match = re.exec(s)) {\n const literal = s.slice(pos, re.lastIndex - match[0].length);\n pos = re.lastIndex;\n if (literal.length > 0)\n result.push(literal);\n result.push([\n 'get',\n match[1]\n ]);\n }\n if (result.length === 1) {\n return s;\n }\n if (pos < s.length) {\n result.push(s.slice(pos));\n } else if (result.length === 2) {\n return [\n 'to-string',\n result[1]\n ];\n }\n return result;\n}\n\n// \nclass ParsingError extends Error {\n constructor(key, message) {\n super(message);\n this.message = message;\n this.key = key;\n }\n}\nvar ParsingError$1 = ParsingError;\n\n// \n/**\n * Tracks `let` bindings during expression parsing.\n * @private\n */\nclass Scope {\n constructor(parent, bindings = []) {\n this.parent = parent;\n this.bindings = {};\n for (const [name, expression] of bindings) {\n this.bindings[name] = expression;\n }\n }\n concat(bindings) {\n return new Scope(this, bindings);\n }\n get(name) {\n if (this.bindings[name]) {\n return this.bindings[name];\n }\n if (this.parent) {\n return this.parent.get(name);\n }\n throw new Error(`${ name } not found in scope.`);\n }\n has(name) {\n if (this.bindings[name])\n return true;\n return this.parent ? this.parent.has(name) : false;\n }\n}\nvar Scope$1 = Scope;\n\n// \nconst NullType = { kind: 'null' };\nconst NumberType = { kind: 'number' };\nconst StringType = { kind: 'string' };\nconst BooleanType = { kind: 'boolean' };\nconst ColorType = { kind: 'color' };\nconst ObjectType = { kind: 'object' };\nconst ValueType = { kind: 'value' };\nconst ErrorType = { kind: 'error' };\nconst CollatorType = { kind: 'collator' };\nconst FormattedType = { kind: 'formatted' };\nconst ResolvedImageType = { kind: 'resolvedImage' };\nfunction array$1(itemType, N) {\n return {\n kind: 'array',\n itemType,\n N\n };\n}\nfunction toString$1(type) {\n if (type.kind === 'array') {\n const itemType = toString$1(type.itemType);\n return typeof type.N === 'number' ? `array<${ itemType }, ${ type.N }>` : type.itemType.kind === 'value' ? 'array' : `array<${ itemType }>`;\n } else {\n return type.kind;\n }\n}\nconst valueMemberTypes = [\n NullType,\n NumberType,\n StringType,\n BooleanType,\n ColorType,\n FormattedType,\n ObjectType,\n array$1(ValueType),\n ResolvedImageType\n];\n/**\n * Returns null if `t` is a subtype of `expected`; otherwise returns an\n * error message.\n * @private\n */\nfunction checkSubtype(expected, t) {\n if (t.kind === 'error') {\n // Error is a subtype of every type\n return null;\n } else if (expected.kind === 'array') {\n if (t.kind === 'array' && (t.N === 0 && t.itemType.kind === 'value' || !checkSubtype(expected.itemType, t.itemType)) && (typeof expected.N !== 'number' || expected.N === t.N)) {\n return null;\n }\n } else if (expected.kind === t.kind) {\n return null;\n } else if (expected.kind === 'value') {\n for (const memberType of valueMemberTypes) {\n if (!checkSubtype(memberType, t)) {\n return null;\n }\n }\n }\n return `Expected ${ toString$1(expected) } but found ${ toString$1(t) } instead.`;\n}\nfunction isValidType(provided, allowedTypes) {\n return allowedTypes.some(t => t.kind === provided.kind);\n}\nfunction isValidNativeType(provided, allowedTypes) {\n return allowedTypes.some(t => {\n if (t === 'null') {\n return provided === null;\n } else if (t === 'array') {\n return Array.isArray(provided);\n } else if (t === 'object') {\n return provided && !Array.isArray(provided) && typeof provided === 'object';\n } else {\n return t === typeof provided;\n }\n });\n}\n\n// \n// Flow type declarations for Intl cribbed from\n// https://github.com/facebook/flow/issues/1270\nclass Collator {\n constructor(caseSensitive, diacriticSensitive, locale) {\n if (caseSensitive)\n this.sensitivity = diacriticSensitive ? 'variant' : 'case';\n else\n this.sensitivity = diacriticSensitive ? 'accent' : 'base';\n this.locale = locale;\n this.collator = new Intl.Collator(this.locale ? this.locale : [], {\n sensitivity: this.sensitivity,\n usage: 'search'\n });\n }\n compare(lhs, rhs) {\n return this.collator.compare(lhs, rhs);\n }\n resolvedLocale() {\n // We create a Collator without \"usage: search\" because we don't want\n // the search options encoded in our result (e.g. \"en-u-co-search\")\n return new Intl.Collator(this.locale ? this.locale : []).resolvedOptions().locale;\n }\n}\n\n// \nclass FormattedSection {\n constructor(text, image, scale, fontStack, textColor) {\n // combine characters so that diacritic marks are not separate code points\n this.text = text.normalize ? text.normalize() : text;\n this.image = image;\n this.scale = scale;\n this.fontStack = fontStack;\n this.textColor = textColor;\n }\n}\nclass Formatted {\n constructor(sections) {\n this.sections = sections;\n }\n static fromString(unformatted) {\n return new Formatted([new FormattedSection(unformatted, null, null, null, null)]);\n }\n isEmpty() {\n if (this.sections.length === 0)\n return true;\n return !this.sections.some(section => section.text.length !== 0 || section.image && section.image.name.length !== 0);\n }\n static factory(text) {\n if (text instanceof Formatted) {\n return text;\n } else {\n return Formatted.fromString(text);\n }\n }\n toString() {\n if (this.sections.length === 0)\n return '';\n return this.sections.map(section => section.text).join('');\n }\n serialize() {\n const serialized = ['format'];\n for (const section of this.sections) {\n if (section.image) {\n serialized.push([\n 'image',\n section.image.name\n ]);\n continue;\n }\n serialized.push(section.text);\n const options = {};\n if (section.fontStack) {\n options['text-font'] = [\n 'literal',\n section.fontStack.split(',')\n ];\n }\n if (section.scale) {\n options['font-scale'] = section.scale;\n }\n if (section.textColor) {\n options['text-color'] = ['rgba'].concat(section.textColor.toArray());\n }\n serialized.push(options);\n }\n return serialized;\n }\n}\n\n// \nclass ResolvedImage {\n constructor(options) {\n this.name = options.name;\n this.available = options.available;\n }\n toString() {\n return this.name;\n }\n static fromString(name) {\n if (!name)\n return null;\n // treat empty values as no image\n return new ResolvedImage({\n name,\n available: false\n });\n }\n serialize() {\n return [\n 'image',\n this.name\n ];\n }\n}\n\nfunction validateRGBA(r, g, b, a) {\n if (!(typeof r === 'number' && r >= 0 && r <= 255 && typeof g === 'number' && g >= 0 && g <= 255 && typeof b === 'number' && b >= 0 && b <= 255)) {\n const value = typeof a === 'number' ? [\n r,\n g,\n b,\n a\n ] : [\n r,\n g,\n b\n ];\n return `Invalid rgba value [${ value.join(', ') }]: 'r', 'g', and 'b' must be between 0 and 255.`;\n }\n if (!(typeof a === 'undefined' || typeof a === 'number' && a >= 0 && a <= 1)) {\n return `Invalid rgba value [${ [\n r,\n g,\n b,\n a\n ].join(', ') }]: 'a' must be between 0 and 1.`;\n }\n return null;\n}\nfunction isValue(mixed) {\n if (mixed === null) {\n return true;\n } else if (typeof mixed === 'string') {\n return true;\n } else if (typeof mixed === 'boolean') {\n return true;\n } else if (typeof mixed === 'number') {\n return true;\n } else if (mixed instanceof Color$1) {\n return true;\n } else if (mixed instanceof Collator) {\n return true;\n } else if (mixed instanceof Formatted) {\n return true;\n } else if (mixed instanceof ResolvedImage) {\n return true;\n } else if (Array.isArray(mixed)) {\n for (const item of mixed) {\n if (!isValue(item)) {\n return false;\n }\n }\n return true;\n } else if (typeof mixed === 'object') {\n for (const key in mixed) {\n if (!isValue(mixed[key])) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n}\nfunction typeOf(value) {\n if (value === null) {\n return NullType;\n } else if (typeof value === 'string') {\n return StringType;\n } else if (typeof value === 'boolean') {\n return BooleanType;\n } else if (typeof value === 'number') {\n return NumberType;\n } else if (value instanceof Color$1) {\n return ColorType;\n } else if (value instanceof Collator) {\n return CollatorType;\n } else if (value instanceof Formatted) {\n return FormattedType;\n } else if (value instanceof ResolvedImage) {\n return ResolvedImageType;\n } else if (Array.isArray(value)) {\n const length = value.length;\n let itemType;\n for (const item of value) {\n const t = typeOf(item);\n if (!itemType) {\n itemType = t;\n } else if (itemType === t) {\n continue;\n } else {\n itemType = ValueType;\n break;\n }\n }\n return array$1(itemType || ValueType, length);\n } else {\n return ObjectType;\n }\n}\nfunction toString(value) {\n const type = typeof value;\n if (value === null) {\n return '';\n } else if (type === 'string' || type === 'number' || type === 'boolean') {\n return String(value);\n } else if (value instanceof Color$1 || value instanceof Formatted || value instanceof ResolvedImage) {\n return value.toString();\n } else {\n return JSON.stringify(value);\n }\n}\n\nclass Literal {\n constructor(type, value) {\n this.type = type;\n this.value = value;\n }\n static parse(args, context) {\n if (args.length !== 2)\n return context.error(`'literal' expression requires exactly one argument, but found ${ args.length - 1 } instead.`);\n if (!isValue(args[1]))\n return context.error(`invalid value`);\n const value = args[1];\n let type = typeOf(value);\n // special case: infer the item type if possible for zero-length arrays\n const expected = context.expectedType;\n if (type.kind === 'array' && type.N === 0 && expected && expected.kind === 'array' && (typeof expected.N !== 'number' || expected.N === 0)) {\n type = expected;\n }\n return new Literal(type, value);\n }\n evaluate() {\n return this.value;\n }\n eachChild() {\n }\n outputDefined() {\n return true;\n }\n serialize() {\n if (this.type.kind === 'array' || this.type.kind === 'object') {\n return [\n 'literal',\n this.value\n ];\n } else if (this.value instanceof Color$1) {\n // Constant-folding can generate Literal expressions that you\n // couldn't actually generate with a \"literal\" expression,\n // so we have to implement an equivalent serialization here\n return ['rgba'].concat(this.value.toArray());\n } else if (this.value instanceof Formatted) {\n // Same as Color\n return this.value.serialize();\n } else {\n return this.value;\n }\n }\n}\nvar Literal$1 = Literal;\n\n// \nclass RuntimeError {\n constructor(message) {\n this.name = 'ExpressionEvaluationError';\n this.message = message;\n }\n toJSON() {\n return this.message;\n }\n}\nvar RuntimeError$1 = RuntimeError;\n\nconst types$2 = {\n string: StringType,\n number: NumberType,\n boolean: BooleanType,\n object: ObjectType\n};\nclass Assertion {\n constructor(type, args) {\n this.type = type;\n this.args = args;\n }\n static parse(args, context) {\n if (args.length < 2)\n return context.error(`Expected at least one argument.`);\n let i = 1;\n let type;\n const name = args[0];\n if (name === 'array') {\n let itemType;\n if (args.length > 2) {\n const type = args[1];\n if (typeof type !== 'string' || !(type in types$2) || type === 'object')\n return context.error('The item type argument of \"array\" must be one of string, number, boolean', 1);\n itemType = types$2[type];\n i++;\n } else {\n itemType = ValueType;\n }\n let N;\n if (args.length > 3) {\n if (args[2] !== null && (typeof args[2] !== 'number' || args[2] < 0 || args[2] !== Math.floor(args[2]))) {\n return context.error('The length argument to \"array\" must be a positive integer literal', 2);\n }\n N = args[2];\n i++;\n }\n type = array$1(itemType, N);\n } else {\n type = types$2[name];\n }\n const parsed = [];\n for (; i < args.length; i++) {\n const input = context.parse(args[i], i, ValueType);\n if (!input)\n return null;\n parsed.push(input);\n }\n return new Assertion(type, parsed);\n }\n evaluate(ctx) {\n for (let i = 0; i < this.args.length; i++) {\n const value = this.args[i].evaluate(ctx);\n const error = checkSubtype(this.type, typeOf(value));\n if (!error) {\n return value;\n } else if (i === this.args.length - 1) {\n throw new RuntimeError$1(`Expected value to be of type ${ toString$1(this.type) }, but found ${ toString$1(typeOf(value)) } instead.`);\n }\n }\n return null;\n }\n eachChild(fn) {\n this.args.forEach(fn);\n }\n outputDefined() {\n return this.args.every(arg => arg.outputDefined());\n }\n serialize() {\n const type = this.type;\n const serialized = [type.kind];\n if (type.kind === 'array') {\n const itemType = type.itemType;\n if (itemType.kind === 'string' || itemType.kind === 'number' || itemType.kind === 'boolean') {\n serialized.push(itemType.kind);\n const N = type.N;\n if (typeof N === 'number' || this.args.length > 1) {\n serialized.push(N);\n }\n }\n }\n return serialized.concat(this.args.map(arg => arg.serialize()));\n }\n}\nvar Assertion$1 = Assertion;\n\n// \nclass FormatExpression {\n constructor(sections) {\n this.type = FormattedType;\n this.sections = sections;\n }\n static parse(args, context) {\n if (args.length < 2) {\n return context.error(`Expected at least one argument.`);\n }\n const firstArg = args[1];\n if (!Array.isArray(firstArg) && typeof firstArg === 'object') {\n return context.error(`First argument must be an image or text section.`);\n }\n const sections = [];\n let nextTokenMayBeObject = false;\n for (let i = 1; i <= args.length - 1; ++i) {\n const arg = args[i];\n if (nextTokenMayBeObject && typeof arg === 'object' && !Array.isArray(arg)) {\n nextTokenMayBeObject = false;\n let scale = null;\n if (arg['font-scale']) {\n scale = context.parse(arg['font-scale'], 1, NumberType);\n if (!scale)\n return null;\n }\n let font = null;\n if (arg['text-font']) {\n font = context.parse(arg['text-font'], 1, array$1(StringType));\n if (!font)\n return null;\n }\n let textColor = null;\n if (arg['text-color']) {\n textColor = context.parse(arg['text-color'], 1, ColorType);\n if (!textColor)\n return null;\n }\n const lastExpression = sections[sections.length - 1];\n lastExpression.scale = scale;\n lastExpression.font = font;\n lastExpression.textColor = textColor;\n } else {\n const content = context.parse(args[i], 1, ValueType);\n if (!content)\n return null;\n const kind = content.type.kind;\n if (kind !== 'string' && kind !== 'value' && kind !== 'null' && kind !== 'resolvedImage')\n return context.error(`Formatted text type must be 'string', 'value', 'image' or 'null'.`);\n nextTokenMayBeObject = true;\n sections.push({\n content,\n scale: null,\n font: null,\n textColor: null\n });\n }\n }\n return new FormatExpression(sections);\n }\n evaluate(ctx) {\n const evaluateSection = section => {\n const evaluatedContent = section.content.evaluate(ctx);\n if (typeOf(evaluatedContent) === ResolvedImageType) {\n return new FormattedSection('', evaluatedContent, null, null, null);\n }\n return new FormattedSection(toString(evaluatedContent), null, section.scale ? section.scale.evaluate(ctx) : null, section.font ? section.font.evaluate(ctx).join(',') : null, section.textColor ? section.textColor.evaluate(ctx) : null);\n };\n return new Formatted(this.sections.map(evaluateSection));\n }\n eachChild(fn) {\n for (const section of this.sections) {\n fn(section.content);\n if (section.scale) {\n fn(section.scale);\n }\n if (section.font) {\n fn(section.font);\n }\n if (section.textColor) {\n fn(section.textColor);\n }\n }\n }\n outputDefined() {\n // Technically the combinatoric set of all children\n // Usually, this.text will be undefined anyway\n return false;\n }\n serialize() {\n const serialized = ['format'];\n for (const section of this.sections) {\n serialized.push(section.content.serialize());\n const options = {};\n if (section.scale) {\n options['font-scale'] = section.scale.serialize();\n }\n if (section.font) {\n options['text-font'] = section.font.serialize();\n }\n if (section.textColor) {\n options['text-color'] = section.textColor.serialize();\n }\n serialized.push(options);\n }\n return serialized;\n }\n}\n\n// \nclass ImageExpression {\n constructor(input) {\n this.type = ResolvedImageType;\n this.input = input;\n }\n static parse(args, context) {\n if (args.length !== 2) {\n return context.error(`Expected two arguments.`);\n }\n const name = context.parse(args[1], 1, StringType);\n if (!name)\n return context.error(`No image name provided.`);\n return new ImageExpression(name);\n }\n evaluate(ctx) {\n const evaluatedImageName = this.input.evaluate(ctx);\n const value = ResolvedImage.fromString(evaluatedImageName);\n if (value && ctx.availableImages)\n value.available = ctx.availableImages.indexOf(evaluatedImageName) > -1;\n return value;\n }\n eachChild(fn) {\n fn(this.input);\n }\n outputDefined() {\n // The output of image is determined by the list of available images in the evaluation context\n return false;\n }\n serialize() {\n return [\n 'image',\n this.input.serialize()\n ];\n }\n}\n\nconst types$1 = {\n 'to-boolean': BooleanType,\n 'to-color': ColorType,\n 'to-number': NumberType,\n 'to-string': StringType\n};\n/**\n * Special form for error-coalescing coercion expressions \"to-number\",\n * \"to-color\". Since these coercions can fail at runtime, they accept multiple\n * arguments, only evaluating one at a time until one succeeds.\n *\n * @private\n */\nclass Coercion {\n constructor(type, args) {\n this.type = type;\n this.args = args;\n }\n static parse(args, context) {\n if (args.length < 2)\n return context.error(`Expected at least one argument.`);\n const name = args[0];\n if ((name === 'to-boolean' || name === 'to-string') && args.length !== 2)\n return context.error(`Expected one argument.`);\n const type = types$1[name];\n const parsed = [];\n for (let i = 1; i < args.length; i++) {\n const input = context.parse(args[i], i, ValueType);\n if (!input)\n return null;\n parsed.push(input);\n }\n return new Coercion(type, parsed);\n }\n evaluate(ctx) {\n if (this.type.kind === 'boolean') {\n return Boolean(this.args[0].evaluate(ctx));\n } else if (this.type.kind === 'color') {\n let input;\n let error;\n for (const arg of this.args) {\n input = arg.evaluate(ctx);\n error = null;\n if (input instanceof Color$1) {\n return input;\n } else if (typeof input === 'string') {\n const c = ctx.parseColor(input);\n if (c)\n return c;\n } else if (Array.isArray(input)) {\n if (input.length < 3 || input.length > 4) {\n error = `Invalid rbga value ${ JSON.stringify(input) }: expected an array containing either three or four numeric values.`;\n } else {\n error = validateRGBA(input[0], input[1], input[2], input[3]);\n }\n if (!error) {\n return new Color$1(input[0] / 255, input[1] / 255, input[2] / 255, input[3]);\n }\n }\n }\n throw new RuntimeError$1(error || `Could not parse color from value '${ typeof input === 'string' ? input : String(JSON.stringify(input)) }'`);\n } else if (this.type.kind === 'number') {\n let value = null;\n for (const arg of this.args) {\n value = arg.evaluate(ctx);\n if (value === null)\n return 0;\n const num = Number(value);\n if (isNaN(num))\n continue;\n return num;\n }\n throw new RuntimeError$1(`Could not convert ${ JSON.stringify(value) } to number.`);\n } else if (this.type.kind === 'formatted') {\n // There is no explicit 'to-formatted' but this coercion can be implicitly\n // created by properties that expect the 'formatted' type.\n return Formatted.fromString(toString(this.args[0].evaluate(ctx)));\n } else if (this.type.kind === 'resolvedImage') {\n return ResolvedImage.fromString(toString(this.args[0].evaluate(ctx)));\n } else {\n return toString(this.args[0].evaluate(ctx));\n }\n }\n eachChild(fn) {\n this.args.forEach(fn);\n }\n outputDefined() {\n return this.args.every(arg => arg.outputDefined());\n }\n serialize() {\n if (this.type.kind === 'formatted') {\n return new FormatExpression([{\n content: this.args[0],\n scale: null,\n font: null,\n textColor: null\n }]).serialize();\n }\n if (this.type.kind === 'resolvedImage') {\n return new ImageExpression(this.args[0]).serialize();\n }\n const serialized = [`to-${ this.type.kind }`];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n}\nvar Coercion$1 = Coercion;\n\n// \nconst geometryTypes = [\n 'Unknown',\n 'Point',\n 'LineString',\n 'Polygon'\n];\nclass EvaluationContext {\n constructor() {\n this.globals = null;\n this.feature = null;\n this.featureState = null;\n this.formattedSection = null;\n this._parseColorCache = {};\n this.availableImages = null;\n this.canonical = null;\n this.featureTileCoord = null;\n this.featureDistanceData = null;\n }\n id() {\n return this.feature && this.feature.id !== undefined ? this.feature.id : null;\n }\n geometryType() {\n return this.feature ? typeof this.feature.type === 'number' ? geometryTypes[this.feature.type] : this.feature.type : null;\n }\n geometry() {\n return this.feature && 'geometry' in this.feature ? this.feature.geometry : null;\n }\n canonicalID() {\n return this.canonical;\n }\n properties() {\n return this.feature && this.feature.properties || {};\n }\n distanceFromCenter() {\n if (this.featureTileCoord && this.featureDistanceData) {\n const c = this.featureDistanceData.center;\n const scale = this.featureDistanceData.scale;\n const {x, y} = this.featureTileCoord;\n // Calculate the distance vector `d` (left handed)\n const dX = x * scale - c[0];\n const dY = y * scale - c[1];\n // The bearing vector `b` (left handed)\n const bX = this.featureDistanceData.bearing[0];\n const bY = this.featureDistanceData.bearing[1];\n // Distance is calculated as `dot(d, v)`\n const dist = bX * dX + bY * dY;\n return dist;\n }\n return 0;\n }\n parseColor(input) {\n let cached = this._parseColorCache[input];\n if (!cached) {\n cached = this._parseColorCache[input] = Color$1.parse(input);\n }\n return cached;\n }\n}\nvar EvaluationContext$1 = EvaluationContext;\n\n// \nclass CompoundExpression {\n constructor(name, type, evaluate, args) {\n this.name = name;\n this.type = type;\n this._evaluate = evaluate;\n this.args = args;\n }\n evaluate(ctx) {\n return this._evaluate(ctx, this.args);\n }\n eachChild(fn) {\n this.args.forEach(fn);\n }\n outputDefined() {\n return false;\n }\n serialize() {\n return [this.name].concat(this.args.map(arg => arg.serialize()));\n }\n static parse(args, context) {\n const op = args[0];\n const definition = CompoundExpression.definitions[op];\n if (!definition) {\n return context.error(`Unknown expression \"${ op }\". If you wanted a literal array, use [\"literal\", [...]].`, 0);\n }\n // Now check argument types against each signature\n const type = Array.isArray(definition) ? definition[0] : definition.type;\n const availableOverloads = Array.isArray(definition) ? [[\n definition[1],\n definition[2]\n ]] : definition.overloads;\n const overloads = availableOverloads.filter(([signature]) => !Array.isArray(signature) || // varags\n signature.length === args.length - 1 // correct param count\n);\n let signatureContext = null;\n for (const [params, evaluate] of overloads) {\n // Use a fresh context for each attempted signature so that, if\n // we eventually succeed, we haven't polluted `context.errors`.\n signatureContext = new ParsingContext$1(context.registry, context.path, null, context.scope);\n // First parse all the args, potentially coercing to the\n // types expected by this overload.\n const parsedArgs = [];\n let argParseFailed = false;\n for (let i = 1; i < args.length; i++) {\n const arg = args[i];\n const expectedType = Array.isArray(params) ? params[i - 1] : params.type;\n const parsed = signatureContext.parse(arg, 1 + parsedArgs.length, expectedType);\n if (!parsed) {\n argParseFailed = true;\n break;\n }\n parsedArgs.push(parsed);\n }\n if (argParseFailed) {\n // Couldn't coerce args of this overload to expected type, move\n // on to next one.\n continue;\n }\n if (Array.isArray(params)) {\n if (params.length !== parsedArgs.length) {\n signatureContext.error(`Expected ${ params.length } arguments, but found ${ parsedArgs.length } instead.`);\n continue;\n }\n }\n for (let i = 0; i < parsedArgs.length; i++) {\n const expected = Array.isArray(params) ? params[i] : params.type;\n const arg = parsedArgs[i];\n signatureContext.concat(i + 1).checkSubtype(expected, arg.type);\n }\n if (signatureContext.errors.length === 0) {\n return new CompoundExpression(op, type, evaluate, parsedArgs);\n }\n }\n if (overloads.length === 1) {\n context.errors.push(...signatureContext.errors);\n } else {\n const expected = overloads.length ? overloads : availableOverloads;\n const signatures = expected.map(([params]) => stringifySignature(params)).join(' | ');\n const actualTypes = [];\n // For error message, re-parse arguments without trying to\n // apply any coercions\n for (let i = 1; i < args.length; i++) {\n const parsed = context.parse(args[i], 1 + actualTypes.length);\n if (!parsed)\n return null;\n actualTypes.push(toString$1(parsed.type));\n }\n context.error(`Expected arguments of type ${ signatures }, but found (${ actualTypes.join(', ') }) instead.`);\n }\n return null;\n }\n static register(registry, definitions) {\n CompoundExpression.definitions = definitions;\n for (const name in definitions) {\n registry[name] = CompoundExpression;\n }\n }\n}\nfunction stringifySignature(signature) {\n if (Array.isArray(signature)) {\n return `(${ signature.map(toString$1).join(', ') })`;\n } else {\n return `(${ toString$1(signature.type) }...)`;\n }\n}\nvar CompoundExpression$1 = CompoundExpression;\n\n// \nclass CollatorExpression {\n constructor(caseSensitive, diacriticSensitive, locale) {\n this.type = CollatorType;\n this.locale = locale;\n this.caseSensitive = caseSensitive;\n this.diacriticSensitive = diacriticSensitive;\n }\n static parse(args, context) {\n if (args.length !== 2)\n return context.error(`Expected one argument.`);\n const options = args[1];\n if (typeof options !== 'object' || Array.isArray(options))\n return context.error(`Collator options argument must be an object.`);\n const caseSensitive = context.parse(options['case-sensitive'] === undefined ? false : options['case-sensitive'], 1, BooleanType);\n if (!caseSensitive)\n return null;\n const diacriticSensitive = context.parse(options['diacritic-sensitive'] === undefined ? false : options['diacritic-sensitive'], 1, BooleanType);\n if (!diacriticSensitive)\n return null;\n let locale = null;\n if (options['locale']) {\n locale = context.parse(options['locale'], 1, StringType);\n if (!locale)\n return null;\n }\n return new CollatorExpression(caseSensitive, diacriticSensitive, locale);\n }\n evaluate(ctx) {\n return new Collator(this.caseSensitive.evaluate(ctx), this.diacriticSensitive.evaluate(ctx), this.locale ? this.locale.evaluate(ctx) : null);\n }\n eachChild(fn) {\n fn(this.caseSensitive);\n fn(this.diacriticSensitive);\n if (this.locale) {\n fn(this.locale);\n }\n }\n outputDefined() {\n // Technically the set of possible outputs is the combinatoric set of Collators produced\n // by all possible outputs of locale/caseSensitive/diacriticSensitive\n // But for the primary use of Collators in comparison operators, we ignore the Collator's\n // possible outputs anyway, so we can get away with leaving this false for now.\n return false;\n }\n serialize() {\n const options = {};\n options['case-sensitive'] = this.caseSensitive.serialize();\n options['diacritic-sensitive'] = this.diacriticSensitive.serialize();\n if (this.locale) {\n options['locale'] = this.locale.serialize();\n }\n return [\n 'collator',\n options\n ];\n }\n}\n\n// \n// minX, minY, maxX, maxY\nconst EXTENT = 8192;\nfunction updateBBox(bbox, coord) {\n bbox[0] = Math.min(bbox[0], coord[0]);\n bbox[1] = Math.min(bbox[1], coord[1]);\n bbox[2] = Math.max(bbox[2], coord[0]);\n bbox[3] = Math.max(bbox[3], coord[1]);\n}\nfunction mercatorXfromLng(lng) {\n return (180 + lng) / 360;\n}\nfunction mercatorYfromLat(lat) {\n return (180 - 180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + lat * Math.PI / 360))) / 360;\n}\nfunction boxWithinBox(bbox1, bbox2) {\n if (bbox1[0] <= bbox2[0])\n return false;\n if (bbox1[2] >= bbox2[2])\n return false;\n if (bbox1[1] <= bbox2[1])\n return false;\n if (bbox1[3] >= bbox2[3])\n return false;\n return true;\n}\nfunction getTileCoordinates(p, canonical) {\n const x = mercatorXfromLng(p[0]);\n const y = mercatorYfromLat(p[1]);\n const tilesAtZoom = Math.pow(2, canonical.z);\n return [\n Math.round(x * tilesAtZoom * EXTENT),\n Math.round(y * tilesAtZoom * EXTENT)\n ];\n}\nfunction onBoundary(p, p1, p2) {\n const x1 = p[0] - p1[0];\n const y1 = p[1] - p1[1];\n const x2 = p[0] - p2[0];\n const y2 = p[1] - p2[1];\n return x1 * y2 - x2 * y1 === 0 && x1 * x2 <= 0 && y1 * y2 <= 0;\n}\nfunction rayIntersect(p, p1, p2) {\n return p1[1] > p[1] !== p2[1] > p[1] && p[0] < (p2[0] - p1[0]) * (p[1] - p1[1]) / (p2[1] - p1[1]) + p1[0];\n}\n// ray casting algorithm for detecting if point is in polygon\nfunction pointWithinPolygon(point, rings) {\n let inside = false;\n for (let i = 0, len = rings.length; i < len; i++) {\n const ring = rings[i];\n for (let j = 0, len2 = ring.length; j < len2 - 1; j++) {\n if (onBoundary(point, ring[j], ring[j + 1]))\n return false;\n if (rayIntersect(point, ring[j], ring[j + 1]))\n inside = !inside;\n }\n }\n return inside;\n}\nfunction pointWithinPolygons(point, polygons) {\n for (let i = 0; i < polygons.length; i++) {\n if (pointWithinPolygon(point, polygons[i]))\n return true;\n }\n return false;\n}\nfunction perp(v1, v2) {\n return v1[0] * v2[1] - v1[1] * v2[0];\n}\n// check if p1 and p2 are in different sides of line segment q1->q2\nfunction twoSided(p1, p2, q1, q2) {\n // q1->p1 (x1, y1), q1->p2 (x2, y2), q1->q2 (x3, y3)\n const x1 = p1[0] - q1[0];\n const y1 = p1[1] - q1[1];\n const x2 = p2[0] - q1[0];\n const y2 = p2[1] - q1[1];\n const x3 = q2[0] - q1[0];\n const y3 = q2[1] - q1[1];\n const det1 = x1 * y3 - x3 * y1;\n const det2 = x2 * y3 - x3 * y2;\n if (det1 > 0 && det2 < 0 || det1 < 0 && det2 > 0)\n return true;\n return false;\n}\n// a, b are end points for line segment1, c and d are end points for line segment2\nfunction lineIntersectLine(a, b, c, d) {\n // check if two segments are parallel or not\n // precondition is end point a, b is inside polygon, if line a->b is\n // parallel to polygon edge c->d, then a->b won't intersect with c->d\n const vectorP = [\n b[0] - a[0],\n b[1] - a[1]\n ];\n const vectorQ = [\n d[0] - c[0],\n d[1] - c[1]\n ];\n if (perp(vectorQ, vectorP) === 0)\n return false;\n // If lines are intersecting with each other, the relative location should be:\n // a and b lie in different sides of segment c->d\n // c and d lie in different sides of segment a->b\n if (twoSided(a, b, c, d) && twoSided(c, d, a, b))\n return true;\n return false;\n}\nfunction lineIntersectPolygon(p1, p2, polygon) {\n for (const ring of polygon) {\n // loop through every edge of the ring\n for (let j = 0; j < ring.length - 1; ++j) {\n if (lineIntersectLine(p1, p2, ring[j], ring[j + 1])) {\n return true;\n }\n }\n }\n return false;\n}\nfunction lineStringWithinPolygon(line, polygon) {\n // First, check if geometry points of line segments are all inside polygon\n for (let i = 0; i < line.length; ++i) {\n if (!pointWithinPolygon(line[i], polygon)) {\n return false;\n }\n }\n // Second, check if there is line segment intersecting polygon edge\n for (let i = 0; i < line.length - 1; ++i) {\n if (lineIntersectPolygon(line[i], line[i + 1], polygon)) {\n return false;\n }\n }\n return true;\n}\nfunction lineStringWithinPolygons(line, polygons) {\n for (let i = 0; i < polygons.length; i++) {\n if (lineStringWithinPolygon(line, polygons[i]))\n return true;\n }\n return false;\n}\nfunction getTilePolygon(coordinates, bbox, canonical) {\n const polygon = [];\n for (let i = 0; i < coordinates.length; i++) {\n const ring = [];\n for (let j = 0; j < coordinates[i].length; j++) {\n const coord = getTileCoordinates(coordinates[i][j], canonical);\n updateBBox(bbox, coord);\n ring.push(coord);\n }\n polygon.push(ring);\n }\n return polygon;\n}\nfunction getTilePolygons(coordinates, bbox, canonical) {\n const polygons = [];\n for (let i = 0; i < coordinates.length; i++) {\n const polygon = getTilePolygon(coordinates[i], bbox, canonical);\n polygons.push(polygon);\n }\n return polygons;\n}\nfunction updatePoint(p, bbox, polyBBox, worldSize) {\n if (p[0] < polyBBox[0] || p[0] > polyBBox[2]) {\n const halfWorldSize = worldSize * 0.5;\n let shift = p[0] - polyBBox[0] > halfWorldSize ? -worldSize : polyBBox[0] - p[0] > halfWorldSize ? worldSize : 0;\n if (shift === 0) {\n shift = p[0] - polyBBox[2] > halfWorldSize ? -worldSize : polyBBox[2] - p[0] > halfWorldSize ? worldSize : 0;\n }\n p[0] += shift;\n }\n updateBBox(bbox, p);\n}\nfunction resetBBox(bbox) {\n bbox[0] = bbox[1] = Infinity;\n bbox[2] = bbox[3] = -Infinity;\n}\nfunction getTilePoints(geometry, pointBBox, polyBBox, canonical) {\n const worldSize = Math.pow(2, canonical.z) * EXTENT;\n const shifts = [\n canonical.x * EXTENT,\n canonical.y * EXTENT\n ];\n const tilePoints = [];\n if (!geometry)\n return tilePoints;\n for (const points of geometry) {\n for (const point of points) {\n const p = [\n point.x + shifts[0],\n point.y + shifts[1]\n ];\n updatePoint(p, pointBBox, polyBBox, worldSize);\n tilePoints.push(p);\n }\n }\n return tilePoints;\n}\nfunction getTileLines(geometry, lineBBox, polyBBox, canonical) {\n const worldSize = Math.pow(2, canonical.z) * EXTENT;\n const shifts = [\n canonical.x * EXTENT,\n canonical.y * EXTENT\n ];\n const tileLines = [];\n if (!geometry)\n return tileLines;\n for (const line of geometry) {\n const tileLine = [];\n for (const point of line) {\n const p = [\n point.x + shifts[0],\n point.y + shifts[1]\n ];\n updateBBox(lineBBox, p);\n tileLine.push(p);\n }\n tileLines.push(tileLine);\n }\n if (lineBBox[2] - lineBBox[0] <= worldSize / 2) {\n resetBBox(lineBBox);\n for (const line of tileLines) {\n for (const p of line) {\n updatePoint(p, lineBBox, polyBBox, worldSize);\n }\n }\n }\n return tileLines;\n}\nfunction pointsWithinPolygons(ctx, polygonGeometry) {\n const pointBBox = [\n Infinity,\n Infinity,\n -Infinity,\n -Infinity\n ];\n const polyBBox = [\n Infinity,\n Infinity,\n -Infinity,\n -Infinity\n ];\n const canonical = ctx.canonicalID();\n if (!canonical) {\n return false;\n }\n if (polygonGeometry.type === 'Polygon') {\n const tilePolygon = getTilePolygon(polygonGeometry.coordinates, polyBBox, canonical);\n const tilePoints = getTilePoints(ctx.geometry(), pointBBox, polyBBox, canonical);\n if (!boxWithinBox(pointBBox, polyBBox))\n return false;\n for (const point of tilePoints) {\n if (!pointWithinPolygon(point, tilePolygon))\n return false;\n }\n }\n if (polygonGeometry.type === 'MultiPolygon') {\n const tilePolygons = getTilePolygons(polygonGeometry.coordinates, polyBBox, canonical);\n const tilePoints = getTilePoints(ctx.geometry(), pointBBox, polyBBox, canonical);\n if (!boxWithinBox(pointBBox, polyBBox))\n return false;\n for (const point of tilePoints) {\n if (!pointWithinPolygons(point, tilePolygons))\n return false;\n }\n }\n return true;\n}\nfunction linesWithinPolygons(ctx, polygonGeometry) {\n const lineBBox = [\n Infinity,\n Infinity,\n -Infinity,\n -Infinity\n ];\n const polyBBox = [\n Infinity,\n Infinity,\n -Infinity,\n -Infinity\n ];\n const canonical = ctx.canonicalID();\n if (!canonical) {\n return false;\n }\n if (polygonGeometry.type === 'Polygon') {\n const tilePolygon = getTilePolygon(polygonGeometry.coordinates, polyBBox, canonical);\n const tileLines = getTileLines(ctx.geometry(), lineBBox, polyBBox, canonical);\n if (!boxWithinBox(lineBBox, polyBBox))\n return false;\n for (const line of tileLines) {\n if (!lineStringWithinPolygon(line, tilePolygon))\n return false;\n }\n }\n if (polygonGeometry.type === 'MultiPolygon') {\n const tilePolygons = getTilePolygons(polygonGeometry.coordinates, polyBBox, canonical);\n const tileLines = getTileLines(ctx.geometry(), lineBBox, polyBBox, canonical);\n if (!boxWithinBox(lineBBox, polyBBox))\n return false;\n for (const line of tileLines) {\n if (!lineStringWithinPolygons(line, tilePolygons))\n return false;\n }\n }\n return true;\n}\nclass Within {\n constructor(geojson, geometries) {\n this.type = BooleanType;\n this.geojson = geojson;\n this.geometries = geometries;\n }\n static parse(args, context) {\n if (args.length !== 2)\n return context.error(`'within' expression requires exactly one argument, but found ${ args.length - 1 } instead.`);\n if (isValue(args[1])) {\n const geojson = args[1];\n if (geojson.type === 'FeatureCollection') {\n for (let i = 0; i < geojson.features.length; ++i) {\n const type = geojson.features[i].geometry.type;\n if (type === 'Polygon' || type === 'MultiPolygon') {\n return new Within(geojson, geojson.features[i].geometry);\n }\n }\n } else if (geojson.type === 'Feature') {\n const type = geojson.geometry.type;\n if (type === 'Polygon' || type === 'MultiPolygon') {\n return new Within(geojson, geojson.geometry);\n }\n } else if (geojson.type === 'Polygon' || geojson.type === 'MultiPolygon') {\n return new Within(geojson, geojson);\n }\n }\n return context.error(`'within' expression requires valid geojson object that contains polygon geometry type.`);\n }\n evaluate(ctx) {\n if (ctx.geometry() != null && ctx.canonicalID() != null) {\n if (ctx.geometryType() === 'Point') {\n return pointsWithinPolygons(ctx, this.geometries);\n } else if (ctx.geometryType() === 'LineString') {\n return linesWithinPolygons(ctx, this.geometries);\n }\n }\n return false;\n }\n eachChild() {\n }\n outputDefined() {\n return true;\n }\n serialize() {\n return [\n 'within',\n this.geojson\n ];\n }\n}\nvar Within$1 = Within;\n\n// \nfunction isFeatureConstant(e) {\n if (e instanceof CompoundExpression$1) {\n if (e.name === 'get' && e.args.length === 1) {\n return false;\n } else if (e.name === 'feature-state') {\n return false;\n } else if (e.name === 'has' && e.args.length === 1) {\n return false;\n } else if (e.name === 'properties' || e.name === 'geometry-type' || e.name === 'id') {\n return false;\n } else if (/^filter-/.test(e.name)) {\n return false;\n }\n }\n if (e instanceof Within$1) {\n return false;\n }\n let result = true;\n e.eachChild(arg => {\n if (result && !isFeatureConstant(arg)) {\n result = false;\n }\n });\n return result;\n}\nfunction isStateConstant(e) {\n if (e instanceof CompoundExpression$1) {\n if (e.name === 'feature-state') {\n return false;\n }\n }\n let result = true;\n e.eachChild(arg => {\n if (result && !isStateConstant(arg)) {\n result = false;\n }\n });\n return result;\n}\nfunction isGlobalPropertyConstant(e, properties) {\n if (e instanceof CompoundExpression$1 && properties.indexOf(e.name) >= 0) {\n return false;\n }\n let result = true;\n e.eachChild(arg => {\n if (result && !isGlobalPropertyConstant(arg, properties)) {\n result = false;\n }\n });\n return result;\n}\n\n// \nclass Var {\n constructor(name, boundExpression) {\n this.type = boundExpression.type;\n this.name = name;\n this.boundExpression = boundExpression;\n }\n static parse(args, context) {\n if (args.length !== 2 || typeof args[1] !== 'string')\n return context.error(`'var' expression requires exactly one string literal argument.`);\n const name = args[1];\n if (!context.scope.has(name)) {\n return context.error(`Unknown variable \"${ name }\". Make sure \"${ name }\" has been bound in an enclosing \"let\" expression before using it.`, 1);\n }\n return new Var(name, context.scope.get(name));\n }\n evaluate(ctx) {\n return this.boundExpression.evaluate(ctx);\n }\n eachChild() {\n }\n outputDefined() {\n return false;\n }\n serialize() {\n return [\n 'var',\n this.name\n ];\n }\n}\nvar Var$1 = Var;\n\n// \n/**\n * State associated parsing at a given point in an expression tree.\n * @private\n */\nclass ParsingContext {\n // The expected type of this expression. Provided only to allow Expression\n // implementations to infer argument types: Expression#parse() need not\n // check that the output type of the parsed expression matches\n // `expectedType`.\n constructor(registry, path = [], expectedType, scope = new Scope$1(), errors = []) {\n this.registry = registry;\n this.path = path;\n this.key = path.map(part => `[${ part }]`).join('');\n this.scope = scope;\n this.errors = errors;\n this.expectedType = expectedType;\n }\n /**\n * @param expr the JSON expression to parse\n * @param index the optional argument index if this expression is an argument of a parent expression that's being parsed\n * @param options\n * @param options.omitTypeAnnotations set true to omit inferred type annotations. Caller beware: with this option set, the parsed expression's type will NOT satisfy `expectedType` if it would normally be wrapped in an inferred annotation.\n * @private\n */\n parse(expr, index, expectedType, bindings, options = {}) {\n if (index) {\n return this.concat(index, expectedType, bindings)._parse(expr, options);\n }\n return this._parse(expr, options);\n }\n _parse(expr, options) {\n if (expr === null || typeof expr === 'string' || typeof expr === 'boolean' || typeof expr === 'number') {\n expr = [\n 'literal',\n expr\n ];\n }\n function annotate(parsed, type, typeAnnotation) {\n if (typeAnnotation === 'assert') {\n return new Assertion$1(type, [parsed]);\n } else if (typeAnnotation === 'coerce') {\n return new Coercion$1(type, [parsed]);\n } else {\n return parsed;\n }\n }\n if (Array.isArray(expr)) {\n if (expr.length === 0) {\n return this.error(`Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []].`);\n }\n const op = expr[0];\n if (typeof op !== 'string') {\n this.error(`Expression name must be a string, but found ${ typeof op } instead. If you wanted a literal array, use [\"literal\", [...]].`, 0);\n return null;\n }\n const Expr = this.registry[op];\n if (Expr) {\n let parsed = Expr.parse(expr, this);\n if (!parsed)\n return null;\n if (this.expectedType) {\n const expected = this.expectedType;\n const actual = parsed.type;\n // When we expect a number, string, boolean, or array but have a value, wrap it in an assertion.\n // When we expect a color or formatted string, but have a string or value, wrap it in a coercion.\n // Otherwise, we do static type-checking.\n //\n // These behaviors are overridable for:\n // * The \"coalesce\" operator, which needs to omit type annotations.\n // * String-valued properties (e.g. `text-field`), where coercion is more convenient than assertion.\n //\n if ((expected.kind === 'string' || expected.kind === 'number' || expected.kind === 'boolean' || expected.kind === 'object' || expected.kind === 'array') && actual.kind === 'value') {\n parsed = annotate(parsed, expected, options.typeAnnotation || 'assert');\n } else if ((expected.kind === 'color' || expected.kind === 'formatted' || expected.kind === 'resolvedImage') && (actual.kind === 'value' || actual.kind === 'string')) {\n parsed = annotate(parsed, expected, options.typeAnnotation || 'coerce');\n } else if (this.checkSubtype(expected, actual)) {\n return null;\n }\n }\n // If an expression's arguments are all literals, we can evaluate\n // it immediately and replace it with a literal value in the\n // parsed/compiled result. Expressions that expect an image should\n // not be resolved here so we can later get the available images.\n if (!(parsed instanceof Literal$1) && parsed.type.kind !== 'resolvedImage' && isConstant(parsed)) {\n const ec = new EvaluationContext$1();\n try {\n parsed = new Literal$1(parsed.type, parsed.evaluate(ec));\n } catch (e) {\n this.error(e.message);\n return null;\n }\n }\n return parsed;\n }\n return this.error(`Unknown expression \"${ op }\". If you wanted a literal array, use [\"literal\", [...]].`, 0);\n } else if (typeof expr === 'undefined') {\n return this.error(`'undefined' value invalid. Use null instead.`);\n } else if (typeof expr === 'object') {\n return this.error(`Bare objects invalid. Use [\"literal\", {...}] instead.`);\n } else {\n return this.error(`Expected an array, but found ${ typeof expr } instead.`);\n }\n }\n /**\n * Returns a copy of this context suitable for parsing the subexpression at\n * index `index`, optionally appending to 'let' binding map.\n *\n * Note that `errors` property, intended for collecting errors while\n * parsing, is copied by reference rather than cloned.\n * @private\n */\n concat(index, expectedType, bindings) {\n const path = typeof index === 'number' ? this.path.concat(index) : this.path;\n const scope = bindings ? this.scope.concat(bindings) : this.scope;\n return new ParsingContext(this.registry, path, expectedType || null, scope, this.errors);\n }\n /**\n * Push a parsing (or type checking) error into the `this.errors`\n * @param error The message\n * @param keys Optionally specify the source of the error at a child\n * of the current expression at `this.key`.\n * @private\n */\n error(error, ...keys) {\n const key = `${ this.key }${ keys.map(k => `[${ k }]`).join('') }`;\n this.errors.push(new ParsingError$1(key, error));\n }\n /**\n * Returns null if `t` is a subtype of `expected`; otherwise returns an\n * error message and also pushes it to `this.errors`.\n */\n checkSubtype(expected, t) {\n const error = checkSubtype(expected, t);\n if (error)\n this.error(error);\n return error;\n }\n}\nvar ParsingContext$1 = ParsingContext;\nfunction isConstant(expression) {\n if (expression instanceof Var$1) {\n return isConstant(expression.boundExpression);\n } else if (expression instanceof CompoundExpression$1 && expression.name === 'error') {\n return false;\n } else if (expression instanceof CollatorExpression) {\n // Although the results of a Collator expression with fixed arguments\n // generally shouldn't change between executions, we can't serialize them\n // as constant expressions because results change based on environment.\n return false;\n } else if (expression instanceof Within$1) {\n return false;\n }\n const isTypeAnnotation = expression instanceof Coercion$1 || expression instanceof Assertion$1;\n let childrenConstant = true;\n expression.eachChild(child => {\n // We can _almost_ assume that if `expressions` children are constant,\n // they would already have been evaluated to Literal values when they\n // were parsed. Type annotations are the exception, because they might\n // have been inferred and added after a child was parsed.\n // So we recurse into isConstant() for the children of type annotations,\n // but otherwise simply check whether they are Literals.\n if (isTypeAnnotation) {\n childrenConstant = childrenConstant && isConstant(child);\n } else {\n childrenConstant = childrenConstant && child instanceof Literal$1;\n }\n });\n if (!childrenConstant) {\n return false;\n }\n return isFeatureConstant(expression) && isGlobalPropertyConstant(expression, [\n 'zoom',\n 'heatmap-density',\n 'line-progress',\n 'sky-radial-progress',\n 'accumulated',\n 'is-supported-script',\n 'pitch',\n 'distance-from-center'\n ]);\n}\n\n// \n/**\n * Returns the index of the last stop <= input, or 0 if it doesn't exist.\n * @private\n */\nfunction findStopLessThanOrEqualTo(stops, input) {\n const lastIndex = stops.length - 1;\n let lowerIndex = 0;\n let upperIndex = lastIndex;\n let currentIndex = 0;\n let currentValue, nextValue;\n while (lowerIndex <= upperIndex) {\n currentIndex = Math.floor((lowerIndex + upperIndex) / 2);\n currentValue = stops[currentIndex];\n nextValue = stops[currentIndex + 1];\n if (currentValue <= input) {\n if (currentIndex === lastIndex || input < nextValue) {\n // Search complete\n return currentIndex;\n }\n lowerIndex = currentIndex + 1;\n } else if (currentValue > input) {\n upperIndex = currentIndex - 1;\n } else {\n throw new RuntimeError$1('Input is not a number.');\n }\n }\n return 0;\n}\n\n// \nclass Step {\n constructor(type, input, stops) {\n this.type = type;\n this.input = input;\n this.labels = [];\n this.outputs = [];\n for (const [label, expression] of stops) {\n this.labels.push(label);\n this.outputs.push(expression);\n }\n }\n static parse(args, context) {\n if (args.length - 1 < 4) {\n return context.error(`Expected at least 4 arguments, but found only ${ args.length - 1 }.`);\n }\n if ((args.length - 1) % 2 !== 0) {\n return context.error(`Expected an even number of arguments.`);\n }\n const input = context.parse(args[1], 1, NumberType);\n if (!input)\n return null;\n const stops = [];\n let outputType = null;\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n for (let i = 1; i < args.length; i += 2) {\n const label = i === 1 ? -Infinity : args[i];\n const value = args[i + 1];\n const labelKey = i;\n const valueKey = i + 1;\n if (typeof label !== 'number') {\n return context.error('Input/output pairs for \"step\" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey);\n }\n if (stops.length && stops[stops.length - 1][0] >= label) {\n return context.error('Input/output pairs for \"step\" expressions must be arranged with input values in strictly ascending order.', labelKey);\n }\n const parsed = context.parse(value, valueKey, outputType);\n if (!parsed)\n return null;\n outputType = outputType || parsed.type;\n stops.push([\n label,\n parsed\n ]);\n }\n return new Step(outputType, input, stops);\n }\n evaluate(ctx) {\n const labels = this.labels;\n const outputs = this.outputs;\n if (labels.length === 1) {\n return outputs[0].evaluate(ctx);\n }\n const value = this.input.evaluate(ctx);\n if (value <= labels[0]) {\n return outputs[0].evaluate(ctx);\n }\n const stopCount = labels.length;\n if (value >= labels[stopCount - 1]) {\n return outputs[stopCount - 1].evaluate(ctx);\n }\n const index = findStopLessThanOrEqualTo(labels, value);\n return outputs[index].evaluate(ctx);\n }\n eachChild(fn) {\n fn(this.input);\n for (const expression of this.outputs) {\n fn(expression);\n }\n }\n outputDefined() {\n return this.outputs.every(out => out.outputDefined());\n }\n serialize() {\n const serialized = [\n 'step',\n this.input.serialize()\n ];\n for (let i = 0; i < this.labels.length; i++) {\n if (i > 0) {\n serialized.push(this.labels[i]);\n }\n serialized.push(this.outputs[i].serialize());\n }\n return serialized;\n }\n}\nvar Step$1 = Step;\n\n/*\n * Copyright (C) 2008 Apple Inc. All Rights Reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Ported from Webkit\n * http://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/UnitBezier.h\n */\n\nvar unitbezier = UnitBezier;\nfunction UnitBezier(p1x, p1y, p2x, p2y) {\n // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1).\n this.cx = 3 * p1x;\n this.bx = 3 * (p2x - p1x) - this.cx;\n this.ax = 1 - this.cx - this.bx;\n this.cy = 3 * p1y;\n this.by = 3 * (p2y - p1y) - this.cy;\n this.ay = 1 - this.cy - this.by;\n this.p1x = p1x;\n this.p1y = p2y;\n this.p2x = p2x;\n this.p2y = p2y;\n}\nUnitBezier.prototype.sampleCurveX = function (t) {\n // `ax t^3 + bx t^2 + cx t' expanded using Horner's rule.\n return ((this.ax * t + this.bx) * t + this.cx) * t;\n};\nUnitBezier.prototype.sampleCurveY = function (t) {\n return ((this.ay * t + this.by) * t + this.cy) * t;\n};\nUnitBezier.prototype.sampleCurveDerivativeX = function (t) {\n return (3 * this.ax * t + 2 * this.bx) * t + this.cx;\n};\nUnitBezier.prototype.solveCurveX = function (x, epsilon) {\n if (typeof epsilon === 'undefined')\n epsilon = 0.000001;\n var t0, t1, t2, x2, i;\n // First try a few iterations of Newton's method -- normally very fast.\n for (t2 = x, i = 0; i < 8; i++) {\n x2 = this.sampleCurveX(t2) - x;\n if (Math.abs(x2) < epsilon)\n return t2;\n var d2 = this.sampleCurveDerivativeX(t2);\n if (Math.abs(d2) < 0.000001)\n break;\n t2 = t2 - x2 / d2;\n }\n // Fall back to the bisection method for reliability.\n t0 = 0;\n t1 = 1;\n t2 = x;\n if (t2 < t0)\n return t0;\n if (t2 > t1)\n return t1;\n while (t0 < t1) {\n x2 = this.sampleCurveX(t2);\n if (Math.abs(x2 - x) < epsilon)\n return t2;\n if (x > x2) {\n t0 = t2;\n } else {\n t1 = t2;\n }\n t2 = (t1 - t0) * 0.5 + t0;\n }\n // Failure.\n return t2;\n};\nUnitBezier.prototype.solve = function (x, epsilon) {\n return this.sampleCurveY(this.solveCurveX(x, epsilon));\n};\n\nvar UnitBezier$1 = /*@__PURE__*/getDefaultExportFromCjs(unitbezier);\n\n// \nfunction number(a, b, t) {\n return a * (1 - t) + b * t;\n}\nfunction color(from, to, t) {\n return new Color$1(number(from.r, to.r, t), number(from.g, to.g, t), number(from.b, to.b, t), number(from.a, to.a, t));\n}\nfunction array(from, to, t) {\n return from.map((d, i) => {\n return number(d, to[i], t);\n });\n}\n\nvar interpolate = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tnumber: number,\n\tcolor: color,\n\tarray: array\n});\n\n// \n// Constants\nconst Xn = 0.95047,\n // D65 standard referent\n Yn = 1, Zn = 1.08883, t0 = 4 / 29, t1 = 6 / 29, t2 = 3 * t1 * t1, t3 = t1 * t1 * t1, deg2rad$1 = Math.PI / 180, rad2deg = 180 / Math.PI;\n// Utilities\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\nfunction xyz2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\nfunction rgb2xyz(x) {\n x /= 255;\n return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n// LAB\nfunction rgbToLab(rgbColor) {\n const b = rgb2xyz(rgbColor.r), a = rgb2xyz(rgbColor.g), l = rgb2xyz(rgbColor.b), x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn), y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.072175 * l) / Yn), z = xyz2lab((0.0193339 * b + 0.119192 * a + 0.9503041 * l) / Zn);\n return {\n l: 116 * y - 16,\n a: 500 * (x - y),\n b: 200 * (y - z),\n alpha: rgbColor.a\n };\n}\nfunction labToRgb(labColor) {\n let y = (labColor.l + 16) / 116, x = isNaN(labColor.a) ? y : y + labColor.a / 500, z = isNaN(labColor.b) ? y : y - labColor.b / 200;\n y = Yn * lab2xyz(y);\n x = Xn * lab2xyz(x);\n z = Zn * lab2xyz(z);\n return new Color$1(xyz2rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n xyz2rgb(-0.969266 * x + 1.8760108 * y + 0.041556 * z), xyz2rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z), labColor.alpha);\n}\nfunction interpolateLab(from, to, t) {\n return {\n l: number(from.l, to.l, t),\n a: number(from.a, to.a, t),\n b: number(from.b, to.b, t),\n alpha: number(from.alpha, to.alpha, t)\n };\n}\n// HCL\nfunction rgbToHcl(rgbColor) {\n const {l, a, b} = rgbToLab(rgbColor);\n const h = Math.atan2(b, a) * rad2deg;\n return {\n h: h < 0 ? h + 360 : h,\n c: Math.sqrt(a * a + b * b),\n l,\n alpha: rgbColor.a\n };\n}\nfunction hclToRgb(hclColor) {\n const h = hclColor.h * deg2rad$1, c = hclColor.c, l = hclColor.l;\n return labToRgb({\n l,\n a: Math.cos(h) * c,\n b: Math.sin(h) * c,\n alpha: hclColor.alpha\n });\n}\nfunction interpolateHue(a, b, t) {\n const d = b - a;\n return a + t * (d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d);\n}\nfunction interpolateHcl(from, to, t) {\n return {\n h: interpolateHue(from.h, to.h, t),\n c: number(from.c, to.c, t),\n l: number(from.l, to.l, t),\n alpha: number(from.alpha, to.alpha, t)\n };\n}\nconst lab = {\n forward: rgbToLab,\n reverse: labToRgb,\n interpolate: interpolateLab\n};\nconst hcl = {\n forward: rgbToHcl,\n reverse: hclToRgb,\n interpolate: interpolateHcl\n};\n\n// \nclass Interpolate {\n constructor(type, operator, interpolation, input, stops) {\n this.type = type;\n this.operator = operator;\n this.interpolation = interpolation;\n this.input = input;\n this.labels = [];\n this.outputs = [];\n for (const [label, expression] of stops) {\n this.labels.push(label);\n this.outputs.push(expression);\n }\n }\n static interpolationFactor(interpolation, input, lower, upper) {\n let t = 0;\n if (interpolation.name === 'exponential') {\n t = exponentialInterpolation(input, interpolation.base, lower, upper);\n } else if (interpolation.name === 'linear') {\n t = exponentialInterpolation(input, 1, lower, upper);\n } else if (interpolation.name === 'cubic-bezier') {\n const c = interpolation.controlPoints;\n const ub = new UnitBezier$1(c[0], c[1], c[2], c[3]);\n t = ub.solve(exponentialInterpolation(input, 1, lower, upper));\n }\n return t;\n }\n static parse(args, context) {\n let [operator, interpolation, input, ...rest] = args;\n if (!Array.isArray(interpolation) || interpolation.length === 0) {\n return context.error(`Expected an interpolation type expression.`, 1);\n }\n if (interpolation[0] === 'linear') {\n interpolation = { name: 'linear' };\n } else if (interpolation[0] === 'exponential') {\n const base = interpolation[1];\n if (typeof base !== 'number')\n return context.error(`Exponential interpolation requires a numeric base.`, 1, 1);\n interpolation = {\n name: 'exponential',\n base\n };\n } else if (interpolation[0] === 'cubic-bezier') {\n const controlPoints = interpolation.slice(1);\n if (controlPoints.length !== 4 || controlPoints.some(t => typeof t !== 'number' || t < 0 || t > 1)) {\n return context.error('Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.', 1);\n }\n interpolation = {\n name: 'cubic-bezier',\n controlPoints: controlPoints\n };\n } else {\n return context.error(`Unknown interpolation type ${ String(interpolation[0]) }`, 1, 0);\n }\n if (args.length - 1 < 4) {\n return context.error(`Expected at least 4 arguments, but found only ${ args.length - 1 }.`);\n }\n if ((args.length - 1) % 2 !== 0) {\n return context.error(`Expected an even number of arguments.`);\n }\n input = context.parse(input, 2, NumberType);\n if (!input)\n return null;\n const stops = [];\n let outputType = null;\n if (operator === 'interpolate-hcl' || operator === 'interpolate-lab') {\n outputType = ColorType;\n } else if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n for (let i = 0; i < rest.length; i += 2) {\n const label = rest[i];\n const value = rest[i + 1];\n const labelKey = i + 3;\n const valueKey = i + 4;\n if (typeof label !== 'number') {\n return context.error('Input/output pairs for \"interpolate\" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey);\n }\n if (stops.length && stops[stops.length - 1][0] >= label) {\n return context.error('Input/output pairs for \"interpolate\" expressions must be arranged with input values in strictly ascending order.', labelKey);\n }\n const parsed = context.parse(value, valueKey, outputType);\n if (!parsed)\n return null;\n outputType = outputType || parsed.type;\n stops.push([\n label,\n parsed\n ]);\n }\n if (outputType.kind !== 'number' && outputType.kind !== 'color' && !(outputType.kind === 'array' && outputType.itemType.kind === 'number' && typeof outputType.N === 'number')) {\n return context.error(`Type ${ toString$1(outputType) } is not interpolatable.`);\n }\n return new Interpolate(outputType, operator, interpolation, input, stops);\n }\n evaluate(ctx) {\n const labels = this.labels;\n const outputs = this.outputs;\n if (labels.length === 1) {\n return outputs[0].evaluate(ctx);\n }\n const value = this.input.evaluate(ctx);\n if (value <= labels[0]) {\n return outputs[0].evaluate(ctx);\n }\n const stopCount = labels.length;\n if (value >= labels[stopCount - 1]) {\n return outputs[stopCount - 1].evaluate(ctx);\n }\n const index = findStopLessThanOrEqualTo(labels, value);\n const lower = labels[index];\n const upper = labels[index + 1];\n const t = Interpolate.interpolationFactor(this.interpolation, value, lower, upper);\n const outputLower = outputs[index].evaluate(ctx);\n const outputUpper = outputs[index + 1].evaluate(ctx);\n if (this.operator === 'interpolate') {\n return interpolate[this.type.kind.toLowerCase()](outputLower, outputUpper, t); // eslint-disable-line import/namespace\n } else if (this.operator === 'interpolate-hcl') {\n return hcl.reverse(hcl.interpolate(hcl.forward(outputLower), hcl.forward(outputUpper), t));\n } else {\n return lab.reverse(lab.interpolate(lab.forward(outputLower), lab.forward(outputUpper), t));\n }\n }\n eachChild(fn) {\n fn(this.input);\n for (const expression of this.outputs) {\n fn(expression);\n }\n }\n outputDefined() {\n return this.outputs.every(out => out.outputDefined());\n }\n serialize() {\n let interpolation;\n if (this.interpolation.name === 'linear') {\n interpolation = ['linear'];\n } else if (this.interpolation.name === 'exponential') {\n if (this.interpolation.base === 1) {\n interpolation = ['linear'];\n } else {\n interpolation = [\n 'exponential',\n this.interpolation.base\n ];\n }\n } else {\n interpolation = ['cubic-bezier'].concat(this.interpolation.controlPoints);\n }\n const serialized = [\n this.operator,\n interpolation,\n this.input.serialize()\n ];\n for (let i = 0; i < this.labels.length; i++) {\n serialized.push(this.labels[i], this.outputs[i].serialize());\n }\n return serialized;\n }\n}\n/**\n * Returns a ratio that can be used to interpolate between exponential function\n * stops.\n * How it works: Two consecutive stop values define a (scaled and shifted) exponential function `f(x) = a * base^x + b`, where `base` is the user-specified base,\n * and `a` and `b` are constants affording sufficient degrees of freedom to fit\n * the function to the given stops.\n *\n * Here's a bit of algebra that lets us compute `f(x)` directly from the stop\n * values without explicitly solving for `a` and `b`:\n *\n * First stop value: `f(x0) = y0 = a * base^x0 + b`\n * Second stop value: `f(x1) = y1 = a * base^x1 + b`\n * => `y1 - y0 = a(base^x1 - base^x0)`\n * => `a = (y1 - y0)/(base^x1 - base^x0)`\n *\n * Desired value: `f(x) = y = a * base^x + b`\n * => `f(x) = y0 + a * (base^x - base^x0)`\n *\n * From the above, we can replace the `a` in `a * (base^x - base^x0)` and do a\n * little algebra:\n * ```\n * a * (base^x - base^x0) = (y1 - y0)/(base^x1 - base^x0) * (base^x - base^x0)\n * = (y1 - y0) * (base^x - base^x0) / (base^x1 - base^x0)\n * ```\n *\n * If we let `(base^x - base^x0) / (base^x1 base^x0)`, then we have\n * `f(x) = y0 + (y1 - y0) * ratio`. In other words, `ratio` may be treated as\n * an interpolation factor between the two stops' output values.\n *\n * (Note: a slightly different form for `ratio`,\n * `(base^(x-x0) - 1) / (base^(x1-x0) - 1) `, is equivalent, but requires fewer\n * expensive `Math.pow()` operations.)\n *\n * @private\n*/\nfunction exponentialInterpolation(input, base, lowerValue, upperValue) {\n const difference = upperValue - lowerValue;\n const progress = input - lowerValue;\n if (difference === 0) {\n return 0;\n } else if (base === 1) {\n return progress / difference;\n } else {\n return (Math.pow(base, progress) - 1) / (Math.pow(base, difference) - 1);\n }\n}\nvar Interpolate$1 = Interpolate;\n\nclass Coalesce {\n constructor(type, args) {\n this.type = type;\n this.args = args;\n }\n static parse(args, context) {\n if (args.length < 2) {\n return context.error('Expectected at least one argument.');\n }\n let outputType = null;\n const expectedType = context.expectedType;\n if (expectedType && expectedType.kind !== 'value') {\n outputType = expectedType;\n }\n const parsedArgs = [];\n for (const arg of args.slice(1)) {\n const parsed = context.parse(arg, 1 + parsedArgs.length, outputType, undefined, { typeAnnotation: 'omit' });\n if (!parsed)\n return null;\n outputType = outputType || parsed.type;\n parsedArgs.push(parsed);\n }\n // Above, we parse arguments without inferred type annotation so that\n // they don't produce a runtime error for `null` input, which would\n // preempt the desired null-coalescing behavior.\n // Thus, if any of our arguments would have needed an annotation, we\n // need to wrap the enclosing coalesce expression with it instead.\n const needsAnnotation = expectedType && parsedArgs.some(arg => checkSubtype(expectedType, arg.type));\n return needsAnnotation ? new Coalesce(ValueType, parsedArgs) : new Coalesce(outputType, parsedArgs);\n }\n evaluate(ctx) {\n let result = null;\n let argCount = 0;\n let firstImage;\n for (const arg of this.args) {\n argCount++;\n result = arg.evaluate(ctx);\n // we need to keep track of the first requested image in a coalesce statement\n // if coalesce can't find a valid image, we return the first image so styleimagemissing can fire\n if (result && result instanceof ResolvedImage && !result.available) {\n // set to first image\n if (!firstImage) {\n firstImage = result;\n }\n result = null;\n // if we reach the end, return the first image\n if (argCount === this.args.length) {\n return firstImage;\n }\n }\n if (result !== null)\n break;\n }\n return result;\n }\n eachChild(fn) {\n this.args.forEach(fn);\n }\n outputDefined() {\n return this.args.every(arg => arg.outputDefined());\n }\n serialize() {\n const serialized = ['coalesce'];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n}\nvar Coalesce$1 = Coalesce;\n\n// \nclass Let {\n constructor(bindings, result) {\n this.type = result.type;\n this.bindings = [].concat(bindings);\n this.result = result;\n }\n evaluate(ctx) {\n return this.result.evaluate(ctx);\n }\n eachChild(fn) {\n for (const binding of this.bindings) {\n fn(binding[1]);\n }\n fn(this.result);\n }\n static parse(args, context) {\n if (args.length < 4)\n return context.error(`Expected at least 3 arguments, but found ${ args.length - 1 } instead.`);\n const bindings = [];\n for (let i = 1; i < args.length - 1; i += 2) {\n const name = args[i];\n if (typeof name !== 'string') {\n return context.error(`Expected string, but found ${ typeof name } instead.`, i);\n }\n if (/[^a-zA-Z0-9_]/.test(name)) {\n return context.error(`Variable names must contain only alphanumeric characters or '_'.`, i);\n }\n const value = context.parse(args[i + 1], i + 1);\n if (!value)\n return null;\n bindings.push([\n name,\n value\n ]);\n }\n const result = context.parse(args[args.length - 1], args.length - 1, context.expectedType, bindings);\n if (!result)\n return null;\n return new Let(bindings, result);\n }\n outputDefined() {\n return this.result.outputDefined();\n }\n serialize() {\n const serialized = ['let'];\n for (const [name, expr] of this.bindings) {\n serialized.push(name, expr.serialize());\n }\n serialized.push(this.result.serialize());\n return serialized;\n }\n}\nvar Let$1 = Let;\n\n// \nclass At {\n constructor(type, index, input) {\n this.type = type;\n this.index = index;\n this.input = input;\n }\n static parse(args, context) {\n if (args.length !== 3)\n return context.error(`Expected 2 arguments, but found ${ args.length - 1 } instead.`);\n const index = context.parse(args[1], 1, NumberType);\n const input = context.parse(args[2], 2, array$1(context.expectedType || ValueType));\n if (!index || !input)\n return null;\n const t = input.type;\n return new At(t.itemType, index, input);\n }\n evaluate(ctx) {\n const index = this.index.evaluate(ctx);\n const array = this.input.evaluate(ctx);\n if (index < 0) {\n throw new RuntimeError$1(`Array index out of bounds: ${ index } < 0.`);\n }\n if (index >= array.length) {\n throw new RuntimeError$1(`Array index out of bounds: ${ index } > ${ array.length - 1 }.`);\n }\n if (index !== Math.floor(index)) {\n throw new RuntimeError$1(`Array index must be an integer, but found ${ index } instead.`);\n }\n return array[index];\n }\n eachChild(fn) {\n fn(this.index);\n fn(this.input);\n }\n outputDefined() {\n return false;\n }\n serialize() {\n return [\n 'at',\n this.index.serialize(),\n this.input.serialize()\n ];\n }\n}\nvar At$1 = At;\n\n// \nclass In {\n constructor(needle, haystack) {\n this.type = BooleanType;\n this.needle = needle;\n this.haystack = haystack;\n }\n static parse(args, context) {\n if (args.length !== 3) {\n return context.error(`Expected 2 arguments, but found ${ args.length - 1 } instead.`);\n }\n const needle = context.parse(args[1], 1, ValueType);\n const haystack = context.parse(args[2], 2, ValueType);\n if (!needle || !haystack)\n return null;\n if (!isValidType(needle.type, [\n BooleanType,\n StringType,\n NumberType,\n NullType,\n ValueType\n ])) {\n return context.error(`Expected first argument to be of type boolean, string, number or null, but found ${ toString$1(needle.type) } instead`);\n }\n return new In(needle, haystack);\n }\n evaluate(ctx) {\n const needle = this.needle.evaluate(ctx);\n const haystack = this.haystack.evaluate(ctx);\n if (haystack == null)\n return false;\n if (!isValidNativeType(needle, [\n 'boolean',\n 'string',\n 'number',\n 'null'\n ])) {\n throw new RuntimeError$1(`Expected first argument to be of type boolean, string, number or null, but found ${ toString$1(typeOf(needle)) } instead.`);\n }\n if (!isValidNativeType(haystack, [\n 'string',\n 'array'\n ])) {\n throw new RuntimeError$1(`Expected second argument to be of type array or string, but found ${ toString$1(typeOf(haystack)) } instead.`);\n }\n return haystack.indexOf(needle) >= 0;\n }\n eachChild(fn) {\n fn(this.needle);\n fn(this.haystack);\n }\n outputDefined() {\n return true;\n }\n serialize() {\n return [\n 'in',\n this.needle.serialize(),\n this.haystack.serialize()\n ];\n }\n}\nvar In$1 = In;\n\n// \nclass IndexOf {\n constructor(needle, haystack, fromIndex) {\n this.type = NumberType;\n this.needle = needle;\n this.haystack = haystack;\n this.fromIndex = fromIndex;\n }\n static parse(args, context) {\n if (args.length <= 2 || args.length >= 5) {\n return context.error(`Expected 3 or 4 arguments, but found ${ args.length - 1 } instead.`);\n }\n const needle = context.parse(args[1], 1, ValueType);\n const haystack = context.parse(args[2], 2, ValueType);\n if (!needle || !haystack)\n return null;\n if (!isValidType(needle.type, [\n BooleanType,\n StringType,\n NumberType,\n NullType,\n ValueType\n ])) {\n return context.error(`Expected first argument to be of type boolean, string, number or null, but found ${ toString$1(needle.type) } instead`);\n }\n if (args.length === 4) {\n const fromIndex = context.parse(args[3], 3, NumberType);\n if (!fromIndex)\n return null;\n return new IndexOf(needle, haystack, fromIndex);\n } else {\n return new IndexOf(needle, haystack);\n }\n }\n evaluate(ctx) {\n const needle = this.needle.evaluate(ctx);\n const haystack = this.haystack.evaluate(ctx);\n if (!isValidNativeType(needle, [\n 'boolean',\n 'string',\n 'number',\n 'null'\n ])) {\n throw new RuntimeError$1(`Expected first argument to be of type boolean, string, number or null, but found ${ toString$1(typeOf(needle)) } instead.`);\n }\n if (!isValidNativeType(haystack, [\n 'string',\n 'array'\n ])) {\n throw new RuntimeError$1(`Expected second argument to be of type array or string, but found ${ toString$1(typeOf(haystack)) } instead.`);\n }\n if (this.fromIndex) {\n const fromIndex = this.fromIndex.evaluate(ctx);\n return haystack.indexOf(needle, fromIndex);\n }\n return haystack.indexOf(needle);\n }\n eachChild(fn) {\n fn(this.needle);\n fn(this.haystack);\n if (this.fromIndex) {\n fn(this.fromIndex);\n }\n }\n outputDefined() {\n return false;\n }\n serialize() {\n if (this.fromIndex != null && this.fromIndex !== undefined) {\n const fromIndex = this.fromIndex.serialize();\n return [\n 'index-of',\n this.needle.serialize(),\n this.haystack.serialize(),\n fromIndex\n ];\n }\n return [\n 'index-of',\n this.needle.serialize(),\n this.haystack.serialize()\n ];\n }\n}\nvar IndexOf$1 = IndexOf;\n\n// Map input label values to output expression index\nclass Match {\n constructor(inputType, outputType, input, cases, outputs, otherwise) {\n this.inputType = inputType;\n this.type = outputType;\n this.input = input;\n this.cases = cases;\n this.outputs = outputs;\n this.otherwise = otherwise;\n }\n static parse(args, context) {\n if (args.length < 5)\n return context.error(`Expected at least 4 arguments, but found only ${ args.length - 1 }.`);\n if (args.length % 2 !== 1)\n return context.error(`Expected an even number of arguments.`);\n let inputType;\n let outputType;\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n const cases = {};\n const outputs = [];\n for (let i = 2; i < args.length - 1; i += 2) {\n let labels = args[i];\n const value = args[i + 1];\n if (!Array.isArray(labels)) {\n labels = [labels];\n }\n const labelContext = context.concat(i);\n if (labels.length === 0) {\n return labelContext.error('Expected at least one branch label.');\n }\n for (const label of labels) {\n if (typeof label !== 'number' && typeof label !== 'string') {\n return labelContext.error(`Branch labels must be numbers or strings.`);\n } else if (typeof label === 'number' && Math.abs(label) > Number.MAX_SAFE_INTEGER) {\n return labelContext.error(`Branch labels must be integers no larger than ${ Number.MAX_SAFE_INTEGER }.`);\n } else if (typeof label === 'number' && Math.floor(label) !== label) {\n return labelContext.error(`Numeric branch labels must be integer values.`);\n } else if (!inputType) {\n inputType = typeOf(label);\n } else if (labelContext.checkSubtype(inputType, typeOf(label))) {\n return null;\n }\n if (typeof cases[String(label)] !== 'undefined') {\n return labelContext.error('Branch labels must be unique.');\n }\n cases[String(label)] = outputs.length;\n }\n const result = context.parse(value, i, outputType);\n if (!result)\n return null;\n outputType = outputType || result.type;\n outputs.push(result);\n }\n const input = context.parse(args[1], 1, ValueType);\n if (!input)\n return null;\n const otherwise = context.parse(args[args.length - 1], args.length - 1, outputType);\n if (!otherwise)\n return null;\n if (input.type.kind !== 'value' && context.concat(1).checkSubtype(inputType, input.type)) {\n return null;\n }\n return new Match(inputType, outputType, input, cases, outputs, otherwise);\n }\n evaluate(ctx) {\n const input = this.input.evaluate(ctx);\n const output = typeOf(input) === this.inputType && this.outputs[this.cases[input]] || this.otherwise;\n return output.evaluate(ctx);\n }\n eachChild(fn) {\n fn(this.input);\n this.outputs.forEach(fn);\n fn(this.otherwise);\n }\n outputDefined() {\n return this.outputs.every(out => out.outputDefined()) && this.otherwise.outputDefined();\n }\n serialize() {\n const serialized = [\n 'match',\n this.input.serialize()\n ];\n // Sort so serialization has an arbitrary defined order, even though\n // branch order doesn't affect evaluation\n const sortedLabels = Object.keys(this.cases).sort();\n // Group branches by unique match expression to support condensed\n // serializations of the form [case1, case2, ...] -> matchExpression\n const groupedByOutput = [];\n const outputLookup = {};\n // lookup index into groupedByOutput for a given output expression\n for (const label of sortedLabels) {\n const outputIndex = outputLookup[this.cases[label]];\n if (outputIndex === undefined) {\n // First time seeing this output, add it to the end of the grouped list\n outputLookup[this.cases[label]] = groupedByOutput.length;\n groupedByOutput.push([\n this.cases[label],\n [label]\n ]);\n } else {\n // We've seen this expression before, add the label to that output's group\n groupedByOutput[outputIndex][1].push(label);\n }\n }\n const coerceLabel = label => this.inputType.kind === 'number' ? Number(label) : label;\n for (const [outputIndex, labels] of groupedByOutput) {\n if (labels.length === 1) {\n // Only a single label matches this output expression\n serialized.push(coerceLabel(labels[0]));\n } else {\n // Array of literal labels pointing to this output expression\n serialized.push(labels.map(coerceLabel));\n }\n serialized.push(this.outputs[outputIndex].serialize());\n }\n serialized.push(this.otherwise.serialize());\n return serialized;\n }\n}\nvar Match$1 = Match;\n\nclass Case {\n constructor(type, branches, otherwise) {\n this.type = type;\n this.branches = branches;\n this.otherwise = otherwise;\n }\n static parse(args, context) {\n if (args.length < 4)\n return context.error(`Expected at least 3 arguments, but found only ${ args.length - 1 }.`);\n if (args.length % 2 !== 0)\n return context.error(`Expected an odd number of arguments.`);\n let outputType;\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n const branches = [];\n for (let i = 1; i < args.length - 1; i += 2) {\n const test = context.parse(args[i], i, BooleanType);\n if (!test)\n return null;\n const result = context.parse(args[i + 1], i + 1, outputType);\n if (!result)\n return null;\n branches.push([\n test,\n result\n ]);\n outputType = outputType || result.type;\n }\n const otherwise = context.parse(args[args.length - 1], args.length - 1, outputType);\n if (!otherwise)\n return null;\n return new Case(outputType, branches, otherwise);\n }\n evaluate(ctx) {\n for (const [test, expression] of this.branches) {\n if (test.evaluate(ctx)) {\n return expression.evaluate(ctx);\n }\n }\n return this.otherwise.evaluate(ctx);\n }\n eachChild(fn) {\n for (const [test, expression] of this.branches) {\n fn(test);\n fn(expression);\n }\n fn(this.otherwise);\n }\n outputDefined() {\n return this.branches.every(([_, out]) => out.outputDefined()) && this.otherwise.outputDefined();\n }\n serialize() {\n const serialized = ['case'];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n}\nvar Case$1 = Case;\n\n// \nclass Slice {\n constructor(type, input, beginIndex, endIndex) {\n this.type = type;\n this.input = input;\n this.beginIndex = beginIndex;\n this.endIndex = endIndex;\n }\n static parse(args, context) {\n if (args.length <= 2 || args.length >= 5) {\n return context.error(`Expected 3 or 4 arguments, but found ${ args.length - 1 } instead.`);\n }\n const input = context.parse(args[1], 1, ValueType);\n const beginIndex = context.parse(args[2], 2, NumberType);\n if (!input || !beginIndex)\n return null;\n if (!isValidType(input.type, [\n array$1(ValueType),\n StringType,\n ValueType\n ])) {\n return context.error(`Expected first argument to be of type array or string, but found ${ toString$1(input.type) } instead`);\n }\n if (args.length === 4) {\n const endIndex = context.parse(args[3], 3, NumberType);\n if (!endIndex)\n return null;\n return new Slice(input.type, input, beginIndex, endIndex);\n } else {\n return new Slice(input.type, input, beginIndex);\n }\n }\n evaluate(ctx) {\n const input = this.input.evaluate(ctx);\n const beginIndex = this.beginIndex.evaluate(ctx);\n if (!isValidNativeType(input, [\n 'string',\n 'array'\n ])) {\n throw new RuntimeError$1(`Expected first argument to be of type array or string, but found ${ toString$1(typeOf(input)) } instead.`);\n }\n if (this.endIndex) {\n const endIndex = this.endIndex.evaluate(ctx);\n return input.slice(beginIndex, endIndex);\n }\n return input.slice(beginIndex);\n }\n eachChild(fn) {\n fn(this.input);\n fn(this.beginIndex);\n if (this.endIndex) {\n fn(this.endIndex);\n }\n }\n outputDefined() {\n return false;\n }\n serialize() {\n if (this.endIndex != null && this.endIndex !== undefined) {\n const endIndex = this.endIndex.serialize();\n return [\n 'slice',\n this.input.serialize(),\n this.beginIndex.serialize(),\n endIndex\n ];\n }\n return [\n 'slice',\n this.input.serialize(),\n this.beginIndex.serialize()\n ];\n }\n}\nvar Slice$1 = Slice;\n\n// \nfunction isComparableType(op, type) {\n if (op === '==' || op === '!=') {\n // equality operator\n return type.kind === 'boolean' || type.kind === 'string' || type.kind === 'number' || type.kind === 'null' || type.kind === 'value';\n } else {\n // ordering operator\n return type.kind === 'string' || type.kind === 'number' || type.kind === 'value';\n }\n}\nfunction eq(ctx, a, b) {\n return a === b;\n}\nfunction neq(ctx, a, b) {\n return a !== b;\n}\nfunction lt(ctx, a, b) {\n return a < b;\n}\nfunction gt(ctx, a, b) {\n return a > b;\n}\nfunction lteq(ctx, a, b) {\n return a <= b;\n}\nfunction gteq(ctx, a, b) {\n return a >= b;\n}\nfunction eqCollate(ctx, a, b, c) {\n return c.compare(a, b) === 0;\n}\nfunction neqCollate(ctx, a, b, c) {\n return !eqCollate(ctx, a, b, c);\n}\nfunction ltCollate(ctx, a, b, c) {\n return c.compare(a, b) < 0;\n}\nfunction gtCollate(ctx, a, b, c) {\n return c.compare(a, b) > 0;\n}\nfunction lteqCollate(ctx, a, b, c) {\n return c.compare(a, b) <= 0;\n}\nfunction gteqCollate(ctx, a, b, c) {\n return c.compare(a, b) >= 0;\n}\n/**\n * Special form for comparison operators, implementing the signatures:\n * - (T, T, ?Collator) => boolean\n * - (T, value, ?Collator) => boolean\n * - (value, T, ?Collator) => boolean\n *\n * For inequalities, T must be either value, string, or number. For ==/!=, it\n * can also be boolean or null.\n *\n * Equality semantics are equivalent to Javascript's strict equality (===/!==)\n * -- i.e., when the arguments' types don't match, == evaluates to false, != to\n * true.\n *\n * When types don't match in an ordering comparison, a runtime error is thrown.\n *\n * @private\n */\nfunction makeComparison(op, compareBasic, compareWithCollator) {\n const isOrderComparison = op !== '==' && op !== '!=';\n return class Comparison {\n constructor(lhs, rhs, collator) {\n this.type = BooleanType;\n this.lhs = lhs;\n this.rhs = rhs;\n this.collator = collator;\n this.hasUntypedArgument = lhs.type.kind === 'value' || rhs.type.kind === 'value';\n }\n static parse(args, context) {\n if (args.length !== 3 && args.length !== 4)\n return context.error(`Expected two or three arguments.`);\n const op = args[0];\n let lhs = context.parse(args[1], 1, ValueType);\n if (!lhs)\n return null;\n if (!isComparableType(op, lhs.type)) {\n return context.concat(1).error(`\"${ op }\" comparisons are not supported for type '${ toString$1(lhs.type) }'.`);\n }\n let rhs = context.parse(args[2], 2, ValueType);\n if (!rhs)\n return null;\n if (!isComparableType(op, rhs.type)) {\n return context.concat(2).error(`\"${ op }\" comparisons are not supported for type '${ toString$1(rhs.type) }'.`);\n }\n if (lhs.type.kind !== rhs.type.kind && lhs.type.kind !== 'value' && rhs.type.kind !== 'value') {\n return context.error(`Cannot compare types '${ toString$1(lhs.type) }' and '${ toString$1(rhs.type) }'.`);\n }\n if (isOrderComparison) {\n // typing rules specific to less/greater than operators\n if (lhs.type.kind === 'value' && rhs.type.kind !== 'value') {\n // (value, T)\n lhs = new Assertion$1(rhs.type, [lhs]);\n } else if (lhs.type.kind !== 'value' && rhs.type.kind === 'value') {\n // (T, value)\n rhs = new Assertion$1(lhs.type, [rhs]);\n }\n }\n let collator = null;\n if (args.length === 4) {\n if (lhs.type.kind !== 'string' && rhs.type.kind !== 'string' && lhs.type.kind !== 'value' && rhs.type.kind !== 'value') {\n return context.error(`Cannot use collator to compare non-string types.`);\n }\n collator = context.parse(args[3], 3, CollatorType);\n if (!collator)\n return null;\n }\n return new Comparison(lhs, rhs, collator);\n }\n evaluate(ctx) {\n const lhs = this.lhs.evaluate(ctx);\n const rhs = this.rhs.evaluate(ctx);\n if (isOrderComparison && this.hasUntypedArgument) {\n const lt = typeOf(lhs);\n const rt = typeOf(rhs);\n // check that type is string or number, and equal\n if (lt.kind !== rt.kind || !(lt.kind === 'string' || lt.kind === 'number')) {\n throw new RuntimeError$1(`Expected arguments for \"${ op }\" to be (string, string) or (number, number), but found (${ lt.kind }, ${ rt.kind }) instead.`);\n }\n }\n if (this.collator && !isOrderComparison && this.hasUntypedArgument) {\n const lt = typeOf(lhs);\n const rt = typeOf(rhs);\n if (lt.kind !== 'string' || rt.kind !== 'string') {\n return compareBasic(ctx, lhs, rhs);\n }\n }\n return this.collator ? compareWithCollator(ctx, lhs, rhs, this.collator.evaluate(ctx)) : compareBasic(ctx, lhs, rhs);\n }\n eachChild(fn) {\n fn(this.lhs);\n fn(this.rhs);\n if (this.collator) {\n fn(this.collator);\n }\n }\n outputDefined() {\n return true;\n }\n serialize() {\n const serialized = [op];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n };\n}\nconst Equals = makeComparison('==', eq, eqCollate);\nconst NotEquals = makeComparison('!=', neq, neqCollate);\nconst LessThan = makeComparison('<', lt, ltCollate);\nconst GreaterThan = makeComparison('>', gt, gtCollate);\nconst LessThanOrEqual = makeComparison('<=', lteq, lteqCollate);\nconst GreaterThanOrEqual = makeComparison('>=', gteq, gteqCollate);\n\n// \nclass NumberFormat {\n // BCP 47 language tag\n // ISO 4217 currency code, required if style=currency\n // Simple units sanctioned for use in ECMAScript, required if style=unit. https://tc39.es/proposal-unified-intl-numberformat/section6/locales-currencies-tz_proposed_out.html#sec-issanctionedsimpleunitidentifier\n // Default 0\n // Default 3\n constructor(number, locale, currency, unit, minFractionDigits, maxFractionDigits) {\n this.type = StringType;\n this.number = number;\n this.locale = locale;\n this.currency = currency;\n this.unit = unit;\n this.minFractionDigits = minFractionDigits;\n this.maxFractionDigits = maxFractionDigits;\n }\n static parse(args, context) {\n if (args.length !== 3)\n return context.error(`Expected two arguments.`);\n const number = context.parse(args[1], 1, NumberType);\n if (!number)\n return null;\n const options = args[2];\n if (typeof options !== 'object' || Array.isArray(options))\n return context.error(`NumberFormat options argument must be an object.`);\n let locale = null;\n if (options['locale']) {\n locale = context.parse(options['locale'], 1, StringType);\n if (!locale)\n return null;\n }\n let currency = null;\n if (options['currency']) {\n currency = context.parse(options['currency'], 1, StringType);\n if (!currency)\n return null;\n }\n let unit = null;\n if (options['unit']) {\n unit = context.parse(options['unit'], 1, StringType);\n if (!unit)\n return null;\n }\n let minFractionDigits = null;\n if (options['min-fraction-digits']) {\n minFractionDigits = context.parse(options['min-fraction-digits'], 1, NumberType);\n if (!minFractionDigits)\n return null;\n }\n let maxFractionDigits = null;\n if (options['max-fraction-digits']) {\n maxFractionDigits = context.parse(options['max-fraction-digits'], 1, NumberType);\n if (!maxFractionDigits)\n return null;\n }\n return new NumberFormat(number, locale, currency, unit, minFractionDigits, maxFractionDigits);\n }\n evaluate(ctx) {\n return new Intl.NumberFormat(this.locale ? this.locale.evaluate(ctx) : [], {\n style: this.currency && 'currency' || this.unit && 'unit' || 'decimal',\n currency: this.currency ? this.currency.evaluate(ctx) : undefined,\n unit: this.unit ? this.unit.evaluate(ctx) : undefined,\n minimumFractionDigits: this.minFractionDigits ? this.minFractionDigits.evaluate(ctx) : undefined,\n maximumFractionDigits: this.maxFractionDigits ? this.maxFractionDigits.evaluate(ctx) : undefined\n }).format(this.number.evaluate(ctx));\n }\n eachChild(fn) {\n fn(this.number);\n if (this.locale) {\n fn(this.locale);\n }\n if (this.currency) {\n fn(this.currency);\n }\n if (this.unit) {\n fn(this.unit);\n }\n if (this.minFractionDigits) {\n fn(this.minFractionDigits);\n }\n if (this.maxFractionDigits) {\n fn(this.maxFractionDigits);\n }\n }\n outputDefined() {\n return false;\n }\n serialize() {\n const options = {};\n if (this.locale) {\n options['locale'] = this.locale.serialize();\n }\n if (this.currency) {\n options['currency'] = this.currency.serialize();\n }\n if (this.unit) {\n options['unit'] = this.unit.serialize();\n }\n if (this.minFractionDigits) {\n options['min-fraction-digits'] = this.minFractionDigits.serialize();\n }\n if (this.maxFractionDigits) {\n options['max-fraction-digits'] = this.maxFractionDigits.serialize();\n }\n return [\n 'number-format',\n this.number.serialize(),\n options\n ];\n }\n}\n\n// \nclass Length {\n constructor(input) {\n this.type = NumberType;\n this.input = input;\n }\n static parse(args, context) {\n if (args.length !== 2)\n return context.error(`Expected 1 argument, but found ${ args.length - 1 } instead.`);\n const input = context.parse(args[1], 1);\n if (!input)\n return null;\n if (input.type.kind !== 'array' && input.type.kind !== 'string' && input.type.kind !== 'value')\n return context.error(`Expected argument of type string or array, but found ${ toString$1(input.type) } instead.`);\n return new Length(input);\n }\n evaluate(ctx) {\n const input = this.input.evaluate(ctx);\n if (typeof input === 'string') {\n return input.length;\n } else if (Array.isArray(input)) {\n return input.length;\n } else {\n throw new RuntimeError$1(`Expected value to be of type string or array, but found ${ toString$1(typeOf(input)) } instead.`);\n }\n }\n eachChild(fn) {\n fn(this.input);\n }\n outputDefined() {\n return false;\n }\n serialize() {\n const serialized = ['length'];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n}\nvar Length$1 = Length;\n\n// \nconst expressions = {\n // special forms\n '==': Equals,\n '!=': NotEquals,\n '>': GreaterThan,\n '<': LessThan,\n '>=': GreaterThanOrEqual,\n '<=': LessThanOrEqual,\n 'array': Assertion$1,\n 'at': At$1,\n 'boolean': Assertion$1,\n 'case': Case$1,\n 'coalesce': Coalesce$1,\n 'collator': CollatorExpression,\n 'format': FormatExpression,\n 'image': ImageExpression,\n 'in': In$1,\n 'index-of': IndexOf$1,\n 'interpolate': Interpolate$1,\n 'interpolate-hcl': Interpolate$1,\n 'interpolate-lab': Interpolate$1,\n 'length': Length$1,\n 'let': Let$1,\n 'literal': Literal$1,\n 'match': Match$1,\n 'number': Assertion$1,\n 'number-format': NumberFormat,\n 'object': Assertion$1,\n 'slice': Slice$1,\n 'step': Step$1,\n 'string': Assertion$1,\n 'to-boolean': Coercion$1,\n 'to-color': Coercion$1,\n 'to-number': Coercion$1,\n 'to-string': Coercion$1,\n 'var': Var$1,\n 'within': Within$1\n};\nfunction rgba(ctx, [r, g, b, a]) {\n r = r.evaluate(ctx);\n g = g.evaluate(ctx);\n b = b.evaluate(ctx);\n const alpha = a ? a.evaluate(ctx) : 1;\n const error = validateRGBA(r, g, b, alpha);\n if (error)\n throw new RuntimeError$1(error);\n return new Color$1(r / 255 * alpha, g / 255 * alpha, b / 255 * alpha, alpha);\n}\nfunction has(key, obj) {\n return key in obj;\n}\nfunction get(key, obj) {\n const v = obj[key];\n return typeof v === 'undefined' ? null : v;\n}\nfunction binarySearch(v, a, i, j) {\n while (i <= j) {\n const m = i + j >> 1;\n if (a[m] === v)\n return true;\n if (a[m] > v)\n j = m - 1;\n else\n i = m + 1;\n }\n return false;\n}\nfunction varargs(type) {\n return { type };\n}\nCompoundExpression$1.register(expressions, {\n 'error': [\n ErrorType,\n [StringType],\n (ctx, [v]) => {\n throw new RuntimeError$1(v.evaluate(ctx));\n }\n ],\n 'typeof': [\n StringType,\n [ValueType],\n (ctx, [v]) => toString$1(typeOf(v.evaluate(ctx)))\n ],\n 'to-rgba': [\n array$1(NumberType, 4),\n [ColorType],\n (ctx, [v]) => {\n return v.evaluate(ctx).toArray();\n }\n ],\n 'rgb': [\n ColorType,\n [\n NumberType,\n NumberType,\n NumberType\n ],\n rgba\n ],\n 'rgba': [\n ColorType,\n [\n NumberType,\n NumberType,\n NumberType,\n NumberType\n ],\n rgba\n ],\n 'has': {\n type: BooleanType,\n overloads: [\n [\n [StringType],\n (ctx, [key]) => has(key.evaluate(ctx), ctx.properties())\n ],\n [\n [\n StringType,\n ObjectType\n ],\n (ctx, [key, obj]) => has(key.evaluate(ctx), obj.evaluate(ctx))\n ]\n ]\n },\n 'get': {\n type: ValueType,\n overloads: [\n [\n [StringType],\n (ctx, [key]) => get(key.evaluate(ctx), ctx.properties())\n ],\n [\n [\n StringType,\n ObjectType\n ],\n (ctx, [key, obj]) => get(key.evaluate(ctx), obj.evaluate(ctx))\n ]\n ]\n },\n 'feature-state': [\n ValueType,\n [StringType],\n (ctx, [key]) => get(key.evaluate(ctx), ctx.featureState || {})\n ],\n 'properties': [\n ObjectType,\n [],\n ctx => ctx.properties()\n ],\n 'geometry-type': [\n StringType,\n [],\n ctx => ctx.geometryType()\n ],\n 'id': [\n ValueType,\n [],\n ctx => ctx.id()\n ],\n 'zoom': [\n NumberType,\n [],\n ctx => ctx.globals.zoom\n ],\n 'pitch': [\n NumberType,\n [],\n ctx => ctx.globals.pitch || 0\n ],\n 'distance-from-center': [\n NumberType,\n [],\n ctx => ctx.distanceFromCenter()\n ],\n 'heatmap-density': [\n NumberType,\n [],\n ctx => ctx.globals.heatmapDensity || 0\n ],\n 'line-progress': [\n NumberType,\n [],\n ctx => ctx.globals.lineProgress || 0\n ],\n 'sky-radial-progress': [\n NumberType,\n [],\n ctx => ctx.globals.skyRadialProgress || 0\n ],\n 'accumulated': [\n ValueType,\n [],\n ctx => ctx.globals.accumulated === undefined ? null : ctx.globals.accumulated\n ],\n '+': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => {\n let result = 0;\n for (const arg of args) {\n result += arg.evaluate(ctx);\n }\n return result;\n }\n ],\n '*': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => {\n let result = 1;\n for (const arg of args) {\n result *= arg.evaluate(ctx);\n }\n return result;\n }\n ],\n '-': {\n type: NumberType,\n overloads: [\n [\n [\n NumberType,\n NumberType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) - b.evaluate(ctx)\n ],\n [\n [NumberType],\n (ctx, [a]) => -a.evaluate(ctx)\n ]\n ]\n },\n '/': [\n NumberType,\n [\n NumberType,\n NumberType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) / b.evaluate(ctx)\n ],\n '%': [\n NumberType,\n [\n NumberType,\n NumberType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) % b.evaluate(ctx)\n ],\n 'ln2': [\n NumberType,\n [],\n () => Math.LN2\n ],\n 'pi': [\n NumberType,\n [],\n () => Math.PI\n ],\n 'e': [\n NumberType,\n [],\n () => Math.E\n ],\n '^': [\n NumberType,\n [\n NumberType,\n NumberType\n ],\n (ctx, [b, e]) => Math.pow(b.evaluate(ctx), e.evaluate(ctx))\n ],\n 'sqrt': [\n NumberType,\n [NumberType],\n (ctx, [x]) => Math.sqrt(x.evaluate(ctx))\n ],\n 'log10': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx)) / Math.LN10\n ],\n 'ln': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx))\n ],\n 'log2': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx)) / Math.LN2\n ],\n 'sin': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.sin(n.evaluate(ctx))\n ],\n 'cos': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.cos(n.evaluate(ctx))\n ],\n 'tan': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.tan(n.evaluate(ctx))\n ],\n 'asin': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.asin(n.evaluate(ctx))\n ],\n 'acos': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.acos(n.evaluate(ctx))\n ],\n 'atan': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.atan(n.evaluate(ctx))\n ],\n 'min': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => Math.min(...args.map(arg => arg.evaluate(ctx)))\n ],\n 'max': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => Math.max(...args.map(arg => arg.evaluate(ctx)))\n ],\n 'abs': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.abs(n.evaluate(ctx))\n ],\n 'round': [\n NumberType,\n [NumberType],\n (ctx, [n]) => {\n const v = n.evaluate(ctx);\n // Javascript's Math.round() rounds towards +Infinity for halfway\n // values, even when they're negative. It's more common to round\n // away from 0 (e.g., this is what python and C++ do)\n return v < 0 ? -Math.round(-v) : Math.round(v);\n }\n ],\n 'floor': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.floor(n.evaluate(ctx))\n ],\n 'ceil': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.ceil(n.evaluate(ctx))\n ],\n 'filter-==': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => ctx.properties()[k.value] === v.value\n ],\n 'filter-id-==': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => ctx.id() === v.value\n ],\n 'filter-type-==': [\n BooleanType,\n [StringType],\n (ctx, [v]) => ctx.geometryType() === v.value\n ],\n 'filter-<': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => {\n const a = ctx.properties()[k.value];\n const b = v.value;\n return typeof a === typeof b && a < b;\n }\n ],\n 'filter-id-<': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = v.value;\n return typeof a === typeof b && a < b;\n }\n ],\n 'filter->': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => {\n const a = ctx.properties()[k.value];\n const b = v.value;\n return typeof a === typeof b && a > b;\n }\n ],\n 'filter-id->': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = v.value;\n return typeof a === typeof b && a > b;\n }\n ],\n 'filter-<=': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => {\n const a = ctx.properties()[k.value];\n const b = v.value;\n return typeof a === typeof b && a <= b;\n }\n ],\n 'filter-id-<=': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = v.value;\n return typeof a === typeof b && a <= b;\n }\n ],\n 'filter->=': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => {\n const a = ctx.properties()[k.value];\n const b = v.value;\n return typeof a === typeof b && a >= b;\n }\n ],\n 'filter-id->=': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = v.value;\n return typeof a === typeof b && a >= b;\n }\n ],\n 'filter-has': [\n BooleanType,\n [ValueType],\n (ctx, [k]) => k.value in ctx.properties()\n ],\n 'filter-has-id': [\n BooleanType,\n [],\n ctx => ctx.id() !== null && ctx.id() !== undefined\n ],\n 'filter-type-in': [\n BooleanType,\n [array$1(StringType)],\n (ctx, [v]) => v.value.indexOf(ctx.geometryType()) >= 0\n ],\n 'filter-id-in': [\n BooleanType,\n [array$1(ValueType)],\n (ctx, [v]) => v.value.indexOf(ctx.id()) >= 0\n ],\n 'filter-in-small': [\n BooleanType,\n [\n StringType,\n array$1(ValueType)\n ],\n // assumes v is an array literal\n (ctx, [k, v]) => v.value.indexOf(ctx.properties()[k.value]) >= 0\n ],\n 'filter-in-large': [\n BooleanType,\n [\n StringType,\n array$1(ValueType)\n ],\n // assumes v is a array literal with values sorted in ascending order and of a single type\n (ctx, [k, v]) => binarySearch(ctx.properties()[k.value], v.value, 0, v.value.length - 1)\n ],\n 'all': {\n type: BooleanType,\n overloads: [\n [\n [\n BooleanType,\n BooleanType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) && b.evaluate(ctx)\n ],\n [\n varargs(BooleanType),\n (ctx, args) => {\n for (const arg of args) {\n if (!arg.evaluate(ctx))\n return false;\n }\n return true;\n }\n ]\n ]\n },\n 'any': {\n type: BooleanType,\n overloads: [\n [\n [\n BooleanType,\n BooleanType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) || b.evaluate(ctx)\n ],\n [\n varargs(BooleanType),\n (ctx, args) => {\n for (const arg of args) {\n if (arg.evaluate(ctx))\n return true;\n }\n return false;\n }\n ]\n ]\n },\n '!': [\n BooleanType,\n [BooleanType],\n (ctx, [b]) => !b.evaluate(ctx)\n ],\n 'is-supported-script': [\n BooleanType,\n [StringType],\n // At parse time this will always return true, so we need to exclude this expression with isGlobalPropertyConstant\n (ctx, [s]) => {\n const isSupportedScript = ctx.globals && ctx.globals.isSupportedScript;\n if (isSupportedScript) {\n return isSupportedScript(s.evaluate(ctx));\n }\n return true;\n }\n ],\n 'upcase': [\n StringType,\n [StringType],\n (ctx, [s]) => s.evaluate(ctx).toUpperCase()\n ],\n 'downcase': [\n StringType,\n [StringType],\n (ctx, [s]) => s.evaluate(ctx).toLowerCase()\n ],\n 'concat': [\n StringType,\n varargs(ValueType),\n (ctx, args) => args.map(arg => toString(arg.evaluate(ctx))).join('')\n ],\n 'resolved-locale': [\n StringType,\n [CollatorType],\n (ctx, [collator]) => collator.evaluate(ctx).resolvedLocale()\n ]\n});\nvar definitions = expressions;\n\n// \n/**\n * A type used for returning and propagating errors. The first element of the union\n * represents success and contains a value, and the second represents an error and\n * contains an error value.\n * @private\n */\nfunction success(value) {\n return {\n result: 'success',\n value\n };\n}\nfunction error(value) {\n return {\n result: 'error',\n value\n };\n}\n\n// \nfunction supportsPropertyExpression(spec) {\n return spec['property-type'] === 'data-driven';\n}\nfunction supportsZoomExpression(spec) {\n return !!spec.expression && spec.expression.parameters.indexOf('zoom') > -1;\n}\nfunction supportsInterpolation(spec) {\n return !!spec.expression && spec.expression.interpolated;\n}\n\nfunction isFunction(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nclass StyleExpression {\n constructor(expression, propertySpec) {\n this.expression = expression;\n this._warningHistory = {};\n this._evaluator = new EvaluationContext$1();\n this._defaultValue = propertySpec ? getDefaultValue(propertySpec) : null;\n this._enumValues = propertySpec && propertySpec.type === 'enum' ? propertySpec.values : null;\n }\n evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection, featureTileCoord, featureDistanceData) {\n this._evaluator.globals = globals;\n this._evaluator.feature = feature;\n this._evaluator.featureState = featureState;\n this._evaluator.canonical = canonical || null;\n this._evaluator.availableImages = availableImages || null;\n this._evaluator.formattedSection = formattedSection;\n this._evaluator.featureTileCoord = featureTileCoord || null;\n this._evaluator.featureDistanceData = featureDistanceData || null;\n return this.expression.evaluate(this._evaluator);\n }\n evaluate(globals, feature, featureState, canonical, availableImages, formattedSection, featureTileCoord, featureDistanceData) {\n this._evaluator.globals = globals;\n this._evaluator.feature = feature || null;\n this._evaluator.featureState = featureState || null;\n this._evaluator.canonical = canonical || null;\n this._evaluator.availableImages = availableImages || null;\n this._evaluator.formattedSection = formattedSection || null;\n this._evaluator.featureTileCoord = featureTileCoord || null;\n this._evaluator.featureDistanceData = featureDistanceData || null;\n try {\n const val = this.expression.evaluate(this._evaluator);\n // eslint-disable-next-line no-self-compare\n if (val === null || val === undefined || typeof val === 'number' && val !== val) {\n return this._defaultValue;\n }\n if (this._enumValues && !(val in this._enumValues)) {\n throw new RuntimeError$1(`Expected value to be one of ${ Object.keys(this._enumValues).map(v => JSON.stringify(v)).join(', ') }, but found ${ JSON.stringify(val) } instead.`);\n }\n return val;\n } catch (e) {\n if (!this._warningHistory[e.message]) {\n this._warningHistory[e.message] = true;\n if (typeof console !== 'undefined') {\n console.warn(e.message);\n }\n }\n return this._defaultValue;\n }\n }\n}\nfunction isExpression(expression) {\n return Array.isArray(expression) && expression.length > 0 && typeof expression[0] === 'string' && expression[0] in definitions;\n}\n/**\n * Parse and typecheck the given style spec JSON expression. If\n * options.defaultValue is provided, then the resulting StyleExpression's\n * `evaluate()` method will handle errors by logging a warning (once per\n * message) and returning the default value. Otherwise, it will throw\n * evaluation errors.\n *\n * @private\n */\nfunction createExpression(expression, propertySpec) {\n const parser = new ParsingContext$1(definitions, [], propertySpec ? getExpectedType(propertySpec) : undefined);\n // For string-valued properties, coerce to string at the top level rather than asserting.\n const parsed = parser.parse(expression, undefined, undefined, undefined, propertySpec && propertySpec.type === 'string' ? { typeAnnotation: 'coerce' } : undefined);\n if (!parsed) {\n return error(parser.errors);\n }\n return success(new StyleExpression(parsed, propertySpec));\n}\nclass ZoomConstantExpression {\n constructor(kind, expression) {\n this.kind = kind;\n this._styleExpression = expression;\n this.isStateDependent = kind !== 'constant' && !isStateConstant(expression.expression);\n }\n evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection) {\n return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n evaluate(globals, feature, featureState, canonical, availableImages, formattedSection) {\n return this._styleExpression.evaluate(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n}\nclass ZoomDependentExpression {\n constructor(kind, expression, zoomStops, interpolationType) {\n this.kind = kind;\n this.zoomStops = zoomStops;\n this._styleExpression = expression;\n this.isStateDependent = kind !== 'camera' && !isStateConstant(expression.expression);\n this.interpolationType = interpolationType;\n }\n evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection) {\n return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n evaluate(globals, feature, featureState, canonical, availableImages, formattedSection) {\n return this._styleExpression.evaluate(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n interpolationFactor(input, lower, upper) {\n if (this.interpolationType) {\n return Interpolate$1.interpolationFactor(this.interpolationType, input, lower, upper);\n } else {\n return 0;\n }\n }\n}\nfunction createPropertyExpression(expression, propertySpec) {\n expression = createExpression(expression, propertySpec);\n if (expression.result === 'error') {\n return expression;\n }\n const parsed = expression.value.expression;\n const isFeatureConstant$1 = isFeatureConstant(parsed);\n if (!isFeatureConstant$1 && !supportsPropertyExpression(propertySpec)) {\n return error([new ParsingError$1('', 'data expressions not supported')]);\n }\n const isZoomConstant = isGlobalPropertyConstant(parsed, [\n 'zoom',\n 'pitch',\n 'distance-from-center'\n ]);\n if (!isZoomConstant && !supportsZoomExpression(propertySpec)) {\n return error([new ParsingError$1('', 'zoom expressions not supported')]);\n }\n const zoomCurve = findZoomCurve(parsed);\n if (!zoomCurve && !isZoomConstant) {\n return error([new ParsingError$1('', '\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.')]);\n } else if (zoomCurve instanceof ParsingError$1) {\n return error([zoomCurve]);\n } else if (zoomCurve instanceof Interpolate$1 && !supportsInterpolation(propertySpec)) {\n return error([new ParsingError$1('', '\"interpolate\" expressions cannot be used with this property')]);\n }\n if (!zoomCurve) {\n return success(isFeatureConstant$1 ? new ZoomConstantExpression('constant', expression.value) : new ZoomConstantExpression('source', expression.value));\n }\n const interpolationType = zoomCurve instanceof Interpolate$1 ? zoomCurve.interpolation : undefined;\n return success(isFeatureConstant$1 ? new ZoomDependentExpression('camera', expression.value, zoomCurve.labels, interpolationType) : new ZoomDependentExpression('composite', expression.value, zoomCurve.labels, interpolationType));\n}\n// Zoom-dependent expressions may only use [\"zoom\"] as the input to a top-level \"step\" or \"interpolate\"\n// expression (collectively referred to as a \"curve\"). The curve may be wrapped in one or more \"let\" or\n// \"coalesce\" expressions.\nfunction findZoomCurve(expression) {\n let result = null;\n if (expression instanceof Let$1) {\n result = findZoomCurve(expression.result);\n } else if (expression instanceof Coalesce$1) {\n for (const arg of expression.args) {\n result = findZoomCurve(arg);\n if (result) {\n break;\n }\n }\n } else if ((expression instanceof Step$1 || expression instanceof Interpolate$1) && expression.input instanceof CompoundExpression$1 && expression.input.name === 'zoom') {\n result = expression;\n }\n if (result instanceof ParsingError$1) {\n return result;\n }\n expression.eachChild(child => {\n const childResult = findZoomCurve(child);\n if (childResult instanceof ParsingError$1) {\n result = childResult;\n } else if (!result && childResult) {\n result = new ParsingError$1('', '\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.');\n } else if (result && childResult && result !== childResult) {\n result = new ParsingError$1('', 'Only one zoom-based \"step\" or \"interpolate\" subexpression may be used in an expression.');\n }\n });\n return result;\n}\nfunction getExpectedType(spec) {\n const types = {\n color: ColorType,\n string: StringType,\n number: NumberType,\n enum: StringType,\n boolean: BooleanType,\n formatted: FormattedType,\n resolvedImage: ResolvedImageType\n };\n if (spec.type === 'array') {\n return array$1(types[spec.value] || ValueType, spec.length);\n }\n return types[spec.type];\n}\nfunction getDefaultValue(spec) {\n if (spec.type === 'color' && (isFunction(spec.default) || Array.isArray(spec.default))) {\n // Special case for heatmap-color: it uses the 'default:' to define a\n // default color ramp, but createExpression expects a simple value to fall\n // back to in case of runtime errors\n return new Color$1(0, 0, 0, 0);\n } else if (spec.type === 'color') {\n return Color$1.parse(spec.default) || null;\n } else if (spec.default === undefined) {\n return null;\n } else {\n return spec.default;\n }\n}\n\n// \n// Turn jsonlint-lines-primitives objects into primitive objects\nfunction unbundle(value) {\n if (value instanceof Number || value instanceof String || value instanceof Boolean) {\n return value.valueOf();\n } else {\n return value;\n }\n}\nfunction deepUnbundle(value) {\n if (Array.isArray(value)) {\n return value.map(deepUnbundle);\n } else if (value instanceof Object && !(value instanceof Number || value instanceof String || value instanceof Boolean)) {\n const unbundledValue = {};\n for (const key in value) {\n unbundledValue[key] = deepUnbundle(value[key]);\n }\n return unbundledValue;\n }\n return unbundle(value);\n}\n\nvar spec = {\"$version\":8,\"$root\":{\"version\":{\"required\":true,\"type\":\"enum\",\"values\":[8]},\"name\":{\"type\":\"string\"},\"metadata\":{\"type\":\"*\"},\"center\":{\"type\":\"array\",\"value\":\"number\"},\"zoom\":{\"type\":\"number\"},\"bearing\":{\"type\":\"number\",\"default\":0,\"period\":360,\"units\":\"degrees\"},\"pitch\":{\"type\":\"number\",\"default\":0,\"units\":\"degrees\"},\"light\":{\"type\":\"light\"},\"terrain\":{\"type\":\"terrain\"},\"fog\":{\"type\":\"fog\"},\"sources\":{\"required\":true,\"type\":\"sources\"},\"sprite\":{\"type\":\"string\"},\"glyphs\":{\"type\":\"string\"},\"transition\":{\"type\":\"transition\"},\"projection\":{\"type\":\"projection\"},\"layers\":{\"required\":true,\"type\":\"array\",\"value\":\"layer\"}},\"sources\":{\"*\":{\"type\":\"source\"}},\"source\":[\"source_vector\",\"source_raster\",\"source_raster_dem\",\"source_geojson\",\"source_video\",\"source_image\"],\"source_vector\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"vector\":{}}},\"url\":{\"type\":\"string\"},\"tiles\":{\"type\":\"array\",\"value\":\"string\"},\"bounds\":{\"type\":\"array\",\"value\":\"number\",\"length\":4,\"default\":[-180,-85.051129,180,85.051129]},\"scheme\":{\"type\":\"enum\",\"values\":{\"xyz\":{},\"tms\":{}},\"default\":\"xyz\"},\"minzoom\":{\"type\":\"number\",\"default\":0},\"maxzoom\":{\"type\":\"number\",\"default\":22},\"attribution\":{\"type\":\"string\"},\"promoteId\":{\"type\":\"promoteId\"},\"volatile\":{\"type\":\"boolean\",\"default\":false},\"*\":{\"type\":\"*\"}},\"source_raster\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"raster\":{}}},\"url\":{\"type\":\"string\"},\"tiles\":{\"type\":\"array\",\"value\":\"string\"},\"bounds\":{\"type\":\"array\",\"value\":\"number\",\"length\":4,\"default\":[-180,-85.051129,180,85.051129]},\"minzoom\":{\"type\":\"number\",\"default\":0},\"maxzoom\":{\"type\":\"number\",\"default\":22},\"tileSize\":{\"type\":\"number\",\"default\":512,\"units\":\"pixels\"},\"scheme\":{\"type\":\"enum\",\"values\":{\"xyz\":{},\"tms\":{}},\"default\":\"xyz\"},\"attribution\":{\"type\":\"string\"},\"volatile\":{\"type\":\"boolean\",\"default\":false},\"*\":{\"type\":\"*\"}},\"source_raster_dem\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"raster-dem\":{}}},\"url\":{\"type\":\"string\"},\"tiles\":{\"type\":\"array\",\"value\":\"string\"},\"bounds\":{\"type\":\"array\",\"value\":\"number\",\"length\":4,\"default\":[-180,-85.051129,180,85.051129]},\"minzoom\":{\"type\":\"number\",\"default\":0},\"maxzoom\":{\"type\":\"number\",\"default\":22},\"tileSize\":{\"type\":\"number\",\"default\":512,\"units\":\"pixels\"},\"attribution\":{\"type\":\"string\"},\"encoding\":{\"type\":\"enum\",\"values\":{\"terrarium\":{},\"mapbox\":{}},\"default\":\"mapbox\"},\"volatile\":{\"type\":\"boolean\",\"default\":false},\"*\":{\"type\":\"*\"}},\"source_geojson\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"geojson\":{}}},\"data\":{\"type\":\"*\"},\"maxzoom\":{\"type\":\"number\",\"default\":18},\"attribution\":{\"type\":\"string\"},\"buffer\":{\"type\":\"number\",\"default\":128,\"maximum\":512,\"minimum\":0},\"filter\":{\"type\":\"*\"},\"tolerance\":{\"type\":\"number\",\"default\":0.375},\"cluster\":{\"type\":\"boolean\",\"default\":false},\"clusterRadius\":{\"type\":\"number\",\"default\":50,\"minimum\":0},\"clusterMaxZoom\":{\"type\":\"number\"},\"clusterMinPoints\":{\"type\":\"number\"},\"clusterProperties\":{\"type\":\"*\"},\"lineMetrics\":{\"type\":\"boolean\",\"default\":false},\"generateId\":{\"type\":\"boolean\",\"default\":false},\"promoteId\":{\"type\":\"promoteId\"}},\"source_video\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"video\":{}}},\"urls\":{\"required\":true,\"type\":\"array\",\"value\":\"string\"},\"coordinates\":{\"required\":true,\"type\":\"array\",\"length\":4,\"value\":{\"type\":\"array\",\"length\":2,\"value\":\"number\"}}},\"source_image\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"image\":{}}},\"url\":{\"required\":true,\"type\":\"string\"},\"coordinates\":{\"required\":true,\"type\":\"array\",\"length\":4,\"value\":{\"type\":\"array\",\"length\":2,\"value\":\"number\"}}},\"layer\":{\"id\":{\"type\":\"string\",\"required\":true},\"type\":{\"type\":\"enum\",\"values\":{\"fill\":{},\"line\":{},\"symbol\":{},\"circle\":{},\"heatmap\":{},\"fill-extrusion\":{},\"raster\":{},\"hillshade\":{},\"background\":{},\"sky\":{}},\"required\":true},\"metadata\":{\"type\":\"*\"},\"source\":{\"type\":\"string\"},\"source-layer\":{\"type\":\"string\"},\"minzoom\":{\"type\":\"number\",\"minimum\":0,\"maximum\":24},\"maxzoom\":{\"type\":\"number\",\"minimum\":0,\"maximum\":24},\"filter\":{\"type\":\"filter\"},\"layout\":{\"type\":\"layout\"},\"paint\":{\"type\":\"paint\"}},\"layout\":[\"layout_fill\",\"layout_line\",\"layout_circle\",\"layout_heatmap\",\"layout_fill-extrusion\",\"layout_symbol\",\"layout_raster\",\"layout_hillshade\",\"layout_background\",\"layout_sky\"],\"layout_background\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_sky\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_fill\":{\"fill-sort-key\":{\"type\":\"number\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_circle\":{\"circle-sort-key\":{\"type\":\"number\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_heatmap\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_fill-extrusion\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"},\"fill-extrusion-edge-radius\":{\"type\":\"number\",\"private\":true,\"default\":0,\"minimum\":0,\"maximum\":1,\"property-type\":\"constant\"}},\"layout_line\":{\"line-cap\":{\"type\":\"enum\",\"values\":{\"butt\":{},\"round\":{},\"square\":{}},\"default\":\"butt\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-join\":{\"type\":\"enum\",\"values\":{\"bevel\":{},\"round\":{},\"miter\":{}},\"default\":\"miter\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-miter-limit\":{\"type\":\"number\",\"default\":2,\"requires\":[{\"line-join\":\"miter\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-round-limit\":{\"type\":\"number\",\"default\":1.05,\"requires\":[{\"line-join\":\"round\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-sort-key\":{\"type\":\"number\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_symbol\":{\"symbol-placement\":{\"type\":\"enum\",\"values\":{\"point\":{},\"line\":{},\"line-center\":{}},\"default\":\"point\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-spacing\":{\"type\":\"number\",\"default\":250,\"minimum\":1,\"units\":\"pixels\",\"requires\":[{\"symbol-placement\":\"line\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-avoid-edges\":{\"type\":\"boolean\",\"default\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-sort-key\":{\"type\":\"number\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"symbol-z-order\":{\"type\":\"enum\",\"values\":{\"auto\":{},\"viewport-y\":{},\"source\":{}},\"default\":\"auto\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-allow-overlap\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-ignore-placement\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-optional\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"icon-image\",\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-rotation-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{},\"auto\":{}},\"default\":\"auto\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-size\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"units\":\"factor of the original icon size\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-text-fit\":{\"type\":\"enum\",\"values\":{\"none\":{},\"width\":{},\"height\":{},\"both\":{}},\"default\":\"none\",\"requires\":[\"icon-image\",\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-text-fit-padding\":{\"type\":\"array\",\"value\":\"number\",\"length\":4,\"default\":[0,0,0,0],\"units\":\"pixels\",\"requires\":[\"icon-image\",\"text-field\",{\"icon-text-fit\":[\"both\",\"width\",\"height\"]}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-image\":{\"type\":\"resolvedImage\",\"tokens\":true,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-rotate\":{\"type\":\"number\",\"default\":0,\"period\":360,\"units\":\"degrees\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-padding\":{\"type\":\"number\",\"default\":2,\"minimum\":0,\"units\":\"pixels\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-keep-upright\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"icon-image\",{\"icon-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-offset\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-anchor\":{\"type\":\"enum\",\"values\":{\"center\":{},\"left\":{},\"right\":{},\"top\":{},\"bottom\":{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},\"default\":\"center\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-pitch-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{},\"auto\":{}},\"default\":\"auto\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-pitch-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{},\"auto\":{}},\"default\":\"auto\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotation-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{},\"auto\":{}},\"default\":\"auto\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-field\":{\"type\":\"formatted\",\"default\":\"\",\"tokens\":true,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-font\":{\"type\":\"array\",\"value\":\"string\",\"default\":[\"Open Sans Regular\",\"Arial Unicode MS Regular\"],\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-size\":{\"type\":\"number\",\"default\":16,\"minimum\":0,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-width\":{\"type\":\"number\",\"default\":10,\"minimum\":0,\"units\":\"ems\",\"requires\":[\"text-field\",{\"symbol-placement\":[\"point\"]}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-line-height\":{\"type\":\"number\",\"default\":1.2,\"units\":\"ems\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-letter-spacing\":{\"type\":\"number\",\"default\":0,\"units\":\"ems\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-justify\":{\"type\":\"enum\",\"values\":{\"auto\":{},\"left\":{},\"center\":{},\"right\":{}},\"default\":\"center\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-radial-offset\":{\"type\":\"number\",\"units\":\"ems\",\"default\":0,\"requires\":[\"text-field\"],\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]}},\"text-variable-anchor\":{\"type\":\"array\",\"value\":\"enum\",\"values\":{\"center\":{},\"left\":{},\"right\":{},\"top\":{},\"bottom\":{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},\"requires\":[\"text-field\",{\"symbol-placement\":[\"point\"]}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-anchor\":{\"type\":\"enum\",\"values\":{\"center\":{},\"left\":{},\"right\":{},\"top\":{},\"bottom\":{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},\"default\":\"center\",\"requires\":[\"text-field\",{\"!\":\"text-variable-anchor\"}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-angle\":{\"type\":\"number\",\"default\":45,\"units\":\"degrees\",\"requires\":[\"text-field\",{\"symbol-placement\":[\"line\",\"line-center\"]}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-writing-mode\":{\"type\":\"array\",\"value\":\"enum\",\"values\":{\"horizontal\":{},\"vertical\":{}},\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotate\":{\"type\":\"number\",\"default\":0,\"period\":360,\"units\":\"degrees\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-padding\":{\"type\":\"number\",\"default\":2,\"minimum\":0,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-keep-upright\":{\"type\":\"boolean\",\"default\":true,\"requires\":[\"text-field\",{\"text-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-transform\":{\"type\":\"enum\",\"values\":{\"none\":{},\"uppercase\":{},\"lowercase\":{}},\"default\":\"none\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-offset\":{\"type\":\"array\",\"value\":\"number\",\"units\":\"ems\",\"length\":2,\"default\":[0,0],\"requires\":[\"text-field\",{\"!\":\"text-radial-offset\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-allow-overlap\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-ignore-placement\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-optional\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"text-field\",\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_raster\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_hillshade\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"filter\":{\"type\":\"array\",\"value\":\"*\"},\"filter_symbol\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\",\"pitch\",\"distance-from-center\"]}},\"filter_fill\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_line\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_circle\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_fill-extrusion\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_heatmap\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_operator\":{\"type\":\"enum\",\"values\":{\"==\":{},\"!=\":{},\">\":{},\">=\":{},\"<\":{},\"<=\":{},\"in\":{},\"!in\":{},\"all\":{},\"any\":{},\"none\":{},\"has\":{},\"!has\":{},\"within\":{}}},\"geometry_type\":{\"type\":\"enum\",\"values\":{\"Point\":{},\"LineString\":{},\"Polygon\":{}}},\"function\":{\"expression\":{\"type\":\"expression\"},\"stops\":{\"type\":\"array\",\"value\":\"function_stop\"},\"base\":{\"type\":\"number\",\"default\":1,\"minimum\":0},\"property\":{\"type\":\"string\",\"default\":\"$zoom\"},\"type\":{\"type\":\"enum\",\"values\":{\"identity\":{},\"exponential\":{},\"interval\":{},\"categorical\":{}},\"default\":\"exponential\"},\"colorSpace\":{\"type\":\"enum\",\"values\":{\"rgb\":{},\"lab\":{},\"hcl\":{}},\"default\":\"rgb\"},\"default\":{\"type\":\"*\",\"required\":false}},\"function_stop\":{\"type\":\"array\",\"minimum\":0,\"maximum\":24,\"value\":[\"number\",\"color\"],\"length\":2},\"expression\":{\"type\":\"array\",\"value\":\"*\",\"minimum\":1},\"expression_name\":{\"type\":\"enum\",\"values\":{\"let\":{\"group\":\"Variable binding\"},\"var\":{\"group\":\"Variable binding\"},\"literal\":{\"group\":\"Types\"},\"array\":{\"group\":\"Types\"},\"at\":{\"group\":\"Lookup\"},\"in\":{\"group\":\"Lookup\"},\"index-of\":{\"group\":\"Lookup\"},\"slice\":{\"group\":\"Lookup\"},\"case\":{\"group\":\"Decision\"},\"match\":{\"group\":\"Decision\"},\"coalesce\":{\"group\":\"Decision\"},\"step\":{\"group\":\"Ramps, scales, curves\"},\"interpolate\":{\"group\":\"Ramps, scales, curves\"},\"interpolate-hcl\":{\"group\":\"Ramps, scales, curves\"},\"interpolate-lab\":{\"group\":\"Ramps, scales, curves\"},\"ln2\":{\"group\":\"Math\"},\"pi\":{\"group\":\"Math\"},\"e\":{\"group\":\"Math\"},\"typeof\":{\"group\":\"Types\"},\"string\":{\"group\":\"Types\"},\"number\":{\"group\":\"Types\"},\"boolean\":{\"group\":\"Types\"},\"object\":{\"group\":\"Types\"},\"collator\":{\"group\":\"Types\"},\"format\":{\"group\":\"Types\"},\"image\":{\"group\":\"Types\"},\"number-format\":{\"group\":\"Types\"},\"to-string\":{\"group\":\"Types\"},\"to-number\":{\"group\":\"Types\"},\"to-boolean\":{\"group\":\"Types\"},\"to-rgba\":{\"group\":\"Color\"},\"to-color\":{\"group\":\"Types\"},\"rgb\":{\"group\":\"Color\"},\"rgba\":{\"group\":\"Color\"},\"get\":{\"group\":\"Lookup\"},\"has\":{\"group\":\"Lookup\"},\"length\":{\"group\":\"Lookup\"},\"properties\":{\"group\":\"Feature data\"},\"feature-state\":{\"group\":\"Feature data\"},\"geometry-type\":{\"group\":\"Feature data\"},\"id\":{\"group\":\"Feature data\"},\"zoom\":{\"group\":\"Camera\"},\"pitch\":{\"group\":\"Camera\"},\"distance-from-center\":{\"group\":\"Camera\"},\"heatmap-density\":{\"group\":\"Heatmap\"},\"line-progress\":{\"group\":\"Feature data\"},\"sky-radial-progress\":{\"group\":\"sky\"},\"accumulated\":{\"group\":\"Feature data\"},\"+\":{\"group\":\"Math\"},\"*\":{\"group\":\"Math\"},\"-\":{\"group\":\"Math\"},\"/\":{\"group\":\"Math\"},\"%\":{\"group\":\"Math\"},\"^\":{\"group\":\"Math\"},\"sqrt\":{\"group\":\"Math\"},\"log10\":{\"group\":\"Math\"},\"ln\":{\"group\":\"Math\"},\"log2\":{\"group\":\"Math\"},\"sin\":{\"group\":\"Math\"},\"cos\":{\"group\":\"Math\"},\"tan\":{\"group\":\"Math\"},\"asin\":{\"group\":\"Math\"},\"acos\":{\"group\":\"Math\"},\"atan\":{\"group\":\"Math\"},\"min\":{\"group\":\"Math\"},\"max\":{\"group\":\"Math\"},\"round\":{\"group\":\"Math\"},\"abs\":{\"group\":\"Math\"},\"ceil\":{\"group\":\"Math\"},\"floor\":{\"group\":\"Math\"},\"distance\":{\"group\":\"Math\"},\"==\":{\"group\":\"Decision\"},\"!=\":{\"group\":\"Decision\"},\">\":{\"group\":\"Decision\"},\"<\":{\"group\":\"Decision\"},\">=\":{\"group\":\"Decision\"},\"<=\":{\"group\":\"Decision\"},\"all\":{\"group\":\"Decision\"},\"any\":{\"group\":\"Decision\"},\"!\":{\"group\":\"Decision\"},\"within\":{\"group\":\"Decision\"},\"is-supported-script\":{\"group\":\"String\"},\"upcase\":{\"group\":\"String\"},\"downcase\":{\"group\":\"String\"},\"concat\":{\"group\":\"String\"},\"resolved-locale\":{\"group\":\"String\"}}},\"fog\":{\"range\":{\"type\":\"array\",\"default\":[0.5,10],\"minimum\":-20,\"maximum\":20,\"length\":2,\"value\":\"number\",\"property-type\":\"data-constant\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]}},\"color\":{\"type\":\"color\",\"property-type\":\"data-constant\",\"default\":\"#ffffff\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"high-color\":{\"type\":\"color\",\"property-type\":\"data-constant\",\"default\":\"#245cdf\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"space-color\":{\"type\":\"color\",\"property-type\":\"data-constant\",\"default\":[\"interpolate\",[\"linear\"],[\"zoom\"],4,\"#010b19\",7,\"#367ab9\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"horizon-blend\":{\"type\":\"number\",\"property-type\":\"data-constant\",\"default\":[\"interpolate\",[\"linear\"],[\"zoom\"],4,0.2,7,0.1],\"minimum\":0,\"maximum\":1,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"star-intensity\":{\"type\":\"number\",\"property-type\":\"data-constant\",\"default\":[\"interpolate\",[\"linear\"],[\"zoom\"],5,0.35,6,0],\"minimum\":0,\"maximum\":1,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true}},\"light\":{\"anchor\":{\"type\":\"enum\",\"default\":\"viewport\",\"values\":{\"map\":{},\"viewport\":{}},\"property-type\":\"data-constant\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]}},\"position\":{\"type\":\"array\",\"default\":[1.15,210,30],\"length\":3,\"value\":\"number\",\"property-type\":\"data-constant\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]}},\"color\":{\"type\":\"color\",\"property-type\":\"data-constant\",\"default\":\"#ffffff\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"intensity\":{\"type\":\"number\",\"property-type\":\"data-constant\",\"default\":0.5,\"minimum\":0,\"maximum\":1,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true}},\"projection\":{\"name\":{\"type\":\"enum\",\"values\":{\"albers\":{},\"equalEarth\":{},\"equirectangular\":{},\"lambertConformalConic\":{},\"mercator\":{},\"naturalEarth\":{},\"winkelTripel\":{},\"globe\":{}},\"default\":\"mercator\",\"required\":true},\"center\":{\"type\":\"array\",\"length\":2,\"value\":\"number\",\"property-type\":\"data-constant\",\"minimum\":[-180,-90],\"maximum\":[180,90],\"transition\":false,\"requires\":[{\"name\":[\"albers\",\"lambertConformalConic\"]}]},\"parallels\":{\"type\":\"array\",\"length\":2,\"value\":\"number\",\"property-type\":\"data-constant\",\"minimum\":[-90,-90],\"maximum\":[90,90],\"transition\":false,\"requires\":[{\"name\":[\"albers\",\"lambertConformalConic\"]}]}},\"terrain\":{\"source\":{\"type\":\"string\",\"required\":true},\"exaggeration\":{\"type\":\"number\",\"property-type\":\"data-constant\",\"default\":1,\"minimum\":0,\"maximum\":1000,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true,\"requires\":[\"source\"]}},\"paint\":[\"paint_fill\",\"paint_line\",\"paint_circle\",\"paint_heatmap\",\"paint_fill-extrusion\",\"paint_symbol\",\"paint_raster\",\"paint_hillshade\",\"paint_background\",\"paint_sky\"],\"paint_fill\":{\"fill-antialias\":{\"type\":\"boolean\",\"default\":true,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[{\"!\":\"fill-pattern\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-outline-color\":{\"type\":\"color\",\"transition\":true,\"requires\":[{\"!\":\"fill-pattern\"},{\"fill-antialias\":true}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"fill-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-pattern\":{\"type\":\"resolvedImage\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"}},\"paint_fill-extrusion\":{\"fill-extrusion-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[{\"!\":\"fill-extrusion-pattern\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"fill-extrusion-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-pattern\":{\"type\":\"resolvedImage\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-height\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"units\":\"meters\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-base\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"units\":\"meters\",\"transition\":true,\"requires\":[\"fill-extrusion-height\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-vertical-gradient\":{\"type\":\"boolean\",\"default\":true,\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-ambient-occlusion-intensity\":{\"property-type\":\"data-constant\",\"type\":\"number\",\"private\":true,\"default\":0,\"minimum\":0,\"maximum\":1,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"fill-extrusion-ambient-occlusion-radius\":{\"property-type\":\"data-constant\",\"type\":\"number\",\"private\":true,\"default\":3,\"minimum\":0,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true,\"requires\":[\"fill-extrusion-edge-radius\"]}},\"paint_line\":{\"line-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[{\"!\":\"line-pattern\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"line-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-width\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-gap-width\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-offset\":{\"type\":\"number\",\"default\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-blur\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-dasharray\":{\"type\":\"array\",\"value\":\"number\",\"minimum\":0,\"transition\":false,\"units\":\"line widths\",\"requires\":[{\"!\":\"line-pattern\"}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-pattern\":{\"type\":\"resolvedImage\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-gradient\":{\"type\":\"color\",\"transition\":false,\"requires\":[{\"!\":\"line-pattern\"},{\"source\":\"geojson\",\"has\":{\"lineMetrics\":true}}],\"expression\":{\"interpolated\":true,\"parameters\":[\"line-progress\"]},\"property-type\":\"color-ramp\"},\"line-trim-offset\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"minimum\":[0,0],\"maximum\":[1,1],\"transition\":false,\"requires\":[{\"source\":\"geojson\",\"has\":{\"lineMetrics\":true}}],\"property-type\":\"constant\"}},\"paint_circle\":{\"circle-radius\":{\"type\":\"number\",\"default\":5,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-blur\":{\"type\":\"number\",\"default\":0,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"circle-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-scale\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"viewport\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-stroke-width\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"}},\"paint_heatmap\":{\"heatmap-radius\":{\"type\":\"number\",\"default\":30,\"minimum\":1,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-weight\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"transition\":false,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-intensity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"heatmap-color\":{\"type\":\"color\",\"default\":[\"interpolate\",[\"linear\"],[\"heatmap-density\"],0,\"rgba(0, 0, 255, 0)\",0.1,\"royalblue\",0.3,\"cyan\",0.5,\"lime\",0.7,\"yellow\",1,\"red\"],\"transition\":false,\"expression\":{\"interpolated\":true,\"parameters\":[\"heatmap-density\"]},\"property-type\":\"color-ramp\"},\"heatmap-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_symbol\":{\"icon-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-color\":{\"type\":\"color\",\"default\":\"rgba(0, 0, 0, 0)\",\"transition\":true,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-width\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-blur\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"icon-image\",\"icon-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"overridable\":true,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-color\":{\"type\":\"color\",\"default\":\"rgba(0, 0, 0, 0)\",\"transition\":true,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-width\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-blur\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"text-field\",\"text-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_raster\":{\"raster-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-hue-rotate\":{\"type\":\"number\",\"default\":0,\"period\":360,\"transition\":true,\"units\":\"degrees\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-min\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-max\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-saturation\":{\"type\":\"number\",\"default\":0,\"minimum\":-1,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-contrast\":{\"type\":\"number\",\"default\":0,\"minimum\":-1,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-resampling\":{\"type\":\"enum\",\"values\":{\"linear\":{},\"nearest\":{}},\"default\":\"linear\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-fade-duration\":{\"type\":\"number\",\"default\":300,\"minimum\":0,\"transition\":false,\"units\":\"milliseconds\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_hillshade\":{\"hillshade-illumination-direction\":{\"type\":\"number\",\"default\":335,\"minimum\":0,\"maximum\":359,\"transition\":false,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-illumination-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"viewport\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-exaggeration\":{\"type\":\"number\",\"default\":0.5,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-shadow-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-highlight-color\":{\"type\":\"color\",\"default\":\"#FFFFFF\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-accent-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_background\":{\"background-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[{\"!\":\"background-pattern\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"background-pattern\":{\"type\":\"resolvedImage\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"background-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_sky\":{\"sky-type\":{\"type\":\"enum\",\"values\":{\"gradient\":{},\"atmosphere\":{}},\"default\":\"atmosphere\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"sky-atmosphere-sun\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"units\":\"degrees\",\"minimum\":[0,0],\"maximum\":[360,180],\"transition\":false,\"requires\":[{\"sky-type\":\"atmosphere\"}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"sky-atmosphere-sun-intensity\":{\"type\":\"number\",\"requires\":[{\"sky-type\":\"atmosphere\"}],\"default\":10,\"minimum\":0,\"maximum\":100,\"transition\":false,\"property-type\":\"data-constant\"},\"sky-gradient-center\":{\"type\":\"array\",\"requires\":[{\"sky-type\":\"gradient\"}],\"value\":\"number\",\"default\":[0,0],\"length\":2,\"units\":\"degrees\",\"minimum\":[0,0],\"maximum\":[360,180],\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"sky-gradient-radius\":{\"type\":\"number\",\"requires\":[{\"sky-type\":\"gradient\"}],\"default\":90,\"minimum\":0,\"maximum\":180,\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"sky-gradient\":{\"type\":\"color\",\"default\":[\"interpolate\",[\"linear\"],[\"sky-radial-progress\"],0.8,\"#87ceeb\",1,\"white\"],\"transition\":false,\"requires\":[{\"sky-type\":\"gradient\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"sky-radial-progress\"]},\"property-type\":\"color-ramp\"},\"sky-atmosphere-halo-color\":{\"type\":\"color\",\"default\":\"white\",\"transition\":false,\"requires\":[{\"sky-type\":\"atmosphere\"}],\"property-type\":\"data-constant\"},\"sky-atmosphere-color\":{\"type\":\"color\",\"default\":\"white\",\"transition\":false,\"requires\":[{\"sky-type\":\"atmosphere\"}],\"property-type\":\"data-constant\"},\"sky-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"transition\":{\"duration\":{\"type\":\"number\",\"default\":300,\"minimum\":0,\"units\":\"milliseconds\"},\"delay\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"units\":\"milliseconds\"}},\"property-type\":{\"data-driven\":{\"type\":\"property-type\"},\"color-ramp\":{\"type\":\"property-type\"},\"data-constant\":{\"type\":\"property-type\"},\"constant\":{\"type\":\"property-type\"}},\"promoteId\":{\"*\":{\"type\":\"string\"}}};\n\n// \nfunction isExpressionFilter(filter) {\n if (filter === true || filter === false) {\n return true;\n }\n if (!Array.isArray(filter) || filter.length === 0) {\n return false;\n }\n switch (filter[0]) {\n case 'has':\n return filter.length >= 2 && filter[1] !== '$id' && filter[1] !== '$type';\n case 'in':\n return filter.length >= 3 && (typeof filter[1] !== 'string' || Array.isArray(filter[2]));\n case '!in':\n case '!has':\n case 'none':\n return false;\n case '==':\n case '!=':\n case '>':\n case '>=':\n case '<':\n case '<=':\n return filter.length !== 3 || (Array.isArray(filter[1]) || Array.isArray(filter[2]));\n case 'any':\n case 'all':\n for (const f of filter.slice(1)) {\n if (!isExpressionFilter(f) && typeof f !== 'boolean') {\n return false;\n }\n }\n return true;\n default:\n return true;\n }\n}\n/**\n * Given a filter expressed as nested arrays, return a new function\n * that evaluates whether a given feature (with a .properties or .tags property)\n * passes its test.\n *\n * @private\n * @param {Array} filter mapbox gl filter\n * @param {string} layerType the type of the layer this filter will be applied to.\n * @returns {Function} filter-evaluating function\n */\nfunction createFilter(filter, layerType = 'fill') {\n if (filter === null || filter === undefined) {\n return {\n filter: () => true,\n needGeometry: false,\n needFeature: false\n };\n }\n if (!isExpressionFilter(filter)) {\n filter = convertFilter(filter);\n }\n const filterExp = filter;\n let staticFilter = true;\n try {\n staticFilter = extractStaticFilter(filterExp);\n } catch (e) {\n console.warn(`Failed to extract static filter. Filter will continue working, but at higher memory usage and slower framerate.\nThis is most likely a bug, please report this via https://github.com/mapbox/mapbox-gl-js/issues/new?assignees=&labels=&template=Bug_report.md\nand paste the contents of this message in the report.\nThank you!\nFilter Expression:\n${ JSON.stringify(filterExp, null, 2) }\n `);\n }\n // Compile the static component of the filter\n const filterSpec = spec[`filter_${ layerType }`];\n const compiledStaticFilter = createExpression(staticFilter, filterSpec);\n let filterFunc = null;\n if (compiledStaticFilter.result === 'error') {\n throw new Error(compiledStaticFilter.value.map(err => `${ err.key }: ${ err.message }`).join(', '));\n } else {\n filterFunc = (globalProperties, feature, canonical) => compiledStaticFilter.value.evaluate(globalProperties, feature, {}, canonical);\n }\n // If the static component is not equal to the entire filter then we have a dynamic component\n // Compile the dynamic component separately\n let dynamicFilterFunc = null;\n let needFeature = null;\n if (staticFilter !== filterExp) {\n const compiledDynamicFilter = createExpression(filterExp, filterSpec);\n if (compiledDynamicFilter.result === 'error') {\n throw new Error(compiledDynamicFilter.value.map(err => `${ err.key }: ${ err.message }`).join(', '));\n } else {\n dynamicFilterFunc = (globalProperties, feature, canonical, featureTileCoord, featureDistanceData) => compiledDynamicFilter.value.evaluate(globalProperties, feature, {}, canonical, undefined, undefined, featureTileCoord, featureDistanceData);\n needFeature = !isFeatureConstant(compiledDynamicFilter.value.expression);\n }\n }\n filterFunc = filterFunc;\n const needGeometry = geometryNeeded(staticFilter);\n return {\n filter: filterFunc,\n dynamicFilter: dynamicFilterFunc ? dynamicFilterFunc : undefined,\n needGeometry,\n needFeature: !!needFeature\n };\n}\nfunction extractStaticFilter(filter) {\n if (!isDynamicFilter(filter)) {\n return filter;\n }\n // Shallow copy so we can replace expressions in-place\n let result = deepUnbundle(filter);\n // 1. Union branches\n unionDynamicBranches(result);\n // 2. Collapse dynamic conditions to `true`\n result = collapseDynamicBooleanExpressions(result);\n return result;\n}\nfunction collapseDynamicBooleanExpressions(expression) {\n if (!Array.isArray(expression)) {\n return expression;\n }\n const collapsed = collapsedExpression(expression);\n if (collapsed === true) {\n return collapsed;\n } else {\n return collapsed.map(subExpression => collapseDynamicBooleanExpressions(subExpression));\n }\n}\n/**\n * Traverses the expression and replaces all instances of branching on a\n * `dynamic` conditional (such as `['pitch']` or `['distance-from-center']`)\n * into an `any` expression.\n * This ensures that all possible outcomes of a `dynamic` branch are considered\n * when evaluating the expression upfront during filtering.\n *\n * @param {Array} filter the filter expression mutated in-place.\n */\nfunction unionDynamicBranches(filter) {\n let isBranchingDynamically = false;\n const branches = [];\n if (filter[0] === 'case') {\n for (let i = 1; i < filter.length - 1; i += 2) {\n isBranchingDynamically = isBranchingDynamically || isDynamicFilter(filter[i]);\n branches.push(filter[i + 1]);\n }\n branches.push(filter[filter.length - 1]);\n } else if (filter[0] === 'match') {\n isBranchingDynamically = isBranchingDynamically || isDynamicFilter(filter[1]);\n for (let i = 2; i < filter.length - 1; i += 2) {\n branches.push(filter[i + 1]);\n }\n branches.push(filter[filter.length - 1]);\n } else if (filter[0] === 'step') {\n isBranchingDynamically = isBranchingDynamically || isDynamicFilter(filter[1]);\n for (let i = 1; i < filter.length - 1; i += 2) {\n branches.push(filter[i + 1]);\n }\n }\n if (isBranchingDynamically) {\n filter.length = 0;\n filter.push('any', ...branches);\n }\n // traverse and recurse into children\n for (let i = 1; i < filter.length; i++) {\n unionDynamicBranches(filter[i]);\n }\n}\nfunction isDynamicFilter(filter) {\n // Base Cases\n if (!Array.isArray(filter)) {\n return false;\n }\n if (isRootExpressionDynamic(filter[0])) {\n return true;\n }\n for (let i = 1; i < filter.length; i++) {\n const child = filter[i];\n if (isDynamicFilter(child)) {\n return true;\n }\n }\n return false;\n}\nfunction isRootExpressionDynamic(expression) {\n return expression === 'pitch' || expression === 'distance-from-center';\n}\nconst dynamicConditionExpressions = new Set([\n 'in',\n '==',\n '!=',\n '>',\n '>=',\n '<',\n '<=',\n 'to-boolean'\n]);\nfunction collapsedExpression(expression) {\n if (dynamicConditionExpressions.has(expression[0])) {\n for (let i = 1; i < expression.length; i++) {\n const param = expression[i];\n if (isDynamicFilter(param)) {\n return true;\n }\n }\n }\n return expression;\n}\n// Comparison function to sort numbers and strings\nfunction compare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\nfunction geometryNeeded(filter) {\n if (!Array.isArray(filter))\n return false;\n if (filter[0] === 'within')\n return true;\n for (let index = 1; index < filter.length; index++) {\n if (geometryNeeded(filter[index]))\n return true;\n }\n return false;\n}\nfunction convertFilter(filter) {\n if (!filter)\n return true;\n const op = filter[0];\n if (filter.length <= 1)\n return op !== 'any';\n const converted = op === '==' ? convertComparisonOp(filter[1], filter[2], '==') : op === '!=' ? convertNegation(convertComparisonOp(filter[1], filter[2], '==')) : op === '<' || op === '>' || op === '<=' || op === '>=' ? convertComparisonOp(filter[1], filter[2], op) : op === 'any' ? convertDisjunctionOp(filter.slice(1)) : op === 'all' ? ['all'].concat(filter.slice(1).map(convertFilter)) : op === 'none' ? ['all'].concat(filter.slice(1).map(convertFilter).map(convertNegation)) : op === 'in' ? convertInOp(filter[1], filter.slice(2)) : op === '!in' ? convertNegation(convertInOp(filter[1], filter.slice(2))) : op === 'has' ? convertHasOp(filter[1]) : op === '!has' ? convertNegation(convertHasOp(filter[1])) : op === 'within' ? filter : true;\n return converted;\n}\nfunction convertComparisonOp(property, value, op) {\n switch (property) {\n case '$type':\n return [\n `filter-type-${ op }`,\n value\n ];\n case '$id':\n return [\n `filter-id-${ op }`,\n value\n ];\n default:\n return [\n `filter-${ op }`,\n property,\n value\n ];\n }\n}\nfunction convertDisjunctionOp(filters) {\n return ['any'].concat(filters.map(convertFilter));\n}\nfunction convertInOp(property, values) {\n if (values.length === 0) {\n return false;\n }\n switch (property) {\n case '$type':\n return [\n `filter-type-in`,\n [\n 'literal',\n values\n ]\n ];\n case '$id':\n return [\n `filter-id-in`,\n [\n 'literal',\n values\n ]\n ];\n default:\n if (values.length > 200 && !values.some(v => typeof v !== typeof values[0])) {\n return [\n 'filter-in-large',\n property,\n [\n 'literal',\n values.sort(compare)\n ]\n ];\n } else {\n return [\n 'filter-in-small',\n property,\n [\n 'literal',\n values\n ]\n ];\n }\n }\n}\nfunction convertHasOp(property) {\n switch (property) {\n case '$type':\n return true;\n case '$id':\n return [`filter-has-id`];\n default:\n return [\n `filter-has`,\n property\n ];\n }\n}\nfunction convertNegation(filter) {\n return [\n '!',\n filter\n ];\n}\n\n// \nvar refProperties = [\n 'type',\n 'source',\n 'source-layer',\n 'minzoom',\n 'maxzoom',\n 'filter',\n 'layout'\n];\n\n// \nfunction deref(layer, parent) {\n const result = {};\n for (const k in layer) {\n if (k !== 'ref') {\n result[k] = layer[k];\n }\n }\n refProperties.forEach(k => {\n if (k in parent) {\n result[k] = parent[k];\n }\n });\n return result;\n}\n/**\n * Given an array of layers, some of which may contain `ref` properties\n * whose value is the `id` of another property, return a new array where\n * such layers have been augmented with the 'type', 'source', etc. properties\n * from the parent layer, and the `ref` property has been removed.\n *\n * The input is not modified. The output may contain references to portions\n * of the input.\n *\n * @private\n * @param {Array} layers\n * @returns {Array}\n */\nfunction derefLayers(layers) {\n layers = layers.slice();\n const map = Object.create(null);\n for (let i = 0; i < layers.length; i++) {\n map[layers[i].id] = layers[i];\n }\n for (let i = 0; i < layers.length; i++) {\n if ('ref' in layers[i]) {\n layers[i] = deref(layers[i], map[layers[i].ref]);\n }\n }\n return layers;\n}\n\nvar fontWeights = {\n thin: 100,\n hairline: 100,\n 'ultra-light': 200,\n 'extra-light': 200,\n light: 300,\n book: 300,\n regular: 400,\n normal: 400,\n plain: 400,\n roman: 400,\n standard: 400,\n medium: 500,\n 'semi-bold': 600,\n 'demi-bold': 600,\n bold: 700,\n 'extra-bold': 800,\n 'ultra-bold': 800,\n heavy: 900,\n black: 900,\n 'heavy-black': 900,\n fat: 900,\n poster: 900,\n 'ultra-black': 950,\n 'extra-black': 950\n};\nvar sp = ' ';\nvar italicRE = /(italic|oblique)$/i;\nvar fontCache = {};\nvar mapboxToCssFont = function (fonts, size, lineHeight) {\n var cssData = fontCache[fonts];\n if (!cssData) {\n if (!Array.isArray(fonts)) {\n fonts = [fonts];\n }\n var weight = 400;\n var style = 'normal';\n var fontFamilies = [];\n var haveWeight, haveStyle;\n for (var i = 0, ii = fonts.length; i < ii; ++i) {\n var font = fonts[i];\n var parts = font.split(' ');\n var maybeWeight = parts[parts.length - 1].toLowerCase();\n if (maybeWeight == 'normal' || maybeWeight == 'italic' || maybeWeight == 'oblique') {\n style = haveStyle ? style : maybeWeight;\n haveStyle = true;\n parts.pop();\n maybeWeight = parts[parts.length - 1].toLowerCase();\n } else if (italicRE.test(maybeWeight)) {\n maybeWeight = maybeWeight.replace(italicRE, '');\n style = haveStyle ? style : parts[parts.length - 1].replace(maybeWeight, '');\n haveStyle = true;\n }\n for (var w in fontWeights) {\n var previousPart = parts.length > 1 ? parts[parts.length - 2].toLowerCase() : '';\n if (maybeWeight == w || maybeWeight == w.replace('-', '') || previousPart + '-' + maybeWeight == w) {\n weight = haveWeight ? weight : fontWeights[w];\n parts.pop();\n if (previousPart && w.startsWith(previousPart)) {\n parts.pop();\n }\n break;\n }\n }\n if (!haveWeight && typeof maybeWeight == 'number') {\n weight = maybeWeight;\n haveWeight = true;\n }\n var fontFamily = parts.join(sp).replace('Klokantech Noto Sans', 'Noto Sans');\n if (fontFamily.indexOf(sp) !== -1) {\n fontFamily = '\"' + fontFamily + '\"';\n }\n fontFamilies.push(fontFamily);\n }\n // CSS font property: font-style font-weight font-size/line-height font-family\n cssData = fontCache[fonts] = [\n style,\n weight,\n fontFamilies\n ];\n }\n return cssData[0] + sp + cssData[1] + sp + size + 'px' + (lineHeight ? '/' + lineHeight : '') + sp + cssData[2];\n};\n\nvar mb2css = /*@__PURE__*/getDefaultExportFromCjs(mapboxToCssFont);\n\nconst mapboxBaseUrl = 'https://api.mapbox.com';\n/**\n * Gets the path from a mapbox:// URL.\n * @param {string} url The Mapbox URL.\n * @return {string} The path.\n * @private\n */\nfunction getMapboxPath(url) {\n const startsWith = 'mapbox://';\n if (url.indexOf(startsWith) !== 0) {\n return '';\n }\n return url.slice(startsWith.length);\n}\n/**\n * Turns mapbox:// sprite URLs into resolvable URLs.\n * @param {string} url The sprite URL.\n * @param {string} token The access token.\n * @param {string} styleUrl The style URL.\n * @return {string} A resolvable URL.\n * @private\n */\nfunction normalizeSpriteUrl(url, token, styleUrl) {\n const mapboxPath = getMapboxPath(url);\n if (!mapboxPath) {\n return decodeURI(new URL(url, styleUrl).href);\n }\n const startsWith = 'sprites/';\n if (mapboxPath.indexOf(startsWith) !== 0) {\n throw new Error(`unexpected sprites url: ${ url }`);\n }\n const sprite = mapboxPath.slice(startsWith.length);\n return `${ mapboxBaseUrl }/styles/v1/${ sprite }/sprite?access_token=${ token }`;\n}\n/**\n * Turns mapbox:// style URLs into resolvable URLs.\n * @param {string} url The style URL.\n * @param {string} token The access token.\n * @return {string} A resolvable URL.\n * @private\n */\nfunction normalizeStyleUrl(url, token) {\n const mapboxPath = getMapboxPath(url);\n if (!mapboxPath) {\n return decodeURI(new URL(url, location.href).href);\n }\n const startsWith = 'styles/';\n if (mapboxPath.indexOf(startsWith) !== 0) {\n throw new Error(`unexpected style url: ${ url }`);\n }\n const style = mapboxPath.slice(startsWith.length);\n return `${ mapboxBaseUrl }/styles/v1/${ style }?&access_token=${ token }`;\n}\nconst mapboxSubdomains = [\n 'a',\n 'b',\n 'c',\n 'd'\n];\n/**\n * Turns mapbox:// source URLs into vector tile URL templates.\n * @param {string} url The source URL.\n * @param {string} token The access token.\n * @param {string} tokenParam The access token key.\n * @param {string} styleUrl The style URL.\n * @return {Array} A vector tile template.\n * @private\n */\nfunction normalizeSourceUrl(url, token, tokenParam, styleUrl) {\n const urlObject = new URL(url, styleUrl);\n const mapboxPath = getMapboxPath(url);\n if (!mapboxPath) {\n if (!token) {\n return [decodeURI(urlObject.href)];\n }\n if (!urlObject.searchParams.has(tokenParam)) {\n urlObject.searchParams.set(tokenParam, token);\n }\n return [decodeURI(urlObject.href)];\n }\n if (mapboxPath === 'mapbox.satellite') {\n const sizeFactor = window.devicePixelRatio >= 1.5 ? '@2x' : '';\n return [`https://api.mapbox.com/v4/${ mapboxPath }/{z}/{x}/{y}${ sizeFactor }.webp?access_token=${ token }`];\n }\n return mapboxSubdomains.map(sub => `https://${ sub }.tiles.mapbox.com/v4/${ mapboxPath }/{z}/{x}/{y}.vector.pbf?access_token=${ token }`);\n}\n\n/** @typedef {'Style'|'Source'|'Sprite'|'SpriteImage'|'Tiles'|'GeoJSON'} ResourceType */\n/** @typedef {import(\"ol\").Map} Map */\n/** @typedef {import(\"ol/layer\").Layer} Layer */\n/** @typedef {import(\"ol/layer\").Group} LayerGroup */\n/** @typedef {import(\"ol/layer\").Vector} VectorLayer */\n/** @typedef {import(\"ol/layer\").VectorTile} VectorTileLayer */\n/** @typedef {import(\"ol/source\").Source} Source */\nconst functionCacheByStyleId = {};\nconst filterCacheByStyleId = {};\nlet styleId = 0;\nfunction getStyleId(glStyle) {\n if (!glStyle.id) {\n glStyle.id = styleId++;\n }\n return glStyle.id;\n}\nfunction getStyleFunctionKey(glStyle, olLayer) {\n return getStyleId(glStyle) + '.' + getUid(olLayer);\n}\n/**\n * @param {Object} glStyle Mapboox style object.\n * @return {Object} Function cache.\n */\nfunction getFunctionCache(glStyle) {\n let functionCache = functionCacheByStyleId[glStyle.id];\n if (!functionCache) {\n functionCache = {};\n functionCacheByStyleId[getStyleId(glStyle)] = functionCache;\n }\n return functionCache;\n}\nfunction clearFunctionCache() {\n for (const key in functionCacheByStyleId) {\n delete functionCacheByStyleId[key];\n }\n}\n/**\n * @param {Object} glStyle Mapboox style object.\n * @return {Object} Filter cache.\n */\nfunction getFilterCache(glStyle) {\n let filterCache = filterCacheByStyleId[glStyle.id];\n if (!filterCache) {\n filterCache = {};\n filterCacheByStyleId[getStyleId(glStyle)] = filterCache;\n }\n return filterCache;\n}\nfunction deg2rad(degrees) {\n return degrees * Math.PI / 180;\n}\nconst defaultResolutions = (function () {\n const resolutions = [];\n for (let res = 78271.51696402048; resolutions.length <= 24; res /= 2) {\n resolutions.push(res);\n }\n return resolutions;\n}());\n/**\n * @param {number} width Width of the canvas.\n * @param {number} height Height of the canvas.\n * @return {HTMLCanvasElement} Canvas.\n */\nfunction createCanvas(width, height) {\n if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope && typeof OffscreenCanvas !== 'undefined') {\n // eslint-disable-line\n return new OffscreenCanvas(width, height);\n }\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\nfunction getZoomForResolution(resolution, resolutions) {\n let i = 0;\n const ii = resolutions.length;\n for (; i < ii; ++i) {\n const candidate = resolutions[i];\n if (candidate < resolution && i + 1 < ii) {\n const zoomFactor = resolutions[i] / resolutions[i + 1];\n return i + Math.log(resolutions[i] / resolution) / Math.log(zoomFactor);\n }\n }\n return ii - 1;\n}\nfunction getResolutionForZoom(zoom, resolutions) {\n const base = Math.floor(zoom);\n const factor = Math.pow(2, zoom - base);\n return resolutions[base] / factor;\n}\nconst pendingRequests = {};\n/**\n * @param {ResourceType} resourceType Type of resource to load.\n * @param {string} url Url of the resource.\n * @param {Options} [options={}] Options.\n * @param {{request?: Request}} [metadata] Object to be filled with the request.\n * @return {Promise} Promise that resolves with the loaded resource\n * or rejects with the Response object.\n * @private\n */\nfunction fetchResource(resourceType, url, options = {}, metadata) {\n if (url in pendingRequests) {\n if (metadata) {\n metadata.request = pendingRequests[url][0];\n }\n return pendingRequests[url][1];\n }\n const transformedRequest = options.transformRequest ? options.transformRequest(url, resourceType) || url : url;\n const pendingRequest = toPromise(() => transformedRequest).then(transformedRequest => {\n if (!(transformedRequest instanceof Request)) {\n transformedRequest = new Request(transformedRequest);\n }\n if (!transformedRequest.headers.get('Accept')) {\n transformedRequest.headers.set('Accept', 'application/json');\n }\n if (metadata) {\n metadata.request = transformedRequest;\n }\n return fetch(transformedRequest).then(function (response) {\n delete pendingRequests[url];\n return response.ok ? response.json() : Promise.reject(new Error('Error fetching source ' + url));\n }).catch(function (error) {\n delete pendingRequests[url];\n return Promise.reject(new Error('Error fetching source ' + url));\n });\n });\n pendingRequests[url] = [\n transformedRequest,\n pendingRequest\n ];\n return pendingRequest;\n}\nfunction getGlStyle(glStyleOrUrl, options) {\n if (typeof glStyleOrUrl === 'string') {\n if (glStyleOrUrl.trim().startsWith('{')) {\n try {\n const glStyle = JSON.parse(glStyleOrUrl);\n return Promise.resolve(glStyle);\n } catch (error) {\n return Promise.reject(error);\n }\n } else {\n glStyleOrUrl = normalizeStyleUrl(glStyleOrUrl, options.accessToken);\n return fetchResource('Style', glStyleOrUrl, options);\n }\n } else {\n return Promise.resolve(glStyleOrUrl);\n }\n}\nconst tilejsonCache = {};\n/**\n * @param {Object} glSource glStyle source object.\n * @param {string} styleUrl Style URL.\n * @param {Options} options Options.\n * @return {Promise<{tileJson: Object, tileLoadFunction: import('ol/Tile.js').LoadFunction}?>} TileJson and load function\n */\nfunction getTileJson(glSource, styleUrl, options = {}) {\n const cacheKey = [\n styleUrl,\n JSON.stringify(glSource)\n ].toString();\n let promise = tilejsonCache[cacheKey];\n if (!promise || options.transformRequest) {\n let tileLoadFunction;\n if (options.transformRequest) {\n tileLoadFunction = (tile, src) => {\n const transformedRequest = options.transformRequest ? options.transformRequest(src, 'Tiles') || src : src;\n if (tile instanceof VectorTile) {\n tile.setLoader((extent, resolution, projection) => {\n toPromise(() => transformedRequest).then(transformedRequest => {\n fetch(transformedRequest).then(response => response.arrayBuffer()).then(data => {\n const format = tile.getFormat();\n const features = format.readFeatures(data, {\n extent: extent,\n featureProjection: projection\n });\n // @ts-ignore\n tile.setFeatures(features);\n }).catch(e => tile.setState(TileState.ERROR));\n });\n });\n } else {\n const img = tile.getImage();\n toPromise(() => transformedRequest).then(transformedRequest => {\n if (transformedRequest instanceof Request) {\n fetch(transformedRequest).then(response => response.blob()).then(blob => {\n const url = URL.createObjectURL(blob);\n img.addEventListener('load', () => URL.revokeObjectURL(url));\n img.addEventListener('error', () => URL.revokeObjectURL(url));\n img.src = url;\n }).catch(e => tile.setState(TileState.ERROR));\n } else {\n img.src = transformedRequest;\n }\n });\n }\n };\n }\n const url = glSource.url;\n if (url && !glSource.tiles) {\n const normalizedSourceUrl = normalizeSourceUrl(url, options.accessToken, options.accessTokenParam || 'access_token', styleUrl || location.href);\n if (url.startsWith('mapbox://')) {\n promise = Promise.resolve({\n tileJson: Object.assign({}, glSource, {\n url: undefined,\n tiles: normalizedSourceUrl\n }),\n tileLoadFunction\n });\n } else {\n const metadata = {};\n promise = fetchResource('Source', normalizedSourceUrl[0], options, metadata).then(function (tileJson) {\n tileJson.tiles = tileJson.tiles.map(function (tileUrl) {\n if (tileJson.scheme === 'tms') {\n tileUrl = tileUrl.replace('{y}', '{-y}');\n }\n return normalizeSourceUrl(tileUrl, options.accessToken, options.accessTokenParam || 'access_token', metadata.request.url)[0];\n });\n return Promise.resolve({\n tileJson,\n tileLoadFunction\n });\n });\n }\n } else {\n glSource = Object.assign({}, glSource, {\n tiles: glSource.tiles.map(function (tileUrl) {\n if (glSource.scheme === 'tms') {\n tileUrl = tileUrl.replace('{y}', '{-y}');\n }\n return normalizeSourceUrl(tileUrl, options.accessToken, options.accessTokenParam || 'access_token', styleUrl || location.href)[0];\n })\n });\n promise = Promise.resolve({\n tileJson: Object.assign({}, glSource),\n tileLoadFunction\n });\n }\n tilejsonCache[cacheKey] = promise;\n }\n return promise;\n}\n/**\n * @param {HTMLImageElement|HTMLCanvasElement} spriteImage Sprite image id.\n * @param {{x: number, y: number, width: number, height: number, pixelRatio: number}} spriteImageData Sprite image data.\n * @param {number} haloWidth Halo width.\n * @param {{r: number, g: number, b: number, a: number}} haloColor Halo color.\n * @return {HTMLCanvasElement} Canvas element with the halo.\n */\nfunction drawIconHalo(spriteImage, spriteImageData, haloWidth, haloColor) {\n const imgSize = [\n 2 * haloWidth * spriteImageData.pixelRatio + spriteImageData.width,\n 2 * haloWidth * spriteImageData.pixelRatio + spriteImageData.height\n ];\n const imageCanvas = createCanvas(imgSize[0], imgSize[1]);\n const imageContext = imageCanvas.getContext('2d');\n imageContext.drawImage(spriteImage, spriteImageData.x, spriteImageData.y, spriteImageData.width, spriteImageData.height, haloWidth * spriteImageData.pixelRatio, haloWidth * spriteImageData.pixelRatio, spriteImageData.width, spriteImageData.height);\n const imageData = imageContext.getImageData(0, 0, imgSize[0], imgSize[1]);\n imageContext.globalCompositeOperation = 'destination-over';\n imageContext.fillStyle = `rgba(${ haloColor.r * 255 },${ haloColor.g * 255 },${ haloColor.b * 255 },${ haloColor.a })`;\n const data = imageData.data;\n for (let i = 0, ii = imageData.width; i < ii; ++i) {\n for (let j = 0, jj = imageData.height; j < jj; ++j) {\n const index = (j * ii + i) * 4;\n const alpha = data[index + 3];\n if (alpha > 0) {\n imageContext.arc(i, j, haloWidth * spriteImageData.pixelRatio, 0, 2 * Math.PI);\n }\n }\n }\n imageContext.fill();\n return imageCanvas;\n}\nfunction smoothstep(min, max, value) {\n const x = Math.max(0, Math.min(1, (value - min) / (max - min)));\n return x * x * (3 - 2 * x);\n}\n/**\n * @param {HTMLImageElement} image SDF image\n * @param {{x: number, y: number, width: number, height: number}} area Area to unSDF\n * @param {{r: number, g: number, b: number, a: number}} color Color to use\n * @return {HTMLCanvasElement} Regular image\n */\nfunction drawSDF(image, area, color) {\n const imageCanvas = createCanvas(area.width, area.height);\n const imageContext = imageCanvas.getContext('2d');\n imageContext.drawImage(image, area.x, area.y, area.width, area.height, 0, 0, area.width, area.height);\n const imageData = imageContext.getImageData(0, 0, area.width, area.height);\n const data = imageData.data;\n for (let i = 0, ii = imageData.width; i < ii; ++i) {\n for (let j = 0, jj = imageData.height; j < jj; ++j) {\n const index = (j * ii + i) * 4;\n const dist = data[index + 3] / 255;\n const buffer = 0.75;\n const gamma = 0.1;\n const alpha = smoothstep(buffer - gamma, buffer + gamma, dist);\n if (alpha > 0) {\n data[index + 0] = Math.round(255 * color.r * alpha);\n data[index + 1] = Math.round(255 * color.g * alpha);\n data[index + 2] = Math.round(255 * color.b * alpha);\n data[index + 3] = Math.round(255 * alpha);\n } else {\n data[index + 3] = 0;\n }\n }\n }\n imageContext.putImageData(imageData, 0, 0);\n return imageCanvas;\n} /**\n * @typedef {import(\"./apply.js\").Options} Options\n * @private\n */\n\nconst hairSpacePool = Array(256).join('\\u200A');\nfunction applyLetterSpacing(text, letterSpacing) {\n if (letterSpacing >= 0.05) {\n let textWithLetterSpacing = '';\n const lines = text.split('\\n');\n const joinSpaceString = hairSpacePool.slice(0, Math.round(letterSpacing / 0.1));\n for (let l = 0, ll = lines.length; l < ll; ++l) {\n if (l > 0) {\n textWithLetterSpacing += '\\n';\n }\n textWithLetterSpacing += lines[l].split('').join(joinSpaceString);\n }\n return textWithLetterSpacing;\n }\n return text;\n}\nlet measureContext;\nfunction getMeasureContext() {\n if (!measureContext) {\n measureContext = createCanvas(1, 1).getContext('2d');\n }\n return measureContext;\n}\nfunction measureText(text, letterSpacing) {\n return getMeasureContext().measureText(text).width + (text.length - 1) * letterSpacing;\n}\nconst measureCache = {};\nfunction wrapText(text, font, em, letterSpacing) {\n if (text.indexOf('\\n') !== -1) {\n const hardLines = text.split('\\n');\n const lines = [];\n for (let i = 0, ii = hardLines.length; i < ii; ++i) {\n lines.push(wrapText(hardLines[i], font, em, letterSpacing));\n }\n return lines.join('\\n');\n }\n const key = em + ',' + font + ',' + text + ',' + letterSpacing;\n let wrappedText = measureCache[key];\n if (!wrappedText) {\n const words = text.split(' ');\n if (words.length > 1) {\n const ctx = getMeasureContext();\n ctx.font = font;\n const oneEm = ctx.measureText('M').width;\n const maxWidth = oneEm * em;\n let line = '';\n const lines = [];\n // Pass 1 - wrap lines to not exceed maxWidth\n for (let i = 0, ii = words.length; i < ii; ++i) {\n const word = words[i];\n const testLine = line + (line ? ' ' : '') + word;\n if (measureText(testLine, letterSpacing) <= maxWidth) {\n line = testLine;\n } else {\n if (line) {\n lines.push(line);\n }\n line = word;\n }\n }\n if (line) {\n lines.push(line);\n }\n // Pass 2 - add lines with a width of less than 30% of maxWidth to the previous or next line\n for (let i = 0, ii = lines.length; i < ii && ii > 1; ++i) {\n const line = lines[i];\n if (measureText(line, letterSpacing) < maxWidth * 0.35) {\n const prevWidth = i > 0 ? measureText(lines[i - 1], letterSpacing) : Infinity;\n const nextWidth = i < ii - 1 ? measureText(lines[i + 1], letterSpacing) : Infinity;\n lines.splice(i, 1);\n ii -= 1;\n if (prevWidth < nextWidth) {\n lines[i - 1] += ' ' + line;\n i -= 1;\n } else {\n lines[i] = line + ' ' + lines[i];\n }\n }\n }\n // Pass 3 - try to fill 80% of maxWidth for each line\n for (let i = 0, ii = lines.length - 1; i < ii; ++i) {\n const line = lines[i];\n const next = lines[i + 1];\n if (measureText(line, letterSpacing) > maxWidth * 0.7 && measureText(next, letterSpacing) < maxWidth * 0.6) {\n const lineWords = line.split(' ');\n const lastWord = lineWords.pop();\n if (measureText(lastWord, letterSpacing) < maxWidth * 0.2) {\n lines[i] = lineWords.join(' ');\n lines[i + 1] = lastWord + ' ' + next;\n }\n ii -= 1;\n }\n }\n wrappedText = lines.join('\\n');\n } else {\n wrappedText = text;\n }\n wrappedText = applyLetterSpacing(wrappedText, letterSpacing);\n measureCache[key] = wrappedText;\n }\n return wrappedText;\n}\nconst fontFamilyRegEx = /font-family: ?([^;]*);/;\nconst stripQuotesRegEx = /(\"|')/g;\nlet loadedFontFamilies;\nfunction hasFontFamily(family) {\n if (!loadedFontFamilies) {\n loadedFontFamilies = {};\n const styleSheets = document.styleSheets;\n for (let i = 0, ii = styleSheets.length; i < ii; ++i) {\n const styleSheet = styleSheets[i];\n try {\n const cssRules = styleSheet.rules || styleSheet.cssRules;\n if (cssRules) {\n for (let j = 0, jj = cssRules.length; j < jj; ++j) {\n const cssRule = cssRules[j];\n if (cssRule.type == 5) {\n const match = cssRule.cssText.match(fontFamilyRegEx);\n loadedFontFamilies[match[1].replace(stripQuotesRegEx, '')] = true;\n }\n }\n }\n } catch (e) {\n }\n }\n }\n return family in loadedFontFamilies;\n}\nconst processedFontFamilies = {};\n/**\n * @param {Array} fonts Fonts.\n * @param {string} [templateUrl] Template URL.\n * @return {Array} Processed fonts.\n * @private\n */\nfunction getFonts(fonts, templateUrl = 'https://cdn.jsdelivr.net/npm/@fontsource/{font-family}/{fontweight}{-fontstyle}.css') {\n const fontsKey = fonts.toString();\n if (fontsKey in processedFontFamilies) {\n return processedFontFamilies[fontsKey];\n }\n const fontDescriptions = [];\n for (let i = 0, ii = fonts.length; i < ii; ++i) {\n fonts[i] = fonts[i].replace('Arial Unicode MS', 'Arial');\n const font = fonts[i];\n const cssFont = mb2css(font, 1);\n registerFont(cssFont);\n const parts = cssFont.split(' ');\n fontDescriptions.push([\n parts.slice(3).join(' ').replace(/\"/g, ''),\n parts[1],\n parts[0]\n ]);\n }\n for (let i = 0, ii = fontDescriptions.length; i < ii; ++i) {\n const fontDescription = fontDescriptions[i];\n const family = fontDescription[0];\n if (!hasFontFamily(family)) {\n if (checkedFonts.get(`${ fontDescription[2] }\\n${ fontDescription[1] } \\n${ family }`) !== 100) {\n const fontUrl = templateUrl.replace('{font-family}', family.replace(/ /g, '-').toLowerCase()).replace('{Font+Family}', family.replace(/ /g, '+')).replace('{fontweight}', fontDescription[1]).replace('{-fontstyle}', fontDescription[2].replace('normal', '').replace(/(.+)/, '-$1')).replace('{fontstyle}', fontDescription[2]);\n if (!document.querySelector('link[href=\"' + fontUrl + '\"]')) {\n const markup = document.createElement('link');\n markup.href = fontUrl;\n markup.rel = 'stylesheet';\n document.head.appendChild(markup);\n }\n }\n }\n }\n processedFontFamilies[fontsKey] = fonts;\n return fonts;\n}\n\n/*\nol-mapbox-style - Use Mapbox/MapLibre Style objects with OpenLayers\nCopyright 2016-present ol-mapbox-style contributors\nLicense: https://raw.githubusercontent.com/openlayers/ol-mapbox-style/master/LICENSE\n*/\n/**\n * @typedef {import(\"ol/layer/Vector\").default} VectorLayer\n * @typedef {import(\"ol/layer/VectorTile\").default} VectorTileLayer\n * @typedef {import(\"ol/style/Style\").StyleFunction} StyleFunction\n * @typedef {import('./util.js').ResourceType} ResourceType\n */\nconst types = {\n 'Point': 1,\n 'MultiPoint': 1,\n 'LineString': 2,\n 'MultiLineString': 2,\n 'Polygon': 3,\n 'MultiPolygon': 3\n};\nconst anchor = {\n 'center': [\n 0.5,\n 0.5\n ],\n 'left': [\n 0,\n 0.5\n ],\n 'right': [\n 1,\n 0.5\n ],\n 'top': [\n 0.5,\n 0\n ],\n 'bottom': [\n 0.5,\n 1\n ],\n 'top-left': [\n 0,\n 0\n ],\n 'top-right': [\n 1,\n 0\n ],\n 'bottom-left': [\n 0,\n 1\n ],\n 'bottom-right': [\n 1,\n 1\n ]\n};\nconst expressionData = function (rawExpression, propertySpec) {\n const compiledExpression = createPropertyExpression(rawExpression, propertySpec);\n if (compiledExpression.result === 'error') {\n throw new Error(compiledExpression.value.map(err => `${ err.key }: ${ err.message }`).join(', '));\n }\n return compiledExpression.value;\n};\nconst emptyObj$1 = {};\nconst zoomObj = { zoom: 0 };\nlet renderFeatureCoordinates, renderFeature;\n/**\n * @private\n * @param {Object} layer Gl object layer.\n * @param {string} layoutOrPaint 'layout' or 'paint'.\n * @param {string} property Feature property.\n * @param {number} zoom Zoom.\n * @param {Object} feature Gl feature.\n * @param {Object} [functionCache] Function cache.\n * @param {Object} [featureState] Feature state.\n * @return {?} Value.\n */\nfunction getValue(layer, layoutOrPaint, property, zoom, feature, functionCache, featureState) {\n const layerId = layer.id;\n if (!functionCache) {\n functionCache = {};\n console.warn('No functionCache provided to getValue()'); //eslint-disable-line no-console\n }\n if (!functionCache[layerId]) {\n functionCache[layerId] = {};\n }\n const functions = functionCache[layerId];\n if (!functions[property]) {\n let value = (layer[layoutOrPaint] || emptyObj$1)[property];\n const propertySpec = spec[`${ layoutOrPaint }_${ layer.type }`][property];\n if (value === undefined) {\n value = propertySpec.default;\n }\n let isExpr = isExpression(value);\n if (!isExpr && isFunction(value)) {\n value = convertFunction(value, propertySpec);\n isExpr = true;\n }\n if (isExpr) {\n const compiledExpression = expressionData(value, propertySpec);\n functions[property] = compiledExpression.evaluate.bind(compiledExpression);\n } else {\n if (propertySpec.type == 'color') {\n value = Color$1.parse(value);\n }\n functions[property] = function () {\n return value;\n };\n }\n }\n zoomObj.zoom = zoom;\n return functions[property](zoomObj, feature, featureState);\n}\n/**\n * @private\n * @param {Object} layer Gl object layer.\n * @param {number} zoom Zoom.\n * @param {Object} feature Gl feature.\n * @param {\"icon\"|\"text\"} prefix Style property prefix.\n * @param {Object} [functionCache] Function cache.\n * @return {\"declutter\"|\"obstacle\"|\"none\"} Value.\n */\nfunction getDeclutterMode(layer, zoom, feature, prefix, functionCache) {\n const allowOverlap = getValue(layer, 'layout', `${ prefix }-allow-overlap`, zoom, feature, functionCache);\n if (!allowOverlap) {\n return 'declutter';\n }\n const ignorePlacement = getValue(layer, 'layout', `${ prefix }-ignore-placement`, zoom, feature, functionCache);\n if (!ignorePlacement) {\n return 'obstacle';\n }\n return 'none';\n}\n/**\n * @private\n * @param {string} layerId Layer id.\n * @param {?} filter Filter.\n * @param {Object} feature Feature.\n * @param {number} zoom Zoom.\n * @param {Object} [filterCache] Filter cache.\n * @return {boolean} Filter result.\n */\nfunction evaluateFilter(layerId, filter, feature, zoom, filterCache) {\n if (!filterCache) {\n console.warn('No filterCache provided to evaluateFilter()'); //eslint-disable-line no-console\n }\n if (!(layerId in filterCache)) {\n filterCache[layerId] = createFilter(filter).filter;\n }\n zoomObj.zoom = zoom;\n return filterCache[layerId](zoomObj, feature);\n}\nlet renderTransparentEnabled = false;\n/**\n * Configure whether features with a transparent style should be rendered. When\n * set to `true`, it will be possible to hit detect content that is not visible,\n * like transparent fills of polygons, using `ol/layer/Layer#getFeatures()` or\n * `ol/Map#getFeaturesAtPixel()`\n * @param {boolean} enabled Rendering of transparent elements is enabled.\n * Default is `false`.\n */\nfunction renderTransparent(enabled) {\n if (enabled !== renderTransparentEnabled) {\n clearFunctionCache();\n renderTransparentEnabled = enabled;\n }\n}\n/**\n * @private\n * @param {?} color Color.\n * @param {number} [opacity] Opacity.\n * @return {string} Color.\n */\nfunction colorWithOpacity(color, opacity) {\n if (color) {\n if (!renderTransparentEnabled && (color.a === 0 || opacity === 0)) {\n return undefined;\n }\n const a = color.a;\n opacity = opacity === undefined ? 1 : opacity;\n return a === 0 ? 'transparent' : 'rgba(' + Math.round(color.r * 255 / a) + ',' + Math.round(color.g * 255 / a) + ',' + Math.round(color.b * 255 / a) + ',' + a * opacity + ')';\n }\n return color;\n}\nconst templateRegEx = /\\{[^{}}]*\\}/g;\n/**\n * @private\n * @param {string} text Text.\n * @param {Object} properties Properties.\n * @return {string} Text.\n */\nfunction fromTemplate(text, properties) {\n return text.replace(templateRegEx, function (match) {\n return properties[match.slice(1, -1)] || '';\n });\n}\nlet recordLayer = false;\n/**\n * Turns recording of the Mapbox/MapLibre Style's `layer` on and off. When turned on,\n * the layer that a rendered feature belongs to will be set as the feature's\n * `mapbox-layer` property.\n * @param {boolean} record Recording of the style layer is on.\n */\nfunction recordStyleLayer(record = false) {\n recordLayer = record;\n}\nconst styleFunctionArgs = {};\n/**\n * Creates a style function from the `glStyle` object for all layers that use\n * the specified `source`, which needs to be a `\"type\": \"vector\"` or\n * `\"type\": \"geojson\"` source and applies it to the specified OpenLayers layer.\n *\n * Two additional properties will be set on the provided layer:\n *\n * * `mapbox-source`: The `id` of the Mapbox/MapLibre Style document's source that the\n * OpenLayers layer was created from. Usually `apply()` creates one\n * OpenLayers layer per Mapbox/MapLibre Style source, unless the layer stack has\n * layers from different sources in between.\n * * `mapbox-layers`: The `id`s of the Mapbox/MapLibre Style document's layers that are\n * included in the OpenLayers layer.\n *\n * This function also works in a web worker. In worker mode, the main thread needs\n * to listen to messages from the worker and respond with another message to make\n * sure that sprite image loading works:\n *\n * ```js\n * worker.addEventListener('message', event => {\n * if (event.data.action === 'loadImage') {\n * const image = new Image();\n * image.crossOrigin = 'anonymous';\n * image.addEventListener('load', function() {\n * createImageBitmap(image, 0, 0, image.width, image.height).then(imageBitmap => {\n * worker.postMessage({\n * action: 'imageLoaded',\n * image: imageBitmap,\n * src: event.data.src\n * }, [imageBitmap]);\n * });\n * });\n * image.src = event.data.src;\n * }\n * });\n * ```\n *\n * @param {VectorLayer|VectorTileLayer} olLayer OpenLayers layer to\n * apply the style to. In addition to the style, the layer will get two\n * properties: `mapbox-source` will be the `id` of the `glStyle`'s source used\n * for the layer, and `mapbox-layers` will be an array of the `id`s of the\n * `glStyle`'s layers.\n * @param {string|Object} glStyle Mapbox/MapLibre Style object.\n * @param {string|Array} sourceOrLayers `source` key or an array of layer `id`s\n * from the Mapbox/MapLibre Style object. When a `source` key is provided, all layers for\n * the specified source will be included in the style function. When layer `id`s\n * are provided, they must be from layers that use the same source.\n * @param {Array} resolutions\n * Resolutions for mapping resolution to zoom level.\n * @param {Object} spriteData Sprite data from the url specified in\n * the Mapbox/MapLibre Style object's `sprite` property. Only required if a `sprite`\n * property is specified in the Mapbox/MapLibre Style object.\n * @param {string|Request|Promise} spriteImageUrl Sprite image url for the sprite\n * specified in the Mapbox/MapLibre Style object's `sprite` property. Only required if a\n * `sprite` property is specified in the Mapbox/MapLibre Style object.\n * @param {function(Array, string=):Array} getFonts Function that\n * receives a font stack and the url template from the GL style's `metadata['ol:webfonts']`\n * property (if set) as arguments, and returns a (modified) font stack that\n * is available. Font names are the names used in the Mapbox/MapLibre Style object. If\n * not provided, the font stack will be used as-is. This function can also be\n * used for loading web fonts.\n * @param {function(VectorLayer|VectorTileLayer, string):HTMLImageElement|HTMLCanvasElement|string|undefined} [getImage=undefined]\n * Function that returns an image or a URL for an image name. If the result is an HTMLImageElement, it must already be\n * loaded. The layer can be used to call layer.changed() when the loading and processing of the image has finished.\n * This function can be used for icons not in the sprite or to override sprite icons.\n * @return {StyleFunction} Style function for use in\n * `ol.layer.Vector` or `ol.layer.VectorTile`.\n */\nfunction stylefunction(olLayer, glStyle, sourceOrLayers, resolutions = defaultResolutions, spriteData = undefined, spriteImageUrl = undefined, getFonts = undefined, getImage = undefined) {\n if (typeof glStyle == 'string') {\n glStyle = JSON.parse(glStyle);\n }\n if (glStyle.version != 8) {\n throw new Error('glStyle version 8 required.');\n }\n styleFunctionArgs[getStyleFunctionKey(glStyle, olLayer)] = Array.from(arguments);\n let spriteImage, spriteImageSize;\n let spriteImageUnSDFed;\n if (spriteImageUrl) {\n if (typeof Image !== 'undefined') {\n const img = new Image();\n let blobUrl;\n toPromise(() => spriteImageUrl).then(spriteImageUrl => {\n if (spriteImageUrl instanceof Request) {\n fetch(spriteImageUrl).then(response => response.blob()).then(blob => {\n blobUrl = URL.createObjectURL(blob);\n img.src = blobUrl;\n }).catch(() => {\n });\n } else {\n img.crossOrigin = 'anonymous';\n img.src = spriteImageUrl;\n if (blobUrl) {\n URL.revokeObjectURL(blobUrl);\n }\n }\n });\n img.onload = function () {\n spriteImage = img;\n spriteImageSize = [\n img.width,\n img.height\n ];\n olLayer.changed();\n img.onload = null;\n };\n } else if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {\n //eslint-disable-line\n const worker = self;\n // Main thread needs to handle 'loadImage' and dispatch 'imageLoaded'\n worker.postMessage({\n action: 'loadImage',\n src: spriteImageUrl\n });\n worker.addEventListener('message', function handler(event) {\n if (event.data.action === 'imageLoaded' && event.data.src === spriteImageUrl) {\n spriteImage = event.data.image;\n spriteImageSize = [\n spriteImage.width,\n spriteImage.height\n ];\n }\n });\n }\n }\n const allLayers = derefLayers(glStyle.layers);\n const layersBySourceLayer = {};\n const mapboxLayers = [];\n const iconImageCache = {};\n const patternCache = {};\n const functionCache = getFunctionCache(glStyle);\n const filterCache = getFilterCache(glStyle);\n let mapboxSource;\n for (let i = 0, ii = allLayers.length; i < ii; ++i) {\n const layer = allLayers[i];\n const layerId = layer.id;\n if (typeof sourceOrLayers == 'string' && layer.source == sourceOrLayers || Array.isArray(sourceOrLayers) && sourceOrLayers.indexOf(layerId) !== -1) {\n const sourceLayer = layer['source-layer'];\n if (!mapboxSource) {\n mapboxSource = layer.source;\n const source = glStyle.sources[mapboxSource];\n if (!source) {\n throw new Error(`Source \"${ mapboxSource }\" is not defined`);\n }\n const type = source.type;\n if (type !== 'vector' && type !== 'geojson') {\n throw new Error(`Source \"${ mapboxSource }\" is not of type \"vector\" or \"geojson\", but \"${ type }\"`);\n }\n } else if (layer.source !== mapboxSource) {\n throw new Error(`Layer \"${ layerId }\" does not use source \"${ mapboxSource }`);\n }\n let layers = layersBySourceLayer[sourceLayer];\n if (!layers) {\n layers = [];\n layersBySourceLayer[sourceLayer] = layers;\n }\n layers.push({\n layer: layer,\n index: i\n });\n mapboxLayers.push(layerId);\n }\n }\n const textHalo = new Stroke();\n const textColor = new Fill();\n const styles = [];\n /**\n * @param {import(\"ol/Feature\").default|import(\"ol/render/Feature\").default} feature Feature.\n * @param {number} resolution Resolution.\n * @param {string} [onlyLayer] Calculate style for this layer only.\n * @return {Array} Style.\n */\n const styleFunction = function (feature, resolution, onlyLayer) {\n const properties = feature.getProperties();\n const layers = layersBySourceLayer[properties.layer];\n if (!layers) {\n return undefined;\n }\n let zoom = resolutions.indexOf(resolution);\n if (zoom == -1) {\n zoom = getZoomForResolution(resolution, resolutions);\n }\n const type = types[feature.getGeometry().getType()];\n const f = {\n id: feature.getId(),\n properties: properties,\n type: type\n };\n const featureState = olLayer.get('mapbox-featurestate')[feature.getId()];\n let stylesLength = -1;\n let featureBelongsToLayer;\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const layerData = layers[i];\n const layer = layerData.layer;\n const layerId = layer.id;\n if (onlyLayer !== undefined && onlyLayer !== layerId) {\n continue;\n }\n const layout = layer.layout || emptyObj$1;\n const paint = layer.paint || emptyObj$1;\n if (layout.visibility === 'none' || 'minzoom' in layer && zoom < layer.minzoom || 'maxzoom' in layer && zoom >= layer.maxzoom) {\n continue;\n }\n const filter = layer.filter;\n if (!filter || evaluateFilter(layerId, filter, f, zoom, filterCache)) {\n featureBelongsToLayer = layer;\n let color, opacity, fill, stroke, strokeColor, style;\n const index = layerData.index;\n if (type == 3 && (layer.type == 'fill' || layer.type == 'fill-extrusion')) {\n opacity = getValue(layer, 'paint', layer.type + '-opacity', zoom, f, functionCache, featureState);\n if (layer.type + '-pattern' in paint) {\n const fillIcon = getValue(layer, 'paint', layer.type + '-pattern', zoom, f, functionCache, featureState);\n if (fillIcon) {\n const icon = typeof fillIcon === 'string' ? fromTemplate(fillIcon, properties) : fillIcon.toString();\n if (spriteImage && spriteData && spriteData[icon]) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getFill() || style.getStroke() || style.getText()) {\n style = new Style({ fill: new Fill() });\n styles[stylesLength] = style;\n }\n fill = style.getFill();\n style.setZIndex(index);\n const icon_cache_key = icon + '.' + opacity;\n let pattern = patternCache[icon_cache_key];\n if (!pattern) {\n const spriteImageData = spriteData[icon];\n const canvas = createCanvas(spriteImageData.width, spriteImageData.height);\n const ctx = canvas.getContext('2d');\n ctx.globalAlpha = opacity;\n ctx.drawImage(spriteImage, spriteImageData.x, spriteImageData.y, spriteImageData.width, spriteImageData.height, 0, 0, spriteImageData.width, spriteImageData.height);\n pattern = ctx.createPattern(canvas, 'repeat');\n patternCache[icon_cache_key] = pattern;\n }\n fill.setColor(pattern);\n }\n }\n } else {\n color = colorWithOpacity(getValue(layer, 'paint', layer.type + '-color', zoom, f, functionCache, featureState), opacity);\n if (layer.type + '-outline-color' in paint) {\n strokeColor = colorWithOpacity(getValue(layer, 'paint', layer.type + '-outline-color', zoom, f, functionCache, featureState), opacity);\n }\n if (!strokeColor) {\n strokeColor = color;\n }\n if (color || strokeColor) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || color && !style.getFill() || !color && style.getFill() || strokeColor && !style.getStroke() || !strokeColor && style.getStroke() || style.getText()) {\n style = new Style({\n fill: color ? new Fill() : undefined,\n stroke: strokeColor ? new Stroke() : undefined\n });\n styles[stylesLength] = style;\n }\n if (color) {\n fill = style.getFill();\n fill.setColor(color);\n }\n if (strokeColor) {\n stroke = style.getStroke();\n stroke.setColor(strokeColor);\n stroke.setWidth(0.5);\n }\n style.setZIndex(index);\n }\n }\n }\n if (type != 1 && layer.type == 'line') {\n if (!('line-pattern' in paint)) {\n color = colorWithOpacity(getValue(layer, 'paint', 'line-color', zoom, f, functionCache, featureState), getValue(layer, 'paint', 'line-opacity', zoom, f, functionCache, featureState));\n } else {\n color = undefined;\n }\n const width = getValue(layer, 'paint', 'line-width', zoom, f, functionCache, featureState);\n if (color && width > 0) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getStroke() || style.getFill() || style.getText()) {\n style = new Style({ stroke: new Stroke() });\n styles[stylesLength] = style;\n }\n stroke = style.getStroke();\n stroke.setLineCap(getValue(layer, 'layout', 'line-cap', zoom, f, functionCache, featureState));\n stroke.setLineJoin(getValue(layer, 'layout', 'line-join', zoom, f, functionCache, featureState));\n stroke.setMiterLimit(getValue(layer, 'layout', 'line-miter-limit', zoom, f, functionCache, featureState));\n stroke.setColor(color);\n stroke.setWidth(width);\n stroke.setLineDash(paint['line-dasharray'] ? getValue(layer, 'paint', 'line-dasharray', zoom, f, functionCache, featureState).map(function (x) {\n return x * width;\n }) : null);\n style.setZIndex(index);\n }\n }\n let hasImage = false;\n let text = null;\n let placementAngle = 0;\n let icon, iconImg, skipLabel;\n if ((type == 1 || type == 2) && 'icon-image' in layout) {\n const iconImage = getValue(layer, 'layout', 'icon-image', zoom, f, functionCache, featureState);\n if (iconImage) {\n icon = typeof iconImage === 'string' ? fromTemplate(iconImage, properties) : iconImage.toString();\n let styleGeom = undefined;\n const imageElement = getImage ? getImage(olLayer, icon) : undefined;\n if (spriteImage && spriteData && spriteData[icon] || imageElement) {\n const iconRotationAlignment = getValue(layer, 'layout', 'icon-rotation-alignment', zoom, f, functionCache, featureState);\n if (type == 2) {\n const geom = feature.getGeometry();\n // ol package and ol-debug.js only\n if (geom.getFlatMidpoint || geom.getFlatMidpoints) {\n const extent = geom.getExtent();\n const size = Math.sqrt(Math.max(Math.pow((extent[2] - extent[0]) / resolution, 2), Math.pow((extent[3] - extent[1]) / resolution, 2)));\n if (size > 150) {\n //FIXME Do not hard-code a size of 150\n const midpoint = geom.getType() === 'MultiLineString' ? geom.getFlatMidpoints() : geom.getFlatMidpoint();\n if (!renderFeature) {\n renderFeatureCoordinates = [\n NaN,\n NaN\n ];\n renderFeature = new RenderFeature('Point', renderFeatureCoordinates, [], 2, {}, undefined);\n }\n styleGeom = renderFeature;\n renderFeatureCoordinates[0] = midpoint[0];\n renderFeatureCoordinates[1] = midpoint[1];\n const placement = getValue(layer, 'layout', 'symbol-placement', zoom, f, functionCache, featureState);\n if (placement === 'line' && iconRotationAlignment === 'map') {\n const stride = geom.getStride();\n const coordinates = geom.getFlatCoordinates();\n for (let i = 0, ii = coordinates.length - stride; i < ii; i += stride) {\n const x1 = coordinates[i];\n const y1 = coordinates[i + 1];\n const x2 = coordinates[i + stride];\n const y2 = coordinates[i + stride + 1];\n const minX = Math.min(x1, x2);\n const maxX = Math.max(x1, x2);\n const xM = midpoint[0];\n const yM = midpoint[1];\n const dotProduct = (y2 - y1) * (xM - x1) - (x2 - x1) * (yM - y1);\n if (Math.abs(dotProduct) < 0.001 && //midpoint is aligned with the segment\n xM <= maxX && xM >= minX //midpoint is on the segment and not outside it\n) {\n placementAngle = Math.atan2(y1 - y2, x2 - x1);\n break;\n }\n }\n }\n }\n }\n }\n if (type !== 2 || styleGeom) {\n const iconSize = getValue(layer, 'layout', 'icon-size', zoom, f, functionCache, featureState);\n const iconColor = paint['icon-color'] !== undefined ? getValue(layer, 'paint', 'icon-color', zoom, f, functionCache, featureState) : null;\n if (!iconColor || iconColor.a !== 0) {\n const haloColor = getValue(layer, 'paint', 'icon-halo-color', zoom, f, functionCache, featureState);\n const haloWidth = getValue(layer, 'paint', 'icon-halo-width', zoom, f, functionCache, featureState);\n let iconCacheKey = `${ icon }.${ iconSize }.${ haloWidth }.${ haloColor }`;\n if (iconColor !== null) {\n iconCacheKey += `.${ iconColor }`;\n }\n iconImg = iconImageCache[iconCacheKey];\n if (!iconImg) {\n const declutterMode = getDeclutterMode(layer, zoom, f, 'icon', functionCache);\n let displacement;\n if ('icon-offset' in layout) {\n displacement = getValue(layer, 'layout', 'icon-offset', zoom, f, functionCache, featureState).slice(0);\n displacement[0] *= iconSize;\n displacement[1] *= -iconSize;\n }\n let color = iconColor ? [\n iconColor.r * 255,\n iconColor.g * 255,\n iconColor.b * 255,\n iconColor.a\n ] : undefined;\n if (imageElement) {\n const iconOptions = {\n color: color,\n rotateWithView: iconRotationAlignment === 'map',\n displacement: displacement,\n declutterMode: declutterMode,\n scale: iconSize\n };\n if (typeof imageElement === 'string') {\n // it is a src URL\n iconOptions.src = imageElement;\n } else {\n iconOptions.img = imageElement;\n iconOptions.imgSize = [\n imageElement.width,\n imageElement.height\n ];\n }\n iconImg = new Icon(iconOptions);\n } else {\n const spriteImageData = spriteData[icon];\n let img, size, offset;\n if (haloWidth) {\n if (spriteImageData.sdf) {\n img = drawIconHalo(drawSDF(spriteImage, spriteImageData, iconColor || [\n 0,\n 0,\n 0,\n 1\n ]), {\n x: 0,\n y: 0,\n width: spriteImageData.width,\n height: spriteImageData.height,\n pixelRatio: spriteImageData.pixelRatio\n }, haloWidth, haloColor);\n color = undefined; // do not tint haloed icons\n } else {\n img = drawIconHalo(spriteImage, spriteImageData, haloWidth, haloColor);\n }\n } else {\n if (spriteImageData.sdf) {\n if (!spriteImageUnSDFed) {\n spriteImageUnSDFed = drawSDF(spriteImage, {\n x: 0,\n y: 0,\n width: spriteImageSize[0],\n height: spriteImageSize[1]\n }, {\n r: 1,\n g: 1,\n b: 1,\n a: 1\n });\n }\n img = spriteImageUnSDFed;\n } else {\n img = spriteImage;\n }\n size = [\n spriteImageData.width,\n spriteImageData.height\n ];\n offset = [\n spriteImageData.x,\n spriteImageData.y\n ];\n }\n iconImg = new Icon({\n color: color,\n img: img,\n // @ts-ignore\n imgSize: spriteImageSize,\n size: size,\n offset: offset,\n rotateWithView: iconRotationAlignment === 'map',\n scale: iconSize / spriteImageData.pixelRatio,\n displacement: displacement,\n declutterMode: declutterMode\n });\n }\n iconImageCache[iconCacheKey] = iconImg;\n }\n }\n if (iconImg) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getImage() || style.getFill() || style.getStroke()) {\n style = new Style();\n styles[stylesLength] = style;\n }\n style.setGeometry(styleGeom);\n iconImg.setRotation(placementAngle + deg2rad(getValue(layer, 'layout', 'icon-rotate', zoom, f, functionCache, featureState)));\n iconImg.setOpacity(getValue(layer, 'paint', 'icon-opacity', zoom, f, functionCache, featureState));\n iconImg.setAnchor(anchor[getValue(layer, 'layout', 'icon-anchor', zoom, f, functionCache, featureState)]);\n style.setImage(iconImg);\n text = style.getText();\n style.setText(undefined);\n style.setZIndex(index);\n hasImage = true;\n skipLabel = false;\n }\n } else {\n skipLabel = true;\n }\n }\n }\n }\n if (type == 1 && layer.type === 'circle') {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getImage() || style.getFill() || style.getStroke()) {\n style = new Style();\n styles[stylesLength] = style;\n }\n const circleRadius = 'circle-radius' in paint ? getValue(layer, 'paint', 'circle-radius', zoom, f, functionCache, featureState) : 5;\n const circleStrokeColor = colorWithOpacity(getValue(layer, 'paint', 'circle-stroke-color', zoom, f, functionCache, featureState), getValue(layer, 'paint', 'circle-stroke-opacity', zoom, f, functionCache, featureState));\n const circleTranslate = getValue(layer, 'paint', 'circle-translate', zoom, f, functionCache, featureState);\n const circleColor = colorWithOpacity(getValue(layer, 'paint', 'circle-color', zoom, f, functionCache, featureState), getValue(layer, 'paint', 'circle-opacity', zoom, f, functionCache, featureState));\n const circleStrokeWidth = getValue(layer, 'paint', 'circle-stroke-width', zoom, f, functionCache, featureState);\n const cache_key = circleRadius + '.' + circleStrokeColor + '.' + circleColor + '.' + circleStrokeWidth + '.' + circleTranslate[0] + '.' + circleTranslate[1];\n iconImg = iconImageCache[cache_key];\n if (!iconImg) {\n iconImg = new Circle({\n radius: circleRadius,\n displacement: [\n circleTranslate[0],\n -circleTranslate[1]\n ],\n stroke: circleStrokeColor && circleStrokeWidth > 0 ? new Stroke({\n width: circleStrokeWidth,\n color: circleStrokeColor\n }) : undefined,\n fill: circleColor ? new Fill({ color: circleColor }) : undefined,\n declutterMode: 'none'\n });\n iconImageCache[cache_key] = iconImg;\n }\n style.setImage(iconImg);\n text = style.getText();\n style.setText(undefined);\n style.setGeometry(undefined);\n style.setZIndex(index);\n hasImage = true;\n }\n let label, font, textLineHeight, textSize, letterSpacing, maxTextWidth;\n if ('text-field' in layout) {\n textSize = Math.round(getValue(layer, 'layout', 'text-size', zoom, f, functionCache, featureState));\n const fontArray = getValue(layer, 'layout', 'text-font', zoom, f, functionCache, featureState);\n textLineHeight = getValue(layer, 'layout', 'text-line-height', zoom, f, functionCache, featureState);\n font = mb2css(getFonts ? getFonts(fontArray, glStyle.metadata ? glStyle.metadata['ol:webfonts'] : undefined) : fontArray, textSize, textLineHeight);\n if (!font.includes('sans-serif')) {\n font += ',sans-serif';\n }\n letterSpacing = getValue(layer, 'layout', 'text-letter-spacing', zoom, f, functionCache, featureState);\n maxTextWidth = getValue(layer, 'layout', 'text-max-width', zoom, f, functionCache, featureState);\n const textField = getValue(layer, 'layout', 'text-field', zoom, f, functionCache, featureState);\n if (typeof textField === 'object' && textField.sections) {\n if (textField.sections.length === 1) {\n label = textField.toString();\n } else {\n label = textField.sections.reduce((acc, chunk, i) => {\n const fonts = chunk.fontStack ? chunk.fontStack.split(',') : fontArray;\n const chunkFont = mb2css(getFonts ? getFonts(fonts) : fonts, textSize * (chunk.scale || 1), textLineHeight);\n let text = chunk.text;\n if (text === '\\n') {\n acc.push('\\n', '');\n return acc;\n }\n if (type == 2) {\n acc.push(applyLetterSpacing(text, letterSpacing), chunkFont);\n return acc;\n }\n text = wrapText(text, chunkFont, maxTextWidth, letterSpacing).split('\\n');\n for (let i = 0, ii = text.length; i < ii; ++i) {\n if (i > 0) {\n acc.push('\\n', '');\n }\n acc.push(text[i], chunkFont);\n }\n return acc;\n }, []);\n }\n } else {\n label = fromTemplate(textField, properties).trim();\n }\n opacity = getValue(layer, 'paint', 'text-opacity', zoom, f, functionCache, featureState);\n }\n if (label && opacity && !skipLabel) {\n if (!hasImage) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getText() || style.getFill() || style.getStroke()) {\n style = new Style();\n styles[stylesLength] = style;\n }\n style.setImage(undefined);\n style.setGeometry(undefined);\n }\n const declutterMode = getDeclutterMode(layer, zoom, f, 'text', functionCache);\n if (!style.getText()) {\n style.setText(text);\n }\n text = style.getText();\n if (!text || 'getDeclutterMode' in text && text.getDeclutterMode() !== declutterMode) {\n text = new Text({\n padding: [\n 2,\n 2,\n 2,\n 2\n ],\n // @ts-ignore\n declutterMode: declutterMode\n });\n style.setText(text);\n }\n const textTransform = getValue(layer, 'layout', 'text-transform', zoom, f, functionCache, featureState);\n if (textTransform == 'uppercase') {\n label = Array.isArray(label) ? label.map((t, i) => i % 2 ? t : t.toUpperCase()) : label.toUpperCase();\n } else if (textTransform == 'lowercase') {\n label = Array.isArray(label) ? label.map((t, i) => i % 2 ? t : t.toLowerCase()) : label.toLowerCase();\n }\n const wrappedLabel = Array.isArray(label) ? label : type == 2 ? applyLetterSpacing(label, letterSpacing) : wrapText(label, font, maxTextWidth, letterSpacing);\n text.setText(wrappedLabel);\n text.setFont(font);\n text.setRotation(deg2rad(getValue(layer, 'layout', 'text-rotate', zoom, f, functionCache, featureState)));\n if (typeof text.setKeepUpright === 'function') {\n const keepUpright = getValue(layer, 'layout', 'text-keep-upright', zoom, f, functionCache, featureState);\n text.setKeepUpright(keepUpright);\n }\n const textAnchor = getValue(layer, 'layout', 'text-anchor', zoom, f, functionCache, featureState);\n const placement = hasImage || type == 1 ? 'point' : getValue(layer, 'layout', 'symbol-placement', zoom, f, functionCache, featureState);\n let textAlign;\n if (placement === 'line-center') {\n text.setPlacement('line');\n textAlign = 'center';\n } else {\n text.setPlacement(placement);\n }\n if (placement === 'line' && typeof text.setRepeat === 'function') {\n const symbolSpacing = getValue(layer, 'layout', 'symbol-spacing', zoom, f, functionCache, featureState);\n text.setRepeat(symbolSpacing * 2);\n }\n text.setOverflow(placement === 'point');\n let textHaloWidth = getValue(layer, 'paint', 'text-halo-width', zoom, f, functionCache, featureState);\n const textOffset = getValue(layer, 'layout', 'text-offset', zoom, f, functionCache, featureState);\n const textTranslate = getValue(layer, 'paint', 'text-translate', zoom, f, functionCache, featureState);\n // Text offset has to take halo width and line height into account\n let vOffset = 0;\n let hOffset = 0;\n if (placement == 'point') {\n textAlign = 'center';\n if (textAnchor.indexOf('left') !== -1) {\n textAlign = 'left';\n hOffset = textHaloWidth;\n } else if (textAnchor.indexOf('right') !== -1) {\n textAlign = 'right';\n hOffset = -textHaloWidth;\n }\n const textRotationAlignment = getValue(layer, 'layout', 'text-rotation-alignment', zoom, f, functionCache, featureState);\n text.setRotateWithView(textRotationAlignment == 'map');\n } else {\n text.setMaxAngle(deg2rad(getValue(layer, 'layout', 'text-max-angle', zoom, f, functionCache, featureState)) * label.length / wrappedLabel.length);\n text.setRotateWithView(false);\n }\n text.setTextAlign(textAlign);\n let textBaseline = 'middle';\n if (textAnchor.indexOf('bottom') == 0) {\n textBaseline = 'bottom';\n vOffset = -textHaloWidth - 0.5 * (textLineHeight - 1) * textSize;\n } else if (textAnchor.indexOf('top') == 0) {\n textBaseline = 'top';\n vOffset = textHaloWidth + 0.5 * (textLineHeight - 1) * textSize;\n }\n text.setTextBaseline(textBaseline);\n const textJustify = getValue(layer, 'layout', 'text-justify', zoom, f, functionCache, featureState);\n text.setJustify(textJustify === 'auto' ? undefined : textJustify);\n text.setOffsetX(textOffset[0] * textSize + hOffset + textTranslate[0]);\n text.setOffsetY(textOffset[1] * textSize + vOffset + textTranslate[1]);\n textColor.setColor(colorWithOpacity(getValue(layer, 'paint', 'text-color', zoom, f, functionCache, featureState), opacity));\n text.setFill(textColor);\n const haloColor = colorWithOpacity(getValue(layer, 'paint', 'text-halo-color', zoom, f, functionCache, featureState), opacity);\n if (haloColor && textHaloWidth > 0) {\n textHalo.setColor(haloColor);\n // spec here : https://docs.mapbox.com/mapbox-gl-js/style-spec/#paint-symbol-text-halo-width\n // Halo width must be doubled because it is applied around the center of the text outline\n textHaloWidth *= 2;\n // 1/4 of text size (spec) x 2\n const halfTextSize = 0.5 * textSize;\n textHalo.setWidth(textHaloWidth <= halfTextSize ? textHaloWidth : halfTextSize);\n text.setStroke(textHalo);\n } else {\n text.setStroke(undefined);\n }\n const textPadding = getValue(layer, 'layout', 'text-padding', zoom, f, functionCache, featureState);\n const padding = text.getPadding();\n if (textPadding !== padding[0]) {\n padding[0] = textPadding;\n padding[1] = textPadding;\n padding[2] = textPadding;\n padding[3] = textPadding;\n }\n style.setZIndex(index);\n }\n }\n }\n if (stylesLength > -1) {\n styles.length = stylesLength + 1;\n if (recordLayer) {\n if ('set' in feature) {\n // ol/Feature\n feature.set('mapbox-layer', featureBelongsToLayer);\n } else {\n // ol/render/Feature\n feature.getProperties()['mapbox-layer'] = featureBelongsToLayer;\n }\n }\n return styles;\n }\n return undefined;\n };\n olLayer.setStyle(styleFunction);\n olLayer.set('mapbox-source', mapboxSource);\n olLayer.set('mapbox-layers', mapboxLayers);\n olLayer.set('mapbox-featurestate', olLayer.get('mapbox-featurestate') || {});\n return styleFunction;\n}\n/**\n * Get the the style for a specific Mapbox layer only. This can be useful for creating a legend.\n * @param {import(\"ol/Feature\").default|import(\"ol/render/Feature\").default} feature OpenLayers feature.\n * @param {number} resolution View resolution.\n * @param {import(\"ol/layer\").Vector|import(\"ol/layer\").VectorTile} olLayer OpenLayers layer.\n * @param {string} layerId Id of the Mapbox layer to get the style for\n * @return {Array} Styles for the provided Mapbox layer.\n */\nfunction getStyleForLayer(feature, resolution, olLayer, layerId) {\n const evaluateStyle = olLayer.getStyleFunction();\n if (evaluateStyle.length === 3) {\n // @ts-ignore\n return evaluateStyle(feature, resolution, layerId);\n }\n return undefined;\n}\n\n/**\n * Generates a shaded relief image given elevation data. Uses a 3x3\n * neighborhood for determining slope and aspect.\n * @param {Array} inputs Array of input images.\n * @param {Object} data Data added in the \"beforeoperations\" event.\n * @return {ImageData} Output image.\n */\nfunction hillshade(inputs, data) {\n const elevationImage = inputs[0];\n const width = elevationImage.width;\n const height = elevationImage.height;\n const elevationData = elevationImage.data;\n const shadeData = new Uint8ClampedArray(elevationData.length);\n const dp = data.resolution * 2;\n const maxX = width - 1;\n const maxY = height - 1;\n const pixel = [\n 0,\n 0,\n 0,\n 0\n ];\n const twoPi = 2 * Math.PI;\n const halfPi = Math.PI / 2;\n const sunEl = Math.PI * data.sunEl / 180;\n const sunAz = Math.PI * data.sunAz / 180;\n const cosSunEl = Math.cos(sunEl);\n const sinSunEl = Math.sin(sunEl);\n const highlightColor = data.highlightColor;\n const shadowColor = data.shadowColor;\n const accentColor = data.accentColor;\n const encoding = data.encoding;\n let pixelX, pixelY, x0, x1, y0, y1, offset, z0, z1, dzdx, dzdy, slope, aspect, accent, scaled, shade, scaledAccentColor, compositeShadeColor, clamp, slopeScaleBase, scaledSlope, cosIncidence;\n function calculateElevation(pixel, encoding = 'mapbox') {\n // The method used to extract elevations from the DEM.\n //\n // The supported methods are the Mapbox format\n // (red * 256 * 256 + green * 256 + blue) * 0.1 - 10000\n // and the Terrarium format\n // (red * 256 + green + blue / 256) - 32768\n //\n if (encoding === 'mapbox') {\n return (pixel[0] * 256 * 256 + pixel[1] * 256 + pixel[2]) * 0.1 - 10000;\n }\n if (encoding === 'terrarium') {\n return pixel[0] * 256 + pixel[1] + pixel[2] / 256 - 32768;\n }\n }\n for (pixelY = 0; pixelY <= maxY; ++pixelY) {\n y0 = pixelY === 0 ? 0 : pixelY - 1;\n y1 = pixelY === maxY ? maxY : pixelY + 1;\n for (pixelX = 0; pixelX <= maxX; ++pixelX) {\n x0 = pixelX === 0 ? 0 : pixelX - 1;\n x1 = pixelX === maxX ? maxX : pixelX + 1;\n // determine elevation for (x0, pixelY)\n offset = (pixelY * width + x0) * 4;\n pixel[0] = elevationData[offset];\n pixel[1] = elevationData[offset + 1];\n pixel[2] = elevationData[offset + 2];\n pixel[3] = elevationData[offset + 3];\n z0 = data.vert * calculateElevation(pixel, encoding);\n // determine elevation for (x1, pixelY)\n offset = (pixelY * width + x1) * 4;\n pixel[0] = elevationData[offset];\n pixel[1] = elevationData[offset + 1];\n pixel[2] = elevationData[offset + 2];\n pixel[3] = elevationData[offset + 3];\n z1 = data.vert * calculateElevation(pixel, encoding);\n dzdx = (z1 - z0) / dp;\n // determine elevation for (pixelX, y0)\n offset = (y0 * width + pixelX) * 4;\n pixel[0] = elevationData[offset];\n pixel[1] = elevationData[offset + 1];\n pixel[2] = elevationData[offset + 2];\n pixel[3] = elevationData[offset + 3];\n z0 = data.vert * calculateElevation(pixel, encoding);\n // determine elevation for (pixelX, y1)\n offset = (y1 * width + pixelX) * 4;\n pixel[0] = elevationData[offset];\n pixel[1] = elevationData[offset + 1];\n pixel[2] = elevationData[offset + 2];\n pixel[3] = elevationData[offset + 3];\n z1 = data.vert * calculateElevation(pixel, encoding);\n dzdy = (z1 - z0) / dp;\n aspect = Math.atan2(dzdy, -dzdx);\n if (aspect < 0) {\n aspect = halfPi - aspect;\n } else if (aspect > halfPi) {\n aspect = twoPi - aspect + halfPi;\n } else {\n aspect = halfPi - aspect;\n }\n // Bootstrap slope and corresponding incident values\n slope = Math.atan(Math.sqrt(dzdx * dzdx + dzdy * dzdy));\n cosIncidence = sinSunEl * Math.cos(slope) + cosSunEl * Math.sin(slope) * Math.cos(sunAz - aspect);\n accent = Math.cos(slope);\n // 255 for Hex colors\n scaled = 255 * cosIncidence;\n /*\n * The following is heavily inspired\n * by [Maplibre's equivalent WebGL shader](https://github.com/maplibre/maplibre-gl-js/blob/main/src/shaders/hillshade.fragment.glsl)\n */\n // Forces given value to stay between two given extremes\n clamp = Math.min(Math.max(2 * data.sunEl, 0), 1);\n // Intensity basis for hillshade opacity\n slopeScaleBase = 1.875 - data.opacity * 1.75;\n // Intensity interpolation so that higher intensity values create more opaque hillshading\n scaledSlope = data.opacity !== 0.5 ? halfPi * ((Math.pow(slopeScaleBase, slope) - 1) / (Math.pow(slopeScaleBase, halfPi) - 1)) : slope;\n // Accent hillshade color with given accentColor to emphasize rougher terrain\n scaledAccentColor = {\n r: (1 - accent) * accentColor.r * clamp * 255,\n g: (1 - accent) * accentColor.g * clamp * 255,\n b: (1 - accent) * accentColor.b * clamp * 255,\n a: (1 - accent) * accentColor.a * clamp * 255\n };\n // Allows highlight vs shadow discrimination\n shade = Math.abs(((aspect + sunAz) / Math.PI + 0.5) % 2 - 1);\n // Creates a composite color mix between highlight & shadow colors to emphasize slopes\n compositeShadeColor = {\n r: (highlightColor.r * (1 - shade) + shadowColor.r * shade) * scaled,\n g: (highlightColor.g * (1 - shade) + shadowColor.g * shade) * scaled,\n b: (highlightColor.b * (1 - shade) + shadowColor.b * shade) * scaled,\n a: (highlightColor.a * (1 - shade) + shadowColor.a * shade) * scaled\n };\n // Fill in result color value\n offset = (pixelY * width + pixelX) * 4;\n shadeData[offset] = scaledAccentColor.r * (1 - shade) + compositeShadeColor.r;\n shadeData[offset + 1] = scaledAccentColor.g * (1 - shade) + compositeShadeColor.g;\n shadeData[offset + 2] = scaledAccentColor.b * (1 - shade) + compositeShadeColor.b;\n // Key opacity on the scaledSlope to improve legibility by increasing higher elevation rates' contrast\n shadeData[offset + 3] = elevationData[offset + 3] * data.opacity * clamp * Math.sin(scaledSlope);\n }\n }\n return new ImageData(shadeData, width, height);\n}\n\n/*\nol-mapbox-style - Use Mapbox/MapLibre Style objects with OpenLayers\nCopyright 2016-present ol-mapbox-style contributors\nLicense: https://raw.githubusercontent.com/openlayers/ol-mapbox-style/master/LICENSE\n*/\n/**\n * @typedef {Object} FeatureIdentifier\n * @property {string|number} id The feature id.\n * @property {string} source The source id.\n */\n/**\n * @typedef {Object} Options\n * @property {string} [accessToken] Access token for 'mapbox://' urls.\n * @property {function(string, import(\"./util.js\").ResourceType): (Request|string|Promise|void)} [transformRequest]\n * Function for controlling how `ol-mapbox-style` fetches resources. Can be used for modifying\n * the url, adding headers or setting credentials options. Called with the url and the resource\n * type as arguments, this function is supposed to return a `Request` or a url `string`, or a promise tehereof.\n * Without a return value the original request will not be modified.\n * @property {string} [projection='EPSG:3857'] Only useful when working with non-standard projections.\n * Code of a projection registered with OpenLayers. All sources of the style must be provided in this\n * projection. The projection must also have a valid extent defined, which will be used to determine the\n * origin and resolutions of the tile grid for all tiled sources of the style. When provided, the bbox\n * placeholder in tile and geojson urls changes: the default is `{bbox-epsg-3857}`, when projection is e.g.\n * set to `EPSG:4326`, the bbox placeholder will be `{bbox-epsg-4326}`.\n * @property {Array} [resolutions] Only useful when working with non-standard projections.\n * Resolutions for mapping resolution to the `zoom` used in the Mapbox/MapLibre style.\n * @property {string} [styleUrl] URL of the Mapbox GL style. Required for styles that were provided\n * as object, when they contain a relative sprite url, or sources referencing data by relative url.\n * @property {string} [webfonts] Template for resolving webfonts. Can be used to specify where to fetch\n * web fonts when no `ol:webfonts` metadata is set in the style object. See `getFonts()` and the\n * \"Font handling\" section in `README.md` for details.\n * @property {function(VectorLayer|VectorTileLayer, string):HTMLImageElement|HTMLCanvasElement|string|undefined} [getImage=undefined]\n * Function that returns an image for an icon name. If the result is an HTMLImageElement, it must already be\n * loaded. The layer can be used to call layer.changed() when the loading and processing of the image has finished.\n * This function be used for icons not in the sprite or to override sprite icons.\n * @property {string} [accessTokenParam='access_token'] Access token param. For internal use.\n */\n/**\n * @typedef {Object} ApplyStyleOptions\n * @property {string} [source=''] Source. Default is `''`, which causes the first source in the\n * style to be used.\n * @property {Array} [layers] Layers. If no source is provided, the layers with the\n * provided ids will be used from the style's `layers` array. All layers need to use the same source.\n * @property {boolean} [updateSource=true] Update or create vector (tile) layer source with parameters\n * specified for the source in the mapbox style definition.\n */\n/**\n * @param {import(\"ol/proj/Projection.js\").default} projection Projection.\n * @param {number} [tileSize=512] Tile size.\n * @return {Array} Resolutions.\n */\nfunction getTileResolutions(projection, tileSize = 512) {\n return projection.getExtent() ? createXYZ({\n extent: projection.getExtent(),\n tileSize: tileSize,\n maxZoom: 22\n }).getResolutions() : defaultResolutions;\n}\n/**\n * @param {string} styleUrl Style URL.\n * @param {Options} options Options.\n * @return {Options} Completed options with accessToken and accessTokenParam.\n */\nfunction completeOptions(styleUrl, options) {\n if (!options.accessToken) {\n options = Object.assign({}, options);\n const searchParams = new URL(styleUrl).searchParams;\n // The last search parameter is the access token\n searchParams.forEach((value, key) => {\n options.accessToken = value;\n options.accessTokenParam = key;\n });\n }\n return options;\n}\n/**\n * Applies a style function to an `ol/layer/VectorTile` or `ol/layer/Vector`\n * with an `ol/source/VectorTile` or an `ol/source/Vector`. If the layer does not have a source\n * yet, it will be created and populated from the information in the `glStyle` (unless `updateSource` is\n * set to `false`).\n *\n * **Example:**\n * ```js\n * import {applyStyle} from 'ol-mapbox-style';\n * import {VectorTile} from 'ol/layer.js';\n *\n * const layer = new VectorTile({declutter: true});\n * applyStyle(layer, 'https://api.maptiler.com/maps/basic/style.json?key=YOUR_OPENMAPTILES_TOKEN');\n * ```\n *\n * The style function will render all layers from the `glStyle` object that use the source\n * of the first layer, the specified `source`, or a subset of layers from the same source. The\n * source needs to be a `\"type\": \"vector\"` or `\"type\": \"geojson\"` source.\n *\n * Two additional properties will be set on the provided layer:\n *\n * * `mapbox-source`: The `id` of the Mapbox/MapLibre Style document's source that the\n * OpenLayers layer was created from. Usually `apply()` creates one\n * OpenLayers layer per Mapbox/MapLibre Style source, unless the layer stack has\n * layers from different sources in between.\n * * `mapbox-layers`: The `id`s of the Mapbox/MapLibre Style document's layers that are\n * included in the OpenLayers layer.\n *\n * @param {VectorTileLayer|VectorLayer} layer OpenLayers layer. When the layer has a source configured,\n * it will be modified to use the configuration from the glStyle's `source`. Options specified on the\n * layer's source will override those from the glStyle's `source`, except for `url` and\n * `tileUrlFunction`. When the source projection is the default (`EPSG:3857`), the `tileGrid` will\n * also be overridden. If you'd rather not have ol-mapbox-style modify the source, configure `applyStyle()`\n * with the `updateSource: false` option.\n * @param {string|Object} glStyle Mapbox/MapLibre Style object.\n * @param {string|Array|Options&ApplyStyleOptions} [sourceOrLayersOrOptions] Options or\n * `source` key or an array of layer `id`s from the Mapbox/MapLibre Style object. When a `source` key is\n * provided, all layers for the specified source will be included in the style function. When layer\n * `id`s are provided, they must be from layers that use the same source. When not provided or a falsey\n * value, all layers using the first source specified in the glStyle will be rendered.\n * @param {Options&ApplyStyleOptions|string} [optionsOrPath] **Deprecated**. Options. Alternatively the path of the style file\n * (only required when a relative path is used for the `\"sprite\"` property of the style).\n * @param {Array} [resolutions] **Deprecated**. Resolutions for mapping resolution to zoom level.\n * Only needed when working with non-standard tile grids or projections, can also be supplied with\n * options.\n * @return {Promise} Promise which will be resolved when the style can be used\n * for rendering.\n */\nfunction applyStyle(layer, glStyle, sourceOrLayersOrOptions = '', optionsOrPath = {}, resolutions = undefined) {\n let styleUrl, sourceId;\n /** @type {Options&ApplyStyleOptions} */\n let options;\n let sourceOrLayers;\n let updateSource = true;\n if (typeof sourceOrLayersOrOptions !== 'string' && !Array.isArray(sourceOrLayersOrOptions)) {\n options = sourceOrLayersOrOptions;\n sourceOrLayers = options.source || options.layers;\n optionsOrPath = options;\n } else {\n sourceOrLayers = sourceOrLayersOrOptions;\n }\n if (typeof optionsOrPath === 'string') {\n styleUrl = optionsOrPath;\n options = {};\n } else {\n styleUrl = optionsOrPath.styleUrl;\n options = optionsOrPath;\n }\n if (options.updateSource === false) {\n updateSource = false;\n }\n if (!resolutions) {\n resolutions = options.resolutions;\n }\n if (!styleUrl && typeof glStyle === 'string' && !glStyle.trim().startsWith('{')) {\n styleUrl = glStyle;\n }\n if (styleUrl) {\n styleUrl = styleUrl.startsWith('data:') ? location.href : normalizeStyleUrl(styleUrl, options.accessToken);\n options = completeOptions(styleUrl, options);\n }\n return new Promise(function (resolve, reject) {\n // TODO: figure out where best place to check source type is\n // Note that the source arg is an array of gl layer ids and each must be\n // dereferenced to get source type to validate\n getGlStyle(glStyle, options).then(function (glStyle) {\n if (glStyle.version != 8) {\n return reject(new Error('glStyle version 8 required.'));\n }\n if (!(layer instanceof VectorLayer || layer instanceof VectorTileLayer)) {\n return reject(new Error('Can only apply to VectorLayer or VectorTileLayer'));\n }\n const type = layer instanceof VectorTileLayer ? 'vector' : 'geojson';\n if (!sourceOrLayers) {\n sourceId = Object.keys(glStyle.sources).find(function (key) {\n return glStyle.sources[key].type === type;\n });\n sourceOrLayers = sourceId;\n } else if (Array.isArray(sourceOrLayers)) {\n sourceId = glStyle.layers.find(function (layer) {\n return layer.id === sourceOrLayers[0];\n }).source;\n } else {\n sourceId = sourceOrLayers;\n }\n if (!sourceId) {\n return reject(new Error(`No ${ type } source found in the glStyle.`));\n }\n function assignSource() {\n if (!updateSource) {\n return Promise.resolve();\n }\n if (layer instanceof VectorTileLayer) {\n return setupVectorSource(glStyle.sources[sourceId], styleUrl, options).then(function (source) {\n const targetSource = layer.getSource();\n if (!targetSource) {\n layer.setSource(source);\n } else if (source !== targetSource) {\n targetSource.setTileUrlFunction(source.getTileUrlFunction());\n if (typeof targetSource.setUrls === 'function' && typeof source.getUrls === 'function') {\n // to get correct keys for tile cache and queue\n targetSource.setUrls(source.getUrls());\n }\n //@ts-ignore\n if (!targetSource.format_) {\n //@ts-ignore\n targetSource.format_ = source.format_;\n }\n if (!targetSource.getAttributions()) {\n targetSource.setAttributions(source.getAttributions());\n }\n if (targetSource.getTileLoadFunction() === defaultLoadFunction) {\n targetSource.setTileLoadFunction(source.getTileLoadFunction());\n }\n if (equivalent(targetSource.getProjection(), source.getProjection())) {\n targetSource.tileGrid = source.getTileGrid();\n }\n }\n const tileGrid = layer.getSource().getTileGrid();\n if (!isFinite(layer.getMaxResolution()) && !isFinite(layer.getMinZoom()) && tileGrid.getMinZoom() > 0) {\n layer.setMaxResolution(getResolutionForZoom(Math.max(0, tileGrid.getMinZoom() - 1e-12), tileGrid.getResolutions()));\n }\n });\n }\n const glSource = glStyle.sources[sourceId];\n let source = layer.getSource();\n if (!source || source.get('mapbox-source') !== glSource) {\n source = setupGeoJSONSource(glSource, styleUrl, options);\n }\n const targetSource = layer.getSource();\n if (!targetSource) {\n layer.setSource(source);\n } else if (source !== targetSource) {\n if (!targetSource.getAttributions()) {\n targetSource.setAttributions(source.getAttributions());\n }\n //@ts-ignore\n if (!targetSource.format_) {\n //@ts-ignore\n targetSource.format_ = source.getFormat();\n }\n //@ts-ignore\n targetSource.url_ = source.getUrl();\n }\n return Promise.resolve();\n }\n let spriteScale, spriteData, spriteImageUrl, style;\n function onChange() {\n if (!style && (!glStyle.sprite || spriteData)) {\n if (options.projection && !resolutions) {\n const projection = get$1(options.projection);\n const units = projection.getUnits();\n if (units !== 'm') {\n resolutions = defaultResolutions.map(resolution => resolution / METERS_PER_UNIT[units]);\n }\n }\n style = stylefunction(layer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, (fonts, templateUrl = options.webfonts) => getFonts(fonts, templateUrl), options.getImage);\n if (!layer.getStyle()) {\n reject(new Error(`Nothing to show for source [${ sourceId }]`));\n } else {\n assignSource().then(resolve).catch(reject);\n }\n } else if (style) {\n layer.setStyle(style);\n assignSource().then(resolve).catch(reject);\n } else {\n reject(new Error('Something went wrong trying to apply style.'));\n }\n }\n if (glStyle.sprite) {\n const sprite = new URL(normalizeSpriteUrl(glStyle.sprite, options.accessToken, styleUrl || location.href));\n spriteScale = window.devicePixelRatio >= 1.5 ? 0.5 : 1;\n const sizeFactor = spriteScale == 0.5 ? '@2x' : '';\n let spriteUrl = sprite.origin + sprite.pathname + sizeFactor + '.json' + sprite.search;\n new Promise(function (resolve, reject) {\n fetchResource('Sprite', spriteUrl, options).then(resolve).catch(function (error) {\n spriteUrl = sprite.origin + sprite.pathname + '.json' + sprite.search;\n fetchResource('Sprite', spriteUrl, options).then(resolve).catch(reject);\n });\n }).then(function (spritesJson) {\n if (spritesJson === undefined) {\n reject(new Error('No sprites found.'));\n }\n spriteData = spritesJson;\n spriteImageUrl = sprite.origin + sprite.pathname + sizeFactor + '.png' + sprite.search;\n if (options.transformRequest) {\n const transformed = options.transformRequest(spriteImageUrl, 'SpriteImage') || spriteImageUrl;\n if (transformed instanceof Request || transformed instanceof Promise) {\n spriteImageUrl = transformed;\n }\n }\n onChange();\n }).catch(function (err) {\n reject(new Error(`Sprites cannot be loaded: ${ spriteUrl }: ${ err.message }`));\n });\n } else {\n onChange();\n }\n }).catch(reject);\n });\n}\nconst emptyObj = {};\nfunction setFirstBackground(mapOrLayer, glStyle, options) {\n glStyle.layers.some(function (layer) {\n if (layer.type === 'background') {\n if (mapOrLayer instanceof Layer) {\n mapOrLayer.setBackground(function (resolution) {\n return getBackgroundColor(layer, resolution, options, {});\n });\n return true;\n }\n if (mapOrLayer instanceof Map || mapOrLayer instanceof LayerGroup) {\n mapOrLayer.getLayers().insertAt(0, setupBackgroundLayer(layer, options, {}));\n return true;\n }\n }\n });\n}\n/**\n * Applies properties of the Mapbox/MapLibre Style's first `background` layer to the\n * provided map or layer (group).\n *\n * **Example:**\n * ```js\n * import {applyBackground} from 'ol-mapbox-style';\n * import {Map} from 'ol';\n *\n * const map = new Map({target: 'map'});\n * applyBackground(map, 'https://api.maptiler.com/maps/basic/style.json?key=YOUR_OPENMAPTILES_TOKEN');\n * ```\n * @param {Map|import(\"ol/layer/Base.js\").default} mapOrLayer OpenLayers Map or layer (group).\n * @param {Object|string} glStyle Mapbox/MapLibre Style object or url.\n * @param {Options} options Options.\n * @return {Promise} Promise that resolves when the background is applied.\n */\nfunction applyBackground(mapOrLayer, glStyle, options = {}) {\n return getGlStyle(glStyle, options).then(function (glStyle) {\n setFirstBackground(mapOrLayer, glStyle, options);\n });\n}\nfunction getSourceIdByRef(layers, ref) {\n let sourceId;\n layers.some(function (layer) {\n if (layer.id == ref) {\n sourceId = layer.source;\n return true;\n }\n });\n return sourceId;\n}\nfunction extentFromTileJSON(tileJSON, projection) {\n const bounds = tileJSON.bounds;\n if (bounds) {\n const ll = fromLonLat([\n bounds[0],\n bounds[1]\n ], projection);\n const tr = fromLonLat([\n bounds[2],\n bounds[3]\n ], projection);\n return [\n ll[0],\n ll[1],\n tr[0],\n tr[1]\n ];\n }\n return get$1(projection).getExtent();\n}\nfunction sourceOptionsFromTileJSON(glSource, tileJSON, options) {\n const tileJSONSource = new TileJSON({\n tileJSON: tileJSON,\n tileSize: glSource.tileSize || tileJSON.tileSize || 512\n });\n const tileJSONDoc = tileJSONSource.getTileJSON();\n const tileGrid = tileJSONSource.getTileGrid();\n const projection = get$1(options.projection || 'EPSG:3857');\n const extent = extentFromTileJSON(tileJSONDoc, projection);\n const projectionExtent = projection.getExtent();\n const minZoom = tileJSONDoc.minzoom || 0;\n const maxZoom = tileJSONDoc.maxzoom || 22;\n /** @type {import(\"ol/source/VectorTile.js\").Options} */\n const sourceOptions = {\n attributions: tileJSONSource.getAttributions(),\n projection: projection,\n tileGrid: new TileGrid({\n origin: projectionExtent ? getTopLeft(projectionExtent) : tileGrid.getOrigin(0),\n extent: extent || tileGrid.getExtent(),\n minZoom: minZoom,\n resolutions: getTileResolutions(projection, tileJSON.tileSize).slice(0, maxZoom + 1),\n tileSize: tileGrid.getTileSize(0)\n })\n };\n if (Array.isArray(tileJSONDoc.tiles)) {\n sourceOptions.urls = tileJSONDoc.tiles;\n } else {\n sourceOptions.url = tileJSONDoc.tiles;\n }\n return sourceOptions;\n}\nfunction getBackgroundColor(glLayer, resolution, options, functionCache) {\n const background = {\n id: glLayer.id,\n type: glLayer.type\n };\n const layout = glLayer.layout || {};\n const paint = glLayer.paint || {};\n background['paint'] = paint;\n const zoom = getZoomForResolution(resolution, options.resolutions || defaultResolutions);\n let opacity;\n const bg = getValue(background, 'paint', 'background-color', zoom, emptyObj, functionCache);\n if (paint['background-opacity'] !== undefined) {\n opacity = getValue(background, 'paint', 'background-opacity', zoom, emptyObj, functionCache);\n }\n return layout.visibility == 'none' ? undefined : colorWithOpacity(bg, opacity);\n}\n/**\n * @param {Object} glLayer Mapbox/MapLibre Style layer object.\n * @param {Options} options Options.\n * @param {Object} functionCache Cache for functions.\n * @return {Layer} OpenLayers layer.\n */\nfunction setupBackgroundLayer(glLayer, options, functionCache) {\n const div = document.createElement('div');\n div.className = 'ol-mapbox-style-background';\n div.style.position = 'absolute';\n div.style.width = '100%';\n div.style.height = '100%';\n return new Layer({\n source: new Source({}),\n render(frameState) {\n const color = getBackgroundColor(glLayer, frameState.viewState.resolution, options, functionCache);\n div.style.backgroundColor = color;\n return div;\n }\n });\n}\n/**\n * Creates an OpenLayers VectorTile source for a gl source entry.\n * @param {Object} glSource \"source\" entry from a Mapbox/MapLibre Style object.\n * @param {string|undefined} styleUrl URL to use for the source. This is expected to be the complete http(s) url,\n * with access key applied.\n * @param {Options} options Options.\n * @return {Promise} Promise resolving to a VectorTile source.\n * @private\n */\nfunction setupVectorSource(glSource, styleUrl, options) {\n return new Promise(function (resolve, reject) {\n getTileJson(glSource, styleUrl, options).then(function ({tileJson, tileLoadFunction}) {\n const sourceOptions = sourceOptionsFromTileJSON(glSource, tileJson, options);\n sourceOptions.tileLoadFunction = tileLoadFunction;\n sourceOptions.format = new MVT();\n resolve(new VectorTileSource(sourceOptions));\n }).catch(reject);\n });\n}\nfunction setupVectorLayer(glSource, styleUrl, options) {\n const layer = new VectorTileLayer({\n declutter: true,\n visible: false\n });\n setupVectorSource(glSource, styleUrl, options).then(function (source) {\n source.set('mapbox-source', glSource);\n layer.setSource(source);\n }).catch(function (error) {\n layer.setSource(undefined);\n });\n return layer;\n}\nfunction getBboxTemplate(projection) {\n const projCode = projection ? projection.getCode() : 'EPSG:3857';\n return `{bbox-${ projCode.toLowerCase().replace(/[^a-z0-9]/g, '-') }}`;\n}\nfunction setupRasterSource(glSource, styleUrl, options) {\n return new Promise(function (resolve, reject) {\n getTileJson(glSource, styleUrl, options).then(function ({tileJson, tileLoadFunction}) {\n const source = new TileJSON({\n interpolate: options.interpolate === undefined ? true : options.interpolate,\n transition: 0,\n crossOrigin: 'anonymous',\n tileJSON: tileJson\n });\n source.tileGrid = sourceOptionsFromTileJSON(glSource, tileJson, options).tileGrid;\n if (options.projection) {\n //@ts-ignore\n source.projection = get$1(options.projection);\n }\n const getTileUrl = source.getTileUrlFunction();\n if (tileLoadFunction) {\n source.setTileLoadFunction(tileLoadFunction);\n }\n source.setTileUrlFunction(function (tileCoord, pixelRatio, projection) {\n const bboxTemplate = getBboxTemplate(projection);\n let src = getTileUrl(tileCoord, pixelRatio, projection);\n if (src.indexOf(bboxTemplate) != -1) {\n const bbox = source.getTileGrid().getTileCoordExtent(tileCoord);\n src = src.replace(bboxTemplate, bbox.toString());\n }\n return src;\n });\n source.set('mapbox-source', glSource);\n resolve(source);\n }).catch(function (error) {\n reject(error);\n });\n });\n}\nfunction setupRasterLayer(glSource, styleUrl, options) {\n const layer = new TileLayer();\n setupRasterSource(glSource, styleUrl, options).then(function (source) {\n layer.setSource(source);\n }).catch(function () {\n layer.setSource(undefined);\n });\n return layer;\n}\n/**\n *\n * @param {Object} glSource \"source\" entry from a Mapbox/MapLibre Style object.\n * @param {string} styleUrl Style url\n * @param {Options} options ol-mapbox-style options.\n * @return {ImageLayer} The raster layer\n */\nfunction setupHillshadeLayer(glSource, styleUrl, options) {\n const tileLayer = setupRasterLayer(glSource, styleUrl, options);\n /** @type {ImageLayer} */\n const layer = new ImageLayer({\n source: new Raster({\n operationType: 'image',\n operation: hillshade,\n sources: [tileLayer]\n })\n });\n return layer;\n}\n/**\n * @param {Object} glSource glStyle source.\n * @param {string} styleUrl Style URL.\n * @param {Options} options Options.\n * @return {VectorSource} Configured vector source.\n */\nfunction setupGeoJSONSource(glSource, styleUrl, options) {\n const geoJsonFormat = options.projection ? new GeoJSON({ dataProjection: options.projection }) : new GeoJSON();\n const data = glSource.data;\n const sourceOptions = {};\n if (typeof data == 'string') {\n const [geoJsonUrl] = normalizeSourceUrl(data, options.accessToken, options.accessTokenParam || 'access_token', styleUrl || location.href);\n if (/\\{bbox-[0-9a-z-]+\\}/.test(geoJsonUrl)) {\n const extentUrl = (extent, resolution, projection) => {\n const bboxTemplate = getBboxTemplate(projection);\n return geoJsonUrl.replace(bboxTemplate, `${ extent.join(',') }`);\n };\n const source = new VectorSource({\n attributions: glSource.attribution,\n format: geoJsonFormat,\n loader: (extent, resolution, projection, success, failure) => {\n const url = typeof extentUrl === 'function' ? extentUrl(extent, resolution, projection) : extentUrl;\n fetchResource('GeoJSON', url, options).then(json => {\n const features = source.getFormat().readFeatures(json, { featureProjection: projection });\n source.addFeatures(features);\n success(features);\n }).catch(response => {\n source.removeLoadedExtent(extent);\n failure();\n });\n },\n strategy: bbox\n });\n source.set('mapbox-source', glSource);\n return source;\n }\n const source = new VectorSource({\n attributions: glSource.attribution,\n format: geoJsonFormat,\n url: geoJsonUrl,\n loader: (extent, resolution, projection, success, failure) => {\n fetchResource('GeoJSON', geoJsonUrl, options).then(json => {\n const features = source.getFormat().readFeatures(json, { featureProjection: projection });\n source.addFeatures(features);\n success(features);\n }).catch(response => {\n source.removeLoadedExtent(extent);\n failure();\n });\n }\n });\n return source;\n }\n sourceOptions.features = geoJsonFormat.readFeatures(data, { featureProjection: getUserProjection() || 'EPSG:3857' });\n const source = new VectorSource(Object.assign({\n attributions: glSource.attribution,\n format: geoJsonFormat\n }, sourceOptions));\n source.set('mapbox-source', glSource);\n return source;\n}\nfunction setupGeoJSONLayer(glSource, styleUrl, options) {\n return new VectorLayer({\n declutter: true,\n source: setupGeoJSONSource(glSource, styleUrl, options),\n visible: false\n });\n}\nfunction prerenderRasterLayer(glLayer, layer, functionCache) {\n let zoom = null;\n return function (event) {\n if (glLayer.paint && 'raster-opacity' in glLayer.paint && event.frameState.viewState.zoom !== zoom) {\n zoom = event.frameState.viewState.zoom;\n delete functionCache[glLayer.id];\n updateRasterLayerProperties(glLayer, layer, zoom, functionCache);\n }\n };\n}\nfunction updateRasterLayerProperties(glLayer, layer, zoom, functionCache) {\n const opacity = getValue(glLayer, 'paint', 'raster-opacity', zoom, emptyObj, functionCache);\n layer.setOpacity(opacity);\n}\nfunction manageVisibility(layer, mapOrGroup) {\n function onChange() {\n const glStyle = mapOrGroup.get('mapbox-style');\n if (!glStyle) {\n return;\n }\n const mapboxLayers = derefLayers(glStyle.layers);\n const layerMapboxLayerids = layer.get('mapbox-layers');\n const visible = mapboxLayers.filter(function (mapboxLayer) {\n return layerMapboxLayerids.includes(mapboxLayer.id);\n }).some(function (mapboxLayer) {\n return !mapboxLayer.layout || !mapboxLayer.layout.visibility || mapboxLayer.layout.visibility === 'visible';\n });\n if (layer.get('visible') !== visible) {\n layer.setVisible(visible);\n }\n }\n layer.on('change', onChange);\n onChange();\n}\nfunction setupLayer(glStyle, styleUrl, glLayer, options) {\n const functionCache = getFunctionCache(glStyle);\n const glLayers = glStyle.layers;\n const type = glLayer.type;\n const id = glLayer.source || getSourceIdByRef(glLayers, glLayer.ref);\n const glSource = glStyle.sources[id];\n let layer;\n if (type == 'background') {\n layer = setupBackgroundLayer(glLayer, options, functionCache);\n } else if (glSource.type == 'vector') {\n layer = setupVectorLayer(glSource, styleUrl, options);\n } else if (glSource.type == 'raster') {\n layer = setupRasterLayer(glSource, styleUrl, options);\n layer.setVisible(glLayer.layout ? glLayer.layout.visibility !== 'none' : true);\n layer.on('prerender', prerenderRasterLayer(glLayer, layer, functionCache));\n } else if (glSource.type == 'geojson') {\n layer = setupGeoJSONLayer(glSource, styleUrl, options);\n } else if (glSource.type == 'raster-dem' && glLayer.type == 'hillshade') {\n const hillshadeLayer = setupHillshadeLayer(glSource, styleUrl, options);\n layer = hillshadeLayer;\n hillshadeLayer.getSource().on('beforeoperations', function (event) {\n const data = event.data;\n data.resolution = getPointResolution(options.projection || 'EPSG:3857', event.resolution, getCenter(event.extent), 'm');\n const zoom = getZoomForResolution(event.resolution, options.resolutions || defaultResolutions);\n data.encoding = glSource.encoding;\n data.vert = 5 * getValue(glLayer, 'paint', 'hillshade-exaggeration', zoom, emptyObj, functionCache);\n data.sunAz = getValue(glLayer, 'paint', 'hillshade-illumination-direction', zoom, emptyObj, functionCache);\n data.sunEl = 35;\n data.opacity = 0.3;\n data.highlightColor = getValue(glLayer, 'paint', 'hillshade-highlight-color', zoom, emptyObj, functionCache);\n data.shadowColor = getValue(glLayer, 'paint', 'hillshade-shadow-color', zoom, emptyObj, functionCache);\n data.accentColor = getValue(glLayer, 'paint', 'hillshade-accent-color', zoom, emptyObj, functionCache);\n });\n layer.setVisible(glLayer.layout ? glLayer.layout.visibility !== 'none' : true);\n }\n const glSourceId = id;\n if (layer) {\n layer.set('mapbox-source', glSourceId);\n }\n return layer;\n}\n/**\n * @param {*} glStyle Mapbox/MapLibre Style.\n * @param {Map|LayerGroup} mapOrGroup Map or layer group.\n * @param {string} styleUrl Style URL.\n * @param {Options} options Options.\n * @return {Promise} Promise that resolves when the style is loaded.\n */\nfunction processStyle(glStyle, mapOrGroup, styleUrl, options) {\n const promises = [];\n let view = null;\n if (mapOrGroup instanceof Map) {\n view = mapOrGroup.getView();\n if (!view.isDef() && !view.getRotation() && !view.getResolutions()) {\n const projection = options.projection ? get$1(options.projection) : view.getProjection();\n view = new View(Object.assign(view.getProperties(), {\n maxResolution: defaultResolutions[0] / METERS_PER_UNIT[projection.getUnits()],\n projection: options.projection || view.getProjection()\n }));\n mapOrGroup.setView(view);\n }\n if ('center' in glStyle && !view.getCenter()) {\n view.setCenter(fromLonLat(glStyle.center, view.getProjection()));\n }\n if ('zoom' in glStyle && view.getZoom() === undefined) {\n view.setResolution(defaultResolutions[0] / METERS_PER_UNIT[view.getProjection().getUnits()] / Math.pow(2, glStyle.zoom));\n }\n if (!view.getCenter() || view.getZoom() === undefined) {\n view.fit(view.getProjection().getExtent(), {\n nearest: true,\n size: mapOrGroup.getSize()\n });\n }\n }\n mapOrGroup.set('mapbox-style', glStyle);\n mapOrGroup.set('mapbox-metadata', {\n styleUrl,\n options\n });\n const glLayers = glStyle.layers;\n let layerIds = [];\n let layer, glSourceId, id;\n for (let i = 0, ii = glLayers.length; i < ii; ++i) {\n const glLayer = glLayers[i];\n const type = glLayer.type;\n if (type == 'heatmap') {\n //FIXME Unsupported layer type\n // eslint-disable-next-line no-console\n console.debug(`layers[${ i }].type \"${ type }\" not supported`);\n continue;\n } else {\n id = glLayer.source || getSourceIdByRef(glLayers, glLayer.ref);\n // this technique assumes gl layers will be in a particular order\n if (!id || id != glSourceId) {\n if (layerIds.length) {\n promises.push(finalizeLayer(layer, layerIds, glStyle, styleUrl, mapOrGroup, options));\n layerIds = [];\n }\n layer = setupLayer(glStyle, styleUrl, glLayer, options);\n if (!(layer instanceof VectorLayer || layer instanceof VectorTileLayer)) {\n layerIds = [];\n }\n glSourceId = layer.get('mapbox-source');\n }\n layerIds.push(glLayer.id);\n }\n }\n promises.push(finalizeLayer(layer, layerIds, glStyle, styleUrl, mapOrGroup, options));\n return Promise.all(promises);\n}\n/**\n * Loads and applies a Mapbox/MapLibre Style object into an OpenLayers Map or LayerGroup.\n * This includes the map background, the layers, and for Map instances that did not\n * have a View defined yet also the center and the zoom.\n *\n * **Example:**\n * ```js\n * import apply from 'ol-mapbox-style';\n *\n * apply('map', 'mapbox://styles/mapbox/bright-v9', {accessToken: 'YOUR_MAPBOX_TOKEN'});\n * ```\n *\n * The center and zoom will only be set if present in the Mapbox/MapLibre Style document,\n * and if not already set on the OpenLayers map.\n *\n * Layers will be added to the OpenLayers map, without affecting any layers that\n * might already be set on the map.\n *\n * Layers added by `apply()` will have two additional properties:\n *\n * * `mapbox-source`: The `id` of the Mapbox/MapLibre Style document's source that the\n * OpenLayers layer was created from. Usually `apply()` creates one\n * OpenLayers layer per Mapbox/MapLibre Style source, unless the layer stack has\n * layers from different sources in between.\n * * `mapbox-layers`: The `id`s of the Mapbox/MapLibre Style document's layers that are\n * included in the OpenLayers layer.\n *\n * This function sets an additional `mapbox-style` property on the OpenLayers\n * Map or LayerGroup instance, which holds the Mapbox/MapLibre Style object.\n *\n * @param {Map|HTMLElement|string|LayerGroup} mapOrGroupOrElement Either an existing\n * OpenLayers Map instance, or a HTML element, or the id of a HTML element that will be\n * the target of a new OpenLayers Map, or a layer group. If layer group, styles\n * releated to the map and view will be ignored.\n * @param {string|Object} style JSON style object or style url pointing to a\n * Mapbox/MapLibre Style object. When using Mapbox APIs, the url is the `styleUrl`\n * shown in Mapbox Studio's \"share\" panel. In addition, the `accessToken` option\n * (see below) must be set.\n * When passed as JSON style object, all OpenLayers layers created by `apply()`\n * will be immediately available, but they may not have a source yet (i.e. when\n * they are defined by a TileJSON url in the Mapbox/MapLibre Style document). When passed\n * as style url, layers will be added to the map when the Mapbox/MapLibre Style document\n * is loaded and parsed.\n * @param {Options} options Options.\n * @return {Promise} A promise that resolves after all layers have been added to\n * the OpenLayers Map instance or LayerGroup, their sources set, and their styles applied. The\n * `resolve` callback will be called with the OpenLayers Map instance or LayerGroup as\n * argument.\n */\nfunction apply(mapOrGroupOrElement, style, options = {}) {\n let promise;\n /** @type {Map|LayerGroup} */\n let mapOrGroup;\n if (typeof mapOrGroupOrElement === 'string' || mapOrGroupOrElement instanceof HTMLElement) {\n mapOrGroup = new Map({ target: mapOrGroupOrElement });\n } else {\n mapOrGroup = mapOrGroupOrElement;\n }\n if (typeof style === 'string') {\n const styleUrl = style.startsWith('data:') ? location.href : normalizeStyleUrl(style, options.accessToken);\n options = completeOptions(styleUrl, options);\n promise = new Promise(function (resolve, reject) {\n getGlStyle(style, options).then(function (glStyle) {\n processStyle(glStyle, mapOrGroup, styleUrl, options).then(function () {\n resolve(mapOrGroup);\n }).catch(reject);\n }).catch(function (err) {\n reject(new Error(`Could not load ${ style }: ${ err.message }`));\n });\n });\n } else {\n promise = new Promise(function (resolve, reject) {\n processStyle(style, mapOrGroup, !options.styleUrl || options.styleUrl.startsWith('data:') ? location.href : normalizeStyleUrl(options.styleUrl, options.accessToken), options).then(function () {\n resolve(mapOrGroup);\n }).catch(reject);\n });\n }\n return promise;\n}\n/**\n * If layerIds is not empty, applies the style specified in glStyle to the layer,\n * and adds the layer to the map.\n *\n * The layer may not yet have a source when the function is called. If so, the style\n * is applied to the layer via a once listener on the 'change:source' event.\n *\n * @param {Layer} layer An OpenLayers layer instance.\n * @param {Array} layerIds Array containing layer ids of already-processed layers.\n * @param {Object} glStyle Style as a JSON object.\n * @param {string|undefined} styleUrl The original style URL. Only required\n * when a relative path is used with the `\"sprite\"` property of the style.\n * @param {Map|LayerGroup} mapOrGroup OpenLayers Map.\n * @param {Options} options Options.\n * @return {Promise} Returns a promise that resolves after the source has\n * been set on the specified layer, and the style has been applied.\n */\nfunction finalizeLayer(layer, layerIds, glStyle, styleUrl, mapOrGroup, options = {}) {\n let minZoom = 24;\n let maxZoom = 0;\n const glLayers = glStyle.layers;\n for (let i = 0, ii = glLayers.length; i < ii; ++i) {\n const glLayer = glLayers[i];\n if (layerIds.indexOf(glLayer.id) !== -1) {\n minZoom = Math.min('minzoom' in glLayer ? glLayer.minzoom : 0, minZoom);\n maxZoom = Math.max('maxzoom' in glLayer ? glLayer.maxzoom : 24, maxZoom);\n }\n }\n return new Promise(function (resolve, reject) {\n const setStyle = function () {\n const source = layer.getSource();\n if (!source || source.getState() === 'error') {\n reject(new Error('Error accessing data for source ' + layer.get('mapbox-source')));\n return;\n }\n if ('getTileGrid' in source) {\n const tileGrid = /** @type {import(\"ol/source/Tile.js\").default|import(\"ol/source/VectorTile.js\").default} */\n source.getTileGrid();\n if (tileGrid) {\n const sourceMinZoom = tileGrid.getMinZoom();\n if (minZoom > 0 || sourceMinZoom > 0) {\n layer.setMaxResolution(Math.min(getResolutionForZoom(Math.max(0, minZoom - 1e-12), defaultResolutions), getResolutionForZoom(Math.max(0, sourceMinZoom - 1e-12), tileGrid.getResolutions())));\n }\n if (maxZoom < 24) {\n layer.setMinResolution(getResolutionForZoom(maxZoom, defaultResolutions));\n }\n }\n } else {\n if (minZoom > 0) {\n layer.setMaxResolution(getResolutionForZoom(Math.max(0, minZoom - 1e-12), defaultResolutions));\n }\n }\n if (source instanceof VectorSource || source instanceof VectorTileSource) {\n applyStyle(layer, glStyle, layerIds, Object.assign({ styleUrl: styleUrl }, options)).then(function () {\n manageVisibility(layer, mapOrGroup);\n resolve();\n }).catch(reject);\n } else {\n resolve();\n }\n };\n layer.set('mapbox-layers', layerIds);\n const layers = mapOrGroup.getLayers();\n if (layers.getArray().indexOf(layer) === -1) {\n layers.push(layer);\n }\n if (layer.getSource()) {\n setStyle();\n } else {\n layer.once('change:source', setStyle);\n }\n });\n}\n/**\n * Get the Mapbox Layer object for the provided `layerId`.\n * @param {Map|LayerGroup} mapOrGroup Map or LayerGroup.\n * @param {string} layerId Mapbox Layer id.\n * @return {Object} Mapbox Layer object.\n */\nfunction getMapboxLayer(mapOrGroup, layerId) {\n const style = mapOrGroup.get('mapbox-style');\n const layerStyle = style.layers.find(function (layer) {\n return layer.id === layerId;\n });\n return layerStyle;\n}\n/**\n * Add a new Mapbox Layer object to the style. The map will be re-rendered.\n * @param {Map|LayerGroup} mapOrGroup The Map or LayerGroup `apply` was called on.\n * @param {Object} mapboxLayer Mapbox Layer object.\n * @param {string} [beforeLayerId] Optional id of the Mapbox Layer before the new layer that will be added.\n * @return {Promise} Resolves when the added layer is available.\n */\nfunction addMapboxLayer(mapOrGroup, mapboxLayer, beforeLayerId) {\n const glStyle = mapOrGroup.get('mapbox-style');\n const mapboxLayers = glStyle.layers;\n let spliceIndex;\n let sourceIndex = -1;\n if (beforeLayerId !== undefined) {\n const beforeMapboxLayer = getMapboxLayer(mapOrGroup, beforeLayerId);\n if (beforeMapboxLayer === undefined) {\n throw new Error(`Layer with id \"${ beforeLayerId }\" not found.`);\n }\n spliceIndex = mapboxLayers.indexOf(beforeMapboxLayer);\n } else {\n spliceIndex = mapboxLayers.length;\n }\n let sourceOffset;\n if (spliceIndex > 0 && mapboxLayers[spliceIndex - 1].source === mapboxLayer.source) {\n sourceIndex = spliceIndex - 1;\n sourceOffset = -1;\n } else if (spliceIndex < mapboxLayers.length && mapboxLayers[spliceIndex].source === mapboxLayer.source) {\n sourceIndex = spliceIndex;\n sourceOffset = 0;\n }\n if (sourceIndex === -1) {\n const {options, styleUrl} = mapOrGroup.get('mapbox-metadata');\n const layer = setupLayer(glStyle, styleUrl, mapboxLayer, options);\n if (beforeLayerId) {\n const beforeLayer = getLayer(mapOrGroup, beforeLayerId);\n const beforeLayerIndex = mapOrGroup.getLayers().getArray().indexOf(beforeLayer);\n mapOrGroup.getLayers().insertAt(beforeLayerIndex, layer);\n }\n mapboxLayers.splice(spliceIndex, 0, mapboxLayer);\n return finalizeLayer(layer, [mapboxLayer.id], glStyle, styleUrl, mapOrGroup, options);\n }\n if (mapboxLayers.some(layer => layer.id === mapboxLayer.id)) {\n throw new Error(`Layer with id \"${ mapboxLayer.id }\" already exists.`);\n }\n const sourceLayerId = mapboxLayers[sourceIndex].id;\n const args = styleFunctionArgs[getStyleFunctionKey(mapOrGroup.get('mapbox-style'), getLayer(mapOrGroup, sourceLayerId))];\n mapboxLayers.splice(spliceIndex, 0, mapboxLayer);\n if (args) {\n const [olLayer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, getFonts, getImage] = args;\n if (Array.isArray(sourceOrLayers)) {\n const layerIndex = sourceOrLayers.indexOf(sourceLayerId) + sourceOffset;\n sourceOrLayers.splice(layerIndex, 0, mapboxLayer.id);\n }\n stylefunction(olLayer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, getFonts, getImage);\n } else {\n getLayer(mapOrGroup, mapboxLayers[sourceIndex].id).changed();\n }\n return Promise.resolve();\n}\n/**\n * Update a Mapbox Layer object in the style. The map will be re-rendered with the new style.\n * @param {Map|LayerGroup} mapOrGroup The Map or LayerGroup `apply` was called on.\n * @param {Object} mapboxLayer Updated Mapbox Layer object.\n */\nfunction updateMapboxLayer(mapOrGroup, mapboxLayer) {\n const glStyle = mapOrGroup.get('mapbox-style');\n const mapboxLayers = glStyle.layers;\n const index = mapboxLayers.findIndex(function (layer) {\n return layer.id === mapboxLayer.id;\n });\n if (index === -1) {\n throw new Error(`Layer with id \"${ mapboxLayer.id }\" not found.`);\n }\n const oldLayer = mapboxLayers[index];\n if (oldLayer.source !== mapboxLayer.source) {\n throw new Error('Updated layer and previous version must use the same source.');\n }\n delete getFunctionCache(glStyle)[mapboxLayer.id];\n delete getFilterCache(glStyle)[mapboxLayer.id];\n mapboxLayers[index] = mapboxLayer;\n const args = styleFunctionArgs[getStyleFunctionKey(mapOrGroup.get('mapbox-style'), getLayer(mapOrGroup, mapboxLayer.id))];\n if (args) {\n stylefunction.apply(undefined, args);\n } else {\n getLayer(mapOrGroup, mapboxLayer.id).changed();\n }\n}\n/**\n * Updates a Mapbox source object in the style. The according OpenLayers source will be replaced\n * and the map will be re-rendered.\n * @param {Map|LayerGroup} mapOrGroup The Map or LayerGroup `apply` was called on.\n * @param {string} id Key of the source in the `sources` object literal.\n * @param {Object} mapboxSource Mapbox source object.\n * @return {Promise} Promise that resolves when the source has been updated.\n */\nfunction updateMapboxSource(mapOrGroup, id, mapboxSource) {\n const currentSource = getSource(mapOrGroup, id);\n const layers = mapOrGroup.getLayers().getArray().filter(function (layer) {\n return (layer instanceof VectorLayer || layer instanceof TileLayer || layer instanceof VectorTileLayer) && layer.getSource() === currentSource;\n });\n const metadata = mapOrGroup.get('mapbox-metadata');\n let newSourcePromise;\n switch (mapboxSource.type) {\n case 'vector':\n newSourcePromise = setupVectorSource(mapboxSource, metadata.styleUrl, metadata.options);\n break;\n case 'geojson':\n newSourcePromise = Promise.resolve(setupGeoJSONSource(mapboxSource, metadata.styleUrl, metadata.options));\n break;\n case 'raster':\n case 'raster-dem':\n newSourcePromise = setupRasterSource(mapboxSource, metadata.styleUrl, metadata.options);\n break;\n default:\n return Promise.reject(new Error('Unsupported source type ' + mapboxSource.type));\n }\n newSourcePromise.then(function (newSource) {\n layers.forEach(function (layer) {\n layer.setSource(newSource);\n });\n });\n return newSourcePromise;\n}\n/**\n * Remove a Mapbox Layer object from the style. The map will be re-rendered.\n * @param {Map|LayerGroup} mapOrGroup The Map or LayerGroup `apply` was called on.\n * @param {string|Object} mapboxLayerIdOrLayer Mapbox Layer id or Mapbox Layer object.\n */\nfunction removeMapboxLayer(mapOrGroup, mapboxLayerIdOrLayer) {\n const mapboxLayerId = typeof mapboxLayerIdOrLayer === 'string' ? mapboxLayerIdOrLayer : mapboxLayerIdOrLayer.id;\n const layer = getLayer(mapOrGroup, mapboxLayerId);\n /** @type {Array} */\n const layerMapboxLayers = layer.get('mapbox-layers');\n if (layerMapboxLayers.length === 1) {\n throw new Error('Cannot remove last Mapbox layer from an OpenLayers layer.');\n }\n layerMapboxLayers.splice(layerMapboxLayers.indexOf(mapboxLayerId), 1);\n const glStyle = mapOrGroup.get('mapbox-style');\n const layers = glStyle.layers;\n layers.splice(layers.findIndex(layer => layer.id === mapboxLayerId), 1);\n const args = styleFunctionArgs[getStyleFunctionKey(glStyle, layer)];\n if (args) {\n const [olLayer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, getFonts, getImage] = args;\n if (Array.isArray(sourceOrLayers)) {\n sourceOrLayers.splice(sourceOrLayers.findIndex(layer => layer === mapboxLayerId), 1);\n }\n stylefunction(olLayer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, getFonts, getImage);\n } else {\n getLayer(mapOrGroup, mapboxLayerId).changed();\n }\n}\n/**\n * Get the OpenLayers layer instance that contains the provided Mapbox/MapLibre Style\n * `layer`. Note that multiple Mapbox/MapLibre Style layers are combined in a single\n * OpenLayers layer instance when they use the same Mapbox/MapLibre Style `source`.\n * @param {Map|LayerGroup} map OpenLayers Map or LayerGroup.\n * @param {string} layerId Mapbox/MapLibre Style layer id.\n * @return {Layer} OpenLayers layer instance.\n */\nfunction getLayer(map, layerId) {\n const layers = map.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const mapboxLayers = layers[i].get('mapbox-layers');\n if (mapboxLayers && mapboxLayers.indexOf(layerId) !== -1) {\n return layers[i];\n }\n }\n return undefined;\n}\n/**\n * Get the OpenLayers layer instances for the provided Mapbox/MapLibre Style `source`.\n * @param {Map|LayerGroup} map OpenLayers Map or LayerGroup.\n * @param {string} sourceId Mapbox/MapLibre Style source id.\n * @return {Array} OpenLayers layer instances.\n */\nfunction getLayers(map, sourceId) {\n const result = [];\n const layers = map.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n if (layers[i].get('mapbox-source') === sourceId) {\n result.push(layers[i]);\n }\n }\n return result;\n}\n/**\n * Get the OpenLayers source instance for the provided Mapbox/MapLibre Style `source`.\n * @param {Map|LayerGroup} map OpenLayers Map or LayerGroup.\n * @param {string} sourceId Mapbox/MapLibre Style source id.\n * @return {Source} OpenLayers source instance.\n */\nfunction getSource(map, sourceId) {\n const layers = map.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const source = /** @type {Layer} */\n layers[i].getSource();\n if (layers[i].get('mapbox-source') === sourceId) {\n return source;\n }\n }\n return undefined;\n}\n/**\n * Sets or removes a feature state. The feature state is taken into account for styling,\n * just like the feature's properties, and can be used e.g. to conditionally render selected\n * features differently.\n *\n * The feature state will be stored on the OpenLayers layer matching the feature identifier, in the\n * `mapbox-featurestate` property.\n * @param {Map|VectorLayer|VectorTileLayer} mapOrLayer OpenLayers Map or layer to set the feature\n * state on.\n * @param {FeatureIdentifier} feature Feature identifier.\n * @param {Object|null} state Feature state. Set to `null` to remove the feature state.\n */\nfunction setFeatureState(mapOrLayer, feature, state) {\n const layers = 'getLayers' in mapOrLayer ? getLayers(mapOrLayer, feature.source) : [mapOrLayer];\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const featureState = layers[i].get('mapbox-featurestate');\n if (featureState) {\n if (state) {\n featureState[feature.id] = state;\n } else {\n delete featureState[feature.id];\n }\n layers[i].changed();\n } else {\n throw new Error(`Map or layer for source \"${ feature.source }\" not found.`);\n }\n }\n}\n/**\n * Sets or removes a feature state. The feature state is taken into account for styling,\n * just like the feature's properties, and can be used e.g. to conditionally render selected\n * features differently.\n * @param {Map|VectorLayer|VectorTileLayer} mapOrLayer Map or layer to set the feature state on.\n * @param {FeatureIdentifier} feature Feature identifier.\n * @return {Object|null} Feature state or `null` when no feature state is set for the given\n * feature identifier.\n */\nfunction getFeatureState(mapOrLayer, feature) {\n const layers = 'getLayers' in mapOrLayer ? getLayers(mapOrLayer, feature.source) : [mapOrLayer];\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const featureState = layers[i].get('mapbox-featurestate');\n if (featureState && featureState[feature.id]) {\n return featureState[feature.id];\n }\n }\n return undefined;\n}\n\n/** @typedef {import(\"ol/Map.js\").default} Map */\n/**\n * @classdesc\n * Event emitted on configuration or loading error.\n */\nclass ErrorEvent extends BaseEvent {\n /**\n * @param {Error} error error object.\n */\n constructor(error) {\n super(EventType.ERROR);\n /**\n * @type {Error}\n */\n this.error = error;\n }\n}\n/**\n * @typedef {Object} Options\n * @property {string} styleUrl The URL of the Mapbox/MapLibre Style object to use for this layer. For a\n * style created with Mapbox Studio and hosted on Mapbox, this will look like\n * 'mapbox://styles/you/your-style'.\n * @property {string} [accessToken] The access token for your Mapbox/MapLibre style. This has to be provided\n * for `mapbox://` style urls. For `https://` and other urls, any access key must be the last query\n * parameter of the style url.\n * @property {string} [source] If your style uses more than one source, you need to use either the\n * `source` property or the `layers` property to limit rendering to a single vector source. The\n * `source` property corresponds to the id of a vector source in your Mapbox/MapLibre style.\n * @property {Array} [layers] Limit rendering to the list of included layers. All layers\n * must share the same vector source. If your style uses more than one source, you need to use\n * either the `source` property or the `layers` property to limit rendering to a single vector\n * source.\n * @property {boolean} [declutter=true] Declutter images and text. Decluttering is applied to all\n * image and text styles of all Vector and VectorTile layers that have set this to `true`. The priority\n * is defined by the z-index of the layer, the `zIndex` of the style and the render order of features.\n * Higher z-index means higher priority. Within the same z-index, a feature rendered before another has\n * higher priority.\n *\n * As an optimization decluttered features from layers with the same `className` are rendered above\n * the fill and stroke styles of all of those layers regardless of z-index. To opt out of this\n * behavior and place declutterd features with their own layer configure the layer with a `className`\n * other than `ol-layer`.\n * @property {import(\"ol/layer/Base.js\").BackgroundColor|false} [background] Background color for the layer.\n * If not specified, the background from the Mapbox/MapLibre Style object will be used. Set to `false` to prevent\n * the Mapbox/MapLibre style's background from being used.\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"ol/extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible. If neither `maxResolution` nor `minZoom` are defined, the layer's `maxResolution` will\n * match the style source's `minzoom`.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will\n * be visible. If neither `maxResolution` nor `minZoom` are defined, the layer's `minZoom` will match\n * the style source's `minzoom`.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {import(\"ol/render.js\").OrderFunction} [renderOrder] Render order. Function to be used when sorting\n * features before rendering. By default features are drawn in the order that they are created. Use\n * `null` to avoid the sort, but get an undefined draw order.\n * @property {number} [renderBuffer=100] The buffer in pixels around the tile extent used by the\n * renderer when getting features from the vector tile for the rendering or hit-detection.\n * Recommended value: Vector tiles are usually generated with a buffer, so this value should match\n * the largest possible buffer of the used tiles. It should be at least the size of the largest\n * point symbol or line width.\n * @property {import(\"ol/layer/VectorTile.js\").VectorTileRenderType} [renderMode='hybrid'] Render mode for vector tiles:\n * * `'hybrid'`: Polygon and line elements are rendered as images, so pixels are scaled during zoom\n * animations. Point symbols and texts are accurately rendered as vectors and can stay upright on\n * rotated views.\n * * `'vector'`: Everything is rendered as vectors. Use this mode for improved performance on vector\n * tile layers with only a few rendered features (e.g. for highlighting a subset of features of\n * another layer with the same source).\n * @property {import(\"ol/Map.js\").default} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use `map.addLayer()`.\n * @property {boolean} [updateWhileAnimating=false] When set to `true`, feature batches will be\n * recreated during animations. This means that no vectors will be shown clipped, but the setting\n * will have a performance impact for large amounts of vector data. When set to `false`, batches\n * will be recreated when no animation is active.\n * @property {boolean} [updateWhileInteracting=false] When set to `true`, feature batches will be\n * recreated during interactions. See also `updateWhileAnimating`.\n * @property {number} [preload=0] Preload. Load low-resolution tiles up to `preload` levels. `0`\n * means no preloading.\n * @property {boolean} [useInterimTilesOnError=true] Use interim tiles on error.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n/**\n * @classdesc\n * ```js\n * import {MapboxVectorLayer} from 'ol-mapbox-style';\n * ```\n * A vector tile layer based on a Mapbox/MapLibre style that uses a single vector source. Configure\n * the layer with the `styleUrl` and `accessToken` shown in Mapbox Studio's share panel.\n * If the style uses more than one source, use the `source` property to choose a single\n * vector source. If you want to render a subset of the layers in the style, use the `layers`\n * property (all layers must share the same vector source). See the constructor options for\n * more detail.\n *\n * const map = new Map({\n * view: new View({\n * center: [0, 0],\n * zoom: 1,\n * }),\n * layers: [\n * new MapboxVectorLayer({\n * styleUrl: 'mapbox://styles/mapbox/bright-v9',\n * accessToken: 'your-mapbox-access-token-here',\n * }),\n * ],\n * target: 'map',\n * });\n *\n * On configuration or loading error, the layer will trigger an `'error'` event. Listeners\n * will receive an object with an `error` property that can be used to diagnose the problem.\n *\n * **Note for users of the full build**: The `MapboxVectorLayer` requires the\n * [ol-mapbox-style](https://github.com/openlayers/ol-mapbox-style) library to be loaded as well.\n *\n * @param {Options} options Options.\n * @extends {VectorTileLayer}\n * @fires module:ol/events/Event~BaseEvent#event:error\n * @api\n */\nclass MapboxVectorLayer extends VectorTileLayer {\n /**\n * @param {Options} options Layer options. At a minimum, `styleUrl` and `accessToken`\n * must be provided.\n */\n constructor(options) {\n const declutter = 'declutter' in options ? options.declutter : true;\n const source = new VectorTileSource({\n state: 'loading',\n format: new MVT()\n });\n super({\n source: source,\n background: options.background === false ? null : options.background,\n declutter: declutter,\n className: options.className,\n opacity: options.opacity,\n visible: options.visible,\n zIndex: options.zIndex,\n minResolution: options.minResolution,\n maxResolution: options.maxResolution,\n minZoom: options.minZoom,\n maxZoom: options.maxZoom,\n renderOrder: options.renderOrder,\n renderBuffer: options.renderBuffer,\n renderMode: options.renderMode,\n map: options.map,\n updateWhileAnimating: options.updateWhileAnimating,\n updateWhileInteracting: options.updateWhileInteracting,\n preload: options.preload,\n useInterimTilesOnError: options.useInterimTilesOnError,\n properties: options.properties\n });\n if (options.accessToken) {\n this.accessToken = options.accessToken;\n }\n const url = options.styleUrl;\n const promises = [applyStyle(this, url, options.layers || options.source, { accessToken: this.accessToken })];\n if (this.getBackground() === undefined) {\n promises.push(applyBackground(this, options.styleUrl, { accessToken: this.accessToken }));\n }\n Promise.all(promises).then(() => {\n source.setState('ready');\n }).catch(error => {\n this.dispatchEvent(new ErrorEvent(error));\n const source = this.getSource();\n source.setState('error');\n });\n }\n}\n\nexport { MapboxVectorLayer, addMapboxLayer, apply, applyBackground, applyStyle, apply as default, getFeatureState, getLayer, getLayers, getMapboxLayer, getSource, getStyleForLayer, recordStyleLayer, removeMapboxLayer, renderTransparent, setFeatureState, stylefunction, updateMapboxLayer, updateMapboxSource };\n//# sourceMappingURL=index.js.map\n","const __WEBPACK_NAMESPACE_OBJECT__ = undefined;","// import openlayers\nimport VectorTileLayer from \"ol/layer/VectorTile\";\nimport VectorTileSource from \"ol/source/VectorTile\";\nimport TileJSONSource from \"ol/source/TileJSON\";\nimport MVT from \"ol/format/MVT\";\nimport { unByKey as observableUnByKey } from \"ol/Observable\";\n// import olms : module ES6\nimport { applyStyle } from \"ol-mapbox-style\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Config from \"../Utils/Config\";\n\n/**\n* @classdesc\n* Geoportal Layer Mapbox creation\n*\n* @constructor\n* @extends {ol.layer.VectorTile}\n* @alias ol.layer.GeoportalMapBox\n* @type {ol.layer.GeoportalMapBox}\n* @param {Object} options - options for function call.\n* @param {String} options.layer - Layer name (e.g. \"PLAN.IGN\")\n* @param {Object} [options.configuration] - configuration (cf. example) \n* @param {String} [options.style] - Style name (e.g. \"classique\")\n* @param {String} [options.source] - Source name (e.g. \"plan_ign\")\n* @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n* @param {Object} [settings] - other options for ol.layer.VectorTile function (see {@link https://openlayers.org/en/latest/apidoc/module-ol_layer_VectorTile-VectorTileLayer.html ol.layer.VectorTile})\n* @example\n* var LayerMapBox = new ol.layer.GeoportalMapBox({\n* layer : \"PLAN.IGN\",\n* [style : \"classique\",]\n* [source : \"plan_ign\",]\n* [ssl: true]\n* }, {\n* opacity\n* visible\n* extent\n* declutter\n* ...\n* });\n* \n* // Ex. configuration object for TMS Layer\n* \"PLAN.IGN$GEOPORTAIL:GPP:TMS\": {\n* \"hidden\": true,\n* \"queryable\": false,\n* \"serviceParams\": {\n* \"id\": \"GPP:TMS\",\n* \"version\": \"1.0.0\",\n* \"serverUrl\": {\n* \"cartes\": \"https://wxs.ign.fr/cartes/geoportail/tms/1.0.0/\"\n* }\n* },\n* \"name\": \"PLAN.IGN\",\n* \"title\": \"Plan IGN\",\n* \"description\": \"BDUni tuilée\",\n* \"formats\": [\n* {\n* \"current\": true,\n* \"name\": \"application/x-protobuf\"\n* }\n* ],\n* \"styles\": [\n* {\n* \"name\": \"standard\",\n* \"title\": \"Style standard\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/standard.json\"\n* },\n* {\n* \"name\": \"classique\",\n* \"title\": \"Style classique\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/classique.json\"\n* },\n* {\n* \"name\": \"transparent\",\n* \"title\": \"Style transparent\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/transparent.json\"\n* },\n* {\n* \"name\": \"accentue\",\n* \"title\": \"Style accentue\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/accentue.json\"\n* },\n* {\n* \"name\": \"attenue\",\n* \"title\": \"Style attenue\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/attenue.json\"\n* },\n* {\n* \"name\": \"gris\",\n* \"title\": \"Style en noir et blanc\",\n* \"current\": false,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/gris.json\"\n* },\n* {\n* \"name\": \"epure\",\n* \"title\": \"Style epure\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/epure.json\"\n* },\n* {\n* \"name\": \"sans_toponymes\",\n* \"title\": \"Style sans toponymes\",\n* \"current\": false,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/sans_toponymes.json\"\n* }\n* ],\n* \"globalConstraint\": {\n* \"crs\": null,\n* \"bbox\": {\n* \"left\": -724011.531917197,\n* \"right\": 1095801.237496279,\n* \"top\": 6672646.821182753,\n* \"bottom\": 5009377.0856973175\n* },\n* \"minScaleDenominator\": null,\n* \"maxScaleDenominator\": null\n* },\n* \"quicklookUrl\": \"https://wxs.ign.fr/static/pictures/ign_carte2.jpg\",\n* \"layerId\": \"PLAN.IGN$GEOPORTAIL:GPP:TMS\",\n* \"defaultProjection\": \"EPSG:3857\"\n* }\n*\n*/\nvar LayerMapBox = class LayerMapBox extends VectorTileLayer {\n \n /**\n * See {@link ol.layer.GeoportalMapBox}\n * @module LayerMapBox\n * @alias module:~layers/GeoportalMapBox\n * @param {*} options - options\n * @param {*} [settings] - other settings\n * @example\n * import LayerMapBox from \"gpf-ext-ol/layers/LayerMapBox\"\n * ou \n * import { LayerMapBox } from \"gpf-ext-ol\"\n */\n constructor (options, settings) {\n // if (!(this instanceof LayerMapBox)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n \n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n \n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n \n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n \n // si ssl = false on fait du http\n // par défaut, ssl = true, on fait du https\n var protocol = options.ssl === false ? \"http://\" : \"https://\";\n \n // WARNING :\n // on fait le choix de ne pas utiliser la clef apiKey pour checker \n // les droits sur la ressource\n // car le service n'est pas securisé...\n \n // configuration de la ressource\n var layerCfg = options.configuration;\n\n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config chargée\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n\n // id de la ressource\n var layerId = options.layer + \"$GEOPORTAIL:GPP:TMS\";\n \n // récupération des ressources utiles depuis la configuration\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : Layer ID not found into the catalogue !?\");\n }\n }\n\n var styleUrl = null;\n var styleTitle = \"\";\n var styleName = options.style;\n for (var i = 0; i < layerCfg.styles.length; i++) {\n var style = layerCfg.styles[i];\n // si le nom du style est en option, on le recherche...\n // sinon, on recherche le style par defaut !\n if (styleName && style.name === styleName) {\n styleUrl = style.url;\n styleTitle = style.title;\n break;\n } else {\n if (!styleName && style.current) {\n styleName = style.name;\n styleUrl = style.url;\n styleTitle = style.title;\n break;\n }\n }\n }\n \n if (!styleUrl) {\n throw new Error(\"ERROR : Style URL not found !?\");\n }\n \n styleUrl.replace(/(http|https):\\/\\//, protocol);\n \n // création de la source\n var source = new VectorTileSource({\n state : \"loading\", // statut\n format : new MVT()\n });\n \n source._originators = layerCfg.originators;\n source._legends = layerCfg.legends;\n source._metadata = layerCfg.metadata;\n source._description = layerCfg.description;\n source._title = layerCfg.title + \" (\" + styleTitle + \")\";\n source._quicklookUrl = layerCfg.quicklookUrl;\n \n // options definies sur ol.layer.VectorTile\n var layerVectorTileOptions = {\n source : source\n };\n \n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(layerVectorTileOptions, settings);\n \n // on surcharge les originators (non récupérés depuis configuration de la couche)\n if (options.olParams && !layerCfg.originators) {\n source._originators = options.olParams.attributions;\n }\n \n // création d'une ol.layer.VectorTile avec les options récupérées ci-dessus.\n super(layerVectorTileOptions);\n \n this.name = options.layer;\n this.service = \"TMS\";\n this.protocol = protocol;\n this.sourceId = options.source;\n this.styleUrl = styleUrl;\n this.config = layerCfg;\n \n // récuperation du style\n this.setStyleMapBox();\n \n return this;\n }\n \n /**\n * Get Style MapBox\n * @private\n */\n setStyleMapBox () {\n var self = this;\n fetch(this.styleUrl, {\n credentials : \"same-origin\"\n }).then(function (response) {\n if (response.ok) {\n response.json().then(function (style) {\n self.onStyleMapBoxLoad(style);\n });\n }\n }).catch(function (e) {\n self.onStyleMapBoxError(e);\n });\n };\n \n /**\n * Add Style\n * @param {*} style - json style\n */\n onStyleMapBoxLoad (style) {\n // si on a plusieurs sources, on ne peut en prendre qu'une seule...\n if (!this.sourceId) {\n this.sourceId = Object.keys(style.sources)[0];\n }\n \n var styleSource = style.sources[this.sourceId];\n if (!styleSource) {\n this.onStyleMapBoxError({\n message : \"ERROR : Source ID not found !? !\"\n });\n return;\n }\n \n if (styleSource.type !== \"vector\") {\n this.onStyleMapBoxError({\n message : \"ERROR : Source TYPE not permitted !\"\n });\n return;\n }\n \n var source = this.getSource();\n \n // WARNING :\n // la clef renseignée dans les urls n'est pas forcement la bonne\n // car la substitution avec la clef utilisateur n'est pas faite par le service...\n if (styleSource.url) {\n // protocole : http ou https\n styleSource.url.replace(/(http|https):\\/\\//, this.protocol);\n \n var vectorTileJson = new TileJSONSource({\n url : styleSource.url\n });\n var self = this;\n var key = vectorTileJson.on(\"change\", function () {\n if (vectorTileJson.getState() === \"ready\") {\n var doc = vectorTileJson.getTileJSON();\n if (!doc) {\n return;\n }\n self.set(\"mapbox-extensions\", doc);\n var tiles = Array.isArray(doc.tiles) ? doc.tiles : [doc.tiles];\n // protocole : http ou https\n for (var i = 0; i < styleSource.tiles.length; i++) {\n tiles[i].replace(/(http|https):\\/\\//, this.protocol);\n }\n source.setUrls(tiles);\n observableUnByKey(key);\n }\n });\n }\n \n if (styleSource.tiles) {\n // protocole : http ou https\n for (var j = 0; j < styleSource.tiles.length; j++) {\n styleSource.tiles[j].replace(/(http|https):\\/\\//, this.protocol);\n }\n source.setUrls(styleSource.tiles);\n }\n \n applyStyle(this, style, this.sourceId).then(() => {\n source.setState(\"ready\");\n this.set(\"mapbox-styles\", style);\n }).catch((error) => {\n this.onStyleMapBoxError(error);\n });\n };\n \n /**\n * Error\n * @param {*} error - message\n */\n onStyleMapBoxError (error) {\n var source = this.getSource();\n source.setState(\"error\");\n // eslint-disable-next-line no-console\n console.error(error.message);\n };\n\n /**\n * Get configuration\n * @returns {Object} - configuration\n */\n getConfiguration () {\n return this.config;\n }\n\n /**\n * Get legends\n * @returns {Array} - legends\n */\n getLegends () {\n return this.getSource()._legends;\n }\n\n /**\n * Get metadata\n * @returns {Array} - metadata\n */\n getMetadata () {\n return this.getSource()._metadata;\n }\n\n /**\n * Get description\n * @returns {String} - description\n */\n getDescription () {\n return this.getSource()._description;\n }\n\n /**\n * Get title\n * @returns {String} - title\n */\n getTitle () {\n return this.getSource()._title;\n }\n\n /**\n * Get quicklook url\n * @returns {String} - quicklook\n */\n getQuicklookUrl () {\n return this.getSource()._quicklookUrl;\n }\n\n /**\n * Get originators\n * @returns {Array} - originators\n */\n getOriginators () {\n return this.getSource()._originators;\n }\n \n};\n\nexport default LayerMapBox;\n\n// Expose LayerMapBox as ol.layer.GeoportalMapBox. (for a build bundle)\nif (window.ol && window.ol.layer) {\n window.ol.layer.GeoportalMapBox = LayerMapBox;\n}\n","const exceptions = [\"GPoverviewMap\", \"GPfullScreen\"];\n\nfunction getSameSideOpenedPanel (position, openedPanelID) {\n // on ajoute aux exceptions le panel qui vient d'être ouvert\n var exceptionPanel = [...exceptions, openedPanelID];\n var controlPanels = [];\n if (position && position.includes(\"left\")) {\n var bottomLeft = document.getElementById(\"position-container-bottom-left\");\n var topLeft = document.getElementById(\"position-container-top-left\");\n controlPanels = [...bottomLeft.children, ...topLeft.children];\n }\n if (position && position.includes(\"right\")) {\n var bottomRight = document.getElementById(\"position-container-bottom-right\");\n var topRight = document.getElementById(\"position-container-top-right\");\n controlPanels = [...bottomRight.children, ...topRight.children];\n }\n // on ne ferme que les panles déjà ouverts qui ne sont pas exceptions\n return controlPanels.filter(p => {\n var panelID = p.id.match(/(\\w+)-[0-9]+/)[1];\n var isException = exceptionPanel.includes(panelID);\n var isOpened = p.getElementsByTagName(\"button\")[0].getAttribute(\"aria-pressed\");\n if (isOpened === \"true\" && !isException) {\n return p;\n }\n });\n}\n\nvar PanelManager = function (position, openedPanelID) {\n var openedPanel = getSameSideOpenedPanel(position, openedPanelID);\n if (openedPanel.length > 0) {\n openedPanel[0].getElementsByTagName(\"button\")[0].click();\n }\n};\n\nexport default PanelManager;\n","import PanelManager from \"../Utils/PanelManager\";\n// Mixin pour ajouter des méthodes communes à tous les widgets.\n\n// voir fichiers DOM et assign\n// modifier snippets.\nvar Widget = {\n /**\n * This method is called when a widget opens a panel\n * It calls the panelManager to automatically close other panels\n */\n onPanelOpen : function () {\n // On récupère l'id du widget à partir de l'id du DOM de la forme GPwidgetName-1876465465\n PanelManager(this.options.position, this.element.id.match(/(\\w+)-[0-9]+/)[1]);\n }\n};\n\nexport default Widget;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.control.Control;","var checkDsfr = function () {\n // HACK: check si le styl dsfr est chargé via la variable blue-france-sun-113-625\n var style = getComputedStyle(document.documentElement);\n var color = style.getPropertyValue(\"--blue-france-sun-113-625\");\n if (color === \"\") {\n return false;\n }\n return true;\n};\n\nexport default checkDsfr;\n\n","import Control from \"ol/control/Control\";\nimport checkDsfr from \"./Utils/CheckDsfr\";\n\nvar ControlExtended = class ControlExtended extends Control {\n\n constructor (options) {\n options = options || {};\n super({\n element : options.element,\n target : options.target,\n render : options.render\n });\n // Can the control appear in the ControlList control\n if (options && options.listable) {\n this.listable = true;\n } else {\n this.listable = false;\n }\n // Set the control desctiption\n if (options && options.description) {\n this.description = options.description;\n } else {\n this.description = \"\";\n }\n }\n\n setPosition (pos) {\n if (this.getMap()) {\n var instance = new PositionFactory(this);\n instance.set(pos);\n }\n }\n\n updatePosition (pos) {\n if (this.getMap()) {\n var instance = new PositionFactory(this);\n instance.update(pos);\n }\n }\n\n};\n\nexport default ControlExtended;\n\n/**\n * gestion des anchors\n */\nconst ANCHORS = [\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\"\n];\n\n/**\n * Position\n * @private\n */\nclass PositionFactory {\n\n /**\n * constructor\n * @param {*} caller - ...\n */\n constructor (caller) {\n this.caller = caller;\n this.container = null;\n\n this.#createContainer(\"top-left\");\n this.#createContainer(\"top-right\");\n this.#createContainer(\"bottom-left\");\n this.#createContainer(\"bottom-right\");\n\n return this;\n }\n\n /**\n * ...\n * @param {*} name - ...\n * @returns {Boolean} ...\n */\n #existContainer (name) {\n var div = this.container.children[\"position-container-\" + name];\n if (div) {\n return true;\n }\n return false;\n }\n\n /**\n * ...\n * @param {*} name - ...\n * @private\n */\n #createContainer (name) {\n this.container = this.caller.getMap().getOverlayContainerStopEvent();\n\n if (this.#existContainer(name)) {\n return;\n }\n // INFO\n // positionner les classes position-container-[left|right|top|bottom]\n // ex. { position:relative; height:50px; width:100%; }\n var div = document.createElement(\"div\");\n div.id = \"position-container-\" + name;\n div.className = \"position position-container-\" + name ;\n\n this.container.appendChild(div);\n }\n\n /**\n * ...\n * @param {*} pos - ...\n * @param {*} update - ...\n * @todo fonctionnement à tester !\n */\n #setAnchor (pos, update) {\n var self = this;\n const position = (pos) => {\n var element = self.container.children[\"position-container-\" + pos];\n return element.children.length;\n };\n const sizeW = (pos) => {\n var element = self.container.children[\"position-container-\" + pos];\n var width = element.offsetWidth;\n return width;\n };\n const sizeH = (pos) => {\n var element = self.container.children[\"position-container-\" + pos];\n var height = element.offsetHeight;\n if (update) {\n if (pos.includes(\"top\")) {\n height = 0;\n }\n // on recalcule la position en hauteur\n for (let index = 0; index < element.children.length; index++) {\n const id = element.children[index].id;\n if (id === self.caller.element.id) {\n height = (pos.includes(\"bottom\")) ? height - self.caller.element.offsetHeight : height * (-1);\n break;\n }\n height -= element.children[index].offsetHeight;\n }\n }\n return height;\n };\n const clear = (element) => {\n element.style.top = \"unset\";\n element.style.bottom = \"unset\";\n element.style.left = \"unset\";\n element.style.right = \"unset\";\n };\n\n // on supprime le style de positionnement (top, left...)\n // car on souhaite une nouvelle position\n clear(this.caller.element);\n this.caller.element.style.position = \"unset\"; // div.GPwidget\n\n // on recherche les panneaux (panel) :\n // * panel de formulaire\n // * panel de resultats (?)\n var panels = Array.from(this.caller.element.getElementsByClassName(\"GPpanel\"));\n if (panels.length === 0) {\n return;\n }\n var offset = 0;\n panels.forEach((panel) => {\n // INFO\n // on va eviter de modifier les panneaux de resultats\n // car leurs positions sont souvent relative aux panneaux\n // des formulaires\n if (panel.nodeName.toLowerCase() !== \"dialog\") {\n return;\n }\n clear(panel);\n // on modifie le positionnement du menu (dialog ou div : panel)\n // en fonction du bouton\n // ex. bouton : bottom-left, menu : bottom:0px; left:50px\n switch (pos.toLowerCase()) {\n case \"top-left\":\n if (checkDsfr()) {\n panel.style.top = \"0px\";\n } else {\n panel.style.top = position(pos) ? sizeH(pos) + \"px\" : \"0px\";\n }\n panel.style.left = sizeW(pos) + offset + \"px\";\n break;\n case \"bottom-left\":\n if (checkDsfr()) {\n panel.style.top = \"0px\";\n } else {\n panel.style.bottom = position(pos) ? sizeH(pos) + \"px\" : \"0px\";\n }\n panel.style.left = sizeW(pos) + offset + \"px\";\n break;\n case \"top-right\":\n if (checkDsfr()) {\n panel.style.top = \"0px\";\n } else {\n panel.style.top = position(pos) ? sizeH(pos) + \"px\" : \"0px\";\n }\n panel.style.right = sizeW(pos) + offset + \"px\";\n break;\n case \"bottom-right\":\n if (checkDsfr()) {\n panel.style.top = \"0px\";\n } else {\n panel.style.bottom = position(pos) ? sizeH(pos) + \"px\" : \"0px\";\n }\n panel.style.right = sizeW(pos) + offset + \"px\";\n break;\n default:\n break;\n }\n offset += panel.offsetWidth;\n });\n }\n\n /**\n * ...\n * @param {*} pos - ...\n * @public\n */\n set (pos) {\n if (!ANCHORS.includes(pos.toLowerCase())) {\n return;\n }\n // positionnement de l'element\n this.#setAnchor(pos, false);\n\n if (pos.includes(\"bottom\")) {\n this.container.children[\"position-container-\" + pos].prepend(this.caller.element);\n } else {\n this.container.children[\"position-container-\" + pos].appendChild(this.caller.element);\n }\n }\n\n /**\n * ...\n * @param {*} pos - ...\n * @public\n */\n update (pos) {\n if (!ANCHORS.includes(pos.toLowerCase())) {\n return;\n }\n // positionnement de l'element\n // mais, il faut prendre en compte la position !\n this.#setAnchor(pos, true);\n }\n\n};\n","/**\n * @module SelectorID\n * @alias module:~utils/SelectorID\n * @private\n * @description\n * formalisme d'un tag ID :\n * -> NAME(_ORDER)-1460636385836\n *\n * @example\n * Ex.\n * GProutePoints-1460636385836\n * GProutePoint_10-1460636385836\n */\nvar SelectorID = {\n\n /**\n * Construction d'un identifiant statique basé sur le timestamp,\n * et qui s'incremente de +1 à chaque appel\n * @function generate\n */\n generate : (function () {\n var timestamp = Math.floor(Date.now());\n return function () {\n return timestamp++;\n };\n })(),\n\n /**\n * nom du tag\n * @function name\n * @param {String} id - the id\n * @returns {String} index\n */\n name : function (id) {\n var name = null;\n\n var i = id.lastIndexOf(\"-\");\n if (i === -1) {\n name = id;\n } else {\n name = id.substring(0, i);\n }\n\n return name;\n },\n\n /**\n * numero d'identifiant du tag\n *\n * @function index\n * @param {String} id - the id\n * @returns {String} index\n */\n index : function (id) {\n var index = null;\n\n var name = this.name(id);\n // if (name !== id) {\n var i = name.lastIndexOf(\"_\");\n if (i !== -1) {\n index = name.substring(i + 1);\n }\n // }\n\n return index;\n },\n\n /**\n * uuid du tag\n *\n * @function uuid\n * @param {String} id - the id\n * @returns {String} uuid\n */\n uuid : function (id) {\n var uuid = null;\n\n var i = id.lastIndexOf(\"-\");\n if (i !== -1) {\n uuid = parseInt(id.substring(i + 1), 10);\n }\n\n return uuid;\n }\n\n};\n\nexport default SelectorID;\n","/**!\n * Sortable 1.15.3\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.3\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n var rect = {};\n Array.from(container.children).forEach(function (child) {\n var _rect$left, _rect$top, _rect$right, _rect$bottom;\n if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n var childRect = getRect(child);\n rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n });\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = getParentOrHost(parent));\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild,\n expando: expando\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","import Sortable from \"sortablejs\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar LayerSwitcherDOM = {\n\n /**\n * Creation du drag and drop\n *\n * @param {Object} elementDraggable - Element HTML (DOM) Container\n * @param {Object} context - this\n */\n _createDraggableElement : function (elementDraggable, context) {\n // FIXME retirer cette détection user-agent pour solution propre\n // option forcefallback pour réparer sortable sous Chrome 97\n // option forcefallback casse le layerswitcher du portail sous firefox\n let handleClass = \".GPlayerName\";\n if (checkDsfr()) {\n handleClass = \".GPlayerDragNDrop\";\n }\n if (navigator.userAgent.match(/chrome|chromium|crios/i)) {\n Sortable.create(elementDraggable, {\n handle : handleClass,\n draggable : \".draggable-layer\",\n ghostClass : \"GPghostLayer\",\n animation : 200,\n forceFallback : true,\n // Call event function on drag and drop\n onEnd : function (e) {\n // FIXME pas terrrible, mais il faut bien passer ce contexte...\n context._onEndDragAndDropLayerClick(e);\n }\n });\n } else {\n Sortable.create(elementDraggable, {\n handle : handleClass,\n draggable : \".draggable-layer\",\n ghostClass : \"GPghostLayer\",\n animation : 200,\n // Call event function on drag and drop\n onEnd : function (e) {\n // FIXME pas terrrible, mais il faut bien passer ce contexte...\n context._onEndDragAndDropLayerClick(e);\n }\n });\n }\n },\n\n // ################################################################### //\n // ######################### Main container ########################## //\n // ################################################################### //\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Creation du container principal (DOM)\n *\n * @returns {DOMElement} container - layer switcher DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPlayerSwitcher\");\n container.className = \"GPwidget gpf-widget gpf-mobile-fullscreen gpf-widget-button\";\n return container;\n },\n\n /**\n * Creation du container principal d\"affichage des layers (DOM)\n *\n * @returns {DOMElement} input - element for minimizing/maximizing the layer switcher\n */\n _createMainLayersShowElement : function () {\n // \n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPshowLayersList\");\n input.type = \"checkbox\";\n return input;\n },\n\n /**\n * Creation du container principal des layers (DOM)\n *\n * @returns {DOMElement} container - layers list container\n */\n _createMainLayersElement : function () {\n // ajout de la liste des layers dans le container principal\n //
    \n // (...)\n //
    \n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPlayersList\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n return dialog;\n },\n\n _createMainLayersDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPpanelBody gpf-panel__body_ls fr-modal__body\";\n return div;\n },\n\n /**\n * Creation du container du picto du controle (DOM)\n *\n * @returns {DOMElement} label\n */\n _createMainPictoElement : function () {\n var self = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowLayersListPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowLayersListPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-layerswitcher fr-btn fr-btn--tertiary\";\n button.htmlFor = this._addUID(\"GPshowLayersList\");\n button.setAttribute(\"aria-label\", \"Afficher/masquer le gestionnaire de couches\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n document.getElementById(self._addUID(\"GPshowLayersList\")).checked = status;\n if (document.getElementById(self._addUID(\"GPshowLayersList\")).checked) {\n document.getElementById(self._addUID(\"GPlayerInfoPanel\")).classList.remove(\"GPlayerInfoPanelOpened\", \"gpf-visible\");\n document.getElementById(self._addUID(\"GPlayerInfoPanel\")).classList.add(\"GPlayerInfoPanelClosed\", \"gpf-hidden\");\n }\n self.onShowLayerSwitcherClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n if (document.getElementById(self._addUID(\"GPshowLayersList\")).checked) {\n document.getElementById(self._addUID(\"GPlayerInfoPanel\")).classList.remove(\"GPlayerInfoPanelOpened\", \"gpf-visible\");\n document.getElementById(self._addUID(\"GPlayerInfoPanel\")).classList.add(\"GPlayerInfoPanelClosed\", \"gpf-hidden\");\n }\n self.onShowLayerSwitcherClick(e);\n });\n }\n\n return button;\n },\n\n _createMainCounterLayersElement : function () {\n var span = document.createElement(\"span\");\n span.id = this._addUID(\"GPlayerCounter\");\n span.className = \"GPlayerCounter\";\n span.innerHTML = \"0\";\n return span;\n },\n\n /**\n * Creation du container du panneau d\"information (DOM)\n *\n * @returns {DOMElement} container\n */\n _createMainInfoElement : function () {\n // gestion du panneau d\"information dans le container principal\n //
    ...
    \n var divP = document.createElement(\"dialog\");\n divP.id = this._addUID(\"GPlayerInfoPanel\");\n divP.className = \"GPpanel GPlayerInfoPanelClosed gpf-panel fr-modal\";\n return divP;\n },\n\n _createMainInfoDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n // ################################################################### //\n // ######################### Layer container ######################### //\n // ################################################################### //\n\n _createLayersPanelHeaderElement : function () {\n var container = document.createElement(\"div\");\n // FIXME on n'utilise pas le dsfr !\n // container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n container.className = \"GPpanelHeader gpf-panel__header_ls\";\n return container;\n },\n _createLayersPanelIconElement : function () {\n var label = document.createElement(\"label\");\n label.className = \"GPpanelIcon gpf-btn-header gpf-btn-icon-layers\";\n label.title = \"Couches de données\";\n return label;\n },\n _createLayersPanelTitleElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPpanelTitle gpf-panel__title_ls\";\n div.id = this._addUID(\"GPlayersHeaderTitle\");\n div.innerHTML = \"Couches de données\";\n return div;\n },\n _createLayersPanelCloseElement : function () {\n // contexte\n var self = this;\n\n var btnClose = document.createElement(\"button\");\n btnClose.id = this._addUID(\"GPlayersPanelClose\");\n btnClose.className = \"GPpanelClose GPlayersPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n btnClose.title = \"Fermer le panneau\";\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible fr-mx-1w\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n btnClose.appendChild(span);\n\n // Link panel close / visibility checkbox\n if (btnClose.addEventListener) {\n btnClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowLayersListPicto\")).click();\n }, false);\n } else if (btnClose.attachEvent) {\n btnClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowLayersListPicto\")).click();\n });\n }\n\n return btnClose;\n },\n\n /**\n * Creation du container du layer (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n * @param {Object} obj.layer - couche (ol ou leaflet)\n * @param {String} obj.id - identifiant de la couche (pour ol ou leaflet)\n * @param {String} obj.title - nom de la couche à afficher dans le controle\n * @param {String} obj.description - description de la couche à afficher\n * @param {Boolean} obj.visibility - visibilité de la couche dans la carte (true or false)\n * @param {Float} obj.opacity - opacité de la couche\n *\n * @returns {DOMElement} container\n */\n _createContainerLayerElement : function (obj) {\n // exemple :\n //
    \n // \n // \n // \n //
    \n\n // \n // \n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPlayerSwitcher_ID_\" + obj.id);\n container.className = \"GPlayerSwitcher_layer gpf-panel__content fr-modal__content draggable-layer\";\n\n // ajout des outils basiques (visibility / layer name)\n container.appendChild(this._createBasicToolElement(obj));\n\n // ajout bouton des outils avancés\n container.appendChild(this._createAdvancedToolShowElement(obj));\n\n // liste des outils avancés (layer info / opacity slider / opacity value / removal)\n container.appendChild(this._createAdvancedToolElement(obj));\n\n return container;\n },\n\n // ################################################################### //\n // ############################ Layer tool ########################### //\n // ################################################################### //\n\n /**\n * Creation du container des outils basiques du layer (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n *\n * @returns {DOMElement} container\n */\n _createBasicToolElement : function (obj) {\n // exemple :\n //
    \n // \n // \n //
    \n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPbasicTools_ID_\" + obj.id);\n div.className = \"GPlayerBasicTools\";\n\n div.appendChild(this._createBasicToolNameElement(obj));\n div.appendChild(this._createBasicToolVisibilityElement(obj));\n div.appendChild(this._createBasicToolDragNDropElement(obj));\n\n return div;\n },\n\n _createBasicToolDragNDropElement : function (obj) {\n // INFO inactif en mode classique !\n var button = document.createElement(\"div\");\n button.id = this._addUID(\"GPdragndropPicto_ID_\" + obj.id);\n button.className = \"GPelementHidden GPlayerDragNDrop gpf-btn gpf-btn-icon gpf-btn-icon-ls-dragndrop gpf-btn--tertiary fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n button.title = \"Deplacer la couche\";\n button.setAttribute(\"tabindex\", \"0\");\n\n var self = this;\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n self._onStartDragAndDropLayerClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n self._onStartDragAndDropLayerClick(e);\n });\n }\n\n return button;\n },\n\n /**\n * Creation du nom du layer (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n *\n * @returns {DOMElement} container\n */\n _createBasicToolNameElement : function (obj) {\n // exemple :\n // Quartiers prioritaires de la ville\n var label = document.createElement(\"label\");\n label.id = this._addUID(\"GPname_ID_\" + obj.id);\n label.className = \"GPlayerName gpf-label gpf-label-name fr-label\";\n label.title = obj.description || obj.title;\n label.innerHTML = obj.title;\n\n return label;\n },\n\n /**\n * Creation de l'icone de visibilité du layer (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n\n * @returns {DOMElement[]} array containing input and label elements\n */\n _createBasicToolVisibilityElement : function (obj) {\n var visible = (typeof obj.visibility !== \"undefined\") ? obj.visibility : true;\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPvisibilityPicto_ID_\" + obj.id);\n button.className = \"GPlayerVisibility gpf-btn gpf-btn-icon gpf-btn-icon-ls-visibility fr-btn fr-btn--tertiary gpf-btn--tertiary\";\n button.title = \"Afficher/masquer la couche\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", visible);\n button.setAttribute(\"type\",\"button\");\n\n var context = this;\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context._onVisibilityLayerClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context._onVisibilityLayerClick(e);\n });\n }\n\n return button;\n },\n\n /**\n * Creation de l'affichage du menu des outils avancés du layer (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n *\n * @returns {DOMElement[]} array containing input and label elements\n */\n _createAdvancedToolShowElement : function (obj) {\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowAdvancedTools_ID_\" + obj.id);\n\n button.className = \"GPshowAdvancedToolPicto GPshowMoreOptionsImage GPshowMoreOptions GPshowLayerAdvancedTools gpf-btn gpf-btn-icon gpf-btn-icon-ls-collapse fr-btn--sm fr-btn--tertiary gpf-btn--tertiary\";\n button.title = \"Plus d'outils\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\",\"button\");\n\n var self = this;\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n var element = document.getElementById(self._addUID(\"GPadvancedTools_ID_\" + obj.id));\n if (status) {\n element.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n element.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n } else {\n element.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n element.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n }\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n element.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n element.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n });\n }\n\n return button;\n },\n\n /**\n * Creation du container des outils avancés du layer (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n *\n * @returns {DOMElement} container\n */\n _createAdvancedToolElement : function (obj) {\n // exemple :\n //
    \n // \n // \n // \n //
    \n\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPadvancedTools_ID_\" + obj.id);\n container.className = \"GPelementHidden GPlayerAdvancedTools gpf-hidden\";\n\n container.appendChild(this._createAdvancedToolDeleteElement(obj));\n container.appendChild(this._createAdvancedToolInformationElement(obj));\n\n if (obj.type !== \"feature\") {\n var array = this._createAdvancedToolOpacityElement(obj);\n for (var i = 0; i < array.length; i++) {\n container.appendChild(array[i]);\n }\n }\n\n container.appendChild(this._createAdvancedToolExtentElement(obj));\n\n if (checkDsfr()) {\n var btn = document.createElement(\"button\");\n btn.className = \"GPlayerAdvancedToolsContextual fr-btn gpf-btn gpf-btn--tertiary fr-btn--tertiary-no-outline\";\n btn.setAttribute(\"aria-pressed\", false);\n if (btn.addEventListener) {\n btn.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n });\n } else if (btn.attachEvent) {\n btn.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n });\n }\n\n var contextual = document.createElement(\"div\");\n contextual.appendChild(this._createAdvancedToolDeleteElement(obj, true));\n contextual.appendChild(this._createAdvancedToolInformationElement(obj, true));\n contextual.appendChild(this._createAdvancedToolExtentElement(obj, true));\n\n container.appendChild(btn);\n container.appendChild(contextual);\n }\n return container;\n },\n\n /**\n * Creation de l'icone de suppression du layer (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n * @param {Boolean} contextual - est-ce que le bouton est dans le menu contextuel ? Default false\n *\n * @returns {DOMElement} container\n */\n _createAdvancedToolDeleteElement : function (obj, contextual = false) {\n var button = document.createElement(\"button\");\n if (!contextual) {\n button.id = this._addUID(\"GPremove_ID_\" + obj.id);\n } else {\n button.id = this._addUID(\"GPremoveContextual_ID_\" + obj.id);\n }\n button.className = \"GPlayerRemove gpf-btn gpf-btn-icon gpf-btn-icon-ls-remove fr-btn fr-btn--tertiary gpf-btn--tertiary\";\n button.title = \"Supprimer la couche\";\n button.layerId = obj.id;\n if (contextual) {\n button.innerText = \"Supprimer\";\n }\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"type\", \"button\");\n\n var context = this;\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n context._onDropLayerClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n context._onDropLayerClick(e);\n });\n }\n\n return button;\n },\n\n /**\n * Creation de l'icone d'information du layer (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n * @param {Boolean} contextual - est-ce que le bouton est dans le menu contextuel ? Default false\n *\n * @returns {DOMElement} container\n */\n _createAdvancedToolInformationElement : function (obj, contextual = false) {\n // exemple :\n //
    \n\n var btnInfo = document.createElement(\"button\");\n if (!contextual) {\n btnInfo.id = this._addUID(\"GPinfo_ID_\" + obj.id);\n } else {\n btnInfo.id = this._addUID(\"GPinfoContextual_ID_\" + obj.id);\n }\n btnInfo.className = \"GPlayerInfo GPlayerInfoClosed gpf-btn gpf-btn-icon gpf-btn-icon-ls-info fr-btn fr-btn--tertiary gpf-btn--tertiary\";\n // hack pour garder un emplacement vide\n if (!obj.title || !obj.description) {\n btnInfo.style.opacity = \"0\";\n btnInfo.style.visibility = \"hidden\";\n if (contextual) {\n btnInfo.style.display = \"none\";\n }\n }\n btnInfo.title = \"Informations/légende\";\n btnInfo.layerId = obj.id;\n if (contextual) {\n btnInfo.innerText = \"Informations\";\n }\n btnInfo.setAttribute(\"tabindex\", \"0\");\n btnInfo.setAttribute(\"type\", \"button\");\n\n // add event on click\n var context = this;\n if (btnInfo.addEventListener) {\n btnInfo.addEventListener(\n \"click\",\n function (e) {\n context._onOpenLayerInfoClick(e);\n }\n );\n } else if (btnInfo.attachEvent) {\n // internet explorer\n btnInfo.attachEvent(\n \"onclick\",\n function (e) {\n context._onOpenLayerInfoClick(e);\n }\n );\n }\n\n return btnInfo;\n },\n\n /**\n * Creation de l'icone de gestion de l'opacité du layer (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n *\n * @returns {DOMElement[]} array of two containers\n */\n _createAdvancedToolOpacityElement : function (obj) {\n // exemple :\n //
    \n // \n //
    \n //
    \n // 100\n // %\n //
    \n\n var list = [];\n\n // curseur pour changer l'opacité\n var divO = document.createElement(\"div\");\n divO.id = this._addUID(\"GPopacity_ID_\" + obj.id);\n divO.className = \"GPlayerOpacity fr-range fr-range--sm\";\n // For DSFR\n divO.dataset.frJsRange = \"true\";\n divO.title = \"Opacité\";\n\n var opacity = (typeof obj.opacity !== \"undefined\") ? obj.opacity : 1;\n opacity = Math.round(opacity * 100);\n divO.style.setProperty(\"--progress-right\", opacity + \"%\");\n\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPopacityValueDiv_ID_\" + obj.id);\n input.type = \"range\";\n input.value = opacity;\n input.ariaLabel = \"Opacité\";\n\n // add event for opacity change\n var context = this;\n if (input.addEventListener) {\n input.addEventListener(\n \"change\",\n function (e) {\n context._onChangeLayerOpacity(e);\n }\n );\n } else if (input.attachEvent) {\n // internet explorer\n input.attachEvent(\n \"onchange\",\n function (e) {\n context._onChangeLayerOpacity(e);\n }\n );\n }\n\n if (input.addEventListener) {\n input.addEventListener(\n \"input\",\n function (e) {\n context._onChangeLayerOpacity(e);\n }\n );\n } else if (input.attachEvent) {\n // internet explorer\n input.attachEvent(\n \"oninput\",\n function (e) {\n context._onChangeLayerOpacity(e);\n }\n );\n }\n\n divO.appendChild(input);\n\n // Valeur d'opacité\n var divC = document.createElement(\"div\");\n divC.id = this._addUID(\"GPopacityValueDiv_ID_\" + obj.id);\n divC.className = \"GPlayerOpacityValue\";\n\n var span = document.createElement(\"span\");\n span.id = this._addUID(\"GPopacityValue_ID_\" + obj.id);\n span.className = \"gpf-range__output fr-range__output gpf-visible\";\n span.innerHTML = opacity + \"%\";\n\n divC.appendChild(span);\n\n list.push(divO);\n list.push(divC);\n\n return list;\n },\n\n /**\n * Creation de l'icone de zoom sur extent (DOM)\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n * @param {Boolean} contextual - est-ce que le bouton est dans le menu contextuel ? Default false\n *\n * @returns {DOMElement} container\n */\n _createAdvancedToolExtentElement : function (obj, contextual = false) {\n // FIXME inactif en mode classique !\n var button = document.createElement(\"button\");\n if (!contextual) {\n button.id = this._addUID(\"GPextent_ID_\" + obj.id);\n } else {\n button.id = this._addUID(\"GPextentContextual_ID_\" + obj.id);\n }\n button.className = \"GPelementHidden GPlayerExtent gpf-btn gpf-btn-icon gpf-btn-icon-ls-extent fr-btn fr-btn--tertiary gpf-btn--tertiary\";\n button.title = \"Zoomer dans l'étendue\";\n button.layerId = obj.id;\n if (contextual) {\n button.innerText = \"Zoomer\";\n }\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", true);\n button.setAttribute(\"type\", \"button\");\n\n var context = this;\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context._onZoomToExtentClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context._onZoomToExtentClick(e);\n });\n }\n\n return button;\n },\n\n // ################################################################### //\n // ############################ Layer info ########################### //\n // ################################################################### //\n\n /**\n * Creation du container du layer info (DOM)\n *\n * TODO GPlayerInfoPopup : ???\n * TODO GPlayerInfoLink : mettre en forme les échelles !\n *\n * @param {Object} obj - options de la couche à ajouter dans le layer switcher\n *\n * @returns {DOMElement} container\n */\n _createContainerLayerInfoElement : function (obj) {\n var container = document.createElement(\"div\");\n\n var header = document.createElement(\"div\");\n // FIXME on n'utilise pas le dsfr !\n // container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n header.className = \"gpf-panel__header_ls\";\n container.appendChild(header);\n\n var label = document.createElement(\"label\");\n label.className = \"GPlayerInfo gpf-btn-header gpf-btn-icon-ls-info\";\n label.title = \"Informations\";\n header.appendChild(label);\n\n var title = document.createElement(\"div\");\n title.id = this._addUID(\"GPlayerInfoTitle\");\n title.innerHTML = obj.title;\n title.className = \"gpf-panel__title_ls\";\n header.appendChild(title);\n\n var btnClose = document.createElement(\"button\");\n btnClose.id = this._addUID(\"GPlayerInfoClose\");\n btnClose.className = \"GPpanelClose GPlayersPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n btnClose.title = \"Fermer la fenêtre\";\n\n var self = this;\n /** Call event function on close click */\n var onCloseClick = function () {\n document.getElementById(self._addUID(\"GPlayerInfoPanel\")).classList.add(\"GPlayerInfoPanelClosed\", \"gpf-hidden\");\n document.getElementById(self._addUID(\"GPlayerInfoPanel\")).classList.remove(\"GPlayerInfoPanelOpened\", \"gpf-visible\");\n document.getElementById(obj.id).classList.add(\"GPlayerInfoClosed\");\n document.getElementById(obj.id).classList.remove(\"GPlayerInfoOpened\");\n };\n if (btnClose.addEventListener) {\n btnClose.addEventListener(\"click\", onCloseClick);\n } else if (btnClose.attachEvent) {\n // internet explorer\n btnClose.attachEvent(\"onclick\", onCloseClick);\n }\n this.addEventListener(\"layerswitcher:remove\", (e) => {\n if (parseInt(obj.id.split(\"-\")[0].split(\"GPinfo_ID_\")[1]) === e.layer.id) {\n document.getElementById(self._addUID(\"GPlayerInfoPanel\")).classList.add(\"GPlayerInfoPanelClosed\", \"gpf-hidden\");\n document.getElementById(self._addUID(\"GPlayerInfoPanel\")).classList.remove(\"GPlayerInfoPanelOpened\", \"gpf-visible\");\n }\n });\n header.appendChild(btnClose);\n container.appendChild(header);\n\n var content = document.createElement(\"div\");\n content.id = this._addUID(\"GPlayerInfoContent\");\n content.className = \"gpf-panel__content fr-modal__content\";\n container.appendChild(content);\n\n if (obj.quicklookUrl) {\n var quick = document.createElement(\"div\");\n quick.id = this._addUID(\"GPlayerInfoQuicklook\");\n quick.title = \"Afficher un aperçu de la couche\";\n var refquick = document.createElement(\"a\");\n refquick.href = obj.quicklookUrl;\n refquick.appendChild(quick);\n content.appendChild(refquick);\n }\n\n var desc = document.createElement(\"div\");\n desc.id = this._addUID(\"GPlayerInfoDescription\");\n desc.innerHTML = obj.description;\n content.appendChild(desc);\n\n if (obj.metadata) {\n var mtd = document.createElement(\"div\");\n mtd.id = this._addUID(\"GPlayerInfoMetadata\");\n\n var mtdtitle = document.createElement(\"div\");\n mtdtitle.className = \"GPlayerInfoSubtitle\";\n mtdtitle.innerHTML = \"Métadonnées\";\n mtd.appendChild(mtdtitle);\n\n for (var i = 0; i < obj.metadata.length; i++) {\n var urlmtd = obj.metadata[i].url;\n\n var mtdlink = document.createElement(\"div\");\n mtdlink.className = \"GPlayerInfoLink\";\n\n var refmtd = document.createElement(\"a\");\n refmtd.href = urlmtd;\n refmtd.innerHTML = urlmtd;\n mtdlink.appendChild(refmtd);\n mtd.appendChild(mtdlink);\n }\n\n if (obj.metadata.length !== 0) {\n content.appendChild(mtd);\n }\n }\n\n if (obj.legends) {\n var lgd = document.createElement(\"div\");\n lgd.id = this._addUID(\"GPlayerInfoLegend\");\n\n var lgdtitle = document.createElement(\"div\");\n lgdtitle.className = \"GPlayerInfoSubtitle\";\n lgdtitle.innerHTML = \"Légende\";\n lgd.appendChild(lgdtitle);\n\n var legends = {};\n var maxScale = obj.maxScaleDenominator || 560000000;\n\n // on crée un tableau temporaire pour ordonner les légendes selon le dénominateur d'échelle\n for (var k = 0; k < obj.legends.length; k++) {\n var minScale = obj.legends[k].minScaleDenominator;\n if (minScale) {\n var s = minScale.toString();\n minScale = Math.round(parseInt(s.substring(0, 3), 10) / 10) * Math.pow(10, s.length - 2);\n } else {\n minScale = 270;\n }\n legends[minScale] = obj.legends[k];\n }\n\n for (var scale in legends) {\n if (legends.hasOwnProperty(scale)) {\n var urllgd = legends[scale].url;\n // on n'affiche pas les légendes pointant vers \"nolegend.jpg\"\n if (typeof urllgd === \"string\" && urllgd.toLowerCase().indexOf(\"nolegend.jpg\") === -1) {\n // TODO GPlayerInfoPopup\n var lgdlink = document.createElement(\"div\");\n lgdlink.className = \"GPlayerInfoLink\";\n\n maxScale = legends[scale].maxScaleDenominator || maxScale;\n\n var reflgd = document.createElement(\"a\");\n reflgd.className = \"fr-link\";\n reflgd.href = urllgd;\n reflgd.target = \"_blank\";\n reflgd.innerHTML = \"Du 1/\" + scale + \" au 1/\" + maxScale;\n lgdlink.appendChild(reflgd);\n lgd.appendChild(lgdlink);\n } else {\n delete legends[scale];\n }\n }\n }\n\n if (Object.keys(legends).length !== 0) {\n content.appendChild(lgd);\n }\n }\n\n return container;\n }\n};\n\nexport default LayerSwitcherDOM;\n","// import CSS\nimport \"../../CSS/Controls/LayerSwitcher/GPFlayerSwitcher.css\";\n// import \"../../CSS/Controls/LayerSwitcher/GPFlayerSwitcherStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\nimport { intersects as olIntersects } from \"ol/extent\";\nimport {\n transformExtent as olTransformExtentProj\n} from \"ol/proj\";\n// import local\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Config from \"../../Utils/Config\";\n// DOM\nimport LayerSwitcherDOM from \"./LayerSwitcherDOM\";\n\nvar logger = Logger.getLogger(\"layerswitcher\");\n\n/**\n * @classdesc\n * OpenLayers Control to manage map layers : their order, visibility and opacity, and display their informations (title, description, legends, metadata...)\n *\n * @constructor\n * @extends {ol.control.Control}\n * @alias ol.control.LayerSwitcher\n * @type {ol.control.LayerSwitcher}\n * @param {Object} options - control options\n * @param {Array} [options.layers] - list of layers to be configured. Each array element is an object, with following properties :\n * @param {ol.layer.Layer} [options.layers.layer] - ol.layer.Layer layer to be configured (that has been added to map)\n * @param {Object} [options.layers.config] - custom configuration object for layer information (title, description, legends, metadata, quicklook url), with following properties :\n * @param {String} [options.layers.config.title] - layer alias, to be displayed in widget layer list. E.g. : \"Cartes IGN\"\n * @param {String} [options.layers.config.description] - layer description, to be displayed on title hover, or in layer information panel.\n * @param {String} [options.layers.config.quicklookUrl] - link to a quick look image for this layer.\n * @param {Array} [options.layers.config.legends] - array of layer legends. Each array element is an object, with following properties :\n * - url (String, mandatory) : link to a legend\n * - minScaleDenominator (Number, optional) : min scale denominator for legend validity.\n * @param {Array} [options.layers.config.metadata] - array of layer metadata. Each array element is an object, with property url (String, mandatory) : link to a metadata\n * @param {Object} [options.options] - ol.control.Control options (see {@link http://openlayers.org/en/latest/apidoc/ol.control.Control.html ol.control.Control})\n * @param {Number} [options.options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {Boolean} [options.options.collapsed = true] - Specify if widget has to be collapsed (true) or not (false) on map loading. Default is true.\n * @param {Boolean} [options.options.panel = false] - Specify if widget has to have a panel header. Default is false.\n * @param {Boolean} [options.options.counter = false] - Specify if widget has to have a counter. Default is false.\n * @fires layerswitcher:add\n * @fires layerswitcher:remove\n * @fires layerswitcher:extent\n * @fires layerswitcher:change:opacity\n * @fires layerswitcher:change:visibility\n * @fires layerswitcher:change:position\n * @example\n * map.addControl(new ol.control.LayerSwitcher(\n * [\n * {\n * layer : wms1,\n * config : {\n * title : \"test layer name 1\",\n * description : \"test layer desc 1\",\n * }\n * }\n * ],\n * {\n * collapsed : true,\n * panel : false,\n * counter : false,\n * position : \"top-left\"\n * }\n * ));\n *\n * LayerSwitcher.on(\"layerswitcher:add\", function (e) {\n * console.warn(\"layer\", e.layer);\n * });\n * LayerSwitcher.on(\"layerswitcher:remove\", function (e) {\n * console.warn(\"layer\", e.layer);\n * });\n * LayerSwitcher.on(\"layerswitcher:change:opacity\", function (e) {\n * console.warn(\"layer\", e.layer, e.opacity);\n * });\n * LayerSwitcher.on(\"layerswitcher:change:visibility\", function (e) {\n * console.warn(\"layer\", e.layer, e.visibility);\n * });\n * LayerSwitcher.on(\"layerswitcher:change:position\", function (e) {\n * console.warn(\"layer\", e.layer, e.position);\n * });\n */\nvar LayerSwitcher = class LayerSwitcher extends Control {\n\n /**\n * See {@link ol.control.LayerSwitcher}\n * @module LayerSwitcher\n * @alias module:~controls/LayerSwitcher\n * @param {*} options - options\n * @example\n * import LayerSwitcher from \"gpf-ext-ol/controls/LayerSwitcher\"\n * ou\n * import { LayerSwitcher } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n var _options = options.options || {};\n var _layers = options.layers || [];\n\n // call ol.control.Control constructor\n super(_options);\n\n if (!(this instanceof LayerSwitcher)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n if (!Array.isArray(_layers)) {\n throw new Error(\"ERROR WRONG_TYPE : layers should be an array\");\n }\n\n if (typeof _options !== \"object\") {\n throw new Error(\"ERROR WRONG_TYPE : options should be an object\");\n }\n\n /**\n * Nom de la classe\n * @private\n */\n this.CLASSNAME = \"LayerSwitcher\";\n\n this._initialize(_options, _layers);\n\n this.container = this._initContainer(_options);\n\n // ajout du container\n (this.element) ? this.element.appendChild(this.container) : this.element = this.container;\n\n return this;\n }\n\n // ################################################################### //\n // ############## public methods (getters, setters) ################## //\n // ################################################################### //\n\n /**\n * Overload setMap function, that enables to catch map events, such as movend events.\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n // info : cette méthode est appelée (entre autres?) après un map.addControl() ou map.removeControl()\n\n if (map) { // dans le cas de l'ajout du contrôle à la map\n // on ajoute les couches\n this._addMapLayers(map);\n\n // mode \"collapsed\"\n if (!this.collapsed) {\n this._showLayerSwitcherButton.setAttribute(\"aria-pressed\", true);\n }\n\n // At every map movement, layer switcher may be updated,\n // according to layers on map, and their range.\n this._listeners.onMoveListener = map.on(\n \"moveend\",\n () => this._onMapMoveEnd(map)\n );\n\n // add event listeners when a new layer is added to map, to add it in LayerSwitcher control (and DOM)\n this._listeners.onAddListener = map.getLayers().on(\n \"add\",\n (evt) => {\n var layer = evt.element;\n var id;\n // on attribue un nouvel identifiant à cette couche,\n // sauf si c'est une couche qui a déjà été ajoutée dans le LayerSwitcher au préalable (si gpLayerId existe)\n if (!layer.hasOwnProperty(\"gpLayerId\")) {\n id = this._layerId;\n layer.gpLayerId = id;\n this._layerId++;\n } else {\n id = layer.gpLayerId;\n }\n if (!this._layers[id]) {\n this.addLayer(layer);\n }\n }\n );\n\n // add event listeners when a layer is removed from map, to remove it from LayerSwitcher control (and DOM)\n this._listeners.onRemoveListener = map.getLayers().on(\n \"remove\",\n (evt) => {\n var layer = evt.element;\n var id = layer.gpLayerId;\n if (this._layers[id]) {\n this.removeLayer(layer);\n }\n }\n );\n } else {\n // we are in a setMap(null) case\n // we forget the listeners linked to the layerSwitcher\n olObservableUnByKey(this._listeners.onMoveListener);\n olObservableUnByKey(this._listeners.onAddListener);\n olObservableUnByKey(this._listeners.onRemoveListener);\n\n // we put all the layers at Zindex = 0, without changing the visual order\n // in order that the next added layers are not hidden by layers with Zindex > 0\n for (var i = this._layersOrder.length - 1; i >= 0; i--) {\n // this._layersOrder[i].layer.setZIndex(0);\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Add a new layer to control (when added to map) or add new layer configuration\n *\n * @param {ol.layer.Layer} layer - layer to add to layer switcher\n * @param {Object} [config] - additional options for layer configuration\n * @param {Object} [config.title] - layer title (default is layer identifier)\n * @param {Object} [config.description] - layer description (default is null)\n * @param {Object} [config.legends] - layer legends (default is an empty array)\n * @param {Object} [config.metadata] - layer metadata (default is an empty array)\n * @param {Object} [config.quicklookUrl] - layer quicklookUrl (default is null)\n * @fires layerswitcher:add\n * @example\n * layerSwitcher.addLayer(\n * gpParcels,\n * {\n * title : \"Parcelles cadastrales\",\n * description : \"description de la couche\",\n * quicklookUrl : \"http://quicklookUrl.fr\"\n * }\n * )\n */\n addLayer (layer, config) {\n var map = this.getMap();\n config = config || {};\n\n if (!layer) {\n logger.log(\"[ERROR] LayerSwitcher:addLayer - missing layer parameter\");\n return;\n }\n\n var id = layer.gpLayerId;\n if (typeof id === \"undefined\") {\n logger.trace(\"[WARN] LayerSwitcher:addLayer - configuration cannot be set for this layer (layer id not found)\", layer);\n return;\n }\n\n // make sure layer is in map layers\n var isLayerInMap = false;\n map.getLayers().forEach(\n (lyr) => {\n if (lyr.gpLayerId === id) {\n isLayerInMap = true;\n }\n }\n );\n if (!isLayerInMap) {\n logger.log(\"[ERROR] LayerSwitcher:addLayer - configuration cannot be set for \", layer, \" layer (layer is not in map.getLayers() )\");\n return;\n }\n\n // if layer is not already in layers list, add it to control (layers list and container div)\n if (!this._layers[id]) {\n // 1. add layer to layers list\n var layerInfos = this.getLayerInfo(layer) || {};\n var opacity = layer.getOpacity();\n var visibility = layer.getVisible();\n var isInRange = this.isInRange(layer, map);\n var layerOptions = {\n layer : layer,\n id : id,\n name : layer.name, // only geoportal layers\n service : layer.service, // only geoportal layers\n opacity : opacity != null ? opacity : 1,\n visibility : visibility != null ? visibility : true,\n inRange : isInRange != null ? isInRange : true,\n title : config.title != null ? config.title : (layerInfos._title || id),\n description : config.description || layerInfos._description || null,\n legends : config.legends || layerInfos._legends || [],\n metadata : config.metadata || layerInfos._metadata || [],\n quicklookUrl : config.quicklookUrl || layerInfos._quicklookUrl || null\n };\n this._layers[id] = layerOptions;\n\n // 2. create layer div (to be added to control main container)\n // Création de la div correspondante à cette couche\n var layerDiv = this._createLayerDiv(layerOptions);\n // on stocke la div dans les options de la couche, pour une éventuelle réorganisation (setZIndex par ex)\n this._layers[id].div = layerDiv;\n\n // 3. réorganisation des couches si un zIndex est spécifié\n // FIXME :\n // _forceNullzIndex !?\n // getZIndex() retourne undefined au lieu de 0 !?\n if ((layer.getZIndex && layer.getZIndex() !== 0 && typeof layer.getZIndex() !== \"undefined\") || layer._forceNullzIndex) {\n // réorganisation des couches si un zIndex est spécifié\n this._updateLayersOrder();\n } else {\n // sinon on ajoute la couche au dessus des autres\n this._layersOrder.unshift(layerOptions);\n this._lastZIndex++;\n layer.setZIndex(this._lastZIndex);\n this._layerListContainer.insertBefore(layerDiv, this._layerListContainer.firstChild);\n // this._layerListContainer.insertBefore(layerDiv,\n // (this.options.panel) ?\n // this._layerListContainer.childNodes[1] : this._layerListContainer.firstChild);\n }\n\n // 3. Add listeners for opacity and visibility changes\n this._listeners.updateLayerOpacity = layer.on(\n \"change:opacity\",\n (e) => this._updateLayerOpacity(e)\n );\n this._listeners.updateLayerVisibility = layer.on(\n \"change:visible\",\n (e) => this._updateLayerVisibility(e)\n );\n\n if (this._layers[id].onZIndexChangeEvent == null) {\n this._layers[id].onZIndexChangeEvent = layer.on(\n \"change:zIndex\",\n () => this._updateLayersOrder()\n );\n }\n\n // user may also add a new configuration for an already added layer\n } else {\n // add new configuration parameters to layer informations\n for (var prop in config) {\n if (config.hasOwnProperty(prop)) {\n this._layers[id][prop] = config[prop];\n }\n }\n // set new title in layer div\n if (config.title) {\n var nameDiv = document.getElementById(this._addUID(\"GPname_ID_\" + id));\n if (nameDiv) {\n nameDiv.innerHTML = config.title;\n nameDiv.title = config.description || config.title;\n }\n }\n // add layer info picto if necessary\n var infodiv = document.getElementById(this._addUID(\"GPinfo_ID_\" + id));\n if (!document.getElementById(this._addUID(\"GPinfo_ID_\" + id)) && config.description) {\n var advancedTools = document.getElementById(this._addUID(\"GPadvancedTools_ID_\" + id));\n if (advancedTools) {\n advancedTools.appendChild(\n this._createAdvancedToolInformationElement({\n id : id\n })\n );\n }\n }\n // close layer info element if open, to update information.\n if (infodiv && infodiv.className === \"GPlayerInfoOpened\") {\n document.getElementById(this._addUID(\"GPlayerInfoPanel\")).classList.add(\"GPlayerInfoPanelClosed\", \"gpf-hidden\");\n // infodiv.className = \"GPlayerInfo\";\n }\n }\n // on met à jour le compteur\n this._updateLayerCounter();\n /**\n * event triggered when a layer is added\n *\n * @event layerswitcher:add\n * @property {Object} type - event\n * @property {Object} layer - layer\n * @property {Object} target - instance LayerSwitcher\n * @example\n * LayerSwitcher.on(\"layerswitcher:add\", function (e) {\n * console.log(e.layer);\n * })\n */\n this.dispatchEvent({\n type : \"layerswitcher:add\",\n layer : this._layers[id]\n });\n };\n\n /**\n * Remove a layer from control\n *\n * @param {ol.layer.Layer} layer - layer.\n * @fires layerswitcher:remove\n * @deprecated on the future version ...\n */\n removeLayer (layer) {\n if (!layer) {\n return;\n }\n\n olObservableUnByKey(this._listeners.updateLayerOpacity);\n olObservableUnByKey(this._listeners.updateLayerVisibility);\n // olObservableUnByKey(this._listeners.updateLayersOrder);\n\n logger.trace(layer);\n\n var layerID = layer.gpLayerId;\n // var layerList = document.getElementById(this._addUID(\"GPlayersList\")).firstChild;\n // close layer info element if open.\n var infodiv = document.getElementById(this._addUID(\"GPinfo_ID_\" + layerID));\n if (infodiv && infodiv.className === \"GPlayerInfoOpened\") {\n document.getElementById(this._addUID(\"GPlayerInfoPanel\")).classList.add(\"GPlayerInfoPanelClosed\", \"gpf-hidden\");\n // infodiv.className = \"GPlayerInfo\";\n }\n // remove layer div\n var layerDiv = document.getElementById(this._addUID(\"GPlayerSwitcher_ID_\" + layerID));\n if (layerDiv) {\n this._layerListContainer.removeChild(layerDiv);\n }\n\n var layerIndex = Math.abs(layer.getZIndex() - this._lastZIndex);\n // on retire la couche de la liste ordonnée des layers\n this._layersOrder.splice(layerIndex, 1);\n this._lastZIndex--;\n // on met à jour les zindex des couches restantes\n var layerOrderTemp = this._layersOrder;\n for (var i = 0; i < layerOrderTemp.length; i++) {\n layerOrderTemp[i].layer.setZIndex(this._lastZIndex - i);\n }\n\n /**\n * event triggered when a layer is removed\n *\n * @event layerswitcher:add\n * @property {Object} type - event\n * @property {Object} layer - layer\n * @property {Object} target - instance LayerSwitcher\n * @example\n * LayerSwitcher.on(\"layerswitcher:remove\", function (e) {\n * console.log(e.layer);\n * })\n */\n this.dispatchEvent({\n type : \"layerswitcher:remove\",\n layer : this._layers[layerID]\n });\n\n // on retire la couche de la liste des layers\n delete this._layers[layerID];\n\n // on met à jour le compteur\n this._updateLayerCounter();\n }\n\n /**\n * Collapse or display control main container\n *\n * @param {Boolean} collapsed - True to collapse control, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.log(\"[ERROR] LayerSwitcher:setCollapsed - missing collapsed parameter\");\n return;\n }\n var isCollapsed = !document.getElementById(this._addUID(\"GPshowLayersList\")).checked;\n if ((collapsed && isCollapsed) || (!collapsed && !isCollapsed)) {\n return;\n }\n // on simule l'ouverture du panneau après un click\n if (!isCollapsed) {\n // var layers = document.getElementsByClassName(\"GPlayerInfoOpened\");\n // for (var i = 0; i < layers.length; i++) {\n // layers[i].className = \"GPlayerInfo\";\n // }\n document.getElementById(this._addUID(\"GPlayerInfoPanel\")).classList.add(\"GPlayerInfoPanelClosed\", \"gpf-hidden\");\n }\n document.getElementById(this._addUID(\"GPshowLayersList\")).checked = !collapsed;\n }\n\n /**\n * Returns true if widget is collapsed (minimize), false otherwise\n * @returns {Boolean} is collapsed\n */\n getCollapsed () {\n return this.collapsed;\n }\n\n /**\n * Display or hide removeLayerPicto from layerSwitcher for this layer\n *\n * @param {ol.layer.Layer} layer - ol.layer to be configured\n * @param {Boolean} removable - specify if layer can be remove from layerSwitcher (true) or not (false). Default is true\n */\n setRemovable (layer, removable) {\n if (!layer) {\n return;\n }\n var layerID = layer.gpLayerId;\n if (layerID == null) { // on teste si layerID est null ou undefined\n logger.log(\"[LayerSwitcher:setRemovable] layer should be added to map before calling setRemovable method\");\n return;\n }\n var removalDiv = document.getElementById(this._addUID(\"GPremove_ID_\" + layerID));\n if (removalDiv) {\n if (removable === false) {\n removalDiv.style.display = \"none\";\n } else if (removable === true) {\n removalDiv.style.display = \"block\";\n } else {\n\n }\n }\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize LayerSwitcher control (called by constructor)\n *\n * @param {Object} options - ol.control.Control options (see {@link http://openlayers.org/en/latest/apidoc/ol.control.Control.html ol.control.Control})\n * @param {Array} layers - list of layers to be configured. Each array element is an object, with following properties :\n * @private\n */\n _initialize (options, layers) {\n // identifiant du contrôle : utile pour suffixer les identifiants CSS (pour gérer le cas où il y en a plusieurs dans la même page)\n this._uid = options.id || SelectorID.generate();\n\n this.options = options;\n this.options.layers = layers;\n\n // {Object} control layers list. Each key is a layer id, and its value is an object of layers options (layer, id, opacity, visibility, title, description...)\n this._layers = {};\n // [Array] array of ordered control layers\n this._layersOrder = [];\n // [Object] associative array of layers ordered by zindex (keys are zindex values, and corresponding values are arrays of layers at this zindex)\n this._layersIndex = {};\n // {Number} layers max z index, to order layers using their z index\n this._lastZIndex = 0;\n // {Number} layers max id, incremented when a new layer is added\n this._layerId = 0;\n /** {Boolean} true if widget is collapsed, false otherwise */\n this.collapsed = (options.collapsed !== undefined) ? options.collapsed : true;\n // div qui contiendra les div des listes.\n this._layerListContainer = null;\n // [Object] listeners added to the layerSwitcher saved here in order to delete them if we remove the control from the map)\n this._listeners = {};\n\n // add options layers to layerlist.\n // (seulement les couches configurées dans les options du layerSwitcher par l'utilisateur),\n // les autres couches de la carte seront ajoutées dans la méthode setMap\n for (var i = 0; i < layers.length; i++) {\n // recup la layer, son id,\n var layer = layers[i].layer;\n if (layer) {\n var id;\n // si elles ont déjà un identifiant (gpLayerId), on le récupère, sinon on en crée un nouveau, en incrémentant this_layerId.\n if (!layer.hasOwnProperty(\"gpLayerId\")) {\n id = this._layerId;\n layer.gpLayerId = id;\n this._layerId++;\n } else {\n id = layer.gpLayerId;\n }\n\n // et les infos de la conf si elles existent (title, description, legends, quicklook, metadata)\n var conf = layers[i].config || {};\n var opacity = layer.getOpacity();\n var visibility = layer.getVisible();\n var layerOptions = {\n layer : layer, // la couche ol.layer concernée\n id : id,\n name : layer.name, // only geoportal layers\n service : layer.service, // only geoportal layers\n opacity : opacity != null ? opacity : 1,\n visibility : visibility != null ? visibility : true,\n title : conf.title != null ? conf.title : conf.id ? conf.id : id,\n description : conf.description || null,\n legends : conf.legends || [],\n metadata : conf.metadata || [],\n quicklookUrl : conf.quicklookUrl || null\n };\n this._layers[id] = layerOptions;\n }\n }\n }\n\n /**\n * Create control main container (called by constructor)\n *\n * @returns {DOMElement} container - control container\n * @private\n */\n _initContainer () {\n // creation du container principal\n var container = this._createMainContainerElement();\n\n // ajout dans le container principal d'affichage des layers\n var input = this._createMainLayersShowElement();\n container.appendChild(input);\n\n // gestion du mode \"collapsed\"\n if (!this.collapsed) {\n input.checked = \"checked\";\n this.collapsed = false;\n } else {\n this.collapsed = true;\n }\n\n // on ajoute un écouteur d'évènement sur le bouton (checkbox) de dépliement/repliement des couches,\n // pour modifier la propriété this.collapsed quand on clique dessus\n var context = this;\n // event listener\n var changeCollapsed = function (e) {\n this.collapsed = !e.target.checked;\n // on génère nous même l'evenement OpenLayers de changement de pté\n // (utiliser layerSwitcher.on(\"change:collapsed\", function ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n };\n input.addEventListener(\n \"click\",\n function (e) {\n changeCollapsed.call(context, e);\n }\n );\n\n // ajout dans le container principal du picto du controle\n var picto = this._showLayerSwitcherButton = this._createMainPictoElement();\n container.appendChild(picto);\n\n // ajout du compteur de couches\n container.classList.add(\"GplayerSwitcher-counterRemoved\");\n if (this.options.counter) {\n container.classList.remove(\"GplayerSwitcher-counterRemoved\");\n container.classList.add(\"GplayerSwitcher-counterAdded\");\n var counter = this._layerSwitcherCounter = this._createMainCounterLayersElement();\n picto.appendChild(counter);\n }\n\n // ajout dans le container principal de la liste des layers\n var divL = this._createMainLayersElement();\n container.appendChild(divL);\n\n // header ?\n if (this.options.panel) {\n // header\n var panelHeader = this._createLayersPanelHeaderElement();\n divL.appendChild(panelHeader);\n // icon\n var panelIcon = this._createLayersPanelIconElement();\n panelHeader.appendChild(panelIcon);\n // title\n var panelTitle = this._createLayersPanelTitleElement();\n panelHeader.appendChild(panelTitle);\n // close picto\n var panelClose = this._createLayersPanelCloseElement();\n panelHeader.appendChild(panelClose);\n }\n\n var div = this._layerListContainer = this._createMainLayersDivElement();\n divL.appendChild(div);\n\n // creation du mode draggable\n this._createDraggableElement(div, this);\n\n // ajout dans le container principal du panneau d'information\n var divI = this._createMainInfoElement();\n var divD = this._createMainInfoDivElement();\n divI.appendChild(divD);\n container.appendChild(divI);\n\n return container;\n }\n\n /**\n * Add all map layers to control main container\n *\n * @param {Object} map - ol.Map object, to which control is added\n * @private\n */\n _addMapLayers (map) {\n this._layersIndex = {};\n\n // on parcourt toutes les couches de la carte, pour les ajouter à la liste du controle si ce n'est pas déjà le cas.\n // idée : le layerSwitcher doit représenter l'ensemble des couches de la carte.\n map.getLayers().forEach((layer) => {\n // ajout des couches de la carte à la liste\n var id = null;\n // si elles ont déjà un identifiant (gpLayerId), on le récupère, sinon on en crée un nouveau, en incrémentant this_layerId.\n if (!layer.hasOwnProperty(\"gpLayerId\")) {\n id = this._layerId;\n layer.gpLayerId = id;\n this._layerId++;\n } else {\n id = layer.gpLayerId;\n }\n\n var layerInfos = this.getLayerInfo(layer) || {};\n if (!this._layers[id]) {\n // si la couche n'est pas encore dans la liste des layers (this._layers), on l'ajoute\n var opacity = layer.getOpacity();\n var visibility = layer.getVisible();\n var isInRange = this.isInRange(layer, map);\n var layerOptions = {\n layer : layer,\n id : id,\n name : layer.name, // only geoportal layers\n service : layer.service, // only geoportal layers\n opacity : opacity != null ? opacity : 1,\n visibility : visibility != null ? visibility : true,\n inRange : isInRange != null ? isInRange : true,\n title : layerInfos._title || id,\n description : layerInfos._description || null,\n legends : layerInfos._legends || [],\n metadata : layerInfos._metadata || [],\n quicklookUrl : layerInfos._quicklookUrl || null\n };\n this._layers[id] = layerOptions;\n } else {\n // si elle existe déjà, on met à jour ses informations (visibility, opacity, inRange)\n this._layers[id].opacity = layer.getOpacity();\n this._layers[id].visibility = layer.getVisible();\n this._layers[id].inRange = this.isInRange(layer, map);\n }\n // on met à jour le compteur\n this._updateLayerCounter();\n\n // Ajout de listeners sur les changements d'opacité, visibilité\n this._listeners.updateLayerOpacity = layer.on(\n \"change:opacity\",\n (e) => this._updateLayerOpacity(e)\n );\n this._listeners._updateLayerVisibility = layer.on(\n \"change:visible\",\n (e) => this._updateLayerVisibility(e)\n );\n\n // récupération des zindex des couches s'ils existent, pour les ordonner.\n if (layer.getZIndex !== undefined) {\n var layerIndex = layer.getZIndex() || 0; // FIXME le zIndex peut être undefined !? donc par defaut à 0 !\n if (!this._layersIndex[layerIndex] || !Array.isArray(this._layersIndex[layerIndex])) {\n this._layersIndex[layerIndex] = [];\n }\n this._layersIndex[layerIndex].push(this._layers[id]);\n };\n });\n\n // on récupère l'ordre d'affichage des couches entre elles dans la carte, à partir de zindex.\n for (var zindex in this._layersIndex) {\n if (this._layersIndex.hasOwnProperty(zindex)) {\n var layers = this._layersIndex[zindex];\n for (var l = 0; l < layers.length; l++) { // à ce stade layers[l] est une couche de this._layers.\n // on conserve l'ordre des couches : la première est celle qui se situe tout en haut, et la dernière est le \"fond de carte\"\n this._layersOrder.unshift(layers[l]);\n // et on réordonne les couches avec des zindex, uniques.\n this._lastZIndex++;\n layers[l].layer.setZIndex(this._lastZIndex);\n if (this._layers[layers[l].layer.gpLayerId].onZIndexChangeEvent == null) {\n this._layers[layers[l].layer.gpLayerId].onZIndexChangeEvent = layers[l].layer.on(\n \"change:zIndex\",\n () => this._updateLayersOrder()\n );\n }\n }\n }\n }\n\n // on ajoute les div correspondantes aux différentes couches (dans l'ordre inverse d'affichage) dans le controle.\n for (var j = 0; j < this._layersOrder.length; j++) {\n var layerOptions = this._layersOrder[j];\n var layerDiv = this._createLayerDiv(layerOptions);\n if (!this._layerListContainer.querySelector(\"#\" + layerDiv.id)) {\n this._layerListContainer.appendChild(layerDiv);\n }\n // on stocke la div dans les options de la couche, pour une éventuelle réorganisation (setZIndex par ex)\n this._layers[layerOptions.id].div = layerDiv;\n }\n }\n\n /**\n * create layer div (to append to control DOM element).\n *\n * @param {Object} layerOptions - layer options (id, title, description, legends, metadata, quicklookUrl ...)\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _createLayerDiv (layerOptions) {\n var isLegends = layerOptions.legends && layerOptions.legends.length !== 0;\n var isMetadata = layerOptions.metadata && layerOptions.metadata.length !== 0;\n var isQuicklookUrl = layerOptions.quicklookUrl;\n // on n'affiche les informations que si elles sont renseignées (pour ne pas avoir un panneau vide)\n if (isLegends || isMetadata || isQuicklookUrl) {\n layerOptions.displayInformationElement = true;\n }\n\n // ajout d'une div pour cette layer dans le control\n var layerDiv = this._createContainerLayerElement(layerOptions);\n\n if (!layerOptions.inRange) {\n layerDiv.classList.add(\"outOfRange\");\n }\n\n return layerDiv;\n }\n\n // ################################################################### //\n // ######################### DOM events ############################## //\n // ################################################################### //\n\n /**\n * ...\n *\n * @method onShowLayerSwitcherClick\n * @param { event } e évènement associé au clic\n * @private\n */\n onShowLayerSwitcherClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var opened = this._showLayerSwitcherButton.ariaPressed;\n this.collapsed = !(opened === \"true\");// on génère nous même l'evenement OpenLayers de changement de propriété\n // (utiliser mousePosition.on(\"change:collapsed\", function(e) ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n }\n\n /**\n * update layer counter\n */\n _updateLayerCounter () {\n if (this._layerSwitcherCounter) {\n this._layerSwitcherCounter.innerHTML = Object.keys(this._layers).length;\n }\n }\n\n /**\n * Change layer opacity on layer opacity picto click\n *\n * @param {Object} e - event\n * @private\n */\n _onChangeLayerOpacity (e) {\n e.target.parentNode.style.setProperty(\"--progress-right\", e.target.value + \"%\");\n var divId = e.target.id; // ex GPvisibilityPicto_ID_26\n var layerID = SelectorID.index(divId); // ex. 26\n var layer = this._layers[layerID].layer;\n\n var opacityValue = e.target.value;\n var opacityId = document.getElementById(this._addUID(\"GPopacityValue_ID_\" + layerID));\n opacityId.innerHTML = opacityValue + \"%\";\n\n layer.setOpacity(opacityValue / 100);\n }\n\n /**\n * Update picto opacity value on layer opacity change\n *\n * @param {Object} e - event\n * @fires layerswitcher:change:opacity\n * @private\n */\n _updateLayerOpacity (e) {\n var opacity = e.target.getOpacity();\n if (opacity > 1) {\n opacity = 1;\n }\n if (opacity < 0) {\n opacity = 0;\n }\n var id = e.target.gpLayerId;\n\n var layerOpacityInput = document.getElementById(this._addUID(\"GPopacityValueDiv_ID_\" + id));\n if (layerOpacityInput) {\n layerOpacityInput.value = Math.round(opacity * 100);\n }\n\n var layerOpacitySpan = document.getElementById(this._addUID(\"GPopacityValue_ID_\" + id));\n if (layerOpacitySpan) {\n layerOpacitySpan.innerHTML = Math.round(opacity * 100) + \"%\";\n }\n\n /**\n * event triggered when an opacity layer is changed\n *\n * @event layerswitcher:change:opacity\n * @property {Object} type - event\n * @property {Object} opacity - opacity\n * @property {Object} layer - layer\n * @property {Object} target - instance LayerSwitcher\n * @example\n * LayerSwitcher.on(\"layerswitcher:change\", function (e) {\n * console.log(e.opacity);\n * })\n */\n this.dispatchEvent({\n type : \"layerswitcher:change:opacity\",\n opacity : opacity,\n layer : this._layers[id]\n });\n }\n\n /**\n * Change layer visibility on layer visibility picto click\n *\n * @param {Object} e - event\n * @private\n */\n _onVisibilityLayerClick (e) {\n var divId = e.target.id; // ex GPvisibilityPicto_ID_26\n var layerID = SelectorID.index(divId); // ex. 26\n var layer = this._layers[layerID].layer;\n layer.setVisible((e.target.ariaPressed === \"true\"));\n }\n\n /**\n * Change picto visibility on layer visibility change\n *\n * @param {Object} e - event\n * @fires layerswitcher:change:visibility\n * @private\n */\n _updateLayerVisibility (e) {\n var visible = e.target.getVisible();\n var id = e.target.gpLayerId;\n var layerVisibility = document.getElementById(this._addUID(\"GPvisibilityPicto_ID_\" + id));\n if (layerVisibility) {\n layerVisibility.ariaPressed = visible;\n }\n\n /**\n * event triggered when an visibility layer is changed\n *\n * @event layerswitcher:change:visibility\n * @property {Object} type - event\n * @property {Object} visibility - visibility\n * @property {Object} layer - layer\n * @property {Object} target - instance LayerSwitcher\n * @example\n * LayerSwitcher.on(\"layerswitcher:change:visibility\", function (e) {\n * console.log(e.visibility);\n * })\n */\n this.dispatchEvent({\n type : \"layerswitcher:change:visibility\",\n visibility : visible,\n layer : this._layers[id]\n });\n }\n\n /**\n * Change layers order in layerswitcher (control container) on a layer index change (on map) or when a layer is added to a specific zindex\n * @todo fires layerswitcher:change:zindex\n * @private\n */\n _updateLayersOrder () {\n // info :\n // 1. on récupère les zindex et les couches associées dans un tableau associatif (objet)\n // 2. on réordonne les couche selon leur index : on leur attribue de nouveaux zindex uniques\n // 3. on vide le container des layers, et rajoute les div des couches dans l'ordre décroissant des zindex\n\n var map = this.getMap();\n if (!map) {\n return;\n }\n this._layersIndex = {};\n var layerIndex;\n var id;\n\n // on parcourt toutes les couches pour récupérer leur ordre :\n // on stocke les couches dans un tableau associatif ou les clés sont les zindex, et les valeurs sont des tableaux des couches à ce zindex.\n map.getLayers().forEach(\n (layer) => {\n id = layer.gpLayerId;\n\n // on commence par désactiver temporairement l'écouteur d'événements sur le changement de zindex.\n olObservableUnByKey(this._layers[id].onZIndexChangeEvent);\n this._layers[id].onZIndexChangeEvent = null;\n\n // on ajoute la couche dans le tableau (de l'objet this._layersIndex) correspondant à son zindex\n layerIndex = null;\n if (layer.getZIndex !== undefined) {\n layerIndex = layer.getZIndex();\n if (!this._layersIndex[layerIndex] || !Array.isArray(this._layersIndex[layerIndex])) {\n this._layersIndex[layerIndex] = [];\n }\n this._layersIndex[layerIndex].push(this._layers[id]);\n };\n }\n );\n\n // on réordonne les couches entre elles dans la carte, à partir des zindex stockés ci-dessus.\n this._lastZIndex = 0;\n this._layersOrder = [];\n for (var zindex in this._layersIndex) {\n if (this._layersIndex.hasOwnProperty(zindex)) {\n var layers = this._layersIndex[zindex];\n for (var l = 0; l < layers.length; l++) { // à ce stade layers[l] est une couche de this._layers.\n // on conserve l'ordre des couches : la première est celle qui se situe tout en haut, et la dernière est le \"fond de carte\"\n this._layersOrder.unshift(layers[l]);\n // et on réordonne les couches avec des zindex, uniques.\n this._lastZIndex++;\n // layers[l].layer.setZIndex(lastZIndex);\n // et on réactive l'écouteur d'événement sur les zindex\n if (this._layers[layers[l].layer.gpLayerId].onZIndexChangeEvent == null) {\n this._layers[layers[l].layer.gpLayerId].onZIndexChangeEvent = layers[l].layer.on(\n \"change:zIndex\",\n () => this._updateLayersOrder()\n );\n }\n }\n }\n }\n\n if (this._layerListContainer) {\n // on vide le container précédent\n for (let index = 0; index < this._layerListContainer.childNodes.length; index++) {\n const element = this._layerListContainer.childNodes[index];\n if (element.id === \"\") {\n continue;\n }\n element.remove();\n }\n // et on rajoute les div correspondantes aux différentes couches, dans l'ordre décroissant des zindex\n for (var j = 0; j < this._layersOrder.length; j++) {\n var layerOptions = this._layersOrder[j];\n this._layerListContainer.appendChild(layerOptions.div);\n }\n } else {\n logger.log(\"[ol.control.LayerSwitcher] _updateLayersOrder : layer list container not found to update layers order ?!\");\n }\n }\n\n /**\n * Open layer information panel on picto click\n *\n * @param {Event} e - MouseEvent\n * @private\n */\n _onOpenLayerInfoClick (e) {\n var id = e.target.id; // ex GPvisibilityPicto_ID_26\n var layerID = SelectorID.index(id); // ex. 26\n var layerOptions = this._layers[layerID];\n\n var panel;\n var info;\n\n // Close layer info panel\n var divId = document.getElementById(e.target.id);\n if (divId.classList.contains(\"GPlayerInfoOpened\")) {\n divId.classList.remove(\"GPlayerInfoOpened\");\n divId.classList.add(\"GPlayerInfoClosed\");\n\n panel = document.getElementById(this._addUID(\"GPlayerInfoPanel\"));\n panel.classList.remove(\"GPlayerInfoPanelOpened\", \"gpf-visible\");\n panel.classList.add(\"GPlayerInfoPanelClosed\", \"gpf-hidden\");\n\n info = document.getElementById(this._addUID(\"GPlayerInfoContent\"));\n if (info) {\n info.parentNode.remove();\n }\n return;\n }\n\n // Open layer info panel\n if (divId.classList.contains(\"GPlayerInfoClosed\")) {\n divId.classList.remove(\"GPlayerInfoClosed\");\n divId.classList.add(\"GPlayerInfoOpened\");\n }\n\n panel = document.getElementById(this._addUID(\"GPlayerInfoPanel\"));\n panel.classList.remove(\"GPlayerInfoPanelClosed\", \"gpf-hidden\");\n panel.classList.add(\"GPlayerInfoPanelOpened\", \"gpf-visible\");\n\n info = document.getElementById(this._addUID(\"GPlayerInfoContent\"));\n if (info) {\n info.parentNode.remove();\n }\n\n // on récupère les infos associées au layer pour mettre dynamiquement le contenu du panel d'informations\n var obj = {\n id : id,\n title : layerOptions.title,\n description : layerOptions.description,\n quicklookUrl : layerOptions.quicklookUrl,\n metadata : layerOptions.metadata,\n legends : layerOptions.legends\n };\n // get layer max scale denominator\n var maxResolution = layerOptions.layer.getMaxResolution();\n if (maxResolution === Infinity) {\n obj._maxScaleDenominator = 560000000;\n } else {\n obj._maxScaleDenominator = Math.round(maxResolution / 0.00028);\n }\n var infoLayer = this._createContainerLayerInfoElement(obj);\n panel.firstChild.appendChild(infoLayer);\n }\n\n /**\n * remove layer from layer switcher and map on picto click\n *\n * @param {Event} e - MouseEvent\n * @private\n */\n _onDropLayerClick (e) {\n var divId = e.target.id; // ex GPvisibilityPicto_ID_26\n var layerID = SelectorID.index(divId); // ex. 26\n var layer = this._layers[layerID].layer;\n\n // le retrait de la couche va déclencher l'ecouteur d'évenement,\n // et appeler this.removeLayer qui va supprimer la div.\n this.getMap().getLayers().remove(layer);\n }\n\n /**\n * change layers order (on map) on drag and drop (on control container)\n *\n * @param {Event} e - CustomEvent\n * @private\n */\n _onEndDragAndDropLayerClick (e) {\n logger.trace(e);\n // INFO : e.oldIndex et e.newIndex marchent en mode AMD mais pas Bundle.\n var map = this.getMap();\n\n // on récupère l'ordre des div dans le contrôle pour réordonner les couches (avec zindex)\n var matchesLayers = document.querySelectorAll(\"div.GPlayerSwitcher_layer\");\n var maxZIndex = matchesLayers.length;\n // on vide la liste ordonnée avant de la remplir avec l'ordre des couches selon les div.\n this._layersOrder = [];\n for (var i = 0; i < matchesLayers.length; i++) {\n var tag = matchesLayers[i].id;\n var id = SelectorID.index(tag);\n var layer = this._layers[id].layer;\n\n // on commence par désactiver temporairement l'écouteur d'événements sur le changement de zindex.\n olObservableUnByKey(this._layers[id].onZIndexChangeEvent);\n this._layers[id].onZIndexChangeEvent = null;\n\n if (layer.setZIndex) {\n // maxZIndex--;\n layer.setZIndex(maxZIndex);\n this._layersOrder.push(this._layers[id]);\n maxZIndex--;\n }\n\n // et on réactive l'écouteur d'événement sur les zindex\n if (this._layers[id].onZIndexChangeEvent == null) {\n this._layers[id].onZIndexChangeEvent = layer.on(\n \"change:zIndex\",\n () => this._updateLayersOrder()\n );\n }\n }\n\n // mise à jour de la visu\n map.updateSize();\n\n /**\n * event triggered when an position layer is changed\n *\n * @event layerswitcher:change:visibility\n * @property {Object} type - event\n * @property {Object} position - position\n * @property {Object} layer - layer\n * @property {Object} layers - layers sorted\n * @property {Object} target - instance LayerSwitcher\n * @example\n * LayerSwitcher.on(\"layerswitcher:change:position\", function (e) {\n * console.log(e.position);\n * })\n */\n this.dispatchEvent({\n type : \"layerswitcher:change:position\",\n position : e.newIndex,\n layer : this._layersOrder[e.newIndex],\n layers : this._layersOrder\n });\n }\n\n /**\n * change layers order (on map) on drag and drop (on control container)\n *\n * @param {Event} e - DragNDrop Event\n * @private\n */\n _onStartDragAndDropLayerClick (e) {\n logger.debug(e);\n }\n\n /**\n * zoom to extent\n * @fixme dot it for other user data\n * @param {PointerEvent} e - Event\n */\n _onZoomToExtentClick (e) {\n logger.debug(e);\n\n // FIXME\n // le zoom to extent fonctionne par defaut pour les couches raster TMS/WMS/WMTS issues du catalogue\n // et pour les données utilisateurs de type vecteur\n // mais doit aussi le faire pour les données utilisateurs du type :\n // * raster par moissonnage (imports)\n // * style mapbox (imports)\n\n var domIDShort = e.target.id; // ex GPvisibilityPicto_ID_26\n var domIDLong = SelectorID.index(domIDShort); // ex. 26\n var data = this._layers[domIDLong];\n\n var extent = null;\n var error = null;\n\n var map = this.getMap();\n // cas d'un layer vecteur importé, d'un croquis, d'une couche de calcul\n if (data.layer.hasOwnProperty(\"gpResultLayerId\") && \n (data.layer.gpResultLayerId.split(\":\")[0] === \"layerimport\" || data.layer.gpResultLayerId.split(\":\")[0] === \"drawing\"\n || data.layer.gpResultLayerId.split(\":\")[0] === \"compute\")) {\n // TODO : appeler fonc tion commune\n // zoom sur l'étendue des entités récupérées (si possible)\n if (map.getView() && map.getSize()) {\n var sourceExtent = data.layer.getExtent() || data.layer.getSource().getExtent();\n if (sourceExtent && sourceExtent[0] !== Infinity) {\n map.getView().fit(sourceExtent, map.getSize());\n }\n }\n } else {\n try { \n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw \"ERROR : contract key configuration has to be loaded to load Geoportal layers.\";\n }\n\n var layerName = data.layer.name || data.layer.getSource().name;\n var layerService = data.layer.service || data.layer.getSource().service;\n var layerId = Config.configuration.getLayerId(layerName, layerService);\n if (!layerId) {\n throw \"ERROR : Layer ID not found into the catalogue !?\";\n }\n\n var globalConstraints = Config.configuration.getGlobalConstraints(layerId);\n if (globalConstraints) {\n if (!map || !map.getView()) {\n return;\n }\n var view = map.getView();\n var crsTarget = view.getProjection();\n\n // récupération de l'étendue (en EPSG:4326 par défaut),\n // et reprojection dans la projection de la couche\n var bbox = [\n globalConstraints.extent.left,\n globalConstraints.extent.bottom,\n globalConstraints.extent.right,\n globalConstraints.extent.top\n ];\n var crsSource = globalConstraints.crs;\n // projection par defaut\n if (!crsSource) {\n crsSource = \"EPSG:4326\";\n }\n\n extent = olTransformExtentProj(bbox, crsSource, crsTarget);\n if (extent) {\n view.fit(extent);\n }\n }\n } catch (e) {\n error = e;\n }\n }\n\n /**\n * event triggered when an zoom extent is done\n *\n * @event layerswitcher:zoom\n * @property {Object} type - event\n * @property {Object} extent - extent (map projection)\n * @property {Object} layer - layer\n * @property {String} error - error\n * @property {Object} target - instance LayerSwitcher\n * @example\n * LayerSwitcher.on(\"layerswitcher:extent\", function (e) {\n * console.log(e.extent);\n * })\n */\n this.dispatchEvent({\n type : \"layerswitcher:extent\",\n extent : extent,\n layer : data,\n error : error\n });\n }\n\n /**\n * check layers range on map movement\n *\n * @param {ol.Map} map - ol map on which event occured\n * @private\n */\n _onMapMoveEnd (map) {\n // pour chaque couche de la map, on vérifie qu'elle soit toujours dans la visu (inRange)\n map.getLayers().forEach(\n (layer) => {\n var id = layer.gpLayerId;\n if (this._layers[id]) {\n var layerOptions = this._layers[id];\n\n // Check if layer is out of range.\n var layerDiv;\n if (this.isInRange(layer, map) && !layerOptions.inRange) {\n layerOptions.inRange = true;\n layerDiv = document.getElementById(this._addUID(\"GPlayerSwitcher_ID_\" + id));\n layerDiv.classList.remove(\"outOfRange\");\n } else if (!this.isInRange(layer, map) && layerOptions.inRange) {\n layerOptions.inRange = false;\n layerDiv = document.getElementById(this._addUID(\"GPlayerSwitcher_ID_\" + id));\n layerDiv.classList.add(\"outOfRange\");\n }\n }\n }\n );\n }\n\n // ################################################################### //\n // ############################ Utils ################################ //\n // ################################################################### //\n\n /**\n * Returns Layer Container Id associated with given olLayer\n *\n * @param {ol.layer.Layer} olLayer - ol layer object\n * @returns {String} - div container Id ; null if layer not found.\n */\n getLayerDOMId (olLayer) {\n var foundId = null;\n\n this.getMap().getLayers().forEach((layer) => {\n if (layer === olLayer) {\n foundId = layer.hasOwnProperty(\"gpLayerId\") ? layer.gpLayerId : null;\n }\n });\n\n // TODO : recuperer \"GPlayerSwitcher_ID\" depuis une constante\n return foundId !== null ? this._addUID(\"GPlayerSwitcher_ID_\" + foundId) : null;\n }\n\n /**\n * Check if map view is out of layer range (in terms of extent and zoom)\n *\n * @param {Object} layer - the ol.layer object\n * @param {Object} map - the ol.Map object\n * @returns {Boolean} outOfRange - false if map view is out of layer range\n */\n isInRange (layer, map) {\n if (!map) {\n return;\n }\n // check if map zoom is in layer zoom range\n var mapResolution = map.getView().getResolution();\n if (mapResolution > layer.getMaxResolution() || mapResolution < layer.getMinResolution()) {\n return false;\n }\n\n // check if map extent intersects layer extent (if defined)\n var mapExtent = map.getView().calculateExtent(map.getSize());\n var layerExtent = layer.getExtent();\n if (layerExtent && !olIntersects(mapExtent, layerExtent)) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Get layer informations : title, description, quicklookurl, legends, metadata\n *\n * @param {Object} layer - the ol.layer object\n * @returns {Object} layerInfo - layer informations\n */\n getLayerInfo (layer) {\n var layerInfo = {};\n if (layer.getProperties !== undefined && layer.getSource !== undefined) {\n var layerProperties = layer.getProperties();\n var src = layerProperties.source;\n if (src) {\n layerInfo._title = src._title || layerProperties.title || layerProperties.id || \"\";\n layerInfo._description = src._description || layerProperties.description || \"\";\n layerInfo._quicklookUrl = src._quicklookUrl || layerProperties.quicklookUrl || \"\";\n layerInfo._metadata = src._metadata || layerProperties.metadata || [];\n layerInfo._legends = src._legends || layerProperties.legends || [];\n }\n }\n return layerInfo;\n }\n\n};\n\n// on récupère les méthodes de la classe commune LayerSwitcherDOM\nObject.assign(LayerSwitcher.prototype, LayerSwitcherDOM);\nObject.assign(LayerSwitcher.prototype, Widget);\n\nexport default LayerSwitcher;\n\n// Expose LayerSwitcher as ol.control.LayerSwitcher (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.LayerSwitcher = LayerSwitcher;\n}\n","import Logger from \"./LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"draggable\");\n\n/**\n * @module Draggable\n * @alias module:~utils/Draggable\n * @fixme conflit entre la position et le mode draggable\n * @private\n * @description\n * ...\n *\n * @example\n * dragElement();\n */\nvar Draggable = {\n /**\n * A draggable HTML element with JavaScript and CSS.\n *\n * @function dragElement\n * @param {DOMElement} element - element\n * @param {DOMElement} header - header (optional)\n * @param {DOMElement} container - container (optional)\n * @see https://gist.github.com/stephanbogner/75de4e84687ae6065fb0a4d81917543e\n * @see https://stackoverflow.com/questions/48097791/how-to-keep-a-draggable-element-from-being-moved-outside-a-boundary\n * @example\n * // CSS :\n * // #element { position: absolute; }\n * // HTML :\n * //
    \n * //
    \n * //
    \n * //
    ...\n * //
    \n * //
    \n * //
    \n * // JS :\n * var element = document.getElementById(\"element\");\n * Draggable.dragElement(element, header, container);\n */\n dragElement : function (element, header, container) {\n // Adapted from https://www.w3schools.com/howto/howto_js_draggable.asp\n let dragStartMouseX = 0, dragStartMouseY = 0, diffX = 0, diffY = 0, positionX = 0, positionY = 0;\n if (header) {\n header.addEventListener(\"mousedown\", dragMouseDown, true);\n } else {\n element.addEventListener(\"mousedown\", dragMouseDown, true);\n }\n var rect;\n var viewport = {\n bottom : 0,\n left : 0,\n right : 0,\n top : 0,\n };\n\n function dragMouseDown (e) {\n e = e || window.event;\n e.preventDefault();\n\n dragStartMouseX = e.clientX;\n dragStartMouseY = e.clientY;\n\n rect = element.getBoundingClientRect();\n const viewPortRect = container.getBoundingClientRect();\n viewport = {\n bottom : viewPortRect.bottom,\n left : viewPortRect.left,\n right : viewPortRect.right,\n top : viewPortRect.top,\n };\n\n document.addEventListener(\"mouseup\", closeDragElement, true);\n document.addEventListener(\"mousemove\", elementDrag, true);\n }\n\n function closeDragElement () {\n /* stop moving when mouse button is released: */\n positionX -= diffX;\n positionY -= diffY;\n document.removeEventListener(\"mouseup\", closeDragElement, true);\n document.removeEventListener(\"mousemove\", elementDrag, true);\n }\n\n function elementDrag (e) {\n e = e || window.event;\n // e.preventDefault();\n let currentMouseX = e.clientX;\n let currentMouseY = e.clientY;\n\n let oldDiffX = diffX;\n let oldDiffY = diffY;\n\n diffX = dragStartMouseX - currentMouseX;\n diffY = dragStartMouseY - currentMouseY;\n\n var newLeft = rect.left - diffX;\n var newTop = rect.top - diffY;\n\n if (newLeft < viewport.left\n || newTop < viewport.top\n || newLeft + rect.width > viewport.right\n || newTop + rect.height > viewport.bottom\n ) {\n // the element will hit the boundary, do nothing...\n diffX = oldDiffX;\n diffY = oldDiffY;\n } else {\n // set the element's new position:\n let newX = positionX - diffX;\n let newY = positionY - diffY;\n element.style.transform = \"translate(\" + newX + \"px,\" + newY + \"px)\";\n }\n }\n }\n};\n\nexport default Draggable;\n","export default class AsyncData {\n\n constructor (initialData) {\n this.data = initialData;\n this.subscribers = [];\n }\n \n // Subscribe to changes in the data\n subscribe (callback) {\n if (typeof callback !== \"function\") {\n throw new Error(\"Callback must be a function\");\n }\n this.subscribers.push(callback);\n }\n \n // Update the data and wait for all updates to complete\n async set (key, value) {\n this.data[key] = value;\n \n // Call the subscribed function and wait for it to resolve\n const updates = this.subscribers.map(async (callback) => {\n await callback(key, value);\n });\n \n await Promise.allSettled(updates);\n }\n\n get (key) {\n return this.data[key];\n }\n\n}","var GetFeatureInfoDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this.uid) ? id + \"-\" + this.uid : id;\n return uid;\n },\n\n /**\n * String to html\n * @param {String} str -string to convert\n * @returns {DOMElement} return dom element\n */\n stringToHTML : function (str) {\n var support = function () {\n if (!window.DOMParser) {\n return false;\n }\n var parser = new DOMParser();\n try {\n parser.parseFromString(\"x\", \"text/html\");\n } catch (err) {\n return false;\n }\n return true;\n };\n\n // If DOMParser is supported, use it\n if (support()) {\n var parser = new DOMParser();\n var doc = parser.parseFromString(str, \"text/html\");\n return doc.body;\n }\n\n // Otherwise, fallback to old-school method\n var dom = document.createElement(\"div\");\n dom.innerHTML = str;\n return dom;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPgetFeatureInfo\");\n container.className = \"GPgetFeatureInfo gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show GetFeatureInfo\n *\n * @returns {DOMElement} DOM element\n */\n _createShowGetFeatureInfoPictoElement : function () {\n var self = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPgetFeatureInfoPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPgetFeatureInfoPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-getfeatureinfo fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Activer/désactiver l'interrogation des couches\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // Close all results and panels when minimizing the getFeatureInfo\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowGetFeatureInfoClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowGetFeatureInfoClick(e);\n });\n }\n\n return button;\n },\n\n // ################################################################### //\n // ################### Methods of panel container #################### //\n // ################################################################### //\n\n /**\n * Create Container Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createGetFeatureInfoPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPgetFeatureInfoPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n return dialog;\n },\n\n _createGetFeatureInfoPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPpanelBody gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createGetFeatureInfoPanelHeaderElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n return container;\n },\n _createGetFeatureInfoPanelTitleElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n div.innerHTML = \"GetFeatureInfo\";\n return div;\n },\n _createGetFeatureInfoPanelCloseElement : function () {\n var self = this;\n\n var btnClose = document.createElement(\"button\");\n btnClose.className = \"GPpanelClose GPcloseGetFeatureInfo gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n btnClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n if (btnClose.addEventListener) {\n btnClose.addEventListener(\"click\", function (e) {\n btnClose.setAttribute(\"aria-pressed\", false);\n self.onCloseGetFeatureInfoClick();\n }, false);\n } else if (btnClose.attachEvent) {\n btnClose.attachEvent(\"onclick\", function (e) {\n btnClose.setAttribute(\"aria-pressed\", false);\n self.onCloseGetFeatureInfoClick();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n btnClose.appendChild(span);\n\n return btnClose;\n },\n\n /**\n * Create loader\n * @returns {DOMElement} DOM element\n */\n _createGetFeatureInfoWaitingDiv : function () {\n var waitingDivString = `\n
    \n `;\n return waitingDivString;\n },\n\n // ################################################################### //\n // ####################### Methods for Layer GFI ####################### //\n // ################################################################### //\n\n /**\n * Create group d'accodeon\n * @returns {DOMElement} DOM element\n */\n _createGetFeatureInfoAccordionGroup : function () {\n // contexte d'execution\n var self = this;\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPgetFeatureInfoAccordionGroup\");\n div.className = \"GPgetFeatureInfoAccordionGroup fr-accordions-group\";\n\n return div;\n },\n\n /**\n * Create accordeon\n * see evenement !\n * @param { String } layername nom du layer\n * @param { String } content contenu du gfi\n * @returns {DOMElement} DOM element\n */\n _createGetFeatureInfoLayerAccordion : function (layername) {\n var dsfrTemplate = this.stringToHTML(`\n
    \n

    \n \n

    \n
    \n ${this._createGetFeatureInfoWaitingDiv()}\n
    \n
    \n `);\n var accordeon = dsfrTemplate.firstChild;\n var button = accordeon.querySelector(\"button, button.fr-accordion__btn\");\n button.addEventListener(\"click\", (e) => {\n e.currentTarget.ariaExpanded = !(e.currentTarget.ariaExpanded === \"true\");\n var collapse = document.getElementById(e.currentTarget.getAttribute(\"aria-controls\"));\n if (e.currentTarget.ariaExpanded === \"true\") {\n collapse.classList.add(\"fr-collapse--expanded\");\n collapse.classList.remove(\"GPelementHidden\");\n } else {\n collapse.classList.remove(\"fr-collapse--expanded\");\n collapse.classList.add(\"GPelementHidden\");\n }\n });\n return accordeon;\n },\n\n};\n\nexport default GetFeatureInfoDOM;\n","// import CSS\nimport \"../../CSS/Controls/GetFeatureInfo/GPFgetFeatureInfo.css\";\n\n// import OpenLayers\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport VectorTileSource from \"ol/source/VectorTile\";\nimport VectorSource from \"ol/source/Vector\";\nimport TileWMSSource from \"ol/source/TileWMS\";\nimport WMTSSource from \"ol/source/WMTS\";\nimport ImageWMSSource from \"ol/source/ImageWMS\";\n// import local\nimport Utils from \"../../Utils/Helper\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Draggable from \"../../Utils/Draggable\";\nimport AsyncData from \"../Utils/AsyncData\";\n\n// DOM\nimport GetFeatureInfoDOM from \"./GetFeatureInfoDOM\";\n\nvar logger = Logger.getLogger(\"getFeatureInfo\");\n\n/**\n * @classdesc\n *\n * GetFeatureInfo button\n *\n * @constructor\n * @alias ol.control.GetFeatureInfo\n * @type {ol.control.GetFeatureInfo}\n * @extends {ol.control.Control}\n * @param {Object} options - options for function call.\n *\n * @fires custom:action\n * @example\n * var getFeatureInfo = new ol.control.GetFeatureInfo();\n * map.addControl(getFeatureInfo);\n */\nvar GetFeatureInfo = class GetFeatureInfo extends Control {\n\n /**\n * See {@link ol.control.GetFeatureInfo}\n * @module GetFeatureInfo\n * @alias module:~controls/GetFeatureInfo\n * @param {Object} [options] - options\n * @example\n * import GetFeatureInfo from \"gpf-ext-ol/controls/GetFeatureInfo\"\n * ou\n * import { GetFeatureInfo } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof GetFeatureInfo)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"GetFeatureInfo\";\n // initialisation du composant\n this.initialize(options);\n\n // GetFeatureInfo main DOM container\n this.container = this.initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this.container) : this.element = this.container;\n\n return this;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this.panelGetFeatureInfoContainer,\n this.panelGetFeatureInfoHeaderContainer,\n map.getTargetElement()\n );\n }\n // mode \"collapsed\"\n if (!this.collapsed) {\n this.buttonGetFeatureInfoShow.setAttribute(\"aria-pressed\", true);\n }\n\n // some stuff\n\n // ajout des evenements sur la carte\n if (this.auto) {\n this.addEventsListeners(map);\n }\n } else {\n // suppression des evenements sur la carte\n // pour les futurs suppressions de couche\n if (this.auto) {\n this.removeEventsListeners();\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.element.classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n // ################################################################### //\n // ################### getters / setters ############################# //\n // ################################################################### //\n\n\n // ################################################################### //\n // #################### privates methods ############################# //\n // ################################################################### //\n\n /**\n * Initialize GetFeatureInfo control (called by GetFeatureInfo constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n this.uid = options.id || SelectorID.generate();\n\n // set default options\n this.options = {\n collapsed : true,\n draggable : false,\n auto : true\n };\n\n // merge with user options\n Utils.assign(this.options, options);\n\n /** {Boolean} specify if control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n /** {Boolean} specify if control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n /** {Boolean} specify if control add some stuff auto */\n this.auto = this.options.auto;\n\n this.buttonGetFeatureInfoShow = null;\n this.panelGetFeatureInfoContainer = null;\n this.getFeatureInfoPanelDiv = null;\n this.panelGetFeatureInfoHeaderContainer = null; // usefull for the dragNdrop\n this.buttonGetFeatureInfoClose = null;\n this.getFeatureInfoAccordionGroup = null;\n this.panelGetFeatureInfoEntriesContainer = null;\n\n /** {Array} specify some events listeners */\n this.eventsListeners = [];\n\n /** GFI settings */\n this.pixel = [];\n this.coordinates = [];\n this.layers = [];\n this.res = null;\n }\n\n /**\n * Create control main container (DOM initialize)\n *\n * @returns {DOMElement} DOM element\n * @private\n */\n initContainer () {\n // create main container\n var container = this._createMainContainerElement();\n\n var picto = this.buttonGetFeatureInfoShow = this._createShowGetFeatureInfoPictoElement();\n container.appendChild(picto);\n\n // panel\n var getFeatureInfoPanel = this.panelGetFeatureInfoContainer = this._createGetFeatureInfoPanelElement();\n var getFeatureInfoPanelDiv = this.getFeatureInfoPanelDiv = this._createGetFeatureInfoPanelDivElement();\n getFeatureInfoPanel.appendChild(getFeatureInfoPanelDiv);\n\n // header\n var getFeatureInfoPanelHeader = this.panelGetFeatureInfoHeaderContainer = this._createGetFeatureInfoPanelHeaderElement();\n // icone\n // var getFeatureInfoPanelIcon = this._createGetFeatureInfoPanelIconElement();\n // getFeatureInfoPanelHeader.appendChild(getFeatureInfoPanelIcon);\n // title\n var getFeatureInfoPanelTitle = this._createGetFeatureInfoPanelTitleElement();\n getFeatureInfoPanelHeader.appendChild(getFeatureInfoPanelTitle);\n // close picto\n var getFeatureInfoCloseBtn = this.buttonGetFeatureInfoClose = this._createGetFeatureInfoPanelCloseElement();\n getFeatureInfoPanelHeader.appendChild(getFeatureInfoCloseBtn);\n\n getFeatureInfoPanelDiv.appendChild(getFeatureInfoPanelHeader);\n\n // container for the custom code\n var accordionGroup = this.getFeatureInfoAccordionGroup = this._createGetFeatureInfoAccordionGroup();\n getFeatureInfoPanelDiv.appendChild(accordionGroup);\n\n container.appendChild(getFeatureInfoPanel);\n\n logger.log(container);\n\n return container;\n }\n\n /**\n * Add events listeners on map (called by setMap)\n *\n * @param {*} map - map\n * @private\n */\n addEventsListeners (map) {\n var self = this;\n this.eventsListeners[\"singleclick\"] = function (e) {\n logger.trace(e);\n self.onMapClick(e);\n };\n // the event custom:action is associate with an openlayers event\n map.on(\"singleclick\", this.eventsListeners[\"singleclick\"]);\n }\n\n /**\n * Remove events listeners on map (called by setMap)\n * @private\n */\n removeEventsListeners () {\n var map = this.getMap();\n map.getLayers().un(\"singleclick\", this.eventsListeners[\"singleclick\"]);\n delete this.eventsListeners[\"singleclick\"];\n }\n\n /**\n * Tells if control is active or not\n * @private\n * @return { Boolean } true if active false if not\n */\n getFeatureInfoIsActive () {\n return this.buttonGetFeatureInfoShow.getAttribute(\"aria-pressed\");\n }\n\n\n /**\n * event handler\n * @param {Event} e évènement de click\n * @private\n */\n onMapClick (e) {\n if (this.getFeatureInfoIsActive() === \"true\") {\n this.getFeatureInfoAccordionGroup.remove();\n this.layers = e.map.getLayers().getArray().filter((l) => {\n // On ne passe au GFI que les layers visibles\n if (l.isVisible(e.map.getView()) && l.getOpacity() > 0){\n return l;\n }\n // tri le tableau des layers selon le z-index pour avoir le même affichage que dans le layerswitcher\n }).sort((a, b) => b.getZIndex() - a.getZIndex());\n if (this.layers.length > 0) {\n var accordionGroup = this.getFeatureInfoAccordionGroup = this._createGetFeatureInfoAccordionGroup();\n this.getFeatureInfoPanelDiv.appendChild(accordionGroup);\n this.map = e.map;\n this.pixel = e.pixel;\n this.coordinates = e.coordinate;\n this.res = e.map.getView().getResolution();\n this.displayGetFeatureInfo();\n }\n // Aucun layer visible sur la carte\n else {\n // rien à afficher car pas de couches visibles sur la carte, on s'arrête là.\n return;\n }\n }\n }\n\n /**\n * Main render function\n * @param { ol.Layer } layer layer openlayer\n * @return { Object } gfiLayer\n * {\n * format : \"wmts\",\n * layer: layer,\n * url : url pour wmts et wms\n * }\n * @private\n */\n getGetFeatureInfoLayer (layer) {\n var gfiLayer = {};\n let format = this.getLayerFormat(layer);\n gfiLayer = {\n format : format,\n layer : layer\n };\n if (format === \"wmts\") {\n let url = layer.getSource().getFeatureInfoUrl(\n this.coordinates,\n this.res,\n this.map.getView().getProjection(),\n {\n INFOFORMAT : \"text/html\",\n STYLES : \"\"\n }\n );\n gfiLayer = {\n ...gfiLayer,\n ...{\n url : url\n }\n };\n }\n if (format === \"wms\") {\n let url = layer.getSource().getFeatureInfoUrl(\n this.coordinates,\n this.res,\n this.map.getView().getProjection(),\n {\n INFO_FORMAT : \"text/html\",\n STYLES : \"\"\n }\n );\n gfiLayer = {\n ...gfiLayer,\n ...{\n url : url\n }\n };\n }\n return gfiLayer;\n }\n\n /**\n * Main render function\n * @param { ol.Layer } layer layer openlayer\n * @return { Array } Array of ol features\n * @private\n */\n getFeaturesAtClick (layer) {\n var features = [];\n this.getMap().forEachFeatureAtPixel(this.pixel, function (feature, olLayer) {\n if (layer == olLayer) {\n features.push(feature);\n }\n });\n return features;\n }\n\n /**\n * Main render function\n * @param { Object } gfiLayer layer openlayer\n * @return { Object } gfi result\n * {\n * layername : \"layername\",\n * content: \"html\"\n * }\n * @private\n */\n async getGetFeatureInfoContent (gfiLayer) {\n var content = null;\n if (gfiLayer.format === \"vector\") {\n var features = this.getFeaturesAtClick(gfiLayer.layer);\n if (features) {\n content = this.features2html(features);\n }\n return content;\n }\n else {\n return fetch(gfiLayer.url)\n .then((res) => res.text())\n .then((text) => {\n var exception = false;\n if (text.trim().length === 0 ||\n text.indexOf(\"ServiceExceptionReport\") !== -1 ||\n text.indexOf(\"java.lang.NullPointerException\") !== -1 ||\n text.indexOf(\"java.lang.OutOfMemoryError\") !== -1 ||\n text.indexOf(\"not queryable\") !== -1 ||\n text.indexOf(\"No data\") !== -1 ||\n text.indexOf(\"non interrogeable\") !== -1) {\n // rien à afficher\n exception = true;\n }\n if (!exception) {\n var dom = this.stringToHTML(text);\n if (dom && dom.innerHTML && dom.innerHTML.trim().length > 0) {\n return text;\n }\n // HTML est vide\n else {\n return null;\n }\n }\n else {\n return null;\n }\n })\n .catch((error) => {\n logger.log(error);\n return error;\n });\n }\n }\n\n /**\n * Get layer title\n *\n * @param {Object} gfiLayer - the layer object used by the gfi widget\n * @returns {String} layerTitle - layer title\n */\n getLayerTitle (gfiLayer) {\n if (gfiLayer.layer.getProperties !== undefined && gfiLayer.layer.getSource !== undefined) {\n var layerProperties = gfiLayer.layer.getProperties();\n var src = layerProperties.source;\n var layerTitle = \"\";\n if (src) {\n layerTitle = src._title || src.name || layerProperties.title || layerProperties.name || src.url_ || \"Couche de données\";\n }\n }\n return layerTitle;\n }\n\n /**\n * Main render function\n * @private\n */\n displayGetFeatureInfo () {\n var gfiLayers = this.layers.map((l) => {\n return this.getGetFeatureInfoLayer(l);\n });\n\n // Structuration de l'objet pour afficher les GFI par layer\n var gfiContent = gfiLayers.map((gfiLayer) => {\n var layername = this.getLayerTitle(gfiLayer);\n\n var content = null;\n var accordeon = this._createGetFeatureInfoLayerAccordion(layername);\n // on affiche pas l'entrée avant d'être confirmation qu'elle aura du contenu renvoyé\n accordeon.style.display = \"none\";\n var pending = true;\n return new AsyncData({\n ...gfiLayer,\n ...{\n layername : layername,\n content : content,\n contentDiv : accordeon,\n pending : pending\n }\n });\n });\n // Ajout des accordéons par layer selon leur index sur la carte\n for (let i = 0; i < gfiContent.length; i++) {\n this.getFeatureInfoAccordionGroup.append(gfiContent[i].data.contentDiv);\n }\n // Abonnement aux modifications de la valeur du contenu GFI.\n gfiContent.forEach((data) => {\n data.subscribe((key, value) => {\n if (key == \"content\") {\n data.set(\"pending\", false);\n if (data.get(\"content\")) {\n data.get(\"contentDiv\").querySelector(\"div.fr-collapse\").innerHTML = data.get(\"content\");\n // on affiche la pop-up car il y a au moins une entrée à afficher\n this.buttonGetFeatureInfoClose.setAttribute(\"aria-pressed\", true);\n // du contenu est renvoyé : on affiche l'entrée\n data.get(\"contentDiv\").style.display = \"block\";\n }\n else {\n // pas de contenu renvoyé : on retire l'entrée du DOM\n data.get(\"contentDiv\").remove();\n }\n // s'il n'y a aucun contenu renvoyé par le GFI\n if (gfiContent.filter(gfi => gfi.get(\"pending\") === true).length == 0\n && gfiContent.filter(gfi => gfi.get(\"content\")).length == 0) {\n // on n'affiche pas la pop-up car pas de données\n this.buttonGetFeatureInfoClose.setAttribute(\"aria-pressed\", false);\n }\n }\n });\n });\n\n // Lancement des requêtes GFI\n gfiContent.forEach((asyncD) => {\n this.getGetFeatureInfoContent(asyncD.data)\n .then((res) => {\n asyncD.set(\"content\", res);\n });\n });\n }\n\n /**\n * Return layer format\n *\n * @param {ol.layer.Layer} l - layer openlayers\n * @return {String} format - layer format can be wms, wmts, vector or unknown\n *\n */\n getLayerFormat (l) {\n // la fonction 'getType' existe uniquement en mode source es6.\n // le bundle ol ne fournit pas cette fonction !?\n var type = (typeof l.getType === \"function\") ? l.getType() : null;\n var source = l.getSource();\n if (type) {\n if (type === \"VECTOR\" || type === \"VECTOR_TILE\") {\n return \"vector\";\n }\n if (type === \"TILE\") {\n if (source.tileGrid) {\n return \"wmts\";\n } else {\n return \"wms\";\n }\n }\n if (type === \"IMAGE\") {\n return \"wms\";\n }\n } else {\n if (source instanceof TileWMSSource || source instanceof ImageWMSSource) {\n return \"wms\";\n }\n if (source instanceof WMTSSource) {\n return \"wmts\";\n }\n if (source instanceof VectorSource || source instanceof VectorTileSource) {\n return \"vector\";\n }\n }\n return \"unknown\";\n }\n\n /**\n * Gets HTML content from features array\n *\n * @param {Array.} features - openlayers features Array\n * @returns {HTMLElement} HTML content.\n */\n features2html (features) {\n var content = document.createElement(\"div\");\n features.forEach(function (f) {\n var props = f.getProperties();\n // si la properties 'render' est presente,\n // on ajoute directement le rendu HTML dans la balise principale\n if (props.hasOwnProperty(\"render\")) {\n // content.innerHTML = props[\"render\"].trim();\n // content.appendChild(props[\"render\"]);\n content.insertAdjacentHTML(\"beforeend\", props[\"render\"]);\n } else {\n if (props.hasOwnProperty(\"name\")) {\n var nameDiv = document.createElement(\"div\");\n nameDiv.className = \"gp-att-name-div\";\n // nameDiv.appendChild(document.createTextNode(props[\"name\"])) ;\n nameDiv.insertAdjacentHTML(\"afterbegin\", props[\"name\"]);\n content.appendChild(nameDiv);\n }\n if (props.hasOwnProperty(\"description\")) {\n var descDiv = document.createElement(\"div\");\n descDiv.className = \"gp-att-description-div\";\n // descDiv.appendChild(document.createTextNode(props[\"description\"])) ;\n descDiv.insertAdjacentHTML(\"afterbegin\", props[\"description\"]);\n content.appendChild(descDiv);\n }\n var p = null;\n var others = false;\n var oDiv = null;\n var ul = null;\n var li = null;\n // Liste des properties à retirer de la visualisation :\n var listForbidden = [\n // styles\n \"fill\",\n \"fill-opacity\",\n \"stroke\",\n \"stroke-opacity\",\n \"stroke-width\",\n \"marker-symbol\",\n \"marker-color\",\n \"marker-size\",\n \"geometry\", // geometrie\n \"value\",\n \"name\", // déjà traité\n \"description\", // déjà traité\n \"styleUrl\",\n \"extensionsNode_\", // extensions GPX\n \"icon\" // ajouté par la 3D en cas de switch\n ];\n for (p in props) {\n if (props[p] === undefined) {\n continue;\n }\n if (listForbidden.indexOf(p) !== -1) {\n continue;\n }\n if (!others) {\n oDiv = document.createElement(\"div\");\n oDiv.className = \"gp-att-others-div\";\n ul = document.createElement(\"ul\");\n others = true;\n }\n li = document.createElement(\"li\");\n var span = document.createElement(\"span\");\n span.className = \"gp-attname-others-span\";\n span.appendChild(document.createTextNode(p + \" : \"));\n li.appendChild(span);\n li.appendChild(document.createTextNode(props[p]));\n ul.appendChild(li);\n }\n if (ul) {\n oDiv.appendChild(ul);\n content.appendChild(oDiv);\n }\n }\n });\n\n // pas de contenu !\n if (!content.hasChildNodes()) {\n content = \"\";\n }\n else {\n content = content.innerHTML;\n }\n return content;\n }\n\n // ################################################################### //\n // ######################## event dom ################################ //\n // ################################################################### //\n\n /**\n * ...\n * @param {*} e - ...\n */\n onShowGetFeatureInfoClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n // ouverture du panel pas systématique quand on clic sur le bouton d'activation\n // donc on doit fermer explicitement le panel quand on désactive le GFI\n if (e.target.ariaPressed === \"false\"){\n this.buttonGetFeatureInfoClose.setAttribute(\"aria-pressed\", false);\n }\n logger.trace(e);\n }\n\n /**\n * ...\n * @param {*} e - ...\n */\n onCloseGetFeatureInfoClick (e) {\n logger.trace(e);\n }\n\n /**\n * ...\n * @param {*} e - ...\n */\n onGetFeatureInfoComputationSubmit (e) {\n logger.trace(e);\n }\n\n};\n\n// on récupère les méthodes de la classe DOM\nObject.assign(GetFeatureInfo.prototype, GetFeatureInfoDOM);\nObject.assign(GetFeatureInfo.prototype, Widget);\n\nexport default GetFeatureInfo;\n\n// Expose Export as ol.control.GetFeatureInfo (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.GetFeatureInfo = GetFeatureInfo;\n}\n","// import OpenLayers\nimport Control from \"ol/control/Control\";\nimport {\n Select as SelectInteraction,\n Modify as ModifyInteraction,\n Draw as DrawInteraction\n} from \"ol/interaction\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Utils from \"../../Utils/Helper\";\n\nvar logger = Logger.getLogger(\"interactions\");\n\n/**\n * @private\n * @description\n * Pourquoi et comment l'utiliser ?\n * Cette classe permet de gérer les interactions entre chaque extension.\n * Une extension qui active une interaction avec la carte, doit desactiver\n * les autres interactions issues d'autre extensions.\n * La désactivation d'une interaction s'accompagne d'actions telles que\n * le nettoyage des dessins, l'état du composant graphique, ...\n *\n * Ex\n * // desactive toutes les interactions avec l'opération par defaut : clean\n * Interactions.unset(map);\n * // desactive les interactions sauf celles de Drawing. On execute des\n * // operations particulieres : status, collapse et message\n * Interactions.unset(map, {\n * current : \"Drawing\",\n * status : false,\n * collapse : true,\n * messsage : [\"WARNING\", \"Ceci est un avertissement !\"]\n * });\n *\n * Dans le code de l'extension, il faut placer des informations dans l'interaction :\n * interaction.setProperties({\n * name : \"Drawing\",\n * source : this\n * });\n */\nvar Interactions = {\n\n /**\n * Liste des extensions qui utilisent le mécanisme des interactions\n */\n _extensions : [\n \"Measures\",\n \"ElevationPath\",\n \"Drawing\"\n ],\n\n /**\n * Options par defaut\n * - current : ex. \"Drawing\"\n * c'est l'extension qui demande la desactivation des autres interactions.\n * Par defaut, toutes les interactions sont desactivées.\n * - clean :\n * c'est la suppression des interactions, des dessins de la carte,\n * ainsi que la reinitialisation de l'état graphique.\n * Les extensions doivent implementer la méthode 'clean()'.\n * Par defaut, tous les dessins sont supprimés\n */\n _options : {\n current : null,\n clean : null\n },\n\n /**\n * Permet de desactive les interactions (Draw) de la carte pour les extensions,\n * sauf l'interaction courrante (si elle est renseignée avec l'option 'current').\n * Il est possible d'ajouter des fonctionnalités via les options.\n * Par defaut, l'option 'clean' est renseignée...\n *\n * @param {Object} map - the map\n * @param {Object} options - options\n */\n unset : function (map, options) {\n logger.trace(\"unset()\");\n\n var opts = {};\n Utils.mergeParams(opts, this._options);\n Utils.mergeParams(opts, options);\n\n var interactions = map.getInteractions().getArray();\n for (var i = 0; i < interactions.length; i++) {\n if (interactions[i].getActive() &&\n (interactions[i] instanceof DrawInteraction ||\n interactions[i] instanceof SelectInteraction ||\n interactions[i] instanceof ModifyInteraction)) {\n var prop = interactions[i].getProperties();\n var name = prop.name;\n if (typeof name !== \"undefined\" && this._extensions.indexOf(name) > -1) {\n // doit on desactiver l'interaction courrante ?\n if (opts.current && opts.current === name) {\n continue;\n }\n interactions[i].setActive(false);\n // instance de l'extension\n var source = prop.source;\n if (typeof source !== \"undefined\" && source instanceof Control) {\n // opérations sur le composant graphique\n for (var action in opts) {\n if (opts.hasOwnProperty(action)) {\n if (action === \"current\") {\n continue;\n }\n if (typeof source[action] === \"function\") {\n var args = Array.isArray(opts[action]) ? opts[action] : [opts[action]];\n source[action].apply(source, args);\n }\n }\n }\n }\n } else {\n interactions[i].setActive(false);\n }\n }\n }\n }\n};\n\nexport default Interactions;\n","/**\n* @module MathUtils\n* @alias module:~utils/MathUtils\n* @description\n* ...\n*\n* @example\n* modulo();\n* decimalToDMS();\n* coordinateTo();\n* toInteger();\n* isInteger();\n* toFloat();\n*/\nvar MathUtils = {\n /**\n * Reste de la division euclidienne\n * \n * @function modulo\n * @param {Number} a - divisor\n * @param {Number} b - quotient\n * @returns {Number} Modulo\n */\n modulo : function (a, b) {\n var r = a % b;\n return r * b < 0 ? r + b : r;\n },\n\n /**\n * Transform degrees, minutes, seconds form decimal degrees -\n * Largely inspired by the private function degreesToStringHDMS from ol/coordinate.js\n *\n * @function decimalToDMS\n * @param {Number} degrees - decimal degrees\n * @param {Array} hemispheres - \"NS\" ou \"EO\"\n * @param {Number} numDigits - number of digits for seconds\n * @returns {Object} DMS coordinate\n */\n decimalToDMS : function (degrees, hemispheres, numDigits) {\n var normalizedDegrees = this.modulo(degrees + 180, 360) - 180;\n var x = Math.abs(3600 * normalizedDegrees);\n var dflPrecision = numDigits || 0;\n var precision = Math.pow(10, dflPrecision);\n\n var deg = Math.floor(x / 3600);\n var min = Math.floor((x - deg * 3600) / 60);\n var sec = x - (deg * 3600) - (min * 60);\n sec = Math.ceil(sec * precision) / precision;\n\n if (sec >= 60) {\n sec = 0;\n min += 1;\n }\n\n if (min >= 60) {\n min = 0;\n deg += 1;\n }\n\n var direction = hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0);\n return {\n d : deg,\n m : min,\n s : sec,\n direction : direction\n };\n },\n\n /**\n * Transform decimal degrees form degrees, minutes, seconds\n * \n * @function dmsToDecimal\n * @param {*} degrees - degrees\n * @param {*} minutes - minutes\n * @param {*} seconds - seconds\n * @param {*} hemispheres - \"NS\" ou \"EO\"\n * @returns {Number} decimal coordinate\n */\n dmsToDecimal (degrees, minutes, seconds, hemispheres) {\n var dd = degrees + minutes/60 + seconds/(60*60);\n \n if (hemispheres == \"S\" || hemispheres == \"O\") {\n dd = dd * -1;\n }\n return dd;\n },\n /**\n * ol coordinate to decimal\n * \n * @function coordinateToDecimal\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {lat, lng, unit:°}\n */\n coordinateToDecimal (olCoordinate) {\n var coordinate = {};\n coordinate.lat = olCoordinate[1].toFixed(6);\n coordinate.lng = olCoordinate[0].toFixed(6);\n coordinate.unit = \"°\";\n return coordinate;\n },\n\n /**\n * ol coordinate to dms\n * \n * @function coordinateToDMS\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {lat, lng, unit:dms}\n */\n coordinateToDMS (olCoordinate) {\n return {\n lng : MathUtils.decimalToDMS(olCoordinate[0], \"EO\", 2),\n lat : MathUtils.decimalToDMS(olCoordinate[1], \"NS\", 2),\n unit : \"DMS\"\n };\n },\n\n /**\n * ol coordinate to rad\n * \n * @function coordinateToRad\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {lat, lng, unit:rad}\n */\n coordinateToRad (olCoordinate) {\n var coordinate = {};\n var d = 0.01745329251994329577;\n coordinate.lng = olCoordinate[0] * d;\n coordinate.lng = coordinate.lng.toFixed(8);\n coordinate.lat = olCoordinate[1] * d;\n coordinate.lat = coordinate.lat.toFixed(8);\n coordinate.unit = \"rad\";\n return coordinate;\n },\n\n /**\n * ol coordinate to gon\n * \n * @function coordinateToGon\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {lat, lng, unit:gon}\n */\n coordinateToGon (olCoordinate) {\n var coordinate = {};\n var d = 1.11111111111111111111;\n coordinate.lng = olCoordinate[0] * d;\n coordinate.lng = coordinate.lng.toFixed(8);\n coordinate.lat = olCoordinate[1] * d;\n coordinate.lat = coordinate.lat.toFixed(8);\n coordinate.unit = \"gon\";\n return coordinate;\n },\n\n /**\n * ol coordinate to meter\n * \n * @function coordinateToMeter\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {x, y, unit:m}\n */\n coordinateToMeter (olCoordinate) {\n // on recoit toujours des coordonnées metriques\n var coordinate = {};\n coordinate.x = olCoordinate[0].toFixed(2);\n coordinate.y = olCoordinate[1].toFixed(2);\n coordinate.unit = \"m\";\n return coordinate;\n },\n\n /**\n * ol coordinate to kilometer\n * \n * @function coordinateToKMeter\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {x, lyng, unit:km}\n */\n coordinateToKMeter (olCoordinate) {\n // on recoit toujours des coordonnées metriques\n var coordinate = {};\n coordinate.x = (olCoordinate[0] / 1000).toFixed(2);\n coordinate.y = (olCoordinate[1] / 1000).toFixed(2);\n coordinate.unit = \"km\";\n return coordinate;\n },\n\n /**\n * Converts string to Integer\n *\n * @function toInteger\n * @param {String} s - string number\n * @param {Numeric} base - between 2 and 36\n * @returns {null|Numeric} result\n */\n toInteger : function (s, base) {\n var _base = base || 10;\n var n = parseInt(s, _base);\n if (!isNaN(n) && isFinite(n)) {\n return n;\n }\n return null;\n },\n\n /**\n * check if s represents an integer\n *\n * @function isInteger\n * @param {String} s - string number\n * @returns {Boolean} is integer\n */\n isInteger : function (s) {\n if (isNaN(s)) {\n return false;\n }\n\n var v = parseFloat(s);\n return ((v | 0) === v);\n },\n\n /**\n * Converts s to float\n *\n * @function toFloat\n * @param {String} s - string number\n * @returns {null|Numeric} result\n */\n toFloat : function (s) {\n var n = parseFloat(s);\n if (!isNaN(n) && isFinite(n)) {\n return n;\n }\n return null;\n }\n};\n\nexport default MathUtils;\n","/**\n * @module SearchEngineUtils\n * @alias module:~utils/SearchEngineUtils\n * @private\n * @description\n * ...\n *\n * @example\n * advancedSearchFiltersByDefault();\n * zoomToResultsByDefault();\n */\nvar SearchEngineUtils = {\n /**\n * Advanced Search Filters by default\n * @function advancedSearchFiltersByDefault\n */\n advancedSearchFiltersByDefault : {\n PositionOfInterest : [\n {\n name : \"category\",\n title : \"Type\",\n value : [\n \"cimetière\",\n \"aérodrome\",\n \"réservoir\",\n \"administratif\",\n \"construction linéaire\",\n \"construction ponctuelle\",\n \"construction surfacique\",\n \"cours d'eau\",\n \"détail hydrographique\",\n \"détail orographique\",\n \"équipement de transport\",\n \"plan d'eau\",\n \"poste de transformation\",\n \"terrain de sport\",\n \"transport par câble\",\n \"zone d'activité ou d'intérêt\",\n \"zone d'habitation\",\n \"lieu-dit non habité\"\n ]\n }, {\n name : \"postcode\",\n title : \"Code postal\"\n }, {\n name : \"citycode\",\n title : \"Code INSEE\"\n }\n ],\n StreetAddress : [\n {\n name : \"city\",\n title : \"Ville\"\n }, {\n name : \"postcode\",\n title : \"Code postal\"\n }, {\n name : \"citycode\",\n title : \"Code INSEE\"\n }\n ],\n CadastralParcel : [\n {\n name : \"departmentcode\",\n title : \"Code département (INSEE)\",\n description : \"Code INSEE du département (ex: 01, 94)\"\n }, {\n name : \"municipalitycode\",\n title : \"Code commune (INSEE)\",\n description : \"Code INSEE de la commune : 3 chiffres (ex: 067)\"\n }, {\n name : \"oldmunicipalitycode\",\n title : \"Commune absorbée\",\n description : \"Commune absorbée : 3 chiffres (ex: 000, 001)\"\n }, {\n name : \"districtcode\",\n title : \"Arrondissement\",\n description : \"Arrondissement : 3 chiffres (ex: 004, 012)\"\n }, {\n name : \"section\",\n title : \"Section\",\n description : \"Section Cadastrale : 2 caractères (chiffre et/ou lettre)\"\n }, {\n name : \"number\",\n title : \"Numéro\",\n description : \"Numéro de la parcelle : 4 chiffres (ex: 0041, 0250)\"\n }, {\n name : \"sheet\",\n title : \"Feuille\",\n description : \"Numéro de la feuille cadastrale\"\n }\n ]\n },\n\n /**\n * Provides default zoom based on results.\n *\n * @function zoomToResultsByDefault\n * @param {Object} info - location information\n * @returns {Integer} zoom level\n */\n zoomToResultsByDefault : function (info) {\n // FIXME\n // la classification du geocodage est differente de l'importance de l'autocompletion !\n\n var zoom = 15;\n\n var service = info.service;\n var fields = info.fields;\n var type = info.type;\n\n var importance = {\n 1 : 11,\n 2 : 12,\n 3 : 13,\n 4 : 14,\n 5 : 15,\n 6 : 16,\n 7 : 17,\n 8 : 17\n };\n\n // AutoCompletion POI\n if (service === \"SuggestedLocation\") {\n if (type === \"PositionOfInterest\") {\n zoom = importance[fields.classification];\n }\n }\n\n // Geocodage POI\n if (service === \"GeocodedLocation\") {\n if (type === \"PositionOfInterest\") {\n zoom = importance[fields.importance] || 14; // au cas où la recherche est en freeform !\n }\n }\n\n if (type === \"StreetAddress\") {\n zoom = 17;\n }\n\n if (type === \"CadastralParcel\") {\n zoom = 17;\n }\n\n return zoom;\n }\n};\n\nexport default SearchEngineUtils;\n","/**\n * @module GeocodeUtils\n * @alias module:~utils/GeocodeUtils\n * @private\n * @description\n * ...\n *\n * @example\n * getGeocodedLocationFreeform();\n * getSuggestedLocationFreeform();\n */\nvar GeocodeUtils = {\n /**\n * Return the freeform of a structured geocoded item\n *\n * @param {Object} geocodedLocation - Geocoded location\n * @returns {String} freeform string\n */\n getGeocodedLocationFreeform : function (geocodedLocation) {\n var attributes = geocodedLocation.placeAttributes;\n if (attributes.label) {\n return attributes.label;\n } else if (geocodedLocation.type === \"PositionOfInterest\") {\n var resultToReturn = attributes.toponym;\n if (attributes.category && Array.isArray(attributes.category) && attributes.category.length >= 2 && attributes.category[0] === \"administratif\") {\n // gestion particulière des territoires administratifs\n resultToReturn = resultToReturn + \", \" + attributes.category[1];\n } else {\n // gestion standard des POI non adminsitratifs\n if (attributes.postcode) {\n resultToReturn = resultToReturn + \", \" + attributes.postcode[0];\n if (attributes.city) {\n resultToReturn = resultToReturn + \" \" + attributes.city[0];\n }\n }\n }\n return resultToReturn;\n } else if (geocodedLocation.type === \"StreetAddress\") {\n return (attributes.housenumber ? attributes.housenumber + \" \" : \"\") + attributes.street + \" \" + (attributes.postcode ? attributes.postcode + \", \" : \"\") + attributes.city;\n } else if (geocodedLocation.type === \"CadastralParcel\") {\n return attributes.id;\n } else {\n return \"...\";\n }\n },\n\n /**\n * Return the freeform of a structured suggested item\n *\n * @param {Object} suggestedLocation - Suggested location\n * @returns {String} freeform string\n */\n getSuggestedLocationFreeform : function (suggestedLocation) {\n if (suggestedLocation.fullText) {\n return suggestedLocation.fullText;\n } else {\n var values = [];\n values.push(suggestedLocation.street || \"\");\n values.push(suggestedLocation.postalCode || \"\");\n values.push(suggestedLocation.commune || \"\");\n\n if (suggestedLocation.type === \"PositionOfInterest\") {\n values.push(suggestedLocation.poi || \"\");\n values.push(suggestedLocation.kind || \"\");\n }\n return values.join(\" - \");\n }\n }\n};\n\nexport default GeocodeUtils;\n","export var PJD_3PARAM = 1;\nexport var PJD_7PARAM = 2;\nexport var PJD_GRIDSHIFT = 3;\nexport var PJD_WGS84 = 4; // WGS84 or equivalent\nexport var PJD_NODATUM = 5; // WGS84 or equivalent\nexport var SRS_WGS84_SEMIMAJOR = 6378137.0; // only used in grid shift transforms\nexport var SRS_WGS84_SEMIMINOR = 6356752.314; // only used in grid shift transforms\nexport var SRS_WGS84_ESQUARED = 0.0066943799901413165; // only used in grid shift transforms\nexport var SEC_TO_RAD = 4.84813681109535993589914102357e-6;\nexport var HALF_PI = Math.PI/2;\n// ellipoid pj_set_ell.c\nexport var SIXTH = 0.1666666666666666667;\n/* 1/6 */\nexport var RA4 = 0.04722222222222222222;\n/* 17/360 */\nexport var RA6 = 0.02215608465608465608;\nexport var EPSLN = 1.0e-10;\n// you'd think you could use Number.EPSILON above but that makes\n// Mollweide get into an infinate loop.\n\nexport var D2R = 0.01745329251994329577;\nexport var R2D = 57.29577951308232088;\nexport var FORTPI = Math.PI/4;\nexport var TWO_PI = Math.PI * 2;\n// SPI is slightly greater than Math.PI, so values that exceed the -180..180\n// degree range by a tiny amount don't get wrapped. This prevents points that\n// have drifted from their original location along the 180th meridian (due to\n// floating point error) from changing their sign.\nexport var SPI = 3.14159265359;\n","var exports = {};\nexport {exports as default};\n\nexports.greenwich = 0.0; //\"0dE\",\nexports.lisbon = -9.131906111111; //\"9d07'54.862\\\"W\",\nexports.paris = 2.337229166667; //\"2d20'14.025\\\"E\",\nexports.bogota = -74.080916666667; //\"74d04'51.3\\\"W\",\nexports.madrid = -3.687938888889; //\"3d41'16.58\\\"W\",\nexports.rome = 12.452333333333; //\"12d27'8.4\\\"E\",\nexports.bern = 7.439583333333; //\"7d26'22.5\\\"E\",\nexports.jakarta = 106.807719444444; //\"106d48'27.79\\\"E\",\nexports.ferro = -17.666666666667; //\"17d40'W\",\nexports.brussels = 4.367975; //\"4d22'4.71\\\"E\",\nexports.stockholm = 18.058277777778; //\"18d3'29.8\\\"E\",\nexports.athens = 23.7163375; //\"23d42'58.815\\\"E\",\nexports.oslo = 10.722916666667; //\"10d43'22.5\\\"E\"\n","export default {\n 'mm': {to_meter: 0.001},\n 'cm': {to_meter: 0.01},\n 'ft': {to_meter: 0.3048},\n 'us-ft': {to_meter: 1200 / 3937},\n 'fath': {to_meter: 1.8288},\n 'kmi': {to_meter: 1852},\n 'us-ch': {to_meter: 20.1168402336805},\n 'us-mi': {to_meter: 1609.34721869444},\n 'km': {to_meter: 1000},\n 'ind-ft': {to_meter: 0.30479841},\n 'ind-yd': {to_meter: 0.91439523},\n 'mi': {to_meter: 1609.344},\n 'yd': {to_meter: 0.9144},\n 'ch': {to_meter: 20.1168},\n 'link': {to_meter: 0.201168},\n 'dm': {to_meter: 0.01},\n 'in': {to_meter: 0.0254},\n 'ind-ch': {to_meter: 20.11669506},\n 'us-in': {to_meter: 0.025400050800101},\n 'us-yd': {to_meter: 0.914401828803658}\n};\n","var ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nexport default function match(obj, key) {\n if (obj[key]) {\n return obj[key];\n }\n var keys = Object.keys(obj);\n var lkey = key.toLowerCase().replace(ignoredChar, '');\n var i = -1;\n var testkey, processedKey;\n while (++i < keys.length) {\n testkey = keys[i];\n processedKey = testkey.toLowerCase().replace(ignoredChar, '');\n if (processedKey === lkey) {\n return obj[testkey];\n }\n }\n}\n","import {D2R} from './constants/values';\nimport PrimeMeridian from './constants/PrimeMeridian';\nimport units from './constants/units';\nimport match from './match';\n\nexport default function(defData) {\n var self = {};\n var paramObj = defData.split('+').map(function(v) {\n return v.trim();\n }).filter(function(a) {\n return a;\n }).reduce(function(p, a) {\n var split = a.split('=');\n split.push(true);\n p[split[0].toLowerCase()] = split[1];\n return p;\n }, {});\n var paramName, paramVal, paramOutname;\n var params = {\n proj: 'projName',\n datum: 'datumCode',\n rf: function(v) {\n self.rf = parseFloat(v);\n },\n lat_0: function(v) {\n self.lat0 = v * D2R;\n },\n lat_1: function(v) {\n self.lat1 = v * D2R;\n },\n lat_2: function(v) {\n self.lat2 = v * D2R;\n },\n lat_ts: function(v) {\n self.lat_ts = v * D2R;\n },\n lon_0: function(v) {\n self.long0 = v * D2R;\n },\n lon_1: function(v) {\n self.long1 = v * D2R;\n },\n lon_2: function(v) {\n self.long2 = v * D2R;\n },\n alpha: function(v) {\n self.alpha = parseFloat(v) * D2R;\n },\n gamma: function(v) {\n self.rectified_grid_angle = parseFloat(v);\n },\n lonc: function(v) {\n self.longc = v * D2R;\n },\n x_0: function(v) {\n self.x0 = parseFloat(v);\n },\n y_0: function(v) {\n self.y0 = parseFloat(v);\n },\n k_0: function(v) {\n self.k0 = parseFloat(v);\n },\n k: function(v) {\n self.k0 = parseFloat(v);\n },\n a: function(v) {\n self.a = parseFloat(v);\n },\n b: function(v) {\n self.b = parseFloat(v);\n },\n r: function(v) {\n self.a = self.b = parseFloat(v);\n },\n r_a: function() {\n self.R_A = true;\n },\n zone: function(v) {\n self.zone = parseInt(v, 10);\n },\n south: function() {\n self.utmSouth = true;\n },\n towgs84: function(v) {\n self.datum_params = v.split(\",\").map(function(a) {\n return parseFloat(a);\n });\n },\n to_meter: function(v) {\n self.to_meter = parseFloat(v);\n },\n units: function(v) {\n self.units = v;\n var unit = match(units, v);\n if (unit) {\n self.to_meter = unit.to_meter;\n }\n },\n from_greenwich: function(v) {\n self.from_greenwich = v * D2R;\n },\n pm: function(v) {\n var pm = match(PrimeMeridian, v);\n self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;\n },\n nadgrids: function(v) {\n if (v === '@null') {\n self.datumCode = 'none';\n }\n else {\n self.nadgrids = v;\n }\n },\n axis: function(v) {\n var legalAxis = \"ewnsud\";\n if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {\n self.axis = v;\n }\n },\n approx: function() {\n self.approx = true;\n }\n };\n for (paramName in paramObj) {\n paramVal = paramObj[paramName];\n if (paramName in params) {\n paramOutname = params[paramName];\n if (typeof paramOutname === 'function') {\n paramOutname(paramVal);\n }\n else {\n self[paramOutname] = paramVal;\n }\n }\n else {\n self[paramName] = paramVal;\n }\n }\n if(typeof self.datumCode === 'string' && self.datumCode !== \"WGS84\"){\n self.datumCode = self.datumCode.toLowerCase();\n }\n return self;\n}\n","export default parseString;\n\nvar NEUTRAL = 1;\nvar KEYWORD = 2;\nvar NUMBER = 3;\nvar QUOTED = 4;\nvar AFTERQUOTE = 5;\nvar ENDED = -1;\nvar whitespace = /\\s/;\nvar latin = /[A-Za-z]/;\nvar keyword = /[A-Za-z84_]/;\nvar endThings = /[,\\]]/;\nvar digets = /[\\d\\.E\\-\\+]/;\n// const ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nfunction Parser(text) {\n if (typeof text !== 'string') {\n throw new Error('not a string');\n }\n this.text = text.trim();\n this.level = 0;\n this.place = 0;\n this.root = null;\n this.stack = [];\n this.currentObject = null;\n this.state = NEUTRAL;\n}\nParser.prototype.readCharicter = function() {\n var char = this.text[this.place++];\n if (this.state !== QUOTED) {\n while (whitespace.test(char)) {\n if (this.place >= this.text.length) {\n return;\n }\n char = this.text[this.place++];\n }\n }\n switch (this.state) {\n case NEUTRAL:\n return this.neutral(char);\n case KEYWORD:\n return this.keyword(char)\n case QUOTED:\n return this.quoted(char);\n case AFTERQUOTE:\n return this.afterquote(char);\n case NUMBER:\n return this.number(char);\n case ENDED:\n return;\n }\n};\nParser.prototype.afterquote = function(char) {\n if (char === '\"') {\n this.word += '\"';\n this.state = QUOTED;\n return;\n }\n if (endThings.test(char)) {\n this.word = this.word.trim();\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in afterquote yet, index ' + this.place);\n};\nParser.prototype.afterItem = function(char) {\n if (char === ',') {\n if (this.word !== null) {\n this.currentObject.push(this.word);\n }\n this.word = null;\n this.state = NEUTRAL;\n return;\n }\n if (char === ']') {\n this.level--;\n if (this.word !== null) {\n this.currentObject.push(this.word);\n this.word = null;\n }\n this.state = NEUTRAL;\n this.currentObject = this.stack.pop();\n if (!this.currentObject) {\n this.state = ENDED;\n }\n\n return;\n }\n};\nParser.prototype.number = function(char) {\n if (digets.test(char)) {\n this.word += char;\n return;\n }\n if (endThings.test(char)) {\n this.word = parseFloat(this.word);\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in number yet, index ' + this.place);\n};\nParser.prototype.quoted = function(char) {\n if (char === '\"') {\n this.state = AFTERQUOTE;\n return;\n }\n this.word += char;\n return;\n};\nParser.prototype.keyword = function(char) {\n if (keyword.test(char)) {\n this.word += char;\n return;\n }\n if (char === '[') {\n var newObjects = [];\n newObjects.push(this.word);\n this.level++;\n if (this.root === null) {\n this.root = newObjects;\n } else {\n this.currentObject.push(newObjects);\n }\n this.stack.push(this.currentObject);\n this.currentObject = newObjects;\n this.state = NEUTRAL;\n return;\n }\n if (endThings.test(char)) {\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in keyword yet, index ' + this.place);\n};\nParser.prototype.neutral = function(char) {\n if (latin.test(char)) {\n this.word = char;\n this.state = KEYWORD;\n return;\n }\n if (char === '\"') {\n this.word = '';\n this.state = QUOTED;\n return;\n }\n if (digets.test(char)) {\n this.word = char;\n this.state = NUMBER;\n return;\n }\n if (endThings.test(char)) {\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in neutral yet, index ' + this.place);\n};\nParser.prototype.output = function() {\n while (this.place < this.text.length) {\n this.readCharicter();\n }\n if (this.state === ENDED) {\n return this.root;\n }\n throw new Error('unable to parse string \"' +this.text + '\". State is ' + this.state);\n};\n\nfunction parseString(txt) {\n var parser = new Parser(txt);\n return parser.output();\n}\n","\n\nfunction mapit(obj, key, value) {\n if (Array.isArray(key)) {\n value.unshift(key);\n key = null;\n }\n var thing = key ? {} : obj;\n\n var out = value.reduce(function(newObj, item) {\n sExpr(item, newObj);\n return newObj\n }, thing);\n if (key) {\n obj[key] = out;\n }\n}\n\nexport function sExpr(v, obj) {\n if (!Array.isArray(v)) {\n obj[v] = true;\n return;\n }\n var key = v.shift();\n if (key === 'PARAMETER') {\n key = v.shift();\n }\n if (v.length === 1) {\n if (Array.isArray(v[0])) {\n obj[key] = {};\n sExpr(v[0], obj[key]);\n return;\n }\n obj[key] = v[0];\n return;\n }\n if (!v.length) {\n obj[key] = true;\n return;\n }\n if (key === 'TOWGS84') {\n obj[key] = v;\n return;\n }\n if (key === 'AXIS') {\n if (!(key in obj)) {\n obj[key] = [];\n }\n obj[key].push(v);\n return;\n }\n if (!Array.isArray(key)) {\n obj[key] = {};\n }\n\n var i;\n switch (key) {\n case 'UNIT':\n case 'PRIMEM':\n case 'VERT_DATUM':\n obj[key] = {\n name: v[0].toLowerCase(),\n convert: v[1]\n };\n if (v.length === 3) {\n sExpr(v[2], obj[key]);\n }\n return;\n case 'SPHEROID':\n case 'ELLIPSOID':\n obj[key] = {\n name: v[0],\n a: v[1],\n rf: v[2]\n };\n if (v.length === 4) {\n sExpr(v[3], obj[key]);\n }\n return;\n case 'EDATUM':\n case 'ENGINEERINGDATUM':\n case 'LOCAL_DATUM':\n case 'DATUM':\n case 'VERT_CS':\n case 'VERTCRS':\n case 'VERTICALCRS':\n v[0] = ['name', v[0]];\n mapit(obj, key, v);\n return;\n case 'COMPD_CS':\n case 'COMPOUNDCRS':\n case 'FITTED_CS':\n // the followings are the crs defined in\n // https://github.com/proj4js/proj4js/blob/1da4ed0b865d0fcb51c136090569210cdcc9019e/lib/parseCode.js#L11\n case 'PROJECTEDCRS':\n case 'PROJCRS':\n case 'GEOGCS':\n case 'GEOCCS':\n case 'PROJCS':\n case 'LOCAL_CS':\n case 'GEODCRS':\n case 'GEODETICCRS':\n case 'GEODETICDATUM':\n case 'ENGCRS':\n case 'ENGINEERINGCRS':\n v[0] = ['name', v[0]];\n mapit(obj, key, v);\n obj[key].type = key;\n return;\n default:\n i = -1;\n while (++i < v.length) {\n if (!Array.isArray(v[i])) {\n return sExpr(v, obj[key]);\n }\n }\n return mapit(obj, key, v);\n }\n}\n","var D2R = 0.01745329251994329577;\nimport parser from './parser';\nimport {sExpr} from './process';\n\nvar knownTypes = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS', 'GEOCCS', 'PROJCS', 'LOCAL_CS', 'GEODCRS',\n 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\n\nfunction rename(obj, params) {\n var outName = params[0];\n var inName = params[1];\n if (!(outName in obj) && (inName in obj)) {\n obj[outName] = obj[inName];\n if (params.length === 3) {\n obj[outName] = params[2](obj[outName]);\n }\n }\n}\n\nfunction d2r(input) {\n return input * D2R;\n}\n\nfunction cleanWKT(wkt) {\n var keys = Object.keys(wkt);\n for (var i = 0, ii = keys.length; i 0 ? 90 : -90);\n wkt.lat_ts = wkt.lat1;\n } else if (!wkt.lat_ts && wkt.lat0 && wkt.projName === 'Polar_Stereographic') {\n wkt.lat_ts = wkt.lat0;\n wkt.lat0 = d2r(wkt.lat0 > 0 ? 90 : -90);\n }\n}\nexport default function(wkt) {\n var lisp = parser(wkt);\n var type = lisp[0];\n var obj = {};\n sExpr(lisp, obj);\n cleanWKT(obj);\n return obj[type];\n}\n","import globals from './global';\nimport parseProj from './projString';\nimport wkt from 'wkt-parser';\n\nfunction defs(name) {\n /*global console*/\n var that = this;\n if (arguments.length === 2) {\n var def = arguments[1];\n if (typeof def === 'string') {\n if (def.charAt(0) === '+') {\n defs[name] = parseProj(arguments[1]);\n }\n else {\n defs[name] = wkt(arguments[1]);\n }\n } else {\n defs[name] = def;\n }\n }\n else if (arguments.length === 1) {\n if (Array.isArray(name)) {\n return name.map(function(v) {\n if (Array.isArray(v)) {\n defs.apply(that, v);\n }\n else {\n defs(v);\n }\n });\n }\n else if (typeof name === 'string') {\n if (name in defs) {\n return defs[name];\n }\n }\n else if ('EPSG' in name) {\n defs['EPSG:' + name.EPSG] = name;\n }\n else if ('ESRI' in name) {\n defs['ESRI:' + name.ESRI] = name;\n }\n else if ('IAU2000' in name) {\n defs['IAU2000:' + name.IAU2000] = name;\n }\n else {\n console.log(name);\n }\n return;\n }\n\n\n}\nglobals(defs);\nexport default defs;\n","export default function(defs) {\n defs('EPSG:4326', \"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\");\n defs('EPSG:4269', \"+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\");\n defs('EPSG:3857', \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs\");\n // UTM WGS84\n for (var i = 1; i <= 60; ++i) {\n defs('EPSG:' + (32600 + i), \"+proj=utm +zone=\" + i + \" +datum=WGS84 +units=m\");\n defs('EPSG:' + (32700 + i), \"+proj=utm +zone=\" + i + \" +south +datum=WGS84 +units=m\");\n }\n\n defs.WGS84 = defs['EPSG:4326'];\n defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857\n defs.GOOGLE = defs['EPSG:3857'];\n defs['EPSG:900913'] = defs['EPSG:3857'];\n defs['EPSG:102113'] = defs['EPSG:3857'];\n}\n","import defs from './defs';\nimport wkt from 'wkt-parser';\nimport projStr from './projString';\nimport match from './match';\nfunction testObj(code){\n return typeof code === 'string';\n}\nfunction testDef(code){\n return code in defs;\n}\nvar codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\nfunction testWKT(code){\n return codeWords.some(function (word) {\n return code.indexOf(word) > -1;\n });\n}\nvar codes = ['3857', '900913', '3785', '102113'];\nfunction checkMercator(item) {\n var auth = match(item, 'authority');\n if (!auth) {\n return;\n }\n var code = match(auth, 'epsg');\n return code && codes.indexOf(code) > -1;\n}\nfunction checkProjStr(item) {\n var ext = match(item, 'extension');\n if (!ext) {\n return;\n }\n return match(ext, 'proj4');\n}\nfunction testProj(code){\n return code[0] === '+';\n}\nfunction parse(code){\n if (testObj(code)) {\n //check to see if this is a WKT string\n if (testDef(code)) {\n return defs[code];\n }\n if (testWKT(code)) {\n var out = wkt(code);\n // test of spetial case, due to this being a very common and often malformed\n if (checkMercator(out)) {\n return defs['EPSG:3857'];\n }\n var maybeProjStr = checkProjStr(out);\n if (maybeProjStr) {\n return projStr(maybeProjStr);\n }\n return out;\n }\n if (testProj(code)) {\n return projStr(code);\n }\n }else{\n return code;\n }\n}\n\nexport default parse;\n","export default function(destination, source) {\n destination = destination || {};\n var value, property;\n if (!source) {\n return destination;\n }\n for (property in source) {\n value = source[property];\n if (value !== undefined) {\n destination[property] = value;\n }\n }\n return destination;\n}\n","export default function(eccent, sinphi, cosphi) {\n var con = eccent * sinphi;\n return cosphi / (Math.sqrt(1 - con * con));\n}","export default function(x) {\n return x<0 ? -1 : 1;\n}","\nimport {TWO_PI, SPI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, phi, sinphi) {\n var con = eccent * sinphi;\n var com = 0.5 * eccent;\n con = Math.pow(((1 - con) / (1 + con)), com);\n return (Math.tan(0.5 * (HALF_PI - phi)) / con);\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, ts) {\n var eccnth = 0.5 * eccent;\n var con, dphi;\n var phi = HALF_PI - 2 * Math.atan(ts);\n for (var i = 0; i <= 15; i++) {\n con = eccent * Math.sin(phi);\n dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n //console.log(\"phi2z has NoConvergence\");\n return -9999;\n}\n","export function init() {\n //no-op for longlat\n}\n\nfunction identity(pt) {\n return pt;\n}\nexport {identity as forward};\nexport {identity as inverse};\nexport var names = [\"longlat\", \"identity\"];\nexport default {\n init: init,\n forward: identity,\n inverse: identity,\n names: names\n};\n","import merc from \"./projections/merc\";\nimport longlat from \"./projections/longlat\";\nvar projs = [merc, longlat];\nvar names = {};\nvar projStore = [];\n\nfunction add(proj, i) {\n var len = projStore.length;\n if (!proj.names) {\n console.log(i);\n return true;\n }\n projStore[len] = proj;\n proj.names.forEach(function(n) {\n names[n.toLowerCase()] = len;\n });\n return this;\n}\n\nexport {add};\n\nexport function get(name) {\n if (!name) {\n return false;\n }\n var n = name.toLowerCase();\n if (typeof names[n] !== 'undefined' && projStore[names[n]]) {\n return projStore[names[n]];\n }\n}\n\nexport function start() {\n projs.forEach(add);\n}\nexport default {\n start: start,\n add: add,\n get: get\n};\n","import msfnz from '../common/msfnz';\n\nimport adjust_lon from '../common/adjust_lon';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport {FORTPI, R2D, EPSLN, HALF_PI} from '../constants/values';\nexport function init() {\n var con = this.b / this.a;\n this.es = 1 - con * con;\n if(!('x0' in this)){\n this.x0 = 0;\n }\n if(!('y0' in this)){\n this.y0 = 0;\n }\n this.e = Math.sqrt(this.es);\n if (this.lat_ts) {\n if (this.sphere) {\n this.k0 = Math.cos(this.lat_ts);\n }\n else {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n }\n else {\n if (!this.k0) {\n if (this.k) {\n this.k0 = this.k;\n }\n else {\n this.k0 = 1;\n }\n }\n }\n}\n\n/* Mercator forward equations--mapping lat,long to x,y\n --------------------------------------------------*/\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n // convert to radians\n if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {\n return null;\n }\n\n var x, y;\n if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n return null;\n }\n else {\n if (this.sphere) {\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\n }\n else {\n var sinphi = Math.sin(lat);\n var ts = tsfnz(this.e, lat, sinphi);\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 - this.a * this.k0 * Math.log(ts);\n }\n p.x = x;\n p.y = y;\n return p;\n }\n}\n\n/* Mercator inverse equations--mapping x,y to lat/long\n --------------------------------------------------*/\nexport function inverse(p) {\n\n var x = p.x - this.x0;\n var y = p.y - this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));\n }\n else {\n var ts = Math.exp(-y / (this.a * this.k0));\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n lon = adjust_lon(this.long0 + x / (this.a * this.k0));\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Mercator\", \"Popular Visualisation Pseudo Mercator\", \"Mercator_1SP\", \"Mercator_Auxiliary_Sphere\", \"merc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","var exports = {};\nexport {exports as default};\nexports.MERIT = {\n a: 6378137.0,\n rf: 298.257,\n ellipseName: \"MERIT 1983\"\n};\n\nexports.SGS85 = {\n a: 6378136.0,\n rf: 298.257,\n ellipseName: \"Soviet Geodetic System 85\"\n};\n\nexports.GRS80 = {\n a: 6378137.0,\n rf: 298.257222101,\n ellipseName: \"GRS 1980(IUGG, 1980)\"\n};\n\nexports.IAU76 = {\n a: 6378140.0,\n rf: 298.257,\n ellipseName: \"IAU 1976\"\n};\n\nexports.airy = {\n a: 6377563.396,\n b: 6356256.910,\n ellipseName: \"Airy 1830\"\n};\n\nexports.APL4 = {\n a: 6378137,\n rf: 298.25,\n ellipseName: \"Appl. Physics. 1965\"\n};\n\nexports.NWL9D = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"Naval Weapons Lab., 1965\"\n};\n\nexports.mod_airy = {\n a: 6377340.189,\n b: 6356034.446,\n ellipseName: \"Modified Airy\"\n};\n\nexports.andrae = {\n a: 6377104.43,\n rf: 300.0,\n ellipseName: \"Andrae 1876 (Den., Iclnd.)\"\n};\n\nexports.aust_SA = {\n a: 6378160.0,\n rf: 298.25,\n ellipseName: \"Australian Natl & S. Amer. 1969\"\n};\n\nexports.GRS67 = {\n a: 6378160.0,\n rf: 298.2471674270,\n ellipseName: \"GRS 67(IUGG 1967)\"\n};\n\nexports.bessel = {\n a: 6377397.155,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841\"\n};\n\nexports.bess_nam = {\n a: 6377483.865,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841 (Namibia)\"\n};\n\nexports.clrk66 = {\n a: 6378206.4,\n b: 6356583.8,\n ellipseName: \"Clarke 1866\"\n};\n\nexports.clrk80 = {\n a: 6378249.145,\n rf: 293.4663,\n ellipseName: \"Clarke 1880 mod.\"\n};\n\nexports.clrk80ign = {\n a: 6378249.2,\n b: 6356515,\n rf: 293.4660213,\n ellipseName: \"Clarke 1880 (IGN)\"\n};\n\nexports.clrk58 = {\n a: 6378293.645208759,\n rf: 294.2606763692654,\n ellipseName: \"Clarke 1858\"\n};\n\nexports.CPM = {\n a: 6375738.7,\n rf: 334.29,\n ellipseName: \"Comm. des Poids et Mesures 1799\"\n};\n\nexports.delmbr = {\n a: 6376428.0,\n rf: 311.5,\n ellipseName: \"Delambre 1810 (Belgium)\"\n};\n\nexports.engelis = {\n a: 6378136.05,\n rf: 298.2566,\n ellipseName: \"Engelis 1985\"\n};\n\nexports.evrst30 = {\n a: 6377276.345,\n rf: 300.8017,\n ellipseName: \"Everest 1830\"\n};\n\nexports.evrst48 = {\n a: 6377304.063,\n rf: 300.8017,\n ellipseName: \"Everest 1948\"\n};\n\nexports.evrst56 = {\n a: 6377301.243,\n rf: 300.8017,\n ellipseName: \"Everest 1956\"\n};\n\nexports.evrst69 = {\n a: 6377295.664,\n rf: 300.8017,\n ellipseName: \"Everest 1969\"\n};\n\nexports.evrstSS = {\n a: 6377298.556,\n rf: 300.8017,\n ellipseName: \"Everest (Sabah & Sarawak)\"\n};\n\nexports.fschr60 = {\n a: 6378166.0,\n rf: 298.3,\n ellipseName: \"Fischer (Mercury Datum) 1960\"\n};\n\nexports.fschr60m = {\n a: 6378155.0,\n rf: 298.3,\n ellipseName: \"Fischer 1960\"\n};\n\nexports.fschr68 = {\n a: 6378150.0,\n rf: 298.3,\n ellipseName: \"Fischer 1968\"\n};\n\nexports.helmert = {\n a: 6378200.0,\n rf: 298.3,\n ellipseName: \"Helmert 1906\"\n};\n\nexports.hough = {\n a: 6378270.0,\n rf: 297.0,\n ellipseName: \"Hough\"\n};\n\nexports.intl = {\n a: 6378388.0,\n rf: 297.0,\n ellipseName: \"International 1909 (Hayford)\"\n};\n\nexports.kaula = {\n a: 6378163.0,\n rf: 298.24,\n ellipseName: \"Kaula 1961\"\n};\n\nexports.lerch = {\n a: 6378139.0,\n rf: 298.257,\n ellipseName: \"Lerch 1979\"\n};\n\nexports.mprts = {\n a: 6397300.0,\n rf: 191.0,\n ellipseName: \"Maupertius 1738\"\n};\n\nexports.new_intl = {\n a: 6378157.5,\n b: 6356772.2,\n ellipseName: \"New International 1967\"\n};\n\nexports.plessis = {\n a: 6376523.0,\n rf: 6355863.0,\n ellipseName: \"Plessis 1817 (France)\"\n};\n\nexports.krass = {\n a: 6378245.0,\n rf: 298.3,\n ellipseName: \"Krassovsky, 1942\"\n};\n\nexports.SEasia = {\n a: 6378155.0,\n b: 6356773.3205,\n ellipseName: \"Southeast Asia\"\n};\n\nexports.walbeck = {\n a: 6376896.0,\n b: 6355834.8467,\n ellipseName: \"Walbeck\"\n};\n\nexports.WGS60 = {\n a: 6378165.0,\n rf: 298.3,\n ellipseName: \"WGS 60\"\n};\n\nexports.WGS66 = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"WGS 66\"\n};\n\nexports.WGS7 = {\n a: 6378135.0,\n rf: 298.26,\n ellipseName: \"WGS 72\"\n};\n\nexport var WGS84 = exports.WGS84 = {\n a: 6378137.0,\n rf: 298.257223563,\n ellipseName: \"WGS 84\"\n};\n\nexports.sphere = {\n a: 6370997.0,\n b: 6370997.0,\n ellipseName: \"Normal Sphere (r=6370997)\"\n};\n","var datums = {\n wgs84: {\n towgs84: \"0,0,0\",\n ellipse: \"WGS84\",\n datumName: \"WGS84\"\n },\n ch1903: {\n towgs84: \"674.374,15.056,405.346\",\n ellipse: \"bessel\",\n datumName: \"swiss\"\n },\n ggrs87: {\n towgs84: \"-199.87,74.79,246.62\",\n ellipse: \"GRS80\",\n datumName: \"Greek_Geodetic_Reference_System_1987\"\n },\n nad83: {\n towgs84: \"0,0,0\",\n ellipse: \"GRS80\",\n datumName: \"North_American_Datum_1983\"\n },\n nad27: {\n nadgrids: \"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",\n ellipse: \"clrk66\",\n datumName: \"North_American_Datum_1927\"\n },\n potsdam: {\n towgs84: \"598.1,73.7,418.2,0.202,0.045,-2.455,6.7\",\n ellipse: \"bessel\",\n datumName: \"Potsdam Rauenberg 1950 DHDN\"\n },\n carthage: {\n towgs84: \"-263.0,6.0,431.0\",\n ellipse: \"clark80\",\n datumName: \"Carthage 1934 Tunisia\"\n },\n hermannskogel: {\n towgs84: \"577.326,90.129,463.919,5.137,1.474,5.297,2.4232\",\n ellipse: \"bessel\",\n datumName: \"Hermannskogel\"\n },\n mgi: {\n towgs84: \"577.326,90.129,463.919,5.137,1.474,5.297,2.4232\",\n ellipse: \"bessel\",\n datumName: \"Militar-Geographische Institut\",\n },\n osni52: {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"airy\",\n datumName: \"Irish National\"\n },\n ire65: {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"mod_airy\",\n datumName: \"Ireland 1965\"\n },\n rassadiran: {\n towgs84: \"-133.63,-157.5,-158.62\",\n ellipse: \"intl\",\n datumName: \"Rassadiran\"\n },\n nzgd49: {\n towgs84: \"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",\n ellipse: \"intl\",\n datumName: \"New Zealand Geodetic Datum 1949\"\n },\n osgb36: {\n towgs84: \"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",\n ellipse: \"airy\",\n datumName: \"Ordnance Survey of Great Britain 1936\"\n },\n s_jtsk: {\n towgs84: \"589,76,480\",\n ellipse: 'bessel',\n datumName: 'S-JTSK (Ferro)'\n },\n beduaram: {\n towgs84: '-106,-87,188',\n ellipse: 'clrk80',\n datumName: 'Beduaram'\n },\n gunung_segara: {\n towgs84: '-403,684,41',\n ellipse: 'bessel',\n datumName: 'Gunung Segara Jakarta'\n },\n rnb72: {\n towgs84: \"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1\",\n ellipse: \"intl\",\n datumName: \"Reseau National Belge 1972\"\n }\n};\n\nfor (var key in datums) {\n var datum = datums[key];\n datums[datum.datumName] = datum;\n}\n\nexport default datums;\n","import {PJD_3PARAM, PJD_7PARAM, PJD_GRIDSHIFT, PJD_WGS84, PJD_NODATUM, SEC_TO_RAD} from './constants/values';\n\nfunction datum(datumCode, datum_params, a, b, es, ep2, nadgrids) {\n var out = {};\n\n if (datumCode === undefined || datumCode === 'none') {\n out.datum_type = PJD_NODATUM;\n } else {\n out.datum_type = PJD_WGS84;\n }\n\n if (datum_params) {\n out.datum_params = datum_params.map(parseFloat);\n if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {\n out.datum_type = PJD_3PARAM;\n }\n if (out.datum_params.length > 3) {\n if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {\n out.datum_type = PJD_7PARAM;\n out.datum_params[3] *= SEC_TO_RAD;\n out.datum_params[4] *= SEC_TO_RAD;\n out.datum_params[5] *= SEC_TO_RAD;\n out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;\n }\n }\n }\n\n if (nadgrids) {\n out.datum_type = PJD_GRIDSHIFT;\n out.grids = nadgrids;\n }\n out.a = a; //datum object also uses these values\n out.b = b;\n out.es = es;\n out.ep2 = ep2;\n return out;\n}\n\nexport default datum;\n","/**\n * Resources for details of NTv2 file formats:\n * - https://web.archive.org/web/20140127204822if_/http://www.mgs.gov.on.ca:80/stdprodconsume/groups/content/@mgs/@iandit/documents/resourcelist/stel02_047447.pdf\n * - http://mimaka.com/help/gs/html/004_NTV2%20Data%20Format.htm\n */\n\nvar loadedNadgrids = {};\n\n/**\n * Load a binary NTv2 file (.gsb) to a key that can be used in a proj string like +nadgrids=. Pass the NTv2 file\n * as an ArrayBuffer.\n */\nexport default function nadgrid(key, data) {\n var view = new DataView(data);\n var isLittleEndian = detectLittleEndian(view);\n var header = readHeader(view, isLittleEndian);\n var subgrids = readSubgrids(view, header, isLittleEndian);\n var nadgrid = {header: header, subgrids: subgrids};\n loadedNadgrids[key] = nadgrid;\n return nadgrid;\n}\n\n/**\n * Given a proj4 value for nadgrids, return an array of loaded grids\n */\nexport function getNadgrids(nadgrids) {\n // Format details: http://proj.maptools.org/gen_parms.html\n if (nadgrids === undefined) { return null; }\n var grids = nadgrids.split(',');\n return grids.map(parseNadgridString);\n}\n\nfunction parseNadgridString(value) {\n if (value.length === 0) {\n return null;\n }\n var optional = value[0] === '@';\n if (optional) {\n value = value.slice(1);\n }\n if (value === 'null') {\n return {name: 'null', mandatory: !optional, grid: null, isNull: true};\n }\n return {\n name: value,\n mandatory: !optional,\n grid: loadedNadgrids[value] || null,\n isNull: false\n };\n}\n\nfunction secondsToRadians(seconds) {\n return (seconds / 3600) * Math.PI / 180;\n}\n\nfunction detectLittleEndian(view) {\n var nFields = view.getInt32(8, false);\n if (nFields === 11) {\n return false;\n }\n nFields = view.getInt32(8, true);\n if (nFields !== 11) {\n console.warn('Failed to detect nadgrid endian-ness, defaulting to little-endian');\n }\n return true;\n}\n\nfunction readHeader(view, isLittleEndian) {\n return {\n nFields: view.getInt32(8, isLittleEndian),\n nSubgridFields: view.getInt32(24, isLittleEndian),\n nSubgrids: view.getInt32(40, isLittleEndian),\n shiftType: decodeString(view, 56, 56 + 8).trim(),\n fromSemiMajorAxis: view.getFloat64(120, isLittleEndian),\n fromSemiMinorAxis: view.getFloat64(136, isLittleEndian),\n toSemiMajorAxis: view.getFloat64(152, isLittleEndian),\n toSemiMinorAxis: view.getFloat64(168, isLittleEndian),\n };\n}\n\nfunction decodeString(view, start, end) {\n return String.fromCharCode.apply(null, new Uint8Array(view.buffer.slice(start, end)));\n}\n\nfunction readSubgrids(view, header, isLittleEndian) {\n var gridOffset = 176;\n var grids = [];\n for (var i = 0; i < header.nSubgrids; i++) {\n var subHeader = readGridHeader(view, gridOffset, isLittleEndian);\n var nodes = readGridNodes(view, gridOffset, subHeader, isLittleEndian);\n var lngColumnCount = Math.round(\n 1 + (subHeader.upperLongitude - subHeader.lowerLongitude) / subHeader.longitudeInterval);\n var latColumnCount = Math.round(\n 1 + (subHeader.upperLatitude - subHeader.lowerLatitude) / subHeader.latitudeInterval);\n // Proj4 operates on radians whereas the coordinates are in seconds in the grid\n grids.push({\n ll: [secondsToRadians(subHeader.lowerLongitude), secondsToRadians(subHeader.lowerLatitude)],\n del: [secondsToRadians(subHeader.longitudeInterval), secondsToRadians(subHeader.latitudeInterval)],\n lim: [lngColumnCount, latColumnCount],\n count: subHeader.gridNodeCount,\n cvs: mapNodes(nodes)\n });\n gridOffset += 176 + subHeader.gridNodeCount * 16;\n }\n return grids;\n}\n\nfunction mapNodes(nodes) {\n return nodes.map(function (r) {return [secondsToRadians(r.longitudeShift), secondsToRadians(r.latitudeShift)];});\n}\n\nfunction readGridHeader(view, offset, isLittleEndian) {\n return {\n name: decodeString(view, offset + 8, offset + 16).trim(),\n parent: decodeString(view, offset + 24, offset + 24 + 8).trim(),\n lowerLatitude: view.getFloat64(offset + 72, isLittleEndian),\n upperLatitude: view.getFloat64(offset + 88, isLittleEndian),\n lowerLongitude: view.getFloat64(offset + 104, isLittleEndian),\n upperLongitude: view.getFloat64(offset + 120, isLittleEndian),\n latitudeInterval: view.getFloat64(offset + 136, isLittleEndian),\n longitudeInterval: view.getFloat64(offset + 152, isLittleEndian),\n gridNodeCount: view.getInt32(offset + 168, isLittleEndian)\n };\n}\n\nfunction readGridNodes(view, offset, gridHeader, isLittleEndian) {\n var nodesOffset = offset + 176;\n var gridRecordLength = 16;\n var gridShiftRecords = [];\n for (var i = 0; i < gridHeader.gridNodeCount; i++) {\n var record = {\n latitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength, isLittleEndian),\n longitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength + 4, isLittleEndian),\n latitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 8, isLittleEndian),\n longitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 12, isLittleEndian),\n };\n gridShiftRecords.push(record);\n }\n return gridShiftRecords;\n}\n","import parseCode from './parseCode';\nimport extend from './extend';\nimport projections from './projections';\nimport {sphere as dc_sphere, eccentricity as dc_eccentricity} from './deriveConstants';\nimport Datum from './constants/Datum';\nimport datum from './datum';\nimport match from './match';\nimport {getNadgrids} from \"./nadgrid\";\n\nfunction Projection(srsCode,callback) {\n if (!(this instanceof Projection)) {\n return new Projection(srsCode);\n }\n callback = callback || function(error){\n if(error){\n throw error;\n }\n };\n var json = parseCode(srsCode);\n if(typeof json !== 'object'){\n callback('Could not parse to valid json: ' + srsCode);\n return;\n }\n var ourProj = Projection.projections.get(json.projName);\n if(!ourProj){\n callback('Could not get projection name from: ' + srsCode);\n return;\n }\n if (json.datumCode && json.datumCode !== 'none') {\n var datumDef = match(Datum, json.datumCode);\n if (datumDef) {\n json.datum_params = json.datum_params || (datumDef.towgs84 ? datumDef.towgs84.split(',') : null);\n json.ellps = datumDef.ellipse;\n json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;\n }\n }\n json.k0 = json.k0 || 1.0;\n json.axis = json.axis || 'enu';\n json.ellps = json.ellps || 'wgs84';\n json.lat1 = json.lat1 || json.lat0; // Lambert_Conformal_Conic_1SP, for example, needs this\n\n var sphere_ = dc_sphere(json.a, json.b, json.rf, json.ellps, json.sphere);\n var ecc = dc_eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);\n var nadgrids = getNadgrids(json.nadgrids);\n var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2,\n nadgrids);\n\n extend(this, json); // transfer everything over from the projection because we don't know what we'll need\n extend(this, ourProj); // transfer all the methods from the projection\n\n // copy the 4 things over we calculated in deriveConstants.sphere\n this.a = sphere_.a;\n this.b = sphere_.b;\n this.rf = sphere_.rf;\n this.sphere = sphere_.sphere;\n\n // copy the 3 things we calculated in deriveConstants.eccentricity\n this.es = ecc.es;\n this.e = ecc.e;\n this.ep2 = ecc.ep2;\n\n // add in the datum object\n this.datum = datumObj;\n\n // init the projection\n this.init();\n\n // legecy callback from back in the day when it went to spatialreference.org\n callback(null, this);\n\n}\nProjection.projections = projections;\nProjection.projections.start();\nexport default Projection;\n","import {SIXTH, RA4, RA6, EPSLN} from './constants/values';\nimport {default as Ellipsoid, WGS84} from './constants/Ellipsoid';\nimport match from './match';\n\nexport function eccentricity(a, b, rf, R_A) {\n var a2 = a * a; // used in geocentric\n var b2 = b * b; // used in geocentric\n var es = (a2 - b2) / a2; // e ^ 2\n var e = 0;\n if (R_A) {\n a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));\n a2 = a * a;\n es = 0;\n } else {\n e = Math.sqrt(es); // eccentricity\n }\n var ep2 = (a2 - b2) / b2; // used in geocentric\n return {\n es: es,\n e: e,\n ep2: ep2\n };\n}\nexport function sphere(a, b, rf, ellps, sphere) {\n if (!a) { // do we have an ellipsoid?\n var ellipse = match(Ellipsoid, ellps);\n if (!ellipse) {\n ellipse = WGS84;\n }\n a = ellipse.a;\n b = ellipse.b;\n rf = ellipse.rf;\n }\n\n if (rf && !b) {\n b = (1.0 - 1.0 / rf) * a;\n }\n if (rf === 0 || Math.abs(a - b) < EPSLN) {\n sphere = true;\n b = a;\n }\n return {\n a: a,\n b: b,\n rf: rf,\n sphere: sphere\n };\n}\n","'use strict';\nimport {PJD_3PARAM, PJD_7PARAM, HALF_PI} from './constants/values';\nexport function compareDatums(source, dest) {\n if (source.datum_type !== dest.datum_type) {\n return false; // false, datums are not equal\n } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {\n // the tolerance for es is to ensure that GRS80 and WGS84\n // are considered identical\n return false;\n } else if (source.datum_type === PJD_3PARAM) {\n return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);\n } else if (source.datum_type === PJD_7PARAM) {\n return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);\n } else {\n return true; // datums are equal\n }\n} // cs_compare_datums()\n\n/*\n * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates\n * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),\n * according to the current ellipsoid parameters.\n *\n * Latitude : Geodetic latitude in radians (input)\n * Longitude : Geodetic longitude in radians (input)\n * Height : Geodetic height, in meters (input)\n * X : Calculated Geocentric X coordinate, in meters (output)\n * Y : Calculated Geocentric Y coordinate, in meters (output)\n * Z : Calculated Geocentric Z coordinate, in meters (output)\n *\n */\nexport function geodeticToGeocentric(p, es, a) {\n var Longitude = p.x;\n var Latitude = p.y;\n var Height = p.z ? p.z : 0; //Z value not always supplied\n\n var Rn; /* Earth radius at location */\n var Sin_Lat; /* Math.sin(Latitude) */\n var Sin2_Lat; /* Square of Math.sin(Latitude) */\n var Cos_Lat; /* Math.cos(Latitude) */\n\n /*\n ** Don't blow up if Latitude is just a little out of the value\n ** range as it may just be a rounding issue. Also removed longitude\n ** test, it should be wrapped by Math.cos() and Math.sin(). NFW for PROJ.4, Sep/2001.\n */\n if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {\n Latitude = -HALF_PI;\n } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n Latitude = HALF_PI;\n } else if (Latitude < -HALF_PI) {\n /* Latitude out of range */\n //..reportError('geocent:lat out of range:' + Latitude);\n return { x: -Infinity, y: -Infinity, z: p.z };\n } else if (Latitude > HALF_PI) {\n /* Latitude out of range */\n return { x: Infinity, y: Infinity, z: p.z };\n }\n\n if (Longitude > Math.PI) {\n Longitude -= (2 * Math.PI);\n }\n Sin_Lat = Math.sin(Latitude);\n Cos_Lat = Math.cos(Latitude);\n Sin2_Lat = Sin_Lat * Sin_Lat;\n Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));\n return {\n x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),\n y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),\n z: ((Rn * (1 - es)) + Height) * Sin_Lat\n };\n} // cs_geodetic_to_geocentric()\n\nexport function geocentricToGeodetic(p, es, a, b) {\n /* local defintions and variables */\n /* end-criterium of loop, accuracy of sin(Latitude) */\n var genau = 1e-12;\n var genau2 = (genau * genau);\n var maxiter = 30;\n\n var P; /* distance between semi-minor axis and location */\n var RR; /* distance between center and location */\n var CT; /* sin of geocentric latitude */\n var ST; /* cos of geocentric latitude */\n var RX;\n var RK;\n var RN; /* Earth radius at location */\n var CPHI0; /* cos of start or old geodetic latitude in iterations */\n var SPHI0; /* sin of start or old geodetic latitude in iterations */\n var CPHI; /* cos of searched geodetic latitude */\n var SPHI; /* sin of searched geodetic latitude */\n var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */\n var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */\n\n var X = p.x;\n var Y = p.y;\n var Z = p.z ? p.z : 0.0; //Z value not always supplied\n var Longitude;\n var Latitude;\n var Height;\n\n P = Math.sqrt(X * X + Y * Y);\n RR = Math.sqrt(X * X + Y * Y + Z * Z);\n\n /* special cases for latitude and longitude */\n if (P / a < genau) {\n\n /* special case, if P=0. (X=0., Y=0.) */\n Longitude = 0.0;\n\n /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis\n * of ellipsoid (=center of mass), Latitude becomes PI/2 */\n if (RR / a < genau) {\n Latitude = HALF_PI;\n Height = -b;\n return {\n x: p.x,\n y: p.y,\n z: p.z\n };\n }\n } else {\n /* ellipsoidal (geodetic) longitude\n * interval: -PI < Longitude <= +PI */\n Longitude = Math.atan2(Y, X);\n }\n\n /* --------------------------------------------------------------\n * Following iterative algorithm was developped by\n * \"Institut for Erdmessung\", University of Hannover, July 1988.\n * Internet: www.ife.uni-hannover.de\n * Iterative computation of CPHI,SPHI and Height.\n * Iteration of CPHI and SPHI to 10**-12 radian resp.\n * 2*10**-7 arcsec.\n * --------------------------------------------------------------\n */\n CT = Z / RR;\n ST = P / RR;\n RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);\n CPHI0 = ST * (1.0 - es) * RX;\n SPHI0 = CT * RX;\n iter = 0;\n\n /* loop to find sin(Latitude) resp. Latitude\n * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */\n do {\n iter++;\n RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);\n\n /* ellipsoidal (geodetic) height */\n Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);\n\n RK = es * RN / (RN + Height);\n RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);\n CPHI = ST * (1.0 - RK) * RX;\n SPHI = CT * RX;\n SDPHI = SPHI * CPHI0 - CPHI * SPHI0;\n CPHI0 = CPHI;\n SPHI0 = SPHI;\n }\n while (SDPHI * SDPHI > genau2 && iter < maxiter);\n\n /* ellipsoidal (geodetic) latitude */\n Latitude = Math.atan(SPHI / Math.abs(CPHI));\n return {\n x: Longitude,\n y: Latitude,\n z: Height\n };\n} // cs_geocentric_to_geodetic()\n\n/****************************************************************/\n// pj_geocentic_to_wgs84( p )\n// p = point to transform in geocentric coordinates (x,y,z)\n\n\n/** point object, nothing fancy, just allows values to be\n passed back and forth by reference rather than by value.\n Other point classes may be used as long as they have\n x and y properties, which will get modified in the transform method.\n*/\nexport function geocentricToWgs84(p, datum_type, datum_params) {\n\n if (datum_type === PJD_3PARAM) {\n // if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: p.x + datum_params[0],\n y: p.y + datum_params[1],\n z: p.z + datum_params[2],\n };\n } else if (datum_type === PJD_7PARAM) {\n var Dx_BF = datum_params[0];\n var Dy_BF = datum_params[1];\n var Dz_BF = datum_params[2];\n var Rx_BF = datum_params[3];\n var Ry_BF = datum_params[4];\n var Rz_BF = datum_params[5];\n var M_BF = datum_params[6];\n // if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,\n y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,\n z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF\n };\n }\n} // cs_geocentric_to_wgs84\n\n/****************************************************************/\n// pj_geocentic_from_wgs84()\n// coordinate system definition,\n// point to transform in geocentric coordinates (x,y,z)\nexport function geocentricFromWgs84(p, datum_type, datum_params) {\n\n if (datum_type === PJD_3PARAM) {\n //if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: p.x - datum_params[0],\n y: p.y - datum_params[1],\n z: p.z - datum_params[2],\n };\n\n } else if (datum_type === PJD_7PARAM) {\n var Dx_BF = datum_params[0];\n var Dy_BF = datum_params[1];\n var Dz_BF = datum_params[2];\n var Rx_BF = datum_params[3];\n var Ry_BF = datum_params[4];\n var Rz_BF = datum_params[5];\n var M_BF = datum_params[6];\n var x_tmp = (p.x - Dx_BF) / M_BF;\n var y_tmp = (p.y - Dy_BF) / M_BF;\n var z_tmp = (p.z - Dz_BF) / M_BF;\n //if( x[io] === HUGE_VAL )\n // continue;\n\n return {\n x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,\n y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,\n z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp\n };\n } //cs_geocentric_from_wgs84()\n}\n","import {\n PJD_3PARAM,\n PJD_7PARAM,\n PJD_GRIDSHIFT,\n PJD_NODATUM,\n R2D,\n SRS_WGS84_ESQUARED,\n SRS_WGS84_SEMIMAJOR, SRS_WGS84_SEMIMINOR\n} from './constants/values';\n\nimport {geodeticToGeocentric, geocentricToGeodetic, geocentricToWgs84, geocentricFromWgs84, compareDatums} from './datumUtils';\nimport adjust_lon from \"./common/adjust_lon\";\nfunction checkParams(type) {\n return (type === PJD_3PARAM || type === PJD_7PARAM);\n}\n\nexport default function(source, dest, point) {\n // Short cut if the datums are identical.\n if (compareDatums(source, dest)) {\n return point; // in this case, zero is sucess,\n // whereas cs_compare_datums returns 1 to indicate TRUE\n // confusing, should fix this\n }\n\n // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest\n if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {\n return point;\n }\n\n // If this datum requires grid shifts, then apply it to geodetic coordinates.\n var source_a = source.a;\n var source_es = source.es;\n if (source.datum_type === PJD_GRIDSHIFT) {\n var gridShiftCode = applyGridShift(source, false, point);\n if (gridShiftCode !== 0) {\n return undefined;\n }\n source_a = SRS_WGS84_SEMIMAJOR;\n source_es = SRS_WGS84_ESQUARED;\n }\n\n var dest_a = dest.a;\n var dest_b = dest.b;\n var dest_es = dest.es;\n if (dest.datum_type === PJD_GRIDSHIFT) {\n dest_a = SRS_WGS84_SEMIMAJOR;\n dest_b = SRS_WGS84_SEMIMINOR;\n dest_es = SRS_WGS84_ESQUARED;\n }\n\n // Do we need to go through geocentric coordinates?\n if (source_es === dest_es && source_a === dest_a && !checkParams(source.datum_type) && !checkParams(dest.datum_type)) {\n return point;\n }\n\n // Convert to geocentric coordinates.\n point = geodeticToGeocentric(point, source_es, source_a);\n // Convert between datums\n if (checkParams(source.datum_type)) {\n point = geocentricToWgs84(point, source.datum_type, source.datum_params);\n }\n if (checkParams(dest.datum_type)) {\n point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);\n }\n point = geocentricToGeodetic(point, dest_es, dest_a, dest_b);\n\n if (dest.datum_type === PJD_GRIDSHIFT) {\n var destGridShiftResult = applyGridShift(dest, true, point);\n if (destGridShiftResult !== 0) {\n return undefined;\n }\n }\n\n return point;\n}\n\nexport function applyGridShift(source, inverse, point) {\n if (source.grids === null || source.grids.length === 0) {\n console.log('Grid shift grids not found');\n return -1;\n }\n var input = {x: -point.x, y: point.y};\n var output = {x: Number.NaN, y: Number.NaN};\n var onlyMandatoryGrids = false;\n var attemptedGrids = [];\n outer:\n for (var i = 0; i < source.grids.length; i++) {\n var grid = source.grids[i];\n attemptedGrids.push(grid.name);\n if (grid.isNull) {\n output = input;\n break;\n }\n onlyMandatoryGrids = grid.mandatory;\n if (grid.grid === null) {\n if (grid.mandatory) {\n console.log(\"Unable to find mandatory grid '\" + grid.name + \"'\");\n return -1;\n }\n continue;\n }\n var subgrids = grid.grid.subgrids;\n for (var j = 0, jj = subgrids.length; j < jj; j++) {\n var subgrid = subgrids[j];\n // skip tables that don't match our point at all\n var epsilon = (Math.abs(subgrid.del[1]) + Math.abs(subgrid.del[0])) / 10000.0;\n var minX = subgrid.ll[0] - epsilon;\n var minY = subgrid.ll[1] - epsilon;\n var maxX = subgrid.ll[0] + (subgrid.lim[0] - 1) * subgrid.del[0] + epsilon;\n var maxY = subgrid.ll[1] + (subgrid.lim[1] - 1) * subgrid.del[1] + epsilon;\n if (minY > input.y || minX > input.x || maxY < input.y || maxX < input.x ) {\n continue;\n }\n output = applySubgridShift(input, inverse, subgrid);\n if (!isNaN(output.x)) {\n break outer;\n }\n }\n }\n if (isNaN(output.x)) {\n console.log(\"Failed to find a grid shift table for location '\"+\n -input.x * R2D + \" \" + input.y * R2D + \" tried: '\" + attemptedGrids + \"'\");\n return -1;\n }\n point.x = -output.x;\n point.y = output.y;\n return 0;\n}\n\nfunction applySubgridShift(pin, inverse, ct) {\n var val = {x: Number.NaN, y: Number.NaN};\n if (isNaN(pin.x)) { return val; }\n var tb = {x: pin.x, y: pin.y};\n tb.x -= ct.ll[0];\n tb.y -= ct.ll[1];\n tb.x = adjust_lon(tb.x - Math.PI) + Math.PI;\n var t = nadInterpolate(tb, ct);\n if (inverse) {\n if (isNaN(t.x)) {\n return val;\n }\n t.x = tb.x - t.x;\n t.y = tb.y - t.y;\n var i = 9, tol = 1e-12;\n var dif, del;\n do {\n del = nadInterpolate(t, ct);\n if (isNaN(del.x)) {\n console.log(\"Inverse grid shift iteration failed, presumably at grid edge. Using first approximation.\");\n break;\n }\n dif = {x: tb.x - (del.x + t.x), y: tb.y - (del.y + t.y)};\n t.x += dif.x;\n t.y += dif.y;\n } while (i-- && Math.abs(dif.x) > tol && Math.abs(dif.y) > tol);\n if (i < 0) {\n console.log(\"Inverse grid shift iterator failed to converge.\");\n return val;\n }\n val.x = adjust_lon(t.x + ct.ll[0]);\n val.y = t.y + ct.ll[1];\n } else {\n if (!isNaN(t.x)) {\n val.x = pin.x + t.x;\n val.y = pin.y + t.y;\n }\n }\n return val;\n}\n\nfunction nadInterpolate(pin, ct) {\n var t = {x: pin.x / ct.del[0], y: pin.y / ct.del[1]};\n var indx = {x: Math.floor(t.x), y: Math.floor(t.y)};\n var frct = {x: t.x - 1.0 * indx.x, y: t.y - 1.0 * indx.y};\n var val= {x: Number.NaN, y: Number.NaN};\n var inx;\n if (indx.x < 0 || indx.x >= ct.lim[0]) {\n return val;\n }\n if (indx.y < 0 || indx.y >= ct.lim[1]) {\n return val;\n }\n inx = (indx.y * ct.lim[0]) + indx.x;\n var f00 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx++;\n var f10= {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx += ct.lim[0];\n var f11 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx--;\n var f01 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n var m11 = frct.x * frct.y, m10 = frct.x * (1.0 - frct.y),\n m00 = (1.0 - frct.x) * (1.0 - frct.y), m01 = (1.0 - frct.x) * frct.y;\n val.x = (m00 * f00.x + m10 * f10.x + m01 * f01.x + m11 * f11.x);\n val.y = (m00 * f00.y + m10 * f10.y + m01 * f01.y + m11 * f11.y);\n return val;\n}\n","export default function(crs, denorm, point) {\n var xin = point.x,\n yin = point.y,\n zin = point.z || 0.0;\n var v, t, i;\n var out = {};\n for (i = 0; i < 3; i++) {\n if (denorm && i === 2 && point.z === undefined) {\n continue;\n }\n if (i === 0) {\n v = xin;\n if (\"ew\".indexOf(crs.axis[i]) !== -1) {\n t = 'x';\n } else {\n t = 'y';\n }\n\n }\n else if (i === 1) {\n v = yin;\n if (\"ns\".indexOf(crs.axis[i]) !== -1) {\n t = 'y';\n } else {\n t = 'x';\n }\n }\n else {\n v = zin;\n t = 'z';\n }\n switch (crs.axis[i]) {\n case 'e':\n out[t] = v;\n break;\n case 'w':\n out[t] = -v;\n break;\n case 'n':\n out[t] = v;\n break;\n case 's':\n out[t] = -v;\n break;\n case 'u':\n if (point[t] !== undefined) {\n out.z = v;\n }\n break;\n case 'd':\n if (point[t] !== undefined) {\n out.z = -v;\n }\n break;\n default:\n //console.log(\"ERROR: unknow axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n return null;\n }\n }\n return out;\n}\n","export default function (array){\n var out = {\n x: array[0],\n y: array[1]\n };\n if (array.length>2) {\n out.z = array[2];\n }\n if (array.length>3) {\n out.m = array[3];\n }\n return out;\n}","export default function (point) {\n checkCoord(point.x);\n checkCoord(point.y);\n}\nfunction checkCoord(num) {\n if (typeof Number.isFinite === 'function') {\n if (Number.isFinite(num)) {\n return;\n }\n throw new TypeError('coordinates must be finite numbers');\n }\n if (typeof num !== 'number' || num !== num || !isFinite(num)) {\n throw new TypeError('coordinates must be finite numbers');\n }\n}\n","import {D2R, R2D, PJD_3PARAM, PJD_7PARAM, PJD_GRIDSHIFT} from './constants/values';\nimport datum_transform from './datum_transform';\nimport adjust_axis from './adjust_axis';\nimport proj from './Proj';\nimport toPoint from './common/toPoint';\nimport checkSanity from './checkSanity';\n\nfunction checkNotWGS(source, dest) {\n return (\n (source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM || source.datum.datum_type === PJD_GRIDSHIFT) && dest.datumCode !== 'WGS84') ||\n ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM || dest.datum.datum_type === PJD_GRIDSHIFT) && source.datumCode !== 'WGS84');\n}\n\nexport default function transform(source, dest, point, enforceAxis) {\n var wgs84;\n if (Array.isArray(point)) {\n point = toPoint(point);\n } else {\n // Clone the point object so inputs don't get modified\n point = {\n x: point.x,\n y: point.y,\n z: point.z,\n m: point.m\n };\n }\n var hasZ = point.z !== undefined;\n checkSanity(point);\n // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n if (source.datum && dest.datum && checkNotWGS(source, dest)) {\n wgs84 = new proj('WGS84');\n point = transform(source, wgs84, point, enforceAxis);\n source = wgs84;\n }\n // DGR, 2010/11/12\n if (enforceAxis && source.axis !== 'enu') {\n point = adjust_axis(source, false, point);\n }\n // Transform source points to long/lat, if they aren't already.\n if (source.projName === 'longlat') {\n point = {\n x: point.x * D2R,\n y: point.y * D2R,\n z: point.z || 0\n };\n } else {\n if (source.to_meter) {\n point = {\n x: point.x * source.to_meter,\n y: point.y * source.to_meter,\n z: point.z || 0\n };\n }\n point = source.inverse(point); // Convert Cartesian to longlat\n if (!point) {\n return;\n }\n }\n // Adjust for the prime meridian if necessary\n if (source.from_greenwich) {\n point.x += source.from_greenwich;\n }\n\n // Convert datums if needed, and if possible.\n point = datum_transform(source.datum, dest.datum, point);\n if (!point) {\n return;\n }\n\n // Adjust for the prime meridian if necessary\n if (dest.from_greenwich) {\n point = {\n x: point.x - dest.from_greenwich,\n y: point.y,\n z: point.z || 0\n };\n }\n\n if (dest.projName === 'longlat') {\n // convert radians to decimal degrees\n point = {\n x: point.x * R2D,\n y: point.y * R2D,\n z: point.z || 0\n };\n } else { // else project\n point = dest.forward(point);\n if (dest.to_meter) {\n point = {\n x: point.x / dest.to_meter,\n y: point.y / dest.to_meter,\n z: point.z || 0\n };\n }\n }\n\n // DGR, 2010/11/12\n if (enforceAxis && dest.axis !== 'enu') {\n return adjust_axis(dest, true, point);\n }\n\n if (point && !hasZ) {\n delete point.z;\n }\n return point;\n}\n","import proj from './Proj';\nimport transform from './transform';\nvar wgs84 = proj('WGS84');\n\nfunction transformer(from, to, coords, enforceAxis) {\n var transformedArray, out, keys;\n if (Array.isArray(coords)) {\n transformedArray = transform(from, to, coords, enforceAxis) || {x: NaN, y: NaN};\n if (coords.length > 2) {\n if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n if (typeof transformedArray.z === 'number') {\n return [transformedArray.x, transformedArray.y, transformedArray.z].concat(coords.slice(3));\n } else {\n return [transformedArray.x, transformedArray.y, coords[2]].concat(coords.slice(3));\n }\n } else {\n return [transformedArray.x, transformedArray.y].concat(coords.slice(2));\n }\n } else {\n return [transformedArray.x, transformedArray.y];\n }\n } else {\n out = transform(from, to, coords, enforceAxis);\n keys = Object.keys(coords);\n if (keys.length === 2) {\n return out;\n }\n keys.forEach(function (key) {\n if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n if (key === 'x' || key === 'y' || key === 'z') {\n return;\n }\n } else {\n if (key === 'x' || key === 'y') {\n return;\n }\n }\n out[key] = coords[key];\n });\n return out;\n }\n}\n\nfunction checkProj(item) {\n if (item instanceof proj) {\n return item;\n }\n if (item.oProj) {\n return item.oProj;\n }\n return proj(item);\n}\n\nfunction proj4(fromProj, toProj, coord) {\n fromProj = checkProj(fromProj);\n var single = false;\n var obj;\n if (typeof toProj === 'undefined') {\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n } else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {\n coord = toProj;\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n }\n toProj = checkProj(toProj);\n if (coord) {\n return transformer(fromProj, toProj, coord);\n } else {\n obj = {\n forward: function (coords, enforceAxis) {\n return transformer(fromProj, toProj, coords, enforceAxis);\n },\n inverse: function (coords, enforceAxis) {\n return transformer(toProj, fromProj, coords, enforceAxis);\n }\n };\n if (single) {\n obj.oProj = toProj;\n }\n return obj;\n }\n}\nexport default proj4;","\n\n\n/**\n * UTM zones are grouped, and assigned to one of a group of 6\n * sets.\n *\n * {int} @private\n */\nvar NUM_100K_SETS = 6;\n\n/**\n * The column letters (for easting) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n/**\n * The row letters (for northing) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\nvar A = 65; // A\nvar I = 73; // I\nvar O = 79; // O\nvar V = 86; // V\nvar Z = 90; // Z\nexport default {\n forward: forward,\n inverse: inverse,\n toPoint: toPoint\n};\n/**\n * Conversion of lat/lon to MGRS.\n *\n * @param {object} ll Object literal with lat and lon properties on a\n * WGS84 ellipsoid.\n * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n * 100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.\n * @return {string} the MGRS string for the given location and accuracy.\n */\nexport function forward(ll, accuracy) {\n accuracy = accuracy || 5; // default accuracy 1m\n return encode(LLtoUTM({\n lat: ll[1],\n lon: ll[0]\n }), accuracy);\n};\n\n/**\n * Conversion of MGRS to lat/lon.\n *\n * @param {string} mgrs MGRS string.\n * @return {array} An array with left (longitude), bottom (latitude), right\n * (longitude) and top (latitude) values in WGS84, representing the\n * bounding box for the provided MGRS reference.\n */\nexport function inverse(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n if (bbox.lat && bbox.lon) {\n return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];\n }\n return [bbox.left, bbox.bottom, bbox.right, bbox.top];\n};\n\nexport function toPoint(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n if (bbox.lat && bbox.lon) {\n return [bbox.lon, bbox.lat];\n }\n return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];\n};\n/**\n * Conversion from degrees to radians.\n *\n * @private\n * @param {number} deg the angle in degrees.\n * @return {number} the angle in radians.\n */\nfunction degToRad(deg) {\n return (deg * (Math.PI / 180.0));\n}\n\n/**\n * Conversion from radians to degrees.\n *\n * @private\n * @param {number} rad the angle in radians.\n * @return {number} the angle in degrees.\n */\nfunction radToDeg(rad) {\n return (180.0 * (rad / Math.PI));\n}\n\n/**\n * Converts a set of Longitude and Latitude co-ordinates to UTM\n * using the WGS84 ellipsoid.\n *\n * @private\n * @param {object} ll Object literal with lat and lon properties\n * representing the WGS84 coordinate to be converted.\n * @return {object} Object literal containing the UTM value with easting,\n * northing, zoneNumber and zoneLetter properties, and an optional\n * accuracy property in digits. Returns null if the conversion failed.\n */\nfunction LLtoUTM(ll) {\n var Lat = ll.lat;\n var Long = ll.lon;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var k0 = 0.9996;\n var LongOrigin;\n var eccPrimeSquared;\n var N, T, C, A, M;\n var LatRad = degToRad(Lat);\n var LongRad = degToRad(Long);\n var LongOriginRad;\n var ZoneNumber;\n // (int)\n ZoneNumber = Math.floor((Long + 180) / 6) + 1;\n\n //Make sure the longitude 180.00 is in Zone 60\n if (Long === 180) {\n ZoneNumber = 60;\n }\n\n // Special zone for Norway\n if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {\n ZoneNumber = 32;\n }\n\n // Special zones for Svalbard\n if (Lat >= 72.0 && Lat < 84.0) {\n if (Long >= 0.0 && Long < 9.0) {\n ZoneNumber = 31;\n }\n else if (Long >= 9.0 && Long < 21.0) {\n ZoneNumber = 33;\n }\n else if (Long >= 21.0 && Long < 33.0) {\n ZoneNumber = 35;\n }\n else if (Long >= 33.0 && Long < 42.0) {\n ZoneNumber = 37;\n }\n }\n\n LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin\n // in middle of\n // zone\n LongOriginRad = degToRad(LongOrigin);\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));\n T = Math.tan(LatRad) * Math.tan(LatRad);\n C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);\n A = Math.cos(LatRad) * (LongRad - LongOriginRad);\n\n M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));\n\n var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);\n\n var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));\n if (Lat < 0.0) {\n UTMNorthing += 10000000.0; //10000000 meter offset for\n // southern hemisphere\n }\n\n return {\n northing: Math.round(UTMNorthing),\n easting: Math.round(UTMEasting),\n zoneNumber: ZoneNumber,\n zoneLetter: getLetterDesignator(Lat)\n };\n}\n\n/**\n * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience\n * class where the Zone can be specified as a single string eg.\"60N\" which\n * is then broken down into the ZoneNumber and ZoneLetter.\n *\n * @private\n * @param {object} utm An object literal with northing, easting, zoneNumber\n * and zoneLetter properties. If an optional accuracy property is\n * provided (in meters), a bounding box will be returned instead of\n * latitude and longitude.\n * @return {object} An object literal containing either lat and lon values\n * (if no accuracy was provided), or top, right, bottom and left values\n * for the bounding box calculated according to the provided accuracy.\n * Returns null if the conversion failed.\n */\nfunction UTMtoLL(utm) {\n\n var UTMNorthing = utm.northing;\n var UTMEasting = utm.easting;\n var zoneLetter = utm.zoneLetter;\n var zoneNumber = utm.zoneNumber;\n // check the ZoneNummber is valid\n if (zoneNumber < 0 || zoneNumber > 60) {\n return null;\n }\n\n var k0 = 0.9996;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var eccPrimeSquared;\n var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));\n var N1, T1, C1, R1, D, M;\n var LongOrigin;\n var mu, phi1Rad;\n\n // remove 500,000 meter offset for longitude\n var x = UTMEasting - 500000.0;\n var y = UTMNorthing;\n\n // We must know somehow if we are in the Northern or Southern\n // hemisphere, this is the only time we use the letter So even\n // if the Zone letter isn't exactly correct it should indicate\n // the hemisphere correctly\n if (zoneLetter < 'N') {\n y -= 10000000.0; // remove 10,000,000 meter offset used\n // for southern hemisphere\n }\n\n // There are 60 zones with zone 1 being at West -180 to -174\n LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin\n // in middle of\n // zone\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n M = y / k0;\n mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));\n\n phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);\n // double phi1 = ProjMath.radToDeg(phi1Rad);\n\n N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));\n T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);\n C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);\n R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);\n D = x / (N1 * k0);\n\n var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);\n lat = radToDeg(lat);\n\n var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);\n lon = LongOrigin + radToDeg(lon);\n\n var result;\n if (utm.accuracy) {\n var topRight = UTMtoLL({\n northing: utm.northing + utm.accuracy,\n easting: utm.easting + utm.accuracy,\n zoneLetter: utm.zoneLetter,\n zoneNumber: utm.zoneNumber\n });\n result = {\n top: topRight.lat,\n right: topRight.lon,\n bottom: lat,\n left: lon\n };\n }\n else {\n result = {\n lat: lat,\n lon: lon\n };\n }\n return result;\n}\n\n/**\n * Calculates the MGRS letter designator for the given latitude.\n *\n * @private\n * @param {number} lat The latitude in WGS84 to get the letter designator\n * for.\n * @return {char} The letter designator.\n */\nfunction getLetterDesignator(lat) {\n //This is here as an error flag to show that the Latitude is\n //outside MGRS limits\n var LetterDesignator = 'Z';\n\n if ((84 >= lat) && (lat >= 72)) {\n LetterDesignator = 'X';\n }\n else if ((72 > lat) && (lat >= 64)) {\n LetterDesignator = 'W';\n }\n else if ((64 > lat) && (lat >= 56)) {\n LetterDesignator = 'V';\n }\n else if ((56 > lat) && (lat >= 48)) {\n LetterDesignator = 'U';\n }\n else if ((48 > lat) && (lat >= 40)) {\n LetterDesignator = 'T';\n }\n else if ((40 > lat) && (lat >= 32)) {\n LetterDesignator = 'S';\n }\n else if ((32 > lat) && (lat >= 24)) {\n LetterDesignator = 'R';\n }\n else if ((24 > lat) && (lat >= 16)) {\n LetterDesignator = 'Q';\n }\n else if ((16 > lat) && (lat >= 8)) {\n LetterDesignator = 'P';\n }\n else if ((8 > lat) && (lat >= 0)) {\n LetterDesignator = 'N';\n }\n else if ((0 > lat) && (lat >= -8)) {\n LetterDesignator = 'M';\n }\n else if ((-8 > lat) && (lat >= -16)) {\n LetterDesignator = 'L';\n }\n else if ((-16 > lat) && (lat >= -24)) {\n LetterDesignator = 'K';\n }\n else if ((-24 > lat) && (lat >= -32)) {\n LetterDesignator = 'J';\n }\n else if ((-32 > lat) && (lat >= -40)) {\n LetterDesignator = 'H';\n }\n else if ((-40 > lat) && (lat >= -48)) {\n LetterDesignator = 'G';\n }\n else if ((-48 > lat) && (lat >= -56)) {\n LetterDesignator = 'F';\n }\n else if ((-56 > lat) && (lat >= -64)) {\n LetterDesignator = 'E';\n }\n else if ((-64 > lat) && (lat >= -72)) {\n LetterDesignator = 'D';\n }\n else if ((-72 > lat) && (lat >= -80)) {\n LetterDesignator = 'C';\n }\n return LetterDesignator;\n}\n\n/**\n * Encodes a UTM location as MGRS string.\n *\n * @private\n * @param {object} utm An object literal with easting, northing,\n * zoneLetter, zoneNumber\n * @param {number} accuracy Accuracy in digits (1-5).\n * @return {string} MGRS string for the given UTM location.\n */\nfunction encode(utm, accuracy) {\n // prepend with leading zeroes\n var seasting = \"00000\" + utm.easting,\n snorthing = \"00000\" + utm.northing;\n\n return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);\n}\n\n/**\n * Get the two letter 100k designator for a given UTM easting,\n * northing and zone number value.\n *\n * @private\n * @param {number} easting\n * @param {number} northing\n * @param {number} zoneNumber\n * @return the two letter 100k designator for the given UTM location.\n */\nfunction get100kID(easting, northing, zoneNumber) {\n var setParm = get100kSetForZone(zoneNumber);\n var setColumn = Math.floor(easting / 100000);\n var setRow = Math.floor(northing / 100000) % 20;\n return getLetter100kID(setColumn, setRow, setParm);\n}\n\n/**\n * Given a UTM zone number, figure out the MGRS 100K set it is in.\n *\n * @private\n * @param {number} i An UTM zone number.\n * @return {number} the 100k set the UTM zone is in.\n */\nfunction get100kSetForZone(i) {\n var setParm = i % NUM_100K_SETS;\n if (setParm === 0) {\n setParm = NUM_100K_SETS;\n }\n\n return setParm;\n}\n\n/**\n * Get the two-letter MGRS 100k designator given information\n * translated from the UTM northing, easting and zone number.\n *\n * @private\n * @param {number} column the column index as it relates to the MGRS\n * 100k set spreadsheet, created from the UTM easting.\n * Values are 1-8.\n * @param {number} row the row index as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM northing value. Values\n * are from 0-19.\n * @param {number} parm the set block, as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM zone. Values are from\n * 1-60.\n * @return two letter MGRS 100k code.\n */\nfunction getLetter100kID(column, row, parm) {\n // colOrigin and rowOrigin are the letters at the origin of the set\n var index = parm - 1;\n var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);\n var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);\n\n // colInt and rowInt are the letters to build to return\n var colInt = colOrigin + column - 1;\n var rowInt = rowOrigin + row;\n var rollover = false;\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n rollover = true;\n }\n\n if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {\n colInt++;\n }\n\n if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {\n colInt++;\n\n if (colInt === I) {\n colInt++;\n }\n }\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n rollover = true;\n }\n else {\n rollover = false;\n }\n\n if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {\n rowInt++;\n }\n\n if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {\n rowInt++;\n\n if (rowInt === I) {\n rowInt++;\n }\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n }\n\n var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);\n return twoLetter;\n}\n\n/**\n * Decode the UTM parameters from a MGRS string.\n *\n * @private\n * @param {string} mgrsString an UPPERCASE coordinate string is expected.\n * @return {object} An object literal with easting, northing, zoneLetter,\n * zoneNumber and accuracy (in meters) properties.\n */\nfunction decode(mgrsString) {\n\n if (mgrsString && mgrsString.length === 0) {\n throw (\"MGRSPoint coverting from nothing\");\n }\n\n var length = mgrsString.length;\n\n var hunK = null;\n var sb = \"\";\n var testChar;\n var i = 0;\n\n // get Zone number\n while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {\n if (i >= 2) {\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n sb += testChar;\n i++;\n }\n\n var zoneNumber = parseInt(sb, 10);\n\n if (i === 0 || i + 3 > length) {\n // A good MGRS string has to be 4-5 digits long,\n // ##AAA/#AAA at least.\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n\n var zoneLetter = mgrsString.charAt(i++);\n\n // Should we check the zone letter here? Why not.\n if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {\n throw (\"MGRSPoint zone letter \" + zoneLetter + \" not handled: \" + mgrsString);\n }\n\n hunK = mgrsString.substring(i, i += 2);\n\n var set = get100kSetForZone(zoneNumber);\n\n var east100k = getEastingFromChar(hunK.charAt(0), set);\n var north100k = getNorthingFromChar(hunK.charAt(1), set);\n\n // We have a bug where the northing may be 2000000 too low.\n // How\n // do we know when to roll over?\n\n while (north100k < getMinNorthing(zoneLetter)) {\n north100k += 2000000;\n }\n\n // calculate the char index for easting/northing separator\n var remainder = length - i;\n\n if (remainder % 2 !== 0) {\n throw (\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\" + mgrsString);\n }\n\n var sep = remainder / 2;\n\n var sepEasting = 0.0;\n var sepNorthing = 0.0;\n var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;\n if (sep > 0) {\n accuracyBonus = 100000.0 / Math.pow(10, sep);\n sepEastingString = mgrsString.substring(i, i + sep);\n sepEasting = parseFloat(sepEastingString) * accuracyBonus;\n sepNorthingString = mgrsString.substring(i + sep);\n sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;\n }\n\n easting = sepEasting + east100k;\n northing = sepNorthing + north100k;\n\n return {\n easting: easting,\n northing: northing,\n zoneLetter: zoneLetter,\n zoneNumber: zoneNumber,\n accuracy: accuracyBonus\n };\n}\n\n/**\n * Given the first letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the easting value that\n * should be added to the other, secondary easting value.\n *\n * @private\n * @param {char} e The first letter from a two-letter MGRS 100´k zone.\n * @param {number} set The MGRS table set for the zone number.\n * @return {number} The easting value for the given letter and set.\n */\nfunction getEastingFromChar(e, set) {\n // colOrigin is the letter at the origin of the set for the\n // column\n var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);\n var eastingValue = 100000.0;\n var rewindMarker = false;\n\n while (curCol !== e.charCodeAt(0)) {\n curCol++;\n if (curCol === I) {\n curCol++;\n }\n if (curCol === O) {\n curCol++;\n }\n if (curCol > Z) {\n if (rewindMarker) {\n throw (\"Bad character: \" + e);\n }\n curCol = A;\n rewindMarker = true;\n }\n eastingValue += 100000.0;\n }\n\n return eastingValue;\n}\n\n/**\n * Given the second letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the northing value that\n * should be added to the other, secondary northing value. You have to\n * remember that Northings are determined from the equator, and the vertical\n * cycle of letters mean a 2000000 additional northing meters. This happens\n * approx. every 18 degrees of latitude. This method does *NOT* count any\n * additional northings. You have to figure out how many 2000000 meters need\n * to be added for the zone letter of the MGRS coordinate.\n *\n * @private\n * @param {char} n Second letter of the MGRS 100k zone\n * @param {number} set The MGRS table set number, which is dependent on the\n * UTM zone number.\n * @return {number} The northing value for the given letter and set.\n */\nfunction getNorthingFromChar(n, set) {\n\n if (n > 'V') {\n throw (\"MGRSPoint given invalid Northing \" + n);\n }\n\n // rowOrigin is the letter at the origin of the set for the\n // column\n var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);\n var northingValue = 0.0;\n var rewindMarker = false;\n\n while (curRow !== n.charCodeAt(0)) {\n curRow++;\n if (curRow === I) {\n curRow++;\n }\n if (curRow === O) {\n curRow++;\n }\n // fixing a bug making whole application hang in this loop\n // when 'n' is a wrong character\n if (curRow > V) {\n if (rewindMarker) { // making sure that this loop ends\n throw (\"Bad character: \" + n);\n }\n curRow = A;\n rewindMarker = true;\n }\n northingValue += 100000.0;\n }\n\n return northingValue;\n}\n\n/**\n * The function getMinNorthing returns the minimum northing value of a MGRS\n * zone.\n *\n * Ported from Geotrans' c Lattitude_Band_Value structure table.\n *\n * @private\n * @param {char} zoneLetter The MGRS zone to get the min northing for.\n * @return {number}\n */\nfunction getMinNorthing(zoneLetter) {\n var northing;\n switch (zoneLetter) {\n case 'C':\n northing = 1100000.0;\n break;\n case 'D':\n northing = 2000000.0;\n break;\n case 'E':\n northing = 2800000.0;\n break;\n case 'F':\n northing = 3700000.0;\n break;\n case 'G':\n northing = 4600000.0;\n break;\n case 'H':\n northing = 5500000.0;\n break;\n case 'J':\n northing = 6400000.0;\n break;\n case 'K':\n northing = 7300000.0;\n break;\n case 'L':\n northing = 8200000.0;\n break;\n case 'M':\n northing = 9100000.0;\n break;\n case 'N':\n northing = 0.0;\n break;\n case 'P':\n northing = 800000.0;\n break;\n case 'Q':\n northing = 1700000.0;\n break;\n case 'R':\n northing = 2600000.0;\n break;\n case 'S':\n northing = 3500000.0;\n break;\n case 'T':\n northing = 4400000.0;\n break;\n case 'U':\n northing = 5300000.0;\n break;\n case 'V':\n northing = 6200000.0;\n break;\n case 'W':\n northing = 7000000.0;\n break;\n case 'X':\n northing = 7900000.0;\n break;\n default:\n northing = -1.0;\n }\n if (northing >= 0.0) {\n return northing;\n }\n else {\n throw (\"Invalid zone letter: \" + zoneLetter);\n }\n\n}\n","import {toPoint, forward} from 'mgrs';\n\nfunction Point(x, y, z) {\n if (!(this instanceof Point)) {\n return new Point(x, y, z);\n }\n if (Array.isArray(x)) {\n this.x = x[0];\n this.y = x[1];\n this.z = x[2] || 0.0;\n } else if(typeof x === 'object') {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z || 0.0;\n } else if (typeof x === 'string' && typeof y === 'undefined') {\n var coords = x.split(',');\n this.x = parseFloat(coords[0], 10);\n this.y = parseFloat(coords[1], 10);\n this.z = parseFloat(coords[2], 10) || 0.0;\n } else {\n this.x = x;\n this.y = y;\n this.z = z || 0.0;\n }\n console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');\n}\n\nPoint.fromMGRS = function(mgrsStr) {\n return new Point(toPoint(mgrsStr));\n};\nPoint.prototype.toMGRS = function(accuracy) {\n return forward([this.x, this.y], accuracy);\n};\nexport default Point;\n","var C00 = 1;\nvar C02 = 0.25;\nvar C04 = 0.046875;\nvar C06 = 0.01953125;\nvar C08 = 0.01068115234375;\nvar C22 = 0.75;\nvar C44 = 0.46875;\nvar C46 = 0.01302083333333333333;\nvar C48 = 0.00712076822916666666;\nvar C66 = 0.36458333333333333333;\nvar C68 = 0.00569661458333333333;\nvar C88 = 0.3076171875;\n\nexport default function(es) {\n var en = [];\n en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));\n en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));\n var t = es * es;\n en[2] = t * (C44 - es * (C46 + es * C48));\n t *= es;\n en[3] = t * (C66 - es * C68);\n en[4] = t * es * C88;\n return en;\n}","export default function(phi, sphi, cphi, en) {\n cphi *= sphi;\n sphi *= sphi;\n return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));\n}","import pj_mlfn from \"./pj_mlfn\";\nimport {EPSLN} from '../constants/values';\n\nvar MAX_ITER = 20;\n\nexport default function(arg, es, en) {\n var k = 1 / (1 - es);\n var phi = arg;\n for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */\n var s = Math.sin(phi);\n var t = 1 - es * s * s;\n //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;\n //phi -= t * (t * Math.sqrt(t)) * k;\n t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;\n phi -= t;\n if (Math.abs(t) < EPSLN) {\n return phi;\n }\n }\n //..reportError(\"cass:pj_inv_mlfn: Convergence error\");\n return phi;\n}\n","// Heavily based on this tmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js\n\nimport pj_enfn from '../common/pj_enfn';\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport adjust_lon from '../common/adjust_lon';\n\nimport {EPSLN, HALF_PI} from '../constants/values';\nimport sign from '../common/sign';\n\nexport function init() {\n this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n if (this.es) {\n this.en = pj_enfn(this.es);\n this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);\n }\n}\n\n/**\n Transverse Mercator Forward - long/lat to x/y\n long/lat in radians\n */\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var con;\n var x, y;\n var sin_phi = Math.sin(lat);\n var cos_phi = Math.cos(lat);\n\n if (!this.es) {\n var b = cos_phi * Math.sin(delta_lon);\n\n if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {\n return (93);\n }\n else {\n x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;\n y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));\n b = Math.abs(y);\n\n if (b >= 1) {\n if ((b - 1) > EPSLN) {\n return (93);\n }\n else {\n y = 0;\n }\n }\n else {\n y = Math.acos(y);\n }\n\n if (lat < 0) {\n y = -y;\n }\n\n y = this.a * this.k0 * (y - this.lat0) + this.y0;\n }\n }\n else {\n var al = cos_phi * delta_lon;\n var als = Math.pow(al, 2);\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var cs = Math.pow(c, 2);\n var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;\n var t = Math.pow(tq, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n al = al / Math.sqrt(con);\n var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);\n\n x = this.a * (this.k0 * al * (1 +\n als / 6 * (1 - t + c +\n als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +\n als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +\n this.x0;\n\n y = this.a * (this.k0 * (ml - this.ml0 +\n sin_phi * delta_lon * al / 2 * (1 +\n als / 12 * (5 - t + 9 * c + 4 * cs +\n als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +\n als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +\n this.y0;\n }\n\n p.x = x;\n p.y = y;\n\n return p;\n}\n\n/**\n Transverse Mercator Inverse - x/y to long/lat\n */\nexport function inverse(p) {\n var con, phi;\n var lat, lon;\n var x = (p.x - this.x0) * (1 / this.a);\n var y = (p.y - this.y0) * (1 / this.a);\n\n if (!this.es) {\n var f = Math.exp(x / this.k0);\n var g = 0.5 * (f - 1 / f);\n var temp = this.lat0 + y / this.k0;\n var h = Math.cos(temp);\n con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));\n lat = Math.asin(con);\n\n if (y < 0) {\n lat = -lat;\n }\n\n if ((g === 0) && (h === 0)) {\n lon = 0;\n }\n else {\n lon = adjust_lon(Math.atan2(g, h) + this.long0);\n }\n }\n else { // ellipsoidal form\n con = this.ml0 + y / this.k0;\n phi = pj_inv_mlfn(con, this.es, this.en);\n\n if (Math.abs(phi) < HALF_PI) {\n var sin_phi = Math.sin(phi);\n var cos_phi = Math.cos(phi);\n var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var cs = Math.pow(c, 2);\n var t = Math.pow(tan_phi, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n var d = x * Math.sqrt(con) / this.k0;\n var ds = Math.pow(d, 2);\n con = con * tan_phi;\n\n lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -\n ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -\n ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -\n ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));\n\n lon = adjust_lon(this.long0 + (d * (1 -\n ds / 6 * (1 + 2 * t + c -\n ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -\n ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));\n }\n else {\n lat = HALF_PI * sign(y);\n lon = 0;\n }\n }\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"Fast_Transverse_Mercator\", \"Fast Transverse Mercator\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(x) {\n var r = Math.exp(x);\n r = (r - 1 / r) / 2;\n return r;\n}","export default function(x, y) {\n x = Math.abs(x);\n y = Math.abs(y);\n var a = Math.max(x, y);\n var b = Math.min(x, y) / (a ? a : 1);\n\n return a * Math.sqrt(1 + Math.pow(b, 2));\n}\n","import hypot from './hypot';\nimport log1py from './log1py';\n\nexport default function(x) {\n var y = Math.abs(x);\n y = log1py(y * (1 + y / (hypot(1, y) + 1)));\n\n return x < 0 ? -y : y;\n}\n","export default function(x) {\n var y = 1 + x;\n var z = y - 1;\n\n return z === 0 ? x : x * Math.log(y) / z;\n}\n","export default function(pp, B) {\n var cos_2B = 2 * Math.cos(2 * B);\n var i = pp.length - 1;\n var h1 = pp[i];\n var h2 = 0;\n var h;\n\n while (--i >= 0) {\n h = -h2 + cos_2B * h1 + pp[i];\n h2 = h1;\n h1 = h;\n }\n\n return (B + h * Math.sin(2 * B));\n}\n","import sinh from './sinh';\nimport cosh from './cosh';\n\nexport default function(pp, arg_r, arg_i) {\n var sin_arg_r = Math.sin(arg_r);\n var cos_arg_r = Math.cos(arg_r);\n var sinh_arg_i = sinh(arg_i);\n var cosh_arg_i = cosh(arg_i);\n var r = 2 * cos_arg_r * cosh_arg_i;\n var i = -2 * sin_arg_r * sinh_arg_i;\n var j = pp.length - 1;\n var hr = pp[j];\n var hi1 = 0;\n var hr1 = 0;\n var hi = 0;\n var hr2;\n var hi2;\n\n while (--j >= 0) {\n hr2 = hr1;\n hi2 = hi1;\n hr1 = hr;\n hi1 = hi;\n hr = -hr2 + r * hr1 - i * hi1 + pp[j];\n hi = -hi2 + i * hr1 + r * hi1;\n }\n\n r = sin_arg_r * cosh_arg_i;\n i = cos_arg_r * sinh_arg_i;\n\n return [r * hr - i * hi, r * hi + i * hr];\n}\n","export default function(x) {\n var r = Math.exp(x);\n r = (r + 1 / r) / 2;\n return r;\n}","// Heavily based on this etmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js\n\nimport tmerc from '../projections/tmerc';\nimport sinh from '../common/sinh';\nimport hypot from '../common/hypot';\nimport asinhy from '../common/asinhy';\nimport gatg from '../common/gatg';\nimport clens from '../common/clens';\nimport clens_cmplx from '../common/clens_cmplx';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n if (!this.approx && (isNaN(this.es) || this.es <= 0)) {\n throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION[\"Fast_Transverse_Mercator\"] in the WKT.');\n }\n if (this.approx) {\n // When '+approx' is set, use tmerc instead\n tmerc.init.apply(this);\n this.forward = tmerc.forward;\n this.inverse = tmerc.inverse;\n }\n\n this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n this.cgb = [];\n this.cbg = [];\n this.utg = [];\n this.gtu = [];\n\n var f = this.es / (1 + Math.sqrt(1 - this.es));\n var n = f / (2 - f);\n var np = n;\n\n this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));\n this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));\n\n np = np * n;\n this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));\n this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));\n\n np = np * n;\n this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));\n this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));\n\n np = np * n;\n this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));\n this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));\n\n np = np * n;\n this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));\n this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));\n\n np = np * n;\n this.cgb[5] = np * (601676 / 22275);\n this.cbg[5] = np * (444337 / 155925);\n\n np = Math.pow(n, 2);\n this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));\n\n this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));\n this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));\n\n this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));\n this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));\n\n np = np * n;\n this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));\n this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));\n\n np = np * n;\n this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));\n this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));\n\n np = np * n;\n this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));\n this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));\n\n np = np * n;\n this.utg[5] = np * (-20648693 / 638668800);\n this.gtu[5] = np * (212378941 / 319334400);\n\n var Z = gatg(this.cbg, this.lat0);\n this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));\n}\n\nexport function forward(p) {\n var Ce = adjust_lon(p.x - this.long0);\n var Cn = p.y;\n\n Cn = gatg(this.cbg, Cn);\n var sin_Cn = Math.sin(Cn);\n var cos_Cn = Math.cos(Cn);\n var sin_Ce = Math.sin(Ce);\n var cos_Ce = Math.cos(Ce);\n\n Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);\n Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));\n Ce = asinhy(Math.tan(Ce));\n\n var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);\n\n Cn = Cn + tmp[0];\n Ce = Ce + tmp[1];\n\n var x;\n var y;\n\n if (Math.abs(Ce) <= 2.623395162778) {\n x = this.a * (this.Qn * Ce) + this.x0;\n y = this.a * (this.Qn * Cn + this.Zb) + this.y0;\n }\n else {\n x = Infinity;\n y = Infinity;\n }\n\n p.x = x;\n p.y = y;\n\n return p;\n}\n\nexport function inverse(p) {\n var Ce = (p.x - this.x0) * (1 / this.a);\n var Cn = (p.y - this.y0) * (1 / this.a);\n\n Cn = (Cn - this.Zb) / this.Qn;\n Ce = Ce / this.Qn;\n\n var lon;\n var lat;\n\n if (Math.abs(Ce) <= 2.623395162778) {\n var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);\n\n Cn = Cn + tmp[0];\n Ce = Ce + tmp[1];\n Ce = Math.atan(sinh(Ce));\n\n var sin_Cn = Math.sin(Cn);\n var cos_Cn = Math.cos(Cn);\n var sin_Ce = Math.sin(Ce);\n var cos_Ce = Math.cos(Ce);\n\n Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));\n Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);\n\n lon = adjust_lon(Ce + this.long0);\n lat = gatg(this.cgb, Cn);\n }\n else {\n lon = Infinity;\n lat = Infinity;\n }\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"Extended_Transverse_Mercator\", \"Extended Transverse Mercator\", \"etmerc\", \"Transverse_Mercator\", \"Transverse Mercator\", \"Gauss Kruger\", \"Gauss_Kruger\", \"tmerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(pp, arg_r) {\n var r = 2 * Math.cos(arg_r);\n var i = pp.length - 1;\n var hr1 = pp[i];\n var hr2 = 0;\n var hr;\n\n while (--i >= 0) {\n hr = -hr2 + r * hr1 + pp[i];\n hr2 = hr1;\n hr1 = hr;\n }\n\n return Math.sin(arg_r) * hr;\n}\n","import adjust_zone from '../common/adjust_zone';\nimport etmerc from './etmerc';\nexport var dependsOn = 'etmerc';\nimport {D2R} from '../constants/values';\n\n\nexport function init() {\n var zone = adjust_zone(this.zone, this.long0);\n if (zone === undefined) {\n throw new Error('unknown utm zone');\n }\n this.lat0 = 0;\n this.long0 = ((6 * Math.abs(zone)) - 183) * D2R;\n this.x0 = 500000;\n this.y0 = this.utmSouth ? 10000000 : 0;\n this.k0 = 0.9996;\n\n etmerc.init.apply(this);\n this.forward = etmerc.forward;\n this.inverse = etmerc.inverse;\n}\n\nexport var names = [\"Universal Transverse Mercator System\", \"utm\"];\nexport default {\n init: init,\n names: names,\n dependsOn: dependsOn\n};\n","import adjust_lon from './adjust_lon';\n\nexport default function(zone, lon) {\n if (zone === undefined) {\n zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;\n\n if (zone < 0) {\n return 0;\n } else if (zone > 60) {\n return 60;\n }\n }\n return zone;\n}\n","export default function(esinp, exp) {\n return (Math.pow((1 - esinp) / (1 + esinp), exp));\n}","import srat from '../common/srat';\nvar MAX_ITER = 20;\nimport {HALF_PI, FORTPI} from '../constants/values';\n\nexport function init() {\n var sphi = Math.sin(this.lat0);\n var cphi = Math.cos(this.lat0);\n cphi *= cphi;\n this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);\n this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));\n this.phic0 = Math.asin(sphi / this.C);\n this.ratexp = 0.5 * this.C * this.e;\n this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));\n}\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n\n p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;\n p.x = this.C * lon;\n return p;\n}\n\nexport function inverse(p) {\n var DEL_TOL = 1e-14;\n var lon = p.x / this.C;\n var lat = p.y;\n var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);\n for (var i = MAX_ITER; i > 0; --i) {\n lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;\n if (Math.abs(lat - p.y) < DEL_TOL) {\n break;\n }\n p.y = lat;\n }\n /* convergence failed */\n if (!i) {\n return null;\n }\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"gauss\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import gauss from './gauss';\nimport adjust_lon from '../common/adjust_lon';\nimport hypot from '../common/hypot';\n\nexport function init() {\n gauss.init.apply(this);\n if (!this.rc) {\n return;\n }\n this.sinc0 = Math.sin(this.phic0);\n this.cosc0 = Math.cos(this.phic0);\n this.R2 = 2 * this.rc;\n if (!this.title) {\n this.title = \"Oblique Stereographic Alternative\";\n }\n}\n\nexport function forward(p) {\n var sinc, cosc, cosl, k;\n p.x = adjust_lon(p.x - this.long0);\n gauss.forward.apply(this, [p]);\n sinc = Math.sin(p.y);\n cosc = Math.cos(p.y);\n cosl = Math.cos(p.x);\n k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);\n p.x = k * cosc * Math.sin(p.x);\n p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);\n p.x = this.a * p.x + this.x0;\n p.y = this.a * p.y + this.y0;\n return p;\n}\n\nexport function inverse(p) {\n var sinc, cosc, lon, lat, rho;\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n if ((rho = hypot(p.x, p.y))) {\n var c = 2 * Math.atan2(rho, this.R2);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);\n lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n gauss.inverse.apply(this, [p]);\n p.x = adjust_lon(p.x + this.long0);\n return p;\n}\n\nexport var names = [\"Stereographic_North_Pole\", \"Oblique_Stereographic\", \"sterea\",\"Oblique Stereographic Alternative\",\"Double_Stereographic\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {EPSLN, HALF_PI} from '../constants/values';\n\nimport sign from '../common/sign';\nimport msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function ssfn_(phit, sinphi, eccen) {\n sinphi *= eccen;\n return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));\n}\n\nexport function init() {\n\n // setting default parameters\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n\n this.coslat0 = Math.cos(this.lat0);\n this.sinlat0 = Math.sin(this.lat0);\n if (this.sphere) {\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));\n }\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (this.lat0 > 0) {\n //North pole\n //trace('stere:north pole');\n this.con = 1;\n }\n else {\n //South pole\n //trace('stere:south pole');\n this.con = -1;\n }\n }\n this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN && Math.abs(Math.cos(this.lat_ts)) > EPSLN) {\n // When k0 is 1 (default value) and lat_ts is a vaild number and lat0 is at a pole and lat_ts is not at a pole\n // Recalculate k0 using formula 21-35 from p161 of Snyder, 1987\n this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));\n }\n this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);\n this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;\n this.cosX0 = Math.cos(this.X0);\n this.sinX0 = Math.sin(this.X0);\n }\n}\n\n// Stereographic forward equations--mapping lat,long to x,y\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var sinlat = Math.sin(lat);\n var coslat = Math.cos(lat);\n var A, X, sinX, cosX, ts, rh;\n var dlon = adjust_lon(lon - this.long0);\n\n if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {\n //case of the origine point\n //trace('stere:this is the origin point');\n p.x = NaN;\n p.y = NaN;\n return p;\n }\n if (this.sphere) {\n //trace('stere:sphere case');\n A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));\n p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;\n p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;\n return p;\n }\n else {\n X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;\n cosX = Math.cos(X);\n sinX = Math.sin(X);\n if (Math.abs(this.coslat0) <= EPSLN) {\n ts = tsfnz(this.e, lat * this.con, this.con * sinlat);\n rh = 2 * this.a * this.k0 * ts / this.cons;\n p.x = this.x0 + rh * Math.sin(lon - this.long0);\n p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);\n //trace(p.toString());\n return p;\n }\n else if (Math.abs(this.sinlat0) < EPSLN) {\n //Eq\n //trace('stere:equateur');\n A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));\n p.y = A * sinX;\n }\n else {\n //other case\n //trace('stere:normal case');\n A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));\n p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;\n }\n p.x = A * cosX * Math.sin(dlon) + this.x0;\n }\n //trace(p.toString());\n return p;\n}\n\n//* Stereographic inverse equations--mapping x,y to lat/long\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat, ts, ce, Chi;\n var rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (this.sphere) {\n var c = 2 * Math.atan(rh / (2 * this.a * this.k0));\n lon = this.long0;\n lat = this.lat0;\n if (rh <= EPSLN) {\n p.x = lon;\n p.y = lat;\n return p;\n }\n lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);\n if (Math.abs(this.coslat0) < EPSLN) {\n if (this.lat0 > 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n }\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));\n }\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (rh <= EPSLN) {\n lat = this.lat0;\n lon = this.long0;\n p.x = lon;\n p.y = lat;\n //trace(p.toString());\n return p;\n }\n p.x *= this.con;\n p.y *= this.con;\n ts = rh * this.cons / (2 * this.a * this.k0);\n lat = this.con * phi2z(this.e, ts);\n lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));\n lon = this.long0;\n if (rh <= EPSLN) {\n Chi = this.X0;\n }\n else {\n Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));\n }\n lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));\n }\n }\n p.x = lon;\n p.y = lat;\n\n //trace(p.toString());\n return p;\n\n}\n\nexport var names = [\"stere\", \"Stereographic_South_Pole\", \"Polar Stereographic (variant B)\", \"Polar_Stereographic\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n ssfn_: ssfn_\n};\n","/*\n references:\n Formules et constantes pour le Calcul pour la\n projection cylindrique conforme à axe oblique et pour la transformation entre\n des systèmes de référence.\n http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf\n */\n\nexport function init() {\n var phy0 = this.lat0;\n this.lambda0 = this.long0;\n var sinPhy0 = Math.sin(phy0);\n var semiMajorAxis = this.a;\n var invF = this.rf;\n var flattening = 1 / invF;\n var e2 = 2 * flattening - Math.pow(flattening, 2);\n var e = this.e = Math.sqrt(e2);\n this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));\n this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));\n this.b0 = Math.asin(sinPhy0 / this.alpha);\n var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));\n var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));\n var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));\n this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;\n}\n\nexport function forward(p) {\n var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));\n var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));\n var S = -this.alpha * (Sa1 + Sa2) + this.K;\n\n // spheric latitude\n var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);\n\n // spheric longitude\n var I = this.alpha * (p.x - this.lambda0);\n\n // psoeudo equatorial rotation\n var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));\n\n var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));\n\n p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;\n p.x = this.R * rotI + this.x0;\n return p;\n}\n\nexport function inverse(p) {\n var Y = p.x - this.x0;\n var X = p.y - this.y0;\n\n var rotI = Y / this.R;\n var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);\n\n var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));\n var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));\n\n var lambda = this.lambda0 + I / this.alpha;\n\n var S = 0;\n var phy = b;\n var prevPhy = -1000;\n var iteration = 0;\n while (Math.abs(phy - prevPhy) > 0.0000001) {\n if (++iteration > 20) {\n //...reportError(\"omercFwdInfinity\");\n return;\n }\n //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));\n S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));\n prevPhy = phy;\n phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;\n }\n\n p.x = lambda;\n p.y = phy;\n return p;\n}\n\nexport var names = [\"somerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import tsfnz from '../common/tsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport { D2R, EPSLN, HALF_PI, TWO_PI, FORTPI } from '../constants/values';\n\nvar TOL = 1e-7;\n\nfunction isTypeA(P) {\n var typeAProjections = ['Hotine_Oblique_Mercator','Hotine_Oblique_Mercator_Azimuth_Natural_Origin'];\n var projectionName = typeof P.PROJECTION === \"object\" ? Object.keys(P.PROJECTION)[0] : P.PROJECTION;\n \n return 'no_uoff' in P || 'no_off' in P || typeAProjections.indexOf(projectionName) !== -1;\n}\n\n\n/* Initialize the Oblique Mercator projection\n ------------------------------------------*/\nexport function init() { \n var con, com, cosph0, D, F, H, L, sinph0, p, J, gamma = 0,\n gamma0, lamc = 0, lam1 = 0, lam2 = 0, phi1 = 0, phi2 = 0, alpha_c = 0, AB;\n \n // only Type A uses the no_off or no_uoff property\n // https://github.com/OSGeo/proj.4/issues/104\n this.no_off = isTypeA(this);\n this.no_rot = 'no_rot' in this;\n \n var alp = false;\n if (\"alpha\" in this) {\n alp = true;\n }\n\n var gam = false;\n if (\"rectified_grid_angle\" in this) {\n gam = true;\n }\n\n if (alp) {\n alpha_c = this.alpha;\n }\n \n if (gam) {\n gamma = (this.rectified_grid_angle * D2R);\n }\n \n if (alp || gam) {\n lamc = this.longc;\n } else {\n lam1 = this.long1;\n phi1 = this.lat1;\n lam2 = this.long2;\n phi2 = this.lat2;\n \n if (Math.abs(phi1 - phi2) <= TOL || (con = Math.abs(phi1)) <= TOL ||\n Math.abs(con - HALF_PI) <= TOL || Math.abs(Math.abs(this.lat0) - HALF_PI) <= TOL ||\n Math.abs(Math.abs(phi2) - HALF_PI) <= TOL) {\n throw new Error();\n }\n }\n \n var one_es = 1.0 - this.es;\n com = Math.sqrt(one_es);\n \n if (Math.abs(this.lat0) > EPSLN) {\n sinph0 = Math.sin(this.lat0);\n cosph0 = Math.cos(this.lat0);\n con = 1 - this.es * sinph0 * sinph0;\n this.B = cosph0 * cosph0;\n this.B = Math.sqrt(1 + this.es * this.B * this.B / one_es);\n this.A = this.B * this.k0 * com / con;\n D = this.B * com / (cosph0 * Math.sqrt(con));\n F = D * D -1;\n \n if (F <= 0) {\n F = 0;\n } else {\n F = Math.sqrt(F);\n if (this.lat0 < 0) {\n F = -F;\n }\n }\n \n this.E = F += D;\n this.E *= Math.pow(tsfnz(this.e, this.lat0, sinph0), this.B);\n } else {\n this.B = 1 / com;\n this.A = this.k0;\n this.E = D = F = 1;\n }\n \n if (alp || gam) {\n if (alp) {\n gamma0 = Math.asin(Math.sin(alpha_c) / D);\n if (!gam) {\n gamma = alpha_c;\n }\n } else {\n gamma0 = gamma;\n alpha_c = Math.asin(D * Math.sin(gamma0));\n }\n this.lam0 = lamc - Math.asin(0.5 * (F - 1 / F) * Math.tan(gamma0)) / this.B;\n } else {\n H = Math.pow(tsfnz(this.e, phi1, Math.sin(phi1)), this.B);\n L = Math.pow(tsfnz(this.e, phi2, Math.sin(phi2)), this.B);\n F = this.E / H;\n p = (L - H) / (L + H);\n J = this.E * this.E;\n J = (J - L * H) / (J + L * H);\n con = lam1 - lam2;\n \n if (con < -Math.pi) {\n lam2 -=TWO_PI;\n } else if (con > Math.pi) {\n lam2 += TWO_PI;\n }\n \n this.lam0 = adjust_lon(0.5 * (lam1 + lam2) - Math.atan(J * Math.tan(0.5 * this.B * (lam1 - lam2)) / p) / this.B);\n gamma0 = Math.atan(2 * Math.sin(this.B * adjust_lon(lam1 - this.lam0)) / (F - 1 / F));\n gamma = alpha_c = Math.asin(D * Math.sin(gamma0));\n }\n \n this.singam = Math.sin(gamma0);\n this.cosgam = Math.cos(gamma0);\n this.sinrot = Math.sin(gamma);\n this.cosrot = Math.cos(gamma);\n \n this.rB = 1 / this.B;\n this.ArB = this.A * this.rB;\n this.BrA = 1 / this.ArB;\n AB = this.A * this.B;\n \n if (this.no_off) {\n this.u_0 = 0;\n } else {\n this.u_0 = Math.abs(this.ArB * Math.atan(Math.sqrt(D * D - 1) / Math.cos(alpha_c)));\n \n if (this.lat0 < 0) {\n this.u_0 = - this.u_0;\n } \n }\n \n F = 0.5 * gamma0;\n this.v_pole_n = this.ArB * Math.log(Math.tan(FORTPI - F));\n this.v_pole_s = this.ArB * Math.log(Math.tan(FORTPI + F));\n}\n\n\n/* Oblique Mercator forward equations--mapping lat,long to x,y\n ----------------------------------------------------------*/\nexport function forward(p) {\n var coords = {};\n var S, T, U, V, W, temp, u, v;\n p.x = p.x - this.lam0;\n \n if (Math.abs(Math.abs(p.y) - HALF_PI) > EPSLN) {\n W = this.E / Math.pow(tsfnz(this.e, p.y, Math.sin(p.y)), this.B);\n \n temp = 1 / W;\n S = 0.5 * (W - temp);\n T = 0.5 * (W + temp);\n V = Math.sin(this.B * p.x);\n U = (S * this.singam - V * this.cosgam) / T;\n \n if (Math.abs(Math.abs(U) - 1.0) < EPSLN) {\n throw new Error();\n }\n \n v = 0.5 * this.ArB * Math.log((1 - U)/(1 + U));\n temp = Math.cos(this.B * p.x);\n \n if (Math.abs(temp) < TOL) {\n u = this.A * p.x;\n } else {\n u = this.ArB * Math.atan2((S * this.cosgam + V * this.singam), temp);\n } \n } else {\n v = p.y > 0 ? this.v_pole_n : this.v_pole_s;\n u = this.ArB * p.y;\n }\n \n if (this.no_rot) {\n coords.x = u;\n coords.y = v;\n } else {\n u -= this.u_0;\n coords.x = v * this.cosrot + u * this.sinrot;\n coords.y = u * this.cosrot - v * this.sinrot;\n }\n \n coords.x = (this.a * coords.x + this.x0);\n coords.y = (this.a * coords.y + this.y0);\n \n return coords;\n}\n\nexport function inverse(p) {\n var u, v, Qp, Sp, Tp, Vp, Up;\n var coords = {};\n \n p.x = (p.x - this.x0) * (1.0 / this.a);\n p.y = (p.y - this.y0) * (1.0 / this.a);\n\n if (this.no_rot) {\n v = p.y;\n u = p.x;\n } else {\n v = p.x * this.cosrot - p.y * this.sinrot;\n u = p.y * this.cosrot + p.x * this.sinrot + this.u_0;\n }\n \n Qp = Math.exp(-this.BrA * v);\n Sp = 0.5 * (Qp - 1 / Qp);\n Tp = 0.5 * (Qp + 1 / Qp);\n Vp = Math.sin(this.BrA * u);\n Up = (Vp * this.cosgam + Sp * this.singam) / Tp;\n \n if (Math.abs(Math.abs(Up) - 1) < EPSLN) {\n coords.x = 0;\n coords.y = Up < 0 ? -HALF_PI : HALF_PI;\n } else {\n coords.y = this.E / Math.sqrt((1 + Up) / (1 - Up));\n coords.y = phi2z(this.e, Math.pow(coords.y, 1 / this.B));\n \n if (coords.y === Infinity) {\n throw new Error();\n }\n \n coords.x = -this.rB * Math.atan2((Sp * this.cosgam - Vp * this.singam), Math.cos(this.BrA * u));\n }\n \n coords.x += this.lam0;\n \n return coords;\n}\n\nexport var names = [\"Hotine_Oblique_Mercator\", \"Hotine Oblique Mercator\", \"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\", \"Hotine_Oblique_Mercator_Two_Point_Natural_Origin\", \"Hotine_Oblique_Mercator_Azimuth_Center\", \"Oblique_Mercator\", \"omerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport sign from '../common/sign';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport {HALF_PI, EPSLN} from '../constants/values';\nexport function init() {\n \n //double lat0; /* the reference latitude */\n //double long0; /* the reference longitude */\n //double lat1; /* first standard parallel */\n //double lat2; /* second standard parallel */\n //double r_maj; /* major axis */\n //double r_min; /* minor axis */\n //double false_east; /* x offset in meters */\n //double false_north; /* y offset in meters */\n \n //the above value can be set with proj4.defs\n //example: proj4.defs(\"EPSG:2154\",\"+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs\");\n\n if (!this.lat2) {\n this.lat2 = this.lat1;\n } //if lat2 is not defined\n if (!this.k0) {\n this.k0 = 1;\n }\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n\n var temp = this.b / this.a;\n this.e = Math.sqrt(1 - temp * temp);\n\n var sin1 = Math.sin(this.lat1);\n var cos1 = Math.cos(this.lat1);\n var ms1 = msfnz(this.e, sin1, cos1);\n var ts1 = tsfnz(this.e, this.lat1, sin1);\n\n var sin2 = Math.sin(this.lat2);\n var cos2 = Math.cos(this.lat2);\n var ms2 = msfnz(this.e, sin2, cos2);\n var ts2 = tsfnz(this.e, this.lat2, sin2);\n\n var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);\n }\n else {\n this.ns = sin1;\n }\n if (isNaN(this.ns)) {\n this.ns = sin1;\n }\n this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));\n this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);\n if (!this.title) {\n this.title = \"Lambert Conformal Conic\";\n }\n}\n\n// Lambert Conformal conic forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n // singular cases :\n if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {\n lat = sign(lat) * (HALF_PI - 2 * EPSLN);\n }\n\n var con = Math.abs(Math.abs(lat) - HALF_PI);\n var ts, rh1;\n if (con > EPSLN) {\n ts = tsfnz(this.e, lat, Math.sin(lat));\n rh1 = this.a * this.f0 * Math.pow(ts, this.ns);\n }\n else {\n con = lat * this.ns;\n if (con <= 0) {\n return null;\n }\n rh1 = 0;\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;\n p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;\n\n return p;\n}\n\n// Lambert Conformal Conic inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n var rh1, con, ts;\n var lat, lon;\n var x = (p.x - this.x0) / this.k0;\n var y = (this.rh - (p.y - this.y0) / this.k0);\n if (this.ns > 0) {\n rh1 = Math.sqrt(x * x + y * y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(x * x + y * y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2((con * x), (con * y));\n }\n if ((rh1 !== 0) || (this.ns > 0)) {\n con = 1 / this.ns;\n ts = Math.pow((rh1 / (this.a * this.f0)), con);\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n else {\n lat = -HALF_PI;\n }\n lon = adjust_lon(theta / this.ns + this.long0);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\n \"Lambert Tangential Conformal Conic Projection\",\n \"Lambert_Conformal_Conic\",\n \"Lambert_Conformal_Conic_1SP\",\n \"Lambert_Conformal_Conic_2SP\",\n \"lcc\",\n \"Lambert Conic Conformal (1SP)\",\n \"Lambert Conic Conformal (2SP)\"\n];\n\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n this.a = 6377397.155;\n this.es = 0.006674372230614;\n this.e = Math.sqrt(this.es);\n if (!this.lat0) {\n this.lat0 = 0.863937979737193;\n }\n if (!this.long0) {\n this.long0 = 0.7417649320975901 - 0.308341501185665;\n }\n /* if scale not set default to 0.9999 */\n if (!this.k0) {\n this.k0 = 0.9999;\n }\n this.s45 = 0.785398163397448; /* 45 */\n this.s90 = 2 * this.s45;\n this.fi0 = this.lat0;\n this.e2 = this.es;\n this.e = Math.sqrt(this.e2);\n this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));\n this.uq = 1.04216856380474;\n this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);\n this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);\n this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;\n this.k1 = this.k0;\n this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));\n this.s0 = 1.37008346281555;\n this.n = Math.sin(this.s0);\n this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);\n this.ad = this.s90 - this.uq;\n}\n\n/* ellipsoid */\n/* calculate xy from lat/lon */\n/* Constants, identical to inverse transform function */\nexport function forward(p) {\n var gfi, u, deltav, s, d, eps, ro;\n var lon = p.x;\n var lat = p.y;\n var delta_lon = adjust_lon(lon - this.long0);\n /* Transformation */\n gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));\n u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);\n deltav = -delta_lon * this.alfa;\n s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));\n d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));\n eps = this.n * d;\n ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);\n p.y = ro * Math.cos(eps) / 1;\n p.x = ro * Math.sin(eps) / 1;\n\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n return (p);\n}\n\n/* calculate lat/lon from xy */\nexport function inverse(p) {\n var u, deltav, s, d, eps, ro, fi1;\n var ok;\n\n /* Transformation */\n /* revert y, x*/\n var tmp = p.x;\n p.x = p.y;\n p.y = tmp;\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n ro = Math.sqrt(p.x * p.x + p.y * p.y);\n eps = Math.atan2(p.y, p.x);\n d = eps / Math.sin(this.s0);\n s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);\n u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));\n deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));\n p.x = this.long0 - deltav / this.alfa;\n fi1 = u;\n ok = 0;\n var iter = 0;\n do {\n p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);\n if (Math.abs(fi1 - p.y) < 0.0000000001) {\n ok = 1;\n }\n fi1 = p.y;\n iter += 1;\n } while (ok === 0 && iter < 15);\n if (iter >= 15) {\n return null;\n }\n\n return (p);\n}\n\nexport var names = [\"Krovak\", \"krovak\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(e0, e1, e2, e3, phi) {\n return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));\n}","export default function(x) {\n return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n}","export default function(x) {\n return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n}","export default function(x) {\n return (0.05859375 * x * x * (1 + 0.75 * x));\n}","export default function(x) {\n return (x * x * x * (35 / 3072));\n}","export default function(a, e, sinphi) {\n var temp = e * sinphi;\n return a / Math.sqrt(1 - temp * temp);\n}","import {HALF_PI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n}\n","export default function(ml, e0, e1, e2, e3) {\n var phi;\n var dphi;\n\n phi = ml / e0;\n for (var i = 0; i < 15; i++) {\n dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //..reportError(\"IMLFN-CONV:Latitude failed to converge after 15 iterations\");\n return NaN;\n}","import mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nexport function init() {\n if (!this.sphere) {\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n }\n}\n\n/* Cassini forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var x, y;\n var lam = p.x;\n var phi = p.y;\n lam = adjust_lon(lam - this.long0);\n\n if (this.sphere) {\n x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));\n y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);\n }\n else {\n //ellipsoid\n var sinphi = Math.sin(phi);\n var cosphi = Math.cos(phi);\n var nl = gN(this.a, this.e, sinphi);\n var tl = Math.tan(phi) * Math.tan(phi);\n var al = lam * Math.cos(phi);\n var asq = al * al;\n var cl = this.es * cosphi * cosphi / (1 - this.es);\n var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\n x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));\n y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);\n\n\n }\n\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var phi, lam;\n\n if (this.sphere) {\n var dd = y + this.lat0;\n phi = Math.asin(Math.sin(dd) * Math.cos(x));\n lam = Math.atan2(Math.tan(x), Math.cos(dd));\n }\n else {\n /* ellipsoid */\n var ml1 = this.ml0 / this.a + y;\n var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);\n if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {\n p.x = this.long0;\n p.y = HALF_PI;\n if (y < 0) {\n p.y *= -1;\n }\n return p;\n }\n var nl1 = gN(this.a, this.e, Math.sin(phi1));\n\n var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);\n var tl1 = Math.pow(Math.tan(phi1), 2);\n var dl = x * this.a / nl1;\n var dsq = dl * dl;\n phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);\n lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);\n\n }\n\n p.x = adjust_lon(lam + this.long0);\n p.y = adjust_lat(phi);\n return p;\n\n}\n\nexport var names = [\"Cassini\", \"Cassini_Soldner\", \"cass\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(eccent, sinphi) {\n var con;\n if (eccent > 1.0e-7) {\n con = eccent * sinphi;\n return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));\n }\n else {\n return (2 * sinphi);\n }\n}","\nimport {HALF_PI, EPSLN, FORTPI} from '../constants/values';\n\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\n\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\nexport var S_POLE = 1;\n\nexport var N_POLE = 2;\nexport var EQUIT = 3;\nexport var OBLIQ = 4;\n\n/* Initialize the Lambert Azimuthal Equal Area projection\n ------------------------------------------------------*/\nexport function init() {\n var t = Math.abs(this.lat0);\n if (Math.abs(t - HALF_PI) < EPSLN) {\n this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;\n }\n else if (Math.abs(t) < EPSLN) {\n this.mode = this.EQUIT;\n }\n else {\n this.mode = this.OBLIQ;\n }\n if (this.es > 0) {\n var sinphi;\n\n this.qp = qsfnz(this.e, 1);\n this.mmf = 0.5 / (1 - this.es);\n this.apa = authset(this.es);\n switch (this.mode) {\n case this.N_POLE:\n this.dd = 1;\n break;\n case this.S_POLE:\n this.dd = 1;\n break;\n case this.EQUIT:\n this.rq = Math.sqrt(0.5 * this.qp);\n this.dd = 1 / this.rq;\n this.xmf = 1;\n this.ymf = 0.5 * this.qp;\n break;\n case this.OBLIQ:\n this.rq = Math.sqrt(0.5 * this.qp);\n sinphi = Math.sin(this.lat0);\n this.sinb1 = qsfnz(this.e, sinphi) / this.qp;\n this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);\n this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);\n this.ymf = (this.xmf = this.rq) / this.dd;\n this.xmf *= this.dd;\n break;\n }\n }\n else {\n if (this.mode === this.OBLIQ) {\n this.sinph0 = Math.sin(this.lat0);\n this.cosph0 = Math.cos(this.lat0);\n }\n }\n}\n\n/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;\n var lam = p.x;\n var phi = p.y;\n\n lam = adjust_lon(lam - this.long0);\n if (this.sphere) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n coslam = Math.cos(lam);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n if (y <= EPSLN) {\n return null;\n }\n y = Math.sqrt(2 / y);\n x = y * cosphi * Math.sin(lam);\n y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n coslam = -coslam;\n }\n if (Math.abs(phi + this.lat0) < EPSLN) {\n return null;\n }\n y = FORTPI - phi * 0.5;\n y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));\n x = y * Math.sin(lam);\n y *= coslam;\n }\n }\n else {\n sinb = 0;\n cosb = 0;\n b = 0;\n coslam = Math.cos(lam);\n sinlam = Math.sin(lam);\n sinphi = Math.sin(phi);\n q = qsfnz(this.e, sinphi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinb = q / this.qp;\n cosb = Math.sqrt(1 - sinb * sinb);\n }\n switch (this.mode) {\n case this.OBLIQ:\n b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;\n break;\n case this.EQUIT:\n b = 1 + cosb * coslam;\n break;\n case this.N_POLE:\n b = HALF_PI + phi;\n q = this.qp - q;\n break;\n case this.S_POLE:\n b = phi - HALF_PI;\n q = this.qp + q;\n break;\n }\n if (Math.abs(b) < EPSLN) {\n return null;\n }\n switch (this.mode) {\n case this.OBLIQ:\n case this.EQUIT:\n b = Math.sqrt(2 / b);\n if (this.mode === this.OBLIQ) {\n y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);\n }\n else {\n y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;\n }\n x = this.xmf * b * cosb * sinlam;\n break;\n case this.N_POLE:\n case this.S_POLE:\n if (q >= 0) {\n x = (b = Math.sqrt(q)) * sinlam;\n y = coslam * ((this.mode === this.S_POLE) ? b : -b);\n }\n else {\n x = y = 0;\n }\n break;\n }\n }\n\n p.x = this.a * x + this.x0;\n p.y = this.a * y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var lam, phi, cCe, sCe, q, rho, ab;\n if (this.sphere) {\n var cosz = 0,\n rh, sinz = 0;\n\n rh = Math.sqrt(x * x + y * y);\n phi = rh * 0.5;\n if (phi > 1) {\n return null;\n }\n phi = 2 * Math.asin(phi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinz = Math.sin(phi);\n cosz = Math.cos(phi);\n }\n switch (this.mode) {\n case this.EQUIT:\n phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);\n x *= sinz;\n y = cosz * rh;\n break;\n case this.OBLIQ:\n phi = (Math.abs(rh) <= EPSLN) ? this.lat0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);\n x *= sinz * this.cosph0;\n y = (cosz - Math.sin(phi) * this.sinph0) * rh;\n break;\n case this.N_POLE:\n y = -y;\n phi = HALF_PI - phi;\n break;\n case this.S_POLE:\n phi -= HALF_PI;\n break;\n }\n lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);\n }\n else {\n ab = 0;\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n x /= this.dd;\n y *= this.dd;\n rho = Math.sqrt(x * x + y * y);\n if (rho < EPSLN) {\n p.x = this.long0;\n p.y = this.lat0;\n return p;\n }\n sCe = 2 * Math.asin(0.5 * rho / this.rq);\n cCe = Math.cos(sCe);\n x *= (sCe = Math.sin(sCe));\n if (this.mode === this.OBLIQ) {\n ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;\n q = this.qp * ab;\n y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;\n }\n else {\n ab = y * sCe / rho;\n q = this.qp * ab;\n y = rho * cCe;\n }\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n y = -y;\n }\n q = (x * x + y * y);\n if (!q) {\n p.x = this.long0;\n p.y = this.lat0;\n return p;\n }\n ab = 1 - q / this.qp;\n if (this.mode === this.S_POLE) {\n ab = -ab;\n }\n }\n lam = Math.atan2(x, y);\n phi = authlat(Math.asin(ab), this.apa);\n }\n\n p.x = adjust_lon(this.long0 + lam);\n p.y = phi;\n return p;\n}\n\n/* determine latitude from authalic latitude */\nvar P00 = 0.33333333333333333333;\n\nvar P01 = 0.17222222222222222222;\nvar P02 = 0.10257936507936507936;\nvar P10 = 0.06388888888888888888;\nvar P11 = 0.06640211640211640211;\nvar P20 = 0.01641501294219154443;\n\nfunction authset(es) {\n var t;\n var APA = [];\n APA[0] = es * P00;\n t = es * es;\n APA[0] += t * P01;\n APA[1] = t * P10;\n t *= es;\n APA[0] += t * P02;\n APA[1] += t * P11;\n APA[2] = t * P20;\n return APA;\n}\n\nfunction authlat(beta, APA) {\n var t = beta + beta;\n return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));\n}\n\nexport var names = [\"Lambert Azimuthal Equal Area\", \"Lambert_Azimuthal_Equal_Area\", \"laea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n S_POLE: S_POLE,\n N_POLE: N_POLE,\n EQUIT: EQUIT,\n OBLIQ: OBLIQ\n};\n","export default function(x) {\n if (Math.abs(x) > 1) {\n x = (x > 1) ? 1 : -1;\n }\n return Math.asin(x);\n}","import msfnz from '../common/msfnz';\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e3 = Math.sqrt(this.es);\n\n this.sin_po = Math.sin(this.lat1);\n this.cos_po = Math.cos(this.lat1);\n this.t1 = this.sin_po;\n this.con = this.sin_po;\n this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs1 = qsfnz(this.e3, this.sin_po);\n\n this.sin_po = Math.sin(this.lat2);\n this.cos_po = Math.cos(this.lat2);\n this.t2 = this.sin_po;\n this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs2 = qsfnz(this.e3, this.sin_po);\n\n this.sin_po = Math.sin(this.lat0);\n this.cos_po = Math.cos(this.lat0);\n this.t3 = this.sin_po;\n this.qs0 = qsfnz(this.e3, this.sin_po);\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);\n }\n else {\n this.ns0 = this.con;\n }\n this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;\n this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;\n}\n\n/* Albers Conical Equal Area forward equations--mapping lat,long to x,y\n -------------------------------------------------------------------*/\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n this.sin_phi = Math.sin(lat);\n this.cos_phi = Math.cos(lat);\n\n var qs = qsfnz(this.e3, this.sin_phi);\n var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;\n var theta = this.ns0 * adjust_lon(lon - this.long0);\n var x = rh1 * Math.sin(theta) + this.x0;\n var y = this.rh - rh1 * Math.cos(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh1, qs, con, theta, lon, lat;\n\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n if (this.ns0 >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n con = rh1 * this.ns0 / this.a;\n if (this.sphere) {\n lat = Math.asin((this.c - con * con) / (2 * this.ns0));\n }\n else {\n qs = (this.c - con * con) / this.ns0;\n lat = this.phi1z(this.e3, qs);\n }\n\n lon = adjust_lon(theta / this.ns0 + this.long0);\n p.x = lon;\n p.y = lat;\n return p;\n}\n\n/* Function to compute phi1, the latitude for the inverse of the\n Albers Conical Equal-Area projection.\n-------------------------------------------*/\nexport function phi1z(eccent, qs) {\n var sinphi, cosphi, con, com, dphi;\n var phi = asinz(0.5 * qs);\n if (eccent < EPSLN) {\n return phi;\n }\n\n var eccnts = eccent * eccent;\n for (var i = 1; i <= 25; i++) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n con = eccent * sinphi;\n com = 1 - con * con;\n dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi = phi + dphi;\n if (Math.abs(dphi) <= 1e-7) {\n return phi;\n }\n }\n return null;\n}\n\nexport var names = [\"Albers_Conic_Equal_Area\", \"Albers\", \"aea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n phi1z: phi1z\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\n/*\n reference:\n Wolfram Mathworld \"Gnomonic Projection\"\n http://mathworld.wolfram.com/GnomonicProjection.html\n Accessed: 12th November 2009\n */\nexport function init() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.sin_p14 = Math.sin(this.lat0);\n this.cos_p14 = Math.cos(this.lat0);\n // Approximation for projecting points to the horizon (infinity)\n this.infinity_dist = 1000 * this.a;\n this.rc = 1;\n}\n\n/* Gnomonic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var sinphi, cosphi; /* sin and cos value */\n var dlon; /* delta longitude value */\n var coslon; /* cos of longitude */\n var ksp; /* scale factor */\n var g;\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n dlon = adjust_lon(lon - this.long0);\n\n sinphi = Math.sin(lat);\n cosphi = Math.cos(lat);\n\n coslon = Math.cos(dlon);\n g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n ksp = 1;\n if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;\n }\n else {\n\n // Point is in the opposing hemisphere and is unprojectable\n // We still need to return a reasonable point, so we project\n // to infinity, on a bearing\n // equivalent to the northern hemisphere equivalent\n // This is a reasonable approximation for short shapes and lines that\n // straddle the horizon.\n\n x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);\n y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh; /* Rho */\n var sinc, cosc;\n var c;\n var lon, lat;\n\n /* Inverse equations\n -----------------*/\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n\n if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {\n c = Math.atan2(rh, this.rc);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n\n lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);\n lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);\n lon = adjust_lon(this.long0 + lon);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"gnom\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport qsfnz from '../common/qsfnz';\nimport msfnz from '../common/msfnz';\nimport iqsfnz from '../common/iqsfnz';\n\n/*\n reference:\n \"Cartographic Projection Procedures for the UNIX Environment-\n A User's Manual\" by Gerald I. Evenden,\n USGS Open File Report 90-284and Release 4 Interim Reports (2003)\n*/\nexport function init() {\n //no-op\n if (!this.sphere) {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n}\n\n/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n if (this.sphere) {\n x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);\n y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);\n }\n else {\n var qs = qsfnz(this.e, Math.sin(lat));\n x = this.x0 + this.a * this.k0 * dlon;\n y = this.y0 + this.a * qs * 0.5 / this.k0;\n }\n\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));\n lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\n }\n else {\n lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);\n lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"cea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, q) {\n var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));\n if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {\n if (q < 0) {\n return (-1 * HALF_PI);\n }\n else {\n return HALF_PI;\n }\n }\n //var phi = 0.5* q/(1-eccent*eccent);\n var phi = Math.asin(0.5 * q);\n var dphi;\n var sin_phi;\n var cos_phi;\n var con;\n for (var i = 0; i < 30; i++) {\n sin_phi = Math.sin(phi);\n cos_phi = Math.cos(phi);\n con = eccent * sin_phi;\n dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //console.log(\"IQSFN-CONV:Latitude failed to converge after 30 iterations\");\n return NaN;\n}\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\n\nexport function init() {\n\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n this.lat_ts = this.lat_ts || 0;\n this.title = this.title || \"Equidistant Cylindrical (Plate Carre)\";\n\n this.rc = Math.cos(this.lat_ts);\n}\n\n// forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n var dlon = adjust_lon(lon - this.long0);\n var dlat = adjust_lat(lat - this.lat0);\n p.x = this.x0 + (this.a * dlon * this.rc);\n p.y = this.y0 + (this.a * dlat);\n return p;\n}\n\n// inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n var x = p.x;\n var y = p.y;\n\n p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));\n p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n return p;\n}\n\nexport var names = [\"Equirectangular\", \"Equidistant_Cylindrical\", \"eqc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport mlfn from '../common/mlfn';\nimport {EPSLN} from '../constants/values';\n\nimport gN from '../common/gN';\nvar MAX_ITER = 20;\n\nexport function init() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas\n}\n\n/* Polyconic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y, el;\n var dlon = adjust_lon(lon - this.long0);\n el = dlon * Math.sin(lat);\n if (this.sphere) {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.a * this.lat0;\n }\n else {\n x = this.a * Math.sin(el) / Math.tan(lat);\n y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));\n }\n }\n else {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.ml0;\n }\n else {\n var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);\n x = nl * Math.sin(el);\n y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));\n }\n\n }\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n var lon, lat, x, y, i;\n var al, bl;\n var phi, dphi;\n x = p.x - this.x0;\n y = p.y - this.y0;\n\n if (this.sphere) {\n if (Math.abs(y + this.a * this.lat0) <= EPSLN) {\n lon = adjust_lon(x / this.a + this.long0);\n lat = 0;\n }\n else {\n al = this.lat0 + y / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var tanphi;\n for (i = MAX_ITER; i; --i) {\n tanphi = Math.tan(phi);\n dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);\n phi += dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));\n }\n }\n else {\n if (Math.abs(y + this.ml0) <= EPSLN) {\n lat = 0;\n lon = adjust_lon(this.long0 + x / this.a);\n }\n else {\n\n al = (this.ml0 + y) / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var cl, mln, mlnp, ma;\n var con;\n for (i = MAX_ITER; i; --i) {\n con = this.e * Math.sin(phi);\n cl = Math.sqrt(1 - con * con) * Math.tan(phi);\n mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);\n ma = mln / this.a;\n dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);\n phi -= dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n\n //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);\n cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);\n lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Polyconic\", \"poly\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {SEC_TO_RAD} from '../constants/values';\n\n/*\n reference\n Department of Land and Survey Technical Circular 1973/32\n http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf\n OSG Technical Report 4.1\n http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf\n */\n\n/**\n * iterations: Number of iterations to refine inverse transform.\n * 0 -> km accuracy\n * 1 -> m accuracy -- suitable for most mapping applications\n * 2 -> mm accuracy\n */\nexport var iterations = 1;\n\nexport function init() {\n this.A = [];\n this.A[1] = 0.6399175073;\n this.A[2] = -0.1358797613;\n this.A[3] = 0.063294409;\n this.A[4] = -0.02526853;\n this.A[5] = 0.0117879;\n this.A[6] = -0.0055161;\n this.A[7] = 0.0026906;\n this.A[8] = -0.001333;\n this.A[9] = 0.00067;\n this.A[10] = -0.00034;\n\n this.B_re = [];\n this.B_im = [];\n this.B_re[1] = 0.7557853228;\n this.B_im[1] = 0;\n this.B_re[2] = 0.249204646;\n this.B_im[2] = 0.003371507;\n this.B_re[3] = -0.001541739;\n this.B_im[3] = 0.041058560;\n this.B_re[4] = -0.10162907;\n this.B_im[4] = 0.01727609;\n this.B_re[5] = -0.26623489;\n this.B_im[5] = -0.36249218;\n this.B_re[6] = -0.6870983;\n this.B_im[6] = -1.1651967;\n\n this.C_re = [];\n this.C_im = [];\n this.C_re[1] = 1.3231270439;\n this.C_im[1] = 0;\n this.C_re[2] = -0.577245789;\n this.C_im[2] = -0.007809598;\n this.C_re[3] = 0.508307513;\n this.C_im[3] = -0.112208952;\n this.C_re[4] = -0.15094762;\n this.C_im[4] = 0.18200602;\n this.C_re[5] = 1.01418179;\n this.C_im[5] = 1.64497696;\n this.C_re[6] = 1.9660549;\n this.C_im[6] = 2.5127645;\n\n this.D = [];\n this.D[1] = 1.5627014243;\n this.D[2] = 0.5185406398;\n this.D[3] = -0.03333098;\n this.D[4] = -0.1052906;\n this.D[5] = -0.0368594;\n this.D[6] = 0.007317;\n this.D[7] = 0.01220;\n this.D[8] = 0.00394;\n this.D[9] = -0.0013;\n}\n\n/**\n New Zealand Map Grid Forward - long/lat to x/y\n long/lat in radians\n */\nexport function forward(p) {\n var n;\n var lon = p.x;\n var lat = p.y;\n\n var delta_lat = lat - this.lat0;\n var delta_lon = lon - this.long0;\n\n // 1. Calculate d_phi and d_psi ... // and d_lambda\n // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.\n var d_phi = delta_lat / SEC_TO_RAD * 1E-5;\n var d_lambda = delta_lon;\n var d_phi_n = 1; // d_phi^0\n\n var d_psi = 0;\n for (n = 1; n <= 10; n++) {\n d_phi_n = d_phi_n * d_phi;\n d_psi = d_psi + this.A[n] * d_phi_n;\n }\n\n // 2. Calculate theta\n var th_re = d_psi;\n var th_im = d_lambda;\n\n // 3. Calculate z\n var th_n_re = 1;\n var th_n_im = 0; // theta^0\n var th_n_re1;\n var th_n_im1;\n\n var z_re = 0;\n var z_im = 0;\n for (n = 1; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;\n z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;\n }\n\n // 4. Calculate easting and northing\n p.x = (z_im * this.a) + this.x0;\n p.y = (z_re * this.a) + this.y0;\n\n return p;\n}\n\n/**\n New Zealand Map Grid Inverse - x/y to long/lat\n */\nexport function inverse(p) {\n var n;\n var x = p.x;\n var y = p.y;\n\n var delta_x = x - this.x0;\n var delta_y = y - this.y0;\n\n // 1. Calculate z\n var z_re = delta_y / this.a;\n var z_im = delta_x / this.a;\n\n // 2a. Calculate theta - first approximation gives km accuracy\n var z_n_re = 1;\n var z_n_im = 0; // z^0\n var z_n_re1;\n var z_n_im1;\n\n var th_re = 0;\n var th_im = 0;\n for (n = 1; n <= 6; n++) {\n z_n_re1 = z_n_re * z_re - z_n_im * z_im;\n z_n_im1 = z_n_im * z_re + z_n_re * z_im;\n z_n_re = z_n_re1;\n z_n_im = z_n_im1;\n th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;\n th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;\n }\n\n // 2b. Iterate to refine the accuracy of the calculation\n // 0 iterations gives km accuracy\n // 1 iteration gives m accuracy -- good enough for most mapping applications\n // 2 iterations bives mm accuracy\n for (var i = 0; i < this.iterations; i++) {\n var th_n_re = th_re;\n var th_n_im = th_im;\n var th_n_re1;\n var th_n_im1;\n\n var num_re = z_re;\n var num_im = z_im;\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n th_n_re = 1;\n th_n_im = 0;\n var den_re = this.B_re[1];\n var den_im = this.B_im[1];\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n // Complex division\n var den2 = den_re * den_re + den_im * den_im;\n th_re = (num_re * den_re + num_im * den_im) / den2;\n th_im = (num_im * den_re - num_re * den_im) / den2;\n }\n\n // 3. Calculate d_phi ... // and d_lambda\n var d_psi = th_re;\n var d_lambda = th_im;\n var d_psi_n = 1; // d_psi^0\n\n var d_phi = 0;\n for (n = 1; n <= 9; n++) {\n d_psi_n = d_psi_n * d_psi;\n d_phi = d_phi + this.D[n] * d_psi_n;\n }\n\n // 4. Calculate latitude and longitude\n // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.\n var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);\n var lon = this.long0 + d_lambda;\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"New_Zealand_Map_Grid\", \"nzmg\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\n\n/* Initialize the Miller Cylindrical projection\n -------------------------------------------*/\nexport function init() {\n //no-op\n}\n\n/* Miller Cylindrical forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x = this.x0 + this.a * dlon;\n var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Miller Cylindrical inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n\n var lon = adjust_lon(this.long0 + p.x / this.a);\n var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Miller_Cylindrical\", \"mill\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport pj_enfn from '../common/pj_enfn';\nvar MAX_ITER = 20;\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n\nexport function init() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n\n\n if (!this.sphere) {\n this.en = pj_enfn(this.es);\n }\n else {\n this.n = 1;\n this.m = 0;\n this.es = 0;\n this.C_y = Math.sqrt((this.m + 1) / this.n);\n this.C_x = this.C_y / (this.m + 1);\n }\n\n}\n\n/* Sinusoidal forward equations--mapping lat,long to x,y\n -----------------------------------------------------*/\nexport function forward(p) {\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n lon = adjust_lon(lon - this.long0);\n\n if (this.sphere) {\n if (!this.m) {\n lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\n }\n else {\n var k = this.n * Math.sin(lat);\n for (var i = MAX_ITER; i; --i) {\n var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));\n lat -= V;\n if (Math.abs(V) < EPSLN) {\n break;\n }\n }\n }\n x = this.a * this.C_x * lon * (this.m + Math.cos(lat));\n y = this.a * this.C_y * lat;\n\n }\n else {\n\n var s = Math.sin(lat);\n var c = Math.cos(lat);\n y = this.a * pj_mlfn(lat, s, c, this.en);\n x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);\n }\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var lat, temp, lon, s;\n\n p.x -= this.x0;\n lon = p.x / this.a;\n p.y -= this.y0;\n lat = p.y / this.a;\n\n if (this.sphere) {\n lat /= this.C_y;\n lon = lon / (this.C_x * (this.m + Math.cos(lat)));\n if (this.m) {\n lat = asinz((this.m * lat + Math.sin(lat)) / this.n);\n }\n else if (this.n !== 1) {\n lat = asinz(Math.sin(lat) / this.n);\n }\n lon = adjust_lon(lon + this.long0);\n lat = adjust_lat(lat);\n }\n else {\n lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);\n s = Math.abs(lat);\n if (s < HALF_PI) {\n s = Math.sin(lat);\n temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));\n //temp = this.long0 + p.x / (this.a * Math.cos(lat));\n lon = adjust_lon(temp);\n }\n else if ((s - EPSLN) < HALF_PI) {\n lon = this.long0;\n }\n }\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Sinusoidal\", \"sinu\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nexport function init() {}\nimport {EPSLN} from '../constants/values';\n/* Mollweide forward equations--mapping lat,long to x,y\n ----------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var theta = lat;\n var con = Math.PI * Math.sin(lat);\n\n /* Iterate using the Newton-Raphson method to find theta\n -----------------------------------------------------*/\n while (true) {\n var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));\n theta += delta_theta;\n if (Math.abs(delta_theta) < EPSLN) {\n break;\n }\n }\n theta /= 2;\n\n /* If the latitude is 90 deg, force the x coordinate to be \"0 + false easting\"\n this is done here because of precision problems with \"cos(theta)\"\n --------------------------------------------------------------------------*/\n if (Math.PI / 2 - Math.abs(lat) < EPSLN) {\n delta_lon = 0;\n }\n var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;\n var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var theta;\n var arg;\n\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n arg = p.y / (1.4142135623731 * this.a);\n\n /* Because of division by zero problems, 'arg' can not be 1. Therefore\n a number very close to one is used instead.\n -------------------------------------------------------------------*/\n if (Math.abs(arg) > 0.999999999999) {\n arg = 0.999999999999;\n }\n theta = Math.asin(arg);\n var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));\n if (lon < (-Math.PI)) {\n lon = -Math.PI;\n }\n if (lon > Math.PI) {\n lon = Math.PI;\n }\n arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;\n if (Math.abs(arg) > 1) {\n arg = 1;\n }\n var lat = Math.asin(arg);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Mollweide\", \"moll\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport msfnz from '../common/msfnz';\nimport mlfn from '../common/mlfn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.lat2 = this.lat2 || this.lat1;\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n\n this.sinphi = Math.sin(this.lat1);\n this.cosphi = Math.cos(this.lat1);\n\n this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);\n\n if (Math.abs(this.lat1 - this.lat2) < EPSLN) {\n this.ns = this.sinphi;\n }\n else {\n this.sinphi = Math.sin(this.lat2);\n this.cosphi = Math.cos(this.lat2);\n this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);\n this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);\n }\n this.g = this.ml1 + this.ms1 / this.ns;\n this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n this.rh = this.a * (this.g - this.ml0);\n}\n\n/* Equidistant Conic forward equations--mapping lat,long to x,y\n -----------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var rh1;\n\n /* Forward equations\n -----------------*/\n if (this.sphere) {\n rh1 = this.a * (this.g - lat);\n }\n else {\n var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n rh1 = this.a * (this.g - ml);\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n var x = this.x0 + rh1 * Math.sin(theta);\n var y = this.y0 + this.rh - rh1 * Math.cos(theta);\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n var con, rh1, lat, lon;\n if (this.ns >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + theta / this.ns);\n lat = adjust_lat(this.g - rh1 / this.a);\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n var ml = this.g - rh1 / this.a;\n lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);\n lon = adjust_lon(this.long0 + theta / this.ns);\n p.x = lon;\n p.y = lat;\n return p;\n }\n\n}\n\nexport var names = [\"Equidistant_Conic\", \"eqdc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n/* Initialize the Van Der Grinten projection\n ----------------------------------------*/\nexport function init() {\n //this.R = 6370997; //Radius of earth\n this.R = this.a;\n}\n\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x, y;\n\n if (Math.abs(lat) <= EPSLN) {\n x = this.x0 + this.R * dlon;\n y = this.y0;\n }\n var theta = asinz(2 * Math.abs(lat / Math.PI));\n if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {\n x = this.x0;\n if (lat >= 0) {\n y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);\n }\n else {\n y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);\n }\n // return(OK);\n }\n var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));\n var asq = al * al;\n var sinth = Math.sin(theta);\n var costh = Math.cos(theta);\n\n var g = costh / (sinth + costh - 1);\n var gsq = g * g;\n var m = g * (2 / sinth - 1);\n var msq = m * m;\n var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);\n if (dlon < 0) {\n con = -con;\n }\n x = this.x0 + con;\n //con = Math.abs(con / (Math.PI * this.R));\n var q = asq + g;\n con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);\n if (lat >= 0) {\n //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 + con;\n }\n else {\n //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 - con;\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Van Der Grinten inverse equations--mapping x,y to lat/long\n ---------------------------------------------------------*/\nexport function inverse(p) {\n var lon, lat;\n var xx, yy, xys, c1, c2, c3;\n var a1;\n var m1;\n var con;\n var th1;\n var d;\n\n /* inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n con = Math.PI * this.R;\n xx = p.x / con;\n yy = p.y / con;\n xys = xx * xx + yy * yy;\n c1 = -Math.abs(yy) * (1 + xys);\n c2 = c1 - 2 * yy * yy + xx * xx;\n c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;\n d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;\n a1 = (c1 - c2 * c2 / 3 / c3) / c3;\n m1 = 2 * Math.sqrt(-a1 / 3);\n con = ((3 * d) / a1) / m1;\n if (Math.abs(con) > 1) {\n if (con >= 0) {\n con = 1;\n }\n else {\n con = -1;\n }\n }\n th1 = Math.acos(con) / 3;\n if (p.y >= 0) {\n lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n else {\n lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n\n if (Math.abs(xx) < EPSLN) {\n lon = this.long0;\n }\n else {\n lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Van_der_Grinten_I\", \"VanDerGrinten\", \"vandg\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport asinz from '../common/asinz';\nimport imlfn from '../common/imlfn';\n\n\n\nexport function init() {\n this.sin_p12 = Math.sin(this.lat0);\n this.cos_p12 = Math.cos(this.lat0);\n}\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var sinphi = Math.sin(p.y);\n var cosphi = Math.cos(p.y);\n var dlon = adjust_lon(lon - this.long0);\n var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;\n if (this.sphere) {\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);\n p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);\n p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);\n return p;\n }\n else {\n //default case\n cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);\n c = Math.acos(cos_c);\n kp = c ? c / Math.sin(c) : 1;\n p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);\n p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));\n return p;\n }\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);\n p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);\n p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);\n return p;\n }\n else {\n //Default case\n tanphi = sinphi / cosphi;\n Nl1 = gN(this.a, this.e, this.sin_p12);\n Nl = gN(this.a, this.e, sinphi);\n psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));\n Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));\n if (Az === 0) {\n s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {\n s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else {\n s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));\n }\n G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);\n H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);\n GH = G * H;\n Hs = H * H;\n s2 = s * s;\n s3 = s2 * s;\n s4 = s3 * s;\n s5 = s4 * s;\n c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);\n p.x = this.x0 + c * Math.sin(Az);\n p.y = this.y0 + c * Math.cos(Az);\n return p;\n }\n }\n\n\n}\n\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F, sinpsi;\n if (this.sphere) {\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (rh > (2 * HALF_PI * this.a)) {\n return;\n }\n z = rh / this.a;\n\n sinz = Math.sin(z);\n cosz = Math.cos(z);\n\n lon = this.long0;\n if (Math.abs(rh) <= EPSLN) {\n lat = this.lat0;\n }\n else {\n lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);\n con = Math.abs(this.lat0) - HALF_PI;\n if (Math.abs(con) <= EPSLN) {\n if (this.lat0 >= 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n }\n else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n }\n }\n else {\n /*con = cosz - this.sin_p12 * Math.sin(lat);\n if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {\n //no-op, just keep the lon value as is\n } else {\n var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));\n }*/\n lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = Mlp - rh;\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = rh - Mlp;\n\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n //default case\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n Az = Math.atan2(p.x, p.y);\n N1 = gN(this.a, this.e, this.sin_p12);\n cosAz = Math.cos(Az);\n tmp = this.e * this.cos_p12 * cosAz;\n A = -tmp * tmp / (1 - this.es);\n B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);\n D = rh / N1;\n Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;\n F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;\n psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);\n lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));\n sinpsi = Math.sin(psi);\n lat = Math.atan2((sinpsi - this.es * F * this.sin_p12) * Math.tan(psi), sinpsi * (1 - this.es));\n p.x = lon;\n p.y = lat;\n return p;\n }\n }\n\n}\n\nexport var names = [\"Azimuthal_Equidistant\", \"aeqd\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nexport function init() {\n //double temp; /* temporary variable */\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.sin_p14 = Math.sin(this.lat0);\n this.cos_p14 = Math.cos(this.lat0);\n}\n\n/* Orthographic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var sinphi, cosphi; /* sin and cos value */\n var dlon; /* delta longitude value */\n var coslon; /* cos of longitude */\n var ksp; /* scale factor */\n var g, x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n dlon = adjust_lon(lon - this.long0);\n\n sinphi = Math.sin(lat);\n cosphi = Math.cos(lat);\n\n coslon = Math.cos(dlon);\n g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n ksp = 1;\n if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n x = this.a * ksp * cosphi * Math.sin(dlon);\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh; /* height above ellipsoid */\n var z; /* angle */\n var sinz, cosz; /* sin of z and cos of z */\n var con;\n var lon, lat;\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n z = asinz(rh / this.a);\n\n sinz = Math.sin(z);\n cosz = Math.cos(z);\n\n lon = this.long0;\n if (Math.abs(rh) <= EPSLN) {\n lat = this.lat0;\n p.x = lon;\n p.y = lat;\n return p;\n }\n lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);\n con = Math.abs(this.lat0) - HALF_PI;\n if (Math.abs(con) <= EPSLN) {\n if (this.lat0 >= 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n }\n else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n }\n p.x = lon;\n p.y = lat;\n return p;\n }\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"ortho\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","// QSC projection rewritten from the original PROJ4\n// https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c\n\nimport {EPSLN, TWO_PI, SPI, HALF_PI, FORTPI} from '../constants/values';\n\n/* constants */\nvar FACE_ENUM = {\n FRONT: 1,\n RIGHT: 2,\n BACK: 3,\n LEFT: 4,\n TOP: 5,\n BOTTOM: 6\n};\n\nvar AREA_ENUM = {\n AREA_0: 1,\n AREA_1: 2,\n AREA_2: 3,\n AREA_3: 4\n};\n\nexport function init() {\n\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n this.lat_ts = this.lat_ts || 0;\n this.title = this.title || \"Quadrilateralized Spherical Cube\";\n\n /* Determine the cube face from the center of projection. */\n if (this.lat0 >= HALF_PI - FORTPI / 2.0) {\n this.face = FACE_ENUM.TOP;\n } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {\n this.face = FACE_ENUM.BOTTOM;\n } else if (Math.abs(this.long0) <= FORTPI) {\n this.face = FACE_ENUM.FRONT;\n } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {\n this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;\n } else {\n this.face = FACE_ENUM.BACK;\n }\n\n /* Fill in useful values for the ellipsoid <-> sphere shift\n * described in [LK12]. */\n if (this.es !== 0) {\n this.one_minus_f = 1 - (this.a - this.b) / this.a;\n this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;\n }\n}\n\n// QSC forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n var xy = {x: 0, y: 0};\n var lat, lon;\n var theta, phi;\n var t, mu;\n /* nu; */\n var area = {value: 0};\n\n // move lon according to projection's lon\n p.x -= this.long0;\n\n /* Convert the geodetic latitude to a geocentric latitude.\n * This corresponds to the shift from the ellipsoid to the sphere\n * described in [LK12]. */\n if (this.es !== 0) {//if (P->es != 0) {\n lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));\n } else {\n lat = p.y;\n }\n\n /* Convert the input lat, lon into theta, phi as used by QSC.\n * This depends on the cube face and the area on it.\n * For the top and bottom face, we can compute theta and phi\n * directly from phi, lam. For the other faces, we must use\n * unit sphere cartesian coordinates as an intermediate step. */\n lon = p.x; //lon = lp.lam;\n if (this.face === FACE_ENUM.TOP) {\n phi = HALF_PI - lat;\n if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n theta = lon - HALF_PI;\n } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_1;\n theta = (lon > 0.0 ? lon - SPI : lon + SPI);\n } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {\n area.value = AREA_ENUM.AREA_2;\n theta = lon + HALF_PI;\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta = lon;\n }\n } else if (this.face === FACE_ENUM.BOTTOM) {\n phi = HALF_PI + lat;\n if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n theta = -lon + HALF_PI;\n } else if (lon < FORTPI && lon >= -FORTPI) {\n area.value = AREA_ENUM.AREA_1;\n theta = -lon;\n } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_2;\n theta = -lon - HALF_PI;\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);\n }\n } else {\n var q, r, s;\n var sinlat, coslat;\n var sinlon, coslon;\n\n if (this.face === FACE_ENUM.RIGHT) {\n lon = qsc_shift_lon_origin(lon, +HALF_PI);\n } else if (this.face === FACE_ENUM.BACK) {\n lon = qsc_shift_lon_origin(lon, +SPI);\n } else if (this.face === FACE_ENUM.LEFT) {\n lon = qsc_shift_lon_origin(lon, -HALF_PI);\n }\n sinlat = Math.sin(lat);\n coslat = Math.cos(lat);\n sinlon = Math.sin(lon);\n coslon = Math.cos(lon);\n q = coslat * coslon;\n r = coslat * sinlon;\n s = sinlat;\n\n if (this.face === FACE_ENUM.FRONT) {\n phi = Math.acos(q);\n theta = qsc_fwd_equat_face_theta(phi, s, r, area);\n } else if (this.face === FACE_ENUM.RIGHT) {\n phi = Math.acos(r);\n theta = qsc_fwd_equat_face_theta(phi, s, -q, area);\n } else if (this.face === FACE_ENUM.BACK) {\n phi = Math.acos(-q);\n theta = qsc_fwd_equat_face_theta(phi, s, -r, area);\n } else if (this.face === FACE_ENUM.LEFT) {\n phi = Math.acos(-r);\n theta = qsc_fwd_equat_face_theta(phi, s, q, area);\n } else {\n /* Impossible */\n phi = theta = 0;\n area.value = AREA_ENUM.AREA_0;\n }\n }\n\n /* Compute mu and nu for the area of definition.\n * For mu, see Eq. (3-21) in [OL76], but note the typos:\n * compare with Eq. (3-14). For nu, see Eq. (3-38). */\n mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));\n t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));\n\n /* Apply the result to the real area. */\n if (area.value === AREA_ENUM.AREA_1) {\n mu += HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_2) {\n mu += SPI;\n } else if (area.value === AREA_ENUM.AREA_3) {\n mu += 1.5 * SPI;\n }\n\n /* Now compute x, y from mu and nu */\n xy.x = t * Math.cos(mu);\n xy.y = t * Math.sin(mu);\n xy.x = xy.x * this.a + this.x0;\n xy.y = xy.y * this.a + this.y0;\n\n p.x = xy.x;\n p.y = xy.y;\n return p;\n}\n\n// QSC inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n var lp = {lam: 0, phi: 0};\n var mu, nu, cosmu, tannu;\n var tantheta, theta, cosphi, phi;\n var t;\n var area = {value: 0};\n\n /* de-offset */\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n /* Convert the input x, y to the mu and nu angles as used by QSC.\n * This depends on the area of the cube face. */\n nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));\n mu = Math.atan2(p.y, p.x);\n if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {\n area.value = AREA_ENUM.AREA_0;\n } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {\n area.value = AREA_ENUM.AREA_1;\n mu -= HALF_PI;\n } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {\n area.value = AREA_ENUM.AREA_2;\n mu = (mu < 0.0 ? mu + SPI : mu - SPI);\n } else {\n area.value = AREA_ENUM.AREA_3;\n mu += HALF_PI;\n }\n\n /* Compute phi and theta for the area of definition.\n * The inverse projection is not described in the original paper, but some\n * good hints can be found here (as of 2011-12-14):\n * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302\n * (search for \"Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>\") */\n t = (SPI / 12) * Math.tan(mu);\n tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));\n theta = Math.atan(tantheta);\n cosmu = Math.cos(mu);\n tannu = Math.tan(nu);\n cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));\n if (cosphi < -1) {\n cosphi = -1;\n } else if (cosphi > +1) {\n cosphi = +1;\n }\n\n /* Apply the result to the real area on the cube face.\n * For the top and bottom face, we can compute phi and lam directly.\n * For the other faces, we must use unit sphere cartesian coordinates\n * as an intermediate step. */\n if (this.face === FACE_ENUM.TOP) {\n phi = Math.acos(cosphi);\n lp.phi = HALF_PI - phi;\n if (area.value === AREA_ENUM.AREA_0) {\n lp.lam = theta + HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_1) {\n lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);\n } else if (area.value === AREA_ENUM.AREA_2) {\n lp.lam = theta - HALF_PI;\n } else /* area.value == AREA_ENUM.AREA_3 */ {\n lp.lam = theta;\n }\n } else if (this.face === FACE_ENUM.BOTTOM) {\n phi = Math.acos(cosphi);\n lp.phi = phi - HALF_PI;\n if (area.value === AREA_ENUM.AREA_0) {\n lp.lam = -theta + HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_1) {\n lp.lam = -theta;\n } else if (area.value === AREA_ENUM.AREA_2) {\n lp.lam = -theta - HALF_PI;\n } else /* area.value == AREA_ENUM.AREA_3 */ {\n lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);\n }\n } else {\n /* Compute phi and lam via cartesian unit sphere coordinates. */\n var q, r, s;\n q = cosphi;\n t = q * q;\n if (t >= 1) {\n s = 0;\n } else {\n s = Math.sqrt(1 - t) * Math.sin(theta);\n }\n t += s * s;\n if (t >= 1) {\n r = 0;\n } else {\n r = Math.sqrt(1 - t);\n }\n /* Rotate q,r,s into the correct area. */\n if (area.value === AREA_ENUM.AREA_1) {\n t = r;\n r = -s;\n s = t;\n } else if (area.value === AREA_ENUM.AREA_2) {\n r = -r;\n s = -s;\n } else if (area.value === AREA_ENUM.AREA_3) {\n t = r;\n r = s;\n s = -t;\n }\n /* Rotate q,r,s into the correct cube face. */\n if (this.face === FACE_ENUM.RIGHT) {\n t = q;\n q = -r;\n r = t;\n } else if (this.face === FACE_ENUM.BACK) {\n q = -q;\n r = -r;\n } else if (this.face === FACE_ENUM.LEFT) {\n t = q;\n q = r;\n r = -t;\n }\n /* Now compute phi and lam from the unit sphere coordinates. */\n lp.phi = Math.acos(-s) - HALF_PI;\n lp.lam = Math.atan2(r, q);\n if (this.face === FACE_ENUM.RIGHT) {\n lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);\n } else if (this.face === FACE_ENUM.BACK) {\n lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);\n } else if (this.face === FACE_ENUM.LEFT) {\n lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);\n }\n }\n\n /* Apply the shift from the sphere to the ellipsoid as described\n * in [LK12]. */\n if (this.es !== 0) {\n var invert_sign;\n var tanphi, xa;\n invert_sign = (lp.phi < 0 ? 1 : 0);\n tanphi = Math.tan(lp.phi);\n xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);\n lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));\n if (invert_sign) {\n lp.phi = -lp.phi;\n }\n }\n\n lp.lam += this.long0;\n p.x = lp.lam;\n p.y = lp.phi;\n return p;\n}\n\n/* Helper function for forward projection: compute the theta angle\n * and determine the area number. */\nfunction qsc_fwd_equat_face_theta(phi, y, x, area) {\n var theta;\n if (phi < EPSLN) {\n area.value = AREA_ENUM.AREA_0;\n theta = 0.0;\n } else {\n theta = Math.atan2(y, x);\n if (Math.abs(theta) <= FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_1;\n theta -= HALF_PI;\n } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_2;\n theta = (theta >= 0.0 ? theta - SPI : theta + SPI);\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta += HALF_PI;\n }\n }\n return theta;\n}\n\n/* Helper function: shift the longitude. */\nfunction qsc_shift_lon_origin(lon, offset) {\n var slon = lon + offset;\n if (slon < -SPI) {\n slon += TWO_PI;\n } else if (slon > +SPI) {\n slon -= TWO_PI;\n }\n return slon;\n}\n\nexport var names = [\"Quadrilateralized Spherical Cube\", \"Quadrilateralized_Spherical_Cube\", \"qsc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n\n","// Robinson projection\n// Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c\n// Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039\n\nimport {HALF_PI, D2R, R2D, EPSLN} from '../constants/values';\nimport adjust_lon from '../common/adjust_lon';\n\nvar COEFS_X = [\n [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],\n [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],\n [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],\n [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],\n [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],\n [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],\n [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],\n [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],\n [0.9216, -0.00467746, -0.00010457, 4.81243e-06],\n [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],\n [0.8679, -0.00609363, -0.000113898, 3.32484e-06],\n [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],\n [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],\n [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],\n [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],\n [0.6732, -0.00986209, -0.000199569, 1.91974e-05],\n [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],\n [0.5722, -0.00906601, 0.000182, 6.24051e-06],\n [0.5322, -0.00677797, 0.000275608, 6.24051e-06]\n];\n\nvar COEFS_Y = [\n [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],\n [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],\n [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],\n [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],\n [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],\n [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],\n [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],\n [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],\n [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],\n [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],\n [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],\n [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],\n [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],\n [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],\n [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],\n [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],\n [0.9394, 0.00840947, -0.000192841, -4.2106e-06],\n [0.9761, 0.00616527, -0.000256, -4.2106e-06],\n [1.0000, 0.00328947, -0.000319159, -4.2106e-06]\n];\n\nvar FXC = 0.8487;\nvar FYC = 1.3523;\nvar C1 = R2D/5; // rad to 5-degree interval\nvar RC1 = 1/C1;\nvar NODES = 18;\n\nvar poly3_val = function(coefs, x) {\n return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));\n};\n\nvar poly3_der = function(coefs, x) {\n return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);\n};\n\nfunction newton_rapshon(f_df, start, max_err, iters) {\n var x = start;\n for (; iters; --iters) {\n var upd = f_df(x);\n x -= upd;\n if (Math.abs(upd) < max_err) {\n break;\n }\n }\n return x;\n}\n\nexport function init() {\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.long0 = this.long0 || 0;\n this.es = 0;\n this.title = this.title || \"Robinson\";\n}\n\nexport function forward(ll) {\n var lon = adjust_lon(ll.x - this.long0);\n\n var dphi = Math.abs(ll.y);\n var i = Math.floor(dphi * C1);\n if (i < 0) {\n i = 0;\n } else if (i >= NODES) {\n i = NODES - 1;\n }\n dphi = R2D * (dphi - RC1 * i);\n var xy = {\n x: poly3_val(COEFS_X[i], dphi) * lon,\n y: poly3_val(COEFS_Y[i], dphi)\n };\n if (ll.y < 0) {\n xy.y = -xy.y;\n }\n\n xy.x = xy.x * this.a * FXC + this.x0;\n xy.y = xy.y * this.a * FYC + this.y0;\n return xy;\n}\n\nexport function inverse(xy) {\n var ll = {\n x: (xy.x - this.x0) / (this.a * FXC),\n y: Math.abs(xy.y - this.y0) / (this.a * FYC)\n };\n\n if (ll.y >= 1) { // pathologic case\n ll.x /= COEFS_X[NODES][0];\n ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;\n } else {\n // find table interval\n var i = Math.floor(ll.y * NODES);\n if (i < 0) {\n i = 0;\n } else if (i >= NODES) {\n i = NODES - 1;\n }\n for (;;) {\n if (COEFS_Y[i][0] > ll.y) {\n --i;\n } else if (COEFS_Y[i+1][0] <= ll.y) {\n ++i;\n } else {\n break;\n }\n }\n // linear interpolation in 5 degree interval\n var coefs = COEFS_Y[i];\n var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]);\n // find t so that poly3_val(coefs, t) = ll.y\n t = newton_rapshon(function(x) {\n return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);\n }, t, EPSLN, 100);\n\n ll.x /= poly3_val(COEFS_X[i], t);\n ll.y = (5 * i + t) * D2R;\n if (xy.y < 0) {\n ll.y = -ll.y;\n }\n }\n\n ll.x = adjust_lon(ll.x + this.long0);\n return ll;\n}\n\nexport var names = [\"Robinson\", \"robin\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {\n geodeticToGeocentric,\n geocentricToGeodetic\n} from '../datumUtils';\n\nexport function init() {\n this.name = 'geocent';\n\n}\n\nexport function forward(p) {\n var point = geodeticToGeocentric(p, this.es, this.a);\n return point;\n}\n\nexport function inverse(p) {\n var point = geocentricToGeodetic(p, this.es, this.a, this.b);\n return point;\n}\n\nexport var names = [\"Geocentric\", 'geocentric', \"geocent\", \"Geocent\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};","\nvar mode = {\n N_POLE: 0,\n S_POLE: 1,\n EQUIT: 2,\n OBLIQ: 3\n};\n\nimport { D2R, HALF_PI, EPSLN } from \"../constants/values\";\nimport hypot from \"../common/hypot\";\n\nvar params = {\n h: { def: 100000, num: true }, // default is Karman line, no default in PROJ.7\n azi: { def: 0, num: true, degrees: true }, // default is North\n tilt: { def: 0, num: true, degrees: true }, // default is Nadir\n long0: { def: 0, num: true }, // default is Greenwich, conversion to rad is automatic\n lat0: { def: 0, num: true } // default is Equator, conversion to rad is automatic\n};\n\nexport function init() {\n Object.keys(params).forEach(function (p) {\n if (typeof this[p] === \"undefined\") {\n this[p] = params[p].def;\n } else if (params[p].num && isNaN(this[p])) {\n throw new Error(\"Invalid parameter value, must be numeric \" + p + \" = \" + this[p]);\n } else if (params[p].num) {\n this[p] = parseFloat(this[p]);\n }\n if (params[p].degrees) {\n this[p] = this[p] * D2R;\n }\n }.bind(this));\n\n if (Math.abs((Math.abs(this.lat0) - HALF_PI)) < EPSLN) {\n this.mode = this.lat0 < 0 ? mode.S_POLE : mode.N_POLE;\n } else if (Math.abs(this.lat0) < EPSLN) {\n this.mode = mode.EQUIT;\n } else {\n this.mode = mode.OBLIQ;\n this.sinph0 = Math.sin(this.lat0);\n this.cosph0 = Math.cos(this.lat0);\n }\n\n this.pn1 = this.h / this.a; // Normalize relative to the Earth's radius\n\n if (this.pn1 <= 0 || this.pn1 > 1e10) {\n throw new Error(\"Invalid height\");\n }\n \n this.p = 1 + this.pn1;\n this.rp = 1 / this.p;\n this.h1 = 1 / this.pn1;\n this.pfact = (this.p + 1) * this.h1;\n this.es = 0;\n\n var omega = this.tilt;\n var gamma = this.azi;\n this.cg = Math.cos(gamma);\n this.sg = Math.sin(gamma);\n this.cw = Math.cos(omega);\n this.sw = Math.sin(omega);\n}\n\nexport function forward(p) {\n p.x -= this.long0;\n var sinphi = Math.sin(p.y);\n var cosphi = Math.cos(p.y);\n var coslam = Math.cos(p.x);\n var x, y;\n switch (this.mode) {\n case mode.OBLIQ:\n y = this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n break;\n case mode.EQUIT:\n y = cosphi * coslam;\n break;\n case mode.S_POLE:\n y = -sinphi;\n break;\n case mode.N_POLE:\n y = sinphi;\n break;\n }\n y = this.pn1 / (this.p - y);\n x = y * cosphi * Math.sin(p.x);\n\n switch (this.mode) {\n case mode.OBLIQ:\n y *= this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n break;\n case mode.EQUIT:\n y *= sinphi;\n break;\n case mode.N_POLE:\n y *= -(cosphi * coslam);\n break;\n case mode.S_POLE:\n y *= cosphi * coslam;\n break;\n }\n\n // Tilt \n var yt, ba;\n yt = y * this.cg + x * this.sg;\n ba = 1 / (yt * this.sw * this.h1 + this.cw);\n x = (x * this.cg - y * this.sg) * this.cw * ba;\n y = yt * ba;\n\n p.x = x * this.a;\n p.y = y * this.a;\n return p;\n}\n\nexport function inverse(p) {\n p.x /= this.a;\n p.y /= this.a;\n var r = { x: p.x, y: p.y };\n\n // Un-Tilt\n var bm, bq, yt;\n yt = 1 / (this.pn1 - p.y * this.sw);\n bm = this.pn1 * p.x * yt;\n bq = this.pn1 * p.y * this.cw * yt;\n p.x = bm * this.cg + bq * this.sg;\n p.y = bq * this.cg - bm * this.sg;\n\n var rh = hypot(p.x, p.y);\n if (Math.abs(rh) < EPSLN) {\n r.x = 0;\n r.y = p.y;\n } else {\n var cosz, sinz;\n sinz = 1 - rh * rh * this.pfact;\n sinz = (this.p - Math.sqrt(sinz)) / (this.pn1 / rh + rh / this.pn1);\n cosz = Math.sqrt(1 - sinz * sinz);\n switch (this.mode) {\n case mode.OBLIQ:\n r.y = Math.asin(cosz * this.sinph0 + p.y * sinz * this.cosph0 / rh);\n p.y = (cosz - this.sinph0 * Math.sin(r.y)) * rh;\n p.x *= sinz * this.cosph0;\n break;\n case mode.EQUIT:\n r.y = Math.asin(p.y * sinz / rh);\n p.y = cosz * rh;\n p.x *= sinz;\n break;\n case mode.N_POLE:\n r.y = Math.asin(cosz);\n p.y = -p.y;\n break;\n case mode.S_POLE:\n r.y = -Math.asin(cosz);\n break;\n }\n r.x = Math.atan2(p.x, p.y);\n }\n\n p.x = r.x + this.long0;\n p.y = r.y;\n return p;\n}\n\nexport var names = [\"Tilted_Perspective\", \"tpers\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import hypot from '../common/hypot';\n\nexport function init() {\n this.flip_axis = (this.sweep === 'x' ? 1 : 0);\n this.h = Number(this.h);\n this.radius_g_1 = this.h / this.a;\n\n if (this.radius_g_1 <= 0 || this.radius_g_1 > 1e10) {\n throw new Error();\n }\n\n this.radius_g = 1.0 + this.radius_g_1;\n this.C = this.radius_g * this.radius_g - 1.0;\n\n if (this.es !== 0.0) {\n var one_es = 1.0 - this.es;\n var rone_es = 1 / one_es;\n\n this.radius_p = Math.sqrt(one_es);\n this.radius_p2 = one_es;\n this.radius_p_inv2 = rone_es;\n\n this.shape = 'ellipse'; // Use as a condition in the forward and inverse functions.\n } else {\n this.radius_p = 1.0;\n this.radius_p2 = 1.0;\n this.radius_p_inv2 = 1.0;\n\n this.shape = 'sphere'; // Use as a condition in the forward and inverse functions.\n }\n\n if (!this.title) {\n this.title = \"Geostationary Satellite View\";\n }\n}\n\nfunction forward(p) {\n var lon = p.x;\n var lat = p.y;\n var tmp, v_x, v_y, v_z;\n lon = lon - this.long0;\n\n if (this.shape === 'ellipse') {\n lat = Math.atan(this.radius_p2 * Math.tan(lat));\n var r = this.radius_p / hypot(this.radius_p * Math.cos(lat), Math.sin(lat));\n\n v_x = r * Math.cos(lon) * Math.cos(lat);\n v_y = r * Math.sin(lon) * Math.cos(lat);\n v_z = r * Math.sin(lat);\n\n if (((this.radius_g - v_x) * v_x - v_y * v_y - v_z * v_z * this.radius_p_inv2) < 0.0) {\n p.x = Number.NaN;\n p.y = Number.NaN;\n return p;\n }\n\n tmp = this.radius_g - v_x;\n if (this.flip_axis) {\n p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp));\n p.y = this.radius_g_1 * Math.atan(v_z / tmp);\n } else {\n p.x = this.radius_g_1 * Math.atan(v_y / tmp);\n p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp));\n }\n } else if (this.shape === 'sphere') {\n tmp = Math.cos(lat);\n v_x = Math.cos(lon) * tmp;\n v_y = Math.sin(lon) * tmp;\n v_z = Math.sin(lat);\n tmp = this.radius_g - v_x;\n\n if (this.flip_axis) {\n p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp));\n p.y = this.radius_g_1 * Math.atan(v_z / tmp);\n } else {\n p.x = this.radius_g_1 * Math.atan(v_y / tmp);\n p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp));\n }\n }\n p.x = p.x * this.a;\n p.y = p.y * this.a;\n return p;\n}\n\nfunction inverse(p) {\n var v_x = -1.0;\n var v_y = 0.0;\n var v_z = 0.0;\n var a, b, det, k;\n\n p.x = p.x / this.a;\n p.y = p.y / this.a;\n\n if (this.shape === 'ellipse') {\n if (this.flip_axis) {\n v_z = Math.tan(p.y / this.radius_g_1);\n v_y = Math.tan(p.x / this.radius_g_1) * hypot(1.0, v_z);\n } else {\n v_y = Math.tan(p.x / this.radius_g_1);\n v_z = Math.tan(p.y / this.radius_g_1) * hypot(1.0, v_y);\n }\n\n var v_zp = v_z / this.radius_p;\n a = v_y * v_y + v_zp * v_zp + v_x * v_x;\n b = 2 * this.radius_g * v_x;\n det = (b * b) - 4 * a * this.C;\n\n if (det < 0.0) {\n p.x = Number.NaN;\n p.y = Number.NaN;\n return p;\n }\n\n k = (-b - Math.sqrt(det)) / (2.0 * a);\n v_x = this.radius_g + k * v_x;\n v_y *= k;\n v_z *= k;\n\n p.x = Math.atan2(v_y, v_x);\n p.y = Math.atan(v_z * Math.cos(p.x) / v_x);\n p.y = Math.atan(this.radius_p_inv2 * Math.tan(p.y));\n } else if (this.shape === 'sphere') {\n if (this.flip_axis) {\n v_z = Math.tan(p.y / this.radius_g_1);\n v_y = Math.tan(p.x / this.radius_g_1) * Math.sqrt(1.0 + v_z * v_z);\n } else {\n v_y = Math.tan(p.x / this.radius_g_1);\n v_z = Math.tan(p.y / this.radius_g_1) * Math.sqrt(1.0 + v_y * v_y);\n }\n\n a = v_y * v_y + v_z * v_z + v_x * v_x;\n b = 2 * this.radius_g * v_x;\n det = (b * b) - 4 * a * this.C;\n if (det < 0.0) {\n p.x = Number.NaN;\n p.y = Number.NaN;\n return p;\n }\n\n k = (-b - Math.sqrt(det)) / (2.0 * a);\n v_x = this.radius_g + k * v_x;\n v_y *= k;\n v_z *= k;\n\n p.x = Math.atan2(v_y, v_x);\n p.y = Math.atan(v_z * Math.cos(p.x) / v_x);\n }\n p.x = p.x + this.long0;\n return p;\n}\n\nexport var names = [\"Geostationary Satellite View\", \"Geostationary_Satellite\", \"geos\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n};\n\n","/**\n * Copyright 2018 Bernie Jenny, Monash University, Melbourne, Australia.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Equal Earth is a projection inspired by the Robinson projection, but unlike\n * the Robinson projection retains the relative size of areas. The projection\n * was designed in 2018 by Bojan Savric, Tom Patterson and Bernhard Jenny.\n *\n * Publication:\n * Bojan Savric, Tom Patterson & Bernhard Jenny (2018). The Equal Earth map\n * projection, International Journal of Geographical Information Science,\n * DOI: 10.1080/13658816.2018.1504949\n *\n * Code released August 2018\n * Ported to JavaScript and adapted for mapshaper-proj by Matthew Bloch August 2018\n * Modified for proj4js by Andreas Hocevar by Andreas Hocevar March 2024\n */\n\nimport adjust_lon from \"../common/adjust_lon\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = Math.sqrt(3) / 2.0;\n\nexport function init() {\n this.es = 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n}\n\nexport function forward(p) {\n var lam = adjust_lon(p.x - this.long0);\n var phi = p.y;\n var paramLat = Math.asin(M * Math.sin(phi)),\n paramLatSq = paramLat * paramLat,\n paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n p.x = lam * Math.cos(paramLat) /\n (M * (A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq)));\n p.y = paramLat * (A1 + A2 * paramLatSq + paramLatPow6 * (A3 + A4 * paramLatSq));\n\n p.x = this.a * p.x + this.x0;\n p.y = this.a * p.y + this.y0;\n return p;\n}\n\nexport function inverse(p) {\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n var EPS = 1e-9,\n NITER = 12,\n paramLat = p.y,\n paramLatSq, paramLatPow6, fy, fpy, dlat, i;\n\n for (i = 0; i < NITER; ++i) {\n paramLatSq = paramLat * paramLat;\n paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n fy = paramLat * (A1 + A2 * paramLatSq + paramLatPow6 * (A3 + A4 * paramLatSq)) - p.y;\n fpy = A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq);\n paramLat -= dlat = fy / fpy;\n if (Math.abs(dlat) < EPS) {\n break;\n }\n }\n paramLatSq = paramLat * paramLat;\n paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n p.x = M * p.x * (A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq)) /\n Math.cos(paramLat);\n p.y = Math.asin(Math.sin(paramLat) / M);\n\n p.x = adjust_lon(p.x + this.long0);\n return p;\n}\n\nexport var names = [\"eqearth\", \"Equal Earth\", \"Equal_Earth\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};","import adjust_lat from \"../common/adjust_lat\";\nimport adjust_lon from \"../common/adjust_lon\";\nimport hypot from \"../common/hypot\";\nimport pj_enfn from \"../common/pj_enfn\";\nimport pj_inv_mlfn from \"../common/pj_inv_mlfn\";\nimport pj_mlfn from \"../common/pj_mlfn\";\nimport { HALF_PI } from \"../constants/values\";\n\nvar EPS10 = 1e-10;\n\nexport function init() {\n var c;\n\n this.phi1 = this.lat1;\n if (Math.abs(this.phi1) < EPS10) {\n throw new Error();\n }\n if (this.es) {\n this.en = pj_enfn(this.es);\n this.m1 = pj_mlfn(this.phi1, this.am1 = Math.sin(this.phi1),\n c = Math.cos(this.phi1), this.en);\n this.am1 = c / (Math.sqrt(1 - this.es * this.am1 * this.am1) * this.am1);\n this.inverse = e_inv;\n this.forward = e_fwd;\n } else {\n if (Math.abs(this.phi1) + EPS10 >= HALF_PI) {\n this.cphi1 = 0;\n }\n else {\n this.cphi1 = 1 / Math.tan(this.phi1);\n }\n this.inverse = s_inv;\n this.forward = s_fwd;\n }\n}\n\nfunction e_fwd(p) {\n var lam = adjust_lon(p.x - (this.long0 || 0));\n var phi = p.y;\n var rh, E, c;\n rh = this.am1 + this.m1 - pj_mlfn(phi, E = Math.sin(phi), c = Math.cos(phi), this.en);\n E = c * lam / (rh * Math.sqrt(1 - this.es * E * E));\n p.x = rh * Math.sin(E);\n p.y = this.am1 - rh * Math.cos(E);\n\n p.x = this.a * p.x + (this.x0 || 0);\n p.y = this.a * p.y + (this.y0 || 0);\n return p;\n}\n\nfunction e_inv(p) {\n p.x = (p.x - (this.x0 || 0)) / this.a;\n p.y = (p.y - (this.y0 || 0)) / this.a;\n\n var s, rh, lam, phi;\n rh = hypot(p.x, p.y = this.am1 - p.y);\n phi = pj_inv_mlfn(this.am1 + this.m1 - rh, this.es, this.en);\n if ((s = Math.abs(phi)) < HALF_PI) {\n s = Math.sin(phi);\n lam = rh * Math.atan2(p.x, p.y) * Math.sqrt(1 - this.es * s * s) / Math.cos(phi);\n } else if (Math.abs(s - HALF_PI) <= EPS10) {\n lam = 0;\n }\n else {\n throw new Error();\n }\n p.x = adjust_lon(lam + (this.long0 || 0));\n p.y = adjust_lat(phi);\n return p;\n}\n\nfunction s_fwd(p) {\n var lam = adjust_lon(p.x - (this.long0 || 0));\n var phi = p.y;\n var E, rh;\n rh = this.cphi1 + this.phi1 - phi;\n if (Math.abs(rh) > EPS10) {\n p.x = rh * Math.sin(E = lam * Math.cos(phi) / rh);\n p.y = this.cphi1 - rh * Math.cos(E);\n } else {\n p.x = p.y = 0;\n }\n\n p.x = this.a * p.x + (this.x0 || 0);\n p.y = this.a * p.y + (this.y0 || 0);\n return p;\n}\n\nfunction s_inv(p) {\n p.x = (p.x - (this.x0 || 0)) / this.a;\n p.y = (p.y - (this.y0 || 0)) / this.a;\n\n var lam, phi;\n var rh = hypot(p.x, p.y = this.cphi1 - p.y);\n phi = this.cphi1 + this.phi1 - rh;\n if (Math.abs(phi) > HALF_PI) {\n throw new Error();\n }\n if (Math.abs(Math.abs(phi) - HALF_PI) <= EPS10) {\n lam = 0;\n } else {\n lam = rh * Math.atan2(p.x, p.y) / Math.cos(phi);\n }\n p.x = adjust_lon(lam + (this.long0 || 0));\n p.y = adjust_lat(phi);\n return p;\n}\n\nexport var names = [\"bonne\", \"Bonne (Werner lat_1=90)\"];\nexport default {\n init: init,\n names: names\n};","import proj4 from './core';\nimport Proj from \"./Proj\";\nimport Point from \"./Point\";\nimport common from \"./common/toPoint\";\nimport defs from \"./defs\";\nimport nadgrid from \"./nadgrid\";\nimport transform from \"./transform\";\nimport mgrs from \"mgrs\";\nimport includedProjections from \"../projs\";\n\nproj4.defaultDatum = 'WGS84'; //default datum\nproj4.Proj = Proj;\nproj4.WGS84 = new proj4.Proj('WGS84');\nproj4.Point = Point;\nproj4.toPoint = common;\nproj4.defs = defs;\nproj4.nadgrid = nadgrid;\nproj4.transform = transform;\nproj4.mgrs = mgrs;\nproj4.version = '__VERSION__';\nincludedProjections(proj4);\nexport default proj4;\n","import tmerc from './lib/projections/tmerc';\nimport etmerc from './lib/projections/etmerc';\nimport utm from './lib/projections/utm';\nimport sterea from './lib/projections/sterea';\nimport stere from './lib/projections/stere';\nimport somerc from './lib/projections/somerc';\nimport omerc from './lib/projections/omerc';\nimport lcc from './lib/projections/lcc';\nimport krovak from './lib/projections/krovak';\nimport cass from './lib/projections/cass';\nimport laea from './lib/projections/laea';\nimport aea from './lib/projections/aea';\nimport gnom from './lib/projections/gnom';\nimport cea from './lib/projections/cea';\nimport eqc from './lib/projections/eqc';\nimport poly from './lib/projections/poly';\nimport nzmg from './lib/projections/nzmg';\nimport mill from './lib/projections/mill';\nimport sinu from './lib/projections/sinu';\nimport moll from './lib/projections/moll';\nimport eqdc from './lib/projections/eqdc';\nimport vandg from './lib/projections/vandg';\nimport aeqd from './lib/projections/aeqd';\nimport ortho from './lib/projections/ortho';\nimport qsc from './lib/projections/qsc';\nimport robin from './lib/projections/robin';\nimport geocent from './lib/projections/geocent';\nimport tpers from './lib/projections/tpers';\nimport geos from './lib/projections/geos';\nimport eqearth from './lib/projections/eqearth';\nimport bonne from './lib/projections/bonne';\nexport default function(proj4){\n proj4.Proj.projections.add(tmerc);\n proj4.Proj.projections.add(etmerc);\n proj4.Proj.projections.add(utm);\n proj4.Proj.projections.add(sterea);\n proj4.Proj.projections.add(stere);\n proj4.Proj.projections.add(somerc);\n proj4.Proj.projections.add(omerc);\n proj4.Proj.projections.add(lcc);\n proj4.Proj.projections.add(krovak);\n proj4.Proj.projections.add(cass);\n proj4.Proj.projections.add(laea);\n proj4.Proj.projections.add(aea);\n proj4.Proj.projections.add(gnom);\n proj4.Proj.projections.add(cea);\n proj4.Proj.projections.add(eqc);\n proj4.Proj.projections.add(poly);\n proj4.Proj.projections.add(nzmg);\n proj4.Proj.projections.add(mill);\n proj4.Proj.projections.add(sinu);\n proj4.Proj.projections.add(moll);\n proj4.Proj.projections.add(eqdc);\n proj4.Proj.projections.add(vandg);\n proj4.Proj.projections.add(aeqd);\n proj4.Proj.projections.add(ortho);\n proj4.Proj.projections.add(qsc);\n proj4.Proj.projections.add(robin);\n proj4.Proj.projections.add(geocent);\n proj4.Proj.projections.add(tpers);\n proj4.Proj.projections.add(geos);\n proj4.Proj.projections.add(eqearth);\n proj4.Proj.projections.add(bonne);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = ol.proj.transforms;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.proj.Projection;","import {\n addCoordinateTransforms,\n addProjection,\n addEquivalentProjections,\n get\n} from \"ol/proj\";\nimport { get as getTransform } from \"ol/proj/transforms\";\nimport Projection from \"ol/proj/Projection\";\n\nimport Logger from \"../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"CRS\");\n\nexport function register (proj4) {\n const projCodes = Object.keys(proj4.defs);\n logger.trace(\"proj. codes :\", projCodes);\n\n const len = projCodes.length;\n let i, j;\n for (i = 0; i < len; ++i) {\n const code = projCodes[i];\n if (!get(code)) {\n const def = proj4.defs(code);\n addProjection(new Projection({\n code : code,\n axisOrientation : def.axis,\n metersPerUnit : def.to_meter,\n units : def.units\n }));\n }\n }\n for (i = 0; i < len; ++i) {\n const code1 = projCodes[i];\n const proj1 = get(code1);\n\n for (j = 0; j < len; ++j) {\n const code2 = projCodes[j];\n const proj2 = get(code2);\n\n if (!getTransform(code1, code2)) {\n if (proj4.defs[code1] === proj4.defs[code2]) {\n addEquivalentProjections([proj1, proj2]);\n } else {\n const transform = proj4(code1, code2);\n addCoordinateTransforms(proj1, proj2, transform.forward, transform.inverse);\n }\n }\n }\n }\n}\n","/**\n * @module Register\n * @alias module:~utils/Register\n * @description\n * Register definition for IGNF, and EPSG CRS.\n *\n * @example\n * Gp.Register.IGNF.AMST63\n * // return : \"+title=Amsterdam 1963 +proj=geocent +towgs84=109.753,-528.133,-362.244,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\"\n * Gp.Register.get(\"IGNF:AMST63\")\n * // same as Gp.Register.IGNF.AMST63\n */\nvar Register = {\n\n /**\n * instance already loaded into proj4\n */\n isLoaded : false,\n\n /**\n * get the definition for a code\n *\n * @function get\n * @param {String} name - ie. EPSG:2154 (Lambert)\n * @returns {Object} definition\n * @example\n * Register.get(\"EPSG:2154\");\n * // \"+title=RGF93 / Lambert-93 +proj=lcc +lat_1=49 ...\"\n */\n get : function (name) {\n if (name === \"\" || name === null || typeof name === \"undefined\") {\n return;\n }\n\n var s = name.split(\":\");\n if (s.length !== 2) {\n return;\n }\n\n var _register = s[0];\n var _code = s[1];\n\n if (!this.hasOwnProperty(_register)) {\n return;\n }\n\n if (!this[_register].hasOwnProperty(_code)) {\n return;\n }\n\n return this[_register][_code];\n },\n\n /**\n * does projection code exist ?\n *\n * @function exist\n * @param {String} name - ie. EPSG:2154 (Lambert)\n * @returns {Boolean} true/false\n * @example\n * Register.exist(\"EPSG:2154\"); // true\n */\n exist : function (name) {\n if (name === \"\" || name === null || typeof name === \"undefined\") {\n return false;\n }\n\n var s = name.split(\":\");\n if (s.length !== 2) {\n return false;\n }\n\n var _register = s[0];\n var _code = s[1];\n\n if (!this.hasOwnProperty(_register)) {\n return false;\n }\n\n if (!this[_register].hasOwnProperty(_code)) {\n return false;\n }\n\n return true;\n },\n\n /**\n * load all defs to proj4\n * @function load\n * @param {Object} Proj4 - proj4 instance\n */\n load : function (Proj4) {\n // un flag pour savoir si le chargement est déjà realisé\n // (car ceci peut être couteux !)\n if (!this.isLoaded) {\n var registers = [\n \"IGNF\", // exception lors du register IGNF ?\n \"EPSG\",\n \"CRS\"\n ];\n for (var i = 0; i < registers.length; i++) {\n var _register = registers[i];\n var codes = this[_register];\n for (var _code in codes) {\n if (codes.hasOwnProperty(_code)) {\n var name = _register + \":\" + _code;\n Proj4.defs(name, this.get(name));\n // on enlève la dependance à OpenLayers...\n // la fonction register est donc à appeller afin d'enregistrer\n // les definitions dans OpenLayers :\n // import { get } from \"ol/proj\";\n // import proj4 from \"proj4\";\n // import { register } from \"ol/proj/proj4\";\n // Register.load();\n // // Make projections defined in proj4 (with proj4.defs()) available in OpenLayers.\n // // see ol/proj/proj4.register (https://openlayers.org/en/latest/apidoc/module-ol_proj_proj4.html)\n // register(proj4);\n // console.log(get(\"CRS:84\").getCode()); // \"CRS:84\"\n }\n }\n }\n /** ts-syntax */ (this.isLoaded) = true;\n }\n },\n\n /**\n * load defs by default to proj4\n *\n * include into proj4 :\n * - WGS84\n * - ['EPSG:4326']\n * - ['EPSG:3785'], ['EPSG:3857'], GOOGLE, ['EPSG:900913'], ['EPSG:102113']\n * +\n * - [\"EPSG:2154\"], [\"EPSG:27571\"], [\"EPSG:27572\"], [\"EPSG:27573\"], [\"EPSG:2757\"],\n * - [\"CRS:84\"],\n * - [\"IGNF:LAMB93\"],\n * - [\"IGNF:LAMBE\"], [\"IGNF:LAMB1\"], [\"IGNF:LAMB2\"], [\"IGNF:LAMB3\"], [\"IGNF:LAMB4\"],\n * - [\"IGNF:RGF93G\"],\n * - [\"IGNF:WGS84G\"]\n *\n * @function loadByDefault\n * @param {Object} Proj4 - proj4 instance\n */\n loadByDefault : function (Proj4) {\n // la liste de projections par defaut...\n var registers = {\n EPSG : {\n 2154 : Register[\"EPSG\"][\"2154\"],\n 27571 : Register[\"EPSG\"][\"27571\"],\n 27572 : Register[\"EPSG\"][\"27572\"],\n 27573 : Register[\"EPSG\"][\"27573\"],\n 27574 : Register[\"EPSG\"][\"27574\"]\n },\n CRS : {\n 84 : Register[\"CRS\"][\"84\"]\n },\n IGNF : {\n LAMB93 : Register[\"IGNF\"][\"LAMB93\"],\n LAMBE : Register[\"IGNF\"][\"LAMBE\"],\n LAMB1 : Register[\"IGNF\"][\"LAMB1\"],\n LAMB2 : Register[\"IGNF\"][\"LAMB2\"],\n LAMB3 : Register[\"IGNF\"][\"LAMB3\"],\n LAMB4 : Register[\"IGNF\"][\"LAMB4\"],\n RGF93G : Register[\"IGNF\"][\"RGF93G\"],\n WGS84G : Register[\"IGNF\"][\"WGS84G\"]\n }\n };\n\n for (var register in registers) {\n if (registers.hasOwnProperty(register)) {\n var codes = registers[register];\n for (var code in codes) {\n if (codes.hasOwnProperty(code)) {\n var name = register + \":\" + code;\n Proj4.defs(name, codes[code]);\n }\n }\n }\n }\n },\n\n /**\n * load only a def to proj4\n *\n * @function loadByName\n * @param {Object} Proj4 - proj4 instance\n * @param {String} name - ie. EPSG:2154 (Lambert)\n * @returns {Boolean} true/false\n */\n loadByName : function (Proj4, name) {\n if (!this.exist(name)) {\n return false;\n }\n\n try {\n Proj4.defs(name, this.get(name));\n } catch (e) {\n // FIXME message !?\n return false;\n }\n\n return true;\n },\n\n /**\n * definitions EPSG\n * @enum\n */\n EPSG : {\n 4978 : \"+proj=geocent +datum=WGS84 +units=m +no_defs \",\n 3857 : \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs\",\n 3785 : \"+title=WGS 84 / Pseudo-Mercator (deprecated) +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs\",\n 4149 : \"+title=CH1903 +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs \",\n 4150 : \"+title=CH1903plus +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs \",\n 4151 : \"+title=CHTRF95 +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4171 : \"+title=RGF93 +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4230 : \"+title=ED50 +proj=longlat +ellps=intl +no_defs \",\n 4235 : \"+title=Guyane Francaise +proj=longlat +ellps=intl +no_defs \",\n 4258 : \"+title=ETRS89 +proj=longlat +ellps=GRS80 +no_defs \",\n 4275 : \"+title=NTF +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs \",\n 4322 : \"+title=WGS 72 +proj=longlat +ellps=WGS72 +no_defs \",\n 4326 : \"+title=WGS 84 +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs \",\n 4467 : \"+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 4470 : \"+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4471 : \"+proj=utm +zone=38 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 4474 : \"+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs \",\n 4558 : \"+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4559 : \"+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 4621 : \"+title=Fort Marigot +proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs \",\n 4622 : \"+title=Guadeloupe 1948 +proj=longlat +ellps=intl +no_defs \",\n 4623 : \"+title=CSG67 +proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 +no_defs \",\n 4624 : \"+title=RGFG95 +proj=longlat +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +no_defs \",\n 4625 : \"+title=Martinique 1938 +proj=longlat +ellps=intl +no_defs \",\n 4626 : \"+title=Reunion 1947 +proj=longlat +ellps=intl +no_defs \",\n 4627 : \"+title=RGR92 +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4628 : \"+title=Tahiti 52 +proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +no_defs \",\n 4629 : \"+title=Tahaa 54 +proj=longlat +ellps=intl +no_defs \",\n 4630 : \"+title=IGN72 Nuku Hiva +proj=longlat +ellps=intl +no_defs \",\n 4632 : \"+title=Combani 1950 +proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +no_defs \",\n 4633 : \"+title=IGN56 Lifou +proj=longlat +ellps=intl +no_defs \",\n 4634 : \"+title=IGN72 Grand Terre +proj=longlat +ellps=intl +no_defs \",\n 4637 : \"+title=Perroud 1950 +proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +no_defs \",\n 4638 : \"+title=Saint Pierre et Miquelon 1950 +proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +no_defs \",\n 4640 : \"+title=RRAF 1991 +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4641 : \"+title=IGN53 Mare +proj=longlat +ellps=intl +no_defs \",\n 4645 : \"+title=RGNC 1991 +proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4687 : \"+proj=longlat +ellps=GRS80 +no_defs \",\n 4662 : \"+title=IGN72 Grande Terre +proj=longlat +ellps=intl +no_defs \",\n 4689 : \"+title=IGN63 Hiva Oa +proj=longlat +ellps=intl +no_defs \",\n 4690 : \"+title=Tahiti 79 +proj=longlat +ellps=intl +no_defs \",\n 4691 : \"+title=Moorea 87 +proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +no_defs \",\n 4692 : \"+title=Maupiti 83 +proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +no_defs \",\n 4698 : \"+title=IGN 1962 Kerguelen +proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs \",\n 4749 : \"+title=RGNC91-93 +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4750 : \"+title=ST87 Ouvea +proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +no_defs \",\n 4807 : \"+title=NTF (Paris) +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs \",\n 2056 : \"+title=CH1903+ / LV95 +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs \",\n 2154 : \"+title=RGF93 / Lambert-93 +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 2213 : \"+title=ETRS89 / TM 30 NE +proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs \",\n 2969 : \"+title=Fort Marigot / UTM zone 20N +proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m +no_defs \",\n 2970 : \"+title=Guadeloupe 1948 / UTM zone 20N +proj=utm +zone=20 +ellps=intl +units=m +no_defs \",\n 2971 : \"+title=CSG67 / UTM zone 22N +proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs \",\n 2972 : \"+title=RGFG95 / UTM zone 22N +proj=utm +zone=22 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs \",\n 2973 : \"+title=Martinique 1938 / UTM zone 20N +proj=utm +zone=20 +ellps=intl +units=m +no_defs \",\n 2975 : \"+title=RGR92 / UTM zone 40S +proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 2976 : \"+title=Tahiti 52 / UTM zone 6S +proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m +no_defs \",\n 2977 : \"+title=Tahaa 54 / UTM zone 5S +proj=utm +zone=5 +south +ellps=intl +units=m +no_defs \",\n 2978 : \"+title=IGN72 Nuku Hiva / UTM zone 7S +proj=utm +zone=7 +south +ellps=intl +units=m +no_defs \",\n 2980 : \"+title=Combani 1950 / UTM zone 38S +proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs \",\n 2981 : \"+title=IGN56 Lifou / UTM zone 58S +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs \",\n 2982 : \"+title=IGN72 Grand Terre / UTM zone 58S (deprecated) +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs \",\n 2984 : \"+title=RGNC 1991 / Lambert New Caledonia (deprecated) +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=intl +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 2986 : \"+title=Terre Adelie 1950 +proj=stere +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-90.000000000 +lon_0=140.000000000 +lat_ts=-67.000000000 +k=0.96027295 +x_0=300000.000 +y_0=-2299363.482 +units=m +no_defs\",\n 2987 : \"+title=Saint Pierre et Miquelon 1950 / UTM zone 21N +proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m +no_defs \",\n 2989 : \"+title=RRAF 1991 / UTM zone 20N +proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 2990 : \"+title=Reunion 1947 / TM Reunion (deprecated) +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +units=m +no_defs \",\n 2995 : \"+title=IGN53 Mare / UTM zone 58S +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs \",\n 3038 : \"+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3039 : \"+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3040 : \"+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3041 : \"+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 3042 : \"+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 3043 : \"+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 3044 : \"+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3045 : \"+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3046 : \"+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3047 : \"+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3048 : \"+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3049 : \"+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3050 : \"+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3051 : \"+proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3034 : \"+title=ETRS89 / ETRS-LCC +proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +units=m +no_defs \",\n 3035 : \"+title=ETRS89 / ETRS-LAEA +proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs \",\n 3042 : \"+title=ETRS89 / ETRS-TM30 +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs \",\n 3043 : \"+title=ETRS89 / ETRS-TM31 +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs \",\n 3044 : \"+title=ETRS89 / ETRS-TM32 +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs \",\n 25828 : \"+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25829 : \"+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 25830 : \"+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 25831 : \"+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 25832 : \"+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25833 : \"+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25834 : \"+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25835 : \"+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25836 : \"+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25837 : \"+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25838 : \"+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3060 : \"+title=IGN72 Grande Terre / UTM zone 58S +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs \",\n 3163 : \"+title=RGNC91-93 / Lambert New Caledonia +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3164 : \"+title=ST87 Ouvea / UTM zone 58S +proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m +no_defs \",\n 3165 : \"+title=NEA74 Noumea / Noumea Lambert +proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +units=m +no_defs \",\n 3166 : \"+title=NEA74 Noumea / Noumea Lambert 2 +proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +units=m +no_defs \",\n 3169 : \"+title=RGNC91-93 / UTM zone 57S +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3170 : \"+title=RGNC91-93 / UTM zone 58S +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3171 : \"+title=RGNC91-93 / UTM zone 59S +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3172 : \"+title=IGN53 Mare / UTM zone 59S +proj=utm +zone=59 +south +ellps=intl +units=m +no_defs \",\n 3296 : \"+title=RGPF / UTM zone 5S +proj=utm +zone=5 +south +ellps=GRS80 +units=m +no_defs \",\n 3297 : \"+title=RGPF / UTM zone 6S +proj=utm +zone=6 +south +ellps=GRS80 +units=m +no_defs \",\n 3298 : \"+title=RGPF / UTM zone 7S +proj=utm +zone=7 +south +ellps=GRS80 +units=m +no_defs \",\n 3299 : \"+title=RGPF / UTM zone 8S +proj=utm +zone=8 +south +ellps=GRS80 +units=m +no_defs \",\n 3302 : \"+title=IGN63 Hiva Oa / UTM zone 7S +proj=utm +zone=7 +south +ellps=intl +units=m +no_defs \",\n 3303 : \"+title=Fatu Iva 72 / UTM zone 7S +proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m +no_defs \",\n 3304 : \"+title=Tahiti 79 / UTM zone 6S +proj=utm +zone=6 +south +ellps=intl +units=m +no_defs \",\n 3305 : \"+title=Moorea 87 / UTM zone 6S +proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m +no_defs \",\n 3306 : \"+title=Maupiti 83 / UTM zone 5S +proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m +no_defs \",\n 3312 : \"+title=CSG67 / UTM zone 21N +proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs \",\n 3313 : \"+title=RGFG95 / UTM zone 21N +proj=utm +zone=21 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs \",\n 3336 : \"+title=IGN 1962 Kerguelen / UTM zone 42S +proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs \",\n 3395 : \"+title=WGS 84 / World Mercator +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 3727 : \"+title=Reunion 1947 / TM Reunion +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +units=m +no_defs \",\n 21781 : \"+title=CH1903 / LV03 +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs \",\n 25830 : \"+title=ETRS89 / UTM zone 30N +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs \",\n 25831 : \"+title=ETRS89 / UTM zone 31N +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs \",\n 25832 : \"+title=ETRS89 / UTM zone 32N +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs \",\n 27561 : \"+title=NTF (Paris) / Lambert Nord France +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27562 : \"+title=NTF (Paris) / Lambert Centre France +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27563 : \"+title=NTF (Paris) / Lambert Sud France +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.9998774990000001 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27564 : \"+title=NTF (Paris) / Lambert Corse +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.9999447100000001 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27571 : \"+title=NTF (Paris) / Lambert zone I +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27572 : \"+title=NTF (Paris) / Lambert zone II +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27573 : \"+title=NTF (Paris) / Lambert zone III +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.9998774990000001 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27574 : \"+title=NTF (Paris) / Lambert zone IV +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.9999447100000001 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27581 : \"+title=NTF (Paris) / France I (deprecated) +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27582 : \"+title=NTF (Paris) / France II (deprecated) +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27583 : \"+title=NTF (Paris) / France III (deprecated) +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.9998774990000001 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27584 : \"+title=NTF (Paris) / France IV (deprecated) +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.9999447100000001 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27591 : \"+title=NTF (Paris) / Nord France (deprecated) +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27592 : \"+title=NTF (Paris) / Centre France (deprecated) +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27593 : \"+title=NTF (Paris) / Sud France (deprecated) +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.9998774990000001 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27594 : \"+title=NTF (Paris) / Corse (deprecated) +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.9999447100000001 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 32601 : \"+proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32602 : \"+proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32603 : \"+proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32604 : \"+proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32605 : \"+proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32606 : \"+proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32607 : \"+proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32608 : \"+proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32609 : \"+proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32610 : \"+proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32611 : \"+proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32612 : \"+proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32613 : \"+proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32614 : \"+proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32615 : \"+proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32616 : \"+proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32617 : \"+proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32618 : \"+proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32619 : \"+proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32620 : \"+proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32621 : \"+proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32622 : \"+proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32623 : \"+proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32624 : \"+proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32625 : \"+proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32626 : \"+proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32627 : \"+proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32628 : \"+proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32629 : \"+proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32630 : \"+proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32631 : \"+proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32632 : \"+proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32633 : \"+proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32634 : \"+proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32635 : \"+proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32636 : \"+proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32637 : \"+proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32638 : \"+proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32639 : \"+proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32640 : \"+proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32641 : \"+proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32642 : \"+proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32643 : \"+proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32644 : \"+proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32645 : \"+proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32646 : \"+proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32647 : \"+proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32648 : \"+proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32649 : \"+proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32650 : \"+proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32651 : \"+proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32652 : \"+proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32653 : \"+proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32654 : \"+proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32655 : \"+proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32656 : \"+proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32657 : \"+proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32658 : \"+proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32659 : \"+proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32660 : \"+proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32661 : \"+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32662 : \"+title=WGS 84 / Plate Carree +proj=eqc +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32701 : \"+proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32702 : \"+proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32703 : \"+proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32704 : \"+proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32705 : \"+proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32706 : \"+proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32707 : \"+proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32708 : \"+proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32709 : \"+proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32710 : \"+proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32711 : \"+proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32712 : \"+proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32713 : \"+proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32714 : \"+proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32715 : \"+proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32716 : \"+proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32717 : \"+proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32718 : \"+proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32719 : \"+proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32720 : \"+proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32721 : \"+proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32722 : \"+proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32723 : \"+proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32724 : \"+proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32725 : \"+proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32726 : \"+proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32727 : \"+proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32728 : \"+proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32729 : \"+proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32730 : \"+proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32731 : \"+proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32732 : \"+proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32733 : \"+proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32734 : \"+proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32735 : \"+proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32736 : \"+proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32737 : \"+proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32738 : \"+proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32739 : \"+proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32740 : \"+proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32741 : \"+proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32742 : \"+proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32743 : \"+proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32744 : \"+proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32745 : \"+proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32746 : \"+proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32747 : \"+proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32748 : \"+proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32749 : \"+proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32750 : \"+proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32751 : \"+proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32752 : \"+proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32753 : \"+proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32754 : \"+proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32755 : \"+proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32756 : \"+proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32757 : \"+proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32758 : \"+proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32759 : \"+proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32760 : \"+proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32761 : \"+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 310024802 : \"+title=Geoportail - France metropolitaine +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=46.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310915814 : \"+title=Geoportail - Antilles francaises +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310486805 : \"+title=Geoportail - Guyane +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=4.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310700806 : \"+title=Geoportail - Reunion et dependances +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-21.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310702807 : \"+title=Geoportail - Mayotte +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-12.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310706808 : \"+title=Geoportail - Saint-Pierre et Miquelon +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=47.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310547809 : \"+title=Geoportail - Nouvelle-Caledonie +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-22.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642810 : \"+title=Geoportail - Wallis et Futuna +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-14.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310032811 : \"+title=Geoportail - Polynesie francaise +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642812 : \"+title=Geoportail - Kerguelen +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-49.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642801 : \"+title=Geoportail - Crozet +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-46.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642813 : \"+title=Geoportail - Amsterdam et Saint-Paul +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-38.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642901 : \"+title=Geoportail - Monde +proj=mill +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lon_0=0.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 5489 : \"+title=RGAF09 geographiques (dms) +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137 +rf=298.257222101 +units=m +no_defs\",\n 5490 : \"+title=RGAF09 UTM Nord Fuseau 20 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137 +rf=298.257222101 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\"\n },\n /**\n * definitions CRS\n * @enum\n */\n CRS : {\n 84 : \"+title=WGS 84 longitude-latitude +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs \"\n },\n /**\n * definitions IGNF\n * @enum\n */\n IGNF : {\n AMST63 : \"+title=Amsterdam 1963 +proj=geocent +towgs84=109.753,-528.133,-362.244,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n CROZ63 : \"+title=Crozet 1963 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n CSG67 : \"+title=Guyane CSG67 +proj=geocent +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n ED50 : \"+title=ED50 +proj=geocent +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n ETRS89 : \"+title=Systeme de reference terrestre Europeen (1989) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n GUAD48 : \"+title=Guadeloupe Ste Anne +proj=geocent +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n GUADFM49 : \"+title=Guadeloupe Fort Marigot +proj=geocent +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n IGN63 : \"+title=IGN 1963 (Hiva Oa, Tahuata, Mohotani) +proj=geocent +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n IGN72 : \"+title=IGN 1972 Grande-Terre / Ile des Pins +proj=geocent +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n KERG62CAR : \"+title=Kerguelen - K0 +proj=geocent +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MART38 : \"+title=Martinique Fort-Desaix +proj=geocent +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MAYO50 : \"+title=Mayotte Combani +proj=geocent +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MOOREA87 : \"+title=Moorea 1987 +proj=geocent +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n NTF : \"+title=Nouvelle Triangulation Francaise +proj=geocent +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +units=m +no_defs\",\n NUKU72 : \"+title=IGN 1972 Nuku Hiva +proj=geocent +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n REUN47 : \"+title=Reunion 1947 +proj=geocent +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n RGF93 : \"+title=Reseau geodesique francais 1993 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGFG95 : \"+title=Reseau geodesique francais de Guyane 1995 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGM04 : \"+title=RGM04 (Reseau Geodesique de Mayotte 2004) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGNC : \"+title=Reseau Geodesique de Nouvelle-Caledonie +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGPF : \"+title=RGPF (Reseau Geodesique de Polynesie Francaise) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGR92 : \"+title=Reseau geodesique Reunion 1992 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGSPM06 : \"+title=Reseau Geodesique Saint-Pierre-et-Miquelon (2006) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGTAAF07 : \"+title=Reseau Geodesique des TAAF (2007) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RRAF91 : \"+title=RRAF 1991 (Reseau de Reference des Antilles Francaises) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n STPL69 : \"+title=Saint-Paul 1969 +proj=geocent +towgs84=225.571,-346.608,-46.567,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n STPM50 : \"+title=St Pierre et Miquelon 1950 +proj=geocent +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +units=m +no_defs\",\n TAHAA : \"+title=Raiatea - Tahaa 51-54 (Tahaa, Base Terme Est) +proj=geocent +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n TAHI79 : \"+title=IGN79 (Tahiti) Iles de la Societe +proj=geocent +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n TERA50 : \"+title=Pointe Geologie - Perroud 1950 +proj=geocent +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n WALL78 : \"+title=Wallis-Uvea 1978 (MOP78) +proj=geocent +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n WGS72 : \"+title=World Geodetic System 1972 +proj=geocent +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +units=m +no_defs\",\n WGS84 : \"+title=World Geodetic System 1984 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n AMST63GEO : \"+title=Amsterdam 1963 +proj=longlat +towgs84=109.753,-528.133,-362.244,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n CROZ63GEO : \"+title=Crozet 1963 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n CSG67GEO : \"+title=Guyane CSG67 +proj=longlat +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n ED50G : \"+title=ED50 +proj=longlat +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n GUAD48GEO : \"+title=Guadeloupe Ste Anne +proj=longlat +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n GUADFM49GEO : \"+title=Guadeloupe Fort Marigot +proj=longlat +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n IGN63GEO : \"+title=IGN 1963 (Hiva Oa, Tahuata, Mohotani) +proj=longlat +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n IGN72GEO : \"+title=IGN 1972 Grande-Terre / Ile des Pins +proj=longlat +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n KERG62GEO : \"+title=Kerguelen - K0 +proj=longlat +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MART38GEO : \"+title=Martinique Fort-Desaix +proj=longlat +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MAYO50GEO : \"+title=Mayotte Combani +proj=longlat +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MOOREA87GEO : \"+title=Moorea 1987 +proj=longlat +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n NTFG : \"+title=Nouvelle Triangulation Francaise Greenwich degres sexagesimaux +proj=longlat +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +units=m +no_defs\",\n NTFP : \"+title=Nouvelle Triangulation Francaise Paris grades +proj=longlat +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +units=m +no_defs\",\n NUKU72GEO : \"+title=IGN 1972 Nuku Hiva +proj=longlat +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n REUN47GEO : \"+title=Reunion 1947 +proj=longlat +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n RGF93G : \"+title=Reseau geodesique francais 1993 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGFG95GEO : \"+title=Reseau geodesique francais de Guyane 1995 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGM04GEO : \"+title=RGM04 (Reseau Geodesique de Mayotte 2004) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGNCGEO : \"+title=Reseau Geodesique de Nouvelle-Caledonie +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGPFGEO : \"+title=RGPF (Reseau Geodesique de Polynesie Francaise) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGR92GEO : \"+title=Reseau geodesique de la Reunion 1992 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGSPM06GEO : \"+title=Saint-Pierre-et-Miquelon (2006) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGTAAF07G : \"+title=Reseau Geodesique des TAAF (2007) (dms) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n STPL69GEO : \"+title=Saint-Paul 1969 +proj=longlat +towgs84=225.571,-346.608,-46.567,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n STPM50GEO : \"+title=St Pierre et Miquelon 1950 +proj=longlat +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +units=m +no_defs\",\n TAHAAGEO : \"+title=Raiatea - Tahaa 51-54 (Tahaa, Base Terme Est) +proj=longlat +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n TAHI79GEO : \"+title=IGN79 (Tahiti) Iles de la Societe +proj=longlat +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n TERA50G : \"+title=Pointe Geologie - Perroud 1950 +proj=longlat +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n WALL78GEO : \"+title=Wallis - Uvea 1978 (MOP78) +proj=longlat +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n WGS72G : \"+title=WGS72 +proj=longlat +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +units=m +no_defs\",\n WGS84G : \"+title=World Geodetic System 1984 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n WGS84RRAFGEO : \"+title=Reseau de reference des Antilles francaises (1988-1991) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n XGEO : \"+title=Systeme CIO-BIH +proj=longlat +towgs84=0.0000,0.0000,0.5000,0.0000,0.0000,0.0140,-0.100000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n AMST63UTM43S : \"+title=Amsterdam 1963 UTM fuseau 43 Sud +proj=tmerc +towgs84=109.753,-528.133,-362.244,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n CROZ63UTM39S : \"+title=Crozet 1963 +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n CSG67UTM21 : \"+title=Guyane CSG67 UTM fuseau 21 +proj=tmerc +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n CSG67UTM22 : \"+title=Guyane CSG67 UTM fuseau 22 +proj=tmerc +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALANF : \"+title=Geoportail - Antilles francaises +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALASP : \"+title=Geoportail - Amsterdam et Saint-Paul +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-38.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALCRZ : \"+title=Geoportail - Crozet +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-46.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALFXX : \"+title=Geoportail - France metropolitaine +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=46.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALGUF : \"+title=Geoportail - Guyane +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=4.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALKER : \"+title=Geoportail - Kerguelen +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-49.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALMYT : \"+title=Geoportail - Mayotte +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-12.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALNCL : \"+title=Geoportail - Nouvelle-Caledonie +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-22.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALPYF : \"+title=Geoportail - Polynesie francaise +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALREU : \"+title=Geoportail - Reunion et dependances +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-21.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALSPM : \"+title=Geoportail - Saint-Pierre et Miquelon +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=47.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALWLF : \"+title=Geoportail - Wallis et Futuna +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-14.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GUAD48UTM20 : \"+title=Guadeloupe Ste Anne +proj=tmerc +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n GUADFM49U20 : \"+title=Guadeloupe Fort Marigot +proj=tmerc +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n IGN63UTM7S : \"+title=IGN 1963 - Hiva Oa, Tahuata, Mohotani - UTM fuseau 7 Sud +proj=tmerc +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n IGN72UTM58S : \"+title=IGN 1972 - UTM fuseau 58 Sud +proj=tmerc +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n KERG62UTM42S : \"+title=Kerguelen 1962 +proj=tmerc +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n LAMB1 : \"+title=Lambert I +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=49.500000000 +lon_0=0.000000000 +k_0=0.99987734 +lat_1=49.500000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs\",\n LAMB1C : \"+title=Lambert I Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=49.500000000 +lon_0=0.000000000 +k_0=0.99987734 +lat_1=49.500000000 +x_0=600000.000 +y_0=1200000.000 +units=m +no_defs\",\n LAMB2 : \"+title=Lambert II +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs\",\n LAMB2C : \"+title=Lambert II Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=2200000.000 +units=m +no_defs\",\n LAMB3 : \"+title=Lambert III +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=44.100000000 +lon_0=0.000000000 +k_0=0.99987750 +lat_1=44.100000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs\",\n LAMB3C : \"+title=Lambert III Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=44.100000000 +lon_0=0.000000000 +k_0=0.99987750 +lat_1=44.100000000 +x_0=600000.000 +y_0=3200000.000 +units=m +no_defs\",\n LAMB4 : \"+title=Lambert IV +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=42.165000000 +lon_0=0.000000000 +k_0=0.99994471 +lat_1=42.165000000 +x_0=234.358 +y_0=185861.369 +units=m +no_defs\",\n LAMB4C : \"+title=Lambert IV Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=42.165000000 +lon_0=0.000000000 +k_0=0.99994471 +lat_1=42.165000000 +x_0=234.358 +y_0=4185861.369 +units=m +no_defs\",\n LAMB93 : \"+title=Lambert 93 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=46.500000000 +lon_0=3.000000000 +lat_1=44.000000000 +lat_2=49.000000000 +x_0=700000.000 +y_0=6600000.000 +units=m +no_defs\",\n RGF93CC42 : \"+title=Lambert conique conforme Zone 1 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=42.000000000 +lon_0=3.000000000 +lat_1=41.200000000 +lat_2=42.800000000 +x_0=1700000.000 +y_0=1200000.000 +units=m +no_defs\",\n RGF93CC43 : \"+title=Lambert conique conforme Zone 2 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=43.000000000 +lon_0=3.000000000 +lat_1=42.200000000 +lat_2=43.800000000 +x_0=1700000.000 +y_0=2200000.000 +units=m +no_defs\",\n RGF93CC44 : \"+title=Lambert conique conforme Zone 3 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=44.000000000 +lon_0=3.000000000 +lat_1=43.200000000 +lat_2=44.800000000 +x_0=1700000.000 +y_0=3200000.000 +units=m +no_defs\",\n RGF93CC45 : \"+title=Lambert conique conforme Zone 4 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=45.000000000 +lon_0=3.000000000 +lat_1=44.200000000 +lat_2=45.800000000 +x_0=1700000.000 +y_0=4200000.000 +units=m +no_defs\",\n RGF93CC46 : \"+title=Lambert conique conforme Zone 5 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=46.000000000 +lon_0=3.000000000 +lat_1=45.200000000 +lat_2=46.800000000 +x_0=1700000.000 +y_0=5200000.000 +units=m +no_defs\",\n RGF93CC47 : \"+title=Lambert conique conforme Zone 6 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=47.000000000 +lon_0=3.000000000 +lat_1=46.200000000 +lat_2=47.800000000 +x_0=1700000.000 +y_0=6200000.000 +units=m +no_defs\",\n RGF93CC48 : \"+title=Lambert conique conforme Zone 7 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=48.000000000 +lon_0=3.000000000 +lat_1=47.200000000 +lat_2=48.800000000 +x_0=1700000.000 +y_0=7200000.000 +units=m +no_defs\",\n RGF93CC49 : \"+title=Lambert conique conforme Zone 8 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=49.000000000 +lon_0=3.000000000 +lat_1=48.200000000 +lat_2=49.800000000 +x_0=1700000.000 +y_0=8200000.000 +units=m +no_defs\",\n RGF93CC50 : \"+title=Lambert conique conforme Zone 9 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=50.000000000 +lon_0=3.000000000 +lat_1=49.200000000 +lat_2=50.800000000 +x_0=1700000.000 +y_0=9200000.000 +units=m +no_defs\",\n LAMBE : \"+title=Lambert II etendu +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=2200000.000 +units=m +no_defs\",\n MART38UTM20 : \"+title=Martinique Fort-Desaix +proj=tmerc +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n MAYO50UTM38S : \"+title=Mayotte Combani +proj=tmerc +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n MILLER : \"+title=Geoportail - Monde +proj=mill +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lon_0=0.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n MOOREA87U6S : \"+title=Moorea 1987 - UTM fuseau 6 Sud +proj=tmerc +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n NUKU72U7S : \"+title=IGN 1972 Nuku Hiva - UTM fuseau 7 Sud +proj=tmerc +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n // REUN47GAUSSL : \"+title=Reunion Gauss Laborde +proj=gstmerc +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-21.116666667 +lon_0=55.533333333 +k_0=1.00000000 +x_0=160000.000 +y_0=50000.000 +units=m +no_defs\",\n RGM04UTM38S : \"+title=UTM fuseau 38 Sud (Reseau Geodesique de Mayotte 2004) +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGNCUTM57S : \"+title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 57 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGNCUTM58S : \"+title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 58 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGNCUTM59S : \"+title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 59 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGPFUTM5S : \"+title=RGPF - UTM fuseau 5 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGPFUTM6S : \"+title=RGPF - UTM fuseau 6 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGPFUTM7S : \"+title=RGPF - UTM fuseau 7 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGR92UTM40S : \"+title=RGR92 UTM fuseau 40 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGSPM06U21 : \"+title=Saint-Pierre-et-Miquelon (2006) UTM Fuseau 21 Nord +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n STPL69UTM43S : \"+title=Saint-Paul 1969 UTM fuseau 43 Sud +proj=tmerc +towgs84=225.571,-346.608,-46.567,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n STPM50UTM21 : \"+title=St Pierre et Miquelon 1950 +proj=tmerc +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n TAHAAUTM05S : \"+title=Tahaa 1951 +proj=tmerc +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n TAHI51UTM06S : \"+title=Tahiti-Terme Nord UTM fuseau 6 Sud +proj=tmerc +towgs84=162.0000,117.0000,154.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n TAHI79UTM6S : \"+title=Tahiti 1979 +proj=tmerc +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n TERA50STEREO : \"+title=Terre Adelie 1950 +proj=stere +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-90.000000000 +lon_0=140.000000000 +lat_ts=-67 +k=0.96027295 +x_0=300000.000 +y_0=-2299363.482 +units=m +no_defs\",\n UTM01SW84 : \"+title=World Geodetic System 1984 UTM fuseau 01 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n UTM20W84GUAD : \"+title=World Geodetic System 1984 UTM fuseau 20 Nord-Guadeloupe +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM20W84MART : \"+title=World Geodetic System 1984 UTM fuseau 20 Nord-Martinique +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM22RGFG95 : \"+title=RGFG95 UTM fuseau 22 Nord-Guyane +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM39SW84 : \"+title=World Geodetic System 1984 UTM fuseau 39 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n UTM42SW84 : \"+title=World Geodetic System 1984 UTM fuseau 42 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n UTM43SW84 : \"+title=World Geodetic System 1984 UTM fuseau 43 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n WALL78UTM1S : \"+title=Wallis-Uvea 1978 (MOP78) UTM 1 SUD +proj=tmerc +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n ETRS89GEO : \"+title=ETRS89 geographiques (dms) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n ETRS89LAEA : \"+title=ETRS89 Lambert Azimutal Equal Area +proj=laea +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=52.000000000 +lon_0=10.000000000 +x_0=4321000.000 +y_0=3210000.000 +units=m +no_defs\",\n ETRS89LCC : \"+title=ETRS89 Lambert Conformal Conic +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=52.000000000 +lon_0=9.999999995 +lat_1=35.000000000 +lat_2=65.000000000 +x_0=4000000.000 +y_0=2800000.000 +units=m +no_defs\",\n UTM26ETRS89 : \"+title=Europe - de 30d a 24d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM27ETRS89 : \"+title=Europe - de 24d a 18d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM28ETRS89 : \"+title=Europe - de 18d a 12d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM29ETRS89 : \"+title=Europe - de 12d a 6d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM30ETRS89 : \"+title=Europe - de -6d a 0d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM31ETRS89 : \"+title=Europe - de 0d a 6d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM32ETRS89 : \"+title=Europe - de 6d a 12d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM33ETRS89 : \"+title=Europe - de 12d a 18d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM34ETRS89 : \"+title=Europe - de 18d a 24d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM35ETRS89 : \"+title=Europe - de 24d a 30d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM36ETRS89 : \"+title=Europe - de 30d a 36d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM37ETRS89 : \"+title=Europe - de 36d a 42d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM38ETRS89 : \"+title=Europe - de 42d a 48d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\"\n }\n};\n\nexport default Register;\n","/*\n * FIXME\n * en mode bundle, l'action register des methodes de chargement est executée 2 fois.\n * mais aucun impact sur performance, car le register teste si la projection a été déjà\n * chargé...\n */\n\n// import external\nimport Proj4 from \"proj4\";\n// import OpenLayers\n// import { register } from \"ol/proj/proj4\";\nimport { register } from \"./Proj4\";\nimport {\n getTransform,\n addProjection,\n get as getProjection\n} from \"ol/proj\";\n// import { clear as clearProj } from \"ol/proj/transforms\";\nimport { applyTransform } from \"ol/extent\";\n// import local\nimport Register from \"../Utils/Register\";\nimport Logger from \"../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"CRS\");\n\nvar CRS = {\n\n /**\n * List of extent projections\n */\n projectionsExtent : {\n \"EPSG:2154\" : {\n left : -9.62,\n bottom : 41.18,\n right : 10.3,\n top : 51.54\n },\n \"EPSG:27572\" : {\n left : -4.87,\n bottom : 42.33,\n right : 8.23,\n top : 51.14\n }\n },\n\n /**\n * Load all custom definition projection\n */\n load : function () {\n logger.trace(\"Loading custom definitions projections\");\n // loading except if it's already loaded...\n if (!Register.isLoaded) {\n // load all defs into proj4\n Register.load(Proj4);\n try {\n // register all defs\n register(Proj4);\n // Expose proj4 with custom defs into OpenLayers global variable\n if (window.ol && window.ol.proj && window.ol.proj.proj4) {\n window.ol.proj.proj4.register = register;\n window.ol.proj.proj4.register(Proj4);\n }\n } catch (e) {\n // FIXME ?\n logger.error(e);\n // clearProj();\n }\n }\n },\n\n /**\n * Load definition projection by default\n *\n * include into proj4 :\n * - WGS84\n * - ['EPSG:4326']\n * - ['EPSG:3785'], ['EPSG:3857'], GOOGLE, ['EPSG:900913'], ['EPSG:102113']\n * +\n * - [\"EPSG:2154\"], [\"EPSG:27571\"], [\"EPSG:27572\"], [\"EPSG:27573\"], [\"EPSG:2757\"],\n * - [\"CRS:84\"],\n * - [\"IGNF:LAMB93\"],\n * - [\"IGNF:LAMBE\"], [\"IGNF:LAMB1\"], [\"IGNF:LAMB2\"], [\"IGNF:LAMB3\"], [\"IGNF:LAMB4\"],\n * - [\"IGNF:RGF93G\"],\n * - [\"IGNF:WGS84G\"]\n */\n loadByDefault : function () {\n logger.trace(\"Loading custom definitions projections by default\");\n // loading except if it's already loaded...\n if (!Register.isLoaded) {\n // load defs by default into proj4\n Register.loadByDefault(Proj4);\n try {\n // register all defs\n register(Proj4);\n // Expose proj4 with custom defs into OpenLayers global variable\n if (window.ol && window.ol.proj && window.ol.proj.proj4) {\n window.ol.proj.proj4.register = register;\n window.ol.proj.proj4.register(Proj4);\n }\n } catch (e) {\n // FIXME une projection ne passe pas avec ol.proj/proj4.register()...\n // on fait quoi ?\n logger.error(e);\n // clearProj();\n }\n }\n },\n\n /**\n * Load a custom definition projection\n * @param {String} name - ie. EPSG:2154 (Lambert)\n */\n loadByName : function (name) {\n logger.trace(\"Loading a custom definition projection : \", name);\n // loading except if it's already loaded...\n if (!Register.isLoaded) {\n // load defs by default into proj4\n Register.loadByName(Proj4, name);\n try {\n // register all defs\n register(Proj4);\n // Expose proj4 with custom defs into OpenLayers global variable\n if (window.ol && window.ol.proj && window.ol.proj.proj4) {\n window.ol.proj.proj4.register = register;\n window.ol.proj.proj4.register(Proj4);\n }\n } catch (e) {\n // FIXME ?\n logger.error(e);\n // clearProj();\n }\n }\n },\n\n /**\n * Overload OpenLayers ol.proj parameters,\n * to manage EPSG:2154 extent restriction\n */\n overload : function () {\n logger.trace(\"Loading projections aera (extent)\");\n for (var code in this.projectionsExtent) {\n if (this.projectionsExtent.hasOwnProperty(code)) {\n var extent = this.projectionsExtent[code];\n var proj = getProjection(code);\n var fromLonLat = getTransform(\"EPSG:4326\", proj);\n\n // very approximate calculation of projection extent\n var _extent = applyTransform([extent.bottom, extent.right, extent.top, extent.left], fromLonLat);\n proj.setExtent(_extent);\n addProjection(proj);\n\n // Expose projection extent with custom defs into OpenLayers global variable\n if (window.ol && window.ol.proj && window.ol.proj.addProjection) {\n window.ol.proj.addProjection(proj);\n }\n }\n }\n }\n};\n\nexport default CRS;\n\n// Expose proj4 with custom defs into OpenLayers global variable\nif (window.ol && window.ol.proj && window.ol.proj.proj4) {\n window.ol.proj.proj4.register = register;\n}\n","import ID from \"../../Utils/SelectorID\";\nimport GeocodeUtils from \"../../Utils/GeocodeUtils\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar SearchEngineDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPsearchEngine\");\n container.className = \"GPwidget gpf-widget\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * SElement with picto and search input\n * @returns {DOMElement} DOM element\n */\n _createSearchDivElement : function () {\n var searchDiv = document.createElement(\"div\");\n searchDiv.id = this._addUID(\"GPshowSearchDiv\");\n return searchDiv;\n },\n\n /**\n * Show search engine\n * @param {Boolean} collapsible - ...\n * @returns {DOMElement} DOM element\n */\n _createShowSearchEnginePictoElement : function (collapsible) {\n // contexte d'execution\n var self = this;\n if (checkDsfr()) {\n // Jamais collapsible en DSFR\n collapsible = true;\n }\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowSearchEnginePicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowSearchEnginePicto gpf-btn gpf-btn-icon-search fr-btn\";\n button.title = \"Afficher/masquer la recherche par lieux\";\n if (checkDsfr()) {\n // Pas la même du bouton fonction en DSFR\n button.title = \"Rechercher\";\n }\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", !collapsible);\n button.disabled = !collapsible;\n button.setAttribute(\"type\", \"button\");\n\n // Close all results and panels when minimizing the widget\n button.addEventListener(\"click\", function (e) {\n if (checkDsfr()) {\n // En DSFR, le bouton fait la même chose que la touche Entrée\n var container = document.getElementById(self._addUID(\"GPautocompleteResults\"));\n var curr = container.getElementsByClassName(\"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\");\n var list = container.getElementsByClassName(\"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\");\n\n // si aucune suggestion, on ne va pas plus loin !\n var length = list.length;\n if (!length) {\n return;\n }\n\n var current = null;\n\n // si aucun item courant, on prend le 1er !\n if (!curr.length) {\n current = list[0];\n current.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\";\n current.style.color = \"#000000\";\n current.style[\"background-color\"] = \"#CEDBEF\";\n } else {\n current = curr[0];\n }\n current.click();\n return;\n }\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n if (status) {}\n\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n var showAdvancedSearch = document.getElementById(self._addUID(\"GPshowAdvancedSearch\"));\n if (showAdvancedSearch) {\n showAdvancedSearch.style.display = null;\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n var showGeolocate = document.getElementById(self._addUID(\"GPshowGeolocate\"));\n if (showGeolocate) {\n showGeolocate.style.display = null;\n }\n var showCoordinate = document.getElementById(self._addUID(\"GPshowSearchByCoordinate\"));\n if (showCoordinate) {\n showCoordinate.style.display = null;\n }\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false; // FIXME form[id^=GPsearchInput] = #GPsearchInput ?\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n self.onShowSearchEngineClick(e);\n });\n\n return button;\n },\n\n /**\n * Simple search input\n * @param {String} placeholder - placeholder\n *\n * @returns {DOMElement} DOM element\n */\n _createSearchInputElement : function (placeholder) {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GPsearchInput\");\n form.className = \"gpf-panel__content fr-modal__content\";\n // Open geocode results panel when submitting the input\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n if (document.getElementById(self._addUID(\"GPsearchInputText\")).value === \"\") {\n return false;\n }\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n // cf. FIXME\n // document.querySelector(\"#GPsearchInput input\").blur ();\n\n // gestionnaire d'evenement :\n // on récupère la valeur de saisie pour requête sur le service de geocodage\n self.onGeocodingSearchSubmit(e);\n return false;\n });\n\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPsearchInputText\");\n input.className = \"GPsearchInputText gpf-input fr-input\";\n input.type = \"text\";\n input.placeholder = placeholder;\n input.autocomplete = \"off\";\n // Manage autocomplete list appearance when filling the address input\n input.addEventListener(\"keyup\", function (e) {\n var charCode = e.which || e.keyCode;\n if (charCode === 13 || charCode === 10 || charCode === 38 || charCode === 40) {\n return;\n }\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n if (input.value.length > 2) {\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n } else {\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n // gestionnaire d'evenement :\n // on récupère la valeur de saisie pour requête sur le service d'autocompletion\n self.onAutoCompleteSearchText(e);\n });\n\n // FIXME ce code interfere avec le click sur la liste des suggested locations !\n // input.addEventListener(\"blur\", function (e) {\n // document.getElementById(self._addUID(\"GPautoCompleteList\")).style.display = \"none\";\n // });\n\n input.addEventListener(\"keydown\", function (e) {\n // FIXME\n // l'action clavier 'enter (13)' lance le submit de la form !\n // Ce comportement n'est pas souhaité car le submit execute un geocodage !\n // Il faut donc trouver le moyen d'eviter le submit sur un return venant\n // seulement d'une selection de suggestion...\n\n var charCode = e.which || e.keyCode;\n if (charCode === 13) {\n e.preventDefault();\n }\n var container = document.getElementById(self._addUID(\"GPautocompleteResults\"));\n\n // si aucun container !?\n if (!container) {\n return;\n }\n\n var curr = container.getElementsByClassName(\"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\");\n var list = container.getElementsByClassName(\"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\");\n\n // si aucune suggestion, on ne va pas plus loin !\n var length = list.length;\n if (!length) {\n return;\n }\n\n var current = null;\n\n // si aucun item courant, on prend le 1er !\n if (!curr.length) {\n current = list[0];\n current.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\";\n current.style.color = \"#000000\";\n current.style[\"background-color\"] = \"#CEDBEF\";\n if (charCode !== 13) {\n return;\n }\n } else {\n current = curr[0];\n }\n\n var index = parseInt(ID.index(current.id), 10);\n var next = (index === length - 1) ? list[0] : list[index + 1];\n var prev = (index === 0) ? list[length - 1] : list[index - 1];\n\n current.style[\"background-color\"] = \"\";\n current.style.color = \"\";\n prev.style[\"background-color\"] = \"\";\n prev.style.color = \"\";\n next.style[\"background-color\"] = \"\";\n next.style.color = \"\";\n\n switch (charCode) {\n case 38: // arrow up\n current.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n prev.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\";\n prev.style.color = \"#000000\";\n prev.style[\"background-color\"] = \"#CEDBEF\";\n current.scrollIntoView();\n break;\n case 40: // arrow down\n current.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n next.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\";\n next.style.color = \"#000000\";\n next.style[\"background-color\"] = \"#CEDBEF\";\n current.scrollIntoView();\n break;\n case 13: // enter\n // cf. FIXME\n e.preventDefault();\n current.click(e);\n break;\n }\n\n current.focus();\n });\n\n form.appendChild(input);\n\n return form;\n },\n\n _createSearchResetElement : function () {\n // contexte d'execution\n var self = this;\n\n var buttonReset = document.createElement(\"button\");\n buttonReset.id = this._addUID(\"GPsearchInputReset\");\n buttonReset.className = \"GPshowOpen GPsearchInputReset gpf-btn gpf-btn-icon-reset gpf-btn-icon-search-reset fr-btn fr-btn--secondary gpf-btn--secondary\"; /* not use : fr-btn--close */\n buttonReset.setAttribute(\"aria-label\", \"Supprimer la recherche\");\n // Reset input\n buttonReset.addEventListener(\"click\", function (e) {\n // FIXME event déclenché sur la frappe \"return\" dans la zone de saisie !?\n document.getElementById(self._addUID(\"GPsearchInputText\")).value = \"\";\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n self.onSearchResetClick();\n });\n\n return buttonReset;\n },\n\n\n _createButtonsElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPbuttonsContainer\";\n return div;\n },\n\n _createFirstLineWrapper : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPsearchFirstLineWrapper\";\n return div;\n },\n\n _createRadioContainer : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPsearchRadioContainer\";\n return div;\n },\n\n _createRadioElements : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPsearchRadioElements\";\n var choiceLocations = document.createElement(\"div\");\n choiceLocations.className = \"GPsearchSplitChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w\";\n var inputLocations = document.createElement(\"input\");\n inputLocations.id = this._addUID(\"GPsearchSplitLocations\");\n inputLocations.type = \"radio\";\n inputLocations.name = \"GPsearchSplit\";\n inputLocations.value = \"address\";\n inputLocations.checked = true;\n\n choiceLocations.appendChild(inputLocations);\n\n var labelLocations = document.createElement(\"label\");\n labelLocations.className = \"gpf-label fr-label\";\n labelLocations.htmlFor = this._addUID(\"GPsearchSplitLocations\");\n labelLocations.title = \"Adresses\";\n labelLocations.innerHTML = \"Adresses\";\n choiceLocations.appendChild(labelLocations);\n if (inputLocations.addEventListener) {\n inputLocations.addEventListener(\"change\", function () {\n if (inputLocations.checked) {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n } else {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n }\n });\n } else if (inputLocations.attachEvent) {\n inputLocations.attachEvent(\"onchange\", function () {\n if (inputLocations.checked) {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n } else {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n }\n });\n }\n\n var choiceData = document.createElement(\"div\");\n choiceData.className = \"GPsearchSplitChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w\";\n var inputData = document.createElement(\"input\");\n inputData.id = this._addUID(\"GPsearchSplitData\");\n inputData.type = \"radio\";\n inputData.name = \"GPsearchSplit\";\n inputData.value = \"data\";\n\n choiceData.appendChild(inputData);\n\n var labelData = document.createElement(\"label\");\n labelData.className = \"gpf-label fr-label\";\n labelData.htmlFor = this._addUID(\"GPsearchSplitData\");\n labelData.title = \"Cartes et données\";\n labelData.innerHTML = \"Cartes et données\";\n choiceData.appendChild(labelData);\n if (inputData.addEventListener) {\n inputData.addEventListener(\"change\", function () {\n if (inputData.checked) {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n } else {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n }\n });\n } else if (inputData.attachEvent) {\n inputData.attachEvent(\"onchange\", function () {\n if (inputData.checked) {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n } else {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n }\n });\n }\n\n div.appendChild(choiceLocations);\n div.appendChild(choiceData);\n\n return [div, inputLocations, inputData];\n },\n\n /**\n * Show advanced search panel\n *\n * @returns {DOMElement} DOM element\n */\n _createShowAdvancedSearchElement : function () {\n // contexte d'execution\n var self = this;\n\n var span = document.createElement(\"span\");\n span.id = this._addUID(\"GPshowAdvancedSearch\");\n span.className = \"GPshowOpen GPshowAdvancedSearch\";\n span.innerText = \"Recherche avancée\";\n span.setAttribute(\"tabindex\", \"0\");\n span.setAttribute(\"aria-pressed\", false);\n\n // Open advanced search\n span.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n\n var id = \"#GPsearchInput-\" + self._uid;\n if (status) {\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n } else {\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n document.querySelector(id + \" input\").disabled = true;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = true;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = true;\n }\n }\n\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.getElementById(self._addUID(\"GPshowSearchByCoordinate\")).setAttribute(\"aria-pressed\", false);\n });\n\n return span;\n },\n\n /**\n * Show geolocate button\n *\n * @returns {DOMElement} DOM element\n */\n _createShowGeolocateElement : function () {\n // contexte d'execution\n var self = this;\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowGeolocate\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowGeolocate gpf-btn gpf-btn-icon-search-geolocate fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w\";\n button.title = \"Activer la géolocalisation\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n\n // Open advanced search\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n if (status) {\n // somme stuff...\n }\n self.onShowSearchGeolocateClick(e);\n });\n\n return button;\n },\n\n /**\n * Show search by coordinate button\n *\n * @returns {DOMElement} DOM element\n */\n _createShowSearchByCoordinateElement : function () {\n // contexte d'execution\n var self = this;\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowSearchByCoordinate\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowSearchByCoordinate gpf-btn gpf-btn-icon-search-coordinate fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w\";\n button.title = \"Ouvrir la recherche par coordonnées\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n\n // Open advanced search\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n var id = \"#GPsearchInput-\" + self._uid;\n if (status) {\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.querySelector(id + \" input\").disabled = false;\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n } else {\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n document.querySelector(id + \" input\").disabled = true;\n document.querySelector(id + \" .GPsearchInputReset\").disabled = true;\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = true;\n }\n }\n\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).setAttribute(\"aria-pressed\", false);\n });\n\n return button;\n },\n\n\n\n // ################################################################### //\n // ################### Methods of advanced search #################### //\n // ################################################################### //\n\n /**\n * Advanced search panel\n *\n * FIXME\n * don't call this._createAdvancedSearchPanelHeaderElement\n * don't call this._createAdvancedSearchPanelFormElement\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchPanelElement : function () {\n var div = document.createElement(\"dialog\");\n div.id = this._addUID(\"GPadvancedSearchPanel\");\n div.className = \"GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal\";\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n // div.appendChild(this._createAdvancedSearchPanelHeaderElement ());\n // div.appendChild(this._createAdvancedSearchPanelFormElement ());\n\n return div;\n },\n\n _createAdvancedSearchPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Geocoding results\n *\n * FIXME\n * don't call this._createGeocodeResultsListElement\n *\n * @returns {DOMElement} DOM element\n */\n _createGeocodeResultsElement : function () {\n var div = document.createElement(\"dialog\");\n div.id = this._addUID(\"GPgeocodeResultsList\");\n div.className = \"GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal\";\n\n div.appendChild(this._createGeocodeResultsHeaderElement());\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n // div.appendChild(this._createGeocodeResultsListElement ());\n\n return div;\n },\n\n _createGeocodeResultsDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Autocompletion results\n *\n * FIXME\n * don't call this._createAutoCompleteListElement\n *\n * @returns {DOMElement} DOM element\n */\n _createAutoCompleteElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPautoCompleteList\");\n div.className = \"GPautoCompleteList GPelementHidden gpf-panel fr-modal gpf-hidden \"; // GPpanel ?\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n // div.appendChild(this._createAutoCompleteListElement ());\n\n return div;\n },\n\n /**\n * Coordinate search panel\n *\n * FIXME\n * don't call this._createCoordinateSearchPanelHeaderElement\n * don't call this._createCoordinateSearchPanelFormElement\n *\n * @returns {DOMElement} DOM element\n */\n _createCoordinateSearchPanelElement : function () {\n var div = document.createElement(\"dialog\");\n div.id = this._addUID(\"GPcoordinateSearchPanel\");\n div.className = \"GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal\";\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n // div.appendChild(this._createCoordinateSearchPanelHeaderElement ());\n // div.appendChild(this._createCoordinateSearchPanelFormElement ());\n\n return div;\n },\n\n _createCoordinateSearchPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n // ################################################################### //\n // ################### Autocompletion container ###################### //\n // ################################################################### //\n\n /**\n * Autocompletion results list.\n *\n * @returns {DOMElement} DOM element\n */\n _createAutoCompleteListElement : function () {\n // contexte d'execution\n var self = this;\n\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPautocompleteResults\");\n container.className = \"\";\n\n if (container.addEventListener) {\n container.addEventListener(\"click\", function (e) {\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }, false);\n } else if (container.attachEvent) {\n container.attachEvent(\"onclick\", function (e) {\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n });\n }\n\n // Proposals are dynamically filled in Javascript by autocomplete or search service\n //
    ...
    \n\n return container;\n },\n\n _createAutoCompletedLocationContainer () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPautocompleteResultsLocation\");\n container.className = \"GPelementHidden gpf-hidden gpf-select\";\n container.size = 20;\n container.autofocus = true;\n return container;\n },\n _createAutoCompletedLocationTitleElement () {\n var container = document.getElementById(this._addUID(\"GPautocompleteResultsLocation\"));\n var label = document.createElement(\"p\");\n label.className = \"GPlabel GPlabelTitle gpf-label fr-label\";\n label.innerHTML = \"Lieux et adresses\";\n container.appendChild(label);\n },\n\n /**\n * Autocompletion result.\n * Proposals are dynamically filled in Javascript by autocomplete service\n *\n * TODO formaliser le contenu des reponse\n *\n * @param {Object} location - suggested or geocoded location results\n * @param {Number} id - ID\n */\n _createAutoCompletedLocationElement : function (location, id) {\n // contexte d'execution\n var self = this;\n\n var container = document.getElementById(this._addUID(\"GPautocompleteResultsLocation\"));\n\n var div = document.createElement(\"p\");\n div.id = this._addUID(\"AutoCompletedLocation_\" + id);\n div.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n var value = GeocodeUtils.getSuggestedLocationFreeform(location);\n div.innerHTML = value;\n div.title = value;\n if (div.addEventListener) {\n div.addEventListener(\"click\", function (e) {\n self.onAutoCompletedResultsItemClick(e);\n }, false);\n } else if (div.attachEvent) {\n div.attachEvent(\"onclick\", function (e) {\n self.onAutoCompletedResultsItemClick(e);\n });\n }\n\n container.appendChild(div);\n },\n\n _createSearchedSuggestContainer () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPautocompleteResultsSuggest\");\n container.className = \"GPelementHidden gpf-hidden gpf-select\";\n container.size = 6;\n container.autofocus = true;\n return container;\n },\n _createSearchedSuggestTitleElement () {\n var container = document.getElementById(this._addUID(\"GPautocompleteResultsSuggest\"));\n var label = document.createElement(\"p\");\n label.className = \"GPlabel GPlabelTitle gpf-label fr-label\";\n label.innerHTML = \"Cartes et données\";\n container.appendChild(label);\n },\n\n /**\n * Autocompletion result of search service.\n * Proposals are dynamically filled in Javascript by autocomplete service\n *\n *\n * @param {Object} suggest - suggested results\n * @param {Number} id - ID\n */\n _createSearchedSuggestElement : function (suggest, id) {\n // contexte d'execution\n var self = this;\n\n var container = document.getElementById(this._addUID(\"GPautocompleteResultsSuggest\"));\n\n var div = document.createElement(\"p\");\n div.id = this._addUID(\"AutoCompletedSuggest_\" + id);\n div.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n div.innerHTML = suggest.title + \" (\" + suggest.service + \")\";\n div.dataset.layer = suggest.name;\n div.title = `${suggest.description} (nom technique : ${suggest.name})`;\n if (div.addEventListener) {\n div.addEventListener(\"click\", function (e) {\n self.onSearchedResultsItemClick(e);\n }, false);\n } else if (div.attachEvent) {\n div.attachEvent(\"onclick\", function (e) {\n self.onSearchedResultsItemClick(e);\n });\n }\n\n container.appendChild(div);\n },\n\n // ################################################################### //\n // ############### Geocoding with advanced container ################# //\n // ################################################################### //\n\n /**\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchPanelHeaderElement : function () {\n // contexte d'execution\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = \"Recherche avancée\";\n container.appendChild(divTitle);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPadvancedSearchClose\");\n divClose.className = \"GPpanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer la recherche avancée\";\n\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n // document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).style.display = \"inline-block\";\n document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).setAttribute(\"aria-pressed\", false);\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n // document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).style.display = \"inline-block\";\n document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).setAttribute(\"aria-pressed\", false);\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n\n /**\n * @param {Object[]} advancedSearchCodes - codes\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchPanelFormElement : function (advancedSearchCodes) {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GPadvancedSearchForm\");\n form.className = \"gpf-panel__content fr-modal__content\";\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n // data\n var data = [];\n // liste des attributs de la ressource de geocodage\n var id = \"#GPadvancedSearchFilters-\" + self._uid;\n var matchesFilters = document.querySelectorAll(id + \" > div > div > input,select#category\");\n for (var i = 0; i < matchesFilters.length; i++) {\n var element = matchesFilters[i];\n data.push({\n key : element.name,\n value : element.value\n });\n }\n\n // gestionnaire d'evenement :\n // on récupère les valeurs de saisies pour requête sur le service de geocodage\n self.onGeocodingAdvancedSearchSubmit(e, data);\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n\n return false;\n });\n\n var div = document.createElement(\"div\");\n div.className = \"GPflexInput gpf-flex-column \";\n\n var label = document.createElement(\"label\");\n label.className = \"GPadvancedSearchCodeLabel gpf-label fr-label\";\n label.innerHTML = \"Recherche par\";\n div.appendChild(label);\n\n var select = this._createAdvancedSearchFormCodeElement(advancedSearchCodes);\n div.appendChild(select);\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n\n // var filters = this._createAdvancedSearchFormFiltersElement ();\n // form.appendChild(filters);\n\n // var input = this._createAdvancedSearchFormInputElement ();\n // form.appendChild(input);\n\n form.appendChild(div);\n\n return form;\n },\n\n /**\n * @param {Object[]} codes - codes\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFormCodeElement : function (codes) {\n // contexte d'execution\n var self = this;\n\n var select = document.createElement(\"select\");\n select.id = this._addUID(\"GPadvancedSearchCode\");\n select.title = \"Choisir un type de recherche\";\n select.className = \"GPadvancedSearchCode gpf-select fr-select\";\n select.addEventListener(\"change\", function (e) {\n // var idx = e.target.selectedIndex;\n // var value = e.target.options[idx].value;\n // gestionnaire d'evenement :\n // permet de recuperer des informations diverses...\n self.onGeocodingAdvancedSearchCodeChange(e);\n }, false);\n\n // liste statique au cas où des codes n'ont pas été passés en entrée\n if (!codes) {\n codes = [{\n id : \"PositionOfInterest\",\n title : \"Lieux/toponymes\"\n }, {\n id : \"StreetAddress\",\n title : \"Adresses\"\n }, {\n id : \"CadastralParcel\",\n title : \"Parcelles cadastrales\"\n }];\n }\n\n for (var i = 0; i < codes.length; i++) {\n var option = document.createElement(\"option\");\n option.value = codes[i].id;\n option.text = codes[i].title;\n select.appendChild(option);\n }\n\n return select;\n },\n\n /**\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFormInputElement : function () {\n var input = document.createElement(\"input\");\n input.type = \"submit\";\n input.id = this._addUID(\"GPadvancedSearchSubmit\");\n input.className = \"GPsubmit gpf-btn gpf-btn-icon-submit fr-btn fr-btn--secondary gpf-btn--secondary\";\n input.value = \"Chercher\";\n\n return input;\n },\n\n /**\n * Filters geocoding.\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFormFiltersElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPadvancedSearchFilters\");\n return container;\n },\n\n /**\n * Create filter container for resources :\n * \"PositionOfInterest\", \"StreetAddress\", ...\n *\n * @param {String} code - code of geocoding resource\n * @param {Boolean} display - display\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFiltersTableElement : function (code, display) {\n var container = document.createElement(\"div\");\n container.id = this._addUID(code);\n if (!display) {\n container.style.display = \"none\";\n }\n\n return container;\n },\n\n /**\n * Create filter attribut for a resource :\n * \"PositionOfInterest\", \"StreetAddress\", ...\n * Research filters are filled in Javascript depending on developer choice\n *\n * @param {Object} filterAttributes - filter attributes :\n * @param {String} filterAttributes.code - code of geocoding resource\n * @param {String} filterAttributes.name - ID\n * @param {String} filterAttributes.title - label\n * @param {String} filterAttributes.description - description\n * @param {String} filterAttributes.value - value\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFiltersAttributElement : function (filterAttributes) {\n // INFORMATION\n // cette methode peut être appelée si le document n'existe pas, elle\n // permet ainsi de creer une div sans insertion dans le container...\n\n var container = null;\n var name = filterAttributes.name;\n var title = filterAttributes.title;\n var description = filterAttributes.description;\n var code = filterAttributes.code;\n var value = filterAttributes.value;\n\n var div = document.createElement(\"div\");\n div.className = \"GPflexInput gpf-flex-column \";\n\n var label = document.createElement(\"label\");\n label.className = \"GPadvancedSearchFilterLabel gpf-label fr-label\";\n label.htmlFor = name;\n label.title = description || title;\n label.innerHTML = title;\n div.appendChild(label);\n\n if (name === \"category\") {\n var select = document.createElement(\"select\");\n select.id = name;\n select.name = name;\n select.title = title;\n select.className = \"GPadvancedSearchFilterInput gpf-select fr-select\";\n if (value) {\n if (Array.isArray(value)) {\n for (var i = 0; i < value.length; i++) {\n var option = document.createElement(\"option\");\n option.value = value[i];\n option.text = value[i];\n select.appendChild(option);\n }\n }\n }\n div.appendChild(select);\n } else {\n var input = document.createElement(\"input\");\n input.id = name;\n input.className = \"GPadvancedSearchFilterInput gpf-input fr-input\";\n input.type = \"text\";\n input.name = name;\n if (value) {\n if (Array.isArray(value)) {\n var listId = name + \"_list\";\n input.setAttribute(\"list\", listId);\n var dl = document.createElement(\"datalist\");\n dl.id = listId;\n for (var i = 0; i < value.length; ++i) {\n var option = document.createElement(\"option\");\n option.value = value[i];\n dl.appendChild(option);\n }\n div.appendChild(dl);\n } else {\n input.value = value;\n }\n }\n div.appendChild(input);\n }\n\n container = document.getElementById(this._addUID(code));\n\n if (container) {\n container.appendChild(div);\n } else {\n // le container, c'est la div !\n container = div;\n }\n\n return container;\n },\n\n // ################################################################### //\n // ################## Geocoding results container #################### //\n // ################################################################### //\n\n /**\n * @returns {DOMElement} DOM element\n */\n _createGeocodeResultsHeaderElement : function () {\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = \"Résultats de la recherche\";\n container.appendChild(divTitle);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPgeocodeResultsClose\");\n divClose.className = \"GPpanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer la fenêtre de résultats\";\n\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n\n /**\n * Geocoding results list.\n *\n * @returns {DOMElement} DOM element\n */\n _createGeocodeResultsListElement : function () {\n // contexte d'execution\n var self = this;\n\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPgeocodeResults\");\n container.className = \"gpf-panel__list\";\n container.setAttribute(\"tabindex\", \"0\");\n\n if (container.addEventListener) {\n container.addEventListener(\"click\", function (e) {\n if (!e.ctrlKey) {\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n self.onGeocodedResultsItemClick(e);\n }, false);\n } else if (container.attachEvent) {\n container.attachEvent(\"onclick\", function (e) {\n if (!e.ctrlKey) {\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n self.onGeocodedResultsItemClick(e);\n });\n }\n // Results are dynamically filled in Javascript by geocoding service\n //
    ...
    \n\n return container;\n },\n\n /**\n * Geocoding result.\n * Results are dynamically filled in Javascript by geocoding service\n *\n * TODO formaliser le contenu des reponses\n * FIXME formater la reponse en amont !\n *\n * @param {Object} location - suggested or geocoded location results\n * @param {Number} id - ID\n */\n _createGeocodedLocationElement : function (location, id) {\n var container = document.getElementById(this._addUID(\"GPgeocodeResults\"));\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GeocodedLocation_\" + id);\n div.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n\n if (typeof location === \"string\") {\n div.innerHTML = location;\n } else {\n div.innerHTML = GeocodeUtils.getGeocodedLocationFreeform(location);\n }\n\n container.appendChild(div);\n },\n\n // ################################################################### //\n // ################## Coordinate search container #################### //\n // ################################################################### //\n\n _createCoordinateSearchPanelHeaderElement () {\n // contexte d'execution\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = \"Recherche par coordonnées\";\n container.appendChild(divTitle);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPcoordinateSearchClose\");\n divClose.className = \"GPpanelClose GPcoordinateSearchClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer la recherche par coordonnées\";\n\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n document.getElementById(self._addUID(\"GPshowSearchByCoordinate\")).setAttribute(\"aria-pressed\", false);\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n self.onCoordinateSearchClose();\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n document.getElementById(self._addUID(\"GPshowSearchByCoordinate\")).setAttribute(\"aria-pressed\", false);\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n self.onCoordinateSearchClose();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n _createCoordinateSearchPanelFormElement () {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GPcoordinateSearchForm\");\n form.className = \"gpf-panel__content fr-modal__content\";\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n self.onShowSearchByCoordinateClick();\n return false;\n });\n\n return form;\n },\n\n __createCoordinateSearchDivElement () {\n var div = document.createElement(\"div\");\n div.className = \"GPflexInput gpf-flex-column \";\n return div;\n },\n\n _createCoordinateSearchSystemsLabelElement () {\n var label = document.createElement(\"label\");\n label.className = \"GPcoordinateSearchSystemsLabel gpf-label fr-label\";\n label.innerHTML = \"Système de référence\";\n return label;\n },\n _setCoordinateSearchSystemsSelectElement (systems) {\n if (document.getElementById(this._addUID(\"GPcoordinateSearchSystem\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchSystem\")).remove();\n }\n // contexte d'execution\n var context = this;\n\n var selectSystem = document.createElement(\"select\");\n selectSystem.id = this._addUID(\"GPcoordinateSearchSystem\");\n selectSystem.title = \"Choisir un système de réference\";\n selectSystem.className = \"GPselect GPcoordinateSearchSystemsSelect gpf-select fr-select\";\n selectSystem.addEventListener(\"change\", function (e) {\n context.onCoordinateSearchSystemChange(e);\n });\n\n for (var i = 0; i < systems.length; i++) {\n var obj = systems[i];\n var option = document.createElement(\"option\");\n option.value = obj.code;\n option.text = obj.label || i;\n // option.label = obj.label;\n selectSystem.appendChild(option);\n }\n\n return selectSystem;\n },\n\n _createCoordinateSearchUnitsLabelElement () {\n var label = document.createElement(\"label\");\n label.className = \"GPcoordinateSearchUnitsLabel gpf-label fr-label\";\n label.innerHTML = \"Unités\";\n return label;\n },\n _setCoordinateSearchUnitsSelectElement (units) {\n if (document.getElementById(this._addUID(\"GPcoordinateSearchUnits\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchUnits\")).remove();\n }\n // contexte d'execution\n var context = this;\n\n var selectUnits = document.createElement(\"select\");\n selectUnits.id = this._addUID(\"GPcoordinateSearchUnits\");\n selectUnits.title = \"Choisir un type d'unité\";\n selectUnits.className = \"GPselect GPcoordinateSearchUnitsSelect gpf-select fr-select\";\n selectUnits.addEventListener(\"change\", function (e) {\n context.onCoordinateSearchUnitsChange(e);\n });\n\n for (var j = 0; j < units.length; j++) {\n var obj = units[j];\n var option = document.createElement(\"option\");\n option.value = (obj.code) ? obj.code : j;\n option.text = obj.label || j;\n // option.label = obj.label;\n selectUnits.appendChild(option);\n }\n\n return selectUnits;\n },\n\n /**\n * update Label\n * @param {String} type - Geographical or Metric\n * @returns {DOMElement} label\n */\n _setCoordinateSearchLngLabelElement (type) {\n // type geographical ou metric\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLngLabel\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLngLabel\")).remove();\n }\n var labelLng = document.createElement(\"label\");\n labelLng.className = \"GPcoordinateSearchLabel gpf-label fr-label\";\n labelLng.id = this._addUID(\"GPcoordinateSearchLngLabel\");\n labelLng.htmlFor = \"coordinate-lng\";\n labelLng.innerHTML = (type === \"Geographical\") ? \"Longitude :\" : \"Y :\";\n\n return labelLng;\n },\n /**\n * update Input coordinate\n * @param {String} code - ex. DMS : degrés sexadecimaux\n * @returns {DOMElement} input\n */\n _setCoordinateSearchLngInputElement (code) {\n // code DMS ou other\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLngInput\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLngInput\")).remove();\n }\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLngDMS\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLngDMS\")).remove();\n }\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPcoordinateSearchLngInput\");\n input.className = \"GPcoordinateSearchInput gpf-input fr-input\";\n input.title = \"Saisir des coordonnées\";\n input.name = \"coordinate-lng\";\n input.type = \"number\";\n input.step = \"any\";\n input.required = \"\";\n switch (code) {\n case \"DMS\":\n input.title += \" géographiques (en sexa)\";\n input.className = \"GPelementHidden gpf-hidden\";\n return this._setCoordinateSearchLngDMSElement();\n break;\n case \"DEC\":\n input.title += \" géographiques (en decimal)\";\n input.min = \"-180\";\n input.max = \"180\";\n break;\n case \"M\":\n input.title += \" cartésiennes (en mètre)\";\n break;\n case \"KM\":\n input.title += \" cartésiennes (en kilomètre)\";\n break;\n default:\n break;\n }\n return input;\n },\n _setCoordinateSearchLngDMSElement () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPcoordinateSearchLngDMS\");\n div.innerHTML = `\n
    \n \n \n \n \n \n \n \n \n \n \n
    \n `;\n return div;\n },\n /**\n * update Label\n * @param {String} type - Geographical or Metric\n * @returns {DOMElement} label\n */\n _setCoordinateSearchLatLabelElement (type) {\n // type geographical ou metric\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLatLabel\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLatLabel\")).remove();\n }\n var labelLat = document.createElement(\"label\");\n labelLat.className = \"GPcoordinateSearchLabel gpf-label fr-label\";\n labelLat.id = this._addUID(\"GPcoordinateSearchLatLabel\");\n labelLat.htmlFor = \"coordinate-lat\";\n labelLat.innerHTML = (type === \"Geographical\") ? \"Latitude :\" : \"X :\";\n\n return labelLat;\n },\n /**\n * update Input coordinate\n * @param {String} code - ex. DMS : degrés sexadecimaux\n * @returns {DOMElement} input\n */\n _setCoordinateSearchLatInputElement (code) {\n // code DMS ou other\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLatInput\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLatInput\")).remove();\n }\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLatDMS\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLatDMS\")).remove();\n }\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPcoordinateSearchLatInput\");\n input.className = \"GPcoordinateSearchInput gpf-input fr-input\";\n input.title =\"Saisir des coordonnées\";\n input.name = \"coordinate-lat\";\n input.type = \"number\";\n input.step = \"any\";\n input.required = \"\";\n switch (code) {\n case \"DMS\":\n input.title += \" géographiques (en sexa)\";\n input.className = \"GPelementHidden gpf-hidden\";\n return this._setCoordinateSearchLatDMSElement();\n break;\n case \"DEC\":\n input.title += \" géographiques (en decimal)\";\n input.min = \"-180\";\n input.max = \"180\";\n break;\n case \"M\":\n input.title += \" cartésiennes (en mètre)\";\n break;\n case \"KM\":\n input.title += \" cartésiennes (en kilomètre)\";\n break;\n default:\n break;\n }\n return input;\n },\n _setCoordinateSearchLatDMSElement () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPcoordinateSearchLatDMS\");\n div.innerHTML = `\n
    \n \n \n \n \n \n \n \n \n \n \n
    \n `;\n return div;\n },\n\n /**\n * submit\n * @returns {DOMElement} input\n */\n _createCoordinateSearchSubmitElement () {\n var input = document.createElement(\"input\");\n input.type = \"submit\";\n input.id = this._addUID(\"GPcoordinateSearchSubmit\");\n input.className = \"GPsubmit gpf-btn gpf-btn-icon-submit fr-btn fr-btn--secondary gpf-btn--secondary\";\n input.value = \"Chercher\";\n return input;\n },\n};\n\nexport default SearchEngineDOM;\n","// import CSS\nimport \"../../CSS/Controls/SearchEngine/GPFsearchEngine.css\";\n// import \"../../CSS/Controls/SearchEngine/GPFsearchEngineStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Control from \"../Control\";\nimport Widget from \"../Widget\";\nimport Overlay from \"ol/Overlay\";\nimport {\n transform as olProjTransform,\n get as olProjGet,\n transformExtent as olProjTransformExtent\n} from \"ol/proj\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Config from \"../../Utils/Config\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Utils from \"../../Utils/Helper\";\nimport Markers from \"../Utils/Markers\";\nimport Interactions from \"../Utils/Interactions\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport MathUtils from \"../../Utils/MathUtils\";\nimport SearchEngineUtils from \"../../Utils/SearchEngineUtils\";\nimport GeocodeUtils from \"../../Utils/GeocodeUtils\";\nimport CRS from \"../../CRS/CRS\";\n// import local des layers\nimport GeoportalWMS from \"../../Layers/LayerWMS\";\nimport GeoportalWMTS from \"../../Layers/LayerWMTS\";\nimport GeoportalMapBox from \"../../Layers/LayerMapBox\";\n// Service\nimport Search from \"../../Services/Search\";\n// DOM\nimport SearchEngineDOM from \"./SearchEngineDOM\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar logger = Logger.getLogger(\"searchengine\");\n\n/**\n * @classdesc\n * SearchEngine control\n *\n * @constructor\n * @extends {ol.control.Control}\n * @type {ol.control.SearchEngine}\n * @alias ol.control.SearchEngine\n * @param {Object} options - control options\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {String} [options.apiKey] - API key. The key \"calcul\" is used by default.\n * @param {Boolean} [options.ssl = true] - use of ssl or not (default true, service requested using https protocol)\n * @param {Boolean} [options.collapsed = true] - collapse mode, true by default\n * @param {Boolean} [options.collapsible = true] - force control to be collapsed or not, true by default.\n * @param {String} [options.direction = \"start\"] - TODO : position of picto, by default : \"start\"\n * @param {String} [options.placeholder] - Placeholder in search bar. Default is \"Rechercher un lieu, une adresse\".\n * @param {Boolean} [options.displayMarker = true] - set a marker on search result, defaults to true.\n * @param {String} [options.markerStyle = \"lightOrange\"] - Marker style. Currently possible values are \"lightOrange\" (default value), \"darkOrange\", \"red\" and \"turquoiseBlue\".\n * @param {String} [options.markerUrl = \"\"] - Marker url. By default, if not specified, use option markerStyle. Otherwise, you can added a http url or a base64 image.\n * @param {Boolean} [options.splitResults = true] - False to disable layers search\n * @param {Boolean} [options.displayButtonAdvancedSearch = false] - False to disable advanced search tools (it will not be displayed). Default is false (not displayed)\n * @param {Boolean} [options.displayButtonGeolocate = false] - False to disable advanced search tools (it will not be displayed). Default is false (not displayed)\n * @param {Boolean} [options.displayButtonCoordinateSearch = false] - False to disable advanced search tools (it will not be displayed). Default is false (not displayed)\n * @param {Boolean} [options.displayButtonClose = true] - False to disable advanced search tools (it will not be displayed). Default is true (displayed)\n * @param {Object} [options.coordinateSearch] - coordinates search options.\n * @param {DOMElement} [options.coordinateSearch.target = null] - TODO : target location of results window. By default under the search bar.\n * @param {Array} [options.coordinateSearch.units] - list of coordinates units, to be displayed in control units list.\n * Values may be \"DEC\" (decimal degrees), \"DMS\" (sexagecimal) for geographical coordinates,\n * and \"M\" or \"KM\" for metric coordinates\n * @param {Array} [options.coordinateSearch.systems] - list of projection systems, default are Geographical (\"EPSG:4326\"), Web Mercator (\"EPSG:3857\") and Lambert 93 (\"EPSG:2154\").\n * Each array element (=system) is an object with following properties :\n * @param {String} [options.coordinateSearch.systems.crs] - Proj4 crs alias (from proj4 defs). e.g. : \"EPSG:4326\". Required\n * @param {String} [options.coordinateSearch.systems.label] - CRS label to be displayed in control. Default is crs code (e.g. \"EPSG:4326\")\n * @param {String} [options.coordinateSearch.systems.type] - CRS units type for coordinates conversion : \"Geographical\" or \"Metric\". Default: \"Geographical\"\n * @param {Object} [options.advancedSearch] - advanced search options for geocoding (filters). Properties can be found among geocode options.filterOptions (see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~geocode Gp.Services.geocode})\n * @param {DOMElement} [options.advancedSearch.target = null] - TODO : target location of results window. By default under the search bar.\n * @param {Object} [options.resources] - resources to be used by geocode and autocompletion services :\n * @param {String} [options.resources.geocode = \"location\"] - resources geocoding, by default : \"location\"\n * @param {Array} [options.resources.autocomplete] - resources autocompletion, by default : [\"PositionOfInterest\", \"StreetAddress\"]\n * @param {Boolean} [options.resources.search = false] - false to disable search service, by default : \"false\"\n * @param {Object} [options.searchOptions = {}] - options of search service\n * @param {Boolean} [options.searchOptions.addToMap = true] - add layer automatically to map, defaults to true.\n * @param {String} [options.searchOptions.filterServices] - filter on a list of search services, each field is separated by a comma. \"WMTS,TMS\" by default\n * @param {String} [options.searchOptions.filterWMTSPriority] - filter on priority WMTS layer in search, each field is separated by a comma. \"PLAN.IGN,ORTHOIMAGERY.ORTHOPHOTOS\" by default\n * @param {Boolean} [options.searchOptions.filterLayersPriority = false] - filter on priority layers in search, false by default\n * @param {String} [options.searchOptions.filterVectortiles] - filter on list of search layers only on service TMS, each field is separated by a comma. \"PLAN.IGN, ...\" by default\n * @param {Boolean} [options.searchOptions.updateVectortiles = false] - updating the list of search layers only on service TMS\n * @param {Object} [options.searchOptions.serviceOptions] - options of search service\n * @param {Sring} [options.searchOptions.serviceOptions.url] - url of service\n * @param {String} [options.searchOptions.serviceOptions.index] - index of search, \"standard\" by default\n * @param {String} [options.searchOptions.serviceOptions.fields] - list of search fields, each field is separated by a comma. \"title,layer_name\" by default\n * @param {Number} [options.searchOptions.serviceOptions.size] - number of response in the service. 1000 by default\n * @param {Number} [options.searchOptions.serviceOptions.maximumResponses] - number of results in the response. 10 by default\n * @param {Object} [options.geocodeOptions = {}] - options of geocode service (see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~geocode Gp.Services.geocode})\n * @param {Object} [options.geocodeOptions.serviceOptions] - options of geocode service\n * @param {Object} [options.autocompleteOptions = {}] - options of autocomplete service (see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~autoComplete Gp.Services.autoComplete})\n * @param {Object} [options.autocompleteOptions.serviceOptions] - options of autocomplete service\n * @param {Boolean} [options.autocompleteOptions.triggerGeocode = false] - trigger a geocoding request if the autocompletion does not return any suggestions, false by default\n * @param {Number} [options.autocompleteOptions.triggerDelay = 1000] - waiting time before sending the geocoding request, 1000ms by default\n * @param {Number} [options.autocompleteOptions.maximumEntries] - maximum autocompletion results we want to display\n * @param {Boolean} [options.autocompleteOptions.prettifyResults = false] - apply a filter/prettifier function to clean or prettify autocomplete entries\n * @param {Sting|Numeric|Function} [options.zoomTo] - zoom to results, by default, current zoom.\n * Value possible : auto or zoom level.\n * Possible to overload it with a function :\n * zoomTo : function (info) {\n * // do some stuff...\n * return zoom;\n * }\n * @fires searchengine:autocomplete:click\n * @fires searchengine:geocode:click\n * @fires searchengine:search:click\n * @fires searchengine:geolocation:click\n * @fires searchengine:coordinates:click\n * @todo option : direction (start|end) de la position du picto (loupe)\n * @todo option : choix du target pour les fenetres geocodage ou recherche par coordonnées\n * @example\n * var SearchEngine = ol.control.SearchEngine({\n * apiKey : \"CLEAPI\",\n * collapsed : true,\n * collapsible : true,\n * displayButtonAdvancedSearch : true,\n * displayButtonGeolocate : true,\n * displayButtonCoordinateSearch : true,\n * markerStyle : \"lightOrange\" // \"http://...\" or \"data/base64...\"\n * resources : {\n * geocode : [\"StreetAddress\", \"PositionOfInterest\"],\n * autocomplete : [\"StreetAddress\"],\n * search : false\n * },\n * advancedSearch : {\n * target : document.getElementById(\"dialog\"),\n * PositionOfInterest : [{name : \"municipality\", title : \"Ville\"}],\n * StreetAddress : [{...}]\n * },\n * coordinateSearch : {\n * target : null\n * systems : [\n * {\n * \"crs\" : \"EPSG:3857\",\n * \"label\" : \"Web Mercator\",\n * \"type\" : \"Metric\"\n * },\n * {\n * \"crs\" : \"EPSG:4326\",\n * \"label\" : \"Géographiques\",\n * \"type\" : \"Geographical\"\n * }\n * ],\n * units : [\"DEC\", \"DMS\"]\n * },\n * geocodeOptions : {},\n * autocompleteOptions : {},\n * searchOptions : {}\n * });\n *\n * SearchEngine.on(\"searchengine:autocomplete:click\", function (e) {\n * console.warn(\"autocomplete\", e.location);\n * });\n * SearchEngine.on(\"searchengine:search:click\", function (e) {\n * console.warn(\"search\", e.suggest);\n * });\n * SearchEngine.on(\"searchengine:geocode:click\", function (e) {\n * console.warn(\"geocode\", e.location);\n * });\n * SearchEngine.on(\"searchengine:geolocation:click\", function (e) {\n * console.warn(\"geolocation\", e.);\n * });\n * SearchEngine.on(\"searchengine:coordinate:click\", function (e) {\n * console.warn(\"coordinate\", e.);\n * });\n */\nvar SearchEngine = class SearchEngine extends Control {\n\n /**\n * See {@link ol.control.SearchEngine}\n * @module SearchEngine\n * @alias module:~controls/SearchEngine\n * @param {*} options - options\n * @example\n * import SearchEngine from \"gpf-ext-ol/controls/SearchEngine\"\n * ou\n * import { SearchEngine } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof SearchEngine)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"SearchEngine\";\n // initialisation du composant\n this.initialize(options);\n\n // // Widget main DOM container\n this.container = this._initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this.container) : this.element = this.container;\n\n return this;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (!map) {\n this._clearResults();\n }\n\n // mode \"collapsed\"\n if (!this.collapsed) {\n this._showSearchEngineButton.setAttribute(\"aria-pressed\", true);\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Returns true if widget is collapsed (minimized), false otherwise\n *\n * @returns {Boolean} collapsed - true if widget is collapsed\n */\n getCollapsed () {\n return this.collapsed;\n }\n\n /**\n * Collapse or display widget main container\n *\n * @param {Boolean} collapsed - True to collapse widget, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.log(\"[ERROR] SearchEngine:setCollapsed - missing collapsed parameter\");\n return;\n }\n\n if (!this.options.collapsible) {\n return; // on interdit le mode pliable !\n }\n\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n\n this._showSearchEngineButton.click();\n this.collapsed = collapsed;\n }\n\n /**\n * Get locations data from geocode service\n *\n * @returns {Object} data - locations\n */\n getData () {\n return this._geocodedLocations;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize SearchEngine control (called by SearchEngine constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n this._checkInputOptions(options);\n\n // define default options\n this.options = {\n collapsed : true,\n collapsible : true,\n zoomTo : \"\",\n resources : {\n geocode : [],\n autocomplete : [],\n search : false\n },\n displayButtonClose : true,\n displayButtonAdvancedSearch : false,\n displayButtonGeolocate : false,\n displayButtonCoordinateSearch : false,\n advancedSearch : {},\n coordinateSearch : {},\n searchOptions : {\n addToMap : true,\n serviceOptions : {\n maximumResponses : 5,\n }\n },\n geocodeOptions : {\n serviceOptions : {}\n },\n autocompleteOptions : {\n serviceOptions : {\n maximumResponses : 5,\n },\n triggerGeocode : false,\n triggerDelay : 1000,\n prettifyResults : false\n },\n displayMarker : true,\n markerStyle : \"lightOrange\",\n markerUrl : \"\",\n placeholder : \"Rechercher un lieu, une adresse\",\n splitResults : true,\n };\n\n // merge with user options\n Utils.mergeParams(this.options, options);\n if (this.options.resources.geocode === \"\") {\n this.options.resources.geocode = [\"PositionOfInterest\", \"StreetAddress\"];\n }\n if (this.options.resources.autocomplete.length === 0) {\n this.options.resources.autocomplete = [\"PositionOfInterest\", \"StreetAddress\"];\n }\n if (this.options.resources.search) {\n // configuration avec gestion des options surchargées du service\n if (this.options.searchOptions) {\n if (this.options.searchOptions.serviceOptions) {\n if (this.options.searchOptions.serviceOptions.url) {\n Search.setUrl(this.options.searchOptions.serviceOptions.url);\n }\n if (this.options.searchOptions.serviceOptions.fields) {\n Search.setFields(this.options.searchOptions.serviceOptions.fields);\n }\n if (this.options.searchOptions.serviceOptions.index) {\n Search.setIndex(this.options.searchOptions.serviceOptions.index);\n }\n if (this.options.searchOptions.serviceOptions.size) {\n Search.setSize(this.options.searchOptions.serviceOptions.size);\n }\n if (this.options.searchOptions.serviceOptions.maximumResponses) {\n Search.setMaximumResponses(this.options.searchOptions.serviceOptions.maximumResponses);\n }\n }\n if (this.options.searchOptions.filterServices) {\n Search.setFiltersByService(this.options.searchOptions.filterServices);\n }\n if (this.options.searchOptions.filterLayersPriority) {\n Search.setFiltersByLayerPriority(this.options.searchOptions.filterLayersPriority);\n }\n if (this.options.searchOptions.filterWMTSPriority) {\n Search.setFilterWMTSPriority(this.options.searchOptions.filterWMTSPriority);\n }\n if (this.options.searchOptions.filterVectortiles) {\n Search.setFiltersByTMS(this.options.searchOptions.filterVectortiles);\n }\n if (this.options.searchOptions.updateVectortiles) {\n Search.updateFilterByTMS(); // url par defaut\n }\n }\n // abonnement au service\n Search.target.addEventListener(\"suggest\", (e) => {\n logger.debug(e);\n this._fillSearchedSuggestListContainer(e.detail);\n });\n }\n\n if (!this.options.collapsible) {\n this.options.collapsed = false; // on interdit le mode pliable !\n }\n /** {Boolean} specify if searchEngine control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n // identifiant du contrôle : utile pour suffixer les identifiants CSS (pour gérer le cas où il y en a plusieurs dans la même page)\n this._uid = this.options.id || SelectorID.generate();\n\n this._showSearchEngineButton = null;\n\n // container de l'input de recherche\n this._inputSearchContainer = null;\n\n // container des reponses de l'autocompletion / du service de recherche\n this._autocompleteContainer = null;\n this._containerResultsLocation = null;\n this._containerResultsSuggest = null;\n // Radio buttons correspondants\n this._radioButtonLocation = null;\n this._radioButtonSuggest = null;\n\n // listes des reponses de l'autocompletion\n this._suggestedLocations = [];\n\n // container des reponses du geocodage\n this._geocodedContainer = null;\n\n // liste des reponses du geocodage\n this._geocodedLocations = [];\n\n // container des filtres du geocodage\n this._filterContainer = null;\n\n // ressource de geocodage selectionnée pour le geocodage avancé\n this._currentGeocodingCode = null;\n\n // localisant\n this._currentGeocodingLocation = null;\n\n // liste des filtres du geocodage pour le geocodage avancé\n this._advancedSearchFilters = {};\n this._initAdvancedSearchFilters();\n\n // liste des ressources du geocodage pour le geocodage avancé\n this._advancedSearchCodes = [];\n this._initAdvancedSearchCodes();\n\n // recherche par coordonnées : systemes de projections\n this._coordinateSearchSystems = [];\n if (this.options.displayButtonCoordinateSearch) {\n this._initCoordinateSearchSystems();\n this._currentCoordinateSearchSystems = this._coordinateSearchSystems[0]; // epsg:4326\n this._currentCoordinateSearchType = this._coordinateSearchSystems[0].type; // geographical ou metric\n }\n\n // recherche par coordonnées : unités\n this._coordinateSearchUnits = [];\n if (this.options.displayButtonCoordinateSearch) {\n this._initCoordinateSearchUnits();\n this._currentCoordinateSearchUnits = this._coordinateSearchUnits[this._currentCoordinateSearchType][0].code; // decimal\n }\n\n\n this._coordinateSearchLngInput = null;\n this._coordinateSearchLatInput = null;\n\n // marker\n this._marker = null;\n\n // marker style or url\n var _markerStyle = this.options.markerStyle;\n var _markerUrl = this.options.markerUrl;\n if (_markerUrl) {\n this._markerUrl = _markerUrl;\n } else {\n this._markerUrl = (Object.keys(Markers).indexOf(_markerStyle) === -1) ? Markers[\"lightOrange\"] : Markers[_markerStyle];\n }\n\n // marker display\n this._displayMarker = this.options.displayMarker;\n\n // popup\n this._popupContent = null;\n this._popupDiv = this._initPopupDiv();\n this._popupOverlay = null;\n\n // trigger geocode\n this._triggerHandler = null;\n }\n\n /**\n * this method is called by this.initialize()\n * and makes sure input options are correctly formated\n *\n * @param {Object} options - options\n *\n * @private\n */\n _checkInputOptions (options) {\n var i;\n\n if (options.resources) {\n // on vérifie que resources est bien un objet\n if (typeof options.resources === \"object\") {\n // ressources de geocodage\n var geocodeResources = options.resources.geocode;\n if (geocodeResources) {\n // on vérifie que la liste des ressources de geocodage est bien un tableau\n if (Array.isArray(geocodeResources)) {\n var geocodeResourcesList = [\"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\", \"Administratif\"];\n for (i = 0; i < geocodeResources.length; i++) {\n if (geocodeResourcesList.indexOf(geocodeResources[i]) === -1) {\n // si la resource n'est pas référencée, on l'enlève\n // geocodeResources.splice(i, 1);\n logger.log(\"[SearchEngine] options.resources.geocode : \" + geocodeResources[i] + \" is not a resource for geocode\");\n }\n }\n } else {\n logger.log(\"[SearchEngine] 'options.resources.geocode' parameter should be an array\");\n geocodeResources = null;\n }\n }\n\n // ressources d'autocompletion\n var autocompleteResources = options.resources.autocomplete;\n if (autocompleteResources) {\n // on vérifie que la liste des ressources d'autocompletion est bien un tableau\n if (Array.isArray(autocompleteResources)) {\n var autocompleteResourcesList = [\"StreetAddress\", \"PositionOfInterest\"];\n for (i = 0; i < autocompleteResources.length; i++) {\n if (autocompleteResourcesList.indexOf(autocompleteResources[i]) === -1) {\n // si la resource n'est pas référencée, on l'enlève\n // autocompleteResources.splice(i, 1);\n logger.log(\"[SearchEngine] options.resources.autocomplete : \" + autocompleteResources[i] + \" is not a resource for autocomplete\");\n }\n }\n } else {\n logger.log(\"[SearchEngine] 'options.resources.autocomplete' parameter should be an array\");\n autocompleteResources = null;\n }\n }\n } else {\n logger.log(\"[SearchEngine] 'resources' parameter should be an object\");\n options.resources = null;\n }\n }\n }\n\n /**\n * this method is called by this.initialize()\n * and initialize the geocoding resources titles.\n *\n * @private\n */\n _initAdvancedSearchCodes () {\n // INFORMATION\n // on y ajoute les filtres attributaires pour une table de ressources\n // selectionnée via un evenement (onchange) de la liste deroulante du\n // menu avancé du geocodage.\n // cf. onGeocodingAdvancedSearchCodeChange() pour la selection de la\n // ressource de geocodage à afficher\n\n var geocodeResources = this.options.resources.geocode;\n if (geocodeResources === \"location\") {\n geocodeResources = [\"PositionOfInterest\", \"StreetAddress\", \"CadastralParcel\"];\n }\n if (!Array.isArray(geocodeResources)) {\n geocodeResources = [geocodeResources];\n }\n for (var i = 0; i < geocodeResources.length; i++) {\n switch (geocodeResources[i]) {\n case \"PositionOfInterest\":\n this._advancedSearchCodes.push({\n id : \"PositionOfInterest\",\n title : \"Lieux/toponymes\"\n });\n break;\n case \"StreetAddress\":\n this._advancedSearchCodes.push({\n id : \"StreetAddress\",\n title : \"Adresses\"\n });\n break;\n case \"CadastralParcel\":\n this._advancedSearchCodes.push({\n id : \"CadastralParcel\",\n title : \"Parcelles cadastrales\"\n });\n break;\n default:\n break;\n }\n }\n // par défaut, au cas où aucune ressource passée en option ne correspond à celles attendues\n if (this._advancedSearchCodes.length === 0) {\n this._advancedSearchCodes = [{\n id : \"StreetAddress\",\n title : \"Adresses\"\n }, {\n id : \"PositionOfInterest\",\n title : \"Lieux/toponymes\"\n }, {\n id : \"CadastralParcel\",\n title : \"Cadastre\"\n }];\n }\n\n logger.log(\"advancedSearchCodes\", this._advancedSearchCodes);\n }\n\n /**\n * this method is called by this.onAdd()\n * and initialize the advanced geocoding filters.\n *\n * @private\n */\n _initAdvancedSearchFilters () {\n // liste des filtres par defauts pour toutes les ressources\n this._advancedSearchFilters = SearchEngineUtils.advancedSearchFiltersByDefault;\n\n // on merge les options avancées avec celles par defaut\n var advancedSearchFiltersCustom = this.options.advancedSearch;\n Utils.assign(this._advancedSearchFilters, advancedSearchFiltersCustom);\n\n logger.log(\"advancedSearchFilters\", this._advancedSearchFilters);\n }\n\n /**\n * this method is called by the constructor and initialize the projection\n * systems.\n * getting coordinates in the requested projection :\n * see this.onCoordinateSearchSystemChange()\n *\n * @private\n */\n _initCoordinateSearchSystems () {\n // on donne la possibilité à l'utilisateur de modifier\n // la liste des systèmes à afficher\n // Ex. this.options.coordinateSearch.systems\n\n // systemes de projection disponible par defaut\n var projectionSystemsByDefault = [{\n label : \"G\\u00e9ographique\",\n crs : \"EPSG:4326\",\n type : \"Geographical\"\n }, {\n label : \"Web Mercator\",\n crs : \"EPSG:3857\",\n type : \"Metric\"\n }, {\n label : \"Lambert 93\",\n crs : \"EPSG:2154\",\n type : \"Metric\"\n }];\n\n var systems = this.options.coordinateSearch.systems;\n if (systems) {\n // on ajoute les definitions d'un systeme de reference fournies par l'utilisateur\n for (var i = 0; i < systems.length; i++) {\n var sys = systems[i];\n this._setSystem(sys);\n }\n }\n\n // on ajoute les systèmes de projections par défaut\n if (this._coordinateSearchSystems.length === 0) {\n for (var j = 0; j < projectionSystemsByDefault.length; j++) {\n this._setSystem(projectionSystemsByDefault[j]);\n }\n }\n }\n\n /**\n * this method is called by the constructor and initialize the units.\n * getting coordinates in the requested units :\n * see this.onCoordinateSearchUnitsChange()\n *\n * @private\n */\n _initCoordinateSearchUnits () {\n // on donne la possibilité à l'utilisateur de modifier\n // la liste des unités à afficher\n // Ex.\n // this.options.units : [\"DEC\", \"DMS\"]\n\n // unités disponible par defaut\n var projectionUnitsByDefault = {\n Geographical : [{\n code : \"DEC\",\n label : \"degrés décimaux\",\n format : MathUtils.coordinateToDecimal\n }, {\n code : \"DMS\",\n label : \"degrés sexagésimaux\",\n format : MathUtils.coordinateToDMS\n }],\n Metric : [{\n code : \"M\",\n label : \"mètres\",\n format : MathUtils.coordinateToMeter\n }, {\n code : \"KM\",\n label : \"kilomètres\",\n format : MathUtils.coordinateToKMeter\n }]\n };\n\n var units = this.options.coordinateSearch.units;\n if (units) {\n for (var type in projectionUnitsByDefault) {\n if (projectionUnitsByDefault.hasOwnProperty(type)) {\n var found = false;\n for (var j = 0; j < projectionUnitsByDefault[type].length; j++) {\n var obj = projectionUnitsByDefault[type][j];\n for (var i = 0; i < units.length; i++) {\n var unit = units[i];\n if (obj.code === unit) {\n found = true;\n if (!this._coordinateSearchUnits[type]) {\n this._coordinateSearchUnits[type] = [];\n }\n this._coordinateSearchUnits[type].push(obj);\n }\n }\n }\n if (!found) {\n this._coordinateSearchUnits[type] = projectionUnitsByDefault[type];\n }\n }\n }\n }\n\n // au cas où...\n if (typeof this._coordinateSearchUnits === \"object\" && Object.keys(this._coordinateSearchUnits).length === 0) {\n this._coordinateSearchUnits = projectionUnitsByDefault;\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize popup div\n * (to display results information on marker click)\n *\n * @return {Object} element - DOM element for popup\n * @private\n */\n _initPopupDiv () {\n var context = this;\n var element = document.createElement(\"div\");\n element.className = \"gp-feature-info-div gpf-widget-color\";\n // bouton de fermeture de la pop-up\n var closer = document.createElement(\"button\");\n closer.title = \"Fermer la pop-up\";\n closer.className = \"gp-styling-button closer gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-mt-1v fr-mr-2v\";\n\n // on closer click : remove popup\n closer.onclick = function () {\n if (context._popupOverlay != null) {\n context._popupOverlay.setPosition(undefined);\n }\n return false;\n };\n this._popupContent = document.createElement(\"div\");\n this._popupContent.className = \"gp-features-content-div\";\n this._popupContent.style[\"min-width\"] = \"200px\";\n element.appendChild(this._popupContent);\n element.appendChild(closer);\n\n return element;\n }\n\n // ################################################################### //\n // ######################## DOM initialize ########################### //\n // ################################################################### //\n\n /**\n * Create control main container\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initContainer () {\n // create main container\n var container = this._createMainContainerElement();\n\n var searchDiv = this._createSearchDivElement();\n // create search engine picto\n var picto = this._showSearchEngineButton = this._createShowSearchEnginePictoElement(this.options.collapsible);\n searchDiv.appendChild(picto);\n\n // only dsfr : on applique un fond blanc sur une barre de recherche fixe\n if (!this.options.collapsible) {\n container.classList.add(\"gpf-widget-color\", \"gpf-widget-padding\");\n }\n\n var search = this._inputSearchContainer = this._createSearchInputElement(this.options.placeholder);\n if (this.options.displayButtonClose) {\n search.appendChild(this._createSearchResetElement());\n }\n\n var context = this;\n if (search.addEventListener) {\n search.addEventListener(\"click\", function () {\n context.onAutoCompleteInputClick();\n });\n } else if (search.attachEvent) {\n search.attachEvent(\"onclick\", function () {\n context.onAutoCompleteInputClick();\n });\n }\n searchDiv.appendChild(search);\n\n var buttonsContainer = this._createButtonsElement();\n var firstLineWrapper = this._createFirstLineWrapper();\n firstLineWrapper.appendChild(searchDiv);\n firstLineWrapper.appendChild(buttonsContainer);\n container.appendChild(firstLineWrapper);\n\n if (checkDsfr() && this.options.splitResults || this.options.displayButtonAdvancedSearch) {\n var radioContainer = this._createRadioContainer();\n container.appendChild(radioContainer);\n }\n\n if (checkDsfr() && this.options.splitResults) {\n var radioElements;\n [radioElements, this._radioButtonLocation, this._radioButtonSuggest] = this._createRadioElements();\n radioContainer.appendChild(radioElements);\n }\n\n if (this.options.displayButtonAdvancedSearch) {\n var advancedShow = this._createShowAdvancedSearchElement();\n radioContainer.appendChild(advancedShow);\n\n // INFO je decompose les appels car j'ai besoin de recuperer le container\n // des filtres\n var advancedPanel = this._createAdvancedSearchPanelElement();\n var advancedPanelDiv = this._createAdvancedSearchPanelDivElement();\n var advancedHeader = this._createAdvancedSearchPanelHeaderElement();\n var advancedForm = this._createAdvancedSearchPanelFormElement(this._advancedSearchCodes);\n var advancedFormFilters = this._filterContainer = this._createAdvancedSearchFormFiltersElement();\n this._setFilter(this._advancedSearchCodes[0].id); // ex \"PositionOfInterest\"\n var advancedFormInput = this._createAdvancedSearchFormInputElement();\n\n advancedForm.appendChild(advancedFormFilters);\n advancedForm.appendChild(advancedFormInput);\n advancedPanelDiv.appendChild(advancedHeader);\n advancedPanelDiv.appendChild(advancedForm);\n advancedPanel.appendChild(advancedPanelDiv);\n container.appendChild(advancedPanel);\n }\n\n if (this.options.displayButtonGeolocate) {\n var geolocateShow = this._createShowGeolocateElement();\n buttonsContainer.appendChild(geolocateShow);\n }\n\n if (this.options.displayButtonCoordinateSearch) {\n var searchByCoordinateShow = this._createShowSearchByCoordinateElement();\n buttonsContainer.appendChild(searchByCoordinateShow);\n\n var coordinatePanel = this._createCoordinateSearchPanelElement();\n var coordinatePanelDiv = this._createCoordinateSearchPanelDivElement();\n var coordinateHeader = this._createCoordinateSearchPanelHeaderElement();\n var coordinateForm = this._createCoordinateSearchPanelFormElement();\n\n var div = null;\n div = this._containerSystems = this.__createCoordinateSearchDivElement();\n coordinateForm.appendChild(div);\n var labelSystems = this._createCoordinateSearchSystemsLabelElement();\n var systems = this._setCoordinateSearchSystemsSelectElement(this._coordinateSearchSystems);\n div.appendChild(labelSystems);\n div.appendChild(systems);\n\n div = this._containerUnits = this.__createCoordinateSearchDivElement();\n coordinateForm.appendChild(div);\n var labelUnits = this._createCoordinateSearchUnitsLabelElement();\n var units = this._setCoordinateSearchUnitsSelectElement(this._coordinateSearchUnits[this._currentCoordinateSearchType]);\n div.appendChild(labelUnits);\n div.appendChild(units);\n\n div = this._containerCoordinateLng = this.__createCoordinateSearchDivElement();\n coordinateForm.appendChild(div);\n var coordinateLng = this._setCoordinateSearchLngLabelElement(this._currentCoordinateSearchType);\n var coordinateInputLng = this._coordinateSearchLngInput = this._setCoordinateSearchLngInputElement(this._currentCoordinateSearchUnits);\n div.appendChild(coordinateLng);\n div.appendChild(coordinateInputLng);\n\n div = this._containerCoordinateLat = this.__createCoordinateSearchDivElement();\n coordinateForm.appendChild(div);\n var coordinateLat = this._setCoordinateSearchLatLabelElement(this._currentCoordinateSearchType);\n var coordinateInputLat = this._coordinateSearchLatInput = this._setCoordinateSearchLatInputElement(this._currentCoordinateSearchUnits);\n div.appendChild(coordinateLat);\n div.appendChild(coordinateInputLat);\n\n var submit = this._createCoordinateSearchSubmitElement();\n coordinateForm.appendChild(submit);\n\n coordinatePanelDiv.appendChild(coordinateHeader);\n coordinatePanelDiv.appendChild(coordinateForm);\n\n coordinatePanel.appendChild(coordinatePanelDiv);\n container.appendChild(coordinatePanel);\n }\n\n // INFO je decompose les appels car j'ai besoin de recuperer le container\n // des resultats de l'autocompletion\n var autocomplete = this._autocompleteContainer = this._createAutoCompleteElement();\n var autocompleteList = this._createAutoCompleteListElement();\n var containerResultsLocation = this._containerResultsLocation = this._createAutoCompletedLocationContainer();\n var containerResultsSuggest = this._containerResultsSuggest = this._createSearchedSuggestContainer();\n autocompleteList.appendChild(containerResultsLocation);\n autocompleteList.appendChild(containerResultsSuggest);\n autocomplete.appendChild(autocompleteList);\n container.appendChild(autocomplete);\n\n // INFO je decompose les appels car j'ai besoin de recuperer le container\n // des resultats du geocodage\n var geocode = this._createGeocodeResultsElement();\n var geocodeDiv = this._createGeocodeResultsDivElement();\n geocode.appendChild(geocodeDiv);\n var geocodeList = this._geocodedContainer = this._createGeocodeResultsListElement();\n geocodeDiv.appendChild(geocodeList);\n container.appendChild(geocode);\n\n return container;\n }\n\n /**\n * this method is called by :\n * - this._initContainer() : ...\n * - this.onGeocodingAdvancedSearchCodeChoice() : ...\n * and initialize or create the filters container HTMLElement\n * to the geocoding advanced menu.\n *\n * @param {String} code - resource geocoding name\n *\n * @returns {DOMElement} DOM element\n * @private\n */\n _setFilter (code) {\n // INFORMATION\n // Nous avons 2 solutions possibles pour la mise en place des filtres.\n // 1. Soit on decide de creer tous les filtres pour chaque ressource\n // de geocodage à l'initialisation du composant, et on joue sur le\n // mode 'hidden' pour n'afficher que la ressource selectionnée.\n // 2. Soit on decide de creer à chaque fois les filtres pour la\n // ressource selectionnée.\n // Chaque solution a ses inconvenients/avantages.\n // Implementation du choix 2 car elle offre plus de souplesse pour\n // recuperer les 'form-data'...\n\n var container = this._filterContainer;\n\n var codeFound = false;\n for (var i = 0; i < this._advancedSearchCodes.length; i++) {\n if (this._advancedSearchCodes[i].id === code) {\n codeFound = true;\n break;\n }\n }\n\n if (!codeFound) {\n // cette ressource n'est pas disponible,\n // on supprime les anciens enfants...\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n return;\n }\n\n // on sauvegarde la ressource de geocodage sélectionnée\n this._currentGeocodingCode = code;\n\n // on supprime les enfants...\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n\n var lstAttributs = this._advancedSearchFilters[code];\n if (!lstAttributs || lstAttributs.length === 0) {\n // cette ressource n'est pas parametrable\n return;\n }\n\n var divTable = this._createAdvancedSearchFiltersTableElement(code, true);\n\n for (var j = 0; j < lstAttributs.length; j++) {\n var divFilter = this._createAdvancedSearchFiltersAttributElement(lstAttributs[j]);\n divTable.appendChild(divFilter);\n }\n\n container.appendChild(divTable);\n\n return container;\n }\n\n // ################################################################### //\n // ################ methods to request and results ################### //\n // ################################################################### //\n\n /**\n * this method is called by this.onAutoCompleteSearch()\n * and executes a request to the service.\n *\n * @param {Object} settings - service settings\n * @param {String} settings.text - text\n * @param {Function} settings.onSuccess - callback\n * @param {Function} settings.onFailure - callback\n * @private\n */\n _requestAutoComplete (settings) {\n // on ne fait pas de requête si on n'a pas renseigné de parametres !\n if (!settings || (typeof settings === \"object\" && Object.keys(settings).length === 0)) {\n return;\n }\n\n // on ne fait pas de requête si la parametre 'text' est vide !\n if (!settings.text) {\n return;\n }\n\n logger.log(settings);\n\n var options = {};\n // on recupere les options du service\n Utils.assign(options, this.options.autocompleteOptions.serviceOptions);\n // ainsi que la recherche et les callbacks\n Utils.assign(options, settings);\n\n // on ajoute le paramètre filterOptions.type spécifiant les ressources.\n var resources = this.options.resources.autocomplete;\n if (resources && Array.isArray(resources)) {\n // il se peut que l'utilisateur ait surchargé ce paramètre dans geocodeOptions,\n if (!options.type) {\n options.type = resources;\n }\n }\n\n // cas où la clef API n'est pas renseignée dans les options du service,\n // on utilise celle renseignée au niveau du controle ou la clé \"calcul\" par défaut.\n options.apiKey = options.apiKey || this.options.apiKey;\n\n // si l'utilisateur a spécifié le paramètre ssl au niveau du control, on s'en sert\n // true par défaut (https)\n if (typeof options.ssl !== \"boolean\") {\n if (typeof this.options.ssl === \"boolean\") {\n options.ssl = this.options.ssl;\n } else {\n options.ssl = true;\n }\n }\n logger.log(options);\n\n Gp.Services.autoComplete(options);\n }\n\n /**\n * this method is called by this.onAutoCompleteSearchText() (case of success)\n * and fills the container of the location list.\n * it creates a HTML Element per location\n *\n * @param {Array} locations - Array of Gp.Services.AutoComplete.SuggestedLocation corresponding to autocomplete results list\n * @private\n */\n _fillAutoCompletedLocationListContainer (locations) {\n if (!locations || locations.length === 0) {\n return;\n }\n\n // on vide la liste avant de la construire\n var element = this._containerResultsLocation;\n if (element.childElementCount) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n element.classList.add(\"GPelementHidden\", \"gpf-hidden\");\n if (locations.length) {\n if (!this._radioButtonLocation || (this._radioButtonLocation && this._radioButtonLocation.checked)) {\n element.classList.remove(\"GPelementHidden\", \"gpf-hidden\");\n }\n this._displaySuggestedLocation();\n if (!checkDsfr() || !this.options.splitResults) {\n this._createAutoCompletedLocationTitleElement();\n }\n for (var i = 0; i < locations.length; i++) {\n // Proposals are dynamically filled in Javascript by autocomplete service\n this._createAutoCompletedLocationElement(locations[i], i);\n }\n }\n }\n\n /**\n * this method is called by this.() (case of success)\n * and fills the container of the suggest list.\n * it creates a HTML Element per suggest\n *\n * @param {Array} suggests - Array of suggested corresponding to search results list\n * @private\n */\n _fillSearchedSuggestListContainer (suggests) {\n // on vide la liste avant de la construire\n var element = this._containerResultsSuggest;\n if (element.childElementCount) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n element.classList.add(\"GPelementHidden\", \"gpf-hidden\");\n if (suggests.length) {\n if (!this._radioButtonSuggest || (this._radioButtonSuggest && this._radioButtonSuggest.checked)) {\n element.classList.remove(\"GPelementHidden\", \"gpf-hidden\");\n }\n if (!checkDsfr() || !this.options.splitResults) {\n this._createSearchedSuggestTitleElement();\n }\n for (let i = 0; i < suggests.length; i++) {\n const suggest = suggests[i];\n this._createSearchedSuggestElement(suggest, i);\n }\n }\n }\n\n /**\n * this method is called by this.onAutoCompleteSearch()\n * and executes a request to the service.\n *\n * @param {Object} settings - service settings\n * @param {String} settings.location - text\n * @param {Function} settings.onSuccess - callback\n * @param {Function} settings.onFailure - callback\n * @private\n */\n _requestGeocoding (settings) {\n // on ne fait pas de requête si on n'a pas renseigné de parametres !\n if (!settings || (typeof settings === \"object\" && Object.keys(settings).length === 0)) {\n return;\n }\n\n // on ne fait pas de requête si la parametre 'text' est vide !\n if (settings.query === null) {\n return;\n }\n\n logger.log(settings);\n\n var options = {};\n // on recupere les options du service\n Utils.assign(options, this.options.geocodeOptions.serviceOptions);\n // ainsi que la recherche et les callbacks\n Utils.assign(options, settings);\n // on redefinie les callbacks si les callbacks de service existent\n var self = this;\n var bOnFailure = !!(this.options.geocodeOptions.serviceOptions.onFailure !== null && typeof this.options.geocodeOptions.serviceOptions.onFailure === \"function\"); // cast variable to boolean\n var bOnSuccess = !!(this.options.geocodeOptions.serviceOptions.onSuccess !== null && typeof this.options.geocodeOptions.serviceOptions.onSuccess === \"function\");\n if (bOnSuccess) {\n var cbOnSuccess = function (e) {\n settings.onSuccess.call(self, e);\n self.options.geocodeOptions.serviceOptions.onSuccess.call(self, e);\n };\n options.onSuccess = cbOnSuccess;\n }\n if (bOnFailure) {\n var cbOnFailure = function (e) {\n settings.onFailure.call(self, e);\n self.options.geocodeOptions.serviceOptions.onFailure.call(self, e);\n };\n options.onFailure = cbOnFailure;\n }\n\n // on ajoute le paramètre index spécifiant les ressources.\n var resources = this.options.resources.geocode;\n if (resources) {\n // il se peut que l'utilisateur ait surchargé ce paramètre dans geocodeOptions,\n // ou qu'il ait déjà été rempli (cas de la recherche avancée)\n if (!options.index) {\n options.index = resources;\n }\n }\n\n // cas où la clef API n'est pas renseignée dans les options du service,\n // on utilise celle renseignée au niveau du controle ou la clé \"calcul\" par défaut\n options.apiKey = options.apiKey || this.options.apiKey;\n\n // si l'utilisateur a spécifié le paramètre ssl au niveau du control, on s'en sert\n // true par défaut (https)\n if (typeof options.ssl !== \"boolean\") {\n if (typeof this.options.ssl === \"boolean\") {\n options.ssl = this.options.ssl;\n } else {\n options.ssl = true;\n }\n }\n\n logger.log(options);\n\n Gp.Services.geocode(options);\n }\n\n /**\n * this method is called by this.onGeocodingSearch()\n * and fills the container of the location results.\n * it creates a HTML Element per location\n * (cf. this. ...)\n *\n * @param {Object[]} locations - locations\n *\n * @private\n */\n _fillGeocodedLocationListContainer (locations) {\n if (!locations || locations.length === 0) {\n this._clearGeocodedLocation();\n return;\n }\n\n // on vide la liste avant de la construire\n var element = this._geocodedContainer;\n if (element.childElementCount) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n\n for (var i = 0; i < locations.length; i++) {\n logger.log(locations[i]);\n // Proposals are dynamically filled in Javascript by autocomplete service\n this._createGeocodedLocationElement(locations[i], i);\n }\n\n // sauvegarde de l'etat des locations\n this._geocodedLocations = locations;\n }\n\n // ################################################################### //\n // ######################### other methods ########################### //\n // ################################################################### //\n\n /**\n * this sends the label to the panel.\n *\n * @param {String} label - label suggested location\n * @private\n */\n _setLabel (label) {\n document.getElementById(\"GPsearchInputText-\" + this._uid).value = label;\n }\n\n /**\n * this method is called by this.on*ResultsItemClick()\n * and move/zoom on a position.\n *\n * @param {Array} position - ol.Coordinate object [lon, lat] (en lat/lon : \"EPSG:4326\")\n * @param {Number} zoom - zoom level\n * @private\n */\n _setPosition (position, zoom) {\n var view = this.getMap().getView();\n view.setCenter(position);\n view.setZoom(zoom);\n }\n\n /**\n * this method is called by this.on*ResultsItemClick()\n * and displays a marker.\n * FIXME\n *\n * @param {Array} position - ol.Coordinate object [lon, lat] ou [x, y]\n * @param {Object} info - location information\n * @private\n */\n _setMarker (position, info) {\n var map = this.getMap();\n var context = this;\n\n // remove previous markers\n if (this._marker != null) {\n map.removeOverlay(this._marker);\n this._marker = null;\n }\n\n if (position) {\n // création de l'élément DOM\n var markerDiv = document.createElement(\"img\");\n markerDiv.src = this._markerUrl;\n\n // ajout de l'évènement onclick (pour afficher une popup)\n if (markerDiv.addEventListener) {\n markerDiv.addEventListener(\n \"click\",\n function () {\n context._onResultMarkerSelect(info);\n }\n );\n } else if (markerDiv.attachEvent) {\n // Internet Explorer\n markerDiv.attachEvent(\n \"onclick\",\n function () {\n context._onResultMarkerSelect(info);\n }\n );\n }\n\n // création du marker (overlay)\n this._marker = new Overlay({\n position : position,\n // offset : [-25.5, -38], // FIXME mauvais rendu !?\n positioning : \"center-center\",\n element : markerDiv,\n stopEvent : false\n });\n map.addOverlay(this._marker);\n }\n }\n\n /**\n * this method is called by this.on*ResultsItemClick()\n * and get zoom to results.\n *\n * @param {Object} info - info\n *\n * @returns {Integer} zoom\n * @private\n */\n _getZoom (info) {\n var map = this.getMap();\n var key = this.options.zoomTo;\n var zoom = null;\n\n // les valeurs du zooms sont determinées\n // soit par les mots clefs suivants : max, min ou auto\n // soit par un niveau de zoom\n // soit defini par l'utilisateur via une fonction\n\n if (typeof key === \"function\") {\n logger.trace(\"zoom function\");\n zoom = key.call(this, info);\n }\n\n if (typeof key === \"number\") {\n logger.trace(\"zoom level\");\n zoom = key;\n }\n\n if (typeof key === \"string\") {\n // if (key === \"max\") {\n // zoom = map.getMaxZoom();\n // } else if (key === \"min\") {\n // zoom = map.getMinZoom();\n // } else\n\n if (key === \"auto\") {\n logger.trace(\"zoom auto\");\n zoom = SearchEngineUtils.zoomToResultsByDefault(info);\n } else {\n logger.trace(\"zoom level parsing\");\n var value = parseInt(key, 10);\n if (!isNaN(value)) {\n logger.trace(\"zoom parsing\");\n zoom = value;\n }\n }\n }\n\n // polyfill IE\n Number.isInteger = Number.isInteger || function (value) {\n return typeof value === \"number\" &&\n isFinite(value) &&\n Math.floor(value) === value;\n };\n\n // test de validité du zoom,\n // on prend le zoom courant par defaut ...\n if (!zoom || zoom === \"\" || !Number.isInteger(zoom)) {\n logger.trace(\"zoom not found, current zoom...\");\n zoom = map.getView().getZoom();\n }\n\n // FIXME test si le zoom est dans l'espace de la carte\n var min = map.minZoom; // .getMinZoom();\n var max = map.maxZoom; // .getMaxZoom();\n if (zoom < min) {\n logger.trace(\"zoom level min...\");\n zoom = min;\n }\n if (zoom > max) {\n logger.trace(\"zoom level max...\");\n zoom = max;\n }\n\n logger.trace(\"zoom\", zoom);\n return zoom;\n }\n\n /**\n * this method is called on 'click' on this._marker\n * (cf. this._setMarker() )\n * and sets a popup with marker information\n *\n * @param {Object} information - location information\n * @private\n */\n _onResultMarkerSelect (information) {\n var map = this.getMap();\n\n var popupContent = \"\";\n if (typeof information !== \"string\") {\n if (information.service === \"GeocodedLocation\") {\n popupContent = \"
      \";\n var attributes = information.location.placeAttributes;\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr)) {\n if (attr !== \"trueGeometry\" && attr !== \"extraFields\" && attr !== \"houseNumberInfos\" && attr !== \"_count\") {\n popupContent += \"
    • \";\n popupContent += \"\" + attr.toUpperCase() + \" : \";\n popupContent += attributes[attr];\n popupContent += \"
    • \";\n }\n }\n }\n popupContent += \"
    \";\n } else if (information.service === \"SuggestedLocation\") {\n popupContent = GeocodeUtils.getSuggestedLocationFreeform(information.location);\n } else {\n popupContent = \"sans informations.\";\n }\n } else {\n popupContent = information;\n }\n\n this._popupContent.innerHTML = popupContent;\n if (!this._popupOverlay) {\n // ajout de la popup a la carte comme un overlay\n this._popupOverlay = new Overlay({\n element : this._popupDiv,\n positioning : \"bottom-center\",\n position : this._marker.getPosition(),\n offset : [0, -42]\n });\n map.addOverlay(this._popupOverlay);\n } else {\n // si l'overlay est déjà créé, on modifie juste sa position\n this._popupOverlay.setPosition(this._marker.getPosition());\n }\n }\n\n /**\n * Set additional projection system\n *\n * @param {Object} system - projection system\n * @param {String} system.crs - Proj4 crs alias (from proj4 defs) e.g. \"EPSG:4326\"\n * @param {String} [system.label] - CRS label to be displayed in control. Default is system.crs alias\n * @param {String} [system.type] - CRS units type for coordinates conversion (one of control options.units). Default is \"Metric\"\n */\n _setSystem (system) {\n if (typeof system !== \"object\") {\n logger.log(\"[ERROR] MousePosition:addSystem - system parameter should be an object\");\n return;\n }\n if (!system.crs) {\n logger.error(\"crs not defined !\");\n return;\n }\n if (!system.label) {\n logger.warn(\"crs label not defined, use crs code by default.\");\n system.label = system.crs;\n }\n if (!system.type) {\n logger.warn(\"type srs not defined, use 'Metric' by default.\");\n system.type = \"Metric\";\n }\n\n // chargement de la definition de la projection\n // même si déjà chargé...\n CRS.loadByName(system.crs);\n\n if (!olProjGet(system.crs)) {\n logger.error(\"crs '{}' not available into proj4 definitions !\", system.crs);\n return;\n }\n\n // add system to control systems\n for (var j = 0; j < this._coordinateSearchSystems.length; j++) {\n var obj = this._coordinateSearchSystems[j];\n if (system.crs === obj.crs) {\n // warn user\n logger.info(\"crs '{}' already configured\", obj.crs);\n }\n }\n system.code = this._coordinateSearchSystems.length;\n this._coordinateSearchSystems.push(system);\n }\n\n // ################################################################### //\n // ###################### other handlers events ###################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on 'GPshowSearchEnginePicto' tag label\n * (cf. this._createShowSearchEnginePictoElement), and it cleans the component\n * when it's closed.\n *\n * @param { event } e évènement associé au clic\n * @private\n */\n onShowSearchEngineClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n // on supprime toutes les interactions\n Interactions.unset(map);\n var opened = this._showSearchEngineButton.ariaPressed;\n this.collapsed = !(opened === \"true\");\n // on génère nous même l'evenement OpenLayers de changement de propriété\n // (utiliser ol.control.SearchEngine.on(\"change:collapsed\", function ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n\n // on nettoie si on ferme le composant\n if (this.collapsed) {\n this._clearResults();\n }\n }\n\n /**\n * this method is called by event 'click' on 'GPsearchInputReset' tag div\n * (cf. this._createSearchInputElement), and it cleans the value of input.\n *\n * @private\n */\n onSearchResetClick () {\n this._clearResults();\n }\n\n /**\n * this method is called by event 'click' on 'GPshowGeolocate' tag div\n * (cf. this._createShowGeolocateElement)\n *\n * @private\n */\n onShowSearchGeolocateClick () {\n if (\"geolocation\" in navigator) {\n /* geolocation is available */\n navigator.geolocation.getCurrentPosition((position) => {\n var view = this.getMap().getView();\n var viewProj = view.getProjection().getCode();\n var coordinates_4326 = [position.coords.longitude, position.coords.latitude];\n var coordinates;\n if (viewProj !== \"EPSG:4326\") {\n // on retransforme les coordonnées de la position dans la projection de la carte\n coordinates = olProjTransform(coordinates_4326, \"EPSG:4326\", viewProj);\n } else {\n coordinates = coordinates_4326;\n }\n if (isNaN(coordinates[0]) || isNaN(coordinates[1])) {\n this._setMarker();\n return;\n }\n this._setPosition(coordinates, 15); // FIXME zoom fixe !\n if (this._displayMarker) {\n var markerInfo = \"
    Ma position
    longitude : \" + coordinates_4326[0] + \"
    latitude : \" + coordinates_4326[1];\n this._setMarker(coordinates, markerInfo);\n }\n /**\n * event triggered when i want a geolocation\n *\n * @event searchengine:geolocation:click\n * @property {Object} type - event\n * @property {Object} coordinates - coordinates\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:geolocation:click\", function (e) {\n * console.log(e.coordinates);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:geolocation:click\",\n coordinates : coordinates\n });\n });\n } else {\n /* geolocation IS NOT available */\n }\n }\n\n /**\n * this method is called by event 'click' on 'GPshowSearchByCoordinate' tag div\n * (cf. this._createShowSearchByCoordinateElement)\n *\n * @private\n */\n onShowSearchByCoordinateClick () {\n var lng = null;\n var lat = null;\n if (this._coordinateSearchLngInput && this._coordinateSearchLngInput.nodeName === \"DIV\" &&\n this._coordinateSearchLatInput && this._coordinateSearchLatInput.nodeName === \"DIV\"\n ) {\n lng = this._getCoordinateSearchDMS(this._coordinateSearchLngInput);\n lat = this._getCoordinateSearchDMS(this._coordinateSearchLatInput);\n } else {\n lng = this._coordinateSearchLngInput.value;\n lat = this._coordinateSearchLatInput.value;\n }\n\n if (!lng || !lat) {\n return;\n }\n\n var coordinates = [lng, lat];\n\n var view = this.getMap().getView();\n var viewProj = view.getProjection().getCode();\n if (viewProj !== \"EPSG:4326\") {\n coordinates = olProjTransform(coordinates, \"EPSG:4326\", viewProj);\n }\n if (isNaN(coordinates[0]) || isNaN(coordinates[1])) {\n this._setMarker();\n return;\n }\n this._setPosition(coordinates, 10); // FIXME zoom fixe !\n if (this._displayMarker) {\n this._setMarker(coordinates, \"sans information\");\n }\n\n /**\n * event triggered when we are positioned\n *\n * @event searchengine:coordinates:click\n * @property {Object} type - event\n * @property {Object} coordinates - coordinates\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:coordinates:click\", function (e) {\n * console.log(e.coordinates);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:coordinates:click\",\n coordinates : coordinates\n });\n }\n\n _getCoordinateSearchDMS (dom) {\n if (dom && dom.nodeName === \"DIV\") {\n var nodes = dom.querySelectorAll(\"[name]\");\n if (nodes) {\n var degrees = MathUtils.toInteger(nodes[0].value);\n var minutes = MathUtils.toInteger(nodes[1].value);\n var seconds = MathUtils.toInteger(nodes[2].value);\n var hemispheres = nodes[3].options[nodes[3].selectedIndex].text;\n if (!degrees || !minutes || !seconds || !hemispheres) {\n return;\n }\n return MathUtils.dmsToDecimal(degrees, minutes, seconds, hemispheres);\n }\n }\n }\n // ################################################################### //\n // ################## handlers events AutoComplete ################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on 'GPlocationOrigin' input\n *\n * @private\n */\n onAutoCompleteInputClick () {\n var inputSearchTextContainer = document.getElementById(\"GPsearchInputText-\" + this._uid);\n if (inputSearchTextContainer && !inputSearchTextContainer.disabled && inputSearchTextContainer.value.length > 2) {\n this._displaySuggestedLocation();\n }\n }\n\n /**\n * this method is called by event 'keyup' on 'GPsearchInputText' tag input\n * (cf. this._createSearchInputElement), and it gets the value of input.\n * this value is passed as a parameter for the service autocomplete (text).\n * the results of the request are displayed into a drop down menu.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onAutoCompleteSearchText (e) {\n var value = e.target.value;\n if (!value) {\n return;\n }\n\n // on sauvegarde le localisant\n this._currentGeocodingLocation = value;\n\n // on limite les requêtes à partir de 3 car. saisie !\n if (value.length < 3) {\n this._clearSuggestedLocation();\n return;\n }\n\n var _triggerGeocode = this.options.autocompleteOptions.triggerGeocode;\n var _triggerDelay = this.options.autocompleteOptions.triggerDelay;\n var _maximumEntries = this.options.autocompleteOptions.maximumEntries;\n var _prettifyResults = this.options.autocompleteOptions.prettifyResults;\n\n // INFORMATION\n // on effectue la requête au service d'autocompletion.\n // on met en place des callbacks afin de recuperer les resultats ou\n // les messages d'erreurs du service.\n // les resultats sont affichés dans une liste deroulante.\n var context = this;\n this._requestAutoComplete({\n text : value,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(\"request from AutoComplete\", results);\n if (results) {\n // on sauvegarde l'etat des résultats\n context._suggestedLocations = results.suggestedLocations;\n context._locationsToBeDisplayed = [];\n // on vérifie qu'on n'a pas récupéré des coordonnées nulles (par ex recherche par code postal)\n for (var i = 0; i < context._suggestedLocations.length; i++) {\n var ilocation = context._suggestedLocations[i];\n if (ilocation.position && ilocation.position.x === 0 && ilocation.position.y === 0 && ilocation.fullText) {\n // si les coordonnées sont nulles, il faut relancer une requête de géocodage avec l'attribut \"fullText\" récupéré\n context._getGeocodeCoordinatesFromFullText(ilocation, i);\n } else {\n // sinon on peut afficher normalement le résultat dans la liste\n context._locationsToBeDisplayed.push(ilocation);\n }\n };\n // on filtre et enjolive éventuellement les résultats\n if (_prettifyResults === true) {\n context._prettifyAutocompleteResults(context._locationsToBeDisplayed);\n }\n // on ne garde que le nombre de résultats que l'on veut afficher\n if (_maximumEntries) {\n context._locationsToBeDisplayed = context._locationsToBeDisplayed.slice(0, _maximumEntries);\n }\n\n // on affiche les résultats qui n'ont pas des coordonnées nulles\n context._fillAutoCompletedLocationListContainer(context._locationsToBeDisplayed);\n // on annule eventuellement une requete de geocodage en cours car on obtient des\n // de nouveau des resultats d'autocompletion...\n if (context._triggerHandler) {\n clearTimeout(context._triggerHandler);\n context._triggerHandler = null;\n logger.warn(\"Cancel a geocode request !\");\n }\n }\n },\n // callback onFailure\n onFailure : function (error) {\n // FIXME\n // où affiche t on les messages : ex. 'No suggestion matching the search' ?\n context._clearSuggestedLocation();\n logger.log(error.message);\n // on envoie une requete de geocodage si aucun resultat d'autocompletion\n // n'a été trouvé ! Et on n'oublie pas d'annuler celle qui est en cours !\n if (error.message === \"No suggestion matching the search\" && _triggerGeocode /* && value.length === 5 */) {\n if (context._triggerHandler) {\n clearTimeout(context._triggerHandler);\n logger.warn(\"Cancel the last geocode request !\");\n }\n context._triggerHandler = setTimeout(\n function () {\n logger.warn(\"Launch a geocode request !\");\n context._requestGeocoding({\n location : value,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(\"request from Geocoding\", results);\n if (results) {\n context._locationsToBeDisplayed = [];\n // on modifie la structure des reponses pour être\n // compatible avec l'autocompletion !\n var locations = results.locations;\n for (var i = 0; i < locations.length; i++) {\n var location = locations[i];\n location.fullText = GeocodeUtils.getGeocodedLocationFreeform(location);\n location.position = {\n x : location.position.lon,\n y : location.position.lat\n };\n context._locationsToBeDisplayed.push(location);\n }\n context._fillAutoCompletedLocationListContainer(locations);\n }\n },\n // callback onFailure\n onFailure : function (error) {\n logger.log(error.message);\n }\n });\n }, _triggerDelay\n );\n }\n }\n });\n\n // INFORMATION\n // on effectue une requête au service de recherche.\n // les resultats sont ajoutées à la suite de l'autocompletion,\n // et un abonnement est mis en place pour les récuperer.\n if (this.options.resources.search) {\n // appel du service (cf. abonnement : Search.target.addEventListener(\"suggest\"))\n Search.suggest(value);\n }\n\n var map = this.getMap();\n map.on(\n \"click\",\n this._hideSuggestedLocation,\n this\n );\n map.on(\n \"pointerdrag\",\n this._hideSuggestedLocation,\n this\n );\n }\n\n /**\n * this method is called by Gp.Services.autoComplete callback in case of success\n * (cf. this.onAutoCompleteSearchText), for suggested locations with null coordinates\n * (case of postalCode research for instance).\n * Send a geocode request with suggested location 'fullText' attribute, to get its coordinates and display it in autocomplete results list container.\n *\n * @param {Gp.Services.AutoCompleteResponse.SuggestedLocation} suggestedLocation - autocompletion result (with null coordinates) to be geocoded\n * @param {Number} i - suggestedLocation position in Gp.Services.AutoCompleteResponse.suggestedLocations autocomplete results list\n * @private\n */\n _getGeocodeCoordinatesFromFullText (suggestedLocation, i) {\n var context = this;\n Gp.Services.geocode({\n apiKey : this.options.apiKey,\n ssl : this.options.ssl,\n q : GeocodeUtils.getSuggestedLocationFreeform(suggestedLocation),\n index : suggestedLocation.type,\n // callback onSuccess\n onSuccess : function (response) {\n logger.log(\"request from Geocoding (coordinates null)\", response);\n if (response.locations && response.locations.length !== 0 && response.locations[0].position) {\n // on modifie les coordonnées du résultat en EPSG:4326 donc lat,lon\n /// \\TODO verifier si l'inversion des coordonnees est necessaire\n if (context._suggestedLocations && context._suggestedLocations[i]) {\n context._suggestedLocations[i].position = {\n lon : response.locations[0].position.y,\n lat : response.locations[0].position.x\n };\n // et on l'affiche dans la liste\n context._locationsToBeDisplayed.unshift(context._suggestedLocations[i]);\n context._fillAutoCompletedLocationListContainer(context._locationsToBeDisplayed);\n }\n }\n },\n // callback onFailure\n onFailure : function () {\n // si on n'a pas réussi à récupérer les coordonnées, on affiche quand même le résultat\n if (context._suggestedLocations && context._suggestedLocations[i]) {\n context._createAutoCompletedLocationElement(context._suggestedLocations[i], i);\n }\n }\n });\n }\n\n /**\n * this method is called by event 'click' on 'GPautoCompleteResultsList' tag div\n * (cf. this._createAutoCompleteListElement), and it selects the location.\n * this location displays a marker on the map.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onAutoCompletedResultsItemClick (e) {\n // TODO on souhaite un comportement different pour la selection des reponses\n // de l'autocompletion :\n // - liste deroulante des reponses,\n // - puis possibilité de cliquer sur une suggestion\n // - mais aussi de la choisir avec le clavier (arrow up/down), puis valider\n // par un return\n // cette selection avec les fleches doit mettre à jour le input !\n // (comme un moteur de recherche de navigateur)\n\n var idx = SelectorID.index(e.target.id);\n logger.log(idx);\n logger.log(this._locationsToBeDisplayed[idx]);\n\n if (!idx) {\n return;\n }\n\n var position = [\n this._locationsToBeDisplayed[idx].position.x,\n this._locationsToBeDisplayed[idx].position.y\n ];\n var info = {\n service : \"SuggestedLocation\",\n location : this._locationsToBeDisplayed[idx]\n };\n\n // on ajoute le texte de l'autocomplétion dans l'input\n var label = GeocodeUtils.getSuggestedLocationFreeform(this._locationsToBeDisplayed[idx]);\n this._setLabel(label);\n\n // on sauvegarde le localisant\n this._currentGeocodingLocation = label;\n\n // Info : la position est en EPSG:4326, à transformer dans la projection de la carte\n var view = this.getMap().getView();\n var mapProj = view.getProjection().getCode();\n if (mapProj !== \"EPSG:4326\") {\n // on retransforme les coordonnées de la position dans la projection de la carte\n position = olProjTransform(position, \"EPSG:4326\", mapProj);\n }\n // on centre la vue et positionne le marker, à la position reprojetée dans la projection de la carte\n var zoom = this._getZoom(info);\n this._setPosition(position, zoom);\n if (this._displayMarker) {\n this._setMarker(position, info);\n }\n /**\n * event triggered when an element of the results is clicked for autocompletion\n *\n * @event searchengine:autocomplete:click\n * @property {Object} type - event\n * @property {Object} location - location\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:autocomplete:click\", function (e) {\n * console.log(e.location);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:autocomplete:click\",\n location : this._locationsToBeDisplayed[idx]\n });\n }\n\n /**\n * this method is called by event 'click' on '' tag div\n * (cf. this.), and it selects the suggest.\n * this suggest call an event to added layer on the map.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onSearchedResultsItemClick (e) {\n var idx = SelectorID.index(e.target.id);\n\n var error = null;\n try {\n var suggest = Search.getSuggestions()[idx];\n if (!suggest) {\n throw \"No suggestions found !\";\n }\n\n // Ajout de la couche sur la carte si l'option le permet\n if (this.options.searchOptions.addToMap) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw \"ERROR : contract key configuration has to be loaded to load Geoportal layers.\";\n }\n var service = suggest.service;\n var name = suggest.name;\n var layer = null;\n switch (service) {\n case \"WMS\":\n layer = new GeoportalWMS({\n layer : name\n });\n break;\n case \"WMTS\":\n layer = new GeoportalWMTS({\n layer : name\n });\n break;\n case \"TMS\":\n layer = new GeoportalMapBox({\n layer : name\n });\n default:\n break;\n }\n if (layer) {\n var map = this.getMap();\n map.addLayer(layer);\n }\n }\n } catch (e) {\n error = e;\n }\n\n /**\n * event triggered when an element of the results is clicked for search service\n *\n * @event searchengine:search:click\n * @property {Object} type - event\n * @property {Object} suggest - suggest\n * @property {Object} error - error\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:search:click\", function (e) {\n * console.log(e.suggest);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:search:click\",\n suggest : suggest,\n error : error\n });\n }\n\n // ################################################################### //\n // ################### handlers events Geocode ####################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'submit' on 'GPsearchInput' tag form\n * (cf. this._createSearchInputElement), and it gets the value of input.\n * this value is passed as a parameter for the service geocoding.\n * the results of the request are displayed into a window.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onGeocodingSearchSubmit (e) {\n var value = e.target[0].value;\n if (!value) {\n return;\n }\n\n // on sauvegarde le localisant\n this._currentGeocodingLocation = value;\n\n // on met en place l'affichage des resultats dans une fenetre de recherche.\n var context = this;\n this._requestGeocoding({\n query : value,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(\"request from Geocoding\", results);\n if (results) {\n var locations = results.locations;\n context._fillGeocodedLocationListContainer(locations);\n }\n },\n // callback onFailure\n onFailure : function (error) {\n // FIXME cf. this.onAutoCompleteSearch()\n context._clearGeocodedLocation();\n logger.log(error.message);\n }\n });\n }\n\n /**\n * this method is called by event 'submit' on 'GPgeocodeResultsList' tag div\n * (cf. this._createGeocodeResultsListElement), and it selects the location.\n * this location displays a marker on the map.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onGeocodedResultsItemClick (e) {\n var idx = SelectorID.index(e.target.id);\n\n if (!idx) {\n return;\n }\n\n var position = [\n this._geocodedLocations[idx].position.lon,\n this._geocodedLocations[idx].position.lat\n ];\n var info = {\n service : \"GeocodedLocation\",\n location : this._geocodedLocations[idx]\n };\n\n // on ajoute le texte du géocodage dans l'input\n var label = GeocodeUtils.getGeocodedLocationFreeform(this._geocodedLocations[idx]);\n this._setLabel(label);\n\n // Info : la position est en EPSG:4326, à transformer dans la projection de la carte\n var view = this.getMap().getView();\n var mapProj = view.getProjection().getCode();\n if (mapProj !== \"EPSG:4326\") {\n // on retransforme les coordonnées de la position dans la projection de la carte\n position = olProjTransform(position, \"EPSG:4326\", mapProj);\n }\n // on centre la vue et positionne le marker, à la position reprojetée dans la projection de la carte\n var zoom = this._getZoom(this.options.zoomTo);\n this._setPosition(position, zoom);\n if (this._displayMarker) {\n this._setMarker(position, info);\n }\n /**\n * event triggered when an element of the results is clicked for geocoding\n *\n * @event searchengine:geocode:click\n * @property {Object} type - event\n * @property {Object} location - location\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:geocode:click\", function (e) {\n * console.log(e.location);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:geocode:click\",\n location : this._geocodedLocations[idx]\n });\n }\n\n // ################################################################### //\n // ############## handlers events Geocode Advanced ################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'change' on 'GPadvancedSearchCode' tag select\n * (cf. this._createAdvancedSearchFormCodeElement), and it gets the value of\n * option selected.\n * this value is passed as a parameter to create the attributs container.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onGeocodingAdvancedSearchCodeChange (e) {\n logger.log(e);\n var idx = e.target.selectedIndex;\n var value = e.target.options[idx].value;\n\n if (!value) {\n return;\n }\n\n // INFORMATION\n // le declenchement de l'evenement va creer un container de filtre à la volée...\n // l'insertion des containers d'attributs dans le DOM sont :\n // - soit GPadvancedSearchFilters > PositionOfInterest\n // - soit GPadvancedSearchFilters > StreetAddress\n // - soit GPadvancedSearchFilters > CadastralParcel\n // cf. _setFilter() pour la creation du container\n\n this._setFilter(value);\n }\n\n /**\n * this method is called by event 'submit' on 'GPadvancedSearchForm' tag form\n * (cf. this._createAdvancedSearchPanelFormElement), and it gets the value of all input.\n * this value is passed as a parameter for the service geocoding.\n * the results of the request are displayed into a window.\n *\n * @param {Object} e - HTMLElement\n * @param {Array} data - [{key: ..., value: ...}]\n * @private\n */\n onGeocodingAdvancedSearchSubmit (e, data) {\n logger.log(data);\n if (!data || data.length === 0) {\n return;\n }\n\n var _location;\n var _filterOptions = {};\n\n for (var i = 0; i < data.length; i++) {\n var filter = data[i];\n if (filter.value) {\n if (filter.key === \"section\") {\n filter.value = filter.value.toUpperCase();\n }\n _filterOptions[filter.key] = filter.value;\n }\n }\n\n var inputSearchTextContainer = document.getElementById(\"GPsearchInputText-\" + this._uid);\n _location = inputSearchTextContainer.value;\n\n // On ne prend pas en compte ce qu'il y a dans l'input de recherche simple pour la recherche avance de PC\n if (this._currentGeocodingCode === \"CadastralParcel\") {\n _location = \"\";\n }\n\n // on met en place l'affichage des resultats dans une fenetre de recherche.\n var context = this;\n this._requestGeocoding({\n query : _location,\n index : this._currentGeocodingCode,\n filters : _filterOptions,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(results);\n if (results) {\n var locations = results.locations;\n context._fillGeocodedLocationListContainer(locations);\n }\n },\n // callback onFailure\n onFailure : function (error) {\n // FIXME cf. this.onAutoCompleteSearch()\n context._clearGeocodedLocation();\n logger.log(error.message);\n }\n });\n }\n\n /**\n * this method is called by 'onGeocodingAdvancedSearchSubmit' method,\n * in case geocoding type is 'CadastralParcel',\n * and gets request parameters from inputs\n *\n * @param {Object} filterOptions - object with inputs value (department, insee, ...)\n * @returns {String} location - cadastral parcel number : concatenation of inputs values (e.g. : 940670000D0041 or 94067_____0041)\n * @private\n */\n _getCadastralParcelRequestParams (filterOptions) {\n /* info:\n la parcelle cadastrale se compose de 14 chiffres ou lettres, indiquant, de gauche à droite :\n - le code du département (2 caractères)\n - le code commune (3 caractères). (Remarque : code département + code commune = code INSEE)\n - OU le code INSEE de la commune (5 chiffres) (remplace les 2 précédents)\n - le code commune absorbée INSEE, ou '000' (3 caractères),\n - la section (2 caractères),\n - le numéro de parcelle (4 caractères).\n Exemple de parcelle : '940670000D0041'. Si l'identifiant est incomplet (par exemple '940670000D'), le service renverra uniquement les 25 premiers résultats pouvant correspondre.\n */\n\n var _location = \"\";\n\n var l;\n // code département (2 caractères)\n var dep = filterOptions.department;\n if (dep) {\n l = dep.length;\n if (l === 2) {\n _location = dep;\n } else if (l === 1) {\n // si un seul numéro a été saisi, on présume que c'est un numéro < 10\n _location = \"0\" + dep;\n } else {\n _location = dep.substring(0, 2);\n }\n } else {\n _location = \"__\";\n }\n\n // code commune insee (3 caractères)\n var commune = filterOptions.commune;\n if (commune) {\n l = commune.length;\n if (l === 3) {\n _location += commune;\n } else if (l === 2) {\n _location += \"_\" + commune;\n } else if (l === 1) {\n _location += \"__\" + commune;\n } else { // l > 3\n _location += commune.substring(0, 3);\n }\n } else {\n _location += \"___\";\n }\n\n // code insee (5 caractères) : surcharge les 2 autres si renseigné\n var insee = filterOptions.insee;\n if (insee) {\n if (insee.length === 5) {\n _location = insee;\n }\n }\n\n // code commune absorbee INSEE (3 caractères)\n var absorbedCity = filterOptions.absorbedCity;\n if (absorbedCity) {\n l = absorbedCity.length;\n if (l === 3) {\n _location += absorbedCity;\n } else if (l < 3) {\n if (l === 2) {\n _location += \"_\" + absorbedCity;\n } else if (l === 1) {\n _location += \"__\" + absorbedCity;\n }\n } else { // l > 3\n _location += absorbedCity.substring(0, 3);\n }\n } else {\n _location += \"___\";\n }\n\n // section (2 caractères)\n var section = filterOptions.section;\n if (section) {\n l = section.length;\n if (l === 2) {\n _location += section;\n } else if (l === 1) {\n _location += \"_\" + section;\n } else {\n _location += section.substring(0, 2);\n }\n } else {\n _location += \"__\";\n }\n\n // numéro de parcelle (4 caractères)\n var number = filterOptions.number;\n if (number) {\n l = number.length;\n if (l === 4) {\n _location += number;\n } else if (l === 3) {\n _location += \"_\" + number;\n } else if (l === 2) {\n _location += \"__\" + number;\n } else if (l === 1) {\n _location += \"___\" + number;\n } else { // l > 4\n _location += number.substring(0, 4);\n }\n } else {\n _location += \"___\";\n }\n\n logger.log(\"location : \" + _location);\n\n return _location;\n }\n\n // ################################################################### //\n // ############### handlers events Coordinate Search ################# //\n // ################################################################### //\n\n /**\n * this method is called by event 'change' on ''\n * tag select (cf. this.),\n * and selects the system projection.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onCoordinateSearchSystemChange (e) {\n var idx = e.target.selectedIndex; // index\n var value = e.target.options[idx].value; // crs\n\n // on nettoie les coordonnées saisies\n this._coordinateSearchLngInput.value = \"\";\n this._coordinateSearchLatInput.value = \"\";\n\n // INFO\n // si on change de type de systeme, on doit aussi changer le type d'unités !\n var type = null;\n for (var i = 0; i < this._coordinateSearchSystems.length; ++i) {\n if (this._coordinateSearchSystems[i].code === Number(value)) {\n type = this._coordinateSearchSystems[i].type;\n break;\n }\n }\n\n if (!type) {\n logger.log(\"system not found in projection systems container\");\n return;\n }\n\n // on enregistre le systeme courant\n this._currentCoordinateSearchSystems = this._coordinateSearchSystems[Number(value)];\n\n if (type !== this._currentCoordinateSearchType) {\n // on met à jour les unités du menu deroulant : Geographique ou Métrique\n this._currentCoordinateSearchType = type;\n this._currentCoordinateSearchUnits = this._coordinateSearchUnits[type][0].code;\n this._containerUnits.appendChild(this._setCoordinateSearchUnitsSelectElement(this._coordinateSearchUnits[type]));\n // et on modifie la zone de saisie des coordonnées (label + input)\n this._updateCoordinateSearchElements();\n }\n }\n\n /**\n * this method is called by event 'change' on ''\n * tag select (cf. this.),\n * and selects the units projection.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onCoordinateSearchUnitsChange (e) {\n var idx = e.target.selectedIndex;\n var value = e.target.options[idx].value;\n\n // on nettoie les coordonnées saisies\n this._coordinateSearchLngInput.value = \"\";\n this._coordinateSearchLatInput.value = \"\";\n\n // et on modifie la zone de saisie des coordonnées (label + input)\n this._currentCoordinateSearchUnits = value;\n this._updateCoordinateSearchElements();\n }\n\n /**\n * this method is called by event 'click' on ''\n * tag select (cf. this.),\n * and clear app.\n *\n * @private\n */\n onCoordinateSearchClose () {\n this._setMarker();\n this._coordinateSearchLngInput.value = \"\";\n this._coordinateSearchLatInput.value = \"\";\n }\n\n _updateCoordinateSearchElements () {\n var lbl = this._setCoordinateSearchLngLabelElement(this._currentCoordinateSearchType);\n var input = this._coordinateSearchLngInput = this._setCoordinateSearchLngInputElement(this._currentCoordinateSearchUnits);\n this._containerCoordinateLng.appendChild(lbl);\n this._containerCoordinateLng.appendChild(input);\n lbl = this._setCoordinateSearchLatLabelElement(this._currentCoordinateSearchType);\n input = this._coordinateSearchLatInput = this._setCoordinateSearchLatInputElement(this._currentCoordinateSearchUnits);\n this._containerCoordinateLat.appendChild(lbl);\n this._containerCoordinateLat.appendChild(input);\n }\n\n // ################################################################### //\n // ############################## clean ############################## //\n // ################################################################### //\n\n /**\n * this method is called by this.onSearchReset()\n * and it clears all results and the marker.\n *\n * @private\n */\n _clearResults () {\n var map = this.getMap();\n\n this._currentGeocodingLocation = null;\n\n this._clearSuggestedLocation();\n this._clearGeocodedLocation();\n\n this._setMarker();\n // on retire l'overlay de la popup de la carte\n if (this._popupOverlay != null) {\n map.removeOverlay(this._popupOverlay);\n this._popupOverlay = null;\n }\n }\n\n /**\n * this method is called by this.onAutoCompleteSearchText()\n * and it clears all suggested location.\n *\n * @private\n */\n _clearSuggestedLocation () {\n this._suggestedLocations = [];\n if (this._containerResultsLocation) {\n while (this._containerResultsLocation.firstChild) {\n this._containerResultsLocation.removeChild(this._containerResultsLocation.firstChild);\n }\n }\n if (this.options.resources.search) {\n Search.clear();\n if (this._containerResultsSuggest) {\n while (this._containerResultsSuggest.firstChild) {\n this._containerResultsSuggest.removeChild(this._containerResultsSuggest.firstChild);\n }\n }\n }\n }\n\n /**\n * this method is called by this.onAutoCompleteSearchText()\n * and it clears suggested location from duplicate entries and improve unprecise fulltext entries.\n *\n * @param {Array} autocompleteResults - Array of autocompleteResults to display\n * @private\n */\n _prettifyAutocompleteResults (autocompleteResults) {\n for (var i = autocompleteResults.length - 1; i >= 0; i--) {\n var autocompleteResult = autocompleteResults[i];\n if ((autocompleteResult.type === \"StreetAddress\" && autocompleteResult.kind === \"municipality\") ||\n autocompleteResult.type === \"PositionOfInterest\" && autocompleteResult.poiType[0] === \"lieu-dit habité\" && autocompleteResult.poiType[1] === \"zone d'habitation\") {\n // on retire les éléments streetAdress - municipality car déjà pris en compte par POI\n autocompleteResults.splice(i, 1);\n }\n // on précise le type dans le fulltext au POI des types département et région\n if ((autocompleteResult.type === \"PositionOfInterest\" && autocompleteResult.poiType[0] === \"administratif\" &&\n (autocompleteResult.poiType[1] === \"département\" || autocompleteResult.poiType[1] === \"région\"))) {\n autocompleteResult.fullText = autocompleteResult.fullText + \", \" + autocompleteResult.poiType[1];\n }\n };\n }\n\n /**\n * this method is called to hide suggested locations\n *\n * @private\n */\n _hideSuggestedLocation () {\n if (this._autocompleteContainer) {\n this._autocompleteContainer.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n this._autocompleteContainer.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n }\n\n /**\n * this method is called to display suggested location.\n *\n * @private\n */\n _displaySuggestedLocation () {\n if (this._autocompleteContainer) {\n this._autocompleteContainer.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n this._autocompleteContainer.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n }\n }\n\n /**\n * this method is called by this.onGeocodingAdvancedSearchSubmit()\n * and it clears all geocoded location.\n *\n * @private\n */\n _clearGeocodedLocation () {\n this._geocodedLocations = [];\n if (this._geocodedContainer) {\n while (this._geocodedContainer.firstChild) {\n this._geocodedContainer.removeChild(this._geocodedContainer.firstChild);\n }\n }\n }\n\n};\n\n// on récupère les méthodes de la classe commune ReverseGeocoding\nObject.assign(SearchEngine.prototype, SearchEngineDOM);\nObject.assign(SearchEngine.prototype, Widget);\n\nexport default SearchEngine;\n\n// Expose SearchEngine as ol.control.SearchEngine (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.SearchEngine = SearchEngine;\n}\n","var MousePositionDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPmousePosition\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show mouse position control\n * @param {Boolean} isDesktop - specifies if the support is desktop or tactile\n *\n * @returns {DOMElement} DOM element\n */\n _createShowMousePositionPictoElement : function (isDesktop) {\n // contexte d'execution\n var self = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowMousePositionPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-position fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Afficher les coordonnées du curseur\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // Close all results and panels when minimizing the widget\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowMousePositionClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowMousePositionClick(e);\n });\n }\n\n return button;\n },\n\n /**\n * Create Container Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createMousePositionPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPmousePositionPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n return dialog;\n },\n\n _createMousePositionPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Map center localisation (tactile use)\n *\n * @returns {DOMElement} container\n */\n _createMapCenter : function () {\n var div = document.createElement(\"div\");\n div.id = \"GPmapCenter\";\n div.className = \"\";\n return div;\n },\n\n // ################################################################### //\n // ####################### Panel container ########################### //\n // ################################################################### //\n\n /**\n * @returns {DOMElement} container\n */\n\n /**\n * Create Header Title Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createMousePositionPanelTitleElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n div.id = this._addUID(\"GPmousePositionHeaderTitle\");\n div.innerHTML = \"Coordonnées\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createMousePositionPanelHeaderElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n // info: on sépare les appels pour la création du picto de retour,\n // du titre et de la croix de fermeture pour les récupérer dans le composant\n return container;\n },\n\n /**\n * Create Header close div\n *\n * @returns {DOMElement} DOM element\n */\n _createMousePositionPanelCloseElement : function () {\n // contexte\n var self = this;\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPmousePositionPanelClose\");\n divClose.className = \"GPpanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowMousePositionPicto\")).click();\n }, false);\n divClose.addEventListener(\"keydown\", function (event) {\n if (event.keyCode === 13) {\n document.getElementById(self._addUID(\"GPshowMousePositionPicto\")).click();\n }\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowMousePositionPicto\")).click();\n });\n divClose.attachEvent(\"onkeydown\", function (event) {\n if (event.keyCode === 13) {\n document.getElementById(self._addUID(\"GPshowMousePositionPicto\")).click();\n }\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n return divClose;\n },\n\n /**\n * coordinate panel\n * @param {Boolean} [displayAltitude] - specifies if the altitude panel must be displayed\n * @param {Boolean} [displayCoordinates] - specifies if the coordinates panel must be displayed\n * @param {Boolean} [editCoordinates] - specifies if the coordinates edition is allowed\n * @param {Boolean} [currentProjectionUnits] - specifies if the current projection units\n *\n * FIXME\n * call this._createMousePositionPanelBasicCoordinateElement\n * call this._createMousePositionPanelBasicAltitudeElement\n *\n * @returns {DOMElement} DOM element\n */\n _createMousePositionPanelBasicElement : function (displayAltitude, displayCoordinates, editCoordinates, currentProjectionUnits) {\n // default Values\n displayAltitude = (typeof displayAltitude === \"undefined\") ? true : displayAltitude;\n displayCoordinates = (typeof displayCoordinates === \"undefined\") ? true : displayCoordinates;\n editCoordinates = (typeof editCoordinates === \"undefined\") ? false : editCoordinates;\n\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPmousePositionBasicPanel\");\n container.classList.add(\"fr-mx-1w\");\n\n // FIXME on devrait decomposer la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n container.appendChild(this._createMousePositionPanelBasicCoordinateElement(displayCoordinates, editCoordinates, currentProjectionUnits));\n container.appendChild(this._createMousePositionPanelEditToolsElement(editCoordinates));\n container.appendChild(this._createMousePositionPanelBasicAltitudeElement(displayAltitude));\n\n return container;\n },\n\n /**\n * create coordinate elements\n *\n * @param {String} coordType - (\"Lon\" ou \"Lat\")\n * @param {Boolean} [editCoordinates=false] - specifies if the coordinates edition is allowed\n *\n * @returns {Array} list of DOM elements\n */\n _createCoordinateElement : function (coordType, editCoordinates) {\n var context = this;\n\n if ([\"Lon\", \"Lat\"].indexOf(coordType) === -1) {\n return [];\n }\n\n var list = [];\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPmousePosition\" + coordType);\n input.title = editCoordinates === true ? \"Cliquer pour saisir des coordonnées\" : \"\";\n input.readOnly = true;\n\n if (editCoordinates) {\n input.addEventListener(\"click\", function () {\n context.onMousePositionEditModeClick(true);\n });\n input.addEventListener(\"change\", function (e) {\n this.classList.remove(\"error\");\n var valid = context.validateExtentCoordinate(coordType, this.value, e);\n valid ? this.classList.remove(\"error\") : this.classList.add(\"error\");\n });\n }\n list.push(input);\n\n var span = document.createElement(\"span\");\n span.className = \"GPmousePositionUnits\";\n list.push(span);\n\n return list;\n },\n\n /**\n *\n * @param {String} coordType - (\"Lon\" ou \"Lat\")\n * @param {Boolean} [editCoordinates=false] - specifies if the coordinates edition is allowed\n *\n * @returns {Array} list of DOM elements\n */\n _createDMSCoordinateElement : function (coordType, editCoordinates) {\n if ([\"Lon\", \"Lat\"].indexOf(coordType) === -1) {\n return [];\n }\n\n var context = this;\n\n var list = [];\n\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPmousePosition\" + coordType + \"Degrees\");\n input.className = \"GPSexagesimal\";\n input.setAttribute(\"name\", \"degrees\");\n input.title = editCoordinates === true ? \"Cliquer pour saisir des coordonnées\" : \"\";\n input.readOnly = true;\n input.dataset.min = 0;\n input.dataset.max = (coordType === \"Lon\") ? 180 : 90;\n if (editCoordinates) {\n input.addEventListener(\"click\", function () {\n context.onMousePositionEditModeClick(true);\n });\n input.addEventListener(\"change\", function () {\n this.classList.remove(\"error\");\n var valid = context._checkDMSDegrees(coordType, this);\n valid ? this.classList.remove(\"error\") : this.classList.add(\"error\");\n });\n }\n list.push(input);\n\n var span = document.createElement(\"span\");\n span.className = \"GPmousePositionSexagesimalLabel\";\n span.innerHTML = \"°\";\n list.push(span);\n\n var input1 = document.createElement(\"input\");\n input1.id = this._addUID(\"GPmousePosition\" + coordType + \"Minutes\");\n input1.className = \"GPSexagesimal\";\n input1.setAttribute(\"name\", \"minutes\");\n input1.title = editCoordinates === true ? \"Cliquer pour saisir des coordonnées\" : \"\";\n input1.readOnly = true;\n input1.dataset.min = 0;\n input1.dataset.max = 59;\n if (editCoordinates) {\n input1.addEventListener(\"click\", function () {\n context.onMousePositionEditModeClick(true);\n });\n input1.addEventListener(\"change\", function () {\n this.classList.remove(\"error\");\n var valid = context._checkDMSElement(this);\n valid ? this.classList.remove(\"error\") : this.classList.add(\"error\");\n });\n }\n list.push(input1);\n\n var span1 = document.createElement(\"span\");\n span1.className = \"GPmousePositionSexagesimalLabel\";\n span1.innerHTML = \"'\";\n list.push(span1);\n\n var input2 = document.createElement(\"input\");\n input2.id = this._addUID(\"GPmousePosition\" + coordType + \"Seconds\");\n input2.className = \"GPSexagesimalsec\";\n input2.setAttribute(\"name\", \"seconds\");\n input2.title = editCoordinates === true ? \"Cliquer pour saisir des coordonnées\" : \"\";\n input2.readOnly = true;\n input2.dataset.min = 0;\n input2.dataset.max = 59;\n if (editCoordinates) {\n input2.addEventListener(\"click\", function () {\n context.onMousePositionEditModeClick(true);\n });\n input2.addEventListener(\"change\", function () {\n this.classList.remove(\"error\");\n var valid = context._checkDMSElement(this, true);\n valid ? this.classList.remove(\"error\") : this.classList.add(\"error\");\n });\n }\n list.push(input2);\n\n var span2 = document.createElement(\"span\");\n span2.className = \"GPmousePositionSexagesimalLabel\";\n span2.innerHTML = \"''\";\n list.push(span2);\n\n var select = document.createElement(\"select\");\n select.id = this._addUID(\"GPmousePosition\" + coordType + \"Direction\");\n select.className = \"GPmousePositionDirection\";\n select.setAttribute(\"name\", \"direction\");\n select.disabled = true;\n\n var option = document.createElement(\"option\");\n option.value = (coordType === \"Lon\") ? \"E\" : \"N\";\n option.innerHTML = (coordType === \"Lon\") ? \"E\" : \"N\";\n select.appendChild(option);\n\n var option1 = document.createElement(\"option\");\n option1.value = (coordType === \"Lon\") ? \"O\" : \"S\";\n option1.innerHTML = (coordType === \"Lon\") ? \"O\" : \"S\";\n select.appendChild(option1);\n list.push(select);\n\n return list;\n },\n\n /**\n * @param {Boolean} [display=false] - specifies if the coordinates panel must be displayed\n * @param {Boolean} [editCoordinates] - specifies if the coordinates edition is allowed\n * @param {Boolean} [currentProjectionUnits] - specifies if the current projection units\n *\n * @returns {DOMElement} container\n */\n _createMousePositionPanelBasicCoordinateElement : function (display, editCoordinates, currentProjectionUnits) {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPmousePositionCoordinate\");\n div.style.display = display ? \"block\" : \"none\";\n\n // latitude\n var divLat = document.createElement(\"div\");\n divLat.classList.add(\"fr-mb-1w\");\n\n var spanLat = document.createElement(\"span\");\n spanLat.className = \"GPmousePositionLabel\";\n spanLat.id = this._addUID(\"GPmousePositionLatLabel\");\n spanLat.innerHTML = \"Latitude : \";\n divLat.appendChild(spanLat);\n\n var span = document.createElement(\"span\");\n span.id = this._addUID(\"GPmousePositionLatCoordinate\");\n\n var arrayCoords;\n if (currentProjectionUnits === \"DMS\") {\n arrayCoords = this._createDMSCoordinateElement(\"Lat\", editCoordinates);\n } else {\n arrayCoords = this._createCoordinateElement(\"Lat\", editCoordinates);\n }\n for (var i = 0; i < arrayCoords.length; i++) {\n span.appendChild(arrayCoords[i]);\n }\n divLat.appendChild(span);\n div.appendChild(divLat);\n\n // longitude\n var divLon = document.createElement(\"div\");\n divLon.classList.add(\"fr-mb-1w\");\n\n var spanLon = document.createElement(\"span\");\n spanLon.className = \"GPmousePositionLabel\";\n spanLon.id = this._addUID(\"GPmousePositionLonLabel\");\n spanLon.innerHTML = \"Longitude : \";\n divLon.appendChild(spanLon);\n\n var span1 = document.createElement(\"span\");\n span1.id = this._addUID(\"GPmousePositionLonCoordinate\");\n\n var arrayCoords1;\n if (currentProjectionUnits === \"DMS\") {\n arrayCoords1 = this._createDMSCoordinateElement(\"Lon\", editCoordinates);\n } else {\n arrayCoords1 = this._createCoordinateElement(\"Lon\", editCoordinates);\n }\n for (var j = 0; j < arrayCoords1.length; j++) {\n span1.appendChild(arrayCoords1[j]);\n }\n divLon.appendChild(span1);\n div.appendChild(divLon);\n\n return div;\n },\n\n /**\n * @param {Boolean} [display=false] - specifies if the altitude panel must be displayed\n *\n * @returns {DOMElement} container\n */\n _createMousePositionPanelBasicAltitudeElement : function (display) {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPmousePositionAltitude\");\n div.classList.add(\"fr-mb-1w\");\n div.style.display = display ? \"block\" : \"none\";\n\n var spanLabel = document.createElement(\"span\");\n spanLabel.className = \"GPmousePositionLabel\";\n spanLabel.innerHTML = \"Altitude : \";\n div.appendChild(spanLabel);\n\n var spanAlt = document.createElement(\"span\");\n spanAlt.className = \"GPmousePositionCoords\";\n spanAlt.id = this._addUID(\"GPmousePositionAlt\");\n spanAlt.innerHTML = \"...\";\n div.appendChild(spanAlt);\n\n var spanUnits = document.createElement(\"span\");\n spanUnits.className = \"GPmousePositionAltitudeUnits\";\n spanUnits.innerHTML = \"m\";\n div.appendChild(spanUnits);\n\n return div;\n },\n\n /**\n * @param {Boolean} [editCoordinates=false] - specifies if the coordinates edition is allowed\n *\n * @returns {DOMElement} container\n */\n _createMousePositionPanelEditToolsElement : function (editCoordinates) {\n var context = this;\n\n var div = document.createElement(\"div\");\n div.className = \"GPmousePositionPanelEditTools\";\n div.id = this._addUID(\"GPmousePositionPanelEditTools\");\n if (!editCoordinates) {\n div.style.display = \"none\";\n }\n\n var span1 = document.createElement(\"span\");\n span1.className = \"GPmousePositionEditTool\";\n span1.id = this._addUID(\"GPmousePositionLocate\");\n span1.title = editCoordinates === true ? \"Cliquer pour saisir des coordonnées\" : \"\";\n if (editCoordinates) {\n span1.addEventListener(\"click\", function () {\n context.onMousePositionEditModeLocateClick();\n });\n }\n div.appendChild(span1);\n\n var span2 = document.createElement(\"span\");\n span2.className = \"GPmousePositionEditTool\";\n span2.id = this._addUID(\"GPmousePositionCloseEdit\");\n span2.title = \"Quitter la saisie des coordonnées\";\n span2.style.display = \"none\";\n if (editCoordinates) {\n span2.addEventListener(\"click\", function () {\n context.onMousePositionEditModeClick(false);\n });\n }\n div.appendChild(span2);\n\n return div;\n },\n\n // ################################################################### //\n // #################### Settings container ########################### //\n // ################################################################### //\n\n /**\n * @param {Boolean} [display=false] - specifies if the settings panel must be displayed\n *\n * @returns {DOMElement[]} array containing input and label elements\n */\n _createShowMousePositionSettingsElement : function (display) {\n // contexte d'execution\n var self = this;\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowMousePositionSettings\");\n\n button.className = \"GPelementHidden GPshowAdvancedToolPicto GPshowMoreOptionsImage GPshowMoreOptions GPshowMousePositionSettingsPicto gpf-hidden gpf-btn fr-btn--sm fr-btn--tertiary gpf-btn--tertiary fr-icon-arrow-down-fill\";\n button.title = \"Réglages\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", true);\n\n // Close all results and panels when minimizing the widget\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowMousePositionSettingsClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowMousePositionSettingsClick(e);\n });\n }\n\n return button;\n },\n\n /**\n * settings panel\n * @param {Boolean} [display=true] - specifies if the settings panel must be displayed\n *\n * FIXME\n * don't call this._createMousePositionSettingsSystemsElement\n * don't call this._createMousePositionSettingsUnitsElement\n *\n * @returns {DOMElement} DOM element\n */\n _createMousePositionSettingsElement : function (display) {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPmousePositionSettings\");\n container.style.display = (display === undefined || display) ? \"block\" : \"none\";\n container.classList.add(\"fr-m-1w\");\n\n var span = document.createElement(\"span\");\n span.className = \"GPmousePositionSettingsLabel\";\n span.innerHTML = \"Système de référence\";\n container.appendChild(span);\n\n return container;\n },\n\n /**\n * @param {Object[]} systems - list of systems\n *\n * @returns {DOMElement} DOM element select\n */\n _createMousePositionSettingsSystemsElement : function (systems) {\n // contexte d'execution\n var context = this;\n\n var selectSystem = document.createElement(\"select\");\n selectSystem.id = this._addUID(\"GPmousePositionProjectionSystem\");\n selectSystem.className = \"GPselect GPmousePositionSettingsSelect gpf-select fr-select fr-my-1w\";\n selectSystem.addEventListener(\"change\", function (e) {\n context.onMousePositionProjectionSystemChange(e);\n });\n selectSystem.addEventListener(\"mouseover\", function (e) {\n // FIXME mettre une condition si target === option\n if (e.target.nodeName !== \"OPTION\") {\n context.onMousePositionProjectionSystemMouseOver(e);\n }\n });\n\n selectSystem.title = \"Type de système\";\n\n for (var i = 0; i < systems.length; i++) {\n var obj = systems[i];\n var option = document.createElement(\"option\");\n option.value = obj.code;\n option.text = obj.label || i;\n // option.label = obj.label;\n selectSystem.appendChild(option);\n }\n\n return selectSystem;\n },\n\n /**\n * @param {Object[]} units - list of units\n *\n * @returns {DOMElement} DOM element select\n */\n _createMousePositionSettingsUnitsElement : function (units) {\n // contexte d'execution\n var context = this;\n\n var selectUnits = document.createElement(\"select\");\n selectUnits.id = this._addUID(\"GPmousePositionProjectionUnits\");\n selectUnits.className = \"GPselect GPmousePositionSettingsSelect gpf-select fr-select\";\n selectUnits.addEventListener(\"change\", function (e) {\n context.onMousePositionProjectionUnitsChange(e);\n });\n\n selectUnits.title = \"Unités du système\";\n\n for (var j = 0; j < units.length; j++) {\n var obj = units[j];\n var option = document.createElement(\"option\");\n option.value = (obj.code) ? obj.code : j;\n option.text = obj.label || j;\n // option.label = obj.label;\n selectUnits.appendChild(option);\n }\n\n return selectUnits;\n },\n\n /**\n * @param {String} [currentProjectionType=\"Metric\"] - \"Geographical\" or \"Metric\"\n */\n _resetLabelElements : function (currentProjectionType) {\n // Changement des labels dans le formulaire de saisie\n var spanLat = document.getElementById(this._addUID(\"GPmousePositionLatLabel\"));\n spanLat.innerHTML = currentProjectionType === \"Geographical\" ? \"Latitude :\" : \"X :\";\n\n var spanLon = document.getElementById(this._addUID(\"GPmousePositionLonLabel\"));\n spanLon.innerHTML = currentProjectionType === \"Geographical\" ? \"Longitude :\" : \"Y :\";\n },\n\n /**\n * @param {String} currentProjectionUnits - projection units\n */\n _resetUnitElements : function (currentProjectionUnits) {\n var value = \"\";\n if (currentProjectionUnits === \"M\" || currentProjectionUnits === \"KM\") {\n value = currentProjectionUnits.toLowerCase();\n }\n\n var elts = document.getElementsByClassName(\"GPmousePositionUnits\");\n for (var e = 0; e < elts.length; e++) {\n elts[e].innerHTML = value;\n }\n },\n\n /**\n * @param {Boolean} editCoordinates - edit coordinates option\n * @param {String} currentProjectionType - current projection type\n * @param {String} currentProjectionUnits - current projection unit\n */\n _resetCoordinateElements : function (editCoordinates, currentProjectionType, currentProjectionUnits) {\n // Suppression de tous les enfants de GPmousePositionLatCoordinate\n var latElt = document.getElementById(this._addUID(\"GPmousePositionLatCoordinate\"));\n while (latElt.firstChild) {\n latElt.removeChild(latElt.firstChild);\n }\n\n var arrayCoords;\n if (currentProjectionUnits === \"DMS\") {\n arrayCoords = this._createDMSCoordinateElement(\"Lat\", editCoordinates);\n } else {\n arrayCoords = this._createCoordinateElement(\"Lat\", editCoordinates);\n }\n for (var i = 0; i < arrayCoords.length; i++) {\n latElt.appendChild(arrayCoords[i]);\n }\n\n // Suppression de tous les enfants de GPmousePositionLonCoordinate\n var lonElt = document.getElementById(this._addUID(\"GPmousePositionLonCoordinate\"));\n while (lonElt.firstChild) {\n lonElt.removeChild(lonElt.firstChild);\n }\n\n var arrayCoords1;\n if (currentProjectionUnits === \"DMS\") {\n arrayCoords1 = this._createDMSCoordinateElement(\"Lon\", editCoordinates);\n } else {\n arrayCoords1 = this._createCoordinateElement(\"Lon\", editCoordinates);\n }\n for (var j = 0; j < arrayCoords1.length; j++) {\n lonElt.appendChild(arrayCoords1[j]);\n }\n\n // FIXME on simule un deplacement ?\n // this.onMapMove();\n },\n\n /**\n * Set/unset editing mode\n *\n * @param {Boolean} editing - active edit coordinates mode\n */\n _setEditMode : function (editing) {\n var locateElt = document.getElementById(this._addUID(\"GPmousePositionLocate\"));\n locateElt.title = editing ? \"Aller à la position ...\" : \"Cliquer pour saisir des coordonnées\";\n\n var closeEditElt = document.getElementById(this._addUID(\"GPmousePositionCloseEdit\"));\n closeEditElt.style.display = editing ? \"inline-block\" : \"none\";\n\n var selector = \"div[id^=\" + this._addUID(\"GPmousePositionCoordinate\") + \"]\";\n var inputs = document.querySelectorAll(selector + \" input\");\n for (var i = 0; i < inputs.length; i++) {\n inputs[i].readOnly = !editing;\n if (editing) {\n inputs[i].value = \"\";\n inputs[i].classList.remove(\"error\");\n }\n }\n var selects = document.querySelectorAll(selector + \" select\");\n for (var j = 0; j < selects.length; j++) {\n selects[j].disabled = !editing;\n }\n },\n\n /**\n *\n * @param {DOMElement} input - input element\n * @param {Boolean} isFloat - check for float value\n *\n * @returns {Boolean} true if input value is within bounds\n */\n _checkDMSElement : function (input, isFloat) {\n var b = isFloat !== undefined;\n\n var value = input.value;\n if (b) {\n value = value.replace(\",\", \".\");\n }\n if (isNaN(value)) {\n return false;\n }\n\n var v = parseFloat(value);\n if (!b && (v | 0) !== v) { // is it an integer\n return false;\n }\n\n var min = Number(input.dataset.min);\n var max = Number(input.dataset.max);\n return (v >= min && v <= max);\n },\n\n /**\n * @param {String} coordType - \"Lon\" or \"Lat\"\n * @param {DOMElement} input - input element\n *\n * @returns {Boolean} true if input value is within bounds\n */\n _checkDMSDegrees : function (coordType, input) {\n if (isNaN(input.value)) {\n return false;\n }\n\n var v = parseFloat(input.value);\n if ((v | 0) !== v) { // is it an integer\n return false;\n }\n\n var min = Number(input.dataset.min);\n var max = Number(input.dataset.max);\n if (v < min || v > max) {\n return false;\n }\n\n var inputMinutes = document.getElementById(this._addUID(\"GPmousePosition\" + coordType + \"Minutes\"));\n var inputSeconds = document.getElementById(this._addUID(\"GPmousePosition\" + coordType + \"Seconds\"));\n\n if (v >= max) {\n inputMinutes.dataset.max = 0;\n inputSeconds.dataset.max = 0;\n } else {\n inputMinutes.dataset.max = 59;\n inputSeconds.dataset.max = 59.9999;\n }\n\n return true;\n },\n\n // ################################################################### //\n // ####################### handlers Event ############################ //\n // ################################################################### //\n\n /**\n * Function displaying coordinates from cursor position (desktop)\n * or map center (tactile)\n * @param {Object} coordinate - coordinates\n */\n GPdisplayCoords : function (coordinate) {\n // Compute coords in case of cursor position (desktop)\n if (coordinate) {\n var labelLon = document.getElementById(this._addUID(\"GPmousePositionLonLabel\"));\n var labelLat = document.getElementById(this._addUID(\"GPmousePositionLatLabel\"));\n\n if (coordinate.x || coordinate.y) {\n labelLat.innerHTML = \"X : \";\n labelLon.innerHTML = \"Y : \";\n } else if (coordinate.e || coordinate.n) {\n labelLat.innerHTML = \"E : \";\n labelLon.innerHTML = \"N : \";\n } else {\n labelLat.innerHTML = \"Latitude : \";\n labelLon.innerHTML = \"Longitude : \";\n }\n\n if (typeof coordinate.lat === \"object\" && typeof coordinate.lng === \"object\") {\n var parts = {\n lng : \"Lon\",\n lat : \"Lat\"\n };\n var units = [\"Degrees\", \"Minutes\", \"Seconds\"];\n for (var p in parts) {\n for (var u = 0; u < units.length; ++u) {\n var selector = \"GPmousePosition\" + parts[p] + units[u];\n var elt = document.getElementById(this._addUID(selector));\n var key = units[u].charAt(0).toLowerCase();\n elt.value = coordinate[p][key];\n }\n }\n // directions\n document.getElementById(this._addUID(\"GPmousePositionLonDirection\")).value = coordinate.lng.direction;\n document.getElementById(this._addUID(\"GPmousePositionLatDirection\")).value = coordinate.lat.direction;\n } else {\n var elLat = document.getElementById(this._addUID(\"GPmousePositionLat\"));\n var elLon = document.getElementById(this._addUID(\"GPmousePositionLon\"));\n\n elLat.value = coordinate.x || coordinate.lat || coordinate.e || \"0\";\n elLon.value = coordinate.y || coordinate.lng || coordinate.lon || coordinate.n || \"0\";\n\n elLat.title = \"Latitude\";\n elLon.title = \"Longitude\";\n\n elLat.type = \"text\";\n elLon.type = \"text\";\n\n // les unites\n var unit = (coordinate.unit === undefined) ? \"\" : coordinate.unit;\n var elements = document.getElementsByClassName(\"GPmousePositionUnits\");\n for (var n = 0; n < elements.length; ++n) {\n elements[n].innerHTML = unit;\n }\n }\n }\n },\n\n /**\n * Function displaying altitude from cursor position (desktop)\n * or map center (tactile)\n * @param {Object} coordinate - coordinates\n * @param {Number} altitudeTimeoutDelay - when the mouse stop moving, delay before the altitude request is launched\n * @param {Number} noDataValue - the no data value\n * @param {Number} noDataValueTolerance - the no data value tolerance\n */\n GPdisplayElevation : function (coordinate, altitudeTimeoutDelay, noDataValue, noDataValueTolerance) {\n // contexte d'execution\n var self = this;\n\n // Latency for altitude request\n var altitudeTimeout;\n if (!altitudeTimeoutDelay) {\n altitudeTimeoutDelay = 500;\n }\n\n clearTimeout(altitudeTimeout);\n document.getElementById(this._addUID(\"GPmousePositionAlt\")).innerHTML = \"...\";\n\n if (noDataValue == null) {\n noDataValue = -99999;\n }\n if (noDataValueTolerance == null) {\n noDataValueTolerance = 99980;\n }\n var maxThreshold = noDataValue + noDataValueTolerance;\n var minThreshold = noDataValue - noDataValueTolerance;\n\n // Compute coords in case of cursor position (desktop)\n if (coordinate) {\n // If no altitude panel, don't call altitude request\n if (document.getElementById(this._addUID(\"GPmousePositionAltitude\"))) {\n altitudeTimeout = setTimeout(function () {\n self.onRequestAltitude(coordinate, function (z) {\n if (minThreshold < z && z < maxThreshold) {\n self.GPresetElevation();\n } else {\n document.getElementById(self._addUID(\"GPmousePositionAlt\")).innerHTML = z;\n }\n });\n }, altitudeTimeoutDelay);\n }\n }\n },\n\n /**\n * Function reseting altitude value\n */\n GPresetElevation : function () {\n if (document.getElementById(this._addUID(\"GPmousePositionAltitude\"))) {\n document.getElementById(this._addUID(\"GPmousePositionAlt\")).innerHTML = \"---\";\n }\n }\n};\n\nexport default MousePositionDOM;\n","// import CSS\nimport \"../../CSS/Controls/MousePosition/GPFmousePosition.css\";\n// import \"../../CSS/Controls/MousePosition/GPFmousePositionStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport Overlay from \"ol/Overlay\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\nimport {\n transform as olTransformProj,\n get as olGetProj,\n transformExtent as olTransformExtentProj\n} from \"ol/proj\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Utils from \"../../Utils/Helper\";\nimport Interactions from \"../Utils/Interactions\";\nimport Markers from \"../Utils/Markers\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport MathUtils from \"../../Utils/MathUtils\";\nimport Draggable from \"../../Utils/Draggable\";\n// import defs proj4 manually (cf. line 125)\n// import Proj4 from \"proj4\";\n// import { register } from \"ol/proj/proj4\";\n// import Register from \"../../Utils/Register\";\n// import local with ol dependencies\nimport CRS from \"../../CRS/CRS\";\n// import \"../CRS/AutoLoadCRS\";\n\n// DOM\nimport MousePositionDOM from \"./MousePositionDOM\";\n\nvar logger = Logger.getLogger(\"GeoportalMousePosition\");\n\n/**\n * @classdesc\n * MousePosition Control.\n *\n * @constructor\n * @alias ol.control.GeoportalMousePosition\n * @type {ol.control.GeoportalMousePosition}\n * @extends {ol.control.Control}\n * @param {Object} options - options for function call.\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {String} [options.apiKey] - API key. The key \"calcul\" is used by default.\n * @param {Boolean} [options.ssl = true] - use of ssl or not (default true, service requested using https protocol)\n * @param {Boolean} [options.draggable = false] - Specify if widget is draggable\n * @param {Boolean} [options.collapsed = true] - Specify if MousePosition control should be collapsed at startup. Default is true.\n * @param {Array} [options.units] - list of coordinates units, to be displayed in control units list.\n * Values may be \"DEC\" (decimal degrees), \"DMS\" (sexagecimal), \"RAD\" (radians) and \"GON\" (grades) for geographical coordinates,\n * and \"M\" or \"KM\" for metric coordinates\n * @param {Boolean} [options.displayAltitude = true] - activate (true) or deactivate (false) the altitude panel. True by default\n * @param {Boolean} [options.displayCoordinates = true] - activate (true) or deactivate (false) the coordinates panel. True by default\n * @param {Boolean} [options.editCoordinates = false] - If true, coordinates from the MousePosition control can be edited by users to re-center the view. False by default.\n * @param {Function} [options.mapCenterCallback] - callback...\n * @param {Array} [options.systems] - list of projection systems, default are Geographical (\"EPSG:4326\"), Web Mercator (\"EPSG:3857\"), Lambert 93 (\"EPSG:2154\") and extended Lambert 2 (\"EPSG:27572\").\n * Each array element (=system) is an object with following properties :\n * @param {String} options.systems.crs - Proj4 crs alias (from proj4 defs). e.g. : \"EPSG:4326\". Required\n * @param {String} [options.systems.label] - CRS label to be displayed in control. Default is crs code (e.g. \"EPSG:4326\")\n * @param {String} options.systems.type - CRS units type for coordinates conversion : \"Geographical\" or \"Metric\". Default: \"Metric\"\n * @param {Object} [options.systems.geoBBox] - Aera covered by the system (WGS84 coordinates).\n * @param {Number} options.systems.geoBBox.right - Right bound.\n * @param {Number} options.systems.geoBBox.left - Left bound.\n * @param {Number} options.systems.geoBBox.top - Top bound.\n * @param {Number} options.systems.geoBBox.bottom - Bottom bound.\n * @param {Object} [options.positionMarker] - options for position marker\n * @param {String} options.positionMarker.url - Marker url (define in src/Openlayers/Controls/Utils/Markers.js)\n * @param {Array} options.positionMarker.offset - Offsets in pixels used when positioning the marker towards targeted point.\n * The first element in the array is the horizontal offset. A positive value shifts the marker right.\n * The second element in the array is the vertical offset. A positive value shifts the marker down. [0,0] value positions the top-left corner of the marker image to the targeted point.\n * Default is offset associated to default marker image.\n * @param {Boolean} options.positionMarker.hide - if true, marker is not displayed, otherwise displayed (False by default.)\n * @param {Object} [options.altitude] - elevation configuration\n * @param {Object} [options.altitude.serviceOptions] - options of elevation service\n * @param {Number} [options.altitude.responseDelay] - latency for altitude request, 500 ms by default\n * @param {Number} [options.altitude.triggerDelay] - immobilisation time of movement on the map to trigger the elevation calculation, 200 ms by default\n * @param {Number} [options.altitude.noDataValue] - value used for altitude service no data (default is -99999). In this case, \"---m\" will be displayed instead of \"-99999m\"\n * @param {Number} [options.altitude.noDataValueTolerance] - tolerance for no data value :\n * values in [noDataValue + noDataValueTolerance ; noDataValue - noDataValueTolerance] interval will not be displayed, but \"---m\" will be displayed instead.\n * Default is 90000 (no data values = [-9999 ; -189999])\n * @example\n * var MousePosition = new ol.control.GeoportalMousePosition({\n * \"collapsed\" : false,\n * \"graggable\" : true,\n * \"displayCoordinates\" : true,\n * \"displayAltitude\" : true,\n * \"altitude\" : {\n * \"triggerDelay\" : 100,\n * \"responseDelay\" : 500,\n * \"noDataValue\" : -99999,\n * \"noDataValueTolerance\" : 99000,\n * \"serviceOptions\" : {}\n * },\n * \"systems\" : [\n * {\n * \"crs\" : \"EPSG:3857\",\n * \"label\" : \"Web Mercator\",\n * \"type\" : \"Metric\"\n * },\n * {\n * \"crs\" : \"EPSG:4326\",\n * \"label\" : \"Géographiques\",\n * \"type\" : \"Geographical\"\n * },\n * {\n * \"label\" : \"Lambert 93\",\n * \"crs\" : \"EPSG:2154\",\n * \"type\" : \"Metric\",\n * \"geoBBox\" : {\n * \"left\" : -9.86,\n * \"bottom\" : 41.15,\n * \"right\" : 10.38,\n * \"top\" : 51.56\n * }\n * }\n * ],\n * \"units\" : [\"DEC\", \"DMS\"]\n * });\n */\nvar MousePosition = class MousePosition extends Control {\n\n /**\n * See {@link ol.control.GeoportalMousePosition}\n * @module MousePosition\n * @alias module:~controls/MousePosition\n * @param {*} options - options\n * @example\n * import GeoportalMousePosition from \"gpf-ext-ol/controls/MousePosition\"\n * ou\n * import { GeoportalMousePosition } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof MousePosition)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"MousePosition\";\n // init Proj4 defs manually\n // Register.load(Proj4);\n // try {\n // register(Proj4);\n // } catch (e) {}\n\n this._initialize(options);\n\n // init control DOM container\n this.container = this._initContainer(this.options);\n\n // ajout du container\n (this.element) ? this.element.appendChild(this.container) : this.element = this.container;\n\n return this;\n };\n\n /**\n * Overload ol.control.Control setMap method, called when\n *\n * @param {Object} map - the map\n *\n */\n setMap (map) {\n var context = this;\n\n if (map) { // dans le cas de l'ajout du contrôle à la map\n var center = this._createMapCenter();\n map.getViewport().appendChild(center);\n if (!this.collapsed && !this._isDesktop) {\n center.className = \"GPmapCenterVisible\";\n }\n\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this._panelMousePositionContainer,\n this._panelHeaderContainer,\n map.getTargetElement()\n );\n }\n\n // on met en place l'evenement sur la carte pour recuperer les coordonnées,\n // on l'active à l'ouverture du panneau uniquement !\n if (!this.collapsed) {\n // evenement valable pour le mode desktop !\n if (this._isDesktop) {\n this.listenerKey = map.on(\n \"pointermove\",\n (e) => { this.onMouseMove(e); }\n );\n } else {\n this.listenerKey = map.on(\n \"moveend\",\n (e) => this.onMapMove(e)\n );\n }\n\n this._showMousePositionButton.setAttribute(\"aria-pressed\", true);\n }\n\n // add overlay only if option editCoordinates is true\n if (this.options.editCoordinates) {\n // création de l'élément DOM\n var markerDiv = document.createElement(\"img\");\n markerDiv.id = this._addUID(\"GPmousePositionMarker\");\n markerDiv.src = this._markerUrl;\n markerDiv.title = \"Cliquer pour supprimer\";\n markerDiv.addEventListener(\"click\", function () {\n context._markerOverlay.setPosition(undefined);\n });\n\n this._markerOverlay = new Overlay({\n offset : this._markerOffset,\n element : markerDiv,\n stopEvent : false\n });\n map.addOverlay(this._markerOverlay);\n }\n } else {\n olObservableUnByKey(this.listenerKey);\n }\n\n // call original setMap method\n super.setMap(map);\n\n // HACK: on arrête l'execution de la fonction...\n if (map === null) {\n return;\n }\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n\n // mode \"collapsed\"\n if (!this.collapsed) {\n var inputShow = document.getElementById(\"GPshowMousePosition-\" + this._uid);\n inputShow.checked = \"checked\";\n this._setElevationPanel(this.options.displayAltitude);\n this._setCoordinatesPanel(this.options.displayCoordinates);\n if (!this.options.displayCoordinates) {\n this._setSettingsPanel(false);\n }\n }\n }\n\n // ################################################################### //\n // #################### user interface methods ####################### //\n // ################################################################### //\n\n /**\n * Set additional projection system\n *\n * @param {Object} system - projection system\n * @param {String} system.crs - Proj4 crs alias (from proj4 defs) e.g. \"EPSG:4326\"\n * @param {String} [system.label] - CRS label to be displayed in control. Default is system.crs alias\n * @param {String} [system.type] - CRS units type for coordinates conversion (one of control options.units). Default is \"Metric\"\n */\n addSystem (system) {\n if (typeof system !== \"object\") {\n logger.log(\"[ERROR] MousePosition:addSystem - system parameter should be an object\");\n return;\n }\n if (!system.crs) {\n logger.error(\"crs not defined !\");\n return;\n }\n if (!system.label) {\n logger.warn(\"crs label not defined, use crs code by default.\");\n system.label = system.crs;\n }\n if (!system.type) {\n logger.warn(\"type srs not defined, use 'Metric' by default.\");\n system.type = \"Metric\";\n }\n\n // chargement de la definition de la projection\n // même si déjà chargé...\n CRS.loadByName(system.crs);\n\n if (!olGetProj(system.crs)) {\n logger.error(\"crs '{}' not available into proj4 definitions !\", system.crs);\n return;\n }\n\n // 1. add system to control systems\n for (var j = 0; j < this._projectionSystems.length; j++) {\n var obj = this._projectionSystems[j];\n if (system.crs === obj.crs) {\n // warn user\n logger.info(\"crs '{}' already configured\", obj.crs);\n }\n }\n system.code = this._projectionSystems.length;\n this._projectionSystems.push(system);\n\n // 2. add system settings option to container (if it was already build)\n var selectSystem = document.getElementById(\"GPmousePositionProjectionSystem-\" + this._uid);\n if (selectSystem) {\n var option = document.createElement(\"option\");\n option.value = system.code;\n option.text = system.label;\n selectSystem.appendChild(option);\n }\n }\n\n /**\n * Set additional projection systems\n *\n * @param {Array} systems - Array of system object, with following properties :\n * @param {String} systems.crs - Proj4 CRS alias (from proj4 defs) e.g. \"EPSG:4326\"\n * @param {String} systems.label - CRS label (for coordinates conversion)\n * @param {String} systems.type - CRS units type to be displayed in control (one of control options.units). Default is \"Metric\"\n */\n addSystems (systems) {\n if (!systems) {\n return;\n }\n if (!Array.isArray(systems)) {\n logger.log(\"[ERROR] MousePosition:addSystems - systems parameter should be an array\");\n return;\n }\n for (var i = 0; i < systems.length; i++) {\n this.addSystem(systems[i]);\n }\n }\n\n /**\n * Remove projection system (in case there are several system with same code, only the first one will be removed)\n *\n * @param {String} systemCrs - CRS alias (from proj4 defs)\n */\n removeSystem (systemCrs) {\n if (!systemCrs || typeof systemCrs !== \"string\") {\n logger.log(\"[ERROR] MousePosition:removeSystem - systemCode parameter should be a string\");\n return;\n }\n\n var systemList = document.getElementById(\"GPmousePositionProjectionSystem-\" + this._uid);\n\n var systemCode = null;\n // find system in control projection systems list\n for (var i = 0; i < this._projectionSystems.length; i++) {\n var proj = this._projectionSystems[i];\n if (systemCrs === proj.crs) {\n systemCode = proj.code;\n // remove system from control projection systems list\n this._projectionSystems.splice(i, 1);\n break;\n }\n }\n\n if (systemCode == null) {\n logger.log(\"[WARN] MousePosition:removeSystem - system not found\");\n return;\n }\n\n /* re-initialization of codes */\n var oldNewCodeMap = [];\n\n for (var j = 0; j < this._projectionSystems.length; j++) {\n oldNewCodeMap[Number(this._projectionSystems[j].code)] = j;\n this._projectionSystems[j].code = j;\n }\n\n /* find system in control container systems list */\n var indexChildToRemove = null;\n\n for (var k = 0; k < systemList.childNodes.length; k++) {\n if (systemCode === systemList.childNodes[j].value) {\n indexChildToRemove = k;\n continue;\n }\n systemList.childNodes[j].value = oldNewCodeMap[Number(systemList.childNodes[j].value)];\n }\n /* remove system from control container systems list */\n if (indexChildToRemove != null) {\n systemList.removeChild(systemList.childNodes[indexChildToRemove]);\n }\n\n // choose arbitrarily a new current system if needed\n if (this._currentProjectionSystems.code === Number(systemCode)) {\n systemList.childNodes[0].setAttribute(\"selected\", \"selected\");\n this._setCurrentSystem(systemList.childNodes[0].value);\n }\n }\n\n /**\n * Set control units (to be displayed)\n *\n * @param {Array} units - list of all coordinates units, to be displayed in control units list.\n * Values may be \"DEC\" (decimal degrees), \"DMS\" (sexagecimal), \"RAD\" (radians) and \"GON\" (grades) for geographical coordinates,\n * and \"M\" or \"KM\" for metric coordinates\n */\n setUnits (units) {\n if (!units || !Array.isArray(units)) {\n return;\n }\n this.options.units = units;\n this._projectionUnits = [];\n this._initProjectionUnits();\n if (this._currentProjectionType) {\n this._setTypeUnitsPanel(this._currentProjectionType);\n }\n }\n\n /**\n * Set control altitude options (useless if displayAltitude == false)\n *\n * @param {Object} options - altitude options\n * @param {Object} [options.serviceOptions] - options of elevation service\n * @param {Number} [options.responseDelay] - latency for elevation request, 500 ms by default\n * @param {Number} [options.triggerDelay] - immobilisation time of movement on the map to trigger the elevation calculation, 200 ms by default\n */\n setAltitudeOptions (options) {\n if (!options || typeof options !== \"object\") {\n return;\n }\n this.options.altitude.triggerDelay = options.triggerDelay;\n this.options.altitude.responseDelay = options.responseDelay;\n if (options.serviceOptions) {\n for (var opt in options.serviceOptions) {\n if (options.serviceOptions.hasOwnProperty(opt)) {\n this.options.altitude.serviceOptions[opt] = options.serviceOptions[opt];\n }\n }\n }\n }\n\n /**\n * Display or hide elevation panel\n *\n * @param {Boolean} displayAltitude - true to display elevation panel, false to hide it\n */\n displayAltitude (displayAltitude) {\n if (displayAltitude === undefined) {\n return;\n }\n\n this.options.displayAltitude = displayAltitude;\n this._setElevationPanel(displayAltitude);\n }\n\n /**\n * Display or hide coordinates panel\n *\n * @param {Boolean} displayCoordinates - true to display coordinates panel, false to hide it\n */\n displayCoordinates (displayCoordinates) {\n if (displayCoordinates === undefined) {\n return;\n }\n this.options.displayCoordinates = displayCoordinates;\n this._setCoordinatesPanel(displayCoordinates);\n this._setSettingsPanel(displayCoordinates);\n }\n\n /**\n * Collapse or display control main container\n *\n * @param {Boolean} collapsed - True to collapse control, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.log(\"[ERROR] MousePosition:setCollapsed - missing collapsed parameter\");\n return;\n }\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n if (!this._isDesktop) {\n document.getElementById(\"GPmapCenter\").className = collapsed ? \"\" : \"GPmapCenterVisible\";\n }\n // on simule l'ouverture du panneau après un click\n this.onShowMousePositionClick();\n this._showMousePositionContainer.checked = !collapsed;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n // ################################################################### //\n // ######################## initialize control ####################### //\n // ################################################################### //\n\n /**\n * Initialize control (called by MousePosition constructor)\n *\n * @param {Object} options - control options (set by user)\n * @private\n */\n _initialize (options) {\n // Set default options\n options = options || {};\n // {Object} control options - set by user or by default\n this.options = options;\n this.options.collapsed = (options.collapsed !== undefined) ? options.collapsed : true;\n /** {Boolean} specify if MousePosition control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n this.options.draggable = (options.draggable !== undefined) ? options.draggable : false;\n /** {Boolean} specify if MousePosition control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n // position marker\n this._markerOverlay = null;\n this._markerUrl = null;\n this._markerOffset = [0, 0];\n this._hideMarker = false;\n this._initMarker(options.positionMarker);\n\n this.options.units = options.units || [];\n this.options.displayAltitude = (options.displayAltitude !== undefined) ? options.displayAltitude : true;\n this.options.displayCoordinates = (options.displayCoordinates !== undefined) ? options.displayCoordinates : true;\n if (this.options.displayCoordinates) {\n this.options.editCoordinates = (options.editCoordinates !== undefined) ? options.editCoordinates : false;\n } else {\n // si les coordonnées ne sont pas affichées : pas besoin de les éditer...\n this.options.editCoordinates = false;\n }\n this.editing = false;\n\n this.options.systems = options.systems || [];\n if (options.altitude) {\n var altitude = options.altitude;\n this.options.altitude = {\n triggerDelay : (altitude.triggerDelay !== undefined) ? altitude.triggerDelay : 200,\n responseDelay : (altitude.responseDelay !== undefined) ? altitude.responseDelay : 500,\n serviceOptions : altitude.serviceOptions || {},\n noDataValue : (altitude.noDataValue !== undefined) ? altitude.noDataValue : -99999,\n noDataValueTolerance : (altitude.noDataValueTolerance !== undefined) ? altitude.noDataValueTolerance : 90000\n };\n } else {\n this.options.altitude = {\n triggerDelay : 200,\n responseDelay : 500,\n serviceOptions : {}\n };\n }\n\n // identifiant du contrôle : utile pour suffixer les identifiants CSS (pour gérer le cas où il y en a plusieurs dans la même page)\n this._uid = this.options.id || SelectorID.generate();\n\n // initialisation des systemes de projections\n this._projectionSystems = [];\n this._initProjectionSystems();\n\n // initialisation des systemes des unités\n this._projectionUnits = {};\n this._initProjectionUnits();\n\n // detection du support : desktop ou tactile\n this._isDesktop = Utils.detectSupport();\n\n // on met en place un seuil sur le timer\n if (this.options.altitude.triggerDelay < 100) {\n this.options.altitude.triggerDelay = 100;\n }\n\n // {Number} timer on movestopped delay (altitude calculation)\n this._timer = this.options.altitude.triggerDelay;\n\n // {Object} Selected projection system\n this._currentProjectionSystems = this._projectionSystems[0];\n\n // {String} Selected projection units typs : Geographical or metric\n this._currentProjectionType = this._projectionSystems[0].type;\n\n // {String} Selected projection unit\n this._currentProjectionUnits = this._projectionUnits[this._currentProjectionType][0].code;\n\n // {Object} Projection units container (DOM Element)\n this._projectionUnitsContainer = null;\n\n // {Object} control panel container (DOM Element)\n this._showMousePositionContainer = null;\n this._panelMousePositionContainer = null;\n this._panelHeaderMousePositionContainer = null;\n\n // gestion de l'affichage du panneau de l'altitude\n if (!this.options.displayAltitude && !this.options.displayCoordinates) {\n // on reactive l'affichage des coordonnées, pour ne pas afficher un panneau vide !\n this.options.displayCoordinates = true;\n }\n\n // listener key for event on pointermove or moveend map\n this.listenerKey = null;\n }\n\n /**\n *\n * @param {Object} option - positionMarker option\n * @private\n */\n _initMarker (option) {\n if (!this.options.editCoordinates) {\n return;\n }\n\n if (!option) {\n this._markerUrl = Markers[\"lightOrange\"];\n this._markerOffset = Markers.defaultOffset;\n return;\n }\n\n // hide\n this._hideMarker = (option.hide !== undefined) ? option.hide : false;\n\n // offset\n if (option.offset) {\n if (Array.isArray(option.offset) && option.offset.length === 2) {\n this._markerOffset = option.offset;\n } else {\n logger.log(\"positionMarker.offset should be an array. e.g. : [0,0]\");\n this._markerOffset = Markers.defaultOffset;\n }\n } else {\n this._markerOffset = Markers.defaultOffset;\n }\n\n var url = option.url;\n if (!url) {\n this._markerUrl = Markers[\"lightOrange\"];\n } else if (url.match(/^[a-zA-Z]+$/)) { // un seul mot\n this._markerUrl = (Markers[url] !== undefined) ? Markers[url] : Markers[\"lightOrange\"];\n } else {\n this._markerUrl = url;\n }\n }\n\n /**\n * this method is called by the constructor and initialize the projection\n * systems.\n * getting coordinates in the requested projection :\n * see this.onMousePositionProjectionSystemChange()\n *\n * @private\n */\n _initProjectionSystems () {\n // on donne la possibilité à l'utilisateur de modifier\n // la liste des systèmes à afficher\n // Ex. this.options.systems\n\n // FIXME doit on charger des projections par defaut dans ce composant ?\n // chargement des projections par defaut\n // CRS.loadByDefault();\n // CRS.overload();\n\n // systemes de projection disponible par defaut\n var projectionSystemsByDefault = [{\n label : \"G\\u00e9ographique\",\n crs : olGetProj(\"EPSG:4326\").getCode(),\n type : \"Geographical\"\n }, {\n label : \"Web Mercator\",\n crs : olGetProj(\"EPSG:3857\").getCode(),\n type : \"Metric\"\n }, {\n label : \"Lambert 93\",\n crs : olGetProj(\"EPSG:2154\").getCode(),\n type : \"Metric\",\n geoBBox : {\n left : -9.86,\n bottom : 41.15,\n right : 10.38,\n top : 51.56\n }\n }, {\n label : \"Lambert II \\u00e9tendu\",\n crs : olGetProj(\"EPSG:27572\").getCode(),\n type : \"Metric\",\n geoBBox : {\n left : -4.87,\n bottom : 42.33,\n right : 8.23,\n top : 51.14\n }\n }];\n\n var systems = this.options.systems;\n for (var i = 0; i < systems.length; i++) {\n /* definition d'un systeme de reference */\n var sys = systems[i];\n this.addSystem(sys);\n }\n\n if (this._projectionSystems.length === 0) {\n // on ajoute les systèmes de projections par défaut\n for (var j = 0; j < projectionSystemsByDefault.length; j++) {\n this.addSystem(projectionSystemsByDefault[j]);\n }\n }\n }\n\n /**\n * this method is called by the constructor and initialize the units.\n * getting coordinates in the requested units :\n * see this.onMousePositionProjectionUnitsChange()\n *\n * @private\n */\n _initProjectionUnits () {\n // on donne la possibilité à l'utilisateur de modifier\n // la liste des unités à afficher\n // Ex.\n // this.options.units : [\"DEC\", \"DMS\"]\n\n // unités disponible par defaut\n var projectionUnitsByDefault = {\n Geographical : [{\n code : \"DEC\",\n label : \"Degrés décimaux\",\n format : MathUtils.coordinateToDecimal\n }, {\n code : \"DMS\",\n label : \"Degrés sexagésimaux\",\n format : MathUtils.coordinateToDMS\n }, {\n code : \"RAD\",\n label : \"Radians\",\n format : MathUtils.coordinateToRad\n }, {\n code : \"GON\",\n label : \"Grades\",\n format : MathUtils.coordinateToGon\n }],\n Metric : [{\n code : \"M\",\n label : \"Mètres\",\n format : MathUtils.coordinateToMeter\n }, {\n code : \"KM\",\n label : \"Kilomètres\",\n format : MathUtils.coordinateToKMeter\n }]\n };\n\n var units = this.options.units;\n\n for (var type in projectionUnitsByDefault) {\n if (projectionUnitsByDefault.hasOwnProperty(type)) {\n var found = false;\n for (var j = 0; j < projectionUnitsByDefault[type].length; j++) {\n var obj = projectionUnitsByDefault[type][j];\n for (var i = 0; i < units.length; i++) {\n var unit = units[i];\n if (obj.code === unit) {\n found = true;\n if (!this._projectionUnits[type]) {\n this._projectionUnits[type] = [];\n }\n this._projectionUnits[type].push(obj);\n }\n }\n }\n if (!found) {\n this._projectionUnits[type] = projectionUnitsByDefault[type];\n }\n }\n }\n\n // au cas où...\n if (typeof this._projectionUnits === \"object\" && Object.keys(this._projectionUnits).length === 0) {\n this._projectionUnits = projectionUnitsByDefault;\n }\n }\n\n /**\n * this method get label from the current projection units\n *\n * @returns {String} projection information\n *\n * @private\n */\n _getCurrentProjectionInformation () {\n var systemInfo = [\n this._currentProjectionSystems.label,\n \"en\"\n ];\n\n var units = this._projectionUnits[this._currentProjectionType];\n for (var u = 0; u < units.length; ++u) {\n if (units[u].code === this._currentProjectionUnits) {\n systemInfo.push(units[u].label);\n break;\n }\n }\n return systemInfo.join(\" \");\n }\n\n // ################################################################### //\n // ######################## methods handle dom ####################### //\n // ################################################################### //\n\n /**\n * Create control main container (called by MousePosition constructor)\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initContainer () {\n // creation du container principal\n var container = this._createMainContainerElement();\n\n // create ReverseGeocode picto\n var picto = this._showMousePositionButton = this._createShowMousePositionPictoElement();\n container.appendChild(picto);\n\n // panel\n var mousePositionPanel = this._panelMousePositionContainer = this._createMousePositionPanelElement();\n var mousePositionPanelDiv = this._createMousePositionPanelDivElement();\n mousePositionPanel.appendChild(mousePositionPanelDiv);\n\n // header\n var panelHeader = this._panelHeaderContainer = this._createMousePositionPanelHeaderElement();\n\n // panel title\n var panelTitle = this._panelTitleContainer = this._createMousePositionPanelTitleElement();\n panelHeader.appendChild(panelTitle);\n\n // close picto\n var closeDiv = this._panelCloseButton = this._createMousePositionPanelCloseElement();\n panelHeader.appendChild(closeDiv);\n mousePositionPanelDiv.appendChild(panelHeader);\n\n var basic = this._createMousePositionPanelBasicElement(\n this.options.displayAltitude,\n this.options.displayCoordinates,\n this.options.editCoordinates,\n this._currentProjectionUnits\n );\n mousePositionPanelDiv.appendChild(basic);\n\n var buttonSettings = this._createShowMousePositionSettingsElement(this.options.displayCoordinates);\n mousePositionPanelDiv.appendChild(buttonSettings);\n\n var settings = this._createMousePositionSettingsElement();\n var systems = this._projectionSystemsContainer = this._createMousePositionSettingsSystemsElement(this._projectionSystems);\n var units = this._projectionUnitsContainer = this._createMousePositionSettingsUnitsElement(this._projectionUnits[this._currentProjectionType]);\n settings.appendChild(systems);\n settings.appendChild(units);\n mousePositionPanelDiv.appendChild(settings);\n\n container.appendChild(mousePositionPanel);\n\n return container;\n }\n\n /**\n * this method is called by this.()\n * and it changes the elevation view panel into the dom.\n *\n * @param {Boolean} active - true:active, false:disable\n * @private\n */\n _setElevationPanel (active) {\n var div = null;\n\n if (!active) {\n div = document.getElementById(\"GPmousePositionAltitude-\" + this._uid);\n div.style.display = \"none\";\n } else {\n div = document.getElementById(\"GPmousePositionAltitude-\" + this._uid);\n div.style.display = \"\";\n }\n }\n\n /**\n * this method is called by this.()\n * and it changes the coordinate view panel into the dom.\n *\n * @param {Boolean} active - true:active, false:disable\n * @private\n */\n _setCoordinatesPanel (active) {\n var div = document.getElementById(\"GPmousePositionCoordinate-\" + this._uid);\n if (!active) {\n div.style.display = \"none\";\n } else {\n div.style.display = \"\";\n }\n }\n\n /**\n * this method is called by this.()\n * and it changes the settings view panel into the dom.\n *\n * @param {Boolean} active - true:active, false:disable\n * @private\n */\n _setSettingsPanel (active) {\n var divPicto = document.getElementById(\"GPshowMousePositionSettingsPicto-\" + this._uid);\n var divPanel = document.getElementById(\"GPmousePositionSettings-\" + this._uid);\n if (!active) {\n divPicto.style.display = \"none\";\n divPanel.style.display = \"none\";\n } else {\n divPicto.style.display = \"\";\n divPanel.style.display = \"\";\n }\n }\n\n /**\n * this method is called by this.onMousePositionProjectionSystemChange()\n * when changes to a metric or a geographical units.\n *\n * @param {String} type - Geographical or Metric\n * @private\n */\n _setTypeUnitsPanel (type) {\n var container = this._projectionUnitsContainer;\n\n // on supprime les enfants...\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n\n var units = this._projectionUnits[type];\n for (var j = 0; j < units.length; j++) {\n var obj = units[j];\n var option = document.createElement(\"option\");\n option.value = (obj.code) ? obj.code : j;\n option.text = obj.label || j;\n // option.label = obj.label;\n container.appendChild(option);\n }\n\n var projectionUnits = this._projectionUnits[type][0].code;\n\n if (this._currentProjectionUnits === \"DMS\" || projectionUnits === \"DMS\") {\n this._resetCoordinateElements(this.options.editCoordinates, type, projectionUnits);\n this._setEditMode(this.editing);\n }\n\n // le nouveau type de system ...\n this._currentProjectionType = type;\n\n // Mise a jour des elements labels et unites\n this._resetLabelElements(type);\n this._resetUnitElements(projectionUnits);\n\n // et comme on a changé de type de systeme,\n // il faut changer aussi d'unité !\n this._currentProjectionUnits = projectionUnits;\n }\n\n // ################################################################### //\n // ##################### handlers events to control ################## //\n // ################################################################### //\n\n /**\n * this sends the coordinates to the panel.\n * (cf. this.GPdisplayCoords() into the DOM functions)\n *\n * @param {Array} olCoordinate - ol.Coordinate object [lon, lat]\n * @param {Object} crs - coordinate CRS (ol.proj.Projection)\n * @private\n */\n _setCoordinate (olCoordinate, crs) {\n // structure\n // ol.Coordinate\n // [\n // 4 // lon\n // 48 // lat\n // ]\n\n // structure pour les coordonnées en fonctin du type demandé :\n // {x:, y:, unit:} ou {lng:, lat:} ou {lon:, lat:} ou {e:, n:, unit:}...\n var coordinate = {};\n // on projete le point dans le systeme demandé\n var oSrs = this._currentProjectionSystems.crs;\n if (!oSrs) {\n logger.log(\"ERROR : system crs not found\");\n return;\n }\n // on reprojette les coordonnées depuis leur CRS d'origine (CRS) vers le CRS demandé (oSrs)\n olCoordinate = olTransformProj(olCoordinate, crs, oSrs);\n\n // type de systeme : Geographical ou Metric\n var type = this._currentProjectionSystems.type;\n\n // on recherche la fonction de formatage dans l'unité demandée\n var format = null;\n var units = this._projectionUnits[type];\n for (var i = 0; i < units.length; i++) {\n if (units[i].code === this._currentProjectionUnits) {\n format = units[i].format;\n break;\n }\n }\n if (!format || typeof format !== \"function\") {\n logger.log(\"WARNING : coordinates format function not found\");\n return;\n } else {\n coordinate = format(olCoordinate);\n }\n\n if (!coordinate || Object.keys(coordinate).length === 0) {\n return;\n }\n\n this.GPdisplayCoords(coordinate);\n }\n\n /**\n * this sends the coordinates to the panel.\n * (cf. this.GPdisplayElevation() into the DOM functions)\n *\n * @param {Array} olCoordinate - ol.Coordinate object [lon, lat]\n * @private\n */\n _setElevation (olCoordinate) {\n // gestion du timer de la requete du service d'altitude\n var delay = this.options.altitude.responseDelay;\n var noDataValue = this.options.altitude.noDataValue;\n var noDataValueTolerance = this.options.altitude.noDataValueTolerance;\n this.GPdisplayElevation(olCoordinate, delay, noDataValue, noDataValueTolerance);\n }\n\n /**\n * this method is triggered when the mouse or the map is stopped.\n * (cf. onMouseMove and onMapMove)\n *\n * @param {Array} olCoordinate - ol.Coordinate object [lon, lat]\n * @param {Object} crs - coordinate CRS (ol.proj.Projection)\n * @private\n */\n onMoveStopped (olCoordinate, crs) {\n // reprojection en CRS:84 (EPSG:4326) pour le calcul alti\n var oLatLng = olTransformProj(olCoordinate, crs, \"EPSG:4326\");\n this._setElevation(oLatLng);\n }\n\n /**\n * this method is an handler event to control. The event is 'mousemove' on\n * the map. The handler sends the coordinates to the panel.\n * (cf. this.GPdisplayCoords() into the DOM functions)\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onMouseMove (e) {\n var self = this;\n\n // info: coordinate = [x, y]\n var coordinate = e.coordinate;\n if (!e.map || !e.map.getView()) {\n return;\n }\n var crs = e.map.getView().getProjection();\n\n this._setCoordinate(coordinate, crs);\n\n // calcul de l'altitude après un certain délai après l'arrêt du mouvement de la souris\n clearTimeout(this._timer);\n this._timer = setTimeout(function () {\n self.onMoveStopped(coordinate, crs);\n }, this.options.altitude.triggerDelay);\n }\n\n /**\n * this method is an handler event to control. The event is 'moveend' on\n * the map. The handler sends the coordinates to the panel.\n * (cf. this.GPdisplayCoords() into the DOM functions)\n *\n * @private\n */\n onMapMove () {\n var self = this;\n\n var map = this.getMap();\n if (!map || !map.getView()) {\n return;\n }\n var view = map.getView();\n var coordinate = view.getCenter();\n var crs = view.getProjection();\n\n this._setCoordinate(coordinate, crs);\n\n // calcul de l'altitude après un certain délai après l'arrêt du mouvement de la souris\n clearTimeout(this._timer);\n this._timer = setTimeout(function () {\n self.onMoveStopped(coordinate, crs);\n }, this.options.altitude.triggerDelay);\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by this.GPdisplayElevation() in the dom, and\n * it executes a request to the elevation service.\n *\n * @param {Object} coordinate - {lat:..., lng:...}\n * @param {Function} callback - callback\n * @private\n */\n onRequestAltitude (coordinate, callback) {\n // INFORMATION\n // on effectue la requête au service d'altitude...\n // on met en place des callbacks afin de recuperer les resultats ou\n // les messages d'erreurs du service.\n // le resultat est affiché dans une balise du dom.\n\n if (!coordinate || Object.keys(coordinate).length === 0) {\n return;\n }\n\n // si on ne veut pas de calcul d'altitude, on ne continue pas !\n if (!this.options.displayAltitude) {\n return;\n }\n\n // on recupere les options du service\n var options = this.options.altitude.serviceOptions || {};\n\n // gestion du protocole et du timeout\n // le timeout est indispensable sur le protocole JSONP.\n var _protocol = options.protocol || \"XHR\";\n var _timeout = options.timeOut || 0;\n if (_protocol === \"JSONP\" && _timeout === 0) {\n _timeout = 15000;\n }\n\n // format de sortie si spécifié\n var _outputFormat = options.outputFormat || \"json\";\n\n // ainsi que les coordonnées : si l'utilisateur explicite zonly false\n var _zonly = true;\n // cela permet d'activer l'option measures côté service d'alti (surchargée si zonly = true)\n var _zonly;\n if (options.zonly === false) {\n _zonly = options.zonly;\n } else {\n _zonly = true;\n }\n\n // récupération d'une réponse complète avec source et précision\n var _measures = options.measures || false;\n\n\n var _positions = [{\n lon : coordinate[0],\n lat : coordinate[1]\n }];\n\n // utilisation d'une ressource spécifique\n var _resource = options.resource;\n\n // et les callbacks\n var _scope = this;\n var _rawResponse = options.rawResponse || false;\n var _customOnSuccess = options.onSuccess || null;\n var _onSuccess = null;\n var _onFailure = null;\n\n if (!_rawResponse) {\n // dans le cas général\n // callback onSuccess\n _onSuccess = function (results) {\n if (results && Object.keys(results).length) {\n if (_customOnSuccess) {\n _customOnSuccess.call(this, results);\n }\n callback.call(this, results.elevations[0].z);\n }\n };\n } else {\n // callback onSuccess\n _onSuccess = function (results) {\n if (_customOnSuccess) {\n _customOnSuccess.call(this, results);\n }\n logger.log(\"alti service raw response : \", results);\n };\n }\n\n // callback onFailure\n _onFailure = function (error) {\n logger.log(\"[getAltitude] ERROR : \" + error.message);\n };\n\n // cas où la clef API n'est pas renseignée dans les options du service,\n // on utilise celle renseignée au niveau du controle ou la clé \"calcul\" par défaut.\n var _apiKey = options.apiKey || this.options.apiKey;\n\n // si l'utilisateur a spécifié le paramètre ssl au niveau du control, on s'en sert\n // true par défaut (https)\n if (typeof options.ssl !== \"boolean\") {\n if (typeof this.options.ssl === \"boolean\") {\n options.ssl = this.options.ssl;\n } else {\n options.ssl = true;\n }\n }\n var _ssl = options.ssl;\n\n Gp.Services.getAltitude({\n apiKey : _apiKey,\n protocol : _protocol,\n ssl : _ssl,\n timeOut : _timeout,\n scope : _scope,\n outputFormat : _outputFormat,\n rawResponse : _rawResponse,\n onSuccess : _onSuccess,\n onFailure : _onFailure,\n zonly : _zonly,\n measures : _measures,\n resource : _resource,\n positions : _positions\n });\n }\n\n /**\n * this method is called by event 'click' on 'GPshowMousePositionPicto' tag label\n * (cf. this._createShowMousePositionPictoElement),\n * and toggles event 'mousemove' on map.\n *\n * @param { event } e évènement associé au clic\n * @private\n */\n onShowMousePositionClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n // checked : true - panel close\n // checked : false - panel open\n var map = this.getMap();\n // on supprime toutes les interactions\n Interactions.unset(map);\n var opened = this._showMousePositionButton.ariaPressed;\n this.collapsed = !(opened === \"true\");\n // on génère nous même l'evenement OpenLayers de changement de propriété\n // (utiliser mousePosition.on(\"change:collapsed\", function(e) ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n\n // evenement declenché à l'ouverture/fermeture du panneau,\n // et en fonction du mode : desktop ou tactile !\n if (opened === \"false\") {\n olObservableUnByKey(this.listenerKey);\n } else if (!this.editing) {\n if (this._isDesktop) {\n this.listenerKey = map.on(\"pointermove\", (e) => { this.onMouseMove(e); });\n } else {\n this.listenerKey = map.on(\"moveend\", (e) => this.onMapMove(e));\n // on simule un deplacement en mode tactile\n this.onMapMove();\n }\n }\n\n // FIXME\n // on gère l'affichage des panneaux ici..., même si ce n'est pas l'endroit\n // adequate...\n this._setElevationPanel(this.options.displayAltitude);\n this._setCoordinatesPanel(this.options.displayCoordinates);\n if (!this.options.displayCoordinates) {\n this._setSettingsPanel(false);\n }\n }\n\n /**\n * this method is called by event 'click' on 'GPshowMousePositionPicto' tag label\n * (cf. this._createShowMousePositionPictoElement),\n * and toggles event 'mousemove' on map.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onShowMousePositionSettingsClick (e) {\n if (!this.draggable) {\n var opened = e.target.ariaPressed;\n if (opened === \"true\") {\n // somme stuff...\n }\n }\n }\n\n /**\n * this method is called by event 'click' on input coordinate\n *\n * @param {Boolean} editing - editing mode\n */\n onMousePositionEditModeClick (editing) {\n if (!this.options.editCoordinates) {\n return;\n }\n if (this.editing === editing) {\n return;\n }\n\n this.editing = editing;\n\n // Affichage des outils, input en ecriture\n this._setEditMode(this.editing);\n\n var map = this.getMap();\n if (this._isDesktop) {\n if (this.editing) { // Unlisten for 'pointermove' events\n // map.un(\"pointermove\", (e) => { this.onMouseMove(e); });\n olObservableUnByKey(this.listenerKey);\n } else { // Listen for 'pointermove' events\n this.listenerKey = map.on(\"pointermove\", (e) => { this.onMouseMove(e); });\n // on simule un deplacement\n this.onMapMove();\n }\n } else {\n if (this.editing) { // Unlisten for 'moveend' events\n // map.un(\"moveend\", (e) => this.onMapMove(e));\n olObservableUnByKey(this.listenerKey);\n } else { // Listen for moveend' events\n this.listenerKey = map.on(\"moveend\", (e) => this.onMapMove(e));\n // on simule un deplacement\n this.onMapMove();\n }\n }\n\n // clear _markerOverlay\n if (!this.editing && this._markerOverlay) {\n this._markerOverlay.setPosition(undefined);\n }\n }\n\n /**\n * Get coordinate from inputs and select in decimal degrees\n *\n * @param {String} coordType - \"Lon\" or \"Lat\"\n * @returns {undefined}\n * @private\n */\n getCoordinate (coordType) {\n var inputDegrees = document.getElementById(this._addUID(\"GPmousePosition\" + coordType + \"Degrees\"));\n var degrees = inputDegrees.value;\n if (!degrees) {\n return null;\n }\n\n degrees = degrees.replace(\",\", \".\");\n if (!MathUtils.isInteger(degrees)) {\n return null;\n }\n\n var result = MathUtils.toInteger(degrees);\n if (result < Number(inputDegrees.dataset.min) || result > Number(inputDegrees.dataset.max)) {\n return null;\n }\n\n var direction = document.getElementById(this._addUID(\"GPmousePosition\" + coordType + \"Direction\")).value;\n\n var inputMinutes = document.getElementById(this._addUID(\"GPmousePosition\" + coordType + \"Minutes\"));\n var minutes = inputMinutes.value;\n if (minutes) {\n minutes = minutes.replace(\",\", \".\");\n if (MathUtils.isInteger(minutes)) {\n var mins = MathUtils.toInteger(minutes);\n if (mins >= Number(inputMinutes.dataset.min) && mins <= Number(inputMinutes.dataset.max)) {\n result += (mins / 60);\n }\n }\n }\n\n var inputSeconds = document.getElementById(this._addUID(\"GPmousePosition\" + coordType + \"Seconds\"));\n var seconds = inputSeconds.value;\n if (seconds) {\n seconds = seconds.replace(\",\", \".\");\n var secs = MathUtils.toFloat(seconds);\n if (secs && secs >= Number(inputSeconds.dataset.min) && secs <= Number(inputSeconds.dataset.max)) {\n result += (secs / 3600);\n }\n }\n\n if (direction === \"O\" || direction === \"S\") {\n result = -result;\n }\n\n return result;\n }\n\n /**\n * locate DMS coordinates on map\n *\n * @private\n */\n locateDMSCoordinates () {\n var lonlat = [\n this.getCoordinate(\"Lon\"),\n this.getCoordinate(\"Lat\")\n ];\n\n if (lonlat[0] === null || lonlat[1] === null) {\n return;\n }\n\n var oSrs = this._currentProjectionSystems.crs;\n if (!oSrs) {\n logger.log(\"ERROR : system crs not found\");\n return;\n }\n\n var view = this.getMap().getView();\n\n var coordinate = olTransformProj(lonlat, oSrs, view.getProjection());\n view.setCenter(coordinate);\n\n if (this._markerOverlay && !this._hideMarker) {\n this._markerOverlay.setPosition(coordinate);\n }\n }\n\n /**\n * locate coordinates on map (not DMS)\n *\n * @private\n */\n locateCoordinates () {\n var lon = document.getElementById(this._addUID(\"GPmousePositionLon\")).value;\n\n lon = lon.replace(\",\", \".\");\n lon = MathUtils.toFloat(lon);\n if (lon === null) {\n return;\n }\n\n var lat = document.getElementById(this._addUID(\"GPmousePositionLat\")).value;\n lat = lat.replace(\",\", \".\");\n lat = MathUtils.toFloat(lat);\n if (lat === null) {\n return;\n }\n\n var oSrs = this._currentProjectionSystems.crs;\n if (!oSrs) {\n logger.log(\"ERROR : system crs not found\");\n return;\n }\n\n var xy;\n if (this._currentProjectionSystems.type === \"Geographical\") {\n xy = [this.convert(lon), this.convert(lat)];\n } else {\n xy = [this.convert(lat), this.convert(lon)];\n }\n var xyWGS84 = olTransformProj(xy, this._currentProjectionSystems.crs, \"EPSG:4326\");\n\n var geoBBox = this._currentProjectionSystems.geoBBox;\n if (geoBBox) { // check if coordinates are in the extent\n var extent = [geoBBox.left, geoBBox.bottom, geoBBox.right, geoBBox.top];\n if (xyWGS84[0] < extent[0] || xyWGS84[0] > extent[2]) {\n return;\n }\n if (xyWGS84[1] < extent[1] || xyWGS84[1] > extent[3]) {\n return;\n }\n }\n\n var view = this.getMap().getView();\n\n var coordinate = olTransformProj(xy, oSrs, view.getProjection());\n view.setCenter(coordinate);\n\n if (this._markerOverlay && !this._hideMarker) {\n this._markerOverlay.setPosition(coordinate);\n }\n }\n\n /**\n * locate coordinates on map\n *\n * @private\n */\n onMousePositionEditModeLocateClick () {\n if (!this.options.editCoordinates) {\n return;\n }\n if (!this.editing) {\n this.onMousePositionEditModeClick(true);\n return;\n }\n\n if (this._currentProjectionUnits === \"DMS\") {\n this.locateDMSCoordinates();\n } else {\n this.locateCoordinates();\n }\n\n // fonction\n var mapCenterFunction = this.options.mapCenterCallback;\n\n // execution...\n if (typeof mapCenterFunction === \"function\") {\n var view = this.getMap().getView();\n var center = view.getCenter();\n mapCenterFunction.call(this, center);\n }\n }\n\n /**\n * this method is called by event 'change' on 'GPmousePositionProjectionSystem'\n * tag select (cf. this._createMousePositionSettingsElement),\n * and selects the system projection.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onMousePositionProjectionSystemChange (e) {\n var idx = e.target.selectedIndex; // index\n var value = e.target.options[idx].value; // crs\n\n this._setCurrentSystem(value);\n }\n\n /**\n * this method selects the current system projection.\n *\n * @param {String} systemCode - inner code (rank in array _projectionSystems)\n * @private\n */\n _setCurrentSystem (systemCode) {\n // si on change de type de systeme, on doit aussi changer le type d'unités !\n var type = null;\n for (var i = 0; i < this._projectionSystems.length; ++i) {\n if (this._projectionSystems[i].code === Number(systemCode)) {\n type = this._projectionSystems[i].type;\n break;\n }\n }\n\n if (!type) {\n logger.log(\"system not found in projection systems container\");\n return;\n }\n\n // on enregistre le systeme courant\n this._currentProjectionSystems = this._projectionSystems[Number(systemCode)];\n\n if (type !== this._currentProjectionType) {\n this._setTypeUnitsPanel(type);\n }\n\n // on simule un deplacement en mode tactile pour mettre à jour les\n // resultats\n if (!this._isDesktop) {\n this.onMapMove();\n }\n }\n\n /**\n * this method is called by event 'mouseover' on 'GPmousePositionProjectionSystem'\n * tag select (cf. this._createMousePositionSettingsElement),\n * and selects the system projection.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onMousePositionProjectionSystemMouseOver (e) {\n logger.trace(e);\n\n // map infos\n var map = this.getMap();\n if (!map || !map.getView()) {\n return;\n }\n var view = map.getView();\n var crs = view.getProjection();\n var mapExtent = view.calculateExtent(map.getSize());\n\n // get extent in WGS84 coordinates\n mapExtent = olTransformExtentProj(mapExtent, crs, \"EPSG:4326\");\n\n /* clear select */\n var systemList = document.getElementById(this._addUID(\"GPmousePositionProjectionSystem\"));\n systemList.innerHTML = \"\";\n\n // add systems whose extent intersects the map extent\n for (var j = 0; j < this._projectionSystems.length; j++) {\n var proj = this._projectionSystems[j];\n var option = null;\n\n if (proj.geoBBox) {\n /* bboxes intersection test */\n if (mapExtent[0] > proj.geoBBox.right ||\n mapExtent[1] > proj.geoBBox.top ||\n mapExtent[2] < proj.geoBBox.left ||\n mapExtent[3] < proj.geoBBox.bottom\n ) {\n if (proj === this._currentProjectionSystems) {\n option = document.createElement(\"option\");\n option.value = proj.code;\n option.text = proj.label || j;\n option.setAttribute(\"selected\", \"selected\");\n option.setAttribute(\"disabled\", \"disabled\");\n\n systemList.appendChild(option);\n }\n continue; // do not intersect\n }\n }\n\n var optionElement = document.createElement(\"option\");\n optionElement.value = proj.code;\n optionElement.text = proj.label || j;\n\n if (proj === this._currentProjectionSystems) {\n optionElement.setAttribute(\"selected\", \"selected\");\n }\n systemList.appendChild(optionElement);\n }\n }\n\n /**\n * this method is called by event 'change' on 'GPmousePositionProjectionUnits'\n * tag select (cf. this._createMousePositionSettingsElement),\n * and selects the units projection.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onMousePositionProjectionUnitsChange (e) {\n var idx = e.target.selectedIndex;\n var value = e.target.options[idx].value;\n\n var oldProjectionUnits = this._currentProjectionUnits;\n this._currentProjectionUnits = value;\n\n // Mise a jour des elements lebels et unites\n this._resetLabelElements(this._currentProjectionType);\n this._resetUnitElements(this._currentProjectionUnits);\n\n // mise a jour des inputs pour les coordonnees\n if (oldProjectionUnits === \"DMS\" || this._currentProjectionUnits === \"DMS\") {\n this._resetCoordinateElements(this.options.editCoordinates, this._currentProjectionType, this._currentProjectionUnits);\n this._setEditMode(this.editing);\n }\n\n // on simule un deplacement en mode tactile pour mettre à jour les\n // resultats\n if (!this._isDesktop) {\n this.onMapMove();\n }\n }\n\n /**\n *\n * @param {Number} value - value to convert (km to meters, radians, grades to decimal degrees)\n * @returns {undefined}\n * @private\n */\n convert (value) {\n var result;\n if (this._currentProjectionUnits === \"M\" || this._currentProjectionUnits === \"DEC\") {\n result = value;\n } else if (this._currentProjectionUnits === \"KM\") {\n result = value * 1000;\n } else if (this._currentProjectionUnits === \"RAD\") {\n var rd = (180 / Math.PI).toFixed(20);\n result = (value * rd).toFixed(20);\n } else if (this._currentProjectionUnits === \"GON\") {\n var d = (9 / 10).toFixed(20);\n result = (value * d).toFixed(20);\n }\n\n return result;\n }\n\n /**\n * @param {String} coordType - \"Lon\" or \"Lat\"\n * @param {String} value - input value\n *\n * @returns {Boolean} value is within extent\n *\n * @private\n */\n validateExtentCoordinate (coordType, value) {\n if ([\"Lon\", \"Lat\"].indexOf(coordType) === -1) {\n return false;\n }\n\n var coord = value.replace(\",\", \".\");\n coord = MathUtils.toFloat(coord);\n if (coord === null) {\n return false;\n }\n\n // convert depending on _currentProjectionUnits\n coord = this.convert(coord);\n\n var geoBBox = this._currentProjectionSystems.geoBBox;\n if (geoBBox === undefined) {\n return true;\n }\n\n // convert to current projection system\n var extent = [geoBBox.left, geoBBox.bottom, geoBBox.right, geoBBox.top];\n extent = olTransformExtentProj(extent, \"EPSG:4326\", this._currentProjectionSystems.crs);\n\n // checking if value is in the right interval\n if (coordType === \"Lat\" && (coord < extent[0] || coord > extent[2])) {\n return false;\n }\n if (coordType === \"Lon\" && (coord < extent[1] || coord > extent[3])) {\n return false;\n }\n\n return true;\n }\n\n};\n\n// on récupère les méthodes de la classe commune MousePosition\nObject.assign(MousePosition.prototype, MousePositionDOM);\nObject.assign(MousePosition.prototype, Widget);\n\nexport default MousePosition;\n\n// Expose MousePosition as ol.control.MousePosition (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.GeoportalMousePosition = MousePosition;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.Collection;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.geom;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.events.condition;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.sphere;","var MarkersOther = {\n /**\n * portail icons used by drawing control with a good ratio !\n *\n * @example\n * image size : [32, 41]\n * scale : 32 / Math.min(size[0], size[1]) = 1\n */\n drawing_portail : [\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAClFBMVEUAAAD//////////////////////////////////////////////////////////fv/+fL//////////////////////////////////////////////////////////////////////////////////////v7//////fr/////+vL//////////////////Pj//////////////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7/////////////9+v/9ej/9+z/7tT/3q3/y3//v2D/uU//+O7/5L3/xW//piH/mQH/mAD//v7/79f/yXj/oxr/lwD/mQD//fv/58T/tkr/mQL//v3/58P/sTz/79b/tUf/x3X/mQP/5Lv/oRX/ng3/s0H/w2n/u1b/4rf/8Nr/9eb/7tX/pBv/x3P/8d7/3av/79j///7/zH//mgX/2qP//vz/9+3/wGH/qyz/6Mb/vFj/sj//7NH/wGL/rTP/6sr/+fH/yXf/oBP/37H/2aH/6sz/nw//oBT/0pD/+vT/9OX/uE7/pB3/y33/7ND//Pj/26b/mwj/nAn/sT7/w2r/zYL/8+P/ulT/mwb/5Lz/qCj/+/b/1JT/nQz/nQ3/9uj/w2j/mAH/9un/6sv/skH/lwH/3Kf/pB7/pR7/3Kj/nAj/y37/+/f/8t//mQT/rDD/rDH/1JX/7tb/4LT/pR//z4j/z4n/vFn/7dP/4rn//fq31ydlAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKnVAysoAAAMmSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oBAMCvLzcnOSJcTFGGHyklJFxSWlZYWF5WBQWFhWWlJcJCUJUcEoLSNbUVlVDZWFqqmuqqyQlZEGqZCTV6iprStDkQeqKKurrVGQlwMawMWTXN+ALg9S0VCfzMPFyCAorpjW2ASzvQwIYOymxjRFcUEGLqWa5pZCqONa27Ky2lqhji1saa5R4mJQVklpL4M6rKOzq7u7q7MD6uCy9hQVZQZVtZ5eML+woK+/KBkIivr7CiAivT1qqgzqGhPA3MKy7ImTksFg0sRssEMKCyZoqDNoak2GKJ8ydVoyFEybOgUiNllLk0F7+gwwp2zmrGQ4mDUT7KzCGdO1GZJTZkMUzJmLUDB3DkTB7JRkBp3p8yAK5i9AKFgwH6Jg3nQdBt2FiyD2LV5SBJMvWrIYIrZooS6Dnv5SCKesPQ2mIK0dEpyFS/X1GAwMly2H8FasXAWRX7VyBURk+TJDAwYj49VroAG3dt16oC1F69ethQbtmtXGRgwmphs2boKq2Lxl67ZtW7dshspv2rjB1ITBzFxn+44yeGTu3AmPzrId23XMzRg4LSwrdu2GJQdQkoQxd++qsLTgZGC0MrLes3cfZoLZv3ePtZEVMM0x2tjqHDh4CD3JHdp62M7eBpxqOR0cnY4cPYaaaI8dPeLk7MAJSfZyLq4Vx08UIqkoLDx5qsLNRQ6WMQTdPfasO42sYPOZsx6eiKzF6eXtc27HebiKwvM7zvl4e3EiZU5fv+TcC4icdTFX1M8XNXv7yyZfaoEpaLmULBuAIs/AEGivsrAd4ozCze0LVYICUeUZGIND+C63gTJQYVNbMV9oMJoBQBVh4clXroKC+uqV5PAIDHmgCsnIimv7Cgv3Xa+IlMQiDwzyqOiUG1Om3EiJjrLBpgDojBi7mxcu3LSLCcYqD1QRGzft1q1pcbE45IExH59w+3ZCvBUuBUBnJCYlJaI6AABB269xUXFElwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDM6MjIrMDA6MDB1WI3HAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACplBMVEUAAAD//////////////////////////////////////////////////////////fz/9/P//////////////////////////////////////////////////////////////////////////////////////v7//////Pr/////////////////////+/n//////////////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7/////////////8+3/8er/9O7/5dj/zrX/s4z/oHH/lmL/9fD/2MT/qX7/ejj/Zxz/Zhn/Zhr//v7/59z/rof/djL/ZBf/Zxv//fz/3Mr/k13/aBz/ZRn//f3/i1D/5tr/kVr/ZRj/rIP//v3/1sL/cy3/byf/jVX/pnn/aB3/mmf/077/6d7/8On/5tn/dzT/q4H/6+H/zbP/lmH/s43/ah//yK3/9O//oXL/gUP/3cz/m2n/jVT/5Nb/onP/hkn/4ND/9vL/rob/cSv/0Ln/x6r/Zxr/Yxb/pXn/8+7/4NH/cCj/ciz/vZz/+PX/7+f/lWH/eDT/sov/49X/+/n/ya//ayH/bCP/jFL/pnr/tJD/7ub/mWb/ZBb/aiD/18P/fj3/+vf/vp//bSX/bib/v5//pXj/8uv/yrD/eDX/eTb/y7H/bCL/soz/7OL/18T/g0b/hEb/v6D/cy7/wKH/9vP/5tv/jlX/59v/0rz/ejf/uJX/nGr/aR//nGv/g0X/1cD//PvyoJNrAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAA0JJREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/oBAICvLzcnOykyTExRhh8pJSRcUlpWWFheVgUFhYVlpSXCQlCVHBKC0jW1FZVV1TjgRqqqsqK2RlpEEq5OQVaivrygrLUUBhWV1lrYK8HNAALp6k+oZGNHmgisaG+iQeLkYGQXHF1KZ8mO2NZWUwtYX5TamK4oIMXErNLa0FEKGatvbMzPa2GoiSgtaWZiUuBmWV5I5GiHxnV3dPb29Pd1cnREVjR7KKMoOqWl9/IcTICROLkoCgaOIEiJWF/X1qqgzqGpPA3MKyycVgeaCK4slgTxXmT9JQZ9AUmAJRPnVaRRIUVEybChGbIqDJoDV9BpjTOHNWEhzMmgl2VuGM6VoMScmzwQrK5sxFKJg7pwysYHZyEoP29HkQE+YvQChYMB9iwrzp2gw6CxeBFRQsXlIEky9ashgcMoWLFuow6OotBXOWLV+xEqZg5Yrly8CalurpMugbrFoNMWLN2nUQ+XVr10AMWL3KQJ/B0Gj9BkhINm7ctBkkv3nTRqjAhvVGhgzGJlu2boMG7fYdO3ft2rljOzTot23dYmLMYGqmvXvPXmgE7i3bt69sLzQ69+7ZrW1mysBpblGx/0AjLLGBAITdeGB/hYU5JwOjpaHVwUOHMRPMkaMHrQwtgWmO0dpGO+VYAXqSK+g4bmtnDU61nPYOjgvaURNdYWP7Kkcne05Ispdzdqk4cbIGSUVhzanTFa7OcrCMIejmfnDTmQKEgoIzZw+6eyCyFqenl/e5PeVwIwrL95zz9vLkRMqcPr5J5y/AHFpYcPG8qK8Pavb2k026dBkaGo2XryTJ+qPIMzAE2KlcXbEN7IyCbR1XVQIDUOUZGIOC+a61VwMtKay+foMvJAjNAKCK0LCkm7dAIX3rZlJYOIY8UIVkRMXtI4WFR25XREhikQcGeWRU8p27d+8lR0VaY1MAdEa0bdr9+2m20UFY5YEqYmJrHzyojY3BIQ+M+bj4hw/j4yxxKQA6IyExMQHVAQBpWLIaKI0lIgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDQ6MDYrMDA6MDAh7rXQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACbVBMVEUAAAD/////////////////////////////////////////////////////////+/v/8vL//////////////////////////////////////////////////////////////////////////////////////v7/////+vr/////////////////////+Pj//////////////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7/////////////6+v/6Oj/7Oz/1NT/ra3/f3//YGD/T0//7u7/vb3/b2//ISH/AQH/AAD//v7/19f/eHj/Ghr/+/v/xMT/Skr/AgL//f3/w8P/PDz/1tb/R0f/dXX/AwP/u7v/FRX/DQ3/QUH/aWn/Vlb/t7f/2tr/5ub/1dX/Gxv/c3P/3t7/q6v/2Nj/BQX/o6P//Pz/7e3/YWH/LCz/xsb/WFj/Pz//0dH/YmL/MzP/ysr/8fH/d3f/ExP/sbH/oaH/zMz/Dw//FBT/kJD/9PT/5eX/Tk7/HR3/fX3/0ND/+Pj/pqb/CAj/CQn/Pj7/amr/goL/4+P/VFT/Bgb/vLz/KCj/9vb/lJT/DAz/aGj/6en/y8v/p6f/Hh7/qKj/fn7/9/f/39//BAT/MDD/MTH/lZX/tLT/Hx//iIj/iYn/WVn/09P/ubn/+vpgzcAPAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAu1JREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSUFSKCkuKhQShKiglFaRra0rLyiAAVUlJeVyspIg1TIyStUVlUXYIDqqkoFeTmgAVw8STW1BVhAbU0SDxcjg6C4YmpdPTYF9XWpiuKCDFxKlQ2NMLGm5szM5iYYr7GhUomLQVkluQXmsNa29o6O9rZWmINbklWUGVTVOrug3u/uKUwCgsKebmiAdHWqqTKoa/RCuVl9YHmgir4sqJZeDXUGTYEMCK9/wsQkKJg4oR8iliGgyaA1aTKEM2VqEhxMnQIRmzxJiyEpeRqEM30GQsGM6RCxaclJDNqTZkI4s2YjFMyeBRGbOUmbQWfOXAhn3vxCmHzh/HkQsblzdBh09RbAfJ0KU5AKC5kFeroM+gYLF0F4i5cshcgvXbIYIrJooYE+g6HRsuVQ9StWrgLaUrhq5QqowPJlRoYMxiar16yFCqxbv2Hjxg3r10G5a9esNjFmMDXT3rQZEYVbtiDYmzdpm5kycJpblG7dhi26t20ttTDnZGC0NLTavmMnpnzTju1WhpbANMdobaOdsisfXT5/w25bO2twquW0d3Dc04ymIr95j6OTPSck2cs5u5Tu3YeqYN/+UldnOVjGEHRz375yLbL8ugMH3T0QWYvT08v70ObDCPnDmw95e3lyImVOH9+knCMIBUdzRH19ULO3n2zSMXjibjyWJOuPIs/AEGCnMqcF6ox1LXNUAgNQ5RkYg4L5aprBGai+uYgvJAjNAKCK0LCk4ydACk4cTwoLx5AHqpCMKD0JDPKdp0ojJLHIA4M8Mir5dH//6eSoSGtsCoDOiLY9c+TIGdvoIKzyQBUxsRPPnp0YG4NDHhjzcfHnzsXHWeJSAHRGQmJiAqoDAOgCnVLAYqeOAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo0NDoxOSswMDowMBsMxacAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACf1BMVEUAAAD//////////////////////////////////////////////////////////P3/9Pn//////////////////////////////////////////////////////////////////////////////////////v7/////+/3/////9fr/////////////////+vz//////////////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7/////////////7/f/7PX/8Pf/3O7/vd7/mcv/gL//c7n/8fj/yuT/jMX/Tab/NJn/MZj/Mpj//v7/3+//k8n/R6P/L5f/M5n//P3/0Of/brb//f7/z+f/Y7H/MJf/bLX/kcf/yeT/Q6H/PZ7/ZrP/h8P/d7v/xeL/4fD/6/X/3e7/SaT/j8f/5PH/u93/crn//v//mMz/N5r/tdr/gcD/Vqv/0ej/ebz/ZrL/2uz/gsD/XK3/1er/8/n/ksn/QaD/wN//tNn/1ur/P5//QqD/ptL/9vr/6vT/cbj/l8v/+vz/t9v/OJv/Opz/ZLH/iMP/m83/6fP/d7r/N5v/Uqj/Mpn/+Pv/qdT/PJ3/7fb/Z7L/uNz/SqT/S6X/udz/OZz/mMv/5fL/drr/Waz/Wqz/qtT/RKH/q9T/9Pn/3u7/Z7P/w+D/TKX/oM//PZ3/erz/Npr/3O3/x+L/+/0F2pMDAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAM4SURBVDjLdZNnWxNBFIVnEZGEGpBeROkSuoIUwS4KFkTFQp+wFEWzk+AmEFhEDBZQlA5ioxcRsCDYELADSvlBbnY2kACeTztz3r1znztnAOBEEAYbDDcabTKG0HiT0UbDDQYEAXRECIQmpmbmFpaS7GyJpYW5mamJUKBDECIr6802ZE5uXv6lS/l5uTmkzWZrK9EyQdja2cPLBVeuSinEipJevVJwGdrb2RJa38FRJi+8RiOk4IQQfa1QLnN0wATh5OyiLCqWUgodUdLiIqWLs5OGcN3ipiopZZBCT4gpLVG5bXFlCwhNobxsta8hyuTQVEgAkd1W8rpUezrDSvstvU5utRMB4TZV+Q18PqIqbubn36ygMELdKFdtEwJ3D4ma4X+pvHX7zp3btyr5goxa4uEOPL3uViHsV9+TQVaye9WYQFV3vTyBt899bomYGvkDyOmBvIZrBEnv+3gD3+0PMV5bp4K8VHW1eO/hdl/gR9ZzC6ahES6rsYFrC9WTfgBKmjiAbm5ZAVqaaQ5okkAgJltxhUdtK0DbI1yhlRQD/8dPOIB6+kym9WXPnnKTQU8e+4OAwOe4IVpNagFSTeO954EBICi4vQOvOru6sd/d1Yl3OtqDg0BIaE8vnjRT1dfCniJr6avCo6V6e0JDwI6d/QMv+NEOvhwaHh56OciP/sVA/84dICxcPPKK5i+Qpl+/pmn+OulXI+LwMCDYFaEsf8PH6a0mk2/5UL0pV0bsEgAiMiRq9N3Y2sCMvRuNColkM0dE7xaPq6nVkaPU4zGx0VxqBXv27mtr1g8dYt637du/R4Bj73rgoPLDR90aiPr0WXnogKv2YYgOx432Tejknhr8Mhp3ZOVpCY7GJ0xOKZZLIMXUZEL8UYHO4zx2HBZMaw9B1NcCm+PH9J/3CRf47Tt/CPX9B3Q5qecDkBjr8VON26Amhn56nErU9wGRdNr8129NfJH0t9z8TNKqAixxNhnOzGpGPTsDk8+t8VnC4bxybgyhP3PK8w7r+OzIL1yU/J2f/yu5eCF6PYBtIyVmYXp6ISYlaV2fJVLTVIuLqrTU//jszadnLC1lpEf+D2DbyMzKytRv4B+n7ayGbXJj1gAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDQ6MjkrMDA6MDCVg8JEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACslBMVEUAAAD////////////////////////////////////////////////////////+/fz79/T////////////////////////////////////////////////////////////////////////////////////+/v7////9/Pv////79/X////////////////9+/r////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////58+/48ez69PDz5dzpzr3cspnUoIDQlXP69PHt18rYqIzDeU27ZjS6ZTG6ZTL+/v7059/brpPCdUe6Yy+7ZjP+/fzv29DOkm67ZzS6ZDH+/f3v28/LiWO6YzD05t/OkGy6ZDDarJH+/v3t1snAckO+bj3MjWbUn4DXpYfRmXfr08X16eH48Ovz5t3CdknZqo/26+TozLvQlXL//v7dspi8aTfmyLXUoIHGgFbv3NHSm3m5Yy/LjGby49rVoYLIhVzx39X79vPbrZK/cEHq0MDmxrS6ZjK5Yi/58/Dx4Na+bz/AcULhvab8+Pb47+rPlHHCd0ncsZf9+/rnybe9aji9azrLi2TXpojdtJv37unt18nFfVK7ZTL8+vjivqm+bTziv6n58e3WpIfWpYfx4NXMjWfnyrjCd0rDeEvoyrm9azncsZj27OXRmHbHg1nIg1rt2Mriv6rAckTjwKv79vS8ajm9ajnXpYj05t7r0sPDeUzfuKC+bT3Sm3q8aTbIglns1cf9/Pua7OXrAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAANISURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oLAICAoL8vNyc5IlxMUYYfKSUsUlpWXlRUUVYFBUVF5WWlIsJQlRwSgtI1tZVV1TW4EEamuqqyplZaRBKuTkFerqGxqLKlBAUWNDfZ2CvBzQAC6e5KbmFjR5oIqW5qZkHi5GBkFxxbTWApjtLY2NMLVFBa1piuKCDFxKbe0dhRCh2s6u7u6uzlqIksKO9jYlLgZllZSeFoh8TW9f/4QJ/X29NRAVLT0pKsoMqmoTJxVBjJw8pTgZCIqnTIZYWTRpopoqg7rGVDC3qHFayfRkMJheMg3sqaKCqRrqDJpaMyDKZ86qS4aCulkzIWIztDQZtNNmgzktc+Ymw8HcOWBnFc1O02ZITpkHVjB/wUKEgoUL5oMVzEtJZtBJWwQxYfEShIIliyEmLErTYdBdugysoHD5imKYfPGK5eCQKVq2VJdBT38lWMGq1T1rYArW9KxeBVawUl+PwcBw7TqIk9dv2AiR37hhPURk3VpDAwYj402bITHdsmXrQqAtxQu3boEEbe3mTcZGDCam27bvgAbtzl279+zZvWsnNOh3bN9masJgZq6zt3c+NALnz585c/58aHTO792rY27GwGlhWblvPzQ5HQClyQPQRLV/X6WlBScDo5WR9cFDhzETzOEjB62NrIBpjtHGVufosUL0JFd4/KidvQ041XI6ODqd6EJNdEUtJ084OTtwQpK9nItr5anTtUgqimrPnK10c5GDZQxBd4+DW88VIhQU7jx/0MMTkbU4vbx9LlysgBtRVHHxgo+3FydS5vT1S869BHNoUeHlK6J+vqjZ2182+eo1aGjUXrueLBuAIs/AEGivcqPnJtgZhbdu31AJCkSVZ2AMDuG7cxKU3otqTpbwhQajGQBUERaefPceKKjv3U0Oj8CQB6qQjKy8f7io6MH9ykhJLPLAII+KTnn46NHDlOgoG2wKgM6IsUt//DjdLiYYqzxQRWxc3ZMndXGxOOSBMR+f8PRpQrwVLgVAZyQmJSWiOgAArqa4BP2YBKMAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjQ0OjQ2KzAwOjAwpaS7KgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAChVBMVEUAAAD//////////////////////////////////////////////////////////vv//fL//////////////////////////////////////////////////////////////////////////////////////v7//////vr//////////////////////vj//////v///////////////////////////////////////////////////////////////////v7//////////////////////////////////////v7//////////////////////////////////////////////////////////////////////////////v7//////////////Ov/++j//Oz/+dT/863/7X//6mD/50///O7/9r3/62//4SH/3QH/3AD//v7/+df/7Xj/4Br/3QD//vv/98T/5kr/3QL//v3/98P/5Tz/+db/5kf/7HX/3QP/9rv/4BX/3g3/5UH/6WD/62n/6Fb/9bf/+tr/++b/+dX/4Bv/7HP/+t7///7/86v/+dj/3QX/8qP//vz//O3/6mH/4iz/98b/6Fj/5T//+dH/6mL/4zP/+Mr//fH/7Hf/3xP/9LH/8qH/6mn/+Mz/3g//3xT/8JD//fT/++X/507/4B3/7X3/+ND//vj/86b/3Qj/3gn/5T7/62r/7oL/++P/6FT/3Qb/9rz/4ij//fb/8ZT/3gz//Oj/62j/3AH//On/+Mv/86f/4R7/86j/7n7//vf/+t//3QT/4zD/4zH/8JX/3xX/3gj/9bT/4R//74j/74n/6Fn/+dP/9bn//vrsMn7uAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAxZJREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSVAqVIwADJKiosKpSQhKhilZWTLyisqobJQNZUV5WWyMtIgFXLyClXVNQUo8iBTaqqrFOTlgAZw8STV1qHLg1TU1SbxcDEyCIorptY3IGxHuKShPlVRXJCBS6mqsakAKt3c0tra0gxVUtDUWKXExaCsktwGFahs7+js6ursaIc6uKAtWUWZQVWtuwfML8jv7etPAoL+vt58iEhPt5oqg7rGBDC3oCBrYmESGBROzALbUpA/QUOdQVMgA6J80uQpSVAwZfIkiFiGgCaD1tRpEM70GUlwMGM6RGzaVC2GpOSZEM6s2QgFs2dBxGYmJzFoT50D4cydh1Awby5EbM5UbQad+QsgnIWLCmHyhYsWQsQWzNdh0NVbDPX1klSYgtQlUKHFeroM+gZLl0GUL1+xEiK/csVyiMiypQb6DIZGq1ZD1a9Zuw5oS+G6tWugAqtXGRkyGJus37ARKrBp85atW7ds3gTlbtyw3sSYwdRMe9t2RGTu2IGIzu3btM1MGTjNLcp27oIlB0Rslxbs2llmYc7JwGhpaLV7z17MBNO8Z7eVoSUwzTFa22jv238APckd2HLQ1s4anGo57R0cD7Wgqig40HLI0cmeE5Ls5Zxdyg4fQVZQUHDkaJmrsxwsYwi6ue9euxFJRcGmY8fdPRBZi9PTy/vE9pNwFQUnt5/w9vLkRMqcPr5JOacQOet0jqivD2r29pNNOnMWpuDsmSRZfxR5BoYAO5X5becgcbSpbb5KYACqPANjUDBfbQsoAxU0tBTxhQShGQBUERqWdP4CKKgvnE8KC8eQB6qQjCi7uLegYO+lsghJLPLAII+MSr48adLl5KhIa2wKgM6Itr1y6tQV2+ggrPJAFTGxU65enRIbg0MeGPNx8deuxcdZ4lIAdEZCYmICqgMA6f6os3UKuXAAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjQ0OjU4KzAwOjAwOTHA6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACr1BMVEUAAAD////////////////////////////////////////////////////////7/v3y+/n////////////////////////////////////////////////////////////////////////////////////+/v7////6/f3////y+/r////////////////4/fz//////v/////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////r+ffo+PXs+ffU8+2t591/28tg0r5Pzbju+vi97ORv1sQhwKUBt5gAtpf+/v7X9O942ckavqIAtZYAt5j7/v3E7udKy7UCt5j9/v7D7uY8x7DW8+5Hy7QAtpZ118cDt5i77OQVvKANup1BybJg0b5p1cJWz7q36uLa9PDm9/XV8u4bvqNz18be9fGr59zY8+9/2ssFuJmj5dr8/v7t+fdh0r8sw6rG7+hYz7s/ybHR8uxi0r8zxazK8Onx+/l32MgTvJ+x6N+h5Nlp1MLM8OoPu54UvJ+Q39L0/Prl9/ROzbcdv6N92srQ8ez4/fym5tsIuJoJuZs+yLBq1cOC28zj9/NUz7oGuJq87OMowaf2/PuU4NQMupwNupyU4dTo+PZo1MIBtpdq1cLp+fbL8OoBtpan5tsev6Mev6So5twIuZt+2sv3/Pvf9fJUzroEt5gwxKsxxKuV4NQVvaCV4dTW8+/X8++06eEfv6T7/f2I3c6J3c9Zz7wFuJrT8u256+L6/f3ow7cxAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAMvSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oBAMCvLzcnOSJcTFGGHyklJFxSWlZYWF5WBQWFhWWlJcJCUJUcEoLSNbUVlVDZWFqqmuqqyQlZEGqZCTV6iprStDkQeqKKurrVGQlwMawMWTXN/QiCYPVNHYUJ/Mw8XIICiumNbUDLO9sawMprawuSlNUVyQgUuppqW1EOq4tvaOjvY2qGMLW1tqlLgYlFVSOhuhDuvq7unt7enugjq4sTNFRZlBVa2vH8wvLJgwsSgZCIomTiiAiPT3qakyqGtMAnMLG7Mng+WBKiZngx1SWDBJQ51BU2sKRPnUadOToWD6tKkQsSlamgzaM2aCOY2zZifDwexZYGcVzpyhzZCcMgesoGzuPISCeXPLwArmpCQz6MyYDzFhwUKEgoULICbMn6HDoLtoMcS+JUuLYPJFS5dAxBYv0mXQ018G4ZQtT4MpSFsOiZrCZfp6DAaGK1ZCeKtWr4HIr1m9CiKycoWhAYOR8dp10IBbv2Ej0JaijRvWQ4N23VpjIwYT002bt0BVbN22fceO7du2QuW3bN5kasJgZq6zc1cZLBGU7d5dBksaZbt26pibMXBaWFbs2QtLDqAkCWPu3VNhacHJwGhlZL1v/wHMBHPw0D5rIytgmmO0sdU5fOQoepI7euy4nb0NONVyOjg6nWg/iZpoT7afcHJ24IQkezkX14pTpwuRVBQWnjlb4eYiB8sYgu4e+zacQ1aw9fwFD09E1uL08va5eOkyXEXh5UsXfby9OJEyp69fcu4VRM66mivq54uavf1lk6+1whRcv5EsG4Aiz8AQaK+yaDnEGYVbly9SCQpElWdgDA7hu9kOykCFze23+EKD0QwAqggLT759BxTUd24nh0dgyANVSEbevXegsPDA/buRkljkgUEeFZ3y4OHDBynRUTbYFACdEWP36MqVR3YxwVjlgSpi46Y/fjw9LhaHPDDm4xOePEmIt8KlAOiMxKSkRFQHAAAsgrQ2sknLAAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDU6MTIrMDA6MDD2yfpjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACfFBMVEUAAAD////////////////////////////////////////////////////////8/vz0/fT////////////////////////////////////////////////////////////////////////////////////+/v7////7/vv////1/fX////////////////6/vr//////v/////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////v/O/s++zw/PDc+dy9872Z7ZmA6oBz53Px/PHK9sqM64xN4U003TQx3DEy3DL+/v7f+d+T7ZNH4Ecv3C8z3TP8/vzQ99Bu5m79/v3P989j5WMw3DBs5myR7JHJ9slD4EM93j1m5WaA6YCH64d36HfF9cXh+uHr++vd+d1J4EmP7I/k+uT+//6787ty53KY7Zg33Te18rWB6oFW4lbR99F56Hna+dqC6oJc41zV+NXz/fOS7JJB30HA9MC08rQy3TKH6ofW+NY/3j9C30Km8Kb2/fbq++px53GX7Zfa+Nr6/vq387c43Tg63jpk5WSI64ib7pvp++lS4lL4/fip8ak83jzt/O1n5We487hK4UpL4Uu587k53TmY7pj4/vjl+uV26HZZ41la41qq8KpE30Sr8Kv0/fQ53jne+d7D9cNM4Uyg76B66Ho23TbH9cf7/vts+qXUAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAM8SURBVDjLdZP3X9NQFMVfFIUWLJRpVcoeYlVEQEUExIUyFFFRcfJqqiyb12paDQQKpQXZorJXARcbFRC3oohb/yHTJIUW8fyU5Hxz7/3cdx4ArDBs2XK7FSvtHSB0sF+5wm75MgwDVsIEQkenVSJnF/mlS3IXZ9EqJ0ehwIrAxK5u7h644vKVnNzcnCuXFbiHu5ureJ7APL1Ww7z8gqtKAjEilFcL8vPgai9PzOJL1qjU166TCGlYIURev6ZWrZFwBLZ2nbf2xk0lobESobx5Q+u9bq2ZkPr4UoVFNNLYCNFFhZSvj5QpIHSC6uLFvpkoVkMnIQbEXn54idLSnWZkeVaW4H5eYiD0p3SlXH9ElOnLy/VlBIcQpTrKXwgCAuUGmv/FWFF561ZlhZEvSBvkgQEgKLiqGnF+TW0dZFRXW8MRqLoqOAiEhNazr4huUKsgK5W6gR0EKetDQ8D6sNsc3niHgryoO43ct9th68EG/C77Qt9rgvNquseOhe7iGwCUN7MAqW9ZAFr0JAs0yyGQ4a1chbb2BaC9javQisvAxo5OFiC6ulUWX9XdxW4GdXZsBJs297CAiezFLQDeS5pYoGfzJhC+pa+fG/n+g4ec//DBfe5Lf9+WcBCx9dFjbtN09cAg00U1OFDNrZZ4/GhrBIiMGhoe4Vc7Ojb+5Mn42Ci/+pHhoahIEL1N9tRI8gdIko2NJMkfJ2l8KtsWDQTbd2h1z/g4mcyZNPGheqbT7tguAFhMxM6Jyal/AzM1ObEzIobJHBa7S/bcQCyOHGF4Hhcfy6ZWkLA7sV1vGzpET7cn7kkQcLGX7t2nffGSMFn//+q1dv9eqeViiA8kTQy8sco9Mfr2XdLBhaslOJSc8v6DZr4J0nx4n5J8SGB1OVPTYP6MZVBEfMz3SEu1vd6HveGnWb4JMfsZeh+x8QFIjw+cM3xhCeLL+Fzg0XRbH2AZx0Rfp83xRcppteh4xqICDHEiE377bl71928w8+Q/PkNITml/TCFU9kN7SrKEz6z8dJb8569fP+VZp2OXApgxzsQpZmYUcWcylvQZ4uw56vdv6tzZ//jMyZ+/8OfPhfMx/wOYMS5mZ1+0HeAvs9msMpv5tz0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjQ1OjQxKzAwOjAwj8HumgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACr1BMVEUAAAD////////////////////////////////////////////////////////9/vv5+/L////////////////////////////////////////////////////////////////////////////////////+/v7////9/fr////5+/P////////////////8/fn////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////3+uz1+en3+u3t9Nbd6rHK34W912i20lj4+u/j7sDD23ajxyyWvw6VvguVvgz+/v7u9drH3X+gxSWUvgmWvw39/vvm8Me00VP+/v3m8MauzkXu9Nmz0FDG3HyUvgrj7r+exCCbwhqwz0rB2XGWvw+51F7h7Lrv9dz0+Oft9NehxifF3Hrx9t/c6a+201j+//7K3oaYwBHZ56j+/vy+12moyjfn8Mn2+uy61WCwzkns89P3+u6+12qryz7p8c35+/HH3X6dwx7e67XY56aVvg2UvQjq8s6cwhuexB/R45b6/PT0+Oa20leVvgqhxijJ3oT8/fna6KqYwBOZwRavzkfB2XLL34nz+OS41F2UvQmYwBKmyDGWvwz7/PfS5JmawRebwhjT5JrB2XD1+erp8s79/vzb6ayiximixir7/PbJ3oOZwRXK3oTx9+Cpyzuqyzvj7sGexCH5+/KZwBSwz0vu9dng7LijxivO4Y6awRjO4Y+61WGXwBHt89Wpyzri7bz9/frM0I39AAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAANESURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oLAICAoL8vNyc5IlxMUYYfKSUsUlpWXlhUUVYFBUWF5WWlIsJQlRwSgtI1tZVV1QWIEECguqqyplZaRBKuTkFWpq68qLKlBAUXldbY2CvBzQAC6e5PoGdHmQiob6ZB4uRgZBccW0xgKY7U3l5U0wdkFjmqK4IAOXUk1zSyHUca1tWVltrVDHFrY01yhxMSirpLQ3QeQ7Oru6e3q6uzo7ICqa2lNUlBlU1Xr7iiBG9k8oTgaC4gn9ECuL+nrVVBnUNSaCuUXlk0omJ4PB5JJJYEcXFUzUUGfQ1JoCUT512vRkKJg+bSpEbIqWJoN22gwwp2nmrGQ4mDUT7KyiGWnaDMmz54AVlM+dh1Awb245WMGc2ckMOvMXQBQsXIRQsGghRMGC+ToMuouXgBUULl1WDJMvXrYUHDJFSxbrMujpLwdzVqxsT4MpSGtfuQKsabm+HoOB4arVECPWrF0HkV+3dg3EgNWrDA0YjIzXb9gICbhNm+cBbSmet3kTJGg3blhvbMRgYrpl6zZo0G7fsXPXrp07tkODftvWLaYmDGbmOrv3rIQmk5V79+3buxKadFbu2a1jbsbAaWFZ2bwfYknFAVCaPABhb9zfXGlpwcnAaGVkffDQYcwEc+ToQWsjK2CaY7Sx1Uk9Voie5Ap3HreztwGnWk4HR6cTbU0oKoqa2k44OTtwQpK9nIvryVOnNyKpKNp45tRJNxc5WMYQdPc4e+48UrovPH/hoIcnImtxenn7XNxTATeiqGLPRR9vL06kzOnrl5x7CZGzLl8R9fNFzd7+sslHr0JDY+PVo8myASjyDAyB9irX2q+DnVF4vf2aSlAgqjwDY3AIX30bKPkWFdy4yRcajGYAUEVYePKt26Cgvn0rOTwCQx6oQjKy8s7doqK79yojJbHIA4M8Knr2/QcP7s+OjrLBpgDojBi7h48ePbSLCcYqD1QRGzf98ePpcbE45IExH5/w5ElCvBUuBUBnJCYlJaI6AADXv7i4Kd/lawAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NDk6NDUrMDA6MDBhsioHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACnVBMVEUAAAD////////////////////////////////////////////////////////7/fvy+fL////////////////////////////////////////////////////////////////////////////////////+/v7////6/Pr////////////////////4/Pj////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////r9uvo9Ojs9uzU69St2K1/w39gtWBPrU/u9+694L1vu28hlyEBiAEAhwD+/v7X7Nd4wHgalBoAhgAAiAD7/fvE48RKqkoCiAL9/v3D48M8pDzW7NZHqUd1vnUDiAO737sVkRUNjg1BpkFgtGBpuWkCiQJWsFa33bfa7drm8+bV69UblBtzvXPe796r16vY7Nj+//4FigWj1KP8/fzt9u1htWEsnCzG5Mbr9etYsVg/pT/R6dFitmIzoDPK5srx+PF3wHcTkBOx2rGh06EAhQDM58wPjg8UkRSQy5D0+vTl8uVOrE4dlR19wn3Q6dD4/Pim1aYIiwgJjAk+pD5qumqCxYLj8uNUr1QGiga837womij2+/aUzZQMjQwNjQ1ouGgBhwFquWrp9OnL5ssBhgGn1qcelR4elh6o1qj2+vZ+w373+/ff8N8EiAQwnjAxnjGVzZUVkhUJiwm03LQflh+IyIiJyIlZsVnT6tP8/vy53rn6/Pq97PRtAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAzFJREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSWlBQVlYFBQUFpSXFQoJQlRwSgtI1teUVkFlYWqqaqsKJeVkQapkJNXqK6pLUWRB6oora2pVpCXAxrAxZNUV48uD1JRX5fEw8XIICiumNrQCLO9FAhg7MaGVEVxQQYupeqm5gKo41pa29paW6COLWhuqlbiYlBWSW4vhQh0dHZ19/R0d3V2QFSUtierKDOoqvX2gfkF+f0TCpOAoHBCfz5EpK9XTZVBXWMimFtQmjVpchIYTJ6UBXZIQf5EDXUGTYEMiPIpU6clQcG0qVMgYhkCmgxa02eAOaUzZyXBwayZYGcVzJiuxZA0ew5Ewdx5CAXz5kIUzJmdxKA9fT5EwYKFCAULF0AUzJ+uzaCzaDHEviVLC2HyhUuXQMQWL9Jh0NVbBuEsb0+FKUhtXw4RW6any6BvsGIlhLdq9RqI/JrVqyAiK1cY6DMYGq1dBwnJ0vUbNgJDYvLGDeuhAuvWGhkyGJts2rwFGrRbt23fsWP7tq3QoN+yeZOJMYOpmfbOXcuhEbi8dPfu0uXQ6Fy+a6e2mSkDp7lF+Z69pbBUUABLd2Wle/eUW5hzMjBaGlrt238AM8Ec3L/PytASmOYYrW20Uw4dRk9yh48ctbWzBqdaTnsHx2Otx1ET7fHWY45O9pyQZC/n7FJ+4mQBkoqCglOny12d5WAZQ9DN/cyGLcgKtp495+6ByFqcnl7e53ddgKsouLDrvLeXJydS5vTxTcq5iMhZl3JEfX1Qs7efbNLlK9DQKL1yOUnWH0WegSHATmVRO8QZBVfbF6kEBqDKMzAGBfPVtYIyUEFjaxFfSBCaAUAVoWFJ166Dgvr6taSwcAx5oArJiPIbBwoKDtwsj5DEIg8M8sio2bemTLk1OyrSGpsCoDOibW9fvHjbNjoIqzxQRUzsnbt378TG4JAHxnxc/L178XGWuBQAnZGQmJiA6gAAFLyvxAL3bxQAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjQ5OjU2KzAwOjAwnPAwBAAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAClFBMVEUAAAD////////////////////////////////////////////////////////7//3y//n////////////////////////////////////////////////////////////////////////////////////+//7////6//3////y//r////////////////4//z////////////////////////////////////////////////////////////////////////+//7////////////////////////////////////+//7////////////////////////////////////////////////////////////////////////////+//7////////////r//fo//Xs//fU/+6t/95//8tg/79P/7nu//i9/+Rv/8Uh/6YB/5kA/5j+//7X/+94/8ka/6MA/5cA/5n7//3E/+dK/7YC/5n9//7D/+c8/7HW/+9H/7V1/8cD/5m7/+QV/6EN/55B/7Np/8NW/7u3/+La//Dm//XV/+4b/6Rz/8fe//Gr/93Y/+/+//9//8wF/5qj/9r8//7t//dh/8As/6vG/+hY/7w//7LR/+xi/8Az/63K/+rx//l3/8kT/6Cx/9+h/9nM/+oP/58U/6CQ/9L0//rl//RO/7gd/6R9/8vQ/+z4//ym/9sI/5sJ/5w+/7Fq/8OC/83j//NU/7oG/5u8/+Qo/6j2//uU/9QM/50N/53o//Zo/8MB/5jp//bL/+pB/7IB/5en/9we/6Qe/6Wo/9wI/5x+/8v3//vf//IE/5kw/6wx/6yV/9TW/+60/+Af/6WI/8+J/89Z/7zT/+25/+L6//2DMMmrAAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAMmSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oBAMCvLzcnOSJcTFGGHyklJFxSWlZYWF5WBQWFhWWlJcJCUJUcEoLSNbUVlVDZWFqqmuqqyQlZEGqZCTV6iprStDkQeqKKurrVGQlwMawMWTXN+ALg9S0VCfzMPFyCAorpjW2ASzvQwIYOymxjRFcUEGLqWa5pZCqONa27Ky2lqhji1saa5R4mJQVklpL4M6rKOzq7u7q7MD6uCy9hQVZQZVtZ5eML+woK+/KBkIivr7CiAivT1qqgzqGhPA3MKy7ImTksFg0sRssEMKCyZoqDNoak2GKJ8ydVoyFEybOgUiNllLk0F7+gwwp2zmrGQ4mDUT7KzCGdO1GZJTZkMUzJmLUDB3DkTB7JRkBp3p8yAK5i9AKFgwH6Jg3nQdBt2FiyD2LV5SBJMvWrIYIrZooS6Dnv5SCKesPQ2mIK0dEpyFS/X1GAwMly2H8FasXAWRX7VyBURk+TJDAwYj49VroAG3dt16oC1F69ethQbtmtXGRgwmphs2boKq2Lxl67ZtW7dshspv2rjB1ITBzFxn+44yeGTu3AmPzrId23XMzRg4LSwrdu2GJQdQkoQxd++qsLTgZGC0MrLes3cfZoLZv3ePtZEVMM0x2tjqHDh4CD3JHdp62M7eBpxqOR0cnY4cPYaaaI8dPeLk7MAJSfZyLq4Vx08UIqkoLDx5qsLNRQ6WMQTdPfasO42sYPOZsx6eiKzF6eXtc27HebiKwvM7zvl4e3EiZU5fv+TcC4icdTFX1M8XNXv7yyZfaoEpaLmULBuAIs/AEGivsrAd4ozCze0LVYICUeUZGIND+C63gTJQYVNbMV9oMJoBQBVh4clXroKC+uqV5PAIDHmgCsnIimv7Cgv3Xa+IlMQiDwzyqOiUG1Om3EiJjrLBpgDojBi7mxcu3LSLCcYqD1QRGzft1q1pcbE45IExH59w+3ZCvBUuBUBnJCYlJaI6AABB269xUXFElwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NTA6MDYrMDA6MDDpi8pqAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACbVBMVEUAAAD////////////////////////////////////////////////////////7///y///////////////////////////////////////////////////////////////////////////////////////+///////6///////////////////////4///////////////////////////////////////////////////////////////////////////+///////////////////////////////////////+///////////////////////////////////////////////////////////////////////////////+///////////////r///o///s///U//+t//9///9g//9P///u//+9//9v//8h//8B//8A///+///X//94//8a///7///E//9K//8C///9///D//88///W//9H//91//8D//+7//8V//8N//9B//9p//9W//+3///a///m///V//8b//9z///e//+r///Y//8F//+j///8///t//9h//8s///G//9Y//8////R//9i//8z///K///x//93//8T//+x//+h///M//8P//8U//+Q///0///l//9O//8d//99///Q///4//+m//8I//8J//8+//9q//+C///j//9U//8G//+8//8o///2//+U//8M//9o///p///L//+n//8e//+o//9+///3///f//8E//8w//8x//+V//+0//8f//+I//+J//9Z///T//+5///6//8Ngdu6AAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAu1JREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSUFSKCkuKhQShKiglFaRra0rLyiAAVUlJeVyspIg1TIyStUVlUXYIDqqkoFeTmgAVw8STW1BVhAbU0SDxcjg6C4YmpdPTYF9XWpiuKCDFxKlQ2NMLGm5szM5iYYr7GhUomLQVkluQXmsNa29o6O9rZWmINbklWUGVTVOrug3u/uKUwCgsKebmiAdHWqqTKoa/RCuVl9YHmgir4sqJZeDXUGTYEMCK9/wsQkKJg4oR8iliGgyaA1aTKEM2VqEhxMnQIRmzxJiyEpeRqEM30GQsGM6RCxaclJDNqTZkI4s2YjFMyeBRGbOUmbQWfOXAhn3vxCmHzh/HkQsblzdBh09RbAfJ0KU5AKC5kFeroM+gYLF0F4i5cshcgvXbIYIrJooYE+g6HRsuVQ9StWrgLaUrhq5QqowPJlRoYMxiar16yFCqxbv2Hjxg3r10G5a9esNjFmMDXT3rQZEYVbtiDYmzdpm5kycJpblG7dhi26t20ttTDnZGC0NLTavmMnpnzTju1WhpbANMdobaOdsisfXT5/w25bO2twquW0d3Dc04ymIr95j6OTPSck2cs5u5Tu3YeqYN/+UldnOVjGEHRz375yLbL8ugMH3T0QWYvT08v70ObDCPnDmw95e3lyImVOH9+knCMIBUdzRH19ULO3n2zSMXjibjyWJOuPIs/AEGCnMqcF6ox1LXNUAgNQ5RkYg4L5aprBGai+uYgvJAjNAKCK0LCk4ydACk4cTwoLx5AHqpCMKD0JDPKdp0ojJLHIA4M8Mir5dH//6eSoSGtsCoDOiLY9c+TIGdvoIKzyQBUxsRPPnp0YG4NDHhjzcfHnzsXHWeJSAHRGQmJiAqoDAOgCnVLAYqeOAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1MDoyMSswMDowMG4J85kAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACu1BMVEUAAAD////////////////////////////////////////////////////////8/f3y9/r////////////////////////////////////////////////////////////////////////////////////+/v7////6/P3////z9/r////////////////5+/z//////v/////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////s8/jp8fft9PjW5vCwz+KEtdJno8hXmcLu9fnA2Oh1q80qfrIMa6cJaqYKaqb+/v7Z6PF+sdAkea8HaKULa6f8/f3G3epRlcAJaab9/f7G3OpEjrsHaaXY5/FOlL97rs8Iaab9/v6+2Ocfdq0Yc6tJkb1no8dvqMsIaaUNbKhdncS61ebb6fLn8PbX5vAle7B5rs7f7POuzuGFtdMPbainyt/8/f5oo8g1hbbI3utfnsVHkLzT5O/u9PhppMk8ibjM4Ozx9/p9sNAcda200eSlyN4La6YGaKVwqMvO4e0Zc6wddq2Vv9j0+Pvm8PZWmMIme7GDs9LS5O/+/v/5+/ypy98Rb6kTcKpGj7xxqcyIt9Pk7/VcnMQQbqj7/f0wgbQKaqf3+vyYwdkVcaoWcquZwdpvp8vq8vfN4e1JkL2rzOAnfLEofLGszOH2+vyCs9ITb6mDtNLg7PNbnMQ5h7c5h7jA2egfd66awtry9/pvqMoSb6kMbKe30+UpfbGNutaOutZgn8XV5vC81ub7/P0PF+8/AAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAANLSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oLAICAoL8vNyc5IlxMUYYfKSUsUlpWXlhUUVYFBUWF5WWlIsJQlRwSgtI1tZVV1QU4EEagqqqyplZaRBKuTkFWrr6huKKlBAUUN9Xa2CvBzQAC6e5MYmdHmQiqbGZB4uRgZBccW05gKY7S3l5S0wdkFzmqK4IAOXUmtbeyFEqKajs6urs6MGoqSwva1ViYtBWSWluwci39vXP2HixAn9fb0QFT3dKSrKDKpqkyYXQYycMrU4GQiKp06BWFk0eZKaKoO6xjQwt6ghuwQsD1RRkg12dFHBNA11Bk2t6RDlM2bOSoaCWTNnQMSma2kyaKfNBnNa5sxNhoO5c1rACmanaTMkp8wDKyifvwChYMH8crCCeSnJDDoLF4EVNCxeglCwZHEDWMGihToMukuXgRUULl9RDJMvXrEcHDJFy5bqMujprwRzVq1ekwZTkLZm9SqwppX6egwGhmvXQYxYv2EjRH7jhvUQA9atNTRgMDLetBns5IqWLVu3bU9O3r5t6xaowOZNxkYMJqY7du6CBG3L7j179+3bu2c3RL5o184dpiYMZuY6+w+shkRg4erygwfLV0OirmL1gf065mYMnBaWh9oOQ/RUHAGlySMQdsvhtkOWFpwMjFZG1kePHcdMMCdOHrU2sgKmOUYbW53UU4XoSa5wzWk7extwquV0cHQ6c7YFRUVRy9kzTs4OnJBkL+fiWnnuPLKKopYLFyvdXORgGUPQ3ePS5SuFCAWFu68e9fBEZC1OL2+fa9cr4EYUVRy45uPtxYmUOX39knNvIHLWzVuifr6o2dtfNvnkbWhotNy+kywbgCLPwBBor3L33n2wMwrvr7mrEhSIKs/AGBzC13j2AdCSogdnS/hCg9EMAKoIC09++AgU1I8eJodHYMgDVUhGHnp8oqjoxJNDkZJY5IFBHhWd8nTGjKcp0VE22BQAnRFj9+zGjWd2McFY5YEqYuNmPX8+Ky4Whzww5uMTXrxIiLfCpQDojMSkpERUBwAAPAa7YJpbYIgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjUwOjM0KzAwOjAw8JvcoAAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACzVBMVEUAAAD////////////////////////////////////////////////////////7/Pzy9Pb////////////////////////////////////////////////////////////////////////////////////+/v7////6+/v////////////////////4+fr////////////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////r7/Ho7O/s7/LU2+GtusZ/lKdge5JPbIfu8fO9yNFvh5whRWYBK1AAKE8AKU/+/v7X3uR4j6IaP2EAJk0AKlD7/PzEztZKZ4ICK1EAKE79/f3DzdY8XHkAJ03W3eNHZYB1jKADK1EAJ067xtAVO14NNVlBYHxgepHr7vFpgpgCLFFWcou3ws3a4OXm6u3V2+IbQWMBK1Fzip7e4+iruMVPbIbY3uQFLlOjssD8/f3t8PJhe5IsT27Gz9hYc4w/X3vR2d9ifJMzVXPK09vx8/V3jqITOVyxvcmhsL4AKVAAJUzM1NwPNloUOl2QorP09vfl6e1Oa4UdQmN9k6bQ2N/4+fqmtMIIL1QJMVY+XXpqg5mCl6nj6OxUcYoAJkwGL1S8x9EoSmr2+PmUpbUMM1cNNFiUprVogZgBKE5qgpjp7PDL1NsBJ06ntcIeQmQeQ2WotsP29/l9kqUIMVV+k6b3+Pnf5OlUcIoEKlAwUnExUnG9yNKVprYVPF4IMFUJMFVBYH3X3uO0wMwfRGWInK0MNFiJnK5ZdI3T2uEwUnC5xM/6+/yAxxLtAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAA0hJREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/oBAICvLzcnOykyTExRhh8pJSRcUlpWWFheVgUFhYVlpSXCQlCVHBKC0jW1FZVV1TjgRqqqsqK2RlpEEq5OQVauvqGwrLUUBhQ31drYK8HNAALp6kxiZ0eZCKpsYkHi5GBkFxxdTmFpjtrWVlrTB2S3OqorggA5dSbVs7xP7Cmo7Orq7OjhqIkpr2tlolLgZlle6eBoh8b1//hIkTJ/T39UJUNPR0qygzqKpNmgzmF06ZOq0oCQiKpk2dAhGZPElNlUFdY3p+IdhRM2aC5YEqZs4AO7owf7qGOoOmQAZE+azZc5KgYM7sWRCxDAFNBq2588Cc1vkLkuBgwfxWsIJ5c7UYkroXghWULVqMULB4URlYwcLuJAbtuUvAChqWLkMoWLYU7LHCJXO1GXSWrwArKFi5qggmX7RqZQFYwYrlOgy6eqvBCtas7UmFKUjtWbsGrGC1ni6DvsG69RAnb9i4CSK/aeMGiMj6dQb6DIZGm7dAQrp167btQFuKtm/b2goJ6y2bjQwZjE127NwFCdrW3Xv27tu3d89uiHzhrp07TIwZTM209x84CI3AgwcPHTp4EBqdBw/s1zYzZeA0t6g4fKQGlthAAJqojhyusDDnZGC0NLQ6euw4ZoI5cfKolaElMM0xWttop5w6jZ7kTp85a2tnDU61nPYOjuc6z6OoKDzfec7RyZ4TkuzlnF0qLlysQVJRWHPpcoWrsxwsYwi6uV+5eg0p3dfsvn7D3QORtTg9vbxv3roNN6Lw9q2b3l6enEiZ08c3KecOzJLCmrv3RH19ULO3n2zSfWjiLq95cD9J1h9FnoEhwE5lec9DcCQXPOpZrhIYgCrPwBgUzNfYCcpAhS2Pn/CFBKEZAFQRGpb09BkopJ89TQoLx5AHqpCMqHj+orDwxcuKCEks8sAgj4zqfjVr1qvuqEhrbAqAzoi2ff3mzWvb6CCs8kAVMbFz3r6dExuDQx4Y83Hx797Fx1niUgB0RkJiYgKqAwC8prs7Sn3FCAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NTA6NDMrMDA6MDA/+es3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACfFBMVEUAAAD////////////////////////////////////////////////////////8/P709P3////////////////////////////////////////////////////////////////////////////////////+/v7////7+/7////19f3////////////////6+v7///////7////////////////////////////////////////////////////////////////+/v7////////////////////////////////////+/v7////////////////////////////////////////////////////////////////////////////+/v7////////////v7/zs7Pvw8Pzc3Pm9vfOZme2AgOpzc+fx8fzKyvaMjOtNTeE0NN0xMdwyMtz+/v7f3/mTk+1HR+AvL9wzM938/P7Q0Pdubub9/f7Pz/djY+UwMNxsbOaRkezJyfZDQ+A9Pd5mZuWAgOmHh+t3d+jFxfXh4frr6/vd3flJSeCPj+zk5Pr+/v+7u/NycueYmO03N921tfKBgepWVuLR0fd5eeja2vmCgupcXOPV1fjz8/2SkuxBQd/AwPS0tPIyMt2Hh+rW1vg/P95CQt+mpvD29v3q6vtxceeXl+3a2vj6+v63t/M4ON06Ot5kZOWIiOubm+7p6ftSUuL4+P2pqfE8PN7t7fxnZ+W4uPNKSuFLS+G5ufM5Od2YmO74+P7l5fp2duhZWeNaWuOqqvBERN+rq/D09P05Od7e3vnDw/VMTOGgoO96eug2Nt3Hx/X7+/4Nm4E+AAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAM8SURBVDjLdZP3X9NQFMVfFIUWLJRpVcoeYlVEQEUExIUyFFFRcfJqqiyb12paDQQKpQXZorJXARcbFRC3oohb/yHTJIUW8fyU5Hxz7/3cdx4ArDBs2XK7FSvtHSB0sF+5wm75MgwDVsIEQkenVSJnF/mlS3IXZ9EqJ0ehwIrAxK5u7h644vKVnNzcnCuXFbiHu5ureJ7APL1Ww7z8gqtKAjEilFcL8vPgai9PzOJL1qjU166TCGlYIURev6ZWrZFwBLZ2nbf2xk0lobESobx5Q+u9bq2ZkPr4UoVFNNLYCNFFhZSvj5QpIHSC6uLFvpkoVkMnIQbEXn54idLSnWZkeVaW4H5eYiD0p3SlXH9ElOnLy/VlBIcQpTrKXwgCAuUGmv/FWFF561ZlhZEvSBvkgQEgKLiqGnF+TW0dZFRXW8MRqLoqOAiEhNazr4huUKsgK5W6gR0EKetDQ8D6sNsc3niHgryoO43ct9th68EG/C77Qt9rgvNquseOhe7iGwCUN7MAqW9ZAFr0JAs0yyGQ4a1chbb2BaC9javQisvAxo5OFiC6ulUWX9XdxW4GdXZsBJs297CAiezFLQDeS5pYoGfzJhC+pa+fG/n+g4ec//DBfe5Lf9+WcBCx9dFjbtN09cAg00U1OFDNrZZ4/GhrBIiMGhoe4Vc7Ojb+5Mn42Ci/+pHhoahIEL1N9tRI8gdIko2NJMkfJ2l8KtsWDQTbd2h1z/g4mcyZNPGheqbT7tguAFhMxM6Jyal/AzM1ObEzIobJHBa7S/bcQCyOHGF4Hhcfy6ZWkLA7sV1vGzpET7cn7kkQcLGX7t2nffGSMFn//+q1dv9eqeViiA8kTQy8sco9Mfr2XdLBhaslOJSc8v6DZr4J0nx4n5J8SGB1OVPTYP6MZVBEfMz3SEu1vd6HveGnWb4JMfsZeh+x8QFIjw+cM3xhCeLL+Fzg0XRbH2AZx0Rfp83xRcppteh4xqICDHEiE377bl71928w8+Q/PkNITml/TCFU9kN7SrKEz6z8dJb8569fP+VZp2OXApgxzsQpZmYUcWcylvQZ4uw56vdv6tzZ//jMyZ+/8OfPhfMx/wOYMS5mZ1+0HeAvs9msMpv5tz0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjUwOjU2KzAwOjAwoWvEDgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACTFBMVEUAAAD////////////////////////////////////////////////////////9/v/5+v/////////////////////////////////////////////////////////////////////////////////////+/v/////8/f/////////////////////8/P///////v/////////////////////////////////////////////////////////////////+/v/////////////////////////////////////+/v/////////////////////////////////////////////////////////////////////////////+/v/////////////2+P/09//r8P/Y5P/D1P+1yv+txP/3+f/g6f+7z/+Xtf+Iqv+Hqf/+/v/s8f/A0v+Usv+GqP/9/f/j6/+qwv+kvv+pwf++0f+Gqf/f6P+RsP+Orv+mv/+0yv+5zf+Jq/+wxv/d5//t8v/z9v+Us/+90P/v9P/X4/+Kq//U4P/9/v/2+f+cuP/k7P/1+P+xx/+lv//p7/+2yv+gu//m7f/4+v+Qr//a5P/T3/+FqP/n7f/L2v/6+//y9v+sxP+Vs//C1P/8/P/V4f+LrP+Mrf+6zf/F1f/y9f+vxv+KrP+atv/7/P/N2/+Nrf+Nrv+4zP/W4v+VtP+WtP/6/P/C0/+MrP/D0//w9P+euv+SsP+Ssf/N3P/c5v/I1//q8P/e5//8/f/tCMxjAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAyFJREFUOMt1k+db01AUxm+U1QKllT0KAlXUInsjoOICRREVFZGRMMrKTSFlBVoKKGgZUqZShiJDUUARFyrrHzPkJrRlnE855/09J+9z7jkAcIFhx47b2NrZO+C4g72drc3xYxgGLAITiR2dnCUuUqKkhJC6SJydHMUiCwKTnXB1cydKy8pVFRWq8rJSwt3N9YRsj8A8PL3wyqrqGhJyQdZUV1XiXp4emKB7+1Dq2jqalbiAkK6rVVM+3ojAfP3kmvoGkld5hmyo18j9fHcJ/4CTVH0jbaWzBN1YT50M8GcbiJ1wddN+fZdoUuNOYgzIPAOJZqE/ZGiaEb7JZiLQUwbEQVRLK+TNaXVtbTotbxa2tlBBYhCsIPQ0KrR3dD57/vxZZ0c7Img9oQgGp06XdkHUsvsFhbNBvehGv4RdpadPgZAzL7kU0hVqnA91BWcaki/PhICz0nKEG3p6BaC3x4Bq5dKz4FyfikuY/lf4XrzqZzhA1XcO4ANGDqAHh8zA0CDnGxoHcKDsG0bAyKgZGB1BwHCfEoSO1aL/vX5DCTr15jWq1Y6FgvNh4ygx6QkBIPQmVBsPOw/CIya0KGudnEL61CQaLdRORISDyKjpt5xlknk3w/kcmnnHF95OR0WC6Jj3s3NotMx848KHDwuN80iHc7PvY6JBbJzy46KJf0AT/ekTbeKf07T4URkXC0TxCZqWz4ywBVDYO5L53KJJiBcBLDEyaWl55eDCfFleSopMZHcOS76gLPkK968c1JekpCZzWytKu3hpVMdYLy2jG710OU2E1t4//Ypm9ZtlDwjXVjVX0/2Fw5Bdu/79x5wl8PPX0vUb5tMSZWTe/L1ovgxILv6+mZkhsjjOW1l41br5star3LNuWZ/3bTm+/IefBvP3Hy6/Y6UDkJ2qGNMjG3BOP6a4m22tAyznnkSt27UBSZ1acj9nXwOWeJCLb6ztjnptA899eEBnCe9Hms0VCFc2NY+8D9HZkT/OGzAaDMaBvMfJhwGsjScpW+vrWylPcg7VWSL/KbW9TT3NP0JnX76gcGensCDxKIC1UVRcXGRt4D+SPpTGEJHXggAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NTE6MDYrMDA6MDAGSaFUAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAClFBMVEUAAAD////////////////////////////////////////////////////////9+//58v/////////////////////////////////////////////////////////////////////////////////////+/v/////9+v/////68v/////////////////8+P/////////////////////////////////////////////////////////////////////////+/v/////////////////////////////////////+/v/////////////////////////////////////////////////////////////////////////////+/v/////////////36//16P/37P/u1P/erf/Lf/+/YP+5T//47v/kvf/Fb/+mIf+ZAf+YAP/+/v/v1//JeP+jGv+XAP+ZAP/9+//nxP+2Sv+ZAv/+/f/nw/+xPP/v1v+1R//Hdf+ZA//ku/+hFf+eDf+zQf/Daf+7Vv/it//w2v/15v/u1f+kG//Hc//x3v/dq//v2P///v/Mf/+aBf/ao//+/P/37f/AYf+rLP/oxv+8WP+yP//s0f/AYv+tM//qyv/58f/Jd/+gE//fsf/Zof/qzP+fD/+gFP/SkP/69P/05f+4Tv+kHf/Lff/s0P/8+P/bpv+bCP+cCf+xPv/Dav/Ngv/z4/+6VP+bBv/kvP+oKP/79v/UlP+dDP+dDf/26P/DaP+YAf/26f/qy/+yQf+XAf/cp/+kHv+lHv/cqP+cCP/Lfv/79//y3/+ZBP+sMP+sMf/Ulf/u1v/gtP+lH//PiP/Pif+8Wf/t0//iuf/9+v/1rAt3AAAAY3RSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD++P3qw/2N+0j2GMcHYx68BOkMd/x2IKf+pjrS0WDvXxSL+Cy3TEsIdRyhoDXINOSK8rY72mnrhe2jCycJAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+cFGQAhKwJH+lwAAAMmSURBVDjLY2AAA0ZGJmYWVjZ2juRkDnY2VhZmJkZGBiTAyMnFzcPLxy+QkpqaIsDPx8vDzcWJpIJRUEhYRDQtPSMzKzs7KzMjPU1URFhIEK6CUUxcIjknNy+/oBAMCvLzcnOSJcTFGGHyklJFxSWlZYWF5WBQWFhWWlJcJCUJUcEoLSNbUVlVDZWFqqmuqqyQlZEGqZCTV6iprStDkQeqKKurrVGQlwMawMWTXN+ALg9S0VCfzMPFyCAorpjW2ASzvQwIYOymxjRFcUEGLqWa5pZCqONa27Ky2lqhji1saa5R4mJQVklpL4M6rKOzq7u7q7MD6uCy9hQVZQZVtZ5eML+woK+/KBkIivr7CiAivT1qqgzqGhPA3MKy7ImTksFg0sRssEMKCyZoqDNoak2GKJ8ydVoyFEybOgUiNllLk0F7+gwwp2zmrGQ4mDUT7KzCGdO1GZJTZkMUzJmLUDB3DkTB7JRkBp3p8yAK5i9AKFgwH6Jg3nQdBt2FiyD2LV5SBJMvWrIYIrZooS6Dnv5SCKesPQ2mIK0dEpyFS/X1GAwMly2H8FasXAWRX7VyBURk+TJDAwYj49VroAG3dt16oC1F69ethQbtmtXGRgwmphs2boKq2Lxl67ZtW7dshspv2rjB1ITBzFxn+44yeGTu3AmPzrId23XMzRg4LSwrdu2GJQdQkoQxd++qsLTgZGC0MrLes3cfZoLZv3ePtZEVMM0x2tjqHDh4CD3JHdp62M7eBpxqOR0cnY4cPYaaaI8dPeLk7MAJSfZyLq4Vx08UIqkoLDx5qsLNRQ6WMQTdPfasO42sYPOZsx6eiKzF6eXtc27HebiKwvM7zvl4e3EiZU5fv+TcC4icdTFX1M8XNXv7yyZfaoEpaLmULBuAIs/AEGivsrAd4ozCze0LVYICUeUZGIND+C63gTJQYVNbMV9oMJoBQBVh4clXroKC+uqV5PAIDHmgCsnIimv7Cgv3Xa+IlMQiDwzyqOiUG1Om3EiJjrLBpgDojBi7mxcu3LSLCcYqD1QRGzft1q1pcbE45IExH59w+3ZCvBUuBUBnJCYlJaI6AABB269xUXFElwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyOTozNyswMDowMEpaoL8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjI6NTE6MjArMDA6MDAnvJMTAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAMAAABjq9sOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACbVBMVEUAAAD/////////////////////////////////////////////////////////+///8v///////////////////////////////////////////////////////////////////////////////////////v//////+v//////////////////////+P///////////////////////////////////////////////////////////////////////////v///////////////////////////////////////v///////////////////////////////////////////////////////////////////////////////v//////////////6///6P//7P//1P//rf//f///YP//T///7v//vf//b///If//Af//AP///v//1///eP//Gv//+///xP//Sv//Av///f//w///PP//1v//R///df//A///u///Ff//Df//Qf//af//Vv//t///2v//5v//1f//G///c///3v//q///2P//Bf//o////P//7f//Yf//LP//xv//WP//P///0f//Yv//M///yv//8f//d///E///sf//of//zP//D///FP//kP//9P//5f//Tv//Hf//ff//0P//+P//pv//CP//Cf//Pv//av//gv//4///VP//Bv//vP//KP//9v//lP//DP//aP//6f//y///p///Hv//qP//fv//9///3///BP//MP//Mf//lf//tP//H///iP//if//Wf//0///uf//+v8BRUUXAAAAYnRSTlMAAAMQLWqp1fMBEUOe6Pn8/gUukuz+CU3EW9kGUNsCMsvxrzbuePq1/OD4/erD/Y37SPYYxwdjHrwE6Qx3/HYgp/6mOtLRYO9fFIv4LLdMSwh1HKGgNcg05IrytjvaaeuF7djGYAwAAAABYktHRAH/Ai3eAAAAB3RJTUUH5wUZACErAkf6XAAAAu1JREFUOMtjYAADRkYmZhZWNnaOpCQOdjZWFmYmRkYGJMDIycXNw8vHL5CckpIswM/Hy8PNxYmkglFQSFhENDUtPSMzKyszIz0tVVREWEgQroJRTFwiKTsnNy+/AAzy83JzspMkxMUYYfKSUoVFxSUFSKCkuKhQShKiglFaRra0rLyiAAVUlJeVyspIg1TIyStUVlUXYIDqqkoFeTmgAVw8STW1BVhAbU0SDxcjg6C4YmpdPTYF9XWpiuKCDFxKlQ2NMLGm5szM5iYYr7GhUomLQVkluQXmsNa29o6O9rZWmINbklWUGVTVOrug3u/uKUwCgsKebmiAdHWqqTKoa/RCuVl9YHmgir4sqJZeDXUGTYEMCK9/wsQkKJg4oR8iliGgyaA1aTKEM2VqEhxMnQIRmzxJiyEpeRqEM30GQsGM6RCxaclJDNqTZkI4s2YjFMyeBRGbOUmbQWfOXAhn3vxCmHzh/HkQsblzdBh09RbAfJ0KU5AKC5kFeroM+gYLF0F4i5cshcgvXbIYIrJooYE+g6HRsuVQ9StWrgLaUrhq5QqowPJlRoYMxiar16yFCqxbv2Hjxg3r10G5a9esNjFmMDXT3rQZEYVbtiDYmzdpm5kycJpblG7dhi26t20ttTDnZGC0NLTavmMnpnzTju1WhpbANMdobaOdsisfXT5/w25bO2twquW0d3Dc04ymIr95j6OTPSck2cs5u5Tu3YeqYN/+UldnOVjGEHRz375yLbL8ugMH3T0QWYvT08v70ObDCPnDmw95e3lyImVOH9+knCMIBUdzRH19ULO3n2zSMXjibjyWJOuPIs/AEGCnMqcF6ox1LXNUAgNQ5RkYg4L5aprBGai+uYgvJAjNAKCK0LCk4ydACk4cTwoLx5AHqpCMKD0JDPKdp0ojJLHIA4M8Mir5dH//6eSoSGtsCoDOiLY9c+TIGdvoIKzyQBUxsRPPnp0YG4NDHhjzcfHnzsXHWeJSAHRGQmJiAqoDAOgCnVLAYqeOAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1MTo0MiswMDowMHZMi70AAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAADj0lEQVRIx5WWO2xURxSGvzN7H7a0AdFRkFSQBovKqcCyBF0kmlDS0SHRpkJKEYmGEBeENImFRJMoLlLk4caJrCguEDSguMEijYMQAu+uwfZ672v+FHe93nu9fnCmO3P+f87jn7nXGDIBNPiAD5limgk+oglsssoyf/E3/7FBAcZIEzKd0CXd1yslPve+ULm897kSvdJ9XdIJmfaBhzqnu1qTL5QrUVeb2tCGNtVVolyF5LWmuzqnUCPg47qsJalQqi2tq63W0GprXVtKVUjSki5rfIfC+rWP8xlf6GNPSoLf3RruDo6YCIet8CU/s21llCDiU77S6YJtMvZtEgJCxmlgz/mceVLDAY4Jbh4OL3cytinQaW4ygQMnOM4NJv2h8GEKD5Pc4LhwhFzgiifZA9fQqlMkeLjCBUJHk2s6VpBW4EIYITExIVYhMSClQMe4RjPgDNMixVfgJdhhgCjz0yDC8KQ0sGnOBFxUU2S1XsfENAaeBg5Hb4gCMsZQ0y46pnBFZQuiCrykiIkqnRAFOKYcZ0uC4fQj3J7+OyKsEleA46zjpMzXTnMjhmm4WlYeGScd8d7Q0VoY6Y8dvu6rzv0Qv3e0rFaxx48IFb52lsOg5XiGH67N8GQjCbKKVqABnmeOR+YdrgLJSGsUIq1pxeEwzyPHApkjqOWQ0KMYeAp6JLXzAxxkLDie8NRqMzYKenTpss02Xbr0KGpSjzB4yhNHh1nzAWFtZCKj119ZTakQEmCeWTqOlAUWjZhG7draYHRWu+YNYgwWWSB1iJfcsdcBcaWMHZK6fIQjJsBec4eXyBnkLDFjPiKCfUS0C4eICCv4miVyw4HBFj8xZ4oJD6QoH9UIE3PMsWXQF6FY5RtbbhCPuIdV9cU0sH+4x2p5kitrxfOYGVsPR3RieHgxIbbODI/xxoAADHJ+Y5Zk5w0cBQ+JIWGW38ltkNNOx8UaD2zR9V+jupTLV8nJFnnA2u73dahkg2W+5XkwshPl8PiXeyxbxV+ZO3/wvXWiWhll+hHW4Tv+tBpx1Xr8wK+WjhEMKIQRMIal/MKP9DjYhD7RQylRRy211VZLHSWS9FCT4ggmdFUvvLr9f4S2uvLSC109EhyEmrqtd4U21FZbGyqkd7qt5hEJQOiU5pXnequ3yqVc8zp1ZHif4rxWvFKl8tKKzr8XHIQCXfdvvLz8G11X8J4E/U7cUkst3Tqo+v8BGqkQrMMFpyAAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjUyOjAxKzAwOjAwKNkk2QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAAD/0lEQVRIx5WVP2wcRRTGf29u9/44a5/Pd2cHEagIEgoFRYSQHMtSQkVJOsoICUVKi+gokFIgghubArAipTHCBVL448ZBFiI0caQ4whGKFRoTx3aS89k+fL7b3ZtHcb7zzdkOyWyzOzPf99773jezQsdQgAS9vMIIo7zJqwTAvyyzyG/8zj9UaIBw6FBUNKfn9Kquad3GsY001FAjja2Nta5relXPaU5FO1DSEd3nDT7kAwZiiaixS0gMeCTJkMbHUzaYYpK/iMQlUMjwLp8wHFNli01C3DhJ+snSgwd/8Dk32JV9AoUM7/Opvl6nRInQTa6lDkny5EkhS3zGD00KAYUk7/GFvrbDKtvoUSKhCH28xDHkAR8zQygIqOEtvtbTO6xQ4UiN25n08jLHkNt8xIJYo5DlEqdrrP4vvLlaYZUanOYSWcXgc4bzMSW2D9S9/7gU25SI4Txn8A0BF7SvSsmpXVES9FGgQB8Jh0RQSlTRPi4QeJxktEGZyIELOfKkSAAN6pQodwQQIsr04I1y0uOsBhFbXVoPUSS5B/BJkSbJupPjFoMkAjlrGMHUiBydsxTa8JaNCmTbfgCIqIFhxHDKml2HW8iR6uqGkCLn7FF2sYZThuMqobM5cwDeosg4MyEqHDekwDoLCcyhHjAknG8LkDJYugDW6XunuLaLELCGkuA7C3WiQyiUiLoz4yNQMtwXm3ZqjdiicYCgwZbjFUgjlvuGW8am8RynldnoomiwQdmxmkcaY7llmCXyCZwcYtZYp9qeqbLOGrETP8CHiFmPBe567wywje2wasgaFTL4QMQuOx2roBgG8OAuCx5lJs3bgclSdrKwVKhgWu3qckaWAGOZpGwImWXOp0i669gKYLHt9/34aYr4MMcsoUF5xBV5HDBIoqt9sve47UwwSIA85gqPUCMQc5MxY3MMwBEm2odDnhymwZfcJBYMCOzwPdOeFuh9JkXzRszjKdNMsyMtP6IsMy6LPRRJHkmhQJIiPcifTLDc3Gb2FLbMMyab/RSOOErNzQX6kU3GmMcKbQIQiPmZSannySKHngWhnzxSZ5JfiKVN2lJceco1mUtRJHOgDAUyFEmpzHGNp/v/1458BRb5igd9FLrOJ4BPgV74mwkWOxvrFCxwg28p5+nHdOSgGPrJQ5lv+NX1RbdiNab4KREOEbSVUISAIRIhP/IdNZ5FIPCQCe6kGdxraLN5g6ThDhM87L4tD/RMYJ5xVrIU9+7ABEWysMI4tw9etoc3/TpTUimQxWDIUkAqTHGd5x2KntAZjat6T+9pVTXWGT2hz41vUgzrktVN3VSruqTDLwQHRT29aJ9YtWqf6EX1XpAAFA30spa0pJc1OBr+H/Nbm042akI7AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1MjoyOCswMDowMP9kZncAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAAEJklEQVRIx5XVT2xc1RUG8N+9M2M79tgxJDLR1MHYjosQrdRFVFUKUSToqsuy6xJVqpDYVuy6qMSiKmSTdNHWQmKTqllUon+yIFRRVbohSAQRgRxRJXWwSQzGjpzYnsnMOyzsOPPGNoX7Nk9P9/vO+b7z5yVdJ6Bi2FEnnfI9j6vjrnlX/cu/3bSmQ7LnCZHikXguXo9b0SzarWIzNmIjNqNVFO1oxq14PZ6LRyJFFyp1Ra95ys/9zKPNtOmuVeta6DNoVN2A/vClc2Z97H4qEwQH/NjLTrSsWrTonnKcIQ0No/r4j99420Z6SBAc8FO/iu+u+Z8b1iVlpYEw6AkThqVrfu0vWxSJoM9P/LY49qWP3RL7mSQkRzzlUfkTv3RBK0lE9gO/j+PLPrQk7QvfNtqY7zskvecXrqQiBwe95Piaj/4vnCRZ8pE1jnvJwZDVPOP5phtu98BDKBSix87kthuaPO8ZtazuhRhZdb2kPYSaMVOmjKmVSJJw3aoY8YJ61YxTLQs25S549h2ThlTRds91CwoPa79pwaj+U2aqno36psVS9GTGMYM73+qGDbrWlWOyaFpfPT2bnYy8ZqOUfMOkoS7KZMikRknIhjWRncye7uQ7Jf0V44Z3+T9sXKXkwx2d7OnsSKT1nqv1PYqZ1Hto10VyJOsPnVLx+rsidZ+K/lJBO4L+rEg9gLZiT4JCu4cwUWTLyUAp1bs2SpEeZLbhbknagMRyNpeLsram21q7CFpua/Z4lQtz2bu5GFHbiZkkN833pNs272ZXq4eaEbnwbnYx3T9grCSiac6c1Z0vq+bMaZYEjDkg3Xex6ooP+n501C2drj5bN2fJQQPYdMeKdqlXK47q4wNXqlbMVn54ODfMl3qvbcnS9izYNacNh1UKs1aylosuDZgy0jO2WdLR2X7rho+YMsAlF7WysOjVvHTYjGpP+dL2Uy5nzYzD8pJXLYqcaHvH6UoxboI9OqAMZ8K4Ssdr3tFOMol7/ux8f0wa+1qKwJgn9IfzzruX2N4iYd6ZdHXUtKF9KQJDpo1KHzprfuta3tKqcNnpvNowsc8oQcWEhrzqtMuKLW/yA7u0/d1sbk5qSHvOQtIwKTfN+of2A2t3FmEKX3gjXdpKsldGYNS0oUiXvOGLh//Xh5tU4qrf+WTMpP5dGQyYMsZ/nXW1u7C5+1LibX+0MuGoSlcOoWLc46z4g3+W+yL3BNp0zt9qrWMO7TgRkkOOqbX81Z9s+jqCxKfOen/EkwbZ3sODnjTC+876tHdb9mYgcdkZC4+ZVgVV0x5jwRnv7V62uwjAm87ltUkNWd4q3ppz3vRNT4jxuBDt1Xgr3orViHZciPH4xvgtihNxrYjP4rMoIq7FiW8FJ0Q1Xiw+70Qnis/jxah+SwJC1OOVWI7leCXq+8O/AuFKp/3c1qOQAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1Mjo0MiswMDowMJ17ML4AAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAAER0lEQVRIx5XVS2xV1xXG8d/evrbxC7CpMbVSECGg2qlRU5tXDEVNOmmHzazDqFIVKdOqsw4qZVA1RZGgg7ZWpEyoyqBS+qADgpxSOglYkIQE2aFCIuGNMcEOhsu9Z3WAgXts0yb7zI7O919nfevbeycNK6BJl2/YY69vWa8Tcy4445/+5VOz6iTLrhApuuPFeDOuxL167W4xF7fjdszF3aJei3txJd6MF6M7UjSoUkP1ZgN+4sd67qRZ110xYx5tuq3Tq0t7uOmgMWfdT2VA0Ob7fm503iUf+9iMcp1ugwb1a+PffuUd8+kxIGjzI7+ILTdMmHBLVu40UFht2LCvSVN+6c8PEImgxQ/9unjmgnFT6vLyJik02eJ71svn/Mxh1SQR2bf9rhi54B/OS0/y+KHRNvqB9fJJP3U6FTlY5VUjNxz9v3KS5LyjbjDiVatC1my3l+446ZNF8lAsPLEI8YmT7vCS3ZqzTi/HyosmRIM8FFbYbJttNltRgiRhwkWx0ss6Kzbbe8dHZhusC9mQYWu0oGrahA8VHs9+1kf6dey1ueKF6JxztlQ9222X7kfv1ui1yvES4qxd2jvTC9meIl/zecnnAdsb5A9itN2AaGjkc9cU2Z7s2Vq+Wuq/YsiaRdNI1hhSKflwVS17NltXTzMl73v1LBOlrEdvaR4z6sm6rDXUSoB2LctmoEV7CVATtGZF0lz62ar6soC6aqmxZokim846SoCbbpcqPfyz226WAB0y09lkpVhbAsyZMr8EMG/KXAmwVqUwmb3XVPRpa6iZfeCUakledcoHpai16dNUeC87ku6v9HQpqnOOedflhXfhsncdK9UPT1sp3Xek4rT323duNan26INsxjHn9enCrKs+VS3Vb7ZVO+87XTFjrLJ9Yx50WlNDG/edc25hL5BLySgM2qhSGDOTVR0x3mWHPkXJzCZZTU3WVDKv0GeHLsYdUc3CJa/naxs8r3XR+NLCUx7nCqM2yNe87pLIiZrj9jUXWw2zTALKcr5jSHPdbxxXSzKJL/zJoY4Ysam045bKwyYjOsIhh3yRWPAmXLA/nem3Q88TESH02KFf+tABFx58lh/0qnDCvnxr0PATthK0GDYo37LPCUXyCECi5m/GKveGfVNadi8kA4ZV7hnzd7XHmXnoeLjhrTTeY6evLzEz0G+nnkjj3nLj8f3akI/EGb917hnbdS4BdNpmE/9xwJnGwZaOnsQ7/mDmOUNaGhChxZDnmPF7R8u5WHx23XXQX1dUn7f+kRMh2WDUiqq/+KO7/hcg8ZkDTq31XasXRsdqe/RyygGfLb76lpyeiRP2u7jFTq2g1S5buGi/k0tvzuVv8rcdzLPbDGjSZMCIPOugt33ZFeKpOBy1y/FGvBGXI2pxOJ6KL61/gBiNqXpMxmTUI6Zi9CvJCVGJV4rrtahFcT1eicpXBBCiM16L6ZiO16LzyfL/AjzmtojnBFLlAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1Mjo1NCswMDowMDIBBRoAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAAEXklEQVRIx5XVS2xdxR3H8c/MuX5g/CBGTQzkATIggQt1K7fNgzgI5YVDWmjaRdsdrRQhsa2666ISi6o0m6SLtu6CRYIS1Er0EdGYEKV1GwlbTaxGRYkCgWAiYuKH4kaxfX3PdOHg3HPttDBnNXPm9x39/vObmaCqJci0WGOzLb5orWb8xyVnnfQ3H5pWIVRpQkEe3OUrvq/Piko2G8shR1SXGvKsYtJRB/3TlBSWAhJ1HvFD39N+LUz40EVjptFipQes0a41mXBIv3eUQxGQuMNWP7Zp2rtO+YcrKov0JLPKRht0auHvfuZNN8ItQOIO3/KT9PCoYwaMiUV3EnIrbbPdauG8n/r9AiKQqNfn55UH3/GqIRXR8i2X+arvekR2wY8cNRcEUtTtV3nPv/3WiFhYubYluS/5gUfFYXudCXlMtHlRz6iD/1dOEI04aJQeL2pLojpP2HPNG4Zr5EmuoiJfyEcVYtgbrrHHE+pKmj2ft15wTF7lPUnu9LBVuOK864JbG5c7pkd3a3zeYMlDtkwbNCGrkke9drhXI2Zc9hd/lS8iogmDOrVt8VDJU6l5yqnC6tEe39CxKLjXal/wuwLilG9qbQ5PRZsr8QNXC8436KuSE3Tos6FQjas+UIk2R11z8X2panq9XvfV7EZwn171Vf3kfXNRV9QxH8YKYVnrnmWiFN1jrbxqZMx80BE1JLOFqS0al81Ao5ZCf1aiIcpDjeCG8rKAshs1wEAejWfaCm4/Nl6IzqfFHfdxoTJtMsajc/X5uoLXScOmlwCmDZss1Gad+ty56O26fJ3mqjUzJx03U5DPOO5kIWrN1qnLvR0NKN/t8SpAMOU1h723OPKew14zVWUgedzdlA2UnDHSuv5JQ8pVObviiBEPaMeEi86ZKWS13pNaGXGmZFJ/3dceixu9pVRViVmnnb55FsgK7iu2eExdrt9kNGfAiXa73F+ISZDJlJVlskL1c/fbpZ0TBsxFyWUvZ2NdntVUc/JvfdXbeafndMnGvOyyFAPzBu1ryHttY5kEFNPANr0aKn5h0HwQCVx32JG70k7d0v9AJEm3HdqSI464HrhZm+SS/eFsp11W3RaRJB2e0Sn8ywGXFqbFBbdyQ/ZlUxtt13hbQKPtNsqm7DMkDxYBBOb9SX/97E5fF5c9C9F6O9TN6vdn87cy82nNk6teCSc67Na5xEaSPGi3jhROeMXVsPi7Kh+Bs37pwpf1WbEEsMLTunnXAWert7Vw9QTe9BuTW/VqqEIkDXptZdKvHS9edrV314xD/tg096xHFyuRRF2e0zTnD16tOaa1gMCoA06v9R0rb3pnpW9bw2kHjNY+fUtuz8CQ/T7q8Ywm0GS3Hj6y3/DSl3P5l/x1h7Lpp61XUrLeTtm0Q173WVuSVqejaf5i2pv2pospzaejaXX6zPoFxKZ0vpKG0lCqpHQ+bfpccpJUSi/kn5RTOeWfpBdS6XMCSFJzeimNp/H0Umq+vfy/0JikOgfvvUIAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjk6MzcrMDA6MDBKWqC/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIyOjUzOjA1KzAwOjAwM1Rr9AAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAApCAQAAAD+fOO3AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfnBRkAISsCR/pcAAADzElEQVRIx5WVTUxUVxiG33tnhmF0iJ0iCVF+NJpghTSUVNOoTTMrCS1qm4mJZVFSu+h048Jg2dCdSatb3TWkTaw2ISkbBY2waGBBJGmsoggkasEfyDhDsQjM33m6YGjnzgw4fmd1v++8z7nnnPecYykrkCSXylStD/WRGlQjv6RFTWtMv2tIM/pHacnK0lgOuaW31KQ2tSiQci3bcSstySUvPuNOa159+kV/6G9h5QOQPHpHX+lzvR21ZjWhO/pL85ICqtW7qlOlylFMl/WjxpXM/gtJCB+tDEOMQU6xEwtlNYudnGKQGMAwrfjIk7cxYRink20OaXbbRifjGJigLQuBKOEYU0mGacFeVy6ETQvDJGGKY5RkENg0MZpmiEMbitfaIYZIwyhN2KvjB+iG+xwuSi7EYe4DdBNAwkMrCy/owFU0wEUHL2CBVjwiQG+am1TkdSsjSDvtBCnLq1VwkzT0EhD7iUUI5y3WcfqZ5BnPmKSf43mLGyYCMfaLTpO4x/acXT/NQwxrYXjI6RxnbOceJkGnuJZI9eQUj/IgS76KeMDRnEF6SKS4Zqt+xR5Ttq88Cmm3nFa1tFsheRzmG9OKrXpblUlr2tG5TrvkUm64tEt1jsy0kpYqbXmNlh2Fcm1Wodiscsf3sozktWVsbXIUFhUvCIhr0fG9SbZkbEXdqnAUHuu5Y03W5vxcjx2ZCrmlqK0Jr9nrKER1XbE8QEzXFXVk9sprNGHrltfUa4uj1KNLeuXIvNIl9TgyW1Qvr9Et0czSU47k+KyaLm5nvGC4TRfVOT2O8BSWaLaoVG/8g9/0pVYcI/i0Tw2qlDSrMY3m7FSpuvWZvCP6VHg5SXqGUMFzV0JJwXyIGUhzEq+wqGEgyQB7ij7OexggCQPUYAnhppm5JS7gL0pexgWWYI5m3KzuMH6+JT3L1zmHqlCz+IY5SHEG///XqsUOrhgzSvA1CIsgoxjDZXZkvS4ImwPcSXKFmg0BNfxKEv7kAHbuy+ChnfkluihdV+7jO5Zhni/w5Jkdi62cNyuPCOEuKHcT4hFmhfNsxVJ+IBroh0EaCwLeYxAM/TSgdQLxCVNwscAdXcFFgCk+XlcuSZRyhtgC4ZyV8BFmAWJ0UKoNAaKKn4nfJ5j10LgIMg5xfqJqw/EziH2MwFVq/wPUchVghPdfK88g2niS5PuMtf38QBKe0FaUPGPtc7yMcAIPHk4QgZecy7JuEYgq+kjdpZFG7kKKviJmn4M4yGSKG9wgBZMcfCO5Vo0XNpEECUyEcObgviHCz1miRDm70ez/BYYI/lv2W3BZAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA1LTI1VDAwOjI5OjM3KzAwOjAwSlqgvwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNS0yNFQyMjo1MzoxNiswMDowMM4WcfcAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC\",\n anchor : [0.5, 1]\n }\n ],\n /**\n * api icons used by drawing control with a good ratio !\n *\n * @example\n * image size : [43, 32]\n * scale : 32 / Math.min(size[0], size[1]) = 1\n */\n drawing_api : [\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAgCAYAAACLmoEDAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5wUZACIosGP4JQAABjBJREFUWMO1mFFsXFcRhr//3F1713biOCVxotiolJiUlpLKtiBFiiqqgpS3tkhFQjwU8QBRpUr0BSHEA+IFVNoIIVQeQ4CAKiVCoUSIFokEKUSENGpCYxJnnUQmteN4u+v12r7ru+cMD+tESbOO727DSFfn4dwz852ZOXPmXtGmDE0NkY/zuODYnGxWMVv8GEavyXJCGaBuZjFQnp+fL/b29prHU8vUOP/x823ZzLQL27vYy9imMe2Y2fFIMVN8AtgN7AS2AD1AFZgG3l23bt3xEMLJmb6Z8/2lfmvXptpZNFwYxsltCRaeB74GfB5raNMqKg07CRw07A2Zrr+z/Z3/L+zoxCg+eEnaIfRd4HmMrrRaDFvEeAP4iUwXAsHODJ1Jbb+lNIhcpGBhO/AjjGcMy0jp9yvUBXzdsC7Dvm91KwCp08K14tW6r28QegnjGURLoLcRZ4SeQ7ykrDaMFEZSL00Na7IIeAp4QVLbB/MmMPANSU8B0X2FHZkYwXnXB7xI46TfvRkzggUSS1i2ZRJLCBawVaIsqQfj2yGEvtHCaCrYVB4yzAWFz2J8rtlhMjMQ9mjno9O787uj9dH6DZVQKR9fOO7HamNbDFOzlBF6QtJjGH8jRe6mgpXJAV9CdDYFhfBk95MfvLzxZQayA900Qtu9p2dP5bXia8VjC8cewLgbuKHvacP+DtTX4kiXs4bDeIQm+RUIDGQH5vZu2Ds/kB3oB27BDmYH+/f27Z0fzA6WA6GZ5gjjM1g6jlQvGSbDttCkLhvGtuy2/PaO7Q800eeGOoY2bstsyzfNXUNAPynrfbo0aIQvt8pGyJDJaJU6JqkzUhQ1hRVg5NMwpPbsisw1hUGUfKla8ZXZZvMVX5kth/LCatcwopz2BkybswFjHMN/eCoiopAUcocrh0OwMH/7XLAwf6hyyArLhXzUpJwa5g27aFgghaQt7gE4QaNpucOqJOIQ5/aX9/fPh/nJZ9c/W+523ZsWwsKNw5XDy4cqhwbjEHc43e0XoQQ4uaJ/TUkVgNHxUXn8J5zcW4iHmjrfjIwyPqcckaLIm/exxdStHt3jWp4wZ09HFl059dCpNets2py1SNEU4uBqXpBE3epRNVSjOT9HNVSjNUCDYb8lMG1YqmYmdScyWhjF4z8l9CuhXWnX3UP+YZG9sPituYu1/9RxAXxwRFEguMZx7Ipjdk9P83qrsAAjl0ayiOeAfcDWtjGNqVAO35t7sXwkmg7ZOmRcwPngXBQFH5yCYDkfx4ufnqvEZzdtZms2tPhZIxLgj8Aw8B0g2wIgCCxYqJ9OLiz9uNqnYviqOTIOHA5FzgDMNd4OcWeufmZTruTgvSmv8ZYb0pX+80HDfin05Vaj46/6icWfVt/0Z5OyIsl0u4KbO7KVQQBBsBSwt1q5FAA4/cnTAFdl2odxuZW1Vgnl5SPxCX8uKRFhiKDGgV151BilAAqSBQkZ1oXZhpZhV4AtP5N/G/gFsJgKtG715GTyr+U348u4W1f4GiJhJpPeN+fG24IF6Pmgx5vZfjP7g9k9So81arC/6MfiA4tnLLGQAlSAM4iBdx0cdbnctbY/T25sv8GyLZc61PEK8LCZDTeFENhsuF77/eKJcM0vNunbBLpZaQ0RMFsELiFdACZL+Xy1N0laamTukNMPnyarrEk6S8I+PPM3PdkYV6zXQm35L7UTyYnkOroV/kZ4DWcmMKsDC8AVg79GmcyvDf6858qVMaA6WC4zcelSez85bpeRwgj+mu9zG90P6WSvnDK3lSlfP5WcWnq1eizMhFiRBMjMkLQMLJhREnZVcuMebpioLxWLvruvD6KIwsTEHbnxkWXnkZ1Srx5zG93r5PiCnBqFcrJ+eelnC0fr/0xmyRABCVCSNANMSZqMMplrGEkIdXzizTIRXT09/PvcuWYZdX/k8WOPo6y+oo36ubLaatUwH/9m6Wjt4NJ7yqoETGH2X4Pprlzu+lKtFksiymYZ2LWLtw8cWNPGfYMFGN4/nLMh+4F69c36meRY/MrCQT8XLksUI6k82dGxsDWO6ezo4Pz4eMv6P9rPig+J9Vns3/evRp2Z3/nxULJJila6FuvBbZgZX5yd5U/FYtv6/weDRwGc3Jre9AAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wNS0yNVQwMDoyODo1OSswMDowMDPIuVsAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDUtMjRUMjM6MDc6NDkrMDA6MDDVlNrHAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAABJRU5ErkJggg==\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAgCAYAAACLmoEDAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5wUZACIpx2TIswAABhBJREFUWMO1l0tsXGcVx3//e+94xmPHzsSxPXm4NK/adRKKQISUKjz6QIBKFIQUpMCiwIoFSF3RDQsELCIWCLEosKiggiyyQKWQSFV5pJRHUKpaVbDj2HnUedmOPR57xmOPPfd+h8Wk1JbH9Z1p+kmf7uK795zfd87/nu98otHxkScgbAYLYM4XbdFWsHZQCiNAhIgy2CwtTTmKy0YgaHfwj5cbchk0DLvcCh23xcyOftqiRzGOIB4BskArMI8xAbzFfOXv4J1nb2KIkWVr1KUa+qr/GMhlMR0HToA+gRlohbm1SOcRp/B0GucmGfrDBwy7/yg4T4he4HtgxzGl41kyQAvAabCTOF0GZwzHl4RfF2zXPoH2gn4MHMeURHG3LDASyA5gZIEBQsszM/IBwO4/CngZ4DlMXwcLVqU9Ji/IA/UifHzO0/VwmanhWJ97dbjyMR4HnkHUD7oaOgC+gfQ4ZrEDFu/F/i8DdAA/AXpr5t2sOsMIogicvftarY1JTaAtyDtDV99CnOjGLV0epg8jDtVcNQOwjx3cN/Glz3zcz7S1bM4XSrMvn7sQvTl4JYuZ1snEo2AHwc5Rq340Bmse4imM5JqgmiFwT3/20MxPn/sme3qyLVQz1vK1pz9VePbkC7k//e1CxzrASeBJ0OtAuHHE4sJi/aiGbJyx+4Hs3I++e6K4pyfbDfwfdu8D27p/+J0Txd092VlcjcAZPsYBXDyOmLASKEstsTrHgzu6mw8+9KGOGva8R3of3LJrZ3czztU0DNYNFutvree4Ta23kAj8QKotSknJRODX/pGrpaw5LkA9pWuutkMxnS/O5wvz07WWZ+aK01P5Quk9St3s/YU1c5iNAtGaNd9j6MpY6penX3GRc8WVS5FzxV+cfsUujd5oxq/pKsIYwXDEGPHqbGefgA7E50GrpSNRqYTBG0NXmwvFhfFdO7OlyLnkxHR+/OQLvy/87Ldnts+XFpN4tWBtGfgVaIDp4Q1LV7xjqO+o8LxdwKvA7nWiTxAEUbo5SeB7fhi5aGGxTBhG/voSsGvIniTy3mb4pQ1h42rWEONgp9ZPmQjD0C8US/7MbJFCseS/J2jVzu8wTRDjQIgfWYD9x8DcQ6DfYDrcYCe8kvbfwDM9iyMjgVvAcxA5D99397pQSJfLHJmY4Pl7X8TvuqaGoau3AJoDPYbY1DinjXsWntxZHhpIuaU2B+0y2s202fOs1aRWQTIIQ9KRi8LtO3Rga5vqvdZUMP0R+CjwLJBogNSlXfFy19JYJrDwqwaBBx4e8r1qj+FVZeHKyVQ40JnKezA4Hmm0vuZ76jJ09VUQV4D9wB4M1SOJhCtf31q583rSLQmpzaQWSenqtOrTrEWiFdSG2IrYHcF8fbBQlUN3/xzmpoDHQJm4sJ6Fs5lw6i+bwtk7AEimahTvTVWfkoFMMpMkwxKYTdYPC3D3EuzreZtyk4d0hDhyMAtbo7l/dVQmLgqzeM27hJlMumPSf+o5blePlrkI6dfAS2xUesxIuYVLWyoTAzLnYoAK8AzKwFsenPVSqduNRRag9RBAGeMqZocQ29arhL5VJjsq4682u1L+nYCt2IlAqrbFgHCYlYBBpH8K3syn09PJMIx//1kzJoehsw+Mu2Al0FNIyRUQgJC5pbYo99f2KHdN74JW01u9PCIsBC0Ct028EQTBOefc4BfHxiaubN683FkqcenGjfdf2uk/hh8uZZwf/MDkfbvaO1RBMYvSUfFC1/KN1wKrlKm2kTIzJC0DJTPywsYkbzSCKRPhYi4XtWQy4PtcvXZtlTbe90js/ZxI+AdDgucN75PvpDnhytc7l26dTbvCtCEfqAB5SXeBcUk3/SC4jVFxLiSqRGaBT7q1lf9evLjGz32BBUj0fwHn+ErkNf0ctM2zsJipTJ7NVCYHkZcHxjG7ZTCRTqUmF5eWypLwEwl2Hj7Mn198cUMf9w0WYNPDn04tkv5+RPCtdDT/Wnfl5inPwutAzpdmbzY1lbaVyySbmhgaHa3b/n2Fbe57AnO2peI3b2+v5PJZG89Vbtwq244ePGBfsciZXK5h+/8DFYWTIIiuQPwAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDUtMjVUMDA6Mjg6NTkrMDA6MDAzyLlbAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA1LTI0VDIzOjA5OjIzKzAwOjAwqUK8vQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAASUVORK5CYII=\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n },\n {\n src : \"data:image/png;base64,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\",\n anchor : [0.5, 1]\n }\n ]\n};\n\nexport default MarkersOther;\n","import Logger from \"../../Utils/LoggerByDefault\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar logger = Logger.getLogger(\"DrawingDOM\");\n\n/**\n * DrawingDOM\n * @type {Object}\n */\nvar DrawingDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPdrawing\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show mouse position control\n *\n * @returns {DOMElement} DOM element\n */\n _createShowDrawingPictoElement : function () {\n var self = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowDrawingPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowDrawingPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-drawing fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", this.options.labels.control);\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n\n // gestionnaire d'evenement :\n // on ouvre le menu de saisie de saisie\n // L'ouverture/Fermeture permet de faire le menage\n // (reinitialisation)\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowDrawingClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowDrawingClick(e);\n });\n }\n\n return button;\n },\n\n /**\n * Drawing panel\n *\n * @returns {DOMElement} DOM element\n */\n _createDrawingPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPdrawingPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n return dialog;\n },\n\n _createDrawingPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n _createDrawingToolsDivSections : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__content fr-modal__content\";\n return div;\n },\n\n // ################################################################### //\n // ####################### Panel container ########################### //\n // ################################################################### //\n\n /**\n * Creates drawing Panel header DOM structure\n * @returns {DOMElement} DOM element\n */\n _createDrawingPanelHeaderElement : function () {\n /*\n *
    \n *
    Annoter la carte
    \n *
    \n *
    \n */\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header fr-m-1w\";\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = this.options.controlLabel || \"Annoter la carte\";\n container.appendChild(divTitle);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPdrawingPanelClose\");\n divClose.className = \"GPpanelClose GPdrawingPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n var dtObj = this;\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n document.getElementById(dtObj._addUID(\"GPshowDrawingPicto\")).click();\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n document.getElementById(dtObj._addUID(\"GPshowDrawingPicto\")).click();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n\n /**\n * Creates drawing tools section.\n *\n * @returns {DOMElement} DOM element\n */\n _createDrawingToolsSections : function () {\n var tools = [];\n\n this.dtOptions = {};\n if (this.options.tools.points) {\n this.dtOptions.points = {\n label : this.options.labels.points,\n active : false,\n panel : \"draw\",\n id : \"point\"\n };\n }\n if (this.options.tools.lines) {\n this.dtOptions.lines = {\n label : this.options.labels.lines,\n active : false,\n panel : \"draw\",\n id : \"line\"\n };\n }\n if (this.options.tools.polygons) {\n this.dtOptions.polygons = {\n label : this.options.labels.polygons,\n active : false,\n panel : \"draw\",\n id : \"polygon\"\n };\n }\n if (this.options.tools.holes) {\n this.dtOptions.holes = {\n label : this.options.labels.holes,\n active : false,\n panel : \"draw\",\n id : \"holes\"\n };\n }\n if (this.options.tools.text) {\n this.dtOptions.text = {\n label : this.options.labels.text,\n active : false,\n panel : \"draw\",\n id : \"text\"\n };\n }\n if (this.options.tools.edit) {\n this.dtOptions.edit = {\n label : this.options.labels.edit,\n active : false,\n panel : \"edit\",\n id : \"edit\"\n };\n }\n if (this.options.tools.display) {\n this.dtOptions.display = {\n label : this.options.labels.display,\n active : false,\n panel : \"edit\",\n id : \"display\"\n };\n }\n if (this.options.tools.tooltip) {\n this.dtOptions.tooltip = {\n label : this.options.labels.tooltip,\n active : false,\n panel : \"edit\",\n id : \"tooltip\"\n };\n }\n if (this.options.tools.remove) {\n this.dtOptions.remove = {\n label : this.options.labels.remove,\n active : false,\n panel : \"edit\",\n id : \"remove\"\n };\n }\n // ajout drawing tools\n if (this.dtOptions.points ||\n this.dtOptions.lines ||\n this.dtOptions.polygons ||\n this.dtOptions.text) {\n tools.push(this._createDrawingToolSection(this.options.labels.creatingTools, \"draw\"));\n }\n // ajout editing tools\n if (this.dtOptions.edit ||\n this.dtOptions.display ||\n this.dtOptions.tooltip ||\n this.dtOptions.remove) {\n tools.push(this._createDrawingToolSection(this.options.labels.editingTools, \"edit\"));\n }\n // ajout export tools\n if (this.options.tools.export) {\n tools.push(this._createSavingSection(\n this.options.labels.export,\n this.options.labels.exportTitle\n ));\n }\n\n return tools;\n },\n\n /**\n * Creates drawing tool section DOM structure.\n *\n * @param {String} sectionLabel - section title\n * @param {String} panelType - Drawing (\"draw\") or editing (\"edit\") tools panel\n * @returns {DOMElement} DOM element\n */\n _createDrawingToolSection : function (sectionLabel, panelType) {\n /*\n * Exemple panelType == \"draw\"\n *\n *
    \n *

    Outils de création

    \n *
      \n *
    • \n *
    • \n *
    • \n *
    • \n *
    \n *
    \n */\n var container = document.createElement(\"div\");\n container.className = \"drawing-tool-section fr-m-1w\";\n\n var p = document.createElement(\"p\");\n p.className = \"drawing-tool-section-title fr-m-1w\";\n p.innerHTML = sectionLabel;\n container.appendChild(p);\n\n var ul = document.createElement(\"div\");\n ul.className = \"drawing-tools-flex-display fr-m-1w\";\n var context = this;\n // li click handler function\n function liClickHandler (e) {\n /* jshint validthis: true */\n // this == elem clicked\n context._handleDOMToolClick(e, this.id, context);\n context._handleToolClick(e, this.id, context);\n }\n for (var type in this.dtOptions) {\n if (this.dtOptions[type].panel !== panelType) {\n continue;\n }\n var li = document.createElement(\"button\");\n li.className = \"drawing-tool fr-m-1w fr-btn fr-btn--tertiary gpf-btn--tertiary\";\n li.id = this._addUID(\"drawing-tool-\" + this.dtOptions[type].id);\n li.title = this.dtOptions[type].label;\n li.addEventListener(\"click\", liClickHandler);\n ul.appendChild(li);\n }\n container.appendChild(ul);\n\n return container;\n },\n\n /**\n * Creates drawing tool section DOM structure.\n *\n * @param {String} buttonLabel - Button label\n * @param {String} buttonTitle - Button title\n * @returns {DOMElement} DOM element\n */\n _createSavingSection : function (buttonLabel, buttonTitle) {\n /*\n *
    \n * \n *
    \n */\n var container = document.createElement(\"div\");\n container.className = \"drawing-tool-section drawing-tools-flex-display fr-m-1w\";\n\n var button = document.createElement(\"button\");\n button.title = buttonTitle;\n button.className = \"tool-form-submit drawing-button fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w\";\n button.id = this._addUID(\"drawing-export\");\n button.setAttribute(\"type\", \"button\");\n button.textContent = buttonLabel;\n var context = this;\n /** export function */\n button.onclick = function () {\n context.onExportFeatureClick();\n };\n container.appendChild(button);\n\n return container;\n },\n\n /**\n * Creates input for color choosing\n *\n * @param {Object} options - options\n * @param {String} options.defaultValue - defaultValue\n * @param {String} options.className - input className\n * @returns {DOMElement} - created li element\n */\n _createMarkersChooser : function (options) {\n var li = document.createElement(\"div\");\n li.className = options.className;\n for (var i = 0; i < this.options.markersList.length; i++) {\n // radio bouton pour la selection\n var inputElem = document.createElement(\"input\");\n inputElem.type = \"radio\";\n inputElem.name = \"marker\";\n inputElem.id = this._addUID(\"marker-\" + i);\n inputElem.value = this.options.markersList[i].src;\n inputElem.className = \"marker-input-radio\";\n if (options.defaultValue === inputElem.value) {\n inputElem.checked = true;\n }\n li.appendChild(inputElem);\n // label pour l'affichage du marker\n var labelElem = document.createElement(\"label\");\n labelElem.className = \"marker-label\"; // utile ?\n labelElem.setAttribute(\"for\", inputElem.id);\n var imgElem = document.createElement(\"img\");\n imgElem.src = inputElem.value;\n labelElem.appendChild(imgElem);\n li.appendChild(labelElem);\n }\n return li;\n },\n\n /**\n * Creates input for color choosing\n *\n * @param {Object} options - options\n * @param {String} options.label - label\n * @param {String} options.type - input type for element (\"color\")\n * @param {String} options.defaultValue - defaultValue\n * @param {String} options.id - input id\n * @param {String} options.title - input title\n * @param {String} options.className - input className\n * @returns {DOMElement} - created li element\n */\n _createStylingElement : function (options) {\n var li = document.createElement(\"div\");\n li.className = options.className;\n var textNode = document.createTextNode(options.label);\n li.appendChild(textNode);\n var inputElem = document.createElement(\"input\");\n try {\n inputElem.type = options.type;\n } catch (e) {\n // ie 11 input type== color ne marche pas...\n inputElem.type = \"text\";\n }\n if (options.type === \"range\") {\n // For DSFR\n li.dataset.frJsRange = \"true\";\n li.title = options.label;\n\n var value = options.defaultValue;\n value = Math.round(((value - options.min) / (options.max - options.min)) * 100);\n li.style.setProperty(\"--progress-right\", value + \"%\");\n\n inputElem.addEventListener(\"change\", (e) => {\n e.target.parentNode.style.setProperty(\"--progress-right\", `${((e.target.value - options.min) / (options.max - options.min)) * 100}%`);\n });\n }\n inputElem.id = options.id;\n inputElem.value = options.defaultValue;\n if (options.title) {\n inputElem.title = options.title;\n }\n // si options.type == \"checkbox\"\n if (options.checked !== undefined) {\n inputElem.checked = options.checked;\n }\n // si options.type == \"range\"\n if (options.min !== undefined) {\n inputElem.min = options.min;\n }\n if (options.max !== undefined) {\n inputElem.max = options.max;\n }\n if (options.step !== undefined) {\n inputElem.step = options.step;\n }\n li.appendChild(inputElem);\n return li;\n },\n\n /**\n * Creates Styling div to include in popup.\n *\n * @param {Object} options - toolId selected\n * @param {String} options.geomType - gemeotryType selected (\"Point\", \"Line\" or \"Polygon\")\n * @param {Object} options.labels - values to title\n * @param {Object} options.initValues - values to init fields\n * @param {Function} options.applyFunc - function called when apply is selected\n * @returns {DOMElement} DOM element created\n */\n _createStylingDiv : function (options) {\n var dialog = document.createElement(\"dialog\");\n dialog.className = \"gp-styling-div gpf-panel fr-modal gpf-visible GPelementVisible\";\n var mainDiv = document.createElement(\"div\");\n mainDiv.className = \"gpf-modal__body fr-modal__body\";\n dialog.appendChild(mainDiv);\n\n // header DSFR\n if (checkDsfr()) {\n var header = document.createElement(\"div\");\n header.className = \"GPpanelHeader gpf-panel__header fr-modal__header fr-m-1w\";\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = \"Modifier le style\";\n header.appendChild(divTitle);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPdrawingStylePanelClose\");\n divClose.className = \"GPpanelClose GPdrawingStylePanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n var dtObj = this;\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n options.applyFunc.call(this, \"cancel\");\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n options.applyFunc.call(this, \"cancel\");\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n header.appendChild(divClose);\n\n mainDiv.appendChild(header);\n }\n\n var div = document.createElement(\"div\");\n div.className = \"gpf-modal__content fr-modal__content\";\n mainDiv.appendChild(div);\n\n var ul = document.createElement(\"div\");\n var li = null;\n /*\n * TODO : finir de remplir la div pour tous les styles éditables.\n */\n var geomType = options.geomType.toLowerCase();\n switch (geomType) {\n case \"point&text\":\n case \"point\":\n li = this._createMarkersChooser({\n className : \"gp-styling-option\",\n // defaultValue : this.options.markersList[0].src\n defaultValue : options.initValues.markerSrc\n });\n ul.appendChild(li);\n li = this._createStylingElement({\n type : \"range\",\n className : \"gp-styling-option fr-range fr-range--sm\",\n label : this.options.labels.markerSize,\n title : \"petit, moyen ou grand\",\n id : this._addUID(\"markerSize\"),\n min : 5,\n max : 15,\n step : 5,\n defaultValue : options.initValues.markerSize * 10\n });\n ul.appendChild(li);\n // EVOL\n // proposer une palette de couleur pour peindre un pictogramme monochrome\n // li = this._createStylingElement({\n // type : \"color\",\n // className : \"gp-styling-option\",\n // label : this.options.labels.markerColor,\n // id : this._addUID(\"markerColor\"),\n // defaultValue : options.initValues.markerColor\n // });\n // ul.appendChild(li);\n if (options.initValues.markerCustom) {\n // FIXME que faire des icones customisés ?\n }\n if (geomType === \"point&text\") {\n li = this._createStylingElement({\n type : \"checkbox\",\n className : \"gp-styling-option\",\n label : this.options.labels.labelDisplay,\n id : this._addUID(\"labelDisplay\"),\n checked : options.initValues.labelDisplay,\n defaultValue : options.initValues.labelDisplay\n });\n ul.appendChild(li);\n }\n break;\n case \"text\":\n li = this._createStylingElement({\n type : \"color\",\n className : \"gp-styling-option\",\n label : this.options.labels.fillColor,\n id : this._addUID(\"fillColor\"),\n defaultValue : options.initValues.fillColor\n });\n ul.appendChild(li);\n li = this._createStylingElement({\n type : \"color\",\n className : \"gp-styling-option\",\n label : this.options.labels.strokeColor,\n id : this._addUID(\"strokeColor\"),\n defaultValue : options.initValues.strokeColor\n });\n ul.appendChild(li);\n li = this._createStylingElement({\n type : \"range\",\n className : \"gp-styling-option\",\n label : this.options.labels.strokeWidth,\n title : \"1 à 10 pixels\",\n id : this._addUID(\"strokeWidth\"),\n min : 1,\n max : 10,\n step : 1,\n defaultValue : options.initValues.strokeWidth\n });\n ul.appendChild(li);\n break;\n case \"line\":\n li = this._createStylingElement({\n type : \"color\",\n className : \"gp-styling-option\",\n label : this.options.labels.strokeColor,\n id : this._addUID(\"strokeColor\"),\n defaultValue : options.initValues.strokeColor\n });\n ul.appendChild(li);\n li = this._createStylingElement({\n type : \"range\",\n className : \"gp-styling-option fr-range fr-range--sm\",\n label : this.options.labels.strokeWidth,\n title : \"1 à 10 pixels\",\n id : this._addUID(\"strokeWidth\"),\n min : 1,\n max : 10,\n step : 1,\n defaultValue : options.initValues.strokeWidth\n });\n ul.appendChild(li);\n break;\n case \"polygon\":\n li = this._createStylingElement({\n type : \"color\",\n className : \"gp-styling-option\",\n label : this.options.labels.strokeColor,\n id : this._addUID(\"strokeColor\"),\n defaultValue : options.initValues.strokeColor\n });\n ul.appendChild(li);\n li = this._createStylingElement({\n type : \"range\",\n className : \"gp-styling-option fr-range fr-range--sm\",\n label : this.options.labels.strokeWidth,\n title : \"1 à 10 pixels\",\n id : this._addUID(\"strokeWidth\"),\n min : 1,\n max : 10,\n step : 1,\n defaultValue : options.initValues.strokeWidth\n });\n ul.appendChild(li);\n li = this._createStylingElement({\n type : \"color\",\n className : \"gp-styling-option\",\n label : this.options.labels.fillColor,\n id : this._addUID(\"fillColor\"),\n defaultValue : options.initValues.fillColor\n });\n ul.appendChild(li);\n li = this._createStylingElement({\n type : \"range\",\n className : \"gp-styling-option fr-range fr-range--sm\",\n label : this.options.labels.fillOpacity,\n title : \"0 (transparent) à 100% (opaque)\",\n id : this._addUID(\"fillOpacity\"),\n min : 0,\n max : 10,\n step : 1,\n defaultValue : options.initValues.fillOpacity * 10\n });\n ul.appendChild(li);\n break;\n default:\n logger.log(\"Unhandled geometry type for styling.\");\n }\n div.appendChild(ul);\n // apply button\n var applyButton = document.createElement(\"input\");\n applyButton.type = \"button\";\n applyButton.className = \"gp-styling-button fr-btn fr-btn--tertiary\";\n applyButton.value = this.options.labels.applyToObject;\n /** click sur applyButton */\n applyButton.onclick = function () {\n options.applyFunc.call(this, \"apply\");\n };\n div.appendChild(applyButton);\n // set default button\n var setDefaultButton = document.createElement(\"input\");\n setDefaultButton.type = \"button\";\n setDefaultButton.value = this.options.labels.setAsDefault;\n setDefaultButton.className = \"gp-styling-button fr-btn fr-btn--tertiary\";\n /** click sur set Default Button */\n setDefaultButton.onclick = function () {\n options.applyFunc.call(this, \"default\");\n };\n div.appendChild(setDefaultButton);\n // cancel Button\n var cancelButton = document.createElement(\"input\");\n cancelButton.type = \"button\";\n // cancelButton.value = \"X\" ;\n cancelButton.className = \"gp-styling-button closer\";\n /** click sur cancel Button */\n cancelButton.onclick = function () {\n options.applyFunc.call(this, \"cancel\");\n };\n div.appendChild(cancelButton);\n return dialog;\n },\n\n /**\n * Creates Text editing div to include in popup.\n *\n * @param {Object} options - options for popup\n * @param {String} options.geomType - gemeotryType selected (\"Point\", \"Line\" or \"Polygon\")\n * @param {String} options.text - text to fill input.\n * @param {String} options.key - property name called when text is to be saved.\n * @param {String} options.measure - measure to fill input.\n * @param {String} options.placeholder - placeholder for text input.\n * @param {String} options.inputId - text input id.\n * @param {Function} options.applyFunc - function called when text is to be saved.\n * @returns {DOMElement} DOM element created\n * @private\n */\n _createLabelDiv : function (options) {\n var popup = document.createElement(\"dialog\");\n popup.className = \"gp-label-div gpf-panel fr-modal gpf-visible GPelementVisible\";\n var mainDiv = document.createElement(\"div\");\n mainDiv.className = \"gpf-modal__body fr-modal__body\";\n popup.appendChild(mainDiv);\n // header DSFR\n if (checkDsfr()) {\n var header = document.createElement(\"div\");\n header.className = \"GPpanelHeader gpf-panel__header fr-modal__header fr-m-1w\";\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = \"Texte de l'annotation\";\n header.appendChild(divTitle);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPdrawingStylePanelClose\");\n divClose.className = \"GPpanelClose GPdrawingStylePanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n var dtObj = this;\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n options.applyFunc.call(this, \"cancel\");\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n options.applyFunc.call(this, \"cancel\");\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n header.appendChild(divClose);\n\n mainDiv.appendChild(header);\n }\n var div = document.createElement(\"div\");\n div.className = \"gpf-modal__content fr-modal__content\";\n mainDiv.appendChild(div);\n var inputLabel = null;\n if (options.geomType === \"Text\") {\n inputLabel = document.createElement(\"input\");\n inputLabel.type = \"text\";\n inputLabel.className = \"gp-input-label-style fr-input\";\n } else {\n inputLabel = document.createElement(\"textArea\");\n inputLabel.rows = 2;\n inputLabel.cols = 40;\n inputLabel.className = \"gp-textarea-att-label-style fr-input\";\n }\n\n if (options.text) {\n inputLabel.value = options.text;\n }\n\n inputLabel.autocomplete = \"off\";\n inputLabel.placeholder = options.placeholder;\n inputLabel.id = options.inputId;\n div.appendChild(inputLabel);\n // keyup\n inputLabel.onkeyup = function (evtk) {\n if (options.geomType === \"Text\" && evtk.keyCode === 13) {\n options.applyFunc.call(this, options.key, inputLabel.value, true);\n }\n if (evtk.keyCode === 27) {\n options.applyFunc.call(this, options.key, inputLabel.value, false);\n }\n };\n\n if (options.measure && options.geomType !== \"Text\") {\n var inputMeasure = document.createElement(\"input\");\n inputMeasure.type = \"text\";\n inputMeasure.readonly = true;\n inputMeasure.className = \"gp-input-measure-style\";\n inputMeasure.value = options.measure;\n div.appendChild(inputMeasure);\n }\n\n if (options.geomType !== \"Text\") {\n // apply button\n var applyButton = document.createElement(\"input\");\n applyButton.type = \"button\";\n applyButton.className = \"gp-styling-button fr-btn fr-btn--tertiary\";\n applyButton.value = this.options.labels.saveDescription;\n /** click sur applyButton */\n applyButton.onclick = function () {\n options.applyFunc.call(this, options.key, inputLabel.value, true);\n };\n div.appendChild(applyButton);\n // cancel Button\n var cancelButton = document.createElement(\"input\");\n cancelButton.type = \"button\";\n cancelButton.className = \"gp-styling-button closer\";\n /** click sur cancel Button */\n cancelButton.onclick = function () {\n options.applyFunc.call(this, options.key, inputLabel.value, false);\n };\n div.appendChild(cancelButton);\n }\n\n return popup;\n },\n\n /**\n * Handles drawing tool selection from a DOM point of view.\n *\n * @param {Event} e - DOM Event\n * @param {String} toolId - toolId selected\n * @param {DrawingDOM} context - Drawing control instance\n */\n _handleDOMToolClick : function (e, toolId, context) {\n for (var availType in context.dtOptions) {\n var availToolId = context._addUID(\"drawing-tool-\" + context.dtOptions[availType].id);\n var li = document.getElementById(availToolId);\n // ce n'est pas l'outil selectionne : on le desactive (s'il ne l'était pas déjà).\n if (availToolId !== toolId) {\n li.className = \"drawing-tool fr-m-1w fr-btn fr-btn--tertiary gpf-btn--tertiary\";\n context.dtOptions[availType].active = false;\n continue;\n }\n // ici, c'est le l'outil selectionne\n if (context.dtOptions[availType].active) {\n li.className = \"drawing-tool fr-m-1w fr-btn fr-btn--tertiary gpf-btn--tertiary\";\n } else {\n li.className = \"drawing-tool drawing-tool-active fr-m-1w fr-btn fr-btn--tertiary gpf-btn--tertiary\";\n }\n context.dtOptions[availType].active = !context.dtOptions[availType].active;\n }\n }\n\n};\n\nexport default DrawingDOM;\n","// import CSS\nimport \"../../CSS/Controls/Drawing/GPFdrawing.css\";\n// import \"../../CSS/Controls/Drawing/GPFdrawingStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\nimport Collection from \"ol/Collection\";\nimport Overlay from \"ol/Overlay\";\nimport { transform as olTransformProj } from \"ol/proj\";\nimport VectorSource from \"ol/source/Vector\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport {\n Fill,\n Icon,\n Stroke,\n Style,\n Text,\n Circle\n} from \"ol/style\";\nimport {\n LineString,\n LinearRing,\n Point,\n Polygon,\n MultiLineString,\n MultiPoint,\n MultiPolygon\n} from \"ol/geom\";\nimport {\n Select as SelectInteraction,\n Modify as ModifyInteraction,\n Draw as DrawInteraction\n} from \"ol/interaction\";\nimport {\n singleClick as eventSingleClick,\n pointerMove as eventPointerMove\n} from \"ol/events/condition\";\nimport {\n getArea as olGetAreaSphere,\n getDistance as olGetDistanceSphere\n} from \"ol/sphere\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Interactions from \"../Utils/Interactions\";\nimport MarkersOther from \"../Utils/MarkersOther\";\nimport Draggable from \"../../Utils/Draggable\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Color from \"../../Utils/ColorUtils\";\n// DOM\nimport DrawingDOM from \"./DrawingDOM\";\n// import local with ol dependencies\nimport KMLExtended from \"../../Formats/KML\";\nimport GeoJSONExtended from \"../../Formats/GeoJSON\";\nimport GPXExtended from \"../../Formats/GPX\";\nimport LayerSwitcher from \"../LayerSwitcher/LayerSwitcher\";\n\nvar logger = Logger.getLogger(\"Drawing\");\n\n/**\n * @classdesc\n *\n * Drawing Control.\n *\n * @constructor\n * @alias ol.control.Drawing\n * @type {ol.control.Drawing}\n * @extends {ol.control.Control}\n * @param {Object} options - options for function call.\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {Boolean} [options.collapsed = true] - Specify if Drawing control should be collapsed at startup. Default is true.\n * @param {Boolean} [options.draggable = false] - Specify if widget is draggable\n * @param {Object} [options.layer = {}] - Openlayers layer that will hosts created features. If none, an empty vector layer will be created.\n * @param {Object} [options.popup = {}] - Popup informations\n * @param {Boolean} [options.popup.display = true] - Specify if popup is displayed when create a drawing\n * @param {Function} [options.popup.function] - Function to display popup informations if you want to cutomise it. You may also provide your own function with params : {geomType / feature / saveFunc(message) / closeFunc()}. This function must return the DOM object of the popup content.\n * @param {Object} [options.layerDescription = {}] - Layer informations to be displayed in LayerSwitcher widget (only if a LayerSwitcher is also added to the map)\n * @param {String} [options.layerDescription.title = \"Croquis\"] - Layer title to be displayed in LayerSwitcher\n * @param {String} [options.layerDescription.description = \"Mon croquis\"] - Layer description to be displayed in LayerSwitcher\n * @param {Object} options.tools - Tools to display in the drawing toolbox. All by default.\n * @param {Boolean} [options.tools.points = true] - Display points drawing tool\n * @param {Boolean} [options.tools.lines = true] - Display lines drawing tool\n * @param {Boolean} [options.tools.polygons = true] - Display polygons drawing tool\n * @param {Boolean} [options.tools.holes = false] - Display polygons with holes drawing tool\n * @param {Boolean} [options.tools.text = true] - Display text drawing tool\n * @param {Boolean} [options.tools.remove = true] - Display feature removing tool\n * @param {Boolean} [options.tools.display = true] - Display style editing tool\n * @param {Boolean} [options.tools.tooltip = true] - Display text editing tool\n * @param {Boolean} [options.tools.edit = true] - Display editing tool\n * @param {Boolean} [options.tools.export = true] - Display exporting tool\n * @param {Boolean} [options.tools.measure = false] - Display measure drawing into popup info\n * @param {String} [options.labels] - Labels for Control\n * @param {String} [options.labels.control] - Label for Control\n * @param {String} [options.labels.points] - Label for points drawing tool\n * @param {String} [options.labels.lines] - Label for lines drawing tool\n * @param {String} [options.labels.polygons] - Label for polygons drawing tool\n * @param {String} [options.labels.holes] - Label for polygons with holes drawing tool\n * @param {String} [options.labels.text] - Label for text drawing tool\n * @param {String} [options.labels.edit] - Label for editing tool\n * @param {String} [options.labels.display] - Label for style editing tool\n * @param {String} [options.labels.tooltip] - Label for text editing tool\n * @param {String} [options.labels.remove] - Label for feature removing tool\n * @param {String} [options.labels.export] - Label for exporting tool.\n * @param {String} [options.labels.exportTitle] - Title for exporting tool.\n * @param {String} [options.labels.applyToObject] - Label for apply to object button.\n * @param {String} [options.labels.saveDescription] - Label for save description button.\n * @param {String} [options.labels.setAsDefault] - Label for set as default style button.\n * @param {String} [options.labels.strokeColor] - Label for stroke color.\n * @param {String} [options.labels.strokeWidth] - Label for stroke width.\n * @param {String} [options.labels.fillColor] - Label for fill color.\n * @param {String} [options.labels.fillOpacity] - Label for fillOpacity.\n * @param {String} [options.labels.markerSize] - Label for markerSize.\n * @param {Array.} [options.markersList = [{\"src\" : \"data:image/png;base64,xxxx\", \"anchor\" : [0.5,1]}]] - List of markers src to be used for points with their anchor offsets See {@link http://openlayers.org/en/latest/apidoc/ol.style.Icon.html OpenLayers params} for anchor offset options.\n * @param {Object} options.defaultStyles - Default styles applying to geometries (labels, lines and polygons).\n * @param {String} [options.defaultStyles.textFillColor = \"#000000\"] - Text fill color for labels (RGB hex value).\n * @param {String} [options.defaultStyles.textStrokeColor = \"#FFFFFF\"] - Text surrounding color for labels (RGB hex value).\n * @param {String} [options.defaultStyles.strokeColor = \"#ffcc33\"] - Stroke color (RGB hex value).\n * @param {Number} [options.defaultStyles.strokeWidth = 2] - Stroke width in pixels.\n * @param {String} [options.defaultStyles.polyStrokeColor = \"#ffcc33\"] - Stroke color (RGB hex value) for polygons.\n * @param {Number} [options.defaultStyles.polyStrokeWidth = 2] - Stroke width in pixels for polygons.\n * @param {String} [options.defaultStyles.polyFillColor = \"#ffffff\"] - Polygons fill color (RGB hex value).\n * @param {Number} [options.defaultStyles.polyFillOpacity = 0.2] - Polygon fill opacity (alpha value between 0:transparent and 1:opaque).\n * @param {Object} options.cursorStyle - cursor (circle) style when drawing or editing.\n * @param {String} [options.cursorStyle.fillColor = \"rgba(0, 153, 255, 1)\"] - Cursor fill color.\n * @param {String} [options.cursorStyle.strokeColor = \"#FFF\"] - Cursor stroke color.\n * @param {String} [options.cursorStyle.strokeWidth = 1] - Cursor surrounding stroke width.\n * @param {String} [options.cursorStyle.radius = 6] - Cursor radius.\n * @example\n * var drawing = new ol.control.Drawing({\n * collapsed : false,\n * draggable : true,\n * layerswitcher : {\n * title : \"Dessins\",\n * description : \"Mes dessins...\"\n * },\n * markersList : [{\n * src : \"http://api.ign.fr/api/images/api/markers/marker_01.png\",\n * anchor : [0.5, 1]\n * }],\n * defaultStyles : {},\n * cursorStyle : {},\n * tools : {\n * points : true,\n * lines : true,\n * polygons :true,\n * holes : true,\n * text : false,\n * remove : true,\n * display : true,\n * tooltip : true,\n * export : true,\n * measure : true\n * },\n * popup : {\n * display : true,\n * function : function (params) {\n * var container = document.createElement(\"div\");\n * // - params.geomType;\n * // - params.feature;\n * // Les 2 fonctions ferment la popup avec ou sans sauvegarde des informations\n * // dans les properties de la feature (key : description)\n * // - params.saveFunc(message);\n * // - params.closeFunc();\n * return container;\n * }\n * });\n */\nvar Drawing = class Drawing extends Control {\n\n /**\n * See {@link ol.control.Drawing}\n * @module Drawing\n * @alias module:~controls/Drawing\n * @param {*} options - options\n * @example\n * import Drawing from \"gpf-ext-ol/controls/Drawing\"\n * ou\n * import { Drawing } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof Drawing)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"Drawing\";\n\n this._initialize(options);\n\n // init control DOM container\n this._container = this._initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n }\n\n /**\n * Default tools to display for widget\n *\n * @private\n */\n static DefaultTools = {\n points : true,\n lines : true,\n polygons : true,\n holes : false,\n text : true,\n remove : true,\n display : true,\n tooltip : true,\n edit : true,\n export : true,\n measure : false\n };\n\n /**\n * Default labels for widget\n *\n * @private\n */\n static DefaultLabels = {\n control : \"Annoter la carte\",\n creatingTools : \"Outils de création\",\n points : \"Placer des points\",\n lines : \"Dessiner des lignes\",\n polygons : \"Dessiner des polygones\",\n holes : \"Créer des trous sur un polygone\",\n text : \"Ecrire sur la carte\",\n editingTools : \"Outils d'édition\",\n edit : \"Editer les tracés\",\n display : \"Modifier l'apparence des objets\",\n tooltip : \"Modifier les textes / infos-bulles\",\n remove : \"Supprimer des objets\",\n export : \"Exporter\",\n exportTitle : \"Exporter en KML\",\n applyToObject : \"Appliquer à l'objet\",\n saveDescription : \"Enregistrer\",\n setAsDefault : \"Définir par défaut\",\n strokeColor : \"Couleur du trait : \",\n strokeWidth : \"Epaisseur du trait : \",\n fillColor : \"Couleur de remplissage : \",\n fillOpacity : \"Opacité du remplissage : \",\n markerSize : \"Taille du pictogramme : \",\n markerColor : \"Couleur du pictogramme : \",\n labelDisplay : \"Afficher le label : \"\n };\n\n /**\n * Default styles applyied to drawn features.\n *\n * @private\n */\n static DefaultStyles = {\n textFillColor : \"#000000\",\n textStrokeColor : \"#FFFFFF\",\n textStrokeWidth : 6,\n // INFO : cette option n'est pas surchargeable via les options du constructeur !\n textIcon1x1 : {\n src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNiYAAAAAkAAxkR2eQAAAAASUVORK5CYII=\",\n anchor : [0, 0]\n },\n polyFillColor : \"#ffffff\",\n polyFillOpacity : 0.4,\n polyStrokeColor : \"#ffcc33\",\n polyStrokeWidth : 4,\n strokeColor : \"#ffcc33\",\n strokeWidth : 4,\n markerSize : 1,\n markerColor : \"#ffcc33\",\n // INFO : cette option n'est pas surchargeable via les options du constructeur !\n labelDisplay : true\n };\n\n /**\n * Default styles when drawing\n *\n * @private\n */\n static DefaultCursorStyle = {\n radius : 6,\n strokeColor : \"#FFF\",\n strokeWidth : 1,\n fillColor : \"rgba(0, 153, 255, 1)\"\n };\n\n /**\n * Overload of {@link http://openlayers.org/en/latest/apidoc/ol.control.Control.html#setMap ol.control.Control.setMap()} method, called when control is added to or removed from map.\n *\n * @param {Object} map - {@link http://openlayers.org/en/latest/apidoc/ol.Map.html ol.Map} object.\n */\n setMap (map) {\n // call original setMap method\n super.setMap(map);\n\n if (this.getMap() && this.eventKey) {\n olObservableUnByKey(this.eventKey);\n }\n\n // nothing else to do if map == null\n if (map == null) {\n return;\n }\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this._drawingPanel,\n this._drawingPanelHeader,\n map.getTargetElement()\n );\n }\n\n // mode \"collapsed\"\n if (!this.collapsed) {\n this._showDrawingButton.setAttribute(\"aria-pressed\", true);\n }\n\n if (this.layer) {\n // ajout du layer de dessin à la carte s'il n'y est pas déjà\n this.setLayer(this.layer);\n }\n\n // gestion des suppressions \"externes\" de la couche de dessin.\n this.eventKey = this.getMap().getLayers().on(\"remove\", (evtRm) => {\n if (evtRm.element === this.layer) { // FIXME object comparison\n // found layer removed.\n this.layer = null;\n // on supprime l'interaction en cours si besoin\n if (this.interactionCurrent) {\n this.getMap().removeInteraction(this.interactionCurrent);\n this.interactionCurrent = null;\n }\n }\n });\n }\n\n /**\n * Export features of current drawing layer (KML by default).\n *\n * @returns {String} a representation of drawn features (KML, GPX or GeoJSON) or null if not possible.\n */\n exportFeatures () {\n var result = null;\n if (Control.prototype.getMap.call(this) == null) {\n logger.log(\"Impossible to export : control isn't attached to any map.\");\n return result;\n }\n if (!this.layer) {\n logger.log(\"Impossible to export : no layer is hosting features.\");\n return result;\n }\n if (!this.layer.getSource() ||\n !this.layer.getSource().getFeatures() ||\n !this.layer.getSource().getFeatures().length) {\n logger.log(\"Impossible to export : no features found.\");\n return result;\n }\n\n // on invalide les features...\n if (this.featuresCollectionSelected) {\n this.featuresCollectionSelected.clear();\n }\n\n var ClassName = null;\n switch (this.getExportFormat()) {\n case \"KML\":\n ClassName = new KMLExtended({\n writeStyles : true\n });\n break;\n case \"GPX\":\n ClassName = new GPXExtended({\n // readExtensions : function (ext) {/* only extensions nodes from wpt, rte and trk can be processed */ }\n });\n break;\n case \"GEOJSON\":\n ClassName = new GeoJSONExtended({});\n break;\n default:\n break;\n }\n\n if (!ClassName) {\n logger.log(\"Impossible to export : format unknown !?\");\n return result;\n }\n\n var featProj = this.layer.getSource().getProjection();\n featProj = featProj || this.getMap().getView().getProjection();\n\n result = ClassName.writeFeatures(this.layer.getSource().getFeatures(), {\n dataProjection : \"EPSG:4326\",\n featureProjection : featProj\n });\n\n return result;\n }\n\n // ################################################################### //\n // #################### user interface methods ####################### //\n // ################################################################### //\n\n /**\n * Collapse or display control main container\n *\n * @param {Boolean} collapsed - True to collapse control, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.error(\"[ERROR] Drawing:setCollapsed - missing collapsed parameter\");\n return;\n }\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n // on simule l'ouverture du panneau après un click\n this.onShowDrawingClick();\n this._showDrawingButton.click();\n }\n\n /**\n * Setter for Export Name.\n *\n * @param {String} name - Export Name. By default, \"Croquis\".\n */\n setExportName (name) {\n this._exportName = name;\n }\n\n /**\n * getter for Export Name.\n *\n * @returns {String} export name\n */\n getExportName () {\n return this._exportName;\n }\n\n /**\n * Setter for Export format (KML, GPX or GeoJSON).\n *\n * @param {String} format - Export format. By default, \"KML\".\n */\n setExportFormat (format) {\n this._exportFormat = (format) ? format.toUpperCase() : \"KML\";\n switch (format.toUpperCase()) {\n case \"KML\":\n this._exportExt = \".kml\";\n this._exportMimeType = \"application/vnd.google-earth.kml+xml\";\n break;\n case \"GPX\":\n this._exportExt = \".gpx\";\n this._exportMimeType = \"application/gpx+xml\";\n break;\n case \"GEOJSON\":\n this._exportExt = \".geojson\";\n this._exportMimeType = \"application/geo+json\";\n break;\n default:\n // redefine format by default !\n this._exportFormat = \"KML\";\n break;\n }\n }\n\n /**\n * getter for Export format.\n *\n * @returns {String} export format\n */\n getExportFormat () {\n return this._exportFormat;\n }\n\n /**\n * Sets vector layer to hosts feature.\n *\n * @param {ol.layer.Vector} vlayer - vector layer\n */\n setLayer (vlayer) {\n if (!vlayer) {\n this.layer = null;\n return;\n }\n\n if (!(vlayer instanceof VectorLayer)) {\n logger.log(\"no valid layer given for hosting drawn features.\");\n return;\n }\n\n // ajout du layer de dessin à la carte s'il n'y est pas déjà\n var layers = this.getMap().getLayers();\n if (layers) {\n var found = false;\n layers.forEach((mapLayer) => {\n if (mapLayer === vlayer) {\n logger.trace(\"layer already in map. Not adding.\");\n found = true;\n }\n });\n // si le layer n'est pas sur la carte, on l'ajoute.\n if (!found) {\n this.getMap().addLayer(vlayer);\n }\n // style par defaut !\n // application des styles ainsi que ceux par defaut de ol sur le layer\n vlayer.getSource().getFeatures().forEach((feature) => {\n var style = feature.getStyle();\n if (typeof style !== \"function\") {\n return;\n }\n var featureStyleFunction = feature.getStyleFunction();\n if (featureStyleFunction) {\n var styles = featureStyleFunction.call(this, feature, 0);\n if (styles && styles.length !== 0) {\n feature.setStyle((Array.isArray(styles)) ? styles[0] : styles);\n }\n }\n });\n this.layer = vlayer;\n\n // Si un layer switcher est présent dans la carte, on lui affecte des informations pour cette couche\n this.getMap().getControls().forEach(\n (control) => {\n if (control instanceof LayerSwitcher) {\n // un layer switcher est présent dans la carte\n var layerId = this.layer.gpLayerId;\n // on n'ajoute des informations que s'il n'y en a pas déjà (si le titre est le numéro par défaut)\n if (control._layers[layerId].title === layerId) {\n control.addLayer(\n this.layer, {\n title : this.options.layerDescription.title,\n description : this.options.layerDescription.description\n }\n );\n }\n }\n }\n );\n }\n }\n\n /**\n * Get vector layer\n *\n * @returns {Object} layer - isocurve layer\n */\n getLayer () {\n return this.layer;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this._container;\n }\n\n // ################################################################### //\n // ######################## initialize control ####################### //\n // ################################################################### //\n\n /**\n * Gets marker options in options.markersList given its src.\n *\n * @param {String} src - marker image URI,\n * @returns {Object} markers options\n * @private\n */\n _getsMarkersOptionsFromSrc (src) {\n var markerOptions = null;\n for (var i = 0; i < this.options.markersList.length; i++) {\n if (src && this.options.markersList[i].src === src) {\n markerOptions = this.options.markersList[i];\n return markerOptions;\n }\n }\n return markerOptions;\n }\n\n /**\n * Converts markerElement options into Openlayers IconStyles options.\n *\n * @param {Object} markerElement - marker element\n * @returns {Object} ol.Style.Icon constructor options.\n * @private\n */\n _getIconStyleOptions (markerElement) {\n var iconOptions = {};\n Object.keys(markerElement).forEach((key) => {\n switch (key) {\n case \"src\":\n case \"size\":\n case \"scale\":\n case \"color\":\n case \"anchor\":\n case \"anchorOrigin\":\n case \"anchorXUnits\":\n case \"anchorYUnits\":\n iconOptions[key] = markerElement[key];\n break;\n }\n });\n\n return iconOptions;\n }\n\n /**\n * Initialize control (called by Drawing constructor)\n *\n * @method _initialize\n * @param {Object} options - control options (set by user)\n * @private\n */\n _initialize (options) {\n // determination d'un uid\n this._uid = options.id || SelectorID.generate();\n\n // export name / format / ...\n this._exportName = \"Croquis\";\n this._exportFormat = \"KML\";\n this._exportMimeType = \"application/vnd.google-earth.kml+xml\";\n this._exportExt = \".kml\";\n\n options = options || {};\n // Set default options\n this.options = options;\n\n if (!this.options.layerDescription) {\n this.options.layerDescription = {\n title : \"Croquis\",\n description : \"Mon croquis\"\n };\n }\n\n // applying default tools\n if (!this.options.tools) {\n this.options.tools = {};\n }\n Object.keys(Drawing.DefaultTools).forEach((key) => {\n if (!this.options.tools.hasOwnProperty(key)) {\n this.options.tools[key] = Drawing.DefaultTools[key];\n }\n });\n // styles par defaut lors du dessin\n if (!this.options.cursorStyle) {\n this.options.cursorStyle = {};\n }\n Object.keys(Drawing.DefaultCursorStyle).forEach((key) => {\n if (!this.options.cursorStyle.hasOwnProperty(key)) {\n this.options.cursorStyle[key] = Drawing.DefaultCursorStyle[key];\n }\n });\n\n this.options.collapsed = (options.collapsed !== undefined) ? options.collapsed : true;\n /** {Boolean} specify if Drawing control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n this.options.draggable = (options.draggable !== undefined) ? options.draggable : false;\n /** {Boolean} specify if Drawing control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n this.options.markersList = options.markersList || MarkersOther[\"drawing_api\"];\n\n // applying default labels\n if (!this.options.labels) {\n this.options.labels = {};\n }\n Object.keys(Drawing.DefaultLabels).forEach((key) => {\n if (!this.options.labels.hasOwnProperty(key)) {\n this.options.labels[key] = Drawing.DefaultLabels[key];\n }\n });\n\n // applying default styles\n if (!this.options.defaultStyles) {\n this.options.defaultStyles = {};\n }\n Object.keys(Drawing.DefaultStyles).forEach((key) => {\n if (!options.defaultStyles.hasOwnProperty(key)) {\n this.options.defaultStyles[key] = Drawing.DefaultStyles[key];\n return;\n }\n if (key === \"polyFillOpacity\" &&\n (options.defaultStyles[key] < 0 ||\n options.defaultStyles[key] > 1)) {\n logger.log(\"Wrong value (\" + options.defaultStyles[key] + \") for defaultStyles.polyFillOpactity. Must be between 0 and 1\");\n this.options.defaultStyles[key] = Drawing.DefaultStyles[key];\n return;\n }\n if (key === \"strokeWidth\" || key === \"polyStrokeWidth\") {\n var intValue = parseInt(options.defaultStyles[key], 10);\n if (isNaN(intValue) || intValue < 0) {\n logger.log(\"Wrong value (\" + options.defaultStyles[key] + \") for defaultStyles.strokeWidth. Must be a positive interger value.\");\n this.options.defaultStyles[key] = Drawing.DefaultStyles[key];\n return;\n }\n this.options.defaultStyles[key] = intValue;\n }\n if (key === \"markerSize\") {\n var floatValue = parseFloat(options.defaultStyles[key]);\n if (isNaN(floatValue) || floatValue < 0) {\n logger.log(\"Wrong value (\" + options.defaultStyles[key] + \") for defaultStyles.markerSize. Must be a positive value.\");\n this.options.defaultStyles[key] = Drawing.DefaultStyles[key];\n return;\n }\n this.options.defaultStyles[key] = floatValue;\n }\n });\n\n this.interactionCurrent = null;\n this.interactionSelectEdit = null;\n this.featuresCollectionSelected = null;\n\n this.stylingOvl = null;\n this.popupOvl = null;\n\n this.layer = null;\n if (this.options.layer && this.options.layer instanceof VectorLayer) {\n this.layer = this.options.layer;\n }\n\n // detection du support : desktop ou tactile\n // FIXME : utile ?\n this._isDesktop = this._detectSupport();\n\n // applying default popup\n if (!this.options.popup) {\n this.options.popup = {\n display : true,\n apply : null\n };\n }\n }\n\n /**\n * Creates empty layer to host features\n *\n * @private\n */\n _createEmptyLayer () {\n var features = new Collection();\n var layer = new VectorLayer({\n source : new VectorSource({\n features : features\n }),\n title : \"Mon Croquis\"\n });\n // on rajoute le champ gpResultLayerId permettant d'identifier une couche crée par le composant.\n layer.gpResultLayerId = \"drawing\";\n // on le rajoute au controle (et à la carte)\n this.setLayer(layer);\n }\n\n /**\n * this method is called by the constructor.\n * this information is useful to switch to touch mode.\n * Detection : test for desktop or tactile\n *\n * @method _detectSupport\n *\n * @returns {Boolean} is desktop\n * @private\n */\n _detectSupport () {\n // TODO\n // Choix de gérer la détection dans le code du composant au lieu du DOM car :\n // Utilisation de l'implémentation Leaflet\n // http://leafletjs.com/reference.html#browser\n\n var isDesktop = true;\n var userAgent = window.navigator.userAgent.toLowerCase();\n\n if (userAgent.indexOf(\"iphone\") !== -1 ||\n userAgent.indexOf(\"ipod\") !== -1 ||\n userAgent.indexOf(\"ipad\") !== -1 ||\n userAgent.indexOf(\"android\") !== -1 ||\n userAgent.indexOf(\"mobile\") !== -1 ||\n userAgent.indexOf(\"blackberry\") !== -1 ||\n userAgent.indexOf(\"tablet\") !== -1 ||\n userAgent.indexOf(\"phone\") !== -1 ||\n userAgent.indexOf(\"touch\") !== -1) {\n isDesktop = false;\n }\n\n if (userAgent.indexOf(\"msie\") !== -1 ||\n userAgent.indexOf(\"trident\") !== -1) {\n isDesktop = true;\n }\n\n return isDesktop;\n }\n\n // ################################################################### //\n // ######################## methods handle dom ####################### //\n // ################################################################### //\n\n /**\n * Create control main container (called by Drawing constructor)\n *\n * @method _initContainer\n *\n * @returns {DOMElement} DOM element\n * @private\n */\n _initContainer () {\n // creation du container principal\n var container = this._createMainContainerElement();\n\n var picto = this._showDrawingButton =this._createShowDrawingPictoElement();\n container.appendChild(picto);\n\n var panel = this._drawingPanel = this._createDrawingPanelElement();\n var panelDiv = this._createDrawingPanelDivElement();\n panel.appendChild(panelDiv);\n\n var header = this._drawingPanelHeader = this._createDrawingPanelHeaderElement();\n panelDiv.appendChild(header);\n\n var sections = this._createDrawingToolsDivSections();\n panelDiv.appendChild(sections);\n\n var tools = this._createDrawingToolsSections();\n for (var i = 0; i < tools.length; i++) {\n sections.appendChild(tools[i]);\n }\n\n container.appendChild(panel);\n\n return container;\n }\n\n // ################################################################### //\n // ##################### handlers events to control ################## //\n // ################################################################### //\n\n /**\n * Callback de fin de dessin de geometrie\n * @param {Object} feature - ol feature\n * @param {String} geomType - geometry type\n * @param {Boolean} clean - clean last feature\n *\n * @private\n */\n _drawEndFeature (feature, geomType) {\n // application des styles par defaut.\n var style = null;\n\n switch (geomType) {\n case \"Point\":\n style = new Style({\n image : new Icon(this._getIconStyleOptions(this.options.markersList[0]))\n });\n break;\n case \"LineString\":\n style = new Style({\n stroke : new Stroke({\n color : this.options.defaultStyles.strokeColor,\n width : this.options.defaultStyles.strokeWidth\n })\n });\n break;\n case \"Polygon\":\n style = new Style({\n fill : new Fill({\n color : Color.hexToRgba(\n this.options.defaultStyles.polyFillColor,\n this.options.defaultStyles.polyFillOpacity\n )\n }),\n stroke : new Stroke({\n color : this.options.defaultStyles.polyStrokeColor,\n width : this.options.defaultStyles.polyStrokeWidth\n })\n });\n break;\n }\n feature.setStyle(style);\n\n // gestion des mesures\n this._updateMeasure(feature, geomType);\n\n if (this.options.popup.display) {\n // creation overlay pour saisie du label\n // contexte\n var context = this;\n\n /**\n * Enregistrement de la valeur saisie dans l'input.\n *\n * @param {String} key - clef de l'attribut.\n * @param {String} value - valeur de l'attribut.\n * @param {Boolean} save - true si on garde le label.\n */\n var setAttValue = function (key, value, save) {\n context.getMap().removeOverlay(context.popupOvl);\n context.popupOvl = null;\n if (save && value && value.trim().length > 0) {\n var obj = {};\n obj[key] = value.replace(/\\n/g, \"
    \");\n feature.setProperties(obj);\n }\n };\n\n var popup = null;\n var popupByDefault = true;\n\n var displayFunction = this.options.popup.function;\n if (displayFunction && typeof displayFunction === \"function\") {\n // la sauvegarde et la fermeture sont des actions à implementer par l'utilisateur\n // par contre, la destruction est à gerer en interne\n popup = displayFunction.call(context, {\n feature : feature,\n geomType : geomType,\n closeFunc : function () {\n setAttValue(null, false);\n },\n saveFunc : function (message) {\n setAttValue(message, true);\n }\n });\n if (popup) {\n // on est sûr que la popup customisée existe,\n // donc on n'utilise pas celle par defaut...\n popupByDefault = false;\n // FIXME comment forcer le focus sur une div ?\n popup.tabIndex = -1; // hack sur le focus sur une div ?\n popup.onblur = function () {\n context.getMap().removeOverlay(context.popupOvl);\n context.popupOvl = null;\n };\n }\n }\n // use popup by default\n if (popupByDefault) {\n // function by default\n popup = this._createLabelDiv({\n applyFunc : setAttValue,\n inputId : this._addUID(\"att-input\"),\n placeholder : \"Saisir une description...\",\n measure : (this.options.tools.measure) ? feature.getProperties().measure : null,\n geomType : geomType,\n key : \"description\"\n });\n }\n // un peu de menage...\n if (this.popupOvl) {\n this.getMap().removeOverlay(this.popupOvl);\n this.popupOvl = null;\n }\n // creation de l'overlay\n this.popupOvl = new Overlay({\n element : popup,\n // FIXME : autres valeurs.\n positioning : \"top-center\"\n // stopEvent : false\n });\n this.getMap().addOverlay(this.popupOvl);\n var geomExtent = feature.getGeometry().getExtent();\n this.popupOvl.setPosition([\n (geomExtent[0] + geomExtent[2]) / 2, (geomExtent[1] + geomExtent[3]) / 2\n ]);\n if (document.getElementById(this._addUID(\"att-input\"))) {\n document.getElementById(this._addUID(\"att-input\")).focus();\n }\n }\n }\n\n /**\n * Creates Interaction for features removal.\n *\n * @returns {SelectInteraction} created interaction.\n * @private\n */\n _createRemoveInteraction () {\n var interaction = new SelectInteraction({\n // features : this.layer.getSource().getFeaturesCollection(),\n layers : [this.layer],\n style : false\n });\n interaction.on(\"select\", (seEv) => {\n if (!seEv || !seEv.selected || seEv.selected.length === 0) {\n return;\n }\n this.layer.getSource().removeFeature(seEv.selected[0]);\n // suppression puis rajout de l'interaction pour appliquer le changement tout de suite...\n this.getMap().removeInteraction(this.interactionCurrent);\n this.interactionCurrent = this._createRemoveInteraction();\n this.getMap().addInteraction(this.interactionCurrent);\n });\n return interaction;\n }\n\n /**\n * Creates Interaction for features style definition.\n *\n * @returns {ol.interaction.Select} created interaction.\n * @private\n */\n _createStylingInteraction () {\n var interaction = new SelectInteraction({\n layers : [this.layer],\n style : false\n });\n interaction.on(\"select\", (seEv) => {\n // suppression de toute popup existante\n if (this.stylingOvl) {\n this.getMap().removeOverlay(this.stylingOvl);\n }\n if (!seEv || !seEv.selected || seEv.selected.length === 0) {\n return;\n }\n\n var valuesColor = null;\n var hexColor = null;\n var popupOvl = null;\n var geomType = null;\n var initValues = {};\n\n // FIXME\n // l'appel feature.getStyle() est parfois nul pour des geometries Point\n // avec un style par defaut !\n\n var geom = seEv.selected[0].getGeometry();\n var style = seEv.selected[0].getStyle();\n if (geom instanceof Point || geom instanceof MultiPoint) {\n // INFO\n // on determine si c'est un marker (ou cercle), un label ou les 2.\n // un label a un pixel transparent comme icone\n if (style &&\n style.getImage() &&\n typeof style.getImage().getSrc === \"function\" &&\n style.getImage().getSrc() !== this.options.defaultStyles.textIcon1x1.src) {\n geomType = \"Point\";\n // on traite un marker\n // mais si c'est un cercle !?\n if (typeof style.getImage().getSrc === \"function\") {\n initValues.markerSrc = style.getImage().getSrc();\n initValues.markerSize = style.getImage().getScale() || 1;\n initValues.markerAnchor = style.getImage().getAnchor();\n if (style.getImage().getColor()) {\n valuesColor = style.getImage().getColor();\n if (Array.isArray(valuesColor)) { // FIXME Array !?\n valuesColor = \"rgba(\" + valuesColor.join() + \")\";\n } else {\n initValues.markerColor = valuesColor;\n }\n hexColor = Color.isRGB(valuesColor) ? Color.rgbaToHex(valuesColor) : {\n hex : valuesColor,\n opacity : 1\n };\n initValues.markerColor = hexColor.hex;\n initValues.markerOpacity = hexColor.opacity;\n } else {\n initValues.markerColor = this.options.markersList[0].color || \"#ffffff\";\n }\n } else {\n initValues.markerSrc = this.options.markersList[0].src;\n initValues.markerSize = this.options.markersList[0].scale || 1;\n initValues.markerColor = this.options.markersList[0].color || \"#ffffff\";\n initValues.markerAnchor = this.options.markersList[0].anchor;\n }\n initValues.markerCustom = !(this._getsMarkersOptionsFromSrc(initValues.markerSrc));\n }\n if (style && style.getText()) {\n var labelName = seEv.selected[0].getProperties().name;\n if (labelName) {\n // test si on a un marker avec un label\n geomType = (geomType === \"Point\") ? \"Point&Text\" : \"Text\";\n if (style.getText().getStroke() && style.getText().getStroke().getColor()) {\n valuesColor = style.getText().getStroke().getColor();\n if (Array.isArray(valuesColor)) { // FIXME Array !?\n valuesColor = \"rgba(\" + valuesColor.join() + \")\";\n } else {\n initValues.strokeColor = valuesColor;\n }\n hexColor = Color.isRGB(valuesColor) ? Color.rgbaToHex(valuesColor) : {\n hex : valuesColor,\n opacity : 1\n };\n initValues.strokeColor = hexColor.hex;\n initValues.strokeOpacity = hexColor.opacity;\n }\n if (style.getText().getStroke() && style.getText().getStroke().getWidth()) {\n initValues.strokeWidth = style.getText().getStroke().getWidth();\n }\n if (style.getText().getFill() && style.getText().getFill().getColor()) {\n valuesColor = style.getText().getFill().getColor();\n if (Array.isArray(valuesColor)) {\n valuesColor = \"rgba(\" + valuesColor.join() + \")\";\n } else {\n initValues.fillColor = valuesColor;\n }\n hexColor = Color.isRGB(valuesColor) ? Color.rgbaToHex(valuesColor) : {\n hex : valuesColor,\n opacity : 1\n };\n initValues.fillColor = hexColor.hex;\n initValues.fillOpacity = hexColor.opacity;\n }\n initValues.strokeColor = initValues.hasOwnProperty(\"strokeColor\") ? initValues.strokeColor : this.options.defaultStyles.textStrokeColor;\n initValues.strokeWidth = initValues.hasOwnProperty(\"strokeWidth\") ? initValues.strokeWidth : this.options.defaultStyles.textStrokeWidth;\n initValues.fillColor = initValues.hasOwnProperty(\"fillColor\") ? initValues.fillColor : this.options.defaultStyles.textFillColor;\n // Par defaut, pour un marker avec un label, on affiche le label si le tag \"name\" est renseigné.\n if (geomType === \"Point&Text\") {\n var value = style.getText().getText();\n if (!value) {\n style.getText().setText(labelName);\n }\n var checked = seEv.selected[0].get(\"checked\");\n initValues.labelDisplay = (checked === undefined) ? this.options.defaultStyles.labelDisplay : checked;\n }\n }\n }\n } else if (geom instanceof LineString || geom instanceof MultiLineString) {\n geomType = \"Line\";\n if (style && style.getStroke()) {\n if (style.getStroke().getWidth()) {\n initValues.strokeWidth = style.getStroke().getWidth();\n }\n if (style.getStroke().getColor()) {\n valuesColor = style.getStroke().getColor();\n if (Array.isArray(valuesColor)) {\n valuesColor = \"rgba(\" + valuesColor.join() + \")\";\n } else {\n initValues.strokeColor = valuesColor;\n }\n hexColor = Color.isRGB(valuesColor) ? Color.rgbaToHex(valuesColor) : {\n hex : valuesColor,\n opacity : 1\n };\n initValues.strokeColor = hexColor.hex;\n initValues.strokeOpacity = hexColor.opacity;\n }\n }\n initValues.strokeWidth = initValues.hasOwnProperty(\"strokeWidth\") ? initValues.strokeWidth : this.options.defaultStyles.strokeWidth;\n initValues.strokeColor = initValues.hasOwnProperty(\"strokeColor\") ? initValues.strokeColor : this.options.defaultStyles.strokeColor;\n } else if (geom instanceof Polygon || geom instanceof MultiPolygon) {\n geomType = \"Polygon\";\n if (style && style.getStroke()) {\n if (style.getStroke().getWidth()) {\n initValues.strokeWidth = style.getStroke().getWidth();\n }\n if (style.getStroke().getColor()) {\n valuesColor = style.getStroke().getColor();\n if (Array.isArray(valuesColor)) {\n valuesColor = \"rgba(\" + valuesColor.join() + \")\";\n } else {\n initValues.strokeColor = valuesColor;\n }\n hexColor = Color.isRGB(valuesColor) ? Color.rgbaToHex(valuesColor) : {\n hex : valuesColor,\n opacity : 1\n };\n initValues.strokeColor = hexColor.hex;\n initValues.strokeOpacity = hexColor.opacity;\n }\n }\n if (style && style.getFill()) {\n if (style.getFill().getColor()) {\n valuesColor = style.getFill().getColor();\n if (Array.isArray(valuesColor)) {\n valuesColor = \"rgba(\" + valuesColor.join() + \")\";\n } else {\n initValues.fillColor = valuesColor;\n }\n hexColor = Color.isRGB(valuesColor) ? Color.rgbaToHex(valuesColor) : {\n hex : valuesColor,\n opacity : 1\n };\n initValues.fillColor = hexColor.hex;\n initValues.fillOpacity = hexColor.opacity;\n }\n }\n initValues.strokeWidth = initValues.hasOwnProperty(\"strokeWidth\") ? initValues.strokeWidth : this.options.defaultStyles.polyStrokeWidth;\n initValues.strokeColor = initValues.hasOwnProperty(\"strokeColor\") ? initValues.strokeColor : this.options.defaultStyles.polyStrokeColor;\n initValues.fillColor = initValues.hasOwnProperty(\"fillColor\") ? initValues.fillColor : this.options.defaultStyles.polyFillColor;\n initValues.fillOpacity = initValues.hasOwnProperty(\"fillOpacity\") ? initValues.fillOpacity : this.options.defaultStyles.polyFillOpacity;\n }\n if (!geomType) {\n logger.log(\"Unhandled geometry type for styling.\");\n return;\n }\n var dtObj = this;\n /**\n * function called when apply button is pressed.\n *\n * @param {String} action - \"apply\" (to selected object), \"default\" (set as default), \"cancel\" (do nothing).\n */\n var applyStyle = function (action) {\n if (action === \"cancel\") {\n dtObj.getMap().removeOverlay(popupOvl);\n return;\n }\n var setDefault = action !== \"apply\";\n\n var fillColorElem = document.getElementById(dtObj._addUID(\"fillColor\"));\n var fillOpacityElem = document.getElementById(dtObj._addUID(\"fillOpacity\"));\n var strokeColorElem = document.getElementById(dtObj._addUID(\"strokeColor\"));\n var strokeWidthElem = document.getElementById(dtObj._addUID(\"strokeWidth\"));\n var markerSizeElem = document.getElementById(dtObj._addUID(\"markerSize\"));\n // var markerColorElem = document.getElementById(dtObj._addUID(\"markerColor\"));\n switch (geomType.toLowerCase()) {\n case \"text\":\n if (setDefault) {\n dtObj.options.defaultStyles.textStrokeColor = strokeColorElem.value;\n dtObj.options.defaultStyles.textStrokeWidth = strokeWidthElem.value;\n dtObj.options.defaultStyles.textFillColor = fillColorElem.value;\n } else {\n seEv.selected[0].setStyle(new Style({\n text : new Text({\n font : \"16px sans\",\n textAlign : \"left\",\n text : style.getText().getText(),\n fill : new Fill({\n color : fillColorElem.value\n }),\n stroke : new Stroke({\n color : strokeColorElem.value,\n width : parseInt(strokeWidthElem.value, 10)\n })\n })\n }));\n }\n break;\n case \"point&text\":\n case \"point\":\n var labelDisplay = document.querySelector(\"input[type='checkbox']\");\n // FIXME cas où le marker n'est pas dans la liste ?\n // si le marker n'existe pas dans le liste, on ne souhaite donc que changer la couleur du\n // pictogramme ou la taille..., on garde donc le picto initial.\n var markerSelected = null;\n var scale = parseInt(markerSizeElem.value, 10) / 10;\n var markerChecked = document.querySelector(\"input[name='marker']:checked\");\n if (markerChecked) {\n markerSelected = dtObj._getsMarkersOptionsFromSrc(markerChecked.value);\n markerSelected.scale = scale;\n // markerSelected.color = markerColorElem.value;\n }\n if (setDefault) {\n dtObj.options.defaultStyles.markerSize = scale;\n if (dtObj.options.markersList.length > 1) {\n // index du marker dans la liste des markers\n var idxMarker = dtObj.options.markersList.findIndex(function (mrk) {\n if (mrk === markerSelected) { // FIXME object comparison\n return true;\n }\n return false;\n });\n if (idxMarker > 0) {\n // on enleve le marker de son ancienne position\n dtObj.options.markersList.splice(idxMarker, 1);\n // on le place en tête de liste\n dtObj.options.markersList.splice(0, 0, markerSelected);\n }\n }\n if (geomType.toLowerCase() === \"point&text\") {\n dtObj.options.defaultStyles.textStrokeColor = initValues.strokeColor;\n dtObj.options.defaultStyles.textStrokeWidth = initValues.strokeWidth;\n dtObj.options.defaultStyles.textFillColor = initValues.fillColor;\n dtObj.options.defaultStyles.labelDisplay = initValues.labelDisplay;\n }\n } else {\n var text = {};\n if (geomType.toLowerCase() === \"point&text\") {\n seEv.selected[0].set(\"checked\", labelDisplay.checked);\n text = {\n text : new Text({\n font : \"16px sans\",\n textAlign : \"left\",\n text : (labelDisplay.checked) ? seEv.selected[0].get(\"name\") : \"\",\n fill : new Fill({\n color : initValues.fillColor\n }),\n stroke : new Stroke({\n color : initValues.strokeColor,\n width : parseInt(initValues.strokeWidth, 10)\n })\n })\n };\n }\n if (markerSelected) {\n seEv.selected[0].setStyle(new Style(Object.assign({\n image : new Icon(dtObj._getIconStyleOptions(markerSelected))\n }, text)));\n } else {\n // FIXME anchor !?\n seEv.selected[0].setStyle(new Style(Object.assign({\n image : new Icon({\n src : initValues.markerSrc, // on garde le pictogramme initial !\n // color : markerColorElem.value, // on recupère la couleur !\n anchor : initValues.markerAnchor, // on garde la position initial !\n anchorOrigin : \"top-left\",\n anchorXUnits : \"pixels\",\n anchorYUnits : \"pixels\",\n scale : scale\n })\n }, text)));\n }\n }\n break;\n case \"line\":\n if (setDefault) {\n dtObj.options.defaultStyles.strokeColor = strokeColorElem.value;\n dtObj.options.defaultStyles.strokeWidth = parseInt(strokeWidthElem.value, 10);\n } else {\n seEv.selected[0].setStyle(new Style({\n stroke : new Stroke({\n width : parseInt(strokeWidthElem.value, 10),\n color : strokeColorElem.value\n })\n }));\n }\n break;\n case \"polygon\":\n var opacity = parseInt(fillOpacityElem.value, 10) / 10;\n if (setDefault) {\n dtObj.options.defaultStyles.polyStrokeColor = strokeColorElem.value;\n dtObj.options.defaultStyles.polyFillColor = fillColorElem.value;\n dtObj.options.defaultStyles.polyFillOpacity = opacity;\n dtObj.options.defaultStyles.polyStrokeWidth = parseInt(strokeWidthElem.value, 10);\n } else {\n seEv.selected[0].setStyle(new Style({\n stroke : new Stroke({\n width : parseInt(strokeWidthElem.value, 10),\n color : strokeColorElem.value\n }),\n fill : new Fill({\n // color : fillColorElem.value\n color : Color.hexToRgba(fillColorElem.value, opacity)\n })\n }));\n }\n break;\n }\n if (!setDefault) {\n // application des styles par defaut\n // fermeture de la popup (si on applique le style à l'objet)\n dtObj.getMap().removeOverlay(popupOvl);\n }\n };\n\n var popupDiv = this._createStylingDiv({\n geomType : geomType,\n initValues : initValues,\n applyFunc : applyStyle\n });\n popupOvl = new Overlay({\n element : popupDiv,\n // FIXME : autres valeurs.\n positioning : \"top-center\"\n // stopEvent : false\n });\n this.getMap().addOverlay(popupOvl);\n popupOvl.setPosition(seEv.mapBrowserEvent.coordinate);\n this.stylingOvl = popupOvl;\n // suppression puis rajout de l'interaction pour appliquer le changement tout de suite...\n this.getMap().removeInteraction(this.interactionCurrent);\n this.interactionCurrent = this._createStylingInteraction();\n this.getMap().addInteraction(this.interactionCurrent);\n });\n return interaction;\n }\n\n /**\n * Creates Interaction for text definition.\n *\n * @returns {SelectInteraction} created interaction.\n * @private\n */\n _createLabelInteraction () {\n var interaction = new SelectInteraction({\n layers : [this.layer],\n style : false\n });\n interaction.on(\"select\", (seEv) => {\n // suppression de toute popup existante\n if (this.labelOvl) {\n this.getMap().removeOverlay(this.labelOvl);\n }\n if (!seEv || !seEv.selected || seEv.selected.length === 0) {\n return;\n }\n var popupOvl = null;\n var geomType = null;\n var _textValue = null;\n var _measure = null;\n\n var geom = seEv.selected[0].getGeometry();\n var style = seEv.selected[0].getStyle();\n if (geom instanceof Point || geom instanceof MultiPoint) {\n // on determine si c'est un marker ou un label.\n var _label = seEv.selected[0].getProperties().name;\n if (style && style.getText() && _label) {\n geomType = \"Text\";\n } else if (style && style.getImage()) {\n geomType = \"Point\";\n }\n } else if (geom instanceof LineString || geom instanceof MultiLineString) {\n geomType = \"Line\";\n } else if (geom instanceof Polygon || geom instanceof MultiPolygon) {\n geomType = \"Polygon\";\n } else {\n logger.log(\"Geometry type for styling not supported .\");\n return;\n }\n\n if (!geomType) {\n logger.log(\"Unhandled geometry type for styling.\");\n return;\n }\n\n if (geomType === \"Text\") {\n // pour les labels on récupère la valeur dans le style\n _textValue = style.getText().getText();\n } else {\n // pour les autres, c'est un attribut du feature\n // choix à faire entre description (KML et GeoJSON) ou desc (GPX)\n var featProps = seEv.selected[0].getProperties();\n if (featProps && (featProps.hasOwnProperty(\"description\") || featProps.hasOwnProperty(\"desc\"))) {\n _textValue = featProps[\"description\"] || featProps[\"desc\"];\n }\n if (featProps && featProps.hasOwnProperty(\"measure\")) {\n _measure = featProps[\"measure\"];\n }\n }\n\n var context = this;\n /**\n * Enregistrement de la valeur saisie dans l'input.\n *\n * @param {String} key - clef de l'attribut.\n * @param {String} value - valeur de l'attribut.\n * @param {Boolean} save - true si on garde le label.\n */\n var setTextValue = function (key, value, save) {\n context.getMap().removeOverlay(popupOvl);\n if (!save) {\n return;\n }\n\n var feature = seEv.selected[0];\n if (geomType === \"Text\") {\n var style = feature.getStyle();\n style.getText().setText(value);\n feature.setProperties({\n name : value\n });\n feature.setStyle(style);\n return;\n }\n\n var obj = {};\n obj[key] = value.replace(/\\n/g, \"
    \");\n feature.setProperties(obj);\n };\n\n var popupDiv = this._createLabelDiv({\n applyFunc : setTextValue,\n inputId : this._addUID(\"label-input\"),\n placeholder : (geomType === \"Text\" ? \"Saisir un label...\" : \"Saisir une description...\"),\n text : _textValue,\n key : \"description\",\n measure : (this.options.tools.measure) ? _measure : null,\n geomType : geomType\n });\n\n popupOvl = new Overlay({\n element : popupDiv,\n // FIXME : autres valeurs.\n positioning : \"top-center\"\n // stopEvent : false\n });\n\n this.getMap().addOverlay(popupOvl);\n popupOvl.setPosition(seEv.mapBrowserEvent.coordinate);\n document.getElementById(this._addUID(\"label-input\")).focus();\n this.labelOvl = popupOvl;\n // suppression puis rajout de l'interaction pour appliquer le changement tout de suite...\n this.getMap().removeInteraction(this.interactionCurrent);\n this.interactionCurrent = this._createLabelInteraction();\n this.getMap().addInteraction(this.interactionCurrent);\n });\n return interaction;\n }\n\n /**\n * Callback de fin de modification du dessin afin de mettre à jour la mesure\n * TODO\n * @param {Object} feature - ol feature\n * @param {String} geomType - geometry type\n *\n * @private\n */\n _updateMeasure (feature, geomType) {\n logger.log(feature);\n\n var measure = null;\n\n var projection = this.getMap().getView().getProjection();\n\n // arrondi\n function __roundDecimal (nombre, precision) {\n precision = precision || 2;\n var factor = Math.pow(10, precision);\n return Math.round(nombre * factor) / factor;\n }\n\n var type = (geomType) || feature.getProperties().type;\n switch (type) {\n case \"Point\":\n var coordinatesPoint = (feature.getGeometry()).getCoordinates();\n var c = olTransformProj(coordinatesPoint, projection, \"EPSG:4326\");\n measure = \"lon : \";\n measure += __roundDecimal(c[0], 4) + \"°\";\n measure += \" / \";\n measure += \"lat : \";\n measure += __roundDecimal(c[1], 4) + \"°\";\n\n break;\n case \"LineString\":\n var measureLength = 0;\n var coordinatesLine = (feature.getGeometry()).getCoordinates();\n for (var i = 0, ii = coordinatesLine.length - 1; i < ii; ++i) {\n var c1 = olTransformProj(coordinatesLine[i], projection, \"EPSG:4326\");\n var c2 = olTransformProj(coordinatesLine[i + 1], projection, \"EPSG:4326\");\n measureLength += olGetDistanceSphere(c1, c2);\n }\n measure = (measureLength > 1000)\n ? __roundDecimal(measureLength / 1000, 3) + \" km\"\n : __roundDecimal(measureLength, 3) + \" m\";\n\n break;\n case \"Polygon\":\n var measureArea = 0;\n var geom = (feature.getGeometry()).clone();\n var coordinatesAera = geom.getLinearRing(0).getCoordinates();\n measureArea = Math.abs(olGetAreaSphere(new Polygon([coordinatesAera])));\n\n // FIXME on se limite à des trous uniquement !\n // cad les polygones sont strictement contenus dans le 1er !\n var rings = geom.getLinearRings();\n if (rings.length > 1) {\n for (var ij = 1; ij < rings.length; ij++) {\n var coordinatesRings = rings[ij].getCoordinates();\n measureArea -= Math.abs(olGetAreaSphere(new Polygon([coordinatesRings])));\n }\n }\n\n measure = (measureArea > 1000000)\n ? __roundDecimal(measureArea / 1000000, 3) + \" km^2\"\n : __roundDecimal(measureArea, 2) + \" m^2\";\n\n break;\n }\n\n // enregistrement de la mesure dans la feature\n feature.setProperties({\n measure : measure,\n type : type\n });\n }\n\n /**\n * Handles click on drawing tools icons\n *\n * @param {Event} clickEvent - click event\n * @param {String} toolId - selected tool Id\n * @param {Drawing} context - Drawing control.\n * @private\n */\n _handleToolClick (clickEvent, toolId, context) {\n var map = context.getMap();\n if (!map) {\n logger.trace(\"Drawing control not attached to any map.\");\n return;\n }\n // on supprime les interactions des autres extensions\n Interactions.unset(map, {\n current : \"Drawing\"\n });\n\n // on supprime l'interaction courante s'il y en a une.\n if (context.interactionCurrent) {\n map.removeInteraction(context.interactionCurrent);\n context.interactionCurrent = null;\n }\n\n // on supprime l'interaction de selection courante s'il y en a une.\n if (context.interactionSelectEdit) {\n map.removeInteraction(context.interactionSelectEdit);\n context.interactionSelectEdit = null;\n }\n\n // on supprime la popup courante s'il y en a une.\n if (context.popupOvl) {\n context.getMap().removeOverlay(context.popupOvl);\n context.popupOvl = null;\n }\n\n // si aucune couche de dessin, on en crée une vide.\n if (!this.layer) {\n this._createEmptyLayer();\n }\n switch (toolId) {\n case this._addUID(\"drawing-tool-point\"):\n if (context.dtOptions[\"points\"].active) {\n context.interactionCurrent = new DrawInteraction({\n stopClick : true,\n // features : context.layer.getSource().getFeaturesCollection(),\n source : context.layer.getSource(),\n style : new Style({\n image : new Icon(this._getIconStyleOptions(this.options.markersList[0]))\n }),\n type : (\"Point\")\n });\n context.interactionCurrent.on(\"drawend\", function (deEv) {\n // ajout eventuel d'un attribut description sur le feature\n context._drawEndFeature(deEv.feature, \"Point\");\n },\n context);\n }\n break;\n case this._addUID(\"drawing-tool-line\"):\n if (context.dtOptions[\"lines\"].active) {\n context.interactionCurrent = new DrawInteraction({\n stopClick : true,\n // features : context.layer.getSource().getFeaturesCollection(),\n source : context.layer.getSource(),\n style : new Style({\n image : new Circle({\n radius : this.options.cursorStyle.radius,\n stroke : new Stroke({\n color : this.options.cursorStyle.strokeColor,\n width : this.options.cursorStyle.strokeWidth\n }),\n fill : new Fill({\n color : this.options.cursorStyle.fillColor\n })\n }),\n stroke : new Stroke({\n color : this.options.defaultStyles.strokeColor,\n width : this.options.defaultStyles.strokeWidth\n })\n }),\n type : (\"LineString\")\n });\n context.interactionCurrent.on(\"drawend\", function (deEv) {\n // ajout eventuel d'un attribut description sur le feature\n context._drawEndFeature(deEv.feature, \"LineString\");\n },\n context);\n }\n break;\n case this._addUID(\"drawing-tool-polygon\"):\n if (context.dtOptions[\"polygons\"].active) {\n context.interactionCurrent = new DrawInteraction({\n stopClick : true,\n // features : context.layer.getSource().getFeaturesCollection(),\n source : context.layer.getSource(),\n style : new Style({\n image : new Circle({\n radius : this.options.cursorStyle.radius,\n stroke : new Stroke({\n color : this.options.cursorStyle.strokeColor,\n width : this.options.cursorStyle.strokeWidth\n }),\n fill : new Fill({\n color : this.options.cursorStyle.fillColor\n })\n }),\n stroke : new Stroke({\n color : this.options.defaultStyles.polyStrokeColor,\n width : this.options.defaultStyles.polyStrokeWidth\n }),\n fill : new Fill({\n color : Color.hexToRgba(\n this.options.defaultStyles.polyFillColor,\n this.options.defaultStyles.polyFillOpacity\n )\n })\n }),\n type : (\"Polygon\")\n });\n context.interactionCurrent.on(\"drawend\", function (deEv) {\n // ajout eventuel d'un attribut description sur le feature\n context._drawEndFeature(deEv.feature, \"Polygon\");\n },\n context);\n }\n break;\n case this._addUID(\"drawing-tool-holes\"):\n if (context.dtOptions[\"holes\"].active) {\n // selection du polygone à modifier\n context.interactionSelectEdit = new SelectInteraction({\n stopClick : true,\n condition : eventPointerMove,\n layers : [this.layer]\n });\n context.interactionSelectEdit.setProperties({\n name : \"Drawing\",\n source : context\n });\n map.addInteraction(context.interactionSelectEdit);\n\n // saisie\n context.interactionCurrent = new DrawInteraction({\n stopClick : true,\n features : this.interactionSelectEdit.getFeatures(),\n style : new Style({\n image : new Circle({\n radius : this.options.cursorStyle.radius,\n stroke : new Stroke({\n color : this.options.cursorStyle.strokeColor,\n width : this.options.cursorStyle.strokeWidth\n }),\n fill : new Fill({\n color : this.options.cursorStyle.fillColor\n })\n }),\n stroke : new Stroke({\n color : this.options.defaultStyles.polyStrokeColor,\n width : this.options.defaultStyles.polyStrokeWidth\n }),\n fill : new Fill({\n color : Color.hexToRgba(\n this.options.defaultStyles.polyFillColor,\n this.options.defaultStyles.polyFillOpacity\n )\n })\n }),\n type : (\"Polygon\")\n });\n\n context.interactionCurrent.on(\"drawstart\", function (deEv) {}, context);\n\n context.interactionCurrent.on(\"drawend\", function (deEv) {\n // recuperation du feature selectionné\n var features = context.interactionSelectEdit.getFeatures();\n if (features.getLength()) {\n // choix sur le 1er feature de la liste\n var feature = features.item(0);\n var hole = deEv.feature.getGeometry().getCoordinates()[0];\n // test pour savoir si le polygone est entièrement\n // inclu dans l'autre afin de faciliter les calculs d'aire !\n var bHoleIsIncluded = true;\n for (var i = 0; i < hole.length; i++) {\n if (!feature.getGeometry().intersectsCoordinate(hole[i])) {\n bHoleIsIncluded = false;\n break;\n }\n }\n if (!bHoleIsIncluded) {\n return;\n }\n // ajout du rings\n feature.getGeometry().appendLinearRing(new LinearRing(hole));\n // enregistrement !\n deEv.feature = feature;\n // finalisation du dessin...\n context._drawEndFeature(deEv.feature, \"Polygon\");\n }\n },\n context);\n }\n break;\n case this._addUID(\"drawing-tool-text\"):\n // text : creation de points invisibles avec un label.\n if (context.dtOptions[\"text\"].active) {\n context.interactionCurrent = new DrawInteraction({\n stopClick : true,\n // features : context.layer.getSource().getFeaturesCollection(),\n source : context.layer.getSource(),\n style : new Style({\n image : new Circle({\n radius : this.options.cursorStyle.radius,\n stroke : new Stroke({\n color : this.options.cursorStyle.strokeColor,\n width : this.options.cursorStyle.strokeWidth\n }),\n fill : new Fill({\n color : this.options.cursorStyle.fillColor\n })\n })\n }),\n type : (\"Point\")\n });\n context.interactionCurrent.on(\"drawend\", (deEv) => {\n // creation overlay pour saisie du label\n var popupOvl = null;\n /**\n * Enregistrement de la valeur saisie dans l'input.\n *\n * @param {String} key - clef du label\n * @param {String} value - valeur du label\n * @param {Boolean} save - true si on garde le label.\n */\n var setTextValue = function (key, value, save) {\n context.getMap().removeOverlay(popupOvl);\n if (!save) {\n // removes feature from overlay.\n context.layer.getSource().removeFeature(deEv.feature);\n return;\n }\n\n var obj = {};\n obj[key] = value;\n deEv.feature.setProperties(obj);\n\n deEv.feature.setStyle(new Style({\n // HACK : on ajoute un icone invisible de 1x1 pixel afin d'eviter\n // l'affichage d'une punaise google !\n image : new Icon(context._getIconStyleOptions(context.options.defaultStyles.textIcon1x1)),\n text : new Text({\n textAlign : \"left\",\n font : \"16px sans\",\n text : value,\n fill : new Fill({\n color : context.options.defaultStyles.textFillColor\n }),\n stroke : new Stroke({\n color : context.options.defaultStyles.textStrokeColor,\n width : 3\n })\n })\n }));\n };\n var popup = this._createLabelDiv({\n applyFunc : setTextValue,\n inputId : context._addUID(\"label-input\"),\n geomType : \"Text\",\n key : \"name\",\n placeholder : \"Saisir un label...\"\n });\n popupOvl = new Overlay({\n element : popup,\n // FIXME : autres valeurs.\n positioning : \"top-center\" // par defaut, top-left...\n // stopEvent : false\n });\n context.getMap().addOverlay(popupOvl);\n popupOvl.setPosition(deEv.feature.getGeometry().getCoordinates());\n document.getElementById(this._addUID(\"label-input\")).focus();\n });\n }\n break;\n case this._addUID(\"drawing-tool-edit\"):\n if (context.dtOptions[\"edit\"].active) {\n this.featuresCollectionSelected = new Collection();\n context.interactionSelectEdit = new SelectInteraction({\n condition : eventSingleClick,\n layers : [this.layer],\n features : this.featuresCollectionSelected\n });\n context.interactionSelectEdit.on(\"select\", (e) => {\n // ...\n });\n context.interactionSelectEdit.setProperties({\n name : \"Drawing\",\n source : context\n });\n map.addInteraction(context.interactionSelectEdit);\n\n context.interactionCurrent = new ModifyInteraction({\n stopClick : true,\n // features : context.layer.getSource().getFeaturesCollection(),\n features : this.interactionSelectEdit.getFeatures(),\n style : new Style({\n image : new Circle({\n radius : this.options.cursorStyle.radius,\n stroke : new Stroke({\n color : this.options.cursorStyle.strokeColor,\n width : this.options.cursorStyle.strokeWidth\n }),\n fill : new Fill({\n color : this.options.cursorStyle.fillColor\n })\n })\n })\n // deleteCondition : function (/* event */) { return false },\n // insertVertexCondition : function (/* event */) { return false }\n });\n context.interactionCurrent.on(\"modifyend\", (deEv) => {\n var feature = deEv.features.item(0);\n context._updateMeasure(feature);\n });\n }\n break;\n case this._addUID(\"drawing-tool-display\"):\n if (context.dtOptions[\"display\"].active) {\n context.interactionCurrent = this._createStylingInteraction();\n }\n break;\n case this._addUID(\"drawing-tool-tooltip\"):\n\n if (context.dtOptions[\"tooltip\"].active) {\n context.interactionCurrent = this._createLabelInteraction();\n }\n break;\n case this._addUID(\"drawing-tool-remove\"):\n if (context.dtOptions[\"remove\"].active) {\n context.interactionCurrent = context._createRemoveInteraction();\n }\n break;\n default:\n logger.trace(\"unhandled tool type\");\n }\n if (context.interactionCurrent) {\n context.interactionCurrent.setProperties({\n name : \"Drawing\",\n source : this\n });\n map.addInteraction(context.interactionCurrent);\n }\n logger.log(\"interactions\", map.getInteractions());\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on 'GPshowDrawingPicto' tag label\n * (cf. this._createShowDrawingPictoElement),\n * and toggles event 'mousemove' on map.\n *\n * @method onShowDrawingClick\n * @param { event } e évènement associé au clic\n * @private\n */\n onShowDrawingClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n // on supprime toutes les interactions\n Interactions.unset(map);\n\n var opened = this._showDrawingButton.ariaPressed;\n this.collapsed = !(opened === \"true\");// on génère nous même l'evenement OpenLayers de changement de propriété\n // (utiliser mousePosition.on(\"change:collapsed\", function(e) ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n // on deselectionne les Tools\n for (var toolsType in this.dtOptions) {\n if (this.dtOptions.hasOwnProperty(toolsType)) {\n if (this.dtOptions[toolsType].active) {\n var toolsId = this._addUID(\"drawing-tool-\" + this.dtOptions[toolsType].id);\n document.getElementById(toolsId).className = \"drawing-tool fr-m-1w fr-btn fr-btn--tertiary gpf-btn--tertiary\";\n this.dtOptions[toolsType].active = false;\n }\n }\n }\n }\n\n /**\n * this method is called by event 'click' on 'drawing-export' tag button.\n *\n * @method onExportFeatureClick\n * @private\n */\n onExportFeatureClick () {\n var content = this.exportFeatures();\n if (!content) {\n return;\n }\n var link = document.createElement(\"a\");\n // FIXME : determiner le bon charset !\n var charset = \"utf-8\";\n link.setAttribute(\"href\", \"data:\" + this._exportMimeType + \";charset=\" + charset + \",\" + encodeURIComponent(content));\n link.setAttribute(\"download\", this.getExportName() + this._exportExt);\n if (document.createEvent) {\n var event = document.createEvent(\"MouseEvents\");\n event.initEvent(\"click\", true, true);\n link.dispatchEvent(event);\n } else {\n link.click();\n }\n }\n\n};\n\n// on récupère les méthodes de la classe commune Drawing\nObject.assign(Drawing.prototype, DrawingDOM);\nObject.assign(Drawing.prototype, Widget);\n\nexport default Drawing;\n\n// Expose Drawing as ol.control.Drawing (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.Drawing = Drawing;\n}\n","import ID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport GeocodeUtils from \"../../Utils/GeocodeUtils\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar logger = Logger.getLogger(\"LocationSelectorDOM\");\n\nvar LocationSelectorDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.className = this._addUID(\"GPlocationPoint\"); // ceci permet de gerer les groupes de points !\n container.className += \" GPwidget gpf-widget \";\n return container;\n },\n\n /**\n * Create Container Point\n * see event !\n *\n * @param {Number} id - tag ID\n * @param {Number} display - display\n * @returns {DOMElement} DOM element\n */\n _createLocationPointElement : function (id, display) {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPlocationPoint_\" + id);\n div.className = (display) ? \"GPflexInput GPlocationStageFlexInput gpf-flex\" : \"GPflexInput GPelementHidden gpf-flex gpf-hidden\";\n div.style.cssText = \"\";\n\n return div;\n },\n\n /**\n * Create Container Point\n * see event !\n *\n * @param {Number} id - tag ID\n * @param {String} text - label\n * @returns {DOMElement} DOM element\n */\n _createLocationPointLabelElement : function (id, text) {\n // contexte d'execution\n var self = this;\n\n var buttonOrigin = document.createElement(\"button\");\n buttonOrigin.id = this._addUID(\"GPlocationOriginLabel_\" + id);\n buttonOrigin.innerHTML = text;\n buttonOrigin.className = \"GPlocationOriginLabel gpf-btn gpf-btn-icon-label fr-btn fr-btn--secondary gpf-btn--secondary\";\n buttonOrigin.setAttribute(\"type\", \"button\");\n buttonOrigin.addEventListener(\"click\", function (e) {\n var i = ID.index(this.id);\n var points = document.getElementsByClassName(self._addUID(\"GPlocationPoint\"));\n for (var j = 0; j < points.length; j++) {\n var tag = points[j].childNodes[0].id;\n var id = ID.index(tag);\n document.getElementById(self._addUID(\"GPlocationPoint_\" + id)).style.cssText = \"\";\n }\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).value = \"\";\n document.getElementById(self._addUID(\"GPlocationOrigin_\" + i)).value = \"\";\n document.getElementById(self._addUID(\"GPlocationPoint_\" + i)).style.cssText = \"\";\n document.getElementById(self._addUID(\"GPlocationOriginPointer_\" + i)).checked = false;\n document.getElementById(self._addUID(\"GPlocationOrigin_\" + i)).className = \"GPelementShow gpf-show gpf-input fr-input\";\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).className = \"GPelementHidden gpf-hidden\";\n if (document.getElementById(self._addUID(\"GPlocationStageRemove_\" + i))) {\n document.getElementById(self._addUID(\"GPlocationStageRemove_\" + i)).className = \"GPlocationStageRemove gpf-btn gpf-btn-icon-remove fr-btn--sm fr-btn--secondary gpf-btn--secondary\";\n }\n if (document.getElementById(self._addUID(\"GPlocationStageAdd\"))) {\n document.getElementById(self._addUID(\"GPlocationStageAdd\")).className = \"GPlocationStageAdd gpf-btn gpf-btn-icon-add fr-btn--sm fr-btn--secondary gpf-btn--secondary fr-mt-2w\";\n }\n // document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).disabled = true;\n self.onLocationClearPointClick(e);\n });\n\n return buttonOrigin;\n },\n\n /**\n * Create Input AutoComplete Point tag\n *\n * @param {Number} id - tag ID\n * @returns {DOMElement} DOM element\n */\n _createLocationAutoCompleteteInputElement : function (id) {\n // contexte d'execution\n var self = this;\n\n var inputOrigin = document.createElement(\"input\");\n inputOrigin.id = this._addUID(\"GPlocationOrigin_\" + id);\n inputOrigin.className = \"GPelementShow gpf-show gpf-input fr-input\";\n inputOrigin.type = \"text\";\n inputOrigin.placeholder = \"Saisir une adresse, un lieu...\";\n inputOrigin.autocomplete = \"off\";\n inputOrigin.addEventListener(\"keyup\", function (e) {\n var charCode = e.which || e.keyCode;\n if (charCode === 13 || charCode === 10 || charCode === 38 || charCode === 40) {\n return;\n }\n\n var i = ID.index(this.id);\n if (document.getElementById(self._addUID(\"GPlocationOrigin_\" + i)).value.length > 2) {\n document.getElementById(self._addUID(\"GPlocationAutoCompleteList_\" + i)).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPlocationAutoCompleteList_\" + i)).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n } else {\n document.getElementById(self._addUID(\"GPlocationAutoCompleteList_\" + i)).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPlocationAutoCompleteList_\" + i)).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n // gestionnaire d'evenement :\n // on récupère la valeur de saisie pour une requête sur le service d'autocompletion.\n // le resultat de la requête nous permet de recuperer les coordonnées du point...\n self.onAutoCompleteSearchText(e);\n });\n\n inputOrigin.addEventListener(\"keydown\", function (e) {\n var charCode = e.which || e.keyCode;\n\n var container = document.getElementById(self._addUID(\"GPlocationAutoCompleteResult_\" + id));\n\n // si aucun container !?\n if (!container) {\n return;\n }\n\n var curr = container.getElementsByClassName(\"GPautoCompleteProposal current\");\n var list = container.getElementsByClassName(\"GPautoCompleteProposal\");\n\n // si aucune suggestion, on ne va pas plus loin !\n var length = list.length;\n if (!length) {\n return;\n }\n\n var current = null;\n\n // si aucun item courant, on prend le 1er !\n if (!curr.length) {\n current = list[0];\n current.className = \"GPautoCompleteProposal current\";\n current.style.color = \"#000000\";\n current.style[\"background-color\"] = \"#CEDBEF\";\n return;\n } else {\n current = curr[0];\n }\n\n var index = parseInt(ID.index(current.id), 10);\n var next = (index === length - 1) ? list[0] : list[index + 1];\n var prev = (index === 0) ? list[length - 1] : list[index - 1];\n\n current.style[\"background-color\"] = \"\";\n current.style.color = \"\";\n prev.style[\"background-color\"] = \"\";\n prev.style.color = \"\";\n next.style[\"background-color\"] = \"\";\n next.style.color = \"\";\n\n switch (charCode) {\n case 38: // arrow up\n logger.log(\"arrow up\");\n current.className = \"GPautoCompleteProposal\";\n prev.className = \"GPautoCompleteProposal current\";\n prev.style.color = \"#000000\";\n prev.style[\"background-color\"] = \"#CEDBEF\";\n break;\n case 40: // arrow down\n logger.log(\"arrow down\");\n current.className = \"GPautoCompleteProposal\";\n next.className = \"GPautoCompleteProposal current\";\n next.style.color = \"#000000\";\n next.style[\"background-color\"] = \"#CEDBEF\";\n break;\n case 13: // enter\n logger.log(\"enter\");\n current.click(e);\n break;\n }\n\n current.focus();\n });\n\n return inputOrigin;\n },\n\n /**\n * Create Input Coordinate Point tag\n *\n * @param {Number} id - tag ID\n * @returns {DOMElement} DOM element\n */\n _createLocationCoordinateInputElement : function (id) {\n // contexte d'execution\n var self = this;\n\n var inputOriginCoord = document.createElement(\"input\");\n inputOriginCoord.id = this._addUID(\"GPlocationOriginCoords_\" + id);\n inputOriginCoord.className = \"GPelementHidden gpf-input gpf-hidden fr-input\";\n inputOriginCoord.type = \"text\";\n inputOriginCoord.disabled = false;\n inputOriginCoord.addEventListener(\"click\", function () {\n var i = ID.index(this.id);\n document.getElementById(self._addUID(\"GPlocationOriginLabel_\" + i)).click();\n });\n return inputOriginCoord;\n },\n\n /**\n * Create Show Pointer tag\n *\n * @param {Number} id - tag ID\n * @returns {DOMElement} DOM element\n */\n _createLocationPointerShowInputElement : function (id) {\n var inputOriginPointer = document.createElement(\"input\");\n inputOriginPointer.id = this._addUID(\"GPlocationOriginPointer_\" + id);\n inputOriginPointer.className = \"GPelementHidden gpf-hidden\";\n inputOriginPointer.type = \"checkbox\";\n\n return inputOriginPointer;\n },\n\n /**\n * Create Input Pointer tag\n *\n * @param {Number} id - tag ID\n * @returns {DOMElement} DOM element\n */\n _createLocationPointerInputElement : function (id) {\n // contexte d'execution\n var self = this;\n\n var buttonOriginPointer = document.createElement(\"button\");\n buttonOriginPointer.id = this._addUID(\"GPlocationOriginPointerImg_\" + id);\n buttonOriginPointer.htmlFor = this._addUID(\"GPlocationOriginPointer_\" + id);\n buttonOriginPointer.className = \"GPlocationOriginPointerImg gpf-btn gpf-btn-icon-pointer fr-btn\";\n buttonOriginPointer.title = \"Pointer un lieu sur la carte\";\n buttonOriginPointer.setAttribute(\"type\", \"button\");\n buttonOriginPointer.addEventListener(\"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n var i = ID.index(this.id);\n var points = document.getElementsByClassName(self._addUID(\"GPlocationPoint\"));\n var j;\n var tag;\n var id;\n for (j = 0; j < points.length; j++) {\n tag = points[j].childNodes[0].id;\n id = ID.index(tag);\n if (i !== id) {\n document.getElementById(self._addUID(\"GPlocationOriginPointer_\" + id)).checked = false;\n if (document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + id)).value === \"Pointer un lieu sur la carte\") {\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + id)).value = \"\";\n document.getElementById(self._addUID(\"GPlocationOrigin_\" + id)).className = \"GPelementShow gpf-show gpf-input fr-input\";\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + id)).className = \"GPelementHidden gpf-hidden\";\n }\n }\n }\n if (document.getElementById(self._addUID(\"GPlocationOriginPointer_\" + i)).checked) {\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).value = \"\";\n for (j = 0; j < points.length; j++) {\n tag = points[j].childNodes[0].id;\n id = ID.index(tag);\n document.getElementById(self._addUID(\"GPlocationPoint_\" + id)).style.cssText = \"\";\n }\n if (document.getElementById(self._addUID(\"GPlocationStageRemove_\" + i))) {\n document.getElementById(self._addUID(\"GPlocationStageRemove_\" + i)).className = \"GPlocationStageRemove gpf-btn gpf-btn-icon-remove fr-btn--sm fr-btn--secondary gpf-btn--secondary\";\n }\n if (document.getElementById(self._addUID(\"GPlocationStageAdd\"))) {\n document.getElementById(self._addUID(\"GPlocationStageAdd\")).className = \"GPlocationStageAdd gpf-btn gpf-btn-icon-add fr-btn--sm fr-btn--secondary gpf-btn--secondary fr-mt-2w\";\n }\n document.getElementById(self._addUID(\"GPlocationOriginPointer_\" + i)).checked = false;\n document.getElementById(self._addUID(\"GPlocationOrigin_\" + i)).className = \"GPelementShow gpf-show gpf-input fr-input\";\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).className = \"GPelementHidden gpf-hidden\";\n } else {\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).value = \"Pointer un lieu sur la carte\";\n for (j = 0; j < points.length; j++) {\n tag = points[j].childNodes[0].id;\n id = ID.index(tag);\n if (i === id) {\n document.getElementById(self._addUID(\"GPlocationPoint_\" + id)).style.cssText = \"\";\n } else {\n document.getElementById(self._addUID(\"GPlocationPoint_\" + id)).style.display = \"none\";\n }\n }\n if (document.getElementById(self._addUID(\"GPlocationStageRemove_\" + i))) {\n document.getElementById(self._addUID(\"GPlocationStageRemove_\" + i)).className = \"GPelementHidden gpf-hidden\";\n }\n if (document.getElementById(self._addUID(\"GPlocationStageAdd\"))) {\n document.getElementById(self._addUID(\"GPlocationStageAdd\")).className = \"GPelementHidden gpf-hidden\";\n }\n document.getElementById(self._addUID(\"GPlocationOriginPointer_\" + i)).checked = true;\n document.getElementById(self._addUID(\"GPlocationOrigin_\" + i)).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).className = \"GPelementShow gpf-show gpf-input fr-input\";\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).disabled = true;\n }\n // gestionnaire d'evenement :\n // on stocke la valeur du point, utilisée pour la requête sur le service de calcul d'itiniraire\n self.onActivateMapPointClick(e);\n });\n\n return buttonOriginPointer;\n },\n\n /**\n * Create Remove Point tag\n * see event !\n *\n * @param {Number} id - tag ID\n * @returns {DOMElement} DOM element\n */\n _createLocationRemovePointElement : function (id) {\n // contexte d'execution\n var self = this;\n\n var buttonRm = document.createElement(\"button\");\n buttonRm.id = this._addUID(\"GPlocationStageRemove_\" + id);\n buttonRm.className = \"GPlocationOpen GPlocationStageRemove gpf-btn gpf-btn-icon-remove fr-btn--sm fr-btn--secondary gpf-btn--secondary\";\n buttonRm.title = \"Supprimer l'étape\";\n buttonRm.setAttribute(\"tabindex\", \"0\");\n buttonRm.setAttribute(\"aria-pressed\", false);\n buttonRm.setAttribute(\"type\", \"button\");\n buttonRm.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n var points = document.getElementsByClassName(self._addUID(\"GPlocationPoint\"));\n var last = points.length - 1;\n var start = points[0].childNodes[0].id;\n var end = points[last].childNodes[0].id;\n\n var startID = ID.index(start);\n var endID = ID.index(end);\n\n if (id !== startID && id !== endID) {\n var i = ID.index(this.id);\n document.getElementById(self._addUID(\"GPlocationPoint_\" + i)).className = \"GPflexInput GPelementHidden gpf-flex gpf-hidden\";\n document.getElementById(self._addUID(\"GPlocationOrigin_\" + i)).value = \"\";\n document.getElementById(self._addUID(\"GPlocationOrigin_\" + i)).className = \"GPelementShow gpf-show gpf-input fr-input\";\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).value = \"\";\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + i)).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPlocationStageAdd\")).style.display = \"\";\n document.getElementById(self._addUID(\"GPlocationPoint_\" + i)).parentElement.previousSibling.classList.add(\"GPelementHidden\", \"gpf-hidden\");\n // Moving up exclusions picto\n // var exclusionsPictoTop = document.getElementById(self._addUID(\"GPshowLocationExclusionsPicto\")).style.top;\n // document.getElementById(self._addUID(\"GPshowLocationExclusionsPicto\")).style.top = (parseInt(exclusionsPictoTop) - 33).toString() + \"px\";\n\n // gestionnaire d'evenement :\n // on supprime le point, utilisé pour la requête sur le service d'itiniraire\n self.onLocationRemovePointClick(e);\n }\n });\n\n return buttonRm;\n },\n\n /**\n * Create Add Point tag\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createLocationAddPointElement : function () {\n // contexte d'execution\n var self = this;\n\n var buttonAdd = document.createElement(\"button\");\n buttonAdd.id = this._addUID(\"GPlocationStageAdd\");\n buttonAdd.className = \"GPlocationOpen GPlocationStageAdd gpf-btn gpf-btn-icon-add fr-btn--sm fr-btn--secondary gpf-btn--secondary fr-mt-2w\";\n buttonAdd.title = \"Ajouter une étape\";\n if (checkDsfr()) {\n buttonAdd.innerText = \"Ajouter une étape\";\n }\n buttonAdd.setAttribute(\"tabindex\", \"0\");\n buttonAdd.setAttribute(\"aria-pressed\", false);\n buttonAdd.setAttribute(\"type\", \"button\");\n buttonAdd.addEventListener(\"click\", function (e) {\n var lastStage = 1;\n var nbStages = 0;\n var points = document.getElementsByClassName(self._addUID(\"GPlocationPoint\"));\n for (var i = 1; i < points.length - 1; i++) {\n var tag = points[i].childNodes[0].id;\n var id = ID.index(tag);\n if (document.getElementById(self._addUID(\"GPlocationPoint_\" + id))) {\n if (document.getElementById(self._addUID(\"GPlocationPoint_\" + id)).className === \"GPflexInput GPelementHidden gpf-flex gpf-hidden\") {\n if (lastStage === 1) {\n lastStage = id;\n }\n } else {\n nbStages++;\n }\n }\n }\n // FIXME algo à revoir : lastStage = id hors si id = 300 sur 3 points !?\n if (lastStage < points.length) {\n document.getElementById(self._addUID(\"GPlocationPoint_\" + lastStage)).className = \"GPflexInput GPlocationStageFlexInput gpf-flex\";\n document.getElementById(self._addUID(\"GPlocationPoint_\" + lastStage)).parentElement.previousSibling.classList.remove(\"GPelementHidden\", \"gpf-hidden\");\n // Moving down exclusions picto\n // var exclusionsPictoTop = document.getElementById(self._addUID(\"GPshowLocationExclusionsPicto\")).style.top;\n // document.getElementById(self._addUID(\"GPshowLocationExclusionsPicto\")).style.top = (parseInt(exclusionsPictoTop) + 33).toString() + \"px\";\n }\n if (nbStages === 4) {\n document.getElementById(self._addUID(\"GPlocationStageAdd\")).style.display = \"none\";\n }\n // gestionnaire d'evenement :\n // on ajoute le point, utilisé pour la requête sur le service d'itiniraire\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onLocationAddPointClick(e);\n });\n\n return buttonAdd;\n },\n\n _createLocationAutoCompleteElement : function (id) {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPlocationAutoCompleteList_\" + id);\n div.className = \"GPlocationAutoCompleteList GPelementHidden gpf-panel gpf-hidden fr-modal\"; // GPpanel ?\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n // div.appendChild(this._createLocationAutoCompleteResultElement ());\n\n return div;\n },\n\n /**\n * Create Results autocompletion to the point\n * see event!\n *\n * @param {Number} id - tag ID\n * @returns {DOMElement} DOM element\n */\n _createLocationAutoCompleteResultElement : function (id) {\n // contexte d'execution\n var self = this;\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPlocationAutoCompleteResult_\" + id);\n div.className = \"GPadvancedAutoCompleteResult gpf-panel__list\";\n\n if (div.addEventListener) {\n div.addEventListener(\"click\", function (e) {\n self.onAutoCompletedResultsItemClick(e);\n document.getElementById(self._addUID(\"GPlocationAutoCompleteList_\" + id)).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPlocationAutoCompleteList_\" + id)).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n }, false);\n } else if (div.attachEvent) {\n div.attachEvent(\"onclick\", function (e) {\n self.onAutoCompletedResultsItemClick(e);\n document.getElementById(self._addUID(\"GPlocationAutoCompleteList_\" + id)).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPlocationAutoCompleteList_\" + id)).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n });\n }\n\n return div;\n },\n\n /**\n * Autocompletion result to a point.\n * Proposals are dynamically filled in Javascript by autocomplete service\n *\n * TODO formaliser le contenu des reponse\n *\n * @param {Number} id - tag ID\n * @param {Object} location - suggested location result\n * @param {Number} n - number of the point\n */\n _createLocationAutoCompletedLocationElement : function (id, location, n) {\n var container = document.getElementById(this._addUID(\"GPlocationAutoCompleteResult_\" + id));\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"AutoCompletedLocation_\" + n);\n div.className = \"GPautoCompleteProposal gpf-panel__items\";\n div.innerHTML = GeocodeUtils.getSuggestedLocationFreeform(location);\n\n container.appendChild(div);\n },\n\n /**\n * Display Coordinate\n * @param {String} value - a Coordinate\n */\n GPdisplayCoordinate : function (value) {\n var points = document.getElementsByClassName(this._addUID(\"GPlocationPoint\"));\n for (var i = 0; i < points.length; i++) {\n var tag = points[i].childNodes[0].id;\n var id1 = ID.index(tag);\n if (document.getElementById(this._addUID(\"GPlocationOriginPointer_\" + id1)).checked) {\n document.getElementById(this._addUID(\"GPlocationOriginCoords_\" + id1)).value = value;\n document.getElementById(this._addUID(\"GPlocationOriginCoords_\" + id1)).disabled = false;\n for (var j = 0; j < points.length; j++) {\n tag = points[j].childNodes[0].id;\n var id2 = ID.index(tag);\n document.getElementById(this._addUID(\"GPlocationPoint_\" + id2)).style.cssText = \"\";\n if (document.getElementById(this._addUID(\"GPlocationStageRemove_\" + id2))) {\n document.getElementById(this._addUID(\"GPlocationStageRemove_\" + id2)).className = \"GPlocationStageRemove gpf-btn gpf-btn-icon-remove fr-btn--sm fr-btn--secondary gpf-btn--secondary\";\n }\n }\n document.getElementById(this._addUID(\"GPlocationOriginPointer_\" + id1)).checked = false;\n if (document.getElementById(this._addUID(\"GPlocationStageAdd\"))) {\n document.getElementById(this._addUID(\"GPlocationStageAdd\")).className = \"GPlocationStageAdd gpf-btn gpf-btn-icon-add fr-btn--sm\";\n }\n return;\n }\n }\n }\n};\n\nexport default LocationSelectorDOM;\n","// import CSS\nimport \"../../CSS/Controls/LocationSelector/GPFlocation.css\";\n// import \"../../CSS/Controls/LocationSelector/GPFlocationStyle.css\";\n// import OpenLayers\nimport Control from \"ol/control/Control\";\nimport Overlay from \"ol/Overlay\";\nimport { transform as olTransformProj } from \"ol/proj\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Utils from \"../../Utils/Helper\";\nimport GeocodeUtils from \"../../Utils/GeocodeUtils\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Markers from \"../Utils/Markers\";\n// DOM\nimport LocationSelectorDOM from \"./LocationSelectorDOM\";\n\nvar logger = Logger.getLogger(\"locationselector\");\n\n/**\n * @classdesc\n *\n * LocationSelector component. Enables to select a location, using autocompletion or picking location on the map\n * @constructor\n * @extends {ol.control.Control}\n * @alias ol.control.LocationSelector\n * @type {ol.control.LocationSelector}\n * @param {Object} [options] - component options\n * @param {String} [options.apiKey] - API key for autocomplete service call. The key \"calcul\" is used by default.\n * @param {Boolean} [options.ssl = true] - use of ssl or not (default true, service requested using https protocol)\n * @param {Boolean} [options.displayInfo = true] - whether to display info in a popup or not (not implemented yet) Default is true\n * @param {Object} [options.tag] - tag options\n * @param {Number} [options.tag.id = 1] - order id number in a locations group, in case several LocationSelector are used. For instance in route case : departure tag id should be 0, arrival tag id should be 1, and other ones : 2, 3, ...\n * @param {Number} [options.tag.groupId = null] - locationSelector global component id (in case locationSelector is called by another graphic component, e.g. route control)\n * @param {String} [options.tag.label] - text to display in component (e.g. \"Departure\"). Default is \">\"\n * @param {Object} [options.tag.markerOpts] - options to use your own marker. Default is a lightOrange marker.\n * @param {String} [options.tag.markerOpts.url] - marker base64 encoded url (ex \"data:image/png;base64,...\"\"). Mandatory for a custom marker\n * @param {Array} [options.tag.markerOpts.offset] - Offsets in pixels used when positioning the overlay. The first element in the array is the horizontal offset. A positive value shifts the overlay right. The second element in the array is the vertical offset. A positive value shifts the overlay down. Default is [0, 0]. (see {@link http://openlayers.org/en/latest/apidoc/ol.Overlay.html ol.Overlay})\n * @param {Boolean} [options.tag.display = true] - whether to display or hide component. Default is true\n * @param {Boolean} [options.tag.addOption = false] - whether to display picto to add another LocationSelector (in case of route control)\n * @param {Boolean} [options.tag.removeOption = false] - whether to display picto to remove a LocationSelector (in case of route control)\n * @param {Object} [options.autocompleteOptions] - autocomplete service options (see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~autoComplete Gp.Services.autoComplete()} to know all autocomplete options)\n * @example\n * var locationselector = new LocationSelector({\n * apiKey : \"\",\n * tag : {\n * id : 1,\n * groupId : null,\n * label : \"Départ\",\n * markerOpts : {\n * url : \"...\",\n * offset : [0,0]\n * },\n * display : true\n * },\n * autocompleteOptions : {}\n * });\n */\nvar LocationSelector = class LocationSelector extends Control {\n\n /**\n * See {@link ol.control.LocationSelector}\n * @module LocationSelector\n * @alias module:~controls/LocationSelector\n * @param {*} options - options\n * @example\n * import LocationSelector from \"gpf-ext-ol/controls/LocationSelector\"\n * ou \n * import { LocationSelector } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n super({\n element : options.element || document.createElement(\"div\"),\n render : options.render,\n target : options.target\n });\n\n if (!(this instanceof LocationSelector)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"LocationSelector\";\n // initialisation du composant\n this.initialize(options);\n\n // creation du DOM\n this._container = this._initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n }\n\n /**\n * initialize component\n *\n * @param {Object} options - options\n */\n initialize (options) {\n // set default options\n this.options = {\n tag : {\n id : 1, // numero d'ordre sur un groupe de locations\n groupId : null, // id du composant global contenant le LocationSelector\n label : \">\",\n display : true,\n addOption : false,\n removeOption : false\n },\n displayInfo : true,\n autocompleteOptions : {}\n };\n\n // merge with user options\n Utils.mergeParams(this.options, options);\n\n /** uuid */\n this._uid = this.options.tag.groupId || SelectorID.generate();\n // info : si un uid (groupId) est spécifié\n // (par ex si ce composant est appélé par un autre composant graphique)\n // alors on le récupère, sinon c'est qu'il est indépendant : on génère donc un uuid\n\n /** container map */\n this._map = null;\n\n /** container principal des entrées */\n this._inputsContainer = null;\n\n /** container du label du point */\n this._buttonLabel = null;\n\n /** container de la saisi de l'autocompletion */\n this._inputAutoComplete = null;\n\n /** container du pointer de saisi sur la carte */\n this._inputShowPointerContainer = null;\n\n /** label du pointer de saisi sur la carte (avec img) */\n this._inputShowPointer = null;\n\n /** container des coordonnées */\n this._inputCoordinateContainer = null;\n\n /** elements pour ajouter ou supprimer un nouveau point */\n this._addPointElement = null;\n this._removePointElement = null;\n\n /** coordonnées du point selectionné, en EPSG:4326 */\n this._coordinate = null;\n\n /** container des reponses de l'autocompletion */\n this._suggestedContainer = null;\n this._suggestedList = null;\n\n /** listes des reponses de l'autocompletion */\n this._suggestedLocations = [];\n\n /** localisant */\n this._currentLocation = null;\n\n /** marker */\n this._initMarker();\n\n /** ressources du services d'autocompletion (ayant droit!) */\n this._resources = {};\n\n // listener key for event click on map\n this.listenerKey = null;\n }\n\n /**\n * initialize marker : url and offset\n *\n * @private\n */\n _initMarker () {\n // init marker properties\n this._marker = null;\n this._markerUrl = \"\";\n this._markerOffset = [0, 0];\n\n if (this.options.tag.markerOpts && this.options.tag.markerOpts.url) {\n // get marker src url\n this._markerUrl = this.options.tag.markerOpts.url;\n\n // get marker offset\n var offset = this.options.tag.markerOpts.offset;\n if (offset) {\n if (Array.isArray(offset) && offset.length === 2) {\n this._markerOffset = offset;\n } else {\n logger.log(\"markerOpts.offset should be an array. e.g. : [0,0]\");\n }\n }\n } else {\n // set default options for marker\n this._markerUrl = Markers[\"lightOrange\"];\n this._markerOffset = Markers.defaultOffset;\n }\n }\n\n // ################################################################### //\n // ########################## publics methods ######################## //\n // ################################################################### //\n\n /**\n * get coordinate\n *\n * @returns {Array} this._coordinate - point coordinate (EPSG:4326) : [lon, lat]\n */\n getCoordinate () {\n return this._coordinate;\n }\n\n /**\n * set coordinate\n * @param {Object} coordinate - Coordinate in the map projection by default, otherwise, the projection is entered in the following parameter\n * @param {String} crs - Coordinate projection\n */\n setCoordinate (coordinate, crs) {\n var map = this.getMap();\n var proj = map.getView().getProjection().getCode();\n // on utilise la projection de la carte\n if (!crs) {\n crs = proj;\n }\n\n this._setCoordinate(coordinate, crs);\n\n // on utilise toujours la projection de la carte pour placer le marker\n coordinate = olTransformProj(coordinate, crs, proj);\n this._setMarker([\n coordinate[0],\n coordinate[1]\n ], null, false);\n }\n\n /**\n * clean all and input\n */\n clear () {\n this.clearResults();\n this._buttonLabel.click();\n }\n\n /**\n * clear all results and the marker.\n */\n clearResults () {\n this._currentLocation = null;\n this._coordinate = null;\n this._hideSuggestedLocation();\n this._clearSuggestedLocation();\n this._setMarker();\n // map.un(\"click\", (e) => this.onMouseMapClick(e));\n olObservableUnByKey(this.listenerKey);\n }\n\n // ################################################################### //\n // ##################### init component (private) #################### //\n // ################################################################### //\n\n /**\n * initialize component container\n *\n * @returns {DOMElement} DOM element\n */\n _initContainer () {\n var id = this.options.tag.id;\n\n // create main container\n var container = this._createMainContainerElement();\n\n var inputs = this._inputsContainer = this._createLocationPointElement(id, this.options.tag.display);\n container.appendChild(inputs);\n\n var _buttonLabel = this._buttonLabel = this._createLocationPointLabelElement(id, this.options.tag.label);\n inputs.appendChild(_buttonLabel);\n var _inputAutoComplete = this._inputAutoComplete = this._createLocationAutoCompleteteInputElement(id);\n if (_inputAutoComplete.addEventListener) {\n _inputAutoComplete.addEventListener(\"click\", () => this.onAutoCompleteInputClick());\n } else if (_inputAutoComplete.attachEvent) {\n _inputAutoComplete.attachEvent(\"onclick\", () => this.onAutoCompleteInputClick());\n }\n inputs.appendChild(_inputAutoComplete);\n var _inputCoordinate = this._inputCoordinateContainer = this._createLocationCoordinateInputElement(id);\n inputs.appendChild(_inputCoordinate);\n var _inputShowPointer = this._inputShowPointerContainer = this._createLocationPointerShowInputElement(id);\n inputs.appendChild(_inputShowPointer);\n var _inputPointer = this._inputShowPointer = this._createLocationPointerInputElement(id);\n inputs.appendChild(_inputPointer);\n\n if (this.options.tag.addOption) {\n var _inputAddStage = this._addPointElement = this._createLocationAddPointElement();\n inputs.appendChild(_inputAddStage);\n }\n\n if (this.options.tag.removeOption) {\n var _inputRemoveStage = this._removePointElement = this._createLocationRemovePointElement(id);\n inputs.appendChild(_inputRemoveStage);\n }\n\n var resultsPanel = this._suggestedContainer = this._createLocationAutoCompleteElement(id);\n var results = this._suggestedList = this._createLocationAutoCompleteResultElement(id);\n resultsPanel.appendChild(results);\n container.appendChild(resultsPanel);\n\n return container;\n }\n\n // ################################################################### //\n // ###################### handlers events (dom) ###################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on 'GPlocationOrigin' input\n *\n * @private\n */\n onAutoCompleteInputClick () {\n if (this._inputAutoComplete && this._inputAutoComplete.value.length > 2) {\n this._displaySuggestedLocation();\n }\n }\n\n /**\n * this method is called by event 'keyup' on 'GProuteOrigin' tag input\n * (cf. this._createRouteAutoCompleteteInputElement), and it gets the value of input.\n * this value is passed as a parameter for the service autocomplete (text).\n * the results of the request are displayed into a drop down menu.\n * FIXME\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onAutoCompleteSearchText (e) {\n var value = e.target.value;\n if (!value) {\n return;\n }\n\n // on recupere les options du service\n var serviceOptions = this.options.autocompleteOptions || {};\n var _customOnSuccess = serviceOptions.onSuccess || null;\n var _customOnFailure = serviceOptions.onFailure || null;\n\n // on sauvegarde le localisant\n this._currentLocation = value;\n\n // on limite les requêtes à partir de 3 car. saisie !\n if (value.length < 3) {\n this._clearSuggestedLocation();\n return;\n }\n\n // INFORMATION\n // on effectue la requête au service d'autocompletion.\n // on met en place des callbacks afin de recuperer les resultats ou\n // les messages d'erreurs du service.\n // les resultats sont affichés dans une liste deroulante.\n // les messages d'erreurs sont affichés sur la console (?)\n var context = this;\n this._requestAutoComplete({\n text : value,\n maximumResponses : 5, // FIXME je limite le nombre de reponse car le container DOM est limité dans l'affichage !!!\n // callback onSuccess\n onSuccess : function (results) {\n if (results) {\n var locations = results.suggestedLocations;\n context._fillAutoCompletedLocationListContainer(locations);\n if (_customOnSuccess) {\n _customOnSuccess.call(this, results);\n }\n }\n },\n // callback onFailure\n onFailure : function (error) {\n // FIXME\n // où affiche t on les messages : ex. 'No suggestion matching the search' ?\n // doit on nettoyer la liste des suggestions dernierement enregistrée :\n context._clearSuggestedLocation();\n logger.log(error.message);\n if (_customOnFailure) {\n _customOnFailure.call(this, error);\n }\n }\n });\n\n var map = this.getMap();\n map.on(\n \"click\",\n () => this._hideSuggestedLocation()\n );\n map.on(\n \"pointerdrag\",\n () => this._hideSuggestedLocation()\n );\n }\n\n /**\n * this method is called by event 'click' on 'GPautoCompleteResultsList' tag div\n * (cf. this._createAutoCompleteListElement), and it selects the location.\n * this location displays a marker on the map.\n * FIXME\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onAutoCompletedResultsItemClick (e) {\n var idx = SelectorID.index(e.target.id);\n\n if (!idx) {\n return;\n }\n\n // FIXME\n // les coordonnées sont inversées entre les 2 services !?\n // AutoCompletion : lon/lat (\"EPSG:4326\")\n // Geocoding : lat/lon\n var position = [\n this._suggestedLocations[idx].position.x,\n this._suggestedLocations[idx].position.y\n ];\n // on sauvegarde le point courant (en EPSG:4326, [lon, lat])\n this._coordinate = position;\n\n var info = {\n type : this._suggestedLocations[idx].type,\n fields : this._suggestedLocations[idx]\n };\n\n // on ajoute le texte de l'autocomplétion dans l'input\n var label = GeocodeUtils.getSuggestedLocationFreeform(this._suggestedLocations[idx]);\n this._setLabel(label);\n\n // Info : la position est en EPSG:4326, à transformer dans la projection de la carte\n var view = this.getMap().getView();\n var mapProj = view.getProjection().getCode();\n if (mapProj !== \"EPSG:4326\") {\n // on retransforme les coordonnées de la position dans la projection de la carte\n position = olTransformProj(position, \"EPSG:4326\", mapProj);\n }\n // on centre la vue et positionne le marker, à la position reprojetée dans la projection de la carte\n this._setPosition(position);\n this._setMarker(position, info, this.options.displayInfo);\n }\n\n /**\n * this method is called by event 'click' on 'GProuteOriginPointerImg' tag input\n * (cf. this._createRoutePointerInputElement), and it create or remove the event of click map.\n *\n * @private\n */\n onActivateMapPointClick () {\n var map = this.getMap();\n\n if (this._inputShowPointerContainer.checked) {\n // on efface l'ancien resultat\n this.clearResults();\n this.listenerKey = map.on(\n \"click\",\n (e) => this.onMouseMapClick(e)\n );\n this._setCursor(\"crosshair\");\n } else {\n // map.un(\"click\", (e) => this.onMouseMapClick(e));\n olObservableUnByKey(this.listenerKey);\n this._setCursor();\n }\n }\n\n /**\n * this method is called by event 'click' on 'GProuteOriginLabel' tag label\n * (cf. this._createRoutePointLabelElement).\n * this point is erased.\n *Missing\n * @private\n */\n onLocationClearPointClick () {\n this._setCursor();\n this.clearResults();\n }\n\n /**\n * this method is called by event 'click' on 'GProuteStageRemove' tag input\n * (cf. this._createRouteRemovePointElement).\n * this point is deleted\n *\n * @private\n */\n onLocationRemovePointClick () {\n this._setCursor();\n this.clearResults();\n }\n\n /**\n * TODO this method is called by event 'click' on 'GProuteStageAdd' tag input\n * (cf. this._createRouteAddPointElement).\n * this point is added as a parameter for the service route.\n *\n * @param {Object} e - HTMLElement\n */\n onLocationAddPointClick (e) {\n logger.log(\"onRouteAddPointClick\", e);\n }\n\n // ################################################################### //\n // #################### handlers events (control) #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on map\n * (cf. this.onRouteMapPointClick), and it gets the coordinate of click on map.\n * this point is saved as a parameter for the service route.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onMouseMapClick (e) {\n var coordinate = e.coordinate;\n if (!e.map || !e.map.getView()) {\n return;\n }\n var crs = e.map.getView().getProjection();\n\n this._setCoordinate(coordinate, crs);\n\n this._setMarker([\n coordinate[0],\n coordinate[1]\n ], null, false);\n\n // on desactive l'event sur la map !\n this.onActivateMapPointClick(e);\n }\n\n // ################################################################### //\n // ################# pivates methods use by events ################### //\n // ################################################################### //\n\n /**\n * this sends the label to the panel.\n *\n * @param {String} label - label suggested location\n * @private\n */\n _setLabel (label) {\n this._inputAutoComplete.value = label;\n }\n\n /**\n * this change the cursor of the map when entering a point.\n *\n * @param {String} cursor - cursor style\n * @private\n */\n _setCursor (cursor) {\n var map = this.getMap();\n var div = map.getTargetElement();\n\n if (cursor) {\n div.style.cursor = cursor;\n } else {\n div.style.cursor = null;\n }\n }\n\n /**\n * this sends the coordinates to the panel.\n *\n * @method _setCoordinate\n * @param {Array} olCoordinate - ol.Coordinate object [lon, lat] ou [x, y] (proj = map proj system)\n * @param {Object} crs - coordinate CRS (ol.proj.Projection)\n * @private\n */\n _setCoordinate (olCoordinate, crs) {\n // structure\n // ol.Coordinate\n // [\n // 4 // lon ou x\n // 48 // lat ou y\n // ]\n\n // on transforme olCoodinate (dont la projection est celle de la carte) en EPSG:4326\n this._coordinate = olTransformProj(olCoordinate, crs, \"EPSG:4326\");\n\n // INFO : si on veut des DMS\n // var coords = ol.coordinate.toStringHDMS(this._coordinate, 2).split(\"N \");\n // // coords est du type : \"48° 00′ 00″ N 2° 00′ 00″ E\". On veut récupérer les 2 coordonnées séparément.\n // var lat = coords[0] + \"N\";\n // var lng = coords[1];\n\n // Pour avoir des degrés décimaux :\n var lat = this._coordinate[0].toFixed(4);\n var lng = this._coordinate[1].toFixed(4);\n\n var value = lng + \" / \" + lat;\n this.GPdisplayCoordinate(value);\n }\n\n /**\n * this method is called by this.on*ResultsItemClick()\n * and set center at given position.\n *\n * @param {Array} position - ol.Coordinate object [lon, lat] (en lat/lon : \"EPSG:4326\")\n * @private\n */\n _setPosition (position) {\n var view = this.getMap().getView();\n view.setCenter(position);\n }\n\n /**\n * this method is called by this.on*ResultsItemClick()\n * and displays a marker.\n * FIXME : marker IGN et informations ?\n *\n * @param {Array} position - ol.Coordinate object [lon, lat] ou [x, y]\n * @param {Object} information - suggested or geocoded information\n * @param {Boolean} display - display a popup information\n * @private\n */\n _setMarker (position, information, display) {\n var map = this.getMap();\n // remove previous markers\n if (this._marker != null) {\n map.removeOverlay(this._marker);\n this._marker = null;\n }\n\n if (position) {\n var markerDiv = document.createElement(\"img\");\n markerDiv.src = this._markerUrl;\n this._marker = new Overlay({\n position : position,\n offset : this._markerOffset,\n element : markerDiv,\n stopEvent : false\n });\n map.addOverlay(this._marker);\n\n if (display) {\n logger.log(\"marker information : \", information);\n }\n // // FIXME\n // // doit on mettre une information\n // // - correctement construite ?\n // // - uniquement informatif ?\n // // - RIEN ?\n // if (display) {\n // var popupContent = null;\n //\n // var values = [];\n //\n // values.push(information.fields.fullText || \"\");\n // values.push(information.fields.street || \"\");\n // values.push(information.fields.postalCode || \"\");\n // values.push(information.fields.commune || \"\");\n //\n // if (information.type === \"PositionOfInterest\") {\n // values.push(information.fields.poi || \"\");\n // values.push(information.fields.kind || \"\");\n // }\n //\n // popupContent = values.join(\" | \");\n //\n // this._marker.bindPopup(popupContent);\n // }\n }\n }\n\n /**\n * this method is called by this.onAutoCompleteSearchText()\n * and it clears all suggested location.\n *\n * @private\n */\n _clearSuggestedLocation () {\n // suppression du dom\n this._suggestedLocations = [];\n if (this._suggestedList) {\n while (this._suggestedList.firstChild) {\n this._suggestedList.removeChild(this._suggestedList.firstChild);\n }\n }\n }\n\n /**\n * this method is called by event 'click' on map\n * and it hide suggested locations\n *\n * @private\n */\n _hideSuggestedLocation () {\n if (this._suggestedContainer) {\n this._suggestedContainer.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n this._suggestedContainer.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n }\n\n /**\n * this method is called by this.onAutoCompleteSearchText()\n * and it clears all suggested location.\n *\n * @private\n */\n _displaySuggestedLocation () {\n if (this._suggestedContainer) {\n this._suggestedContainer.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n this._suggestedContainer.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n }\n }\n\n /**\n * this method is called by this.onAutoCompleteSearch()\n * and executes a request to the service.\n *\n * @param {Object} settings - service settings\n * @param {String} settings.text - text\n * @param {Function} settings.onSuccess - callback\n * @param {Function} settings.onFailure - callback\n * @private\n */\n _requestAutoComplete (settings) {\n logger.log(\"_requestAutoComplete()\", settings);\n\n // on ne fait pas de requête si on n'a pas renseigné de parametres !\n if (!settings || Object.keys(settings).length === 0) {\n return;\n }\n\n // on ne fait pas de requête si la parametre 'text' est vide !\n if (!settings.text) {\n return;\n }\n\n logger.log(settings);\n\n var options = {};\n // on recupere les options du service\n Utils.assign(options, this.options.autocompleteOptions);\n // ainsi que la recherche et les callbacks\n Utils.assign(options, settings);\n\n // les ressources\n var resources = this._resources[\"AutoCompletion\"] || null;\n if (resources && Array.isArray(resources)) {\n if (!options.filterOptions) {\n options.filterOptions = {};\n }\n options.filterOptions.type = resources;\n }\n\n // cas où la clef API n'est pas renseignée dans les options du service,\n // on utilise celle renseignée au niveau du controle ou la clé \"calcul\" par défaut.\n options.apiKey = options.apiKey || this.options.apiKey;\n\n // si l'utilisateur a spécifié le paramètre ssl au niveau du control, on s'en sert\n // true par défaut (https)\n if (typeof options.ssl !== \"boolean\") {\n if (typeof this.options.ssl === \"boolean\") {\n options.ssl = this.options.ssl;\n } else {\n options.ssl = true;\n }\n }\n\n logger.log(options);\n\n Gp.Services.autoComplete(options);\n }\n\n /**\n * this method is called by this.onAutoCompleteSearchText()\n * and fills the container of the location list.\n * it creates a HTML Element per location\n * (cf. this. ...)\n *\n * @param {Object[]} locations - locations\n *\n * @private\n */\n _fillAutoCompletedLocationListContainer (locations) {\n if (!locations || locations.length === 0) {\n return;\n }\n\n // on vide la liste avant de la construire\n var element = this._suggestedList;\n if (element.childElementCount) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n\n for (var i = 0; i < locations.length; i++) {\n // Proposals are dynamically filled in Javascript by autocomplete service\n this._createLocationAutoCompletedLocationElement(this.options.tag.id, locations[i], i);\n }\n\n // sauvegarde de l'etat des locations\n this._suggestedLocations = locations;\n }\n\n};\n\n// on récupère les méthodes de la classe DOM\nObject.assign(LocationSelector.prototype, LocationSelectorDOM);\n\nexport default LocationSelector;\n\n// Expose LocationSelector as ol.control.LocationSelector (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.LocationSelector = LocationSelector;\n}\n","var ExportDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this.uid) ? id + \"-\" + this.uid : id;\n return uid;\n }\n};\n\nexport default ExportDOM;\n","// import CSS\nimport \"../../CSS/Controls/Export/GPFexport.css\";\n// import \"../../CSS/Controls/Export/GPFexportStyle.css\";\n\n// import OpenLayers\nimport Widget from \"../Widget\";\nimport Control from \"ol/control/Control\";\n\n// import local\nimport ID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\n\n// import local with ol dependencies\nimport KMLExtended from \"../../Formats/KML\";\nimport GeoJSONExtended from \"../../Formats/GeoJSON\";\nimport GPXExtended from \"../../Formats/GPX\";\n\n// DOM\nimport ExportDOM from \"./ExportDOM\";\n\nvar logger = Logger.getLogger(\"export\");\n\n/**\n * @classdesc\n *\n * Export button\n *\n * @constructor\n * @alias ol.control.Export\n * @param {Object} options - options for function call.\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {String} [options.format = \"geojson\"] - geojson / kml / gpx\n * @param {String} [options.name = \"export\"] - export name\n * @param {String} [options.title = \"Exporter\"] - button name\n * @param {Boolean} [options.menu = false] - displays the format choice menu\n * @param {Function} [options.onExport] - callback\n * @param {DOMElement} [options.target] - target\n * @param {Object} options.control - instance of control\n * @fires export:compute\n * @example\n * // pluggued widget Export into control Isocurve\n * var iso = new ol.control.Isocurve();\n * map.addControl(iso);\n *\n * // method : call render()\n * var export = new ButtonExport();\n * export.setControl(iso);\n * export.setTarget();\n * export.setName(\"export\");\n * export.setFormat(\"geojson\");\n * export.setTitle(\"Exporter\");\n * export.setMenu(false);\n * export.render(); // <-- direct call to render function !\n * export.on(\"export:compute\", (data) => { console.log(data); });\n *\n * // method : call map.addControl()\n * var export = new ButtonExport();\n * export.setControl(iso);\n * export.setTarget();\n * export.setName(\"export\");\n * export.setFormat(\"geojson\");\n * export.setTitle(\"Exporter\");\n * export.setMenu(false);\n * export.on(\"export:compute\", (data) => { console.log(data); });\n * map.addControl(export); // <-- using the OpenLayers mechanism, don't call to render function !\n *\n * // use control options instead of setters\n * var export = new ButtonExport({\n * control : iso,\n * target : ,\n * name : \"export\",\n * format : \"geojson\",\n * title : \"Exporter\",\n * menu : false\n * });\n * map.addControl(export);\n *\n * // method with passing option into the control Isocurve\n * var iso = new ol.control.Isocurve({ export : true });\n * // with control options :\n * var iso = new ol.control.Isocurve({ export : {\n * name : \"export\",\n * format : \"geojson\",\n * title : \"Exporter\",\n * menu : false\n * }});\n */\nclass ButtonExport extends Control {\n\n /**\n * See {@link ol.control.Export}\n * @module ButtonExport\n * @alias module:~controls/ButtonExport\n * @param {Object} [options] - options\n * @example\n * import ButtonExport from \"gpf-ext-ol/controls/ButtonExport\"\n * ou \n * import { ButtonExport } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {\n control : null,\n target : null,\n format : \"geojson\",\n name : \"export\",\n title : \"Exporter\",\n menu : false,\n onExport : null\n };\n\n logger.trace(\"[constructor] Export\", options);\n\n super({\n element : document.createElement(\"div\"),\n render : options.render,\n target : options.target\n });\n\n if (!(this instanceof ButtonExport)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"Export\";\n /**\n * Response to the export of the route calculation\n * (only for jsdoc)\n *\n * @example\n * // GeoJSON format\n * {\n * \"type\":\"FeatureCollection\",\n * \"features\":[...],\n * \"geoportail:compute\":{\n * \"points\":[ [2.588024210134887, 48.84192678293002 ] ],\n * \"transport\":\"Voiture\",\n * \"exclusions\":[...],\n * \"computation\":\"fastest\",\n * \"results\":{ }\n * }\n *\n * @see {@link https://ignf.github.io/geoportal-access-lib/latest/jsdoc/Gp.Services.RouteResponse.html|Service}\n */\n // eslint-disable-next-line no-undef\n this.EXPORT_ROUTE = {};\n\n /**\n * Response to the export of the isochron calculation\n * (only for jsdoc)\n *\n * @example\n * // GeoJSON format\n * {\n * \"type\":\"FeatureCollection\",\n * \"features\":[...],\n * \"geoportail:compute\":{\n * \"transport\":\"Pieton\",\n * \"computation\":\"time\",\n * \"exclusions\":[\n *\n * ],\n * \"direction\":\"departure\",\n * \"point\":[ 2.587835382718464, 48.84192678293002 ],\n * \"results\":{\n * \"message\":\"\",\n * \"id\":\"\",\n * \"location\":{\n * \"x\":\"2.587835382718464\",\n * \"y\":\"48.84192678293002\"\n * },\n * \"srs\":\"EPSG:4326\",\n * \"geometry\":{\n * \"type\":\"Polygon\",\n * \"coordinates\":[[...]]\n * },\n * \"time\":180,\n * \"distance\":\"\"\n * }\n * }\n * }\n *\n * @see {@link https://ignf.github.io/geoportal-access-lib/latest/jsdoc/Gp.Services.IsoCurveResponse.html|Service}\n */\n // eslint-disable-next-line no-undef\n this.EXPORT_ISOCHRON = {};\n\n /**\n * Response to the export of the profile calculation\n * (only for jsdoc)\n *\n * @example\n * // GeoJSON format\n * {\n * \"type\":\"FeatureCollection\",\n * \"features\":[...],\n * \"geoportail:compute\":{\n * \"greaterSlope\":76,\n * \"meanSlope\":7,\n * \"distancePlus\":84,\n * \"distanceMinus\":48,\n * \"ascendingElevation\":5,\n * \"descendingElevation\":-4,\n * \"altMin\":\"92,04\",\n * \"altMax\":\"96,71\",\n * \"distance\":163,\n * \"unit\":\"m\",\n * \"points\":[\n * {\n * \"z\":95.68,\n * \"lon\":2.5874,\n * \"lat\":48.8419,\n * \"acc\":2.5,\n * \"dist\":0,\n * \"slope\":0\n * }\n * ]\n * }\n * }\n *\n * @see {@link https://ignf.github.io/geoportal-access-lib/latest/jsdoc/Gp.Services.AltiResponse.html|Service}\n */\n // eslint-disable-next-line no-undef\n this.EXPORT_PROFILE = {};\n\n // id unique\n this.uid = options.id || ID.generate();\n\n // export\n this.extension = null;\n this.mimeType = null;\n\n // dom\n this.container = null;\n this.button = null;\n this.menu = null;\n this.icon = \"\\u2630 \";\n this.menuClassHidden = \"GPelementHidden gpf-hidden\";\n\n this.initOptions(options);\n this.initContainer();\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Render DOM\n *\n * @public\n */\n render () {\n // container principal\n if (!this.options.target) {\n if (this.options.control) {\n // insertion du composant dans le panneau du controle\n var container = this.options.control.getContainer();\n // ex. GP(iso|route)Panel-\n this.options.target = container.lastChild;\n }\n }\n if (this.container) {\n this.options.target.appendChild(this.container);\n }\n }\n\n // ################################################################### //\n // #################### privates methods ############################# //\n // ################################################################### //\n\n /**\n * Initialize options\n * (called by constructor)\n *\n * @param {Object} options - options\n * @private\n */\n initOptions (options) {\n // options\n this.options = options;\n\n if (this.options.control) {\n // ...\n }\n\n if (this.options.target) {\n // ...\n }\n\n var format = this.options.format;\n (format) ? this.setFormat(format) : this.setFormat(\"\");\n\n if (!this.options.name) {\n this.setName(\"export\");\n }\n\n if (!this.options.title) {\n this.setTitle(\"Exporter\");\n }\n\n if (this.options.menu === undefined) {\n this.setMenu(false);\n }\n }\n\n /**\n * Initialize container\n * (called by constructor)\n *\n * @private\n * @todo menu des options\n */\n initContainer () {\n // TODO\n // menu des options de l'export :\n // * [ nom ]\n // * format\n // https://www.w3schools.com/howto/howto_css_dropdown.asp\n // https://www.w3schools.com/howto/howto_css_custom_checkbox.asp\n\n // afficher l'icone du menu\n var title = this.options.title;\n if (this.options.menu) {\n title = this.icon + this.options.title;\n }\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPexportContainer\");\n div.className = \"GPexportMenuContainer\";\n\n // bouton Exporter\n // utiliser les templates literals avec la substitution ${...}\n var button = this.stringToHTML(`\n \n `);\n\n // add event click button\n this.button = button.firstChild;\n if (this.button) {\n this.button.addEventListener(\"click\", (e) => this.onClickButtonExport(e));\n }\n div.appendChild(button.firstChild);\n\n // menu des options\n // utiliser les templates literals avec la substitution ${...}\n var menu = this.stringToHTML(`\n
    \n \n \n \n
    \n `);\n\n this.menu = menu.firstChild;\n if (this.menu) {\n if (this.options.menu) {\n var className = this.menu.className;\n this.menu.className = className.replace(this.menuClassHidden, \"\");\n }\n var radios = this.menu.querySelectorAll(`input[type=radio][name=\"format\"]`);\n radios.forEach((radio) => {\n // radio checked par defaut\n if (radio.id.toUpperCase().includes(this.options.format.toUpperCase())) {\n radio.checked = true;\n }\n // ecouteur pour changer de format\n radio.addEventListener(\"change\", (e) => {\n this.setFormat(e.target.value);\n });\n });\n }\n div.appendChild(menu.firstChild);\n\n this.container = div;\n }\n\n /**\n * ...\n *\n * @param {String} str - ...\n * @returns {DOMElement} - ...\n * @private\n */\n stringToHTML (str) {\n var support = function () {\n if (!window.DOMParser) {\n return false;\n }\n var parser = new DOMParser();\n try {\n parser.parseFromString(\"x\", \"text/html\");\n } catch (err) {\n return false;\n }\n return true;\n };\n\n // If DOMParser is supported, use it\n if (support()) {\n var parser = new DOMParser();\n var doc = parser.parseFromString(str, \"text/html\");\n return doc.body;\n }\n\n // Otherwise, fallback to old-school method\n var dom = document.createElement(\"div\");\n dom.innerHTML = str;\n return dom;\n }\n\n /**\n * ...\n * @returns {Boolean} - ...\n * @private\n */\n isPluggableControl () {\n // tester toutes les méthodes des widgets pluggable\n // la méthode getData() n'est pas obligatoire car certains widgets\n // n'ont pas de configuration.\n if (this.options.control &&\n typeof this.options.control.getContainer === \"function\" &&\n typeof this.options.control.getLayer === \"function\") {\n return true;\n }\n return false;\n }\n\n /**\n * ...\n * @param {Object} layer - ...\n * @param {Object} [data] - ...\n * @param {Object} [style] - ...\n * @returns {String} - ...\n * @private\n */\n exportFeatures (layer, data, style) {\n var result = null;\n if (!layer) {\n logger.warn(\"Impossible to export : no layer is hosting features.\");\n return result;\n }\n if (!layer.getSource() ||\n !layer.getSource().getFeatures() ||\n !layer.getSource().getFeatures().length) {\n logger.warn(\"Impossible to export : no features found.\");\n return result;\n }\n\n // INFO\n // les styles sont bien transmis pour l'outil de dessin\n // mais, ce n'est pas toujours le cas pour certains widgets !?\n // donc, on y ajoute les styles par defaut...\n layer.getSource().getFeatures().forEach((feature) => {\n var style = feature.getStyle();\n if (!style && this.options.control && typeof this.options.control.getStyle === \"function\") {\n feature.setStyle(this.options.control.getStyle());\n }\n });\n\n // ajouter les metadonnées de calcul et de configuration\n var options = {\n defaultStyle : style\n };\n if (data) {\n // properties ajoutées à la racine :\n // ex. \"geoportail:compute\" : {}\n options.extensions = {\n \"geoportail:compute\" : data\n };\n }\n\n var ClassName = null;\n switch (this.options.format.toUpperCase()) {\n case \"KML\":\n options.writeStyles = true;\n options.showPointNames = true;\n ClassName = new KMLExtended(options);\n break;\n case \"GPX\":\n ClassName = new GPXExtended(options);\n break;\n case \"GEOJSON\":\n ClassName = new GeoJSONExtended(options);\n break;\n default:\n break;\n }\n\n if (!ClassName) {\n logger.warn(\"Impossible to export : format unknown !?\");\n return result;\n }\n\n var featProj = layer.getSource().getProjection();\n\n // INFO\n // on determine la projection de la carte\n // si le composant a été ajouté sur la carte via le mécanisme d'OpenLayer...\n var map = this.getMap();\n if (map) {\n featProj = featProj || map.getView().getProjection();\n }\n\n var features = layer.getSource().getFeatures();\n\n // INFO\n // par defaut, webmercator ou \"EPSG:3857\"\n result = ClassName.writeFeatures(features, {\n dataProjection : \"EPSG:4326\",\n featureProjection : featProj || \"EPSG:3857\"\n });\n\n return result;\n }\n // ################################################################### //\n // ######################## event dom ################################ //\n // ################################################################### //\n\n /**\n * ...\n * @param {*} e - Click\n */\n onClickButtonExport (e) {\n if (!this.isPluggableControl()) {\n logger.warn(\"Componant not pluggable with the control !\");\n // return;\n }\n\n var layer = (this.options.control && this.options.control.getLayer !== undefined) ? this.options.control.getData() : this.options.layer;\n var data = (this.options.control && this.options.control.getData !== undefined) ? this.options.control.getData() : {};\n var style = (this.options.control && this.options.control.getStyle !== undefined) ? this.options.control.getStyle() : {};\n\n var content = this.exportFeatures(layer, data, style);\n if (!content || content === \"null\") {\n return;\n }\n\n /**\n * event triggered when the export is finished\n *\n * @event export:compute\n * @typedef {Object}\n * @property {Object} type - event\n * @property {Object} target - instance Export\n * @property {String} content - export data\n * @example\n * Export.on(\"export:compute\", function (e) {\n * console.log(e.target);\n * })\n */\n this.dispatchEvent({\n type : \"export:compute\",\n content : content\n });\n\n // INFO\n // la callback annule le download du fichier.\n if (this.options.onExport && typeof this.options.onExport === \"function\") {\n this.options.onExport(content);\n return;\n }\n\n var link = document.createElement(\"a\");\n // determiner le bon charset !\n var charset = \"utf-8\";\n link.setAttribute(\"href\", \"data:\" + this.mimeType + \";charset=\" + charset + \",\" + encodeURIComponent(content));\n link.setAttribute(\"download\", this.options.name + this.extension);\n if (document.createEvent) {\n var event = document.createEvent(\"MouseEvents\");\n event.initEvent(\"click\", true, true);\n link.dispatchEvent(event);\n } else {\n link.click();\n }\n }\n\n // ################################################################### //\n // ################# public getters/setters ########################## //\n // ################################################################### //\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n\n /**\n * ...\n * @param {Object} control - ...\n * @public\n */\n setControl (control) {\n this.options.control = control;\n }\n\n /**\n * ...\n * @param {DOMElement} target - ...\n * @public\n */\n setTarget (target) {\n this.options.target = target;\n }\n\n /**\n * ...\n * @param {String} format - ...\n * @public\n */\n setFormat (format) {\n this.options.format = format.toUpperCase();\n switch (this.options.format) {\n case \"KML\":\n this.extension = \".kml\";\n this.mimeType = \"application/vnd.google-earth.kml+xml\";\n break;\n case \"GPX\":\n this.extension = \".gpx\";\n this.mimeType = \"application/gpx+xml\";\n break;\n case \"GEOJSON\":\n this.extension = \".geojson\";\n this.mimeType = \"application/geo+json\";\n break;\n default:\n // redefine format by default !\n this.options.format = \"GEOJSON\";\n this.extension = \".geojson\";\n this.mimeType = \"application/geo+json\";\n break;\n }\n }\n\n /**\n * ...\n * @param {String} name - ...\n * @public\n */\n setName (name) {\n this.options.name = name;\n }\n\n /**\n * ...\n * @param {String} title - ...\n * @public\n */\n setTitle (title) {\n this.options.title = title;\n if (this.button) {\n // afficher l'icone du menu / titre\n this.button.value = (this.options.menu) ? this.icon + title : title;\n }\n }\n\n /**\n * ...\n * @param {Boolean} active - ...\n * @public\n */\n setMenu (active) {\n this.options.menu = active;\n if (this.button) {\n // afficher l'icone du menu / titre\n this.button.value = (this.options.menu) ? this.icon + this.options.title : this.options.title;\n }\n if (this.menu && this.options.menu) {\n // afficher le menu\n var className = this.menu.className;\n this.menu.className = className.replace(this.menuClassHidden, \"\");\n // format par defaut\n var radios = this.menu.querySelectorAll(`input[type=radio][name=\"format\"]`);\n radios.forEach((radio) => {\n // radio checked par defaut\n if (radio.id.toUpperCase().includes(this.options.format.toUpperCase())) {\n radio.checked = true;\n }\n });\n }\n }\n\n setLayer (layer) {\n this.options.layer = layer;\n }\n\n};\n\n// on récupère les méthodes de la classe DOM\nObject.assign(ButtonExport.prototype, ExportDOM);\nObject.assign(ButtonExport.prototype, Widget);\n\nexport default ButtonExport;\n\n// Expose Export as ol.control.Export (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.Export = ButtonExport;\n}\n","import ID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport GeocodeUtils from \"../../Utils/GeocodeUtils\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar logger = Logger.getLogger(\"RouteDOM\");\n\nvar RouteDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GProute\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################# Methods to display Main Panel ################### //\n // ################################################################### //\n\n /**\n * Show route control\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createShowRoutePictoElement : function () {\n // contexte d'execution\n var context = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowRoutePicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowRoutePicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-route fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Ouvrir le calcul d'itinéraire\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // gestionnaire d'evenement :\n // on ouvre le menu de saisie du calcul d'itiniraire\n // L'ouverture/Fermeture permet de faire le menage\n // (reinitialisation)\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowRoutePanelClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowRoutePanelClick(e);\n });\n }\n\n return button;\n },\n\n // ################################################################### //\n // ################## Methods to display Inputs Panel ################ //\n // ################################################################### //\n\n /**\n * Create Container Panel\n *\n * FIXME\n * don't call this._createRoutePanelHeaderElement\n * don't call this._createRoutePanelFormElement\n * don't call this._createRoutePanelResultsElement\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GProutePanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n // dialog.appendChild(this._createRoutePanelHeaderElement());\n // dialog.appendChild(this._createRoutePanelFormElement());\n // dialog.appendChild(this._createRoutePanelResultsElement());\n\n return dialog;\n },\n\n _createRoutePanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelHeaderElement : function () {\n // contexte d'execution\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n var div = document.createElement(\"div\");\n div.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n div.innerHTML = \"Calcul d'itinéraire\";\n container.appendChild(div);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GProutePanelClose\");\n divClose.className = \"GPpanelClose GProutePanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Masquer le panneau\";\n\n // Link panel close / visibility checkbox\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowRoutePicto\")).click();\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowRoutePicto\")).click();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n\n /**\n * Create Footer Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFooterElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"GPpanelFooter gpf-panel__footer fr-modal__footer\";\n\n return container;\n },\n\n /**\n * Create Point label\n *\n * @param {String} innerHTML text to display\n * @param {Boolean} display should the label be dsiplayed?\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormPointLabel : function (innerHTML, display = true) {\n var p = document.createElement(\"p\");\n p.innerHTML = innerHTML;\n var classesToAdd = !display ? \" GPelementHidden gpf-hidden\" : \"\";\n p.className = \"GProutePointLabelP gpf-label fr-label\" + classesToAdd;\n\n return p;\n },\n\n /**\n * Create Form\n * see evenement !\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormElement : function () {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GProuteForm\");\n form.className = \"gpf-panel__content fr-modal__content\";\n form.setAttribute(\"onkeypress\", \"return event.keyCode != 13;\"); // FIXME hack pour desactiver l'execution via 'enter' au clavier !\n\n form.addEventListener(\"submit\", function (e) {\n logger.log(e);\n e.preventDefault();\n\n // points\n var points = document.getElementsByClassName(self._addUID(\"GPlocationPoint\"));\n\n // Must have at least two origin points\n var start = points[0].childNodes[0].id;\n var end = points[points.length - 1].childNodes[0].id;\n var startID = ID.index(start);\n var endID = ID.index(end);\n\n if ((document.getElementById(self._addUID(\"GPlocationOrigin_\" + startID)).value === \"\" &&\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + startID)).value === \"\") ||\n (document.getElementById(self._addUID(\"GPlocationOrigin_\" + endID)).value === \"\" &&\n document.getElementById(self._addUID(\"GPlocationOriginCoords_\" + endID)).value === \"\")) {\n return false;\n }\n\n // Send stages to results panel\n self._addRouteResultsStagesValuesElement(points);\n\n // on peut récuperer les valeurs utiles pour les transmettre au service d'iti...\n // - le mode de calcul\n // - le mode de transport\n // - les exclusions\n // Les points sont déjà stockés dans l'application.\n\n // computation mode params\n var modeComputation = null;\n if (document.getElementById(self._addUID(\"GProuteComputationChoice\"))) {\n // plus rapide ?\n if (document.getElementById(self._addUID(\"GProuteComputationFastest\"))) {\n if (document.getElementById(self._addUID(\"GProuteComputationFastest\")).checked) {\n modeComputation = document.getElementById(self._addUID(\"GProuteComputationFastest\")).value;\n }\n }\n // plus court ?\n if (document.getElementById(self._addUID(\"GProuteComputationShortest\"))) {\n if (document.getElementById(self._addUID(\"GProuteComputationShortest\")).checked) {\n modeComputation = document.getElementById(self._addUID(\"GProuteComputationShortest\")).value;\n }\n }\n }\n\n // transport mode params\n var modeTransport = null;\n // voiture ?\n if (document.getElementById(self._addUID(\"GProuteTransportCar\"))) {\n if (document.getElementById(self._addUID(\"GProuteTransportCar\")).checked) {\n modeTransport = document.getElementById(self._addUID(\"GProuteTransportCar\")).value;\n }\n }\n // pieton ?\n if (document.getElementById(self._addUID(\"GProuteTransportPedestrian\"))) {\n if (document.getElementById(self._addUID(\"GProuteTransportPedestrian\")).checked) {\n modeTransport = document.getElementById(self._addUID(\"GProuteTransportPedestrian\")).value;\n }\n }\n\n // exclusions params\n var exclusions = [];\n var exclusionsElement = document.getElementsByClassName(\"GProuteExclusionsOption\");\n for (var j = 0; j < exclusionsElement.length; j++) {\n var id = exclusionsElement[j].htmlFor;\n var el = document.getElementById(id);\n if (!el.checked) {\n exclusions.push(el.value);\n }\n }\n\n self.onRouteComputationSubmit({\n computation : modeComputation,\n transport : modeTransport,\n exclusions : exclusions\n });\n\n // FIXME mise à jour du controle dans le composant JS !\n // document.getElementById(self._addUID(\"GProuteForm\")).className = \"GPelementHidden\";\n // document.getElementById(self._addUID(\"GProuteResultsPanel\")).className = \"\";\n\n return false;\n });\n\n return form;\n },\n\n /**\n * Create Results Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelResultsElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GProuteResultsPanel\");\n container.className = \"GPelementHidden gpf-hidden\";\n\n container.appendChild(this._createRouteResultsStagesElement());\n container.appendChild(this._createRouteResultsElement());\n container.appendChild(this._createRouteShowResultsDetailsElement());\n container.appendChild(this._createRouteResultsDetailsElement());\n\n return container;\n },\n\n /**\n * Create Waiting Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createRouteWaitingElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GProuteCalcWaitingContainer\");\n div.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n\n var p = document.createElement(\"p\");\n p.className = \"GPwaitingContainerInfo gpf-waiting_info\";\n p.innerHTML = \"Recherche en cours...\";\n\n div.appendChild(p);\n\n return div;\n },\n\n // ################################################################### //\n // ############### Methods to the window results ##################### //\n // ################################################################### //\n\n /**\n * Create Results Stages\n * (results dynamically generate !)\n *\n * @returns {DOMElement} DOM element\n */\n _createRouteResultsStagesElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GProuteResultsStages\");\n return div;\n },\n\n /**\n * Add Stages Results\n *\n * @param {DOMElement} points - list of points\n */\n _addRouteResultsStagesValuesElement : function (points) {\n document.getElementById(this._addUID(\"GProuteResultsStages\")).innerHTML = \"\";\n for (var i = 0; i < points.length; i++) {\n var tag = points[i].childNodes[0].id;\n var id = ID.index(tag);\n if (document.getElementById(this._addUID(\"GPlocationPoint_\" + id)).className === \"GPflexInput GPlocationStageFlexInput gpf-flex\") {\n var resultStage = document.createElement(\"div\");\n resultStage.className = \"GProuteResultsStages\";\n var resultStageLabel = document.createElement(\"div\");\n resultStageLabel.className = \"GProuteResultStageLabel\";\n resultStageLabel.innerHTML = document.getElementById(this._addUID(\"GPlocationOriginLabel_\" + id)).innerHTML + \" :\";\n resultStage.appendChild(resultStageLabel);\n var resultStageValue = document.createElement(\"div\");\n resultStageValue.className = \"GProuteResultStageValue\";\n var elementCoords = document.getElementById(this._addUID(\"GPlocationOriginCoords_\" + id));\n var stageCoords = elementCoords.value;\n var visible = (elementCoords.className === \"GPelementVisible gpf-visible\");\n if (stageCoords !== null && stageCoords !== \"\" && visible) {\n resultStageValue.innerHTML = stageCoords;\n } else {\n resultStageValue.innerHTML = document.getElementById(this._addUID(\"GPlocationOrigin_\" + id)).value;\n }\n resultStage.appendChild(resultStageValue);\n if (resultStageValue.innerHTML !== \"\") {\n document.getElementById(this._addUID(\"GProuteResultsStages\")).appendChild(resultStage);\n }\n }\n }\n },\n\n /**\n * Create Show Results\n * see event!\n *\n * @returns {DOMElement} DOM element\n */\n _createRouteResultsElement : function () {\n // contexte\n var self = this;\n\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GProuteResults\");\n\n // FIXME Route results are dynamically filled in Javascript by route service\n var divValue = document.createElement(\"div\");\n divValue.id = this._addUID(\"GProuteResultsValues\");\n container.appendChild(divValue);\n\n var divMode = document.createElement(\"div\");\n divMode.id = this._addUID(\"GProuteResultsMode\");\n\n var select = document.createElement(\"select\");\n select.id = this._addUID(\"GProuteResultsComputationSelect\");\n select.className = \"GPselect gpf-select fr-select\";\n // gestionnaire d'evenement :\n // on stocke la valeur du mode de calcul, et on relance le calcul d'itiniraire\n select.addEventListener(\"change\", function (e) {\n self.onRouteModeComputationChangeAndRun(e);\n });\n\n var computes = [{\n code : \"fastest\",\n label : \"Plus rapide\"\n }, {\n code : \"shortest\",\n label : \"Plus court\"\n }];\n\n for (var i = 0; i < computes.length; i++) {\n var option = document.createElement(\"option\");\n option.value = computes[i].code;\n option.text = computes[i].label;\n select.appendChild(option);\n }\n divMode.appendChild(select);\n container.appendChild(divMode);\n\n var divNew = document.createElement(\"div\");\n divNew.id = this._addUID(\"GProuteResultsNew\");\n divNew.className = \"GPresetPicto gpf-btn gpf-btn-icon-reset fr-btn fr-btn--secondary gpf-btn--secondary\";\n divNew.title = \"Modifier le calcul\";\n divNew.addEventListener(\"click\", function (e) {\n document.getElementById(self._addUID(\"GProuteResultsPanel\")).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GProuteForm\")).className = \"gpf-panel__content fr-modal__content\";\n self.onShowRouteResultsNewClick(e);\n });\n container.appendChild(divNew);\n\n return container;\n },\n\n /**\n * Add Results Duration and Distance\n * (results dynamically generate !)\n * see event!\n * @param {Number} distance - distance\n * @param {Number} duration - duration\n * @param {Function} fconvert - fconvert\n *\n * @returns {DOMElement} DOM element\n */\n _addRouteResultsValuesElement : function (distance, duration, fconvert) {\n var div = document.getElementById(this._addUID(\"GProuteResultsValues\"));\n\n // clean !\n if (div.childElementCount) {\n while (div.firstChild) {\n div.removeChild(div.firstChild);\n }\n }\n\n var containerDistance = document.createElement(\"div\");\n containerDistance.className = \"GProuteResultsValue\";\n\n var labelDistance = document.createElement(\"label\");\n labelDistance.className = \"GProuteResultsValueLabel\";\n labelDistance.innerHTML = \"Distance :\";\n containerDistance.appendChild(labelDistance);\n\n var distanceLabel = 0;\n var isKm = parseInt(distance / 1000, 10);\n\n if (!isKm) {\n distanceLabel = Math.round(distance) + \" m\";\n } else {\n var distanceArrondi = Math.round(distance);\n distanceArrondi = distanceArrondi / 1000;\n distanceLabel = distanceArrondi + \" km\";\n }\n\n var divDistance = document.createElement(\"div\");\n divDistance.id = this._addUID(\"GProuteResultsValueDist\");\n divDistance.innerHTML = distanceLabel;\n containerDistance.appendChild(divDistance);\n\n div.appendChild(containerDistance);\n\n var containerDuration = document.createElement(\"div\");\n containerDuration.className = \"GProuteResultsValue\";\n\n var labelDuration = document.createElement(\"label\");\n labelDuration.className = \"GProuteResultsValueLabel\";\n labelDuration.innerHTML = \"Durée :\";\n containerDuration.appendChild(labelDuration);\n\n var divDuration = document.createElement(\"div\");\n divDuration.id = this._addUID(\"GProuteResultsValueDist\");\n divDuration.innerHTML = fconvert(duration);\n containerDuration.appendChild(divDuration);\n\n div.appendChild(containerDuration);\n\n return div;\n },\n\n /**\n * Create Show Results Details\n *\n * @returns {DOMElement} DOM element\n */\n _createRouteShowResultsDetailsElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"GProuteResultsShowDetailsDiv gpf-flex fr-checkbox-group fr-m-1w\";\n if (!checkDsfr()) {\n var divBorderUp = document.createElement(\"div\");\n divBorderUp.className = \"GPfakeBorder GPfakeBorderLeft\";\n div.appendChild(divBorderUp);\n }\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GProuteResultsShowDetails\");\n input.type = \"checkbox\";\n div.appendChild(input);\n var labelShow = document.createElement(\"label\");\n labelShow.className = \"gpf-label fr-label\";\n labelShow.htmlFor = this._addUID(\"GProuteResultsShowDetails\");\n labelShow.innerHTML = \"Afficher le détail\";\n div.appendChild(labelShow);\n if (!checkDsfr()) {\n var labelHide = document.createElement(\"label\");\n labelHide.htmlFor = this._addUID(\"GProuteResultsShowDetails\");\n labelHide.innerHTML = \"Masquer le détail\";\n div.appendChild(labelHide);\n var divBorderDown = document.createElement(\"div\");\n divBorderDown.className = \"GPfakeBorder\";\n div.appendChild(divBorderDown);\n }\n return div;\n },\n\n /**\n * Create Results Details\n *\n * @returns {DOMElement} DOM element\n */\n _createRouteResultsDetailsElement : function () {\n // \n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GProuteResultsDetails\");\n return div;\n },\n\n /**\n * Add Results Details\n * (results dynamically generate !)\n * @param {Object[]} instructions - instructions\n * @param {Function} fconvert - fconvert\n *\n * @returns {DOMElement} DOM element\n */\n _addRouteResultsDetailsElement : function (instructions, fconvert) {\n // contexte\n var context = this;\n\n var div = document.getElementById(this._addUID(\"GProuteResultsDetails\"));\n\n // clean !\n if (div.childElementCount) {\n while (div.firstChild) {\n div.removeChild(div.firstChild);\n }\n }\n\n // calcul des valeurs cumulé !\n var distanceCumul = 0;\n var durationCumul = 0;\n\n /* jshint -W083 */\n for (var i = 0; i < instructions.length; i++) {\n var id = i + 1;\n\n var o = instructions[i];\n\n var divNum = document.createElement(\"div\");\n divNum.className = \"GProuteResultsDetailsNumber\";\n divNum.innerHTML = id + \".\";\n div.appendChild(divNum);\n\n durationCumul += parseFloat(o.duration);\n distanceCumul += parseFloat(o.distance);\n\n var distance = 0;\n var isCumulKm = parseInt(distanceCumul / 1000, 10);\n if (!isCumulKm) {\n distance = Math.round(distanceCumul) + \" m\";\n } else {\n var distanceArrondi = Math.round(distanceCumul);\n distanceArrondi = distanceArrondi / 1000;\n distance = distanceArrondi + \" km\";\n }\n\n var divIns = document.createElement(\"div\");\n divIns.className = \"GProuteResultsDetailsInstruction\";\n divIns.id = this._addUID(\"GProuteResultsDetailsInstruction_\" + id);\n divIns.title = \"distance : \" + distance + \" / \" + \"temps : \" + fconvert(durationCumul);\n divIns.innerHTML = o.instruction;\n\n divIns.addEventListener(\"mouseover\", function (e) {\n context.onRouteResultsDetailsMouseOver(e);\n });\n divIns.addEventListener(\"mouseout\", function (e) {\n context.onRouteResultsDetailsMouseOut(e);\n });\n divIns.addEventListener(\"click\", function (e) {\n // mode mobile !\n if (typeof context.onRouteResultsDetailsClick === \"function\") {\n context.onRouteResultsDetailsClick(e);\n }\n });\n div.appendChild(divIns);\n }\n\n return div;\n },\n\n // ################################################################### //\n // ################### Methods to the form points #################### //\n // ################# OVERWRITTEN BY LOCATIONSELECTOR ! ################# //\n\n /**\n * Create Point\n * see event !\n * OVERWRITTEN BY LOCATIONSELECTOR !\n * (version initial without LOCATIONSELECTOR PLUGIN)\n * @param {Integer} n - n\n * @param {String} text - text\n * @param {Boolean} visibility - visibility\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormPointElement : function (n, text, visibility) {\n // contexte d'execution\n var context = this;\n\n var div = document.createElement(\"div\");\n div.id = \"GProutePoint\" + n;\n div.className = (visibility) ? \"GPflexInput GProuteStageFlexInput\" : \"GPflexInput GProuteStageFlexInputHidden\";\n\n var labelOrigin = document.createElement(\"label\");\n labelOrigin.id = \"GProuteOriginLabel\" + n;\n labelOrigin.htmlFor = \"GProuteOrigin\" + n;\n labelOrigin.innerHTML = text;\n labelOrigin.addEventListener(\"click\", function () {\n var i = this.id.charAt(this.id.length - 1);\n document.getElementById(\"GProuteOriginCoords\" + i).value = \"\";\n for (var j = 1; j < 8; j++) {\n document.getElementById(\"GProutePoint\" + j).style.display = \"flex\";\n }\n document.getElementById(\"GProuteForm\").className = \"gpf-panel__content fr-modal__content\";\n document.getElementById(\"GProuteOriginPointer\" + i).checked = false;\n document.getElementById(\"GProuteOrigin\" + i).className = \"GPelementVisible gpf-visible\";\n document.getElementById(\"GProuteOriginCoords\" + i).className = \"GPelementHidden gpf-hidden\";\n });\n div.appendChild(labelOrigin);\n\n var inputOrigin = document.createElement(\"input\");\n inputOrigin.id = \"GProuteOrigin\" + n;\n inputOrigin.className = \"GPelementVisible gpf-visible\";\n inputOrigin.type = \"text\";\n inputOrigin.placeholder = \"Saisir une adresse, un lieu...\";\n inputOrigin.addEventListener(\"keyup\", function (e) {\n var charCode = e.which || e.keyCode;\n if (charCode === 13 || charCode === 10) {\n return;\n }\n var i = this.id.charAt(this.id.length - 1);\n if (document.getElementById(\"GProuteOrigin\" + i).value.length > 2) {\n document.getElementById(\"GProuteAutoCompleteList\" + i).style.display = \"block\";\n } else {\n document.getElementById(\"GProuteAutoCompleteList\" + i).style.display = \"none\";\n }\n // gestionnaire d'evenement :\n // on récupère la valeur de saisie pour une requête sur le service d'autocompletion.\n // le resultat de la requête nous permet de recuperer les coordonnées du point...\n context.onAutoCompleteSearchText(e);\n });\n inputOrigin.addEventListener(\"blur\", function () {\n var i = this.id.charAt(this.id.length - 1);\n document.getElementById(\"GProuteAutoCompleteList\" + i).style.display = \"none\";\n });\n div.appendChild(inputOrigin);\n\n var inputOriginCoord = document.createElement(\"input\");\n inputOriginCoord.id = \"GProuteOriginCoords\" + n;\n inputOriginCoord.className = \"GPelementHidden gpf-hidden\";\n inputOriginCoord.type = \"text\";\n inputOriginCoord.disabled = true;\n div.appendChild(inputOriginCoord);\n\n var inputOriginPointer = document.createElement(\"input\");\n inputOriginPointer.id = \"GProuteOriginPointer\" + n;\n inputOriginPointer.type = \"checkbox\";\n div.appendChild(inputOriginPointer);\n\n var labelOriginPointer = document.createElement(\"label\");\n labelOriginPointer.id = \"GProuteOriginPointerImg\" + n;\n labelOriginPointer.htmlFor = \"GProuteOriginPointer\" + n;\n labelOriginPointer.className = \"GProuteOriginPointerImg\";\n labelOriginPointer.title = \"Pointer un lieu sur la carte\";\n labelOriginPointer.addEventListener(\"click\", function (evt) {\n evt.preventDefault();\n evt.stopPropagation();\n var i = this.id.charAt(this.id.length - 1);\n var j;\n for (j = 1; j < 8; j++) {\n if (i !== j) {\n document.getElementById(\"GProuteOriginPointer\" + j).checked = false;\n if (document.getElementById(\"GProuteOriginCoords\" + j).value === \"Pointer un lieu sur la carte\") {\n document.getElementById(\"GProuteOriginCoords\" + j).value = \"\";\n document.getElementById(\"GProuteOrigin\" + j).className = \"GPelementVisible gpf-visible\";\n document.getElementById(\"GProuteOriginCoords\" + j).className = \"GPelementHidden gpf-hidden\";\n }\n }\n }\n if (document.getElementById(\"GProuteOriginPointer\" + i).checked) {\n document.getElementById(\"GProuteOriginCoords\" + i).value = \"\";\n for (j = 1; j < 8; j++) {\n document.getElementById(\"GProutePoint\" + j).style.display = \"flex\";\n }\n document.getElementById(\"GProuteForm\").className = \"gpf-panel__content fr-modal__content\";\n document.getElementById(\"GProuteOriginPointer\" + i).checked = false;\n document.getElementById(\"GProuteOrigin\" + i).className = \"GPelementVisible gpf-visible\";\n document.getElementById(\"GProuteOriginCoords\" + i).className = \"GPelementHidden gpf-hidden\";\n } else {\n document.getElementById(\"GProuteOriginCoords\" + i).value = \"Pointer un lieu sur la carte\";\n for (j = 1; j < 8; j++) {\n if (i === j) {\n document.getElementById(\"GProutePoint\" + j).style.display = \"flex\";\n } else {\n document.getElementById(\"GProutePoint\" + j).style.display = \"none\";\n }\n }\n document.getElementById(\"GProuteForm\").className = \"GProuteFormMini gpf-panel__content fr-modal__content\";\n document.getElementById(\"GProuteOriginPointer\" + i).checked = true;\n document.getElementById(\"GProuteOrigin\" + i).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(\"GProuteOriginCoords\" + i).className = \"GPelementVisible gpf-visible\";\n }\n // gestionnaire d'evenement :\n // on stocke la valeur du point, utilisée pour la requête sur le service de calcul d'itiniraire\n context.onRouteMapPointClick(evt);\n });\n div.appendChild(labelOriginPointer);\n\n return div;\n },\n\n /**\n * Create Remove Point tag\n * see event !\n * OVERWRITTEN BY LOCATIONSELECTOR !\n * (version initial without LOCATIONSELECTOR PLUGIN)\n * @param {Integer} n - n\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormRemoveStageElement : function (n) {\n // contexte d'execution\n var context = this;\n\n var divRm = document.createElement(\"div\");\n divRm.id = \"GProuteStageRemove\" + n;\n divRm.className = \"GProuteStageRemove\";\n divRm.title = \"Supprimer l'étape\";\n if (n !== 1 && n !== 7) {\n divRm.addEventListener(\"click\", function (e) {\n var i = this.id.charAt(this.id.length - 1);\n document.getElementById(\"GProutePoint\" + i).className = \"GPflexInput GProuteStageFlexInputHidden\";\n document.getElementById(\"GProuteOrigin\" + i).value = \"\";\n document.getElementById(\"GProuteOrigin\" + i).className = \"GPelementVisible gpf-visible\";\n document.getElementById(\"GProuteOriginCoords\" + i).value = \"\";\n document.getElementById(\"GProuteOriginCoords\" + i).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(\"GProuteStageAdd\").style.display = \"\";\n // Moving up exclusions picto\n // var exclusionsPictoTop = document.getElementById(\"GPshowRouteExclusionsPicto\").style.top;\n // document.getElementById(\"GPshowRouteExclusionsPicto\").style.top = (parseInt(exclusionsPictoTop, 10) - 33).toString() + \"px\";\n // gestionnaire d'evenement :\n // on supprime le point, utilisé pour la requête sur le service d'itiniraire\n context.onRouteRemovePointClick(e);\n });\n }\n return divRm;\n },\n\n /**\n * Create Add Point tag\n * see event !\n * OVERWRITTEN BY LOCATIONSELECTOR !\n * (version initial without LOCATIONSELECTOR PLUGIN)\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormAddStageElement : function () {\n // contexte d'execution\n var context = this;\n\n var divAdd = document.createElement(\"div\");\n divAdd.id = \"GProuteStageAdd\";\n divAdd.title = \"Ajouter une étape\";\n divAdd.addEventListener(\"click\", function (e) {\n var lastStage = 1;\n var nbStages = 0;\n for (var i = 2; i < 7; i++) {\n if (document.getElementById(\"GProutePoint\" + i).className === \"GPflexInput GProuteStageFlexInputHidden\") {\n if (lastStage === 1) {\n lastStage = i;\n }\n } else {\n nbStages++;\n }\n }\n if (lastStage < 7) {\n document.getElementById(\"GProutePoint\" + lastStage).className = \"GPflexInput GProuteStageFlexInput\";\n // Moving down exclusions picto\n // var exclusionsPictoTop = document.getElementById(\"GPshowRouteExclusionsPicto\").style.top;\n // document.getElementById(\"GPshowRouteExclusionsPicto\").style.top = (parseInt(exclusionsPictoTop, 10) + 33).toString() + \"px\";\n }\n if (nbStages === 4) {\n document.getElementById(\"GProuteStageAdd\").style.display = \"none\";\n }\n // gestionnaire d'evenement :\n // on ajoute le point, utilisé pour la requête sur le service d'itiniraire\n context.onRouteAddPointClick(e);\n });\n\n return divAdd;\n },\n\n /**\n * Create Results autocompletion to the point\n * see event!\n * OVERWRITTEN BY LOCATIONSELECTOR !\n * (version initial without LOCATIONSELECTOR PLUGIN)\n * @param {Integer} n - n\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormAutoCompleteListElement : function (n) {\n // contexte d'execution\n var context = this;\n\n var div = document.createElement(\"div\");\n div.id = \"GProuteAutoCompleteList\" + n;\n div.className = \"GPadvancedAutoCompleteList\";\n\n if (div.addEventListener) {\n div.addEventListener(\"click\", function (e) {\n context.onAutoCompletedResultsItemClick(e);\n document.getElementById(\"GProuteAutoCompleteList\" + n).style.display = \"none\";\n }, false);\n } else if (div.attachEvent) {\n div.attachEvent(\"onclick\", function (e) {\n context.onAutoCompletedResultsItemClick(e);\n document.getElementById(\"GProuteAutoCompleteList\" + n).style.display = \"none\";\n });\n }\n\n // Proposals are dynamically filled in Javascript by autocomplete service\n //
    ...
    \n\n return div;\n },\n\n /**\n * Autocompletion result to a point.\n * Proposals are dynamically filled in Javascript by autocomplete service\n * OVERWRITTEN BY LOCATIONSELECTOR !\n * (version initial without LOCATIONSELECTOR PLUGIN)\n *\n *\n * @param {Object} location - suggested location results\n * @param {Number} n - number of the point\n * @param {Number} id - ID\n */\n _createRouteAutoCompletedLocationElement : function (location, n, id) {\n var container = document.getElementById(\"GProuteAutoCompleteList\" + n);\n\n var div = document.createElement(\"div\");\n div.id = \"AutoCompletedLocation\" + id;\n div.className = \"GPautoCompleteProposal\";\n div.innerHTML = GeocodeUtils.getSuggestedLocationFreeform(location);\n\n container.appendChild(div);\n },\n\n // ################################################################### //\n // ############## Methods to the choice mode into form ############### //\n // ################################################################### //\n\n /**\n * Create Mode choice transport\n * see event !\n * FIXME event not useful\n * @param {String[]} transports - transports\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormModeChoiceTransportElement : function (transports) {\n // contexte d'execution\n var context = this;\n\n var divContainer = document.createElement(\"div\");\n divContainer.id = this._addUID(\"GProuteTransportChoice\");\n\n var label = document.createElement(\"label\");\n label.className = \"GProuteModeLabel gpf-label fr-label\";\n label.innerHTML = \"Choisir un mode de déplacement\";\n divContainer.appendChild(label);\n\n var divRadio = document.createElement(\"div\");\n divRadio.className = \"gpf-radio-btn-group\";\n /* jshint -W083 */\n for (var i = 0; i < transports.length; i++) {\n var transport = transports[i];\n\n var div = document.createElement(\"div\");\n div.className = \"GProuteTransportChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w\";\n\n if (transport === \"Voiture\") {\n var inputCar = document.createElement(\"input\");\n inputCar.id = this._addUID(\"GProuteTransportCar\");\n inputCar.type = \"radio\";\n inputCar.name = \"GProuteTransport\";\n inputCar.value = \"Voiture\";\n if (i === 0) {\n inputCar.checked = true;\n }\n // gestionnaire d'evenement :\n // on stocke le mode de transport,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputCar.addEventListener) {\n inputCar.addEventListener(\"change\", function (e) {\n context.onRouteModeTransportChange(e);\n });\n } else if (inputCar.attachEvent) {\n inputCar.attachEvent(\"onchange\", function (e) {\n context.onRouteModeTransportChange(e);\n });\n }\n div.appendChild(inputCar);\n\n var labelCar = document.createElement(\"label\");\n labelCar.className = \"GProuteTransportImg gpf-label fr-label\";\n labelCar.htmlFor = this._addUID(\"GProuteTransportCar\");\n labelCar.title = \"Voiture\";\n labelCar.innerHTML = \"Voiture\";\n div.appendChild(labelCar);\n }\n\n if (transport === \"Pieton\") {\n var inputPedestrian = document.createElement(\"input\");\n inputPedestrian.id = this._addUID(\"GProuteTransportPedestrian\");\n inputPedestrian.type = \"radio\";\n inputPedestrian.name = \"GProuteTransport\";\n inputPedestrian.value = \"Pieton\";\n if (i === 0) {\n inputPedestrian.checked = true;\n }\n // gestionnaire d'evenement :\n // on stocke le mode de transport,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputPedestrian.addEventListener) {\n inputPedestrian.addEventListener(\"change\", function (e) {\n context.onRouteModeTransportChange(e);\n });\n } else if (inputPedestrian.attachEvent) {\n inputPedestrian.attachEvent(\"onchange\", function (e) {\n context.onRouteModeTransportChange(e);\n });\n }\n div.appendChild(inputPedestrian);\n\n var labelPedestrian = document.createElement(\"label\");\n labelPedestrian.className = \"GProuteTransportImg gpf-label fr-label\";\n labelPedestrian.htmlFor = this._addUID(\"GProuteTransportPedestrian\");\n labelPedestrian.title = \"Piéton\";\n labelPedestrian.innerHTML = \"Piéton\";\n div.appendChild(labelPedestrian);\n }\n\n divRadio.appendChild(div);\n }\n divContainer.appendChild(divRadio);\n\n return divContainer;\n },\n\n /**\n * Create Mode choice computation\n * see event!\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormModeChoiceComputeElement : function () {\n // contexte d'execution\n var context = this;\n\n var divContainer = document.createElement(\"div\");\n divContainer.id = this._addUID(\"GProuteComputationChoice\");\n divContainer.className = \"fr-mt-2w\";\n\n var label = document.createElement(\"label\");\n label.className = \"GProuteComputationLabel gpf-label fr-label\";\n label.innerHTML = \"Mode de calcul\";\n divContainer.appendChild(label);\n\n var divRadio = document.createElement(\"div\");\n divRadio.className = \"gpf-radio-btn-group\";\n\n var div = document.createElement(\"div\");\n div.className = \"GProuteComputationChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w\";\n var inputFastest = document.createElement(\"input\");\n inputFastest.id = this._addUID(\"GProuteComputationFastest\");\n inputFastest.type = \"radio\";\n inputFastest.name = \"GProuteComputation\";\n inputFastest.value = \"fastest\";\n inputFastest.checked = true;\n // gestionnaire d'evenement :\n // on stocke le mode de transport,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputFastest.addEventListener) {\n inputFastest.addEventListener(\"change\", function (e) {\n context.onRouteModeComputationChange(e);\n });\n } else if (inputFastest.attachEvent) {\n inputFastest.attachEvent(\"onchange\", function (e) {\n context.onRouteModeComputationChange(e);\n });\n }\n div.appendChild(inputFastest);\n\n var labelFastest = document.createElement(\"label\");\n labelFastest.className = \"gpf-label fr-label\";\n labelFastest.htmlFor = this._addUID(\"GProuteComputationFastest\");\n labelFastest.title = \"Plus rapide\";\n labelFastest.innerHTML = \"Plus rapide\";\n div.appendChild(labelFastest);\n divRadio.appendChild(div);\n\n var div2 = document.createElement(\"div\");\n div2.className = \"GProuteComputationChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w\";\n var inputShortest = document.createElement(\"input\");\n inputShortest.id = this._addUID(\"GProuteComputationShortest\");\n inputShortest.type = \"radio\";\n inputShortest.name = \"GProuteComputation\";\n inputShortest.value = \"shortest\";\n // gestionnaire d'evenement :\n // on stocke le mode de transport,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputShortest.addEventListener) {\n inputShortest.addEventListener(\"change\", function (e) {\n context.onRouteModeComputationChange(e);\n });\n } else if (inputShortest.attachEvent) {\n inputShortest.attachEvent(\"onchange\", function (e) {\n context.onRouteModeComputationChange(e);\n });\n }\n div2.appendChild(inputShortest);\n\n var labelShortest = document.createElement(\"label\");\n labelShortest.className = \"gpf-label fr-label\";\n labelShortest.htmlFor = this._addUID(\"GProuteComputationShortest\");\n labelShortest.title = \"Plus court\";\n labelShortest.innerHTML = \"Plus court\";\n div2.appendChild(labelShortest);\n\n divRadio.appendChild(div2);\n divContainer.appendChild(divRadio);\n\n return divContainer;\n },\n\n // ################################################################### //\n // ################# Methods to the choice exclusions ################ //\n // ################################################################### //\n\n /**\n * Label to Exclusions Options\n * see event !\n * FIXME event not useful\n *\n * @returns {DOMElement} DOM element\n */\n _createShowRouteExclusionsPictoElement : function () {\n // contexte d'execution\n var context = this;\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowRouteExclusionsPicto\");\n var hidden = \"\";\n if (checkDsfr()) {\n hidden = \"GPelementHidden gpf-hidden\";\n }\n button.className = `GPshowAdvancedToolPicto GPshowMoreOptionsImage GPshowMoreOptions GPshowRouteExclusionsPicto ${hidden} gpf-btn fr-btn--sm fr-btn--tertiary gpf-btn--tertiary fr-icon-arrow-down-fill`;\n button.title = \"Exclusions\";\n // button.style.top = \"185px\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", true);\n\n // gestionnaire d'evenement :\n // on ouvre le menu des options des exclusions\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n e.preventDefault();\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowRouteExclusionsClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n e.preventDefault();\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowRouteExclusionsClick(e);\n });\n }\n\n return button;\n },\n\n /**\n * Create Container to Exclusions\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormExclusionsElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GProuteExclusions\");\n div.className = \"fr-mt-2w\";\n\n var label = document.createElement(\"label\");\n label.className = \"GProuteExclusionsLabel fr-label\";\n label.innerHTML = \"Passages autorisés\";\n div.appendChild(label);\n\n // div.appendChild(this._createRoutePanelFormExclusionOptionsElement());\n\n return div;\n },\n\n /**\n * Create Exclusions Options\n * see event !\n * FIXME event not useful\n * @param {Object[]} exclusions - exclusions\n *\n * @returns {DOMElement} DOM element\n */\n _createRoutePanelFormExclusionOptionsElement : function (exclusions) {\n // contexte d'execution\n var context = this;\n\n var div = document.createElement(\"div\");\n div.className = \"GProuteExclusionsOptions gpf-flex fr-checkbox-group fr-m-1w\";\n\n /* jshint -W083 */\n for (var value in exclusions) {\n if (exclusions.hasOwnProperty(value)) {\n var status = exclusions[value];\n switch (value) {\n case \"toll\":\n var inputToll = document.createElement(\"input\");\n inputToll.id = this._addUID(\"GProuteExclusionsToll\");\n inputToll.type = \"checkbox\";\n inputToll.value = \"Toll\";\n inputToll.name = \"Peage\";\n inputToll.checked = !status;\n // gestionnaire d'evenement :\n // on stocke l'exclusion,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputToll.addEventListener) {\n inputToll.addEventListener(\"change\", function (e) {\n context.onRouteExclusionsChange(e);\n });\n } else if (inputToll.attachEvent) {\n inputToll.attachEvent(\"onchange\", function (e) {\n context.onRouteExclusionsChange(e);\n });\n }\n div.appendChild(inputToll);\n\n var labelToll = document.createElement(\"label\");\n labelToll.className = \"GProuteExclusionsOption\";\n labelToll.htmlFor = this._addUID(\"GProuteExclusionsToll\");\n labelToll.innerHTML = \"Péages\";\n div.appendChild(labelToll);\n break;\n\n case \"tunnel\":\n var inputTunnel = document.createElement(\"input\");\n inputTunnel.id = this._addUID(\"GProuteExclusionsTunnel\");\n inputTunnel.type = \"checkbox\";\n inputTunnel.value = \"Tunnel\";\n inputTunnel.name = \"Tunnel\";\n inputTunnel.checked = !status;\n // gestionnaire d'evenement :\n // on stocke l'exclusion,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputTunnel.addEventListener) {\n inputTunnel.addEventListener(\"change\", function (e) {\n context.onRouteExclusionsChange(e);\n });\n } else if (inputTunnel.attachEvent) {\n inputTunnel.attachEvent(\"onchange\", function (e) {\n context.onRouteExclusionsChange(e);\n });\n }\n div.appendChild(inputTunnel);\n\n var labelTunnel = document.createElement(\"label\");\n labelTunnel.className = \"GProuteExclusionsOption\";\n labelTunnel.htmlFor = this._addUID(\"GProuteExclusionsTunnel\");\n labelTunnel.innerHTML = \"Tunnels\";\n div.appendChild(labelTunnel);\n break;\n\n case \"bridge\":\n var inputBridge = document.createElement(\"input\");\n inputBridge.id = this._addUID(\"GProuteExclusionsBridge\");\n inputBridge.type = \"checkbox\";\n inputBridge.value = \"Bridge\";\n inputBridge.name = \"Ponts\";\n inputBridge.checked = !status;\n // gestionnaire d'evenement :\n // on stocke l'exclusion,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputBridge.addEventListener) {\n inputBridge.addEventListener(\"change\", function (e) {\n context.onRouteExclusionsChange(e);\n });\n } else if (inputBridge.attachEvent) {\n inputBridge.attachEvent(\"onchange\", function (e) {\n context.onRouteExclusionsChange(e);\n });\n }\n div.appendChild(inputBridge);\n\n var labelBridge = document.createElement(\"label\");\n labelBridge.className = \"GProuteExclusionsOption\";\n labelBridge.htmlFor = this._addUID(\"GProuteExclusionsBridge\");\n labelBridge.innerHTML = \"Ponts\";\n div.appendChild(labelBridge);\n break;\n }\n }\n }\n\n return div;\n },\n\n // ################################################################### //\n // ############################### Submit Form ####################### //\n // ################################################################### //\n\n /**\n * Create Submit Form Element\n *\n * @returns {DOMElement} DOM element\n */\n _createRouteSubmitFormElement : function () {\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GProuteSubmit\");\n input.className = \"GPsubmit gpf-btn gpf-btn-icon-submit fr-btn\";\n input.type = \"submit\";\n input.value = \"Calculer l'itinéraire\";\n\n return input;\n },\n\n // ################################################################### //\n // ############################### Reset picto ####################### //\n // ################################################################### //\n\n /**\n * Create Reset Picto Element\n *\n * @returns {DOMElement} DOM element\n */\n _createRouteFormResetElement : function () {\n var self = this;\n\n var buttonReset = document.createElement(\"button\");\n buttonReset.id = this._addUID(\"GProuteReset\");\n buttonReset.title = \"Réinitialiser les paramètres\";\n buttonReset.className = \"GPresetPicto gpf-btn gpf-btn-icon-reset fr-btn fr-btn--secondary gpf-btn--secondary\";\n buttonReset.title = \"Réinitialiser les paramètres\";\n buttonReset.setAttribute(\"tabindex\", \"0\");\n buttonReset.setAttribute(\"aria-pressed\", false);\n buttonReset.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onRouteResetClick(e);\n });\n\n return buttonReset;\n }\n};\n\nexport default RouteDOM;\n","// import CSS\nimport \"../../CSS/Controls/Route/GPFroute.css\";\n// import \"../../CSS/Controls/Route/GPFrouteStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\nimport Overlay from \"ol/Overlay\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport VectorSource from \"ol/source/Vector\";\n// import GeoJSON from \"ol/format/GeoJSON\";\nimport { pointerMove as eventPointerMove } from \"ol/events/condition\";\nimport { Select as SelectInteraction } from \"ol/interaction\";\nimport {\n Stroke,\n Style\n} from \"ol/style\";\nimport { transformExtent as olTransformExtentProj } from \"ol/proj\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Utils from \"../../Utils/Helper\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Markers from \"../Utils/Markers\";\nimport Draggable from \"../../Utils/Draggable\";\nimport Interactions from \"../Utils/Interactions\";\n// import local with ol dependencies\nimport LocationSelector from \"../LocationSelector/LocationSelector\";\nimport ButtonExport from \"../Export/Export\";\nimport LayerSwitcher from \"../LayerSwitcher/LayerSwitcher\";\nimport GeoJSONExtended from \"../../Formats/GeoJSON\";\n// DOM\nimport RouteDOM from \"./RouteDOM\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar logger = Logger.getLogger(\"route\");\n\n/**\n * @classdesc\n *\n * Route Control.\n *\n * @constructor\n * @alias ol.control.Route\n * @type {ol.control.Route}\n * @extends {ol.control.Control}\n * @param {Object} options - route control options\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {String} [options.apiKey] - API key for services call (route and autocomplete services). The key \"calcul\" is used by default.\n * @param {Boolean} [options.ssl = true] - use of ssl or not (default true, service requested using https protocol)\n * @param {Boolean} [options.collapsed = true] - Specify if widget has to be collapsed (true) or not (false) on map loading. Default is true.\n * @param {Boolean} [options.draggable = false] - Specify if widget is draggable\n * @param {Boolean|Object} [options.export = false] - Specify if button \"Export\" is displayed. For the use of the options of the \"Export\" control, see {@link ol.control.Export}\n * @param {Object} [options.exclusions = {\"toll\" : false, \"tunnel\" : false, \"bridge\" : false}] - list of exclusions with status (true = checked). By default : no exclusions checked.\n * @param {Array} [options.graphs = [\"Voiture\", \"Pieton\"]] - list of resources, by default : [\"Voiture\", \"Pieton\"]. The first element is selected.\n * @param {Object} [options.routeOptions = {}] - route service options. see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~route Gp.Services.route()} to know all route options.\n * @param {Object} [options.autocompleteOptions = {}] - autocomplete service options. see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~autoComplete Gp.Services.autoComplete()} to know all autocomplete options\n * @param {Object} [options.markersOpts] - options to use your own markers. Object properties can be \"departure\", \"stages\" or \"arrival\". Corresponding value is an object with following properties :\n * @param {String} [options.markersOpts.url] - marker base64 encoded url (ex \"data:image/png;base64,...\"\"). Mandatory for a custom marker\n * @param {Array} [options.markersOpts.offset] - Offsets in pixels used when positioning the overlay. The first element in the array is the horizontal offset. A positive value shifts the overlay right. The second element in the array is the vertical offset. A positive value shifts the overlay down. Default is [0, 0]. (see http://openlayers.org/en/latest/apidoc/ol.Overlay.html)\n * @param {Object} [options.layerDescription = {}] - Layer informations to be displayed in LayerSwitcher widget (only if a LayerSwitcher is also added to the map)\n * @param {String} [options.layerDescription.title = \"Itinéraire\"] - Layer title to be displayed in LayerSwitcher\n * @param {String} [options.layerDescription.description = \"Itinéraire basé sur un graphe\"] - Layer description to be displayed in LayerSwitcher\n * @fires route:drawstart\n * @fires route:drawend\n * @fires route:compute\n * @fires export:compute\n * @example\n * var route = ol.control.Route({\n * \"collapsed\" : true\n * \"draggable\" : true,\n * \"export\" : false,\n * \"exclusions\" : {\n * \"toll\" : true,\n * \"bridge\" : false,\n * \"tunnel\" : true\n * },\n * \"graphs\" : ['Pieton', 'Voiture'],\n * \"markersOpts\" : {\n * \"departure\" : {\n * \"url\" : \"...\",\n * \"offset\" : [0,0]\n * },\n * \"stages\" : {\n * \"url\" : \"...\",\n * \"offset\" : [0,0]\n * },\n * \"arrival\" : {\n * \"url\" : \"...\",\n * \"offset\" : [0,0]\n * }\n * }\n * \"autocompleteOptions\" : {},\n * \"routeOptions\" : {}\n * });\n *\n * // if you want to pluggued the control Export with options :\n * var route = new ol.control.Route({\n * export : {\n * name : \"export\",\n * format : \"geojson\",\n * title : \"Exporter\",\n * menu : false\n * }\n * });\n */\nvar Route = class Route extends Control {\n\n /**\n * See {@link ol.control.Route}\n * @module Route\n * @alias module:~controls/Route\n * @param {*} options - options\n * @example\n * import Route from \"gpf-ext-ol/controls/Route\"\n * ou\n * import { Route } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof Route)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"Route\";\n // initialisation du composant\n this.initialize(options);\n\n // Widget main DOM container\n this._container = this._createMainContainerElement();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n }\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n // enrichissement du DOM du container\n this._container = this._initContainer(map);\n this.element = this._container;\n\n // ajout d'un bouton d'export\n if (this.options.export) {\n var opts = Utils.assign({ control : this }, this.options.export);\n this.export = new ButtonExport(opts);\n this.export.render();\n var self = this;\n this.export.on(\"export:compute\", (e) => {\n self.dispatchEvent({\n type : \"export:compute\",\n content : e.content\n });\n });\n }\n\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this._panelRouteContainer,\n this._panelHeaderRouteContainer,\n map.getTargetElement()\n );\n }\n\n // mode \"collapsed\"\n if (!this.collapsed) {\n this._showRouteButton.setAttribute(\"aria-pressed\", true);\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n };\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Returns true if widget is collapsed (minimized), false otherwise\n *\n * @returns {Boolean} collapsed - true if widget is collapsed\n */\n getCollapsed () {\n return this.collapsed;\n }\n\n /**\n * Collapse or display widget main container\n *\n * @param {Boolean} collapsed - True to collapse widget, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.log(\"[ERROR] Route:setCollapsed - missing collapsed parameter\");\n return;\n }\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n if (collapsed) {\n document.getElementById(\"GProutePanelClose-\" + this._uid).click();\n } else {\n this._showRouteButton.click();\n }\n this.collapsed = collapsed;\n }\n\n /**\n * Get vector layer where geoJson route is drawn\n *\n * @returns {Object} layer - ol.layer.Vector route layer\n */\n getLayer () {\n return this._geojsonSections;\n }\n\n /**\n * Set vector layer where route geometry is drawn\n *\n * @param {Object} layer - ol.layer.Vector route layer\n */\n setLayer (layer) {\n if (!layer) {\n this._geojsonSections = null;\n return;\n }\n\n if (!(layer instanceof VectorLayer)) {\n logger.log(\"no valid layer given for hosting drawn features.\");\n return;\n }\n\n // application des styles\n layer.setStyle(this._defaultFeatureStyle);\n // sauvegarde\n this._geojsonSections = layer;\n }\n\n /**\n * Get vector layer\n *\n * @returns {String} geojson - GeoJSON format layer\n */\n getGeoJSON () {\n return JSON.stringify(this._geojsonObject);\n }\n\n /**\n * Set vector layer\n *\n * @param {String} geojson - GeoJSON format layer\n */\n setGeoJSON (geojson) {\n try {\n this._geojsonObject = JSON.parse(geojson);\n } catch (e) {\n logger.log(\"no valid geojson given :\" + e.message);\n }\n }\n\n /**\n * Get route informations\n *\n * @returns {Object} data - route informations\n */\n getData () {\n var points = [];\n for (let index = 0; index < this._currentPoints.length; index++) {\n const p = this._currentPoints[index];\n points.push(p.getCoordinate());\n }\n var data = {\n type : \"route\",\n points : points,\n transport : this._currentTransport,\n exclusions : this._currentExclusions,\n computation : this._currentComputation,\n results : {}\n };\n Utils.assign(data.results, this._currentRouteInformations);\n return data;\n }\n\n /**\n * Set route data\n *\n * @param {Object} data - control informations\n * @param {String} data.transport - transport type\n * @param {String} data.computation - computation type\n * @param {Array} data.exclusions - list of exclusions\n * @param {Array} data.points - list of points : [[lon, lat]]\n * @param {Object} data.results - service response\n */\n setData (data) {\n // INFO\n // transmettre toutes les informations necessaires pour reconstruire le panneau de resultats\n this._currentTransport = data.transport;\n this._currentComputation = data.computation;\n this._currentExclusions = data.exclusions;\n // INFO\n // nettoyer les points du calcul précedent\n for (var i = 0; i < this._currentPoints.length; i++) {\n var point = this._currentPoints[i];\n if (point.getCoordinate()) {\n // clean de l'objet sans declencher les evenements qui suppriment la couche précedente !\n // /!\\ point.clear()\n point.clearResults();\n // clean du dom\n var id = (i + 1) + \"-\" + this._uid;\n document.getElementById(\"GPlocationOriginCoords_\" + id).value = \"\";\n document.getElementById(\"GPlocationOrigin_\" + id).value = \"\";\n document.getElementById(\"GPlocationPoint_\" + id).style.cssText = \"\";\n if (i > 0 && i < 6) {\n // on masque les points intermediaires\n document.getElementById(\"GPlocationPoint_\" + id).className = \"GPflexInput GPelementHidden gpf-flex gpf-hidden \";\n }\n document.getElementById(\"GPlocationOriginPointer_\" + id).checked = false;\n document.getElementById(\"GPlocationOrigin_\" + id).className = \"GPelementVisible gpf-visible\";\n document.getElementById(\"GPlocationOriginCoords_\" + id).className = \"GPelementHidden gpf-hidden\";\n }\n }\n // ajout des nouvelles coordonnnées\n for (var j = 0; j < data.points.length; j++) {\n const c = data.points[j];\n if (c) {\n this._currentPoints[j].setCoordinate(c, \"EPSG:4326\");\n }\n }\n this._currentRouteInformations = data.results;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this._container;\n }\n\n /**\n * Get default style\n *\n * @returns {ol.style} style\n */\n getStyle () {\n return this._defaultFeatureStyle;\n }\n\n /**\n * This method is public.\n * It allows to init the control.\n */\n init () {\n // INFO\n // reconstruire le panneau de resultats sans lancer de calcul\n // * construire la liste des points (cf. RouteDOM._createRoutePanelFormElement())\n // * construire les resultats\n\n // init points\n for (let index = 0; index < this._currentPoints.length; index++) {\n const point = this._currentPoints[index];\n var id = index + 1;\n var coordinate = point.getCoordinate();\n if (coordinate) {\n var input = document.getElementById(\"GPlocationOrigin_\" + id + \"-\" + this._uid);\n input.value = coordinate[1].toFixed(4) + \" / \" + coordinate[0].toFixed(4);\n if (index > 0 && index < 6) {\n document.getElementById(\"GPlocationPoint_\" + id + \"-\" + this._uid).className = \"GPflexInput GPlocationStageFlexInput gpf-flex\";\n }\n }\n }\n\n // add points into panel\n var points = document.getElementsByClassName(\"GPlocationPoint-\" + this._uid);\n this._addRouteResultsStagesValuesElement(points);\n\n // set transport mode\n var transportdiv;\n if (this._currentTransport === \"Pieton\") {\n transportdiv = document.getElementById(\"GProuteTransportPedestrian-\" + this._uid);\n if (transportdiv) {\n transportdiv.checked = \"true\";\n }\n } else {\n transportdiv = document.getElementById(\"GProuteTransportCar-\" + this._uid);\n if (transportdiv) {\n transportdiv.checked = \"true\";\n }\n }\n\n // set computation mode\n var computationdiv = document.getElementById(\"GProuteComputationSelect-\" + this._uid);\n if (computationdiv) {\n computationdiv.value = this._currentComputation;\n }\n\n // set exclusions\n var tollInput = document.getElementById(\"GProuteExclusionsToll-\" + this._uid);\n if (tollInput) {\n if (this._currentExclusions.indexOf(\"toll\") !== -1) {\n tollInput.checked = false;\n } else {\n tollInput.checked = true;\n }\n }\n\n var tunnelInput = document.getElementById(\"GProuteExclusionsTunnel-\" + this._uid);\n if (tunnelInput) {\n if (this._currentExclusions.indexOf(\"tunnel\") !== -1) {\n tunnelInput.checked = false;\n } else {\n tunnelInput.checked = true;\n }\n }\n\n var bridgeInput = document.getElementById(\"GProuteExclusionsBridge-\" + this._uid);\n if (bridgeInput) {\n if (this._currentExclusions.indexOf(\"bridge\") !== -1) {\n bridgeInput.checked = false;\n } else {\n bridgeInput.checked = true;\n }\n }\n\n var distance = this._currentRouteInformations.totalDistance;\n var duration = this._currentRouteInformations.totalTime;\n\n // Détails avec simplifications des troncons\n var instructions = this._simplifiedInstructions(this._currentRouteInformations.routeInstructions);\n\n if (instructions) {\n this._fillRouteResultsDetailsContainer(distance, duration, instructions);\n }\n\n // affichage du panneau de details du controle !\n this._formRouteContainer.className = \"GPelementHidden gpf-hidden gpf-panel__content fr-modal__content\";\n this._hideWaitingContainer();\n this._resultsRouteContainer.className = \"\";\n }\n\n /**\n * Clean UI : reinit control\n */\n clean () {\n this._currentTransport = null;\n this._currentExclusions = [];\n this._currentComputation = null;\n\n for (var i = 0; i < this._currentPoints.length; i++) {\n this._currentPoints[i].clear();\n }\n\n this._removeRouteStepLocations();\n this._clearRouteInputOptions();\n this._clearRouteResultsDetails();\n\n this.setLayer();\n\n this._formRouteContainer.className = \"gpf-panel__content fr-modal__content\";\n this._resultsRouteContainer.className = \"GPelementHidden gpf-hidden\";\n }\n\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize route control (called by Route constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n this._checkInputOptions(options);\n\n // set default options\n this.options = {\n collapsed : true,\n draggable : false,\n export : false,\n graphs : [\"Pieton\", \"Voiture\"],\n exclusions : {\n toll : false,\n tunnel : false,\n bridge : false\n },\n routeOptions : {},\n autocompleteOptions : {},\n layerDescription : {\n title : \"Itinéraire\",\n description : \"Itinéraire basé sur un graphe\"\n }\n };\n\n // merge with user options\n Utils.assign(this.options, options);\n\n // cas particulier des markers par défaut\n var defaultMarkersOpts = {\n departure : {\n url : Markers[\"red\"],\n offset : Markers.defaultOffset\n },\n stages : {\n url : Markers[\"lightOrange\"],\n offset : Markers.defaultOffset\n },\n arrival : {\n url : Markers[\"darkOrange\"],\n offset : Markers.defaultOffset\n }\n };\n // on récupère les options de chaque type de marker si spécifié\n this.options.markersOpts = Utils.assign(defaultMarkersOpts, options.markersOpts);\n\n /** {Boolean} specify if Route control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n /** {Boolean} specify if Route control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n this._uid = this.options.id || SelectorID.generate();\n\n // containers principaux\n this._showRouteButton = null;\n this._panelRouteContainer = null;\n this._panelHeaderRouteContainer = null;\n this._waitingContainer = null;\n this._formRouteContainer = null;\n this._resultsRouteContainer = null;\n this._showRouteExclusionsElement = null;\n\n // liste de points selectionnée\n this._currentPoints = [];\n\n // Mode de transport selectionné : 'Voiture' ou 'Pieton'\n this._currentTransport = null;\n this._initTransport();\n\n // Mode de calcul selectionné : 'Plus rapide' ou 'plus court'\n this._currentComputation = null;\n this._initComputation();\n\n // Exclusions selectionnées : Tunnel, Toll et Bridge\n this._currentExclusions = [];\n this._initExclusions();\n\n // si un calcul est en cours ou non\n this._waiting = false;\n // timer pour cacher la patience après un certain temps\n this._timer = null;\n\n // la geometrie du parcours\n this._geojsonRoute = null;\n\n // la geometrie des troncons\n this._geojsonSections = null;\n\n // la geometrie des troncons au format GeoJSON\n this._geojsonObject = null;\n\n // bouton export\n this.export = null;\n\n // le container de la popup (pour les troncons selectionnés)\n this._popupContent = null;\n this._popupDiv = this._initPopupDiv();\n // l'overlay ol.Overlay correspondant à la popup (pour les troncons selectionnés)\n this._popupOverlay = null;\n\n // ol.interaction.Select associées à la couche des résultats (troncons)\n this._resultsSelectInteraction = null;\n this._resultsHoverInteraction = null;\n\n // styles pour les sélections des features\n this._defaultFeatureStyle = new Style({\n stroke : new Stroke({\n color : \"rgba(0,183,152,0.9)\",\n width : 12\n })\n });\n this._selectedFeatureStyle = new Style({\n stroke : new Stroke({\n color : \"rgba(255,102,0,0.9)\",\n width : 12\n })\n });\n\n // reponse du service\n // Ex. {\n // totalTime, totalDistance, bbox, routeGeometry,\n // routeInstructions : [{duration, distance, code, instruction, bbox, geometry}]\n // }\n this._currentRouteInformations = null;\n\n // liste des ressources avec droits par service\n // Ex. {\n // \"Route\" : {\n // key : \"ger4g456re45er456t4er5ge5\",\n // resources : [\"Pieton\", \"Voiture\"]\n // }\n // }\n this._resources = {};\n\n // listener key for event on pointermove or moveend map\n this.listenerKey = null;\n }\n\n /**\n * this method is called by this.initialize()\n *\n * @param {Object} options - options\n *\n * @private\n */\n _checkInputOptions (options) {\n // vérification des options\n // mode de transport\n if (options.graphs) {\n // on ne permet pas de passer un tableau vide : on spécifie au moins un graph\n if (Array.isArray(options.graphs) && options.graphs.length) {\n for (var i = 0; i < options.graphs.length; i++) {\n if (typeof options.graphs[i] === \"string\") {\n if (options.graphs[i].toLowerCase() === \"pieton\") {\n options.graphs[i] = \"Pieton\";\n }\n if (options.graphs[i].toLowerCase() === \"voiture\") {\n options.graphs[i] = \"Voiture\";\n }\n } else {\n logger.log(\"[ol.control.Route] ERROR : parameter 'graphs' elements should be of type 'string'\");\n options.graphs[i] = null;\n }\n }\n } else {\n logger.warn(\"'graphs' parameter should be an array\");\n options.graphs = null;\n }\n }\n\n // collapsed\n if (options.collapsed === \"true\") {\n options.collapsed = true;\n }\n if (options.collapsed === \"false\") {\n options.collapsed = false;\n }\n }\n\n /**\n * initialize component container (DOM)\n *\n * @param {Object} map - the map\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initContainer (map) {\n // get main container\n var container = this._container;\n if (container.childElementCount > 0) {\n return container;\n }\n\n var picto = this._showRouteButton = this._createShowRoutePictoElement();\n container.appendChild(picto);\n\n var routePanel = this._panelRouteContainer = this._createRoutePanelElement();\n var routePanelDiv = this._createRoutePanelDivElement();\n routePanel.appendChild(routePanelDiv);\n\n // header form\n var routeHeader = this._panelHeaderRouteContainer = this._createRoutePanelHeaderElement();\n routePanelDiv.appendChild(routeHeader);\n\n // form\n var routeForm = this._formRouteContainer = this._createRoutePanelFormElement();\n\n // form: menu des modes\n routeForm.appendChild(this._createRoutePanelFormModeChoiceTransportElement(this.options.graphs));\n\n // form: menu des points\n var points = this._createRoutePanelFormPointsElement(map);\n for (var i = 0; i < points.length; i++) {\n routeForm.appendChild(points[i]);\n }\n\n routeForm.appendChild(this._createRoutePanelFormModeChoiceComputeElement());\n\n // form: menu des exclusions\n this._showRouteExclusionsElement = this._createShowRouteExclusionsPictoElement();\n routeForm.appendChild(this._showRouteExclusionsElement);\n var exclusion = this._createRoutePanelFormExclusionsElement();\n exclusion.appendChild(this._createRoutePanelFormExclusionOptionsElement(this.options.exclusions));\n routeForm.appendChild(exclusion);\n\n var panelFooter = this._createRoutePanelFooterElement();\n routeForm.appendChild(panelFooter);\n\n if (!checkDsfr()) {\n var buttonReset = this._createRouteFormResetElement();\n panelFooter.appendChild(buttonReset);\n }\n\n // form: bouton du calcul\n var buttonSubmit = this._createRouteSubmitFormElement();\n panelFooter.appendChild(buttonSubmit);\n\n routePanelDiv.appendChild(routeForm);\n\n // results\n var routeResults = this._resultsRouteContainer = this._createRoutePanelResultsElement();\n routePanelDiv.appendChild(routeResults);\n\n // waiting\n var waiting = this._waitingContainer = this._createRouteWaitingElement();\n routePanelDiv.appendChild(waiting);\n\n container.appendChild(routePanel);\n // hide autocomplete suggested locations on container click\n if (container.addEventListener) {\n container.addEventListener(\"click\", (e) => this._hideRouteSuggestedLocations(e));\n }\n\n return container;\n }\n\n // ################################################################### //\n // ####################### init application ########################## //\n // ################################################################### //\n\n /**\n * this method is called by the constructor and initialize transport mode\n * (\"Voiture\" ou \"Pieton\")\n *\n * @private\n */\n _initTransport () {\n // Mode de transport selectionné\n this._currentTransport = \"Pieton\"; // par defaut\n\n // par defaut\n var transport = this.options.graphs;\n if (!transport || transport.length === 0) {\n this.options.graphs = [\"Pieton\", \"Voiture\"];\n }\n\n // option\n if (Array.isArray(transport) && transport.length) {\n // FIXME pb si le 1er graphe n'est pas une ressource connue !\n if (transport[0] === \"Voiture\" || transport[0] === \"Pieton\") {\n this._currentTransport = transport[0];\n }\n }\n\n // TODO option sur le service\n var serviceOptions = this.options.routeOptions;\n if (serviceOptions.graph) {\n this._currentTransport = serviceOptions.graph;\n }\n }\n\n /**\n * this method is called by the constructor and initialize computation mode\n * (fastest or shortest)\n *\n * @private\n */\n _initComputation () {\n // Mode de calcul selectionné\n this._currentComputation = \"fastest\"; // par defaut\n\n // TODO option sur le service\n var serviceOptions = this.options.routeOptions;\n if (serviceOptions.routePreference) {\n this._currentComputation = serviceOptions.routePreference;\n }\n }\n\n /**\n * this method is called by the constructor and initialize exclusions\n *\n * @private\n */\n _initExclusions () {\n // Exclusions selectionnées : Tunnel, Toll et Bridge\n this._currentExclusions = []; // par defaut\n\n // par defaut\n var exclusion = this.options.exclusions;\n if (!exclusion || (typeof exclusion === \"object\" && Object.keys(exclusion).length === 0)) {\n this.options.exclusions = {\n toll : false,\n tunnel : false,\n bridge : false\n };\n }\n\n // option\n if (exclusion && typeof exclusion === \"object\" && Object.keys(exclusion).length) {\n for (var k in exclusion) {\n if (exclusion.hasOwnProperty(k)) {\n if (exclusion[k]) {\n this._currentExclusions.push(k);\n }\n }\n }\n }\n\n // TODO option sur le service\n var serviceOptions = this.options.routeOptions;\n if (Array.isArray(serviceOptions.exclusions)) {\n this._currentExclusions = serviceOptions.exclusions;\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize popup div\n * (to display results information on route result click)\n *\n * @return {Object} element - DOM element for popup\n * @private\n */\n _initPopupDiv () {\n var context = this;\n var element = document.createElement(\"div\");\n element.className = \"gp-feature-info-div\";\n var closer = document.createElement(\"button\");\n closer.className = \"gp-styling-button closer\";\n // on closer click : remove popup\n closer.onclick = function () {\n if (context._popupOverlay != null) {\n context._popupOverlay.setPosition(undefined);\n }\n return false;\n };\n this._popupContent = document.createElement(\"div\");\n this._popupContent.className = \"gp-features-content-div\";\n element.appendChild(this._popupContent);\n element.appendChild(closer);\n\n return element;\n }\n\n // ################################################################### //\n // ############################## DOM ################################ //\n // ################################################################### //\n\n /**\n * Create List Points\n * Overwrite RouteDOM method !\n *\n * @param {Object} map - the map\n *\n * @returns {Array} List DOM element\n * @private\n */\n _createRoutePanelFormPointsElement (map) {\n var points = [];\n var count = 1;\n\n // point de depart\n var start = new LocationSelector({\n apiKey : this.options.apiKey || null,\n tag : {\n id : count,\n groupId : this._uid,\n markerOpts : this.options.markersOpts[\"departure\"],\n display : true\n },\n autocompleteOptions : this.options.autocompleteOptions || null\n });\n start.setMap(map);\n // on ajoute des écouteurs d'évènements (en plus de ceux de LocationSelector),\n // pour prendre en compte les CSS spécifiques de GProuteForm\n this._addFormPointsEventListeners(start);\n points.push(this._createRoutePanelFormPointLabel(\"Départ\"));\n points.push(start._container);\n this._currentPoints.push(start);\n\n // points intermediaires\n for (count = 2; count < 7; count++) {\n var step = new LocationSelector({\n apiKey : this.options.apiKey || null,\n tag : {\n id : count,\n groupId : this._uid,\n markerOpts : this.options.markersOpts[\"stages\"],\n display : false,\n removeOption : true\n },\n autocompleteOptions : this.options.autocompleteOptions || null\n });\n step.setMap(map);\n this._addFormPointsEventListeners(step);\n points.push(this._createRoutePanelFormPointLabel(\"Étape\", false));\n points.push(step._container);\n this._currentPoints.push(step);\n }\n\n // point d'arrivée\n var end = new LocationSelector({\n apiKey : this.options.apiKey || null,\n tag : {\n id : count,\n groupId : this._uid,\n markerOpts : this.options.markersOpts[\"arrival\"],\n display : true,\n addOption : true\n },\n autocompleteOptions : this.options.autocompleteOptions || null\n });\n end.setMap(map);\n this._addFormPointsEventListeners(end);\n points.push(this._createRoutePanelFormPointLabel(\"Arrivée\"));\n points.push(end._container);\n this._currentPoints.push(end);\n\n return points;\n }\n\n /**\n * Attach events listeners to route form points (locationSelector)\n *\n * @param {Object} formPoint - route form point (locationSelector)\n * @private\n */\n _addFormPointsEventListeners (formPoint) {\n if (!formPoint) {\n return;\n }\n\n if (formPoint._buttonLabel.addEventListener) {\n // display form on origin label click\n formPoint._buttonLabel.addEventListener(\n \"click\",\n (e) => this.onRouteOriginLabelClick(e)\n );\n // minimize form on input show pointer, and set map event listeners (see this.onRouteOriginPointerClick)\n formPoint._inputShowPointer.addEventListener(\n \"click\",\n (e) => this.onRouteOriginPointerClick(e, formPoint)\n );\n if (formPoint._removePointElement) {\n formPoint._removePointElement.addEventListener(\n \"click\",\n (e) => {\n logger.trace(\"click on _removePointElement\", e);\n // Moving up exclusions picto\n // var exclusionsPictoTop = context._showRouteExclusionsElement.style.top;\n // context._showRouteExclusionsElement.style.top = (parseInt(exclusionsPictoTop, 10) - 33).toString() + \"px\";\n }\n );\n }\n if (formPoint._addPointElement) {\n formPoint._addPointElement.addEventListener(\n \"click\",\n (e) => {\n logger.trace(\"click on _addPointElement\", e);\n // Moving down exclusions picto\n // var exclusionsPictoTop = context._showRouteExclusionsElement.style.top;\n // context._showRouteExclusionsElement.style.top = (parseInt(exclusionsPictoTop, 10) + 33).toString() + \"px\";\n }\n );\n }\n } else if (formPoint._buttonLabel.attachEvent) {\n // attachEvent: Internet explorer event listeners management\n formPoint._buttonLabel.attachEvent(\n \"onclick\",\n (e) => this.onRouteOriginLabelClick(e)\n );\n formPoint._inputShowPointer.attachEvent(\n \"onclick\",\n (e) => this.onRouteOriginPointerClick(e, formPoint)\n );\n if (formPoint._removePointElement) {\n formPoint._removePointElement.attachEvent(\n \"onclick\",\n (e) => {\n // Moving up exclusions picto\n // var exclusionsPictoTop = context._showRouteExclusionsElement.style.top;\n // context._showRouteExclusionsElement.style.top = (parseInt(exclusionsPictoTop, 10) - 33).toString() + \"px\";\n }\n );\n }\n if (formPoint._addPointElement) {\n formPoint._addPointElement.attachEvent(\n \"onclick\",\n (e) => {\n // Moving down exclusions picto\n // var exclusionsPictoTop = context._showRouteExclusionsElement.style.top;\n // context._showRouteExclusionsElement.style.top = (parseInt(exclusionsPictoTop, 10) + 33).toString() + \"px\";\n }\n );\n }\n }\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'submit' on 'GProuteForm' tag form\n * (cf. this._createRoutePanelFormElement), and it displays the results.\n *\n * @param {Object} options - options\n * @private\n */\n onRouteComputationSubmit (options) {\n logger.log(\"onRouteComputationSubmit\", options);\n\n // FIXME on lance une requête en EPSG:4326, les coordonnées\n // doivent donc être du type cad en lat/lon.\n // or, BUG du service du calcul d'itineraire car les\n // coordonnées envoyées doivent être en lon/lat avec une SRS en EPSG:4326 !?\n // sinon, ça plante...\n\n // Liste des points\n var points = this._currentPoints;\n\n // - point de depart (info: points[0].getCoordinate est du type [lon, lat], en EPSG:4326)\n var start;\n if (points[0] && points[0].getCoordinate) {\n var startCoordinate = points[0].getCoordinate();\n start = {\n x : startCoordinate[0],\n y : startCoordinate[1]\n };\n logger.log(\"start\", start);\n }\n\n // - point d'arrivée\n var end;\n var endPoint = points[points.length - 1];\n if (endPoint && endPoint.getCoordinate) {\n var endCoordinate = endPoint.getCoordinate();\n end = {\n x : endCoordinate[0],\n y : endCoordinate[1]\n };\n logger.log(\"end\", end);\n }\n\n // - les étapes\n var step = [];\n for (var i = 1; i < points.length - 1; i++) {\n if (points[i] && points[i].getCoordinate) {\n var iCoordinate = points[i].getCoordinate();\n if (iCoordinate) {\n var coordinate = {\n x : iCoordinate[0],\n y : iCoordinate[1]\n };\n logger.log(\"step\", coordinate);\n step.push(coordinate);\n }\n }\n }\n\n // valeurs selectionnées\n this._currentTransport = options.transport;\n this._currentComputation = options.computation;\n this._currentExclusions = options.exclusions;\n\n // on recupere les éventuelles options du service passées par l'utilisateur\n var routeOptions = this.options.routeOptions;\n\n // OVERLOAD : la resource bd-topo-osrm ne gère pas le calcul piéton en mode fastest\n // dans ce cas, on utilise valhalla dans le cas d'une utilisation par défaut du widget\n // sans paramétrage de resource explicitement demandé\n var routeResource;\n if (!routeOptions.resource) {\n if (this._currentComputation === \"fastest\" && this._currentTransport === \"Pieton\") {\n routeResource = \"bdtopo-valhalla\";\n }\n } else {\n routeResource = routeOptions.resource;\n }\n\n // gestion du protocole et du timeout\n // le timeout est indispensable sur le protocole JSONP.\n var _protocol = routeOptions.protocol || \"XHR\";\n var _timeout = routeOptions.timeOut || 0;\n if (_protocol === \"JSONP\" && _timeout === 0) {\n // FIXME le timeout est obligatoire pour ce type de protocole...\n _timeout = 15000;\n }\n\n // gestion des callback\n var bOnFailure = !!(routeOptions.onFailure !== null && typeof routeOptions.onFailure === \"function\"); // cast variable to boolean\n var bOnSuccess = !!(routeOptions.onSuccess !== null && typeof routeOptions.onSuccess === \"function\");\n\n // on met en place l'affichage des resultats dans la fenetre de resultats.\n var context = this;\n this._requestRouting({\n startPoint : start,\n endPoint : end,\n viaPoints : step,\n graph : routeOptions.graph || this._currentTransport,\n routePreference : routeOptions.routePreference || this._currentComputation,\n exclusions : routeOptions.exclusions || this._currentExclusions,\n geometryInInstructions : true,\n distanceUnit : \"m\",\n timeOut : _timeout,\n protocol : _protocol,\n resource : routeResource,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(results);\n if (results) {\n context._fillRouteResultsDetails(results);\n }\n if (bOnSuccess) {\n routeOptions.onSuccess.call(context, results);\n }\n },\n // callback onFailure\n onFailure : function (error) {\n context._hideWaitingContainer();\n context._clearRouteResultsDetails();\n logger.log(error.message);\n if (bOnFailure) {\n routeOptions.onFailure.call(context, error);\n }\n }\n });\n }\n\n /**\n * this method is called by event 'click' on 'GPlocationOriginLabel' label\n * and set 'GProuteForm' CSS class to \"\" (normal)\n *\n * @param {Object} routeControl - context : route Control (this)\n * @private\n */\n onRouteOriginLabelClick () {\n this._formRouteContainer.className = \"gpf-panel__content gpf-mobile-form fr-modal__content\";\n // on désactive l'écouteur d'événements sur la carte (pour ne pas placer un marker au clic)\n // map.un(\n // \"click\",\n // () => {\n // // on ne rétablit pas le mode \"normal\" si on est dans le panel des résultats (où className = \"GProuteComponentHidden\")\n // if (this._formRouteContainer.className === \"GProuteFormMini\") {\n // this._formRouteContainer.className = \"gpf-panel__content fr-modal__content\";\n // }\n // }\n // );\n olObservableUnByKey(this.listenerKey);\n this.dispatchEvent(\"route:drawend\");\n }\n\n /**\n * this method is called by event 'click' on 'GPlocationOriginPointerImg' label\n * and display or minimize 'GProuteForm', using CSS class (\"GProuteFormMini\" or \"\")\n *\n * @param {Object} e - context : route Control (equivalent to this)\n * @param {Object} locationSelector - context : locationSelector input (one of this._currentPoints)\n * @private\n */\n onRouteOriginPointerClick (e, locationSelector) {\n var map = this.getMap();\n if (locationSelector._inputShowPointerContainer.checked) {\n // au click sur l'input pour pointer sur la carte: on minimise le formulaire\n this._formRouteContainer.className = \"GProuteFormMini gpf-panel__content fr-modal__content\";\n e.target.parentElement.parentElement.classList.add(\"selected\");\n // et au clic sur la carte, on réaffichera le formulaire \"normal\"\n this.listenerKey = map.on(\n \"click\",\n () => {\n e.target.parentElement.parentElement.classList.remove(\"selected\");\n // on ne rétablit pas le mode \"normal\" si on est dans le panel des résultats (où className = \"GProuteComponentHidden\")\n if (this._formRouteContainer.className === \"GProuteFormMini gpf-panel__content fr-modal__content\") {\n this._formRouteContainer.className = \"gpf-panel__content fr-modal__content\";\n }\n olObservableUnByKey(this.listenerKey);\n /**\n * event triggered at the end of drawing input\n *\n * @event route:drawend\n */\n this.dispatchEvent(\"route:drawend\");\n }\n );\n /**\n * event triggered at the start of drawing input\n *\n * @event route:drawstart\n */\n this.dispatchEvent(\"route:drawstart\");\n } else {\n // si on déselectionne le pointer, on rétablit le formulaire en mode normal\n this._formRouteContainer.className = \"\";\n // et on enlève l'écouteur d'évènement sur la carte\n // map.un(\n // \"click\",\n // () => {\n // // on ne rétablit pas le mode \"normal\" si on est dans le panel des résultats (où className = \"GProuteComponentHidden\")\n // if (this._formRouteContainer.className === \"GProuteFormMini\") {\n // this._formRouteContainer.className = \"gpf-panel__content fr-modal__content\";\n // }\n // }\n // );\n olObservableUnByKey(this.listenerKey);\n this.dispatchEvent(\"route:drawend\");\n }\n }\n\n /**\n * this method is called by event 'click' on 'GPshowRoutePicto'\n * tag label (cf. this._createShowRoutePictoElement),\n * and it cleans all value of input.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onShowRoutePanelClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n // on supprime toutes les interactions\n Interactions.unset(map);\n // clean !\n if (!this._geojsonSections && !this._waiting) {\n this._clear();\n }\n var opened = this._showRouteButton.ariaPressed;\n this.collapsed = !(opened === \"true\");\n // on génère nous même l'evenement OpenLayers de changement de pté\n // (utiliser ol.control.Route.on(\"change:collapsed\", function ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n }\n\n /**\n * this method is called by event 'change' on 'GProuteComputationSelect' tag select\n * (cf. this._createRoutePanelFormModeChoiceComputeElement).\n * this value is saved as a parameter for the service route.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onRouteModeComputationChange (e) {\n var value = e.target.value;\n\n if (!value) {\n return;\n }\n\n logger.log(value);\n this._currentComputation = value;\n }\n\n /**\n * this method is called by event 'change' on 'GProuteResultsComputationSelect' tag select\n * (cf. this._createRouteResultsElement).\n * this value is saved as a parameter for the service route,\n * and this launches the route request !\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onRouteModeComputationChangeAndRun (e) {\n // event choice computation\n this.onRouteModeComputationChange(e);\n\n // clean avant un nouveau calcul !\n this._clearRouteResultsDetails();\n this._clearRouteResultsGeometry();\n this._clearRouteResultsFeatureGeometry();\n\n // submit request\n this.onRouteComputationSubmit({\n computation : this._currentComputation,\n transport : this._currentTransport,\n exclusions : this._currentExclusions\n });\n }\n\n /**\n * this method is called by event 'change' on 'GProuteTransportCar' or 'GProuteTransportPedestrian' tag input\n * (cf. this._createRoutePanelFormModeChoiceTransportElement).\n * this value is saved as a parameter for the service route.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onRouteModeTransportChange (e) {\n var value = e.target.value;\n if (!value) {\n return;\n }\n this._currentTransport = value;\n }\n\n /**\n * TODO this method is called by event 'click' on 'GPshowRouteExclusionsPicto' tag input\n * (cf. this._createShowRouteExclusionsPictoElement), and it displays the panel options of exclusions.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onShowRouteExclusionsClick (e) {\n logger.log(\"onShowRouteExclusionsClick\", e);\n // FIXME not use ?!\n }\n\n /**\n * this method is called by event 'change' on 'GProuteExclusionsToll'\n * or 'GProuteExclusionsTunnel' or 'GProuteExclusionsBridge' tag input\n * (cf. this._createRoutePanelFormExclusionOptionsElement).\n * this value is saved as a parameter for the service route.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onRouteExclusionsChange (e) {\n var value = e.target.value;\n var checked = e.target.checked;\n\n if (!value || (typeof value !== \"string\")) {\n return;\n }\n value = value.toLowerCase();\n\n var bFound = false;\n var iFound = null;\n for (var i = 0; i < this._currentExclusions.length; i++) {\n if (this._currentExclusions[i] === value) {\n iFound = i;\n bFound = true;\n }\n }\n // on l'ajoute si la valeur n'existe pas et est déselectionnée\n // info : checked = passage autorisé (ce n'est pas une exclusion)\n if (!bFound && !checked) {\n this._currentExclusions.push(value);\n }\n // on la retire si la valeur existe et est selectionnée\n if (bFound && checked) {\n this._currentExclusions.splice(iFound, 1);\n }\n }\n\n /**\n * this method is called by event 'click' on 'GProuteReset'\n * tag label (cf. this._createRouteFormResetElement),\n * and it cleans all route input options and results.\n *\n * @private\n */\n onRouteResetClick () {\n // clear points\n var currentPoints = this._currentPoints;\n for (var i = 0; i < currentPoints.length; i++) {\n currentPoints[i].clear();\n }\n\n // clear results\n this._clear();\n\n this._clearRouteInputOptions();\n }\n\n /**\n * this method is called by event 'click' on 'GProuteSubmit'\n * tag label (cf. this._createRouteSubmitFormElement),\n * and it cleans the route geometry.\n *\n * @private\n */\n onShowRouteResultsNewClick () {\n // clean avant un nouveau calcul !\n this._clearRouteResultsDetails();\n this._clearRouteResultsGeometry();\n this._clearRouteResultsFeatureGeometry();\n }\n\n /**\n * this method is called by event 'mouseover' on 'GProuteResultsDetailsInstruction_'\n * tag label (cf. this._addRouteResultsDetailsElement),\n * and it makes a style on feature route.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onRouteResultsDetailsMouseOver (e) {\n // récupération de l'id de l'instruction survolée\n var tagid = e.target.id; // ex GProuteResultsDetailsInstruction_125\n var idx = tagid.substring(tagid.indexOf(\"_\") + 1); // ex. 125\n\n // on passe le texte en gras\n if (e.target.classList) {\n e.target.classList.add(\"GProuteResultsDetailsInstructionHighlight\");\n }\n\n if (!this._geojsonSections) {\n return;\n }\n\n // on récupère l'entité correspondante à l'instruction survolée\n var f = this._geojsonSections.getSource().getFeatureById(parseInt(idx, 10));\n // et on lui affecte un nouveau style\n f.setStyle(this._selectedFeatureStyle);\n }\n\n /**\n * this method is called by event 'mouseout' on 'GProuteResultsDetailsInstruction_'\n * tag label (cf. this._addRouteResultsDetailsElement),\n * and it deletes a style on feature route.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onRouteResultsDetailsMouseOut (e) {\n // récupération de l'id de l'instruction survolée\n var tagid = e.target.id; // ex GProuteResultsDetailsInstruction_125\n var idx = tagid.substring(tagid.indexOf(\"_\") + 1); // ex. 125\n\n // on repasse le texte en style normal\n if (e.target.classList) {\n e.target.classList.remove(\"GProuteResultsDetailsInstructionHighlight\");\n }\n\n if (!this._geojsonSections) {\n return;\n }\n // on récupère l'entité correspondante à l'instruction qui était survolée\n var f = this._geojsonSections.getSource().getFeatureById(parseInt(idx, 10));\n // et on lui réaffecte un style normal\n f.setStyle(null);\n }\n\n // ################################################################### //\n // ########################### Routing ############################### //\n // ############## (methods to request and results) ################### //\n\n /**\n * this method is called by this.onRouteComputationSubmit()\n * and executes a request to the service.\n *\n * @param {Object} options - route service request options\n * @param {Function} options.onSuccess - callback\n * @param {Function} options.onFailure - callback\n * @private\n */\n _requestRouting (options) {\n // on ne fait pas de requête si on n'a pas renseigné de parametres !\n if (!options || (typeof options === \"object\" && Object.keys(options).length === 0)) {\n return;\n }\n\n // on ne fait pas de requête si\n // - la parametre 'startPoint' est vide !\n if (!options.startPoint) {\n return;\n }\n // - la parametre 'endPoint' est vide !\n if (!options.endPoint) {\n return;\n }\n\n // cas où la clef API n'est pas renseignée dans les options du service,\n // on utilise celle renseignée au niveau du controle (calcul par défaut)\n options.apiKey = this.options.routeOptions.apiKey || this.options.apiKey;\n\n // si l'utilisateur a spécifié le paramètre ssl au niveau du control, on s'en sert\n // true par défaut (https)\n if (typeof options.ssl !== \"boolean\") {\n if (typeof this.options.ssl === \"boolean\") {\n options.ssl = this.options.ssl;\n } else {\n options.ssl = true;\n }\n }\n logger.log(options);\n\n // mise en place de la patience\n this._displayWaitingContainer();\n\n // appel du service de calcul d'itinéraires\n Gp.Services.route(options);\n }\n\n /**\n * this method is called by this.onRouteComputationSubmit() (in case of route computation success)\n * and fills the container of the route instructions list, distance and time\n * information, also, constructs the geometry route.\n *\n * @param {Object} results - results of the route calculation\n *\n * @private\n */\n _fillRouteResultsDetails (results) {\n // 1. Affichage des distances et durées\n var distance = results.totalDistance;\n var duration = results.totalTime;\n // Détails avec simplifications des troncons\n var instructions = this._simplifiedInstructions(results.routeInstructions);\n // var instructions = results.routeInstructions;\n\n if (instructions) {\n this._fillRouteResultsDetailsContainer(distance, duration, instructions);\n }\n\n // 2. Affichage des géométries\n // Geometrie simplifiée (si renseignée)\n var geometry = results.routeGeometry;\n if (geometry) {\n this._fillRouteResultsDetailsGeometry(geometry, this._defaultFeatureStyle);\n }\n\n // Geometries des tronçon (si renseignée)\n if (instructions && instructions[0].geometry) {\n this._fillRouteResultsDetailsFeatureGeometry(instructions, this._defaultFeatureStyle);\n }\n\n // 3. Zoom sur l'emprise de l'itinéraire (si spécifiée)\n var bbox = results.bbox;\n if (bbox) {\n var map = this.getMap();\n var bounds = [bbox.left, bbox.bottom, bbox.right, bbox.top];\n // reprojection dans la projection de la carte (bbox initialement en EPSG:4326)\n var mapProj = map.getView().getProjection().getCode();\n if (mapProj !== \"EPSG:4326\") {\n bounds = olTransformExtentProj(bounds, \"EPSG:4326\", mapProj);\n }\n map.getView().fit(bounds, map.getSize());\n }\n\n // sauvegarde de l'etat des resultats\n this._currentRouteInformations = results;\n\n /**\n * event triggered when the compute is finished\n *\n * @event route:compute\n * @property {Object} type - event\n * @property {Object} target - instance Route\n * @example\n * Route.on(\"route:compute\", function (e) {\n * console.log(e.target.getData());\n * })\n */\n this.dispatchEvent({\n type : \"route:compute\"\n });\n\n // mise à jour du controle !\n this._formRouteContainer.className = \"GPelementHidden gpf-hidden gpf-panel__content fr-modal__content\";\n this._hideWaitingContainer();\n this._resultsRouteContainer.className = \"\";\n }\n\n /**\n * this method is called by this._fillRouteResultsDetails()\n * and fills the container of the route instructions list, distance and time\n * information.\n *\n * @param {Number} distance - distance\n * @param {Number} duration - duration\n * @param {Object[]} instructions - list of instructions\n *\n * @private\n */\n _fillRouteResultsDetailsContainer (distance, duration, instructions) {\n // Distance et Durée\n this._resultsRouteValuesContainer = this._addRouteResultsValuesElement(distance, duration, this._convertSecondsToTime);\n\n // Détails\n this._resultsRouteDetailsContainer = this._addRouteResultsDetailsElement(instructions, this._convertSecondsToTime);\n }\n\n /**\n * this method is called by this._fillRouteResultsDetails()\n * and constructs the geometry route.\n *\n * @param {Object} geometry - geoJSON object for route geometry\n * @param {Object} style - route ol.style.Style object\n * @private\n */\n _fillRouteResultsDetailsGeometry (geometry, style) {\n this._clearRouteResultsGeometry();\n\n var map = this.getMap();\n\n if (!geometry) {\n return;\n }\n\n // création de l'objet geoJSON\n var geojsonObject = {\n type : \"FeatureCollection\",\n features : [\n {\n type : \"Feature\",\n crs : {\n type : \"name\",\n properties : {\n name : \"EPSG:4326\"\n }\n },\n geometry : geometry\n }\n ]\n };\n\n var geojsonformat = new GeoJSONExtended({\n defaultDataProjection : \"EPSG:4326\",\n defaultStyle : style\n\n });\n var features = geojsonformat.readFeatures(\n geojsonObject, {\n dataProjection : \"EPSG:4326\",\n featureProjection : \"EPSG:3857\"\n }\n );\n\n // ajout de la géométrie comme nouvelle couche vecteur à la carte\n this._geojsonRoute = new VectorLayer({\n source : new VectorSource({\n features : features\n }),\n style : style,\n title : \"Mon Itinéraire\"\n });\n map.addLayer(this._geojsonRoute);\n }\n\n /**\n * this method is called by this._fillRouteResultsDetails()\n * and constructs the geometries street with informations.\n *\n * @param {Array} instructions - route instructions list (containing geoJSON geometry)\n * @param {Object} style - route ol.style.Style object\n * @private\n */\n _fillRouteResultsDetailsFeatureGeometry (instructions, style) {\n this._clearRouteResultsFeatureGeometry();\n\n var map = this.getMap();\n\n // 1. création de l'objet geoJSON\n this._geojsonObject = {\n type : \"FeatureCollection\",\n crs : {\n type : \"name\",\n properties : {\n name : \"EPSG:4326\"\n }\n },\n features : []\n };\n\n // 2. Remplissage de l'objet geoJSON : ajout des géométries de chaque instruction\n for (var i = 0; i < instructions.length; i++) {\n var o = instructions[i];\n var id = i + 1;\n\n var coords = o.geometry.coordinates;\n for (var j = 0; j < coords.length; j++) {\n // remarque : les coordonnées sont au format string, à convertir en nombres\n if (typeof coords[j][0] === \"string\") {\n coords[j][0] = parseFloat(coords[j][0]);\n coords[j][1] = parseFloat(coords[j][1]);\n }\n }\n\n this._geojsonObject.features.push({\n type : \"Feature\",\n geometry : o.geometry,\n properties : {\n popupContent : \"(\" + id + \") distance : \" + this._convertDistance(o.distance) +\n \" / temps : \" + this._convertSecondsToTime(o.duration)\n },\n id : id\n });\n }\n\n // Ajout du point de depart du tracé\n this._geojsonObject.features.push({\n type : \"Feature\",\n geometry : {\n type : \"Point\",\n coordinates : this._currentPoints[0].getCoordinate()\n },\n properties : {\n description : \"Point de départ\",\n \"marker-symbol\" : this.options.markersOpts.departure.url\n }\n });\n\n // Ajout des points d'étapes\n for (var k = 1; k < this._currentPoints.length - 1; k++) {\n if (this._currentPoints[k] && this._currentPoints[k].getCoordinate) {\n var coordinates = this._currentPoints[k].getCoordinate();\n if (coordinates) {\n this._geojsonObject.features.push({\n type : \"Feature\",\n geometry : {\n type : \"Point\",\n coordinates : coordinates\n },\n properties : {\n description : \"Point d'étape\",\n \"marker-symbol\" : this.options.markersOpts.stages.url\n }\n });\n }\n }\n }\n\n // Ajout du point d'arrivée du tracé\n this._geojsonObject.features.push({\n type : \"Feature\",\n geometry : {\n type : \"Point\",\n coordinates : this._currentPoints[this._currentPoints.length - 1].getCoordinate()\n },\n properties : {\n description : \"Point d'arrivée\",\n \"marker-symbol\" : this.options.markersOpts.arrival.url\n }\n });\n\n // Création du format GeoJSON, avec reprojection des géométries\n var geojsonformat = new GeoJSONExtended({\n defaultDataProjection : \"EPSG:4326\",\n defaultStyle : style\n });\n var mapProj = this.getMap().getView().getProjection().getCode();\n var features = geojsonformat.readFeatures(\n this._geojsonObject, {\n dataProjection : \"EPSG:4326\",\n featureProjection : mapProj\n }\n );\n\n // 3. Ajout du tracé de l'itinéraire (geoJSON) comme nouvelle couche vecteur à la carte\n this._geojsonSections = new VectorLayer({\n source : new VectorSource({\n features : features\n }),\n style : style,\n opacity : 0.9,\n title : \"Mon Itinéraire\"\n });\n\n var graph;\n if (this._currentTransport === \"Pieton\") {\n graph = \"piéton\";\n this._geojsonSections.gpResultLayerId = \"compute:Pieton$OGC:OPENLS;Itineraire\";\n } else {\n graph = \"voiture\";\n this._geojsonSections.gpResultLayerId = \"compute:Voiture$OGC:OPENLS;Itineraire\";\n }\n // ajout à la carte\n map.addLayer(this._geojsonSections);\n\n // 4. Si un layer switcher est présent dans la carte, on lui affecte des informations pour cette couche\n map.getControls().forEach(\n (control) => {\n if (control instanceof LayerSwitcher) {\n // un layer switcher est présent dans la carte\n var layerId = this._geojsonSections.gpLayerId;\n // on n'ajoute des informations que s'il n'y en a pas déjà (si le titre est le numéro par défaut)\n if (control._layers[layerId].title === layerId) {\n control.addLayer(\n this._geojsonSections, {\n title : this.options.layerDescription.title + \" (\" + graph + \")\",\n description : this.options.layerDescription.description\n }\n );\n }\n }\n },\n this\n );\n\n // 5. Ajout de popups aux troncons\n // Création de l'interaction : survol des features (=troncons de l'itinéraire)\n this._resultsHoverInteraction = new SelectInteraction({\n condition : eventPointerMove,\n layers : [this._geojsonSections],\n style : this._selectedFeatureStyle\n });\n this._resultsHoverInteraction.on(\n \"select\",\n (e) => this._onResultsFeatureMouseOver(e)\n );\n map.addInteraction(this._resultsHoverInteraction);\n\n // Création de l'interaction : selection des features (=troncons de l'itinéraire)\n this._resultsSelectInteraction = new SelectInteraction({\n layers : [this._geojsonSections],\n style : this._selectedFeatureStyle\n });\n this._resultsSelectInteraction.on(\n \"select\",\n (e) => this._onResultsFeatureSelect(e)\n );\n map.addInteraction(this._resultsSelectInteraction);\n }\n\n /**\n * this method is called on route features hover\n * and highlight instruction label\n *\n * @param {Object} e - event\n *\n * @private\n */\n _onResultsFeatureMouseOver (e) {\n if (e.selected.length !== 0) {\n // si on a bien survolé un tronçon, on surligne l'instruction correspondante\n var f = e.selected[0];\n var selectedInstruction = document.getElementById(\"GProuteResultsDetailsInstruction_\" + f.getId() + \"-\" + this._uid);\n if (selectedInstruction && selectedInstruction.classList) {\n selectedInstruction.classList.add(\"GProuteResultsDetailsInstructionHighlight\");\n }\n }\n\n // si on déselectionne un tronçon (mouseout), on rétablit un style normal pour l'instruction\n if (e.deselected.length !== 0) {\n var deselectedFeature = e.deselected[0];\n // on repasse l'instruction correspondante en normal\n var deSelectedInstruction = document.getElementById(\"GProuteResultsDetailsInstruction_\" + deselectedFeature.getId() + \"-\" + this._uid);\n if (deSelectedInstruction && deSelectedInstruction.classList) {\n deSelectedInstruction.classList.remove(\"GProuteResultsDetailsInstructionHighlight\");\n }\n }\n }\n\n /**\n * this method is called on route features select\n * and set a popup with feature information\n *\n * @param {Object} e - on select event\n * @private\n */\n _onResultsFeatureSelect (e) {\n var map = this.getMap();\n if (e.selected.length !== 0) {\n // si on a sélectionné un troncon, on lui ajoute une popup\n var f = e.selected[0];\n this._popupContent.innerHTML = f.getProperties().popupContent;\n\n if (!this._popupOverlay) {\n // ajout de la popup a la carte comme un overlay\n this._popupOverlay = new Overlay({\n element : this._popupDiv,\n positioning : \"bottom-center\",\n position : e.mapBrowserEvent.coordinate\n });\n map.addOverlay(this._popupOverlay);\n } else {\n // si l'overlay est déjà créé, on modifie juste sa position\n this._popupOverlay.setPosition(e.mapBrowserEvent.coordinate);\n }\n } else {\n // si aucun troncon n'est sélectionné (click à côté du tracé),\n // on fait disparaitre la popup si elle existe\n if (this._popupOverlay != null) {\n this._popupOverlay.setPosition(undefined);\n }\n }\n }\n\n // ################################################################### //\n // ############################# Clean ############################### //\n // ################################################################### //\n\n /**\n * this method is called by this.onShowRoutePanelClick()\n * and it clears all elements (reinit).\n *\n * @private\n */\n _clear () {\n this._currentTransport = null;\n this._currentExclusions = [];\n this._currentComputation = null;\n\n // les resultats\n this._clearRouteResultsDetails();\n // la geometrie\n this._clearRouteResultsGeometry();\n this._clearRouteResultsFeatureGeometry();\n // les points\n for (var i = 0; i < this._currentPoints.length; i++) {\n this._currentPoints[i].clear();\n }\n // suppression des points intermédiaires\n this._removeRouteStepLocations();\n }\n\n /**\n * this method is called by this.onRouteResetClick()\n * and it clears all options inputs (reinit).\n *\n * @private\n */\n _clearRouteInputOptions () {\n // reinit options to default\n this._initTransport();\n this._initComputation();\n this._initExclusions();\n\n // set transport mode to default\n var transportdiv;\n if (this._currentTransport === \"Pieton\") {\n transportdiv = document.getElementById(\"GProuteTransportPedestrian-\" + this._uid);\n if (transportdiv) {\n transportdiv.checked = \"true\";\n }\n } else {\n transportdiv = document.getElementById(\"GProuteTransportCar-\" + this._uid);\n if (transportdiv) {\n transportdiv.checked = \"true\";\n }\n }\n\n // set computation mode to default\n var computationdiv = document.getElementById(\"GProuteComputationSelect-\" + this._uid);\n if (computationdiv) {\n computationdiv.value = this._currentComputation;\n }\n\n // set exclusions to default\n var tollInput = document.getElementById(\"GProuteExclusionsToll-\" + this._uid);\n if (tollInput) {\n if (this._currentExclusions.indexOf(\"toll\") !== -1) {\n tollInput.checked = false;\n } else {\n tollInput.checked = true;\n }\n }\n\n var tunnelInput = document.getElementById(\"GProuteExclusionsTunnel-\" + this._uid);\n if (tunnelInput) {\n if (this._currentExclusions.indexOf(\"tunnel\") !== -1) {\n tunnelInput.checked = false;\n } else {\n tunnelInput.checked = true;\n }\n }\n\n var bridgeInput = document.getElementById(\"GProuteExclusionsBridge-\" + this._uid);\n if (bridgeInput) {\n if (this._currentExclusions.indexOf(\"bridge\") !== -1) {\n bridgeInput.checked = false;\n } else {\n bridgeInput.checked = true;\n }\n }\n }\n\n /**\n * this method is called by this._clear()\n * and it removes step location inputs (excepted departure and arrival)\n *\n * @private\n */\n _removeRouteStepLocations () {\n var points = document.querySelectorAll(\"div[id^=\\\"GPlocationPoint\\\"]\");\n if (points.length !== 0) {\n var goodPoints = [];\n for (var k = 0; k < points.length; k++) {\n if (points[k].id.indexOf(this._uid) !== -1) {\n goodPoints.push(points[k]);\n }\n }\n // on boucle sur les points intermédiaires\n for (var i = 1; i < (goodPoints.length - 1); i++) {\n // on va regarder les classes associées\n var classList = goodPoints[i].classList;\n if (classList.length !== 0) {\n for (var j = 0; j < classList.length; j++) {\n if (classList[j] === \"GPlocationStageFlexInput\") {\n // si l'élément est visible, on le supprime en simulant un clic sur la croix (x)\n document.getElementById(this._addUID(\"GPlocationStageRemove_\" + (i + 1))).click();\n }\n }\n }\n }\n }\n }\n\n /**\n * this method is called by this.onRouteComputationSubmit() (in case of failure)\n * and it clears all route instructions.\n *\n * @private\n */\n _clearRouteResultsDetails () {\n this._currentRouteInformations = null;\n\n // doit on nettoyer le container \"GProuteResultsDetails\" ?\n // il sera de toute façon écrasé par la prochaine requête...\n if (this._resultsRouteDetailsContainer) {\n var detailsDiv = this._resultsRouteDetailsContainer;\n if (detailsDiv.childElementCount) {\n while (detailsDiv.firstChild) {\n detailsDiv.removeChild(detailsDiv.firstChild);\n }\n }\n }\n\n if (this._resultsRouteValuesContainer) {\n var valuesDiv = this._resultsRouteValuesContainer;\n if (valuesDiv.childElementCount) {\n while (valuesDiv.firstChild) {\n valuesDiv.removeChild(valuesDiv.firstChild);\n }\n }\n }\n }\n\n /**\n * this method is called by this.onRouteComputationSubmit()\n * and it clears all route geometries.\n *\n * @private\n */\n _clearRouteResultsGeometry () {\n var map = this.getMap();\n\n if (this._geojsonRoute != null) {\n map.removeLayer(this._geojsonRoute);\n this._geojsonRoute = null;\n }\n }\n\n /**\n * this method is called by this.onRouteComputationSubmit()\n * and it clears all route geometries.\n *\n * @private\n */\n _clearRouteResultsFeatureGeometry () {\n var map = this.getMap();\n\n // on retire la couche itinéraire de la carte\n if (this._geojsonSections != null) {\n map.removeLayer(this._geojsonSections);\n this._geojsonSections = null;\n this._geojsonObject = null;\n }\n // on retire l'overlay de la popup de la carte\n if (this._popupOverlay != null) {\n map.removeOverlay(this._popupOverlay);\n this._popupOverlay = null;\n }\n // et les interactions liées à cette couche\n if (this._resultsSelectInteraction != null) {\n map.removeInteraction(this._resultsSelectInteraction);\n this._resultsSelectInteraction = null;\n }\n if (this._resultsHoverInteraction != null) {\n map.removeInteraction(this._resultsHoverInteraction);\n this._resultsHoverInteraction = null;\n }\n }\n\n /**\n * this method is called by event 'click' on control main container\n * and hide suggested Locations (unless target is an autocomplete input)\n *\n * @param {Object} e - event\n *\n * @private\n */\n _hideRouteSuggestedLocations (e) {\n // si on clique sur un input de saisie de locationSelector\n if (e.target && e.target.id && e.target.id.indexOf(\"GPlocationOrigin_\") !== -1) {\n // on récupère le numéro du point\n var pointId = parseInt(e.target.id.split(\"_\")[1][0], 10) - 1;\n // et on cache les autres résultats d'autocomplétion (sauf celui sur lequel on clique)\n for (var j = 0; j < this._currentPoints.length; j++) {\n if (j !== parseInt(pointId, 10)) {\n this._currentPoints[j]._hideSuggestedLocation();\n }\n }\n } else {\n // si on clique ailleurs dans le DOM du control, on cache tous les résultats d'autocomplétion\n for (var i = 0; i < this._currentPoints.length; i++) {\n this._currentPoints[i]._hideSuggestedLocation();\n }\n }\n }\n\n /**\n * this method displays waiting container and sets a timeout\n *\n * @private\n */\n _displayWaitingContainer () {\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerVisible gpf-waiting gpf-waiting--visible\";\n this._waiting = true;\n\n // mise en place d'un timeout pour réinitialiser le panel (cacher la patience)\n // si on est toujours en attente (si la requête est bloquée par exemple)\n // ceci est vrai, uniquement sur le protocole JSONP !\n var opts = this.options.routeOptions;\n if (opts && opts.timeOut) {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n var context = this;\n this._timer = setTimeout(function () {\n if (context._waiting === true) {\n context._hideWaitingContainer();\n } else {\n if (context._timer) {\n clearTimeout(context._timer);\n }\n }\n }, 16000);\n }\n }\n\n /**\n * this method hides waiting container and clears timeout\n *\n * @private\n */\n _hideWaitingContainer () {\n if (this._waiting) {\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n this._waiting = false;\n var opts = this.options.routeOptions;\n if (opts && opts.timeOut) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n }\n }\n\n // ################################################################### //\n // ########################## Geometry ############################### //\n // ################################################################### //\n\n /**\n * simplified instructions\n *\n * @param {Object[]} instructions - list of instructions\n *\n * @returns {Object[]} simplified instructions\n *\n * @private\n */\n _simplifiedInstructions (instructions) {\n var newInstructions = [];\n\n // cas où...\n var current = instructions[0];\n if (instructions.length === 1) {\n newInstructions.push(current);\n }\n\n for (var i = 1; i < instructions.length; i++) {\n var o = instructions[i];\n if (o.instruction === current.instruction) {\n current.distance = (parseFloat(o.distance) + parseFloat(current.distance)).toString();\n current.duration = (parseFloat(o.duration) + parseFloat(current.duration)).toString();\n for (var j = 1; j < o.geometry.coordinates.length; j++) {\n current.geometry.coordinates.push(o.geometry.coordinates[j]);\n }\n } else {\n newInstructions.push(current);\n current = o;\n // last\n if (i === instructions.length - 1) {\n newInstructions.push(o);\n current = null;\n }\n }\n }\n logger.log(newInstructions);\n return newInstructions;\n }\n\n // ################################################################### //\n // ################# Utils for Distance/Duration ##################### //\n // ################################################################### //\n\n /**\n * convert seconds to time : HH:MM:SS\n *\n * @param {Number} duration - duration in seconds\n *\n * @returns {String} time in hours/minutes/seconds\n *\n * @private\n */\n _convertSecondsToTime (duration) {\n var time = \"\";\n\n duration = Math.round(duration);\n var hours = Math.floor(duration / (60 * 60));\n\n var divisor4minutes = duration % (60 * 60);\n var minutes = Math.floor(divisor4minutes / 60);\n // if (!minutes) {\n // minutes = \"00\";\n // }\n\n // var divisor4seconds = divisor4minutes % 60;\n // var seconds = Math.ceil(divisor4seconds);\n // if (!seconds) {\n // seconds = \"00\";\n // }\n\n if (hours) {\n time = hours + \"h \";\n }\n time += minutes + \" min\";\n return time;\n }\n\n /**\n * convert distance in meters or kilometers\n *\n * @param {Number} distance - distance in meters\n *\n * @returns {String} distance in km\n *\n * @private\n */\n _convertDistance (distance) {\n var d = \"\";\n\n var distanceKm = parseInt(distance / 1000, 10);\n if (!distanceKm) {\n d = parseInt(distance, 10) + \" m\"; // arrondi !\n } else {\n d = distanceKm + \" km\";\n }\n\n return d;\n }\n\n};\n\n// on récupère les méthodes de la classe commune ReverseGeocodingDOM\nObject.assign(Route.prototype, RouteDOM);\nObject.assign(Route.prototype, Widget);\n\nexport default Route;\n\n// Expose Route as ol.control.Route (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.Route = Route;\n}\n","import checkDsfr from \"../Utils/CheckDsfr\";\n\nvar IsoDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPisochron\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################# Methods to display Main Panel ################### //\n // ################################################################### //\n\n /**\n * Show iso control\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createShowIsoPictoElement : function () {\n // contexte d'execution\n var context = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowIsochronPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowIsochronPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-isocurve fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Calculer une isochrone\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // gestionnaire d'evenement :\n // on ouvre le menu de saisie du calcul d'isochrone\n // L'ouverture/Fermeture permet de faire le menage\n // (reinitialisation)\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowIsoPanelClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowIsoPanelClick(e);\n });\n }\n\n return button;\n },\n\n // ################################################################### //\n // ################## Methods to display Inputs Panel ################ //\n // ################################################################### //\n\n /**\n * Create Container Panel\n *\n * FIXME\n * don't call this._createIsoPanelHeaderElement\n * don't call this._createIsoPanelFormElement\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPisochronPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n // dialog.appendChild(this._createIsoPanelHeaderElement());\n // dialog.appendChild(this._createIsoPanelFormElement());\n\n return dialog;\n },\n\n _createIsoPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelHeaderElement : function () {\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n var div = document.createElement(\"div\");\n div.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n div.innerHTML = \"Calcul d'isochrone\";\n container.appendChild(div);\n\n // on desactive l'impl. reduction de la fenetre\n // var divReduce = document.createElement(\"div\");\n // divReduce.id = this._addUID(\"GPisochronPanelReduce\");\n // divReduce.className = \"GPpanelReduce\";\n // divReduce.title = \"Masquer le panneau\";\n //\n // if (divReduce.addEventListener) {\n // divReduce.addEventListener(\"click\", function () {\n // if ( typeof self.onReduceIsoPanelClick === \"function\") {\n // document.getElementById(self._addUID(\"GPshowIsochron\")).checked = false;\n // self.onReduceIsoPanelClick();\n // }\n // }, false);\n // } else if (divReduce.attachEvent) {\n // divReduce.attachEvent(\"onclick\", function () {\n // if ( typeof self.onReduceIsoPanelClick === \"function\") {\n // document.getElementById(self._addUID(\"GPshowIsochron\")).checked = false;\n // self.onReduceIsoPanelClick();\n // }\n // });\n // }\n // container.appendChild(divReduce);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPisochronPanelClose\");\n divClose.className = \"GPpanelClose GPisochronPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowIsochronPicto\")).click();\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowIsochronPicto\")).click();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n\n /**\n * Create Form\n * see evenement !\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormElement : function () {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GPisochronForm\");\n form.className = \"GPform gpf-panel__content gpf-mobile-form fr-modal__content\";\n\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n self.onIsoComputationSubmit(e);\n return false;\n });\n\n return form;\n },\n\n /**\n * Create Waiting Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoWaitingElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPisochronCalcWaitingContainer\");\n div.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n\n var p = document.createElement(\"p\");\n p.className = \"GPwaitingContainerInfo gpf-waiting_info\";\n p.innerHTML = \"Recherche en cours...\";\n\n div.appendChild(p);\n\n return div;\n },\n\n /**\n * Create Footer Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFooterElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"GPpanelFooter gpf-panel__footer fr-modal__footer\";\n\n return container;\n },\n\n /**\n * Create Point label\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormPointLabel : function () {\n var p = document.createElement(\"p\");\n p.id = this._addUID(\"GPisochronPointLabelP\");\n p.className = \"gpf-label fr-label\";\n p.innerHTML = \"Départ\";\n\n return p;\n },\n\n // ################################################################### //\n // ############# Methods to the type choice into form ################ //\n // ################################################################### //\n\n /**\n * Create Container to type choice\n *\n * FIXME\n * don't call this._createIsoPanelFormTypeChoiceChronElement\n * don't call this._createIsoPanelFormTypeChoiceDistElement\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormTypeChoiceElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPisochronChoice\");\n div.className = \"fr-mt-2w\";\n\n // div.appendChild(this._createIsoPanelFormTypeChoiceChronElement());\n // div.appendChild(this._createIsoPanelFormTypeChoiceDistElement());\n\n return div;\n },\n\n /**\n * Create Type choice Chron\n * see event !\n * FIXME event not useful\n * @param {Boolean} checked - checked\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormTypeChoiceChronElement : function (checked) {\n var self = this;\n\n var div = document.createElement(\"div\");\n div.className = \"GPisochronChoiceAlt gpf-flex gpf-flex-isocurve gpf-radio-group fr-radio-group\";\n\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPisochronChoiceAltChron\");\n input.name = \"GPisochronChoiceMode\";\n input.type = \"radio\";\n input.checked = !!(checked);\n if (input.addEventListener) {\n input.addEventListener(\"change\", function (e) {\n document.getElementById(self._addUID(\"GPisochronValueChron\")).className = \"GPflexInput gpf-flex fr-mt-1w\";\n document.getElementById(self._addUID(\"GPisochronValueDist\")).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPisochronValueChronLabelP\")).className = \"gpf-label fr-label\";\n document.getElementById(self._addUID(\"GPisochronValueDistLabelP\")).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPisochronSubmit\")).value = \"Calculer l'isochrone\";\n self.onIsoTypeChoiceChange(e);\n }, false);\n } else if (input.attachEvent) {\n input.attachEvent(\"onchange\", function () {\n document.getElementById(self._addUID(\"GPisochronValueChron\")).className = \"GPflexInput gpf-flex fr-mt-1w\";\n document.getElementById(self._addUID(\"GPisochronValueDist\")).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPisochronValueChronLabelP\")).className = \"gpf-label fr-label\";\n document.getElementById(self._addUID(\"GPisochronValueDistLabelP\")).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPisochronSubmit\")).value = \"Calculer l'isochrone\";\n self.onIsoTypeChoiceChange();\n });\n }\n // info: Internet explorer support\n input.value = \"isochron\";\n div.appendChild(input);\n\n var label = document.createElement(\"label\");\n label.className = \"GPisochronChoiceAltImg gpf-label fr-label\";\n label.htmlFor = this._addUID(\"GPisochronChoiceAltChron\");\n label.innerHTML = \"Durée\";\n label.title = \"Durée\";\n div.appendChild(label);\n\n var span = document.createElement(\"span\");\n span.id = this._addUID(\"GPisochronChoiceAltChronTxt\");\n span.className = \"gpf-hidden\";\n span.innerHTML = \"Durée\";\n if (span.addEventListener) {\n span.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPisochronChoiceAltChron\")).click();\n }, false);\n } else if (span.attachEvent) {\n span.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPisochronChoiceAltChron\")).click();\n });\n }\n div.appendChild(span);\n\n return div;\n },\n\n /**\n * Create Type choice Dist\n * see event !\n * FIXME event not useful\n * @param {Boolean} checked - checked\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormTypeChoiceDistElement : function (checked) {\n var self = this;\n\n var div = document.createElement(\"div\");\n div.className = \"GPisochronChoiceAlt gpf-flex gpf-flex-isocurve gpf-radio-group fr-radio-group\";\n\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPisochronChoiceAltDist\");\n input.name = \"GPisochronChoiceMode\";\n input.type = \"radio\";\n input.checked = !!(checked);\n if (input.addEventListener) {\n input.addEventListener(\"change\", function (e) {\n document.getElementById(self._addUID(\"GPisochronValueDist\")).className = \"GPflexInput gpf-flex fr-mt-1w\";\n document.getElementById(self._addUID(\"GPisochronValueChron\")).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPisochronValueDistLabelP\")).className = \"gpf-label fr-label\";\n document.getElementById(self._addUID(\"GPisochronValueChronLabelP\")).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPisochronSubmit\")).value = \"Calculer l'isodistance\";\n self.onIsoTypeChoiceChange(e);\n }, false);\n } else if (input.attachEvent) {\n input.attachEvent(\"onchange\", function () {\n document.getElementById(self._addUID(\"GPisochronValueDist\")).className = \"GPflexInput gpf-flex fr-mt-1w\";\n document.getElementById(self._addUID(\"GPisochronValueChron\")).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPisochronValueDistLabelP\")).className = \"gpf-label fr-label\";\n document.getElementById(self._addUID(\"GPisochronValueChronLabelP\")).className = \"GPelementHidden gpf-hidden\";\n document.getElementById(self._addUID(\"GPisochronSubmit\")).value = \"Calculer l'isodistance\";\n self.onIsoTypeChoiceChange();\n });\n }\n // info: Internet explorer support\n input.value = \"isodistance\";\n div.appendChild(input);\n\n var label = document.createElement(\"label\");\n label.className = \"GPisochronChoiceAltImg gpf-label fr-label\";\n label.htmlFor = this._addUID(\"GPisochronChoiceAltDist\");\n label.innerHTML = \"Distance\";\n label.title = \"Distance\";\n\n div.appendChild(label);\n\n var span = document.createElement(\"span\");\n span.id = this._addUID(\"GPisochronChoiceAltDistTxt\");\n span.className = \"gpf-hidden\";\n span.innerHTML = \"Distance\";\n if (span.addEventListener) {\n span.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPisochronChoiceAltDist\")).click();\n }, false);\n } else if (span.attachEvent) {\n span.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPisochronChoiceAltDist\")).click();\n });\n }\n div.appendChild(span);\n\n return div;\n },\n\n // ################################################################### //\n // ############### Methods to the value iso into form ################ //\n // ################################################################### //\n\n /**\n * Create isochron inputs label\n * see event !\n * @param {Boolean} checked - checked\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormLabelIsochronElement : function (checked) {\n var context = this;\n var p = document.createElement(\"p\");\n p.id = this._addUID(\"GPisochronValueChronLabelP\");\n p.className = (checked) ? \"gpf-label fr-label\" : \"GPelementHidden gpf-hidden\";\n p.innerHTML = \"Définir un temps de trajet\";\n\n return p;\n },\n\n /**\n * Create isochron inputs values\n * see event !\n * @param {Boolean} checked - checked\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormValueIsochronElement : function (checked) {\n // contexte\n var context = this;\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPisochronValueChron\");\n div.className = (checked) ? \"GPflexInput gpf-flex fr-mt-1w\" : \"GPelementHidden gpf-hidden\";\n\n var input1 = document.createElement(\"input\");\n input1.id = this._addUID(\"GPisochronValueChronInput1\");\n input1.className = \"gpf-input fr-input\";\n input1.min = \"0\";\n input1.step = \"1\";\n input1.value = \"0\";\n input1.type = \"number\";\n input1.title = \"Temps\";\n if (input1.addEventListener) {\n input1.addEventListener(\"change\", function (e) {\n if (typeof context.onIsoValueChronTimeMinuteChange === \"function\") {\n context.onIsoValueChronTimeHourChange(e);\n }\n });\n } else if (input1.attachEvent) {\n input1.attachEvent(\"onchange\", function (e) {\n if (typeof context.onIsoValueChronTimeMinuteChange === \"function\") {\n context.onIsoValueChronTimeHourChange(e);\n }\n });\n }\n div.appendChild(input1);\n\n var label1 = document.createElement(\"label\");\n label1.innerHTML = \"h\";\n label1.className = \"gpf-label fr-label\";\n div.appendChild(label1);\n\n var input2 = document.createElement(\"input\");\n input2.id = this._addUID(\"GPisochronValueChronInput2\");\n input2.className = \"gpf-input fr-input\";\n input2.min = \"0\";\n input2.max = \"59\";\n input2.step = \"1\";\n input2.value = \"0\";\n input2.type = \"number\";\n input2.title = \"Heures\";\n if (input2.addEventListener) {\n input2.addEventListener(\"change\", function (e) {\n if (typeof context.onIsoValueChronTimeMinuteChange === \"function\") {\n context.onIsoValueChronTimeMinuteChange(e);\n }\n });\n } else if (input2.attachEvent) {\n input2.attachEvent(\"onchange\", function (e) {\n if (typeof context.onIsoValueChronTimeMinuteChange === \"function\") {\n context.onIsoValueChronTimeMinuteChange(e);\n }\n });\n }\n div.appendChild(input2);\n\n var label2 = document.createElement(\"label\");\n label2.innerHTML = \"min\";\n label2.className = \"gpf-label fr-label\";\n div.appendChild(label2);\n\n return div;\n },\n\n /**\n * Create isodistance inputs label\n * see event !\n * @param {Boolean} checked - checked\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormLabelIsodistanceElement : function (checked) {\n var context = this;\n var p = document.createElement(\"p\");\n p.id = this._addUID(\"GPisochronValueDistLabelP\");\n p.className = (checked) ? \"gpf-label fr-label\" : \"GPelementHidden gpf-hidden\";\n p.innerHTML = \"Définir une distance\";\n\n return p;\n },\n\n /**\n * Create isodistance inputs values\n * see event !\n * @param {Boolean} checked - checked\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormValueIsodistanceElement : function (checked) {\n // contexte\n var context = this;\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPisochronValueDist\");\n div.className = (checked) ? \"GPflexInput gpf-flex fr-mt-1w\" : \"GPelementHidden gpf-hidden\";\n\n var input1 = document.createElement(\"input\");\n input1.id = this._addUID(\"GPisochronValueDistInput\");\n input1.className = \"gpf-input fr-input fr-ml-1w\";\n input1.min = \"0\";\n input1.step = \"any\";\n input1.value = \"0\";\n input1.type = \"number\";\n input1.title = \"Distance\";\n if (input1.addEventListener) {\n input1.addEventListener(\"change\", function (e) {\n if (typeof context.onIsoValueDistChange === \"function\") {\n context.onIsoValueDistChange(e);\n }\n });\n } else if (input1.attachEvent) {\n input1.attachEvent(\"onchange\", function (e) {\n if (typeof context.onIsoValueDistChange === \"function\") {\n context.onIsoValueDistChange(e);\n }\n });\n }\n div.appendChild(input1);\n\n var label1 = document.createElement(\"label\");\n label1.innerHTML = \"km\";\n label1.className = \"gpf-label fr-label\";\n div.appendChild(label1);\n\n return div;\n },\n\n // ################################################################### //\n // ############ Methods to the mode choice into form ################# //\n // ################################################################### //\n\n /**\n * Create Mode choice transport\n * see event !\n * FIXME event not useful\n * @param {Array} transports - transports in a list\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormModeChoiceTransportElement : function (transports) {\n // contexte d'execution\n var context = this;\n\n var divContainer = document.createElement(\"div\");\n divContainer.id = this._addUID(\"GPisochronTransportChoice\");\n\n var label = document.createElement(\"label\");\n label.className = \"GPisochronModeLabel gpf-label fr-label\";\n label.innerHTML = \"Choisir un mode de déplacement\";\n divContainer.appendChild(label);\n\n var radioContainer = document.createElement(\"div\");\n\n /* jshint -W083 */\n for (var i = 0; i < transports.length; i++) {\n var transport = transports[i];\n\n var div = document.createElement(\"div\");\n div.className = \"GPisochronTransportChoice gpf-flex gpf-radio-group fr-radio-group\";\n\n if (transport === \"Voiture\") {\n var inputCar = document.createElement(\"input\");\n inputCar.id = this._addUID(\"GPisochronTransportCar\");\n inputCar.type = \"radio\";\n inputCar.name = \"GPisochronTransport\";\n if (i === 0) {\n inputCar.checked = true;\n }\n // gestionnaire d'evenement :\n // on stocke le mode de transport,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputCar.addEventListener) {\n inputCar.addEventListener(\"change\", function (e) {\n context.onIsoModeTransportChange(e);\n });\n } else if (inputCar.attachEvent) {\n inputCar.attachEvent(\"onchange\", function (e) {\n context.onIsoModeTransportChange(e);\n });\n }\n // info : internet explorer support\n inputCar.value = \"Voiture\";\n div.appendChild(inputCar);\n\n var labelCar = document.createElement(\"label\");\n labelCar.className = \"GPisochronTransportImg gpf-label fr-label\";\n labelCar.htmlFor = this._addUID(\"GPisochronTransportCar\");\n labelCar.title = \"Voiture\";\n labelCar.innerHTML = \"Voiture\";\n div.appendChild(labelCar);\n }\n\n if (transport === \"Pieton\") {\n var inputPedestrian = document.createElement(\"input\");\n inputPedestrian.id = this._addUID(\"GPisochronTransportPedestrian\");\n inputPedestrian.type = \"radio\";\n inputPedestrian.name = \"GPisochronTransport\";\n if (i === 0) {\n inputPedestrian.checked = true;\n }\n // gestionnaire d'evenement :\n // on stocke le mode de transport,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputPedestrian.addEventListener) {\n inputPedestrian.addEventListener(\"change\", function (e) {\n context.onIsoModeTransportChange(e);\n });\n } else if (inputPedestrian.attachEvent) {\n inputPedestrian.attachEvent(\"onchange\", function (e) {\n context.onIsoModeTransportChange(e);\n });\n }\n // info : internet explorer support\n inputPedestrian.value = \"Pieton\";\n div.appendChild(inputPedestrian);\n\n var labelPedestrian = document.createElement(\"label\");\n labelPedestrian.className = \"GPisochronTransportImg gpf-label fr-label\";\n labelPedestrian.htmlFor = this._addUID(\"GPisochronTransportPedestrian\");\n labelPedestrian.title = \"Piéton\";\n labelPedestrian.innerHTML = \"Piéton\";\n div.appendChild(labelPedestrian);\n }\n\n radioContainer.appendChild(div);\n }\n divContainer.appendChild(radioContainer);\n\n return divContainer;\n },\n\n /**\n * Create Mode choice direction\n * see event!\n *\n * @param {Array} directions - directions to display in list (\"Departure\", \"Arrival\"). First element will be selected by default\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormModeChoiceDirectionElement : function (directions) {\n // contexte d'execution\n var self = this;\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPisochronDirectionChoice\");\n div.className = \"fr-my-2w\";\n\n var label = document.createElement(\"label\");\n label.innerHTML = \"Définir un sens de parcours\";\n label.className = \"fr-label\";\n div.appendChild(label);\n\n var select = document.createElement(\"select\");\n select.id = this._addUID(\"GPisochronDirectionSelect\");\n select.className = \"GPselect gpf-select fr-select\";\n select.title = \"Sens de parcours\";\n // gestionnaire d'evenement :\n // on stocke la valeur du mode de calcul,\n // utilisation pour la requête sur le service de calcul d'iso\n select.addEventListener(\"change\", function (e) {\n self.onIsoModeDirectionChange(e);\n });\n\n for (var i = 0; i < directions.length; i++) {\n var direction = directions[i];\n if (direction.toLowerCase() === \"departure\") {\n var departureOption = document.createElement(\"option\");\n if (i === 0) {\n departureOption.selected = \"selected\";\n }\n departureOption.value = \"departure\";\n departureOption.text = \"Départ\";\n select.appendChild(departureOption);\n }\n if (direction.toLowerCase() === \"arrival\") {\n var arrivalOption = document.createElement(\"option\");\n if (i === 0) {\n arrivalOption.selected = \"selected\";\n }\n arrivalOption.value = \"arrival\";\n arrivalOption.text = \"Arrivée\";\n select.appendChild(arrivalOption);\n }\n }\n div.appendChild(select);\n\n return div;\n },\n\n // ################################################################### //\n // ################# Methods to the choice exclusions ################ //\n // ################################################################### //\n\n /**\n * Label to Exclusions Options\n *\n * @returns {DOMElement} DOM element\n */\n _createShowIsoExclusionsPictoElement : function () {\n var self = this;\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowIsoExclusionsPicto\");\n var hidden = \"\";\n if (checkDsfr()) {\n hidden = \"GPelementHidden gpf-hidden\";\n }\n button.className = `GPshowAdvancedToolPicto GPshowMoreOptionsImage GPshowMoreOptions GPshowIsoExclusionsPicto ${hidden} gpf-btn fr-btn--sm fr-btn--tertiary gpf-btn--tertiary fr-icon-arrow-down-fill`;\n button.title = \"Exclusions\";\n // button.style.top = \"240px\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", true);\n\n // Close all results and panels when minimizing the widget\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n e.preventDefault();\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowIsoSettingsClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n e.preventDefault();\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowIsoSettingsClick(e);\n });\n }\n\n return button;\n },\n\n /**\n * Create Container to Exclusions\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormExclusionsElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPisoExclusions\");\n\n var label = document.createElement(\"label\");\n label.className = \"GPisoExclusionsLabel gpf-label fr-label\";\n label.innerHTML = \"Passages autorisés\";\n div.appendChild(label);\n\n // div.appendChild(this._createIsoPanelFormExclusionOptionsElement());\n\n return div;\n },\n\n /**\n * Create Exclusions Options\n * see event !\n * FIXME event not useful\n * @param {Array} exclusions - exclusions to display in list\n * @returns {DOMElement} DOM element\n */\n _createIsoPanelFormExclusionOptionsElement : function (exclusions) {\n // contexte d'execution\n var context = this;\n\n var div = document.createElement(\"div\");\n div.className = \"GPisoExclusionsOptions gpf-flex fr-checkbox-group fr-m-1w\";\n\n /* jshint -W083 */\n for (var value in exclusions) {\n if (exclusions.hasOwnProperty(value)) {\n var status = exclusions[value];\n switch (value) {\n case \"toll\":\n var inputToll = document.createElement(\"input\");\n inputToll.id = this._addUID(\"GPisoExclusionsToll\");\n inputToll.type = \"checkbox\";\n inputToll.name = \"Péages\";\n inputToll.checked = !status;\n // gestionnaire d'evenement :\n // on stocke l'exclusion,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputToll.addEventListener) {\n inputToll.addEventListener(\"change\", function (e) {\n context.onIsoExclusionsChange(e);\n });\n } else if (inputToll.attachEvent) {\n inputToll.attachEvent(\"onchange\", function (e) {\n context.onIsoExclusionsChange(e);\n });\n }\n // info : internet explorer support\n inputToll.value = \"Toll\";\n div.appendChild(inputToll);\n\n var labelToll = document.createElement(\"label\");\n labelToll.className = \"GPisoExclusionsOption\";\n labelToll.htmlFor = this._addUID(\"GPisoExclusionsToll\");\n labelToll.innerHTML = \"Péages\";\n div.appendChild(labelToll);\n break;\n\n case \"tunnel\":\n var inputTunnel = document.createElement(\"input\");\n inputTunnel.id = this._addUID(\"GPisoExclusionsTunnel\");\n inputTunnel.type = \"checkbox\";\n inputTunnel.name = \"Tunnel\";\n inputTunnel.checked = !status;\n // gestionnaire d'evenement :\n // on stocke l'exclusion,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputTunnel.addEventListener) {\n inputTunnel.addEventListener(\"change\", function (e) {\n context.onIsoExclusionsChange(e);\n });\n } else if (inputTunnel.attachEvent) {\n inputTunnel.attachEvent(\"onchange\", function (e) {\n context.onIsoExclusionsChange(e);\n });\n }\n // info : internet explorer support\n inputTunnel.value = \"Tunnel\";\n div.appendChild(inputTunnel);\n\n var labelTunnel = document.createElement(\"label\");\n labelTunnel.className = \"GPisoExclusionsOption\";\n labelTunnel.htmlFor = this._addUID(\"GPisoExclusionsTunnel\");\n labelTunnel.innerHTML = \"Tunnels\";\n div.appendChild(labelTunnel);\n break;\n\n case \"bridge\":\n var inputBridge = document.createElement(\"input\");\n inputBridge.id = this._addUID(\"GPisoExclusionsBridge\");\n inputBridge.type = \"checkbox\";\n inputBridge.name = \"Ponts\";\n inputBridge.checked = !status;\n // gestionnaire d'evenement :\n // on stocke l'exclusion,\n // utilisation pour la requête sur le service de calcul d'itiniraire\n if (inputBridge.addEventListener) {\n inputBridge.addEventListener(\"change\", function (e) {\n context.onIsoExclusionsChange(e);\n });\n } else if (inputBridge.attachEvent) {\n inputBridge.attachEvent(\"onchange\", function (e) {\n context.onIsoExclusionsChange(e);\n });\n }\n // info : internet explorer support\n inputBridge.value = \"Bridge\";\n div.appendChild(inputBridge);\n\n var labelBridge = document.createElement(\"label\");\n labelBridge.className = \"GPisoExclusionsOption\";\n labelBridge.htmlFor = this._addUID(\"GPisoExclusionsBridge\");\n labelBridge.innerHTML = \"Ponts\";\n div.appendChild(labelBridge);\n break;\n }\n }\n }\n\n return div;\n },\n\n // ################################################################### //\n // ############################### Submit Form ####################### //\n // ################################################################### //\n\n\n /**\n * Create Submit Form Element\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoSubmitFormElement : function () {\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPisochronSubmit\");\n input.className = \"GPsubmit gpf-btn fr-btn\";\n input.type = \"submit\";\n input.value = \"Calculer l'isochrone\";\n\n return input;\n },\n\n // ################################################################### //\n // ############################### Reset picto ####################### //\n // ################################################################### //\n\n /**\n * Create Reset Picto Element\n *\n * @returns {DOMElement} DOM element\n */\n _createIsoFormResetElement : function () {\n var self = this;\n\n var buttonReset = document.createElement(\"button\");\n buttonReset.id = this._addUID(\"GPisochronReset\");\n buttonReset.className = \"GPresetPicto GPisochronReset gpf-btn gpf-btn-icon-reset gpf-btn-icon-isocurve-reset fr-btn fr-btn--secondary gpf-btn--secondary\";\n buttonReset.title = \"Réinitialiser les paramètres\";\n buttonReset.setAttribute(\"tabindex\", \"0\");\n buttonReset.setAttribute(\"aria-pressed\", false);\n\n buttonReset.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onIsoResetClick(e);\n });\n\n return buttonReset;\n }\n};\n\nexport default IsoDOM;\n","// import CSS\nimport \"../../CSS/Controls/Isochron/GPFisochron.css\";\n// import \"../../CSS/Controls/Isochron/GPFisochronStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport VectorSource from \"ol/source/Vector\";\n// import GeoJSON from \"ol/format/GeoJSON\";\nimport {\n Fill,\n Stroke,\n Style\n} from \"ol/style\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Utils from \"../../Utils/Helper\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Markers from \"../Utils/Markers\";\nimport Draggable from \"../../Utils/Draggable\";\nimport Interactions from \"../Utils/Interactions\";\n// import local with ol dependencies\nimport LayerSwitcher from \"../LayerSwitcher/LayerSwitcher\";\nimport LocationSelector from \"../LocationSelector/LocationSelector\";\nimport ButtonExport from \"../Export/Export\";\nimport GeoJSONExtended from \"../../Formats/GeoJSON\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\n// DOM\nimport IsocurveDOM from \"./IsocurveDOM\";\n\nvar logger = Logger.getLogger(\"isocurve\");\n\n/**\n * @classdesc\n *\n * Isocurve Control.\n *\n * @constructor\n * @alias ol.control.Isocurve\n * @type {ol.control.Isocurve}\n * @extends {ol.control.Control}\n * @param {Object} options - Isocurve control options\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {String} [options.apiKey] - API key for services call (isocurve and autocomplete services). The key \"calcul\" is used by default.\n * @param {Boolean} [options.ssl = true] - use of ssl or not (default true, service requested using https protocol)\n * @param {Boolean} [options.collapsed = true] - Specify if widget has to be collapsed (true) or not (false) on map loading. Default is true.\n * @param {Boolean} [options.draggable = false] - Specify if widget is draggable\n * @param {Boolean|Object} [options.export = false] - Specify if button \"Export\" is displayed. For the use of the options of the \"Export\" control, see {@link ol.control.Export}\n * @param {Object} [options.exclusions = {\"toll\" : false, \"tunnel\" : false, \"bridge\" : false}] - list of exclusions with status (true = checked). By default : no exclusions checked.\n * @param {Array} [options.graphs = [\"Voiture\", \"Pieton\"]] - list of graph resources to be used for isocurve calculation, by default : [\"Voiture\", \"Pieton\"]. Possible values are \"Voiture\" and \"Pieton\". The first element is selected.\n * @param {Array} [options.methods = [\"time\", \"distance\"]] - list of methods, by default : [\"time\", \"distance\"]. Possible values are \"time\" and \"distance\". The first element is selected by default.\n * @param {Array} [options.directions = [\"departure\", \"arrival\"]] - list of directions to be displayed, by default : [\"departure\", \"arrival\"]. The first element is selected by default. Possible values are \"departure\" and \"arrival\".\n * Directions enable to specify if input location point will be used as a departure point (\"departure\") or as an arrival point (\"arrival\")\n * @param {Object} [options.isocurveOptions = {}] - isocurve service options. see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~isoCurve Gp.Services.isoCurve()} to know all isocurve options.\n * @param {Object} [options.autocompleteOptions = {}] - autocomplete service options. see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~autoComplete Gp.Services.autoComplete()} to know all autocomplete options\n * @param {Object} [options.markerOpts] - options to use your own marker. Default is a lightOrange marker.\n * @param {String} [options.markerOpts.url] - marker base64 encoded url (ex \"data:image/png;base64,...\"\"). Mandatory for a custom marker\n * @param {Array} [options.markerOpts.offset] - Offsets in pixels used when positioning the overlay. The first element in the array is the horizontal offset. A positive value shifts the overlay right. The second element in the array is the vertical offset. A positive value shifts the overlay down. Default is [0, 0]. (see http://openlayers.org/en/latest/apidoc/ol.Overlay.html)\n * @param {Object} [options.layerDescription = {}] - Layer informations to be displayed in LayerSwitcher widget (only if a LayerSwitcher is also added to the map)\n * @param {String} [options.layerDescription.title = \"Isochrone/Isodistance\"] - Layer title to be displayed in LayerSwitcher\n * @param {String} [options.layerDescription.description = \"isochrone/isodistance basé sur un graphe\"] - Layer description to be displayed in LayerSwitcher\n * @fires isocurve:drawstart\n * @fires isocurve:drawend\n * @fires isocurve:compute\n * @fires export:compute\n * @example\n * var iso = ol.control.Isocurve({\n * \"collapsed\" : false,\n * \"draggable\" : true,\n * \"export\" : false,\n * \"methods\" : [\"time\", \"distance\"],\n * \"exclusions\" : {\n * \"toll\" : true,\n * \"bridge\" : false,\n * \"tunnel\" : true\n * },\n * \"graphs\" : [\"Pieton\", \"Voiture\"],\n * \"markerOpts\" : {\n * \"url\" : \"...\",\n * \"offset\" : [0,0]\n * }\n * \"isocurveOptions\" : {},\n * \"autocompleteOptions\" : {}\n * });\n *\n * // if you want to pluggued the control Export with options :\n * var iso = new ol.control.Isocurve({\n * export : {\n * name : \"export\",\n * format : \"geojson\",\n * title : \"Exporter\",\n * menu : false\n * }\n * });\n */\nvar Isocurve = class Isocurve extends Control {\n\n /**\n * See {@link ol.control.Isocurve}\n * @module Isocurve\n * @alias module:~controls/Isocurve\n * @param {*} options - options\n * @example\n * import Isocurve from from \"gpf-ext-ol/controls/Isocurve\"\n * ou\n * import { Isocurve } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof Isocurve)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"Isocurve\";\n // initialisation du composant\n this.initialize(options);\n\n // // Widget main DOM container\n this._container = this._createMainContainerElement();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n }\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n // enrichissement du DOM du container lors de l'ajout à la carte\n this._container = this._initContainer(map);\n\n // ajout d'un bouton d'export\n if (this.options.export) {\n var opts = Utils.assign({ control : this }, this.options.export);\n this.export = new ButtonExport(opts);\n this.export.render();\n var self = this;\n this.export.on(\"export:compute\", (e) => {\n self.dispatchEvent({\n type : \"export:compute\",\n content : e.content\n });\n });\n }\n\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this._IsoPanelContainer,\n this._IsoPanelHeaderContainer,\n map.getTargetElement()\n );\n }\n\n // mode \"collapsed\"\n if (!this.collapsed) {\n this._pictoIsoButton.setAttribute(\"aria-pressed\", true);\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Returns true if widget is collapsed (minimized), false otherwise\n *\n * @returns {Boolean} collapsed - true if widget is collapsed\n */\n getCollapsed () {\n return this.collapsed;\n }\n\n /**\n * Collapse or display widget main container\n *\n * @param {Boolean} collapsed - True to collapse widget, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.log(\"[ERROR] Isocurve:setCollapsed - missing collapsed parameter\");\n return;\n }\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n if (collapsed) {\n document.getElementById(\"GPisochronPanelClose-\" + this._uid).click();\n } else {\n this._pictoIsoButton.click();\n }\n this.collapsed = collapsed;\n }\n\n /**\n * Get vector layer where Isocurve geometry is drawn\n *\n * @returns {Object} layer - ol.layer.Vector isocurve layer\n */\n getLayer () {\n return this._geojsonLayer;\n }\n\n /**\n * Set vector layer where Isocurve geometry is drawn\n *\n * @param {Object} layer - ol.layer.Vector isocurve layer\n */\n setLayer (layer) {\n if (!layer) {\n this._geojsonLayer = null;\n return;\n }\n\n if (!(layer instanceof VectorLayer)) {\n logger.log(\"no valid layer given for hosting drawn features.\");\n return;\n }\n\n // application des styles\n layer.setStyle(this._defaultFeatureStyle);\n\n // sauvegarde\n this._geojsonLayer = layer;\n }\n\n /**\n * Get vector layer\n *\n * @returns {String} geojson - GeoJSON format layer\n */\n getGeoJSON () {\n return JSON.stringify(this._geojsonObject);\n }\n\n /**\n * Set vector layer\n *\n * @param {String} geojson - GeoJSON format layer\n */\n setGeoJSON (geojson) {\n try {\n this._geojsonObject = JSON.parse(geojson);\n } catch (e) {\n logger.log(\"no valid geojson given :\" + e.message);\n }\n }\n\n /**\n * Get isocurve data\n *\n * @returns {Object} data - process results\n */\n getData () {\n var data = {\n type : \"isocurve\",\n transport : this._currentTransport,\n computation : this._currentComputation,\n exclusions : this._currentExclusions,\n direction : this._currentDirection,\n point : this._originPoint.getCoordinate(), // lon/lat wgs84\n results : {}\n };\n Utils.assign(data.results, this._currentIsoResults);\n return data;\n }\n\n /**\n * Set isocurve data\n *\n * @param {Object} data - control informations\n * @param {String} data.transport - transport type\n * @param {String} data.computation - computation type\n * @param {Array} data.exclusions - list of exclusions\n * @param {String} data.direction - direction type\n * @param {Array} data.point - [lon, lat]\n * @param {Object} data.results - service response\n */\n setData (data) {\n this._currentTransport = data.transport;\n this._currentComputation = data.computation;\n this._currentExclusions = data.exclusions;\n this._currentDirection = data.direction;\n // INFO\n // > this._originPoint.clear();\n // l'utilisation de cette méthode declenche des evenements qui retirent la couche en cours !\n // (cf. _createIsoPanelFormPointElement),\n var inputPointer = document.getElementById(\"GPlocationOriginPointer_\" + 1 + \"-\" + this._uid);\n inputPointer.checked = true;\n var inputCoords = document.getElementById(\"GPlocationOriginCoords_\" + 1 + \"-\" + this._uid);\n inputCoords.value = \"\";\n this._originPoint.setCoordinate(data.point, \"EPSG:4326\");\n this._currentIsoResults = data.results;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this._container;\n }\n\n /**\n * Get default style\n *\n * @returns {ol.style} style\n */\n getStyle () {\n return this._defaultFeatureStyle;\n }\n\n /**\n * This method is public.\n * It allows to control the execution of a traitment.\n *\n * @param {Array} position - position in the projection map [ x, y ]\n * @param {Object} value - distance in km or hours-minutes\n * @param {Object} options - options = {...}\n */\n compute (position, value, options) {\n this._clear();\n\n var opened = this._pictoIsoButton.ariaPressed;\n if (!(opened === \"true\")) {\n this._pictoIsoButton.click();\n }\n\n var map = this.getMap();\n if (!map) {\n return;\n }\n\n // Les options par defauts\n var settings = {\n direction : \"departure\",\n method : \"time\",\n transport : \"Voiture\",\n exclusions : []\n };\n\n // On recupere les options\n Utils.assign(settings, options);\n\n this._originPoint.setCoordinate(position);\n var coordinate = this._originPoint.getCoordinate();\n\n var input = document.getElementById(\"GPlocationOrigin_\" + 1 + \"-\" + this._uid);\n input.value = coordinate[0].toFixed(4) + \" / \" + coordinate[1].toFixed(4);\n\n this._currentTransport = settings.transport;\n if (settings.transport === \"Voiture\") {\n document.getElementById(\"GPisochronTransportCar-\" + this._uid).checked = true;\n } else {\n document.getElementById(\"GPisochronTransportPedestrian-\" + this._uid).checked = true;\n }\n\n this._currentExclusions = settings.exclusions;\n\n this._currentComputation = settings.method;\n if (settings.method === \"time\") {\n var time = value.split(\".\");\n this._currentTimeHour = time[0] || 0;\n document.getElementById(\"GPisochronValueChronInput1-\" + this._uid).value = this._currentTimeHour;\n this._currentTimeMinute = time[1] || 0;\n document.getElementById(\"GPisochronValueChronInput2-\" + this._uid).value = this._currentTimeMinute;\n document.getElementById(\"GPisochronChoiceAltChron-\" + this._uid).click();\n } else {\n this._currentDistance = value;\n document.getElementById(\"GPisochronValueDistInput-\" + this._uid).value = this._currentDistance;\n document.getElementById(\"GPisochronChoiceAltDist-\" + this._uid).click();\n }\n\n this._currentDirection = settings.direction;\n (settings.direction === \"departure\")\n ? document.getElementById(\"GPisochronDirectionSelect-\" + this._uid).selectedIndex = 0 : document.getElementById(\"GPisochronDirectionSelect-\" + this._uid).selectedIndex = 1;\n\n this.onIsoComputationSubmit();\n }\n\n /**\n * This method is public.\n * It allows to init the control.\n */\n init () {\n // point\n var coordinate = this._originPoint.getCoordinate();\n\n var input = document.getElementById(\"GPlocationOrigin_\" + 1 + \"-\" + this._uid);\n input.value = coordinate[1].toFixed(4) + \" / \" + coordinate[0].toFixed(4);\n\n // transport\n if (this._currentTransport === \"Voiture\") {\n document.getElementById(\"GPisochronTransportCar-\" + this._uid).checked = true;\n } else {\n document.getElementById(\"GPisochronTransportPedestrian-\" + this._uid).checked = true;\n }\n\n // method\n if (this._currentComputation === \"time\") {\n var minutes = this._currentIsoResults.time / 60;\n this._currentTimeHour = Math.floor(minutes / 60);\n document.getElementById(\"GPisochronValueChronInput1-\" + this._uid).value = this._currentTimeHour;\n this._currentTimeMinute = Math.round(((minutes / 60) - this._currentTimeHour) * 60);\n document.getElementById(\"GPisochronValueChronInput2-\" + this._uid).value = this._currentTimeMinute;\n document.getElementById(\"GPisochronChoiceAltChron-\" + this._uid).click();\n } else {\n this._currentDistance = this._currentIsoResults.distance / 1000;\n document.getElementById(\"GPisochronValueDistInput-\" + this._uid).value = this._currentDistance;\n document.getElementById(\"GPisochronChoiceAltDist-\" + this._uid).click();\n }\n\n // direction\n (this._currentDirection === \"departure\")\n ? document.getElementById(\"GPisochronDirectionSelect-\" + this._uid).selectedIndex = 0 : document.getElementById(\"GPisochronDirectionSelect-\" + this._uid).selectedIndex = 1;\n }\n\n /**\n * Clean UI : reinit control\n */\n clean () {\n this._clearIsoInputs();\n // INFO\n // le comportement est surchargé, ceci supprime la couche !?\n // cf. _createIsoPanelFormPointElement()\n this._originPoint.clearResults();\n document.getElementById(\"GPlocationPoint_1-\" + this._uid).style.cssText = \"\";\n document.getElementById(\"GPlocationOriginCoords_1-\" + this._uid).value = \"\";\n document.getElementById(\"GPlocationOrigin_1-\" + this._uid).value = \"\";\n document.getElementById(\"GPlocationPoint_1-\" + this._uid).style.cssText = \"\";\n document.getElementById(\"GPlocationOriginPointer_1-\" + this._uid).checked = false;\n document.getElementById(\"GPlocationOrigin_1-\" + this._uid).className = \"GPlocationOriginVisible gpf-visible\";\n document.getElementById(\"GPlocationOriginCoords_1-\" + this._uid).className = \"GPlocationOriginHidden gpf-hidden\";\n this._currentIsoResults = null;\n this.setLayer();\n }\n\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize Isocurve control (called by Isocurve constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n this._checkInputOptions(options);\n\n // set default options\n this.options = {\n collapsed : true,\n draggable : false,\n export : false,\n methods : [\"time\", \"distance\"],\n graphs : [\"Pieton\", \"Voiture\"],\n exclusions : {\n toll : false,\n tunnel : false,\n bridge : false\n },\n directions : [\"departure\", \"arrival\"],\n markerOpts : {\n url : Markers[\"lightOrange\"],\n offset : Markers.defaultOffset\n },\n isocurveOptions : {},\n autocompleteOptions : {},\n layerDescription : {\n title : \"Isochrone/Isodistance\",\n description : \"isochrone/isodistance basé sur un graphe\"\n }\n };\n\n // merge with user options\n Utils.assign(this.options, options);\n\n /** {Boolean} specify if isocurve control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n /** {Boolean} specify if isocurve control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n // identifiant du contrôle : utile pour suffixer les identifiants CSS (pour gérer le cas où il y en a plusieurs dans la même page)\n this._uid = this.options.id || SelectorID.generate();\n\n // Options du service paramétrables via l'interface (graph, method, exclusions)\n // Mode de transport selectionné : 'Voiture' ou 'Pieton'\n this._currentTransport = null;\n this._initTransport();\n // Mode de calcul selectionné : 'time' (isochron) ou 'distance' (isodistance)\n this._currentComputation = null;\n this._initComputation();\n // Exclusions selectionnées : Tunnel, Toll et Bridge\n this._currentExclusions = [];\n this._initExclusions();\n // sens de parcours : \"departure\" ou \"arrival\"\n this._currentDirection = null;\n this._initDirection();\n\n // point de saisie\n this._originPoint = null;\n\n // containers principaux\n this._pictoIsoButton = null;\n this._waitingContainer = null;\n this._formContainer = null;\n this._IsoPanelContainer = null;\n this._IsoPanelHeaderContainer = null;\n\n // les résultats du calcul\n this._currentIsoResults = null;\n\n // la géométrie\n this._geojsonLayer = null;\n this._geojsonObject = null;\n\n // bouton export\n this.export = null;\n\n // si un calcul est en cours ou non\n this._waiting = false;\n // timer pour cacher la patience après un certain temps\n this._timer = null;\n\n // styles pour les sélections des features\n this._defaultFeatureStyle = new Style({\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.7)\"\n }),\n stroke : new Stroke({\n color : \"rgba(0, 183, 152, 0)\",\n width : 1\n })\n });\n\n // liste des ressources avec droits par service\n // Ex. {\n // \"Isocurve\" : {\n // key : \"ger4g456re45er456t4er5ge5\",\n // resources : [\"Pieton\", \"Voiture\"]\n // }\n // }\n this._resources = {};\n\n // listener key for event click on map\n this.listenerKey = null;\n }\n\n /**\n * this method is called by this.initialize()\n *\n * @param {Object} options - options\n *\n * @private\n */\n _checkInputOptions (options) {\n // vérification des options\n // on ne permet pas de n'afficher aucun mode de calcul ou aucun mode de transport ?\n var i;\n\n // modes de calcul\n if (options.methods) {\n if (Array.isArray(options.methods)) {\n // on ne permet pas de passer un tableau vide : on spécifie au moins une méthode\n if (options.methods.length === 0) {\n options.methods = null;\n } else {\n for (i = 0; i < options.methods.length; i++) {\n if (typeof options.methods[i] !== \"string\") {\n logger.log(\"[ol.control.Isocurve] ERROR : parameter 'methods' elements should be of type 'string'\");\n }\n }\n }\n } else {\n logger.warn(\"'methods' parameter should be an array\");\n options.methods = null;\n }\n }\n\n // mode de transport\n if (options.graphs) {\n if (Array.isArray(options.graphs)) {\n // on ne permet pas de passer un tableau vide : on spécifie au moins un graph\n if (options.graphs.length === 0) {\n options.graphs = null;\n } else {\n for (i = 0; i < options.graphs.length; i++) {\n if (typeof options.graphs[i] !== \"string\") {\n logger.log(\"[ol.control.Isocurve] ERROR : parameter 'graphs' elements should be of type 'string'\");\n } else {\n if (options.graphs[i].toLowerCase() === \"pieton\") {\n options.graphs[i] = \"Pieton\";\n }\n if (options.graphs[i].toLowerCase() === \"voiture\") {\n options.graphs[i] = \"Voiture\";\n }\n }\n }\n }\n } else {\n logger.warn(\"'graphs' parameter should be an array\");\n options.graphs = null;\n }\n }\n\n // sens du parcours\n if (options.directions) {\n if (Array.isArray(options.directions)) {\n // on ne permet pas de passer un tableau vide : on spécifie au moins une direction\n if (options.directions.length === 0) {\n options.directions = null;\n } else {\n for (i = 0; i < options.directions.length; i++) {\n if (typeof options.directions[i] !== \"string\") {\n logger.log(\"[ol.control.Isocurve] ERROR : parameter 'directions' elements should be of type 'string'\");\n }\n }\n }\n } else {\n logger.warn(\"'directions' parameter should be an array\");\n options.directions = null;\n }\n }\n\n // collapsed\n if (options.collapsed === \"true\") {\n options.collapsed = true;\n }\n if (options.collapsed === \"false\") {\n options.collapsed = false;\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize transport mode\n * (\"Voiture\" ou \"Pieton\")\n *\n * @private\n */\n _initTransport () {\n // Mode de transport selectionné\n this._currentTransport = \"Piéton\"; // par defaut\n\n // par defaut\n var transports = this.options.graphs;\n if (!transports || transports.length === 0) {\n this.options.graphs = [\"Pieton\", \"Voiture\"];\n }\n\n // option\n if (Array.isArray(transports) && transports.length) {\n // FIXME pb si le 1er graphe n'est pas une ressource connue !\n if (transports[0] === \"Voiture\" || transports[0] === \"Pieton\") {\n this._currentTransport = transports[0];\n }\n }\n\n // si l'utilisateur a spécifié un graph dans le service, on surcharge les options du widget\n var serviceOptions = this.options.isocurveOptions;\n if (serviceOptions.graph) {\n this._currentTransport = serviceOptions.graph;\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize computation mode\n * (time or distance)\n *\n * @private\n */\n _initComputation () {\n // Mode de calcul selectionné\n this._currentComputation = \"time\"; // par defaut\n\n // par defaut\n var methods = this.options.methods;\n if (!methods || methods.length === 0) {\n this.options.methods = [\"time\", \"distance\"];\n }\n\n // option\n if (Array.isArray(methods) && methods.length) {\n // FIXME pb si le 1er graphe n'est pas une ressource connue !\n if (methods[0] === \"time\" || methods[0] === \"distance\") {\n this._currentComputation = methods[0];\n }\n }\n\n // si l'utilisateur a spécifié une méthode dans le service, on surcharge les options du widget\n var serviceOptions = this.options.isocurveOptions;\n if (serviceOptions.method) {\n this._currentComputation = serviceOptions.method;\n }\n if (serviceOptions.time) {\n this._currentComputation = \"time\";\n }\n if (serviceOptions.distance) {\n this._currentComputation = \"distance\";\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize direction mode\n * (departure or arrival)\n *\n * @private\n */\n _initDirection () {\n // Mode de calcul selectionné\n this._currentDirection = \"departure\"; // par defaut\n\n // par defaut\n var directions = this.options.directions;\n if (!directions || directions.length === 0) {\n this.options.directions = [\"departure\", \"arrival\"];\n }\n\n // option\n if (Array.isArray(directions) && directions.length) {\n // FIXME pb si le 1er graphe n'est pas une ressource connue !\n if (directions[0] === \"departure\" || directions[0] === \"arrival\") {\n this._currentDirection = directions[0];\n }\n }\n\n // si l'utilisateur a spécifié une méthode dans le service, on surcharge les options du widget\n var serviceOptions = this.options.isocurveOptions;\n if (!serviceOptions.reverse) {\n this._currentDirection = \"departure\";\n }\n if (serviceOptions.reverse === true) {\n this._currentDirection = \"arrival\";\n this.options.directions = [\"arrival\", \"departure\"];\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize exclusions\n *\n * @private\n */\n _initExclusions () {\n // Exclusions selectionnées : Tunnel, Toll et Bridge\n this._currentExclusions = []; // par defaut\n\n // par defaut\n var exclusion = this.options.exclusions;\n if (!exclusion || (typeof exclusion === \"object\" && Object.keys(exclusion).length === 0)) {\n this.options.exclusions = {\n toll : false,\n tunnel : false,\n bridge : false\n };\n }\n\n // option\n if (exclusion && typeof exclusion === \"object\" && Object.keys(exclusion).length) {\n for (var k in exclusion) {\n if (exclusion.hasOwnProperty(k)) {\n if (exclusion.k) {\n this._currentExclusions.push(k);\n }\n }\n }\n }\n\n // si l'utilisateur a spécifié des exclusions dans le service, on surcharge les options du widget\n var serviceOptions = this.options.isocurveOptions;\n if (Array.isArray(serviceOptions.exclusions)) {\n this._currentExclusions = serviceOptions.exclusions;\n }\n }\n\n // ################################################################### //\n // ######################## DOM initialize ########################### //\n // ################################################################### //\n\n /**\n * initialize component container (DOM)\n *\n * @param {Object} map - the map\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initContainer (map) {\n // get main container\n var container = this._container;\n if (container.childElementCount > 0) {\n return container;\n }\n\n var picto = this._pictoIsoButton = this._createShowIsoPictoElement();\n container.appendChild(picto);\n\n // panneau\n var panel = this._IsoPanelContainer = this._createIsoPanelElement();\n var panelDiv = this._createIsoPanelDivElement();\n panel.appendChild(panelDiv);\n\n // header\n var header = this._IsoPanelHeaderContainer = this._createIsoPanelHeaderElement();\n panelDiv.appendChild(header);\n\n // form\n var form = this._formContainer = this._createIsoPanelFormElement();\n\n form.appendChild(this._createIsoPanelFormModeChoiceTransportElement(this.options.graphs));\n\n // form: input de saisie de la localisation (fonction de Isocurve, voir ci-dessous)\n form.appendChild(this._createIsoPanelFormPointLabel());\n var point = this._createIsoPanelFormPointElement(map);\n form.appendChild(point);\n\n var isoChronChecked = false;\n var isoDistChecked = false;\n var typeChoice = this._createIsoPanelFormTypeChoiceElement();\n for (var i = 0; i < this.options.methods.length; i++) {\n if (this.options.methods[i] === \"time\") {\n isoChronChecked = (i === 0);\n typeChoice.appendChild(this._createIsoPanelFormTypeChoiceChronElement(isoChronChecked));\n }\n if (this.options.methods[i] === \"distance\") {\n isoDistChecked = (i === 0);\n typeChoice.appendChild(this._createIsoPanelFormTypeChoiceDistElement(isoDistChecked));\n }\n }\n form.appendChild(typeChoice);\n\n // form: menu du choix des valeurs\n form.appendChild(this._createIsoPanelFormLabelIsochronElement(isoChronChecked));\n form.appendChild(this._createIsoPanelFormValueIsochronElement(isoChronChecked));\n form.appendChild(this._createIsoPanelFormLabelIsodistanceElement(isoDistChecked));\n form.appendChild(this._createIsoPanelFormValueIsodistanceElement(isoDistChecked));\n\n // FIXME : doit on passer le paramètre defaultDirection ?\n form.appendChild(this._createIsoPanelFormModeChoiceDirectionElement(this.options.directions));\n\n // form: menu des exclusions\n if (this.options.exclusions && (typeof this.options.exclusions === \"object\") && (Object.keys(this.options.exclusions).length !== 0)) {\n form.appendChild(this._createShowIsoExclusionsPictoElement());\n var exclusion = this._createIsoPanelFormExclusionsElement();\n exclusion.appendChild(this._createIsoPanelFormExclusionOptionsElement(this.options.exclusions));\n form.appendChild(exclusion);\n }\n\n // footer\n var footer = this._createIsoPanelFooterElement();\n form.appendChild(footer);\n\n if (!checkDsfr()) {\n var buttonReset = this._createIsoFormResetElement();\n footer.appendChild(buttonReset);\n }\n\n\n // form: bouton du calcul\n var buttonSubmit = this._submitContainer = this._createIsoSubmitFormElement();\n footer.appendChild(buttonSubmit);\n\n panelDiv.appendChild(form);\n\n // waiting\n var waiting = this._waitingContainer = this._createIsoWaitingElement();\n panel.appendChild(waiting);\n\n container.appendChild(panel);\n\n // hide autocomplete suggested locations on container click\n if (container.addEventListener) {\n container.addEventListener(\"click\", (e) => this._hideIsoSuggestedLocations(e));\n }\n\n return container;\n }\n\n /**\n * Create start point\n *\n * @param {Object} map - the map\n *\n * @returns {Object} DOM element\n * @private\n */\n _createIsoPanelFormPointElement (map) {\n this._originPoint = new LocationSelector({\n apiKey : this.options.apiKey || null,\n tag : {\n id : 1,\n groupId : this._uid,\n markerOpts : this.options.markerOpts,\n display : true\n },\n autocompleteOptions : this.options.autocompleteOptions || null\n });\n this._originPoint.setMap(map);\n // a la sélection d'un nouveau point, on réinitialise aussi le tracé\n var self = this;\n // click sur le pointer\n document.getElementById(\"GPlocationOriginPointerImg_1-\" + this._uid).onclick = function () {\n self._clearGeojsonLayer();\n var map = self.getMap();\n if (self._originPoint._inputShowPointerContainer.checked) {\n // au click sur l'input pour pointer sur la carte: on minimise le formulaire\n self._formContainer.className = \"GPisochronFormMini gpf-panel__content fr-modal__content\";\n // et au clic sur la carte, on réaffichera le formulaire \"normal\"\n this.listenerKey = map.on(\n \"click\",\n () => {\n self._formContainer.className = \"gpf-panel__content fr-modal__content\";\n self.dispatchEvent(\"isocurve:drawend\");\n }\n );\n } else {\n // si on déselectionne le pointer, on rétablit le formulaire en mode normal\n self._formContainer.className = \"gpf-panel__content fr-modal__content\";\n // et on enlève l'écouteur d'évènement sur la carte\n // map.un(\"click\", () => { self._formContainer.className = \"\"; });\n olObservableUnByKey(this.listenerKey);\n }\n /**\n * event triggered at the start of drawing input\n *\n * @event isocurve:drawstart\n */\n self.dispatchEvent(\"isocurve:drawstart\");\n };\n // click sur le label\n document.getElementById(\"GPlocationOriginLabel_1-\" + this._uid).onclick = function () {\n self._clearGeojsonLayer();\n self._formContainer.className = \"gpf-panel__content fr-modal__content\";\n // on désactive l'écouteur d'événements sur la carte (pour ne pas placer un marker au clic)\n map.un(\n \"click\",\n () => {\n self._formContainer.className = \"gpf-panel__content fr-modal__content\";\n }\n );\n self.dispatchEvent(\"isocurve:drawend\");\n };\n // click sur la zone de saisie\n document.getElementById(\"GPlocationOrigin_1-\" + this._uid).onclick = function () {\n self._clearGeojsonLayer();\n /**\n * event triggered at the end of drawing input\n *\n * @event isocurve:drawend\n */\n self.dispatchEvent(\"isocurve:drawend\");\n };\n return this._originPoint._container;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'submit' on 'GPisochronForm' tag form\n * (cf. this._createIsoPanelFormElement),\n * and call isocurve service to display results\n *\n * @private\n */\n onIsoComputationSubmit () {\n // si on n'a pas de valeur récupérée pour notre point origine, on ne fait rien\n if (!this._originPoint || !this._originPoint.getCoordinate || !this._originPoint.getCoordinate()) {\n logger.log(\"[Isocurve] Missing position parameter to submit isocurve request\");\n return;\n }\n\n // récupération de l'origine\n var positionCoordinates = this._originPoint.getCoordinate();\n var position = {\n x : positionCoordinates[0],\n y : positionCoordinates[1]\n };\n logger.log(\"origin : \", position);\n\n // récupération du temps ou de la distance\n var time;\n var distance;\n if (this._currentComputation.toLowerCase() === \"time\") {\n var timeHourInput = document.getElementById(\"GPisochronValueChronInput1-\" + this._uid);\n var hours = parseInt(timeHourInput.value, 10);\n if (isNaN && isNaN(hours)) {\n hours = 0;\n }\n var timeMinutesInput = document.getElementById(\"GPisochronValueChronInput2-\" + this._uid);\n var minutes = parseInt(timeMinutesInput.value, 10);\n if (isNaN && isNaN(minutes)) {\n minutes = 0;\n }\n // durée exprimée en secondes\n time = hours * 3600 + minutes * 60;\n logger.log(\"time : \" + time);\n }\n if (this._currentComputation.toLowerCase() === \"distance\") {\n var distInput = document.getElementById(\"GPisochronValueDistInput-\" + this._uid);\n // distance exprimée en mètres\n distance = parseFloat(distInput.value) * 1000;\n logger.log(\"distance : \" + distance);\n }\n\n // si on n'a pas de valeur de calcul renseignée, on ne lance pas la requête.\n if (!time && !distance) {\n logger.log(\"[Isocurve] Missing time or distance parameter to submit isocurve request\");\n return;\n }\n\n // on recupere les éventuelles options du service passées par l'utilisateur\n var options = this.options.isocurveOptions || {};\n\n // gestion du protocole et du timeout\n // le timeout est indispensable sur le protocole JSONP.\n var _protocol = options.protocol || \"XHR\";\n var _timeout = options.timeOut || 0;\n if (_protocol === \"JSONP\" && _timeout === 0) {\n // FIXME le timeout est obligatoire pour ce type de protocole...\n _timeout = 15000;\n }\n\n // gestion des callback\n var bOnFailure = !!(options.onFailure !== null && typeof options.onFailure === \"function\"); // cast variable to boolean\n var bOnSuccess = !!(options.onSuccess !== null && typeof options.onSuccess === \"function\");\n\n // on met en place l'affichage des resultats dans la fenetre de resultats.\n var context = this;\n var isoRequestOptions = {\n position : position,\n graph : options.graph || this._currentTransport,\n exclusions : options.exclusions || this._currentExclusions,\n method : options.method || this._currentComputation,\n smoothing : options.smoothing || true,\n timeOut : _timeout,\n protocol : _protocol,\n resource : options.resource,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(results);\n if (results) {\n context._drawIsoResults(results);\n }\n if (bOnSuccess) {\n options.onSuccess.call(context, results);\n }\n },\n // callback onFailure\n onFailure : function (error) {\n // FIXME mise à jour du controle mais le service ne repond pas en 200 !?\n context._hideWaitingContainer();\n logger.log(error.message);\n if (bOnFailure) {\n options.onFailure.call(context, error);\n }\n }\n };\n if ((this._currentDirection.toLowerCase() === \"arrival\") || (options.reverse)) {\n isoRequestOptions.reverse = true;\n }\n if (time) {\n isoRequestOptions.time = time;\n }\n if (distance) {\n isoRequestOptions.distance = distance;\n }\n\n this._requestIsoCurve(isoRequestOptions);\n }\n\n /**\n * this method is called by event 'click' on 'GPshowIsochronPicto' picto\n * (cf. this._createShowIsoPictoElement),\n * and clear inputs and previous isocurve drawings\n *\n * @param { event } e évènement associé au clic\n * @private\n */\n onShowIsoPanelClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n // on supprime toutes les interactions\n Interactions.unset(map);\n var opened = this._pictoIsoButton.ariaPressed;\n this.collapsed = !(opened === \"true\");\n // on génère nous même l'evenement OpenLayers de changement de propriété\n // (utiliser ol.control.Isocurve.on(\"change:collapsed\", function ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n }\n\n /**\n * this method is called by event 'change' on 'GPisochronChoiceAltDist' or 'GPisochronChoiceAltChron'\n * input (cf. this._createIsoPanelFormTypeChoiceElement),\n * and updates current computation mode\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onIsoTypeChoiceChange (e) {\n var value = e.target.value;\n if (!value) {\n return;\n }\n if (value === \"isodistance\") {\n this._currentComputation = \"distance\";\n }\n if (value === \"isochron\") {\n this._currentComputation = \"time\";\n }\n }\n\n /**\n * this method is called by event 'click' on 'GPisochronTransportPedestrian' or 'GPisochronTransportCar'\n * input (cf. this._createIsoPanelFormModeChoiceTransportElement),\n * and updates current transport mode\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onIsoModeTransportChange (e) {\n var value = e.target.value;\n if (!value) {\n return;\n }\n this._currentTransport = value;\n }\n\n /**\n * this method is called by event 'change' on 'GPisochronDirectionSelect' select\n * (cf. this._createIsoPanelFormModeChoiceDirectionElement),\n * and updates current direction mode\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onIsoModeDirectionChange (e) {\n var value = e.target.value;\n if (!value) {\n return;\n }\n if (value.toLowerCase() === \"arrival\") {\n document.getElementById(\"GPisochronPointLabelP-\" + this._uid).innerHTML = \"Arrivée\";\n } else {\n document.getElementById(\"GPisochronPointLabelP-\" + this._uid).innerHTML = \"Départ\";\n }\n this._currentDirection = value;\n }\n\n /**\n * this method is called by event 'change' on 'GPIsoExclusionsToll'\n * or 'GPIsoeExclusionsTunnel' or 'GPIsoExclusionsBridge' tag input\n * (cf. this._createIsoPanelFormExclusionOptionsElement).\n * this value is saved as a parameter for the service isocurve.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onIsoExclusionsChange (e) {\n var value = e.target.value;\n var checked = e.target.checked;\n\n if (!value) {\n return;\n }\n\n var bFound = false;\n var iFound = null;\n for (var i = 0; i < this._currentExclusions.length; i++) {\n if (deepEqual(this._currentExclusions[i], value.toLowerCase())) {\n iFound = i;\n bFound = true;\n }\n }\n // on l'ajoute si la valeur n'existe pas et est selectionnée\n if (!bFound && !checked) {\n this._currentExclusions.push(value.toLowerCase());\n }\n // on la retire si la valeur existe et est deselectionnée\n if (bFound && checked) {\n this._currentExclusions[iFound] = null;\n }\n }\n\n /**\n * this method is called by event 'click' on 'GPisoReset'\n * tag label (cf. this._createIsoFormResetElement),\n * and it cleans all isochron input options and results.\n *\n * @private\n */\n onIsoResetClick () {\n // clear\n this._clear();\n }\n\n /**\n * ...\n * @private\n */\n onShowIsoSettingsClick () {}\n\n // ################################################################### //\n // ######################## isocurve calculation ##################### //\n // ################################################################### //\n\n /**\n * this method is called by this.onIsoComputationSubmit\n * and executes a request to the service.\n *\n * @param {Object} options - isocurve service request options\n * @private\n */\n _requestIsoCurve (options) {\n // on ne fait pas de requête si on n'a pas renseigné de parametres !\n if (!options || ((typeof options === \"object\") && (Object.keys(options).length === 0))) {\n return;\n }\n // on ne fait pas de requête si on n'a pas de point d'origine\n if (!options.position) {\n return;\n }\n\n // si l'utilisateur a spécifié le paramètre ssl au niveau du control, on s'en sert\n // true par défaut (https)\n if (typeof options.ssl !== \"boolean\") {\n if (typeof this.options.ssl === \"boolean\") {\n options.ssl = this.options.ssl;\n } else {\n options.ssl = true;\n }\n }\n\n logger.log(options);\n\n // on efface une éventuelle précédente couche\n this._clearGeojsonLayer();\n\n // mise en place de la patience\n this._displayWaitingContainer();\n\n // appel du service de calcul d'isochrones\n Gp.Services.isoCurve(options);\n }\n\n /**\n * this method is called by this.onIsoComputationSubmit (in case of success)\n * and draw isocurve results geometry on map\n *\n * @param {Object} results - isocurve response results\n * @private\n */\n _drawIsoResults (results) {\n // sauvegarde de l'etat des resultats\n this._currentIsoResults = results;\n // cache la patience\n this._hideWaitingContainer();\n\n if (!results.geometry) {\n return;\n }\n\n var map = this.getMap();\n\n // 1. création de l'objet geoJSON\n this._geojsonObject = {\n type : \"FeatureCollection\",\n crs : {\n type : \"name\",\n properties : {\n name : \"EPSG:4326\"\n }\n },\n features : [\n {\n type : \"Feature\",\n crs : {\n type : \"name\",\n properties : {\n name : \"EPSG:4326\"\n }\n },\n geometry : results.geometry\n }\n ]\n };\n this._geojsonObject.features.push({\n type : \"Feature\",\n geometry : {\n type : \"Point\",\n coordinates : this._originPoint.getCoordinate()\n },\n properties : {\n description : \"Point d'origine\",\n \"marker-symbol\" : this.options.markerOpts.url\n }\n });\n var geojsonformat = new GeoJSONExtended({\n defaultDataProjection : \"EPSG:4326\",\n defaultStyle : this._defaultFeatureStyle\n });\n var mapProj = map.getView().getProjection().getCode();\n var features = geojsonformat.readFeatures(\n this._geojsonObject, {\n dataProjection : \"EPSG:4326\",\n featureProjection : mapProj\n }\n );\n\n // 2. ajout de la géométrie comme nouvelle couche vecteur à la carte\n var method = (this._currentComputation === \"time\") ? \"Isochrone\" : \"Isodistance\";\n\n this._geojsonLayer = new VectorLayer({\n source : new VectorSource({\n features : features\n }),\n style : this._defaultFeatureStyle,\n opacity : 0.9,\n title : \"Mon \" + method\n });\n // ajout d'un identifiant à la couche\n var graph;\n if (this._currentTransport === \"Pieton\") {\n graph = \"piéton\";\n this._geojsonLayer.gpResultLayerId = \"compute:Pieton$GEOPORTAIL:GPP:Isocurve\";\n } else {\n graph = \"voiture\";\n this._geojsonLayer.gpResultLayerId = \"compute:Voiture$GEOPORTAIL:GPP:Isocurve\";\n }\n // ajout à la carte\n map.addLayer(this._geojsonLayer);\n\n /**\n * event triggered when the compute is finished\n *\n * @event isocurve:compute\n * @typedef {Object}\n * @property {Object} type - event\n * @property {Object} target - instance Isocurve\n * @example\n * Isocurve.on(\"isocurve:compute\", function (e) {\n * console.log(e.target.getData());\n * })\n */\n this.dispatchEvent({\n type : \"isocurve:compute\"\n });\n\n // 3. Zoom sur l'emprise de la geometry\n if (features[0] && features[0].getGeometry() && features[0].getGeometry().getExtent()) {\n var extent = features[0].getGeometry().getExtent();\n map.getView().fit(extent, map.getSize());\n }\n\n // 5. Si un layer switcher est présent dans la carte, on lui affecte des informations pour cette couche\n var method = (this._currentComputation === \"time\") ? \"Isochrone\" : \"Isodistance\";\n map.getControls().forEach(\n (control) => {\n if (control instanceof LayerSwitcher) {\n // un layer switcher est présent dans la carte\n var layerId = this._geojsonLayer.gpLayerId;\n // on n'ajoute des informations que s'il n'y en a pas déjà (si le titre est le numéro par défaut)\n if (control._layers[layerId].title === layerId) {\n control.addLayer(\n this._geojsonLayer, {\n title : this.options.layerDescription.title + \" (\" + method + \"/\" + graph + \")\",\n description : this.options.layerDescription.description\n }\n );\n }\n }\n }\n );\n }\n\n // ################################################################### //\n // ############################# Clean ############################### //\n // ################################################################### //\n\n /**\n * this method is called by this.onShowIsoPanelClick()\n * and it clears all elements (reinit).\n *\n * @private\n */\n _clear () {\n // clear inputs\n this._clearIsoInputs();\n\n // clear origin point (and marker)\n this._originPoint.clear();\n\n // remove geometry layer\n this._clearGeojsonLayer();\n\n // clear results\n this._currentIsoResults = null;\n }\n\n /**\n * this method is called by this._clear()\n * and it clears all input elements (dist and time)\n *\n * @private\n */\n _clearIsoInputs () {\n // 1. clear inputs\n // clear time inputs (if exists) :\n // hours\n var timeHourInput = document.getElementById(\"GPisochronValueChronInput1-\" + this._uid);\n if (timeHourInput) {\n timeHourInput.value = \"0\";\n }\n // minutes\n var timeMinutesInput = document.getElementById(\"GPisochronValueChronInput2-\" + this._uid);\n if (timeMinutesInput) {\n timeMinutesInput.value = \"0\";\n }\n // clear distance input (if exists)\n var distInput = document.getElementById(\"GPisochronValueDistInput-\" + this._uid);\n if (distInput) {\n distInput.value = \"0\";\n }\n\n // 2. reinit options to default\n this._initTransport();\n this._initComputation();\n this._initDirection();\n this._initExclusions();\n\n // 3. set transport mode to default\n var transportdiv;\n if (this._currentTransport === \"Pieton\") {\n transportdiv = document.getElementById(\"GPisochronTransportPedestrian-\" + this._uid);\n if (transportdiv) {\n transportdiv.checked = \"true\";\n }\n } else {\n transportdiv = document.getElementById(\"GPisochronTransportCar-\" + this._uid);\n if (transportdiv) {\n transportdiv.checked = \"true\";\n }\n }\n\n // 4. set computation mode to default (distance or time)\n var computationdiv;\n if (this._currentComputation.toLowerCase() === \"distance\") {\n computationdiv = document.getElementById(\"GPisochronChoiceAltDist-\" + this._uid);\n if (computationdiv) {\n computationdiv.checked = \"true\";\n }\n if (document.getElementById(\"GPisochronValueDist-\" + this._uid)) {\n document.getElementById(\"GPisochronValueDist-\" + this._uid).className = \"GPflexInput gpf-flex\";\n }\n if (document.getElementById(\"GPisochronValueChron-\" + this._uid)) {\n document.getElementById(\"GPisochronValueChron-\" + this._uid).className = \"GPelementHidden gpf-hidden\";\n }\n } else {\n computationdiv = document.getElementById(\"GPisochronChoiceAltChron-\" + this._uid);\n if (computationdiv) {\n computationdiv.checked = \"true\";\n }\n if (document.getElementById(\"GPisochronValueChron-\" + this._uid)) {\n document.getElementById(\"GPisochronValueChron-\" + this._uid).className = \"GPflexInput gpf-flex\";\n }\n if (document.getElementById(\"GPisochronValueDist-\" + this._uid)) {\n document.getElementById(\"GPisochronValueDist-\" + this._uid).className = \"GPelementHidden gpf-hidden\";\n }\n }\n\n // 5. set direction mode to default (arrival or departure)\n var directionSelect = document.getElementById(\"GPisochronDirectionSelect-\" + this._uid);\n if (directionSelect) {\n directionSelect.value = this._currentDirection;\n }\n if (directionSelect.value.toLowerCase() === \"arrival\") {\n document.getElementById(\"GPisochronPointLabelP-\" + this._uid).innerHTML = \"Arrivée\";\n } else {\n document.getElementById(\"GPisochronPointLabelP-\" + this._uid).innerHTML = \"Départ\";\n }\n\n // 6. set exclusions to default\n var tollInput = document.getElementById(\"GPisoExclusionsToll-\" + this._uid);\n if (tollInput) {\n if (this._currentExclusions.indexOf(\"toll\") !== -1) {\n tollInput.checked = false;\n } else {\n tollInput.checked = true;\n }\n }\n var tunnelInput = document.getElementById(\"GPisoExclusionsTunnel-\" + this._uid);\n if (tunnelInput) {\n if (this._currentExclusions.indexOf(\"tunnel\") !== -1) {\n tunnelInput.checked = false;\n } else {\n tunnelInput.checked = true;\n }\n }\n var bridgeInput = document.getElementById(\"GPisoExclusionsBridge-\" + this._uid);\n if (bridgeInput) {\n if (this._currentExclusions.indexOf(\"bridge\") !== -1) {\n bridgeInput.checked = false;\n } else {\n bridgeInput.checked = true;\n }\n }\n }\n\n /**\n * this method is called by this.onIsoComputationSubmit (in case of failure)\n * and it clears all geometries\n *\n * @private\n */\n _clearGeojsonLayer () {\n var map = this.getMap();\n // remove layer\n if (this._geojsonLayer) {\n map.removeLayer(this._geojsonLayer);\n this._geojsonLayer = null;\n }\n // remove geojson object\n this._geojsonObject = null;\n }\n\n /**\n * this method is called by event 'click' on control main container\n * and hide suggested Locations (unless target is an autocomplete input)\n *\n * @param {Object} e - event\n *\n * @private\n */\n _hideIsoSuggestedLocations (e) {\n // si on clique sur l'input de saisie du point d'origine\n if (e.target && e.target.id && e.target.id.indexOf(\"GPlocationOrigin_\") !== -1) {\n\n } else {\n // si on clique ailleurs dans le DOM du control, on cache tous les résultats d'autocomplétion\n this._originPoint._hideSuggestedLocation();\n }\n }\n\n /**\n * this method displays waiting container and sets a timeout\n *\n * @private\n */\n _displayWaitingContainer () {\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerVisible gpf-waiting gpf-waiting--visible\";\n this._waiting = true;\n\n // mise en place d'un timeout pour réinitialiser le panel (cacher la patience)\n // si on est toujours en attente (si la requête est bloquée par exemple)\n var opts = this.options.isocurveOptions;\n if (opts && opts.timeOut) {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n var context = this;\n this._timer = setTimeout(function () {\n if (context._waiting === true) {\n context._hideWaitingContainer();\n } else {\n if (context._timer) {\n clearTimeout(context._timer);\n }\n }\n }, 16000);\n }\n }\n\n /**\n * this method hides waiting container and clears timeout\n *\n * @private\n */\n _hideWaitingContainer () {\n if (this._waiting) {\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n this._waiting = false;\n var opts = this.options.isocurveOptions;\n if (opts && opts.timeOut) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n }\n }\n\n};\n\n// on récupère les méthodes de la classe commune MousePosition\nObject.assign(Isocurve.prototype, IsocurveDOM);\nObject.assign(Isocurve.prototype, Widget);\n\nexport default Isocurve;\n\n// Expose Isocurve as ol.control.Isocurve (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.Isocurve = Isocurve;\n}\n\nconst deepEqual = function (x, y) {\n if (x === y) {\n return true;\n } else if ((typeof x === \"object\" && x != null) && (typeof y === \"object\" && y != null)) {\n if (Object.keys(x).length !== Object.keys(y).length) {\n return false;\n }\n\n for (var prop in x) {\n if (y.hasOwnProperty(prop)) {\n if (!deepEqual(x[prop], y[prop])) {\n return false;\n }\n } else {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n};\n","import checkDsfr from \"../Utils/CheckDsfr\";\n\nvar ReverseGeocodeDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPreverseGeocoding\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show ReverseGeocoding\n *\n * @returns {DOMElement} DOM element\n */\n _createShowReverseGeocodingPictoElement : function () {\n // contexte d'execution\n var self = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowReverseGeocodingPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowReverseGeocodingPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-reverse fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Ouvrir la recherche inverse\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // Close all results and panels when minimizing the widget\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowReverseGeocodingClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowReverseGeocodingClick(e);\n });\n }\n\n return button;\n },\n\n /**\n * Create Waiting Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingWaitingElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPreverseGeocodingCalcWaitingContainer\");\n div.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n\n var p = document.createElement(\"p\");\n p.className = \"GPwaitingContainerInfo gpf-waiting_info\";\n p.innerHTML = \"Recherche en cours...\";\n\n div.appendChild(p);\n\n return div;\n },\n\n /**\n * Reverse geocoding results panel element.\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingResultsPanelElement : function () {\n var resultsPanelDiv = document.createElement(\"div\");\n resultsPanelDiv.id = this._addUID(\"GPreverseGeocodingResultsPanel\");\n resultsPanelDiv.className = \"GPpanel GPelementHidden gpf-panel gpf-panel-reverse gpf-panel--hidden\";\n return resultsPanelDiv;\n },\n\n /**\n * Reverse geocoding results list.\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingResultsListElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPreverseGeocodingResultsList\");\n container.className = \"gpf-panel__list\";\n container.setAttribute(\"tabindex\", \"0\");\n // Results are dynamically filled in Javascript by reverse geocoding service\n return container;\n },\n\n /**\n * Add Result\n * (results dynamically generate !)\n *\n * @param {String} locationDescription - reverse geocoded location results\n * @param {Number} id - ID\n */\n _createReverseGeocodingResultElement : function (locationDescription, id) {\n // contexte\n var context = this;\n\n var container = document.getElementById(this._addUID(\"GPreverseGeocodingResultsList\"));\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPreverseGeocodedLocation_\" + id);\n div.setAttribute(\"tabindex\", \"0\");\n div.className = \"GPautoCompleteProposal gpf-panel__items\";\n div.innerHTML = locationDescription;\n div.title = locationDescription;\n\n if (div.addEventListener) {\n div.addEventListener(\"mouseover\", function (e) {\n context.onReverseGeocodingResultMouseOver(e);\n });\n div.addEventListener(\"focus\", function (e) {\n context.onReverseGeocodingResultMouseOver(e);\n });\n div.addEventListener(\"mouseout\", function (e) {\n context.onReverseGeocodingResultMouseOut(e);\n });\n div.addEventListener(\"blur\", function (e) {\n context.onReverseGeocodingResultMouseOut(e);\n });\n div.addEventListener(\"click\", function (e) {\n if (typeof context.onReverseGeocodingResultClick === \"function\") {\n context.onReverseGeocodingResultClick(e);\n }\n });\n } else if (div.attachEvent) {\n div.attachEvent(\"onmouseover\", function (e) {\n context.onReverseGeocodingResultMouseOver(e);\n });\n div.attachEvent(\"onmouseout\", function (e) {\n context.onReverseGeocodingResultMouseOut(e);\n });\n div.attachEvent(\"onclick\", function (e) {\n if (typeof context.onReverseGeocodingResultClick === \"function\") {\n context.onReverseGeocodingResultClick(e);\n }\n });\n }\n\n container.appendChild(div);\n },\n\n // ################################################################### //\n // ######################### Inputs panel ############################ //\n // ################################################################### //\n\n /**\n * Create Container Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPreverseGeocodingPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n return dialog;\n },\n\n _createReverseGeocodingPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingPanelHeaderElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n // info: on sépare les appels pour la création du picto de retour,\n // du titre et de la croix de fermeture pour les récupérer dans le composant\n return container;\n },\n\n /**\n * Create return picto in panel header\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingPanelReturnPictoElement : function () {\n // contexte\n var self = this;\n\n var buttonNew = document.createElement(\"button\");\n buttonNew.id = this._addUID(\"GPreverseGeocodingReturnPicto\");\n buttonNew.title = \"Nouvelle recherche\";\n buttonNew.className = \"GPreturnPicto GPimportPanelReturnPicto gpf-btn gpf-btn-icon-return fr-btn fr-btn--close fr-btn--tertiary-no-outline fr-m-1w\";\n\n buttonNew.classList.add(\"GPelementHidden\");\n buttonNew.classList.add(\"gpf-hidden\");\n\n if (checkDsfr()) {\n var returnSpan = document.createElement(\"span\");\n returnSpan.className = \"GPelementHidden gpf-visible\";\n returnSpan.innerHTML = \"Retour\";\n buttonNew.appendChild(returnSpan);\n }\n\n if (buttonNew.addEventListener) {\n buttonNew.addEventListener(\"click\", function (e) {\n document.getElementById(self._addUID(\"GPreverseGeocodingResultsPanel\")).className = \"GPelementHidden gpf-panel--hidden\";\n document.getElementById(self._addUID(\"GPreverseGeocodingForm\")).className = \"GPform gpf-panel__content fr-modal__content\";\n document.getElementById(self._addUID(\"GPreverseGeocodingHeaderTitle\")).innerHTML = \"Recherche inverse\";\n document.getElementById(self._addUID(\"GPreverseGeocodingReturnPicto\")).classList.add(\"GPelementHidden\");\n document.getElementById(self._addUID(\"GPreverseGeocodingReturnPicto\")).classList.add(\"gpf-hidden\");\n self.onGPreverseGeocodingReturnPictoClick(e);\n });\n } else if (buttonNew.attachEvent) {\n buttonNew.attachEvent(\"onclick\", function (e) {\n document.getElementById(self._addUID(\"GPreverseGeocodingResultsPanel\")).className = \"GPelementHidden gpf-panel--hidden\";\n document.getElementById(self._addUID(\"GPreverseGeocodingForm\")).className = \"GPform gpf-panel__content fr-modal__content\";\n document.getElementById(self._addUID(\"GPreverseGeocodingHeaderTitle\")).innerHTML = \"Recherche inverse\";\n document.getElementById(self._addUID(\"GPreverseGeocodingReturnPicto\")).classList.add(\"GPelementHidden\");\n document.getElementById(self._addUID(\"GPreverseGeocodingReturnPicto\")).classList.add(\"gpf-hidden\");\n self.onGPreverseGeocodingReturnPictoClick(e);\n });\n }\n return buttonNew;\n },\n\n /**\n * Create Header Title Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingPanelTitleElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n div.id = this._addUID(\"GPreverseGeocodingHeaderTitle\");\n div.innerHTML = \"Recherche inverse\";\n return div;\n },\n\n /**\n * Create Header close div\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingPanelCloseElement : function () {\n // contexte\n var self = this;\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPreverseGeocodingPanelClose\");\n divClose.className = \"GPpanelClose GPreverseGeocodingPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowReverseGeocodingPicto\")).click();\n }, false);\n divClose.addEventListener(\"keydown\", function (event) {\n if (event.keyCode === 13) {\n document.getElementById(self._addUID(\"GPshowReverseGeocodingPicto\")).click();\n }\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowReverseGeocodingPicto\")).click();\n });\n divClose.attachEvent(\"onkeydown\", function (event) {\n if (event.keyCode === 13) {\n document.getElementById(self._addUID(\"GPshowReverseGeocodingPicto\")).click();\n }\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n return divClose;\n },\n\n /**\n * Create Form\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingPanelFormElement : function () {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GPreverseGeocodingForm\");\n form.className = \"GPform gpf-panel__content fr-modal__content\";\n\n if (form.addEventListener) {\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n self.onReverseGeocodingSubmit();\n });\n } else if (form.attachEvent) {\n form.attachEvent(\"onsubmit\", function (e) {\n e.preventDefault();\n self.onReverseGeocodingSubmit();\n });\n }\n\n return form;\n },\n\n // ################################################################### //\n // ####################### Choice mode into form ##################### //\n // ################################################################### //\n\n /**\n * Create Container to Mode choice geocoding type\n *\n * @param {Array} resources - geocoding resources to be displayed (and used)\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingFormModeChoiceGeocodingTypeElement : function (resources) {\n // contexte d'execution\n var context = this;\n\n var div = document.createElement(\"div\");\n div.className = \"GPflexInput gpf-flex gpf-flex-reverse fr-mb-1w\";\n\n var label = document.createElement(\"label\");\n label.id = \"label-recherche-par\";\n label.className = \"GPlabel gpf-label fr-label\";\n label.innerHTML = \"Recherche par\";\n label.title = \"Recherche par\";\n div.appendChild(label);\n\n var select = document.createElement(\"select\");\n select.setAttribute(\"aria-labelledby\", \"label-recherche-par\");\n select.className = \"GPselect gpf-select fr-select\";\n // gestionnaire d'evenement : on stocke la valeur du type de geocodage,\n // utilisé dans la requête de géocodage inverse\n if (select.addEventListener) {\n select.addEventListener(\"change\", function (e) {\n context.onReverseGeocodingTypeChange(e);\n });\n } else if (select.attachEvent) {\n select.attachEvent(\"onchange\", function (e) {\n context.onReverseGeocodingTypeChange(e);\n });\n }\n\n // on prend soit les valeurs passées par l'utilisateur, soit des valeurs par défaut\n if (!resources || !Array.isArray(resources)) {\n resources = [\"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\"];\n }\n for (var i = 0; i < resources.length; i++) {\n switch (resources[i]) {\n case \"PositionOfInterest\":\n var POIOption = document.createElement(\"option\");\n POIOption.value = \"PositionOfInterest\";\n POIOption.text = \"Lieux/toponymes\";\n select.appendChild(POIOption);\n break;\n case \"StreetAddress\":\n var SAOption = document.createElement(\"option\");\n SAOption.value = \"StreetAddress\";\n SAOption.text = \"Adresses\";\n select.appendChild(SAOption);\n break;\n case \"CadastralParcel\":\n var CPOption = document.createElement(\"option\");\n CPOption.value = \"CadastralParcel\";\n CPOption.text = \"Parcelles cadastrales\";\n select.appendChild(CPOption);\n break;\n default:\n break;\n }\n }\n\n div.appendChild(select);\n\n return div;\n },\n\n /**\n * Create Container to Mode choice geocoding delimitation\n *\n * @param {Array} delimitations - geocoding delimitations to be displayed (and used)\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingFormModeChoiceGeocodingDelimitationElement : function (delimitations) {\n // contexte d'execution\n var context = this;\n\n var div = document.createElement(\"div\");\n div.className = \"GPflexInput gpf-flex gpf-flex-reverse fr-mb-2w\";\n\n var label = document.createElement(\"label\");\n label.id = \"label-delimitation\";\n label.className = \"GPlabel gpf-label fr-label\";\n label.innerHTML = \"Délimitation\";\n label.title = \"Délimitation\";\n div.appendChild(label);\n\n var select = document.createElement(\"select\");\n select.setAttribute(\"aria-labelledby\", \"label-delimitation\");\n select.className = \"GPselect gpf-select fr-select\";\n // gestionnaire d'evenement : on stocke la valeur du type de délimitation,\n // et on modifie l'événement de pointage sur la carte en fonction\n if (select.addEventListener) {\n select.addEventListener(\"change\", function (e) {\n context.onReverseGeocodingDelimitationChange(e);\n });\n } else if (select.attachEvent) {\n select.attachEvent(\"onchange\", function (e) {\n context.onReverseGeocodingDelimitationChange(e);\n });\n }\n\n // on prend soit les valeurs passées par l'utilisateur, soit des valeurs par défaut\n if (!delimitations || !Array.isArray(delimitations)) {\n delimitations = [\"Point\", \"Circle\", \"Extent\"];\n }\n for (var i = 0; i < delimitations.length; i++) {\n switch (delimitations[i].toLowerCase()) {\n case \"point\":\n var pointOption = document.createElement(\"option\");\n pointOption.value = \"point\";\n pointOption.text = \"Pointer un lieu\";\n select.appendChild(pointOption);\n break;\n case \"circle\":\n var circleOption = document.createElement(\"option\");\n circleOption.value = \"circle\";\n circleOption.text = \"Dessiner un cercle\";\n select.appendChild(circleOption);\n break;\n case \"extent\":\n var extentOption = document.createElement(\"option\");\n extentOption.value = \"extent\";\n extentOption.text = \"Dessiner une emprise\";\n select.appendChild(extentOption);\n break;\n default:\n break;\n }\n }\n\n div.appendChild(select);\n\n return div;\n },\n\n // ################################################################### //\n // ########################### Submit Form ########################### //\n // ################################################################### //\n\n /**\n * Create Submit Form Element\n *\n * @returns {DOMElement} DOM element\n */\n _createReverseGeocodingSubmitFormElement : function () {\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPreverseGeocodingSubmit\");\n input.className = \"GPsubmit gpf-btn fr-btn\";\n input.type = \"submit\";\n input.value = \"Rechercher\";\n\n return input;\n }\n\n};\n\nexport default ReverseGeocodeDOM;\n","// import CSS\nimport \"../../CSS/Controls/ReverseGeocoding/GPFreverseGeocoding.css\";\n// import \"../../CSS/Controls/ReverseGeocoding/GPFreverseGeocodingStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport Overlay from \"ol/Overlay\";\nimport Collection from \"ol/Collection\";\nimport Feature from \"ol/Feature\";\nimport {\n Fill,\n Icon,\n Stroke,\n Style,\n Circle\n} from \"ol/style\";\nimport {\n LineString,\n Point,\n Polygon\n} from \"ol/geom\";\nimport {\n Select as SelectInteraction,\n Draw as DrawInteraction\n} from \"ol/interaction\";\nimport { pointerMove as eventPointerMove } from \"ol/events/condition\";\nimport { transform as olTransformProj } from \"ol/proj\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport VectorSource from \"ol/source/Vector\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Utils from \"../../Utils/Helper\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Markers from \"../Utils/Markers\";\nimport Draggable from \"../../Utils/Draggable\";\nimport Interactions from \"../Utils/Interactions\";\n// import local with ol dependencies\nimport LayerSwitcher from \"../LayerSwitcher/LayerSwitcher\";\n// DOM\nimport ReverseGeocodeDOM from \"./ReverseGeocodeDOM\";\n\nvar logger = Logger.getLogger(\"reversegeocoding\");\n\n/**\n * @classdesc\n *\n * ReverseGeocode Control.\n *\n * @constructor\n * @alias ol.control.ReverseGeocode\n * @type {ol.control.ReverseGeocode}\n * @extends {ol.control.Control}\n * @param {Object} options - ReverseGeocode control options\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {String} [options.apiKey] - API key for services call (reverse geocode service). The key \"calcul\" is used by default.\n * @param {String} [options.ssl = true] - use of ssl or not (default true, service requested using https protocol)\n * @param {Boolean} [options.collapsed = true] - Specify if widget has to be collapsed (true) or not (false) on map loading. Default is true.\n * @param {Boolean} [options.draggable = false] - Specify if widget is draggable\n * @param {Object} [options.resources = [\"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\"]] - resources for geocoding, by default : [\"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\"]. Possible values are : \"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\". Resources will be displayed in the same order in widget list.\n * @param {Object} [options.delimitations = [\"Point\", \"Circle\", \"Extent\"]] - delimitations for reverse geocoding, by default : [\"Point\", \"Circle\", \"Extent\"]. Possible values are : \"Point\", \"Circle\", \"Extent\". Delimitations will be displayed in the same order in widget list.\n * @param {Object} [options.reverseGeocodeOptions = {}] - reverse geocode service options. see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~reverseGeocode Gp.Services.reverseGeocode()} to know all reverse geocode options.\n * @param {Object} [options.layerDescription = {}] - Layer informations to be displayed in LayerSwitcher widget (only if a LayerSwitcher is also added to the map)\n * @param {String} [options.layerDescription.title = \"Saisie (recherche inverse)\"] - Layer title to be displayed in LayerSwitcher\n * @param {String} [options.layerDescription.description = \"Couche de saisie d'une zone de recherche pour la recherche inverse\"] - Layer description to be displayed in LayerSwitcher\n * @fires reversegeocode:compute\n * @fires reversegeocode:onclickresult\n * @example\n * var iso = ol.control.ReverseGeocode({\n * \"collapsed\" : false,\n * \"draggable\" : true,\n * \"resources\" : [\"StreetAddress\", \"PositionOfInterest\"],\n * \"delimitations\" : [\"Point\", \"Circle\"],\n * \"reverseGeocodeOptions\" : {}\n * });\n */\nvar ReverseGeocode = class ReverseGeocode extends Control {\n\n /**\n * See {@link ol.control.ReverseGeocode}\n * @module ReverseGeocode\n * @alias module:~controls/ReverseGeocode\n * @param {*} options - options\n * @example\n * import ReverseGeocode from \"gpf-ext-ol/controls/ReverseGeocode\"\n * ou\n * import { ReverseGeocode } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof ReverseGeocode)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"ReverseGeocode\";\n // initialisation du composant\n this.initialize(options);\n\n // Widget main DOM container\n this.container = this._initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this.container) : this.element = this.container;\n\n return this;\n }\n\n // ################################################################### //\n // ############## public methods (getters, setters) ################## //\n // ################################################################### //\n\n /**\n * Returns true if widget is collapsed (minimized), false otherwise\n *\n * @returns {Boolean} collapsed - true if widget is collapsed\n */\n getCollapsed () {\n return this.collapsed;\n }\n\n /**\n * Collapse or display widget main container\n *\n * @param {Boolean} collapsed - True to collapse widget, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.log(\"[ERROR] ReverseGeocode:setCollapsed - missing collapsed parameter\");\n return;\n }\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n if (collapsed) {\n this._panelCloseButton.click();\n } else {\n this._showReverseGeocodingButton.click();\n }\n this.collapsed = collapsed;\n }\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n // lors de l'ajout à la map, on active la saisie du point ou de la zone de recherche sur la carte,\n // mais seulement si le widget est ouvert\n this._activateMapInteraction(map);\n\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this._panelContainer,\n this._panelHeaderContainer,\n map.getTargetElement()\n );\n }\n // mode \"collapsed\"\n if (!this.collapsed) {\n // this._showReverseGeocodingButton.click();\n this._showReverseGeocodingButton.setAttribute(\"aria-pressed\", true);\n }\n } else {\n var _map = this.getMap();\n // on remet à zéro = on efface les géométries + interactions + valeurs stockées\n // suppression des résultats précédents\n this._clearResults();\n // on efface les points qui ont pu être saisis précédemment\n this._clearInputFeatures();\n // on supprime l'éventuelle précédente interaction\n this._removeMapInteraction(_map);\n // on retire aussi la couche de saisie de la zone de recherche à la fermeture du widget\n if (this._inputFeaturesLayer != null) {\n _map.removeLayer(this._inputFeaturesLayer);\n this._inputFeaturesLayer = null;\n this._inputFeaturesSources = null;\n this._inputFeatures = null;\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Get locations data\n *\n * @returns {Object} data - locations\n */\n getData () {\n return this._reverseGeocodingLocations;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize ReverseGeocode control (called by ReverseGeocode constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n // ############################################################ //\n // ################### Options du composant ################### //\n\n // check input options format (resources and delimitations arrays)\n this._checkInputOptions(options);\n\n // set default options\n this.options = {\n collapsed : true,\n draggable : false,\n resources : [\"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\"],\n delimitations : [\"Point\", \"Circle\", \"Extent\"],\n reverseGeocodeOptions : {},\n layerDescription : {\n title : \"Saisie (recherche inverse)\",\n description : \"Couche de saisie d'une zone de recherche pour la recherche inverse\"\n }\n };\n\n // merge with user options\n Utils.assign(this.options, options);\n\n /** {Boolean} specify if reverseGeocoding control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n /** {Boolean} specify if reverseGeocoding control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n // identifiant du contrôle : utile pour suffixer les identifiants CSS (pour gérer le cas où il y en a plusieurs dans la même page)\n this._uid = this.options.id || SelectorID.generate();\n\n // #################################################################### //\n // ################### informations sur les droits #################### //\n\n // Type de géocodage sélectionné (StreetAddress, PositionOfInterest, ...)\n this._currentGeocodingType = null;\n this._initGeocodingType();\n\n // Type de délimitation à utiliser pour la requête + pour sélection sur la containerDistance\n this._currentGeocodingDelimitation = null;\n this._initGeocodingDelimitation();\n\n // ################################################################## //\n // ################### Elements principaux du DOM ################### //\n\n // containers principaux\n this._showReverseGeocodingButton = null;\n // panel\n this._panelContainer = null;\n this._panelHeaderContainer = null;\n this._panelTitleContainer = null;\n this._returnPictoContainer = null;\n this._panelCloseButton = null;\n // form\n this._formContainer = null;\n // results\n this._resultsContainer = null;\n this._resultsListContainer = null;\n // waiting\n this._waitingContainer = null;\n\n // ###################################################################### //\n // ################### informations des points saisis ################### //\n\n // collection des points saisis sur la carte\n this._inputFeatures = null;\n // source contenant les features ci-dessus\n this._inputFeaturesSource = null;\n // couche vectorielle dans laquelle seront saisis les points (features ci-dessus)\n this._inputFeaturesLayer = null;\n // interaction avec la carte (de type \"Point\", \"Circle\" ou \"Polygon\")\n this._mapInteraction = null;\n\n // #################################################################### //\n // ################### informations pour la requête ################### //\n\n // options pour la requête de géocodage inverse\n this._requestOptions = null;\n // geometrie de recherche du géocodage inverse qui sera envoyée dans la requête\n this._requestGeom = null;\n this._requestPosition = null;\n // pour savoir si un calcul est en cours ou non\n this._waiting = false;\n // timer pour cacher la patience après un certain temps\n this._timer = null;\n\n // #################################################################### //\n // #################### informations des résultats #################### //\n\n this._reverseGeocodingLocations = [];\n this._reverseGeocodingLocationsMarkers = [];\n this._resultsDefaultStyle = new Style({\n image : new Icon({\n src : Markers[\"lightOrange\"],\n anchor : [0.5, 1]\n })\n });\n this._resultsSelectedStyle = new Style({\n image : new Icon({\n src : Markers[\"red\"],\n anchor : [0.5, 1]\n })\n });\n this._resultsHoverInteraction = null;\n this._resultsSelectInteraction = null;\n // container de la popup (affichage des infos au clic sur les markers)\n this._popupContent = null;\n this._popupDiv = this._initPopupDiv();\n this._popupOverlay = null;\n }\n\n /**\n * this method is called by this.initialize()\n * and makes sure input options are correctly formated\n *\n * @param {Object} options - options\n *\n * @private\n */\n _checkInputOptions (options) {\n var i;\n var j;\n\n // on vérifie le tableau des resources\n if (options.resources) {\n var resources = options.resources;\n // on vérifie que la liste des ressources de geocodage est bien un tableau\n if (Array.isArray(resources)) {\n var resourcesList = [\"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\"];\n var wrongResourcesIndexes = [];\n for (i = 0; i < resources.length; i++) {\n if (resourcesList.indexOf(resources[i]) === -1) {\n // si la resource n'est pas référencée, on stocke son index pour la retirer du tableau (après avoir terminé de parcourir le tableau)\n wrongResourcesIndexes.push(i);\n logger.log(\"[ReverseGeocode] options.resources : \" + resources[i] + \" is not a resource for reverse geocode\");\n }\n }\n // on retire les ressoures non référencées qu'on a pu rencontrer\n if (wrongResourcesIndexes.length !== 0) {\n for (j = 0; j < wrongResourcesIndexes.length; j++) {\n resources.splice(wrongResourcesIndexes[j], 1);\n }\n }\n } else {\n logger.log(\"[ReverseGeocode] 'options.resources' parameter should be an array\");\n resources = null;\n }\n }\n\n // et le tableau des délimitations\n if (options.delimitations) {\n var delimitations = options.delimitations;\n // on vérifie que la liste des delimitations est bien un tableau\n if (Array.isArray(delimitations)) {\n var delimitationsList = [\"Circle\", \"Point\", \"Extent\"];\n var wrongDelimitationsIndexes = [];\n for (i = 0; i < delimitations.length; i++) {\n if (delimitationsList.indexOf(delimitations[i]) === -1) {\n // si la delimitations n'est pas référencée, on stocke son index pour la retirer du tableau (après avoir terminé de parcourir le tableau)\n wrongDelimitationsIndexes.push(i);\n logger.log(\"[ReverseGeocode] options.delimitations : \" + delimitations[i] + \" is not a delimitation for reverse geocode\");\n }\n }\n // on retire les ressoures non référencées qu'on a pu rencontrer\n if (wrongDelimitationsIndexes.length !== 0) {\n for (j = 0; j < wrongDelimitationsIndexes.length; j++) {\n delimitations.splice(wrongDelimitationsIndexes[j], 1);\n }\n }\n } else {\n logger.log(\"[ReverseGeocode] 'options.delimitations' parameter should be an array\");\n delimitations = null;\n }\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize geocoding type (=resource)\n * (\"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\")\n *\n * @private\n */\n _initGeocodingType () {\n // Type de géocodage selectionné\n this._currentGeocodingType = \"StreetAddress\"; // par defaut\n\n // par defaut\n var resources = this.options.resources;\n if (!resources || resources.length === 0) {\n this.options.resources = [\"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\"];\n }\n\n // options utilisateur\n if (Array.isArray(resources) && resources.length) {\n // récupération du type par défaut\n if (resources[0] === \"StreetAddress\" || resources[0] === \"PositionOfInterest\" || resources[0] === \"CadastralParcel\") {\n this._currentGeocodingType = resources[0];\n }\n }\n\n // si l'utilisateur a spécifié au moins une ressource dans le service, on surcharge les options du widget\n var serviceOptions = this.options.reverseGeocodeOptions;\n if (serviceOptions.filterOptions && Array.isArray(serviceOptions.filterOptions.type) && serviceOptions.filterOptions.type.length !== 0) {\n this._currentGeocodingType = serviceOptions.filterOptions.type[0];\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize geocoding delimitation\n * (\"Point\", \"Circle\", \"Extent\")\n *\n * @private\n */\n _initGeocodingDelimitation () {\n // Type de délimitation selectionné\n this._currentGeocodingDelimitation = \"Point\"; // par defaut\n\n // par defaut\n var delimitations = this.options.delimitations;\n if (!delimitations || delimitations.length === 0) {\n this.options.delimitations = [\"Point\", \"Circle\", \"Extent\"];\n }\n\n // options utilisateur\n if (Array.isArray(delimitations) && delimitations.length) {\n var d = delimitations[0].toLowerCase();\n if (d === \"point\" || d === \"circle\" || d === \"extent\") {\n this._currentGeocodingDelimitation = delimitations[0];\n }\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize popup div\n * (to display results information on marker click)\n *\n * @return {Object} element - DOM element for popup\n * @private\n */\n _initPopupDiv () {\n var context = this;\n var element = document.createElement(\"div\");\n element.className = \"gp-feature-info-div\";\n var closer = document.createElement(\"button\");\n closer.className = \"gp-styling-button closer\";\n // on closer click : remove popup\n closer.onclick = function () {\n if (context._popupOverlay != null) {\n context._popupOverlay.setPosition(undefined);\n }\n return false;\n };\n this._popupContent = document.createElement(\"div\");\n this._popupContent.className = \"gp-features-content-div\";\n element.appendChild(this._popupContent);\n element.appendChild(closer);\n\n return element;\n }\n\n /**\n * Create control main container (DOM initialize)\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initContainer () {\n // create main container\n var container = this._createMainContainerElement();\n\n // create ReverseGeocode picto\n var picto = this._showReverseGeocodingButton = this._createShowReverseGeocodingPictoElement();\n container.appendChild(picto);\n\n // panel\n var reverseGeocodingPanel = this._panelContainer = this._createReverseGeocodingPanelElement();\n var reverseGeocodingPanelDiv = this._createReverseGeocodingPanelDivElement();\n reverseGeocodingPanel.appendChild(reverseGeocodingPanelDiv);\n\n // header\n var panelHeader = this._panelHeaderContainer = this._createReverseGeocodingPanelHeaderElement();\n\n // return picto (hidden at start)\n var returnPicto = this._returnPictoContainer = this._createReverseGeocodingPanelReturnPictoElement();\n panelHeader.appendChild(returnPicto);\n // title\n var panelTitle = this._panelTitleContainer = this._createReverseGeocodingPanelTitleElement();\n panelHeader.appendChild(panelTitle);\n // close picto\n var closeDiv = this._panelCloseButton = this._createReverseGeocodingPanelCloseElement();\n panelHeader.appendChild(closeDiv);\n reverseGeocodingPanelDiv.appendChild(panelHeader);\n\n // form\n var reverseGeocodingForm = this._formContainer = this._createReverseGeocodingPanelFormElement();\n // choices element\n reverseGeocodingForm.appendChild(this._createReverseGeocodingFormModeChoiceGeocodingTypeElement(this.options.resources));\n reverseGeocodingForm.appendChild(this._createReverseGeocodingFormModeChoiceGeocodingDelimitationElement(this.options.delimitations));\n\n // submit (bouton \"Chercher\")\n var submit = this._createReverseGeocodingSubmitFormElement();\n reverseGeocodingForm.appendChild(submit);\n\n reverseGeocodingPanelDiv.appendChild(reverseGeocodingForm);\n\n // waiting\n var waiting = this._waitingContainer = this._createReverseGeocodingWaitingElement();\n reverseGeocodingPanelDiv.appendChild(waiting);\n\n // results (dans le panel)\n var resultsPanel = this._resultsContainer = this._createReverseGeocodingResultsPanelElement();\n var reverseGeocodingResultsList = this._resultsListContainer = this._createReverseGeocodingResultsListElement();\n resultsPanel.appendChild(reverseGeocodingResultsList);\n reverseGeocodingPanelDiv.appendChild(resultsPanel);\n\n container.appendChild(reverseGeocodingPanel);\n\n logger.log(container);\n\n return container;\n }\n\n // ################################################################### //\n // ################### Map interactions management ################### //\n // ################################################################### //\n\n /**\n * this method is called by this.setMap,\n * or by this.onShowReverseGeocodingClick,\n * and calls method corresponding to current delimitation, if widget is not collapsed.\n *\n * @param {ol.Map} map - control map.\n * @private\n */\n _activateMapInteraction (map) {\n if (!this.collapsed) {\n // 1. Creation de la couche vectorielle sur laquelle on va dessiner\n if (this._inputFeaturesLayer == null) {\n // on crée une collection, qui accueillera les points saisis sur la carte par les interactions,\n // sous formes de features (dans une couche vectorielle).\n // on les stocke de sorte à pouvoir les supprimer facilement\n this._inputFeatures = new Collection();\n\n // on crée la couche qui va accueillir les features\n this._inputFeaturesSource = new VectorSource({\n features : this._inputFeatures\n });\n this._inputFeaturesLayer = new VectorLayer({\n source : this._inputFeaturesSource,\n style : new Style({\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.3)\"\n }),\n stroke : new Stroke({\n color : \"rgba(0, 183, 152, 0.8)\",\n width : 3\n }),\n image : new Icon({\n src : Markers[\"turquoiseBlue\"],\n anchor : [0.5, 1]\n })\n })\n });\n // on rajoute le champ gpResultLayerId permettant d'identifier une couche crée par le composant. (pour layerSwitcher par ex)\n this._inputFeaturesLayer.gpResultLayerId = \"reverseGeocoding\";\n // on ajoute la couche à la carte\n map.addLayer(this._inputFeaturesLayer);\n }\n\n // 2. Création de l'interaction de dessin, selon le type de délimitation sélectionné\n var delimitation = this._currentGeocodingDelimitation.toLowerCase();\n switch (delimitation) {\n case \"point\":\n this._activatePointInteraction(map);\n break;\n case \"circle\":\n this._activateCircleInteraction(map);\n break;\n case \"extent\":\n this._activateBoxInteraction(map);\n break;\n default:\n break;\n }\n\n // 3. Si un layer switcher est présent dans la carte, on lui affecte des informations pour cette couche\n map.getControls().forEach(\n (control) => {\n if (control instanceof LayerSwitcher) {\n // un layer switcher est présent dans la carte\n var layerId = this._inputFeaturesLayer.gpLayerId;\n // on n'ajoute des informations que s'il n'y en a pas déjà (si le titre est le numéro par défaut)\n if (control._layers[layerId].title === layerId) {\n control.addLayer(\n this._inputFeaturesLayer, {\n title : this.options.layerDescription.title,\n description : this.options.layerDescription.description\n }\n );\n control.setRemovable(this._inputFeaturesLayer, false);\n }\n }\n }\n );\n }\n };\n\n /**\n * this method is called by this._activateMapInteraction,\n * and creates map point drawing interaction.\n *\n * @param {ol.Map} map - control map.\n * @private\n */\n _activatePointInteraction (map) {\n // interaction permettant de dessiner un point\n this._mapInteraction = new DrawInteraction({\n style : new Style({\n image : new Circle({\n radius : 0,\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.8)\"\n })\n })\n }),\n type : (\"Point\"),\n source : this._inputFeaturesSource\n });\n\n this._mapInteraction.on(\n \"drawstart\",\n (e) => {\n logger.log(\"on drawstart \", e);\n\n // on efface les points qui ont pu être saisis précédemment (on vide la collection des features de la couche)\n this._inputFeatures.clear();\n\n // on récupère les coordonnées du point qui vient d'être saisi\n this._onDrawStart(e, \"point\");\n }\n );\n\n this._mapInteraction.on(\n \"drawend\",\n (e) => {\n logger.log(\"on drawend\", e);\n\n // on récupère le rayon du cercle qui vient d'être tracé\n if (e.feature && e.feature.getGeometry) {\n this._requestGeom = {\n type : \"Point\",\n coordinates : [\n this._requestPosition.lon,\n this._requestPosition.lat\n ]\n };\n }\n }\n );\n\n map.addInteraction(this._mapInteraction);\n this._setCursor(\"crosshair\", map);\n }\n\n /**\n * this method is called by this._activateMapInteraction,\n * and creates map circle drawing interaction.\n *\n * @param {ol.Map} map - control map.\n * @private\n */\n _activateCircleInteraction (map) {\n // interaction permettant de dessiner un cercle\n this._mapInteraction = new DrawInteraction({\n style : new Style({\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.3)\"\n }),\n stroke : new Stroke({\n color : \"rgba(0, 183, 152, 0.8)\",\n width : 3\n }),\n image : new Circle({\n radius : 4,\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.8)\"\n })\n })\n }),\n type : (\"Circle\"),\n source : this._inputFeaturesSource,\n geometryFunction : function (coordinates, geometry) {\n const center = coordinates[0];\n const last = coordinates[coordinates.length - 1];\n const dx = center[0] - last[0];\n const dy = center[1] - last[1];\n const maxRadius = 500;\n const radius = Math.min(Math.sqrt(dx * dx + dy * dy), maxRadius);\n if (!geometry) {\n geometry = new ol.geom.Circle(center, radius);\n } else {\n geometry.setCenterAndRadius(center, radius);\n }\n return geometry;\n }\n });\n\n this._mapInteraction.on(\n \"drawstart\",\n (e) => {\n logger.log(\"on drawstart \", e);\n // on efface les points qui ont pu être saisis précédemment (on vide la collection des features de la couche)\n this._inputFeatures.clear();\n // on récupère les coordonnées du centre du cercle = premier point du tracé\n this._onDrawStart(e, \"circle\");\n }\n );\n\n this._mapInteraction.on(\n \"drawend\",\n (e) => {\n logger.log(\"on drawend\", e);\n\n // on récupère le rayon du cercle qui vient d'être tracé\n if (e.feature && e.feature.getGeometry) {\n var radius = e.feature.getGeometry().getRadius();\n // et on le stocke comme filtre pour la requête\n this._requestGeom = {};\n this._requestGeom.type = \"Circle\";\n this._requestGeom.radius = radius;\n if (this._requestPosition) {\n this._requestGeom.coordinates = [\n this._requestPosition.lon,\n this._requestPosition.lat\n ];\n }\n logger.log(\"circle radius : \", radius);\n }\n }\n );\n\n map.addInteraction(this._mapInteraction);\n }\n\n /**\n * this method is called by this._activateMapInteraction,\n * and creates map box drawing interaction.\n *\n * @param {ol.Map} map - control map.\n * @private\n */\n _activateBoxInteraction (map) {\n // info : il n'y a pas de geometry de type rectangle, donc on va créer un objet de type \"LineString\",\n // avec seulement 2 points qui formeront les extrémités du rectangle.\n // on aura donc une géométrie LineString avec 5 coordonnées : start, point2, end, point4, start,\n // où les coordonnées de point2 et point4 sont calculées à partir de start et end, et start est répété à la fin pour fermer la géométrie.\n\n // function to draw rectangle with only 2 points\n var geometryFunction = function (coordinates, geometry) {\n if (!geometry) {\n geometry = new Polygon([]);\n }\n var start = coordinates[0];\n var end = coordinates[1];\n const dx = start[0] - end[0];\n const dy = start[1] - end[1];\n const maxLength = 1000;\n const lengthX = Math.max(-maxLength, Math.min(dx, maxLength));\n const lengthY = Math.max(-maxLength, Math.min(dy, maxLength));\n // on crée les 5 coordonnées de la ligne à partir des 2 points saisis.\n geometry.setCoordinates([\n [start, [start[0], start[1] - lengthY], [start[0] - lengthX, start[1] - lengthY], [start[0] - lengthX, start[1]], start]\n ]);\n return geometry;\n };\n\n // interaction permettant de dessiner un rectangle (= LineString de 5 points, à partir de 2 points saisis)\n this._mapInteraction = new DrawInteraction({\n style : new Style({\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.3)\"\n }),\n stroke : new Stroke({\n color : \"rgba(0, 183, 152, 0.8)\",\n width : 3\n }),\n image : new Circle({\n radius : 4,\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.8)\"\n })\n })\n }),\n type : (\"LineString\"),\n source : this._inputFeaturesSource,\n maxPoints : 2,\n geometryFunction : geometryFunction\n });\n\n this._mapInteraction.on(\n \"drawstart\",\n (e) => {\n logger.log(\"on drawstart\", e);\n // on efface les points qui ont pu être saisis précédemment (on vide la collection des features de la couche)\n this._inputFeatures.clear();\n // on récupère les coordonnées du premier point du tracé\n this._onDrawStart(e, \"polygon\");\n }\n );\n\n this._mapInteraction.on(\n \"drawend\",\n (e) => {\n logger.log(\"on drawend\", e);\n // on va récupérer les coordonnées du rectangle qui vient d'être tracé\n this._onBoxDrawEnd(e);\n }\n );\n\n map.addInteraction(this._mapInteraction);\n }\n\n /**\n * remove draw interaction from map (if exists)\n *\n * @param {ol.Map} map - control map.\n * @private\n */\n _removeMapInteraction (map) {\n if (this._mapInteraction != null) {\n map.removeInteraction(this._mapInteraction);\n this._mapInteraction = null;\n }\n this._setCursor();\n }\n\n /**\n * this method is called by event 'drawstart' on map point or circle drawing interaction\n * (cf. this._activatePointInteraction), and it gets map click coordinates.\n * this point is saved as a parameter for reverse Geocode service.\n *\n * @param {Object} e - HTMLElement\n * @param {String} type - geometry type : \"point\" or \"circle\"\n * @private\n */\n _onDrawStart (e, type) {\n var coordinate;\n if (e.feature && e.feature.getGeometry) {\n var geometry = e.feature.getGeometry();\n if (type === \"point\") {\n coordinate = geometry.getCoordinates();\n }\n if (type === \"circle\") {\n coordinate = geometry.getCenter();\n }\n if (type === \"polygon\") {\n coordinate = geometry.getFirstCoordinate();\n }\n }\n if (!coordinate) {\n return;\n }\n\n var crs;\n if (this.options.reverseGeocodeOptions && this.options.reverseGeocodeOptions.srs) {\n crs = this.options.reverseGeocodeOptions.srs;\n } else {\n var map = this.getMap();\n if (!map || !map.getView()) {\n return;\n }\n crs = map.getView().getProjection();\n }\n\n var geoCoordinate = olTransformProj(coordinate, crs, \"EPSG:4326\");\n this._requestPosition = {\n lon : geoCoordinate[0],\n lat : geoCoordinate[1]\n };\n logger.log(\"position coordinates : \", this._requestPosition);\n }\n\n /**\n * this method is called by event 'drawend' on map box drawing interaction\n * (cf. this._activateBoxInteraction), and it gets geometry coordinates,\n * to be saved as a filter parameter for reverse Geocode service.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onBoxDrawEnd (e) {\n // on va récupérer les coordonnées du rectangle qui vient d'être tracé\n if (e.feature && e.feature.getGeometry) {\n // info: coordinates est un tableau [start, point2, end, point4, start]\n // car c'est une linestring donc on a 5 coordonnées pour boucler\n var coordinates = e.feature.getGeometry().getCoordinates()[0];\n var start = coordinates[0];\n var end = coordinates[2];\n\n var crs;\n if (this.options.reverseGeocodeOptions && this.options.reverseGeocodeOptions.srs) {\n crs = this.options.reverseGeocodeOptions.srs;\n } else {\n var map = this.getMap();\n if (!map || !map.getView()) {\n return;\n }\n crs = map.getView().getProjection();\n }\n\n // on reprojette les coordonnées des deux extrémités du rectangle (start et end)\n var startGeoCoordinate = olTransformProj(start, crs, \"EPSG:4326\");\n var endGeoCoordinate = olTransformProj(end, crs, \"EPSG:4326\");\n\n var bbox = {};\n // on récupère les valeurs left, right, top et bottom, pour le filtre bbox du service reverseGeocode\n if (startGeoCoordinate[0] < endGeoCoordinate[0]) {\n bbox.left = startGeoCoordinate[0];\n bbox.right = endGeoCoordinate[0];\n } else {\n bbox.left = endGeoCoordinate[0];\n bbox.right = startGeoCoordinate[0];\n }\n if (startGeoCoordinate[1] < endGeoCoordinate[1]) {\n bbox.bottom = startGeoCoordinate[1];\n bbox.top = endGeoCoordinate[1];\n } else {\n bbox.bottom = endGeoCoordinate[1];\n bbox.top = startGeoCoordinate[1];\n }\n\n this._requestGeom = {\n type : \"Polygon\",\n coordinates : [[\n [bbox.left, bbox.top],\n [bbox.left, bbox.bottom],\n [bbox.right, bbox.bottom],\n [bbox.right, bbox.top],\n [bbox.left, bbox.top]\n ]]\n };\n\n logger.log(\"searchGeometry filter : \", this._requestGeom);\n }\n }\n\n /**\n * this change the cursor of the map when entering a point.\n *\n * @param {String} cursor - cursor style\n * @param {ol.Map} map - control map (optional)\n * @private\n */\n _setCursor (cursor, map) {\n map = map || this.getMap();\n if (!map) {\n return;\n }\n var div = map.getTargetElement();\n\n if (cursor) {\n div.style.cursor = cursor;\n } else {\n div.style.cursor = null;\n }\n }\n\n // ################################################################### //\n // ##################### Reverse Geocoding request ################### //\n // ################################################################### //\n\n /**\n * this methode is called by this.onReverseGeocodingSubmit method,\n * it generates and sends reverse geocode request, then displays results\n *\n * @private\n */\n _reverseGeocodingRequest () {\n var map = this.getMap();\n\n // on construit les options pour la requête\n this._requestOptions = this._getReverseGeocodingRequestOptions();\n\n // retrait de l'interaction sur la map pendant l'attente (et l'affichage des résultats)\n this._removeMapInteraction(map);\n // affichage d'une patience pendant l'attente\n this._displayWaitingContainer();\n\n // envoi de la requête\n Gp.Services.reverseGeocode(this._requestOptions);\n }\n\n /**\n * this methode is called by this._reverseGeocodingRequest method,\n * and returns options object for Gp.Services.reverseGeocode request\n *\n * @returns {Object} requestOptions - reverse geocode options\n * @private\n */\n _getReverseGeocodingRequestOptions () {\n var map = this.getMap();\n\n // on recupere les éventuelles options du service passées par l'utilisateur\n var reverseGeocodeOptions = this.options.reverseGeocodeOptions;\n\n // on crée les options pour le service reverseGeocode\n var context = this;\n if (typeof this.options.ssl !== \"boolean\") {\n this.options.ssl = true;\n }\n // gestion des callback\n var bOnFailure = !!(reverseGeocodeOptions.onFailure !== null && typeof reverseGeocodeOptions.onFailure === \"function\"); // cast variable to boolean\n var bOnSuccess = !!(reverseGeocodeOptions.onSuccess !== null && typeof reverseGeocodeOptions.onSuccess === \"function\");\n\n var requestOptions = {\n apiKey : reverseGeocodeOptions.apiKey || this.options.apiKey,\n ssl : this.options.ssl,\n position : this._requestPosition,\n filterOptions : {\n type : [this._currentGeocodingType]\n },\n srs : \"CRS:84\",\n returnFreeForm : false,\n maximumResponses : reverseGeocodeOptions.maximumResponses || 18,\n timeOut : reverseGeocodeOptions.timeOut || 30000,\n // protocol : reverseGeocodeOptions.protocol || \"XHR\",\n // callback onSuccess\n onSuccess : function (response) {\n if (response.locations) {\n logger.log(\"reverseGeocode results : \", response.locations);\n context._displayGeocodedLocations(response.locations);\n }\n if (bOnSuccess) {\n reverseGeocodeOptions.onSuccess.call(context, response.locations);\n }\n },\n // callback onFailure\n onFailure : function (error) {\n // FIXME mise à jour du controle mais le service ne repond pas en 200 !?\n\n // on cache la patience\n context._hideWaitingContainer();\n\n // suppression d'éventuels résultats précédents\n context._clearResults();\n // on efface les points qui ont été saisis précédemment\n context._clearInputFeatures();\n\n // et on réactive l'interaction sur la map\n context._activateMapInteraction(map);\n logger.log(error.message);\n\n if (bOnFailure) {\n reverseGeocodeOptions.onFailure.call(context, error);\n }\n }\n };\n\n // on récupère d'éventuels filtres\n if (this._requestGeom.type.toLowerCase() === \"circle\") {\n // FIXME : a confirmer en fonction du service !\n if (this._requestGeom.radius > 500) {\n logger.log(\"INFO : initial circle radius (\" + this._requestGeom.radius + \") limited to 1000m.\");\n this._requestGeom.radius = 500;\n }\n requestOptions.searchGeometry = this._requestGeom;\n } else if (this._requestGeom.type.toLowerCase() === \"polygon\") {\n // FIXME : geom bbox max length 1000m !\n requestOptions.searchGeometry = this._requestGeom;\n } else if (this._requestGeom.type.toLowerCase() === \"point\") {\n if (this._currentGeocodingType === \"StreetAddress\") {\n requestOptions.searchGeometry = {\n type : \"Circle\",\n radius : 50,\n coordinates : this._requestGeom.coordinates\n };\n requestOptions.maximumResponses = 1;\n } else {\n requestOptions.searchGeometry = this._requestGeom;\n }\n }\n\n logger.log(\"reverseGeocode request options : \", requestOptions);\n\n return requestOptions;\n }\n\n /**\n * this method is called by this._reverseGeocodingRequest() (in case of reverse geocode success)\n * and display results : in both container list and map\n *\n * @param {Array} locations - array of geocoded locations (reverse geocode results)\n * @private\n */\n _displayGeocodedLocations (locations) {\n // 1. on vide les résultats précédents\n this._clearResults();\n this._reverseGeocodingLocations = locations;\n\n /**\n * event triggered when the compute is finished\n *\n * @event reversegeocode:compute\n * @property {Object} type - event\n * @property {Object} target - instance ReverseGeocode\n * @example\n * ReverseGeocode.on(\"reversegeocode:compute\", function (e) {\n * console.log(e.target.getData());\n * })\n */\n this.dispatchEvent({\n type : \"reversegeocode:compute\"\n });\n\n // 2. cache de la patience et du formulaire\n this._formContainer.className = \"GPelementHidden gpf-hidden\";\n this._hideWaitingContainer();\n // affichage de la div des résultats (et changement du titre)\n this._panelTitleContainer.innerHTML = \"Résultats de la recherche\";\n this._returnPictoContainer.classList.remove(\"GPelementHidden\");\n this._returnPictoContainer.classList.remove(\"gpf-hidden\");\n this._resultsContainer.className = \"GPpanel gpf-panel gpf-panel-reverse\";\n\n // 3. ajout de la liste des résultats dans le container des resultats\n this._fillGeocodedLocationListContainer(locations);\n\n // 4. affichage des résultats sur la carte (+ zoom ?)\n this._displayGeocodedLocationsOnMap(locations);\n }\n\n // ################################################################### //\n // ############################# results list ######################## //\n // ################################################################### //\n\n /**\n * this method is called by this._displayGeocodedLocations()\n * and fills the container with results list\n *\n * @param {Array} locations - array of geocoded locations (reverse geocode results)\n * @private\n */\n _fillGeocodedLocationListContainer (locations) {\n // ajout de la liste des résultats dans le container des resultats\n for (var i = 0; i < locations.length; i++) {\n var location = locations[i];\n logger.log(location);\n // on récupère la description à afficher dans la liste\n var locationDescription = this._fillGeocodedLocationDescription(location);\n // on ajoute chaque résutat à la liste\n if (locationDescription && locationDescription.length !== 0) {\n this._createReverseGeocodingResultElement(locationDescription, i);\n }\n }\n }\n\n /**\n * this method is called by this._fillGeocodedLocationListContainer()\n * and fills location description (String), depending on matchType\n *\n * @param {Object} location - geocoded location (from reverse geocode results)\n * @returns {String} locationDescription - geocoded location description to be displayed\n * @private\n */\n _fillGeocodedLocationDescription (location) {\n if (!location || !location.placeAttributes) {\n return;\n }\n var attr = location.placeAttributes;\n\n var locationDescription = \"\";\n // on sélectionne les infos à afficher selon le type\n switch (location.type) {\n case \"StreetAddress\":\n if (attr.street) {\n locationDescription += attr.housenumber ? attr.housenumber + \" \" : \"\";\n locationDescription += attr.street + \", \";\n }\n locationDescription += attr.postcode + \" \" + attr.city;\n break;\n\n case \"PositionOfInterest\":\n locationDescription += attr.toponym;\n if (attr.postcode && attr.postcode.length === 1) {\n locationDescription += \", \" + attr.postcode[0];\n }\n locationDescription += \" (\" + attr.category.join(\",\") + \")\";\n break;\n\n case \"CadastralParcel\":\n locationDescription += attr.id;\n locationDescription += attr.city ? \" (\" + attr.city + \")\" : \"\";\n break;\n\n default:\n locationDescription += attr.city ? attr.city : \"\";\n break;\n };\n\n return locationDescription;\n }\n\n // ################################################################### //\n // ######################## map results (markers) #################### //\n // ################################################################### //\n\n /**\n * this method is called by this._displayGeocodedLocations()\n * and display locations in map (markers)\n *\n * @param {Object} locations - geocoded locations (reverse geocode result)\n * @private\n */\n _displayGeocodedLocationsOnMap (locations) {\n if (this._reverseGeocodingLocations.length !== 0) {\n var map = this.getMap();\n\n // 1. création de la couche où seront ajoutés les résultats\n this._createResultsLayer();\n // ajout de chaque résultat à la couche (marker)\n for (var i = 0; i < locations.length; i++) {\n this._addResultFeature(locations[i], i);\n }\n\n // 2. Zoom sur l'étendue des résultats (features)\n if (this._resultsFeatures.getLength() > 1) {\n // TODO : appeler fonction commune\n if (this._resultsFeaturesSource && this._resultsFeaturesSource.getExtent) {\n var extent = this._resultsFeaturesSource.getExtent();\n map.getView().fit(extent, map.getSize());\n }\n } else {\n // dans le cas où on n'a qu'un seul résultat, l'étendue n'est pas définie, on zoome donc sur le résulat\n var feature = this._resultsFeatures.item(0);\n var coords = feature.getGeometry().getCoordinates();\n map.getView().setCenter(coords);\n map.getView().setZoom(17);\n }\n\n // 3. ajout des interactions (survol, click)\n // au survol : modification des styles (marker et list)\n this._resultsHoverInteraction = new SelectInteraction({\n condition : eventPointerMove,\n layers : [this._resultsFeaturesLayer]\n });\n this._resultsHoverInteraction.on(\n \"select\",\n (e) => this._onResultsFeatureMouseOver(e)\n );\n map.addInteraction(this._resultsHoverInteraction);\n\n // au click : affichage popup\n this._resultsSelectInteraction = new SelectInteraction({\n layers : [this._resultsFeaturesLayer]\n });\n this._resultsSelectInteraction.on(\n \"select\",\n (e) => this._onResultsFeatureSelect(e)\n );\n map.addInteraction(this._resultsSelectInteraction);\n\n // 4. Si un layer switcher est présent dans la carte, on lui affecte des informations pour cette couche\n var geocodeType = \"\";\n switch (this._currentGeocodingType) {\n case \"StreetAddress\":\n geocodeType = \"adresses\";\n break;\n case \"PositionOfInterest\":\n geocodeType = \"toponymes\";\n break;\n case \"CadastralParcel\":\n geocodeType = \"parcelles cadastrales\";\n break;\n default:\n break;\n }\n map.getControls().forEach(\n (control) => {\n if (control instanceof LayerSwitcher) {\n // un layer switcher est présent dans la carte\n var layerId = this._resultsFeaturesLayer.gpLayerId;\n // on n'ajoute des informations que s'il n'y en a pas déjà (si le titre est le numéro par défaut)\n if (control._layers[layerId].title === layerId) {\n control.addLayer(\n this._resultsFeaturesLayer, {\n title : \"Résultats de la recherche inverse\",\n description : \"Résultats de la recherche inverse sur les \" + geocodeType\n }\n );\n control.setRemovable(this._resultsFeaturesLayer, false);\n }\n }\n }\n );\n }\n }\n\n /**\n * this method is called by this._displayGeocodedLocations()\n * and creates result layer (where geocoded locations will be displayed)\n *\n * @private\n */\n _createResultsLayer () {\n var map = this.getMap();\n\n this._resultsFeatures = new Collection();\n\n // on crée la couche qui va accueillir les features\n this._resultsFeaturesSource = new VectorSource({\n features : this._resultsFeatures\n });\n this._resultsFeaturesLayer = new VectorLayer({\n source : this._resultsFeaturesSource\n });\n // on rajoute le champ gpResultLayerId permettant d'identifier une couche crée par le composant. (pour layerSwitcher par ex)\n this._resultsFeaturesLayer.gpResultLayerId = \"reverseGeocodingResults\";\n // on ajoute la couche à la carte\n map.addLayer(this._resultsFeaturesLayer);\n }\n\n /**\n * this method is called by this._displayGeocodedLocations()\n * and displays locations in map (markers) : add new feature to results layer\n *\n * @param {Object} location - geocoded location (reverse geocode result)\n * @param {Number} i - geocoded location index in response list\n * @private\n */\n _addResultFeature (location, i) {\n var map = this.getMap();\n // récupération de la position\n var position = [location.position.lon, location.position.lat];\n if (position.length === 0) {\n return;\n }\n var view = map.getView();\n var mapProj = view.getProjection().getCode();\n if (mapProj !== \"EPSG:4326\") {\n // on retransforme les coordonnées de la position dans la projection de la carte\n position = olTransformProj(position, \"EPSG:4326\", mapProj);\n }\n\n // on ajoute le résultat à la collection de points existantes (composant la couche vectorielle this._inputFeaturesLayer)\n var feature = new Feature({\n geometry : new Point(position)\n });\n feature.setStyle(this._resultsDefaultStyle);\n feature.setId(i);\n feature.setProperties({\n location : location,\n popupContent : this._fillPopupContent(location)\n });\n this._resultsFeatures.push(feature);\n }\n\n /**\n * this method is called by this._addResultFeature()\n * and fills popup content (to be displayed on marker click) for a given geocoded location\n *\n * @param {Object} location - geocoded location (reverse geocode result)\n * @returns {String} popupContent - text to be displayed in popup\n * @private\n */\n _fillPopupContent (location) {\n var popupContent = \"
      \";\n\n var attributes = location.placeAttributes;\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr)) {\n if (attr !== \"trueGeometry\" && attr !== \"extraFields\" && attr !== \"houseNumberInfos\" && attr !== \"_count\") {\n popupContent += \"
    • \";\n popupContent += \"\" + attr.toUpperCase() + \" : \";\n popupContent += attributes[attr];\n popupContent += \"
    • \";\n }\n }\n }\n popupContent += \"
    \";\n\n return popupContent;\n }\n\n /**\n * this method is called on 'pointerMove' on this._resultsFeaturesLayer (ol.interaction.Select)\n * (cf. this._displayGeocodedLocationsOnMap() )\n * and highlights result in list container\n *\n * @param {Object} e - on select event\n * @private\n */\n _onResultsFeatureMouseOver (e) {\n var f;\n\n // si on survole un résultat, on change son style (marker)\n if (e.selected.length !== 0) {\n // on change le style du marker (red)\n f = e.selected[0];\n f.setStyle(this._resultsSelectedStyle);\n\n // on surligne le résultat correspondant dans la liste des résultats\n if (f.getId() != null) {\n var selectedResultDiv = document.getElementById(\"GPreverseGeocodedLocation_\" + f.getId() + \"-\" + this._uid);\n if (selectedResultDiv && selectedResultDiv.classList) {\n selectedResultDiv.classList.add(\"GPlocationHighlight\");\n }\n }\n document.getElementById(\"GPreverseGeocodedLocation_\" + f.getId() + \"-\" + this._uid);\n }\n\n // si on déselectionne un résultat (mouseout), on rétablit un style normal pour le marker\n if (e.deselected.length !== 0) {\n // on change le style du marker (lightOrange)\n f = e.deselected[0];\n f.setStyle(this._resultsDefaultStyle);\n\n // on rétablit un style normal pour le résultat correspondant dans la liste des résultats\n var deSelectedResultDiv = document.getElementById(\"GPreverseGeocodedLocation_\" + f.getId() + \"-\" + this._uid);\n if (deSelectedResultDiv && deSelectedResultDiv.classList) {\n deSelectedResultDiv.classList.remove(\"GPlocationHighlight\");\n }\n }\n }\n\n /**\n * this method is called on 'click' on this._resultsFeaturesLayer (ol.interaction.Select)\n * (cf. this._displayGeocodedLocationsOnMap() )\n * and sets a popup with feature information\n *\n * @param {Object} e - on select event\n * @private\n */\n _onResultsFeatureSelect (e) {\n var map = this.getMap();\n if (e.selected.length !== 0) {\n // si on a sélectionné un marker, on lui ajoute une popup\n var f = e.selected[0];\n this._popupContent.innerHTML = f.getProperties().popupContent;\n\n if (!this._popupOverlay) {\n // ajout de la popup a la carte comme un overlay\n this._popupOverlay = new Overlay({\n element : this._popupDiv,\n positioning : \"bottom-center\",\n position : e.mapBrowserEvent.coordinate\n });\n map.addOverlay(this._popupOverlay);\n } else {\n // si l'overlay est déjà créé, on modifie juste sa position\n this._popupOverlay.setPosition(e.mapBrowserEvent.coordinate);\n }\n\n /**\n * event triggered when an element of the results is clicked\n *\n * @event reversegeocode:onclickresult\n * @property {Object} type - event\n * @property {Object} location - location\n * @property {Object} target - instance ReverseGeocode\n * @example\n * Reverse.on(\"reverse:onclickresult\", function (e) {\n * console.log(e.location);\n * })\n */\n this.dispatchEvent({\n type : \"reversegeocode:onclickresult\",\n location : f.getProperties().location\n });\n } else {\n // si aucun troncon n'est sélectionné (click à côté du tracé),\n // on fait disparaitre la popup si elle existe\n if (this._popupOverlay != null) {\n this._popupOverlay.setPosition(undefined);\n }\n }\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on 'GPshowReverseGeocodingPicto' tag label\n * (cf. ReverseGeocodeDOM._createShowReverseGeocodingPictoElement), and it cleans the component\n * when it's closed.\n *\n * @param { event } e évènement associé au clic\n * @private\n */\n onShowReverseGeocodingClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n if (!map) {\n return;\n }\n // on supprime toutes les interactions\n Interactions.unset(map);\n var opened = this._showReverseGeocodingButton.ariaPressed;\n this.collapsed = !(opened === \"true\");\n // info : on génère nous même l'evenement OpenLayers de changement de propriété\n // (utiliser ol.control.ReverseGeocode.on(\"change:collapsed\", function ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n\n if (!this._waiting && !this._reverseGeocodingLocations.length) {\n // Cas 1 : input panel (ni en attente, ni sur le panel des résultats)\n if (this.collapsed) {\n // on remet à zéro = on efface les géométries + interactions + valeurs stockées\n // suppression des résultats précédents\n this._clearResults();\n // on efface les points qui ont pu être saisis précédemment\n this._clearInputFeatures();\n // on supprime l'éventuelle précédente interaction\n this._removeMapInteraction(map);\n // on retire aussi la couche de saisie de la zone de recherche à la fermeture du widget\n if (this._inputFeaturesLayer != null) {\n map.removeLayer(this._inputFeaturesLayer);\n this._inputFeaturesLayer = null;\n this._inputFeaturesSources = null;\n this._inputFeatures = null;\n }\n } else {\n // on réactive l'interaction\n this._activateMapInteraction(map);\n }\n }\n // info : si on est en attente ou sur le panel des résultats : on ne fait rien.\n }\n\n /**\n * this method is called by event 'change' on 'GPreverseGeocodingCode' tag select\n * (cf. ReverseGeocodeDOM._createReverseGeocodingFormModeChoiceGeocodingTypeElement).\n * this value is saved as a parameter for reverseGeocode service.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onReverseGeocodingTypeChange (e) {\n var idx = e.target.selectedIndex;\n var value = e.target.options[idx].value;\n\n if (!value) {\n return;\n }\n logger.log(value);\n this._currentGeocodingType = value;\n }\n\n /**\n * this method is called by event 'change' on 'GPreverseGeocodingCode' tag select\n * (cf. ReverseGeocodeDOM._createReverseGeocodingFormModeChoiceGeocodingDelimitationElement).\n * this value is saved as a parameter for reverseGeocode service.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onReverseGeocodingDelimitationChange (e) {\n var idx = e.target.selectedIndex;\n var value = e.target.options[idx].value;\n\n if (!value) {\n return;\n }\n\n logger.log(value);\n this._currentGeocodingDelimitation = value;\n\n // on met à jour l'interaction de la map en fonction de la nouvelle délimitation\n var map = this.getMap();\n // on supprime l'interaction précédente, ainsi que les géométries et valeurs stockées (filtres, position)\n this._clearInputFeatures();\n // on supprime l'éventuelle précédente interaction\n this._removeMapInteraction(map);\n // on crée une nouvelle interaction\n this._activateMapInteraction(map);\n }\n\n /**\n * this method is called by event 'click' on 'GPreverseGeocodingReturnPicto' div\n * (cf. ReverseGeocodeDOM._createReverseGeocodingPanelReturnPictoElement),\n * and clear geocoded location (from both list container and map)\n *\n * @private\n */\n onGPreverseGeocodingReturnPictoClick () {\n // suppression des résultats précédents\n this._clearResults();\n // on efface les points qui ont pu être saisis précédemment\n this._clearInputFeatures();\n // et on réactive l'interaction sur la map\n this._activateMapInteraction(this.getMap());\n }\n\n /**\n * this methode is called by event 'submit' on reverseGeocoding form ('GPreverseGeocodingForm')\n * (cf. ReverseGeocodeDOM._createReverseGeocodingPanelFormElement),\n * it checks reverse geocode mandatory parameters,\n * then call this._reverseGeocodingRequest() to generate and send request\n *\n * @private\n */\n onReverseGeocodingSubmit () {\n // le paramètre position est obligatoire\n if (!this._requestPosition) {\n logger.log(\"missing position\");\n return;\n }\n\n this._reverseGeocodingRequest();\n }\n\n /**\n * this method is called by event 'click' on 'GPreverseGeocodedLocation_' div\n * (cf. ReverseGeocodeDOM._createReverseGeocodingResultElement),\n * and zoom to location ?\n * TODO\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onReverseGeocodingResultClick (e) {\n // récupération de l'id du résultat survolé\n var tagid = e.target.id; // ex GPreverseGeocodedLocation_21\n var idx = tagid.substring(tagid.indexOf(\"_\") + 1); // ex. 21\n\n var f = this._resultsFeaturesSource.getFeatureById(parseInt(idx, 10));\n\n this.dispatchEvent({\n type : \"reversegeocode:onclickresult\",\n location : f.getProperties().location\n });\n }\n\n /**\n * this method is called by event 'mouseover' on 'GPreverseGeocodedLocation_' div\n * (cf. ReverseGeocodeDOM._createReverseGeocodingResultElement),\n * and changes style of matching marker on map (selected)\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onReverseGeocodingResultMouseOver (e) {\n // récupération de l'id du résultat survolé\n var tagid = e.target.id; // ex GPreverseGeocodedLocation_21\n var idx = tagid.substring(tagid.indexOf(\"_\") + 1); // ex. 21\n\n // on passe le texte en gras\n if (e.target.classList) {\n e.target.classList.add(\"GPlocationHighlight\");\n }\n\n if (!this._resultsFeaturesSource) {\n return;\n }\n\n // on récupère l'entité correspondante au résultat survolé\n var f = this._resultsFeaturesSource.getFeatureById(parseInt(idx, 10));\n // et on lui affecte un nouveau style\n f.setStyle(this._resultsSelectedStyle);\n }\n\n /**\n * this method is called by event 'mouseout' on 'GPreverseGeocodedLocation_' div\n * (cf. ReverseGeocodeDOM._createReverseGeocodingResultElement),\n * and changes style of matching marker on map (default)\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onReverseGeocodingResultMouseOut (e) {\n // récupération de l'id du résultat survolé\n var tagid = e.target.id; // ex GProuteResultsDetailsInstruction_125\n var idx = tagid.substring(tagid.indexOf(\"_\") + 1); // ex. 125\n\n // on repasse le texte en style normal\n if (e.target.classList) {\n e.target.classList.remove(\"GPlocationHighlight\");\n }\n\n if (!this._resultsFeaturesSource) {\n return;\n }\n // on récupère l'entité correspondante au résultat qui était survolé\n var f = this._resultsFeaturesSource.getFeatureById(parseInt(idx, 10));\n // et on lui réaffecte un style normal\n f.setStyle(this._resultsDefaultStyle);\n }\n\n // ################################################################### //\n // ################################ clean ############################ //\n // ################################################################### //\n\n /**\n * this method clears previous location results\n *\n * @private\n */\n _clearResults () {\n var map = this.getMap();\n\n this._reverseGeocodingLocations = [];\n // on vide le container avec la liste des résultats\n if (this._resultsListContainer) {\n while (this._resultsListContainer.firstChild) {\n this._resultsListContainer.removeChild(this._resultsListContainer.firstChild);\n }\n }\n // on retire la couche des résultats\n if (this._resultsFeaturesLayer) {\n map.removeLayer(this._resultsFeaturesLayer);\n this._resultsFeaturesLayer = null;\n }\n // on retire l'overlay de la popup de la carte\n if (this._popupOverlay != null) {\n map.removeOverlay(this._popupOverlay);\n this._popupOverlay = null;\n }\n // on retire les interactions sur les markers (select et mouseover)\n if (this._resultsSelectInteraction != null) {\n map.removeInteraction(this._resultsSelectInteraction);\n this._resultsSelectInteraction = null;\n }\n if (this._resultsHoverInteraction != null) {\n map.removeInteraction(this._resultsHoverInteraction);\n this._resultsHoverInteraction = null;\n }\n }\n\n /**\n * this method clears previous input features (features, layer, position and filters)\n *\n * @private\n */\n _clearInputFeatures () {\n // on efface les points qui ont pu être saisis précédemment (on vide la collection des features de la couche)\n if (this._inputFeatures) {\n this._inputFeatures.clear();\n }\n\n // on supprime les valeurs stockées\n this._requestGeom = null;\n this._requestPosition = null;\n }\n\n /**\n * this method displays waiting container and sets a timeout\n *\n * @private\n */\n _displayWaitingContainer () {\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerVisible gpf-waiting gpf-waiting--visible\";\n this._waiting = true;\n\n // mise en place d'un timeout pour réinitialiser le panel (cacher la patience)\n // si on est toujours en attente (si la requête est bloquée par exemple)\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n var context = this;\n this._timer = setTimeout(function () {\n if (context._waiting === true) {\n context._hideWaitingContainer();\n } else {\n if (context._timer) {\n clearTimeout(context._timer);\n }\n }\n }, 16000);\n }\n\n /**\n * this method hides waiting container and clears timeout\n *\n * @private\n */\n _hideWaitingContainer () {\n if (this._waiting) {\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n this._waiting = false;\n clearTimeout(this._timer);\n this._timer = null;\n }\n }\n\n};\n\n// on récupère les méthodes de la classe commune ReverseGeocodeDOM\nObject.assign(ReverseGeocode.prototype, ReverseGeocodeDOM);\nObject.assign(ReverseGeocode.prototype, Widget);\n\nexport default ReverseGeocode;\n\n// Expose ReverseGeocode as ol.control.ReverseGeocode (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.ReverseGeocode = ReverseGeocode;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.format.WMSCapabilities;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.format.WMTSCapabilities;","/**\n* managing events\n*\n* See {@link http://krasimirtsonev.com/blog/article/javascript-managing-events-dispatch-listen}\n* See {@link https://github.com/krasimir/EventBus}\n*\n* @property {Event} \"editor:layer:onclickvisibility\" - event ...\n* @property {Event} \"editor:layer:onclickclone\" - event ...\n* @property {Event} \"editor:layer:onclickremove\" - event ...\n* @property {Event} \"editor:style:oneditjson\" - event ...\n* @property {Event} \"editor:style:scale:onchangemin\" - event ...\n* @property {Event} \"editor:style:scale:onchangemax\" - event ...\n* @property {Event} \"editor:legend:onclickedition\" - event ...\n* @property {Event} \"editor:legend:onchangevalue\" - event ...\n* @property {Event} \"editor:filter:oneditjson\" - event ...\n* @property {Event} \"editor:themes:onclickimage\" - event ...\n* @property {Event} \"editor:themes:onclicktitle\" - event ...\n* @property {Event} \"editor:search:onsubmit\" - event ...\n* @property {Event} \"editor:search:onautocomplete\" - event ...\n* @property {Event} \"editor:group:oncollapse\" - event ...\n* @property {Event} \"editor:onloaded\" - event ...\n*\n* @mixin\n*\n* @example\n* // dispatch event\n* EventBus.dispatch(EventEditor.layer.visibility, e);\n* // listener\n* EventBus.addEventListener(EventEditor.layer.visibility, function (e) {...}, this);\n*/\nvar EventEditor = {\n /** evenement sur la fin de chargement de l'editeur */\n onloaded : \"editor:onloaded\",\n layer : {\n /** evenement sur la visibilité : clic sur le bouton 'oeil' */\n onclickvisibility : \"editor:layer:onclickvisibility\",\n /** evenement sur la duplication : clic sur le bouton\n (not yet implemented !) */\n onclickclone : \"editor:layer:onclickclone\",\n /** evenement sur la suppression : clic sur le bouton\n (not yet implemented !) */\n onclickremove : \"editor:layer:onclickremove\"\n },\n legend : {\n /** evenement sur l'affichage du mode edition */\n onclickedition : \"editor:legend:onclickedition\",\n /** evenement sur la modification d'une valeur */\n onchangevalue : \"editor:legend:onchangevalue\"\n },\n group : {\n /** evenement pour deplier/plier le groupe\n (not yet implemented !) */\n oncollapse : \"editor:group:oncollapse\"\n },\n style : {\n /** evenement sur l'édition du style\n (not yet implemented !) */\n oneditjson : \"editor:style:oneditjson\",\n /** evenement sur la modification de l'echelle d'affichage */\n scale : {\n onchangemin : \"editor:style:scale:onchangemin\",\n onchangemax : \"editor:style:scale:onchangemax\"\n }\n },\n filter : {\n /** evenement sur l'édition du filtre\n (not yet implemented !) */\n oneditjson : \"editor:filter:oneditjson\"\n },\n themes : {\n /** evenement sur le clic de l'image */\n onclickimage : \"editor:themes:onclickimage\",\n /** evenement sur le clic du titre */\n onclicktitle : \"editor:themes:onclicktitle\"\n },\n search : {\n /** evenement sur la recherche */\n onsubmit : \"editor:search:onsubmit\",\n onautocomplete : \"editor:search:onautocomplete\"\n }\n};\n\nexport default EventEditor;\n","import EventBus from \"eventbusjs\";\nimport EventEditor from \"./Event\";\nimport Utils from \"../../Utils/Helper\";\nimport Logger from \"../../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"editor-style\");\n\n/**\n * @classdesc\n *\n * MapBox styles management\n *\n * @constructor\n * @alias ol.style.editor.Style\n * @param {Object} options - options for function call.\n * @example\n * var style = new Style ({\n * target : ...,\n * position : 1, // identifiant de position (unique !)\n * tools : {\n * edition : false,\n * scale : true\n * },\n * title : \"Styles (JSON)\",\n * obj : {\n * paint : {},\n * layout : {}\n * }\n * });\n * style.add();\n * style.display(true);\n * style.getContainer();\n */\nclass Style {\n\n constructor (options) {\n logger.trace(\"[constructor] Style\", options);\n\n // options\n this.options = options || {\n // default...\n target : null,\n position : 0,\n tools : null,\n title : null,\n obj : null\n };\n\n if (!(this instanceof Style)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this._initialize();\n\n this._initContainer();\n }\n\n /**\n * Initialize component\n * (called by constructor)\n *\n * @private\n */\n _initialize () {\n // unique editor id (optional!)\n this.id = this.options.id || null;\n\n if (!this.options.target) {\n // cf. add()\n }\n\n if (!this.options.position) {\n this.options.position = 0;\n }\n\n var _toolsDefault = {\n scale : true,\n edition : false\n };\n\n if (!this.options.tools) {\n this.options.tools = _toolsDefault;\n }\n\n Utils.mergeParams(this.options.tools, _toolsDefault, false);\n\n if (!this.options.obj) {\n // choix d'avoir un objet vide pour une edition futur...\n this.options.obj = {\n paint : {},\n layout : {}\n };\n }\n\n if (!this.options.title) {\n this.options.title = \"JSON Styles :\";\n }\n\n this.container = null;\n\n // DOM : className or id\n this.name = {\n target : \"GPEditorMapBoxStyleTarget\",\n container : \"GPEditorMapBoxStyleContainer\",\n containerjson : \"GPEditorMapBoxStyleJsonContainer\",\n jsonlabel : \"GPEditorMapBoxStyleJsonTitle\",\n jsondisplay : \"GPEditorMapBoxStyleJsonDisplay\",\n containertoolsscale : \"GPEditorMapBoxStyleToolsScaleContainer\",\n scaletitle : \"GPEditorMapBoxStyleScaleTitle\",\n containertoolsminscale : \"GPEditorMapBoxStyleToolsScaleMinContainer\",\n scalelabelmin : \"GPEditorMapBoxStyleScaleLabelMin\",\n scaleinputmin : \"GPEditorMapBoxStyleScaleInputMin\",\n containertoolsmaxscale : \"GPEditorMapBoxStyleToolsScaleMaxContainer\",\n scalelabelmax : \"GPEditorMapBoxStyleScaleLabelMax\",\n scaleinputmax : \"GPEditorMapBoxStyleScaleInputMax\",\n containertoolsedit : \"GPEditorMapBoxStyleToolsEditionContainer\"\n };\n }\n\n /**\n * Graphical rendering of the component\n * ie. this.container\n * (called by constructor)\n *\n * @private\n * @example\n *
    \n *
    \n * \n *
    ...
    \n *
    \n *
    \n *
    \n *
    \n */\n _initContainer () {\n // contexte\n var self = this;\n\n var _found = false;\n var _obj = JSON.parse(JSON.stringify(this.options.obj)); // on manipule une copie !\n var _style = {};\n\n // styles into tag 'paint' ?\n if (_obj.paint) {\n _found = true;\n _style.paint = _obj.paint;\n if (Object.keys(_obj.paint).length === 0) {\n logger.info(\"tag 'paint' is empty !\");\n }\n }\n\n // if not, search into tag 'layout' !\n if (_obj.layout) {\n _found = true;\n _style.layout = _obj.layout;\n // FIXME delete visibility from display ?\n if (_obj.layout.visibility) {\n delete _style.visibility;\n }\n if (Object.keys(_obj.layout).length === 0) {\n logger.info(\"tag 'layout' is empty !\");\n }\n }\n\n var div = document.createElement(\"div\");\n div.className = this.name.container;\n\n var json = null;\n if (_found) {\n var strJson = JSON.stringify(_style, null, 4);\n json = this._syntaxHighlight(strJson);\n }\n\n var divJson = document.createElement(\"div\");\n divJson.className = this.name.containerjson;\n\n var label = document.createElement(\"label\");\n label.className = this.name.jsonlabel;\n label.innerHTML = this.options.title;\n divJson.appendChild(label);\n\n var pre = document.createElement(\"pre\");\n pre.className = this.name.jsondisplay;\n pre.innerHTML = json;\n if (pre.addEventListener) {\n pre.addEventListener(\"click\", function (e) {\n if (self.options.tools.edition) {\n self.onEditJsonStyleMapBox(e);\n }\n });\n } else if (pre.attachEvent) {\n pre.attachEvent(\"onclick\", function (e) {\n if (self.options.tools.edition) {\n self.onEditJsonStyleMapBox(e);\n }\n });\n }\n divJson.appendChild(pre);\n div.appendChild(divJson);\n\n // scale\n if (this.options.tools.scale) {\n div.appendChild(this._createElementToolsScale({\n min : (_style.layout) ? _style.layout.minzoom : 0,\n max : (_style.layout) ? _style.layout.maxzoom : 21\n }));\n }\n\n // TODO menu d'edition\n if (this.options.tools.edition) {\n div.appendChild(this._createElementToolsEdition());\n }\n\n // main container\n this.container = div;\n }\n\n /**\n * Graphical rendering of the scale tools\n *\n * @param {Object} scale - {min,max} or 0|21\n * @returns {DOMElement} DOM element\n *\n * @private\n * @example\n *
    \n */\n _createElementToolsScale (scale) {\n logger.trace(\"_createElementToolsScale\");\n\n var self = this;\n\n var obj = this.options.obj;\n\n var divToolsScale = document.createElement(\"div\");\n divToolsScale.className = this.name.containertoolsscale;\n\n // FIXME Titre ?\n // var label = document.createElement(\"label\");\n // label.className = this.name.scaletitle;\n // label.innerHTML = \"Scale :\";\n // divToolsScale.appendChild(label);\n var divMin = document.createElement(\"div\");\n divMin.className = this.name.containertoolsminscale;\n\n var labelMin = document.createElement(\"label\");\n labelMin.className = this.name.scalelabelmin;\n labelMin.innerHTML = \"min :\";\n divMin.appendChild(labelMin);\n\n var inputMin = document.createElement(\"input\");\n inputMin.className = this.name.scaleinputmin;\n inputMin.type = \"range\";\n inputMin.value = scale.min || 0;\n inputMin.title = scale.min || 0;\n inputMin.disabled = false;\n inputMin.min = 0;\n inputMin.max = 21;\n inputMin.data = obj; // on lie le DOM et la couche, utile lors d'evenement !\n if (inputMin.addEventListener) {\n inputMin.addEventListener(\"change\", function (e) {\n self.onChangeStyleScaleMinMapBox(e);\n });\n } else if (inputMin.appendChild) {\n inputMin.appendChild(\"onchange\", function (e) {\n self.onChangeStyleScaleMinMapBox(e);\n });\n }\n divMin.appendChild(inputMin);\n\n divToolsScale.appendChild(divMin);\n\n var divMax = document.createElement(\"div\");\n divMax.className = this.name.containertoolsmaxscale;\n\n var labelMax = document.createElement(\"label\");\n labelMax.className = this.name.scalelabelmax;\n labelMax.innerHTML = \"max :\";\n divMax.appendChild(labelMax);\n\n var inputMax = document.createElement(\"input\");\n inputMax.className = this.name.scaleinputmin;\n inputMax.type = \"range\";\n inputMax.value = scale.max || 21;\n inputMax.title = scale.max || 21;\n inputMax.disabled = false;\n inputMax.min = 0;\n inputMax.max = 21;\n inputMax.data = obj; // on lie le DOM et la couche, utile lors d'evenement !\n if (inputMax.addEventListener) {\n inputMax.addEventListener(\"change\", function (e) {\n self.onChangeStyleScaleMaxMapBox(e);\n });\n } else if (inputMax.appendChild) {\n inputMax.appendChild(\"onchange\", function (e) {\n self.onChangeStyleScaleMaxMapBox(e);\n });\n }\n divMax.appendChild(inputMax);\n\n divToolsScale.appendChild(divMax);\n\n return divToolsScale;\n }\n\n /**\n * Graphical rendering of the edition tools\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n * @example\n *
    \n */\n _createElementToolsEdition () {\n logger.warn(\"_createElementToolsEdition, it's not yet implemented !\");\n\n var divToolsEdit = document.createElement(\"div\");\n divToolsEdit.className = this.name.containertoolsedit;\n\n return divToolsEdit;\n }\n\n // ################################################################### //\n // ##################### private methods ############################# //\n // ################################################################### //\n /**\n * Transform a JSON into a DOM with a syntax in color\n *\n * @private\n * @param {Object} json - json.\n * @returns {DOMElement} dom element\n */\n _syntaxHighlight (json) {\n json = json.replace(/&/g, \"&\").replace(//g, \">\");\n return json.replace(/(\"(\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(true|false|null)\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/g, function (match) {\n var cls = \"gp-json-number\";\n if (/^\"/.test(match)) {\n if (/:$/.test(match)) {\n cls = \"gp-json-key\";\n } else {\n cls = \"gp-json-string\";\n }\n } else if (/true|false/.test(match)) {\n cls = \"gp-json-boolean\";\n } else if (/null/.test(match)) {\n cls = \"gp-json-null\";\n }\n return \"\" + match + \"\";\n });\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n /**\n * Add element into target DOM\n * @returns {Object} - Legend instance\n */\n add () {\n if (!this.options.target) {\n if (!document.getElementById(this.name.target)) {\n var div = document.createElement(\"div\");\n div.id = this.name.target;\n var node = document.documentElement ||\n document.getElementsByTagName(\"body\")[0] ||\n document.getElementsByTagName(\"head\")[0];\n node.appendChild(div);\n }\n this.options.target = document.getElementById(this.name.target);\n }\n if (this.container) {\n this.options.target.appendChild(this.container);\n }\n return this;\n }\n\n /**\n * Set display container or get\n *\n * @param {Boolean} display - show/hidden container or get status\n * @returns {Boolean} - true/false\n */\n display (display) {\n logger.trace(\"display()\", display);\n if (typeof display !== \"undefined\") {\n this.container.style.display = (display) ? \"flex\" : \"none\";\n }\n return (this.container.style.display === \"flex\");\n }\n\n /**\n * Get container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Style#editor:style:oneditjson\n */\n onEditJsonStyleMapBox (e) {\n logger.trace(\"onEditJsonStyleMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.style.oneditjson, e);\n }\n\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Style#editor:style:scale:onchangemin\n */\n onChangeStyleScaleMinMapBox (e) {\n logger.trace(\"onChangeStyleScaleMinMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.style.scale.onchangemin, e);\n }\n\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Style#editor:style:scale:onchangemax\n */\n onChangeStyleScaleMaxMapBox (e) {\n logger.trace(\"onChangeStyleScaleMaxMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.style.scale.onchangemax, e);\n }\n\n};\n\nexport default Style;\n\n// Expose Editor as ol.editor.View (for a build bundle)\nif (window.ol && window.ol.style) {\n if (!window.ol.style.editor) {\n window.ol.style.editor = {};\n } \n window.ol.style.editor.Style = Style;\n}\n\n","import EventBus from \"eventbusjs\";\nimport EventEditor from \"./Event\";\nimport Utils from \"../../Utils/Helper\";\nimport ID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"editor-themes\");\n\n/**\n * @classdesc\n *\n * Mapbox Themes management\n *\n * @constructor\n * @alias ol.style.editor.Theme\n * @param {Object} options - options for function call.\n * @example\n * var theme = new Themes ({\n * \"target\": \"\",\n * \"tools\": {\n * \"thumbnails\": true,\n * \"button\" : {\n * \"visible\" : true,\n * \"type\" : \"radio\" (par defaut) | \"checkbox\"\n * }\n * },\n * \"obj\": {\n * \"themesSummary\": \"\", // Titre du composant (non graphique !)\n * \"themes\": [{\n * \"thumbnail\": \"data/images/layer0.png\",\n * \"name\": \"standard0\",\n * \"url\": \"data/styles/layer0.json\",\n * \"description\": \"\",\n * \"selected\" : true\n * },{\n * \"thumbnail\": \"data/images/layer1.png\",\n * \"name\": \"standard1\",\n * \"url\": \"data/styles/layer1.json\",\n * \"description\": \"\"\n * }]\n * }\n * });\n * theme.add();\n * theme.display(true);\n * theme.getContainer();\n */\nclass Themes {\n\n constructor (options) {\n logger.trace(\"[constructor] Themes\", options);\n\n // options\n this.options = options || {\n // TODO default...\n };\n\n if (!(this instanceof Themes)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this._initialize();\n\n this._initContainer();\n }\n\n /**\n * Initialize component\n * (called by constructor)\n *\n * @private\n */\n _initialize () {\n // unique editor id (optional!)\n this.id = this.options.id || null;\n\n if (!this.options.target) {\n // cf. add()\n }\n\n var _toolsDefault = {\n thumbnails : true,\n button : {\n visible : true,\n type : \"radio\"\n }\n };\n\n if (!this.options.tools || Object.keys(this.options.tools).length === 0) {\n this.options.tools = _toolsDefault;\n }\n\n Utils.mergeParams(this.options.tools, _toolsDefault, false);\n\n if (typeof this.options.obj === \"undefined\" ||\n this.options.obj === null ||\n !this.options.obj) {\n // vide par defaut ?\n this.options.obj = {\n themesSummary : \"\",\n themes : []\n };\n }\n\n this.container = null;\n\n // DOM : className or id\n this.name = {\n target : \"GPEditorMapBoxThemeTarget\",\n container : \"GPEditorMapBoxThemesContainer\",\n containertheme : \"GPEditorMapBoxThemeContainer\",\n containerthemeID : \"GPEditorMapBoxThemeContainer_ID_\",\n input : \"GPEditorMapBoxThemeInput\",\n inputID : \"GPEditorMapBoxThemeInput_ID_\",\n label : \"GPEditorMapBoxThemeTitle\",\n labelID : \"GPEditorMapBoxThemeTitle_ID_\",\n image : \"GPEditorMapBoxThemeImage\",\n imageID : \"GPEditorMapBoxThemeImage_ID_\",\n message : \"GPEditorMapBoxThemeMessage\"\n };\n }\n\n /**\n * Graphical rendering of the component\n * (called by constructor)\n *\n * @private\n * @example\n *
    \n *
    \n * \n * \"Description1\"\n * \n *
    \n *
    \n * \n * \"Description2\"\n * \n *
    \n *
    \n */\n _initContainer () {\n // contexte\n var self = this;\n\n var obj = this.options.obj;\n\n var id = this.id || ID.generate();\n\n // div principale\n var div = document.createElement(\"div\");\n div.className = this.name.container;\n div.title = obj.themesSummary || \"\";\n\n var _lstThemes = obj.themes;\n if (_lstThemes) {\n for (var i = 0; i < _lstThemes.length; i++) {\n var _theme = _lstThemes[i];\n\n // div pour chaque theme\n var divTheme = document.createElement(\"div\");\n divTheme.id = this.name.containerthemeID + i + \"_\" + id;\n divTheme.className = this.name.containertheme;\n divTheme.tabIndex = i;\n\n // url du style est obligatoire !\n var _url = _theme.url;\n // style selectionné par defaut (uniquement en mode radio-button !?)\n var _selected = _theme.selected || false;\n if (_url) {\n // bouton\n var button = this.options.tools.button;\n if (button.visible) {\n var _type = (button.type === \"checkbox\") ? \"checkbox\" : \"radio\";\n var _button = document.createElement(\"input\");\n _button.type = _type;\n _button.id = this.name.inputID + i + \"_\" + id;\n _button.className = this.name.input;\n _button.name = id;\n _button.checked = _selected;\n _button.data = _url; // on lie le DOM et la couche, utile lors d'evenement !\n if (_button.addEventListener) {\n _button.addEventListener(\"click\", function (e) {\n self.onClickThemeTitleMapBox(e);\n });\n } else if (_button.attachEvent) {\n _button.attachEvent(\"onclick\", function (e) {\n self.onClickThemeTitleMapBox(e);\n });\n }\n divTheme.appendChild(_button);\n }\n // vignette\n if (this.options.tools.thumbnails) {\n if (_theme.thumbnail) {\n var _img = document.createElement(\"img\");\n _img.id = this.name.imageID + i + \"_\" + id;\n _img.className = this.name.image;\n _img.src = _theme.thumbnail;\n _img.alt = _theme.thumbnail;\n _img.title = _theme.description || \"\"; // une description au survol de l'image ou titre...\n _img.data = _url; // on lie le DOM et la couche, utile lors d'evenement !\n if (_img.addEventListener) {\n _img.addEventListener(\"click\", function (e) {\n self.onClickThemeImageMapBox(e);\n // maj du radio button\n var nodes = e.target.parentElement.childNodes;\n if (nodes) {\n var node = nodes[0];\n if (node.tagName.toLowerCase() === \"input\") {\n node.checked = !node.checked;\n }\n }\n });\n } else if (_img.attachEvent) {\n _img.attachEvent(\"onclick\", function (e) {\n self.onClickThemeImageMapBox(e);\n var nodes = e.target.parentElement.childNodes;\n if (nodes) {\n var node = nodes[0];\n if (node.tagName.toLowerCase() === \"input\") {\n node.checked = !node.checked;\n }\n }\n });\n }\n divTheme.appendChild(_img);\n }\n }\n // label\n if (_theme.name) {\n var _label = document.createElement(\"label\");\n _label.id = this.name.labelID + i + \"_\" + id;\n if (this.options.tools.button.visible) {\n _label.htmlFor = _button.id;\n }\n _label.className = this.name.label;\n _label.innerHTML = _theme.name;\n _label.title = _theme.description || \"\"; // une description au survol de l'image ou titre...\n _label.data = _url; // on lie le DOM et la couche, utile lors d'evenement !\n if (!this.options.tools.button.visible) {\n if (_label.addEventListener) {\n _label.addEventListener(\"click\", function (e) {\n self.onClickThemeTitleMapBox(e);\n });\n } else if (_label.attachEvent) {\n _label.attachEvent(\"onclick\", function (e) {\n self.onClickThemeTitleMapBox(e);\n });\n }\n }\n divTheme.appendChild(_label);\n }\n } else {\n var _msg = document.createElement(\"label\");\n _msg.className = this.name.message;\n _msg.innerHTML = \"Thème non disponible...\";\n divTheme.appendChild(_msg);\n }\n\n div.appendChild(divTheme);\n }\n }\n\n this.container = div;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n /**\n * Add element into target DOM\n * @returns {Object} - Legend instance\n */\n add () {\n if (!this.options.target) {\n if (!document.getElementById(this.name.target)) {\n var div = document.createElement(\"div\");\n div.id = this.name.target;\n var node = document.documentElement ||\n document.getElementsByTagName(\"body\")[0] ||\n document.getElementsByTagName(\"head\")[0];\n node.appendChild(div);\n }\n this.options.target = document.getElementById(this.name.target);\n }\n if (this.container) {\n this.options.target.appendChild(this.container);\n }\n return this;\n }\n\n /**\n * Set display container or get\n *\n * @param {Boolean} display - show/hidden container or get status\n * @returns {Boolean} - true/false\n */\n display (display) {\n logger.trace(\"display()\", display);\n if (typeof display !== \"undefined\") {\n this.container.style.display = (display) ? \"flex\" : \"none\";\n }\n return (this.container.style.display === \"flex\");\n }\n\n /**\n * Get container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n /**\n * this method is called by event '' on '' tag form\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Themes#editor:themes:image\n */\n onClickThemeImageMapBox (e) {\n logger.trace(\"onClickThemeImageMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n if (this.options.tools.button.type === \"checkbox\") {\n // GPEditorMapBoxThemeInput_ID_0_1571317605868\n var targetIDX = e.target.previousSibling.id.substring(\n e.target.previousSibling.id.lastIndexOf(\"_\") + 1\n );\n var _inputs = document.getElementsByClassName(this.name.input);\n for (var i = 0; i < _inputs.length; i++) {\n var el = _inputs[i];\n if (el.id === e.target.previousSibling.id) {\n continue;\n }\n var elIDX = el.id.substring(el.id.lastIndexOf(\"_\") + 1);\n if (elIDX !== targetIDX) {\n continue;\n }\n el.checked = false;\n }\n }\n EventBus.dispatch(EventEditor.themes.onclickimage, e);\n }\n\n /**\n * this method is called by event '' on '' tag form\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Themes#editor:themes:title\n */\n onClickThemeTitleMapBox (e) {\n logger.trace(\"onClickThemeTitleMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n if (this.options.tools.button.type === \"checkbox\") {\n // GPEditorMapBoxThemeInput_ID_0_1571317605868\n var targetIDX = e.target.id.substring(e.target.id.lastIndexOf(\"_\") + 1);\n var _inputs = document.getElementsByClassName(this.name.input);\n for (var i = 0; i < _inputs.length; i++) {\n var el = _inputs[i];\n if (el.id === e.target.id) {\n continue;\n }\n var elIDX = el.id.substring(el.id.lastIndexOf(\"_\") + 1);\n if (elIDX !== targetIDX) {\n continue;\n }\n el.checked = false;\n }\n }\n EventBus.dispatch(EventEditor.themes.onclicktitle, e);\n }\n\n};\n\nexport default Themes;\n\n// Expose Editor as ol.editor.View (for a build bundle)\nif (window.ol && window.ol.style) {\n if (!window.ol.style.editor) {\n window.ol.style.editor = {};\n } \n window.ol.style.editor.Themes = Themes;\n}\n\n","import EventBus from \"eventbusjs\";\nimport EventEditor from \"./Event\";\nimport Utils from \"../../Utils/Helper\";\nimport Logger from \"../../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"editor-filter\");\n\n/**\n * @classdesc\n *\n * MapBox filter management\n *\n * @constructor\n * @alias ol.style.editor.Filter\n * @param {Object} options - options for function call.\n * @example\n * var filter = new Filter ({\n * target : ...,\n * position : 1, // identifiant de position (unique !)\n * tools : {\n * edition : false\n * },\n * title : \"Filtres (JSON)\",\n * obj : {\n * filter : []\n * }\n * });\n * filter.add();\n * filter.display(true);\n * filter.getContainer();\n */\nclass Filter {\n\n constructor (options) {\n logger.trace(\"[constructor] Filter\", options);\n\n // options\n this.options = options || {\n // default...\n target : null,\n position : 0,\n tools : null,\n title : null,\n obj : null\n };\n\n if (!(this instanceof Filter)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this._initialize();\n\n this._initContainer();\n }\n\n /**\n * Initialize component\n * (called by constructor)\n *\n * @private\n */\n _initialize () {\n // unique editor id (optional!)\n this.id = this.options.id || null;\n\n if (!this.options.target) {\n // cf. add()\n }\n\n if (!this.options.position) {\n this.options.position = 0;\n }\n\n var _toolsDefault = {\n edition : false\n };\n\n if (!this.options.tools) {\n this.options.tools = _toolsDefault;\n }\n\n Utils.mergeParams(this.options.tools, _toolsDefault, false);\n\n if (!this.options.obj) {\n // choix d'avoir un objet vide pour une edition futur...\n this.options.obj = {\n filter : []\n };\n }\n\n if (!this.options.title) {\n this.options.title = \"JSON Filtres :\";\n }\n this.container = null;\n\n // DOM : className or id\n this.name = {\n target : \"GPEditorMapBoxFilterTarget\",\n container : \"GPEditorMapBoxFilterContainer\",\n containerjson : \"GPEditorMapBoxFilterJsonContainer\",\n jsonlabel : \"GPEditorMapBoxFilterTitleJson\",\n jsondisplay : \"GPEditorMapBoxFilterDisplayJson\",\n containertoolsedit : \"GPEditorMapBoxFilterToolsEditionContainer\"\n };\n }\n\n /**\n * Graphical rendering of the component\n * (called by constructor)\n *\n * @private\n * @example\n *
    \n *
    \n * \n *
    ...
    \n *
    \n *
    \n *
    \n */\n _initContainer () {\n // contexte\n var self = this;\n\n var _found = false;\n var _filter = JSON.parse(JSON.stringify(this.options.obj)); // on manipule une copie !\n\n // FIXME tag filter est obselete !\n // on doit utiliser les expressions dans \"paint\" ou \"layout\" !\n if (_filter.filter) {\n _found = true;\n if (_filter.filter.length === 0) {\n logger.info(\"tag 'filter' is empty !\");\n }\n }\n\n var div = document.createElement(\"div\");\n div.className = this.name.container;\n\n var json = null;\n if (_found) {\n json = JSON.stringify(_filter.filter, null, 4);\n }\n\n var divJson = document.createElement(\"div\");\n divJson.className = this.name.containerjson;\n\n var labelJson = document.createElement(\"label\");\n labelJson.className = this.name.jsonlabel;\n labelJson.innerHTML = this.options.title;\n divJson.appendChild(labelJson);\n\n var preJson = document.createElement(\"pre\");\n preJson.className = this.name.jsondisplay;\n preJson.innerHTML = json;\n if (preJson.addEventListener) {\n preJson.addEventListener(\"click\", function (e) {\n if (self.options.tools.edition) {\n self.onEditJsonFilterMapBox(e);\n }\n });\n } else if (preJson.attachEvent) {\n preJson.attachEvent(\"onclick\", function (e) {\n if (self.options.tools.edition) {\n self.onEditJsonFilterMapBox(e);\n }\n });\n }\n divJson.appendChild(preJson);\n div.appendChild(divJson);\n\n if (this.options.tools.edition) {\n var divEdit = document.createElement(\"div\");\n divEdit.className = this.name.containertoolsedit;\n div.appendChild(divEdit);\n }\n\n // main container\n this.container = div;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n /**\n * Add element into target DOM\n * @returns {Object} - Legend instance\n */\n add () {\n if (!this.options.target) {\n if (!document.getElementById(this.name.target)) {\n var div = document.createElement(\"div\");\n div.id = this.name.target;\n var node = document.documentElement ||\n document.getElementsByTagName(\"body\")[0] ||\n document.getElementsByTagName(\"head\")[0];\n node.appendChild(div);\n }\n this.options.target = document.getElementById(this.name.target);\n }\n if (this.container) {\n this.options.target.appendChild(this.container);\n }\n return this;\n }\n\n /**\n * Set display container or get\n *\n * @param {Boolean} display - show/hidden container or get status\n * @returns {Boolean} - true/false\n */\n display (display) {\n logger.trace(\"display()\", display);\n if (typeof display !== \"undefined\") {\n this.container.style.display = (display) ? \"flex\" : \"none\";\n }\n return (this.container.style.display === \"flex\");\n }\n\n /**\n * Get container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Filter#editor:style:oneditjson\n */\n onEditJsonFilterMapBox (e) {\n logger.trace(\"onEditJsonFilterMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.filter.oneditjson, e);\n }\n\n};\n\nexport default Filter;\n\n// Expose Editor as ol.editor.View (for a build bundle)\nif (window.ol && window.ol.style) {\n if (!window.ol.style.editor) {\n window.ol.style.editor = {};\n } \n window.ol.style.editor.Filter = Filter;\n}\n","import EventBus from \"eventbusjs\";\nimport EventEditor from \"./Event\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Color from \"../../Utils/ColorUtils\";\n\nvar logger = Logger.getLogger(\"editor-legend\");\n\n/**\n * @classdesc\n *\n * MapBox Legend management\n *\n * @constructor\n * @alias ol.style.editor.Legend\n * @param {Object} options - options for function call.\n * @param {Object} [options.target = null] - ...\n * @param {Number} [options.position = 0] - ...\n * @param {Number} [options.id = null] - (internal) ...\n * @param {Object} [options.sprites = null] - ...\n * @param {String} [options.sprites.url] - ...\n * @param {Object} [options.sprites.size] - {h:, w:} ...\n * @param {Object} [options.sprites.json] - ...\n * @param {Object} options.obj - ...\n * @param {String} [options.obj.title] - ...\n * @param {Boolean} [options.obj.editable = true] - ...\n * @param {Object} options.obj.paint - ...\n * @param {Object} options.obj.layout - ...\n * @example\n * var legend = new Legend ({\n * target : ...,\n * position : 1, // identifiant de position (unique !)\n * sprites : {\n * url : \"http://localhost/sprites.png\",\n * size : { w : 450, h : 550 },\n * json : {\n * icon-1 : {x:,y:,height:,width:,pixelRatio:},\n * icon-2 : {x:,y:,height:,width:,pixelRatio:}\n * }\n * },\n * obj : {\n * title : \"\",\n * editable : true, // tag non standard issue du style json dédié à l'edition\n * paint : {\"fill-color\": \"#2BB3E1\"},\n * layout : {visibility:\"none\"}\n * }\n * });\n * legend.add();\n * legend.display(true);\n * legend.isEditable();\n * legend.getRenderContainer();\n * legend.getToolsContainer();\n * legend.getContainer();\n */\nclass Legend {\n\n constructor (options) {\n logger.trace(\"[constructor] Legend\", options);\n\n // options\n this.options = options || {\n // default...\n target : null,\n position : 0,\n sprites : null,\n obj : null\n };\n\n if (!(this instanceof Legend)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this._initialize();\n\n this._initContainer();\n }\n\n // ################################################################### //\n // ########################## init methods ########################### //\n // ################################################################### //\n /**\n * Initialize component\n * (called by constructor)\n *\n * @private\n */\n _initialize () {\n // unique editor id (optional!)\n this.id = this.options.id || null;\n\n if (!this.options.target) {\n // cf. add()\n }\n\n // permet d'avoir un identifiant de position dans la liste des layers\n if (!this.options.position) {\n this.options.position = 0;\n }\n\n if (!this.options.obj) {\n // choix d'avoir un objet vide pour une edition...\n this.options.obj = {\n title : \"vide...\",\n editable : true,\n paint : {\n \"fill-color\" : \"#FFFFFF\"\n }\n };\n }\n\n // la legende est elle editable ?\n // le tag 'editable' est à placer dans le fichier de style (dans le layer)...\n var _editable = this.options.obj.editable;\n this.editable = (typeof _editable !== \"undefined\") ? _editable : false;\n\n // liste des caractéristiques de la legende par defaut\n this.legendRender = {\n type : \"fill\",\n values : {\n width : 1,\n stroke : \"#FFFFFF\",\n color : \"#000000\",\n opacity : 1\n }\n };\n\n // DOM : pointer\n this.container = null;\n this.rendercontainer = null;\n this.toolscontainer = null;\n\n // DOM : className or id\n this.name = {\n target : \"GPEditorMapBoxLegendTarget\",\n container : \"GPEditorMapBoxLegendContainer\",\n containerlegendrender : \"GPEditorMapBoxLegendRenderContainer\",\n legendrender : \"GPEditorMapBoxLegendRender\",\n legendeditable : \"GPEditorMapBoxLegendEditable\",\n legendtitle : \"GPEditorMapBoxLegendTitle\",\n containerlegendtools : \"GPEditorMapBoxLegendToolsContainer\"\n };\n\n // DOM : Label menu Edition\n this.labels = {\n \"line-color\" : \"Couleur du trait\",\n \"line-width\" : \"Epaisseur du trait\",\n \"line-opacity\" : \"Opacité du trait\",\n \"fill-color\" : \"Couleur de remplissage\",\n \"fill-opacity\" : \"Opacité du remplissage\"\n };\n }\n\n /**\n * Graphical rendering of the component\n * (called by constructor)\n *\n * @private\n * @example\n *
    \n *
    \n *
    \n * test circle editable...\n *
    \n *
    ...
    \n *
    \n */\n _initContainer () {\n var _obj = this.options.obj;\n\n var div = document.createElement(\"div\");\n div.className = this.name.container;\n\n // INFO\n // on recherche les informations dans le tag 'paint' en priorité, mais pour\n // les icones ou textes, les informations peuvent se trouver aussi dans le tag 'layout'...\n // on fusionnne paint et layout par facilité\n var style = Object.assign({}, _obj.paint, _obj.layout);\n\n // liste des properties mapbox\n // ex. fill-color\n var keys = Object.keys(style);\n if (keys.length === 0) {\n logger.info(\"tag 'paint' or 'layout' is empty !\");\n return;\n }\n\n // FIXME\n // - gestion de type plus complexe : texte avec/sans symbole ou symbole !\n // - pour les textes ou icones, les info peuvent être aussi dans le tag 'layout' !\n var params = {};\n var bFound = false;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n // recherche du type\n // ex. fill\n if (/fill-/.test(key) ||\n /line-/.test(key) ||\n /circle-/.test(key) ||\n /background-/.test(key) ||\n /text-/.test(key) ||\n /icon-/.test(key)) {\n // style geré & trouvé\n bFound = true;\n\n var title = _obj.title || \"\";\n\n // INFO\n // le type texte ou icone est difficile à trouver car les 2 types cohabitent,\n // on le gère en symbole...\n var type = key.split(\"-\")[0];\n if (type === \"text\" || type === \"icon\") {\n type = \"symbol\";\n }\n\n this.legendRender = this._getProperties(type, style);\n params = {\n edit : this.editable,\n title : title,\n type : this.legendRender.type,\n values : this.legendRender.values\n };\n div.appendChild(this._createElementIconLegend(params));\n\n // on stoppe la recherche\n break;\n }\n }\n\n // legende avec un style indeterminé ou non géré !?\n if (!bFound) {\n // on prend la legende par defaut\n params = {\n edit : this.editable,\n title : \"\",\n type : this.legendRender.type,\n values : this.legendRender.values\n };\n div.appendChild(this._createElementIconLegend(params));\n logger.warn(\"legend type unknown, default legend used...\");\n }\n\n // ajout mode edition graphique de la legende\n this.toolscontainer = this._createElementEditionLegend(params);\n div.appendChild(this.toolscontainer);\n\n // main container\n this.container = div;\n }\n\n // ################################################################### //\n // ##################### private methods ############################# //\n // ################################################################### //\n /**\n * Get properties supported\n *\n * @param {Object} type - fill, line, circle, text, icon...\n * @param {Object} values - raw values from the JSON file\n * @returns {Object} - { type : (fill | line | circle | symbol), values : valuesSupported }\n *\n * @private\n * @example\n *\n * // TODO\n * // symbol with text (1) / symbol without text (2) / text (3)\n * // \"layout\":{\n * // \"icon-image\":\"{maki}-11\", \n * // \"text-font\":[\n * // \"Open Sans Semibold\",\n * // \"Arial Unicode MS Bold\"\n * // ],\n * // \"text-field\":\"{name_en}\", \n * // \"text-max-width\":9,\n * // \"text-padding\":2,\n * // \"text-offset\":[\n * // 0,\n * // 0.6\n * // ],\n * // \"text-anchor\":\"top\",\n * // \"text-size\":12\n * // },\n * // \"paint\":{\n * // \"text-color\":\"#666\",\n * // \"text-halo-color\":\"#ffffff\",\n * // \"text-halo-width\":1,\n * // \"text-halo-blur\":0.5\n * // },\n *\n */\n _getProperties (type, values) {\n // cas particulier du symbole complexe\n // il existe plusieurs types pour un symbole :\n // - text\n // - icon\n // - icon with text\n if (type === \"symbol\") {\n var isTextValue = values[\"text-field\"];\n var isIconValue = values[\"icon-image\"];\n type = (isTextValue && isIconValue) ? \"icon\" : (isTextValue) ? \"text\" : (isIconValue) ? \"icon\" : \"unknow\";\n if (type === \"unknow\") {\n logger.warn(\"type unknow !?\");\n return;\n }\n }\n\n var valuesSupported = {};\n for (const key in values) {\n if (Object.hasOwnProperty.call(values, key)) {\n const val = values[key];\n if (Legend.PROPERTIES[type].includes(key)) {\n var prop = key.replace(type, \"\").slice(1);\n var value = this._getValue(val);\n if (value) {\n // cas particulier des sprites\n if (prop === \"pattern\" || prop === \"image\") {\n if (!this.options.sprites ||\n !this.options.sprites.json ||\n !this.options.sprites.json[value]) {\n var k = type + \":\" + prop;\n logger.warn(\"sprites mandatory for key \", k);\n break;\n }\n }\n valuesSupported[prop] = value;\n }\n } else {\n logger.warn(\"property not supported : \", key);\n }\n }\n }\n\n return {\n type : type,\n values : valuesSupported\n };\n }\n\n /**\n * Render thumbnail (SVG)\n *\n * @param {Object} type - fill, line, circle, text, ...\n * @param {Object} values - {\"color\":..., \"width\":..., \"stroke\":...., \"opacity\":...}\n * @returns {Boolean} true/false\n *\n * @private\n * @example\n * (...)\n */\n _renderThumbnail (type, values) {\n // div de rendu de la legende\n var div = this.rendercontainer;\n\n if (!div) {\n return false;\n }\n\n // SVG\n var svg = null;\n // facteur grossissement (x10) pour le trait\n var factor = 3;\n\n // valeur par defaut\n if (!values.color) {\n values.color = \"#FFFFFF\";\n }\n // en fonction du type, on y ajoute le style\n switch (type) {\n case \"text\":\n var styleText = \"font-size: 5em;font-weight: bold;\";\n svg = \"url(\\\"data:image/svg+xml;utf8, T \\\")\";\n div.style[\"background\"] = svg\n .replace(\"%color%\", (values.color.indexOf(\"rgb\") === 0) ? values.color : Color.hexToRgba(values.color, 1))\n .replace(\"%opacity%\", values.opacity || 1)\n .replace(\"%style%\", styleText);\n break;\n case \"icon\":\n if (values.image) {\n // FIXME on reste dans le paradigme d'utilisation du SVG...,\n // mais probleme de ratio de l'image !?\n svg = \"\"\n .replace(\"%x%\", this.options.sprites.json[values.image].x)\n .replace(\"%y%\", this.options.sprites.json[values.image].y)\n .replace(/%w%/g, this.options.sprites.json[values.image].width)\n .replace(/%h%/g, this.options.sprites.json[values.image].height)\n .replace(\"%W%\", this.options.sprites.size.w)\n .replace(\"%H%\", this.options.sprites.size.h)\n .replace(\"%URL%\", this.options.sprites.url);\n div.innerHTML = svg;\n } else {\n var styleTextIcon = \"fill: transparent;stroke-width: 10;\";\n svg = \"url(\\\"data:image/svg+xml;utf8,\\\")\";\n div.style[\"background\"] = svg\n .replace(\"%color%\", (values.color.indexOf(\"rgb\") === 0) ? values.color : Color.hexToRgba(values.color, 1))\n .replace(\"%style%\", styleTextIcon);\n }\n break;\n case \"line\":\n var lstrockedasharray = (Array.isArray(values[\"dasharray\"])) ? values[\"dasharray\"].join(\" \") : 0;\n svg = \"url(\\\"data:image/svg+xml;utf8,\\\")\";\n // svg = \"url(\\\"data:image/svg+xml;utf8,\\\")\";\n div.style[\"background\"] = svg\n .replace(\"%color%\", (values.color.indexOf(\"rgb\") === 0) ? values.color : Color.hexToRgba(values.color, 1))\n .replace(\"%stroke-opacity%\", values.opacity || 1)\n .replace(\"%stroke-dasharray%\", lstrockedasharray)\n .replace(\"%stroke-width%\", (values.width || 0) * factor);\n break;\n case \"circle\":\n var cstrockcolor = values[\"stroke-color\"] || \"#FFFFFF\";\n svg = \"url(\\\"data:image/svg+xml;utf8,\\\")\";\n div.style[\"background\"] = svg\n .replace(\"%color%\", (values.color.indexOf(\"rgb\") === 0) ? values.color : Color.hexToRgba(values.color, 1))\n .replace(\"%opacity%\", values.opacity || 1)\n .replace(\"%stroke-color%\", (cstrockcolor.indexOf(\"rgb\") === 0) ? cstrockcolor : Color.hexToRgba(cstrockcolor, 1))\n .replace(\"%stroke-opacity%\", values[\"stroke-opacity\"] || 1)\n .replace(\"%stroke-width%\", (values[\"stroke-width\"] || 0) * factor);\n break;\n case \"background\":\n case \"fill\":\n if (values.pattern) {\n svg = \"\"\n .replace(\"%x%\", this.options.sprites.json[values.pattern].x)\n .replace(\"%y%\", this.options.sprites.json[values.pattern].y)\n .replace(/%w%/g, this.options.sprites.json[values.pattern].width)\n .replace(/%h%/g, this.options.sprites.json[values.pattern].height)\n .replace(\"%W%\", this.options.sprites.size.w)\n .replace(\"%H%\", this.options.sprites.size.h)\n .replace(\"%URL%\", this.options.sprites.url);\n div.innerHTML = svg;\n } else {\n var fstrokecolor = values[\"outline-color\"] || \"#FFFFFF\";\n svg = \"url(\\\"data:image/svg+xml;utf8,\\\")\";\n div.style[\"background\"] = svg\n .replace(\"%color%\", (values.color.indexOf(\"rgb\") === 0) ? values.color : Color.hexToRgba(values.color, 1))\n .replace(\"%opacity%\", values.opacity || 1)\n .replace(\"%stroke-color%\", (fstrokecolor.indexOf(\"rgb\") === 0) ? fstrokecolor : Color.hexToRgba(fstrokecolor, 1));\n }\n break;\n default:\n logger.warn(\"type not found, no thumbnail...\");\n return false;\n }\n\n return true;\n }\n\n /**\n * Get value\n *\n * @param {*} value - value of a property (ex. \"#2BB3E1\")\n * @returns {*} return a verified value (ex. color\": \"#2BB3E1\")\n *\n * @private\n * @example\n * // type simple for fill, line or circle type with string :\n * // \"paint\": {\n * // \"fill-color\": \"#2BB3E1\"\n * // }\n *\n * // type simple for fill, line or circle type with array :\n * // \"paint\": {\n * // \"line-dasharray\": [2,10]\n * // }\n *\n * // TODO type complexe : not yet implemented !\n * // \"paint\": {\n * // \"fill-color\": [\n * // \"match\",\n * // [\"get\",\"symbo\"],\n * // \"ZONE_BOISEE\",\"#A7DA81\",\n * // \"ZONE_MANGROVE\",\"#7E8AB5\",\n * // \"#A7DA81\"\n * // ]\n * // }\n *\n * // other type complexe :\n * // \"paint\": {\n * // \"fill-color\": {\n * // \"base\": 1,\n * // \"stops\": [\n * // [\n * // 15.5,\n * // \"#f2eae2\"\n * // ],\n * // [\n * // 16,\n * // \"#dfdbd7\"\n * // ]\n * // ]\n * // }\n * // }\n */\n _getValue (value) {\n var result = null;\n if (typeof value === \"string\") {\n result = value;\n } else if (typeof value === \"number\") {\n result = value;\n } else if (Array.isArray(value)) {\n // cas d'un tableau de valeurs numériques : [1,2,3]\n var isNumber = true;\n value.forEach(v => {\n if (typeof v !== \"number\") {\n isNumber = false;\n }\n });\n if (isNumber) {\n result = value;\n }\n } else if (typeof value === \"object\") {\n result = null;\n if (\"stops\" in value) {\n // on realise un ordre inversé sur les zooms\n value.stops.sort((a, b) => {\n var numA = a[0];\n var numB = b[0];\n if (numA > numB) {\n return -1;\n }\n if (numA < numB) {\n return 1;\n }\n return 0;\n });\n // et, on prend le plus petit zoom\n var lastStopsValue = value.stops.slice(-1);\n result = lastStopsValue[0][1];\n }\n } else {\n logger.warn(\"value not supported !\");\n }\n return result;\n }\n\n // ################################################################### //\n // ######################### DOM methods ############################# //\n // ################################################################### //\n /**\n * Create a Graphical Legend Icon\n *\n * @param {Object} params - param\n * @param {String} params.title - title\n * @param {String} params.type - fill, line, circle, text, icon, ...\n * @param {String} params.values - {\"color\": \"#2BB3E1\", \"width\": 10, \"opacity\": 0.5, \"stroke\": \"#2BB3E1\"}\n * @param {Boolean} params.edit - editable with a colorPicker for only line, fill and circle legend !\n * @returns {DOMElement} DOM element\n *\n * @private\n * @example\n *
    \n *
    ");\">\n *
    \n * vide...\n *
    \n */\n _createElementIconLegend (params) {\n // contexte\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = this.name.containerlegendrender;\n\n var div = this.rendercontainer = document.createElement(\"div\");\n div.className = this.name.legendrender;\n if (params.edit) {\n div.className += \" \";\n div.className += this.name.legendeditable;\n if (div.addEventListener) {\n div.addEventListener(\"click\", function (e) {\n self.onEditionLegendMapBox(e);\n });\n } else if (div.attachEvent) {\n div.attachEvent(\"onclick\", function (e) {\n self.onEditionLegendMapBox(e);\n });\n }\n }\n\n // type de legende\n var type = params.type;\n\n // TODO className\n // div.className += \" legend-not-implemented\";\n // ajout du style sur la div de rendu\n if (this._renderThumbnail(type, params.values)) {\n // className possibles :\n // \" legend-text\"\n // \" legend-icon\"\n // \" legend-background\"\n // \" legend-line\"\n // \" legend-line-not-editable\"\n // \" legend-circle\"\n // \" legend-circle-not-editable\"\n // \" legend-fill\"\n // \" legend-fill-not-editable\"\n div.className += (params.edit) ? \" legend-\" + type : \" legend-\" + type + \"-not-editable\";\n } else {\n div.className += \" legend-unknow\";\n }\n\n container.appendChild(div);\n\n var span = document.createElement(\"span\");\n span.className = this.name.legendtitle;\n span.innerHTML = params.title || \"\";\n container.appendChild(span);\n\n return container;\n }\n\n /**\n * Create a Graphical Legend Edition\n *\n * @param {Object} params - param\n * @param {String} params.type - fill, line, (TODO : circle, icon or text)\n * @param {String} params.values - {\"fill-color\": \"#2BB3E1\"}\n * @param {Boolean} params.edit - editable with a colorPicker for only line and fill legend !\n * @returns {DOMElement} DOM element\n *\n * @private\n * @example\n *
    \n *
    \n * \n * \n *
    \n *
    \n * \n * \n *
    \n *
    \n * \n * \n *
    \n *
    \n * \n * \n *
    \n *
    \n * \n * \n *
    \n *
    \n */\n _createElementEditionLegend (params) {\n // contexte\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = this.name.containerlegendtools;\n\n // uniquement les elements editables !\n if (!params.edit) {\n return container;\n }\n\n // on ne traite que l'edition du mode 'traits' ou 'surfaciques'\n // mode 'line'\n switch (params.type) {\n case \"line\":\n createLineColor.call(self);\n createLineWidth.call(self);\n createLineOpacity.call(self);\n break;\n case \"background\":\n case \"fill\":\n createFillColor.call(self);\n createFillOpacity.call(self);\n break;\n default:\n break;\n }\n\n // couleur du trait\n function createLineColor () {\n var linecolor = document.createElement(\"div\");\n linecolor.className = \"legend-styling-div\";\n var lLineColor = document.createElement(\"label\");\n lLineColor.className = \"legend-line\";\n lLineColor.htmlFor = this.id ? \"line-color-\" + this.id : \"line-color\";\n lLineColor.innerHTML = this.labels[\"line-color\"];\n var inputLineColor = document.createElement(\"input\");\n inputLineColor.className = \"legend-styling\";\n inputLineColor.id = this.id ? \"line-color-\" + this.id : \"line-color\";\n inputLineColor.title = \"Selectionner une couleur de trait\";\n inputLineColor.type = \"color\";\n inputLineColor.value = params.values.color;\n inputLineColor.setAttribute(\"data-id\", \"line-color\");\n if (inputLineColor.addEventListener) {\n inputLineColor.addEventListener(\"change\", function (e) {\n self._renderThumbnail(params.type, Object.assign(params.values, {\n color : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n } else if (inputLineColor.attachEvent) {\n inputLineColor.attachEvent(\"onchange\", function (e) {\n self._renderThumbnail(params.type, Object.assign(params.values, {\n color : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n }\n linecolor.appendChild(lLineColor);\n linecolor.appendChild(inputLineColor);\n container.appendChild(linecolor);\n }\n\n // epaisseur du trait\n function createLineWidth () {\n var linewidth = document.createElement(\"div\");\n linewidth.className = \"legend-styling-div\";\n var lLineWidth = document.createElement(\"label\");\n lLineWidth.className = \"legend-line\";\n lLineWidth.htmlFor = this.id ? \"line-width-\" + this.id : \"line-width\";\n lLineWidth.innerHTML = this.labels[\"line-width\"];\n var inputLineWidth = document.createElement(\"input\");\n inputLineWidth.className = \"legend-styling\";\n inputLineWidth.id = this.id ? \"line-width-\" + this.id : \"line-width\";\n inputLineWidth.title = params.values.width;\n inputLineWidth.type = \"range\";\n inputLineWidth.min = \"0\";\n inputLineWidth.max = \"10\";\n inputLineWidth.step = \"1\";\n inputLineWidth.defaultValue = params.values.width;\n inputLineWidth.setAttribute(\"data-id\", \"line-width\");\n if (inputLineWidth.addEventListener) {\n inputLineWidth.addEventListener(\"change\", function (e) {\n logger.trace(e);\n e.target.title = e.target.value;\n self._renderThumbnail(params.type, Object.assign(params.values, {\n width : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n } else if (inputLineWidth.attachEvent) {\n inputLineWidth.attachEvent(\"onchange\", function (e) {\n logger.trace(e);\n e.target.title = e.target.value;\n self._renderThumbnail(params.type, Object.assign(params.values, {\n width : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n }\n linewidth.appendChild(lLineWidth);\n linewidth.appendChild(inputLineWidth);\n container.appendChild(linewidth);\n }\n\n // opacité du trait\n function createLineOpacity () {\n var lineopacity = document.createElement(\"div\");\n lineopacity.className = \"legend-styling-div\";\n var lLineOpacity = document.createElement(\"label\");\n lLineOpacity.className = \"legend-line\";\n lLineOpacity.htmlFor = this.id ? \"line-opacity-\" + this.id : \"line-opacity\";\n lLineOpacity.innerHTML = this.labels[\"line-opacity\"];\n var inputLineOpacity = document.createElement(\"input\");\n inputLineOpacity.className = \"legend-styling\";\n inputLineOpacity.id = this.id ? \"line-opacity-\" + this.id : \"line-opacity\";\n inputLineOpacity.title = params.values.opacity;\n inputLineOpacity.type = \"range\";\n inputLineOpacity.min = \"0\";\n inputLineOpacity.max = \"1\";\n inputLineOpacity.step = \"0.1\";\n inputLineOpacity.defaultValue = params.values.opacity;\n inputLineOpacity.setAttribute(\"data-id\", \"line-opacity\");\n if (inputLineOpacity.addEventListener) {\n inputLineOpacity.addEventListener(\"change\", function (e) {\n logger.trace(e);\n e.target.title = e.target.value;\n self._renderThumbnail(params.type, Object.assign(params.values, {\n opacity : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n } else if (inputLineOpacity.attachEvent) {\n inputLineOpacity.attachEvent(\"onchange\", function (e) {\n logger.trace(e);\n e.target.title = e.target.value;\n self._renderThumbnail(params.type, Object.assign(params.values, {\n opacity : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n }\n lineopacity.appendChild(lLineOpacity);\n lineopacity.appendChild(inputLineOpacity);\n container.appendChild(lineopacity);\n }\n\n // couleur de remplissage\n function createFillColor () {\n var fillcolor = document.createElement(\"div\");\n fillcolor.className = \"legend-styling-div\";\n var lFillColor = document.createElement(\"label\");\n lFillColor.className = \"legend-fill\";\n lFillColor.htmlFor = this.id ? \"fill-color-\" + this.id : \"fill-color\";\n lFillColor.innerHTML = this.labels[\"fill-color\"];\n var inputFillColor = document.createElement(\"input\");\n inputFillColor.className = \"legend-styling\";\n inputFillColor.id = this.id ? \"fill-color-\" + this.id : \"fill-color\";\n inputFillColor.title = \"Selectionner une couleur de remplissage\";\n inputFillColor.type = \"color\";\n inputFillColor.value = params.values.color;\n inputFillColor.setAttribute(\"data-id\", \"fill-color\");\n if (inputFillColor.addEventListener) {\n inputFillColor.addEventListener(\"change\", function (e) {\n self._renderThumbnail(params.type, Object.assign(params.values, {\n color : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n } else if (inputFillColor.attachEvent) {\n inputFillColor.attachEvent(\"onchange\", function (e) {\n self._renderThumbnail(params.type, Object.assign(params.values, {\n color : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n }\n fillcolor.appendChild(lFillColor);\n fillcolor.appendChild(inputFillColor);\n container.appendChild(fillcolor);\n }\n\n // opacité du remplissage\n function createFillOpacity () {\n var fillopacity = document.createElement(\"div\");\n fillopacity.className = \"legend-styling-div\";\n var lFillOpacity = document.createElement(\"label\");\n lFillOpacity.className = \"legend-fill\";\n lFillOpacity.htmlFor = this.id ? \"fill-opacity-\" + this.id : \"fill-opacity\";\n lFillOpacity.innerHTML = this.labels[\"fill-opacity\"];\n var inputFillOpacity = document.createElement(\"input\");\n inputFillOpacity.className = \"legend-styling\";\n inputFillOpacity.id = this.id ? \"fill-opacity-\" + this.id : \"fill-opacity\";\n inputFillOpacity.title = params.values.opacity;\n inputFillOpacity.type = \"range\";\n inputFillOpacity.min = \"0\";\n inputFillOpacity.max = \"1\";\n inputFillOpacity.step = \"0.1\";\n inputFillOpacity.defaultValue = params.values.opacity;\n inputFillOpacity.setAttribute(\"data-id\", \"fill-opacity\");\n if (inputFillOpacity.addEventListener) {\n inputFillOpacity.addEventListener(\"change\", function (e) {\n e.target.title = e.target.value;\n self._renderThumbnail(params.type, Object.assign(params.values, {\n opacity : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n } else if (inputFillOpacity.attachEvent) {\n inputFillOpacity.attachEvent(\"onchange\", function (e) {\n e.target.title = e.target.value;\n self._renderThumbnail(params.type, Object.assign(params.values, {\n opacity : e.target.value\n }));\n self.onChangeValueLegendMapBox(e);\n });\n }\n fillopacity.appendChild(lFillOpacity);\n fillopacity.appendChild(inputFillOpacity);\n container.appendChild(fillopacity);\n }\n\n return container;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n /**\n * Add element into target DOM\n *\n * @returns {Object} - Legend instance\n */\n add () {\n if (!this.options.target) {\n if (!document.getElementById(this.name.target)) {\n var div = document.createElement(\"div\");\n div.id = this.name.target;\n var node = document.documentElement ||\n document.getElementsByTagName(\"body\")[0] ||\n document.getElementsByTagName(\"head\")[0];\n node.appendChild(div);\n }\n this.options.target = document.getElementById(this.name.target);\n }\n if (this.container) {\n this.options.target.appendChild(this.container);\n }\n return this;\n }\n\n /**\n * Set display container or get\n *\n * @param {Boolean} display - show/hidden container or get status\n * @returns {Boolean} - true/false\n */\n display (display) {\n logger.trace(\"display()\", display);\n if (typeof display !== \"undefined\") {\n this.container.style.display = (display) ? \"flex\" : \"none\";\n }\n return (this.container.style.display === \"flex\");\n }\n\n /**\n * Is editable\n *\n * @returns {Boolean} - true/false\n */\n isEditable () {\n return this.editable;\n }\n\n /**\n * Get container Legend Render (DOM)\n *\n * @returns {DOMElement} DOM element\n * @see Layer.prototype.slotLegend()\n * @example\n *
    \n */\n getRenderContainer () {\n return this.rendercontainer;\n }\n\n /**\n * Get container Legend Tools (DOM)\n *\n * @returns {DOMElement} DOM element\n * @see Layer.prototype.slotLegend()\n * @example\n *
    ...
    \n */\n getToolsContainer () {\n return this.toolscontainer;\n }\n\n /**\n * Get container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Legend#editor:legend:onclickedition\n */\n onEditionLegendMapBox (e) {\n logger.trace(\"onEditionLegendMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.legend.onclickedition, e);\n }\n\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Legend#editor:legend:onchangevalue\n */\n onChangeValueLegendMapBox (e) {\n logger.trace(\"onChangeValueLegendMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.legend.onchangevalue, e);\n }\n\n};\n\n// ################################################################### //\n// ########################## CONSTANTES ############################# //\n// ################################################################### //\n\n/**\n * List of supported properties\n */\nLegend.PROPERTIES = {\n line : [\n \"line-color\",\n \"line-dasharray\",\n \"line-opacity\",\n \"line-width\"\n ],\n fill : [\n \"fill-color\",\n \"fill-opacity\",\n \"fill-outline-color\",\n \"fill-pattern\"\n ],\n background : [\n \"background-color\",\n \"background-opacity\",\n \"background-pattern\"\n ],\n circle : [\n \"circle-color\",\n \"circle-opacity\",\n \"circle-stroke-color\",\n \"circle-stroke-opacity\",\n \"circle-stroke-width\"\n ],\n icon : [\n \"icon-color\",\n \"icon-image\",\n \"icon-opacity\",\n \"__icon-size\"\n ],\n text : [\n \"__text-anchor\",\n \"text-color\",\n \"text-field\",\n \"__text-font\",\n \"__text-opacity\",\n \"__text-size\"\n ]\n};\n\nexport default Legend;\n\n// Expose Editor as ol.editor.View (for a build bundle)\nif (window.ol && window.ol.style) {\n if (!window.ol.style.editor) {\n window.ol.style.editor = {};\n } \n window.ol.style.editor.Legend = Legend;\n}\n","import EventBus from \"eventbusjs\";\nimport EventEditor from \"./Event\";\nimport Style from \"./Style\";\nimport Legend from \"./Legend\";\nimport Filter from \"./Filter\";\nimport Utils from \"../../Utils/Helper\";\nimport Logger from \"../../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"editor-layer\");\n\n/**\n * @classdesc\n *\n * MapBox filter management\n *\n * @constructor\n * @alias ol.style.editor.Layer\n * @param {Object} options - options for function call.\n * @example\n * var layers = new Layer ({\n * target : ...,\n * position : 1, // identifiant de position (unique !)\n * tools : {\n * \"visibility\" : true, // afficher l'icone de visibilité\n * \"icon\" : {\n * \"image\" : true, // afficher l'icone \"oeil\" (defaut) ou une checkbox\n * \"anchor\" : \"start\" | \"end\" // afficher l'icone au debut ou à la fin (defaut)\n * },\n * \"type\" : true, // afficher l'icone du type de geometrie\n * \"pin\" : true, // afficher l'icone de puce\n * \"remove\" : false, // TODO afficher l'icone de suppression\n * \"clone\" : false // TODO afficher l'icone de duplication\n * },\n * obj : {\n * \"id\": \"ocs - vegetation\", // MANDATORY\n * \"type\": \"fill\", // OPTIONAL\n * \"source\": \"pyramide_proto\", // OPTIONAL\n * \"source-layer\": \"ocs_vegetation_surf\" // OPTIONAL\n * }\n * });\n * layers.addLegend(oLegend);\n * layers.slotLegend();\n * layers.addStyle(oStyle);\n * layers.addFilter(oFilter);\n * layers.add();\n * layers.active(false);\n * layers.visibility(false);\n * layers.display(false);\n * layers.collapse();\n * EventBus.addEventListener(\"editor:layer:onclickvisibility\", function (e) {\n * // e.target.data : options !\n * // e.target.editorID : id or null\n * }, this);\n */\nclass Layer {\n\n constructor (options) {\n logger.trace(\"[constructor] Layer\", options);\n\n // options\n this.options = options || {};\n\n if (!(this instanceof Layer)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this._initialize();\n\n this._initContainer();\n }\n\n // ################################################################### //\n // ##################### private methods ############################# //\n // ################################################################### //\n /**\n * Initialize component\n * (called by constructor)\n *\n * @private\n */\n _initialize () {\n // unique editor id (optional!)\n this.id = this.options.id || null; // null si le layer n'appartient pas à un editeur !\n\n if (!this.options.target) {\n // cf. add()\n }\n\n if (!this.options.position) {\n this.options.position = 0;\n }\n\n var _toolsDefault = {\n visibility : true,\n icon : {\n image : true,\n anchor : \"end\"\n },\n type : true,\n pin : true,\n remove : false, // TODO\n clone : false // TODO\n };\n\n if (!this.options.tools) {\n this.options.tools = _toolsDefault;\n }\n\n Utils.mergeParams(this.options.tools, _toolsDefault, false);\n\n var _objDefault = {\n id : \"\",\n type : \"\", // icone sur le type de geometrie\n source : \"\",\n \"source-layer\" : \"\"\n };\n\n if (!this.options.obj) {\n this.options.obj = _objDefault;\n }\n\n Utils.mergeParams(this.options.obj, _objDefault, false);\n\n // legende intégrée\n this.bSlotLegend = false;\n\n // obj\n this.oFilter = null;\n this.oStyle = null;\n this.oLegend = null;\n\n // dom\n this.container = null;\n this.DomVisibility = null;\n this.DomToggle = null;\n\n // DOM : className or id\n this.name = {\n target : \"GPEditorMapBoxLayerTarget\",\n container : \"GPEditorMapBoxLayerContainer\",\n containerlegend : \"GPEditorMapBoxLayerLegendContainer\",\n containertitle : \"GPEditorMapBoxLayerTitleContainer\",\n imagelabelinput : \"GPEditorMapBoxLayerImageInput\",\n imagelabel : \"GPEditorMapBoxLayerImageLabel\",\n typeimg : \"GPEditorMapBoxLayerTypeImage\",\n titleinput : \"GPEditorMapBoxLayerTitleInput\",\n titlelabel : \"GPEditorMapBoxLayerTitleLabel\",\n containertools : \"GPEditorMapBoxToolsContainer\",\n visibilityinput : \"GPEditorMapBoxToolsVisibilityInput\",\n visibilitylabel : \"GPEditorMapBoxToolsVisibilityLabel\",\n visibilityinputdisable : \"GPEditorMapBoxToolsVisibilityInputDisable\",\n visibilitylabeldisable : \"GPEditorMapBoxToolsVisibilityLabelDisable\"\n };\n }\n\n /**\n * Graphical rendering of the component\n * (called by constructor)\n *\n * @private\n * @example\n * // >> Titre 1 |OOO| <- menu tools : visibility, clone, remove\n * // >> Titre 2 |OXX| <- affichage configurable (cf. options.tools)\n * // Event : clic sur le titre -> ex. affiche le menu des styles / filtres\n * // : clic visibility, clone, remove\n * // DOM :\n *
    \n *
    \n * \n * \n * \n * \n *
    \n *
    \n * \n * \n *
    \n *
    \n */\n _initContainer () {\n // contexte\n var self = this;\n\n var obj = this.options.obj;\n\n var div = document.createElement(\"div\");\n div.className = this.name.container;\n\n // title\n var divTitle = document.createElement(\"div\");\n divTitle.id = this.name.containertitle + \"-\" + this.options.position;\n divTitle.className = this.name.containertitle;\n\n // puce\n if (this.options.tools.pin) { // Optionnel !\n // input\n var inputImage = document.createElement(\"input\");\n inputImage.id = this.name.imagelabelinput + \"-\" + this.options.position;\n inputImage.className = this.name.imagelabelinput;\n inputImage.type = \"checkbox\";\n divTitle.appendChild(inputImage);\n // puce\n var labelImage = document.createElement(\"label\");\n labelImage.className = this.name.imagelabel;\n labelImage.htmlFor = inputImage.id;\n if (labelImage.addEventListener) {\n labelImage.addEventListener(\"click\", function (e) {\n self.onClickLayerMapBox(e);\n });\n } else if (labelImage.attachEvent) {\n labelImage.attachEvent(\"onclick\", function (e) {\n self.onClickLayerMapBox(e);\n });\n }\n divTitle.appendChild(labelImage);\n }\n\n // tools :\n // visibility, (remove, clone)\n var _addTools = function () {\n var divTools = document.createElement(\"div\");\n divTools.id = this.name.containertools + \"-\" + this.options.position;\n divTools.className = this.name.containertools;\n\n // visibility\n if (this.options.tools.visibility) {\n var inputTools = document.createElement(\"input\");\n inputTools.id = this.name.visibilityinput + \"-\" + this.options.position;\n inputTools.className = (this.options.tools.icon.image) ? this.name.visibilityinput : this.name.visibilityinputdisable;\n inputTools.type = \"checkbox\";\n inputTools.checked = \"checked\"; // par défaut, à modifier via visibility(true|false) !\n\n // event for visibility change\n if (inputTools.addEventListener) {\n inputTools.addEventListener(\"click\", function (e) {\n self.onVisibilityLayerMapBox(e);\n });\n } else if (inputTools.attachEvent) {\n // internet explorer\n inputTools.attachEvent(\"onclick\", function (e) {\n self.onVisibilityLayerMapBox(e);\n });\n }\n divTools.appendChild(inputTools);\n // enregistrement utile pour la méthode : visibility()\n this.DomVisibility = inputTools;\n\n var labelTools = document.createElement(\"label\");\n labelTools.htmlFor = this.name.visibilityinput + \"-\" + this.options.position;\n labelTools.id = this.name.visibilitylabel + \"-\" + this.options.position;\n labelTools.className = (this.options.tools.icon.image) ? this.name.visibilitylabel : this.name.visibilitylabeldisable;\n labelTools.title = \"Afficher/masquer la couche\";\n divTools.appendChild(labelTools);\n\n div.appendChild(divTools);\n }\n\n // clone\n if (this.options.tools.clone) {\n // TODO...\n logger.warn(\"Dom for tools clone, it's not yet implemented !\");\n }\n\n // remove\n if (this.options.tools.remove) {\n // TODO...\n logger.warn(\"Dom for tools remove, it's not yet implemented !\");\n }\n };\n\n // ajout des outils au debut du composant\n if (this.options.tools.icon.anchor === \"start\") {\n _addTools.apply(this);\n }\n\n // type\n if (this.options.tools.type && obj.type) { // Optionnel !\n var imgType = document.createElement(\"img\");\n imgType.className = this.name.typeimg;\n // FIXME il faudrait faire la difference entre :\n // - icone uniquement : SYMBOL-ICON\n // - texte uniquement : SYMBOL-TEXT\n // - les 2 : SYMBOL\n // Mais il nous faut les styles complets (paint & layout)\n // pour determiner les 3 types !\n switch (obj.type.toUpperCase()) {\n case \"SYMBOL-ICON\": // not used !\n imgType.style[\"background-position\"] = \"0px 0\";\n break;\n case \"SYMBOL-TEXT\": // not used !\n imgType.style[\"background-position\"] = \"-194px 0\";\n break;\n case \"SYMBOL\":\n imgType.style[\"background-position\"] = \"-84px 0\";\n break;\n case \"LINE\":\n imgType.style[\"background-position\"] = \"-28px 0\";\n break;\n case \"FILL\":\n imgType.style[\"background-position\"] = \"-56px 0\";\n break;\n case \"BACKGROUND\":\n imgType.style[\"background-position\"] = \"-140px 0\";\n break;\n case \"CIRCLE\":\n imgType.style[\"background-position\"] = \"-168px 0\";\n break;\n default:\n // type inconnu ou non pris en charge ou par defaut\n imgType.style[\"background-position\"] = \"-112px 0\";\n }\n divTitle.appendChild(imgType);\n }\n\n // container legend (empty)\n var divLegend = document.createElement(\"div\");\n divLegend.id = this.name.containerlegend + \"-\" + this.options.position;\n divLegend.className = this.name.containerlegend;\n divTitle.appendChild(divLegend);\n\n // input\n var inputTitle = document.createElement(\"input\");\n inputTitle.id = this.name.titleinput + \"-\" + this.options.position;\n inputTitle.className = this.name.titleinput;\n inputTitle.type = \"checkbox\";\n divTitle.appendChild(inputTitle);\n\n // label for\n var labelTitle = document.createElement(\"label\");\n labelTitle.className = this.name.titlelabel;\n labelTitle.htmlFor = inputTitle.id;\n labelTitle.innerHTML = obj[\"id\"] || obj[\"source-layer\"] || obj[\"source\"];\n labelTitle.title = obj[\"source-layer\"] || obj[\"source\"] || obj[\"id\"];\n if (labelTitle.addEventListener) {\n labelTitle.addEventListener(\"click\", function (e) {\n self.onClickLayerMapBox(e);\n });\n } else if (labelTitle.attachEvent) {\n labelTitle.attachEvent(\"onclick\", function (e) {\n self.onClickLayerMapBox(e);\n });\n }\n divTitle.appendChild(labelTitle);\n // enregistrement utile pour la méthode : collapse()\n this.DomToggle = labelTitle;\n\n div.appendChild(divTitle);\n\n // ajout des outils au fin du composant\n if (this.options.tools.icon.anchor === \"end\") {\n _addTools.apply(this);\n }\n\n // main container\n this.container = div;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n /**\n * Add element into target DOM\n * @returns {Object} - Layer instance\n */\n add () {\n logger.trace(\"add()\");\n if (!this.options.target) {\n if (!document.getElementById(this.name.target)) {\n var div = document.createElement(\"div\");\n div.id = this.name.target;\n var node = document.documentElement ||\n document.getElementsByTagName(\"body\")[0] ||\n document.getElementsByTagName(\"head\")[0];\n node.appendChild(div);\n }\n this.options.target = document.getElementById(this.name.target);\n }\n if (this.container) {\n this.options.target.appendChild(this.container);\n }\n return this;\n }\n\n /**\n * Add style in the submenu\n *\n * @param {Object} style - style object\n */\n addStyle (style) {\n logger.trace(\"addStyle()\", style);\n if (style && typeof style === \"object\" && style instanceof Style) {\n this.oStyle = style;\n this.oStyle.display(false); // par defaut !\n }\n }\n\n /**\n * Add filter in the submenu\n *\n * @param {Object} filter - filter object\n */\n addFilter (filter) {\n logger.trace(\"addFilter()\", filter);\n if (filter && typeof filter === \"object\" && filter instanceof Filter) {\n this.oFilter = filter;\n this.oFilter.display(false); // par defaut !\n }\n }\n\n /**\n * Add Legend in the submenu\n *\n * @param {Object} legend - legend object\n */\n addLegend (legend) {\n logger.trace(\"addLegend()\", legend);\n if (legend && typeof legend === \"object\" && legend instanceof Legend) {\n this.oLegend = legend;\n this.oLegend.display(false); // par defaut !\n }\n }\n\n /**\n * Integrate Legend to the layer container\n */\n slotLegend () {\n // cas particulier :\n // on souhaite intégrer une partie de la legende dans le container du layer.\n var legend = this.oLegend;\n if (legend) {\n // FIXME c'est pourri...\n var node = null;\n var nodesLvl1 = this.container.childNodes;\n if (nodesLvl1.length) {\n // selon où se situe l'icone de visibilité : au debut ou à la fin...\n var idx = (this.options.tools.icon.anchor === \"start\") ? 1 : 0;\n var nodesLvl2 = nodesLvl1[idx].childNodes;\n // on recherche le container de la legende\n for (var i = 0; i < nodesLvl2.length; i++) {\n var curnode = nodesLvl2[i];\n if (curnode.id.indexOf(this.name.containerlegend) !== -1) {\n node = curnode;\n }\n }\n }\n if (node) {\n var render = legend.getRenderContainer();\n if (render) {\n node.appendChild(render);\n // legende intégrée\n this.bSlotLegend = true;\n }\n }\n }\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n /**\n * Set visibility or get\n *\n * @param {Boolean} display - set visibility or undefined to get status\n * @returns {Boolean} - true/false\n */\n visibility (display) {\n logger.trace(\"visibility()\", display);\n if (!this.options.tools.visibility) {\n return;\n }\n if (typeof display !== \"undefined\") {\n this.DomVisibility.checked = (display) ? \"checked\" : \"\";\n }\n return this.DomVisibility.checked;\n }\n\n /**\n * Collapse a layer panel (event)\n */\n collapse () {\n logger.trace(\"collapse()\");\n this.DomToggle.click();\n }\n\n /**\n * Click on visibility icon (event)\n */\n visible () {\n logger.trace(\"visible()\");\n if (!this.options.tools.visibility) {\n return;\n }\n this.DomVisibility.click();\n }\n\n /**\n * Set collapse or get\n *\n * @param {Boolean} display - show/hidden container or get status\n * @returns {Boolean} - true/false\n */\n display (display) {\n logger.trace(\"display()\", display);\n var checked = document.getElementById(this.DomToggle.htmlFor).checked;\n if (typeof display !== \"undefined\") {\n this.container.style.display = (display) ? \"inline-flex\" : \"none\";\n if (this.oStyle) {\n this.oStyle.display(display && checked);\n }\n if (this.oFilter) {\n this.oFilter.display(display && checked);\n }\n if (this.oLegend) {\n this.oLegend.display(display && checked);\n }\n }\n return checked;\n }\n\n /**\n * Set disabled/enabled status or get\n *\n * @param {Boolean} active - disable/enable layer interaction or get status\n * @returns {Boolean} - true/false\n */\n active (active) {\n logger.trace(\"active()\", active);\n if (typeof active !== \"undefined\") {\n this.container.className = (active)\n ? this.name.container\n : this.name.container + \" disabled\";\n }\n return (this.container.className === this.name.container);\n }\n\n /**\n * Get container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n /**\n * this method is called by event '' on '' tag form\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onClickLayerMapBox (e) {\n logger.trace(\"onClickLayerMapBox\", e);\n\n var id = e.target.htmlFor.substring(e.target.htmlFor.indexOf(\"-\"));\n var checked = document.getElementById(e.target.htmlFor).checked;\n\n // gestion des inputs\n if (e.target.htmlFor === this.name.imagelabelinput + id) {\n document.getElementById(this.name.titleinput + id).checked = !checked;\n }\n if (e.target.htmlFor === this.name.titleinput + id) {\n // si options.pin:false, ce DOM n'existe pas !\n if (document.getElementById(this.name.imagelabelinput + id)) {\n document.getElementById(this.name.imagelabelinput + id).checked = !checked;\n }\n }\n\n // ouverture du panneau des styles / filtres\n if (this.oStyle) {\n this.oStyle.display(!checked);\n }\n if (this.oFilter) {\n this.oFilter.display(!checked);\n }\n // attention,\n // si la legende est non editable, elle ne se trouve pas dans le sous menu !\n if (this.oLegend && this.oLegend.isEditable()) {\n this.oLegend.display(!checked);\n }\n }\n\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Layer#editor:layer:onclickvisibility\n */\n onVisibilityLayerMapBox (e) {\n logger.trace(\"onVisibilityLayerMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.layer.onclickvisibility, e);\n }\n\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Layer#editor:layer:onclickclone\n */\n onCloneLayerMapBox (e) {\n logger.trace(\"onCloneLayerMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.layer.onclickclone, e);\n }\n\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Layer#editor:layer:onclickremove\n */\n onRemoveLayerMapBox (e) {\n logger.trace(\"onRemoveLayerMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.layer.onclickremove, e);\n }\n\n};\n\nexport default Layer;\n\n// Expose Editor as ol.editor.View (for a build bundle)\nif (window.ol && window.ol.style) {\n if (!window.ol.style.editor) {\n window.ol.style.editor = {};\n } \n window.ol.style.editor.Layer = Layer;\n}\n","import EventBus from \"eventbusjs\";\nimport EventEditor from \"./Event\";\nimport Logger from \"../../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"editor-group\");\n\n/**\n * @classdesc\n *\n * MapBox group management\n *\n * @constructor\n * @alias ol.style.editor.Group\n * @param {Object} options - options for function call.\n * @example\n * var group = new Group ({\n * title : \"MyGroup\",\n * collapse : true, // plier/deplier\n * target : ...\n * });\n * group.add();\n * group.add();\n */\nclass Group {\n\n constructor (options) {\n logger.trace(\"[constructor] Group\", options);\n\n // options\n this.options = options || {\n // default...\n };\n\n if (!(this instanceof Group)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this._initialize();\n\n this._initContainer();\n }\n\n /**\n * Initialize component\n * (called by constructor)\n *\n * @private\n */\n _initialize () {\n // unique editor id (optional!)\n this.id = this.options.id || null;\n\n if (!this.options.target) {\n // cf. add()\n }\n\n if (!this.options.title) {\n // cf. summary\n this.options.title = \"Détails du groupe...\";\n }\n\n // plier par defaut\n if (typeof this.options.collapse === \"undefined\") {\n this.options.collapse = true;\n }\n\n this.container = null;\n\n // DOM : className or id\n this.name = {\n target : \"GPEditorMapBoxGroupTarget\",\n container : \"GPEditorMapBoxGroupContainer\",\n details : \"GPEditorMapBoxGroupDetails\",\n summary : \"GPEditorMapBoxGroupSummary\"\n };\n }\n\n /**\n * Graphical rendering of the component\n * (called by constructor)\n *\n * @private\n * @example\n *
    ...
    \n */\n _initContainer () {\n var div = document.createElement(\"div\");\n div.className = this.name.container;\n\n // FIXME pas compatible IE !\n // https://caniuse.com/#search=details\n // cf. https://css-tricks.com/quick-reminder-that-details-summary-is-the-easiest-way-ever-to-make-an-accordion/\n var details = document.createElement(\"details\");\n details.className = this.name.details;\n details.open = !this.options.collapse;\n div.appendChild(details);\n\n var summary = document.createElement(\"summary\");\n summary.className = this.name.summary;\n summary.innerHTML = this.options.title;\n details.appendChild(summary);\n\n // main container\n this.container = div;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n /**\n * Add element into target DOM\n */\n add () {\n if (!this.options.target) {\n if (!document.getElementById(this.name.target)) {\n var div = document.createElement(\"div\");\n div.id = this.name.target;\n var node = document.documentElement ||\n document.getElementsByTagName(\"body\")[0] ||\n document.getElementsByTagName(\"head\")[0];\n node.appendChild(div);\n }\n this.options.target = document.getElementById(this.name.target);\n }\n if (this.container) {\n this.options.target.appendChild(this.container);\n }\n }\n\n /**\n * Set display container (DOM)\n *\n * @param {Boolean} display - show/hidden container\n */\n display (display) {\n this.container.style.display = (display) ? \"flex\" : \"none\";\n }\n\n /**\n * Get container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n getContainer () {\n var nodes = this.container.childNodes;\n if (nodes.length) {\n // retourne le noeud \"details\" !\n return nodes[0];\n }\n // sinon le container principal\n return this.container;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n /**\n * this method is called by event '' on '' tag form\n *\n * NOT USED !\n * @param {Object} e - HTMLElement\n * @private\n * @fires Group#editor:group:oncollapse\n */\n onCollapseGroupMapBox (e) {\n logger.trace(\"onCollapseGroupMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.group.oncollapse, e);\n }\n\n};\n\nexport default Group;\n","import EventBus from \"eventbusjs\";\nimport EventEditor from \"./Event\";\nimport Utils from \"../../Utils/Helper\";\nimport Logger from \"../../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"editor-search\");\n\n/**\n * @classdesc\n *\n * TODO MapBox search management\n *\n * @constructor\n * @alias ol.style.editor.Search\n * @param {Object} options - options for function call.\n * @todo\n * @example\n * var Search = new Search ({\n * target : ...,\n * tools : {\n * // ...\n * }\n * title : \"Filtres de recherche :\",\n * obj : {}\n * });\n * Search.add();\n * Search.display(true);\n * Search.getContainer();\n */\nclass Search {\n\n constructor (options) {\n logger.trace(\"[constructor] Search\", options);\n\n // options\n this.options = options || {\n // default...\n target : null,\n tools : null,\n title : null,\n obj : null\n };\n\n if (!(this instanceof Search)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this._initialize();\n\n this._initContainer();\n }\n\n /**\n * Initialize component\n * (called by constructor)\n *\n * @private\n */\n _initialize () {\n // unique editor id (optional!)\n this.id = this.options.id || null;\n\n if (!this.options.target) {\n // cf. add()\n }\n\n var _toolsDefault = {};\n\n if (!this.options.tools) {\n this.options.tools = _toolsDefault;\n }\n\n Utils.mergeParams(this.options.tools, _toolsDefault, false);\n\n if (!this.options.obj) {\n // choix d'avoir un objet vide pour une edition futur...\n this.options.obj = {};\n }\n\n if (!this.options.title) {\n this.options.title = \"Recherche de couches :\";\n }\n this.container = null;\n\n // DOM : className or id\n this.name = {\n target : \"GPEditorMapBoxSearchTarget\",\n container : \"GPEditorMapBoxSearchContainer\"\n // TODO ...\n };\n }\n\n /**\n * Graphical rendering of the component\n * (called by constructor)\n *\n * @private\n * @example\n *
    \n * // ...\n *
    \n */\n _initContainer () {\n // contexte\n // var self = this;\n var _search = JSON.parse(JSON.stringify(this.options.obj)); // on manipule une copie !\n\n if (_search.layers) {\n if (_search.layers.length === 0) {\n logger.info(\"tag 'layers' is empty !\");\n }\n }\n\n var div = document.createElement(\"div\");\n div.className = this.name.container;\n\n // TODO...\n // outil de recherche des couches mapbox.\n // 2 modes de recherches : exact ou par autocompletion\n // affichage des resultats directement dans la liste des couches\n // la recherche porte sur les champs suiavnts (options):\n // * id (par defaut)\n // * source-layer (par defaut)\n // * type (ex. Symbol)\n // * field (ex. HOPITAL_PONC) > recherche dans le champs filtre\n // main container\n this.container = div;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n /**\n * Add element into target DOM\n * @returns {Object} - Search instance\n */\n add () {\n if (!this.options.target) {\n if (!document.getElementById(this.name.target)) {\n var div = document.createElement(\"div\");\n div.id = this.name.target;\n var node = document.documentElement ||\n document.getElementsByTagName(\"body\")[0] ||\n document.getElementsByTagName(\"head\")[0];\n node.appendChild(div);\n }\n this.options.target = document.getElementById(this.name.target);\n }\n if (this.container) {\n this.options.target.appendChild(this.container);\n }\n return this;\n }\n\n /**\n * Set display container or get\n *\n * @param {Boolean} display - show/hidden container or get status\n * @returns {Boolean} - true/false\n */\n display (display) {\n logger.trace(\"display()\", display);\n if (typeof display !== \"undefined\") {\n this.container.style.display = (display) ? \"flex\" : \"none\";\n }\n return (this.container.style.display === \"flex\");\n }\n\n /**\n * Get container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Search#editor:search:onsubmit\n */\n onSubmitSearchLayersMapBox (e) {\n logger.trace(\"onSubmitSearchLayersMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.search.onsubmit, e);\n }\n\n /**\n * this method is called by event '' on '' tag form...\n *\n * 'e' contains the option object into 'e.target.data' !\n * 'e' contains the id editor into 'e.target.editorID' !\n *\n * @param {Object} e - HTMLElement\n * @private\n * @fires Search#editor:search:onautocomplete\n */\n onAutocompleteSearchLayersMapBox (e) {\n logger.trace(\"onAutocompleteSearchLayersMapBox\", e);\n e.editorID = this.id;\n e.data = this.options;\n EventBus.dispatch(EventEditor.search.onautocomplete, e);\n }\n\n};\n\nexport default Search;\n","var EditorDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n }\n};\n\nexport default EditorDOM;\n","// import CSS\nimport \"../../CSS/Controls/Editor/GPFeditor.css\";\n// import \"../../CSS/Controls/Editor/GPFeditorStyle.css\";\n// import library\nimport EventBus from \"eventbusjs\";\n// import local\nimport Utils from \"../../Utils/Helper\";\nimport ID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Style from \"./Style\";\nimport Themes from \"./Themes\";\nimport Filter from \"./Filter\";\nimport Legend from \"./Legend\";\nimport Layer from \"./Layer\";\nimport Group from \"./Group\";\nimport Event from \"./Event\";\nimport Search from \"./Search\";\n\n// DOM\nimport EditorDOM from \"./EditorDOM\";\n\nvar logger = Logger.getLogger(\"editor\");\n\n/**\n * @classdesc\n *\n * Editor Styles MapBox...\n *\n * @constructor\n * @alias ol.style.Editor\n * @param {Object} options - options for function call.\n * @fires editor:layer:onclickvisibility\n * @fires editor:layer:onclickclone\n * @fires editor:layer:onclickremove\n * @fires editor:style:oneditjson\n * @fires editor:style:scale:onchangemin\n * @fires editor:style:scale:onchangemax\n * @fires editor:legend:onclickedition\n * @fires editor:legend:onchangevalue\n * @fires editor:filter:oneditjson\n * @fires editor:themes:onclickimage\n * @fires editor:themes:onclicktitle\n * @fires editor:group:oncollapse\n * @fires editor:onloaded\n * @example\n * var editor = new Editor ({\n * target : \"\",\n * style : \"data/styles/layer.json\",\n * themes: {\n * themesSummary : \"\",\n * themes : [{\n * \"thumbnail\": \"data/images/layer0.png\",\n * \"name\": \"standard0\",\n * \"url\": \"data/styles/layer0.json\",\n * \"description\": \"\",\n * \"selected\" : true\n * },{\n * \"thumbnail\": \"data/images/layer1.png\",\n * \"name\": \"standard1\",\n * \"url\": \"data/styles/layer1.json\",\n * \"description\": \"\"\n * }]\n * },\n * scope : this,\n * events : {\n * \"editor:layer:onclickvisibility\" : ...,\n * \"editor:layer:onclickclone\" : ...,\n * \"editor:layer:onclickremove\" : ...,\n * \"editor:style:oneditjson\" : ...,\n * \"editor:style:scale:onchangemin\" : ...,\n * \"editor:style:scale:onchangemax\" : ...,\n * \"editor:filter:oneditjson\" : ...,\n * \"editor:themes:onclickimage\" : this._onClickEventImageTheme(),\n * \"editor:themes:onclicktitle\" : function(e) {...}\n * },\n * tools : {\n * // afficher/cacher les themes (par defaut) ou utiliser les options\n * themes : true | false | {\n * target : \"...\",\n * tools : {\n * \"thumbnails\": true,\n * \"button\": { visible : true, type : \"checkbox\" }\n * },\n * },\n * layers : true | false, // afficher les couches (layers)\n * search : true | false, // TODO : afficher l'outil de recheche de couches\n * style : true | false, // afficher les styles (sous menu layers)\n * filter : true | false, // afficher les filtres (sous menu layers)\n * legend : true | false, // afficher les legendes (layers)\n * group : true | false, // grouper les couches, l'option 'sort' doit être activée (layers)\n * groupAuto : true | false, // definir la construction automatiques des groupes\n * sort : true | false, // trier les couches (layers)\n * sortBy : \"id|class|geom\", // definir le type de tri (layers)\n * sortOrder : \"asc, desc\", // definir l'ordre de tri (layers)\n * title : true | false // afficher les titres des rubriques,\n * collapse : true | false | undefined // afficher et/ou plier les couches ou ne pas afficher l'option,\n * type : true | false, // afficher le type de geometrie (layers)\n * pin : true | false, // afficher la puce pour chaque couche (layers)\n * visibility : true | false, // afficher l'icone de visibilité (layers),\n * icon : { // afficher l'icone \"oeil\" ou \"checkbox\" (layers),\n * \"image\" : true,\n * \"anchor\" : \"start\" // afficher l'icone au debut ou à la fin de la ligne\n * },\n * editable : true | false // active l'edition de la legende (legendes)\n * }\n * });\n * // options par defaut\n * {\n * themes : false,\n * layers : true,\n * search : false,\n * style : false,\n * filter : false,\n * legend : false,\n * group : false,\n * groupAuto : false,\n * sort : true,\n * sortBy : \"id\",\n * sortOrder : \"asc\",\n * title : true,\n * collapse : undefined,\n * type : true,\n * pin : true,\n * visibility : true,\n * icon : {\n * image : true,\n * anchor : \"end\"\n * },\n * editable : true\n * }\n * // Context\n * editor.setContext(\"map\", map);\n * editor.setContext(\"layer\", layer);\n * // create DOM\n * editor.createElement()\n * .then(() => {\n * console.warn(editor.getID());\n * console.log(this.getContext(\"map\"));\n * console.log(this.getContext(\"layer\"));\n * })\n * .catch(error => {});\n * // possibility to add listeners with globale variable : eventbus\n * eventbus.addEventListener(\"editor:style:scale:onchangemin\", function (e) {...});\n */\nclass Editor {\n\n constructor (options) {\n logger.trace(\"[constructor] Editor\", options);\n\n // options\n this.options = options || {\n // TODO default...\n };\n\n if (!(this instanceof Editor)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this._initialize();\n }\n\n /**\n * Initialize component\n * (called by constructor)\n *\n * @private\n */\n _initialize () {\n // gestion des options\n if (!this.options.target) {\n logger.info(\"La 'target' n'est pas renseignée (options.target).\");\n }\n\n if (!this.options.style) {\n logger.error(\"Le 'style' MapBox n'est pas renseigné (options.style) !\");\n return;\n }\n\n if (this.options.events) {\n this._initEvents();\n } else {\n logger.warn(\"Les 'handlers' ne sont pas renseignés (options.events) !\");\n }\n\n if (!this.options.themes) {\n logger.info(\"Les 'themes' MapBox ne sont pas renseignés (options.themes).\");\n }\n\n // options par defaut\n var _toolsDefault = {\n themes : false,\n layers : true,\n search : false,\n style : false,\n filter : false,\n legend : false,\n group : false,\n groupAuto : false,\n sort : true,\n sortBy : \"id\",\n sortOrder : \"asc\",\n title : true,\n collapse : undefined,\n type : true,\n pin : true,\n visibility : true,\n icon : {\n image : true,\n anchor : \"end\"\n },\n editable : true\n };\n\n if (!this.options.tools) {\n logger.trace(\"Utilisation des outils MapBox par défaut (options.tools).\");\n this.options.tools = _toolsDefault;\n }\n\n Utils.mergeParams(this.options.tools, _toolsDefault, false);\n\n // id unique\n this.id = this.options.id || ID.generate();\n\n // context\n this.context = {};\n // property layers\n this.layers = [];\n // dom container\n this.container = null;\n // dom name\n this.name = {\n target : \"GPEditorMapBoxTarget\",\n container : \"GPEditorMapBoxContainer\",\n containerID : \"GPEditorMapBoxContainer_ID_\",\n containerLayers : \"GPEditorMapBoxLayersContainer\",\n titleLayers : \"GPEditorMapBoxLayersTitle\",\n titleLayersID : \"GPEditorMapBoxLayersTitle_ID_\",\n titleThemes : \"GPEditorMapBoxThemesTitle\",\n titleThemesID : \"GPEditorMapBoxThemesTitle_ID_\",\n sep : \"GPEditorMapBoxSep\"\n };\n // style json\n this.mapbox = {};\n // INFO\n // sprites :\n // {\n // url : null,\n // size : {\n // h : null,\n // w : null\n // },\n // json : {}\n // }\n this.sprites = {};\n }\n\n /**\n * Initialize events with handlers\n * (called by constructor)\n *\n * List Events :\n * \"editor:layer:visibility\"\n * \"editor:layer:clone\"\n * \"editor:layer:remove\"\n * \"editor:style:edit\"\n * \"editor:style:minScale\"\n * \"editor:style:maxScale\"\n * \"editor:filter:edit\"\n * \"editor:themes:image\",\n * \"editor:themes:title\"\n * @private\n */\n _initEvents () {\n var ctx = this.options.scope || this;\n var events = this.options.events;\n if (events) {\n for (var event in events) {\n if (events.hasOwnProperty(event)) {\n var handler = events[event];\n // test sur les events disponibles !\n if (handler) {\n if (!EventBus.hasEventListener(event, handler, ctx)) {\n EventBus.addEventListener(event, handler, ctx);\n }\n }\n }\n }\n }\n }\n\n /**\n * Graphical rendering of the component\n * (called by constructor)\n *\n * @example\n *
    \n *
    Liste des 'thèmes'
    \n *
    \n * ...\n *
    \n *
    Liste des 'couches'
    \n *
    \n *
    \n *
    \n * \n * \n * \n *
    \n *
    \n *
    ...
    \n *
    ...
    \n *
    \n *
    \n * @private\n */\n _initContainer () {\n logger.trace(this.mapbox);\n\n // existance d'un autre container (editeur) ?\n // var _idx = 0;\n // var elements = document.querySelectorAll(\"div[id^=\" + this.name.containerID + \"]\");\n // for (var j = 0; j < elements.length; j++) {\n // var element = elements[j];\n // var num = parseInt(element.id.substring(element.id.lastIndexOf(\"_\") + 1), 10);\n // if (num > _idx) {\n // _idx = num;\n // }\n // }\n // if (elements.length) {\n // _idx += 1;\n // }\n // container principal de l'editeur\n var div = document.createElement(\"div\");\n div.id = this.name.containerID + this.id;\n div.className = this.name.container;\n\n // Themes\n var _toolsThemes = this.options.tools.themes;\n if (_toolsThemes && this.options.themes) {\n // title\n if (this.options.tools.title) {\n var titleThemes = document.createElement(\"div\");\n titleThemes.id = this.name.titleThemesID + this.id;\n titleThemes.className = this.name.titleThemes;\n titleThemes.innerHTML = \"Liste des 'thèmes'\";\n div.appendChild(titleThemes);\n }\n\n // lien vers les styles\n var themes = new Themes({\n id : this.id,\n target : div,\n tools : (typeof _toolsThemes === \"object\") ? _toolsThemes : {},\n obj : this.options.themes\n });\n themes.add();\n }\n\n // TODO : Recheche / filtre de couches\n if (this.options.tools.search) {\n var search = new Search({\n id : this.id,\n target : div,\n tools : {},\n obj : this.mapbox.layers // liste des objets layers\n });\n search.add();\n }\n\n for (var source in this.mapbox.sources) {\n if (this.mapbox.sources.hasOwnProperty(source)) {\n if (this.options.tools.layers) {\n // multisources ? Si oui, on renseigne un titre...\n var multisources = (Object.keys(this.mapbox.sources).length > 1) ? 1 : 0;\n if (multisources) {\n var hr = document.createElement(\"hr\");\n hr.className = this.name.sep;\n div.appendChild(hr);\n }\n // title\n if (this.options.tools.title) {\n var titleLayers = document.createElement(\"div\");\n titleLayers.id = this.name.titleLayersID + this.id;\n titleLayers.className = this.name.titleLayers;\n titleLayers.innerHTML = (multisources) ? \"Liste des 'couches' (\" + source + \")\" : \"Liste des 'couches'\";\n div.appendChild(titleLayers);\n }\n }\n\n // gestion de l'ordre avant tri avec la metadata 'order'\n var _layers = this.mapbox.layers.slice(); // clone\n\n // une fois les layers triés, la metadata:geoportail:order permet\n // de savoir l'emplacement du layers dans le fichier de style.\n _layers.forEach(function (layer, order) {\n // on écarte les layers sans source: ex. \"background\"\n // if (!layer.source) {\n // return;\n // }\n // ajout de la metadata d'ordre\n var _metadata = layer[\"metadata\"];\n if (_metadata) {\n _metadata[\"geoportail:order\"] = order;\n } else {\n layer[\"metadata\"] = {\n \"geoportail:order\" : order\n };\n }\n });\n // tri des layers\n if (this.options.tools.sort) {\n var sortBy = this.options.tools.sortBy;\n var sortOrder = this.options.tools.sortOrder;\n var sortFct = function (a, b) {\n // si on utilise les groupements utilisateurs, ils doivent\n // tous être renseignés sinon..., ça va coincer !\n var result = 0;\n if (a[\"metadata\"] &&\n a[\"metadata\"][\"geoportail:group\"] &&\n b[\"metadata\"] &&\n b[\"metadata\"][\"geoportail:group\"]) {\n var cmpA = null;\n var cmpB = null;\n cmpA = a[\"metadata\"][\"geoportail:group\"];\n cmpB = b[\"metadata\"][\"geoportail:group\"];\n result = cmpA.localeCompare(cmpB);\n } else {\n switch (sortBy) {\n case \"geom\":\n result = sortOrder === \"asc\" ? a.type.localeCompare(b.type) || a.id.localeCompare(b.id)\n : b.type.localeCompare(a.type) || b.id.localeCompare(a.id);\n break;\n case \"class\":\n result = sortOrder === \"asc\" ? a[\"source-layer\"].localeCompare(b[\"source-layer\"]) || a.id.localeCompare(b.id)\n : b[\"source-layer\"].localeCompare(a[\"source-layer\"]) || b.id.localeCompare(a.id);\n break;\n case \"id\":\n default:\n // tri sur l'id par defaut\n result = sortOrder === \"asc\" ? a.id.localeCompare(b.id) : b.id.localeCompare(a.id);\n break;\n }\n }\n return result;\n };\n\n _layers.sort(sortFct);\n }\n\n logger.trace(\"Layers : \", _layers);\n\n // gestion des groupes avec la metadata de groupe\n var groupBy = this.options.tools.sortBy; // le même type de tri que les couches !\n var groupAuto = this.options.tools.groupAuto;\n var _groups = {}; // liste et comptage des layers dans chaque groupes\n _layers.forEach(function (layer) {\n // on écarte les layers sans source: ex. \"background\"\n // if (!layer.source) {\n // return;\n // }\n // balise metadata\n var _metadata = layer[\"metadata\"];\n // s'il existe déjà une meta de groupe, on l'utilise...\n // sinon, on la met en place.\n if (_metadata && _metadata[\"geoportail:group\"]) {\n var _groupName = _metadata[\"geoportail:group\"];\n _groups[_groupName] = (_groups[_groupName])\n ? _groups[_groupName] + 1 : 1;\n } else {\n var _field = null;\n switch (groupBy) {\n case \"class\":\n _field = layer[\"source-layer\"];\n break;\n case \"geom\":\n _field = layer.type;\n break;\n case \"id\":\n default:\n _field = layer.id;\n break;\n }\n var _newGroupName = _field;\n if (groupAuto) {\n // separateur\n var _regex = /_|-|:|=/; // TODO à definir via une option !\n\n // index\n var _idx = _field.search(_regex);\n // y'a t il un separateur ?\n _newGroupName = (_idx !== -1) ? _field.substring(0, _idx).trim() : _field;\n }\n // on compte le nombre d'entrée dans un groupe\n _groups[_newGroupName] = (_groups[_newGroupName])\n ? _groups[_newGroupName] + 1 : 1;\n\n // ajout de la metadata de groupe\n if (_metadata) {\n _metadata[\"geoportail:group\"] = _newGroupName;\n } else {\n layer[\"metadata\"] = {\n \"geoportail:group\" : _newGroupName\n };\n }\n }\n });\n\n logger.trace(\"Groups : \", _groups);\n\n // container principal des couches\n var divLayers = document.createElement(\"div\");\n divLayers.className = this.name.containerLayers;\n div.appendChild(divLayers);\n\n var details;\n if (this.options.tools.collapse !== undefined) {\n details = document.createElement(\"details\");\n details.className = \"\";\n details.open = !this.options.tools.collapse;\n divLayers.appendChild(details);\n\n var summary = document.createElement(\"summary\");\n summary.className = \"\";\n summary.innerHTML = \"\";\n details.appendChild(summary);\n }\n\n // container courant (cf. groupe) pour l'ajout des elements\n var target = (this.options.tools.collapse !== undefined) ? details : divLayers;\n\n // Ex. Layers, Styles, Groups et Filtres\n // \"id\": \"ocs - vegetation\",\n // \"type\": \"fill\",\n // \"source\": \"pyramide_proto\",\n // \"source-layer\": \"ocs_vegetation_surf\",\n // \"metadata\" : {\n // \"geoportail:group\": \"ocs\"\n // },\n // \"layout\": {\n // \"visibility\": \"visible\"\n // },\n // \"filter\": [\"in\",\"symbo\",\n // \"SURFACE_D_EAU\",\n // \"BASSIN\",\n // \"ZONE_MARINE\"\n // ],\n // \"paint\": {\n // \"fill-color\": \"#2BB3E1\"\n // }\n var index = -1;\n for (var ii = 0; ii < _layers.length; ii++) {\n var data = _layers[ii];\n index++;\n\n // traitement dans l'ordre des sources\n if (data.source === source) {\n // Groups\n // INFO la gestion des groupes est basée sur la balise metadata::geoportail:group\n // ainsi que sur l'ordre des couches.\n // il n'y a pas de regroupement sans tri des couches !\n if (this.options.tools.group && this.options.tools.sort) {\n var mtd = data.metadata;\n // creation du container de groupe\n // si le tag metadata existe\n if (mtd) {\n var grp = data.metadata[\"geoportail:group\"];\n if (grp) {\n // le groupe doit contenir plus d'un element\n if (_groups[grp] > 1) {\n // le groupe est déjà créé, on en veut plus par la suite...\n _groups[grp] = -1;\n // creation du groupe\n var oGroup = new Group({\n id : this.id,\n target : (this.options.tools.collapse !== undefined) ? details : divLayers,\n title : grp,\n collapse : true\n });\n oGroup.add();\n // le nouveau container pour les elements suivants\n target = oGroup.getContainer();\n } else if (_groups[grp] === 1) {\n // l'element est seul, donc pas d'ajout dans le\n // groupe en cours\n target = (this.options.tools.collapse !== undefined) ? details : divLayers;\n } else {\n // on ajoute l'element dans le groupe courant...\n }\n } else {\n target = (this.options.tools.collapse !== undefined) ? details : divLayers;\n }\n } else {\n target = (this.options.tools.collapse !== undefined) ? details : divLayers;\n }\n }\n // Layers\n if (this.options.tools.layers) {\n var oLayer = new Layer({\n id : this.id,\n target : target,\n position : index + \"_\" + this.id, // unique !\n tools : {\n visibility : this.options.tools.visibility,\n icon : this.options.tools.icon,\n type : this.options.tools.type,\n pin : this.options.tools.pin\n },\n obj : {\n id : data.id,\n type : data.type,\n source : data.source,\n \"source-layer\" : data[\"source-layer\"]\n }\n });\n oLayer.add();\n // update visibility layer\n if (data.layout && data.layout.visibility && data.layout.visibility === \"none\") {\n oLayer.visibility(false);\n }\n // sauvegarde des layers\n this.layers.push(oLayer);\n }\n // Legende\n if (this.options.tools.legend) {\n // gestion de l'edition de la legende :\n // l'option \"editable\" est prioritaire sur le tag \"editable\" du fichier de style !\n var isEditable = this.options.tools.editable;\n if (typeof isEditable === \"undefined\") {\n isEditable = data.editable;\n }\n var oLegend = new Legend({\n id : this.id,\n target : target,\n sprites : this.sprites,\n obj : {\n id : data.id,\n source : data.source,\n title : data.id,\n editable : (typeof isEditable !== \"undefined\") ? isEditable : false,\n paint : data.paint,\n layout : data.layout\n }\n });\n oLegend.add();\n oLegend.display(false);\n if (oLayer) {\n oLayer.addLegend(oLegend);\n oLayer.slotLegend(); // integration de la legende dans le container du layers !\n }\n }\n // Style\n if (this.options.tools.style) {\n var oStyle = new Style({\n id : this.id,\n target : target,\n position : index + \"_\" + this.id, // unique !,\n obj : {\n id : data.id,\n source : data.source,\n layout : data.layout,\n paint : data.paint\n }\n });\n oStyle.add();\n oStyle.display(false);\n if (oLayer) {\n oLayer.addStyle(oStyle);\n }\n // update visibility layer\n if (data.layout && data.layout.visibility && data.layout.visibility === \"none\") {\n oLayer.visibility(false);\n }\n }\n // Filter\n if (this.options.tools.filter) {\n var oFilter = new Filter({\n id : this.id,\n target : target,\n position : index + \"_\" + this.id, // unique !,\n obj : {\n id : data.id,\n source : data.source,\n filter : data.Filter\n }\n });\n oFilter.add();\n oFilter.display(false);\n if (oLayer) {\n oLayer.addFilter(oFilter);\n }\n }\n } else {\n // on ecarte un layer car il n'est pas reconnu dans la source\n // on decremente la position du layer\n if (index >= 0) {\n index--;\n }\n }\n }\n }\n }\n\n // sauvegarde\n this.container = div;\n\n // container principal\n if (!this.options.target) {\n if (!document.getElementById(this.name.target)) {\n var _target = document.createElement(\"div\");\n _target.id = this.name.target;\n var node = document.getElementsByTagName(\"body\")[0] ||\n document.getElementsByTagName(\"head\")[0] ||\n document.documentElement;\n node.appendChild(_target);\n }\n this.options.target = document.getElementById(this.name.target);\n }\n if (this.container) {\n this.options.target.appendChild(this.container);\n }\n // dispatch event\n EventBus.dispatch(Event.onloaded, this);\n }\n\n /**\n * Getting Sprites informations\n * (called by _initialize)\n *\n * @param {String} sprites - url des sprites\n * @returns {Promise} - promise\n * @private\n */\n _getSprites (sprites) {\n var self = this;\n\n // on ne doit pas mettre de promise en échec...\n // car on souhaite continuer le traitement même si on n'a pas de sprites !\n // si le protocole est mapbox://\n if (sprites && sprites.startsWith(\"mapbox://\")) {\n return new Promise((resolve, reject) => {\n logger.error(\"Protocole mapbox:// non géré !\");\n resolve(self);\n });\n }\n // si pas de sprites\n if (!sprites) {\n return new Promise((resolve, reject) => {\n logger.error(\"Auncun sprites disponibles !\");\n resolve(self);\n });\n }\n\n var fetchSpritesImage = function () {\n var spritesImage = sprites + \".png\";\n return fetch(spritesImage, {\n credentials : \"same-origin\"\n })\n .then(function (response) {\n if (response.ok) {\n return response.blob()\n .then(function (blob) {\n self.sprites.url = spritesImage;\n // decode de l'image\n var theImage = new Image();\n theImage.src = spritesImage;\n return theImage.decode()\n .then(function () {\n self.sprites.size = {};\n self.sprites.size.h = theImage.height;\n self.sprites.size.w = theImage.width;\n });\n })\n .catch(error => {\n logger.warn(\"fetch image sprites exception :\", error);\n });\n } else {\n var err = new Error(\"HTTP status code: \" + response.status);\n throw err;\n }\n })\n .catch(error => {\n return new Promise((resolve, reject) => {\n logger.error(\"fetch image sprites exception :\", error);\n reject(error);\n });\n });\n };\n var fetchSpritesJson = function () {\n var spritesJson = sprites + \".json\";\n return fetch(spritesJson, {\n credentials : \"same-origin\"\n })\n .then(function (response) {\n if (response.ok) {\n return response.json()\n .then(function (json) {\n self.sprites.json = json;\n })\n .catch(error => {\n logger.warn(\"fetch json sprites exception :\", error);\n });\n } else {\n var err = new Error(\"HTTP status code: \" + response.status);\n throw err;\n }\n })\n .catch(error => {\n return new Promise((resolve, reject) => {\n logger.error(\"fetch json sprites exception :\", error);\n reject(error);\n });\n });\n };\n\n // promise\n return Promise.all([\n fetchSpritesImage(),\n fetchSpritesJson()\n ]);\n }\n\n // ################################################################### //\n // ########################## INTERFACE ############################## //\n // ################################################################### //\n /**\n * Create Editor\n *\n * @returns {Promise} - promise\n */\n createElement () {\n var self = this;\n // objet json\n if (typeof this.options.style === \"object\") {\n this.mapbox = this.options.style;\n // les sprites sont utiles que si on veut une legende !\n if (this.options.tools.legend) {\n return this._getSprites(this.mapbox.sprite)\n .then(function () {\n // init du DOM\n self._initContainer();\n return self;\n })\n .catch(error => {\n logger.warn(\"fetch sprites exception :\", error);\n });\n } else {\n return new Promise((resolve, reject) => {\n self._initContainer();\n resolve(self);\n });\n }\n }\n\n // url\n if (typeof this.options.style === \"string\") {\n return fetch(this.options.style, {\n credentials : \"same-origin\"\n })\n .then(response => {\n // sauvegarde du json\n return response.json()\n .then(style => {\n self.mapbox = style;\n })\n .then(function () {\n // les sprites sont utiles que si on veut une legende !\n if (self.options.tools.legend) {\n return self._getSprites(self.mapbox.sprite)\n .then(function () {\n // init du DOM\n self._initContainer();\n return self;\n })\n .catch(error => {\n logger.warn(\"fetch sprites exception :\", error);\n });\n } else {\n return new Promise((resolve, reject) => {\n self._initContainer();\n resolve(self);\n });\n }\n })\n .catch(error => {\n logger.error(\"json exception :\", error);\n });\n })\n .catch(error => {\n logger.error(\"fetch exception :\", error);\n });\n }\n }\n\n /**\n * Set display container (DOM)\n *\n * @param {Boolean} display - show/hidden container\n */\n display (display) {\n this.container.style.display = (display) ? \"block\" : \"none\";\n }\n\n setContext (key, value) {\n this.context[key] = value;\n }\n\n getContext (key) {\n return this.context[key];\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n /**\n * Get id editor\n * @returns {Number} id\n */\n getID () {\n return this.id;\n }\n\n /**\n * Get container (DOM)\n * @returns {DOMElement} DOM element\n */\n getContainer () {\n return this.container;\n }\n\n /**\n * Get Style (json)\n * @returns {Object} Style MapBox\n */\n getStyle () {\n return this.mapbox;\n }\n\n /**\n * Get layer style (json)\n * @param {Number} i - index\n * @returns {Object} Style MapBox of a layers\n */\n getStyleLayer (i) {\n var layer = null;\n var o = this.getLayer(i);\n var id = o.options.obj.id;\n for (var k = 0; k < this.mapbox.layers.length; k++) {\n var l = this.mapbox.layers[k];\n if (l.id === id) {\n layer = l;\n break;\n }\n }\n return layer;\n }\n\n /**\n * Get layer object from json style\n * @param {Number} i - index into style json\n * @returns {Object} Style MapBox of a layers\n */\n getLayerFromStyle (i) {\n var layer = null;\n var l = this.mapbox.layers[i];\n for (var k = 0; k < this.getLayers().length; k++) {\n var o = this.getLayer(k);\n if (l.id === o.options.obj.id) {\n layer = o;\n break;\n }\n }\n return layer;\n }\n\n /**\n * Get a list of layer object sorted or not (see options.tools.sort)\n * @returns {Array} - List of layer object\n * @see {ol.style.editor.Layer}\n */\n getLayers () {\n return this.layers;\n }\n\n /**\n * Get the layer object from a list sorted or not (see options.tools.sort)\n * @param {Number} i - index\n * @returns {Object} - layer object\n * @see {ol.style.editor.Layer}\n */\n getLayer (i) {\n return this.layers[i];\n }\n\n};\n\n// on récupère les méthodes de la classe DOM\nUtils.assign(Editor.prototype, EditorDOM);\n\n// ################################################################### //\n// ####################### handlers events to dom #################### //\n// ################################################################### //\n\nexport default Editor;\n\n// Expose Editor as ol.editor.View (for a build bundle)\nif (window.ol && window.ol.style) {\n window.ol.style.Editor = Editor;\n}\n","import SelectorID from \"../../Utils/SelectorID\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar LayerImportDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Map loading\n *\n * @returns {DOMElement} container\n */\n _createLoadingElement : function () {\n var div = document.createElement(\"div\");\n div.id = \"GPmapLoading\";\n div.className = \"\";\n return div;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPimport\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ######################### show widget ############################# //\n // ################################################################### //\n\n\n /**\n * Show Import\n *\n * @returns {DOMElement} DOM element\n */\n _createShowImportPictoElement : function () {\n // contexte d'execution\n var self = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowImportPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowImportPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-import fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Ouvrir l'import de couches\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // Close all results and panels when minimizing the widget\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self._onShowImportClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self._onShowImportClick(e);\n });\n }\n\n return button;\n },\n\n // ################################################################### //\n // ################################ Panel ############################ //\n // ################################################################### //\n\n /**\n * Create Container Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createImportPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPimportPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n return dialog;\n },\n\n _createImportPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createImportPanelHeaderElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader GPelementVisible gpf-visible gpf-panel__header fr-modal__header\";\n return container;\n },\n\n /**\n * Create Return PIcto into Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createImportPanelReturnPictoElement : function () {\n var self = this;\n // return picto\n var returnDiv = document.createElement(\"button\");\n returnDiv.id = this._addUID(\"GPimportPanelReturnPicto\");\n returnDiv.title = \"Masquer le panneau\";\n returnDiv.className = \"GPreturnPicto GPimportPanelReturnPicto GPelementHidden gpf-hidden gpf-btn gpf-btn-icon-return fr-btn fr-btn--close fr-btn--tertiary-no-outline\";\n \n if (checkDsfr()) {\n var returnSpan = document.createElement(\"span\");\n returnSpan.className = \"GPelementHidden\";\n returnSpan.innerHTML = \"Retour\";\n returnDiv.appendChild(returnSpan);\n }\n if (returnDiv.addEventListener) {\n returnDiv.addEventListener(\"click\", function (e) {\n // on ferme le panneau\n document.getElementById(self._addUID(\"GPshowImportPicto\")).click();\n // on nettoie la fenêtre de résultats\n self._onReturnPictoClick(e);\n // on rouvre le panneau vierge\n document.getElementById(self._addUID(\"GPshowImportPicto\")).click();\n });\n } else if (returnDiv.attachEvent) {\n returnDiv.attachEvent(\"onclick\", function (e) {\n document.getElementById(self._addUID(\"GPshowImportPicto\")).click();\n self._onReturnPictoClick(e);\n document.getElementById(self._addUID(\"GPshowImportPicto\")).click();\n });\n }\n return returnDiv;\n },\n\n /**\n * Create Header Title Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createImportPanelTitleElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportHeaderTitle\");\n div.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n div.innerHTML = \"Import de données\";\n return div;\n },\n\n /**\n * Create Header close div\n *\n * @returns {DOMElement} DOM element\n */\n _createImportPanelCloseElement : function () {\n // contexte\n var self = this;\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPimportPanelClose\");\n divClose.className = \"GPpanelClose GPimportPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline\";\n divClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowImportPicto\")).click();\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowImportPicto\")).click();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n return divClose;\n },\n\n // ################################################################### //\n // ########################### Form panel ############################ //\n // ################################################################### //\n\n /**\n * Create Form\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createImportPanelFormElement : function () {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GPimportForm\");\n form.className = \"GPform GPelementVisible gpf-visible gpf-mobile-form gpf-panel__content fr-modal__content\";\n\n // TODO ?\n if (form.addEventListener) {\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n self._onImportSubmit();\n });\n } else if (form.attachEvent) {\n form.attachEvent(\"onsubmit\", function (e) {\n e.preventDefault();\n self._onImportSubmit();\n });\n }\n\n return form;\n },\n\n /**\n * Create Container for import type choice\n *\n * @param {Array} importTypes - import types to be displayed (and used)\n * @returns {DOMElement} DOM element\n */\n _createImportTypeLineElement : function (importTypes) {\n // contexte d'execution\n var context = this;\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportTypeLine\");\n div.className = \"GPimportInputLine\";\n\n var label = document.createElement(\"label\");\n label.id = this._addUID(\"GPimportTypeLabel\");\n label.className = \"GPlabel gpf-label fr-label\";\n label.innerHTML = \"Type de donnée\";\n label.title = \"Type de donnée\";\n div.appendChild(label);\n\n var select = document.createElement(\"select\");\n select.setAttribute(\"aria-labelledby\", this._addUID(\"GPimportTypeLabel\"));\n select.className = \"GPselect gpf-select fr-select\";\n // gestionnaire d'evenement : on stocke la valeur du type d'import\n if (select.addEventListener) {\n select.addEventListener(\"change\", function (e) {\n if (this.value === \"KML\" || this.value === \"GPX\" || this.value === \"GeoJSON\" || this.value === \"MAPBOX\") {\n // static import\n document.getElementById(context._addUID(\"GPimportStaticParams\")).className = \"GPelementVisible gpf-visible fr-my-4w\";\n document.getElementById(context._addUID(\"GPimportServiceParams\")).className = \"GPelementHidden gpf-hidden\";\n } else if (this.value === \"WMS\" || this.value === \"WMTS\" || this.value === \"WFS\") {\n // service import\n document.getElementById(context._addUID(\"GPimportServiceParams\")).className = \"GPelementVisible gpf-visible fr-my-4w\";\n document.getElementById(context._addUID(\"GPimportStaticParams\")).className = \"GPelementHidden gpf-hidden\";\n }\n context._onImportTypeChange(e);\n });\n } else if (select.attachEvent) {\n select.attachEvent(\"onchange\", function () {\n if (this.value === \"KML\" || this.value === \"GPX\" || this.value === \"GeoJSON\" || this.value === \"MAPBOX\") {\n // static import\n document.getElementById(context._addUID(\"GPimportStaticParams\")).className = \"GPelementVisible gpf-visible fr-my-4w\";\n document.getElementById(context._addUID(\"GPimportServiceParams\")).className = \"GPelementHidden gpf-hidden\";\n } else if (this.value === \"WMS\" || this.value === \"WMTS\" || this.value === \"WFS\") {\n // service import\n document.getElementById(context._addUID(\"GPimportServiceParams\")).className = \"GPelementVisible gpf-visible fr-my-4w\";\n document.getElementById(context._addUID(\"GPimportStaticParams\")).className = \"GPelementHidden gpf-hidden\";\n }\n context._onImportTypeChange();\n });\n }\n select.id = this._addUID(\"GPimportTypeSelect\");\n\n // on prend soit les valeurs passées par l'utilisateur, soit des valeurs par défaut\n if (!importTypes || !Array.isArray(importTypes)) {\n importTypes = [\n \"KML\",\n \"GPX\",\n \"GeoJSON\",\n \"MAPBOX\",\n \"WMS\",\n \"WMTS\",\n \"WFS\"\n ];\n }\n var option;\n for (var i = 0; i < importTypes.length; i++) {\n option = document.createElement(\"option\");\n option.value = importTypes[i];\n option.text = (importTypes[i] === \"MAPBOX\") ? \"Tuiles vectorielles\" : importTypes[i];\n select.appendChild(option);\n }\n\n div.appendChild(select);\n\n return div;\n },\n\n /**\n * Create Waiting Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createImportWaitingElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportWaitingContainer\");\n div.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n\n var p = document.createElement(\"p\");\n p.className = \"GPwaitingContainerInfo gpf-waiting_info\";\n p.innerHTML = \"Recherche en cours...\";\n div.appendChild(p);\n\n return div;\n },\n\n // ################################################################### //\n // ##### Params for static import (KML / GPX / GeoJSON) ############## //\n // ################################################################### //\n\n /**\n * Create container for KML/GPX/GeoJSON parameters\n * @param {String} currentType - GeoJSON, GPX or KML value\n * @returns {DOMElement} DOM element\n */\n _createImportStaticParamsContainer : function (currentType) {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportStaticParams\");\n if (currentType === \"KML\" || currentType === \"GPX\" || currentType === \"GeoJSON\" || currentType === \"MAPBOX\") {\n div.className = \"GPelementVisible gpf-visible fr-my-4w\";\n } else {\n div.className = \"GPelementHidden gpf-hidden\";\n }\n\n return div;\n },\n\n /**\n * Create name label for KML/GPX/GeoJSON parameters\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticNameLabel : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPimportInputLine fr-mb-1w\";\n\n var label = document.createElement(\"label\");\n label.className = \"GPlabel gpf-label fr-label\";\n label.htmlFor = this._addUID(\"GPimportName\");\n label.innerHTML = \"Nom\";\n label.title = \"Nom\";\n div.appendChild(label);\n\n var input = document.createElement(\"input\");\n input.type = \"text\";\n input.id = this._addUID(\"GPimportName\");\n input.className = \"GPinput gpf-input fr-input\";\n div.appendChild(input);\n\n return div;\n },\n\n /**\n * Create import choice for KML/GPX/GeoJSON parameters (local or url)\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticModeChoiceDiv : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportChoice\");\n div.className = \"fr-my-1w\";\n return div;\n },\n\n /**\n * Create local import choice for KML/GPX/GeoJSON parameters\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticLocalChoiceDiv : function () {\n var context = this;\n\n var div = document.createElement(\"div\");\n div.className = \"GPimportChoiceAlt gpf-radio-group fr-radio-group\";\n\n var input = document.createElement(\"input\");\n input.type = \"radio\";\n if (input.addEventListener) {\n input.addEventListener(\"change\", function (e) {\n document.getElementById(context._addUID(\"GPimportValueLocal\")).className = \"GPimportInputLine fr-mb-1w\";\n document.getElementById(context._addUID(\"GPimportValueUrl\")).className = \"GPelementHidden gpf-hidden\";\n context._onStaticImportTypeChange(e);\n });\n } else if (input.appendChild) {\n input.appendChild(\"onchange\", function () {\n document.getElementById(context._addUID(\"GPimportValueLocal\")).className = \"GPimportInputLine fr-mb-1w\";\n document.getElementById(context._addUID(\"GPimportValueUrl\")).className = \"GPelementHidden gpf-hidden\";\n context._onStaticImportTypeChange();\n });\n }\n input.name = \"GPimportChoiceMode\";\n input.value = \"local\";\n input.checked = true;\n input.id = this._addUID(\"GPimportChoiceAltLocal\");\n div.appendChild(input);\n\n var label = document.createElement(\"label\");\n label.className = \"GPimportChoiceAltTxt gpf-label fr-label\";\n label.htmlFor = this._addUID(\"GPimportChoiceAltLocal\");\n label.innerHTML = \"par fichier local\";\n label.title = \"par fichier local\";\n div.appendChild(label);\n\n return div;\n },\n\n /**\n * Create url import choice for KML/GPX/GeoJSON parameters\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticUrlChoiceDiv : function () {\n var context = this;\n\n var div = document.createElement(\"div\");\n div.className = \"GPimportChoiceAlt gpf-radio-group fr-radio-group\";\n\n var input = document.createElement(\"input\");\n input.type = \"radio\";\n if (input.addEventListener) {\n input.addEventListener(\"change\", function (e) {\n document.getElementById(context._addUID(\"GPimportValueUrl\")).className = \"GPimportInputLine\";\n document.getElementById(context._addUID(\"GPimportValueLocal\")).className = \"GPelementHidden gpf-hidden\";\n context._onStaticImportTypeChange(e);\n });\n } else if (input.appendChild) {\n input.appendChild(\"onchange\", function () {\n document.getElementById(context._addUID(\"GPimportValueUrl\")).className = \"GPimportInputLine\";\n document.getElementById(context._addUID(\"GPimportValueLocal\")).className = \"GPelementHidden gpf-hidden\";\n context._onStaticImportTypeChange();\n });\n }\n input.id = this._addUID(\"GPimportChoiceAltUrl\");\n input.name = \"GPimportChoiceMode\";\n input.value = \"url\";\n input.checked = false;\n div.appendChild(input);\n\n var label = document.createElement(\"label\");\n label.className = \"GPimportChoiceAltTxt gpf-label fr-label\";\n label.htmlFor = this._addUID(\"GPimportChoiceAltUrl\");\n label.innerHTML = \"par URL\";\n label.title = \"par URL\";\n div.appendChild(label);\n\n return div;\n },\n\n /**\n * Create input div for KML/GPX/GeoJSON parameters local import\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticLocalInputDiv : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportValueLocal\");\n div.className = \"GPimportInputLine\";\n return div;\n },\n\n /**\n * Create input label for KML/GPX/GeoJSON parameters local import\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticLocalInputLabel : function () {\n var label = document.createElement(\"label\");\n label.className = \"GPlabel gpf-label fr-label fr-mb-1w\";\n label.htmlFor = this._addUID(\"GPimportFile\");\n label.innerHTML = \"Fichier local\";\n label.title = \"Fichier local\";\n return label;\n },\n\n /**\n * Create file input for KML/GPX/GeoJSON parameters local import\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticLocalInput : function () {\n var input = document.createElement(\"input\");\n input.type = \"file\";\n input.id = this._addUID(\"GPimportFile\");\n input.className = \"GPimportInputFile gpf-upload fr-upload\";\n return input;\n },\n\n /**\n * Create input div for KML/GPX/GeoJSON parameters url import\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticUrlInputDiv : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportValueUrl\");\n div.className = \"GPelementHidden gpf-hidden\";\n return div;\n },\n\n /**\n * Create input label for KML/GPX/GeoJSON parameters url import\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticUrlInputLabel : function () {\n var label = document.createElement(\"label\");\n label.className = \"GPlabel gpf-label fr-label\";\n label.htmlFor = this._addUID(\"GPimportUrl\");\n label.innerHTML = \"URL\";\n label.title = \"URL\";\n return label;\n },\n\n /**\n * Create url input for KML/GPX/GeoJSON parameters url import\n *\n * @returns {DOMElement} DOM element\n */\n _createStaticUrlInput : function () {\n var input = document.createElement(\"input\");\n input.type = \"text\";\n input.id = this._addUID(\"GPimportUrl\");\n input.className = \"GPinput gpf-input fr-input\";\n return input;\n },\n\n // ################################################################### //\n // ######## Params for service params import (WMS//WMTS/WFS) ######### //\n // ################################################################### //\n\n /**\n * Create container for WMS/WMTS/WFS parameters\n * @param {String} currentType - WMS, WMTS or WFS value\n * @returns {DOMElement} DOM element\n */\n _createServiceParamsContainer : function (currentType) {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportServiceParams\");\n if (currentType === \"WMS\" || currentType === \"WMTS\" || currentType === \"WFS\") {\n div.className = \"GPelementVisible gpf-visible\";\n } else {\n div.className = \"GPelementHidden gpf-hidden\";\n }\n\n return div;\n },\n\n /**\n * Create div for WMS/WMTS/WFS url\n *\n * @returns {DOMElement} DOM element\n */\n _createServiceUrlDiv : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPimportInputLine\";\n return div;\n },\n\n /**\n * Create input label for WMS/WMTS/WFS url\n *\n * @returns {DOMElement} DOM element\n */\n _createServiceUrlInputLabel : function () {\n var label = document.createElement(\"label\");\n label.className = \"GPlabel gpf-label fr-label\";\n label.htmlFor = this._addUID(\"GPimportServiceUrl\");\n label.innerHTML = \"URL du service\";\n label.title = \"URL du service\";\n return label;\n },\n\n /**\n * Create input for WMS/WMTS/WFS parameters url\n *\n * @returns {DOMElement} DOM element\n */\n _createServiceUrlInput : function () {\n var input = document.createElement(\"input\");\n input.type = \"text\";\n input.id = this._addUID(\"GPimportServiceUrl\");\n input.className = \"GPinput gpf-input fr-input\";\n return input;\n },\n\n // ################################################################### //\n // ########################### Submit Form ########################### //\n // ################################################################### //\n\n /**\n * Create Submit Form Element\n *\n * @returns {DOMElement} DOM element\n */\n _createImportSubmitFormElement : function () {\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPimportSubmit\");\n input.className = \"GPsubmit gpf-btn fr-btn\";\n input.type = \"submit\";\n input.value = \"Importer\";\n\n return input;\n },\n\n // ################################################################### //\n // ########################### GetCap Panel ########################## //\n // ################################################################### //\n\n /**\n * Create GetCap Panel Element\n *\n * @returns {DOMElement} DOM element\n */\n _createImportGetCapPanelElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportGetCapPanel\");\n div.className = \"GPpanel GPelementHidden gpf-panel fr-modal gpf-hidden\";\n return div;\n },\n\n /**\n * Create GetCap Panel Header Element\n *\n * @returns {DOMElement} DOM element\n */\n _createImportGetCapPanelHeaderElement : function () {\n // contexte\n var context = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n // panel title\n var panelTitle = document.createElement(\"div\");\n panelTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n panelTitle.innerHTML = \"Couches accessibles\";\n panelTitle.title = \"Couches accessibles\";\n container.appendChild(panelTitle);\n\n // close picto\n var closeDiv = document.createElement(\"button\");\n closeDiv.className = \"GPpanelClose GPimportGetCapPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n closeDiv.title = \"Fermer le panneau\";\n closeDiv.id = this._addUID(\"GPimportGetCapPanelClose\");\n if (closeDiv.addEventListener) {\n closeDiv.addEventListener(\"click\", function () {\n document.getElementById(context._addUID(\"GPshowImportPicto\")).click();\n document.getElementById(context._addUID(\"GPimportGetCapPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(context._addUID(\"GPimportGetCapPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n context._onGetCapPanelClose();\n });\n } else if (closeDiv.attachEvent) {\n closeDiv.attachEvent(\"click\", function () {\n document.getElementById(context._addUID(\"GPshowImportPicto\")).click();\n document.getElementById(context._addUID(\"GPimportGetCapPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(context._addUID(\"GPimportGetCapPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n context._onGetCapPanelClose();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n closeDiv.appendChild(span);\n\n container.appendChild(closeDiv);\n\n return container;\n },\n\n /**\n * Create GetCap Results List Element\n *\n * @returns {DOMElement} DOM element\n */\n _createImportGetCapResultsContainer : function () {\n var container = document.createElement(\"div\");\n container.className = \"GPimportGetCapRoot gpf-panel__list\";\n container.id = this._addUID(\"GPimportGetCapResults\");\n\n return container;\n },\n\n _addImportGetCapResultListRubrique : function (title, container) {\n var ul = document.createElement(\"ul\");\n ul.className = \"GPimportGetCapListRubrique\";\n ul.title = title;\n\n container.appendChild(ul);\n return container;\n },\n\n _addImportGetCapResultRubrique : function (title, container) {\n var li = document.createElement(\"li\");\n li.className = \"GPimportGetCapRubrique gpf-panel__items_layerimport\"; /* gpf-panel__items */\n\n // input\n var input = document.createElement(\"input\");\n input.id = \"GPimportGetCapRubrique-\" + SelectorID.generate();\n input.className = \"GPimportGetCapRubrique\";\n input.type = \"checkbox\";\n li.appendChild(input);\n\n // label for\n var label = document.createElement(\"label\");\n label.className = \"GPimportGetCapRubriqueTitle gpf-label fr-btn fr-btn--secondary\";\n label.htmlFor = input.id;\n label.innerHTML = title;\n label.title = title;\n li.appendChild(label);\n\n container.appendChild(li);\n return container;\n },\n\n _addImportGetCapResultListLayer : function (container) {\n var ul = document.createElement(\"ul\");\n ul.className = \"GPimportGetCapListLayer\";\n\n container.appendChild(ul);\n return container;\n },\n\n _addImportGetCapResultLayer : function (description, id, container) {\n var li = document.createElement(\"li\");\n li.className = \"GPimportGetCapProposal gpf-panel__items_layerimport gpf-panel__items\";\n li.innerHTML = description.content;\n li.title = description.title;\n li.id = \"GPimportGetCapProposal_\" + id;\n\n var context = this;\n if (li.addEventListener) {\n li.addEventListener(\"click\", function (e) {\n context._onGetCapResponseLayerClick(e);\n });\n } else if (li.attachEvent) {\n li.attachEvent(\"onclick\", function () {\n context._onGetCapResponseLayerClick();\n });\n }\n\n container.appendChild(li);\n return container;\n },\n\n // ################################################################### //\n // ########################### MapBox Panel ########################## //\n // ################################################################### //\n\n /**\n * Create MapBox Panel Element\n *\n * @returns {DOMElement} DOM element\n */\n _createImportMapBoxPanelElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPimportMapBoxPanel\");\n div.className = \"GPpanel GPelementHidden gpf-panel fr-modal gpf-hidden\";\n return div;\n },\n\n /**\n * Create MapBox Panel Header Element\n *\n * @returns {DOMElement} DOM element\n */\n _createImportMapBoxPanelHeaderElement : function () {\n // contexte\n var context = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n // return picto\n var returnDiv = document.createElement(\"button\");\n returnDiv.id = this._addUID(\"GPimportMapBoxPanelReturnPicto\");\n returnDiv.title = \"Nouvel import\";\n returnDiv.className = \"GPreturnPicto GPimportMapBoxPanelReturnPicto gpf-btn gpf-btn-icon-return fr-btn fr-btn--secondary gpf-btn--secondary\";\n if (returnDiv.addEventListener) {\n returnDiv.addEventListener(\"click\", function (e) {\n document.getElementById(context._addUID(\"GPshowImportPicto\")).click();\n context._onMapBoxReturnPictoClick(e);\n });\n } else if (returnDiv.attachEvent) {\n returnDiv.attachEvent(\"onclick\", function (e) {\n document.getElementById(context._addUID(\"GPshowImportPicto\")).click();\n context._onMapBoxReturnPictoClick(e);\n });\n }\n container.appendChild(returnDiv);\n\n // panel title\n var panelTitle = document.createElement(\"div\");\n panelTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n panelTitle.innerHTML = \"Edition des styles\";\n panelTitle.title = \"Edition des styles\";\n container.appendChild(panelTitle);\n\n // close picto\n var closeDiv = document.createElement(\"button\");\n closeDiv.className = \"GPpanelClose GPimportMapBoxPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n closeDiv.title = \"Fermer le panneau\";\n closeDiv.id = this._addUID(\"GPimportMapBoxPanelClose\");\n if (closeDiv.addEventListener) {\n closeDiv.addEventListener(\"click\", function () {\n document.getElementById(context._addUID(\"GPshowImportPicto\")).click();\n document.getElementById(context._addUID(\"GPimportMapBoxPanel\")).style.display = \"none\";\n context._onMapBoxPanelClose();\n });\n } else if (closeDiv.attachEvent) {\n closeDiv.attachEvent(\"click\", function () {\n document.getElementById(context._addUID(\"GPshowImportPicto\")).click();\n document.getElementById(context._addUID(\"GPimportMapBoxPanel\")).style.display = \"none\";\n context._onMapBoxPanelClose();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n closeDiv.appendChild(span);\n\n container.appendChild(closeDiv);\n\n return container;\n },\n\n /**\n * Create MapBox Results List Element\n *\n * @returns {DOMElement} DOM element\n */\n _createImportMapBoxResultsContainer : function () {\n var container = document.createElement(\"div\");\n container.className = \"GPimportMapBoxpRoot\";\n container.id = this._addUID(\"GPimportMapBoxResults\");\n return container;\n }\n\n // _addImportMapBoxResultListSource : function (id, source, container) {\n // var ul = document.createElement(\"ul\");\n // ul.className = \"GPimportMapBoxListSource\";\n // ul.title = id;\n //\n // var label = document.createElement(\"label\");\n // label.className = \"GPimportMapBoxListSourceTitle\";\n // label.innerHTML = \"Listes des couches pour la source '\" + id + \"' :\";\n // label.title = source.attribution || id;\n // ul.appendChild(label);\n //\n // container.appendChild(ul);\n // return container;\n // },\n //\n // _addImportMapBoxResultSource : function (layer, container) {\n // var li = document.createElement(\"li\");\n // li.className = \"GPimportMapBoxSource\";\n //\n // // input\n // var input = document.createElement(\"input\");\n // input.id = \"GPimportMapBoxSource-\" + SelectorID.generate();\n // input.className = \"GPimportMapBoxSource\";\n // input.type = \"checkbox\";\n // li.appendChild(input);\n //\n // // label for\n // var name = layer[\"source-layer\"] || layer.id || layer.source;\n // var label = document.createElement(\"label\");\n // label.className = \"GPimportMapBoxSourceTitle\";\n // label.htmlFor = input.id;\n // label.innerHTML = name;\n // label.title = JSON.stringify(layer.metadata) || name;\n // li.appendChild(label);\n //\n // container.appendChild(li);\n // return container;\n // },\n //\n // _addImportMapBoxStyleSource : function (layer, container) {\n // // contexte\n // var self = this;\n //\n // var _style = false;\n // var _obj = {};\n // var _layer = JSON.parse(JSON.stringify(layer)); // on utilise une copie !\n // if (_layer.paint && Object.keys(_layer.paint).length) {\n // _style = true;\n // _obj.paint = _layer.paint;\n // }\n //\n // // pas de style dans paint, on teste dans layout !\n // if (_layer.layout && Object.keys(_layer.layout).length) {\n // _style = true;\n // _obj.layout = _layer.layout;\n // // on supprime visibility à l'affichage uniquement\n // // cf. _addImportMapBoxVisibilitySource !\n // if (_layer.layout.visibility) {\n // delete _obj.visibility;\n // }\n // }\n //\n // function syntaxHighlight (json) {\n // json = json.replace(/&/g, \"&\").replace(//g, \">\");\n // return json.replace(/(\"(\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(true|false|null)\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/g, function (match) {\n // var cls = \"gp-json-number\";\n // if (/^\"/.test(match)) {\n // if (/:$/.test(match)) {\n // cls = \"gp-json-key\";\n // } else {\n // cls = \"gp-json-string\";\n // }\n // } else if (/true|false/.test(match)) {\n // cls = \"gp-json-boolean\";\n // } else if (/null/.test(match)) {\n // cls = \"gp-json-null\";\n // }\n // return \"\" + match + \"\";\n // });\n // }\n //\n // var div = document.createElement(\"div\");\n // div.className = \"GPimportMapBoxSourceStyle\";\n //\n // if (_style) {\n // var strJson = JSON.stringify(_obj, null, 4);\n //\n // var label = document.createElement(\"label\");\n // label.innerHTML = \"JSON Styles :\";\n // div.appendChild(label);\n // var pre = document.createElement(\"pre\");\n // pre.className = \"GPimportMapBoxJsonEdit\";\n // pre.innerHTML = syntaxHighlight(strJson);\n // if (pre.addEventListener) {\n // pre.addEventListener(\"click\", function (e) {\n // self._onSwitchStyleEditSourceMapBox(e);\n // });\n // } else if (pre.appendChild) {\n // pre.appendChild(\"onclick\", function (e) {\n // self._onSwitchStyleEditSourceMapBox(e);\n // });\n // }\n // div.appendChild(pre);\n // }\n //\n // container.appendChild(div);\n // return container;\n // },\n //\n // _addImportMapBoxFilterSource : function (layer, container) {\n // // contexte\n // var self = this;\n //\n // var _filter = false;\n // // FIXME tag filter est obselete !\n // // on doit utiliser les expressions dans \"paint\" ou \"layout\" !\n // if (layer.filter && layer.filter.length) {\n // _filter = true;\n // }\n //\n // var div = document.createElement(\"div\");\n // div.className = \"GPimportMapBoxSourceFilter\";\n //\n // if (_filter) {\n // var label = document.createElement(\"label\");\n // label.innerHTML = \"JSON Filtres :\";\n // div.appendChild(label);\n // var pre = document.createElement(\"pre\");\n // pre.className = \"GPimportMapBoxJsonEdit\";\n // pre.innerHTML = JSON.stringify(layer.filter, null, 4);\n // if (pre.addEventListener) {\n // pre.addEventListener(\"click\", function (e) {\n // self._onSwitchFilterEditSourceMapBox(e);\n // });\n // } else if (pre.appendChild) {\n // pre.appendChild(\"onclick\", function (e) {\n // self._onSwitchFilterEditSourceMapBox(e);\n // });\n // }\n // div.appendChild(pre);\n // }\n //\n // container.appendChild(div);\n // return container;\n // },\n //\n // _addImportMapBoxScaleSource : function (layer, container) {\n // // contexte\n // var self = this;\n //\n // var _scaleMin = layer.minzoom || 0;\n // var _scaleMax = layer.maxzoom || 21;\n //\n // var div = document.createElement(\"div\");\n // div.className = \"GPimportMapBoxSourceScale\";\n //\n // var labelMin = document.createElement(\"label\");\n // labelMin.className = \"GPimportMapBoxSourceScaleLabel\";\n // labelMin.innerHTML = \"minZoom :\";\n // div.appendChild(labelMin);\n //\n // var inputMin = document.createElement(\"input\");\n // inputMin.className = \"GPimportMapBoxSourceScaleInput\";\n // inputMin.type = \"range\";\n // inputMin.value = _scaleMin;\n // inputMin.title = _scaleMin;\n // inputMin.disabled = false;\n // inputMin.min = 0;\n // inputMin.max = 21;\n // if (inputMin.addEventListener) {\n // inputMin.addEventListener(\"change\", function (e) {\n // self._onChangeScaleMinSourceMapBox(e, layer);\n // });\n // } else if (inputMin.appendChild) {\n // inputMin.appendChild(\"onchange\", function (e) {\n // self._onChangeScaleMinSourceMapBox(e, layer);\n // });\n // }\n // div.appendChild(inputMin);\n //\n // div.appendChild(document.createElement(\"br\"));\n //\n // var labelMax = document.createElement(\"label\");\n // labelMax.className = \"GPimportMapBoxSourceScaleLabel\";\n // labelMax.innerHTML = \"maxZoom :\";\n // div.appendChild(labelMax);\n //\n // var inputMax = document.createElement(\"input\");\n // inputMax.className = \"GPimportMapBoxSourceScaleInput\";\n // inputMax.type = \"range\";\n // inputMax.value = _scaleMax;\n // inputMax.title = _scaleMax;\n // inputMax.disabled = false;\n // inputMax.min = 0;\n // inputMax.max = 21;\n // if (inputMax.addEventListener) {\n // inputMax.addEventListener(\"change\", function (e) {\n // self._onChangeScaleMaxSourceMapBox(e, layer);\n // });\n // } else if (inputMax.appendChild) {\n // inputMax.appendChild(\"onchange\", function (e) {\n // self._onChangeScaleMaxSourceMapBox(e, layer);\n // });\n // }\n // div.appendChild(inputMax);\n //\n // container.appendChild(div);\n // return container;\n // },\n //\n // _addImportMapBoxVisibilitySource : function (layer, container) {\n // // contexte\n // var self = this;\n //\n // var _visibility = true;\n // if (layer.layout && layer.layout.visibility && layer.layout.visibility === \"none\") {\n // _visibility = false;\n // }\n //\n // var div = document.createElement(\"div\");\n // div.className = \"GPimportMapBoxSourceVisibility\";\n //\n // var label = document.createElement(\"label\");\n // label.className = \"GPimportMapBoxSourceVisibilityLabel\";\n // label.innerHTML = \"Visibilité :\";\n // div.appendChild(label);\n //\n // var input = document.createElement(\"input\");\n // input.className = \"GPimportMapBoxSourceVisibilityInput\";\n // input.type = \"checkbox\";\n // input.checked = _visibility;\n // input.disabled = false;\n // if (input.addEventListener) {\n // input.addEventListener(\"change\", function (e) {\n // self._onChangeVisibilitySourceMapBox(e, layer);\n // });\n // } else if (input.appendChild) {\n // input.appendChild(\"onchange\", function (e) {\n // self._onChangeVisibilitySourceMapBox(e, layer);\n // });\n // }\n // div.appendChild(input);\n //\n // container.appendChild(div);\n // return container;\n // }\n};\n\nexport default LayerImportDOM;\n","var MeasureToolBoxDOM = {\n\n _toolboxId : \"GPtoolbox-measure-main\",\n _buttonId : \"GPtoolbox-measure-button\",\n _widgetId : \"GPtoolbox-measure-widget\",\n\n /**\n * get toolBox ID\n * @param {Number} uid - uid\n * @returns {String} id selector unique\n */\n getToolBoxID : function (uid) {\n return (uid) ? this._toolboxId + \"-\" + uid : this._toolboxId;\n },\n\n /**\n * get button ID\n * @param {Number} uid - uid\n * @returns {String} id selector unique\n */\n getButtonID : function (uid) {\n return (uid) ? this._buttonId + \"-\" + uid : this._buttonId;\n },\n\n /**\n * get toolBox Container for widget\n * @param {Number} uid - uid\n * @returns {String} id selector unique\n */\n getWidgetID : function (uid) {\n return (uid) ? this._widgetId + \"-\" + uid : this._widgetId;\n },\n\n /**\n * Main container (DOM)\n * @param {Number} uid - uid\n * @returns {DOMElement} DOM element\n */\n _createToolBoxContainerElement : function (uid) {\n //
    \n // \n //
    \n // \n //
    \n //
    \n var container = document.createElement(\"div\");\n container.id = this.getToolBoxID(uid);\n container.className = \"GPshowAdvancedToolPicto\";\n\n var button = document.createElement(\"button\");\n button.id = this.getButtonID(uid);\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowToolBoxPicto gpf-btn gpf-btn-icon-toolbox fr-btn\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n var self = this;\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n this.blur(); // permet de perdre le focus !\n var widget = document.getElementById(self.getWidgetID(uid));\n if (widget.style.display === \"block\") {\n widget.style.display = \"none\";\n } else {\n widget.style.display = \"block\";\n }\n });\n container.appendChild(button);\n\n var widget = document.createElement(\"div\");\n widget.id = this.getWidgetID(uid);\n widget.addEventListener(\"click\", function () {\n\n /*\n e.preventDefault();\n\n // FIXME desactiver tous les outils sur\n // l'ouverture/fermeture de la toolbox ?\n\n var current = e.target.parentNode.getAttribute(\"for\");\n var widgets = this.querySelectorAll(\"div > input\");\n for (var i = 0; i < widgets.length; i++) {\n var id = widgets[i].id;\n\n if (document.getElementById(id) &&\n document.getElementById(id).checked &&\n document.querySelector(\"#\" + id + \" + label\")) {\n document.querySelector(\"#\" + id + \" + label\").click();\n // document.getElementById(id).checked = true;\n }\n\n if (current === id && widgets[i].checked) {\n widgets[i].checked = false;\n } else if (current === id && !widgets[i].checked) {\n widgets[i].checked = true;\n }\n }\n */\n\n }, false);\n\n container.appendChild(widget);\n\n return container;\n }\n};\n\nexport default MeasureToolBoxDOM;\n","// import CSS\nimport \"../../CSS/Controls/ToolBoxMeasure/GPFtoolBoxMeasure.css\";\n// import \"../../CSS/Controls/ToolBoxMeasure/GPFtoolBoxMeasureStyle.css\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Utils from \"../../Utils/Helper\";\nimport ID from \"../../Utils/SelectorID\";\n// DOM\nimport MeasureToolBoxDOM from \"./MeasureToolBoxDOM\";\n\nvar logger = Logger.getLogger(\"toolbox\");\n\n/**\n * @type {ol.control.MeasureToolBox}\n * MeasureToolBox - Boite à outils (ToolBox) pour les outils de mesures.\n * - distance\n * - aire\n * - azimut\n */\nvar MeasureToolBox = {\n\n /**\n * liste des uid/map (pour chaque toolbox)\n * { map : uid }\n * Ex. { \"map1\" : 465456456486845 }\n */\n _toolbox : {},\n\n /**\n * Ajout d'un controle dans la ToolBox.\n * Creation de la toolbox si besoin...\n *\n * @param {ol.Map} map - map\n * @param {ol.control.Control} ctrl - objet à ajouter\n */\n add : function (map, ctrl) {\n logger.trace(\"ToolBox.add()\", ctrl);\n\n if (!map) {\n logger.trace(\"map doesn't exist !?\");\n return;\n }\n\n // contexte d'execution\n var context = typeof window !== \"undefined\" ? window : typeof self !== \"undefined\" ? self : null;\n if (context) {\n // Pour info\n // l'objet ToolBox devrait être partagé avec les outils de mesures...,\n // mais, ce n'est pas le cas pour le mode modules cad un module par extension.\n // c'est pourquoi, on l'enregistre dans le contexte, qui lui est partagé (ex. window)\n this._toolbox = context.gpShareMeasureToolBox || {};\n }\n\n var mapContainer = map.getTargetElement();\n var mapDocument = mapContainer.ownerDocument;\n var mapId = mapContainer.id;\n\n if (!this._toolbox || Object.keys(this._toolbox).length === 0) {\n this._toolbox = {};\n this._toolbox[mapId] = ID.generate();\n } else {\n if (!this._toolbox[mapId]) {\n this._toolbox[mapId] = ID.generate();\n }\n }\n\n var uid = this._toolbox[mapId];\n if (!mapDocument.getElementById(this.getToolBoxID(uid))) {\n logger.trace(\"create toolbox !\");\n // creation et ajout de la toolbox sur la map\n var toolboxContainer = this._createToolBoxContainerElement(uid);\n toolboxContainer.style.pointerEvents = \"auto\"; // ajout pour ol6\n var overlaysContainer = mapContainer.getElementsByClassName(\"ol-overlaycontainer-stopevent\");\n overlaysContainer[0].appendChild(toolboxContainer);\n // mapContainer.appendChild(toolboxContainer);\n }\n\n // ajout du widget dans la toolbox\n var widgetContainer = mapDocument.getElementById(this.getWidgetID(uid));\n ctrl.setTarget(widgetContainer);\n if (context) {\n // Pour info\n // on partage (enregistre) l'objet ToolBox dans le contexte d'execution !\n context.gpShareMeasureToolBox = this._toolbox;\n }\n logger.trace(\"add control to toolbox !\");\n }\n};\n\nUtils.assign(MeasureToolBox, MeasureToolBoxDOM);\n\nexport default MeasureToolBox;\n","// import OpenLayers\nimport Overlay from \"ol/Overlay\";\nimport { Draw as DrawInteraction } from \"ol/interaction\";\nimport {\n Fill,\n Stroke,\n Style,\n Circle\n} from \"ol/style\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport VectorSource from \"ol/source/Vector\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Interactions from \"../Utils/Interactions\";\n// import local with ol dependencies\nimport LayerSwitcher from \"../LayerSwitcher/LayerSwitcher\";\n\n// Derived from OpenLayers measure example\n// http://openlayers.org/en/latest/examples/measure.html\n\nvar logger = Logger.getLogger(\"measures\");\n\n/**\n * @type {ol.control.Measures}\n * @abstract\n * Measures Tools :\n * - length\n * - aera\n * - azimut\n */\nvar Measures = {\n\n // ****************************************************************** //\n // > Default Styles\n // ****************************************************************** //\n\n /*\n * Pointer\n */\n DEFAULT_POINTER_STYLE : new Circle({\n radius : 5,\n stroke : new Stroke({\n color : \"#002A50\",\n width : 2\n }),\n fill : new Fill({\n color : \"rgba(255, 155, 0, 0.7)\"\n })\n }),\n\n /*\n * Measures style line\n */\n DEFAULT_DRAW_START_STYLE : new Style({\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.2)\"\n }),\n stroke : new Stroke({\n color : \"#002A50\",\n lineDash : [10, 10],\n width : 2\n })\n }),\n\n /*\n * Measures final style line\n */\n DEFAULT_DRAW_FINISH_STYLE : new Style({\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.3)\"\n }),\n stroke : new Stroke({\n color : \"#002A50\",\n width : 3\n })\n }),\n\n // ****************************************************************** //\n // > ToolBox : these tools work together\n // ****************************************************************** //\n // sample :\n // tools[name_control][0].(active|instance|map)\n // tools : {\n // MeasureLength : [\n // { active : true, instance : [Object MeasureLength], map : \"map1\" },\n // { active : true, instance : [Object MeasureLength], map : \"map2\" }\n // ],\n // MeasureArea : [],\n // MeasureAzimuth : []\n // }\n tools : {\n MeasureLength : [],\n MeasureArea : [],\n MeasureAzimuth : []\n },\n\n // ****************************************************************** //\n // > Variables\n // ****************************************************************** //\n\n /**\n * Global measure draw interaction\n * @type {ol.interaction.Draw}\n */\n measureDraw : null,\n\n /**\n * Global vector source for measure\n * @type {ol.source.Vector}\n */\n measureSource : null,\n\n /**\n * Global vector layer for measure\n * @type {ol.layer.Vector}\n */\n measureVector : null,\n\n /**\n * Event on removing map layer\n * @type {ol.CollectionEventType}\n */\n eventLayerRemove : null,\n\n /**\n * Currently drawn feature.\n * @type {ol.Feature}\n */\n sketch : null,\n\n /**\n * The measure tooltip element.\n * @type {Element}\n */\n measureTooltipElement : null,\n\n /**\n * Overlay to show the measurement.\n * @type {ol.Overlay}\n */\n measureTooltip : null,\n\n /**\n * TODO The help tooltip element.\n * @type {Element}\n */\n helpTooltipElement : null,\n\n /**\n * TODO Overlay to show the help.\n * @type {ol.Overlay}\n */\n helpTooltip : null,\n\n // ****************************************************************** //\n // > Methods Public\n // ****************************************************************** //\n\n /** Desactived Tool Measure */\n clean : function () {\n var _class = this.CLASSNAME;\n\n logger.trace(\"[\" + _class + \"] deactived tool !\");\n // sur la desactivation de l'outil de mesure\n // on fait un nettoyage des ressources\n // ainsi que le DOM\n this.clearMeasure();\n this.clearMeasureToolTip();\n this.removeMeasureEvents();\n this._pictoContainer.setAttribute(\"aria-pressed\", false);\n },\n\n // ****************************************************************** //\n // > Methods Events\n // ****************************************************************** //\n\n /**\n * Handle pointer move.\n *\n * @param {ol.MapBrowserEvent} e - The event.\n */\n onPointerMoveHandler : function (e) {\n if (e.dragging) {\n return;\n }\n\n /** @type {ol.Coordinate|undefined} */\n var tooltipCoord = e.coordinate;\n\n if (this.sketch) {\n var output;\n var geom = (this.sketch.getGeometry());\n output = this.format((geom));\n if (geom.getType() === \"LineString\") {\n tooltipCoord = geom.getLastCoordinate();\n } else if (geom.getType() === \"Polygon\") {\n tooltipCoord = geom.getInteriorPoint().getCoordinates();\n } else {\n return;\n }\n this.measureTooltipElement.innerHTML = output;\n this.measureTooltip.setPosition(tooltipCoord);\n }\n },\n\n /**\n * Main program !\n * This method is called by event 'click' on control picto\n *\n * @param {Object} e - HTMLElement\n * @param {String} type - LineString or Polygon\n * @private\n */\n onShowMeasureClick : function (e, type) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n var currentMapId = map.getTargetElement().id;\n\n // contexte d'execution\n var context = typeof window !== \"undefined\" ? window : typeof self !== \"undefined\" ? self : null;\n if (context) {\n // Pour info\n // les objets de mesures ont du code partagé\n // (afin de gerer les interactions entre eux).\n // Dans un mode \"modules\", on partage cet objet (this.tools) via le contexte\n // d'execution (ex. avec window)\n this.tools = context.gpShareMeasures || {};\n }\n\n // desactivation des controles de mesures sur la carte courrante\n var mySelf = this.CLASSNAME; // this.constructor.name : pas possible en mode minifié/manglifié !\n for (var className in this.tools) {\n if (this.tools.hasOwnProperty(className)) {\n var measures = this.tools[className];\n for (var i = 0; i < measures.length; i++) {\n var o = measures[i];\n if (o && o.active && className !== mySelf && o.map.id === currentMapId) {\n o.active = false;\n if (o.instance !== null) { // au cas où le controle a été supprimé !\n o.instance.clean();\n }\n }\n }\n }\n }\n\n // desactivation des autres interactions parasites\n Interactions.unset(map, {\n current : \"Measures\"\n });\n\n var opened = this._pictoContainer.ariaPressed;\n if (opened === \"true\") {\n this.addMeasureEvents();\n this.initMeasureInteraction();\n this.addMeasureInteraction(type);\n for (var j = 0; j < this.tools[mySelf].length; j++) {\n if (this.tools[mySelf][j].map.id === currentMapId) {\n this.tools[mySelf][j].active = true;\n }\n }\n } else {\n this.clearMeasure();\n this.clearMeasureToolTip();\n this.removeMeasureEvents();\n for (var k = 0; k < this.tools[mySelf].length; k++) {\n if (this.tools[mySelf][k].map.id === currentMapId) {\n this.tools[mySelf][k].active = false;\n }\n }\n }\n },\n\n // ****************************************************************** //\n // > Methods not Public\n // ****************************************************************** //\n\n /**\n * Clear all dom tooltip of length, area or azimut object.\n */\n clearMeasureToolTip : function () {\n var map = this.getMap();\n if (!map) {\n return;\n }\n\n var mapContainer = map.getTargetElement();\n // au cas où il y'aurait plusieurs container de carte !\n var overlays = mapContainer.getElementsByClassName(\"ol-overlaycontainer\");\n for (var k = 0; k < overlays.length; k++) {\n var nodes = overlays[k];\n var len = nodes.children.length;\n var nodesToRemove = [];\n for (var i = 0; i < len; i++) {\n var node = nodes.children[i];\n if (node.children.length !== 0) {\n var child = node.children[0];\n if (child.className === \"GPmeasureTooltip GPmeasureTooltip-static\" ||\n child.className === \"GPmeasureTooltip GPmeasureTooltip-measure\") {\n nodesToRemove.push(node);\n }\n }\n }\n for (var j = 0; j < nodesToRemove.length; j++) {\n nodes.removeChild(nodesToRemove[j]);\n }\n }\n },\n\n /**\n * Clear all length, area or azimut object.\n */\n clearMeasure : function () {\n var map = this.getMap();\n\n // FIXME !?\n // if (this.measureTooltip) {\n // map.removeOverlay(this.measureTooltip);\n // this.measureTooltip = null;\n // }\n\n if (this.measureVector) {\n map.removeLayer(this.measureVector);\n this.measureVector = null;\n }\n\n if (this.measureDraw) {\n map.removeInteraction(this.measureDraw);\n this.measureDraw = null;\n }\n },\n\n /**\n * Creates a new measure tooltip\n * FIXME bug d'affichage de la tooltip de saisie en cours si on ne termine pas\n * la saisie !?\n *\n * @param {ol.Map} map - The Map.\n */\n createMeasureTooltip : function (map) {\n if (this.measureTooltipElement) {\n this.measureTooltipElement.parentNode.removeChild(this.measureTooltipElement);\n }\n\n this.measureTooltipElement = document.createElement(\"div\");\n this.measureTooltipElement.className = \"GPmeasureTooltip GPmeasureTooltip-measure\";\n\n this.measureTooltip = new Overlay({\n element : this.measureTooltipElement,\n stopEvent : false,\n offset : [0, -15],\n positioning : \"bottom-center\"\n });\n\n map.addOverlay(this.measureTooltip);\n },\n\n /**\n * TODO evolution\n * Creates a new help tooltip\n *\n * @param {ol.Map} map - The Map.\n */\n createHelpTooltip : function (map) {\n if (this.helpTooltipElement) {\n this.helpTooltipElement.parentNode.removeChild(this.helpTooltipElement);\n }\n\n this.helpTooltipElement = document.createElement(\"div\");\n this.helpTooltipElement.className = \"tooltip hidden\";\n\n this.helpTooltip = new Overlay({\n element : this.helpTooltipElement,\n stopEvent : false,\n offset : [15, 0],\n positioning : \"center-left\"\n });\n\n map.addOverlay(this.helpTooltip);\n },\n\n /**\n * Creates a style for drawing\n *\n * @param {Object} styles - styles.\n */\n createStylingMeasureInteraction : function (styles) {\n this.options.styles = styles || {};\n\n // style de depart\n logger.trace(\"style start\", this.options.styles.start);\n\n // Creation à partir des styles par défaut\n var startStyleOpts = {\n image : Measures.DEFAULT_POINTER_STYLE,\n fill : Measures.DEFAULT_DRAW_START_STYLE.getFill(),\n stroke : Measures.DEFAULT_DRAW_START_STYLE.getStroke()\n };\n // ecrasement à partir des propriétés renseignées\n if (this.options.styles.hasOwnProperty(\"pointer\") && this.options.styles.pointer instanceof Image) {\n startStyleOpts.image = this.options.styles.pointer;\n }\n if (this.options.styles.hasOwnProperty(\"start\") && this.options.styles.start instanceof Style) {\n if (this.options.styles.start.getFill() != null) {\n startStyleOpts.fill = this.options.styles.start.getFill();\n }\n if (this.options.styles.start.getStroke() != null) {\n startStyleOpts.stroke = this.options.styles.start.getStroke();\n }\n }\n\n this.options.styles.start = new Style(startStyleOpts);\n\n // style de fin\n logger.trace(\"style finish\", this.options.styles.finish);\n\n var finishStyleOpts = {\n fill : Measures.DEFAULT_DRAW_FINISH_STYLE.getFill(),\n stroke : Measures.DEFAULT_DRAW_FINISH_STYLE.getStroke()\n };\n // ecrasement à partir des propriétés renseignées\n if (this.options.styles.hasOwnProperty(\"finish\") && this.options.styles.finish instanceof Style) {\n if (this.options.styles.finish.getFill() != null) {\n finishStyleOpts.fill = this.options.styles.finish.getFill();\n }\n if (this.options.styles.finish.getStroke() != null) {\n finishStyleOpts.stroke = this.options.styles.finish.getStroke();\n }\n }\n\n this.options.styles.finish = new Style(finishStyleOpts);\n },\n\n /**\n * Add the measure interaction\n *\n * @param {String} type - LineString or Polygon.\n */\n addMeasureInteraction : function (type) {\n var map = this.getMap();\n\n // Creates and adds the interaction\n var self = this;\n this.measureDraw = new DrawInteraction({\n source : this.measureSource,\n // condition : permet de gerer la suppression des derniers points saisis\n condition : function (event) {\n if (event.originalEvent.ctrlKey) {\n if (self.sketch) {\n this.removeLastPoint();\n }\n return false;\n }\n return true;\n },\n type : type,\n style : this.options.styles.start || Measures.DEFAULT_DRAW_START_STYLE\n });\n this.measureDraw.setProperties({\n name : \"Measures\",\n source : this\n });\n map.addInteraction(this.measureDraw);\n\n // Create tooltips\n this.createMeasureTooltip(map);\n\n // Event start measuring\n this.measureDraw.on(\"drawstart\", (evt) => {\n // set sketch\n self.sketch = evt.feature;\n });\n\n // Event end measuring\n this.measureDraw.on(\"drawend\", () => {\n // FIXME MaJ de la tooltip en mode mobile !\n if (self.sketch) {\n var output;\n var tooltipCoord;\n var geom = (self.sketch.getGeometry());\n output = self.format((geom));\n if (geom.getType() === \"LineString\") {\n tooltipCoord = geom.getLastCoordinate();\n } else if (geom.getType() === \"Polygon\") {\n tooltipCoord = geom.getInteriorPoint().getCoordinates();\n } else {\n return;\n }\n self.measureTooltipElement.innerHTML = output;\n self.measureTooltip.setPosition(tooltipCoord);\n }\n\n self.measureTooltipElement.className = \"GPmeasureTooltip GPmeasureTooltip-static\";\n self.measureTooltip.setOffset([0, -7]);\n\n // unset sketch\n self.sketch = null;\n // unset tooltip so that a new one can be created\n self.measureTooltipElement = null;\n self.createMeasureTooltip(map);\n });\n },\n\n /**\n * Init the measure interaction\n */\n initMeasureInteraction : function () {\n var map = this.getMap();\n\n this.measureSource = new VectorSource();\n\n this.measureVector = new VectorLayer({\n source : this.measureSource,\n style : this.options.styles.finish || Measures.DEFAULT_DRAW_FINISH_STYLE\n });\n\n // on rajoute le champ gpResultLayerId permettant d'identifier une couche crée par le composant.\n this.measureVector.gpResultLayerId = \"measure\";\n\n map.addLayer(this.measureVector);\n\n // Si un layer switcher est présent dans la carte, on lui affecte des informations pour cette couche\n map.getControls().forEach(\n (control) => {\n if (control.CLASSNAME === \"LayerSwitcher\") {\n // un layer switcher est présent dans la carte\n var layerId = this.measureVector.gpLayerId;\n // on n'ajoute des informations que s'il n'y en a pas déjà (si le titre est le numéro par défaut)\n if (control._layers[layerId].title === layerId) {\n control.addLayer(\n this.measureVector, {\n title : this.options.layerDescription.title,\n description : this.options.layerDescription.description\n }\n );\n }\n }\n }\n );\n }\n};\n\nexport default Measures;\n","import checkDsfr from \"../Utils/CheckDsfr\";\n\nvar ElevationPathDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPelevationPath\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################# Methods to display Main Panel ################### //\n // ################################################################### //\n\n /**\n * Show control\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createShowElevationPathPictoElement : function () {\n // contexte d'execution\n var context = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowElevationPathPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-elevation fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Calculer un profil altimétrique\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // gestionnaire d'evenement :\n // on ouvre le menu de saisie de saisie\n // L'ouverture/Fermeture permet de faire le menage\n // (reinitialisation)\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowElevationPathClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowElevationPathClick(e);\n });\n }\n\n return button;\n },\n\n // ################################################################### //\n // ######################### Methods to Panel ######################## //\n // ################################################################### //\n\n /**\n * Create Container Panel\n *\n * FIXME\n * don't call this._createElevationPathPanelHeaderElement\n * don't call this._createElevationPathPanelProfilElement\n *\n * @returns {DOMElement} DOM element\n */\n _createElevationPathPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPelevationPathPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n // dialog.appendChild(this._createElevationPathPanelHeaderElement());\n // dialog.appendChild(this._createElevationPathPanelProfilElement());\n\n return dialog;\n },\n\n _createElevationPathPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createElevationPathPanelHeaderElement : function () {\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n if (!checkDsfr()) {\n var divInfo = document.createElement(\"button\");\n divInfo.id = this._addUID(\"GPelevationPathPanelInfo\");\n divInfo.className = \"GPpanelInfo gpf-btn gpf-btn-icon-info fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w\";\n divInfo.title = \"Informations\";\n // add event on click\n if (divInfo.addEventListener) {\n divInfo.addEventListener(\n \"click\",\n function () {\n self.onOpenElevationPathInfoClick();\n }\n );\n } else if (divInfo.attachEvent) {\n // internet explorer\n divInfo.attachEvent(\n \"onclick\",\n function () {\n self.onOpenElevationPathInfoClick();\n }\n );\n }\n container.appendChild(divInfo);\n }\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = \"Profil Altimétrique\";\n container.appendChild(divTitle);\n\n var buttonReduce = document.createElement(\"button\");\n buttonReduce.id = this._addUID(\"GPelevationPathPanelReduce\");\n buttonReduce.className = \"GPpanelReduce gpf-btn gpf-btn-icon-reduce fr-btn fr-btn--secondary gpf-btn--secondary\";\n buttonReduce.title = \"Masquer le panneau\";\n\n if (buttonReduce.addEventListener) {\n buttonReduce.addEventListener(\"click\", function (e) {\n if (typeof self.onReduceElevationPathPanelClick === \"function\") {\n self.onReduceElevationPathPanelClick();\n }\n }, false);\n } else if (buttonReduce.attachEvent) {\n buttonReduce.attachEvent(\"onclick\", function (e) {\n if (typeof self.onReduceElevationPathPanelClick === \"function\") {\n self.onReduceElevationPathPanelClick();\n }\n });\n }\n container.appendChild(buttonReduce);\n\n var buttonClose = document.createElement(\"button\");\n buttonClose.id = this._addUID(\"GPelevationPathPanelClose\");\n buttonClose.className = \"GPpanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n buttonClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n if (buttonClose.addEventListener) {\n buttonClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowElevationPathPicto\")).click();\n }, false);\n } else if (buttonClose.attachEvent) {\n buttonClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowElevationPathPicto\")).click();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n buttonClose.appendChild(span);\n container.appendChild(buttonClose);\n\n return container;\n },\n\n /**\n * Create Form\n * see evenement !\n *\n * @returns {DOMElement} DOM element\n */\n _createElevationPathPanelProfilElement : function () {\n var wrapper = document.createElement(\"div\");\n wrapper.className = \"GPelevationPathProfilWrapper\";\n var div = document.createElement(\"div\");\n div.id = \"GPelevationPathProfil\";\n wrapper.appendChild(div);\n\n return wrapper;\n },\n\n /**\n * Create Waiting Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createElevationPathWaitingElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPelevationPathCalcWaitingContainer\");\n div.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n\n var p = document.createElement(\"p\");\n p.className = \"GPwaitingContainerInfo gpf-waiting_info\";\n p.innerHTML = \"Recherche en cours...\";\n\n div.appendChild(p);\n\n return div;\n },\n\n /**\n * Create information Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createElevationPathInformationsElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPelevationPathInformationsContainer\");\n if (!checkDsfr()) {\n div.className = \"GPelementHidden gpf-hidden\";\n }\n\n var p = document.createElement(\"p\");\n p.className = \"GPelevationPathInformations\";\n p.innerHTML = \"Aucune information...\";\n div.appendChild(p);\n\n return div;\n },\n\n /**\n * Add a information into Panel\n *\n * @param {String} name - name of item\n * @param {String} value - value of item\n * @returns {DOMElement} DOM element\n */\n _addElevationPathInformationsItem : function (name, value) {\n var div = document.getElementById(this._addUID(\"GPelevationPathInformationsContainer\"));\n\n if (div) {\n var p = document.createElement(\"p\");\n p.className = \"GPelevationPathInformations\";\n var nameEl = document.createElement(\"span\");\n nameEl.innerText = name;\n var valueEl = document.createElement(\"span\");\n valueEl.innerText = value;\n p.appendChild(nameEl);\n p.appendChild(valueEl);\n div.appendChild(p);\n }\n\n return div;\n }\n};\n\nexport default ElevationPathDOM;\n","import checkDsfr from \"../Utils/CheckDsfr\";\n\n/* globals AmCharts, d3 */\nvar ProfileElevationPathDOM = {\n\n /**\n * Gets a css property from an element\n *\n * @private\n * @param {HTMLElement} element The element to get the property from\n * @param {String} property The css property\n * @returns {String} The value of the property\n *\n * @see https://stackoverflow.com/questions/7444451/how-to-get-the-actual-rendered-font-when-its-not-defined-in-css\n */\n _getCssProperty : function (element, property) {\n return window.getComputedStyle(element, null).getPropertyValue(property);\n },\n\n /**\n * Uses canvas.measureText to compute and return the width of the given text of given font in pixels.\n *\n * @private\n * @param {String} text The text to be rendered.\n * @param {HTMLElement} container The container of the text\n * @param {String} font The font of the container if known, format: 'weight size familiy'\n * @returns {Number} The width of the text\n *\n * @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393\n */\n _getTextWidth : function (text, container, font = null) {\n // re-use canvas object for better performance\n var canvas = /** ts-syntax */(this.canvas) || ((this.canvas) = document.createElement(\"canvas\"));\n var context = canvas.getContext(\"2d\");\n if (font === null) {\n context.font = `${this._getCssProperty(container, \"font-weight\")} ${this._getCssProperty(container, \"font-size\")} ${this._getCssProperty(container, \"font-family\")}`;\n } else {\n context.font = font;\n }\n\n var metrics = context.measureText(text);\n return metrics.width;\n },\n\n /**\n * Converts a data point z to svg y coord\n *\n * @private\n * @param {Object} z The z to convert.\n * @param {Number} pathHeight The height of the path in the svg container in px\n * @param {Number} minGraphZ Min z of the graph\n * @param {Number} pxPerMZ Number of pixels per meter for the z (y) axis\n * @returns {Number} The y svg coordinate of the point\n *\n */\n _dataZToSvgY : function (z, pathHeight, minGraphZ, pxPerMZ) {\n return pathHeight - (z - minGraphZ) * pxPerMZ - 0.5;\n },\n\n /**\n * Converts a data point dist value to svg x coord\n *\n * @private\n * @param {Number} dist The dist to convert\n * @param {Number} svgWidth The witdth of the svg container in px\n * @param {Number} pathWidth The witdth of the path in the svg container in px\n * @param {Number} pxPerMX Number of pixels per meter for the x axis\n * @returns {Array} The x svg coordinate of the point\n *\n */\n _dataDistToSvgX : function (dist, svgWidth, pathWidth, pxPerMX) {\n return (svgWidth - pathWidth) + dist * pxPerMX;\n },\n\n /**\n * Converts a svg x coord to dist value\n *\n * @private\n * @param {Number} svgX The dist to convert\n * @param {Number} svgWidth The witdth of the svg container in px\n * @param {Number} pathWidth The witdth of the path in the svg container in px\n * @param {Number} pxPerMX Number of pixels per meter for the x axis\n * @returns {Array} The dist value\n *\n */\n _svgXToDataDist : function (svgX, svgWidth, pathWidth, pxPerMX) {\n return (svgX + pathWidth - svgWidth) / pxPerMX;\n },\n\n /**\n * Returns the index of value if it were inserted in sorted (by dist) array of data points.\n *\n * @private\n * @param {Array} array Sorted array of data points (with dist property)\n * @param {Number} value Value to test the index of.\n * @returns {Number} The index the value would have.\n *\n */\n _arrayBisect : function (array, value) {\n let idx;\n if (array.length === 0) {\n return 0;\n }\n for (idx = 0; idx < array.length; idx++) {\n if (value < array[idx].dist) {\n return idx;\n }\n }\n return idx - 1;\n },\n\n /**\n * Display Profile function used by default : no additonal framework needed.\n *\n * @public\n * @param {Object} data - elevations values for profile\n * @param {HTMLElement} container - html container where to display profile\n * @param {Object} context - this control object\n * @param {Object} className - calling class (ie ElevationPath)\n * @returns {DOMElement} profil container\n */\n displayProfileByDefault : function (data, container, context, className) {\n var self = context;\n\n if (!container) {\n return;\n }\n\n if (!data) {\n return;\n }\n\n const style = {\n fontFamily : \"Arial\",\n strokeColor : \"#0B6BA7\",\n fillColor : \"#00B798\",\n focusLineColor : \"#F90\",\n };\n\n if (checkDsfr()) {\n style.fontFamily = \"Marianne\";\n style.strokeColor = \"#2F4077\";\n style.fillColor = \"#2F4077\";\n style.focusLineColor = \"#639f6a\";\n };\n\n // on nettoie toujours...\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n\n const margin = {\n top : 25,\n right : 15,\n bottom : 10,\n left : 10\n };\n\n var _displayProfileOptions = self.options.displayProfileOptions;\n var _points = data.points;\n\n var sortedElev = JSON.parse(JSON.stringify(_points));\n sortedElev.sort(function (e1, e2) {\n return e1.z - e2.z;\n });\n\n var minZ = sortedElev[0].z;\n var maxZ = sortedElev[sortedElev.length - 1].z;\n var dist = data.distance;\n let distUnit = \"m\";\n\n const widgetDiv = document.createElement(\"div\");\n widgetDiv.id = \"profileElevationByDefault\";\n container.appendChild(widgetDiv);\n\n // Détermination des tailles en pixels des éléments du widget\n var clientWidth = window.getComputedStyle(container).getPropertyValue(\"width\").replace(/px/, \"\");\n var clientHeight = window.getComputedStyle(container).getPropertyValue(\"height\").replace(/px/, \"\");\n const widgetHeigth = clientHeight - margin.top - margin.bottom;\n const widgetWidth = clientWidth - margin.left - margin.right;\n // const widgetHeigth = container.clientHeight - margin.top - margin.bottom;\n // const widgetWidth = container.clientWidth - margin.left - margin.right;\n\n const zLabelWidth = 17;\n const zGradWidth = this._getTextWidth(Math.round(maxZ).toLocaleString() + \",88\", container, `400 10 ${style.fontFamily}`);\n const xLabelHeight = 17;\n const xGradHeight = 15;\n\n const minZguideHeigth = 15;\n const minXguideWidth = this._getTextWidth(Math.round(dist).toLocaleString() + \",5\", container);\n const minNumXGuides = 1;\n\n const pathHeight = widgetHeigth - xLabelHeight - xGradHeight;\n const pathWidth = widgetWidth - zLabelWidth - zGradWidth;\n\n const elevationSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n elevationSvg.id = \"profileElevationByDefaultSvg\";\n elevationSvg.setAttribute(\"style\", \"display: block; margin: auto; overflow: visible;\");\n elevationSvg.setAttribute(\"viewBox\", `0 0 ${clientWidth} ${clientHeight}`);\n elevationSvg.setAttribute(\"width\", \"100%\");\n elevationSvg.setAttribute(\"height\", \"100%\");\n\n // Détermination des guides en ordonnée :\n const maxNumZguides = Math.floor(pathHeight / minZguideHeigth);\n let gradZ;\n // Traitement du cas altitude max = altitude min\n if (maxZ === minZ) {\n gradZ = 0.1;\n } else {\n gradZ = Math.pow(10, (Math.ceil(Math.log((maxZ - minZ) / maxNumZguides) / Math.log(10)))) / 2;\n }\n let minGraphZ = Math.floor(minZ / gradZ) * gradZ;\n let maxGraphZ = Math.ceil(maxZ / gradZ) * gradZ;\n // cas où le path atteint pile les graduations extremes : ajout d'une gradiation\n if (maxGraphZ === maxZ) {\n maxGraphZ += gradZ;\n }\n // cas où gradZ < 1 : nombres flottants capricieux...\n minGraphZ = Math.round(minGraphZ * 100) / 100;\n maxGraphZ = Math.round(maxGraphZ * 100) / 100;\n\n let numZguides = Math.round((maxGraphZ - minGraphZ) / gradZ);\n\n // Si plus de guides que le max, on passe à une graduation de 10**x en 10**x (et non 10**x / 2)\n if (numZguides + 1 > maxNumZguides) {\n gradZ = Math.pow(10, (Math.ceil(Math.log((maxZ - minZ) / maxNumZguides) / Math.log(10))));\n minGraphZ = Math.floor(minZ / gradZ) * gradZ;\n maxGraphZ = Math.ceil(maxZ / gradZ) * gradZ;\n // cas où le path atteint pile les graduations extremes : ajout d'une gradiation\n if (maxGraphZ === maxZ) {\n maxGraphZ += gradZ;\n }\n // cas où gradZ < 1 : nombres flottants capricieux...\n minGraphZ = Math.round(minGraphZ * 100) / 100;\n maxGraphZ = Math.round(maxGraphZ * 100) / 100;\n numZguides = Math.floor((maxGraphZ - minGraphZ) / gradZ);\n }\n\n numZguides = Math.max(Math.round(numZguides), 1);\n\n const axisZ = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n axisZ.setAttribute(\"class\", \"profile-z-vertical\");\n\n const guidesZ = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\n const gradZyOffsetPx = pathHeight / numZguides;\n let pxPerMZ;\n // Traitement du cas altitude max = altitude min\n if (maxZ === minZ) {\n pxPerMZ = pathHeight / 0.2;\n } else {\n pxPerMZ = pathHeight / (maxGraphZ - minGraphZ);\n }\n\n let gradZtext;\n let yTextTranslation;\n let yStrokeTranslation;\n let gradZstroke;\n let gradZpath;\n let gradZgrad;\n // Ajout des graduations au graphique\n for (let i = 0; i <= numZguides; i++) {\n gradZtext = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n gradZtext.setAttribute(\"class\", \"profile-z-graduation\");\n gradZtext.setAttribute(\"font-family\", style.fontFamily);\n gradZtext.setAttribute(\"font-size\", \"10px\");\n gradZtext.setAttribute(\"fill\", \"#5E5E5E\");\n // Cas où gradZ < 1 : nombres flottants capricieux...\n // Le Math.round est pour éviter des ennuis du genre 3 * 0.1 = 0.300000000000004\n gradZtext.textContent = (Math.round(100 * (minGraphZ + i * gradZ)) / 100).toLocaleString();\n\n yTextTranslation = pathHeight - i * gradZyOffsetPx;\n\n gradZtext.setAttribute(\"transform\", `translate(${zLabelWidth + zGradWidth - 8}, ${yTextTranslation + 5})`);\n gradZtext.setAttribute(\"text-anchor\", \"end\");\n axisZ.appendChild(gradZtext);\n\n yStrokeTranslation = Math.round(yTextTranslation) - 0.5;\n\n gradZstroke = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n gradZpath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n gradZpath.setAttribute(\"cs\", \"100,100\");\n gradZpath.setAttribute(\"stroke-width\", \"1\");\n if (i !== 0) {\n gradZpath.setAttribute(\"stroke-opacity\", \"0.2\");\n } else {\n gradZpath.setAttribute(\"stroke-opacity\", \"1\");\n }\n gradZpath.setAttribute(\"stroke\", \"#000000\");\n gradZpath.setAttribute(\"fill\", \"none\");\n gradZpath.setAttribute(\"d\", `M${zLabelWidth + zGradWidth},${yStrokeTranslation} L${pathWidth + zLabelWidth + zGradWidth},${yStrokeTranslation}`);\n\n gradZgrad = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n gradZgrad.setAttribute(\"cs\", \"100,100\");\n gradZgrad.setAttribute(\"stroke-width\", \"1\");\n gradZgrad.setAttribute(\"stroke-opacity\", \"1\");\n gradZgrad.setAttribute(\"stroke\", \"#000000\");\n gradZgrad.setAttribute(\"fill\", \"none\");\n gradZgrad.setAttribute(\"d\", `M${zLabelWidth + zGradWidth},${yStrokeTranslation} L${zLabelWidth + zGradWidth + 5},${yStrokeTranslation}`);\n gradZgrad.setAttribute(\"transform\", \"translate(-5, 0)\");\n\n gradZstroke.appendChild(gradZgrad);\n gradZstroke.appendChild(gradZpath);\n guidesZ.appendChild(gradZstroke);\n }\n\n var axisZLegend = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n axisZLegend.setAttribute(\"class\", \"profile-z-legend\");\n axisZLegend.setAttribute(\"font-family\", style.fontFamily);\n axisZLegend.setAttribute(\"font-size\", \"11px\");\n axisZLegend.setAttribute(\"fill\", \"#5E5E5E\");\n axisZLegend.textContent = \"Altitude (m)\";\n\n axisZLegend.setAttribute(\"transform\", `translate(${zLabelWidth - 8}, ${Math.round(pathHeight / 2)}) rotate(-90)`);\n axisZLegend.setAttribute(\"text-anchor\", \"middle\");\n\n axisZ.appendChild(axisZLegend);\n elevationSvg.appendChild(axisZ);\n elevationSvg.appendChild(guidesZ);\n\n // Détermination des guides en abscisse :\n // Passage éventuel en km\n if (dist > 2000) {\n dist /= 1000;\n distUnit = \"km\";\n }\n\n const maxNumXguides = Math.floor(pathWidth / minXguideWidth);\n let gradX = Math.pow(10, (Math.ceil(Math.log((dist) / maxNumXguides) / Math.log(10)))) / 2;\n const maxGraphX = dist;\n\n // Si plus de guides que le max, on passe à une graduation de 10**x en 10**x (et non 10**x / 2)\n let numXguides = Math.floor(maxGraphX / gradX);\n if (numXguides > maxNumXguides) {\n gradX = Math.pow(10, (Math.ceil(Math.log((dist) / maxNumXguides) / Math.log(10))));\n numXguides = Math.floor(maxGraphX / gradX);\n } else if (numXguides < minNumXGuides) {\n gradX = Math.pow(10, (Math.ceil(Math.log((dist) / maxNumXguides) / Math.log(10))) - 1);\n numXguides = Math.floor(maxGraphX / gradX);\n }\n\n numXguides = Math.max(numXguides, 1);\n const lastGradX = gradX * numXguides;\n\n const axisX = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n axisX.setAttribute(\"class\", \"profile-x-vertical\");\n\n const guidesX = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\n // Décalage des graduations pour que la dernière corresponde à la distance max\n const pxPerMX = pathWidth / maxGraphX;\n const xOffset = (maxGraphX - lastGradX) * pxPerMX;\n const gradXxOffsetPx = Math.round((pathWidth - xOffset) / numXguides);\n\n let gradXtext;\n let xTextTranslation;\n let xStrokeTranslation;\n let gradXstroke;\n let gradXpath;\n let gradXgrad;\n // Ajout des graduations au graphique\n for (let i = 0; i <= numXguides + 1; i++) {\n gradXtext = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n gradXtext.setAttribute(\"class\", \"profile-x-graduation\");\n gradXtext.setAttribute(\"font-family\", style.fontFamily);\n gradXtext.setAttribute(\"font-size\", \"10px\");\n gradXtext.setAttribute(\"fill\", \"#5E5E5E\");\n\n // Exclusion du cas de la dernière graduation : correspond à la distance max : pas de texte\n if (i !== numXguides + 1) {\n // Cas où gradX < 1 : nombres flottants capricieux...\n gradXtext.textContent = (Math.round(100 * i * gradX) / 100).toLocaleString();\n }\n\n xTextTranslation = zLabelWidth + zGradWidth + i * gradXxOffsetPx;\n // Cas de la dernière graduation : correspond à la distance max\n if (i === numXguides + 1) {\n xTextTranslation = zLabelWidth + zGradWidth + pathWidth;\n }\n\n gradXtext.setAttribute(\"transform\", `translate(${xTextTranslation}, ${pathHeight + xGradHeight + 5})`);\n gradXtext.setAttribute(\"text-anchor\", \"middle\");\n axisX.appendChild(gradXtext);\n\n xStrokeTranslation = xTextTranslation - 0.5;\n\n gradXstroke = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n gradXpath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n gradXpath.setAttribute(\"cs\", \"100,100\");\n gradXpath.setAttribute(\"stroke-width\", \"1\");\n if (i !== 0) {\n gradXpath.setAttribute(\"stroke-opacity\", \"0.2\");\n } else {\n gradXpath.setAttribute(\"stroke-opacity\", \"1\");\n }\n gradXpath.setAttribute(\"stroke\", \"#000000\");\n gradXpath.setAttribute(\"fill\", \"none\");\n gradXpath.setAttribute(\"d\", `M${xStrokeTranslation},${pathHeight} L${xStrokeTranslation},0`);\n\n gradXgrad = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n gradXgrad.setAttribute(\"cs\", \"100,100\");\n gradXgrad.setAttribute(\"stroke-width\", \"1\");\n gradXgrad.setAttribute(\"stroke-opacity\", \"1\");\n gradXgrad.setAttribute(\"stroke\", \"#000000\");\n gradXgrad.setAttribute(\"fill\", \"none\");\n gradXgrad.setAttribute(\"d\", `M${xStrokeTranslation},${pathHeight} L${xStrokeTranslation},${pathHeight - 5}`);\n gradXgrad.setAttribute(\"transform\", \"translate(0, 5)\");\n\n gradXstroke.appendChild(gradXgrad);\n gradXstroke.appendChild(gradXpath);\n guidesX.appendChild(gradXstroke);\n }\n\n var axisXLegend = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n axisXLegend.setAttribute(\"class\", \"profile-x-legend\");\n axisXLegend.setAttribute(\"font-family\", style.fontFamily);\n axisXLegend.setAttribute(\"font-size\", \"11px\");\n axisXLegend.setAttribute(\"fill\", \"#5E5E5E\");\n axisXLegend.textContent = `Distance (${distUnit})`;\n\n axisXLegend.setAttribute(\"transform\", `translate(${zLabelWidth + zGradWidth + pathWidth / 2}, ${pathHeight + xGradHeight + xLabelHeight + 3})`);\n axisXLegend.setAttribute(\"text-anchor\", \"middle\");\n\n axisX.appendChild(axisXLegend);\n elevationSvg.appendChild(axisX);\n elevationSvg.appendChild(guidesX);\n\n const elevationPathG = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\n let factor = 1;\n if (distUnit === \"km\") {\n factor = 1000;\n }\n\n let pointX = this._dataDistToSvgX(_points[0].dist / factor, widgetWidth, pathWidth, pxPerMX);\n let pointY = this._dataZToSvgY(_points[0].z, pathHeight, minGraphZ, pxPerMZ);\n let pathD = `M${pointX},${pointY}`;\n\n for (let i = 1; i < _points.length; i++) {\n pointX = this._dataDistToSvgX(_points[i].dist / factor, widgetWidth, pathWidth, pxPerMX);\n pointY = this._dataZToSvgY(_points[i].z, pathHeight, minGraphZ, pxPerMZ);\n pathD += ` L${pointX},${pointY}`;\n }\n\n const pathPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n pathPath.setAttribute(\"cs\", \"100,100\");\n pathPath.setAttribute(\"stroke-width\", \"1\");\n pathPath.setAttribute(\"stroke-opacity\", \"1\");\n pathPath.setAttribute(\"stroke\", style.strokeColor);\n pathPath.setAttribute(\"fill\", \"none\");\n pathPath.setAttribute(\"d\", pathD);\n\n // Fermeture du path pour le fill\n pathD += ` L${pointX},${pathHeight}`;\n pathD += ` L${widgetWidth - pathWidth},${pathHeight}`;\n\n const pathFill = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n pathFill.setAttribute(\"cs\", \"100,100\");\n pathFill.setAttribute(\"stroke-width\", \"1\");\n pathFill.setAttribute(\"stroke-opacity\", \"0\");\n pathFill.setAttribute(\"stroke\", \"#000000\");\n pathFill.setAttribute(\"fill\", style.fillColor);\n pathFill.setAttribute(\"fill-opacity\", \"0.2\");\n pathFill.setAttribute(\"d\", pathD);\n\n elevationPathG.appendChild(pathPath);\n elevationPathG.appendChild(pathFill);\n elevationSvg.appendChild(elevationPathG);\n\n // Mise en place de l'écouteur d'évènement : pour l'affichage dynamique\n const dynamicsG = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n // Pour écouter la position de la souris\n const pathRectangle = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n pathRectangle.setAttribute(\"width\", pathWidth);\n pathRectangle.setAttribute(\"height\", pathHeight);\n pathRectangle.setAttribute(\"transform\", `translate(${widgetWidth - pathWidth},0)`);\n pathRectangle.setAttribute(\"visibility\", \"hidden\");\n pathRectangle.setAttribute(\"pointer-events\", \"all\");\n\n const sortedDist = JSON.parse(JSON.stringify(_points));\n sortedDist.sort(function (e1, e2) {\n return e1.dist - e2.dist;\n });\n\n const focusLineX = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n focusLineX.setAttribute(\"id\", \"focusLineX\");\n focusLineX.setAttribute(\"class\", \"focusLine-default\");\n focusLineX.setAttribute(\"fill\", \"none\");\n focusLineX.setAttribute(\"stroke\", style.focusLineColor);\n focusLineX.setAttribute(\"stroke-width\", \"0.5px\");\n focusLineX.setAttribute(\"visibility\", \"hidden\");\n\n const focusLineY = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n focusLineY.setAttribute(\"id\", \"focusLineY\");\n focusLineY.setAttribute(\"class\", \"focusLine-default\");\n focusLineY.setAttribute(\"fill\", \"none\");\n focusLineY.setAttribute(\"stroke\", style.focusLineColor);\n focusLineY.setAttribute(\"stroke-width\", \"0.5px\");\n focusLineY.setAttribute(\"visibility\", \"hidden\");\n\n const focusCircle = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n focusCircle.setAttribute(\"id\", \"focusCircle\");\n focusCircle.setAttribute(\"r\", 4);\n focusCircle.setAttribute(\"class\", \"circle-default focusCircle-default\");\n focusCircle.setAttribute(\"fill\", style.focusLineColor);\n focusCircle.setAttribute(\"visibility\", \"hidden\");\n\n dynamicsG.appendChild(focusCircle);\n dynamicsG.appendChild(focusLineX);\n dynamicsG.appendChild(focusLineY);\n\n // Tooltip\n const tooltipDiv = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n const altiSpan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n const slopeSpan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n const coordsSpan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n\n tooltipDiv.setAttribute(\"style\", `text-align:center; max-width:220px; font-size:10px; color:#000000; font-family:${style.fontFamily}; z-index:50;`);\n tooltipDiv.style.pointerEvents = \"none\";\n tooltipDiv.style.position = \"fixed\";\n // tooltipDiv.classList.add(\"tooltipInit\");\n // IE...\n tooltipDiv.setAttribute(\"class\", \"tooltipInit\");\n tooltipDiv.setAttribute(\"text-anchor\", \"middle\");\n\n widgetDiv.appendChild(tooltipDiv);\n\n altiSpan.setAttribute(\"class\", \"altiPathValue\");\n altiSpan.setAttribute(\"x\", \"0\");\n altiSpan.setAttribute(\"dy\", \"-.7em\");\n\n slopeSpan.setAttribute(\"class\", \"altiPathValue\");\n slopeSpan.setAttribute(\"x\", \"0\");\n slopeSpan.setAttribute(\"dy\", \"1em\");\n\n coordsSpan.setAttribute(\"class\", \"altiPathCoords\");\n coordsSpan.setAttribute(\"x\", \"0\");\n coordsSpan.setAttribute(\"dy\", \"1em\");\n\n tooltipDiv.appendChild(altiSpan);\n if (_displayProfileOptions.currentSlope) {\n tooltipDiv.appendChild(slopeSpan);\n }\n tooltipDiv.appendChild(coordsSpan);\n\n const tooltipG = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\n dynamicsG.appendChild(tooltipG);\n\n const tooltipBubble = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n tooltipBubble.setAttribute(\"cs\", \"100,100\");\n tooltipBubble.setAttribute(\"fill\", \"#FFFFFF\");\n tooltipBubble.setAttribute(\"stroke\", \"#CCCCCC\");\n tooltipBubble.setAttribute(\"fill-opacity\", \"0.8\");\n tooltipBubble.setAttribute(\"stroke-width\", \"1\");\n tooltipBubble.setAttribute(\"stroke-opacity\", \"1\");\n\n const tooltipBubbleShadow = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n tooltipBubbleShadow.setAttribute(\"cs\", \"100,100\");\n tooltipBubbleShadow.setAttribute(\"fill\", \"#FFFFFF\");\n tooltipBubbleShadow.setAttribute(\"stroke\", \"#000000\");\n tooltipBubbleShadow.setAttribute(\"fill-opacity\", \"0\");\n tooltipBubbleShadow.setAttribute(\"stroke-width\", \"1\");\n tooltipBubbleShadow.setAttribute(\"stroke-opacity\", \"0.4\");\n tooltipBubbleShadow.setAttribute(\"transform\", \"translate(1,1)\");\n\n tooltipG.appendChild(tooltipBubbleShadow);\n tooltipG.appendChild(tooltipBubble);\n tooltipG.appendChild(tooltipDiv);\n\n // tooltipG.classList.add(\"tooltipInit\");\n // IE... deprecated\n tooltipG.setAttribute(\"class\", \"tooltipInit\");\n tooltipG.style.pointerEvents = \"none\";\n\n function onMouseOver () {\n focusLineX.setAttribute(\"visibility\", \"visible\");\n focusLineY.setAttribute(\"visibility\", \"visible\");\n focusCircle.setAttribute(\"visibility\", \"visible\");\n className.__createProfileMarker(self, _points[0]);\n\n // tooltips\n tooltipDiv.classList.remove(\"tooltipInit\");\n tooltipG.classList.remove(\"tooltipInit\");\n tooltipDiv.classList.remove(\"tooltipFadeOut\");\n tooltipG.classList.remove(\"tooltipFadeOut\");\n tooltipDiv.classList.add(\"tooltipFadeIn\");\n tooltipG.classList.add(\"tooltipFadeIn\");\n }\n\n function onMouseOut () {\n focusLineX.setAttribute(\"visibility\", \"hidden\");\n focusLineY.setAttribute(\"visibility\", \"hidden\");\n focusCircle.setAttribute(\"visibility\", \"hidden\");\n className.__removeProfileMarker(self);\n // tooltips\n tooltipDiv.classList.remove(\"tooltipFadeIn\");\n tooltipG.classList.remove(\"tooltipFadeIn\");\n tooltipDiv.classList.add(\"tooltipFadeOut\");\n tooltipG.classList.add(\"tooltipFadeOut\");\n }\n\n function onMouseMove (e) {\n const mousePoint = elevationSvg.createSVGPoint();\n mousePoint.x = e.clientX;\n mousePoint.y = e.clientY;\n const svgMousePoint = mousePoint.matrixTransform(elevationSvg.getScreenCTM().inverse());\n const mouseDist = this._svgXToDataDist(svgMousePoint.x, widgetWidth, pathWidth, pxPerMX) * factor;\n\n // Math.max pour éviter de sortir de l'array\n const distIndex = Math.max(1, this._arrayBisect(sortedDist, mouseDist));\n\n const d0 = _points[distIndex - 1];\n const d1 = _points[distIndex];\n let d = d0;\n if (mouseDist - d0.dist > d1.dist - mouseDist) {\n d = d1;\n }\n\n const focusX = this._dataDistToSvgX(d.dist / factor, widgetWidth, pathWidth, pxPerMX);\n const focusY = this._dataZToSvgY(d.z, pathHeight, minGraphZ, pxPerMZ);\n\n // Mise à jour des éléments graphiques\n focusCircle.setAttribute(\"cx\", focusX);\n focusCircle.setAttribute(\"cy\", focusY);\n\n focusLineX.setAttribute(\"x1\", focusX);\n focusLineX.setAttribute(\"y1\", pathHeight);\n focusLineX.setAttribute(\"x2\", focusX);\n focusLineX.setAttribute(\"y2\", 0);\n\n focusLineY.setAttribute(\"x1\", zLabelWidth + zGradWidth);\n focusLineY.setAttribute(\"y1\", focusY);\n focusLineY.setAttribute(\"x2\", pathWidth + zLabelWidth + zGradWidth);\n focusLineY.setAttribute(\"y2\", focusY);\n\n className.__updateProfileMarker(self, d);\n\n // Mise à jour du tooltip\n const altiSpanTxt = `Altitude : ${d.z.toLocaleString()} m`;\n const slopeSpanTxt = `Pente : ${d.slope} %`;\n const coordsSpanTxt = `(lat : ${d.lat.toLocaleString()} / lon : ${d.lon.toLocaleString()})`;\n\n altiSpan.innerHTML = altiSpanTxt;\n slopeSpan.innerHTML = slopeSpanTxt;\n coordsSpan.innerHTML = coordsSpanTxt;\n\n const tooltipTextWidth = Math.max(\n this._getTextWidth(coordsSpanTxt, coordsSpan),\n this._getTextWidth(altiSpanTxt, altiSpan)\n );\n\n let toolTipBubbleD;\n if (d.dist > (dist * factor) / 2) {\n toolTipBubbleD = `M -0.5 -0.5 l -6 6 l 0 16 l -${tooltipTextWidth + 10} 0 l 0 -44 l ${tooltipTextWidth + 10} 0 l 0 16 l 6 6`;\n tooltipDiv.setAttribute(\"transform\", `translate(${-(tooltipTextWidth / 2 + 12)},0)`); // IE11 !\n } else if (d.dist <= (dist * factor) / 2) {\n toolTipBubbleD = `M -0.5 -0.5 l 6 6 l 0 16 l ${tooltipTextWidth + 10} 0 l 0 -44 l -${tooltipTextWidth + 10} 0 l 0 16 l -6 6`;\n // Largeur de la fleche de la bulle du tooltip\n tooltipDiv.setAttribute(\"transform\", `translate(${(tooltipTextWidth / 2 + 12)},0)`); // IE11 !\n }\n\n tooltipBubble.setAttribute(\"d\", toolTipBubbleD);\n tooltipBubbleShadow.setAttribute(\"d\", toolTipBubbleD);\n\n tooltipG.setAttribute(\"transform\", `translate(${focusX},${focusY})`); // IE11 !\n tooltipG.style.transform = `translate(${focusX}px,${focusY}px)`;\n }\n\n pathRectangle.addEventListener(\"pointerover\", onMouseOver);\n pathRectangle.addEventListener(\"pointerout\", onMouseOut);\n pathRectangle.addEventListener(\"pointermove\", onMouseMove.bind(this));\n\n dynamicsG.appendChild(pathRectangle);\n elevationSvg.appendChild(dynamicsG);\n\n widgetDiv.appendChild(elevationSvg);\n\n return container;\n },\n\n /**\n * Display Profile without graphical rendering (raw service response)\n *\n * @public\n * @param {Object} data - elevations values for profile\n * @param {HTMLElement} container - html container where to display profile\n * @param {Object} context - this control object\n * @param {Object} className - calling class (ie ElevationPath)\n * @returns {DOMElement} profil container\n */\n displayProfileRaw : function (data, container, context, className) {\n if (!container) {\n return;\n }\n\n // on nettoie toujours...\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n\n var _points = (data && data.points) ? data.points : {};\n\n var div = document.createElement(\"textarea\");\n div.id = \"profilElevationResults\";\n div.rows = 10;\n div.cols = 50;\n div.style.width = \"100%\";\n div.innerHTML = JSON.stringify(_points, undefined, 4);\n div.addEventListener(\"mouseover\", function (e) {\n className.__customRawProfileMouseOverEvent(context, e);\n });\n\n // TODO\n // for (var i = 0; i < _points.length; i++) {\n // var point = _points[i];\n // var divC = document.createElement(\"code\");\n // divC.id = \"point_\" + i;\n // divC.innerHTML = JSON.stringify(point, undefined, 4);\n // div.appendChild(divC);\n // divC.addEventListener(\"mouseover\", function (e) {\n // className.__customRawProfileMouseOverEvent(context, e);\n // });\n // }\n\n container.appendChild(div);\n\n return container;\n },\n\n /**\n * Display Profile using D3 javascript framework. This method needs D3 libraries to be loaded.\n *\n * @public\n * @param {Object} data - elevations values for profile\n * @param {HTMLElement} container - html container where to display profile\n * @param {Object} context - this control object\n * @param {Object} className - calling class (ie ElevationPath)\n * @returns {DOMElement} profil container\n */\n displayProfileLibD3 : function (data, container, context, className) {\n var self = context;\n\n if (!container) {\n return;\n }\n\n if (!data) {\n return;\n }\n\n // on nettoie toujours...\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n\n var _points = data.points;\n\n if (data.distance > 2000) {\n data.unit = \"km\";\n for (let i = 0; i < _points.length; i++) {\n _points[i].dist /= 1000;\n }\n }\n\n var _displayProfileOptions = self.options.displayProfileOptions;\n\n var margin = {\n top : 20,\n right : 20,\n bottom : 30,\n left : 40\n };\n\n var widgetWidth = window.getComputedStyle(container).getPropertyValue(\"width\");\n var widgetHeigth = window.getComputedStyle(container).getPropertyValue(\"height\");\n var width = widgetWidth.replace(/px/, \"\") - margin.left - margin.right;\n var height = widgetHeigth.replace(/px/, \"\") - margin.top - margin.bottom;\n\n var x = d3.scale.linear()\n .range([0, width]);\n\n var y = d3.scale.linear()\n .range([height, 0]);\n\n var xAxis = d3.svg.axis()\n .scale(x)\n .orient(\"bottom\")\n .ticks(5);\n\n var yAxis = d3.svg.axis()\n .scale(y)\n .orient(\"left\")\n .ticks(5);\n\n var line = d3.svg.line()\n .interpolate(\"basis\")\n .x(function (d) {\n return x(d.dist);\n })\n .y(function (d) {\n return y(d.z);\n });\n\n var area = d3.svg.area()\n .interpolate(\"basis\")\n .x(function (d) {\n return x(d.dist);\n })\n .y0(height)\n .y1(function (d) {\n return y(d.z);\n });\n\n var svg = d3.select(container)\n .append(\"svg\")\n .attr(\"width\", width + margin.left + margin.right)\n .attr(\"height\", height + margin.top + margin.bottom)\n .append(\"g\")\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\");\n\n var xDomain = d3.extent(_points, function (d) {\n return d.dist;\n });\n x.domain(xDomain);\n\n var yDomain = [\n 0,\n d3.max(_points, function (d) {\n return d.z;\n })\n ];\n y.domain(yDomain);\n\n svg.append(\"path\")\n .datum(_points)\n .attr(\"class\", \"area-d3\")\n .attr(\"d\", area);\n\n svg.append(\"g\")\n .attr(\"class\", \"x axis-d3\")\n .attr(\"transform\", \"translate(0,\" + height + \")\")\n .call(xAxis)\n .append(\"text\")\n .attr(\"y\", -15)\n .attr(\"dy\", \".71em\")\n .attr(\"x\", width)\n .text(\"Distance (\" + data.unit + \")\");\n\n svg.append(\"g\")\n .attr(\"class\", \"y axis-d3\")\n .call(yAxis)\n .append(\"text\")\n .attr(\"transform\", \"rotate(-90)\")\n .attr(\"y\", 6)\n .attr(\"dy\", \".71em\")\n .text(\"Altitude (m)\");\n\n svg.append(\"g\")\n .attr(\"class\", \"grid-d3 vertical\")\n .attr(\"transform\", \"translate(0,\" + height + \")\")\n .call(xAxis\n .orient(\"bottom\")\n .tickSize(-height, 0, 0)\n .tickFormat(\"\")\n );\n\n svg.append(\"g\")\n .attr(\"class\", \"grid-d3 horizontal\")\n .call(yAxis\n .orient(\"left\")\n .tickSize(-width, 0, 0)\n .tickFormat(\"\")\n );\n\n svg.append(\"path\")\n .datum(_points)\n .attr(\"class\", \"line-d3\")\n .attr(\"d\", line);\n\n svg.selectAll(\"circle\")\n .data(_points)\n .enter()\n .append(\"circle\")\n .attr(\"cx\", function (d) {\n return x(d.dist);\n })\n .attr(\"cy\", function (d) {\n return y(d.z);\n })\n .attr(\"r\", 0)\n .attr(\"class\", \"circle-d3\");\n\n var focus = svg.append(\"g\").style(\"display\", \"none\");\n\n focus.append(\"line\")\n .attr(\"id\", \"focusLineX\")\n .attr(\"class\", \"focusLine-d3\");\n focus.append(\"line\")\n .attr(\"id\", \"focusLineY\")\n .attr(\"class\", \"focusLine-d3\");\n focus.append(\"circle\")\n .attr(\"id\", \"focusCircle\")\n .attr(\"r\", 4)\n .attr(\"class\", \"circle-d3 focusCircle-d3\");\n\n var div = d3.select(container).append(\"div\")\n .attr(\"class\", \"tooltip-d3\")\n .style(\"opacity\", 0);\n\n var bisectDist = d3.bisector(function (d) {\n return d.dist;\n }).left;\n\n svg.append(\"rect\")\n .attr(\"class\", \"overlay-d3\")\n .attr(\"width\", width)\n .attr(\"height\", height)\n .on(\"mouseover\", function () {\n focus.style(\"display\", null);\n className.__createProfileMarker(self, _points[0]);\n })\n .on(\"mouseout\", function () {\n focus.style(\"display\", \"none\");\n className.__removeProfileMarker(self);\n\n // tooltips\n div.transition()\n .duration(500)\n .style(\"opacity\", 0);\n })\n .on(\"mousemove\", function () {\n var m = d3.mouse(this);\n var distance = x.invert(m[0]);\n // Math.max pour éviter de sortir de l'array\n var i = Math.max(1, bisectDist(_points, distance));\n\n var d0 = _points[i - 1];\n var d1 = _points[i];\n var d = distance - d0[0] > d1[0] - distance ? d1 : d0;\n\n var xc = x(d.dist);\n var yc = y(d.z);\n\n focus.select(\"#focusCircle\")\n .attr(\"cx\", xc)\n .attr(\"cy\", yc);\n focus.select(\"#focusLineX\")\n .attr(\"x1\", xc).attr(\"y1\", y(yDomain[0]))\n .attr(\"x2\", xc).attr(\"y2\", y(yDomain[1]));\n focus.select(\"#focusLineY\")\n .attr(\"x1\", x(xDomain[0])).attr(\"y1\", yc)\n .attr(\"x2\", x(xDomain[1])).attr(\"y2\", yc);\n\n className.__updateProfileMarker(self, d);\n\n // tooltips\n div.transition()\n .duration(200)\n .style(\"opacity\", 0.9);\n\n var _message = \"\";\n _message += \" Altitude : \" + d.z + \" m\";\n if (_displayProfileOptions.currentSlope) {\n _message += \"
    Pente : \" + d.slope + \" %\";\n }\n _message += \"
    (Lat : \" + d.lat + \"/ Lon : \" + d.lon + \")\";\n\n div.html(_message)\n .style(\"left\", (d3.event.pageX) + \"px\")\n .style(\"top\", (d3.event.pageY - 28) + \"px\");\n });\n\n // return d3.selectAll(\"rect.overlay\")[0][0];\n return svg;\n },\n\n /**\n * Display Profile using Amcharts framework. This method needs AmCharts libraries to be loaded.\n *\n * @public\n * @param {Object} data - elevations values for profile\n * @param {HTMLElement} container - html container where to display profile\n * @param {Object} context - this control object\n * @param {Object} className - calling class (ie ElevationPath)\n * @returns {DOMElement} profil container\n */\n displayProfileLibAmCharts : function (data, container, context, className) {\n var self = context;\n\n if (!container) {\n return;\n }\n\n if (!data) {\n return;\n }\n\n var _points = data.points;\n\n var ballonText = \"[[title]] : [[value]]m
    \";\n var currentSlope = self.options.displayProfileOptions.currentSlope;\n if (currentSlope) {\n ballonText += \"Pente : [[slope]] %
    \";\n }\n ballonText += \"(Lat: [[lat]] / Lon:[[lon]])\";\n\n AmCharts.addInitHandler(function () {});\n\n if (data.distance > 2000) {\n data.unit = \"km\";\n for (let i = 0; i < _points.length; i++) {\n _points[i].dist /= 1000;\n }\n }\n\n for (let i = 0; i < _points.length; i++) {\n var dist = _points[i].dist;\n var coeffArrond = 100;\n if (dist > 100) {\n coeffArrond = 1;\n } else if (dist > 10) {\n coeffArrond = 10;\n }\n\n // Correction arrondi distance totale\n dist = Math.round(dist * coeffArrond) / coeffArrond;\n _points[i].dist = dist;\n }\n\n var settings = {\n type : \"serial\",\n pathToImages : \"http://cdn.amcharts.com/lib/3/images/\",\n categoryField : \"dist\",\n autoMarginOffset : 0,\n marginRight : 10,\n marginTop : 10,\n startDuration : 0,\n color : \"#5E5E5E\",\n fontSize : 8,\n theme : \"light\",\n thousandsSeparator : \"\",\n numberFormatter : {\n precision : -1,\n decimalSeparator : \",\",\n thousandsSeparator : \" \"\n },\n categoryAxis : {\n color : \"#5E5E5E\",\n gridPosition : \"start\",\n minHorizontalGap : 40,\n tickPosition : \"start\",\n title : \"Distance (\" + data.unit + \")\",\n titleColor : \"#5E5E5E\",\n labelOffset : 0,\n startOnAxis : true\n },\n chartCursor : {\n animationDuration : 0,\n bulletsEnabled : true,\n bulletSize : 10,\n categoryBalloonEnabled : false,\n cursorColor : \"#F90\",\n graphBulletAlpha : 1,\n graphBulletSize : 1,\n zoomable : false\n },\n trendLines : [],\n graphs : [{\n balloonColor : \"#CCCCCC\",\n balloonText : ballonText,\n bullet : \"round\",\n bulletAlpha : 0,\n bulletBorderColor : \"#FFF\",\n bulletBorderThickness : 2,\n bulletColor : \"#F90\",\n bulletSize : 6,\n hidden : false,\n id : \"AmGraph-1\",\n fillAlphas : 0.4,\n fillColors : \"#C77A04\",\n lineAlpha : 1,\n lineColor : \"#C77A04\",\n lineThickness : 1,\n title : \"Altitude\",\n valueField : \"z\"\n }],\n guides : [],\n valueAxes : [{\n id : \"ValueAxis-1\",\n minVerticalGap : 20,\n title : \"Altitude (m)\"\n }],\n balloon : {\n borderColor : \"#CCCCCC\",\n borderThickness : 1,\n fillColor : \"#FFFFFF\",\n showBullet : true\n },\n titles : [],\n allLabels : [],\n dataProvider : _points\n };\n\n var _containerProfile = AmCharts.makeChart(container, settings);\n\n _containerProfile.addListener(\"changed\", function (e) {\n var obj = e.chart.dataProvider[e.index];\n className.__updateProfileMarker(self, obj);\n });\n\n return _containerProfile;\n }\n};\n\nexport default ProfileElevationPathDOM;\n","/** globals AmCharts, d3 */\n// import CSS\nimport \"../../CSS/Controls/ElevationPath/GPFelevationPath.css\";\n// import \"../../CSS/Controls/ElevationPath/GPFelevationPathStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport {\n Fill,\n Icon,\n Stroke,\n Style,\n Image,\n Circle\n} from \"ol/style\";\nimport { Point } from \"ol/geom\";\nimport { Draw as DrawInteraction } from \"ol/interaction\";\nimport { transform as olTransformProj } from \"ol/proj\";\nimport { getDistance as olGetDistanceSphere } from \"ol/sphere\";\nimport Feature from \"ol/Feature\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport VectorSource from \"ol/source/Vector\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Utils from \"../../Utils/Helper\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport ID from \"../../Utils/SelectorID\";\nimport Markers from \"../Utils/Markers\";\n// import local with ol dependencies\nimport Interactions from \"../Utils/Interactions\";\nimport MeasureToolBox from \"../ToolBoxMeasure/MeasureToolBox\";\nimport Measures from \"../Measures/Measures\";\nimport LayerSwitcher from \"../LayerSwitcher/LayerSwitcher\";\nimport ButtonExport from \"../Export/Export\";\nimport GeoJSONExtended from \"../../Formats/GeoJSON\";\n// DOM\nimport ElevationPathDOM from \"./ElevationPathDOM\";\nimport ProfileElevationPathDOM from \"./ProfileElevationPathDOM\";\n\nvar logger = Logger.getLogger(\"elevationpath\");\n\n/**\n * @classdesc\n *\n * Elevation Path Control. Allows users to draw a path on a Openlayers map see the elevation profile computed with geoportal elevation path web service along that path.\n *\n * @constructor\n * @alias ol.control.ElevationPath\n * @type {ol.control.ElevationPath}\n * @extends ol.control.Control\n * @param {Object} options - options for function call.\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {String} [options.apiKey] - API key for services call (isocurve and autocomplete services). The key \"calcul\" is used by default.\n * @param {Boolean} [options.active = false] - specify if control should be actived at startup. Default is false.\n * @param {Boolean} [options.ssl = true] - use of ssl or not (default true, service requested using https protocol)\n * @param {Boolean|Object} [options.export = false] - Specify if button \"Export\" is displayed. For the use of the options of the \"Export\" control, see {@link ol.control.Export}\n * @param {Object} [options.elevationOptions = {}] - elevation path service options. See {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~getAltitude Gp.Services.getAltitude()} for available options\n * @param {Object} [options.layerDescription = {}] - Layer informations to be displayed in LayerSwitcher widget (only if a LayerSwitcher is also added to the map)\n * @param {String} [options.layerDescription.title = \"Profil altimétrique\"] - Layer title to be displayed in LayerSwitcher\n * @param {String} [options.layerDescription.description = \"Mon profil altimétrique\"] - Layer description to be displayed in LayerSwitcher\n * @param {Object} [options.stylesOptions] - styles management\n * @param {Object} [options.stylesOptions.marker = {}] - styles management of marker displayed on map when the user follows the elevation path. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Image-ImageStyle.html ol.style.Image} subclass object\n * @param {Object} [options.stylesOptions.draw = {}] - styles used when drawing. Specified with following properties.\n * @param {Object} [options.stylesOptions.draw.pointer = {}] - Style for mouse pointer when drawing the line. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Image-ImageStyle.html ol.style.Image} subclass object.\n * @param {Object} [options.stylesOptions.draw.start = {}] - Line Style when drawing. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Stroke-Stroke.html ol.style.Stroke} object.\n * @param {Object} [options.stylesOptions.draw.finish = {}] - Line Style when finished drawing. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Stroke-Stroke.html ol.style.Stroke} object.\n * @param {Object} [options.displayProfileOptions = {}] - profile options.\n * @param {Boolean} [options.displayProfileOptions.totalDistance = true] - display the total distance of the path\n * @param {Boolean} [options.displayProfileOptions.greaterSlope = true] - display the greater slope into the graph\n * @param {Boolean} [options.displayProfileOptions.meanSlope = true] - display the mean slope into the graph\n * @param {Boolean} [options.displayProfileOptions.ascendingElevation = true] - display the ascending elevation into the graph\n * @param {Boolean} [options.displayProfileOptions.descendingElevation = true] - display the descending elevation into the graph\n * @param {Boolean} [options.displayProfileOptions.currentSlope = true] - display current slope value on profile mouseover\n * @param {Function} [options.displayProfileOptions.apply] - function to display profile if you want to cutomise it. By default, ([DISPLAY_PROFILE_BY_DEFAULT()](./ol.control.ElevationPath.html#.DISPLAY_PROFILE_BY_DEFAULT)) is used. Helper functions to use with D3 ([DISPLAY_PROFILE_LIB_D3()](./ol.control.ElevationPath.html#.DISPLAY_PROFILE_LIB_D3)) or AmCharts ([DISPLAY_PROFILE_LIB_AMCHARTS()](./ol.control.ElevationPath.html#.DISPLAY_PROFILE_LIB_AMCHARTS)) frameworks are also provided. You may also provide your own function.\n * @param {Object} [options.displayProfileOptions.target] - DOM container to use to display the profile.\n * @fires elevationpath:drawstart\n * @fires elevationpath:drawend\n * @fires elevationpath:compute\n * @fires export:compute\n * @example\n *\n * var measure = new ol.control.ElevationPath({\n * export : false,\n * stylesOptions : {\n * draw : {\n * finish : new ol.style.Stroke({\n * color : \"rgba(0, 0, 0, 0.5)\",\n * width : 2\n * })\n * },\n * }\n * displayProfileOptions : {\n * apply : ol.control.ElevationPath.DISPLAY_PROFILE_RAW,\n * }\n * });\n *\n * // if you want to pluggued the control Export with options :\n * var measure = new ol.control.ElevationPath({\n * export : {\n * name : \"export\",\n * format : \"geojson\",\n * title : \"Exporter\",\n * menu : false\n * }\n * });\n *\n * Exemples :\n * - displayProfileOptions.apply : null\n * - displayProfileOptions.apply : function (elevations, container, context) { // do some stuff... }\n * - displayProfileOptions.apply : ol.control.ElevationPath.DISPLAY_PROFILE_{LIB_AMCHARTS | LIB_D3 | RAW}\n *\n */\nvar ElevationPath = class ElevationPath extends Control {\n\n /**\n * See {@link ol.control.ElevationPath}\n * @module ElevationPath\n * @alias module:~controls/ElevationPath\n * @param {*} options - options\n * @example\n * import ElevationPath from \"gpf-ext-ol/controls/ElevationPath\"\n * ou\n * import { ElevationPath } from \"gpf-ext-ol\"\n */\n constructor (options) {\n logger.trace(\"ElevationPath()\");\n\n /**\n * options\n * @private\n */\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof ElevationPath)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"ElevationPath\";\n\n // uuid\n this._uid = options.id || ID.generate();\n\n // container : HTMLElement\n this._showContainer = null;\n this._pictoButton = null;\n this._panelContainer = null;\n this._profileContainer = null;\n this._waitingContainer = null;\n this._infoContainer = null;\n\n // timer sur la fenetre d'informations des données\n this._timerHdlr = null;\n\n // objet de type \"ol.style\"\n this._drawStyleStart = null;\n this._drawStyleFinish = null;\n this._markerStyle = null;\n\n // graph\n this._profile = null;\n\n // data elevations\n this._data = {};\n\n /* objet de type\n \"ol.source.Vector\",\n \"ol.layer.Vector\",\n \"ol.interaction.Draw\"\n */\n this._measureSource = null;\n this._measureVector = null;\n this._measureDraw = null;\n\n // objet de type ol.feature, saisie en cours\n this._lastSketch = null;\n this._currentSketch = null;\n\n // objet de type ol.feature, marker\n this._marker = null;\n\n // initialisation du composant\n this._initialize(options);\n\n // creation du DOM container\n this._container = this._initializeContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n }\n\n /**\n * Styles applied by default if stylesOptions property is not set.\n */\n static DEFAULT_STYLES = {\n // styling drawing by default\n // see => Measures.DEFAULTS_STYLES\n // stying marker to the profile by default\n MARKER : new Icon({\n src : Markers[\"lightOrange\"],\n // image avec un mauvais ratio size 51/38 pixels\n // src : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAsCAYAAAAATWqyAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABTtJREFUeNq8WGtsFUUU/rb3gtdCAykFG9AUDTQUKimhxUewEusrJYoBo4FfEgoqotHERH6oP9TGmJhIrIlWAf9hjAaEiME2pgFfVVpFii8sWqIQLLSx3EJLW7p+Z2Z2b2l7d/b23vZLTmZ2duacb2fmnDk7DlKA67rXs1hJKacsohRQppjXFygnKT9TDlH2O47zFzIFGnco91EOuqnjoBnr2Ow4FhIlLN6m3DykFTh3BGj/Doj/CfSe082xPCDnBmDWTUBeyXDVjZTHOUNHUiZCEs+weI0ySTV0/w0c2wa07gIungn+vOx8YN46oPhpYOp1Xms/5TmSeSMUERKImFnYqBoGuPRNL5LEW8BgX2rrmjWZZLYApS8BUW8r4T0zO5eTEjFr+S6lSjV0HgPqVwNdf6S30abNB+7aDeQWey3bKZtIxvU5DxvyrE/izJfAvuXpkxCIDtElOjWqjK2RM8LZWMbiG0oEnUc5kB7a14WMYvI04H56du5ieZKluZWz8r0/IyQh5TuKRH8cqFuTeRIC0Sm6xYbYok1j21+ahyhLVO3wC8D5VowbRLfY0FhibOulIavDLEoRZyD8sJDeMWBXKG5ZsIobsdDsg+OMq3u1m1u9KQo8zP45EqjRxOUpk6i50IRl4FuGjpZtwUoiMYa314GFj/EzIsN8n8v+C1e4kfvwcm+wnhsZY27xQ8oiWZpKrWRQB6tAElfxpKnjsCdGklDzG9HvpI/0DYLYEpsalVnmAAM6fgR62oMHl70C5N9mn3rpI32DILbEpkZ5ljlFgbPNFtebzij5VPhNKX1lTBASNtXSzPZ3cxCuvVOH7FTCu4yxeZDGbCES0z5+PniQ3uGpwTYmYTOWCPGTpgYP6u9OnYhtzBCbQkSH0NiM4EEdP6VOxDYmYbNLiJxQ1elFwYPaG3XQCn3QHddjgpCweUKI6K2bvzw4YROf//rJob6fZl/H2FRoFiINfqo3qyzYwD8MVIeYLw32J+8j76SP9A2C2BKbGg1CZL+EF/W4YKP9a3/fCeyhkrY9DOOXEu1SlzZ5J31sSNjqURm/OfQkY9qgvkYOvXhbuH0g505Oga7HT9rPF9+t5+pDL0ulwzt46FV5ROax+JUSRRtP0LoHMK64+xNg7iqVEVOKSKRVxRGpsKhRnaRD4SPjR0J0axKCGmP7ilQxm4X8d8xXmfvHJZlPkCR3WfODl9FLMlxCIhevSJ5Nwzo1XdKxYpe3hpmB6BKdmoS43VqPxIgsni+aWOg8biZ3f+nLmSMiuvKWek/P01az7QdLyNVT7lC/l59WAKcb0iMxhzpW1nvmvpDtSiKD1l9OkpnDgv8UyMWFU9wvTP8vdY6NhJwnD1JVtso2OiiLSeL0iJUbNfg6zikVVwRTyOn2HWOfjfLtHgnBhtFIJCViyNDZUatdmnGlaFPqJIoe1WM1aqlz71ivJbLNobgAA9zgu7nZ/vstHAk5WVdzaPRqmGC5lER6kjpV4OWJdq+1kkshSk4VH9izcy/bV66qSPQZV+0J9G7rTY6+XNmqHmYwyJVV24kse1X31dhKHdasygkzy+a64oC4nWr47F4e858nSbLv4V/KAe9JKpVDrx/SImLIXMOiRUKdujESl+49O8xVZxpXzVc/C/I/RxL/hgq8YYkYhev9q6kVO4d9B+sr3vdICNaHJTHWW8Ya/87wqy2uWwstUk/gTYw3aCRGOarMDfS67kfFWqSuIe9imAjQEC272nJHixYNaSvGRIIGN49ywbsZEw1zI11N6TZSHeaGORn+F2AAJtRIMx4t+hUAAAAASUVORK5CYII=\",\n anchor : [0.5, 1],\n snapToPixel : true\n }),\n // styling service results points by default\n RESULTS : {\n // INFO orienté maintenance !\n imageRadius : 5,\n imageFillColor : \"rgba(128, 128, 128, 0.2)\",\n imageStrokeColor : \"rgba(0, 0, 0, 0.7)\",\n imageStrokeWidth : 2\n }\n // FIXME ???\n // PROFILE : {\n // type : \"serial\",\n // pathToImages : \"http://cdn.amcharts.com/lib/3/images/\",\n // categoryField : \"dist\",\n // autoMarginOffset : 0,\n // marginRight : 10,\n // marginTop : 10,\n // startDuration : 0,\n // color : \"#5E5E5E\",\n // fontSize : 10,\n // theme : \"light\",\n // thousandsSeparator : \"\",\n // categoryAxis : {\n // color : \"#5E5E5E\",\n // gridPosition : \"start\",\n // minHorizontalGap : 40,\n // tickPosition : \"start\",\n // title : \"Distance (km)\",\n // titleColor : \"#5E5E5E\",\n // startOnAxis : true\n // },\n // chartCursor : {\n // animationDuration : 0,\n // bulletsEnabled : true,\n // bulletSize : 10,\n // categoryBalloonEnabled : false,\n // cursorColor : \"#F90\",\n // graphBulletAlpha : 1,\n // graphBulletSize : 1,\n // zoomable : false\n // },\n // trendLines : [],\n // graphs : [\n // {\n // balloonColor : \"#CCCCCC\",\n // balloonText : \"[[title]] : [[value]]m
    (lat: [[lat]] / lon:[[lon]])\",\n // bullet : \"round\",\n // bulletAlpha : 0,\n // bulletBorderColor : \"#FFF\",\n // bulletBorderThickness : 2,currentSlope\n // bulletColor : \"#F90\",\n // bulletSize : 6,\n // hidden : false,\n // id : \"AmGraph-1\",\n // fillAlphas : 0.4,\n // fillColors : \"#C77A04\",\n // lineAlpha : 1,\n // lineColor : \"#C77A04\",\n // lineThickness : 1,\n // title : \"Altitude\",\n // valueField : \"z\"\n // }\n // ],\n // guides : [],\n // valueAxes : [\n // {\n // id : \"ValueAxis-1\",\n // minVerticalGap : 20,\n // title : \"Altitude (m)\"\n // }\n // ],\n // allLabels : [],\n // balloon : {\n // borderColor : \"#CCCCCC\",\n // borderThickness : 1,\n // fillColor : \"#FFFFFF\",\n // showBullet : true\n // },\n // titles : []\n // }\n };\n\n /**\n * suppression du marker\n *\n * @param {Object} context - context\n *\n * @private\n */\n static __removeProfileMarker (context) {\n var self = context;\n // suppression de l'ancien marker\n if (self._marker) {\n self._measureSource.removeFeature(self._marker);\n self._marker = null;\n }\n };\n\n /**\n * suppression du marker\n *\n * @param {Object} context - context\n * @param {Object} d - d\n *\n * @private\n */\n static __createProfileMarker (context, d) {\n var self = context;\n // suppression de l'ancien marker\n if (self._marker) {\n self._measureSource.removeFeature(self._marker);\n self._marker = null;\n }\n var map = self.getMap();\n var proj = map.getView().getProjection();\n\n var _coordinate = olTransformProj([d.lon, d.lat], \"EPSG:4326\", proj);\n var _coordinateProj = self._measureSource\n .getFeatures()[0]\n .getGeometry()\n .getClosestPoint(_coordinate);\n\n var _geometry = new Point(_coordinateProj);\n\n self._marker = new Feature({\n geometry : _geometry\n });\n logger.trace(_geometry);\n\n // style\n self._marker.setStyle(self._markerStyle);\n\n // ajout du marker sur la map\n self._measureSource.addFeature(self._marker);\n }\n\n /**\n * mise à jour du marker\n *\n * @param {Object} context - context\n * @param {Object} d - data\n *\n * @private\n */\n static __updateProfileMarker (context, d) {\n var self = context;\n ElevationPath.__removeProfileMarker(self);\n ElevationPath.__createProfileMarker(self, d);\n }\n\n /**\n * TODO : customisation possible d'une opération sur le profil\n *\n * @param {Object} context - context\n * @param {Object} d - data\n *\n * @private\n */\n static __customRawProfileOperation (context, d) {\n logger.log(\"__customRawProfileOperation\");\n\n var self = context;\n\n var _pts = d.points;\n var _proj = self.getMap().getView().getProjection();\n for (var i = 0; i < _pts.length; i++) {\n var obj = _pts[i];\n var _coordinate = olTransformProj([obj.lon, obj.lat], \"EPSG:4326\", _proj);\n var _geometry = new Point(_coordinate);\n\n self._marker = new Feature({\n geometry : _geometry\n });\n logger.trace(_geometry);\n\n // TODO style en options ?\n var styles = ElevationPath.DEFAULT_STYLES.RESULTS;\n var _image = new Circle({\n radius : styles.imageRadius,\n stroke : new Stroke({\n color : styles.imageStrokeColor,\n width : styles.imageStrokeWidth\n }),\n fill : new Fill({\n color : styles.imageFillColor\n })\n });\n self._marker.setStyle(new Style({\n image : _image\n }));\n\n // ajout du marker sur la map\n self._measureSource.addFeature(self._marker);\n }\n }\n\n /**\n * TODO : customisation possible d'une opération sur le profil\n * Ex. Methode appélée dans le DOM : ProfileElevationPathDOM\n *\n * @param {Object} context - context\n * @param {Object} e - event\n * @private\n */\n static __customRawProfileMouseOverEvent (context, e) {\n logger.log(\"__customRawProfileMouseOverEvent\", context, e);\n }\n\n /**\n * display Profile using Amcharts framework. This method needs AmCharts libraries to be loaded.\n *\n * @param {Object} data - collection elevations\n * @param {HTMLElement} container - container\n * @param {Object} context - this control object\n */\n static DISPLAY_PROFILE_LIB_AMCHARTS (data, container, context) {\n logger.trace(\"ElevationPath.DISPLAY_PROFILE_LIB_AMCHARTS\");\n\n // Calcul du profile\n if (typeof AmCharts === \"undefined\") {\n logger.log(\"Lib. AmCharts is not loaded !\");\n return;\n }\n\n var profile = ProfileElevationPathDOM.displayProfileLibAmCharts(data, container, context, ElevationPath);\n // on sauvegarde le profil du container dans l'objet\n if (profile) {\n this._profile = profile;\n }\n }\n\n /**\n * display Profile using D3 javascript framework. This method needs D3 libraries to be loaded.\n *\n * @param {Object} data - elevations values for profile\n * @param {HTMLElement} container - html container where to display profile\n * @param {Object} context - this control object\n */\n static DISPLAY_PROFILE_LIB_D3 (data, container, context) {\n logger.trace(\"ElevationPath.DISPLAY_PROFILE_LIB_D3\");\n\n // Calcul du profile\n if (typeof d3 === \"undefined\") {\n logger.log(\"Lib. D3 is not loaded !\");\n return;\n }\n\n var profile = ProfileElevationPathDOM.displayProfileLibD3(data, container, context, ElevationPath);\n // on sauvegarde le profil du container dans l'objet\n if (profile) {\n this._profile = profile;\n }\n }\n\n /**\n * display Profile without graphical rendering (raw service response)\n *\n * @param {Object} data - elevations values for profile\n * @param {HTMLElement} container - html container where to display profile\n * @param {Object} context - this control object\n */\n static DISPLAY_PROFILE_RAW (data, container, context) {\n logger.trace(\"ElevationPath.DISPLAY_PROFILE_RAW\");\n\n var profile = ProfileElevationPathDOM.displayProfileRaw(data, container, context, ElevationPath);\n // on sauvegarde le profil du container dans l'objet\n if (profile) {\n this._profile = profile;\n }\n };\n\n /**\n * Display Profile function used by default : no additonal framework needed.\n *\n * @param {Object} data - elevations values for profile\n * @param {HTMLElement} container - html container where to display profile\n * @param {Object} context - this control object\n */\n static DISPLAY_PROFILE_BY_DEFAULT (data, container, context) {\n logger.trace(\"ElevationPath.DISPLAY_PROFILE_BY_DEFAULT\");\n\n var profile = ProfileElevationPathDOM.displayProfileByDefault(data, container, context, ElevationPath);\n // on sauvegarde le profil du container dans l'objet\n if (profile) {\n this._profile = profile;\n }\n };\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Attach control to map. Overloaded ol.control.Control.setMap() method.\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n logger.trace(\"ElevationPath::setMap\");\n\n if (map) {\n // activation des interactions de dessin selon la valeur de\n // l'option active\n if (this.options.active) {\n // on n'affiche pas la fenetre de profile s'il n'existe pas...\n if (this._profile === null) {\n this._panelContainer.style.display = \"none\";\n // this._panelContainer.style.visibility = \"hidden\";\n }\n this._initMeasureInteraction(map);\n this._addMeasureInteraction(map);\n }\n\n // ajout du composant dans une toolbox\n if (!this.options.target && !this.options.position) {\n MeasureToolBox.add(map, this);\n }\n\n // ajout d'un bouton d'export\n if (this.options.export) {\n var opts = Utils.assign({ control : this }, this.options.export);\n this.export = new ButtonExport(opts);\n this.export.render();\n var self = this;\n this.export.on(\"export:compute\", (e) => {\n self.dispatchEvent({\n type : \"export:compute\",\n content : e.content\n });\n });\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n };\n\n /**\n * Returns true if widget is actived (drawing),\n * false otherwise\n *\n * @returns {Boolean} active - true or false\n */\n getActive () {\n logger.trace(\"ElevationPath::getActive\");\n return this.options.active;\n }\n\n /**\n * Actived widget drawing or not\n *\n * @param {Boolean} active - true / false\n */\n setActive (active) {\n logger.trace(\"ElevationPath::setActive\");\n this.options.active = active;\n }\n\n /**\n * Get elevation data\n *\n * @returns {Object} data - elevations\n * @example\n * {\n * type // \"elevationpath\"\n * greaterSlope // pente max\n * meanSlope // pente moyenne\n * distancePlus // distance cumulée positive\n * distanceMinus // distance cumulée négative\n * ascendingElevation // dénivelé cumulée positive\n * descendingElevation // dénivelé cumulée négative\n * altMin // altitude min\n * altMax // altitude max\n * distance // distance totale\n * unit // unité des mesures de distance\n * points // elevations\n * }\n */\n getData () {\n return Utils.assign({\n type : \"elevationpath\"\n }, this._data);\n }\n\n /**\n * Set profile data\n *\n * @param {*} data - elevations\n * @example\n * {\n * greaterSlope // pente max\n * meanSlope // pente moyenne\n * distancePlus // distance cumulée positive\n * distanceMinus // distance cumulée négative\n * ascendingElevation // dénivelé cumulée positive\n * descendingElevation // dénivelé cumulée négative\n * altMin // altitude min\n * altMax // altitude max\n * distance // distance totale\n * unit // unité des mesures de distance\n * points // elevations\n * }\n */\n setData (data) {\n this._data = data;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this._container;\n }\n\n /**\n * Get layer\n *\n * @returns {ol.layer.Vector} layer\n */\n getLayer () {\n return this._measureVector;\n }\n\n /**\n * Set layer\n *\n * @param {Object} layer - ol.layer.Vector profil layer\n */\n setLayer (layer) {\n if (!layer) {\n this._measureVector = null;\n return;\n }\n\n if (!(layer instanceof VectorLayer)) {\n logger.log(\"no valid layer given for hosting drawn features.\");\n return;\n }\n\n // application des styles\n layer.setStyle(this._drawStyleFinish);\n // sauvegarde\n this._measureVector = layer;\n this._measureSource = layer.getSource();\n }\n\n /**\n * Get vector layer\n *\n * @returns {String} geojson - GeoJSON format layer\n */\n getGeoJSON () {\n var features = this._measureVector.getSource().getFeatures();\n\n var Format = new GeoJSONExtended({\n defaultStyle : this._drawStyleFinish\n });\n // INFO\n // par defaut, webmercator ou \"EPSG:3857\"\n var geojson = Format.writeFeatures(features, {\n dataProjection : \"EPSG:4326\",\n featureProjection : \"EPSG:3857\"\n });\n\n return geojson;\n }\n\n /**\n * Get default style\n *\n * @returns {ol.style} style\n */\n getStyle () {\n return this._drawStyleFinish;\n }\n\n /**\n * clean\n * @param {Boolean} remove - remove layer\n */\n clean (remove) {\n logger.trace(\"ElevationPath::clean\");\n\n var map = this.getMap();\n\n // fenetre du profil\n this._panelContainer.style.display = \"none\";\n // this._panelContainer.style.visibility = \"hidden\";\n\n // picto\n this._pictoButton.setAttribute(\"aria-pressed\", false);\n\n // this._removeMeasure();\n this._removeProfile();\n this._removeMeasureInteraction(map, typeof remove !== \"undefined\" ? remove : false);\n\n this.setLayer();\n }\n\n /**\n * This method is public.\n * It allows to init the control.\n * @fixme\n */\n init () {\n // FIXME\n // le panneau du profil ne peut pas afficher un profil si il est caché\n // car le profil est calculé en fonction de la taille du panneau (clientHeight / clientWidth),\n // et ces valeurs sont à 0 !?\n this._pictoButton.setAttribute(\"aria-pressed\", true);\n this._panelContainer.style.display = \"block\";\n this._displayProfile(this._data);\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n }\n\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize control (called by constructor)\n *\n * @param {Object} options - options\n *\n * @private\n */\n _initialize (options) {\n logger.trace(\"ElevationPath::_initialize : \", options);\n\n // liste des options\n this.options = {\n target : null,\n render : null,\n active : false,\n apiKey : null,\n export : false,\n elevationOptions : {\n outputFormat : \"json\"\n },\n layerDescription : {\n title : \"Profil altimétrique\",\n description : \"Mon profil altimétrique\"\n },\n displayProfileOptions : {\n totalDistance : true,\n greaterSlope : true,\n meanSlope : true,\n ascendingElevation : true,\n descendingElevation : true,\n currentSlope : true,\n apply : null,\n target : null\n },\n stylesOptions : {\n profile : null,\n draw : null,\n marker : null\n }\n };\n\n // merge with user options\n Utils.mergeParams(this.options, options);\n\n this.options.target = options.target || null;\n // this.options.render = options.render || null;\n\n // cle API sur le service\n this.options.apiKey = options.apiKey;\n\n // gestion de l'affichage du profil\n var _profile = options.displayProfileOptions || {};\n\n // bouton export\n this.export = null;\n\n // gestion de la fonction du profil\n var displayFunction = _profile.apply;\n this.options.displayProfileOptions.apply = (typeof displayFunction === \"function\")\n ? displayFunction : ElevationPath.DISPLAY_PROFILE_BY_DEFAULT;\n\n // gestion du container du profil\n var displayContainer = _profile.target;\n this.options.displayProfileOptions.target = (typeof displayContainer !== \"undefined\")\n ? displayContainer : null;\n\n // gestion des styles\n var _styles = options.stylesOptions || {};\n\n // FIXME ???\n // gestion du style du profil\n // var profileStyle = _styles.profile;\n // this.options.stylesOptions.profile = ( typeof profileStyle === \"undefined\" || Object.keys(profileStyle).length === 0 ) ?\n // ElevationPath.DEFAULT_STYLES.PROFILE : profileStyle;\n // this._createStylingProfile();\n\n // gestion des styles du tracé\n this.options.stylesOptions.draw = _styles.draw || {};\n this._createStylingDraw();\n\n // gestion des styles du marker\n this.options.stylesOptions.marker = _styles.marker || {};\n this._createStylingMarker();\n }\n\n /**\n * initialize component container (DOM)\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initializeContainer () {\n logger.trace(\"ElevationPath::_initializeContainer : \", this._uid);\n\n // create main container\n var container = this._createMainContainerElement();\n\n var picto = this._pictoButton = this._createShowElevationPathPictoElement();\n container.appendChild(picto);\n\n // mode \"active\"\n if (this.options.active) {\n this._pictoButton.click();\n }\n\n // panneau\n var panel = this._panelContainer = this._createElevationPathPanelElement();\n var panelDiv = this._createElevationPathPanelDivElement();\n panel.appendChild(panelDiv);\n\n // header\n var header = this._createElevationPathPanelHeaderElement();\n panelDiv.appendChild(header);\n\n // profile\n var profile = this._createElevationPathPanelProfilElement();\n this._profileContainer = profile.firstChild;\n panelDiv.appendChild(profile);\n\n // waiting\n var waiting = this._waitingContainer = this._createElevationPathWaitingElement();\n panelDiv.appendChild(waiting);\n\n // info\n var info = this._infoContainer = this._createElevationPathInformationsElement();\n panelDiv.appendChild(info);\n\n if (this.options.displayProfileOptions.target === null) {\n container.appendChild(panel);\n }\n\n return container;\n }\n\n // ################################################################### //\n // ###################### init styles ################################ //\n // ################################################################### //\n\n /**\n * create style marker object : \"ol.style\"\n *\n * @private\n */\n _createStylingMarker () {\n logger.trace(\"ElevationPath::_createStylingMarker \");\n\n var marker = ElevationPath.DEFAULT_STYLES.MARKER;\n logger.trace(\"style marker\", marker);\n\n // si marker n'est pas un objet ol.style.Image, on applique le\n // style par défaut.\n if (this.options.stylesOptions.marker instanceof Image) {\n marker = this.options.stylesOptions.marker;\n }\n\n this._markerStyle = new Style({\n image : marker\n });\n }\n\n /**\n * create style draw object : \"ol.style\"\n *\n * @private\n */\n _createStylingDraw () {\n logger.trace(\"ElevationPath::_createStylingDraw\");\n\n // on interprete les params pour y creer un objet ol.Style\n var styles = this.options.stylesOptions.draw;\n\n // style de depart\n logger.trace(\"style start\", styles.start);\n\n // Creation à partir des styles par défaut\n var startStyleOpts = {\n image : Measures.DEFAULT_POINTER_STYLE,\n stroke : Measures.DEFAULT_DRAW_START_STYLE.getStroke()\n };\n // ecrasement à partir des propriétés renseignées\n if (styles.hasOwnProperty(\"pointer\") && styles.pointer instanceof Image) {\n startStyleOpts.image = styles.pointer;\n }\n if (styles.hasOwnProperty(\"start\") && styles.start instanceof Stroke) {\n startStyleOpts.stroke = styles.start;\n }\n\n this._drawStyleStart = new Style(startStyleOpts);\n\n // style de fin\n logger.trace(\"style finish\", styles.finish);\n\n var finishStyleOpts = {\n stroke : Measures.DEFAULT_DRAW_FINISH_STYLE.getStroke()\n };\n // ecrasement à partir des propriétés renseignées\n if (styles.hasOwnProperty(\"finish\") && styles.finish instanceof Stroke) {\n finishStyleOpts.stroke = styles.finish;\n }\n\n this._drawStyleFinish = new Style(finishStyleOpts);\n }\n\n /**\n * create style graph\n * FIXME : à revoir car ne sert que pour AmCharts !?\n *\n * @private\n */\n _createStylingProfile () {\n logger.trace(\"ElevationPath::_createStylingProfile\");\n\n var userStyles = this.options.stylesOptions.profile;\n\n logger.trace(\"style profile\", userStyles);\n\n var defaultStyle = ElevationPath.DEFAULT_STYLES.PROFILE;\n Object.keys(defaultStyle).forEach((key) => {\n if (!userStyles.hasOwnProperty(key)) {\n // si le style user n'existe pas, on ajoute celui par defaut\n userStyles[key] = defaultStyle[key];\n } else {\n var _defaultStyle = defaultStyle[key];\n if (typeof _defaultStyle === \"object\") {\n // on merge avec un objet,\n // les styles user ecrasent ceux par defaut...\n Utils.mergeParams(_defaultStyle, userStyles[key]);\n userStyles[key] = _defaultStyle;\n }\n }\n });\n }\n\n // ################################################################### //\n // ################### Map interactions management ################### //\n // ################################################################### //\n\n /**\n * this method is called by this.onShowElevationPathClick,\n * and initialize a vector layer, if widget is active.\n *\n * @param {ol.Map} map - Map\n * @private\n */\n _initMeasureInteraction (map) {\n logger.trace(\"ElevationPath::_initMeasureInteraction()\");\n\n // var map = this.getMap();\n if (!map) {\n return;\n }\n\n this._measureSource = new VectorSource();\n\n this._measureVector = new VectorLayer({\n source : this._measureSource,\n style : this._drawStyleFinish\n });\n\n // on rajoute le champ gpResultLayerId permettant d'identifier une couche crée par le composant.\n this._measureVector.gpResultLayerId = \"measure:profil\";\n\n map.addLayer(this._measureVector);\n\n // Si un layer switcher est présent dans la carte, on lui affecte des informations pour cette couche\n map.getControls().forEach(\n (control) => {\n if (control instanceof LayerSwitcher) {\n // un layer switcher est présent dans la carte\n var layerId = this._measureVector.gpLayerId;\n // on n'ajoute des informations que s'il n'y en a pas déjà (si le titre est le numéro par défaut)\n if (control._layers[layerId].title === layerId) {\n control.addLayer(\n this._measureVector, {\n title : this.options.layerDescription.title,\n description : this.options.layerDescription.description\n }\n );\n }\n }\n }\n );\n }\n\n /**\n * this method is called by this.onShowElevationPathClick,\n * and add draw interaction to map, if widget is not active.\n *\n * @param {ol.Map} map - Map\n * @private\n */\n _addMeasureInteraction (map) {\n logger.trace(\"ElevationPath::_addMeasureInteraction()\");\n\n // var map = this.getMap();\n if (!map) {\n return;\n }\n\n // Creates and adds the interaction\n this._measureDraw = new DrawInteraction({\n source : this._measureSource,\n type : \"LineString\",\n style : this._drawStyleStart,\n stopClick : true\n });\n\n this._measureDraw.setProperties({\n name : \"ElevationPath\",\n source : this\n });\n\n map.addInteraction(this._measureDraw);\n\n // Event start\n this._measureDraw.on(\"drawstart\", (evt) => {\n logger.trace(\"drawstart\", evt);\n\n // delete marker current\n if (this._marker !== null) {\n this._measureSource.removeFeature(this._marker);\n this._marker = null;\n }\n\n // set new feature and remove last feature\n if (this._lastSketch !== null) {\n this._measureSource.removeFeature(this._lastSketch);\n this._lastSketch = null;\n }\n this._currentSketch = evt.feature;\n\n // and, all features\n var _features = this._measureSource.getFeatures();\n for (var i = 0; i < _features.length; i++) {\n this._measureSource.removeFeature(_features[i]);\n }\n /**\n * event triggered at the start of drawing input\n * @event elevationpath:drawstart\n */\n this.dispatchEvent(\"elevationpath:drawstart\");\n });\n\n // Event end\n this._measureDraw.on(\"drawend\", (evt) => {\n logger.trace(\"drawend\", evt);\n /**\n * event triggered at the end of drawing input\n * @event elevationpath:drawend\n */\n this.dispatchEvent(\"elevationpath:drawend\");\n\n // set feature\n this._lastSketch = this._currentSketch;\n\n // Si il n'y a pas de surcharge utilisateur de la fonction de recuperation des\n // resultats, on realise l'affichage du panneau\n if (typeof this.options.elevationOptions.onSuccess === \"undefined\" && this.options.displayProfileOptions.target === null) {\n this._panelContainer.style.display = \"block\";\n // self._panelContainer.style.visibility = \"visible\";\n }\n\n // set an alti request and display results\n this._measureDraw.setActive(false);\n this._requestService();\n });\n }\n\n /**\n * this method is called by this.onShowElevationPathClick,\n * and removes draw interaction from map (if exists)\n * And removes layer too...\n *\n * @param {ol.Map} map - Map\n * @param {Boolean} remove - Remove layer\n * @private\n */\n _removeMeasureInteraction (map, remove) {\n logger.trace(\"ElevationPath::_removeMeasureInteraction()\");\n\n // var map = this.getMap();\n if (!map) {\n return;\n }\n\n if (remove) {\n if (this._measureVector) {\n map.removeLayer(this._measureVector);\n this._measureVector = null;\n }\n }\n\n if (this._measureDraw) {\n map.removeInteraction(this._measureDraw);\n this._measureDraw = null;\n }\n }\n\n // ################################################################### //\n // ############################ Alti request ######################### //\n // ################################################################### //\n\n /**\n * transforme geometry feature to position coordinate (service)\n *\n * @returns {Object[]} geometry\n *\n * @private\n */\n _getGeometry () {\n // INFO\n // on transmet toujours des coordonnées au service en EPSG:4326\n\n if (this._currentSketch === null) {\n logger.warn(\"Current Feature undefined !?\");\n return;\n }\n\n var geometry = [];\n\n var map = this.getMap();\n var projSrc = map.getView().getProjection();\n var projDest = \"EPSG:4326\";\n var coordinates = this._currentSketch.getGeometry().getCoordinates();\n for (var i = 0; i < coordinates.length; i++) {\n var xy = coordinates[i];\n var ll = xy;\n // on transmet au service des coordonnées en EPSG:4326\n if (projSrc !== projDest) {\n ll = olTransformProj(xy, projSrc, projDest);\n }\n geometry.push({\n lon : Math.round(ll[0] * 1e8) / 1e8,\n lat : Math.round(ll[1] * 1e8) / 1e8\n });\n }\n\n return geometry;\n }\n\n /**\n * get geometry feature length\n *\n * @returns {Integer} length\n *\n * @private\n */\n _getLength () {\n if (this._currentSketch === null) {\n logger.warn(\"Current Feature undefined !?\");\n return;\n }\n\n var length = 0;\n\n var map = this.getMap();\n var projSrc = map.getView().getProjection();\n var projDest = \"EPSG:4326\";\n\n var coordinates = this._currentSketch.getGeometry().getCoordinates();\n for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n var c1 = olTransformProj(coordinates[i], projSrc, projDest);\n var c2 = olTransformProj(coordinates[i + 1], projSrc, projDest);\n c1[0] = Math.round(c1[0] * 1e8) / 1e8;\n c1[1] = Math.round(c1[1] * 1e8) / 1e8;\n c2[0] = Math.round(c2[0] * 1e8) / 1e8;\n c2[1] = Math.round(c2[1] * 1e8) / 1e8;\n length += olGetDistanceSphere(c1, c2);\n }\n\n return length;\n }\n\n /**\n * get geometry feature point coords in EPSG:4326 [lon, lat]\n *\n * @returns {Array} point coords in EPSG:4326 [lon, lat]\n *\n * @private\n */\n _getSketchCoords () {\n if (this._currentSketch === null) {\n logger.warn(\"Current Feature undefined !?\");\n return;\n }\n\n var map = this.getMap();\n var projSrc = map.getView().getProjection();\n var projDest = \"EPSG:4326\";\n\n var pointCoords = [];\n\n var coordinates = this._currentSketch.getGeometry().getCoordinates();\n for (var i = 0; i < coordinates.length; i++) {\n var c1 = olTransformProj(coordinates[i], projSrc, projDest);\n c1[0] = Math.round(c1[0] * 1e8) / 1e8;\n c1[1] = Math.round(c1[1] * 1e8) / 1e8;\n pointCoords.push(c1);\n }\n\n return pointCoords;\n }\n\n /**\n * this method is called at the end of the path,\n * it generates and sends alti request, then displays results\n *\n * @private\n */\n _requestService () {\n logger.trace(\"ElevationPath::_requestService\");\n\n // les coordonnées sont obligatoires\n var geometry = this._getGeometry();\n logger.trace(\"geometry\", geometry);\n if (!geometry) {\n logger.warn(\"missing geometry !?\");\n return;\n }\n\n // on construit les options pour la requête\n var options = {};\n\n // on surcharge avec les options de l'utilisateur\n Utils.mergeParams(options, this.options.elevationOptions);\n\n // au cas où ...\n Utils.mergeParams(options, {\n apiKey : options.apiKey || this.options.apiKey\n });\n\n // si l'utilisateur a spécifié le paramètre ssl au niveau du control, on s'en sert\n // true par défaut (https)\n if (typeof options.ssl !== \"boolean\") {\n if (typeof this.options.ssl === \"boolean\") {\n options.ssl = this.options.ssl;\n } else {\n options.ssl = true;\n }\n }\n\n Utils.mergeParams(options, {\n ssl : options.ssl\n });\n\n // les callbacks\n var self = this;\n\n // gestion des callback\n var bOnFailure = !!(this.options.elevationOptions.onFailure !== null && typeof this.options.elevationOptions.onFailure === \"function\"); // cast variable to boolean\n var bOnSuccess = !!(this.options.elevationOptions.onSuccess !== null && typeof this.options.elevationOptions.onSuccess === \"function\");\n\n // callback _requestServiceOnSuccess\n var _requestServiceOnSuccess = function (result) {\n logger.trace(result);\n if (result) {\n self._panelContainer.style.display = \"block\";\n // self._panelContainer.style.visibility = \"visible\";\n if (self._data) {\n self._data = {};\n }\n self._data = self._computeElevationMeasure(result.elevations);\n self._displayProfile(self._data);\n self._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n self._waiting = false;\n self._measureDraw.setActive(true);\n }\n if (bOnSuccess) {\n self.options.elevationOptions.onSuccess.call(self, self.getData());\n }\n };\n\n // callback _requestServiceOnFailure\n var _requestServiceOnFailure = function (error) {\n // on ferme le panneau en cas d'erreur !\n self._panelContainer.style.display = \"none\";\n // self._panelContainer.style.visibility = \"hidden\";\n logger.error(error.message);\n self._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n self._waiting = false;\n self._measureDraw.setActive(true);\n if (bOnFailure) {\n self.options.elevationOptions.onFailure.call(self, error);\n }\n };\n\n Utils.mergeParams(options, {\n onSuccess : _requestServiceOnSuccess,\n onFailure : _requestServiceOnFailure\n });\n\n // le sampling est soit defini par l'utilisateur (opts),\n // ou soit calculé dynamiquement...\n var sampling = options.sampling || 200;\n\n if (sampling > 0) {\n Utils.mergeParams(options, {\n sampling : sampling\n });\n }\n\n // et enfin, la geometrie\n Utils.mergeParams(options, {\n positions : geometry\n });\n\n logger.trace(\"options du service\", options);\n\n // mise en place de la patience\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerVisible gpf-waiting gpf-waiting--visible\";\n\n // Request altitude service\n Gp.Services.getAltitude(options);\n }\n\n // ################################################################### //\n // ########################## Profil display ######################### //\n // ################################################################### //\n\n /**\n * this method computes results elevations (Z and distance)\n *\n * @param {Array} elevations - array of elevation\n * @return {Array} elevations\n * @private\n */\n _computeElevationMeasure (elevations) {\n logger.trace(\"ElevationPath::_computeElevationMeasure\", elevations);\n\n var _data = elevations;\n var _unit = \"m\";\n\n var _sketchPoints = this._getSketchCoords();\n if (!_sketchPoints) {\n return;\n }\n // Calcul de la distance au départ pour chaque point + arrondi des lat/lon\n _data[0].dist = 0;\n _data[0].slope = 0;\n _data[0].oldlat = _data[0].lat;\n _data[0].oldlon = _data[0].lon;\n _data[0].lat = Math.round(_data[0].lat * 100000) / 100000;\n _data[0].lon = Math.round(_data[0].lon * 100000) / 100000;\n\n var _distanceMinus = 0;\n var _distancePlus = 0;\n var _ascendingElevation = 0;\n var _descendingElevation = 0;\n var _distance = 0;\n var _slopes = 0;\n\n var distances = [];\n console.log(_data);\n for (var i = 1; i < _data.length; i++) {\n var a = [_data[i].lon, _data[i].lat];\n var distanceToPrevious = olGetDistanceSphere(a, [_data[i-1].oldlon, _data[i-1].oldlat]);\n var dist = distanceToPrevious + _distance;\n\n var za = _data[i].z;\n var zb = _data[i - 1].z;\n if (za < 0) {\n za = 0;\n }\n if (zb < 0) {\n zb = 0;\n }\n var slope = za - zb;\n if (slope < 0) {\n _distanceMinus += distanceToPrevious;\n _descendingElevation += slope;\n } else if (slope > 0) {\n _distancePlus += distanceToPrevious;\n _ascendingElevation += slope;\n }\n _distance = dist;\n _data[i].dist = dist;\n\n distances.push(_distance);\n\n _slopes += (slope) ? Math.abs(Math.round(slope / dist * 100)) : 0;\n _data[i].slope = (slope) ? Math.abs(Math.round(slope / dist * 100)) : 0;\n\n // EVOL ?\n // cf. gradiant\n // http://www.color-hex.com/color/00b798\n var value = _data[i].slope;\n if (value > 15 && value < 30) {\n _data[i].color = \"#005b4c\";\n } else if (value > 30 && value < 45) {\n _data[i].color = \"#00362d\";\n } else if (value > 45) {\n _data[i].color = \"#00120f\";\n } else {\n _data[i].color = \"#00B798\";\n }\n _data[i].oldlat = _data[i].lat;\n _data[i].oldlon = _data[i].lon;\n _data[i].lat = Math.round(_data[i].lat * 100000) / 100000;\n _data[i].lon = Math.round(_data[i].lon * 100000) / 100000;\n }\n\n // check distance totale\n logger.trace(\"List Distances\", distances);\n\n // Correction des altitudes aberrantes + arrondi des calculs de distance + ...\n var _altMin = _data[0].z;\n var _altMax = _data[0].z;\n var _greaterSlope = _data[0].slope;\n\n for (var ji = 0; ji < _data.length; ji++) {\n var d = _data[ji];\n if (d.z < -100) {\n d.z = 0;\n }\n if (d.z > _altMax) {\n _altMax = d.z;\n }\n if (d.z < _altMin) {\n _altMin = d.z;\n }\n\n if (d.slope > _greaterSlope) {\n _greaterSlope = d.slope;\n }\n }\n\n return {\n greaterSlope : _greaterSlope, // pente max\n meanSlope : Math.round(_slopes / _data.length), // pente moyenne\n distancePlus : _distancePlus, // distance cumulée positive\n distanceMinus : _distanceMinus, // distance cumulée négative\n ascendingElevation : _ascendingElevation, // dénivelé cumulée positive\n descendingElevation : _descendingElevation, // dénivelé cumulée négative\n altMin : _altMin.toLocaleString(), // altitude min TODO: inutile ?\n altMax : _altMax.toLocaleString(), // altitude max TODO: inutile ?\n distance : this._getLength(), // distance totale\n unit : _unit, // unité des mesures de distance\n points : _data\n };\n }\n\n /**\n * this method is called after service request (in case of success)\n * and display results\n *\n * @param {Array} elevations - array of elevation\n * @private\n */\n _displayProfile (elevations) {\n logger.trace(\"ElevationPath::_displayProfile\", elevations);\n\n this._updateInfoContainer();\n\n // container\n var container = this.options.displayProfileOptions.target;\n if (container) {\n container.appendChild(this._panelContainer);\n }\n container = this._profileContainer;\n\n // TODO contexte ?\n var context = this;\n\n // fonction\n var displayFunction = this.options.displayProfileOptions.apply;\n\n // execution...\n displayFunction.call(this, elevations, container, context);\n\n var opts = this.options.displayProfileOptions;\n var element = document.getElementById(\"GPelevationPathPanelInfo-\" + this._uid);\n if (element) {\n if (opts.totalDistance ||\n opts.greaterSlope ||\n opts.meanSlope ||\n opts.ascendingElevation ||\n opts.descendingElevation) {\n // on affiche les informations\n element.style.display = \"block\";\n }\n }\n\n /**\n * event triggered when the compute is finished\n *\n * @event elevationpath:compute\n * @typedef {Object}\n * @property {Object} type - event\n * @property {Object} target - instance ElevationPath\n * @example\n * ElevationPath.on(\"elevationpath:compute\", function (e) {\n * console.log(e.target.getData());\n * })\n */\n this.dispatchEvent({\n type : \"elevationpath:compute\"\n });\n }\n\n /**\n * update info container\n *\n * @private\n */\n _updateInfoContainer () {\n logger.trace(\"ElevationPath::_updateInfoContainer\");\n\n // options d'affichage\n var totalDistance = this.options.displayProfileOptions.totalDistance;\n var meanSlope = this.options.displayProfileOptions.meanSlope;\n var greaterSlope = this.options.displayProfileOptions.greaterSlope;\n var ascendingElevation = this.options.displayProfileOptions.ascendingElevation;\n var descendingElevation = this.options.displayProfileOptions.descendingElevation;\n\n // clean\n var div = this._infoContainer;\n if (div.childElementCount) {\n while (div.firstChild) {\n div.removeChild(div.firstChild);\n }\n }\n\n // creation des infomations\n if (totalDistance) {\n this._addElevationPathInformationsItem(\"Distance totale : \", Math.round(this._data.distance).toLocaleString() + \" m\");\n }\n\n if (ascendingElevation) {\n this._addElevationPathInformationsItem(\"Dénivelé positif : \", this._data.ascendingElevation.toLocaleString() + \" m\");\n }\n\n if (descendingElevation) {\n this._addElevationPathInformationsItem(\"Dénivelé négatif : \", this._data.descendingElevation.toLocaleString() + \" m\");\n }\n\n if (meanSlope) {\n this._addElevationPathInformationsItem(\"Pente moyenne : \", this._data.meanSlope.toLocaleString() + \" %\");\n }\n\n if (greaterSlope) {\n this._addElevationPathInformationsItem(\"Plus forte pente : \", this._data.greaterSlope.toLocaleString() + \" %\");\n }\n }\n\n /**\n * Remove measure\n * @private\n */\n _removeMeasure () {\n // sketch\n this._lastSketch = null;\n this._currentSketch = null;\n\n if (this._measureSource) {\n // marker\n if (this._marker) {\n this._measureSource.removeFeature(this._marker);\n this._marker = null;\n }\n\n // all other features\n var _features = this._measureSource.getFeatures();\n for (var i = 0; i < _features.length; i++) {\n this._measureSource.removeFeature(_features[i]);\n }\n }\n }\n\n /**\n * Remove profile\n * @private\n */\n _removeProfile () {\n // graph\n this._profile = null;\n\n // on vide le container\n if (this._profileContainer) {\n while (this._profileContainer.firstChild) {\n this._profileContainer.removeChild(this._profileContainer.firstChild);\n }\n }\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on '' picto\n * and enable or disable the entry of the path\n *\n * @param {Object} e - event\n * @private\n */\n onShowElevationPathClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n Interactions.unset(map, {\n current : \"ElevationPath\"\n });\n\n // Activation/Desactivation des interactions de dessins\n var opened = this._pictoButton.ariaPressed;\n if (opened === \"true\") {\n // on n'affiche pas la fenetre de profile s'il n'existe pas...\n if (this._profile === null) {\n this._panelContainer.style.display = \"none\";\n // this._panelContainer.style.visibility = \"hidden\";\n }\n this._initMeasureInteraction(map);\n this._addMeasureInteraction(map);\n } else {\n this._panelContainer.style.display = \"none\";\n // HACK\n // il est possible de faire passer une instruction via le DOM et les dataset :\n // * data-remove-measure : true|false\n // * data-remove-layer : true|false\n if (e && e.target.dataset && e.target.dataset.removeMeasure) {\n if (e.target.dataset.removeMeasure === \"true\") {\n this._removeMeasure();\n } else {\n // sketch\n this._lastSketch = null;\n this._currentSketch = null;\n }\n } else {\n this._removeMeasure();\n }\n this._removeProfile();\n\n if (e && e.target.dataset && e.target.dataset.removeLayer) {\n this._removeMeasureInteraction(map, (e.target.dataset.removeLayer === \"true\"));\n } else {\n this._removeMeasureInteraction(map, true);\n }\n }\n }\n\n /**\n * this method is called by event 'click' on '' picto\n * (cf. this.),\n * and display the panel info\n *\n * @private\n */\n onOpenElevationPathInfoClick () {\n var div = this._infoContainer;\n\n // show des informations !\n if (div.className === \"GPelementVisible gpf-visible\") {\n clearTimeout(this._timerHdlr);\n div.className = \"GPelementHidden gpf-hidden\";\n } else {\n div.className = \"GPelevationPathInformationsContainerVisible\";\n }\n\n // hidden des informations !\n this._timerHdlr = setTimeout(function () {\n div.className = \"GPelementHidden gpf-hidden\";\n }, 4000);\n }\n\n};\n\n// on récupère les méthodes de la classe commune ElevationPath\nObject.assign(ElevationPath.prototype, ElevationPathDOM);\nObject.assign(ElevationPath.prototype, Widget);\n\nexport default ElevationPath;\n\n// Expose ElevationPath as ol.control.ElevationPath (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.ElevationPath = ElevationPath;\n}\n","// import CSS\nimport \"../../CSS/Controls/LayerImport/GPFlayerImport.css\";\n// import \"../../CSS/Controls/LayerImport/GPFlayerImportStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\nimport Collection from \"ol/Collection\";\nimport Feature from \"ol/Feature\";\nimport WMTSTileGrid from \"ol/tilegrid/WMTS\";\n// import { createXYZ as olCreateXYZTileGrid } from \"ol/tilegrid\"; // FIXME olCreateXYZTileGrid !?\nimport {\n transform as olTransformProj,\n get as olGetProj,\n transformExtent as olTransformExtentProj\n} from \"ol/proj\";\nimport MVT from \"ol/format/MVT\";\nimport WMSCapabilities from \"ol/format/WMSCapabilities\";\nimport WMTSCapabilities from \"ol/format/WMTSCapabilities\";\nimport VectorTileLayer from \"ol/layer/VectorTile\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport TileLayer from \"ol/layer/Tile\";\nimport VectorTileSource from \"ol/source/VectorTile\";\nimport VectorSource from \"ol/source/Vector\";\nimport TileWMSSource from \"ol/source/TileWMS\";\nimport WMTSSource from \"ol/source/WMTS\";\nimport TileJSONSource from \"ol/source/TileJSON\";\nimport {\n Fill,\n Icon,\n Stroke,\n Style,\n Text\n} from \"ol/style\";\n// import olms : module ES6\nimport { applyStyle as applyStyleOlms } from \"ol-mapbox-style\";\n// import olms : bundle\n// import olms from \"ol-mapbox-style\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Editor from \"../Editor/Editor\";\nimport Markers from \"../Utils/Markers\";\nimport Draggable from \"../../Utils/Draggable\";\nimport Interactions from \"../Utils/Interactions\";\nimport Utils from \"../../Utils/Helper\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport ProxyUtils from \"../../Utils/ProxyUtils\";\n// DOM\nimport LayerImportDOM from \"./LayerImportDOM\";\n// import local with ol dependencies\nimport KMLExtended from \"../../Formats/KML\";\nimport GeoJSONExtended from \"../../Formats/GeoJSON\";\nimport GPXExtended from \"../../Formats/GPX\";\nimport LayerSwitcher from \"../LayerSwitcher/LayerSwitcher\";\nimport Route from \"../Route/Route\";\nimport Isocurve from \"../Isocurve/Isocurve\";\nimport ElevationPath from \"../ElevationPath/ElevationPath\";\n\nvar logger = Logger.getLogger(\"layerimport\");\n\n/**\n * @classdesc\n *\n * LayerImport Control. Allows users to add geographical data in standards formats from their own sources to the map.\n *\n * @constructor\n * @alias ol.control.LayerImport\n * @extends {ol.control.Control}\n * @type {ol.control.LayerImport}\n * @param {Object} options - options for function call.\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {Boolean} [options.collapsed = true] - Specify if LayerImport control should be collapsed at startup. Default is true.\n * @param {Boolean} [options.draggable = false] - Specify if widget is draggable\n * @param {Array} [options.layerTypes = [\"KML\", \"GPX\", \"GeoJSON\", \"WMS\", \"WMTS\", \"MAPBOX\"]] - data types that could be imported : \"KML\", \"GPX\", \"GeoJSON\", \"WMS\", \"WMTS\" and \"MAPBOX\". Values will be displayed in the same order in widget list.\n * @param {Object} [options.webServicesOptions = {}] - Options to import WMS or WMTS layers\n * @param {String} [options.webServicesOptions.proxyUrl] - Proxy URL to avoid cross-domain problems. Mandatory to import WMS and WMTS layer.\n * @param {Array.} [options.webServicesOptions.noProxyDomains] - Proxy will not be used for this list of domain names. Only use if you know what you're doing.\n * @param {Object} [options.vectorStyleOptions] - Options for imported vector layer styling (KML, GPX, GeoJSON)\n * @param {Object} [options.vectorStyleOptions.KML] - Options for KML layer styling\n * @param {Boolean} [options.vectorStyleOptions.KML.extractStyles = true] - Extract styles from the KML. Default is true.\n * @param {Boolean} [options.vectorStyleOptions.KML.showPointNames = true] - Show names as labels for KML placemarks which contain points. Default is true.\n * @param {Object} [options.vectorStyleOptions.KML.defaultStyle] - default style to be applied to KML imports in case no style is defined. defaultStyle is an {@link http://openlayers.org/en/latest/apidoc/ol.style.Style.html ol.style.Style} object.\n * @param {Object} [options.vectorStyleOptions.GPX] - Options for GPX layer styling\n * @param {Object} [options.vectorStyleOptions.GPX.defaultStyle] - default style to be applied to GPX imports in case no style is defined. defaultStyle is an {@link http://openlayers.org/en/latest/apidoc/ol.style.Style.html ol.style.Style} object.\n * @param {Object} [options.vectorStyleOptions.GeoJSON] - Options for GeoJSON layer styling\n * @param {Object} [options.vectorStyleOptions.GeoJSON.defaultStyle] - default style to be applied to GeoJSON imports in case no style is defined. defaultStyle is an {@link http://openlayers.org/en/latest/apidoc/ol.style.Style.html ol.style.Style} object.\n * @param {Object} [options.vectorStyleOptions.MapBox] - Options for MapBox layer styling\n * @param {Object} [options.vectorStyleOptions.MapBox.defaultStyle] - default style to be applied to MapBox imports in case no style is defined. defaultStyle is an {@link http://openlayers.org/en/latest/apidoc/ol.style.Style.html ol.style.Style} object.\n * @param {Object} [options.vectorStyleOptions.MapBox.editor] - options for tools editor\n * @param {Boolean} [options.vectorStyleOptions.MapBox.display = true] - display tools editor\n * @example\n * var LayerImport = new ol.control.LayerImport({\n * \"collapsed\" : false,\n * \"draggable\" : true,\n * \"layerTypes\" : [\"KML\", \"GPX\"],\n * \"webServicesOptions\" : {\n * \"proxyUrl\" : \"http://localhost/proxy/php/proxy.php?url=\",\n * \"noProxyDomains\" : []\n * },\n * \"vectorStyleOptions\" : {\n * \"KML\" : {\n * extractStyles : true,\n * defaultStyle : new ol.style.Style({\n * image : new ol.style.Icon({\n * src : \"data:image/png;base64....\",\n * size : [51, 38],\n * }),\n * stroke : new ol.style.Stroke({\n * color : \"#ffffff\",\n * width : 7\n * }),\n * fill : new ol.style.Fill({\n * color : \"rgba(255, 183, 152, 0.2)\"\n * }),\n * text : new ol.style.Text({\n * font : \"16px Sans\",\n * textAlign : \"left\",\n * fill : new ol.style.Fill({\n * color : \"rgba(255, 255, 255, 1)\"\n * }),\n * stroke : new ol.style.Stroke({\n * color : \"rgba(0, 0, 0, 1)\",\n * width : 2\n * })\n * })\n * })\n * },\n * \"GPX\" : {\n * defaultStyle : new ol.style.Style({\n * image : new ol.style.Icon({\n * src : \"path/to/my/icon.png\",\n * size : [51, 38],\n * }),\n * stroke : new ol.style.Stroke({\n * color : \"#ffffff\",\n * width : 7\n * })\n * })\n * }\n * }\n * });\n */\nvar LayerImport = class LayerImport extends Control {\n\n /**\n * See {@link ol.control.LayerImport}\n * @module LayerImport\n * @alias module:~controls/LayerImport\n * @param {*} options - options\n * @example\n * import LayerImport from \"gpf-ext-ol/controls/LayerImport\"\n * ou\n * import { LayerImport } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"LayerImport\";\n\n if (!(this instanceof LayerImport)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n this._initialize(options);\n\n // init control DOM container\n this._container = this._initContainer(options);\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n };\n\n /**\n * Default styles applyied to KML, GPX and GeoJSON features.\n *\n * @private\n */\n static DefaultStyles = {\n image : new Icon({\n src : Markers[\"lightOrange\"],\n anchor : [25.5, 38],\n anchorOrigin : \"top-left\",\n anchorXUnits : \"pixels\",\n anchorYUnits : \"pixels\"\n }),\n stroke : new Stroke({\n color : \"rgba(0,42,80,0.8)\",\n width : 4\n }),\n fill : new Fill({\n color : \"rgba(0, 183, 152, 0.5)\"\n }),\n text : new Text({\n font : \"16px Sans\",\n textAlign : \"left\",\n fill : new Fill({\n color : \"rgba(255, 255, 255, 1)\"\n }),\n stroke : new Stroke({\n color : \"rgba(0, 0, 0, 1)\",\n width : 2\n })\n })\n };\n\n // ################################################################### //\n // ############## public methods (getters, setters) ################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n // ajout de la patience pour le chargement des tuiles\n if (map) {\n // Animation au centre de la carte ?\n // var center = this._loadingContainer = this._createLoadingElement();\n // map.getViewport().appendChild(center);\n\n var self = this;\n map.getLayers().on(\n \"remove\",\n function (e) {\n // import de type layerimport:MapBox ?\n if (e.element.gpResultLayerId === \"layerimport:MAPBOX\") {\n // layer ayant un editor ID associé ?\n if (e.element.gpEditorId) {\n // le panneau des résultats existe t il ?\n if (self._mapBoxPanel && self._importPanel) {\n self.cleanMapBoxResults(e.element.gpEditorId);\n self._mapBoxPanel.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n self._mapBoxPanel.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n }\n }\n },\n self\n );\n\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this._importPanel,\n this._importPanelHeader,\n map.getTargetElement()\n );\n\n // panneau draggable pour les resultats ?\n // Draggable.dragElement(\n // this._getCapPanel,\n // this._getCapPanelHeader,\n // map.getTargetElement()\n\n // );\n // Draggable.dragElement(\n // this._mapBoxPanel,\n // this._mapBoxPanelHeader,\n // map.getTargetElement()\n // );\n }\n // mode \"collapsed\"\n if (!this.collapsed) {\n this._showImportButton.setAttribute(\"aria-pressed\", true);\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Returns true if widget is collapsed (minimized), false otherwise\n *\n * @returns {Boolean} collapsed - true if widget is collapsed\n */\n getCollapsed () {\n return this.collapsed;\n }\n\n /**\n * Collapse or display widget main container\n *\n * @param {Boolean} collapsed - True to collapse widget, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.error(\"[ERROR] LayerImport:setCollapsed - missing collapsed parameter\");\n return;\n }\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n if (collapsed) {\n this._panelCloseButton.click();\n } else {\n this._showImportButton.click();\n }\n this.collapsed = collapsed;\n }\n\n /**\n * Returns content of a static import (KML, GPX or GeoJSON)\n *\n * @returns {String} contentStatic - content static\n */\n getStaticImportContent () {\n return this.contentStatic;\n }\n\n /**\n * Returns content of a service import (GetCapabilities)\n *\n * @returns {String} contentService - content service\n */\n getServiceImportContent () {\n return this.contentService;\n }\n\n /**\n * Returns layer name\n *\n * @returns {String} name - layer name\n */\n getName () {\n return this._name;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this._container;\n }\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize LayerImport control (called by LayerImport constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n _initialize (options) {\n // ############################################################ //\n // ################### Options du composant ################### //\n\n // check input options format\n this._checkInputOptions(options);\n\n // set default options\n this.options = {\n collapsed : true,\n draggable : false,\n layerTypes : [\"KML\", \"GPX\", \"GeoJSON\", \"WMS\", \"WMTS\", \"MAPBOX\"],\n webServicesOptions : {},\n vectorStyleOptions : {\n KML : {\n extractStyles : true,\n showPointNames : true,\n defaultStyle : {}\n },\n GPX : {\n defaultStyle : {}\n },\n GeoJSON : {\n defaultStyle : {}\n },\n MapBox : {\n defaultStyle : {},\n editor : {}\n }\n }\n };\n\n // TODO gestion du proxy\n\n // set extractStyles parameter\n if (options.vectorStyleOptions && options.vectorStyleOptions.KML && options.vectorStyleOptions.KML.extractStyles) {\n this.options.vectorStyleOptions.KML.extractStyles = options.vectorStyleOptions.KML.extractStyles;\n } // TODO\n // set showPointNames parameter\n if (options.vectorStyleOptions && options.vectorStyleOptions.KML && options.vectorStyleOptions.KML.showPointNames) {\n this.options.vectorStyleOptions.KML.showPointNames = options.vectorStyleOptions.KML.showPointNames;\n }\n\n // set vector layers default styles (KML, GPX, GeoJSON, MapBox)\n if (options.vectorStyleOptions && options.vectorStyleOptions.KML && options.vectorStyleOptions.KML.defaultStyle) {\n // get from options if specified\n this.options.vectorStyleOptions.KML.defaultStyle = options.vectorStyleOptions.KML.defaultStyle;\n } else {\n // get from control default options otherwise\n this.options.vectorStyleOptions.KML.defaultStyle = new Style({\n image : LayerImport.DefaultStyles.image,\n stroke : LayerImport.DefaultStyles.stroke,\n fill : LayerImport.DefaultStyles.fill,\n text : LayerImport.DefaultStyles.text\n });\n }\n if (options.vectorStyleOptions && options.vectorStyleOptions.GPX && options.vectorStyleOptions.GPX.defaultStyle) {\n // get from options if specified\n this.options.vectorStyleOptions.GPX.defaultStyle = options.vectorStyleOptions.GPX.defaultStyle;\n } else {\n // get from control default options otherwise\n this.options.vectorStyleOptions.GPX.defaultStyle = new Style({\n image : LayerImport.DefaultStyles.image,\n stroke : LayerImport.DefaultStyles.stroke,\n fill : LayerImport.DefaultStyles.fill,\n text : LayerImport.DefaultStyles.text\n });\n }\n if (options.vectorStyleOptions && options.vectorStyleOptions.GeoJSON && options.vectorStyleOptions.GeoJSON.defaultStyle) {\n // get from options if specified\n this.options.vectorStyleOptions.GeoJSON.defaultStyle = options.vectorStyleOptions.GeoJSON.defaultStyle;\n } else {\n // get from control default options otherwise\n this.options.vectorStyleOptions.GeoJSON.defaultStyle = new Style({\n image : LayerImport.DefaultStyles.image,\n stroke : LayerImport.DefaultStyles.stroke,\n fill : LayerImport.DefaultStyles.fill,\n text : LayerImport.DefaultStyles.text\n });\n }\n // FIXME tester les styles par defaut sur une couche vecteur tuilé sans style !\n if (options.vectorStyleOptions && options.vectorStyleOptions.MapBox && options.vectorStyleOptions.MapBox.defaultStyle) {\n // get from options if specified\n this.options.vectorStyleOptions.MapBox.defaultStyle = options.vectorStyleOptions.MapBox.defaultStyle;\n } else {\n // get from control default options otherwise\n this.options.vectorStyleOptions.MapBox.defaultStyle = new Style({\n image : LayerImport.DefaultStyles.image,\n stroke : LayerImport.DefaultStyles.stroke,\n fill : LayerImport.DefaultStyles.fill,\n text : LayerImport.DefaultStyles.text\n });\n }\n\n if (options.vectorStyleOptions && options.vectorStyleOptions.MapBox && options.vectorStyleOptions.MapBox.editor) {\n // get from options if specified\n this.options.vectorStyleOptions.MapBox.editor = options.vectorStyleOptions.MapBox.editor;\n } else {\n this.options.vectorStyleOptions.MapBox.editor = {\n title : true,\n collapse : false,\n themes : false,\n layers : true,\n style : true,\n filter : false,\n legend : true,\n group : false\n };\n }\n\n if (options.vectorStyleOptions && options.vectorStyleOptions.MapBox && options.vectorStyleOptions.MapBox.hasOwnProperty(\"display\")) {\n this.options.vectorStyleOptions.MapBox.display = options.vectorStyleOptions.MapBox.display;\n } else {\n this.options.vectorStyleOptions.MapBox.display = true;\n }\n\n // merge layer types\n if (Array.isArray(options.layerTypes)) {\n var layerTypes = [];\n for (var i = 0; i < options.layerTypes.length; i++) {\n layerTypes.push(options.layerTypes[i]);\n }\n this.options.layerTypes = layerTypes;\n }\n\n // merge with user options\n Utils.mergeParams(this.options, options);\n\n /** {Boolean} specify if LayerImport control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n /** {Boolean} specify if LayerImport control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n // identifiant du contrôle : utile pour suffixer les identifiants CSS (pour gérer le cas où il y en a plusieurs dans la même page)\n this._uid = this.options.id || SelectorID.generate();\n\n // si une requête est en cours ou non\n this._waiting = false;\n // timer pour cacher la patience après un certain temps\n this._timer = null;\n\n // initialisation des types d'import\n this._initImportTypes();\n // initialisation des styles par défaut\n this._initDefaultStyles();\n\n // ################################################################## //\n // ################### Elements principaux du DOM ################### //\n\n // containers principaux (FIXME : tous utiles ?)\n this._showImportButton = null;\n this._importPanel = null;\n this._panelCloseButton = null;\n this._importPanelHeader = null;\n this._importPanelTitle = null;\n this._importPanelReturnPicto = null;\n this._formContainer = null;\n this._staticLocalImportInput = null;\n this._staticUrlImportInput = null;\n this._serviceUrlImportInput = null;\n this._getCapPanel = null;\n this._getCapPanelHeader = null;\n this._getCapResultsListContainer = null;\n this._mapBoxPanel = null;\n this._mapBoxPanelHeader = null;\n this._mapBoxResultsListContainer = null;\n\n this._waitingContainer = null;\n this._loadingContainer = null;\n\n // ################################################################## //\n // ################ Interrogation du GetCapabilities ################ //\n this._hasGetCapResults = false;\n this._getCapRequestUrl = null;\n this._getCapResponseWMS = null;\n this._getCapResponseWMSLayers = [];\n this._getCapResponseWMTS = null;\n this._getCapResponseWMTSLayers = [];\n\n // ################################################################## //\n // ########################### MapBox ############################### //\n this._hasMapBoxResults = false;\n\n // ################################################################## //\n // ########################### file or url ########################## //\n this.contentStatic = null;\n this._url = null;\n this._file = null;\n this._name = null;\n }\n\n /**\n * this method is called by this.initialize()\n * and makes sure input options are correctly formated\n *\n * @param {Object} options - control input options\n * @private\n */\n _checkInputOptions (options) {\n // on vérifie le tableau des types\n if (options.layerTypes) {\n var layerTypes = options.layerTypes;\n // on vérifie que la liste des types est bien un tableau\n if (!Array.isArray(layerTypes)) {\n logger.warn(\"[ol.control.LayerImport] 'options.layerTypes' parameter should be an array. Set default values [\\\"KML\\\", \\\"GPX\\\", \\\"GeoJSON\\\", \\\"WMS\\\", \\\"WMTS\\\"]\");\n options.layerTypes = [\n \"KML\",\n \"GPX\",\n \"GeoJSON\",\n \"WMS\",\n \"WMTS\",\n \"MAPBOX\"\n ];\n } else {\n var typesList = [\n \"KML\",\n \"GPX\",\n \"GEOJSON\",\n \"WMS\",\n \"WMTS\",\n \"WFS\",\n \"MAPBOX\"\n ];\n var wrongTypesIndexes = [];\n for (var i = 0; i < layerTypes.length; i++) {\n if (typeof layerTypes[i] !== \"string\") {\n // si l'élément du tableau n'est pas une chaine de caractères, on stocke l'index pour le retirer du tableau\n wrongTypesIndexes.push(i);\n logger.warn(\"[ol.control.LayerImport] 'options.layerTypes' elements should be of type string (\" + layerTypes[i] + \")\");\n } else {\n // on passe en majuscules pour comparer\n layerTypes[i] = layerTypes[i].toUpperCase();\n if (typesList.indexOf(layerTypes[i]) === -1) {\n // si le type n'est pas référencé, on stocke son index pour le retirer du tableau (après avoir terminé de parcourir le tableau)\n wrongTypesIndexes.push(i);\n logger.log(\"[ol.control.LayerImport] options.layerTypes : \" + layerTypes[i] + \" is not a supported type\");\n }\n // cas spécial du GeoJSON qu'on ne laisse pas en majuscules\n if (layerTypes[i] === \"GEOJSON\") {\n layerTypes[i] = \"GeoJSON\";\n }\n if (layerTypes[i] === \"MAPBOX\") {\n layerTypes[i] = \"MAPBOX\";\n }\n }\n }\n // on retire les types non référencés qu'on a pu rencontrer\n if (wrongTypesIndexes.length !== 0) {\n for (var j = wrongTypesIndexes.length - 1; j >= 0; j--) {\n layerTypes.splice(wrongTypesIndexes[j], 1);\n }\n }\n }\n }\n }\n\n /**\n * this method is called by this.initialize()\n * and initializes default styles for vector layers (KML/GPX/GeoJSON)\n *\n * @private\n */\n _initDefaultStyles () {\n var kmlDefaultStyles = this.options.vectorStyleOptions.KML.defaultStyle;\n this._defaultKMLStyle = new Style({\n image : kmlDefaultStyles.image,\n stroke : kmlDefaultStyles.stroke,\n fill : kmlDefaultStyles.fill,\n text : kmlDefaultStyles.text\n });\n var gpxDefaultStyles = this.options.vectorStyleOptions.GPX.defaultStyle;\n this._defaultGPXStyle = new Style({\n image : gpxDefaultStyles.image,\n stroke : gpxDefaultStyles.stroke,\n fill : gpxDefaultStyles.fill,\n text : gpxDefaultStyles.text\n });\n var geoJSONDefaultStyles = this.options.vectorStyleOptions.GeoJSON.defaultStyle;\n this._defaultGeoJSONStyle = new Style({\n image : geoJSONDefaultStyles.image,\n stroke : geoJSONDefaultStyles.stroke,\n fill : geoJSONDefaultStyles.fill,\n text : geoJSONDefaultStyles.text\n });\n var MapBoxDefaultStyles = this.options.vectorStyleOptions.MapBox.defaultStyle;\n this._defaultMapBoxStyle = new Style({\n image : MapBoxDefaultStyles.image,\n stroke : MapBoxDefaultStyles.stroke,\n fill : MapBoxDefaultStyles.fill,\n text : MapBoxDefaultStyles.text\n });\n }\n\n /**\n * this method is called by this.initialize()\n * and initializes import types parameter\n *\n * @private\n */\n _initImportTypes () {\n this._currentImportType = this.options.layerTypes[0] || \"KML\";\n if (this._currentImportType === \"KML\" || this._currentImportType === \"GPX\" || this._currentImportType === \"GeoJSON\" || this._currentImportType === \"MAPBOX\") {\n this._isCurrentImportTypeStatic = true;\n } else if (this._currentImportType === \"WMS\" || this._currentImportType === \"WMTS\" || this._currentImportType === \"WFS\") {\n this._isCurrentImportTypeStatic = false;\n }\n this._currentStaticImportType = \"local\";\n }\n\n /**\n * Create control main container (DOM initialize)\n *\n * @private\n * @returns {DOMElement} container - control main container\n */\n _initContainer () {\n // create main container\n var container = this._createMainContainerElement();\n\n // create Import picto\n var picto = this._showImportButton = this._createShowImportPictoElement();\n container.appendChild(picto);\n\n // panel\n var importPanel = this._importPanel = this._createImportPanelElement();\n var importPanelPanelDiv = this._createImportPanelDivElement();\n importPanel.appendChild(importPanelPanelDiv);\n\n // header\n var panelHeader = this._importPanelHeader = this._createImportPanelHeaderElement();\n // return\n var panelReturn = this._importPanelReturnPicto = this._createImportPanelReturnPictoElement();\n panelHeader.appendChild(panelReturn);\n\n // panel title\n var panelTitle = this._importPanelTitle = this._createImportPanelTitleElement();\n panelHeader.appendChild(panelTitle);\n // close picto\n var panelClose = this._panelCloseButton = this._createImportPanelCloseElement();\n panelHeader.appendChild(panelClose);\n importPanelPanelDiv.appendChild(panelHeader);\n\n // form : initialisation du formulaire d'import des couches (types d'import et saisie de l'url / du fichier)\n var importForm = this._formContainer = this._initInputFormElement();\n importPanelPanelDiv.appendChild(importForm);\n\n // results (dans le panel)\n var getCapPanel = this._getCapPanel = this._createImportGetCapPanelElement();\n // var getCapPanelHeader = this._getCapPanelHeader = this._createImportGetCapPanelHeaderElement();\n // getCapPanel.appendChild(getCapPanelHeader);\n var importGetCapResultsList = this._getCapResultsListContainer = this._createImportGetCapResultsContainer();\n getCapPanel.appendChild(importGetCapResultsList);\n importPanelPanelDiv.appendChild(getCapPanel);\n\n // mapbox panel results\n var mapBoxPanel = this._mapBoxPanel = this._createImportMapBoxPanelElement();\n // var mapBoxPanelHeader = this._mapBoxPanelHeader = this._createImportMapBoxPanelHeaderElement();\n // mapBoxPanel.appendChild(mapBoxPanelHeader);\n var importMapBoxResultsList = this._mapBoxResultsListContainer = this._createImportMapBoxResultsContainer();\n mapBoxPanel.appendChild(importMapBoxResultsList);\n\n // loading element mapbox\n var loading = this._loadingContainer = this._createLoadingElement();\n mapBoxPanel.appendChild(loading);\n\n importPanelPanelDiv.appendChild(mapBoxPanel);\n\n // waiting\n var waiting = this._waitingContainer = this._createImportWaitingElement();\n importPanelPanelDiv.appendChild(waiting);\n\n container.appendChild(importPanel);\n\n return container;\n }\n\n /**\n * Create control main container (DOM initialize)\n *\n * @private\n * @returns {DOMElement} importForm - form main container\n */\n _initInputFormElement () {\n // form main container\n var importForm = this._createImportPanelFormElement();\n\n // Format choice\n var importTypeChoiceDiv = this._createImportTypeLineElement(this.options.layerTypes);\n importForm.appendChild(importTypeChoiceDiv);\n\n // params for KML/GPX/GeoJSON\n\n var importStaticParamsContainer = this._createImportStaticParamsContainer(this.options.layerTypes[0]);\n // static file name\n var staticNameLabel = this._createStaticNameLabel();\n importStaticParamsContainer.appendChild(staticNameLabel);\n // static import choice (local / url)\n var staticImportChoice = this._createStaticModeChoiceDiv();\n // TODO : passer un paramètre \"checked\" ??\n var staticLocalImportChoice = this._createStaticLocalChoiceDiv();\n staticImportChoice.appendChild(staticLocalImportChoice);\n var staticUrlImportChoice = this._createStaticUrlChoiceDiv();\n staticImportChoice.appendChild(staticUrlImportChoice);\n importStaticParamsContainer.appendChild(staticImportChoice);\n\n // div for local file import\n var staticLocalInputDiv = this._createStaticLocalInputDiv();\n // label\n staticLocalInputDiv.appendChild(this._createStaticLocalInputLabel());\n // file input\n this._staticLocalImportInput = this._createStaticLocalInput();\n staticLocalInputDiv.appendChild(this._staticLocalImportInput);\n // append div to params container\n importStaticParamsContainer.appendChild(staticLocalInputDiv);\n\n // div for url input (info: séparation pour récupérer l'élément input)\n var staticUrlInputDiv = this._createStaticUrlInputDiv();\n // label\n staticUrlInputDiv.appendChild(this._createStaticUrlInputLabel());\n // url input\n this._staticUrlImportInput = this._createStaticUrlInput();\n staticUrlInputDiv.appendChild(this._staticUrlImportInput);\n // append div to params container\n importStaticParamsContainer.appendChild(staticUrlInputDiv);\n\n // append static params container to form container\n importForm.appendChild(importStaticParamsContainer);\n\n // params for WMS/WMTS/WFS\n\n var importServiceParamsContainer = this._createServiceParamsContainer(this.options.layerTypes[0]);\n // div for service url\n var importServiceUrlDiv = this._createServiceUrlDiv();\n // label\n importServiceUrlDiv.appendChild(this._createServiceUrlInputLabel());\n // input\n this._serviceUrlImportInput = this._createServiceUrlInput();\n importServiceUrlDiv.appendChild(this._serviceUrlImportInput);\n // append div to params container\n importServiceParamsContainer.appendChild(importServiceUrlDiv);\n // append service params container to form container\n importForm.appendChild(importServiceParamsContainer);\n\n // submit (bouton \"Importer\")\n var submit = this._createImportSubmitFormElement();\n importForm.appendChild(submit);\n\n return importForm;\n }\n\n // ################################################################### //\n // ######################### DOM events ############################## //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on 'GPshowImportPicto' picto\n * (cf. LayerImportDOM._createShowImportPictoElement),\n * and dispatch event change:collapsed (for tools listening this property)\n *\n * @param { event } e évènement associé au clic\n * @private\n */\n _onShowImportClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n // on supprime toutes les interactions\n Interactions.unset(map);\n // info : on génère nous même l'evenement OpenLayers de changement de propriété\n // (utiliser ol.control.LayerImport.on(\"change:collapsed\", function ) pour s'abonner à cet évènement)\n var opened = this._showImportButton.ariaPressed;\n this.collapsed = !(opened === \"true\");\n this.dispatchEvent(\"change:collapsed\");\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n // on affiche les resultats d'une couche MapBox\n // car on garde la possibilité de modifier la configuration des layers\n if (this._hasMapBoxResults) {\n this._mapBoxPanel.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n this._mapBoxPanel.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n this._hideFormContainer();\n } else if (this._hasGetCapResults) {\n this._getCapPanel.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n this._getCapPanel.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n this._hideFormContainer();\n } else {\n this._getCapPanel.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n this._getCapPanel.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n this._mapBoxPanel.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n this._mapBoxPanel.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n this._displayFormContainer();\n }\n }\n\n /**\n * this method is called by event 'change' on 'GPimportType' tag form\n * (cf. LayerImportDOM._createImportTypeLineElement),\n * and change current import type\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onImportTypeChange (e) {\n this._currentImportType = e.target.value;\n if (this._currentImportType === \"KML\" || this._currentImportType === \"GPX\" || this._currentImportType === \"GeoJSON\" || this._currentImportType === \"MAPBOX\") {\n this._isCurrentImportTypeStatic = true;\n } else if (this._currentImportType === \"WMS\" || this._currentImportType === \"WMTS\" || this._currentImportType === \"WFS\") {\n this._isCurrentImportTypeStatic = false;\n }\n }\n\n /**\n * this method is called by event 'change' on 'GPimportType' tag form\n * (cf. LayerImportDOM._createImportTypeLineElement),\n * and change current import type\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onStaticImportTypeChange (e) {\n this._currentStaticImportType = e.target.value;\n }\n\n /**\n * this method is called by event 'click' on 'GPimportGetCapPanelClose' tag form\n * (cf. LayerImportDOM._createImportGetCapPanelHeaderElement),\n * and reset getCapabilities information\n *\n * @private\n */\n _onGetCapPanelClose () {\n // this._clearGetCapParams();\n if (this._currentImportType === \"WMS\" ||\n this._currentImportType === \"WMTS\" ||\n this._currentImportType === \"WFS\") {\n this.cleanGetCapResultsList();\n }\n }\n\n /**\n * this method is called by event 'click' on 'GPimportMapBoxPanelClose' tag form\n * (cf. LayerImportDOM._createImportMapBoxPanelHeaderElement),\n * and reset mapbox information\n *\n * @private\n */\n _onMapBoxPanelClose () {\n this.cleanMapBoxResultsList();\n this._loadingContainer.className = \"\";\n this._importPanelReturnPicto.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n this._importPanelReturnPicto.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n this._mapBoxPanel.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n this._mapBoxPanel.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n\n /**\n * this method is called by event 'click' on 'GPimportPanelReturnPicto' tag form\n * (cf. LayerImportDOM._createImportMapBoxPanelHeaderElement),\n * and return to information\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onReturnPictoClick (e) {\n // on bascule sur l'icone d'ouverture du composant\n this._onGetCapPanelClose();\n this._onMapBoxPanelClose();\n this._loadingContainer.className = \"\";\n }\n\n // ################################################################### //\n // ######################## Submit form ############################## //\n // ################################################################### //\n\n /**\n * this method is called by event 'submit' on 'GPimportForm' tag form\n * (cf. LayerImportDOM._createImportPanelFormElement),\n * and import static layer or call getCap service (according to import type)\n *\n * @private\n */\n _onImportSubmit () {\n logger.log(\"import d'une couche de type : \" + this._currentImportType);\n\n // reinitialisation du contenu d'un import de type\n // - static (KML ou GPX ou GeoJSON)\n this.contentStatic = null;\n // - service (WMS, ...)\n this.contentService = null;\n\n if (this._isCurrentImportTypeStatic) {\n // on ferme le widget à l'import d'une couche statique\n this.setCollapsed(true);\n this._importStaticLayer();\n } else {\n this._importServiceLayers();\n }\n }\n\n // ################################################################### //\n // ############## Import KML/GPX/GeoJSON/MapBox layers ############### //\n // ################################################################### //\n\n /**\n * this method is called by this_onImportSubmit method\n * and import static layer (KML/GPX/GeoJSON) from url or file\n *\n * @private\n */\n _importStaticLayer () {\n var layerName;\n var staticImportNameInput = document.getElementById(this._addUID(\"GPimportName\"));\n if (staticImportNameInput) {\n layerName = staticImportNameInput.value || \"\";\n logger.log(\"import layer name : \" + layerName);\n }\n\n if (this._currentStaticImportType === \"local\") {\n logger.log(\"import static layer from local file\");\n this._importStaticLayerFromLocalFile(layerName);\n } else if (this._currentStaticImportType === \"url\") {\n logger.log(\"import static layer from url\");\n this._importStaticLayerFromUrl(layerName);\n }\n }\n\n /**\n * this method is called by _importStaticLayer method\n * and import static layer (KML/GPX/GeoJSON) from url\n *\n * @param {String} layerName - imported layer name\n * @private\n */\n _importStaticLayerFromUrl (layerName) {\n // 1. Récupération de l'url\n var url = this._staticUrlImportInput.value;\n logger.log(\"url : \", url);\n if (url.length === 0) {\n logger.error(\"[ol.control.LayerImport] url parameter is mandatory\");\n return;\n }\n // on supprime les éventuels espaces avant ou après\n if (url.trim) {\n url = url.trim();\n }\n\n // sauvegarde\n this._url = url;\n\n // si le nom n'est pas renseigné, on extrait le nom du fichier\n if (!layerName) {\n layerName = this._url.substring(this._url.lastIndexOf(\"/\") + 1, this._url.lastIndexOf(\".\"));\n }\n\n // sauvegarde\n this._name = layerName;\n\n // 2. récupération proxy\n if (this.options.webServicesOptions && this.options.webServicesOptions.proxyUrl) {\n url = ProxyUtils.proxifyUrl(url, this.options.webServicesOptions);\n }\n\n // FIXME pb de surcharge en mode UMD !? ça ne marche pas...\n // this._hideWaitingContainer();\n // this._addFeaturesFromImportStaticLayerUrl(url, layerName);\n\n var context = this;\n Gp.Protocols.XHR.call({\n url : url,\n method : \"GET\",\n timeOut : 15000,\n // on success callback : display results in container\n onResponse : function (response) {\n context._hideWaitingContainer();\n context._addFeaturesFromImportStaticLayer(response, layerName);\n },\n // on error callback : log error\n onFailure : function (error) {\n // en cas d'erreur, on revient au panel initial et on cache la patience\n context._hideWaitingContainer();\n logger.error(\"[ol.control.LayerImport] KML/GPX/GeoJSON/MapBox request failed : \", error);\n }\n });\n }\n\n /**\n * this method is called by _importStaticLayer method\n * and import static layer (KML/GPX/GeoJSON) from local file\n *\n * @param {String} layerName - imported layer name\n * @private\n */\n _importStaticLayerFromLocalFile (layerName) {\n var file = this._staticLocalImportInput.files[0];\n if (!file) {\n logger.warn(\"[ol.control.LayerImport] missing file\");\n return;\n }\n\n // sauvegarde\n this._file = file;\n\n // si le nom n'est pas renseigné, on extrait le nom du fichier\n if (!layerName) {\n layerName = this._file.name.substring(this._file.name.lastIndexOf(\"/\") + 1, this._file.name.lastIndexOf(\".\"));\n }\n\n // sauvegarde\n this._name = layerName;\n\n // Création d'un objet FileReader qui permet de lire le contenu du fichier chargé\n var fReader = new FileReader();\n\n // Définition des fonctions de callbacks associées au reader,\n // notamment la fonction onload qui affichera les entités chargées à la carte\n var context = this;\n // on readAsText error\n fReader.onerror = (e) => {\n // en cas d'erreur, on revient au panel initial et on cache la patience\n context._hideWaitingContainer();\n logger.error(\"error fileReader : \", e);\n };\n /** on readAsText progress */\n fReader.onprogress = () => {\n logger.log(\"onprogress\");\n };\n /** on load start */\n fReader.onloadstart = () => {\n // affichage d'une patience le temps du chargement\n context._displayWaitingContainer();\n logger.log(\"onloadstart\");\n };\n /** on readAsText abort */\n fReader.onabort = () => {\n // en cas d'erreur, on revient au panel initial et on cache la patience\n context._hideWaitingContainer();\n logger.log(\"onabort\");\n };\n // on readAsText loadend\n fReader.onloadend = (e) => {\n // fReader = null ?\n // en cas d'erreur, on revient au panel initial et on cache la patience\n // context._hideWaitingContainer();\n // TODO : replier le formulaire ?\n logger.log(\"onloadend : \", e);\n };\n // on readAsText load\n fReader.onload = (e) => {\n logger.log(\"fileReader onload - file content : \", e.target.result);\n\n // on cache la patience\n context._hideWaitingContainer();\n context._addFeaturesFromImportStaticLayer(e.target.result, layerName);\n };\n\n // Lecture du fichier chargé à l'aide de fileReader\n fReader.readAsText(file);\n }\n\n /**\n * this method is called by _importStaticLayerFom* method\n * and add features to the map\n *\n * @param {String} fileContent - content file\n * @param {String} layerName - imported layer name\n * @private\n */\n _addFeaturesFromImportStaticLayer (fileContent, layerName) {\n // récupération du contenu du fichier\n var map = this.getMap();\n if (!map || !fileContent) {\n return;\n }\n\n var vectorLayer = null;\n var vectorSource = null;\n var vectorFormat = null;\n var vectorStyle = null;\n\n // sauvegarde du content KML/GPX/GeoJSON/MapBox\n this.contentStatic = fileContent;\n\n if (this._currentImportType === \"MAPBOX\") {\n // INFO\n // on ne nettoie pas délibérément la liste de résultats de type MapBox\n // car on souhaite pouvoir interagir sur les couches (editeur).\n // du coup, à chaque import, on empile les éditeurs.\n this._hasMapBoxResults = true;\n\n // contexte\n var self = this;\n\n // style mapbox\n var _glStyles = JSON.parse(fileContent);\n\n // liste des sources\n var _glSources = _glStyles.sources;\n\n // FIXME a t on du multi-sources ?\n // mais comment doit on les traiter ?\n // EXPERIMENTAL !\n var _multiSources = (Object.keys(_glSources).length > 1) ? 1 : 0;\n\n for (var _glSourceId in _glSources) {\n if (_glSources.hasOwnProperty(_glSourceId)) {\n var _title = \"\";\n var _description = \"\";\n var _quicklookUrl = null;\n var _legends = null;\n var _metadata = null;\n var _originators = null;\n\n // lecture des informations dans le style\n // ex. metadata : {\n // geoportail:[title | description | quicklookUrl | legends | originators | metadata]\n // }\n if (_glStyles.metadata) {\n for (var ns in _glStyles.metadata) {\n if (_glStyles.metadata.hasOwnProperty(ns)) {\n var _keys = ns.split(\":\");\n if (_keys[0] === \"geoportail\") {\n var key = _keys[1];\n if (key === \"title\") {\n _title = _glStyles.metadata[ns];\n continue;\n }\n if (key === \"description\") {\n _description = _glStyles.metadata[ns];\n continue;\n }\n if (key === \"quicklookUrl\") {\n _quicklookUrl = _glStyles.metadata[ns];\n continue;\n }\n if (key === \"legends\") {\n _legends = _glStyles.metadata[ns];\n continue;\n }\n if (key === \"metadata\") {\n _metadata = _glStyles.metadata[ns];\n continue;\n }\n if (key === \"originators\") {\n _originators = _glStyles.metadata[ns];\n continue;\n }\n }\n }\n }\n }\n\n // titre par defaut\n if (!_title) {\n _title = \"Couche MapBox\";\n }\n // description par defaut\n if (!_description) {\n _description = \"Couche MapBox\";\n }\n // cas des multisources\n _title = (_multiSources) ? _title + \"(\" + _glSourceId + \")\" : _title;\n\n // source mapbox\n var _glSource = _glSources[_glSourceId];\n\n // construction de la couche en fonction du type\n var _glType = _glSource.type;\n\n if (_glType === \"vector\") {\n // url du tilejson ou flux mapbox\n var _glUrl = _glSource.url;\n // url du service tuilé\n var _glTiles = _glSource.tiles;\n // sprites\n var _glSprite = _glStyles.sprite;\n\n // FIXME si on a un import par fichier local (this._file),\n // - comment passe t on la clef / le token ?\n // - comment remplacer un flux mapbox sur une url de service tuilé avec un import local ?\n if (_glUrl && _glUrl.indexOf(\"mapbox://\") === 0) {\n var _urlService = this._url; // FIXME si fichier local !?\n if (_urlService) {\n _glTiles = [\"a\", \"b\", \"c\", \"d\"].map(function (host) {\n var path = _glUrl.replace(\"mapbox://\", \"\");\n var accessToken = _urlService.split(\"?\")[1];\n return \"https://\" +\n host + \".tiles.mapbox.com/v4/\" +\n path + \"/{z}/{x}/{y}.vector.pbf?\" +\n accessToken;\n });\n // conversion des sprites sur un autre scheme que \"mapbox://\"\n if (_glSprite.indexOf(\"mapbox://\") === 0) {\n var s = _urlService.split(\"?\"); // FIXME si fichier local !?\n _glStyles.sprite = s[0] + \"/sprite\" + \"?\" + s[1];\n }\n } else {\n logger.warn(\"Not yet implemented, can't use the local import scheme with a 'mapbox://' in the file.!\");\n }\n }\n\n if (_glTiles) {\n // service tuilé et/ou mapbox\n vectorFormat = new MVT({\n featureClass : Feature\n });\n vectorSource = new VectorTileSource({\n attributions : _glSource.attribution,\n format : vectorFormat,\n // INFO\n // on supprime la grille pour forcer l'utilisation par defaut des tuiles en 512\n // sur du vecteur tuilé\n // tileGrid : olCreateXYZTileGrid({ // TODO scheme tms ?\n // extent : _glSource.bounds, // [minx, miny, maxx, maxy]\n // maxZoom : _glSource.maxzoom || 22,\n // minZoom : _glSource.minzoom || 1,\n // tileSize : _glSource.tileSize || 256\n // }),\n urls : _glTiles\n });\n vectorSource._title = _title;\n vectorSource._description = _description;\n vectorSource._quicklookUrl = _quicklookUrl;\n vectorSource._metadata = _metadata;\n vectorSource._legends = _legends;\n vectorSource._originators = _originators;\n // waiting\n vectorSource.on(\"tileloadstart\", function (e) {\n self._loadingContainer.className = \"GPmapLoadingVisible\";\n });\n vectorSource.on(\"tileloadend\", function (e) {\n self._loadingContainer.className = \"\";\n });\n vectorSource.on(\"tileloaderror\", function (e) {\n self._loadingContainer.className = \"\";\n });\n vectorLayer = new VectorTileLayer({\n source : vectorSource,\n visible : false,\n // zIndex: 0, // FIXME gerer l'ordre sur des multisources ?\n declutter : true // TODO utile ?\n });\n vectorLayer.id = _glSourceId;\n vectorLayer.gpResultLayerId = \"layerimport:\" + this._currentImportType;\n } else if (_glUrl) {\n // service avec un tilejson\n vectorFormat = new MVT({\n featureClass : Feature\n });\n vectorLayer = new VectorTileLayer({\n visible : false,\n // zIndex : 0\n declutter : true\n });\n vectorLayer.id = _glSourceId;\n vectorLayer.gpResultLayerId = \"layerimport:\" + this._currentImportType;\n var vectorTileJson = new TileJSONSource({\n url : _glUrl\n });\n // lecture du tilejson avec extension IGN\n // les extensions sont enregistrées\n // dans les propriétés de la couche : layer.set(mapbox-extension)\n // pour une utilisation ulterieur (ex. editeur)\n var _key = vectorTileJson.on(\"change\", function () {\n if (vectorTileJson.getState() === \"ready\") {\n var _tileJSONDoc = vectorTileJson.getTileJSON();\n\n var tiles = Array.isArray(_tileJSONDoc.tiles) ? _tileJSONDoc.tiles : [_tileJSONDoc.tiles];\n for (var i = 0; i < tiles.length; i++) {\n var tile = tiles[i];\n if (tile.indexOf(\"http\") !== 0) {\n tiles[i] = _glUrl + tile;\n }\n }\n vectorSource = new VectorTileSource({\n attributions : vectorTileJson.getAttributions() || _tileJSONDoc.attribution,\n format : vectorFormat,\n // tileGrid : olCreateXYZTileGrid({\n // extent : _glSource.bounds, // [minx, miny, maxx, maxy]\n // maxZoom : _glSource.maxzoom || 22,\n // minZoom : _glSource.minzoom || 1,\n // tileSize : _glSource.tileSize || 256\n // }),\n urls : tiles\n });\n vectorSource._title = _title;\n vectorSource._description = _description;\n vectorSource._quicklookUrl = _quicklookUrl;\n vectorSource._metadata = _metadata;\n vectorSource._legends = _legends;\n vectorSource._originators = _originators;\n // waiting\n vectorSource.on(\"tileloadstart\", function (e) {\n self._loadingContainer.className = \"GPmapLoadingVisible\";\n });\n vectorSource.on(\"tileloadend\", function (e) {\n self._loadingContainer.className = \"\";\n });\n vectorLayer.setSource(vectorSource);\n vectorLayer.set(\"mapbox-extension\", _tileJSONDoc[\"vector_layers\"]);\n olObservableUnByKey(_key);\n }\n });\n }\n } else if (_glType === \"geojson\") {\n // FIXME\n // - cas avec un objet de type features ?\n // - cas avec une url relative ?\n var _glData = _glSource.data;\n\n vectorFormat = new GeoJSONExtended();\n vectorSource = new VectorTileSource({\n attributions : _glSource.attribution,\n format : vectorFormat,\n url : _glData\n });\n vectorSource._title = _title;\n vectorSource._description = _description;\n vectorSource._quicklookUrl = _quicklookUrl;\n vectorSource._metadata = _metadata;\n vectorSource._legends = _legends;\n vectorSource._originators = _originators;\n vectorLayer = new VectorTileLayer({\n source : vectorSource,\n visible : false,\n // zIndex: 0, // FIXME gerer l'ordre sur des multisources ?\n declutter : true // TODO utile ?\n });\n vectorLayer.id = _glSourceId;\n vectorLayer.gpResultLayerId = \"layerimport:\" + this._currentImportType;\n } else {\n logger.warn(\"Type MapBox format unknown !\");\n return;\n }\n\n // clone\n var _glStyle = JSON.parse(JSON.stringify(_glStyles));\n // cas du multi source\n if (_multiSources) {\n // on supprime les layers inutiles\n var _glLayers = _glStyle.layers;\n for (var ii = 0; ii < _glLayers.length; ii++) {\n var _glLayer = _glLayers[ii];\n if (_glLayer.source !== _glSourceId) {\n _glLayers.splice(ii, 1);\n continue;\n }\n }\n // on supprime les sources inutiles\n for (var keySource in _glStyle.sources) {\n if (_glStyle.sources.hasOwnProperty(keySource)) {\n if (keySource !== _glSourceId) {\n delete _glStyle.sources[keySource];\n }\n }\n }\n }\n\n // parametre à transmettre à la fonction auto-invoquée\n var params = {\n id : _glSourceId,\n styles : _glStyle,\n layer : vectorLayer,\n options : {\n title : layerName || _title,\n description : _description,\n quicklookUrl : _quicklookUrl,\n metadata : _metadata,\n legends : _legends,\n originators : _originators\n }\n };\n // fonction auto-invoquée\n (function (p) {\n // TODO ajouter le style de type background !\n // fonction de style de la couche\n var setStyle = () => {\n applyStyleOlms(p.layer, p.styles, { source : p.id })\n .then(function () {\n var visibility = true;\n p.layer.setVisible(visibility);\n var opacity = 1;\n p.layer.setOpacity(opacity);\n })\n .then(function () {\n // gestion du centre sur la carte si center renseigné !\n var projCode = map.getView().getProjection().getCode();\n if (map.getView() && p.styles.center && p.styles.center.length) {\n map.getView().setCenter(olTransformProj(p.styles.center, \"EPSG:4326\", projCode));\n }\n\n // gestion du zoom sur la carte si zoom renseigné !\n if (map.getView() && (p.styles.zoom || p.styles.zoom === 0)) {\n map.getView().setZoom(p.styles.zoom);\n }\n\n // TODO : appeler fonction commune\n // zoom sur l'étendue des entités récupérées (si possible)\n var source = p.layer.getSource();\n if (map.getView() && map.getSize() && source.getExtent) {\n var sourceExtent = source.getExtent();\n if (sourceExtent && sourceExtent[0] !== Infinity) {\n map.getView().fit(sourceExtent, map.getSize());\n }\n }\n })\n .then(function () {\n // on cache le panneau principal des imports\n self._hideFormContainer();\n self._importPanelHeader.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n self._importPanelHeader.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n self._importPanelTitle.innerHTML = \"Edition des styles\";\n\n // editeur de styles\n var editor = new Editor({\n target : self._mapBoxResultsListContainer,\n style : JSON.parse(JSON.stringify(p.styles)), // clone\n scope : this,\n events : {\n \"editor:onloaded\" : self._onLoadedMapBox, // utile ?\n \"editor:layer:onclickvisibility\" : self._onChangeVisibilitySourceMapBox,\n \"editor:style:scale:onchangemin\" : self._onChangeScaleMinSourceMapBox,\n \"editor:style:scale:onchangemax\" : self._onChangeScaleMaxSourceMapBox,\n \"editor:legend:onchangevalue\" : self._onChangeLegendValueSourceMapBox,\n \"editor:legend:onclickedition\" : self._onDisplayLayerSourceMapBox\n },\n tools : self.options.vectorStyleOptions.MapBox.editor\n });\n editor.setContext(\"map\", map);\n editor.setContext(\"layer\", p.layer);\n // creation de l'editeur\n return editor.createElement()\n .then(function () {\n // exception...\n if (editor.getLayers().length === 0) {\n throw new Error(\"Il n'existe pas de styles pour la source demandée !?\");\n }\n })\n .then(function () {\n // affichage du panneau des couches accessibles à l'edition\n if (self.options.vectorStyleOptions.MapBox.display) {\n self._importPanelHeader.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n self._importPanelHeader.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n self._mapBoxPanel.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n self._mapBoxPanel.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n self._importPanelReturnPicto.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n self._importPanelReturnPicto.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n }\n })\n .then(function () {\n // hack pour modifier le titre de la couche de fond\n var elements = self._mapBoxResultsListContainer.getElementsByClassName(\"GPEditorMapBoxLayerTitleLabel\");\n for (let index = 0; index < elements.length; index++) {\n const element = elements[index];\n if (element.textContent === \"bckgrd\") {\n element.textContent = \"Couleur de remplissage\";\n }\n }\n })\n .then(function () {\n // association entre le layer et l'editeur via l'id\n p.layer.set(\"mapbox-editor\", editor.getID());\n // envoi d'un evenement\n // un peu en décalé pour laisser le temps au DOM de faire le job...\n setTimeout(function () {\n map.dispatchEvent({\n id : editor.getID(),\n type : \"editor:loaded\",\n style : p.styles,\n layer : p.layer\n });\n }, 100);\n })\n .catch(function (e) {\n // on propage l'exception\n throw e;\n });\n })\n .then(function () {\n // envoi d'un evenement !\n map.dispatchEvent({\n id : p.id,\n type : \"render:success\",\n style : p.styles\n });\n })\n .catch(function (e) {\n logger.error(e);\n // envoi d'un evenement !\n map.dispatchEvent({\n id : p.id,\n type : \"render:failure\",\n error : e\n });\n });\n };\n\n // etat des layers en cours\n logger.warn(p.layer);\n\n // ajout des styles dans la carte pour une utilisation\n // eventuelle (ex. editeur)\n // > map.set(\"mapbox-styles\")\n var styles = map.get(\"mapbox-styles\") || {};\n var id = p.id; // FIXME : construction d'un id unique\n styles[id] = p.styles;\n map.set(\"mapbox-styles\", styles);\n\n // ajout des differents styles de la couche\n // pour une utilisation eventuelle (ex. editeur)\n // > layer.set(\"mapbox-styles\")\n p.layer.set(\"mapbox-styles\", p.styles);\n\n // ajout du layer sur la carte\n map.addLayer(p.layer);\n\n // application du style\n if (p.layer.getSource()) {\n setStyle();\n } else {\n p.layer.once(\"change:source\", setStyle);\n }\n\n // maj du gestionnaire de couche\n map.getControls().forEach(\n (control) => {\n if (control instanceof LayerSwitcher) {\n control.addLayer(\n p.layer,\n p.options\n );\n }\n }\n );\n })(params);\n }\n }\n\n // TODO style par defaut au cas où l'application du style échoue !\n // TODO au niveau de la couche : minResolution et maxResolution\n // FIXME bug avec le geojson, très bizarre !?\n // Si on desactive l'editeur, OK\n // Sinon NOK !?\n } else {\n if (this._currentImportType === \"KML\") {\n // lecture du fichier KML : création d'un format ol.format.KML, qui possède une méthode readFeatures (et readProjection)\n vectorStyle = this.options.vectorStyleOptions.KML.defaultStyle;\n vectorFormat = new KMLExtended({\n showPointNames : this.options.vectorStyleOptions.KML.showPointNames,\n extractStyles : this.options.vectorStyleOptions.KML.extractStyles,\n defaultStyle : [\n vectorStyle\n ]\n });\n } else if (this._currentImportType === \"GPX\") {\n // lecture du fichier GPX : création d'un format ol.format.GPX, qui possède une méthode readFeatures (et readProjection)\n vectorStyle = this.options.vectorStyleOptions.GPX.defaultStyle;\n vectorFormat = new GPXExtended({\n defaultStyle : vectorStyle\n });\n } else if (this._currentImportType === \"GeoJSON\") {\n // lecture du fichier GeoJSON : création d'un format ol.format.GeoJSON, qui possède une méthode readFeatures (et readProjection)\n vectorStyle = this.options.vectorStyleOptions.GeoJSON.defaultStyle;\n vectorFormat = new GeoJSONExtended({\n defaultStyle : vectorStyle\n });\n }\n\n // lecture de la géométrie des entités à partir du fichier, pour éventuelle reprojection.\n var fileProj = vectorFormat.readProjection(fileContent);\n // récupération de la projection de la carte pour reprojection des géométries\n var mapProj = this._getMapProjectionCode();\n\n // récupération des entités avec reprojection éventuelle des géométries\n var features = null;\n features = vectorFormat.readFeatures(\n fileContent, {\n dataProjection : fileProj,\n featureProjection : mapProj\n }\n );\n\n logger.log(\"loaded features : \", features);\n\n // création d'une couche vectorielle à partir de ces features\n vectorSource = new VectorSource({\n features : new Collection()\n });\n vectorSource.addFeatures(features);\n\n logger.trace(vectorSource);\n\n // ajout des informations pour le layerSwitcher (titre, description)\n vectorSource._title = vectorSource._description = layerName;\n\n vectorLayer = new VectorLayer({\n source : vectorSource,\n style : vectorStyle\n });\n\n // on rajoute le champ gpResultLayerId permettant d'identifier une couche crée par le composant.\n vectorLayer.gpResultLayerId = \"layerimport:\" + this._currentImportType;\n\n // cette couche est elle une couche de calcul ?\n var configControl = vectorFormat.readRootExtensions(\"geoportail:compute\");\n if (configControl && Object.keys(configControl).length !== 0) {\n // identifier le type de calcul authorisé :\n // * route\n // * isocurve\n // * elevationpath\n var authorizedControls = {\n route : { class : Route, name : \"itineraire\" },\n isocurve : { class : Isocurve, name : \"isocurve\" },\n elevationpath : { class : ElevationPath, name : \"profil altimetrique\" }\n };\n // information à transmettre à la couche\n var typeControl = configControl.type;\n var graphControl = configControl.transport;\n if (typeControl) {\n // la classe du controle\n var nameControl = authorizedControls[typeControl].name;\n var titleControl = (graphControl) ? nameControl + \" (\" + graphControl + \")\" : nameControl;\n var classControl = authorizedControls[typeControl].class;\n if (classControl) {\n // on est bien sur une couche de calcul authorisé !\n vectorLayer.gpResultLayerId = \"layerimport:COMPUTE\";\n // on transmet les infomations utiles\n vectorLayer.set(\"control\", typeControl);\n vectorLayer.set(\"name\", nameControl);\n vectorLayer.set(\"graph\", graphControl);\n vectorLayer.set(\"data\", configControl);\n vectorLayer.set(\"title\", titleControl);\n var formatGeoJSON = new GeoJSONExtended({\n defaultStyle : vectorStyle\n });\n var geojson = formatGeoJSON.writeFeatures(features, {\n dataProjection : \"EPSG:4326\",\n featureProjection : \"EPSG:3857\"\n });\n vectorLayer.set(\"geojson\", geojson);\n // recherche et initialiser le controle\n this.getMap().getControls().forEach((control) => {\n if (control instanceof classControl) {\n control.setData(configControl);\n control.setLayer(vectorLayer);\n control.init();\n }\n });\n }\n }\n }\n\n map.addLayer(vectorLayer);\n\n // TODO : appeler fonction commune\n // zoom sur l'étendue des entités récupérées (si possible)\n if (map.getView() && map.getSize() && vectorSource.getExtent) {\n var sourceExtent = vectorSource.getExtent();\n if (sourceExtent && sourceExtent[0] !== Infinity) {\n map.getView().fit(sourceExtent, map.getSize());\n }\n }\n }\n }\n\n /**\n * NOT USE : this method is called by _importStaticLayerFom* method\n * and add features to the map\n *\n * @param {String} url - url\n * @param {String} layerName - imported layer name\n * @private\n */\n _addFeaturesFromImportStaticLayerUrl (url, layerName) {\n // récupération du contenu du fichier\n var map = this.getMap();\n if (!map || !url) {\n return;\n }\n\n var vectorSource;\n var vectorLayer;\n var vectorFormat;\n if (this._currentImportType === \"MAPBOX\") {\n // TODO\n logger.trace(\"Not yet implemented !\");\n } else {\n if (this._currentImportType === \"KML\") {\n // lecture du fichier KML : création d'un format ol.format.KML, qui possède une méthode readFeatures (et readProjection)\n vectorFormat = new KMLExtended({\n showPointNames : true, // FIXME option !\n extractStyles : this.options.vectorStyleOptions.KML.extractStyles,\n defaultStyle : [\n this.options.vectorStyleOptions.KML.defaultStyle\n ]\n });\n } else if (this._currentImportType === \"GPX\") {\n // lecture du fichier GPX : création d'un format ol.format.GPX, qui possède une méthode readFeatures (et readProjection)\n vectorFormat = new GPXExtended({\n defaultStyle : this.options.vectorStyleOptions.GPX.defaultStyle\n });\n } else if (this._currentImportType === \"GeoJSON\") {\n // lecture du fichier GeoJSON : création d'un format ol.format.GeoJSON, qui possède une méthode readFeatures (et readProjection)\n vectorFormat = new GeoJSONExtended({\n defaultStyle : this.options.vectorStyleOptions.GeoJSON.defaultStyle\n });\n }\n\n // création d'une couche vectorielle à partir de ces features\n vectorSource = new VectorSource({\n url : url,\n format : vectorFormat\n });\n\n if (this._currentImportType === \"GPX\") {\n vectorSource.forEachFeature(\n function (feature) {\n // si aucun style n'est associé au feature\n if (feature.getStyle() == null) {\n logger.log(\"[ol.control.LayerImport] set default style for GPX feature\");\n feature.setStyle(\n this.options.vectorStyleOptions.GPX.defaultStyle\n );\n }\n }\n );\n }\n if (this._currentImportType === \"GeoJSON\") {\n vectorSource.forEachFeature(\n function (feature) {\n // si aucun style n'est associé au feature\n if (feature.getStyle() == null) {\n logger.log(\"[ol.control.LayerImport] set default style for GeoJSON feature\");\n feature.setStyle(\n this.options.vectorStyleOptions.GeoJSON.defaultStyle\n );\n }\n }\n );\n }\n\n // ajout des informations pour le layerSwitcher (titre, description)\n vectorSource._title = vectorSource._description = layerName;\n\n vectorLayer = new VectorLayer({\n source : vectorSource\n });\n }\n\n // on rajoute le champ gpResultLayerId permettant d'identifier une couche crée par le composant. (pour layerSwitcher par ex)\n vectorLayer.gpResultLayerId = \"layerimport:\" + this._currentImportType;\n map.addLayer(vectorLayer);\n\n // TODO : appeler fonction commune\n // zoom sur l'étendue des entités récupérées (si possible)\n if (map.getView() && map.getSize() && vectorSource.getExtent) {\n var sourceExtent = vectorSource.getExtent();\n if (sourceExtent && sourceExtent[0] !== Infinity) {\n map.getView().fit(sourceExtent, map.getSize());\n }\n }\n }\n\n // Events MapBox DOM\n\n /**\n * this method is called when the editor is loaded\n *\n * @param {Object} e - editor\n */\n _onLoadedMapBox (e) {\n var data = e.target.data.obj;\n var layer = this.getContext(\"layer\");\n if (layer.get(\"mapbox-source\") === data.source && layer.get(\"mapbox-editor\") === e.target.editorID) {\n // some stuff..\n }\n }\n\n /**\n * this method is called on '_addImportMapBoxVisibilitySource' input click\n * and change visibility source to map\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onChangeVisibilitySourceMapBox (e) {\n var data = e.target.data.obj;\n var target = e.target.srcElement;\n var layer = this.getContext(\"layer\");\n\n // logger.trace(layer);\n if (layer.get(\"mapbox-source\") === data.source && layer.get(\"mapbox-editor\") === e.target.editorID) {\n // reload style with new param : layout.visibility : \"visible\" or \"none\"...\n var styles = layer.get(\"mapbox-styles\");\n var layers = styles.layers;\n for (var i = 0; i < layers.length; i++) {\n if (layers[i].id === data.id) {\n var layout = layers[i].layout;\n if (layout) {\n layout.visibility = (target.checked) ? \"visible\" : \"none\";\n } else {\n layers[i].layout = {\n visibility : (target.checked) ? \"visible\" : \"none\"\n };\n }\n break;\n }\n }\n applyStyleOlms(layer, styles, { source : data.source })\n .then(function () {})\n .catch(function (error) {\n logger.error(error);\n });\n }\n }\n\n /**\n * this method is called on '_addImportMapBoxScaleSource' input slide\n * and change zoom source to map\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onChangeScaleMinSourceMapBox (e) {\n var data = e.target.data.obj;\n var target = e.target.srcElement;\n var layer = this.getContext(\"layer\");\n\n if (layer.get(\"mapbox-source\") === data.source && layer.get(\"mapbox-editor\") === e.target.editorID) {\n // reload style with new param : minZoom = ...\n var styles = layer.get(\"mapbox-styles\");\n var layers = styles.layers;\n for (var i = 0; i < layers.length; i++) {\n if (layers[i].id === data.id) {\n layers[i].minzoom = target.value;\n target.title = target.value;\n break;\n }\n }\n applyStyleOlms(layer, styles, { source : data.source })\n .then(function () {})\n .catch(function (error) {\n logger.error(error);\n });\n }\n }\n\n /**\n * this method is called on '_addImportMapBoxScaleSource' input slide\n * and change zoom source to map\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onChangeScaleMaxSourceMapBox (e) {\n var data = e.target.data.obj;\n var target = e.target.srcElement;\n var layer = this.getContext(\"layer\");\n\n // logger.trace(layer);\n if (layer.get(\"mapbox-source\") === data.source && layer.get(\"mapbox-editor\") === e.target.editorID) {\n // reload style with new param : minZoom = ...\n var styles = layer.get(\"mapbox-styles\");\n var layers = styles.layers;\n for (var i = 0; i < layers.length; i++) {\n if (layers[i].id === data.id) {\n layers[i].maxzoom = target.value;\n target.title = target.value;\n break;\n }\n }\n applyStyleOlms(layer, styles, { source : data.source })\n .then(function () {})\n .catch(function (error) {\n logger.error(error);\n });\n }\n }\n\n /**\n * this method is called on ''\n * and change zoom source to map\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onChangeLegendValueSourceMapBox (e) {\n var data = e.target.data.obj;\n var target = e.target.srcElement;\n var layer = this.getContext(\"layer\");\n\n // logger.trace(layer);\n if (layer.get(\"mapbox-source\") === data.source && layer.get(\"mapbox-editor\") === e.target.editorID) {\n // reload style with new param :\n var styles = layer.get(\"mapbox-styles\");\n var layers = styles.layers;\n for (var i = 0; i < layers.length; i++) {\n if (layers[i].id === data.id) {\n var paint = layers[i].paint;\n if (paint) {\n paint[target.dataset.id] = target.value;\n }\n break;\n }\n }\n applyStyleOlms(layer, styles, { source : data.source, updateSource : true })\n .then(function () {})\n .catch(function (error) {\n logger.error(error);\n });\n }\n }\n\n /**\n * this method is called on ''\n * and change zoom source to map\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onDisplayLayerSourceMapBox (e) {\n var data = e.target.data.obj;\n var layer = this.getContext(\"layer\");\n\n if (layer.get(\"mapbox-source\") === data.source && layer.get(\"mapbox-editor\") === e.target.editorID) {\n var idDOM = e.target.currentTarget.parentNode.id;\n var id = idDOM.substring(idDOM.indexOf(\"-\") + 1, idDOM.indexOf(\"_\"));\n var l = this.getLayer(id);\n l.collapse();\n }\n }\n\n // ################################################################### //\n // #################### Import WMS/WMTS layers ####################### //\n // ################################################################### //\n\n /**\n * this method is called by this_onImportSubmit method\n * and call getCap service from specified url, then display layers list in new panel\n *\n * @private\n */\n _importServiceLayers () {\n if (this._currentImportType === \"WFS\") {\n logger.warn(\"[ol.control.LayerImport] WFS layer import is not implemented yet\");\n return;\n }\n\n // 0. on vide d'éventuels résultats précédents dans le panel GetCapResults\n this.cleanGetCapResultsList();\n\n // 1. récupération de l'url renseignée\n var url = this._getCapRequestUrl = this._serviceUrlImportInput.value;\n if (!url) {\n logger.error(\"[ol.control.LayerImport] url parameter is mandatory\");\n return;\n }\n logger.log(\"url : \", url);\n\n // on supprime les éventuels espaces avant ou après\n if (url.trim) {\n url = url.trim();\n }\n // Info : on ajoute des paramètres uniquement si l'utilisateur n'en a pas déjà saisi (on vérifie la position du caractère \"?\")\n var questionMarkIndex = url.indexOf(\"?\");\n if (questionMarkIndex < 0) {\n // dans le cas d'une url du type https://data.geopf.fr/wmts\n url += \"?SERVICE=\" + this._currentImportType + \"&REQUEST=GetCapabilities\";\n } else if (questionMarkIndex === (url.length - 1)) {\n // dans le cas où l'url se termine par \"?\"\n url += \"SERVICE=\" + this._currentImportType + \"&REQUEST=GetCapabilities\";\n }\n // si on n'est pas dans ces deux cas : l'utilisateur a déjà saisit des paramètres après \"?\" => on ne fait rien.\n\n // 2. récupération proxy\n if (this.options.webServicesOptions && this.options.webServicesOptions.proxyUrl) {\n url = ProxyUtils.proxifyUrl(url, this.options.webServicesOptions);\n }\n\n // 3. affichage d'une patience le temps de la requête\n this._displayWaitingContainer();\n\n // 4. send getcapabilities request (XHR protocol => proxy Url is needed)\n var context = this;\n Gp.Protocols.XHR.call({\n url : url,\n method : \"GET\",\n timeOut : 15000,\n // on success callback : display results in container\n onResponse : function (response) {\n context._hideWaitingContainer();\n context._displayGetCapResponseLayers(response);\n },\n // on error callback : log error\n onFailure : function (error) {\n // en cas d'erreur, on revient au panel initial et on cache la patience\n context._hideWaitingContainer();\n logger.error(\"[ol.control.LayerImport] getCapabilities request failed : \", error);\n }\n });\n }\n\n /**\n * this method is called by this._importServiceLayers method\n * and display layers list from getcapabilities response\n *\n * @param {Object} xmlResponse - getCapabilities response (xml format)\n * @private\n */\n _displayGetCapResponseLayers (xmlResponse) {\n var parser;\n var layers;\n var layerDescription = {\n content : null,\n title : null\n };\n var projection;\n this._getCapResponseWMSLayers = [];\n\n // sauvegarde du content d'un GetCapabilities\n this.contentService = xmlResponse;\n\n // Affichage du panel des couches accessibles\n this._hideFormContainer();\n this._getCapPanel.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n this._getCapPanel.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n this._importPanelTitle.innerHTML = \"Couches accessibles\";\n this._importPanelReturnPicto.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n this._importPanelReturnPicto.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n this._hasGetCapResults = true;\n // Parse GetCapabilities Response\n if (this._currentImportType === \"WMS\") {\n parser = new WMSCapabilities();\n var getCapResponseWMS = this._getCapResponseWMS = parser.read(xmlResponse);\n logger.log(\"getCapabilities response : \", getCapResponseWMS);\n\n if (getCapResponseWMS && getCapResponseWMS.Capability && getCapResponseWMS.Capability.Layer) {\n // info: le parser Openlayers récupère la première layer de comme un unique objet (il écrase les précédents s'il y a pls à la racine de )\n // /!\\ être vigilant si le parser est modifié (notamment pour récupérer les différentes layers à la racine. ex http://geoservices.brgm.fr/geologie?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities)\n\n var getCapLayer = getCapResponseWMS.Capability.Layer;\n // on va lire le contenu de la (ou les) pour l'afficher ou en afficher les couches disponibles\n if (Array.isArray(getCapLayer)) {\n // cas où on a plusieurs à la racine, mais non géré encore par ol.format.WMSCapabilities jusqu'à la v3.18.2.\n for (var i = 0; i < getCapLayer.length; i++) {\n this._displayGetCapResponseWMSLayer(getCapLayer[i]);\n }\n } else {\n // cas du parser ol.format.WMSCapabilities jusqu'à la v3.18.2.\n this._displayGetCapResponseWMSLayer(getCapLayer);\n }\n }\n } else if (this._currentImportType === \"WMTS\") {\n parser = new WMTSCapabilities();\n var getCapResponseWMTS = this._getCapResponseWMTS = parser.read(xmlResponse);\n logger.log(\"getCapabilities response : \", getCapResponseWMTS);\n\n if (getCapResponseWMTS && getCapResponseWMTS.Contents && getCapResponseWMTS.Contents.Layer) {\n layers = getCapResponseWMTS.Contents.Layer;\n\n if (Array.isArray(layers)) {\n // on stocke la liste des couches pour faire le lien avec le DOM\n this._getCapResponseWMTSLayers = layers;\n\n for (var j = 0; j < layers.length; j++) {\n // on vérifie que la projection de la couche WMTS est compatible avec celle de la carte\n // (ie elle doit être connue par ol.proj)\n projection = this._getWMTSLayerProjection(layers[j], getCapResponseWMTS);\n if (projection && typeof projection === \"string\") {\n if (olGetProj(projection) || olGetProj(projection.toUpperCase())) {\n // si la projection de la couche est connue par ol.proj,\n // on ajoute chaque couche de la réponse dans la liste des couches accessibles\n layerDescription = {\n content : layers[j].Title,\n title : layers[j].Abstract || layers[j].Title\n };\n if (this._getCapResultsListContainer) {\n this._addImportGetCapResultLayer(layerDescription, j, this._getCapResultsListContainer);\n }\n } else {\n // si la projection de la couche n'est pas connue par ol.proj,\n // on n'affiche pas la couche dans le panel des résultats\n logger.warn(\"[ol.control.LayerImport] wmts layer cannot be added to map : unknown projection\", layers[j]);\n continue;\n }\n }\n }\n }\n }\n }\n }\n\n /**\n * this method is called by this._displayGetCapResponseLayers method\n * and display WMS layer in list from getcapabilities response\n *\n * @param {Object} layerObj - object corresponding to content in WMS GetCapabilities response\n * @param {Object} [parentLayersInfos] - object corresponding to parents content in WMS GetCapabilities response (without children infos)\n * @private\n */\n _displayGetCapResponseWMSLayer (layerObj, parentLayersInfos) {\n if (!layerObj) {\n logger.warn(\"[ol.control.LayerImport] _displayGetCapResponseWMSLayer : getCapabilities layer object not found\");\n return;\n }\n\n logger.log(\"[ol.control.LayerImport] _displayGetCapResponseWMSLayer - layerObj : \", layerObj);\n\n // récupération de la projection de la map (pour vérifier que l'on peut reprojeter les couches disponibles)\n var mapProjCode = this._getMapProjectionCode();\n var projection;\n var layerDescription = {\n content : null,\n title : null\n };\n\n // 1. héritage éventuels des informations de la couche parent\n if (parentLayersInfos) {\n var key;\n var i;\n\n // propriétés héritées à ajouter aux propriétés parent\n var addKeys = [\n \"CRS\",\n \"Style\"\n // \"AuthorityURL\" // TODO\n ];\n for (i = 0; i < addKeys.length; i++) {\n key = addKeys[i];\n if (Array.isArray(parentLayersInfos[key]) && parentLayersInfos[key].length !== 0) {\n if (Array.isArray(layerObj[key]) && layerObj[key].length !== 0) {\n // on ajoute celles de la couche parent\n for (var n = 0; n < parentLayersInfos[key].length; n++) {\n if (layerObj[key].indexOf(parentLayersInfos[key][n]) === -1) {\n // si le CRS/Style parent n'est pas dans les CRS/Style de la couche, on l'ajoute\n layerObj[key].push(parentLayersInfos[key][n]);\n }\n }\n } else {\n // si la couche n'a pas de CRS ou Style, on récupère ceux de la couche parent\n layerObj[key] = parentLayersInfos[key];\n }\n }\n }\n\n // propriétés qui remplacent les valeurs des propriétés héritées,\n // càd on récupère la propriété parent seulement si elle n'est pas définie pour l'élément enfant\n var replaceKeys = [\n \"BoundingBox\",\n \"EX_GeographicBoundingBox\",\n \"MaxScaleDenominator\",\n \"MinScaleDenominator\",\n \"Attribution\",\n \"Dimension\",\n \"queryable\",\n \"cascaded\",\n \"opaque\",\n \"noSubsets\",\n \"fixedWidth\",\n \"fixedHeight\"\n ];\n for (i = 0; i < replaceKeys.length; i++) {\n key = replaceKeys[i];\n if (parentLayersInfos[key] && !layerObj[key]) {\n layerObj[key] = parentLayersInfos[key];\n }\n }\n } else {\n // si on n'a pas d'infos de couche parent, on est à la racine du Capability, on le note\n layerObj._isRootLayer = true;\n layerObj._container = this._getCapResultsListContainer;\n if (!layerObj.Title) {\n layerObj.Title = \"Liste des couches\";\n }\n }\n\n // 2. si on a d'autres couches imbriquées, on descend d'un niveau, sinon on affiche la couche dans la liste des résultats\n if (layerObj.Layer) {\n if (Array.isArray(layerObj.Layer)) {\n var _container = (layerObj) ? layerObj._container : parentLayersInfos._container;\n var _title = (layerObj) ? layerObj.Title : parentLayersInfos.Title;\n layerObj._container = this._addImportGetCapResultListRubrique(_title, _container).lastChild;\n for (var j = 0; j < layerObj.Layer.length; j++) {\n // on recommence pour chaque sous couche, avec les infos éventuellement héritées\n var bRubriqueExist = false;\n var lstRubrique = layerObj._container.getElementsByClassName(\"GPimportGetCapRubriqueTitle\");\n for (var ii = 0; ii < lstRubrique.length; ii++) {\n if (lstRubrique[ii].title === layerObj.Title) {\n bRubriqueExist = true;\n layerObj.Layer[j]._container = lstRubrique[ii].parentElement;\n }\n }\n if (!bRubriqueExist) {\n layerObj.Layer[j]._container = this._addImportGetCapResultRubrique(layerObj.Title, layerObj._container).lastChild;\n }\n this._displayGetCapResponseWMSLayer(layerObj.Layer[j], layerObj);\n }\n }\n } else {\n // on récupère la longueur de la liste des couches déjà récupérées, pour avoir ce qui sera l'index de la couche à ajouter.\n var lastIndex = this._getCapResponseWMSLayers.length;\n\n // on vérifie que la couche ait une projection compatible avec celle de la carte\n // ou soit connue par proj4js, et on stocke cette projection dans les infos de la couche.\n projection = this._getWMSLayerProjection(layerObj, mapProjCode);\n\n if (!projection) {\n // si aucune projection n'est compatible avec celle de la carte ou connue par ol.proj,\n // on n'affiche pas la couche dans le panel des résultats\n logger.warn(\"[ol.control.LayerImport] wms layer cannot be added to map : unknown projection\", layerObj);\n } else {\n // si on a une projection compatible : on la stocke et la couche sera éventuellement reprojetée à l'ajout\n layerObj._projection = projection;\n // on ajoute chaque couche de la réponse dans la liste des couches accessibles\n layerDescription = {\n content : layerObj.Title,\n title : layerObj.Abstract || layerObj.Title\n };\n // FIXME beurk !?\n var _isGoodContainer = layerObj._container;\n if (_isGoodContainer.localName === \"ul\") {\n _isGoodContainer = _isGoodContainer.lastChild;\n }\n this._addImportGetCapResultLayer(layerDescription, lastIndex, _isGoodContainer);\n\n // puis on stoke la couche dans la liste pour faire le lien avec le DOM\n this._getCapResponseWMSLayers[lastIndex] = layerObj;\n }\n }\n }\n\n /**\n * this method is called on 'GPimportGetCapProposal' div click\n * and add corresponding layer to map\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n _onGetCapResponseLayerClick (e) {\n if (e.target && e.target.id) {\n var proposalId = parseInt(e.target.id.substr(23), 10);\n\n if (isNaN(proposalId)) {\n return;\n }\n\n var layerInfo;\n\n if (this._currentImportType === \"WMS\") {\n // récupération des informations liées à la couche\n layerInfo = this._getCapResponseWMSLayers[proposalId];\n // ajout de la couche à la carte\n this._addGetCapWMSLayer(layerInfo);\n } else if (this._currentImportType === \"WMTS\") {\n // récupération des informations liées à la couche\n layerInfo = this._getCapResponseWMTSLayers[proposalId];\n // ajout de la couche à la carte\n this._addGetCapWMTSLayer(layerInfo);\n }\n }\n }\n\n // ################################################################### //\n // ######### create WMS layer from getCapabilities response ######### //\n // ################################################################### //\n\n /**\n * this method is called by this._onGetCapResponseLayerClick\n * and add WMS layer to map using parameters from getCapabilities response\n *\n * @param {Object} layerInfo - layer information from getCapabilities response\n * @private\n */\n _addGetCapWMSLayer (layerInfo) {\n var map = this.getMap();\n if (!map) {\n logger.warn(\"[ol.control.LayerImport] _addGetCapWMSLayer error : map is not defined\");\n return;\n }\n if (!layerInfo) {\n logger.warn(\"[ol.control.LayerImport] _addGetCapWMSLayer error : layerInfo is not defined\");\n return;\n }\n\n // récupération de la projection de la carte\n var mapProjCode = this._getMapProjectionCode();\n\n var wmsSourceOptions = {};\n\n // Récupération de l'url\n var getMapUrl = this._getWMSLayerGetMapUrl();\n // on essaie de récupérer l'url du service dans le getCapbilities\n if (getMapUrl) {\n wmsSourceOptions.url = getMapUrl;\n } else {\n // sinon, on récupère l'url du getCapabilities, à laquelle on enlève éventuellement les paramètres\n var questionMarkIndex = this._getCapRequestUrl.indexOf(\"?\");\n if (questionMarkIndex !== -1) {\n wmsSourceOptions.url = this._getCapRequestUrl.substring(0, questionMarkIndex);\n } else {\n wmsSourceOptions.url = this._getCapRequestUrl;\n }\n }\n\n wmsSourceOptions.params = {};\n if (layerInfo.Name) {\n wmsSourceOptions.params[\"LAYERS\"] = layerInfo.Name;\n } else {\n logger.warn(\"[ol.control.LayerImport] unable to add wms layer : mandatory layer 'name' parameter cannot be found\", layerInfo);\n return;\n }\n wmsSourceOptions.params[\"SERVICE\"] = \"WMS\";\n if (this._getCapResponseWMS.version) {\n wmsSourceOptions.params[\"VERSION\"] = this._getCapResponseWMS.version;\n }\n\n // on a déjà vérifié que la couche peut être reprojetée,\n // on vérifie que la couche ait une projection compatible avec celle de la carte\n // ou soit connue par proj4js\n var projection = layerInfo._projection;\n if (!projection) {\n logger.warn(\"[ol.control.LayerImport] wms layer cannot be added to map : unknown projection\");\n return;\n } else if (projection !== mapProjCode) {\n // si la projection de la carte n'est pas disponible pour cette couche,\n // on spécifie une projection (qui doit avoir été définie dans proj4js) pour reprojection par Openlayers\n wmsSourceOptions.projection = projection;\n }\n\n // récupération du premier style disponible (pas d'info default?)\n var legend;\n if (layerInfo.Style && Array.isArray(layerInfo.Style)) {\n var style = layerInfo.Style[0];\n wmsSourceOptions.params[\"STYLES\"] = style.Name;\n if (style.LegendURL && Array.isArray(style.LegendURL) && style.LegendURL.length !== 0) {\n legend = style.LegendURL[0].OnlineResource;\n }\n }\n\n // Création de la source (tester un try catch ?)\n var wmsSource = new TileWMSSource(wmsSourceOptions);\n // ajout des informations pour le layerSwitcher (titre, description, legendes, metadata) ou originators\n this._getWMSLayerInfoForLayerSwitcher(layerInfo, legend, wmsSource);\n\n var layerTileOptions = {};\n layerTileOptions[\"source\"] = wmsSource;\n // récupération des résolutions min et max de la layer à partir des dénominateurs d'échelle\n this._getWMSLayerMinMaxResolution(layerInfo, mapProjCode, layerTileOptions);\n // récupération de l'étendue (bbox)\n this._getWMSLayerExtent(layerInfo, mapProjCode, layerTileOptions);\n\n // création de la couche à partir de la source\n var wmsLayer = new TileLayer(layerTileOptions);\n wmsLayer.setExtent(layerTileOptions.extent);\n // on rajoute le champ gpResultLayerId permettant d'identifier une couche crée par le composant. (pour layerSwitcher par ex)\n wmsLayer.gpResultLayerId = \"layerimport:WMS\";\n // on rajoute le champ gpGFIparams permettant d'identifier si la couche est queryable, et de transmettre les formats reconnus par GetFeatureInfo\n if (layerInfo.queryable) {\n wmsLayer.gpGFIparams = {\n queryable : true\n };\n // récupération des différents formats reconnus par le GetFeatureInfo\n if (this._getCapResponseWMS && this._getCapResponseWMS.Capability && this._getCapResponseWMS.Capability.Request && this._getCapResponseWMS.Capability.Request.GetFeatureInfo && this._getCapResponseWMS.Capability.Request.GetFeatureInfo.Format && Array.isArray(this._getCapResponseWMS.Capability.Request.GetFeatureInfo.Format)) {\n wmsLayer.gpGFIparams.formats = this._getCapResponseWMS.Capability.Request.GetFeatureInfo.Format;\n }\n }\n\n map.addLayer(wmsLayer);\n\n // zoom sur l'étendue des entités récupérées (si possible)\n if (map.getView() && map.getSize() && wmsLayer.getExtent) {\n var sourceExtent = wmsLayer.getExtent();\n if (sourceExtent && sourceExtent[0] !== Infinity) {\n map.getView().fit(sourceExtent, map.getSize());\n }\n }\n }\n\n /**\n * this method is called by this._addGetCapWMSLayer\n * and gets service getMap request url\n *\n * @return {String} getmapurl - service getMap request url\n * @private\n */\n _getWMSLayerGetMapUrl () {\n var getmapurl;\n if (this._getCapResponseWMS && this._getCapResponseWMS.Capability && this._getCapResponseWMS.Capability.Request && this._getCapResponseWMS.Capability.Request.GetMap) {\n var getmap = this._getCapResponseWMS.Capability.Request.GetMap;\n if (getmap.DCPType && Array.isArray(getmap.DCPType) && getmap.DCPType.length !== 0) {\n var url = getmap.DCPType[0];\n if (url && url.HTTP && url.HTTP.Get) {\n getmapurl = url.HTTP.Get.OnlineResource;\n }\n }\n }\n return getmapurl;\n }\n\n /**\n * this method is called by this._addGetCapWMSLayer\n * and gets a projection both available for a given layer and already defined in proj4js (ol.proj)\n * (openlayers raster reprojection will be then able to reproject layer in map projection)\n *\n * @param {Object} layerInfo - layer information from getCapabilities response\n * @param {String} mapProjCode - map projection code (e.g. \"EPSG:4326\")\n * @return {String} projection - ol.proj projection alias (e.g. \"EPSG:4326\")\n * @private\n */\n _getWMSLayerProjection (layerInfo, mapProjCode) {\n var projection;\n\n if (!layerInfo || typeof layerInfo !== \"object\") {\n logger.warn(\"missing layer information (from getCapabilities)\");\n return;\n }\n\n // on va parcourir la liste des CRS disponibles pour la couche\n // si on trouve la projection de la carte : c'est parfait\n // si on trouve une projection qui est connue par ol.proj : Openlayers gère la reprojection\n var CRSList = layerInfo.CRS;\n if (Array.isArray(CRSList)) {\n // on check si la projection de la carte est dans le tableau de projections issues du getCap,\n // si oui, on la prend\n if (CRSList.includes(mapProjCode)) {\n projection = mapProjCode;\n return projection;\n }\n var layerCRS, i;\n // si aucune projection du getCap pour la couche n'est égale à celle de la carte\n // on retourne la première projection listée dans le getCap qui est gérée par openLayers\n for (i = 0; i < CRSList.length; i++) {\n layerCRS = CRSList[i];\n if (layerCRS && typeof layerCRS === \"string\") {\n if (olGetProj(layerCRS) || olGetProj(layerCRS.toUpperCase())) {\n projection = layerCRS;\n // on renvoie la première projection gérée par openLayers\n return projection;\n }\n }\n }\n }\n // si la liste des projections n'est pas un tableau ou si aucune projection n'est égale à celle de la carte ou si aucune n'est gérée par openLayers\n // on return undefined (comportement d'origine de la fonction)\n return projection;\n }\n\n /**\n * this method is called by this._addGetCapWMSLayer\n * and sets minResolution and maxResolution parameters for WMS layer (if available in getCapabilities response)\n *\n * @param {Object} layerInfo - layer information from getCapabilities response\n * @param {String} mapProjCode - map projection code (e.g. \"EPSG:4326\")\n * @param {Object} layerTileOptions - options for ol.layer.Tile (to be filled)\n * @private\n */\n _getWMSLayerMinMaxResolution (layerInfo, mapProjCode, layerTileOptions) {\n // récupération des résolutions min et max à partir des dénominateurs d'échelle\n var mapUnits = olGetProj(mapProjCode).getUnits();\n if (mapUnits === \"m\") {\n // info : 1 pixel = 0.00028 m\n if (layerInfo.MinScaleDenominator) {\n layerTileOptions.minResolution = layerInfo.MinScaleDenominator * 0.00028;\n }\n if (layerInfo.MaxScaleDenominator) {\n layerTileOptions.maxResolution = layerInfo.MaxScaleDenominator * 0.00028;\n }\n } else if (mapUnits === \"degrees\") {\n // info : 6378137 * 2 * pi / 360 = rayon de la terre (ellipsoide WGS84)\n var cste = 0.00028 * 180 / (Math.PI * 6378137);\n if (layerInfo.MinScaleDenominator) {\n layerTileOptions.minResolution = layerInfo.MinScaleDenominator * cste;\n }\n if (layerInfo.MaxScaleDenominator) {\n layerTileOptions.maxResolution = layerInfo.MaxScaleDenominator * cste;\n }\n }\n }\n\n /**\n * this method is called by this._addGetCapWMSLayer\n * and sets extent for WMS layer in map projection (if available in getCapabilities response)\n *\n * @param {Object} layerInfo - layer information from getCapabilities response\n * @param {String} mapProjCode - map projection code (e.g. \"EPSG:4326\")\n * @param {Object} layerTileOptions - options for ol.layer.Tile (to be filled)\n * @private\n */\n _getWMSLayerExtent (layerInfo, mapProjCode, layerTileOptions) {\n if (!layerInfo) {\n logger.warn(\"[ol.control.LayerImport] _getWMSLayerExtent error : layerInfo is not defined\");\n return;\n }\n\n // récupération des 2 propriétés qui peuvent spécifier l'étendue (bbox) selon les specs OGC WMS 1.3.0 :\n // 1. layerInfo.EX_GeographicBoundingBox est un tableau de type [westBoundLongitude, southBoundLatitude, eastBoundLongitude, northBoundLatitude] en WGS84\n var exGeographicBoundingBox = layerInfo[\"EX_GeographicBoundingBox\"];\n // 2. layerInfo.BoundingBox est un tableau dont chaque élément est un objet (balise bbox) avec les propriétés suivantes :\n // crs (String) et extent (tableau de type [minx, miny, maxx, maxy])\n var boundingBox = layerInfo.BoundingBox;\n\n if (exGeographicBoundingBox && Array.isArray(exGeographicBoundingBox)) {\n if (mapProjCode === \"EPSG:4326\") {\n // si la projection de la carte est la même que celle de l'extent (EPSG:4326), on la passe telle quelle\n layerTileOptions.extent = exGeographicBoundingBox;\n } else {\n layerTileOptions.extent = olTransformExtentProj(exGeographicBoundingBox, \"EPSG:4326\", mapProjCode);\n }\n\n // si jamais EX_GeographicBoundingBox n'est pas ou est mal renseigné, on essaie de récupérer via le paramètre BoundingBox\n } else if (boundingBox && Array.isArray(boundingBox)) {\n var crs;\n var extent;\n for (var i = 0; i < boundingBox.length; i++) { // on peut avoir plusieurs BoundingBox\n crs = boundingBox[i].crs;\n extent = boundingBox[i].extent;\n if (crs) {\n if (crs === mapProjCode) {\n // si la bbox est dans la projection de la carte, on la passe telle quelle\n layerTileOptions.extent = extent;\n break;\n } else {\n if (typeof crs === \"string\") {\n var olProj = olGetProj(crs) ? olGetProj(crs) : olGetProj(crs.toUpperCase());\n // if ( olGetProj(crs) || olGetProj(crs.toUpperCase()) ) {\n if (olProj) {\n // si la bbox est dans une projection connue, on va la reprojeter\n // tout d'abord, on gère le cas des systèmes EPSG géographiques : inversion des axes x et y\n if (olProj.getUnits() === \"degrees\" && crs.toUpperCase().indexOf(\"EPSG\") === 0) {\n // le tableau extent est inversé, on a besoin de : [miny, minx, maxx, maxy]\n var reversedExtent = [extent[1], extent[0], extent[3], extent[2]];\n layerTileOptions.extent = olTransformExtentProj(reversedExtent, olProj, mapProjCode);\n } else {\n // reprojection dans la projection de la carte\n layerTileOptions.extent = olTransformExtentProj(extent, olProj, mapProjCode);\n }\n break;\n }\n }\n }\n }\n }\n }\n }\n\n /**\n * this method is called by this._addGetCapWMSLayer\n * and sets more information about layer (legends, title, description, metadata, originators) for layerSwitcher or attributions controls\n *\n * @param {Object} layerInfo - layer information from getCapabilities response\n * @param {String} legend - legend url\n * @param {Object} wmsSource - options for ol.source.TileWMS (to be filled)\n * @private\n */\n _getWMSLayerInfoForLayerSwitcher (layerInfo, legend, wmsSource) {\n // ajout des informations pour le layerSwitcher (titre, description)\n if (layerInfo.Title) {\n wmsSource._title = layerInfo.Title;\n wmsSource._description = layerInfo.Abstract ? layerInfo.Abstract : layerInfo.Title;\n } else {\n wmsSource._title = layerInfo.Name;\n wmsSource._description = layerInfo.Abstract ? layerInfo.Abstract : layerInfo.Name;\n }\n // ajout de légende si on en a trouvé\n if (legend) {\n wmsSource._legends = [{\n url : legend\n }];\n }\n // ajout d'éventuelles métadonnées\n if (layerInfo.MetadataURL && Array.isArray(layerInfo.MetadataURL)) {\n wmsSource._metadata = [];\n for (var i = 0; i < layerInfo.MetadataURL.length; i++) {\n var metadata = layerInfo.MetadataURL[i].OnlineResource;\n if (metadata) {\n wmsSource._metadata.push({\n url : metadata\n });\n }\n }\n }\n // ajout d'éventuelles attributions / originators\n if (layerInfo.Attribution) {\n var attribution = layerInfo.Attribution;\n wmsSource._originators = {};\n if (attribution.OnlineResource) {\n wmsSource._originators.url = attribution.OnlineResource;\n }\n if (attribution.Title) {\n wmsSource._originators.name = wmsSource._originators.attribution = attribution.Title;\n }\n if (attribution.LogoURL && attribution.LogoURL.OnlineResource) {\n wmsSource._originators.logo = attribution.LogoURL.OnlineResource;\n }\n }\n }\n\n // ################################################################### //\n // ######### create WMTS layer from getCapabilities response ######### //\n // ################################################################### //\n\n /**\n * this method is called by this._onGetCapResponseLayerClick\n * and add WMTS layer to map using parameters from getCapabilities response\n *\n * @param {Object} layerInfo - layer information from getCapabilities response\n * @private\n */\n _addGetCapWMTSLayer (layerInfo) {\n if (!layerInfo || !layerInfo.Identifier) {\n logger.warn(\"[ol.control.LayerImport] layer information not found in getCapabilities response for layer \");\n return;\n }\n\n var map = this.getMap();\n if (!map) {\n return;\n }\n\n var wmtsSourceOptions = {};\n wmtsSourceOptions.layer = layerInfo.Identifier;\n // service version\n if (this._getCapResponseWMTS.version) {\n wmtsSourceOptions.version = this._getCapResponseWMTS.version;\n }\n // Récupération de l'url\n var getMapUrl = this._getWMTSLayerGetTileUrl();\n // on essaie de récupérer l'url du service dans le getCapbilities\n if (getMapUrl) {\n wmtsSourceOptions.url = getMapUrl;\n } else {\n // sinon, on récupère l'url du getCapabilities, à laquelle on enlève éventuellement les paramètres\n var questionMarkIndex = this._getCapRequestUrl.indexOf(\"?\");\n if (questionMarkIndex !== -1) {\n wmtsSourceOptions.url = this._getCapRequestUrl.substring(0, questionMarkIndex);\n } else {\n wmtsSourceOptions.url = this._getCapRequestUrl;\n }\n }\n\n // Récupération des informations de la pyramide (tileGrid information) : matrixIds, resolutions, origin et projection\n var tmsOptions = this._getTMSParams(layerInfo);\n wmtsSourceOptions.matrixSet = tmsOptions.tms;\n wmtsSourceOptions.projection = tmsOptions.projCode;\n wmtsSourceOptions.tileGrid = new WMTSTileGrid({\n resolutions : tmsOptions.resolutions,\n matrixIds : tmsOptions.matrixIds,\n origin : tmsOptions.origin\n });\n\n // Récupération du style par défaut\n var defaultStyle;\n var legend;\n if (layerInfo.Style && Array.isArray(layerInfo.Style)) {\n var style;\n for (var s = 0; s < layerInfo.Style.length; s++) {\n style = layerInfo.Style[s];\n // on récupère le style\n defaultStyle = style.Identifier;\n if (style.isDefault) {\n // si c'est celui par défaut, on le garde (on ne boucle plus sur les autres styles)\n break;\n }\n // et une éventuelle légende\n if (style.LegendURL && Array.isArray(style.LegendURL) && style.LegendURL.length !== 0) {\n legend = style.LegendURL[0].href;\n }\n }\n }\n if (defaultStyle == null) {\n logger.warn(\"[ol.control.LayerImport] style information not found in getCapabilities response for layer \" + layerInfo.Identifier);\n }\n wmtsSourceOptions.style = defaultStyle;\n\n // Récupération du format (le premier trouvé)\n var format;\n if (layerInfo.Format && Array.isArray(layerInfo.Format)) {\n format = layerInfo.Format[0];\n }\n if (format == null) {\n logger.warn(\"[ol.control.LayerImport] format information not found in getCapabilities response for layer \" + layerInfo.Identifier);\n }\n wmtsSourceOptions.format = format;\n\n // Création de la source (tester un try catch ?)\n var wmtsSource = new WMTSSource(wmtsSourceOptions);\n\n // ajout des informations pour le layerSwitcher (titre, description)\n if (layerInfo.Title) {\n wmtsSource._title = layerInfo.Title;\n wmtsSource._description = layerInfo.Abstract ? layerInfo.Abstract : layerInfo.Title;\n } else {\n wmtsSource._title = layerInfo.Identifier;\n wmtsSource._description = layerInfo.Abstract ? layerInfo.Abstract : layerInfo.Identifier;\n }\n // ajout d'une éventuelle légende\n if (legend) {\n wmtsSource._legends = [{\n url : legend\n }];\n }\n\n var layerTileOptions = {};\n layerTileOptions.source = wmtsSource;\n // récupération de l'étendue (bbox)\n layerTileOptions.extent = this._getWMTSLayerExtent(layerInfo);\n var wmtsLayer;\n try {\n wmtsLayer = new TileLayer(layerTileOptions);\n wmtsLayer.setExtent(layerTileOptions.extent);\n } catch (e) {\n logger.warn(\"[ol.control.LayerImport] an error occured while trying to create ol.layer.Tile from getCapabilities information. error : \", e);\n return;\n }\n // on rajoute le champ gpResultLayerId permettant d'identifier une couche crée par le composant. (pour layerSwitcher par ex)\n wmtsLayer.gpResultLayerId = \"layerimport:WMTS\";\n\n map.addLayer(wmtsLayer);\n\n // zoom sur l'étendue des entités récupérées (si possible)\n if (map.getView() && map.getSize() && wmtsLayer.getExtent) {\n var sourceExtent = wmtsLayer.getExtent();\n if (sourceExtent && sourceExtent[0] !== Infinity) {\n map.getView().fit(sourceExtent, map.getSize());\n }\n }\n }\n\n /**\n * this method is called by this._addGetCapWMTSLayer\n * and gets service getTile request url\n *\n * @return {String} gettileurl - service getTile request url\n * @private\n */\n _getWMTSLayerGetTileUrl () {\n var gettileurl;\n if (this._getCapResponseWMTS && this._getCapResponseWMTS.OperationsMetadata && this._getCapResponseWMTS.OperationsMetadata.GetTile) {\n var gettile = this._getCapResponseWMTS.OperationsMetadata.GetTile;\n if (gettile.DCP && gettile.DCP.HTTP && gettile.DCP.HTTP.Get && Array.isArray(gettile.DCP.HTTP.Get) && gettile.DCP.HTTP.Get.length !== 0) {\n gettileurl = gettile.DCP.HTTP.Get[0].href;\n }\n }\n return gettileurl;\n }\n\n /**\n * this method is called by this._displayGetCapResponseLayers\n * and gets layer TileMatrixSet projection if defined in proj4js\n *\n * @param {Object} layerInfo - layer information from getCapabilities response\n * @param {Object} getCapResponseWMTS - whole getCapabilities response\n * @return {String} projection - ol.proj projection alias (e.g. \"EPSG:4326\")\n * @private\n */\n _getWMTSLayerProjection (layerInfo, getCapResponseWMTS) {\n var projection;\n\n if (!layerInfo || typeof layerInfo !== \"object\") {\n logger.warn(\"missing layer information (from getCapabilities)\");\n return;\n }\n\n if (!getCapResponseWMTS || typeof getCapResponseWMTS !== \"object\") {\n logger.warn(\"missing getCapabilities response\");\n return;\n }\n\n if (layerInfo.TileMatrixSetLink && Array.isArray(layerInfo.TileMatrixSetLink)) {\n var tms = layerInfo.TileMatrixSetLink[0].TileMatrixSet;\n var crs;\n if (getCapResponseWMTS.Contents && Array.isArray(getCapResponseWMTS.Contents.TileMatrixSet)) {\n var tileMatrixSets = getCapResponseWMTS.Contents.TileMatrixSet;\n for (var i = 0; i < tileMatrixSets.length; i++) {\n if (tileMatrixSets[i].Identifier === tms && tileMatrixSets[i].TileMatrix) {\n // on a trouvé le TMS correspondant\n var tileMatrixSet = tileMatrixSets[i];\n crs = tileMatrixSet.SupportedCRS;\n if (crs && typeof crs === \"string\") {\n if (olGetProj(crs) || olGetProj(crs.toUpperCase())) {\n projection = crs;\n }\n }\n break;\n }\n }\n }\n };\n\n return projection;\n }\n\n /**\n * this method is called by this._addGetCapWMTSLayer\n * and get ol.tileGrid.WMTS parameters using getCapabilities response\n *\n * @param {Object} layerInfo - layer information from getCapabilities response\n * @return {Object} tmsOptions - ol.tileGrid.WMTS options\n * @private\n */\n _getTMSParams (layerInfo) {\n var tmsOptions = {};\n\n var matrixIds = [];\n var resolutions = [];\n var origin = [];\n var tms;\n var projCode;\n var projection;\n\n // TODO : recup TOUS les autres params d'un tileGrid ! (tileSize, width...)\n\n var map = this.getMap();\n if (!map) {\n return;\n }\n\n // Récupération des informations de la pyramide (tileGrid information) : matrixIds, resolutions, origin\n if (layerInfo.TileMatrixSetLink && Array.isArray(layerInfo.TileMatrixSetLink)) {\n tms = layerInfo.TileMatrixSetLink[0].TileMatrixSet;\n\n if (this._getCapResponseWMTS.Contents && Array.isArray(this._getCapResponseWMTS.Contents.TileMatrixSet)) {\n var tileMatrixSets = this._getCapResponseWMTS.Contents.TileMatrixSet;\n for (var i = 0; i < tileMatrixSets.length; i++) {\n if (tileMatrixSets[i].Identifier === tms && tileMatrixSets[i].TileMatrix) {\n // on a trouvé le TMS correspondant\n var tileMatrixSet = tileMatrixSets[i];\n\n var tilematrix;\n var id;\n var scaledenominator;\n var resolution;\n var units;\n\n if (tileMatrixSet.SupportedCRS) {\n projCode = tileMatrixSet.SupportedCRS;\n projection = olGetProj(projCode);\n }\n if (projection && projection.getUnits) {\n units = projection.getUnits();\n }\n\n if (Array.isArray(tileMatrixSet.TileMatrix)) {\n for (var j = 0; j < tileMatrixSet.TileMatrix.length; j++) {\n // construction du tableau des matrixIds\n tilematrix = tileMatrixSet.TileMatrix[j];\n if (tilematrix.Identifier != null) {\n id = parseInt(tilematrix.Identifier, 10);\n matrixIds.push(id);\n }\n\n // construction du tableau des résolutions, calculées à partir des dénominateurs d'échelle (scaledenominator)\n scaledenominator = tilematrix.ScaleDenominator;\n // calcul des résolutions selon la projection du TMS : selon si on a des coordonnées planes ou géographiques\n if (units === \"degrees\") {\n // info : 6378137 * 2 * pi / 360 = rayon de la terre (ellipsoide WGS84)\n resolution = scaledenominator * 0.00028 * 180 / (Math.PI * 6378137);\n } else {\n // info : 1 pixel = 0.00028 m\n resolution = scaledenominator * 0.00028;\n }\n resolutions.push(resolution);\n\n origin = tilematrix.TopLeftCorner;\n }\n }\n\n // tri des résolutions par ordre décroissant\n if (resolutions.sort !== undefined) {\n resolutions.sort(\n function (x, y) {\n return y - x;\n }\n );\n }\n // tri des identifiants des niveaux de pyramide (matrixIds) par ordre croissant\n if (matrixIds.sort !== undefined) {\n matrixIds.sort(\n function (x, y) {\n return x - y;\n }\n );\n }\n }\n }\n } else {\n logger.warn(\"[ol.control.LayerImport] TileMatrixSet data not found in getCapabilities response for layer \" + layerInfo.Identifier);\n }\n } else {\n return;\n }\n\n tmsOptions.tms = tms;\n tmsOptions.projCode = projCode;\n tmsOptions.matrixIds = matrixIds;\n tmsOptions.resolutions = resolutions;\n tmsOptions.origin = origin;\n\n return tmsOptions;\n }\n\n /**\n * this method is called by this._addGetCapWMTSLayer\n * and sets extent for WMTS layer in map projection (if available in getCapabilities response)\n *\n * @param {Object} layerInfo - layer information from getCapabilities response\n * @return {Array} extent - layer extent\n * @private\n */\n _getWMTSLayerExtent (layerInfo) {\n var extent;\n var mapProjCode = this._getMapProjectionCode();\n\n // récupération de l'étendue (bbox)\n if (layerInfo.WGS84BoundingBox && Array.isArray(layerInfo.WGS84BoundingBox)) {\n extent = olTransformExtentProj(layerInfo.WGS84BoundingBox, \"EPSG:4326\", mapProjCode);\n }\n\n return extent;\n }\n\n // ################################################################### //\n // ################################ utils ############################ //\n // ################################################################### //\n\n /**\n * gets control map projection code\n *\n * @return {String} mapProjCode - control map projection code (e.g. \"EPSG:3857\")\n * @private\n */\n _getMapProjectionCode () {\n var map = this.getMap();\n if (!map || !map.getView || !map.getView().getProjection) {\n logger.warn(\"unable to get layerimport's map\");\n return;\n }\n var mapProjCode = map.getView().getProjection().getCode();\n return mapProjCode;\n }\n\n // ################################################################### //\n // ################################ clean ############################ //\n // ################################################################### //\n\n /**\n * this method displays waiting container and sets a timeout\n *\n * @private\n */\n _displayWaitingContainer () {\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerVisible gpf-waiting gpf-waiting--visible\";\n this._waiting = true;\n\n // mise en place d'un timeout pour réinitialiser le panel (cacher la patience)\n // si on est toujours en attente (si la requête est bloquée par exemple)\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n var context = this;\n this._timer = setTimeout(function () {\n if (context._waiting === true) {\n context._hideWaitingContainer();\n } else {\n if (context._timer) {\n clearTimeout(context._timer);\n }\n }\n }, 16000);\n }\n\n /**\n * this method hides waiting container and clears timeout\n *\n * @private\n */\n _hideWaitingContainer () {\n if (this._waiting) {\n this._waitingContainer.className = \"GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden\";\n this._waiting = false;\n clearTimeout(this._timer);\n this._timer = null;\n }\n }\n\n _displayFormContainer () {\n this._formContainer.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n this._formContainer.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n this._importPanelTitle.innerHTML = \"Import de données\";\n // this._importPanelHeader.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n // this._importPanelHeader.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n }\n _hideFormContainer () {\n this._formContainer.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n this._formContainer.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n // this._importPanelHeader.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n // this._importPanelHeader.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n /**\n * this method empties getCap results list (DOM element)\n *\n * @private\n */\n cleanGetCapResultsList () {\n this._hasGetCapResults = false;\n this._getCapRequestUrl = null;\n this._getCapResponseWMS = null;\n this._getCapResponseWMTS = null;\n this._getCapResponseWMSLayers = null;\n this._getCapResponseWMTSLayers = null;\n if (this._getCapResultsListContainer) {\n while (this._getCapResultsListContainer.firstChild) {\n this._getCapResultsListContainer.removeChild(this._getCapResultsListContainer.firstChild);\n }\n }\n }\n\n /**\n * this method empties MapBox results list (DOM element)\n *\n * @private\n */\n cleanMapBoxResultsList () {\n this._hasMapBoxResults = false;\n if (this._mapBoxResultsListContainer) {\n while (this._mapBoxResultsListContainer.firstChild) {\n this._mapBoxResultsListContainer.removeChild(this._mapBoxResultsListContainer.firstChild);\n }\n }\n }\n\n /**\n * this method empties MapBox results list (DOM element)\n *\n * @param {*} id - DOM id\n * @private\n */\n cleanMapBoxResults (id) {\n this._hasMapBoxResults = false;\n if (this._mapBoxResultsListContainer) {\n var nodes = this._mapBoxResultsListContainer.childNodes;\n for (let index = 0; index < nodes.length; index++) {\n const element = nodes[index];\n if (element.id === \"GPEditorMapBoxContainer_ID_\" + id) {\n element.remove();\n }\n }\n }\n }\n\n};\n\n// on récupère les méthodes de la classe commune LayerImport\nObject.assign(LayerImport.prototype, LayerImportDOM);\nObject.assign(LayerImport.prototype, Widget);\n\nexport default LayerImport;\n\n// Expose LayerImport as ol.control.LayerImport (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.LayerImport = LayerImport;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.control.Attribution;","// import CSS\nimport \"../../CSS/Controls/Attribution/GPFattribution.css\";\n// import \"../../CSS/Controls/Attribution/GPFattributionStyle.css\";\n// import OpenLayers\nimport Attribution from \"ol/control/Attribution\";\nimport { transformExtent as olTransformExtentProj } from \"ol/proj\";\n// import local\nimport LayerUtils from \"../../Utils/LayerUtils\";\nimport Logger from \"../../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"geoportalattribution\");\n\n/**\n * @classdesc\n * OpenLayers Control to manage Originators for layer resources\n *\n * @constructor\n * @extends {ol.control.Attribution}\n * @alias ol.control.GeoportalAttribution\n * @type {ol.control.GeoportalAttribution}\n * @param {Object} options - ol.control.Attribution options (see {@link http://openlayers.org/en/latest/apidoc/ol.control.Attribution.html ol.Control.Attribution})\n * @fires attributions:update\n * @example\n * var attribution = new ol.control.GeoportalAttribution({\n * collapsed : false\n * });\n * map.addControl(attribution);\n * // listeners for attributions update :\n * attribution.on(\"attributions:update\", function (e) {});\n */\nvar GeoportalAttribution = class GeoportalAttribution extends Attribution {\n\n /**\n * See {@link ol.control.GeoportalAttribution}\n * @module GeoportalAttribution\n * @alias module:~controls/GeoportalAttribution\n * @param {*} options - options\n * @example\n * import GeoportalAttribution from \"gpf-ext-ol/controls/GeoportalAttribution\"\n * ou \n * import { GeoportalAttribution } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // Attributions are not collapsible for ol/source/OSM except if ...\n options.collapsible = true;\n options.collapsed = true;\n\n super(options);\n\n if (!(this instanceof GeoportalAttribution)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n\n return this;\n }\n\n /**\n * Overload setMap function, that enables to catch map events,\n * such as movend events.\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map != null) {\n // Remove default ol.control.Attribution\n var ctrls = map.getControls();\n ctrls.forEach(\n (ctrl) => {\n if (ctrl instanceof GeoportalAttribution) {\n return;\n }\n if (ctrl) {\n var classList = ctrl.element.classList;\n for (var i = 0; i < classList.length; i++) {\n if (classList[i] === \"ol-attribution\") {\n ctrls.remove(ctrl);\n break;\n }\n }\n }\n }\n );\n\n // on récupère les attributions des couches déjà ajoutées à la carte.\n this._updateAttributions(map);\n\n // At every map movement, layers attributions have to be updated,\n // according to map and originators zoom and extent.\n map.on(\n \"moveend\",\n () => {\n this._updateAttributions(map);\n }\n );\n map.getLayers().on(\n \"add\",\n () => {\n this._updateAttributions(map);\n }\n );\n map.getLayers().on(\n \"remove\",\n () => {\n this._updateAttributions(map);\n }\n );\n }\n\n super.setMap(map);\n }\n\n /**\n * Update map layers attributions\n *\n * @param {ol.Map} map - Map.\n * @private\n */\n _updateAttributions (map) {\n // get map parameters\n var mapAttributions = {};\n\n var view = map.getView();\n // extent, then convert to geographical coordinates\n var extent = view.calculateExtent(map.getSize());\n var mapProjection = view.getProjection().getCode();\n var geoExtent = olTransformExtentProj(extent, mapProjection, \"EPSG:4326\");\n // transform extent from [minx, miny, maxx, maxy] to [maxy, minx, miny, maxx]\n var standardExtent = [geoExtent[3], geoExtent[0], geoExtent[1], geoExtent[2]];\n // zoom\n var zoom = view.getZoom();\n // layers\n var layers = map.getLayers().getArray();\n\n // info : This option suppresses warnings about functions inside of loops.\n /* jshint loopfunc: true */\n\n // loop on layers to get their originators, if there is at least one originator, and if layer is visible.\n for (var i = 0; i < layers.length; i++) {\n // distinguish case of ol.layer.Group (which is made up of layers with their own source)\n // and other ol.layer (with their own source)\n if (layers[i].getSource) {\n // single ol.layer\n this._updateLayerAttributions(layers[i], mapAttributions, standardExtent, mapProjection, zoom);\n } else if (layers[i].getLayers) {\n // ol.layer.Group\n var lyrs = layers[i].getLayers();\n lyrs.forEach(\n (lyr) => {\n if (lyr.getSource) {\n this._updateLayerAttributions(lyr, mapAttributions, standardExtent, mapProjection, zoom);\n } else {\n logger.log(\"cannot find layer source in layergroup \", layers[i]);\n }\n }\n );\n }\n }\n }\n\n /**\n * Update a layer attributions\n *\n * @param {ol.layer} layer - layer\n * @param {Object} mapAttributions - object recensing attributions already added, to prevent displaying twice the same producer\n * @param {Array} mapExtent - map current extent\n * @param {String} mapCrs - map current crs\n * @param {Number} mapZoom - map current zoom\n * @private\n */\n _updateLayerAttributions (layer, mapAttributions, mapExtent, mapCrs, mapZoom) {\n if (!layer) {\n logger.trace(\"layer is null !?\");\n return;\n }\n\n var src = layer.getSource();\n if (!src) {\n logger.trace(\"source is not yet loaded !\");\n return;\n }\n\n if (!mapAttributions) {\n mapAttributions = {};\n }\n\n var attributions = [];\n\n var visibility = layer.getVisible();\n var originators = src._originators;\n\n // info : clean previous attributions ONLY for Geoportal Layers (when src._originators is defined)\n if (typeof originators !== \"undefined\") {\n src.setAttributions(); // clean\n }\n\n if (originators && visibility) {\n // get layer's attributions array\n var layerAttributions = LayerUtils.getAttributions({\n extent : mapExtent,\n crs : mapCrs,\n zoom : mapZoom,\n visibility : visibility,\n originators : originators\n });\n\n for (var j = 0; j < layerAttributions.length; j++) {\n var attributionj = layerAttributions[j];\n // check that this attribution hasn't been added yet for another layer\n if (!mapAttributions.hasOwnProperty(attributionj)) {\n // add attribution html\n attributions.push(attributionj);\n\n // add attribution to mapAttributions, to manage all layers attributions\n mapAttributions[attributionj] = true;\n }\n };\n\n // update source attribution\n if (attributions.length !== 0) {\n src.setAttributions(attributions);\n /**\n * event triggered when the attributions are updated\n *\n * @event attributions:update\n * @type Object\n * @property {Array} attributions - list of attributions\n */\n this.dispatchEvent({\n type : \"attributions:update\",\n attributions : attributions\n });\n }\n }\n }\n\n};\n\nexport default GeoportalAttribution;\n\n// Expose GeoportalAttribution as ol.control.GeoportalAttribution (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.GeoportalAttribution = GeoportalAttribution;\n}\n","var MeasureLengthDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPmeasureLength\");\n container.className = \"GPwidget gpf-widget gpf-widget-button\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show control\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createShowMeasureLengthPictoElement : function () {\n // contexte d'execution\n var context = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowMeasureLengthPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-length fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Mesurer une distance\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // gestionnaire d'evenement :\n // on ouvre le menu de saisie...\n // L'ouverture/Fermeture permet de faire le menage\n // (reinitialisation)\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowMeasureLengthClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowMeasureLengthClick(e);\n });\n }\n\n return button;\n }\n};\n\nexport default MeasureLengthDOM;\n","// import CSS\nimport \"../../CSS/Controls/Measures/GPFmeasureLength.css\";\n// import \"../../CSS/Controls/Measures/GPFmeasureLengthStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport { getDistance as olGetDistanceSphere } from \"ol/sphere\";\nimport { transform as olTransformProj } from \"ol/proj\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport ID from \"../../Utils/SelectorID\";\n// DOM\nimport MeasureLengthDOM from \"./MeasureLengthDOM\";\n// import local with ol dependencies\nimport MeasureToolBox from \"../ToolBoxMeasure/MeasureToolBox\";\nimport Measures from \"./Measures\";\n\n// Derived from OpenLayers measure example\n// http://openlayers.org/en/latest/examples/measure.html\n\nvar logger = Logger.getLogger(\"measurelength\");\n\n/**\n * @classdesc\n *\n * Length measurement Control. Allows users to draw a path on Openlayers map and have its length computed and displayed.\n *\n * @constructor\n * @alias ol.control.MeasureLength\n * @type {ol.control.MeasureLength}\n * @extends {ol.control.Control}\n * @param {Object} options - options for function call.\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {Boolean} [options.geodesic = true] - If true, length will be computed on the global sphere using the {@link https://openlayers.org/en/latest/apidoc/module-ol_sphere.html#haversineDistance ol.Sphere.haversineDistance()} function. Otherwise, length will be computed on the projected plane.\n * @param {String} [options.unit] - If not specified, the measure will be displayed in m until 999m, then in km. Values possible : m or km.\n * @param {Object} [options.styles = {}] - styles used when drawing. Specified with following properties.\n * @param {Object} [options.styles.pointer = {}] - Style for mouse pointer when drawing the path. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Image-ImageStyle.html ol.style.Image} subclass object.\n * @param {Object} [options.styles.start = {}] - Line Style when drawing. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Style-Style.htmll ol.style.Style} object.\n * @param {Object} [options.styles.finish = {}] - Line Style when finished drawing. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Style-Style.htmll ol.style.Style} object.\n * \n * @param {Object} [options.layerDescription = {}] - Layer informations to be displayed in LayerSwitcher widget (only if a LayerSwitcher is also added to the map)\n * @param {String} [options.layerDescription.title = \"Mesures de distance\"] - Layer title to be displayed in LayerSwitcher\n * @param {String} [options.layerDescription.description = \"Mes mesures\"] - Layer description to be displayed in LayerSwitcher\n * @example\n * var measureLength = new ol.control.MeasureLength({\n * geodesic : false\n * });\n */\nvar MeasureLength = class MeasureLength extends Control {\n\n constructor (options) {\n // options\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof MeasureLength)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n // Nom de la classe (heritage)\n this.CLASSNAME = \"MeasureLength\";\n\n // uuid\n this._uid = options.id || ID.generate();\n\n // container d'activation du controle\n this._pictoContainer = null;\n\n // initialisation du composant\n this._initialize(options);\n\n // creation du DOM container\n this._container = this._initializeContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n logger.trace(\"setMap()\");\n\n var className = this.CLASSNAME;\n\n // on fait le choix de ne pas activer les events sur la map à l'init de l'outil,\n // mais uniquement à son utilisation !\n if (map) {\n // var self = this;\n // map.on(\"click\", function (e) {\n // logger.trace(\"event on map with click!\");\n // self.onPointerMoveHandler(e);\n // });\n //\n // map.on(\"singleclick\", function (e) {\n // logger.trace(\"event on map with singleclick!\");\n // self.onPointerMoveHandler(e);\n // });\n //\n // map.on(\"pointermove\", function (e) {\n // logger.trace(\"event on map with pointermove!\");\n // self.onPointerMoveHandler(e);\n // });\n\n if (!this.options.target && !this.options.position) {\n MeasureToolBox.add(map, this);\n }\n } else {\n this.clean();\n }\n\n // sauvegarde de l'état de l'outil\n this.tools[className].push({\n instance : (map) ? this : null,\n active : false,\n map : (map) ? map.getTargetElement() : null\n });\n\n // contexte d'execution\n var context = typeof window !== \"undefined\" ? window : typeof self !== \"undefined\" ? self : null;\n if (context) {\n // Pour info\n // les objets de mesures ont du code partagé\n // (afin de gerer les interactions entre eux).\n // Dans un mode \"modules\", on partage cet objet (this.tools) via le contexte\n // d'execution (ex. avec window)\n if (!context.gpShareMeasures) {\n context.gpShareMeasures = {};\n }\n context.gpShareMeasures[className] = this.tools[className];\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this._container;\n }\n\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize measure control (called by constructor)\n *\n * @param {Object} options - options\n *\n * @private\n */\n _initialize (options) {\n logger.trace(\"call MeasureLength::_initialize() : \", options);\n\n // liste des options\n this.options = {};\n this.options.geodesic = (typeof options.geodesic !== \"undefined\") ? options.geodesic : true;\n this.options.unit = (typeof options.unit !== \"undefined\") ? options.unit : null;\n this.options.position = (typeof options.position !== \"undefined\") ? options.position : null;\n this.options.target = (typeof options.target !== \"undefined\") ? options.target : null;\n this.options.render = (typeof options.render !== \"undefined\") ? options.render : null;\n this.options.gutter = (typeof options.gutter !== \"undefined\") ? options.gutter : null;\n this.options.layerDescription = (typeof options.layerDescription !== \"undefined\") ? options.layerDescription : {\n title : \"Mesures de distance\",\n description : \"Mes mesures\"\n };\n\n // gestion des styles !\n this.createStylingMeasureInteraction(options.styles);\n }\n\n /**\n * initialize component container (DOM)\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initializeContainer () {\n logger.trace(\"call MeasureLength::_initializeContainer() : \", this._uid);\n\n var container = this._createMainContainerElement();\n\n var picto = this._pictoContainer = this._createShowMeasureLengthPictoElement();\n container.appendChild(picto);\n\n return container;\n }\n\n // ################################################################### //\n // ########################## methods ################################ //\n // ################################################################### //\n\n /**\n * Add all events on map\n *\n * @private\n */\n addMeasureEvents () {\n logger.trace(\"call MeasureLength::addMeasureEvents()\");\n\n var map = this.getMap();\n\n map.on(\"singleclick\", (e) => this.onPointerMoveHandler(e));\n map.on(\"pointermove\", (e) => this.onPointerMoveHandler(e));\n this.eventLayerRemove = map.getLayers().on(\"remove\", (e) => {\n if (e.element === this.measureVector) { // FIXME object comparison\n this.clean();\n }\n });\n }\n\n /**\n * Remove all events on map\n *\n * @private\n */\n removeMeasureEvents () {\n logger.trace(\"call MeasureLength::removeMeasureEvents()\");\n\n var map = this.getMap();\n\n map.un(\"singleclick\", (e) => this.onPointerMoveHandle(e));\n map.un(\"pointermove\", (e) => this.onPointerMoveHandler(e));\n if (this.eventLayerRemove) {\n olObservableUnByKey(this.eventLayerRemove);\n }\n }\n\n /**\n * Format length output.\n *\n * @param {ol.geom.Line} line - geometry line.\n * @return {String} The formatted output.\n * @private\n */\n format (line) {\n logger.trace(\"call MeasureLength::format()\");\n\n var map = this.getMap();\n\n var measure;\n if (this.options.geodesic) {\n var coordinates = line.getCoordinates();\n measure = 0;\n var sourceProj = map.getView().getProjection();\n for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n var c1 = olTransformProj(coordinates[i], sourceProj, \"EPSG:4326\");\n var c2 = olTransformProj(coordinates[i + 1], sourceProj, \"EPSG:4326\");\n measure += olGetDistanceSphere(c1, c2);\n }\n } else {\n measure = Math.round(line.getLength() * 100) / 100;\n }\n\n var output;\n // si option unit spécifiée, on force l'unité\n // sinon on est en mode automatique entre m et km.\n if (this.options.unit === \"km\") {\n output = (Math.round(measure / 1000 * 100) / 100) + \" \" + \"km\";\n } else if (this.options.unit === \"m\") {\n output = (Math.round(measure * 100) / 100) + \" \" + \"m\";\n } else {\n if (measure > 1000) {\n output = (Math.round(measure / 1000 * 100) / 100) + \" \" + \"km\";\n } else {\n output = (Math.round(measure * 100) / 100) + \" \" + \"m\";\n }\n }\n return output;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on picto\n *\n * @param {Object} e - HTMLElement\n *\n * @private\n */\n onShowMeasureLengthClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n logger.trace(\"call MeasureLength::onShowMeasureLengthClick()\", e);\n\n // appel de la methode commune\n this.onShowMeasureClick(e, \"LineString\");\n }\n\n};\n\n// on récupère les mixins de la classe \"MeasureAreaDOM\" ainsi que celles\n// de \"Measures\".\nObject.assign(MeasureLength.prototype, Measures);\nObject.assign(MeasureLength.prototype, MeasureLengthDOM);\nObject.assign(MeasureLength.prototype, Widget);\n\nexport default MeasureLength;\n\n// Expose MeasureLength as ol.control.MeasureLength (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.MeasureLength = MeasureLength;\n}\n","var MeasureAreaDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPmeasureArea\");\n container.className = \"GPwidget gpf-widget gpf-widget-button\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show control\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createShowMeasureAreaPictoElement : function () {\n // contexte d'execution\n var context = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowMeasureAreaPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-area fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Mesurer une surface\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // gestionnaire d'evenement :\n // on ouvre le menu de saisie...\n // L'ouverture/Fermeture permet de faire le menage\n // (reinitialisation)\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowMeasureAreaClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowMeasureAreaClick(e);\n });\n }\n\n return button;\n }\n};\n\nexport default MeasureAreaDOM;\n","// import CSS\nimport \"../../CSS/Controls/Measures/GPFmeasureArea.css\";\n// import \"../../CSS/Controls/Measures/GPFmeasureAreaStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport { getArea as olGetAreaSphere } from \"ol/sphere\";\nimport { Polygon } from \"ol/geom\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport ID from \"../../Utils/SelectorID\";\n// DOM\nimport MeasureAreaDOM from \"./MeasureAreaDOM\";\n// import local with ol dependencies\nimport Measures from \"./Measures\";\nimport MeasureToolBox from \"../ToolBoxMeasure/MeasureToolBox\";\n\n// Derived from OpenLayers measure example\n// http://openlayers.org/en/latest/examples/measure.html\n\nvar logger = Logger.getLogger(\"measurearea\");\n\n/**\n * @classdesc\n *\n * Tool Measure Area Control. Allows users to measure the length of a path drawn on the map.\n *\n * @constructor\n * @alias ol.control.MeasureArea\n * @type {ol.control.MeasureArea}\n * @extends {ol.control.Control}\n * @param {Object} options - options for function call.\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {Boolean} [options.geodesic = true] - If true, area will be computed on the global sphere using the {@link https://openlayers.org/en/latest/apidoc/module-ol_sphere.html#geodesicArea ol.Sphere.geodesicArea()} function. Otherwise, area will be computed on the projected plane.\n * @param {Object} [options.styles = {}] - styles used when drawing. Specified with following properties.\n * @param {Object} [options.styles.pointer = {}] - Style for mouse pointer when drawing the polygon to measure. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Image-ImageStyle.html ol.style.Image} subclass object.\n * @param {Object} [options.styles.start = {}] - Polygon Style when drawing. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Style-Style.htmll ol.style.Style} object.\n * @param {Object} [options.styles.finish = {}] - Polygon Style when finished drawing. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Style-Style.htmll ol.style.Style} object.\n * \n * @param {Object} [options.layerDescription = {}] - Layer informations to be displayed in LayerSwitcher widget (only if a LayerSwitcher is also added to the map)\n * @param {String} [options.layerDescription.title = \"Mesures de surface\"] - Layer title to be displayed in LayerSwitcher\n * @param {String} [options.layerDescription.description = \"Mes mesures\"] - Layer description to be displayed in LayerSwitcher\n * @example\n * var measureArea = new ol.control.MeasureArea({\n * geodesic : false\n * });\n */\nvar MeasureArea = class MeasureArea extends Control {\n\n constructor (options) {\n /**\n * options\n * @private\n */\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof MeasureArea)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"MeasureArea\";\n\n // uuid\n this._uid = options.id || ID.generate();\n\n // container d'activation du controle\n this._pictoContainer = null;\n\n // initialisation du composant\n this._initialize(options);\n\n // creation du DOM container\n this._container = this._initializeContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n logger.trace(\"setMap()\");\n\n var className = this.CLASSNAME;\n\n // on fait le choix de ne pas activer les events sur la map à l'init de l'outil,\n // mais uniquement à son utilisation !\n if (map) {\n // var self = this;\n // map.on(\"click\", function (e) {\n // logger.trace(\"event on map with click!\");\n // self.onPointerMoveHandler(e);\n // });\n //\n // map.on(\"singleclick\", function (e) {\n // logger.trace(\"event on map with singleclick!\");\n // self.onPointerMoveHandler(e);\n // });\n //\n // map.on(\"pointermove\", function (e) {\n // logger.trace(\"event on map with pointermove!\");\n // self.onPointerMoveHandler(e);\n // });\n\n if (!this.options.target && !this.options.position) {\n MeasureToolBox.add(map, this);\n }\n } else {\n this.clean();\n }\n\n // sauvegarde de l'état de l'outil\n this.tools[className].push({\n instance : (map) ? this : null,\n active : false,\n map : (map) ? map.getTargetElement() : null\n });\n\n // contexte d'execution\n var context = typeof window !== \"undefined\" ? window : typeof self !== \"undefined\" ? self : null;\n if (context) {\n // Pour info\n // les objets de mesures ont du code partagé\n // (afin de gerer les interactions entre eux).\n // Dans un mode \"modules\", on partage cet objet (this.tools) via le contexte\n // d'execution (ex. avec window)\n if (!context.gpShareMeasures) {\n context.gpShareMeasures = {};\n }\n context.gpShareMeasures[className] = this.tools[className];\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this._container;\n }\n\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize measure control (called by constructor)\n *\n * @param {Object} options - options\n *\n * @private\n */\n _initialize (options) {\n logger.trace(\"call MeasureArea::_initialize() : \", options);\n\n // liste des options\n this.options = {};\n this.options.geodesic = (typeof options.geodesic !== \"undefined\") ? options.geodesic : true;\n this.options.position = (typeof options.position !== \"undefined\") ? options.position : null;\n this.options.target = (typeof options.target !== \"undefined\") ? options.target : null;\n this.options.render = (typeof options.render !== \"undefined\") ? options.render : null;\n this.options.gutter = (typeof options.gutter !== \"undefined\") ? options.gutter : null;\n this.options.layerDescription = (typeof options.layerDescription !== \"undefined\") ? options.layerDescription : {\n title : \"Mesures de surface\",\n description : \"Mes mesures\"\n };\n\n // gestion des styles !\n this.createStylingMeasureInteraction(options.styles);\n }\n\n /**\n * initialize component container (DOM)\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initializeContainer () {\n logger.trace(\"call MeasureArea::_initializeContainer() : \", this._uid);\n\n var container = this._createMainContainerElement(); ;\n\n var picto = this._pictoContainer = this._createShowMeasureAreaPictoElement();\n container.appendChild(picto);\n\n return container;\n }\n\n // ################################################################### //\n // ##################### overridden methods ########################## //\n // ################################################################### //\n\n /**\n * Add all events on map\n *\n * @private\n */\n addMeasureEvents () {\n logger.trace(\"call MeasureArea::addMeasureEvents()\");\n\n var map = this.getMap();\n\n map.on(\"singleclick\", (e) => this.onPointerMoveHandler(e));\n map.on(\"pointermove\", (e) => this.onPointerMoveHandler(e));\n this.eventLayerRemove = map.getLayers().on(\"remove\", (e) => {\n if (e.element === this.measureVector) { // FIXME object comparison\n this.clean();\n }\n });\n }\n\n /**\n * Remove all events on map\n *\n * @private\n */\n removeMeasureEvents () {\n logger.trace(\"call MeasureArea::removeMeasureEvents()\");\n\n var map = this.getMap();\n\n map.un(\"singleclick\", (e) => this.onPointerMoveHandler(e));\n map.un(\"pointermove\", (e) => this.onPointerMoveHandler(e));\n if (this.eventLayerRemove) {\n olObservableUnByKey(this.eventLayerRemove);\n }\n }\n\n /**\n * Format length output.\n *\n * @param {ol.geom.Polygon} polygon - geometry polygon.\n * @return {String} The formatted output.\n * @private\n */\n format (polygon) {\n logger.trace(\"call MeasureArea::format()\");\n\n var measure;\n if (this.options.geodesic) {\n var geom = polygon.clone();\n var coordinates = geom.getLinearRing(0).getCoordinates();\n measure = Math.abs(olGetAreaSphere(new Polygon([coordinates])));\n } else {\n measure = polygon.getArea();\n }\n\n var output;\n if (measure > 1000000) {\n output = (Math.round(measure / 1000000 * 100) / 100) + \" \" + \"km2\";\n } else if (measure > 100000) {\n output = (Math.round(measure / 1000000 * 1000) / 1000) + \" \" + \"km2\";\n } else if (measure > 1000) {\n output = (Math.round(measure / 10) * 10) + \" \" + \"m2\";\n } else {\n output = (Math.round(measure * 100) / 100) + \" \" + \"m2\";\n }\n return output;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on picto\n *\n * @param {Object} e - HTMLElement\n *\n * @private\n */\n onShowMeasureAreaClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n logger.trace(\"call MeasureArea::onShowMeasureAreaClick()\", e);\n\n // appel de la methode commune\n this.onShowMeasureClick(e, \"Polygon\");\n }\n\n};\n\n// on récupère les mixins de la classe \"MeasureAreaDOM\" ainsi que celles\n// de \"Measures\".\nObject.assign(MeasureArea.prototype, Measures);\nObject.assign(MeasureArea.prototype, MeasureAreaDOM);\nObject.assign(MeasureArea.prototype, Widget);\n\nexport default MeasureArea;\n\n// Expose MeasureArea as ol.control.MeasureArea (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.MeasureArea = MeasureArea;\n}\n","var MeasureAzimuthDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPmeasureAzimuth\");\n container.className = \"GPwidget gpf-widget gpf-widget-button\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show control\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createShowMeasureAzimuthPictoElement : function () {\n // contexte d'execution\n var context = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowMeasureAzimuthPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-azimuth fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Mesurer un azimut\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n\n // gestionnaire d'evenement :\n // on ouvre le menu de saisie...\n // L'ouverture/Fermeture permet de faire le menage\n // (reinitialisation)\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowMeasureAzimuthClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowMeasureAzimuthClick(e);\n });\n }\n\n return button;\n }\n};\n\nexport default MeasureAzimuthDOM;\n","// import CSS\nimport \"../../CSS/Controls/Measures/GPFmeasureAzimuth.css\";\n// import \"../../CSS/Controls/Measures/GPFmeasureAzimuthStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\nimport { getDistance as olGetDistanceSphere } from \"ol/sphere\";\nimport { transform as olTransformProj } from \"ol/proj\";\nimport { unByKey as olObservableUnByKey } from \"ol/Observable\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport ID from \"../../Utils/SelectorID\";\n// DOM\nimport MeasureAzimuthDOM from \"./MeasureAzimuthDOM\";\n// import local with ol dependencies\nimport MeasureToolBox from \"../ToolBoxMeasure/MeasureToolBox\";\nimport Measures from \"./Measures\";\n\n// Derived from OpenLayers measure example\n// http://openlayers.org/en/latest/examples/measure.html\n\nvar logger = Logger.getLogger(\"measureazimut\");\n\n/**\n * @classdesc\n *\n * Azimuth measurement Control. Allows users to draw a line on an Openlayers map and have its angle in decimal degrees clockwise from the geographical north.\n *\n * @constructor\n * @alias ol.control.MeasureAzimuth\n * @type {ol.control.MeasureAzimuth}\n * @extends {ol.control.Control}\n * @param {Object} options - options for function call.\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {Boolean} [options.geodesic = false] - If true, azimuth will be computed on the global sphere. Otherwise, it will be computed on the projected plane.\n * @param {Object} [options.styles = {}] - styles used when drawing. Specified with following properties.\n * @param {Object} [options.styles.pointer = {}] - Style for mouse pointer when drawing the line. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Image-ImageStyle.html ol.style.Image} subclass object.\n * @param {Object} [options.styles.start = {}] - Line Style when drawing. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Style-Style.htmll ol.style.Style} object.\n * @param {Object} [options.styles.finish = {}] - Line Style when finished drawing. Specified with an {@link https://openlayers.org/en/latest/apidoc/module-ol_style_Style-Style.htmll ol.style.Style} object.\n * \n * @param {Object} [options.layerDescription = {}] - Layer informations to be displayed in LayerSwitcher widget (only if a LayerSwitcher is also added to the map)\n * @param {String} [options.layerDescription.title = \"Mesures d'azimuth\"] - Layer title to be displayed in LayerSwitcher\n * @param {String} [options.layerDescription.description = \"Mes mesures\"] - Layer description to be displayed in LayerSwitcher\n * @example\n * var measure = new ol.control.MeasureAzimuth({\n * geodesic : true\n * });\n */\nvar MeasureAzimuth = class MeasureAzimuth extends Control {\n\n constructor (options) {\n /**\n * options\n * @private\n */\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof MeasureAzimuth)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"MeasureAzimuth\";\n\n // uuid\n this._uid = options.id || ID.generate();\n\n // container d'activation du controle\n this._pictoContainer = null;\n\n // initialisation du composant\n this._initialize(options);\n\n // creation du DOM container\n this._container = this._initializeContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n logger.trace(\"setMap()\");\n\n var className = this.CLASSNAME;\n\n // on fait le choix de ne pas activer les events sur la map à l'init de l'outil,\n // mais uniquement à son utilisation !\n if (map) {\n // var self = this;\n // map.on(\"click\", function (e) {\n // logger.trace(\"event on map with click!\");\n // self.onPointerMoveAzimutHandler(e);\n // });\n //\n // map.on(\"singleclick\", function (e) {\n // logger.trace(\"event on map with singleclick!\");\n // self.onPointerMoveAzimutHandler(e);\n // });\n //\n // map.on(\"pointermove\", function (e) {\n // logger.trace(\"event on map with pointermove!\");\n // self.onPointerMoveAzimutHandler(e);\n // });\n\n if (!this.options.target && !this.options.position) {\n MeasureToolBox.add(map, this);\n }\n } else {\n this.clean();\n }\n\n // sauvegarde de l'état de l'outil\n this.tools[className].push({\n instance : (map) ? this : null,\n active : false,\n map : (map) ? map.getTargetElement() : null\n });\n\n // contexte d'execution\n var context = typeof window !== \"undefined\" ? window : typeof self !== \"undefined\" ? self : null;\n if (context) {\n // Pour info\n // les objets de mesures ont du code partagé\n // (afin de gerer les interactions entre eux).\n // Dans un mode \"modules\", on partage cet objet (this.tools) via le contexte\n // d'execution (ex. avec window)\n if (!context.gpShareMeasures) {\n context.gpShareMeasures = {};\n }\n context.gpShareMeasures[className] = this.tools[className];\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Setter for option Geodesic\n *\n * @param {Boolean} value - geodesic value\n */\n setGeodesic (value) {\n this.options.geodesic = (typeof value !== \"undefined\") ? value : false;\n }\n\n /**\n * Getter for option Geodesic\n *\n * @return {Boolean} geodesic value\n */\n isGeodesic () {\n return this.options.geodesic;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this._container;\n }\n\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize measure control (called by constructor)\n *\n * @param {Object} options - options\n *\n * @private\n */\n _initialize (options) {\n logger.trace(\"call MeasureAzimuth::_initialize() : \", options);\n\n // liste des options\n this.options = {};\n this.options.geodesic = (typeof options.geodesic !== \"undefined\") ? options.geodesic : false;\n this.options.position = (typeof options.position !== \"undefined\") ? options.position : null;\n this.options.target = (typeof options.target !== \"undefined\") ? options.target : null;\n this.options.render = (typeof options.render !== \"undefined\") ? options.render : null;\n this.options.gutter = (typeof options.gutter !== \"undefined\") ? options.gutter : null;\n this.options.layerDescription = (typeof options.layerDescription !== \"undefined\") ? options.layerDescription : {\n title : \"Mesures d'azimuth\",\n description : \"Mes mesures\"\n };\n\n // gestion des styles !\n this.createStylingMeasureInteraction(options.styles);\n }\n\n /**\n * initialize component container (DOM)\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initializeContainer () {\n logger.trace(\"call MeasureAzimuth::_initializeContainer() : \", this._uid);\n\n var container = this._createMainContainerElement(); ;\n\n var picto = this._pictoContainer = this._createShowMeasureAzimuthPictoElement();\n container.appendChild(picto);\n\n return container;\n }\n\n // ################################################################### //\n // ##################### overridden methods ########################## //\n // ################################################################### //\n\n /**\n * Add all events on map\n *\n * @private\n */\n addMeasureEvents () {\n logger.trace(\"call MeasureAzimuth::addMeasureEvents()\");\n\n var map = this.getMap();\n\n map.on(\"singleclick\", (e) => this.onPointerMoveAzimutHandler(e));\n map.on(\"pointermove\", (e) => this.onPointerMoveAzimutHandler(e));\n this.eventLayerRemove = map.getLayers().on(\"remove\", (e) => {\n if (e.element === this.measureVector) { // FIXME object comparison\n this.clean();\n }\n });\n }\n\n /**\n * Remove all events on map\n *\n * @private\n */\n removeMeasureEvents () {\n logger.trace(\"call MeasureAzimuth::removeMeasureEvents()\");\n\n var map = this.getMap();\n\n map.un(\"singleclick\", (e) => this.onPointerMoveAzimutHandler(e));\n map.un(\"pointermove\", (e) => this.onPointerMoveAzimutHandler(e));\n if (this.eventLayerRemove) {\n olObservableUnByKey(this.eventLayerRemove);\n }\n }\n\n /**\n * Format length output.\n *\n * @param {ol.geom.LineString} line - geometry line.\n * @return {String} The formatted output.\n * @private\n */\n format (line) {\n logger.trace(\"call MeasureAzimuth::format()\");\n\n var map = this.getMap();\n\n var sourceProj = map.getView().getProjection();\n\n var c1 = olTransformProj(line.getFirstCoordinate(), sourceProj, \"EPSG:4326\");\n var c2 = olTransformProj(line.getLastCoordinate(), sourceProj, \"EPSG:4326\");\n\n if (!this.options.geodesic) {\n // TODO calcul sur une petite distance (>500m) afin de simuler un cap !\n var lengthGeodesic = olGetDistanceSphere(c1, c2);\n logger.trace(\"measure between 2 points with geodesic method\", lengthGeodesic);\n if (lengthGeodesic > 500) {\n var fraction = 500.0 / lengthGeodesic;\n logger.trace(\"%\", fraction);\n c2 = olTransformProj(line.getCoordinateAt(fraction), sourceProj, \"EPSG:4326\");\n }\n }\n\n var degrees2radians = Math.PI / 180;\n var radians2degrees = 180 / Math.PI;\n\n var lon1 = degrees2radians * c1[0];\n var lon2 = degrees2radians * c2[0];\n\n var lat1 = degrees2radians * c1[1];\n var lat2 = degrees2radians * c2[1];\n\n var a = Math.sin(lon2 - lon1) * Math.cos(lat2);\n var b = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1);\n\n var atan = Math.atan2(a, b);\n\n var azimut = radians2degrees * atan;\n logger.trace(\"azimut\", azimut);\n\n if (azimut < 0) {\n azimut += 360;\n }\n var output = Math.round(azimut * 100) / 100 + \" °\";\n\n return output;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on picto\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onShowMeasureAzimuthClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n logger.trace(\"call MeasureAzimuth::onShowMeasureAzimuthClick()\", e);\n\n // appel de la methode commune\n this.onShowMeasureClick(e, \"LineString\");\n }\n\n /**\n * Handle pointer click.\n *\n * @param {ol.MapBrowserEvent} e - The event.\n * @private\n */\n onPointerMoveAzimutHandler (e) {\n this.onPointerMoveHandler(e);\n\n if (this.sketch) {\n var geom = (/** @type {ol.geom.LineString} */ (this.sketch.getGeometry()));\n if (geom.getCoordinates().length > 2) {\n this.measureDraw.finishDrawing();\n }\n }\n }\n\n};\n\n// on récupère les mixins de la classe \"MeasureAreaDOM\" ainsi que celles\n// de \"Measures\".\nObject.assign(MeasureAzimuth.prototype, Measures);\nObject.assign(MeasureAzimuth.prototype, MeasureAzimuthDOM);\nObject.assign(MeasureAzimuth.prototype, Widget);\n\nexport default MeasureAzimuth;\n\n// Expose MeasureAzimuth as ol.control.MeasureAzimuth (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.MeasureAzimuth = MeasureAzimuth;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.control.Zoom;","// import CSS\nimport \"../../CSS/Controls/Zoom/GPFzoom.css\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport SelectorID from \"../../Utils/SelectorID\";\n// import ol\nimport Zoom from \"ol/control/Zoom\";\n\nvar logger = Logger.getLogger(\"zoom\");\n\n/**\n * @classdesc\n * OpenLayers Control to manage zoom\n *\n * @constructor\n * @extends {ol.control.Zoom}\n * @alias ol.control.GeoportalZoom\n * @type {ol.control.GeoportalZoom}\n * @param {Object} options - ol.control.Zoom options (see {@link http://openlayers.org/en/latest/apidoc/ol.control.Zoom.html ol.Control.Zoom})\n * @fire zoom:in\n * @fire zoom:out\n * @example\n * var zoom = new ol.control.GeoportalZoom({\n * position: \"top-left\"\n * });\n * map.addControl(zoom);\n */\nvar GeoportalZoom = class GeoportalZoom extends Zoom {\n\n /**\n * See {@link ol.control.GeoportalZoom}\n * @module GeoportalZoom\n * @alias module:~controls/GeoportalZoom\n * @param {*} options - options\n * @example\n * import GeoportalZoom from \"gpf-ext-ol/controls/GeoportalZoom\"\n * ou\n * import { GeoportalZoom } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // FIXME comment traite t on les options sur les classes\n // du contrôle natif ?\n // * className,\n // * zoomInClassName, zoomOutClassName,\n // * zoomInLabel, zoomOutLabel,\n // * zoomInTipLabel, zoomOutTipLabel\n var className = \"ol-custom-zoom\";\n options.className = className;\n super(options);\n\n this.container = null;\n this.options = options;\n }\n\n _createContainerPosition (map) {\n this.container = map.getOverlayContainerStopEvent();\n this.options.target = this.container;\n if (this.options.position) {\n var id = \"position-container-\" + this.options.position;\n if (!document.getElementById(id)) {\n // Creation manuelle du container de position\n var div = document.createElement(\"div\");\n div.id = id;\n div.classList.add(\"position\");\n div.classList.add(id);\n this.container.appendChild(div);\n }\n this.options.target = this.container.children[id];\n }\n }\n\n _initContainer () {\n // UID interne pour chaque controle\n this._uid = this.options.id || SelectorID.generate();\n\n // Ajout / Suppression des attributs du DOM\n this.element.id = \"GPzoom-\" + this._uid;\n this.element.classList.add(\"GPwidget\", \"gpf-widget\", \"gpf-widget-button\");\n this.element.classList.add(this.options.className);\n this.element.classList.remove(\"ol-zoom\", \"ol-unselectable\", \"ol-control\");\n\n var self = this;\n var buttons = this.element.childNodes;\n for (let index = 0; index < buttons.length; index++) {\n const btn = buttons[index];\n if (btn.classList.contains(this.options.className + \"-in\")) {\n // btn.classList.remove(\"ol-custom-zoom-in\");\n btn.classList.add(\"GPzoomIn\", \"GPshowOpen\", \"GPshowAdvancedToolPicto\", \"gpf-btn-icon-zoom-in\", \"fr-btn\", \"fr-btn--tertiary\", \"gpf-btn\", \"gpf-btn--tertiary\", \"gpf-btn-icon\");\n btn.id = \"GPzoomIn\";\n btn.innerHTML = \"\";\n btn.removeAttribute(\"title\");\n btn.setAttribute(\"aria-label\", \"Zoomer\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n btn.appendChild(span);\n if (btn.addEventListener) {\n btn.addEventListener(\"click\", function () {\n /**\n * event triggered on zoom in\n * @event zoom:in\n */\n self.dispatchEvent(\"zoom:in\");\n });\n } else if (btn.attachEvent) {\n btn.attachEvent(\"onclick\", function () {\n self.dispatchEvent(\"zoom:in\");\n });\n }\n }\n if (btn.classList.contains(this.options.className + \"-out\")) {\n // btn.classList.remove(\"ol-custom-zoom-out\");\n btn.classList.add(\"GPzoomOut\", \"GPshowOpen\", \"GPshowAdvancedToolPicto\", \"gpf-btn-icon-zoom-out\", \"fr-btn\", \"fr-btn--tertiary\", \"gpf-btn\", \"gpf-btn--tertiary\", \"gpf-btn-icon\");\n btn.id = \"GPzoomOut\";\n btn.innerHTML = \"\";\n btn.removeAttribute(\"title\");\n btn.setAttribute(\"aria-label\", \"Dézoomer\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n btn.appendChild(span);\n if (btn.addEventListener) {\n btn.addEventListener(\"click\", function () {\n /**\n * event triggered on zoom out\n * @event zoom:out\n */\n self.dispatchEvent(\"zoom:out\");\n });\n } else if (btn.attachEvent) {\n btn.attachEvent(\"onclick\", function () {\n self.dispatchEvent(\"zoom:out\");\n });\n }\n }\n }\n\n // Surcharge CSS de positionnement par defaut\n if (this.options.position) {\n this.element.style.position = \"unset\";\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.element.classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Overload setMap function\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n this._createContainerPosition(map);\n this._initContainer();\n // INFO\n // on ne supprime pas le zoom par defaut,\n // on le desactive simplement pour éviter des effets de bords\n // (ex. evenement de suppression d'un element de la collection)\n var controls = map.getControls();\n controls.forEach(ctrl => {\n if (ctrl.element.classList.contains(\"ol-zoom\")) {\n ctrl.element.classList.add(\"ol-hidden\");\n ctrl.element.style.display = \"none\";\n }\n });\n }\n this.setTarget(this.options.target);\n super.setMap(map);\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n\n};\n\nexport default GeoportalZoom;\n\n// Expose GeoportalZoom as ol.control.GeoportalZoom (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.GeoportalZoom = GeoportalZoom;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.control.FullScreen;","// import CSS\nimport \"../../CSS/Controls/FullScreen/GPFfullScreen.css\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport SelectorID from \"../../Utils/SelectorID\";\n// import ol\nimport FullScreen from \"ol/control/FullScreen\";\n\nvar logger = Logger.getLogger(\"fullscreen\");\n\n/**\n * @classdesc\n * OpenLayers Control to manage full screen\n *\n * @constructor\n * @extends {ol.control.FullScreen}\n * @alias ol.control.GeoportalFullScreen\n * @type {ol.control.GeoportalFullScreen}\n * @param {Object} options - ol.control.FullScreen options (see {@link http://openlayers.org/en/latest/apidoc/ol.control.FullScreen.html ol.Control.FullScreen})\n * @example\n * var zoom = new ol.control.GeoportalFullScreen({\n * position: \"top-left\"\n * });\n * map.addControl(zoom);\n */\nvar GeoportalFullScreen = class GeoportalFullScreen extends FullScreen {\n\n /**\n * See {@link ol.control.GeoportalFullScreen}\n * @module GeoportalFullScreen\n * @alias module:~controls/GeoportalFullScreen\n * @param {*} options - options\n * @example\n * import GeoportalFullScreen from \"gpf-ext-ol/controls/GeoportalFullScreen\"\n * ou\n * import { GeoportalFullScreen } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n var className = \"ol-custom-full-screen\";\n options.className = options.className || className;\n options.label = options.label || \"\";\n options.labelActive = options.labelActive || \"\";\n options.activeClassName = options.activeClassName || className + \"-true\";\n options.inactiveClassName = options.inactiveClassName || className + \"-false\";\n options.tipLabel = options.tipLabel || \"Basculer en mode plein écran\";\n\n super(options);\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"FullScreen\";\n this.container = null;\n this.options = options;\n }\n\n _createContainerPosition (map) {\n this.container = map.getOverlayContainerStopEvent();\n this.options.target = this.container;\n if (this.options.position) {\n var id = \"position-container-\" + this.options.position;\n if (!document.getElementById(id)) {\n // Creation manuelle du container de position\n var div = document.createElement(\"div\");\n div.id = id;\n div.classList.add(\"position\");\n div.classList.add(id);\n this.container.appendChild(div);\n }\n this.options.target = this.container.children[id];\n }\n }\n\n _initContainer () {\n // UID interne pour chaque controle\n this._uid = this.options.id || SelectorID.generate();\n\n // Ajout / Suppression des attributs du DOM\n this.element.id = \"GPfullScreen-\" + this._uid;\n this.element.classList.add(\"GPwidget\", \"gpf-widget\", \"gpf-widget-button\");\n this.element.classList.add(this.options.className);\n this.element.classList.remove(\"ol-full-screen\", \"ol-unselectable\", \"ol-control\");\n\n var button = this.element.childNodes[0];\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.classList.add(\"GPshowOpen\", \"GPshowAdvancedToolPicto\", \"GPfullScreenPicto\", \"fr-btn\", \"fr-btn--tertiary\", \"gpf-btn--tertiary\", \"gpf-btn\", \"gpf-btn-icon\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n button.removeAttribute(\"title\");\n button.setAttribute(\"aria-label\", this.options.tipLabel);\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n });\n }\n\n // Surcharge CSS de positionnement par defaut\n if (this.options.position) {\n this.element.style.position = \"unset\";\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.element.classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Overload setMap function\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n this._createContainerPosition(map);\n this._initContainer();\n // INFO\n // on ne supprime pas le zoom par defaut,\n // on le desactive simplement pour éviter des effets de bords\n // (ex. evenement de suppression d'un element de la collection)\n var controls = map.getControls();\n controls.forEach(ctrl => {\n if (ctrl.element.classList.contains(\"ol-full-screen\")) {\n ctrl.element.classList.add(\"ol-hidden\");\n ctrl.element.style.display = \"none\";\n }\n });\n }\n this.setTarget(this.options.target);\n super.setMap(map);\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n\n};\n\nexport default GeoportalFullScreen;\n\n// Expose GeoportalFullScreen as ol.control.GeoportalFullScreen (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.GeoportalFullScreen = GeoportalFullScreen;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.control.OverviewMap;","// import CSS\nimport \"../../CSS/Controls/OverviewMap/GPFoverviewMap.css\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport GeoportalWMTS from \"../../Layers/LayerWMTS\";\n// import ol\nimport OverviewMap from \"ol/control/OverviewMap\";\n\nvar logger = Logger.getLogger(\"overviewMap\");\n\n/**\n * @classdesc\n * OpenLayers Control to manage overviewMap\n *\n * @constructor\n * @extends {ol.control.OverviewMap}\n * @alias ol.control.GeoportalOverviewMap\n * @type {ol.control.GeoportalOverviewMap}\n * @param {Object} options - ol.control.OverviewMap options (see {@link http://openlayers.org/en/latest/apidoc/ol.control.OverviewMap.html ol.Control.OverviewMap})\n * @fire overviewmap:toggle\n * @example\n * var overviewmap = new ol.control.GeoportalOverviewMap({\n * position: \"top-left\"\n * });\n * map.addControl(overviewmap);\n */\nvar GeoportalOverviewMap = class GeoportalOverviewMap extends OverviewMap {\n\n /**\n * See {@link ol.control.GeoportalOverviewMap}\n * @module GeoportalOverviewMap\n * @alias module:~controls/GeoportalOverviewMap\n * @param {*} options - options\n * @example\n * import GeoportalOverviewMap from \"gpf-ext-ol/controls/GeoportalOverviewMap\"\n * ou\n * import { GeoportalOverviewMap } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n /**\n * Layer by default\n */\n const LAYER_CONFIG = {\n \"name\" : \"GEOGRAPHICALGRIDSYSTEMS.MAPS.OVERVIEW\",\n \"globalConstraint\" : {\n \"maxScaleDenominator\" : 279541132.01435894,\n \"minScaleDenominator\" : 2183915.0938621787,\n \"bbox\" : {\n \"left\" : -179.5,\n \"right\" : 179.5,\n \"top\" : 75,\n \"bottom\" : -75\n }\n },\n \"params\" : {\n \"url\" : \"https://data.geopf.fr/wmts\",\n \"styles\" : \"normal\",\n \"version\" : \"1.0.0\",\n \"format\" : \"image/jpeg\",\n \"projection\" : \"EPSG:3857\",\n \"minScale\" : 2183915.0938621787,\n \"maxScale\" : 279541132.01435894,\n \"extent\" : {\n \"left\" : -179.5,\n \"right\" : 179.5,\n \"top\" : 75,\n \"bottom\" : -75\n },\n \"legends\" : [\n {\n \"format\" : \"image/jpeg\",\n \"url\" : \"https://data.geopf.fr/annexes/ressources/legendes/LEGEND.jpg\",\n \"minScaleDenominator\" : \"200\"\n }\n ],\n \"title\" : \"Carte Mondiale pour la mini-vue\",\n \"description\" : \"Carte Mondiale pour la mini-vue\",\n \"tileMatrixSetLimits\" : {\n \"1\" : {\n \"minTileRow\" : \"0\",\n \"maxTileRow\" : \"1\",\n \"minTileCol\" : \"0\",\n \"maxTileCol\" : \"1\"\n },\n \"2\" : {\n \"minTileRow\" : \"0\",\n \"maxTileRow\" : \"3\",\n \"minTileCol\" : \"0\",\n \"maxTileCol\" : \"3\"\n },\n \"3\" : {\n \"minTileRow\" : \"1\",\n \"maxTileRow\" : \"6\",\n \"minTileCol\" : \"0\",\n \"maxTileCol\" : \"7\"\n },\n \"4\" : {\n \"minTileRow\" : \"2\",\n \"maxTileRow\" : \"13\",\n \"minTileCol\" : \"0\",\n \"maxTileCol\" : \"15\"\n },\n \"5\" : {\n \"minTileRow\" : \"5\",\n \"maxTileRow\" : \"26\",\n \"minTileCol\" : \"0\",\n \"maxTileCol\" : \"31\"\n },\n \"6\" : {\n \"minTileRow\" : \"11\",\n \"maxTileRow\" : \"52\",\n \"minTileCol\" : \"0\",\n \"maxTileCol\" : \"63\"\n },\n \"7\" : {\n \"minTileRow\" : \"22\",\n \"maxTileRow\" : \"105\",\n \"minTileCol\" : \"0\",\n \"maxTileCol\" : \"127\"\n },\n \"8\" : {\n \"minTileRow\" : \"45\",\n \"maxTileRow\" : \"210\",\n \"minTileCol\" : \"0\",\n \"maxTileCol\" : \"255\"\n }\n },\n \"TMSLink\" : \"PM_1_8\",\n \"matrixIds\" : [\n \"1\",\n \"2\",\n \"3\",\n \"4\",\n \"5\",\n \"6\",\n \"7\",\n \"8\"\n ],\n \"tileMatrices\" : {\n \"1\" : {\n \"matrixId\" : \"1\",\n \"matrixHeight\" : 2,\n \"matrixWidth\" : 2,\n \"scaleDenominator\" : 279541132.01435894,\n \"tileHeight\" : 256,\n \"tileWidth\" : 256,\n \"topLeftCorner\" : {\n \"x\" : -20037508.3427892,\n \"y\" : 20037508.3427892\n }\n },\n \"2\" : {\n \"matrixId\" : \"2\",\n \"matrixHeight\" : 4,\n \"matrixWidth\" : 4,\n \"scaleDenominator\" : 139770566.0071793,\n \"tileHeight\" : 256,\n \"tileWidth\" : 256,\n \"topLeftCorner\" : {\n \"x\" : -20037508.3427892,\n \"y\" : 20037508.3427892\n }\n },\n \"3\" : {\n \"matrixId\" : \"3\",\n \"matrixHeight\" : 8,\n \"matrixWidth\" : 8,\n \"scaleDenominator\" : 69885283.00358965,\n \"tileHeight\" : 256,\n \"tileWidth\" : 256,\n \"topLeftCorner\" : {\n \"x\" : -20037508.3427892,\n \"y\" : 20037508.3427892\n }\n },\n \"4\" : {\n \"matrixId\" : \"4\",\n \"matrixHeight\" : 16,\n \"matrixWidth\" : 16,\n \"scaleDenominator\" : 34942641.50179486,\n \"tileHeight\" : 256,\n \"tileWidth\" : 256,\n \"topLeftCorner\" : {\n \"x\" : -20037508.3427892,\n \"y\" : 20037508.3427892\n }\n },\n \"5\" : {\n \"matrixId\" : \"5\",\n \"matrixHeight\" : 32,\n \"matrixWidth\" : 32,\n \"scaleDenominator\" : 17471320.75089743,\n \"tileHeight\" : 256,\n \"tileWidth\" : 256,\n \"topLeftCorner\" : {\n \"x\" : -20037508.3427892,\n \"y\" : 20037508.3427892\n }\n },\n \"6\" : {\n \"matrixId\" : \"6\",\n \"matrixHeight\" : 64,\n \"matrixWidth\" : 64,\n \"scaleDenominator\" : 8735660.375448715,\n \"tileHeight\" : 256,\n \"tileWidth\" : 256,\n \"topLeftCorner\" : {\n \"x\" : -20037508.3427892,\n \"y\" : 20037508.3427892\n }\n },\n \"7\" : {\n \"matrixId\" : \"7\",\n \"matrixHeight\" : 128,\n \"matrixWidth\" : 128,\n \"scaleDenominator\" : 4367830.1877243575,\n \"tileHeight\" : 256,\n \"tileWidth\" : 256,\n \"topLeftCorner\" : {\n \"x\" : -20037508.3427892,\n \"y\" : 20037508.3427892\n }\n },\n \"8\" : {\n \"matrixId\" : \"8\",\n \"matrixHeight\" : 256,\n \"matrixWidth\" : 256,\n \"scaleDenominator\" : 2183915.0938621787,\n \"tileHeight\" : 256,\n \"tileWidth\" : 256,\n \"topLeftCorner\" : {\n \"x\" : -20037508.3427892,\n \"y\" : 20037508.3427892\n }\n }\n },\n \"nativeResolutions\" : [\n \"78271.51696402048\",\n \"39135.75848201023\",\n \"19567.87924100512\",\n \"9783.939620502561\",\n \"4891.969810251280\",\n \"2445.984905125640\",\n \"1222.992452562820\",\n \"611.4962262814100\"\n ]\n }\n };\n\n // optiopns par defaut\n var className = \"ol-overviewmap\";\n options.className = options.className || className;\n options.collapseLabel = options.collapseLabel || \"\";\n options.collapsed = options.collapsed;\n if (options.collapsed === undefined) {\n options.collapsed = true;\n }\n options.label = options.label || \"\";\n options.tipLabel = \"Carte générale\";\n options.layers = options.layers || [\n new GeoportalWMTS({\n layer : \"GEOGRAPHICALGRIDSYSTEMS.MAPS.OVERVIEW\",\n configuration : LAYER_CONFIG\n })\n ];\n\n super(options);\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"OverviewMap\";\n this.container = null;\n this.options = options;\n }\n\n _createContainerPosition (map) {\n this.container = map.getOverlayContainerStopEvent();\n this.options.target = this.container;\n if (this.options.position) {\n var id = \"position-container-\" + this.options.position;\n if (!document.getElementById(id)) {\n // Creation manuelle du container de position\n var div = document.createElement(\"div\");\n div.id = id;\n div.classList.add(\"position\");\n div.classList.add(id);\n this.container.appendChild(div);\n }\n this.options.target = this.container.children[id];\n }\n }\n\n _initContainer () {\n // UID interne pour chaque controle\n this._uid = this.options.id || SelectorID.generate();\n\n // Ajout / Suppression des attributs du DOM\n this.element.id = \"GPoverviewMap-\" + this._uid;\n this.element.classList.add(\"GPwidget\", \"gpf-widget\", \"gpf-widget-button\");\n this.element.classList.remove(\"ol-control\");\n\n var elements = this.element.childNodes;\n // button\n var button = elements[1];\n button.id = \"GPshowOverviewMap-\" + this._uid;\n button.classList.add(\"GPshowOpen\", \"GPshowAdvancedToolPicto\", \"GPshowOverviewMap\", \"gpf-btn-icon\", \"gpf-btn-icon-overviewmap\", \"fr-btn\", \"fr-btn--tertiary\", \"gpf-btn--tertiary\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", !this.options.collapsed);\n button.setAttribute(\"type\", \"button\");\n button.removeAttribute(\"title\");\n button.setAttribute(\"aria-label\", this.options.tipLabel);\n var self = this;\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n /**\n * event triggered on toggle map\n * @event overviewmap:toggle\n */\n self.dispatchEvent({\n type : \"overviewmap:toggle\",\n status : status\n });\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.dispatchEvent({\n type : \"overviewmap:toggle\",\n status : status\n });\n });\n }\n\n // Surcharge CSS de positionnement par defaut\n if (this.options.position) {\n this.element.style.position = \"unset\";\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.element.classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Overload setMap function\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n this._createContainerPosition(map);\n this._initContainer();\n }\n this.setTarget(this.options.target);\n super.setMap(map);\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n\n};\n\nexport default GeoportalOverviewMap;\n\n// Expose GeoportalOverviewMap as ol.control.GeoportalOverviewMap (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.GeoportalOverviewMap = GeoportalOverviewMap;\n}\n","var LegendsDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this.uid) ? id + \"-\" + this.uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPlegends\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show Legends\n *\n * @returns {DOMElement} DOM element\n */\n _createShowLegendsPictoElement : function () {\n // contexte d'execution\n var self = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowLegendsPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowLegendsPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-legends fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Afficher les légendes\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // Close all results and panels when minimizing the widget\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowLegendsClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowLegendsClick(e);\n });\n }\n\n return button;\n },\n\n // ################################################################### //\n // ################### Methods of panel container #################### //\n // ################################################################### //\n\n /**\n * Create Container Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createLegendsPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPlegendsPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n return dialog;\n },\n\n _createLegendsPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__legends\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createLegendsPanelHeaderElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"gpf-panel__header_legends\";\n return container;\n },\n _createLegendsPanelIconElement : function () {\n var label = document.createElement(\"label\");\n label.className = \"gpf-btn-header-legends gpf-btn-icon-header-legends\";\n label.title = \"Légendes\";\n return label;\n },\n _createLegendsPanelTitleElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__title_legends\";\n div.innerHTML = \"Légendes\";\n return div;\n },\n _createLegendsPanelCloseElement : function () {\n // contexte\n var self = this;\n\n var btnClose = document.createElement(\"button\");\n btnClose.className = \"gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline\";\n btnClose.title = \"Fermer le panneau\";\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n btnClose.appendChild(span);\n\n // Link panel close / visibility checkbox\n if (btnClose.addEventListener) {\n btnClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowLegendsPicto\")).click();\n }, false);\n } else if (btnClose.attachEvent) {\n btnClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowLegendsPicto\")).click();\n });\n }\n\n return btnClose;\n },\n\n // ################################################################### //\n // ####################### Methods dynamics ########################## //\n // ################################################################### //\n\n _createLegendElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"legends-entries gpf-panel__body fr-modal__body\";\n return div;\n },\n\n _createLegendEntry : function (o) {\n // Liste des informations :\n // id\n // title\n // legends\n // metadatas\n // desc\n // url\n // partners\n\n const stringToHTML = (str) => {\n var support = function () {\n if (!window.DOMParser) {\n return false;\n }\n var parser = new DOMParser();\n try {\n parser.parseFromString(\"x\", \"text/html\");\n } catch (err) {\n return false;\n }\n return true;\n };\n\n // If DOMParser is supported, use it\n if (support()) {\n var parser = new DOMParser();\n var doc = parser.parseFromString(str, \"text/html\");\n return doc.body;\n }\n\n // Otherwise, fallback to old-school method\n var dom = document.createElement(\"div\");\n dom.innerHTML = str;\n return dom;\n };\n\n if (o) {\n if (o.legends && o.legends.length) {\n var url = o.legends[0].url; // 1ere valeur par defaut\n var entry = stringToHTML(`\n \n \n \n
    \n \"${o.desc}\"\n
    \n \n `);\n // add event click button\n var button = entry.firstChild.querySelector(\"button\");\n if (button) {\n button.addEventListener(\"click\", (e) => {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n var element = document.getElementById(\"GPlegend_ID_\" + o.id);\n (status) ?\n element.classList.replace(\"gpf-visible\", \"gpf-hidden\") : element.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n });\n }\n return entry.firstChild;\n }\n }\n }\n\n};\n\nexport default LegendsDOM;\n","// import CSS\nimport \"../../CSS/Controls/Legends/GPFlegends.css\";\n\n// import OpenLayers\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\n\n// import local\nimport Utils from \"../../Utils/Helper\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Draggable from \"../../Utils/Draggable\";\n\n// DOM\nimport LegendsDOM from \"./LegendsDOM\";\n\nvar logger = Logger.getLogger(\"legends\");\n\n/**\n * @classdesc\n *\n * Legends button\n *\n * @constructor\n * @alias ol.control.Legends\n * @type {ol.control.Legends}\n * @extends {ol.control.Control}\n * @param {Object} options - options for function call.\n *\n * @fires legends:add\n * @fires legends:remove\n * @fires legends:modify\n * @example\n * var legends = new ol.control.Legends();\n * map.addControl(legends);\n */\nvar Legends = class Legends extends Control {\n\n /**\n * See {@link ol.control.Legends}\n * @module Legends\n * @alias module:~controls/Legends\n * @param {Object} [options] - options\n * @example\n * import Legends from \"gpf-ext-ol/controls/Legends\"\n * ou\n * import { Legends } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof Legends)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"Legends\";\n // initialisation du composant\n this.initialize(options);\n\n // Widget main DOM container\n this.container = this.initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this.container) : this.element = this.container;\n\n return this;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this.panelLegendsContainer,\n this.panelLegendsHeaderContainer,\n map.getTargetElement()\n );\n }\n // mode \"collapsed\"\n if (!this.collapsed) {\n this.buttonLegendsShow.setAttribute(\"aria-pressed\", true);\n }\n // ajout des legendes déjà sur la carte\n if (this.auto) {\n var self = this;\n map.getLayers().forEach((layer) => {\n self.add(layer);\n });\n }\n\n // ajout des evenements sur la carte\n // pour les futurs ajouts de couche\n if (this.auto) {\n this.addEventsListeners(map);\n }\n } else {\n // suppression des evenements sur la carte\n // pour les futurs suppressions de couche\n if (this.auto) {\n this.removeEventsListeners();\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // ################### getters / setters ############################# //\n // ################################################################### //\n\n /**\n * Get all meta informations of a IGN's layer\n *\n * @param {*} layer - layer\n * @returns {*} informations\n * @public\n * @example\n * getLegends() :\n * \"legends\" : [\n * {\n * \"format\" : \"image/jpeg\",\n * \"url\" : \"https:*data.geopf.fr/annexes/ressources/legendes/LEGEND.jpg\",\n * \"minScaleDenominator\" : \"200\"\n * }\n * ],\n */\n getMetaInformations (layer) {\n // INFO\n // condition pour être une couche issue du catalogue IGN\n if (layer.hasOwnProperty(\"name\")) {\n return {\n id : layer.name,\n title : layer.getTitle(),\n legends : layer.getLegends(),\n metadatas : layer.getMetadata(),\n desc : layer.getDescription(),\n url : layer.getQuicklookUrl(),\n partners : layer.getOriginators()\n };\n }\n return;\n }\n\n /**\n * Add legends from layers\n * @param {*} layers - ...\n * @public\n */\n adds (layers) {\n if (layers) {\n for (let index = 0; index < layers.length; index++) {\n if (!this.add(layer)) {\n continue;\n }\n }\n }\n }\n\n /**\n * Add a legend from a layer\n * @param {*} layer - ...\n * @returns {Boolean} - true|false\n * @public\n */\n add (layer) {\n if (layer) {\n var entry = this._createLegendEntry(this.getMetaInformations(layer));\n if (entry) {\n if (this.exist(entry)) {\n return false;\n }\n this.panelLegendsEntriesContainer.prepend(entry);\n this.legends.push({\n obj : layer,\n dom : entry\n });\n return true;\n }\n }\n return false;\n }\n\n /**\n * Remove a legend from a layer\n * @param {*} layer - ...\n * @returns {Boolean} - true|false\n * @public\n */\n remove (layer) {\n var found = false;\n if (layer) {\n for (let i = 0; i < this.legends.length; i++) {\n const legend = this.legends[i];\n if (layer.name === legend.obj.name &&\n layer.service === legend.obj.service\n ) {\n if (legend.dom) {\n this.legends[i].dom.remove();\n }\n this.legends.splice(i, 1);\n found = true;\n break;\n }\n }\n }\n return found;\n }\n\n /**\n * Has already a DOM legend\n * @param {*} dom - ...\n * @returns {Boolean} - true|false\n * @public\n */\n exist (dom) {\n var found = false;\n for (let i = 0; i < this.legends.length; i++) {\n const legend = this.legends[i];\n if (legend.dom.id === dom.id) {\n found = true;\n break;\n }\n }\n return found;\n }\n\n // ################################################################### //\n // #################### privates methods ############################# //\n // ################################################################### //\n\n /**\n * Initialize Legends control (called by Legends constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n this.uid = options.id || SelectorID.generate();\n\n // set default options\n this.options = {\n collapsed : true,\n draggable : false,\n auto : true,\n panel : false\n };\n\n // merge with user options\n Utils.assign(this.options, options);\n\n /** {Boolean} specify if control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n /** {Boolean} specify if control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n /** {Boolean} specify if control add layers auto */\n this.auto = this.options.auto;\n\n this.buttonLegendsShow = null;\n this.panelLegendsContainer = null;\n this.panelLegendsEntriesContainer = null; // c'est là où on ajoute nos entrées legendes !\n this.panelLegendsHeaderContainer = null; // c'est pour le dragNdrop\n this.buttonLegendsClose = null; // utile ?\n\n this.eventsListeners = [];\n\n // tableau des entrées des legendes\n // ex.\n // {\n // obj: layer openlayers,\n // dom: DOMElement\n // }\n this.legends = [];\n }\n\n /**\n * Create control main container (DOM initialize)\n *\n * @returns {DOMElement} DOM element\n * @private\n */\n initContainer () {\n // create main container\n var container = this._createMainContainerElement();\n\n var picto = this.buttonLegendsShow = this._createShowLegendsPictoElement();\n container.appendChild(picto);\n\n // panel\n var legendsPanel = this.panelLegendsContainer = this._createLegendsPanelElement();\n var legendsPanelDiv = this._createLegendsPanelDivElement();\n legendsPanel.appendChild(legendsPanelDiv);\n\n var legendsEntriesDiv = this.panelLegendsEntriesContainer = this._createLegendElement();\n legendsPanel.appendChild(legendsEntriesDiv);\n\n\n // header ?\n if (this.options.panel) {\n var legendsPanelHeader = this.panelLegendsHeaderContainer = this._createLegendsPanelHeaderElement();\n // icone\n var legendsPanelIcon = this._createLegendsPanelIconElement();\n legendsPanelHeader.appendChild(legendsPanelIcon);\n // title\n var legendsPanelTitle = this._createLegendsPanelTitleElement();\n legendsPanelHeader.appendChild(legendsPanelTitle);\n // close picto\n var legendsCloseBtn = this.buttonLegendsClose = this._createLegendsPanelCloseElement();\n legendsPanelHeader.appendChild(legendsCloseBtn);\n legendsPanelDiv.appendChild(legendsPanelHeader);\n }\n\n container.appendChild(legendsPanel);\n\n logger.log(container);\n\n return container;\n }\n\n /**\n * Add events listeners on map (called by setMap)\n *\n * @param {*} map - map\n * @private\n * @todo listener on change:position\n */\n addEventsListeners (map) {\n var self = this;\n this.eventsListeners[\"layer:add\"] = function (e) {\n logger.trace(e);\n // INFO\n // à l'ajout d'une couche, on ajoute l'entrée\n // * dans le DOM\n // * dans la liste des entrées\n // un test est à realiser pour savoir si cette couche possède\n // des meta informations, sinon, on placera une legende par defaut :\n // > pas de légende disponible (au format texte)\n if (!self.add(e.element)) {\n logger.error(\"Layer already added...\");\n return;\n }\n };\n this.eventsListeners[\"layer:remove\"] = function (e) {\n logger.trace(e);\n // INFO\n // à la suppression de la couche, on supprime l'entrée\n // * du DOM\n // * de la liste des entrées\n if (!self.remove(e.element)) {\n logger.error(\"Layer already removed...\");\n return;\n }\n };\n this.eventsListeners[\"layer:change:position\"] = function (e) {\n logger.trace(e);\n // TODO\n // à la modification de l'ordre de la couche, on modifie l'entrée\n // * du DOM\n // * de la liste des entrées\n };\n this.eventsListeners[\"view:change:resolution\"] = function (e) {\n logger.trace(e);\n // à la modification de l'echelle de la carte, on modifie les entrées\n // * du DOM si necessaire\n // * de la liste des entrées si necessaire\n var map = self.getMap();\n for (let j = 0; j < self.legends.length; j++) {\n const legend = self.legends[j];\n\n var infos = self.getMetaInformations(legend.obj);\n if (!infos) {\n continue;\n }\n // conversion resolution vers échelle\n var resolution = map.getView().getResolution() || map.getView().getResolutionForZoom(map.getZoom());\n var scaleDenominator = resolution*3570;\n\n // recherche de la legende en fonction de l'échelle\n var cloneInfoLegends = infos.legends.slice(); //clone\n var bestInfoLegend = cloneInfoLegends[0];\n for (let i = 0; i < cloneInfoLegends.length; ++i) {\n const InfoLegend = cloneInfoLegends[i];\n\n if (!InfoLegend.minScaleDenominator) {\n InfoLegend.minScaleDenominator = 0;\n }\n\n if ( ( scaleDenominator > bestInfoLegend.minScaleDenominator && InfoLegend.minScaleDenominator > bestInfoLegend.minScaleDenominator && InfoLegend.minScaleDenominator < scaleDenominator ) ||\n ( scaleDenominator < bestInfoLegend.minScaleDenominator && InfoLegend.minScaleDenominator < bestInfoLegend.minScaleDenominator ) ) {\n bestInfoLegend = InfoLegend;\n }\n }\n // si pas de changement, on ne met pas à jour de DOM\n if (infos.legends[0] === bestInfoLegend) {\n continue;\n }\n infos.legends = [];\n infos.legends.push(bestInfoLegend);\n\n // mise à jour du DOM\n var newEntry = self._createLegendEntry(infos);\n var oldEntry = legend.dom;\n oldEntry.replaceWith(newEntry);\n\n // mise à jour de l'entrée\n legend.dom = newEntry;\n }\n };\n\n map.getLayers().on(\"add\", this.eventsListeners[\"layer:add\"]);\n map.getLayers().on(\"remove\", this.eventsListeners[\"layer:remove\"]);\n map.getLayers().on(\"change:zIndex\", this.eventsListeners[\"layer:change:position\"]);\n map.getView().on(\"change:resolution\", this.eventsListeners[\"view:change:resolution\"]);\n }\n\n /**\n * Remove events listeners on map (called by setMap)\n * @private\n */\n removeEventsListeners () {\n var map = this.getMap();\n map.getLayers().un(\"add\", this.eventsListeners[\"layer:add\"]);\n map.getLayers().un(\"remove\", this.eventsListeners[\"layer:remove\"]);\n map.getLayers().un(\"change:zIndex\", this.eventsListeners[\"layer:change:position\"]);\n map.getView().un(\"change:resolution\", this.eventsListeners[\"view:change:resolution\"]);\n delete this.eventsListeners[\"layer:add\"];\n delete this.eventsListeners[\"layer:remove\"];\n delete this.eventsListeners[\"layer:change:position\"];\n delete this.eventsListeners[\"view:change:resolution\"];\n }\n\n // ################################################################### //\n // ######################## event dom ################################ //\n // ################################################################### //\n /**\n * ...\n * @param {*} e - ...\n */\n onShowLegendsClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n logger.trace(e);\n var opened = this.buttonLegendsShow.ariaPressed;\n this.collapsed = !(opened === \"true\");\n this.dispatchEvent(\"change:collapsed\");\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n }\n\n};\n\n// on récupère les méthodes de la classe DOM\nObject.assign(Legends.prototype, LegendsDOM);\nObject.assign(Legends.prototype, Widget);\n\nexport default Legends;\n\n// Expose Export as ol.control.Legends (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.Legends = Legends;\n}\n","var TerritoriesDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this.uid) ? id + \"-\" + this.uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPterritories\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show Territories\n *\n * @returns {DOMElement} DOM element\n */\n _createShowTerritoriesPictoElement : function () {\n var self = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowTerritoriesPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowTerritoriesPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-territories fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Sélecteur de territoire\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // Close all results and panels when minimizing the widget\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowTerritoriesClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowTerritoriesClick(e);\n });\n }\n\n return button;\n },\n\n // ################################################################### //\n // ################### Methods of panel container #################### //\n // ################################################################### //\n\n /**\n * Create Container Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createTerritoriesPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPterritoriesPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n return dialog;\n },\n\n _createTerritoriesPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__territories\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createTerritoriesPanelHeaderElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"gpf-panel__header_territories\";\n return container;\n },\n _createTerritoriesPanelIconElement : function () {\n var label = document.createElement(\"label\");\n label.className = \"gpf-btn-header-territories gpf-btn-icon-header-territories\";\n label.title = \"Selecteur de territoires\";\n return label;\n },\n _createTerritoriesPanelTitleElement : function (title) {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__title_territories\";\n div.innerHTML = title;\n return div;\n },\n _createTerritoriesPanelCloseElement : function () {\n var self = this;\n\n var btnClose = document.createElement(\"button\");\n btnClose.id = \"GPterritoriesPanelClose\";\n btnClose.className = \"gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n btnClose.title = \"Fermer le panneau\";\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n btnClose.appendChild(span);\n\n // Link panel close / visibility checkbox\n if (btnClose.addEventListener) {\n btnClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowTerritoriesPicto\")).click();\n self.onCloseTerritoriesClick();\n }, false);\n } else if (btnClose.attachEvent) {\n btnClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowTerritoriesPicto\")).click();\n self.onCloseTerritoriesClick();\n });\n }\n\n return btnClose;\n },\n\n // ################################################################### //\n // ####################### Methods for entries ####################### //\n // ################################################################### //\n\n _createTerritoriesElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"territories-entries gpf-panel__body_territories fr-modal__body\";\n return div;\n },\n\n _createTerritoryEntry : function (o) {\n var self = this;\n const stringToHTML = (str) => {\n var support = function () {\n if (!window.DOMParser) {\n return false;\n }\n var parser = new DOMParser();\n try {\n parser.parseFromString(\"x\", \"text/html\");\n } catch (err) {\n return false;\n }\n return true;\n };\n\n // If DOMParser is supported, use it\n if (support()) {\n var parser = new DOMParser();\n var doc = parser.parseFromString(str, \"text/html\");\n return doc.body;\n }\n\n // Otherwise, fallback to old-school method\n var dom = document.createElement(\"div\");\n dom.innerHTML = str;\n return dom;\n };\n if (o) {\n // test si la vignette est renseignée\n var defaultImage = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiB3aWR0aD0iNTgxLjAwMDAwMHB0IiBoZWlnaHQ9IjM1Ni4wMDAwMDBwdCIgdmlld0JveD0iMCAwIDU4MS4wMDAwMDAgMzU2LjAwMDAwMCIKIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgoKPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsMzU2LjAwMDAwMCkgc2NhbGUoMC4xMDAwMDAsLTAuMTAwMDAwKSIKZmlsbD0iI2I0YjNiMyIgc3Ryb2tlPSJub25lIj4KPHBhdGggZD0iTTAgMTc4MCBsMCAtMTc4MCAyOTA1IDAgMjkwNSAwIDAgMTc4MCAwIDE3ODAgLTI5MDUgMCAtMjkwNSAwIDAKLTE3ODB6Ii8+CjwvZz4KPC9zdmc+Cg==\";\n var thumbnail = o.thumbnail || defaultImage;\n var icon = o.icon || defaultImage;\n var id = o.id.toLowerCase();\n // tile dsfr\n var entry = stringToHTML(`\n
    \n
    \n
    \n

    \n \n

    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n \n \n
    \n
    \n
    \n `);\n // add event click on main div\n var div = entry.firstChild;\n if (div) {\n div.addEventListener(\"click\", (e) => {\n self.onImageTerritoriesClick(e, o.id);\n });\n }\n return entry.firstChild;\n }\n }\n\n};\n\nexport default TerritoriesDOM;\n","// import CSS\nimport \"../../CSS/Controls/Territories/GPFterritories.css\";\n\n// import OpenLayers\nimport Control from \"../Control\";\nimport Widget from \"../Widget\";\nimport { transformExtent as olTransformExtentProj } from \"ol/proj\";\n\n// import local\nimport Utils from \"../../Utils/Helper\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Draggable from \"../../Utils/Draggable\";\n\nimport TerritoriesJson from \"./Territories.json\";\n\n// DOM\nimport TerritoriesDOM from \"./TerritoriesDOM\";\n\nvar logger = Logger.getLogger(\"territories\");\n\n/**\n * @classdesc\n *\n * Territories map widget\n *\n * @constructor\n * @alias ol.control.Territories\n * @type {ol.control.Territories}\n * @extends {ol.control.Control}\n * @param {Object} options - options for function call.\n *\n * @fires custom:action\n * @example\n * var territories = new ol.control.Territories({\n * collapsed: true,\n * panel: true,\n * auto: true\n * });\n * map.addControl(territories);\n *\n * or/and\n *\n * var territories = new ol.control.Territories({});\n * territories.setTerritory({id: \"MTQ\", title: \"Martinique\", description: \"\", bbox: [], thumbnail: \"data:image/png;base64,...\"});\n * territories.setTerritory({id: \"GLP\", title: \"Guadeloupe\", description: \"\", bbox: [], thumbnail: \"http://...\"});\n * map.addControl(territories);\n */\nvar Territories = class Territories extends Control {\n\n /**\n * See {@link ol.control.Territories}\n * @module Territories\n * @alias module:~controls/Territories\n * @param {Object} [options] - options\n * @example\n * import Territories from \"gpf-ext-ol/controls/Territories\"\n * ou\n * import { Territories } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof Territories)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"Territories\";\n // initialisation du composant\n this.initialize(options);\n\n // Territories main DOM container\n this.container = this.initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this.container) : this.element = this.container;\n\n return this;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this.panelTerritoriesContainer,\n this.panelTerritoriesHeaderContainer,\n map.getTargetElement()\n );\n }\n // mode \"collapsed\"\n if (!this.collapsed) {\n this.buttonTerritoriesShow.setAttribute(\"aria-pressed\", true);\n }\n\n // Ajout des territoires par defaut\n if (this.auto) {\n for (let index = 0; index < TerritoriesJson.length; index++) {\n const territory = TerritoriesJson[index];\n this.setTerritory(territory);\n }\n }\n } else {\n // some stuff when remove widget\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n // ################################################################### //\n // ################### getters / setters ############################# //\n // ################################################################### //\n\n /**\n * Add a territory\n *\n * @param {Object} territory - territory\n * @returns {Boolean} - true|false\n * @public\n * @example\n * territories.setTerritory ({\n * id: \"MTQ\",\n * title: \"Martinique\",\n * description: \"\",\n * bbox: [minx, miny, maxx, maxy],\n * thumbnail: \"data:image/png;base64,...\"\n * });\n */\n setTerritory (territory) {\n // Test if a territory already exist\n var founded = this.territories.some(e => e.data.id === territory.id);\n if (territory && !founded) {\n var entry = this._createTerritoryEntry(territory);\n if (entry) {\n this.panelTerritoriesEntriesContainer.appendChild(entry);\n this.territories.push({\n data : territory,\n dom : entry\n });\n return true;\n }\n }\n return false;\n }\n\n /**\n * Remove a territory\n *\n * @param {String} territory - territory id (FRA, MTQ, ...)\n * @returns {Boolean} - true|false\n * @public\n * @example\n * territories.removeTerritory(\"MTQ\"); // id du territoire\n */\n removeTerritory (territory) {\n var found = false;\n if (territory) {\n for (let i = 0; i < this.territories.length; i++) {\n const o = this.territories[i];\n if (o.data.id === territory) {\n this.territories[i].dom.remove();\n this.territories.splice(i, 1);\n found = true;\n break;\n }\n }\n }\n return found;\n }\n\n /**\n * Set collapse\n *\n * @param {Boolean} collapsed - true|false\n * @todo ...\n * @public\n */\n setCollapse (collapsed) {\n if (collapsed === undefined) {\n logger.log(\"[ERROR] Territory:setCollapsed - missing collapsed parameter\");\n return;\n }\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n if (collapsed) {\n document.getElementById(\"GPterritoriesPanelClose\").click();\n } else {\n this.buttonTerritoriesShow.click();\n }\n this.collapsed = collapsed;\n }\n\n /**\n * Mode reduit des tuiles (uniquement le nom du territoire)\n *\n * @param {*} reduce - true|false\n * @public\n */\n setReduce (reduce) {\n if (reduce) {\n this.panelTerritoriesEntriesContainer.classList.add(\"tiles-reduce\");\n } else {\n this.panelTerritoriesEntriesContainer.classList.remove(\"tiles-reduce\");\n }\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // #################### privates methods ############################# //\n // ################################################################### //\n\n /**\n * Initialize Territories control (called by Territories constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n this.uid = options.id || SelectorID.generate();\n\n // set default options\n this.options = {\n collapsed : true,\n draggable : false,\n panel : true, // titre\n title : \"Sélectionner un territoire\",\n auto : false, // chargement auto des territoires par defaut\n thumbnail : false, // imagette des territoires\n reduce : false, // tuiles reduites par defaut\n tiles : 3, // nombre de tuiles affichables, 0 = toutes !\n territories : [] // TODO à spécifier...\n };\n\n // merge with user options\n Utils.assign(this.options, options);\n\n /** {Boolean} specify if control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n /** {Boolean} specify if control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n /** {Boolean} specify if we load the list of territories by default */\n this.auto = this.options.auto;\n /**\n * {Array} list of object territories\n * @example\n * {\n * dom : { HTMLelment },\n * data : {\n * id: \"MTQ\", title: \"Martinique\", description: \"\", bbox: [minx, miny, maxx, maxy], thumbnail: \"data:image/png;base64,...\"\n * }\n * }\n */\n this.territories = [];\n\n this.buttonTerritoriesShow = null;\n this.panelTerritoriesContainer = null;\n this.panelTerritoriesHeaderContainer = null; // usefull for the dragNdrop\n this.buttonTerritoriesClose = null;\n\n this.panelTerritoriesEntriesContainer = null;\n }\n\n /**\n * Create control main container (DOM initialize)\n *\n * @returns {DOMElement} DOM element\n * @private\n */\n initContainer () {\n // create main container\n var container = this._createMainContainerElement();\n\n var picto = this.buttonTerritoriesShow = this._createShowTerritoriesPictoElement();\n container.appendChild(picto);\n\n // panel\n var territoriesPanel = this.panelTerritoriesContainer = this._createTerritoriesPanelElement();\n territoriesPanel.classList.add(\"tiles-direction\");\n territoriesPanel.classList.add(\"tiles-\" + this.options.tiles);\n var territoriesPanelDiv = this._createTerritoriesPanelDivElement();\n territoriesPanel.appendChild(territoriesPanelDiv);\n\n // container for the custom code\n var territoriesEntriesDiv = this.panelTerritoriesEntriesContainer = this._createTerritoriesElement();\n territoriesEntriesDiv.classList.add(\"tiles-direction\");\n territoriesEntriesDiv.classList.add(\"tiles-\" + this.options.tiles);\n if (this.options.reduce) {\n territoriesEntriesDiv.classList.add(\"tiles-reduce\");\n }\n if (this.options.thumbnail) {\n territoriesEntriesDiv.classList.add(\"tiles-thumbnail\");\n } else {\n territoriesEntriesDiv.classList.add(\"tiles-icon\");\n }\n territoriesPanel.appendChild(territoriesEntriesDiv);\n\n\n // header ?\n if (this.options.panel) {\n var territoriesPanelHeader = this.panelTerritoriesHeaderContainer = this._createTerritoriesPanelHeaderElement();\n // icone\n var territoriesPanelIcon = this._createTerritoriesPanelIconElement();\n territoriesPanelHeader.appendChild(territoriesPanelIcon);\n // title\n var territoriesPanelTitle = this._createTerritoriesPanelTitleElement(this.options.title);\n territoriesPanelHeader.appendChild(territoriesPanelTitle);\n // close picto\n var territoriesCloseBtn = this.buttonTerritoriesClose = this._createTerritoriesPanelCloseElement();\n territoriesPanelHeader.appendChild(territoriesCloseBtn);\n territoriesPanelDiv.appendChild(territoriesPanelHeader);\n }\n\n container.appendChild(territoriesPanel);\n\n logger.log(container);\n\n return container;\n }\n\n // ################################################################### //\n // ######################## event dom ################################ //\n // ################################################################### //\n\n /**\n * ...\n * @param {*} e - ...\n */\n onShowTerritoriesClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n logger.trace(e);\n this.collapsed = !this.collapsed;\n }\n\n /**\n * ...\n * @param {*} e - ...\n */\n onCloseTerritoriesClick (e) {\n logger.trace(e);\n }\n\n /**\n * ...\n * @param {*} e - ...\n * @param {*} id - ...\n * @todo ...\n */\n onImageTerritoriesClick (e, id) {\n logger.trace(e, id);\n var territory = this.territories.find(e => e.data.id === id);\n if (territory) {\n var zoom = territory.data.zoom;\n var bbox = territory.data.bbox || []; // left, bottom, right, top\n if (!bbox.length) {\n return;\n }\n\n var map = this.getMap();\n var proj = map.getView().getProjection().getCode();\n var extent = olTransformExtentProj(bbox, \"EPSG:4326\", proj);\n map.getView().fit(extent, map.getSize());\n if (zoom) {\n map.getView().setZoom(zoom);\n }\n this.setCollapse(true);\n }\n }\n\n};\n\n// on récupère les méthodes de la classe DOM\nObject.assign(Territories.prototype, TerritoriesDOM);\nObject.assign(Territories.prototype, Widget);\n\nexport default Territories;\n\n// Expose Export as ol.control.Territories (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.Territories = Territories;\n}\n","import checkDsfr from \"../Utils/CheckDsfr\";\n\nvar ControlListDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPcontrolList\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################# Methods to display Main Panel ################### //\n // ################################################################### //\n\n /**\n * Show control\n * see event !\n *\n * @returns {DOMElement} DOM element\n */\n _createShowControlListPictoElement : function () {\n // contexte d'execution\n var context = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n span.innerText = \"+\";\n button.id = this._addUID(\"GPshowControlListPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowControlListPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-controllist fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Tous mes outils\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // gestionnaire d'evenement :\n // on ouvre le menu\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowControlListPanelClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n context.onShowControlListPanelClick(e);\n });\n }\n\n return button;\n },\n\n\n // ################################################################### //\n // ################## Methods to display Inputs Panel ################ //\n // ################################################################### //\n\n /**\n * Create Container Panel\n * @returns {DOMElement} DOM element\n */\n _createControlListPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPcontrolListPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n return dialog;\n },\n\n _createControlListPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createControlListPanelHeaderElement : function () {\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n var div = document.createElement(\"div\");\n div.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n div.innerHTML = \"Mes outils\";\n container.appendChild(div);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPcontrolListPanelClose\");\n divClose.className = \"GPpanelClose GPcontrolListPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowControlListPicto\")).click();\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowControlListPicto\")).click();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n\n /**\n * Create Content Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createControlListPanelContentElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"gpf-panel__content fr-modal__content\";\n return container;\n },\n\n /**\n * Create Footer Panel\n *\n * @param {DOMElement} controlCatalogelement - DOM element\n * @returns {DOMElement} DOM element\n */\n _createControlListPanelFooterElement : function (controlCatalogelement) {\n var container = document.createElement(\"div\");\n container.className = \"GPpanelFooter gpf-panel__footer fr-modal__footer\";\n var addToolsBtn = document.createElement(\"button\");\n addToolsBtn.classList.add(\"gpf-btn\", \"gpf-btn--tertiary\", \"fr-btn\", \"fr-btn--tertiary\");\n addToolsBtn.innerText = \"+ Ajouter plus d'outils\";\n addToolsBtn.addEventListener(\"click\", function () {\n controlCatalogelement.click();\n });\n container.appendChild(addToolsBtn);\n return container;\n },\n\n /**\n * Create div for control\n *\n * @param {ol.Control} control control to add in the panel\n * @returns {DOMElement} DOM element\n */\n _createControlListPanelControl : function (control) {\n let controlContainer;\n try {\n controlContainer = control.getContainer();\n } catch (e) {\n controlContainer = control.container;\n }\n var container = document.createElement(\"div\");\n var btn = controlContainer.querySelector(\".GPshowOpen\").cloneNode();\n btn.id = btn.id + \"-controllist\";\n btn.classList.add(\"inside-control-list\");\n container.appendChild(btn);\n var divText = document.createElement(\"div\");\n var spanTitle = document.createElement(\"span\");\n divText.appendChild(spanTitle);\n if (controlContainer.querySelector(\".GPshowOpen\").ariaLabel) {\n spanTitle.innerText = controlContainer.querySelector(\".GPshowOpen\").ariaLabel;\n } else if (controlContainer.querySelector(\".GPpanelTitle\")) {\n spanTitle.innerText = controlContainer.querySelector(\".GPpanelTitle\").innerText;\n } else if (controlContainer.querySelector(\"[class^='gpf-btn-header-']\")) {\n spanTitle.innerText = controlContainer.querySelector(\"[class^='gpf-btn-header-']\").title;\n }\n if (control.description) {\n var spanDescription = document.createElement(\"span\");\n spanDescription.innerText = control.description;\n divText.appendChild(spanDescription);\n }\n container.appendChild(divText);\n\n container.addEventListener(\"click\", function () {\n controlContainer.querySelector(\".GPshowOpen\").click();\n });\n return container;\n },\n\n};\n\nexport default ControlListDOM;\n","// import CSS\nimport \"../../CSS/Controls/ControlList/GPFcontrolList.css\";\n// import OpenLayers\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\n\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Utils from \"../../Utils/Helper\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Draggable from \"../../Utils/Draggable\";\nimport Interactions from \"../Utils/Interactions\";\n// import local with ol dependencies\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\n// DOM\nimport ControlListDOM from \"./ControlListDOM\";\n\nvar logger = Logger.getLogger(\"controlList\");\n\n/**\n * @classdesc\n *\n * ControlList Control.\n *\n * @constructor\n * @alias ol.control.ControlList\n * @type {ol.control.ControlList}\n * @extends {ol.control.ControlList}\n * @param {Object} options - ControlList control options\n */\nvar ControlList = class ControlList extends Control {\n\n /**\n * See {@link ol.control.ControlList}\n * @module ControlList\n * @alias module:~controls/ControlList\n * @param {*} options - options\n * @example\n * import ControlList from from \"gpf-ext-ol/controls/ControlList\"\n * ou\n * import { ControlList } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof ControlList)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n if (options.controlCatalogElement) {\n this.controlCatalogElement = options.controlCatalogElement;\n } else {\n this.controlCatalogElement = null;\n }\n\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"ControlList\";\n\n // initialisation du composant\n this.initialize(options);\n // // Widget main DOM container\n this._container = this._initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this._container) : this.element = this._container;\n\n return this;\n }\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this._ControlListPanelContainer,\n this._ControlListPanelHeaderContainer,\n map.getTargetElement()\n );\n }\n\n // mode \"collapsed\"\n if (!this.collapsed) {\n this._pictoControlListButton.setAttribute(\"aria-pressed\", true);\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Returns true if widget is collapsed (minimized), false otherwise\n *\n * @returns {Boolean} collapsed - true if widget is collapsed\n */\n getCollapsed () {\n return this.collapsed;\n }\n\n /**\n * Collapse or display widget main container\n *\n * @param {Boolean} collapsed - True to collapse widget, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.log(\"[ERROR] ControlList:setCollapsed - missing collapsed parameter\");\n return;\n }\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n if (collapsed) {\n document.getElementById(\"GPcontrolListPanelClose-\" + this._uid).click();\n } else {\n this._pictoIsoButton.click();\n }\n this.collapsed = collapsed;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this._container;\n }\n\n /**\n * Clean UI : reinit control\n */\n clean () {\n this._clearIsoInputs();\n // INFO\n // le comportement est surchargé, ceci supprime la couche !?\n // cf. _createIsoPanelFormPointElement()\n this._originPoint.clearResults();\n document.getElementById(\"GPlocationPoint_1-\" + this._uid).style.cssText = \"\";\n document.getElementById(\"GPlocationOriginCoords_1-\" + this._uid).value = \"\";\n document.getElementById(\"GPlocationOrigin_1-\" + this._uid).value = \"\";\n document.getElementById(\"GPlocationPoint_1-\" + this._uid).style.cssText = \"\";\n document.getElementById(\"GPlocationOriginPointer_1-\" + this._uid).checked = false;\n document.getElementById(\"GPlocationOrigin_1-\" + this._uid).className = \"GPlocationOriginVisible gpf-visible\";\n document.getElementById(\"GPlocationOriginCoords_1-\" + this._uid).className = \"GPlocationOriginHidden gpf-hidden\";\n this._currentIsoResults = null;\n this.setLayer();\n }\n\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize control (called by constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n // collapsed\n if (options.collapsed === \"true\") {\n options.collapsed = true;\n }\n if (options.collapsed === \"false\") {\n options.collapsed = false;\n }\n\n // set default options\n this.options = {\n collapsed : true,\n draggable : false,\n };\n\n // merge with user options\n Utils.assign(this.options, options);\n\n /** {Boolean} specify if control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n /** {Boolean} specify if control is draggable (true) or not (false) */\n this.draggable = this.options.draggable;\n\n // identifiant du contrôle : utile pour suffixer les identifiants CSS (pour gérer le cas où il y en a plusieurs dans la même page)\n this._uid = this.options.id || SelectorID.generate();\n }\n\n // ################################################################### //\n // ######################## DOM initialize ########################### //\n // ################################################################### //\n\n /**\n * initialize component container (DOM)\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initContainer () {\n // creation du container principal\n var container = this._createMainContainerElement();\n\n var picto = this._pictoControlListButton = this._createShowControlListPictoElement();\n container.appendChild(picto);\n\n // panneau\n var panel = this._ControlListPanelContainer = this._createControlListPanelElement();\n var panelDiv = this._createControlListPanelDivElement();\n panel.appendChild(panelDiv);\n\n // header\n var header = this._ControlListPanelHeaderContainer = this._createControlListPanelHeaderElement();\n panelDiv.appendChild(header);\n\n // content\n var content = this._ControlListPanelContentContainer = this._createControlListPanelContentElement();\n panelDiv.appendChild(content);\n\n if (this.controlCatalogElement) {\n // footer\n var footer = this._createControlListPanelFooterElement(this.controlCatalogElement);\n panelDiv.appendChild(footer);\n }\n\n container.appendChild(panel);\n return container;\n }\n\n // ################################################################### //\n // ####################### handlers events to dom #################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on 'GPshowControlListPicto' picto\n * (cf. this._createShowControlListPictoElement),\n *\n * @param { event } e évènement associé au clic\n * @private\n */\n onShowControlListPanelClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n // on supprime toutes les interactions\n Interactions.unset(map);\n var opened = this._pictoControlListButton.ariaPressed;\n this.collapsed = !(opened === \"true\");\n // on génère nous même l'evenement OpenLayers de changement de propriété\n // (utiliser ol.control.ControlList.on(\"change:collapsed\", function ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n if (!this.collapsed) {\n const controls = this.getMap().getControls().getArray();\n controls.forEach(control => {\n if (control.listable) {\n let element = this._createControlListPanelControl(control);\n this._ControlListPanelContentContainer.appendChild(element);\n }\n });\n } else {\n this._ControlListPanelContentContainer.innerHTML = \"\";\n }\n }\n\n};\n\n// on récupère les méthodes de la classe commune ControlList\nObject.assign(ControlList.prototype, ControlListDOM);\nObject.assign(ControlList.prototype, Widget);\n\nexport default ControlList;\n\n// Expose ControlList as ol.control.ControlList (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.ControlList = ControlList;\n}\n","const stringToHTML = (str) => {\n var support = function () {\n if (!window.DOMParser) {\n return false;\n }\n var parser = new DOMParser();\n try {\n parser.parseFromString(\"x\", \"text/html\");\n } catch (err) {\n return false;\n }\n return true;\n };\n\n // If DOMParser is supported, use it\n if (support()) {\n var parser = new DOMParser();\n var doc = parser.parseFromString(str, \"text/html\");\n return doc.body;\n }\n\n // Otherwise, fallback to old-school method\n var dom = document.createElement(\"div\");\n dom.innerHTML = str;\n return dom;\n};\n\nvar CatalogDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this.uid) ? id + \"-\" + this.uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPcatalog\");\n container.className = \"GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * Show Catalog\n *\n * @returns {DOMElement} DOM element\n */\n _createShowCatalogPictoElement : function () {\n var self = this;\n\n var button = document.createElement(\"button\");\n // INFO: Ajout d'une SPAN pour enlever des marges de 6px dans CHROMIUM (?!)\n var span = document.createElement(\"span\");\n button.appendChild(span);\n button.id = this._addUID(\"GPshowCatalogPicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowCatalogPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-catalog fr-btn fr-btn--tertiary\";\n button.setAttribute(\"aria-label\", \"Catalogue de données\");\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n button.setAttribute(\"type\", \"button\");\n\n // Close all results and panels when minimizing the widget\n if (button.addEventListener) {\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowCatalogClick(e);\n });\n } else if (button.attachEvent) {\n button.attachEvent(\"onclick\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n self.onShowCatalogClick(e);\n });\n }\n\n return button;\n },\n\n // ################################################################### //\n // ################### Methods of panel container #################### //\n // ################################################################### //\n\n /**\n * Create Container Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createCatalogPanelElement : function () {\n var dialog = document.createElement(\"dialog\");\n dialog.id = this._addUID(\"GPcatalogPanel\");\n dialog.className = \"GPpanel gpf-panel fr-modal\";\n\n return dialog;\n },\n\n _createCatalogPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n _createCatalogPanelContentDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__content fr-modal__content\";\n return div;\n },\n\n /**\n * Create Header Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createCatalogPanelHeaderElement : function () {\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n return container;\n },\n _createCatalogPanelTitleElement : function (title) {\n var div = document.createElement(\"div\");\n div.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n div.innerHTML = title;\n return div;\n },\n _createCatalogPanelCloseElement : function () {\n var self = this;\n\n var btnClose = document.createElement(\"button\");\n btnClose.id = this._addUID(\"GPcatalogPanelClose\");\n btnClose.className = \"GPpanelClose GPcatalogPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n btnClose.title = \"Fermer le panneau\";\n\n // Link panel close / visibility checkbox\n if (btnClose.addEventListener) {\n btnClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPshowCatalogPicto\")).click();\n self.onCloseCatalogClick();\n }, false);\n } else if (btnClose.attachEvent) {\n btnClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPshowCatalogPicto\")).click();\n self.onCloseCatalogClick();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n btnClose.appendChild(span);\n\n return btnClose;\n },\n\n // ################################################################### //\n // ####################### Methods for panel ######################### //\n // ################################################################### //\n\n _createCatalogContentDivElement : function () {\n var container = stringToHTML(`
    `);\n return container.firstChild;\n },\n _createCatalogContentTitleElement : function (title) {\n var container = stringToHTML(`\n \n
    \n
    \n
    ${title}
    \n
    \n
    \n `);\n return container.firstChild;\n },\n _createCatalogContentSearchElement : function () {\n var strContainer = `\n \n \n
    \n
    \n \n \n \n
    \n
    \n `;\n var container = stringToHTML(strContainer);\n\n // ajout du shadow DOM pour creer les listeners\n const shadow = container.attachShadow({ mode : \"open\" });\n shadow.innerHTML = strContainer.trim();\n\n // event listener sur le DOM\n var button = shadow.getElementById(\"search-button\");\n if (button) {\n button.addEventListener(\"click\", () => {\n this.onSearchCatalogButtonClick();\n });\n }\n\n var input = shadow.getElementById(\"search-input\");\n if (input) {\n input.addEventListener(\"search\", () => {\n this.onSearchCatalogInputChange();\n });\n }\n\n return shadow;\n },\n /**\n * Create Waiting Panel\n *\n * @returns {DOMElement} DOM element\n */\n _createCatalogWaitingElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPcatalogCalcWaitingContainer\");\n // /* GPwaitingContainer */\n // /* gpf-waiting */\n div.className = \"GPwaitingContainerHidden gpf-waiting--hidden\";\n\n var p = document.createElement(\"p\");\n p.className = \"GPwaitingContainerInfo gpf-waiting_info\";\n p.innerHTML = \"Recherche en cours...\";\n\n div.appendChild(p);\n\n return div;\n },\n _createCatalogContentCategoriesTabs : function (categories) {\n var strTabButtons = \"\";\n var tmplTabButton = (i, id, title, selected) => {\n var className = \"GPtabButton fr-tabs__tab\";\n var value = \"false\";\n var tabindex = -1;\n if (selected) {\n className = \"GPtabButton GPtabButtonActive fr-tabs__tab\";\n value = \"true\";\n tabindex = 0;\n }\n // le listener sur le bouton permet de récuperer à partir de l'ID la catégorie (id) :\n // > \"tabbutton-${i}_${id}\".split('_')[1]\n // et l'attribut 'aria-controls' permet de retrouver le panneau du contenu\n return `\n
  • \n \n
  • \n `;\n };\n\n var strSectionRadios = \"\";\n var tmplSectionRadio = (section) => {\n var checked = (section.default) ? \"checked\" : \"\";\n return `\n \n
    \n
    \n \n \n
    \n
    \n `;\n };\n var tmplSectionRadios = (id, sections) => {\n // chaque sous categories à son propre container de couches\n // et son bouton radio de groupe\n var strTabContents = \"\";\n for (let j = 0; j < sections.length; j++) {\n const section = sections[j];\n strSectionRadios += tmplSectionRadio(section);\n var hidden = \"\";\n if (!section.default) {\n hidden = \"GPelementHidden gpf-hidden\";\n }\n strTabContents += `
    `;\n }\n return `\n \n
    \n ${strSectionRadios}\n
    \n
    \n ${strTabContents}\n `;\n };\n\n var strTabPanelContents = \"\";\n var tmplTabPanelContent = (i, id, selected, sections) => {\n var className = \"GPtabContent fr-tabs__panel\";\n var tabindex = -1;\n if (selected) {\n className = \"GPtabContent GPtabContentSelected fr-tabs__panel fr-tabs__panel--selected\";\n tabindex = 0;\n }\n var strTabContent = \"
    \";\n if (sections) {\n strTabContent = tmplSectionRadios(id, sections);\n }\n // le listener sur le panneau permet de récuperer à partir de l'ID la catégorie (id) :\n // > \"tabpanel-${i}-panel_${id}}\".split('_')[1]\n return `\n \n
    \n ${strTabContent}\n
    \n `;\n };\n\n for (let i = 0; i < categories.length; i++) {\n const category = categories[i];\n strTabButtons += tmplTabButton(i, category.id, category.title, category.default);\n strTabPanelContents += tmplTabPanelContent(i, category.id, category.default, category.items);\n }\n\n var strContainer = `\n \n
    \n
    \n
      \n ${strTabButtons}\n
    \n ${strTabPanelContents}\n
    \n
    \n `;\n var container = stringToHTML(strContainer.trim());\n\n // ajout du shadow DOM pour creer les listeners\n const shadow = container.attachShadow({ mode : \"open\" });\n shadow.innerHTML = strContainer.trim();\n\n // event listener sur le DOM\n var panelSections = shadow.querySelectorAll(\"[role=\\\"tabpanel-section\\\"]\");\n var radios = shadow.querySelectorAll(\"[name=\\\"radio-inline\\\"]\");\n if (radios) {\n radios.forEach((radio) => {\n radio.addEventListener(\"change\", (e) => {\n for (let j = 0; j < panelSections.length; j++) {\n const section = panelSections[j];\n section.classList.add(\"gpf-hidden\");\n section.classList.add(\"GPelementHidden\");\n }\n var panel = document.getElementById(e.target.getAttribute(\"aria-controls\"));\n panel.classList.remove(\"gpf-hidden\");\n panel.classList.remove(\"GPelementHidden\");\n });\n });\n }\n var panelContents = shadow.querySelectorAll(\"[role=\\\"tabpanel\\\"]\");\n var buttons = shadow.querySelectorAll(\"[role=\\\"tabbutton\\\"]\");\n if (buttons) {\n buttons.forEach((btn) => {\n btn.addEventListener(\"click\", (e) => {\n // gestion de l'affichage\n\n // modifier les autres buttons :\n // tabindex=-1\n // aria-selected=false\n for (let i = 0; i < buttons.length; i++) {\n const button = buttons[i];\n button.setAttribute(\"tabindex\", -1);\n button.ariaSelected = false;\n button.classList.remove(\"GPtabButtonActive\");\n }\n // modif tabindex=0\n e.target.setAttribute(\"tabindex\", 0);\n // modif aria-selected=true\n e.target.ariaSelected = true;\n e.target.classList.add(\"GPtabButtonActive\");\n // modifier les autres panneaux :\n // supp class fr-tabs__panel--selected\n // modif tabindex=-1\n for (let j = 0; j < panelContents.length; j++) {\n const panel = panelContents[j];\n panel.setAttribute(\"tabindex\", -1);\n panel.classList.remove(\"fr-tabs__panel--selected\");\n panel.classList.remove(\"GPtabContentSelected\");\n panel.classList.add(\"gpf-hidden\");\n panel.classList.add(\"GPelementHidden\");\n }\n // recup id du panneau avec aria-controls\n // ajouter class fr-tabs__panel--selected\n // modif tabindex=0\n var panel = document.getElementById(e.target.getAttribute(\"aria-controls\"));\n panel.setAttribute(\"tabindex\", 0);\n panel.classList.add(\"fr-tabs__panel--selected\");\n panel.classList.add(\"GPtabContentSelected\");\n panel.classList.remove(\"gpf-hidden\");\n panel.classList.remove(\"GPelementHidden\");\n // appel\n this.onSelectCatalogTabClick(e);\n });\n });\n }\n\n return shadow;\n },\n _createCatalogContentCategoryTabContent : function (category, layersFiltered) {\n var layers = Object.values(layersFiltered); // object -> array\n\n var strElements = \"\";\n var tmplElement = (i, name, title, service, categoryId) => {\n // FIXME doit on l'utiliser le champ description en HTML ?\n\n // le listener sur l'input permet de récuperer à partir de l'ID\n // la paire name/service pour identifier la couche:\n // > \"checkboxes-${categoryId}-${i}_${name}-${service}\".split('_')[1]\n return `\n
    \n
    \n \n \n
    \n
    \n
    \n `;\n };\n\n // cf. https://www.systeme-de-design.gouv.fr/composants-et-modeles/composants/accordeon\n var tmplSection = (id, categoryId, title, count, data) => {\n // INFO\n // - la maquette ne possède pas de compteur de couches\n // - hack pour le thème dsfr, on masque l'icone collapse du thème classic\n return `\n \n
    \n

    \n \n

    \n
    \n ${data}\n
    \n
    \n `;\n };\n\n // INFO\n // les couches par catégorie sont filtrées au préalable\n // on ajoute la repartition par section des couches !\n var isSection = category.section;\n if (isSection) {\n // on procède à un tri\n // ex. tri sur le champ 'thematic'\n layers = layers.sort((a, b) => {\n return a[category.filter.field].localeCompare(b[category.filter.field]);\n });\n }\n\n var sections = {};\n for (let i = 0; i < layers.length; i++) {\n const layer = layers[i];\n // INFO\n // a t on des sections ?\n // - oui, si elle correspond au filtre, on ajoute la couche dans la section\n // sinon, on ecarte cette couche ou on la met dans la section \"Autres\"\n // - non, on ajoute directement la couche\n if (isSection) {\n var title = layer[category.filter.field];\n if (title) {\n if (!sections.hasOwnProperty(title)) {\n sections[title] = \"\";\n }\n sections[title] += tmplElement(i, layer.name, layer.title, layer.service, category.id);\n }\n } else {\n strElements += tmplElement(i, layer.name, layer.title, layer.service, category.id);\n }\n }\n\n if (isSection) {\n for (const title in sections) {\n if (Object.prototype.hasOwnProperty.call(sections, title)) {\n const data = sections[title];\n var count = [...data.matchAll(/fr-fieldset__element/g)].length;\n var id = Math.abs(Array.from(title).reduce((s, c) => Math.imul(31, s) + c.charCodeAt(0) | 0, 0));\n strElements += tmplSection(id, category.id, title, count, data);\n }\n }\n }\n var strContainer = `\n \n
    \n ${strElements}\n
    \n `;\n var container = stringToHTML(strContainer);\n\n // ajout du shadow DOM pour creer les listeners\n const shadow = container.attachShadow({ mode : \"open\" });\n shadow.innerHTML = strContainer.trim();\n\n // event listener sur le DOM\n var inputName = `checkboxes-${category.id}`;\n var inputs = shadow.querySelectorAll(\"[name=\" + \"\\\"\" + inputName + \"\\\"]\");\n if (inputs) {\n inputs.forEach((input) => {\n input.addEventListener(\"click\", (e) => {\n // appel gestionnaire d'evenement pour traitement :\n // - ajout ou pas de la couche à la carte\n // - envoi d'un evenement avec la conf tech\n this.onSelectCatalogEntryClick(e);\n });\n });\n }\n var buttonName = `button-collapse-${category.id}`;\n var buttons = shadow.querySelectorAll(\"[role=\" + \"\\\"\" + buttonName + \"\\\"]\");\n if (buttons) {\n buttons.forEach((button) => {\n button.addEventListener(\"click\", (e) => {\n e.target.ariaExpanded = !(e.target.ariaExpanded === \"true\");\n var collapse = document.getElementById(e.target.getAttribute(\"aria-controls\"));\n if (!collapse) {\n return;\n }\n if (e.target.ariaExpanded === \"true\") {\n collapse.classList.add(\"fr-collapse--expanded\");\n collapse.classList.remove(\"GPelementHidden\");\n } else {\n collapse.classList.remove(\"fr-collapse--expanded\");\n collapse.classList.add(\"GPelementHidden\");\n }\n }, false);\n });\n }\n var spanName = `button-icon-collapse-${category.id}`;\n var spans = shadow.querySelectorAll(\"[role=\" + \"\\\"\" + buttonName + \"\\\"]\");\n if (spans) {\n spans.forEach((span) => {\n span.addEventListener(\"click\", (e) => {\n e.target.parentElement.click();\n });\n });\n }\n return shadow;\n }\n\n};\n\nexport default CatalogDOM;\n","// import CSS\nimport \"../../CSS/Controls/Catalog/GPFcatalog.css\";\n\n// import OpenLayers\nimport Widget from \"../Widget\";\nimport Control from \"../Control\";\n\n// import local\nimport Utils from \"../../Utils/Helper\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Draggable from \"../../Utils/Draggable\";\nimport Config from \"../../Utils/Config\";\n\n// import local des layers\nimport GeoportalWFS from \"../../Layers/LayerWFS\";\nimport GeoportalWMS from \"../../Layers/LayerWMS\";\nimport GeoportalWMTS from \"../../Layers/LayerWMTS\";\nimport GeoportalMapBox from \"../../Layers/LayerMapBox\";\n\n// DOM\nimport CatalogDOM from \"./CatalogDOM\";\n\nvar logger = Logger.getLogger(\"widget\");\n\n/**\n * @classdesc\n *\n * Catalog Data\n *\n * @constructor\n * @alias ol.control.Catalog\n * @type {ol.control.Catalog}\n * @extends {ol.control.Control}\n * @param {Object} options - options for function call.\n *\n * @fires catalog:loaded\n * @fires catalog:layer:add\n * @fires catalog:layer:remove\n * @see schema : https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/doc/schema.json\n * @see jsdoc : https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/doc/schema.jsdoc\n * @example\n * var widget = new ol.control.Catalog({\n * collapsed : true,\n * draggable : false,\n * titlePrimary : \"\",\n * titleSecondary : \"Gérer vos couches de données\",\n * layerLabel : \"title\",\n * layerFilter : [],\n * search : {\n * display : true,\n * criteria : [\n * \"name\",\n * \"title\",\n * \"description\"\n * ]\n * },\n * addToMap : true,\n * categories : [\n * {\n * title : \"Données\",\n * id : \"data\",\n * default : true,\n * filter : null\n * // sous categories\n * // items : [\n * // {\n * // title : \"\",\n * // default : true,\n * // filter : {\n * // field : \"\",\n * // value : \"\"\n * // }\n * // }\n * // ]\n * }\n * ],\n * configuration : {\n * type : \"json\", // type:\"service\"\n * urls : [ // data:{}\n * \"https://raw.githubusercontent.com/IGNF/cartes.gouv.fr-entree-carto/main/public/data/layers.json\",\n * \"https://raw.githubusercontent.com/IGNF/cartes.gouv.fr-entree-carto/main/public/data/edito.json\"\n * ]\n * }\n * });\n * widget.on(\"catalog:loaded\", (e) => { console.log(e.data); });\n * widget.on(\"catalog:layer:add\", (e) => { console.log(e); });\n * widget.on(\"catalog:layer:remove\", (e) => { console.log(e); });\n * map.addControl(widget);\n *\n * @todo filtrage des couches\n * @todo type:service\n * @todo validation du schema\n */\nvar Catalog = class Catalog extends Control {\n\n /**\n * See {@link ol.control.Catalog}\n * @module Catalog\n * @alias module:~controls/Catalog\n * @param {Object} [options] - options\n * @example\n * import Catalog from \"gpf-ext-ol/controls/Catalog\"\n * ou\n * import { Catalog } from \"gpf-ext-ol\"\n *\n * var widget = new Catalog({\n * collapsed : true,\n * draggable : false,\n * titlePrimary : \"\",\n * titleSecondary : \"Gérer vos couches de données\",\n * layerLabel : \"title\",\n * layerFilter : [],\n * search : {\n * display : true,\n * criteria : [\n * \"name\",\n * \"title\",\n * \"description\"\n * ]\n * },\n * addToMap : true,\n * categories : [\n * {\n * title : \"Données\",\n * id : \"data\",\n * default : true,\n * filter : null\n * // sous categories\n * // items : [\n * // {\n * // title : \"\",\n * // default : true,\n * // filter : {\n * // field : \"\",\n * // value : \"\"\n * // }\n * // }\n * // ]\n * }\n * ],\n * configuration : {\n * type : \"json\", // type:\"service\"\n * urls : [ // data:{}\n * \"https://raw.githubusercontent.com/IGNF/cartes.gouv.fr-entree-carto/main/public/data/layers.json\",\n * \"https://raw.githubusercontent.com/IGNF/cartes.gouv.fr-entree-carto/main/public/data/edito.json\"\n * ]\n * }\n * });\n * widget.on(\"catalog:loaded\", (e) => { console.log(e.data); });\n * widget.on(\"catalog:layer:add\", (e) => { console.log(e); });\n * widget.on(\"catalog:layer:remove\", (e) => { console.log(e); });\n * map.addControl(widget);\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof Catalog)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"Catalog\";\n\n // initialisation du composant\n this.initialize(options);\n\n // Widget main DOM container\n this.container = this.initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this.container) : this.element = this.container;\n\n // INFO\n // le DOM est mis en place sans la liste des couches du catalogue\n // car l'opération peut être async si un download est demandé.\n // une patience permet d'attendre que la liste soit récupérée.\n this.showWaiting();\n this.initLayersList()\n .then((data) => {\n logger.trace(this, data);\n this.hideWaiting();\n /**\n * event triggered when data is loaded\n *\n * @event catalog:loaded\n * @property {Object} type - event\n * @property {Object} data - data\n * @property {Object} target - instance Catalog\n * @example\n * Catalog.on(\"catalog:loaded\", function (e) {\n * console.log(e.data);\n * })\n */\n this.dispatchEvent({\n type : \"catalog:loaded\",\n data : data\n });\n })\n .catch((e) => {\n this.hideWaiting();\n // TODO gestion des erreurs\n logger.error(e);\n });\n\n return this;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (map) {\n // INFO\n // on verifie les couches déjà présentes sur la cartes\n this.on(\"catalog:loaded\", this.initMapLayers);\n\n // mode \"draggable\"\n if (this.draggable) {\n Draggable.dragElement(\n this.panelCatalogContainer,\n this.panelCatalogHeaderContainer,\n map.getTargetElement()\n );\n }\n\n // mode \"collapsed\"\n if (!this.collapsed) {\n this.buttonCatalogShow.setAttribute(\"aria-pressed\", true);\n }\n\n // ajout des evenements sur la carte\n if (this.auto) {\n this.addEventsListeners(map);\n }\n } else {\n this.un(\"catalog:loaded\", this.initMapLayers);\n // suppression des evenements sur la carte\n // pour les futurs suppressions de couche\n if (this.auto) {\n this.removeEventsListeners();\n }\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n // ################################################################### //\n // ################### getters / setters ############################# //\n // ################################################################### //\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n\n // ################################################################### //\n // #################### privates methods ############################# //\n // ################################################################### //\n\n /**\n * Initialize Catalog control (called by Catalog constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n this.uid = options.id || SelectorID.generate();\n\n // set default options\n this.options = {\n collapsed : true,\n draggable : false,\n auto : true,\n titlePrimary : \"Gérer vos couches de données\",\n titleSecondary : \"\",\n layerLabel : \"title\",\n layerFilter : [], // TODO filtre\n search : {\n display : true,\n criteria : [\n \"name\",\n \"title\",\n \"description\"\n ]\n },\n addToMap : true,\n categories : [\n {\n title : \"Données\",\n id : \"data\",\n default : true,\n filter : null\n // INFO\n // > sous categories avec ou sans section\n // items : [\n // {\n // title : \"\",\n // default : true,\n // section : true,\n // filter : {\n // field : \"\",\n // value : \"\"\n // }\n // }\n // ]\n }\n ],\n configuration : {\n type : \"json\", // TODO type:\"service\"\n urls : [ // data:{}\n \"https://raw.githubusercontent.com/IGNF/cartes.gouv.fr-entree-carto/main/public/data/layers.json\",\n \"https://raw.githubusercontent.com/IGNF/cartes.gouv.fr-entree-carto/main/public/data/edito.json\"\n ]\n }\n };\n\n // merge with user options\n Utils.assign(this.options, options);\n\n /**\n * specify if control is collapsed (true) or not (false)\n * @type {Boolean}\n */\n this.collapsed = this.options.collapsed;\n\n /**\n * specify if control is draggable (true) or not (false)\n * @type {Boolean}\n */\n this.draggable = this.options.draggable;\n\n /**\n * specify if control add some stuff auto\n * @type {Boolean}\n */\n this.auto = this.options.auto;\n\n /**\n * specify some events listeners\n * @type {Array}\n */\n this.eventsListeners = [];\n\n // DOM\n this.buttonCatalogShow = null;\n this.panelCatalogContainer = null;\n this.panelCatalogHeaderContainer = null; // usefull for the dragNdrop\n this.buttonCatalogClose = null;\n this.contentCatalogContainer = null;\n this.waitingContainer = null;\n\n /**\n * specify all list of layers (configuration service)\n * @type {Object}\n * @see [schema](https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/doc/schema.json)\n * @see [jsdoc](https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/doc/schema.jsdoc)\n */\n this.layersList = [];\n\n /**\n * specify all categories\n * @type {Array}\n */\n this.categories = this.options.categories.map((cat) => {\n // INFO\n // on reecrit correctement les categories\n // ex. properties mal renseignées tels que id ou default\n var items = cat.items;\n if (cat.items) {\n items = cat.items.map((i) => {\n return {\n title : i.title,\n id : i.id || Math.abs(Array.from(i.title).reduce((s, c) => Math.imul(31, s) + c.charCodeAt(0) | 0, 0)),\n section : i.hasOwnProperty(\"section\") ? i.section : false,\n default : i.hasOwnProperty(\"default\") ? i.default : false,\n filter : i.filter || null,\n };\n });\n }\n return {\n title : cat.title,\n id : cat.id || Math.abs(Array.from(cat.title).reduce((s, c) => Math.imul(31, s) + c.charCodeAt(0) | 0, 0)),\n default : cat.hasOwnProperty(\"default\") ? cat.default : false,\n filter : cat.filter || null,\n items : items || null\n };\n });\n\n /**\n * specify the current category selected\n * @type {String}\n */\n this.categoryId = (() => {\n // INFO\n // par défaut, la categorie affichée sera la 1ere\n // sauf si on a specifié une categorie avec l'attribut 'default:true'\n var index = this.categories.findIndex((category) => category.default);\n if (index === -1) {\n index = 0;\n this.categories[index].default = true;\n }\n return this.categories[index].id;\n })();\n\n /**\n * list of layers added on map by key pair : name/service\n * @type {Object}\n * @example\n * {\n * \"GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2:WMTS\" : ol/layer/Tile,\n * \"PLAN.IGN$GEOPORTAIL:TMS\" : ol/layer/VectorTile\n * }\n */\n this.layersListOnMap = {};\n }\n\n /**\n * Create control main container (DOM initialize)\n *\n * @returns {DOMElement} DOM element\n * @private\n */\n initContainer () {\n // create main container\n var container = this._createMainContainerElement();\n\n var picto = this.buttonCatalogShow = this._createShowCatalogPictoElement();\n container.appendChild(picto);\n\n // panel\n var widgetPanel = this.panelCatalogContainer = this._createCatalogPanelElement();\n var widgetPanelDiv = this._createCatalogPanelDivElement();\n widgetPanel.appendChild(widgetPanelDiv);\n\n // header\n var widgetPanelHeader = this.panelCatalogHeaderContainer = this._createCatalogPanelHeaderElement();\n // title\n var widgetPanelTitle = this._createCatalogPanelTitleElement(this.options.titlePrimary);\n widgetPanelHeader.appendChild(widgetPanelTitle);\n // close picto\n var widgetCloseBtn = this.buttonCatalogClose = this._createCatalogPanelCloseElement();\n widgetPanelHeader.appendChild(widgetCloseBtn);\n widgetPanelDiv.appendChild(widgetPanelHeader);\n\n var widgetContentDiv = this._createCatalogPanelContentDivElement();\n\n // container for the custom dynamic code (cf. initLayersList())\n var widgetContentElementDiv = this.contentCatalogContainer = this._createCatalogContentDivElement();\n widgetContentElementDiv.appendChild(this._createCatalogContentTitleElement(this.options.titleSecondary));\n if (this.options.search.display) {\n widgetContentElementDiv.appendChild(this._createCatalogContentSearchElement());\n }\n // waiting\n var waiting = this.waitingContainer = this._createCatalogWaitingElement();\n widgetContentElementDiv.appendChild(waiting);\n\n widgetContentDiv.appendChild(widgetContentElementDiv);\n widgetPanelDiv.appendChild(widgetContentDiv);\n\n container.appendChild(widgetPanel);\n\n return container;\n }\n\n /**\n * ...\n * @private\n */\n initMapLayers () {\n var map = this.getMap();\n if (!map) {\n return;\n }\n var layers = map.getLayers();\n layers.forEach((layer) => {\n if (layer.name && layer.service) {\n // sauvegarde\n this.layersListOnMap[layer.name + \":\" + layer.service] = layer;\n // cocher la case dans le catalogue\n var inputs = document.querySelectorAll(`input[data-layer=\"${layer.name}:${layer.service}\"]`);\n if (inputs) {\n inputs.forEach((input) => {\n input.checked = true;\n });\n }\n }\n });\n }\n\n /**\n * Configuration loading\n *\n * @returns {Promise} - promise\n * @private\n */\n async initLayersList () {\n var data = null; // reponse brute du service\n\n var self = this;\n const createCatalogContentEntries = (layers) => {\n var container = self.contentCatalogContainer;\n\n var widgetContentEntryTabs = self._createCatalogContentCategoriesTabs(this.categories);\n container.appendChild(widgetContentEntryTabs);\n\n var categories = []; // remise à plat des catégories / sous-categories\n self.categories.forEach((category) => {\n if (category.items) {\n for (let i = 0; i < category.items.length; i++) {\n const element = category.items[i];\n categories.push(element);\n }\n } else {\n categories.push(category);\n }\n });\n // INFO\n // les containers de contenu sont definis à partir\n // de l'ordre des catégories / sous-categories\n // il y'a autant de catégories / sous-categories que de containers\n var contents = container.querySelectorAll(\".tabcontent\");\n for (let i = 0; i < contents.length; i++) {\n const content = contents[i];\n var layersCategorised = getLayersByCategory(categories[i], layers);\n content.appendChild(self._createCatalogContentCategoryTabContent(categories[i], layersCategorised));\n }\n };\n\n // traitement du contenu (liste de couches) d'une categorie\n // en fonction d'un filtre\n const getLayersByCategory = (category, layers) => {\n // INFO\n // comment gerer les listes de layers filtrées pour chaque categorie ?\n // on doit les stocker si l'on souhaite faire des requêtes\n // avec l'outil de recherche par la suite\n var layersCategorised = layers;\n var filter = category.filter;\n if (filter) {\n layersCategorised = {};\n for (const key in layers) {\n if (Object.prototype.hasOwnProperty.call(layers, key)) {\n const layer = layers[key];\n if (layer[filter.field]) { // FIXME impl. clef multiple : property.property !\n var condition = Array.isArray(filter.value) ? filter.value.includes(layer[filter.field].toString()) : (filter.value === \"*\" || layer[filter.field].toString() === filter.value);\n if (condition) {\n layersCategorised[key] = layer;\n // on ajoute l'appartenance de la couche à une categorie\n this.layersList[key].categories.push(category.id);\n }\n }\n }\n }\n }\n\n return layersCategorised;\n };\n\n // TODO filtre sur la liste de couches à prendre en compte\n const getLayersByFilter = (filter, layers) => {\n // INFO\n // definir les filtres possibles :\n // - sur un champ spécifique : ex field:\"service\"\n // - sur des valeurs : ex. value:\"[WMS,TMS,WMTS]\" ou \"*\"\n // - ...\n return layers;\n };\n\n if (this.options.configuration.data) {\n data = this.options.configuration.data || {};\n\n // TODO gestion du type service\n\n if (Config.isConfigLoaded()) {\n Utils.mergeParams(data, Config.configuration);\n }\n\n // INFO\n // on en profite pour ajouter des properties :\n // - service : utile pour identifier la couche\n // de manière unique : name + service\n // - categories : utile pour definir l'appartenance d'une couche\n // à une ou plusieurs categories\n for (const key in data.layers) {\n if (Object.prototype.hasOwnProperty.call(data.layers, key)) {\n const layer = data.layers[key];\n var service = layer.serviceParams.id.split(\":\").slice(-1)[0]; // beurk!\n layer.service = service; // new proprerty !\n layer.categories = []; // new property ! vide pour le moment\n }\n }\n\n // on applique un filtre sur la liste des couches\n var layers = getLayersByFilter(this.options.layerFilter, data.layers);\n\n // sauvegarde de la liste des couches\n this.layersList = layers;\n\n createCatalogContentEntries(layers);\n return new Promise((resolve, reject) => {\n resolve(data);\n });\n }\n\n if (this.options.configuration.urls) {\n var fetchUrls = [];\n for (let i = 0; i < this.options.configuration.urls.length; i++) {\n const url = this.options.configuration.urls[i];\n const fetchUrl = function () {\n return fetch(url, {})\n .then(function (response) {\n if (response.ok) {\n return response.json()\n .then(function (json) {\n return json;\n })\n .catch(error => {\n logger.warn(\"fetch json exception :\", error);\n });\n } else {\n var err = new Error(\"HTTP status code: \" + response.status);\n throw err;\n }\n })\n .catch(error => {\n return new Promise((resolve, reject) => {\n logger.error(\"fetch json exception :\", error);\n reject(error);\n });\n });\n };\n fetchUrls.push(fetchUrl());\n }\n\n try {\n const values = await Promise.all(fetchUrls);\n\n data = values[0];\n for (let i = 1; i < values.length; i++) {\n const value = values[i];\n Utils.mergeParams(data, value);\n }\n\n // TODO gestion du type service\n\n if (Config.isConfigLoaded()) {\n Utils.mergeParams(data, Config.configuration);\n }\n\n // INFO\n // on en profite pour ajouter des properties :\n // - service : utile pour identifier la couche\n // de manière unique : name + service\n // - categories : utile pour definir l'appartenance d'une couche\n // à une ou plusieurs categories\n for (const key in data.layers) {\n if (Object.prototype.hasOwnProperty.call(data.layers, key)) {\n const layer = data.layers[key];\n var service = layer.serviceParams.id.split(\":\").slice(-1)[0]; // beurk!\n layer.service = service; // new proprerty !\n layer.categories = []; // new property ! vide pour le moment\n }\n }\n\n // on applique un filtre sur la liste des couches\n var layers = getLayersByFilter(this.options.layerFilter, data.layers);\n\n // sauvegarde de la liste des couches\n this.layersList = layers;\n\n createCatalogContentEntries(layers);\n return await new Promise((resolve, reject) => {\n resolve(data);\n });\n } catch (e) {\n return await new Promise((resolve, reject) => {\n reject(e);\n });\n }\n }\n }\n\n // ################################################################### //\n // ######################## methods on map ########################### //\n // ################################################################### //\n\n /**\n * Add events listeners on map (called by setMap)\n *\n * @param {*} map - map\n * @private\n */\n addEventsListeners (map) {\n var self = this;\n this.eventsListeners[\"map:add\"] = function (e) {\n logger.trace(e);\n var name = e.element.name;\n var service = e.element.service;\n // sauvegarde\n self.layersListOnMap[name + \":\" + service] = e.element;\n // cocher la case dans le catalogue\n var inputs = document.querySelectorAll(`input[data-layer=\"${name}:${service}\"]`);\n if (inputs) {\n inputs.forEach((input) => {\n input.checked = true;\n });\n }\n };\n // the event custom:action is associate with an openlayers event\n map.getLayers().on(\"add\", this.eventsListeners[\"map:add\"]);\n\n this.eventsListeners[\"map:remove\"] = function (e) {\n logger.trace(e);\n var name = e.element.name;\n var service = e.element.service;\n // sauvegarde\n delete self.layersListOnMap[name + \":\" + service];\n // decocher la case dans le catalogue\n var inputs = document.querySelectorAll(`input[data-layer=\"${name}:${service}\"]`);\n if (inputs) {\n inputs.forEach((input) => {\n input.checked = false;\n });\n }\n };\n // the event custom:action is associate with an openlayers event\n map.getLayers().on(\"remove\", this.eventsListeners[\"map:remove\"]);\n }\n\n /**\n * Remove events listeners on map (called by setMap)\n * @private\n */\n removeEventsListeners () {\n var map = this.getMap();\n map.getLayers().un(\"add\", this.eventsListeners[\"map:add\"]);\n delete this.eventsListeners[\"map:add\"];\n map.getLayers().un(\"remove\", this.eventsListeners[\"map:remove\"]);\n delete this.eventsListeners[\"map:remove\"];\n }\n\n /**\n * Add layer on map\n *\n * @param {*} name - layer name\n * @param {*} service - layer service\n * @returns {Object} - layer config\n * @private\n */\n addLayer (name, service) {\n var layerConf = null;\n var layer = null;\n switch (service) {\n case \"WMS\":\n layer = new GeoportalWMS({\n layer : name\n });\n break;\n case \"WMTS\":\n layer = new GeoportalWMTS({\n layer : name\n });\n break;\n case \"TMS\":\n layer = new GeoportalMapBox({\n layer : name\n });\n break;\n case \"WFS\":\n layer = new GeoportalWFS({\n layer : name\n });\n break;\n default:\n break;\n }\n\n if (layer) {\n var map = this.getMap();\n map.addLayer(layer);\n // sauvegarde\n this.layersListOnMap[name + \":\" + service] = layer;\n // layer configuration\n layerConf = layer.getConfiguration();\n }\n\n return layerConf;\n }\n\n /**\n * Remove Layer on map\n *\n * @param {*} name - layer name\n * @param {*} service - layer service\n * @returns {Object} - layer config\n * @private\n */\n removeLayer (name, service) {\n var layerConf = null;\n var layer = this.layersListOnMap[name + \":\" + service];\n if (layer) {\n // layer configuration\n layerConf = layer.getConfiguration();\n var map = this.getMap();\n map.removeLayer(layer);\n // sauvegarde\n delete this.layersListOnMap[name + \":\" + service];\n }\n\n return layerConf;\n }\n\n // ################################################################### //\n // ######################## methods waiting ########################## //\n // ################################################################### //\n\n hideWaiting () {\n // /* GPwaitingContainer */\n // /* gpf-waiting */\n this.waitingContainer.className = \"GPwaitingContainerHidden gpf-waiting--hidden\";\n }\n\n showWaiting () {\n this.waitingContainer.className = \"GPwaitingContainerVisible gpf-waiting--visible\";\n }\n // ################################################################### //\n // ######################## methods search ########################### //\n // ################################################################### //\n\n /**\n * Reset filtered layers\n * @private\n */\n resetFilteredLayersList () {\n // INFO\n // l'outil de recherche filtre les couches via un critère de recherche.\n // l'affichage des couches filtrées est realisé en cachant\n // les couches non conforme au critère.\n // le parametre pour masquer les couches : hidden\n for (const key in this.layersList) {\n if (Object.prototype.hasOwnProperty.call(this.layersList, key)) {\n const layer = this.layersList[key];\n layer.hidden = false;\n this.updateFilteredLayersListDOM(layer.name, layer.service, layer.hidden);\n }\n }\n }\n\n /**\n * Set filtered layers\n *\n * @param {*} value - value\n * @private\n */\n setFilteredLayersList (value) {\n var criteria = this.options.search.criteria;\n for (const key in this.layersList) {\n if (Object.prototype.hasOwnProperty.call(this.layersList, key)) {\n const layer = this.layersList[key];\n var words = \"\";\n for (let i = 0; i < criteria.length; i++) {\n const c = criteria[i];\n if (layer[c]) {\n words += layer[c].toLowerCase();\n }\n }\n layer.hidden = !words.includes(value.toLowerCase());\n this.updateFilteredLayersListDOM(layer.name, layer.service, layer.hidden);\n }\n }\n }\n\n /**\n * Update DOM layer visibility\n *\n * @param {*} id - ...\n * @param {*} service - ...\n * @param {*} hidden - ...\n * @private\n */\n updateFilteredLayersListDOM (id, service, hidden) {\n var categories = []; // remise à plat des catégories / sous-categories\n this.categories.forEach((category) => {\n if (category.items) {\n for (let i = 0; i < category.items.length; i++) {\n const element = category.items[i];\n categories.push(element.id);\n }\n } else {\n categories.push(category.id);\n }\n });\n\n for (let i = 0; i < categories.length; i++) {\n const category = categories[i];\n var container = document.getElementById(`fieldset-${category}_${id}-${service}`);\n if (container) {\n if (hidden) {\n container.classList.add(\"gpf-hidden\");\n container.classList.add(\"GPelementHidden\");\n } else {\n container.classList.remove(\"gpf-hidden\");\n container.classList.remove(\"GPelementHidden\");\n }\n }\n }\n }\n\n // ################################################################### //\n // ######################## event dom ################################ //\n // ################################################################### //\n\n /**\n * ...\n * @param {*} e - ...\n * @private\n */\n onShowCatalogClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n logger.trace(e);\n }\n\n /**\n * ...\n * @param {*} e - ...\n * @private\n */\n onCloseCatalogClick (e) {\n logger.trace(e);\n }\n\n /**\n * ...\n * @param {*} e - ...\n * @private\n */\n onSelectCatalogTabClick (e) {\n logger.trace(e);\n // sauvegarde de la categorie courrante pour la gestion de la recherche\n // de couches dans la liste associée à la categorie\n var id = e.target.id;\n var category = id.split(\"_\")[1];\n this.categoryId = category;\n }\n\n /**\n * ...\n * @param {*} e - ...\n * @private\n */\n onSelectCatalogEntryClick (e) {\n logger.trace(e);\n // appel gestionnaire d'evenement pour traitement :\n // - ajout ou pas de la couche à la carte\n // - envoi d'un evenement avec la conf tech\n\n var ds = e.target.dataset.layer;\n var name = ds.substring(0, ds.lastIndexOf(\":\"));\n var service = ds.substring(ds.lastIndexOf(\":\") + 1);\n var layer = {}; // TODO fournir la conf tech\n\n if (e.target.checked) {\n if (this.options.addToMap) {\n layer = this.addLayer(name, service);\n }\n /**\n * event triggered when layer is added\n *\n * @event catalog:layer:add\n * @property {Object} type - event\n * @property {String} name - layer name\n * @property {String} service - service name\n * @property {Object} layer - layer conf\n * @property {Object} target - instance Catalog\n * @example\n * Catalog.on(\"catalog:layer:add\", function (e) {\n * console.log(e.layer);\n * })\n */\n this.dispatchEvent({\n type : \"catalog:layer:add\",\n name : name,\n service : service,\n layer : layer\n });\n } else {\n if (this.options.addToMap) {\n layer = this.removeLayer(name, service);\n }\n /**\n * event triggered when layer is removed\n *\n * @event catalog:layer:remove\n * @property {Object} type - event\n * @property {String} name - layer name\n * @property {String} service - service name\n * @property {Object} layer - layer conf\n * @property {Object} target - instance Catalog\n * @example\n * Catalog.on(\"catalog:layer:remove\", function (e) {\n * console.log(e.layer);\n * })\n */\n this.dispatchEvent({\n type : \"catalog:layer:remove\",\n name : name,\n service : service,\n layer : layer\n });\n }\n }\n\n /**\n *\n * @private\n */\n onSearchCatalogButtonClick () {\n // INFO\n // la saisie du critère de recherche doit filtrer la liste des couches affichée\n // dans l'onglet courant.\n // on masque les entrées non conforme\n // - en ajoutant la classe 'gpf-hidden' dans le DOM\n // - en sauvegardant l'état avec la property 'hidden:true'\n var value = document.getElementById(\"search-input\").value;\n this.setFilteredLayersList(value);\n }\n\n /**\n *\n * @private\n */\n onSearchCatalogInputChange () {\n this.onSearchCatalogButtonClick();\n }\n\n};\n\n// on récupère les méthodes de la classe DOM\nObject.assign(Catalog.prototype, CatalogDOM);\nObject.assign(Catalog.prototype, Widget);\n\nexport default Catalog;\n\n// Expose Export as ol.control.Catalog (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.Catalog = Catalog;\n}\n","import Gp from \"geoportal-access-lib\";\n\n(function () {\n var scripts = document.getElementsByTagName(\"script\");\n\n var key = scripts[scripts.length - 1].getAttribute(\"data-key\");\n var url = scripts[scripts.length - 1].getAttribute(\"data-url\");\n var timeout = scripts[scripts.length - 1].getAttribute(\"data-timeout\");\n\n // callback\n var success = function (data) {\n // Pas de messages en mode prod\n console.log(\"GetConfig success!\");\n window.Gp.Config = data;\n };\n\n // callback\n var error = function (e) {\n throw new Error(\"Configuration load failed : \" + e.message);\n };\n\n if (!key && !url) {\n // pas de message d'information !\n // console.log(\"WARNING : parameters missing 'data-key' and 'data-url', the loading of configuration can not be done !\");\n return;\n }\n\n var options = {\n apiKey : key,\n sync : true,\n onSuccess : success,\n onFailure : error\n };\n\n if (url) {\n options.customConfigFile = url;\n options.callbackSuffix = \"\";\n }\n\n if (timeout) {\n options.timeOut = timeout;\n }\n\n // test d'existance de la varibale globale Gp.Config\n if (window.Gp) {\n // appel du service\n Gp.Services.getConfig(options);\n }\n})();\n","import CRS from \"./CRS\";\n\n/**\n * Autoload function that loads defs into proj4\n * and adds proj4 defs into ol.\n */\n(function () {\n // if you want to load all defs into proj4\n // you can call :\n // inside code, CRS.load()\n // or\n // outside code, Gp.olExtended.includeProjections()\n // but you can call only once...\n\n // load default defs into proj4\n CRS.loadByDefault();\n // and register defs into openlayers\n CRS.overload();\n})();\n","/**\n* Global variable Gp.\n*\n* @module Gp\n* @alias Gp\n* @description\n*\n* This is the global variable that is exposed in the browser environment.\n* Content is composed of constructor, functions and properties...\n*\n* > Config: (...)\n*\n* > ColorUtils: (...)\n* > LayerUtils: (...)\n* > MathUtils: (...)\n* > ProxyUtils: (...)\n* > Logger: (...)\n*\n* > olExtended: (...)\n*\n* > date: \"YYYY-MM-DD\"\n* > version: \"X.X.X\"\n*\n* > Error: (...)\n* > Helper: (...)\n* > Protocols: (...)\n* > Services: (...)\n* > servicesDate: \"YYYY-MM-DD\"\n* > servicesVersion: \"X.X.X\"\n*\n* **Note :**\n*\n* function to add projections in 'proj4',\n* they are exposed in the global variable 'ol':\n* > Gp.olExtended.includeProjections()\n*\n* You can test it :\n* - ol.proj.proj4(\"EPSG:43260\")\n*\n* Projections include by default into proj4 and ol :\n* > WGS84\n* > ['EPSG:4326']\n* > ['EPSG:3785'], ['EPSG:3857'],\n* > ['EPSG:900913'], ['EPSG:102113']\n*\n* and\n*\n* > [\"EPSG:2154\"],\n* > [\"EPSG:27571\"], [\"EPSG:27572\"], [\"EPSG:27573\"], [\"EPSG:2757\"],\n* > [\"CRS:84\"],\n* > [\"IGNF:LAMB93\"],\n* > [\"IGNF:LAMBE\"],\n* > [\"IGNF:LAMB1\"], [\"IGNF:LAMB2\"], [\"IGNF:LAMB3\"], [\"IGNF:LAMB4\"],\n* > [\"IGNF:RGF93G\"],\n* > [\"IGNF:WGS84G\"]\n*\n* The following variables are aslo global :\n* - ol,\n* - eventbus\n*/\n\nimport Pkg from \"../../package.json\";\n\nimport GfiUtils from \"./Controls/Utils/Gfi\";\n\nimport KML from \"./Formats/KML\";\nimport GPX from \"./Formats/GPX\";\nimport GeoJSON from \"./Formats/GeoJSON\";\n\nimport WMTS from \"./Sources/WMTS\";\nimport SourceWMTS from \"./Layers/SourceWMTS\";\nimport SourceWMS from \"./Layers/SourceWMS\";\nimport SourceWFS from \"./Layers/SourceWFS\";\nimport LayerWMTS from \"./Layers/LayerWMTS\";\nimport LayerWMS from \"./Layers/LayerWMS\";\nimport LayerWFS from \"./Layers/LayerWFS\";\nimport LayerMapBox from \"./Layers/LayerMapBox\";\n\nimport LayerSwitcher from \"./Controls/LayerSwitcher/LayerSwitcher\";\nimport GetFeatureInfo from \"./Controls/GetFeatureInfo/GetFeatureInfo\";\nimport SearchEngine from \"./Controls/SearchEngine/SearchEngine\";\nimport MousePosition from \"./Controls/MousePosition/MousePosition\";\nimport Drawing from \"./Controls/Drawing/Drawing\";\nimport Route from \"./Controls/Route/Route\";\nimport Isocurve from \"./Controls/Isocurve/Isocurve\";\nimport ReverseGeocode from \"./Controls/ReverseGeocode/ReverseGeocode\";\nimport LocationSelector from \"./Controls/LocationSelector/LocationSelector\";\nimport LayerImport from \"./Controls/LayerImport/LayerImport\";\nimport GeoportalAttribution from \"./Controls/Attribution/GeoportalAttribution\";\nimport Markers from \"./Controls/Utils/Markers\";\nimport ElevationPath from \"./Controls/ElevationPath/ElevationPath\";\nimport MeasureLength from \"./Controls/Measures/MeasureLength\";\nimport MeasureArea from \"./Controls/Measures/MeasureArea\";\nimport MeasureAzimuth from \"./Controls/Measures/MeasureAzimuth\";\nimport ButtonExport from \"./Controls/Export/Export\";\nimport GeoportalZoom from \"./Controls/Zoom/GeoportalZoom\";\nimport GeoportalFullScreen from \"./Controls/FullScreen/GeoportalFullScreen\";\nimport GeoportalOverviewMap from \"./Controls/OverviewMap/GeoportalOverviewMap\";\nimport Legends from \"./Controls/Legends/Legends\";\nimport Territories from \"./Controls/Territories/Territories\";\nimport ControlList from \"./Controls/ControlList/ControlList\";\nimport Catalog from \"./Controls/Catalog/Catalog\";\n\nimport Proj4 from \"proj4\";\n\nimport Style from \"./Controls/Editor/Style\";\nimport Filter from \"./Controls/Editor/Filter\";\nimport Layer from \"./Controls/Editor/Layer\";\nimport Themes from \"./Controls/Editor/Themes\";\nimport Legend from \"./Controls/Editor/Legend\";\nimport Group from \"./Controls/Editor/Group\";\nimport Search from \"./Controls/Editor/Search\";\nimport Editor from \"./Controls/Editor/Editor\";\n\nimport HelperUtils from \"./Utils/Helper\";\nimport LayerUtils from \"./Utils/LayerUtils\";\nimport ProxyUtils from \"./Utils/ProxyUtils\";\nimport ColorUtils from \"./Utils/ColorUtils\";\nimport MathUtils from \"./Utils/MathUtils\";\nimport Logger from \"./Utils/LoggerByDefault\";\nimport Parser from \"./Utils/Parser\";\nimport Register from \"./Utils/Register\";\n\n// Les autoload...\nimport \"./Utils/AutoLoadConfig\";\nimport \"./CRS/AutoLoadCRS\";\n\n// export des services\nimport Gp from \"geoportal-access-lib\";\n\nimport CRS from \"./CRS/CRS\";\n\nvar Services = Gp.Services;\nvar Error = Gp.Error;\nvar Helper = Gp.Helper;\nvar Protocols = Gp.Protocols;\n\nvar servicesDate = Gp.servicesDate;\nvar servicesVersion = Gp.servicesVersion;\n\n// HACK !?\nvar Config = window.Gp.Config || {};\nObject.defineProperty(Gp, \"Config\", {\n get () {\n return Config;\n },\n set (value) {\n Config = value;\n },\n enumerable : true,\n configurable : true,\n});\nexport { Config };\n\nexport {\n /** Services\n * @see {@link http://ignf.github.io/geoportal-access-lib/current/jsdoc/module-Services.html|geoportal-access-lib}\n */\n Services,\n /** Error\n * @see {@link http://ignf.github.io/geoportal-access-lib/current/jsdoc/Gp.Error.html|geoportal-access-lib}\n */\n Error,\n /** Helper\n * @see {@link http://ignf.github.io/geoportal-access-lib/current/jsdoc/module-Helper.html|geoportal-access-lib}\n */\n Helper,\n /** Protocols\n * @see {@link http://ignf.github.io/geoportal-access-lib/current/jsdoc/module-XHR.html|geoportal-access-lib}\n */\n Protocols,\n /** servicesDate\n * @see {@link http://ignf.github.io/geoportal-access-lib/current/jsdoc/module-Gp.html|geoportal-access-lib}\n */\n servicesDate,\n /** servicesVersion\n * @see {@link http://ignf.github.io/geoportal-access-lib/current/jsdoc/module-Gp.html|geoportal-access-lib}\n */\n servicesVersion\n};\n\n/** Version */\nexport const version = Pkg.version;\n/** Publication date */\nexport const date = Pkg.date;\n\nexport {\n /** @see Gp.HelperUtils */\n HelperUtils,\n /** @see Gp.LayerUtils */\n LayerUtils,\n /** @see Gp.ProxyUtils */\n ProxyUtils,\n /** @see Gp.ColorUtils */\n ColorUtils,\n /** @see Gp.MathUtils */\n MathUtils,\n /** @see Gp.Logger */\n Logger,\n /** @see Gp.Parser */\n Parser,\n /** @see Gp.Register */\n Register\n};\n\nfunction deepCopy (source, target) {\n // Implementing Tail Call Elimination\n function tce (source, target) {\n for (var prop in source) {\n if (source.hasOwnProperty(prop)) {\n if (!target.hasOwnProperty(prop)) {\n target[prop] = source[prop];\n } else if (typeof source[prop] === \"object\") {\n tce(source[prop], target[prop]);\n }\n }\n }\n }\n return tce(source, target);\n}\n\nvar Ol = {};\n\n// FIXME : est il utile d'avoir un ns particulier \"gp\" ?\nOl.gp = {};\nOl.gp.GfiUtils = GfiUtils;\n\n// proposer une fonction de chargement des projections !\nOl.includeProjections = CRS.load;\n\n// Editeur MapBox\nOl.style = Ol.style || {};\nOl.style.Editor = Editor;\nOl.style.editor = Ol.style.editor || {};\nOl.style.editor.Style = Style;\nOl.style.editor.Filter = Filter;\nOl.style.editor.Layer = Layer;\nOl.style.editor.Legend = Legend;\nOl.style.editor.Group = Group;\nOl.style.editor.Themes = Themes;\nOl.style.editor.Search = Search;\n\n// Rajout des propriétés dans le namespace Ol\nOl.format = Ol.format || {};\nOl.format.KMLExtended = KML;\nOl.format.GPXExtended = GPX;\nOl.format.GeoJSONExtended = GeoJSON;\n\nOl.source = Ol.source || {};\nOl.source.WMTSExtended = WMTS;\nOl.source.GeoportalWMTS = SourceWMTS;\nOl.source.GeoportalWMS = SourceWMS;\nOl.source.GeoportalWFS = SourceWFS;\n\nOl.layer = Ol.layer || {};\nOl.layer.GeoportalWMTS = LayerWMTS;\nOl.layer.GeoportalWMS = LayerWMS;\nOl.layer.GeoportalWFS = LayerWFS;\nOl.layer.GeoportalMapBox = LayerMapBox;\n\nOl.control = Ol.control || {};\nOl.control.LayerSwitcher = LayerSwitcher;\nOl.control.GeoportalAttribution = GeoportalAttribution;\nOl.control.GetFeatureInfo = GetFeatureInfo;\nOl.control.SearchEngine = SearchEngine;\nOl.control.Route = Route;\nOl.control.Isocurve = Isocurve;\nOl.control.GeoportalMousePosition = MousePosition;\nOl.control.Drawing = Drawing;\nOl.control.ReverseGeocode = ReverseGeocode;\nOl.control.LayerImport = LayerImport;\nOl.control.MeasureLength = MeasureLength;\nOl.control.MeasureArea = MeasureArea;\nOl.control.MeasureAzimuth = MeasureAzimuth;\nOl.control.DefaultMarkers = Markers;\nOl.control.ElevationPath = ElevationPath;\nOl.control.LocationSelector = LocationSelector;\nOl.control.Export = ButtonExport;\nOl.control.GeoportalZoom = GeoportalZoom;\nOl.control.GeoportalFullScreen = GeoportalFullScreen;\nOl.control.GeoportalOverviewMap = GeoportalOverviewMap;\nOl.control.Legends = Legends;\nOl.control.Catalog = Catalog;\nOl.control.Territories = Territories;\nOl.control.ControlList = ControlList;\n\nexport {\n /**\n * Expose extensions openlayers extended\n * @see ol.control.LayerSwitcher\n * @see ol.control.GeoportalAttribution\n * @see ol.control.GetFeatureInfo\n * @see ol.control.SearchEngine\n * @see ol.control.Route\n * @see ol.control.Isocurve\n * @see ol.control.GeoportalMousePosition\n * @see ol.control.GeoportalFullScreen\n * @see ol.control.GeoportalZoom\n * @see ol.control.GeoportalOverviewMap\n * @see ol.control.Drawing\n * @see ol.control.ReverseGeocode\n * @see ol.control.MeasureLength\n * @see ol.control.MeasureArea\n * @see ol.control.MeasureAzimuth\n * @see ol.control.DefaultMarkers\n * @see ol.control.ElevationPath\n * @see ol.control.LocationSelector\n * @see ol.control.Export\n * @see ol.control.Legends\n * @see ol.layer.GeoportalWMTS\n * @see ol.layer.GeoportalWMS\n * @see ol.layer.GeoportalWFS\n * @see ol.layer.GeoportalMapBox\n * @see ol.source.GeoportalWMTS\n * @see ol.source.GeoportalWMS\n * @see ol.source.GeoportalWFS\n * @see ol.format.KMLExtended\n * @see ol.format.GPXExtended\n * @see ol.format.GeoJSONExtended\n * @see ol.style.Editor\n * @see ol.includeProjections\n */\n Ol as olExtended\n};\n\n// \"proj4\" is not exposed into window with webpack !\n// But, it's useful to expose it into OpenLayers :\n// console > ol.proj.get(\"EPSG:2154\")\nif (window.ol && window.ol.proj && window.ol.proj.proj4) {\n try {\n window.ol.proj.proj4.register(Proj4);\n } catch (e) {}\n}\n\n// Expose extensions openlayers extended into ol\nif (window.ol) {\n // on fusionne les fonctionnalités openlayers / étendues\n // Gp.olExtended -> ol\n deepCopy(Ol, window.ol);\n // ol -> Gp.olExtended\n deepCopy(window.ol, Ol);\n}\n"],"names":["freeze","object","oc","undefined","Object","getOwnPropertyDescriptors","create","hasOwn","key","prototype","hasOwnProperty","call","HTML_BOOLEAN_ATTRIBUTES","allowfullscreen","async","autofocus","autoplay","checked","controls","default","defer","disabled","formnovalidate","hidden","ismap","itemscope","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected","HTML_VOID_ELEMENTS","area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr","HTML_RAW_TEXT_ELEMENTS","script","style","textarea","title","isHTMLMimeType","mimeType","MIME_TYPE","HTML","XML_APPLICATION","XML_TEXT","XML_XHTML_APPLICATION","XML_SVG_IMAGE","_MIME_TYPES","keys","map","NAMESPACE","SVG","XML","XMLNS","exports","assign","target","TypeError","find","list","predicate","ac","Array","i","length","item","hasDefaultHTMLNamespace","isHTMLBooleanAttribute","name","toLowerCase","isHTMLRawTextElement","tagName","isHTMLEscapableRawTextElement","isHTMLVoidElement","isValidMimeType","indexOf","conventions","dom","errors","entities","sax","DOMImplementation","ParseError","XMLReader","normalizeLineEndings","replace","DOMParser","options","locator","this","domHandler","DOMHandler","onError","errorHandler","xmlns","opt","defaultNamespace","cdata","currentElement","doc","position","node","lineNumber","columnNumber","_toString","chars","start","substr","java","lang","String","appendElement","handler","appendChild","parseFromString","defaultNSMap","entityMap","XML_ENTITIES","HTML_ENTITIES","xml","domBuilder","setDocumentLocator","fatalError","parse","documentElement","startDocument","impl","createHTMLDocument","createDocument","startElement","namespaceURI","localName","qName","attrs","el","createElementNS","len","getURI","value","getValue","attr","getQName","createAttributeNS","getLocator","nodeValue","setAttributeNode","endElement","parentNode","startPrefixMapping","prefix","uri","endPrefixMapping","processingInstruction","data","ins","createProcessingInstruction","ignorableWhitespace","ch","characters","apply","arguments","charNode","createCDATASection","createTextNode","test","skippedEntity","endDocument","normalize","comment","comm","createComment","startCDATA","endCDATA","startDTD","publicId","systemId","internalSubset","implementation","createDocumentType","dt","doctype","reportError","level","message","e","console","error","l","_locator","warning","__DOMHandler","onErrorStopParsing","onWarningStopParsing","PDC","Symbol","DOMException","DOMExceptionName","g","checkSymbol","symbol","notEmptyString","orderedSetReducer","current","element","toOrderedSet","split","filter","splitOnASCIIWhitespace","reduce","validateQualifiedName","qualifiedName","QName_exact","INVALID_CHARACTER_ERR","validateAndExtract","namespace","splitResult","NAMESPACE_ERR","copy","src","dest","p","_extends","Class","Super","pt","t","constructor","NodeType","ELEMENT_NODE","ATTRIBUTE_NODE","TEXT_NODE","CDATA_SECTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","PROCESSING_INSTRUCTION_NODE","COMMENT_NODE","DOCUMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","NOTATION_NODE","DocumentPosition","DOCUMENT_POSITION_DISCONNECTED","DOCUMENT_POSITION_PRECEDING","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_CONTAINS","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC","parentChain","chain","ownerElement","unshift","commonAncestor","a","b","c","n","docGUID","guid","Math","random","NodeList","LiveNodeList","refresh","_node","_refresh","_updateLiveList","inc","_inc","ownerDocument","ls","__set__","$$length","NamedNodeMap","_findNodeIndex","_addNamedNode","newAttr","oldAttr","_onRemoveAttribute","ns","_nsMap","_onAddAttribute","_removeNamedNode","lastIndex","Node","_xmlEncoder","charCodeAt","_visitNode","callback","firstChild","nextSibling","Document","contentType","type","remove","_onUpdateChild","parent","newChild","childNodes","child","_removeChild","NOT_FOUND_ERR","oldPreviousSibling","previousSibling","oldNextSibling","lastChild","isDocTypeNode","nodeType","isElementNode","isTextNode","isElementInsertionPossible","parentChildNodes","docTypeNode","isElementReplacementPossible","assertPreInsertionValidity1to5","hasValidParentNodeType","HIERARCHY_REQUEST_ERR","hasInsertableNodeType","assertPreInsertionValidityInDocument","nodeChildNodes","nodeChildElements","parentElementChild","assertPreReplacementValidityInDocument","hasDoctypeChildThatIsNotChild","_insertBefore","_inDocumentAssertion","cp","removeChild","newFirst","newLast","pre","Element","Attr","CharacterData","Text","Comment","CDATASection","DocumentType","Notation","Entity","EntityReference","DocumentFragment","ProcessingInstruction","XMLSerializer","nodeSerializeToString","nodeFilter","buf","refNode","lookupPrefix","visibleNamespaces","serializeToString","join","needNamespaceDefine","isHTML","addSerializedAttribute","push","attributes","nodeName","prefixedNodeName","defaultNS","ai","nsi","canCloseTag","slice","CDATA_START","CDATA_END","COMMENT_START","COMMENT_END","pubid","sysid","DOCTYPE_DECL_START","PUBLIC","SYSTEM","importNode","deep","node2","cloneNode","v","attrs2","_ownerElement","index","toString","iterator","me","next","done","return","getNamedItem","_isInHTMLDocumentAndNamespace","setNamedItem","INUSE_ATTRIBUTE_ERR","getNamedItemNS","setNamedItemNS","removeNamedItem","removeNamedItemNS","hasFeature","feature","version","root","htmlNode","createElement","headNode","titleNode","parentElement","baseURI","isConnected","rootNode","getRootNode","contains","other","isEqualNode","otherNode","getAttributeNodeNS","isSameNode","insertBefore","refChild","replaceChild","oldChild","hasChildNodes","appendData","isSupported","lookupNamespaceURI","isDefaultNamespace","compareDocumentPosition","node1","attr1","attr2","chain1","chain2","ca","removed","importedNode","getElementById","id","rtv","getAttribute","createDocumentFragment","createAttribute","_createAttribute","specified","createEntityReference","Name","NotSupportedError","validated","getQualifiedName","hasAttribute","getAttributeNode","setAttribute","removeAttribute","removeAttributeNode","setAttributeNodeNS","removeAttributeNS","old","hasAttributeNS","getAttributeNS","setAttributeNS","getElementsByClassName","classNames","classNamesSet","nodeClassNames","matches","nodeClassNamesSet","every","getElementsByTagName","isHTMLDocument","lowerQualifiedName","getElementsByTagNameNS","substringData","offset","count","substring","text","insertData","replaceData","deleteData","splitText","newText","newNode","defineProperty","getTextContent","get","set","amp","apos","gt","lt","quot","Aacute","aacute","Abreve","abreve","acd","acE","Acirc","acirc","acute","Acy","acy","AElig","aelig","af","Afr","afr","Agrave","agrave","alefsym","aleph","Alpha","alpha","Amacr","amacr","amalg","AMP","And","and","andand","andd","andslope","andv","ang","ange","angle","angmsd","angmsdaa","angmsdab","angmsdac","angmsdad","angmsdae","angmsdaf","angmsdag","angmsdah","angrt","angrtvb","angrtvbd","angsph","angst","angzarr","Aogon","aogon","Aopf","aopf","ap","apacir","apE","ape","apid","ApplyFunction","approx","approxeq","Aring","aring","Ascr","ascr","Assign","ast","asymp","asympeq","Atilde","atilde","Auml","auml","awconint","awint","backcong","backepsilon","backprime","backsim","backsimeq","Backslash","Barv","barvee","Barwed","barwed","barwedge","bbrk","bbrktbrk","bcong","Bcy","bcy","bdquo","becaus","Because","because","bemptyv","bepsi","bernou","Bernoullis","Beta","beta","beth","between","Bfr","bfr","bigcap","bigcirc","bigcup","bigodot","bigoplus","bigotimes","bigsqcup","bigstar","bigtriangledown","bigtriangleup","biguplus","bigvee","bigwedge","bkarow","blacklozenge","blacksquare","blacktriangle","blacktriangledown","blacktriangleleft","blacktriangleright","blank","blk12","blk14","blk34","block","bne","bnequiv","bNot","bnot","Bopf","bopf","bot","bottom","bowtie","boxbox","boxDL","boxDl","boxdL","boxdl","boxDR","boxDr","boxdR","boxdr","boxH","boxh","boxHD","boxHd","boxhD","boxhd","boxHU","boxHu","boxhU","boxhu","boxminus","boxplus","boxtimes","boxUL","boxUl","boxuL","boxul","boxUR","boxUr","boxuR","boxur","boxV","boxv","boxVH","boxVh","boxvH","boxvh","boxVL","boxVl","boxvL","boxvl","boxVR","boxVr","boxvR","boxvr","bprime","Breve","breve","brvbar","Bscr","bscr","bsemi","bsim","bsime","bsol","bsolb","bsolhsub","bull","bullet","bump","bumpE","bumpe","Bumpeq","bumpeq","Cacute","cacute","Cap","cap","capand","capbrcup","capcap","capcup","capdot","CapitalDifferentialD","caps","caret","caron","Cayleys","ccaps","Ccaron","ccaron","Ccedil","ccedil","Ccirc","ccirc","Cconint","ccups","ccupssm","Cdot","cdot","cedil","Cedilla","cemptyv","cent","CenterDot","centerdot","Cfr","cfr","CHcy","chcy","check","checkmark","Chi","chi","cir","circ","circeq","circlearrowleft","circlearrowright","circledast","circledcirc","circleddash","CircleDot","circledR","circledS","CircleMinus","CirclePlus","CircleTimes","cirE","cire","cirfnint","cirmid","cirscir","ClockwiseContourIntegral","CloseCurlyDoubleQuote","CloseCurlyQuote","clubs","clubsuit","Colon","colon","Colone","colone","coloneq","comma","commat","comp","compfn","complement","complexes","cong","congdot","Congruent","Conint","conint","ContourIntegral","Copf","copf","coprod","Coproduct","COPY","copysr","CounterClockwiseContourIntegral","crarr","Cross","cross","Cscr","cscr","csub","csube","csup","csupe","ctdot","cudarrl","cudarrr","cuepr","cuesc","cularr","cularrp","Cup","cup","cupbrcap","CupCap","cupcap","cupcup","cupdot","cupor","cups","curarr","curarrm","curlyeqprec","curlyeqsucc","curlyvee","curlywedge","curren","curvearrowleft","curvearrowright","cuvee","cuwed","cwconint","cwint","cylcty","Dagger","dagger","daleth","Darr","dArr","darr","dash","Dashv","dashv","dbkarow","dblac","Dcaron","dcaron","Dcy","dcy","DD","dd","ddagger","ddarr","DDotrahd","ddotseq","deg","Del","Delta","delta","demptyv","dfisht","Dfr","dfr","dHar","dharl","dharr","DiacriticalAcute","DiacriticalDot","DiacriticalDoubleAcute","DiacriticalGrave","DiacriticalTilde","diam","Diamond","diamond","diamondsuit","diams","die","DifferentialD","digamma","disin","div","divide","divideontimes","divonx","DJcy","djcy","dlcorn","dlcrop","dollar","Dopf","dopf","Dot","dot","DotDot","doteq","doteqdot","DotEqual","dotminus","dotplus","dotsquare","doublebarwedge","DoubleContourIntegral","DoubleDot","DoubleDownArrow","DoubleLeftArrow","DoubleLeftRightArrow","DoubleLeftTee","DoubleLongLeftArrow","DoubleLongLeftRightArrow","DoubleLongRightArrow","DoubleRightArrow","DoubleRightTee","DoubleUpArrow","DoubleUpDownArrow","DoubleVerticalBar","DownArrow","Downarrow","downarrow","DownArrowBar","DownArrowUpArrow","DownBreve","downdownarrows","downharpoonleft","downharpoonright","DownLeftRightVector","DownLeftTeeVector","DownLeftVector","DownLeftVectorBar","DownRightTeeVector","DownRightVector","DownRightVectorBar","DownTee","DownTeeArrow","drbkarow","drcorn","drcrop","Dscr","dscr","DScy","dscy","dsol","Dstrok","dstrok","dtdot","dtri","dtrif","duarr","duhar","dwangle","DZcy","dzcy","dzigrarr","Eacute","eacute","easter","Ecaron","ecaron","ecir","Ecirc","ecirc","ecolon","Ecy","ecy","eDDot","Edot","eDot","edot","ee","efDot","Efr","efr","eg","Egrave","egrave","egs","egsdot","elinters","ell","els","elsdot","Emacr","emacr","empty","emptyset","EmptySmallSquare","emptyv","EmptyVerySmallSquare","emsp","emsp13","emsp14","ENG","eng","ensp","Eogon","eogon","Eopf","eopf","epar","eparsl","eplus","epsi","Epsilon","epsilon","epsiv","eqcirc","eqcolon","eqsim","eqslantgtr","eqslantless","Equal","equals","EqualTilde","equest","Equilibrium","equiv","equivDD","eqvparsl","erarr","erDot","Escr","escr","esdot","Esim","esim","Eta","eta","ETH","eth","Euml","euml","euro","excl","exist","Exists","expectation","ExponentialE","exponentiale","fallingdotseq","Fcy","fcy","female","ffilig","fflig","ffllig","Ffr","ffr","filig","FilledSmallSquare","FilledVerySmallSquare","fjlig","flat","fllig","fltns","fnof","Fopf","fopf","ForAll","forall","fork","forkv","Fouriertrf","fpartint","frac12","frac13","frac14","frac15","frac16","frac18","frac23","frac25","frac34","frac35","frac38","frac45","frac56","frac58","frac78","frasl","frown","Fscr","fscr","gacute","Gamma","gamma","Gammad","gammad","gap","Gbreve","gbreve","Gcedil","Gcirc","gcirc","Gcy","gcy","Gdot","gdot","gE","ge","gEl","gel","geq","geqq","geqslant","ges","gescc","gesdot","gesdoto","gesdotol","gesl","gesles","Gfr","gfr","Gg","gg","ggg","gimel","GJcy","gjcy","gl","gla","glE","glj","gnap","gnapprox","gnE","gne","gneq","gneqq","gnsim","Gopf","gopf","grave","GreaterEqual","GreaterEqualLess","GreaterFullEqual","GreaterGreater","GreaterLess","GreaterSlantEqual","GreaterTilde","Gscr","gscr","gsim","gsime","gsiml","Gt","GT","gtcc","gtcir","gtdot","gtlPar","gtquest","gtrapprox","gtrarr","gtrdot","gtreqless","gtreqqless","gtrless","gtrsim","gvertneqq","gvnE","Hacek","hairsp","half","hamilt","HARDcy","hardcy","hArr","harr","harrcir","harrw","Hat","hbar","Hcirc","hcirc","hearts","heartsuit","hellip","hercon","Hfr","hfr","HilbertSpace","hksearow","hkswarow","hoarr","homtht","hookleftarrow","hookrightarrow","Hopf","hopf","horbar","HorizontalLine","Hscr","hscr","hslash","Hstrok","hstrok","HumpDownHump","HumpEqual","hybull","hyphen","Iacute","iacute","ic","Icirc","icirc","Icy","icy","Idot","IEcy","iecy","iexcl","iff","Ifr","ifr","Igrave","igrave","ii","iiiint","iiint","iinfin","iiota","IJlig","ijlig","Im","Imacr","imacr","image","ImaginaryI","imagline","imagpart","imath","imof","imped","Implies","in","incare","infin","infintie","inodot","Int","int","intcal","integers","Integral","intercal","Intersection","intlarhk","intprod","InvisibleComma","InvisibleTimes","IOcy","iocy","Iogon","iogon","Iopf","iopf","Iota","iota","iprod","iquest","Iscr","iscr","isin","isindot","isinE","isins","isinsv","isinv","it","Itilde","itilde","Iukcy","iukcy","Iuml","iuml","Jcirc","jcirc","Jcy","jcy","Jfr","jfr","jmath","Jopf","jopf","Jscr","jscr","Jsercy","jsercy","Jukcy","jukcy","Kappa","kappa","kappav","Kcedil","kcedil","Kcy","kcy","Kfr","kfr","kgreen","KHcy","khcy","KJcy","kjcy","Kopf","kopf","Kscr","kscr","lAarr","Lacute","lacute","laemptyv","lagran","Lambda","lambda","Lang","langd","langle","lap","Laplacetrf","laquo","Larr","lArr","larr","larrb","larrbfs","larrfs","larrhk","larrlp","larrpl","larrsim","larrtl","lat","lAtail","latail","late","lates","lBarr","lbarr","lbbrk","lbrace","lbrack","lbrke","lbrksld","lbrkslu","Lcaron","lcaron","Lcedil","lcedil","lceil","lcub","Lcy","lcy","ldca","ldquo","ldquor","ldrdhar","ldrushar","ldsh","lE","le","LeftAngleBracket","LeftArrow","Leftarrow","leftarrow","LeftArrowBar","LeftArrowRightArrow","leftarrowtail","LeftCeiling","LeftDoubleBracket","LeftDownTeeVector","LeftDownVector","LeftDownVectorBar","LeftFloor","leftharpoondown","leftharpoonup","leftleftarrows","LeftRightArrow","Leftrightarrow","leftrightarrow","leftrightarrows","leftrightharpoons","leftrightsquigarrow","LeftRightVector","LeftTee","LeftTeeArrow","LeftTeeVector","leftthreetimes","LeftTriangle","LeftTriangleBar","LeftTriangleEqual","LeftUpDownVector","LeftUpTeeVector","LeftUpVector","LeftUpVectorBar","LeftVector","LeftVectorBar","lEg","leg","leq","leqq","leqslant","les","lescc","lesdot","lesdoto","lesdotor","lesg","lesges","lessapprox","lessdot","lesseqgtr","lesseqqgtr","LessEqualGreater","LessFullEqual","LessGreater","lessgtr","LessLess","lesssim","LessSlantEqual","LessTilde","lfisht","lfloor","Lfr","lfr","lg","lgE","lHar","lhard","lharu","lharul","lhblk","LJcy","ljcy","Ll","ll","llarr","llcorner","Lleftarrow","llhard","lltri","Lmidot","lmidot","lmoust","lmoustache","lnap","lnapprox","lnE","lne","lneq","lneqq","lnsim","loang","loarr","lobrk","LongLeftArrow","Longleftarrow","longleftarrow","LongLeftRightArrow","Longleftrightarrow","longleftrightarrow","longmapsto","LongRightArrow","Longrightarrow","longrightarrow","looparrowleft","looparrowright","lopar","Lopf","lopf","loplus","lotimes","lowast","lowbar","LowerLeftArrow","LowerRightArrow","loz","lozenge","lozf","lpar","lparlt","lrarr","lrcorner","lrhar","lrhard","lrm","lrtri","lsaquo","Lscr","lscr","Lsh","lsh","lsim","lsime","lsimg","lsqb","lsquo","lsquor","Lstrok","lstrok","Lt","LT","ltcc","ltcir","ltdot","lthree","ltimes","ltlarr","ltquest","ltri","ltrie","ltrif","ltrPar","lurdshar","luruhar","lvertneqq","lvnE","macr","male","malt","maltese","Map","mapsto","mapstodown","mapstoleft","mapstoup","marker","mcomma","Mcy","mcy","mdash","mDDot","measuredangle","MediumSpace","Mellintrf","Mfr","mfr","mho","micro","mid","midast","midcir","middot","minus","minusb","minusd","minusdu","MinusPlus","mlcp","mldr","mnplus","models","Mopf","mopf","mp","Mscr","mscr","mstpos","Mu","mu","multimap","mumap","nabla","Nacute","nacute","nang","nap","napE","napid","napos","napprox","natur","natural","naturals","nbsp","nbump","nbumpe","ncap","Ncaron","ncaron","Ncedil","ncedil","ncong","ncongdot","ncup","Ncy","ncy","ndash","ne","nearhk","neArr","nearr","nearrow","nedot","NegativeMediumSpace","NegativeThickSpace","NegativeThinSpace","NegativeVeryThinSpace","nequiv","nesear","nesim","NestedGreaterGreater","NestedLessLess","NewLine","nexist","nexists","Nfr","nfr","ngE","nge","ngeq","ngeqq","ngeqslant","nges","nGg","ngsim","nGt","ngt","ngtr","nGtv","nhArr","nharr","nhpar","ni","nis","nisd","niv","NJcy","njcy","nlArr","nlarr","nldr","nlE","nle","nLeftarrow","nleftarrow","nLeftrightarrow","nleftrightarrow","nleq","nleqq","nleqslant","nles","nless","nLl","nlsim","nLt","nlt","nltri","nltrie","nLtv","nmid","NoBreak","NonBreakingSpace","Nopf","nopf","Not","not","NotCongruent","NotCupCap","NotDoubleVerticalBar","NotElement","NotEqual","NotEqualTilde","NotExists","NotGreater","NotGreaterEqual","NotGreaterFullEqual","NotGreaterGreater","NotGreaterLess","NotGreaterSlantEqual","NotGreaterTilde","NotHumpDownHump","NotHumpEqual","notin","notindot","notinE","notinva","notinvb","notinvc","NotLeftTriangle","NotLeftTriangleBar","NotLeftTriangleEqual","NotLess","NotLessEqual","NotLessGreater","NotLessLess","NotLessSlantEqual","NotLessTilde","NotNestedGreaterGreater","NotNestedLessLess","notni","notniva","notnivb","notnivc","NotPrecedes","NotPrecedesEqual","NotPrecedesSlantEqual","NotReverseElement","NotRightTriangle","NotRightTriangleBar","NotRightTriangleEqual","NotSquareSubset","NotSquareSubsetEqual","NotSquareSuperset","NotSquareSupersetEqual","NotSubset","NotSubsetEqual","NotSucceeds","NotSucceedsEqual","NotSucceedsSlantEqual","NotSucceedsTilde","NotSuperset","NotSupersetEqual","NotTilde","NotTildeEqual","NotTildeFullEqual","NotTildeTilde","NotVerticalBar","npar","nparallel","nparsl","npart","npolint","npr","nprcue","npre","nprec","npreceq","nrArr","nrarr","nrarrc","nrarrw","nRightarrow","nrightarrow","nrtri","nrtrie","nsc","nsccue","nsce","Nscr","nscr","nshortmid","nshortparallel","nsim","nsime","nsimeq","nsmid","nspar","nsqsube","nsqsupe","nsub","nsubE","nsube","nsubset","nsubseteq","nsubseteqq","nsucc","nsucceq","nsup","nsupE","nsupe","nsupset","nsupseteq","nsupseteqq","ntgl","Ntilde","ntilde","ntlg","ntriangleleft","ntrianglelefteq","ntriangleright","ntrianglerighteq","Nu","nu","num","numero","numsp","nvap","nVDash","nVdash","nvDash","nvdash","nvge","nvgt","nvHarr","nvinfin","nvlArr","nvle","nvlt","nvltrie","nvrArr","nvrtrie","nvsim","nwarhk","nwArr","nwarr","nwarrow","nwnear","Oacute","oacute","oast","ocir","Ocirc","ocirc","Ocy","ocy","odash","Odblac","odblac","odiv","odot","odsold","OElig","oelig","ofcir","Ofr","ofr","ogon","Ograve","ograve","ogt","ohbar","ohm","oint","olarr","olcir","olcross","oline","olt","Omacr","omacr","Omega","omega","Omicron","omicron","omid","ominus","Oopf","oopf","opar","OpenCurlyDoubleQuote","OpenCurlyQuote","operp","oplus","Or","or","orarr","ord","order","orderof","ordf","ordm","origof","oror","orslope","orv","oS","Oscr","oscr","Oslash","oslash","osol","Otilde","otilde","Otimes","otimes","otimesas","Ouml","ouml","ovbar","OverBar","OverBrace","OverBracket","OverParenthesis","par","para","parallel","parsim","parsl","part","PartialD","Pcy","pcy","percnt","period","permil","perp","pertenk","Pfr","pfr","Phi","phi","phiv","phmmat","phone","Pi","pi","pitchfork","piv","planck","planckh","plankv","plus","plusacir","plusb","pluscir","plusdo","plusdu","pluse","PlusMinus","plusmn","plussim","plustwo","pm","Poincareplane","pointint","Popf","popf","pound","Pr","pr","prap","prcue","prE","prec","precapprox","preccurlyeq","Precedes","PrecedesEqual","PrecedesSlantEqual","PrecedesTilde","preceq","precnapprox","precneqq","precnsim","precsim","Prime","prime","primes","prnap","prnE","prnsim","prod","Product","profalar","profline","profsurf","prop","Proportion","Proportional","propto","prsim","prurel","Pscr","pscr","Psi","psi","puncsp","Qfr","qfr","qint","Qopf","qopf","qprime","Qscr","qscr","quaternions","quatint","quest","questeq","QUOT","rAarr","race","Racute","racute","radic","raemptyv","Rang","rang","rangd","range","rangle","raquo","Rarr","rArr","rarr","rarrap","rarrb","rarrbfs","rarrc","rarrfs","rarrhk","rarrlp","rarrpl","rarrsim","Rarrtl","rarrtl","rarrw","rAtail","ratail","ratio","rationals","RBarr","rBarr","rbarr","rbbrk","rbrace","rbrack","rbrke","rbrksld","rbrkslu","Rcaron","rcaron","Rcedil","rcedil","rceil","rcub","Rcy","rcy","rdca","rdldhar","rdquo","rdquor","rdsh","Re","real","realine","realpart","reals","rect","REG","reg","ReverseElement","ReverseEquilibrium","ReverseUpEquilibrium","rfisht","rfloor","Rfr","rfr","rHar","rhard","rharu","rharul","Rho","rho","rhov","RightAngleBracket","RightArrow","Rightarrow","rightarrow","RightArrowBar","RightArrowLeftArrow","rightarrowtail","RightCeiling","RightDoubleBracket","RightDownTeeVector","RightDownVector","RightDownVectorBar","RightFloor","rightharpoondown","rightharpoonup","rightleftarrows","rightleftharpoons","rightrightarrows","rightsquigarrow","RightTee","RightTeeArrow","RightTeeVector","rightthreetimes","RightTriangle","RightTriangleBar","RightTriangleEqual","RightUpDownVector","RightUpTeeVector","RightUpVector","RightUpVectorBar","RightVector","RightVectorBar","ring","risingdotseq","rlarr","rlhar","rlm","rmoust","rmoustache","rnmid","roang","roarr","robrk","ropar","Ropf","ropf","roplus","rotimes","RoundImplies","rpar","rpargt","rppolint","rrarr","Rrightarrow","rsaquo","Rscr","rscr","Rsh","rsh","rsqb","rsquo","rsquor","rthree","rtimes","rtri","rtrie","rtrif","rtriltri","RuleDelayed","ruluhar","rx","Sacute","sacute","sbquo","Sc","sc","scap","Scaron","scaron","sccue","scE","sce","Scedil","scedil","Scirc","scirc","scnap","scnE","scnsim","scpolint","scsim","Scy","scy","sdot","sdotb","sdote","searhk","seArr","searr","searrow","sect","semi","seswar","setminus","setmn","sext","Sfr","sfr","sfrown","sharp","SHCHcy","shchcy","SHcy","shcy","ShortDownArrow","ShortLeftArrow","shortmid","shortparallel","ShortRightArrow","ShortUpArrow","shy","Sigma","sigma","sigmaf","sigmav","sim","simdot","sime","simeq","simg","simgE","siml","simlE","simne","simplus","simrarr","slarr","SmallCircle","smallsetminus","smashp","smeparsl","smid","smile","smt","smte","smtes","SOFTcy","softcy","sol","solb","solbar","Sopf","sopf","spades","spadesuit","spar","sqcap","sqcaps","sqcup","sqcups","Sqrt","sqsub","sqsube","sqsubset","sqsubseteq","sqsup","sqsupe","sqsupset","sqsupseteq","squ","Square","square","SquareIntersection","SquareSubset","SquareSubsetEqual","SquareSuperset","SquareSupersetEqual","SquareUnion","squarf","squf","srarr","Sscr","sscr","ssetmn","ssmile","sstarf","Star","star","starf","straightepsilon","straightphi","strns","Sub","sub","subdot","subE","sube","subedot","submult","subnE","subne","subplus","subrarr","Subset","subset","subseteq","subseteqq","SubsetEqual","subsetneq","subsetneqq","subsim","subsub","subsup","succ","succapprox","succcurlyeq","Succeeds","SucceedsEqual","SucceedsSlantEqual","SucceedsTilde","succeq","succnapprox","succneqq","succnsim","succsim","SuchThat","Sum","sum","sung","Sup","sup","sup1","sup2","sup3","supdot","supdsub","supE","supe","supedot","Superset","SupersetEqual","suphsol","suphsub","suplarr","supmult","supnE","supne","supplus","Supset","supset","supseteq","supseteqq","supsetneq","supsetneqq","supsim","supsub","supsup","swarhk","swArr","swarr","swarrow","swnwar","szlig","Tab","Tau","tau","tbrk","Tcaron","tcaron","Tcedil","tcedil","Tcy","tcy","tdot","telrec","Tfr","tfr","there4","Therefore","therefore","Theta","theta","thetasym","thetav","thickapprox","thicksim","ThickSpace","thinsp","ThinSpace","thkap","thksim","THORN","thorn","Tilde","tilde","TildeEqual","TildeFullEqual","TildeTilde","times","timesb","timesbar","timesd","tint","toea","top","topbot","topcir","Topf","topf","topfork","tosa","tprime","TRADE","trade","triangle","triangledown","triangleleft","trianglelefteq","triangleq","triangleright","trianglerighteq","tridot","trie","triminus","TripleDot","triplus","trisb","tritime","trpezium","Tscr","tscr","TScy","tscy","TSHcy","tshcy","Tstrok","tstrok","twixt","twoheadleftarrow","twoheadrightarrow","Uacute","uacute","Uarr","uArr","uarr","Uarrocir","Ubrcy","ubrcy","Ubreve","ubreve","Ucirc","ucirc","Ucy","ucy","udarr","Udblac","udblac","udhar","ufisht","Ufr","ufr","Ugrave","ugrave","uHar","uharl","uharr","uhblk","ulcorn","ulcorner","ulcrop","ultri","Umacr","umacr","uml","UnderBar","UnderBrace","UnderBracket","UnderParenthesis","Union","UnionPlus","Uogon","uogon","Uopf","uopf","UpArrow","Uparrow","uparrow","UpArrowBar","UpArrowDownArrow","UpDownArrow","Updownarrow","updownarrow","UpEquilibrium","upharpoonleft","upharpoonright","uplus","UpperLeftArrow","UpperRightArrow","Upsi","upsi","upsih","Upsilon","upsilon","UpTee","UpTeeArrow","upuparrows","urcorn","urcorner","urcrop","Uring","uring","urtri","Uscr","uscr","utdot","Utilde","utilde","utri","utrif","uuarr","Uuml","uuml","uwangle","vangrt","varepsilon","varkappa","varnothing","varphi","varpi","varpropto","vArr","varr","varrho","varsigma","varsubsetneq","varsubsetneqq","varsupsetneq","varsupsetneqq","vartheta","vartriangleleft","vartriangleright","Vbar","vBar","vBarv","Vcy","vcy","VDash","Vdash","vDash","vdash","Vdashl","Vee","vee","veebar","veeeq","vellip","Verbar","verbar","Vert","vert","VerticalBar","VerticalLine","VerticalSeparator","VerticalTilde","VeryThinSpace","Vfr","vfr","vltri","vnsub","vnsup","Vopf","vopf","vprop","vrtri","Vscr","vscr","vsubnE","vsubne","vsupnE","vsupne","Vvdash","vzigzag","Wcirc","wcirc","wedbar","Wedge","wedge","wedgeq","weierp","Wfr","wfr","Wopf","wopf","wp","wr","wreath","Wscr","wscr","xcap","xcirc","xcup","xdtri","Xfr","xfr","xhArr","xharr","Xi","xi","xlArr","xlarr","xmap","xnis","xodot","Xopf","xopf","xoplus","xotime","xrArr","xrarr","Xscr","xscr","xsqcup","xuplus","xutri","xvee","xwedge","Yacute","yacute","YAcy","yacy","Ycirc","ycirc","Ycy","ycy","yen","Yfr","yfr","YIcy","yicy","Yopf","yopf","Yscr","yscr","YUcy","yucy","Yuml","yuml","Zacute","zacute","Zcaron","zcaron","Zcy","zcy","Zdot","zdot","zeetrf","ZeroWidthSpace","Zeta","zeta","Zfr","zfr","ZHcy","zhcy","zigrarr","Zopf","zopf","Zscr","zscr","zwj","zwnj","extendError","writableName","Error","enumerable","writable","IndexSizeError","DomstringSizeError","HierarchyRequestError","WrongDocumentError","InvalidCharacterError","NoDataAllowedError","NoModificationAllowedError","NotFoundError","InUseAttributeError","InvalidStateError","SyntaxError","InvalidModificationError","NamespaceError","InvalidAccessError","ValidationError","TypeMismatchError","SecurityError","NetworkError","AbortError","URLMismatchError","QuotaExceededError","TimeoutError","InvalidNodeTypeError","DataCloneError","EncodingError","NotReadableError","UnknownError","ConstraintError","DataError","TransactionInactiveError","ReadOnlyError","VersionError","OperationError","NotAllowedError","OptOutError","DOMExceptionNames","isValidDomExceptionCode","messageOrCode","nameOrMessage","captureStackTrace","defineProperties","code","ExceptionCode","INDEX_SIZE_ERR","DOMSTRING_SIZE_ERR","WRONG_DOCUMENT_ERR","NO_DATA_ALLOWED_ERR","NO_MODIFICATION_ALLOWED_ERR","NOT_SUPPORTED_ERR","INVALID_STATE_ERR","SYNTAX_ERR","INVALID_MODIFICATION_ERR","INVALID_ACCESS_ERR","VALIDATION_ERR","TYPE_MISMATCH_ERR","SECURITY_ERR","NETWORK_ERR","ABORT_ERR","URL_MISMATCH_ERR","QUOTA_EXCEEDED_ERR","TIMEOUT_ERR","INVALID_NODE_TYPE_ERR","DATA_CLONE_ERR","entries","detectUnicodeSupport","RegExpImpl","RegExp","match","exec","UNICODE_SUPPORT","regexp","lastIndexOf","chars_without","search","JSON","stringify","args","self","isStr","regg","concat","Char","_SChar","SChar_s","S","S_OPT","NameStartChar","NameChar","Nmtoken","EntityRef","CharRef","Reference","PEReference","EntityValue","AttValue","NCName","QName","QName_group","SystemLiteral","PI","PubidChar","PubidLiteral","PCDATA","Mixed","contentspec","elementdecl","NotationType","Enumeration","EnumeratedType","AttType","DefaultDecl","AttlistDecl","ExternalID","ExternalID_match","NDataDecl","ENTITY_DECL_START","GEDecl","PEDef","EntityDecl","PublicID","NotationDecl","Eq","VersionNum","VersionInfo","EncName","XMLDecl","CData","CDSect","UNICODE_REPLACEMENT_CHARACTER","domParser","_copy","defaultNSMapCopy","fixedFromCharCode","surrogate1","surrogate2","fromCharCode","entityReplacer","complete","k","charAt","parseInt","appendText","end","xt","ENTITY_REG","m","lineEnd","linePattern","lineStart","parseStack","currentNSMap","unclosedTags","tagStart","fromSource","tagNameRaw","tagNameMatch","currentTagName","tagNameLower","config","pop","localNSMap","parseProcessingInstruction","parseDoctypeCommentOrCData","ElementAttributes","parseElementStartPart","closed","locator2","copyLocator","parseHtmlSpecialContent","max","f","addAttribute","qname","startIndex","attributeNames","addValue","attrName","s","setTagName","nsp","nsPrefix","elStartEnd","isEscapableRaw","elEndStart","parseUtils","char","skip","substringFromIndex","getIndex","getMatch","getSource","skipBlanks","blanks","substringStartsWith","groups","SystemLiteralOnly","parsePI","intSubsetStart","parseDoctypeInternalSubset","endDTD","getLocalName","_regeneratorRuntime","r","o","asyncIterator","u","toStringTag","define","configurable","wrap","Generator","Context","makeInvokeMethod","tryCatch","arg","h","y","GeneratorFunction","GeneratorFunctionPrototype","d","getPrototypeOf","values","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","resultName","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","mark","setPrototypeOf","__proto__","awrap","Promise","reverse","prev","stop","rval","handle","finish","delegateYield","asyncGeneratorStep","_asyncToGenerator","_next","_throw","m_suggestions","controller","AbortController","m_index","m_fields","m_size","m_maximumResponses","m_filterByService","m_filterByProjection","m_filterByLayerPriority","m_filterWMTSPriority","m_filterByTMS","m_url","EventTarget","suggest","_ref","_callee","url","params","response","results","_loop","_i","result","_context2","clear","URL","fields","size","searchParams","append","fetch","json","status","_context","findIndex","includes","layer_name","score","sort","inventory","unique","attribution","srs","keywords","extent","metadata","metadata_urls","description","service","tech","tags","theme","producer","dispatchEvent","CustomEvent","bubbles","detail","getSuggestions","_x","abort","getNames","getTitles","setIndex","setFields","setSize","setUrl","eval","setMaximumResponses","setFiltersByService","setFiltersByProjection","setFiltersByLayerPriority","setFilterWMTSPriority","setFiltersByTMS","updateFilterByTMS","_ref2","_callee2","lstName","_context3","layers","_x2","module","objectOrFunction","x","isFunction","isArray","vertxNext","customSchedulerFn","asap","queue","flush","scheduleFlush","setScheduler","scheduleFn","setAsap","asapFn","browserWindow","window","browserGlobal","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","isNode","process","isWorker","Uint8ClampedArray","importScripts","MessageChannel","useNextTick","nextTick","useVertxTimer","useSetTimeout","useMutationObserver","iterations","observer","document","observe","characterData","useMessageChannel","channel","port1","onmessage","port2","postMessage","globalSetTimeout","setTimeout","attemptVertx","vertx","Function","require","runOnLoop","runOnContext","onFulfillment","onRejection","noop","PROMISE_ID","makePromise","_state","invokeCallback","_result","subscribe","resolve$1","Constructor","promise","PENDING","FULFILLED","REJECTED","selfFulfillment","cannotReturnOwn","tryThen","then$$1","fulfillmentHandler","rejectionHandler","handleForeignThenable","thenable","sealed","fulfill","reason","reject","_label","handleOwnThenable","handleMaybeThenable","maybeThenable","publishRejection","_onerror","publish","_subscribers","subscribers","settled","hasCallback","succeeded","initializePromise","resolver","nextId","validationError","Enumerator","_instanceConstructor","_remaining","_enumerate","_eachEntry","entry","resolve$$1","_then","didError","_settledAt","Promise$1","_willSettleAt","state","enumerator","all","_","reject$1","needsResolver","needsNew","catch","finally","polyfill","local","P","promiseToString","cast","_setScheduler","_setAsap","_asap","factory","EventBusClass","listeners","addEventListener","scope","numOfArgs","splice","removeEventListener","numOfCallbacks","newArray","listener","hasEventListener","dispatch","event","concatArgs","getEvents","str","className","undefinedType","isIE","navigator","userAgent","logMethods","_loggersByName","defaultLogger","bindMethod","obj","methodName","bind","traceForIE","log","trace","realMethod","replaceLoggingMethods","getLevel","methodFactory","debug","levels","SILENT","enableLoggingWhenConsoleArrives","defaultMethodFactory","_level","_loggerName","Logger","inheritedLevel","defaultLevel","userLevel","storageKey","persistLevelIfPossible","levelNum","levelName","toUpperCase","localStorage","ignore","cookie","encodeURIComponent","getPersistedLevel","storedLevel","cookieName","location","clearPersistedLevel","removeItem","normalizeLevel","setLevel","persist","setDefaultLevel","resetLevel","enableAll","TRACE","disableAll","rebuild","childName","initialLevel","getLogger","logger","_log","noConflict","getLoggers","globalObject","getGlobal","Headers","Request","Response","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","definition","globalThis","ol","Overlay","VectorTile","Vector","TileWMS","WMTS","ImageWMS","interaction","VERBOSE","env","logname","MessagesResources","PARAM_MISSING","PARAM_EMPTY","PARAM_TYPE","PARAM_FORMAT","PARAM_NOT_SUPPORT","PARAM_NOT_SUPPORT_NODEJS","PARAM_UNKNOWN","SERVICE_REQUEST_BUILD","SERVICE_REQUEST_EMPTY","SERVICE_RESPONSE_EXCEPTION","SERVICE_RESPONSE_EXCEPTION_2","SERVICE_RESPONSE_ANALYSE","SERVICE_RESPONSE_ANALYSE_2","SERVICE_RESPONSE_EMPTY","SERVICE_RESPONSE_EMPTY_2","SERVICE_RESPONSE_FORMAT","SERVICE_RESPONSE_FORMAT_2","SERVICE_RESPONSE_FORMAT_3","CLASS_CONSTRUCTOR","getMessage","clef","parametres","shift","Helper","normalyzeParameters","myParams","tabParams","normalyzeUrl","encode","myUrl","firstOccuranceIndex","indent","msg","XHR","settings","format","timeOut","proxy","content","headers","referer","__call","onResponse","onFailure","__callJSON","__callXML","corps","hXHR","nodefetch","opts","Referer","body","ok","statusText","XMLHttpRequest","overrideMimeType","onTimeOutTrigger","setRequestHeader","onerror","ontimeout","onreadystatechange","readyState","clearTimeout","responseURL","data4xhr","send","XDomainRequest","timeout","onload","responseText","data4xdr","xmlDoc","ActiveXObject","loadXML","JSONP","uuid","floor","Date","now","info","callbackId","callbackSuffix","urlHasCallbackKey","urlHasCallbackName","idx","j","callbackName","HasCallbackName","onTimeOut","_deleteScript","_createScript","scriptu","scripto","Protocol","protocol","nocache","output","getTime","ErrorService","TYPE_UNKERR","stack","TYPE_SRVERR","TYPE_USEERR","CommonService","ssl","proxyURL","httpMethod","rawResponse","onSuccess","outputFormat","request","context","onBuildRequest","callService","onCallService","analyzeResponse","onAnalyzeResponse","buildRequest","success","strUrlProxified","strData","bUrlProxified","requestMetaOptions","apiKey","serverUrl","http","onBeforeParse","newResponse","DefaultUrlService","newUrl","path","Alti","new_key","ProcessIsoCurve","Config","_key","AutoComplete","ReverseGeocode","Geocode","Route","ConfigInterface","generalOptions","apiKeys","defaultGMLGFIStyle","wgs84Resolutions","tileMatrixSets","isKeyConfLoaded","getLayersId","getLayerId","layerName","layerId","parts","servicePartsLayer","getLayersConf","layersIdArray","lyrId","getLayerConf","getLayerParams","layerConf","getLayerKey","serviceParams","styles","formats","projection","defaultProjection","minScale","globalConstraint","minScaleDenominator","maxScale","maxScaleDenominator","bbox","legends","wmtsOptions","tileMatrixSetLimits","TMSLink","tileMatrixSetLink","tmsConf","getTMSConf","matrixIds","tileMatrices","nativeResolutions","layerKey","resourcesByKey","arrayLayerId","getTileMatrixSets","tmsID","getGlobalConstraints","CLASSNAME","customConfigFile","sync","listConfigUrls","__callServiceSync","__callService","listConfigResults","Fetch","fetchFactory","credentials","promises","ConfigJSON","objects","allLayersConfig","allKeysConfig","allTMSConfig","mergeConfig","IConfig","Gp","property","AltiRequest","positions","delimiter","crs","resource","measures","setPositions","lstPosition","lon","getPositions","pos","warn","addPositions","getLon","lstLon","getLat","lstLat","getData","AltiElevationRequest","zonly","_zonly","z","AltiProfilRequest","sampling","_sampling","AltiRequestREST","DataObject","requestString","template","point","profil","post","processRequestString","__addDataInputs","myTemplate","WPS","paramservice","paramversion","paramidentifier","identifier","paramrawdataoutput","rawdataoutput","paramrequest","namespaceByDefault","schemaLocationByDefault","tmpl","sep","that","__addDataInput","tmp","setMethod","getMethod","build","wps","rqstWPS","bOnError","bOnSuccess","api","myReq","xmlString","reader","__getXMLDOC","setReader","parser","errorMsg","parseError","errorCode","line","linepos","parsererror","innerHTML","__readDefault","dataAttributes","nodeAttributes","attribute","__getAttributes","childData","children","getXMLString","setXMLString","getReader","read","getXMLDoc","setXMLDoc","parserOutput","__getRootNode","AltiResponse","elevations","Elevation","Measure","source_name","source_measure","acc","AltiResponseReader","READERS","altiResponse","elevation","textNode","parseFloat","elevationObject","measure","measureChildren","exceptionreport","exceptionReport","exception","exceptionCode","AltiResponseFactory","JSONResponse","errorMess","lstUrlByDefault","urlFound","extension","GeocodeParamREST","geocodeMethod","query","searchGeometry","maxResp","returnTrueGeometry","filters","getFilters","getSearchGeometry","getParams","GeocodeRequestREST","GeocodeRequestFactory","GeocodeResponse","locations","GeocodedLocation","matchType","placeAttributes","accuracy","GeocodeResponseParser","_parseFeature","geocodeResponse","geometry","coordinates","properties","_type","number","features","_parseError","mess","GeocodeReponseFactory","options_","patchOptionConvertor","maximumResponses","filterOptions","returnFreeForm","GeocodeResponseFactory","bbox2Json","circle","circle2Json","polygon","polygon2Json","left","right","radius","jsonGeom","geoEPSG","AutoCompleteResponse","suggestedLocations","SuggestedLocation","commune","fullText","postalCode","classification","street","poi","kind","AutoCompleteResponseFactory","suggestedLocation","country","poiType","city","fulltext","zipcode","territory","terr","RouteParamREST","startPoint","endPoint","intermediates","viaPoints","profile","graph","constraints","optimization","routePreference","getSteps","distanceUnit","timeUnit","waysAttributes","getIntermediates","array","getWaysAttributes","getProfile","getDistanceUnit","getOptimization","getConstraints","constraintArray","RouteRequestREST","RouteResponse","totalTime","totalDistance","routeGeometry","routeInstructions","RouteInstruction","duration","distance","instruction","RouteResponseFactory","legs","legSteps","steps","geometryInInstructions","legList","portions","step","modifier","exit","nom_1_droite","toponyme","constraintTunnel","constraintPont","constraintAutoroute","exclusions","constraintType","operator","provideBbox","expectedStartTime","UrlByDefault","ProcessIsoCurveParam","costType","costValue","time","getLocation","getDirection","ProcessIsoCurveRequest","mode","postRequest","direction","ProcessIsoCurveResponse","ProcessIsoCurveResponseFactory","coords","smoothing","holes","oIsoCurve","getConfig","getAltitude","geocode","reverseGeocode","autoComplete","route","isoCurve","servicesVersion","servicesDate","Protocols","Services","DefaultUrl","IsoCurveResponse","LoggerByDefault","Log","loggers","ProxyUtils","proxifyUrl","proxyOptions","proxyUrl","trim","noProxyDomains","Gfi","getLayerFormat","getType","tileGrid","TileWMSSource","ImageWMSSource","WMTSSource","VectorSource","VectorTileSource","displayInfo","autoPanOptions","_htmlDoc","_content","closer","onclick","featuresOverlay","removeOverlay","contentDiv","autoPan","autoPanAnimation","autoPanMargin","positioning","insertFirst","stopEvent","addOverlay","setPosition","render","features2html","props","getProperties","insertAdjacentHTML","nameDiv","descDiv","others","oDiv","ul","li","listForbidden","span","layerGetFeatureAtCoordinates","olLayer","olCoordinate","pixel","getPixelFromCoordinate","hasFeatureAtPixel","layer","displayVectorFeatureInfo","olLayers","forEachFeatureAtPixel","displayFeatureInfo","gfiLayers","layersOrdered","getZIndex","requests","infoFormat","minMaxResolutionOk","minResolution","getResolution","maxResolution","getVisible","coordinate","_res","getView","_url","getFeatureInfoUrl","getProjection","INFOFORMAT","INFO_FORMAT","vectorLayersOrdered","nextItemIndex","report","displayed","requestsSync","resp","getPosition","offsetX","offsetY","pointerType","pointers","pageX","pageY","getCoordinateFromPixel","onDisplayFeatureInfo","gfiObj","isActive","getMap","preventDefault","interactions","getInteractions","getArray","getActive","SelectInteraction","ModifyInteraction","DrawInteraction","_proxyUrl","_noProxyDomains","_autoPan","_autoPanAnimation","_autoPanMargin","eventLayers","_layers","_defaultEvent","ind","_defaultInfoFormat","gp","GfiUtils","KML","ColorUtils","hex","Number","hexa","arrayToRgba","red","green","blue","arrayToHex","elems","opacity","rgbaToHex","rgba","parsed","hexToRgba","rgb","isHex","isRGB","lightOrange","darkOrange","turquoiseBlue","defaultOffset","Feature","Style","Circle","Icon","Fill","Stroke","geom","Polygon","MultiPolygon","setPropertyFill","getStyle","fill","getFill","colorFill","getColor","cf","Color","oColorFill","setPropertyStroke","stroke","getStroke","colorStroke","cs","oColorStroke","getWidth","setPropertyLabel","isName","getText","getFont","Styling","DEFAULT_TEXT","font","getTextAlign","textAlign","setPropertyMarker","getImage","IconStyle","color","colorIcon","scaleIcon","getScale","round","srcImage","getSrc","unset","fillImg","colorFillImg","cfi","oColorFillImg","strokeImg","colorStrokeImg","csi","oColorStrokeImg","getRadius","APPLY_CONVERT_GEOM_GPX","DEFAULT_ICON","Markers","anchor","scale","DEFAULT_CIRCLE","width","DEFAULT_STROKE","DEFAULT_FILL","opactity","getListTags","defineStyleFromProperties","symbolMarker","colorMarker","labelStroke","labelFill","isLabel","circleRadius","circleStroke","circleFill","getGeometry","isCircle","optionsCircle","StrokeStyle","FillStyle","CircleStyle","optionsText","TextStyle","styleText","cloneStyleText","clone","setText","initType","ClassPoly","setGeometry","getCoordinates","defineStyleFunctionByDefault","defaultStyle","resolution","optsc","optsCircle","styleTextCircle","optsp","optsl","definePropertiesFromStyleByType","definePropertiesFromStyle","getStyleFunction","setStyle","defineTagFromStyle","errorNode","querySelector","formatted","lines","lastType","transitions","ln","single","Boolean","closing","opening","fromTo","padding","detectSupport","isDesktop","mergeParams","_olKML","_this","_classCallCheck","extensions","_possibleConstructorReturn","_inherits","kmlNode","firstNodeLevel","nodes","ik","stylesUrl","_v","types","poly","domStyles","hdlDomStyle","domExtendedData","domNameTag","_idStyle","textContent","fctExtend","extendedData","fctName","nameData","labelStyleDom","iconStyleDom","labelName","labelDescription","fctLabel","labelStyle","fctIcon","iconStyle","fctIconLabel","iconLabelStyle","fstyles","fctPoly","polygonStyle","fctLine","lineStringStyle","fctCircle","circleStyle","fctPoint","pointStyle","_superPropGet","_writeRootExtensions","kmlStringExtended","_writeExtendStylesFeatures","kmlStringFormatted","Parser","__convertRGBColorsToKML","strColor","__createExtendedStyleLabel","textStyle","_fontFamily","_fontSize","_font","splits","strokeTextStyle","_haloColor","colorHex","_haloRadius","labelExtended","fImageStyle","strokeColor","strokeWidth","cfs","strokeColorHex","fillColor","cff","fillColorHex","iconExtended","__createExtendedStyleIcon","yunits","getSize","getAnchor","hotspot","_processKml","nodeIconStyle","nodeLabelStyle","fillColorImgHex","circleExtended","removeNodes","extendDataElement","dataElement","_readExtendStylesFeatures","kmlDoc","kmlString","outerHTML","__convertKMLColorsToRGB","__getExtendedStyleToFeatureLabel","_text","_color","_colorHalo","_radiusHalo","_circleType","_circleRadius","_circleFillColor","_circleStrokeColor","_circleStrokeWidth","bLabelStyleSimpleExtensionGroup","bObjectSimpleExtensionGroup","nodeStyles","attributs","attributsExt","fillColorValue","fillOpacity","fillColorHexa","strokeColorValue","strokeOpacity","strokeColorHexa","StyleInstance","anchorOrigin","anchorXUnits","anchorYUnits","__getExtendedStyleToFeatureIcon","_src","_scale","_bSizeIcon","_sizeW","_sizeH","_bHotSpot","_anchorX","_anchorXUnits","_anchorY","_anchorYUnits","bIconStyle","optionsIcon","crossOrigin","Utils","featureStyleFunction","_styles","_style","__getStyleToDefaultFeature","showPointNames_","extend","_fname","_fdescription","_ftitle","setProperties","childNodesLevel","childNodesExtended","olKML","KMLExtended","GPX","MultiLineString","LineString","_olGPX","readExtensions","clbk","setId","desc","styleFunction","fp","fm","orderBy","cmpA","cmpB","localeCompare","numeric","gpxNode","writeRootExtensions_","processExtensions_","writeExtensions_","gpxStringExtended","gpxStringFormatted","searchChildNodesMeta","nodeMeta","searchChildNodesExt","nodeExt","searchChildNodesData","nodeData","extensionsRoot","toDOM","tag","extensionsNode","actions","fct","olGPX","GPXExtended","GeoJSON","_olGeoJSON","_this2","geoJSONObject","writeFeaturesObject","olGeoJSON","GeoJSONExtended","_WMTSSource","_callSuper","pixelRatio","tilePixelRatio","tileCoord","getTileCoordForCoordAndResolution","tileExtent","getTileCoordExtent","transformedTileCoord","tmpTileCoord","tmpExtent","olCreateEmpty","getExtent","isGlobal","ceil","olGetWidth","olIntersects","getTransformedTileCoord","getResolutions","tileResolution","tileMatrix","getMatrixIds","baseParams","SERVICE","VERSION","REQUEST","LAYER","getLayer","TILECOL","TILEROW","TILEMATRIX","TILEMATRIXSET","getMatrixSet","FORMAT","getFormat","STYLE","tileSize","getTileSize","min","urls","WMTSExtended","tilegrid","LayerUtils","getZoomLevelFromScaleDenominator","scaleDenominator","resolutionsNatives","getAttributions","zoom","attributions","originators","visibility","drawLogo","jl","originator","kl","constraint","minZoomLevel","maxZoomLevel","viewExtent","bounds","intersects","logo","container","href","height","extent1","extent2","intersectsX","intersectsY","configuration","isConfigLoaded","global","SourceWMTS","_WMTSExtended","layerCfg","wmtsParams","urlParams","Pkg","olExtVersion","wmtsSourceOptions","maxZoom","matrixSet","WMTSTileGrid","resolutions","origin","topLeftCorner","olParams","_originators","_legends","_metadata","_description","_title","_quicklookUrl","quicklookUrl","GeoportalWMTS","SourceWMS","_TileWMSSource","wmsParams","wmsSourceOptions","LAYERS","STYLES","GeoportalWMS","loadingstrategy","SourceWFS","_VectorSource","wfsParams","loadFeatures","failure","xhr","removeLoadedExtent","readFeatures","addFeatures","links","rel","wfsSourceOptions","loader","maxFeatures","proj","getCode","strategy","olLoadingstrategyTile","olTilegrid","minZoom","GeoportalWFS","Tile","LayerWMTS","_TileLayer","olSourceParams","sourceParams","wmtsSource","layerTileOptions","globalConstrainWFSts","globalConstraints","olGetProj","getUnits","TileLayer","LayerWMS","wmsSource","geobbox","olTransformExtentProj","STYLEBYDEFAULT","LayerWFS","_VectorLayer","layerVectorOptions","VectorLayer","TileJSON","MVT","Observable","compose","transform","dx1","dy1","sx","sy","dx2","dy2","sin","cos","createOrUpdate","minX","minY","maxX","maxY","createOrUpdateEmpty","Infinity","createOrUpdateFromFlatCoordinates","flatCoordinates","stride","extendXY","extendFlatCoordinates","getHeight","squaredSegmentDistance","x1","y1","x2","y2","dx","dy","douglasPeucker","squaredTolerance","simplifiedFlatCoordinates","simplifiedOffset","markers","last","first","maxSquaredDistance","squaredDistance","douglasPeuckerArray","ends","simplifiedEnds","snap","tolerance","quantize","x3","y3","quantizeArray","ascending","arr","linearRingContainsXY","wn","linearRingsContainsXY","getInteriorPointOfArray","flatCenters","flatCentersOffset","intersections","rr","pointX","NaN","maxSegmentLength","segmentLength","abs","code_","units_","extent_","worldExtent_","worldExtent","axisOrientation_","axisOrientation","global_","canWrapX_","getPointResolutionFunc_","getPointResolution","defaultTileGrid_","metersPerUnit_","metersPerUnit","canWrapX","getMetersPerUnit","getWorldExtent","getAxisOrientation","setGlobal","getDefaultTileGrid","setDefaultTileGrid","setExtent","setWorldExtent","setGetPointResolution","func","getPointResolutionFunc","RADIUS","HALF_SIZE","EXTENT","WORLD_EXTENT","MAX_SAFE_Y","tan","EPSG3857Projection","super","units","cosh","PROJECTIONS","fromEPSG4326","dimension","toEPSG4326","atan","exp","EPSG4326Projection","cache","transforms","destination","transformFn","sourceCode","destinationCode","E","sqrt","epsgRegExes","zoneFromCode","epsgId","re","north","projectionFactories","cloneTransform","addProjection","add","projectionLike","makeProjection","addEquivalentProjections","projections","addProjections","projections2","forwardTransform","inverseTransform","linearRingIsClockwise","edge","interpolatePoint","fraction","cumulativeLengths","haystack","needle","comparator","cmp","low","high","found","binarySearch","projection1","projection2","tmpTransform","RenderFeature","id_","type_","flatCoordinates_","flatInteriorPoints_","flatMidpoints_","ends_","properties_","squaredTolerance_","stride_","simplifiedGeometry_","createOrUpdateFromCoordinate","getFlatInteriorPoint","flatCenter","getFlatInteriorPoints","endss","startOrientation","prevEndIndex","orientation","linearRingss","interiorPoints","getInteriorPointsOfMultiArray","getFlatMidpoint","getFlatMidpoints","midpoint","getId","getOrientedFlatCoordinates","getSimplifiedGeometry","simplifyTransformed","getPropertiesInternal","getStride","pixelExtent","projectedExtent","destinationStride","transform2D","applyTransform","getEnds","enableSimplifyTransformed","fn","lastResult","lastArgs","lastThis","nextArgs","arr1","arr2","len1","memoizeOne","getFlatCoordinates","functions","canvas","TileState","util","Image","Layer","Group","Raster","Source","TileGrid","View","Units","events","Event","getDefaultExportFromCjs","parseCSSColor_1","kCSSColorTable","clamp_css_byte","clamp_css_float","parse_css_int","parse_css_float","css_hue_to_rgb","m1","m2","parseCSSColor","css_str","iv","op","ep","fname","toArray","toArray01","toArray01PremultipliedAlpha","black","white","transparent","Color$1","convertLiteral","convertFunction","parameters","propertySpec","stops","expression","convertIdentityFunction","zoomAndFeatureDependent","featureDependent","zoomDependent","tokens","convertTokenString","featureFunctionParameters","featureFunctionStops","zoomStops","functionType","getFunctionType","getInterpolateOperator","appendStopPair","convertPropertyFunction","fixupDegenerateStepCurve","convertZoomAndPropertyFunction","isStep","convertZoomFunction","colorSpace","getFallback","defaultValue","curve","interpolated","literal","ParsingError","ParsingError$1","Scope","bindings","has","Scope$1","NullType","NumberType","StringType","BooleanType","ColorType","ObjectType","ValueType","CollatorType","FormattedType","ResolvedImageType","array$1","itemType","N","toString$1","valueMemberTypes","checkSubtype","expected","memberType","isValidType","provided","allowedTypes","some","isValidNativeType","Collator","caseSensitive","diacriticSensitive","locale","sensitivity","collator","Intl","usage","compare","lhs","rhs","resolvedLocale","resolvedOptions","FormattedSection","fontStack","textColor","Formatted","sections","fromString","unformatted","isEmpty","section","serialize","serialized","ResolvedImage","available","validateRGBA","isValue","mixed","typeOf","Literal","expectedType","evaluate","eachChild","outputDefined","Literal$1","RuntimeError$1","toJSON","types$2","string","boolean","Assertion","ctx","Assertion$1","FormatExpression","firstArg","nextTokenMayBeObject","lastExpression","evaluatedContent","ImageExpression","evaluatedImageName","availableImages","types$1","Coercion","parseColor","Coercion$1","geometryTypes","EvaluationContext$1","globals","featureState","formattedSection","_parseColorCache","canonical","featureTileCoord","featureDistanceData","geometryType","canonicalID","distanceFromCenter","center","dX","dY","bearing","cached","CompoundExpression","_evaluate","definitions","availableOverloads","overloads","signature","signatureContext","ParsingContext$1","registry","parsedArgs","argParseFailed","signatures","stringifySignature","actualTypes","register","CompoundExpression$1","CollatorExpression","updateBBox","coord","boxWithinBox","bbox1","bbox2","getTileCoordinates","tilesAtZoom","pow","onBoundary","p1","p2","pointWithinPolygon","rings","inside","len2","pointWithinPolygons","polygons","twoSided","q1","q2","det1","det2","lineIntersectLine","vectorP","vectorQ","v1","v2","lineIntersectPolygon","lineStringWithinPolygon","lineStringWithinPolygons","getTilePolygon","getTilePolygons","updatePoint","polyBBox","worldSize","halfWorldSize","getTilePoints","pointBBox","shifts","tilePoints","points","getTileLines","lineBBox","tileLines","tileLine","resetBBox","Within","geojson","geometries","polygonGeometry","tilePolygon","tilePolygons","pointsWithinPolygons","linesWithinPolygons","Within$1","isFeatureConstant","isStateConstant","isGlobalPropertyConstant","Var","boundExpression","Var$1","ParsingContext","expr","_parse","annotate","typeAnnotation","Expr","actual","isConstant","ec","isTypeAnnotation","childrenConstant","findStopLessThanOrEqualTo","currentValue","nextValue","lowerIndex","upperIndex","currentIndex","Step","labels","outputs","label","outputType","labelKey","valueKey","stopCount","out","Step$1","unitbezier","UnitBezier","p1x","p1y","p2x","p2y","cx","bx","ax","cy","by","ay","sampleCurveX","sampleCurveY","sampleCurveDerivativeX","solveCurveX","t0","t1","t2","d2","solve","UnitBezier$1","interpolate","from","to","Xn","Zn","t3","deg2rad$1","rad2deg","xyz2lab","lab2xyz","xyz2rgb","rgb2xyz","rgbToLab","rgbColor","labToRgb","labColor","interpolateHue","lab","forward","hcl","atan2","hclColor","Interpolate","interpolation","interpolationFactor","lower","upper","exponentialInterpolation","controlPoints","rest","outputLower","outputUpper","lowerValue","upperValue","difference","progress","Interpolate$1","Coalesce","needsAnnotation","firstImage","argCount","Coalesce$1","Let","binding","Let$1","At","At$1","In","In$1","IndexOf","fromIndex","IndexOf$1","Match","inputType","cases","otherwise","labelContext","MAX_SAFE_INTEGER","sortedLabels","groupedByOutput","outputLookup","outputIndex","coerceLabel","Match$1","Case","branches","Case$1","Slice","beginIndex","endIndex","Slice$1","isComparableType","eqCollate","makeComparison","compareBasic","compareWithCollator","isOrderComparison","Comparison","hasUntypedArgument","rt","Equals","NotEquals","LessThan","GreaterThan","LessThanOrEqual","GreaterThanOrEqual","NumberFormat","currency","unit","minFractionDigits","maxFractionDigits","minimumFractionDigits","maximumFractionDigits","Length","expressions","varargs","pitch","heatmapDensity","lineProgress","skyRadialProgress","accumulated","LN2","LN10","asin","acos","isSupportedScript","StyleExpression","_warningHistory","_evaluator","_defaultValue","spec","getDefaultValue","_enumValues","evaluateWithoutErrorHandling","val","createExpression","enum","resolvedImage","getExpectedType","ZoomConstantExpression","_styleExpression","isStateDependent","ZoomDependentExpression","interpolationType","createPropertyExpression","isFeatureConstant$1","supportsPropertyExpression","isZoomConstant","supportsZoomExpression","zoomCurve","findZoomCurve","supportsInterpolation","childResult","deepUnbundle","unbundledValue","valueOf","unbundle","isExpressionFilter","createFilter","layerType","needGeometry","needFeature","convertFilter","filterExp","staticFilter","isDynamicFilter","unionDynamicBranches","collapseDynamicBooleanExpressions","extractStaticFilter","filterSpec","compiledStaticFilter","filterFunc","err","globalProperties","dynamicFilterFunc","compiledDynamicFilter","dynamicFilter","geometryNeeded","collapsed","dynamicConditionExpressions","collapsedExpression","subExpression","isBranchingDynamically","Set","convertComparisonOp","convertNegation","convertInOp","convertHasOp","refProperties","deref","derefLayers","ref","fontWeights","thin","hairline","light","book","regular","normal","plain","roman","standard","medium","bold","heavy","fat","poster","sp","italicRE","fontCache","mb2css","fonts","lineHeight","cssData","haveWeight","haveStyle","weight","fontFamilies","maybeWeight","w","previousPart","startsWith","fontFamily","mapboxBaseUrl","getMapboxPath","normalizeStyleUrl","token","mapboxPath","decodeURI","mapboxSubdomains","normalizeSourceUrl","tokenParam","styleUrl","urlObject","sizeFactor","devicePixelRatio","functionCacheByStyleId","filterCacheByStyleId","styleId","getStyleId","glStyle","getStyleFunctionKey","getUid","getFunctionCache","functionCache","getFilterCache","filterCache","deg2rad","degrees","defaultResolutions","res","createCanvas","WorkerGlobalScope","OffscreenCanvas","getZoomForResolution","zoomFactor","getResolutionForZoom","factor","pendingRequests","fetchResource","resourceType","transformedRequest","transformRequest","pendingRequest","toPromise","getGlStyle","glStyleOrUrl","accessToken","tilejsonCache","getTileJson","glSource","cacheKey","tileLoadFunction","tile","setLoader","arrayBuffer","featureProjection","setFeatures","setState","blob","createObjectURL","revokeObjectURL","tiles","normalizedSourceUrl","accessTokenParam","tileJson","tileUrl","scheme","drawIconHalo","spriteImage","spriteImageData","haloWidth","haloColor","imgSize","imageCanvas","imageContext","getContext","drawImage","imageData","getImageData","globalCompositeOperation","fillStyle","jj","arc","smoothstep","drawSDF","buffer","putImageData","hairSpacePool","applyLetterSpacing","letterSpacing","textWithLetterSpacing","joinSpaceString","measureContext","getMeasureContext","measureText","measureCache","wrapText","em","hardLines","wrappedText","words","maxWidth","word","testLine","prevWidth","nextWidth","lineWords","lastWord","fontFamilyRegEx","stripQuotesRegEx","loadedFontFamilies","hasFontFamily","family","styleSheets","styleSheet","cssRules","rules","cssRule","cssText","processedFontFamilies","emptyObj$1","zoomObj","renderFeatureCoordinates","renderFeature","layoutOrPaint","isExpr","compiledExpression","rawExpression","expressionData","getDeclutterMode","evaluateFilter","renderTransparentEnabled","colorWithOpacity","templateRegEx","fromTemplate","recordLayer","styleFunctionArgs","stylefunction","sourceOrLayers","spriteData","spriteImageUrl","getFonts","spriteImageSize","spriteImageUnSDFed","blobUrl","changed","worker","action","allLayers","layersBySourceLayer","mapboxLayers","iconImageCache","patternCache","mapboxSource","sourceLayer","sources","textHalo","onlyLayer","featureBelongsToLayer","stylesLength","layerData","layout","paint","minzoom","maxzoom","fillIcon","icon","setZIndex","icon_cache_key","pattern","globalAlpha","createPattern","setColor","setWidth","setLineCap","setLineJoin","setMiterLimit","setLineDash","iconImg","skipLabel","textLineHeight","textSize","maxTextWidth","hasImage","placementAngle","iconImage","styleGeom","imageElement","iconRotationAlignment","xM","dotProduct","iconSize","iconColor","iconCacheKey","declutterMode","displacement","iconOptions","rotateWithView","sdf","setRotation","setOpacity","setAnchor","setImage","circleStrokeColor","circleTranslate","circleColor","circleStrokeWidth","cache_key","fontArray","textField","chunk","chunkFont","textTransform","wrappedLabel","setFont","setKeepUpright","keepUpright","textAnchor","placement","setPlacement","setRepeat","symbolSpacing","setOverflow","textHaloWidth","textOffset","textTranslate","vOffset","hOffset","textRotationAlignment","setRotateWithView","setMaxAngle","setTextAlign","textBaseline","setTextBaseline","textJustify","setJustify","setOffsetX","setOffsetY","setFill","halfTextSize","setStroke","textPadding","getPadding","getTileResolutions","createXYZ","completeOptions","applyStyle","sourceOrLayersOrOptions","optionsOrPath","sourceId","updateSource","assignSource","setupVectorSource","targetSource","setTileUrlFunction","getTileUrlFunction","setUrls","getUrls","format_","setAttributions","getTileLoadFunction","defaultLoadFunction","setTileLoadFunction","equivalent","getTileGrid","setSource","isFinite","getMaxResolution","getMinZoom","setMaxResolution","setupGeoJSONSource","url_","getUrl","spriteScale","onChange","sprite","METERS_PER_UNIT","templateUrl","webfonts","fontsKey","fontDescriptions","cssFont","registerFont","fontDescription","checkedFonts","fontUrl","markup","head","normalizeSpriteUrl","spriteUrl","pathname","spritesJson","transformed","sourceOptionsFromTileJSON","tileJSON","tileJSONSource","tileJSONDoc","getTileJSON","fromLonLat","tr","extentFromTileJSON","projectionExtent","sourceOptions","getTopLeft","getOrigin","getBboxTemplate","geoJsonFormat","dataProjection","geoJsonUrl","extentUrl","bboxTemplate","getUserProjection","LayerMapBox","_VectorTileLayer","styleTitle","styleName","layerVectorTileOptions","setStyleMapBox","onStyleMapBoxLoad","onStyleMapBoxError","styleSource","vectorTileJson","TileJSONSource","on","getState","observableUnByKey","VectorTileLayer","GeoportalMapBox","exceptions","openedPanelID","openedPanel","exceptionPanel","controlPanels","bottomLeft","topLeft","_toConsumableArray","bottomRight","topRight","panelID","isException","getSameSideOpenedPanel","click","onPanelOpen","PanelManager","control","Control","getComputedStyle","getPropertyValue","ControlExtended","_Control","listable","_createClass","PositionFactory","update","ANCHORS","_PositionFactory_brand","WeakSet","caller","_classPrivateMethodInitSpec","_assertClassBrand","_createContainer","_setAnchor","prepend","_existContainer","getOverlayContainerStopEvent","sizeW","offsetWidth","sizeH","offsetHeight","panels","panel","checkDsfr","timestamp","SelectorID","generate","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread2","_defineProperty","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","off","selector","msMatchesSelector","webkitMatchesSelector","getParentOrHost","host","closest","includeCTX","_throttleTimeout","R_SPACE","toggleClass","classList","css","defaultView","currentStyle","matrix","selfOnly","appliedTransforms","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","getBoundingClientRect","elRect","innerHeight","innerWidth","containerRect","elMatrix","scaleX","scaleY","isScrolledPast","elSide","parentSide","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","display","Sortable","ghost","dragged","draggable","lastElementChild","previousElementSibling","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","isRectEqual","rect1","rect2","throttle","ms","scrollBy","Polymer","$","jQuery","Zepto","getChildContainingRectFromElement","ghostEl","_rect$left","_rect$top","_rect$right","_rect$bottom","animated","childRect","expando","AnimationStateManager","animationCallbackId","animationStates","captureAnimationState","animation","fromRect","thisAnimationDuration","childMatrix","addAnimationState","removeAnimationState","indexOfObject","animateAll","animating","animationTime","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","animate","animationResetTimer","currentRect","translateX","translateY","animatingX","animatingY","forRepaintDummy","repaint","easing","plugins","defaults","initializeByDefault","PluginManager","mount","plugin","option","pluginName","pluginEvent","eventName","sortable","evt","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","createEvent","initEvent","cancelable","pullMode","lastPutMode","allEventProperties","_excluded","dragEl","parentEl","nextEl","lastDownEl","cloneHidden","dragStarted","moved","activeSortable","active","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","touchingSideChild2","_prepareGroup","toFn","pull","sameGroup","group","otherGroup","originalGroup","checkPull","checkPut","put","revertClone","stopPropagation","stopImmediatePropagation","nearestEmptyInsertDetectEvent","touches","nearest","clientX","clientY","threshold","emptyInsertThreshold","insideHorizontally","insideVertically","ret","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","store","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","ghostClass","chosenClass","dragClass","preventOnFilter","setData","dataTransfer","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_generateId","_nextTick","_cancelNextTick","_getDirection","touch","originalTarget","shadowRoot","composedPath","inputs","_saveInputCheckedState","button","isContentEditable","criteria","_prepareDragStart","dragStartFn","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","_onTouchMove","_onDragStart","selection","getSelection","removeAllRanges","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","ghostMatrix","relativeScrollOffset","cssMatrix","_hideClone","cloneId","_loopId","setInterval","effectAllowed","_dragStartId","revert","vertical","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","lastElRect","childContainingRect","spacer","_ghostIsLast","firstElRect","_ghostIsFirst","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_getSwapDirection","dragIndex","nextElementSibling","after","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","save","handleEvent","dropEffect","_globalDragOver","useAnimation","items","destroy","querySelectorAll","utils","is","dst","cancelNextTick","detectDirection","_len","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","pid","clearPointerElemChangedInterval","isFallback","scroll","scrollCustomFn","sens","scrollSensitivity","speed","scrollSpeed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","scrollOffsetY","scrollOffsetX","bubbleScroll","drop","toSortable","changedTouches","onSpill","Revert","Remove","dragStart","_ref3","_ref4","parentSortable","AutoScroll","forceAutoScrollFallback","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","LayerSwitcherDOM","_createDraggableElement","elementDraggable","handleClass","onEnd","_onEndDragAndDropLayerClick","_addUID","_uid","_createMainContainerElement","_createMainLayersShowElement","_createMainLayersElement","dialog","_createMainLayersDivElement","_createMainPictoElement","htmlFor","ariaPressed","onShowLayerSwitcherClick","attachEvent","_createMainCounterLayersElement","_createMainInfoElement","divP","_createMainInfoDivElement","_createLayersPanelHeaderElement","_createLayersPanelIconElement","_createLayersPanelTitleElement","_createLayersPanelCloseElement","btnClose","innerText","_createContainerLayerElement","_createBasicToolElement","_createAdvancedToolShowElement","_createAdvancedToolElement","_createBasicToolNameElement","_createBasicToolVisibilityElement","_createBasicToolDragNDropElement","_onStartDragAndDropLayerClick","visible","_onVisibilityLayerClick","_createAdvancedToolDeleteElement","_createAdvancedToolInformationElement","_createAdvancedToolOpacityElement","_createAdvancedToolExtentElement","btn","contextual","_onDropLayerClick","btnInfo","_onOpenLayerInfoClick","divO","dataset","frJsRange","setProperty","ariaLabel","_onChangeLayerOpacity","divC","_onZoomToExtentClick","_createContainerLayerInfoElement","header","onCloseClick","quick","refquick","mtd","mtdtitle","urlmtd","mtdlink","refmtd","lgd","lgdtitle","urllgd","lgdlink","reflgd","LayerSwitcher","_options","_initialize","_initContainer","_addMapLayers","_showLayerSwitcherButton","_listeners","onMoveListener","_onMapMoveEnd","onAddListener","getLayers","gpLayerId","_layerId","addLayer","onRemoveListener","removeLayer","olObservableUnByKey","_layersOrder","gutter","getContainer","_this3","isLayerInMap","lyr","infodiv","advancedTools","layerInfos","getLayerInfo","getOpacity","isInRange","layerOptions","inRange","layerDiv","_createLayerDiv","_forceNullzIndex","_updateLayersOrder","_lastZIndex","_layerListContainer","updateLayerOpacity","_updateLayerOpacity","updateLayerVisibility","_updateLayerVisibility","onZIndexChangeEvent","_updateLayerCounter","layerID","layerIndex","layerOrderTemp","isCollapsed","removable","removalDiv","_layersIndex","conf","changeCollapsed","picto","counter","_layerSwitcherCounter","divL","panelHeader","panelIcon","panelTitle","panelClose","divI","divD","_this4","zindex","isLegends","isMetadata","isQuicklookUrl","displayInformationElement","opened","updatePosition","divId","opacityValue","layerOpacityInput","layerOpacitySpan","setVisible","layerVisibility","_this5","_maxScaleDenominator","infoLayer","_this6","matchesLayers","maxZIndex","updateSize","domIDShort","domIDLong","gpResultLayerId","layerService","view","crsTarget","crsSource","fit","sourceExtent","_this7","foundId","mapResolution","getMinResolution","mapExtent","calculateExtent","layerExtent","layerInfo","layerProperties","Widget","Draggable","dragElement","dragStartMouseX","dragStartMouseY","diffX","diffY","positionX","positionY","dragMouseDown","viewport","viewPortRect","closeDragElement","elementDrag","currentMouseX","currentMouseY","oldDiffX","oldDiffY","newLeft","newTop","newX","newY","_defineProperties","_toPropertyKey","toPrimitive","_toPrimitive","AsyncData","initialData","_set","updates","_x3","allSettled","GetFeatureInfoDOM","uid","stringToHTML","support","_createShowGetFeatureInfoPictoElement","onShowGetFeatureInfoClick","_createGetFeatureInfoPanelElement","_createGetFeatureInfoPanelDivElement","_createGetFeatureInfoPanelHeaderElement","_createGetFeatureInfoPanelTitleElement","_createGetFeatureInfoPanelCloseElement","onCloseGetFeatureInfoClick","_createGetFeatureInfoWaitingDiv","_createGetFeatureInfoAccordionGroup","_createGetFeatureInfoLayerAccordion","layername","accordeon","currentTarget","ariaExpanded","collapse","_objectSpread","ReferenceError","_assertThisInitialized","_isNativeReflectConstruct","Reflect","construct","_get","_getPrototypeOf","_superPropBase","_setPrototypeOf","GetFeatureInfo","initialize","initContainer","panelGetFeatureInfoContainer","panelGetFeatureInfoHeaderContainer","getTargetElement","buttonGetFeatureInfoShow","auto","addEventsListeners","removeEventsListeners","getFeatureInfoPanelDiv","buttonGetFeatureInfoClose","getFeatureInfoAccordionGroup","panelGetFeatureInfoEntriesContainer","eventsListeners","getFeatureInfoPanel","getFeatureInfoPanelHeader","getFeatureInfoPanelTitle","getFeatureInfoCloseBtn","accordionGroup","onMapClick","un","getFeatureInfoIsActive","isVisible","displayGetFeatureInfo","gfiLayer","getFeaturesAtClick","_getGetFeatureInfoContent","layerTitle","gfiContent","getGetFeatureInfoLayer","getLayerTitle","pending","gfi","asyncD","getGetFeatureInfoContent","_extensions","clean","setActive","MathUtils","modulo","decimalToDMS","hemispheres","numDigits","normalizedDegrees","dflPrecision","precision","sec","dmsToDecimal","minutes","seconds","coordinateToDecimal","toFixed","lng","coordinateToDMS","coordinateToRad","coordinateToGon","coordinateToMeter","coordinateToKMeter","toInteger","isInteger","toFloat","advancedSearchFiltersByDefault","PositionOfInterest","StreetAddress","CadastralParcel","zoomToResultsByDefault","importance","getGeocodedLocationFreeform","geocodedLocation","resultToReturn","toponym","category","postcode","housenumber","getSuggestedLocationFreeform","SRS_WGS84_SEMIMAJOR","SRS_WGS84_ESQUARED","SEC_TO_RAD","HALF_PI","EPSLN","D2R","R2D","FORTPI","TWO_PI","SPI","to_meter","ignoredChar","testkey","lkey","defData","paramName","paramVal","paramOutname","paramObj","datum","rf","lat_0","lat0","lat_1","lat1","lat_2","lat2","lat_ts","lon_0","long0","lon_1","long1","lon_2","long2","rectified_grid_angle","lonc","longc","x_0","x0","y_0","y0","k_0","k0","r_a","R_A","zone","south","utmSouth","towgs84","datum_params","from_greenwich","nadgrids","datumCode","legalAxis","txt","NEUTRAL","whitespace","latin","keyword","endThings","digets","place","currentObject","mapit","thing","newObj","sExpr","convert","readCharicter","neutral","quoted","afterquote","afterItem","newObjects","knownTypes","d2r","cleanWKT","wkt","setPropertiesFromWkt","AUTHORITY","authority","projName","PROJECTION","AXIS","axisOrder","UNIT","DATUM","SPHEROID","geogcs","GEOGCS","toMeter","sphere","ellps","TOWGS84","outName","inName","rename","lisp","defs","def","EPSG","ESRI","IAU2000","WGS84","GOOGLE","codeWords","codes","testObj","testDef","testWKT","auth","checkMercator","maybeProjStr","ext","checkProjStr","testProj","eccent","sinphi","cosphi","con","sign","com","ts","dphi","eccnth","identity","projs","init","es","msfnz","adjust_lon","tsfnz","inverse","phi2z","names","projStore","ellipseName","datums","wgs84","ellipse","datumName","ch1903","ggrs87","nad83","nad27","potsdam","carthage","hermannskogel","mgi","osni52","ire65","rassadiran","nzgd49","osgb36","s_jtsk","beduaram","gunung_segara","rnb72","ep2","datum_type","grids","loadedNadgrids","parseNadgridString","optional","mandatory","grid","isNull","secondsToRadians","decodeString","Uint8Array","mapNodes","longitudeShift","latitudeShift","readGridHeader","isLittleEndian","lowerLatitude","getFloat64","upperLatitude","lowerLongitude","upperLongitude","latitudeInterval","longitudeInterval","gridNodeCount","getInt32","readGridNodes","gridHeader","nodesOffset","gridShiftRecords","record","getFloat32","latitudeAccuracy","longitudeAccuracy","srsCode","parseCode","ourProj","datumDef","Datum","a2","b2","sphere_","ecc","getNadgrids","datumObj","geodeticToGeocentric","Rn","Sin_Lat","Sin2_Lat","Cos_Lat","Longitude","Latitude","Height","geocentricToGeodetic","RR","CT","ST","RX","RK","RN","CPHI0","SPHI0","CPHI","SPHI","SDPHI","iter","genau","X","Y","Z","checkParams","compareDatums","source_a","source_es","applyGridShift","dest_a","dest_b","dest_es","Dx_BF","Dy_BF","Dz_BF","Rx_BF","Ry_BF","Rz_BF","M_BF","geocentricToWgs84","x_tmp","y_tmp","z_tmp","geocentricFromWgs84","attemptedGrids","outer","subgrids","subgrid","del","lim","applySubgridShift","pin","ct","tb","nadInterpolate","dif","inx","indx","frct","f00","cvs","f10","f11","f01","m11","m10","m00","m01","denorm","xin","yin","zin","checkCoord","enforceAxis","hasZ","toPoint","checkSanity","checkNotWGS","adjust_axis","datum_transform","transformer","transformedArray","checkProj","oProj","fromProj","toProj","SET_ORIGIN_COLUMN_LETTERS","SET_ORIGIN_ROW_LETTERS","A","I","O","V","mgrs","UTMtoLL","decode","utm","seasting","easting","snorthing","northing","zoneNumber","zoneLetter","setParm","get100kSetForZone","setColumn","setRow","column","row","parm","colOrigin","rowOrigin","colInt","rowInt","rollover","getLetter100kID","eccPrimeSquared","T","C","M","LongOriginRad","ZoneNumber","Lat","Long","eccSquared","LatRad","degToRad","LongRad","UTMEasting","UTMNorthing","getLetterDesignator","LLtoUTM","radToDeg","rad","N1","T1","C1","R1","D","LongOrigin","phi1Rad","e1","LetterDesignator","mgrsString","testChar","hunK","sb","east100k","curCol","eastingValue","rewindMarker","getEastingFromChar","north100k","curRow","northingValue","getNorthingFromChar","getMinNorthing","remainder","accuracyBonus","sepEastingString","sepNorthingString","sepEasting","sepNorthing","fromMGRS","mgrsStr","toMGRS","C04","C06","C08","en","sphi","cphi","pj_mlfn","pj_enfn","ml0","delta_lon","sin_phi","cos_phi","al","als","tq","ml","pj_inv_mlfn","tan_phi","ds","temp","log1py","hypot","pp","B","cos_2B","h1","h2","arg_r","arg_i","hr2","hi2","sin_arg_r","cos_arg_r","sinh_arg_i","sinh","cosh_arg_i","hi1","hr1","hi","tmerc","cgb","cbg","utg","gtu","np","Qn","gatg","Zb","clens","Ce","Cn","sin_Cn","cos_Cn","sin_Ce","cos_Ce","asinhy","clens_cmplx","adjust_zone","etmerc","dependsOn","esinp","rc","phic0","ratexp","K","srat","gauss","sinc0","cosc0","R2","sinc","cosc","cosl","coslat0","sinlat0","cons","ms1","X0","ssfn_","cosX0","sinX0","sinX","cosX","rh","sinlat","coslat","dlon","ce","phit","eccen","phy0","lambda0","sinPhy0","semiMajorAxis","flattening","e2","R","b0","k1","k2","k3","Sa1","Sa2","rotI","rotB","phy","prevPhy","iteration","TOL","cosph0","F","H","L","sinph0","J","gamma0","projectionName","lamc","lam1","lam2","phi1","phi2","alpha_c","no_off","no_rot","alp","gam","one_es","lam0","singam","cosgam","sinrot","cosrot","rB","ArB","BrA","u_0","v_pole_n","v_pole_s","U","W","Qp","Sp","Tp","Vp","Up","sin1","cos1","ts1","sin2","cos2","ms2","ts2","ts0","f0","rh1","s45","s90","fi0","alfa","uq","u0","n0","s0","ro0","ad","deltav","eps","ro","czech","fi1","e0","e3","e0fn","e1fn","e2fn","e3fn","mlfn","lam","nl","gN","tl","asq","cl","imlfn","nl1","rl1","tl1","dl","dsq","adjust_lat","P00","P01","P02","P10","P11","P20","S_POLE","N_POLE","EQUIT","OBLIQ","qp","qsfnz","mmf","apa","APA","authset","rq","xmf","ymf","sinb1","cosb1","coslam","sinlam","q","sinb","cosb","cCe","sCe","ab","cosz","sinz","sin_po","cos_po","qs1","qs2","qs0","ns0","qs","phi1z","asinz","eccnts","sin_p14","cos_p14","infinity_dist","coslon","iqsfnz","dlat","bl","tanphi","mln","mlnp","ma","B_re","B_im","C_re","C_im","delta_lat","d_phi","d_lambda","d_phi_n","d_psi","th_n_im1","th_re","th_im","th_n_re","th_n_im","z_re","z_im","z_n_im1","delta_x","z_n_re","z_n_im","num_re","num_im","den_re","den_im","den2","d_psi_n","C_y","C_x","delta_theta","ml1","ml2","sinth","costh","gsq","msq","xx","yy","xys","c1","c2","c3","a1","th1","sin_p12","cos_p12","Mlp","Ml","Nl1","Nl","Az","G","GH","Hs","kp","cos_c","s2","s3","s4","cosAz","Ee","sinpsi","FACE_ENUM","AREA_ENUM","qsc_fwd_equat_face_theta","qsc_shift_lon_origin","slon","face","one_minus_f","one_minus_f_squared","xy","sinlon","cosmu","tannu","tantheta","invert_sign","xa","lp","COEFS_X","COEFS_Y","FXC","FYC","RC1","NODES","poly3_val","coefs","f_df","max_err","iters","upd","newton_rapshon","poly3_der","azi","tilt","pn1","rp","pfact","cg","sg","cw","sw","yt","ba","bm","bq","flip_axis","sweep","radius_g_1","radius_g","rone_es","radius_p","radius_p2","radius_p_inv2","shape","v_x","v_y","v_z","det","v_zp","A1","A2","A3","A4","paramLat","paramLatSq","paramLatPow6","EPS10","e_fwd","am1","e_inv","s_fwd","cphi1","s_inv","defaultDatum","Proj","Point","nadgrid","DataView","nFields","detectLittleEndian","nSubgridFields","nSubgrids","shiftType","fromSemiMajorAxis","fromSemiMinorAxis","toSemiMajorAxis","toSemiMinorAxis","readHeader","gridOffset","subHeader","lngColumnCount","latColumnCount","readSubgrids","proj4","sterea","stere","somerc","omerc","lcc","krovak","cass","laea","aea","gnom","cea","eqc","nzmg","mill","sinu","moll","eqdc","vandg","aeqd","ortho","qsc","robin","geocent","tpers","geos","eqearth","bonne","Projection","projCodes","code1","proj1","code2","proj2","getTransform","addCoordinateTransforms","Register","isLoaded","_register","_code","load","Proj4","registers","loadByDefault","CRS","IGNF","LAMB93","LAMBE","LAMB1","LAMB2","LAMB3","LAMB4","RGF93G","WGS84G","loadByName","AMST63","CROZ63","CSG67","ED50","ETRS89","GUAD48","GUADFM49","IGN63","IGN72","KERG62CAR","MART38","MAYO50","MOOREA87","NTF","NUKU72","REUN47","RGF93","RGFG95","RGM04","RGNC","RGPF","RGR92","RGSPM06","RGTAAF07","RRAF91","STPL69","STPM50","TAHAA","TAHI79","TERA50","WALL78","WGS72","AMST63GEO","CROZ63GEO","CSG67GEO","ED50G","GUAD48GEO","GUADFM49GEO","IGN63GEO","IGN72GEO","KERG62GEO","MART38GEO","MAYO50GEO","MOOREA87GEO","NTFG","NTFP","NUKU72GEO","REUN47GEO","RGFG95GEO","RGM04GEO","RGNCGEO","RGPFGEO","RGR92GEO","RGSPM06GEO","RGTAAF07G","STPL69GEO","STPM50GEO","TAHAAGEO","TAHI79GEO","TERA50G","WALL78GEO","WGS72G","WGS84RRAFGEO","XGEO","AMST63UTM43S","CROZ63UTM39S","CSG67UTM21","CSG67UTM22","GEOPORTALANF","GEOPORTALASP","GEOPORTALCRZ","GEOPORTALFXX","GEOPORTALGUF","GEOPORTALKER","GEOPORTALMYT","GEOPORTALNCL","GEOPORTALPYF","GEOPORTALREU","GEOPORTALSPM","GEOPORTALWLF","GUAD48UTM20","GUADFM49U20","IGN63UTM7S","IGN72UTM58S","KERG62UTM42S","LAMB1C","LAMB2C","LAMB3C","LAMB4C","RGF93CC42","RGF93CC43","RGF93CC44","RGF93CC45","RGF93CC46","RGF93CC47","RGF93CC48","RGF93CC49","RGF93CC50","MART38UTM20","MAYO50UTM38S","MILLER","MOOREA87U6S","NUKU72U7S","RGM04UTM38S","RGNCUTM57S","RGNCUTM58S","RGNCUTM59S","RGPFUTM5S","RGPFUTM6S","RGPFUTM7S","RGR92UTM40S","RGSPM06U21","STPL69UTM43S","STPM50UTM21","TAHAAUTM05S","TAHI51UTM06S","TAHI79UTM6S","TERA50STEREO","UTM01SW84","UTM20W84GUAD","UTM20W84MART","UTM22RGFG95","UTM39SW84","UTM42SW84","UTM43SW84","WALL78UTM1S","ETRS89GEO","ETRS89LAEA","ETRS89LCC","UTM26ETRS89","UTM27ETRS89","UTM28ETRS89","UTM29ETRS89","UTM30ETRS89","UTM31ETRS89","UTM32ETRS89","UTM33ETRS89","UTM34ETRS89","UTM35ETRS89","UTM36ETRS89","UTM37ETRS89","UTM38ETRS89","projectionsExtent","overload","_extent","SearchEngineDOM","_createSearchDivElement","searchDiv","_createShowSearchEnginePictoElement","collapsible","curr","showAdvancedSearch","showGeolocate","showCoordinate","onShowSearchEngineClick","_createSearchInputElement","placeholder","form","onGeocodingSearchSubmit","autocomplete","charCode","which","keyCode","onAutoCompleteSearchText","ID","scrollIntoView","focus","_createSearchResetElement","buttonReset","onSearchResetClick","_createButtonsElement","_createFirstLineWrapper","_createRadioContainer","_createRadioElements","choiceLocations","inputLocations","labelLocations","choiceData","inputData","labelData","_createShowAdvancedSearchElement","_createShowGeolocateElement","onShowSearchGeolocateClick","_createShowSearchByCoordinateElement","_createAdvancedSearchPanelElement","_createAdvancedSearchPanelDivElement","_createGeocodeResultsElement","_createGeocodeResultsHeaderElement","_createGeocodeResultsDivElement","_createAutoCompleteElement","_createCoordinateSearchPanelElement","_createCoordinateSearchPanelDivElement","_createAutoCompleteListElement","_createAutoCompletedLocationContainer","_createAutoCompletedLocationTitleElement","_createAutoCompletedLocationElement","GeocodeUtils","onAutoCompletedResultsItemClick","_createSearchedSuggestContainer","_createSearchedSuggestTitleElement","_createSearchedSuggestElement","onSearchedResultsItemClick","_createAdvancedSearchPanelHeaderElement","divTitle","divClose","_createAdvancedSearchPanelFormElement","advancedSearchCodes","matchesFilters","onGeocodingAdvancedSearchSubmit","select","_createAdvancedSearchFormCodeElement","onGeocodingAdvancedSearchCodeChange","_createAdvancedSearchFormInputElement","_createAdvancedSearchFormFiltersElement","_createAdvancedSearchFiltersTableElement","_createAdvancedSearchFiltersAttributElement","filterAttributes","listId","_createGeocodeResultsListElement","ctrlKey","onGeocodedResultsItemClick","_createGeocodedLocationElement","_createCoordinateSearchPanelHeaderElement","onCoordinateSearchClose","_createCoordinateSearchPanelFormElement","onShowSearchByCoordinateClick","__createCoordinateSearchDivElement","_createCoordinateSearchSystemsLabelElement","_setCoordinateSearchSystemsSelectElement","systems","selectSystem","onCoordinateSearchSystemChange","_createCoordinateSearchUnitsLabelElement","_setCoordinateSearchUnitsSelectElement","selectUnits","onCoordinateSearchUnitsChange","_setCoordinateSearchLngLabelElement","labelLng","_setCoordinateSearchLngInputElement","_setCoordinateSearchLngDMSElement","_setCoordinateSearchLatLabelElement","labelLat","_setCoordinateSearchLatInputElement","_setCoordinateSearchLatDMSElement","_createCoordinateSearchSubmitElement","SearchEngine","_clearResults","_showSearchEngineButton","_geocodedLocations","_checkInputOptions","zoomTo","resources","displayButtonClose","displayButtonAdvancedSearch","displayButtonGeolocate","displayButtonCoordinateSearch","advancedSearch","coordinateSearch","searchOptions","addToMap","serviceOptions","geocodeOptions","autocompleteOptions","triggerGeocode","triggerDelay","prettifyResults","displayMarker","markerStyle","markerUrl","splitResults","Search","filterServices","filterLayersPriority","filterWMTSPriority","filterVectortiles","updateVectortiles","_fillSearchedSuggestListContainer","_inputSearchContainer","_autocompleteContainer","_containerResultsLocation","_containerResultsSuggest","_radioButtonLocation","_radioButtonSuggest","_suggestedLocations","_geocodedContainer","_filterContainer","_currentGeocodingCode","_currentGeocodingLocation","_advancedSearchFilters","_initAdvancedSearchFilters","_advancedSearchCodes","_initAdvancedSearchCodes","_coordinateSearchSystems","_initCoordinateSearchSystems","_currentCoordinateSearchSystems","_currentCoordinateSearchType","_coordinateSearchUnits","_initCoordinateSearchUnits","_currentCoordinateSearchUnits","_coordinateSearchLngInput","_coordinateSearchLatInput","_marker","_markerStyle","_markerUrl","_displayMarker","_popupContent","_popupDiv","_initPopupDiv","_popupOverlay","_triggerHandler","geocodeResources","geocodeResourcesList","autocompleteResources","autocompleteResourcesList","SearchEngineUtils","advancedSearchFiltersCustom","projectionSystemsByDefault","sys","_setSystem","projectionUnitsByDefault","Geographical","Metric","onAutoCompleteInputClick","buttonsContainer","firstLineWrapper","radioContainer","radioElements","_this$_createRadioEle2","_slicedToArray","advancedShow","advancedPanel","advancedPanelDiv","advancedHeader","advancedForm","advancedFormFilters","_setFilter","advancedFormInput","geolocateShow","searchByCoordinateShow","coordinatePanel","coordinatePanelDiv","coordinateHeader","coordinateForm","_containerSystems","labelSystems","_containerUnits","labelUnits","_containerCoordinateLng","coordinateLng","coordinateInputLng","_containerCoordinateLat","coordinateLat","coordinateInputLat","submit","autocompleteList","containerResultsLocation","containerResultsSuggest","geocodeDiv","geocodeList","codeFound","lstAttributs","divTable","divFilter","childElementCount","_displaySuggestedLocation","suggests","bOnFailure","_clearGeocodedLocation","setCenter","setZoom","markerDiv","_onResultMarkerSelect","getZoom","information","popupContent","system","olProjGet","Interactions","geolocation","getCurrentPosition","viewProj","coordinates_4326","longitude","latitude","olProjTransform","_setMarker","_setPosition","markerInfo","_getCoordinateSearchDMS","selectedIndex","inputSearchTextContainer","_clearSuggestedLocation","_triggerGeocode","_triggerDelay","_maximumEntries","maximumEntries","_prettifyResults","_requestAutoComplete","_locationsToBeDisplayed","ilocation","_getGeocodeCoordinatesFromFullText","_prettifyAutocompleteResults","_fillAutoCompletedLocationListContainer","_requestGeocoding","_hideSuggestedLocation","_setLabel","mapProj","_getZoom","_fillGeocodedLocationListContainer","_location","_filterOptions","dep","department","insee","absorbedCity","_updateCoordinateSearchElements","lbl","autocompleteResults","autocompleteResult","MousePositionDOM","_createShowMousePositionPictoElement","onShowMousePositionClick","_createMousePositionPanelElement","_createMousePositionPanelDivElement","_createMapCenter","_createMousePositionPanelTitleElement","_createMousePositionPanelHeaderElement","_createMousePositionPanelCloseElement","_createMousePositionPanelBasicElement","displayAltitude","displayCoordinates","editCoordinates","currentProjectionUnits","_createMousePositionPanelBasicCoordinateElement","_createMousePositionPanelEditToolsElement","_createMousePositionPanelBasicAltitudeElement","_createCoordinateElement","coordType","readOnly","onMousePositionEditModeClick","validateExtentCoordinate","_createDMSCoordinateElement","_checkDMSDegrees","input1","_checkDMSElement","span1","input2","span2","option1","divLat","spanLat","arrayCoords","divLon","spanLon","arrayCoords1","spanLabel","spanAlt","spanUnits","onMousePositionEditModeLocateClick","_createShowMousePositionSettingsElement","onShowMousePositionSettingsClick","_createMousePositionSettingsElement","_createMousePositionSettingsSystemsElement","onMousePositionProjectionSystemChange","onMousePositionProjectionSystemMouseOver","_createMousePositionSettingsUnitsElement","onMousePositionProjectionUnitsChange","_resetLabelElements","currentProjectionType","_resetUnitElements","elts","_resetCoordinateElements","latElt","lonElt","_setEditMode","editing","selects","isFloat","inputMinutes","inputSeconds","GPdisplayCoords","labelLon","elt","elLat","elLon","elements","GPdisplayElevation","altitudeTimeoutDelay","noDataValue","noDataValueTolerance","altitudeTimeout","maxThreshold","minThreshold","onRequestAltitude","GPresetElevation","MousePosition","getViewport","_isDesktop","_panelMousePositionContainer","_panelHeaderContainer","listenerKey","onMouseMove","onMapMove","_showMousePositionButton","_markerOverlay","_markerOffset","_setElevationPanel","_setCoordinatesPanel","_setSettingsPanel","_projectionSystems","addSystem","systemCrs","systemList","systemCode","oldNewCodeMap","indexChildToRemove","_currentProjectionSystems","_setCurrentSystem","_projectionUnits","_initProjectionUnits","_currentProjectionType","_setTypeUnitsPanel","altitude","responseDelay","_showMousePositionContainer","_hideMarker","_initMarker","positionMarker","_initProjectionSystems","_timer","_currentProjectionUnits","_projectionUnitsContainer","_panelHeaderMousePositionContainer","hide","geoBBox","systemInfo","mousePositionPanel","mousePositionPanelDiv","_panelTitleContainer","closeDiv","_panelCloseButton","basic","buttonSettings","_projectionSystemsContainer","divPicto","divPanel","projectionUnits","oSrs","olTransformProj","oLatLng","_setElevation","_setCoordinate","onMoveStopped","getCenter","_protocol","_timeout","_outputFormat","_onFailure","_measures","_positions","_resource","_rawResponse","_customOnSuccess","_onSuccess","_apiKey","_ssl","inputDegrees","mins","secs","lonlat","getCoordinate","xyWGS84","locateDMSCoordinates","locateCoordinates","mapCenterFunction","mapCenterCallback","optionElement","oldProjectionUnits","GeoportalMousePosition","Collection","condition","drawing_portail","drawing_api","DrawingDOM","_createShowDrawingPictoElement","onShowDrawingClick","_createDrawingPanelElement","_createDrawingPanelDivElement","_createDrawingToolsDivSections","_createDrawingPanelHeaderElement","controlLabel","dtObj","_createDrawingToolsSections","tools","dtOptions","edit","tooltip","_createDrawingToolSection","creatingTools","editingTools","_createSavingSection","exportTitle","sectionLabel","panelType","liClickHandler","_handleDOMToolClick","_handleToolClick","buttonLabel","buttonTitle","onExportFeatureClick","_createMarkersChooser","markersList","inputElem","labelElem","imgElem","_createStylingElement","_createStylingDiv","mainDiv","applyFunc","geomType","initValues","markerSrc","markerSize","markerCustom","labelDisplay","applyButton","applyToObject","setDefaultButton","setAsDefault","cancelButton","_createLabelDiv","popup","inputLabel","rows","cols","inputId","onkeyup","evtk","inputMeasure","saveDescription","toolId","availType","availToolId","Drawing","_Drawing","_container","eventKey","_drawingPanel","_drawingPanelHeader","_showDrawingButton","setLayer","evtRm","interactionCurrent","removeInteraction","getFeatures","featuresCollectionSelected","ClassName","getExportFormat","writeStyles","featProj","writeFeatures","_exportName","_exportFormat","_exportExt","_exportMimeType","vlayer","mapLayer","getControls","layerDescription","markerOptions","markerElement","DefaultTools","cursorStyle","DefaultCursorStyle","MarkersOther","DefaultLabels","defaultStyles","DefaultStyles","intValue","floatValue","interactionSelectEdit","stylingOvl","popupOvl","_detectSupport","panelDiv","_getIconStyleOptions","polyFillColor","polyFillOpacity","polyStrokeColor","polyStrokeWidth","_updateMeasure","setAttValue","popupByDefault","displayFunction","closeFunc","saveFunc","tabIndex","onblur","geomExtent","seEv","removeFeature","_createRemoveInteraction","addInteraction","valuesColor","hexColor","MultiPoint","textIcon1x1","markerAnchor","markerColor","markerOpacity","_getsMarkersOptionsFromSrc","textStrokeColor","textStrokeWidth","textFillColor","popupDiv","setDefault","fillColorElem","fillOpacityElem","strokeColorElem","strokeWidthElem","markerSizeElem","markerSelected","markerChecked","idxMarker","mrk","mapBrowserEvent","_createStylingInteraction","labelOvl","_textValue","_measure","featProps","_createLabelInteraction","__roundDecimal","nombre","coordinatesPoint","measureLength","coordinatesLine","olGetDistanceSphere","measureArea","coordinatesAera","getLinearRing","olGetAreaSphere","getLinearRings","ij","coordinatesRings","clickEvent","_this8","_createEmptyLayer","stopClick","deEv","_drawEndFeature","eventPointerMove","getLength","hole","bHoleIsIncluded","intersectsCoordinate","appendLinearRing","LinearRing","eventSingleClick","toolsType","toolsId","exportFeatures","getExportName","export","LocationSelectorDOM","_createLocationPointElement","_createLocationPointLabelElement","buttonOrigin","onLocationClearPointClick","_createLocationAutoCompleteteInputElement","inputOrigin","_createLocationCoordinateInputElement","inputOriginCoord","_createLocationPointerShowInputElement","inputOriginPointer","_createLocationPointerInputElement","buttonOriginPointer","onActivateMapPointClick","_createLocationRemovePointElement","buttonRm","startID","endID","onLocationRemovePointClick","_createLocationAddPointElement","buttonAdd","lastStage","nbStages","onLocationAddPointClick","_createLocationAutoCompleteElement","_createLocationAutoCompleteResultElement","_createLocationAutoCompletedLocationElement","GPdisplayCoordinate","id1","id2","LocationSelector","groupId","addOption","removeOption","_map","_inputsContainer","_buttonLabel","_inputAutoComplete","_inputShowPointerContainer","_inputShowPointer","_inputCoordinateContainer","_addPointElement","_removePointElement","_coordinate","_suggestedContainer","_suggestedList","_currentLocation","_resources","markerOpts","clearResults","_inputCoordinate","_inputPointer","_inputAddStage","_inputRemoveStage","resultsPanel","_customOnFailure","onMouseMapClick","_setCursor","cursor","ButtonExport","menu","onExport","EXPORT_ROUTE","EXPORT_ISOCHRON","EXPORT_PROFILE","menuClassHidden","initOptions","setFormat","setName","setTitle","setMenu","onClickButtonExport","radio","showPointNames","isPluggableControl","ExportDOM","Export","RouteDOM","_createShowRoutePictoElement","onShowRoutePanelClick","_createRoutePanelElement","_createRoutePanelDivElement","_createRoutePanelHeaderElement","_createRoutePanelFooterElement","_createRoutePanelFormPointLabel","classesToAdd","_createRoutePanelFormElement","_addRouteResultsStagesValuesElement","modeComputation","modeTransport","exclusionsElement","onRouteComputationSubmit","computation","transport","_createRoutePanelResultsElement","_createRouteResultsStagesElement","_createRouteResultsElement","_createRouteShowResultsDetailsElement","_createRouteResultsDetailsElement","_createRouteWaitingElement","resultStage","resultStageLabel","resultStageValue","elementCoords","stageCoords","divValue","divMode","onRouteModeComputationChangeAndRun","computes","divNew","onShowRouteResultsNewClick","_addRouteResultsValuesElement","fconvert","containerDistance","labelDistance","distanceLabel","distanceArrondi","divDistance","containerDuration","labelDuration","divDuration","divBorderUp","labelShow","labelHide","divBorderDown","_addRouteResultsDetailsElement","instructions","distanceCumul","durationCumul","divNum","divIns","onRouteResultsDetailsMouseOver","onRouteResultsDetailsMouseOut","onRouteResultsDetailsClick","_createRoutePanelFormPointElement","labelOrigin","labelOriginPointer","onRouteMapPointClick","_createRoutePanelFormRemoveStageElement","divRm","onRouteRemovePointClick","_createRoutePanelFormAddStageElement","divAdd","onRouteAddPointClick","_createRoutePanelFormAutoCompleteListElement","_createRouteAutoCompletedLocationElement","_createRoutePanelFormModeChoiceTransportElement","transports","divContainer","divRadio","inputCar","onRouteModeTransportChange","labelCar","inputPedestrian","labelPedestrian","_createRoutePanelFormModeChoiceComputeElement","inputFastest","onRouteModeComputationChange","labelFastest","div2","inputShortest","labelShortest","_createShowRouteExclusionsPictoElement","onShowRouteExclusionsClick","_createRoutePanelFormExclusionsElement","_createRoutePanelFormExclusionOptionsElement","inputToll","onRouteExclusionsChange","labelToll","inputTunnel","labelTunnel","inputBridge","labelBridge","_createRouteSubmitFormElement","_createRouteFormResetElement","onRouteResetClick","_panelRouteContainer","_panelHeaderRouteContainer","_showRouteButton","_geojsonSections","_defaultFeatureStyle","_geojsonObject","_currentPoints","_currentTransport","_currentExclusions","_currentComputation","_currentRouteInformations","setCoordinate","transportdiv","computationdiv","tollInput","tunnelInput","bridgeInput","_simplifiedInstructions","_fillRouteResultsDetailsContainer","_formRouteContainer","_hideWaitingContainer","_resultsRouteContainer","_removeRouteStepLocations","_clearRouteInputOptions","_clearRouteResultsDetails","graphs","toll","tunnel","bridge","routeOptions","defaultMarkersOpts","departure","stages","arrival","markersOpts","_waitingContainer","_showRouteExclusionsElement","_initTransport","_initComputation","_initExclusions","_waiting","_geojsonRoute","_resultsSelectInteraction","_resultsHoverInteraction","_selectedFeatureStyle","routePanel","routePanelDiv","routeHeader","routeForm","_createRoutePanelFormPointsElement","exclusion","panelFooter","buttonSubmit","routeResults","waiting","_hideRouteSuggestedLocations","setMap","_addFormPointsEventListeners","formPoint","onRouteOriginLabelClick","onRouteOriginPointerClick","startCoordinate","endCoordinate","iCoordinate","routeResource","_requestRouting","_fillRouteResultsDetails","locationSelector","_clear","_clearRouteResultsGeometry","_clearRouteResultsFeatureGeometry","bFound","iFound","currentPoints","tagid","getFeatureById","_displayWaitingContainer","_fillRouteResultsDetailsGeometry","_fillRouteResultsDetailsFeatureGeometry","_resultsRouteValuesContainer","_convertSecondsToTime","_resultsRouteDetailsContainer","geojsonObject","defaultDataProjection","_convertDistance","geojsonformat","_onResultsFeatureMouseOver","_onResultsFeatureSelect","selectedInstruction","deselected","deselectedFeature","deSelectedInstruction","goodPoints","detailsDiv","valuesDiv","pointId","newInstructions","hours","divisor4minutes","distanceKm","IsoDOM","_createShowIsoPictoElement","onShowIsoPanelClick","_createIsoPanelElement","_createIsoPanelDivElement","_createIsoPanelHeaderElement","_createIsoPanelFormElement","onIsoComputationSubmit","_createIsoWaitingElement","_createIsoPanelFooterElement","_createIsoPanelFormPointLabel","_createIsoPanelFormTypeChoiceElement","_createIsoPanelFormTypeChoiceChronElement","onIsoTypeChoiceChange","_createIsoPanelFormTypeChoiceDistElement","_createIsoPanelFormLabelIsochronElement","_createIsoPanelFormValueIsochronElement","onIsoValueChronTimeMinuteChange","onIsoValueChronTimeHourChange","label1","label2","_createIsoPanelFormLabelIsodistanceElement","_createIsoPanelFormValueIsodistanceElement","onIsoValueDistChange","_createIsoPanelFormModeChoiceTransportElement","onIsoModeTransportChange","_createIsoPanelFormModeChoiceDirectionElement","directions","onIsoModeDirectionChange","departureOption","arrivalOption","_createShowIsoExclusionsPictoElement","onShowIsoSettingsClick","_createIsoPanelFormExclusionsElement","_createIsoPanelFormExclusionOptionsElement","onIsoExclusionsChange","_createIsoSubmitFormElement","_createIsoFormResetElement","onIsoResetClick","Isocurve","_IsoPanelContainer","_IsoPanelHeaderContainer","_pictoIsoButton","_geojsonLayer","_currentDirection","_originPoint","_currentIsoResults","_currentTimeHour","_currentTimeMinute","_currentDistance","_clearIsoInputs","methods","isocurveOptions","_initDirection","_formContainer","_createIsoPanelFormPointElement","isoChronChecked","isoDistChecked","typeChoice","footer","_submitContainer","_hideIsoSuggestedLocations","_clearGeojsonLayer","positionCoordinates","timeHourInput","timeMinutesInput","distInput","isoRequestOptions","_drawIsoResults","_requestIsoCurve","deepEqual","directionSelect","IsocurveDOM","ReverseGeocodeDOM","_createShowReverseGeocodingPictoElement","onShowReverseGeocodingClick","_createReverseGeocodingWaitingElement","_createReverseGeocodingResultsPanelElement","resultsPanelDiv","_createReverseGeocodingResultsListElement","_createReverseGeocodingResultElement","locationDescription","onReverseGeocodingResultMouseOver","onReverseGeocodingResultMouseOut","onReverseGeocodingResultClick","_createReverseGeocodingPanelElement","_createReverseGeocodingPanelDivElement","_createReverseGeocodingPanelHeaderElement","_createReverseGeocodingPanelReturnPictoElement","buttonNew","returnSpan","onGPreverseGeocodingReturnPictoClick","_createReverseGeocodingPanelTitleElement","_createReverseGeocodingPanelCloseElement","_createReverseGeocodingPanelFormElement","onReverseGeocodingSubmit","_createReverseGeocodingFormModeChoiceGeocodingTypeElement","onReverseGeocodingTypeChange","POIOption","SAOption","CPOption","_createReverseGeocodingFormModeChoiceGeocodingDelimitationElement","delimitations","onReverseGeocodingDelimitationChange","pointOption","circleOption","extentOption","_createReverseGeocodingSubmitFormElement","_showReverseGeocodingButton","_activateMapInteraction","_panelContainer","_clearInputFeatures","_removeMapInteraction","_inputFeaturesLayer","_inputFeaturesSources","_inputFeatures","_reverseGeocodingLocations","reverseGeocodeOptions","_currentGeocodingType","_initGeocodingType","_currentGeocodingDelimitation","_initGeocodingDelimitation","_returnPictoContainer","_resultsContainer","_resultsListContainer","_inputFeaturesSource","_mapInteraction","_requestOptions","_requestGeom","_requestPosition","_reverseGeocodingLocationsMarkers","_resultsDefaultStyle","_resultsSelectedStyle","resourcesList","wrongResourcesIndexes","delimitationsList","wrongDelimitationsIndexes","reverseGeocodingPanel","reverseGeocodingPanelDiv","returnPicto","reverseGeocodingForm","reverseGeocodingResultsList","_activatePointInteraction","_activateCircleInteraction","_activateBoxInteraction","setRemovable","_onDrawStart","geometryFunction","setCenterAndRadius","maxPoints","maxLength","lengthX","lengthY","setCoordinates","_onBoxDrawEnd","getFirstCoordinate","geoCoordinate","startGeoCoordinate","endGeoCoordinate","_getReverseGeocodingRequestOptions","requestOptions","_displayGeocodedLocations","_displayGeocodedLocationsOnMap","_fillGeocodedLocationDescription","_createResultsLayer","_addResultFeature","_resultsFeatures","_resultsFeaturesSource","_resultsFeaturesLayer","geocodeType","_fillPopupContent","selectedResultDiv","deSelectedResultDiv","_reverseGeocodingRequest","WMSCapabilities","WMTSCapabilities","onloaded","onclickvisibility","onclickclone","onclickremove","legend","onclickedition","onchangevalue","oncollapse","oneditjson","onchangemin","onchangemax","themes","onclickimage","onclicktitle","onsubmit","onautocomplete","_toolsDefault","edition","containerjson","jsonlabel","jsondisplay","containertoolsscale","scaletitle","containertoolsminscale","scalelabelmin","scaleinputmin","containertoolsmaxscale","scalelabelmax","scaleinputmax","containertoolsedit","_found","_obj","strJson","_syntaxHighlight","divJson","onEditJsonStyleMapBox","_createElementToolsScale","_createElementToolsEdition","divToolsScale","divMin","labelMin","inputMin","onChangeStyleScaleMinMapBox","divMax","labelMax","inputMax","onChangeStyleScaleMaxMapBox","divToolsEdit","cls","editorID","EventBus","EventEditor","editor","Themes","thumbnails","themesSummary","containertheme","containerthemeID","inputID","labelID","imageID","_lstThemes","_theme","divTheme","_selected","_button","onClickThemeTitleMapBox","thumbnail","_img","alt","onClickThemeImageMapBox","_msg","targetIDX","_inputs","Filter","_filter","labelJson","preJson","onEditJsonFilterMapBox","divEdit","Legend","sprites","editable","_editable","legendRender","rendercontainer","toolscontainer","containerlegendrender","legendrender","legendeditable","legendtitle","containerlegendtools","_getProperties","_createElementIconLegend","_createElementEditionLegend","isTextValue","isIconValue","valuesSupported","PROPERTIES","_getValue","svg","lstrockedasharray","cstrockcolor","fstrokecolor","isNumber","numA","numB","onEditionLegendMapBox","_renderThumbnail","linecolor","lLineColor","inputLineColor","onChangeValueLegendMapBox","linewidth","lLineWidth","inputLineWidth","lineopacity","lLineOpacity","inputLineOpacity","fillcolor","lFillColor","inputFillColor","fillopacity","lFillOpacity","inputFillOpacity","background","_objDefault","bSlotLegend","oFilter","oStyle","oLegend","DomVisibility","DomToggle","containerlegend","containertitle","imagelabelinput","imagelabel","typeimg","titleinput","titlelabel","containertools","visibilityinput","visibilitylabel","visibilityinputdisable","visibilitylabeldisable","inputImage","labelImage","onClickLayerMapBox","_addTools","divTools","inputTools","onVisibilityLayerMapBox","labelTools","imgType","divLegend","inputTitle","labelTitle","nodesLvl1","nodesLvl2","curnode","getRenderContainer","isEditable","details","summary","_search","Editor","_initEvents","groupAuto","sortBy","sortOrder","containerID","containerLayers","titleLayers","titleLayersID","titleThemes","titleThemesID","mapbox","_toolsThemes","multisources","groupBy","_groups","_groupName","_field","_newGroupName","_idx","divLayers","grp","oGroup","oLayer","addLegend","slotLegend","addStyle","addFilter","_target","spritesImage","theImage","_getSprites","EditorDOM","LayerImportDOM","_createLoadingElement","_createShowImportPictoElement","_onShowImportClick","_createImportPanelElement","_createImportPanelDivElement","_createImportPanelHeaderElement","_createImportPanelReturnPictoElement","returnDiv","_onReturnPictoClick","_createImportPanelTitleElement","_createImportPanelCloseElement","_createImportPanelFormElement","_onImportSubmit","_createImportTypeLineElement","importTypes","_onImportTypeChange","_createImportWaitingElement","_createImportStaticParamsContainer","currentType","_createStaticNameLabel","_createStaticModeChoiceDiv","_createStaticLocalChoiceDiv","_onStaticImportTypeChange","_createStaticUrlChoiceDiv","_createStaticLocalInputDiv","_createStaticLocalInputLabel","_createStaticLocalInput","_createStaticUrlInputDiv","_createStaticUrlInputLabel","_createStaticUrlInput","_createServiceParamsContainer","_createServiceUrlDiv","_createServiceUrlInputLabel","_createServiceUrlInput","_createImportSubmitFormElement","_createImportGetCapPanelElement","_createImportGetCapPanelHeaderElement","_onGetCapPanelClose","_createImportGetCapResultsContainer","_addImportGetCapResultListRubrique","_addImportGetCapResultRubrique","_addImportGetCapResultListLayer","_addImportGetCapResultLayer","_onGetCapResponseLayerClick","_createImportMapBoxPanelElement","_createImportMapBoxPanelHeaderElement","_onMapBoxReturnPictoClick","_onMapBoxPanelClose","_createImportMapBoxResultsContainer","MeasureToolBoxDOM","_toolboxId","_buttonId","_widgetId","getToolBoxID","getButtonID","getWidgetID","_createToolBoxContainerElement","blur","widget","MeasureToolBox","_toolbox","ctrl","gpShareMeasureToolBox","mapContainer","mapDocument","mapId","toolboxContainer","widgetContainer","setTarget","Measures","DEFAULT_POINTER_STYLE","DEFAULT_DRAW_START_STYLE","lineDash","DEFAULT_DRAW_FINISH_STYLE","MeasureLength","MeasureArea","MeasureAzimuth","measureDraw","measureSource","measureVector","eventLayerRemove","sketch","measureTooltipElement","measureTooltip","helpTooltipElement","helpTooltip","_class","clearMeasure","clearMeasureToolTip","removeMeasureEvents","_pictoContainer","onPointerMoveHandler","dragging","tooltipCoord","getLastCoordinate","getInteriorPoint","onShowMeasureClick","currentMapId","gpShareMeasures","mySelf","instance","addMeasureEvents","initMeasureInteraction","addMeasureInteraction","overlays","nodesToRemove","createMeasureTooltip","createHelpTooltip","createStylingMeasureInteraction","startStyleOpts","pointer","finishStyleOpts","removeLastPoint","setOffset","ElevationPathDOM","_createShowElevationPathPictoElement","onShowElevationPathClick","_createElevationPathPanelElement","_createElevationPathPanelDivElement","_createElevationPathPanelHeaderElement","divInfo","onOpenElevationPathInfoClick","buttonReduce","onReduceElevationPathPanelClick","buttonClose","_createElevationPathPanelProfilElement","wrapper","_createElevationPathWaitingElement","_createElevationPathInformationsElement","_addElevationPathInformationsItem","nameEl","valueEl","ProfileElevationPathDOM","_getCssProperty","_getTextWidth","_dataZToSvgY","pathHeight","minGraphZ","pxPerMZ","_dataDistToSvgX","dist","svgWidth","pathWidth","pxPerMX","_svgXToDataDist","svgX","_arrayBisect","displayProfileByDefault","focusLineColor","margin","_displayProfileOptions","displayProfileOptions","_points","sortedElev","minZ","maxZ","distUnit","widgetDiv","widgetHeigth","widgetWidth","zLabelWidth","zGradWidth","toLocaleString","minXguideWidth","elevationSvg","gradZ","maxNumZguides","maxGraphZ","numZguides","axisZ","gradZtext","yTextTranslation","yStrokeTranslation","gradZstroke","gradZpath","gradZgrad","guidesZ","gradZyOffsetPx","axisZLegend","maxNumXguides","gradX","maxGraphX","numXguides","lastGradX","axisX","gradXtext","xTextTranslation","xStrokeTranslation","gradXstroke","gradXpath","gradXgrad","guidesX","xOffset","gradXxOffsetPx","axisXLegend","elevationPathG","pointY","pathD","pathPath","pathFill","dynamicsG","pathRectangle","sortedDist","focusLineX","focusLineY","focusCircle","tooltipDiv","altiSpan","slopeSpan","coordsSpan","currentSlope","tooltipG","tooltipBubble","tooltipBubbleShadow","__createProfileMarker","__removeProfileMarker","mousePoint","createSVGPoint","svgMousePoint","matrixTransform","getScreenCTM","mouseDist","distIndex","d0","d1","focusX","focusY","__updateProfileMarker","altiSpanTxt","slopeSpanTxt","slope","coordsSpanTxt","toolTipBubbleD","tooltipTextWidth","displayProfileRaw","__customRawProfileMouseOverEvent","displayProfileLibD3","d3","linear","xAxis","orient","ticks","yAxis","xDomain","domain","yDomain","tickSize","tickFormat","selectAll","enter","bisectDist","bisector","transition","mouse","xc","yc","_message","html","displayProfileLibAmCharts","ballonText","AmCharts","addInitHandler","coeffArrond","pathToImages","categoryField","autoMarginOffset","marginTop","startDuration","fontSize","thousandsSeparator","numberFormatter","decimalSeparator","categoryAxis","gridPosition","minHorizontalGap","tickPosition","titleColor","labelOffset","startOnAxis","chartCursor","animationDuration","bulletsEnabled","bulletSize","categoryBalloonEnabled","cursorColor","graphBulletAlpha","graphBulletSize","zoomable","trendLines","balloonColor","balloonText","bulletAlpha","bulletBorderColor","bulletBorderThickness","bulletColor","fillAlphas","fillColors","lineAlpha","lineColor","lineThickness","valueField","guides","valueAxes","minVerticalGap","balloon","borderColor","borderThickness","showBullet","titles","allLabels","dataProvider","_containerProfile","makeChart","addListener","chart","ElevationPath","_ElevationPath","_showContainer","_pictoButton","_profileContainer","_infoContainer","_timerHdlr","_drawStyleStart","_drawStyleFinish","_profile","_data","_measureSource","_measureVector","_measureDraw","_lastSketch","_currentSketch","_initializeContainer","_initMeasureInteraction","_addMeasureInteraction","_removeProfile","_removeMeasureInteraction","_displayProfile","elevationOptions","greaterSlope","meanSlope","ascendingElevation","descendingElevation","stylesOptions","draw","DISPLAY_PROFILE_BY_DEFAULT","displayContainer","_createStylingDraw","_createStylingMarker","DEFAULT_STYLES","MARKER","userStyles","PROFILE","_defaultStyle","_features","_requestService","projSrc","projDest","pointCoords","_getGeometry","_computeElevationMeasure","_getSketchCoords","oldlat","oldlon","_distanceMinus","_distancePlus","_ascendingElevation","_descendingElevation","_distance","_slopes","distances","distanceToPrevious","za","zb","_altMin","_altMax","_greaterSlope","ji","distancePlus","distanceMinus","altMin","altMax","_getLength","_updateInfoContainer","removeMeasure","_removeMeasure","_coordinateProj","getClosestPoint","_geometry","addFeature","_pts","_proj","RESULTS","_image","imageRadius","imageStrokeColor","imageStrokeWidth","imageFillColor","snapToPixel","LayerImport","_LayerImport","gpEditorId","_mapBoxPanel","_importPanel","cleanMapBoxResults","_importPanelHeader","_showImportButton","contentStatic","contentService","_name","layerTypes","webServicesOptions","vectorStyleOptions","extractStyles","MapBox","_initImportTypes","_initDefaultStyles","_importPanelTitle","_importPanelReturnPicto","_staticLocalImportInput","_staticUrlImportInput","_serviceUrlImportInput","_getCapPanel","_getCapPanelHeader","_getCapResultsListContainer","_mapBoxPanelHeader","_mapBoxResultsListContainer","_loadingContainer","_hasGetCapResults","_getCapRequestUrl","_getCapResponseWMS","_getCapResponseWMSLayers","_getCapResponseWMTS","_getCapResponseWMTSLayers","_hasMapBoxResults","_file","typesList","wrongTypesIndexes","kmlDefaultStyles","_defaultKMLStyle","gpxDefaultStyles","_defaultGPXStyle","geoJSONDefaultStyles","_defaultGeoJSONStyle","MapBoxDefaultStyles","_defaultMapBoxStyle","_currentImportType","_isCurrentImportTypeStatic","_currentStaticImportType","importPanel","importPanelPanelDiv","panelReturn","importForm","_initInputFormElement","getCapPanel","importGetCapResultsList","mapBoxPanel","importMapBoxResultsList","loading","importTypeChoiceDiv","importStaticParamsContainer","staticNameLabel","staticImportChoice","staticLocalImportChoice","staticUrlImportChoice","staticLocalInputDiv","staticUrlInputDiv","importServiceParamsContainer","importServiceUrlDiv","_hideFormContainer","_displayFormContainer","cleanGetCapResultsList","cleanMapBoxResultsList","setCollapsed","_importStaticLayer","_importServiceLayers","staticImportNameInput","_importStaticLayerFromLocalFile","_importStaticLayerFromUrl","_addFeaturesFromImportStaticLayer","file","files","fReader","FileReader","onprogress","onloadstart","onabort","onloadend","readAsText","fileContent","vectorLayer","vectorSource","vectorFormat","vectorStyle","_glStyles","_glSources","_multiSources","_glSourceId","_keys","_glSource","_glType","_glUrl","_glTiles","_glSprite","_urlService","featureClass","declutter","_tileJSONDoc","_glData","_glStyle","_glLayers","keySource","applyStyleOlms","projCode","_onLoadedMapBox","_onChangeVisibilitySourceMapBox","_onChangeScaleMinSourceMapBox","_onChangeScaleMaxSourceMapBox","_onChangeLegendValueSourceMapBox","_onDisplayLayerSourceMapBox","setContext","getID","once","fileProj","readProjection","_getMapProjectionCode","configControl","readRootExtensions","authorizedControls","class","isocurve","elevationpath","typeControl","graphControl","nameControl","titleControl","classControl","forEachFeature","srcElement","idDOM","questionMarkIndex","_displayGetCapResponseLayers","xmlResponse","getCapResponseWMS","Capability","getCapLayer","_displayGetCapResponseWMSLayer","getCapResponseWMTS","Contents","_getWMTSLayerProjection","Title","Abstract","layerObj","parentLayersInfos","mapProjCode","addKeys","replaceKeys","_isRootLayer","bRubriqueExist","lstRubrique","_getWMSLayerProjection","_projection","_isGoodContainer","proposalId","_addGetCapWMSLayer","_addGetCapWMTSLayer","getMapUrl","_getWMSLayerGetMapUrl","LegendURL","OnlineResource","_getWMSLayerInfoForLayerSwitcher","_getWMSLayerMinMaxResolution","_getWMSLayerExtent","wmsLayer","queryable","gpGFIparams","Format","getmapurl","GetMap","getmap","DCPType","HTTP","Get","CRSList","layerCRS","mapUnits","MinScaleDenominator","MaxScaleDenominator","cste","exGeographicBoundingBox","boundingBox","BoundingBox","olProj","reversedExtent","MetadataURL","Attribution","LogoURL","Identifier","_getWMTSLayerGetTileUrl","tmsOptions","_getTMSParams","tms","isDefault","wmtsLayer","_getWMTSLayerExtent","gettileurl","OperationsMetadata","GetTile","gettile","DCP","TileMatrixSetLink","TileMatrixSet","TileMatrix","SupportedCRS","tilematrix","scaledenominator","tileMatrixSet","ScaleDenominator","TopLeftCorner","WGS84BoundingBox","GeoportalAttribution","_Attribution","ctrls","_updateAttributions","mapAttributions","mapProjection","geoExtent","standardExtent","_updateLayerAttributions","mapCrs","mapZoom","layerAttributions","attributionj","MeasureLengthDOM","_createShowMeasureLengthPictoElement","onShowMeasureLengthClick","geodesic","onPointerMoveHandle","sourceProj","MeasureAreaDOM","_createShowMeasureAreaPictoElement","onShowMeasureAreaClick","getArea","MeasureAzimuthDOM","_createShowMeasureAzimuthPictoElement","onShowMeasureAzimuthClick","onPointerMoveAzimutHandler","lengthGeodesic","getCoordinateAt","degrees2radians","radians2degrees","lon1","lon2","azimut","finishDrawing","Zoom","GeoportalZoom","_Zoom","buttons","_createContainerPosition","FullScreen","GeoportalFullScreen","_FullScreen","labelActive","activeClassName","inactiveClassName","tipLabel","OverviewMap","GeoportalOverviewMap","_OverviewMap","collapseLabel","LegendsDOM","_createShowLegendsPictoElement","onShowLegendsClick","_createLegendsPanelElement","_createLegendsPanelDivElement","_createLegendsPanelHeaderElement","_createLegendsPanelIconElement","_createLegendsPanelTitleElement","_createLegendsPanelCloseElement","_createLegendElement","_createLegendEntry","Legends","panelLegendsContainer","panelLegendsHeaderContainer","buttonLegendsShow","getTitle","getLegends","metadatas","getMetadata","getDescription","getQuicklookUrl","partners","getOriginators","getMetaInformations","panelLegendsEntriesContainer","buttonLegendsClose","legendsPanel","legendsPanelDiv","legendsEntriesDiv","legendsPanelHeader","legendsPanelIcon","legendsPanelTitle","legendsCloseBtn","infos","cloneInfoLegends","bestInfoLegend","InfoLegend","newEntry","replaceWith","TerritoriesDOM","_createShowTerritoriesPictoElement","onShowTerritoriesClick","_createTerritoriesPanelElement","_createTerritoriesPanelDivElement","_createTerritoriesPanelHeaderElement","_createTerritoriesPanelIconElement","_createTerritoriesPanelTitleElement","_createTerritoriesPanelCloseElement","onCloseTerritoriesClick","_createTerritoriesElement","_createTerritoryEntry","defaultImage","onImageTerritoriesClick","Territories","panelTerritoriesContainer","panelTerritoriesHeaderContainer","buttonTerritoriesShow","TerritoriesJson","setTerritory","founded","territories","panelTerritoriesEntriesContainer","buttonTerritoriesClose","territoriesPanel","territoriesPanelDiv","territoriesEntriesDiv","territoriesPanelHeader","territoriesPanelIcon","territoriesPanelTitle","territoriesCloseBtn","setCollapse","ControlListDOM","_createShowControlListPictoElement","onShowControlListPanelClick","_createControlListPanelElement","_createControlListPanelDivElement","_createControlListPanelHeaderElement","_createControlListPanelContentElement","_createControlListPanelFooterElement","controlCatalogelement","addToolsBtn","_createControlListPanelControl","controlContainer","divText","spanTitle","spanDescription","ControlList","controlCatalogElement","_ControlListPanelContainer","_ControlListPanelHeaderContainer","_pictoControlListButton","_ControlListPanelContentContainer","CatalogDOM","_createShowCatalogPictoElement","onShowCatalogClick","_createCatalogPanelElement","_createCatalogPanelDivElement","_createCatalogPanelContentDivElement","_createCatalogPanelHeaderElement","_createCatalogPanelTitleElement","_createCatalogPanelCloseElement","onCloseCatalogClick","_createCatalogContentDivElement","_createCatalogContentTitleElement","_createCatalogContentSearchElement","strContainer","shadow","attachShadow","onSearchCatalogButtonClick","onSearchCatalogInputChange","_createCatalogWaitingElement","_createCatalogContentCategoriesTabs","categories","strTabButtons","tmplTabButton","tabindex","strSectionRadios","tmplSectionRadio","strTabPanelContents","tmplTabPanelContent","strTabContent","strTabContents","tmplSectionRadios","panelSections","radios","panelContents","ariaSelected","onSelectCatalogTabClick","_createCatalogContentCategoryTabContent","layersFiltered","strElements","tmplElement","categoryId","tmplSection","isSection","field","matchAll","imul","inputName","onSelectCatalogEntryClick","buttonName","spans","Catalog","showWaiting","initLayersList","hideWaiting","initMapLayers","panelCatalogContainer","panelCatalogHeaderContainer","buttonCatalogShow","titlePrimary","titleSecondary","layerLabel","layerFilter","buttonCatalogClose","contentCatalogContainer","waitingContainer","layersList","cat","layersListOnMap","widgetPanel","widgetPanelDiv","widgetPanelHeader","widgetPanelTitle","widgetCloseBtn","widgetContentDiv","widgetContentElementDiv","createCatalogContentEntries","getLayersByCategory","getLayersByFilter","fetchUrls","_layer","widgetContentEntryTabs","contents","layersCategorised","fetchUrl","_initLayersList","getConfiguration","updateFilteredLayersListDOM","setFilteredLayersList","scripts","date","deepCopy","tce","Ol","includeProjections","DefaultMarkers"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/modules/Classic.css b/dist/modules/Classic.css index 8ec26685..5bf22739 100644 --- a/dist/modules/Classic.css +++ b/dist/modules/Classic.css @@ -8,10 +8,10 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * - */#GPmapLoading{display:none;height:50px;left:50%;margin-left:-25px;margin-top:-25px;position:absolute;top:50%;width:50px;z-index:50}#GPmapLoading.GPmapLoadingVisible{display:block}#GPmapLoading{background-image:url(data:image/gif;base64,R0lGODlhNAA0AIQSAAFkpSZ5sAGV3k2Ruiao3kOj1/GUBk225pe/B4S83XrK75HH3qrS5szMzNbW1sHe797e3ubm5v///////////////////////////////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAQAfACwAAAAANAA0AAAF5uAnjmRpnmiqrmzrvnAsz3T9FXhh72Ke8zWfDzgT/ogxIw55cjgiJ6XOhKjaII1sNio8Vb8ImnbMXVLBVhl2vI2hvzIHOwt9veGxyLwhu4dlcw59bzVjgjNoPHU2f0yOj5CRkpMocg2HjwaaBitzmZuaKWuGTKCgKHt8SKabqHulrJwno1qYQLGyJ56OrCuWtrChlMPExcbHH4s1ymK1NJZtM4Fxu3mvMXvMLdBj2ip60zG0WoBzENLVJL+66TDj7GQmbOc1EE9N4SURDvSRqcgj/gH8wC0LsGPtAK7pN7Chw4cQSYQAACH5BAUBAB8ALBYABAAaACcAAAVw4PdBTQOJaKquX+k2bJw6b+nIcu3isV7yLFrttioYczWWcVmICYkq5hKolB6pKOsUm9Vyu9JvKiyOls/otHqNQ7gR6ff7LJeX63Mx3n3f0+txeWyDhIVlBmsGiopoi45njo9fkZKTlIhil42RaYsxIQAh+QQFAQAfACwWAAkAGgAnAAAFdOAnjmQZOVCprmTjuikrf289y/Ub32SUuw6e6teICEuO31GVfC1Zxqd0Sq1arYVsAavNUrvdKVgrHm+l5jMazPVe3/C4/IN4I+73Kn5P3fOffn+AgXUqBocGK4QriIiKfoaNjip4LJKTT5eHU5qJnJJWjVUhACH5BAUBAB8ALAkAFgAnABoAAAV04CeOZGmepdM0Duq+5yo3cO2qcwPZPJnLveBvFezhZrsi76cM4lrNqHRKrVpPhmoBZuh2o4VwGOUtK8VoU9lcRKdJazbP/R7Fv236tnQ/If4IJ3pYa36Af4JuLl6Gh4gmYlKOgFclk4+VIpeBmSOTnZaUTSEAIfkEBQEAHwAsBAAWACcAGgAABXfg9xmkIZ5oqq5rWbJwnLqubLP0e+9nTvJAnwnIyxGJtaNyyWw6n1Ao4hmRIa7XpaPBbbCw4OO2y1WBw0Ryt4o6o3cRNdeRcmfTcojZvSr4CytyXntvKH9/gWR6X3cph4crEQ6LSo+IUYaWgJgnmpucIpagjpc3IQAh+QQFAQAfACwEAAkAGgAnAAAFb+AnjqJhkmiamqyhvmjLwrA806p946Tu8isbMNca1ozIpHLJTCKeiCYUupxOlVaqMxvdZqtWqbZJLpvPyEK5wGYz23AlPJ6c0412t9yucjQaDi98KX+FDTBtfYZ/gUmLhUqPf0p+i42Oi00QfxAiIQAh+QQFAQAfACwEAAQAGgAnAAAFc+AnjmRZGqhhrmyasrDounE7o/V64yvi6zuTb4gA0oTEn+lYSg5zSGcROpJOqVUntknc9rzgsHhMLhXOhTEaHV6vwW62N36G09tutbzM7/v/JhFlDYQNDmKFhYdeEYmFYA6OhIJbEJINYZdhlolkEA6UUCEAIfkEAQEAHwAsBAAEACcAGgAABXXgJ45kWSIoYq5sS6apK8swPN9mHeP8p6O9UmG4+qlMhmRryCwUa6uk1LBqMp9A5FQptBKDW2nX6+SFxSRyuXemjpvBz5lljYu2srX9vu/7/4CBgh8NhQ6DK4WKDYgkEIuGjSKQipKElIySj5CHlpSWIw6RoCEAOw==)}.GPwidget{color:#333;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:13px;pointer-events:auto;position:absolute}.GPwidget input[type=button],.GPwidget input[type=text]{-webkit-appearance:none;appearance:none;color:#333}.GPwidget input[type=checkbox]{display:none}.GPwidget select{border-radius:3px;padding-left:3px}.GPwidget form{margin-bottom:0}.GPwidget *{background-repeat:no-repeat;box-sizing:border-box}:root{--size-per-row:32px}#position-container-bottom-left,#position-container-bottom-right,#position-container-top-left,#position-container-top-right{border-style:solid;display:flex;flex-direction:column;justify-content:center;min-height:var(--size-per-row);position:absolute;width:var(--size-per-row)}#position-container-top-left,#position-container-top-right{top:0}#position-container-top-left{float:left;left:0}#position-container-top-right{float:right;right:0}#position-container-bottom-left,#position-container-bottom-right{bottom:0}#position-container-bottom-right{float:right;right:0}#position-container-bottom-left{float:left;left:0}.GPpanel{background-color:#fff;border:unset;border-radius:4px;box-shadow:0 0 6px #000;padding:unset}.GPpanelHeader{background-color:#9db1bd;border-top-left-radius:4px;border-top-right-radius:4px;height:32px;padding:3px;position:relative;width:100%}.GPpanelTitle{background-color:#366291;border-top-left-radius:2px;border-top-right-radius:2px;color:#fff;font-weight:700;height:100%;line-height:26px;text-align:center;width:100%}.GPpanelClose,.GPpanelIcon,.GPpanelInfo,.GPpanelReduce,.GPresetPicto,.GPreturnPicto{background-color:#366291;border:none;cursor:pointer;height:26px;position:absolute;width:26px}.GPpanelClose{background-position:-27px 0;right:3px;top:3px}.GPpanelInfo,.GPreturnPicto{left:3px;top:3px}.GPpanelReduce{right:32px;top:3px}.GPresetPicto,.GPreturnPicto{border-radius:3px;opacity:1}.GPshowAdvancedToolPicto{background-color:hsla(0,0%,100%,.4);border:2px solid hsla(0,0%,100%,.4);border-radius:4px;box-sizing:border-box;cursor:pointer;height:32px;padding:2px;position:relative;width:32px}.GPshowAdvancedToolPicto:hover{background-color:hsla(0,0%,100%,.6)}.GPshowAdvancedToolOpen{background-color:rgba(0,60,136,.5);border-radius:2px;box-sizing:border-box;display:block;height:26px;position:absolute;width:26px}.GPshowAdvancedToolPicto:hover .GPshowAdvancedToolOpen{background-color:rgba(0,60,136,.7)}.GPshowOpen{background-color:rgba(0,60,136,.5)}.GPshowOpen:hover{background-color:rgba(0,60,136,.7)}.GPwaitingContainer{background-color:hsla(0,0%,100%,.9);border-radius:4px;bottom:0;font-size:1.5em;font-weight:700;left:0;overflow:hidden;position:absolute;right:0;top:32px}.GPwaitingContainerVisible{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex}.GPwaitingContainerHidden{display:none}.GPwaitingContainerInfo{margin:auto}.GPflexInput{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;transition:max-height .3s ease-out,opacity .3s ease-out}.GPflexInput>*{border:1px solid #999;border-radius:0;display:block;height:28px;line-height:26px}.GPflexInput :not(:last-child){border-right:none}.GPflexInput :first-child{border-radius:3px 0 0 3px}.GPflexInput :last-child{border-radius:0 3px 3px 0}.GPflexInput>:not(input){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.GPflexInput>input{min-width:0;padding:0 5px}.GPflexInput>input,.GPflexInput>select{-webkit-flex:1;-webkit-box-flex:1;-ms-flex:1;flex:1}.GPflexInput>select{padding-right:7px}.GPflexInput>label{background-color:#f2f2f2;color:#666;cursor:pointer;padding-left:7px;padding-right:9px}input.GPsubmit{background:none;background-color:#366291;border:none;border-radius:3px;color:#fff;cursor:pointer;display:block;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-weight:700;height:28px;line-height:26px;margin:auto;opacity:.8;padding:0;transition:opacity .2s ease-out;width:80px}input.GPsubmit:hover{opacity:1}.GPselect{border:1px solid #999;color:#333;cursor:pointer;display:block;height:28px;line-height:26px;margin:auto}.GPform{padding:15px}.GPelementHidden,.GPelementInvisible{display:none;opacity:0;visibility:hidden}.GPelementShow,.GPelementVisible{display:block;opacity:100%;visibility:visible}.GPadvancedAutoCompleteList,.GPautoCompleteList{z-index:2}.GPadvancedAutoCompleteList{border-top:none;font-size:.9em;width:calc(100% - 28px)}.GPautoCompleteProposal{color:#5e5e5e;cursor:pointer;font-size:1em;height:28px;line-height:16px;overflow:hidden;padding:6px 10px;text-overflow:ellipsis;white-space:nowrap;width:100%}.GPautoCompleteProposal:hover{background-color:#cedbef;color:#000}.GPshowMoreOptionsImage{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAA7ElEQVRIx+3UvUoDQRSG4ffMLhbaLIEFvQSxtN1ALiGymkswpZVoupS6Vt6BYBMWf+s0Kaa1FG9BEBYbDQRnj4UKqTRgtjtPeWaYb4YPBowxpmmyyKbs6PpJVCfVan3wOOzN5te2huVK692dq0jHn+abf53lFrqWMlKRfjKNxu1Bmf6M24MyTabRWEX6KKOlvRAgO77ZQ/UCqBDXdSqzmnAPbKDs+yK/XGrgV+jtNlrfAcn36BVxXX+y89BYh+kbrQ+JrgBiDbsva1SNdhhigi/yzBd5FmKCdfivQIDOYbk+3+HkrPds35kx5lef+y50/JHC/FoAAAAASUVORK5CYII=)}.GPshowMoreOptions{cursor:pointer;display:block;height:28px;position:absolute;transition:all .5s ease-out 0s;width:28px}button[aria-pressed=true].GPshowMoreOptions,input[type=checkbox]:checked+.GPshowMoreOptions{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.gp-feature-info-div{background-color:#fff;border-radius:10px;bottom:17px;box-shadow:0 0 5px #000;color:#002a50;font-family:Open Sans,sans-serif;font-size:.75em;max-width:calc(100vw - 80px);padding:10px;position:relative}.gp-feature-info-div:before{border-left:14px solid transparent;border-right:14px solid transparent;border-top:15px solid #fff;bottom:-15px;content:"";left:50%;margin-left:-14px;position:absolute}.gp-feature-info-div .closer{background-color:#fff;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwYjc5OCIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:14px 14px;border:none;border-bottom-right-radius:10px;border-top-right-radius:10px;cursor:pointer;display:block;height:30px;position:absolute;right:0;top:0;width:30px}.gp-features-content-div{max-height:340px;max-width:420px;min-width:260px;overflow:auto}.gp-features-content-div h5,.gp-features-content-div h6,.gp-features-content-div p,.gp-features-content-div ul{margin:0}.gp-features-content-div ul{list-style-type:none;padding:0}.geoportail-popup-content h5,.geoportail-popup-content h6,.geoportail-popup-content p,.gp-att-description-div,.gp-att-name-div,.gp-att-others-div{padding:0 10px}.geoportail-popup-content h5:not(:last-child),.geoportail-popup-content h6:not(:last-child),.geoportail-popup-content p:not(:last-child),.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){margin-bottom:15px}.geoportail-popup-content h5:last-child,.geoportail-popup-content h6:last-child,.geoportail-popup-content p:last-child,.gp-att-description-div:last-child,.gp-att-name-div,.gp-att-others-div:last-child{margin-bottom:10px}.geoportail-popup-content h5:first-child,.geoportail-popup-content h6:first-child,.geoportail-popup-content p:first-child,.gp-att-description-div:first-child,.gp-att-name-div:first-child,.gp-att-others-div:first-child{margin-top:10px}.gp-att-name-div,.gp-features-content-div h5{color:#0b6ba7;font-size:1.2em;font-weight:700;padding-right:35px;text-transform:uppercase}.gp-features-content-div h6{font-size:1.1em}.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){border-bottom:1px dotted #666;padding-bottom:10px}.gpf-radio-btn-group{display:flex;gap:1em}.gpf-btn-icon{caret-color:transparent}[id^=GPdrawingPanel-]{width:240px}.GPshowDrawingPicto{background-position:1px;background-repeat:no-repeat}.GPdrawingPanelClose,.GPshowDrawingPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGCSURBVFiF7da/Sh1BFMfxuXZa2AuWgkoa0SqP4StoUoi2PklyBZXUNlpZWGmq5AmiYghpAv5pAoKW+rFwFq/D3NXdu5fb7K9ahjPnd757Zs9OCK1atWrVlDCHvzjB5KjrGVg49aKfdaHwGdsYK4np4As26lf8diF7XqsyVIR5iPt3c1AR5muMeWwUCrM4wwEmcZhAHVfM1032b6GTwGwlMd0mYS57Eh9loP5UzFkcpV7tYizpTKGdXBebgEmh9vALczVy94NKuzd0mEL7DXjkoEYCA+cDG4VSqOywyKk0CLMhhO8hhKmSsOsQwvL7y35TnXeuVRMm8Bu3JZ25UuOb6eOXGwC1utTPYBXfsIT/GYMbfBgizE5mrT6U5+vMYnz+mHTqCvNDhinGdnakVzWZxj1metYKqMZgYt7h/1ixGTf+wwwWPB+/iyZhotcnL1ef7GhOOvWI9aomP3rexl08fisYb4zktd9a7FTfaRahulirY3AZoTYxPVC1rVq1ajVKPQEmCKhvk/LblAAAAABJRU5ErkJggg==)}.GPdrawingCoords,.GPdrawingLabel{display:inline-block;line-height:20px}.GPdrawingLabel{font-weight:700;width:80px}.GPdrawingCoords{width:110px}.marker-input-radio{display:none}input.marker-input-radio:checked+label{border:1px solid red}.drawing-tool{background-color:#e9edf0;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MjAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA3MjAgNDAiPjxkZWZzPjxjbGlwUGF0aCBpZD0iYiI+PHBhdGggZD0iTTAgODk2aDg5NlYwSDBaIi8+PC9jbGlwUGF0aD48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGQ9Ik0wIDg5Nmg4OTZWMEgwWiIvPjwvY2xpcFBhdGg+PC9kZWZzPjxwYXRoIGQ9Im04Ny40MyAzMi41MjYgNS0xNSAxNSAxMCA1LTIwIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDBiNzk4O3N0cm9rZS13aWR0aDoyIi8+PHBhdGggZD0iTTg1Ljk0MiAzMC4wNjJ2NGg0di00em00LjgyMy0xNC4xMTZ2NGg0di00em0xNC41MjUgOS4xNzJ2NGg0di00em00Ljc3LTE5LjE4djRoNHYtNHoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNlOWVkZjA7c3Ryb2tlLXdpZHRoOjEuNSIvPjxwYXRoIGQ9Im0xMjcuNDMgMzIuNTI2IDUtMTUgMTUgMTAgNS0yMCIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZmZjtzdHJva2Utd2lkdGg6MiIvPjxwYXRoIGQ9Ik0xMjUuOTQgMzAuMDYydjRoNHYtNHptNC44My0xNC4xMTZ2NGg0di00em0xNC41MiA5LjE3MnY0aDR2LTR6bTQuNzctMTkuMTh2NGg0di00eiIgc3R5bGU9ImZpbGw6I2ZmZjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMmE1MDtzdHJva2Utd2lkdGg6MS41Ii8+PGcgc3R5bGU9ImZpbGw6IzAwYjc5ODtmaWxsLXJ1bGU6ZXZlbm9kZCI+PHBhdGggZD0ibTE2OC4zMSAyOS45MzggMy0xOS44NzUgMTQuNzUtMyA1IDI1Ljg3NXoiIHN0eWxlPSJmaWxsLW9wYWNpdHk6LjQ7c3Ryb2tlOiMwMGI3OTg7c3Ryb2tlLXdpZHRoOjIiLz48cGF0aCBkPSJNMTgzLjk0IDUuMDYzdjRoNHYtNHptLTE0Ljc1IDMuMjV2NGg0di00em0tMi44OCAxOS42MjV2NGg0di00em0yMy4zOCAzdjRoNHYtNHoiIHN0eWxlPSJzdHJva2U6I2U5ZWRmMDtzdHJva2Utd2lkdGg6MS41Ii8+PC9nPjxnIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQiPjxwYXRoIGQ9Im0yMDguMzEgMjkuOTM4IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbC1vcGFjaXR5Oi40O3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDoyIi8+PHBhdGggZD0iTTIyMy45NCA1LjA2M3Y0aDR2LTR6bS0xNC43NSAzLjI1djRoNHYtNHptLTIuODggMTkuNjI1djRoNHYtNHptMjMuMzggM3Y0aDR2LTR6IiBzdHlsZT0ic3Ryb2tlOiMwMDJhNTA7c3Ryb2tlLXdpZHRoOjEuNSIvPjwvZz48cGF0aCBkPSJtMjYxLjgxIDMwLjc0LTEuNTUzLTUuMDk4aC03LjgwN2wtMS41NTMgNS4wOThoLTQuODkzbDcuNTYtMjEuNTA0aDUuNTVsNy41OSAyMS41MDR6bS0yLjYzNy04LjkwNnEtMi4xNTMtNi45My0yLjQzLTcuODM3LS4yNjUtLjkwOC0uMzgyLTEuNDM2LS40ODMgMS44NzYtMi43NjggOS4yNzR6IiBzdHlsZT0iZmlsbDojMDBiNzk4Ii8+PGcgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwYjc5OCI+PHBhdGggZD0iTTI3MS41IDMxLjA0di0yMiIvPjxwYXRoIGQ9Ik0yNjkgOC41Nmg1bS01IDIyLjg4aDUiIHN0eWxlPSJzdHJva2Utd2lkdGg6MS4xMTgwMDAwMyIvPjwvZz48dGV4dCB4PSIyODYiIHk9IjMwLjc1MiIgZm9udC1zaXplPSIxMi41IiBsZXR0ZXItc3BhY2luZz0iMCIgc3R5bGU9ImZvbnQtc2l6ZToxMi41cHg7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowO3dvcmQtc3BhY2luZzowO2ZpbGw6I2ZmZiIgd29yZC1zcGFjaW5nPSIwIj4KICAgIDx0c3BhbiB4PSIyODYiIHk9IjMwLjc1MiIgZm9udC1zaXplPSIzMCIgZm9udC13ZWlnaHQ9ImJvbGQiIHN0eWxlPSJmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjMwcHg7Zm9udC1mYW1pbHk6JnF1b3Q7T3BlbiBTYW5zJnF1b3Q7Ij5BPC90c3Bhbj4KICA8L3RleHQ+PGcgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZmZiI+PHBhdGggZD0iTTMxMS41IDMxLjA0di0yMiIvPjxwYXRoIGQ9Ik0zMDkgOC41Nmg1bS01IDIyLjg4aDUiIHN0eWxlPSJzdHJva2Utd2lkdGg6MS4xMTgwMDAwMyIvPjwvZz48cGF0aCBkPSJtMzU2LjY0IDIxLjc4Mi0zLjQxNi0zLjQxNGExLjIxIDEuMjEgMCAwIDAtMS43MDggMGwtLjg1NC44NTRjLS40Ny40Ny0uNDcgMS4yMzUgMCAxLjcwNmwzLjQxNiAzLjQxNGExLjIxIDEuMjEgMCAwIDAgMS43MDggMGwuODU0LS44NTNhMS4yMDcgMS4yMDcgMCAwIDAgMC0xLjcwOG0tMTAuNzE0IDEwLjkzYy0uMDA1IDAtLjAxMi4wMS0uMDIuMDEzLS4wMDQgMC0uMDEuMDEtLjAxNC4wMS0uMDA1IDAtLjAxLjAxLS4wMTYuMDEtLjAwNSAwLS4wMS4wMS0uMDE3LjAxLS4yLjEyLS43ODMuNDI1LTIuMi45MzdxLS4yNDkuMDktLjUzNC4xOWwtMi4wMTQtMi4wMTNjLjA2Ni0uMTkuMTMtLjM3My4xOS0uNTQuNTEtMS40Mi44MTgtMi4wMDQuOTM2LTIuMjAyLjAwMyAwIC4wMDYtLjAxLjAwOC0uMDEzLjAwNC0uMDEuMDA4LS4wMTMuMDEyLS4wMi4wMDMgMCAuMDA2LS4wMS4wMDgtLjAxMnEuMDA4LS4wMTMuMDEzLS4wMmwuMTQ2LS4xNDcgMy42NSAzLjY0Ny0uMTUuMTV6bTMuODgyLTEwLjkzYTEuMjEgMS4yMSAwIDAgMC0xLjcwOCAwbC0uNDI3LjQyNy01Ljk3NyA1Ljk3M2guMDAybC0uMTkuMTg4cy0uNi42MDUtMS45NTYgNC45NzZxLS4wMTUuMDQ0LS4wMjguMDkyLS4wMzcuMTE3LS4wNzQuMjQtLjAzLjEwNi0uMDY2LjIxNmwtLjA1Ni4xODYtLjEzLjQ0Yy0uMDk4LjMzLS4zMzYgMS4wNzQtLjA2NyAxLjM0My4yNi4yNiAxLjAxNC4wMyAxLjM0My0uMDY2bC40MzctLjEzLjE5NC0uMDZxLjEwNC0uMDMuMjA1LS4wNjJsLjI1LS4wNzdxLjAzOC0uMDEzLjA3My0uMDIzYzQuMTY2LTEuMjk1IDQuOTE0LTEuOTAzIDQuOTc2LTEuOTZoLjAwNGwuMTkzLS4xOTIuMDEyLjAxMyA1Ljk3Ny01Ljk3NC40MjctLjQyN2ExLjIwNiAxLjIwNiAwIDAgMCAwLTEuNzA3bC0zLjQxNi0zLjQxNHoiIHN0eWxlPSJmaWxsOiMwMGI3OTgiLz48cGF0aCBkPSJtMzI5IDgtMiAydjE2bDIgMmgxMGw4LThWMTBsLTItMnoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQiLz48ZyBzdHlsZT0iZmlsbDojZmZmIj48cGF0aCBkPSJtMzk2LjY0IDIxLjc4Mi0zLjQxNi0zLjQxNGExLjIxIDEuMjEgMCAwIDAtMS43MDggMGwtLjg1NC44NTRjLS40Ny40Ny0uNDcgMS4yMzUgMCAxLjcwNmwzLjQxNiAzLjQxNGExLjIxIDEuMjEgMCAwIDAgMS43MDggMGwuODU0LS44NTNhMS4yMDcgMS4yMDcgMCAwIDAgMC0xLjcwOG0tMTAuNzE0IDEwLjkzYy0uMDA1IDAtLjAxMi4wMS0uMDIuMDEzLS4wMDQgMC0uMDEuMDEtLjAxNC4wMS0uMDA1IDAtLjAxLjAxLS4wMTYuMDEtLjAwNSAwLS4wMS4wMS0uMDE3LjAxLS4yLjEyLS43ODMuNDI1LTIuMi45MzdxLS4yNDkuMDktLjUzNC4xOWwtMi4wMTQtMi4wMTNjLjA2Ni0uMTkuMTMtLjM3My4xOS0uNTQuNTEtMS40Mi44MTgtMi4wMDQuOTM2LTIuMjAyLjAwMyAwIC4wMDYtLjAxLjAwOC0uMDEzLjAwNC0uMDEuMDA4LS4wMTMuMDEyLS4wMi4wMDMgMCAuMDA2LS4wMS4wMDgtLjAxMnEuMDA4LS4wMTMuMDEzLS4wMmwuMTQ2LS4xNDcgMy42NSAzLjY0Ny0uMTUuMTV6bTMuODgyLTEwLjkzYTEuMjEgMS4yMSAwIDAgMC0xLjcwOCAwbC0uNDI3LjQyNy01Ljk3NyA1Ljk3M2guMDAybC0uMTkuMTg4cy0uNi42MDUtMS45NTYgNC45NzZxLS4wMTUuMDQ0LS4wMjguMDkyLS4wMzcuMTE3LS4wNzQuMjQtLjAzLjEwNi0uMDY2LjIxNmwtLjA1Ni4xODYtLjEzLjQ0Yy0uMDk4LjMzLS4zMzYgMS4wNzQtLjA2NyAxLjM0My4yNi4yNiAxLjAxNC4wMyAxLjM0My0uMDY2bC40MzctLjEzLjE5NC0uMDZxLjEwNC0uMDMuMjA1LS4wNjJsLjI1LS4wNzdxLjAzOC0uMDEzLjA3My0uMDIzYzQuMTY2LTEuMjk1IDQuOTE0LTEuOTAzIDQuOTc2LTEuOTZoLjAwNGwuMTkzLS4xOTIuMDEyLjAxMyA1Ljk3Ny01Ljk3NC40MjctLjQyN2ExLjIwNiAxLjIwNiAwIDAgMCAwLTEuNzA3bC0zLjQxNi0zLjQxNHoiIHN0eWxlPSJzdHJva2U6I2VmZjtzdHJva2Utd2lkdGg6LjAzIi8+PHBhdGggZD0ibTM2OSA4LTIgMnYxNmwyIDJoMTBsOC04VjEwbC0yLTJ6bTkxLjUzIDE1Ljk3Yy0zLjE2IDEuNjMtMS4xNTcgNS41MzQtNC43NCA2LjgwMy0zLjc2MyAxLjMzNC02Ljg5Mi0zLjQ5Mi03LjY3Ni02Ljk2My0uMy0xLjMzMy0uOTItMTIuMzE0IDExLjEzOC0xNC41OTMgOS40MDctMS43NzggMTIuNjU3IDcuODU0IDEyLjcyIDEwLjg5LjA1OCAyLjg5LjM3IDkuMDQtNC40NCA4Ljk2Mi00LjA2LS4wNjYtMy4yMDMtNC4wNjQtNi44OC01LjAzOC0xLjk1Ni0uNTE4LS4xMjItLjA2Mi0uMTIyLS4wNjJ6IiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQiLz48L2c+PGVsbGlwc2UgY3g9IjQ1NC4xOSIgY3k9IjI0LjgxMiIgcng9IjIuNDM4IiByeT0iMi41IiBzdHlsZT0iZmlsbDojMDAyYTUwIi8+PGcgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMmE1MDtzdHJva2Utd2lkdGg6MS43MzU5OTk5NDtzdHJva2UtbGluZWNhcDpyb3VuZCI+PHBhdGggZD0ibTQ1Mi43OCAxOC41NCA0LjM0LTIuNjA0bS0zLjQ4Ljg3NCAyLjYwNC0xLjczNm0tMS43MzQgMy40NjYgMS43MzYtLjg2OE00NjEuNDcgMTcuMTNsNC4zNC0yLjYwNG0tMy40Ny44NjQgMi42MDQtMS43MzZtLTEuNzM0IDMuNDc2IDEuNzM2LS44NjhNNDY0LjkxIDIzLjIybDQuMzQtMi42MDRtLTMuNDguODY0IDIuNjA0LTEuNzM2bS0xLjczNCAzLjQ3NiAxLjczNi0uODY4Ii8+PC9nPjxwYXRoIGQ9Ik00MjAuNTMgMjMuOTdjLTMuMTYgMS42My0xLjE1NyA1LjUzNC00Ljc0IDYuODAzLTMuNzYzIDEuMzM0LTYuODkyLTMuNDkyLTcuNjc2LTYuOTYzLS4zLTEuMzMzLS45Mi0xMi4zMTQgMTEuMTM4LTE0LjU5MyA5LjQwNy0xLjc3OCAxMi42NTcgNy44NTQgMTIuNzIgMTAuODkuMDU4IDIuODkuMzcgOS4wNC00LjQ0IDguOTYyLTQuMDYtLjA2Ni0zLjIwMy00LjA2NC02Ljg4LTUuMDM4LTEuOTU2LS41MTgtLjEyMi0uMDYyLS4xMjItLjA2MnoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQiLz48ZWxsaXBzZSBjeD0iNDE0LjE5IiBjeT0iMjQuODEyIiByeD0iMi40MzgiIHJ5PSIyLjUiIHN0eWxlPSJmaWxsOiNlOWVkZjAiLz48ZyBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZWRlZmYwO3N0cm9rZS13aWR0aDoxLjczNTk5OTk0O3N0cm9rZS1saW5lY2FwOnJvdW5kIj48cGF0aCBkPSJtNDEyLjc4IDE4LjU0IDQuMzQtMi42MDRtLTMuNDguODc0IDIuNjA0LTEuNzM2bS0xLjczNCAzLjQ2NiAxLjczNi0uODY4TTQyMS40NyAxNy4xM2w0LjM0LTIuNjA0bS0zLjQ3Ljg2NCAyLjYwNC0xLjczNm0tMS43MzQgMy40NzYgMS43MzYtLjg2OE00MjQuOTEgMjMuMjJsNC4zNC0yLjYwNG0tMy40OC44NjQgMi42MDQtMS43MzZtLTEuNzM0IDMuNDc2IDEuNzM2LS44NjgiLz48L2c+PGcgY2xpcC1wYXRoPSJ1cmwoI2EpIiBzdHlsZT0iZmlsbDojMDBiNzk4IiB0cmFuc2Zvcm09Im1hdHJpeCguMDI5NzYgMCAwIC0uMDI5MDIgNi42NjcgMzMpIj48cGF0aCBkPSJNNDQ4IDQ0OGMtNjEuNzcyIDAtMTEyIDUwLjIzLTExMiAxMTJzNTAuMjI4IDExMiAxMTIgMTEyYzYxLjc3IDAgMTEyLTUwLjIzIDExMi0xMTJzLTUwLjIzLTExMi0xMTItMTEybTAgNDQ4Yy0xODUuMjggMC0zMzYtMTUwLjcyLTMzNi0zMzYgMC03MC41ODcgMjEuOTU4LTEzOC4zIDYzLjQyNC0xOTUuODlsOC44MTgtMTIuMzYgMjQxLjM2LTM0MC41NEM0MzAuODk4IDQuMTYgNDM5LjIxMiAwIDQ0OC4wMDIgMGEyOC4wMyAyOC4wMyAwIDAgMSAyMi4zOTQgMTEuMjFsMjM4LjM2IDMzNi40OSAxMS43NiAxNi4zYzQxLjUzIDU3LjY5NyA2My40OSAxMjUuNDEgNjMuNDkgMTk2IDAgMTg1LjI4LTE1MC43MiAzMzYtMzM2IDMzNiIvPjwvZz48ZyBjbGlwLXBhdGg9InVybCgjYikiIHN0eWxlPSJmaWxsOiNmZmYiIHRyYW5zZm9ybT0ibWF0cml4KC4wMjk3NiAwIDAgLS4wMjkwMiA0Ni42NjcgMzMpIj48cGF0aCBkPSJNNDQ4IDQ0OGMtNjEuNzcyIDAtMTEyIDUwLjIzLTExMiAxMTJzNTAuMjI4IDExMiAxMTIgMTEyYzYxLjc3IDAgMTEyLTUwLjIzIDExMi0xMTJzLTUwLjIzLTExMi0xMTItMTEybTAgNDQ4Yy0xODUuMjggMC0zMzYtMTUwLjcyLTMzNi0zMzYgMC03MC41ODcgMjEuOTU4LTEzOC4zIDYzLjQyNC0xOTUuODlsOC44MTgtMTIuMzYgMjQxLjM2LTM0MC41NEM0MzAuODk4IDQuMTYgNDM5LjIxMiAwIDQ0OC4wMDIgMGEyOC4wMyAyOC4wMyAwIDAgMSAyMi4zOTQgMTEuMjFsMjM4LjM2IDMzNi40OSAxMS43NiAxNi4zYzQxLjUzIDU3LjY5NyA2My40OSAxMjUuNDEgNjMuNDkgMTk2IDAgMTg1LjI4LTE1MC43MiAzMzYtMzM2IDMzNiIvPjwvZz48cGF0aCBkPSJtNjExLjkzIDExLjkzIDE2LjE0OCAxNi4xNDhtLS4wMDgtMTYuMTQ4LTE2LjE0OCAxNi4xNDgiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZmY7c3Ryb2tlLXdpZHRoOjMuODEzOTk5ODk7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIi8+PHBhdGggZD0ibTU3MS45MyAxMS45MyAxNi4xNDggMTYuMTQ4bS0uMDA4LTE2LjE0OC0xNi4xNDggMTYuMTQ4IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDBiNzk4O3N0cm9rZS13aWR0aDozLjgxMzk5OTg5O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZCIvPjxwYXRoIGQ9Im00ODcgMzAuMDQgMS4wMDQtNkw0OTMgMjkuMDN6IiBzdHlsZT0iZmlsbDojMDBiNzk4O2ZpbGwtcnVsZTpldmVub2RkIi8+PGcgc3R5bGU9ImZpbGw6IzAwYjc5OCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQ4IC05NzIuMzYpIj48Y2lyY2xlIGN4PSI1NDEiIGN5PSI5ODcuMzYiIHI9IjUiLz48Y2lyY2xlIGN4PSI1NTUiIGN5PSI5ODcuMzYiIHI9IjUiLz48Y2lyY2xlIGN4PSI1NTUiIGN5PSI5OTYuMzYiIHI9IjUiLz48cmVjdCB3aWR0aD0iMTQiIGhlaWdodD0iMTEiIHg9IjU0MSIgeT0iOTgyLjM2IiByeD0iMCIgcnk9IjAiLz48cGF0aCBkPSJNNTUwIDk4Ny4zNmgxMHY5aC0xMHoiLz48cGF0aCBkPSJNNTQ0IDk5My4zNmgxMXY4aC0xMXptLTgtNmg3djZoLTd6Ii8+PHBhdGggZD0ibTUzNiA5OTMuMzYgOCA4di04eiIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkIi8+PC9nPjxwYXRoIGQ9Ik00OTMgMTRoMTV2MWgtMTV6bTAgNGgxNXYxaC0xNXptMyA0aDEydjFoLTEyeiIgc3R5bGU9ImZpbGw6I2VkZWZmMCIvPjxwYXRoIGQ9Im01MjcgMzAgMS4wMDQtNkw1MzMgMjguOTl6IiBzdHlsZT0iZmlsbDojZmZmO2ZpbGwtcnVsZTpldmVub2RkIi8+PGcgc3R5bGU9ImZpbGw6I2ZmZiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTggLTk3Mi4zNikiPjxjaXJjbGUgY3g9IjU0MSIgY3k9Ijk4Ny4zNiIgcj0iNSIvPjxjaXJjbGUgY3g9IjU1NSIgY3k9Ijk4Ny4zNiIgcj0iNSIvPjxjaXJjbGUgY3g9IjU1NSIgY3k9Ijk5Ni4zNiIgcj0iNSIvPjxyZWN0IHdpZHRoPSIxNCIgaGVpZ2h0PSIxMSIgeD0iNTQxIiB5PSI5ODIuMzYiIHJ4PSIwIiByeT0iMCIvPjxwYXRoIGQ9Ik01NTAgOTg3LjM2aDEwdjloLTEweiIvPjxwYXRoIGQ9Ik01NDQgOTkzLjM2aDExdjhoLTExem0tOC02aDd2NmgtN3oiLz48cGF0aCBkPSJtNTM2IDk5My4zNiA4IDh2LTh6IiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQiLz48L2c+PHBhdGggZD0iTTUzMyAxNGgxNXYxaC0xNXptMCA0aDE1djFoLTE1em0zIDRoMTJ2MWgtMTJ6IiBzdHlsZT0iZmlsbDojMDAyYTUwIi8+PHBhdGggZD0ibTY0OC45MjggMjkuNjM1IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbDojMDBiNzk4O2ZpbGwtb3BhY2l0eTouNDtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwYjc5ODtzdHJva2Utd2lkdGg6MiIvPjxnIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQiPjxwYXRoIGQ9Im0yMDguMzEgMjkuOTM4IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbC1vcGFjaXR5Oi40O3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDoyIiB0cmFuc2Zvcm09Im1hdHJpeCguNDg0NzYgMCAwIC40NTk4OSA1NTMuMjgzIDEwLjkzKSIvPjxwYXRoIGQ9Ik0yMjMuOTQgNS4wNjN2NGg0di00em0tMTQuNzUgMy4yNXY0aDR2LTR6bS0yLjg4IDE5LjYyNXY0aDR2LTR6bTIzLjM4IDN2NGg0di00eiIgc3R5bGU9InN0cm9rZTojMDAyYTUwO3N0cm9rZS13aWR0aDoxLjUiIHRyYW5zZm9ybT0ibWF0cml4KC40ODQ3NiAwIDAgLjQ1OTg5IDU1My4yODMgMTAuOTMpIi8+PC9nPjxwYXRoIGQ9Ik02NjEuODU1IDEzLjIxOHYxLjg0NmgxLjk0MXYtMS44NDZ6bS03LjE2IDEuNXYxLjg0N2gxLjk0MnYtMS44NDd6bS0xLjM5OCA5LjA1OXYxLjg0NmgxLjk0MnYtMS44NDZ6bTExLjM0OSAxLjM4NHYxLjg0N2gxLjk0MVYyNS4xNnoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNlOWVkZjA7c3Ryb2tlLXdpZHRoOi43MDk5OTU5MyIvPjxnIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQiPjxwYXRoIGQ9Im0yMDguMzEgMjkuOTM4IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbC1vcGFjaXR5Oi40O3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDoyIiB0cmFuc2Zvcm09Im1hdHJpeCguNDg0NzYgMCAwIC40NTk4OSA1OTEuMjgyIDEwLjk0NCkiLz48cGF0aCBkPSJNMjIzLjk0IDUuMDYzdjRoNHYtNHptLTE0Ljc1IDMuMjV2NGg0di00em0tMi44OCAxOS42MjV2NGg0di00em0yMy4zOCAzdjRoNHYtNHoiIHN0eWxlPSJzdHJva2U6IzAwMmE1MDtzdHJva2Utd2lkdGg6MS41IiB0cmFuc2Zvcm09Im1hdHJpeCguNDg0NzYgMCAwIC40NTk4OSA1OTEuMjgyIDEwLjk0NCkiLz48L2c+PC9zdmc+);background-size:720px 40px;border:unset;border-radius:10px;cursor:pointer;display:block;height:40px;width:40px}.drawing-tool-active{background-color:#002a50}button[id^=drawing-tool-point-]{background-position:0 0}button[id^=drawing-tool-point-].drawing-tool-active{background-position:-40px 0}button[id^=drawing-tool-line-].drawing-tool-active{background-position:-120px 0}button[id^=drawing-tool-line-]{background-position:-80px 0}button[id^=drawing-tool-holes-]{background-position:-640px 0}button[id^=drawing-tool-holes-].drawing-tool-active{background-position:-680px 0}button[id^=drawing-tool-polygon-]{background-position:-160px 0}button[id^=drawing-tool-polygon-].drawing-tool-active{background-position:-200px 0}button[id^=drawing-tool-text-]{background-position:-240px 0}button[id^=drawing-tool-text-].drawing-tool-active{background-position:-280px 0}button[id^=drawing-tool-edit-]{background-position:-320px 0}button[id^=drawing-tool-edit-].drawing-tool-active{background-position:-360px 0}button[id^=drawing-tool-display]{background-position:-400px 0}button[id^=drawing-tool-display-].drawing-tool-active{background-position:-440px 0}button[id^=drawing-tool-tooltip]{background-position:-480px 0}button[id^=drawing-tool-tooltip-].drawing-tool-active{background-position:-520px 0}button[id^=drawing-tool-remove]{background-position:-560px 0}button[id^=drawing-tool-remove-].drawing-tool-active{background-position:-600px 0}div.drawing-tools-flex-display{justify-content:space-between}button[id^=drawing-export-]{background-position:2px 0}.drawing-button{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMCAxMjAiPjxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwYjc5OCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjMiPjxwYXRoIGQ9Ik02ODggMzI2LjR2OGgyMHYtOG0tMTAtMTR2MTQiIHRyYW5zZm9ybT0ibWF0cml4KC42MDg2IDAgMCAuNTU5NSAtNDA5LjggLTEzNikiLz48cGF0aCBkPSJtNjkzIDMyMS40IDUgNSA1LTUiIHRyYW5zZm9ybT0ibWF0cml4KC42MDg2IDAgMCAuNTU5NSAtNDA5LjggLTEzNikiLz48L2c+PGcgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUwNSAtODU3LjQpIj48cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxNCIgeD0iNTEzIiB5PSI5MjUuNCIgcng9IjAiIHJ5PSIwIi8+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iOCIgeD0iNTE0IiB5PSI5MjUuNCIgcng9IjAiIHJ5PSIwIi8+PHBhdGggZD0iTTUxNSA5MzAuNGgxdjNoLTF6bTEgMWg4djJoLTh6Ii8+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTQiIHg9IjUyNiIgeT0iOTI1LjQiIHJ4PSIwIiByeT0iMCIvPjxwYXRoIGQ9Ik01MjUgOTI1LjRoMXY4aC0xem0tMSA1aDF2M2gtMXptLTkgNGgxMHYyaC0xMHptNSAyaDV2M2gtNXptLTMgMWgydjJoLTJ6bS0yLTFoMXYzaC0xem00LTExaDV2NWgtNXptLTMgM2gzdjJoLTN6bTAtM2gxdjNoLTF6bTEgMGgydjFoLTJ6Ii8+PC9nPjxnIGZpbGw9IiMwMGI3OTgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01NDAgLTgyNy40KSI+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTQiIHg9IjU0OCIgeT0iOTI1LjQiIHJ4PSIwIiByeT0iMCIvPjxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjgiIHg9IjU0OSIgeT0iOTI1LjQiIHJ4PSIwIiByeT0iMCIvPjxwYXRoIGQ9Ik01NTAgOTMwLjRoMXYzaC0xem0xIDFoOHYyaC04eiIvPjxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjE0IiB4PSI1NjEiIHk9IjkyNS40IiByeD0iMCIgcnk9IjAiLz48cGF0aCBkPSJNNTYwIDkyNS40aDF2OGgtMXptLTEgNWgxdjNoLTF6bS05IDRoMTB2MmgtMTB6bTUgMmg1djNoLTV6bS0zIDFoMnYyaC0yem0tMi0xaDF2M2gtMXptNC0xMWg1djVoLTV6bS0zIDNoM3YyaC0zem0wLTNoMXYzaC0xem0xIDBoMnYxaC0yeiIvPjwvZz48ZyBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIzIj48cGF0aCBkPSJNNjg4IDMyNi40djhoMjB2LThtLTEwLTE0djE0IiB0cmFuc2Zvcm09Im1hdHJpeCguNjA4NiAwIDAgLjU1OTUgLTQwOS44IC0xNjYpIi8+PHBhdGggZD0ibTY5MyAzMjEuNCA1IDUgNS01IiB0cmFuc2Zvcm09Im1hdHJpeCguNjA4NiAwIDAgLjU1OTUgLTQwOS44IC0xNjYpIi8+PC9nPjwvc3ZnPg==);background-size:30px 120px;font-size:.7em;height:30px;line-height:30px;margin:auto;padding-left:30px;padding-right:15px}.tool-form-submit{background-color:#00b798;border:none;border-radius:20px;color:#fff;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:.9em;text-align:center;text-transform:uppercase}.gp-label-div,.gp-styling-div{background-color:#fff;border:unset;border-radius:10px;box-shadow:0 0 5px #000;box-sizing:border-box;font-size:.75em;position:relative;top:17px}.gp-label-div:before,.gp-styling-div:before{border-bottom:15px solid #fff;border-left:10px solid transparent;border-right:9px solid transparent;content:"";left:50%;margin-left:-10px;position:absolute;top:-15px}.gp-input-label-style,.gp-textarea-att-label-style{border:none}.gp-textarea-att-label-style{height:80px;resize:none;width:240px}.gp-input-measure-style{background-color:#fff;border-radius:10px;font-size:.75em;text-align:center;width:240px}.gp-textarea-att-label-style{display:block}.gp-label-div .closer{background-color:#fff;border-top-right-radius:10px}.gp-input-label-style{width:180px}.gp-label-div{padding:10px}.gp-styling-div{padding:50px 20px 20px;width:340px}.gp-styling-div:after{border-bottom:1px solid #bbb;content:"Modifier le style";display:block;font-size:1.2em;font-variant:small-caps;font-weight:700;height:30px;left:30px;line-height:30px;position:absolute;text-align:center;top:0;width:280px}.gp-label-div .gp-styling-button:not([class*=closer]){display:block;margin:10px auto auto}.gp-styling-button:not([class*=closer]){background-color:#00b798;border:none;border-radius:12px;color:#fff;display:inline-block;font-size:.9em;font-weight:700;height:24px;line-height:24px;margin-top:20px;text-align:center;text-transform:uppercase;width:140px}.gp-styling-button:not([class*=closer]):hover{background-color:#eef2f5;color:#00b798}.gp-styling-button:not([class*=closer])+.gp-styling-button:not([class*=closer]){margin-left:20px}.gp-label-div .closer,.gp-styling-div .closer{background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwYjc5OCIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:14px 14px;border:none;cursor:pointer;display:block;height:30px;position:absolute;right:0;top:0;width:30px}.gp-styling-option{font-size:11px;line-height:30px;padding:0 20px;position:relative}.gp-styling-option input{cursor:pointer;display:block;height:20px;padding:0;position:absolute;top:6px}.gp-styling-option input[type=checkbox]{background:none;border:none;height:10px;padding:0;right:70px}.gp-styling-option input[type=color]{background:none;border:none;padding:0;right:70px;width:30px}.gp-styling-option input[type=text]{background:none;border:1px solid grey;color:#0b6ba7;margin:none;padding:0 5px;right:40px;width:80px}.gp-styling-option input[type=range]{margin:0;right:40px;width:80px}.gp-styling-option input[type=range]:focus{box-shadow:none;outline:none}.gp-styling-option input[type=range]::-webkit-slider-runnable-track{-webkit-appearance:none;background-color:grey;height:1px}.gp-styling-option input[type=range]::-webkit-slider-thumb:before{height:1px;left:-200px;pointer-events:none;position:absolute;right:50%;top:0}.gp-styling-option input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background-color:#0b6ba7;border:none;border-radius:50%;height:13px;position:relative;top:-6px;width:13px}.gp-styling-option input[type=range]::-moz-range-track{background-color:grey;height:1px;width:70px}.gp-styling-option input[type=range]::-moz-range-thumb{background-color:#0b6ba7;border:none;border-radius:50%;box-shadow:0;height:13px;position:relative;width:13px}.gp-styling-option input[type=range]::-ms-track{background-color:grey;border:0;border-color:transparent;border-radius:0;border-width:0;color:transparent;height:1px;width:70px}.gp-styling-option input[type=range]::-ms-fill-lower,.gp-styling-option input[type=range]::-ms-fill-upper{background:transparent;border-radius:0}.gp-styling-option input[type=range]::-ms-thumb{background-color:#0b6ba7;border:none;border-radius:50%;height:13px;width:13px}.gp-styling-option input[type=range]::-ms-tooltip{display:none}.gp-styling-option .marker-input-radio{display:none}.gp-styling-option .marker-label{cursor:pointer;display:inline-block;height:32px;margin-bottom:5px;margin-right:5px;padding:3px}.gp-styling-option .marker-input-radio:checked+.marker-label{background-color:rgba(0,183,152,.5);border:1px solid #002a50;padding:2px}.gp-styling-option .marker-label img{height:24px}.ol-attribution .gp-control-attribution-image{max-height:30px;max-width:inherit;vertical-align:middle}.GPpanelHeader{padding:unset}[id^=GPelevationPathPanelClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAAAaCAYAAABb9hlrAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH4gEQEjITjE0MtwAABGJJREFUaN7tmU1oHGUYx//PZEvSLjHVBLVaerCXSgo5tAqxiqBSxcSLWqknFaNdaYjiwUMOVVGi2EORJg0xtgbx0FKVgmirRU17SUpjPsCVUhQtVOr6ES8mmpqdnwffhekw2dndbMK23T8MzMzzzsz7PP/3+ZjnlaqooooqrlhY7gSol3Rr7tLMTlfNs3gAJqnGncvMJMk3M7+Q5xOB8zsl9Ui6XtI/ktZXzVs6MpmMNTU1rZa0SdJNknLkSNI0MCrpTzPLFkSQmR0FspIGJb1UNXHpHjM3N9dUW1t7u6QHJW2V9KukPyQhqcEt/i8lHctms8Oe5/0WR5SAW4AfgWGgC1ixjEo9AwwAXj7Fgb1AZ6WSMzk56QGbgQPA98AUsBvYAKwCVgJrgV3AKeAccAi4f3x8vCbOSA8AB91xGEguIzlZ/sdgFEmOnF43xq9UkoBrgD7gZ+B13/c3u/uPAG8AbwEdkpTNZjcCLwJngE+AtYV8YEW+VbxESvVxKfa5xBokZ19oTF+lkTMzM+MB9wJngT0hHT8KzP2bkGwHcB54Ktb2wNtAb5EGbgAaFhOzXegKYhDwQp6TwzvLvYgK1CPpwtkZYEtI9iowCowBAyHZeuCEi1pr4j4yBBwscmK7gZ7FJtYFSOq7TMgx4A7gB6AvnU5bSF4H1LtjVVCWSqUMeN550eN59SuWIMf+HDAL3LwEJC0bOSPdCRvpTljwOiT3RroTdQvM3QPanYfcFiHvAj4GjgCvLWDHT4EX8hZnUQQBCRf6tkWMD8bW/WVaiVEkDZZKDmWCI6kmD0FtwNfAugXsetG96qsIeSPwfhRBXoxy10n6XFKXpEPAy7kEDtwl6eHA8CeA5nJ2N2LuxXrEEjiaX2a9YpHvv2ODpFOS7gl84BVHVFLSntAjNZLeXGRLZK+knRHipyUNFONFrT3zlDsExhjZJNVLuqGE16+W1BjX6rmk3JY06v56w9gmaUuufRFCO3C3mZ0oAzmDki4G7nXkytJC+lgj3Qlr7ZnHzIK5JW4V09ozz0h3Yo0zdJOk3yVlHOELkY6kaUnXSnoynU6PNTc3F7RAUqmUSWqX1CLpA0nZ2Bzkqo5ScbKEvBNZSucrwS+zMnsI+DcqB8WV2Uuh6Loix/eGPKdf0g4z880Ml//6A/IO520VhdnZ2b8lHXM2fTQkrg1Eq3AleJ/rzX0mKVNQiFtmTLjk67mw1umIyTVxAXY61+904eS7SiMomUz6wGlJxyU9BswARzzPG5P0oaSfXJ4+m2v1eJ63VdKzzgbHo0J3Ik9MPVfiXM8XVdqYvety3sYwOSGSuhyJ35pZfyX24qampv5qaWl5T9JKSdvN7CHgC0n7JR11dm0Edklqk3Sjy/UHJiYmLsSWfsCQpDoz264qSq5Gi9lu8H0/73ZDmKCTrpq4UI65SnrOzIavRqJyG3ae522KqHinnefEbtiFCWpzJXSmTD91h83sl6vdo7SILe8qqqiiiisY/wFFCbN/sRPwgwAAAABJRU5ErkJggg==);background-position:-27px;background-repeat:no-repeat}[id^=GPelevationPathProfil]{height:150px;width:inherit}[id^=GPelevationPathProfil]>#profileElevationByDefault>svg{left:10px;position:absolute}div[id^=GPelevationPathInformationsContainer]{background-color:hsla(0,0%,100%,.9);border-radius:4px;bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:32px}#profileElevationRaw{padding:unset;resize:none}#profileElevationByDefault{display:-webkit-flex;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%}.altiPathValue{font-weight:700;fill:#5e5e5e}.altiPathCoords{font-style:italic;fill:#5e5e5e}.axis-d3>text{fill:#5e5e5e;font-family:Verdana;font-size:10px;opacity:1;text-anchor:end}.axis-d3{fill:none;stroke:#5e5e5e;stroke-width:1;shape-rendering:crispEdges}.area-d3{fill:#c77a04;stroke:#5e5e5e;stroke-width:0;fill-opacity:.4}.line-d3{fill:none;stroke:#c77a04;stroke-width:1px}.grid-d3 .tick{stroke:#d3d3d3;opacity:.7}.grid-d3 path{stroke-width:0}.overlay-d3{fill:none;pointer-events:all}.focusLine-d3{fill:none;stroke:#c77a04;stroke-width:.5px}.focusCircle-d3{fill:#c77a04}div.tooltip-d3{background:#fff;border:0;border-radius:8px;font:8px sans-serif;height:45px;padding:5px;pointer-events:none;position:inherit;text-align:left;width:80px}[id^=GPelevationPathPanel-]{width:280px}[id^=GPelevationPathPanelInfo]{background-position:-75px}[id^=GPelevationPathPanelInfo],button[id^=GPshowElevationPathPicto-]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAAAaCAYAAABb9hlrAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH4gEQEjITjE0MtwAABGJJREFUaN7tmU1oHGUYx//PZEvSLjHVBLVaerCXSgo5tAqxiqBSxcSLWqknFaNdaYjiwUMOVVGi2EORJg0xtgbx0FKVgmirRU17SUpjPsCVUhQtVOr6ES8mmpqdnwffhekw2dndbMK23T8MzMzzzsz7PP/3+ZjnlaqooooqrlhY7gSol3Rr7tLMTlfNs3gAJqnGncvMJMk3M7+Q5xOB8zsl9Ui6XtI/ktZXzVs6MpmMNTU1rZa0SdJNknLkSNI0MCrpTzPLFkSQmR0FspIGJb1UNXHpHjM3N9dUW1t7u6QHJW2V9KukPyQhqcEt/i8lHctms8Oe5/0WR5SAW4AfgWGgC1ixjEo9AwwAXj7Fgb1AZ6WSMzk56QGbgQPA98AUsBvYAKwCVgJrgV3AKeAccAi4f3x8vCbOSA8AB91xGEguIzlZ/sdgFEmOnF43xq9UkoBrgD7gZ+B13/c3u/uPAG8AbwEdkpTNZjcCLwJngE+AtYV8YEW+VbxESvVxKfa5xBokZ19oTF+lkTMzM+MB9wJngT0hHT8KzP2bkGwHcB54Ktb2wNtAb5EGbgAaFhOzXegKYhDwQp6TwzvLvYgK1CPpwtkZYEtI9iowCowBAyHZeuCEi1pr4j4yBBwscmK7gZ7FJtYFSOq7TMgx4A7gB6AvnU5bSF4H1LtjVVCWSqUMeN550eN59SuWIMf+HDAL3LwEJC0bOSPdCRvpTljwOiT3RroTdQvM3QPanYfcFiHvAj4GjgCvLWDHT4EX8hZnUQQBCRf6tkWMD8bW/WVaiVEkDZZKDmWCI6kmD0FtwNfAugXsetG96qsIeSPwfhRBXoxy10n6XFKXpEPAy7kEDtwl6eHA8CeA5nJ2N2LuxXrEEjiaX2a9YpHvv2ODpFOS7gl84BVHVFLSntAjNZLeXGRLZK+knRHipyUNFONFrT3zlDsExhjZJNVLuqGE16+W1BjX6rmk3JY06v56w9gmaUuufRFCO3C3mZ0oAzmDki4G7nXkytJC+lgj3Qlr7ZnHzIK5JW4V09ozz0h3Yo0zdJOk3yVlHOELkY6kaUnXSnoynU6PNTc3F7RAUqmUSWqX1CLpA0nZ2Bzkqo5ScbKEvBNZSucrwS+zMnsI+DcqB8WV2Uuh6Loix/eGPKdf0g4z880Ml//6A/IO520VhdnZ2b8lHXM2fTQkrg1Eq3AleJ/rzX0mKVNQiFtmTLjk67mw1umIyTVxAXY61+904eS7SiMomUz6wGlJxyU9BswARzzPG5P0oaSfXJ4+m2v1eJ63VdKzzgbHo0J3Ik9MPVfiXM8XVdqYvety3sYwOSGSuhyJ35pZfyX24qampv5qaWl5T9JKSdvN7CHgC0n7JR11dm0Edklqk3Sjy/UHJiYmLsSWfsCQpDoz264qSq5Gi9lu8H0/73ZDmKCTrpq4UI65SnrOzIavRqJyG3ae522KqHinnefEbtiFCWpzJXSmTD91h83sl6vdo7SILe8qqqiiiisY/wFFCbN/sRPwgwAAAABJRU5ErkJggg==);background-repeat:no-repeat}button[id^=GPshowElevationPathPicto-]{background-position:1px}div[id^=GPexportContainer-]{padding:5px}div[id^=GPexportContainer-]>input.GPsubmit{color:#fff}input[id^=GPexportButton-]{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxMy45OTkiIGhlaWdodD0iMTMuOTg4IiB2aWV3Qm94PSItMSAtMSA1LjcwNSA1LjciPjxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjMiPjxwYXRoIGQ9Ik02ODggMzI2LjR2OGgyMHYtOG0tMTAtMTR2MTQiIHRyYW5zZm9ybT0ibWF0cml4KC4xNjEwMyAwIDAgLjE0ODAzIC0xMTAuNTQ0IC00Ni4wMjQpIi8+PHBhdGggZD0ibTY5MyAzMjEuNCA1IDUgNS01IiB0cmFuc2Zvcm09Im1hdHJpeCguMTYxMDMgMCAwIC4xNDgwMyAtMTEwLjU0NCAtNDYuMDI0KSIvPjwvZz48L3N2Zz4=);background-repeat:no-repeat;background-size:25px 25px;min-width:fit-content;padding-left:25px;padding-right:5px}.GPexportMenuHidden{visibility:hidden}.GPexportMenuContainer{display:inline-block;position:relative}.GPexportMenuContent{border-radius:10px;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);display:none;min-width:80px;padding:8px;position:absolute;z-index:1}.GPexportMenuContent,.GPexportMenuContent a:hover{background-color:#f1f1f1}.GPexportMenuContainer:hover .GPexportMenuContent{display:block}.GPexportMenuContent .container{cursor:pointer;display:block;font-size:14px;margin-bottom:5px;padding-left:15px;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.GPexportMenuContent .container input{cursor:pointer;height:0;opacity:0;position:absolute;width:0}.GPexportMenuContent .checkmark{background-color:#eee;border-radius:50%;height:12px;left:0;position:absolute;top:0;width:12px}.GPexportMenuContent .container:hover input~.checkmark{background-color:#ccc}.GPexportMenuContent .container input:checked~.checkmark{background-color:#366291}.GPexportMenuContent .checkmark:after{content:"";display:none;position:absolute}.GPexportMenuContent .container input:checked~.checkmark:after{display:block}.GPexportMenuContent .container .checkmark:after{background:#fff;border-radius:50%;height:4px;left:4px;top:4px;width:4px}button[id^=GPgetFeatureInfoPicto][aria-pressed=true]{background-position:1px;background-repeat:no-repeat}button[id^=GPgetFeatureInfoPicto]{background-image:url(data:image/png;base64,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cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjliYzYwZTdiLTQ2YTQtNDBmYi1iNTdlLWM2MGY5ZWYzNTc2YSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMDE5ZDJjNS02YmZkLTQ5YzQtYTczYS0zMGQ3OGE0Y2MyZDUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpkN2U0OWVjNi0wZjQyLTQ5YTEtODQ3NS0zN2Y5N2Y3MGJjZWIiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE3MTAwODA3MjUxNDU4NjUiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxNTAxZWQwNS0xMmQ3LTQzNGMtODY3YS0yYjMyMzIxYTYwYjgiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTAzLTEwVDE1OjI1OjI1KzAxOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PnuaV+YAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAHdElNRQfoAwoOGRnrK4UpAAAB+UlEQVRYw+3YsWoUURTG8TNrikAECYJYiVjFLBhS2GktpPEV8gg+gr2IhbWQRhMQG0stIxaCaNKIjQTExqgBUYOJyc/mLkxmZ3d2dmciSA4sy+58c/73u+fMvXc34iROorXAPFaHCdY1F+vHxIG1Xu6sANLkDGZZlg0wpOFiLWRZtlkKmhSGLKU5HKIZm4M57Oaqc4TTGSPhNO7iHmZafD76OJiLiDcRMR0Re6MkqZw5XMZn7OB6WxUqcgqV+Y2FKs7IrYALuNh2y/U4JWauDOJM1WiB0xFxLiJm0/v3iNgqWwt6t4zZakXObEQ8yLXZ1SzLNtGp5AybOdzHFvZwiNsDdJ2U5qAhzn6+MnU4la2AG/iBDzjThqEc51cy1GemSUPPk+TJEE0Thl7mluU+M40Ywnl8xFcsYqqllruWq8weFsflVIHupMuvcAmfcKtEdyrp/tTlpNWs98wcYmkSTpWhF+nyBrbxCFlThkpOAO8n5VQZuonHeIilITlqGyqY2cezJjhNneXO1jFUtmlOwukMA+ZiA90SXRev88KI+FLDvIh4lzbNSBv1QWOcit8pP7Gc0y6n74qxg294+q85g+AzWMklWin5PFMzZ9nZrHFO1SCKM3VkJicx0wZn1MF08Ta9umPmWEsD3cV8W5zj/nNjdZCZk/jf4y94DaUx429cawAAAABJRU5ErkJggg==);background-position:-25px;border-top-left-radius:0;border-top-right-radius:0}.GPcloseGetFeatureInfo{background-image:url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=);background-position:0}.GPgfiLayerButton{background:unset;border:unset;font-weight:700;text-align:left}button[aria-expanded=true].GPgfiLayerButton span.GPshowGfiLayerFeature{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.GPshowGfiLayerFeature{background-image:url(data:image/png;base64,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ICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmM1NWM2ODRkLWY2OGQtNDExNy04ZGYzLTAwYWMzMjQ4YTY5YSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjNmYWM4YTllLWJkMTUtNGJiOC04ZGQyLTkwZDUyMjE0YmFmOCIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1QOlRpbWVTdGFtcD0iMTcyOTI0NTAwMjg0NjU2OCIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjMwIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjcwMTNhZTFjLTcyMjktNDJmZS1iMzAzLTU3NGFmMWE3ZmQxMyIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMTAtMThUMTE6NTA6MDIrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+UnHxogAAAAZiS0dEAPIA8gDyLkSMzAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+gKEgkyAorMuigAAAIkSURBVFjD7Zc/aBRBFMa/t39EFEMQTrQ2CiIi+K+Q3ZA+CLJ7nqWQwlRJGs3ddUnlZdUiXJEqINjE9e5UjFWag9sEbNRGhGB6MXKgQQPxZp5FLhLCXXbXXSQH8ytnhuF9771v3yygUCgUCkVXKOrB6/dqJzQD42A5DNAZAGBglYA3UlB55ZHztWcFWoXaLTDPAzjW5cgGMUYanlvpOYFtcc8inGVi5A6aSAptS50/761co+QAAOxCba/GH6TJgcaD3HqSoKx89RMx15tH5MTHqdzW7r3zU/6h47+0WSYaCmbcc2F3aftuGhjfpy075asPrI8lTjtjgYlG+zf1JbvoZ3aW7aKf6d/Ul5hoFIyFxBW08tUPAC7Giw3vl2fcS0k1tq3xBEATpN3UmLYkxCsAp8C4G3ju0yj3aCH7pzstNkrO3zbtkLGBNLwTlJznIG1wO2uyLiFWAJggzYoqDgCM8ILE7i9OXL0dDx7+PZH5iast0isAYLDIrh8VTXuyMpeKBwFei28fWkvTg8KACDzXCjzXEgZEXA+GCKTFf/gwv07cnp47DaLbBFxhqb+zCi8uD+ZfXmCpvyXgGhh3As+dTixQCioD2IgR23ezZZYPkgdDB709Wc0ywY8y6Jkpu+w5tTQH9dB9/+RuD9Yf5r6k/lTbFsnzAPV1qxwzjaQt7r8+tu2inwHrY8wYBnC2vbzKoEWzZZbrj298U/8uCoVCoegx/gAQwd9vpqyHDwAAAABJRU5ErkJggg==);background-position:-26px 0;display:inline-block;height:28px;vertical-align:middle;width:28px}[id^=GPisochronPanel-]{width:280px}.GPshowIsochronPicto{background-position:1px;background-repeat:no-repeat}.GPisochronPanelClose,.GPshowIsochronPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIRSURBVFiF7ZbRS1RBFMbPbLq9ldjaY88Zkv1JQRqt+Wf0aCrYBuY/UkRQRFQvQQax+JipEUIoQdHq/nrYb3K8zl33zl20h/vBwnLOmfPNN+fMmWtWoUKFMwPwjiO8Pu/9xOAGDQRqZnYYmLrOuQvD31I51AYJAqbNbNnMfgXm38AyMFV2E8AssKpDy4txwAowX4booogO1WYdYEu/jmwHIqqXEOPzr8VEScwjxXSTREnMSyXZBGaAscA/DtyTOIDnKaKAFsfxGHCB38kWopUiaNVffmC8T9wE8FaxKwk8vpVCrAG1TGU8nsSqeBrJLbXBl5gY4C7wOSNqW+13Y4iistUrLkYE/lTu5PhfAR8ytjmteViYMF9UeTFK3qZ36S9HfJeAP8CDjL2hqq4nkVpfUdFhEcNIjv2ame045/aA22Z2PeMbNbOn4QLn3C6wK38ZxN7Ggd/LKICfwKb+tyMntgGcOAzgO/AjkTM2AJKqFEvuW27s9Oh/aybUch8T+PKmWdaWJiro49kCa+a1ZmFIYvzYjo70ooJu6rS/Ao0B4q8C31TVyYJcZ/aw+iRv+omSmPeKXUrgmeHo0yc6mjOV6gL3i/IYUAdeKMkW0ASuBP6G2mxHMc+A0cJEvVxNVSp3mklUC2imcPgkdSU5CE5nWyK6snXofXUniTkXAFPAIvAJ2Af2gHVgoeidqVChwv+NvxOT737B3Fc7AAAAAElFTkSuQmCC)}button[id^=GPisochronReset]{opacity:.8;transition:opacity .2s ease-out}button[id^=GPisochronReset]:hover{opacity:1}.GPisochronReset{background-color:#366291;background-image:url(data:image/png;base64,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);background-position:-281px}form[id^=GPisochronForm]{padding:15px}div[id^=GPisochronChoice]{-webkit-justify-content:space-between;margin:10px auto 5px;width:160px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}p[id^=GPisochronPointLabelP],p[id^=GPisochronValueChronLabelP]{margin:2px 0 5px}.GPisochronChoiceAlt input:checked+label+span{color:#366291}input[id^=GPisochronChoiceAltChron]+.GPisochronChoiceAltImg{background-position:-56px 0}input[id^=GPisochronChoiceAltChron]:checked+.GPisochronChoiceAltImg{background-position:-84px 0}input[id^=GPisochronChoiceAltDist]+.GPisochronChoiceAltImg{background-position:-112px 0}input[id^=GPisochronChoiceAltDist]:checked+.GPisochronChoiceAltImg{background-position:-140px 0}.GPisochronChoiceAltImg,.GPisochronOriginPointerImg,.GPisochronTransportImg,input[id^=GPisochronChoiceAltChron]{background-image:url(data:image/png;base64,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)}.GPisochronChoiceAltImg,.GPisochronOriginPointerImg,.GPisochronTransportImg{font-size:0}.GPisoExclusionsOption{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAA4CAYAAADuMJi0AAAE60lEQVRYw+2YWWxUZRTHz/fd7y4zzAzTbaAdpgtQWsBiYVxYGpcEMCwRQkx48KHGhKg0WhESNYglwSUgWCKGTaMRBF4MwShpECUshlJqay2U0LCUwrRAp+0Ms997v8UnEl8Gp9Ppg2Z+bzfnn+/knHvud865AFmy/GfZVVZW/vvb9eduNn7Wc+ixGQ3/pm+UcO735VP3/rpsyc39TudHyXQ4maF61cqfZi97ocbjmVi6YGHNxoOeor3JtDskae606uqzFfPmvRqLxFg4EetIpiXJDJqqOHBwEEjIDyXjiVw4t/S1XD34TKs/MX+z4EEAgK0SwhPtjh+qq6tXBjGOtTY11a31D371qEygRxn3F3vWPVE1deN0G82T+m5BbCAIF+8lBttifLoFQeV0Wf7R7XbndsXird19/TUfAhgZeZ8H7eoXHYVWwzdBFTedsmhScfg0wfQPTRF7FfLdmBRRo4Q9RzTS8aeKRaeERAsC8TmRto30HJKqMCrhIcMUMuMcmADQJAQ5GJ4fqUMpFdE2mXgqOe+ewXhJFCHoJNJxu4omz7bhScVMyj/BeFPGUrlZIROOYRT4C0C0S0h8qUhHAAC2yGTFpUka7Skfx9/DZFZGnH2gEHxYwnc6EIguBYnDqtTzT3uDTFb3VdrEcZfWk5GUrgZxaI4QCyyaBAME04sUzTvL+dBD+xnOu8qiwrIgV1leEuf9JxhvTzu6Bgm5ThXkmNcciriaS8R2lXySTHvUqXb/lqsNp3Ju0qstx2Z7sfTZGuKsLAFkV4RK0J5k2s4wXYqYsO6WyYq0HUYN06c9XgX5SxcBuIt4gvJ40sJi7MaVONtVhGHmqIrmyLPzm29tqqf7ilwHUtHvVAjO9tksWbJkyQzehd7xo5ppUqW2tlbzLp380rhxitdB8q/4fD6acnsaKfX19c7Ji+QNJU/at7mmWaaZpklHNSY+irq6urzSxbBBy1PqEoJZfFdYoK2tjY2Jw4aGBpurJvKOmme8xWTTmgjq1DApAwAxoo6fIkieEnoF2+NvUDVqCekRiNIY4ip1eb1ekvEI39/65nOyO7hWtyWc0biOogkDooYOBhhujLEDAIZG4xADAH/4sH796y42ZWBNxBGrCEZMlNBNER1k8fBtdixwwzzY2toaTCtCr9drLXzKthgSiv7ztycfjvQo4O5fpWqR5eGojg2DCX1IBHUf3n2nSey5cOpCXzrfIXp6WZXXMtdYh8pi74JTL3WTijO913tDq2qXVxplA5vijgdTIvE4RO6zYOwO3t5/GhpbTrYMjnh78nq9VlwRfRmVRdewArM6rgJBTLbxErYEAL4J5vetwFJ4jghQxMNSSAyoO42Ttl0Xz58PpzXqS5JE7G5tqrAbM6lMiyljkimoQg1m8VhK7xrFwTpdixcbAaGz2/I+ekba0dzc/iDt3SIUCtH+Lv+lArWwjWPOOeMVJjI1imgRsyXKDas+mxoc83vKUfOC/dO2lst3M7LM3L816LdLBedlTIKU05lUNfJM2ZzEBZORXzuHrtk+vnSu63JGF9LhvmH9/uVAu8s9MUQFnWUSIweHFJ90z7qlq+n6L2OyAQMA918NdLrcrqgwoQrHyAHWqX49PDzMxsohAIAUuZ0YsHJHSO+G5t7eXj+k8ZsEjfCmsQGABgAmAMQBIJEdN7L8//gb3FshBGMt81oAAAAASUVORK5CYII=)}.GPisochronOriginPointerImg{background-color:#f2f2f2;cursor:pointer;width:28px}.GPisochronChoiceAlt input{display:none}.GPisochronChoiceAltImg{cursor:pointer;display:block;height:28px;margin:auto;width:28px}.GPisochronChoiceAlt span{color:#999;cursor:pointer;display:block}.GPisochronModeLabel{display:block;margin-bottom:5px;text-align:center}input[id^=GPisochronTransportCar]+.GPisochronTransportImg{background-position:-168px 0}input[id^=GPisochronTransportCar]+.GPisochronTransportImg,input[id^=GPisochronTransportCar]:checked+.GPisochronTransportImg{background-image:url(data:image/png;base64,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)}input[id^=GPisochronTransportCar]:checked+.GPisochronTransportImg{background-position:-196px 0}input[id^=GPisochronTransportPedestrian]+.GPisochronTransportImg{background-position:-224px 0}input[id^=GPisochronTransportPedestrian]+.GPisochronTransportImg,input[id^=GPisochronTransportPedestrian]:checked+.GPisochronTransportImg{background-image:url(data:image/png;base64,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)}input[id^=GPisochronTransportPedestrian]:checked+.GPisochronTransportImg{background-position:-252px 0}.GPisochronTransportChoice input{display:none}div[id^=GPisochronTransportChoice]>div{justify-content:center;width:100%}div[id^=GPisochronValueChron],div[id^=GPisochronValueDist]{margin:5px auto;width:220px}.GPisochronTransportImg{cursor:pointer;display:inline-block;height:28px;width:28px}.GPisochronTransportImg:first-of-type{margin-left:18px;margin-right:10px}select[id^=GPisochronDirectionSelect]{margin:5px auto;width:80px}.GPshowIsoExclusionsPicto{right:0;top:unset;transition:all .5s ease-out 0s}.GPisoExclusionsLabel{display:block;font-weight:700;line-height:16px;margin-bottom:10px;text-align:center}.GPisoExclusionsOptions{display:-webkit-flex;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.GPisoExclusionsOption{background-color:#fee;border:1px solid #a77;border-radius:3px;color:#a77;cursor:pointer;display:block;height:28px;line-height:26px;padding-left:28px;padding-right:5px}input:checked+.GPisoExclusionsOption{background-color:#efe;background-position:0 -28px;border:1px solid #797;color:#797}input[id^=GPisochronSubmit-]{padding:0 10px;width:fit-content}[id^=GPimportGetCapPanel-],[id^=GPimportMapBoxPanel-],[id^=GPimportPanel-]{width:340px}div[id^=GPimportTypeLine-]{border-bottom:1px solid #999;margin-bottom:15px;padding-bottom:15px}div[id^=GPimportChoice-]{margin-bottom:5px;margin-top:5px}.GPshowImportPicto{background-position:1px;background-repeat:no-repeat}.GPimportGetCapPanelClose,.GPimportMapBoxPanelClose,.GPimportPanelClose,.GPshowImportPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH7SURBVFiF7dY/aBRhEAXwvcN/sRBBkUNsA8JhoZ1gJaIIamV91SUSFCxtU1oJQS9i0lnZWShYpE5pIYFUNoJIsLGIYhC9n8XOcZt175Ldu2CzD7bYmfne+97O7nybJDVq1KhRFZjFWlyz/3s/lYFDeIjvhviJRRyZAv8cXqA5pqaBp3gwqdglvA8TW+jgNj5HbAOXJ+Cfw5/gWi0yFWaeRU2/kikcx2P8DpKXOJXJn8RSbKYfT/hEBZ2e3VhGI2dmOVfTKytyC59i8Udcy+RA5v4KNiP8BXdLag1epSxW0cx1ZoCVoi6OIm9FJ+BXdOhYrmaXoYgdxiPsRPoNzk3BVL57pcx08C0WrqM9ou4fQ5lcO9YKrs6EpqqZCcLtWPgkv3CMSFG3msEB2/vewHhThcOiCNmi50mSSJLkXpIk3TIbyaEbHIKzLBr7jO0N3JB+2PAapwtqCl856dR7FemvuFNSu2gAVOpSnvgM3gbJFm7uZQhXDc+lNZydgpmVglhlUw3M44f0jFnC0bwh6XRblJ5FO9JJV0pwjJnB2C4c6aVNhVgbH4JoAxcyufOGfxCbuFhR4+AP1pzgTIj2o2Pzue71MDMBf9fw16dwNOc61cf9yoYypNcNBwYVPvwx3AvxYEZOszDVw8I0NAekLbyLqzU14ho1atQ4KPwF7C8m4Xa+2v4AAAAASUVORK5CYII=)}.GPimportPanelReturnPicto{background-color:#366291;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4AUXDwQyeFmCzQAAATJJREFUSMftliFLBFEURs/dVUQURJvYLCaLGESz1T9gUJsoWARBEBRM/obFIFgMKxtsNhG2aTUIBqOCySLsHssuTNiVGZ47aU8aZr5537vz3TfvwZAhg0K9UL/U5bLMuuyljFXJYXYOHGVuxcAM1VPg5D+/1sgfZsfAWY9HG+ok0AY+gFfgJSI+UzI7tBht9UHdUqtFzQ5M41GdKZLhQmJMa0A9d6VqqDXT2e41fvQxrQCXQK+X7oGnzvUoMA3MAyvAWEbXjIjVIllW1eseM9/vo59SrzK6ljpXtIGq6k0ew0wcdxntTqGFHxEtYBO4zTPBiBDYBX6SGlAdVRud9baeQ99tunrKz6CizubULnYMn8vczprqW+HdIoEaMF5mhRPqe2kVRsQ30Cj7WLI0PJwNnF82zKAINyZs+wAAAABJRU5ErkJggg==)}.GPimportChoiceAlt input[type=radio]{display:none}.GPimportChoiceAltTxt{color:#bbb;cursor:pointer;display:block;font-weight:700;line-height:28px}input[type=radio]:checked+.GPimportChoiceAltTxt{color:#366291}.GPimportInputLine{display:-ms-flexbox;display:-webkit-box;display:flex;margin-bottom:10px}.GPimportInputLine>*{border:1px solid #999;border-radius:0;display:block;height:28px;line-height:26px}.GPimportInputLine :not(:last-child){border-right:none}.GPimportInputLine :first-child{border-radius:3px 0 0 3px}.GPimportInputLine :last-child{border-radius:0 3px 3px 0}.GPimportInputLine>:not(input){overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.GPimportInputLine>input{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0;padding:0 5px}.GPimportInputLine>select{-webkit-box-flex:1;-ms-flex:1;flex:1;padding-right:7px}.GPimportInputLine>label{background-color:#f2f2f2;color:#666;cursor:pointer;padding-left:7px;padding-right:9px}.GPimportGetCapProposal{color:#5e5e5e;cursor:pointer;font-size:1em;height:28px;line-height:16px;list-style-type:none;overflow:hidden;padding:6px 10px;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap;width:100%}.GPimportGetCapRubriqueTitle,.GPimportMapBoxListSourceTitle,.GPimportMapBoxSourceTitle{color:#5e5e5e}.GPimportGetCapListRubrique,.GPimportGetCapRubrique,.GPimportMapBoxListSource,.GPimportMapBoxSource{list-style-type:none}li.GPimportGetCapListRubrique:before,li.GPimportGetCapRubrique:before,li.GPimportMapBoxListSource:before,li.GPimportMapBoxSource:before{content:"» "}.GPimportGetCapProposal:hover,.GPimportGetCapRubriqueTitle:hover,.GPimportMapBoxSourceTitle:hover{color:#000}.GPimportMapBoxSourceFilter,.GPimportMapBoxSourceScale,.GPimportMapBoxSourceStyle,.GPimportMapBoxSourceVisibility{display:inline-block;margin-left:15px}.GPimportMapBoxJsonEdit{margin:5px;outline:1px solid #ccc;padding:5px}.GPimportMapBoxJsonEdithidden{display:none}.gp-json-string{color:green}.gp-json-number{color:#ff8c00}.gp-json-boolean{color:blue}.gp-json-null{color:#f0f}.gp-json-key{color:red}.GPimportMapBoxSourceVisibilityInput{display:block!important}[id^=GPimportPanelReturnPicto-]{background-position:0 0;border-radius:3px;cursor:pointer;height:26px;opacity:1;position:absolute;width:26px}.GPlayerSwitcher_layer{background-color:#fff}div[id^=GPlayerSwitcher-]{height:32px}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{width:190px}button[id^=GPshowLayersListPicto]{background-image:url(data:image/png;base64,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ZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDoyYjNmZWFlMS1hNzM0LTQ0NjItOTM3ZS1jYmEzM2JiMTY1NGQiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NGQ1NTRhMTgtNjk3NC00NDMyLTk5OTEtMjk5YzU1OTY4NWQ2IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NTA1ZjQ3ZGEtMzNjMy00YjRkLWE3ZWQtODEyMDVkOWRjNTk2IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEwOTM3NTE5MDA3NTY1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6N2Y1MGZlNjEtODdkYS00OWM2LWI5MjQtYTJlMmFmNjM0MmQyIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wMy0yMFQxMzoyNToxOSswMTowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5OxzFdAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AMUDBkTuLyY9QAAAhxJREFUaN7t2bFrFEEUx/GYxiBIYneFNmKZ2uJOCDHY6V8g5m9IZ6UGK1trsbawEQJiISHgYSFKwMrCQpGgNiYYFAOSj4VzYV02d7N3M3dR98GxMDcz7/t+7+3u8HZqqrHGGvvXDPNo/a/BT2MTu2jndjaHuQkH/AcDlv22d5jJ5fQkruMLvuIOTo058CqGFt4HAa7mdlq2sQgxgOFHuL7GdG6nXVxEG2u5hYhgeFIY/5aEoZ/TirlZhIhlwN3w3+eRGeoEnkuImuKfDeX/M7wCh2fACnYKi9+iM0TmOmFtz3awErm2FgMehnn3RmYYJfupqqBm9s9jH99xJlklDiNE6udADAOehfHbSRlwvAZEX6e9vYYQYBDDzcKD71IShnDfrFVsMItb2C44eRp+PdsOc2YrwLtYysAAb5Ix4EIpqDJEVTZi5nRxJVKAGIZH/Q5iozLEQPSycZja9Z3GM5zGxzD2ICfDQCGyOB3MsBeuL3AsKUMhs4+xUBhfxEbFvVa+JzewWFi3EPY6yNKIDM8LvnaTM1QcQtZLEOVsVKodnK4nOggdMOB+GPuUjaFPOS1VVERZ7U7Go/CrcNzdw7ncDFFCJHcax7A1ToZe12W1qiwPKbPV1J0iXA7770+KYWINkdDnexn83Jh0U2bsLTFcCwF+wImj0pYbS1MUM6HBCctHsTGbW+R2eN9vJu3z/WUitDDffPJprLHk9gs8Px9eX9iakAAAAABJRU5ErkJggg==);background-position:-2px;background-repeat:no-repeat}button[id^=GPshowLayersListPicto][aria-pressed=true]{background-position:-35px;border-top-left-radius:0;border-top-right-radius:0}.GPpanelBody{max-height:200px;overflow:auto}button[id^=GPlayerInfoClose]{background-color:unset;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAgCAYAAAAFQMh/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGUSURBVEiJ7ZQxT8JQEMf/hxOsDg6GOGtiYgyy0I4Ormj8BBqpZW9HFhNxRKom8AU0tHFRRx1KYlwcQIkrzM4mGnoOtlJKsa/q2N/4ernfu97dAxISEhJ+CYkEyZq1y8w5O9NRUKk44VFMsm7VHIdf2kdb9aicM0JS8BkIuezH3PxgfekKd3cclEqaeQxQmYg2soXt10H74uGnvKkoMROveHFE2JHelusAkz9C0iwDINU9IErRYlTeyIr79vnNgtybBZB3j9ayhZ5b+S3cSvd9F2nY6a46+VfGEeqx1z9mlL9PmJqE4TsoFZSWps9BbHG4PPBdWBpT7Mkva8zOmJzZabYzT3uiUkBguCbUPAy5LMUsQGC4fEpvZdTgFyJanb5qfxKHSbkB4B6g/JccseQC4nCpne6W+gfKtX/V4sgjeyPppgGGb2VwaleLKkA8uphlAFB8WU/sw82JlviJHC4CHgG408oNO90pj6QAQGxXiyoRvPeZwfQclVcIWWspkm4a409lECZJNw1ZaynTYxISEhL+gU/lu7XSwAzyjAAAAABJRU5ErkJggg==);background-position:-2px;background-repeat:no-repeat}button[id^=GPlayersPanelClose]{background-image:url(data:image/png;base64,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TUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDplZWM2OTBlMi05NGExLTRkOGItYTM4Yy02MjI3ZWFhNmVlMjQiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6YmQ3ZTNjMTUtMzcwNy00MDZjLTgxNTYtZjUxZGM0NDFlYjMxIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MTVhNTdhOTYtMDdjYi00NTVjLTgwODUtY2IzMjFlZTdhNDc2IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzE2MjkwMzk5OTk1NTI1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NGM2Y2U2YjItNDVmYS00Y2U0LWExODItMzNhZmUxNmZhNDc3IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNS0yMVQxMzoxOTo1OSswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4dtuOqAAAABmJLR0QA8gDyAPIuRIzMAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH6AUVCxM7RVVcxQAAAPJJREFUSMftlUEKwjAQAJPiE3yH+Ii81IvgG/IFBRPRWkwLib10exQVhawHLRRbU8QEPGSOmyXDJrsJIZFIJBISsS9nuYEtXy5Hn3I4x+SgYS2zcuFNaq1FRMTc1Gmf/CmtBL7wIlcaJLZQGjacY9KWKg2btxz5s7g5wvbGTeXvlT7XYOe6Ei9ypSsZTOqSB5cOyXMD6bfS5Hs90m6M0mCz3NdIfQ0XXJob2HVjHuWukXGN2t8+IIPNdbrcVohICCGkONZpAXrKGLXNOmPUFtl4okwtmtj5et/6ea+zcq40yHalfVeiNEiRlfP4rUYikaA8AMekzozLtupbAAAAAElFTkSuQmCC);background-position:-2px;background-repeat:no-repeat}.GPpanelIcon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48ZyBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMiIgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBkPSJNMTUuMTkzIDUuNDQ4IDguMSA5LjQ0IDEuMDA5IDUuNDQ4IDguMSAxLjQ1NHpNMS42NTUgMTAuMDc1bC0uODQ3LjQ3OCA3LjA5MSAzLjk5MyA3LjA5Mi0zLjk5My0uODQ4LS40NzgiLz48cGF0aCBkPSJNMS42NTUgNy41MjIuODA4IDhsNy4wOTEgMy45OTRMMTQuOTkxIDhsLS44NDgtLjQ3OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTZ2MTZIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:auto auto}[id^=GPlayerInfoPanel]{right:190px}div[id^=GPlayerInfoTitle]{border-bottom:1px solid #366291;color:#366291}.GPlayerAdvancedTools,.GPlayerBasicTools{height:28px;position:relative;width:100%}.GPlayerExtent,.GPlayerInfo,.GPlayerInfoOpened,.GPlayerRemove,.GPlayerVisibility{cursor:pointer;height:28px;width:28px}.GPlayerExtent,.GPlayerInfo,.GPlayerInfoOpened,.GPlayerName,.GPlayerOpacity,.GPlayerOpacityValue,.GPlayerRemove,.GPlayerVisibility{position:absolute;top:0}.GPghostLayer{opacity:0}.GPlayerBasicTools{background-color:#fff}.GPlayerExtent,.GPlayerInfo,.GPlayerInfoOpened,.GPlayerRemove,.GPlayerVisibility,.GPshowLayerAdvancedTools{background-image:url(data:image/png;base64,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)}.GPlayerOpacity input[type=range]::-webkit-slider-runnable-track{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAECAYAAAAZDrhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAwSURBVDiNY/z379//v3//Mvz9+5fh379/DITYxKobKWYxMYwCisBoAFIIRgOQQgAADrTuhXfc36kAAAAASUVORK5CYII=)}.GPlayerOpacity input[type=range]::-moz-range-track{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAECAYAAAAZDrhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAwSURBVDiNY/z379//v3//Mvz9+5fh379/DITYxKobKWYxMYwCisBoAFIIRgOQQgAADrTuhXfc36kAAAAASUVORK5CYII=)}.GPlayerOpacity input[type=range]::-ms-track{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAECAYAAAAZDrhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAwSURBVDiNY/z379//v3//Mvz9+5fh379/DITYxKobKWYxMYwCisBoAFIIRgOQQgAADrTuhXfc36kAAAAASUVORK5CYII=)}div[id^=GPlayerInfoQuicklook]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJTSURBVEiJ7ZZdSJNRGMd/59Vo9m6jQYKWRV/MQYGBXSStC2/S27YmXYfQZRexZiBhdNE2ke68qq5rY3rRjRFE1Du0KKIcwQYtaGpCH+r01ZrsPV2lc853c0IE+r87z3P+Px7OOc85B7adROFgcHDQAbRWYtR1fdTv9+vF8do1dCFanE7nU6vVagpbWFgglUq1A89NgQB2ux2Hw2EKVBRl45ypswqtq7BYM/oyD8emSE7rgMTVaKPTtac64E99mZtDKRZzeZobVABef55lPDPH6b2W+k0DH72aYjGX51rnEU4csAGQmJhnYCTNmx/qFSBa7DFdw+RXneYGdQUGcLLJxvF6C78M5VQpT5lNkebpzQJdjTaS0zqJifmVWGJynk/fflNXa7wr5Vm3htlsFsMwADjvtDCeEQyMpDm2bzcA6e85LLWwvy434vNFaqLRrnyhf03r9ff3q6qqthXGJhct9W9nrN1LeaUFoK7GeH/YujScmLWGhRCRl5YPl+nrM0oCNyN3INYL3AbxQAtd6AYhAWqqBX6JR14cOndpF8irB90f7Zl45AlssfW0oKdXIu8qQslshbOjba+SneIOxFavGSG6tKAn6u4ZCiBlsHCeFvKu85sd7AkgKg2ZAdCCnpCU3CtXodmNPaqFvF0rVfcMtyINbzlgRa139nrsDDL/DHCAzAL3twQE2kHYQWalFB1ayNuN4FbVwHjYewfkDSlFRzzsHXP3xI6C8rjU3LLv8l9poYurOywJguGjxCn5pz+HNncgFtkoVw2wCfBVUtWO/nP9AYuuwXn+Xm/WAAAAAElFTkSuQmCC)}div[id^=GPlayerInfoClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAgCAYAAAAFQMh/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGUSURBVEiJ7ZQxT8JQEMf/hxOsDg6GOGtiYgyy0I4Ormj8BBqpZW9HFhNxRKom8AU0tHFRRx1KYlwcQIkrzM4mGnoOtlJKsa/q2N/4ernfu97dAxISEhJ+CYkEyZq1y8w5O9NRUKk44VFMsm7VHIdf2kdb9aicM0JS8BkIuezH3PxgfekKd3cclEqaeQxQmYg2soXt10H74uGnvKkoMROveHFE2JHelusAkz9C0iwDINU9IErRYlTeyIr79vnNgtybBZB3j9ayhZ5b+S3cSvd9F2nY6a46+VfGEeqx1z9mlL9PmJqE4TsoFZSWps9BbHG4PPBdWBpT7Mkva8zOmJzZabYzT3uiUkBguCbUPAy5LMUsQGC4fEpvZdTgFyJanb5qfxKHSbkB4B6g/JccseQC4nCpne6W+gfKtX/V4sgjeyPppgGGb2VwaleLKkA8uphlAFB8WU/sw82JlviJHC4CHgG408oNO90pj6QAQGxXiyoRvPeZwfQclVcIWWspkm4a409lECZJNw1ZaynTYxISEhL+gU/lu7XSwAzyjAAAAABJRU5ErkJggg==)}.GPlayerInfoLink,.GPlayerInfoPopup{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJTSURBVEiJ7ZZdSJNRGMd/59Vo9m6jQYKWRV/MQYGBXSStC2/S27YmXYfQZRexZiBhdNE2ke68qq5rY3rRjRFE1Du0KKIcwQYtaGpCH+r01ZrsPV2lc853c0IE+r87z3P+Px7OOc85B7adROFgcHDQAbRWYtR1fdTv9+vF8do1dCFanE7nU6vVagpbWFgglUq1A89NgQB2ux2Hw2EKVBRl45ypswqtq7BYM/oyD8emSE7rgMTVaKPTtac64E99mZtDKRZzeZobVABef55lPDPH6b2W+k0DH72aYjGX51rnEU4csAGQmJhnYCTNmx/qFSBa7DFdw+RXneYGdQUGcLLJxvF6C78M5VQpT5lNkebpzQJdjTaS0zqJifmVWGJynk/fflNXa7wr5Vm3htlsFsMwADjvtDCeEQyMpDm2bzcA6e85LLWwvy434vNFaqLRrnyhf03r9ff3q6qqthXGJhct9W9nrN1LeaUFoK7GeH/YujScmLWGhRCRl5YPl+nrM0oCNyN3INYL3AbxQAtd6AYhAWqqBX6JR14cOndpF8irB90f7Zl45AlssfW0oKdXIu8qQslshbOjba+SneIOxFavGSG6tKAn6u4ZCiBlsHCeFvKu85sd7AkgKg2ZAdCCnpCU3CtXodmNPaqFvF0rVfcMtyINbzlgRa139nrsDDL/DHCAzAL3twQE2kHYQWalFB1ayNuN4FbVwHjYewfkDSlFRzzsHXP3xI6C8rjU3LLv8l9poYurOywJguGjxCn5pz+HNncgFtkoVw2wCfBVUtWO/nP9AYuuwXn+Xm/WAAAAAElFTkSuQmCC)}button[id^=GPinfo_ID_],button[id^=GPremove_ID_],button[id^=GPvisibilityPicto_ID_]{background-color:transparent;border:none}button[id^=GPvisibilityPicto_ID_][aria-pressed=false]{background-position:-28px 0;left:0}button[id^=GPvisibilityPicto_ID_][aria-pressed=true]{background-position:0 0}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{max-height:28px}.GPshowLayerAdvancedTools{background-position:-112px 0;right:0;top:0}.GPlayerInfo{background-position:-55px 0;left:0}.GPlayerInfoOpened{background-position:-83px 0;left:0}.GPlayerOpacity{height:28px;left:28px;padding-left:8px;width:calc(100% - 100px)}.GPlayerOpacityValue{cursor:default;font-size:10px;font-style:italic;left:calc(100% - 60px);line-height:28px;width:32px}.GPlayerRemove{background-position:-140px 0;right:0}.GPlayerOpacity input{-webkit-appearance:none;-moz-appearance:none;background:none;cursor:pointer;display:block;height:100%;margin:0;overflow:hidden;padding:0;width:100%}.GPlayerOpacity input[type=range]:focus{box-shadow:none;outline:none}.GPlayerOpacity input[type=range]::-webkit-slider-runnable-track{-webkit-appearance:none;height:3px}.GPlayerOpacity input[type=range]::-webkit-slider-thumb:before{height:3px;left:-200px;pointer-events:none;position:absolute;right:50%;top:0}.GPlayerOpacity input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background-color:#505050;border:2px solid #fff;height:17px;position:relative;top:-7px;width:9px}.GPlayerOpacity input[type=range]::-moz-range-track{height:3px;width:80px}.GPlayerOpacity input[type=range]::-moz-range-thumb{background-color:#505050;border:2px solid #fff;border-radius:0;box-shadow:0;height:13px;position:relative;width:5px}.GPlayerOpacity input[type=range]::-ms-track{border:0;border-color:transparent;border-radius:0;border-width:0;color:transparent;height:3px;width:80px}.GPlayerOpacity input[type=range]::-ms-fill-lower,.GPlayerOpacity input[type=range]::-ms-fill-upper{background:transparent;border-radius:0}.GPlayerOpacity input[type=range]::-ms-thumb{background-color:#505050;border:2px solid #fff;height:13px;width:5px}.GPlayerOpacity input[type=range]::-ms-tooltip{display:none}[id^=GPlayerInfoPanel]{overflow-y:hidden;padding-bottom:10px;padding-top:10px;position:absolute;top:0}.GPlayerInfoPanelOpened{display:block}.GPlayerInfoPanelClosed{display:none}div[id^=GPlayerInfoTitle]{font-size:1.1em;font-weight:700;margin:auto auto 10px;padding-bottom:5px;text-align:center;width:calc(100% - 52px)}div[id^=GPlayerInfoQuicklook]{cursor:pointer;height:20px;left:10px;position:absolute;top:-2px;width:20px}div[id^=GPlayerInfoClose]{cursor:pointer;height:28px;position:absolute;right:10px;top:-8px;width:28px}div[id^=GPlayerInfoDescription]{font-size:.9em}.GPlayerInfoSubtitle{font-weight:700;margin-bottom:4px;margin-top:10px;padding-left:35px}.GPlayerInfoLink,.GPlayerInfoPopup{background-repeat:no-repeat;color:#999;cursor:pointer;line-height:20px;overflow-x:hidden;padding-left:23px;text-overflow:ellipsis;white-space:nowrap}.GPlayerInfoLink{background-position:0 -20px}.GPlayerInfoLink:hover,.GPlayerInfoPopup:hover{color:#333}.GPlayerInfoLink a,.GPlayerInfoLink a:visited + */#GPmapLoading{display:none;height:50px;left:50%;margin-left:-25px;margin-top:-25px;position:absolute;top:50%;width:50px;z-index:50}#GPmapLoading.GPmapLoadingVisible{display:block}#GPmapLoading{background-image:url(data:image/gif;base64,R0lGODlhNAA0AIQSAAFkpSZ5sAGV3k2Ruiao3kOj1/GUBk225pe/B4S83XrK75HH3qrS5szMzNbW1sHe797e3ubm5v///////////////////////////////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAQAfACwAAAAANAA0AAAF5uAnjmRpnmiqrmzrvnAsz3T9FXhh72Ke8zWfDzgT/ogxIw55cjgiJ6XOhKjaII1sNio8Vb8ImnbMXVLBVhl2vI2hvzIHOwt9veGxyLwhu4dlcw59bzVjgjNoPHU2f0yOj5CRkpMocg2HjwaaBitzmZuaKWuGTKCgKHt8SKabqHulrJwno1qYQLGyJ56OrCuWtrChlMPExcbHH4s1ymK1NJZtM4Fxu3mvMXvMLdBj2ip60zG0WoBzENLVJL+66TDj7GQmbOc1EE9N4SURDvSRqcgj/gH8wC0LsGPtAK7pN7Chw4cQSYQAACH5BAUBAB8ALBYABAAaACcAAAVw4PdBTQOJaKquX+k2bJw6b+nIcu3isV7yLFrttioYczWWcVmICYkq5hKolB6pKOsUm9Vyu9JvKiyOls/otHqNQ7gR6ff7LJeX63Mx3n3f0+txeWyDhIVlBmsGiopoi45njo9fkZKTlIhil42RaYsxIQAh+QQFAQAfACwWAAkAGgAnAAAFdOAnjmQZOVCprmTjuikrf289y/Ub32SUuw6e6teICEuO31GVfC1Zxqd0Sq1arYVsAavNUrvdKVgrHm+l5jMazPVe3/C4/IN4I+73Kn5P3fOffn+AgXUqBocGK4QriIiKfoaNjip4LJKTT5eHU5qJnJJWjVUhACH5BAUBAB8ALAkAFgAnABoAAAV04CeOZGmepdM0Duq+5yo3cO2qcwPZPJnLveBvFezhZrsi76cM4lrNqHRKrVpPhmoBZuh2o4VwGOUtK8VoU9lcRKdJazbP/R7Fv236tnQ/If4IJ3pYa36Af4JuLl6Gh4gmYlKOgFclk4+VIpeBmSOTnZaUTSEAIfkEBQEAHwAsBAAWACcAGgAABXfg9xmkIZ5oqq5rWbJwnLqubLP0e+9nTvJAnwnIyxGJtaNyyWw6n1Ao4hmRIa7XpaPBbbCw4OO2y1WBw0Ryt4o6o3cRNdeRcmfTcojZvSr4CytyXntvKH9/gWR6X3cph4crEQ6LSo+IUYaWgJgnmpucIpagjpc3IQAh+QQFAQAfACwEAAkAGgAnAAAFb+AnjqJhkmiamqyhvmjLwrA806p946Tu8isbMNca1ozIpHLJTCKeiCYUupxOlVaqMxvdZqtWqbZJLpvPyEK5wGYz23AlPJ6c0412t9yucjQaDi98KX+FDTBtfYZ/gUmLhUqPf0p+i42Oi00QfxAiIQAh+QQFAQAfACwEAAQAGgAnAAAFc+AnjmRZGqhhrmyasrDounE7o/V64yvi6zuTb4gA0oTEn+lYSg5zSGcROpJOqVUntknc9rzgsHhMLhXOhTEaHV6vwW62N36G09tutbzM7/v/JhFlDYQNDmKFhYdeEYmFYA6OhIJbEJINYZdhlolkEA6UUCEAIfkEAQEAHwAsBAAEACcAGgAABXXgJ45kWSIoYq5sS6apK8swPN9mHeP8p6O9UmG4+qlMhmRryCwUa6uk1LBqMp9A5FQptBKDW2nX6+SFxSRyuXemjpvBz5lljYu2srX9vu/7/4CBgh8NhQ6DK4WKDYgkEIuGjSKQipKElIySj5CHlpSWIw6RoCEAOw==)}.GPwidget{color:#333;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:13px;pointer-events:auto;position:absolute}.GPwidget input[type=button],.GPwidget input[type=text]{-webkit-appearance:none;appearance:none;color:#333}.GPwidget input[type=checkbox]{display:none}.GPwidget select{border-radius:3px;padding-left:3px}.GPwidget form{margin-bottom:0}.GPwidget *{background-repeat:no-repeat;box-sizing:border-box}:root{--size-per-row:32px}#position-container-bottom-left,#position-container-bottom-right,#position-container-top-left,#position-container-top-right{border-style:solid;display:flex;flex-direction:column;justify-content:center;min-height:var(--size-per-row);position:absolute;width:var(--size-per-row)}#position-container-top-left,#position-container-top-right{top:0}#position-container-top-left{float:left;left:0}#position-container-top-right{float:right;right:0}#position-container-bottom-left,#position-container-bottom-right{bottom:0}#position-container-bottom-right{float:right;right:0}#position-container-bottom-left{float:left;left:0}.GPpanel{background-color:#fff;border:unset;border-radius:4px;box-shadow:0 0 6px #000;padding:unset}.GPpanelHeader{background-color:#9db1bd;border-top-left-radius:4px;border-top-right-radius:4px;height:32px;padding:3px;position:relative;width:100%}.GPpanelTitle{background-color:#366291;border-top-left-radius:2px;border-top-right-radius:2px;color:#fff;font-weight:700;height:100%;line-height:26px;text-align:center;width:100%}.GPpanelClose,.GPpanelIcon,.GPpanelInfo,.GPpanelReduce,.GPresetPicto,.GPreturnPicto{background-color:#366291;border:none;cursor:pointer;height:26px;position:absolute;width:26px}.GPpanelClose{background-position:-27px 0;right:3px;top:3px}.GPpanelInfo,.GPreturnPicto{left:3px;top:3px}.GPpanelReduce{right:32px;top:3px}.GPresetPicto,.GPreturnPicto{border-radius:3px;opacity:1}.GPshowAdvancedToolPicto{background-color:hsla(0,0%,100%,.4);border:2px solid hsla(0,0%,100%,.4);border-radius:4px;box-sizing:border-box;cursor:pointer;height:32px;padding:2px;position:relative;width:32px}.GPshowAdvancedToolPicto:hover{background-color:hsla(0,0%,100%,.6)}.GPshowAdvancedToolOpen{background-color:rgba(0,60,136,.5);border-radius:2px;box-sizing:border-box;display:block;height:26px;position:absolute;width:26px}.GPshowAdvancedToolPicto:hover .GPshowAdvancedToolOpen{background-color:rgba(0,60,136,.7)}.GPshowOpen{background-color:rgba(0,60,136,.5)}.GPshowOpen:hover{background-color:rgba(0,60,136,.7)}.GPwaitingContainer{background-color:hsla(0,0%,100%,.9);border-radius:4px;bottom:0;font-size:1.5em;font-weight:700;left:0;overflow:hidden;position:absolute;right:0;top:32px}.GPwaitingContainerVisible{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex}.GPwaitingContainerHidden{display:none}.GPwaitingContainerInfo{margin:auto}.GPflexInput{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;transition:max-height .3s ease-out,opacity .3s ease-out}.GPflexInput>*{border:1px solid #999;border-radius:0;display:block;height:28px;line-height:26px}.GPflexInput :not(:last-child){border-right:none}.GPflexInput :first-child{border-radius:3px 0 0 3px}.GPflexInput :last-child{border-radius:0 3px 3px 0}.GPflexInput>:not(input){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.GPflexInput>input{min-width:0;padding:0 5px}.GPflexInput>input,.GPflexInput>select{-webkit-flex:1;-webkit-box-flex:1;-ms-flex:1;flex:1}.GPflexInput>select{padding-right:7px}.GPflexInput>label{background-color:#f2f2f2;color:#666;cursor:pointer;padding-left:7px;padding-right:9px}input.GPsubmit{background:none;background-color:#366291;border:none;border-radius:3px;color:#fff;cursor:pointer;display:block;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-weight:700;height:28px;line-height:26px;margin:auto;opacity:.8;padding:0;transition:opacity .2s ease-out;width:80px}input.GPsubmit:hover{opacity:1}.GPselect{border:1px solid #999;color:#333;cursor:pointer;display:block;height:28px;line-height:26px;margin:auto}.GPform{padding:15px}.GPelementHidden,.GPelementInvisible{display:none;opacity:0;visibility:hidden}.GPelementShow,.GPelementVisible{display:block;opacity:100%;visibility:visible}.GPadvancedAutoCompleteList,.GPautoCompleteList{z-index:2}.GPadvancedAutoCompleteList{border-top:none;font-size:.9em;width:calc(100% - 28px)}.GPautoCompleteProposal{color:#5e5e5e;cursor:pointer;font-size:1em;height:28px;line-height:16px;margin-bottom:0;overflow:hidden;padding:6px 10px;text-overflow:ellipsis;white-space:nowrap;width:100%}.GPautoCompleteProposal:hover{background-color:#cedbef;color:#000}.GPshowMoreOptionsImage{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAA7ElEQVRIx+3UvUoDQRSG4ffMLhbaLIEFvQSxtN1ALiGymkswpZVoupS6Vt6BYBMWf+s0Kaa1FG9BEBYbDQRnj4UKqTRgtjtPeWaYb4YPBowxpmmyyKbs6PpJVCfVan3wOOzN5te2huVK692dq0jHn+abf53lFrqWMlKRfjKNxu1Bmf6M24MyTabRWEX6KKOlvRAgO77ZQ/UCqBDXdSqzmnAPbKDs+yK/XGrgV+jtNlrfAcn36BVxXX+y89BYh+kbrQ+JrgBiDbsva1SNdhhigi/yzBd5FmKCdfivQIDOYbk+3+HkrPds35kx5lef+y50/JHC/FoAAAAASUVORK5CYII=)}.GPshowMoreOptions{cursor:pointer;display:block;height:28px;position:absolute;transition:all .5s ease-out 0s;width:28px}button[aria-pressed=true].GPshowMoreOptions,input[type=checkbox]:checked+.GPshowMoreOptions{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.gp-feature-info-div{background-color:#fff;border-radius:10px;bottom:17px;box-shadow:0 0 5px #000;color:#002a50;font-family:Open Sans,sans-serif;font-size:.75em;max-width:calc(100vw - 80px);padding:10px;position:relative}.gp-feature-info-div:before{border-left:14px solid transparent;border-right:14px solid transparent;border-top:15px solid #fff;bottom:-15px;content:"";left:50%;margin-left:-14px;position:absolute}.gp-feature-info-div .closer{background-color:#fff;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwYjc5OCIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:14px 14px;border:none;border-bottom-right-radius:10px;border-top-right-radius:10px;cursor:pointer;display:block;height:30px;position:absolute;right:0;top:0;width:30px}.gp-features-content-div{max-height:340px;max-width:420px;min-width:260px;overflow:auto}.gp-features-content-div h5,.gp-features-content-div h6,.gp-features-content-div p,.gp-features-content-div ul{margin:0}.gp-features-content-div ul{list-style-type:none;padding:0}.geoportail-popup-content h5,.geoportail-popup-content h6,.geoportail-popup-content p,.gp-att-description-div,.gp-att-name-div,.gp-att-others-div{padding:0 10px}.geoportail-popup-content h5:not(:last-child),.geoportail-popup-content h6:not(:last-child),.geoportail-popup-content p:not(:last-child),.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){margin-bottom:15px}.geoportail-popup-content h5:last-child,.geoportail-popup-content h6:last-child,.geoportail-popup-content p:last-child,.gp-att-description-div:last-child,.gp-att-name-div,.gp-att-others-div:last-child{margin-bottom:10px}.geoportail-popup-content h5:first-child,.geoportail-popup-content h6:first-child,.geoportail-popup-content p:first-child,.gp-att-description-div:first-child,.gp-att-name-div:first-child,.gp-att-others-div:first-child{margin-top:10px}.gp-att-name-div,.gp-features-content-div h5{color:#0b6ba7;font-size:1.2em;font-weight:700;padding-right:35px;text-transform:uppercase}.gp-features-content-div h6{font-size:1.1em}.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){border-bottom:1px dotted #666;padding-bottom:10px}.gpf-radio-btn-group{display:flex;gap:1em}.gpf-btn-icon{caret-color:transparent}[id^=GPdrawingPanel-]{width:240px}.GPshowDrawingPicto{background-position:1px;background-repeat:no-repeat}.GPdrawingPanelClose,.GPshowDrawingPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGCSURBVFiF7da/Sh1BFMfxuXZa2AuWgkoa0SqP4StoUoi2PklyBZXUNlpZWGmq5AmiYghpAv5pAoKW+rFwFq/D3NXdu5fb7K9ahjPnd757Zs9OCK1atWrVlDCHvzjB5KjrGVg49aKfdaHwGdsYK4np4As26lf8diF7XqsyVIR5iPt3c1AR5muMeWwUCrM4wwEmcZhAHVfM1032b6GTwGwlMd0mYS57Eh9loP5UzFkcpV7tYizpTKGdXBebgEmh9vALczVy94NKuzd0mEL7DXjkoEYCA+cDG4VSqOywyKk0CLMhhO8hhKmSsOsQwvL7y35TnXeuVRMm8Bu3JZ25UuOb6eOXGwC1utTPYBXfsIT/GYMbfBgizE5mrT6U5+vMYnz+mHTqCvNDhinGdnakVzWZxj1metYKqMZgYt7h/1ixGTf+wwwWPB+/iyZhotcnL1ef7GhOOvWI9aomP3rexl08fisYb4zktd9a7FTfaRahulirY3AZoTYxPVC1rVq1ajVKPQEmCKhvk/LblAAAAABJRU5ErkJggg==)}.GPdrawingCoords,.GPdrawingLabel{display:inline-block;line-height:20px}.GPdrawingLabel{font-weight:700;width:80px}.GPdrawingCoords{width:110px}.marker-input-radio{display:none}input.marker-input-radio:checked+label{border:1px solid red}.drawing-tool{background-color:#e9edf0;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MjAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA3MjAgNDAiPjxkZWZzPjxjbGlwUGF0aCBpZD0iYiI+PHBhdGggZD0iTTAgODk2aDg5NlYwSDBaIi8+PC9jbGlwUGF0aD48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGQ9Ik0wIDg5Nmg4OTZWMEgwWiIvPjwvY2xpcFBhdGg+PC9kZWZzPjxwYXRoIGQ9Im04Ny40MyAzMi41MjYgNS0xNSAxNSAxMCA1LTIwIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDBiNzk4O3N0cm9rZS13aWR0aDoyIi8+PHBhdGggZD0iTTg1Ljk0MiAzMC4wNjJ2NGg0di00em00LjgyMy0xNC4xMTZ2NGg0di00em0xNC41MjUgOS4xNzJ2NGg0di00em00Ljc3LTE5LjE4djRoNHYtNHoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNlOWVkZjA7c3Ryb2tlLXdpZHRoOjEuNSIvPjxwYXRoIGQ9Im0xMjcuNDMgMzIuNTI2IDUtMTUgMTUgMTAgNS0yMCIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZmZjtzdHJva2Utd2lkdGg6MiIvPjxwYXRoIGQ9Ik0xMjUuOTQgMzAuMDYydjRoNHYtNHptNC44My0xNC4xMTZ2NGg0di00em0xNC41MiA5LjE3MnY0aDR2LTR6bTQuNzctMTkuMTh2NGg0di00eiIgc3R5bGU9ImZpbGw6I2ZmZjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMmE1MDtzdHJva2Utd2lkdGg6MS41Ii8+PGcgc3R5bGU9ImZpbGw6IzAwYjc5ODtmaWxsLXJ1bGU6ZXZlbm9kZCI+PHBhdGggZD0ibTE2OC4zMSAyOS45MzggMy0xOS44NzUgMTQuNzUtMyA1IDI1Ljg3NXoiIHN0eWxlPSJmaWxsLW9wYWNpdHk6LjQ7c3Ryb2tlOiMwMGI3OTg7c3Ryb2tlLXdpZHRoOjIiLz48cGF0aCBkPSJNMTgzLjk0IDUuMDYzdjRoNHYtNHptLTE0Ljc1IDMuMjV2NGg0di00em0tMi44OCAxOS42MjV2NGg0di00em0yMy4zOCAzdjRoNHYtNHoiIHN0eWxlPSJzdHJva2U6I2U5ZWRmMDtzdHJva2Utd2lkdGg6MS41Ii8+PC9nPjxnIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQiPjxwYXRoIGQ9Im0yMDguMzEgMjkuOTM4IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbC1vcGFjaXR5Oi40O3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDoyIi8+PHBhdGggZD0iTTIyMy45NCA1LjA2M3Y0aDR2LTR6bS0xNC43NSAzLjI1djRoNHYtNHptLTIuODggMTkuNjI1djRoNHYtNHptMjMuMzggM3Y0aDR2LTR6IiBzdHlsZT0ic3Ryb2tlOiMwMDJhNTA7c3Ryb2tlLXdpZHRoOjEuNSIvPjwvZz48cGF0aCBkPSJtMjYxLjgxIDMwLjc0LTEuNTUzLTUuMDk4aC03LjgwN2wtMS41NTMgNS4wOThoLTQuODkzbDcuNTYtMjEuNTA0aDUuNTVsNy41OSAyMS41MDR6bS0yLjYzNy04LjkwNnEtMi4xNTMtNi45My0yLjQzLTcuODM3LS4yNjUtLjkwOC0uMzgyLTEuNDM2LS40ODMgMS44NzYtMi43NjggOS4yNzR6IiBzdHlsZT0iZmlsbDojMDBiNzk4Ii8+PGcgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwYjc5OCI+PHBhdGggZD0iTTI3MS41IDMxLjA0di0yMiIvPjxwYXRoIGQ9Ik0yNjkgOC41Nmg1bS01IDIyLjg4aDUiIHN0eWxlPSJzdHJva2Utd2lkdGg6MS4xMTgwMDAwMyIvPjwvZz48dGV4dCB4PSIyODYiIHk9IjMwLjc1MiIgZm9udC1zaXplPSIxMi41IiBsZXR0ZXItc3BhY2luZz0iMCIgc3R5bGU9ImZvbnQtc2l6ZToxMi41cHg7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowO3dvcmQtc3BhY2luZzowO2ZpbGw6I2ZmZiIgd29yZC1zcGFjaW5nPSIwIj4KICAgIDx0c3BhbiB4PSIyODYiIHk9IjMwLjc1MiIgZm9udC1zaXplPSIzMCIgZm9udC13ZWlnaHQ9ImJvbGQiIHN0eWxlPSJmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjMwcHg7Zm9udC1mYW1pbHk6JnF1b3Q7T3BlbiBTYW5zJnF1b3Q7Ij5BPC90c3Bhbj4KICA8L3RleHQ+PGcgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZmZiI+PHBhdGggZD0iTTMxMS41IDMxLjA0di0yMiIvPjxwYXRoIGQ9Ik0zMDkgOC41Nmg1bS01IDIyLjg4aDUiIHN0eWxlPSJzdHJva2Utd2lkdGg6MS4xMTgwMDAwMyIvPjwvZz48cGF0aCBkPSJtMzU2LjY0IDIxLjc4Mi0zLjQxNi0zLjQxNGExLjIxIDEuMjEgMCAwIDAtMS43MDggMGwtLjg1NC44NTRjLS40Ny40Ny0uNDcgMS4yMzUgMCAxLjcwNmwzLjQxNiAzLjQxNGExLjIxIDEuMjEgMCAwIDAgMS43MDggMGwuODU0LS44NTNhMS4yMDcgMS4yMDcgMCAwIDAgMC0xLjcwOG0tMTAuNzE0IDEwLjkzYy0uMDA1IDAtLjAxMi4wMS0uMDIuMDEzLS4wMDQgMC0uMDEuMDEtLjAxNC4wMS0uMDA1IDAtLjAxLjAxLS4wMTYuMDEtLjAwNSAwLS4wMS4wMS0uMDE3LjAxLS4yLjEyLS43ODMuNDI1LTIuMi45MzdxLS4yNDkuMDktLjUzNC4xOWwtMi4wMTQtMi4wMTNjLjA2Ni0uMTkuMTMtLjM3My4xOS0uNTQuNTEtMS40Mi44MTgtMi4wMDQuOTM2LTIuMjAyLjAwMyAwIC4wMDYtLjAxLjAwOC0uMDEzLjAwNC0uMDEuMDA4LS4wMTMuMDEyLS4wMi4wMDMgMCAuMDA2LS4wMS4wMDgtLjAxMnEuMDA4LS4wMTMuMDEzLS4wMmwuMTQ2LS4xNDcgMy42NSAzLjY0Ny0uMTUuMTV6bTMuODgyLTEwLjkzYTEuMjEgMS4yMSAwIDAgMC0xLjcwOCAwbC0uNDI3LjQyNy01Ljk3NyA1Ljk3M2guMDAybC0uMTkuMTg4cy0uNi42MDUtMS45NTYgNC45NzZxLS4wMTUuMDQ0LS4wMjguMDkyLS4wMzcuMTE3LS4wNzQuMjQtLjAzLjEwNi0uMDY2LjIxNmwtLjA1Ni4xODYtLjEzLjQ0Yy0uMDk4LjMzLS4zMzYgMS4wNzQtLjA2NyAxLjM0My4yNi4yNiAxLjAxNC4wMyAxLjM0My0uMDY2bC40MzctLjEzLjE5NC0uMDZxLjEwNC0uMDMuMjA1LS4wNjJsLjI1LS4wNzdxLjAzOC0uMDEzLjA3My0uMDIzYzQuMTY2LTEuMjk1IDQuOTE0LTEuOTAzIDQuOTc2LTEuOTZoLjAwNGwuMTkzLS4xOTIuMDEyLjAxMyA1Ljk3Ny01Ljk3NC40MjctLjQyN2ExLjIwNiAxLjIwNiAwIDAgMCAwLTEuNzA3bC0zLjQxNi0zLjQxNHoiIHN0eWxlPSJmaWxsOiMwMGI3OTgiLz48cGF0aCBkPSJtMzI5IDgtMiAydjE2bDIgMmgxMGw4LThWMTBsLTItMnoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQiLz48ZyBzdHlsZT0iZmlsbDojZmZmIj48cGF0aCBkPSJtMzk2LjY0IDIxLjc4Mi0zLjQxNi0zLjQxNGExLjIxIDEuMjEgMCAwIDAtMS43MDggMGwtLjg1NC44NTRjLS40Ny40Ny0uNDcgMS4yMzUgMCAxLjcwNmwzLjQxNiAzLjQxNGExLjIxIDEuMjEgMCAwIDAgMS43MDggMGwuODU0LS44NTNhMS4yMDcgMS4yMDcgMCAwIDAgMC0xLjcwOG0tMTAuNzE0IDEwLjkzYy0uMDA1IDAtLjAxMi4wMS0uMDIuMDEzLS4wMDQgMC0uMDEuMDEtLjAxNC4wMS0uMDA1IDAtLjAxLjAxLS4wMTYuMDEtLjAwNSAwLS4wMS4wMS0uMDE3LjAxLS4yLjEyLS43ODMuNDI1LTIuMi45MzdxLS4yNDkuMDktLjUzNC4xOWwtMi4wMTQtMi4wMTNjLjA2Ni0uMTkuMTMtLjM3My4xOS0uNTQuNTEtMS40Mi44MTgtMi4wMDQuOTM2LTIuMjAyLjAwMyAwIC4wMDYtLjAxLjAwOC0uMDEzLjAwNC0uMDEuMDA4LS4wMTMuMDEyLS4wMi4wMDMgMCAuMDA2LS4wMS4wMDgtLjAxMnEuMDA4LS4wMTMuMDEzLS4wMmwuMTQ2LS4xNDcgMy42NSAzLjY0Ny0uMTUuMTV6bTMuODgyLTEwLjkzYTEuMjEgMS4yMSAwIDAgMC0xLjcwOCAwbC0uNDI3LjQyNy01Ljk3NyA1Ljk3M2guMDAybC0uMTkuMTg4cy0uNi42MDUtMS45NTYgNC45NzZxLS4wMTUuMDQ0LS4wMjguMDkyLS4wMzcuMTE3LS4wNzQuMjQtLjAzLjEwNi0uMDY2LjIxNmwtLjA1Ni4xODYtLjEzLjQ0Yy0uMDk4LjMzLS4zMzYgMS4wNzQtLjA2NyAxLjM0My4yNi4yNiAxLjAxNC4wMyAxLjM0My0uMDY2bC40MzctLjEzLjE5NC0uMDZxLjEwNC0uMDMuMjA1LS4wNjJsLjI1LS4wNzdxLjAzOC0uMDEzLjA3My0uMDIzYzQuMTY2LTEuMjk1IDQuOTE0LTEuOTAzIDQuOTc2LTEuOTZoLjAwNGwuMTkzLS4xOTIuMDEyLjAxMyA1Ljk3Ny01Ljk3NC40MjctLjQyN2ExLjIwNiAxLjIwNiAwIDAgMCAwLTEuNzA3bC0zLjQxNi0zLjQxNHoiIHN0eWxlPSJzdHJva2U6I2VmZjtzdHJva2Utd2lkdGg6LjAzIi8+PHBhdGggZD0ibTM2OSA4LTIgMnYxNmwyIDJoMTBsOC04VjEwbC0yLTJ6bTkxLjUzIDE1Ljk3Yy0zLjE2IDEuNjMtMS4xNTcgNS41MzQtNC43NCA2LjgwMy0zLjc2MyAxLjMzNC02Ljg5Mi0zLjQ5Mi03LjY3Ni02Ljk2My0uMy0xLjMzMy0uOTItMTIuMzE0IDExLjEzOC0xNC41OTMgOS40MDctMS43NzggMTIuNjU3IDcuODU0IDEyLjcyIDEwLjg5LjA1OCAyLjg5LjM3IDkuMDQtNC40NCA4Ljk2Mi00LjA2LS4wNjYtMy4yMDMtNC4wNjQtNi44OC01LjAzOC0xLjk1Ni0uNTE4LS4xMjItLjA2Mi0uMTIyLS4wNjJ6IiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQiLz48L2c+PGVsbGlwc2UgY3g9IjQ1NC4xOSIgY3k9IjI0LjgxMiIgcng9IjIuNDM4IiByeT0iMi41IiBzdHlsZT0iZmlsbDojMDAyYTUwIi8+PGcgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMmE1MDtzdHJva2Utd2lkdGg6MS43MzU5OTk5NDtzdHJva2UtbGluZWNhcDpyb3VuZCI+PHBhdGggZD0ibTQ1Mi43OCAxOC41NCA0LjM0LTIuNjA0bS0zLjQ4Ljg3NCAyLjYwNC0xLjczNm0tMS43MzQgMy40NjYgMS43MzYtLjg2OE00NjEuNDcgMTcuMTNsNC4zNC0yLjYwNG0tMy40Ny44NjQgMi42MDQtMS43MzZtLTEuNzM0IDMuNDc2IDEuNzM2LS44NjhNNDY0LjkxIDIzLjIybDQuMzQtMi42MDRtLTMuNDguODY0IDIuNjA0LTEuNzM2bS0xLjczNCAzLjQ3NiAxLjczNi0uODY4Ii8+PC9nPjxwYXRoIGQ9Ik00MjAuNTMgMjMuOTdjLTMuMTYgMS42My0xLjE1NyA1LjUzNC00Ljc0IDYuODAzLTMuNzYzIDEuMzM0LTYuODkyLTMuNDkyLTcuNjc2LTYuOTYzLS4zLTEuMzMzLS45Mi0xMi4zMTQgMTEuMTM4LTE0LjU5MyA5LjQwNy0xLjc3OCAxMi42NTcgNy44NTQgMTIuNzIgMTAuODkuMDU4IDIuODkuMzcgOS4wNC00LjQ0IDguOTYyLTQuMDYtLjA2Ni0zLjIwMy00LjA2NC02Ljg4LTUuMDM4LTEuOTU2LS41MTgtLjEyMi0uMDYyLS4xMjItLjA2MnoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQiLz48ZWxsaXBzZSBjeD0iNDE0LjE5IiBjeT0iMjQuODEyIiByeD0iMi40MzgiIHJ5PSIyLjUiIHN0eWxlPSJmaWxsOiNlOWVkZjAiLz48ZyBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZWRlZmYwO3N0cm9rZS13aWR0aDoxLjczNTk5OTk0O3N0cm9rZS1saW5lY2FwOnJvdW5kIj48cGF0aCBkPSJtNDEyLjc4IDE4LjU0IDQuMzQtMi42MDRtLTMuNDguODc0IDIuNjA0LTEuNzM2bS0xLjczNCAzLjQ2NiAxLjczNi0uODY4TTQyMS40NyAxNy4xM2w0LjM0LTIuNjA0bS0zLjQ3Ljg2NCAyLjYwNC0xLjczNm0tMS43MzQgMy40NzYgMS43MzYtLjg2OE00MjQuOTEgMjMuMjJsNC4zNC0yLjYwNG0tMy40OC44NjQgMi42MDQtMS43MzZtLTEuNzM0IDMuNDc2IDEuNzM2LS44NjgiLz48L2c+PGcgY2xpcC1wYXRoPSJ1cmwoI2EpIiBzdHlsZT0iZmlsbDojMDBiNzk4IiB0cmFuc2Zvcm09Im1hdHJpeCguMDI5NzYgMCAwIC0uMDI5MDIgNi42NjcgMzMpIj48cGF0aCBkPSJNNDQ4IDQ0OGMtNjEuNzcyIDAtMTEyIDUwLjIzLTExMiAxMTJzNTAuMjI4IDExMiAxMTIgMTEyYzYxLjc3IDAgMTEyLTUwLjIzIDExMi0xMTJzLTUwLjIzLTExMi0xMTItMTEybTAgNDQ4Yy0xODUuMjggMC0zMzYtMTUwLjcyLTMzNi0zMzYgMC03MC41ODcgMjEuOTU4LTEzOC4zIDYzLjQyNC0xOTUuODlsOC44MTgtMTIuMzYgMjQxLjM2LTM0MC41NEM0MzAuODk4IDQuMTYgNDM5LjIxMiAwIDQ0OC4wMDIgMGEyOC4wMyAyOC4wMyAwIDAgMSAyMi4zOTQgMTEuMjFsMjM4LjM2IDMzNi40OSAxMS43NiAxNi4zYzQxLjUzIDU3LjY5NyA2My40OSAxMjUuNDEgNjMuNDkgMTk2IDAgMTg1LjI4LTE1MC43MiAzMzYtMzM2IDMzNiIvPjwvZz48ZyBjbGlwLXBhdGg9InVybCgjYikiIHN0eWxlPSJmaWxsOiNmZmYiIHRyYW5zZm9ybT0ibWF0cml4KC4wMjk3NiAwIDAgLS4wMjkwMiA0Ni42NjcgMzMpIj48cGF0aCBkPSJNNDQ4IDQ0OGMtNjEuNzcyIDAtMTEyIDUwLjIzLTExMiAxMTJzNTAuMjI4IDExMiAxMTIgMTEyYzYxLjc3IDAgMTEyLTUwLjIzIDExMi0xMTJzLTUwLjIzLTExMi0xMTItMTEybTAgNDQ4Yy0xODUuMjggMC0zMzYtMTUwLjcyLTMzNi0zMzYgMC03MC41ODcgMjEuOTU4LTEzOC4zIDYzLjQyNC0xOTUuODlsOC44MTgtMTIuMzYgMjQxLjM2LTM0MC41NEM0MzAuODk4IDQuMTYgNDM5LjIxMiAwIDQ0OC4wMDIgMGEyOC4wMyAyOC4wMyAwIDAgMSAyMi4zOTQgMTEuMjFsMjM4LjM2IDMzNi40OSAxMS43NiAxNi4zYzQxLjUzIDU3LjY5NyA2My40OSAxMjUuNDEgNjMuNDkgMTk2IDAgMTg1LjI4LTE1MC43MiAzMzYtMzM2IDMzNiIvPjwvZz48cGF0aCBkPSJtNjExLjkzIDExLjkzIDE2LjE0OCAxNi4xNDhtLS4wMDgtMTYuMTQ4LTE2LjE0OCAxNi4xNDgiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZmY7c3Ryb2tlLXdpZHRoOjMuODEzOTk5ODk7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIi8+PHBhdGggZD0ibTU3MS45MyAxMS45MyAxNi4xNDggMTYuMTQ4bS0uMDA4LTE2LjE0OC0xNi4xNDggMTYuMTQ4IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDBiNzk4O3N0cm9rZS13aWR0aDozLjgxMzk5OTg5O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZCIvPjxwYXRoIGQ9Im00ODcgMzAuMDQgMS4wMDQtNkw0OTMgMjkuMDN6IiBzdHlsZT0iZmlsbDojMDBiNzk4O2ZpbGwtcnVsZTpldmVub2RkIi8+PGcgc3R5bGU9ImZpbGw6IzAwYjc5OCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQ4IC05NzIuMzYpIj48Y2lyY2xlIGN4PSI1NDEiIGN5PSI5ODcuMzYiIHI9IjUiLz48Y2lyY2xlIGN4PSI1NTUiIGN5PSI5ODcuMzYiIHI9IjUiLz48Y2lyY2xlIGN4PSI1NTUiIGN5PSI5OTYuMzYiIHI9IjUiLz48cmVjdCB3aWR0aD0iMTQiIGhlaWdodD0iMTEiIHg9IjU0MSIgeT0iOTgyLjM2IiByeD0iMCIgcnk9IjAiLz48cGF0aCBkPSJNNTUwIDk4Ny4zNmgxMHY5aC0xMHoiLz48cGF0aCBkPSJNNTQ0IDk5My4zNmgxMXY4aC0xMXptLTgtNmg3djZoLTd6Ii8+PHBhdGggZD0ibTUzNiA5OTMuMzYgOCA4di04eiIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkIi8+PC9nPjxwYXRoIGQ9Ik00OTMgMTRoMTV2MWgtMTV6bTAgNGgxNXYxaC0xNXptMyA0aDEydjFoLTEyeiIgc3R5bGU9ImZpbGw6I2VkZWZmMCIvPjxwYXRoIGQ9Im01MjcgMzAgMS4wMDQtNkw1MzMgMjguOTl6IiBzdHlsZT0iZmlsbDojZmZmO2ZpbGwtcnVsZTpldmVub2RkIi8+PGcgc3R5bGU9ImZpbGw6I2ZmZiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTggLTk3Mi4zNikiPjxjaXJjbGUgY3g9IjU0MSIgY3k9Ijk4Ny4zNiIgcj0iNSIvPjxjaXJjbGUgY3g9IjU1NSIgY3k9Ijk4Ny4zNiIgcj0iNSIvPjxjaXJjbGUgY3g9IjU1NSIgY3k9Ijk5Ni4zNiIgcj0iNSIvPjxyZWN0IHdpZHRoPSIxNCIgaGVpZ2h0PSIxMSIgeD0iNTQxIiB5PSI5ODIuMzYiIHJ4PSIwIiByeT0iMCIvPjxwYXRoIGQ9Ik01NTAgOTg3LjM2aDEwdjloLTEweiIvPjxwYXRoIGQ9Ik01NDQgOTkzLjM2aDExdjhoLTExem0tOC02aDd2NmgtN3oiLz48cGF0aCBkPSJtNTM2IDk5My4zNiA4IDh2LTh6IiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQiLz48L2c+PHBhdGggZD0iTTUzMyAxNGgxNXYxaC0xNXptMCA0aDE1djFoLTE1em0zIDRoMTJ2MWgtMTJ6IiBzdHlsZT0iZmlsbDojMDAyYTUwIi8+PHBhdGggZD0ibTY0OC45MjggMjkuNjM1IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbDojMDBiNzk4O2ZpbGwtb3BhY2l0eTouNDtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwYjc5ODtzdHJva2Utd2lkdGg6MiIvPjxnIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQiPjxwYXRoIGQ9Im0yMDguMzEgMjkuOTM4IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbC1vcGFjaXR5Oi40O3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDoyIiB0cmFuc2Zvcm09Im1hdHJpeCguNDg0NzYgMCAwIC40NTk4OSA1NTMuMjgzIDEwLjkzKSIvPjxwYXRoIGQ9Ik0yMjMuOTQgNS4wNjN2NGg0di00em0tMTQuNzUgMy4yNXY0aDR2LTR6bS0yLjg4IDE5LjYyNXY0aDR2LTR6bTIzLjM4IDN2NGg0di00eiIgc3R5bGU9InN0cm9rZTojMDAyYTUwO3N0cm9rZS13aWR0aDoxLjUiIHRyYW5zZm9ybT0ibWF0cml4KC40ODQ3NiAwIDAgLjQ1OTg5IDU1My4yODMgMTAuOTMpIi8+PC9nPjxwYXRoIGQ9Ik02NjEuODU1IDEzLjIxOHYxLjg0NmgxLjk0MXYtMS44NDZ6bS03LjE2IDEuNXYxLjg0N2gxLjk0MnYtMS44NDd6bS0xLjM5OCA5LjA1OXYxLjg0NmgxLjk0MnYtMS44NDZ6bTExLjM0OSAxLjM4NHYxLjg0N2gxLjk0MVYyNS4xNnoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNlOWVkZjA7c3Ryb2tlLXdpZHRoOi43MDk5OTU5MyIvPjxnIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQiPjxwYXRoIGQ9Im0yMDguMzEgMjkuOTM4IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbC1vcGFjaXR5Oi40O3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDoyIiB0cmFuc2Zvcm09Im1hdHJpeCguNDg0NzYgMCAwIC40NTk4OSA1OTEuMjgyIDEwLjk0NCkiLz48cGF0aCBkPSJNMjIzLjk0IDUuMDYzdjRoNHYtNHptLTE0Ljc1IDMuMjV2NGg0di00em0tMi44OCAxOS42MjV2NGg0di00em0yMy4zOCAzdjRoNHYtNHoiIHN0eWxlPSJzdHJva2U6IzAwMmE1MDtzdHJva2Utd2lkdGg6MS41IiB0cmFuc2Zvcm09Im1hdHJpeCguNDg0NzYgMCAwIC40NTk4OSA1OTEuMjgyIDEwLjk0NCkiLz48L2c+PC9zdmc+);background-size:720px 40px;border:unset;border-radius:10px;cursor:pointer;display:block;height:40px;width:40px}.drawing-tool-active{background-color:#002a50}button[id^=drawing-tool-point-]{background-position:0 0}button[id^=drawing-tool-point-].drawing-tool-active{background-position:-40px 0}button[id^=drawing-tool-line-].drawing-tool-active{background-position:-120px 0}button[id^=drawing-tool-line-]{background-position:-80px 0}button[id^=drawing-tool-holes-]{background-position:-640px 0}button[id^=drawing-tool-holes-].drawing-tool-active{background-position:-680px 0}button[id^=drawing-tool-polygon-]{background-position:-160px 0}button[id^=drawing-tool-polygon-].drawing-tool-active{background-position:-200px 0}button[id^=drawing-tool-text-]{background-position:-240px 0}button[id^=drawing-tool-text-].drawing-tool-active{background-position:-280px 0}button[id^=drawing-tool-edit-]{background-position:-320px 0}button[id^=drawing-tool-edit-].drawing-tool-active{background-position:-360px 0}button[id^=drawing-tool-display]{background-position:-400px 0}button[id^=drawing-tool-display-].drawing-tool-active{background-position:-440px 0}button[id^=drawing-tool-tooltip]{background-position:-480px 0}button[id^=drawing-tool-tooltip-].drawing-tool-active{background-position:-520px 0}button[id^=drawing-tool-remove]{background-position:-560px 0}button[id^=drawing-tool-remove-].drawing-tool-active{background-position:-600px 0}div.drawing-tools-flex-display{justify-content:space-between}button[id^=drawing-export-]{background-position:2px 0}.drawing-button{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMCAxMjAiPjxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwYjc5OCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjMiPjxwYXRoIGQ9Ik02ODggMzI2LjR2OGgyMHYtOG0tMTAtMTR2MTQiIHRyYW5zZm9ybT0ibWF0cml4KC42MDg2IDAgMCAuNTU5NSAtNDA5LjggLTEzNikiLz48cGF0aCBkPSJtNjkzIDMyMS40IDUgNSA1LTUiIHRyYW5zZm9ybT0ibWF0cml4KC42MDg2IDAgMCAuNTU5NSAtNDA5LjggLTEzNikiLz48L2c+PGcgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUwNSAtODU3LjQpIj48cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxNCIgeD0iNTEzIiB5PSI5MjUuNCIgcng9IjAiIHJ5PSIwIi8+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iOCIgeD0iNTE0IiB5PSI5MjUuNCIgcng9IjAiIHJ5PSIwIi8+PHBhdGggZD0iTTUxNSA5MzAuNGgxdjNoLTF6bTEgMWg4djJoLTh6Ii8+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTQiIHg9IjUyNiIgeT0iOTI1LjQiIHJ4PSIwIiByeT0iMCIvPjxwYXRoIGQ9Ik01MjUgOTI1LjRoMXY4aC0xem0tMSA1aDF2M2gtMXptLTkgNGgxMHYyaC0xMHptNSAyaDV2M2gtNXptLTMgMWgydjJoLTJ6bS0yLTFoMXYzaC0xem00LTExaDV2NWgtNXptLTMgM2gzdjJoLTN6bTAtM2gxdjNoLTF6bTEgMGgydjFoLTJ6Ii8+PC9nPjxnIGZpbGw9IiMwMGI3OTgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01NDAgLTgyNy40KSI+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTQiIHg9IjU0OCIgeT0iOTI1LjQiIHJ4PSIwIiByeT0iMCIvPjxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjgiIHg9IjU0OSIgeT0iOTI1LjQiIHJ4PSIwIiByeT0iMCIvPjxwYXRoIGQ9Ik01NTAgOTMwLjRoMXYzaC0xem0xIDFoOHYyaC04eiIvPjxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjE0IiB4PSI1NjEiIHk9IjkyNS40IiByeD0iMCIgcnk9IjAiLz48cGF0aCBkPSJNNTYwIDkyNS40aDF2OGgtMXptLTEgNWgxdjNoLTF6bS05IDRoMTB2MmgtMTB6bTUgMmg1djNoLTV6bS0zIDFoMnYyaC0yem0tMi0xaDF2M2gtMXptNC0xMWg1djVoLTV6bS0zIDNoM3YyaC0zem0wLTNoMXYzaC0xem0xIDBoMnYxaC0yeiIvPjwvZz48ZyBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIzIj48cGF0aCBkPSJNNjg4IDMyNi40djhoMjB2LThtLTEwLTE0djE0IiB0cmFuc2Zvcm09Im1hdHJpeCguNjA4NiAwIDAgLjU1OTUgLTQwOS44IC0xNjYpIi8+PHBhdGggZD0ibTY5MyAzMjEuNCA1IDUgNS01IiB0cmFuc2Zvcm09Im1hdHJpeCguNjA4NiAwIDAgLjU1OTUgLTQwOS44IC0xNjYpIi8+PC9nPjwvc3ZnPg==);background-size:30px 120px;font-size:.7em;height:30px;line-height:30px;margin:auto;padding-left:30px;padding-right:15px}.tool-form-submit{background-color:#00b798;border:none;border-radius:20px;color:#fff;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:.9em;text-align:center;text-transform:uppercase}.gp-label-div,.gp-styling-div{background-color:#fff;border:unset;border-radius:10px;box-shadow:0 0 5px #000;box-sizing:border-box;font-size:.75em;position:relative;top:17px}.gp-label-div:before,.gp-styling-div:before{border-bottom:15px solid #fff;border-left:10px solid transparent;border-right:9px solid transparent;content:"";left:50%;margin-left:-10px;position:absolute;top:-15px}.gp-input-label-style,.gp-textarea-att-label-style{border:none}.gp-textarea-att-label-style{height:80px;resize:none;width:240px}.gp-input-measure-style{background-color:#fff;border-radius:10px;font-size:.75em;text-align:center;width:240px}.gp-textarea-att-label-style{display:block}.gp-label-div .closer{background-color:#fff;border-top-right-radius:10px}.gp-input-label-style{width:180px}.gp-label-div{padding:10px}.gp-styling-div{padding:50px 20px 20px;width:340px}.gp-styling-div:after{border-bottom:1px solid #bbb;content:"Modifier le style";display:block;font-size:1.2em;font-variant:small-caps;font-weight:700;height:30px;left:30px;line-height:30px;position:absolute;text-align:center;top:0;width:280px}.gp-label-div .gp-styling-button:not([class*=closer]){display:block;margin:10px auto auto}.gp-styling-button:not([class*=closer]){background-color:#00b798;border:none;border-radius:12px;color:#fff;display:inline-block;font-size:.9em;font-weight:700;height:24px;line-height:24px;margin-top:20px;text-align:center;text-transform:uppercase;width:140px}.gp-styling-button:not([class*=closer]):hover{background-color:#eef2f5;color:#00b798}.gp-styling-button:not([class*=closer])+.gp-styling-button:not([class*=closer]){margin-left:20px}.gp-label-div .closer,.gp-styling-div .closer{background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwYjc5OCIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:14px 14px;border:none;cursor:pointer;display:block;height:30px;position:absolute;right:0;top:0;width:30px}.gp-styling-option{font-size:11px;line-height:30px;padding:0 20px;position:relative}.gp-styling-option input{cursor:pointer;display:block;height:20px;padding:0;position:absolute;top:6px}.gp-styling-option input[type=checkbox]{background:none;border:none;height:10px;padding:0;right:70px}.gp-styling-option input[type=color]{background:none;border:none;padding:0;right:70px;width:30px}.gp-styling-option input[type=text]{background:none;border:1px solid grey;color:#0b6ba7;margin:none;padding:0 5px;right:40px;width:80px}.gp-styling-option input[type=range]{margin:0;right:40px;width:80px}.gp-styling-option input[type=range]:focus{box-shadow:none;outline:none}.gp-styling-option input[type=range]::-webkit-slider-runnable-track{-webkit-appearance:none;background-color:grey;height:1px}.gp-styling-option input[type=range]::-webkit-slider-thumb:before{height:1px;left:-200px;pointer-events:none;position:absolute;right:50%;top:0}.gp-styling-option input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background-color:#0b6ba7;border:none;border-radius:50%;height:13px;position:relative;top:-6px;width:13px}.gp-styling-option input[type=range]::-moz-range-track{background-color:grey;height:1px;width:70px}.gp-styling-option input[type=range]::-moz-range-thumb{background-color:#0b6ba7;border:none;border-radius:50%;box-shadow:0;height:13px;position:relative;width:13px}.gp-styling-option input[type=range]::-ms-track{background-color:grey;border:0;border-color:transparent;border-radius:0;border-width:0;color:transparent;height:1px;width:70px}.gp-styling-option input[type=range]::-ms-fill-lower,.gp-styling-option input[type=range]::-ms-fill-upper{background:transparent;border-radius:0}.gp-styling-option input[type=range]::-ms-thumb{background-color:#0b6ba7;border:none;border-radius:50%;height:13px;width:13px}.gp-styling-option input[type=range]::-ms-tooltip{display:none}.gp-styling-option .marker-input-radio{display:none}.gp-styling-option .marker-label{cursor:pointer;display:inline-block;height:32px;margin-bottom:5px;margin-right:5px;padding:3px}.gp-styling-option .marker-input-radio:checked+.marker-label{background-color:rgba(0,183,152,.5);border:1px solid #002a50;padding:2px}.gp-styling-option .marker-label img{height:24px}.ol-attribution .gp-control-attribution-image{max-height:30px;max-width:inherit;vertical-align:middle}.GPpanelHeader{padding:unset}[id^=GPelevationPathPanelClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAAAaCAYAAABb9hlrAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH4gEQEjITjE0MtwAABGJJREFUaN7tmU1oHGUYx//PZEvSLjHVBLVaerCXSgo5tAqxiqBSxcSLWqknFaNdaYjiwUMOVVGi2EORJg0xtgbx0FKVgmirRU17SUpjPsCVUhQtVOr6ES8mmpqdnwffhekw2dndbMK23T8MzMzzzsz7PP/3+ZjnlaqooooqrlhY7gSol3Rr7tLMTlfNs3gAJqnGncvMJMk3M7+Q5xOB8zsl9Ui6XtI/ktZXzVs6MpmMNTU1rZa0SdJNknLkSNI0MCrpTzPLFkSQmR0FspIGJb1UNXHpHjM3N9dUW1t7u6QHJW2V9KukPyQhqcEt/i8lHctms8Oe5/0WR5SAW4AfgWGgC1ixjEo9AwwAXj7Fgb1AZ6WSMzk56QGbgQPA98AUsBvYAKwCVgJrgV3AKeAccAi4f3x8vCbOSA8AB91xGEguIzlZ/sdgFEmOnF43xq9UkoBrgD7gZ+B13/c3u/uPAG8AbwEdkpTNZjcCLwJngE+AtYV8YEW+VbxESvVxKfa5xBokZ19oTF+lkTMzM+MB9wJngT0hHT8KzP2bkGwHcB54Ktb2wNtAb5EGbgAaFhOzXegKYhDwQp6TwzvLvYgK1CPpwtkZYEtI9iowCowBAyHZeuCEi1pr4j4yBBwscmK7gZ7FJtYFSOq7TMgx4A7gB6AvnU5bSF4H1LtjVVCWSqUMeN550eN59SuWIMf+HDAL3LwEJC0bOSPdCRvpTljwOiT3RroTdQvM3QPanYfcFiHvAj4GjgCvLWDHT4EX8hZnUQQBCRf6tkWMD8bW/WVaiVEkDZZKDmWCI6kmD0FtwNfAugXsetG96qsIeSPwfhRBXoxy10n6XFKXpEPAy7kEDtwl6eHA8CeA5nJ2N2LuxXrEEjiaX2a9YpHvv2ODpFOS7gl84BVHVFLSntAjNZLeXGRLZK+knRHipyUNFONFrT3zlDsExhjZJNVLuqGE16+W1BjX6rmk3JY06v56w9gmaUuufRFCO3C3mZ0oAzmDki4G7nXkytJC+lgj3Qlr7ZnHzIK5JW4V09ozz0h3Yo0zdJOk3yVlHOELkY6kaUnXSnoynU6PNTc3F7RAUqmUSWqX1CLpA0nZ2Bzkqo5ScbKEvBNZSucrwS+zMnsI+DcqB8WV2Uuh6Loix/eGPKdf0g4z880Ml//6A/IO520VhdnZ2b8lHXM2fTQkrg1Eq3AleJ/rzX0mKVNQiFtmTLjk67mw1umIyTVxAXY61+904eS7SiMomUz6wGlJxyU9BswARzzPG5P0oaSfXJ4+m2v1eJ63VdKzzgbHo0J3Ik9MPVfiXM8XVdqYvety3sYwOSGSuhyJ35pZfyX24qampv5qaWl5T9JKSdvN7CHgC0n7JR11dm0Edklqk3Sjy/UHJiYmLsSWfsCQpDoz264qSq5Gi9lu8H0/73ZDmKCTrpq4UI65SnrOzIavRqJyG3ae522KqHinnefEbtiFCWpzJXSmTD91h83sl6vdo7SILe8qqqiiiisY/wFFCbN/sRPwgwAAAABJRU5ErkJggg==);background-position:-27px;background-repeat:no-repeat}[id^=GPelevationPathProfil]{height:150px;width:inherit}[id^=GPelevationPathProfil]>#profileElevationByDefault>svg{left:10px;position:absolute}div[id^=GPelevationPathInformationsContainer]{background-color:hsla(0,0%,100%,.9);border-radius:4px;bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:32px}#profileElevationRaw{padding:unset;resize:none}#profileElevationByDefault{display:-webkit-flex;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%}.altiPathValue{font-weight:700;fill:#5e5e5e}.altiPathCoords{font-style:italic;fill:#5e5e5e}.axis-d3>text{fill:#5e5e5e;font-family:Verdana;font-size:10px;opacity:1;text-anchor:end}.axis-d3{fill:none;stroke:#5e5e5e;stroke-width:1;shape-rendering:crispEdges}.area-d3{fill:#c77a04;stroke:#5e5e5e;stroke-width:0;fill-opacity:.4}.line-d3{fill:none;stroke:#c77a04;stroke-width:1px}.grid-d3 .tick{stroke:#d3d3d3;opacity:.7}.grid-d3 path{stroke-width:0}.overlay-d3{fill:none;pointer-events:all}.focusLine-d3{fill:none;stroke:#c77a04;stroke-width:.5px}.focusCircle-d3{fill:#c77a04}div.tooltip-d3{background:#fff;border:0;border-radius:8px;font:8px sans-serif;height:45px;padding:5px;pointer-events:none;position:inherit;text-align:left;width:80px}[id^=GPelevationPathPanel-]{width:280px}[id^=GPelevationPathPanelInfo]{background-position:-75px}[id^=GPelevationPathPanelInfo],button[id^=GPshowElevationPathPicto-]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAAAaCAYAAABb9hlrAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH4gEQEjITjE0MtwAABGJJREFUaN7tmU1oHGUYx//PZEvSLjHVBLVaerCXSgo5tAqxiqBSxcSLWqknFaNdaYjiwUMOVVGi2EORJg0xtgbx0FKVgmirRU17SUpjPsCVUhQtVOr6ES8mmpqdnwffhekw2dndbMK23T8MzMzzzsz7PP/3+ZjnlaqooooqrlhY7gSol3Rr7tLMTlfNs3gAJqnGncvMJMk3M7+Q5xOB8zsl9Ui6XtI/ktZXzVs6MpmMNTU1rZa0SdJNknLkSNI0MCrpTzPLFkSQmR0FspIGJb1UNXHpHjM3N9dUW1t7u6QHJW2V9KukPyQhqcEt/i8lHctms8Oe5/0WR5SAW4AfgWGgC1ixjEo9AwwAXj7Fgb1AZ6WSMzk56QGbgQPA98AUsBvYAKwCVgJrgV3AKeAccAi4f3x8vCbOSA8AB91xGEguIzlZ/sdgFEmOnF43xq9UkoBrgD7gZ+B13/c3u/uPAG8AbwEdkpTNZjcCLwJngE+AtYV8YEW+VbxESvVxKfa5xBokZ19oTF+lkTMzM+MB9wJngT0hHT8KzP2bkGwHcB54Ktb2wNtAb5EGbgAaFhOzXegKYhDwQp6TwzvLvYgK1CPpwtkZYEtI9iowCowBAyHZeuCEi1pr4j4yBBwscmK7gZ7FJtYFSOq7TMgx4A7gB6AvnU5bSF4H1LtjVVCWSqUMeN550eN59SuWIMf+HDAL3LwEJC0bOSPdCRvpTljwOiT3RroTdQvM3QPanYfcFiHvAj4GjgCvLWDHT4EX8hZnUQQBCRf6tkWMD8bW/WVaiVEkDZZKDmWCI6kmD0FtwNfAugXsetG96qsIeSPwfhRBXoxy10n6XFKXpEPAy7kEDtwl6eHA8CeA5nJ2N2LuxXrEEjiaX2a9YpHvv2ODpFOS7gl84BVHVFLSntAjNZLeXGRLZK+knRHipyUNFONFrT3zlDsExhjZJNVLuqGE16+W1BjX6rmk3JY06v56w9gmaUuufRFCO3C3mZ0oAzmDki4G7nXkytJC+lgj3Qlr7ZnHzIK5JW4V09ozz0h3Yo0zdJOk3yVlHOELkY6kaUnXSnoynU6PNTc3F7RAUqmUSWqX1CLpA0nZ2Bzkqo5ScbKEvBNZSucrwS+zMnsI+DcqB8WV2Uuh6Loix/eGPKdf0g4z880Ml//6A/IO520VhdnZ2b8lHXM2fTQkrg1Eq3AleJ/rzX0mKVNQiFtmTLjk67mw1umIyTVxAXY61+904eS7SiMomUz6wGlJxyU9BswARzzPG5P0oaSfXJ4+m2v1eJ63VdKzzgbHo0J3Ik9MPVfiXM8XVdqYvety3sYwOSGSuhyJ35pZfyX24qampv5qaWl5T9JKSdvN7CHgC0n7JR11dm0Edklqk3Sjy/UHJiYmLsSWfsCQpDoz264qSq5Gi9lu8H0/73ZDmKCTrpq4UI65SnrOzIavRqJyG3ae522KqHinnefEbtiFCWpzJXSmTD91h83sl6vdo7SILe8qqqiiiisY/wFFCbN/sRPwgwAAAABJRU5ErkJggg==);background-repeat:no-repeat}button[id^=GPshowElevationPathPicto-]{background-position:1px}div[id^=GPexportContainer-]{padding:5px}div[id^=GPexportContainer-]>input.GPsubmit{color:#fff}input[id^=GPexportButton-]{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxMy45OTkiIGhlaWdodD0iMTMuOTg4IiB2aWV3Qm94PSItMSAtMSA1LjcwNSA1LjciPjxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjMiPjxwYXRoIGQ9Ik02ODggMzI2LjR2OGgyMHYtOG0tMTAtMTR2MTQiIHRyYW5zZm9ybT0ibWF0cml4KC4xNjEwMyAwIDAgLjE0ODAzIC0xMTAuNTQ0IC00Ni4wMjQpIi8+PHBhdGggZD0ibTY5MyAzMjEuNCA1IDUgNS01IiB0cmFuc2Zvcm09Im1hdHJpeCguMTYxMDMgMCAwIC4xNDgwMyAtMTEwLjU0NCAtNDYuMDI0KSIvPjwvZz48L3N2Zz4=);background-repeat:no-repeat;background-size:25px 25px;min-width:fit-content;padding-left:25px;padding-right:5px}.GPexportMenuHidden{visibility:hidden}.GPexportMenuContainer{display:inline-block;position:relative}.GPexportMenuContent{border-radius:10px;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);display:none;min-width:80px;padding:8px;position:absolute;z-index:1}.GPexportMenuContent,.GPexportMenuContent a:hover{background-color:#f1f1f1}.GPexportMenuContainer:hover .GPexportMenuContent{display:block}.GPexportMenuContent .container{cursor:pointer;display:block;font-size:14px;margin-bottom:5px;padding-left:15px;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.GPexportMenuContent .container input{cursor:pointer;height:0;opacity:0;position:absolute;width:0}.GPexportMenuContent .checkmark{background-color:#eee;border-radius:50%;height:12px;left:0;position:absolute;top:0;width:12px}.GPexportMenuContent .container:hover input~.checkmark{background-color:#ccc}.GPexportMenuContent .container input:checked~.checkmark{background-color:#366291}.GPexportMenuContent .checkmark:after{content:"";display:none;position:absolute}.GPexportMenuContent .container input:checked~.checkmark:after{display:block}.GPexportMenuContent .container .checkmark:after{background:#fff;border-radius:50%;height:4px;left:4px;top:4px;width:4px}button[id^=GPgetFeatureInfoPicto][aria-pressed=true]{background-position:1px;background-repeat:no-repeat}button[id^=GPgetFeatureInfoPicto]{background-image:url(data:image/png;base64,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cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjliYzYwZTdiLTQ2YTQtNDBmYi1iNTdlLWM2MGY5ZWYzNTc2YSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMDE5ZDJjNS02YmZkLTQ5YzQtYTczYS0zMGQ3OGE0Y2MyZDUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpkN2U0OWVjNi0wZjQyLTQ5YTEtODQ3NS0zN2Y5N2Y3MGJjZWIiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE3MTAwODA3MjUxNDU4NjUiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxNTAxZWQwNS0xMmQ3LTQzNGMtODY3YS0yYjMyMzIxYTYwYjgiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTAzLTEwVDE1OjI1OjI1KzAxOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PnuaV+YAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAHdElNRQfoAwoOGRnrK4UpAAAB+UlEQVRYw+3YsWoUURTG8TNrikAECYJYiVjFLBhS2GktpPEV8gg+gr2IhbWQRhMQG0stIxaCaNKIjQTExqgBUYOJyc/mLkxmZ3d2dmciSA4sy+58c/73u+fMvXc34iROorXAPFaHCdY1F+vHxIG1Xu6sANLkDGZZlg0wpOFiLWRZtlkKmhSGLKU5HKIZm4M57Oaqc4TTGSPhNO7iHmZafD76OJiLiDcRMR0Re6MkqZw5XMZn7OB6WxUqcgqV+Y2FKs7IrYALuNh2y/U4JWauDOJM1WiB0xFxLiJm0/v3iNgqWwt6t4zZakXObEQ8yLXZ1SzLNtGp5AybOdzHFvZwiNsDdJ2U5qAhzn6+MnU4la2AG/iBDzjThqEc51cy1GemSUPPk+TJEE0Thl7mluU+M40Ywnl8xFcsYqqllruWq8weFsflVIHupMuvcAmfcKtEdyrp/tTlpNWs98wcYmkSTpWhF+nyBrbxCFlThkpOAO8n5VQZuonHeIilITlqGyqY2cezJjhNneXO1jFUtmlOwukMA+ZiA90SXRev88KI+FLDvIh4lzbNSBv1QWOcit8pP7Gc0y6n74qxg294+q85g+AzWMklWin5PFMzZ9nZrHFO1SCKM3VkJicx0wZn1MF08Ta9umPmWEsD3cV8W5zj/nNjdZCZk/jf4y94DaUx429cawAAAABJRU5ErkJggg==);background-position:-25px;border-top-left-radius:0;border-top-right-radius:0}.GPcloseGetFeatureInfo{background-image:url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=);background-position:0}.GPgfiLayerButton{background:unset;border:unset;font-weight:700;text-align:left}button[aria-expanded=true].GPgfiLayerButton span.GPshowGfiLayerFeature{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.GPshowGfiLayerFeature{background-image:url(data:image/png;base64,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ICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmM1NWM2ODRkLWY2OGQtNDExNy04ZGYzLTAwYWMzMjQ4YTY5YSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjNmYWM4YTllLWJkMTUtNGJiOC04ZGQyLTkwZDUyMjE0YmFmOCIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1QOlRpbWVTdGFtcD0iMTcyOTI0NTAwMjg0NjU2OCIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjMwIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjcwMTNhZTFjLTcyMjktNDJmZS1iMzAzLTU3NGFmMWE3ZmQxMyIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMTAtMThUMTE6NTA6MDIrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+UnHxogAAAAZiS0dEAPIA8gDyLkSMzAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+gKEgkyAorMuigAAAIkSURBVFjD7Zc/aBRBFMa/t39EFEMQTrQ2CiIi+K+Q3ZA+CLJ7nqWQwlRJGs3ddUnlZdUiXJEqINjE9e5UjFWag9sEbNRGhGB6MXKgQQPxZp5FLhLCXXbXXSQH8ytnhuF9771v3yygUCgUCkVXKOrB6/dqJzQD42A5DNAZAGBglYA3UlB55ZHztWcFWoXaLTDPAzjW5cgGMUYanlvpOYFtcc8inGVi5A6aSAptS50/761co+QAAOxCba/GH6TJgcaD3HqSoKx89RMx15tH5MTHqdzW7r3zU/6h47+0WSYaCmbcc2F3aftuGhjfpy075asPrI8lTjtjgYlG+zf1JbvoZ3aW7aKf6d/Ul5hoFIyFxBW08tUPAC7Giw3vl2fcS0k1tq3xBEATpN3UmLYkxCsAp8C4G3ju0yj3aCH7pzstNkrO3zbtkLGBNLwTlJznIG1wO2uyLiFWAJggzYoqDgCM8ILE7i9OXL0dDx7+PZH5iast0isAYLDIrh8VTXuyMpeKBwFei28fWkvTg8KACDzXCjzXEgZEXA+GCKTFf/gwv07cnp47DaLbBFxhqb+zCi8uD+ZfXmCpvyXgGhh3As+dTixQCioD2IgR23ezZZYPkgdDB709Wc0ywY8y6Jkpu+w5tTQH9dB9/+RuD9Yf5r6k/lTbFsnzAPV1qxwzjaQt7r8+tu2inwHrY8wYBnC2vbzKoEWzZZbrj298U/8uCoVCoegx/gAQwd9vpqyHDwAAAABJRU5ErkJggg==);background-position:-26px 0;display:inline-block;height:28px;vertical-align:middle;width:28px}[id^=GPisochronPanel-]{width:280px}.GPshowIsochronPicto{background-position:1px;background-repeat:no-repeat}.GPisochronPanelClose,.GPshowIsochronPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIRSURBVFiF7ZbRS1RBFMbPbLq9ldjaY88Zkv1JQRqt+Wf0aCrYBuY/UkRQRFQvQQax+JipEUIoQdHq/nrYb3K8zl33zl20h/vBwnLOmfPNN+fMmWtWoUKFMwPwjiO8Pu/9xOAGDQRqZnYYmLrOuQvD31I51AYJAqbNbNnMfgXm38AyMFV2E8AssKpDy4txwAowX4booogO1WYdYEu/jmwHIqqXEOPzr8VEScwjxXSTREnMSyXZBGaAscA/DtyTOIDnKaKAFsfxGHCB38kWopUiaNVffmC8T9wE8FaxKwk8vpVCrAG1TGU8nsSqeBrJLbXBl5gY4C7wOSNqW+13Y4iistUrLkYE/lTu5PhfAR8ytjmteViYMF9UeTFK3qZ36S9HfJeAP8CDjL2hqq4nkVpfUdFhEcNIjv2ame045/aA22Z2PeMbNbOn4QLn3C6wK38ZxN7Ggd/LKICfwKb+tyMntgGcOAzgO/AjkTM2AJKqFEvuW27s9Oh/aybUch8T+PKmWdaWJiro49kCa+a1ZmFIYvzYjo70ooJu6rS/Ao0B4q8C31TVyYJcZ/aw+iRv+omSmPeKXUrgmeHo0yc6mjOV6gL3i/IYUAdeKMkW0ASuBP6G2mxHMc+A0cJEvVxNVSp3mklUC2imcPgkdSU5CE5nWyK6snXofXUniTkXAFPAIvAJ2Af2gHVgoeidqVChwv+NvxOT737B3Fc7AAAAAElFTkSuQmCC)}button[id^=GPisochronReset]{opacity:.8;transition:opacity .2s ease-out}button[id^=GPisochronReset]:hover{opacity:1}.GPisochronReset{background-color:#366291;background-image:url(data:image/png;base64,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);background-position:-281px}form[id^=GPisochronForm]{padding:15px}div[id^=GPisochronChoice]{-webkit-justify-content:space-between;margin:10px auto 5px;width:160px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}p[id^=GPisochronPointLabelP],p[id^=GPisochronValueChronLabelP]{margin:2px 0 5px}.GPisochronChoiceAlt input:checked+label+span{color:#366291}input[id^=GPisochronChoiceAltChron]+.GPisochronChoiceAltImg{background-position:-56px 0}input[id^=GPisochronChoiceAltChron]:checked+.GPisochronChoiceAltImg{background-position:-84px 0}input[id^=GPisochronChoiceAltDist]+.GPisochronChoiceAltImg{background-position:-112px 0}input[id^=GPisochronChoiceAltDist]:checked+.GPisochronChoiceAltImg{background-position:-140px 0}.GPisochronChoiceAltImg,.GPisochronOriginPointerImg,.GPisochronTransportImg,input[id^=GPisochronChoiceAltChron]{background-image:url(data:image/png;base64,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)}.GPisochronChoiceAltImg,.GPisochronOriginPointerImg,.GPisochronTransportImg{font-size:0}.GPisoExclusionsOption{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAA4CAYAAADuMJi0AAAE60lEQVRYw+2YWWxUZRTHz/fd7y4zzAzTbaAdpgtQWsBiYVxYGpcEMCwRQkx48KHGhKg0WhESNYglwSUgWCKGTaMRBF4MwShpECUshlJqay2U0LCUwrRAp+0Ms997v8UnEl8Gp9Ppg2Z+bzfnn+/knHvud865AFmy/GfZVVZW/vvb9eduNn7Wc+ixGQ3/pm+UcO735VP3/rpsyc39TudHyXQ4maF61cqfZi97ocbjmVi6YGHNxoOeor3JtDskae606uqzFfPmvRqLxFg4EetIpiXJDJqqOHBwEEjIDyXjiVw4t/S1XD34TKs/MX+z4EEAgK0SwhPtjh+qq6tXBjGOtTY11a31D371qEygRxn3F3vWPVE1deN0G82T+m5BbCAIF+8lBttifLoFQeV0Wf7R7XbndsXird19/TUfAhgZeZ8H7eoXHYVWwzdBFTedsmhScfg0wfQPTRF7FfLdmBRRo4Q9RzTS8aeKRaeERAsC8TmRto30HJKqMCrhIcMUMuMcmADQJAQ5GJ4fqUMpFdE2mXgqOe+ewXhJFCHoJNJxu4omz7bhScVMyj/BeFPGUrlZIROOYRT4C0C0S0h8qUhHAAC2yGTFpUka7Skfx9/DZFZGnH2gEHxYwnc6EIguBYnDqtTzT3uDTFb3VdrEcZfWk5GUrgZxaI4QCyyaBAME04sUzTvL+dBD+xnOu8qiwrIgV1leEuf9JxhvTzu6Bgm5ThXkmNcciriaS8R2lXySTHvUqXb/lqsNp3Ju0qstx2Z7sfTZGuKsLAFkV4RK0J5k2s4wXYqYsO6WyYq0HUYN06c9XgX5SxcBuIt4gvJ40sJi7MaVONtVhGHmqIrmyLPzm29tqqf7ilwHUtHvVAjO9tksWbJkyQzehd7xo5ppUqW2tlbzLp380rhxitdB8q/4fD6acnsaKfX19c7Ji+QNJU/at7mmWaaZpklHNSY+irq6urzSxbBBy1PqEoJZfFdYoK2tjY2Jw4aGBpurJvKOmme8xWTTmgjq1DApAwAxoo6fIkieEnoF2+NvUDVqCekRiNIY4ip1eb1ekvEI39/65nOyO7hWtyWc0biOogkDooYOBhhujLEDAIZG4xADAH/4sH796y42ZWBNxBGrCEZMlNBNER1k8fBtdixwwzzY2toaTCtCr9drLXzKthgSiv7ztycfjvQo4O5fpWqR5eGojg2DCX1IBHUf3n2nSey5cOpCXzrfIXp6WZXXMtdYh8pi74JTL3WTijO913tDq2qXVxplA5vijgdTIvE4RO6zYOwO3t5/GhpbTrYMjnh78nq9VlwRfRmVRdewArM6rgJBTLbxErYEAL4J5vetwFJ4jghQxMNSSAyoO42Ttl0Xz58PpzXqS5JE7G5tqrAbM6lMiyljkimoQg1m8VhK7xrFwTpdixcbAaGz2/I+ekba0dzc/iDt3SIUCtH+Lv+lArWwjWPOOeMVJjI1imgRsyXKDas+mxoc83vKUfOC/dO2lst3M7LM3L816LdLBedlTIKU05lUNfJM2ZzEBZORXzuHrtk+vnSu63JGF9LhvmH9/uVAu8s9MUQFnWUSIweHFJ90z7qlq+n6L2OyAQMA918NdLrcrqgwoQrHyAHWqX49PDzMxsohAIAUuZ0YsHJHSO+G5t7eXj+k8ZsEjfCmsQGABgAmAMQBIJEdN7L8//gb3FshBGMt81oAAAAASUVORK5CYII=)}.GPisochronOriginPointerImg{background-color:#f2f2f2;cursor:pointer;width:28px}.GPisochronChoiceAlt input{display:none}.GPisochronChoiceAltImg{cursor:pointer;display:block;height:28px;margin:auto;width:28px}.GPisochronChoiceAlt span{color:#999;cursor:pointer;display:block}.GPisochronModeLabel{display:block;margin-bottom:5px;text-align:center}input[id^=GPisochronTransportCar]+.GPisochronTransportImg{background-position:-168px 0}input[id^=GPisochronTransportCar]+.GPisochronTransportImg,input[id^=GPisochronTransportCar]:checked+.GPisochronTransportImg{background-image:url(data:image/png;base64,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)}input[id^=GPisochronTransportCar]:checked+.GPisochronTransportImg{background-position:-196px 0}input[id^=GPisochronTransportPedestrian]+.GPisochronTransportImg{background-position:-224px 0}input[id^=GPisochronTransportPedestrian]+.GPisochronTransportImg,input[id^=GPisochronTransportPedestrian]:checked+.GPisochronTransportImg{background-image:url(data:image/png;base64,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)}input[id^=GPisochronTransportPedestrian]:checked+.GPisochronTransportImg{background-position:-252px 0}.GPisochronTransportChoice input{display:none}div[id^=GPisochronTransportChoice]>div{justify-content:center;width:100%}div[id^=GPisochronValueChron],div[id^=GPisochronValueDist]{margin:5px auto;width:220px}.GPisochronTransportImg{cursor:pointer;display:inline-block;height:28px;width:28px}.GPisochronTransportImg:first-of-type{margin-left:18px;margin-right:10px}select[id^=GPisochronDirectionSelect]{margin:5px auto;width:80px}.GPshowIsoExclusionsPicto{right:0;top:unset;transition:all .5s ease-out 0s}.GPisoExclusionsLabel{display:block;font-weight:700;line-height:16px;margin-bottom:10px;text-align:center}.GPisoExclusionsOptions{display:-webkit-flex;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.GPisoExclusionsOption{background-color:#fee;border:1px solid #a77;border-radius:3px;color:#a77;cursor:pointer;display:block;height:28px;line-height:26px;padding-left:28px;padding-right:5px}input:checked+.GPisoExclusionsOption{background-color:#efe;background-position:0 -28px;border:1px solid #797;color:#797}input[id^=GPisochronSubmit-]{padding:0 10px;width:fit-content}[id^=GPimportGetCapPanel-],[id^=GPimportMapBoxPanel-],[id^=GPimportPanel-]{width:340px}div[id^=GPimportTypeLine-]{border-bottom:1px solid #999;margin-bottom:15px;padding-bottom:15px}div[id^=GPimportChoice-]{margin-bottom:5px;margin-top:5px}.GPshowImportPicto{background-position:1px;background-repeat:no-repeat}.GPimportGetCapPanelClose,.GPimportMapBoxPanelClose,.GPimportPanelClose,.GPshowImportPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH7SURBVFiF7dY/aBRhEAXwvcN/sRBBkUNsA8JhoZ1gJaIIamV91SUSFCxtU1oJQS9i0lnZWShYpE5pIYFUNoJIsLGIYhC9n8XOcZt175Ldu2CzD7bYmfne+97O7nybJDVq1KhRFZjFWlyz/3s/lYFDeIjvhviJRRyZAv8cXqA5pqaBp3gwqdglvA8TW+jgNj5HbAOXJ+Cfw5/gWi0yFWaeRU2/kikcx2P8DpKXOJXJn8RSbKYfT/hEBZ2e3VhGI2dmOVfTKytyC59i8Udcy+RA5v4KNiP8BXdLag1epSxW0cx1ZoCVoi6OIm9FJ+BXdOhYrmaXoYgdxiPsRPoNzk3BVL57pcx08C0WrqM9ou4fQ5lcO9YKrs6EpqqZCcLtWPgkv3CMSFG3msEB2/vewHhThcOiCNmi50mSSJLkXpIk3TIbyaEbHIKzLBr7jO0N3JB+2PAapwtqCl856dR7FemvuFNSu2gAVOpSnvgM3gbJFm7uZQhXDc+lNZydgpmVglhlUw3M44f0jFnC0bwh6XRblJ5FO9JJV0pwjJnB2C4c6aVNhVgbH4JoAxcyufOGfxCbuFhR4+AP1pzgTIj2o2Pzue71MDMBf9fw16dwNOc61cf9yoYypNcNBwYVPvwx3AvxYEZOszDVw8I0NAekLbyLqzU14ho1atQ4KPwF7C8m4Xa+2v4AAAAASUVORK5CYII=)}.GPimportPanelReturnPicto{background-color:#366291;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4AUXDwQyeFmCzQAAATJJREFUSMftliFLBFEURs/dVUQURJvYLCaLGESz1T9gUJsoWARBEBRM/obFIFgMKxtsNhG2aTUIBqOCySLsHssuTNiVGZ47aU8aZr5537vz3TfvwZAhg0K9UL/U5bLMuuyljFXJYXYOHGVuxcAM1VPg5D+/1sgfZsfAWY9HG+ok0AY+gFfgJSI+UzI7tBht9UHdUqtFzQ5M41GdKZLhQmJMa0A9d6VqqDXT2e41fvQxrQCXQK+X7oGnzvUoMA3MAyvAWEbXjIjVIllW1eseM9/vo59SrzK6ljpXtIGq6k0ew0wcdxntTqGFHxEtYBO4zTPBiBDYBX6SGlAdVRud9baeQ99tunrKz6CizubULnYMn8vczprqW+HdIoEaMF5mhRPqe2kVRsQ30Cj7WLI0PJwNnF82zKAINyZs+wAAAABJRU5ErkJggg==)}.GPimportChoiceAlt input[type=radio]{display:none}.GPimportChoiceAltTxt{color:#bbb;cursor:pointer;display:block;font-weight:700;line-height:28px}input[type=radio]:checked+.GPimportChoiceAltTxt{color:#366291}.GPimportInputLine{display:-ms-flexbox;display:-webkit-box;display:flex;margin-bottom:10px}.GPimportInputLine>*{border:1px solid #999;border-radius:0;display:block;height:28px;line-height:26px}.GPimportInputLine :not(:last-child){border-right:none}.GPimportInputLine :first-child{border-radius:3px 0 0 3px}.GPimportInputLine :last-child{border-radius:0 3px 3px 0}.GPimportInputLine>:not(input){overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.GPimportInputLine>input{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0;padding:0 5px}.GPimportInputLine>select{-webkit-box-flex:1;-ms-flex:1;flex:1;padding-right:7px}.GPimportInputLine>label{background-color:#f2f2f2;color:#666;cursor:pointer;padding-left:7px;padding-right:9px}.GPimportGetCapProposal{color:#5e5e5e;cursor:pointer;font-size:1em;height:28px;line-height:16px;list-style-type:none;overflow:hidden;padding:6px 10px;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap;width:100%}.GPimportGetCapRubriqueTitle,.GPimportMapBoxListSourceTitle,.GPimportMapBoxSourceTitle{color:#5e5e5e}.GPimportGetCapListRubrique,.GPimportGetCapRubrique,.GPimportMapBoxListSource,.GPimportMapBoxSource{list-style-type:none}li.GPimportGetCapListRubrique:before,li.GPimportGetCapRubrique:before,li.GPimportMapBoxListSource:before,li.GPimportMapBoxSource:before{content:"» "}.GPimportGetCapProposal:hover,.GPimportGetCapRubriqueTitle:hover,.GPimportMapBoxSourceTitle:hover{color:#000}.GPimportMapBoxSourceFilter,.GPimportMapBoxSourceScale,.GPimportMapBoxSourceStyle,.GPimportMapBoxSourceVisibility{display:inline-block;margin-left:15px}.GPimportMapBoxJsonEdit{margin:5px;outline:1px solid #ccc;padding:5px}.GPimportMapBoxJsonEdithidden{display:none}.gp-json-string{color:green}.gp-json-number{color:#ff8c00}.gp-json-boolean{color:blue}.gp-json-null{color:#f0f}.gp-json-key{color:red}.GPimportMapBoxSourceVisibilityInput{display:block!important}[id^=GPimportPanelReturnPicto-]{background-position:0 0;border-radius:3px;cursor:pointer;height:26px;opacity:1;position:absolute;width:26px}.GPlayerSwitcher_layer{background-color:#fff}div[id^=GPlayerSwitcher-]{height:32px}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{width:190px}button[id^=GPshowLayersListPicto]{background-image:url(data:image/png;base64,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ZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDoyYjNmZWFlMS1hNzM0LTQ0NjItOTM3ZS1jYmEzM2JiMTY1NGQiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NGQ1NTRhMTgtNjk3NC00NDMyLTk5OTEtMjk5YzU1OTY4NWQ2IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NTA1ZjQ3ZGEtMzNjMy00YjRkLWE3ZWQtODEyMDVkOWRjNTk2IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEwOTM3NTE5MDA3NTY1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6N2Y1MGZlNjEtODdkYS00OWM2LWI5MjQtYTJlMmFmNjM0MmQyIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wMy0yMFQxMzoyNToxOSswMTowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5OxzFdAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AMUDBkTuLyY9QAAAhxJREFUaN7t2bFrFEEUx/GYxiBIYneFNmKZ2uJOCDHY6V8g5m9IZ6UGK1trsbawEQJiISHgYSFKwMrCQpGgNiYYFAOSj4VzYV02d7N3M3dR98GxMDcz7/t+7+3u8HZqqrHGGvvXDPNo/a/BT2MTu2jndjaHuQkH/AcDlv22d5jJ5fQkruMLvuIOTo058CqGFt4HAa7mdlq2sQgxgOFHuL7GdG6nXVxEG2u5hYhgeFIY/5aEoZ/TirlZhIhlwN3w3+eRGeoEnkuImuKfDeX/M7wCh2fACnYKi9+iM0TmOmFtz3awErm2FgMehnn3RmYYJfupqqBm9s9jH99xJlklDiNE6udADAOehfHbSRlwvAZEX6e9vYYQYBDDzcKD71IShnDfrFVsMItb2C44eRp+PdsOc2YrwLtYysAAb5Ix4EIpqDJEVTZi5nRxJVKAGIZH/Q5iozLEQPSycZja9Z3GM5zGxzD2ICfDQCGyOB3MsBeuL3AsKUMhs4+xUBhfxEbFvVa+JzewWFi3EPY6yNKIDM8LvnaTM1QcQtZLEOVsVKodnK4nOggdMOB+GPuUjaFPOS1VVERZ7U7Go/CrcNzdw7ncDFFCJHcax7A1ToZe12W1qiwPKbPV1J0iXA7770+KYWINkdDnexn83Jh0U2bsLTFcCwF+wImj0pYbS1MUM6HBCctHsTGbW+R2eN9vJu3z/WUitDDffPJprLHk9gs8Px9eX9iakAAAAABJRU5ErkJggg==);background-position:-2px;background-repeat:no-repeat}button[id^=GPshowLayersListPicto][aria-pressed=true]{background-position:-35px;border-top-left-radius:0;border-top-right-radius:0}.GPpanelBody{max-height:200px;overflow:auto}button[id^=GPlayerInfoClose]{background-color:unset;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAgCAYAAAAFQMh/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGUSURBVEiJ7ZQxT8JQEMf/hxOsDg6GOGtiYgyy0I4Ormj8BBqpZW9HFhNxRKom8AU0tHFRRx1KYlwcQIkrzM4mGnoOtlJKsa/q2N/4ernfu97dAxISEhJ+CYkEyZq1y8w5O9NRUKk44VFMsm7VHIdf2kdb9aicM0JS8BkIuezH3PxgfekKd3cclEqaeQxQmYg2soXt10H74uGnvKkoMROveHFE2JHelusAkz9C0iwDINU9IErRYlTeyIr79vnNgtybBZB3j9ayhZ5b+S3cSvd9F2nY6a46+VfGEeqx1z9mlL9PmJqE4TsoFZSWps9BbHG4PPBdWBpT7Mkva8zOmJzZabYzT3uiUkBguCbUPAy5LMUsQGC4fEpvZdTgFyJanb5qfxKHSbkB4B6g/JccseQC4nCpne6W+gfKtX/V4sgjeyPppgGGb2VwaleLKkA8uphlAFB8WU/sw82JlviJHC4CHgG408oNO90pj6QAQGxXiyoRvPeZwfQclVcIWWspkm4a409lECZJNw1ZaynTYxISEhL+gU/lu7XSwAzyjAAAAABJRU5ErkJggg==);background-position:-2px;background-repeat:no-repeat}button[id^=GPlayersPanelClose]{background-image:url(data:image/png;base64,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TUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDplZWM2OTBlMi05NGExLTRkOGItYTM4Yy02MjI3ZWFhNmVlMjQiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6YmQ3ZTNjMTUtMzcwNy00MDZjLTgxNTYtZjUxZGM0NDFlYjMxIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MTVhNTdhOTYtMDdjYi00NTVjLTgwODUtY2IzMjFlZTdhNDc2IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzE2MjkwMzk5OTk1NTI1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NGM2Y2U2YjItNDVmYS00Y2U0LWExODItMzNhZmUxNmZhNDc3IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNS0yMVQxMzoxOTo1OSswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4dtuOqAAAABmJLR0QA8gDyAPIuRIzMAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH6AUVCxM7RVVcxQAAAPJJREFUSMftlUEKwjAQAJPiE3yH+Ii81IvgG/IFBRPRWkwLib10exQVhawHLRRbU8QEPGSOmyXDJrsJIZFIJBISsS9nuYEtXy5Hn3I4x+SgYS2zcuFNaq1FRMTc1Gmf/CmtBL7wIlcaJLZQGjacY9KWKg2btxz5s7g5wvbGTeXvlT7XYOe6Ei9ypSsZTOqSB5cOyXMD6bfS5Hs90m6M0mCz3NdIfQ0XXJob2HVjHuWukXGN2t8+IIPNdbrcVohICCGkONZpAXrKGLXNOmPUFtl4okwtmtj5et/6ea+zcq40yHalfVeiNEiRlfP4rUYikaA8AMekzozLtupbAAAAAElFTkSuQmCC);background-position:-2px;background-repeat:no-repeat}.GPpanelIcon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48ZyBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMiIgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBkPSJNMTUuMTkzIDUuNDQ4IDguMSA5LjQ0IDEuMDA5IDUuNDQ4IDguMSAxLjQ1NHpNMS42NTUgMTAuMDc1bC0uODQ3LjQ3OCA3LjA5MSAzLjk5MyA3LjA5Mi0zLjk5My0uODQ4LS40NzgiLz48cGF0aCBkPSJNMS42NTUgNy41MjIuODA4IDhsNy4wOTEgMy45OTRMMTQuOTkxIDhsLS44NDgtLjQ3OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTZ2MTZIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:auto auto}[id^=GPlayerInfoPanel]{right:190px}div[id^=GPlayerInfoTitle]{border-bottom:1px solid #366291;color:#366291}.GPlayerAdvancedTools,.GPlayerBasicTools{height:28px;position:relative;width:100%}.GPlayerExtent,.GPlayerInfo,.GPlayerInfoOpened,.GPlayerRemove,.GPlayerVisibility{cursor:pointer;height:28px;width:28px}.GPlayerExtent,.GPlayerInfo,.GPlayerInfoOpened,.GPlayerName,.GPlayerOpacity,.GPlayerOpacityValue,.GPlayerRemove,.GPlayerVisibility{position:absolute;top:0}.GPghostLayer{opacity:0}.GPlayerBasicTools{background-color:#fff}.GPlayerExtent,.GPlayerInfo,.GPlayerInfoOpened,.GPlayerRemove,.GPlayerVisibility,.GPshowLayerAdvancedTools{background-image:url(data:image/png;base64,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)}.GPlayerOpacity input[type=range]::-webkit-slider-runnable-track{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAECAYAAAAZDrhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAwSURBVDiNY/z379//v3//Mvz9+5fh379/DITYxKobKWYxMYwCisBoAFIIRgOQQgAADrTuhXfc36kAAAAASUVORK5CYII=)}.GPlayerOpacity input[type=range]::-moz-range-track{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAECAYAAAAZDrhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAwSURBVDiNY/z379//v3//Mvz9+5fh379/DITYxKobKWYxMYwCisBoAFIIRgOQQgAADrTuhXfc36kAAAAASUVORK5CYII=)}.GPlayerOpacity input[type=range]::-ms-track{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAECAYAAAAZDrhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAwSURBVDiNY/z379//v3//Mvz9+5fh379/DITYxKobKWYxMYwCisBoAFIIRgOQQgAADrTuhXfc36kAAAAASUVORK5CYII=)}div[id^=GPlayerInfoQuicklook]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJTSURBVEiJ7ZZdSJNRGMd/59Vo9m6jQYKWRV/MQYGBXSStC2/S27YmXYfQZRexZiBhdNE2ke68qq5rY3rRjRFE1Du0KKIcwQYtaGpCH+r01ZrsPV2lc853c0IE+r87z3P+Px7OOc85B7adROFgcHDQAbRWYtR1fdTv9+vF8do1dCFanE7nU6vVagpbWFgglUq1A89NgQB2ux2Hw2EKVBRl45ypswqtq7BYM/oyD8emSE7rgMTVaKPTtac64E99mZtDKRZzeZobVABef55lPDPH6b2W+k0DH72aYjGX51rnEU4csAGQmJhnYCTNmx/qFSBa7DFdw+RXneYGdQUGcLLJxvF6C78M5VQpT5lNkebpzQJdjTaS0zqJifmVWGJynk/fflNXa7wr5Vm3htlsFsMwADjvtDCeEQyMpDm2bzcA6e85LLWwvy434vNFaqLRrnyhf03r9ff3q6qqthXGJhct9W9nrN1LeaUFoK7GeH/YujScmLWGhRCRl5YPl+nrM0oCNyN3INYL3AbxQAtd6AYhAWqqBX6JR14cOndpF8irB90f7Zl45AlssfW0oKdXIu8qQslshbOjba+SneIOxFavGSG6tKAn6u4ZCiBlsHCeFvKu85sd7AkgKg2ZAdCCnpCU3CtXodmNPaqFvF0rVfcMtyINbzlgRa139nrsDDL/DHCAzAL3twQE2kHYQWalFB1ayNuN4FbVwHjYewfkDSlFRzzsHXP3xI6C8rjU3LLv8l9poYurOywJguGjxCn5pz+HNncgFtkoVw2wCfBVUtWO/nP9AYuuwXn+Xm/WAAAAAElFTkSuQmCC)}div[id^=GPlayerInfoClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAgCAYAAAAFQMh/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGUSURBVEiJ7ZQxT8JQEMf/hxOsDg6GOGtiYgyy0I4Ormj8BBqpZW9HFhNxRKom8AU0tHFRRx1KYlwcQIkrzM4mGnoOtlJKsa/q2N/4ernfu97dAxISEhJ+CYkEyZq1y8w5O9NRUKk44VFMsm7VHIdf2kdb9aicM0JS8BkIuezH3PxgfekKd3cclEqaeQxQmYg2soXt10H74uGnvKkoMROveHFE2JHelusAkz9C0iwDINU9IErRYlTeyIr79vnNgtybBZB3j9ayhZ5b+S3cSvd9F2nY6a46+VfGEeqx1z9mlL9PmJqE4TsoFZSWps9BbHG4PPBdWBpT7Mkva8zOmJzZabYzT3uiUkBguCbUPAy5LMUsQGC4fEpvZdTgFyJanb5qfxKHSbkB4B6g/JccseQC4nCpne6W+gfKtX/V4sgjeyPppgGGb2VwaleLKkA8uphlAFB8WU/sw82JlviJHC4CHgG408oNO90pj6QAQGxXiyoRvPeZwfQclVcIWWspkm4a409lECZJNw1ZaynTYxISEhL+gU/lu7XSwAzyjAAAAABJRU5ErkJggg==)}.GPlayerInfoLink,.GPlayerInfoPopup{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJTSURBVEiJ7ZZdSJNRGMd/59Vo9m6jQYKWRV/MQYGBXSStC2/S27YmXYfQZRexZiBhdNE2ke68qq5rY3rRjRFE1Du0KKIcwQYtaGpCH+r01ZrsPV2lc853c0IE+r87z3P+Px7OOc85B7adROFgcHDQAbRWYtR1fdTv9+vF8do1dCFanE7nU6vVagpbWFgglUq1A89NgQB2ux2Hw2EKVBRl45ypswqtq7BYM/oyD8emSE7rgMTVaKPTtac64E99mZtDKRZzeZobVABef55lPDPH6b2W+k0DH72aYjGX51rnEU4csAGQmJhnYCTNmx/qFSBa7DFdw+RXneYGdQUGcLLJxvF6C78M5VQpT5lNkebpzQJdjTaS0zqJifmVWGJynk/fflNXa7wr5Vm3htlsFsMwADjvtDCeEQyMpDm2bzcA6e85LLWwvy434vNFaqLRrnyhf03r9ff3q6qqthXGJhct9W9nrN1LeaUFoK7GeH/YujScmLWGhRCRl5YPl+nrM0oCNyN3INYL3AbxQAtd6AYhAWqqBX6JR14cOndpF8irB90f7Zl45AlssfW0oKdXIu8qQslshbOjba+SneIOxFavGSG6tKAn6u4ZCiBlsHCeFvKu85sd7AkgKg2ZAdCCnpCU3CtXodmNPaqFvF0rVfcMtyINbzlgRa139nrsDDL/DHCAzAL3twQE2kHYQWalFB1ayNuN4FbVwHjYewfkDSlFRzzsHXP3xI6C8rjU3LLv8l9poYurOywJguGjxCn5pz+HNncgFtkoVw2wCfBVUtWO/nP9AYuuwXn+Xm/WAAAAAElFTkSuQmCC)}button[id^=GPinfo_ID_],button[id^=GPremove_ID_],button[id^=GPvisibilityPicto_ID_]{background-color:transparent;border:none}button[id^=GPvisibilityPicto_ID_][aria-pressed=false]{background-position:-28px 0;left:0}button[id^=GPvisibilityPicto_ID_][aria-pressed=true]{background-position:0 0}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{max-height:28px}.GPshowLayerAdvancedTools{background-position:-112px 0;right:0;top:0}.GPlayerInfo{background-position:-55px 0;left:0}.GPlayerInfoOpened{background-position:-83px 0;left:0}.GPlayerOpacity{height:28px;left:28px;padding-left:8px;width:calc(100% - 100px)}.GPlayerOpacityValue{cursor:default;font-size:10px;font-style:italic;left:calc(100% - 60px);line-height:28px;width:32px}.GPlayerRemove{background-position:-140px 0;right:0}.GPlayerOpacity input{-webkit-appearance:none;-moz-appearance:none;background:none;cursor:pointer;display:block;height:100%;margin:0;overflow:hidden;padding:0;width:100%}.GPlayerOpacity input[type=range]:focus{box-shadow:none;outline:none}.GPlayerOpacity input[type=range]::-webkit-slider-runnable-track{-webkit-appearance:none;height:3px}.GPlayerOpacity input[type=range]::-webkit-slider-thumb:before{height:3px;left:-200px;pointer-events:none;position:absolute;right:50%;top:0}.GPlayerOpacity input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background-color:#505050;border:2px solid #fff;height:17px;position:relative;top:-7px;width:9px}.GPlayerOpacity input[type=range]::-moz-range-track{height:3px;width:80px}.GPlayerOpacity input[type=range]::-moz-range-thumb{background-color:#505050;border:2px solid #fff;border-radius:0;box-shadow:0;height:13px;position:relative;width:5px}.GPlayerOpacity input[type=range]::-ms-track{border:0;border-color:transparent;border-radius:0;border-width:0;color:transparent;height:3px;width:80px}.GPlayerOpacity input[type=range]::-ms-fill-lower,.GPlayerOpacity input[type=range]::-ms-fill-upper{background:transparent;border-radius:0}.GPlayerOpacity input[type=range]::-ms-thumb{background-color:#505050;border:2px solid #fff;height:13px;width:5px}.GPlayerOpacity input[type=range]::-ms-tooltip{display:none}[id^=GPlayerInfoPanel]{overflow-y:hidden;padding-bottom:10px;padding-top:10px;position:absolute;top:0}.GPlayerInfoPanelOpened{display:block}.GPlayerInfoPanelClosed{display:none}div[id^=GPlayerInfoTitle]{font-size:1.1em;font-weight:700;margin:auto auto 10px;padding-bottom:5px;text-align:center;width:calc(100% - 52px)}div[id^=GPlayerInfoQuicklook]{cursor:pointer;height:20px;left:10px;position:absolute;top:-2px;width:20px}div[id^=GPlayerInfoClose]{cursor:pointer;height:28px;position:absolute;right:10px;top:-8px;width:28px}div[id^=GPlayerInfoDescription]{font-size:.9em}.GPlayerInfoSubtitle{font-weight:700;margin-bottom:4px;margin-top:10px;padding-left:35px}.GPlayerInfoLink,.GPlayerInfoPopup{background-repeat:no-repeat;color:#999;cursor:pointer;line-height:20px;overflow-x:hidden;padding-left:23px;text-overflow:ellipsis;white-space:nowrap}.GPlayerInfoLink{background-position:0 -20px}.GPlayerInfoLink:hover,.GPlayerInfoPopup:hover{color:#333}.GPlayerInfoLink a,.GPlayerInfoLink a:visited .GPlayerInfoLink a:focus -.GPlayerInfoLink a:hover{color:inherit;text-decoration:none}.GPlayerName{cursor:move;left:28px;line-height:28px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 56px)}.outOfRange .GPlayerName{color:#aaa}div[id^=GPlayerInfoContent]{width:280px}[id*=GPlocationOriginPointer]{background-repeat:no-repeat}[id*=GPlocationOriginPointer],[id^=GPlocationStageAdd],[id^=GPlocationStageRemove]{background-image:url(data:image/png;base64,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)}[id^=GPlocationStageAdd],[id^=GPlocationStageRemove]{border:none;cursor:pointer;height:28px;width:28px}.GPlocationOpen{background-color:unset}.GPlocationStageRemove{background-position:-84px}.GPlocationStageAdd{background-position:-56px}[id*=GPlocationOriginPointer]+.GPlocationOriginPointerImg{background-position:-1px}[id*=GPlocationOriginPointer]:checked+.GPlocationOriginPointerImg{background-position:-29px}.GPlocationStageFlexInput{max-height:28px;opacity:1}button.GPlocationOriginPointerImg[id*=GPlocationOriginPointerImg]{border-bottom-right-radius:3px;border-right:1px solid #999;border-top-right-radius:3px;width:28px}.GPlocationStageFlexInput{margin-bottom:5px}button[id^=GPshowMeasureAreaPicto-]{background-image:url(data:image/png;base64,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);background-position:-78px;background-repeat:no-repeat}button[id^=GPshowMeasureAreaPicto-][aria-pressed=false]{background-color:rgba(0,60,136,.5)}button[id^=GPshowMeasureAreaPicto-][aria-pressed=true]{background-color:rgba(0,60,136,.7)}button[id^=GPshowMeasureLengthPicto-]{background-image:url(data:image/png;base64,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);background-position:-24px;background-repeat:no-repeat}button[id^=GPshowMeasureLengthPicto-][aria-pressed=false]{background-color:rgba(0,60,136,.5)}button[id^=GPshowMeasureLengthPicto-][aria-pressed=true]{background-color:rgba(0,60,136,.7)}button[id^=GPshowMeasureAzimuthPicto-]{background-image:url(data:image/png;base64,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);background-position:2px;background-repeat:no-repeat}button[id^=GPshowMeasureAzimuthPicto-][aria-pressed=false]{background-color:rgba(0,60,136,.5)}button[id^=GPshowMeasureAzimuthPicto-][aria-pressed=true]{background-color:rgba(0,60,136,.7)}.GPmeasureTooltip{background:rgba(0,0,0,.5);border-radius:4px;color:#fff;padding:4px 8px;position:relative;white-space:nowrap}.GPmeasureTooltip-measure{font-weight:700}.GPmeasureTooltip-info{font-size:.75em;text-align:center}.GPmeasureTooltip-static{background-color:#fc3;border:1px solid #fff;color:#000}.GPmeasureTooltip-hidden{display:none}.GPmeasureTooltip-info:before,.GPmeasureTooltip-measure:before,.GPmeasureTooltip-static:before{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid rgba(0,0,0,.5);bottom:-6px;content:"";left:50%;margin-left:-7px;position:absolute}.GPmeasureTooltip-static:before{border-top-color:#fc3}[id^=GPmousePositionPanel-]{width:280px}button[id^=GPshowMousePositionPicto-]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD2SURBVFiF7ZbRDoIwDEUZ36oPRP9GMVF+k1c5vpQ4l24CFkfITsIDY2l70+6yqirsDITcdcSocxdQKHxhjTMEHIE7ED0CgAMuwNkyt7kgEfOUsJ0mSsRcZc9gLsoSoOWTG+C8707WfNqcNSfxRsmnA+qgMyOP1GjOSaxioCklKuyejRhJOtLLYyZI4muilosJC4y89957P2H/LMEJUapZaGzxpuAmrv3Gn0YuNIBFXZqaUMUodszNwjVbUWuQEDPatmrpueuOQu4fq+WoSbwD76uPas1BpwbgZJV/rctpI52KupmIaoHGMndh86wxcpZs1/4KO+UFLQ+rEigj9BAAAAAASUVORK5CYII=);background-position:1px;background-repeat:no-repeat}.GPmousePositionEditTool{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAYAAAAzI3woAAAB40lEQVR42tWWy07CQBSGi8+gPoJLE4SitqC+AioLF9qLuDC6bKuuSNS4QTo1ConWF4AWgz6IlzdB94A9pVNunZluiDjJJA3MdD7+/z9n4DjGyKh3PZjcrIyZAFrOlxfTKrrmVesDA/nPknmVLNwssPbnNPdI0JxHrlSaoyxL5Az3fl1rnFJflpIrhYxi/WCQ8ckr6Hv1AO3SYETD6WTPmj1Bd2wCVELUnQdYIxpulwgFMLxidfsHWy9J6XYjBNk3N3kVtYLvuiQowXCqcBCeou7WAGAUxq0Nr4E9kTZhZdISMkgZSsnmOVaKYJ9vxciBA6VCZQbAjadIFSEzWBlWRtKy9eqDepmi5WMUqmkLWr0aC8ZXQrG+4BCwiQUE9uGgs0I7DBALhhRekmWs9ZNQzQkoQa/bZGWmDDSeGZheVT0zWoJng4I+41q2Vixv+ZbJ6J1mWRRMRNAJHdkLaD8XqMXMkIzeAqDLuDCQmfHPqFBQ9lDKcBCUNskyXkIXQdm3SWVPKW1aS5gc0OzCxugphasJJtgUKqNYHV4x81NtjGGPkSo7WCnC1dFeOUTbpP2eOkV8dVD6TKgUXB1Z3T2hZgSsgExBaEMQ7xkys7RXmmdfro3j4FcnaKGHNbD2//39+EugX0KgD3FX5kMVAAAAAElFTkSuQmCC)}button[id^=GPmousePositionPanelClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD2SURBVFiF7ZbRDoIwDEUZ36oPRP9GMVF+k1c5vpQ4l24CFkfITsIDY2l70+6yqirsDITcdcSocxdQKHxhjTMEHIE7ED0CgAMuwNkyt7kgEfOUsJ0mSsRcZc9gLsoSoOWTG+C8707WfNqcNSfxRsmnA+qgMyOP1GjOSaxioCklKuyejRhJOtLLYyZI4muilosJC4y89957P2H/LMEJUapZaGzxpuAmrv3Gn0YuNIBFXZqaUMUodszNwjVbUWuQEDPatmrpueuOQu4fq+WoSbwD76uPas1BpwbgZJV/rctpI52KupmIaoHGMndh86wxcpZs1/4KO+UFLQ+rEigj9BAAAAAASUVORK5CYII=)}.GPmousePositionCoords,.GPmousePositionLabel{display:inline-block;line-height:20px}.GPmousePositionLabel{font-weight:700;width:100px}.GPmousePositionCoords{width:110px}.GPshowMousePositionSettingsPicto{bottom:5px;right:0;transition:all .5s ease-out 0s}.GPmousePositionSettingsLabel{display:block;font-weight:700;line-height:16px;margin:auto;text-align:center}.GPmousePositionSettingsSelect{margin-top:5px;margin-inline:auto;width:180px}.GPSexagesimal,.GPSexagesimalsec{border:1px solid #ccc;border-radius:4px;margin:0}input:read-only.GPSexagesimal,input:read-only.GPSexagesimalsec{text-align:right}.GPmousePositionSexagesimalLabel{font-size:1.2em;padding:0;vertical-align:middle}select.GPmousePositionDirection{border:1px solid #999;margin-left:2px}select.GPmousePositionDirection:disabled{-webkit-appearance:none;-moz-appearance:none;background:transparent;border:none;color:#000}select.GPmousePositionDirection:disabled::-ms-expand{display:none}select.GPmousePositionDirection:disabled::-ms-value{color:#000}.GPmousePositionAltitudeUnits,.GPmousePositionUnits{margin-left:5px}.GPmousePositionPanelEditTools{position:absolute;right:5px;top:20px}.GPmousePositionEditTool{cursor:pointer;display:inline-block;height:18px;width:18px}[id^=GPreverseGeocodingPanel-]{width:280px}.GPshowReverseGeocodingPicto{background-position:1px;background-repeat:no-repeat}.GPreverseGeocodingPanelClose,.GPshowReverseGeocodingPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH0SURBVFiF7dY/bE1xFAfwvlZMhFSim0i6mdnNnUWiOqGShqlsSPyJ0VQV+jqUDsQgNrFIECxi0MmmibRTWRph0I/hncfPde9z7/Uakdzv9ju/c77nfN/33vPuwECDBg0a9AsYwUW8wTo+4QUO/evZfgGOYQlfsYpbGM7Je6sY4xX6TUaPwR45LczgdBUhLdyNgdbxEstxXsFoJv8sNvAYV3ENnyP/dQUx36KmnScq5roeORulReF4FD3B7oRsOuLP0Eryd2BfhmOm+4OU7DmbcfZGpkcrYilmywpaCmdGcu7uB9n+P3A8jLzlkj27j1KKNgYzznQxl+diEfkXvCq4mwzCoz3qzyeNr5Rq2ltU1r3yYoJ4Fe9Ty5O7y0E6VlB7IWn8CFtLNy4WVV9MkN6M4ulMfK/OSl7D9py6gzovKzyoKqaEqNxlUYZwWGeb0XlnTuJSiIHxAve6z/m7umISQdl3BuZrCQrSUTzPEK7hCM7gHrZkaubxEe1NEPN3LiXkBzCBMWyL2GKQL2Ko7vAlxczlxOqLKmg8hNtB/sMp7MJh7OmjmO7azl3p/RbVdWohYk/jvFLVOZv5x1pR1AIm4vwhabazItcJPz99cldzxqkNnOqXlqKhzul8YdypWT8VTv22QZOcVuRM1Z+0QYMGDf53fAdKmTphX0Bz5wAAAABJRU5ErkJggg==)}.GPreverseGeocodingReturnPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4AUXDwQyeFmCzQAAATJJREFUSMftliFLBFEURs/dVUQURJvYLCaLGESz1T9gUJsoWARBEBRM/obFIFgMKxtsNhG2aTUIBqOCySLsHssuTNiVGZ47aU8aZr5537vz3TfvwZAhg0K9UL/U5bLMuuyljFXJYXYOHGVuxcAM1VPg5D+/1sgfZsfAWY9HG+ok0AY+gFfgJSI+UzI7tBht9UHdUqtFzQ5M41GdKZLhQmJMa0A9d6VqqDXT2e41fvQxrQCXQK+X7oGnzvUoMA3MAyvAWEbXjIjVIllW1eseM9/vo59SrzK6ljpXtIGq6k0ew0wcdxntTqGFHxEtYBO4zTPBiBDYBX6SGlAdVRud9baeQ99tunrKz6CizubULnYMn8vczprqW+HdIoEaMF5mhRPqe2kVRsQ30Cj7WLI0PJwNnF82zKAINyZs+wAAAABJRU5ErkJggg==);background-position:0;background-repeat:no-repeat}.GPlocationHighlight{background-color:rgba(255,200,0,.25);color:#222}[id^=GProutePanel-]{width:320px}.GPshowRoutePicto{background-position:1px;background-repeat:no-repeat}.GProutePanelClose,.GPshowRoutePicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE3SURBVFiF7ZZBTkJBDEDnE125MhyHHV5FF0RvI58EOIYuTIw79S5wB3lu+vU7tp8Z6IiLectJp+1L/xRCqFQqfwawATan7sMNhFP3McQoPgAugEcilDiLJXCe0wRwI/d+9dOLaYB74C4n8Rh417rsS+wRAngGLjNkPuTeWpMSmbnE7JKlgCerw0whgIfEmm10bwE0kcwiimlThcbAm4NQzoS6T6nPGhjxczIdKwY+Ta2A+YYShQ55Q5ZUPL08mYTCX0LeGFLlZKSoNaFXYOqQ35JSl4WGl/EkhPDilKtJPDuePRO6OjK3tgAOmlJO0SJvyJBZKWe+UiWEBmS6ta2udK/iJYTK/bAmFC8hdM33Xx91NUeT2gG3XsXdhSTvTCZlbjORaoGZZ+EiQp6cZcZvi3RRqVT+DZ/jc6+cH/zb+QAAAABJRU5ErkJggg==)}form[id^=GProuteForm]{padding:15px}.GProuteStageFlexInput{max-height:28px;opacity:1}.GProuteStageFlexInputHidden{max-height:0;opacity:0;overflow:hidden}.GProutePointLabelP{margin:2px 0 5px}.GProuteComputationLabel{margin-bottom:5px}.GProuteOriginPointerImg,.GProuteStageRemove,.GProuteTransportImg,div[id^=GProuteStageAdd]{background-image:url(data:image/png;base64,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);font-size:0}.GProuteFormMini{max-height:58px}.GProuteExclusionsOption{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAA4CAYAAADuMJi0AAAE60lEQVRYw+2YWWxUZRTHz/fd7y4zzAzTbaAdpgtQWsBiYVxYGpcEMCwRQkx48KHGhKg0WhESNYglwSUgWCKGTaMRBF4MwShpECUshlJqay2U0LCUwrRAp+0Ms997v8UnEl8Gp9Ppg2Z+bzfnn+/knHvud865AFmy/GfZVVZW/vvb9eduNn7Wc+ixGQ3/pm+UcO735VP3/rpsyc39TudHyXQ4maF61cqfZi97ocbjmVi6YGHNxoOeor3JtDskae606uqzFfPmvRqLxFg4EetIpiXJDJqqOHBwEEjIDyXjiVw4t/S1XD34TKs/MX+z4EEAgK0SwhPtjh+qq6tXBjGOtTY11a31D371qEygRxn3F3vWPVE1deN0G82T+m5BbCAIF+8lBttifLoFQeV0Wf7R7XbndsXird19/TUfAhgZeZ8H7eoXHYVWwzdBFTedsmhScfg0wfQPTRF7FfLdmBRRo4Q9RzTS8aeKRaeERAsC8TmRto30HJKqMCrhIcMUMuMcmADQJAQ5GJ4fqUMpFdE2mXgqOe+ewXhJFCHoJNJxu4omz7bhScVMyj/BeFPGUrlZIROOYRT4C0C0S0h8qUhHAAC2yGTFpUka7Skfx9/DZFZGnH2gEHxYwnc6EIguBYnDqtTzT3uDTFb3VdrEcZfWk5GUrgZxaI4QCyyaBAME04sUzTvL+dBD+xnOu8qiwrIgV1leEuf9JxhvTzu6Bgm5ThXkmNcciriaS8R2lXySTHvUqXb/lqsNp3Ju0qstx2Z7sfTZGuKsLAFkV4RK0J5k2s4wXYqYsO6WyYq0HUYN06c9XgX5SxcBuIt4gvJ40sJi7MaVONtVhGHmqIrmyLPzm29tqqf7ilwHUtHvVAjO9tksWbJkyQzehd7xo5ppUqW2tlbzLp380rhxitdB8q/4fD6acnsaKfX19c7Ji+QNJU/at7mmWaaZpklHNSY+irq6urzSxbBBy1PqEoJZfFdYoK2tjY2Jw4aGBpurJvKOmme8xWTTmgjq1DApAwAxoo6fIkieEnoF2+NvUDVqCekRiNIY4ip1eb1ekvEI39/65nOyO7hWtyWc0biOogkDooYOBhhujLEDAIZG4xADAH/4sH796y42ZWBNxBGrCEZMlNBNER1k8fBtdixwwzzY2toaTCtCr9drLXzKthgSiv7ztycfjvQo4O5fpWqR5eGojg2DCX1IBHUf3n2nSey5cOpCXzrfIXp6WZXXMtdYh8pi74JTL3WTijO913tDq2qXVxplA5vijgdTIvE4RO6zYOwO3t5/GhpbTrYMjnh78nq9VlwRfRmVRdewArM6rgJBTLbxErYEAL4J5vetwFJ4jghQxMNSSAyoO42Ttl0Xz58PpzXqS5JE7G5tqrAbM6lMiyljkimoQg1m8VhK7xrFwTpdixcbAaGz2/I+ekba0dzc/iDt3SIUCtH+Lv+lArWwjWPOOeMVJjI1imgRsyXKDas+mxoc83vKUfOC/dO2lst3M7LM3L816LdLBedlTIKU05lUNfJM2ZzEBZORXzuHrtk+vnSu63JGF9LhvmH9/uVAu8s9MUQFnWUSIweHFJ90z7qlq+n6L2OyAQMA918NdLrcrqgwoQrHyAHWqX49PDzMxsohAIAUuZ0YsHJHSO+G5t7eXj+k8ZsEjfCmsQGABgAmAMQBIJEdN7L8//gb3FshBGMt81oAAAAASUVORK5CYII=)}.GProuteModeLabel{display:block;margin-bottom:5px;text-align:center}.GProuteTransportImg{content-visibility:hidden;cursor:pointer;display:inline-block;height:28px;width:28px}.GProuteTransportImg:first-of-type{margin-left:18px;margin-right:10px}input[id^=GProuteTransportCar]+.GProuteTransportImg{background-position:-112px 0}input[id^=GProuteTransportCar]:checked+.GProuteTransportImg{background-position:-140px 0}input[id^=GProuteTransportPedestrian]+.GProuteTransportImg{background-position:-168px 0}input[id^=GProuteTransportPedestrian]:checked+.GProuteTransportImg{background-position:-196px 0}div[id^=GProuteTransportChoice] input{display:none}div[id^=GProuteTransportChoice] .gpf-radio-btn-group{justify-content:center}select[id^=GProuteComputationSelect]{width:100px}.GProuteResultsDetailsInstructionHighlight{background-color:rgba(255,200,0,.25);color:#222}.GProuteResultStage{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex}.GProuteResultStageLabel,.GProuteResultStageValue,.GProuteResultsValueLabel{display:inline-block;line-height:18px}.GProuteResultStageLabel,.GProuteResultsValueLabel{color:#666}.GProuteResultStageLabel{width:60px}.GProuteResultsValueLabel{width:65px}.GProuteResultStageValue{-webkit-flex:1;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.GPshowRouteExclusionsPicto{right:0;top:unset;transform:translateY(-100%);transition:all .3s ease-out 0s}.GProuteExclusionsLabel{display:block;font-weight:700;line-height:16px;margin-bottom:8px;margin-top:8px;text-align:center}.GProuteExclusionsOptions{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.GProuteExclusionsOption{background-color:#fee;border:1px solid #a77;border-radius:3px;color:#a77;cursor:pointer;display:block;height:28px;line-height:26px;padding-left:28px;padding-right:5px}input:checked+.GProuteExclusionsOption{background-color:#efe;background-position:0 -28px;border:1px solid #797;color:#797}button[id^=GProuteReset]{background-image:url(data:image/png;base64,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);background-position:-224px;opacity:.8;transition:opacity .2s ease-out}div[id^=GProuteResultsValueDist],div[id^=GProuteResultsValueTime],input[id^=GProuteResultsShowDetails]+label+label:hover,input[id^=GProuteResultsShowDetails]+label:hover{color:#366291}div[id^=GProuteResultsStages]{margin-bottom:15px}div[id^=GProuteResultsValueDist],div[id^=GProuteResultsValueTime]{display:inline-block;font-weight:700;line-height:18px;width:80px}select[id^=GProuteResultsComputationSelect]{width:100px}div[id^=GProuteResultsNew]{background-color:#366291;background-image:url(data:image/png;base64,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);background-position:-224px 0;border-radius:3px;cursor:pointer;height:28px;opacity:.8;position:static;transition:opacity .2s ease-out;width:28px}.GPfakeBorder{border-bottom:1px solid #999;display:inline-block;height:14px;width:60px}.GPfakeBorderLeft{margin-left:15px}input[id^=GProuteResultsShowDetails]+label,input[id^=GProuteResultsShowDetails]+label+label{cursor:pointer;font-weight:700;line-height:28px;text-align:center;transition:color .2s ease-out;vertical-align:top;width:130px}input[id^=GProuteResultsShowDetails]+label,input[id^=GProuteResultsShowDetails]:checked+label+label{display:inline-block}input[id^=GProuteResultsShowDetails]+label+label,input[id^=GProuteResultsShowDetails]:checked+label{display:none}div:has(input[id^=GProuteResultsShowDetails])+div[id^=GProuteResultsDetails]{max-height:0;opacity:0}div:has(input[id^=GProuteResultsShowDetails]:checked)+div[id^=GProuteResultsDetails]{max-height:200px;opacity:1}div[id^=GProuteResultsDetails]{overflow-y:auto;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s}.GProuteResultsDetailsInstruction,.GProuteResultsDetailsNumber{color:#666;display:inline-block;line-height:16px;margin-top:4px}.GProuteResultsDetailsNumber{font-weight:700;text-align:right;vertical-align:top;width:22px}.GProuteResultsDetailsInstruction{padding-left:5px;width:calc(100% - 30px)}input[id^=GProuteSubmit-]{padding:0 10px;width:fit-content}[id^=GPsearchEngine-]{align-items:center;flex-direction:row}.GPshowSearchEnginePicto{background-position:0}.GPsearchRadioContainer,.GPshowSearchEnginePicto{background-image:url(data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWa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);background-repeat:no-repeat}.GPsearchRadioContainer{background-color:rgba(0,60,136,.5);background-position:-26px;border:2px solid hsla(0,0%,100%,.4);border-radius:4px;box-sizing:border-box;color:transparent;cursor:pointer;height:32px;overflow:hidden;padding:2px;position:relative;transition:border-radius .5s ease-out 0s;width:32px}.GPbuttonsContainer{padding-left:5px;padding-right:5px}.GPsearchRadioContainer:hover{background-color:rgba(0,60,136,.7)}.GPshowAdvancedSearch,.GPshowAdvancedSearch:hover{background-color:#fff0}.GPshowGeolocate{background-position:-102px;margin-right:5px}.GPshowGeolocate,.GPshowSearchByCoordinate{background-image:url(data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWa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);background-repeat:no-repeat;transition:border-radius .5s ease-out 0s}.GPshowSearchByCoordinate{background-position:-76px}.GPsearchInputReset{background-image:url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=);background-position:0}button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]{border:none;max-width:0}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]{border-top-right-radius:0}button[id^=GPsearchInputReset]{border-bottom-right-radius:5px;border-top-right-radius:5px;height:32px;width:32px}button[id^=GPadvancedSearchClose],button[id^=GPcoordinateSearchClose],button[id^=GPgeocodeResultsClose]{height:32px;right:0;top:0;width:30px}button[id^=GPcoordinateSearchClose],button[id^=GPgeocodeResultsClose]{background-position:0 0}button[id^=GPadvancedSearchClose]{background-repeat:no-repeat}button[id^=GPcoordinateSearchClose],button[id^=GPgeocodeResultsClose]{background-image:url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=)}button[id^=GPadvancedSearchClose]{background-image:url(data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWa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);background-position:-50px 3px}form[id^=GPsearchInput-]{width:280px}form[id^=GPsearchInput-] input{border:1px solid #999;border-bottom-right-radius:5px;border-top-right-radius:5px;color:#333;display:block;font-size:1em;padding:0 30px 0 5px;width:100%}form[id^=GPsearchInput-] input:disabled{background-color:#ddd;color:#999}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]{max-width:280px}.GPsearchInputText{height:32px}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{margin-left:33px;position:absolute;top:35px;width:310px}[id^=GPautocompleteResults-]{box-shadow:0 0 6px #000}dialog[id^=GPgeocodeResultsList],div[id^=GPautoCompleteList]{background-color:var(--background-default-grey);max-height:140px;position:absolute;width:280px}div[id^=GPautoCompleteList]{top:35px}dialog[id^=GPgeocodeResultsList]{border-radius:4px;overflow:hidden;position:absolute;top:35px}div[id^=GPgeocodeResults-]{background-color:#fff;max-height:140px;overflow-y:auto;position:relative;width:100%}.GPadvancedSearchCodeLabel,.GPadvancedSearchFilterLabel,.GPcoordinateSearchLabel{max-width:105px}.GPadvancedSearchCode,.GPadvancedSearchCodeLabel,.GPcoordinateSearchSystemsLabel,.GPcoordinateSearchSystemsSelect,div[id^=GPadvancedSearchFilters]{margin-top:15px}.GPadvancedSearchFilterInput,.GPadvancedSearchFilterLabel,.GPcoordinateSearchInput,.GPcoordinateSearchLabel,.GPcoordinateSearchSystemsLabel,.GPcoordinateSearchSystemsSelect,.GPcoordinateSearchUnitsLabel,.GPcoordinateSearchUnitsSelect{margin-bottom:5px}.GPshowToolBoxPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAlqAAAJagFGUcfpAAAAB3RJTUUH4AsKDCgkqrnTSAAAAw1JREFUSMe9ll2IlVUUhp9vnEintH+FulAyI+uihClKjSZtQJAJrRnDoKt+oCIIjSIrDCokKXQiCqkuTMFAJtQLCwItMsQbURmjiRIK+pmSoSjJ/JmnC98je6ZzjmVMCzbnO/vstd691nrf9R0YA1NRn2SsTX1E/UM9vVc1OdwC3A7cBLQD1wE/Al8AA0BfVVXf1vFbAmwCjgPjq+oUREsDkBuA3UBfwL4EXgS2AgJLgIPqw2pV+HUCG4B9/yTtF9Rj6pvqBeo4db7apU5N/VGXqofVHeo09Ub1N3Wdeo/6Z1m60SAL1KPqrQnWqR5Qt6pvqYfU1WqbWqnvqt+p89Sf1T61pSmQOkH9Wl2ZLDaru9T2gLapH6mvB6RXHVRvU79Rd6rnqteoH6vHGwEtV7/K4ZXq+qJME9VP1JfzfZU6lMwPqnvVSfltkvpMyl8X6L3ccmIyayuAdqjP5flZ9deA7M7lpqjjC5+eZkAH1AfT5LVxaFUfV39JoGXq72qHul39Qb0ypX5fvaIRUEnv6dHIZGAwe28Ac4DngQeAl4DFeZ4NLAAOAb3ZP1nEG6HREmgAmAEcBmYCTwFTgaXAEPAK0AMsBO4G7gT2A08Aj9YKM+qzbul61Q0hQ7+6L43tCVW71RXqCXVRUaJhdaOnbHIY2d2Mdd3q96F5e0TYFV3dl/4Nq/cHZE7m2avqLQXQeTlzohFQm/q5+k4C3ZFAD6mL4/h0frs6U2FzMpgdoEujq371ZCMg1GvDqjXqkTCuI1mtyZnLQv9dYWItO9VLwsC7GgIVYPfGaYU6K5rZmJtPUPeoAwla85lbALWcEagA61Svyoj5QD0nAbaoP0U71AJFvKoX50J/A2odDVRVFWo/8Fk00p13y2tAJzAv+6cvVmjGYo3QUWudjC4EPgSORjNHgGXAY3kfzcoqbcaZ9NM6eoID24CLMhGGgA5geabFzVn1bBAYBs4HLm/Wm3HqttB2ZtHof7va1U/Ts7oZvQ10AWuB67PO1vYAc+tls9qxsZETtinf/6PV/gX9b/YXjLd1o+WqCcMAAAAASUVORK5CYII=);background-repeat:no-repeat}.GPzoomIn{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHlsZT0ic3Ryb2tlOiMwYjZiYTc7c3Ryb2tlLW9wYWNpdHk6MSIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTcgMTJoMTBNMTIgN3YxMCIgc3R5bGU9InN0cm9rZTojMGI2YmE3O3N0cm9rZS1vcGFjaXR5OjEiLz48L3N2Zz4=);border-bottom:unset;border-bottom-left-radius:0;border-bottom-right-radius:0}.GPzoomIn,.GPzoomOut{background-position:50%;background-repeat:no-repeat;background-size:auto auto;height:32px;width:32px}.GPzoomOut{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHlsZT0iZmlsbDojZmZmO3N0cm9rZTojMGI2YmE3O3N0cm9rZS1vcGFjaXR5OjE7ZmlsbC1vcGFjaXR5OjEiLz48cGF0aCBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwIiBzdHlsZT0iZmlsbDojMGI2YmE3O3N0cm9rZTojMGI2YmE3O3N0cm9rZS1vcGFjaXR5OjE7b3BhY2l0eToxO2ZpbGwtb3BhY2l0eToxIi8+PC9zdmc+);border-top:unset;border-top-left-radius:0;border-top-right-radius:0}.GPzoomIn:hover,.GPzoomOut:hover{cursor:pointer}.ol-custom-full-screen button{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAA8CAYAAABxVAqfAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAxRJREFUWIXtmD9PVEEUxX/XXRaDWlvb8gUsBEMICpKowYbY2Vr4J5JQWWxtZyxsaFEE5Z8xWIDRIAklUT+Bn4FFwSXH4s2D9TEzb9ZEE3FP9+bde8/M27Nz7gx0cNxhxQFJfcCFQPwO8NTMmoWcKnAb6AnkbZjZx+hMJNXlx56kgUjegIvxoV6MPxGdxSEawIiZvQ8FuHeDwHZKwRTifeCGmb0rC3Sf8yrQLIstI94HKsA9Sd1lxSR1AXeBqsv9LeIGMAIsAqPAfIzckb4AxoAV4IqrkQYnrgMhSapJWnIimYnkPXcxS5JqbiwXXD2FeFLSYGGsJmlO0lYkb0vSy5y0ZbxP0kQKca00qE38iZod/IP4W+LybSD3PX+nLkkzkjYjxTddTFdhvB+4k0LcA7xt2UC6gFlgHPgaInbvxoHZnNzVWAPORPIOZpjbYkPSkKQF9/ymbMssxF5yNby2GCOWpGYKaYC82VLnCHGZO1XIXOaxme2WEZvZD+AJh64WRIofV4CFouB8cEJaLiNNJYaC4AKkA2RCOpVS0NfsDQFDgfgd4JGZfS/knAQmCTd7q2a2mjKhDjro4BjDZxYpBlKEd8uU9FnSYrGgpIt4TJ3siDNUiO12zf2XZGLgE3AdeJWTu8JrwGlPfA+wkpO7nHngGhA8BByBpIqkaeelK5JGY6ZeaB5GJC2757liK9QuedTUA81DlDRoi2a2D0yRnXVL/bUFefMw5RqD9oidkF6TnXXbRYXsWBuy16CqcyElmXoAvwiuiCOrcb9LL/AwUHDDM7YKfAvE90r6EPvsHRxP+LrMGlnH6NsawdMxlnSm22Sd6V7pbCT1S9qVH3VPfOgacldZk38E3v+xma3TxvVgAA1g2NVKI3bkG2TXg9EbugD2gbHY3Wdsy6wBD8i2v9K7yRbke/uEshNGOrEjnSNb8SvgMmnXgw0ykT0DhskOe0FyH/F8i7VV3VguuLonvt4qJElVlytJ8z6OkPOcBaaBW/ltvJmtKzuqng+s9EBIZtaUdBPYBc4lrzgGn7m33WV08F/gJ/JO7y3zOGA+AAAAAElFTkSuQmCC);background-repeat:no-repeat}.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=false]{background-position:0 0}.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=true]{background-position:0 -30px}.GPshowOverviewMap{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyA1LjcgOS4zIDNsNS40IDIuNyA1LjY3My0yLjQzMWEuNDUuNDUgMCAwIDEgLjYyNy40MTNWMTguM0wxNC43IDIxbC01LjQtMi43LTUuNjczIDIuNDMxQS40NS40NSAwIDAgMSAzIDIwLjMxN3ptMTIuNiAxMi45NTYgMy42LTEuNTQzVjUuNzNsLTMuNiAxLjU0M3ptLTEuOC0uMTE4VjcuMjYybC0zLjYtMS44djExLjI3NnptLTUuNC0xLjgxVjUuMzQzTDQuOCA2Ljg4N1YxOC4yN3oiLz48L3N2Zz4=);background-position:2px;background-repeat:no-repeat;background-size:auto auto}div[id^=GPlegends-]{display:none}div[id^=GPcatalog-]{display:block}.GPshowCatalogPicto{background-image:url(data:image/png;base64,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bS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDpjMmUxMjdjOC0xOTM1LTQ0OGEtYjYxYy0xY2RkNjI3NWZkYzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTFkYjFmNjktN2M0MC00MDgxLWJkZWEtN2YxMzFjODQ3OTg4IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NzdiZmRhYWMtNmEyNi00MTY5LWEzMWItYmZlN2Q5NThlOGU3IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzI5MTg5ODYxNDQxMDI1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZGI2YWQ2MTUtZWQwYS00MTEyLTljYjQtYTIyZDkwMDkwMGNkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0xMC0xN1QyMDozMTowMSswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5TF0SEAAAABmJLR0QA8gDyAPIuRIzMAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH6AoREh8BMSlSAgAAAXpJREFUWMPtl0FugzAQRf+Peo9ygC57AI7Col1EzR1ortBAKiWLpCdJcoduugoXaX43RnIpYEPdQCW+xMYaBj9G8z0GJk26qvjbBJJiABGAWwAnAAXJYlRAkhKzQVsnkkcrJgKwAxDXpHgG8DYkWBXorJ9KbBi5tRti7zcN68eaNftv+2w2kVSQXHr8wEcA9wDmJC8NMQTwAuCDZBayej7VKXXwgZH0aeK3kmZ1MJIyE3ORtAgJFKubIke+vBK/NtWwYdaVmDwkUNIRKHbko6RV5Z2tpFmlMqU2dVW8WoU8czZB5cFgTK98exwu2KuHHFDBYFy2nXoCJR2/2wS19YXpRWyseO8RmrpMwfOwJ64h00+HSkV3xjjKtbMPVIMB9KpSsPOppgfPPr3U4mbZoFANxtIXZtZm6aMd9wc/WP8A6MEafTYto8/KGn2eul4fUnPHCaGl6xohaQ7gDsCCpFqG0wzAO8nXEOdQX8VjuD7sA36jwKRJk/6NvgB/JgixGmzy6AAAAABJRU5ErkJggg==);background-position:0;background-repeat:no-repeat}dialog[id^=GPcatalogPanel-]{width:280px}.GPcatalogPanelClose{background-image:url(data:image/png;base64,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bS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDpjMmUxMjdjOC0xOTM1LTQ0OGEtYjYxYy0xY2RkNjI3NWZkYzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTFkYjFmNjktN2M0MC00MDgxLWJkZWEtN2YxMzFjODQ3OTg4IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NzdiZmRhYWMtNmEyNi00MTY5LWEzMWItYmZlN2Q5NThlOGU3IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzI5MTg5ODYxNDQxMDI1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZGI2YWQ2MTUtZWQwYS00MTEyLTljYjQtYTIyZDkwMDkwMGNkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0xMC0xN1QyMDozMTowMSswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5TF0SEAAAABmJLR0QA8gDyAPIuRIzMAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH6AoREh8BMSlSAgAAAXpJREFUWMPtl0FugzAQRf+Peo9ygC57AI7Col1EzR1ortBAKiWLpCdJcoduugoXaX43RnIpYEPdQCW+xMYaBj9G8z0GJk26qvjbBJJiABGAWwAnAAXJYlRAkhKzQVsnkkcrJgKwAxDXpHgG8DYkWBXorJ9KbBi5tRti7zcN68eaNftv+2w2kVSQXHr8wEcA9wDmJC8NMQTwAuCDZBayej7VKXXwgZH0aeK3kmZ1MJIyE3ORtAgJFKubIke+vBK/NtWwYdaVmDwkUNIRKHbko6RV5Z2tpFmlMqU2dVW8WoU8czZB5cFgTK98exwu2KuHHFDBYFy2nXoCJR2/2wS19YXpRWyseO8RmrpMwfOwJ64h00+HSkV3xjjKtbMPVIMB9KpSsPOppgfPPr3U4mbZoFANxtIXZtZm6aMd9wc/WP8A6MEafTYto8/KGn2eul4fUnPHCaGl6xohaQ7gDsCCpFqG0wzAO8nXEOdQX8VjuD7sA36jwKRJk/6NvgB/JgixGmzy6AAAAABJRU5ErkJggg==)}.GPtabsList{background-color:#f1f1f1;border:1px solid #ccc;display:flex;list-style-type:none;margin:0;overflow:hidden;padding:0}.GPtabList{flex:1 1 0px}.GPtabButton{background-color:inherit;border:none;cursor:pointer;float:left;outline:none;padding:14px 16px;transition:.3s}.GPtabButtonActive{background-color:#ccc}.GPtabContent{border:1px solid #ccc;border-top:none;display:none;padding:6px 12px}.GPtabContentSelected{display:block}.GPlabelActive:hover{background-color:#ccc}.GPcatalogButtonSection{background:unset;border:unset}button[aria-expanded=true].GPcatalogButtonSection span.GPshowCatalogAdvancedTools{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.GPshowCatalogAdvancedTools{background-image:url(data:image/png;base64,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ICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmM1NWM2ODRkLWY2OGQtNDExNy04ZGYzLTAwYWMzMjQ4YTY5YSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjNmYWM4YTllLWJkMTUtNGJiOC04ZGQyLTkwZDUyMjE0YmFmOCIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1QOlRpbWVTdGFtcD0iMTcyOTI0NTAwMjg0NjU2OCIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjMwIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjcwMTNhZTFjLTcyMjktNDJmZS1iMzAzLTU3NGFmMWE3ZmQxMyIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMTAtMThUMTE6NTA6MDIrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+UnHxogAAAAZiS0dEAPIA8gDyLkSMzAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+gKEgkyAorMuigAAAIkSURBVFjD7Zc/aBRBFMa/t39EFEMQTrQ2CiIi+K+Q3ZA+CLJ7nqWQwlRJGs3ddUnlZdUiXJEqINjE9e5UjFWag9sEbNRGhGB6MXKgQQPxZp5FLhLCXXbXXSQH8ytnhuF9771v3yygUCgUCkVXKOrB6/dqJzQD42A5DNAZAGBglYA3UlB55ZHztWcFWoXaLTDPAzjW5cgGMUYanlvpOYFtcc8inGVi5A6aSAptS50/761co+QAAOxCba/GH6TJgcaD3HqSoKx89RMx15tH5MTHqdzW7r3zU/6h47+0WSYaCmbcc2F3aftuGhjfpy075asPrI8lTjtjgYlG+zf1JbvoZ3aW7aKf6d/Ul5hoFIyFxBW08tUPAC7Giw3vl2fcS0k1tq3xBEATpN3UmLYkxCsAp8C4G3ju0yj3aCH7pzstNkrO3zbtkLGBNLwTlJznIG1wO2uyLiFWAJggzYoqDgCM8ILE7i9OXL0dDx7+PZH5iast0isAYLDIrh8VTXuyMpeKBwFei28fWkvTg8KACDzXCjzXEgZEXA+GCKTFf/gwv07cnp47DaLbBFxhqb+zCi8uD+ZfXmCpvyXgGhh3As+dTixQCioD2IgR23ezZZYPkgdDB709Wc0ywY8y6Jkpu+w5tTQH9dB9/+RuD9Yf5r6k/lTbFsnzAPV1qxwzjaQt7r8+tu2inwHrY8wYBnC2vbzKoEWzZZbrj298U/8uCoVCoegx/gAQwd9vpqyHDwAAAABJRU5ErkJggg==);background-position:-26px 0;display:inline-block;height:28px;vertical-align:middle;width:28px}#header-search>label,div[id^=GPterritories-]{display:none}div[id^=GPcontrolList-] .GPshowOpen>span{color:#fff;display:block;font-size:24px;height:24px;line-height:24px;pointer-events:none}button[id^=GPshowControlListPicto-][aria-pressed=true]+dialog{width:200px}.GPcontrolListPanelClose{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIRSURBVFiF7ZbRS1RBFMbPbLq9ldjaY88Zkv1JQRqt+Wf0aCrYBuY/UkRQRFQvQQax+JipEUIoQdHq/nrYb3K8zl33zl20h/vBwnLOmfPNN+fMmWtWoUKFMwPwjiO8Pu/9xOAGDQRqZnYYmLrOuQvD31I51AYJAqbNbNnMfgXm38AyMFV2E8AssKpDy4txwAowX4booogO1WYdYEu/jmwHIqqXEOPzr8VEScwjxXSTREnMSyXZBGaAscA/DtyTOIDnKaKAFsfxGHCB38kWopUiaNVffmC8T9wE8FaxKwk8vpVCrAG1TGU8nsSqeBrJLbXBl5gY4C7wOSNqW+13Y4iistUrLkYE/lTu5PhfAR8ytjmteViYMF9UeTFK3qZ36S9HfJeAP8CDjL2hqq4nkVpfUdFhEcNIjv2ame045/aA22Z2PeMbNbOn4QLn3C6wK38ZxN7Ggd/LKICfwKb+tyMntgGcOAzgO/AjkTM2AJKqFEvuW27s9Oh/aybUch8T+PKmWdaWJiro49kCa+a1ZmFIYvzYjo70ooJu6rS/Ao0B4q8C31TVyYJcZ/aw+iRv+omSmPeKXUrgmeHo0yc6mjOV6gL3i/IYUAdeKMkW0ASuBP6G2mxHMc+A0cJEvVxNVSp3mklUC2imcPgkdSU5CE5nWyK6snXofXUniTkXAFPAIvAJ2Af2gHVgoeidqVChwv+NvxOT737B3Fc7AAAAAElFTkSuQmCC)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div{align-items:center;column-gap:1rem;display:flex;flex-direction:row;padding:.5rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div:hover{background-color:#eee;cursor:pointer}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button{flex-shrink:0}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button:hover{background-color:rgba(0,60,136,.5)} +.GPlayerInfoLink a:hover{color:inherit;text-decoration:none}.GPlayerName{cursor:move;left:28px;line-height:28px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 56px)}.outOfRange .GPlayerName{color:#aaa}div[id^=GPlayerInfoContent]{width:280px}[id*=GPlocationOriginPointer]{background-repeat:no-repeat}[id*=GPlocationOriginPointer],[id^=GPlocationStageAdd],[id^=GPlocationStageRemove]{background-image:url(data:image/png;base64,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)}[id^=GPlocationStageAdd],[id^=GPlocationStageRemove]{border:none;cursor:pointer;height:28px;width:28px}.GPlocationOpen{background-color:unset}.GPlocationStageRemove{background-position:-84px}.GPlocationStageAdd{background-position:-56px}[id*=GPlocationOriginPointer]+.GPlocationOriginPointerImg{background-position:-1px}[id*=GPlocationOriginPointer]:checked+.GPlocationOriginPointerImg{background-position:-29px}.GPlocationStageFlexInput{max-height:28px;opacity:1}button.GPlocationOriginPointerImg[id*=GPlocationOriginPointerImg]{border-bottom-right-radius:3px;border-right:1px solid #999;border-top-right-radius:3px;width:28px}.GPlocationStageFlexInput{margin-bottom:5px}button[id^=GPshowMeasureAreaPicto-]{background-image:url(data:image/png;base64,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);background-position:-78px;background-repeat:no-repeat}button[id^=GPshowMeasureAreaPicto-][aria-pressed=false]{background-color:rgba(0,60,136,.5)}button[id^=GPshowMeasureAreaPicto-][aria-pressed=true]{background-color:rgba(0,60,136,.7)}button[id^=GPshowMeasureLengthPicto-]{background-image:url(data:image/png;base64,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);background-position:-24px;background-repeat:no-repeat}button[id^=GPshowMeasureLengthPicto-][aria-pressed=false]{background-color:rgba(0,60,136,.5)}button[id^=GPshowMeasureLengthPicto-][aria-pressed=true]{background-color:rgba(0,60,136,.7)}button[id^=GPshowMeasureAzimuthPicto-]{background-image:url(data:image/png;base64,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);background-position:2px;background-repeat:no-repeat}button[id^=GPshowMeasureAzimuthPicto-][aria-pressed=false]{background-color:rgba(0,60,136,.5)}button[id^=GPshowMeasureAzimuthPicto-][aria-pressed=true]{background-color:rgba(0,60,136,.7)}.GPmeasureTooltip{background:rgba(0,0,0,.5);border-radius:4px;color:#fff;padding:4px 8px;position:relative;white-space:nowrap}.GPmeasureTooltip-measure{font-weight:700}.GPmeasureTooltip-info{font-size:.75em;text-align:center}.GPmeasureTooltip-static{background-color:#fc3;border:1px solid #fff;color:#000}.GPmeasureTooltip-hidden{display:none}.GPmeasureTooltip-info:before,.GPmeasureTooltip-measure:before,.GPmeasureTooltip-static:before{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid rgba(0,0,0,.5);bottom:-6px;content:"";left:50%;margin-left:-7px;position:absolute}.GPmeasureTooltip-static:before{border-top-color:#fc3}[id^=GPmousePositionPanel-]{width:280px}button[id^=GPshowMousePositionPicto-]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD2SURBVFiF7ZbRDoIwDEUZ36oPRP9GMVF+k1c5vpQ4l24CFkfITsIDY2l70+6yqirsDITcdcSocxdQKHxhjTMEHIE7ED0CgAMuwNkyt7kgEfOUsJ0mSsRcZc9gLsoSoOWTG+C8707WfNqcNSfxRsmnA+qgMyOP1GjOSaxioCklKuyejRhJOtLLYyZI4muilosJC4y89957P2H/LMEJUapZaGzxpuAmrv3Gn0YuNIBFXZqaUMUodszNwjVbUWuQEDPatmrpueuOQu4fq+WoSbwD76uPas1BpwbgZJV/rctpI52KupmIaoHGMndh86wxcpZs1/4KO+UFLQ+rEigj9BAAAAAASUVORK5CYII=);background-position:1px;background-repeat:no-repeat}.GPmousePositionEditTool{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAYAAAAzI3woAAAB40lEQVR42tWWy07CQBSGi8+gPoJLE4SitqC+AioLF9qLuDC6bKuuSNS4QTo1ConWF4AWgz6IlzdB94A9pVNunZluiDjJJA3MdD7+/z9n4DjGyKh3PZjcrIyZAFrOlxfTKrrmVesDA/nPknmVLNwssPbnNPdI0JxHrlSaoyxL5Az3fl1rnFJflpIrhYxi/WCQ8ckr6Hv1AO3SYETD6WTPmj1Bd2wCVELUnQdYIxpulwgFMLxidfsHWy9J6XYjBNk3N3kVtYLvuiQowXCqcBCeou7WAGAUxq0Nr4E9kTZhZdISMkgZSsnmOVaKYJ9vxciBA6VCZQbAjadIFSEzWBlWRtKy9eqDepmi5WMUqmkLWr0aC8ZXQrG+4BCwiQUE9uGgs0I7DBALhhRekmWs9ZNQzQkoQa/bZGWmDDSeGZheVT0zWoJng4I+41q2Vixv+ZbJ6J1mWRRMRNAJHdkLaD8XqMXMkIzeAqDLuDCQmfHPqFBQ9lDKcBCUNskyXkIXQdm3SWVPKW1aS5gc0OzCxugphasJJtgUKqNYHV4x81NtjGGPkSo7WCnC1dFeOUTbpP2eOkV8dVD6TKgUXB1Z3T2hZgSsgExBaEMQ7xkys7RXmmdfro3j4FcnaKGHNbD2//39+EugX0KgD3FX5kMVAAAAAElFTkSuQmCC)}button[id^=GPmousePositionPanelClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD2SURBVFiF7ZbRDoIwDEUZ36oPRP9GMVF+k1c5vpQ4l24CFkfITsIDY2l70+6yqirsDITcdcSocxdQKHxhjTMEHIE7ED0CgAMuwNkyt7kgEfOUsJ0mSsRcZc9gLsoSoOWTG+C8707WfNqcNSfxRsmnA+qgMyOP1GjOSaxioCklKuyejRhJOtLLYyZI4muilosJC4y89957P2H/LMEJUapZaGzxpuAmrv3Gn0YuNIBFXZqaUMUodszNwjVbUWuQEDPatmrpueuOQu4fq+WoSbwD76uPas1BpwbgZJV/rctpI52KupmIaoHGMndh86wxcpZs1/4KO+UFLQ+rEigj9BAAAAAASUVORK5CYII=)}.GPmousePositionCoords,.GPmousePositionLabel{display:inline-block;line-height:20px}.GPmousePositionLabel{font-weight:700;width:100px}.GPmousePositionCoords{width:110px}.GPshowMousePositionSettingsPicto{bottom:5px;right:0;transition:all .5s ease-out 0s}.GPmousePositionSettingsLabel{display:block;font-weight:700;line-height:16px;margin:auto;text-align:center}.GPmousePositionSettingsSelect{margin-top:5px;margin-inline:auto;width:180px}.GPSexagesimal,.GPSexagesimalsec{border:1px solid #ccc;border-radius:4px;margin:0}input:read-only.GPSexagesimal,input:read-only.GPSexagesimalsec{text-align:right}.GPmousePositionSexagesimalLabel{font-size:1.2em;padding:0;vertical-align:middle}select.GPmousePositionDirection{border:1px solid #999;margin-left:2px}select.GPmousePositionDirection:disabled{-webkit-appearance:none;-moz-appearance:none;background:transparent;border:none;color:#000}select.GPmousePositionDirection:disabled::-ms-expand{display:none}select.GPmousePositionDirection:disabled::-ms-value{color:#000}.GPmousePositionAltitudeUnits,.GPmousePositionUnits{margin-left:5px}.GPmousePositionPanelEditTools{position:absolute;right:5px;top:20px}.GPmousePositionEditTool{cursor:pointer;display:inline-block;height:18px;width:18px}[id^=GPreverseGeocodingPanel-]{width:280px}.GPshowReverseGeocodingPicto{background-position:1px;background-repeat:no-repeat}.GPreverseGeocodingPanelClose,.GPshowReverseGeocodingPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH0SURBVFiF7dY/bE1xFAfwvlZMhFSim0i6mdnNnUWiOqGShqlsSPyJ0VQV+jqUDsQgNrFIECxi0MmmibRTWRph0I/hncfPde9z7/Uakdzv9ju/c77nfN/33vPuwECDBg0a9AsYwUW8wTo+4QUO/evZfgGOYQlfsYpbGM7Je6sY4xX6TUaPwR45LczgdBUhLdyNgdbxEstxXsFoJv8sNvAYV3ENnyP/dQUx36KmnScq5roeORulReF4FD3B7oRsOuLP0Eryd2BfhmOm+4OU7DmbcfZGpkcrYilmywpaCmdGcu7uB9n+P3A8jLzlkj27j1KKNgYzznQxl+diEfkXvCq4mwzCoz3qzyeNr5Rq2ltU1r3yYoJ4Fe9Ty5O7y0E6VlB7IWn8CFtLNy4WVV9MkN6M4ulMfK/OSl7D9py6gzovKzyoKqaEqNxlUYZwWGeb0XlnTuJSiIHxAve6z/m7umISQdl3BuZrCQrSUTzPEK7hCM7gHrZkaubxEe1NEPN3LiXkBzCBMWyL2GKQL2Ko7vAlxczlxOqLKmg8hNtB/sMp7MJh7OmjmO7azl3p/RbVdWohYk/jvFLVOZv5x1pR1AIm4vwhabazItcJPz99cldzxqkNnOqXlqKhzul8YdypWT8VTv22QZOcVuRM1Z+0QYMGDf53fAdKmTphX0Bz5wAAAABJRU5ErkJggg==)}.GPreverseGeocodingReturnPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4AUXDwQyeFmCzQAAATJJREFUSMftliFLBFEURs/dVUQURJvYLCaLGESz1T9gUJsoWARBEBRM/obFIFgMKxtsNhG2aTUIBqOCySLsHssuTNiVGZ47aU8aZr5537vz3TfvwZAhg0K9UL/U5bLMuuyljFXJYXYOHGVuxcAM1VPg5D+/1sgfZsfAWY9HG+ok0AY+gFfgJSI+UzI7tBht9UHdUqtFzQ5M41GdKZLhQmJMa0A9d6VqqDXT2e41fvQxrQCXQK+X7oGnzvUoMA3MAyvAWEbXjIjVIllW1eseM9/vo59SrzK6ljpXtIGq6k0ew0wcdxntTqGFHxEtYBO4zTPBiBDYBX6SGlAdVRud9baeQ99tunrKz6CizubULnYMn8vczprqW+HdIoEaMF5mhRPqe2kVRsQ30Cj7WLI0PJwNnF82zKAINyZs+wAAAABJRU5ErkJggg==);background-position:0;background-repeat:no-repeat}.GPlocationHighlight{background-color:rgba(255,200,0,.25);color:#222}[id^=GProutePanel-]{width:320px}.GPshowRoutePicto{background-position:1px;background-repeat:no-repeat}.GProutePanelClose,.GPshowRoutePicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE3SURBVFiF7ZZBTkJBDEDnE125MhyHHV5FF0RvI58EOIYuTIw79S5wB3lu+vU7tp8Z6IiLectJp+1L/xRCqFQqfwawATan7sMNhFP3McQoPgAugEcilDiLJXCe0wRwI/d+9dOLaYB74C4n8Rh417rsS+wRAngGLjNkPuTeWpMSmbnE7JKlgCerw0whgIfEmm10bwE0kcwiimlThcbAm4NQzoS6T6nPGhjxczIdKwY+Ta2A+YYShQ55Q5ZUPL08mYTCX0LeGFLlZKSoNaFXYOqQ35JSl4WGl/EkhPDilKtJPDuePRO6OjK3tgAOmlJO0SJvyJBZKWe+UiWEBmS6ta2udK/iJYTK/bAmFC8hdM33Xx91NUeT2gG3XsXdhSTvTCZlbjORaoGZZ+EiQp6cZcZvi3RRqVT+DZ/jc6+cH/zb+QAAAABJRU5ErkJggg==)}form[id^=GProuteForm]{padding:15px}.GProuteStageFlexInput{max-height:28px;opacity:1}.GProuteStageFlexInputHidden{max-height:0;opacity:0;overflow:hidden}.GProutePointLabelP{margin:2px 0 5px}.GProuteComputationLabel{margin-bottom:5px}.GProuteOriginPointerImg,.GProuteStageRemove,.GProuteTransportImg,div[id^=GProuteStageAdd]{background-image:url(data:image/png;base64,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);font-size:0}.GProuteFormMini{max-height:58px}.GProuteExclusionsOption{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAA4CAYAAADuMJi0AAAE60lEQVRYw+2YWWxUZRTHz/fd7y4zzAzTbaAdpgtQWsBiYVxYGpcEMCwRQkx48KHGhKg0WhESNYglwSUgWCKGTaMRBF4MwShpECUshlJqay2U0LCUwrRAp+0Ms997v8UnEl8Gp9Ppg2Z+bzfnn+/knHvud865AFmy/GfZVVZW/vvb9eduNn7Wc+ixGQ3/pm+UcO735VP3/rpsyc39TudHyXQ4maF61cqfZi97ocbjmVi6YGHNxoOeor3JtDskae606uqzFfPmvRqLxFg4EetIpiXJDJqqOHBwEEjIDyXjiVw4t/S1XD34TKs/MX+z4EEAgK0SwhPtjh+qq6tXBjGOtTY11a31D371qEygRxn3F3vWPVE1deN0G82T+m5BbCAIF+8lBttifLoFQeV0Wf7R7XbndsXird19/TUfAhgZeZ8H7eoXHYVWwzdBFTedsmhScfg0wfQPTRF7FfLdmBRRo4Q9RzTS8aeKRaeERAsC8TmRto30HJKqMCrhIcMUMuMcmADQJAQ5GJ4fqUMpFdE2mXgqOe+ewXhJFCHoJNJxu4omz7bhScVMyj/BeFPGUrlZIROOYRT4C0C0S0h8qUhHAAC2yGTFpUka7Skfx9/DZFZGnH2gEHxYwnc6EIguBYnDqtTzT3uDTFb3VdrEcZfWk5GUrgZxaI4QCyyaBAME04sUzTvL+dBD+xnOu8qiwrIgV1leEuf9JxhvTzu6Bgm5ThXkmNcciriaS8R2lXySTHvUqXb/lqsNp3Ju0qstx2Z7sfTZGuKsLAFkV4RK0J5k2s4wXYqYsO6WyYq0HUYN06c9XgX5SxcBuIt4gvJ40sJi7MaVONtVhGHmqIrmyLPzm29tqqf7ilwHUtHvVAjO9tksWbJkyQzehd7xo5ppUqW2tlbzLp380rhxitdB8q/4fD6acnsaKfX19c7Ji+QNJU/at7mmWaaZpklHNSY+irq6urzSxbBBy1PqEoJZfFdYoK2tjY2Jw4aGBpurJvKOmme8xWTTmgjq1DApAwAxoo6fIkieEnoF2+NvUDVqCekRiNIY4ip1eb1ekvEI39/65nOyO7hWtyWc0biOogkDooYOBhhujLEDAIZG4xADAH/4sH796y42ZWBNxBGrCEZMlNBNER1k8fBtdixwwzzY2toaTCtCr9drLXzKthgSiv7ztycfjvQo4O5fpWqR5eGojg2DCX1IBHUf3n2nSey5cOpCXzrfIXp6WZXXMtdYh8pi74JTL3WTijO913tDq2qXVxplA5vijgdTIvE4RO6zYOwO3t5/GhpbTrYMjnh78nq9VlwRfRmVRdewArM6rgJBTLbxErYEAL4J5vetwFJ4jghQxMNSSAyoO42Ttl0Xz58PpzXqS5JE7G5tqrAbM6lMiyljkimoQg1m8VhK7xrFwTpdixcbAaGz2/I+ekba0dzc/iDt3SIUCtH+Lv+lArWwjWPOOeMVJjI1imgRsyXKDas+mxoc83vKUfOC/dO2lst3M7LM3L816LdLBedlTIKU05lUNfJM2ZzEBZORXzuHrtk+vnSu63JGF9LhvmH9/uVAu8s9MUQFnWUSIweHFJ90z7qlq+n6L2OyAQMA918NdLrcrqgwoQrHyAHWqX49PDzMxsohAIAUuZ0YsHJHSO+G5t7eXj+k8ZsEjfCmsQGABgAmAMQBIJEdN7L8//gb3FshBGMt81oAAAAASUVORK5CYII=)}.GProuteModeLabel{display:block;margin-bottom:5px;text-align:center}.GProuteTransportImg{content-visibility:hidden;cursor:pointer;display:inline-block;height:28px;width:28px}.GProuteTransportImg:first-of-type{margin-left:18px;margin-right:10px}input[id^=GProuteTransportCar]+.GProuteTransportImg{background-position:-112px 0}input[id^=GProuteTransportCar]:checked+.GProuteTransportImg{background-position:-140px 0}input[id^=GProuteTransportPedestrian]+.GProuteTransportImg{background-position:-168px 0}input[id^=GProuteTransportPedestrian]:checked+.GProuteTransportImg{background-position:-196px 0}div[id^=GProuteTransportChoice] input{display:none}div[id^=GProuteTransportChoice] .gpf-radio-btn-group{justify-content:center}select[id^=GProuteComputationSelect]{width:100px}.GProuteResultsDetailsInstructionHighlight{background-color:rgba(255,200,0,.25);color:#222}.GProuteResultStage{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex}.GProuteResultStageLabel,.GProuteResultStageValue,.GProuteResultsValueLabel{display:inline-block;line-height:18px}.GProuteResultStageLabel,.GProuteResultsValueLabel{color:#666}.GProuteResultStageLabel{width:60px}.GProuteResultsValueLabel{width:65px}.GProuteResultStageValue{-webkit-flex:1;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.GPshowRouteExclusionsPicto{right:0;top:unset;transform:translateY(-100%);transition:all .3s ease-out 0s}.GProuteExclusionsLabel{display:block;font-weight:700;line-height:16px;margin-bottom:8px;margin-top:8px;text-align:center}.GProuteExclusionsOptions{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.GProuteExclusionsOption{background-color:#fee;border:1px solid #a77;border-radius:3px;color:#a77;cursor:pointer;display:block;height:28px;line-height:26px;padding-left:28px;padding-right:5px}input:checked+.GProuteExclusionsOption{background-color:#efe;background-position:0 -28px;border:1px solid #797;color:#797}button[id^=GProuteReset]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPwAAAAcCAYAAABF79LlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAyySURBVHic7Zx/bFXXfcA/33ufHZjtkKcNhkVVtqpVtGUszUhs3BEFJWo0KYRUCKMqUynY5t2HAZuxdRkqLM5Gl3bVTJ4JPN/nXyyVkDBpGCvTUKOkodmKYtpRJWukTKgr0jY7yeS3wGuKzLv3uz/uffbz8/v9nkFE7yMhP5977vkcR/7e7z3nexyoUaNGjRo1atSoUaPGHYzc7gnUqLEYRKPRVYZhHFfVRtd1u7u7u99bTF/btv5VyUDguOA2utD949F9i+orl8DtnkCNGouBYRg28ISIYJrmK8B9i+lzAqYt6BMgGLDovnIxyrnJtm21bVurPZlctHREtKUjcst8NT4RPJL2+XfvdJ+qfktV46r6YCXj1DJ8BukPskAgsKqzs/N/bud8apSHqraKyDmgEdi82D5RaVXRc0CjVNmnqt8C/tz/tgX4cbljFR3w0Wh0hWEYPcATqTbbti+LyLlAIDDQ0dHxYbmTyMYXvhJdkayf8Xx+CLZ0Ri6Lq+dmMAYuj/VU1XeriMViO1X1wcnJyV19fX1utj6qKrFYbAB4z7KsF2/xFO9obNteA7wkIleAzaFQ6KeL6WvbfnSNY7ovqeoVdd3Nl078SVV9qvrXzAU7VLjvVtTNtm23AyNAU44u11S1MxwOv1zJZFK0dL7Qjkpen6h0vjXWUxVfOouZ4f1gH8RbSg1PTk5amUHvB/tRYDegQE+1gr6/v39pQ0PD28Bn83Q7GQwGt23dutWp1NfW3r/UaQq8DZrbp5xcnWjedvp0+b7BwcE2EflL4I8WDK/6eDgcfrXcsbPR0nGkDYysPjH08beG91XFp6rPAn0ZzXtE5Fi5YxZcw/vBfgpoUtUzqjq7VhGRDSJyFrhbRMYHBwe3lDuRFH6wn8IL9jMqcz5V2YBwFrhbRcdbdwxU7LuVuK77eeb+m3c1Nze/qKqzD10/2I/hBTuAqOrvVMM9Pj5e39DQ8Ar5gx3g6Xg8vuAXuVTua++rd5rMV/IGO4Dw9NW7pyryiciPyBJ8AIZhfK2SsbNj5PS5jlTFp6oHWBjsAJtU9RlV/ZqqblfV9ar6G8WOmzfgo9HoCrzMLsAz4XB4czgc/mHqeigUuhAKhb4EHABEREZGR0eXFyvP5Atfia7wM7ugPDMx2rv50si+Wd+lsZ4LEyO9X1Lfp6IjD+wYKNt3q7Esaw+Qnq13xWKxWF9fn5GW2XelLqrq0NTU1N5quOPx+Bg5fkkzUdXOSn0NjcGifVTBB3wD+KeFQ+sXo9FoSxXGn49k94nwxQc7ByryqeqfAn+T4/LjwDeBvwXGgDeBD1T1h6r6VVU18087D7ZtHwa+rqpnwuFw3o0I27bPAptE5HAoFDqUr28uWjojh1G+DpyZGO3N63uoY+CsoJtE9fBbY/tK9h07dqxxyZIlC37+ZDJ5LfVZRO41TXMys09nZ+f1Un0p0tbne1JthmEMO44zIyLdaf2GpqamwrnW+aVg2/Zx0h4kRTBTV1f3qXL3ZVo6I8fR0nw3VT5V7r6MbdtJy7ICeSpH71iW9fvljJ2Nlo5IcmK0N5CrcqTwzqXR3rJ8qtoDRCqY3r/ixeF0touFXumf9L++UMgiIv0AqrqxpOmlo55PRQv6UDyfIWX5AoHAZDKZvJb5b55C9b1sfUZGRnLtLRRERDQUCvWQluld1+1axGBXSgt2gPqbN2++WY6vpSOiJQY7QH2daFk+n0SO9iv+1zW2bS+rYPwifXIFQGDN2lDZvnvLvC/FHwLfzZXps2b4XE9Ky7Ik/Xrm97n6FyLXk3JitFfSr2d+n6t/Mdi2fR2vZFMygUDg7kqyPHiZfmhoaEBV96S3u647/P777y/YzCuEbdvrVfU5EXm0knnlICEi5xOJxLb9+/f/CqC1I7Je0edgcXzAefO6s+3iac+XD9u2fw48APxfervruq11dXXTjuOMAesBgsFgoNINyZaOyM+dwJIHzOSN+T6R1jqS046as77V15sDpWxI+ns6MaCrkjkCO0TkRGZjrQ5/G0nfsEshIiWXXQYHB9uA74vI0qpMbCGNqrqloaFhGrBaOo60KXwfFs8HbEk2mdOAla/j+Ph4fTwez/b66riu+25XV1cCeNi2bRvYUmmw39feVw9k9TXeZb77xvGeBPDwQx0RW2BLqdUHEVFVtfBic3uWLq8C/+Z/rgOCwGeAdcBdaf1CwIkF4+eT27b9U+B+VX0kfbMuG9FodINhGD8ALluW9Qf5+uaipSPi+UQfSd+sy8a6riMbXNfzTYz2luy7XWt4WFB6y0bWkl0ubNt+g/knvRaLDy3LWtHSEbllvonR3hXFdPRf2dMz7ofBYLC5GuXFbKwN2csyMvyHq683N1dSXkzHfyX/e+CPMy5lLcup6jJgANjmN7nAp0Xkv9P75c3wIvI9Vb3fMIz9QN4A9PsAnMvXL69P9Xsqcr8gBX2uY+xHQMr07d69O+s6zEsEHqZpJioN7kyyBbuqDgEzIpJq62pubqavr6/YoF+TrVFEXr3nnns2xuPxparaJiLPA58vMNbGYDB4fuvWrY5t2+vxdoGL8qny6seJ+MYlwealhnOjTeB5tIBPZOPqayvPnz691fGWCVl9BTFN03ScebG2fHp6+u+AfeWMV4h655emw7xl8vJfNE5WzScijqp+FS+Lby2i/0equh34dbzDcQbejv5Yer+8m3aO4xzFO1TzlG3bf5FqzzxLH4vFDuBt8H1UV1d3tOifKgMzeddR4BrKUw91RGZ9mWfpW3dEDiCeb0albN+tJlewT01NhS3L2sv8kl1Xc3Oz3dfXV8zfO/xLlrZTiUTiqXg8fhV4W0TWJpPJhwuMc0FV743H45dt2/4ZXha/kHY9AaDIAp+InAoknKcamoJXzZs33haXtb92V6CgD9V7f9E0ebmlI/Iz1ey+YnBd95+zzKn32LFjZe3TFPSpmcVH74bu6vlExMHL8K8U2V+BMDDjNy3YAMyb4Xft2vXB4OBgp4iMA8/HYrF1wBFVL/b81/j9qvok4IrIjkqO2P7oO7s+aN0x0Kmi4wLPt3RG1qkrR/DP1q7rOrLBdYz96gW7C+y4k47Y2rb9YvpuPBC1LGu3iGhfXx+q2hOLxUzmdtW7Vq5cOUPuV/8UB/HOWK9MNZimebCxsfGoqqbaDgcCgZmsd6eNIyLpGfawYRiPua77GoB/XJWAKwcdQ+f5DJIHnSbzKLDSXyge/viGk9cncFDhTZlrOIwajyGeT3V2lz0vQ0NDa13XTdW+zwOPAvUAgUCgF69GXzVauyJr1SWr7+NfJavqE5Gkqn4ZOA1sAv6jQP//UtWX8Db9Ppd5vWD2CIfDL4tIO36mV9U3Zm/21uxPAh+pansoFDpT0k+ThbfGel4WtB0/04vM+VzX+EEqs6sh7ROjvRX7biUichnvQYWqDk1OTu7xn8qp6xoKhXYzl+lVRN4tNK5lWe+Ypvkw8B2/abqrq+uKqj6d0TWUb5xgMHgxs23ZsmUXgClVfd0wjG6Aiyf2vmOKM893cWT/FaAk36evNy/wrU785gVgCvT1gOF0Z7ltAY7jzFY6XNd9FtiRdrm3v7+/upuL7lxlxRV5FknzCb1t7dX1ichNvD/IWSUixRzbHfC/fmbBWMVKR0dHlyeTyR5VfQKvBAJwGW8NPWBZ1v8WO1YxPLBjYHk9bo+KzPMJnEsGbg78JPZnVfWlWOy/lrNte5eq/p5lWfOCPR1VFf9t4N8ty4qW64rFYsMZp+YOWJb1zQLzmzenYkurAC0dkWFg1qdw4NJob15fZom1lNJqitScDcN4bOfOna+n2gcHB1/zy5QnLcvK3Pwqm9k5q/HYxNje1+faX3gN5FGUkxNjvVXzlYOqXgRWishvp7cXXZbzX9UPAYfS6vBl7cYXg/+qfgg4lFaHXzRfilJ+wcscPwoQDodz9vEfBIVe4wuSSCT2NjQ0bMJb050IBoPfLuK2g3jlIBM4WYrPvO7sdZpMzyec+K1rzd++VOgm5SAi20FNpDQfwPj4uBmPxwFID3bw9hXwXrerVlFobx83r+IVbtKDHUCQUwqPIrekglGIIbIcz63V4T/B+IdkiiprpbAs6xuUuQb1D8nM+iaKuGdirLdsH0A8Hj/rf7yQ5fIpwAZWlTt+JlebJnP6koElp8zkjar6KuAU8FxmY1n/xxvLsmSxM2E6E6O9Us6rXo1PNsPDw5/F/wMdwzD+KvO6ZVkfVdPX1tk/60MX+n4Sq66vEkTkl8A/ZLbXMnyNO5ZkMrlcRKYNw2jduXPnf+boNiMi/1gNn6OyHJjGMFonhvfm9AFV8VWBscJdatSoUaNGjRo1atSocQfx/wldqBUwtlSMAAAAAElFTkSuQmCC);background-position:-224px;opacity:.8;transition:opacity .2s ease-out}div[id^=GProuteResultsValueDist],div[id^=GProuteResultsValueTime],input[id^=GProuteResultsShowDetails]+label+label:hover,input[id^=GProuteResultsShowDetails]+label:hover{color:#366291}div[id^=GProuteResultsStages]{margin-bottom:15px}div[id^=GProuteResultsValueDist],div[id^=GProuteResultsValueTime]{display:inline-block;font-weight:700;line-height:18px;width:80px}select[id^=GProuteResultsComputationSelect]{width:100px}div[id^=GProuteResultsNew]{background-color:#366291;background-image:url(data:image/png;base64,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);background-position:-224px 0;border-radius:3px;cursor:pointer;height:28px;opacity:.8;position:static;transition:opacity .2s ease-out;width:28px}.GPfakeBorder{border-bottom:1px solid #999;display:inline-block;height:14px;width:60px}.GPfakeBorderLeft{margin-left:15px}input[id^=GProuteResultsShowDetails]+label,input[id^=GProuteResultsShowDetails]+label+label{cursor:pointer;font-weight:700;line-height:28px;text-align:center;transition:color .2s ease-out;vertical-align:top;width:130px}input[id^=GProuteResultsShowDetails]+label,input[id^=GProuteResultsShowDetails]:checked+label+label{display:inline-block}input[id^=GProuteResultsShowDetails]+label+label,input[id^=GProuteResultsShowDetails]:checked+label{display:none}div:has(input[id^=GProuteResultsShowDetails])+div[id^=GProuteResultsDetails]{max-height:0;opacity:0}div:has(input[id^=GProuteResultsShowDetails]:checked)+div[id^=GProuteResultsDetails]{max-height:200px;opacity:1}div[id^=GProuteResultsDetails]{overflow-y:auto;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s}.GProuteResultsDetailsInstruction,.GProuteResultsDetailsNumber{color:#666;display:inline-block;line-height:16px;margin-top:4px}.GProuteResultsDetailsNumber{font-weight:700;text-align:right;vertical-align:top;width:22px}.GProuteResultsDetailsInstruction{padding-left:5px;width:calc(100% - 30px)}input[id^=GProuteSubmit-]{padding:0 10px;width:fit-content}[id^=GPsearchEngine-]{align-items:center;flex-direction:row}.position-container-bottom-left [id^=GPsearchEngine-],.position-container-bottom-right [id^=GPsearchEngine-],.position-container-top-left [id^=GPsearchEngine-],.position-container-top-right [id^=GPsearchEngine-]{align-items:flex-start;flex-direction:column;height:32px}.position-container-bottom-left [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-bottom-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-left [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList]{position:relative;top:unset;width:340px}.GPshowSearchEnginePicto{background-position:0}.GPsearchRadioContainer,.GPshowSearchEnginePicto{background-image:url(data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWa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);background-repeat:no-repeat}.GPsearchRadioContainer{background-color:rgba(0,60,136,.5);background-position:-26px;border:2px solid hsla(0,0%,100%,.4);border-radius:4px;box-sizing:border-box;color:transparent;cursor:pointer;height:32px;overflow:hidden;padding:2px;position:relative;transition:border-radius .5s ease-out 0s;width:32px}.GPbuttonsContainer{padding-left:5px;padding-right:5px}.GPsearchRadioContainer:hover{background-color:rgba(0,60,136,.7)}.GPshowAdvancedSearch,.GPshowAdvancedSearch:hover{background-color:#fff0}.GPshowGeolocate{background-position:-102px;margin-right:5px}.GPshowGeolocate,.GPshowSearchByCoordinate{background-image:url(data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWa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);background-repeat:no-repeat;transition:border-radius .5s ease-out 0s}.GPshowSearchByCoordinate{background-position:-76px}.GPsearchInputReset{background-image:url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=);background-position:0}.gpf-select{background-color:#fff}button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]{border:none;max-width:0}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]{border-top-right-radius:0}button[id^=GPsearchInputReset]{border-bottom-right-radius:5px;border-top-right-radius:5px;height:32px;width:32px}button[id^=GPadvancedSearchClose],button[id^=GPcoordinateSearchClose],button[id^=GPgeocodeResultsClose]{height:32px;right:0;top:0;width:30px}button[id^=GPcoordinateSearchClose],button[id^=GPgeocodeResultsClose]{background-position:0 0}button[id^=GPadvancedSearchClose]{background-repeat:no-repeat}button[id^=GPcoordinateSearchClose],button[id^=GPgeocodeResultsClose]{background-image:url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=)}button[id^=GPadvancedSearchClose]{background-image:url(data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWa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);background-position:-50px 3px}form[id^=GPsearchInput-]{width:280px}form[id^=GPsearchInput-] input{border:1px solid #999;border-bottom-right-radius:5px;border-top-right-radius:5px;color:#333;display:block;font-size:1em;padding:0 30px 0 5px;width:100%}form[id^=GPsearchInput-] input:disabled{background-color:#ddd;color:#999}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]{max-width:280px}.GPsearchInputText{height:32px}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{margin-left:33px;position:absolute;top:35px;width:310px}[id^=GPautocompleteResults-]{box-shadow:0 0 6px #000}dialog[id^=GPgeocodeResultsList],div[id^=GPautoCompleteList]{background-color:var(--background-default-grey);max-height:140px;position:absolute;width:280px}div[id^=GPautoCompleteList]{top:35px}dialog[id^=GPgeocodeResultsList]{border-radius:4px;overflow:hidden;position:absolute;top:35px}div[id^=GPgeocodeResults-]{background-color:#fff;max-height:140px;overflow-y:auto;position:relative;width:100%}.GPadvancedSearchCodeLabel,.GPadvancedSearchFilterLabel,.GPcoordinateSearchLabel{max-width:105px}.GPadvancedSearchCode,.GPadvancedSearchCodeLabel,.GPcoordinateSearchSystemsLabel,.GPcoordinateSearchSystemsSelect,div[id^=GPadvancedSearchFilters]{margin-top:15px}.GPadvancedSearchFilterInput,.GPadvancedSearchFilterLabel,.GPcoordinateSearchInput,.GPcoordinateSearchLabel,.GPcoordinateSearchSystemsLabel,.GPcoordinateSearchSystemsSelect,.GPcoordinateSearchUnitsLabel,.GPcoordinateSearchUnitsSelect{margin-bottom:5px}.GPshowToolBoxPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAlqAAAJagFGUcfpAAAAB3RJTUUH4AsKDCgkqrnTSAAAAw1JREFUSMe9ll2IlVUUhp9vnEintH+FulAyI+uihClKjSZtQJAJrRnDoKt+oCIIjSIrDCokKXQiCqkuTMFAJtQLCwItMsQbURmjiRIK+pmSoSjJ/JmnC98je6ZzjmVMCzbnO/vstd691nrf9R0YA1NRn2SsTX1E/UM9vVc1OdwC3A7cBLQD1wE/Al8AA0BfVVXf1vFbAmwCjgPjq+oUREsDkBuA3UBfwL4EXgS2AgJLgIPqw2pV+HUCG4B9/yTtF9Rj6pvqBeo4db7apU5N/VGXqofVHeo09Ub1N3Wdeo/6Z1m60SAL1KPqrQnWqR5Qt6pvqYfU1WqbWqnvqt+p89Sf1T61pSmQOkH9Wl2ZLDaru9T2gLapH6mvB6RXHVRvU79Rd6rnqteoH6vHGwEtV7/K4ZXq+qJME9VP1JfzfZU6lMwPqnvVSfltkvpMyl8X6L3ccmIyayuAdqjP5flZ9deA7M7lpqjjC5+eZkAH1AfT5LVxaFUfV39JoGXq72qHul39Qb0ypX5fvaIRUEnv6dHIZGAwe28Ac4DngQeAl4DFeZ4NLAAOAb3ZP1nEG6HREmgAmAEcBmYCTwFTgaXAEPAK0AMsBO4G7gT2A08Aj9YKM+qzbul61Q0hQ7+6L43tCVW71RXqCXVRUaJhdaOnbHIY2d2Mdd3q96F5e0TYFV3dl/4Nq/cHZE7m2avqLQXQeTlzohFQm/q5+k4C3ZFAD6mL4/h0frs6U2FzMpgdoEujq371ZCMg1GvDqjXqkTCuI1mtyZnLQv9dYWItO9VLwsC7GgIVYPfGaYU6K5rZmJtPUPeoAwla85lbALWcEagA61Svyoj5QD0nAbaoP0U71AJFvKoX50J/A2odDVRVFWo/8Fk00p13y2tAJzAv+6cvVmjGYo3QUWudjC4EPgSORjNHgGXAY3kfzcoqbcaZ9NM6eoID24CLMhGGgA5geabFzVn1bBAYBs4HLm/Wm3HqttB2ZtHof7va1U/Ts7oZvQ10AWuB67PO1vYAc+tls9qxsZETtinf/6PV/gX9b/YXjLd1o+WqCcMAAAAASUVORK5CYII=);background-repeat:no-repeat}.GPzoomIn{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHlsZT0ic3Ryb2tlOiMwYjZiYTc7c3Ryb2tlLW9wYWNpdHk6MSIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTcgMTJoMTBNMTIgN3YxMCIgc3R5bGU9InN0cm9rZTojMGI2YmE3O3N0cm9rZS1vcGFjaXR5OjEiLz48L3N2Zz4=);border-bottom:unset;border-bottom-left-radius:0;border-bottom-right-radius:0}.GPzoomIn,.GPzoomOut{background-position:50%;background-repeat:no-repeat;background-size:auto auto;height:32px;width:32px}.GPzoomOut{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHlsZT0iZmlsbDojZmZmO3N0cm9rZTojMGI2YmE3O3N0cm9rZS1vcGFjaXR5OjE7ZmlsbC1vcGFjaXR5OjEiLz48cGF0aCBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwIiBzdHlsZT0iZmlsbDojMGI2YmE3O3N0cm9rZTojMGI2YmE3O3N0cm9rZS1vcGFjaXR5OjE7b3BhY2l0eToxO2ZpbGwtb3BhY2l0eToxIi8+PC9zdmc+);border-top:unset;border-top-left-radius:0;border-top-right-radius:0}.GPzoomIn:hover,.GPzoomOut:hover{cursor:pointer}.ol-custom-full-screen button{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAA8CAYAAABxVAqfAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAxRJREFUWIXtmD9PVEEUxX/XXRaDWlvb8gUsBEMICpKowYbY2Vr4J5JQWWxtZyxsaFEE5Z8xWIDRIAklUT+Bn4FFwSXH4s2D9TEzb9ZEE3FP9+bde8/M27Nz7gx0cNxhxQFJfcCFQPwO8NTMmoWcKnAb6AnkbZjZx+hMJNXlx56kgUjegIvxoV6MPxGdxSEawIiZvQ8FuHeDwHZKwRTifeCGmb0rC3Sf8yrQLIstI94HKsA9Sd1lxSR1AXeBqsv9LeIGMAIsAqPAfIzckb4AxoAV4IqrkQYnrgMhSapJWnIimYnkPXcxS5JqbiwXXD2FeFLSYGGsJmlO0lYkb0vSy5y0ZbxP0kQKca00qE38iZod/IP4W+LybSD3PX+nLkkzkjYjxTddTFdhvB+4k0LcA7xt2UC6gFlgHPgaInbvxoHZnNzVWAPORPIOZpjbYkPSkKQF9/ymbMssxF5yNby2GCOWpGYKaYC82VLnCHGZO1XIXOaxme2WEZvZD+AJh64WRIofV4CFouB8cEJaLiNNJYaC4AKkA2RCOpVS0NfsDQFDgfgd4JGZfS/knAQmCTd7q2a2mjKhDjro4BjDZxYpBlKEd8uU9FnSYrGgpIt4TJ3siDNUiO12zf2XZGLgE3AdeJWTu8JrwGlPfA+wkpO7nHngGhA8BByBpIqkaeelK5JGY6ZeaB5GJC2757liK9QuedTUA81DlDRoi2a2D0yRnXVL/bUFefMw5RqD9oidkF6TnXXbRYXsWBuy16CqcyElmXoAvwiuiCOrcb9LL/AwUHDDM7YKfAvE90r6EPvsHRxP+LrMGlnH6NsawdMxlnSm22Sd6V7pbCT1S9qVH3VPfOgacldZk38E3v+xma3TxvVgAA1g2NVKI3bkG2TXg9EbugD2gbHY3Wdsy6wBD8i2v9K7yRbke/uEshNGOrEjnSNb8SvgMmnXgw0ykT0DhskOe0FyH/F8i7VV3VguuLonvt4qJElVlytJ8z6OkPOcBaaBW/ltvJmtKzuqng+s9EBIZtaUdBPYBc4lrzgGn7m33WV08F/gJ/JO7y3zOGA+AAAAAElFTkSuQmCC);background-repeat:no-repeat}.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=false]{background-position:0 0}.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=true]{background-position:0 -30px}.GPshowOverviewMap{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyA1LjcgOS4zIDNsNS40IDIuNyA1LjY3My0yLjQzMWEuNDUuNDUgMCAwIDEgLjYyNy40MTNWMTguM0wxNC43IDIxbC01LjQtMi43LTUuNjczIDIuNDMxQS40NS40NSAwIDAgMSAzIDIwLjMxN3ptMTIuNiAxMi45NTYgMy42LTEuNTQzVjUuNzNsLTMuNiAxLjU0M3ptLTEuOC0uMTE4VjcuMjYybC0zLjYtMS44djExLjI3NnptLTUuNC0xLjgxVjUuMzQzTDQuOCA2Ljg4N1YxOC4yN3oiLz48L3N2Zz4=);background-position:2px;background-repeat:no-repeat;background-size:auto auto}div[id^=GPlegends-]{display:none}div[id^=GPcatalog-]{display:block}.GPshowCatalogPicto{background-image:url(data:image/png;base64,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bS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDpjMmUxMjdjOC0xOTM1LTQ0OGEtYjYxYy0xY2RkNjI3NWZkYzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTFkYjFmNjktN2M0MC00MDgxLWJkZWEtN2YxMzFjODQ3OTg4IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NzdiZmRhYWMtNmEyNi00MTY5LWEzMWItYmZlN2Q5NThlOGU3IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzI5MTg5ODYxNDQxMDI1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZGI2YWQ2MTUtZWQwYS00MTEyLTljYjQtYTIyZDkwMDkwMGNkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0xMC0xN1QyMDozMTowMSswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5TF0SEAAAABmJLR0QA8gDyAPIuRIzMAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH6AoREh8BMSlSAgAAAXpJREFUWMPtl0FugzAQRf+Peo9ygC57AI7Col1EzR1ortBAKiWLpCdJcoduugoXaX43RnIpYEPdQCW+xMYaBj9G8z0GJk26qvjbBJJiABGAWwAnAAXJYlRAkhKzQVsnkkcrJgKwAxDXpHgG8DYkWBXorJ9KbBi5tRti7zcN68eaNftv+2w2kVSQXHr8wEcA9wDmJC8NMQTwAuCDZBayej7VKXXwgZH0aeK3kmZ1MJIyE3ORtAgJFKubIke+vBK/NtWwYdaVmDwkUNIRKHbko6RV5Z2tpFmlMqU2dVW8WoU8czZB5cFgTK98exwu2KuHHFDBYFy2nXoCJR2/2wS19YXpRWyseO8RmrpMwfOwJ64h00+HSkV3xjjKtbMPVIMB9KpSsPOppgfPPr3U4mbZoFANxtIXZtZm6aMd9wc/WP8A6MEafTYto8/KGn2eul4fUnPHCaGl6xohaQ7gDsCCpFqG0wzAO8nXEOdQX8VjuD7sA36jwKRJk/6NvgB/JgixGmzy6AAAAABJRU5ErkJggg==);background-position:0;background-repeat:no-repeat}dialog[id^=GPcatalogPanel-]{width:280px}.GPcatalogPanelClose{background-image:url(data:image/png;base64,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bS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDpjMmUxMjdjOC0xOTM1LTQ0OGEtYjYxYy0xY2RkNjI3NWZkYzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTFkYjFmNjktN2M0MC00MDgxLWJkZWEtN2YxMzFjODQ3OTg4IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NzdiZmRhYWMtNmEyNi00MTY5LWEzMWItYmZlN2Q5NThlOGU3IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzI5MTg5ODYxNDQxMDI1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZGI2YWQ2MTUtZWQwYS00MTEyLTljYjQtYTIyZDkwMDkwMGNkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0xMC0xN1QyMDozMTowMSswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5TF0SEAAAABmJLR0QA8gDyAPIuRIzMAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH6AoREh8BMSlSAgAAAXpJREFUWMPtl0FugzAQRf+Peo9ygC57AI7Col1EzR1ortBAKiWLpCdJcoduugoXaX43RnIpYEPdQCW+xMYaBj9G8z0GJk26qvjbBJJiABGAWwAnAAXJYlRAkhKzQVsnkkcrJgKwAxDXpHgG8DYkWBXorJ9KbBi5tRti7zcN68eaNftv+2w2kVSQXHr8wEcA9wDmJC8NMQTwAuCDZBayej7VKXXwgZH0aeK3kmZ1MJIyE3ORtAgJFKubIke+vBK/NtWwYdaVmDwkUNIRKHbko6RV5Z2tpFmlMqU2dVW8WoU8czZB5cFgTK98exwu2KuHHFDBYFy2nXoCJR2/2wS19YXpRWyseO8RmrpMwfOwJ64h00+HSkV3xjjKtbMPVIMB9KpSsPOppgfPPr3U4mbZoFANxtIXZtZm6aMd9wc/WP8A6MEafTYto8/KGn2eul4fUnPHCaGl6xohaQ7gDsCCpFqG0wzAO8nXEOdQX8VjuD7sA36jwKRJk/6NvgB/JgixGmzy6AAAAABJRU5ErkJggg==)}.GPtabsList{background-color:#f1f1f1;border:1px solid #ccc;display:flex;list-style-type:none;margin:0;overflow:hidden;padding:0}.GPtabList{flex:1 1 0px}.GPtabButton{background-color:inherit;border:none;cursor:pointer;float:left;outline:none;padding:14px 16px;transition:.3s}.GPtabButtonActive{background-color:#ccc}.GPtabContent{border:1px solid #ccc;border-top:none;display:none;padding:6px 12px}.GPtabContentSelected{display:block}.GPlabelActive:hover{background-color:#ccc}.GPcatalogButtonSection{background:unset;border:unset}button[aria-expanded=true].GPcatalogButtonSection span.GPshowCatalogAdvancedTools{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.GPshowCatalogAdvancedTools{background-image:url(data:image/png;base64,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ICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmM1NWM2ODRkLWY2OGQtNDExNy04ZGYzLTAwYWMzMjQ4YTY5YSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjNmYWM4YTllLWJkMTUtNGJiOC04ZGQyLTkwZDUyMjE0YmFmOCIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1QOlRpbWVTdGFtcD0iMTcyOTI0NTAwMjg0NjU2OCIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjMwIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjcwMTNhZTFjLTcyMjktNDJmZS1iMzAzLTU3NGFmMWE3ZmQxMyIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMTAtMThUMTE6NTA6MDIrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+UnHxogAAAAZiS0dEAPIA8gDyLkSMzAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+gKEgkyAorMuigAAAIkSURBVFjD7Zc/aBRBFMa/t39EFEMQTrQ2CiIi+K+Q3ZA+CLJ7nqWQwlRJGs3ddUnlZdUiXJEqINjE9e5UjFWag9sEbNRGhGB6MXKgQQPxZp5FLhLCXXbXXSQH8ytnhuF9771v3yygUCgUCkVXKOrB6/dqJzQD42A5DNAZAGBglYA3UlB55ZHztWcFWoXaLTDPAzjW5cgGMUYanlvpOYFtcc8inGVi5A6aSAptS50/761co+QAAOxCba/GH6TJgcaD3HqSoKx89RMx15tH5MTHqdzW7r3zU/6h47+0WSYaCmbcc2F3aftuGhjfpy075asPrI8lTjtjgYlG+zf1JbvoZ3aW7aKf6d/Ul5hoFIyFxBW08tUPAC7Giw3vl2fcS0k1tq3xBEATpN3UmLYkxCsAp8C4G3ju0yj3aCH7pzstNkrO3zbtkLGBNLwTlJznIG1wO2uyLiFWAJggzYoqDgCM8ILE7i9OXL0dDx7+PZH5iast0isAYLDIrh8VTXuyMpeKBwFei28fWkvTg8KACDzXCjzXEgZEXA+GCKTFf/gwv07cnp47DaLbBFxhqb+zCi8uD+ZfXmCpvyXgGhh3As+dTixQCioD2IgR23ezZZYPkgdDB709Wc0ywY8y6Jkpu+w5tTQH9dB9/+RuD9Yf5r6k/lTbFsnzAPV1qxwzjaQt7r8+tu2inwHrY8wYBnC2vbzKoEWzZZbrj298U/8uCoVCoegx/gAQwd9vpqyHDwAAAABJRU5ErkJggg==);background-position:-26px 0;display:inline-block;height:28px;vertical-align:middle;width:28px}#header-search>label,div[id^=GPterritories-]{display:none}div[id^=GPcontrolList-] .GPshowOpen>span{color:#fff;display:block;font-size:24px;height:24px;line-height:24px;pointer-events:none}button[id^=GPshowControlListPicto-][aria-pressed=true]+dialog{width:200px}.GPcontrolListPanelClose{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIRSURBVFiF7ZbRS1RBFMbPbLq9ldjaY88Zkv1JQRqt+Wf0aCrYBuY/UkRQRFQvQQax+JipEUIoQdHq/nrYb3K8zl33zl20h/vBwnLOmfPNN+fMmWtWoUKFMwPwjiO8Pu/9xOAGDQRqZnYYmLrOuQvD31I51AYJAqbNbNnMfgXm38AyMFV2E8AssKpDy4txwAowX4booogO1WYdYEu/jmwHIqqXEOPzr8VEScwjxXSTREnMSyXZBGaAscA/DtyTOIDnKaKAFsfxGHCB38kWopUiaNVffmC8T9wE8FaxKwk8vpVCrAG1TGU8nsSqeBrJLbXBl5gY4C7wOSNqW+13Y4iistUrLkYE/lTu5PhfAR8ytjmteViYMF9UeTFK3qZ36S9HfJeAP8CDjL2hqq4nkVpfUdFhEcNIjv2ame045/aA22Z2PeMbNbOn4QLn3C6wK38ZxN7Ggd/LKICfwKb+tyMntgGcOAzgO/AjkTM2AJKqFEvuW27s9Oh/aybUch8T+PKmWdaWJiro49kCa+a1ZmFIYvzYjo70ooJu6rS/Ao0B4q8C31TVyYJcZ/aw+iRv+omSmPeKXUrgmeHo0yc6mjOV6gL3i/IYUAdeKMkW0ASuBP6G2mxHMc+A0cJEvVxNVSp3mklUC2imcPgkdSU5CE5nWyK6snXofXUniTkXAFPAIvAJ2Af2gHVgoeidqVChwv+NvxOT737B3Fc7AAAAAElFTkSuQmCC)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div{align-items:center;column-gap:1rem;display:flex;flex-direction:row;padding:.5rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div:hover{background-color:#eee;cursor:pointer}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button{flex-shrink:0}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button:hover{background-color:rgba(0,60,136,.5)} /*# sourceMappingURL=Classic.css.map*/ \ No newline at end of file diff --git a/dist/modules/Classic.css.map b/dist/modules/Classic.css.map index aef3036e..97d617a8 100644 --- a/dist/modules/Classic.css.map +++ b/dist/modules/Classic.css.map @@ -1 +1 @@ -{"version":3,"file":"Classic.css","mappings":"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","sources":["webpack://geopf-extensions-openlayers/./src/packages/CSS/GPFwaiting.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/GPFgeneralWidget.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Drawing/GPFdrawingStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Attribution/GPFattributionStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/ElevationPath/GPFelevationPathStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Export/GPFexportStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/GetFeatureInfo/GPFgetFeatureInfoStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Isochron/GPFisochronStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/LayerImport/GPFlayerImportStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/LayerSwitcher/GPFlayerSwitcherStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/LocationSelector/GPFlocationStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Measures/GPFmeasureAreaStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Measures/GPFmeasureLengthStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Measures/GPFmeasureAzimuthStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Measures/GPFmeasureToolTip.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/MousePosition/GPFmousePositionStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/ReverseGeocoding/GPFreverseGeocodingStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Route/GPFrouteStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/SearchEngine/GPFsearchEngineStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/ToolBoxMeasure/GPFtoolBoxMeasureStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Zoom/GPFzoomStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/FullScreen/GPFfullScreenStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/OverviewMap/GPFoverviewMapStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Legends/GPFlegendsStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Catalog/GPFcatalogStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Territories/GPFterritoriesStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/ControlList/GPFcontrolListStyle.css"],"sourcesContent":["/**\n* Map loading\n* @sample\n* function setMap(map) {\n* var center = this._createLoadingElement();\n* map.getViewport().appendChild(center);\n* center.className = \"\"; // invisible !\n* center.className = \"GPmapLoadingVisible\"; // visible !\n* }\n*\n* function _createLoadingElement() {\n* var div = document.createElement(\"div\");\n* div.id = \"GPmapLoading\";\n* div.className = \"\";\n* return div;\n* }\n*/\n\n#GPmapLoading {\n display: none;\n position: absolute;\n z-index: 50;\n top: 50%;\n left: 50%;\n width: 50px;\n height: 50px;\n margin-top: -25px;\n margin-left: -25px;\n}\n\n#GPmapLoading.GPmapLoadingVisible {\n display: block;\n}\n\n#GPmapLoading {\n background-image: url(\"img/waiting.gif\");\n}\n","/*********************/\r\n/* Widgets : general */\r\n/*********************/\r\n\r\n.GPwidget {\r\n position: absolute;\r\n pointer-events: auto;\r\n font-family: \"Helvetica Neue\",Arial,Helvetica,sans-serif;\r\n font-size: 13px;\r\n color: #333;\r\n}\r\n\r\n.GPwidget input[type='text'],\r\n.GPwidget input[type='button'] {\r\n -webkit-appearance: none;\r\n appearance: none;\r\n color: #333333;\r\n}\r\n\r\n.GPwidget input[type=\"checkbox\"] {\r\n display: none;\r\n}\r\n\r\n.GPwidget select {\r\n padding-left: 3px;\r\n border-radius: 3px;\r\n}\r\n\r\n.GPwidget form {\r\n margin-bottom: 0;\r\n}\r\n\r\n.GPwidget * {\r\n box-sizing: border-box;\r\n background-repeat: no-repeat;\r\n}\r\n\r\n/************/\r\n/* position */\r\n/************/\r\n:root {\r\n --size-per-row: 32px;\r\n}\r\n#position-container-top-left,\r\n#position-container-top-right,\r\n#position-container-bottom-left,\r\n#position-container-bottom-right {\r\n border-style: solid;\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n /* crée un décalage sur le searchEngine */\r\n /* align-items: center; */\r\n width: var(--size-per-row);\r\n min-height: var(--size-per-row);\r\n /* padding: 5px; */\r\n}\r\n\r\n#position-container-top-left,\r\n#position-container-top-right {\r\n top: 0;\r\n}\r\n\r\n#position-container-top-left {\r\n float: left;\r\n left: 0;\r\n}\r\n#position-container-top-right {\r\n float: right;\r\n right: 0;\r\n}\r\n\r\n#position-container-bottom-left,\r\n#position-container-bottom-right {\r\n bottom: 0px;\r\n}\r\n\r\n#position-container-bottom-right {\r\n float: right;\r\n right: 0px;\r\n}\r\n#position-container-bottom-left {\r\n float: left;\r\n left: 0px;\r\n}\r\n\r\n/******************/\r\n/* General panels */\r\n/******************/\r\n\r\n.GPpanel {\r\n box-shadow: 0 0 6px #000;\r\n border-radius: 4px;\r\n padding: unset;\r\n border: unset;\r\n background-color: #FFF;\r\n}\r\n\r\n.GPpanel {\r\n}\r\n\r\n.GPpanelHeader {\r\n position: relative;\r\n width: 100%;\r\n height: 32px;\r\n padding: 3px;\r\n background-color: #9DB1BD;\r\n border-top-left-radius: 4px;\r\n border-top-right-radius: 4px;\r\n}\r\n\r\n.GPpanelTitle {\r\n width: 100%;\r\n height: 100%;\r\n text-align: center;\r\n font-weight: bold;\r\n line-height: 26px;\r\n border-top-left-radius: 2px;\r\n border-top-right-radius: 2px;\r\n background-color: #366291;\r\n color: #FFF;\r\n}\r\n\r\n.GPpanelFooter {}\r\n\r\n.GPpanelIcon,\r\n.GPresetPicto,\r\n.GPreturnPicto,\r\n.GPpanelClose,\r\n.GPpanelReduce,\r\n.GPpanelInfo {\r\n position: absolute;\r\n width: 26px;\r\n height: 26px;\r\n cursor: pointer;\r\n border: none;\r\n background-color: #366291;\r\n}\r\n\r\n.GPpanelClose {\r\n top: 3px;\r\n right: 3px;\r\n background-position: -27px 0;\r\n}\r\n\r\n.GPreturnPicto {\r\n top: 3px;\r\n left: 3px;\r\n}\r\n\r\n.GPpanelInfo {\r\n top: 3px;\r\n left: 3px;\r\n}\r\n\r\n.GPpanelReduce {\r\n top: 3px;\r\n right: 32px;\r\n}\r\n\r\n.GPresetPicto,\r\n.GPreturnPicto {\r\n border-radius: 3px;\r\n opacity: 1;\r\n}\r\n\r\n/**********************************/\r\n/* Showing/hiding advanced panels */\r\n/**********************************/\r\n\r\n.GPshowAdvancedToolPicto {\r\n position: relative;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n width: 32px;\r\n height: 32px;\r\n padding: 2px;\r\n background-color: rgba(255, 255, 255, 0.4);\r\n border-radius: 4px;\r\n border: 2px solid rgba(255, 255, 255, 0.4) ;\r\n}\r\n\r\n.GPshowAdvancedToolPicto:hover {\r\n background-color: rgba(255, 255, 255, 0.6);\r\n}\r\n\r\n.GPshowAdvancedToolOpen {\r\n position: absolute;\r\n display: block;\r\n box-sizing: border-box;\r\n width: 26px;\r\n height: 26px;\r\n background-color: rgba(0,60,136,0.5);\r\n border-radius: 2px;\r\n}\r\n\r\n.GPshowAdvancedToolPicto:hover .GPshowAdvancedToolOpen {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n\r\n.GPshowOpen {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n\r\n.GPshowOpen:hover {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n\r\n/****************/\r\n/* Calc waiting */\r\n/****************/\r\n\r\n.GPwaitingContainer {\r\n position: absolute;\r\n top: 32px;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n background-color: rgba(255,255,255,0.9);\r\n font-size: 1.5em;\r\n font-weight: bold;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n}\r\n\r\n.GPwaitingContainerVisible {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n}\r\n\r\n.GPwaitingContainerHidden {\r\n display: none;\r\n}\r\n\r\n.GPwaitingContainerInfo {\r\n margin: auto;\r\n}\r\n\r\n.GPwaitingContainerVisible,\r\n.GPwaitingContainerHidden {}\r\n\r\n/***************/\r\n/* Flex inputs */\r\n/***************/\r\n\r\n.GPflexInput {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n transition: max-height 0.3s ease-out, opacity 0.3s ease-out;\r\n}\r\n\r\n/* FIXME tempory hack with :not(.GPlocationOriginHidden) !\r\n.GPflexInput > *:not(.GPlocationOriginHidden) */\r\n.GPflexInput > * {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n border: 1px solid #999;\r\n border-radius: 0;\r\n}\r\n\r\n.GPflexInput *:not(:last-child) {\r\n border-right:none;\r\n}\r\n\r\n.GPflexInput *:first-child {\r\n border-radius: 3px 0 0 3px;\r\n}\r\n\r\n.GPflexInput *:last-child {\r\n border-radius: 0 3px 3px 0;\r\n}\r\n\r\n.GPflexInput > *:not(input) {\r\n /* width: 28px; */\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n.GPflexInput > input {\r\n -webkit-flex: 1;\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding: 0 5px;\r\n min-width: 0;\r\n}\r\n\r\n.GPflexInput > select {\r\n -webkit-flex: 1;\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding-right: 7px;\r\n}\r\n\r\n.GPflexInput > label {\r\n background-color: #F2F2F2;\r\n color: #666;\r\n padding-left: 7px;\r\n padding-right: 9px;\r\n cursor: pointer;\r\n}\r\n\r\n/****************/\r\n/* Submit input */\r\n/****************/\r\n\r\ninput.GPsubmit {\r\n display: block;\r\n width: 80px;\r\n margin: auto;\r\n height: 28px;\r\n line-height: 26px;\r\n padding: 0;\r\n background: none;\r\n border: none;\r\n border-radius: 3px;\r\n font-family: \"Helvetica Neue\",Arial,Helvetica,sans-serif;\r\n color: #FFF;\r\n background-color: #366291;\r\n font-weight: bold;\r\n opacity: 0.8;\r\n transition: opacity 0.2s ease-out;\r\n cursor: pointer;\r\n}\r\n\r\ninput.GPsubmit:hover {\r\n opacity: 1;\r\n}\r\n\r\n/************/\r\n/* elements */\r\n/************/\r\n\r\n.GPselect {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n margin: auto;\r\n border: 1px solid #999;\r\n color: #333;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlabel {\r\n\r\n}\r\n\r\n.GPinput {\r\n\r\n}\r\n\r\n.GPform {\r\n padding: 15px;\r\n}\r\n\r\n.GPelementInvisible,\r\n.GPelementHidden {\r\n display: none;\r\n visibility: hidden;\r\n opacity: 0%;\r\n}\r\n\r\n.GPelementVisible,\r\n.GPelementShow {\r\n display: block;\r\n visibility: visible;\r\n opacity: 100%;\r\n}\r\n\r\n/********************************/\r\n/* Autocomplete/geocode results */\r\n/********************************/\r\n\r\n.GPautoCompleteList,\r\n.GPadvancedAutoCompleteList {\r\n z-index: 2;\r\n /* display: none; */\r\n /* position: absolute;\r\n max-height: 140px;\r\n background-color: #FFF;\r\n border: 1px solid #999;\r\n overflow-y: hidden; */\r\n}\r\n\r\n.GPadvancedAutoCompleteList {\r\n width: calc(100% - 28px);\r\n border-top: none;\r\n font-size: 0.9em;\r\n}\r\n\r\n.GPautoCompleteProposal {\r\n width: 100%;\r\n height: 28px;\r\n line-height: 16px;\r\n padding: 6px 10px;\r\n color: #5E5E5E;\r\n font-size: 1.0em;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow:ellipsis;\r\n cursor: pointer;\r\n}\r\n\r\n.GPautoCompleteProposal:hover {\r\n color: #000000;\r\n background-color: #CEDBEF\r\n}\r\n\r\n/*************************************/\r\n/* Showing additional hidden options */\r\n/*************************************/\r\n\r\n.GPshowMoreOptionsImage {\r\n background-image: url(\"img/GPshowMoreOptions.png\");\r\n}\r\n\r\n.GPshowMoreOptions {\r\n display: block;\r\n position: absolute;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n transition: all 0.5s ease-out 0s;\r\n}\r\n\r\nbutton[aria-pressed=\"true\"].GPshowMoreOptions,\r\ninput[type=\"checkbox\"]:checked + .GPshowMoreOptions {\r\n -webkit-transform: rotateX(180deg);\r\n transform: rotateX(180deg);\r\n /* bottom: 90px; */\r\n}\r\n\r\n/**********************/\r\n/* Feature info popup */\r\n/**********************/\r\n\r\n.gp-feature-info-div {\r\n bottom: 17px ;\r\n position: relative;\r\n max-width: calc(100vw - 80px);\r\n padding: 10px;\r\n border-radius: 10px;\r\n font-size: 0.75em;\r\n font-family: \"Open Sans\", sans-serif;\r\n color: #002A50;\r\n background-color: #FFF;\r\n box-shadow: 0 0 5px #000;\r\n}\r\n\r\n.gp-feature-info-div::before {\r\n content: \"\";\r\n position: absolute;\r\n border-top: 15px solid #FFF;\r\n border-right: 14px solid transparent;\r\n border-left: 14px solid transparent;\r\n bottom: -15px;\r\n margin-left: -14px;\r\n left: 50%;\r\n}\r\n\r\n.gp-feature-info-div .closer {\r\n position: absolute;\r\n display: block;\r\n width: 30px;\r\n height: 30px;\r\n top: 0;\r\n right: 0;\r\n border: none;\r\n cursor: pointer;\r\n border-top-right-radius: 10px;\r\n border-bottom-right-radius: 10px;\r\n background-color: #FFF;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/close-emeraud.svg\");\r\n background-size: 14px 14px;\r\n background-position: center;\r\n}\r\n\r\n.gp-features-content-div {\r\n max-width: 420px;\r\n min-width: 260px;\r\n max-height: 340px;\r\n overflow: auto;\r\n}\r\n\r\n.gp-features-content-div h5,\r\n.gp-features-content-div h6,\r\n.gp-features-content-div p,\r\n.gp-features-content-div ul {\r\n margin: 0;\r\n}\r\n\r\n.gp-features-content-div ul {\r\n padding: 0;\r\n list-style-type: none;\r\n}\r\n\r\n.geoportail-popup-content h5,\r\n.geoportail-popup-content h6,\r\n.geoportail-popup-content p,\r\n.gp-att-name-div,\r\n.gp-att-description-div,\r\n.gp-att-others-div {\r\n padding: 0 10px;\r\n}\r\n\r\n.geoportail-popup-content h5:not(:last-child),\r\n.geoportail-popup-content h6:not(:last-child),\r\n.geoportail-popup-content p:not(:last-child),\r\n.gp-att-description-div:not(:last-child),\r\n.gp-att-others-div:not(:last-child) {\r\n margin-bottom: 15px;\r\n}\r\n\r\n.geoportail-popup-content h5:last-child,\r\n.geoportail-popup-content h6:last-child,\r\n.geoportail-popup-content p:last-child,\r\n.gp-att-description-div:last-child,\r\n.gp-att-others-div:last-child,\r\n.gp-att-name-div {\r\n margin-bottom: 10px;\r\n}\r\n\r\n.geoportail-popup-content h5:first-child,\r\n.geoportail-popup-content h6:first-child,\r\n.geoportail-popup-content p:first-child,\r\n.gp-att-name-div:first-child,\r\n.gp-att-description-div:first-child,\r\n.gp-att-others-div:first-child {\r\n margin-top: 10px;\r\n}\r\n\r\n.gp-att-name-div,\r\n.gp-features-content-div h5 {\r\n padding-right: 35px;\r\n font-weight: bold;\r\n font-size: 1.2em;\r\n text-transform: uppercase;\r\n color: #0B6BA7;\r\n}\r\n\r\n.gp-features-content-div h6 {\r\n font-size: 1.1em;\r\n}\r\n\r\n.gp-att-description-div:not(:last-child),\r\n.gp-att-others-div:not(:last-child) {\r\n padding-bottom: 10px;\r\n border-bottom: 1px dotted #666;\r\n}\r\n\r\n.gpf-radio-btn-group {\r\n display: flex;\r\n gap: 1em;\r\n}\r\n\r\n.gpf-btn-icon {\r\n caret-color: transparent;\r\n}\r\n","[id^=GPdrawingPanel-] {\r\n width: 240px;\r\n}\r\n\r\n.GPshowDrawingPicto {\r\n background-image: url(\"img/GPdrawingOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n.GPdrawingPanelClose {\r\n background-image: url(\"img/GPdrawingOpen.png\");\r\n}\r\n\r\n.GPdrawingLabel,\r\n.GPdrawingCoords {\r\n display: inline-block;\r\n line-height: 20px;\r\n}\r\n\r\n.GPdrawingLabel {\r\n width: 80px;\r\n font-weight: bold;\r\n}\r\n\r\n.GPdrawingCoords {\r\n width: 110px;\r\n}\r\n\r\n/* markers selector */\r\n.marker-input-radio {\r\n display : none ;\r\n}\r\n\r\ninput.marker-input-radio:checked + label {\r\n border: 1px solid red;\r\n}\r\n\r\n/* drawing tools */\r\n.drawing-tool {\r\n border-radius: 10px;\r\n cursor: pointer;\r\n display: block;\r\n height: 40px;\r\n width: 40px;\r\n background-image: url(\"img/drawing-tools.svg\");\r\n background-size: 720px 40px;\r\n background-color: #e9edf0;\r\n border: unset;\r\n}\r\n\r\n.drawing-tool-active {\r\n background-color: #002a50;\r\n}\r\n\r\n\r\n/*\r\n* Drawing tools\r\n*/\r\nbutton[id^=drawing-tool-point-] {\r\n background-position: 0 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-point-].drawing-tool-active {\r\n background-position: -40px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-line-].drawing-tool-active {\r\n background-position: -120px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-line-] {\r\n background-position: -80px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-holes-] {\r\n background-position: -640px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-holes-].drawing-tool-active {\r\n background-position: -680px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-polygon-] {\r\n background-position: -160px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-polygon-].drawing-tool-active {\r\n background-position: -200px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-text-] {\r\n background-position: -240px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-text-].drawing-tool-active {\r\n background-position: -280px 0;\r\n}\r\n\r\n/*\r\n* Editing tools\r\n*/\r\nbutton[id^=drawing-tool-edit-] {\r\n background-position: -320px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-edit-].drawing-tool-active {\r\n background-position: -360px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-display] {\r\n background-position: -400px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-display-].drawing-tool-active {\r\n background-position: -440px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-tooltip] {\r\n background-position: -480px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-tooltip-].drawing-tool-active {\r\n background-position: -520px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-remove] {\r\n background-position: -560px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-remove-].drawing-tool-active {\r\n background-position: -600px 0;\r\n}\r\n\r\n/* section d'export */\r\n\r\ndiv.drawing-tools-flex-display {\r\n justify-content: space-between;\r\n}\r\n\r\nbutton[id^=drawing-export-] {\r\n background-position: 2px 0;\r\n}\r\n\r\n.drawing-button {\r\n margin: auto;\r\n font-size: 0.7em;\r\n height: 30px;\r\n line-height: 30px;\r\n padding-left: 30px;\r\n padding-right: 15px;\r\n /* from site colors-chart */\r\n background-image: url(\"img/drawing-save.svg\");\r\n background-size: 30px 120px;\r\n}\r\n\r\n.tool-form-submit {\r\n border: medium none;\r\n border-radius: 20px;\r\n font-family: \"Helvetica Neue\",Arial,Helvetica,sans-serif;\r\n font-size: 0.9em;\r\n text-align: center;\r\n text-transform: uppercase;\r\n /* from site colors-chart */\r\n background-color: #00b798;\r\n color: #fff;\r\n}\r\n\r\n/*\r\n * popups\r\n */\r\n.gp-label-div,\r\n.gp-styling-div {\r\n position: relative;\r\n top: 17px;\r\n border-radius: 10px;\r\n font-size: 0.75em;\r\n background-color: #FFF;\r\n box-shadow: 0 0 5px #000;\r\n box-sizing: border-box;\r\n border: unset;\r\n}\r\n\r\n.gp-label-div::before,\r\n.gp-styling-div::before {\r\n content: \"\";\r\n position: absolute;\r\n border-bottom: 15px solid #FFF;\r\n border-right: 9px solid transparent;\r\n border-left: 10px solid transparent;\r\n top: -15px;\r\n margin-left: -10px;\r\n left: 50%;\r\n}\r\n\r\n.gp-textarea-att-label-style,\r\n.gp-input-label-style {\r\n border: none;\r\n}\r\n\r\n.gp-textarea-att-label-style {\r\n width: 240px;\r\n height: 80px;\r\n resize: none;\r\n}\r\n\r\n.gp-input-measure-style {\r\n width: 240px;\r\n font-size: 0.75em;\r\n background-color: #FFF;\r\n text-align: center;\r\n border-radius: 10px;\r\n}\r\n\r\n.gp-textarea-att-label-style {\r\n display: block;\r\n}\r\n\r\n.gp-label-div .closer {\r\n border-top-right-radius: 10px;\r\n background-color: #FFF;\r\n}\r\n\r\n.gp-input-label-style {\r\n width: 180px;\r\n}\r\n\r\n/* Label popups */\r\n\r\n.gp-label-div {\r\n padding: 10px;\r\n}\r\n\r\n/* Styling popup */\r\n\r\n.gp-styling-div {\r\n width: 340px;\r\n padding: 20px;\r\n padding-top: 50px;\r\n}\r\n\r\n.gp-styling-div::after {\r\n content: \"Modifier le style\";\r\n position: absolute;\r\n display: block;\r\n width: 280px;\r\n height: 30px;\r\n line-height: 30px;\r\n text-align: center;\r\n left: 30px;\r\n top: 0;\r\n border-bottom: 1px solid #BBB;\r\n font-variant: small-caps;\r\n font-size: 1.2em;\r\n font-weight: bold;\r\n}\r\n\r\n.gp-label-div .gp-styling-button:not([class*=\"closer\"]) {\r\n display: block;\r\n margin: auto;\r\n margin-top: 10px;\r\n}\r\n\r\n.gp-styling-button:not([class*=\"closer\"]) {\r\n display: inline-block;\r\n width: 140px;\r\n height: 24px;\r\n line-height: 24px;\r\n margin-top: 20px;\r\n border-radius: 12px;\r\n text-align: center;\r\n color: #FFF;\r\n background-color: #00B798;\r\n font-weight: bold;\r\n font-size: 0.9em;\r\n text-transform: uppercase;\r\n border: none;\r\n}\r\n\r\n.gp-styling-button:not([class*=\"closer\"]):hover {\r\n color: #00B798;\r\n background-color: #EEF2F5;\r\n}\r\n\r\n.gp-styling-button:not([class*=\"closer\"]) + .gp-styling-button:not([class*=\"closer\"]) {\r\n margin-left: 20px;\r\n}\r\n\r\n.gp-label-div .closer,\r\n.gp-styling-div .closer {\r\n cursor: pointer;\r\n position: absolute;\r\n display: block;\r\n width: 30px;\r\n height: 30px;\r\n top: 0;\r\n right: 0;\r\n border: none;\r\n background-color: transparent;\r\n background-repeat: no-repeat;\r\n background-image: url(\"../../img/close-emeraud.svg\");\r\n background-size: 14px 14px;\r\n background-position: center;\r\n}\r\n\r\n.gp-styling-option {\r\n font-size: 11px;\r\n position: relative;\r\n line-height: 30px;\r\n padding: 0 20px;\r\n}\r\n\r\n.gp-styling-option input {\r\n display: block;\r\n position: absolute;\r\n height: 20px;\r\n top: 6px;\r\n cursor: pointer;\r\n padding: 0;\r\n}\r\n\r\n.gp-styling-option input[type=\"checkbox\"] {\r\n height: 10px;\r\n right: 70px;\r\n padding: 0;\r\n border: none;\r\n background: none;\r\n}\r\n\r\n.gp-styling-option input[type=\"color\"] {\r\n width: 30px;\r\n right: 70px;\r\n padding: 0;\r\n border: none;\r\n background: none;\r\n}\r\n\r\n.gp-styling-option input[type=\"text\"] {\r\n width: 80px;\r\n right: 40px;\r\n padding: 0 5px;\r\n margin: none;\r\n background: none;\r\n border: 1px solid #808080;\r\n color: #0B6BA7;\r\n}\r\n\r\n\r\n/* Styling slider : general */\r\n.gp-styling-option input[type=\"range\"] {\r\n margin: 0;\r\n width: 80px;\r\n right: 40px;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]:focus {\r\n box-shadow: none;\r\n outline: none;\r\n}\r\n\r\n/* Styling slider : Chrome, Safari, Opera */\r\n\r\n.gp-styling-option input[type=\"range\"]::-webkit-slider-runnable-track {\r\n -webkit-appearance: none;\r\n height: 1px;\r\n background-color: #808080;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-webkit-slider-thumb:before {\r\n position: absolute;\r\n top: 0;\r\n right: 50%;\r\n left: -200px;\r\n height: 1px;\r\n pointer-events: none;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-webkit-slider-thumb {\r\n width: 13px;\r\n height: 13px;\r\n -webkit-appearance: none;\r\n background-color: #0B6BA7;\r\n border: none;\r\n border-radius: 50%;\r\n position: relative;\r\n top: -6px;\r\n}\r\n\r\n/* Styling slider : Firefox */\r\n\r\n.gp-styling-option input[type=\"range\"]::-moz-range-track {\r\n width: 70px;\r\n height: 1px;\r\n background-color: #808080;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-moz-range-thumb {\r\n width: 13px;\r\n height: 13px;\r\n background-color: #0B6BA7;\r\n border: none;\r\n border-radius: 50%;\r\n box-shadow: 0;\r\n position: relative;\r\n}\r\n\r\n/* Styling slider : IE */\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-track {\r\n border: 0;\r\n border-color: transparent;\r\n border-radius: 0;\r\n border-width: 0;\r\n color: transparent;\r\n height: 1px;\r\n width: 70px;\r\n background-color: #808080;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-fill-lower,\r\n.gp-styling-option input[type=\"range\"]::-ms-fill-upper {\r\n background: transparent;\r\n border-radius: 0;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-thumb {\r\n width: 13px;\r\n height: 13px;\r\n background-color: #0B6BA7;\r\n border: none;\r\n border-radius: 50%;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-tooltip {\r\n display: none;\r\n}\r\n\r\n\r\n.gp-styling-option .marker-input-radio {\r\n display: none;\r\n}\r\n\r\n.gp-styling-option .marker-label {\r\n display: inline-block;\r\n height: 32px;\r\n padding: 3px;\r\n margin-right: 5px;\r\n margin-bottom: 5px;\r\n cursor: pointer;\r\n}\r\n\r\n.gp-styling-option .marker-input-radio:checked + .marker-label {\r\n padding: 2px;\r\n background-color: rgba(0,183,152,0.5);\r\n border: 1px solid #002A50;\r\n}\r\n\r\n.gp-styling-option .marker-label img {\r\n height: 24px;\r\n}\r\n","/* Geoportal Attribution */\n\n.ol-attribution .gp-control-attribution-image {\n max-height: 30px;\n max-width: inherit;\n vertical-align: middle;\n}\n",".GPpanelHeader {\n padding: unset;\n}\n\n\n[id^=GPelevationPathPanelClose] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: -27px center;\n}\n\n[id^=GPelevationPathProfil] {\n height: 150px;\n width: inherit;\n}\n\n[id^=GPelevationPathProfil] > #profileElevationByDefault > svg {\n position: absolute;\n left: 10px;\n}\n\ndiv[id^=GPelevationPathInformationsContainer] {\n position: absolute;\n top: 32px;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(255, 255, 255, 0.9);\n border-radius: 4px;\n overflow: hidden;\n}\n\n/* CSS : Raw */\n\n#profileElevationRaw {\n resize: none;\n padding: unset;\n}\n\n/* CSS : default */\n\n#profileElevationByDefault {\n display:-webkit-flex;\n display:-webkit-box;\n display:-ms-flexbox;\n display:flex;\n -webkit-box-orient:vertical;\n -webkit-box-direction:normal;\n -webkit-flex-direction:column;\n -ms-flex-direction:column;\n flex-direction:column;\n height:100%;\n}\n\n.altiPathValue {\n font-weight: 700;\n fill: #5E5E5E;\n}\n\n.altiPathCoords {\n font-style: italic;\n fill: #5E5E5E;\n}\n\n\n/* CSS : D3 */\n\n.axis-d3 > text {\n fill: rgb(94, 94, 94);\n font-family: Verdana;\n font-size: 10px;\n opacity: 1;\n text-anchor: end;\n}\n\n.axis-d3 {\n fill: none;\n stroke: #5E5E5E;\n stroke-width: 1;\n shape-rendering: crispEdges;\n}\n\n.area-d3 {\n fill: #C77A04;\n stroke: #5E5E5E;\n stroke-width: 0;\n fill-opacity: 0.4;\n}\n\n.line-d3 {\n fill: none;\n stroke: #C77A04;\n stroke-width: 1px;\n}\n\n.grid-d3 .tick {\n stroke: lightgrey;\n opacity: 0.7;\n}\n\n.grid-d3 path {\n stroke-width: 0;\n}\n\n.grid-d3 .tick {\n stroke: lightgrey;\n opacity: 0.7;\n}\n\n.grid-d3 path {\n stroke-width: 0;\n}\n\n.overlay-d3 {\n fill: none;\n pointer-events: all;\n}\n\n.focusLine-d3 {\n fill: none;\n stroke: #C77A04;\n stroke-width: 0.5px;\n}\n\n.focusCircle-d3 {\n fill: #C77A04;\n}\n\ndiv.tooltip-d3 {\n position: inherit;;\n text-align: left;\n width: 80px;\n height: 45px;\n padding: 5px;\n font: 8px sans-serif;\n background: white;\n border: 0px;\n border-radius: 8px;\n pointer-events: none;\n}\n\n[id^=GPelevationPathPanel-] {\n width: 280px;\n}\n\n[id^=GPelevationPathPanelInfo] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: -75px center;\n}\n\nbutton[id^=\"GPshowElevationPathPicto-\"] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: 1px center;\n}\n/*\n@media (min-width:720px) and (min-height:720px) {\n\n[id^=GPelevationPathPanel] {\ntop: 15px;\nleft: 15px;\n}\n\n}\n\n@media (min-width:720px) and (min-height:520px) {\n\n[id^=GPelevationPathPanel] {\nwidth: 460px;\n}\n\n[id^=GPelevationPathProfil] {\nheight: 220px;\n}\n\n}\n\n@media (max-width:560px), (max-height:340px) {\n\n[id^=GPelevationPathPanel] {\ndisplay: none !important;\n}\n\n}\n*/\n","/* main container */\ndiv[id^=GPexportContainer-] {\n padding: 5px;\n}\n\ndiv[id^=GPexportContainer-] > input.GPsubmit {\n color: white;\n}\n\n/* bouton */\ninput[id^=GPexportButton-] {\n min-width: fit-content;\n padding-left: 25px;\n padding-right: 5px;\n background-image: url(\"img/GPexportSave.svg\");\n background-size: 25px 25px;\n background-repeat: no-repeat;\n}\n\n/* menu */\n.GPexportMenuHidden {\n visibility: hidden;\n}\n\n.GPexportMenuContainer {\n position: relative;\n display: inline-block;\n}\n\n.GPexportMenuContent {\n display: none;\n position: absolute;\n background-color: #f1f1f1;\n min-width: 80px;\n padding: 8px;\n border-radius: 10px;\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n z-index: 1;\n}\n\n.GPexportMenuContent a:hover { background-color: #f1f1f1; }\n\n.GPexportMenuContainer:hover .GPexportMenuContent { display: block; }\n\n/* menu des formats */\n.GPexportMenuContent .container {\n display: block;\n position: relative;\n padding-left: 15px;\n margin-bottom: 5px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n \n.GPexportMenuContent .container input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n}\n \n.GPexportMenuContent .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 12px;\n width: 12px;\n background-color: #eee;\n border-radius: 50%;\n}\n \n.GPexportMenuContent .container:hover input ~ .checkmark {\n background-color: #ccc;\n}\n\n.GPexportMenuContent .container input:checked ~ .checkmark {\n background-color: #366291;\n}\n \n.GPexportMenuContent .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n}\n\n.GPexportMenuContent .container input:checked ~ .checkmark:after {\n display: block;\n}\n \n.GPexportMenuContent .container .checkmark:after {\n top: 4px;\n left: 4px;\n width: 4px;\n height: 4px;\n border-radius: 50%;\n background: white;\n}","/* GET FEATURE INFO */\nbutton[id^=GPgetFeatureInfoPicto][aria-pressed=\"true\"] {\n background-repeat: no-repeat;\n background-position: 1px center;\n}\n\nbutton[id^=GPgetFeatureInfoPicto] {\n background-image: url(\"img/GPactivateGfi.png\");\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n background-position: -25px center;\n /* transition: border-radius 0.5s ease-out 0s, opacity 0.5s ease-out 0s; */\n}\n\n.GPcloseGetFeatureInfo {\n background-image: url(\"../../img/GPclose.png\");\n background-position: 0px center;\n}\n\n.GPgfiLayerButton {\n border: unset;\n background: unset;\n text-align: left;\n font-weight: bold;\n}\n\nbutton[aria-expanded=\"true\"].GPgfiLayerButton span.GPshowGfiLayerFeature {\n -webkit-transform: rotateX(180deg);\n transform: rotateX(180deg);\n}\n\n.GPshowGfiLayerFeature {\n display: inline-block;\n width: 28px;\n height: 28px;\n vertical-align: middle;\n background-image: url(\"img/GPgfiDetails.png\");\n background-position: -26px 0;\n}","/* ISOCHRON */\r\n[id^=GPisochronPanel-] {\r\n width: 280px;\r\n}\r\n\r\n.GPshowIsochronPicto {\r\n background-image: url(\"img/GPisochronOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GPisochronPanelClose {\r\n background-image: url(\"img/GPisochronOpen.png\");\r\n}\r\n\r\n/* Reset picto */\r\n\r\nbutton[id^=GPisochronReset] {\r\n opacity: 0.8;\r\n transition: opacity 0.2s ease-out;\r\n}\r\n\r\nbutton[id^=GPisochronReset]:hover {\r\n opacity: 1;\r\n}\r\n\r\n.GPisochronReset {\r\n background-color: #366291;\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -281px center;\r\n}\r\n\r\n/* Isochron form */\r\nform[id^=GPisochronForm] {\r\n padding: 15px;\r\n}\r\n\r\ndiv[id^=GPisochronChoice] {\r\n margin: auto;\r\n margin-top: 10px;\r\n margin-bottom: 5px;\r\n width: 160px;\r\n -webkit-justify-content: space-between;\r\n -webkit-box-pack: justify;\r\n -ms-flex-pack: justify;\r\n justify-content: space-between;\r\n}\r\n\r\np[id^=GPisochronPointLabelP], p[id^=GPisochronValueChronLabelP] {\r\n margin: 2px 0 5px 0;\r\n}\r\n\r\n.GProuteComputationLabel {\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GPisochronChoiceAlt input:checked + label + span {\r\n color: #366291;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron] + .GPisochronChoiceAltImg {\r\n background-position: -56px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron]:checked + .GPisochronChoiceAltImg {\r\n background-position: -84px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltDist] + .GPisochronChoiceAltImg {\r\n background-position: -112px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltDist]:checked + .GPisochronChoiceAltImg {\r\n background-position: -140px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron] {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n}\r\n\r\n.GPisochronOriginPointerImg,\r\n.GPisochronChoiceAltImg,\r\n.GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n font-size: 0;\r\n}\r\n\r\n.GPisoExclusionsOption {\r\n background-image: url(\"img/GPisochronCheck.png\");\r\n}\r\n\r\n.GPisochronOriginPointerImg {\r\n width: 28px;\r\n background-color: #F2F2F2;\r\n cursor: pointer;\r\n}\r\n\r\n.GPisochronChoiceAlt input {\r\n display: none;\r\n}\r\n\r\n.GPisochronChoiceAltImg {\r\n display: block;\r\n width: 28px;\r\n height: 28px;\r\n margin: auto;\r\n cursor: pointer;\r\n}\r\n\r\n.GPisochronChoiceAlt span {\r\n cursor: pointer;\r\n display:block;\r\n color: #999;\r\n}\r\n\r\n.GPisochronModeLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 5px;\r\n}\r\n\r\ninput[id^=GPisochronTransportCar] + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -168px 0;\r\n}\r\n\r\ninput[id^=GPisochronTransportCar]:checked + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -196px 0;\r\n}\r\n\r\ninput[id^=GPisochronTransportPedestrian] + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -224px 0;\r\n}\r\n\r\ninput[id^=GPisochronTransportPedestrian]:checked + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -252px 0;\r\n}\r\n\r\n.GPisochronTransportChoice input {\r\n display: none;\r\n}\r\n\r\ndiv[id^=GPisochronTransportChoice] > div {\r\n width: 100%;\r\n justify-content: center;\r\n}\r\n\r\ndiv[id^=GPisochronValueChron],\r\ndiv[id^=GPisochronValueDist] {\r\n width: 220px;\r\n margin: 5px auto;\r\n}\r\n\r\n.GPisochronTransportImg {\r\n display: inline-block;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n}\r\n\r\n.GPisochronTransportImg:first-of-type {\r\n margin-left: 18px;\r\n margin-right: 10px;\r\n}\r\n\r\nselect[id^=GPisochronDirectionSelect] {\r\n width: 80px;\r\n margin: 5px auto;\r\n}\r\n\r\n.GPshowIsoExclusionsPicto {\r\n top: unset;\r\n right: 0;\r\n transition: all 0.5s ease-out 0s;\r\n}\r\n\r\n.GPisoExclusionsLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 10px;\r\n font-weight: bold;\r\n line-height: 16px;\r\n}\r\n\r\n.GPisoExclusionsOptions {\r\n display: -webkit-flex;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-justify-content: space-around;\r\n -ms-flex-pack: distribute;\r\n justify-content: space-around;\r\n}\r\n\r\n.GPisoExclusionsOption {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n color: #A77;\r\n background-color: #FEE;\r\n padding-left: 28px;\r\n padding-right: 5px;\r\n border: 1px solid #A77;\r\n border-radius: 3px;\r\n cursor: pointer;\r\n}\r\n\r\ninput:checked + .GPisoExclusionsOption {\r\n background-color: #EFE;\r\n background-position: 0 -28px;\r\n color: #797;\r\n border: 1px solid #797;\r\n}\r\n\r\ninput[id^=GPisochronSubmit-] {\r\n width: fit-content;\r\n padding: 0 10px;\r\n}","\r\n/* Import form */\r\n[id^=\"GPimportPanel-\"] {\r\n width: 340px;\r\n}\r\n\r\n[id^=\"GPimportGetCapPanel-\"],\r\n[id^=\"GPimportMapBoxPanel-\"] {\r\n width: 340px;\r\n}\r\n\r\ndiv[id^=\"GPimportTypeLine-\"] {\r\n border-bottom: 1px solid #999;\r\n padding-bottom: 15px;\r\n margin-bottom: 15px;\r\n}\r\n\r\ndiv[id^=\"GPimportChoice-\"] {\r\n margin-top: 5px;\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GPshowImportPicto {\r\n background-image: url(\"img/GPimportOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GPimportPanelClose,\r\n.GPimportGetCapPanelClose,\r\n.GPimportMapBoxPanelClose {\r\n background-image: url(\"img/GPimportOpen.png\");\r\n}\r\n\r\n.GPimportPanelReturnPicto {\r\n background-color: #366291;\r\n background-image: url(\"../../img/GPreturn.png\");\r\n /* background-position: 3px center; */\r\n}\r\n\r\n.GPimportChoiceAlt input[type=\"radio\"] {\r\n display: none;\r\n}\r\n\r\n.GPimportChoiceAltTxt {\r\n display: block;\r\n line-height: 28px;\r\n color: #BBB;\r\n font-weight: bold;\r\n cursor: pointer;\r\n}\r\n\r\ninput[type=\"radio\"]:checked + .GPimportChoiceAltTxt {\r\n color: #366291;\r\n}\r\n\r\n/* Line inputs */\r\n\r\n.GPimportInputLine {\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n margin-bottom: 10px;\r\n}\r\n\r\n.GPimportInputLine > * {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n border: 1px solid #999;\r\n border-radius: 0;\r\n}\r\n\r\n.GPimportInputLine *:not(:last-child) {\r\n border-right:none;\r\n}\r\n\r\n.GPimportInputLine *:first-child {\r\n border-radius: 3px 0 0 3px;\r\n}\r\n\r\n.GPimportInputLine *:last-child {\r\n border-radius: 0 3px 3px 0;\r\n}\r\n\r\n.GPimportInputLine > *:not(input) {\r\n overflow: hidden;\r\n white-space: nowrap;\r\n -o-text-overflow: ellipsis;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n.GPimportInputLine > input {\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding: 0 5px;\r\n min-width: 0;\r\n}\r\n\r\n.GPimportInputLine > select {\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding-right: 7px;\r\n}\r\n\r\n.GPimportInputLine > label {\r\n background-color: #F2F2F2;\r\n color: #666;\r\n padding-left: 7px;\r\n padding-right: 9px;\r\n cursor: pointer;\r\n}\r\n\r\n\r\n\r\n.GPimportGetCapProposal {\r\n width: 100%;\r\n height: 28px;\r\n line-height: 16px;\r\n padding: 6px 10px;\r\n color: #5E5E5E;\r\n font-size: 1.0em;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n -o-text-overflow:ellipsis;\r\n text-overflow:ellipsis;\r\n cursor: pointer;\r\n list-style-type: none;\r\n}\r\n\r\n.GPimportGetCapRubriqueTitle,\r\n.GPimportMapBoxSourceTitle,\r\n.GPimportMapBoxListSourceTitle {\r\n color: #5E5E5E;\r\n}\r\n\r\n.GPimportGetCapRubrique,\r\n.GPimportGetCapListRubrique,\r\n.GPimportMapBoxSource,\r\n.GPimportMapBoxListSource {\r\n list-style-type: none;\r\n}\r\n\r\nli.GPimportGetCapRubrique:before,\r\nli.GPimportGetCapListRubrique:before,\r\nli.GPimportMapBoxSource:before,\r\nli.GPimportMapBoxListSource:before {\r\n\t/* content: \"→ \"; caractère UTF-8 */\r\n content: \"» \";\r\n}\r\n\r\n.GPimportGetCapProposal:hover,\r\n.GPimportGetCapRubrique:hover,\r\n.GPimportMapBoxSource {\r\n\r\n}\r\n\r\n.GPimportGetCapRubriqueTitle:hover,\r\n.GPimportMapBoxSourceTitle:hover {\r\n color: #000000;\r\n}\r\n\r\n.GPimportGetCapProposal:hover {\r\n color: #000000;\r\n}\r\n\r\n.GPimportMapBoxSourceVisibility,\r\n.GPimportMapBoxSourceStyle,\r\n.GPimportMapBoxSourceFilter,\r\n.GPimportMapBoxSourceScale {\r\n display: inline-block;\r\n margin-left: 15px;\r\n}\r\n\r\n.GPimportMapBoxJsonEdit {\r\n outline: 1px solid #ccc;\r\n padding: 5px;\r\n margin: 5px;\r\n}\r\n.GPimportMapBoxJsonEdithidden {\r\n display: none;\r\n}\r\n\r\n.gp-json-string { color: green; }\r\n.gp-json-number { color: darkorange; }\r\n.gp-json-boolean { color: blue; }\r\n.gp-json-null { color: magenta; }\r\n.gp-json-key { color: red; }\r\n\r\n.GPimportMapBoxSourceVisibilityInput {\r\n display: block !important;\r\n}\r\n\r\n.GPimportMapBoxSourceVisibilityLabel {\r\n\r\n}\r\n\r\n.GPimportMapBoxSourceScale {\r\n}\r\n\r\n[id^=\"GPimportPanelReturnPicto-\"] {\r\n position: absolute;\r\n width: 26px;\r\n height: 26px;\r\n border-radius: 3px;\r\n opacity: 1;\r\n background-position: 0 0;\r\n cursor: pointer;\r\n}","/* LAYER SWITCHER */\r\n\r\n.GPlayerSwitcher_layer {\r\n background-color: #FFF;\r\n}\r\n\r\ndiv[id^=GPlayerSwitcher-] {\r\n height: 32px;\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] + dialog[id^=GPlayersList] {\r\n width: 190px;\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto] {\r\n /* transition: opacity 0.5s ease-out 0s, box-shadow 0.5s ease-out 0s, border 0.5s ease-out 0s, border-radius 0.5s ease-out 0s; */\r\n background-position: -2px center;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/GPshowLayersList.png\");\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] {\r\n border-top-right-radius: 0;\r\n border-top-left-radius: 0;\r\n background-position: -35px center;\r\n /* transition: border-radius 0.5s ease-out 0s, opacity 0.5s ease-out 0s; */\r\n}\r\n\r\n/* Layers list */\r\n.GPpanelBody {\r\n overflow: auto;\r\n max-height: 200px;\r\n}\r\n\r\nbutton[id^=GPlayerInfoClose] {\r\n background-position: -2px center;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/GPlayerInfoClose.png\");\r\n background-color: unset;\r\n}\r\nbutton[id^=GPlayersPanelClose] {\r\n background-position: -2px center;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/GPlayerClose.png\");\r\n}\r\n\r\n.GPpanelIcon {\r\n background-image: url(\"img/layers.svg\");\r\n background-repeat: no-repeat;\r\n background-size: auto auto;\r\n background-position: center center;\r\n}\r\n/* Layer info panel */\r\n\r\n[id^=GPlayerInfoPanel] {\r\n right: 190px;\r\n}\r\n\r\ndiv[id^=GPlayerInfoTitle] {\r\n color: #366291;\r\n border-bottom: 1px solid #366291;\r\n}\r\n\r\n\r\n.GPlayerBasicTools,\r\n.GPlayerAdvancedTools {\r\n position: relative;\r\n width: 100%;\r\n height: 28px;\r\n}\r\n\r\n.GPlayerExtent,\r\n.GPlayerVisibility,\r\n.GPlayerInfo,\r\n.GPlayerInfoOpened,\r\n.GPlayerRemove {\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlayerExtent,\r\n.GPlayerVisibility,\r\n.GPlayerName,\r\n.GPlayerInfo,\r\n.GPlayerInfoOpened,\r\n.GPlayerRemove,\r\n.GPlayerOpacity,\r\n.GPlayerOpacityValue {\r\n position: absolute;\r\n top: 0;\r\n}\r\n\r\n.GPghostLayer {\r\n opacity: 0;\r\n}\r\n\r\n/* Layer basic tools */\r\n\r\n.GPlayerBasicTools {\r\n background-color: #FFF;\r\n}\r\n\r\n\r\n/* Layer advanced tools */\r\n\r\n.GPlayerExtent,\r\n.GPlayerVisibility,\r\n.GPshowLayerAdvancedTools,\r\n.GPlayerInfo,\r\n.GPlayerInfoOpened,\r\n.GPlayerRemove {\r\n background-image: url(\"img/GPlayerTools.png\");\r\n}\r\n\r\n/* Opacity slider : Chrome, Safari, Opera */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-runnable-track {\r\n background: url(\"img/GPopacitySlider.png\");\r\n}\r\n\r\n/* Opacity slider : Firefox */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-moz-range-track {\r\n background: url(\"img/GPopacitySlider.png\");\r\n}\r\n\r\n/* Opacity slider : IE */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-track {\r\n background: url(\"img/GPopacitySlider.png\");\r\n}\r\n\r\n\r\ndiv[id^=GPlayerInfoQuicklook] {\r\n background-image: url(\"img/GPlayerInfo.png\");\r\n}\r\n\r\ndiv[id^=GPlayerInfoClose] {\r\n background-image: url(\"img/GPlayerInfoClose.png\");\r\n}\r\n\r\n.GPlayerInfoLink,\r\n.GPlayerInfoPopup {\r\n background-image: url(\"img/GPlayerInfo.png\");\r\n}\r\n\r\nbutton[id^=GPinfo_ID_],\r\nbutton[id^=GPremove_ID_],\r\nbutton[id^=GPvisibilityPicto_ID_] {\r\n border: none;\r\n background-color: transparent;\r\n}\r\n\r\nbutton[id^=GPvisibilityPicto_ID_][aria-pressed=\"false\"] {\r\n left: 0;\r\n background-position: -28px 0;\r\n}\r\n\r\nbutton[id^=GPvisibilityPicto_ID_][aria-pressed=\"true\"] {\r\n background-position: 0 0;\r\n}\r\n\r\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools {\r\n max-height: 28px;\r\n}\r\n\r\n.GPshowLayerAdvancedTools {\r\n top: 0;\r\n right: 0;\r\n background-position: -112px 0;\r\n}\r\n\r\n.GPlayerInfo {\r\n left: 0;\r\n background-position: -55px 0;\r\n}\r\n\r\n.GPlayerInfoOpened {\r\n left: 0;\r\n background-position: -83px 0;\r\n}\r\n\r\n.GPlayerOpacity {\r\n left: 28px;\r\n width: calc(100% - 100px);\r\n height: 28px;\r\n padding-left: 8px;\r\n}\r\n\r\n.GPlayerOpacityValue {\r\n width: 32px;\r\n left: calc(100% - 60px);\r\n line-height: 28px;\r\n font-size: 10px;\r\n font-style: italic;\r\n cursor: default;\r\n}\r\n\r\n.GPlayerRemove {\r\n right: 0;\r\n background-position: -140px 0;\r\n}\r\n\r\n/* Opacity slider : general */\r\n\r\n.GPlayerOpacity input {\r\n -webkit-appearance: none;\r\n -moz-appearance: none;\r\n background: none;\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n margin: 0;\r\n padding: 0;\r\n overflow: hidden;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]:focus {\r\n box-shadow: none;\r\n outline: none;\r\n}\r\n\r\n/* Opacity slider : Chrome, Safari, Opera */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-runnable-track {\r\n -webkit-appearance: none;\r\n height: 3px;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-thumb:before {\r\n position: absolute;\r\n top: 0;\r\n right: 50%;\r\n left: -200px;\r\n height: 3px;\r\n pointer-events: none;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-thumb {\r\n width: 9px;\r\n height: 17px;\r\n -webkit-appearance: none;\r\n border: 2px solid #FFF;\r\n background-color: #505050;\r\n position: relative;\r\n top: -7px;\r\n}\r\n\r\n/* Opacity slider : Firefox */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-moz-range-track {\r\n width: 80px;\r\n height: 3px;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-moz-range-thumb {\r\n width: 5px;\r\n height: 13px;\r\n border: 2px solid #FFF;\r\n border-radius: 0;\r\n box-shadow: 0;\r\n background-color: #505050;\r\n position: relative;\r\n}\r\n\r\n/* Opacity slider : IE */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-track {\r\n border: 0;\r\n border-color: transparent;\r\n border-radius: 0;\r\n border-width: 0;\r\n color: transparent;\r\n height: 3px;\r\n width: 80px;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-fill-lower,\r\n.GPlayerOpacity input[type=\"range\"]::-ms-fill-upper {\r\n background: transparent;\r\n border-radius: 0;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-thumb {\r\n width: 5px;\r\n height: 13px;\r\n border: 2px solid #FFF;\r\n background-color: #505050;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-tooltip {\r\n display: none;\r\n}\r\n\r\n/* Layer info panel */\r\n\r\n[id^=GPlayerInfoPanel] {\r\n position: absolute;\r\n top: 0;\r\n overflow-y: hidden;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n}\r\n\r\n.GPlayerInfoPanelOpened {\r\n display: block;\r\n}\r\n\r\n.GPlayerInfoPanelClosed {\r\n display: none;\r\n}\r\n\r\n/* div[id^=GPlayerInfoContent] {\r\n position: relative;\r\n width: 280px;\r\n max-height: 200px;\r\n overflow-y: auto;\r\n padding-left: 10px;\r\n padding-right: 10px;\r\n} */\r\n\r\ndiv[id^=GPlayerInfoTitle] {\r\n width: calc(100% - 52px);\r\n margin: auto;\r\n margin-bottom: 10px;\r\n padding-bottom: 5px;\r\n text-align: center;\r\n font-size: 1.1em;\r\n font-weight: bold;\r\n}\r\n\r\ndiv[id^=GPlayerInfoQuicklook] {\r\n position: absolute;\r\n top: -2px;\r\n left: 10px;\r\n width: 20px;\r\n height: 20px;\r\n cursor: pointer;\r\n}\r\n\r\ndiv[id^=GPlayerInfoClose] {\r\n position: absolute;\r\n top: -8px;\r\n right: 10px;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n}\r\n\r\ndiv[id^=GPlayerInfoDescription] {\r\n font-size: 0.9em;\r\n}\r\n\r\ndiv[id^=GPlayerInfoLegend] {\r\n\r\n}\r\n\r\ndiv[id^=GPlayerInfoMetadata] {\r\n\r\n}\r\n\r\n.GPlayerInfoSubtitle {\r\n padding-left: 35px;\r\n font-weight: bold;\r\n margin-top: 10px;\r\n margin-bottom: 4px;\r\n}\r\n\r\n.GPlayerInfoLink,\r\n.GPlayerInfoPopup {\r\n line-height: 20px;\r\n padding-left: 23px;\r\n white-space: nowrap;\r\n overflow-x: hidden;\r\n text-overflow: ellipsis;\r\n color: #999999;\r\n background-repeat: no-repeat;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlayerInfoLink {\r\n background-position: 0 -20px;\r\n}\r\n\r\n.GPlayerInfoLink:hover,\r\n.GPlayerInfoPopup:hover {\r\n color: #333;\r\n}\r\n\r\n.GPlayerInfoLink a,\r\n.GPlayerInfoLink a:visited\r\n.GPlayerInfoLink a:focus\r\n.GPlayerInfoLink a:hover {\r\n text-decoration: none;\r\n color: inherit;\r\n}\r\n\r\n\r\n.GPlayerName {\r\n left: 28px;\r\n width: calc(100% - 56px);\r\n line-height: 28px;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n padding-left: 4px;\r\n cursor: move;\r\n}\r\n\r\n.outOfRange .GPlayerName {\r\n color: #AAA;\r\n}\r\n\r\ndiv[id^=GPlayerInfoContent] {\r\n width: 280px;\r\n}","/* Location */\n[id*=\"GPlocationOriginPointer\"] {\n background-image: url(\"img/GPlocationOptions.png\");\n background-repeat: no-repeat;\n}\n\n[id^=GPlocationStageRemove],\n[id^=GPlocationStageAdd] {\n background-image: url(\"img/GPlocationOptions.png\");\n}\n\n[id^=GPlocationStageRemove],\n[id^=GPlocationStageAdd] {\n width: 28px;\n height: 28px;\n border: none;\n cursor: pointer;\n}\n\n.GPlocationOpen {\n background-color: unset;\n}\n.GPlocationOriginLabel {}\n.GPlocationStageRemove {\n background-position: -84px center;\n}\n.GPlocationStageAdd {\n background-position: -56px center;\n}\n\n[id*=\"GPlocationOriginPointer\"] + .GPlocationOriginPointerImg {\n background-position: -1px center;\n}\n\n[id*=\"GPlocationOriginPointer\"]:checked + .GPlocationOriginPointerImg {\n background-position: -29px center;\n}\n\n.GPlocationStageFlexInput {\n max-height: 28px;\n opacity: 1;\n}\n\nbutton.GPlocationOriginPointerImg[id*=\"GPlocationOriginPointerImg\"] {\n width: 28px;\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n border-right: 1px solid #999;\n}\n\n.GPlocationStageFlexInput {\n margin-bottom: 5px;\n}\n\ndiv[id^=GPlocationAutoCompleteList] {\n\n}\n","/* MEASURELENGTH POSITION */\r\n\r\n\r\n/* Showing/hiding measureLength position panel */\r\n\r\nbutton[id^=\"GPshowMeasureAreaPicto-\"] {\r\n background-image: url(\"img/GPmeasuresOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: -78px center;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAreaPicto-\"][aria-pressed=\"false\"] {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAreaPicto-\"][aria-pressed=\"true\"] {\r\n background-color: rgba(0,60,136,0.7);\r\n}","/* MEASURELENGTH POSITION */\r\n\r\n/* Showing/hiding drawing panel */\r\n\r\nbutton[id^=\"GPshowMeasureLengthPicto-\"] {\r\n background-image: url(\"img/GPmeasuresOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: -24px center;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureLengthPicto-\"][aria-pressed=\"false\"] {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureLengthPicto-\"][aria-pressed=\"true\"] {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n","/* MEASURELENGTH POSITION */\r\n\r\n/* Showing/hiding measureLength position panel */\r\n\r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"] {\r\n background-image: url(\"img/GPmeasuresOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 2px center;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"][aria-pressed=\"false\"] {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"][aria-pressed=\"true\"] {\r\n background-color: rgba(0,60,136,0.7);\r\n}","/* MEASURE TOOL */\n\n.GPmeasureTooltip {\n position: relative;\n background: rgba(0, 0, 0, 0.5);\n border-radius: 4px;\n color: white;\n padding: 4px 8px;\n white-space: nowrap;\n}\n\n.GPmeasureTooltip-measure {\n font-weight: bold;\n}\n\n.GPmeasureTooltip-info {\n font-size: 0.75em;\n text-align: center;\n}\n\n.GPmeasureTooltip-static {\n background-color: #ffcc33;\n color: black;\n border: 1px solid white;\n}\n\n.GPmeasureTooltip-hidden {\n display: none;\n}\n\n.GPmeasureTooltip-measure::before,\n.GPmeasureTooltip-info::before,\n.GPmeasureTooltip-static::before {\n border-top: 6px solid rgba(0, 0, 0, 0.5);\n border-right: 6px solid transparent;\n border-left: 6px solid transparent;\n content: \"\";\n position: absolute;\n bottom: -6px;\n margin-left: -7px;\n left: 50%;\n}\n\n.GPmeasureTooltip-static::before {\n border-top-color: #ffcc33;\n}\n","\n/* General panels */\n[id^=GPmousePositionPanel-] {\n width: 280px;\n}\n\nbutton[id^=\"GPshowMousePositionPicto-\"] {\n background-image: url(\"img/GPmousePositionOpen.png\");\n background-repeat: no-repeat;\n background-position: 1px center;\n}\n\n.GPmousePositionEditTool {\n background-image: url(\"img/GPmousePositionEditCoordinates.png\");\n}\n\nbutton[id^=GPmousePositionPanelClose] {\n background-image: url(\"img/GPmousePositionOpen.png\");\n}\n\n/* Map center localisation */\n\n.GPmousePositionLabel,\n.GPmousePositionCoords {\n display: inline-block;\n line-height: 20px;\n}\n\n.GPmousePositionLabel {\n width: 100px;\n font-weight: bold;\n}\n\n.GPmousePositionCoords {\n width: 110px;\n}\n\n/* Showing settings */\n\n.GPshowMousePositionSettingsPicto {\n bottom: 5px;\n right: 0;\n transition: all 0.5s ease-out 0s;\n}\n\n.GPmousePositionSettingsLabel {\n display: block;\n margin: auto;\n text-align: center;\n font-weight: bold;\n line-height: 16px;\n}\n\n.GPmousePositionSettingsSelect {\n width: 180px;\n margin-top: 5px;\n margin-inline: auto;\n}\n\n/* sexagesimal coordinates */\n\n.GPSexagesimal, .GPSexagesimalsec {\n margin:0;\n border: 1px solid rgb(204, 204, 204);\n border-radius: 4px;\n}\n\ninput:read-only.GPSexagesimal, input:read-only.GPSexagesimalsec {\n text-align: right;\n}\n\n\n.GPmousePositionSexagesimalLabel {\n font-size: 1.2em;\n vertical-align: middle;\n padding: 0;\n}\n\n/* direction N/S ou E/O */\nselect.GPmousePositionDirection {\n border: 1px solid #999;\n margin-left: 2px;\n}\n\nselect.GPmousePositionDirection:disabled{\n border: none;\n background: transparent;\n color: black;\n /*For FireFox*/\n -webkit-appearance: none;\n /*For Chrome*/\n -moz-appearance: none;\n}\n\n/*For IE10+*/\nselect.GPmousePositionDirection:disabled::-ms-expand {\n display: none;\n}\nselect.GPmousePositionDirection:disabled::-ms-value {\n color: black;\n}\n\n.GPmousePositionUnits,\n.GPmousePositionAltitudeUnits {\n margin-left: 5px;\n}\n\n/* EDIT COORDINATES TOOLS */\n.GPmousePositionPanelEditTools {\n position: absolute;\n top: 20px;\n right: 5px;\n}\n\n.GPmousePositionEditTool {\n width: 18px;\n height: 18px;\n display: inline-block;\n cursor: pointer;\n}\n","/* REVERSE GEOCODING */\r\n[id^=\"GPreverseGeocodingPanel-\"] {\r\n width: 280px;\r\n}\r\n\r\n.GPshowReverseGeocodingPicto {\r\n background-image: url(\"img/GPreverseGeocodingOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GPreverseGeocodingPanelClose {\r\n background-image: url(\"img/GPreverseGeocodingOpen.png\");\r\n}\r\n\r\n.GPreverseGeocodingReturnPicto {\r\n background-image: url(\"../../img/GPreturn.png\");\r\n background-repeat: no-repeat;\r\n background-position: 0 center;\r\n}\r\n\r\n/* Results panel */\r\n\r\n.GPlocationHighlight {\r\n background-color: rgba(255,200,0,0.25);\r\n color: #222;\r\n}","/* ROUTE */\r\n[id^=GProutePanel-] {\r\n width: 320px;\r\n}\r\n\r\n.GPshowRoutePicto {\r\n background-image: url(\"img/GProuteOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GProutePanelClose {\r\n background-image: url(\"img/GProuteOpen.png\");\r\n}\r\n\r\n/* Route form */\r\nform[id^=GProuteForm] {\r\n padding: 15px;\r\n}\r\n\r\n.GProuteStageFlexInput {\r\n max-height: 28px;\r\n opacity: 1;\r\n}\r\n\r\n.GProuteStageFlexInputHidden {\r\n max-height: 0;\r\n opacity: 0;\r\n overflow: hidden;\r\n}\r\n\r\n.GProutePointLabelP {\r\n margin: 2px 0 5px 0;\r\n}\r\n\r\n.GProuteComputationLabel {\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GProuteOriginPointerImg,\r\n.GProuteStageRemove,\r\ndiv[id^=GProuteStageAdd],\r\n.GProuteTransportImg {\r\n background-image: url(\"img/GProuteOptions.png\");\r\n font-size: 0;\r\n}\r\n\r\n.GProuteFormMini {\r\n max-height: 58px;\r\n}\r\n\r\n.GProuteExclusionsOption {\r\n background-image: url(\"img/GProuteCheck.png\");\r\n}\r\n\r\n.GProuteModeLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GProuteTransportImg {\r\n display: inline-block;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n content-visibility: hidden;\r\n}\r\n\r\n.GProuteTransportImg:first-of-type {\r\n margin-left: 18px;\r\n margin-right: 10px;\r\n}\r\n\r\ninput[id^=GProuteTransportCar] + .GProuteTransportImg {\r\n background-position: -112px 0;\r\n}\r\n\r\ninput[id^=GProuteTransportCar]:checked + .GProuteTransportImg {\r\n background-position: -140px 0;\r\n}\r\n\r\ninput[id^=GProuteTransportPedestrian] + .GProuteTransportImg {\r\n background-position: -168px 0;\r\n}\r\n\r\ninput[id^=GProuteTransportPedestrian]:checked + .GProuteTransportImg {\r\n background-position: -196px 0;\r\n}\r\n\r\ndiv[id^=GProuteTransportChoice] input {\r\n display: none;\r\n}\r\n\r\ndiv[id^=GProuteTransportChoice] .gpf-radio-btn-group {\r\n justify-content: center;\r\n}\r\n\r\nselect[id^=GProuteComputationSelect] {\r\n width: 100px;\r\n}\r\n/* Result panel */\r\n\r\n.GProuteResultsDetailsInstructionHighlight {\r\n background-color: rgba(255,200,0,0.25);\r\n color: #222;\r\n}\r\n\r\n.GProuteResultStage {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n}\r\n\r\n\r\n.GProuteResultStageLabel,\r\n.GProuteResultStageValue,\r\n.GProuteResultsValueLabel {\r\n display: inline-block;\r\n line-height: 18px;\r\n}\r\n\r\n.GProuteResultStageLabel,\r\n.GProuteResultsValueLabel {\r\n color: #666;\r\n}\r\n\r\n.GProuteResultStageLabel {\r\n width: 60px;\r\n}\r\n\r\n.GProuteResultsValueLabel {\r\n width: 65px;\r\n}\r\n\r\n.GProuteResultStageValue {\r\n -webkit-flex: 1;\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n overflow-x: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n/* Exclusions */\r\n\r\n\r\n.GPshowRouteExclusionsPicto {\r\n top: unset;\r\n right: 0;\r\n transition: all 0.3s ease-out 0s;\r\n transform: translateY(-100%);\r\n}\r\n\r\n.GProuteExclusionsLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 8px;\r\n margin-top: 8px;\r\n font-weight: bold;\r\n line-height: 16px;\r\n}\r\n\r\n.GProuteExclusionsOptions {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n -webkit-justify-content: space-around;\r\n -ms-flex-pack: distribute;\r\n justify-content: space-around;\r\n}\r\n\r\n.GProuteExclusionsOption {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n color: #A77;\r\n background-color: #FEE;\r\n padding-left: 28px;\r\n padding-right: 5px;\r\n border: 1px solid #A77;\r\n border-radius: 3px;\r\n cursor: pointer;\r\n}\r\n\r\ninput:checked + .GProuteExclusionsOption {\r\n background-color: #EFE;\r\n background-position: 0 -28px;\r\n color: #797;\r\n border: 1px solid #797;\r\n}\r\n\r\n/* Reset picto */\r\n\r\nbutton[id^=GProuteReset] {\r\n /* background-color: #366291; */\r\n background-image: url(\"img/GProuteOptions.png\");\r\n background-position: -224px center;\r\n opacity: 0.8;\r\n transition: opacity 0.2s ease-out;\r\n}\r\n\r\n/* Results popup */\r\n\r\n.gp-features-content-div {\r\n /* min-width: 240px; */\r\n}\r\n\r\n/* Results details header */\r\ndiv[id^=GProuteResultsValueDist],\r\ndiv[id^=GProuteResultsValueTime] {\r\n color: #366291;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails] + label:hover,\r\ninput[id^=GProuteResultsShowDetails] + label + label:hover {\r\n color: #366291;\r\n}\r\n\r\ndiv[id^=GProuteResultsStages] {\r\n margin-bottom: 15px;\r\n}\r\n\r\ndiv[id^=GProuteResultsValueDist],\r\ndiv[id^=GProuteResultsValueTime] {\r\n display: inline-block;\r\n line-height: 18px;\r\n}\r\n\r\ndiv[id^=GProuteResultsValueDist],\r\ndiv[id^=GProuteResultsValueTime] {\r\n width: 80px;\r\n font-weight: bold;\r\n}\r\n\r\nselect[id^=GProuteResultsComputationSelect] {\r\n width: 100px;\r\n}\r\n\r\ndiv[id^=GProuteResultsNew] {\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 3px;\r\n opacity: 0.8;\r\n background-position: -224px 0;\r\n transition: opacity 0.2s ease-out;\r\n cursor: pointer;\r\n background-color: #366291;\r\n background-image: url(\"img/GProuteOptions.png\");\r\n position: initial;\r\n}\r\n\r\n.GPfakeBorder {\r\n display: inline-block;\r\n height: 14px;\r\n width: 60px;\r\n border-bottom: 1px solid #999;\r\n}\r\n\r\n.GPfakeBorderLeft {\r\n margin-left:15px;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails] + label,\r\ninput[id^=GProuteResultsShowDetails] + label + label {\r\n width: 130px;\r\n line-height: 28px;\r\n vertical-align: top;\r\n text-align: center;\r\n font-weight: bold;\r\n cursor: pointer;\r\n transition: color 0.2s ease-out;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails] + label,\r\ninput[id^=GProuteResultsShowDetails]:checked + label + label {\r\n display: inline-block;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails]:checked + label,\r\ninput[id^=GProuteResultsShowDetails] + label + label {\r\n display: none;\r\n}\r\n\r\ndiv:has(input[id^=GProuteResultsShowDetails]) + div[id^=GProuteResultsDetails] {\r\n max-height: 0;\r\n opacity: 0;\r\n}\r\n\r\ndiv:has(input[id^=GProuteResultsShowDetails]:checked) + div[id^=GProuteResultsDetails] {\r\n max-height: 200px;\r\n opacity: 1;\r\n}\r\n\r\ndiv[id^=GProuteResultsDetails] {\r\n overflow-y: auto;\r\n transition: max-height 0.5s ease-in-out 0.25s, opacity 0.5s ease-in-out 0.25s;\r\n}\r\n\r\n.GProuteResultsDetailsNumber,\r\n.GProuteResultsDetailsInstruction {\r\n display: inline-block;\r\n margin-top: 4px;\r\n line-height: 16px;\r\n color: #666;\r\n}\r\n\r\n.GProuteResultsDetailsNumber {\r\n font-weight: bold;\r\n width: 22px;\r\n text-align: right;\r\n vertical-align: top;\r\n}\r\n\r\n.GProuteResultsDetailsInstruction {\r\n width: calc(100% - 30px);\r\n padding-left: 5px;\r\n}\r\n\r\ninput[id^=GProuteSubmit-] {\r\n width: fit-content;\r\n padding: 0 10px;\r\n}","/* SEARCH ENGINE */\r\n\r\n[id^=\"GPsearchEngine-\"] {\r\n flex-direction: row;\r\n align-items: center;\r\n}\r\n\r\n.GPshowSearchEnginePicto {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 0 center;\r\n}\r\n\r\n.GPsearchRadioContainer {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -26px center;\r\n background-repeat: no-repeat;\r\n transition: border-radius 0.5s ease-out 0s;\r\n color: transparent;\r\n overflow: hidden;\r\n position: relative;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n width: 32px;\r\n height: 32px;\r\n padding: 2px;\r\n background-color: rgba(0,60,136,0.5);\r\n border-radius: 4px;\r\n border: 2px solid rgba(255, 255, 255, 0.4);\r\n}\r\n\r\n.GPbuttonsContainer {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.GPsearchRadioContainer:hover {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n\r\n.GPshowAdvancedSearch {\r\n background-color: #fff0;\r\n}\r\n\r\n.GPshowAdvancedSearch:hover {\r\n background-color: #fff0;\r\n}\r\n\r\n.GPshowGeolocate {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -102px center;\r\n background-repeat: no-repeat;\r\n transition: border-radius 0.5s ease-out 0s;\r\n margin-right: 5px;\r\n}\r\n\r\n.GPshowSearchByCoordinate {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -76px center;\r\n background-repeat: no-repeat;\r\n transition: border-radius 0.5s ease-out 0s;\r\n}\r\n\r\n.GPsearchInputReset {\r\n background-image: url(\"img/GPsearchEngineClose.png\");\r\n background-position: 0 center;\r\n}\r\n\r\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] {\r\n max-width: 0px;\r\n border: none;\r\n}\r\n\r\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] {\r\n border-top-right-radius: 0;\r\n}\r\n\r\nbutton[id^=GPsearchInputReset] {\r\n border-top-right-radius: 5px;\r\n border-bottom-right-radius: 5px;\r\n width: 32px;\r\n height: 32px;\r\n}\r\n\r\nbutton[id^=GPcoordinateSearchClose],\r\nbutton[id^=GPgeocodeResultsClose],\r\nbutton[id^=GPadvancedSearchClose] {\r\n top: 0;\r\n right: 0;\r\n width: 30px;\r\n height: 32px;\r\n}\r\n\r\nbutton[id^=GPcoordinateSearchClose],\r\nbutton[id^=GPgeocodeResultsClose] {\r\n background-position: 0 0;\r\n}\r\n\r\nbutton[id^=GPadvancedSearchClose] {\r\n background-repeat: no-repeat;\r\n}\r\n\r\nbutton[id^=GPcoordinateSearchClose],\r\nbutton[id^=\"GPgeocodeResultsClose\"] {\r\n background-image: url(\"img/GPsearchEngineClose.png\");\r\n}\r\n\r\nbutton[id^=\"GPadvancedSearchClose\"] {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -50px 3px;\r\n}\r\n\r\nform[id^=GPsearchInput-] {\r\n width: 280px;\r\n}\r\n\r\nform[id^=GPsearchInput-] input {\r\n display: block;\r\n width: 100%;\r\n /* height: 100%; */\r\n border: 1px solid #999;\r\n border-top-right-radius: 5px;\r\n border-bottom-right-radius: 5px;\r\n padding: 0;\r\n padding-right: 30px;\r\n padding-left: 5px;\r\n color: #333;\r\n font-size: 1.0em;\r\n}\r\n\r\nform[id^=GPsearchInput-] input:disabled {\r\n background-color: #DDD;\r\n color: #999;\r\n}\r\n\r\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] {\r\n max-width: 280px;\r\n}\r\n\r\n.GPsearchInputText {\r\n height: 32px;\r\n}\r\n\r\ndialog[id^=GPcoordinateSearchPanel],\r\ndialog[id^=GPadvancedSearchPanel] {\r\n width: 310px;\r\n position: absolute;\r\n top: 35px;\r\n margin-left: 33px;\r\n}\r\n\r\n/* Autocomplete list / geocode results */\r\n\r\n[id^=\"GPautocompleteResults-\"] {\r\n box-shadow: 0 0 6px #000;\r\n}\r\n\r\ndiv[id^=GPautoCompleteList],\r\ndialog[id^=GPgeocodeResultsList] {\r\n width: 280px;\r\n position: absolute;\r\n max-height: 140px;\r\n background-color: var(--background-default-grey);\r\n}\r\n\r\ndiv[id^=GPautoCompleteList] {\r\n top: 35px;\r\n}\r\n\r\ndialog[id^=GPgeocodeResultsList] {\r\n position: absolute;\r\n top: 35px;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n}\r\n\r\ndiv[id^=GPgeocodeResults-] {\r\n width: 100%;\r\n position: relative;\r\n background-color: #FFF;\r\n max-height: 140px;\r\n overflow-y: auto;\r\n}\r\n\r\n.GPcoordinateSearchLabel,\r\n.GPadvancedSearchCodeLabel,\r\n.GPadvancedSearchFilterLabel {\r\n max-width: 105px;\r\n}\r\n\r\n.GPcoordinateSearchSystemsSelect,\r\n.GPcoordinateSearchSystemsLabel,\r\n.GPadvancedSearchCodeLabel,\r\n.GPadvancedSearchCode,\r\n div[id^=GPadvancedSearchFilters] {\r\n margin-top: 15px;\r\n}\r\n\r\n.GPcoordinateSearchSystemsLabel,\r\n.GPcoordinateSearchSystemsSelect,\r\n.GPcoordinateSearchUnitsLabel,\r\n.GPcoordinateSearchUnitsSelect,\r\n.GPcoordinateSearchLabel,\r\n.GPcoordinateSearchInput,\r\n.GPadvancedSearchFilterLabel,\r\n.GPadvancedSearchFilterInput {\r\n margin-bottom: 5px;\r\n}\r\n",".GPshowToolBoxPicto {\n background-repeat: no-repeat;\n background-image: url(\"img/GPtoolBoxMeasureOpen.png\");\n}",".GPzoomIn {\n background-image: url(\"img/zoom-in.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center;\n height: 32px;\n width: 32px;\n border-bottom: unset;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.GPzoomOut {\n background-image: url(\"img/zoom-out.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center;\n height: 32px;\n width: 32px;\n border-top: unset;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.GPzoomIn:hover, .GPzoomOut:hover {\n cursor: pointer;\n}",".ol-custom-full-screen button {\n background-image: url(\"img/full-screen-buttons.png\");\n background-repeat: no-repeat;\n}\n.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=\"false\"] {\n background-position: 0 0;\n}\n.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=\"true\"] {\n background-position: 0 -30px;\n}\n",".GPshowOverviewMap {\n background-image: url(\"img/overviewmap.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: 2px center;\n}","div[id^=GPlegends-] {\n display: none;\n}","div[id^=GPcatalog-] {\n display: block;\n}\n\n.GPshowCatalogPicto {\n background-image: url(\"img/GPcatalogOpen.png\");\n background-repeat: no-repeat;\n background-position: 0px center;\n}\n\ndialog[id^=GPcatalogPanel-] {\n width: 280px;\n}\n\n.GPcatalogPanelClose {\n background-image: url(\"img/GPcatalogOpen.png\");\n}\n\n.GPtabs {}\n.GPtabsList {\n overflow: hidden;\n border: 1px solid #ccc;\n background-color: #f1f1f1;\n list-style-type: none;\n margin: 0;\n padding: 0;\n display: flex;\n}\n.GPtabList {\n flex: 1 1 0px;\n}\n.GPtabButton {\n background-color: inherit;\n float: left;\n border: none;\n outline: none;\n cursor: pointer;\n padding: 14px 16px;\n transition: 0.3s;\n}\n.GPtabButtonActive {\n background-color: #ccc;\n}\n.GPtabContent {\n display: none;\n padding: 6px 12px;\n border: 1px solid #ccc;\n border-top: none;\n}\n.GPtabContentSelected {\n display: block;\n}\n.GPlabelActive:hover {\n background-color: #ccc;\n}\n.GPcatalogButtonSection {\n border: unset;\n background: unset;\n}\nbutton[aria-expanded=\"true\"].GPcatalogButtonSection span.GPshowCatalogAdvancedTools {\n -webkit-transform: rotateX(180deg);\n transform: rotateX(180deg);\n}\n\n.GPshowCatalogAdvancedTools {\n display: inline-block;\n width: 28px;\n height: 28px;\n vertical-align: middle;\n background-image: url(\"img/GPcatalogTools.png\");\n background-position: -26px 0;\n}\n\n#header-search > label {\n display: none;\n}","div[id^=GPterritories-] {\n display: none\n}","div[id^=\"GPcontrolList-\"] .GPshowOpen > span {\n font-size: 24px;\n color: white;\n display: block;\n height: 24px;\n line-height: 24px;\n pointer-events: none;\n}\n\nbutton[id^=\"GPshowControlListPicto-\"][aria-pressed=\"true\"] + dialog {\n width: 200px;\n}\n\n.GPcontrolListPanelClose {\n background-image: url(\"img/close.png\");\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div {\n display: flex;\n flex-direction: row;\n column-gap: 1rem;\n align-items: center;\n padding: 0.5rem 0.5rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div:hover {\n background-color: #EEE;\n cursor: pointer;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button {\n flex-shrink: 0;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button:hover {\n background-color: rgba(0,60,136,0.5);\n}"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"Classic.css","mappings":"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","sources":["webpack://geopf-extensions-openlayers/./src/packages/CSS/GPFwaiting.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/GPFgeneralWidget.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Drawing/GPFdrawingStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Attribution/GPFattributionStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/ElevationPath/GPFelevationPathStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Export/GPFexportStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/GetFeatureInfo/GPFgetFeatureInfoStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Isochron/GPFisochronStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/LayerImport/GPFlayerImportStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/LayerSwitcher/GPFlayerSwitcherStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/LocationSelector/GPFlocationStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Measures/GPFmeasureAreaStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Measures/GPFmeasureLengthStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Measures/GPFmeasureAzimuthStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Measures/GPFmeasureToolTip.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/MousePosition/GPFmousePositionStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/ReverseGeocoding/GPFreverseGeocodingStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Route/GPFrouteStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/SearchEngine/GPFsearchEngineStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/ToolBoxMeasure/GPFtoolBoxMeasureStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Zoom/GPFzoomStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/FullScreen/GPFfullScreenStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/OverviewMap/GPFoverviewMapStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Legends/GPFlegendsStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Catalog/GPFcatalogStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Territories/GPFterritoriesStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/ControlList/GPFcontrolListStyle.css"],"sourcesContent":["/**\n* Map loading\n* @sample\n* function setMap(map) {\n* var center = this._createLoadingElement();\n* map.getViewport().appendChild(center);\n* center.className = \"\"; // invisible !\n* center.className = \"GPmapLoadingVisible\"; // visible !\n* }\n*\n* function _createLoadingElement() {\n* var div = document.createElement(\"div\");\n* div.id = \"GPmapLoading\";\n* div.className = \"\";\n* return div;\n* }\n*/\n\n#GPmapLoading {\n display: none;\n position: absolute;\n z-index: 50;\n top: 50%;\n left: 50%;\n width: 50px;\n height: 50px;\n margin-top: -25px;\n margin-left: -25px;\n}\n\n#GPmapLoading.GPmapLoadingVisible {\n display: block;\n}\n\n#GPmapLoading {\n background-image: url(\"img/waiting.gif\");\n}\n","/*********************/\r\n/* Widgets : general */\r\n/*********************/\r\n\r\n.GPwidget {\r\n position: absolute;\r\n pointer-events: auto;\r\n font-family: \"Helvetica Neue\",Arial,Helvetica,sans-serif;\r\n font-size: 13px;\r\n color: #333;\r\n}\r\n\r\n.GPwidget input[type='text'],\r\n.GPwidget input[type='button'] {\r\n -webkit-appearance: none;\r\n appearance: none;\r\n color: #333333;\r\n}\r\n\r\n.GPwidget input[type=\"checkbox\"] {\r\n display: none;\r\n}\r\n\r\n.GPwidget select {\r\n padding-left: 3px;\r\n border-radius: 3px;\r\n}\r\n\r\n.GPwidget form {\r\n margin-bottom: 0;\r\n}\r\n\r\n.GPwidget * {\r\n box-sizing: border-box;\r\n background-repeat: no-repeat;\r\n}\r\n\r\n/************/\r\n/* position */\r\n/************/\r\n:root {\r\n --size-per-row: 32px;\r\n}\r\n#position-container-top-left,\r\n#position-container-top-right,\r\n#position-container-bottom-left,\r\n#position-container-bottom-right {\r\n border-style: solid;\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n /* crée un décalage sur le searchEngine */\r\n /* align-items: center; */\r\n width: var(--size-per-row);\r\n min-height: var(--size-per-row);\r\n /* padding: 5px; */\r\n}\r\n\r\n#position-container-top-left,\r\n#position-container-top-right {\r\n top: 0;\r\n}\r\n\r\n#position-container-top-left {\r\n float: left;\r\n left: 0;\r\n}\r\n#position-container-top-right {\r\n float: right;\r\n right: 0;\r\n}\r\n\r\n#position-container-bottom-left,\r\n#position-container-bottom-right {\r\n bottom: 0px;\r\n}\r\n\r\n#position-container-bottom-right {\r\n float: right;\r\n right: 0px;\r\n}\r\n#position-container-bottom-left {\r\n float: left;\r\n left: 0px;\r\n}\r\n\r\n/******************/\r\n/* General panels */\r\n/******************/\r\n\r\n.GPpanel {\r\n box-shadow: 0 0 6px #000;\r\n border-radius: 4px;\r\n padding: unset;\r\n border: unset;\r\n background-color: #FFF;\r\n}\r\n\r\n.GPpanel {\r\n}\r\n\r\n.GPpanelHeader {\r\n position: relative;\r\n width: 100%;\r\n height: 32px;\r\n padding: 3px;\r\n background-color: #9DB1BD;\r\n border-top-left-radius: 4px;\r\n border-top-right-radius: 4px;\r\n}\r\n\r\n.GPpanelTitle {\r\n width: 100%;\r\n height: 100%;\r\n text-align: center;\r\n font-weight: bold;\r\n line-height: 26px;\r\n border-top-left-radius: 2px;\r\n border-top-right-radius: 2px;\r\n background-color: #366291;\r\n color: #FFF;\r\n}\r\n\r\n.GPpanelFooter {}\r\n\r\n.GPpanelIcon,\r\n.GPresetPicto,\r\n.GPreturnPicto,\r\n.GPpanelClose,\r\n.GPpanelReduce,\r\n.GPpanelInfo {\r\n position: absolute;\r\n width: 26px;\r\n height: 26px;\r\n cursor: pointer;\r\n border: none;\r\n background-color: #366291;\r\n}\r\n\r\n.GPpanelClose {\r\n top: 3px;\r\n right: 3px;\r\n background-position: -27px 0;\r\n}\r\n\r\n.GPreturnPicto {\r\n top: 3px;\r\n left: 3px;\r\n}\r\n\r\n.GPpanelInfo {\r\n top: 3px;\r\n left: 3px;\r\n}\r\n\r\n.GPpanelReduce {\r\n top: 3px;\r\n right: 32px;\r\n}\r\n\r\n.GPresetPicto,\r\n.GPreturnPicto {\r\n border-radius: 3px;\r\n opacity: 1;\r\n}\r\n\r\n/**********************************/\r\n/* Showing/hiding advanced panels */\r\n/**********************************/\r\n\r\n.GPshowAdvancedToolPicto {\r\n position: relative;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n width: 32px;\r\n height: 32px;\r\n padding: 2px;\r\n background-color: rgba(255, 255, 255, 0.4);\r\n border-radius: 4px;\r\n border: 2px solid rgba(255, 255, 255, 0.4) ;\r\n}\r\n\r\n.GPshowAdvancedToolPicto:hover {\r\n background-color: rgba(255, 255, 255, 0.6);\r\n}\r\n\r\n.GPshowAdvancedToolOpen {\r\n position: absolute;\r\n display: block;\r\n box-sizing: border-box;\r\n width: 26px;\r\n height: 26px;\r\n background-color: rgba(0,60,136,0.5);\r\n border-radius: 2px;\r\n}\r\n\r\n.GPshowAdvancedToolPicto:hover .GPshowAdvancedToolOpen {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n\r\n.GPshowOpen {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n\r\n.GPshowOpen:hover {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n\r\n/****************/\r\n/* Calc waiting */\r\n/****************/\r\n\r\n.GPwaitingContainer {\r\n position: absolute;\r\n top: 32px;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n background-color: rgba(255,255,255,0.9);\r\n font-size: 1.5em;\r\n font-weight: bold;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n}\r\n\r\n.GPwaitingContainerVisible {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n}\r\n\r\n.GPwaitingContainerHidden {\r\n display: none;\r\n}\r\n\r\n.GPwaitingContainerInfo {\r\n margin: auto;\r\n}\r\n\r\n.GPwaitingContainerVisible,\r\n.GPwaitingContainerHidden {}\r\n\r\n/***************/\r\n/* Flex inputs */\r\n/***************/\r\n\r\n.GPflexInput {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n transition: max-height 0.3s ease-out, opacity 0.3s ease-out;\r\n}\r\n\r\n/* FIXME tempory hack with :not(.GPlocationOriginHidden) !\r\n.GPflexInput > *:not(.GPlocationOriginHidden) */\r\n.GPflexInput > * {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n border: 1px solid #999;\r\n border-radius: 0;\r\n}\r\n\r\n.GPflexInput *:not(:last-child) {\r\n border-right:none;\r\n}\r\n\r\n.GPflexInput *:first-child {\r\n border-radius: 3px 0 0 3px;\r\n}\r\n\r\n.GPflexInput *:last-child {\r\n border-radius: 0 3px 3px 0;\r\n}\r\n\r\n.GPflexInput > *:not(input) {\r\n /* width: 28px; */\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n.GPflexInput > input {\r\n -webkit-flex: 1;\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding: 0 5px;\r\n min-width: 0;\r\n}\r\n\r\n.GPflexInput > select {\r\n -webkit-flex: 1;\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding-right: 7px;\r\n}\r\n\r\n.GPflexInput > label {\r\n background-color: #F2F2F2;\r\n color: #666;\r\n padding-left: 7px;\r\n padding-right: 9px;\r\n cursor: pointer;\r\n}\r\n\r\n/****************/\r\n/* Submit input */\r\n/****************/\r\n\r\ninput.GPsubmit {\r\n display: block;\r\n width: 80px;\r\n margin: auto;\r\n height: 28px;\r\n line-height: 26px;\r\n padding: 0;\r\n background: none;\r\n border: none;\r\n border-radius: 3px;\r\n font-family: \"Helvetica Neue\",Arial,Helvetica,sans-serif;\r\n color: #FFF;\r\n background-color: #366291;\r\n font-weight: bold;\r\n opacity: 0.8;\r\n transition: opacity 0.2s ease-out;\r\n cursor: pointer;\r\n}\r\n\r\ninput.GPsubmit:hover {\r\n opacity: 1;\r\n}\r\n\r\n/************/\r\n/* elements */\r\n/************/\r\n\r\n.GPselect {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n margin: auto;\r\n border: 1px solid #999;\r\n color: #333;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlabel {\r\n\r\n}\r\n\r\n.GPinput {\r\n\r\n}\r\n\r\n.GPform {\r\n padding: 15px;\r\n}\r\n\r\n.GPelementInvisible,\r\n.GPelementHidden {\r\n display: none;\r\n visibility: hidden;\r\n opacity: 0%;\r\n}\r\n\r\n.GPelementVisible,\r\n.GPelementShow {\r\n display: block;\r\n visibility: visible;\r\n opacity: 100%;\r\n}\r\n\r\n/********************************/\r\n/* Autocomplete/geocode results */\r\n/********************************/\r\n\r\n.GPautoCompleteList,\r\n.GPadvancedAutoCompleteList {\r\n z-index: 2;\r\n /* display: none; */\r\n /* position: absolute;\r\n max-height: 140px;\r\n background-color: #FFF;\r\n border: 1px solid #999;\r\n overflow-y: hidden; */\r\n}\r\n\r\n.GPadvancedAutoCompleteList {\r\n width: calc(100% - 28px);\r\n border-top: none;\r\n font-size: 0.9em;\r\n}\r\n\r\n.GPautoCompleteProposal {\r\n width: 100%;\r\n height: 28px;\r\n line-height: 16px;\r\n padding: 6px 10px;\r\n color: #5E5E5E;\r\n font-size: 1.0em;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow:ellipsis;\r\n cursor: pointer;\r\n margin-bottom: 0;\r\n}\r\n\r\n.GPautoCompleteProposal:hover {\r\n color: #000000;\r\n background-color: #CEDBEF\r\n}\r\n\r\n/*************************************/\r\n/* Showing additional hidden options */\r\n/*************************************/\r\n\r\n.GPshowMoreOptionsImage {\r\n background-image: url(\"img/GPshowMoreOptions.png\");\r\n}\r\n\r\n.GPshowMoreOptions {\r\n display: block;\r\n position: absolute;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n transition: all 0.5s ease-out 0s;\r\n}\r\n\r\nbutton[aria-pressed=\"true\"].GPshowMoreOptions,\r\ninput[type=\"checkbox\"]:checked + .GPshowMoreOptions {\r\n -webkit-transform: rotateX(180deg);\r\n transform: rotateX(180deg);\r\n /* bottom: 90px; */\r\n}\r\n\r\n/**********************/\r\n/* Feature info popup */\r\n/**********************/\r\n\r\n.gp-feature-info-div {\r\n bottom: 17px ;\r\n position: relative;\r\n max-width: calc(100vw - 80px);\r\n padding: 10px;\r\n border-radius: 10px;\r\n font-size: 0.75em;\r\n font-family: \"Open Sans\", sans-serif;\r\n color: #002A50;\r\n background-color: #FFF;\r\n box-shadow: 0 0 5px #000;\r\n}\r\n\r\n.gp-feature-info-div::before {\r\n content: \"\";\r\n position: absolute;\r\n border-top: 15px solid #FFF;\r\n border-right: 14px solid transparent;\r\n border-left: 14px solid transparent;\r\n bottom: -15px;\r\n margin-left: -14px;\r\n left: 50%;\r\n}\r\n\r\n.gp-feature-info-div .closer {\r\n position: absolute;\r\n display: block;\r\n width: 30px;\r\n height: 30px;\r\n top: 0;\r\n right: 0;\r\n border: none;\r\n cursor: pointer;\r\n border-top-right-radius: 10px;\r\n border-bottom-right-radius: 10px;\r\n background-color: #FFF;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/close-emeraud.svg\");\r\n background-size: 14px 14px;\r\n background-position: center;\r\n}\r\n\r\n.gp-features-content-div {\r\n max-width: 420px;\r\n min-width: 260px;\r\n max-height: 340px;\r\n overflow: auto;\r\n}\r\n\r\n.gp-features-content-div h5,\r\n.gp-features-content-div h6,\r\n.gp-features-content-div p,\r\n.gp-features-content-div ul {\r\n margin: 0;\r\n}\r\n\r\n.gp-features-content-div ul {\r\n padding: 0;\r\n list-style-type: none;\r\n}\r\n\r\n.geoportail-popup-content h5,\r\n.geoportail-popup-content h6,\r\n.geoportail-popup-content p,\r\n.gp-att-name-div,\r\n.gp-att-description-div,\r\n.gp-att-others-div {\r\n padding: 0 10px;\r\n}\r\n\r\n.geoportail-popup-content h5:not(:last-child),\r\n.geoportail-popup-content h6:not(:last-child),\r\n.geoportail-popup-content p:not(:last-child),\r\n.gp-att-description-div:not(:last-child),\r\n.gp-att-others-div:not(:last-child) {\r\n margin-bottom: 15px;\r\n}\r\n\r\n.geoportail-popup-content h5:last-child,\r\n.geoportail-popup-content h6:last-child,\r\n.geoportail-popup-content p:last-child,\r\n.gp-att-description-div:last-child,\r\n.gp-att-others-div:last-child,\r\n.gp-att-name-div {\r\n margin-bottom: 10px;\r\n}\r\n\r\n.geoportail-popup-content h5:first-child,\r\n.geoportail-popup-content h6:first-child,\r\n.geoportail-popup-content p:first-child,\r\n.gp-att-name-div:first-child,\r\n.gp-att-description-div:first-child,\r\n.gp-att-others-div:first-child {\r\n margin-top: 10px;\r\n}\r\n\r\n.gp-att-name-div,\r\n.gp-features-content-div h5 {\r\n padding-right: 35px;\r\n font-weight: bold;\r\n font-size: 1.2em;\r\n text-transform: uppercase;\r\n color: #0B6BA7;\r\n}\r\n\r\n.gp-features-content-div h6 {\r\n font-size: 1.1em;\r\n}\r\n\r\n.gp-att-description-div:not(:last-child),\r\n.gp-att-others-div:not(:last-child) {\r\n padding-bottom: 10px;\r\n border-bottom: 1px dotted #666;\r\n}\r\n\r\n.gpf-radio-btn-group {\r\n display: flex;\r\n gap: 1em;\r\n}\r\n\r\n.gpf-btn-icon {\r\n caret-color: transparent;\r\n}\r\n","[id^=GPdrawingPanel-] {\r\n width: 240px;\r\n}\r\n\r\n.GPshowDrawingPicto {\r\n background-image: url(\"img/GPdrawingOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n.GPdrawingPanelClose {\r\n background-image: url(\"img/GPdrawingOpen.png\");\r\n}\r\n\r\n.GPdrawingLabel,\r\n.GPdrawingCoords {\r\n display: inline-block;\r\n line-height: 20px;\r\n}\r\n\r\n.GPdrawingLabel {\r\n width: 80px;\r\n font-weight: bold;\r\n}\r\n\r\n.GPdrawingCoords {\r\n width: 110px;\r\n}\r\n\r\n/* markers selector */\r\n.marker-input-radio {\r\n display : none ;\r\n}\r\n\r\ninput.marker-input-radio:checked + label {\r\n border: 1px solid red;\r\n}\r\n\r\n/* drawing tools */\r\n.drawing-tool {\r\n border-radius: 10px;\r\n cursor: pointer;\r\n display: block;\r\n height: 40px;\r\n width: 40px;\r\n background-image: url(\"img/drawing-tools.svg\");\r\n background-size: 720px 40px;\r\n background-color: #e9edf0;\r\n border: unset;\r\n}\r\n\r\n.drawing-tool-active {\r\n background-color: #002a50;\r\n}\r\n\r\n\r\n/*\r\n* Drawing tools\r\n*/\r\nbutton[id^=drawing-tool-point-] {\r\n background-position: 0 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-point-].drawing-tool-active {\r\n background-position: -40px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-line-].drawing-tool-active {\r\n background-position: -120px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-line-] {\r\n background-position: -80px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-holes-] {\r\n background-position: -640px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-holes-].drawing-tool-active {\r\n background-position: -680px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-polygon-] {\r\n background-position: -160px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-polygon-].drawing-tool-active {\r\n background-position: -200px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-text-] {\r\n background-position: -240px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-text-].drawing-tool-active {\r\n background-position: -280px 0;\r\n}\r\n\r\n/*\r\n* Editing tools\r\n*/\r\nbutton[id^=drawing-tool-edit-] {\r\n background-position: -320px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-edit-].drawing-tool-active {\r\n background-position: -360px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-display] {\r\n background-position: -400px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-display-].drawing-tool-active {\r\n background-position: -440px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-tooltip] {\r\n background-position: -480px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-tooltip-].drawing-tool-active {\r\n background-position: -520px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-remove] {\r\n background-position: -560px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-remove-].drawing-tool-active {\r\n background-position: -600px 0;\r\n}\r\n\r\n/* section d'export */\r\n\r\ndiv.drawing-tools-flex-display {\r\n justify-content: space-between;\r\n}\r\n\r\nbutton[id^=drawing-export-] {\r\n background-position: 2px 0;\r\n}\r\n\r\n.drawing-button {\r\n margin: auto;\r\n font-size: 0.7em;\r\n height: 30px;\r\n line-height: 30px;\r\n padding-left: 30px;\r\n padding-right: 15px;\r\n /* from site colors-chart */\r\n background-image: url(\"img/drawing-save.svg\");\r\n background-size: 30px 120px;\r\n}\r\n\r\n.tool-form-submit {\r\n border: medium none;\r\n border-radius: 20px;\r\n font-family: \"Helvetica Neue\",Arial,Helvetica,sans-serif;\r\n font-size: 0.9em;\r\n text-align: center;\r\n text-transform: uppercase;\r\n /* from site colors-chart */\r\n background-color: #00b798;\r\n color: #fff;\r\n}\r\n\r\n/*\r\n * popups\r\n */\r\n.gp-label-div,\r\n.gp-styling-div {\r\n position: relative;\r\n top: 17px;\r\n border-radius: 10px;\r\n font-size: 0.75em;\r\n background-color: #FFF;\r\n box-shadow: 0 0 5px #000;\r\n box-sizing: border-box;\r\n border: unset;\r\n}\r\n\r\n.gp-label-div::before,\r\n.gp-styling-div::before {\r\n content: \"\";\r\n position: absolute;\r\n border-bottom: 15px solid #FFF;\r\n border-right: 9px solid transparent;\r\n border-left: 10px solid transparent;\r\n top: -15px;\r\n margin-left: -10px;\r\n left: 50%;\r\n}\r\n\r\n.gp-textarea-att-label-style,\r\n.gp-input-label-style {\r\n border: none;\r\n}\r\n\r\n.gp-textarea-att-label-style {\r\n width: 240px;\r\n height: 80px;\r\n resize: none;\r\n}\r\n\r\n.gp-input-measure-style {\r\n width: 240px;\r\n font-size: 0.75em;\r\n background-color: #FFF;\r\n text-align: center;\r\n border-radius: 10px;\r\n}\r\n\r\n.gp-textarea-att-label-style {\r\n display: block;\r\n}\r\n\r\n.gp-label-div .closer {\r\n border-top-right-radius: 10px;\r\n background-color: #FFF;\r\n}\r\n\r\n.gp-input-label-style {\r\n width: 180px;\r\n}\r\n\r\n/* Label popups */\r\n\r\n.gp-label-div {\r\n padding: 10px;\r\n}\r\n\r\n/* Styling popup */\r\n\r\n.gp-styling-div {\r\n width: 340px;\r\n padding: 20px;\r\n padding-top: 50px;\r\n}\r\n\r\n.gp-styling-div::after {\r\n content: \"Modifier le style\";\r\n position: absolute;\r\n display: block;\r\n width: 280px;\r\n height: 30px;\r\n line-height: 30px;\r\n text-align: center;\r\n left: 30px;\r\n top: 0;\r\n border-bottom: 1px solid #BBB;\r\n font-variant: small-caps;\r\n font-size: 1.2em;\r\n font-weight: bold;\r\n}\r\n\r\n.gp-label-div .gp-styling-button:not([class*=\"closer\"]) {\r\n display: block;\r\n margin: auto;\r\n margin-top: 10px;\r\n}\r\n\r\n.gp-styling-button:not([class*=\"closer\"]) {\r\n display: inline-block;\r\n width: 140px;\r\n height: 24px;\r\n line-height: 24px;\r\n margin-top: 20px;\r\n border-radius: 12px;\r\n text-align: center;\r\n color: #FFF;\r\n background-color: #00B798;\r\n font-weight: bold;\r\n font-size: 0.9em;\r\n text-transform: uppercase;\r\n border: none;\r\n}\r\n\r\n.gp-styling-button:not([class*=\"closer\"]):hover {\r\n color: #00B798;\r\n background-color: #EEF2F5;\r\n}\r\n\r\n.gp-styling-button:not([class*=\"closer\"]) + .gp-styling-button:not([class*=\"closer\"]) {\r\n margin-left: 20px;\r\n}\r\n\r\n.gp-label-div .closer,\r\n.gp-styling-div .closer {\r\n cursor: pointer;\r\n position: absolute;\r\n display: block;\r\n width: 30px;\r\n height: 30px;\r\n top: 0;\r\n right: 0;\r\n border: none;\r\n background-color: transparent;\r\n background-repeat: no-repeat;\r\n background-image: url(\"../../img/close-emeraud.svg\");\r\n background-size: 14px 14px;\r\n background-position: center;\r\n}\r\n\r\n.gp-styling-option {\r\n font-size: 11px;\r\n position: relative;\r\n line-height: 30px;\r\n padding: 0 20px;\r\n}\r\n\r\n.gp-styling-option input {\r\n display: block;\r\n position: absolute;\r\n height: 20px;\r\n top: 6px;\r\n cursor: pointer;\r\n padding: 0;\r\n}\r\n\r\n.gp-styling-option input[type=\"checkbox\"] {\r\n height: 10px;\r\n right: 70px;\r\n padding: 0;\r\n border: none;\r\n background: none;\r\n}\r\n\r\n.gp-styling-option input[type=\"color\"] {\r\n width: 30px;\r\n right: 70px;\r\n padding: 0;\r\n border: none;\r\n background: none;\r\n}\r\n\r\n.gp-styling-option input[type=\"text\"] {\r\n width: 80px;\r\n right: 40px;\r\n padding: 0 5px;\r\n margin: none;\r\n background: none;\r\n border: 1px solid #808080;\r\n color: #0B6BA7;\r\n}\r\n\r\n\r\n/* Styling slider : general */\r\n.gp-styling-option input[type=\"range\"] {\r\n margin: 0;\r\n width: 80px;\r\n right: 40px;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]:focus {\r\n box-shadow: none;\r\n outline: none;\r\n}\r\n\r\n/* Styling slider : Chrome, Safari, Opera */\r\n\r\n.gp-styling-option input[type=\"range\"]::-webkit-slider-runnable-track {\r\n -webkit-appearance: none;\r\n height: 1px;\r\n background-color: #808080;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-webkit-slider-thumb:before {\r\n position: absolute;\r\n top: 0;\r\n right: 50%;\r\n left: -200px;\r\n height: 1px;\r\n pointer-events: none;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-webkit-slider-thumb {\r\n width: 13px;\r\n height: 13px;\r\n -webkit-appearance: none;\r\n background-color: #0B6BA7;\r\n border: none;\r\n border-radius: 50%;\r\n position: relative;\r\n top: -6px;\r\n}\r\n\r\n/* Styling slider : Firefox */\r\n\r\n.gp-styling-option input[type=\"range\"]::-moz-range-track {\r\n width: 70px;\r\n height: 1px;\r\n background-color: #808080;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-moz-range-thumb {\r\n width: 13px;\r\n height: 13px;\r\n background-color: #0B6BA7;\r\n border: none;\r\n border-radius: 50%;\r\n box-shadow: 0;\r\n position: relative;\r\n}\r\n\r\n/* Styling slider : IE */\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-track {\r\n border: 0;\r\n border-color: transparent;\r\n border-radius: 0;\r\n border-width: 0;\r\n color: transparent;\r\n height: 1px;\r\n width: 70px;\r\n background-color: #808080;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-fill-lower,\r\n.gp-styling-option input[type=\"range\"]::-ms-fill-upper {\r\n background: transparent;\r\n border-radius: 0;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-thumb {\r\n width: 13px;\r\n height: 13px;\r\n background-color: #0B6BA7;\r\n border: none;\r\n border-radius: 50%;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-tooltip {\r\n display: none;\r\n}\r\n\r\n\r\n.gp-styling-option .marker-input-radio {\r\n display: none;\r\n}\r\n\r\n.gp-styling-option .marker-label {\r\n display: inline-block;\r\n height: 32px;\r\n padding: 3px;\r\n margin-right: 5px;\r\n margin-bottom: 5px;\r\n cursor: pointer;\r\n}\r\n\r\n.gp-styling-option .marker-input-radio:checked + .marker-label {\r\n padding: 2px;\r\n background-color: rgba(0,183,152,0.5);\r\n border: 1px solid #002A50;\r\n}\r\n\r\n.gp-styling-option .marker-label img {\r\n height: 24px;\r\n}\r\n","/* Geoportal Attribution */\n\n.ol-attribution .gp-control-attribution-image {\n max-height: 30px;\n max-width: inherit;\n vertical-align: middle;\n}\n",".GPpanelHeader {\n padding: unset;\n}\n\n\n[id^=GPelevationPathPanelClose] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: -27px center;\n}\n\n[id^=GPelevationPathProfil] {\n height: 150px;\n width: inherit;\n}\n\n[id^=GPelevationPathProfil] > #profileElevationByDefault > svg {\n position: absolute;\n left: 10px;\n}\n\ndiv[id^=GPelevationPathInformationsContainer] {\n position: absolute;\n top: 32px;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(255, 255, 255, 0.9);\n border-radius: 4px;\n overflow: hidden;\n}\n\n/* CSS : Raw */\n\n#profileElevationRaw {\n resize: none;\n padding: unset;\n}\n\n/* CSS : default */\n\n#profileElevationByDefault {\n display:-webkit-flex;\n display:-webkit-box;\n display:-ms-flexbox;\n display:flex;\n -webkit-box-orient:vertical;\n -webkit-box-direction:normal;\n -webkit-flex-direction:column;\n -ms-flex-direction:column;\n flex-direction:column;\n height:100%;\n}\n\n.altiPathValue {\n font-weight: 700;\n fill: #5E5E5E;\n}\n\n.altiPathCoords {\n font-style: italic;\n fill: #5E5E5E;\n}\n\n\n/* CSS : D3 */\n\n.axis-d3 > text {\n fill: rgb(94, 94, 94);\n font-family: Verdana;\n font-size: 10px;\n opacity: 1;\n text-anchor: end;\n}\n\n.axis-d3 {\n fill: none;\n stroke: #5E5E5E;\n stroke-width: 1;\n shape-rendering: crispEdges;\n}\n\n.area-d3 {\n fill: #C77A04;\n stroke: #5E5E5E;\n stroke-width: 0;\n fill-opacity: 0.4;\n}\n\n.line-d3 {\n fill: none;\n stroke: #C77A04;\n stroke-width: 1px;\n}\n\n.grid-d3 .tick {\n stroke: lightgrey;\n opacity: 0.7;\n}\n\n.grid-d3 path {\n stroke-width: 0;\n}\n\n.grid-d3 .tick {\n stroke: lightgrey;\n opacity: 0.7;\n}\n\n.grid-d3 path {\n stroke-width: 0;\n}\n\n.overlay-d3 {\n fill: none;\n pointer-events: all;\n}\n\n.focusLine-d3 {\n fill: none;\n stroke: #C77A04;\n stroke-width: 0.5px;\n}\n\n.focusCircle-d3 {\n fill: #C77A04;\n}\n\ndiv.tooltip-d3 {\n position: inherit;;\n text-align: left;\n width: 80px;\n height: 45px;\n padding: 5px;\n font: 8px sans-serif;\n background: white;\n border: 0px;\n border-radius: 8px;\n pointer-events: none;\n}\n\n[id^=GPelevationPathPanel-] {\n width: 280px;\n}\n\n[id^=GPelevationPathPanelInfo] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: -75px center;\n}\n\nbutton[id^=\"GPshowElevationPathPicto-\"] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: 1px center;\n}\n/*\n@media (min-width:720px) and (min-height:720px) {\n\n[id^=GPelevationPathPanel] {\ntop: 15px;\nleft: 15px;\n}\n\n}\n\n@media (min-width:720px) and (min-height:520px) {\n\n[id^=GPelevationPathPanel] {\nwidth: 460px;\n}\n\n[id^=GPelevationPathProfil] {\nheight: 220px;\n}\n\n}\n\n@media (max-width:560px), (max-height:340px) {\n\n[id^=GPelevationPathPanel] {\ndisplay: none !important;\n}\n\n}\n*/\n","/* main container */\ndiv[id^=GPexportContainer-] {\n padding: 5px;\n}\n\ndiv[id^=GPexportContainer-] > input.GPsubmit {\n color: white;\n}\n\n/* bouton */\ninput[id^=GPexportButton-] {\n min-width: fit-content;\n padding-left: 25px;\n padding-right: 5px;\n background-image: url(\"img/GPexportSave.svg\");\n background-size: 25px 25px;\n background-repeat: no-repeat;\n}\n\n/* menu */\n.GPexportMenuHidden {\n visibility: hidden;\n}\n\n.GPexportMenuContainer {\n position: relative;\n display: inline-block;\n}\n\n.GPexportMenuContent {\n display: none;\n position: absolute;\n background-color: #f1f1f1;\n min-width: 80px;\n padding: 8px;\n border-radius: 10px;\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n z-index: 1;\n}\n\n.GPexportMenuContent a:hover { background-color: #f1f1f1; }\n\n.GPexportMenuContainer:hover .GPexportMenuContent { display: block; }\n\n/* menu des formats */\n.GPexportMenuContent .container {\n display: block;\n position: relative;\n padding-left: 15px;\n margin-bottom: 5px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n \n.GPexportMenuContent .container input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n}\n \n.GPexportMenuContent .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 12px;\n width: 12px;\n background-color: #eee;\n border-radius: 50%;\n}\n \n.GPexportMenuContent .container:hover input ~ .checkmark {\n background-color: #ccc;\n}\n\n.GPexportMenuContent .container input:checked ~ .checkmark {\n background-color: #366291;\n}\n \n.GPexportMenuContent .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n}\n\n.GPexportMenuContent .container input:checked ~ .checkmark:after {\n display: block;\n}\n \n.GPexportMenuContent .container .checkmark:after {\n top: 4px;\n left: 4px;\n width: 4px;\n height: 4px;\n border-radius: 50%;\n background: white;\n}","/* GET FEATURE INFO */\nbutton[id^=GPgetFeatureInfoPicto][aria-pressed=\"true\"] {\n background-repeat: no-repeat;\n background-position: 1px center;\n}\n\nbutton[id^=GPgetFeatureInfoPicto] {\n background-image: url(\"img/GPactivateGfi.png\");\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n background-position: -25px center;\n /* transition: border-radius 0.5s ease-out 0s, opacity 0.5s ease-out 0s; */\n}\n\n.GPcloseGetFeatureInfo {\n background-image: url(\"../../img/GPclose.png\");\n background-position: 0px center;\n}\n\n.GPgfiLayerButton {\n border: unset;\n background: unset;\n text-align: left;\n font-weight: bold;\n}\n\nbutton[aria-expanded=\"true\"].GPgfiLayerButton span.GPshowGfiLayerFeature {\n -webkit-transform: rotateX(180deg);\n transform: rotateX(180deg);\n}\n\n.GPshowGfiLayerFeature {\n display: inline-block;\n width: 28px;\n height: 28px;\n vertical-align: middle;\n background-image: url(\"img/GPgfiDetails.png\");\n background-position: -26px 0;\n}","/* ISOCHRON */\r\n[id^=GPisochronPanel-] {\r\n width: 280px;\r\n}\r\n\r\n.GPshowIsochronPicto {\r\n background-image: url(\"img/GPisochronOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GPisochronPanelClose {\r\n background-image: url(\"img/GPisochronOpen.png\");\r\n}\r\n\r\n/* Reset picto */\r\n\r\nbutton[id^=GPisochronReset] {\r\n opacity: 0.8;\r\n transition: opacity 0.2s ease-out;\r\n}\r\n\r\nbutton[id^=GPisochronReset]:hover {\r\n opacity: 1;\r\n}\r\n\r\n.GPisochronReset {\r\n background-color: #366291;\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -281px center;\r\n}\r\n\r\n/* Isochron form */\r\nform[id^=GPisochronForm] {\r\n padding: 15px;\r\n}\r\n\r\ndiv[id^=GPisochronChoice] {\r\n margin: auto;\r\n margin-top: 10px;\r\n margin-bottom: 5px;\r\n width: 160px;\r\n -webkit-justify-content: space-between;\r\n -webkit-box-pack: justify;\r\n -ms-flex-pack: justify;\r\n justify-content: space-between;\r\n}\r\n\r\np[id^=GPisochronPointLabelP], p[id^=GPisochronValueChronLabelP] {\r\n margin: 2px 0 5px 0;\r\n}\r\n\r\n.GProuteComputationLabel {\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GPisochronChoiceAlt input:checked + label + span {\r\n color: #366291;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron] + .GPisochronChoiceAltImg {\r\n background-position: -56px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron]:checked + .GPisochronChoiceAltImg {\r\n background-position: -84px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltDist] + .GPisochronChoiceAltImg {\r\n background-position: -112px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltDist]:checked + .GPisochronChoiceAltImg {\r\n background-position: -140px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron] {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n}\r\n\r\n.GPisochronOriginPointerImg,\r\n.GPisochronChoiceAltImg,\r\n.GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n font-size: 0;\r\n}\r\n\r\n.GPisoExclusionsOption {\r\n background-image: url(\"img/GPisochronCheck.png\");\r\n}\r\n\r\n.GPisochronOriginPointerImg {\r\n width: 28px;\r\n background-color: #F2F2F2;\r\n cursor: pointer;\r\n}\r\n\r\n.GPisochronChoiceAlt input {\r\n display: none;\r\n}\r\n\r\n.GPisochronChoiceAltImg {\r\n display: block;\r\n width: 28px;\r\n height: 28px;\r\n margin: auto;\r\n cursor: pointer;\r\n}\r\n\r\n.GPisochronChoiceAlt span {\r\n cursor: pointer;\r\n display:block;\r\n color: #999;\r\n}\r\n\r\n.GPisochronModeLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 5px;\r\n}\r\n\r\ninput[id^=GPisochronTransportCar] + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -168px 0;\r\n}\r\n\r\ninput[id^=GPisochronTransportCar]:checked + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -196px 0;\r\n}\r\n\r\ninput[id^=GPisochronTransportPedestrian] + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -224px 0;\r\n}\r\n\r\ninput[id^=GPisochronTransportPedestrian]:checked + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -252px 0;\r\n}\r\n\r\n.GPisochronTransportChoice input {\r\n display: none;\r\n}\r\n\r\ndiv[id^=GPisochronTransportChoice] > div {\r\n width: 100%;\r\n justify-content: center;\r\n}\r\n\r\ndiv[id^=GPisochronValueChron],\r\ndiv[id^=GPisochronValueDist] {\r\n width: 220px;\r\n margin: 5px auto;\r\n}\r\n\r\n.GPisochronTransportImg {\r\n display: inline-block;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n}\r\n\r\n.GPisochronTransportImg:first-of-type {\r\n margin-left: 18px;\r\n margin-right: 10px;\r\n}\r\n\r\nselect[id^=GPisochronDirectionSelect] {\r\n width: 80px;\r\n margin: 5px auto;\r\n}\r\n\r\n.GPshowIsoExclusionsPicto {\r\n top: unset;\r\n right: 0;\r\n transition: all 0.5s ease-out 0s;\r\n}\r\n\r\n.GPisoExclusionsLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 10px;\r\n font-weight: bold;\r\n line-height: 16px;\r\n}\r\n\r\n.GPisoExclusionsOptions {\r\n display: -webkit-flex;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-justify-content: space-around;\r\n -ms-flex-pack: distribute;\r\n justify-content: space-around;\r\n}\r\n\r\n.GPisoExclusionsOption {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n color: #A77;\r\n background-color: #FEE;\r\n padding-left: 28px;\r\n padding-right: 5px;\r\n border: 1px solid #A77;\r\n border-radius: 3px;\r\n cursor: pointer;\r\n}\r\n\r\ninput:checked + .GPisoExclusionsOption {\r\n background-color: #EFE;\r\n background-position: 0 -28px;\r\n color: #797;\r\n border: 1px solid #797;\r\n}\r\n\r\ninput[id^=GPisochronSubmit-] {\r\n width: fit-content;\r\n padding: 0 10px;\r\n}","\r\n/* Import form */\r\n[id^=\"GPimportPanel-\"] {\r\n width: 340px;\r\n}\r\n\r\n[id^=\"GPimportGetCapPanel-\"],\r\n[id^=\"GPimportMapBoxPanel-\"] {\r\n width: 340px;\r\n}\r\n\r\ndiv[id^=\"GPimportTypeLine-\"] {\r\n border-bottom: 1px solid #999;\r\n padding-bottom: 15px;\r\n margin-bottom: 15px;\r\n}\r\n\r\ndiv[id^=\"GPimportChoice-\"] {\r\n margin-top: 5px;\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GPshowImportPicto {\r\n background-image: url(\"img/GPimportOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GPimportPanelClose,\r\n.GPimportGetCapPanelClose,\r\n.GPimportMapBoxPanelClose {\r\n background-image: url(\"img/GPimportOpen.png\");\r\n}\r\n\r\n.GPimportPanelReturnPicto {\r\n background-color: #366291;\r\n background-image: url(\"../../img/GPreturn.png\");\r\n /* background-position: 3px center; */\r\n}\r\n\r\n.GPimportChoiceAlt input[type=\"radio\"] {\r\n display: none;\r\n}\r\n\r\n.GPimportChoiceAltTxt {\r\n display: block;\r\n line-height: 28px;\r\n color: #BBB;\r\n font-weight: bold;\r\n cursor: pointer;\r\n}\r\n\r\ninput[type=\"radio\"]:checked + .GPimportChoiceAltTxt {\r\n color: #366291;\r\n}\r\n\r\n/* Line inputs */\r\n\r\n.GPimportInputLine {\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n margin-bottom: 10px;\r\n}\r\n\r\n.GPimportInputLine > * {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n border: 1px solid #999;\r\n border-radius: 0;\r\n}\r\n\r\n.GPimportInputLine *:not(:last-child) {\r\n border-right:none;\r\n}\r\n\r\n.GPimportInputLine *:first-child {\r\n border-radius: 3px 0 0 3px;\r\n}\r\n\r\n.GPimportInputLine *:last-child {\r\n border-radius: 0 3px 3px 0;\r\n}\r\n\r\n.GPimportInputLine > *:not(input) {\r\n overflow: hidden;\r\n white-space: nowrap;\r\n -o-text-overflow: ellipsis;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n.GPimportInputLine > input {\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding: 0 5px;\r\n min-width: 0;\r\n}\r\n\r\n.GPimportInputLine > select {\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding-right: 7px;\r\n}\r\n\r\n.GPimportInputLine > label {\r\n background-color: #F2F2F2;\r\n color: #666;\r\n padding-left: 7px;\r\n padding-right: 9px;\r\n cursor: pointer;\r\n}\r\n\r\n\r\n\r\n.GPimportGetCapProposal {\r\n width: 100%;\r\n height: 28px;\r\n line-height: 16px;\r\n padding: 6px 10px;\r\n color: #5E5E5E;\r\n font-size: 1.0em;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n -o-text-overflow:ellipsis;\r\n text-overflow:ellipsis;\r\n cursor: pointer;\r\n list-style-type: none;\r\n}\r\n\r\n.GPimportGetCapRubriqueTitle,\r\n.GPimportMapBoxSourceTitle,\r\n.GPimportMapBoxListSourceTitle {\r\n color: #5E5E5E;\r\n}\r\n\r\n.GPimportGetCapRubrique,\r\n.GPimportGetCapListRubrique,\r\n.GPimportMapBoxSource,\r\n.GPimportMapBoxListSource {\r\n list-style-type: none;\r\n}\r\n\r\nli.GPimportGetCapRubrique:before,\r\nli.GPimportGetCapListRubrique:before,\r\nli.GPimportMapBoxSource:before,\r\nli.GPimportMapBoxListSource:before {\r\n\t/* content: \"→ \"; caractère UTF-8 */\r\n content: \"» \";\r\n}\r\n\r\n.GPimportGetCapProposal:hover,\r\n.GPimportGetCapRubrique:hover,\r\n.GPimportMapBoxSource {\r\n\r\n}\r\n\r\n.GPimportGetCapRubriqueTitle:hover,\r\n.GPimportMapBoxSourceTitle:hover {\r\n color: #000000;\r\n}\r\n\r\n.GPimportGetCapProposal:hover {\r\n color: #000000;\r\n}\r\n\r\n.GPimportMapBoxSourceVisibility,\r\n.GPimportMapBoxSourceStyle,\r\n.GPimportMapBoxSourceFilter,\r\n.GPimportMapBoxSourceScale {\r\n display: inline-block;\r\n margin-left: 15px;\r\n}\r\n\r\n.GPimportMapBoxJsonEdit {\r\n outline: 1px solid #ccc;\r\n padding: 5px;\r\n margin: 5px;\r\n}\r\n.GPimportMapBoxJsonEdithidden {\r\n display: none;\r\n}\r\n\r\n.gp-json-string { color: green; }\r\n.gp-json-number { color: darkorange; }\r\n.gp-json-boolean { color: blue; }\r\n.gp-json-null { color: magenta; }\r\n.gp-json-key { color: red; }\r\n\r\n.GPimportMapBoxSourceVisibilityInput {\r\n display: block !important;\r\n}\r\n\r\n.GPimportMapBoxSourceVisibilityLabel {\r\n\r\n}\r\n\r\n.GPimportMapBoxSourceScale {\r\n}\r\n\r\n[id^=\"GPimportPanelReturnPicto-\"] {\r\n position: absolute;\r\n width: 26px;\r\n height: 26px;\r\n border-radius: 3px;\r\n opacity: 1;\r\n background-position: 0 0;\r\n cursor: pointer;\r\n}","/* LAYER SWITCHER */\r\n\r\n.GPlayerSwitcher_layer {\r\n background-color: #FFF;\r\n}\r\n\r\ndiv[id^=GPlayerSwitcher-] {\r\n height: 32px;\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] + dialog[id^=GPlayersList] {\r\n width: 190px;\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto] {\r\n /* transition: opacity 0.5s ease-out 0s, box-shadow 0.5s ease-out 0s, border 0.5s ease-out 0s, border-radius 0.5s ease-out 0s; */\r\n background-position: -2px center;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/GPshowLayersList.png\");\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] {\r\n border-top-right-radius: 0;\r\n border-top-left-radius: 0;\r\n background-position: -35px center;\r\n /* transition: border-radius 0.5s ease-out 0s, opacity 0.5s ease-out 0s; */\r\n}\r\n\r\n/* Layers list */\r\n.GPpanelBody {\r\n overflow: auto;\r\n max-height: 200px;\r\n}\r\n\r\nbutton[id^=GPlayerInfoClose] {\r\n background-position: -2px center;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/GPlayerInfoClose.png\");\r\n background-color: unset;\r\n}\r\nbutton[id^=GPlayersPanelClose] {\r\n background-position: -2px center;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/GPlayerClose.png\");\r\n}\r\n\r\n.GPpanelIcon {\r\n background-image: url(\"img/layers.svg\");\r\n background-repeat: no-repeat;\r\n background-size: auto auto;\r\n background-position: center center;\r\n}\r\n/* Layer info panel */\r\n\r\n[id^=GPlayerInfoPanel] {\r\n right: 190px;\r\n}\r\n\r\ndiv[id^=GPlayerInfoTitle] {\r\n color: #366291;\r\n border-bottom: 1px solid #366291;\r\n}\r\n\r\n\r\n.GPlayerBasicTools,\r\n.GPlayerAdvancedTools {\r\n position: relative;\r\n width: 100%;\r\n height: 28px;\r\n}\r\n\r\n.GPlayerExtent,\r\n.GPlayerVisibility,\r\n.GPlayerInfo,\r\n.GPlayerInfoOpened,\r\n.GPlayerRemove {\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlayerExtent,\r\n.GPlayerVisibility,\r\n.GPlayerName,\r\n.GPlayerInfo,\r\n.GPlayerInfoOpened,\r\n.GPlayerRemove,\r\n.GPlayerOpacity,\r\n.GPlayerOpacityValue {\r\n position: absolute;\r\n top: 0;\r\n}\r\n\r\n.GPghostLayer {\r\n opacity: 0;\r\n}\r\n\r\n/* Layer basic tools */\r\n\r\n.GPlayerBasicTools {\r\n background-color: #FFF;\r\n}\r\n\r\n\r\n/* Layer advanced tools */\r\n\r\n.GPlayerExtent,\r\n.GPlayerVisibility,\r\n.GPshowLayerAdvancedTools,\r\n.GPlayerInfo,\r\n.GPlayerInfoOpened,\r\n.GPlayerRemove {\r\n background-image: url(\"img/GPlayerTools.png\");\r\n}\r\n\r\n/* Opacity slider : Chrome, Safari, Opera */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-runnable-track {\r\n background: url(\"img/GPopacitySlider.png\");\r\n}\r\n\r\n/* Opacity slider : Firefox */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-moz-range-track {\r\n background: url(\"img/GPopacitySlider.png\");\r\n}\r\n\r\n/* Opacity slider : IE */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-track {\r\n background: url(\"img/GPopacitySlider.png\");\r\n}\r\n\r\n\r\ndiv[id^=GPlayerInfoQuicklook] {\r\n background-image: url(\"img/GPlayerInfo.png\");\r\n}\r\n\r\ndiv[id^=GPlayerInfoClose] {\r\n background-image: url(\"img/GPlayerInfoClose.png\");\r\n}\r\n\r\n.GPlayerInfoLink,\r\n.GPlayerInfoPopup {\r\n background-image: url(\"img/GPlayerInfo.png\");\r\n}\r\n\r\nbutton[id^=GPinfo_ID_],\r\nbutton[id^=GPremove_ID_],\r\nbutton[id^=GPvisibilityPicto_ID_] {\r\n border: none;\r\n background-color: transparent;\r\n}\r\n\r\nbutton[id^=GPvisibilityPicto_ID_][aria-pressed=\"false\"] {\r\n left: 0;\r\n background-position: -28px 0;\r\n}\r\n\r\nbutton[id^=GPvisibilityPicto_ID_][aria-pressed=\"true\"] {\r\n background-position: 0 0;\r\n}\r\n\r\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools {\r\n max-height: 28px;\r\n}\r\n\r\n.GPshowLayerAdvancedTools {\r\n top: 0;\r\n right: 0;\r\n background-position: -112px 0;\r\n}\r\n\r\n.GPlayerInfo {\r\n left: 0;\r\n background-position: -55px 0;\r\n}\r\n\r\n.GPlayerInfoOpened {\r\n left: 0;\r\n background-position: -83px 0;\r\n}\r\n\r\n.GPlayerOpacity {\r\n left: 28px;\r\n width: calc(100% - 100px);\r\n height: 28px;\r\n padding-left: 8px;\r\n}\r\n\r\n.GPlayerOpacityValue {\r\n width: 32px;\r\n left: calc(100% - 60px);\r\n line-height: 28px;\r\n font-size: 10px;\r\n font-style: italic;\r\n cursor: default;\r\n}\r\n\r\n.GPlayerRemove {\r\n right: 0;\r\n background-position: -140px 0;\r\n}\r\n\r\n/* Opacity slider : general */\r\n\r\n.GPlayerOpacity input {\r\n -webkit-appearance: none;\r\n -moz-appearance: none;\r\n background: none;\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n margin: 0;\r\n padding: 0;\r\n overflow: hidden;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]:focus {\r\n box-shadow: none;\r\n outline: none;\r\n}\r\n\r\n/* Opacity slider : Chrome, Safari, Opera */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-runnable-track {\r\n -webkit-appearance: none;\r\n height: 3px;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-thumb:before {\r\n position: absolute;\r\n top: 0;\r\n right: 50%;\r\n left: -200px;\r\n height: 3px;\r\n pointer-events: none;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-thumb {\r\n width: 9px;\r\n height: 17px;\r\n -webkit-appearance: none;\r\n border: 2px solid #FFF;\r\n background-color: #505050;\r\n position: relative;\r\n top: -7px;\r\n}\r\n\r\n/* Opacity slider : Firefox */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-moz-range-track {\r\n width: 80px;\r\n height: 3px;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-moz-range-thumb {\r\n width: 5px;\r\n height: 13px;\r\n border: 2px solid #FFF;\r\n border-radius: 0;\r\n box-shadow: 0;\r\n background-color: #505050;\r\n position: relative;\r\n}\r\n\r\n/* Opacity slider : IE */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-track {\r\n border: 0;\r\n border-color: transparent;\r\n border-radius: 0;\r\n border-width: 0;\r\n color: transparent;\r\n height: 3px;\r\n width: 80px;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-fill-lower,\r\n.GPlayerOpacity input[type=\"range\"]::-ms-fill-upper {\r\n background: transparent;\r\n border-radius: 0;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-thumb {\r\n width: 5px;\r\n height: 13px;\r\n border: 2px solid #FFF;\r\n background-color: #505050;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-tooltip {\r\n display: none;\r\n}\r\n\r\n/* Layer info panel */\r\n\r\n[id^=GPlayerInfoPanel] {\r\n position: absolute;\r\n top: 0;\r\n overflow-y: hidden;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n}\r\n\r\n.GPlayerInfoPanelOpened {\r\n display: block;\r\n}\r\n\r\n.GPlayerInfoPanelClosed {\r\n display: none;\r\n}\r\n\r\n/* div[id^=GPlayerInfoContent] {\r\n position: relative;\r\n width: 280px;\r\n max-height: 200px;\r\n overflow-y: auto;\r\n padding-left: 10px;\r\n padding-right: 10px;\r\n} */\r\n\r\ndiv[id^=GPlayerInfoTitle] {\r\n width: calc(100% - 52px);\r\n margin: auto;\r\n margin-bottom: 10px;\r\n padding-bottom: 5px;\r\n text-align: center;\r\n font-size: 1.1em;\r\n font-weight: bold;\r\n}\r\n\r\ndiv[id^=GPlayerInfoQuicklook] {\r\n position: absolute;\r\n top: -2px;\r\n left: 10px;\r\n width: 20px;\r\n height: 20px;\r\n cursor: pointer;\r\n}\r\n\r\ndiv[id^=GPlayerInfoClose] {\r\n position: absolute;\r\n top: -8px;\r\n right: 10px;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n}\r\n\r\ndiv[id^=GPlayerInfoDescription] {\r\n font-size: 0.9em;\r\n}\r\n\r\ndiv[id^=GPlayerInfoLegend] {\r\n\r\n}\r\n\r\ndiv[id^=GPlayerInfoMetadata] {\r\n\r\n}\r\n\r\n.GPlayerInfoSubtitle {\r\n padding-left: 35px;\r\n font-weight: bold;\r\n margin-top: 10px;\r\n margin-bottom: 4px;\r\n}\r\n\r\n.GPlayerInfoLink,\r\n.GPlayerInfoPopup {\r\n line-height: 20px;\r\n padding-left: 23px;\r\n white-space: nowrap;\r\n overflow-x: hidden;\r\n text-overflow: ellipsis;\r\n color: #999999;\r\n background-repeat: no-repeat;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlayerInfoLink {\r\n background-position: 0 -20px;\r\n}\r\n\r\n.GPlayerInfoLink:hover,\r\n.GPlayerInfoPopup:hover {\r\n color: #333;\r\n}\r\n\r\n.GPlayerInfoLink a,\r\n.GPlayerInfoLink a:visited\r\n.GPlayerInfoLink a:focus\r\n.GPlayerInfoLink a:hover {\r\n text-decoration: none;\r\n color: inherit;\r\n}\r\n\r\n\r\n.GPlayerName {\r\n left: 28px;\r\n width: calc(100% - 56px);\r\n line-height: 28px;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n padding-left: 4px;\r\n cursor: move;\r\n}\r\n\r\n.outOfRange .GPlayerName {\r\n color: #AAA;\r\n}\r\n\r\ndiv[id^=GPlayerInfoContent] {\r\n width: 280px;\r\n}","/* Location */\n[id*=\"GPlocationOriginPointer\"] {\n background-image: url(\"img/GPlocationOptions.png\");\n background-repeat: no-repeat;\n}\n\n[id^=GPlocationStageRemove],\n[id^=GPlocationStageAdd] {\n background-image: url(\"img/GPlocationOptions.png\");\n}\n\n[id^=GPlocationStageRemove],\n[id^=GPlocationStageAdd] {\n width: 28px;\n height: 28px;\n border: none;\n cursor: pointer;\n}\n\n.GPlocationOpen {\n background-color: unset;\n}\n.GPlocationOriginLabel {}\n.GPlocationStageRemove {\n background-position: -84px center;\n}\n.GPlocationStageAdd {\n background-position: -56px center;\n}\n\n[id*=\"GPlocationOriginPointer\"] + .GPlocationOriginPointerImg {\n background-position: -1px center;\n}\n\n[id*=\"GPlocationOriginPointer\"]:checked + .GPlocationOriginPointerImg {\n background-position: -29px center;\n}\n\n.GPlocationStageFlexInput {\n max-height: 28px;\n opacity: 1;\n}\n\nbutton.GPlocationOriginPointerImg[id*=\"GPlocationOriginPointerImg\"] {\n width: 28px;\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n border-right: 1px solid #999;\n}\n\n.GPlocationStageFlexInput {\n margin-bottom: 5px;\n}\n\ndiv[id^=GPlocationAutoCompleteList] {\n\n}\n","/* MEASURELENGTH POSITION */\r\n\r\n\r\n/* Showing/hiding measureLength position panel */\r\n\r\nbutton[id^=\"GPshowMeasureAreaPicto-\"] {\r\n background-image: url(\"img/GPmeasuresOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: -78px center;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAreaPicto-\"][aria-pressed=\"false\"] {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAreaPicto-\"][aria-pressed=\"true\"] {\r\n background-color: rgba(0,60,136,0.7);\r\n}","/* MEASURELENGTH POSITION */\r\n\r\n/* Showing/hiding drawing panel */\r\n\r\nbutton[id^=\"GPshowMeasureLengthPicto-\"] {\r\n background-image: url(\"img/GPmeasuresOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: -24px center;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureLengthPicto-\"][aria-pressed=\"false\"] {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureLengthPicto-\"][aria-pressed=\"true\"] {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n","/* MEASURELENGTH POSITION */\r\n\r\n/* Showing/hiding measureLength position panel */\r\n\r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"] {\r\n background-image: url(\"img/GPmeasuresOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 2px center;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"][aria-pressed=\"false\"] {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"][aria-pressed=\"true\"] {\r\n background-color: rgba(0,60,136,0.7);\r\n}","/* MEASURE TOOL */\n\n.GPmeasureTooltip {\n position: relative;\n background: rgba(0, 0, 0, 0.5);\n border-radius: 4px;\n color: white;\n padding: 4px 8px;\n white-space: nowrap;\n}\n\n.GPmeasureTooltip-measure {\n font-weight: bold;\n}\n\n.GPmeasureTooltip-info {\n font-size: 0.75em;\n text-align: center;\n}\n\n.GPmeasureTooltip-static {\n background-color: #ffcc33;\n color: black;\n border: 1px solid white;\n}\n\n.GPmeasureTooltip-hidden {\n display: none;\n}\n\n.GPmeasureTooltip-measure::before,\n.GPmeasureTooltip-info::before,\n.GPmeasureTooltip-static::before {\n border-top: 6px solid rgba(0, 0, 0, 0.5);\n border-right: 6px solid transparent;\n border-left: 6px solid transparent;\n content: \"\";\n position: absolute;\n bottom: -6px;\n margin-left: -7px;\n left: 50%;\n}\n\n.GPmeasureTooltip-static::before {\n border-top-color: #ffcc33;\n}\n","\n/* General panels */\n[id^=GPmousePositionPanel-] {\n width: 280px;\n}\n\nbutton[id^=\"GPshowMousePositionPicto-\"] {\n background-image: url(\"img/GPmousePositionOpen.png\");\n background-repeat: no-repeat;\n background-position: 1px center;\n}\n\n.GPmousePositionEditTool {\n background-image: url(\"img/GPmousePositionEditCoordinates.png\");\n}\n\nbutton[id^=GPmousePositionPanelClose] {\n background-image: url(\"img/GPmousePositionOpen.png\");\n}\n\n/* Map center localisation */\n\n.GPmousePositionLabel,\n.GPmousePositionCoords {\n display: inline-block;\n line-height: 20px;\n}\n\n.GPmousePositionLabel {\n width: 100px;\n font-weight: bold;\n}\n\n.GPmousePositionCoords {\n width: 110px;\n}\n\n/* Showing settings */\n\n.GPshowMousePositionSettingsPicto {\n bottom: 5px;\n right: 0;\n transition: all 0.5s ease-out 0s;\n}\n\n.GPmousePositionSettingsLabel {\n display: block;\n margin: auto;\n text-align: center;\n font-weight: bold;\n line-height: 16px;\n}\n\n.GPmousePositionSettingsSelect {\n width: 180px;\n margin-top: 5px;\n margin-inline: auto;\n}\n\n/* sexagesimal coordinates */\n\n.GPSexagesimal, .GPSexagesimalsec {\n margin:0;\n border: 1px solid rgb(204, 204, 204);\n border-radius: 4px;\n}\n\ninput:read-only.GPSexagesimal, input:read-only.GPSexagesimalsec {\n text-align: right;\n}\n\n\n.GPmousePositionSexagesimalLabel {\n font-size: 1.2em;\n vertical-align: middle;\n padding: 0;\n}\n\n/* direction N/S ou E/O */\nselect.GPmousePositionDirection {\n border: 1px solid #999;\n margin-left: 2px;\n}\n\nselect.GPmousePositionDirection:disabled{\n border: none;\n background: transparent;\n color: black;\n /*For FireFox*/\n -webkit-appearance: none;\n /*For Chrome*/\n -moz-appearance: none;\n}\n\n/*For IE10+*/\nselect.GPmousePositionDirection:disabled::-ms-expand {\n display: none;\n}\nselect.GPmousePositionDirection:disabled::-ms-value {\n color: black;\n}\n\n.GPmousePositionUnits,\n.GPmousePositionAltitudeUnits {\n margin-left: 5px;\n}\n\n/* EDIT COORDINATES TOOLS */\n.GPmousePositionPanelEditTools {\n position: absolute;\n top: 20px;\n right: 5px;\n}\n\n.GPmousePositionEditTool {\n width: 18px;\n height: 18px;\n display: inline-block;\n cursor: pointer;\n}\n","/* REVERSE GEOCODING */\r\n[id^=\"GPreverseGeocodingPanel-\"] {\r\n width: 280px;\r\n}\r\n\r\n.GPshowReverseGeocodingPicto {\r\n background-image: url(\"img/GPreverseGeocodingOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GPreverseGeocodingPanelClose {\r\n background-image: url(\"img/GPreverseGeocodingOpen.png\");\r\n}\r\n\r\n.GPreverseGeocodingReturnPicto {\r\n background-image: url(\"../../img/GPreturn.png\");\r\n background-repeat: no-repeat;\r\n background-position: 0 center;\r\n}\r\n\r\n/* Results panel */\r\n\r\n.GPlocationHighlight {\r\n background-color: rgba(255,200,0,0.25);\r\n color: #222;\r\n}","/* ROUTE */\r\n[id^=GProutePanel-] {\r\n width: 320px;\r\n}\r\n\r\n.GPshowRoutePicto {\r\n background-image: url(\"img/GProuteOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GProutePanelClose {\r\n background-image: url(\"img/GProuteOpen.png\");\r\n}\r\n\r\n/* Route form */\r\nform[id^=GProuteForm] {\r\n padding: 15px;\r\n}\r\n\r\n.GProuteStageFlexInput {\r\n max-height: 28px;\r\n opacity: 1;\r\n}\r\n\r\n.GProuteStageFlexInputHidden {\r\n max-height: 0;\r\n opacity: 0;\r\n overflow: hidden;\r\n}\r\n\r\n.GProutePointLabelP {\r\n margin: 2px 0 5px 0;\r\n}\r\n\r\n.GProuteComputationLabel {\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GProuteOriginPointerImg,\r\n.GProuteStageRemove,\r\ndiv[id^=GProuteStageAdd],\r\n.GProuteTransportImg {\r\n background-image: url(\"img/GProuteOptions.png\");\r\n font-size: 0;\r\n}\r\n\r\n.GProuteFormMini {\r\n max-height: 58px;\r\n}\r\n\r\n.GProuteExclusionsOption {\r\n background-image: url(\"img/GProuteCheck.png\");\r\n}\r\n\r\n.GProuteModeLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GProuteTransportImg {\r\n display: inline-block;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n content-visibility: hidden;\r\n}\r\n\r\n.GProuteTransportImg:first-of-type {\r\n margin-left: 18px;\r\n margin-right: 10px;\r\n}\r\n\r\ninput[id^=GProuteTransportCar] + .GProuteTransportImg {\r\n background-position: -112px 0;\r\n}\r\n\r\ninput[id^=GProuteTransportCar]:checked + .GProuteTransportImg {\r\n background-position: -140px 0;\r\n}\r\n\r\ninput[id^=GProuteTransportPedestrian] + .GProuteTransportImg {\r\n background-position: -168px 0;\r\n}\r\n\r\ninput[id^=GProuteTransportPedestrian]:checked + .GProuteTransportImg {\r\n background-position: -196px 0;\r\n}\r\n\r\ndiv[id^=GProuteTransportChoice] input {\r\n display: none;\r\n}\r\n\r\ndiv[id^=GProuteTransportChoice] .gpf-radio-btn-group {\r\n justify-content: center;\r\n}\r\n\r\nselect[id^=GProuteComputationSelect] {\r\n width: 100px;\r\n}\r\n/* Result panel */\r\n\r\n.GProuteResultsDetailsInstructionHighlight {\r\n background-color: rgba(255,200,0,0.25);\r\n color: #222;\r\n}\r\n\r\n.GProuteResultStage {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n}\r\n\r\n\r\n.GProuteResultStageLabel,\r\n.GProuteResultStageValue,\r\n.GProuteResultsValueLabel {\r\n display: inline-block;\r\n line-height: 18px;\r\n}\r\n\r\n.GProuteResultStageLabel,\r\n.GProuteResultsValueLabel {\r\n color: #666;\r\n}\r\n\r\n.GProuteResultStageLabel {\r\n width: 60px;\r\n}\r\n\r\n.GProuteResultsValueLabel {\r\n width: 65px;\r\n}\r\n\r\n.GProuteResultStageValue {\r\n -webkit-flex: 1;\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n overflow-x: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n/* Exclusions */\r\n\r\n\r\n.GPshowRouteExclusionsPicto {\r\n top: unset;\r\n right: 0;\r\n transition: all 0.3s ease-out 0s;\r\n transform: translateY(-100%);\r\n}\r\n\r\n.GProuteExclusionsLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 8px;\r\n margin-top: 8px;\r\n font-weight: bold;\r\n line-height: 16px;\r\n}\r\n\r\n.GProuteExclusionsOptions {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n -webkit-justify-content: space-around;\r\n -ms-flex-pack: distribute;\r\n justify-content: space-around;\r\n}\r\n\r\n.GProuteExclusionsOption {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n color: #A77;\r\n background-color: #FEE;\r\n padding-left: 28px;\r\n padding-right: 5px;\r\n border: 1px solid #A77;\r\n border-radius: 3px;\r\n cursor: pointer;\r\n}\r\n\r\ninput:checked + .GProuteExclusionsOption {\r\n background-color: #EFE;\r\n background-position: 0 -28px;\r\n color: #797;\r\n border: 1px solid #797;\r\n}\r\n\r\n/* Reset picto */\r\n\r\nbutton[id^=GProuteReset] {\r\n /* background-color: #366291; */\r\n background-image: url(\"img/GProuteOptions.png\");\r\n background-position: -224px center;\r\n opacity: 0.8;\r\n transition: opacity 0.2s ease-out;\r\n}\r\n\r\n/* Results popup */\r\n\r\n.gp-features-content-div {\r\n /* min-width: 240px; */\r\n}\r\n\r\n/* Results details header */\r\ndiv[id^=GProuteResultsValueDist],\r\ndiv[id^=GProuteResultsValueTime] {\r\n color: #366291;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails] + label:hover,\r\ninput[id^=GProuteResultsShowDetails] + label + label:hover {\r\n color: #366291;\r\n}\r\n\r\ndiv[id^=GProuteResultsStages] {\r\n margin-bottom: 15px;\r\n}\r\n\r\ndiv[id^=GProuteResultsValueDist],\r\ndiv[id^=GProuteResultsValueTime] {\r\n display: inline-block;\r\n line-height: 18px;\r\n}\r\n\r\ndiv[id^=GProuteResultsValueDist],\r\ndiv[id^=GProuteResultsValueTime] {\r\n width: 80px;\r\n font-weight: bold;\r\n}\r\n\r\nselect[id^=GProuteResultsComputationSelect] {\r\n width: 100px;\r\n}\r\n\r\ndiv[id^=GProuteResultsNew] {\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 3px;\r\n opacity: 0.8;\r\n background-position: -224px 0;\r\n transition: opacity 0.2s ease-out;\r\n cursor: pointer;\r\n background-color: #366291;\r\n background-image: url(\"img/GProuteOptions.png\");\r\n position: initial;\r\n}\r\n\r\n.GPfakeBorder {\r\n display: inline-block;\r\n height: 14px;\r\n width: 60px;\r\n border-bottom: 1px solid #999;\r\n}\r\n\r\n.GPfakeBorderLeft {\r\n margin-left:15px;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails] + label,\r\ninput[id^=GProuteResultsShowDetails] + label + label {\r\n width: 130px;\r\n line-height: 28px;\r\n vertical-align: top;\r\n text-align: center;\r\n font-weight: bold;\r\n cursor: pointer;\r\n transition: color 0.2s ease-out;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails] + label,\r\ninput[id^=GProuteResultsShowDetails]:checked + label + label {\r\n display: inline-block;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails]:checked + label,\r\ninput[id^=GProuteResultsShowDetails] + label + label {\r\n display: none;\r\n}\r\n\r\ndiv:has(input[id^=GProuteResultsShowDetails]) + div[id^=GProuteResultsDetails] {\r\n max-height: 0;\r\n opacity: 0;\r\n}\r\n\r\ndiv:has(input[id^=GProuteResultsShowDetails]:checked) + div[id^=GProuteResultsDetails] {\r\n max-height: 200px;\r\n opacity: 1;\r\n}\r\n\r\ndiv[id^=GProuteResultsDetails] {\r\n overflow-y: auto;\r\n transition: max-height 0.5s ease-in-out 0.25s, opacity 0.5s ease-in-out 0.25s;\r\n}\r\n\r\n.GProuteResultsDetailsNumber,\r\n.GProuteResultsDetailsInstruction {\r\n display: inline-block;\r\n margin-top: 4px;\r\n line-height: 16px;\r\n color: #666;\r\n}\r\n\r\n.GProuteResultsDetailsNumber {\r\n font-weight: bold;\r\n width: 22px;\r\n text-align: right;\r\n vertical-align: top;\r\n}\r\n\r\n.GProuteResultsDetailsInstruction {\r\n width: calc(100% - 30px);\r\n padding-left: 5px;\r\n}\r\n\r\ninput[id^=GProuteSubmit-] {\r\n width: fit-content;\r\n padding: 0 10px;\r\n}","/* SEARCH ENGINE */\r\n\r\n[id^=\"GPsearchEngine-\"] {\r\n flex-direction: row;\r\n align-items: center;\r\n}\r\n\r\n.position-container-top-left [id^=\"GPsearchEngine-\"],\r\n.position-container-bottom-left [id^=\"GPsearchEngine-\"],\r\n.position-container-top-right [id^=\"GPsearchEngine-\"],\r\n.position-container-bottom-right [id^=\"GPsearchEngine-\"] {\r\n flex-direction: column;\r\n align-items: flex-start;\r\n height: 32px;\r\n}\r\n\r\n.position-container-top-left [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\r\n.position-container-bottom-left [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\r\n.position-container-top-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\r\n.position-container-bottom-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList] {\r\n width: 340px;\r\n position: relative;\r\n top: unset;\r\n}\r\n\r\n.GPshowSearchEnginePicto {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 0 center;\r\n}\r\n\r\n.GPsearchRadioContainer {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -26px center;\r\n background-repeat: no-repeat;\r\n transition: border-radius 0.5s ease-out 0s;\r\n color: transparent;\r\n overflow: hidden;\r\n position: relative;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n width: 32px;\r\n height: 32px;\r\n padding: 2px;\r\n background-color: rgba(0,60,136,0.5);\r\n border-radius: 4px;\r\n border: 2px solid rgba(255, 255, 255, 0.4);\r\n}\r\n\r\n.GPbuttonsContainer {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.GPsearchRadioContainer:hover {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n\r\n.GPshowAdvancedSearch {\r\n background-color: #fff0;\r\n}\r\n\r\n.GPshowAdvancedSearch:hover {\r\n background-color: #fff0;\r\n}\r\n\r\n.GPshowGeolocate {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -102px center;\r\n background-repeat: no-repeat;\r\n transition: border-radius 0.5s ease-out 0s;\r\n margin-right: 5px;\r\n}\r\n\r\n.GPshowSearchByCoordinate {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -76px center;\r\n background-repeat: no-repeat;\r\n transition: border-radius 0.5s ease-out 0s;\r\n}\r\n\r\n.GPsearchInputReset {\r\n background-image: url(\"img/GPsearchEngineClose.png\");\r\n background-position: 0 center;\r\n}\r\n\r\n.gpf-select {\r\n background-color: #FFF;\r\n}\r\n\r\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] {\r\n max-width: 0px;\r\n border: none;\r\n}\r\n\r\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] {\r\n border-top-right-radius: 0;\r\n}\r\n\r\nbutton[id^=GPsearchInputReset] {\r\n border-top-right-radius: 5px;\r\n border-bottom-right-radius: 5px;\r\n width: 32px;\r\n height: 32px;\r\n}\r\n\r\nbutton[id^=GPcoordinateSearchClose],\r\nbutton[id^=GPgeocodeResultsClose],\r\nbutton[id^=GPadvancedSearchClose] {\r\n top: 0;\r\n right: 0;\r\n width: 30px;\r\n height: 32px;\r\n}\r\n\r\nbutton[id^=GPcoordinateSearchClose],\r\nbutton[id^=GPgeocodeResultsClose] {\r\n background-position: 0 0;\r\n}\r\n\r\nbutton[id^=GPadvancedSearchClose] {\r\n background-repeat: no-repeat;\r\n}\r\n\r\nbutton[id^=GPcoordinateSearchClose],\r\nbutton[id^=\"GPgeocodeResultsClose\"] {\r\n background-image: url(\"img/GPsearchEngineClose.png\");\r\n}\r\n\r\nbutton[id^=\"GPadvancedSearchClose\"] {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -50px 3px;\r\n}\r\n\r\nform[id^=GPsearchInput-] {\r\n width: 280px;\r\n}\r\n\r\nform[id^=GPsearchInput-] input {\r\n display: block;\r\n width: 100%;\r\n /* height: 100%; */\r\n border: 1px solid #999;\r\n border-top-right-radius: 5px;\r\n border-bottom-right-radius: 5px;\r\n padding: 0;\r\n padding-right: 30px;\r\n padding-left: 5px;\r\n color: #333;\r\n font-size: 1.0em;\r\n}\r\n\r\nform[id^=GPsearchInput-] input:disabled {\r\n background-color: #DDD;\r\n color: #999;\r\n}\r\n\r\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] {\r\n max-width: 280px;\r\n}\r\n\r\n.GPsearchInputText {\r\n height: 32px;\r\n}\r\n\r\ndialog[id^=GPcoordinateSearchPanel],\r\ndialog[id^=GPadvancedSearchPanel] {\r\n width: 310px;\r\n position: absolute;\r\n top: 35px;\r\n margin-left: 33px;\r\n}\r\n\r\n/* Autocomplete list / geocode results */\r\n\r\n[id^=\"GPautocompleteResults-\"] {\r\n box-shadow: 0 0 6px #000;\r\n}\r\n\r\ndiv[id^=GPautoCompleteList],\r\ndialog[id^=GPgeocodeResultsList] {\r\n width: 280px;\r\n position: absolute;\r\n max-height: 140px;\r\n background-color: var(--background-default-grey);\r\n}\r\n\r\ndiv[id^=GPautoCompleteList] {\r\n top: 35px;\r\n}\r\n\r\ndialog[id^=GPgeocodeResultsList] {\r\n position: absolute;\r\n top: 35px;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n}\r\n\r\ndiv[id^=GPgeocodeResults-] {\r\n width: 100%;\r\n position: relative;\r\n background-color: #FFF;\r\n max-height: 140px;\r\n overflow-y: auto;\r\n}\r\n\r\n.GPcoordinateSearchLabel,\r\n.GPadvancedSearchCodeLabel,\r\n.GPadvancedSearchFilterLabel {\r\n max-width: 105px;\r\n}\r\n\r\n.GPcoordinateSearchSystemsSelect,\r\n.GPcoordinateSearchSystemsLabel,\r\n.GPadvancedSearchCodeLabel,\r\n.GPadvancedSearchCode,\r\n div[id^=GPadvancedSearchFilters] {\r\n margin-top: 15px;\r\n}\r\n\r\n.GPcoordinateSearchSystemsLabel,\r\n.GPcoordinateSearchSystemsSelect,\r\n.GPcoordinateSearchUnitsLabel,\r\n.GPcoordinateSearchUnitsSelect,\r\n.GPcoordinateSearchLabel,\r\n.GPcoordinateSearchInput,\r\n.GPadvancedSearchFilterLabel,\r\n.GPadvancedSearchFilterInput {\r\n margin-bottom: 5px;\r\n}\r\n",".GPshowToolBoxPicto {\n background-repeat: no-repeat;\n background-image: url(\"img/GPtoolBoxMeasureOpen.png\");\n}",".GPzoomIn {\n background-image: url(\"img/zoom-in.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center;\n height: 32px;\n width: 32px;\n border-bottom: unset;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.GPzoomOut {\n background-image: url(\"img/zoom-out.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center;\n height: 32px;\n width: 32px;\n border-top: unset;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.GPzoomIn:hover, .GPzoomOut:hover {\n cursor: pointer;\n}",".ol-custom-full-screen button {\n background-image: url(\"img/full-screen-buttons.png\");\n background-repeat: no-repeat;\n}\n.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=\"false\"] {\n background-position: 0 0;\n}\n.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=\"true\"] {\n background-position: 0 -30px;\n}\n",".GPshowOverviewMap {\n background-image: url(\"img/overviewmap.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: 2px center;\n}","div[id^=GPlegends-] {\n display: none;\n}","div[id^=GPcatalog-] {\n display: block;\n}\n\n.GPshowCatalogPicto {\n background-image: url(\"img/GPcatalogOpen.png\");\n background-repeat: no-repeat;\n background-position: 0px center;\n}\n\ndialog[id^=GPcatalogPanel-] {\n width: 280px;\n}\n\n.GPcatalogPanelClose {\n background-image: url(\"img/GPcatalogOpen.png\");\n}\n\n.GPtabs {}\n.GPtabsList {\n overflow: hidden;\n border: 1px solid #ccc;\n background-color: #f1f1f1;\n list-style-type: none;\n margin: 0;\n padding: 0;\n display: flex;\n}\n.GPtabList {\n flex: 1 1 0px;\n}\n.GPtabButton {\n background-color: inherit;\n float: left;\n border: none;\n outline: none;\n cursor: pointer;\n padding: 14px 16px;\n transition: 0.3s;\n}\n.GPtabButtonActive {\n background-color: #ccc;\n}\n.GPtabContent {\n display: none;\n padding: 6px 12px;\n border: 1px solid #ccc;\n border-top: none;\n}\n.GPtabContentSelected {\n display: block;\n}\n.GPlabelActive:hover {\n background-color: #ccc;\n}\n.GPcatalogButtonSection {\n border: unset;\n background: unset;\n}\nbutton[aria-expanded=\"true\"].GPcatalogButtonSection span.GPshowCatalogAdvancedTools {\n -webkit-transform: rotateX(180deg);\n transform: rotateX(180deg);\n}\n\n.GPshowCatalogAdvancedTools {\n display: inline-block;\n width: 28px;\n height: 28px;\n vertical-align: middle;\n background-image: url(\"img/GPcatalogTools.png\");\n background-position: -26px 0;\n}\n\n#header-search > label {\n display: none;\n}","div[id^=GPterritories-] {\n display: none\n}","div[id^=\"GPcontrolList-\"] .GPshowOpen > span {\n font-size: 24px;\n color: white;\n display: block;\n height: 24px;\n line-height: 24px;\n pointer-events: none;\n}\n\nbutton[id^=\"GPshowControlListPicto-\"][aria-pressed=\"true\"] + dialog {\n width: 200px;\n}\n\n.GPcontrolListPanelClose {\n background-image: url(\"img/close.png\");\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div {\n display: flex;\n flex-direction: row;\n column-gap: 1rem;\n align-items: center;\n padding: 0.5rem 0.5rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div:hover {\n background-color: #EEE;\n cursor: pointer;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button {\n flex-shrink: 0;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button:hover {\n background-color: rgba(0,60,136,0.5);\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/modules/Classic.js b/dist/modules/Classic.js index ad5f47d5..267d4919 100644 --- a/dist/modules/Classic.js +++ b/dist/modules/Classic.js @@ -8,7 +8,7 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */Classic={}.default; \ No newline at end of file diff --git a/dist/modules/Dsfr.css b/dist/modules/Dsfr.css index 4b13786f..86ac6727 100644 --- a/dist/modules/Dsfr.css +++ b/dist/modules/Dsfr.css @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * - */:root{--size-per-row:44px}.gpf-widget{padding:2px;pointer-events:auto;position:absolute}.gpf-widget-button{width:40px}.gpf-panel{background-color:unset;max-height:100%;position:relative;width:max-content}.gpf-panel form{overflow:auto;padding:0 2rem 2rem}.gpf-panel--hidden{display:none}.gpf-panel__body{display:flex;flex:1 1 auto;flex-direction:column;max-height:100%!important;min-height:0;overflow:unset;position:relative}.gpf-panel__title{text-align:left}.gpf-panel__footer{background-color:transparent;justify-content:center;margin-top:0;padding:0}.gpf-panel__footer>input[type=submit]{width:100%}.gpf-panel__content{margin-bottom:unset;padding:unset}.gpf-panel--close,.gpf-panel--info,.gpf-panel--reduce{cursor:pointer;position:relative}.gpf-flex{align-items:center;flex-direction:row}.gpf-flex,.gpf-flex-column{display:flex;justify-content:space-evenly}.gpf-flex-column{flex-direction:column}.gpf-flex-padding{padding:5px}.gpf-hidden{display:none;opacity:0;visibility:hidden}.gpf-visible{display:block;opacity:100%;visibility:visible}.gpf-waiting{background-color:hsla(0,0%,100%,.9);border-radius:4px;bottom:0;font-size:1.5em;font-weight:700;height:inherit;left:0;overflow:hidden;position:absolute;right:0;top:80px}.gpf-waiting--hidden{display:none}.gpf-waiting--visible{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;z-index:4000}.gpf-waiting_info{margin:auto}.gpf-btn-icon.gpf-btn--secondary,.gpf-btn-icon.gpf-btn--tertiary{background-color:var(--background-default-grey)}.gpf-widget>.gpf-btn-icon[aria-pressed=true]{background-color:var(--hover-tint);position:relative}.gpf-widget:has(>.gpf-btn-icon[aria-pressed=true]):after{background-color:var(--background-action-high-blue-france);content:"";height:40px;left:44px;position:absolute;transform:translateY(-40px);width:3px}@supports(-moz-appearance:none){.gpf-widget:has(.gpf-btn-icon[aria-pressed=true]):after{transform:unset}}.gpf-widget>.gpf-btn-icon[aria-label]:hover:before{background-image:conic-gradient(from 56.31deg at 0 50%,transparent 0deg,var(--background-overlap-grey) 0deg,var(--background-overlap-grey) 67.38deg,transparent 67.38deg),conic-gradient(from 56.31deg at 0 50%,transparent 0deg,var(--border-default-grey) 0deg,var(--border-default-grey) 67.38deg,transparent 67.38deg),linear-gradient(90deg,var(--border-default-grey),var(--border-default-grey)),linear-gradient(90deg,var(--background-overlap-grey),var(--background-overlap-grey));background-position:.125rem 50%,0 50%,.375rem 100%,.375rem 100%;background-repeat:no-repeat;background-size:.375rem .5rem,.375rem .5rem,1px,100%,calc(100% - .5rem) 100%;color:var(--text-default-grey);content:attr(aria-label);filter:drop-shadow(0 2px 6px rgba(0,0,18,.16));filter:drop-shadow(var(--overlap-shadow));font-size:.75rem;padding:.5rem .5rem .5rem 1.25rem;position:absolute;top:0;white-space:nowrap;width:fit-content}.position-container-bottom-left .gpf-widget>.gpf-btn-icon[aria-label]:hover:before,.position-container-top-left .gpf-widget>.gpf-btn-icon[aria-label]:hover:before{transform:translateX(24px)}.position-container-bottom-right .gpf-widget>.gpf-btn-icon[aria-label]:hover:before,.position-container-top-right .gpf-widget>.gpf-btn-icon[aria-label]:hover:before{background-image:conic-gradient(from 236.31deg at 100% 50%,transparent 0deg,var(--background-overlap-grey) 0deg,var(--background-overlap-grey) 67.38deg,transparent 67.38deg),conic-gradient(from 236.31deg at 100% 50%,transparent 0deg,var(--border-default-grey) 0deg,var(--border-default-grey) 67.38deg,transparent 67.38deg),linear-gradient(90deg,var(--border-default-grey),var(--border-default-grey)),linear-gradient(90deg,var(--background-overlap-grey),var(--background-overlap-grey));background-position:calc(100% - .125rem) 50%,100% 50%,calc(100% - .375rem) 0,calc(100% - .375rem) 0;background-size:.375rem .5rem,.375rem .5rem,1px 100%,100%;padding:.5rem 1.25rem .5rem .5rem;transform:translateX(calc(-100% - 16px))}.gpf-btn--secondary,.gpf-btn--tertiary{position:relative}.gpf-btn--secondary:after,.gpf-btn--tertiary:after{background-color:var(--text-action-high-blue-france);content:"";height:100%;left:0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask:linear-gradient(#0000,#0000);mask:linear-gradient(#0000,#0000);position:absolute;top:0;width:100%}.gpf-btn--secondary:disabled:after,.gpf-btn--tertiary:disabled:after{background-color:var(--text-disabled-grey)}.position-container-top-left .gpf-button-no-gutter,.position-container-top-right .gpf-button-no-gutter{margin-bottom:-5px}.position-container-bottom-left .gpf-button-no-gutter,.position-container-bottom-right .gpf-button-no-gutter{margin-top:-5px}.gpf-btn-icon-close{float:right;position:absolute;right:.5rem;top:.5rem}.gpf-btn-icon-return{float:left;left:.5rem;position:absolute;top:.5rem}.gpf-btn-icon-return:after{-webkit-mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAANVJREFUKJGd07EuREEYxfGzK0hsQSOhkKxoZButR9B5FJ3Gc2gUKPU6CkGx0XgGuhsaDVH5aSxjc+9u9p7kK74z8/9OJjPTQdqq25qcAPeTDKbSGK8BhjitWftX48nbSU6S7CZZSbKaZDnJ3LTkLdz50xsecYsz7GGxTC7hY3xp1ieO0K2D13FTbH7BPR5Q/QyusFMHBxvFgAvMYwE9HOIDB01wsFmcs/SXcInzSXCwhn6Nv4/rpqsaqUryVOMPkzyPmlmf52uSq1HTMfvH6CV5bwv/6htI1GwnhVkfqAAAAABJRU5ErkJggg==) center no-repeat;mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAANVJREFUKJGd07EuREEYxfGzK0hsQSOhkKxoZButR9B5FJ3Gc2gUKPU6CkGx0XgGuhsaDVH5aSxjc+9u9p7kK74z8/9OJjPTQdqq25qcAPeTDKbSGK8BhjitWftX48nbSU6S7CZZSbKaZDnJ3LTkLdz50xsecYsz7GGxTC7hY3xp1ieO0K2D13FTbH7BPR5Q/QyusFMHBxvFgAvMYwE9HOIDB01wsFmcs/SXcInzSXCwhn6Nv4/rpqsaqUryVOMPkzyPmlmf52uSq1HTMfvH6CV5bwv/6htI1GwnhVkfqAAAAABJRU5ErkJggg==) center no-repeat}.gpf-btn-icon{caret-color:transparent;width:inherit}.gpf-btn-icon-reset:after{background-color:var(--text-action-high-blue-france);-webkit-mask:linear-gradient(#fff 0 0) top /100% 1px,linear-gradient(#fff 0 0) bottom/100% 1px,linear-gradient(#fff 0 0) left /1px 100%,linear-gradient(#fff 0 0) right /1px 100%,url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=) -25px center;mask:linear-gradient(#fff 0 0) top /100% 1px,linear-gradient(#fff 0 0) bottom/100% 1px,linear-gradient(#fff 0 0) left /1px 100%,linear-gradient(#fff 0 0) right /1px 100%,url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=) -25px center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.gpf-btn-icon-info{height:40px;width:40px}.gpf-input{padding-left:5px}.gpf-radio-btn-group{display:flex;gap:1em}.gpf-panel__advancedlist,.gpf-panel__list{background-color:#fff;border:1px solid #999;max-height:140px;overflow-y:hidden;position:absolute;width:inherit;z-index:2}.gpf-panel__advancedlist{border-top:none;font-size:.9em;width:calc(100% - 28px)}.gpf-panel__items:hover{background-color:#cedbef;color:#000}.gpf-panel__items{color:#5e5e5e;cursor:pointer;font-size:1em;height:28px;line-height:16px;overflow:hidden;padding:6px 10px;text-overflow:ellipsis;white-space:nowrap;width:100%}.gpf-panel:after,.gpf-panel:before{flex:0;height:unset}:root{--size-per-row:50px}.position-container-bottom-left,.position-container-bottom-right,.position-container-top-left,.position-container-top-right{display:flex;flex-direction:column;height:calc(100% - 8px);justify-content:flex-start;min-height:var(--size-per-row);position:absolute;width:calc(var(--size-per-row) + 4px)}.position-container-top-left,.position-container-top-right{top:4px}.position-container-top-left{float:left;left:8px}.position-container-top-right{float:right;right:4px}.position-container-bottom-left,.position-container-bottom-right{bottom:4px;justify-content:flex-end}.position-container-bottom-right{float:right;right:4px}.position-container-bottom-left{float:left;left:8px}.gp-feature-info-div{background-color:var(--background-default-grey);bottom:17px;box-shadow:0 0 5px var(--text-default-grey);font-size:.75em;max-width:calc(100vw - 80px);padding:10px;position:relative}.gp-feature-info-div:before{border-left:14px solid transparent;border-right:14px solid transparent;border-top:15px solid var(--background-default-grey);bottom:-15px;content:"";left:50%;margin-left:-14px;position:absolute}.gp-feature-info-div .closer{background-color:var(--background-default-grey);border:none;border-bottom-right-radius:10px;border-top-right-radius:10px;cursor:pointer;display:block;height:30px;position:absolute;right:0;top:0;width:30px}.gp-feature-info-div .closer:after{background-color:var(--text-action-high-blue-france);content:"";height:100%;left:0;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwMDA5MSIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwMDA5MSIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=) center no-repeat;-webkit-mask-size:14px 14px;mask-size:14px 14px;position:absolute;top:0;width:100%}.gp-features-content-div{max-height:340px;max-width:420px;min-width:260px;overflow:auto}.gp-features-content-div h5,.gp-features-content-div h6,.gp-features-content-div p,.gp-features-content-div ul{margin:0}.gp-features-content-div ul{list-style-type:none;padding:0}.geoportail-popup-content h5,.geoportail-popup-content h6,.geoportail-popup-content p,.gp-att-description-div,.gp-att-name-div,.gp-att-others-div{padding:0 10px}.geoportail-popup-content h5:not(:last-child),.geoportail-popup-content h6:not(:last-child),.geoportail-popup-content p:not(:last-child),.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){margin-bottom:15px}.geoportail-popup-content h5:last-child,.geoportail-popup-content h6:last-child,.geoportail-popup-content p:last-child,.gp-att-description-div:last-child,.gp-att-name-div,.gp-att-others-div:last-child{margin-bottom:10px}.geoportail-popup-content h5:first-child,.geoportail-popup-content h6:first-child,.geoportail-popup-content p:first-child,.gp-att-description-div:first-child,.gp-att-name-div:first-child,.gp-att-others-div:first-child{margin-top:10px}.gp-att-name-div,.gp-features-content-div h5{color:#0b6ba7;font-size:1.2em;font-weight:700;padding-right:35px;text-transform:uppercase}.gp-features-content-div h6{font-size:1.1em}.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){border-bottom:1px dotted #666;padding-bottom:10px}.ol-disabled{--idle:transparent;--hover:var(--background-disabled-grey-hover);--active:var(--background-disabled-grey-active);background-color:var(--background-disabled-grey);color:var(--text-disabled-grey);cursor:not-allowed;display:block}.ol-scale-bar,.ol-scale-line{z-index:-1}.fr-collapse{--collapse-max-height:none}.fr-collapse:not(.fr-collapse--expanded):not(.fr-collapsing){--collapse-max-height:0}@media (max-width:576px){.gpf-mobile-fullscreen>button[aria-pressed=true]~dialog{width:100vw!important}.gpf-mobile-fullscreen form div,.gpf-mobile-fullscreen form p{margin:auto;text-align:center}.gpf-mobile-fullscreen .gpf-mobile-form{height:100vh;max-height:unset}.position-container-bottom-left .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-bottom-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-top-left .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-top-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog{left:-8px!important;right:unset!important;top:-4px!important}.position-container-bottom-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-top-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog{left:unset!important;right:-4px!important}}.gpf-btn-icon-drawing:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI1Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTUuMDQgOS40MzcgMTMuNzA0IDguMWwtOC44MTEgOC44MXYxLjMzOUg2LjIzek0xNi4zNzggOC4xbDEuMzM4LTEuMzM4LTEuMzM4LTEuMzM3TDE1LjA0IDYuNzZ6TTcuMDE0IDIwLjE0SDN2LTQuMDEzbDEyLjcxLTEyLjcxYS45NDYuOTQ2IDAgMCAxIDEuMzM3IDBsMi42NzYgMi42NzZjLjM3LjM3LjM3Ljk2OSAwIDEuMzM4eiIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI1Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTUuMDQgOS40MzcgMTMuNzA0IDguMWwtOC44MTEgOC44MXYxLjMzOUg2LjIzek0xNi4zNzggOC4xbDEuMzM4LTEuMzM4LTEuMzM4LTEuMzM3TDE1LjA0IDYuNzZ6TTcuMDE0IDIwLjE0SDN2LTQuMDEzbDEyLjcxLTEyLjcxYS45NDYuOTQ2IDAgMCAxIDEuMzM3IDBsMi42NzYgMi42NzZjLjM3LjM3LjM3Ljk2OSAwIDEuMzM4eiIvPjwvc3ZnPg==) center no-repeat}.gp-label-div,.gp-styling-div{transform:translateY(20px);width:370px}.gp-label-div textarea{margin-bottom:1rem;max-width:100%}.gp-label-div input{width:100%}.gp-styling-option.fr-range--sm[data-fr-js-range]:after,.gp-styling-option.fr-range--sm[data-fr-js-range]:before{top:1.74rem}.drawing-tool{width:40px}.drawing-tool-active{background-color:var(--hover-tint)}button[id^=drawing-tool-point-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOCAxNi40ODUgNC4yNDMtNC4yNDJhNiA2IDAgMSAwLTguNDg2IDB6bTUuNjU3LTIuODI4TDggMTkuMzE0bC01LjY1Ny01LjY1N2E4IDggMCAxIDEgMTEuMzE0IDBNMSAyMGgxNHYySDF6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOCAxNi40ODUgNC4yNDMtNC4yNDJhNiA2IDAgMSAwLTguNDg2IDB6bTUuNjU3LTIuODI4TDggMTkuMzE0bC01LjY1Ny01LjY1N2E4IDggMCAxIDEgMTEuMzE0IDBNMSAyMGgxNHYySDF6Ii8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-line-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zLjQxNCAxNCAxMy41NTYgMy44NThsLTEuNDE0LTEuNDE0TDIgMTIuNTg2VjE0em0uODI5IDJIMHYtNC4yNDNMMTEuNDM1LjMyMmExIDEgMCAwIDEgMS40MTQgMGwyLjgyOSAyLjgyOWExIDEgMCAwIDEgMCAxLjQxNHpNMCAxOGgxOHYySDB6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zLjQxNCAxNCAxMy41NTYgMy44NThsLTEuNDE0LTEuNDE0TDIgMTIuNTg2VjE0em0uODI5IDJIMHYtNC4yNDNMMTEuNDM1LjMyMmExIDEgMCAwIDEgMS40MTQgMGwyLjgyOSAyLjgyOWExIDEgMCAwIDEgMCAxLjQxNHpNMCAxOGgxOHYySDB6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat}button[id^=drawing-tool-polygon-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtMTEgMy4wMyA4LjUzIDYuMTk4LTMuMjU4IDEwLjAyOEg1LjcyOUwyLjQ3IDkuMjI4em0xMC43NDcgNS40NzhMMTEgLjcuMjUzIDguNTA4bDQuMTA1IDEyLjYzNGgxMy4yODR6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtMTEgMy4wMyA4LjUzIDYuMTk4LTMuMjU4IDEwLjAyOEg1LjcyOUwyLjQ3IDkuMjI4em0xMC43NDcgNS40NzhMMTEgLjcuMjUzIDguNTA4bDQuMTA1IDEyLjYzNGgxMy4yODR6Ii8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-text-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNyAwYTEgMSAwIDAgMSAxIDF2My43NTdsLTIgMlYySDJ2MTZoMTR2LTIuNzU4bDItMlYxOWExIDEgMCAwIDEtMSAxSDFhMSAxIDAgMCAxLTEtMVYxYTEgMSAwIDAgMSAxLTF6bTEuNzc4IDYuODA4IDEuNDE0IDEuNDE0TDEyLjQxNCAxNmwtMS40MTYtLjAwMi4wMDItMS40MTJ6TTEwIDEwdjJINXYtMnptMy00djJINVY2eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNyAwYTEgMSAwIDAgMSAxIDF2My43NTdsLTIgMlYySDJ2MTZoMTR2LTIuNzU4bDItMlYxOWExIDEgMCAwIDEtMSAxSDFhMSAxIDAgMCAxLTEtMVYxYTEgMSAwIDAgMSAxLTF6bTEuNzc4IDYuODA4IDEuNDE0IDEuNDE0TDEyLjQxNCAxNmwtMS40MTYtLjAwMi4wMDItMS40MTJ6TTEwIDEwdjJINXYtMnptMy00djJINVY2eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-edit-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0xMi4xMjEgNC4yMjIgNS42NTcgNS42NTctLjcwNyA2LjM2NGMtNi4xMjggMS40MTQtOS43ODIgMi40NzUtMTMuMDggNS4zMDNMMi41OTQgMjAuMTVjMy43MjItMy4zMzEgNy45OTUtNC4zMjggMTIuNjQzLTUuNTJsLjQ0Ni00LjAxOC00LjI5Ny00LjI5Ny00LjAxOC40NDZjLTEuMTkyIDQuNjQ4LTIuMTg5IDguOTItNS41MiAxMi42NDNMLjQ1NCAxOC4wMWMyLjgyOC0zLjMgMy44OS02Ljk1MyA1LjMwMy0xMy4wODF6bS0xLjQxNCA3LjA3QTIgMiAwIDAgMSA3Ljg4IDE0LjEyYTIgMiAwIDEgMSAyLjgyNy0yLjgyOG0zLjg5LTEwLjI1MiA2LjM0NiA2LjM0NmEuNS41IDAgMCAxLS4yNzcuODQ4bC0xLjQ3NC4yMy01LjY1Ni01LjY1Ni4yMTItMS40ODVhLjUuNSAwIDAgMSAuODQ4LS4yODMiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0xMi4xMjEgNC4yMjIgNS42NTcgNS42NTctLjcwNyA2LjM2NGMtNi4xMjggMS40MTQtOS43ODIgMi40NzUtMTMuMDggNS4zMDNMMi41OTQgMjAuMTVjMy43MjItMy4zMzEgNy45OTUtNC4zMjggMTIuNjQzLTUuNTJsLjQ0Ni00LjAxOC00LjI5Ny00LjI5Ny00LjAxOC40NDZjLTEuMTkyIDQuNjQ4LTIuMTg5IDguOTItNS41MiAxMi42NDNMLjQ1NCAxOC4wMWMyLjgyOC0zLjMgMy44OS02Ljk1MyA1LjMwMy0xMy4wODF6bS0xLjQxNCA3LjA3QTIgMiAwIDAgMSA3Ljg4IDE0LjEyYTIgMiAwIDEgMSAyLjgyNy0yLjgyOG0zLjg5LTEwLjI1MiA2LjM0NiA2LjM0NmEuNS41IDAgMCAxLS4yNzcuODQ4bC0xLjQ3NC4yMy01LjY1Ni01LjY1Ni4yMTItMS40ODVhLjUuNSAwIDAgMSAuODQ4LS4yODMiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}button[id^=drawing-tool-display]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNNS44MyAxOEEzLjAwMSAzLjAwMSAwIDEgMSAyIDE0LjE3VjUuODNBMy4wMDEgMy4wMDEgMCAxIDEgNS44MyAyaDguMzRBMy4wMDEgMy4wMDEgMCAxIDEgMTggNS44M3Y4LjM0QTMuMDAxIDMuMDAxIDAgMSAxIDE0LjE3IDE4em0wLTJoOC4zNEEzIDMgMCAwIDEgMTYgMTQuMTdWNS44M0EzIDMgMCAwIDEgMTQuMTcgNEg1LjgzQTMgMyAwIDAgMSA0IDUuODN2OC4zNEEzIDMgMCAwIDEgNS44MyAxNk0zIDRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTE0IDBhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTAgMTRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyTTMgMThhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNNS44MyAxOEEzLjAwMSAzLjAwMSAwIDEgMSAyIDE0LjE3VjUuODNBMy4wMDEgMy4wMDEgMCAxIDEgNS44MyAyaDguMzRBMy4wMDEgMy4wMDEgMCAxIDEgMTggNS44M3Y4LjM0QTMuMDAxIDMuMDAxIDAgMSAxIDE0LjE3IDE4em0wLTJoOC4zNEEzIDMgMCAwIDEgMTYgMTQuMTdWNS44M0EzIDMgMCAwIDEgMTQuMTcgNEg1LjgzQTMgMyAwIDAgMSA0IDUuODN2OC4zNEEzIDMgMCAwIDEgNS44MyAxNk0zIDRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTE0IDBhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTAgMTRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyTTMgMThhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyIi8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-tooltip]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTEuMjQ2IDExSDQuNzU0bC0yIDVILjZMNyAwaDJsNi40IDE2aC0yLjE1NHptLS44LTJMOCAyLjg4NSA1LjU1NCA5ek0yMSA4LjUzNVY4aDJ2OGgtMnYtLjUzNWE0IDQgMCAxIDEgMC02LjkzTTE5IDE0YTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTEuMjQ2IDExSDQuNzU0bC0yIDVILjZMNyAwaDJsNi40IDE2aC0yLjE1NHptLS44LTJMOCAyLjg4NSA1LjU1NCA5ek0yMSA4LjUzNVY4aDJ2OGgtMnYtLjUzNWE0IDQgMCAxIDEgMC02LjkzTTE5IDE0YTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNCIvPjwvc3ZnPg==) center no-repeat}button[id^=drawing-tool-remove]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01IDJWMGgxMHYyaDV2MmgtMnYxNWExIDEgMCAwIDEtMSAxSDNhMSAxIDAgMCAxLTEtMVY0SDBWMnpNNCA0djE0aDEyVjR6bTMgM2gydjhIN3ptNCAwaDJ2OGgtMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01IDJWMGgxMHYyaDV2MmgtMnYxNWExIDEgMCAwIDEtMSAxSDNhMSAxIDAgMCAxLTEtMVY0SDBWMnpNNCA0djE0aDEyVjR6bTMgM2gydjhIN3ptNCAwaDJ2OGgtMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-icon-elevation:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIyIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xMy43NCAxOS44M0gyLjUzTDcuODMgOC42bDMuODUgNy4wNyAxLjcyLS45NC0zLjE2LTUuODEgMi43NC01LjczIDQuMzYgOC41OWMuNTgtLjMgMS4yMS0uNTEgMS44OC0uNjRMMTMuODMuNTRjLS4xNy0uMzMtLjUyLS41Mi0uODktLjU0LS4zNyAwLS43MS4yMi0uODcuNTZMOS4wOSA2LjhsLS40NS0uODNjLS4xOC0uMzItLjUzLS41MS0uODktLjUxLS4zNy4wMS0uNy4yMy0uODYuNTZMLjA5IDIwLjM5YS45ODIuOTgyIDAgMCAwIC44OSAxLjRIMTQuNmE3LjIgNy4yIDAgMCAxLS44Ni0xLjk2Ii8+PHBhdGggZD0iTTE2LjQ4IDEzLjY5djEuNTRoNC45MWwtNS41NiA1LjU1LS4wNy4wNyAxLjA4IDEuMDkgNS42My01LjYzdjQuOTFIMjR2LTcuNTN6Ii8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyNHYyMS45NEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIyIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xMy43NCAxOS44M0gyLjUzTDcuODMgOC42bDMuODUgNy4wNyAxLjcyLS45NC0zLjE2LTUuODEgMi43NC01LjczIDQuMzYgOC41OWMuNTgtLjMgMS4yMS0uNTEgMS44OC0uNjRMMTMuODMuNTRjLS4xNy0uMzMtLjUyLS41Mi0uODktLjU0LS4zNyAwLS43MS4yMi0uODcuNTZMOS4wOSA2LjhsLS40NS0uODNjLS4xOC0uMzItLjUzLS41MS0uODktLjUxLS4zNy4wMS0uNy4yMy0uODYuNTZMLjA5IDIwLjM5YS45ODIuOTgyIDAgMCAwIC44OSAxLjRIMTQuNmE3LjIgNy4yIDAgMCAxLS44Ni0xLjk2Ii8+PHBhdGggZD0iTTE2LjQ4IDEzLjY5djEuNTRoNC45MWwtNS41NiA1LjU1LS4wNy4wNyAxLjA4IDEuMDkgNS42My01LjYzdjQuOTFIMjR2LTcuNTN6Ii8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyNHYyMS45NEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==) center no-repeat}[id^=GPelevationPathPanelInfo]{float:left;left:0;position:absolute;top:0}[id^=GPelevationPathPanel]{height:unset}[id^=GPelevationPathPanelInfo]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDUuMjkyIDUuMjkyIj48ZyBzdHlsZT0ic3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSI+PGNpcmNsZSBjeD0iMTA0LjQ3MSIgY3k9IjQyLjY2NyIgcj0iMi40NDciIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9Ii4zOTciIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIvPjwvZz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTA0Ljk3NiA0My45OWgtMS4wMzR2LS4xNzZoLjA1NWEuMzMuMzMgMCAwIDAgLjE2MS0uMDMuMTMuMTMgMCAwIDAgLjA2Mi0uMDg2IDEgMSAwIDAgMCAuMDEyLS4xNjJ2LS41NjVhLjcuNyAwIDAgMC0uMDE1LS4xNjhxLS4wMTQtLjA1LS4wNzQtLjA3M2EuNy43IDAgMCAwLS4yMDEtLjAyNXYtLjE3NWwuNzgtLjE2NHYxLjE3cTAgLjE2LjA0LjIyLjA0MS4wNTkuMjE0LjA1OXptLS4yMTUtMi4zNjlhLjI3LjI3IDAgMCAxLS4wOC4xOTYuMjcuMjcgMCAwIDEtLjE5Ni4wOC4yNy4yNyAwIDAgMS0uMTk1LS4wODIuMjcyLjI3MiAwIDAgMS0uMDAxLS4zOS4yNy4yNyAwIDAgMSAuMTk2LS4wODFxLjExNiAwIC4xOTcuMDguMDguMDguMDguMTk4eiIgc3R5bGU9ImZpbGw6IzAwMDE5MTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6LjI2NDU4MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDUuMjkyIDUuMjkyIj48ZyBzdHlsZT0ic3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSI+PGNpcmNsZSBjeD0iMTA0LjQ3MSIgY3k9IjQyLjY2NyIgcj0iMi40NDciIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9Ii4zOTciIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIvPjwvZz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTA0Ljk3NiA0My45OWgtMS4wMzR2LS4xNzZoLjA1NWEuMzMuMzMgMCAwIDAgLjE2MS0uMDMuMTMuMTMgMCAwIDAgLjA2Mi0uMDg2IDEgMSAwIDAgMCAuMDEyLS4xNjJ2LS41NjVhLjcuNyAwIDAgMC0uMDE1LS4xNjhxLS4wMTQtLjA1LS4wNzQtLjA3M2EuNy43IDAgMCAwLS4yMDEtLjAyNXYtLjE3NWwuNzgtLjE2NHYxLjE3cTAgLjE2LjA0LjIyLjA0MS4wNTkuMjE0LjA1OXptLS4yMTUtMi4zNjlhLjI3LjI3IDAgMCAxLS4wOC4xOTYuMjcuMjcgMCAwIDEtLjE5Ni4wOC4yNy4yNyAwIDAgMS0uMTk1LS4wODIuMjcyLjI3MiAwIDAgMS0uMDAxLS4zOS4yNy4yNyAwIDAgMSAuMTk2LS4wODFxLjExNiAwIC4xOTcuMDguMDguMDguMDguMTk4eiIgc3R5bGU9ImZpbGw6IzAwMDE5MTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6LjI2NDU4MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSIvPjwvc3ZnPg==) center no-repeat}[id^=GPelevationPathProfil]>#profileElevationByDefault>svg{transform:translateY(1rem)}[id^=GPelevationPathProfil]{height:150px;width:300px}.GPelevationPathProfilWrapper{padding:0 2rem}div[id^=GPelevationPathInformationsContainer]{display:grid;grid-template-columns:50% 50%;padding:0 2rem 1rem;width:calc(300px + 4rem)}.GPelevationPathInformations{display:flex;flex-wrap:wrap;font-size:13px;gap:0 .25rem;margin:0}.GPelevationPathInformations>span{white-space:nowrap}@media (max-width:576px){#GPelevationPathProfil,div[id^=GPelevationPathInformationsContainer]{margin:auto}}.gpf-btn-icon-getfeatureinfo:after,button[id^=GPgetFeatureInfoPicto-][aria-pressed=true]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIyMyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDIzIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik05Ljg2IDE3LjRjMC0uMjguMDItLjU1LjA0LS44MmwtMi41LTEuMjVWMi40M2w0LjY5IDIuMzV2Ni43YTkuMiA5LjIgMCAwIDEgMS45OS0xLjdWNC43MkwxOCAzLjA0di4xOWgtLjAxdjUuMjJhOC43NjggOC43NjggMCAwIDEgMi4wMS4wNFYuNzZjMC0uMDgtLjAyLS4xNi0uMDUtLjI0YS41LjUgMCAwIDAtLjE3LS4xOC42LjYgMCAwIDAtLjIzLS4wOGMtLjA4IDAtLjE3IDAtLjI0LjA0TDEzLjAxIDNsLTYtMy03IDN2MTYuNjFjLS4wMS4wOCAwIC4xNi4wNS4yNC4wNC4wNy4xLjE0LjE2LjE4cy4xNS4wNy4yMy4wOGMuMDggMCAuMTcgMCAuMjQtLjA0bDYuMy0yLjcgMi45OSAxLjVjLS4wOC0uNDgtLjEzLS45Ni0uMTMtMS40NnptLTQuNDUtMS41M0wyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTkuODMgMjAuNHYyaC0ydi0yem0tLjU0LTcuOTdjMS44My4yNCAzLjE1IDEuODYgMy4wMyAzLjdhMy41IDMuNSAwIDAgMS0zLjQ5IDMuMjdoLTF2LTJoMWMuNzkgMCAxLjQ0LS42MSAxLjUtMS40LjA1LS43OS0uNTItMS40OC0xLjMtMS41OS0uNzgtLjEtMS41MS40Mi0xLjY3IDEuMTlsLTEuOTYtLjM5YTMuNDg2IDMuNDg2IDAgMCAxIDMuODktMi43OCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyMi4zM3YyMi40SDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIyMyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDIzIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik05Ljg2IDE3LjRjMC0uMjguMDItLjU1LjA0LS44MmwtMi41LTEuMjVWMi40M2w0LjY5IDIuMzV2Ni43YTkuMiA5LjIgMCAwIDEgMS45OS0xLjdWNC43MkwxOCAzLjA0di4xOWgtLjAxdjUuMjJhOC43NjggOC43NjggMCAwIDEgMi4wMS4wNFYuNzZjMC0uMDgtLjAyLS4xNi0uMDUtLjI0YS41LjUgMCAwIDAtLjE3LS4xOC42LjYgMCAwIDAtLjIzLS4wOGMtLjA4IDAtLjE3IDAtLjI0LjA0TDEzLjAxIDNsLTYtMy03IDN2MTYuNjFjLS4wMS4wOCAwIC4xNi4wNS4yNC4wNC4wNy4xLjE0LjE2LjE4cy4xNS4wNy4yMy4wOGMuMDggMCAuMTcgMCAuMjQtLjA0bDYuMy0yLjcgMi45OSAxLjVjLS4wOC0uNDgtLjEzLS45Ni0uMTMtMS40NnptLTQuNDUtMS41M0wyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTkuODMgMjAuNHYyaC0ydi0yem0tLjU0LTcuOTdjMS44My4yNCAzLjE1IDEuODYgMy4wMyAzLjdhMy41IDMuNSAwIDAgMS0zLjQ5IDMuMjdoLTF2LTJoMWMuNzkgMCAxLjQ0LS42MSAxLjUtMS40LjA1LS43OS0uNTItMS40OC0xLjMtMS41OS0uNzgtLjEtMS41MS40Mi0xLjY3IDEuMTlsLTEuOTYtLjM5YTMuNDg2IDMuNDg2IDAgMCAxIDMuODktMi43OCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyMi4zM3YyMi40SDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+) center no-repeat}.gpf-btn-icon-isocurve:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGNUY1RjUiIGQ9Ik04IDkuOVYxNWMwIC41NS40NSAxIDEgMXMxLS40NSAxLTFWOS45QTQuOTk3IDQuOTk3IDAgMCAwIDEzLjkgNCA1LjAwNCA1LjAwNCAwIDAgMCA4IC4xIDQuOTk3IDQuOTk3IDAgMCAwIDQuMSA2IDUuMDEgNS4wMSAwIDAgMCA4IDkuOU05IDJjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zbTQuMjEgMTAuNDJjLS41NS0uMTItMS4wOS4yNC0xLjIxLjc5cy4yNCAxLjA5Ljc5IDEuMjFDMTUuMDYgMTQuODcgMTYgMTUuNjggMTYgMTZjMCAuNTgtMi40NSAyLTcgMnMtNy0xLjQyLTctMmMwLS4zMi45NC0xLjEzIDMuMjEtMS42Mi41NS0uMTIuOTEtLjY2Ljc5LTEuMjFzLS42Ni0uOTEtMS4yMS0uNzlDMS43NSAxMy4wOCAwIDE0LjM5IDAgMTZjMCAyLjYzIDQuNTMgNCA5IDRzOS0xLjM3IDktNGMwLTEuNjEtMS43NS0yLjkyLTQuNzktMy41OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTh2MjBIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGNUY1RjUiIGQ9Ik04IDkuOVYxNWMwIC41NS40NSAxIDEgMXMxLS40NSAxLTFWOS45QTQuOTk3IDQuOTk3IDAgMCAwIDEzLjkgNCA1LjAwNCA1LjAwNCAwIDAgMCA4IC4xIDQuOTk3IDQuOTk3IDAgMCAwIDQuMSA2IDUuMDEgNS4wMSAwIDAgMCA4IDkuOU05IDJjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zbTQuMjEgMTAuNDJjLS41NS0uMTItMS4wOS4yNC0xLjIxLjc5cy4yNCAxLjA5Ljc5IDEuMjFDMTUuMDYgMTQuODcgMTYgMTUuNjggMTYgMTZjMCAuNTgtMi40NSAyLTcgMnMtNy0xLjQyLTctMmMwLS4zMi45NC0xLjEzIDMuMjEtMS42Mi41NS0uMTIuOTEtLjY2Ljc5LTEuMjFzLS42Ni0uOTEtMS4yMS0uNzlDMS43NSAxMy4wOCAwIDE0LjM5IDAgMTZjMCAyLjYzIDQuNTMgNCA5IDRzOS0xLjM3IDktNGMwLTEuNjEtMS43NS0yLjkyLTQuNzktMy41OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTh2MjBIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat}.gpf-flex-isocurve{justify-content:unset}.gpf-btn-icon-isocurve-reset{background-position:-29px}[id^=GPisochronPanel-] p.gpf-label{margin-bottom:.2rem;margin-top:1rem}[id^=GPisochronPanel-] p.gpf-label:first-child{margin-top:0}div[id^=GPisochronChoice]{gap:1em;justify-content:left}div[id^=GPisochronTransportChoice]>div{margin-top:.5rem}div[id^=GPisochronValueChron],div[id^=GPisochronValueDist]{width:281px}.GPflexInput>input[id^=GPisochronValueChronInput2]{margin-top:0}.GPisoExclusionsOptions{gap:1rem}[id^=GPisochronForm-]>.GPpanelFooter{position:unset}[id^=GPisochronReset-]{min-width:2.5rem}[id^=GPisochronSubmit-]{width:80%}.gpf-btn-icon-import:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDQuNzYyIDUuMjkyIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTA1LjI2NSAzMDUuMTMzaC0yLjY0NnY0LjIzNGgzLjcwNHYtMy4xNzVoLTEuMDU4em0tMy4xNzUtLjI2N2MwLS4xNDUuMTE4LS4yNjIuMjY0LS4yNjJoMy4xNzVsMS4zMjMgMS4zMjN2My43MDJhLjI2NS4yNjUgMCAwIDEtLjI2My4yNjdoLTQuMjM3YS4yNjUuMjY1IDAgMCAxLS4yNjItLjI2MnptMi42NDUgMi4zODR2MS4wNThoLS41Mjl2LTEuMDU4aC0uNzkzbDEuMDU4LTEuMDU4IDEuMDU4IDEuMDU4eiIgc3R5bGU9InN0cm9rZS13aWR0aDouMjY0NTgzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAyLjA5IC0zMDQuNjA0KSIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDQuNzYyIDUuMjkyIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTA1LjI2NSAzMDUuMTMzaC0yLjY0NnY0LjIzNGgzLjcwNHYtMy4xNzVoLTEuMDU4em0tMy4xNzUtLjI2N2MwLS4xNDUuMTE4LS4yNjIuMjY0LS4yNjJoMy4xNzVsMS4zMjMgMS4zMjN2My43MDJhLjI2NS4yNjUgMCAwIDEtLjI2My4yNjdoLTQuMjM3YS4yNjUuMjY1IDAgMCAxLS4yNjItLjI2MnptMi42NDUgMi4zODR2MS4wNThoLS41Mjl2LTEuMDU4aC0uNzkzbDEuMDU4LTEuMDU4IDEuMDU4IDEuMDU4eiIgc3R5bGU9InN0cm9rZS13aWR0aDouMjY0NTgzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAyLjA5IC0zMDQuNjA0KSIvPjwvc3ZnPg==) center no-repeat}.gpf-panel__items_layerimport{border-bottom:1px solid var(--grey-900-175);color:var(--text-action-high-blue-france);height:auto;list-style-type:none}div[id^=GPlayerSwitcher-]{height:44px}button[id^=GPshowLayersListPicto]{width:40px}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{width:350px}.GPlayerSwitcher_layer{background-color:var(--background-overlap-grey);padding-right:40px}.gpf-btn-icon-layerswitcher:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMyIgZD0ibTIyIDguNTUzLTkuODYgNS41NTItOS44Ni01LjU1MkwxMi4xNCAzek0zLjE3OCAxNC45ODYgMiAxNS42NWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4zIiBkPSJNMy4xNzggMTEuNDM3IDIgMTIuMWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMyIgZD0ibTIyIDguNTUzLTkuODYgNS41NTItOS44Ni01LjU1MkwxMi4xNCAzek0zLjE3OCAxNC45ODYgMiAxNS42NWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4zIiBkPSJNMy4xNzggMTEuNDM3IDIgMTIuMWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-icon-ls-visibility{box-shadow:none}.gpf-btn-icon-ls-visibility:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTIuMjE4IDRjNS4wOTIgMCA5LjMyOSAzLjY2NCAxMC4yMTcgOC41LS44ODggNC44MzYtNS4xMjUgOC41LTEwLjIxNyA4LjVTMi44ODggMTcuMzM2IDIgMTIuNUMyLjg4OCA3LjY2NCA3LjEyNSA0IDEyLjIxOCA0bTAgMTUuMTExYzQgMCA3LjQyMy0yLjc4NCA4LjI5LTYuNjExYTguNTA0IDguNTA0IDAgMCAwLTE2LjU4IDAgOC41MDQgOC41MDQgMCAwIDAgOC4yOSA2LjYxMW0wLTIuMzYxYTQuMjUgNC4yNSAwIDEgMSAwLTguNSA0LjI1IDQuMjUgMCAwIDEgMCA4LjVtMC0xLjg4OWEyLjM2MSAyLjM2MSAwIDEgMCAwLTQuNzIyIDIuMzYxIDIuMzYxIDAgMCAwIDAgNC43MjIiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTIuMjE4IDRjNS4wOTIgMCA5LjMyOSAzLjY2NCAxMC4yMTcgOC41LS44ODggNC44MzYtNS4xMjUgOC41LTEwLjIxNyA4LjVTMi44ODggMTcuMzM2IDIgMTIuNUMyLjg4OCA3LjY2NCA3LjEyNSA0IDEyLjIxOCA0bTAgMTUuMTExYzQgMCA3LjQyMy0yLjc4NCA4LjI5LTYuNjExYTguNTA0IDguNTA0IDAgMCAwLTE2LjU4IDAgOC41MDQgOC41MDQgMCAwIDAgOC4yOSA2LjYxMW0wLTIuMzYxYTQuMjUgNC4yNSAwIDEgMSAwLTguNSA0LjI1IDQuMjUgMCAwIDEgMCA4LjVtMC0xLjg4OWEyLjM2MSAyLjM2MSAwIDEgMCAwLTQuNzIyIDIuMzYxIDIuMzYxIDAgMCAwIDAgNC43MjIiLz48L3N2Zz4=) center no-repeat}button[id^=GPvisibilityPicto_ID_][aria-pressed=false]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjQ0FDREMxIiBkPSJNMTcuODgzIDE5LjI5N0ExMC45NSAxMC45NSAwIDAgMSAxMiAyMWMtNS4zOTIgMC05Ljg3OC0zLjg4LTEwLjgxOC05QTExIDExIDAgMCAxIDQuNTIgNS45MzVMMS4zOTQgMi44MDhsMS40MTQtMS40MTQgMTkuNzk5IDE5Ljc5OS0xLjQxNCAxLjQxNHpNNS45MzYgNy4zNUE4Ljk3IDguOTcgMCAwIDAgMy4yMjMgMTJhOS4wMDUgOS4wMDUgMCAwIDAgMTMuMjAxIDUuODM5bC0yLjAyOC0yLjAyOUE0LjUgNC41IDAgMCAxIDguMTkgOS42MDR6bTYuOTc4IDYuOTc4LTMuMjQyLTMuMjQxYTIuNSAyLjUgMCAwIDAgMy4yNDEgMy4yNDFtNy44OTMgMi4yNjUtMS40MzEtMS40MzFBOC45IDguOSAwIDAgMCAyMC43NzggMTIgOS4wMDUgOS4wMDUgMCAwIDAgOS41NTIgNS4zMzhMNy45NzQgMy43NkM5LjIyMSAzLjI3IDEwLjU4IDMgMTIgM2M1LjM5MiAwIDkuODc4IDMuODggMTAuODE5IDlhMTAuOTUgMTAuOTUgMCAwIDEtMi4wMTIgNC41OTNtLTkuMDg0LTkuMDg0UTExLjg2IDcuNSAxMiA3LjVhNC41IDQuNSAwIDAgMSA0LjQ5MiA0Ljc3OHoiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjQ0FDREMxIiBkPSJNMTcuODgzIDE5LjI5N0ExMC45NSAxMC45NSAwIDAgMSAxMiAyMWMtNS4zOTIgMC05Ljg3OC0zLjg4LTEwLjgxOC05QTExIDExIDAgMCAxIDQuNTIgNS45MzVMMS4zOTQgMi44MDhsMS40MTQtMS40MTQgMTkuNzk5IDE5Ljc5OS0xLjQxNCAxLjQxNHpNNS45MzYgNy4zNUE4Ljk3IDguOTcgMCAwIDAgMy4yMjMgMTJhOS4wMDUgOS4wMDUgMCAwIDAgMTMuMjAxIDUuODM5bC0yLjAyOC0yLjAyOUE0LjUgNC41IDAgMCAxIDguMTkgOS42MDR6bTYuOTc4IDYuOTc4LTMuMjQyLTMuMjQxYTIuNSAyLjUgMCAwIDAgMy4yNDEgMy4yNDFtNy44OTMgMi4yNjUtMS40MzEtMS40MzFBOC45IDguOSAwIDAgMCAyMC43NzggMTIgOS4wMDUgOS4wMDUgMCAwIDAgOS41NTIgNS4zMzhMNy45NzQgMy43NkM5LjIyMSAzLjI3IDEwLjU4IDMgMTIgM2M1LjM5MiAwIDkuODc4IDMuODggMTAuODE5IDlhMTAuOTUgMTAuOTUgMCAwIDEtMi4wMTIgNC41OTNtLTkuMDg0LTkuMDg0UTExLjg2IDcuNSAxMiA3LjVhNC41IDQuNSAwIDAgMSA0LjQ5MiA0Ljc3OHoiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-ls-remove{box-shadow:none}.gpf-btn-icon-ls-remove:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNNyA5aDEwbC0xLjQyOCAxMC44ODlIOC40Mjh6Ii8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNiA2aDEyIi8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTEwLjUgNC41aDMiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNNyA5aDEwbC0xLjQyOCAxMC44ODlIOC40Mjh6Ii8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNiA2aDEyIi8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTEwLjUgNC41aDMiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-ls-collapse{box-shadow:none}.gpf-btn-icon-ls-collapse:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;transition:transform .2s ease-out 0s}.gpf-btn-icon-ls-collapse[aria-pressed=true]:after{box-shadow:none;transform:rotate(180deg)}.gpf-btn-icon-ls-dragndrop{box-shadow:none}.gpf-btn-icon-ls-dragndrop:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAxMVY4bDQgNC00IDR2LTNoLTV2NWgzbC00IDQtNC00aDN2LTVINnYzbC00LTQgNC00djNoNVY2SDhsNC00IDQgNGgtM3Y1eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAxMVY4bDQgNC00IDR2LTNoLTV2NWgzbC00IDQtNC00aDN2LTVINnYzbC00LTQgNC00djNoNVY2SDhsNC00IDQgNGgtM3Y1eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{height:56px;max-height:56px}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools>.GPlayerInfo{visibility:visible}button[id^=GPshowAdvancedTools_ID_][aria-pressed=false]{box-shadow:none}button[id^=GPshowAdvancedTools_ID_][aria-pressed="false "]+.GPlayerAdvancedTools>.GPlayerInfo{visibility:hidden}button[id^=GPshowAdvancedTools_ID_]{position:absolute;right:16px;top:12px}div[id^=GPbasicTools_ID_]{align-items:center;display:flex;flex-direction:row-reverse;flex-wrap:nowrap;justify-content:flex-end}div[id^=GPadvancedTools_ID_]{align-content:center;align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;height:inherit;justify-content:space-around}.gpf-btn-header{height:26px;position:absolute;width:26px;z-index:2}.gpf-btn-icon-layers{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48ZyBzdHJva2U9IiMxNTE1OTYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMiIgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBkPSJNMTUuMTkzIDUuNDQ4IDguMSA5LjQ0IDEuMDA5IDUuNDQ4IDguMSAxLjQ1NHpNMS42NTUgMTAuMDc1bC0uODQ3LjQ3OCA3LjA5MSAzLjk5MyA3LjA5Mi0zLjk5My0uODQ4LS40NzgiLz48cGF0aCBkPSJNMS42NTUgNy41MjIuODA4IDhsNy4wOTEgMy45OTRMMTQuOTkxIDhsLS44NDgtLjQ3OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTZ2MTZIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:auto auto}.gpf-panel__body_ls{max-height:300px!important;overflow:auto}.gpf-panel__title_ls{color:#101092;font-size:1rem;font-weight:400;margin:0;padding:12px 15px;position:relative;right:-16px}.gpf-panel__header_ls{align-content:center;align-items:center;background:#e3e3fd;display:flex;flex-direction:row;height:48px}.gpf-btn-icon-ls-info{box-shadow:none}.gpf-btn-icon-ls-info:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI5LjI1IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTMuOTEgMTYuOTk4aC0zLjkwOHYtLjY2MmguMjA4cS40MTggMCAuNjEtLjExNGEuNDguNDggMCAwIDAgLjIzMy0uMzI1cS4wNDQtLjIxLjA0My0uNjExdi0yLjEzN3EwLS40NDYtLjA1NS0uNjM0LS4wNTQtLjE4Ni0uMjgxLS4yNzUtLjIyNy0uMDg2LS43Ni0uMDk0di0uNjZsMi45NTItLjYyMXY0LjQyMXEwIC42MDUuMTUxLjgyOC4xNTEuMjI1LjgwNi4yMjVWMTd6bS0uODEyLTguOTVxMCAuNDMtLjMwNi43NC0uMzA3LjMwNS0uNzM3LjMwNi0uNDI3IDAtLjczNy0uMzE0YTEgMSAwIDAgMS0uMzEzLS43M2MwLS4yNzcuMTAzLS41MzUuMzA4LS43NDFxLjMxLS4zMDkuNzQyLS4zMDljLjI4OCAwIC41NC4xLjc0MS4zMDJxLjMwMi4zMDEuMzAyLjc0OHoiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI5LjI1IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTMuOTEgMTYuOTk4aC0zLjkwOHYtLjY2MmguMjA4cS40MTggMCAuNjEtLjExNGEuNDguNDggMCAwIDAgLjIzMy0uMzI1cS4wNDQtLjIxLjA0My0uNjExdi0yLjEzN3EwLS40NDYtLjA1NS0uNjM0LS4wNTQtLjE4Ni0uMjgxLS4yNzUtLjIyNy0uMDg2LS43Ni0uMDk0di0uNjZsMi45NTItLjYyMXY0LjQyMXEwIC42MDUuMTUxLjgyOC4xNTEuMjI1LjgwNi4yMjVWMTd6bS0uODEyLTguOTVxMCAuNDMtLjMwNi43NC0uMzA3LjMwNS0uNzM3LjMwNi0uNDI3IDAtLjczNy0uMzE0YTEgMSAwIDAgMS0uMzEzLS43M2MwLS4yNzcuMTAzLS41MzUuMzA4LS43NDFxLjMxLS4zMDkuNzQyLS4zMDljLjI4OCAwIC41NC4xLjc0MS4zMDJxLjMwMi4zMDEuMzAyLjc0OHoiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-ls-extent{box-shadow:none}.gpf-btn-icon-ls-extent:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTQuNjA3IDE2LjAyIDYgNy40MTUgNy40MTQgNmw4LjYwNyA4LjYwN1Y3LjAyaDJ2MTFoLTExdi0yeiIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTQuNjA3IDE2LjAyIDYgNy40MTUgNy40MTQgNmw4LjYwNyA4LjYwN1Y3LjAyaDJ2MTFoLTExdi0yeiIvPjwvc3ZnPg==) center no-repeat}[id^=GPlayerInfoPanel]{height:auto;position:absolute}.gpf-label-name{line-height:28px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 96px)}.GPlayerDragNDrop{cursor:move}.gpf-range__output{width:35px}.GPlayerOpacity.fr-range--sm[data-fr-js-range]:after,.GPlayerOpacity.fr-range--sm[data-fr-js-range]:before{top:25%}div[id^=GPlayerInfoContent]{width:350px}.gpf-btn-icon-close.GPlayersPanelClose{right:0;top:0}.gpf-btn-icon-close.GPlayersPanelClose:after{margin-left:-.125rem}.GPlayerAdvancedToolsContextual{display:none}.GPlayerAdvancedToolsContextual:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSI0IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMTggNCI+PHBhdGggZmlsbD0iIzAwMDA5MSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41ODMuMTY3QTEuODQgMS44NCAwIDAgMCAuNzUgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzMyAxLjgzM0ExLjg0IDEuODQgMCAwIDAgNC40MTcgMiAxLjg0IDEuODQgMCAwIDAgMi41ODMuMTY3bTEyLjgzNCAwQTEuODQgMS44NCAwIDAgMCAxMy41ODMgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzNCAxLjgzM0ExLjg0IDEuODQgMCAwIDAgMTcuMjUgMiAxLjg0IDEuODQgMCAwIDAgMTUuNDE3LjE2N005IC4xNjdBMS44NCAxLjg0IDAgMCAwIDcuMTY3IDJjMCAxLjAwOC44MjUgMS44MzMgMS44MzMgMS44MzNBMS44NCAxLjg0IDAgMCAwIDEwLjgzMyAyIDEuODQgMS44NCAwIDAgMCA5IC4xNjciIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSI0IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMTggNCI+PHBhdGggZmlsbD0iIzAwMDA5MSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41ODMuMTY3QTEuODQgMS44NCAwIDAgMCAuNzUgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzMyAxLjgzM0ExLjg0IDEuODQgMCAwIDAgNC40MTcgMiAxLjg0IDEuODQgMCAwIDAgMi41ODMuMTY3bTEyLjgzNCAwQTEuODQgMS44NCAwIDAgMCAxMy41ODMgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzNCAxLjgzM0ExLjg0IDEuODQgMCAwIDAgMTcuMjUgMiAxLjg0IDEuODQgMCAwIDAgMTUuNDE3LjE2N005IC4xNjdBMS44NCAxLjg0IDAgMCAwIDcuMTY3IDJjMCAxLjAwOC44MjUgMS44MzMgMS44MzMgMS44MzNBMS44NCAxLjg0IDAgMCAwIDEwLjgzMyAyIDEuODQgMS44NCAwIDAgMCA5IC4xNjciIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}.GPlayerAdvancedToolsContextual[aria-pressed=true]{background-color:var(--hover-tint);overflow:visible}.GPlayerSwitcher_layer:has(.GPlayerAdvancedToolsContextual[aria-pressed=true]){overflow:visible}[id^=GPlayersList-] .GPpanelBody:has(.GPlayerAdvancedToolsContextual[aria-pressed=true]){overflow:visible}.GPlayerAdvancedTools:has(.GPlayerAdvancedToolsContextual[aria-pressed=true]){position:relative}.GPlayerAdvancedToolsContextual+div{background-color:var(--background-overlap-grey);border-radius:6px;box-shadow:0 0 10px 0 rgba(0,0,0,.15);display:none;flex-direction:column;flex-wrap:wrap;font-size:13px;gap:6px;padding:14px 6px;z-index:12}.GPlayerAdvancedToolsContextual+div>button{padding-left:2rem}.GPlayerAdvancedToolsContextual+div>button[visibility=hidden]{display:none}.GPlayerAdvancedToolsContextual+div>button:after{mask-position:left}.GPlayerAdvancedToolsContextual[aria-pressed=true]+div{display:flex;position:absolute;right:0;top:calc(2.5rem + 8px)}@media (max-width:576px){.GPlayerAdvancedTools{width:calc(100% + 40px)}.GPlayerAdvancedTools>.GPlayerExtent,.GPlayerAdvancedTools>.GPlayerInfo,.GPlayerAdvancedTools>.GPlayerRemove{display:none}.GPlayerAdvancedToolsContextual{display:inline-flex}[id^=GPopacity_ID_]{flex-grow:0.6}}.gpf-btn-icon-pointer:after{background-color:var(--text-inverted-blue-france);content:"";height:100%;left:0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjAzIDE2LjAzMmE3LjM2IDcuMzYgMCAwIDEtNi42NjItNi42NjNILjY3YS42Ny42NyAwIDEgMSAwLTEuMzM4aC43QTcuMzY0IDcuMzY0IDAgMCAxIDguMDMgMS4zNjhWLjY3YS42Ny42NyAwIDEgMSAxLjMzOCAwdi43YTcuMzYgNy4zNiAwIDAgMSA2LjY2MyA2LjY2MmguNjk5YS42Ny42NyAwIDAgMSAwIDEuMzM4aC0uN2E3LjM2IDcuMzYgMCAwIDEtNi42NjIgNi42NjN2LjY5OWEuNjcuNjcgMCAwIDEtMS4zMzggMHpNOS4zNyA0LjY4NVYyLjcxNGE2LjAyNSA2LjAyNSAwIDAgMSA1LjMxNiA1LjMxN2gtMS45N2EuNjcuNjcgMCAwIDAgMCAxLjMzOGgxLjk3YTYuMDI1IDYuMDI1IDAgMCAxLTUuMzE3IDUuMzE3di0xLjk3YS42Ny42NyAwIDAgMC0xLjMzOCAwdjEuOTdBNi4wMjUgNi4wMjUgMCAwIDEgMi43MTQgOS4zN2gxLjk3YS42Ny42NyAwIDAgMCAwLTEuMzM4aC0xLjk3QTYuMDI2IDYuMDI2IDAgMCAxIDguMDMgMi43MTR2MS45N2EuNjcuNjcgMCAwIDAgMS4zMzggMCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjAzIDE2LjAzMmE3LjM2IDcuMzYgMCAwIDEtNi42NjItNi42NjNILjY3YS42Ny42NyAwIDEgMSAwLTEuMzM4aC43QTcuMzY0IDcuMzY0IDAgMCAxIDguMDMgMS4zNjhWLjY3YS42Ny42NyAwIDEgMSAxLjMzOCAwdi43YTcuMzYgNy4zNiAwIDAgMSA2LjY2MyA2LjY2MmguNjk5YS42Ny42NyAwIDAgMSAwIDEuMzM4aC0uN2E3LjM2IDcuMzYgMCAwIDEtNi42NjIgNi42NjN2LjY5OWEuNjcuNjcgMCAwIDEtMS4zMzggMHpNOS4zNyA0LjY4NVYyLjcxNGE2LjAyNSA2LjAyNSAwIDAgMSA1LjMxNiA1LjMxN2gtMS45N2EuNjcuNjcgMCAwIDAgMCAxLjMzOGgxLjk3YTYuMDI1IDYuMDI1IDAgMCAxLTUuMzE3IDUuMzE3di0xLjk3YS42Ny42NyAwIDAgMC0xLjMzOCAwdjEuOTdBNi4wMjUgNi4wMjUgMCAwIDEgMi43MTQgOS4zN2gxLjk3YS42Ny42NyAwIDAgMCAwLTEuMzM4aC0xLjk3QTYuMDI2IDYuMDI2IDAgMCAxIDguMDMgMi43MTR2MS45N2EuNjcuNjcgMCAwIDAgMS4zMzggMCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;position:absolute;top:0;width:100%}.gpf-btn-icon-pointer{border-top-right-radius:4px;min-width:2.5rem;position:relative}.GPlocationStageFlexInput:has(.GPlocationStageRemove)>.gpf-btn-icon-pointer{border-top-right-radius:0}.gpf-btn-icon-remove{height:2.5rem;width:2.5rem}.gpf-btn-icon-remove:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJtMTIgMTAuNiA0Ljk1LTQuOTYgMS40IDEuNEwxMy40MiAxMmw0Ljk2IDQuOTUtMS40IDEuNEwxMiAxMy40MmwtNC45NSA0Ljk2LTEuNC0xLjRMMTAuNTggMTIgNS42MyA3LjA1bDEuNC0xLjR6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJtMTIgMTAuNiA0Ljk1LTQuOTYgMS40IDEuNEwxMy40MiAxMmw0Ljk2IDQuOTUtMS40IDEuNEwxMiAxMy40MmwtNC45NSA0Ljk2LTEuNC0xLjRMMTAuNTggMTIgNS42MyA3LjA1bDEuNC0xLjR6Ii8+PC9zdmc+) center no-repeat}.gpf-btn-icon-add:after{height:2.5rem;-webkit-mask:url(data:image/png;base64,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) -51px center no-repeat;mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPwAAAAcCAYAAABF79LlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAyySURBVHic7Zx/bFXXfcA/33ufHZjtkKcNhkVVtqpVtGUszUhs3BEFJWo0KYRUCKMqUynY5t2HAZuxdRkqLM5Gl3bVTJ4JPN/nXyyVkDBpGCvTUKOkodmKYtpRJWukTKgr0jY7yeS3wGuKzLv3uz/uffbz8/v9nkFE7yMhP5977vkcR/7e7z3nexyoUaNGjRo1atSoUaPGHYzc7gnUqLEYRKPRVYZhHFfVRtd1u7u7u99bTF/btv5VyUDguOA2utD949F9i+orl8DtnkCNGouBYRg28ISIYJrmK8B9i+lzAqYt6BMgGLDovnIxyrnJtm21bVurPZlctHREtKUjcst8NT4RPJL2+XfvdJ+qfktV46r6YCXj1DJ8BukPskAgsKqzs/N/bud8apSHqraKyDmgEdi82D5RaVXRc0CjVNmnqt8C/tz/tgX4cbljFR3w0Wh0hWEYPcATqTbbti+LyLlAIDDQ0dHxYbmTyMYXvhJdkayf8Xx+CLZ0Ri6Lq+dmMAYuj/VU1XeriMViO1X1wcnJyV19fX1utj6qKrFYbAB4z7KsF2/xFO9obNteA7wkIleAzaFQ6KeL6WvbfnSNY7ovqeoVdd3Nl078SVV9qvrXzAU7VLjvVtTNtm23AyNAU44u11S1MxwOv1zJZFK0dL7Qjkpen6h0vjXWUxVfOouZ4f1gH8RbSg1PTk5amUHvB/tRYDegQE+1gr6/v39pQ0PD28Bn83Q7GQwGt23dutWp1NfW3r/UaQq8DZrbp5xcnWjedvp0+b7BwcE2EflL4I8WDK/6eDgcfrXcsbPR0nGkDYysPjH08beG91XFp6rPAn0ZzXtE5Fi5YxZcw/vBfgpoUtUzqjq7VhGRDSJyFrhbRMYHBwe3lDuRFH6wn8IL9jMqcz5V2YBwFrhbRcdbdwxU7LuVuK77eeb+m3c1Nze/qKqzD10/2I/hBTuAqOrvVMM9Pj5e39DQ8Ar5gx3g6Xg8vuAXuVTua++rd5rMV/IGO4Dw9NW7pyryiciPyBJ8AIZhfK2SsbNj5PS5jlTFp6oHWBjsAJtU9RlV/ZqqblfV9ar6G8WOmzfgo9HoCrzMLsAz4XB4czgc/mHqeigUuhAKhb4EHABEREZGR0eXFyvP5Atfia7wM7ugPDMx2rv50si+Wd+lsZ4LEyO9X1Lfp6IjD+wYKNt3q7Esaw+Qnq13xWKxWF9fn5GW2XelLqrq0NTU1N5quOPx+Bg5fkkzUdXOSn0NjcGifVTBB3wD+KeFQ+sXo9FoSxXGn49k94nwxQc7ByryqeqfAn+T4/LjwDeBvwXGgDeBD1T1h6r6VVU18087D7ZtHwa+rqpnwuFw3o0I27bPAptE5HAoFDqUr28uWjojh1G+DpyZGO3N63uoY+CsoJtE9fBbY/tK9h07dqxxyZIlC37+ZDJ5LfVZRO41TXMys09nZ+f1Un0p0tbne1JthmEMO44zIyLdaf2GpqamwrnW+aVg2/Zx0h4kRTBTV1f3qXL3ZVo6I8fR0nw3VT5V7r6MbdtJy7ICeSpH71iW9fvljJ2Nlo5IcmK0N5CrcqTwzqXR3rJ8qtoDRCqY3r/ixeF0touFXumf9L++UMgiIv0AqrqxpOmlo55PRQv6UDyfIWX5AoHAZDKZvJb5b55C9b1sfUZGRnLtLRRERDQUCvWQluld1+1axGBXSgt2gPqbN2++WY6vpSOiJQY7QH2daFk+n0SO9iv+1zW2bS+rYPwifXIFQGDN2lDZvnvLvC/FHwLfzZXps2b4XE9Ky7Ik/Xrm97n6FyLXk3JitFfSr2d+n6t/Mdi2fR2vZFMygUDg7kqyPHiZfmhoaEBV96S3u647/P777y/YzCuEbdvrVfU5EXm0knnlICEi5xOJxLb9+/f/CqC1I7Je0edgcXzAefO6s+3iac+XD9u2fw48APxfervruq11dXXTjuOMAesBgsFgoNINyZaOyM+dwJIHzOSN+T6R1jqS046as77V15sDpWxI+ns6MaCrkjkCO0TkRGZjrQ5/G0nfsEshIiWXXQYHB9uA74vI0qpMbCGNqrqloaFhGrBaOo60KXwfFs8HbEk2mdOAla/j+Ph4fTwez/b66riu+25XV1cCeNi2bRvYUmmw39feVw9k9TXeZb77xvGeBPDwQx0RW2BLqdUHEVFVtfBic3uWLq8C/+Z/rgOCwGeAdcBdaf1CwIkF4+eT27b9U+B+VX0kfbMuG9FodINhGD8ALluW9Qf5+uaipSPi+UQfSd+sy8a6riMbXNfzTYz2luy7XWt4WFB6y0bWkl0ubNt+g/knvRaLDy3LWtHSEbllvonR3hXFdPRf2dMz7ofBYLC5GuXFbKwN2csyMvyHq683N1dSXkzHfyX/e+CPMy5lLcup6jJgANjmN7nAp0Xkv9P75c3wIvI9Vb3fMIz9QN4A9PsAnMvXL69P9Xsqcr8gBX2uY+xHQMr07d69O+s6zEsEHqZpJioN7kyyBbuqDgEzIpJq62pubqavr6/YoF+TrVFEXr3nnns2xuPxparaJiLPA58vMNbGYDB4fuvWrY5t2+vxdoGL8qny6seJ+MYlwealhnOjTeB5tIBPZOPqayvPnz691fGWCVl9BTFN03ScebG2fHp6+u+AfeWMV4h655emw7xl8vJfNE5WzScijqp+FS+Lby2i/0equh34dbzDcQbejv5Yer+8m3aO4xzFO1TzlG3bf5FqzzxLH4vFDuBt8H1UV1d3tOifKgMzeddR4BrKUw91RGZ9mWfpW3dEDiCeb0albN+tJlewT01NhS3L2sv8kl1Xc3Oz3dfXV8zfO/xLlrZTiUTiqXg8fhV4W0TWJpPJhwuMc0FV743H45dt2/4ZXha/kHY9AaDIAp+InAoknKcamoJXzZs33haXtb92V6CgD9V7f9E0ebmlI/Iz1ey+YnBd95+zzKn32LFjZe3TFPSpmcVH74bu6vlExMHL8K8U2V+BMDDjNy3YAMyb4Xft2vXB4OBgp4iMA8/HYrF1wBFVL/b81/j9qvok4IrIjkqO2P7oO7s+aN0x0Kmi4wLPt3RG1qkrR/DP1q7rOrLBdYz96gW7C+y4k47Y2rb9YvpuPBC1LGu3iGhfXx+q2hOLxUzmdtW7Vq5cOUPuV/8UB/HOWK9MNZimebCxsfGoqqbaDgcCgZmsd6eNIyLpGfawYRiPua77GoB/XJWAKwcdQ+f5DJIHnSbzKLDSXyge/viGk9cncFDhTZlrOIwajyGeT3V2lz0vQ0NDa13XTdW+zwOPAvUAgUCgF69GXzVauyJr1SWr7+NfJavqE5Gkqn4ZOA1sAv6jQP//UtWX8Db9Ppd5vWD2CIfDL4tIO36mV9U3Zm/21uxPAh+pansoFDpT0k+ThbfGel4WtB0/04vM+VzX+EEqs6sh7ROjvRX7biUichnvQYWqDk1OTu7xn8qp6xoKhXYzl+lVRN4tNK5lWe+Ypvkw8B2/abqrq+uKqj6d0TWUb5xgMHgxs23ZsmUXgClVfd0wjG6Aiyf2vmOKM893cWT/FaAk36evNy/wrU785gVgCvT1gOF0Z7ltAY7jzFY6XNd9FtiRdrm3v7+/upuL7lxlxRV5FknzCb1t7dX1ichNvD/IWSUixRzbHfC/fmbBWMVKR0dHlyeTyR5VfQKvBAJwGW8NPWBZ1v8WO1YxPLBjYHk9bo+KzPMJnEsGbg78JPZnVfWlWOy/lrNte5eq/p5lWfOCPR1VFf9t4N8ty4qW64rFYsMZp+YOWJb1zQLzmzenYkurAC0dkWFg1qdw4NJob15fZom1lNJqitScDcN4bOfOna+n2gcHB1/zy5QnLcvK3Pwqm9k5q/HYxNje1+faX3gN5FGUkxNjvVXzlYOqXgRWishvp7cXXZbzX9UPAYfS6vBl7cYXg/+qfgg4lFaHXzRfilJ+wcscPwoQDodz9vEfBIVe4wuSSCT2NjQ0bMJb050IBoPfLuK2g3jlIBM4WYrPvO7sdZpMzyec+K1rzd++VOgm5SAi20FNpDQfwPj4uBmPxwFID3bw9hXwXrerVlFobx83r+IVbtKDHUCQUwqPIrekglGIIbIcz63V4T/B+IdkiiprpbAs6xuUuQb1D8nM+iaKuGdirLdsH0A8Hj/rf7yQ5fIpwAZWlTt+JlebJnP6koElp8zkjar6KuAU8FxmY1n/xxvLsmSxM2E6E6O9Us6rXo1PNsPDw5/F/wMdwzD+KvO6ZVkfVdPX1tk/60MX+n4Sq66vEkTkl8A/ZLbXMnyNO5ZkMrlcRKYNw2jduXPnf+boNiMi/1gNn6OyHJjGMFonhvfm9AFV8VWBscJdatSoUaNGjRo1atSocQfx/wldqBUwtlSMAAAAAElFTkSuQmCC) -51px center no-repeat;width:2.5rem}.GPlocationOriginLabel{display:none;pointer-events:none}[class^=GPlocationPoint-]{padding:0}[id^=GPlocationPoint_]{justify-content:left}.GPlocationStageFlexInput{flex-wrap:wrap;width:281px}.GPlocationStageAdd{flex-basis:65%;min-height:40px;padding:.25rem .75rem .25rem 2.5rem;text-align:left;width:0}.GPlocationOriginLabel{flex-basis:fit-content}.GPlocationOriginPointerImg{flex-basis:2.5em}.GPlocationStageFlexInput input{flex-basis:33%;flex-grow:1}.GPmeasureTooltip{background-color:var(--background-contrast-grey);opacity:.8;padding:.2rem .4rem}.gpf-btn-icon-area:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTcuOTkyIDE2LjM5MmEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2em0xLjQ3NyAzLjU5OC41My41MyAxLjA2Mi0xLjA2LS41My0uNTN6bS0yLjUzNy0yLjUzOCAyLjUzOCAyLjUzOCAxLjA2LTEuMDYtMi41MzgtMi41Mzh6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIwLjUzIDE5Ljk5LjUzLS41M0wyMCAxOC40bC0uNTMuNTN6bS0zLjU5OCAxLjQ3N2EuNzUuNzUgMCAwIDAgMS4wNiAxLjA2MXptMi41MzgtMi41MzctMi41MzggMi41MzcgMS4wNiAxLjA2MSAyLjUzOC0yLjUzOHpNMS40NyA1LjY3OGEuNzUuNzUgMCAwIDAgMS4wNiAxLjA2ek00LjczOSA0LjUzbC41My0uNTMtMS4wNi0xLjA2LS41MzEuNTN6TTIuNTMgNi43NCA0Ljc0IDQuNTMgMy42NzggMy40NyAxLjQ3IDUuNjc4eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im00LjczOSAzLjQ3LS41My0uNTNMMy4xNDggNGwuNTMuNTMxem0xLjE0NyAzLjI3YS43NS43NSAwIDAgMCAxLjA2MS0xLjA2MXpNMy42NzggNC41MyA1Ljg4NiA2Ljc0bDEuMDYxLTEuMDYxTDQuNzQgMy40N3oiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTQuMjA5IDUuMTA1djExLjg4YzAgMS4zOTMuOTQ2IDIuNDc3IDIuMTYxIDIuNDc3SDE5LjEyIi8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTE5LjY3IDEyLjgzNlY2LjA2NWMwLTEuMTYyLS43ODctMi4wNjUtMS44LTIuMDY1aC03LjAzNSIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBkPSJtMTYuMzU3IDExLjk4NC00LjEyMyA0LjA4Nk0xNi4yNzcgNy4zOTMgNy41MjIgMTYuMDdNMTEuNjQ1IDcuMzE0IDcuNTIyIDExLjQiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTcuOTkyIDE2LjM5MmEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2em0xLjQ3NyAzLjU5OC41My41MyAxLjA2Mi0xLjA2LS41My0uNTN6bS0yLjUzNy0yLjUzOCAyLjUzOCAyLjUzOCAxLjA2LTEuMDYtMi41MzgtMi41Mzh6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIwLjUzIDE5Ljk5LjUzLS41M0wyMCAxOC40bC0uNTMuNTN6bS0zLjU5OCAxLjQ3N2EuNzUuNzUgMCAwIDAgMS4wNiAxLjA2MXptMi41MzgtMi41MzctMi41MzggMi41MzcgMS4wNiAxLjA2MSAyLjUzOC0yLjUzOHpNMS40NyA1LjY3OGEuNzUuNzUgMCAwIDAgMS4wNiAxLjA2ek00LjczOSA0LjUzbC41My0uNTMtMS4wNi0xLjA2LS41MzEuNTN6TTIuNTMgNi43NCA0Ljc0IDQuNTMgMy42NzggMy40NyAxLjQ3IDUuNjc4eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im00LjczOSAzLjQ3LS41My0uNTNMMy4xNDggNGwuNTMuNTMxem0xLjE0NyAzLjI3YS43NS43NSAwIDAgMCAxLjA2MS0xLjA2MXpNMy42NzggNC41MyA1Ljg4NiA2Ljc0bDEuMDYxLTEuMDYxTDQuNzQgMy40N3oiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTQuMjA5IDUuMTA1djExLjg4YzAgMS4zOTMuOTQ2IDIuNDc3IDIuMTYxIDIuNDc3SDE5LjEyIi8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTE5LjY3IDEyLjgzNlY2LjA2NWMwLTEuMTYyLS43ODctMi4wNjUtMS44LTIuMDY1aC03LjAzNSIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBkPSJtMTYuMzU3IDExLjk4NC00LjEyMyA0LjA4Nk0xNi4yNzcgNy4zOTMgNy41MjIgMTYuMDdNMTEuNjQ1IDcuMzE0IDcuNTIyIDExLjQiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-length:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIxIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi44OTQgNi4xODdhLjUuNSAwIDAgMCAuNzA3LjcwN3ptMS40MTQtMS40MTRMNi44OTQgNi4xODdsLjcwNy43MDdMOS4wMTUgNS40OHpNOC45NzQgOC4yNjZhLjUuNSAwIDEgMCAuNzA3LjcwOHptMS40MTQtMS40MTRMOC45NzQgOC4yNjZsLjcwNy43MDggMS40MTQtMS40MTV6TTExLjA1MyAxMC4zNDZhLjUuNSAwIDEgMCAuNzA3LjcwN3ptMS40MTQtMS40MTQtMS40MTQgMS40MTQuNzA3LjcwNyAxLjQxNS0xLjQxNHpNMTMuMTMzIDEyLjQyNmEuNS41IDAgMSAwIC43MDcuNzA3em0xLjQxNC0xLjQxNC0xLjQxNCAxLjQxNC43MDcuNzA3IDEuNDE0LTEuNDE0eiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Im0xNi45OCAxMy40NDUtMS40MTQgMS40MTQiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im01LjUzNiAyIDE0LjE0MiAxNC4xNDItMy41MzYgMy41MzZMMiA1LjUzNnoiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIxIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi44OTQgNi4xODdhLjUuNSAwIDAgMCAuNzA3LjcwN3ptMS40MTQtMS40MTRMNi44OTQgNi4xODdsLjcwNy43MDdMOS4wMTUgNS40OHpNOC45NzQgOC4yNjZhLjUuNSAwIDEgMCAuNzA3LjcwOHptMS40MTQtMS40MTRMOC45NzQgOC4yNjZsLjcwNy43MDggMS40MTQtMS40MTV6TTExLjA1MyAxMC4zNDZhLjUuNSAwIDEgMCAuNzA3LjcwN3ptMS40MTQtMS40MTQtMS40MTQgMS40MTQuNzA3LjcwNyAxLjQxNS0xLjQxNHpNMTMuMTMzIDEyLjQyNmEuNS41IDAgMSAwIC43MDcuNzA3em0xLjQxNC0xLjQxNC0xLjQxNCAxLjQxNC43MDcuNzA3IDEuNDE0LTEuNDE0eiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Im0xNi45OCAxMy40NDUtMS40MTQgMS40MTQiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im01LjUzNiAyIDE0LjE0MiAxNC4xNDItMy41MzYgMy41MzZMMiA1LjUzNnoiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-azimuth:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIxIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xOC45NyAxMC4xOGMtLjM2IDAtLjY0LS4xNS0uODYtLjQ0cy0uMzMtLjcyLS4zMy0xLjI3YzAtLjYuMS0xLjE2LjMxLTEuNy4yLS41My40OC0xLjAxLjgzLTEuNDJhMy45IDMuOSAwIDAgMSAxLjE2LS45N2MuNDMtLjIzLjg3LS4zNSAxLjMyLS4zNS4yMyAwIC40NC4wMy42NC4wOC4yLjA2LjM4LjEzLjUzLjIzbC41OC0uMjZoLjI5bC0uNzggNC4zN2MtLjA3LjQzIDAgLjY1LjIyLjY1LjEzIDAgLjI3LS4wNy40My0uMjJzLjMxLS4zOS40Ny0uNzNsLjIxLjA4Yy0uNDkgMS4zMS0xLjEgMS45Ni0xLjg2IDEuOTZxLS41NTUgMC0uODEtLjM5Yy0uMTctLjI2LS4yMi0uNjMtLjE1LTEuMTJoLS4wM2MtLjM2LjUtLjcxLjg4LTEuMDUgMS4xM3MtLjcxLjM4LTEuMTEuMzh6bS4zMS0yLjM3YzAgLjQzLjA0Ljc1LjEzLjk2cy4yNS4zMS40OS4zMS40OC0uMTEuNzEtLjMzLjQ1LS40Ny42NC0uNzVsLjUzLTNjLS4xMS0uMTQtLjIzLS4yNS0uMzYtLjMyYTEgMSAwIDAgMC0uNDctLjExYy0uMzQgMC0uNjMuMTUtLjg4LjQ2cy0uNDUuNzEtLjU4IDEuMmMtLjE0LjQ5LS4yMSAxLjAyLS4yMSAxLjU3eiIvPjxwYXRoIGQ9Ik0yMC45IDE1LjcyaC01LjUyYy0uMDctMy4yNC0xLjUxLTYuMTUtMy43Ny04LjE3bDUuNDUtNi4yM0wxNS41NSAwIDEwIDYuMzVhMTEuMiAxMS4yIDAgMCAwLTUuOTItMS42OWgtMXYyaDFjMS42NyAwIDMuMjMuNDUgNC41OSAxLjIybC0zLjYxIDQuMTNjLS4zMS0uMDgtLjY0LS4xMy0uOTgtLjEzLTIuMjUgMC00LjA5IDEuODMtNC4wOSA0LjA5czEuODMgNC4wOSA0LjA5IDQuMDljMS42MiAwIDMuMDItLjk2IDMuNjgtMi4zM0gyMC45di0yLjAxTTEwLjMgOS4wNWE5LjI1IDkuMjUgMCAwIDEgMy4wOCA2LjY2SDguMTVhNC4wNyA0LjA3IDAgMCAwLTEuMjgtMi43M2wzLjQ0LTMuOTN6bS02LjIxIDljLTEuMTUgMC0yLjA5LS45NC0yLjA5LTIuMDlzLjk0LTIuMDkgMi4wOS0yLjA5IDIuMDkuOTQgMi4wOSAyLjA5LS45NCAyLjA5LTIuMDkgMi4wOSIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMjMuOTh2MjAuMDVIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIxIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xOC45NyAxMC4xOGMtLjM2IDAtLjY0LS4xNS0uODYtLjQ0cy0uMzMtLjcyLS4zMy0xLjI3YzAtLjYuMS0xLjE2LjMxLTEuNy4yLS41My40OC0xLjAxLjgzLTEuNDJhMy45IDMuOSAwIDAgMSAxLjE2LS45N2MuNDMtLjIzLjg3LS4zNSAxLjMyLS4zNS4yMyAwIC40NC4wMy42NC4wOC4yLjA2LjM4LjEzLjUzLjIzbC41OC0uMjZoLjI5bC0uNzggNC4zN2MtLjA3LjQzIDAgLjY1LjIyLjY1LjEzIDAgLjI3LS4wNy40My0uMjJzLjMxLS4zOS40Ny0uNzNsLjIxLjA4Yy0uNDkgMS4zMS0xLjEgMS45Ni0xLjg2IDEuOTZxLS41NTUgMC0uODEtLjM5Yy0uMTctLjI2LS4yMi0uNjMtLjE1LTEuMTJoLS4wM2MtLjM2LjUtLjcxLjg4LTEuMDUgMS4xM3MtLjcxLjM4LTEuMTEuMzh6bS4zMS0yLjM3YzAgLjQzLjA0Ljc1LjEzLjk2cy4yNS4zMS40OS4zMS40OC0uMTEuNzEtLjMzLjQ1LS40Ny42NC0uNzVsLjUzLTNjLS4xMS0uMTQtLjIzLS4yNS0uMzYtLjMyYTEgMSAwIDAgMC0uNDctLjExYy0uMzQgMC0uNjMuMTUtLjg4LjQ2cy0uNDUuNzEtLjU4IDEuMmMtLjE0LjQ5LS4yMSAxLjAyLS4yMSAxLjU3eiIvPjxwYXRoIGQ9Ik0yMC45IDE1LjcyaC01LjUyYy0uMDctMy4yNC0xLjUxLTYuMTUtMy43Ny04LjE3bDUuNDUtNi4yM0wxNS41NSAwIDEwIDYuMzVhMTEuMiAxMS4yIDAgMCAwLTUuOTItMS42OWgtMXYyaDFjMS42NyAwIDMuMjMuNDUgNC41OSAxLjIybC0zLjYxIDQuMTNjLS4zMS0uMDgtLjY0LS4xMy0uOTgtLjEzLTIuMjUgMC00LjA5IDEuODMtNC4wOSA0LjA5czEuODMgNC4wOSA0LjA5IDQuMDljMS42MiAwIDMuMDItLjk2IDMuNjgtMi4zM0gyMC45di0yLjAxTTEwLjMgOS4wNWE5LjI1IDkuMjUgMCAwIDEgMy4wOCA2LjY2SDguMTVhNC4wNyA0LjA3IDAgMCAwLTEuMjgtMi43M2wzLjQ0LTMuOTN6bS02LjIxIDljLTEuMTUgMC0yLjA5LS45NC0yLjA5LTIuMDlzLjk0LTIuMDkgMi4wOS0yLjA5IDIuMDkuOTQgMi4wOSAyLjA5LS45NCAyLjA5LTIuMDkgMi4wOSIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMjMuOTh2MjAuMDVIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-position:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNy40IDE1LjMzVjIuNDNsNC42OSAyLjM1djcuMDVoMS45OVY0LjcyTDE4IDMuMDR2LjE5aC0uMDF2OC42aDJWLjc2YzAtLjA4LS4wMS0uMTYtLjA1LS4yNGEuNS41IDAgMCAwLS4xNy0uMTguNi42IDAgMCAwLS4yMy0uMDhjLS4wOCAwLS4xNyAwLS4yNC4wNEwxMyAzIDcuMDEgMGwtNyAzdjE2LjYxYy0uMDEuMDggMCAuMTYuMDUuMjQuMDQuMDcuMS4xNC4xNi4xOHMuMTUuMDcuMjMuMDhjLjA4IDAgLjE3IDAgLjI0LS4wNGw2LjMtMi43LjQtLjE4di0xLjg2em0tMS45OS41NEwyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIxLjQyMiAxOC41OTUtNy43ODgtNS41MjRjLS4yNzItLjE4MS0uNjM0IDAtLjYzNC4zNjJsLjkwNiA5LjUxYzAgLjM2MS41NDMuNDUyLjcyNC4xOGwxLjQ1LTIuNTM1IDEuNDQ4IDIuNTM1Yy4xODEuMzYyLjYzNC41NDQuOTk2LjU0NC4xODEgMCAuMzYzLS4wOS41NDQtLjE4Mi41NDMtLjM2Mi43MjQtLjk5Ni40NTItMS41MzlsLTEuNDQ5LTIuNTM2aDIuOTg5Yy40NTMtLjA5LjYzNC0uNTQzLjM2Mi0uODE1Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNy40IDE1LjMzVjIuNDNsNC42OSAyLjM1djcuMDVoMS45OVY0LjcyTDE4IDMuMDR2LjE5aC0uMDF2OC42aDJWLjc2YzAtLjA4LS4wMS0uMTYtLjA1LS4yNGEuNS41IDAgMCAwLS4xNy0uMTguNi42IDAgMCAwLS4yMy0uMDhjLS4wOCAwLS4xNyAwLS4yNC4wNEwxMyAzIDcuMDEgMGwtNyAzdjE2LjYxYy0uMDEuMDggMCAuMTYuMDUuMjQuMDQuMDcuMS4xNC4xNi4xOHMuMTUuMDcuMjMuMDhjLjA4IDAgLjE3IDAgLjI0LS4wNGw2LjMtMi43LjQtLjE4di0xLjg2em0tMS45OS41NEwyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIxLjQyMiAxOC41OTUtNy43ODgtNS41MjRjLS4yNzItLjE4MS0uNjM0IDAtLjYzNC4zNjJsLjkwNiA5LjUxYzAgLjM2MS41NDMuNDUyLjcyNC4xOGwxLjQ1LTIuNTM1IDEuNDQ4IDIuNTM1Yy4xODEuMzYyLjYzNC41NDQuOTk2LjU0NC4xODEgMCAuMzYzLS4wOS41NDQtLjE4Mi41NDMtLjM2Mi43MjQtLjk5Ni40NTItMS41MzlsLTEuNDQ5LTIuNTM2aDIuOTg5Yy40NTMtLjA5LjYzNC0uNTQzLjM2Mi0uODE1Ii8+PC9zdmc+) center no-repeat}div[id^=GPmousePositionCoordinate-] input{color:inherit}div[id^=GPmousePositionAltitude-],div[id^=GPmousePositionCoordinate-]>div{display:flex;justify-content:space-between}div[id^=GPmousePositionCoordinate-] input[readonly]{font-size:1rem}.gpf-btn-icon-reverse:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI4Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi43NSAxLjAxSDQuODFMMy40MyAzLjA2IDIuMDUgMS4wMUguMTNsMi4yMyAzLjI1TDAgNy42OWgxLjkzbDEuNS0yLjI0IDEuNTIgMi4yNGgxLjkyTDQuNTEgNC4yNnpNMTIuNzQgMS4wMWwtMS44NCA0LjUtMS44My00LjVINy4ybDIuODEgNi42Ny0uMzcuODljLS4yOC42OC0uNjkuOS0xLjM1LjktLjI5IDAtLjYxLS4wNy0uODItLjE2djEuNDhjLjMyLjEzLjY4LjIxIDEuMTkuMjEgMS4yNyAwIDIuMDMtLjY5IDIuNDktMS43OUwxNC41MiAxaC0xLjc4ek00LjA4OCAxMS4wMThsLTItLjAxOGMtLjA0NSA0Ljk2IDMuNTk4IDkuMDkzIDguMzYyIDkuODE2YTguNCA4LjQgMCAwIDEtLjUxMS0yLjE0NWMtMy4zOTItLjg5LTUuODg0LTMuOTkzLTUuODUxLTcuNjUzTTIzLjg4IDIwLjAyYy4yMy0xLjE0LjExLTIuMzItLjM0LTMuMzlhNS45IDUuOSAwIDAgMC0yLjIxLTIuNjRjLS45OS0uNjUtMi4xNS0uOTktMy4zMy0uOTlzLTIuMzUuMzQtMy4zMy45OWMtLjk5LjY1LTEuNzYgMS41Ni0yLjIxIDIuNjRhNS42MyA1LjYzIDAgMCAwLS4zNCAzLjM5Yy4yMyAxLjE0LjggMi4xOSAxLjY0IDMuMDFMMTggMjcuMThsNC4yNC00LjE1Yy44NC0uODIgMS40MS0xLjg3IDEuNjQtMy4wMW0tMS45Ni0uMzhjLS4xNS43Ni0uNTQgMS40Ni0xLjA5IDIuMDFMMTggMjQuNDJsLTIuODMtMi43N2MtLjU2LS41NS0uOTQtMS4yNS0xLjEtMi4wMS0uMTUtLjc2LS4wOC0xLjU1LjIzLTIuMjYuMy0uNzIuODItMS4zMyAxLjQ3LTEuNzZhNC4wNjQgNC4wNjQgMCAwIDEgNC40NCAwIDMuODkzIDMuODkzIDAgMCAxIDEuNyA0LjAyeiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xOCAxNy4yOGMtLjY1IDAtMS4xNy41My0xLjE3IDEuMTdzLjUzIDEuMTcgMS4xNyAxLjE3IDEuMTctLjUzIDEuMTctMS4xNy0uNTMtMS4xNy0xLjE3LTEuMTciLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI4Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi43NSAxLjAxSDQuODFMMy40MyAzLjA2IDIuMDUgMS4wMUguMTNsMi4yMyAzLjI1TDAgNy42OWgxLjkzbDEuNS0yLjI0IDEuNTIgMi4yNGgxLjkyTDQuNTEgNC4yNnpNMTIuNzQgMS4wMWwtMS44NCA0LjUtMS44My00LjVINy4ybDIuODEgNi42Ny0uMzcuODljLS4yOC42OC0uNjkuOS0xLjM1LjktLjI5IDAtLjYxLS4wNy0uODItLjE2djEuNDhjLjMyLjEzLjY4LjIxIDEuMTkuMjEgMS4yNyAwIDIuMDMtLjY5IDIuNDktMS43OUwxNC41MiAxaC0xLjc4ek00LjA4OCAxMS4wMThsLTItLjAxOGMtLjA0NSA0Ljk2IDMuNTk4IDkuMDkzIDguMzYyIDkuODE2YTguNCA4LjQgMCAwIDEtLjUxMS0yLjE0NWMtMy4zOTItLjg5LTUuODg0LTMuOTkzLTUuODUxLTcuNjUzTTIzLjg4IDIwLjAyYy4yMy0xLjE0LjExLTIuMzItLjM0LTMuMzlhNS45IDUuOSAwIDAgMC0yLjIxLTIuNjRjLS45OS0uNjUtMi4xNS0uOTktMy4zMy0uOTlzLTIuMzUuMzQtMy4zMy45OWMtLjk5LjY1LTEuNzYgMS41Ni0yLjIxIDIuNjRhNS42MyA1LjYzIDAgMCAwLS4zNCAzLjM5Yy4yMyAxLjE0LjggMi4xOSAxLjY0IDMuMDFMMTggMjcuMThsNC4yNC00LjE1Yy44NC0uODIgMS40MS0xLjg3IDEuNjQtMy4wMW0tMS45Ni0uMzhjLS4xNS43Ni0uNTQgMS40Ni0xLjA5IDIuMDFMMTggMjQuNDJsLTIuODMtMi43N2MtLjU2LS41NS0uOTQtMS4yNS0xLjEtMi4wMS0uMTUtLjc2LS4wOC0xLjU1LjIzLTIuMjYuMy0uNzIuODItMS4zMyAxLjQ3LTEuNzZhNC4wNjQgNC4wNjQgMCAwIDEgNC40NCAwIDMuODkzIDMuODkzIDAgMCAxIDEuNyA0LjAyeiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xOCAxNy4yOGMtLjY1IDAtMS4xNy41My0xLjE3IDEuMTdzLjUzIDEuMTcgMS4xNyAxLjE3IDEuMTctLjUzIDEuMTctMS4xNy0uNTMtMS4xNy0xLjE3LTEuMTciLz48L3N2Zz4=) center no-repeat}.gpf-flex-reverse{align-items:flex-start;display:flex;flex-direction:column;justify-content:space-evenly}.gpf-panel-reverse{width:100%}.gpf-btn-icon-route:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE1Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMi43IDQuMzk5QTEuNyAxLjcgMCAxIDEgMi43IDFhMS43IDEuNyAwIDAgMSAwIDMuMzk5WiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTIuNyA0Ljk2djUuNjY4YTIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0IDIuOTc0IDIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0LTIuOTc0VjQuODA3YTIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0LTIuOTc0IDIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0IDIuOTc0djUuMzk2Ii8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im0xMi4xOTIgOC45NDggMi40MDQgMi40MDNNMTQuNTk3IDExLjM1MSAxNyA4Ljk0OCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE1Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMi43IDQuMzk5QTEuNyAxLjcgMCAxIDEgMi43IDFhMS43IDEuNyAwIDAgMSAwIDMuMzk5WiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTIuNyA0Ljk2djUuNjY4YTIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0IDIuOTc0IDIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0LTIuOTc0VjQuODA3YTIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0LTIuOTc0IDIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0IDIuOTc0djUuMzk2Ii8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im0xMi4xOTIgOC45NDggMi40MDQgMi40MDNNMTQuNTk3IDExLjM1MSAxNyA4Ljk0OCIvPjwvc3ZnPg==) center no-repeat}.GProuteFormMini{max-height:78px}.GProuteFormMini .GPelementShow{color:var(--grey-200-850)}.GProuteModeLabel{margin-bottom:.5rem}[id^=GProuteForm-] p.gpf-label{margin-bottom:.2rem;margin-top:0}[id^=GProuteForm-]>.GPpanelFooter{position:unset}[id^=GProuteSubmit-]{width:80%}[id^=GProuteForm-]>[class^=GPlocationPoint-]{margin-top:0}[id^=GProuteForm-]>p.gpf-label{margin-top:1rem}[id^=GProuteForm-].GProuteFormMini>p.gpf-label{margin-top:0}[id^=GProuteForm-]>p.gpf-label~p.gpf-label{margin-top:.5rem}button[id^=GProuteReset-],div[id^=GProuteResultsNew-]{min-width:2.5em}div[id^=GProuteResultsValueDist],div[id^=GProuteResultsValueTime]{color:var(--text-action-high-blue-france);font-weight:700}.GProuteResultsShowDetailsDiv{justify-content:left}div:has(input[id^=GProuteResultsShowDetails])+div[id^=GProuteResultsDetails-]{max-height:0;opacity:0;overflow:hidden}div:has(input[id^=GProuteResultsShowDetails]:checked)+div[id^=GProuteResultsDetails-]{max-height:200px;opacity:1;overflow-y:scroll}div[id^=GProuteResultsDetails-]{display:grid;gap:.5rem 5px;grid-template-columns:30px 1fr;max-width:350px;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s}.GProuteResultsDetailsInstruction,.GProuteResultsDetailsNumber{display:inline-block}.GProuteResultsDetailsNumber{font-weight:700;text-align:right;vertical-align:top}.GProuteExclusionsOptions{color:var(--text-label-grey);gap:.5rem}@media (max-width:576px){.gpf-mobile-fullscreen div[id^=GProuteResultsDetails-]{max-width:unset}}.gpf-widget-padding{padding-bottom:5px;padding-top:5px}.gpf-widget-color{background-color:var(--background-default-grey)}.GPlabelTitle,.gpf-panel__items_searchengine{border-bottom:1px solid var(--grey-900-175);color:var(--text-action-high-blue-france);padding:12px}.gpf-panel__items.GPautoCompleteProposal{box-sizing:border-box;height:45px}.GPlabelTitle{background-color:var(--background-open-blue-france);font-size:1em}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{max-height:unset}input[name^=inputSex].gpf-input,select[name^=inputSex].gpf-select{padding:unset}button[id^=GPsearchInputReset]{height:40px;width:40px}[id^=GPshowSearchDiv]{flex-direction:row-reverse}[id^=GPsearchEngine-]{flex-direction:column}[id^=GPsearchEngine-].gpf-widget-padding{align-items:center}div.GPbuttonsContainer>button{width:40px}.GPsearchFirstLineWrapper{height:40px}.gpf-widget-padding>.GPsearchFirstLineWrapper{margin:.5rem 0}.GPbuttonsContainer{height:56px;padding-left:10px}.GPsearchRadioContainer{background-color:var(--background-default-grey);display:flex;flex-direction:row;gap:1rem;max-height:0;overflow:clip;transition:max-height .3s;white-space:nowrap}[id^=GPsearchEngine-]:focus-within>.GPsearchRadioContainer,[id^=GPsearchEngine-]:has([id^=GPshowSearchByCoordinate-][aria-pressed=true])>.GPsearchRadioContainer,[id^=GPsearchEngine-]:hover>.GPsearchRadioContainer{max-height:3rem}.GPsearchRadioElements{display:flex;flex-direction:row;gap:1rem}.GPshowAdvancedSearch{align-items:center;color:var(--text-action-high-blue-france);cursor:pointer;display:flex;text-decoration:underline}.gpf-btn-icon-search{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZjVmNWZlIiBkPSJtMTguMDMxIDE2LjYxNyA0LjI4MyA0LjI4Mi0xLjQxNSAxLjQxNS00LjI4Mi00LjI4M0E4Ljk2IDguOTYgMCAwIDEgMTEgMjBjLTQuOTY4IDAtOS00LjAzMi05LTlzNC4wMzItOSA5LTkgOSA0LjAzMiA5IDlhOC45NiA4Ljk2IDAgMCAxLTEuOTY5IDUuNjE3bS0yLjAwNi0uNzQyQTYuOTggNi45OCAwIDAgMCAxOCAxMWMwLTMuODY4LTMuMTMzLTctNy03cy03IDMuMTMyLTcgNyAzLjEzMiA3IDcgN2E2Ljk4IDYuOTggMCAwIDAgNC44NzUtMS45NzV6Ii8+PC9zdmc+);background-position:50%;background-repeat:no-repeat;width:40px}form[id^=GPsearchInput-]{margin-left:8px;width:300px}button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]{border:none;max-width:300px}button[id^=GPshowSearchEnginePicto-]{border-radius:0 .25rem 0 0}.gpf-btn-icon-search-advanced:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLjIyNyAxMS4zMzNhNi43IDYuNyAwIDAgMS0uNjUyLTEuNTUgMiAyIDAgMCAwIC4wMDEtMy41NjUgNi42NiA2LjY2IDAgMCAxIDEuNjY3LTIuODkxIDIgMiAwIDAgMCAzLjA4OC0xLjc4MyA2LjY2IDYuNjYgMCAwIDEgMy4zMzguMDAxIDIgMiAwIDAgMCAzLjA4OCAxLjc4MmMuMzg2LjM5My43MjguODQgMS4wMTYgMS4zNC4yODkuNDk5LjUwNSAxLjAyLjY1MiAxLjU1YTIgMiAwIDAgMC0uMDAxIDMuNTY1IDYuNjYgNi42NiAwIDAgMS0xLjY2NyAyLjg5MSAyIDIgMCAwIDAtMy4wODggMS43ODMgNi42NiA2LjY2IDAgMCAxLTMuMzM4LS4wMDEgMiAyIDAgMCAwLTMuMDg4LTEuNzgyIDYuNyA2LjcgMCAwIDEtMS4wMTYtMS4zNE02IDExLjQ2NGEzLjMzIDMuMzMgMCAwIDEgMS41IDEuODQ3cS41LjA0NyAxIDBjLjI1NS0uNzguNzktMS40MzcgMS41LTEuODQ2YTMuMzMgMy4zMyAwIDAgMSAyLjM1LS4zNzdxLjI5LS40MS40OTktLjg2NUEzLjMzIDMuMzMgMCAwIDEgMTIgOGMwLS44NC4zMTMtMS42MjUuODQ5LTIuMjIzYTUuNCA1LjQgMCAwIDAtLjUtLjg2NUEzLjMzIDMuMzMgMCAwIDEgOC41IDIuNjg5YTUuMyA1LjMgMCAwIDAtMSAwQTMuMzMgMy4zMyAwIDAgMSA2IDQuNTM1Yy0uNzEuNDExLTEuNTQ3LjU0NS0yLjM1LjM3N3EtLjI5LjQxLS40OTkuODY1QzMuNjk4IDYuMzg4IDQuMDAxIDcuMTggNCA4YzAgLjg0LS4zMTMgMS42MjUtLjg0OSAyLjIyM3EuMjEuNDU2LjUuODY1QTMuMzMgMy4zMyAwIDAgMSA2IDExLjQ2NE04IDEwYTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNG0wLTEuMzMzYS42NjcuNjY3IDAgMSAwIDAtMS4zMzQuNjY3LjY2NyAwIDAgMCAwIDEuMzM0IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLjIyNyAxMS4zMzNhNi43IDYuNyAwIDAgMS0uNjUyLTEuNTUgMiAyIDAgMCAwIC4wMDEtMy41NjUgNi42NiA2LjY2IDAgMCAxIDEuNjY3LTIuODkxIDIgMiAwIDAgMCAzLjA4OC0xLjc4MyA2LjY2IDYuNjYgMCAwIDEgMy4zMzguMDAxIDIgMiAwIDAgMCAzLjA4OCAxLjc4MmMuMzg2LjM5My43MjguODQgMS4wMTYgMS4zNC4yODkuNDk5LjUwNSAxLjAyLjY1MiAxLjU1YTIgMiAwIDAgMC0uMDAxIDMuNTY1IDYuNjYgNi42NiAwIDAgMS0xLjY2NyAyLjg5MSAyIDIgMCAwIDAtMy4wODggMS43ODMgNi42NiA2LjY2IDAgMCAxLTMuMzM4LS4wMDEgMiAyIDAgMCAwLTMuMDg4LTEuNzgyIDYuNyA2LjcgMCAwIDEtMS4wMTYtMS4zNE02IDExLjQ2NGEzLjMzIDMuMzMgMCAwIDEgMS41IDEuODQ3cS41LjA0NyAxIDBjLjI1NS0uNzguNzktMS40MzcgMS41LTEuODQ2YTMuMzMgMy4zMyAwIDAgMSAyLjM1LS4zNzdxLjI5LS40MS40OTktLjg2NUEzLjMzIDMuMzMgMCAwIDEgMTIgOGMwLS44NC4zMTMtMS42MjUuODQ5LTIuMjIzYTUuNCA1LjQgMCAwIDAtLjUtLjg2NUEzLjMzIDMuMzMgMCAwIDEgOC41IDIuNjg5YTUuMyA1LjMgMCAwIDAtMSAwQTMuMzMgMy4zMyAwIDAgMSA2IDQuNTM1Yy0uNzEuNDExLTEuNTQ3LjU0NS0yLjM1LjM3N3EtLjI5LjQxLS40OTkuODY1QzMuNjk4IDYuMzg4IDQuMDAxIDcuMTggNCA4YzAgLjg0LS4zMTMgMS42MjUtLjg0OSAyLjIyM3EuMjEuNDU2LjUuODY1QTMuMzMgMy4zMyAwIDAgMSA2IDExLjQ2NE04IDEwYTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNG0wLTEuMzMzYS42NjcuNjY3IDAgMSAwIDAtMS4zMzQuNjY3LjY2NyAwIDAgMCAwIDEuMzM0IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-search-geolocate:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE5IDIwIj48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOS41IDE2LjI5MmE2LjI5MiA2LjI5MiAwIDEgMCAwLTEyLjU4NCA2LjI5MiA2LjI5MiAwIDAgMCAwIDEyLjU4NFoiLz48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xIDEwaDIuMjA4TTE1Ljc5MiAxMEgxOE05LjUgMS41djIuMjA4TTkuNSAxNi4yOTJWMTguNSIvPjxwYXRoIGZpbGw9IiMxMDEwOTIiIGQ9Ik05LjUgMTEuMTA0YTEuMTA0IDEuMTA0IDAgMSAwIDAtMi4yMDggMS4xMDQgMS4xMDQgMCAwIDAgMCAyLjIwOCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE5IDIwIj48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOS41IDE2LjI5MmE2LjI5MiA2LjI5MiAwIDEgMCAwLTEyLjU4NCA2LjI5MiA2LjI5MiAwIDAgMCAwIDEyLjU4NFoiLz48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xIDEwaDIuMjA4TTE1Ljc5MiAxMEgxOE05LjUgMS41djIuMjA4TTkuNSAxNi4yOTJWMTguNSIvPjxwYXRoIGZpbGw9IiMxMDEwOTIiIGQ9Ik05LjUgMTEuMTA0YTEuMTA0IDEuMTA0IDAgMSAwIDAtMi4yMDggMS4xMDQgMS4xMDQgMCAwIDAgMCAyLjIwOCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-icon-search-coordinate:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMTAxMDkyIiBkPSJNOS43MDIgNC44NjhIOC42NWMtLjQ5MSAwLS42OS0uMzUtLjQ1Ni0uNzcxQTI3MyAyNzMgMCAwIDEgMTAuMDA2Ljk2NGMuMjM0LS4zOTcuNjMxLS4zOTcuODY1LjAxMmE0MDkgNDA5IDAgMCAxIDEuNzY1IDMuMDVjLjI5Mi41MTUuMDkzLjgzLS41MDMuODQyaC0uOTdjMCAuMTQtLjAxMi4yMzQtLjAxMi4zNHY2LjEzNmMwIC4xNC4wODIuMzM5LjE4Ny40MiAyLjAxIDEuNDI3IDQuMDMzIDIuODQxIDYuMDU1IDQuMjU2LjAyNC4wMTEuMDU5LjAyMy4xMDUuMDQ2LjIxLS4yOC40MjEtLjU2LjYzMi0uODMuMzI3LS40Mi43MTMtLjM4NS45MTEuMTA2LjQ2OCAxLjA3NS45MjQgMi4xNjIgMS4zOCAzLjIzNy4yMS40OTEtLjAxMi43OTUtLjU1LjczN2EzNDcgMzQ3IDAgMCAxLTMuNDcxLS4zOTdjLS41ODUtLjA3LS43MjUtLjQzMy0uMzYzLS45bC40OTEtLjY2N2MuMDEyLS4wMTIuMDEyLS4wMzUuMDQ3LS4xMDVhMjI1IDIyNSAwIDAgMS0xLjExLS43OTVjLTEuNTktMS4xMjItMy4xOTEtMi4yMzMtNC43ODEtMy4zNTUtLjE5OS0uMTQtLjM0LS4xNjMtLjU1IDBhMTY3MiAxNjcyIDAgMCAxLTUuNjU3IDMuOTg2Yy0uMDQ3LjAzNS0uMDgyLjA1OS0uMTQuMTA2LjIyMi4zMDMuNDU1LjU4NC42NjYuODg4LjI5Mi40MDkuMTUyLjc3MS0uMzYyLjgzLTEuMTkzLjE1Mi0yLjM5Ny4yOTItMy41ODkuNDItLjQ0NC4wNDctLjY2Ni0uMjY4LS40OTEtLjcuMzg2LS45MjQuNzgzLTEuODQ4IDEuMTgtMi43NzEuMDgyLS4xODcuMTUzLS4zNzQuMjM0LS41NS4yLS40Mi41NzMtLjQ2Ny44NzctLjEwNWwuNTYxLjczN2MuMDEyLjAxMS4wMzUuMDIzLjA4Mi4wNDcuNjY2LS40NjggMS4zMzMtLjkzNiAyLjAxLTEuNDE1IDEuMjk4LS45MTIgMi41OTUtMS44MzUgMy45MDUtMi43MzUuMjIyLS4xNTIuMjkyLS4zMTYuMjkyLS41NzNWNC44NTd6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMTAxMDkyIiBkPSJNOS43MDIgNC44NjhIOC42NWMtLjQ5MSAwLS42OS0uMzUtLjQ1Ni0uNzcxQTI3MyAyNzMgMCAwIDEgMTAuMDA2Ljk2NGMuMjM0LS4zOTcuNjMxLS4zOTcuODY1LjAxMmE0MDkgNDA5IDAgMCAxIDEuNzY1IDMuMDVjLjI5Mi41MTUuMDkzLjgzLS41MDMuODQyaC0uOTdjMCAuMTQtLjAxMi4yMzQtLjAxMi4zNHY2LjEzNmMwIC4xNC4wODIuMzM5LjE4Ny40MiAyLjAxIDEuNDI3IDQuMDMzIDIuODQxIDYuMDU1IDQuMjU2LjAyNC4wMTEuMDU5LjAyMy4xMDUuMDQ2LjIxLS4yOC40MjEtLjU2LjYzMi0uODMuMzI3LS40Mi43MTMtLjM4NS45MTEuMTA2LjQ2OCAxLjA3NS45MjQgMi4xNjIgMS4zOCAzLjIzNy4yMS40OTEtLjAxMi43OTUtLjU1LjczN2EzNDcgMzQ3IDAgMCAxLTMuNDcxLS4zOTdjLS41ODUtLjA3LS43MjUtLjQzMy0uMzYzLS45bC40OTEtLjY2N2MuMDEyLS4wMTIuMDEyLS4wMzUuMDQ3LS4xMDVhMjI1IDIyNSAwIDAgMS0xLjExLS43OTVjLTEuNTktMS4xMjItMy4xOTEtMi4yMzMtNC43ODEtMy4zNTUtLjE5OS0uMTQtLjM0LS4xNjMtLjU1IDBhMTY3MiAxNjcyIDAgMCAxLTUuNjU3IDMuOTg2Yy0uMDQ3LjAzNS0uMDgyLjA1OS0uMTQuMTA2LjIyMi4zMDMuNDU1LjU4NC42NjYuODg4LjI5Mi40MDkuMTUyLjc3MS0uMzYyLjgzLTEuMTkzLjE1Mi0yLjM5Ny4yOTItMy41ODkuNDItLjQ0NC4wNDctLjY2Ni0uMjY4LS40OTEtLjcuMzg2LS45MjQuNzgzLTEuODQ4IDEuMTgtMi43NzEuMDgyLS4xODcuMTUzLS4zNzQuMjM0LS41NS4yLS40Mi41NzMtLjQ2Ny44NzctLjEwNWwuNTYxLjczN2MuMDEyLjAxMS4wMzUuMDIzLjA4Mi4wNDcuNjY2LS40NjggMS4zMzMtLjkzNiAyLjAxLTEuNDE1IDEuMjk4LS45MTIgMi41OTUtMS44MzUgMy45MDUtMi43MzUuMjIyLS4xNTIuMjkyLS4zMTYuMjkyLS41NzNWNC44NTd6Ii8+PC9zdmc+) center no-repeat}.gpf-btn-icon-search-reset{background-position:-25px}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{position:absolute;top:66px;width:inherit}[id^=GPautocompleteResults-]{border:1px solid var(--background-open-blue-france)}dialog[id^=GPgeocodeResultsList],div[id^=GPautoCompleteList]{background-color:var(--background-default-grey);height:fit-content;max-height:unset;position:absolute;width:320px}div[id^=GPautoCompleteList]{margin-left:2px;top:42px}.position-container-bottom-left [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-bottom-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-left [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList]{margin-left:8px;position:relative;top:unset;width:340px}.position-container-bottom-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList]{margin-right:10px}.gpf-widget-padding>div[id^=GPautoCompleteList]{margin:0;top:100%;width:100%}dialog[id^=GPgeocodeResultsList]{border-radius:4px;overflow:hidden;position:absolute;top:55px}div[id^=GPgeocodeResults-]{background-color:var(--background-default-grey);max-height:240px;overflow-y:auto;position:relative;width:100%}[id^=GPautocompleteResultsLocation],[id^=GPautocompleteResultsSuggest]{height:225px}@media (max-width:576px){.gpf-widget-padding>.GPsearchFirstLineWrapper{flex-direction:column;height:fit-content}.GPsearchRadioContainer{align-items:center;flex-direction:column}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{margin-left:unset;position:relative;top:unset}.GPsearchRadioContainer{gap:0;margin:0 8px}form[id^=GPsearchInput-]{margin-left:0}[id^=GPsearchEngine-]:focus-within>.GPsearchRadioContainer,[id^=GPsearchEngine-]:has([id^=GPshowSearchByCoordinate-][aria-pressed=true])>.GPsearchRadioContainer,[id^=GPsearchEngine-]:hover>.GPsearchRadioContainer{max-height:4rem}}.gpf-btn-icon-toolbox{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAlqAAAJagFGUcfpAAAAB3RJTUUH4AsKDCgkqrnTSAAAAw1JREFUSMe9ll2IlVUUhp9vnEintH+FulAyI+uihClKjSZtQJAJrRnDoKt+oCIIjSIrDCokKXQiCqkuTMFAJtQLCwItMsQbURmjiRIK+pmSoSjJ/JmnC98je6ZzjmVMCzbnO/vstd691nrf9R0YA1NRn2SsTX1E/UM9vVc1OdwC3A7cBLQD1wE/Al8AA0BfVVXf1vFbAmwCjgPjq+oUREsDkBuA3UBfwL4EXgS2AgJLgIPqw2pV+HUCG4B9/yTtF9Rj6pvqBeo4db7apU5N/VGXqofVHeo09Ub1N3Wdeo/6Z1m60SAL1KPqrQnWqR5Qt6pvqYfU1WqbWqnvqt+p89Sf1T61pSmQOkH9Wl2ZLDaru9T2gLapH6mvB6RXHVRvU79Rd6rnqteoH6vHGwEtV7/K4ZXq+qJME9VP1JfzfZU6lMwPqnvVSfltkvpMyl8X6L3ccmIyayuAdqjP5flZ9deA7M7lpqjjC5+eZkAH1AfT5LVxaFUfV39JoGXq72qHul39Qb0ypX5fvaIRUEnv6dHIZGAwe28Ac4DngQeAl4DFeZ4NLAAOAb3ZP1nEG6HREmgAmAEcBmYCTwFTgaXAEPAK0AMsBO4G7gT2A08Aj9YKM+qzbul61Q0hQ7+6L43tCVW71RXqCXVRUaJhdaOnbHIY2d2Mdd3q96F5e0TYFV3dl/4Nq/cHZE7m2avqLQXQeTlzohFQm/q5+k4C3ZFAD6mL4/h0frs6U2FzMpgdoEujq371ZCMg1GvDqjXqkTCuI1mtyZnLQv9dYWItO9VLwsC7GgIVYPfGaYU6K5rZmJtPUPeoAwla85lbALWcEagA61Svyoj5QD0nAbaoP0U71AJFvKoX50J/A2odDVRVFWo/8Fk00p13y2tAJzAv+6cvVmjGYo3QUWudjC4EPgSORjNHgGXAY3kfzcoqbcaZ9NM6eoID24CLMhGGgA5geabFzVn1bBAYBs4HLm/Wm3HqttB2ZtHof7va1U/Ts7oZvQ10AWuB67PO1vYAc+tls9qxsZETtinf/6PV/gX9b/YXjLd1o+WqCcMAAAAASUVORK5CYII=);background-position:3px;background-repeat:no-repeat}.gpf-btn-icon-zoom-in{height:inherit;width:inherit}.gpf-btn-icon-zoom-in:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwTTEyIDd2MTAiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwTTEyIDd2MTAiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41Ii8+PC9zdmc+) center no-repeat}.gpf-btn-icon-zoom-out{height:inherit;width:inherit}.gpf-btn-icon-zoom-out:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwIi8+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAuNzUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwIi8+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAuNzUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIvPjwvc3ZnPg==) center no-repeat}.ol-custom-full-screen button{background-position:50%;background-repeat:no-repeat;height:40px;width:40px}.ol-custom-full-screen button.ol-custom-full-screen-false:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuMTI1IDIuMjVhLjc1Ljc1IDAgMCAwIDAgMS41em00LjM3NSAxLjVoLjc1di0xLjVoLS43NXptLTQuMzc1IDBIMjAuNXYtMS41aC00LjM3NXoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjEuMjUgM3YtLjc1aC0xLjVWM3ptLTEuNSA0LjM3NWEuNzUuNzUgMCAwIDAgMS41IDB6bTAtNC4zNzV2NC4zNzVoMS41VjN6TTcuMzc1IDIxLjI1YS43NS43NSAwIDAgMCAwLTEuNXpNMyAxOS43NWgtLjc1djEuNUgzem00LjM3NSAwSDN2MS41aDQuMzc1eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0yLjI1IDIwLjV2Ljc1aDEuNXYtLjc1em0xLjUtNC4zNzVhLjc1Ljc1IDAgMCAwLTEuNSAwem0wIDQuMzc1di00LjM3NWgtMS41VjIwLjV6TTIwLjIxMiA0LjM0OWwuNTMtLjUzLTEuMDYtMS4wNjEtLjUzMS41M3ptLTYuNzE4IDQuNTk2YS43NS43NSAwIDEgMCAxLjA2IDEuMDZ6bTUuNjU3LTUuNjU3LTUuNjU3IDUuNjU3IDEuMDYgMS4wNiA1LjY1OC01LjY1NnoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNOS45OTkgMTQuNTYyYS43NS43NSAwIDEgMC0xLjA2LTEuMDZ6bS02LjcxOCA0LjU5Ni0uNTMuNTMgMS4wNiAxLjA2MS41MzEtLjUzem01LjY1Ny01LjY1Ny01LjY1NyA1LjY1NyAxLjA2MSAxLjA2TDEwIDE0LjU2M3oiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuMTI1IDIuMjVhLjc1Ljc1IDAgMCAwIDAgMS41em00LjM3NSAxLjVoLjc1di0xLjVoLS43NXptLTQuMzc1IDBIMjAuNXYtMS41aC00LjM3NXoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjEuMjUgM3YtLjc1aC0xLjVWM3ptLTEuNSA0LjM3NWEuNzUuNzUgMCAwIDAgMS41IDB6bTAtNC4zNzV2NC4zNzVoMS41VjN6TTcuMzc1IDIxLjI1YS43NS43NSAwIDAgMCAwLTEuNXpNMyAxOS43NWgtLjc1djEuNUgzem00LjM3NSAwSDN2MS41aDQuMzc1eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0yLjI1IDIwLjV2Ljc1aDEuNXYtLjc1em0xLjUtNC4zNzVhLjc1Ljc1IDAgMCAwLTEuNSAwem0wIDQuMzc1di00LjM3NWgtMS41VjIwLjV6TTIwLjIxMiA0LjM0OWwuNTMtLjUzLTEuMDYtMS4wNjEtLjUzMS41M3ptLTYuNzE4IDQuNTk2YS43NS43NSAwIDEgMCAxLjA2IDEuMDZ6bTUuNjU3LTUuNjU3LTUuNjU3IDUuNjU3IDEuMDYgMS4wNiA1LjY1OC01LjY1NnoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNOS45OTkgMTQuNTYyYS43NS43NSAwIDEgMC0xLjA2LTEuMDZ6bS02LjcxOCA0LjU5Ni0uNTMuNTMgMS4wNiAxLjA2MS41MzEtLjUzem01LjY1Ny01LjY1Ny01LjY1NyA1LjY1NyAxLjA2MSAxLjA2TDEwIDE0LjU2M3oiLz48L3N2Zz4=) center no-repeat}.ol-custom-full-screen button.ol-custom-full-screen-true:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTMuNzczIDEwLjk2OGg0LjM4Yy40MSAwIC43NS0uMzQuNzUtLjc1cy0uMzQtLjc1LS43NS0uNzVoLTIuNTZsNS4xOS01LjE5Yy4yOS0uMjkuMjktLjc3IDAtMS4wNmEuNzU0Ljc1NCAwIDAgMC0xLjA2IDBsLTUuMiA1LjJ2LTIuNTZjMC0uNDEtLjM0LS43NS0uNzUtLjc1cy0uNzUuMzQtLjc1Ljc1djUuMTF6TTQuMjc4IDIwLjc4M2w1LjE5LTUuMTl2Mi41NmMwIC40MS4zNC43NS43NS43NXMuNzUtLjM0Ljc1LS43NXYtNS4xMmgtNS4xMmMtLjQxIDAtLjc1LjM0LS43NS43NXMuMzQuNzUuNzUuNzVoMi41NmwtNS4xOSA1LjE5Yy0uMjkuMjktLjI5Ljc3IDAgMS4wNnMuNzcuMjkgMS4wNiAwIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTMuNzczIDEwLjk2OGg0LjM4Yy40MSAwIC43NS0uMzQuNzUtLjc1cy0uMzQtLjc1LS43NS0uNzVoLTIuNTZsNS4xOS01LjE5Yy4yOS0uMjkuMjktLjc3IDAtMS4wNmEuNzU0Ljc1NCAwIDAgMC0xLjA2IDBsLTUuMiA1LjJ2LTIuNTZjMC0uNDEtLjM0LS43NS0uNzUtLjc1cy0uNzUuMzQtLjc1Ljc1djUuMTF6TTQuMjc4IDIwLjc4M2w1LjE5LTUuMTl2Mi41NmMwIC40MS4zNC43NS43NS43NXMuNzUtLjM0Ljc1LS43NXYtNS4xMmgtNS4xMmMtLjQxIDAtLjc1LjM0LS43NS43NXMuMzQuNzUuNzUuNzVoMi41NmwtNS4xOSA1LjE5Yy0uMjkuMjktLjI5Ljc3IDAgMS4wNnMuNzcuMjkgMS4wNiAwIi8+PC9zdmc+) center no-repeat}.gpf-btn-icon-overviewmap:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyA1LjcgOS4zIDNsNS40IDIuNyA1LjY3My0yLjQzMWEuNDUuNDUgMCAwIDEgLjYyNy40MTNWMTguM0wxNC43IDIxbC01LjQtMi43LTUuNjczIDIuNDMxQS40NS40NSAwIDAgMSAzIDIwLjMxN3ptMTIuNiAxMi45NTYgMy42LTEuNTQzVjUuNzNsLTMuNiAxLjU0M3ptLTEuOC0uMTE4VjcuMjYybC0zLjYtMS44djExLjI3NnptLTUuNC0xLjgxVjUuMzQzTDQuOCA2Ljg4N1YxOC4yN3oiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyA1LjcgOS4zIDNsNS40IDIuNyA1LjY3My0yLjQzMWEuNDUuNDUgMCAwIDEgLjYyNy40MTNWMTguM0wxNC43IDIxbC01LjQtMi43LTUuNjczIDIuNDMxQS40NS40NSAwIDAgMSAzIDIwLjMxN3ptMTIuNiAxMi45NTYgMy42LTEuNTQzVjUuNzNsLTMuNiAxLjU0M3ptLTEuOC0uMTE4VjcuMjYybC0zLjYtMS44djExLjI3NnptLTUuNC0xLjgxVjUuMzQzTDQuOCA2Ljg4N1YxOC4yN3oiLz48L3N2Zz4=) center no-repeat}.ol-overviewmap:has(>.gpf-btn-icon[aria-pressed=true]):after{transform:translateY(-100%)}.ol-overviewmap:not(.ol-collapsed){background:unset}.gpf-btn-icon-legends:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDQwIDQwIj48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Ik0yNC4xMjggMjYuMTExVjI4SDEyLjdjLS45NDQgMC0xLjctLjc1Ni0xLjctMS43VjExaDEzLjAzM3YxNC45MjJjMCAxLjA0Ljc1NiAxLjk4MyAxLjc5NSAyLjA3OCAxLjEzMy4wOTQgMi4xNzItLjg1IDIuMTcyLTEuOTgzdi0zLjAyM2gtMy44NzIiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTE0LjcwMyAxNS43MjJoNS42NjdNMTQuNzAzIDE5LjVoNS42NjdNMTQuNzAzIDIzLjI3OGg1LjY2NyIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTI2LjExMSAyOGgtMS45ODMiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDQwIDQwIj48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Ik0yNC4xMjggMjYuMTExVjI4SDEyLjdjLS45NDQgMC0xLjctLjc1Ni0xLjctMS43VjExaDEzLjAzM3YxNC45MjJjMCAxLjA0Ljc1NiAxLjk4MyAxLjc5NSAyLjA3OCAxLjEzMy4wOTQgMi4xNzItLjg1IDIuMTcyLTEuOTgzdi0zLjAyM2gtMy44NzIiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTE0LjcwMyAxNS43MjJoNS42NjdNMTQuNzAzIDE5LjVoNS42NjdNMTQuNzAzIDIzLjI3OGg1LjY2NyIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTI2LjExMSAyOGgtMS45ODMiLz48L3N2Zz4=) center no-repeat}.gpf-btn-header-legends{height:26px;position:absolute;width:26px;z-index:2}.gpf-btn-icon-header-legends{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjIiIGQ9Ik0xMi42IDEyLjY2NHYxLjMzNEg0LjUzM2MtLjY2NiAwLTEuMi0uNTM0LTEuMi0xLjJ2LTEwLjhoOS4yVjEyLjUzYzAgLjczMy41MzQgMS40IDEuMjY3IDEuNDY3LjguMDY2IDEuNTMzLS42IDEuNTMzLTEuNHYtMi4xMzRIMTIuNiIvPjxwYXRoIHN0cm9rZT0iIzEwMTA5MiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4yIiBkPSJNNS45NDcgNS4zMzFoNE01Ljk0NyA3Ljk5OGg0TTUuOTQ3IDEwLjY2NGg0Ii8+PHBhdGggc3Ryb2tlPSIjMTAxMDkyIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4yIiBkPSJNMTQgMTMuOTk4aC0xLjQiLz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:auto auto}.gpf-panel__body_legends{max-height:300px!important;overflow:auto}.gpf-panel__title_legends{color:#101092;font-size:1rem;font-weight:400;margin:0;padding:12px 15px;position:relative;right:-16px}.gpf-panel__header_legends{align-content:center;align-items:center;background:#e3e3fd;display:flex;flex-direction:row;height:48px}button[id^=GPcollapseLegend_ID_]{position:absolute;right:0;top:8px}.gpf-btn-icon-legends-collapse{box-shadow:none}.gpf-btn-icon-legends-collapse:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;transition:transform .2s ease-out 0s}.gpf-btn-icon-legends-collapse[aria-pressed=true]:after{box-shadow:none;transform:rotate(180deg)}.legend-entry-container{background-color:var(--background-overlap-grey);border-bottom:1px solid var(--border-default-grey);overflow:hidden;position:relative;top:0}.gpf-label-legends-name{line-height:56px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 40px)}button[id^=GPcollapseLegend_ID_][aria-pressed=true]+.legend-entry-image{border-top:1px solid var(--border-default-grey);max-height:300px;opacity:1;overflow:auto;padding:10px 0}.legend-entry-image{display:block;max-height:0;opacity:0;transition:max-height .5s ease-out 0s,opacity .5s ease-out 0s}.legends-entries{padding:0 16px}.gpf-btn-icon-catalog:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNCIgaGVpZ2h0PSIzNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuNzEzIDEyLjc3NGE0LjEyNSA0LjEyNSAwIDEgMSAxLjA2LTEuMDZsMi4wMDcgMi4wMDYtMS4wNiAxLjA2ek01IDZoMy43NXYxLjVINXptMCA1LjI1aDMuNzV2MS41SDV6bTAgNS4yNWgxMy41VjE4SDV6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNCIgaGVpZ2h0PSIzNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuNzEzIDEyLjc3NGE0LjEyNSA0LjEyNSAwIDEgMSAxLjA2LTEuMDZsMi4wMDcgMi4wMDYtMS4wNiAxLjA2ek01IDZoMy43NXYxLjVINXptMCA1LjI1aDMuNzV2MS41SDV6bTAgNS4yNWgxMy41VjE4SDV6Ii8+PC9zdmc+) center no-repeat}@media (max-width:576px){.gpf-mobile-fullscreen .GPtabContent{height:100vh;max-height:unset!important}}.gpf-btn-icon-territories:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi42NDggMS45ODZhLjczLjczIDAgMCAxIC43Ny4yODRsLjIxNy4zMWguMTEzYy4zMTcgMCAuNTkyLjIuNjg0LjQ5OWwuMDM5LjEyNmEuNzIuNzIgMCAwIDEgLjQxLjI1My43LjcgMCAwIDEgLjE4Ny4wNjNsLjI4Ny4xNGEuNy43IDAgMCAxIC4yOTQuMjY3bC4yMzYtLjA1NWEuNzIuNzIgMCAwIDEgLjYwOS4xMy43LjcgMCAwIDEgLjI3My41NTJ2LjI1bC40ODQuMzIzYS43LjcgMCAwIDEgLjMyOC4wNThsLjA3OC4wMzMuMDk5LS4wNGEuNzQuNzQgMCAwIDEgLjQ3NS0uMDIzbC4zODkuMTE0Yy4xMzYuMDQuMjU2LjExOC4zNDYuMjI2bC4yOC4zMzYuMzc0LS4wMzdhLjc0Ljc0IDAgMCAxIC40MS4wNzlsLjIyNi4xMi4zMzEuMDA2Yy4xMzMuMDAzLjI2LjA0LjM3MS4xMWwuMjg5LjE3OWMuMzEyLjE5Ni40MjIuNi4yNS45MmwtLjMxMi41NzgtLjAxNi4xNzRhLjcuNyAwIDAgMS0uMDM0LjE2bC0uMjIyLjYzLjAxNyAxLjA0NWEuNjkuNjkgMCAwIDEtLjI1Ni41NDlsLS40MDcuMzMzYS43LjcgMCAwIDEtLjI0My4xM2wtLjcuODg1Yy4yNC4wNi40NC4yMzguNTEyLjQ4MmwuMDc3LjI1Ni4wOTcuMTIuMjI4LjMzNGEuNjkuNjkgMCAwIDEtLjAxNS44MDFsLjI3LjMxN2EuNy43IDAgMCAxIC4xNjUuNDgzbC0uMDIuMzY0YS43LjcgMCAwIDEtLjI4LjUybC4wNS4wNDhhLjY5LjY5IDAgMCAxIC4wNjEuOTVsLjA4NS4wNTguMDktLjAzMWEuNzIuNzIgMCAwIDEgLjg4OC4zNjVsLjExNy4yNWEuNjkuNjkgMCAwIDEtLjA3OS43MTJsLS4wMzkuMDU1YS42OS42OSAwIDAgMS0uMjQ4LjY0MmwtLjcyLjU4Ny0uMzEyLjE5NmEuNy43IDAgMCAxLS4wNjMuMzE3LjcuNyAwIDAgMS0uNDAyLjM2OWwtLjYzMS4yMjhhMSAxIDAgMCAxLS4xNDkuMDM3bC0uNDcyLjA2NmEuNy43IDAgMCAxLS4yNzQtLjAxM2wtLjk3LS4yMjItLjY0NS0uMTg1LS4wNS0uMDE2YS43My43MyAwIDAgMS0uNDI5LS4wNzhsLS4yMjItLjEyYS43My43MyAwIDAgMS0uNTI4LS4wOTZsLS42MDguMzYtLjE5Mi4zOC4xODcuNjQzYS43LjcgMCAwIDEtLjA2OC41NC43MS43MSAwIDAgMS0uNDMzLjMyOGwtLjc2OC4yYS43LjcgMCAwIDEtLjE4NC4wMjRsLS4xMDItLjAwOC0uNjQ0LS4xMTItLjI5Mi4wNThhLjc0Ljc0IDAgMCAxLS40NS0uMDUzbC0uMzQ0LS4xNjRhLjcuNyAwIDAgMS0uMzcyLS40MjhsLS4yODItLjExMy0uMTE4LS4wMjVhLjcyLjcyIDAgMCAxLS42NTIuMjVsLTEuMjE1LS4xNjFhLjcuNyAwIDAgMS0uMjcyLS4wOTNsLS4yMDUtLjEyaC0uMzFhLjcyLjcyIDAgMCAxLS41Mi0uMjJsLS4yMDgtLjIxNy0uNjk2LS4yOTRhLjcuNyAwIDAgMS0uMzQtLjI5OGwtLjE0MS0uMjQ1LS4yOTgtLjE2MWEuNjkzLjY5MyAwIDAgMS0uMjA4LTEuMDU5bC40NjQtLjU1My4yNTctMS4zOGExIDEgMCAwIDEgLjAyNC0uMDkyLjcuNyAwIDAgMS0uMDQtLjMyOWwuMjEzLTEuODIyYTEgMSAwIDAgMSAuMDE5LS4xLjY5LjY5IDAgMCAxIC4xMzgtLjg1Ny43LjcgMCAwIDEtLjA3NS0uMjE2bC0uMzI4LS4xNjVhLjcuNyAwIDAgMS0uMjQ3LS4yMDZsLS41NTktLjcyOGEuNy43IDAgMCAxLS4xMjYtLjI2NWwtLjE2NS0uNzM3LS4wMDItLjAwOC0uMDc0LS4wNWEuNy43IDAgMCAxLS4xNjItLjE1MWwtLjI0LS4zMTMtMS4zNDMtLjUyNGgtLjM4NmEuNzIuNzIgMCAwIDEtLjYxNy0uMzQ3bC0uMTY0LS4yNzVhLjcuNyAwIDAgMS0uMDgzLS40OTUuNy43IDAgMCAxLS4yNzYtLjM1TDEuNzU0IDguMWEuNjk1LjY5NSAwIDAgMSAuMzczLS44NjVsMS4wMTctLjQ2NmEuNy43IDAgMCAxIC4yNDEtLjA2M2wxLjQwMS0uMTI0YS43NC43NCAwIDAgMSAuNTc0LjIwN2wuMjU5LjI1OS4wNTQtLjAyMWEuNzMuNzMgMCAwIDEgLjM5NC0uMDM2bC4xODcuMDMzLS4yNTMtLjU5Ni0uMTktLjc1N2EuNy43IDAgMCAxIC4xMi0uNTgzLjcxLjcxIDAgMCAxIC41MzUtLjI4NGwuNTc0LS4wMjlhLjcuNyAwIDAgMSAuNTU4LjIyMmwuNDkzLjUxOS42MzkuMTIzLjAwNy0uMDc5YS43LjcgMCAwIDEgLjQ4Mi0uNjA1bDEuMjEzLS40MDkuMzI1LS4yOTItLjA0Ni0uNzFhLjcuNyAwIDAgMSAuMDYtLjMzMWwuMjU0LS41NDVhLjcuNyAwIDAgMSAuNDctLjM4OHptLS4xODggMS45NzgtLjMzLjA4MS0uMDM2LjA3My4wNTUuODE2Yy4wMTMuMi0uMDcuMzkyLS4yMjcuNTI3bC0uNjczLjU3OGEuNy43IDAgMCAxLS4yNDkuMTM4bC0uNzM3LjIzOC4yMjguMTU3LS4yODMuMTM1YS42OC42OCAwIDAgMS0uMzQ3LjM3OGwtLjQ4My4yM2EuNzYuNzYgMCAwIDEtLjQ1LjA2bC0xLjE5LS4yMnYuMDA2bC4wNTcuNzk5Yy4wMjQuMzQyLS4yMy42NC0uNTkuNjk0bC0uMzA0LjA0NGEuNy43IDAgMCAxLS4yMzYtLjAwM2wtLjU4OS0uMS0uMjk5LjExYS43My43MyAwIDAgMS0uNzU1LS4xNTJsLS4zNDYtLjMzLS45MjMuMDc4LS4wMzkuMDE3Yy4xNS4xMy4yMy4zMTYuMjIyLjUwNWwuMDEuMDAzIDEuNjI2LjYwOHEuMTg1LjA3Mi4zLjIxNWwuMjA3LjI1N2EuNzUuNzUgMCAwIDEgLjM5Ni4wNzlsLjM5OC4yMDRjLjE2LjA4My4yOC4yMjMuMzMzLjM4NWwuNTUzLjI4NS0uNTk1LjE5N2EuNy43IDAgMCAxLS4zMTYuMjk5bC4zNS40MzYuNjE2LjI5NmEuNjQ1LjY0NSAwIDAgMSAuMzYyLjczNWwtLjAwNy4wMjguMTM0LjIzNmMuMTA3LjE5LjEwNy40MTEuMDEuNTk2bC4wNTcuMDQ0YS42Ny42NyAwIDAgMSAuMjE4LjMwNGwuMzg3IDEuMWEuNjIuNjIgMCAwIDEtLjAzNi40OTVsLjI2Mi43NDYtLjcyMi0uMzk4YS43LjcgMCAwIDEtLjI3Mi4wMTIuNi42IDAgMCAxLS4wODUuMTc3bC0uMzA1LjQ1MS0uMjYgMS4zMzVhLjY0LjY0IDAgMCAxLS4xNS4zMDFsLS4wNzUuMDg3YTEgMSAwIDAgMSAuMDQyLjA2M2wuMTIuMTk3LjYuMjQyYy4wOTMuMDQuMTY4LjA5LjIzMy4xNTRsLjA5Ny4wOTZoLjE5YS43NC43NCAwIDAgMSAuMzUzLjA5bC4yNTEuMTM5LjM4NC4wNDhhLjcuNyAwIDAgMSAuMTM2LS4xMzkuNzQuNzQgMCAwIDEgLjU4LS4xMzRsLjk4MS4yMDkuNjkuMjYzYS43LjcgMCAwIDEgLjM3LjMyOGwuMDMzLS4wMDdhMSAxIDAgMCAxIC4xNC0uMDEzbC4xMDMuMDA4LjUwNi4wODQtLjA1LS4xNjRhLjYyLjYyIDAgMCAxIC4wNDgtLjQ3NWwuMzk3LS43NTNhLjY3LjY3IDAgMCAxIC4yNjgtLjI3M2wxLjE2NS0uNjU4YS43My43MyAwIDAgMSAuNjcyLS4wMjYuNzQuNzQgMCAwIDEgLjU0LS4wNmwuMjU1LjA3NC4wMzQuMDFhLjc0Ljc0IDAgMCAxIC42NzQuMDc3bC4zOC4yNThjLjEuMDY5LjE4LjE2LjIzLjI2NmwuNTI4LjExNS4yNjItLjAzNS4wNTItLjAxOGEuNy43IDAgMCAxIC4xMDQtLjE3bC4yMjgtLjI2OGEuNy43IDAgMCAxIC4xNy0uMTQzbC40NDEtLjI2NS4xNzUtLjEzOC0uNTcyLS4zNzRhLjY1LjY1IDAgMCAxLS4zLS41MzFsLS4wMS0uNjM3LS4yMzgtLjIxNGEuNjQuNjQgMCAwIDEtLjIxNy0uNDc1di0uMjMyYzAtLjI2NS4xNjctLjUwMi40MjctLjYwNWwtLjA5My0uMTA1YS42NC42NCAwIDAgMS0uMTYyLS4zODVsLS4wMi0uMjlhMSAxIDAgMCAxIC4wMDEtLjA4Mi43NDMuNzQzIDAgMCAxLS44MjQtLjAxM2wtLjIwMS0uMTQ0YS42NC42NCAwIDAgMS0uMjMtLjc2bC4xMDctLjI1OS4wMy0uMzM0YS42My42MyAwIDAgMSAuMTEtLjMwM2wuNDQ3LS42NC40NjEtLjU2MWEuNi42IDAgMCAxIC4wMS0uMjMyLjY2LjY2IDAgMCAxIC4zNi0uNDRsLjIzOC0uMTE2YS43LjcgMCAwIDEgLjI1Mi0uMDcxbC0uMDEyLS42ODlhLjYuNiAwIDAgMSAuMDQtLjIzbC4yMjctLjYxNS4wMi0uMjE0YS42LjYgMCAwIDEgLjAzOS0uMTY0IDEgMSAwIDAgMS0uMDgzLS4wMzZsLS4xNzktLjA5LS41MjYuMDVhLjczLjczIDAgMCAxLS42MTQtLjIzOWwtLjM0OC0uNC0uMTA2LjA0MWEuNzQuNzQgMCAwIDEtLjU0My0uMDA1bC0uMTktLjA3Ny0uMDUzLjAwNGEuNzUuNzUgMCAwIDEtLjQ0My0uMTA2bC0uODYtLjU0OGEuNy43IDAgMCAxLS4xMzYtLjExMy43LjcgMCAwIDEtLjItLjAwOGwtLjQ2MS0uMDhhLjY4LjY4IDAgMCAxLS41Ny0uNThsLS4wMTEtLjEwNWEuNy43IDAgMCAxLS40NzUtLjMxNGwtLjAxLS4wMTZhLjcuNyAwIDAgMS0uMjk2LS4xNDZsLS4xNzItLjE0M2EuNy43IDAgMCAxLS4xMTMtLjEyLjcuNyAwIDAgMS0uNTItLjI4NHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi42NDggMS45ODZhLjczLjczIDAgMCAxIC43Ny4yODRsLjIxNy4zMWguMTEzYy4zMTcgMCAuNTkyLjIuNjg0LjQ5OWwuMDM5LjEyNmEuNzIuNzIgMCAwIDEgLjQxLjI1My43LjcgMCAwIDEgLjE4Ny4wNjNsLjI4Ny4xNGEuNy43IDAgMCAxIC4yOTQuMjY3bC4yMzYtLjA1NWEuNzIuNzIgMCAwIDEgLjYwOS4xMy43LjcgMCAwIDEgLjI3My41NTJ2LjI1bC40ODQuMzIzYS43LjcgMCAwIDEgLjMyOC4wNThsLjA3OC4wMzMuMDk5LS4wNGEuNzQuNzQgMCAwIDEgLjQ3NS0uMDIzbC4zODkuMTE0Yy4xMzYuMDQuMjU2LjExOC4zNDYuMjI2bC4yOC4zMzYuMzc0LS4wMzdhLjc0Ljc0IDAgMCAxIC40MS4wNzlsLjIyNi4xMi4zMzEuMDA2Yy4xMzMuMDAzLjI2LjA0LjM3MS4xMWwuMjg5LjE3OWMuMzEyLjE5Ni40MjIuNi4yNS45MmwtLjMxMi41NzgtLjAxNi4xNzRhLjcuNyAwIDAgMS0uMDM0LjE2bC0uMjIyLjYzLjAxNyAxLjA0NWEuNjkuNjkgMCAwIDEtLjI1Ni41NDlsLS40MDcuMzMzYS43LjcgMCAwIDEtLjI0My4xM2wtLjcuODg1Yy4yNC4wNi40NC4yMzguNTEyLjQ4MmwuMDc3LjI1Ni4wOTcuMTIuMjI4LjMzNGEuNjkuNjkgMCAwIDEtLjAxNS44MDFsLjI3LjMxN2EuNy43IDAgMCAxIC4xNjUuNDgzbC0uMDIuMzY0YS43LjcgMCAwIDEtLjI4LjUybC4wNS4wNDhhLjY5LjY5IDAgMCAxIC4wNjEuOTVsLjA4NS4wNTguMDktLjAzMWEuNzIuNzIgMCAwIDEgLjg4OC4zNjVsLjExNy4yNWEuNjkuNjkgMCAwIDEtLjA3OS43MTJsLS4wMzkuMDU1YS42OS42OSAwIDAgMS0uMjQ4LjY0MmwtLjcyLjU4Ny0uMzEyLjE5NmEuNy43IDAgMCAxLS4wNjMuMzE3LjcuNyAwIDAgMS0uNDAyLjM2OWwtLjYzMS4yMjhhMSAxIDAgMCAxLS4xNDkuMDM3bC0uNDcyLjA2NmEuNy43IDAgMCAxLS4yNzQtLjAxM2wtLjk3LS4yMjItLjY0NS0uMTg1LS4wNS0uMDE2YS43My43MyAwIDAgMS0uNDI5LS4wNzhsLS4yMjItLjEyYS43My43MyAwIDAgMS0uNTI4LS4wOTZsLS42MDguMzYtLjE5Mi4zOC4xODcuNjQzYS43LjcgMCAwIDEtLjA2OC41NC43MS43MSAwIDAgMS0uNDMzLjMyOGwtLjc2OC4yYS43LjcgMCAwIDEtLjE4NC4wMjRsLS4xMDItLjAwOC0uNjQ0LS4xMTItLjI5Mi4wNThhLjc0Ljc0IDAgMCAxLS40NS0uMDUzbC0uMzQ0LS4xNjRhLjcuNyAwIDAgMS0uMzcyLS40MjhsLS4yODItLjExMy0uMTE4LS4wMjVhLjcyLjcyIDAgMCAxLS42NTIuMjVsLTEuMjE1LS4xNjFhLjcuNyAwIDAgMS0uMjcyLS4wOTNsLS4yMDUtLjEyaC0uMzFhLjcyLjcyIDAgMCAxLS41Mi0uMjJsLS4yMDgtLjIxNy0uNjk2LS4yOTRhLjcuNyAwIDAgMS0uMzQtLjI5OGwtLjE0MS0uMjQ1LS4yOTgtLjE2MWEuNjkzLjY5MyAwIDAgMS0uMjA4LTEuMDU5bC40NjQtLjU1My4yNTctMS4zOGExIDEgMCAwIDEgLjAyNC0uMDkyLjcuNyAwIDAgMS0uMDQtLjMyOWwuMjEzLTEuODIyYTEgMSAwIDAgMSAuMDE5LS4xLjY5LjY5IDAgMCAxIC4xMzgtLjg1Ny43LjcgMCAwIDEtLjA3NS0uMjE2bC0uMzI4LS4xNjVhLjcuNyAwIDAgMS0uMjQ3LS4yMDZsLS41NTktLjcyOGEuNy43IDAgMCAxLS4xMjYtLjI2NWwtLjE2NS0uNzM3LS4wMDItLjAwOC0uMDc0LS4wNWEuNy43IDAgMCAxLS4xNjItLjE1MWwtLjI0LS4zMTMtMS4zNDMtLjUyNGgtLjM4NmEuNzIuNzIgMCAwIDEtLjYxNy0uMzQ3bC0uMTY0LS4yNzVhLjcuNyAwIDAgMS0uMDgzLS40OTUuNy43IDAgMCAxLS4yNzYtLjM1TDEuNzU0IDguMWEuNjk1LjY5NSAwIDAgMSAuMzczLS44NjVsMS4wMTctLjQ2NmEuNy43IDAgMCAxIC4yNDEtLjA2M2wxLjQwMS0uMTI0YS43NC43NCAwIDAgMSAuNTc0LjIwN2wuMjU5LjI1OS4wNTQtLjAyMWEuNzMuNzMgMCAwIDEgLjM5NC0uMDM2bC4xODcuMDMzLS4yNTMtLjU5Ni0uMTktLjc1N2EuNy43IDAgMCAxIC4xMi0uNTgzLjcxLjcxIDAgMCAxIC41MzUtLjI4NGwuNTc0LS4wMjlhLjcuNyAwIDAgMSAuNTU4LjIyMmwuNDkzLjUxOS42MzkuMTIzLjAwNy0uMDc5YS43LjcgMCAwIDEgLjQ4Mi0uNjA1bDEuMjEzLS40MDkuMzI1LS4yOTItLjA0Ni0uNzFhLjcuNyAwIDAgMSAuMDYtLjMzMWwuMjU0LS41NDVhLjcuNyAwIDAgMSAuNDctLjM4OHptLS4xODggMS45NzgtLjMzLjA4MS0uMDM2LjA3My4wNTUuODE2Yy4wMTMuMi0uMDcuMzkyLS4yMjcuNTI3bC0uNjczLjU3OGEuNy43IDAgMCAxLS4yNDkuMTM4bC0uNzM3LjIzOC4yMjguMTU3LS4yODMuMTM1YS42OC42OCAwIDAgMS0uMzQ3LjM3OGwtLjQ4My4yM2EuNzYuNzYgMCAwIDEtLjQ1LjA2bC0xLjE5LS4yMnYuMDA2bC4wNTcuNzk5Yy4wMjQuMzQyLS4yMy42NC0uNTkuNjk0bC0uMzA0LjA0NGEuNy43IDAgMCAxLS4yMzYtLjAwM2wtLjU4OS0uMS0uMjk5LjExYS43My43MyAwIDAgMS0uNzU1LS4xNTJsLS4zNDYtLjMzLS45MjMuMDc4LS4wMzkuMDE3Yy4xNS4xMy4yMy4zMTYuMjIyLjUwNWwuMDEuMDAzIDEuNjI2LjYwOHEuMTg1LjA3Mi4zLjIxNWwuMjA3LjI1N2EuNzUuNzUgMCAwIDEgLjM5Ni4wNzlsLjM5OC4yMDRjLjE2LjA4My4yOC4yMjMuMzMzLjM4NWwuNTUzLjI4NS0uNTk1LjE5N2EuNy43IDAgMCAxLS4zMTYuMjk5bC4zNS40MzYuNjE2LjI5NmEuNjQ1LjY0NSAwIDAgMSAuMzYyLjczNWwtLjAwNy4wMjguMTM0LjIzNmMuMTA3LjE5LjEwNy40MTEuMDEuNTk2bC4wNTcuMDQ0YS42Ny42NyAwIDAgMSAuMjE4LjMwNGwuMzg3IDEuMWEuNjIuNjIgMCAwIDEtLjAzNi40OTVsLjI2Mi43NDYtLjcyMi0uMzk4YS43LjcgMCAwIDEtLjI3Mi4wMTIuNi42IDAgMCAxLS4wODUuMTc3bC0uMzA1LjQ1MS0uMjYgMS4zMzVhLjY0LjY0IDAgMCAxLS4xNS4zMDFsLS4wNzUuMDg3YTEgMSAwIDAgMSAuMDQyLjA2M2wuMTIuMTk3LjYuMjQyYy4wOTMuMDQuMTY4LjA5LjIzMy4xNTRsLjA5Ny4wOTZoLjE5YS43NC43NCAwIDAgMSAuMzUzLjA5bC4yNTEuMTM5LjM4NC4wNDhhLjcuNyAwIDAgMSAuMTM2LS4xMzkuNzQuNzQgMCAwIDEgLjU4LS4xMzRsLjk4MS4yMDkuNjkuMjYzYS43LjcgMCAwIDEgLjM3LjMyOGwuMDMzLS4wMDdhMSAxIDAgMCAxIC4xNC0uMDEzbC4xMDMuMDA4LjUwNi4wODQtLjA1LS4xNjRhLjYyLjYyIDAgMCAxIC4wNDgtLjQ3NWwuMzk3LS43NTNhLjY3LjY3IDAgMCAxIC4yNjgtLjI3M2wxLjE2NS0uNjU4YS43My43MyAwIDAgMSAuNjcyLS4wMjYuNzQuNzQgMCAwIDEgLjU0LS4wNmwuMjU1LjA3NC4wMzQuMDFhLjc0Ljc0IDAgMCAxIC42NzQuMDc3bC4zOC4yNThjLjEuMDY5LjE4LjE2LjIzLjI2NmwuNTI4LjExNS4yNjItLjAzNS4wNTItLjAxOGEuNy43IDAgMCAxIC4xMDQtLjE3bC4yMjgtLjI2OGEuNy43IDAgMCAxIC4xNy0uMTQzbC40NDEtLjI2NS4xNzUtLjEzOC0uNTcyLS4zNzRhLjY1LjY1IDAgMCAxLS4zLS41MzFsLS4wMS0uNjM3LS4yMzgtLjIxNGEuNjQuNjQgMCAwIDEtLjIxNy0uNDc1di0uMjMyYzAtLjI2NS4xNjctLjUwMi40MjctLjYwNWwtLjA5My0uMTA1YS42NC42NCAwIDAgMS0uMTYyLS4zODVsLS4wMi0uMjlhMSAxIDAgMCAxIC4wMDEtLjA4Mi43NDMuNzQzIDAgMCAxLS44MjQtLjAxM2wtLjIwMS0uMTQ0YS42NC42NCAwIDAgMS0uMjMtLjc2bC4xMDctLjI1OS4wMy0uMzM0YS42My42MyAwIDAgMSAuMTEtLjMwM2wuNDQ3LS42NC40NjEtLjU2MWEuNi42IDAgMCAxIC4wMS0uMjMyLjY2LjY2IDAgMCAxIC4zNi0uNDRsLjIzOC0uMTE2YS43LjcgMCAwIDEgLjI1Mi0uMDcxbC0uMDEyLS42ODlhLjYuNiAwIDAgMSAuMDQtLjIzbC4yMjctLjYxNS4wMi0uMjE0YS42LjYgMCAwIDEgLjAzOS0uMTY0IDEgMSAwIDAgMS0uMDgzLS4wMzZsLS4xNzktLjA5LS41MjYuMDVhLjczLjczIDAgMCAxLS42MTQtLjIzOWwtLjM0OC0uNC0uMTA2LjA0MWEuNzQuNzQgMCAwIDEtLjU0My0uMDA1bC0uMTktLjA3Ny0uMDUzLjAwNGEuNzUuNzUgMCAwIDEtLjQ0My0uMTA2bC0uODYtLjU0OGEuNy43IDAgMCAxLS4xMzYtLjExMy43LjcgMCAwIDEtLjItLjAwOGwtLjQ2MS0uMDhhLjY4LjY4IDAgMCAxLS41Ny0uNThsLS4wMTEtLjEwNWEuNy43IDAgMCAxLS40NzUtLjMxNGwtLjAxLS4wMTZhLjcuNyAwIDAgMS0uMjk2LS4xNDZsLS4xNzItLjE0M2EuNy43IDAgMCAxLS4xMTMtLjEyLjcuNyAwIDAgMS0uNTItLjI4NHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-header-territories{height:26px;position:absolute;width:26px;z-index:2}.gpf-btn-icon-header-territories{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNOC42NjcgMTUuMzMzIDYgMTIuNjY3aDUuMzMzek04LjY2NyAybDIuNjY2IDIuNjY3SDZ6bTAgOGExLjMzMyAxLjMzMyAwIDEgMSAwLTIuNjY3IDEuMzMzIDEuMzMzIDAgMCAxIDAgMi42NjdNMiA4LjY2NyA0LjY2NyA2djUuMzMzem0xMy4zMzMgMC0yLjY2NiAyLjY2NlY2eiIvPjwvc3ZnPg==);background-position:50%;background-repeat:no-repeat;background-size:auto auto}.gpf-panel__body_territories{max-height:300px;overflow:auto}.gpf-panel__title_territories{color:#101092;font-size:1rem;font-weight:400;margin:0;padding:12px 15px;position:relative;right:-16px}.gpf-panel__header_territories{align-content:center;align-items:center;background:#e3e3fd;display:flex;flex-direction:row;height:48px}#GPterritoriesPanelClose{right:0;top:0}.gpf-tile{height:150px;width:150px}.tiles-reduce div.fr-tile{height:unset;padding:unset;width:unset}.fr-tile:hover{background-color:var(--background-contrast-grey)}.fr-tile__title:before{background-image:unset}.gpf-tile__header{align-items:center;display:flex;flex-direction:column}.territories-entries{display:grid}.tiles-direction.tiles-0{grid-template-columns:repeat(3,1fr);max-height:none!important}.tiles-direction.tiles-1{grid-template-columns:repeat(1,1fr)}.tiles-direction.tiles-2{grid-template-columns:repeat(2,1fr)}.tiles-direction.tiles-3{grid-template-columns:repeat(3,1fr)}.tiles-direction.tiles-4{grid-template-columns:repeat(4,1fr)}div.fr-tile div.fr-tile__header div.fr-tile__icon,div.fr-tile div.fr-tile__header div.fr-tile__thumbnail{display:block}.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__icon,.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__thumbnail{display:none}.fr-tile__icon{background-position:50%;background-repeat:no-repeat;background-size:auto auto;height:50px;width:50px}.tiles-icon div.fr-tile div.fr-tile__header div.fr-tile__thumbnail,.tiles-thumbnail div.fr-tile div.fr-tile__header div.fr-tile__icon{display:none}@media (max-width:576px){.tiles-direction.tiles-4{grid-template-columns:repeat(3,1fr)}}@media (max-width:382px){.tiles-direction.tiles-0,.tiles-direction.tiles-3,.tiles-direction.tiles-4{grid-template-columns:repeat(2,1fr)}}button[id^=GPshowControlListPicto-][aria-pressed=true]+dialog{width:370px}div[id^=GPcontrolList-] .GPshowOpen>span{font-size:32px;position:absolute;transform:translate(-5px,-2px)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content{display:flex;flex-direction:column;overflow:auto;padding:0 1.5rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content:not(:has(~.gpf-panel__footer)){padding-bottom:2rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div{align-items:center;column-gap:1rem;display:flex;flex-direction:row;padding:.5rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div:hover,dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div:hover>button{background-color:var(--hover)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button{height:40px;width:40px}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button:after{background-color:var(--text-default-grey)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>div{display:flex;flex-direction:column}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>div>span:nth-child(2){color:var(--text-mention-grey);font-size:.75rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__footer{background-color:var(--background-lifted-grey);padding:1rem 2rem 2rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__footer>button{justify-content:center;width:100%} + */:root{--size-per-row:44px}.gpf-widget{padding:2px;pointer-events:auto;position:absolute}.gpf-widget-button{width:40px}.gpf-panel{background-color:unset;max-height:100%;position:relative;width:max-content}.gpf-panel form{overflow:auto;padding:0 2rem 2rem}.gpf-panel--hidden{display:none}.gpf-panel__body{display:flex;flex:1 1 auto;flex-direction:column;max-height:100%!important;min-height:0;overflow:unset;position:relative}.gpf-panel__title{text-align:left}.gpf-panel__footer{background-color:transparent;justify-content:center;margin-top:0;padding:0}.gpf-panel__footer>input[type=submit]{width:100%}.gpf-panel__content{margin-bottom:unset;padding:unset}.gpf-panel--close,.gpf-panel--info,.gpf-panel--reduce{cursor:pointer;position:relative}.gpf-flex{align-items:center;flex-direction:row}.gpf-flex,.gpf-flex-column{display:flex;justify-content:space-evenly}.gpf-flex-column{flex-direction:column}.gpf-flex-padding{padding:5px}.gpf-hidden{display:none;opacity:0;visibility:hidden}.gpf-visible{display:block;opacity:100%;visibility:visible}.gpf-waiting{background-color:hsla(0,0%,100%,.9);border-radius:4px;bottom:0;font-size:1.5em;font-weight:700;height:inherit;left:0;overflow:hidden;position:absolute;right:0;top:80px}.gpf-waiting--hidden{display:none}.gpf-waiting--visible{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;z-index:4000}.gpf-waiting_info{margin:auto}.gpf-btn-icon.gpf-btn--secondary,.gpf-btn-icon.gpf-btn--tertiary{background-color:var(--background-default-grey)}.gpf-widget>.gpf-btn-icon[aria-pressed=true]{background-color:var(--hover-tint);position:relative}.gpf-widget:has(>.gpf-btn-icon[aria-pressed=true]):after{background-color:var(--background-action-high-blue-france);content:"";height:40px;left:44px;position:absolute;transform:translateY(-40px);width:3px}@supports(-moz-appearance:none){.gpf-widget:has(.gpf-btn-icon[aria-pressed=true]):after{transform:unset}}.gpf-widget>.gpf-btn-icon[aria-label]:hover:before{background-image:conic-gradient(from 56.31deg at 0 50%,transparent 0deg,var(--background-overlap-grey) 0deg,var(--background-overlap-grey) 67.38deg,transparent 67.38deg),conic-gradient(from 56.31deg at 0 50%,transparent 0deg,var(--border-default-grey) 0deg,var(--border-default-grey) 67.38deg,transparent 67.38deg),linear-gradient(90deg,var(--border-default-grey),var(--border-default-grey)),linear-gradient(90deg,var(--background-overlap-grey),var(--background-overlap-grey));background-position:.125rem 50%,0 50%,.375rem 100%,.375rem 100%;background-repeat:no-repeat;background-size:.375rem .5rem,.375rem .5rem,1px,100%,calc(100% - .5rem) 100%;color:var(--text-default-grey);content:attr(aria-label);filter:drop-shadow(0 2px 6px rgba(0,0,18,.16));filter:drop-shadow(var(--overlap-shadow));font-size:.75rem;padding:.5rem .5rem .5rem 1.25rem;position:absolute;top:0;white-space:nowrap;width:fit-content}.position-container-bottom-left .gpf-widget>.gpf-btn-icon[aria-label]:hover:before,.position-container-top-left .gpf-widget>.gpf-btn-icon[aria-label]:hover:before{transform:translateX(24px)}.position-container-bottom-right .gpf-widget>.gpf-btn-icon[aria-label]:hover:before,.position-container-top-right .gpf-widget>.gpf-btn-icon[aria-label]:hover:before{background-image:conic-gradient(from 236.31deg at 100% 50%,transparent 0deg,var(--background-overlap-grey) 0deg,var(--background-overlap-grey) 67.38deg,transparent 67.38deg),conic-gradient(from 236.31deg at 100% 50%,transparent 0deg,var(--border-default-grey) 0deg,var(--border-default-grey) 67.38deg,transparent 67.38deg),linear-gradient(90deg,var(--border-default-grey),var(--border-default-grey)),linear-gradient(90deg,var(--background-overlap-grey),var(--background-overlap-grey));background-position:calc(100% - .125rem) 50%,100% 50%,calc(100% - .375rem) 0,calc(100% - .375rem) 0;background-size:.375rem .5rem,.375rem .5rem,1px 100%,100%;padding:.5rem 1.25rem .5rem .5rem;transform:translateX(calc(-100% - 16px))}.gpf-btn--secondary,.gpf-btn--tertiary{position:relative}.gpf-btn--secondary:after,.gpf-btn--tertiary:after{background-color:var(--text-action-high-blue-france);content:"";height:100%;left:0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask:linear-gradient(#0000,#0000);mask:linear-gradient(#0000,#0000);position:absolute;top:0;width:100%}.gpf-btn--secondary:disabled:after,.gpf-btn--tertiary:disabled:after{background-color:var(--text-disabled-grey)}.position-container-top-left .gpf-button-no-gutter,.position-container-top-right .gpf-button-no-gutter{margin-bottom:-5px}.position-container-bottom-left .gpf-button-no-gutter,.position-container-bottom-right .gpf-button-no-gutter{margin-top:-5px}.gpf-btn-icon-close{float:right;position:absolute;right:.5rem;top:.5rem}.gpf-btn-icon-return{float:left;left:.5rem;position:absolute;top:.5rem}.gpf-btn-icon-return:after{-webkit-mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAANVJREFUKJGd07EuREEYxfGzK0hsQSOhkKxoZButR9B5FJ3Gc2gUKPU6CkGx0XgGuhsaDVH5aSxjc+9u9p7kK74z8/9OJjPTQdqq25qcAPeTDKbSGK8BhjitWftX48nbSU6S7CZZSbKaZDnJ3LTkLdz50xsecYsz7GGxTC7hY3xp1ieO0K2D13FTbH7BPR5Q/QyusFMHBxvFgAvMYwE9HOIDB01wsFmcs/SXcInzSXCwhn6Nv4/rpqsaqUryVOMPkzyPmlmf52uSq1HTMfvH6CV5bwv/6htI1GwnhVkfqAAAAABJRU5ErkJggg==) center no-repeat;mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAANVJREFUKJGd07EuREEYxfGzK0hsQSOhkKxoZButR9B5FJ3Gc2gUKPU6CkGx0XgGuhsaDVH5aSxjc+9u9p7kK74z8/9OJjPTQdqq25qcAPeTDKbSGK8BhjitWftX48nbSU6S7CZZSbKaZDnJ3LTkLdz50xsecYsz7GGxTC7hY3xp1ieO0K2D13FTbH7BPR5Q/QyusFMHBxvFgAvMYwE9HOIDB01wsFmcs/SXcInzSXCwhn6Nv4/rpqsaqUryVOMPkzyPmlmf52uSq1HTMfvH6CV5bwv/6htI1GwnhVkfqAAAAABJRU5ErkJggg==) center no-repeat}.gpf-btn-icon{caret-color:transparent;width:inherit}.gpf-btn-icon-reset:after{background-color:var(--text-action-high-blue-france);-webkit-mask:linear-gradient(#fff 0 0) top /100% 1px,linear-gradient(#fff 0 0) bottom/100% 1px,linear-gradient(#fff 0 0) left /1px 100%,linear-gradient(#fff 0 0) right /1px 100%,url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=) -25px center;mask:linear-gradient(#fff 0 0) top /100% 1px,linear-gradient(#fff 0 0) bottom/100% 1px,linear-gradient(#fff 0 0) left /1px 100%,linear-gradient(#fff 0 0) right /1px 100%,url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=) -25px center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.gpf-btn-icon-info{height:40px;width:40px}.gpf-input{padding-left:5px}.gpf-radio-btn-group{display:flex;gap:1em}.gpf-panel__advancedlist,.gpf-panel__list{background-color:#fff;border:1px solid #999;max-height:140px;overflow-y:hidden;position:absolute;width:inherit;z-index:2}.gpf-panel__advancedlist{border-top:none;font-size:.9em;width:calc(100% - 28px)}.gpf-panel__items:hover{background-color:#cedbef;color:#000}.gpf-panel__items{color:#5e5e5e;cursor:pointer;font-size:1em;height:28px;line-height:16px;overflow:hidden;padding:6px 10px;text-overflow:ellipsis;white-space:nowrap;width:100%}.gpf-panel:after,.gpf-panel:before{flex:0;height:unset}:root{--size-per-row:50px}.position-container-bottom-left,.position-container-bottom-right,.position-container-top-left,.position-container-top-right{display:flex;flex-direction:column;height:calc(100% - 8px);justify-content:flex-start;min-height:var(--size-per-row);position:absolute;width:calc(var(--size-per-row) + 4px)}.position-container-top-left,.position-container-top-right{top:4px}.position-container-top-left{float:left;left:8px}.position-container-top-right{float:right;right:4px}.position-container-bottom-left,.position-container-bottom-right{bottom:4px;justify-content:flex-end}.position-container-bottom-right{float:right;right:4px}.position-container-bottom-left{float:left;left:8px}.gp-feature-info-div{background-color:var(--background-default-grey);bottom:17px;box-shadow:0 0 5px var(--text-default-grey);font-size:.75em;max-width:calc(100vw - 80px);padding:10px;position:relative}.gp-feature-info-div:before{border-left:14px solid transparent;border-right:14px solid transparent;border-top:15px solid var(--background-default-grey);bottom:-15px;content:"";left:50%;margin-left:-14px;position:absolute}.gp-feature-info-div .closer{background-color:var(--background-default-grey);border:none;border-bottom-right-radius:10px;border-top-right-radius:10px;cursor:pointer;display:block;height:30px;position:absolute;right:0;top:0;width:30px}.gp-feature-info-div .closer:after{background-color:var(--text-action-high-blue-france);content:"";height:100%;left:0;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwMDA5MSIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwMDA5MSIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=) center no-repeat;-webkit-mask-size:14px 14px;mask-size:14px 14px;position:absolute;top:0;width:100%}.gp-features-content-div{max-height:340px;max-width:420px;min-width:260px;overflow:auto}.gp-features-content-div h5,.gp-features-content-div h6,.gp-features-content-div p,.gp-features-content-div ul{margin:0}.gp-features-content-div ul{list-style-type:none;padding:0}.geoportail-popup-content h5,.geoportail-popup-content h6,.geoportail-popup-content p,.gp-att-description-div,.gp-att-name-div,.gp-att-others-div{padding:0 10px}.geoportail-popup-content h5:not(:last-child),.geoportail-popup-content h6:not(:last-child),.geoportail-popup-content p:not(:last-child),.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){margin-bottom:15px}.geoportail-popup-content h5:last-child,.geoportail-popup-content h6:last-child,.geoportail-popup-content p:last-child,.gp-att-description-div:last-child,.gp-att-name-div,.gp-att-others-div:last-child{margin-bottom:10px}.geoportail-popup-content h5:first-child,.geoportail-popup-content h6:first-child,.geoportail-popup-content p:first-child,.gp-att-description-div:first-child,.gp-att-name-div:first-child,.gp-att-others-div:first-child{margin-top:10px}.gp-att-name-div,.gp-features-content-div h5{color:#0b6ba7;font-size:1.2em;font-weight:700;padding-right:35px;text-transform:uppercase}.gp-features-content-div h6{font-size:1.1em}.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){border-bottom:1px dotted #666;padding-bottom:10px}.ol-disabled{--idle:transparent;--hover:var(--background-disabled-grey-hover);--active:var(--background-disabled-grey-active);background-color:var(--background-disabled-grey);color:var(--text-disabled-grey);cursor:not-allowed;display:block}.ol-scale-bar,.ol-scale-line{z-index:-1}.fr-collapse{--collapse-max-height:none}.fr-collapse:not(.fr-collapse--expanded):not(.fr-collapsing){--collapse-max-height:0}@media (max-width:576px){.gpf-mobile-fullscreen>button[aria-pressed=true]~dialog{width:100vw!important}.gpf-mobile-fullscreen form div,.gpf-mobile-fullscreen form p{margin:auto;text-align:center}.gpf-mobile-fullscreen .gpf-mobile-form{height:100vh;max-height:unset}.position-container-bottom-left .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-bottom-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-top-left .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-top-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog{left:-8px!important;right:unset!important;top:-4px!important}.position-container-bottom-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-top-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog{left:unset!important;right:-4px!important}}.gpf-btn-icon-drawing:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI1Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTUuMDQgOS40MzcgMTMuNzA0IDguMWwtOC44MTEgOC44MXYxLjMzOUg2LjIzek0xNi4zNzggOC4xbDEuMzM4LTEuMzM4LTEuMzM4LTEuMzM3TDE1LjA0IDYuNzZ6TTcuMDE0IDIwLjE0SDN2LTQuMDEzbDEyLjcxLTEyLjcxYS45NDYuOTQ2IDAgMCAxIDEuMzM3IDBsMi42NzYgMi42NzZjLjM3LjM3LjM3Ljk2OSAwIDEuMzM4eiIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI1Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTUuMDQgOS40MzcgMTMuNzA0IDguMWwtOC44MTEgOC44MXYxLjMzOUg2LjIzek0xNi4zNzggOC4xbDEuMzM4LTEuMzM4LTEuMzM4LTEuMzM3TDE1LjA0IDYuNzZ6TTcuMDE0IDIwLjE0SDN2LTQuMDEzbDEyLjcxLTEyLjcxYS45NDYuOTQ2IDAgMCAxIDEuMzM3IDBsMi42NzYgMi42NzZjLjM3LjM3LjM3Ljk2OSAwIDEuMzM4eiIvPjwvc3ZnPg==) center no-repeat}.gp-label-div,.gp-styling-div{transform:translateY(20px);width:370px}.gp-label-div textarea{margin-bottom:1rem;max-width:100%}.gp-label-div input{width:100%}.gp-styling-option.fr-range--sm[data-fr-js-range]:after,.gp-styling-option.fr-range--sm[data-fr-js-range]:before{top:1.74rem}.drawing-tool{width:40px}.drawing-tool-active{background-color:var(--hover-tint)}button[id^=drawing-tool-point-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOCAxNi40ODUgNC4yNDMtNC4yNDJhNiA2IDAgMSAwLTguNDg2IDB6bTUuNjU3LTIuODI4TDggMTkuMzE0bC01LjY1Ny01LjY1N2E4IDggMCAxIDEgMTEuMzE0IDBNMSAyMGgxNHYySDF6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOCAxNi40ODUgNC4yNDMtNC4yNDJhNiA2IDAgMSAwLTguNDg2IDB6bTUuNjU3LTIuODI4TDggMTkuMzE0bC01LjY1Ny01LjY1N2E4IDggMCAxIDEgMTEuMzE0IDBNMSAyMGgxNHYySDF6Ii8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-line-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zLjQxNCAxNCAxMy41NTYgMy44NThsLTEuNDE0LTEuNDE0TDIgMTIuNTg2VjE0em0uODI5IDJIMHYtNC4yNDNMMTEuNDM1LjMyMmExIDEgMCAwIDEgMS40MTQgMGwyLjgyOSAyLjgyOWExIDEgMCAwIDEgMCAxLjQxNHpNMCAxOGgxOHYySDB6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zLjQxNCAxNCAxMy41NTYgMy44NThsLTEuNDE0LTEuNDE0TDIgMTIuNTg2VjE0em0uODI5IDJIMHYtNC4yNDNMMTEuNDM1LjMyMmExIDEgMCAwIDEgMS40MTQgMGwyLjgyOSAyLjgyOWExIDEgMCAwIDEgMCAxLjQxNHpNMCAxOGgxOHYySDB6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat}button[id^=drawing-tool-polygon-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtMTEgMy4wMyA4LjUzIDYuMTk4LTMuMjU4IDEwLjAyOEg1LjcyOUwyLjQ3IDkuMjI4em0xMC43NDcgNS40NzhMMTEgLjcuMjUzIDguNTA4bDQuMTA1IDEyLjYzNGgxMy4yODR6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtMTEgMy4wMyA4LjUzIDYuMTk4LTMuMjU4IDEwLjAyOEg1LjcyOUwyLjQ3IDkuMjI4em0xMC43NDcgNS40NzhMMTEgLjcuMjUzIDguNTA4bDQuMTA1IDEyLjYzNGgxMy4yODR6Ii8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-text-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNyAwYTEgMSAwIDAgMSAxIDF2My43NTdsLTIgMlYySDJ2MTZoMTR2LTIuNzU4bDItMlYxOWExIDEgMCAwIDEtMSAxSDFhMSAxIDAgMCAxLTEtMVYxYTEgMSAwIDAgMSAxLTF6bTEuNzc4IDYuODA4IDEuNDE0IDEuNDE0TDEyLjQxNCAxNmwtMS40MTYtLjAwMi4wMDItMS40MTJ6TTEwIDEwdjJINXYtMnptMy00djJINVY2eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNyAwYTEgMSAwIDAgMSAxIDF2My43NTdsLTIgMlYySDJ2MTZoMTR2LTIuNzU4bDItMlYxOWExIDEgMCAwIDEtMSAxSDFhMSAxIDAgMCAxLTEtMVYxYTEgMSAwIDAgMSAxLTF6bTEuNzc4IDYuODA4IDEuNDE0IDEuNDE0TDEyLjQxNCAxNmwtMS40MTYtLjAwMi4wMDItMS40MTJ6TTEwIDEwdjJINXYtMnptMy00djJINVY2eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-edit-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0xMi4xMjEgNC4yMjIgNS42NTcgNS42NTctLjcwNyA2LjM2NGMtNi4xMjggMS40MTQtOS43ODIgMi40NzUtMTMuMDggNS4zMDNMMi41OTQgMjAuMTVjMy43MjItMy4zMzEgNy45OTUtNC4zMjggMTIuNjQzLTUuNTJsLjQ0Ni00LjAxOC00LjI5Ny00LjI5Ny00LjAxOC40NDZjLTEuMTkyIDQuNjQ4LTIuMTg5IDguOTItNS41MiAxMi42NDNMLjQ1NCAxOC4wMWMyLjgyOC0zLjMgMy44OS02Ljk1MyA1LjMwMy0xMy4wODF6bS0xLjQxNCA3LjA3QTIgMiAwIDAgMSA3Ljg4IDE0LjEyYTIgMiAwIDEgMSAyLjgyNy0yLjgyOG0zLjg5LTEwLjI1MiA2LjM0NiA2LjM0NmEuNS41IDAgMCAxLS4yNzcuODQ4bC0xLjQ3NC4yMy01LjY1Ni01LjY1Ni4yMTItMS40ODVhLjUuNSAwIDAgMSAuODQ4LS4yODMiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0xMi4xMjEgNC4yMjIgNS42NTcgNS42NTctLjcwNyA2LjM2NGMtNi4xMjggMS40MTQtOS43ODIgMi40NzUtMTMuMDggNS4zMDNMMi41OTQgMjAuMTVjMy43MjItMy4zMzEgNy45OTUtNC4zMjggMTIuNjQzLTUuNTJsLjQ0Ni00LjAxOC00LjI5Ny00LjI5Ny00LjAxOC40NDZjLTEuMTkyIDQuNjQ4LTIuMTg5IDguOTItNS41MiAxMi42NDNMLjQ1NCAxOC4wMWMyLjgyOC0zLjMgMy44OS02Ljk1MyA1LjMwMy0xMy4wODF6bS0xLjQxNCA3LjA3QTIgMiAwIDAgMSA3Ljg4IDE0LjEyYTIgMiAwIDEgMSAyLjgyNy0yLjgyOG0zLjg5LTEwLjI1MiA2LjM0NiA2LjM0NmEuNS41IDAgMCAxLS4yNzcuODQ4bC0xLjQ3NC4yMy01LjY1Ni01LjY1Ni4yMTItMS40ODVhLjUuNSAwIDAgMSAuODQ4LS4yODMiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}button[id^=drawing-tool-display]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNNS44MyAxOEEzLjAwMSAzLjAwMSAwIDEgMSAyIDE0LjE3VjUuODNBMy4wMDEgMy4wMDEgMCAxIDEgNS44MyAyaDguMzRBMy4wMDEgMy4wMDEgMCAxIDEgMTggNS44M3Y4LjM0QTMuMDAxIDMuMDAxIDAgMSAxIDE0LjE3IDE4em0wLTJoOC4zNEEzIDMgMCAwIDEgMTYgMTQuMTdWNS44M0EzIDMgMCAwIDEgMTQuMTcgNEg1LjgzQTMgMyAwIDAgMSA0IDUuODN2OC4zNEEzIDMgMCAwIDEgNS44MyAxNk0zIDRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTE0IDBhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTAgMTRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyTTMgMThhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNNS44MyAxOEEzLjAwMSAzLjAwMSAwIDEgMSAyIDE0LjE3VjUuODNBMy4wMDEgMy4wMDEgMCAxIDEgNS44MyAyaDguMzRBMy4wMDEgMy4wMDEgMCAxIDEgMTggNS44M3Y4LjM0QTMuMDAxIDMuMDAxIDAgMSAxIDE0LjE3IDE4em0wLTJoOC4zNEEzIDMgMCAwIDEgMTYgMTQuMTdWNS44M0EzIDMgMCAwIDEgMTQuMTcgNEg1LjgzQTMgMyAwIDAgMSA0IDUuODN2OC4zNEEzIDMgMCAwIDEgNS44MyAxNk0zIDRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTE0IDBhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTAgMTRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyTTMgMThhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyIi8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-tooltip]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTEuMjQ2IDExSDQuNzU0bC0yIDVILjZMNyAwaDJsNi40IDE2aC0yLjE1NHptLS44LTJMOCAyLjg4NSA1LjU1NCA5ek0yMSA4LjUzNVY4aDJ2OGgtMnYtLjUzNWE0IDQgMCAxIDEgMC02LjkzTTE5IDE0YTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTEuMjQ2IDExSDQuNzU0bC0yIDVILjZMNyAwaDJsNi40IDE2aC0yLjE1NHptLS44LTJMOCAyLjg4NSA1LjU1NCA5ek0yMSA4LjUzNVY4aDJ2OGgtMnYtLjUzNWE0IDQgMCAxIDEgMC02LjkzTTE5IDE0YTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNCIvPjwvc3ZnPg==) center no-repeat}button[id^=drawing-tool-remove]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01IDJWMGgxMHYyaDV2MmgtMnYxNWExIDEgMCAwIDEtMSAxSDNhMSAxIDAgMCAxLTEtMVY0SDBWMnpNNCA0djE0aDEyVjR6bTMgM2gydjhIN3ptNCAwaDJ2OGgtMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01IDJWMGgxMHYyaDV2MmgtMnYxNWExIDEgMCAwIDEtMSAxSDNhMSAxIDAgMCAxLTEtMVY0SDBWMnpNNCA0djE0aDEyVjR6bTMgM2gydjhIN3ptNCAwaDJ2OGgtMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-icon-elevation:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIyIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xMy43NCAxOS44M0gyLjUzTDcuODMgOC42bDMuODUgNy4wNyAxLjcyLS45NC0zLjE2LTUuODEgMi43NC01LjczIDQuMzYgOC41OWMuNTgtLjMgMS4yMS0uNTEgMS44OC0uNjRMMTMuODMuNTRjLS4xNy0uMzMtLjUyLS41Mi0uODktLjU0LS4zNyAwLS43MS4yMi0uODcuNTZMOS4wOSA2LjhsLS40NS0uODNjLS4xOC0uMzItLjUzLS41MS0uODktLjUxLS4zNy4wMS0uNy4yMy0uODYuNTZMLjA5IDIwLjM5YS45ODIuOTgyIDAgMCAwIC44OSAxLjRIMTQuNmE3LjIgNy4yIDAgMCAxLS44Ni0xLjk2Ii8+PHBhdGggZD0iTTE2LjQ4IDEzLjY5djEuNTRoNC45MWwtNS41NiA1LjU1LS4wNy4wNyAxLjA4IDEuMDkgNS42My01LjYzdjQuOTFIMjR2LTcuNTN6Ii8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyNHYyMS45NEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIyIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xMy43NCAxOS44M0gyLjUzTDcuODMgOC42bDMuODUgNy4wNyAxLjcyLS45NC0zLjE2LTUuODEgMi43NC01LjczIDQuMzYgOC41OWMuNTgtLjMgMS4yMS0uNTEgMS44OC0uNjRMMTMuODMuNTRjLS4xNy0uMzMtLjUyLS41Mi0uODktLjU0LS4zNyAwLS43MS4yMi0uODcuNTZMOS4wOSA2LjhsLS40NS0uODNjLS4xOC0uMzItLjUzLS41MS0uODktLjUxLS4zNy4wMS0uNy4yMy0uODYuNTZMLjA5IDIwLjM5YS45ODIuOTgyIDAgMCAwIC44OSAxLjRIMTQuNmE3LjIgNy4yIDAgMCAxLS44Ni0xLjk2Ii8+PHBhdGggZD0iTTE2LjQ4IDEzLjY5djEuNTRoNC45MWwtNS41NiA1LjU1LS4wNy4wNyAxLjA4IDEuMDkgNS42My01LjYzdjQuOTFIMjR2LTcuNTN6Ii8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyNHYyMS45NEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==) center no-repeat}[id^=GPelevationPathPanelInfo]{float:left;left:0;position:absolute;top:0}[id^=GPelevationPathPanel]{height:unset}[id^=GPelevationPathPanelInfo]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDUuMjkyIDUuMjkyIj48ZyBzdHlsZT0ic3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSI+PGNpcmNsZSBjeD0iMTA0LjQ3MSIgY3k9IjQyLjY2NyIgcj0iMi40NDciIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9Ii4zOTciIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIvPjwvZz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTA0Ljk3NiA0My45OWgtMS4wMzR2LS4xNzZoLjA1NWEuMzMuMzMgMCAwIDAgLjE2MS0uMDMuMTMuMTMgMCAwIDAgLjA2Mi0uMDg2IDEgMSAwIDAgMCAuMDEyLS4xNjJ2LS41NjVhLjcuNyAwIDAgMC0uMDE1LS4xNjhxLS4wMTQtLjA1LS4wNzQtLjA3M2EuNy43IDAgMCAwLS4yMDEtLjAyNXYtLjE3NWwuNzgtLjE2NHYxLjE3cTAgLjE2LjA0LjIyLjA0MS4wNTkuMjE0LjA1OXptLS4yMTUtMi4zNjlhLjI3LjI3IDAgMCAxLS4wOC4xOTYuMjcuMjcgMCAwIDEtLjE5Ni4wOC4yNy4yNyAwIDAgMS0uMTk1LS4wODIuMjcyLjI3MiAwIDAgMS0uMDAxLS4zOS4yNy4yNyAwIDAgMSAuMTk2LS4wODFxLjExNiAwIC4xOTcuMDguMDguMDguMDguMTk4eiIgc3R5bGU9ImZpbGw6IzAwMDE5MTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6LjI2NDU4MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDUuMjkyIDUuMjkyIj48ZyBzdHlsZT0ic3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSI+PGNpcmNsZSBjeD0iMTA0LjQ3MSIgY3k9IjQyLjY2NyIgcj0iMi40NDciIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9Ii4zOTciIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIvPjwvZz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTA0Ljk3NiA0My45OWgtMS4wMzR2LS4xNzZoLjA1NWEuMzMuMzMgMCAwIDAgLjE2MS0uMDMuMTMuMTMgMCAwIDAgLjA2Mi0uMDg2IDEgMSAwIDAgMCAuMDEyLS4xNjJ2LS41NjVhLjcuNyAwIDAgMC0uMDE1LS4xNjhxLS4wMTQtLjA1LS4wNzQtLjA3M2EuNy43IDAgMCAwLS4yMDEtLjAyNXYtLjE3NWwuNzgtLjE2NHYxLjE3cTAgLjE2LjA0LjIyLjA0MS4wNTkuMjE0LjA1OXptLS4yMTUtMi4zNjlhLjI3LjI3IDAgMCAxLS4wOC4xOTYuMjcuMjcgMCAwIDEtLjE5Ni4wOC4yNy4yNyAwIDAgMS0uMTk1LS4wODIuMjcyLjI3MiAwIDAgMS0uMDAxLS4zOS4yNy4yNyAwIDAgMSAuMTk2LS4wODFxLjExNiAwIC4xOTcuMDguMDguMDguMDguMTk4eiIgc3R5bGU9ImZpbGw6IzAwMDE5MTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6LjI2NDU4MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSIvPjwvc3ZnPg==) center no-repeat}[id^=GPelevationPathProfil]>#profileElevationByDefault>svg{transform:translateY(1rem)}[id^=GPelevationPathProfil]{height:150px;width:300px}.GPelevationPathProfilWrapper{padding:0 2rem}div[id^=GPelevationPathInformationsContainer]{display:grid;grid-template-columns:50% 50%;padding:0 2rem 1rem;width:calc(300px + 4rem)}.GPelevationPathInformations{display:flex;flex-wrap:wrap;font-size:13px;gap:0 .25rem;margin:0}.GPelevationPathInformations>span{white-space:nowrap}@media (max-width:576px){#GPelevationPathProfil,div[id^=GPelevationPathInformationsContainer]{margin:auto}}.gpf-btn-icon-getfeatureinfo:after,button[id^=GPgetFeatureInfoPicto-][aria-pressed=true]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIyMyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDIzIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik05Ljg2IDE3LjRjMC0uMjguMDItLjU1LjA0LS44MmwtMi41LTEuMjVWMi40M2w0LjY5IDIuMzV2Ni43YTkuMiA5LjIgMCAwIDEgMS45OS0xLjdWNC43MkwxOCAzLjA0di4xOWgtLjAxdjUuMjJhOC43NjggOC43NjggMCAwIDEgMi4wMS4wNFYuNzZjMC0uMDgtLjAyLS4xNi0uMDUtLjI0YS41LjUgMCAwIDAtLjE3LS4xOC42LjYgMCAwIDAtLjIzLS4wOGMtLjA4IDAtLjE3IDAtLjI0LjA0TDEzLjAxIDNsLTYtMy03IDN2MTYuNjFjLS4wMS4wOCAwIC4xNi4wNS4yNC4wNC4wNy4xLjE0LjE2LjE4cy4xNS4wNy4yMy4wOGMuMDggMCAuMTcgMCAuMjQtLjA0bDYuMy0yLjcgMi45OSAxLjVjLS4wOC0uNDgtLjEzLS45Ni0uMTMtMS40NnptLTQuNDUtMS41M0wyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTkuODMgMjAuNHYyaC0ydi0yem0tLjU0LTcuOTdjMS44My4yNCAzLjE1IDEuODYgMy4wMyAzLjdhMy41IDMuNSAwIDAgMS0zLjQ5IDMuMjdoLTF2LTJoMWMuNzkgMCAxLjQ0LS42MSAxLjUtMS40LjA1LS43OS0uNTItMS40OC0xLjMtMS41OS0uNzgtLjEtMS41MS40Mi0xLjY3IDEuMTlsLTEuOTYtLjM5YTMuNDg2IDMuNDg2IDAgMCAxIDMuODktMi43OCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyMi4zM3YyMi40SDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIyMyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDIzIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik05Ljg2IDE3LjRjMC0uMjguMDItLjU1LjA0LS44MmwtMi41LTEuMjVWMi40M2w0LjY5IDIuMzV2Ni43YTkuMiA5LjIgMCAwIDEgMS45OS0xLjdWNC43MkwxOCAzLjA0di4xOWgtLjAxdjUuMjJhOC43NjggOC43NjggMCAwIDEgMi4wMS4wNFYuNzZjMC0uMDgtLjAyLS4xNi0uMDUtLjI0YS41LjUgMCAwIDAtLjE3LS4xOC42LjYgMCAwIDAtLjIzLS4wOGMtLjA4IDAtLjE3IDAtLjI0LjA0TDEzLjAxIDNsLTYtMy03IDN2MTYuNjFjLS4wMS4wOCAwIC4xNi4wNS4yNC4wNC4wNy4xLjE0LjE2LjE4cy4xNS4wNy4yMy4wOGMuMDggMCAuMTcgMCAuMjQtLjA0bDYuMy0yLjcgMi45OSAxLjVjLS4wOC0uNDgtLjEzLS45Ni0uMTMtMS40NnptLTQuNDUtMS41M0wyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTkuODMgMjAuNHYyaC0ydi0yem0tLjU0LTcuOTdjMS44My4yNCAzLjE1IDEuODYgMy4wMyAzLjdhMy41IDMuNSAwIDAgMS0zLjQ5IDMuMjdoLTF2LTJoMWMuNzkgMCAxLjQ0LS42MSAxLjUtMS40LjA1LS43OS0uNTItMS40OC0xLjMtMS41OS0uNzgtLjEtMS41MS40Mi0xLjY3IDEuMTlsLTEuOTYtLjM5YTMuNDg2IDMuNDg2IDAgMCAxIDMuODktMi43OCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyMi4zM3YyMi40SDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+) center no-repeat}.gpf-btn-icon-isocurve:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGNUY1RjUiIGQ9Ik04IDkuOVYxNWMwIC41NS40NSAxIDEgMXMxLS40NSAxLTFWOS45QTQuOTk3IDQuOTk3IDAgMCAwIDEzLjkgNCA1LjAwNCA1LjAwNCAwIDAgMCA4IC4xIDQuOTk3IDQuOTk3IDAgMCAwIDQuMSA2IDUuMDEgNS4wMSAwIDAgMCA4IDkuOU05IDJjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zbTQuMjEgMTAuNDJjLS41NS0uMTItMS4wOS4yNC0xLjIxLjc5cy4yNCAxLjA5Ljc5IDEuMjFDMTUuMDYgMTQuODcgMTYgMTUuNjggMTYgMTZjMCAuNTgtMi40NSAyLTcgMnMtNy0xLjQyLTctMmMwLS4zMi45NC0xLjEzIDMuMjEtMS42Mi41NS0uMTIuOTEtLjY2Ljc5LTEuMjFzLS42Ni0uOTEtMS4yMS0uNzlDMS43NSAxMy4wOCAwIDE0LjM5IDAgMTZjMCAyLjYzIDQuNTMgNCA5IDRzOS0xLjM3IDktNGMwLTEuNjEtMS43NS0yLjkyLTQuNzktMy41OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTh2MjBIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGNUY1RjUiIGQ9Ik04IDkuOVYxNWMwIC41NS40NSAxIDEgMXMxLS40NSAxLTFWOS45QTQuOTk3IDQuOTk3IDAgMCAwIDEzLjkgNCA1LjAwNCA1LjAwNCAwIDAgMCA4IC4xIDQuOTk3IDQuOTk3IDAgMCAwIDQuMSA2IDUuMDEgNS4wMSAwIDAgMCA4IDkuOU05IDJjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zbTQuMjEgMTAuNDJjLS41NS0uMTItMS4wOS4yNC0xLjIxLjc5cy4yNCAxLjA5Ljc5IDEuMjFDMTUuMDYgMTQuODcgMTYgMTUuNjggMTYgMTZjMCAuNTgtMi40NSAyLTcgMnMtNy0xLjQyLTctMmMwLS4zMi45NC0xLjEzIDMuMjEtMS42Mi41NS0uMTIuOTEtLjY2Ljc5LTEuMjFzLS42Ni0uOTEtMS4yMS0uNzlDMS43NSAxMy4wOCAwIDE0LjM5IDAgMTZjMCAyLjYzIDQuNTMgNCA5IDRzOS0xLjM3IDktNGMwLTEuNjEtMS43NS0yLjkyLTQuNzktMy41OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTh2MjBIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat}.gpf-flex-isocurve{justify-content:unset}.gpf-btn-icon-isocurve-reset{background-position:-29px}[id^=GPisochronPanel-] p.gpf-label{margin-bottom:.2rem;margin-top:1rem}[id^=GPisochronPanel-] p.gpf-label:first-child{margin-top:0}div[id^=GPisochronChoice]{gap:1em;justify-content:left}div[id^=GPisochronTransportChoice]>div{margin-top:.5rem}div[id^=GPisochronValueChron],div[id^=GPisochronValueDist]{width:281px}.GPflexInput>input[id^=GPisochronValueChronInput2]{margin-top:0}.GPisoExclusionsOptions{gap:1rem}[id^=GPisochronForm-]>.GPpanelFooter{position:unset}[id^=GPisochronReset-]{min-width:2.5rem}[id^=GPisochronSubmit-]{width:80%}.gpf-btn-icon-import:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDQuNzYyIDUuMjkyIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTA1LjI2NSAzMDUuMTMzaC0yLjY0NnY0LjIzNGgzLjcwNHYtMy4xNzVoLTEuMDU4em0tMy4xNzUtLjI2N2MwLS4xNDUuMTE4LS4yNjIuMjY0LS4yNjJoMy4xNzVsMS4zMjMgMS4zMjN2My43MDJhLjI2NS4yNjUgMCAwIDEtLjI2My4yNjdoLTQuMjM3YS4yNjUuMjY1IDAgMCAxLS4yNjItLjI2MnptMi42NDUgMi4zODR2MS4wNThoLS41Mjl2LTEuMDU4aC0uNzkzbDEuMDU4LTEuMDU4IDEuMDU4IDEuMDU4eiIgc3R5bGU9InN0cm9rZS13aWR0aDouMjY0NTgzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAyLjA5IC0zMDQuNjA0KSIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDQuNzYyIDUuMjkyIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTA1LjI2NSAzMDUuMTMzaC0yLjY0NnY0LjIzNGgzLjcwNHYtMy4xNzVoLTEuMDU4em0tMy4xNzUtLjI2N2MwLS4xNDUuMTE4LS4yNjIuMjY0LS4yNjJoMy4xNzVsMS4zMjMgMS4zMjN2My43MDJhLjI2NS4yNjUgMCAwIDEtLjI2My4yNjdoLTQuMjM3YS4yNjUuMjY1IDAgMCAxLS4yNjItLjI2MnptMi42NDUgMi4zODR2MS4wNThoLS41Mjl2LTEuMDU4aC0uNzkzbDEuMDU4LTEuMDU4IDEuMDU4IDEuMDU4eiIgc3R5bGU9InN0cm9rZS13aWR0aDouMjY0NTgzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAyLjA5IC0zMDQuNjA0KSIvPjwvc3ZnPg==) center no-repeat}.gpf-panel__items_layerimport{border-bottom:1px solid var(--grey-900-175);color:var(--text-action-high-blue-france);height:auto;list-style-type:none}div[id^=GPlayerSwitcher-]{height:44px}button[id^=GPshowLayersListPicto]{width:40px}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{width:350px}.GPlayerSwitcher_layer{background-color:var(--background-overlap-grey);padding-right:40px}.gpf-btn-icon-layerswitcher:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMyIgZD0ibTIyIDguNTUzLTkuODYgNS41NTItOS44Ni01LjU1MkwxMi4xNCAzek0zLjE3OCAxNC45ODYgMiAxNS42NWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4zIiBkPSJNMy4xNzggMTEuNDM3IDIgMTIuMWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMyIgZD0ibTIyIDguNTUzLTkuODYgNS41NTItOS44Ni01LjU1MkwxMi4xNCAzek0zLjE3OCAxNC45ODYgMiAxNS42NWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4zIiBkPSJNMy4xNzggMTEuNDM3IDIgMTIuMWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-icon-ls-visibility{box-shadow:none}.gpf-btn-icon-ls-visibility:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTIuMjE4IDRjNS4wOTIgMCA5LjMyOSAzLjY2NCAxMC4yMTcgOC41LS44ODggNC44MzYtNS4xMjUgOC41LTEwLjIxNyA4LjVTMi44ODggMTcuMzM2IDIgMTIuNUMyLjg4OCA3LjY2NCA3LjEyNSA0IDEyLjIxOCA0bTAgMTUuMTExYzQgMCA3LjQyMy0yLjc4NCA4LjI5LTYuNjExYTguNTA0IDguNTA0IDAgMCAwLTE2LjU4IDAgOC41MDQgOC41MDQgMCAwIDAgOC4yOSA2LjYxMW0wLTIuMzYxYTQuMjUgNC4yNSAwIDEgMSAwLTguNSA0LjI1IDQuMjUgMCAwIDEgMCA4LjVtMC0xLjg4OWEyLjM2MSAyLjM2MSAwIDEgMCAwLTQuNzIyIDIuMzYxIDIuMzYxIDAgMCAwIDAgNC43MjIiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTIuMjE4IDRjNS4wOTIgMCA5LjMyOSAzLjY2NCAxMC4yMTcgOC41LS44ODggNC44MzYtNS4xMjUgOC41LTEwLjIxNyA4LjVTMi44ODggMTcuMzM2IDIgMTIuNUMyLjg4OCA3LjY2NCA3LjEyNSA0IDEyLjIxOCA0bTAgMTUuMTExYzQgMCA3LjQyMy0yLjc4NCA4LjI5LTYuNjExYTguNTA0IDguNTA0IDAgMCAwLTE2LjU4IDAgOC41MDQgOC41MDQgMCAwIDAgOC4yOSA2LjYxMW0wLTIuMzYxYTQuMjUgNC4yNSAwIDEgMSAwLTguNSA0LjI1IDQuMjUgMCAwIDEgMCA4LjVtMC0xLjg4OWEyLjM2MSAyLjM2MSAwIDEgMCAwLTQuNzIyIDIuMzYxIDIuMzYxIDAgMCAwIDAgNC43MjIiLz48L3N2Zz4=) center no-repeat}button[id^=GPvisibilityPicto_ID_][aria-pressed=false]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjQ0FDREMxIiBkPSJNMTcuODgzIDE5LjI5N0ExMC45NSAxMC45NSAwIDAgMSAxMiAyMWMtNS4zOTIgMC05Ljg3OC0zLjg4LTEwLjgxOC05QTExIDExIDAgMCAxIDQuNTIgNS45MzVMMS4zOTQgMi44MDhsMS40MTQtMS40MTQgMTkuNzk5IDE5Ljc5OS0xLjQxNCAxLjQxNHpNNS45MzYgNy4zNUE4Ljk3IDguOTcgMCAwIDAgMy4yMjMgMTJhOS4wMDUgOS4wMDUgMCAwIDAgMTMuMjAxIDUuODM5bC0yLjAyOC0yLjAyOUE0LjUgNC41IDAgMCAxIDguMTkgOS42MDR6bTYuOTc4IDYuOTc4LTMuMjQyLTMuMjQxYTIuNSAyLjUgMCAwIDAgMy4yNDEgMy4yNDFtNy44OTMgMi4yNjUtMS40MzEtMS40MzFBOC45IDguOSAwIDAgMCAyMC43NzggMTIgOS4wMDUgOS4wMDUgMCAwIDAgOS41NTIgNS4zMzhMNy45NzQgMy43NkM5LjIyMSAzLjI3IDEwLjU4IDMgMTIgM2M1LjM5MiAwIDkuODc4IDMuODggMTAuODE5IDlhMTAuOTUgMTAuOTUgMCAwIDEtMi4wMTIgNC41OTNtLTkuMDg0LTkuMDg0UTExLjg2IDcuNSAxMiA3LjVhNC41IDQuNSAwIDAgMSA0LjQ5MiA0Ljc3OHoiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjQ0FDREMxIiBkPSJNMTcuODgzIDE5LjI5N0ExMC45NSAxMC45NSAwIDAgMSAxMiAyMWMtNS4zOTIgMC05Ljg3OC0zLjg4LTEwLjgxOC05QTExIDExIDAgMCAxIDQuNTIgNS45MzVMMS4zOTQgMi44MDhsMS40MTQtMS40MTQgMTkuNzk5IDE5Ljc5OS0xLjQxNCAxLjQxNHpNNS45MzYgNy4zNUE4Ljk3IDguOTcgMCAwIDAgMy4yMjMgMTJhOS4wMDUgOS4wMDUgMCAwIDAgMTMuMjAxIDUuODM5bC0yLjAyOC0yLjAyOUE0LjUgNC41IDAgMCAxIDguMTkgOS42MDR6bTYuOTc4IDYuOTc4LTMuMjQyLTMuMjQxYTIuNSAyLjUgMCAwIDAgMy4yNDEgMy4yNDFtNy44OTMgMi4yNjUtMS40MzEtMS40MzFBOC45IDguOSAwIDAgMCAyMC43NzggMTIgOS4wMDUgOS4wMDUgMCAwIDAgOS41NTIgNS4zMzhMNy45NzQgMy43NkM5LjIyMSAzLjI3IDEwLjU4IDMgMTIgM2M1LjM5MiAwIDkuODc4IDMuODggMTAuODE5IDlhMTAuOTUgMTAuOTUgMCAwIDEtMi4wMTIgNC41OTNtLTkuMDg0LTkuMDg0UTExLjg2IDcuNSAxMiA3LjVhNC41IDQuNSAwIDAgMSA0LjQ5MiA0Ljc3OHoiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-ls-remove{box-shadow:none}.gpf-btn-icon-ls-remove:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNNyA5aDEwbC0xLjQyOCAxMC44ODlIOC40Mjh6Ii8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNiA2aDEyIi8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTEwLjUgNC41aDMiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNNyA5aDEwbC0xLjQyOCAxMC44ODlIOC40Mjh6Ii8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNiA2aDEyIi8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTEwLjUgNC41aDMiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-ls-collapse{box-shadow:none}.gpf-btn-icon-ls-collapse:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;transition:transform .2s ease-out 0s}.gpf-btn-icon-ls-collapse[aria-pressed=true]:after{box-shadow:none;transform:rotate(180deg)}.gpf-btn-icon-ls-dragndrop{box-shadow:none}.gpf-btn-icon-ls-dragndrop:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAxMVY4bDQgNC00IDR2LTNoLTV2NWgzbC00IDQtNC00aDN2LTVINnYzbC00LTQgNC00djNoNVY2SDhsNC00IDQgNGgtM3Y1eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAxMVY4bDQgNC00IDR2LTNoLTV2NWgzbC00IDQtNC00aDN2LTVINnYzbC00LTQgNC00djNoNVY2SDhsNC00IDQgNGgtM3Y1eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{height:56px;max-height:56px}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools>.GPlayerInfo{visibility:visible}button[id^=GPshowAdvancedTools_ID_][aria-pressed=false]{box-shadow:none}button[id^=GPshowAdvancedTools_ID_][aria-pressed="false "]+.GPlayerAdvancedTools>.GPlayerInfo{visibility:hidden}button[id^=GPshowAdvancedTools_ID_]{position:absolute;right:16px;top:12px}div[id^=GPbasicTools_ID_]{align-items:center;display:flex;flex-direction:row-reverse;flex-wrap:nowrap;justify-content:flex-end}div[id^=GPadvancedTools_ID_]{align-content:center;align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;height:inherit;justify-content:space-around}.gpf-btn-header{height:26px;position:absolute;width:26px;z-index:2}.gpf-btn-icon-layers{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48ZyBzdHJva2U9IiMxNTE1OTYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMiIgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBkPSJNMTUuMTkzIDUuNDQ4IDguMSA5LjQ0IDEuMDA5IDUuNDQ4IDguMSAxLjQ1NHpNMS42NTUgMTAuMDc1bC0uODQ3LjQ3OCA3LjA5MSAzLjk5MyA3LjA5Mi0zLjk5My0uODQ4LS40NzgiLz48cGF0aCBkPSJNMS42NTUgNy41MjIuODA4IDhsNy4wOTEgMy45OTRMMTQuOTkxIDhsLS44NDgtLjQ3OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTZ2MTZIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:auto auto}.gpf-panel__body_ls{max-height:300px!important;overflow:auto}.gpf-panel__title_ls{color:#101092;font-size:1rem;font-weight:400;margin:0;padding:12px 15px;position:relative;right:-16px}.gpf-panel__header_ls{align-content:center;align-items:center;background:#e3e3fd;display:flex;flex-direction:row;height:48px}.gpf-btn-icon-ls-info{box-shadow:none}.gpf-btn-icon-ls-info:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI5LjI1IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTMuOTEgMTYuOTk4aC0zLjkwOHYtLjY2MmguMjA4cS40MTggMCAuNjEtLjExNGEuNDguNDggMCAwIDAgLjIzMy0uMzI1cS4wNDQtLjIxLjA0My0uNjExdi0yLjEzN3EwLS40NDYtLjA1NS0uNjM0LS4wNTQtLjE4Ni0uMjgxLS4yNzUtLjIyNy0uMDg2LS43Ni0uMDk0di0uNjZsMi45NTItLjYyMXY0LjQyMXEwIC42MDUuMTUxLjgyOC4xNTEuMjI1LjgwNi4yMjVWMTd6bS0uODEyLTguOTVxMCAuNDMtLjMwNi43NC0uMzA3LjMwNS0uNzM3LjMwNi0uNDI3IDAtLjczNy0uMzE0YTEgMSAwIDAgMS0uMzEzLS43M2MwLS4yNzcuMTAzLS41MzUuMzA4LS43NDFxLjMxLS4zMDkuNzQyLS4zMDljLjI4OCAwIC41NC4xLjc0MS4zMDJxLjMwMi4zMDEuMzAyLjc0OHoiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI5LjI1IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTMuOTEgMTYuOTk4aC0zLjkwOHYtLjY2MmguMjA4cS40MTggMCAuNjEtLjExNGEuNDguNDggMCAwIDAgLjIzMy0uMzI1cS4wNDQtLjIxLjA0My0uNjExdi0yLjEzN3EwLS40NDYtLjA1NS0uNjM0LS4wNTQtLjE4Ni0uMjgxLS4yNzUtLjIyNy0uMDg2LS43Ni0uMDk0di0uNjZsMi45NTItLjYyMXY0LjQyMXEwIC42MDUuMTUxLjgyOC4xNTEuMjI1LjgwNi4yMjVWMTd6bS0uODEyLTguOTVxMCAuNDMtLjMwNi43NC0uMzA3LjMwNS0uNzM3LjMwNi0uNDI3IDAtLjczNy0uMzE0YTEgMSAwIDAgMS0uMzEzLS43M2MwLS4yNzcuMTAzLS41MzUuMzA4LS43NDFxLjMxLS4zMDkuNzQyLS4zMDljLjI4OCAwIC41NC4xLjc0MS4zMDJxLjMwMi4zMDEuMzAyLjc0OHoiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-ls-extent{box-shadow:none}.gpf-btn-icon-ls-extent:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTQuNjA3IDE2LjAyIDYgNy40MTUgNy40MTQgNmw4LjYwNyA4LjYwN1Y3LjAyaDJ2MTFoLTExdi0yeiIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTQuNjA3IDE2LjAyIDYgNy40MTUgNy40MTQgNmw4LjYwNyA4LjYwN1Y3LjAyaDJ2MTFoLTExdi0yeiIvPjwvc3ZnPg==) center no-repeat}[id^=GPlayerInfoPanel]{height:auto;position:absolute}.gpf-label-name{line-height:28px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 96px)}.GPlayerDragNDrop{cursor:move}.gpf-range__output{width:35px}.GPlayerOpacity.fr-range--sm[data-fr-js-range]:after,.GPlayerOpacity.fr-range--sm[data-fr-js-range]:before{top:25%}div[id^=GPlayerInfoContent]{width:350px}.gpf-btn-icon-close.GPlayersPanelClose{right:0;top:0}.gpf-btn-icon-close.GPlayersPanelClose:after{margin-left:-.125rem}.GPlayerAdvancedToolsContextual{display:none}.GPlayerAdvancedToolsContextual:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSI0IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMTggNCI+PHBhdGggZmlsbD0iIzAwMDA5MSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41ODMuMTY3QTEuODQgMS44NCAwIDAgMCAuNzUgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzMyAxLjgzM0ExLjg0IDEuODQgMCAwIDAgNC40MTcgMiAxLjg0IDEuODQgMCAwIDAgMi41ODMuMTY3bTEyLjgzNCAwQTEuODQgMS44NCAwIDAgMCAxMy41ODMgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzNCAxLjgzM0ExLjg0IDEuODQgMCAwIDAgMTcuMjUgMiAxLjg0IDEuODQgMCAwIDAgMTUuNDE3LjE2N005IC4xNjdBMS44NCAxLjg0IDAgMCAwIDcuMTY3IDJjMCAxLjAwOC44MjUgMS44MzMgMS44MzMgMS44MzNBMS44NCAxLjg0IDAgMCAwIDEwLjgzMyAyIDEuODQgMS44NCAwIDAgMCA5IC4xNjciIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSI0IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMTggNCI+PHBhdGggZmlsbD0iIzAwMDA5MSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41ODMuMTY3QTEuODQgMS44NCAwIDAgMCAuNzUgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzMyAxLjgzM0ExLjg0IDEuODQgMCAwIDAgNC40MTcgMiAxLjg0IDEuODQgMCAwIDAgMi41ODMuMTY3bTEyLjgzNCAwQTEuODQgMS44NCAwIDAgMCAxMy41ODMgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzNCAxLjgzM0ExLjg0IDEuODQgMCAwIDAgMTcuMjUgMiAxLjg0IDEuODQgMCAwIDAgMTUuNDE3LjE2N005IC4xNjdBMS44NCAxLjg0IDAgMCAwIDcuMTY3IDJjMCAxLjAwOC44MjUgMS44MzMgMS44MzMgMS44MzNBMS44NCAxLjg0IDAgMCAwIDEwLjgzMyAyIDEuODQgMS44NCAwIDAgMCA5IC4xNjciIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}.GPlayerAdvancedToolsContextual[aria-pressed=true]{background-color:var(--hover-tint);overflow:visible}.GPlayerSwitcher_layer:has(.GPlayerAdvancedToolsContextual[aria-pressed=true]){overflow:visible}[id^=GPlayersList-] .GPpanelBody:has(.GPlayerAdvancedToolsContextual[aria-pressed=true]){overflow:visible}.GPlayerAdvancedTools:has(.GPlayerAdvancedToolsContextual[aria-pressed=true]){position:relative}.GPlayerAdvancedToolsContextual+div{background-color:var(--background-overlap-grey);border-radius:6px;box-shadow:0 0 10px 0 rgba(0,0,0,.15);display:none;flex-direction:column;flex-wrap:wrap;font-size:13px;gap:6px;padding:14px 6px;z-index:12}.GPlayerAdvancedToolsContextual+div>button{padding-left:2rem}.GPlayerAdvancedToolsContextual+div>button[visibility=hidden]{display:none}.GPlayerAdvancedToolsContextual+div>button:after{mask-position:left}.GPlayerAdvancedToolsContextual[aria-pressed=true]+div{display:flex;position:absolute;right:0;top:calc(2.5rem + 8px)}@media (max-width:576px){.GPlayerAdvancedTools{width:calc(100% + 40px)}.GPlayerAdvancedTools>.GPlayerExtent,.GPlayerAdvancedTools>.GPlayerInfo,.GPlayerAdvancedTools>.GPlayerRemove{display:none}.GPlayerAdvancedToolsContextual{display:inline-flex}[id^=GPopacity_ID_]{flex-grow:0.6}}.gpf-btn-icon-pointer:after{background-color:var(--text-inverted-blue-france);content:"";height:100%;left:0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjAzIDE2LjAzMmE3LjM2IDcuMzYgMCAwIDEtNi42NjItNi42NjNILjY3YS42Ny42NyAwIDEgMSAwLTEuMzM4aC43QTcuMzY0IDcuMzY0IDAgMCAxIDguMDMgMS4zNjhWLjY3YS42Ny42NyAwIDEgMSAxLjMzOCAwdi43YTcuMzYgNy4zNiAwIDAgMSA2LjY2MyA2LjY2MmguNjk5YS42Ny42NyAwIDAgMSAwIDEuMzM4aC0uN2E3LjM2IDcuMzYgMCAwIDEtNi42NjIgNi42NjN2LjY5OWEuNjcuNjcgMCAwIDEtMS4zMzggMHpNOS4zNyA0LjY4NVYyLjcxNGE2LjAyNSA2LjAyNSAwIDAgMSA1LjMxNiA1LjMxN2gtMS45N2EuNjcuNjcgMCAwIDAgMCAxLjMzOGgxLjk3YTYuMDI1IDYuMDI1IDAgMCAxLTUuMzE3IDUuMzE3di0xLjk3YS42Ny42NyAwIDAgMC0xLjMzOCAwdjEuOTdBNi4wMjUgNi4wMjUgMCAwIDEgMi43MTQgOS4zN2gxLjk3YS42Ny42NyAwIDAgMCAwLTEuMzM4aC0xLjk3QTYuMDI2IDYuMDI2IDAgMCAxIDguMDMgMi43MTR2MS45N2EuNjcuNjcgMCAwIDAgMS4zMzggMCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjAzIDE2LjAzMmE3LjM2IDcuMzYgMCAwIDEtNi42NjItNi42NjNILjY3YS42Ny42NyAwIDEgMSAwLTEuMzM4aC43QTcuMzY0IDcuMzY0IDAgMCAxIDguMDMgMS4zNjhWLjY3YS42Ny42NyAwIDEgMSAxLjMzOCAwdi43YTcuMzYgNy4zNiAwIDAgMSA2LjY2MyA2LjY2MmguNjk5YS42Ny42NyAwIDAgMSAwIDEuMzM4aC0uN2E3LjM2IDcuMzYgMCAwIDEtNi42NjIgNi42NjN2LjY5OWEuNjcuNjcgMCAwIDEtMS4zMzggMHpNOS4zNyA0LjY4NVYyLjcxNGE2LjAyNSA2LjAyNSAwIDAgMSA1LjMxNiA1LjMxN2gtMS45N2EuNjcuNjcgMCAwIDAgMCAxLjMzOGgxLjk3YTYuMDI1IDYuMDI1IDAgMCAxLTUuMzE3IDUuMzE3di0xLjk3YS42Ny42NyAwIDAgMC0xLjMzOCAwdjEuOTdBNi4wMjUgNi4wMjUgMCAwIDEgMi43MTQgOS4zN2gxLjk3YS42Ny42NyAwIDAgMCAwLTEuMzM4aC0xLjk3QTYuMDI2IDYuMDI2IDAgMCAxIDguMDMgMi43MTR2MS45N2EuNjcuNjcgMCAwIDAgMS4zMzggMCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;position:absolute;top:0;width:100%}.gpf-btn-icon-pointer{border-top-right-radius:4px;min-width:2.5rem;position:relative}.GPlocationStageFlexInput:has(.GPlocationStageRemove)>.gpf-btn-icon-pointer{border-top-right-radius:0}.gpf-btn-icon-remove{height:2.5rem;width:2.5rem}.gpf-btn-icon-remove:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJtMTIgMTAuNiA0Ljk1LTQuOTYgMS40IDEuNEwxMy40MiAxMmw0Ljk2IDQuOTUtMS40IDEuNEwxMiAxMy40MmwtNC45NSA0Ljk2LTEuNC0xLjRMMTAuNTggMTIgNS42MyA3LjA1bDEuNC0xLjR6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJtMTIgMTAuNiA0Ljk1LTQuOTYgMS40IDEuNEwxMy40MiAxMmw0Ljk2IDQuOTUtMS40IDEuNEwxMiAxMy40MmwtNC45NSA0Ljk2LTEuNC0xLjRMMTAuNTggMTIgNS42MyA3LjA1bDEuNC0xLjR6Ii8+PC9zdmc+) center no-repeat}.gpf-btn-icon-add:after{height:2.5rem;-webkit-mask:url(data:image/png;base64,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) -51px center no-repeat;mask:url(data:image/png;base64,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) -51px center no-repeat;width:2.5rem}.GPlocationOriginLabel{display:none;pointer-events:none}[class^=GPlocationPoint-]{padding:0}[id^=GPlocationPoint_]{justify-content:left}.GPlocationStageFlexInput{flex-wrap:wrap;width:281px}.GPlocationStageAdd{flex-basis:65%;min-height:40px;padding:.25rem .75rem .25rem 2.5rem;text-align:left;width:0}.GPlocationOriginLabel{flex-basis:fit-content}.GPlocationOriginPointerImg{flex-basis:2.5em}.GPlocationStageFlexInput input{flex-basis:33%;flex-grow:1}.GPmeasureTooltip{background-color:var(--background-contrast-grey);opacity:.8;padding:.2rem .4rem}.gpf-btn-icon-area:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTcuOTkyIDE2LjM5MmEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2em0xLjQ3NyAzLjU5OC41My41MyAxLjA2Mi0xLjA2LS41My0uNTN6bS0yLjUzNy0yLjUzOCAyLjUzOCAyLjUzOCAxLjA2LTEuMDYtMi41MzgtMi41Mzh6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIwLjUzIDE5Ljk5LjUzLS41M0wyMCAxOC40bC0uNTMuNTN6bS0zLjU5OCAxLjQ3N2EuNzUuNzUgMCAwIDAgMS4wNiAxLjA2MXptMi41MzgtMi41MzctMi41MzggMi41MzcgMS4wNiAxLjA2MSAyLjUzOC0yLjUzOHpNMS40NyA1LjY3OGEuNzUuNzUgMCAwIDAgMS4wNiAxLjA2ek00LjczOSA0LjUzbC41My0uNTMtMS4wNi0xLjA2LS41MzEuNTN6TTIuNTMgNi43NCA0Ljc0IDQuNTMgMy42NzggMy40NyAxLjQ3IDUuNjc4eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im00LjczOSAzLjQ3LS41My0uNTNMMy4xNDggNGwuNTMuNTMxem0xLjE0NyAzLjI3YS43NS43NSAwIDAgMCAxLjA2MS0xLjA2MXpNMy42NzggNC41MyA1Ljg4NiA2Ljc0bDEuMDYxLTEuMDYxTDQuNzQgMy40N3oiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTQuMjA5IDUuMTA1djExLjg4YzAgMS4zOTMuOTQ2IDIuNDc3IDIuMTYxIDIuNDc3SDE5LjEyIi8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTE5LjY3IDEyLjgzNlY2LjA2NWMwLTEuMTYyLS43ODctMi4wNjUtMS44LTIuMDY1aC03LjAzNSIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBkPSJtMTYuMzU3IDExLjk4NC00LjEyMyA0LjA4Nk0xNi4yNzcgNy4zOTMgNy41MjIgMTYuMDdNMTEuNjQ1IDcuMzE0IDcuNTIyIDExLjQiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTcuOTkyIDE2LjM5MmEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2em0xLjQ3NyAzLjU5OC41My41MyAxLjA2Mi0xLjA2LS41My0uNTN6bS0yLjUzNy0yLjUzOCAyLjUzOCAyLjUzOCAxLjA2LTEuMDYtMi41MzgtMi41Mzh6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIwLjUzIDE5Ljk5LjUzLS41M0wyMCAxOC40bC0uNTMuNTN6bS0zLjU5OCAxLjQ3N2EuNzUuNzUgMCAwIDAgMS4wNiAxLjA2MXptMi41MzgtMi41MzctMi41MzggMi41MzcgMS4wNiAxLjA2MSAyLjUzOC0yLjUzOHpNMS40NyA1LjY3OGEuNzUuNzUgMCAwIDAgMS4wNiAxLjA2ek00LjczOSA0LjUzbC41My0uNTMtMS4wNi0xLjA2LS41MzEuNTN6TTIuNTMgNi43NCA0Ljc0IDQuNTMgMy42NzggMy40NyAxLjQ3IDUuNjc4eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im00LjczOSAzLjQ3LS41My0uNTNMMy4xNDggNGwuNTMuNTMxem0xLjE0NyAzLjI3YS43NS43NSAwIDAgMCAxLjA2MS0xLjA2MXpNMy42NzggNC41MyA1Ljg4NiA2Ljc0bDEuMDYxLTEuMDYxTDQuNzQgMy40N3oiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTQuMjA5IDUuMTA1djExLjg4YzAgMS4zOTMuOTQ2IDIuNDc3IDIuMTYxIDIuNDc3SDE5LjEyIi8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTE5LjY3IDEyLjgzNlY2LjA2NWMwLTEuMTYyLS43ODctMi4wNjUtMS44LTIuMDY1aC03LjAzNSIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBkPSJtMTYuMzU3IDExLjk4NC00LjEyMyA0LjA4Nk0xNi4yNzcgNy4zOTMgNy41MjIgMTYuMDdNMTEuNjQ1IDcuMzE0IDcuNTIyIDExLjQiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-length:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIxIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi44OTQgNi4xODdhLjUuNSAwIDAgMCAuNzA3LjcwN3ptMS40MTQtMS40MTRMNi44OTQgNi4xODdsLjcwNy43MDdMOS4wMTUgNS40OHpNOC45NzQgOC4yNjZhLjUuNSAwIDEgMCAuNzA3LjcwOHptMS40MTQtMS40MTRMOC45NzQgOC4yNjZsLjcwNy43MDggMS40MTQtMS40MTV6TTExLjA1MyAxMC4zNDZhLjUuNSAwIDEgMCAuNzA3LjcwN3ptMS40MTQtMS40MTQtMS40MTQgMS40MTQuNzA3LjcwNyAxLjQxNS0xLjQxNHpNMTMuMTMzIDEyLjQyNmEuNS41IDAgMSAwIC43MDcuNzA3em0xLjQxNC0xLjQxNC0xLjQxNCAxLjQxNC43MDcuNzA3IDEuNDE0LTEuNDE0eiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Im0xNi45OCAxMy40NDUtMS40MTQgMS40MTQiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im01LjUzNiAyIDE0LjE0MiAxNC4xNDItMy41MzYgMy41MzZMMiA1LjUzNnoiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIxIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi44OTQgNi4xODdhLjUuNSAwIDAgMCAuNzA3LjcwN3ptMS40MTQtMS40MTRMNi44OTQgNi4xODdsLjcwNy43MDdMOS4wMTUgNS40OHpNOC45NzQgOC4yNjZhLjUuNSAwIDEgMCAuNzA3LjcwOHptMS40MTQtMS40MTRMOC45NzQgOC4yNjZsLjcwNy43MDggMS40MTQtMS40MTV6TTExLjA1MyAxMC4zNDZhLjUuNSAwIDEgMCAuNzA3LjcwN3ptMS40MTQtMS40MTQtMS40MTQgMS40MTQuNzA3LjcwNyAxLjQxNS0xLjQxNHpNMTMuMTMzIDEyLjQyNmEuNS41IDAgMSAwIC43MDcuNzA3em0xLjQxNC0xLjQxNC0xLjQxNCAxLjQxNC43MDcuNzA3IDEuNDE0LTEuNDE0eiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Im0xNi45OCAxMy40NDUtMS40MTQgMS40MTQiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im01LjUzNiAyIDE0LjE0MiAxNC4xNDItMy41MzYgMy41MzZMMiA1LjUzNnoiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-azimuth:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIxIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xOC45NyAxMC4xOGMtLjM2IDAtLjY0LS4xNS0uODYtLjQ0cy0uMzMtLjcyLS4zMy0xLjI3YzAtLjYuMS0xLjE2LjMxLTEuNy4yLS41My40OC0xLjAxLjgzLTEuNDJhMy45IDMuOSAwIDAgMSAxLjE2LS45N2MuNDMtLjIzLjg3LS4zNSAxLjMyLS4zNS4yMyAwIC40NC4wMy42NC4wOC4yLjA2LjM4LjEzLjUzLjIzbC41OC0uMjZoLjI5bC0uNzggNC4zN2MtLjA3LjQzIDAgLjY1LjIyLjY1LjEzIDAgLjI3LS4wNy40My0uMjJzLjMxLS4zOS40Ny0uNzNsLjIxLjA4Yy0uNDkgMS4zMS0xLjEgMS45Ni0xLjg2IDEuOTZxLS41NTUgMC0uODEtLjM5Yy0uMTctLjI2LS4yMi0uNjMtLjE1LTEuMTJoLS4wM2MtLjM2LjUtLjcxLjg4LTEuMDUgMS4xM3MtLjcxLjM4LTEuMTEuMzh6bS4zMS0yLjM3YzAgLjQzLjA0Ljc1LjEzLjk2cy4yNS4zMS40OS4zMS40OC0uMTEuNzEtLjMzLjQ1LS40Ny42NC0uNzVsLjUzLTNjLS4xMS0uMTQtLjIzLS4yNS0uMzYtLjMyYTEgMSAwIDAgMC0uNDctLjExYy0uMzQgMC0uNjMuMTUtLjg4LjQ2cy0uNDUuNzEtLjU4IDEuMmMtLjE0LjQ5LS4yMSAxLjAyLS4yMSAxLjU3eiIvPjxwYXRoIGQ9Ik0yMC45IDE1LjcyaC01LjUyYy0uMDctMy4yNC0xLjUxLTYuMTUtMy43Ny04LjE3bDUuNDUtNi4yM0wxNS41NSAwIDEwIDYuMzVhMTEuMiAxMS4yIDAgMCAwLTUuOTItMS42OWgtMXYyaDFjMS42NyAwIDMuMjMuNDUgNC41OSAxLjIybC0zLjYxIDQuMTNjLS4zMS0uMDgtLjY0LS4xMy0uOTgtLjEzLTIuMjUgMC00LjA5IDEuODMtNC4wOSA0LjA5czEuODMgNC4wOSA0LjA5IDQuMDljMS42MiAwIDMuMDItLjk2IDMuNjgtMi4zM0gyMC45di0yLjAxTTEwLjMgOS4wNWE5LjI1IDkuMjUgMCAwIDEgMy4wOCA2LjY2SDguMTVhNC4wNyA0LjA3IDAgMCAwLTEuMjgtMi43M2wzLjQ0LTMuOTN6bS02LjIxIDljLTEuMTUgMC0yLjA5LS45NC0yLjA5LTIuMDlzLjk0LTIuMDkgMi4wOS0yLjA5IDIuMDkuOTQgMi4wOSAyLjA5LS45NCAyLjA5LTIuMDkgMi4wOSIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMjMuOTh2MjAuMDVIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIxIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xOC45NyAxMC4xOGMtLjM2IDAtLjY0LS4xNS0uODYtLjQ0cy0uMzMtLjcyLS4zMy0xLjI3YzAtLjYuMS0xLjE2LjMxLTEuNy4yLS41My40OC0xLjAxLjgzLTEuNDJhMy45IDMuOSAwIDAgMSAxLjE2LS45N2MuNDMtLjIzLjg3LS4zNSAxLjMyLS4zNS4yMyAwIC40NC4wMy42NC4wOC4yLjA2LjM4LjEzLjUzLjIzbC41OC0uMjZoLjI5bC0uNzggNC4zN2MtLjA3LjQzIDAgLjY1LjIyLjY1LjEzIDAgLjI3LS4wNy40My0uMjJzLjMxLS4zOS40Ny0uNzNsLjIxLjA4Yy0uNDkgMS4zMS0xLjEgMS45Ni0xLjg2IDEuOTZxLS41NTUgMC0uODEtLjM5Yy0uMTctLjI2LS4yMi0uNjMtLjE1LTEuMTJoLS4wM2MtLjM2LjUtLjcxLjg4LTEuMDUgMS4xM3MtLjcxLjM4LTEuMTEuMzh6bS4zMS0yLjM3YzAgLjQzLjA0Ljc1LjEzLjk2cy4yNS4zMS40OS4zMS40OC0uMTEuNzEtLjMzLjQ1LS40Ny42NC0uNzVsLjUzLTNjLS4xMS0uMTQtLjIzLS4yNS0uMzYtLjMyYTEgMSAwIDAgMC0uNDctLjExYy0uMzQgMC0uNjMuMTUtLjg4LjQ2cy0uNDUuNzEtLjU4IDEuMmMtLjE0LjQ5LS4yMSAxLjAyLS4yMSAxLjU3eiIvPjxwYXRoIGQ9Ik0yMC45IDE1LjcyaC01LjUyYy0uMDctMy4yNC0xLjUxLTYuMTUtMy43Ny04LjE3bDUuNDUtNi4yM0wxNS41NSAwIDEwIDYuMzVhMTEuMiAxMS4yIDAgMCAwLTUuOTItMS42OWgtMXYyaDFjMS42NyAwIDMuMjMuNDUgNC41OSAxLjIybC0zLjYxIDQuMTNjLS4zMS0uMDgtLjY0LS4xMy0uOTgtLjEzLTIuMjUgMC00LjA5IDEuODMtNC4wOSA0LjA5czEuODMgNC4wOSA0LjA5IDQuMDljMS42MiAwIDMuMDItLjk2IDMuNjgtMi4zM0gyMC45di0yLjAxTTEwLjMgOS4wNWE5LjI1IDkuMjUgMCAwIDEgMy4wOCA2LjY2SDguMTVhNC4wNyA0LjA3IDAgMCAwLTEuMjgtMi43M2wzLjQ0LTMuOTN6bS02LjIxIDljLTEuMTUgMC0yLjA5LS45NC0yLjA5LTIuMDlzLjk0LTIuMDkgMi4wOS0yLjA5IDIuMDkuOTQgMi4wOSAyLjA5LS45NCAyLjA5LTIuMDkgMi4wOSIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMjMuOTh2MjAuMDVIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-position:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNy40IDE1LjMzVjIuNDNsNC42OSAyLjM1djcuMDVoMS45OVY0LjcyTDE4IDMuMDR2LjE5aC0uMDF2OC42aDJWLjc2YzAtLjA4LS4wMS0uMTYtLjA1LS4yNGEuNS41IDAgMCAwLS4xNy0uMTguNi42IDAgMCAwLS4yMy0uMDhjLS4wOCAwLS4xNyAwLS4yNC4wNEwxMyAzIDcuMDEgMGwtNyAzdjE2LjYxYy0uMDEuMDggMCAuMTYuMDUuMjQuMDQuMDcuMS4xNC4xNi4xOHMuMTUuMDcuMjMuMDhjLjA4IDAgLjE3IDAgLjI0LS4wNGw2LjMtMi43LjQtLjE4di0xLjg2em0tMS45OS41NEwyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIxLjQyMiAxOC41OTUtNy43ODgtNS41MjRjLS4yNzItLjE4MS0uNjM0IDAtLjYzNC4zNjJsLjkwNiA5LjUxYzAgLjM2MS41NDMuNDUyLjcyNC4xOGwxLjQ1LTIuNTM1IDEuNDQ4IDIuNTM1Yy4xODEuMzYyLjYzNC41NDQuOTk2LjU0NC4xODEgMCAuMzYzLS4wOS41NDQtLjE4Mi41NDMtLjM2Mi43MjQtLjk5Ni40NTItMS41MzlsLTEuNDQ5LTIuNTM2aDIuOTg5Yy40NTMtLjA5LjYzNC0uNTQzLjM2Mi0uODE1Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNy40IDE1LjMzVjIuNDNsNC42OSAyLjM1djcuMDVoMS45OVY0LjcyTDE4IDMuMDR2LjE5aC0uMDF2OC42aDJWLjc2YzAtLjA4LS4wMS0uMTYtLjA1LS4yNGEuNS41IDAgMCAwLS4xNy0uMTguNi42IDAgMCAwLS4yMy0uMDhjLS4wOCAwLS4xNyAwLS4yNC4wNEwxMyAzIDcuMDEgMGwtNyAzdjE2LjYxYy0uMDEuMDggMCAuMTYuMDUuMjQuMDQuMDcuMS4xNC4xNi4xOHMuMTUuMDcuMjMuMDhjLjA4IDAgLjE3IDAgLjI0LS4wNGw2LjMtMi43LjQtLjE4di0xLjg2em0tMS45OS41NEwyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIxLjQyMiAxOC41OTUtNy43ODgtNS41MjRjLS4yNzItLjE4MS0uNjM0IDAtLjYzNC4zNjJsLjkwNiA5LjUxYzAgLjM2MS41NDMuNDUyLjcyNC4xOGwxLjQ1LTIuNTM1IDEuNDQ4IDIuNTM1Yy4xODEuMzYyLjYzNC41NDQuOTk2LjU0NC4xODEgMCAuMzYzLS4wOS41NDQtLjE4Mi41NDMtLjM2Mi43MjQtLjk5Ni40NTItMS41MzlsLTEuNDQ5LTIuNTM2aDIuOTg5Yy40NTMtLjA5LjYzNC0uNTQzLjM2Mi0uODE1Ii8+PC9zdmc+) center no-repeat}div[id^=GPmousePositionCoordinate-] input{color:inherit}div[id^=GPmousePositionAltitude-],div[id^=GPmousePositionCoordinate-]>div{display:flex;justify-content:space-between}div[id^=GPmousePositionCoordinate-] input[readonly]{font-size:1rem}.gpf-btn-icon-reverse:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI4Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi43NSAxLjAxSDQuODFMMy40MyAzLjA2IDIuMDUgMS4wMUguMTNsMi4yMyAzLjI1TDAgNy42OWgxLjkzbDEuNS0yLjI0IDEuNTIgMi4yNGgxLjkyTDQuNTEgNC4yNnpNMTIuNzQgMS4wMWwtMS44NCA0LjUtMS44My00LjVINy4ybDIuODEgNi42Ny0uMzcuODljLS4yOC42OC0uNjkuOS0xLjM1LjktLjI5IDAtLjYxLS4wNy0uODItLjE2djEuNDhjLjMyLjEzLjY4LjIxIDEuMTkuMjEgMS4yNyAwIDIuMDMtLjY5IDIuNDktMS43OUwxNC41MiAxaC0xLjc4ek00LjA4OCAxMS4wMThsLTItLjAxOGMtLjA0NSA0Ljk2IDMuNTk4IDkuMDkzIDguMzYyIDkuODE2YTguNCA4LjQgMCAwIDEtLjUxMS0yLjE0NWMtMy4zOTItLjg5LTUuODg0LTMuOTkzLTUuODUxLTcuNjUzTTIzLjg4IDIwLjAyYy4yMy0xLjE0LjExLTIuMzItLjM0LTMuMzlhNS45IDUuOSAwIDAgMC0yLjIxLTIuNjRjLS45OS0uNjUtMi4xNS0uOTktMy4zMy0uOTlzLTIuMzUuMzQtMy4zMy45OWMtLjk5LjY1LTEuNzYgMS41Ni0yLjIxIDIuNjRhNS42MyA1LjYzIDAgMCAwLS4zNCAzLjM5Yy4yMyAxLjE0LjggMi4xOSAxLjY0IDMuMDFMMTggMjcuMThsNC4yNC00LjE1Yy44NC0uODIgMS40MS0xLjg3IDEuNjQtMy4wMW0tMS45Ni0uMzhjLS4xNS43Ni0uNTQgMS40Ni0xLjA5IDIuMDFMMTggMjQuNDJsLTIuODMtMi43N2MtLjU2LS41NS0uOTQtMS4yNS0xLjEtMi4wMS0uMTUtLjc2LS4wOC0xLjU1LjIzLTIuMjYuMy0uNzIuODItMS4zMyAxLjQ3LTEuNzZhNC4wNjQgNC4wNjQgMCAwIDEgNC40NCAwIDMuODkzIDMuODkzIDAgMCAxIDEuNyA0LjAyeiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xOCAxNy4yOGMtLjY1IDAtMS4xNy41My0xLjE3IDEuMTdzLjUzIDEuMTcgMS4xNyAxLjE3IDEuMTctLjUzIDEuMTctMS4xNy0uNTMtMS4xNy0xLjE3LTEuMTciLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI4Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi43NSAxLjAxSDQuODFMMy40MyAzLjA2IDIuMDUgMS4wMUguMTNsMi4yMyAzLjI1TDAgNy42OWgxLjkzbDEuNS0yLjI0IDEuNTIgMi4yNGgxLjkyTDQuNTEgNC4yNnpNMTIuNzQgMS4wMWwtMS44NCA0LjUtMS44My00LjVINy4ybDIuODEgNi42Ny0uMzcuODljLS4yOC42OC0uNjkuOS0xLjM1LjktLjI5IDAtLjYxLS4wNy0uODItLjE2djEuNDhjLjMyLjEzLjY4LjIxIDEuMTkuMjEgMS4yNyAwIDIuMDMtLjY5IDIuNDktMS43OUwxNC41MiAxaC0xLjc4ek00LjA4OCAxMS4wMThsLTItLjAxOGMtLjA0NSA0Ljk2IDMuNTk4IDkuMDkzIDguMzYyIDkuODE2YTguNCA4LjQgMCAwIDEtLjUxMS0yLjE0NWMtMy4zOTItLjg5LTUuODg0LTMuOTkzLTUuODUxLTcuNjUzTTIzLjg4IDIwLjAyYy4yMy0xLjE0LjExLTIuMzItLjM0LTMuMzlhNS45IDUuOSAwIDAgMC0yLjIxLTIuNjRjLS45OS0uNjUtMi4xNS0uOTktMy4zMy0uOTlzLTIuMzUuMzQtMy4zMy45OWMtLjk5LjY1LTEuNzYgMS41Ni0yLjIxIDIuNjRhNS42MyA1LjYzIDAgMCAwLS4zNCAzLjM5Yy4yMyAxLjE0LjggMi4xOSAxLjY0IDMuMDFMMTggMjcuMThsNC4yNC00LjE1Yy44NC0uODIgMS40MS0xLjg3IDEuNjQtMy4wMW0tMS45Ni0uMzhjLS4xNS43Ni0uNTQgMS40Ni0xLjA5IDIuMDFMMTggMjQuNDJsLTIuODMtMi43N2MtLjU2LS41NS0uOTQtMS4yNS0xLjEtMi4wMS0uMTUtLjc2LS4wOC0xLjU1LjIzLTIuMjYuMy0uNzIuODItMS4zMyAxLjQ3LTEuNzZhNC4wNjQgNC4wNjQgMCAwIDEgNC40NCAwIDMuODkzIDMuODkzIDAgMCAxIDEuNyA0LjAyeiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xOCAxNy4yOGMtLjY1IDAtMS4xNy41My0xLjE3IDEuMTdzLjUzIDEuMTcgMS4xNyAxLjE3IDEuMTctLjUzIDEuMTctMS4xNy0uNTMtMS4xNy0xLjE3LTEuMTciLz48L3N2Zz4=) center no-repeat}.gpf-flex-reverse{align-items:flex-start;display:flex;flex-direction:column;justify-content:space-evenly}.gpf-panel-reverse{width:100%}.gpf-btn-icon-route:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE1Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMi43IDQuMzk5QTEuNyAxLjcgMCAxIDEgMi43IDFhMS43IDEuNyAwIDAgMSAwIDMuMzk5WiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTIuNyA0Ljk2djUuNjY4YTIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0IDIuOTc0IDIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0LTIuOTc0VjQuODA3YTIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0LTIuOTc0IDIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0IDIuOTc0djUuMzk2Ii8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im0xMi4xOTIgOC45NDggMi40MDQgMi40MDNNMTQuNTk3IDExLjM1MSAxNyA4Ljk0OCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE1Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMi43IDQuMzk5QTEuNyAxLjcgMCAxIDEgMi43IDFhMS43IDEuNyAwIDAgMSAwIDMuMzk5WiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTIuNyA0Ljk2djUuNjY4YTIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0IDIuOTc0IDIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0LTIuOTc0VjQuODA3YTIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0LTIuOTc0IDIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0IDIuOTc0djUuMzk2Ii8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im0xMi4xOTIgOC45NDggMi40MDQgMi40MDNNMTQuNTk3IDExLjM1MSAxNyA4Ljk0OCIvPjwvc3ZnPg==) center no-repeat}.GProuteFormMini{max-height:78px}.GProuteFormMini .GPelementShow{color:var(--grey-200-850)}.GProuteModeLabel{margin-bottom:.5rem}[id^=GProuteForm-] p.gpf-label{margin-bottom:.2rem;margin-top:0}[id^=GProuteForm-]>.GPpanelFooter{position:unset}[id^=GProuteSubmit-]{width:80%}[id^=GProuteForm-]>[class^=GPlocationPoint-]{margin-top:0}[id^=GProuteForm-]>p.gpf-label{margin-top:1rem}[id^=GProuteForm-].GProuteFormMini>p.gpf-label{margin-top:0}[id^=GProuteForm-]>p.gpf-label~p.gpf-label{margin-top:.5rem}button[id^=GProuteReset-],div[id^=GProuteResultsNew-]{min-width:2.5em}div[id^=GProuteResultsValueDist],div[id^=GProuteResultsValueTime]{color:var(--text-action-high-blue-france);font-weight:700}.GProuteResultsShowDetailsDiv{justify-content:left}div:has(input[id^=GProuteResultsShowDetails])+div[id^=GProuteResultsDetails-]{max-height:0;opacity:0;overflow:hidden}div:has(input[id^=GProuteResultsShowDetails]:checked)+div[id^=GProuteResultsDetails-]{max-height:200px;opacity:1;overflow-y:scroll}div[id^=GProuteResultsDetails-]{display:grid;gap:.5rem 5px;grid-template-columns:30px 1fr;max-width:350px;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s}.GProuteResultsDetailsInstruction,.GProuteResultsDetailsNumber{display:inline-block}.GProuteResultsDetailsNumber{font-weight:700;text-align:right;vertical-align:top}.GProuteExclusionsOptions{color:var(--text-label-grey);gap:.5rem}@media (max-width:576px){.gpf-mobile-fullscreen div[id^=GProuteResultsDetails-]{max-width:unset}}.gpf-widget-padding{padding-bottom:5px;padding-top:5px}.gpf-widget-color{background-color:var(--background-default-grey)}.GPlabelTitle,.gpf-panel__items_searchengine{border-bottom:1px solid var(--grey-900-175);color:var(--text-action-high-blue-france);padding:12px}.gpf-panel__items.GPautoCompleteProposal{box-sizing:border-box;height:45px;margin-bottom:0}.GPlabelTitle{background-color:var(--background-open-blue-france);font-size:1em;margin-bottom:0}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{max-height:unset}input[name^=inputSex].gpf-input,select[name^=inputSex].gpf-select{padding:unset}button[id^=GPsearchInputReset]{height:40px;width:40px}[id^=GPshowSearchDiv]{flex-direction:row-reverse}[id^=GPsearchEngine-]{flex-direction:column}[id^=GPsearchEngine-].gpf-widget-padding{align-items:center}div.GPbuttonsContainer>button{width:40px}.GPsearchFirstLineWrapper{height:40px}.gpf-widget-padding>.GPsearchFirstLineWrapper{margin:.5rem 0}.GPbuttonsContainer{height:56px;padding-left:10px}.GPsearchRadioContainer{background-color:var(--background-default-grey);display:flex;flex-direction:row;gap:1rem;max-height:0;overflow:clip;transition:max-height .3s;white-space:nowrap}[id^=GPsearchEngine-]:focus-within>.GPsearchRadioContainer,[id^=GPsearchEngine-]:has([id^=GPshowSearchByCoordinate-][aria-pressed=true])>.GPsearchRadioContainer,[id^=GPsearchEngine-]:hover>.GPsearchRadioContainer{max-height:3rem}.GPsearchRadioElements{display:flex;flex-direction:row;gap:1rem}.GPshowAdvancedSearch{align-items:center;color:var(--text-action-high-blue-france);cursor:pointer;display:flex;text-decoration:underline}.gpf-btn-icon-search{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZjVmNWZlIiBkPSJtMTguMDMxIDE2LjYxNyA0LjI4MyA0LjI4Mi0xLjQxNSAxLjQxNS00LjI4Mi00LjI4M0E4Ljk2IDguOTYgMCAwIDEgMTEgMjBjLTQuOTY4IDAtOS00LjAzMi05LTlzNC4wMzItOSA5LTkgOSA0LjAzMiA5IDlhOC45NiA4Ljk2IDAgMCAxLTEuOTY5IDUuNjE3bS0yLjAwNi0uNzQyQTYuOTggNi45OCAwIDAgMCAxOCAxMWMwLTMuODY4LTMuMTMzLTctNy03cy03IDMuMTMyLTcgNyAzLjEzMiA3IDcgN2E2Ljk4IDYuOTggMCAwIDAgNC44NzUtMS45NzV6Ii8+PC9zdmc+);background-position:50%;background-repeat:no-repeat;width:40px}form[id^=GPsearchInput-]{margin-left:8px;width:300px}button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]{border:none;max-width:300px}button[id^=GPshowSearchEnginePicto-]{border-radius:0 .25rem 0 0}.gpf-btn-icon-search-advanced:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLjIyNyAxMS4zMzNhNi43IDYuNyAwIDAgMS0uNjUyLTEuNTUgMiAyIDAgMCAwIC4wMDEtMy41NjUgNi42NiA2LjY2IDAgMCAxIDEuNjY3LTIuODkxIDIgMiAwIDAgMCAzLjA4OC0xLjc4MyA2LjY2IDYuNjYgMCAwIDEgMy4zMzguMDAxIDIgMiAwIDAgMCAzLjA4OCAxLjc4MmMuMzg2LjM5My43MjguODQgMS4wMTYgMS4zNC4yODkuNDk5LjUwNSAxLjAyLjY1MiAxLjU1YTIgMiAwIDAgMC0uMDAxIDMuNTY1IDYuNjYgNi42NiAwIDAgMS0xLjY2NyAyLjg5MSAyIDIgMCAwIDAtMy4wODggMS43ODMgNi42NiA2LjY2IDAgMCAxLTMuMzM4LS4wMDEgMiAyIDAgMCAwLTMuMDg4LTEuNzgyIDYuNyA2LjcgMCAwIDEtMS4wMTYtMS4zNE02IDExLjQ2NGEzLjMzIDMuMzMgMCAwIDEgMS41IDEuODQ3cS41LjA0NyAxIDBjLjI1NS0uNzguNzktMS40MzcgMS41LTEuODQ2YTMuMzMgMy4zMyAwIDAgMSAyLjM1LS4zNzdxLjI5LS40MS40OTktLjg2NUEzLjMzIDMuMzMgMCAwIDEgMTIgOGMwLS44NC4zMTMtMS42MjUuODQ5LTIuMjIzYTUuNCA1LjQgMCAwIDAtLjUtLjg2NUEzLjMzIDMuMzMgMCAwIDEgOC41IDIuNjg5YTUuMyA1LjMgMCAwIDAtMSAwQTMuMzMgMy4zMyAwIDAgMSA2IDQuNTM1Yy0uNzEuNDExLTEuNTQ3LjU0NS0yLjM1LjM3N3EtLjI5LjQxLS40OTkuODY1QzMuNjk4IDYuMzg4IDQuMDAxIDcuMTggNCA4YzAgLjg0LS4zMTMgMS42MjUtLjg0OSAyLjIyM3EuMjEuNDU2LjUuODY1QTMuMzMgMy4zMyAwIDAgMSA2IDExLjQ2NE04IDEwYTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNG0wLTEuMzMzYS42NjcuNjY3IDAgMSAwIDAtMS4zMzQuNjY3LjY2NyAwIDAgMCAwIDEuMzM0IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLjIyNyAxMS4zMzNhNi43IDYuNyAwIDAgMS0uNjUyLTEuNTUgMiAyIDAgMCAwIC4wMDEtMy41NjUgNi42NiA2LjY2IDAgMCAxIDEuNjY3LTIuODkxIDIgMiAwIDAgMCAzLjA4OC0xLjc4MyA2LjY2IDYuNjYgMCAwIDEgMy4zMzguMDAxIDIgMiAwIDAgMCAzLjA4OCAxLjc4MmMuMzg2LjM5My43MjguODQgMS4wMTYgMS4zNC4yODkuNDk5LjUwNSAxLjAyLjY1MiAxLjU1YTIgMiAwIDAgMC0uMDAxIDMuNTY1IDYuNjYgNi42NiAwIDAgMS0xLjY2NyAyLjg5MSAyIDIgMCAwIDAtMy4wODggMS43ODMgNi42NiA2LjY2IDAgMCAxLTMuMzM4LS4wMDEgMiAyIDAgMCAwLTMuMDg4LTEuNzgyIDYuNyA2LjcgMCAwIDEtMS4wMTYtMS4zNE02IDExLjQ2NGEzLjMzIDMuMzMgMCAwIDEgMS41IDEuODQ3cS41LjA0NyAxIDBjLjI1NS0uNzguNzktMS40MzcgMS41LTEuODQ2YTMuMzMgMy4zMyAwIDAgMSAyLjM1LS4zNzdxLjI5LS40MS40OTktLjg2NUEzLjMzIDMuMzMgMCAwIDEgMTIgOGMwLS44NC4zMTMtMS42MjUuODQ5LTIuMjIzYTUuNCA1LjQgMCAwIDAtLjUtLjg2NUEzLjMzIDMuMzMgMCAwIDEgOC41IDIuNjg5YTUuMyA1LjMgMCAwIDAtMSAwQTMuMzMgMy4zMyAwIDAgMSA2IDQuNTM1Yy0uNzEuNDExLTEuNTQ3LjU0NS0yLjM1LjM3N3EtLjI5LjQxLS40OTkuODY1QzMuNjk4IDYuMzg4IDQuMDAxIDcuMTggNCA4YzAgLjg0LS4zMTMgMS42MjUtLjg0OSAyLjIyM3EuMjEuNDU2LjUuODY1QTMuMzMgMy4zMyAwIDAgMSA2IDExLjQ2NE04IDEwYTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNG0wLTEuMzMzYS42NjcuNjY3IDAgMSAwIDAtMS4zMzQuNjY3LjY2NyAwIDAgMCAwIDEuMzM0IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-search-geolocate:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE5IDIwIj48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOS41IDE2LjI5MmE2LjI5MiA2LjI5MiAwIDEgMCAwLTEyLjU4NCA2LjI5MiA2LjI5MiAwIDAgMCAwIDEyLjU4NFoiLz48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xIDEwaDIuMjA4TTE1Ljc5MiAxMEgxOE05LjUgMS41djIuMjA4TTkuNSAxNi4yOTJWMTguNSIvPjxwYXRoIGZpbGw9IiMxMDEwOTIiIGQ9Ik05LjUgMTEuMTA0YTEuMTA0IDEuMTA0IDAgMSAwIDAtMi4yMDggMS4xMDQgMS4xMDQgMCAwIDAgMCAyLjIwOCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE5IDIwIj48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOS41IDE2LjI5MmE2LjI5MiA2LjI5MiAwIDEgMCAwLTEyLjU4NCA2LjI5MiA2LjI5MiAwIDAgMCAwIDEyLjU4NFoiLz48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xIDEwaDIuMjA4TTE1Ljc5MiAxMEgxOE05LjUgMS41djIuMjA4TTkuNSAxNi4yOTJWMTguNSIvPjxwYXRoIGZpbGw9IiMxMDEwOTIiIGQ9Ik05LjUgMTEuMTA0YTEuMTA0IDEuMTA0IDAgMSAwIDAtMi4yMDggMS4xMDQgMS4xMDQgMCAwIDAgMCAyLjIwOCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-icon-search-coordinate:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMTAxMDkyIiBkPSJNOS43MDIgNC44NjhIOC42NWMtLjQ5MSAwLS42OS0uMzUtLjQ1Ni0uNzcxQTI3MyAyNzMgMCAwIDEgMTAuMDA2Ljk2NGMuMjM0LS4zOTcuNjMxLS4zOTcuODY1LjAxMmE0MDkgNDA5IDAgMCAxIDEuNzY1IDMuMDVjLjI5Mi41MTUuMDkzLjgzLS41MDMuODQyaC0uOTdjMCAuMTQtLjAxMi4yMzQtLjAxMi4zNHY2LjEzNmMwIC4xNC4wODIuMzM5LjE4Ny40MiAyLjAxIDEuNDI3IDQuMDMzIDIuODQxIDYuMDU1IDQuMjU2LjAyNC4wMTEuMDU5LjAyMy4xMDUuMDQ2LjIxLS4yOC40MjEtLjU2LjYzMi0uODMuMzI3LS40Mi43MTMtLjM4NS45MTEuMTA2LjQ2OCAxLjA3NS45MjQgMi4xNjIgMS4zOCAzLjIzNy4yMS40OTEtLjAxMi43OTUtLjU1LjczN2EzNDcgMzQ3IDAgMCAxLTMuNDcxLS4zOTdjLS41ODUtLjA3LS43MjUtLjQzMy0uMzYzLS45bC40OTEtLjY2N2MuMDEyLS4wMTIuMDEyLS4wMzUuMDQ3LS4xMDVhMjI1IDIyNSAwIDAgMS0xLjExLS43OTVjLTEuNTktMS4xMjItMy4xOTEtMi4yMzMtNC43ODEtMy4zNTUtLjE5OS0uMTQtLjM0LS4xNjMtLjU1IDBhMTY3MiAxNjcyIDAgMCAxLTUuNjU3IDMuOTg2Yy0uMDQ3LjAzNS0uMDgyLjA1OS0uMTQuMTA2LjIyMi4zMDMuNDU1LjU4NC42NjYuODg4LjI5Mi40MDkuMTUyLjc3MS0uMzYyLjgzLTEuMTkzLjE1Mi0yLjM5Ny4yOTItMy41ODkuNDItLjQ0NC4wNDctLjY2Ni0uMjY4LS40OTEtLjcuMzg2LS45MjQuNzgzLTEuODQ4IDEuMTgtMi43NzEuMDgyLS4xODcuMTUzLS4zNzQuMjM0LS41NS4yLS40Mi41NzMtLjQ2Ny44NzctLjEwNWwuNTYxLjczN2MuMDEyLjAxMS4wMzUuMDIzLjA4Mi4wNDcuNjY2LS40NjggMS4zMzMtLjkzNiAyLjAxLTEuNDE1IDEuMjk4LS45MTIgMi41OTUtMS44MzUgMy45MDUtMi43MzUuMjIyLS4xNTIuMjkyLS4zMTYuMjkyLS41NzNWNC44NTd6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMTAxMDkyIiBkPSJNOS43MDIgNC44NjhIOC42NWMtLjQ5MSAwLS42OS0uMzUtLjQ1Ni0uNzcxQTI3MyAyNzMgMCAwIDEgMTAuMDA2Ljk2NGMuMjM0LS4zOTcuNjMxLS4zOTcuODY1LjAxMmE0MDkgNDA5IDAgMCAxIDEuNzY1IDMuMDVjLjI5Mi41MTUuMDkzLjgzLS41MDMuODQyaC0uOTdjMCAuMTQtLjAxMi4yMzQtLjAxMi4zNHY2LjEzNmMwIC4xNC4wODIuMzM5LjE4Ny40MiAyLjAxIDEuNDI3IDQuMDMzIDIuODQxIDYuMDU1IDQuMjU2LjAyNC4wMTEuMDU5LjAyMy4xMDUuMDQ2LjIxLS4yOC40MjEtLjU2LjYzMi0uODMuMzI3LS40Mi43MTMtLjM4NS45MTEuMTA2LjQ2OCAxLjA3NS45MjQgMi4xNjIgMS4zOCAzLjIzNy4yMS40OTEtLjAxMi43OTUtLjU1LjczN2EzNDcgMzQ3IDAgMCAxLTMuNDcxLS4zOTdjLS41ODUtLjA3LS43MjUtLjQzMy0uMzYzLS45bC40OTEtLjY2N2MuMDEyLS4wMTIuMDEyLS4wMzUuMDQ3LS4xMDVhMjI1IDIyNSAwIDAgMS0xLjExLS43OTVjLTEuNTktMS4xMjItMy4xOTEtMi4yMzMtNC43ODEtMy4zNTUtLjE5OS0uMTQtLjM0LS4xNjMtLjU1IDBhMTY3MiAxNjcyIDAgMCAxLTUuNjU3IDMuOTg2Yy0uMDQ3LjAzNS0uMDgyLjA1OS0uMTQuMTA2LjIyMi4zMDMuNDU1LjU4NC42NjYuODg4LjI5Mi40MDkuMTUyLjc3MS0uMzYyLjgzLTEuMTkzLjE1Mi0yLjM5Ny4yOTItMy41ODkuNDItLjQ0NC4wNDctLjY2Ni0uMjY4LS40OTEtLjcuMzg2LS45MjQuNzgzLTEuODQ4IDEuMTgtMi43NzEuMDgyLS4xODcuMTUzLS4zNzQuMjM0LS41NS4yLS40Mi41NzMtLjQ2Ny44NzctLjEwNWwuNTYxLjczN2MuMDEyLjAxMS4wMzUuMDIzLjA4Mi4wNDcuNjY2LS40NjggMS4zMzMtLjkzNiAyLjAxLTEuNDE1IDEuMjk4LS45MTIgMi41OTUtMS44MzUgMy45MDUtMi43MzUuMjIyLS4xNTIuMjkyLS4zMTYuMjkyLS41NzNWNC44NTd6Ii8+PC9zdmc+) center no-repeat}.gpf-btn-icon-search-reset{background-position:-25px}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{position:absolute;top:66px;width:inherit}[id^=GPautocompleteResults-]{border:1px solid var(--background-open-blue-france)}dialog[id^=GPgeocodeResultsList],div[id^=GPautoCompleteList]{background-color:var(--background-default-grey);height:fit-content;max-height:unset;position:absolute;width:320px}div[id^=GPautoCompleteList]{margin-left:2px;top:42px}.position-container-bottom-left [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-bottom-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-left [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList]{margin-left:8px;position:relative;top:unset;width:340px}.position-container-bottom-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList]{margin-right:10px}.gpf-widget-padding>div[id^=GPautoCompleteList]{margin:0;top:100%;width:100%}dialog[id^=GPgeocodeResultsList]{border-radius:4px;overflow:hidden;position:absolute;top:55px}div[id^=GPgeocodeResults-]{background-color:var(--background-default-grey);max-height:240px;overflow-y:auto;position:relative;width:100%}[id^=GPautocompleteResultsLocation],[id^=GPautocompleteResultsSuggest]{height:225px}@media (max-width:576px){.gpf-widget-padding>.GPsearchFirstLineWrapper{flex-direction:column;height:fit-content}.GPsearchRadioContainer{align-items:center;flex-direction:column}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{margin-left:unset;position:relative;top:unset}.GPsearchRadioContainer{gap:0;margin:0 8px}form[id^=GPsearchInput-]{margin-left:0}[id^=GPsearchEngine-]:focus-within>.GPsearchRadioContainer,[id^=GPsearchEngine-]:has([id^=GPshowSearchByCoordinate-][aria-pressed=true])>.GPsearchRadioContainer,[id^=GPsearchEngine-]:hover>.GPsearchRadioContainer{max-height:4rem}}.gpf-btn-icon-toolbox{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAlqAAAJagFGUcfpAAAAB3RJTUUH4AsKDCgkqrnTSAAAAw1JREFUSMe9ll2IlVUUhp9vnEintH+FulAyI+uihClKjSZtQJAJrRnDoKt+oCIIjSIrDCokKXQiCqkuTMFAJtQLCwItMsQbURmjiRIK+pmSoSjJ/JmnC98je6ZzjmVMCzbnO/vstd691nrf9R0YA1NRn2SsTX1E/UM9vVc1OdwC3A7cBLQD1wE/Al8AA0BfVVXf1vFbAmwCjgPjq+oUREsDkBuA3UBfwL4EXgS2AgJLgIPqw2pV+HUCG4B9/yTtF9Rj6pvqBeo4db7apU5N/VGXqofVHeo09Ub1N3Wdeo/6Z1m60SAL1KPqrQnWqR5Qt6pvqYfU1WqbWqnvqt+p89Sf1T61pSmQOkH9Wl2ZLDaru9T2gLapH6mvB6RXHVRvU79Rd6rnqteoH6vHGwEtV7/K4ZXq+qJME9VP1JfzfZU6lMwPqnvVSfltkvpMyl8X6L3ccmIyayuAdqjP5flZ9deA7M7lpqjjC5+eZkAH1AfT5LVxaFUfV39JoGXq72qHul39Qb0ypX5fvaIRUEnv6dHIZGAwe28Ac4DngQeAl4DFeZ4NLAAOAb3ZP1nEG6HREmgAmAEcBmYCTwFTgaXAEPAK0AMsBO4G7gT2A08Aj9YKM+qzbul61Q0hQ7+6L43tCVW71RXqCXVRUaJhdaOnbHIY2d2Mdd3q96F5e0TYFV3dl/4Nq/cHZE7m2avqLQXQeTlzohFQm/q5+k4C3ZFAD6mL4/h0frs6U2FzMpgdoEujq371ZCMg1GvDqjXqkTCuI1mtyZnLQv9dYWItO9VLwsC7GgIVYPfGaYU6K5rZmJtPUPeoAwla85lbALWcEagA61Svyoj5QD0nAbaoP0U71AJFvKoX50J/A2odDVRVFWo/8Fk00p13y2tAJzAv+6cvVmjGYo3QUWudjC4EPgSORjNHgGXAY3kfzcoqbcaZ9NM6eoID24CLMhGGgA5geabFzVn1bBAYBs4HLm/Wm3HqttB2ZtHof7va1U/Ts7oZvQ10AWuB67PO1vYAc+tls9qxsZETtinf/6PV/gX9b/YXjLd1o+WqCcMAAAAASUVORK5CYII=);background-position:3px;background-repeat:no-repeat}.gpf-btn-icon-zoom-in{height:inherit;width:inherit}.gpf-btn-icon-zoom-in:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwTTEyIDd2MTAiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwTTEyIDd2MTAiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41Ii8+PC9zdmc+) center no-repeat}.gpf-btn-icon-zoom-out{height:inherit;width:inherit}.gpf-btn-icon-zoom-out:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwIi8+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAuNzUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwIi8+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAuNzUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIvPjwvc3ZnPg==) center no-repeat}.ol-custom-full-screen button{background-position:50%;background-repeat:no-repeat;height:40px;width:40px}.ol-custom-full-screen button.ol-custom-full-screen-false:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuMTI1IDIuMjVhLjc1Ljc1IDAgMCAwIDAgMS41em00LjM3NSAxLjVoLjc1di0xLjVoLS43NXptLTQuMzc1IDBIMjAuNXYtMS41aC00LjM3NXoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjEuMjUgM3YtLjc1aC0xLjVWM3ptLTEuNSA0LjM3NWEuNzUuNzUgMCAwIDAgMS41IDB6bTAtNC4zNzV2NC4zNzVoMS41VjN6TTcuMzc1IDIxLjI1YS43NS43NSAwIDAgMCAwLTEuNXpNMyAxOS43NWgtLjc1djEuNUgzem00LjM3NSAwSDN2MS41aDQuMzc1eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0yLjI1IDIwLjV2Ljc1aDEuNXYtLjc1em0xLjUtNC4zNzVhLjc1Ljc1IDAgMCAwLTEuNSAwem0wIDQuMzc1di00LjM3NWgtMS41VjIwLjV6TTIwLjIxMiA0LjM0OWwuNTMtLjUzLTEuMDYtMS4wNjEtLjUzMS41M3ptLTYuNzE4IDQuNTk2YS43NS43NSAwIDEgMCAxLjA2IDEuMDZ6bTUuNjU3LTUuNjU3LTUuNjU3IDUuNjU3IDEuMDYgMS4wNiA1LjY1OC01LjY1NnoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNOS45OTkgMTQuNTYyYS43NS43NSAwIDEgMC0xLjA2LTEuMDZ6bS02LjcxOCA0LjU5Ni0uNTMuNTMgMS4wNiAxLjA2MS41MzEtLjUzem01LjY1Ny01LjY1Ny01LjY1NyA1LjY1NyAxLjA2MSAxLjA2TDEwIDE0LjU2M3oiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuMTI1IDIuMjVhLjc1Ljc1IDAgMCAwIDAgMS41em00LjM3NSAxLjVoLjc1di0xLjVoLS43NXptLTQuMzc1IDBIMjAuNXYtMS41aC00LjM3NXoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjEuMjUgM3YtLjc1aC0xLjVWM3ptLTEuNSA0LjM3NWEuNzUuNzUgMCAwIDAgMS41IDB6bTAtNC4zNzV2NC4zNzVoMS41VjN6TTcuMzc1IDIxLjI1YS43NS43NSAwIDAgMCAwLTEuNXpNMyAxOS43NWgtLjc1djEuNUgzem00LjM3NSAwSDN2MS41aDQuMzc1eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0yLjI1IDIwLjV2Ljc1aDEuNXYtLjc1em0xLjUtNC4zNzVhLjc1Ljc1IDAgMCAwLTEuNSAwem0wIDQuMzc1di00LjM3NWgtMS41VjIwLjV6TTIwLjIxMiA0LjM0OWwuNTMtLjUzLTEuMDYtMS4wNjEtLjUzMS41M3ptLTYuNzE4IDQuNTk2YS43NS43NSAwIDEgMCAxLjA2IDEuMDZ6bTUuNjU3LTUuNjU3LTUuNjU3IDUuNjU3IDEuMDYgMS4wNiA1LjY1OC01LjY1NnoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNOS45OTkgMTQuNTYyYS43NS43NSAwIDEgMC0xLjA2LTEuMDZ6bS02LjcxOCA0LjU5Ni0uNTMuNTMgMS4wNiAxLjA2MS41MzEtLjUzem01LjY1Ny01LjY1Ny01LjY1NyA1LjY1NyAxLjA2MSAxLjA2TDEwIDE0LjU2M3oiLz48L3N2Zz4=) center no-repeat}.ol-custom-full-screen button.ol-custom-full-screen-true:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTMuNzczIDEwLjk2OGg0LjM4Yy40MSAwIC43NS0uMzQuNzUtLjc1cy0uMzQtLjc1LS43NS0uNzVoLTIuNTZsNS4xOS01LjE5Yy4yOS0uMjkuMjktLjc3IDAtMS4wNmEuNzU0Ljc1NCAwIDAgMC0xLjA2IDBsLTUuMiA1LjJ2LTIuNTZjMC0uNDEtLjM0LS43NS0uNzUtLjc1cy0uNzUuMzQtLjc1Ljc1djUuMTF6TTQuMjc4IDIwLjc4M2w1LjE5LTUuMTl2Mi41NmMwIC40MS4zNC43NS43NS43NXMuNzUtLjM0Ljc1LS43NXYtNS4xMmgtNS4xMmMtLjQxIDAtLjc1LjM0LS43NS43NXMuMzQuNzUuNzUuNzVoMi41NmwtNS4xOSA1LjE5Yy0uMjkuMjktLjI5Ljc3IDAgMS4wNnMuNzcuMjkgMS4wNiAwIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTMuNzczIDEwLjk2OGg0LjM4Yy40MSAwIC43NS0uMzQuNzUtLjc1cy0uMzQtLjc1LS43NS0uNzVoLTIuNTZsNS4xOS01LjE5Yy4yOS0uMjkuMjktLjc3IDAtMS4wNmEuNzU0Ljc1NCAwIDAgMC0xLjA2IDBsLTUuMiA1LjJ2LTIuNTZjMC0uNDEtLjM0LS43NS0uNzUtLjc1cy0uNzUuMzQtLjc1Ljc1djUuMTF6TTQuMjc4IDIwLjc4M2w1LjE5LTUuMTl2Mi41NmMwIC40MS4zNC43NS43NS43NXMuNzUtLjM0Ljc1LS43NXYtNS4xMmgtNS4xMmMtLjQxIDAtLjc1LjM0LS43NS43NXMuMzQuNzUuNzUuNzVoMi41NmwtNS4xOSA1LjE5Yy0uMjkuMjktLjI5Ljc3IDAgMS4wNnMuNzcuMjkgMS4wNiAwIi8+PC9zdmc+) center no-repeat}.gpf-btn-icon-overviewmap:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyA1LjcgOS4zIDNsNS40IDIuNyA1LjY3My0yLjQzMWEuNDUuNDUgMCAwIDEgLjYyNy40MTNWMTguM0wxNC43IDIxbC01LjQtMi43LTUuNjczIDIuNDMxQS40NS40NSAwIDAgMSAzIDIwLjMxN3ptMTIuNiAxMi45NTYgMy42LTEuNTQzVjUuNzNsLTMuNiAxLjU0M3ptLTEuOC0uMTE4VjcuMjYybC0zLjYtMS44djExLjI3NnptLTUuNC0xLjgxVjUuMzQzTDQuOCA2Ljg4N1YxOC4yN3oiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyA1LjcgOS4zIDNsNS40IDIuNyA1LjY3My0yLjQzMWEuNDUuNDUgMCAwIDEgLjYyNy40MTNWMTguM0wxNC43IDIxbC01LjQtMi43LTUuNjczIDIuNDMxQS40NS40NSAwIDAgMSAzIDIwLjMxN3ptMTIuNiAxMi45NTYgMy42LTEuNTQzVjUuNzNsLTMuNiAxLjU0M3ptLTEuOC0uMTE4VjcuMjYybC0zLjYtMS44djExLjI3NnptLTUuNC0xLjgxVjUuMzQzTDQuOCA2Ljg4N1YxOC4yN3oiLz48L3N2Zz4=) center no-repeat}.ol-overviewmap:has(>.gpf-btn-icon[aria-pressed=true]):after{transform:translateY(-100%)}.ol-overviewmap:not(.ol-collapsed){background:unset}.gpf-btn-icon-legends:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDQwIDQwIj48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Ik0yNC4xMjggMjYuMTExVjI4SDEyLjdjLS45NDQgMC0xLjctLjc1Ni0xLjctMS43VjExaDEzLjAzM3YxNC45MjJjMCAxLjA0Ljc1NiAxLjk4MyAxLjc5NSAyLjA3OCAxLjEzMy4wOTQgMi4xNzItLjg1IDIuMTcyLTEuOTgzdi0zLjAyM2gtMy44NzIiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTE0LjcwMyAxNS43MjJoNS42NjdNMTQuNzAzIDE5LjVoNS42NjdNMTQuNzAzIDIzLjI3OGg1LjY2NyIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTI2LjExMSAyOGgtMS45ODMiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDQwIDQwIj48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Ik0yNC4xMjggMjYuMTExVjI4SDEyLjdjLS45NDQgMC0xLjctLjc1Ni0xLjctMS43VjExaDEzLjAzM3YxNC45MjJjMCAxLjA0Ljc1NiAxLjk4MyAxLjc5NSAyLjA3OCAxLjEzMy4wOTQgMi4xNzItLjg1IDIuMTcyLTEuOTgzdi0zLjAyM2gtMy44NzIiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTE0LjcwMyAxNS43MjJoNS42NjdNMTQuNzAzIDE5LjVoNS42NjdNMTQuNzAzIDIzLjI3OGg1LjY2NyIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTI2LjExMSAyOGgtMS45ODMiLz48L3N2Zz4=) center no-repeat}.gpf-btn-header-legends{height:26px;position:absolute;width:26px;z-index:2}.gpf-btn-icon-header-legends{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjIiIGQ9Ik0xMi42IDEyLjY2NHYxLjMzNEg0LjUzM2MtLjY2NiAwLTEuMi0uNTM0LTEuMi0xLjJ2LTEwLjhoOS4yVjEyLjUzYzAgLjczMy41MzQgMS40IDEuMjY3IDEuNDY3LjguMDY2IDEuNTMzLS42IDEuNTMzLTEuNHYtMi4xMzRIMTIuNiIvPjxwYXRoIHN0cm9rZT0iIzEwMTA5MiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4yIiBkPSJNNS45NDcgNS4zMzFoNE01Ljk0NyA3Ljk5OGg0TTUuOTQ3IDEwLjY2NGg0Ii8+PHBhdGggc3Ryb2tlPSIjMTAxMDkyIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4yIiBkPSJNMTQgMTMuOTk4aC0xLjQiLz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:auto auto}.gpf-panel__body_legends{max-height:300px!important;overflow:auto}.gpf-panel__title_legends{color:#101092;font-size:1rem;font-weight:400;margin:0;padding:12px 15px;position:relative;right:-16px}.gpf-panel__header_legends{align-content:center;align-items:center;background:#e3e3fd;display:flex;flex-direction:row;height:48px}button[id^=GPcollapseLegend_ID_]{position:absolute;right:0;top:8px}.gpf-btn-icon-legends-collapse{box-shadow:none}.gpf-btn-icon-legends-collapse:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;transition:transform .2s ease-out 0s}.gpf-btn-icon-legends-collapse[aria-pressed=true]:after{box-shadow:none;transform:rotate(180deg)}.legend-entry-container{background-color:var(--background-overlap-grey);border-bottom:1px solid var(--border-default-grey);overflow:hidden;position:relative;top:0}.gpf-label-legends-name{line-height:56px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 40px)}button[id^=GPcollapseLegend_ID_][aria-pressed=true]+.legend-entry-image{border-top:1px solid var(--border-default-grey);max-height:300px;opacity:1;overflow:auto;padding:10px 0}.legend-entry-image{display:block;max-height:0;opacity:0;transition:max-height .5s ease-out 0s,opacity .5s ease-out 0s}.legends-entries{padding:0 16px}.gpf-btn-icon-catalog:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNCIgaGVpZ2h0PSIzNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuNzEzIDEyLjc3NGE0LjEyNSA0LjEyNSAwIDEgMSAxLjA2LTEuMDZsMi4wMDcgMi4wMDYtMS4wNiAxLjA2ek01IDZoMy43NXYxLjVINXptMCA1LjI1aDMuNzV2MS41SDV6bTAgNS4yNWgxMy41VjE4SDV6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNCIgaGVpZ2h0PSIzNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuNzEzIDEyLjc3NGE0LjEyNSA0LjEyNSAwIDEgMSAxLjA2LTEuMDZsMi4wMDcgMi4wMDYtMS4wNiAxLjA2ek01IDZoMy43NXYxLjVINXptMCA1LjI1aDMuNzV2MS41SDV6bTAgNS4yNWgxMy41VjE4SDV6Ii8+PC9zdmc+) center no-repeat}@media (max-width:576px){.gpf-mobile-fullscreen .GPtabContent{height:100vh;max-height:unset!important}}.gpf-btn-icon-territories:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi42NDggMS45ODZhLjczLjczIDAgMCAxIC43Ny4yODRsLjIxNy4zMWguMTEzYy4zMTcgMCAuNTkyLjIuNjg0LjQ5OWwuMDM5LjEyNmEuNzIuNzIgMCAwIDEgLjQxLjI1My43LjcgMCAwIDEgLjE4Ny4wNjNsLjI4Ny4xNGEuNy43IDAgMCAxIC4yOTQuMjY3bC4yMzYtLjA1NWEuNzIuNzIgMCAwIDEgLjYwOS4xMy43LjcgMCAwIDEgLjI3My41NTJ2LjI1bC40ODQuMzIzYS43LjcgMCAwIDEgLjMyOC4wNThsLjA3OC4wMzMuMDk5LS4wNGEuNzQuNzQgMCAwIDEgLjQ3NS0uMDIzbC4zODkuMTE0Yy4xMzYuMDQuMjU2LjExOC4zNDYuMjI2bC4yOC4zMzYuMzc0LS4wMzdhLjc0Ljc0IDAgMCAxIC40MS4wNzlsLjIyNi4xMi4zMzEuMDA2Yy4xMzMuMDAzLjI2LjA0LjM3MS4xMWwuMjg5LjE3OWMuMzEyLjE5Ni40MjIuNi4yNS45MmwtLjMxMi41NzgtLjAxNi4xNzRhLjcuNyAwIDAgMS0uMDM0LjE2bC0uMjIyLjYzLjAxNyAxLjA0NWEuNjkuNjkgMCAwIDEtLjI1Ni41NDlsLS40MDcuMzMzYS43LjcgMCAwIDEtLjI0My4xM2wtLjcuODg1Yy4yNC4wNi40NC4yMzguNTEyLjQ4MmwuMDc3LjI1Ni4wOTcuMTIuMjI4LjMzNGEuNjkuNjkgMCAwIDEtLjAxNS44MDFsLjI3LjMxN2EuNy43IDAgMCAxIC4xNjUuNDgzbC0uMDIuMzY0YS43LjcgMCAwIDEtLjI4LjUybC4wNS4wNDhhLjY5LjY5IDAgMCAxIC4wNjEuOTVsLjA4NS4wNTguMDktLjAzMWEuNzIuNzIgMCAwIDEgLjg4OC4zNjVsLjExNy4yNWEuNjkuNjkgMCAwIDEtLjA3OS43MTJsLS4wMzkuMDU1YS42OS42OSAwIDAgMS0uMjQ4LjY0MmwtLjcyLjU4Ny0uMzEyLjE5NmEuNy43IDAgMCAxLS4wNjMuMzE3LjcuNyAwIDAgMS0uNDAyLjM2OWwtLjYzMS4yMjhhMSAxIDAgMCAxLS4xNDkuMDM3bC0uNDcyLjA2NmEuNy43IDAgMCAxLS4yNzQtLjAxM2wtLjk3LS4yMjItLjY0NS0uMTg1LS4wNS0uMDE2YS43My43MyAwIDAgMS0uNDI5LS4wNzhsLS4yMjItLjEyYS43My43MyAwIDAgMS0uNTI4LS4wOTZsLS42MDguMzYtLjE5Mi4zOC4xODcuNjQzYS43LjcgMCAwIDEtLjA2OC41NC43MS43MSAwIDAgMS0uNDMzLjMyOGwtLjc2OC4yYS43LjcgMCAwIDEtLjE4NC4wMjRsLS4xMDItLjAwOC0uNjQ0LS4xMTItLjI5Mi4wNThhLjc0Ljc0IDAgMCAxLS40NS0uMDUzbC0uMzQ0LS4xNjRhLjcuNyAwIDAgMS0uMzcyLS40MjhsLS4yODItLjExMy0uMTE4LS4wMjVhLjcyLjcyIDAgMCAxLS42NTIuMjVsLTEuMjE1LS4xNjFhLjcuNyAwIDAgMS0uMjcyLS4wOTNsLS4yMDUtLjEyaC0uMzFhLjcyLjcyIDAgMCAxLS41Mi0uMjJsLS4yMDgtLjIxNy0uNjk2LS4yOTRhLjcuNyAwIDAgMS0uMzQtLjI5OGwtLjE0MS0uMjQ1LS4yOTgtLjE2MWEuNjkzLjY5MyAwIDAgMS0uMjA4LTEuMDU5bC40NjQtLjU1My4yNTctMS4zOGExIDEgMCAwIDEgLjAyNC0uMDkyLjcuNyAwIDAgMS0uMDQtLjMyOWwuMjEzLTEuODIyYTEgMSAwIDAgMSAuMDE5LS4xLjY5LjY5IDAgMCAxIC4xMzgtLjg1Ny43LjcgMCAwIDEtLjA3NS0uMjE2bC0uMzI4LS4xNjVhLjcuNyAwIDAgMS0uMjQ3LS4yMDZsLS41NTktLjcyOGEuNy43IDAgMCAxLS4xMjYtLjI2NWwtLjE2NS0uNzM3LS4wMDItLjAwOC0uMDc0LS4wNWEuNy43IDAgMCAxLS4xNjItLjE1MWwtLjI0LS4zMTMtMS4zNDMtLjUyNGgtLjM4NmEuNzIuNzIgMCAwIDEtLjYxNy0uMzQ3bC0uMTY0LS4yNzVhLjcuNyAwIDAgMS0uMDgzLS40OTUuNy43IDAgMCAxLS4yNzYtLjM1TDEuNzU0IDguMWEuNjk1LjY5NSAwIDAgMSAuMzczLS44NjVsMS4wMTctLjQ2NmEuNy43IDAgMCAxIC4yNDEtLjA2M2wxLjQwMS0uMTI0YS43NC43NCAwIDAgMSAuNTc0LjIwN2wuMjU5LjI1OS4wNTQtLjAyMWEuNzMuNzMgMCAwIDEgLjM5NC0uMDM2bC4xODcuMDMzLS4yNTMtLjU5Ni0uMTktLjc1N2EuNy43IDAgMCAxIC4xMi0uNTgzLjcxLjcxIDAgMCAxIC41MzUtLjI4NGwuNTc0LS4wMjlhLjcuNyAwIDAgMSAuNTU4LjIyMmwuNDkzLjUxOS42MzkuMTIzLjAwNy0uMDc5YS43LjcgMCAwIDEgLjQ4Mi0uNjA1bDEuMjEzLS40MDkuMzI1LS4yOTItLjA0Ni0uNzFhLjcuNyAwIDAgMSAuMDYtLjMzMWwuMjU0LS41NDVhLjcuNyAwIDAgMSAuNDctLjM4OHptLS4xODggMS45NzgtLjMzLjA4MS0uMDM2LjA3My4wNTUuODE2Yy4wMTMuMi0uMDcuMzkyLS4yMjcuNTI3bC0uNjczLjU3OGEuNy43IDAgMCAxLS4yNDkuMTM4bC0uNzM3LjIzOC4yMjguMTU3LS4yODMuMTM1YS42OC42OCAwIDAgMS0uMzQ3LjM3OGwtLjQ4My4yM2EuNzYuNzYgMCAwIDEtLjQ1LjA2bC0xLjE5LS4yMnYuMDA2bC4wNTcuNzk5Yy4wMjQuMzQyLS4yMy42NC0uNTkuNjk0bC0uMzA0LjA0NGEuNy43IDAgMCAxLS4yMzYtLjAwM2wtLjU4OS0uMS0uMjk5LjExYS43My43MyAwIDAgMS0uNzU1LS4xNTJsLS4zNDYtLjMzLS45MjMuMDc4LS4wMzkuMDE3Yy4xNS4xMy4yMy4zMTYuMjIyLjUwNWwuMDEuMDAzIDEuNjI2LjYwOHEuMTg1LjA3Mi4zLjIxNWwuMjA3LjI1N2EuNzUuNzUgMCAwIDEgLjM5Ni4wNzlsLjM5OC4yMDRjLjE2LjA4My4yOC4yMjMuMzMzLjM4NWwuNTUzLjI4NS0uNTk1LjE5N2EuNy43IDAgMCAxLS4zMTYuMjk5bC4zNS40MzYuNjE2LjI5NmEuNjQ1LjY0NSAwIDAgMSAuMzYyLjczNWwtLjAwNy4wMjguMTM0LjIzNmMuMTA3LjE5LjEwNy40MTEuMDEuNTk2bC4wNTcuMDQ0YS42Ny42NyAwIDAgMSAuMjE4LjMwNGwuMzg3IDEuMWEuNjIuNjIgMCAwIDEtLjAzNi40OTVsLjI2Mi43NDYtLjcyMi0uMzk4YS43LjcgMCAwIDEtLjI3Mi4wMTIuNi42IDAgMCAxLS4wODUuMTc3bC0uMzA1LjQ1MS0uMjYgMS4zMzVhLjY0LjY0IDAgMCAxLS4xNS4zMDFsLS4wNzUuMDg3YTEgMSAwIDAgMSAuMDQyLjA2M2wuMTIuMTk3LjYuMjQyYy4wOTMuMDQuMTY4LjA5LjIzMy4xNTRsLjA5Ny4wOTZoLjE5YS43NC43NCAwIDAgMSAuMzUzLjA5bC4yNTEuMTM5LjM4NC4wNDhhLjcuNyAwIDAgMSAuMTM2LS4xMzkuNzQuNzQgMCAwIDEgLjU4LS4xMzRsLjk4MS4yMDkuNjkuMjYzYS43LjcgMCAwIDEgLjM3LjMyOGwuMDMzLS4wMDdhMSAxIDAgMCAxIC4xNC0uMDEzbC4xMDMuMDA4LjUwNi4wODQtLjA1LS4xNjRhLjYyLjYyIDAgMCAxIC4wNDgtLjQ3NWwuMzk3LS43NTNhLjY3LjY3IDAgMCAxIC4yNjgtLjI3M2wxLjE2NS0uNjU4YS43My43MyAwIDAgMSAuNjcyLS4wMjYuNzQuNzQgMCAwIDEgLjU0LS4wNmwuMjU1LjA3NC4wMzQuMDFhLjc0Ljc0IDAgMCAxIC42NzQuMDc3bC4zOC4yNThjLjEuMDY5LjE4LjE2LjIzLjI2NmwuNTI4LjExNS4yNjItLjAzNS4wNTItLjAxOGEuNy43IDAgMCAxIC4xMDQtLjE3bC4yMjgtLjI2OGEuNy43IDAgMCAxIC4xNy0uMTQzbC40NDEtLjI2NS4xNzUtLjEzOC0uNTcyLS4zNzRhLjY1LjY1IDAgMCAxLS4zLS41MzFsLS4wMS0uNjM3LS4yMzgtLjIxNGEuNjQuNjQgMCAwIDEtLjIxNy0uNDc1di0uMjMyYzAtLjI2NS4xNjctLjUwMi40MjctLjYwNWwtLjA5My0uMTA1YS42NC42NCAwIDAgMS0uMTYyLS4zODVsLS4wMi0uMjlhMSAxIDAgMCAxIC4wMDEtLjA4Mi43NDMuNzQzIDAgMCAxLS44MjQtLjAxM2wtLjIwMS0uMTQ0YS42NC42NCAwIDAgMS0uMjMtLjc2bC4xMDctLjI1OS4wMy0uMzM0YS42My42MyAwIDAgMSAuMTEtLjMwM2wuNDQ3LS42NC40NjEtLjU2MWEuNi42IDAgMCAxIC4wMS0uMjMyLjY2LjY2IDAgMCAxIC4zNi0uNDRsLjIzOC0uMTE2YS43LjcgMCAwIDEgLjI1Mi0uMDcxbC0uMDEyLS42ODlhLjYuNiAwIDAgMSAuMDQtLjIzbC4yMjctLjYxNS4wMi0uMjE0YS42LjYgMCAwIDEgLjAzOS0uMTY0IDEgMSAwIDAgMS0uMDgzLS4wMzZsLS4xNzktLjA5LS41MjYuMDVhLjczLjczIDAgMCAxLS42MTQtLjIzOWwtLjM0OC0uNC0uMTA2LjA0MWEuNzQuNzQgMCAwIDEtLjU0My0uMDA1bC0uMTktLjA3Ny0uMDUzLjAwNGEuNzUuNzUgMCAwIDEtLjQ0My0uMTA2bC0uODYtLjU0OGEuNy43IDAgMCAxLS4xMzYtLjExMy43LjcgMCAwIDEtLjItLjAwOGwtLjQ2MS0uMDhhLjY4LjY4IDAgMCAxLS41Ny0uNThsLS4wMTEtLjEwNWEuNy43IDAgMCAxLS40NzUtLjMxNGwtLjAxLS4wMTZhLjcuNyAwIDAgMS0uMjk2LS4xNDZsLS4xNzItLjE0M2EuNy43IDAgMCAxLS4xMTMtLjEyLjcuNyAwIDAgMS0uNTItLjI4NHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi42NDggMS45ODZhLjczLjczIDAgMCAxIC43Ny4yODRsLjIxNy4zMWguMTEzYy4zMTcgMCAuNTkyLjIuNjg0LjQ5OWwuMDM5LjEyNmEuNzIuNzIgMCAwIDEgLjQxLjI1My43LjcgMCAwIDEgLjE4Ny4wNjNsLjI4Ny4xNGEuNy43IDAgMCAxIC4yOTQuMjY3bC4yMzYtLjA1NWEuNzIuNzIgMCAwIDEgLjYwOS4xMy43LjcgMCAwIDEgLjI3My41NTJ2LjI1bC40ODQuMzIzYS43LjcgMCAwIDEgLjMyOC4wNThsLjA3OC4wMzMuMDk5LS4wNGEuNzQuNzQgMCAwIDEgLjQ3NS0uMDIzbC4zODkuMTE0Yy4xMzYuMDQuMjU2LjExOC4zNDYuMjI2bC4yOC4zMzYuMzc0LS4wMzdhLjc0Ljc0IDAgMCAxIC40MS4wNzlsLjIyNi4xMi4zMzEuMDA2Yy4xMzMuMDAzLjI2LjA0LjM3MS4xMWwuMjg5LjE3OWMuMzEyLjE5Ni40MjIuNi4yNS45MmwtLjMxMi41NzgtLjAxNi4xNzRhLjcuNyAwIDAgMS0uMDM0LjE2bC0uMjIyLjYzLjAxNyAxLjA0NWEuNjkuNjkgMCAwIDEtLjI1Ni41NDlsLS40MDcuMzMzYS43LjcgMCAwIDEtLjI0My4xM2wtLjcuODg1Yy4yNC4wNi40NC4yMzguNTEyLjQ4MmwuMDc3LjI1Ni4wOTcuMTIuMjI4LjMzNGEuNjkuNjkgMCAwIDEtLjAxNS44MDFsLjI3LjMxN2EuNy43IDAgMCAxIC4xNjUuNDgzbC0uMDIuMzY0YS43LjcgMCAwIDEtLjI4LjUybC4wNS4wNDhhLjY5LjY5IDAgMCAxIC4wNjEuOTVsLjA4NS4wNTguMDktLjAzMWEuNzIuNzIgMCAwIDEgLjg4OC4zNjVsLjExNy4yNWEuNjkuNjkgMCAwIDEtLjA3OS43MTJsLS4wMzkuMDU1YS42OS42OSAwIDAgMS0uMjQ4LjY0MmwtLjcyLjU4Ny0uMzEyLjE5NmEuNy43IDAgMCAxLS4wNjMuMzE3LjcuNyAwIDAgMS0uNDAyLjM2OWwtLjYzMS4yMjhhMSAxIDAgMCAxLS4xNDkuMDM3bC0uNDcyLjA2NmEuNy43IDAgMCAxLS4yNzQtLjAxM2wtLjk3LS4yMjItLjY0NS0uMTg1LS4wNS0uMDE2YS43My43MyAwIDAgMS0uNDI5LS4wNzhsLS4yMjItLjEyYS43My43MyAwIDAgMS0uNTI4LS4wOTZsLS42MDguMzYtLjE5Mi4zOC4xODcuNjQzYS43LjcgMCAwIDEtLjA2OC41NC43MS43MSAwIDAgMS0uNDMzLjMyOGwtLjc2OC4yYS43LjcgMCAwIDEtLjE4NC4wMjRsLS4xMDItLjAwOC0uNjQ0LS4xMTItLjI5Mi4wNThhLjc0Ljc0IDAgMCAxLS40NS0uMDUzbC0uMzQ0LS4xNjRhLjcuNyAwIDAgMS0uMzcyLS40MjhsLS4yODItLjExMy0uMTE4LS4wMjVhLjcyLjcyIDAgMCAxLS42NTIuMjVsLTEuMjE1LS4xNjFhLjcuNyAwIDAgMS0uMjcyLS4wOTNsLS4yMDUtLjEyaC0uMzFhLjcyLjcyIDAgMCAxLS41Mi0uMjJsLS4yMDgtLjIxNy0uNjk2LS4yOTRhLjcuNyAwIDAgMS0uMzQtLjI5OGwtLjE0MS0uMjQ1LS4yOTgtLjE2MWEuNjkzLjY5MyAwIDAgMS0uMjA4LTEuMDU5bC40NjQtLjU1My4yNTctMS4zOGExIDEgMCAwIDEgLjAyNC0uMDkyLjcuNyAwIDAgMS0uMDQtLjMyOWwuMjEzLTEuODIyYTEgMSAwIDAgMSAuMDE5LS4xLjY5LjY5IDAgMCAxIC4xMzgtLjg1Ny43LjcgMCAwIDEtLjA3NS0uMjE2bC0uMzI4LS4xNjVhLjcuNyAwIDAgMS0uMjQ3LS4yMDZsLS41NTktLjcyOGEuNy43IDAgMCAxLS4xMjYtLjI2NWwtLjE2NS0uNzM3LS4wMDItLjAwOC0uMDc0LS4wNWEuNy43IDAgMCAxLS4xNjItLjE1MWwtLjI0LS4zMTMtMS4zNDMtLjUyNGgtLjM4NmEuNzIuNzIgMCAwIDEtLjYxNy0uMzQ3bC0uMTY0LS4yNzVhLjcuNyAwIDAgMS0uMDgzLS40OTUuNy43IDAgMCAxLS4yNzYtLjM1TDEuNzU0IDguMWEuNjk1LjY5NSAwIDAgMSAuMzczLS44NjVsMS4wMTctLjQ2NmEuNy43IDAgMCAxIC4yNDEtLjA2M2wxLjQwMS0uMTI0YS43NC43NCAwIDAgMSAuNTc0LjIwN2wuMjU5LjI1OS4wNTQtLjAyMWEuNzMuNzMgMCAwIDEgLjM5NC0uMDM2bC4xODcuMDMzLS4yNTMtLjU5Ni0uMTktLjc1N2EuNy43IDAgMCAxIC4xMi0uNTgzLjcxLjcxIDAgMCAxIC41MzUtLjI4NGwuNTc0LS4wMjlhLjcuNyAwIDAgMSAuNTU4LjIyMmwuNDkzLjUxOS42MzkuMTIzLjAwNy0uMDc5YS43LjcgMCAwIDEgLjQ4Mi0uNjA1bDEuMjEzLS40MDkuMzI1LS4yOTItLjA0Ni0uNzFhLjcuNyAwIDAgMSAuMDYtLjMzMWwuMjU0LS41NDVhLjcuNyAwIDAgMSAuNDctLjM4OHptLS4xODggMS45NzgtLjMzLjA4MS0uMDM2LjA3My4wNTUuODE2Yy4wMTMuMi0uMDcuMzkyLS4yMjcuNTI3bC0uNjczLjU3OGEuNy43IDAgMCAxLS4yNDkuMTM4bC0uNzM3LjIzOC4yMjguMTU3LS4yODMuMTM1YS42OC42OCAwIDAgMS0uMzQ3LjM3OGwtLjQ4My4yM2EuNzYuNzYgMCAwIDEtLjQ1LjA2bC0xLjE5LS4yMnYuMDA2bC4wNTcuNzk5Yy4wMjQuMzQyLS4yMy42NC0uNTkuNjk0bC0uMzA0LjA0NGEuNy43IDAgMCAxLS4yMzYtLjAwM2wtLjU4OS0uMS0uMjk5LjExYS43My43MyAwIDAgMS0uNzU1LS4xNTJsLS4zNDYtLjMzLS45MjMuMDc4LS4wMzkuMDE3Yy4xNS4xMy4yMy4zMTYuMjIyLjUwNWwuMDEuMDAzIDEuNjI2LjYwOHEuMTg1LjA3Mi4zLjIxNWwuMjA3LjI1N2EuNzUuNzUgMCAwIDEgLjM5Ni4wNzlsLjM5OC4yMDRjLjE2LjA4My4yOC4yMjMuMzMzLjM4NWwuNTUzLjI4NS0uNTk1LjE5N2EuNy43IDAgMCAxLS4zMTYuMjk5bC4zNS40MzYuNjE2LjI5NmEuNjQ1LjY0NSAwIDAgMSAuMzYyLjczNWwtLjAwNy4wMjguMTM0LjIzNmMuMTA3LjE5LjEwNy40MTEuMDEuNTk2bC4wNTcuMDQ0YS42Ny42NyAwIDAgMSAuMjE4LjMwNGwuMzg3IDEuMWEuNjIuNjIgMCAwIDEtLjAzNi40OTVsLjI2Mi43NDYtLjcyMi0uMzk4YS43LjcgMCAwIDEtLjI3Mi4wMTIuNi42IDAgMCAxLS4wODUuMTc3bC0uMzA1LjQ1MS0uMjYgMS4zMzVhLjY0LjY0IDAgMCAxLS4xNS4zMDFsLS4wNzUuMDg3YTEgMSAwIDAgMSAuMDQyLjA2M2wuMTIuMTk3LjYuMjQyYy4wOTMuMDQuMTY4LjA5LjIzMy4xNTRsLjA5Ny4wOTZoLjE5YS43NC43NCAwIDAgMSAuMzUzLjA5bC4yNTEuMTM5LjM4NC4wNDhhLjcuNyAwIDAgMSAuMTM2LS4xMzkuNzQuNzQgMCAwIDEgLjU4LS4xMzRsLjk4MS4yMDkuNjkuMjYzYS43LjcgMCAwIDEgLjM3LjMyOGwuMDMzLS4wMDdhMSAxIDAgMCAxIC4xNC0uMDEzbC4xMDMuMDA4LjUwNi4wODQtLjA1LS4xNjRhLjYyLjYyIDAgMCAxIC4wNDgtLjQ3NWwuMzk3LS43NTNhLjY3LjY3IDAgMCAxIC4yNjgtLjI3M2wxLjE2NS0uNjU4YS43My43MyAwIDAgMSAuNjcyLS4wMjYuNzQuNzQgMCAwIDEgLjU0LS4wNmwuMjU1LjA3NC4wMzQuMDFhLjc0Ljc0IDAgMCAxIC42NzQuMDc3bC4zOC4yNThjLjEuMDY5LjE4LjE2LjIzLjI2NmwuNTI4LjExNS4yNjItLjAzNS4wNTItLjAxOGEuNy43IDAgMCAxIC4xMDQtLjE3bC4yMjgtLjI2OGEuNy43IDAgMCAxIC4xNy0uMTQzbC40NDEtLjI2NS4xNzUtLjEzOC0uNTcyLS4zNzRhLjY1LjY1IDAgMCAxLS4zLS41MzFsLS4wMS0uNjM3LS4yMzgtLjIxNGEuNjQuNjQgMCAwIDEtLjIxNy0uNDc1di0uMjMyYzAtLjI2NS4xNjctLjUwMi40MjctLjYwNWwtLjA5My0uMTA1YS42NC42NCAwIDAgMS0uMTYyLS4zODVsLS4wMi0uMjlhMSAxIDAgMCAxIC4wMDEtLjA4Mi43NDMuNzQzIDAgMCAxLS44MjQtLjAxM2wtLjIwMS0uMTQ0YS42NC42NCAwIDAgMS0uMjMtLjc2bC4xMDctLjI1OS4wMy0uMzM0YS42My42MyAwIDAgMSAuMTEtLjMwM2wuNDQ3LS42NC40NjEtLjU2MWEuNi42IDAgMCAxIC4wMS0uMjMyLjY2LjY2IDAgMCAxIC4zNi0uNDRsLjIzOC0uMTE2YS43LjcgMCAwIDEgLjI1Mi0uMDcxbC0uMDEyLS42ODlhLjYuNiAwIDAgMSAuMDQtLjIzbC4yMjctLjYxNS4wMi0uMjE0YS42LjYgMCAwIDEgLjAzOS0uMTY0IDEgMSAwIDAgMS0uMDgzLS4wMzZsLS4xNzktLjA5LS41MjYuMDVhLjczLjczIDAgMCAxLS42MTQtLjIzOWwtLjM0OC0uNC0uMTA2LjA0MWEuNzQuNzQgMCAwIDEtLjU0My0uMDA1bC0uMTktLjA3Ny0uMDUzLjAwNGEuNzUuNzUgMCAwIDEtLjQ0My0uMTA2bC0uODYtLjU0OGEuNy43IDAgMCAxLS4xMzYtLjExMy43LjcgMCAwIDEtLjItLjAwOGwtLjQ2MS0uMDhhLjY4LjY4IDAgMCAxLS41Ny0uNThsLS4wMTEtLjEwNWEuNy43IDAgMCAxLS40NzUtLjMxNGwtLjAxLS4wMTZhLjcuNyAwIDAgMS0uMjk2LS4xNDZsLS4xNzItLjE0M2EuNy43IDAgMCAxLS4xMTMtLjEyLjcuNyAwIDAgMS0uNTItLjI4NHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-header-territories{height:26px;position:absolute;width:26px;z-index:2}.gpf-btn-icon-header-territories{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNOC42NjcgMTUuMzMzIDYgMTIuNjY3aDUuMzMzek04LjY2NyAybDIuNjY2IDIuNjY3SDZ6bTAgOGExLjMzMyAxLjMzMyAwIDEgMSAwLTIuNjY3IDEuMzMzIDEuMzMzIDAgMCAxIDAgMi42NjdNMiA4LjY2NyA0LjY2NyA2djUuMzMzem0xMy4zMzMgMC0yLjY2NiAyLjY2NlY2eiIvPjwvc3ZnPg==);background-position:50%;background-repeat:no-repeat;background-size:auto auto}.gpf-panel__body_territories{max-height:300px;overflow:auto}.gpf-panel__title_territories{color:#101092;font-size:1rem;font-weight:400;margin:0;padding:12px 15px;position:relative;right:-16px}.gpf-panel__header_territories{align-content:center;align-items:center;background:#e3e3fd;display:flex;flex-direction:row;height:48px}#GPterritoriesPanelClose{right:0;top:0}.gpf-tile{height:150px;width:150px}.tiles-reduce div.fr-tile{height:unset;padding:unset;width:unset}.fr-tile:hover{background-color:var(--background-contrast-grey)}.fr-tile__title:before{background-image:unset}.gpf-tile__header{align-items:center;display:flex;flex-direction:column}.territories-entries{display:grid}.tiles-direction.tiles-0{grid-template-columns:repeat(3,1fr);max-height:none!important}.tiles-direction.tiles-1{grid-template-columns:repeat(1,1fr)}.tiles-direction.tiles-2{grid-template-columns:repeat(2,1fr)}.tiles-direction.tiles-3{grid-template-columns:repeat(3,1fr)}.tiles-direction.tiles-4{grid-template-columns:repeat(4,1fr)}div.fr-tile div.fr-tile__header div.fr-tile__icon,div.fr-tile div.fr-tile__header div.fr-tile__thumbnail{display:block}.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__icon,.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__thumbnail{display:none}.fr-tile__icon{background-position:50%;background-repeat:no-repeat;background-size:auto auto;height:50px;width:50px}.tiles-icon div.fr-tile div.fr-tile__header div.fr-tile__thumbnail,.tiles-thumbnail div.fr-tile div.fr-tile__header div.fr-tile__icon{display:none}@media (max-width:576px){.tiles-direction.tiles-4{grid-template-columns:repeat(3,1fr)}}@media (max-width:382px){.tiles-direction.tiles-0,.tiles-direction.tiles-3,.tiles-direction.tiles-4{grid-template-columns:repeat(2,1fr)}}button[id^=GPshowControlListPicto-][aria-pressed=true]+dialog{width:370px}div[id^=GPcontrolList-] .GPshowOpen>span{font-size:32px;position:absolute;transform:translate(-5px,-2px)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content{display:flex;flex-direction:column;overflow:auto;padding:0 1.5rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content:not(:has(~.gpf-panel__footer)){padding-bottom:2rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div{align-items:center;column-gap:1rem;display:flex;flex-direction:row;padding:.5rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div:hover,dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div:hover>button{background-color:var(--hover)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button{height:40px;width:40px}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button:after{background-color:var(--text-default-grey)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>div{display:flex;flex-direction:column}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>div>span:nth-child(2){color:var(--text-mention-grey);font-size:.75rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__footer{background-color:var(--background-lifted-grey);padding:1rem 2rem 2rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__footer>button{justify-content:center;width:100%} /*# sourceMappingURL=Dsfr.css.map*/ \ No newline at end of file diff --git a/dist/modules/Dsfr.css.map b/dist/modules/Dsfr.css.map index d4b51ef9..49efb09a 100644 --- a/dist/modules/Dsfr.css.map +++ b/dist/modules/Dsfr.css.map @@ -1 +1 @@ -{"version":3,"file":"Dsfr.css","mappings":"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","sources":["webpack://geopf-extensions-openlayers/./src/packages/CSS/DSFRgeneralWidget.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Drawing/DSFRdrawingStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/ElevationPath/DSFRelevationPathStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/GetFeatureInfo/DSFRgetFeatureInfoStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Isochron/DSFRisochronStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/LayerImport/DSFRlayerImportStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/LayerSwitcher/DSFRlayerSwitcherStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/LocationSelector/DSFRlocationStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Measures/DSFRmeasureToolTipStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Measures/DSFRmeasureAreaStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Measures/DSFRmeasureLengthStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Measures/DSFRmeasureAzimuthStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/MousePosition/DSFRmousePositionStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/ReverseGeocoding/DSFRreverseGeocodingStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Route/DSFRrouteStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/SearchEngine/DSFRsearchEngineStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/ToolBoxMeasure/DSFRtoolBoxMeasureStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Zoom/DSFRzoomStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/FullScreen/DSFRfullScreenStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/OverviewMap/DSFRoverviewMapStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Legends/DSFRlegendsStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Catalog/DSFRcatalogStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Territories/DSFRterritoriesStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/ControlList/DSFRcontrolListStyle.css"],"sourcesContent":["/*\n * Liste des surcharges du mode DSFR\n */\n:root {\n --size-per-row: 44px;\n}\n\n.gpf-widget {\n position: absolute;\n pointer-events: auto;\n /* display: flex;*/\n padding: 2px;\n}\n\n.gpf-widget-button {\n width: 40px;\n}\n\n.gpf-panel {\n position: relative;\n background-color: unset;\n width: max-content;\n max-height: 100%;\n}\n\n.gpf-panel form {\n overflow: auto;\n padding: 0 2rem 2rem 2rem;\n}\n\n.gpf-panel--hidden {\n display: none;\n}\n\n.gpf-panel__body {\n overflow: unset;\n position: relative;\n max-height: 100% !important;\n flex: 1 1 auto;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.gpf-panel__header {}\n\n.gpf-panel__title {\n text-align: left;\n}\n\n.gpf-panel__footer {\n background-color: transparent;\n padding: 0;\n margin-top: 0;\n justify-content: center;\n}\n\n.gpf-panel__footer > input[type=\"submit\"] {\n width: 100%;\n}\n\n.gpf-panel__content {\n padding: unset;\n margin-bottom: unset;\n}\n\n.gpf-panel--close,\n.gpf-panel--reduce,\n.gpf-panel--info {\n position: relative;\n cursor: pointer;\n}\n\n/********/\n/* flex */\n/********/\n\n.gpf-flex {\n display: flex;\n align-items: center;\n flex-direction: row;\n justify-content: space-evenly;\n}\n\n.gpf-flex-column {\n display: flex;\n flex-direction: column;\n justify-content: space-evenly;\n}\n\n.gpf-flex-padding {\n padding: 5px;\n}\n\n.gpf-hidden {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\n.gpf-visible {\n display: block;\n visibility: visible;\n opacity: 100%;\n}\n\n/***********/\n/* waiting */\n/***********/\n\n.gpf-waiting {\n position: absolute;\n height: inherit;\n top: 80px;\n bottom: 0;\n left: 0;\n right: 0;\n border-radius: 4px;\n background-color: rgba(255, 255, 255, 0.9);\n font-size: 1.5em;\n font-weight: bold;\n overflow: hidden;\n}\n\n.gpf-waiting--hidden {\n display: none;\n}\n\n.gpf-waiting--visible {\n display: -webkit-flex;\n display: -ms-flexbox;\n display: -webkit-box;\n display: flex;\n z-index: 4000;\n}\n\n.gpf-waiting_info {\n margin: auto;\n}\n\n/***********/\n/* button */\n/***********/\n\n.gpf-btn-icon.gpf-btn--secondary,\n.gpf-btn-icon.gpf-btn--tertiary {\n background-color: var(--background-default-grey);\n}\n\n.gpf-widget > .gpf-btn-icon[aria-pressed=\"true\"] {\n background-color: var(--hover-tint);\n position: relative;\n}\n\n.gpf-widget:has(> .gpf-btn-icon[aria-pressed=\"true\"])::after {\n background-color: var(--background-action-high-blue-france);\n content: \"\";\n width: 3px;\n height: 40px;\n left: 44px;\n position: absolute;\n transform: translateY(-40px);\n}\n\n@supports(-moz-appearance:none) {\n .gpf-widget:has(.gpf-btn-icon[aria-pressed=\"true\"])::after {\n transform: unset;\n }\n}\n\n.gpf-widget > .gpf-btn-icon[aria-label]:hover::before {\n content: attr(aria-label);\n position: absolute;\n top: 0;\n color: var(--text-default-grey);\n font-size: .75rem;\n width: fit-content;\n white-space: nowrap;\n padding: .5rem .5rem 0.5rem 1.25rem;\n background-size: .375rem .5rem,.375rem .5rem,1px, 100%,calc(100% - 0.5rem) 100%;\n background-repeat: no-repeat;\n background-position: 0.125rem 50%, 0% 50%,0.375rem 100%,0.375rem 100%;\n filter: drop-shadow(0 2px 6px rgba(0,0,18,.16));\n filter: drop-shadow(var(--overlap-shadow));\n background-image: conic-gradient(from 56.31deg at 0% 50%,transparent 0deg,var(--background-overlap-grey) 0deg,var(--background-overlap-grey) 67.38deg,transparent 67.38deg),conic-gradient(from 56.31deg at 0% 50%,transparent 0deg,var(--border-default-grey) 0deg,var(--border-default-grey) 67.38deg,transparent 67.38deg),linear-gradient(90deg,var(--border-default-grey),var(--border-default-grey)),linear-gradient(90deg,var(--background-overlap-grey),var(--background-overlap-grey));\n}\n\n.position-container-top-left .gpf-widget > .gpf-btn-icon[aria-label]:hover::before,\n.position-container-bottom-left .gpf-widget > .gpf-btn-icon[aria-label]:hover::before {\n transform: translateX(24px);\n}\n\n.position-container-top-right .gpf-widget > .gpf-btn-icon[aria-label]:hover::before,\n.position-container-bottom-right .gpf-widget > .gpf-btn-icon[aria-label]:hover::before {\n transform: translateX(calc(-100% - 16px));\n padding: .5rem 1.25rem .5rem .5rem;\n background-size: .375rem .5rem, .375rem .5rem, 1px 100%, 100%;\n background-position: calc(100% - 0.125rem) 50%, 100% 50%, calc(100% - 0.375rem) 0, calc(100% - 0.375rem) 0;\n background-image: conic-gradient(from 236.31deg at 100% 50%, transparent 0deg, var(--background-overlap-grey) 0deg, var(--background-overlap-grey) 67.38deg, transparent 67.38deg), conic-gradient(from 236.31deg at 100% 50%, transparent 0deg, var(--border-default-grey) 0deg, var(--border-default-grey) 67.38deg, transparent 67.38deg), linear-gradient(90deg, var(--border-default-grey), var(--border-default-grey)), linear-gradient(90deg, var(--background-overlap-grey), var(--background-overlap-grey));\n}\n\n\n.gpf-btn--secondary,\n.gpf-btn--tertiary {\n position: relative;\n}\n\n.gpf-btn--tertiary::after,\n.gpf-btn--secondary::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n background-color: var(--text-action-high-blue-france);\n -webkit-mask: linear-gradient(#0000, #0000);\n mask: linear-gradient(#0000, #0000);\n}\n\n.gpf-btn--tertiary:disabled:after,\n.gpf-btn--secondary:disabled::after {\n background-color: var(--text-disabled-grey);\n}\n\n.position-container-top-left .gpf-button-no-gutter,\n.position-container-top-right .gpf-button-no-gutter {\n margin-bottom: -5px;\n}\n\n.position-container-bottom-left .gpf-button-no-gutter,\n.position-container-bottom-right .gpf-button-no-gutter {\n margin-top: -5px;\n}\n\n.gpf-btn--hidden {}\n\n.gpf-btn-icon-return {}\n\n.gpf-btn-icon-submit {}\n\n.gpf-btn-icon-reverse {}\n\n/* positionnement absolu en haut à droite du bouton \"fermer\" */\n.gpf-btn-icon-close {\n float: right;\n position: absolute;\n top: 0.5rem;\n right: 0.5rem;\n}\n\n.gpf-btn-icon-return {\n float: left;\n position: absolute;\n top: 0.5rem;\n left: 0.5rem;\n}\n\n.gpf-btn-icon-return::after {\n /* INFO : utiliser l'icone DSFR \"fr-icon-arrow-go-back-fill fr-btn--sm fr-btn--icon\" */\n -webkit-mask: url(\"img/GPreturnDSFR.png\") center no-repeat;\n mask: url(\"img/GPreturnDSFR.png\") center no-repeat;\n}\n\n.gpf-btn-icon {\n width: inherit;\n caret-color: transparent;\n}\n\n.gpf-btn-icon-reset::after {\n -webkit-mask:\n linear-gradient(#fff 0 0) top /100% 1px,\n linear-gradient(#fff 0 0) bottom/100% 1px,\n linear-gradient(#fff 0 0) left /1px 100%,\n linear-gradient(#fff 0 0) right /1px 100%,\n url(\"img/GPclose.png\") -25px center;\n mask:\n linear-gradient(#fff 0 0) top /100% 1px,\n linear-gradient(#fff 0 0) bottom/100% 1px,\n linear-gradient(#fff 0 0) left /1px 100%,\n linear-gradient(#fff 0 0) right /1px 100%,\n url(\"img/GPclose.png\") -25px center;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n background-color: var(--text-action-high-blue-france);\n}\n\n.gpf-btn-icon-info {\n width: 40px;\n height: 40px;\n}\n\n/*************/\n/* elements */\n/*************/\n\n.gpf-label {}\n\n.gpf-select {}\n\n.gpf-input {\n padding-left: 5px;\n}\n\n.gpf-radio-group {}\n\n.gpf-radio-btn-group {\n display: flex;\n gap: 1em;\n}\n\n.gpf-upload {}\n\n/*************/\n/* panel */\n/*************/\n\n.gpf-panel__list,\n.gpf-panel__advancedlist {\n z-index: 2;\n width: inherit;\n /* display: none; */\n position: absolute;\n max-height: 140px;\n background-color: #FFF;\n border: 1px solid #999;\n overflow-y: hidden;\n}\n\n.gpf-panel__advancedlist {\n width: calc(100% - 28px);\n border-top: none;\n font-size: 0.9em;\n}\n\n.gpf-panel__items:hover {\n color: #000000;\n background-color: #CEDBEF\n}\n\n.gpf-panel__items {\n width: 100%;\n height: 28px;\n line-height: 16px;\n padding: 6px 10px;\n color: #5E5E5E;\n font-size: 1.0em;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n}\n\n.gpf-panel::after {\n height: unset;\n flex: 0;\n}\n\n.gpf-panel::before {\n height: unset;\n flex: 0;\n}\n\n/***********/\n/* position*/\n/***********/\n:root {\n --size-per-row: 50px;\n}\n\n.position-container-top-left,\n.position-container-top-right,\n.position-container-bottom-left,\n.position-container-bottom-right {\n position: absolute;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n /* crée un décalage sur le searchEngine */\n /* align-items: center; */\n /* + 5px pour l'indicateur \"bouton actif\" */\n width: calc(var(--size-per-row) + 4px);\n min-height: var(--size-per-row);\n /* padding: 5px; */\n height: calc(100% - 8px);\n}\n\n.position-container-top-left,\n.position-container-top-right {\n top: 4px;\n}\n\n.position-container-top-left {\n float: left;\n left: 8px;\n}\n\n.position-container-top-right {\n float: right;\n right: 4px;\n}\n\n.position-container-bottom-left,\n.position-container-bottom-right {\n bottom: 4px;\n justify-content: flex-end;\n}\n\n.position-container-bottom-right {\n float: right;\n right: 4px;\n}\n\n.position-container-bottom-left {\n float: left;\n left: 8px;\n}\n\n/**********************/\n/* Feature info popup */\n/**********************/\n\n.gp-feature-info-div {\n bottom: 17px;\n position: relative;\n max-width: calc(100vw - 80px);\n padding: 10px;\n /* border-radius: 10px; */\n font-size: 0.75em;\n /* font-family: \"Open Sans\", sans-serif;\n color: #002A50; */\n background-color: var(--background-default-grey);\n box-shadow: 0 0 5px var(--text-default-grey);\n}\n\n.gp-feature-info-div::before {\n content: \"\";\n position: absolute;\n border-top: 15px solid var(--background-default-grey);\n border-right: 14px solid transparent;\n border-left: 14px solid transparent;\n bottom: -15px;\n margin-left: -14px;\n left: 50%;\n}\n\n.gp-feature-info-div .closer {\n position: absolute;\n display: block;\n width: 30px;\n height: 30px;\n top: 0;\n right: 0;\n border: none;\n cursor: pointer;\n border-top-right-radius: 10px;\n border-bottom-right-radius: 10px;\n background-color: var(--background-default-grey);\n}\n\n.gp-feature-info-div .closer::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n background-color: var(--text-action-high-blue-france);\n -webkit-mask: url(\"img/close-blue.svg\") center no-repeat;\n mask: url(\"img/close-blue.svg\") center no-repeat;\n -webkit-mask-size: 14px 14px;\n mask-size: 14px 14px;\n}\n\n.gp-features-content-div {\n max-width: 420px;\n min-width: 260px;\n max-height: 340px;\n overflow: auto;\n}\n\n.gp-features-content-div h5,\n.gp-features-content-div h6,\n.gp-features-content-div p,\n.gp-features-content-div ul {\n margin: 0;\n}\n\n.gp-features-content-div ul {\n padding: 0;\n list-style-type: none;\n}\n\n.geoportail-popup-content h5,\n.geoportail-popup-content h6,\n.geoportail-popup-content p,\n.gp-att-name-div,\n.gp-att-description-div,\n.gp-att-others-div {\n padding: 0 10px;\n}\n\n.geoportail-popup-content h5:not(:last-child),\n.geoportail-popup-content h6:not(:last-child),\n.geoportail-popup-content p:not(:last-child),\n.gp-att-description-div:not(:last-child),\n.gp-att-others-div:not(:last-child) {\n margin-bottom: 15px;\n}\n\n.geoportail-popup-content h5:last-child,\n.geoportail-popup-content h6:last-child,\n.geoportail-popup-content p:last-child,\n.gp-att-description-div:last-child,\n.gp-att-others-div:last-child,\n.gp-att-name-div {\n margin-bottom: 10px;\n}\n\n.geoportail-popup-content h5:first-child,\n.geoportail-popup-content h6:first-child,\n.geoportail-popup-content p:first-child,\n.gp-att-name-div:first-child,\n.gp-att-description-div:first-child,\n.gp-att-others-div:first-child {\n margin-top: 10px;\n}\n\n.gp-att-name-div,\n.gp-features-content-div h5 {\n padding-right: 35px;\n font-weight: bold;\n font-size: 1.2em;\n text-transform: uppercase;\n color: #0B6BA7;\n}\n\n.gp-features-content-div h6 {\n font-size: 1.1em;\n}\n\n.gp-att-description-div:not(:last-child),\n.gp-att-others-div:not(:last-child) {\n padding-bottom: 10px;\n border-bottom: 1px dotted #666;\n}\n\n/* surcharge css OpenLayers */\n.ol-disabled {\n --idle: transparent;\n --hover: var(--background-disabled-grey-hover);\n --active: var(--background-disabled-grey-active);\n background-color: var(--background-disabled-grey);\n color: var(--text-disabled-grey);\n cursor: not-allowed;\n /* instead of display: none */\n display: block;\n}\n\n.ol-scale-bar, .ol-scale-line {\n z-index: -1;\n}\n\n/* surcharge DSFR pour coller aux règles et au rendu de https://www.systeme-de-design.gouv.fr/composants-et-modeles/composants/accordeon/ */\n/* FIXME: pourquoi on a besoin de faire ça ?? normalement ces règles devraient être importées avec le reste... */\n.fr-collapse {\n --collapse-max-height: none;\n}\n\n.fr-collapse:not(.fr-collapse--expanded):not(.fr-collapsing) {\n --collapse-max-height: 0;\n}\n\n@media (max-width: 576px) {\n .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog {\n width: 100vw !important;\n }\n\n .gpf-mobile-fullscreen form div, .gpf-mobile-fullscreen form p {\n margin: auto;\n text-align: center;\n }\n\n .gpf-mobile-fullscreen .gpf-mobile-form {\n max-height: unset;\n height: 100vh;\n }\n\n .position-container-top-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-bottom-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-top-left .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-bottom-left .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog {\n top: -4px !important;\n left: -8px !important;\n right: unset !important;\n }\n\n .position-container-top-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-bottom-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog {\n right: -4px !important;\n left: unset !important;\n }\n}\n",".gpf-btn-icon-drawing::after {\n -webkit-mask: url(\"img/modifier.svg\") center no-repeat;\n mask: url(\"img/modifier.svg\") center no-repeat;\n}\n\n.gp-label-div,\n.gp-styling-div {\n width: 370px;\n transform: translateY(20px);\n}\n\n.gp-label-div textarea {\n max-width: 100%;\n margin-bottom: 1rem;\n}\n\n.gp-label-div input {\n width: 100%;\n}\n\n.gp-styling-option.fr-range--sm[data-fr-js-range]::before,\n.gp-styling-option.fr-range--sm[data-fr-js-range]::after {\n top: 1.74rem;\n}\n\n.drawing-tool {\n width: 40px;\n}\n\n.drawing-tool-active {\n background-color: var(--hover-tint);\n}\n\n/*\n* Drawing tools\n*/\nbutton[id^=drawing-tool-point-]::after {\n -webkit-mask: url(\"img/dsfr/create-point.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-point.svg\") center no-repeat;\n}\n\n\nbutton[id^=drawing-tool-line-]::after {\n -webkit-mask: url(\"img/dsfr/create-line.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-line.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-polygon-]::after {\n -webkit-mask: url(\"img/dsfr/create-polygon.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-polygon.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-text-]::after {\n -webkit-mask: url(\"img/dsfr/create-label.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-label.svg\") center no-repeat;\n}\n\n/*\n* Editing tools\n*/\nbutton[id^=drawing-tool-edit-]::after {\n -webkit-mask: url(\"img/dsfr/edit-geom.svg\") center no-repeat;\n mask: url(\"img/dsfr/edit-geom.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-display]::after {\n -webkit-mask: url(\"img/dsfr/edit-style.svg\") center no-repeat;\n mask: url(\"img/dsfr/edit-style.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-tooltip]::after {\n -webkit-mask: url(\"img/dsfr/edit-text.svg\") center no-repeat;\n mask: url(\"img/dsfr/edit-text.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-remove]::after {\n -webkit-mask: url(\"img/dsfr/delete.svg\") center no-repeat;\n mask: url(\"img/dsfr/delete.svg\") center no-repeat;\n}\n",".gpf-btn-icon-elevation::after {\n -webkit-mask: url(\"img/altipath.svg\") center no-repeat;\n mask: url(\"img/altipath.svg\") center no-repeat;\n}\n\n[id^=GPelevationPathPanelInfo] {\n position: absolute;\n float: left;\n top: 0;\n left: 0;\n}\n\n/* surcharge de fr-panel pour permettre la saisie sous la fenêtre de résultat */\n[id^=GPelevationPathPanel] {\n height: unset;\n}\n\n[id^=GPelevationPathPanelInfo]::after {\n -webkit-mask: url(\"../../img/GPinfo_secondary.svg\") center no-repeat;\n mask: url(\"../../img/GPinfo_secondary.svg\") center no-repeat;\n}\n\n[id^=GPelevationPathProfil] > #profileElevationByDefault > svg {\n transform: translateY(1rem);\n}\n\n[id^=GPelevationPathProfil] {\n height: 150px;\n width: 300px;\n}\n\n.GPelevationPathProfilWrapper {\n padding: 0 2rem;\n}\n\ndiv[id^=GPelevationPathInformationsContainer] {\n display: grid;\n width: calc(300px + 4rem);\n padding: 0 2rem 1rem 2rem;\n grid-template-columns: 50% 50%;\n}\n\n.GPelevationPathInformations {\n font-size: 13px;\n margin: 0;\n display: flex;\n flex-wrap: wrap;\n gap: 0 0.25rem;\n}\n\n.GPelevationPathInformations > span {\n white-space: nowrap;\n}\n\n/* Mode Mobile */\n\n@media (max-width: 576px) {\n div[id^=GPelevationPathInformationsContainer], #GPelevationPathProfil {\n margin: auto;\n }\n}","/* GET FEATURE INFO */\n.gpf-btn-icon-getfeatureinfo::after {\n -webkit-mask: url(\"img/NoGFI.svg\") center no-repeat;\n mask: url(\"img/NoGFI.svg\") center no-repeat;\n}\n\nbutton[id^=\"GPgetFeatureInfoPicto-\"][aria-pressed=\"true\"]::after {\n -webkit-mask: url(\"img/GFI.svg\") center no-repeat;\n mask: url(\"img/GFI.svg\") center no-repeat;\n}",".gpf-btn-icon-isocurve::after {\n -webkit-mask: url(\"img/isochrone.svg\") center no-repeat;\n mask: url(\"img/isochrone.svg\") center no-repeat;\n}\n\n.gpf-flex-isocurve {\n justify-content: unset;\n}\n\n.gpf-btn-icon-isocurve-reset {\n background-position: -29px center;\n}\n\n[id^=GPisochronPanel-] p.gpf-label {\n margin-top: 1rem;\n margin-bottom: 0.2rem;\n}\n\n[id^=\"GPisochronPanel-\"] p.gpf-label:first-child {\n margin-top: 0;\n}\n\ndiv[id^=\"GPisochronChoice\"] {\n justify-content: left;\n gap: 1em;\n}\n\ndiv[id^=GPisochronTransportChoice] > div {\n margin-top: 0.5rem;\n}\n\ndiv[id^=GPisochronValueChron],\ndiv[id^=GPisochronValueDist] {\n width: 281px;\n}\n\n.GPflexInput > input[id^=\"GPisochronValueChronInput2\"] {\n margin-top: 0;\n}\n\n.GPisoExclusionsOptions {\n gap: 1rem;\n}\n\n[id^=GPisochronForm-] > .GPpanelFooter {\n position: unset;\n}\n\n[id^=GPisochronReset-] {\n min-width: 2.5rem;\n}\n\n[id^=GPisochronSubmit-] {\n width: 80%;\n}\n\n",".gpf-btn-icon-import::after {\n -webkit-mask: url(\"img/layerimport.svg\") center no-repeat;\n mask: url(\"img/layerimport.svg\") center no-repeat;\n}\n\n.gpf-panel__items_layerimport {\n color: var(--text-action-high-blue-france);\n border-bottom: 1px solid var(--grey-900-175);\n list-style-type: none;\n height: auto;\n}\n","div[id^=GPlayerSwitcher-] {\n height: 44px;\n}\n\nbutton[id^=GPshowLayersListPicto] {\n width: 40px;\n}\n\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] + dialog[id^=GPlayersList] {\n width: 350px;\n}\n\n.GPlayerSwitcher_layer {\n background-color: var(--background-overlap-grey);\n padding-right: 40px;\n}\n\n.gpf-btn-icon-layerswitcher::after {\n -webkit-mask: url(\"img/dsfr/layerswitcher.svg\") center no-repeat;\n mask: url(\"img/dsfr/layerswitcher.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-ls-visibility {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-visibility::after {\n -webkit-mask: url(\"img/dsfr/visible-open.svg\") center no-repeat;\n mask: url(\"img/dsfr/visible-open.svg\") center no-repeat;\n}\n\nbutton[id^=GPvisibilityPicto_ID_][aria-pressed=\"false\"]::after {\n -webkit-mask: url(\"img/dsfr/visible-close-blanc.svg\") center no-repeat;\n mask: url(\"img/dsfr/visible-close-blanc.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-ls-remove {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-remove::after {\n -webkit-mask: url(\"img/dsfr/remove.svg\") center no-repeat;\n mask: url(\"img/dsfr/remove.svg\") center no-repeat;\n}\n\n\n.gpf-btn-icon-ls-collapse {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-collapse::after {\n -webkit-mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n transition: transform 0.2s ease-out 0s;\n}\n\n.gpf-btn-icon-ls-collapse[aria-pressed=\"true\"]::after {\n box-shadow: none;\n transform: rotate(180deg);\n}\n\n.gpf-btn-icon-ls-dragndrop {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-dragndrop::after {\n -webkit-mask: url(\"img/dsfr/dragndrop.svg\") center no-repeat;\n mask: url(\"img/dsfr/dragndrop.svg\") center no-repeat;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools {\n height: 56px;\n max-height: 56px;\n}\n\n/* Surchargé en inline avec \"hidden\" pour les couches n'ayant pas de description ou de titre */\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools > .GPlayerInfo {\n visibility: visible;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"false\"] {\n box-shadow: none;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"false \"] + .GPlayerAdvancedTools > .GPlayerInfo {\n visibility: hidden;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_] {\n position: absolute;\n top: 12px;\n right: 16px;\n}\n\ndiv[id^=GPbasicTools_ID_] {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n flex-wrap: nowrap;\n flex-direction: row-reverse;\n}\n\ndiv[id^=GPadvancedTools_ID_] {\n display: flex;\n align-content: center;\n align-items: center;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n height: inherit;\n}\n\n.gpf-btn-header {\n z-index: 2;\n position: absolute;\n width: 26px;\n height: 26px;\n}\n\n.gpf-btn-icon-layers {\n background-image: url(\"img/dsfr/layers.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n}\n\n.gpf-panel__body_ls {\n overflow: auto;\n max-height: 300px !important;\n}\n\n.gpf-panel__title_ls {\n color: #101092;\n padding: 12px 15px;\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n margin: 0;\n right: -16px;\n}\n.gpf-panel__header_ls {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-content: center;\n background: #E3E3FD;\n height: 48px;\n}\n\n.gpf-btn-icon-ls-info {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-info::after {\n -webkit-mask: url(\"img/dsfr/info.svg\") center no-repeat;\n mask: url(\"img/dsfr/info.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-ls-extent {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-extent::after {\n -webkit-mask: url(\"img/dsfr/extent.svg\") center no-repeat;\n mask: url(\"img/dsfr/extent.svg\") center no-repeat;\n}\n\n[id^=GPlayerInfoPanel] {\n position: absolute;\n height: initial;\n}\n\n.gpf-label-name {\n width: calc(100% - 96px);\n line-height: 28px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding-left: 4px;\n}\n\n.GPlayerDragNDrop {\n cursor: move;\n}\n\n.gpf-range__output {\n width: 35px;\n}\n\n.GPlayerOpacity.fr-range--sm[data-fr-js-range]::after,\n.GPlayerOpacity.fr-range--sm[data-fr-js-range]::before {\n top: 25%;\n}\n\ndiv[id^=GPlayerInfoContent] {\n width: 350px;\n}\n\n.gpf-btn-icon-close.GPlayersPanelClose {\n top: 0;\n right: 0;\n}\n\n.gpf-btn-icon-close.GPlayersPanelClose::after {\n margin-left: -0.125rem;\n}\n\n/* menu contextuel (mobile) */\n.GPlayerAdvancedToolsContextual {\n display: none;\n}\n\n.GPlayerAdvancedToolsContextual::after {\n -webkit-mask: url(\"./img/dsfr/context.svg\") center no-repeat;\n mask: url(\"./img/dsfr/context.svg\") center no-repeat;\n}\n\n.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"] {\n background-color: var(--hover-tint);\n overflow: visible;\n}\n\n.GPlayerSwitcher_layer:has(.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"]) {\n overflow: visible;\n}\n\n[id^=GPlayersList-] .GPpanelBody:has(.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"]) {\n overflow: visible;\n}\n\n.GPlayerAdvancedTools:has(.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"]) {\n position: relative;\n}\n\n.GPlayerAdvancedToolsContextual + div {\n display: none;\n flex-direction: column;\n flex-wrap: wrap;\n font-size: 13px;\n z-index: 12;\n background-color: var(--background-overlap-grey);\n border-radius: 6px;\n box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.15);\n padding: 14px 6px;\n gap: 6px;\n}\n\n.GPlayerAdvancedToolsContextual + div > button {\n padding-left: 2rem;\n}\n\n.GPlayerAdvancedToolsContextual + div > button[visibility=\"hidden\"] {\n display: none;\n}\n\n.GPlayerAdvancedToolsContextual + div > button::after {\n mask-position: left;\n}\n\n.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"] + div {\n display: flex;\n position: absolute;\n right: 0;\n top: calc(2.5rem + 8px);\n}\n\n@media (max-width: 576px) {\n .GPlayerAdvancedTools {\n width: calc(100% + 40px);\n }\n\n .GPlayerAdvancedTools > .GPlayerRemove, .GPlayerAdvancedTools > .GPlayerInfo, .GPlayerAdvancedTools > .GPlayerExtent {\n display: none;\n }\n\n .GPlayerAdvancedToolsContextual {\n display: inline-flex;\n }\n\n [id^=GPopacity_ID_] {\n flex-grow: 0.6;\n }\n}\n",".gpf-btn-icon-pointer::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask: url(\"img/reticle.svg\") center no-repeat;\n mask: url(\"img/reticle.svg\") center no-repeat;\n background-color: var(--text-inverted-blue-france);\n}\n\n.gpf-btn-icon-pointer {\n min-width: 2.5rem;\n position: relative;\n border-top-right-radius: 4px;\n}\n\n.GPlocationStageFlexInput:has(.GPlocationStageRemove) > .gpf-btn-icon-pointer {\n border-top-right-radius: 0px;\n}\n\n.gpf-btn-icon-remove {\n height: 2.5rem;\n width: 2.5rem;\n}\n\n.gpf-btn-icon-label {}\n.gpf-btn-icon-remove::after {\n -webkit-mask: url(\"img/dsfr/close-line.svg\") center no-repeat;\n mask: url(\"img/dsfr/close-line.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-add::after {\n -webkit-mask: url(\"img/GPlocationOptions.png\") -51px center no-repeat;\n mask: url(\"img/GPlocationOptions.png\") -51px center no-repeat;\n width: 2.5rem;\n height: 2.5rem;\n}\n\n.GPlocationOriginLabel {\n display: none;\n pointer-events: none;\n}\n\n[class^=\"GPlocationPoint-\"] {\n padding: 0;\n}\n\n[id^=\"GPlocationPoint_\"] {\n justify-content: left;\n}\n\n.GPlocationStageFlexInput {\n flex-wrap: wrap;\n width: 281px;\n}\n\n.GPlocationStageAdd {\n flex-basis: 65%;\n width: 0px;\n min-height: 40px;\n padding: 0.25rem 0.75rem 0.25rem 2.5rem;\n text-align: left;\n}\n\n.GPlocationOriginLabel {\n flex-basis: fit-content;\n}\n\n.GPlocationOriginPointerImg {\n flex-basis: 2.5em;\n}\n\n.GPlocationStageFlexInput input {\n flex-basis: 33%;\n flex-grow: 1;\n}\n","/* MEASURE TOOL */\n\n.GPmeasureTooltip {\n background-color: var(--background-contrast-grey);\n padding: 0.2rem 0.4rem;\n opacity: 0.8;\n}\n\n",".gpf-btn-icon-area::after {\n -webkit-mask: url(\"img/mesurer-surface.svg\") center no-repeat;\n mask: url(\"img/mesurer-surface.svg\") center no-repeat;\n}",".gpf-btn-icon-length::after {\n -webkit-mask: url(\"./img/mesurer-distance.svg\") center no-repeat;\n mask: url(\"./img/mesurer-distance.svg\") center no-repeat;\n}",".gpf-btn-icon-azimuth::after {\n -webkit-mask: url(\"img/mesurer-azimuth.svg\") center no-repeat;\n mask: url(\"img/mesurer-azimuth.svg\") center no-repeat;\n}",".gpf-btn-icon-position::after {\n -webkit-mask: url(\"img/position.svg\") center no-repeat;\n mask: url(\"img/position.svg\") center no-repeat;\n}\n\ndiv[id^=GPmousePositionCoordinate-] input {\n color: inherit;\n}\n\ndiv[id^=GPmousePositionAltitude-],\ndiv[id^=GPmousePositionCoordinate-] > div {\n display: flex;\n justify-content: space-between;\n}\n\ndiv[id^=GPmousePositionCoordinate-] input[readonly] {\n font-size: 1rem\n}",".gpf-btn-icon-reverse::after {\n -webkit-mask: url(\"img/reversegeocode.svg\") center no-repeat;\n mask: url(\"img/reversegeocode.svg\") center no-repeat;\n}\n\n.gpf-flex-reverse {\n /* INFO : surcharge de .gpf-flex par defaut */\n display: flex;\n align-items: flex-start;\n flex-direction: column;\n justify-content: space-evenly;\n}\n\n.gpf-panel-reverse {\n /* INFO : surcharge de .gpf-panel par defaut */\n width: 100%;\n}\n",".gpf-btn-icon-route::after {\n -webkit-mask: url(\"img/route.svg\") center no-repeat;\n mask: url(\"img/route.svg\") center no-repeat;\n}\n\n.GProuteFormMini {\n max-height: 78px;\n}\n\n.GProuteFormMini .GPelementShow {\n color: var(--grey-200-850);\n}\n\n.GProuteModeLabel {\n margin-bottom: 0.5rem;\n}\n\n[id^=GProuteForm-] p.gpf-label {\n margin-top: 0;\n margin-bottom: 0.2rem;\n}\n\n[id^=\"GProuteForm-\"] > .GPpanelFooter {\n position: unset;\n}\n\n[id^=\"GProuteSubmit-\"] {\n width: 80%;\n}\n\n[id^=\"GProuteForm-\"] > [class^=\"GPlocationPoint-\"] {\n margin-top: 0;\n}\n\n[id^=\"GProuteForm-\"] > p.gpf-label {\n margin-top: 1rem;\n}\n\n[id^=\"GProuteForm-\"].GProuteFormMini > p.gpf-label {\n margin-top: 0;\n}\n\n[id^=\"GProuteForm-\"] > p.gpf-label ~ p.gpf-label {\n margin-top: 0.5rem;\n}\n\n/* Reset picto */\nbutton[id^=GProuteReset-], div[id^=GProuteResultsNew-] {\n min-width: 2.5em;\n}\n\ndiv[id^=GProuteResultsValueDist],\ndiv[id^=GProuteResultsValueTime] {\n color: var(--text-action-high-blue-france);\n font-weight: bold;\n}\n\n.GProuteResultsShowDetailsDiv {\n justify-content: left;\n}\n\ndiv:has(input[id^=GProuteResultsShowDetails]) + div[id^=GProuteResultsDetails-] {\n max-height: 0;\n opacity: 0;\n overflow: hidden;\n}\n\ndiv:has(input[id^=GProuteResultsShowDetails]:checked) + div[id^=GProuteResultsDetails-] {\n max-height: 200px;\n opacity: 1;\n overflow-y: scroll;\n}\n\ndiv[id^=GProuteResultsDetails-] {\n max-width: 350px;\n transition: max-height 0.5s ease-in-out 0.25s, opacity 0.5s ease-in-out 0.25s;\n display: grid;\n grid-template-columns: 30px 1fr;\n gap: 0.5rem 5px;\n}\n\n.GProuteResultsDetailsNumber,\n.GProuteResultsDetailsInstruction {\n display: inline-block;\n}\n\n.GProuteResultsDetailsNumber {\n font-weight: bold;\n text-align: right;\n vertical-align: top;\n}\n\n.GProuteExclusionsOptions {\n gap: 0.5rem;\n color: var(--text-label-grey);\n}\n\n/* Mode Mobile */\n\n@media (max-width: 576px) {\n .gpf-mobile-fullscreen div[id^=\"GProuteResultsDetails-\"] {\n max-width: unset;\n }\n}",".gpf-widget-padding {\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.gpf-widget-color {\n background-color: var(--background-default-grey);\n}\n\n.gpf-panel__items_searchengine,\n.GPlabelTitle {\n color: var(--text-action-high-blue-france);\n border-bottom: 1px solid var(--grey-900-175);\n padding: 12px;\n}\n\n\n.gpf-panel__items.GPautoCompleteProposal {\n height: 45px;\n box-sizing: border-box;\n}\n\n.GPlabelTitle {\n background-color: var(--background-open-blue-france);\n font-size: 1.0em;\n}\n\ndialog[id^=GPcoordinateSearchPanel],\ndialog[id^=GPadvancedSearchPanel] {\n max-height: unset;\n}\n\nselect[name^=\"inputSex\"].gpf-select {\n padding: unset;\n}\n\ninput[name^=\"inputSex\"].gpf-input {\n padding: unset;\n}\n\nbutton[id^=GPsearchInputReset] {\n width: 40px;\n height: 40px;\n}\n\n[id^=\"GPshowSearchDiv\"] {\n flex-direction: row-reverse;\n}\n\n[id^=\"GPsearchEngine-\"] {\n flex-direction: column;\n}\n\n[id^=\"GPsearchEngine-\"].gpf-widget-padding {\n align-items: center;\n}\n\ndiv.GPbuttonsContainer > button {\n width: 40px;\n}\n\n.GPsearchFirstLineWrapper {\n height: 40px;\n}\n\n.gpf-widget-padding > .GPsearchFirstLineWrapper {\n margin: 0.5rem 0;\n}\n\n.GPbuttonsContainer {\n height: 56px;\n padding-left: 10px;\n}\n\n.GPsearchRadioContainer {\n display: flex;\n flex-direction: row;\n background-color: var(--background-default-grey);\n white-space: nowrap;\n max-height: 0;\n overflow: clip;\n transition: max-height 0.3s;\n gap: 1rem;\n}\n\n[id^=\"GPsearchEngine-\"]:has([id^=\"GPshowSearchByCoordinate-\"][aria-pressed=\"true\"]) > .GPsearchRadioContainer,\n[id^=\"GPsearchEngine-\"]:focus-within > .GPsearchRadioContainer,\n[id^=\"GPsearchEngine-\"]:hover > .GPsearchRadioContainer {\n max-height: 3rem;\n}\n\n.GPsearchRadioElements {\n display: flex;\n flex-direction: row;\n gap: 1rem;\n}\n\n.GPshowAdvancedSearch {\n color: var(--text-action-high-blue-france);\n text-decoration: underline;\n cursor: pointer;\n display: flex;\n align-items: center;\n}\n\n.gpf-btn-icon-search {\n background-image: url(\"img/dsfr/search-line.svg\");\n background-repeat: no-repeat;\n background-position: center center;\n /* cas particulier ou on n'utilise pas la class gpf-icon-button pour la largeur à cause du DOM du control*/\n width: 40px;\n}\n\nform[id^=GPsearchInput-] {\n margin-left: 8px;\n width: 300px;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] {\n max-width: 300px;\n border: none;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"] {\n border-radius: 0 0.25rem 0 0;\n}\n\n.gpf-btn-icon-search-advanced::after {\n -webkit-mask: url(\"img/dsfr/recherche-avancee.svg\") center no-repeat;\n mask: url(\"img/dsfr/recherche-avancee.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-search-geolocate::after {\n -webkit-mask: url(\"img/dsfr/localiser.svg\") center no-repeat;\n mask: url(\"img/dsfr/localiser.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-search-coordinate::after {\n -webkit-mask: url(\"img/dsfr/coordonnees.svg\") center no-repeat;\n mask: url(\"img/dsfr/coordonnees.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-search-reset {\n background-position: -25px center;\n}\n\ndialog[id^=GPcoordinateSearchPanel],\ndialog[id^=\"GPadvancedSearchPanel\"] {\n position: absolute;\n top: 66px;\n width: inherit;\n}\n\n/* Autocomplete list / geocode results */\n\n[id^=\"GPautocompleteResults-\"] {\n border: 1px solid var(--background-open-blue-france);\n}\n\ndiv[id^=GPautoCompleteList],\ndialog[id^=GPgeocodeResultsList] {\n width: 320px;\n position: absolute;\n height: fit-content;\n background-color: var(--background-default-grey);\n max-height: unset;\n}\n\ndiv[id^=GPautoCompleteList] {\n top: 42px;\n margin-left: 2px;\n}\n\n.position-container-top-left [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-bottom-left [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-top-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-bottom-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList] {\n width: 340px;\n position: relative;\n top: unset;\n margin-left: 8px;\n}\n\n.position-container-top-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-bottom-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList] {\n margin-right: 10px;\n}\n\n.gpf-widget-padding > div[id^=GPautoCompleteList] {\n top: 100%;\n width: 100%;\n margin: 0;\n}\n\ndialog[id^=GPgeocodeResultsList] {\n position: absolute;\n top: 55px;\n border-radius: 4px;\n overflow: hidden;\n}\n\ndiv[id^=GPgeocodeResults-] {\n width: 100%;\n position: relative;\n background-color: var(--background-default-grey);\n max-height: 240px;\n overflow-y: auto;\n}\n\n[id^=\"GPautocompleteResultsSuggest\"],\n[id^=\"GPautocompleteResultsLocation\"] {\n height: 225px;\n}\n\n/* Mode Mobile */\n@media (max-width: 576px) {\n\n .gpf-widget-padding > .GPsearchFirstLineWrapper {\n flex-direction: column;\n height: fit-content;\n }\n\n .GPsearchRadioContainer {\n flex-direction: column;\n align-items: center;\n }\n\n dialog[id^=GPcoordinateSearchPanel],\n dialog[id^=\"GPadvancedSearchPanel\"] {\n position: relative;\n top: unset;\n margin-left: unset;\n }\n\n .GPsearchRadioContainer {\n gap: 0;\n margin: 0 8px;\n }\n\n form[id^=GPsearchInput-] {\n margin-left: 0;\n }\n\n [id^=\"GPsearchEngine-\"]:has([id^=\"GPshowSearchByCoordinate-\"][aria-pressed=\"true\"]) > .GPsearchRadioContainer,\n [id^=\"GPsearchEngine-\"]:focus-within > .GPsearchRadioContainer,\n [id^=\"GPsearchEngine-\"]:hover > .GPsearchRadioContainer {\n max-height: 4rem;\n }\n}\n",".gpf-btn-icon-toolbox {\n background-repeat: no-repeat;\n background-image: url(\"img/GPtoolBoxMeasureOpen.png\");\n background-position: 3px center;\n}",".gpf-btn-icon-zoom-in {\n height: inherit;\n width: inherit;\n}\n\n.gpf-btn-icon-zoom-in::after {\n -webkit-mask: url(\"img/dsfr/zoom-in.svg\") center no-repeat;\n mask: url(\"img/dsfr/zoom-in.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-zoom-out {\n height: inherit;\n width: inherit;\n}\n\n.gpf-btn-icon-zoom-out::after {\n -webkit-mask: url(\"img/dsfr/zoom-out.svg\") center no-repeat;\n mask: url(\"img/dsfr/zoom-out.svg\") center no-repeat;\n}\n","/* surcharge en mode dsfr */\n.ol-custom-full-screen button {\n height: 40px;\n width: 40px;\n background-position: center center;\n background-repeat: no-repeat;\n}\n.ol-custom-full-screen button.ol-custom-full-screen-false::after {\n -webkit-mask: url(\"img/dsfr/fullscreen.svg\") center no-repeat;\n mask: url(\"img/dsfr/fullscreen.svg\") center no-repeat;\n}\n.ol-custom-full-screen button.ol-custom-full-screen-true::after {\n -webkit-mask: url(\"img/dsfr/fullscreen-off.svg\") center no-repeat;\n mask: url(\"img/dsfr/fullscreen-off.svg\") center no-repeat;\n}",".gpf-btn-icon-overviewmap::after {\n -webkit-mask: url(\"img/overviewmap.svg\") center no-repeat;\n mask: url(\"img/overviewmap.svg\") center no-repeat;\n}\n\n.ol-overviewmap:has(> .gpf-btn-icon[aria-pressed=\"true\"])::after {\n transform: translateY(-100%);\n}\n\n.ol-overviewmap:not(.ol-collapsed) {\n background: unset;\n}",".gpf-btn-icon-legends::after {\n -webkit-mask: url(\"img/dsfr/legends.svg\") center no-repeat;\n mask: url(\"img/dsfr/legends.svg\") center no-repeat;\n}\n\n.gpf-btn-header-legends {\n z-index: 2;\n position: absolute;\n width: 26px;\n height: 26px;\n}\n\n.gpf-btn-icon-header-legends {\n background-image: url(\"img/dsfr/header-legends.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n}\n\n.gpf-panel__body_legends {\n overflow: auto;\n max-height: 300px !important;\n}\n\n.gpf-panel__title_legends {\n color: #101092;\n padding: 12px 15px;\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n margin: 0;\n right: -16px;\n}\n.gpf-panel__header_legends {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-content: center;\n background: #E3E3FD;\n height: 48px;\n}\n\nbutton[id^=GPcollapseLegend_ID_] {\n position: absolute;\n top: 8px;\n right: 0;\n}\n\n.gpf-btn-icon-legends-collapse {\n box-shadow: none;\n}\n\n.gpf-btn-icon-legends-collapse::after {\n -webkit-mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n transition: transform 0.2s ease-out 0s;\n}\n\n.gpf-btn-icon-legends-collapse[aria-pressed=\"true\"]::after {\n box-shadow: none;\n transform: rotate(180deg);\n}\n\n.legend-entry-container {\n position: relative;\n top: 0;\n border-bottom: 1px solid var(--border-default-grey);\n overflow: hidden;\n}\n\n.legend-entry-container {\n background-color: var(--background-overlap-grey);\n}\n\n.gpf-label-legends-name {\n width: calc(100% - 40px);\n line-height: 56px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding-left: 4px;\n}\n\nbutton[id^=GPcollapseLegend_ID_][aria-pressed=\"true\"] + .legend-entry-image {\n opacity: 1;\n}\n\nbutton[id^=GPcollapseLegend_ID_][aria-pressed=\"true\"] + .legend-entry-image {\n max-height: 300px;\n overflow: auto;\n border-top: 1px solid var(--border-default-grey);\n padding: 10px 0;\n}\n\n.legend-entry-image {\n display: block;\n max-height: 0;\n opacity: 0;\n transition: max-height 0.5s ease-out 0s, opacity 0.5s ease-out 0s;\n}\n\n.legends-entries {\n padding: 0 16px;\n}\n",".gpf-btn-icon-catalog::after {\n -webkit-mask: url(\"img/dsfr/catalog.svg\") center no-repeat;\n mask: url(\"img/dsfr/catalog.svg\") center no-repeat;\n}\n\n/* Mode mobile doit prendre le dessus */\n\n@media (max-width: 576px) {\n .gpf-mobile-fullscreen .GPtabContent {\n max-height: unset !important;\n height: 100vh;\n }\n}",".gpf-btn-icon-territories::after {\n -webkit-mask: url(\"img/dsfr/territories.svg\") center no-repeat;\n mask: url(\"img/dsfr/territories.svg\") center no-repeat;\n}\n\n.gpf-btn-header-territories {\n z-index: 2;\n position: absolute;\n width: 26px;\n height: 26px;\n}\n\n.gpf-btn-icon-header-territories {\n background-image: url(\"img/dsfr/header-territories.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n}\n\n.gpf-panel__body_territories {\n overflow: auto;\n max-height: 300px;\n}\n\n.gpf-panel__title_territories {\n color: #101092;\n padding: 12px 15px;\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n margin: 0;\n right: -16px;\n}\n.gpf-panel__header_territories {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-content: center;\n background: #E3E3FD;\n height: 48px;\n}\n\n#GPterritoriesPanelClose {\n top: 0;\n right: 0;\n}\n\n/* surchage tile */\n.gpf-tile {\n height: 150px;\n width: 150px;\n}\n.tiles-reduce div.fr-tile {\n height: unset;\n width: unset;\n padding: unset;\n}\n.fr-tile:hover {\n background-color: var(--background-contrast-grey);\n}\n.fr-tile__title::before {\n background-image: unset;\n}\n.gpf-tile__header {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.territories-entries {\n display: grid;\n}\n/* direction */\ndialog.tiles-direction { }\n.territories-entries.tiles-direction {}\n\n/* nombre de tuiles */\n.tiles-direction.tiles-0 {\n max-height: none !important;\n grid-template-columns: repeat(3, 1fr);\n}\n.tiles-direction.tiles-1 {\n grid-template-columns: repeat(1, 1fr);\n}\n.tiles-direction.tiles-2 {\n grid-template-columns: repeat(2, 1fr);\n}\n.tiles-direction.tiles-3 {\n grid-template-columns: repeat(3, 1fr);\n}\n.tiles-direction.tiles-4 {\n grid-template-columns: repeat(4, 1fr);\n}\n\ndiv.fr-tile div.fr-tile__header div.fr-tile__icon,\ndiv.fr-tile div.fr-tile__header div.fr-tile__thumbnail {\n display: block;\n}\n\n/* reduce */\n.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__icon,\n.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__thumbnail {\n display: none;\n}\n\n.fr-tile__icon {\n /* background-image: url(\"img/dsfr/territories-small.svg\"); */\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n height: 50px;\n width: 50px;\n}\n\n.tiles-thumbnail div.fr-tile div.fr-tile__header div.fr-tile__icon {\n display: none;\n}\n.tiles-icon div.fr-tile div.fr-tile__header div.fr-tile__thumbnail {\n display: none;\n}\n\n/* affichage plein écran sur petit écran */\n@media (max-width: 576px) {\n /* si 4 tuiles de large, on force 3 tuiles de large */\n .tiles-direction.tiles-4 {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n\n/* sur tout petit écran, on force 2 colonnes max */\n@media (max-width: 382px) {\n .tiles-direction.tiles-0 {\n grid-template-columns: repeat(2, 1fr);\n }\n .tiles-direction.tiles-3 {\n grid-template-columns: repeat(2, 1fr);\n }\n .tiles-direction.tiles-4 {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n","button[id^=\"GPshowControlListPicto-\"][aria-pressed=\"true\"] + dialog {\n width: 370px;\n}\n\ndiv[id^=\"GPcontrolList-\"] .GPshowOpen > span {\n font-size: 32px;\n position: absolute;\n transform: translate(-5px, -2px);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content {\n display: flex;\n flex-direction: column;\n padding: 0 1.5rem;\n overflow: auto;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content:not(:has(~ .gpf-panel__footer)) {\n padding-bottom: 2rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div {\n display: flex;\n flex-direction: row;\n column-gap: 1rem;\n align-items: center;\n padding: 0.5rem 0.5rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div:hover {\n background-color: var(--hover);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div:hover > button {\n background-color: var(--hover);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button {\n height: 40px;\n width: 40px;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button::after {\n background-color: var(--text-default-grey);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > div {\n display: flex;\n flex-direction: column;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > div > span:nth-child(2) {\n color: var(--text-mention-grey);\n font-size: 0.75rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__footer {\n padding: 1rem 2rem 2rem 2rem;\n background-color: var(--background-lifted-grey);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__footer > button {\n width: 100%;\n justify-content: center;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"Dsfr.css","mappings":"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","sources":["webpack://geopf-extensions-openlayers/./src/packages/CSS/DSFRgeneralWidget.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Drawing/DSFRdrawingStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/ElevationPath/DSFRelevationPathStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/GetFeatureInfo/DSFRgetFeatureInfoStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Isochron/DSFRisochronStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/LayerImport/DSFRlayerImportStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/LayerSwitcher/DSFRlayerSwitcherStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/LocationSelector/DSFRlocationStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Measures/DSFRmeasureToolTipStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Measures/DSFRmeasureAreaStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Measures/DSFRmeasureLengthStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Measures/DSFRmeasureAzimuthStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/MousePosition/DSFRmousePositionStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/ReverseGeocoding/DSFRreverseGeocodingStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Route/DSFRrouteStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/SearchEngine/DSFRsearchEngineStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/ToolBoxMeasure/DSFRtoolBoxMeasureStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Zoom/DSFRzoomStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/FullScreen/DSFRfullScreenStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/OverviewMap/DSFRoverviewMapStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Legends/DSFRlegendsStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Catalog/DSFRcatalogStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/Territories/DSFRterritoriesStyle.css","webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/ControlList/DSFRcontrolListStyle.css"],"sourcesContent":["/*\n * Liste des surcharges du mode DSFR\n */\n:root {\n --size-per-row: 44px;\n}\n\n.gpf-widget {\n position: absolute;\n pointer-events: auto;\n /* display: flex;*/\n padding: 2px;\n}\n\n.gpf-widget-button {\n width: 40px;\n}\n\n.gpf-panel {\n position: relative;\n background-color: unset;\n width: max-content;\n max-height: 100%;\n}\n\n.gpf-panel form {\n overflow: auto;\n padding: 0 2rem 2rem 2rem;\n}\n\n.gpf-panel--hidden {\n display: none;\n}\n\n.gpf-panel__body {\n overflow: unset;\n position: relative;\n max-height: 100% !important;\n flex: 1 1 auto;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.gpf-panel__header {}\n\n.gpf-panel__title {\n text-align: left;\n}\n\n.gpf-panel__footer {\n background-color: transparent;\n padding: 0;\n margin-top: 0;\n justify-content: center;\n}\n\n.gpf-panel__footer > input[type=\"submit\"] {\n width: 100%;\n}\n\n.gpf-panel__content {\n padding: unset;\n margin-bottom: unset;\n}\n\n.gpf-panel--close,\n.gpf-panel--reduce,\n.gpf-panel--info {\n position: relative;\n cursor: pointer;\n}\n\n/********/\n/* flex */\n/********/\n\n.gpf-flex {\n display: flex;\n align-items: center;\n flex-direction: row;\n justify-content: space-evenly;\n}\n\n.gpf-flex-column {\n display: flex;\n flex-direction: column;\n justify-content: space-evenly;\n}\n\n.gpf-flex-padding {\n padding: 5px;\n}\n\n.gpf-hidden {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\n.gpf-visible {\n display: block;\n visibility: visible;\n opacity: 100%;\n}\n\n/***********/\n/* waiting */\n/***********/\n\n.gpf-waiting {\n position: absolute;\n height: inherit;\n top: 80px;\n bottom: 0;\n left: 0;\n right: 0;\n border-radius: 4px;\n background-color: rgba(255, 255, 255, 0.9);\n font-size: 1.5em;\n font-weight: bold;\n overflow: hidden;\n}\n\n.gpf-waiting--hidden {\n display: none;\n}\n\n.gpf-waiting--visible {\n display: -webkit-flex;\n display: -ms-flexbox;\n display: -webkit-box;\n display: flex;\n z-index: 4000;\n}\n\n.gpf-waiting_info {\n margin: auto;\n}\n\n/***********/\n/* button */\n/***********/\n\n.gpf-btn-icon.gpf-btn--secondary,\n.gpf-btn-icon.gpf-btn--tertiary {\n background-color: var(--background-default-grey);\n}\n\n.gpf-widget > .gpf-btn-icon[aria-pressed=\"true\"] {\n background-color: var(--hover-tint);\n position: relative;\n}\n\n.gpf-widget:has(> .gpf-btn-icon[aria-pressed=\"true\"])::after {\n background-color: var(--background-action-high-blue-france);\n content: \"\";\n width: 3px;\n height: 40px;\n left: 44px;\n position: absolute;\n transform: translateY(-40px);\n}\n\n@supports(-moz-appearance:none) {\n .gpf-widget:has(.gpf-btn-icon[aria-pressed=\"true\"])::after {\n transform: unset;\n }\n}\n\n.gpf-widget > .gpf-btn-icon[aria-label]:hover::before {\n content: attr(aria-label);\n position: absolute;\n top: 0;\n color: var(--text-default-grey);\n font-size: .75rem;\n width: fit-content;\n white-space: nowrap;\n padding: .5rem .5rem 0.5rem 1.25rem;\n background-size: .375rem .5rem,.375rem .5rem,1px, 100%,calc(100% - 0.5rem) 100%;\n background-repeat: no-repeat;\n background-position: 0.125rem 50%, 0% 50%,0.375rem 100%,0.375rem 100%;\n filter: drop-shadow(0 2px 6px rgba(0,0,18,.16));\n filter: drop-shadow(var(--overlap-shadow));\n background-image: conic-gradient(from 56.31deg at 0% 50%,transparent 0deg,var(--background-overlap-grey) 0deg,var(--background-overlap-grey) 67.38deg,transparent 67.38deg),conic-gradient(from 56.31deg at 0% 50%,transparent 0deg,var(--border-default-grey) 0deg,var(--border-default-grey) 67.38deg,transparent 67.38deg),linear-gradient(90deg,var(--border-default-grey),var(--border-default-grey)),linear-gradient(90deg,var(--background-overlap-grey),var(--background-overlap-grey));\n}\n\n.position-container-top-left .gpf-widget > .gpf-btn-icon[aria-label]:hover::before,\n.position-container-bottom-left .gpf-widget > .gpf-btn-icon[aria-label]:hover::before {\n transform: translateX(24px);\n}\n\n.position-container-top-right .gpf-widget > .gpf-btn-icon[aria-label]:hover::before,\n.position-container-bottom-right .gpf-widget > .gpf-btn-icon[aria-label]:hover::before {\n transform: translateX(calc(-100% - 16px));\n padding: .5rem 1.25rem .5rem .5rem;\n background-size: .375rem .5rem, .375rem .5rem, 1px 100%, 100%;\n background-position: calc(100% - 0.125rem) 50%, 100% 50%, calc(100% - 0.375rem) 0, calc(100% - 0.375rem) 0;\n background-image: conic-gradient(from 236.31deg at 100% 50%, transparent 0deg, var(--background-overlap-grey) 0deg, var(--background-overlap-grey) 67.38deg, transparent 67.38deg), conic-gradient(from 236.31deg at 100% 50%, transparent 0deg, var(--border-default-grey) 0deg, var(--border-default-grey) 67.38deg, transparent 67.38deg), linear-gradient(90deg, var(--border-default-grey), var(--border-default-grey)), linear-gradient(90deg, var(--background-overlap-grey), var(--background-overlap-grey));\n}\n\n\n.gpf-btn--secondary,\n.gpf-btn--tertiary {\n position: relative;\n}\n\n.gpf-btn--tertiary::after,\n.gpf-btn--secondary::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n background-color: var(--text-action-high-blue-france);\n -webkit-mask: linear-gradient(#0000, #0000);\n mask: linear-gradient(#0000, #0000);\n}\n\n.gpf-btn--tertiary:disabled:after,\n.gpf-btn--secondary:disabled::after {\n background-color: var(--text-disabled-grey);\n}\n\n.position-container-top-left .gpf-button-no-gutter,\n.position-container-top-right .gpf-button-no-gutter {\n margin-bottom: -5px;\n}\n\n.position-container-bottom-left .gpf-button-no-gutter,\n.position-container-bottom-right .gpf-button-no-gutter {\n margin-top: -5px;\n}\n\n.gpf-btn--hidden {}\n\n.gpf-btn-icon-return {}\n\n.gpf-btn-icon-submit {}\n\n.gpf-btn-icon-reverse {}\n\n/* positionnement absolu en haut à droite du bouton \"fermer\" */\n.gpf-btn-icon-close {\n float: right;\n position: absolute;\n top: 0.5rem;\n right: 0.5rem;\n}\n\n.gpf-btn-icon-return {\n float: left;\n position: absolute;\n top: 0.5rem;\n left: 0.5rem;\n}\n\n.gpf-btn-icon-return::after {\n /* INFO : utiliser l'icone DSFR \"fr-icon-arrow-go-back-fill fr-btn--sm fr-btn--icon\" */\n -webkit-mask: url(\"img/GPreturnDSFR.png\") center no-repeat;\n mask: url(\"img/GPreturnDSFR.png\") center no-repeat;\n}\n\n.gpf-btn-icon {\n width: inherit;\n caret-color: transparent;\n}\n\n.gpf-btn-icon-reset::after {\n -webkit-mask:\n linear-gradient(#fff 0 0) top /100% 1px,\n linear-gradient(#fff 0 0) bottom/100% 1px,\n linear-gradient(#fff 0 0) left /1px 100%,\n linear-gradient(#fff 0 0) right /1px 100%,\n url(\"img/GPclose.png\") -25px center;\n mask:\n linear-gradient(#fff 0 0) top /100% 1px,\n linear-gradient(#fff 0 0) bottom/100% 1px,\n linear-gradient(#fff 0 0) left /1px 100%,\n linear-gradient(#fff 0 0) right /1px 100%,\n url(\"img/GPclose.png\") -25px center;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n background-color: var(--text-action-high-blue-france);\n}\n\n.gpf-btn-icon-info {\n width: 40px;\n height: 40px;\n}\n\n/*************/\n/* elements */\n/*************/\n\n.gpf-label {}\n\n.gpf-select {}\n\n.gpf-input {\n padding-left: 5px;\n}\n\n.gpf-radio-group {}\n\n.gpf-radio-btn-group {\n display: flex;\n gap: 1em;\n}\n\n.gpf-upload {}\n\n/*************/\n/* panel */\n/*************/\n\n.gpf-panel__list,\n.gpf-panel__advancedlist {\n z-index: 2;\n width: inherit;\n /* display: none; */\n position: absolute;\n max-height: 140px;\n background-color: #FFF;\n border: 1px solid #999;\n overflow-y: hidden;\n}\n\n.gpf-panel__advancedlist {\n width: calc(100% - 28px);\n border-top: none;\n font-size: 0.9em;\n}\n\n.gpf-panel__items:hover {\n color: #000000;\n background-color: #CEDBEF\n}\n\n.gpf-panel__items {\n width: 100%;\n height: 28px;\n line-height: 16px;\n padding: 6px 10px;\n color: #5E5E5E;\n font-size: 1.0em;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n}\n\n.gpf-panel::after {\n height: unset;\n flex: 0;\n}\n\n.gpf-panel::before {\n height: unset;\n flex: 0;\n}\n\n/***********/\n/* position*/\n/***********/\n:root {\n --size-per-row: 50px;\n}\n\n.position-container-top-left,\n.position-container-top-right,\n.position-container-bottom-left,\n.position-container-bottom-right {\n position: absolute;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n /* crée un décalage sur le searchEngine */\n /* align-items: center; */\n /* + 5px pour l'indicateur \"bouton actif\" */\n width: calc(var(--size-per-row) + 4px);\n min-height: var(--size-per-row);\n /* padding: 5px; */\n height: calc(100% - 8px);\n}\n\n.position-container-top-left,\n.position-container-top-right {\n top: 4px;\n}\n\n.position-container-top-left {\n float: left;\n left: 8px;\n}\n\n.position-container-top-right {\n float: right;\n right: 4px;\n}\n\n.position-container-bottom-left,\n.position-container-bottom-right {\n bottom: 4px;\n justify-content: flex-end;\n}\n\n.position-container-bottom-right {\n float: right;\n right: 4px;\n}\n\n.position-container-bottom-left {\n float: left;\n left: 8px;\n}\n\n/**********************/\n/* Feature info popup */\n/**********************/\n\n.gp-feature-info-div {\n bottom: 17px;\n position: relative;\n max-width: calc(100vw - 80px);\n padding: 10px;\n /* border-radius: 10px; */\n font-size: 0.75em;\n /* font-family: \"Open Sans\", sans-serif;\n color: #002A50; */\n background-color: var(--background-default-grey);\n box-shadow: 0 0 5px var(--text-default-grey);\n}\n\n.gp-feature-info-div::before {\n content: \"\";\n position: absolute;\n border-top: 15px solid var(--background-default-grey);\n border-right: 14px solid transparent;\n border-left: 14px solid transparent;\n bottom: -15px;\n margin-left: -14px;\n left: 50%;\n}\n\n.gp-feature-info-div .closer {\n position: absolute;\n display: block;\n width: 30px;\n height: 30px;\n top: 0;\n right: 0;\n border: none;\n cursor: pointer;\n border-top-right-radius: 10px;\n border-bottom-right-radius: 10px;\n background-color: var(--background-default-grey);\n}\n\n.gp-feature-info-div .closer::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n background-color: var(--text-action-high-blue-france);\n -webkit-mask: url(\"img/close-blue.svg\") center no-repeat;\n mask: url(\"img/close-blue.svg\") center no-repeat;\n -webkit-mask-size: 14px 14px;\n mask-size: 14px 14px;\n}\n\n.gp-features-content-div {\n max-width: 420px;\n min-width: 260px;\n max-height: 340px;\n overflow: auto;\n}\n\n.gp-features-content-div h5,\n.gp-features-content-div h6,\n.gp-features-content-div p,\n.gp-features-content-div ul {\n margin: 0;\n}\n\n.gp-features-content-div ul {\n padding: 0;\n list-style-type: none;\n}\n\n.geoportail-popup-content h5,\n.geoportail-popup-content h6,\n.geoportail-popup-content p,\n.gp-att-name-div,\n.gp-att-description-div,\n.gp-att-others-div {\n padding: 0 10px;\n}\n\n.geoportail-popup-content h5:not(:last-child),\n.geoportail-popup-content h6:not(:last-child),\n.geoportail-popup-content p:not(:last-child),\n.gp-att-description-div:not(:last-child),\n.gp-att-others-div:not(:last-child) {\n margin-bottom: 15px;\n}\n\n.geoportail-popup-content h5:last-child,\n.geoportail-popup-content h6:last-child,\n.geoportail-popup-content p:last-child,\n.gp-att-description-div:last-child,\n.gp-att-others-div:last-child,\n.gp-att-name-div {\n margin-bottom: 10px;\n}\n\n.geoportail-popup-content h5:first-child,\n.geoportail-popup-content h6:first-child,\n.geoportail-popup-content p:first-child,\n.gp-att-name-div:first-child,\n.gp-att-description-div:first-child,\n.gp-att-others-div:first-child {\n margin-top: 10px;\n}\n\n.gp-att-name-div,\n.gp-features-content-div h5 {\n padding-right: 35px;\n font-weight: bold;\n font-size: 1.2em;\n text-transform: uppercase;\n color: #0B6BA7;\n}\n\n.gp-features-content-div h6 {\n font-size: 1.1em;\n}\n\n.gp-att-description-div:not(:last-child),\n.gp-att-others-div:not(:last-child) {\n padding-bottom: 10px;\n border-bottom: 1px dotted #666;\n}\n\n/* surcharge css OpenLayers */\n.ol-disabled {\n --idle: transparent;\n --hover: var(--background-disabled-grey-hover);\n --active: var(--background-disabled-grey-active);\n background-color: var(--background-disabled-grey);\n color: var(--text-disabled-grey);\n cursor: not-allowed;\n /* instead of display: none */\n display: block;\n}\n\n.ol-scale-bar, .ol-scale-line {\n z-index: -1;\n}\n\n/* surcharge DSFR pour coller aux règles et au rendu de https://www.systeme-de-design.gouv.fr/composants-et-modeles/composants/accordeon/ */\n/* FIXME: pourquoi on a besoin de faire ça ?? normalement ces règles devraient être importées avec le reste... */\n.fr-collapse {\n --collapse-max-height: none;\n}\n\n.fr-collapse:not(.fr-collapse--expanded):not(.fr-collapsing) {\n --collapse-max-height: 0;\n}\n\n@media (max-width: 576px) {\n .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog {\n width: 100vw !important;\n }\n\n .gpf-mobile-fullscreen form div, .gpf-mobile-fullscreen form p {\n margin: auto;\n text-align: center;\n }\n\n .gpf-mobile-fullscreen .gpf-mobile-form {\n max-height: unset;\n height: 100vh;\n }\n\n .position-container-top-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-bottom-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-top-left .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-bottom-left .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog {\n top: -4px !important;\n left: -8px !important;\n right: unset !important;\n }\n\n .position-container-top-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-bottom-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog {\n right: -4px !important;\n left: unset !important;\n }\n}\n",".gpf-btn-icon-drawing::after {\n -webkit-mask: url(\"img/modifier.svg\") center no-repeat;\n mask: url(\"img/modifier.svg\") center no-repeat;\n}\n\n.gp-label-div,\n.gp-styling-div {\n width: 370px;\n transform: translateY(20px);\n}\n\n.gp-label-div textarea {\n max-width: 100%;\n margin-bottom: 1rem;\n}\n\n.gp-label-div input {\n width: 100%;\n}\n\n.gp-styling-option.fr-range--sm[data-fr-js-range]::before,\n.gp-styling-option.fr-range--sm[data-fr-js-range]::after {\n top: 1.74rem;\n}\n\n.drawing-tool {\n width: 40px;\n}\n\n.drawing-tool-active {\n background-color: var(--hover-tint);\n}\n\n/*\n* Drawing tools\n*/\nbutton[id^=drawing-tool-point-]::after {\n -webkit-mask: url(\"img/dsfr/create-point.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-point.svg\") center no-repeat;\n}\n\n\nbutton[id^=drawing-tool-line-]::after {\n -webkit-mask: url(\"img/dsfr/create-line.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-line.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-polygon-]::after {\n -webkit-mask: url(\"img/dsfr/create-polygon.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-polygon.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-text-]::after {\n -webkit-mask: url(\"img/dsfr/create-label.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-label.svg\") center no-repeat;\n}\n\n/*\n* Editing tools\n*/\nbutton[id^=drawing-tool-edit-]::after {\n -webkit-mask: url(\"img/dsfr/edit-geom.svg\") center no-repeat;\n mask: url(\"img/dsfr/edit-geom.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-display]::after {\n -webkit-mask: url(\"img/dsfr/edit-style.svg\") center no-repeat;\n mask: url(\"img/dsfr/edit-style.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-tooltip]::after {\n -webkit-mask: url(\"img/dsfr/edit-text.svg\") center no-repeat;\n mask: url(\"img/dsfr/edit-text.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-remove]::after {\n -webkit-mask: url(\"img/dsfr/delete.svg\") center no-repeat;\n mask: url(\"img/dsfr/delete.svg\") center no-repeat;\n}\n",".gpf-btn-icon-elevation::after {\n -webkit-mask: url(\"img/altipath.svg\") center no-repeat;\n mask: url(\"img/altipath.svg\") center no-repeat;\n}\n\n[id^=GPelevationPathPanelInfo] {\n position: absolute;\n float: left;\n top: 0;\n left: 0;\n}\n\n/* surcharge de fr-panel pour permettre la saisie sous la fenêtre de résultat */\n[id^=GPelevationPathPanel] {\n height: unset;\n}\n\n[id^=GPelevationPathPanelInfo]::after {\n -webkit-mask: url(\"../../img/GPinfo_secondary.svg\") center no-repeat;\n mask: url(\"../../img/GPinfo_secondary.svg\") center no-repeat;\n}\n\n[id^=GPelevationPathProfil] > #profileElevationByDefault > svg {\n transform: translateY(1rem);\n}\n\n[id^=GPelevationPathProfil] {\n height: 150px;\n width: 300px;\n}\n\n.GPelevationPathProfilWrapper {\n padding: 0 2rem;\n}\n\ndiv[id^=GPelevationPathInformationsContainer] {\n display: grid;\n width: calc(300px + 4rem);\n padding: 0 2rem 1rem 2rem;\n grid-template-columns: 50% 50%;\n}\n\n.GPelevationPathInformations {\n font-size: 13px;\n margin: 0;\n display: flex;\n flex-wrap: wrap;\n gap: 0 0.25rem;\n}\n\n.GPelevationPathInformations > span {\n white-space: nowrap;\n}\n\n/* Mode Mobile */\n\n@media (max-width: 576px) {\n div[id^=GPelevationPathInformationsContainer], #GPelevationPathProfil {\n margin: auto;\n }\n}","/* GET FEATURE INFO */\n.gpf-btn-icon-getfeatureinfo::after {\n -webkit-mask: url(\"img/NoGFI.svg\") center no-repeat;\n mask: url(\"img/NoGFI.svg\") center no-repeat;\n}\n\nbutton[id^=\"GPgetFeatureInfoPicto-\"][aria-pressed=\"true\"]::after {\n -webkit-mask: url(\"img/GFI.svg\") center no-repeat;\n mask: url(\"img/GFI.svg\") center no-repeat;\n}",".gpf-btn-icon-isocurve::after {\n -webkit-mask: url(\"img/isochrone.svg\") center no-repeat;\n mask: url(\"img/isochrone.svg\") center no-repeat;\n}\n\n.gpf-flex-isocurve {\n justify-content: unset;\n}\n\n.gpf-btn-icon-isocurve-reset {\n background-position: -29px center;\n}\n\n[id^=GPisochronPanel-] p.gpf-label {\n margin-top: 1rem;\n margin-bottom: 0.2rem;\n}\n\n[id^=\"GPisochronPanel-\"] p.gpf-label:first-child {\n margin-top: 0;\n}\n\ndiv[id^=\"GPisochronChoice\"] {\n justify-content: left;\n gap: 1em;\n}\n\ndiv[id^=GPisochronTransportChoice] > div {\n margin-top: 0.5rem;\n}\n\ndiv[id^=GPisochronValueChron],\ndiv[id^=GPisochronValueDist] {\n width: 281px;\n}\n\n.GPflexInput > input[id^=\"GPisochronValueChronInput2\"] {\n margin-top: 0;\n}\n\n.GPisoExclusionsOptions {\n gap: 1rem;\n}\n\n[id^=GPisochronForm-] > .GPpanelFooter {\n position: unset;\n}\n\n[id^=GPisochronReset-] {\n min-width: 2.5rem;\n}\n\n[id^=GPisochronSubmit-] {\n width: 80%;\n}\n\n",".gpf-btn-icon-import::after {\n -webkit-mask: url(\"img/layerimport.svg\") center no-repeat;\n mask: url(\"img/layerimport.svg\") center no-repeat;\n}\n\n.gpf-panel__items_layerimport {\n color: var(--text-action-high-blue-france);\n border-bottom: 1px solid var(--grey-900-175);\n list-style-type: none;\n height: auto;\n}\n","div[id^=GPlayerSwitcher-] {\n height: 44px;\n}\n\nbutton[id^=GPshowLayersListPicto] {\n width: 40px;\n}\n\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] + dialog[id^=GPlayersList] {\n width: 350px;\n}\n\n.GPlayerSwitcher_layer {\n background-color: var(--background-overlap-grey);\n padding-right: 40px;\n}\n\n.gpf-btn-icon-layerswitcher::after {\n -webkit-mask: url(\"img/dsfr/layerswitcher.svg\") center no-repeat;\n mask: url(\"img/dsfr/layerswitcher.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-ls-visibility {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-visibility::after {\n -webkit-mask: url(\"img/dsfr/visible-open.svg\") center no-repeat;\n mask: url(\"img/dsfr/visible-open.svg\") center no-repeat;\n}\n\nbutton[id^=GPvisibilityPicto_ID_][aria-pressed=\"false\"]::after {\n -webkit-mask: url(\"img/dsfr/visible-close-blanc.svg\") center no-repeat;\n mask: url(\"img/dsfr/visible-close-blanc.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-ls-remove {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-remove::after {\n -webkit-mask: url(\"img/dsfr/remove.svg\") center no-repeat;\n mask: url(\"img/dsfr/remove.svg\") center no-repeat;\n}\n\n\n.gpf-btn-icon-ls-collapse {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-collapse::after {\n -webkit-mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n transition: transform 0.2s ease-out 0s;\n}\n\n.gpf-btn-icon-ls-collapse[aria-pressed=\"true\"]::after {\n box-shadow: none;\n transform: rotate(180deg);\n}\n\n.gpf-btn-icon-ls-dragndrop {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-dragndrop::after {\n -webkit-mask: url(\"img/dsfr/dragndrop.svg\") center no-repeat;\n mask: url(\"img/dsfr/dragndrop.svg\") center no-repeat;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools {\n height: 56px;\n max-height: 56px;\n}\n\n/* Surchargé en inline avec \"hidden\" pour les couches n'ayant pas de description ou de titre */\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools > .GPlayerInfo {\n visibility: visible;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"false\"] {\n box-shadow: none;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"false \"] + .GPlayerAdvancedTools > .GPlayerInfo {\n visibility: hidden;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_] {\n position: absolute;\n top: 12px;\n right: 16px;\n}\n\ndiv[id^=GPbasicTools_ID_] {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n flex-wrap: nowrap;\n flex-direction: row-reverse;\n}\n\ndiv[id^=GPadvancedTools_ID_] {\n display: flex;\n align-content: center;\n align-items: center;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n height: inherit;\n}\n\n.gpf-btn-header {\n z-index: 2;\n position: absolute;\n width: 26px;\n height: 26px;\n}\n\n.gpf-btn-icon-layers {\n background-image: url(\"img/dsfr/layers.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n}\n\n.gpf-panel__body_ls {\n overflow: auto;\n max-height: 300px !important;\n}\n\n.gpf-panel__title_ls {\n color: #101092;\n padding: 12px 15px;\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n margin: 0;\n right: -16px;\n}\n.gpf-panel__header_ls {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-content: center;\n background: #E3E3FD;\n height: 48px;\n}\n\n.gpf-btn-icon-ls-info {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-info::after {\n -webkit-mask: url(\"img/dsfr/info.svg\") center no-repeat;\n mask: url(\"img/dsfr/info.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-ls-extent {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-extent::after {\n -webkit-mask: url(\"img/dsfr/extent.svg\") center no-repeat;\n mask: url(\"img/dsfr/extent.svg\") center no-repeat;\n}\n\n[id^=GPlayerInfoPanel] {\n position: absolute;\n height: initial;\n}\n\n.gpf-label-name {\n width: calc(100% - 96px);\n line-height: 28px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding-left: 4px;\n}\n\n.GPlayerDragNDrop {\n cursor: move;\n}\n\n.gpf-range__output {\n width: 35px;\n}\n\n.GPlayerOpacity.fr-range--sm[data-fr-js-range]::after,\n.GPlayerOpacity.fr-range--sm[data-fr-js-range]::before {\n top: 25%;\n}\n\ndiv[id^=GPlayerInfoContent] {\n width: 350px;\n}\n\n.gpf-btn-icon-close.GPlayersPanelClose {\n top: 0;\n right: 0;\n}\n\n.gpf-btn-icon-close.GPlayersPanelClose::after {\n margin-left: -0.125rem;\n}\n\n/* menu contextuel (mobile) */\n.GPlayerAdvancedToolsContextual {\n display: none;\n}\n\n.GPlayerAdvancedToolsContextual::after {\n -webkit-mask: url(\"./img/dsfr/context.svg\") center no-repeat;\n mask: url(\"./img/dsfr/context.svg\") center no-repeat;\n}\n\n.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"] {\n background-color: var(--hover-tint);\n overflow: visible;\n}\n\n.GPlayerSwitcher_layer:has(.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"]) {\n overflow: visible;\n}\n\n[id^=GPlayersList-] .GPpanelBody:has(.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"]) {\n overflow: visible;\n}\n\n.GPlayerAdvancedTools:has(.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"]) {\n position: relative;\n}\n\n.GPlayerAdvancedToolsContextual + div {\n display: none;\n flex-direction: column;\n flex-wrap: wrap;\n font-size: 13px;\n z-index: 12;\n background-color: var(--background-overlap-grey);\n border-radius: 6px;\n box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.15);\n padding: 14px 6px;\n gap: 6px;\n}\n\n.GPlayerAdvancedToolsContextual + div > button {\n padding-left: 2rem;\n}\n\n.GPlayerAdvancedToolsContextual + div > button[visibility=\"hidden\"] {\n display: none;\n}\n\n.GPlayerAdvancedToolsContextual + div > button::after {\n mask-position: left;\n}\n\n.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"] + div {\n display: flex;\n position: absolute;\n right: 0;\n top: calc(2.5rem + 8px);\n}\n\n@media (max-width: 576px) {\n .GPlayerAdvancedTools {\n width: calc(100% + 40px);\n }\n\n .GPlayerAdvancedTools > .GPlayerRemove, .GPlayerAdvancedTools > .GPlayerInfo, .GPlayerAdvancedTools > .GPlayerExtent {\n display: none;\n }\n\n .GPlayerAdvancedToolsContextual {\n display: inline-flex;\n }\n\n [id^=GPopacity_ID_] {\n flex-grow: 0.6;\n }\n}\n",".gpf-btn-icon-pointer::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask: url(\"img/reticle.svg\") center no-repeat;\n mask: url(\"img/reticle.svg\") center no-repeat;\n background-color: var(--text-inverted-blue-france);\n}\n\n.gpf-btn-icon-pointer {\n min-width: 2.5rem;\n position: relative;\n border-top-right-radius: 4px;\n}\n\n.GPlocationStageFlexInput:has(.GPlocationStageRemove) > .gpf-btn-icon-pointer {\n border-top-right-radius: 0px;\n}\n\n.gpf-btn-icon-remove {\n height: 2.5rem;\n width: 2.5rem;\n}\n\n.gpf-btn-icon-label {}\n.gpf-btn-icon-remove::after {\n -webkit-mask: url(\"img/dsfr/close-line.svg\") center no-repeat;\n mask: url(\"img/dsfr/close-line.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-add::after {\n -webkit-mask: url(\"img/GPlocationOptions.png\") -51px center no-repeat;\n mask: url(\"img/GPlocationOptions.png\") -51px center no-repeat;\n width: 2.5rem;\n height: 2.5rem;\n}\n\n.GPlocationOriginLabel {\n display: none;\n pointer-events: none;\n}\n\n[class^=\"GPlocationPoint-\"] {\n padding: 0;\n}\n\n[id^=\"GPlocationPoint_\"] {\n justify-content: left;\n}\n\n.GPlocationStageFlexInput {\n flex-wrap: wrap;\n width: 281px;\n}\n\n.GPlocationStageAdd {\n flex-basis: 65%;\n width: 0px;\n min-height: 40px;\n padding: 0.25rem 0.75rem 0.25rem 2.5rem;\n text-align: left;\n}\n\n.GPlocationOriginLabel {\n flex-basis: fit-content;\n}\n\n.GPlocationOriginPointerImg {\n flex-basis: 2.5em;\n}\n\n.GPlocationStageFlexInput input {\n flex-basis: 33%;\n flex-grow: 1;\n}\n","/* MEASURE TOOL */\n\n.GPmeasureTooltip {\n background-color: var(--background-contrast-grey);\n padding: 0.2rem 0.4rem;\n opacity: 0.8;\n}\n\n",".gpf-btn-icon-area::after {\n -webkit-mask: url(\"img/mesurer-surface.svg\") center no-repeat;\n mask: url(\"img/mesurer-surface.svg\") center no-repeat;\n}",".gpf-btn-icon-length::after {\n -webkit-mask: url(\"./img/mesurer-distance.svg\") center no-repeat;\n mask: url(\"./img/mesurer-distance.svg\") center no-repeat;\n}",".gpf-btn-icon-azimuth::after {\n -webkit-mask: url(\"img/mesurer-azimuth.svg\") center no-repeat;\n mask: url(\"img/mesurer-azimuth.svg\") center no-repeat;\n}",".gpf-btn-icon-position::after {\n -webkit-mask: url(\"img/position.svg\") center no-repeat;\n mask: url(\"img/position.svg\") center no-repeat;\n}\n\ndiv[id^=GPmousePositionCoordinate-] input {\n color: inherit;\n}\n\ndiv[id^=GPmousePositionAltitude-],\ndiv[id^=GPmousePositionCoordinate-] > div {\n display: flex;\n justify-content: space-between;\n}\n\ndiv[id^=GPmousePositionCoordinate-] input[readonly] {\n font-size: 1rem\n}",".gpf-btn-icon-reverse::after {\n -webkit-mask: url(\"img/reversegeocode.svg\") center no-repeat;\n mask: url(\"img/reversegeocode.svg\") center no-repeat;\n}\n\n.gpf-flex-reverse {\n /* INFO : surcharge de .gpf-flex par defaut */\n display: flex;\n align-items: flex-start;\n flex-direction: column;\n justify-content: space-evenly;\n}\n\n.gpf-panel-reverse {\n /* INFO : surcharge de .gpf-panel par defaut */\n width: 100%;\n}\n",".gpf-btn-icon-route::after {\n -webkit-mask: url(\"img/route.svg\") center no-repeat;\n mask: url(\"img/route.svg\") center no-repeat;\n}\n\n.GProuteFormMini {\n max-height: 78px;\n}\n\n.GProuteFormMini .GPelementShow {\n color: var(--grey-200-850);\n}\n\n.GProuteModeLabel {\n margin-bottom: 0.5rem;\n}\n\n[id^=GProuteForm-] p.gpf-label {\n margin-top: 0;\n margin-bottom: 0.2rem;\n}\n\n[id^=\"GProuteForm-\"] > .GPpanelFooter {\n position: unset;\n}\n\n[id^=\"GProuteSubmit-\"] {\n width: 80%;\n}\n\n[id^=\"GProuteForm-\"] > [class^=\"GPlocationPoint-\"] {\n margin-top: 0;\n}\n\n[id^=\"GProuteForm-\"] > p.gpf-label {\n margin-top: 1rem;\n}\n\n[id^=\"GProuteForm-\"].GProuteFormMini > p.gpf-label {\n margin-top: 0;\n}\n\n[id^=\"GProuteForm-\"] > p.gpf-label ~ p.gpf-label {\n margin-top: 0.5rem;\n}\n\n/* Reset picto */\nbutton[id^=GProuteReset-], div[id^=GProuteResultsNew-] {\n min-width: 2.5em;\n}\n\ndiv[id^=GProuteResultsValueDist],\ndiv[id^=GProuteResultsValueTime] {\n color: var(--text-action-high-blue-france);\n font-weight: bold;\n}\n\n.GProuteResultsShowDetailsDiv {\n justify-content: left;\n}\n\ndiv:has(input[id^=GProuteResultsShowDetails]) + div[id^=GProuteResultsDetails-] {\n max-height: 0;\n opacity: 0;\n overflow: hidden;\n}\n\ndiv:has(input[id^=GProuteResultsShowDetails]:checked) + div[id^=GProuteResultsDetails-] {\n max-height: 200px;\n opacity: 1;\n overflow-y: scroll;\n}\n\ndiv[id^=GProuteResultsDetails-] {\n max-width: 350px;\n transition: max-height 0.5s ease-in-out 0.25s, opacity 0.5s ease-in-out 0.25s;\n display: grid;\n grid-template-columns: 30px 1fr;\n gap: 0.5rem 5px;\n}\n\n.GProuteResultsDetailsNumber,\n.GProuteResultsDetailsInstruction {\n display: inline-block;\n}\n\n.GProuteResultsDetailsNumber {\n font-weight: bold;\n text-align: right;\n vertical-align: top;\n}\n\n.GProuteExclusionsOptions {\n gap: 0.5rem;\n color: var(--text-label-grey);\n}\n\n/* Mode Mobile */\n\n@media (max-width: 576px) {\n .gpf-mobile-fullscreen div[id^=\"GProuteResultsDetails-\"] {\n max-width: unset;\n }\n}",".gpf-widget-padding {\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.gpf-widget-color {\n background-color: var(--background-default-grey);\n}\n\n.gpf-panel__items_searchengine,\n.GPlabelTitle {\n color: var(--text-action-high-blue-france);\n border-bottom: 1px solid var(--grey-900-175);\n padding: 12px;\n}\n\n\n.gpf-panel__items.GPautoCompleteProposal {\n height: 45px;\n box-sizing: border-box;\n margin-bottom: 0;\n}\n\n.GPlabelTitle {\n background-color: var(--background-open-blue-france);\n font-size: 1.0em;\n margin-bottom: 0;\n}\n\ndialog[id^=GPcoordinateSearchPanel],\ndialog[id^=GPadvancedSearchPanel] {\n max-height: unset;\n}\n\nselect[name^=\"inputSex\"].gpf-select {\n padding: unset;\n}\n\ninput[name^=\"inputSex\"].gpf-input {\n padding: unset;\n}\n\nbutton[id^=GPsearchInputReset] {\n width: 40px;\n height: 40px;\n}\n\n[id^=\"GPshowSearchDiv\"] {\n flex-direction: row-reverse;\n}\n\n[id^=\"GPsearchEngine-\"] {\n flex-direction: column;\n}\n\n[id^=\"GPsearchEngine-\"].gpf-widget-padding {\n align-items: center;\n}\n\ndiv.GPbuttonsContainer > button {\n width: 40px;\n}\n\n.GPsearchFirstLineWrapper {\n height: 40px;\n}\n\n.gpf-widget-padding > .GPsearchFirstLineWrapper {\n margin: 0.5rem 0;\n}\n\n.GPbuttonsContainer {\n height: 56px;\n padding-left: 10px;\n}\n\n.GPsearchRadioContainer {\n display: flex;\n flex-direction: row;\n background-color: var(--background-default-grey);\n white-space: nowrap;\n max-height: 0;\n overflow: clip;\n transition: max-height 0.3s;\n gap: 1rem;\n}\n\n[id^=\"GPsearchEngine-\"]:has([id^=\"GPshowSearchByCoordinate-\"][aria-pressed=\"true\"]) > .GPsearchRadioContainer,\n[id^=\"GPsearchEngine-\"]:focus-within > .GPsearchRadioContainer,\n[id^=\"GPsearchEngine-\"]:hover > .GPsearchRadioContainer {\n max-height: 3rem;\n}\n\n.GPsearchRadioElements {\n display: flex;\n flex-direction: row;\n gap: 1rem;\n}\n\n.GPshowAdvancedSearch {\n color: var(--text-action-high-blue-france);\n text-decoration: underline;\n cursor: pointer;\n display: flex;\n align-items: center;\n}\n\n.gpf-btn-icon-search {\n background-image: url(\"img/dsfr/search-line.svg\");\n background-repeat: no-repeat;\n background-position: center center;\n /* cas particulier ou on n'utilise pas la class gpf-icon-button pour la largeur à cause du DOM du control*/\n width: 40px;\n}\n\nform[id^=GPsearchInput-] {\n margin-left: 8px;\n width: 300px;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] {\n max-width: 300px;\n border: none;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"] {\n border-radius: 0 0.25rem 0 0;\n}\n\n.gpf-btn-icon-search-advanced::after {\n -webkit-mask: url(\"img/dsfr/recherche-avancee.svg\") center no-repeat;\n mask: url(\"img/dsfr/recherche-avancee.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-search-geolocate::after {\n -webkit-mask: url(\"img/dsfr/localiser.svg\") center no-repeat;\n mask: url(\"img/dsfr/localiser.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-search-coordinate::after {\n -webkit-mask: url(\"img/dsfr/coordonnees.svg\") center no-repeat;\n mask: url(\"img/dsfr/coordonnees.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-search-reset {\n background-position: -25px center;\n}\n\ndialog[id^=GPcoordinateSearchPanel],\ndialog[id^=\"GPadvancedSearchPanel\"] {\n position: absolute;\n top: 66px;\n width: inherit;\n}\n\n/* Autocomplete list / geocode results */\n\n[id^=\"GPautocompleteResults-\"] {\n border: 1px solid var(--background-open-blue-france);\n}\n\ndiv[id^=GPautoCompleteList],\ndialog[id^=GPgeocodeResultsList] {\n width: 320px;\n position: absolute;\n height: fit-content;\n background-color: var(--background-default-grey);\n max-height: unset;\n}\n\ndiv[id^=GPautoCompleteList] {\n top: 42px;\n margin-left: 2px;\n}\n\n.position-container-top-left [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-bottom-left [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-top-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-bottom-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList] {\n width: 340px;\n position: relative;\n top: unset;\n margin-left: 8px;\n}\n\n.position-container-top-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-bottom-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList] {\n margin-right: 10px;\n}\n\n.gpf-widget-padding > div[id^=GPautoCompleteList] {\n top: 100%;\n width: 100%;\n margin: 0;\n}\n\ndialog[id^=GPgeocodeResultsList] {\n position: absolute;\n top: 55px;\n border-radius: 4px;\n overflow: hidden;\n}\n\ndiv[id^=GPgeocodeResults-] {\n width: 100%;\n position: relative;\n background-color: var(--background-default-grey);\n max-height: 240px;\n overflow-y: auto;\n}\n\n[id^=\"GPautocompleteResultsSuggest\"],\n[id^=\"GPautocompleteResultsLocation\"] {\n height: 225px;\n}\n\n/* Mode Mobile */\n@media (max-width: 576px) {\n\n .gpf-widget-padding > .GPsearchFirstLineWrapper {\n flex-direction: column;\n height: fit-content;\n }\n\n .GPsearchRadioContainer {\n flex-direction: column;\n align-items: center;\n }\n\n dialog[id^=GPcoordinateSearchPanel],\n dialog[id^=\"GPadvancedSearchPanel\"] {\n position: relative;\n top: unset;\n margin-left: unset;\n }\n\n .GPsearchRadioContainer {\n gap: 0;\n margin: 0 8px;\n }\n\n form[id^=GPsearchInput-] {\n margin-left: 0;\n }\n\n [id^=\"GPsearchEngine-\"]:has([id^=\"GPshowSearchByCoordinate-\"][aria-pressed=\"true\"]) > .GPsearchRadioContainer,\n [id^=\"GPsearchEngine-\"]:focus-within > .GPsearchRadioContainer,\n [id^=\"GPsearchEngine-\"]:hover > .GPsearchRadioContainer {\n max-height: 4rem;\n }\n}\n",".gpf-btn-icon-toolbox {\n background-repeat: no-repeat;\n background-image: url(\"img/GPtoolBoxMeasureOpen.png\");\n background-position: 3px center;\n}",".gpf-btn-icon-zoom-in {\n height: inherit;\n width: inherit;\n}\n\n.gpf-btn-icon-zoom-in::after {\n -webkit-mask: url(\"img/dsfr/zoom-in.svg\") center no-repeat;\n mask: url(\"img/dsfr/zoom-in.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-zoom-out {\n height: inherit;\n width: inherit;\n}\n\n.gpf-btn-icon-zoom-out::after {\n -webkit-mask: url(\"img/dsfr/zoom-out.svg\") center no-repeat;\n mask: url(\"img/dsfr/zoom-out.svg\") center no-repeat;\n}\n","/* surcharge en mode dsfr */\n.ol-custom-full-screen button {\n height: 40px;\n width: 40px;\n background-position: center center;\n background-repeat: no-repeat;\n}\n.ol-custom-full-screen button.ol-custom-full-screen-false::after {\n -webkit-mask: url(\"img/dsfr/fullscreen.svg\") center no-repeat;\n mask: url(\"img/dsfr/fullscreen.svg\") center no-repeat;\n}\n.ol-custom-full-screen button.ol-custom-full-screen-true::after {\n -webkit-mask: url(\"img/dsfr/fullscreen-off.svg\") center no-repeat;\n mask: url(\"img/dsfr/fullscreen-off.svg\") center no-repeat;\n}",".gpf-btn-icon-overviewmap::after {\n -webkit-mask: url(\"img/overviewmap.svg\") center no-repeat;\n mask: url(\"img/overviewmap.svg\") center no-repeat;\n}\n\n.ol-overviewmap:has(> .gpf-btn-icon[aria-pressed=\"true\"])::after {\n transform: translateY(-100%);\n}\n\n.ol-overviewmap:not(.ol-collapsed) {\n background: unset;\n}",".gpf-btn-icon-legends::after {\n -webkit-mask: url(\"img/dsfr/legends.svg\") center no-repeat;\n mask: url(\"img/dsfr/legends.svg\") center no-repeat;\n}\n\n.gpf-btn-header-legends {\n z-index: 2;\n position: absolute;\n width: 26px;\n height: 26px;\n}\n\n.gpf-btn-icon-header-legends {\n background-image: url(\"img/dsfr/header-legends.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n}\n\n.gpf-panel__body_legends {\n overflow: auto;\n max-height: 300px !important;\n}\n\n.gpf-panel__title_legends {\n color: #101092;\n padding: 12px 15px;\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n margin: 0;\n right: -16px;\n}\n.gpf-panel__header_legends {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-content: center;\n background: #E3E3FD;\n height: 48px;\n}\n\nbutton[id^=GPcollapseLegend_ID_] {\n position: absolute;\n top: 8px;\n right: 0;\n}\n\n.gpf-btn-icon-legends-collapse {\n box-shadow: none;\n}\n\n.gpf-btn-icon-legends-collapse::after {\n -webkit-mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n transition: transform 0.2s ease-out 0s;\n}\n\n.gpf-btn-icon-legends-collapse[aria-pressed=\"true\"]::after {\n box-shadow: none;\n transform: rotate(180deg);\n}\n\n.legend-entry-container {\n position: relative;\n top: 0;\n border-bottom: 1px solid var(--border-default-grey);\n overflow: hidden;\n}\n\n.legend-entry-container {\n background-color: var(--background-overlap-grey);\n}\n\n.gpf-label-legends-name {\n width: calc(100% - 40px);\n line-height: 56px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding-left: 4px;\n}\n\nbutton[id^=GPcollapseLegend_ID_][aria-pressed=\"true\"] + .legend-entry-image {\n opacity: 1;\n}\n\nbutton[id^=GPcollapseLegend_ID_][aria-pressed=\"true\"] + .legend-entry-image {\n max-height: 300px;\n overflow: auto;\n border-top: 1px solid var(--border-default-grey);\n padding: 10px 0;\n}\n\n.legend-entry-image {\n display: block;\n max-height: 0;\n opacity: 0;\n transition: max-height 0.5s ease-out 0s, opacity 0.5s ease-out 0s;\n}\n\n.legends-entries {\n padding: 0 16px;\n}\n",".gpf-btn-icon-catalog::after {\n -webkit-mask: url(\"img/dsfr/catalog.svg\") center no-repeat;\n mask: url(\"img/dsfr/catalog.svg\") center no-repeat;\n}\n\n/* Mode mobile doit prendre le dessus */\n\n@media (max-width: 576px) {\n .gpf-mobile-fullscreen .GPtabContent {\n max-height: unset !important;\n height: 100vh;\n }\n}",".gpf-btn-icon-territories::after {\n -webkit-mask: url(\"img/dsfr/territories.svg\") center no-repeat;\n mask: url(\"img/dsfr/territories.svg\") center no-repeat;\n}\n\n.gpf-btn-header-territories {\n z-index: 2;\n position: absolute;\n width: 26px;\n height: 26px;\n}\n\n.gpf-btn-icon-header-territories {\n background-image: url(\"img/dsfr/header-territories.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n}\n\n.gpf-panel__body_territories {\n overflow: auto;\n max-height: 300px;\n}\n\n.gpf-panel__title_territories {\n color: #101092;\n padding: 12px 15px;\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n margin: 0;\n right: -16px;\n}\n.gpf-panel__header_territories {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-content: center;\n background: #E3E3FD;\n height: 48px;\n}\n\n#GPterritoriesPanelClose {\n top: 0;\n right: 0;\n}\n\n/* surchage tile */\n.gpf-tile {\n height: 150px;\n width: 150px;\n}\n.tiles-reduce div.fr-tile {\n height: unset;\n width: unset;\n padding: unset;\n}\n.fr-tile:hover {\n background-color: var(--background-contrast-grey);\n}\n.fr-tile__title::before {\n background-image: unset;\n}\n.gpf-tile__header {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.territories-entries {\n display: grid;\n}\n/* direction */\ndialog.tiles-direction { }\n.territories-entries.tiles-direction {}\n\n/* nombre de tuiles */\n.tiles-direction.tiles-0 {\n max-height: none !important;\n grid-template-columns: repeat(3, 1fr);\n}\n.tiles-direction.tiles-1 {\n grid-template-columns: repeat(1, 1fr);\n}\n.tiles-direction.tiles-2 {\n grid-template-columns: repeat(2, 1fr);\n}\n.tiles-direction.tiles-3 {\n grid-template-columns: repeat(3, 1fr);\n}\n.tiles-direction.tiles-4 {\n grid-template-columns: repeat(4, 1fr);\n}\n\ndiv.fr-tile div.fr-tile__header div.fr-tile__icon,\ndiv.fr-tile div.fr-tile__header div.fr-tile__thumbnail {\n display: block;\n}\n\n/* reduce */\n.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__icon,\n.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__thumbnail {\n display: none;\n}\n\n.fr-tile__icon {\n /* background-image: url(\"img/dsfr/territories-small.svg\"); */\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n height: 50px;\n width: 50px;\n}\n\n.tiles-thumbnail div.fr-tile div.fr-tile__header div.fr-tile__icon {\n display: none;\n}\n.tiles-icon div.fr-tile div.fr-tile__header div.fr-tile__thumbnail {\n display: none;\n}\n\n/* affichage plein écran sur petit écran */\n@media (max-width: 576px) {\n /* si 4 tuiles de large, on force 3 tuiles de large */\n .tiles-direction.tiles-4 {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n\n/* sur tout petit écran, on force 2 colonnes max */\n@media (max-width: 382px) {\n .tiles-direction.tiles-0 {\n grid-template-columns: repeat(2, 1fr);\n }\n .tiles-direction.tiles-3 {\n grid-template-columns: repeat(2, 1fr);\n }\n .tiles-direction.tiles-4 {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n","button[id^=\"GPshowControlListPicto-\"][aria-pressed=\"true\"] + dialog {\n width: 370px;\n}\n\ndiv[id^=\"GPcontrolList-\"] .GPshowOpen > span {\n font-size: 32px;\n position: absolute;\n transform: translate(-5px, -2px);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content {\n display: flex;\n flex-direction: column;\n padding: 0 1.5rem;\n overflow: auto;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content:not(:has(~ .gpf-panel__footer)) {\n padding-bottom: 2rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div {\n display: flex;\n flex-direction: row;\n column-gap: 1rem;\n align-items: center;\n padding: 0.5rem 0.5rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div:hover {\n background-color: var(--hover);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div:hover > button {\n background-color: var(--hover);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button {\n height: 40px;\n width: 40px;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button::after {\n background-color: var(--text-default-grey);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > div {\n display: flex;\n flex-direction: column;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > div > span:nth-child(2) {\n color: var(--text-mention-grey);\n font-size: 0.75rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__footer {\n padding: 1rem 2rem 2rem 2rem;\n background-color: var(--background-lifted-grey);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__footer > button {\n width: 100%;\n justify-content: center;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/modules/Dsfr.js b/dist/modules/Dsfr.js index 5d7e1daf..3d22c1e5 100644 --- a/dist/modules/Dsfr.js +++ b/dist/modules/Dsfr.js @@ -8,7 +8,7 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */Dsfr={}.default; \ No newline at end of file diff --git a/dist/modules/GpfExtOlCRS.js b/dist/modules/GpfExtOlCRS.js index e9ee64ba..7f2ab01f 100644 --- a/dist/modules/GpfExtOlCRS.js +++ b/dist/modules/GpfExtOlCRS.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var t={3065:function(t,s,i){var e,a;!function(){"use strict";e=function(){var t=function(){},s="undefined",i=typeof window!==s&&typeof window.navigator!==s&&/Trident\/|MSIE /.test(window.navigator.userAgent),e=["trace","debug","info","warn","error"],a={},n=null;function o(t,s){var i=t[s];if("function"==typeof i.bind)return i.bind(t);try{return Function.prototype.bind.call(i,t)}catch(s){return function(){return Function.prototype.apply.apply(i,[t,arguments])}}}function r(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function h(e){return"debug"===e&&(e="log"),typeof console!==s&&("trace"===e&&i?r:void 0!==console[e]?o(console,e):void 0!==console.log?o(console,"log"):t)}function l(){for(var i=this.getLevel(),a=0;a=0&&s<=u.levels.SILENT)return s;throw new TypeError("log.setLevel() called with invalid level: "+t)}"string"==typeof t?_+=":"+t:"symbol"==typeof t&&(_=void 0),u.name=t,u.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},u.methodFactory=i||d,u.getLevel=function(){return null!=h?h:null!=r?r:o},u.setLevel=function(t,s){return h=c(t),!1!==s&&f(h),l.call(u)},u.setDefaultLevel=function(t){r=c(t),m()||u.setLevel(t,!1)},u.resetLevel=function(){h=null,p(),l.call(u)},u.enableAll=function(t){u.setLevel(u.levels.TRACE,t)},u.disableAll=function(t){u.setLevel(u.levels.SILENT,t)},u.rebuild=function(){if(n!==u&&(o=c(n.getLevel())),l.call(u),n===u)for(var t in a)a[t].rebuild()},o=c(n?n.getLevel():"WARN");var M=m();null!=M&&(h=c(M)),l.call(u)}(n=new _).getLogger=function(t){if("symbol"!=typeof t&&"string"!=typeof t||""===t)throw new TypeError("You must supply a name when creating a logger.");var s=a[t];return s||(s=a[t]=new _(t,n.methodFactory)),s};var f=typeof window!==s?window.log:void 0;return n.noConflict=function(){return typeof window!==s&&window.log===n&&(window.log=f),n},n.getLoggers=function(){return a},n.default=n,n},void 0===(a="function"==typeof e?e.call(s,i,s,t):e)||(t.exports=a)}()}},s={};function i(e){var a=s[e];if(void 0!==a)return a.exports;var n=s[e]={exports:{}};return t[e].call(n.exports,n,n.exports,i),n.exports}i.n=t=>{var s=t&&t.__esModule?()=>t.default:()=>t;return i.d(s,{a:s}),s},i.d=(t,s)=>{for(var e in s)i.o(s,e)&&!i.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:s[e]})},i.o=(t,s)=>Object.prototype.hasOwnProperty.call(t,s);(()=>{"use strict";var t=6378137,s=.0066943799901413165,e=484813681109536e-20,a=Math.PI/2,n=1e-10,o=.017453292519943295,r=57.29577951308232,h=Math.PI/4,l=2*Math.PI,u=3.14159265359,d={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667};const _={mm:{to_meter:.001},cm:{to_meter:.01},ft:{to_meter:.3048},"us-ft":{to_meter:1200/3937},fath:{to_meter:1.8288},kmi:{to_meter:1852},"us-ch":{to_meter:20.1168402336805},"us-mi":{to_meter:1609.34721869444},km:{to_meter:1e3},"ind-ft":{to_meter:.30479841},"ind-yd":{to_meter:.91439523},mi:{to_meter:1609.344},yd:{to_meter:.9144},ch:{to_meter:20.1168},link:{to_meter:.201168},dm:{to_meter:.01},in:{to_meter:.0254},"ind-ch":{to_meter:20.11669506},"us-in":{to_meter:.025400050800101},"us-yd":{to_meter:.914401828803658}};var f=/[\s_\-\/\(\)]/g;function m(t,s){if(t[s])return t[s];for(var i,e=Object.keys(t),a=s.toLowerCase().replace(f,""),n=-1;++n=this.text.length)return;t=this.text[this.place++]}switch(this.state){case M:return this.neutral(t);case 2:return this.keyword(t);case 4:return this.quoted(t);case 5:return this.afterquote(t);case 3:return this.number(t);case-1:return}},S.prototype.afterquote=function(t){if('"'===t)return this.word+='"',void(this.state=4);if(w.test(t))return this.word=this.word.trim(),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in afterquote yet, index '+this.place)},S.prototype.afterItem=function(t){return","===t?(null!==this.word&&this.currentObject.push(this.word),this.word=null,void(this.state=M)):"]"===t?(this.level--,null!==this.word&&(this.currentObject.push(this.word),this.word=null),this.state=M,this.currentObject=this.stack.pop(),void(this.currentObject||(this.state=-1))):void 0},S.prototype.number=function(t){if(!G.test(t)){if(w.test(t))return this.word=parseFloat(this.word),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in number yet, index '+this.place)}this.word+=t},S.prototype.quoted=function(t){'"'!==t?this.word+=t:this.state=5},S.prototype.keyword=function(t){if(x.test(t))this.word+=t;else{if("["===t){var s=[];return s.push(this.word),this.level++,null===this.root?this.root=s:this.currentObject.push(s),this.stack.push(this.currentObject),this.currentObject=s,void(this.state=M)}if(!w.test(t))throw new Error("havn't handled \""+t+'" in keyword yet, index '+this.place);this.afterItem(t)}},S.prototype.neutral=function(t){if(y.test(t))return this.word=t,void(this.state=2);if('"'===t)return this.word="",void(this.state=4);if(G.test(t))return this.word=t,void(this.state=3);if(!w.test(t))throw new Error("havn't handled \""+t+'" in neutral yet, index '+this.place);this.afterItem(t)},S.prototype.output=function(){for(;this.place0?90:-90)):(t.lat0=N(t.lat1>0?90:-90),t.lat_ts=t.lat1)}function T(t){var s=c(t),i=s[0],e={};return j(s,e),R(e),e[i]}function E(t){var s=this;if(2===arguments.length){var i=arguments[1];"string"==typeof i?"+"===i.charAt(0)?E[t]=p(arguments[1]):E[t]=T(arguments[1]):E[t]=i}else if(1===arguments.length){if(Array.isArray(t))return t.map((function(t){Array.isArray(t)?E.apply(s,t):E(t)}));if("string"==typeof t){if(t in E)return E[t]}else"EPSG"in t?E["EPSG:"+t.EPSG]=t:"ESRI"in t?E["ESRI:"+t.ESRI]=t:"IAU2000"in t?E["IAU2000:"+t.IAU2000]=t:console.log(t);return}}!function(t){t("EPSG:4326","+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"),t("EPSG:4269","+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"),t("EPSG:3857","+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs");for(var s=1;s<=60;++s)t("EPSG:"+(32600+s),"+proj=utm +zone="+s+" +datum=WGS84 +units=m"),t("EPSG:"+(32700+s),"+proj=utm +zone="+s+" +south +datum=WGS84 +units=m");t.WGS84=t["EPSG:4326"],t["EPSG:3785"]=t["EPSG:3857"],t.GOOGLE=t["EPSG:3857"],t["EPSG:900913"]=t["EPSG:3857"],t["EPSG:102113"]=t["EPSG:3857"]}(E);const W=E;var C=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];var z=["3857","900913","3785","102113"];const P=function(t){if(!function(t){return"string"==typeof t}(t))return t;if(function(t){return t in W}(t))return W[t];if(function(t){return C.some((function(s){return t.indexOf(s)>-1}))}(t)){var s=T(t);if(function(t){var s=m(t,"authority");if(s){var i=m(s,"epsg");return i&&z.indexOf(i)>-1}}(s))return W["EPSG:3857"];var i=function(t){var s=m(t,"extension");if(s)return m(s,"proj4")}(s);return i?p(i):s}return function(t){return"+"===t[0]}(t)?p(t):void 0};function A(t,s){var i,e;if(t=t||{},!s)return t;for(e in s)void 0!==(i=s[e])&&(t[e]=i);return t}function I(t,s,i){var e=t*s;return i/Math.sqrt(1-e*e)}function O(t){return t<0?-1:1}function q(t){return Math.abs(t)<=u?t:t-O(t)*l}function L(t,s,i){var e=t*i,n=.5*t;return e=Math.pow((1-e)/(1+e),n),Math.tan(.5*(a-s))/e}function U(t,s){for(var i,e,n=.5*t,o=a-2*Math.atan(s),r=0;r<=15;r++)if(i=t*Math.sin(o),o+=e=a-2*Math.atan(s*Math.pow((1-i)/(1+i),n))-o,Math.abs(e)<=1e-10)return o;return-9999}function F(t){return t}var B=[{init:function(){var t=this.b/this.a;this.es=1-t*t,"x0"in this||(this.x0=0),"y0"in this||(this.y0=0),this.e=Math.sqrt(this.es),this.lat_ts?this.sphere?this.k0=Math.cos(this.lat_ts):this.k0=I(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)):this.k0||(this.k?this.k0=this.k:this.k0=1)},forward:function(t){var s,i,e=t.x,o=t.y;if(o*r>90&&o*r<-90&&e*r>180&&e*r<-180)return null;if(Math.abs(Math.abs(o)-a)<=n)return null;if(this.sphere)s=this.x0+this.a*this.k0*q(e-this.long0),i=this.y0+this.a*this.k0*Math.log(Math.tan(h+.5*o));else{var l=Math.sin(o),u=L(this.e,o,l);s=this.x0+this.a*this.k0*q(e-this.long0),i=this.y0-this.a*this.k0*Math.log(u)}return t.x=s,t.y=i,t},inverse:function(t){var s,i,e=t.x-this.x0,n=t.y-this.y0;if(this.sphere)i=a-2*Math.atan(Math.exp(-n/(this.a*this.k0)));else{var o=Math.exp(-n/(this.a*this.k0));if(-9999===(i=U(this.e,o)))return null}return s=q(this.long0+e/(this.a*this.k0)),t.x=s,t.y=i,t},names:["Mercator","Popular Visualisation Pseudo Mercator","Mercator_1SP","Mercator_Auxiliary_Sphere","merc"]},{init:function(){},forward:F,inverse:F,names:["longlat","identity"]}],D={},H=[];function Q(t,s){var i=H.length;return t.names?(H[i]=t,t.names.forEach((function(t){D[t.toLowerCase()]=i})),this):(console.log(s),!0)}const K={start:function(){B.forEach(Q)},add:Q,get:function(t){if(!t)return!1;var s=t.toLowerCase();return void 0!==D[s]&&H[D[s]]?H[D[s]]:void 0}};var X={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},APL4:{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},clrk80ign:{a:6378249.2,b:6356515,rf:293.4660213,ellipseName:"Clarke 1880 (IGN)"},clrk58:{a:6378293.645208759,rf:294.2606763692654,ellipseName:"Clarke 1858"},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS7:{a:6378135,rf:298.26,ellipseName:"WGS 72"}},J=X.WGS84={a:6378137,rf:298.257223563,ellipseName:"WGS 84"};X.sphere={a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"};var Z={wgs84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},ch1903:{towgs84:"674.374,15.056,405.346",ellipse:"bessel",datumName:"swiss"},ggrs87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},nad83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},nad27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"598.1,73.7,418.2,0.202,0.045,-2.455,6.7",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"577.326,90.129,463.919,5.137,1.474,5.297,2.4232",ellipse:"bessel",datumName:"Hermannskogel"},mgi:{towgs84:"577.326,90.129,463.919,5.137,1.474,5.297,2.4232",ellipse:"bessel",datumName:"Militar-Geographische Institut"},osni52:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"airy",datumName:"Irish National"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},rassadiran:{towgs84:"-133.63,-157.5,-158.62",ellipse:"intl",datumName:"Rassadiran"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},osgb36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Ordnance Survey of Great Britain 1936"},s_jtsk:{towgs84:"589,76,480",ellipse:"bessel",datumName:"S-JTSK (Ferro)"},beduaram:{towgs84:"-106,-87,188",ellipse:"clrk80",datumName:"Beduaram"},gunung_segara:{towgs84:"-403,684,41",ellipse:"bessel",datumName:"Gunung Segara Jakarta"},rnb72:{towgs84:"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",ellipse:"intl",datumName:"Reseau National Belge 1972"}};for(var V in Z){var Y=Z[V];Z[Y.datumName]=Y}const $=Z;const tt=function(t,s,i,a,n,o,r){var h={};return h.datum_type=void 0===t||"none"===t?5:4,s&&(h.datum_params=s.map(parseFloat),0===h.datum_params[0]&&0===h.datum_params[1]&&0===h.datum_params[2]||(h.datum_type=1),h.datum_params.length>3&&(0===h.datum_params[3]&&0===h.datum_params[4]&&0===h.datum_params[5]&&0===h.datum_params[6]||(h.datum_type=2,h.datum_params[3]*=e,h.datum_params[4]*=e,h.datum_params[5]*=e,h.datum_params[6]=h.datum_params[6]/1e6+1))),r&&(h.datum_type=3,h.grids=r),h.a=i,h.b=a,h.es=n,h.ep2=o,h};var st={};function it(t){if(0===t.length)return null;var s="@"===t[0];return s&&(t=t.slice(1)),"null"===t?{name:"null",mandatory:!s,grid:null,isNull:!0}:{name:t,mandatory:!s,grid:st[t]||null,isNull:!1}}function et(t){return t/3600*Math.PI/180}function at(t,s,i){return String.fromCharCode.apply(null,new Uint8Array(t.buffer.slice(s,i)))}function nt(t){return t.map((function(t){return[et(t.longitudeShift),et(t.latitudeShift)]}))}function ot(t,s,i){return{name:at(t,s+8,s+16).trim(),parent:at(t,s+24,s+24+8).trim(),lowerLatitude:t.getFloat64(s+72,i),upperLatitude:t.getFloat64(s+88,i),lowerLongitude:t.getFloat64(s+104,i),upperLongitude:t.getFloat64(s+120,i),latitudeInterval:t.getFloat64(s+136,i),longitudeInterval:t.getFloat64(s+152,i),gridNodeCount:t.getInt32(s+168,i)}}function rt(t,s,i,e){for(var a=s+176,n=[],o=0;o-1.001*a)l=-a;else if(l>a&&l<1.001*a)l=a;else{if(l<-a)return{x:-1/0,y:-1/0,z:t.z};if(l>a)return{x:1/0,y:1/0,z:t.z}}return h>Math.PI&&(h-=2*Math.PI),n=Math.sin(l),r=Math.cos(l),o=n*n,{x:((e=i/Math.sqrt(1-s*o))+u)*r*Math.cos(h),y:(e+u)*r*Math.sin(h),z:(e*(1-s)+u)*n}}function dt(t,s,i,e){var a,n,o,r,h,l,u,d,_,f,m,p,c,M,g,y=1e-12,x=t.x,w=t.y,G=t.z?t.z:0;if(a=Math.sqrt(x*x+w*w),n=Math.sqrt(x*x+w*w+G*G),a/i1e-24&&c<30);return{x:M,y:Math.atan(m/Math.abs(f)),z:g}}function _t(t){return 1===t||2===t}function ft(i,e,a){if(function(t,s){return t.datum_type===s.datum_type&&!(t.a!==s.a||Math.abs(t.es-s.es)>5e-11)&&(1===t.datum_type?t.datum_params[0]===s.datum_params[0]&&t.datum_params[1]===s.datum_params[1]&&t.datum_params[2]===s.datum_params[2]:2!==t.datum_type||t.datum_params[0]===s.datum_params[0]&&t.datum_params[1]===s.datum_params[1]&&t.datum_params[2]===s.datum_params[2]&&t.datum_params[3]===s.datum_params[3]&&t.datum_params[4]===s.datum_params[4]&&t.datum_params[5]===s.datum_params[5]&&t.datum_params[6]===s.datum_params[6])}(i,e))return a;if(5===i.datum_type||5===e.datum_type)return a;var n=i.a,o=i.es;if(3===i.datum_type){if(0!==mt(i,!1,a))return;n=t,o=s}var r=e.a,h=e.b,l=e.es;if(3===e.datum_type&&(r=t,h=6356752.314,l=s),o===l&&n===r&&!_t(i.datum_type)&&!_t(e.datum_type))return a;if((a=ut(a,o,n),_t(i.datum_type)&&(a=function(t,s,i){if(1===s)return{x:t.x+i[0],y:t.y+i[1],z:t.z+i[2]};if(2===s){var e=i[0],a=i[1],n=i[2],o=i[3],r=i[4],h=i[5],l=i[6];return{x:l*(t.x-h*t.y+r*t.z)+e,y:l*(h*t.x+t.y-o*t.z)+a,z:l*(-r*t.x+o*t.y+t.z)+n}}}(a,i.datum_type,i.datum_params)),_t(e.datum_type)&&(a=function(t,s,i){if(1===s)return{x:t.x-i[0],y:t.y-i[1],z:t.z-i[2]};if(2===s){var e=i[0],a=i[1],n=i[2],o=i[3],r=i[4],h=i[5],l=i[6],u=(t.x-e)/l,d=(t.y-a)/l,_=(t.z-n)/l;return{x:u+h*d-r*_,y:-h*u+d+o*_,z:r*u-o*d+_}}}(a,e.datum_type,e.datum_params)),a=dt(a,l,r,h),3===e.datum_type)&&0!==mt(e,!0,a))return;return a}function mt(t,s,i){if(null===t.grids||0===t.grids.length)return console.log("Grid shift grids not found"),-1;var e={x:-i.x,y:i.y},a={x:Number.NaN,y:Number.NaN},n=[];t:for(var o=0;oe.y||m>e.x||M1e-12&&Math.abs(o.y)>1e-12);if(h<0)return console.log("Inverse grid shift iterator failed to converge."),e;e.x=q(n.x+i.ll[0]),e.y=n.y+i.ll[1]}else isNaN(n.x)||(e.x=t.x+n.x,e.y=t.y+n.y);return e}function ct(t,s){var i,e={x:t.x/s.del[0],y:t.y/s.del[1]},a=Math.floor(e.x),n=Math.floor(e.y),o=e.x-1*a,r=e.y-1*n,h={x:Number.NaN,y:Number.NaN};if(a<0||a>=s.lim[0])return h;if(n<0||n>=s.lim[1])return h;i=n*s.lim[0]+a;var l=s.cvs[i][0],u=s.cvs[i][1];i++;var d=s.cvs[i][0],_=s.cvs[i][1];i+=s.lim[0];var f=s.cvs[i][0],m=s.cvs[i][1];i--;var p=s.cvs[i][0],c=s.cvs[i][1],M=o*r,g=o*(1-r),y=(1-o)*(1-r),x=(1-o)*r;return h.x=y*l+g*d+x*p+M*f,h.y=y*u+g*_+x*c+M*m,h}function Mt(t,s,i){var e,a,n,o=i.x,r=i.y,h=i.z||0,l={};for(n=0;n<3;n++)if(!s||2!==n||void 0!==i.z)switch(0===n?(e=o,a=-1!=="ew".indexOf(t.axis[n])?"x":"y"):1===n?(e=r,a=-1!=="ns".indexOf(t.axis[n])?"y":"x"):(e=h,a="z"),t.axis[n]){case"e":case"n":l[a]=e;break;case"w":case"s":l[a]=-e;break;case"u":void 0!==i[a]&&(l.z=e);break;case"d":void 0!==i[a]&&(l.z=-e);break;default:return null}return l}function gt(t){var s={x:t[0],y:t[1]};return t.length>2&&(s.z=t[2]),t.length>3&&(s.m=t[3]),s}function yt(t){if("function"==typeof Number.isFinite){if(Number.isFinite(t))return;throw new TypeError("coordinates must be finite numbers")}if("number"!=typeof t||t!=t||!isFinite(t))throw new TypeError("coordinates must be finite numbers")}function xt(t,s,i,e){var a,n=void 0!==(i=Array.isArray(i)?gt(i):{x:i.x,y:i.y,z:i.z,m:i.m}).z;if(function(t){yt(t.x),yt(t.y)}(i),t.datum&&s.datum&&function(t,s){return(1===t.datum.datum_type||2===t.datum.datum_type||3===t.datum.datum_type)&&"WGS84"!==s.datumCode||(1===s.datum.datum_type||2===s.datum.datum_type||3===s.datum.datum_type)&&"WGS84"!==t.datumCode}(t,s)&&(i=xt(t,a=new lt("WGS84"),i,e),t=a),e&&"enu"!==t.axis&&(i=Mt(t,!1,i)),"longlat"===t.projName)i={x:i.x*o,y:i.y*o,z:i.z||0};else if(t.to_meter&&(i={x:i.x*t.to_meter,y:i.y*t.to_meter,z:i.z||0}),!(i=t.inverse(i)))return;if(t.from_greenwich&&(i.x+=t.from_greenwich),i=ft(t.datum,s.datum,i))return s.from_greenwich&&(i={x:i.x-s.from_greenwich,y:i.y,z:i.z||0}),"longlat"===s.projName?i={x:i.x*r,y:i.y*r,z:i.z||0}:(i=s.forward(i),s.to_meter&&(i={x:i.x/s.to_meter,y:i.y/s.to_meter,z:i.z||0})),e&&"enu"!==s.axis?Mt(s,!0,i):(i&&!n&&delete i.z,i)}var wt=lt("WGS84");function Gt(t,s,i,e){var a,n,o;return Array.isArray(i)?(a=xt(t,s,i,e)||{x:NaN,y:NaN},i.length>2?void 0!==t.name&&"geocent"===t.name||void 0!==s.name&&"geocent"===s.name?"number"==typeof a.z?[a.x,a.y,a.z].concat(i.slice(3)):[a.x,a.y,i[2]].concat(i.slice(3)):[a.x,a.y].concat(i.slice(2)):[a.x,a.y]):(n=xt(t,s,i,e),2===(o=Object.keys(i)).length||o.forEach((function(e){if(void 0!==t.name&&"geocent"===t.name||void 0!==s.name&&"geocent"===s.name){if("x"===e||"y"===e||"z"===e)return}else if("x"===e||"y"===e)return;n[e]=i[e]})),n)}function St(t){return t instanceof lt?t:t.oProj?t.oProj:lt(t)}const vt=function(t,s,i){t=St(t);var e,a=!1;return void 0===s?(s=t,t=wt,a=!0):(void 0!==s.x||Array.isArray(s))&&(i=s,s=t,t=wt,a=!0),s=St(s),i?Gt(t,s,i):(e={forward:function(i,e){return Gt(t,s,i,e)},inverse:function(i,e){return Gt(s,t,i,e)}},a&&(e.oProj=s),e)};var jt="AJSAJS",bt="AFAFAF",Nt=65,Rt=73,kt=79,Tt=86,Et=90;const Wt={forward:Ct,inverse:function(t){var s=It(Lt(t.toUpperCase()));if(s.lat&&s.lon)return[s.lon,s.lat,s.lon,s.lat];return[s.left,s.bottom,s.right,s.top]},toPoint:zt};function Ct(t,s){return s=s||5,function(t,s){var i="00000"+t.easting,e="00000"+t.northing;return t.zoneNumber+t.zoneLetter+(f=t.easting,m=t.northing,p=t.zoneNumber,c=qt(p),M=Math.floor(f/1e5),g=Math.floor(m/1e5)%20,a=M,n=g,o=c,r=o-1,h=jt.charCodeAt(r),l=bt.charCodeAt(r),u=h+a-1,d=l+n,_=!1,u>Et&&(u=u-Et+Nt-1,_=!0),(u===Rt||hRt||(u>Rt||hkt||(u>kt||hEt&&(u=u-Et+Nt-1),d>Tt?(d=d-Tt+Nt-1,_=!0):_=!1,(d===Rt||lRt||(d>Rt||lkt||(d>kt||lTt&&(d=d-Tt+Nt-1),String.fromCharCode(u)+String.fromCharCode(d))+i.substr(i.length-5,s)+e.substr(e.length-5,s);var a,n,o,r,h,l,u,d,_;var f,m,p,c,M,g}(function(t){var s,i,e,a,n,o,r,h,l=t.lat,u=t.lon,d=6378137,_=.00669438,f=.9996,m=Pt(l),p=Pt(u);h=Math.floor((u+180)/6)+1,180===u&&(h=60);l>=56&&l<64&&u>=3&&u<12&&(h=32);l>=72&&l<84&&(u>=0&&u<9?h=31:u>=9&&u<21?h=33:u>=21&&u<33?h=35:u>=33&&u<42&&(h=37));r=Pt(6*(h-1)-180+3),s=_/(1-_),i=d/Math.sqrt(1-_*Math.sin(m)*Math.sin(m)),e=Math.tan(m)*Math.tan(m),a=s*Math.cos(m)*Math.cos(m),n=Math.cos(m)*(p-r),o=d*((1-_/4-3*_*_/64-5*_*_*_/256)*m-(3*_/8+3*_*_/32+45*_*_*_/1024)*Math.sin(2*m)+(15*_*_/256+45*_*_*_/1024)*Math.sin(4*m)-35*_*_*_/3072*Math.sin(6*m));var c=f*i*(n+(1-e+a)*n*n*n/6+(5-18*e+e*e+72*a-58*s)*n*n*n*n*n/120)+5e5,M=f*(o+i*Math.tan(m)*(n*n/2+(5-e+9*a+4*a*a)*n*n*n*n/24+(61-58*e+e*e+600*a-330*s)*n*n*n*n*n*n/720));l<0&&(M+=1e7);return{northing:Math.round(M),easting:Math.round(c),zoneNumber:h,zoneLetter:Ot(l)}}({lat:t[1],lon:t[0]}),s)}function zt(t){var s=It(Lt(t.toUpperCase()));return s.lat&&s.lon?[s.lon,s.lat]:[(s.left+s.right)/2,(s.top+s.bottom)/2]}function Pt(t){return t*(Math.PI/180)}function At(t){return t/Math.PI*180}function It(t){var s=t.northing,i=t.easting,e=t.zoneLetter,a=t.zoneNumber;if(a<0||a>60)return null;var n,o,r,h,l,u,d,_,f,m=.9996,p=6378137,c=.00669438,M=(1-Math.sqrt(.99330562))/(1+Math.sqrt(.99330562)),g=i-5e5,y=s;e<"N"&&(y-=1e7),d=6*(a-1)-180+3,n=.006739496752268451,f=(_=y/m/6367449.145945056)+(3*M/2-27*M*M*M/32)*Math.sin(2*_)+(21*M*M/16-55*M*M*M*M/32)*Math.sin(4*_)+151*M*M*M/96*Math.sin(6*_),o=p/Math.sqrt(1-c*Math.sin(f)*Math.sin(f)),r=Math.tan(f)*Math.tan(f),h=n*Math.cos(f)*Math.cos(f),l=.99330562*p/Math.pow(1-c*Math.sin(f)*Math.sin(f),1.5),u=g/(o*m);var x=f-o*Math.tan(f)/l*(u*u/2-(5+3*r+10*h-4*h*h-9*n)*u*u*u*u/24+(61+90*r+298*h+45*r*r-1.6983531815716497-3*h*h)*u*u*u*u*u*u/720);x=At(x);var w,G=(u-(1+2*r+h)*u*u*u/6+(5-2*h+28*r-3*h*h+8*n+24*r*r)*u*u*u*u*u/120)/Math.cos(f);if(G=d+At(G),t.accuracy){var S=It({northing:t.northing+t.accuracy,easting:t.easting+t.accuracy,zoneLetter:t.zoneLetter,zoneNumber:t.zoneNumber});w={top:S.lat,right:S.lon,bottom:x,left:G}}else w={lat:x,lon:G};return w}function Ot(t){var s="Z";return 84>=t&&t>=72?s="X":72>t&&t>=64?s="W":64>t&&t>=56?s="V":56>t&&t>=48?s="U":48>t&&t>=40?s="T":40>t&&t>=32?s="S":32>t&&t>=24?s="R":24>t&&t>=16?s="Q":16>t&&t>=8?s="P":8>t&&t>=0?s="N":0>t&&t>=-8?s="M":-8>t&&t>=-16?s="L":-16>t&&t>=-24?s="K":-24>t&&t>=-32?s="J":-32>t&&t>=-40?s="H":-40>t&&t>=-48?s="G":-48>t&&t>=-56?s="F":-56>t&&t>=-64?s="E":-64>t&&t>=-72?s="D":-72>t&&t>=-80&&(s="C"),s}function qt(t){var s=t%6;return 0===s&&(s=6),s}function Lt(t){if(t&&0===t.length)throw"MGRSPoint coverting from nothing";for(var s,i=t.length,e=null,a="",n=0;!/[A-Z]/.test(s=t.charAt(n));){if(n>=2)throw"MGRSPoint bad conversion from: "+t;a+=s,n++}var o=parseInt(a,10);if(0===n||n+3>i)throw"MGRSPoint bad conversion from: "+t;var r=t.charAt(n++);if(r<="A"||"B"===r||"Y"===r||r>="Z"||"I"===r||"O"===r)throw"MGRSPoint zone letter "+r+" not handled: "+t;e=t.substring(n,n+=2);for(var h=qt(o),l=function(t,s){var i=jt.charCodeAt(s-1),e=1e5,a=!1;for(;i!==t.charCodeAt(0);){if(++i===Rt&&i++,i===kt&&i++,i>Et){if(a)throw"Bad character: "+t;i=Nt,a=!0}e+=1e5}return e}(e.charAt(0),h),u=function(t,s){if(t>"V")throw"MGRSPoint given invalid Northing "+t;var i=bt.charCodeAt(s-1),e=0,a=!1;for(;i!==t.charCodeAt(0);){if(++i===Rt&&i++,i===kt&&i++,i>Tt){if(a)throw"Bad character: "+t;i=Nt,a=!0}e+=1e5}return e}(e.charAt(1),h);u0&&(_=1e5/Math.pow(10,p),f=t.substring(n,n+p),c=parseFloat(f)*_,m=t.substring(n+p),M=parseFloat(m)*_),{easting:c+l,northing:M+u,zoneLetter:r,zoneNumber:o,accuracy:_}}function Ut(t){var s;switch(t){case"C":s=11e5;break;case"D":s=2e6;break;case"E":s=28e5;break;case"F":s=37e5;break;case"G":s=46e5;break;case"H":s=55e5;break;case"J":s=64e5;break;case"K":s=73e5;break;case"L":s=82e5;break;case"M":s=91e5;break;case"N":s=0;break;case"P":s=8e5;break;case"Q":s=17e5;break;case"R":s=26e5;break;case"S":s=35e5;break;case"T":s=44e5;break;case"U":s=53e5;break;case"V":s=62e5;break;case"W":s=7e6;break;case"X":s=79e5;break;default:s=-1}if(s>=0)return s;throw"Invalid zone letter: "+t}function Ft(t,s,i){if(!(this instanceof Ft))return new Ft(t,s,i);if(Array.isArray(t))this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("object"==typeof t)this.x=t.x,this.y=t.y,this.z=t.z||0;else if("string"==typeof t&&void 0===s){var e=t.split(",");this.x=parseFloat(e[0],10),this.y=parseFloat(e[1],10),this.z=parseFloat(e[2],10)||0}else this.x=t,this.y=s,this.z=i||0;console.warn("proj4.Point will be removed in version 3, use proj4.toPoint")}Ft.fromMGRS=function(t){return new Ft(zt(t))},Ft.prototype.toMGRS=function(t){return Ct([this.x,this.y],t)};const Bt=Ft;var Dt=.046875,Ht=.01953125,Qt=.01068115234375;function Kt(t){var s=[];s[0]=1-t*(.25+t*(Dt+t*(Ht+t*Qt))),s[1]=t*(.75-t*(Dt+t*(Ht+t*Qt)));var i=t*t;return s[2]=i*(.46875-t*(.013020833333333334+.007120768229166667*t)),i*=t,s[3]=i*(.3645833333333333-.005696614583333333*t),s[4]=i*t*.3076171875,s}function Xt(t,s,i,e){return i*=s,s*=s,e[0]*t-i*(e[1]+s*(e[2]+s*(e[3]+s*e[4])))}function Jt(t,s,i){for(var e=1/(1-s),a=t,o=20;o;--o){var r=Math.sin(a),h=1-s*r*r;if(a-=h=(Xt(a,r,Math.cos(a),i)-t)*(h*Math.sqrt(h))*e,Math.abs(h)n?Math.tan(o):0,p=Math.pow(m,2),c=Math.pow(p,2);s=1-this.es*Math.pow(h,2),u/=Math.sqrt(s);var M=Xt(o,h,l,this.en);i=this.a*(this.k0*u*(1+d/6*(1-p+_+d/20*(5-18*p+c+14*_-58*p*_+d/42*(61+179*c-c*p-479*p)))))+this.x0,e=this.a*(this.k0*(M-this.ml0+h*r*u/2*(1+d/12*(5-p+9*_+4*f+d/30*(61+c-58*p+270*_-330*p*_+d/56*(1385+543*c-c*p-3111*p))))))+this.y0}else{var g=l*Math.sin(r);if(Math.abs(Math.abs(g)-1)=1){if(g-1>n)return 93;e=0}else e=Math.acos(e);o<0&&(e=-e),e=this.a*this.k0*(e-this.lat0)+this.y0}return t.x=i,t.y=e,t},inverse:function(t){var s,i,e,o,r=(t.x-this.x0)*(1/this.a),h=(t.y-this.y0)*(1/this.a);if(this.es)if(i=Jt(s=this.ml0+h/this.k0,this.es,this.en),Math.abs(i)n?Math.tan(i):0,_=this.ep2*Math.pow(u,2),f=Math.pow(_,2),m=Math.pow(d,2),p=Math.pow(m,2);s=1-this.es*Math.pow(l,2);var c=r*Math.sqrt(s)/this.k0,M=Math.pow(c,2);e=i-(s*=d)*M/(1-this.es)*.5*(1-M/12*(5+3*m-9*_*m+_-4*f-M/30*(61+90*m-252*_*m+45*p+46*_-M/56*(1385+3633*m+4095*p+1574*p*m)))),o=q(this.long0+c*(1-M/6*(1+2*m+_-M/20*(5+28*m+24*p+8*_*m+6*_-M/42*(61+662*m+1320*p+720*p*m))))/u)}else e=a*O(h),o=0;else{var g=Math.exp(r/this.k0),y=.5*(g-1/g),x=this.lat0+h/this.k0,w=Math.cos(x);s=Math.sqrt((1-Math.pow(w,2))/(1+Math.pow(y,2))),e=Math.asin(s),h<0&&(e=-e),o=0===y&&0===w?0:q(Math.atan2(y,w)+this.long0)}return t.x=o,t.y=e,t},names:["Fast_Transverse_Mercator","Fast Transverse Mercator"]};function Vt(t){var s=Math.exp(t);return s=(s-1/s)/2}function Yt(t,s){t=Math.abs(t),s=Math.abs(s);var i=Math.max(t,s),e=Math.min(t,s)/(i||1);return i*Math.sqrt(1+Math.pow(e,2))}function $t(t){var s=Math.abs(t);return s=function(t){var s=1+t,i=s-1;return 0===i?t:t*Math.log(s)/i}(s*(1+s/(Yt(1,s)+1))),t<0?-s:s}function ts(t,s){for(var i,e=2*Math.cos(2*s),a=t.length-1,n=t[a],o=0;--a>=0;)i=e*n-o+t[a],o=n,n=i;return s+i*Math.sin(2*s)}function ss(t,s,i){for(var e,a,n=Math.sin(s),o=Math.cos(s),r=Vt(i),h=function(t){var s=Math.exp(t);return(s+1/s)/2}(i),l=2*o*h,u=-2*n*r,d=t.length-1,_=t[d],f=0,m=0,p=0;--d>=0;)e=m,a=f,_=l*(m=_)-e-u*(f=p)+t[d],p=u*m-a+l*f;return[(l=n*h)*_-(u=o*r)*p,l*p+u*_]}const is={init:function(){if(!this.approx&&(isNaN(this.es)||this.es<=0))throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION["Fast_Transverse_Mercator"] in the WKT.');this.approx&&(Zt.init.apply(this),this.forward=Zt.forward,this.inverse=Zt.inverse),this.x0=void 0!==this.x0?this.x0:0,this.y0=void 0!==this.y0?this.y0:0,this.long0=void 0!==this.long0?this.long0:0,this.lat0=void 0!==this.lat0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var t=this.es/(1+Math.sqrt(1-this.es)),s=t/(2-t),i=s;this.cgb[0]=s*(2+s*(-2/3+s*(s*(116/45+s*(26/45+s*(-2854/675)))-2))),this.cbg[0]=s*(s*(2/3+s*(4/3+s*(-82/45+s*(32/45+s*(4642/4725)))))-2),i*=s,this.cgb[1]=i*(7/3+s*(s*(-227/45+s*(2704/315+s*(2323/945)))-1.6)),this.cbg[1]=i*(5/3+s*(-16/15+s*(-13/9+s*(904/315+s*(-1522/945))))),i*=s,this.cgb[2]=i*(56/15+s*(-136/35+s*(-1262/105+s*(73814/2835)))),this.cbg[2]=i*(-26/15+s*(34/21+s*(1.6+s*(-12686/2835)))),i*=s,this.cgb[3]=i*(4279/630+s*(-332/35+s*(-399572/14175))),this.cbg[3]=i*(1237/630+s*(s*(-24832/14175)-2.4)),i*=s,this.cgb[4]=i*(4174/315+s*(-144838/6237)),this.cbg[4]=i*(-734/315+s*(109598/31185)),i*=s,this.cgb[5]=i*(601676/22275),this.cbg[5]=i*(444337/155925),i=Math.pow(s,2),this.Qn=this.k0/(1+s)*(1+i*(1/4+i*(1/64+i/256))),this.utg[0]=s*(s*(2/3+s*(-37/96+s*(1/360+s*(81/512+s*(-96199/604800)))))-.5),this.gtu[0]=s*(.5+s*(-2/3+s*(5/16+s*(41/180+s*(-127/288+s*(7891/37800)))))),this.utg[1]=i*(-1/48+s*(-1/15+s*(437/1440+s*(-46/105+s*(1118711/3870720))))),this.gtu[1]=i*(13/48+s*(s*(557/1440+s*(281/630+s*(-1983433/1935360)))-.6)),i*=s,this.utg[2]=i*(-17/480+s*(37/840+s*(209/4480+s*(-5569/90720)))),this.gtu[2]=i*(61/240+s*(-103/140+s*(15061/26880+s*(167603/181440)))),i*=s,this.utg[3]=i*(-4397/161280+s*(11/504+s*(830251/7257600))),this.gtu[3]=i*(49561/161280+s*(-179/168+s*(6601661/7257600))),i*=s,this.utg[4]=i*(-4583/161280+s*(108847/3991680)),this.gtu[4]=i*(34729/80640+s*(-3418889/1995840)),i*=s,this.utg[5]=i*(-20648693/638668800),this.gtu[5]=.6650675310896665*i;var e=ts(this.cbg,this.lat0);this.Zb=-this.Qn*(e+function(t,s){for(var i,e=2*Math.cos(s),a=t.length-1,n=t[a],o=0;--a>=0;)i=e*n-o+t[a],o=n,n=i;return Math.sin(s)*i}(this.gtu,2*e))},forward:function(t){var s=q(t.x-this.long0),i=t.y;i=ts(this.cbg,i);var e=Math.sin(i),a=Math.cos(i),n=Math.sin(s),o=Math.cos(s);i=Math.atan2(e,o*a),s=Math.atan2(n*a,Yt(e,a*o)),s=$t(Math.tan(s));var r,h,l=ss(this.gtu,2*i,2*s);return i+=l[0],s+=l[1],Math.abs(s)<=2.623395162778?(r=this.a*(this.Qn*s)+this.x0,h=this.a*(this.Qn*i+this.Zb)+this.y0):(r=1/0,h=1/0),t.x=r,t.y=h,t},inverse:function(t){var s,i,e=(t.x-this.x0)*(1/this.a),a=(t.y-this.y0)*(1/this.a);if(a=(a-this.Zb)/this.Qn,e/=this.Qn,Math.abs(e)<=2.623395162778){var n=ss(this.utg,2*a,2*e);a+=n[0],e+=n[1],e=Math.atan(Vt(e));var o=Math.sin(a),r=Math.cos(a),h=Math.sin(e),l=Math.cos(e);a=Math.atan2(o*l,Yt(h,l*r)),s=q((e=Math.atan2(h,l*r))+this.long0),i=ts(this.cgb,a)}else s=1/0,i=1/0;return t.x=s,t.y=i,t},names:["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc","Transverse_Mercator","Transverse Mercator","Gauss Kruger","Gauss_Kruger","tmerc"]};const es={init:function(){var t=function(t,s){if(void 0===t){if((t=Math.floor(30*(q(s)+Math.PI)/Math.PI)+1)<0)return 0;if(t>60)return 60}return t}(this.zone,this.long0);if(void 0===t)throw new Error("unknown utm zone");this.lat0=0,this.long0=(6*Math.abs(t)-183)*o,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,is.init.apply(this),this.forward=is.forward,this.inverse=is.inverse},names:["Universal Transverse Mercator System","utm"],dependsOn:"etmerc"};function as(t,s){return Math.pow((1-t)/(1+t),s)}const ns={init:function(){var t=Math.sin(this.lat0),s=Math.cos(this.lat0);s*=s,this.rc=Math.sqrt(1-this.es)/(1-this.es*t*t),this.C=Math.sqrt(1+this.es*s*s/(1-this.es)),this.phic0=Math.asin(t/this.C),this.ratexp=.5*this.C*this.e,this.K=Math.tan(.5*this.phic0+h)/(Math.pow(Math.tan(.5*this.lat0+h),this.C)*as(this.e*t,this.ratexp))},forward:function(t){var s=t.x,i=t.y;return t.y=2*Math.atan(this.K*Math.pow(Math.tan(.5*i+h),this.C)*as(this.e*Math.sin(i),this.ratexp))-a,t.x=this.C*s,t},inverse:function(t){for(var s=t.x/this.C,i=t.y,e=Math.pow(Math.tan(.5*i+h)/this.K,1/this.C),n=20;n>0&&(i=2*Math.atan(e*as(this.e*Math.sin(t.y),-.5*this.e))-a,!(Math.abs(i-t.y)<1e-14));--n)t.y=i;return n?(t.x=s,t.y=i,t):null},names:["gauss"]};const os={init:function(){ns.init.apply(this),this.rc&&(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"))},forward:function(t){var s,i,e,a;return t.x=q(t.x-this.long0),ns.forward.apply(this,[t]),s=Math.sin(t.y),i=Math.cos(t.y),e=Math.cos(t.x),a=this.k0*this.R2/(1+this.sinc0*s+this.cosc0*i*e),t.x=a*i*Math.sin(t.x),t.y=a*(this.cosc0*s-this.sinc0*i*e),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var s,i,e,a,n;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,n=Yt(t.x,t.y)){var o=2*Math.atan2(n,this.R2);s=Math.sin(o),i=Math.cos(o),a=Math.asin(i*this.sinc0+t.y*s*this.cosc0/n),e=Math.atan2(t.x*s,n*this.cosc0*i-t.y*this.sinc0*s)}else a=this.phic0,e=0;return t.x=e,t.y=a,ns.inverse.apply(this,[t]),t.x=q(t.x+this.long0),t},names:["Stereographic_North_Pole","Oblique_Stereographic","sterea","Oblique Stereographic Alternative","Double_Stereographic"]};const rs={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.coslat0=Math.cos(this.lat0),this.sinlat0=Math.sin(this.lat0),this.sphere?1===this.k0&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=n&&(this.k0=.5*(1+O(this.lat0)*Math.sin(this.lat_ts))):(Math.abs(this.coslat0)<=n&&(this.lat0>0?this.con=1:this.con=-1),this.cons=Math.sqrt(Math.pow(1+this.e,1+this.e)*Math.pow(1-this.e,1-this.e)),1===this.k0&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=n&&Math.abs(Math.cos(this.lat_ts))>n&&(this.k0=.5*this.cons*I(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts))/L(this.e,this.con*this.lat_ts,this.con*Math.sin(this.lat_ts))),this.ms1=I(this.e,this.sinlat0,this.coslat0),this.X0=2*Math.atan(this.ssfn_(this.lat0,this.sinlat0,this.e))-a,this.cosX0=Math.cos(this.X0),this.sinX0=Math.sin(this.X0))},forward:function(t){var s,i,e,o,r,h,l=t.x,u=t.y,d=Math.sin(u),_=Math.cos(u),f=q(l-this.long0);return Math.abs(Math.abs(l-this.long0)-Math.PI)<=n&&Math.abs(u+this.lat0)<=n?(t.x=NaN,t.y=NaN,t):this.sphere?(s=2*this.k0/(1+this.sinlat0*d+this.coslat0*_*Math.cos(f)),t.x=this.a*s*_*Math.sin(f)+this.x0,t.y=this.a*s*(this.coslat0*d-this.sinlat0*_*Math.cos(f))+this.y0,t):(i=2*Math.atan(this.ssfn_(u,d,this.e))-a,o=Math.cos(i),e=Math.sin(i),Math.abs(this.coslat0)<=n?(r=L(this.e,u*this.con,this.con*d),h=2*this.a*this.k0*r/this.cons,t.x=this.x0+h*Math.sin(l-this.long0),t.y=this.y0-this.con*h*Math.cos(l-this.long0),t):(Math.abs(this.sinlat0)0?q(this.long0+Math.atan2(t.x,-1*t.y)):q(this.long0+Math.atan2(t.x,t.y)):q(this.long0+Math.atan2(t.x*Math.sin(l),h*this.coslat0*Math.cos(l)-t.y*this.sinlat0*Math.sin(l))),t.x=s,t.y=i,t)}if(Math.abs(this.coslat0)<=n){if(h<=n)return i=this.lat0,s=this.long0,t.x=s,t.y=i,t;t.x*=this.con,t.y*=this.con,e=h*this.cons/(2*this.a*this.k0),i=this.con*U(this.e,e),s=this.con*q(this.con*this.long0+Math.atan2(t.x,-1*t.y))}else o=2*Math.atan(h*this.cosX0/(2*this.a*this.k0*this.ms1)),s=this.long0,h<=n?r=this.X0:(r=Math.asin(Math.cos(o)*this.sinX0+t.y*Math.sin(o)*this.cosX0/h),s=q(this.long0+Math.atan2(t.x*Math.sin(o),h*this.cosX0*Math.cos(o)-t.y*this.sinX0*Math.sin(o)))),i=-1*U(this.e,Math.tan(.5*(a+r)));return t.x=s,t.y=i,t},names:["stere","Stereographic_South_Pole","Polar Stereographic (variant B)","Polar_Stereographic"],ssfn_:function(t,s,i){return s*=i,Math.tan(.5*(a+t))*Math.pow((1-s)/(1+s),.5*i)}};const hs={init:function(){var t=this.lat0;this.lambda0=this.long0;var s=Math.sin(t),i=this.a,e=1/this.rf,a=2*e-Math.pow(e,2),n=this.e=Math.sqrt(a);this.R=this.k0*i*Math.sqrt(1-a)/(1-a*Math.pow(s,2)),this.alpha=Math.sqrt(1+a/(1-a)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(s/this.alpha);var o=Math.log(Math.tan(Math.PI/4+this.b0/2)),r=Math.log(Math.tan(Math.PI/4+t/2)),h=Math.log((1+n*s)/(1-n*s));this.K=o-this.alpha*r+this.alpha*n/2*h},forward:function(t){var s=Math.log(Math.tan(Math.PI/4-t.y/2)),i=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),e=-this.alpha*(s+i)+this.K,a=2*(Math.atan(Math.exp(e))-Math.PI/4),n=this.alpha*(t.x-this.lambda0),o=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(a)+Math.cos(this.b0)*Math.cos(n))),r=Math.asin(Math.cos(this.b0)*Math.sin(a)-Math.sin(this.b0)*Math.cos(a)*Math.cos(n));return t.y=this.R/2*Math.log((1+Math.sin(r))/(1-Math.sin(r)))+this.y0,t.x=this.R*o+this.x0,t},inverse:function(t){for(var s=t.x-this.x0,i=t.y-this.y0,e=s/this.R,a=2*(Math.atan(Math.exp(i/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(a)+Math.sin(this.b0)*Math.cos(a)*Math.cos(e)),o=Math.atan(Math.sin(e)/(Math.cos(this.b0)*Math.cos(e)-Math.sin(this.b0)*Math.tan(a))),r=this.lambda0+o/this.alpha,h=0,l=n,u=-1e3,d=0;Math.abs(l-u)>1e-7;){if(++d>20)return;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(l))/2)),u=l,l=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=r,t.y=l,t},names:["somerc"]};var ls=1e-7;const us={init:function(){var t,s,i,e,r,u,d,_,f,m,p,c,M,g=0,y=0,x=0,w=0,G=0,S=0,v=0;this.no_off=(M="object"==typeof(c=this).PROJECTION?Object.keys(c.PROJECTION)[0]:c.PROJECTION,"no_uoff"in c||"no_off"in c||-1!==["Hotine_Oblique_Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin"].indexOf(M)),this.no_rot="no_rot"in this;var j=!1;"alpha"in this&&(j=!0);var b=!1;if("rectified_grid_angle"in this&&(b=!0),j&&(v=this.alpha),b&&(g=this.rectified_grid_angle*o),j||b)y=this.longc;else if(x=this.long1,G=this.lat1,w=this.long2,S=this.lat2,Math.abs(G-S)<=ls||(t=Math.abs(G))<=ls||Math.abs(t-a)<=ls||Math.abs(Math.abs(this.lat0)-a)<=ls||Math.abs(Math.abs(S)-a)<=ls)throw new Error;var N=1-this.es;s=Math.sqrt(N),Math.abs(this.lat0)>n?(_=Math.sin(this.lat0),i=Math.cos(this.lat0),t=1-this.es*_*_,this.B=i*i,this.B=Math.sqrt(1+this.es*this.B*this.B/N),this.A=this.B*this.k0*s/t,(r=(e=this.B*s/(i*Math.sqrt(t)))*e-1)<=0?r=0:(r=Math.sqrt(r),this.lat0<0&&(r=-r)),this.E=r+=e,this.E*=Math.pow(L(this.e,this.lat0,_),this.B)):(this.B=1/s,this.A=this.k0,this.E=e=r=1),j||b?(j?(p=Math.asin(Math.sin(v)/e),b||(g=v)):(p=g,v=Math.asin(e*Math.sin(p))),this.lam0=y-Math.asin(.5*(r-1/r)*Math.tan(p))/this.B):(u=Math.pow(L(this.e,G,Math.sin(G)),this.B),d=Math.pow(L(this.e,S,Math.sin(S)),this.B),r=this.E/u,f=(d-u)/(d+u),m=((m=this.E*this.E)-d*u)/(m+d*u),(t=x-w)<-Math.pi?w-=l:t>Math.pi&&(w+=l),this.lam0=q(.5*(x+w)-Math.atan(m*Math.tan(.5*this.B*(x-w))/f)/this.B),p=Math.atan(2*Math.sin(this.B*q(x-this.lam0))/(r-1/r)),g=v=Math.asin(e*Math.sin(p))),this.singam=Math.sin(p),this.cosgam=Math.cos(p),this.sinrot=Math.sin(g),this.cosrot=Math.cos(g),this.rB=1/this.B,this.ArB=this.A*this.rB,this.BrA=1/this.ArB,this.A,this.B,this.no_off?this.u_0=0:(this.u_0=Math.abs(this.ArB*Math.atan(Math.sqrt(e*e-1)/Math.cos(v))),this.lat0<0&&(this.u_0=-this.u_0)),r=.5*p,this.v_pole_n=this.ArB*Math.log(Math.tan(h-r)),this.v_pole_s=this.ArB*Math.log(Math.tan(h+r))},forward:function(t){var s,i,e,o,r,h,l,u,d={};if(t.x=t.x-this.lam0,Math.abs(Math.abs(t.y)-a)>n){if(s=.5*((r=this.E/Math.pow(L(this.e,t.y,Math.sin(t.y)),this.B))-(h=1/r)),i=.5*(r+h),o=Math.sin(this.B*t.x),e=(s*this.singam-o*this.cosgam)/i,Math.abs(Math.abs(e)-1)0?this.v_pole_n:this.v_pole_s,l=this.ArB*t.y;return this.no_rot?(d.x=l,d.y=u):(l-=this.u_0,d.x=u*this.cosrot+l*this.sinrot,d.y=l*this.cosrot-u*this.sinrot),d.x=this.a*d.x+this.x0,d.y=this.a*d.y+this.y0,d},inverse:function(t){var s,i,e,o,r,h,l,u={};if(t.x=(t.x-this.x0)*(1/this.a),t.y=(t.y-this.y0)*(1/this.a),this.no_rot?(i=t.y,s=t.x):(i=t.x*this.cosrot-t.y*this.sinrot,s=t.y*this.cosrot+t.x*this.sinrot+this.u_0),o=.5*((e=Math.exp(-this.BrA*i))-1/e),r=.5*(e+1/e),l=((h=Math.sin(this.BrA*s))*this.cosgam+o*this.singam)/r,Math.abs(Math.abs(l)-1)n?this.ns=Math.log(e/h)/Math.log(a/l):this.ns=s,isNaN(this.ns)&&(this.ns=s),this.f0=e/(this.ns*Math.pow(a,this.ns)),this.rh=this.a*this.f0*Math.pow(u,this.ns),this.title||(this.title="Lambert Conformal Conic")}},forward:function(t){var s=t.x,i=t.y;Math.abs(2*Math.abs(i)-Math.PI)<=n&&(i=O(i)*(a-2e-10));var e,o,r=Math.abs(Math.abs(i)-a);if(r>n)e=L(this.e,i,Math.sin(i)),o=this.a*this.f0*Math.pow(e,this.ns);else{if((r=i*this.ns)<=0)return null;o=0}var h=this.ns*q(s-this.long0);return t.x=this.k0*(o*Math.sin(h))+this.x0,t.y=this.k0*(this.rh-o*Math.cos(h))+this.y0,t},inverse:function(t){var s,i,e,n,o,r=(t.x-this.x0)/this.k0,h=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(s=Math.sqrt(r*r+h*h),i=1):(s=-Math.sqrt(r*r+h*h),i=-1);var l=0;if(0!==s&&(l=Math.atan2(i*r,i*h)),0!==s||this.ns>0){if(i=1/this.ns,e=Math.pow(s/(this.a*this.f0),i),-9999===(n=U(this.e,e)))return null}else n=-a;return o=q(l/this.ns+this.long0),t.x=o,t.y=n,t},names:["Lambert Tangential Conformal Conic Projection","Lambert_Conformal_Conic","Lambert_Conformal_Conic_1SP","Lambert_Conformal_Conic_2SP","lcc","Lambert Conic Conformal (1SP)","Lambert Conic Conformal (2SP)"]};const _s={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var s,i,e,a,n,o,r,h=t.x,l=t.y,u=q(h-this.long0);return s=Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.alfa*this.e/2),i=2*(Math.atan(this.k*Math.pow(Math.tan(l/2+this.s45),this.alfa)/s)-this.s45),e=-u*this.alfa,a=Math.asin(Math.cos(this.ad)*Math.sin(i)+Math.sin(this.ad)*Math.cos(i)*Math.cos(e)),n=Math.asin(Math.cos(i)*Math.sin(e)/Math.cos(a)),o=this.n*n,r=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(a/2+this.s45),this.n),t.y=r*Math.cos(o)/1,t.x=r*Math.sin(o)/1,this.czech||(t.y*=-1,t.x*=-1),t},inverse:function(t){var s,i,e,a,n,o,r,h=t.x;t.x=t.y,t.y=h,this.czech||(t.y*=-1,t.x*=-1),n=Math.sqrt(t.x*t.x+t.y*t.y),a=Math.atan2(t.y,t.x)/Math.sin(this.s0),e=2*(Math.atan(Math.pow(this.ro0/n,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),s=Math.asin(Math.cos(this.ad)*Math.sin(e)-Math.sin(this.ad)*Math.cos(e)*Math.cos(a)),i=Math.asin(Math.cos(e)*Math.sin(a)/Math.cos(s)),t.x=this.long0-i/this.alfa,o=s,r=0;var l=0;do{t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(s/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(o))/(1-this.e*Math.sin(o)),this.e/2))-this.s45),Math.abs(o-t.y)<1e-10&&(r=1),o=t.y,l+=1}while(0===r&&l<15);return l>=15?null:t},names:["Krovak","krovak"]};function fs(t,s,i,e,a){return t*a-s*Math.sin(2*a)+i*Math.sin(4*a)-e*Math.sin(6*a)}function ms(t){return 1-.25*t*(1+t/16*(3+1.25*t))}function ps(t){return.375*t*(1+.25*t*(1+.46875*t))}function cs(t){return.05859375*t*t*(1+.75*t)}function Ms(t){return t*t*t*(35/3072)}function gs(t,s,i){var e=s*i;return t/Math.sqrt(1-e*e)}function ys(t){return Math.abs(t)1e-7?(1-t*t)*(s/(1-(i=t*s)*i)-.5/t*Math.log((1-i)/(1+i))):2*s}var Ss=.3333333333333333,vs=.17222222222222222,js=.10257936507936508,bs=.06388888888888888,Ns=.0664021164021164,Rs=.016415012942191543;const ks={init:function(){var t,s=Math.abs(this.lat0);if(Math.abs(s-a)0)switch(this.qp=Gs(this.e,1),this.mmf=.5/(1-this.es),this.apa=function(t){var s,i=[];return i[0]=t*Ss,s=t*t,i[0]+=s*vs,i[1]=s*bs,s*=t,i[0]+=s*js,i[1]+=s*Ns,i[2]=s*Rs,i}(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),t=Math.sin(this.lat0),this.sinb1=Gs(this.e,t)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*t*t)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}else this.mode===this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var s,i,e,o,r,l,u,d,_,f,m=t.x,p=t.y;if(m=q(m-this.long0),this.sphere){if(r=Math.sin(p),f=Math.cos(p),e=Math.cos(m),this.mode===this.OBLIQ||this.mode===this.EQUIT){if((i=this.mode===this.EQUIT?1+f*e:1+this.sinph0*r+this.cosph0*f*e)<=n)return null;s=(i=Math.sqrt(2/i))*f*Math.sin(m),i*=this.mode===this.EQUIT?r:this.cosph0*r-this.sinph0*f*e}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(e=-e),Math.abs(p+this.lat0)=0?(s=(_=Math.sqrt(l))*o,i=e*(this.mode===this.S_POLE?_:-_)):s=i=0}}return t.x=this.a*s+this.x0,t.y=this.a*i+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var s,i,e,o,r,h,l,u,d,_,f=t.x/this.a,m=t.y/this.a;if(this.sphere){var p,c=0,M=0;if((i=.5*(p=Math.sqrt(f*f+m*m)))>1)return null;switch(i=2*Math.asin(i),this.mode!==this.OBLIQ&&this.mode!==this.EQUIT||(M=Math.sin(i),c=Math.cos(i)),this.mode){case this.EQUIT:i=Math.abs(p)<=n?0:Math.asin(m*M/p),f*=M,m=c*p;break;case this.OBLIQ:i=Math.abs(p)<=n?this.lat0:Math.asin(c*this.sinph0+m*M*this.cosph0/p),f*=M*this.cosph0,m=(c-Math.sin(i)*this.sinph0)*p;break;case this.N_POLE:m=-m,i=a-i;break;case this.S_POLE:i-=a}s=0!==m||this.mode!==this.EQUIT&&this.mode!==this.OBLIQ?Math.atan2(f,m):0}else{if(l=0,this.mode===this.OBLIQ||this.mode===this.EQUIT){if(f/=this.dd,m*=this.dd,(h=Math.sqrt(f*f+m*m))1&&(t=t>1?1:-1),Math.asin(t)}const Es={init:function(){Math.abs(this.lat1+this.lat2)n?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)},forward:function(t){var s=t.x,i=t.y;this.sin_phi=Math.sin(i),this.cos_phi=Math.cos(i);var e=Gs(this.e3,this.sin_phi),a=this.a*Math.sqrt(this.c-this.ns0*e)/this.ns0,n=this.ns0*q(s-this.long0),o=a*Math.sin(n)+this.x0,r=this.rh-a*Math.cos(n)+this.y0;return t.x=o,t.y=r,t},inverse:function(t){var s,i,e,a,n,o;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(s=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1),a=0,0!==s&&(a=Math.atan2(e*t.x,e*t.y)),e=s*this.ns0/this.a,this.sphere?o=Math.asin((this.c-e*e)/(2*this.ns0)):(i=(this.c-e*e)/this.ns0,o=this.phi1z(this.e3,i)),n=q(a/this.ns0+this.long0),t.x=n,t.y=o,t},names:["Albers_Conic_Equal_Area","Albers","aea"],phi1z:function(t,s){var i,e,a,o,r=Ts(.5*s);if(t0||Math.abs(o)<=n?(r=this.x0+1*this.a*i*Math.sin(e)/o,h=this.y0+1*this.a*(this.cos_p14*s-this.sin_p14*i*a)/o):(r=this.x0+this.infinity_dist*i*Math.sin(e),h=this.y0+this.infinity_dist*(this.cos_p14*s-this.sin_p14*i*a)),t.x=r,t.y=h,t},inverse:function(t){var s,i,e,a,n,o;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(s=Math.sqrt(t.x*t.x+t.y*t.y))?(a=Math.atan2(s,this.rc),i=Math.sin(a),o=Ts((e=Math.cos(a))*this.sin_p14+t.y*i*this.cos_p14/s),n=Math.atan2(t.x*i,s*this.cos_p14*e-t.y*this.sin_p14*i),n=q(this.long0+n)):(o=this.phic0,n=0),t.x=n,t.y=o,t},names:["gnom"]};const Cs={init:function(){this.sphere||(this.k0=I(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var s,i,e=t.x,a=t.y,n=q(e-this.long0);if(this.sphere)s=this.x0+this.a*n*Math.cos(this.lat_ts),i=this.y0+this.a*Math.sin(a)/Math.cos(this.lat_ts);else{var o=Gs(this.e,Math.sin(a));s=this.x0+this.a*this.k0*n,i=this.y0+this.a*o*.5/this.k0}return t.x=s,t.y=i,t},inverse:function(t){var s,i;return t.x-=this.x0,t.y-=this.y0,this.sphere?(s=q(this.long0+t.x/this.a/Math.cos(this.lat_ts)),i=Math.asin(t.y/this.a*Math.cos(this.lat_ts))):(i=function(t,s){var i=1-(1-t*t)/(2*t)*Math.log((1-t)/(1+t));if(Math.abs(Math.abs(s)-i)<1e-6)return s<0?-1*a:a;for(var e,n,o,r,h=Math.asin(.5*s),l=0;l<30;l++)if(n=Math.sin(h),o=Math.cos(h),r=t*n,h+=e=Math.pow(1-r*r,2)/(2*o)*(s/(1-t*t)-n/(1-r*r)+.5/t*Math.log((1-r)/(1+r))),Math.abs(e)<=1e-10)return h;return NaN}(this.e,2*t.y*this.k0/this.a),s=q(this.long0+t.x/(this.a*this.k0))),t.x=s,t.y=i,t},names:["cea"]};const zs={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Equidistant Cylindrical (Plate Carre)",this.rc=Math.cos(this.lat_ts)},forward:function(t){var s=t.x,i=t.y,e=q(s-this.long0),a=ys(i-this.lat0);return t.x=this.x0+this.a*e*this.rc,t.y=this.y0+this.a*a,t},inverse:function(t){var s=t.x,i=t.y;return t.x=q(this.long0+(s-this.x0)/(this.a*this.rc)),t.y=ys(this.lat0+(i-this.y0)/this.a),t},names:["Equirectangular","Equidistant_Cylindrical","eqc"]};const Ps={init:function(){this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=ms(this.es),this.e1=ps(this.es),this.e2=cs(this.es),this.e3=Ms(this.es),this.ml0=this.a*fs(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var s,i,e,a=t.x,o=t.y,r=q(a-this.long0);if(e=r*Math.sin(o),this.sphere)Math.abs(o)<=n?(s=this.a*r,i=-1*this.a*this.lat0):(s=this.a*Math.sin(e)/Math.tan(o),i=this.a*(ys(o-this.lat0)+(1-Math.cos(e))/Math.tan(o)));else if(Math.abs(o)<=n)s=this.a*r,i=-1*this.ml0;else{var h=gs(this.a,this.e,Math.sin(o))/Math.tan(o);s=h*Math.sin(e),i=this.a*fs(this.e0,this.e1,this.e2,this.e3,o)-this.ml0+h*(1-Math.cos(e))}return t.x=s+this.x0,t.y=i+this.y0,t},inverse:function(t){var s,i,e,a,o,r,h,l,u;if(e=t.x-this.x0,a=t.y-this.y0,this.sphere)if(Math.abs(a+this.a*this.lat0)<=n)s=q(e/this.a+this.long0),i=0;else{var d;for(r=this.lat0+a/this.a,h=e*e/this.a/this.a+r*r,l=r,o=20;o;--o)if(l+=u=-1*(r*(l*(d=Math.tan(l))+1)-l-.5*(l*l+h)*d)/((l-r)/d-1),Math.abs(u)<=n){i=l;break}s=q(this.long0+Math.asin(e*Math.tan(l)/this.a)/Math.sin(i))}else if(Math.abs(a+this.ml0)<=n)i=0,s=q(this.long0+e/this.a);else{var _,f,m,p,c;for(r=(this.ml0+a)/this.a,h=e*e/this.a/this.a+r*r,l=r,o=20;o;--o)if(c=this.e*Math.sin(l),_=Math.sqrt(1-c*c)*Math.tan(l),f=this.a*fs(this.e0,this.e1,this.e2,this.e3,l),m=this.e0-2*this.e1*Math.cos(2*l)+4*this.e2*Math.cos(4*l)-6*this.e3*Math.cos(6*l),l-=u=(r*(_*(p=f/this.a)+1)-p-.5*_*(p*p+h))/(this.es*Math.sin(2*l)*(p*p+h-2*r*p)/(4*_)+(r-p)*(_*m-2/Math.sin(2*l))-m),Math.abs(u)<=n){i=l;break}_=Math.sqrt(1-this.es*Math.pow(Math.sin(i),2))*Math.tan(i),s=q(this.long0+Math.asin(e*_/this.a)/Math.sin(i))}return t.x=s,t.y=i,t},names:["Polyconic","poly"]};const As={init:function(){this.A=[],this.A[1]=.6399175073,this.A[2]=-.1358797613,this.A[3]=.063294409,this.A[4]=-.02526853,this.A[5]=.0117879,this.A[6]=-.0055161,this.A[7]=.0026906,this.A[8]=-.001333,this.A[9]=67e-5,this.A[10]=-34e-5,this.B_re=[],this.B_im=[],this.B_re[1]=.7557853228,this.B_im[1]=0,this.B_re[2]=.249204646,this.B_im[2]=.003371507,this.B_re[3]=-.001541739,this.B_im[3]=.04105856,this.B_re[4]=-.10162907,this.B_im[4]=.01727609,this.B_re[5]=-.26623489,this.B_im[5]=-.36249218,this.B_re[6]=-.6870983,this.B_im[6]=-1.1651967,this.C_re=[],this.C_im=[],this.C_re[1]=1.3231270439,this.C_im[1]=0,this.C_re[2]=-.577245789,this.C_im[2]=-.007809598,this.C_re[3]=.508307513,this.C_im[3]=-.112208952,this.C_re[4]=-.15094762,this.C_im[4]=.18200602,this.C_re[5]=1.01418179,this.C_im[5]=1.64497696,this.C_re[6]=1.9660549,this.C_im[6]=2.5127645,this.D=[],this.D[1]=1.5627014243,this.D[2]=.5185406398,this.D[3]=-.03333098,this.D[4]=-.1052906,this.D[5]=-.0368594,this.D[6]=.007317,this.D[7]=.0122,this.D[8]=.00394,this.D[9]=-.0013},forward:function(t){var s,i=t.x,a=t.y-this.lat0,n=i-this.long0,o=a/e*1e-5,r=n,h=1,l=0;for(s=1;s<=10;s++)h*=o,l+=this.A[s]*h;var u,d=l,_=r,f=1,m=0,p=0,c=0;for(s=1;s<=6;s++)u=m*d+f*_,f=f*d-m*_,m=u,p=p+this.B_re[s]*f-this.B_im[s]*m,c=c+this.B_im[s]*f+this.B_re[s]*m;return t.x=c*this.a+this.x0,t.y=p*this.a+this.y0,t},inverse:function(t){var s,i,a=t.x,n=t.y,o=a-this.x0,r=(n-this.y0)/this.a,h=o/this.a,l=1,u=0,d=0,_=0;for(s=1;s<=6;s++)i=u*r+l*h,l=l*r-u*h,u=i,d=d+this.C_re[s]*l-this.C_im[s]*u,_=_+this.C_im[s]*l+this.C_re[s]*u;for(var f=0;f.999999999999&&(i=.999999999999),s=Math.asin(i);var e=q(this.long0+t.x/(.900316316158*this.a*Math.cos(s)));e<-Math.PI&&(e=-Math.PI),e>Math.PI&&(e=Math.PI),i=(2*s+Math.sin(2*s))/Math.PI,Math.abs(i)>1&&(i=1);var a=Math.asin(i);return t.x=e,t.y=a,t},names:["Mollweide","moll"]};const Ls={init:function(){Math.abs(this.lat1+this.lat2)=0?(i=Math.sqrt(t.x*t.x+t.y*t.y),s=1):(i=-Math.sqrt(t.x*t.x+t.y*t.y),s=-1);var n=0;return 0!==i&&(n=Math.atan2(s*t.x,s*t.y)),this.sphere?(a=q(this.long0+n/this.ns),e=ys(this.g-i/this.a),t.x=a,t.y=e,t):(e=xs(this.g-i/this.a,this.e0,this.e1,this.e2,this.e3),a=q(this.long0+n/this.ns),t.x=a,t.y=e,t)},names:["Equidistant_Conic","eqdc"]};const Us={init:function(){this.R=this.a},forward:function(t){var s,i,e=t.x,o=t.y,r=q(e-this.long0);Math.abs(o)<=n&&(s=this.x0+this.R*r,i=this.y0);var h=Ts(2*Math.abs(o/Math.PI));(Math.abs(r)<=n||Math.abs(Math.abs(o)-a)<=n)&&(s=this.x0,i=o>=0?this.y0+Math.PI*this.R*Math.tan(.5*h):this.y0+Math.PI*this.R*-Math.tan(.5*h));var l=.5*Math.abs(Math.PI/r-r/Math.PI),u=l*l,d=Math.sin(h),_=Math.cos(h),f=_/(d+_-1),m=f*f,p=f*(2/d-1),c=p*p,M=Math.PI*this.R*(l*(f-c)+Math.sqrt(u*(f-c)*(f-c)-(c+u)*(m-c)))/(c+u);r<0&&(M=-M),s=this.x0+M;var g=u+f;return M=Math.PI*this.R*(p*g-l*Math.sqrt((c+u)*(u+1)-g*g))/(c+u),i=o>=0?this.y0+M:this.y0-M,t.x=s,t.y=i,t},inverse:function(t){var s,i,e,a,o,r,h,l,u,d,_,f;return t.x-=this.x0,t.y-=this.y0,_=Math.PI*this.R,o=(e=t.x/_)*e+(a=t.y/_)*a,_=3*(a*a/(l=-2*(r=-Math.abs(a)*(1+o))+1+2*a*a+o*o)+(2*(h=r-2*a*a+e*e)*h*h/l/l/l-9*r*h/l/l)/27)/(u=(r-h*h/3/l)/l)/(d=2*Math.sqrt(-u/3)),Math.abs(_)>1&&(_=_>=0?1:-1),f=Math.acos(_)/3,i=t.y>=0?(-d*Math.cos(f+Math.PI/3)-h/3/l)*Math.PI:-(-d*Math.cos(f+Math.PI/3)-h/3/l)*Math.PI,s=Math.abs(e)2*a*this.a)return;return i=s/this.a,e=Math.sin(i),o=Math.cos(i),r=this.long0,Math.abs(s)<=n?h=this.lat0:(h=Ts(o*this.sin_p12+t.y*e*this.cos_p12/s),l=Math.abs(this.lat0)-a,r=Math.abs(l)<=n?this.lat0>=0?q(this.long0+Math.atan2(t.x,-t.y)):q(this.long0-Math.atan2(-t.x,t.y)):q(this.long0+Math.atan2(t.x*e,s*this.cos_p12*o-t.y*this.sin_p12*e))),t.x=r,t.y=h,t}return u=ms(this.es),d=ps(this.es),_=cs(this.es),f=Ms(this.es),Math.abs(this.sin_p12-1)<=n?(h=xs(((m=this.a*fs(u,d,_,f,a))-(s=Math.sqrt(t.x*t.x+t.y*t.y)))/this.a,u,d,_,f),r=q(this.long0+Math.atan2(t.x,-1*t.y)),t.x=r,t.y=h,t):Math.abs(this.sin_p12+1)<=n?(m=this.a*fs(u,d,_,f,a),h=xs(((s=Math.sqrt(t.x*t.x+t.y*t.y))-m)/this.a,u,d,_,f),r=q(this.long0+Math.atan2(t.x,t.y)),t.x=r,t.y=h,t):(s=Math.sqrt(t.x*t.x+t.y*t.y),M=Math.atan2(t.x,t.y),p=gs(this.a,this.e,this.sin_p12),g=Math.cos(M),x=-(y=this.e*this.cos_p12*g)*y/(1-this.es),w=3*this.es*(1-x)*this.sin_p12*this.cos_p12*g/(1-this.es),v=1-x*(S=(G=s/p)-x*(1+x)*Math.pow(G,3)/6-w*(1+3*x)*Math.pow(G,4)/24)*S/2-G*S*S*S/6,c=Math.asin(this.sin_p12*Math.cos(S)+this.cos_p12*Math.sin(S)*g),r=q(this.long0+Math.asin(Math.sin(M)*Math.sin(S)/Math.cos(c))),j=Math.sin(c),h=Math.atan2((j-this.es*v*this.sin_p12)*Math.tan(c),j*(1-this.es)),t.x=r,t.y=h,t)},names:["Azimuthal_Equidistant","aeqd"]};const Bs={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)},forward:function(t){var s,i,e,a,o,r,h,l=t.x,u=t.y;return e=q(l-this.long0),s=Math.sin(u),i=Math.cos(u),a=Math.cos(e),((o=this.sin_p14*s+this.cos_p14*i*a)>0||Math.abs(o)<=n)&&(r=1*this.a*i*Math.sin(e),h=this.y0+1*this.a*(this.cos_p14*s-this.sin_p14*i*a)),t.x=r,t.y=h,t},inverse:function(t){var s,i,e,o,r,h,l;return t.x-=this.x0,t.y-=this.y0,i=Ts((s=Math.sqrt(t.x*t.x+t.y*t.y))/this.a),e=Math.sin(i),o=Math.cos(i),h=this.long0,Math.abs(s)<=n?(l=this.lat0,t.x=h,t.y=l,t):(l=Ts(o*this.sin_p14+t.y*e*this.cos_p14/s),r=Math.abs(this.lat0)-a,Math.abs(r)<=n?(h=this.lat0>=0?q(this.long0+Math.atan2(t.x,-t.y)):q(this.long0-Math.atan2(-t.x,t.y)),t.x=h,t.y=l,t):(h=q(this.long0+Math.atan2(t.x*e,s*this.cos_p14*o-t.y*this.sin_p14*e)),t.x=h,t.y=l,t))},names:["ortho"]};var Ds=1,Hs=2,Qs=3,Ks=4,Xs=5,Js=6,Zs=1,Vs=2,Ys=3,$s=4;function ti(t,s,i,e){var o;return th&&o<=a+h?(e.value=Vs,o-=a):o>a+h||o<=-(a+h)?(e.value=Ys,o=o>=0?o-u:o+u):(e.value=$s,o+=a)),o}function si(t,s){var i=t+s;return i<-u?i+=l:i>+u&&(i-=l),i}const ii={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=a-h/2?this.face=Xs:this.lat0<=-(a-h/2)?this.face=Js:Math.abs(this.long0)<=h?this.face=Ds:Math.abs(this.long0)<=a+h?this.face=this.long0>0?Hs:Ks:this.face=Qs,0!==this.es&&(this.one_minus_f=1-(this.a-this.b)/this.a,this.one_minus_f_squared=this.one_minus_f*this.one_minus_f)},forward:function(t){var s,i,e,n,o,r,l={x:0,y:0},d={value:0};if(t.x-=this.long0,s=0!==this.es?Math.atan(this.one_minus_f_squared*Math.tan(t.y)):t.y,i=t.x,this.face===Xs)n=a-s,i>=h&&i<=a+h?(d.value=Zs,e=i-a):i>a+h||i<=-(a+h)?(d.value=Vs,e=i>0?i-u:i+u):i>-(a+h)&&i<=-h?(d.value=Ys,e=i+a):(d.value=$s,e=i);else if(this.face===Js)n=a+s,i>=h&&i<=a+h?(d.value=Zs,e=-i+a):i=-h?(d.value=Vs,e=-i):i<-h&&i>=-(a+h)?(d.value=Ys,e=-i-a):(d.value=$s,e=i>0?-i+u:-i-u);else{var _,f,m,p,c,M;this.face===Hs?i=si(i,+a):this.face===Qs?i=si(i,+u):this.face===Ks&&(i=si(i,-a)),p=Math.sin(s),c=Math.cos(s),M=Math.sin(i),_=c*Math.cos(i),f=c*M,m=p,this.face===Ds?e=ti(n=Math.acos(_),m,f,d):this.face===Hs?e=ti(n=Math.acos(f),m,-_,d):this.face===Qs?e=ti(n=Math.acos(-_),m,-f,d):this.face===Ks?e=ti(n=Math.acos(-f),m,_,d):(n=e=0,d.value=Zs)}return r=Math.atan(12/u*(e+Math.acos(Math.sin(e)*Math.cos(h))-a)),o=Math.sqrt((1-Math.cos(n))/(Math.cos(r)*Math.cos(r))/(1-Math.cos(Math.atan(1/Math.cos(e))))),d.value===Vs?r+=a:d.value===Ys?r+=u:d.value===$s&&(r+=1.5*u),l.x=o*Math.cos(r),l.y=o*Math.sin(r),l.x=l.x*this.a+this.x0,l.y=l.y*this.a+this.y0,t.x=l.x,t.y=l.y,t},inverse:function(t){var s,i,e,n,o,r,h,l,d,_,f,m,p={lam:0,phi:0},c={value:0};if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,i=Math.atan(Math.sqrt(t.x*t.x+t.y*t.y)),s=Math.atan2(t.y,t.x),t.x>=0&&t.x>=Math.abs(t.y)?c.value=Zs:t.y>=0&&t.y>=Math.abs(t.x)?(c.value=Vs,s-=a):t.x<0&&-t.x>=Math.abs(t.y)?(c.value=Ys,s=s<0?s+u:s-u):(c.value=$s,s+=a),d=u/12*Math.tan(s),o=Math.sin(d)/(Math.cos(d)-1/Math.sqrt(2)),r=Math.atan(o),(h=1-(e=Math.cos(s))*e*(n=Math.tan(i))*n*(1-Math.cos(Math.atan(1/Math.cos(r)))))<-1?h=-1:h>1&&(h=1),this.face===Xs)l=Math.acos(h),p.phi=a-l,c.value===Zs?p.lam=r+a:c.value===Vs?p.lam=r<0?r+u:r-u:c.value===Ys?p.lam=r-a:p.lam=r;else if(this.face===Js)l=Math.acos(h),p.phi=l-a,c.value===Zs?p.lam=-r+a:c.value===Vs?p.lam=-r:c.value===Ys?p.lam=-r-a:p.lam=r<0?-r-u:-r+u;else{var M,g,y;d=(M=h)*M,g=(d+=(y=d>=1?0:Math.sqrt(1-d)*Math.sin(r))*y)>=1?0:Math.sqrt(1-d),c.value===Vs?(d=g,g=-y,y=d):c.value===Ys?(g=-g,y=-y):c.value===$s&&(d=g,g=y,y=-d),this.face===Hs?(d=M,M=-g,g=d):this.face===Qs?(M=-M,g=-g):this.face===Ks&&(d=M,M=g,g=-d),p.phi=Math.acos(-y)-a,p.lam=Math.atan2(g,M),this.face===Hs?p.lam=si(p.lam,-a):this.face===Qs?p.lam=si(p.lam,-u):this.face===Ks&&(p.lam=si(p.lam,+a))}return 0!==this.es&&(_=p.phi<0?1:0,f=Math.tan(p.phi),m=this.b/Math.sqrt(f*f+this.one_minus_f_squared),p.phi=Math.atan(Math.sqrt(this.a*this.a-m*m)/(this.one_minus_f*m)),_&&(p.phi=-p.phi)),p.lam+=this.long0,t.x=p.lam,t.y=p.phi,t},names:["Quadrilateralized Spherical Cube","Quadrilateralized_Spherical_Cube","qsc"]};var ei=[[1,22199e-21,-715515e-10,31103e-10],[.9986,-482243e-9,-24897e-9,-13309e-10],[.9954,-83103e-8,-448605e-10,-9.86701e-7],[.99,-.00135364,-59661e-9,36777e-10],[.9822,-.00167442,-449547e-11,-572411e-11],[.973,-.00214868,-903571e-10,1.8736e-8],[.96,-.00305085,-900761e-10,164917e-11],[.9427,-.00382792,-653386e-10,-26154e-10],[.9216,-.00467746,-10457e-8,481243e-11],[.8962,-.00536223,-323831e-10,-543432e-11],[.8679,-.00609363,-113898e-9,332484e-11],[.835,-.00698325,-640253e-10,9.34959e-7],[.7986,-.00755338,-500009e-10,9.35324e-7],[.7597,-.00798324,-35971e-9,-227626e-11],[.7186,-.00851367,-701149e-10,-86303e-10],[.6732,-.00986209,-199569e-9,191974e-10],[.6213,-.010418,883923e-10,624051e-11],[.5722,-.00906601,182e-6,624051e-11],[.5322,-.00677797,275608e-9,624051e-11]],ai=[[-520417e-23,.0124,121431e-23,-845284e-16],[.062,.0124,-1.26793e-9,4.22642e-10],[.124,.0124,5.07171e-9,-1.60604e-9],[.186,.0123999,-1.90189e-8,6.00152e-9],[.248,.0124002,7.10039e-8,-2.24e-8],[.31,.0123992,-2.64997e-7,8.35986e-8],[.372,.0124029,9.88983e-7,-3.11994e-7],[.434,.0123893,-369093e-11,-4.35621e-7],[.4958,.0123198,-102252e-10,-3.45523e-7],[.5571,.0121916,-154081e-10,-5.82288e-7],[.6176,.0119938,-241424e-10,-5.25327e-7],[.6769,.011713,-320223e-10,-5.16405e-7],[.7346,.0113541,-397684e-10,-6.09052e-7],[.7903,.0109107,-489042e-10,-104739e-11],[.8435,.0103431,-64615e-9,-1.40374e-9],[.8936,.00969686,-64636e-9,-8547e-9],[.9394,.00840947,-192841e-9,-42106e-10],[.9761,.00616527,-256e-6,-42106e-10],[1,.00328947,-319159e-9,-42106e-10]],ni=.8487,oi=1.3523,ri=r/5,hi=1/ri,li=18,ui=function(t,s){return t[0]+s*(t[1]+s*(t[2]+s*t[3]))};const di={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.long0=this.long0||0,this.es=0,this.title=this.title||"Robinson"},forward:function(t){var s=q(t.x-this.long0),i=Math.abs(t.y),e=Math.floor(i*ri);e<0?e=0:e>=li&&(e=17);var a={x:ui(ei[e],i=r*(i-hi*e))*s,y:ui(ai[e],i)};return t.y<0&&(a.y=-a.y),a.x=a.x*this.a*ni+this.x0,a.y=a.y*this.a*oi+this.y0,a},inverse:function(t){var s={x:(t.x-this.x0)/(this.a*ni),y:Math.abs(t.y-this.y0)/(this.a*oi)};if(s.y>=1)s.x/=ei[18][0],s.y=t.y<0?-a:a;else{var i=Math.floor(s.y*li);for(i<0?i=0:i>=li&&(i=17);;)if(ai[i][0]>s.y)--i;else{if(!(ai[i+1][0]<=s.y))break;++i}var e=ai[i],r=5*(s.y-e[0])/(ai[i+1][0]-e[0]);r=function(t,s,i,e){for(var a=s;e;--e){var n=t(a);if(a-=n,Math.abs(n)1e10)throw new Error;if(this.radius_g=1+this.radius_g_1,this.C=this.radius_g*this.radius_g-1,0!==this.es){var t=1-this.es,s=1/t;this.radius_p=Math.sqrt(t),this.radius_p2=t,this.radius_p_inv2=s,this.shape="ellipse"}else this.radius_p=1,this.radius_p2=1,this.radius_p_inv2=1,this.shape="sphere";this.title||(this.title="Geostationary Satellite View")},forward:function(t){var s,i,e,a,n=t.x,o=t.y;if(n-=this.long0,"ellipse"===this.shape){o=Math.atan(this.radius_p2*Math.tan(o));var r=this.radius_p/Yt(this.radius_p*Math.cos(o),Math.sin(o));if(i=r*Math.cos(n)*Math.cos(o),e=r*Math.sin(n)*Math.cos(o),a=r*Math.sin(o),(this.radius_g-i)*i-e*e-a*a*this.radius_p_inv2<0)return t.x=Number.NaN,t.y=Number.NaN,t;s=this.radius_g-i,this.flip_axis?(t.x=this.radius_g_1*Math.atan(e/Yt(a,s)),t.y=this.radius_g_1*Math.atan(a/s)):(t.x=this.radius_g_1*Math.atan(e/s),t.y=this.radius_g_1*Math.atan(a/Yt(e,s)))}else"sphere"===this.shape&&(s=Math.cos(o),i=Math.cos(n)*s,e=Math.sin(n)*s,a=Math.sin(o),s=this.radius_g-i,this.flip_axis?(t.x=this.radius_g_1*Math.atan(e/Yt(a,s)),t.y=this.radius_g_1*Math.atan(a/s)):(t.x=this.radius_g_1*Math.atan(e/s),t.y=this.radius_g_1*Math.atan(a/Yt(e,s))));return t.x=t.x*this.a,t.y=t.y*this.a,t},inverse:function(t){var s,i,e,a,n=-1,o=0,r=0;if(t.x=t.x/this.a,t.y=t.y/this.a,"ellipse"===this.shape){this.flip_axis?(r=Math.tan(t.y/this.radius_g_1),o=Math.tan(t.x/this.radius_g_1)*Yt(1,r)):(o=Math.tan(t.x/this.radius_g_1),r=Math.tan(t.y/this.radius_g_1)*Yt(1,o));var h=r/this.radius_p;if(s=o*o+h*h+n*n,(e=(i=2*this.radius_g*n)*i-4*s*this.C)<0)return t.x=Number.NaN,t.y=Number.NaN,t;a=(-i-Math.sqrt(e))/(2*s),n=this.radius_g+a*n,o*=a,r*=a,t.x=Math.atan2(o,n),t.y=Math.atan(r*Math.cos(t.x)/n),t.y=Math.atan(this.radius_p_inv2*Math.tan(t.y))}else if("sphere"===this.shape){if(this.flip_axis?(r=Math.tan(t.y/this.radius_g_1),o=Math.tan(t.x/this.radius_g_1)*Math.sqrt(1+r*r)):(o=Math.tan(t.x/this.radius_g_1),r=Math.tan(t.y/this.radius_g_1)*Math.sqrt(1+o*o)),s=o*o+r*r+n*n,(e=(i=2*this.radius_g*n)*i-4*s*this.C)<0)return t.x=Number.NaN,t.y=Number.NaN,t;a=(-i-Math.sqrt(e))/(2*s),n=this.radius_g+a*n,o*=a,r*=a,t.x=Math.atan2(o,n),t.y=Math.atan(r*Math.cos(t.x)/n)}return t.x=t.x+this.long0,t},names:["Geostationary Satellite View","Geostationary_Satellite","geos"]};var xi=1.340264,wi=-.081106,Gi=893e-6,Si=.003796,vi=Math.sqrt(3)/2;const ji={init:function(){this.es=0,this.long0=void 0!==this.long0?this.long0:0},forward:function(t){var s=q(t.x-this.long0),i=t.y,e=Math.asin(vi*Math.sin(i)),a=e*e,n=a*a*a;return t.x=s*Math.cos(e)/(vi*(xi+3*wi*a+n*(7*Gi+9*Si*a))),t.y=e*(xi+wi*a+n*(Gi+Si*a)),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a;var s,i,e,a,n=t.y;for(a=0;a<12&&(n-=e=(n*(xi+wi*(s=n*n)+(i=s*s*s)*(Gi+Si*s))-t.y)/(xi+3*wi*s+i*(7*Gi+9*Si*s)),!(Math.abs(e)<1e-9));++a);return i=(s=n*n)*s*s,t.x=vi*t.x*(xi+3*wi*s+i*(7*Gi+9*Si*s))/Math.cos(n),t.y=Math.asin(Math.sin(n)/vi),t.x=q(t.x+this.long0),t},names:["eqearth","Equal Earth","Equal_Earth"]};var bi=1e-10;function Ni(t){var s,i,e,a=q(t.x-(this.long0||0)),n=t.y;return s=this.am1+this.m1-Xt(n,i=Math.sin(n),e=Math.cos(n),this.en),i=e*a/(s*Math.sqrt(1-this.es*i*i)),t.x=s*Math.sin(i),t.y=this.am1-s*Math.cos(i),t.x=this.a*t.x+(this.x0||0),t.y=this.a*t.y+(this.y0||0),t}function Ri(t){var s,i,e,n;if(t.x=(t.x-(this.x0||0))/this.a,t.y=(t.y-(this.y0||0))/this.a,i=Yt(t.x,t.y=this.am1-t.y),n=Jt(this.am1+this.m1-i,this.es,this.en),(s=Math.abs(n))bi?(t.x=i*Math.sin(s=e*Math.cos(a)/i),t.y=this.cphi1-i*Math.cos(s)):t.x=t.y=0,t.x=this.a*t.x+(this.x0||0),t.y=this.a*t.y+(this.y0||0),t}function Ti(t){var s,i;t.x=(t.x-(this.x0||0))/this.a,t.y=(t.y-(this.y0||0))/this.a;var e=Yt(t.x,t.y=this.cphi1-t.y);if(i=this.cphi1+this.phi1-e,Math.abs(i)>a)throw new Error;return s=Math.abs(Math.abs(i)-a)<=bi?0:e*Math.atan2(t.x,t.y)/Math.cos(i),t.x=q(s+(this.long0||0)),t.y=ys(i),t}const Ei={init:function(){var t;if(this.phi1=this.lat1,Math.abs(this.phi1)=a?this.cphi1=0:this.cphi1=1/Math.tan(this.phi1),this.inverse=Ti,this.forward=ki)},names:["bonne","Bonne (Werner lat_1=90)"]};vt.defaultDatum="WGS84",vt.Proj=lt,vt.WGS84=new vt.Proj("WGS84"),vt.Point=Bt,vt.toPoint=gt,vt.defs=W,vt.nadgrid=function(t,s){var i=new DataView(s),e=function(t){var s=t.getInt32(8,!1);if(11===s)return!1;s=t.getInt32(8,!0),11!==s&&console.warn("Failed to detect nadgrid endian-ness, defaulting to little-endian");return!0}(i),a=function(t,s){return{nFields:t.getInt32(8,s),nSubgridFields:t.getInt32(24,s),nSubgrids:t.getInt32(40,s),shiftType:at(t,56,64).trim(),fromSemiMajorAxis:t.getFloat64(120,s),fromSemiMinorAxis:t.getFloat64(136,s),toSemiMajorAxis:t.getFloat64(152,s),toSemiMinorAxis:t.getFloat64(168,s)}}(i,e),n=function(t,s,i){for(var e=176,a=[],n=0;n{var e={4582:(e,t)=>{"use strict";function r(e,t){return void 0===t&&(t=Object),t&&"function"==typeof t.getOwnPropertyDescriptors&&(e=t.create(null,t.getOwnPropertyDescriptors(e))),t&&"function"==typeof t.freeze?t.freeze(e):e}function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var o=r({allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,formnovalidate:!0,hidden:!0,ismap:!0,itemscope:!0,loop:!0,multiple:!0,muted:!0,nomodule:!0,novalidate:!0,open:!0,playsinline:!0,readonly:!0,required:!0,reversed:!0,selected:!0});var i=r({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});var a=r({script:!1,style:!1,textarea:!0,title:!0});function s(e){return e===l.HTML}var l=r({HTML:"text/html",XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),u=Object.keys(l).map((function(e){return l[e]}));var c=r({HTML:"http://www.w3.org/1999/xhtml",SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});t.assign=function(e,t){if(null===e||"object"!=typeof e)throw new TypeError("target is not an object");for(var r in t)n(t,r)&&(e[r]=t[r]);return e},t.find=function(e,t,r){if(void 0===r&&(r=Array.prototype),e&&"function"==typeof r.find)return r.find.call(e,t);for(var o=0;o-1},t.MIME_TYPE=l,t.NAMESPACE=c},5752:(e,t,r)=>{"use strict";var n=r(4582),o=r(4722),i=r(2983),a=r(6559),s=r(4466),l=o.DOMImplementation,u=n.hasDefaultHTMLNamespace,c=n.isHTMLMimeType,p=n.isValidMimeType,f=n.MIME_TYPE,h=n.NAMESPACE,d=i.ParseError,m=s.XMLReader;function g(e){return e.replace(/\r[\n\u0085]/g,"\n").replace(/[\r\u0085\u2028]/g,"\n")}function y(e){if(e=e||{locator:!0},this.assign=e.assign||n.assign,this.domHandler=e.domHandler||v,this.onError=e.onError||e.errorHandler,e.errorHandler&&"function"!=typeof e.errorHandler)throw new TypeError("errorHandler object is no longer supported, switch to onError!");e.errorHandler&&e.errorHandler("warning","The `errorHandler` option has been deprecated, use `onError` instead!",this),this.normalizeLineEndings=e.normalizeLineEndings||g,this.locator=!!e.locator,this.xmlns=this.assign(Object.create(null),e.xmlns)}function v(e){var t=e||{};this.mimeType=t.mimeType||f.XML_APPLICATION,this.defaultNamespace=t.defaultNamespace||null,this.cdata=!1,this.currentElement=void 0,this.doc=void 0,this.locator=void 0,this.onError=t.onError}function b(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function w(e,t,r){return"string"==typeof e?e.substr(t,r):e.length>=t+r||t?new java.lang.String(e,t,r)+"":e}function E(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}y.prototype.parseFromString=function(e,t){if(!p(t))throw new TypeError('DOMParser.parseFromString: the provided mimeType "'+t+'" is not valid.');var r=this.assign(Object.create(null),this.xmlns),o=a.XML_ENTITIES,i=r[""]||null;u(t)?(o=a.HTML_ENTITIES,i=h.HTML):t===f.XML_SVG_IMAGE&&(i=h.SVG),r[""]=i,r.xml=r.xml||h.XML;var s=new this.domHandler({mimeType:t,defaultNamespace:i,onError:this.onError}),l=this.locator?{}:void 0;this.locator&&s.setDocumentLocator(l);var c=new m;return c.errorHandler=s,c.domBuilder=s,!n.isHTMLMimeType(t)&&"string"!=typeof e&&c.errorHandler.fatalError("source is not a string"),c.parse(this.normalizeLineEndings(String(e)),r,o),s.doc.documentElement||c.errorHandler.fatalError("missing root element"),s.doc},v.prototype={startDocument:function(){var e=new l;this.doc=c(this.mimeType)?e.createHTMLDocument(!1):e.createDocument(this.defaultNamespace,"")},startElement:function(e,t,r,n){var o=this.doc,i=o.createElementNS(e,r||t),a=n.length;E(this,i),this.currentElement=i,this.locator&&b(this.locator,i);for(var s=0;s{"use strict";var n=r(4582),o=n.find,i=n.hasDefaultHTMLNamespace,a=n.hasOwn,s=n.isHTMLMimeType,l=n.isHTMLRawTextElement,u=n.isHTMLVoidElement,c=n.MIME_TYPE,p=n.NAMESPACE,f=Symbol(),h=r(2983),d=h.DOMException,m=h.DOMExceptionName,g=r(2763);function y(e){if(e!==f)throw new TypeError("Illegal constructor")}function v(e){return""!==e}function b(e,t){return a(e,t)||(e[t]=!0),e}function w(e){if(!e)return[];var t=function(e){return e?e.split(/[\t\n\f\r ]+/).filter(v):[]}(e);return Object.keys(t.reduce(b,{}))}function E(e){if(!g.QName_exact.test(e))throw new d(d.INVALID_CHARACTER_ERR,'invalid character in qualified name "'+e+'"')}function x(e,t){E(t),e=e||null;var r=null,o=t;if(t.indexOf(":")>=0){var i=t.split(":");r=i[0],o=i[1]}if(null!==r&&null===e)throw new d(d.NAMESPACE_ERR,"prefix is non-null and namespace is null");if("xml"===r&&e!==n.NAMESPACE.XML)throw new d(d.NAMESPACE_ERR,'prefix is "xml" and namespace is not the XML namespace');if(("xmlns"===r||"xmlns"===t)&&e!==n.NAMESPACE.XMLNS)throw new d(d.NAMESPACE_ERR,'either qualifiedName or prefix is "xmlns" and namespace is not the XMLNS namespace');if(e===n.NAMESPACE.XMLNS&&"xmlns"!==r&&"xmlns"!==t)throw new d(d.NAMESPACE_ERR,'namespace is the XMLNS namespace and neither qualifiedName nor prefix is "xmlns"');return[e,r,o]}function S(e,t){for(var r in e)a(e,r)&&(t[r]=e[r])}function _(e,t){var r=e.prototype;if(!(r instanceof t)){function n(){}n.prototype=t.prototype,S(r,n=new n),e.prototype=r=n}r.constructor!=e&&("function"!=typeof e&&console.error("unknown Class:"+e),r.constructor=e)}var A={},T=A.ELEMENT_NODE=1,R=A.ATTRIBUTE_NODE=2,O=A.TEXT_NODE=3,C=A.CDATA_SECTION_NODE=4,N=A.ENTITY_REFERENCE_NODE=5,P=A.ENTITY_NODE=6,M=A.PROCESSING_INSTRUCTION_NODE=7,k=A.COMMENT_NODE=8,I=A.DOCUMENT_NODE=9,L=A.DOCUMENT_TYPE_NODE=10,D=A.DOCUMENT_FRAGMENT_NODE=11,q=A.NOTATION_NODE=12,U=n.freeze({DOCUMENT_POSITION_DISCONNECTED:1,DOCUMENT_POSITION_PRECEDING:2,DOCUMENT_POSITION_FOLLOWING:4,DOCUMENT_POSITION_CONTAINS:8,DOCUMENT_POSITION_CONTAINED_BY:16,DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:32});function j(e){for(var t=[];e.parentNode||e.ownerElement;)e=e.parentNode||e.ownerElement,t.unshift(e);return t}function z(e,t){if(t.length=0){for(var o=t.length-1;n<=o;)t[n]=t[++n];if(t.length=o,e){var i=e.ownerDocument;i&&ee(i,e,r),r.ownerElement=null}}}function X(){}function J(e){y(e)}function K(e){return("<"==e?"<":">"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function Q(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(Q(e,t))return!0}while(e=e.nextSibling)}function Z(e,t){y(e);var r=t||{};this.ownerDocument=this,this.contentType=r.contentType||c.XML_APPLICATION,this.type=s(this.contentType)?"html":"xml"}function ee(e,t,r,n){e&&e._inc++,r.namespaceURI===p.XMLNS&&delete t._nsMap[r.prefix?r.localName:""]}function te(e,t,r){if(e&&e._inc){e._inc++;var n=t.childNodes;if(r&&!r.nextSibling)n[n.length++]=r;else{for(var o=t.firstChild,i=0;o;)n[i++]=o,o=o.nextSibling;n.length=i,delete n[n.length]}}}function re(e,t){if(e!==t.parentNode)throw new d(d.NOT_FOUND_ERR,"child's parent is not parent");var r=t.previousSibling,n=t.nextSibling;return r?r.nextSibling=n:e.firstChild=n,n?n.previousSibling=r:e.lastChild=r,te(e.ownerDocument,e),t.parentNode=null,t.previousSibling=null,t.nextSibling=null,t}function ne(e){return e&&e.nodeType===J.DOCUMENT_TYPE_NODE}function oe(e){return e&&e.nodeType===J.ELEMENT_NODE}function ie(e){return e&&e.nodeType===J.TEXT_NODE}function ae(e,t){var r=e.childNodes||[];if(o(r,oe)||ne(t))return!1;var n=o(r,ne);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function se(e,t){var r=e.childNodes||[];if(o(r,(function(e){return oe(e)&&e!==t})))return!1;var n=o(r,ne);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function le(e,t,r){if(!function(e){return e&&(e.nodeType===J.DOCUMENT_NODE||e.nodeType===J.DOCUMENT_FRAGMENT_NODE||e.nodeType===J.ELEMENT_NODE)}(e))throw new d(d.HIERARCHY_REQUEST_ERR,"Unexpected parent node type "+e.nodeType);if(r&&r.parentNode!==e)throw new d(d.NOT_FOUND_ERR,"child not in parent");if(!function(e){return e&&(e.nodeType===J.CDATA_SECTION_NODE||e.nodeType===J.COMMENT_NODE||e.nodeType===J.DOCUMENT_FRAGMENT_NODE||e.nodeType===J.DOCUMENT_TYPE_NODE||e.nodeType===J.ELEMENT_NODE||e.nodeType===J.PROCESSING_INSTRUCTION_NODE||e.nodeType===J.TEXT_NODE)}(t)||ne(t)&&e.nodeType!==J.DOCUMENT_NODE)throw new d(d.HIERARCHY_REQUEST_ERR,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function ue(e,t,r){var n=e.childNodes||[],i=t.childNodes||[];if(t.nodeType===J.DOCUMENT_FRAGMENT_NODE){var a=i.filter(oe);if(a.length>1||o(i,ie))throw new d(d.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===a.length&&!ae(e,r))throw new d(d.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!ae(e,r))throw new d(d.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(ne(t)){if(o(n,ne))throw new d(d.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var s=o(n,oe);if(r&&n.indexOf(s)1||o(i,ie))throw new d(d.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===a.length&&!se(e,r))throw new d(d.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!se(e,r))throw new d(d.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(ne(t)){function l(e){return ne(e)&&e!==r}if(o(n,l))throw new d(d.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var s=o(n,oe);if(r&&n.indexOf(s)=0;m--){if(""===(y=n[m]).prefix&&y.namespace===e.namespaceURI){h=y.namespace;break}}if(h!==e.namespaceURI)for(m=n.length-1;m>=0;m--){var y;if((y=n[m]).namespace===e.namespaceURI){y.prefix&&(f=y.prefix+":"+c);break}}}t.push("<",f);for(var v=0;v");else{if(t.push(">"),o&&l(c))for(;s;)s.data?t.push(s.data):Oe(s,t,r,n.slice()),s=s.nextSibling;else for(;s;)Oe(s,t,r,n.slice()),s=s.nextSibling;t.push("")}return;case I:case D:for(s=e.firstChild;s;)Oe(s,t,r,n.slice()),s=s.nextSibling;return;case R:return Re(t,e.name,e.value);case O:return t.push(e.data.replace(/[<&>]/g,K));case C:return t.push(g.CDATA_START,e.data,g.CDATA_END);case k:return t.push(g.COMMENT_START,e.data,g.COMMENT_END);case L:var S=e.publicId,_=e.systemId;return t.push(g.DOCTYPE_DECL_START," ",e.name),S?(t.push(" ",g.PUBLIC," ",S),_&&"."!==_&&t.push(" ",_)):_&&"."!==_&&t.push(" ",g.SYSTEM," ",_),e.internalSubset&&t.push(" [",e.internalSubset,"]"),void t.push(">");case M:return t.push("");case N:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function Ce(e,t,r){var n;switch(t.nodeType){case T:(n=t.cloneNode(!1)).ownerDocument=e;case D:break;case R:r=!0}if(n||(n=t.cloneNode(!1)),n.ownerDocument=e,n.parentNode=null,r)for(var o=t.firstChild;o;)n.appendChild(Ce(e,o,r)),o=o.nextSibling;return n}function Ne(e,t,r){var n=new t.constructor(f);for(var o in t)if(a(t,o)){var i=t[o];"object"!=typeof i&&i!=n[o]&&(n[o]=i)}switch(t.childNodes&&(n.childNodes=new F),n.ownerDocument=e,n.nodeType){case T:var s=t.attributes,l=n.attributes=new B,u=s.length;l._ownerElement=n;for(var c=0;c=0&&eG(t.ownerDocument)?U.DOCUMENT_POSITION_FOLLOWING:U.DOCUMENT_POSITION_PRECEDING);var s=j(t),l=j(r);if(!n&&l.indexOf(t)>=0||o&&t===r)return U.DOCUMENT_POSITION_CONTAINS+U.DOCUMENT_POSITION_PRECEDING;if(!o&&s.indexOf(r)>=0||n&&t===r)return U.DOCUMENT_POSITION_CONTAINED_BY+U.DOCUMENT_POSITION_FOLLOWING;var u=z(l,s);for(var c in u.childNodes){var p=u.childNodes[c];if(p===r)return U.DOCUMENT_POSITION_FOLLOWING;if(p===t)return U.DOCUMENT_POSITION_PRECEDING;if(l.indexOf(p)>=0)return U.DOCUMENT_POSITION_FOLLOWING;if(s.indexOf(p)>=0)return U.DOCUMENT_POSITION_PRECEDING}return 0}},S(A,J),S(A,J.prototype),S(U,J),S(U,J.prototype),Z.prototype={implementation:null,nodeName:"#document",nodeType:I,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType===D){for(var r=e.firstChild;r;){var n=r.nextSibling;this.insertBefore(r,t),r=n}return e}return pe(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===T&&(this.documentElement=e),e},removeChild:function(e){var t=re(this,e);return t===this.documentElement&&(this.documentElement=null),t},replaceChild:function(e,t){pe(this,e,t,ce),e.ownerDocument=this,t&&this.removeChild(t),oe(e)&&(this.documentElement=e)},importNode:function(e,t){return Ce(this,e,t)},getElementById:function(e){var t=null;return Q(this.documentElement,(function(r){if(r.nodeType==T&&r.getAttribute("id")==e)return t=r,!0})),t},createElement:function(e){var t=new fe(f);return t.ownerDocument=this,"html"===this.type&&(e=e.toLowerCase()),i(this.contentType)&&(t.namespaceURI=p.HTML),t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new F,(t.attributes=new B)._ownerElement=t,t},createDocumentFragment:function(){var e=new xe(f);return e.ownerDocument=this,e.childNodes=new F,e},createTextNode:function(e){var t=new me(f);return t.ownerDocument=this,t.childNodes=new F,t.appendData(e),t},createComment:function(e){var t=new ge(f);return t.ownerDocument=this,t.childNodes=new F,t.appendData(e),t},createCDATASection:function(e){var t=new ye(f);return t.ownerDocument=this,t.childNodes=new F,t.appendData(e),t},createProcessingInstruction:function(e,t){var r=new Se(f);return r.ownerDocument=this,r.childNodes=new F,r.nodeName=r.target=e,r.nodeValue=r.data=t,r},createAttribute:function(e){if(!g.QName_exact.test(e))throw new d(d.INVALID_CHARACTER_ERR,'invalid character in name "'+e+'"');return"html"===this.type&&(e=e.toLowerCase()),this._createAttribute(e)},_createAttribute:function(e){var t=new he(f);return t.ownerDocument=this,t.childNodes=new F,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){if(!g.Name.test(e))throw new d(d.INVALID_CHARACTER_ERR,'not a valid xml name "'+e+'"');if("html"===this.type)throw new d("document is an html document",m.NotSupportedError);var t=new Ee(f);return t.ownerDocument=this,t.childNodes=new F,t.nodeName=e,t},createElementNS:function(e,t){var r=x(e,t),n=new fe(f),o=n.attributes=new B;return n.childNodes=new F,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=r[0],n.prefix=r[1],n.localName=r[2],o._ownerElement=n,n},createAttributeNS:function(e,t){var r=x(e,t),n=new he(f);return n.ownerDocument=this,n.childNodes=new F,n.nodeName=t,n.name=t,n.specified=!0,n.namespaceURI=r[0],n.prefix=r[1],n.localName=r[2],n}},_(Z,J),fe.prototype={nodeType:T,attributes:null,getQualifiedName:function(){return this.prefix?this.prefix+":"+this.localName:this.localName},_isInHTMLDocumentAndNamespace:function(){return"html"===this.ownerDocument.type&&this.namespaceURI===p.HTML},hasAttribute:function(e){return!!this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t?t.value:null},getAttributeNode:function(e){return this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase()),this.attributes.getNamedItem(e)},setAttribute:function(e,t){this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase());var r=this.getAttributeNode(e);r?r.value=r.nodeValue=""+t:((r=this.ownerDocument._createAttribute(e)).value=r.nodeValue=""+t,this.setAttributeNode(r))},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);r&&this.removeAttributeNode(r)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);return r?r.value:null},setAttributeNS:function(e,t,r){var n=x(e,t)[2],o=this.getAttributeNodeNS(e,n);o?o.value=o.nodeValue=""+r:((o=this.ownerDocument.createAttributeNS(e,t)).value=o.nodeValue=""+r,this.setAttributeNode(o))},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByClassName:function(e){var t=w(e);return new V(this,(function(r){var n=[];return t.length>0&&Q(r,(function(o){if(o!==r&&o.nodeType===T){var i=o.getAttribute("class");if(i){var a=e===i;if(!a){var s=w(i);a=t.every((l=s,function(e){return l&&-1!==l.indexOf(e)}))}a&&n.push(o)}}var l})),n}))},getElementsByTagName:function(e){var t="html"===(this.nodeType===I?this:this.ownerDocument).type,r=e.toLowerCase();return new V(this,(function(n){var o=[];return Q(n,(function(i){i!==n&&i.nodeType===T&&(("*"===e||i.getQualifiedName()===(t&&i.namespaceURI===p.HTML?r:e))&&o.push(i))})),o}))},getElementsByTagNameNS:function(e,t){return new V(this,(function(r){var n=[];return Q(r,(function(o){o===r||o.nodeType!==T||"*"!==e&&o.namespaceURI!==e||"*"!==t&&o.localName!=t||n.push(o)})),n}))}},Z.prototype.getElementsByClassName=fe.prototype.getElementsByClassName,Z.prototype.getElementsByTagName=fe.prototype.getElementsByTagName,Z.prototype.getElementsByTagNameNS=fe.prototype.getElementsByTagNameNS,_(fe,J),he.prototype.nodeType=R,_(he,J),de.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,r){r=this.data.substring(0,e)+r+this.data.substring(e+t),this.nodeValue=this.data=r,this.length=r.length}},_(de,J),me.prototype={nodeName:"#text",nodeType:O,splitText:function(e){var t=this.data,r=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var n=this.ownerDocument.createTextNode(r);return this.parentNode&&this.parentNode.insertBefore(n,this.nextSibling),n}},_(me,de),ge.prototype={nodeName:"#comment",nodeType:k},_(ge,de),ye.prototype={nodeName:"#cdata-section",nodeType:C},_(ye,me),ve.prototype.nodeType=L,_(ve,J),be.prototype.nodeType=q,_(be,J),we.prototype.nodeType=P,_(we,J),Ee.prototype.nodeType=N,_(Ee,J),xe.prototype.nodeName="#document-fragment",xe.prototype.nodeType=D,_(xe,J),Se.prototype.nodeType=M,_(Se,de),_e.prototype.serializeToString=function(e,t){return Ae.call(e,t)},J.prototype.toString=Ae;try{if(Object.defineProperty){function Me(e){switch(e.nodeType){case T:case D:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(Me(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(V.prototype,"length",{get:function(){return H(this),this.$$length}}),Object.defineProperty(J.prototype,"textContent",{get:function(){return Me(this)},set:function(e){switch(this.nodeType){case T:case D:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),Pe=function(e,t,r){e["$$"+t]=r}}}catch(ke){}t._updateLiveList=H,t.Attr=he,t.CDATASection=ye,t.CharacterData=de,t.Comment=ge,t.Document=Z,t.DocumentFragment=xe,t.DocumentType=ve,t.DOMImplementation=X,t.Element=fe,t.Entity=we,t.EntityReference=Ee,t.LiveNodeList=V,t.NamedNodeMap=B,t.Node=J,t.NodeList=F,t.Notation=be,t.Text=me,t.ProcessingInstruction=Se,t.XMLSerializer=_e},6559:(e,t,r)=>{"use strict";var n=r(4582).freeze;t.XML_ENTITIES=n({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),t.HTML_ENTITIES=n({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),t.entityMap=t.HTML_ENTITIES},2983:(e,t,r)=>{"use strict";function n(e,t){e.prototype=Object.create(Error.prototype,{constructor:{value:e},name:{value:e.name,enumerable:!0,writable:t}})}var o=r(4582).freeze({Error:"Error",IndexSizeError:"IndexSizeError",DomstringSizeError:"DomstringSizeError",HierarchyRequestError:"HierarchyRequestError",WrongDocumentError:"WrongDocumentError",InvalidCharacterError:"InvalidCharacterError",NoDataAllowedError:"NoDataAllowedError",NoModificationAllowedError:"NoModificationAllowedError",NotFoundError:"NotFoundError",NotSupportedError:"NotSupportedError",InUseAttributeError:"InUseAttributeError",InvalidStateError:"InvalidStateError",SyntaxError:"SyntaxError",InvalidModificationError:"InvalidModificationError",NamespaceError:"NamespaceError",InvalidAccessError:"InvalidAccessError",ValidationError:"ValidationError",TypeMismatchError:"TypeMismatchError",SecurityError:"SecurityError",NetworkError:"NetworkError",AbortError:"AbortError",URLMismatchError:"URLMismatchError",QuotaExceededError:"QuotaExceededError",TimeoutError:"TimeoutError",InvalidNodeTypeError:"InvalidNodeTypeError",DataCloneError:"DataCloneError",EncodingError:"EncodingError",NotReadableError:"NotReadableError",UnknownError:"UnknownError",ConstraintError:"ConstraintError",DataError:"DataError",TransactionInactiveError:"TransactionInactiveError",ReadOnlyError:"ReadOnlyError",VersionError:"VersionError",OperationError:"OperationError",NotAllowedError:"NotAllowedError",OptOutError:"OptOutError"}),i=Object.keys(o);function a(e){return"number"==typeof e&&e>=1&&e<=25}function s(e,t){var r;a(e)?(this.name=i[e],this.message=t||""):(this.message=e,this.name="string"==typeof(r=t)&&r.substring(r.length-o.Error.length)===o.Error?t:o.Error),Error.captureStackTrace&&Error.captureStackTrace(this,s)}n(s,!0),Object.defineProperties(s.prototype,{code:{enumerable:!0,get:function(){var e=i.indexOf(this.name);return a(e)?e:0}}});for(var l={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25},u=Object.entries(l),c=0;c{"use strict";function r(e){try{"function"!=typeof e&&(e=RegExp);var t=new e("𝌆","u").exec("𝌆");return!!t&&2===t[0].length}catch(e){}return!1}var n=r();function o(e){if("["!==e.source[0])throw new Error(e+" can not be used with chars");return e.source.slice(1,e.source.lastIndexOf("]"))}function i(e,t){if("["!==e.source[0])throw new Error("/"+e.source+"/ can not be used with chars_without");if(!t||"string"!=typeof t)throw new Error(JSON.stringify(t)+" is not a valid search");if(-1===e.source.indexOf(t))throw new Error('"'+t+'" is not is /'+e.source+"/");if("-"===t&&1!==e.source.indexOf(t))throw new Error('"'+t+'" is not at the first postion of /'+e.source+"/");return new RegExp(e.source.replace(t,""),n?"u":"")}function a(e){var t=this;return new RegExp(Array.prototype.slice.call(arguments).map((function(e){var r="string"==typeof e;if(r&&void 0===t&&"|"===e)throw new Error("use regg instead of reg to wrap expressions with `|`!");return r?e:e.source})).join(""),n?"mu":"m")}function s(e){if(0===arguments.length)throw new Error("no parameters provided");return a.apply(s,["(?:"].concat(Array.prototype.slice.call(arguments),[")"]))}var l=/[-\x09\x0A\x0D\x20-\x2C\x2E-\uD7FF\uE000-\uFFFD]/;n&&(l=a("[",o(l),"\\u{10000}-\\u{10FFFF}","]"));var u=/[\x20\x09\x0D\x0A]/,c=o(u),p=a(u,"+"),f=a(u,"*"),h=/[:_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;n&&(h=a("[",o(h),"\\u{10000}-\\u{10FFFF}","]"));var d=a("[",o(h),o(/[-.0-9\xB7]/),o(/[\u0300-\u036F\u203F-\u2040]/),"]"),m=a(h,d,"*"),g=a(d,"+"),y=a("&",m,";"),v=s(/&#[0-9]+;|&#x[0-9a-fA-F]+;/),b=s(y,"|",v),w=a("%",m,";"),E=s(a('"',s(/[^%&"]/,"|",w,"|",b),"*",'"'),"|",a("'",s(/[^%&']/,"|",w,"|",b),"*","'")),x=s('"',s(/[^<&"]/,"|",b),"*",'"',"|","'",s(/[^<&']/,"|",b),"*","'"),S=a(i(h,":"),i(d,":"),"*"),_=a(S,s(":",S),"?"),A=a("^",_,"$"),T=a("(",_,")"),R=s(/"[^"]*"|'[^']*'/),O=a(/^<\?/,"(",m,")",s(p,"(",l,"*?)"),"?",/\?>/),C=/[\x20\x0D\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/,N=s('"',C,'*"',"|","'",i(C,"'"),"*'"),P="\x3c!--",M=a(P,s(i(l,"-"),"|",a("-",i(l,"-"))),"*","--\x3e"),k="#PCDATA",I=s(a(/\(/,f,k,s(f,/\|/,f,_),"*",f,/\)\*/),"|",a(/\(/,f,k,f,/\)/)),L=s("EMPTY","|","ANY","|",I,"|",a(/\([^>]+\)/,/[?*+]?/)),D=a(""),q=a("NOTATION",p,/\(/,f,m,s(f,/\|/,f,m),"*",f,/\)/),U=a(/\(/,f,g,s(f,/\|/,f,g),"*",f,/\)/),j=s(q,"|",U),z=s(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/,"|",j),G=s(/#REQUIRED|#IMPLIED/,"|",s(s("#FIXED",p),"?",x)),F=a(""),V="SYSTEM",H="PUBLIC",B=s(s(V,p,R),"|",s(H,p,N,p,R)),$=a("^",s(s(V,p,"(?",R,")"),"|",s(H,p,"(?",N,")",p,"(?",R,")"))),W=s(p,"NDATA",p,m),Y=""),J=s(E,"|",B),K=s(X,"|",a(Y,p,"%",p,m,p,J,f,">")),Q=a(H,p,N),Z=a(""),ee=a(f,"=",f),te=/1[.]\d+/,re=a(p,"version",ee,s("'",te,"'","|",'"',te,'"')),ne=/[A-Za-z][-A-Za-z0-9._]*/,oe=a(/^<\?xml/,re,s(p,"encoding",ee,s('"',ne,'"',"|","'",ne,"'")),"?",s(p,"standalone",ee,s("'",s("yes","|","no"),"'","|",'"',s("yes","|","no"),'"')),"?",f,/\?>/),ie=a(l,"*?",/\]\]>/),ae=a(/",t.CDSect=ae,t.Char=l,t.Comment=M,t.COMMENT_START=P,t.COMMENT_END="--\x3e",t.DOCTYPE_DECL_START="{"use strict";var n=r(4582);n.assign,n.hasDefaultHTMLNamespace,n.isHTMLMimeType,n.isValidMimeType,n.MIME_TYPE,n.NAMESPACE;var o=r(2983);o.DOMException,o.DOMExceptionName,o.ExceptionCode,o.ParseError;var i=r(4722);i.Attr,i.CDATASection,i.CharacterData,i.Comment,i.Document,i.DocumentFragment,i.DocumentType,i.DOMImplementation,i.Element,i.Entity,i.EntityReference,i.LiveNodeList,i.NamedNodeMap,i.Node,i.NodeList,i.Notation,i.ProcessingInstruction,i.Text,i.XMLSerializer;var a=r(5752);t.S4=a.DOMParser,a.onErrorStopParsing,a.onWarningStopParsing},4466:(e,t,r)=>{"use strict";var n=r(4582),o=r(2763),i=r(2983),a=n.isHTMLEscapableRawTextElement,s=n.isHTMLMimeType,l=n.isHTMLRawTextElement,u=n.hasOwn,c=n.NAMESPACE,p=i.ParseError,f=i.DOMException;function h(){}h.prototype={parse:function(e,t,r){var i=this.domBuilder;i.startDocument(),b(t,t=Object.create(null)),function(e,t,r,i,a){var l=s(i.mimeType);e.indexOf(o.UNICODE_REPLACEMENT_CHARACTER)>=0&&a.warning("Unicode replacement character detected, source encoding issues?");function c(e){if(e>65535){var t=55296+((e-=65536)>>10),r=56320+(1023&e);return String.fromCharCode(t,r)}return String.fromCharCode(e)}function h(e){var t=";"===e[e.length-1]?e:e+";";if(!l&&t!==e)return a.error("EntityRef: expecting ;"),e;var n=o.Reference.exec(t);if(!n||n[0].length!==t.length)return a.error("entity not matching Reference production: "+e),e;var i=t.slice(1,-1);return u(r,i)?r[i]:"#"===i.charAt(0)?c(parseInt(i.substr(1).replace("x","0x"))):(a.error("entity not found:"+e),e)}function b(t){if(t>N){var r=e.substring(N,t).replace(d,h);R&&w(N),i.characters(r,0,t-N),N=t}}function w(t,r){for(;t>=A&&(r=T.exec(e));)_=r.index,A=_+r[0].length,R.lineNumber++;R.columnNumber=t-_+1}var _=0,A=0,T=/.*(?:\r\n?|\n)|.*$/g,R=i.locator,O=[{currentNSMap:t}],C=[],N=0;for(;;){try{var P=e.indexOf("<",N);if(P<0){if(!l&&C.length>0)return a.fatalError("unclosed xml tag(s): "+C.join(", "));if(!e.substring(N).match(/^\s*$/)){var M=i.doc,k=M.createTextNode(e.substr(N));if(M.documentElement)return a.error("Extra content at the end of the document");M.appendChild(k),i.currentElement=k}return}if(P>N){var I=e.substring(N,P);l||0!==C.length||(I=I.replace(new RegExp(o.S_OPT.source,"g"),""))&&a.error("Unexpected content outside root element: '"+I+"'"),b(P)}switch(e.charAt(P+1)){case"/":var L=e.indexOf(">",P+2),D=e.substring(P+2,L>0?L:void 0);if(!D)return a.fatalError("end tag name missing");var q=L>0&&o.reg("^",o.QName_group,o.S_OPT,"$").exec(D);if(!q)return a.fatalError('end tag name contains invalid characters: "'+D+'"');if(!i.currentElement&&!i.doc.documentElement)return;var U=C[C.length-1]||i.currentElement.tagName||i.doc.documentElement.tagName||"";if(U!==q[1]){var j=q[1].toLowerCase();if(!l||U.toLowerCase()!==j)return a.fatalError('Opening and ending tag mismatch: "'+U+'" != "'+D+'"')}var z=O.pop();C.pop();var G=z.localNSMap;if(i.endElement(z.uri,z.localName,U),G)for(var F in G)u(G,F)&&i.endPrefixMapping(F);L++;break;case"?":R&&w(P),L=x(e,P,i,a);break;case"!":R&&w(P),L=E(e,P,i,a,l);break;default:R&&w(P);var V=new S,H=O[O.length-1].currentNSMap,B=(L=g(e,P,V,H,h,a,l),V.length);if(V.closed||(l&&n.isHTMLVoidElement(V.tagName)?V.closed=!0:C.push(V.tagName)),R&&B){for(var $=m(R,{}),W=0;WN?N=L:b(Math.max(P,N)+1)}}(e,t,r,i,this.errorHandler),i.endDocument()}};var d=/&#?\w+;?/g;function m(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function g(e,t,r,n,o,i,a){function s(e,t,n){return u(r.attributeNames,e)?i.fatalError("Attribute "+e+" redefined"):!a&&t.indexOf("<")>=0?i.fatalError("Unescaped '<' not allowed in attributes values"):void r.addValue(e,t.replace(/[\t\n\r]/g," ").replace(d,o),n)}for(var l,c=++t,p=0;;){var f=e.charAt(c);switch(f){case"=":if(1===p)l=e.slice(t,c),p=3;else{if(2!==p)throw new Error("attribute equal must after attrName");p=3}break;case"'":case'"':if(3===p||1===p){if(1===p&&(i.warning('attribute value must after "="'),l=e.slice(t,c)),t=c+1,!((c=e.indexOf(f,t))>0))throw new Error("attribute value no end '"+f+"' match");s(l,h=e.slice(t,c),t-1),p=5}else{if(4!=p)throw new Error('attribute value must after "="');s(l,h=e.slice(t,c),t),i.warning('attribute "'+l+'" missed start quot('+f+")!!"),t=c+1,p=5}break;case"/":switch(p){case 0:r.setTagName(e.slice(t,c));case 5:case 6:case 7:p=7,r.closed=!0;case 4:case 1:break;case 2:r.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return i.error("unexpected end of input"),0==p&&r.setTagName(e.slice(t,c)),c;case">":switch(p){case 0:r.setTagName(e.slice(t,c));case 5:case 6:case 7:break;case 4:case 1:"/"===(h=e.slice(t,c)).slice(-1)&&(r.closed=!0,h=h.slice(0,-1));case 2:2===p&&(h=l),4==p?(i.warning('attribute "'+h+'" missed quot(")!'),s(l,h,t)):(a||i.warning('attribute "'+h+'" missed value!! "'+h+'" instead!!'),s(h,h,t));break;case 3:if(!a)return i.fatalError("AttValue: ' or \" expected")}return c;case"€":f=" ";default:if(f<=" ")switch(p){case 0:r.setTagName(e.slice(t,c)),p=6;break;case 1:l=e.slice(t,c),p=2;break;case 4:var h=e.slice(t,c);i.warning('attribute "'+h+'" missed quot(")!!'),s(l,h,t);case 5:p=6}else switch(p){case 2:a||i.warning('attribute "'+l+'" missed value!! "'+l+'" instead2!!'),s(l,l,t),t=c,p=1;break;case 5:i.warning('attribute space is required"'+l+'"!!');case 6:p=1,t=c;break;case 3:p=4,t=c;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}c++}}function y(e,t,r){for(var n=e.tagName,o=null,i=e.length;i--;){var a=e[i],s=a.qName,l=a.value;if((d=s.indexOf(":"))>0)var p=a.prefix=s.slice(0,d),f=s.slice(d+1),h="xmlns"===p&&f;else f=s,p=null,h="xmlns"===s&&"";a.localName=f,!1!==h&&(null==o&&(o=Object.create(null),b(r,r=Object.create(null))),r[h]=o[h]=l,a.uri=c.XMLNS,t.startPrefixMapping(h,l))}for(i=e.length;i--;)(a=e[i]).prefix&&("xml"===a.prefix&&(a.uri=c.XML),"xmlns"!==a.prefix&&(a.uri=r[a.prefix]));var d;(d=n.indexOf(":"))>0?(p=e.prefix=n.slice(0,d),f=e.localName=n.slice(d+1)):(p=null,f=e.localName=n);var m=e.uri=r[p||""];if(t.startElement(m,f,n,e),!e.closed)return e.currentNSMap=r,e.localNSMap=o,!0;if(t.endElement(m,f,n),o)for(p in o)u(o,p)&&t.endPrefixMapping(p)}function v(e,t,r,n,o){var i=a(r);if(i||l(r)){var s=e.indexOf("",t),u=e.substring(t+1,s);return i&&(u=u.replace(d,n)),o.characters(u,0,u.length),s}return t+1}function b(e,t){for(var r in e)u(e,r)&&(t[r]=e[r])}function w(e,t){var r=t;function n(t){return t=t||0,e.charAt(r+t)}function i(e){r+=e=e||1}function a(){return e.substring(r)}return{char:n,getIndex:function(){return r},getMatch:function(e){var t=o.reg("^",e).exec(a());return t?(i(t[0].length),t[0]):null},getSource:function(){return e},skip:i,skipBlanks:function(){for(var t=0;r"!==a.char()?n.fatalError("doctype not terminated with > at position "+a.getIndex()):(a.skip(1),r.startDTD(u.name,u.publicId,u.systemId,u.internalSubset),r.endDTD(),a.getIndex());default:return n.fatalError('Not well-formed XML starting with "0)return n.fatalError("processing instruction at position "+t+" is an xml declaration which is only at the start of the document");if(!o.XMLDecl.test(e.substring(t)))return n.fatalError("xml declaration is not well-formed")}return r.processingInstruction(i[1],i[2]),t+i[0].length}function S(){this.attributeNames=Object.create(null)}S.prototype={setTagName:function(e){if(!o.QName_exact.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,r){if(!o.QName_exact.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:r}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=h,t.parseUtils=w,t.parseDoctypeCommentOrCData=E},1596:(e,t,r)=>{"use strict";r.d(t,{default:()=>di});const n=ol.layer.VectorTile;var o=r.n(n);const i=ol.source.VectorTile;var a=r.n(i);const s=ol.source.TileJSON;var l=r.n(s);const u=ol.format.MVT;var c=r.n(u);const p=ol.Observable,f=ol.style.Circle,h=ol.style.Fill,d=ol.style.Icon;new Array(6);function m(e,t,r,n,o,i,a,s){const l=Math.sin(i),u=Math.cos(i);return e[0]=n*u,e[1]=o*l,e[2]=-n*l,e[3]=o*u,e[4]=a*n*u-s*n*l+t,e[5]=a*o*l+s*o*u+r,e}function g(e,t,r,n,o){return o?(o[0]=e,o[1]=t,o[2]=r,o[3]=n,o):[e,t,r,n]}function y(e){return g(1/0,1/0,-1/0,-1/0,e)}function v(e,t,r,n,o){return function(e,t,r,n,o){for(;r1?(r=o,n=i):l>0&&(r+=a*l,n+=s*l)}return function(e,t,r,n){const o=r-e,i=n-t;return o*o+i*i}(e,t,r,n)}function S(e,t,r,n,o,i,a){const s=(r-t)/n;if(s<3){for(;t0;){const r=u.pop(),i=u.pop();let a=0;const s=e[i],p=e[i+1],f=e[r],h=e[r+1];for(let t=i+n;ta&&(c=t,a=r)}a>o&&(l[(c-t)/n]=1,i+n0&&d>f)&&(h<0&&m0&&m>h)?(s=r,l=p):(i[a++]=s,i[a++]=l,u=s,c=l,s=r,l=p)}return i[a++]=s,i[a++]=l,a}function R(e,t,r,n,o,i,a,s){for(let l=0,u=r.length;lt?1:ei&&(r-s)*(i-l)-(o-s)*(n-l)>0&&a++:n<=i&&(r-s)*(i-l)-(o-s)*(n-l)<0&&a--,s=r,l=n}return 0!==a}function P(e,t,r,n,o,i){if(0===r.length)return!1;if(!N(e,t,r[0],n,o,i))return!1;for(let t=1,a=r.length;ty&&(u=(c+p)/2,P(e,t,r,n,u,d)&&(g=u,y=o)),c=p}return isNaN(g)&&(g=o[i]),a?(a.push(g,d,y),a):[g,d,y]}const k={radians:6370997/(2*Math.PI),degrees:2*Math.PI*6370997/360,ft:.3048,m:1,"us-ft":1200/3937};const I=class{constructor(e){this.code_=e.code,this.units_=e.units,this.extent_=void 0!==e.extent?e.extent:null,this.worldExtent_=void 0!==e.worldExtent?e.worldExtent:null,this.axisOrientation_=void 0!==e.axisOrientation?e.axisOrientation:"enu",this.global_=void 0!==e.global&&e.global,this.canWrapX_=!(!this.global_||!this.extent_),this.getPointResolutionFunc_=e.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=e.metersPerUnit}canWrapX(){return this.canWrapX_}getCode(){return this.code_}getExtent(){return this.extent_}getUnits(){return this.units_}getMetersPerUnit(){return this.metersPerUnit_||k[this.units_]}getWorldExtent(){return this.worldExtent_}getAxisOrientation(){return this.axisOrientation_}isGlobal(){return this.global_}setGlobal(e){this.global_=e,this.canWrapX_=!(!e||!this.extent_)}getDefaultTileGrid(){return this.defaultTileGrid_}setDefaultTileGrid(e){this.defaultTileGrid_=e}setExtent(e){this.extent_=e,this.canWrapX_=!(!this.global_||!e)}setWorldExtent(e){this.worldExtent_=e}setGetPointResolution(e){this.getPointResolutionFunc_=e}getPointResolutionFunc(){return this.getPointResolutionFunc_}},L=6378137,D=Math.PI*L,q=[-D,-D,D,D],U=[-180,-85,180,85],j=L*Math.log(Math.tan(Math.PI/2));class z extends I{constructor(e){super({code:e,units:"m",extent:q,global:!0,worldExtent:U,getPointResolution:function(e,t){return e/Math.cosh(t[1]/L)}})}}const G=[new z("EPSG:3857"),new z("EPSG:102100"),new z("EPSG:102113"),new z("EPSG:900913"),new z("http://www.opengis.net/def/crs/EPSG/0/3857"),new z("http://www.opengis.net/gml/srs/epsg.xml#3857")];function F(e,t,r,n){const o=e.length;r=r>1?r:2,n=n??r,void 0===t&&(t=r>2?e.slice():new Array(o));for(let r=0;rj?n=j:n<-j&&(n=-j),t[r+1]=n}return t}function V(e,t,r,n){const o=e.length;r=r>1?r:2,n=n??r,void 0===t&&(t=r>2?e.slice():new Array(o));for(let r=0;r32700&&t<32761?r=t-32700:t>32600&&t<32661&&(n=!0,r=t-32600),r?{number:r,north:n}:null}const ee=[function(e){return Z(e)?new I({code:e,units:"m"}):null}];function te(e,t){if(void 0!==t)for(let r=0,n=e.length;r0}function ue(e,t,r,n,o,i,a){let s,l;const u=(r-t)/n;if(1===u)s=t;else if(2===u)s=t,l=o;else if(0!==u){let i=e[t],a=e[t+1],u=0;const c=[0];for(let o=t+n;o>1),o=+r(e[n],t),o<0?i=n+1:(a=n,s=!o);return s?i:~i}(c,p);f<0?(l=(p-c[-f-2])/(c[-f-1]-c[-f-2]),s=t+(-f-2)*n):s=t+f*n}a=a>1?a:2,i=i||new Array(a);for(let t=0;t{if(e===this.squaredTolerance_)return this.simplifiedGeometry_;this.simplifiedGeometry_=this.clone(),t&&this.simplifiedGeometry_.applyTransform(t);const r=this.simplifiedGeometry_.getFlatCoordinates();let n;switch(this.type_){case"LineString":r.length=S(r,0,this.simplifiedGeometry_.flatCoordinates_.length,this.simplifiedGeometry_.stride_,e,r,0),n=[r.length];break;case"MultiLineString":n=[],r.length=_(r,0,this.simplifiedGeometry_.ends_,this.simplifiedGeometry_.stride_,e,r,0,n);break;case"Polygon":n=[],r.length=R(r,0,this.simplifiedGeometry_.ends_,this.simplifiedGeometry_.stride_,Math.sqrt(e),r,0,n)}return n&&(this.simplifiedGeometry_=new pe(this.type_,r,n,2,this.properties_,this.id_)),this.squaredTolerance_=e,this.simplifiedGeometry_})),this}}pe.prototype.getFlatCoordinates=pe.prototype.getOrientedFlatCoordinates;const fe=pe,he=ol.style.Stroke,de=ol.style.Style,me=ol.style.Text,ge=ol.functions,ye=ol.render.canvas,ve=ol.TileState,be=ol.util;var we=r(7304);ol.layer.Image,ol.layer.Layer,ol.layer.Group,ol.Map,ol.source.Raster,ol.source.Source;const Ee=ol.tilegrid.TileGrid;r(9583);var xe=r(996),Se=r(3668);ol.View;const _e=ol.proj.Units;var Ae=r(2947),Te=r(8062),Re=r(9201),Oe=r(2938);ol.events.Event;function Ce(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Ne,Pe={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],rebeccapurple:[102,51,153,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function Me(e){return(e=Math.round(e))<0?0:e>255?255:e}function ke(e){return e<0?0:e>1?1:e}function Ie(e){return"%"===e[e.length-1]?Me(parseFloat(e)/100*255):Me(parseInt(e))}function Le(e){return"%"===e[e.length-1]?ke(parseFloat(e)/100):ke(parseFloat(e))}function De(e,t,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?e+(t-e)*r*6:2*r<1?t:3*r<2?e+(t-e)*(2/3-r)*6:e}try{Ne={}.parseCSSColor=function(e){var t,r=e.replace(/ /g,"").toLowerCase();if(r in Pe)return Pe[r].slice();if("#"===r[0])return 4===r.length?(t=parseInt(r.substr(1),16))>=0&&t<=4095?[(3840&t)>>4|(3840&t)>>8,240&t|(240&t)>>4,15&t|(15&t)<<4,1]:null:7===r.length&&(t=parseInt(r.substr(1),16))>=0&&t<=16777215?[(16711680&t)>>16,(65280&t)>>8,255&t,1]:null;var n=r.indexOf("("),o=r.indexOf(")");if(-1!==n&&o+1===r.length){var i=r.substr(0,n),a=r.substr(n+1,o-(n+1)).split(","),s=1;switch(i){case"rgba":if(4!==a.length)return null;s=Le(a.pop());case"rgb":return 3!==a.length?null:[Ie(a[0]),Ie(a[1]),Ie(a[2]),s];case"hsla":if(4!==a.length)return null;s=Le(a.pop());case"hsl":if(3!==a.length)return null;var l=(parseFloat(a[0])%360+360)%360/360,u=Le(a[1]),c=Le(a[2]),p=c<=.5?c*(u+1):c+u-c*u,f=2*c-p;return[Me(255*De(f,p,l+1/3)),Me(255*De(f,p,l)),Me(255*De(f,p,l-1/3)),s];default:return null}}return null}}catch(e){}class qe{constructor(e,t,r,n=1){this.r=e,this.g=t,this.b=r,this.a=n}static parse(e){if(!e)return;if(e instanceof qe)return e;if("string"!=typeof e)return;const t=Ne(e);return t?new qe(t[0]/255*t[3],t[1]/255*t[3],t[2]/255*t[3],t[3]):void 0}toString(){const[e,t,r,n]=this.toArray();return`rgba(${Math.round(e)},${Math.round(t)},${Math.round(r)},${n})`}toArray(){const{r:e,g:t,b:r,a:n}=this;return 0===n?[0,0,0,0]:[255*e/n,255*t/n,255*r/n,n]}toArray01(){const{r:e,g:t,b:r,a:n}=this;return 0===n?[0,0,0,0]:[e/n,t/n,r/n,n]}toArray01PremultipliedAlpha(){const{r:e,g:t,b:r,a:n}=this;return[e,t,r,n]}}qe.black=new qe(0,0,0,1),qe.white=new qe(1,1,1,1),qe.transparent=new qe(0,0,0,0),qe.red=new qe(1,0,0,1),qe.blue=new qe(0,0,1,1);var Ue=qe;function je(e){return"object"==typeof e?["literal",e]:e}function ze(e,t){let r=e.stops;if(!r)return function(e,t){const r=["get",e.property];if(void 0===e.default)return"string"===t.type?["string",r]:r;if("enum"===t.type)return["match",r,Object.keys(t.values),r,e.default];{const n=["color"===t.type?"to-color":t.type,r,je(e.default)];return"array"===t.type&&n.splice(1,0,t.value,t.length||null),n}}(e,t);const n=r&&"object"==typeof r[0][0],o=n||void 0!==e.property,i=n||!o;return r=r.map((e=>!o&&t.tokens&&"string"==typeof e[1]?[e[0],We(e[1])]:[e[0],je(e[1])])),n?function(e,t,r){const n={},o={},i=[];for(let t=0;t3&&t===e[e.length-2]||(n&&2===e.length||e.push(t),e.push(r))}function $e(e,t){return e.type?e.type:t.expression.interpolated?"exponential":"interval"}function We(e){const t=["concat"],r=/{([^{}]+)}/g;let n=0;for(let o=r.exec(e);null!==o;o=r.exec(e)){const i=e.slice(n,r.lastIndex-o[0].length);n=r.lastIndex,i.length>0&&t.push(i),t.push(["get",o[1]])}if(1===t.length)return e;if(n`:"value"===e.itemType.kind?"array":`array<${t}>`}return e.kind}const ct=[Qe,Ze,et,tt,rt,at,nt,lt(ot),st];function pt(e,t){if("error"===t.kind)return null;if("array"===e.kind){if("array"===t.kind&&(0===t.N&&"value"===t.itemType.kind||!pt(e.itemType,t.itemType))&&("number"!=typeof e.N||e.N===t.N))return null}else{if(e.kind===t.kind)return null;if("value"===e.kind)for(const e of ct)if(!pt(e,t))return null}return`Expected ${ut(e)} but found ${ut(t)} instead.`}function ft(e,t){return t.some((t=>t.kind===e.kind))}function ht(e,t){return t.some((t=>"null"===t?null===e:"array"===t?Array.isArray(e):"object"===t?e&&!Array.isArray(e)&&"object"==typeof e:t===typeof e))}class dt{constructor(e,t,r){this.sensitivity=e?t?"variant":"case":t?"accent":"base",this.locale=r,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:"search"})}compare(e,t){return this.collator.compare(e,t)}resolvedLocale(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale}}class mt{constructor(e,t,r,n,o){this.text=e.normalize?e.normalize():e,this.image=t,this.scale=r,this.fontStack=n,this.textColor=o}}class gt{constructor(e){this.sections=e}static fromString(e){return new gt([new mt(e,null,null,null,null)])}isEmpty(){return 0===this.sections.length||!this.sections.some((e=>0!==e.text.length||e.image&&0!==e.image.name.length))}static factory(e){return e instanceof gt?e:gt.fromString(e)}toString(){return 0===this.sections.length?"":this.sections.map((e=>e.text)).join("")}serialize(){const e=["format"];for(const t of this.sections){if(t.image){e.push(["image",t.image.name]);continue}e.push(t.text);const r={};t.fontStack&&(r["text-font"]=["literal",t.fontStack.split(",")]),t.scale&&(r["font-scale"]=t.scale),t.textColor&&(r["text-color"]=["rgba"].concat(t.textColor.toArray())),e.push(r)}return e}}class yt{constructor(e){this.name=e.name,this.available=e.available}toString(){return this.name}static fromString(e){return e?new yt({name:e,available:!1}):null}serialize(){return["image",this.name]}}function vt(e,t,r,n){if(!("number"==typeof e&&e>=0&&e<=255&&"number"==typeof t&&t>=0&&t<=255&&"number"==typeof r&&r>=0&&r<=255)){return`Invalid rgba value [${("number"==typeof n?[e,t,r,n]:[e,t,r]).join(", ")}]: 'r', 'g', and 'b' must be between 0 and 255.`}return void 0===n||"number"==typeof n&&n>=0&&n<=1?null:`Invalid rgba value [${[e,t,r,n].join(", ")}]: 'a' must be between 0 and 1.`}function bt(e){if(null===e)return!0;if("string"==typeof e)return!0;if("boolean"==typeof e)return!0;if("number"==typeof e)return!0;if(e instanceof Ue)return!0;if(e instanceof dt)return!0;if(e instanceof gt)return!0;if(e instanceof yt)return!0;if(Array.isArray(e)){for(const t of e)if(!bt(t))return!1;return!0}if("object"==typeof e){for(const t in e)if(!bt(e[t]))return!1;return!0}return!1}function wt(e){if(null===e)return Qe;if("string"==typeof e)return et;if("boolean"==typeof e)return tt;if("number"==typeof e)return Ze;if(e instanceof Ue)return rt;if(e instanceof dt)return it;if(e instanceof gt)return at;if(e instanceof yt)return st;if(Array.isArray(e)){const t=e.length;let r;for(const t of e){const e=wt(t);if(r){if(r===e)continue;r=ot;break}r=e}return lt(r||ot,t)}return nt}function Et(e){const t=typeof e;return null===e?"":"string"===t||"number"===t||"boolean"===t?String(e):e instanceof Ue||e instanceof gt||e instanceof yt?e.toString():JSON.stringify(e)}class xt{constructor(e,t){this.type=e,this.value=t}static parse(e,t){if(2!==e.length)return t.error(`'literal' expression requires exactly one argument, but found ${e.length-1} instead.`);if(!bt(e[1]))return t.error("invalid value");const r=e[1];let n=wt(r);const o=t.expectedType;return"array"!==n.kind||0!==n.N||!o||"array"!==o.kind||"number"==typeof o.N&&0!==o.N||(n=o),new xt(n,r)}evaluate(){return this.value}eachChild(){}outputDefined(){return!0}serialize(){return"array"===this.type.kind||"object"===this.type.kind?["literal",this.value]:this.value instanceof Ue?["rgba"].concat(this.value.toArray()):this.value instanceof gt?this.value.serialize():this.value}}var St=xt;var _t=class{constructor(e){this.name="ExpressionEvaluationError",this.message=e}toJSON(){return this.message}};const At={string:et,number:Ze,boolean:tt,object:nt};class Tt{constructor(e,t){this.type=e,this.args=t}static parse(e,t){if(e.length<2)return t.error("Expected at least one argument.");let r,n=1;const o=e[0];if("array"===o){let o,i;if(e.length>2){const r=e[1];if("string"!=typeof r||!(r in At)||"object"===r)return t.error('The item type argument of "array" must be one of string, number, boolean',1);o=At[r],n++}else o=ot;if(e.length>3){if(null!==e[2]&&("number"!=typeof e[2]||e[2]<0||e[2]!==Math.floor(e[2])))return t.error('The length argument to "array" must be a positive integer literal',2);i=e[2],n++}r=lt(o,i)}else r=At[o];const i=[];for(;ne.outputDefined()))}serialize(){const e=this.type,t=[e.kind];if("array"===e.kind){const r=e.itemType;if("string"===r.kind||"number"===r.kind||"boolean"===r.kind){t.push(r.kind);const n=e.N;("number"==typeof n||this.args.length>1)&&t.push(n)}}return t.concat(this.args.map((e=>e.serialize())))}}var Rt=Tt;class Ot{constructor(e){this.type=at,this.sections=e}static parse(e,t){if(e.length<2)return t.error("Expected at least one argument.");const r=e[1];if(!Array.isArray(r)&&"object"==typeof r)return t.error("First argument must be an image or text section.");const n=[];let o=!1;for(let r=1;r<=e.length-1;++r){const i=e[r];if(o&&"object"==typeof i&&!Array.isArray(i)){o=!1;let e=null;if(i["font-scale"]&&(e=t.parse(i["font-scale"],1,Ze),!e))return null;let r=null;if(i["text-font"]&&(r=t.parse(i["text-font"],1,lt(et)),!r))return null;let a=null;if(i["text-color"]&&(a=t.parse(i["text-color"],1,rt),!a))return null;const s=n[n.length-1];s.scale=e,s.font=r,s.textColor=a}else{const i=t.parse(e[r],1,ot);if(!i)return null;const a=i.type.kind;if("string"!==a&&"value"!==a&&"null"!==a&&"resolvedImage"!==a)return t.error("Formatted text type must be 'string', 'value', 'image' or 'null'.");o=!0,n.push({content:i,scale:null,font:null,textColor:null})}}return new Ot(n)}evaluate(e){return new gt(this.sections.map((t=>{const r=t.content.evaluate(e);return wt(r)===st?new mt("",r,null,null,null):new mt(Et(r),null,t.scale?t.scale.evaluate(e):null,t.font?t.font.evaluate(e).join(","):null,t.textColor?t.textColor.evaluate(e):null)})))}eachChild(e){for(const t of this.sections)e(t.content),t.scale&&e(t.scale),t.font&&e(t.font),t.textColor&&e(t.textColor)}outputDefined(){return!1}serialize(){const e=["format"];for(const t of this.sections){e.push(t.content.serialize());const r={};t.scale&&(r["font-scale"]=t.scale.serialize()),t.font&&(r["text-font"]=t.font.serialize()),t.textColor&&(r["text-color"]=t.textColor.serialize()),e.push(r)}return e}}class Ct{constructor(e){this.type=st,this.input=e}static parse(e,t){if(2!==e.length)return t.error("Expected two arguments.");const r=t.parse(e[1],1,et);return r?new Ct(r):t.error("No image name provided.")}evaluate(e){const t=this.input.evaluate(e),r=yt.fromString(t);return r&&e.availableImages&&(r.available=e.availableImages.indexOf(t)>-1),r}eachChild(e){e(this.input)}outputDefined(){return!1}serialize(){return["image",this.input.serialize()]}}const Nt={"to-boolean":tt,"to-color":rt,"to-number":Ze,"to-string":et};class Pt{constructor(e,t){this.type=e,this.args=t}static parse(e,t){if(e.length<2)return t.error("Expected at least one argument.");const r=e[0];if(("to-boolean"===r||"to-string"===r)&&2!==e.length)return t.error("Expected one argument.");const n=Nt[r],o=[];for(let r=1;r4?`Invalid rbga value ${JSON.stringify(t)}: expected an array containing either three or four numeric values.`:vt(t[0],t[1],t[2],t[3]),!r))return new Ue(t[0]/255,t[1]/255,t[2]/255,t[3])}throw new _t(r||`Could not parse color from value '${"string"==typeof t?t:String(JSON.stringify(t))}'`)}if("number"===this.type.kind){let t=null;for(const r of this.args){if(t=r.evaluate(e),null===t)return 0;const n=Number(t);if(!isNaN(n))return n}throw new _t(`Could not convert ${JSON.stringify(t)} to number.`)}return"formatted"===this.type.kind?gt.fromString(Et(this.args[0].evaluate(e))):"resolvedImage"===this.type.kind?yt.fromString(Et(this.args[0].evaluate(e))):Et(this.args[0].evaluate(e))}eachChild(e){this.args.forEach(e)}outputDefined(){return this.args.every((e=>e.outputDefined()))}serialize(){if("formatted"===this.type.kind)return new Ot([{content:this.args[0],scale:null,font:null,textColor:null}]).serialize();if("resolvedImage"===this.type.kind)return new Ct(this.args[0]).serialize();const e=[`to-${this.type.kind}`];return this.eachChild((t=>{e.push(t.serialize())})),e}}var Mt=Pt;const kt=["Unknown","Point","LineString","Polygon"];var It=class{constructor(){this.globals=null,this.feature=null,this.featureState=null,this.formattedSection=null,this._parseColorCache={},this.availableImages=null,this.canonical=null,this.featureTileCoord=null,this.featureDistanceData=null}id(){return this.feature&&void 0!==this.feature.id?this.feature.id:null}geometryType(){return this.feature?"number"==typeof this.feature.type?kt[this.feature.type]:this.feature.type:null}geometry(){return this.feature&&"geometry"in this.feature?this.feature.geometry:null}canonicalID(){return this.canonical}properties(){return this.feature&&this.feature.properties||{}}distanceFromCenter(){if(this.featureTileCoord&&this.featureDistanceData){const e=this.featureDistanceData.center,t=this.featureDistanceData.scale,{x:r,y:n}=this.featureTileCoord,o=r*t-e[0],i=n*t-e[1];return this.featureDistanceData.bearing[0]*o+this.featureDistanceData.bearing[1]*i}return 0}parseColor(e){let t=this._parseColorCache[e];return t||(t=this._parseColorCache[e]=Ue.parse(e)),t}};class Lt{constructor(e,t,r,n){this.name=e,this.type=t,this._evaluate=r,this.args=n}evaluate(e){return this._evaluate(e,this.args)}eachChild(e){this.args.forEach(e)}outputDefined(){return!1}serialize(){return[this.name].concat(this.args.map((e=>e.serialize())))}static parse(e,t){const r=e[0],n=Lt.definitions[r];if(!n)return t.error(`Unknown expression "${r}". If you wanted a literal array, use ["literal", [...]].`,0);const o=Array.isArray(n)?n[0]:n.type,i=Array.isArray(n)?[[n[1],n[2]]]:n.overloads,a=i.filter((([t])=>!Array.isArray(t)||t.length===e.length-1));let s=null;for(const[n,i]of a){s=new ur(t.registry,t.path,null,t.scope);const a=[];let l=!1;for(let t=1;t{return t=e,Array.isArray(t)?`(${t.map(ut).join(", ")})`:`(${ut(t.type)}...)`;var t})).join(" | "),n=[];for(let r=1;r=t[2])&&(!(e[1]<=t[1])&&!(e[3]>=t[3])))}function Gt(e,t){const r=(180+e[0])/360;const n=(o=e[1],(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+o*Math.PI/360)))/360);var o;const i=Math.pow(2,t.z);return[Math.round(r*i*Ut),Math.round(n*i*Ut)]}function Ft(e,t,r){const n=e[0]-t[0],o=e[1]-t[1],i=e[0]-r[0],a=e[1]-r[1];return n*a-i*o==0&&n*i<=0&&o*a<=0}function Vt(e,t){let r=!1;for(let a=0,s=t.length;an[1]!=i[1]>n[1]&&n[0]<(i[0]-o[0])*(n[1]-o[1])/(i[1]-o[1])+o[0]&&(r=!r)}}var n,o,i;return r}function Ht(e,t){for(let r=0;r0&&p<0||c<0&&p>0}function $t(e,t,r,n){const o=[t[0]-e[0],t[1]-e[1]],i=[n[0]-r[0],n[1]-r[1]];return 0!=(a=i)[0]*(s=o)[1]-a[1]*s[0]&&!(!Bt(e,t,r,n)||!Bt(r,n,e,t));var a,s}function Wt(e,t,r){for(const n of r)for(let r=0;rr[2]){const t=.5*n;let o=e[0]-r[0]>t?-n:r[0]-e[0]>t?n:0;0===o&&(o=e[0]-r[2]>t?-n:r[2]-e[0]>t?n:0),e[0]+=o}jt(t,e)}function Zt(e,t,r,n){const o=Math.pow(2,n.z)*Ut,i=[n.x*Ut,n.y*Ut],a=[];if(!e)return a;for(const n of e)for(const e of n){const n=[e.x+i[0],e.y+i[1]];Qt(n,t,r,o),a.push(n)}return a}function er(e,t,r,n){const o=Math.pow(2,n.z)*Ut,i=[n.x*Ut,n.y*Ut],a=[];if(!e)return a;for(const r of e){const e=[];for(const n of r){const r=[n.x+i[0],n.y+i[1]];jt(t,r),e.push(r)}a.push(e)}if(t[2]-t[0]<=o/2){(s=t)[0]=s[1]=1/0,s[2]=s[3]=-1/0;for(const e of a)for(const n of e)Qt(n,t,r,o)}var s;return a}class tr{constructor(e,t){this.type=tt,this.geojson=e,this.geometries=t}static parse(e,t){if(2!==e.length)return t.error(`'within' expression requires exactly one argument, but found ${e.length-1} instead.`);if(bt(e[1])){const t=e[1];if("FeatureCollection"===t.type)for(let e=0;e{t&&!nr(e)&&(t=!1)})),t}function or(e){if(e instanceof Dt&&"feature-state"===e.name)return!1;let t=!0;return e.eachChild((e=>{t&&!or(e)&&(t=!1)})),t}function ir(e,t){if(e instanceof Dt&&t.indexOf(e.name)>=0)return!1;let r=!0;return e.eachChild((e=>{r&&!ir(e,t)&&(r=!1)})),r}class ar{constructor(e,t){this.type=t.type,this.name=e,this.boundExpression=t}static parse(e,t){if(2!==e.length||"string"!=typeof e[1])return t.error("'var' expression requires exactly one string literal argument.");const r=e[1];return t.scope.has(r)?new ar(r,t.scope.get(r)):t.error(`Unknown variable "${r}". Make sure "${r}" has been bound in an enclosing "let" expression before using it.`,1)}evaluate(e){return this.boundExpression.evaluate(e)}eachChild(){}outputDefined(){return!1}serialize(){return["var",this.name]}}var sr=ar;class lr{constructor(e,t=[],r,n=new Ke,o=[]){this.registry=e,this.path=t,this.key=t.map((e=>`[${e}]`)).join(""),this.scope=n,this.errors=o,this.expectedType=r}parse(e,t,r,n,o={}){return t?this.concat(t,r,n)._parse(e,o):this._parse(e,o)}_parse(e,t){function r(e,t,r){return"assert"===r?new Rt(t,[e]):"coerce"===r?new Mt(t,[e]):e}if(null!==e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e||(e=["literal",e]),Array.isArray(e)){if(0===e.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].');const n=e[0];if("string"!=typeof n)return this.error(`Expression name must be a string, but found ${typeof n} instead. If you wanted a literal array, use ["literal", [...]].`,0),null;const o=this.registry[n];if(o){let n=o.parse(e,this);if(!n)return null;if(this.expectedType){const e=this.expectedType,o=n.type;if("string"!==e.kind&&"number"!==e.kind&&"boolean"!==e.kind&&"object"!==e.kind&&"array"!==e.kind||"value"!==o.kind)if("color"!==e.kind&&"formatted"!==e.kind&&"resolvedImage"!==e.kind||"value"!==o.kind&&"string"!==o.kind){if(this.checkSubtype(e,o))return null}else n=r(n,e,t.typeAnnotation||"coerce");else n=r(n,e,t.typeAnnotation||"assert")}if(!(n instanceof St)&&"resolvedImage"!==n.type.kind&&cr(n)){const e=new It;try{n=new St(n.type,n.evaluate(e))}catch(e){return this.error(e.message),null}}return n}return this.error(`Unknown expression "${n}". If you wanted a literal array, use ["literal", [...]].`,0)}return void 0===e?this.error("'undefined' value invalid. Use null instead."):"object"==typeof e?this.error('Bare objects invalid. Use ["literal", {...}] instead.'):this.error(`Expected an array, but found ${typeof e} instead.`)}concat(e,t,r){const n="number"==typeof e?this.path.concat(e):this.path,o=r?this.scope.concat(r):this.scope;return new lr(this.registry,n,t||null,o,this.errors)}error(e,...t){const r=`${this.key}${t.map((e=>`[${e}]`)).join("")}`;this.errors.push(new Xe(r,e))}checkSubtype(e,t){const r=pt(e,t);return r&&this.error(r),r}}var ur=lr;function cr(e){if(e instanceof sr)return cr(e.boundExpression);if(e instanceof Dt&&"error"===e.name)return!1;if(e instanceof qt)return!1;if(e instanceof rr)return!1;const t=e instanceof Mt||e instanceof Rt;let r=!0;return e.eachChild((e=>{r=t?r&&cr(e):r&&e instanceof St})),!!r&&(nr(e)&&ir(e,["zoom","heatmap-density","line-progress","sky-radial-progress","accumulated","is-supported-script","pitch","distance-from-center"]))}function pr(e,t){const r=e.length-1;let n,o,i=0,a=r,s=0;for(;i<=a;)if(s=Math.floor((i+a)/2),n=e[s],o=e[s+1],n<=t){if(s===r||tt))throw new _t("Input is not a number.");a=s-1}return 0}class fr{constructor(e,t,r){this.type=e,this.input=t,this.labels=[],this.outputs=[];for(const[e,t]of r)this.labels.push(e),this.outputs.push(t)}static parse(e,t){if(e.length-1<4)return t.error(`Expected at least 4 arguments, but found only ${e.length-1}.`);if((e.length-1)%2!=0)return t.error("Expected an even number of arguments.");const r=t.parse(e[1],1,Ze);if(!r)return null;const n=[];let o=null;t.expectedType&&"value"!==t.expectedType.kind&&(o=t.expectedType);for(let r=1;r=i)return t.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.',s);const u=t.parse(a,l,o);if(!u)return null;o=o||u.type,n.push([i,u])}return new fr(o,r,n)}evaluate(e){const t=this.labels,r=this.outputs;if(1===t.length)return r[0].evaluate(e);const n=this.input.evaluate(e);if(n<=t[0])return r[0].evaluate(e);const o=t.length;if(n>=t[o-1])return r[o-1].evaluate(e);return r[pr(t,n)].evaluate(e)}eachChild(e){e(this.input);for(const t of this.outputs)e(t)}outputDefined(){return this.outputs.every((e=>e.outputDefined()))}serialize(){const e=["step",this.input.serialize()];for(let t=0;t0&&e.push(this.labels[t]),e.push(this.outputs[t].serialize());return e}}var hr=fr,dr=mr;function mr(e,t,r,n){this.cx=3*e,this.bx=3*(r-e)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*t,this.by=3*(n-t)-this.cy,this.ay=1-this.cy-this.by,this.p1x=e,this.p1y=n,this.p2x=r,this.p2y=n}mr.prototype.sampleCurveX=function(e){return((this.ax*e+this.bx)*e+this.cx)*e},mr.prototype.sampleCurveY=function(e){return((this.ay*e+this.by)*e+this.cy)*e},mr.prototype.sampleCurveDerivativeX=function(e){return(3*this.ax*e+2*this.bx)*e+this.cx},mr.prototype.solveCurveX=function(e,t){var r,n,o,i,a;for(void 0===t&&(t=1e-6),o=e,a=0;a<8;a++){if(i=this.sampleCurveX(o)-e,Math.abs(i)(n=1))return n;for(;ri?r=o:n=o,o=.5*(n-r)+r}return o},mr.prototype.solve=function(e,t){return this.sampleCurveY(this.solveCurveX(e,t))};var gr=Ce(dr);function yr(e,t,r){return e*(1-r)+t*r}var vr=Object.freeze({__proto__:null,number:yr,color:function(e,t,r){return new Ue(yr(e.r,t.r,r),yr(e.g,t.g,r),yr(e.b,t.b,r),yr(e.a,t.a,r))},array:function(e,t,r){return e.map(((e,n)=>yr(e,t[n],r)))}});const br=.95047,wr=1.08883,Er=4/29,xr=6/29,Sr=3*xr*xr,_r=xr*xr*xr,Ar=Math.PI/180,Tr=180/Math.PI;function Rr(e){return e>_r?Math.pow(e,1/3):e/Sr+Er}function Or(e){return e>xr?e*e*e:Sr*(e-Er)}function Cr(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function Nr(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function Pr(e){const t=Nr(e.r),r=Nr(e.g),n=Nr(e.b),o=Rr((.4124564*t+.3575761*r+.1804375*n)/br),i=Rr((.2126729*t+.7151522*r+.072175*n)/1);return{l:116*i-16,a:500*(o-i),b:200*(i-Rr((.0193339*t+.119192*r+.9503041*n)/wr)),alpha:e.a}}function Mr(e){let t=(e.l+16)/116,r=isNaN(e.a)?t:t+e.a/500,n=isNaN(e.b)?t:t-e.b/200;return t=1*Or(t),r=br*Or(r),n=wr*Or(n),new Ue(Cr(3.2404542*r-1.5371385*t-.4985314*n),Cr(-.969266*r+1.8760108*t+.041556*n),Cr(.0556434*r-.2040259*t+1.0572252*n),e.alpha)}function kr(e,t,r){const n=t-e;return e+r*(n>180||n<-180?n-360*Math.round(n/360):n)}const Ir={forward:Pr,reverse:Mr,interpolate:function(e,t,r){return{l:yr(e.l,t.l,r),a:yr(e.a,t.a,r),b:yr(e.b,t.b,r),alpha:yr(e.alpha,t.alpha,r)}}},Lr={forward:function(e){const{l:t,a:r,b:n}=Pr(e),o=Math.atan2(n,r)*Tr;return{h:o<0?o+360:o,c:Math.sqrt(r*r+n*n),l:t,alpha:e.a}},reverse:function(e){const t=e.h*Ar,r=e.c;return Mr({l:e.l,a:Math.cos(t)*r,b:Math.sin(t)*r,alpha:e.alpha})},interpolate:function(e,t,r){return{h:kr(e.h,t.h,r),c:yr(e.c,t.c,r),l:yr(e.l,t.l,r),alpha:yr(e.alpha,t.alpha,r)}}};class Dr{constructor(e,t,r,n,o){this.type=e,this.operator=t,this.interpolation=r,this.input=n,this.labels=[],this.outputs=[];for(const[e,t]of o)this.labels.push(e),this.outputs.push(t)}static interpolationFactor(e,t,r,n){let o=0;if("exponential"===e.name)o=qr(t,e.base,r,n);else if("linear"===e.name)o=qr(t,1,r,n);else if("cubic-bezier"===e.name){const i=e.controlPoints;o=new gr(i[0],i[1],i[2],i[3]).solve(qr(t,1,r,n))}return o}static parse(e,t){let[r,n,o,...i]=e;if(!Array.isArray(n)||0===n.length)return t.error("Expected an interpolation type expression.",1);if("linear"===n[0])n={name:"linear"};else if("exponential"===n[0]){const e=n[1];if("number"!=typeof e)return t.error("Exponential interpolation requires a numeric base.",1,1);n={name:"exponential",base:e}}else{if("cubic-bezier"!==n[0])return t.error(`Unknown interpolation type ${String(n[0])}`,1,0);{const e=n.slice(1);if(4!==e.length||e.some((e=>"number"!=typeof e||e<0||e>1)))return t.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.",1);n={name:"cubic-bezier",controlPoints:e}}}if(e.length-1<4)return t.error(`Expected at least 4 arguments, but found only ${e.length-1}.`);if((e.length-1)%2!=0)return t.error("Expected an even number of arguments.");if(o=t.parse(o,2,Ze),!o)return null;const a=[];let s=null;"interpolate-hcl"===r||"interpolate-lab"===r?s=rt:t.expectedType&&"value"!==t.expectedType.kind&&(s=t.expectedType);for(let e=0;e=r)return t.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.',o);const u=t.parse(n,l,s);if(!u)return null;s=s||u.type,a.push([r,u])}return"number"===s.kind||"color"===s.kind||"array"===s.kind&&"number"===s.itemType.kind&&"number"==typeof s.N?new Dr(s,r,n,o,a):t.error(`Type ${ut(s)} is not interpolatable.`)}evaluate(e){const t=this.labels,r=this.outputs;if(1===t.length)return r[0].evaluate(e);const n=this.input.evaluate(e);if(n<=t[0])return r[0].evaluate(e);const o=t.length;if(n>=t[o-1])return r[o-1].evaluate(e);const i=pr(t,n),a=t[i],s=t[i+1],l=Dr.interpolationFactor(this.interpolation,n,a,s),u=r[i].evaluate(e),c=r[i+1].evaluate(e);return"interpolate"===this.operator?vr[this.type.kind.toLowerCase()](u,c,l):"interpolate-hcl"===this.operator?Lr.reverse(Lr.interpolate(Lr.forward(u),Lr.forward(c),l)):Ir.reverse(Ir.interpolate(Ir.forward(u),Ir.forward(c),l))}eachChild(e){e(this.input);for(const t of this.outputs)e(t)}outputDefined(){return this.outputs.every((e=>e.outputDefined()))}serialize(){let e;e="linear"===this.interpolation.name?["linear"]:"exponential"===this.interpolation.name?1===this.interpolation.base?["linear"]:["exponential",this.interpolation.base]:["cubic-bezier"].concat(this.interpolation.controlPoints);const t=[this.operator,e,this.input.serialize()];for(let e=0;ept(n,e.type)));return new jr(i?ot:r,o)}evaluate(e){let t,r=null,n=0;for(const o of this.args){if(n++,r=o.evaluate(e),r&&r instanceof yt&&!r.available&&(t||(t=r),r=null,n===this.args.length))return t;if(null!==r)break}return r}eachChild(e){this.args.forEach(e)}outputDefined(){return this.args.every((e=>e.outputDefined()))}serialize(){const e=["coalesce"];return this.eachChild((t=>{e.push(t.serialize())})),e}}var zr=jr;class Gr{constructor(e,t){this.type=t.type,this.bindings=[].concat(e),this.result=t}evaluate(e){return this.result.evaluate(e)}eachChild(e){for(const t of this.bindings)e(t[1]);e(this.result)}static parse(e,t){if(e.length<4)return t.error(`Expected at least 3 arguments, but found ${e.length-1} instead.`);const r=[];for(let n=1;n=r.length)throw new _t(`Array index out of bounds: ${t} > ${r.length-1}.`);if(t!==Math.floor(t))throw new _t(`Array index must be an integer, but found ${t} instead.`);return r[t]}eachChild(e){e(this.index),e(this.input)}outputDefined(){return!1}serialize(){return["at",this.index.serialize(),this.input.serialize()]}}var Hr=Vr;class Br{constructor(e,t){this.type=tt,this.needle=e,this.haystack=t}static parse(e,t){if(3!==e.length)return t.error(`Expected 2 arguments, but found ${e.length-1} instead.`);const r=t.parse(e[1],1,ot),n=t.parse(e[2],2,ot);return r&&n?ft(r.type,[tt,et,Ze,Qe,ot])?new Br(r,n):t.error(`Expected first argument to be of type boolean, string, number or null, but found ${ut(r.type)} instead`):null}evaluate(e){const t=this.needle.evaluate(e),r=this.haystack.evaluate(e);if(null==r)return!1;if(!ht(t,["boolean","string","number","null"]))throw new _t(`Expected first argument to be of type boolean, string, number or null, but found ${ut(wt(t))} instead.`);if(!ht(r,["string","array"]))throw new _t(`Expected second argument to be of type array or string, but found ${ut(wt(r))} instead.`);return r.indexOf(t)>=0}eachChild(e){e(this.needle),e(this.haystack)}outputDefined(){return!0}serialize(){return["in",this.needle.serialize(),this.haystack.serialize()]}}var $r=Br;class Wr{constructor(e,t,r){this.type=Ze,this.needle=e,this.haystack=t,this.fromIndex=r}static parse(e,t){if(e.length<=2||e.length>=5)return t.error(`Expected 3 or 4 arguments, but found ${e.length-1} instead.`);const r=t.parse(e[1],1,ot),n=t.parse(e[2],2,ot);if(!r||!n)return null;if(!ft(r.type,[tt,et,Ze,Qe,ot]))return t.error(`Expected first argument to be of type boolean, string, number or null, but found ${ut(r.type)} instead`);if(4===e.length){const o=t.parse(e[3],3,Ze);return o?new Wr(r,n,o):null}return new Wr(r,n)}evaluate(e){const t=this.needle.evaluate(e),r=this.haystack.evaluate(e);if(!ht(t,["boolean","string","number","null"]))throw new _t(`Expected first argument to be of type boolean, string, number or null, but found ${ut(wt(t))} instead.`);if(!ht(r,["string","array"]))throw new _t(`Expected second argument to be of type array or string, but found ${ut(wt(r))} instead.`);if(this.fromIndex){const n=this.fromIndex.evaluate(e);return r.indexOf(t,n)}return r.indexOf(t)}eachChild(e){e(this.needle),e(this.haystack),this.fromIndex&&e(this.fromIndex)}outputDefined(){return!1}serialize(){if(null!=this.fromIndex&&void 0!==this.fromIndex){const e=this.fromIndex.serialize();return["index-of",this.needle.serialize(),this.haystack.serialize(),e]}return["index-of",this.needle.serialize(),this.haystack.serialize()]}}var Yr=Wr;class Xr{constructor(e,t,r,n,o,i){this.inputType=e,this.type=t,this.input=r,this.cases=n,this.outputs=o,this.otherwise=i}static parse(e,t){if(e.length<5)return t.error(`Expected at least 4 arguments, but found only ${e.length-1}.`);if(e.length%2!=1)return t.error("Expected an even number of arguments.");let r,n;t.expectedType&&"value"!==t.expectedType.kind&&(n=t.expectedType);const o={},i=[];for(let a=2;aNumber.MAX_SAFE_INTEGER)return u.error(`Branch labels must be integers no larger than ${Number.MAX_SAFE_INTEGER}.`);if("number"==typeof e&&Math.floor(e)!==e)return u.error("Numeric branch labels must be integer values.");if(r){if(u.checkSubtype(r,wt(e)))return null}else r=wt(e);if(void 0!==o[String(e)])return u.error("Branch labels must be unique.");o[String(e)]=i.length}const c=t.parse(l,a,n);if(!c)return null;n=n||c.type,i.push(c)}const a=t.parse(e[1],1,ot);if(!a)return null;const s=t.parse(e[e.length-1],e.length-1,n);return s?"value"!==a.type.kind&&t.concat(1).checkSubtype(r,a.type)?null:new Xr(r,n,a,o,i,s):null}evaluate(e){const t=this.input.evaluate(e);return(wt(t)===this.inputType&&this.outputs[this.cases[t]]||this.otherwise).evaluate(e)}eachChild(e){e(this.input),this.outputs.forEach(e),e(this.otherwise)}outputDefined(){return this.outputs.every((e=>e.outputDefined()))&&this.otherwise.outputDefined()}serialize(){const e=["match",this.input.serialize()],t=Object.keys(this.cases).sort(),r=[],n={};for(const e of t){const t=n[this.cases[e]];void 0===t?(n[this.cases[e]]=r.length,r.push([this.cases[e],[e]])):r[t][1].push(e)}const o=e=>"number"===this.inputType.kind?Number(e):e;for(const[t,n]of r)1===n.length?e.push(o(n[0])):e.push(n.map(o)),e.push(this.outputs[t].serialize());return e.push(this.otherwise.serialize()),e}}var Jr=Xr;class Kr{constructor(e,t,r){this.type=e,this.branches=t,this.otherwise=r}static parse(e,t){if(e.length<4)return t.error(`Expected at least 3 arguments, but found only ${e.length-1}.`);if(e.length%2!=0)return t.error("Expected an odd number of arguments.");let r;t.expectedType&&"value"!==t.expectedType.kind&&(r=t.expectedType);const n=[];for(let o=1;ot.outputDefined()))&&this.otherwise.outputDefined()}serialize(){const e=["case"];return this.eachChild((t=>{e.push(t.serialize())})),e}}var Qr=Kr;class Zr{constructor(e,t,r,n){this.type=e,this.input=t,this.beginIndex=r,this.endIndex=n}static parse(e,t){if(e.length<=2||e.length>=5)return t.error(`Expected 3 or 4 arguments, but found ${e.length-1} instead.`);const r=t.parse(e[1],1,ot),n=t.parse(e[2],2,Ze);if(!r||!n)return null;if(!ft(r.type,[lt(ot),et,ot]))return t.error(`Expected first argument to be of type array or string, but found ${ut(r.type)} instead`);if(4===e.length){const o=t.parse(e[3],3,Ze);return o?new Zr(r.type,r,n,o):null}return new Zr(r.type,r,n)}evaluate(e){const t=this.input.evaluate(e),r=this.beginIndex.evaluate(e);if(!ht(t,["string","array"]))throw new _t(`Expected first argument to be of type array or string, but found ${ut(wt(t))} instead.`);if(this.endIndex){const n=this.endIndex.evaluate(e);return t.slice(r,n)}return t.slice(r)}eachChild(e){e(this.input),e(this.beginIndex),this.endIndex&&e(this.endIndex)}outputDefined(){return!1}serialize(){if(null!=this.endIndex&&void 0!==this.endIndex){const e=this.endIndex.serialize();return["slice",this.input.serialize(),this.beginIndex.serialize(),e]}return["slice",this.input.serialize(),this.beginIndex.serialize()]}}var en=Zr;function tn(e,t){return"=="===e||"!="===e?"boolean"===t.kind||"string"===t.kind||"number"===t.kind||"null"===t.kind||"value"===t.kind:"string"===t.kind||"number"===t.kind||"value"===t.kind}function rn(e,t,r,n){return 0===n.compare(t,r)}function nn(e,t,r){const n="=="!==e&&"!="!==e;return class o{constructor(e,t,r){this.type=tt,this.lhs=e,this.rhs=t,this.collator=r,this.hasUntypedArgument="value"===e.type.kind||"value"===t.type.kind}static parse(e,t){if(3!==e.length&&4!==e.length)return t.error("Expected two or three arguments.");const r=e[0];let i=t.parse(e[1],1,ot);if(!i)return null;if(!tn(r,i.type))return t.concat(1).error(`"${r}" comparisons are not supported for type '${ut(i.type)}'.`);let a=t.parse(e[2],2,ot);if(!a)return null;if(!tn(r,a.type))return t.concat(2).error(`"${r}" comparisons are not supported for type '${ut(a.type)}'.`);if(i.type.kind!==a.type.kind&&"value"!==i.type.kind&&"value"!==a.type.kind)return t.error(`Cannot compare types '${ut(i.type)}' and '${ut(a.type)}'.`);n&&("value"===i.type.kind&&"value"!==a.type.kind?i=new Rt(a.type,[i]):"value"!==i.type.kind&&"value"===a.type.kind&&(a=new Rt(i.type,[a])));let s=null;if(4===e.length){if("string"!==i.type.kind&&"string"!==a.type.kind&&"value"!==i.type.kind&&"value"!==a.type.kind)return t.error("Cannot use collator to compare non-string types.");if(s=t.parse(e[3],3,it),!s)return null}return new o(i,a,s)}evaluate(o){const i=this.lhs.evaluate(o),a=this.rhs.evaluate(o);if(n&&this.hasUntypedArgument){const t=wt(i),r=wt(a);if(t.kind!==r.kind||"string"!==t.kind&&"number"!==t.kind)throw new _t(`Expected arguments for "${e}" to be (string, string) or (number, number), but found (${t.kind}, ${r.kind}) instead.`)}if(this.collator&&!n&&this.hasUntypedArgument){const e=wt(i),r=wt(a);if("string"!==e.kind||"string"!==r.kind)return t(o,i,a)}return this.collator?r(o,i,a,this.collator.evaluate(o)):t(o,i,a)}eachChild(e){e(this.lhs),e(this.rhs),this.collator&&e(this.collator)}outputDefined(){return!0}serialize(){const t=[e];return this.eachChild((e=>{t.push(e.serialize())})),t}}}const on=nn("==",(function(e,t,r){return t===r}),rn),an=nn("!=",(function(e,t,r){return t!==r}),(function(e,t,r,n){return!rn(0,t,r,n)})),sn=nn("<",(function(e,t,r){return t",(function(e,t,r){return t>r}),(function(e,t,r,n){return n.compare(t,r)>0})),un=nn("<=",(function(e,t,r){return t<=r}),(function(e,t,r,n){return n.compare(t,r)<=0})),cn=nn(">=",(function(e,t,r){return t>=r}),(function(e,t,r,n){return n.compare(t,r)>=0}));class pn{constructor(e,t,r,n,o,i){this.type=et,this.number=e,this.locale=t,this.currency=r,this.unit=n,this.minFractionDigits=o,this.maxFractionDigits=i}static parse(e,t){if(3!==e.length)return t.error("Expected two arguments.");const r=t.parse(e[1],1,Ze);if(!r)return null;const n=e[2];if("object"!=typeof n||Array.isArray(n))return t.error("NumberFormat options argument must be an object.");let o=null;if(n.locale&&(o=t.parse(n.locale,1,et),!o))return null;let i=null;if(n.currency&&(i=t.parse(n.currency,1,et),!i))return null;let a=null;if(n.unit&&(a=t.parse(n.unit,1,et),!a))return null;let s=null;if(n["min-fraction-digits"]&&(s=t.parse(n["min-fraction-digits"],1,Ze),!s))return null;let l=null;return n["max-fraction-digits"]&&(l=t.parse(n["max-fraction-digits"],1,Ze),!l)?null:new pn(r,o,i,a,s,l)}evaluate(e){return new Intl.NumberFormat(this.locale?this.locale.evaluate(e):[],{style:(this.currency?"currency":this.unit&&"unit")||"decimal",currency:this.currency?this.currency.evaluate(e):void 0,unit:this.unit?this.unit.evaluate(e):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(e):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(e):void 0}).format(this.number.evaluate(e))}eachChild(e){e(this.number),this.locale&&e(this.locale),this.currency&&e(this.currency),this.unit&&e(this.unit),this.minFractionDigits&&e(this.minFractionDigits),this.maxFractionDigits&&e(this.maxFractionDigits)}outputDefined(){return!1}serialize(){const e={};return this.locale&&(e.locale=this.locale.serialize()),this.currency&&(e.currency=this.currency.serialize()),this.unit&&(e.unit=this.unit.serialize()),this.minFractionDigits&&(e["min-fraction-digits"]=this.minFractionDigits.serialize()),this.maxFractionDigits&&(e["max-fraction-digits"]=this.maxFractionDigits.serialize()),["number-format",this.number.serialize(),e]}}class fn{constructor(e){this.type=Ze,this.input=e}static parse(e,t){if(2!==e.length)return t.error(`Expected 1 argument, but found ${e.length-1} instead.`);const r=t.parse(e[1],1);return r?"array"!==r.type.kind&&"string"!==r.type.kind&&"value"!==r.type.kind?t.error(`Expected argument of type string or array, but found ${ut(r.type)} instead.`):new fn(r):null}evaluate(e){const t=this.input.evaluate(e);if("string"==typeof t)return t.length;if(Array.isArray(t))return t.length;throw new _t(`Expected value to be of type string or array, but found ${ut(wt(t))} instead.`)}eachChild(e){e(this.input)}outputDefined(){return!1}serialize(){const e=["length"];return this.eachChild((t=>{e.push(t.serialize())})),e}}const hn={"==":on,"!=":an,">":ln,"<":sn,">=":cn,"<=":un,array:Rt,at:Hr,boolean:Rt,case:Qr,coalesce:zr,collator:qt,format:Ot,image:Ct,in:$r,"index-of":Yr,interpolate:Ur,"interpolate-hcl":Ur,"interpolate-lab":Ur,length:fn,let:Fr,literal:St,match:Jr,number:Rt,"number-format":pn,object:Rt,slice:en,step:hr,string:Rt,"to-boolean":Mt,"to-color":Mt,"to-number":Mt,"to-string":Mt,var:sr,within:rr};function dn(e,[t,r,n,o]){t=t.evaluate(e),r=r.evaluate(e),n=n.evaluate(e);const i=o?o.evaluate(e):1,a=vt(t,r,n,i);if(a)throw new _t(a);return new Ue(t/255*i,r/255*i,n/255*i,i)}function mn(e,t){return e in t}function gn(e,t){const r=t[e];return void 0===r?null:r}function yn(e){return{type:e}}Dt.register(hn,{error:[{kind:"error"},[et],(e,[t])=>{throw new _t(t.evaluate(e))}],typeof:[et,[ot],(e,[t])=>ut(wt(t.evaluate(e)))],"to-rgba":[lt(Ze,4),[rt],(e,[t])=>t.evaluate(e).toArray()],rgb:[rt,[Ze,Ze,Ze],dn],rgba:[rt,[Ze,Ze,Ze,Ze],dn],has:{type:tt,overloads:[[[et],(e,[t])=>mn(t.evaluate(e),e.properties())],[[et,nt],(e,[t,r])=>mn(t.evaluate(e),r.evaluate(e))]]},get:{type:ot,overloads:[[[et],(e,[t])=>gn(t.evaluate(e),e.properties())],[[et,nt],(e,[t,r])=>gn(t.evaluate(e),r.evaluate(e))]]},"feature-state":[ot,[et],(e,[t])=>gn(t.evaluate(e),e.featureState||{})],properties:[nt,[],e=>e.properties()],"geometry-type":[et,[],e=>e.geometryType()],id:[ot,[],e=>e.id()],zoom:[Ze,[],e=>e.globals.zoom],pitch:[Ze,[],e=>e.globals.pitch||0],"distance-from-center":[Ze,[],e=>e.distanceFromCenter()],"heatmap-density":[Ze,[],e=>e.globals.heatmapDensity||0],"line-progress":[Ze,[],e=>e.globals.lineProgress||0],"sky-radial-progress":[Ze,[],e=>e.globals.skyRadialProgress||0],accumulated:[ot,[],e=>void 0===e.globals.accumulated?null:e.globals.accumulated],"+":[Ze,yn(Ze),(e,t)=>{let r=0;for(const n of t)r+=n.evaluate(e);return r}],"*":[Ze,yn(Ze),(e,t)=>{let r=1;for(const n of t)r*=n.evaluate(e);return r}],"-":{type:Ze,overloads:[[[Ze,Ze],(e,[t,r])=>t.evaluate(e)-r.evaluate(e)],[[Ze],(e,[t])=>-t.evaluate(e)]]},"/":[Ze,[Ze,Ze],(e,[t,r])=>t.evaluate(e)/r.evaluate(e)],"%":[Ze,[Ze,Ze],(e,[t,r])=>t.evaluate(e)%r.evaluate(e)],ln2:[Ze,[],()=>Math.LN2],pi:[Ze,[],()=>Math.PI],e:[Ze,[],()=>Math.E],"^":[Ze,[Ze,Ze],(e,[t,r])=>Math.pow(t.evaluate(e),r.evaluate(e))],sqrt:[Ze,[Ze],(e,[t])=>Math.sqrt(t.evaluate(e))],log10:[Ze,[Ze],(e,[t])=>Math.log(t.evaluate(e))/Math.LN10],ln:[Ze,[Ze],(e,[t])=>Math.log(t.evaluate(e))],log2:[Ze,[Ze],(e,[t])=>Math.log(t.evaluate(e))/Math.LN2],sin:[Ze,[Ze],(e,[t])=>Math.sin(t.evaluate(e))],cos:[Ze,[Ze],(e,[t])=>Math.cos(t.evaluate(e))],tan:[Ze,[Ze],(e,[t])=>Math.tan(t.evaluate(e))],asin:[Ze,[Ze],(e,[t])=>Math.asin(t.evaluate(e))],acos:[Ze,[Ze],(e,[t])=>Math.acos(t.evaluate(e))],atan:[Ze,[Ze],(e,[t])=>Math.atan(t.evaluate(e))],min:[Ze,yn(Ze),(e,t)=>Math.min(...t.map((t=>t.evaluate(e))))],max:[Ze,yn(Ze),(e,t)=>Math.max(...t.map((t=>t.evaluate(e))))],abs:[Ze,[Ze],(e,[t])=>Math.abs(t.evaluate(e))],round:[Ze,[Ze],(e,[t])=>{const r=t.evaluate(e);return r<0?-Math.round(-r):Math.round(r)}],floor:[Ze,[Ze],(e,[t])=>Math.floor(t.evaluate(e))],ceil:[Ze,[Ze],(e,[t])=>Math.ceil(t.evaluate(e))],"filter-==":[tt,[et,ot],(e,[t,r])=>e.properties()[t.value]===r.value],"filter-id-==":[tt,[ot],(e,[t])=>e.id()===t.value],"filter-type-==":[tt,[et],(e,[t])=>e.geometryType()===t.value],"filter-<":[tt,[et,ot],(e,[t,r])=>{const n=e.properties()[t.value],o=r.value;return typeof n==typeof o&&n{const r=e.id(),n=t.value;return typeof r==typeof n&&r":[tt,[et,ot],(e,[t,r])=>{const n=e.properties()[t.value],o=r.value;return typeof n==typeof o&&n>o}],"filter-id->":[tt,[ot],(e,[t])=>{const r=e.id(),n=t.value;return typeof r==typeof n&&r>n}],"filter-<=":[tt,[et,ot],(e,[t,r])=>{const n=e.properties()[t.value],o=r.value;return typeof n==typeof o&&n<=o}],"filter-id-<=":[tt,[ot],(e,[t])=>{const r=e.id(),n=t.value;return typeof r==typeof n&&r<=n}],"filter->=":[tt,[et,ot],(e,[t,r])=>{const n=e.properties()[t.value],o=r.value;return typeof n==typeof o&&n>=o}],"filter-id->=":[tt,[ot],(e,[t])=>{const r=e.id(),n=t.value;return typeof r==typeof n&&r>=n}],"filter-has":[tt,[ot],(e,[t])=>t.value in e.properties()],"filter-has-id":[tt,[],e=>null!==e.id()&&void 0!==e.id()],"filter-type-in":[tt,[lt(et)],(e,[t])=>t.value.indexOf(e.geometryType())>=0],"filter-id-in":[tt,[lt(ot)],(e,[t])=>t.value.indexOf(e.id())>=0],"filter-in-small":[tt,[et,lt(ot)],(e,[t,r])=>r.value.indexOf(e.properties()[t.value])>=0],"filter-in-large":[tt,[et,lt(ot)],(e,[t,r])=>function(e,t,r,n){for(;r<=n;){const o=r+n>>1;if(t[o]===e)return!0;t[o]>e?n=o-1:r=o+1}return!1}(e.properties()[t.value],r.value,0,r.value.length-1)],all:{type:tt,overloads:[[[tt,tt],(e,[t,r])=>t.evaluate(e)&&r.evaluate(e)],[yn(tt),(e,t)=>{for(const r of t)if(!r.evaluate(e))return!1;return!0}]]},any:{type:tt,overloads:[[[tt,tt],(e,[t,r])=>t.evaluate(e)||r.evaluate(e)],[yn(tt),(e,t)=>{for(const r of t)if(r.evaluate(e))return!0;return!1}]]},"!":[tt,[tt],(e,[t])=>!t.evaluate(e)],"is-supported-script":[tt,[et],(e,[t])=>{const r=e.globals&&e.globals.isSupportedScript;return!r||r(t.evaluate(e))}],upcase:[et,[et],(e,[t])=>t.evaluate(e).toUpperCase()],downcase:[et,[et],(e,[t])=>t.evaluate(e).toLowerCase()],concat:[et,yn(ot),(e,t)=>t.map((t=>Et(t.evaluate(e)))).join("")],"resolved-locale":[et,[it],(e,[t])=>t.evaluate(e).resolvedLocale()]});var vn=hn;function bn(e){return{result:"success",value:e}}function wn(e){return{result:"error",value:e}}function En(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}class xn{constructor(e,t){this.expression=e,this._warningHistory={},this._evaluator=new It,this._defaultValue=t?function(e){return"color"===e.type&&(En(e.default)||Array.isArray(e.default))?new Ue(0,0,0,0):"color"===e.type?Ue.parse(e.default)||null:void 0===e.default?null:e.default}(t):null,this._enumValues=t&&"enum"===t.type?t.values:null}evaluateWithoutErrorHandling(e,t,r,n,o,i,a,s){return this._evaluator.globals=e,this._evaluator.feature=t,this._evaluator.featureState=r,this._evaluator.canonical=n||null,this._evaluator.availableImages=o||null,this._evaluator.formattedSection=i,this._evaluator.featureTileCoord=a||null,this._evaluator.featureDistanceData=s||null,this.expression.evaluate(this._evaluator)}evaluate(e,t,r,n,o,i,a,s){this._evaluator.globals=e,this._evaluator.feature=t||null,this._evaluator.featureState=r||null,this._evaluator.canonical=n||null,this._evaluator.availableImages=o||null,this._evaluator.formattedSection=i||null,this._evaluator.featureTileCoord=a||null,this._evaluator.featureDistanceData=s||null;try{const e=this.expression.evaluate(this._evaluator);if(null==e||"number"==typeof e&&e!=e)return this._defaultValue;if(this._enumValues&&!(e in this._enumValues))throw new _t(`Expected value to be one of ${Object.keys(this._enumValues).map((e=>JSON.stringify(e))).join(", ")}, but found ${JSON.stringify(e)} instead.`);return e}catch(e){return this._warningHistory[e.message]||(this._warningHistory[e.message]=!0,"undefined"!=typeof console&&console.warn(e.message)),this._defaultValue}}}function Sn(e,t){const r=new ur(vn,[],t?function(e){const t={color:rt,string:et,number:Ze,enum:et,boolean:tt,formatted:at,resolvedImage:st};if("array"===e.type)return lt(t[e.value]||ot,e.length);return t[e.type]}(t):void 0),n=r.parse(e,void 0,void 0,void 0,t&&"string"===t.type?{typeAnnotation:"coerce"}:void 0);return n?bn(new xn(n,t)):wn(r.errors)}class _n{constructor(e,t){this.kind=e,this._styleExpression=t,this.isStateDependent="constant"!==e&&!or(t.expression)}evaluateWithoutErrorHandling(e,t,r,n,o,i){return this._styleExpression.evaluateWithoutErrorHandling(e,t,r,n,o,i)}evaluate(e,t,r,n,o,i){return this._styleExpression.evaluate(e,t,r,n,o,i)}}class An{constructor(e,t,r,n){this.kind=e,this.zoomStops=r,this._styleExpression=t,this.isStateDependent="camera"!==e&&!or(t.expression),this.interpolationType=n}evaluateWithoutErrorHandling(e,t,r,n,o,i){return this._styleExpression.evaluateWithoutErrorHandling(e,t,r,n,o,i)}evaluate(e,t,r,n,o,i){return this._styleExpression.evaluate(e,t,r,n,o,i)}interpolationFactor(e,t,r){return this.interpolationType?Ur.interpolationFactor(this.interpolationType,e,t,r):0}}function Tn(e,t){if("error"===(e=Sn(e,t)).result)return e;const r=e.value.expression,n=nr(r);if(!n&&!function(e){return"data-driven"===e["property-type"]}(t))return wn([new Xe("","data expressions not supported")]);const o=ir(r,["zoom","pitch","distance-from-center"]);if(!o&&!function(e){return!!e.expression&&e.expression.parameters.indexOf("zoom")>-1}(t))return wn([new Xe("","zoom expressions not supported")]);const i=Rn(r);if(!i&&!o)return wn([new Xe("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.')]);if(i instanceof Xe)return wn([i]);if(i instanceof Ur&&!function(e){return!!e.expression&&e.expression.interpolated}(t))return wn([new Xe("",'"interpolate" expressions cannot be used with this property')]);if(!i)return bn(new _n(n?"constant":"source",e.value));const a=i instanceof Ur?i.interpolation:void 0;return bn(new An(n?"camera":"composite",e.value,i.labels,a))}function Rn(e){let t=null;if(e instanceof Fr)t=Rn(e.result);else if(e instanceof zr){for(const r of e.args)if(t=Rn(r),t)break}else(e instanceof hr||e instanceof Ur)&&e.input instanceof Dt&&"zoom"===e.input.name&&(t=e);return t instanceof Xe||e.eachChild((e=>{const r=Rn(e);r instanceof Xe?t=r:!t&&r?t=new Xe("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.'):t&&r&&t!==r&&(t=new Xe("",'Only one zoom-based "step" or "interpolate" subexpression may be used in an expression.'))})),t}function On(e){if(Array.isArray(e))return e.map(On);if(e instanceof Object&&!(e instanceof Number||e instanceof String||e instanceof Boolean)){const t={};for(const r in e)t[r]=On(e[r]);return t}return function(e){return e instanceof Number||e instanceof String||e instanceof Boolean?e.valueOf():e}(e)}var Cn={$version:8,$root:{version:{required:!0,type:"enum",values:[8]},name:{type:"string"},metadata:{type:"*"},center:{type:"array",value:"number"},zoom:{type:"number"},bearing:{type:"number",default:0,period:360,units:"degrees"},pitch:{type:"number",default:0,units:"degrees"},light:{type:"light"},terrain:{type:"terrain"},fog:{type:"fog"},sources:{required:!0,type:"sources"},sprite:{type:"string"},glyphs:{type:"string"},transition:{type:"transition"},projection:{type:"projection"},layers:{required:!0,type:"array",value:"layer"}},sources:{"*":{type:"source"}},source:["source_vector","source_raster","source_raster_dem","source_geojson","source_video","source_image"],source_vector:{type:{required:!0,type:"enum",values:{vector:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},attribution:{type:"string"},promoteId:{type:"promoteId"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_raster:{type:{required:!0,type:"enum",values:{raster:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},attribution:{type:"string"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_raster_dem:{type:{required:!0,type:"enum",values:{"raster-dem":{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},attribution:{type:"string"},encoding:{type:"enum",values:{terrarium:{},mapbox:{}},default:"mapbox"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_geojson:{type:{required:!0,type:"enum",values:{geojson:{}}},data:{type:"*"},maxzoom:{type:"number",default:18},attribution:{type:"string"},buffer:{type:"number",default:128,maximum:512,minimum:0},filter:{type:"*"},tolerance:{type:"number",default:.375},cluster:{type:"boolean",default:!1},clusterRadius:{type:"number",default:50,minimum:0},clusterMaxZoom:{type:"number"},clusterMinPoints:{type:"number"},clusterProperties:{type:"*"},lineMetrics:{type:"boolean",default:!1},generateId:{type:"boolean",default:!1},promoteId:{type:"promoteId"}},source_video:{type:{required:!0,type:"enum",values:{video:{}}},urls:{required:!0,type:"array",value:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},source_image:{type:{required:!0,type:"enum",values:{image:{}}},url:{required:!0,type:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},layer:{id:{type:"string",required:!0},type:{type:"enum",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},"fill-extrusion":{},raster:{},hillshade:{},background:{},sky:{}},required:!0},metadata:{type:"*"},source:{type:"string"},"source-layer":{type:"string"},minzoom:{type:"number",minimum:0,maximum:24},maxzoom:{type:"number",minimum:0,maximum:24},filter:{type:"filter"},layout:{type:"layout"},paint:{type:"paint"}},layout:["layout_fill","layout_line","layout_circle","layout_heatmap","layout_fill-extrusion","layout_symbol","layout_raster","layout_hillshade","layout_background","layout_sky"],layout_background:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_sky:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_fill:{"fill-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_circle:{"circle-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_heatmap:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},"layout_fill-extrusion":{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"},"fill-extrusion-edge-radius":{type:"number",private:!0,default:0,minimum:0,maximum:1,"property-type":"constant"}},layout_line:{"line-cap":{type:"enum",values:{butt:{},round:{},square:{}},default:"butt",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-join":{type:"enum",values:{bevel:{},round:{},miter:{}},default:"miter",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-miter-limit":{type:"number",default:2,requires:[{"line-join":"miter"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-round-limit":{type:"number",default:1.05,requires:[{"line-join":"round"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_symbol:{"symbol-placement":{type:"enum",values:{point:{},line:{},"line-center":{}},default:"point",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-spacing":{type:"number",default:250,minimum:1,units:"pixels",requires:[{"symbol-placement":"line"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"symbol-avoid-edges":{type:"boolean",default:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"symbol-z-order":{type:"enum",values:{auto:{},"viewport-y":{},source:{}},default:"auto",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-allow-overlap":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-ignore-placement":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-optional":{type:"boolean",default:!1,requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-size":{type:"number",default:1,minimum:0,units:"factor of the original icon size",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-text-fit":{type:"enum",values:{none:{},width:{},height:{},both:{}},default:"none",requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-text-fit-padding":{type:"array",value:"number",length:4,default:[0,0,0,0],units:"pixels",requires:["icon-image","text-field",{"icon-text-fit":["both","width","height"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-image":{type:"resolvedImage",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-keep-upright":{type:"boolean",default:!1,requires:["icon-image",{"icon-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-offset":{type:"array",value:"number",length:2,default:[0,0],requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-field":{type:"formatted",default:"",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-font":{type:"array",value:"string",default:["Open Sans Regular","Arial Unicode MS Regular"],requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-size":{type:"number",default:16,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-width":{type:"number",default:10,minimum:0,units:"ems",requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-line-height":{type:"number",default:1.2,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-letter-spacing":{type:"number",default:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-justify":{type:"enum",values:{auto:{},left:{},center:{},right:{}},default:"center",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-radial-offset":{type:"number",units:"ems",default:0,requires:["text-field"],"property-type":"data-driven",expression:{interpolated:!0,parameters:["zoom","feature"]}},"text-variable-anchor":{type:"array",value:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["text-field",{"!":"text-variable-anchor"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-angle":{type:"number",default:45,units:"degrees",requires:["text-field",{"symbol-placement":["line","line-center"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-writing-mode":{type:"array",value:"enum",values:{horizontal:{},vertical:{}},requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-keep-upright":{type:"boolean",default:!0,requires:["text-field",{"text-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-transform":{type:"enum",values:{none:{},uppercase:{},lowercase:{}},default:"none",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-offset":{type:"array",value:"number",units:"ems",length:2,default:[0,0],requires:["text-field",{"!":"text-radial-offset"}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-allow-overlap":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-ignore-placement":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-optional":{type:"boolean",default:!1,requires:["text-field","icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_raster:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_hillshade:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},filter:{type:"array",value:"*"},filter_symbol:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature","pitch","distance-from-center"]}},filter_fill:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_line:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_circle:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},"filter_fill-extrusion":{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_heatmap:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_operator:{type:"enum",values:{"==":{},"!=":{},">":{},">=":{},"<":{},"<=":{},in:{},"!in":{},all:{},any:{},none:{},has:{},"!has":{},within:{}}},geometry_type:{type:"enum",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:"expression"},stops:{type:"array",value:"function_stop"},base:{type:"number",default:1,minimum:0},property:{type:"string",default:"$zoom"},type:{type:"enum",values:{identity:{},exponential:{},interval:{},categorical:{}},default:"exponential"},colorSpace:{type:"enum",values:{rgb:{},lab:{},hcl:{}},default:"rgb"},default:{type:"*",required:!1}},function_stop:{type:"array",minimum:0,maximum:24,value:["number","color"],length:2},expression:{type:"array",value:"*",minimum:1},expression_name:{type:"enum",values:{let:{group:"Variable binding"},var:{group:"Variable binding"},literal:{group:"Types"},array:{group:"Types"},at:{group:"Lookup"},in:{group:"Lookup"},"index-of":{group:"Lookup"},slice:{group:"Lookup"},case:{group:"Decision"},match:{group:"Decision"},coalesce:{group:"Decision"},step:{group:"Ramps, scales, curves"},interpolate:{group:"Ramps, scales, curves"},"interpolate-hcl":{group:"Ramps, scales, curves"},"interpolate-lab":{group:"Ramps, scales, curves"},ln2:{group:"Math"},pi:{group:"Math"},e:{group:"Math"},typeof:{group:"Types"},string:{group:"Types"},number:{group:"Types"},boolean:{group:"Types"},object:{group:"Types"},collator:{group:"Types"},format:{group:"Types"},image:{group:"Types"},"number-format":{group:"Types"},"to-string":{group:"Types"},"to-number":{group:"Types"},"to-boolean":{group:"Types"},"to-rgba":{group:"Color"},"to-color":{group:"Types"},rgb:{group:"Color"},rgba:{group:"Color"},get:{group:"Lookup"},has:{group:"Lookup"},length:{group:"Lookup"},properties:{group:"Feature data"},"feature-state":{group:"Feature data"},"geometry-type":{group:"Feature data"},id:{group:"Feature data"},zoom:{group:"Camera"},pitch:{group:"Camera"},"distance-from-center":{group:"Camera"},"heatmap-density":{group:"Heatmap"},"line-progress":{group:"Feature data"},"sky-radial-progress":{group:"sky"},accumulated:{group:"Feature data"},"+":{group:"Math"},"*":{group:"Math"},"-":{group:"Math"},"/":{group:"Math"},"%":{group:"Math"},"^":{group:"Math"},sqrt:{group:"Math"},log10:{group:"Math"},ln:{group:"Math"},log2:{group:"Math"},sin:{group:"Math"},cos:{group:"Math"},tan:{group:"Math"},asin:{group:"Math"},acos:{group:"Math"},atan:{group:"Math"},min:{group:"Math"},max:{group:"Math"},round:{group:"Math"},abs:{group:"Math"},ceil:{group:"Math"},floor:{group:"Math"},distance:{group:"Math"},"==":{group:"Decision"},"!=":{group:"Decision"},">":{group:"Decision"},"<":{group:"Decision"},">=":{group:"Decision"},"<=":{group:"Decision"},all:{group:"Decision"},any:{group:"Decision"},"!":{group:"Decision"},within:{group:"Decision"},"is-supported-script":{group:"String"},upcase:{group:"String"},downcase:{group:"String"},concat:{group:"String"},"resolved-locale":{group:"String"}}},fog:{range:{type:"array",default:[.5,10],minimum:-20,maximum:20,length:2,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"high-color":{type:"color","property-type":"data-constant",default:"#245cdf",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"space-color":{type:"color","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],4,"#010b19",7,"#367ab9"],expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"horizon-blend":{type:"number","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],4,.2,7,.1],minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"star-intensity":{type:"number","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],5,.35,6,0],minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},light:{anchor:{type:"enum",default:"viewport",values:{map:{},viewport:{}},"property-type":"data-constant",transition:!1,expression:{interpolated:!1,parameters:["zoom"]}},position:{type:"array",default:[1.15,210,30],length:3,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},intensity:{type:"number","property-type":"data-constant",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},projection:{name:{type:"enum",values:{albers:{},equalEarth:{},equirectangular:{},lambertConformalConic:{},mercator:{},naturalEarth:{},winkelTripel:{},globe:{}},default:"mercator",required:!0},center:{type:"array",length:2,value:"number","property-type":"data-constant",minimum:[-180,-90],maximum:[180,90],transition:!1,requires:[{name:["albers","lambertConformalConic"]}]},parallels:{type:"array",length:2,value:"number","property-type":"data-constant",minimum:[-90,-90],maximum:[90,90],transition:!1,requires:[{name:["albers","lambertConformalConic"]}]}},terrain:{source:{type:"string",required:!0},exaggeration:{type:"number","property-type":"data-constant",default:1,minimum:0,maximum:1e3,expression:{interpolated:!0,parameters:["zoom"]},transition:!0,requires:["source"]}},paint:["paint_fill","paint_line","paint_circle","paint_heatmap","paint_fill-extrusion","paint_symbol","paint_raster","paint_hillshade","paint_background","paint_sky"],paint_fill:{"fill-antialias":{type:"boolean",default:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-outline-color":{type:"color",transition:!0,requires:[{"!":"fill-pattern"},{"fill-antialias":!0}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"}},"paint_fill-extrusion":{"fill-extrusion-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-extrusion-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-extrusion-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"fill-extrusion-height":{type:"number",default:0,minimum:0,units:"meters",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-base":{type:"number",default:0,minimum:0,units:"meters",transition:!0,requires:["fill-extrusion-height"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-vertical-gradient":{type:"boolean",default:!0,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-ambient-occlusion-intensity":{"property-type":"data-constant",type:"number",private:!0,default:0,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"fill-extrusion-ambient-occlusion-radius":{"property-type":"data-constant",type:"number",private:!0,default:3,minimum:0,expression:{interpolated:!0,parameters:["zoom"]},transition:!0,requires:["fill-extrusion-edge-radius"]}},paint_line:{"line-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"line-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["line-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-width":{type:"number",default:1,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-gap-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-offset":{type:"number",default:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-dasharray":{type:"array",value:"number",minimum:0,transition:!1,units:"line widths",requires:[{"!":"line-pattern"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-gradient":{type:"color",transition:!1,requires:[{"!":"line-pattern"},{source:"geojson",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:["line-progress"]},"property-type":"color-ramp"},"line-trim-offset":{type:"array",value:"number",length:2,default:[0,0],minimum:[0,0],maximum:[1,1],transition:!1,requires:[{source:"geojson",has:{lineMetrics:!0}}],"property-type":"constant"}},paint_circle:{"circle-radius":{type:"number",default:5,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-blur":{type:"number",default:0,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"circle-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["circle-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-scale":{type:"enum",values:{map:{},viewport:{}},default:"map",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-alignment":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-stroke-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"}},paint_heatmap:{"heatmap-radius":{type:"number",default:30,minimum:1,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-weight":{type:"number",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-intensity":{type:"number",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"heatmap-color":{type:"color",default:["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 255, 0)",.1,"royalblue",.3,"cyan",.5,"lime",.7,"yellow",1,"red"],transition:!1,expression:{interpolated:!0,parameters:["heatmap-density"]},"property-type":"color-ramp"},"heatmap-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_symbol:{"icon-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-color":{type:"color",default:"#000000",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["icon-image","icon-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-color":{type:"color",default:"#000000",transition:!0,overridable:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["text-field","text-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_raster:{"raster-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-hue-rotate":{type:"number",default:0,period:360,transition:!0,units:"degrees",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-min":{type:"number",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-max":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-saturation":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-contrast":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-resampling":{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"raster-fade-duration":{type:"number",default:300,minimum:0,transition:!1,units:"milliseconds",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_hillshade:{"hillshade-illumination-direction":{type:"number",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-illumination-anchor":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-exaggeration":{type:"number",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-shadow-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-highlight-color":{type:"color",default:"#FFFFFF",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-accent-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_background:{"background-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"background-pattern"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"background-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"background-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_sky:{"sky-type":{type:"enum",values:{gradient:{},atmosphere:{}},default:"atmosphere",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-atmosphere-sun":{type:"array",value:"number",length:2,units:"degrees",minimum:[0,0],maximum:[360,180],transition:!1,requires:[{"sky-type":"atmosphere"}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-atmosphere-sun-intensity":{type:"number",requires:[{"sky-type":"atmosphere"}],default:10,minimum:0,maximum:100,transition:!1,"property-type":"data-constant"},"sky-gradient-center":{type:"array",requires:[{"sky-type":"gradient"}],value:"number",default:[0,0],length:2,units:"degrees",minimum:[0,0],maximum:[360,180],transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-gradient-radius":{type:"number",requires:[{"sky-type":"gradient"}],default:90,minimum:0,maximum:180,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-gradient":{type:"color",default:["interpolate",["linear"],["sky-radial-progress"],.8,"#87ceeb",1,"white"],transition:!1,requires:[{"sky-type":"gradient"}],expression:{interpolated:!0,parameters:["sky-radial-progress"]},"property-type":"color-ramp"},"sky-atmosphere-halo-color":{type:"color",default:"white",transition:!1,requires:[{"sky-type":"atmosphere"}],"property-type":"data-constant"},"sky-atmosphere-color":{type:"color",default:"white",transition:!1,requires:[{"sky-type":"atmosphere"}],"property-type":"data-constant"},"sky-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},transition:{duration:{type:"number",default:300,minimum:0,units:"milliseconds"},delay:{type:"number",default:0,minimum:0,units:"milliseconds"}},"property-type":{"data-driven":{type:"property-type"},"color-ramp":{type:"property-type"},"data-constant":{type:"property-type"},constant:{type:"property-type"}},promoteId:{"*":{type:"string"}}};function Nn(e){if(!0===e||!1===e)return!0;if(!Array.isArray(e)||0===e.length)return!1;switch(e[0]){case"has":return e.length>=2&&"$id"!==e[1]&&"$type"!==e[1];case"in":return e.length>=3&&("string"!=typeof e[1]||Array.isArray(e[2]));case"!in":case"!has":case"none":return!1;case"==":case"!=":case">":case">=":case"<":case"<=":return 3!==e.length||Array.isArray(e[1])||Array.isArray(e[2]);case"any":case"all":for(const t of e.slice(1))if(!Nn(t)&&"boolean"!=typeof t)return!1;return!0;default:return!0}}function Pn(e,t="fill"){if(null==e)return{filter:()=>!0,needGeometry:!1,needFeature:!1};Nn(e)||(e=Un(e));const r=e;let n=!0;try{n=function(e){if(!In(e))return e;let t=On(e);return kn(t),t=Mn(t),t}(r)}catch(e){console.warn(`Failed to extract static filter. Filter will continue working, but at higher memory usage and slower framerate.\nThis is most likely a bug, please report this via https://github.com/mapbox/mapbox-gl-js/issues/new?assignees=&labels=&template=Bug_report.md\nand paste the contents of this message in the report.\nThank you!\nFilter Expression:\n${JSON.stringify(r,null,2)}\n `)}const o=Cn[`filter_${t}`],i=Sn(n,o);let a=null;if("error"===i.result)throw new Error(i.value.map((e=>`${e.key}: ${e.message}`)).join(", "));a=(e,t,r)=>i.value.evaluate(e,t,{},r);let s=null,l=null;if(n!==r){const e=Sn(r,o);if("error"===e.result)throw new Error(e.value.map((e=>`${e.key}: ${e.message}`)).join(", "));s=(t,r,n,o,i)=>e.value.evaluate(t,r,{},n,void 0,void 0,o,i),l=!nr(e.value.expression)}return{filter:a,dynamicFilter:s||void 0,needGeometry:qn(n),needFeature:!!l}}function Mn(e){if(!Array.isArray(e))return e;const t=function(e){if(Ln.has(e[0]))for(let t=1;tMn(e)))}function kn(e){let t=!1;const r=[];if("case"===e[0]){for(let n=1;n",">=","<","<=","to-boolean"]);function Dn(e,t){return et?1:0}function qn(e){if(!Array.isArray(e))return!1;if("within"===e[0])return!0;for(let t=1;t"===t||"<="===t||">="===t?jn(e[1],e[2],t):"any"===t?(r=e.slice(1),["any"].concat(r.map(Un))):"all"===t?["all"].concat(e.slice(1).map(Un)):"none"===t?["all"].concat(e.slice(1).map(Un).map(Fn)):"in"===t?zn(e[1],e.slice(2)):"!in"===t?Fn(zn(e[1],e.slice(2))):"has"===t?Gn(e[1]):"!has"===t?Fn(Gn(e[1])):"within"!==t||e}function jn(e,t,r){switch(e){case"$type":return[`filter-type-${r}`,t];case"$id":return[`filter-id-${r}`,t];default:return[`filter-${r}`,e,t]}}function zn(e,t){if(0===t.length)return!1;switch(e){case"$type":return["filter-type-in",["literal",t]];case"$id":return["filter-id-in",["literal",t]];default:return t.length>200&&!t.some((e=>typeof e!=typeof t[0]))?["filter-in-large",e,["literal",t.sort(Dn)]]:["filter-in-small",e,["literal",t]]}}function Gn(e){switch(e){case"$type":return!0;case"$id":return["filter-has-id"];default:return["filter-has",e]}}function Fn(e){return["!",e]}var Vn=["type","source","source-layer","minzoom","maxzoom","filter","layout"];function Hn(e,t){const r={};for(const t in e)"ref"!==t&&(r[t]=e[t]);return Vn.forEach((e=>{e in t&&(r[e]=t[e])})),r}function Bn(e){e=e.slice();const t=Object.create(null);for(let r=0;r1?p[p.length-2].toLowerCase():"";if(f==h||f==h.replace("-","")||d+"-"+f==h){a=o?a:$n[h],p.pop(),d&&h.startsWith(d)&&p.pop();break}}o||"number"!=typeof f||(a=f,o=!0);var m=p.join(Wn).replace("Klokantech Noto Sans","Noto Sans");-1!==m.indexOf(Wn)&&(m='"'+m+'"'),l.push(m)}n=Xn[e]=[s,a,l]}return n[0]+Wn+n[1]+Wn+t+"px"+(r?"/"+r:"")+Wn+n[2]}));const Kn="https://api.mapbox.com";function Qn(e){const t="mapbox://";return 0!==e.indexOf(t)?"":e.slice(9)}function Zn(e,t){const r=Qn(e);if(!r)return decodeURI(new URL(e,location.href).href);const n="styles/";if(0!==r.indexOf(n))throw new Error(`unexpected style url: ${e}`);const o=r.slice(7);return`${Kn}/styles/v1/${o}?&access_token=${t}`}const eo=["a","b","c","d"];function to(e,t,r,n){const o=new URL(e,n),i=Qn(e);if(!i)return t?(o.searchParams.has(r)||o.searchParams.set(r,t),[decodeURI(o.href)]):[decodeURI(o.href)];if("mapbox.satellite"===i){const e=window.devicePixelRatio>=1.5?"@2x":"";return[`https://api.mapbox.com/v4/${i}/{z}/{x}/{y}${e}.webp?access_token=${t}`]}return eo.map((e=>`https://${e}.tiles.mapbox.com/v4/${i}/{z}/{x}/{y}.vector.pbf?access_token=${t}`))}const ro={},no={};let oo=0;function io(e){return e.id||(e.id=oo++),e.id}function ao(e,t){return io(e)+"."+(0,be.getUid)(t)}function so(e){let t=ro[e.id];return t||(t={},ro[io(e)]=t),t}function lo(e){let t=no[e.id];return t||(t={},no[io(e)]=t),t}function uo(e){return e*Math.PI/180}const co=function(){const e=[];for(let t=78271.51696402048;e.length<=24;t/=2)e.push(t);return e}();function po(e,t){if("undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"undefined"!=typeof OffscreenCanvas)return new OffscreenCanvas(e,t);const r=document.createElement("canvas");return r.width=e,r.height=t,r}function fo(e,t){let r=0;const n=t.length;for(;ro)).then((e=>(e instanceof Request||(e=new Request(e)),e.headers.get("Accept")||e.headers.set("Accept","application/json"),n&&(n.request=e),fetch(e).then((function(e){return delete mo[t],e.ok?e.json():Promise.reject(new Error("Error fetching source "+t))})).catch((function(e){return delete mo[t],Promise.reject(new Error("Error fetching source "+t))})))));return mo[t]=[o,i],i}function yo(e,t){if("string"!=typeof e)return Promise.resolve(e);if(!e.trim().startsWith("{"))return go("Style",e=Zn(e,t.accessToken),t);try{const t=JSON.parse(e);return Promise.resolve(t)}catch(e){return Promise.reject(e)}}const vo={};function bo(e,t,r={}){const n=[t,JSON.stringify(e)].toString();let o=vo[n];if(!o||r.transformRequest){let i;r.transformRequest&&(i=(e,t)=>{const n=r.transformRequest&&r.transformRequest(t,"Tiles")||t;if(e instanceof undefined.VectorTile)e.setLoader(((t,r,o)=>{(0,ge.toPromise)((()=>n)).then((r=>{fetch(r).then((e=>e.arrayBuffer())).then((r=>{const n=e.getFormat().readFeatures(r,{extent:t,featureProjection:o});e.setFeatures(n)})).catch((t=>e.setState(ve.ERROR)))}))}));else{const t=e.getImage();(0,ge.toPromise)((()=>n)).then((r=>{r instanceof Request?fetch(r).then((e=>e.blob())).then((e=>{const r=URL.createObjectURL(e);t.addEventListener("load",(()=>URL.revokeObjectURL(r))),t.addEventListener("error",(()=>URL.revokeObjectURL(r))),t.src=r})).catch((t=>e.setState(ve.ERROR))):t.src=r}))}});const a=e.url;if(a&&!e.tiles){const n=to(a,r.accessToken,r.accessTokenParam||"access_token",t||location.href);if(a.startsWith("mapbox://"))o=Promise.resolve({tileJson:Object.assign({},e,{url:void 0,tiles:n}),tileLoadFunction:i});else{const e={};o=go("Source",n[0],r,e).then((function(t){return t.tiles=t.tiles.map((function(n){return"tms"===t.scheme&&(n=n.replace("{y}","{-y}")),to(n,r.accessToken,r.accessTokenParam||"access_token",e.request.url)[0]})),Promise.resolve({tileJson:t,tileLoadFunction:i})}))}}else e=Object.assign({},e,{tiles:e.tiles.map((function(n){return"tms"===e.scheme&&(n=n.replace("{y}","{-y}")),to(n,r.accessToken,r.accessTokenParam||"access_token",t||location.href)[0]}))}),o=Promise.resolve({tileJson:Object.assign({},e),tileLoadFunction:i});vo[n]=o}return o}function wo(e,t,r,n){const o=[2*r*t.pixelRatio+t.width,2*r*t.pixelRatio+t.height],i=po(o[0],o[1]),a=i.getContext("2d");a.drawImage(e,t.x,t.y,t.width,t.height,r*t.pixelRatio,r*t.pixelRatio,t.width,t.height);const s=a.getImageData(0,0,o[0],o[1]);a.globalCompositeOperation="destination-over",a.fillStyle=`rgba(${255*n.r},${255*n.g},${255*n.b},${n.a})`;const l=s.data;for(let e=0,n=s.width;e0&&a.arc(e,o,r*t.pixelRatio,0,2*Math.PI)}return a.fill(),i}function Eo(e,t,r){const n=Math.max(0,Math.min(1,(r-e)/(t-e)));return n*n*(3-2*n)}function xo(e,t,r){const n=po(t.width,t.height),o=n.getContext("2d");o.drawImage(e,t.x,t.y,t.width,t.height,0,0,t.width,t.height);const i=o.getImageData(0,0,t.width,t.height),a=i.data;for(let e=0,t=i.width;e0?(a[o+0]=Math.round(255*r.r*l),a[o+1]=Math.round(255*r.g*l),a[o+2]=Math.round(255*r.b*l),a[o+3]=Math.round(255*l)):a[o+3]=0}return o.putImageData(i,0,0),n}const So=Array(256).join(" ");function _o(e,t){if(t>=.05){let r="";const n=e.split("\n"),o=So.slice(0,Math.round(t/.1));for(let e=0,t=n.length;e0&&(r+="\n"),r+=n[e].split("").join(o);return r}return e}let Ao;function To(){return Ao||(Ao=po(1,1).getContext("2d")),Ao}function Ro(e,t){return To().measureText(e).width+(e.length-1)*t}const Oo={};function Co(e,t,r,n){if(-1!==e.indexOf("\n")){const o=e.split("\n"),i=[];for(let e=0,a=o.length;e1){const e=To();e.font=t;const o=e.measureText("M").width*r;let s="";const l=[];for(let e=0,t=a.length;e1;++e){const r=l[e];if(Ro(r,n)<.35*o){const o=e>0?Ro(l[e-1],n):1/0,i=e.7*o&&Ro(i,n)<.6*o){const a=r.split(" "),s=a.pop();Ro(s,n)<.2*o&&(l[e]=a.join(" "),l[e+1]=s+" "+i),t-=1}}i=l.join("\n")}else i=e;i=_o(i,n),Oo[o]=i}return i}const No=/font-family: ?([^;]*);/,Po=/("|')/g;let Mo;function ko(e){if(!Mo){Mo={};const e=document.styleSheets;for(let t=0,r=e.length;t0&&"string"==typeof u[0]&&u[0]in vn);if(!i&&En(n)&&(n=ze(n,o),i=!0),i){const e=function(e,t){const r=Tn(e,t);if("error"===r.result)throw new Error(r.value.map((e=>`${e.key}: ${e.message}`)).join(", "));return r.value}(n,o);l[r]=e.evaluate.bind(e)}else"color"==o.type&&(n=Ue.parse(n)),l[r]=function(){return n}}var u;return Uo.zoom=n,l[r](Uo,o,a)}function Fo(e,t,r,n,o){if(!Go(e,"layout",`${n}-allow-overlap`,t,r,o))return"declutter";return Go(e,"layout",`${n}-ignore-placement`,t,r,o)?"none":"obstacle"}function Vo(e,t,r,n,o){return o||console.warn("No filterCache provided to evaluateFilter()"),e in o||(o[e]=Pn(t).filter),Uo.zoom=n,o[e](Uo,r)}let Ho=!1;function Bo(e,t){if(e){if(!Ho&&(0===e.a||0===t))return;const r=e.a;return t=void 0===t?1:t,0===r?"transparent":"rgba("+Math.round(255*e.r/r)+","+Math.round(255*e.g/r)+","+Math.round(255*e.b/r)+","+r*t+")"}return e}const $o=/\{[^{}}]*\}/g;function Wo(e,t){return e.replace($o,(function(e){return t[e.slice(1,-1)]||""}))}let Yo=!1;const Xo={};function Jo(e,t,r,n=co,o=void 0,i=void 0,a=void 0,s=void 0){if("string"==typeof t&&(t=JSON.parse(t)),8!=t.version)throw new Error("glStyle version 8 required.");let l,u,c;if(Xo[ao(t,e)]=Array.from(arguments),i)if("undefined"!=typeof Image){const t=new Image;let r;(0,ge.toPromise)((()=>i)).then((e=>{e instanceof Request?fetch(e).then((e=>e.blob())).then((e=>{r=URL.createObjectURL(e),t.src=r})).catch((()=>{})):(t.crossOrigin="anonymous",t.src=e,r&&URL.revokeObjectURL(r))})),t.onload=function(){l=t,u=[t.width,t.height],e.changed(),t.onload=null}}else if("undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope){const e=self;e.postMessage({action:"loadImage",src:i}),e.addEventListener("message",(function(e){"imageLoaded"===e.data.action&&e.data.src===i&&(l=e.data.image,u=[l.width,l.height])}))}const p=Bn(t.layers),m={},g=[],y={},v={},b=so(t),w=lo(t);let E;for(let e=0,n=p.length;e=P.maxzoom)continue;const L=P.filter;if(!L||Vo(M,L,R,A,w)){let n,p,w,E,M,L;C=P;const D=m.index;if(3==T&&("fill"==P.type||"fill-extrusion"==P.type))if(p=Go(P,"paint",P.type+"-opacity",A,R,b,O),P.type+"-pattern"in I){const e=Go(P,"paint",P.type+"-pattern",A,R,b,O);if(e){const t="string"==typeof e?Wo(e,g):e.toString();if(l&&o&&o[t]){++N,L=_[N],L&&L.getFill()&&!L.getStroke()&&!L.getText()||(L=new de({fill:new h}),_[N]=L),w=L.getFill(),L.setZIndex(D);const e=t+"."+p;let r=v[e];if(!r){const n=o[t],i=po(n.width,n.height),a=i.getContext("2d");a.globalAlpha=p,a.drawImage(l,n.x,n.y,n.width,n.height,0,0,n.width,n.height),r=a.createPattern(i,"repeat"),v[e]=r}w.setColor(r)}}}else n=Bo(Go(P,"paint",P.type+"-color",A,R,b,O),p),P.type+"-outline-color"in I&&(M=Bo(Go(P,"paint",P.type+"-outline-color",A,R,b,O),p)),M||(M=n),(n||M)&&(++N,L=_[N],(!L||n&&!L.getFill()||!n&&L.getFill()||M&&!L.getStroke()||!M&&L.getStroke()||L.getText())&&(L=new de({fill:n?new h:void 0,stroke:M?new he:void 0}),_[N]=L),n&&(w=L.getFill(),w.setColor(n)),M&&(E=L.getStroke(),E.setColor(M),E.setWidth(.5)),L.setZIndex(D));if(1!=T&&"line"==P.type){n="line-pattern"in I?void 0:Bo(Go(P,"paint","line-color",A,R,b,O),Go(P,"paint","line-opacity",A,R,b,O));const e=Go(P,"paint","line-width",A,R,b,O);n&&e>0&&(++N,L=_[N],L&&L.getStroke()&&!L.getFill()&&!L.getText()||(L=new de({stroke:new he}),_[N]=L),E=L.getStroke(),E.setLineCap(Go(P,"layout","line-cap",A,R,b,O)),E.setLineJoin(Go(P,"layout","line-join",A,R,b,O)),E.setMiterLimit(Go(P,"layout","line-miter-limit",A,R,b,O)),E.setColor(n),E.setWidth(e),E.setLineDash(I["line-dasharray"]?Go(P,"paint","line-dasharray",A,R,b,O).map((function(t){return t*e})):null),L.setZIndex(D))}let q,U,j,z,G,F,V,H,B,$=!1,W=null,Y=0;if((1==T||2==T)&&"icon-image"in k){const t=Go(P,"layout","icon-image",A,R,b,O);if(t){let n;q="string"==typeof t?Wo(t,g):t.toString();const a=s?s(e,q):void 0;if(l&&o&&o[q]||a){const e=Go(P,"layout","icon-rotation-alignment",A,R,b,O);if(2==T){const t=r.getGeometry();if(t.getFlatMidpoint||t.getFlatMidpoints){const r=t.getExtent();if(Math.sqrt(Math.max(Math.pow((r[2]-r[0])/i,2),Math.pow((r[3]-r[1])/i,2)))>150){const r="MultiLineString"===t.getType()?t.getFlatMidpoints():t.getFlatMidpoint();zo||(jo=[NaN,NaN],zo=new fe("Point",jo,[],2,{},void 0)),n=zo,jo[0]=r[0],jo[1]=r[1];if("line"===Go(P,"layout","symbol-placement",A,R,b,O)&&"map"===e){const e=t.getStride(),n=t.getFlatCoordinates();for(let t=0,o=n.length-e;t=l){Y=Math.atan2(i-s,a-o);break}}}}}}if(2!==T||n){const t=Go(P,"layout","icon-size",A,R,b,O),r=void 0!==I["icon-color"]?Go(P,"paint","icon-color",A,R,b,O):null;if(!r||0!==r.a){const n=Go(P,"paint","icon-halo-color",A,R,b,O),i=Go(P,"paint","icon-halo-width",A,R,b,O);let s=`${q}.${t}.${i}.${n}`;if(null!==r&&(s+=`.${r}`),U=y[s],!U){const p=Fo(P,A,R,"icon",b);let f;"icon-offset"in k&&(f=Go(P,"layout","icon-offset",A,R,b,O).slice(0),f[0]*=t,f[1]*=-t);let h=r?[255*r.r,255*r.g,255*r.b,r.a]:void 0;if(a){const r={color:h,rotateWithView:"map"===e,displacement:f,declutterMode:p,scale:t};"string"==typeof a?r.src=a:(r.img=a,r.imgSize=[a.width,a.height]),U=new d(r)}else{const a=o[q];let s,m,g;i?a.sdf?(s=wo(xo(l,a,r||[0,0,0,1]),{x:0,y:0,width:a.width,height:a.height,pixelRatio:a.pixelRatio},i,n),h=void 0):s=wo(l,a,i,n):(a.sdf?(c||(c=xo(l,{x:0,y:0,width:u[0],height:u[1]},{r:1,g:1,b:1,a:1})),s=c):s=l,m=[a.width,a.height],g=[a.x,a.y]),U=new d({color:h,img:s,imgSize:u,size:m,offset:g,rotateWithView:"map"===e,scale:t/a.pixelRatio,displacement:f,declutterMode:p})}y[s]=U}}U&&(++N,L=_[N],L&&L.getImage()&&!L.getFill()&&!L.getStroke()||(L=new de,_[N]=L),L.setGeometry(n),U.setRotation(Y+uo(Go(P,"layout","icon-rotate",A,R,b,O))),U.setOpacity(Go(P,"paint","icon-opacity",A,R,b,O)),U.setAnchor(Do[Go(P,"layout","icon-anchor",A,R,b,O)]),L.setImage(U),W=L.getText(),L.setText(void 0),L.setZIndex(D),$=!0,j=!1)}else j=!0}}}if(1==T&&"circle"===P.type){++N,L=_[N],L&&L.getImage()&&!L.getFill()&&!L.getStroke()||(L=new de,_[N]=L);const e="circle-radius"in I?Go(P,"paint","circle-radius",A,R,b,O):5,t=Bo(Go(P,"paint","circle-stroke-color",A,R,b,O),Go(P,"paint","circle-stroke-opacity",A,R,b,O)),r=Go(P,"paint","circle-translate",A,R,b,O),n=Bo(Go(P,"paint","circle-color",A,R,b,O),Go(P,"paint","circle-opacity",A,R,b,O)),o=Go(P,"paint","circle-stroke-width",A,R,b,O),i=e+"."+t+"."+n+"."+o+"."+r[0]+"."+r[1];U=y[i],U||(U=new f({radius:e,displacement:[r[0],-r[1]],stroke:t&&o>0?new he({width:o,color:t}):void 0,fill:n?new h({color:n}):void 0,declutterMode:"none"}),y[i]=U),L.setImage(U),W=L.getText(),L.setText(void 0),L.setGeometry(void 0),L.setZIndex(D),$=!0}if("text-field"in k){V=Math.round(Go(P,"layout","text-size",A,R,b,O));const e=Go(P,"layout","text-font",A,R,b,O);F=Go(P,"layout","text-line-height",A,R,b,O),G=Jn(a?a(e,t.metadata?t.metadata["ol:webfonts"]:void 0):e,V,F),G.includes("sans-serif")||(G+=",sans-serif"),H=Go(P,"layout","text-letter-spacing",A,R,b,O),B=Go(P,"layout","text-max-width",A,R,b,O);const r=Go(P,"layout","text-field",A,R,b,O);z="object"==typeof r&&r.sections?1===r.sections.length?r.toString():r.sections.reduce(((t,r,n)=>{const o=r.fontStack?r.fontStack.split(","):e,i=Jn(a?a(o):o,V*(r.scale||1),F);let s=r.text;if("\n"===s)return t.push("\n",""),t;if(2==T)return t.push(_o(s,H),i),t;s=Co(s,i,B,H).split("\n");for(let e=0,r=s.length;e0&&t.push("\n",""),t.push(s[e],i);return t}),[]):Wo(r,g).trim(),p=Go(P,"paint","text-opacity",A,R,b,O)}if(z&&p&&!j){$||(++N,L=_[N],L&&L.getText()&&!L.getFill()&&!L.getStroke()||(L=new de,_[N]=L),L.setImage(void 0),L.setGeometry(void 0));const e=Fo(P,A,R,"text",b);L.getText()||L.setText(W),W=L.getText(),(!W||"getDeclutterMode"in W&&W.getDeclutterMode()!==e)&&(W=new me({padding:[2,2,2,2],declutterMode:e}),L.setText(W));const t=Go(P,"layout","text-transform",A,R,b,O);"uppercase"==t?z=Array.isArray(z)?z.map(((e,t)=>t%2?e:e.toUpperCase())):z.toUpperCase():"lowercase"==t&&(z=Array.isArray(z)?z.map(((e,t)=>t%2?e:e.toLowerCase())):z.toLowerCase());const r=Array.isArray(z)?z:2==T?_o(z,H):Co(z,G,B,H);if(W.setText(r),W.setFont(G),W.setRotation(uo(Go(P,"layout","text-rotate",A,R,b,O))),"function"==typeof W.setKeepUpright){const e=Go(P,"layout","text-keep-upright",A,R,b,O);W.setKeepUpright(e)}const n=Go(P,"layout","text-anchor",A,R,b,O),o=$||1==T?"point":Go(P,"layout","symbol-placement",A,R,b,O);let i;if("line-center"===o?(W.setPlacement("line"),i="center"):W.setPlacement(o),"line"===o&&"function"==typeof W.setRepeat){const e=Go(P,"layout","symbol-spacing",A,R,b,O);W.setRepeat(2*e)}W.setOverflow("point"===o);let a=Go(P,"paint","text-halo-width",A,R,b,O);const s=Go(P,"layout","text-offset",A,R,b,O),l=Go(P,"paint","text-translate",A,R,b,O);let u=0,c=0;if("point"==o){i="center",-1!==n.indexOf("left")?(i="left",c=a):-1!==n.indexOf("right")&&(i="right",c=-a);const e=Go(P,"layout","text-rotation-alignment",A,R,b,O);W.setRotateWithView("map"==e)}else W.setMaxAngle(uo(Go(P,"layout","text-max-angle",A,R,b,O))*z.length/r.length),W.setRotateWithView(!1);W.setTextAlign(i);let f="middle";0==n.indexOf("bottom")?(f="bottom",u=-a-.5*(F-1)*V):0==n.indexOf("top")&&(f="top",u=a+.5*(F-1)*V),W.setTextBaseline(f);const h=Go(P,"layout","text-justify",A,R,b,O);W.setJustify("auto"===h?void 0:h),W.setOffsetX(s[0]*V+c+l[0]),W.setOffsetY(s[1]*V+u+l[1]),S.setColor(Bo(Go(P,"paint","text-color",A,R,b,O),p)),W.setFill(S);const d=Bo(Go(P,"paint","text-halo-color",A,R,b,O),p);if(d&&a>0){x.setColor(d),a*=2;const e=.5*V;x.setWidth(a<=e?a:e),W.setStroke(x)}else W.setStroke(void 0);const m=Go(P,"layout","text-padding",A,R,b,O),g=W.getPadding();m!==g[0]&&(g[0]=m,g[1]=m,g[2]=m,g[3]=m),L.setZIndex(D)}}}return N>-1?(_.length=N+1,Yo&&("set"in r?r.set("mapbox-layer",C):r.getProperties()["mapbox-layer"]=C),_):void 0};return e.setStyle(A),e.set("mapbox-source",E),e.set("mapbox-layers",g),e.set("mapbox-featurestate",e.get("mapbox-featurestate")||{}),A}function Ko(e,t=512){return e.getExtent()?(0,Te.createXYZ)({extent:e.getExtent(),tileSize:t,maxZoom:22}).getResolutions():co}function Qo(e,t){if(!t.accessToken){t=Object.assign({},t);new URL(e).searchParams.forEach(((e,r)=>{t.accessToken=e,t.accessTokenParam=r}))}return t}function Zo(e,t,r="",o={},a=void 0){let s,l,u,c,p=!0;return"string"==typeof r||Array.isArray(r)?c=r:(u=r,c=u.source||u.layers,o=u),"string"==typeof o?(s=o,u={}):(s=o.styleUrl,u=o),!1===u.updateSource&&(p=!1),a||(a=u.resolutions),s||"string"!=typeof t||t.trim().startsWith("{")||(s=t),s&&(s=s.startsWith("data:")?location.href:Zn(s,u.accessToken),u=Qo(s,u)),new Promise((function(r,o){yo(t,u).then((function(t){if(8!=t.version)return o(new Error("glStyle version 8 required."));if(!(e instanceof xe||e instanceof n))return o(new Error("Can only apply to VectorLayer or VectorTileLayer"));const f=e instanceof n?"vector":"geojson";if(c?l=Array.isArray(c)?t.layers.find((function(e){return e.id===c[0]})).source:c:(l=Object.keys(t.sources).find((function(e){return t.sources[e].type===f})),c=l),!l)return o(new Error(`No ${f} source found in the glStyle.`));function h(){if(!p)return Promise.resolve();if(e instanceof n)return ti(t.sources[l],s,u).then((function(t){const r=e.getSource();r?t!==r&&(r.setTileUrlFunction(t.getTileUrlFunction()),"function"==typeof r.setUrls&&"function"==typeof t.getUrls&&r.setUrls(t.getUrls()),r.format_||(r.format_=t.format_),r.getAttributions()||r.setAttributions(t.getAttributions()),r.getTileLoadFunction()===i.defaultLoadFunction&&r.setTileLoadFunction(t.getTileLoadFunction()),(0,Re.equivalent)(r.getProjection(),t.getProjection())&&(r.tileGrid=t.getTileGrid())):e.setSource(t);const n=e.getSource().getTileGrid();!isFinite(e.getMaxResolution())&&!isFinite(e.getMinZoom())&&n.getMinZoom()>0&&e.setMaxResolution(ho(Math.max(0,n.getMinZoom()-1e-12),n.getResolutions()))}));const r=t.sources[l];let o=e.getSource();o&&o.get("mapbox-source")===r||(o=ni(r,s,u));const a=e.getSource();return a?o!==a&&(a.getAttributions()||a.setAttributions(o.getAttributions()),a.format_||(a.format_=o.getFormat()),a.url_=o.getUrl()):e.setSource(o),Promise.resolve()}let d,m,g,y;function v(){if(y||t.sprite&&!m)y?(e.setStyle(y),h().then(r).catch(o)):o(new Error("Something went wrong trying to apply style."));else{if(u.projection&&!a){const e=(0,Re.get)(u.projection).getUnits();"m"!==e&&(a=co.map((t=>t/_e.METERS_PER_UNIT[e])))}y=Jo(e,t,c,a,m,g,((e,t=u.webfonts)=>function(e,t="https://cdn.jsdelivr.net/npm/@fontsource/{font-family}/{fontweight}{-fontstyle}.css"){const r=e.toString();if(r in Io)return Io[r];const n=[];for(let t=0,r=e.length;t=1.5?.5:1;const r=.5==d?"@2x":"";let n=e.origin+e.pathname+r+".json"+e.search;new Promise((function(t,r){go("Sprite",n,u).then(t).catch((function(o){n=e.origin+e.pathname+".json"+e.search,go("Sprite",n,u).then(t).catch(r)}))})).then((function(t){if(void 0===t&&o(new Error("No sprites found.")),m=t,g=e.origin+e.pathname+r+".png"+e.search,u.transformRequest){const e=u.transformRequest(g,"SpriteImage")||g;(e instanceof Request||e instanceof Promise)&&(g=e)}v()})).catch((function(e){o(new Error(`Sprites cannot be loaded: ${n}: ${e.message}`))}))}else v()})).catch(o)}))}function ei(e,t,r){const n=new s({tileJSON:t,tileSize:e.tileSize||t.tileSize||512}),o=n.getTileJSON(),i=n.getTileGrid(),a=(0,Re.get)(r.projection||"EPSG:3857"),l=function(e,t){const r=e.bounds;if(r){const e=(0,Re.fromLonLat)([r[0],r[1]],t),n=(0,Re.fromLonLat)([r[2],r[3]],t);return[e[0],e[1],n[0],n[1]]}return(0,Re.get)(t).getExtent()}(o,a),u=a.getExtent(),c=o.minzoom||0,p=o.maxzoom||22,f={attributions:n.getAttributions(),projection:a,tileGrid:new Ee({origin:u?(0,Oe.getTopLeft)(u):i.getOrigin(0),extent:l||i.getExtent(),minZoom:c,resolutions:Ko(a,t.tileSize).slice(0,p+1),tileSize:i.getTileSize(0)})};return Array.isArray(o.tiles)?f.urls=o.tiles:f.url=o.tiles,f}function ti(e,t,r){return new Promise((function(n,o){bo(e,t,r).then((function({tileJson:t,tileLoadFunction:o}){const a=ei(e,t,r);a.tileLoadFunction=o,a.format=new u,n(new i(a))})).catch(o)}))}function ri(e){return`{bbox-${(e?e.getCode():"EPSG:3857").toLowerCase().replace(/[^a-z0-9]/g,"-")}}`}function ni(e,t,r){const n=r.projection?new we({dataProjection:r.projection}):new we,o=e.data,i={};if("string"==typeof o){const[i]=to(o,r.accessToken,r.accessTokenParam||"access_token",t||location.href);if(/\{bbox-[0-9a-z-]+\}/.test(i)){const t=(e,t,r)=>{const n=ri(r);return i.replace(n,`${e.join(",")}`)},o=new Se({attributions:e.attribution,format:n,loader:(e,n,i,a,s)=>{go("GeoJSON","function"==typeof t?t(e,n,i):t,r).then((e=>{const t=o.getFormat().readFeatures(e,{featureProjection:i});o.addFeatures(t),a(t)})).catch((t=>{o.removeLoadedExtent(e),s()}))},strategy:Ae.bbox});return o.set("mapbox-source",e),o}const a=new Se({attributions:e.attribution,format:n,url:i,loader:(e,t,n,o,s)=>{go("GeoJSON",i,r).then((e=>{const t=a.getFormat().readFeatures(e,{featureProjection:n});a.addFeatures(t),o(t)})).catch((t=>{a.removeLoadedExtent(e),s()}))}});return a}i.features=n.readFeatures(o,{featureProjection:(0,Re.getUserProjection)()||"EPSG:3857"});const a=new Se(Object.assign({attributions:e.attribution,format:n},i));return a.set("mapbox-source",e),a}var oi=r(2536),ii=r(7278);function ai(e){return ai="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ai(e)}function si(e,t){for(var r=0;r{"use strict";r.d(t,{A:()=>v});var n=r(996),o=r.n(n);const i=ol.style;var a=r(2536),s=r(7278),l=r(4998);function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function c(e,t){for(var r=0;r{"use strict";r.d(t,{A:()=>y});var n=r(9201),o=r(9583),i=r.n(o),a=r(2536),s=r(7278),l=r(4659);function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function c(e,t){for(var r=0;r{"use strict";r.d(t,{A:()=>y});var n=r(9201),o=r(9583),i=r.n(o),a=r(2536),s=r(7278),l=r(9815);function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function c(e,t){for(var r=0;r{"use strict";r.d(t,{A:()=>E});var n=r(3668),o=r.n(n),i=r(7304),a=r.n(i),s=r(2947),l=r(8062),u=r(2536),c=r(5844),p=r(7278),f=r(8330);function h(e){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h(e)}function d(e,t){for(var r=0;r{"use strict";r.d(t,{A:()=>v});var n=r(2987);const o=ol.source.TileWMS;var i=r.n(o),a=r(2536),s=r(5844),l=r(7278),u=r(8330);function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}function p(e,t){for(var r=0;r{"use strict";r.d(t,{A:()=>w});var n=r(2987);const o=ol.tilegrid.WMTS;var i=r.n(o),a=r(9290),s=r(2536);const l={getZoomLevelFromScaleDenominator:function(e,t){var r={};if("EPSG:2154"===t)r={0:104579.224549894,1:52277.5323537905,2:26135.4870785954,3:13066.8913818,4:6533.2286041135,5:3266.5595244627,6:1633.2660045974,7:816.629554986,8:408.3139146768,9:204.1567415109,10:102.0783167832,11:51.0391448966,12:25.5195690743,13:12.7597836936,14:6.379891636,15:3.1899457653,16:1.5949728695,17:.7974864315,18:.3987432149,19:.1993716073,20:.0996858037,21:.0498429018};else r={0:156543.033928041,1:78271.51696402048,2:39135.758482010235,3:19567.87924100512,4:9783.93962050256,5:4891.96981025128,6:2445.98490512564,7:1222.99245256282,8:611.49622628141,9:305.7481131407048,10:152.8740565703525,11:76.43702828517624,12:38.21851414258813,13:19.10925707129406,14:9.554628535647032,15:4.777314267823516,16:2.388657133911758,17:1.194328566955879,18:.5971642834779395,19:.2985821417389697,20:.1492910708694849,21:.0746455354347424};var n=28e-5*e;for(var o in r)if(r.hasOwnProperty(o)&&r[o]<=n)return o=parseInt(o,10);return 0},getAttributions:function(e){var t=e.zoom,r=[];if(null!=e.originators&&e.visibility)for(var n,o=0,i=e.originators.length;ot&&(n=!1),n&&f&&f{"use strict";r.d(t,{A:()=>g});const n=ol.source.WMTS;var o=r.n(n),i=r(2938),a=r(2987),s=r(2536);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function u(e,t){for(var r=0;r{"use strict";r.d(t,{A:()=>n});const n={configuration:{},isConfigLoaded:function(){if(this.configuration&&0!==Object.keys(this.configuration).length)return!0;var e="undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0!==r.g?r.g:{};return!!(e.Gp&&e.Gp.Config&&e.Gp.Config.layers&&0!==Object.keys(e.Gp.Config.layers).length)&&(this.configuration=e.Gp.Config,!0)}}},2536:(e,t,r)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}r.d(t,{A:()=>o});const o={detectSupport:function(){var e=!0,t=window.navigator.userAgent.toLowerCase();return-1===t.indexOf("iphone")&&-1===t.indexOf("ipod")&&-1===t.indexOf("ipad")&&-1===t.indexOf("android")&&-1===t.indexOf("mobile")&&-1===t.indexOf("blackberry")&&-1===t.indexOf("tablet")&&-1===t.indexOf("phone")&&-1===t.indexOf("touch")||(e=!1),-1===t.indexOf("msie")&&-1===t.indexOf("trident")||(e=!0),e},assign:function(e,t){for(var r in e=e||{},t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e},mergeParams:function(e,t,r){if(void 0!==e&&void 0!==t)for(var o in void 0===r&&(r=!0),t)t.hasOwnProperty(o)&&("object"===n(t[o])?e.hasOwnProperty(o)?this.mergeParams(e[o],t[o],r):e[o]=t[o]:e.hasOwnProperty(o)?r&&(e[o]=t[o]):e[o]=t[o])}}},5844:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(3065),o={getLogger:function(e){if(void 0===t)var t={env:{VERBOSE:!1}};t.env.VERBOSE?n.enableAll():n.disableAll();var r=e||"default";return n.getLogger(r)},disableAll:function(){var e=n.getLoggers();for(var t in e){if(Object.hasOwnProperty.call(e,t))e[t].disableAll()}},enableAll:function(){var e=n.getLoggers();for(var t in e){if(Object.hasOwnProperty.call(e,t))e[t].enableAll()}}};const i=o;window.Gp&&(window.Gp.Logger=o)},6964:function(e,t,r){ /*! @@ -19,5 +19,5 @@ * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE * @version v4.2.8+1e68dce6 */ -e.exports=function(){"use strict";function e(e){var t=typeof e;return null!==e&&("object"===t||"function"===t)}function t(e){return"function"==typeof e}var n=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},o=0,i=void 0,a=void 0,s=function(e,t){w[o]=e,w[o+1]=t,2===(o+=2)&&(a?a(E):S())};function l(e){a=e}function u(e){s=e}var c="undefined"!=typeof window?window:void 0,p=c||{},f=p.MutationObserver||p.WebKitMutationObserver,h="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),d="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function m(){return function(){return process.nextTick(E)}}function g(){return void 0!==i?function(){i(E)}:b()}function y(){var e=0,t=new f(E),r=document.createTextNode("");return t.observe(r,{characterData:!0}),function(){r.data=e=++e%2}}function v(){var e=new MessageChannel;return e.port1.onmessage=E,function(){return e.port2.postMessage(0)}}function b(){var e=setTimeout;return function(){return e(E,1)}}var w=new Array(1e3);function E(){for(var e=0;e{"use strict";function n(e){if(!(this instanceof n))throw new TypeError("ErrorService constructor cannot be called as a function.");var t=e;"string"==typeof e||e instanceof String?(this.message=e,this.status=-1,this.type=n.TYPE_UNKERR):(this.message=t.message||"undefined!?",this.type=t.type,this.status=t.status||-1),this.name="ErrorService",this.stack=(new Error).stack}r.d(t,{A:()=>o}),n.TYPE_SRVERR="SERVICE_ERROR",n.TYPE_USEERR="USAGE_ERROR",n.TYPE_UNKERR="UNKNOWN_ERROR",n.prototype=Object.create(Error.prototype,{constructor:{value:n,writable:!0,configurable:!0}});const o=n},4841:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(this.logger=n.A.getLogger(),this.logger.trace("[Constructeur WPS()]"),!(this instanceof o))throw new TypeError("WPS constructor cannot be called as a function.");if(this.options=e||{},this.DataObject=this.options.data,!this.DataObject)throw new TypeError("This data object is not defined !");this.paramservice=this.options.param.service||"WPS",this.paramversion=this.options.param.version||"1.0.0",this.paramidentifier=this.options.param.identifier||"gs:WPS",this.paramrawdataoutput=this.options.param.rawdataoutput||"result",this.paramrequest=this.options.param.request||"Execute",this.method=this.options.method||"GET"}o.prototype={requestString:null,constructor:o,template:{get:{value:"service=__SERVICE__&version=__VERSION__&rawdataoutput=__RAWDATAOUTPUT__&identifier=__IDENTIFIER__&request=__REQUEST__&datainputs=\x3c!-- __DATAINPUTS__ --\x3e",input:"__KEY__=__DATA__"},post:{value:'__IDENTIFIER__\x3c!-- __DATAINPUTS__ --\x3e__RAWDATAOUTPUT__',input:"__KEY____DATA__"}},namespaceByDefault:function(){return['xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"','xmlns="http://www.opengis.net/wps/1.0.0"','xmlns:wfs="http://www.opengis.net/wfs"','xmlns:wps="http://www.opengis.net/wps/1.0.0"','xmlns:ows="http://www.opengis.net/ows/1.1"','xmlns:gml="http://www.opengis.net/gml"','xmlns:ogc="http://www.opengis.net/ogc"','xmlns:wcs="http://www.opengis.net/wcs/1.1.1"','xmlns:xlink="http://www.w3.org/1999/xlink"'].join(" ")},schemaLocationByDefault:function(){return'xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd"'},processRequestString:function(){this.logger.trace("WPS::processRequestString ()");var e="";if("POST"===this.method)e=this.template.post.value;else{if("GET"!==this.method)return this.logger.error("No other method supported by the service !"),!1;e=this.template.get.value}return e=(e=(e=(e=(e=e.replace(/__SERVICE__/g,this.paramservice)).replace(/__VERSION__/g,this.paramversion)).replace(/__RAWDATAOUTPUT__/g,this.paramrawdataoutput)).replace(/__IDENTIFIER__/g,this.paramidentifier)).replace(/__REQUEST__/g,this.paramrequest),"POST"===this.method&&(e=(e=e.replace(/__NAMESPACE__/g,this.namespaceByDefault)).replace(/__SCHEMALOCATION__/g,this.schemaLocationByDefault)),(e=e.replace(//g,this.__addDataInputs()))?(this.requestString=e,this.logger.trace("traduction tmpl",e),!0):(this.logger.warn("traduction tmpl : empty request !?"),!1)},__addDataInputs:function(){this.logger.trace("WPS::__addDataInputs ()");for(var e,t="GET"===this.method?this.template.get.input:this.template.post.input,r="GET"===this.method?";":"",n="",o=this,i=this.DataObject.getData(),a=0;a{"use strict";r.d(t,{A:()=>s});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("XML constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur XML ()]"),this.xmlString=null,this.xmlDoc=null,this.reader=null,e&&(e.xmlString&&"string"==typeof e.xmlString&&(this.xmlString=e.xmlString,this.xmlDoc=i(e.xmlString)),e.reader&&this.setReader(e.reader))}function i(e){if("undefined"==typeof window)return(new(0,r(8978).S4)).parseFromString(e,"text/xml");var t,n,o="Erreur lors du parsing de la réponse du service : XML non conforme";if(window.ActiveXObject){(n=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,n.loadXML(e);var i=n.parseError;if(i.errorCode)throw i.line&&i.linepos&&(o+="( ligne "+i.line+", colonne "+i.linepos),i.reason&&(o+=": "+i.reason+")"),new Error(o);return n}if(window.DOMParser){t=new window.DOMParser;try{n=t.parseFromString(e,"text/xml")}catch(e){throw"SyntaxError"===e.message?new Error(o):new Error("Erreur lors du parsing de la réponse du service : "+e.message)}if(n.getElementsByTagName("parsererror").length>0)for(var a=n.getElementsByTagName("parsererror"),s=0;s0){var r=function(e){if(e.attributes.length>0){for(var t={},r=e.attributes,n=0;n{"use strict";r.d(t,{Ay:()=>w});var n=r(3255),o=r(7966),i=r(3565),a=r(3041),s=r(5941),l=r(9924),u=r(1489),c=r(2993),p=r(7868),f=r(4154),h=r(210),d=r(8288),m=r(3474),g=r(9032);const y=g.rE,v=g.p6;var b={};b.servicesVersion=y,b.servicesDate=v,b.Protocols={},b.Protocols.XHR=h.A,b.Services=n.A,b.Services.DefaultUrl=o.A,b.Services.AltiResponse=i.A,b.Services.Alti={},b.Services.Alti.Elevation=a.A,b.Services.AutoCompleteResponse=s.A,b.Services.AutoComplete={},b.Services.AutoComplete.SuggestedLocation=l.A,b.Services.Config=f.A,b.Services.IsoCurveResponse=u.A,b.Services.RouteResponse=c.A,b.Services.Route={},b.Services.Route.RouteInstruction=p.A,b.Error=d.A,b.Helper=m.A;const w=b},3494:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n,o=r(2710);const i={uuid:(n=Math.floor(Date.now()),function(){return n++}),call:function(e){var t=o.A.getLogger("JSONP");if(t.trace("[JSONP::call ()]"),!e)throw t.error("missing parameter : options !"),new Error("missing parameter : options !");if(!e.url)throw t.error("missing parameter : options.url !"),new Error("missing parameter : options.url !");if(e.timeOut||(t.info("setting 'options.timeOut' default value"),e.timeOut=0),!e.onResponse)throw t.error("missing parameter : options.onResponse !"),new Error("missing parameter : options.onResponse !");var r="string"==typeof e.callbackSuffix?e.callbackSuffix:this.uuid(),n=!1,i=!1,a=e.url.indexOf("callback=");if(-1!==a){n=!0;var s=e.url.indexOf("&",a);-1===s&&(s=e.url.length);var l=e.url.substring(a+9,s);l&&(i=!0,e.callbackName=l,t.info("setting 'options.callbackName' value ("+e.callbackName+") from 'options.url' parameter"))}if(!n){var u=e.url.indexOf("?");-1===u?e.url=e.url+"?callback=":u===e.url.length?e.url=e.url+"callback=":e.url=e.url+"&callback=",t.info("setting callback default key in 'options.url' : "+e.url)}var c=!!e.callbackName||i;if(i||(e.callbackName||(t.info("setting 'options.callbackName' default value"),e.callbackName="callback",(r||""===r)&&(e.callbackName+=r)),e.url=e.url.replace("callback=","callback="+e.callbackName),t.info("setting callback function name in 'options.url' : "+e.url)),e.onTimeOut||(t.info("setting 'options.onTimeOut' default value"),e.onTimeOut=function(){console.log("TimeOut while invoking url : "+e.url)}),!c){var p=this,f=null;e.timeOut>0&&(f=window.setTimeout((function(){window[e.callbackName]=function(){},e.onTimeOut(),p._deleteScript(r)}),e.timeOut)),window[e.callbackName]=function(t){window.clearTimeout(f),e.onResponse(t),p._deleteScript(r)}}this._createScript(r,e.url)},_createScript:function(e,t){var r,n=document.getElementById("results"+e);(r=document.createElement("script")).setAttribute("type","text/javascript"),r.setAttribute("src",t),r.setAttribute("charset","UTF-8"),r.setAttribute("id","results"+e),r.setAttribute("async","true");var o=document.documentElement||document.getElementsByTagName("head")[0];null===n?o.appendChild(r):o.replaceChild(r,n)},_deleteScript:function(e){var t=document.getElementById("results"+e);if(t){var r=t.parentNode||document.documentElement;if(!r)return;r.removeChild(t)}}}},6250:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(3474),o=r(210),i=r(3494);const a={send:function(e){var t=e||{method:"GET",protocol:"XHR",timeOut:0,format:null,wrap:!0,nocache:!0,output:"json",callback:null,callbackSuffix:null};if("undefined"!=typeof window||"JSONP"!==e.protocol){if("XHR"===e.protocol||"json"===e.format?t.wrap=!1:"JSONP"===e.protocol&&"xml"===e.format&&(t.wrap=!0),t.callback=null,t.output=t.wrap?"json":null,t.wrap){var r={};r.output=t.output,r.callback=t.callback,delete r.callback,t.url=n.A.normalyzeUrl(e.url,r)}switch(t.protocol){case"XHR":"GET"===e.method&&e.nocache&&(t.url=n.A.normalyzeUrl(t.url,{t:(new Date).getTime()})),o.A.call(t);break;case"JSONP":t.data&&(t.url=n.A.normalyzeUrl(t.url,t.data)),i.A.call(t);break;default:throw new Error("protocol not supported (XHR|JSONP) !")}}else console.log("Value (s) for parameter (s) 'protocol=JSONP (instead use XHR)' not supported to NodeJS")}}},210:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(2710),o=r(3474),i=r(6964),a=r.n(i);const s={call:function(e){var t=n.A.getLogger("XHR");if(t.trace("[XHR::call()]"),a().polyfill(),!e.url)throw new Error("missing parameter : url is not defined !");if(!e.method)throw new Error("missing parameter : method is not defined !");e.format||(e.format="text");var r={};switch(r.url=e.url,r.data=e.data?e.data:null,r.method=e.method,r.timeOut=e.timeOut||0,r.scope=e.scope||this,r.proxy=e.proxy||null,r.content=e.content||null,r.headers=e.headers||{referer:"http://localhost"},e.method){case"DELETE":case"GET":break;case"PUT":case"POST":r.content=e.content?e.content:"application/x-www-form-urlencoded",r.headers=e.headers?e.headers:{referer:"http://localhost"};break;case"HEAD":case"OPTIONS":throw new Error("HTTP method not yet supported !");default:throw new Error("HTTP method unknown !")}switch(e.format){case"text":this.__call(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;case"json":this.__callJSON(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;case"xml":this.__callXML(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;default:throw new Error("This output Format is not yet supported !")}},__call:function(e){var t=n.A.getLogger("XHR");return t.trace("[XHR::__call()]"),new Promise((function(n,i){var a="POST"===e.method||"PUT"===e.method?1:0;e.data&&("object"==typeof e.data&&Object.keys(e.data).length||"string"==typeof e.data&&e.data.length)&&!a&&(e.url=o.A.normalyzeUrl(e.url,e.data)),t.trace("URL = ",e.url);var s=null;if("undefined"==typeof window){var l=r(3092),u={headers:{Referer:"https://localhost"}};return e.data&&"string"==typeof e.data&&a&&(u={method:e.method,body:e.data,headers:{"Content-Type":e.content,Referer:"https://localhost"}}),l(e.url,u).then((function(e){if(e.ok)n(e.text());else{var t="Errors Occured on Http Request (status : '"+e.statusText+"' | url : '"+e.url+"')",r=e.status;i({message:t,status:r})}})).catch((function(e){i({message:e,status:-1})}))}if(window.XMLHttpRequest){t.trace("XMLHttpRequest"),(s=new XMLHttpRequest).open(e.method,e.url,!0),s.overrideMimeType=e.content;var c=null;e.timeOut>0&&(t.trace("XHR - TimeOut actif !"),c=window.setTimeout((function(){i({message:"TimeOut Occured on Http Request with XMLHttpRequest !",status:-1})}),e.timeOut)),a&&(t.trace("data = ",e.data),s.setRequestHeader("Content-type",e.content)),s.onerror=function(e){console.log(e),i(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},s.ontimeout=function(e){console.log(e),i(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},s.onreadystatechange=function(e){if(4===s.readyState)if(200===s.status)window.clearTimeout(c),n(s.response);else{var t="Errors Occured on Http Request (status : '"+e.target.statusText+"' | url : '"+e.target.responseURL+"' | response : '"+e.target.response+"')",r=e.target.status;i({message:t,status:r})}};var p=e.data&&a?e.data:null;s.send(p)}else{if(!window.XDomainRequest)throw new Error("CORS not supported");t.trace("XDomainRequest"),(s=new XDomainRequest).open(e.method,e.url),s.overrideMimeType=e.content,e.timeOut>0&&(s.timeout=e.timeout,t.trace("XHR - TimeOut actif !")),a&&s.setRequestHeader("Content-type",e.content),s.onerror=function(){i(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},s.ontimeout=function(){i(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},s.onload=function(e){if(200===s.status)n(s.responseText);else{var t="Errors Occured on Http Request (status : '"+e.target.statusText+"' | url : '"+e.target.responseURL+"')",r=e.target.status;i({message:t,status:r})}};var f=e.data&&a?e.data:null;s.send(f)}}))},__callJSON:function(e){return this.__call(e).then(JSON.parse).catch((function(t){console.log("_callJSON failed on : ",e.url,t)}))},__callXML:function(e){return this.__call(e).then((function(e){var t;"undefined"==typeof window?t=(new(0,r(8978).S4)).parseFromString(e,"text/xml"):window.DOMParser?t=(new window.DOMParser).parseFromString(e,"text/xml"):((t=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,t.loadXML(e));return t})).catch((function(t){console.log("__callXML failed on : ",e.url,t)}))}}},2366:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),a=r(895),s=r(7966),l=r(8933),u=r(5325);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","Alti"));if(this.CLASSNAME="Alti",a.A.apply(this,arguments),this.logger=n.A.getLogger("Gp.Services.Alti"),this.logger.trace("[Constructeur Alti (options)]"),!e.positions)throw new Error(o.A.getMessage("PARAM_MISSING","positions"));if(0===e.positions.length)throw new Error(o.A.getMessage("PARAM_EMPTY","positions"));if(this.options.positions=e.positions,this.options.outputFormat="string"==typeof e.outputFormat?e.outputFormat.toLowerCase():"xml",this.options.resource=e.resource||"ign_rge_alti_wld",this.options.sampling=e.sampling||null,this.options.api="string"==typeof e.api?e.api.toUpperCase():"REST","REST"===this.options.api&&(this.options.httpMethod="GET"),this.options.zonly=e.zonly||!1,this.options.measures=e.measures||!1,!this.options.serverUrl){var t=s.A.Alti.newUrl(),r=null;switch(this.options.api){case"WPS":r=t.wps;break;case"REST":r=t[(e.sampling?"profil":"elevation")+"-"+this.options.outputFormat];break;default:throw new Error(o.A.getMessage("PARAM_UNKNOWN","api"))}if(!r)throw new Error("Url by default not found !");this.options.serverUrl=r,this.logger.trace("Server URL by default : "+this.options.serverUrl)}var i=this.options.serverUrl.lastIndexOf(".");if(-1!==i){var l=this.options.serverUrl.substring(i+1);if(l&&l.length<5)switch(this.logger.trace("Server Extension URL : "+l),l.toLowerCase()){case"json":case"xml":this.options.outputFormat=l.toLowerCase();break;default:throw new Error("type of service : unknown or unsupported (json or xml) !")}}}c.prototype=Object.create(a.A.prototype,{}),c.prototype.constructor=c,c.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,onSuccess:function(e){this.request=e,t.call(this,this.request)},onError:e,scope:this,resource:this.options.resource,positions:this.options.positions,outputFormat:this.options.outputFormat,sampling:this.options.sampling,api:this.options.api,zonly:this.options.zonly,measures:this.options.measures};l.A.build(r)},c.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,outputFormat:this.options.outputFormat,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};u.A.build(r)}else e.call(this,new i.A(o.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const p=c},3667:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(3565),o=r(3041),i=r(9206),a={};a.READERS={elevations:function(e){var t=new n.A;if(e.hasChildNodes())for(var r,o,i=e.childNodes,s=0;s{"use strict";r.d(t,{A:()=>s});var n=r(2710),o=r(8288),i=r(6933),a=r(4359);const s={build:function(e){n.A.getLogger("AltiRequestFactory").trace(["AltiRequestFactory::build()"]);var t=null,r={type:e.sampling?"Profil":"Elevation",method:e.httpMethod,param:{positions:null,delimiter:null,indent:null,crs:null,format:null,sampling:null,zonly:null,measures:null}};r.param.positions=e.positions,r.param.format=e.outputFormat,r.param.sampling=e.sampling,r.param.zonly=e.zonly,r.param.measures=e.measures,r.param.resource=e.resource;var s=!(null===e.onError||"function"!=typeof e.onError),l=!(null===e.onSuccess||"function"!=typeof e.onSuccess),u=null;switch(e.api){case"REST":var c=new i.A(r);if(!c.processRequestString()){if(u="Error in process request (rest) !",s)return void e.onError.call(e.scope,new o.A(u));throw new Error(u)}t=c.requestString;break;case"WPS":if(r.wps={service:null,version:null,identifier:null,rawdataoutput:null,request:null},!(t=a.A.build(r))){if(u="Error in process request (wps) !",s)return void e.onError.call(e.scope,new o.A(u));throw new Error(u)}break;default:if(u="Type of API is not supported by service (REST or WPS) !",s)return void e.onError.call(e.scope,new o.A(u));throw new Error(u)}return l&&e.onSuccess.call(e.scope,t),t}}},6933:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(2710),o=r(1097),i=r(5974),a=r(3471);function s(e){if(this.logger=n.A.getLogger("AltiRequestREST"),this.logger.trace("[Constructeur AltiRequestREST ()]"),!(this instanceof s))throw new TypeError("AltiRequestREST constructor cannot be called as a function.");if(this.options=e||{},!this.options)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));if(!this.options.type)throw new Error(o.A.getMessage("PARAM_EMPTY","type (Elevation or Profil)"));switch(this.DataObject=null,this.options.type){case"Elevation":this.DataObject=new i.A(this.options.param);break;case"Profil":this.DataObject=new a.A(this.options.param);break;default:throw new Error(o.A.getMessage("PARAM_TYPE","type (Elevation or Profil)"))}this.method=this.options.method||"GET"}s.prototype={requestString:null,constructor:s,template:{get:{value:"lon=__LON__&lat=__LAT__&indent=__INDENT__&crs='__CRS__'&resource=__RESOURCE__&measures=__MEASURES__",input:{point:"&zonly=__ZONLY__",profil:"&sampling=__SAMPLING__"}},post:{value:"lon=__LON__\nlat=__LAT__\nindent=__INDENT__\ncrs='__CRS__'\nresource='__RESOURCE__'\nmeasures='__MEASURES__'\n",input:{point:"zonly=__ZONLY__\n",profil:"sampling=__SAMPLING__"}}},processRequestString:function(){this.logger.trace("AltiRequestREST::processRequestString ()");var e="";return"POST"===this.method?e=this.template.post.value:"GET"===this.method&&(e=this.template.get.value),e=(e=(e=(e=(e=(e=e.replace(/__LON__/g,this.DataObject.getLon())).replace(/__LAT__/g,this.DataObject.getLat())).replace(/__INDENT__/g,this.DataObject.indent)).replace(/__CRS__/g,this.DataObject.crs)).replace(/__RESOURCE__/g,this.DataObject.resource)).replace(/__MEASURES__/g,this.DataObject.measures),e+=this.__addDataInputs(),this.logger.trace("traduction tmpl",e),this.requestString=e,this.requestString},__addDataInputs:function(){var e;if(this.logger.trace("AltiRequestREST::addDataInput ()"),"POST"===this.method)e=this.template.post;else{if("GET"!==this.method)throw new Error("No other HTTP method supported by the service !");e=this.template.get}if("AltiElevationRequest"===this.DataObject.CLASSNAME)return e.input.point.replace(/__ZONLY__/g,this.DataObject.zonly.toString());if("AltiProfilRequest"===this.DataObject.CLASSNAME)return e.input.profil.replace(/__SAMPLING__/g,this.DataObject.sampling);throw new Error("No other object supported than elevation or profil !?")}};const l=s},4359:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(2710),o=r(1097),i=r(4841),a=r(5974),s=r(3471);const l={build:function(e){if(n.A.getLogger("AltiRequestWPS").trace(["AltiRequestWPS::build()"]),!e)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));if(!e.type)throw new Error(o.A.getMessage("PARAM_EMPTY","type (Elevation or Profil)"));var t=null;switch(e.type){case"Elevation":e.wps.identifier="gs:WPSElevation",t=new a.A(e.param);break;case"Profil":e.wps.identifier="gs:WPSLineElevation",t=new s.A(e.param);break;default:throw new Error(o.A.getMessage("PARAM_TYPE","type (Elevation or Profil)"))}var r={data:t,method:e.method,param:e.wps},l=new i.A(r);if(!l.processRequestString())throw new Error("Enable to process request !");return l.requestString}}},5974:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(2710),o=r(6221);function i(e){if(!(this instanceof i))throw new TypeError("AltiElevationRequest constructor cannot be called as a function.");this.CLASSNAME="AltiElevationRequest",o.A.apply(this,arguments),this.logger=n.A.getLogger(),this.logger.trace("[Constructeur AltiElevationRequest ()]"),this.zonly=this.options.zonly||!1}i.prototype=Object.create(o.A.prototype,{zonly:{get:function(){return this._zonly},set:function(e){this._zonly=e}}}),i.prototype.constructor=i,i.prototype.getData=function(){var e=[];return e.push({k:"lon",v:this.getLon()}),e.push({k:"lat",v:this.getLat()}),e.push({k:"indent",v:this.indent}),e.push({k:"crs",v:this.crs}),e.push({k:"zonly",v:this.zonly}),e.push({k:"format",v:this.format}),e.push({k:"resource",v:this.resource}),e};const a=i},3471:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(2710),o=r(6221);function i(e){if(!(this instanceof i))throw new TypeError("AltiProfilRequest constructor cannot be called as a function.");this.CLASSNAME="AltiProfilRequest",o.A.apply(this,arguments),this.logger=n.A.getLogger(),this.logger.trace("[Constructeur AltiProfilRequest ()]"),this.sampling=this.options.sampling||3}i.prototype=Object.create(o.A.prototype,{sampling:{get:function(){return this._sampling},set:function(e){this._sampling=e}}}),i.prototype.constructor=i,i.prototype.getData=function(){var e=[];return e.push({k:"lon",v:this.getLon()}),e.push({k:"lat",v:this.getLat()}),e.push({k:"indent",v:this.indent}),e.push({k:"crs",v:this.crs}),e.push({k:"sampling",v:this.sampling}),e.push({k:"format",v:this.format}),e.push({k:"resource",v:this.resource}),e};const a=i},6221:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("AltiRequest constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur AltiRequest ()]"),this.options=e||{},this.positions=this.options.positions||[],this.delimiter=this.options.delimiter||"|",this.indent=this.options.indent||!1,this.crs=this.options.crs||"CRS:84",this.format=this.options.format||"json",this.resource=this.options.resource,this.measures=this.options.measures||!1}o.CLASSNAME="AltiRequest",o.prototype={constructor:o,setPositions:function(e){for(var t=[],r=0;rt||e{"use strict";r.d(t,{A:()=>c});var n=r(2710),o=r(1097),i=r(8288),a=r(4904),s=r(3667),l=r(3565),u=r(3041);const c={build:function(e){var t=n.A.getLogger("AltiResponseFactory");t.trace(["AltiResponseFactory::build()"]);var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{switch(e.outputFormat){case"xml":t.trace("analyze response : xml");try{var c=new a.A({reader:s.A});if("string"==typeof e.response?c.setXMLString(e.response):c.setXMLDoc(e.response),!(r=c.parse()))throw new Error(o.A.getMessage("SERVICE_RESPONSE_EXCEPTION_2"))}catch(t){var p=t.message;return void e.onError.call(e.scope,new i.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",p),status:200,type:i.A.TYPE_SRVERR}))}break;case"json":t.trace("analyze response : json"),t.trace("analyze response : ",typeof e.response);var f=null;if((f="string"==typeof e.response?JSON.parse(e.response):e.response)&&f.error)return void e.onError.call(e.scope,new i.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",f.error.description),status:200,type:i.A.TYPE_SRVERR}));if(f){var h,d=f.elevations,m=new l.A;if(Array.isArray(d)&&d.length)for(var g=0;g{"use strict";function n(){if(!(this instanceof n))throw new TypeError("AltiResponse constructor cannot be called as a function.");this.elevations=[]}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},3041:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("Elevation constructor cannot be called as a function.");this.z=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},9206:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("Measure constructor cannot be called as a function.");this.source_name=null,this.source_measure=null,this.z=null,this.acc=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},9338:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(895),o=r(7966),i=r(4889),a=r(2710),s=r(1097),l=r(3474),u=r(8288);function c(e){if(!(this instanceof c))throw new TypeError(s.A.getMessage("CLASS_CONSTRUCTOR","AutoComplete"));this.CLASSNAME="AutoComplete",this.logger=a.A.getLogger("Gp.Services.AutoComplete"),this.logger.trace("[Constructeur AutoComplete (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=o.A.AutoComplete.newUrl()),n.A.apply(this,arguments),!t.text)throw new Error(s.A.getMessage("PARAM_MISSING","text"));this.options.text=t.text,t.type||(t.type=["StreetAddress,PositionOfInterest"]),this.options.type=t.type,this.options.territory=t.terr||"",this.options.maximumResponses=t.maximumResponses||10,"XHR"===this.options.protocol&&"POST"===this.options.httpMethod&&(this.logger.warn("Le service ne gére pas le mode d'interrogation en POST, on bascule sur du GET !"),this.options.httpMethod="GET"),this.options.outputFormat=this.options.rawResponse?"":"json"}c.prototype=Object.create(n.A.prototype,{}),c.prototype.constructor=c,c.prototype.patchOptionConvertor=function(e){const t=e;return t.filterOptions&&(this.logger.warn("The parameter 'filterOptions' is deprecated"),t.filterOptions.type&&(this.logger.warn("The parameter 'filterOptions.type' is deprecated"),t.type||(t.type=t.filterOptions.type)),t.filterOptions.territory&&(this.logger.warn("The parameter 'filterOptions.territory' is deprecated"),t.terr||(t.terr=t.filterOptions.territory)),delete t.filterOptions),t},c.prototype.buildRequest=function(e,t){var r="";this.options.territory&&(r=this.options.territory);var n="";this.options.type&&(n=this.options.type.join(",")),this.request=l.A.normalyzeParameters({text:encodeURIComponent(this.options.text),type:n,terr:r,maximumResponses:this.options.maximumResponses}),this.request?t.call(this,this.request):e.call(this,new u.A(s.A.getMessage("SERVICE_REQUEST_BUILD")))},c.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onSuccess:t,onError:e,scope:this};i.A.build(r)}else e.call(this,new u.A(s.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const p=c},4889:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(2710),o=r(1097),i=r(8288),a=r(5941),s=r(9924);const l={build:function(e){var t=n.A.getLogger("AutoCompleteResponseFactory");t.trace(["AutoCompleteResponseFactory::build()"]);var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{var l=null;if(l="string"==typeof e.response?JSON.parse(e.response):e.response){if(l.error)return void e.onError.call(e.scope,new i.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",l.error.description),status:l.error.code,type:i.A.TYPE_SRVERR}));if(r=new a.A,!l.results||!Array.isArray(l.results))return void e.onError.call(e.scope,new i.A(o.A.getMessage("SERVICE_RESPONSE_FORMAT_3")));for(var u=null,c=0;c{"use strict";function n(){if(!(this instanceof n))throw new TypeError("AutoCompleteResponse constructor cannot be called as a function.");this.suggestedLocations=[]}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},9924:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("SuggestedLocation constructor cannot be called as a function.");this.type=null,this.position={x:null,y:null},this.commune=null,this.fullText=null,this.postalCode=null,this.classification=null,this.street=null,this.poi=null,this.kind=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},895:(e,t,r)=>{"use strict";r.d(t,{A:()=>c});var n=r(2710),o=r(3474),i=r(1097),a=r(6250),s=r(8288),l=r(9032);function u(e){if(!(this instanceof u))throw new TypeError(i.A.getMessage("CLASS_CONSTRUCTOR"));for(var t in this.logger=n.A.getLogger("CommonService"),this.logger.trace("[Constructeur CommonService (options)]"),this.options={protocol:"XHR",ssl:!0,proxyURL:"",callbackSuffix:null,httpMethod:"GET",timeOut:0,rawResponse:!1,scope:this,onSuccess:function(e){console.log("onSuccess - la reponse est la suivante : ",e)},onFailure:function(e){200!==e.status&&e.status?console.log("onFailure - Erreur (",e.status,") : ",e.message):console.log("onFailure : ",e.message)}},e)e.hasOwnProperty(t)&&(this.options[t]=e[t]);if(this.options.rawResponse&&!this.options.onSuccess&&(this.options.onSuccess=function(e){console.log("onSuccess - la réponse brute du service est la suivante : ",e)}),!!(null===this.options.onSuccess||"function"!=typeof this.options.onSuccess))throw new Error(i.A.getMessage("PARAM_MISSING","onSuccess()"));switch(this.options.httpMethod="string"==typeof e.httpMethod?e.httpMethod.toUpperCase():"GET",this.options.httpMethod){case"POST":case"GET":break;case"PUT":case"DELETE":case"HEAD":case"OPTIONS":throw new Error(i.A.getMessage("PARAM_NOT_SUPPORT","httpMethod"));default:throw new Error(i.A.getMessage("PARAM_UNKNOWN","httpMethod"))}switch(this.options.protocol="string"==typeof e.protocol?e.protocol.toUpperCase():"XHR",this.options.protocol){case"JSONP":case"XHR":break;default:throw new Error(i.A.getMessage("PARAM_UNKNOWN","protocol"))}if("undefined"==typeof window&&"JSONP"===this.options.protocol)throw new Error(i.A.getMessage("PARAM_NOT_SUPPORT_NODEJS","protocol=JSONP (instead use XHR)"));"JSONP"===this.options.protocol&&(this.options.httpMethod="GET"),this.options.nocache=e.nocache||!1,this.options.outputFormat=null,this.request=null,this.response=null}u.prototype={constructor:u,call:function(){this.logger.trace("CommonService::call ()");var e=this;function t(t){this.logger.trace("CommonService::onBuildRequest : ",t),this.callService.call(e,o,r)}function r(t){this.logger.trace("CommonService::onCallService : ",t),this.analyzeResponse.call(e,o,n)}function n(e){if(this.logger.trace("CommonService::onAnalyzeResponse : ",e),!e)return o.call(this,new s.A("Analyse de la reponse en échec !?"));this.options.onSuccess.call(this,e)}function o(e){this.logger.trace("CommonService::onError()");var t=e;t instanceof s.A||(t=new s.A(e.message)),this.options.onFailure.call(this,t)}(function(){this.logger.trace("CommonService::run ()"),this.buildRequest.call(e,o,t)}).call(e)},buildRequest:function(e,t){this.logger.error("overwritten method !"),e&&e.call(this,"This method must be overwritten !"),t.call(this,"This method must be overwritten !")},callService:function(e,t){var r=null,n=this.request,i=!(!this.options.proxyURL||"XHR"!==this.options.protocol),u={"gp-access-lib":l.rE};this.options.apiKey&&(u.apiKey=this.options.apiKey),this.options.serverUrl=o.A.normalyzeUrl(this.options.serverUrl,u,!1),i&&("GET"===this.options.httpMethod&&(r=this.options.proxyURL+o.A.normalyzeUrl(this.options.serverUrl,this.request,!0),n=null),"POST"===this.options.httpMethod&&(r=this.options.proxyURL+o.A.normalyzeUrl(this.options.serverUrl,null,!0),n=this.request));var c=this,p={url:r||this.options.serverUrl,method:this.options.httpMethod,protocol:this.options.protocol,timeOut:this.options.timeOut||0,format:this.options.outputFormat,nocache:this.options.nocache||!1,wrap:"XHR"!==this.options.protocol,callbackSuffix:this.options.callbackSuffix,data:n,headers:null,content:this.options.contentType||"application/xml",scope:this.options.scope||this,onResponse:function(r){c.logger.trace("callService::onResponse()");var n=null;if("XHR"===c.options.protocol&&(c.logger.trace("Response XHR",r),n=r),"JSONP"===c.options.protocol){if(c.logger.trace("Response JSON",r),!r)return void e.call(c,new s.A("Le contenu de la reponse est vide !?"));if(r.http){if(200!==r.http.status)return void e.call(c,new s.A({status:r.http.status,message:r.http.error,type:s.A.TYPE_SRVERR}));n=r.xml,c.options.rawResponse&&(n=r)}else n=r}if("function"==typeof c.options.onBeforeParse){var o=c.options.onBeforeParse(n);"string"==typeof o&&(n=o)}c.response=n,t.call(c,n)},onFailure:function(t){c.logger.trace("callService::onFailure()"),t.type=s.A.TYPE_SRVERR,e.call(c,new s.A(t))},onTimeOut:function(){c.logger.trace("callService::onTimeOut()"),e.call(c,new s.A("TimeOut!"))}};a.A.send(p)},analyzeResponse:function(e,t){this.logger.error("overwritten method !"),e&&e.call(this,"This method must be overwritten !"),t.call(this,"This method must be overwritten !")}};const c=u},4154:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(895),a=r(7966),s=r(9939);function l(e){if(!(this instanceof l))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","Config"));if(this.CLASSNAME="Config",this.logger=n.A.getLogger("Gp.Config"),this.logger.trace("[Constructeur Config (options)]"),!!(null===e.onSuccess||"function"!=typeof e.onSuccess))throw new Error(o.A.getMessage("PARAM_MISSING","onSuccess()"));e.apiKey||e.customConfigFile||(e.apiKey="full"),this.options={},this.options.onSuccess=e.onSuccess,this.options.onFailure=e.onFailure,this.options.sync=e.sync||!1,this.options.listConfigUrls=e.customConfigFile?[e.customConfigFile]:Array.isArray(e.apiKey)?a.A.Config.url(e.apiKey):a.A.Config.url(e.apiKey.split(","))}l.prototype=Object.create(i.A.prototype,{}),l.prototype.constructor=l,l.prototype.buildRequest=function(e,t){this.listConfigUrls=this.options.listConfigUrls,this.listConfigUrls?t.call(this,this.listConfigUrls):e.call(this,new Error("url by default not found !"))},l.prototype.callService=function(e,t){this.options.sync?c.call(this,e,t):u.call(this,e,t)};var u=function(e,t){this.listConfigResults=[];let n=null;if("undefined"==typeof window){var o=r(3092);n=o}else n=window.fetch;var i=e=>n(e,{credentials:"same-origin"}).then((e=>{if(e.ok)return e.json().then((e=>e)).catch((e=>{throw new Error("Exception Json : "+e)}));throw new Error("Exception HTTP : "+e.status+" (status code) !")})).catch((e=>new Promise(((t,r)=>{r(e)})))),a=[];for(let e=0;e{if(!e)throw new Error("results config empty !?");e.forEach((e=>{this.listConfigResults.push(e)}))})).then((()=>{t.call(this,this.listConfigResults)})).catch((t=>{e.call(this,t)}))},c=function(e,t){this.listConfigResults=[];for(var r=0;r{"use strict";function n(){if(!(this instanceof n))throw new TypeError("ConfigInterface constructor cannot be called as a function.");this.generalOptions={apiKeys:{},title:null,defaultGMLGFIStyle:null,theme:null,wgs84Resolutions:[]},this.layers={},this.tileMatrixSets={}}r.d(t,{A:()=>o}),n.prototype={constructor:n,isKeyConfLoaded:function(e){if(e)return!!this.generalOptions.apiKeys[e]},getLayersId:function(e){return this.generalOptions.apiKeys[e]},getLayerId:function(e,t){if(e&&t){var r=null;if(this.layers){var n=this.layers;for(var o in n)if(n.hasOwnProperty(o)){var i=o.split("$");if(e===i[0]&&i[1]){var a=i[1].split(":");if(i[1].split(";")[1]===t.toUpperCase()){r=o;break}if(a[2]===t.toUpperCase()){r=o;break}}}}if(r)return r}},getLayersConf:function(e){var t={},r=this.getLayersId(e);if(r)for(var n=0;n{"use strict";r.d(t,{A:()=>o});var n={ssl:!0,newUrl:function(e){return(!1===n.ssl?"http://":"https://")+"data.geopf.fr"+e},Alti:{new_key:{"elevation-json":"/altimetrie/1.0/calcul/alti/rest/elevation.json","elevation-xml":"/altimetrie/1.0/calcul/alti/rest/elevation.xml","profil-json":"/altimetrie/1.0/calcul/alti/rest/elevationLine.json","profil-xml":"/altimetrie/1.0/calcul/alti/rest/elevationLine.xml"},newUrl:function(){return{"elevation-json":n.newUrl(this.new_key["elevation-json"]),"elevation-xml":n.newUrl(this.new_key["elevation-xml"]),"profil-json":n.newUrl(this.new_key["profil-json"]),"profil-xml":n.newUrl(this.new_key["profil-xml"])}}},ProcessIsoCurve:{new_key:"/navigation/isochrone",newUrl:function(){return n.newUrl(this.new_key)}},Config:{_key:"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/dist/",url:function(e){Array.isArray(e)||(e=e.split(","));for(var t=[],r=0;r{"use strict";r.d(t,{A:()=>u});var n=r(1097),o=r(8288),i=r(1135),a=r(6025);function s(){if(!(this instanceof s))throw new TypeError("GeocodeResponseParser constructor cannot be called as a function.")}function l(e,t){var r=new a.A;if(e.geometry&&"Point"===e.geometry.type&&(r.position={lon:e.geometry.coordinates[0],lat:e.geometry.coordinates[1]}),e.properties){for(var n in e.properties)"score"===n?r.accuracy=e.properties[n]:"_type"===n?"address"===e.properties[n]?r.type="StreetAddress":"poi"===e.properties[n]?r.type="PositionOfInterest":"parcel"!==e.properties[n]&&"cadastral"!==e.properties[n]||(r.type="CadastralParcel"):r.placeAttributes[n]=e.properties[n];"address"===e.properties._type&&(r.matchType=void 0!==e.properties.number&&null!==e.properties.number?"street number":"street")}t.locations.push(r)}s.prototype={constructor:s,parse:function(e){var t=new i.A;const r=JSON.parse(e);if("FeatureCollection"===r.type)for(var a=0;a{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),a=r(895),s=r(7966),l=r(6767),u=r(9375);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","Geocode"));this.CLASSNAME="Geocode",this.logger=n.A.getLogger("Gp.Services.Geocode"),this.logger.trace("[Constructeur Geocode (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=s.A.Geocode.newUrl()),a.A.apply(this,[t]),!t.hasOwnProperty("query"))throw new Error(o.A.getMessage("PARAM_MISSING","query"));if(this.options.query=t.query,t.index||(this.options.index=t.index="StreetAddress"),t.filters)for(var r=Object.keys(t.filters),i=0;i0?t.index=t.filters.type[0]:t.index=t.filters.type),delete t.filters.type),t.filters.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),delete t.filters.bbox)),delete t.filterOptions),t.position&&(t.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),t.position.lon||(t.position.lon=t.position.x),delete t.position.x),t.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),t.position.lat||(t.position.lat=t.position.y),delete t.position.y)),t.returnFreeForm&&(this.logger.warn("The parameter 'returnFreeForm' is deprecated"),delete t.returnFreeForm),t.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete t.srs),t},c.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,geocodeMethod:"search",query:this.options.query,index:this.options.index,returnTrueGeometry:this.options.returnTrueGeometry,position:this.options.position,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=l.A.build(r),this.request?t.call(this,this.request):e.call(this,new i.A(o.A.getMessage("SERVICE_REQUEST_BUILD")))},c.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};u.A.build(r)}else e.call(this,new i.A(o.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const p=c},6767:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(2710),o=r(3955);const i={build:function(e){var t=n.A.getLogger("GeocodeRequestFactory");t.trace(["GeocodeRequestFactory::build()"]);var r=e||{},i=new o.A(r);if(!i.processRequestString())throw new Error("Error process request (rest) !");var a=i.requestString;return t.trace(a),a}}},3955:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(2710),o=r(1097),i=r(3757);function a(e){if(this.logger=n.A.getLogger("GeocodeRequestREST"),this.logger.trace("[Constructeur GeocodeRequestREST ()]"),!(this instanceof a))throw new TypeError("GeocodeRequestREST constructor cannot be called as a function.");if(!e)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));this.settings=e}a.prototype={requestString:null,constructor:a,processRequestString:function(){var e="";const t=new i.A(this.settings).getParams();for(var r=0;r{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("GeocodeParamREST constructor cannot be called as a function.");if(this.logger=n.A.getLogger(),this.logger.trace("[Constructeur GeocodeParamREST ()]"),this.options=e||{},!this.options.geocodeMethod||"search"!==this.options.geocodeMethod&&"reverse"!==this.options.geocodeMethod)throw new Error("Error geocodeMethod not valid");this.geocodeMethod=this.options.geocodeMethod,this.query=void 0!==this.options?this.options.query:null,this.searchGeometry=this.options.searchGeometry||null,this.index=this.options.index||null,this.lon=this.options.position&&this.options.position.lon?this.options.position.lon:null,this.lat=this.options.position&&this.options.position.lat?this.options.position.lat:null,this.maxResp=this.options.maxResp||null,this.returnTrueGeometry=this.options.returnTrueGeometry||null,this.filters=this.options.filters||{}}o.CLASSNAME="GeocodeParamREST",o.prototype={constructor:o,getFilters:function(){var e={};for(var t in this.filters)this.filters.hasOwnProperty(t)&&(e[t]=this.filters[t]);return e},getIndex:function(){return void 0===this.index?null:"StreetAddress"===this.index?"address":"CadastralParcel"===this.index?"parcel":"PositionOfInterest"===this.index?"poi":"location"===this.index?"location":this.index},getSearchGeometry:function(){return JSON.stringify(this.searchGeometry)}},o.prototype.getParams=function(){var e=[];"search"===this.geocodeMethod&&e.push({k:"q",v:this.query}),this.index&&e.push({k:"index",v:this.getIndex()}),"reverse"===this.geocodeMethod&&this.searchGeometry&&e.push({k:"searchgeom",v:this.getSearchGeometry()}),this.lon&&this.lat&&(e.push({k:"lon",v:this.lon}),e.push({k:"lat",v:this.lat})),this.maxResp&&e.push({k:"limit",v:this.maxResp}),this.returnTrueGeometry&&e.push({k:"returntruegeometry",v:this.returnTrueGeometry});const t=this.getFilters();for(var r in t)e.push({k:r,v:t[r]});return e};const i=o},9375:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(8288),o=r(1097),i=r(9723);const a={build:function(e){var t=null;if(e.response){if(e.rawResponse)t=e.response;else{try{if(!(t=(new i.A).parse(e.response)))throw new Error("L'analyse de la réponse du service !?")}catch(t){var r=t.message;return"string"==typeof e.response?r+="('"+e.response+"')":r+="('"+e.response.documentElement.innerHTML+"')",void e.onError.call(e.scope,new n.A({message:o.A.getMessage("SERVICE_RESPONSE_ANALYSE",r),type:n.A.TYPE_UNKERR,status:-1}))}if(t.exceptionReport)return void e.onError.call(e.scope,new n.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",t.exceptionReport),type:n.A.TYPE_SRVERR,status:200}))}e.onSuccess.call(e.scope,t)}else e.onError.call(e.scope,new n.A({message:o.A.getMessage("SERVICE_RESPONSE_EMPTY"),type:n.A.TYPE_SRVERR,status:-1}))}}},1135:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("GeocodeResponse constructor cannot be called as a function.");this.locations=[]}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},6025:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("GeocodedLocation constructor cannot be called as a function.");this.position=null,this.matchType=null,this.placeAttributes={},this.type=null,this.accuracy=null,this.CLASSNAME="GeocodedLocation"}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},6064:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),a=r(895),s=r(7966),l=r(6767),u=r(9375);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","ReverseGeocode"));this.CLASSNAME="ReverseGeocode",this.logger=n.A.getLogger("Gp.Services.ReverseGeocode"),this.logger.trace("[Constructeur ReverseGeocode (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=s.A.ReverseGeocode.newUrl()),a.A.apply(this,[t]),t.searchGeometry)this.options.searchGeometry=t.searchGeometry;else if(!t.position)throw new Error(o.A.getMessage("PARAM_MISSING","searchGeometry"));if(t.index||(this.options.index=t.index="StreetAddress"),t.filters)for(var r=Object.keys(t.filters),i=0;i0?t.index=t.filterOptions.type[0]:t.index=t.filterOptions.type),delete t.filterOptions.type),t.filterOptions.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),t.searchGeometry||(t.searchGeometry=this.bbox2Json(t.filterOptions.bbox)),delete t.filterOptions.bbox),t.filterOptions.circle&&(this.logger.warn("The parameter 'filterOptions.circle' is deprecated"),t.searchGeometry||(t.searchGeometry=this.circle2Json(t.filterOptions.circle)),delete t.filterOptions.circle),t.filterOptions.polygon&&(this.logger.warn("The parameter 'filterOptions.polygon' is deprecated"),t.searchGeometry||(t.searchGeometry=this.polygon2Json(t.filterOptions.polygon)),delete t.filterOptions.polygon),!t.filters&&Object.keys(t.filterOptions).length>0&&(t.filters=t.filterOptions),delete t.filterOptions),t.position&&(t.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),t.position.lon||(t.position.lon=t.position.x),delete t.position.x),t.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),t.position.lat||(t.position.lat=t.position.y),delete t.position.y)),t.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete t.srs),t},c.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,geocodeMethod:"reverse",searchGeometry:this.options.searchGeometry,index:this.options.index,position:this.options.position,returnTrueGeometry:this.options.returnTrueGeometry,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=l.A.build(r),this.request?t.call(this,this.request):e.call(this,new i.A(o.A.getMessage("SERVICE_REQUEST_BUILD")))},c.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};u.A.build(r)}else e.call(this,new i.A(o.A.getMessage("SERVICE_RESPONSE_EMPTY")))},c.prototype.bbox2Json=function(e){return{type:"Polygon",coordinates:[[[e.left,e.top],[e.right,e.top],[e.right,e.bottom],[e.left,e.bottom],[e.left,e.top]]]}},c.prototype.circle2Json=function(e){return{type:"Circle",radius:e.radius,coordinates:[e.x,e.y]}},c.prototype.polygon2Json=function(e){for(var t={type:"Polygon",coordinates:[[]]},r=0;r{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),a=r(895),s=r(7966),l=r(9721),u=r(8297);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","ProcessIsoCurve"));if(this.CLASSNAME="ProcessIsoCurve",a.A.apply(this,arguments),this.logger=n.A.getLogger("Gp.Services.ProcessIsoCurve"),this.logger.trace("[Constructeur ProcessIsoCurve (options)]"),!e.position)throw new Error(o.A.getMessage("PARAM_MISSING","position"));if(null===e.position.x)throw new Error(o.A.getMessage("PARAM_MISSING","position.x"));if(null===e.position.y)throw new Error(o.A.getMessage("PARAM_MISSING","position.y"));if(!e.time&&!e.distance)throw new Error("Parameter (s) 'distance' missing. Parameter time to calculate an isochrone, parameter distance for an isodistance");if(!e.time&&e.distance&&(this.options.method="distance",this.options.time&&delete this.options.time),e.time&&!e.distance&&(this.options.method="time",this.options.distance&&delete this.options.distance),this.options.method=this.options.method||"time",this.options.resource=e.resource||"bdtopo-valhalla",this.options.exclusions=e.exclusions||[],this.options.reverse=e.reverse||!1,this.options.srs=e.srs||"EPSG:4326",this.options.distanceUnit=e.distanceUnit||"m",this.options.timeUnit=e.timeUnit||"second",e.smoothing&&this.logger.warn("options.smoothing is DEPRECATED"),this.options.smoothing=!1,e.holes&&this.logger.warn("options.holes is DEPRECATED"),this.options.holes=!1,e.graph?("Voiture"===e.graph&&(this.options.graph="car"),"Pieton"===e.graph&&(this.options.graph="pedestrian")):this.options.graph="car",this.options.constraints=[],e.constraints){if(!Array.isArray(e.constraints))throw new Error(o.A.getMessage("PARAM_TYPE","constraints"));for(var t=0;t{"use strict";r.d(t,{A:()=>s});var n=r(2710),o=r(1097),i=r(527);function a(e){if(this.logger=n.A.getLogger("ProcessIsoCurveRequest"),this.logger.trace("[Constructeur ProcessIsoCurveRequest ()]"),!(this instanceof a))throw new TypeError("ProcessIsoCurveRequest constructor cannot be called as a function.");if(!e)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));this.settings=e,this.mode=this.settings.httpMethod||"GET"}a.prototype={requestString:null,constructor:a,processRequestString:function(){var e="",t=0;switch(this.mode){case"GET":this.logger.trace("Process GET Request");var r=new i.A(this.settings).getParams();for(t=0;t{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("ProcessIsoCurveParam constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur ProcessIsoCurveParam ()]"),this.options=e||{},this.id=this.options.id,this.resource=this.options.resource,this.point=this.options.position,this.crs=this.options.srs,this.profile=this.options.graph,this.constraints=this.options.constraints,this.reverse=this.options.reverse,this.timeUnit=this.options.timeUnit,this.distanceUnit=this.options.distanceUnit,"distance"===this.options.method?(this.costType="distance",this.costValue=this.options.distance,"m"===this.distanceUnit&&this.costValue>=5e4&&(this.distanceUnit="km",this.costValue/=1e3)):(this.costType="time",this.costValue=this.options.time)}o.CLASSNAME="ProcessIsoCurveParam",o.prototype={constructor:o,getLocation:function(){return this.point.x+","+this.point.y},getDistanceUnit:function(){return"m"===this.distanceUnit?"meter":"km"===this.distanceUnit?"kilometer":""},getConstraints:function(){var e=[];if(0!==this.constraints.length)for(var t=0;t{"use strict";r.d(t,{A:()=>s});var n=r(2710),o=r(1097),i=r(8288),a=r(1489);const s={build:function(e){var t=n.A.getLogger("ProcessIsoCurveResponseFactory");t.trace(["ProcessIsoCurveResponseFactory::build()"]);var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{var s;if(t.trace("analyze response : json"),s="string"==typeof e.response?JSON.parse(e.response):e.response,r=new a.A,!s)return void e.onError.call(e.scope,new i.A(o.A.getMessage("SERVICE_RESPONSE_ANALYSE",e.response)));"distance"===s.costType?(r.time="",r.distance=s.costValue):(r.time=s.costValue,r.distance=""),r.message="",r.id="",r.srs=s.crs,r.geometry=s.geometry;var l=s.point.split(",");if(r.location&&(r.location.x=l[0],r.location.y=l[1]),r.exceptionReport)return void e.onError.call(e.scope,new i.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",r.exceptionReport),type:i.A.TYPE_SRVERR,status:200}))}e.onSuccess.call(e.scope,r)}else e.onError.call(e.scope,new i.A(o.A.getMessage("SERVICE_RESPONSE_EMPTY")))}}},1489:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("ProcessIsoCurveResponse constructor cannot be called as a function.");this.message=null,this.id=null,this.location={},this.location.x=null,this.location.y=null,this.srs=null,this.geometry=null,this.time=null,this.distance=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},6759:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(2710),o=r(8288),i=r(5851);const a={build:function(e){n.A.getLogger("RouteRequestFactory").trace(["RouteRequestFactory::build()"]);var t=e||{},r=!(null===e.onError||"function"!=typeof e.onError),a=null,s=new i.A(t);if(!s.processRequestString()){if(a="Error process request (rest) !",r)return void e.onError.call(e.scope,new o.A(a));throw new Error(a)}return s.requestString}}},5851:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(2710),o=r(1097),i=r(2785);function a(e){if(this.logger=n.A.getLogger("RouteRequestREST"),this.logger.trace("[Constructeur RouteRequestREST ()]"),!(this instanceof a))throw new TypeError("RouteRequestREST constructor cannot be called as a function.");if(!e)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));this.settings=e}a.prototype={requestString:null,constructor:a,processRequestString:function(){this.logger.warn(" PROTOTYPE !");for(var e=new i.A(this.settings).getParams(),t="",r=0;r{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("RouteParamREST constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur RouteParamREST ()]"),this.options=e||{},this.resource=this.options.resource,this.start=this.options.startPoint.x+","+this.options.startPoint.y,this.end=this.options.endPoint.x+","+this.options.endPoint.y,this.intermediates=this.options.viaPoints,this.profile=this.options.graph,this.crs=this.options.srs,this.constraints=this.options.constraints,this.optimization=this.options.routePreference,this.getSteps=this.options.geometryInInstructions?"true":"false",this.distanceUnit=this.options.distanceUnit,this.timeUnit=this.options.timeUnit,this.waysAttributes=this.options.waysAttributes}o.CLASSNAME="RouteParamREST",o.prototype={constructor:o,getIntermediates:function(){var e=[];if(0!==this.intermediates.length)for(var t=0;t{"use strict";r.d(t,{A:()=>l});var n=r(2710),o=r(1097),i=r(8288),a=r(2993),s=r(7868);const l={build:function(e){var t=n.A.getLogger("RouteResponseFactory");t.trace("RouteResponseFactory::build()");var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{var l;if(t.trace("analyze response : json"),l="string"==typeof e.response?JSON.parse(e.response):e.response){if(l.message)return void e.onError.call(e.scope,new i.A(o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",l.message)));var u=[],c=[],p=[];if((r=new a.A).hasOwnProperty("totalTime")&&(r.totalTime=parseFloat(l.duration)),r.hasOwnProperty("totalDistance")&&(r.totalDistance=parseFloat(l.distance)),r.hasOwnProperty("bbox")&&(r.bbox.left=parseFloat(l.bbox[0]),r.bbox.bottom=parseFloat(l.bbox[1]),r.bbox.right=parseFloat(l.bbox[2]),r.bbox.top=parseFloat(l.bbox[3])),r.hasOwnProperty("routeGeometry")&&!e.geometryInInstructions&&(r.routeGeometry=l.geometry),r.hasOwnProperty("routeInstructions")&&e.geometryInInstructions){var f,h=l.portions;if(Array.isArray(h)&&h.length)for(f=0;f{"use strict";function n(){if(!(this instanceof n))throw new TypeError("RouteInstruction constructor cannot be called as a function.");this.duration=null,this.distance=null,this.code=null,this.instruction=null,this.geometry=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},2993:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("RouteResponse constructor cannot be called as a function.");this.totalTime=null,this.totalDistance=null,this.bbox={left:null,right:null,top:null,bottom:null},this.routeGeometry=null,this.routeInstructions=[]}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},7372:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),a=r(895),s=r(7966),l=r(6759),u=r(3753);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","Route"));if(this.CLASSNAME="Route",a.A.apply(this,arguments),this.logger=n.A.getLogger("Gp.Services.Route"),this.logger.trace("[Constructeur Route (options)]"),!e.startPoint)throw new Error(o.A.getMessage("PARAM_MISSING","startPoint"));if(null===e.startPoint.x)throw new Error(o.A.getMessage("PARAM_MISSING","startPoint.x"));if(null===e.startPoint.y)throw new Error(o.A.getMessage("PARAM_MISSING","startPoint.y"));if(!e.endPoint)throw new Error(o.A.getMessage("PARAM_MISSING","endPoint"));if(null===e.endPoint.x)throw new Error(o.A.getMessage("PARAM_MISSING","endPoint.x"));if(null===e.endPoint.y)throw new Error(o.A.getMessage("PARAM_MISSING","endPoint.y"));if(e.outputFormat&&"json"!==e.outputFormat&&this.logger.warn("options.outputFormat could only be json"),this.options.outputFormat="json",this.options.resource=e.resource||"bdtopo-osrm",this.options.startPoint=e.startPoint,this.options.endPoint=e.endPoint,this.options.viaPoints=e.viaPoints||[],this.options.routePreference=e.routePreference||"fastest",e.graph?("Voiture"===e.graph&&(this.options.graph="car"),"Pieton"===e.graph&&(this.options.graph="pedestrian")):this.options.graph="car",this.options.constraints=[],e.constraints){if(!Array.isArray(e.constraints))throw new Error(o.A.getMessage("PARAM_TYPE","constraints"));for(var t=0;t{"use strict";r.d(t,{A:()=>c});var n=r(4154),o=r(2366),i=r(1520),a=r(6064),s=r(9338),l=r(7372),u=r(7180);const c={getConfig:function(e){new n.A(e).call()},getAltitude:function(e){new o.A(e).call()},geocode:function(e){new i.A(e).call()},reverseGeocode:function(e){new a.A(e).call()},autoComplete:function(e){new s.A(e).call()},route:function(e){new l.A(e).call()},isoCurve:function(e){new u.A(e).call()}}},3474:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});const n={normalyzeParameters:function(e){var t=null;if(e){var r=[];for(var n in e)if(e.hasOwnProperty(n)){var o=e[n];o||(o=""),r.push(n+"="+o)}t=r.join("&")}return t},normalyzeUrl:function(e,t,r){var n=e;if(e){if(e.split("?").length-1>=2){var o=e.search(/\?/)+1;n=e.substring(0,o)+e.slice(o).replace(/\?/g,"&")}var i=e.indexOf("?");-1===i&&(n+="?"),-1!==i&&i!==e.length-1&&(n+="&")}return t&&(n+="string"==typeof t?t=t.replace("?",""):this.normalyzeParameters(t)),r&&(n=encodeURIComponent(n)),n},indent:function(e,t){return new Array((e||0)+1).join("\t")+t}}},2710:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(3065);const o={getLogger:function(e){if(void 0===t)var t={env:{VERBOSE:!1}};t.env.VERBOSE?n.enableAll():n.disableAll();var r=e||"default";return n.getLogger(r)}}},1097:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});const n={PARAM_MISSING:"Parameter(s) '%var%' missing",PARAM_EMPTY:"Parameter(s) '%var%' empty",PARAM_TYPE:"Wrong type(s) for parameter(s) '%var%'",PARAM_FORMAT:"Parameter(s) '%var%' not correctly formatted",PARAM_NOT_SUPPORT:"Value(s) for parameter(s) '%var%' not supported",PARAM_NOT_SUPPORT_NODEJS:"Value(s) for parameter(s) '%var%' not supported to NodeJS",PARAM_UNKNOWN:"Value(s) for parameter(s) '%var%' unknown",SERVICE_REQUEST_BUILD:"An error occurred during the request building of the service",SERVICE_REQUEST_EMPTY:"The request sent to the service is empty",SERVICE_RESPONSE_EXCEPTION:"The service returned an exception : '%var%'",SERVICE_RESPONSE_EXCEPTION_2:"The service returned an exception",SERVICE_RESPONSE_ANALYSE:"An error occurred while parsing the response '%var%' of the service",SERVICE_RESPONSE_ANALYSE_2:"An unknown error occurred while parsing the response",SERVICE_RESPONSE_EMPTY:"The response of the service is empty",SERVICE_RESPONSE_EMPTY_2:"The response from the service could not be analyzed or is empty",SERVICE_RESPONSE_FORMAT:"The format of the service response is not supported (handled format(s) : '%var%')",SERVICE_RESPONSE_FORMAT_2:"The format of the service response is not supported",SERVICE_RESPONSE_FORMAT_3:"No suggestion matching the search",CLASS_CONSTRUCTOR:"'%var%' constructor cannot be called as a function.",getMessage:function(e,t){if(0===Object.keys(arguments).length)return"Message indefined !";var r=Array.prototype.slice.call(arguments),n=r.shift(),o=r,i=this[n];try{i=Array.isArray(o)&&o.length>0?i.replace("%var%",o.join(" - ")):i.replace("%var%","%var% (not specified)")}catch(e){}return i}}},3065:function(e,t,r){var n,o;!function(){"use strict";n=function(){var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"],o={},i=null;function a(e,t){var r=e[t];if("function"==typeof r.bind)return r.bind(e);try{return Function.prototype.bind.call(r,e)}catch(t){return function(){return Function.prototype.apply.apply(r,[e,arguments])}}}function s(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function l(n){return"debug"===n&&(n="log"),typeof console!==t&&("trace"===n&&r?s:void 0!==console[n]?a(console,n):void 0!==console.log?a(console,"log"):e)}function u(){for(var r=this.getLevel(),o=0;o=0&&t<=c.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?f+=":"+e:"symbol"==typeof e&&(f=void 0),c.name=e,c.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},c.methodFactory=r||p,c.getLevel=function(){return null!=l?l:null!=s?s:a},c.setLevel=function(e,t){return l=g(e),!1!==t&&h(l),u.call(c)},c.setDefaultLevel=function(e){s=g(e),d()||c.setLevel(e,!1)},c.resetLevel=function(){l=null,m(),u.call(c)},c.enableAll=function(e){c.setLevel(c.levels.TRACE,e)},c.disableAll=function(e){c.setLevel(c.levels.SILENT,e)},c.rebuild=function(){if(i!==c&&(a=g(i.getLevel())),u.call(c),i===c)for(var e in o)o[e].rebuild()},a=g(i?i.getLevel():"WARN");var y=d();null!=y&&(l=g(y)),u.call(c)}(i=new f).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=o[e];return t||(t=o[e]=new f(e,i.methodFactory)),t};var h=typeof window!==t?window.log:void 0;return i.noConflict=function(){return typeof window!==t&&window.log===i&&(window.log=h),i},i.getLoggers=function(){return o},i.default=i,i},void 0===(o="function"==typeof n?n.call(t,r,t,e):n)||(e.exports=o)}()},3092:(e,t,r)=>{"use strict";var n=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==r.g)return r.g;throw new Error("unable to locate global object")}();e.exports=t=n.fetch,n.fetch&&(t.default=n.fetch.bind(n)),t.Headers=n.Headers,t.Request=n.Request,t.Response=n.Response},2938:e=>{"use strict";e.exports=ol.extent},7304:e=>{"use strict";e.exports=ol.format.GeoJSON},9583:e=>{"use strict";e.exports=ol.layer.Tile},996:e=>{"use strict";e.exports=ol.layer.Vector},2947:e=>{"use strict";e.exports=ol.loadingstrategy},9201:e=>{"use strict";e.exports=ol.proj},3668:e=>{"use strict";e.exports=ol.source.Vector},8062:e=>{"use strict";e.exports=ol.tilegrid},9032:e=>{"use strict";e.exports=JSON.parse('{"rE":"3.4.6","p6":"19/12/2024"}')},8330:e=>{"use strict";e.exports=JSON.parse('{"rE":"1.0.0-beta.1-317"}')}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n].call(i.exports,i,i.exports,r),i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var n={};(()=>{"use strict";function e(e){return function(e){if(Array.isArray(e))return t(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,r){if(e){if("string"==typeof e)return t(e,r);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?t(e,r):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);rZ});var o=["GPoverviewMap","GPfullScreen"];const i=function(t,r){var n=function(t,r){var n=[].concat(o,[r]),i=[];if(t&&t.includes("left")){var a=document.getElementById("position-container-bottom-left"),s=document.getElementById("position-container-top-left");i=[].concat(e(a.children),e(s.children))}if(t&&t.includes("right")){var l=document.getElementById("position-container-bottom-right"),u=document.getElementById("position-container-top-right");i=[].concat(e(l.children),e(u.children))}return i.filter((function(e){var t=e.id.match(/(\w+)-[0-9]+/)[1],r=n.includes(t);if("true"===e.getElementsByTagName("button")[0].getAttribute("aria-pressed")&&!r)return e}))}(t,r);n.length>0&&n[0].getElementsByTagName("button")[0].click()};const a={onPanelOpen:function(){i(this.options.position,this.element.id.match(/(\w+)-[0-9]+/)[1])}},s=ol.control.Control;const l=function(){return""!==getComputedStyle(document.documentElement).getPropertyValue("--blue-france-sun-113-625")};function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function c(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function p(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function h(e,t){for(var r=0;rc.right||m+n.height>c.bottom)a=f,s=h;else{var g=l-a,y=u-s;e.style.transform="translate("+g+"px,"+y+"px)"}}}};var M=r(7278),k=r(2579),I=r(421),L=r(3487),D=r(1596);function q(e){return function(e){if(Array.isArray(e))return U(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return U(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?U(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function U(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r').firstChild},_createCatalogContentTitleElement:function(e){return j('\n \x3c!-- titre --\x3e\n
    \n
    \n
    '.concat(e,"
    \n
    \n
    \n ")).firstChild},_createCatalogContentSearchElement:function(){var e=this,t='\n \x3c!-- barre de recherche --\x3e\n \x3c!-- https://www.systeme-de-design.gouv.fr/composants-et-modeles/composants/barre-de-recherche --\x3e\n \n ',r=j(t).attachShadow({mode:"open"});r.innerHTML=t.trim();var n=r.getElementById("search-button");n&&n.addEventListener("click",(function(){e.onSearchCatalogButtonClick()}));var o=r.getElementById("search-input");return o&&o.addEventListener("search",(function(){e.onSearchCatalogInputChange()})),r},_createCatalogWaitingElement:function(){var e=document.createElement("div");e.id=this._addUID("GPcatalogCalcWaitingContainer"),e.className="GPwaitingContainerHidden gpf-waiting--hidden";var t=document.createElement("p");return t.className="GPwaitingContainerInfo gpf-waiting_info",t.innerHTML="Recherche en cours...",e.appendChild(t),e},_createCatalogContentCategoriesTabs:function(e){for(var t=this,r="",n=function(e,t,r,n){var o="GPtabButton fr-tabs__tab",i="false",a=-1;return n&&(o="GPtabButton GPtabButtonActive fr-tabs__tab",i="true",a=0),'\n \n ")},o="",i=function(e){var t=e.default?"checked":"";return'\n \x3c!-- sous categorie --\x3e\n
    \n
    \n \n \n
    \n
    \n ")},a="",s=function(e,t,r,n){var a="GPtabContent fr-tabs__panel",s=-1;r&&(a="GPtabContent GPtabContentSelected fr-tabs__panel fr-tabs__panel--selected",s=0);var l='
    ';return n&&(l=function(e,t){for(var r="",n=0;n')}return'\n \x3c!-- sous categories --\x3e\n
    \n ').concat(o,'\n
    \n
    \n ').concat(r,"\n ")}(t,n)),'\n \x3c!-- panneaux --\x3e\n
    \n ').concat(l,"\n
    \n ")},l=0;l\n '.concat(r,"\n \n ").concat(a,"\n \n \n "),p=j(c.trim()).attachShadow({mode:"open"});p.innerHTML=c.trim();var f=p.querySelectorAll('[role="tabpanel-section"]'),h=p.querySelectorAll('[name="radio-inline"]');h&&h.forEach((function(e){e.addEventListener("change",(function(e){for(var t=0;t\n
    \n \n \n
    \n
    \n \n ')},a=function(e,t,r,n,o){return'\n \x3c!-- section --\x3e\n
    \n

    \n \n

    \n
    \n ').concat(o,"\n
    \n
    \n ")},s=e.section;s&&(n=n.sort((function(t,r){return t[e.filter.field].localeCompare(r[e.filter.field])})));for(var l={},u=0;u\n ').concat(o,"\n \n "),m=j(d).attachShadow({mode:"open"});m.innerHTML=d.trim();var g="checkboxes-".concat(e.id),y=m.querySelectorAll('[name="'+g+'"]');y&&y.forEach((function(e){e.addEventListener("click",(function(e){r.onSelectCatalogEntryClick(e)}))}));var v="button-collapse-".concat(e.id),b=m.querySelectorAll('[role="'+v+'"]');b&&b.forEach((function(e){e.addEventListener("click",(function(e){e.target.ariaExpanded=!("true"===e.target.ariaExpanded);var t=document.getElementById(e.target.getAttribute("aria-controls"));t&&("true"===e.target.ariaExpanded?(t.classList.add("fr-collapse--expanded"),t.classList.remove("GPelementHidden")):(t.classList.remove("fr-collapse--expanded"),t.classList.add("GPelementHidden")))}),!1)}));"button-icon-collapse-".concat(e.id);var w=m.querySelectorAll('[role="'+v+'"]');return w&&w.forEach((function(e){e.addEventListener("click",(function(e){e.target.parentElement.click()}))})),m}};function G(e){return G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},G(e)}function F(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */F=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(e,t,r){e[t]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",l=i.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function c(e,t,r,n){var i=t&&t.prototype instanceof y?t:y,a=Object.create(i.prototype),s=new N(n||[]);return o(a,"_invoke",{value:T(e,r,s)}),a}function p(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=c;var f="suspendedStart",h="suspendedYield",d="executing",m="completed",g={};function y(){}function v(){}function b(){}var w={};u(w,a,(function(){return this}));var E=Object.getPrototypeOf,x=E&&E(E(P([])));x&&x!==r&&n.call(x,a)&&(w=x);var S=b.prototype=y.prototype=Object.create(w);function _(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function A(e,t){function r(o,i,a,s){var l=p(e[o],e,i);if("throw"!==l.type){var u=l.arg,c=u.value;return c&&"object"==G(c)&&n.call(c,"__await")?t.resolve(c.__await).then((function(e){r("next",e,a,s)}),(function(e){r("throw",e,a,s)})):t.resolve(c).then((function(e){u.value=e,a(u)}),(function(e){return r("throw",e,a,s)}))}s(l.arg)}var i;o(this,"_invoke",{value:function(e,n){function o(){return new t((function(t,o){r(e,n,t,o)}))}return i=i?i.then(o,o):o()}})}function T(t,r,n){var o=f;return function(i,a){if(o===d)throw Error("Generator is already running");if(o===m){if("throw"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=R(s,n);if(l){if(l===g)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===f)throw o=m,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=d;var u=p(t,r,n);if("normal"===u.type){if(o=n.done?m:h,u.arg===g)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(o=m,n.method="throw",n.arg=u.arg)}}}function R(t,r){var n=r.method,o=t.iterator[n];if(o===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,R(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),g;var i=p(o,t.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,g;var a=i.arg;return a?a.done?(r[t.resultName]=a.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,g):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,g)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function N(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function P(t){if(t||""===t){var r=t[a];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,i=function r(){for(;++o=0;--i){var a=this.tryEntries[i],s=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var l=n.call(a,"catchLoc"),u=n.call(a,"finallyLoc");if(l&&u){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;C(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:P(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),g}},t}function V(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function H(e,t){for(var r=0;r{"use strict";function n(e){if(!(this instanceof n))throw new TypeError("ErrorService constructor cannot be called as a function.");var t=e;"string"==typeof e||e instanceof String?(this.message=e,this.status=-1,this.type=n.TYPE_UNKERR):(this.message=t.message||"undefined!?",this.type=t.type,this.status=t.status||-1),this.name="ErrorService",this.stack=(new Error).stack}r.d(t,{A:()=>o}),n.TYPE_SRVERR="SERVICE_ERROR",n.TYPE_USEERR="USAGE_ERROR",n.TYPE_UNKERR="UNKNOWN_ERROR",n.prototype=Object.create(Error.prototype,{constructor:{value:n,writable:!0,configurable:!0}});const o=n},4841:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(this.logger=n.A.getLogger(),this.logger.trace("[Constructeur WPS()]"),!(this instanceof o))throw new TypeError("WPS constructor cannot be called as a function.");if(this.options=e||{},this.DataObject=this.options.data,!this.DataObject)throw new TypeError("This data object is not defined !");this.paramservice=this.options.param.service||"WPS",this.paramversion=this.options.param.version||"1.0.0",this.paramidentifier=this.options.param.identifier||"gs:WPS",this.paramrawdataoutput=this.options.param.rawdataoutput||"result",this.paramrequest=this.options.param.request||"Execute",this.method=this.options.method||"GET"}o.prototype={requestString:null,constructor:o,template:{get:{value:"service=__SERVICE__&version=__VERSION__&rawdataoutput=__RAWDATAOUTPUT__&identifier=__IDENTIFIER__&request=__REQUEST__&datainputs=\x3c!-- __DATAINPUTS__ --\x3e",input:"__KEY__=__DATA__"},post:{value:'__IDENTIFIER__\x3c!-- __DATAINPUTS__ --\x3e__RAWDATAOUTPUT__',input:"__KEY____DATA__"}},namespaceByDefault:function(){return['xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"','xmlns="http://www.opengis.net/wps/1.0.0"','xmlns:wfs="http://www.opengis.net/wfs"','xmlns:wps="http://www.opengis.net/wps/1.0.0"','xmlns:ows="http://www.opengis.net/ows/1.1"','xmlns:gml="http://www.opengis.net/gml"','xmlns:ogc="http://www.opengis.net/ogc"','xmlns:wcs="http://www.opengis.net/wcs/1.1.1"','xmlns:xlink="http://www.w3.org/1999/xlink"'].join(" ")},schemaLocationByDefault:function(){return'xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd"'},processRequestString:function(){this.logger.trace("WPS::processRequestString ()");var e="";if("POST"===this.method)e=this.template.post.value;else{if("GET"!==this.method)return this.logger.error("No other method supported by the service !"),!1;e=this.template.get.value}return e=(e=(e=(e=(e=e.replace(/__SERVICE__/g,this.paramservice)).replace(/__VERSION__/g,this.paramversion)).replace(/__RAWDATAOUTPUT__/g,this.paramrawdataoutput)).replace(/__IDENTIFIER__/g,this.paramidentifier)).replace(/__REQUEST__/g,this.paramrequest),"POST"===this.method&&(e=(e=e.replace(/__NAMESPACE__/g,this.namespaceByDefault)).replace(/__SCHEMALOCATION__/g,this.schemaLocationByDefault)),(e=e.replace(//g,this.__addDataInputs()))?(this.requestString=e,this.logger.trace("traduction tmpl",e),!0):(this.logger.warn("traduction tmpl : empty request !?"),!1)},__addDataInputs:function(){this.logger.trace("WPS::__addDataInputs ()");for(var e,t="GET"===this.method?this.template.get.input:this.template.post.input,r="GET"===this.method?";":"",n="",o=this,i=this.DataObject.getData(),a=0;a{"use strict";r.d(t,{A:()=>s});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("XML constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur XML ()]"),this.xmlString=null,this.xmlDoc=null,this.reader=null,e&&(e.xmlString&&"string"==typeof e.xmlString&&(this.xmlString=e.xmlString,this.xmlDoc=i(e.xmlString)),e.reader&&this.setReader(e.reader))}function i(e){if("undefined"==typeof window)return(new(0,r(8978).S4)).parseFromString(e,"text/xml");var t,n,o="Erreur lors du parsing de la réponse du service : XML non conforme";if(window.ActiveXObject){(n=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,n.loadXML(e);var i=n.parseError;if(i.errorCode)throw i.line&&i.linepos&&(o+="( ligne "+i.line+", colonne "+i.linepos),i.reason&&(o+=": "+i.reason+")"),new Error(o);return n}if(window.DOMParser){t=new window.DOMParser;try{n=t.parseFromString(e,"text/xml")}catch(e){throw"SyntaxError"===e.message?new Error(o):new Error("Erreur lors du parsing de la réponse du service : "+e.message)}if(n.getElementsByTagName("parsererror").length>0)for(var a=n.getElementsByTagName("parsererror"),s=0;s0){var r=function(e){if(e.attributes.length>0){for(var t={},r=e.attributes,n=0;n{"use strict";r.d(t,{Ay:()=>w});var n=r(3255),o=r(7966),i=r(3565),a=r(3041),s=r(5941),l=r(9924),u=r(1489),c=r(2993),p=r(7868),f=r(4154),h=r(210),d=r(8288),m=r(3474),g=r(9032);const y=g.rE,v=g.p6;var b={};b.servicesVersion=y,b.servicesDate=v,b.Protocols={},b.Protocols.XHR=h.A,b.Services=n.A,b.Services.DefaultUrl=o.A,b.Services.AltiResponse=i.A,b.Services.Alti={},b.Services.Alti.Elevation=a.A,b.Services.AutoCompleteResponse=s.A,b.Services.AutoComplete={},b.Services.AutoComplete.SuggestedLocation=l.A,b.Services.Config=f.A,b.Services.IsoCurveResponse=u.A,b.Services.RouteResponse=c.A,b.Services.Route={},b.Services.Route.RouteInstruction=p.A,b.Error=d.A,b.Helper=m.A;const w=b},3494:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n,o=r(2710);const i={uuid:(n=Math.floor(Date.now()),function(){return n++}),call:function(e){var t=o.A.getLogger("JSONP");if(t.trace("[JSONP::call ()]"),!e)throw t.error("missing parameter : options !"),new Error("missing parameter : options !");if(!e.url)throw t.error("missing parameter : options.url !"),new Error("missing parameter : options.url !");if(e.timeOut||(t.info("setting 'options.timeOut' default value"),e.timeOut=0),!e.onResponse)throw t.error("missing parameter : options.onResponse !"),new Error("missing parameter : options.onResponse !");var r="string"==typeof e.callbackSuffix?e.callbackSuffix:this.uuid(),n=!1,i=!1,a=e.url.indexOf("callback=");if(-1!==a){n=!0;var s=e.url.indexOf("&",a);-1===s&&(s=e.url.length);var l=e.url.substring(a+9,s);l&&(i=!0,e.callbackName=l,t.info("setting 'options.callbackName' value ("+e.callbackName+") from 'options.url' parameter"))}if(!n){var u=e.url.indexOf("?");-1===u?e.url=e.url+"?callback=":u===e.url.length?e.url=e.url+"callback=":e.url=e.url+"&callback=",t.info("setting callback default key in 'options.url' : "+e.url)}var c=!!e.callbackName||i;if(i||(e.callbackName||(t.info("setting 'options.callbackName' default value"),e.callbackName="callback",(r||""===r)&&(e.callbackName+=r)),e.url=e.url.replace("callback=","callback="+e.callbackName),t.info("setting callback function name in 'options.url' : "+e.url)),e.onTimeOut||(t.info("setting 'options.onTimeOut' default value"),e.onTimeOut=function(){console.log("TimeOut while invoking url : "+e.url)}),!c){var p=this,f=null;e.timeOut>0&&(f=window.setTimeout((function(){window[e.callbackName]=function(){},e.onTimeOut(),p._deleteScript(r)}),e.timeOut)),window[e.callbackName]=function(t){window.clearTimeout(f),e.onResponse(t),p._deleteScript(r)}}this._createScript(r,e.url)},_createScript:function(e,t){var r,n=document.getElementById("results"+e);(r=document.createElement("script")).setAttribute("type","text/javascript"),r.setAttribute("src",t),r.setAttribute("charset","UTF-8"),r.setAttribute("id","results"+e),r.setAttribute("async","true");var o=document.documentElement||document.getElementsByTagName("head")[0];null===n?o.appendChild(r):o.replaceChild(r,n)},_deleteScript:function(e){var t=document.getElementById("results"+e);if(t){var r=t.parentNode||document.documentElement;if(!r)return;r.removeChild(t)}}}},6250:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(3474),o=r(210),i=r(3494);const a={send:function(e){var t=e||{method:"GET",protocol:"XHR",timeOut:0,format:null,wrap:!0,nocache:!0,output:"json",callback:null,callbackSuffix:null};if("undefined"!=typeof window||"JSONP"!==e.protocol){if("XHR"===e.protocol||"json"===e.format?t.wrap=!1:"JSONP"===e.protocol&&"xml"===e.format&&(t.wrap=!0),t.callback=null,t.output=t.wrap?"json":null,t.wrap){var r={};r.output=t.output,r.callback=t.callback,delete r.callback,t.url=n.A.normalyzeUrl(e.url,r)}switch(t.protocol){case"XHR":"GET"===e.method&&e.nocache&&(t.url=n.A.normalyzeUrl(t.url,{t:(new Date).getTime()})),o.A.call(t);break;case"JSONP":t.data&&(t.url=n.A.normalyzeUrl(t.url,t.data)),i.A.call(t);break;default:throw new Error("protocol not supported (XHR|JSONP) !")}}else console.log("Value (s) for parameter (s) 'protocol=JSONP (instead use XHR)' not supported to NodeJS")}}},210:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(2710),o=r(3474),i=r(6964),a=r.n(i);const s={call:function(e){var t=n.A.getLogger("XHR");if(t.trace("[XHR::call()]"),a().polyfill(),!e.url)throw new Error("missing parameter : url is not defined !");if(!e.method)throw new Error("missing parameter : method is not defined !");e.format||(e.format="text");var r={};switch(r.url=e.url,r.data=e.data?e.data:null,r.method=e.method,r.timeOut=e.timeOut||0,r.scope=e.scope||this,r.proxy=e.proxy||null,r.content=e.content||null,r.headers=e.headers||{referer:"http://localhost"},e.method){case"DELETE":case"GET":break;case"PUT":case"POST":r.content=e.content?e.content:"application/x-www-form-urlencoded",r.headers=e.headers?e.headers:{referer:"http://localhost"};break;case"HEAD":case"OPTIONS":throw new Error("HTTP method not yet supported !");default:throw new Error("HTTP method unknown !")}switch(e.format){case"text":this.__call(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;case"json":this.__callJSON(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;case"xml":this.__callXML(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;default:throw new Error("This output Format is not yet supported !")}},__call:function(e){var t=n.A.getLogger("XHR");return t.trace("[XHR::__call()]"),new Promise((function(n,i){var a="POST"===e.method||"PUT"===e.method?1:0;e.data&&("object"==typeof e.data&&Object.keys(e.data).length||"string"==typeof e.data&&e.data.length)&&!a&&(e.url=o.A.normalyzeUrl(e.url,e.data)),t.trace("URL = ",e.url);var s=null;if("undefined"==typeof window){var l=r(3092),u={headers:{Referer:"https://localhost"}};return e.data&&"string"==typeof e.data&&a&&(u={method:e.method,body:e.data,headers:{"Content-Type":e.content,Referer:"https://localhost"}}),l(e.url,u).then((function(e){if(e.ok)n(e.text());else{var t="Errors Occured on Http Request (status : '"+e.statusText+"' | url : '"+e.url+"')",r=e.status;i({message:t,status:r})}})).catch((function(e){i({message:e,status:-1})}))}if(window.XMLHttpRequest){t.trace("XMLHttpRequest"),(s=new XMLHttpRequest).open(e.method,e.url,!0),s.overrideMimeType=e.content;var c=null;e.timeOut>0&&(t.trace("XHR - TimeOut actif !"),c=window.setTimeout((function(){i({message:"TimeOut Occured on Http Request with XMLHttpRequest !",status:-1})}),e.timeOut)),a&&(t.trace("data = ",e.data),s.setRequestHeader("Content-type",e.content)),s.onerror=function(e){console.log(e),i(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},s.ontimeout=function(e){console.log(e),i(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},s.onreadystatechange=function(e){if(4===s.readyState)if(200===s.status)window.clearTimeout(c),n(s.response);else{var t="Errors Occured on Http Request (status : '"+e.target.statusText+"' | url : '"+e.target.responseURL+"' | response : '"+e.target.response+"')",r=e.target.status;i({message:t,status:r})}};var p=e.data&&a?e.data:null;s.send(p)}else{if(!window.XDomainRequest)throw new Error("CORS not supported");t.trace("XDomainRequest"),(s=new XDomainRequest).open(e.method,e.url),s.overrideMimeType=e.content,e.timeOut>0&&(s.timeout=e.timeout,t.trace("XHR - TimeOut actif !")),a&&s.setRequestHeader("Content-type",e.content),s.onerror=function(){i(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},s.ontimeout=function(){i(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},s.onload=function(e){if(200===s.status)n(s.responseText);else{var t="Errors Occured on Http Request (status : '"+e.target.statusText+"' | url : '"+e.target.responseURL+"')",r=e.target.status;i({message:t,status:r})}};var f=e.data&&a?e.data:null;s.send(f)}}))},__callJSON:function(e){return this.__call(e).then(JSON.parse).catch((function(t){console.log("_callJSON failed on : ",e.url,t)}))},__callXML:function(e){return this.__call(e).then((function(e){var t;"undefined"==typeof window?t=(new(0,r(8978).S4)).parseFromString(e,"text/xml"):window.DOMParser?t=(new window.DOMParser).parseFromString(e,"text/xml"):((t=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,t.loadXML(e));return t})).catch((function(t){console.log("__callXML failed on : ",e.url,t)}))}}},2366:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),a=r(895),s=r(7966),l=r(8933),u=r(5325);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","Alti"));if(this.CLASSNAME="Alti",a.A.apply(this,arguments),this.logger=n.A.getLogger("Gp.Services.Alti"),this.logger.trace("[Constructeur Alti (options)]"),!e.positions)throw new Error(o.A.getMessage("PARAM_MISSING","positions"));if(0===e.positions.length)throw new Error(o.A.getMessage("PARAM_EMPTY","positions"));if(this.options.positions=e.positions,this.options.outputFormat="string"==typeof e.outputFormat?e.outputFormat.toLowerCase():"xml",this.options.resource=e.resource||"ign_rge_alti_wld",this.options.sampling=e.sampling||null,this.options.api="string"==typeof e.api?e.api.toUpperCase():"REST","REST"===this.options.api&&(this.options.httpMethod="GET"),this.options.zonly=e.zonly||!1,this.options.measures=e.measures||!1,!this.options.serverUrl){var t=s.A.Alti.newUrl(),r=null;switch(this.options.api){case"WPS":r=t.wps;break;case"REST":r=t[(e.sampling?"profil":"elevation")+"-"+this.options.outputFormat];break;default:throw new Error(o.A.getMessage("PARAM_UNKNOWN","api"))}if(!r)throw new Error("Url by default not found !");this.options.serverUrl=r,this.logger.trace("Server URL by default : "+this.options.serverUrl)}var i=this.options.serverUrl.lastIndexOf(".");if(-1!==i){var l=this.options.serverUrl.substring(i+1);if(l&&l.length<5)switch(this.logger.trace("Server Extension URL : "+l),l.toLowerCase()){case"json":case"xml":this.options.outputFormat=l.toLowerCase();break;default:throw new Error("type of service : unknown or unsupported (json or xml) !")}}}c.prototype=Object.create(a.A.prototype,{}),c.prototype.constructor=c,c.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,onSuccess:function(e){this.request=e,t.call(this,this.request)},onError:e,scope:this,resource:this.options.resource,positions:this.options.positions,outputFormat:this.options.outputFormat,sampling:this.options.sampling,api:this.options.api,zonly:this.options.zonly,measures:this.options.measures};l.A.build(r)},c.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,outputFormat:this.options.outputFormat,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};u.A.build(r)}else e.call(this,new i.A(o.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const p=c},3667:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(3565),o=r(3041),i=r(9206),a={};a.READERS={elevations:function(e){var t=new n.A;if(e.hasChildNodes())for(var r,o,i=e.childNodes,s=0;s{"use strict";r.d(t,{A:()=>s});var n=r(2710),o=r(8288),i=r(6933),a=r(4359);const s={build:function(e){n.A.getLogger("AltiRequestFactory").trace(["AltiRequestFactory::build()"]);var t=null,r={type:e.sampling?"Profil":"Elevation",method:e.httpMethod,param:{positions:null,delimiter:null,indent:null,crs:null,format:null,sampling:null,zonly:null,measures:null}};r.param.positions=e.positions,r.param.format=e.outputFormat,r.param.sampling=e.sampling,r.param.zonly=e.zonly,r.param.measures=e.measures,r.param.resource=e.resource;var s=!(null===e.onError||"function"!=typeof e.onError),l=!(null===e.onSuccess||"function"!=typeof e.onSuccess),u=null;switch(e.api){case"REST":var c=new i.A(r);if(!c.processRequestString()){if(u="Error in process request (rest) !",s)return void e.onError.call(e.scope,new o.A(u));throw new Error(u)}t=c.requestString;break;case"WPS":if(r.wps={service:null,version:null,identifier:null,rawdataoutput:null,request:null},!(t=a.A.build(r))){if(u="Error in process request (wps) !",s)return void e.onError.call(e.scope,new o.A(u));throw new Error(u)}break;default:if(u="Type of API is not supported by service (REST or WPS) !",s)return void e.onError.call(e.scope,new o.A(u));throw new Error(u)}return l&&e.onSuccess.call(e.scope,t),t}}},6933:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(2710),o=r(1097),i=r(5974),a=r(3471);function s(e){if(this.logger=n.A.getLogger("AltiRequestREST"),this.logger.trace("[Constructeur AltiRequestREST ()]"),!(this instanceof s))throw new TypeError("AltiRequestREST constructor cannot be called as a function.");if(this.options=e||{},!this.options)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));if(!this.options.type)throw new Error(o.A.getMessage("PARAM_EMPTY","type (Elevation or Profil)"));switch(this.DataObject=null,this.options.type){case"Elevation":this.DataObject=new i.A(this.options.param);break;case"Profil":this.DataObject=new a.A(this.options.param);break;default:throw new Error(o.A.getMessage("PARAM_TYPE","type (Elevation or Profil)"))}this.method=this.options.method||"GET"}s.prototype={requestString:null,constructor:s,template:{get:{value:"lon=__LON__&lat=__LAT__&indent=__INDENT__&crs='__CRS__'&resource=__RESOURCE__&measures=__MEASURES__",input:{point:"&zonly=__ZONLY__",profil:"&sampling=__SAMPLING__"}},post:{value:"lon=__LON__\nlat=__LAT__\nindent=__INDENT__\ncrs='__CRS__'\nresource='__RESOURCE__'\nmeasures='__MEASURES__'\n",input:{point:"zonly=__ZONLY__\n",profil:"sampling=__SAMPLING__"}}},processRequestString:function(){this.logger.trace("AltiRequestREST::processRequestString ()");var e="";return"POST"===this.method?e=this.template.post.value:"GET"===this.method&&(e=this.template.get.value),e=(e=(e=(e=(e=(e=e.replace(/__LON__/g,this.DataObject.getLon())).replace(/__LAT__/g,this.DataObject.getLat())).replace(/__INDENT__/g,this.DataObject.indent)).replace(/__CRS__/g,this.DataObject.crs)).replace(/__RESOURCE__/g,this.DataObject.resource)).replace(/__MEASURES__/g,this.DataObject.measures),e+=this.__addDataInputs(),this.logger.trace("traduction tmpl",e),this.requestString=e,this.requestString},__addDataInputs:function(){var e;if(this.logger.trace("AltiRequestREST::addDataInput ()"),"POST"===this.method)e=this.template.post;else{if("GET"!==this.method)throw new Error("No other HTTP method supported by the service !");e=this.template.get}if("AltiElevationRequest"===this.DataObject.CLASSNAME)return e.input.point.replace(/__ZONLY__/g,this.DataObject.zonly.toString());if("AltiProfilRequest"===this.DataObject.CLASSNAME)return e.input.profil.replace(/__SAMPLING__/g,this.DataObject.sampling);throw new Error("No other object supported than elevation or profil !?")}};const l=s},4359:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(2710),o=r(1097),i=r(4841),a=r(5974),s=r(3471);const l={build:function(e){if(n.A.getLogger("AltiRequestWPS").trace(["AltiRequestWPS::build()"]),!e)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));if(!e.type)throw new Error(o.A.getMessage("PARAM_EMPTY","type (Elevation or Profil)"));var t=null;switch(e.type){case"Elevation":e.wps.identifier="gs:WPSElevation",t=new a.A(e.param);break;case"Profil":e.wps.identifier="gs:WPSLineElevation",t=new s.A(e.param);break;default:throw new Error(o.A.getMessage("PARAM_TYPE","type (Elevation or Profil)"))}var r={data:t,method:e.method,param:e.wps},l=new i.A(r);if(!l.processRequestString())throw new Error("Enable to process request !");return l.requestString}}},5974:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(2710),o=r(6221);function i(e){if(!(this instanceof i))throw new TypeError("AltiElevationRequest constructor cannot be called as a function.");this.CLASSNAME="AltiElevationRequest",o.A.apply(this,arguments),this.logger=n.A.getLogger(),this.logger.trace("[Constructeur AltiElevationRequest ()]"),this.zonly=this.options.zonly||!1}i.prototype=Object.create(o.A.prototype,{zonly:{get:function(){return this._zonly},set:function(e){this._zonly=e}}}),i.prototype.constructor=i,i.prototype.getData=function(){var e=[];return e.push({k:"lon",v:this.getLon()}),e.push({k:"lat",v:this.getLat()}),e.push({k:"indent",v:this.indent}),e.push({k:"crs",v:this.crs}),e.push({k:"zonly",v:this.zonly}),e.push({k:"format",v:this.format}),e.push({k:"resource",v:this.resource}),e};const a=i},3471:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(2710),o=r(6221);function i(e){if(!(this instanceof i))throw new TypeError("AltiProfilRequest constructor cannot be called as a function.");this.CLASSNAME="AltiProfilRequest",o.A.apply(this,arguments),this.logger=n.A.getLogger(),this.logger.trace("[Constructeur AltiProfilRequest ()]"),this.sampling=this.options.sampling||3}i.prototype=Object.create(o.A.prototype,{sampling:{get:function(){return this._sampling},set:function(e){this._sampling=e}}}),i.prototype.constructor=i,i.prototype.getData=function(){var e=[];return e.push({k:"lon",v:this.getLon()}),e.push({k:"lat",v:this.getLat()}),e.push({k:"indent",v:this.indent}),e.push({k:"crs",v:this.crs}),e.push({k:"sampling",v:this.sampling}),e.push({k:"format",v:this.format}),e.push({k:"resource",v:this.resource}),e};const a=i},6221:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("AltiRequest constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur AltiRequest ()]"),this.options=e||{},this.positions=this.options.positions||[],this.delimiter=this.options.delimiter||"|",this.indent=this.options.indent||!1,this.crs=this.options.crs||"CRS:84",this.format=this.options.format||"json",this.resource=this.options.resource,this.measures=this.options.measures||!1}o.CLASSNAME="AltiRequest",o.prototype={constructor:o,setPositions:function(e){for(var t=[],r=0;rt||e{"use strict";r.d(t,{A:()=>c});var n=r(2710),o=r(1097),i=r(8288),a=r(4904),s=r(3667),l=r(3565),u=r(3041);const c={build:function(e){var t=n.A.getLogger("AltiResponseFactory");t.trace(["AltiResponseFactory::build()"]);var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{switch(e.outputFormat){case"xml":t.trace("analyze response : xml");try{var c=new a.A({reader:s.A});if("string"==typeof e.response?c.setXMLString(e.response):c.setXMLDoc(e.response),!(r=c.parse()))throw new Error(o.A.getMessage("SERVICE_RESPONSE_EXCEPTION_2"))}catch(t){var p=t.message;return void e.onError.call(e.scope,new i.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",p),status:200,type:i.A.TYPE_SRVERR}))}break;case"json":t.trace("analyze response : json"),t.trace("analyze response : ",typeof e.response);var f=null;if((f="string"==typeof e.response?JSON.parse(e.response):e.response)&&f.error)return void e.onError.call(e.scope,new i.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",f.error.description),status:200,type:i.A.TYPE_SRVERR}));if(f){var h,d=f.elevations,m=new l.A;if(Array.isArray(d)&&d.length)for(var g=0;g{"use strict";function n(){if(!(this instanceof n))throw new TypeError("AltiResponse constructor cannot be called as a function.");this.elevations=[]}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},3041:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("Elevation constructor cannot be called as a function.");this.z=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},9206:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("Measure constructor cannot be called as a function.");this.source_name=null,this.source_measure=null,this.z=null,this.acc=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},9338:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(895),o=r(7966),i=r(4889),a=r(2710),s=r(1097),l=r(3474),u=r(8288);function c(e){if(!(this instanceof c))throw new TypeError(s.A.getMessage("CLASS_CONSTRUCTOR","AutoComplete"));this.CLASSNAME="AutoComplete",this.logger=a.A.getLogger("Gp.Services.AutoComplete"),this.logger.trace("[Constructeur AutoComplete (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=o.A.AutoComplete.newUrl()),n.A.apply(this,arguments),!t.text)throw new Error(s.A.getMessage("PARAM_MISSING","text"));this.options.text=t.text,t.type||(t.type=["StreetAddress,PositionOfInterest"]),this.options.type=t.type,this.options.territory=t.terr||"",this.options.maximumResponses=t.maximumResponses||10,"XHR"===this.options.protocol&&"POST"===this.options.httpMethod&&(this.logger.warn("Le service ne gére pas le mode d'interrogation en POST, on bascule sur du GET !"),this.options.httpMethod="GET"),this.options.outputFormat=this.options.rawResponse?"":"json"}c.prototype=Object.create(n.A.prototype,{}),c.prototype.constructor=c,c.prototype.patchOptionConvertor=function(e){const t=e;return t.filterOptions&&(this.logger.warn("The parameter 'filterOptions' is deprecated"),t.filterOptions.type&&(this.logger.warn("The parameter 'filterOptions.type' is deprecated"),t.type||(t.type=t.filterOptions.type)),t.filterOptions.territory&&(this.logger.warn("The parameter 'filterOptions.territory' is deprecated"),t.terr||(t.terr=t.filterOptions.territory)),delete t.filterOptions),t},c.prototype.buildRequest=function(e,t){var r="";this.options.territory&&(r=this.options.territory);var n="";this.options.type&&(n=this.options.type.join(",")),this.request=l.A.normalyzeParameters({text:encodeURIComponent(this.options.text),type:n,terr:r,maximumResponses:this.options.maximumResponses}),this.request?t.call(this,this.request):e.call(this,new u.A(s.A.getMessage("SERVICE_REQUEST_BUILD")))},c.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onSuccess:t,onError:e,scope:this};i.A.build(r)}else e.call(this,new u.A(s.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const p=c},4889:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(2710),o=r(1097),i=r(8288),a=r(5941),s=r(9924);const l={build:function(e){var t=n.A.getLogger("AutoCompleteResponseFactory");t.trace(["AutoCompleteResponseFactory::build()"]);var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{var l=null;if(l="string"==typeof e.response?JSON.parse(e.response):e.response){if(l.error)return void e.onError.call(e.scope,new i.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",l.error.description),status:l.error.code,type:i.A.TYPE_SRVERR}));if(r=new a.A,!l.results||!Array.isArray(l.results))return void e.onError.call(e.scope,new i.A(o.A.getMessage("SERVICE_RESPONSE_FORMAT_3")));for(var u=null,c=0;c{"use strict";function n(){if(!(this instanceof n))throw new TypeError("AutoCompleteResponse constructor cannot be called as a function.");this.suggestedLocations=[]}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},9924:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("SuggestedLocation constructor cannot be called as a function.");this.type=null,this.position={x:null,y:null},this.commune=null,this.fullText=null,this.postalCode=null,this.classification=null,this.street=null,this.poi=null,this.kind=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},895:(e,t,r)=>{"use strict";r.d(t,{A:()=>c});var n=r(2710),o=r(3474),i=r(1097),a=r(6250),s=r(8288),l=r(9032);function u(e){if(!(this instanceof u))throw new TypeError(i.A.getMessage("CLASS_CONSTRUCTOR"));for(var t in this.logger=n.A.getLogger("CommonService"),this.logger.trace("[Constructeur CommonService (options)]"),this.options={protocol:"XHR",ssl:!0,proxyURL:"",callbackSuffix:null,httpMethod:"GET",timeOut:0,rawResponse:!1,scope:this,onSuccess:function(e){console.log("onSuccess - la reponse est la suivante : ",e)},onFailure:function(e){200!==e.status&&e.status?console.log("onFailure - Erreur (",e.status,") : ",e.message):console.log("onFailure : ",e.message)}},e)e.hasOwnProperty(t)&&(this.options[t]=e[t]);if(this.options.rawResponse&&!this.options.onSuccess&&(this.options.onSuccess=function(e){console.log("onSuccess - la réponse brute du service est la suivante : ",e)}),!!(null===this.options.onSuccess||"function"!=typeof this.options.onSuccess))throw new Error(i.A.getMessage("PARAM_MISSING","onSuccess()"));switch(this.options.httpMethod="string"==typeof e.httpMethod?e.httpMethod.toUpperCase():"GET",this.options.httpMethod){case"POST":case"GET":break;case"PUT":case"DELETE":case"HEAD":case"OPTIONS":throw new Error(i.A.getMessage("PARAM_NOT_SUPPORT","httpMethod"));default:throw new Error(i.A.getMessage("PARAM_UNKNOWN","httpMethod"))}switch(this.options.protocol="string"==typeof e.protocol?e.protocol.toUpperCase():"XHR",this.options.protocol){case"JSONP":case"XHR":break;default:throw new Error(i.A.getMessage("PARAM_UNKNOWN","protocol"))}if("undefined"==typeof window&&"JSONP"===this.options.protocol)throw new Error(i.A.getMessage("PARAM_NOT_SUPPORT_NODEJS","protocol=JSONP (instead use XHR)"));"JSONP"===this.options.protocol&&(this.options.httpMethod="GET"),this.options.nocache=e.nocache||!1,this.options.outputFormat=null,this.request=null,this.response=null}u.prototype={constructor:u,call:function(){this.logger.trace("CommonService::call ()");var e=this;function t(t){this.logger.trace("CommonService::onBuildRequest : ",t),this.callService.call(e,o,r)}function r(t){this.logger.trace("CommonService::onCallService : ",t),this.analyzeResponse.call(e,o,n)}function n(e){if(this.logger.trace("CommonService::onAnalyzeResponse : ",e),!e)return o.call(this,new s.A("Analyse de la reponse en échec !?"));this.options.onSuccess.call(this,e)}function o(e){this.logger.trace("CommonService::onError()");var t=e;t instanceof s.A||(t=new s.A(e.message)),this.options.onFailure.call(this,t)}(function(){this.logger.trace("CommonService::run ()"),this.buildRequest.call(e,o,t)}).call(e)},buildRequest:function(e,t){this.logger.error("overwritten method !"),e&&e.call(this,"This method must be overwritten !"),t.call(this,"This method must be overwritten !")},callService:function(e,t){var r=null,n=this.request,i=!(!this.options.proxyURL||"XHR"!==this.options.protocol),u={"gp-access-lib":l.rE};this.options.apiKey&&(u.apiKey=this.options.apiKey),this.options.serverUrl=o.A.normalyzeUrl(this.options.serverUrl,u,!1),i&&("GET"===this.options.httpMethod&&(r=this.options.proxyURL+o.A.normalyzeUrl(this.options.serverUrl,this.request,!0),n=null),"POST"===this.options.httpMethod&&(r=this.options.proxyURL+o.A.normalyzeUrl(this.options.serverUrl,null,!0),n=this.request));var c=this,p={url:r||this.options.serverUrl,method:this.options.httpMethod,protocol:this.options.protocol,timeOut:this.options.timeOut||0,format:this.options.outputFormat,nocache:this.options.nocache||!1,wrap:"XHR"!==this.options.protocol,callbackSuffix:this.options.callbackSuffix,data:n,headers:null,content:this.options.contentType||"application/xml",scope:this.options.scope||this,onResponse:function(r){c.logger.trace("callService::onResponse()");var n=null;if("XHR"===c.options.protocol&&(c.logger.trace("Response XHR",r),n=r),"JSONP"===c.options.protocol){if(c.logger.trace("Response JSON",r),!r)return void e.call(c,new s.A("Le contenu de la reponse est vide !?"));if(r.http){if(200!==r.http.status)return void e.call(c,new s.A({status:r.http.status,message:r.http.error,type:s.A.TYPE_SRVERR}));n=r.xml,c.options.rawResponse&&(n=r)}else n=r}if("function"==typeof c.options.onBeforeParse){var o=c.options.onBeforeParse(n);"string"==typeof o&&(n=o)}c.response=n,t.call(c,n)},onFailure:function(t){c.logger.trace("callService::onFailure()"),t.type=s.A.TYPE_SRVERR,e.call(c,new s.A(t))},onTimeOut:function(){c.logger.trace("callService::onTimeOut()"),e.call(c,new s.A("TimeOut!"))}};a.A.send(p)},analyzeResponse:function(e,t){this.logger.error("overwritten method !"),e&&e.call(this,"This method must be overwritten !"),t.call(this,"This method must be overwritten !")}};const c=u},4154:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(895),a=r(7966),s=r(9939);function l(e){if(!(this instanceof l))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","Config"));if(this.CLASSNAME="Config",this.logger=n.A.getLogger("Gp.Config"),this.logger.trace("[Constructeur Config (options)]"),!!(null===e.onSuccess||"function"!=typeof e.onSuccess))throw new Error(o.A.getMessage("PARAM_MISSING","onSuccess()"));e.apiKey||e.customConfigFile||(e.apiKey="full"),this.options={},this.options.onSuccess=e.onSuccess,this.options.onFailure=e.onFailure,this.options.sync=e.sync||!1,this.options.listConfigUrls=e.customConfigFile?[e.customConfigFile]:Array.isArray(e.apiKey)?a.A.Config.url(e.apiKey):a.A.Config.url(e.apiKey.split(","))}l.prototype=Object.create(i.A.prototype,{}),l.prototype.constructor=l,l.prototype.buildRequest=function(e,t){this.listConfigUrls=this.options.listConfigUrls,this.listConfigUrls?t.call(this,this.listConfigUrls):e.call(this,new Error("url by default not found !"))},l.prototype.callService=function(e,t){this.options.sync?c.call(this,e,t):u.call(this,e,t)};var u=function(e,t){this.listConfigResults=[];let n=null;if("undefined"==typeof window){var o=r(3092);n=o}else n=window.fetch;var i=e=>n(e,{credentials:"same-origin"}).then((e=>{if(e.ok)return e.json().then((e=>e)).catch((e=>{throw new Error("Exception Json : "+e)}));throw new Error("Exception HTTP : "+e.status+" (status code) !")})).catch((e=>new Promise(((t,r)=>{r(e)})))),a=[];for(let e=0;e{if(!e)throw new Error("results config empty !?");e.forEach((e=>{this.listConfigResults.push(e)}))})).then((()=>{t.call(this,this.listConfigResults)})).catch((t=>{e.call(this,t)}))},c=function(e,t){this.listConfigResults=[];for(var r=0;r{"use strict";function n(){if(!(this instanceof n))throw new TypeError("ConfigInterface constructor cannot be called as a function.");this.generalOptions={apiKeys:{},title:null,defaultGMLGFIStyle:null,theme:null,wgs84Resolutions:[]},this.layers={},this.tileMatrixSets={}}r.d(t,{A:()=>o}),n.prototype={constructor:n,isKeyConfLoaded:function(e){if(e)return!!this.generalOptions.apiKeys[e]},getLayersId:function(e){return this.generalOptions.apiKeys[e]},getLayerId:function(e,t){if(e&&t){var r=null;if(this.layers){var n=this.layers;for(var o in n)if(n.hasOwnProperty(o)){var i=o.split("$");if(e===i[0]&&i[1]){var a=i[1].split(":");if(i[1].split(";")[1]===t.toUpperCase()){r=o;break}if(a[2]===t.toUpperCase()){r=o;break}}}}if(r)return r}},getLayersConf:function(e){var t={},r=this.getLayersId(e);if(r)for(var n=0;n{"use strict";r.d(t,{A:()=>o});var n={ssl:!0,newUrl:function(e){return(!1===n.ssl?"http://":"https://")+"data.geopf.fr"+e},Alti:{new_key:{"elevation-json":"/altimetrie/1.0/calcul/alti/rest/elevation.json","elevation-xml":"/altimetrie/1.0/calcul/alti/rest/elevation.xml","profil-json":"/altimetrie/1.0/calcul/alti/rest/elevationLine.json","profil-xml":"/altimetrie/1.0/calcul/alti/rest/elevationLine.xml"},newUrl:function(){return{"elevation-json":n.newUrl(this.new_key["elevation-json"]),"elevation-xml":n.newUrl(this.new_key["elevation-xml"]),"profil-json":n.newUrl(this.new_key["profil-json"]),"profil-xml":n.newUrl(this.new_key["profil-xml"])}}},ProcessIsoCurve:{new_key:"/navigation/isochrone",newUrl:function(){return n.newUrl(this.new_key)}},Config:{_key:"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/dist/",url:function(e){Array.isArray(e)||(e=e.split(","));for(var t=[],r=0;r{"use strict";r.d(t,{A:()=>u});var n=r(1097),o=r(8288),i=r(1135),a=r(6025);function s(){if(!(this instanceof s))throw new TypeError("GeocodeResponseParser constructor cannot be called as a function.")}function l(e,t){var r=new a.A;if(e.geometry&&"Point"===e.geometry.type&&(r.position={lon:e.geometry.coordinates[0],lat:e.geometry.coordinates[1]}),e.properties){for(var n in e.properties)"score"===n?r.accuracy=e.properties[n]:"_type"===n?"address"===e.properties[n]?r.type="StreetAddress":"poi"===e.properties[n]?r.type="PositionOfInterest":"parcel"!==e.properties[n]&&"cadastral"!==e.properties[n]||(r.type="CadastralParcel"):r.placeAttributes[n]=e.properties[n];"address"===e.properties._type&&(r.matchType=void 0!==e.properties.number&&null!==e.properties.number?"street number":"street")}t.locations.push(r)}s.prototype={constructor:s,parse:function(e){var t=new i.A;const r=JSON.parse(e);if("FeatureCollection"===r.type)for(var a=0;a{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),a=r(895),s=r(7966),l=r(6767),u=r(9375);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","Geocode"));this.CLASSNAME="Geocode",this.logger=n.A.getLogger("Gp.Services.Geocode"),this.logger.trace("[Constructeur Geocode (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=s.A.Geocode.newUrl()),a.A.apply(this,[t]),!t.hasOwnProperty("query"))throw new Error(o.A.getMessage("PARAM_MISSING","query"));if(this.options.query=t.query,t.index||(this.options.index=t.index="StreetAddress"),t.filters)for(var r=Object.keys(t.filters),i=0;i0?t.index=t.filters.type[0]:t.index=t.filters.type),delete t.filters.type),t.filters.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),delete t.filters.bbox)),delete t.filterOptions),t.position&&(t.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),t.position.lon||(t.position.lon=t.position.x),delete t.position.x),t.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),t.position.lat||(t.position.lat=t.position.y),delete t.position.y)),t.returnFreeForm&&(this.logger.warn("The parameter 'returnFreeForm' is deprecated"),delete t.returnFreeForm),t.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete t.srs),t},c.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,geocodeMethod:"search",query:this.options.query,index:this.options.index,returnTrueGeometry:this.options.returnTrueGeometry,position:this.options.position,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=l.A.build(r),this.request?t.call(this,this.request):e.call(this,new i.A(o.A.getMessage("SERVICE_REQUEST_BUILD")))},c.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};u.A.build(r)}else e.call(this,new i.A(o.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const p=c},6767:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(2710),o=r(3955);const i={build:function(e){var t=n.A.getLogger("GeocodeRequestFactory");t.trace(["GeocodeRequestFactory::build()"]);var r=e||{},i=new o.A(r);if(!i.processRequestString())throw new Error("Error process request (rest) !");var a=i.requestString;return t.trace(a),a}}},3955:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(2710),o=r(1097),i=r(3757);function a(e){if(this.logger=n.A.getLogger("GeocodeRequestREST"),this.logger.trace("[Constructeur GeocodeRequestREST ()]"),!(this instanceof a))throw new TypeError("GeocodeRequestREST constructor cannot be called as a function.");if(!e)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));this.settings=e}a.prototype={requestString:null,constructor:a,processRequestString:function(){var e="";const t=new i.A(this.settings).getParams();for(var r=0;r{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("GeocodeParamREST constructor cannot be called as a function.");if(this.logger=n.A.getLogger(),this.logger.trace("[Constructeur GeocodeParamREST ()]"),this.options=e||{},!this.options.geocodeMethod||"search"!==this.options.geocodeMethod&&"reverse"!==this.options.geocodeMethod)throw new Error("Error geocodeMethod not valid");this.geocodeMethod=this.options.geocodeMethod,this.query=void 0!==this.options?this.options.query:null,this.searchGeometry=this.options.searchGeometry||null,this.index=this.options.index||null,this.lon=this.options.position&&this.options.position.lon?this.options.position.lon:null,this.lat=this.options.position&&this.options.position.lat?this.options.position.lat:null,this.maxResp=this.options.maxResp||null,this.returnTrueGeometry=this.options.returnTrueGeometry||null,this.filters=this.options.filters||{}}o.CLASSNAME="GeocodeParamREST",o.prototype={constructor:o,getFilters:function(){var e={};for(var t in this.filters)this.filters.hasOwnProperty(t)&&(e[t]=this.filters[t]);return e},getIndex:function(){return void 0===this.index?null:"StreetAddress"===this.index?"address":"CadastralParcel"===this.index?"parcel":"PositionOfInterest"===this.index?"poi":"location"===this.index?"location":this.index},getSearchGeometry:function(){return JSON.stringify(this.searchGeometry)}},o.prototype.getParams=function(){var e=[];"search"===this.geocodeMethod&&e.push({k:"q",v:this.query}),this.index&&e.push({k:"index",v:this.getIndex()}),"reverse"===this.geocodeMethod&&this.searchGeometry&&e.push({k:"searchgeom",v:this.getSearchGeometry()}),this.lon&&this.lat&&(e.push({k:"lon",v:this.lon}),e.push({k:"lat",v:this.lat})),this.maxResp&&e.push({k:"limit",v:this.maxResp}),this.returnTrueGeometry&&e.push({k:"returntruegeometry",v:this.returnTrueGeometry});const t=this.getFilters();for(var r in t)e.push({k:r,v:t[r]});return e};const i=o},9375:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(8288),o=r(1097),i=r(9723);const a={build:function(e){var t=null;if(e.response){if(e.rawResponse)t=e.response;else{try{if(!(t=(new i.A).parse(e.response)))throw new Error("L'analyse de la réponse du service !?")}catch(t){var r=t.message;return"string"==typeof e.response?r+="('"+e.response+"')":r+="('"+e.response.documentElement.innerHTML+"')",void e.onError.call(e.scope,new n.A({message:o.A.getMessage("SERVICE_RESPONSE_ANALYSE",r),type:n.A.TYPE_UNKERR,status:-1}))}if(t.exceptionReport)return void e.onError.call(e.scope,new n.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",t.exceptionReport),type:n.A.TYPE_SRVERR,status:200}))}e.onSuccess.call(e.scope,t)}else e.onError.call(e.scope,new n.A({message:o.A.getMessage("SERVICE_RESPONSE_EMPTY"),type:n.A.TYPE_SRVERR,status:-1}))}}},1135:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("GeocodeResponse constructor cannot be called as a function.");this.locations=[]}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},6025:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("GeocodedLocation constructor cannot be called as a function.");this.position=null,this.matchType=null,this.placeAttributes={},this.type=null,this.accuracy=null,this.CLASSNAME="GeocodedLocation"}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},6064:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),a=r(895),s=r(7966),l=r(6767),u=r(9375);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","ReverseGeocode"));this.CLASSNAME="ReverseGeocode",this.logger=n.A.getLogger("Gp.Services.ReverseGeocode"),this.logger.trace("[Constructeur ReverseGeocode (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=s.A.ReverseGeocode.newUrl()),a.A.apply(this,[t]),t.searchGeometry)this.options.searchGeometry=t.searchGeometry;else if(!t.position)throw new Error(o.A.getMessage("PARAM_MISSING","searchGeometry"));if(t.index||(this.options.index=t.index="StreetAddress"),t.filters)for(var r=Object.keys(t.filters),i=0;i0?t.index=t.filterOptions.type[0]:t.index=t.filterOptions.type),delete t.filterOptions.type),t.filterOptions.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),t.searchGeometry||(t.searchGeometry=this.bbox2Json(t.filterOptions.bbox)),delete t.filterOptions.bbox),t.filterOptions.circle&&(this.logger.warn("The parameter 'filterOptions.circle' is deprecated"),t.searchGeometry||(t.searchGeometry=this.circle2Json(t.filterOptions.circle)),delete t.filterOptions.circle),t.filterOptions.polygon&&(this.logger.warn("The parameter 'filterOptions.polygon' is deprecated"),t.searchGeometry||(t.searchGeometry=this.polygon2Json(t.filterOptions.polygon)),delete t.filterOptions.polygon),!t.filters&&Object.keys(t.filterOptions).length>0&&(t.filters=t.filterOptions),delete t.filterOptions),t.position&&(t.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),t.position.lon||(t.position.lon=t.position.x),delete t.position.x),t.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),t.position.lat||(t.position.lat=t.position.y),delete t.position.y)),t.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete t.srs),t},c.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,geocodeMethod:"reverse",searchGeometry:this.options.searchGeometry,index:this.options.index,position:this.options.position,returnTrueGeometry:this.options.returnTrueGeometry,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=l.A.build(r),this.request?t.call(this,this.request):e.call(this,new i.A(o.A.getMessage("SERVICE_REQUEST_BUILD")))},c.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};u.A.build(r)}else e.call(this,new i.A(o.A.getMessage("SERVICE_RESPONSE_EMPTY")))},c.prototype.bbox2Json=function(e){return{type:"Polygon",coordinates:[[[e.left,e.top],[e.right,e.top],[e.right,e.bottom],[e.left,e.bottom],[e.left,e.top]]]}},c.prototype.circle2Json=function(e){return{type:"Circle",radius:e.radius,coordinates:[e.x,e.y]}},c.prototype.polygon2Json=function(e){for(var t={type:"Polygon",coordinates:[[]]},r=0;r{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),a=r(895),s=r(7966),l=r(9721),u=r(8297);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","ProcessIsoCurve"));if(this.CLASSNAME="ProcessIsoCurve",a.A.apply(this,arguments),this.logger=n.A.getLogger("Gp.Services.ProcessIsoCurve"),this.logger.trace("[Constructeur ProcessIsoCurve (options)]"),!e.position)throw new Error(o.A.getMessage("PARAM_MISSING","position"));if(null===e.position.x)throw new Error(o.A.getMessage("PARAM_MISSING","position.x"));if(null===e.position.y)throw new Error(o.A.getMessage("PARAM_MISSING","position.y"));if(!e.time&&!e.distance)throw new Error("Parameter (s) 'distance' missing. Parameter time to calculate an isochrone, parameter distance for an isodistance");if(!e.time&&e.distance&&(this.options.method="distance",this.options.time&&delete this.options.time),e.time&&!e.distance&&(this.options.method="time",this.options.distance&&delete this.options.distance),this.options.method=this.options.method||"time",this.options.resource=e.resource||"bdtopo-valhalla",this.options.exclusions=e.exclusions||[],this.options.reverse=e.reverse||!1,this.options.srs=e.srs||"EPSG:4326",this.options.distanceUnit=e.distanceUnit||"m",this.options.timeUnit=e.timeUnit||"second",e.smoothing&&this.logger.warn("options.smoothing is DEPRECATED"),this.options.smoothing=!1,e.holes&&this.logger.warn("options.holes is DEPRECATED"),this.options.holes=!1,e.graph?("Voiture"===e.graph&&(this.options.graph="car"),"Pieton"===e.graph&&(this.options.graph="pedestrian")):this.options.graph="car",this.options.constraints=[],e.constraints){if(!Array.isArray(e.constraints))throw new Error(o.A.getMessage("PARAM_TYPE","constraints"));for(var t=0;t{"use strict";r.d(t,{A:()=>s});var n=r(2710),o=r(1097),i=r(527);function a(e){if(this.logger=n.A.getLogger("ProcessIsoCurveRequest"),this.logger.trace("[Constructeur ProcessIsoCurveRequest ()]"),!(this instanceof a))throw new TypeError("ProcessIsoCurveRequest constructor cannot be called as a function.");if(!e)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));this.settings=e,this.mode=this.settings.httpMethod||"GET"}a.prototype={requestString:null,constructor:a,processRequestString:function(){var e="",t=0;switch(this.mode){case"GET":this.logger.trace("Process GET Request");var r=new i.A(this.settings).getParams();for(t=0;t{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("ProcessIsoCurveParam constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur ProcessIsoCurveParam ()]"),this.options=e||{},this.id=this.options.id,this.resource=this.options.resource,this.point=this.options.position,this.crs=this.options.srs,this.profile=this.options.graph,this.constraints=this.options.constraints,this.reverse=this.options.reverse,this.timeUnit=this.options.timeUnit,this.distanceUnit=this.options.distanceUnit,"distance"===this.options.method?(this.costType="distance",this.costValue=this.options.distance,"m"===this.distanceUnit&&this.costValue>=5e4&&(this.distanceUnit="km",this.costValue/=1e3)):(this.costType="time",this.costValue=this.options.time)}o.CLASSNAME="ProcessIsoCurveParam",o.prototype={constructor:o,getLocation:function(){return this.point.x+","+this.point.y},getDistanceUnit:function(){return"m"===this.distanceUnit?"meter":"km"===this.distanceUnit?"kilometer":""},getConstraints:function(){var e=[];if(0!==this.constraints.length)for(var t=0;t{"use strict";r.d(t,{A:()=>s});var n=r(2710),o=r(1097),i=r(8288),a=r(1489);const s={build:function(e){var t=n.A.getLogger("ProcessIsoCurveResponseFactory");t.trace(["ProcessIsoCurveResponseFactory::build()"]);var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{var s;if(t.trace("analyze response : json"),s="string"==typeof e.response?JSON.parse(e.response):e.response,r=new a.A,!s)return void e.onError.call(e.scope,new i.A(o.A.getMessage("SERVICE_RESPONSE_ANALYSE",e.response)));"distance"===s.costType?(r.time="",r.distance=s.costValue):(r.time=s.costValue,r.distance=""),r.message="",r.id="",r.srs=s.crs,r.geometry=s.geometry;var l=s.point.split(",");if(r.location&&(r.location.x=l[0],r.location.y=l[1]),r.exceptionReport)return void e.onError.call(e.scope,new i.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",r.exceptionReport),type:i.A.TYPE_SRVERR,status:200}))}e.onSuccess.call(e.scope,r)}else e.onError.call(e.scope,new i.A(o.A.getMessage("SERVICE_RESPONSE_EMPTY")))}}},1489:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("ProcessIsoCurveResponse constructor cannot be called as a function.");this.message=null,this.id=null,this.location={},this.location.x=null,this.location.y=null,this.srs=null,this.geometry=null,this.time=null,this.distance=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},6759:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(2710),o=r(8288),i=r(5851);const a={build:function(e){n.A.getLogger("RouteRequestFactory").trace(["RouteRequestFactory::build()"]);var t=e||{},r=!(null===e.onError||"function"!=typeof e.onError),a=null,s=new i.A(t);if(!s.processRequestString()){if(a="Error process request (rest) !",r)return void e.onError.call(e.scope,new o.A(a));throw new Error(a)}return s.requestString}}},5851:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(2710),o=r(1097),i=r(2785);function a(e){if(this.logger=n.A.getLogger("RouteRequestREST"),this.logger.trace("[Constructeur RouteRequestREST ()]"),!(this instanceof a))throw new TypeError("RouteRequestREST constructor cannot be called as a function.");if(!e)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));this.settings=e}a.prototype={requestString:null,constructor:a,processRequestString:function(){this.logger.warn(" PROTOTYPE !");for(var e=new i.A(this.settings).getParams(),t="",r=0;r{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("RouteParamREST constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur RouteParamREST ()]"),this.options=e||{},this.resource=this.options.resource,this.start=this.options.startPoint.x+","+this.options.startPoint.y,this.end=this.options.endPoint.x+","+this.options.endPoint.y,this.intermediates=this.options.viaPoints,this.profile=this.options.graph,this.crs=this.options.srs,this.constraints=this.options.constraints,this.optimization=this.options.routePreference,this.getSteps=this.options.geometryInInstructions?"true":"false",this.distanceUnit=this.options.distanceUnit,this.timeUnit=this.options.timeUnit,this.waysAttributes=this.options.waysAttributes}o.CLASSNAME="RouteParamREST",o.prototype={constructor:o,getIntermediates:function(){var e=[];if(0!==this.intermediates.length)for(var t=0;t{"use strict";r.d(t,{A:()=>l});var n=r(2710),o=r(1097),i=r(8288),a=r(2993),s=r(7868);const l={build:function(e){var t=n.A.getLogger("RouteResponseFactory");t.trace("RouteResponseFactory::build()");var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{var l;if(t.trace("analyze response : json"),l="string"==typeof e.response?JSON.parse(e.response):e.response){if(l.message)return void e.onError.call(e.scope,new i.A(o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",l.message)));var u=[],c=[],p=[];if((r=new a.A).hasOwnProperty("totalTime")&&(r.totalTime=parseFloat(l.duration)),r.hasOwnProperty("totalDistance")&&(r.totalDistance=parseFloat(l.distance)),r.hasOwnProperty("bbox")&&(r.bbox.left=parseFloat(l.bbox[0]),r.bbox.bottom=parseFloat(l.bbox[1]),r.bbox.right=parseFloat(l.bbox[2]),r.bbox.top=parseFloat(l.bbox[3])),r.hasOwnProperty("routeGeometry")&&!e.geometryInInstructions&&(r.routeGeometry=l.geometry),r.hasOwnProperty("routeInstructions")&&e.geometryInInstructions){var f,h=l.portions;if(Array.isArray(h)&&h.length)for(f=0;f{"use strict";function n(){if(!(this instanceof n))throw new TypeError("RouteInstruction constructor cannot be called as a function.");this.duration=null,this.distance=null,this.code=null,this.instruction=null,this.geometry=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},2993:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("RouteResponse constructor cannot be called as a function.");this.totalTime=null,this.totalDistance=null,this.bbox={left:null,right:null,top:null,bottom:null},this.routeGeometry=null,this.routeInstructions=[]}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},7372:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),a=r(895),s=r(7966),l=r(6759),u=r(3753);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","Route"));if(this.CLASSNAME="Route",a.A.apply(this,arguments),this.logger=n.A.getLogger("Gp.Services.Route"),this.logger.trace("[Constructeur Route (options)]"),!e.startPoint)throw new Error(o.A.getMessage("PARAM_MISSING","startPoint"));if(null===e.startPoint.x)throw new Error(o.A.getMessage("PARAM_MISSING","startPoint.x"));if(null===e.startPoint.y)throw new Error(o.A.getMessage("PARAM_MISSING","startPoint.y"));if(!e.endPoint)throw new Error(o.A.getMessage("PARAM_MISSING","endPoint"));if(null===e.endPoint.x)throw new Error(o.A.getMessage("PARAM_MISSING","endPoint.x"));if(null===e.endPoint.y)throw new Error(o.A.getMessage("PARAM_MISSING","endPoint.y"));if(e.outputFormat&&"json"!==e.outputFormat&&this.logger.warn("options.outputFormat could only be json"),this.options.outputFormat="json",this.options.resource=e.resource||"bdtopo-osrm",this.options.startPoint=e.startPoint,this.options.endPoint=e.endPoint,this.options.viaPoints=e.viaPoints||[],this.options.routePreference=e.routePreference||"fastest",e.graph?("Voiture"===e.graph&&(this.options.graph="car"),"Pieton"===e.graph&&(this.options.graph="pedestrian")):this.options.graph="car",this.options.constraints=[],e.constraints){if(!Array.isArray(e.constraints))throw new Error(o.A.getMessage("PARAM_TYPE","constraints"));for(var t=0;t{"use strict";r.d(t,{A:()=>c});var n=r(4154),o=r(2366),i=r(1520),a=r(6064),s=r(9338),l=r(7372),u=r(7180);const c={getConfig:function(e){new n.A(e).call()},getAltitude:function(e){new o.A(e).call()},geocode:function(e){new i.A(e).call()},reverseGeocode:function(e){new a.A(e).call()},autoComplete:function(e){new s.A(e).call()},route:function(e){new l.A(e).call()},isoCurve:function(e){new u.A(e).call()}}},3474:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});const n={normalyzeParameters:function(e){var t=null;if(e){var r=[];for(var n in e)if(e.hasOwnProperty(n)){var o=e[n];o||(o=""),r.push(n+"="+o)}t=r.join("&")}return t},normalyzeUrl:function(e,t,r){var n=e;if(e){if(e.split("?").length-1>=2){var o=e.search(/\?/)+1;n=e.substring(0,o)+e.slice(o).replace(/\?/g,"&")}var i=e.indexOf("?");-1===i&&(n+="?"),-1!==i&&i!==e.length-1&&(n+="&")}return t&&(n+="string"==typeof t?t=t.replace("?",""):this.normalyzeParameters(t)),r&&(n=encodeURIComponent(n)),n},indent:function(e,t){return new Array((e||0)+1).join("\t")+t}}},2710:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(3065);const o={getLogger:function(e){if(void 0===t)var t={env:{VERBOSE:!1}};t.env.VERBOSE?n.enableAll():n.disableAll();var r=e||"default";return n.getLogger(r)}}},1097:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});const n={PARAM_MISSING:"Parameter(s) '%var%' missing",PARAM_EMPTY:"Parameter(s) '%var%' empty",PARAM_TYPE:"Wrong type(s) for parameter(s) '%var%'",PARAM_FORMAT:"Parameter(s) '%var%' not correctly formatted",PARAM_NOT_SUPPORT:"Value(s) for parameter(s) '%var%' not supported",PARAM_NOT_SUPPORT_NODEJS:"Value(s) for parameter(s) '%var%' not supported to NodeJS",PARAM_UNKNOWN:"Value(s) for parameter(s) '%var%' unknown",SERVICE_REQUEST_BUILD:"An error occurred during the request building of the service",SERVICE_REQUEST_EMPTY:"The request sent to the service is empty",SERVICE_RESPONSE_EXCEPTION:"The service returned an exception : '%var%'",SERVICE_RESPONSE_EXCEPTION_2:"The service returned an exception",SERVICE_RESPONSE_ANALYSE:"An error occurred while parsing the response '%var%' of the service",SERVICE_RESPONSE_ANALYSE_2:"An unknown error occurred while parsing the response",SERVICE_RESPONSE_EMPTY:"The response of the service is empty",SERVICE_RESPONSE_EMPTY_2:"The response from the service could not be analyzed or is empty",SERVICE_RESPONSE_FORMAT:"The format of the service response is not supported (handled format(s) : '%var%')",SERVICE_RESPONSE_FORMAT_2:"The format of the service response is not supported",SERVICE_RESPONSE_FORMAT_3:"No suggestion matching the search",CLASS_CONSTRUCTOR:"'%var%' constructor cannot be called as a function.",getMessage:function(e,t){if(0===Object.keys(arguments).length)return"Message indefined !";var r=Array.prototype.slice.call(arguments),n=r.shift(),o=r,i=this[n];try{i=Array.isArray(o)&&o.length>0?i.replace("%var%",o.join(" - ")):i.replace("%var%","%var% (not specified)")}catch(e){}return i}}},3065:function(e,t,r){var n,o;!function(){"use strict";n=function(){var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"],o={},i=null;function a(e,t){var r=e[t];if("function"==typeof r.bind)return r.bind(e);try{return Function.prototype.bind.call(r,e)}catch(t){return function(){return Function.prototype.apply.apply(r,[e,arguments])}}}function s(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function l(n){return"debug"===n&&(n="log"),typeof console!==t&&("trace"===n&&r?s:void 0!==console[n]?a(console,n):void 0!==console.log?a(console,"log"):e)}function u(){for(var r=this.getLevel(),o=0;o=0&&t<=c.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?f+=":"+e:"symbol"==typeof e&&(f=void 0),c.name=e,c.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},c.methodFactory=r||p,c.getLevel=function(){return null!=l?l:null!=s?s:a},c.setLevel=function(e,t){return l=g(e),!1!==t&&h(l),u.call(c)},c.setDefaultLevel=function(e){s=g(e),d()||c.setLevel(e,!1)},c.resetLevel=function(){l=null,m(),u.call(c)},c.enableAll=function(e){c.setLevel(c.levels.TRACE,e)},c.disableAll=function(e){c.setLevel(c.levels.SILENT,e)},c.rebuild=function(){if(i!==c&&(a=g(i.getLevel())),u.call(c),i===c)for(var e in o)o[e].rebuild()},a=g(i?i.getLevel():"WARN");var y=d();null!=y&&(l=g(y)),u.call(c)}(i=new f).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=o[e];return t||(t=o[e]=new f(e,i.methodFactory)),t};var h=typeof window!==t?window.log:void 0;return i.noConflict=function(){return typeof window!==t&&window.log===i&&(window.log=h),i},i.getLoggers=function(){return o},i.default=i,i},void 0===(o="function"==typeof n?n.call(t,r,t,e):n)||(e.exports=o)}()},3092:(e,t,r)=>{"use strict";var n=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==r.g)return r.g;throw new Error("unable to locate global object")}();e.exports=t=n.fetch,n.fetch&&(t.default=n.fetch.bind(n)),t.Headers=n.Headers,t.Request=n.Request,t.Response=n.Response},2938:e=>{"use strict";e.exports=ol.extent},7304:e=>{"use strict";e.exports=ol.format.GeoJSON},9583:e=>{"use strict";e.exports=ol.layer.Tile},996:e=>{"use strict";e.exports=ol.layer.Vector},2947:e=>{"use strict";e.exports=ol.loadingstrategy},9201:e=>{"use strict";e.exports=ol.proj},3668:e=>{"use strict";e.exports=ol.source.Vector},8062:e=>{"use strict";e.exports=ol.tilegrid},9032:e=>{"use strict";e.exports=JSON.parse('{"rE":"3.4.6","p6":"19/12/2024"}')},8330:e=>{"use strict";e.exports=JSON.parse('{"rE":"1.0.0-beta.1-318"}')}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n].call(i.exports,i,i.exports,r),i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var n={};(()=>{"use strict";function e(e){return function(e){if(Array.isArray(e))return t(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,r){if(e){if("string"==typeof e)return t(e,r);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?t(e,r):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);rZ});var o=["GPoverviewMap","GPfullScreen"];const i=function(t,r){var n=function(t,r){var n=[].concat(o,[r]),i=[];if(t&&t.includes("left")){var a=document.getElementById("position-container-bottom-left"),s=document.getElementById("position-container-top-left");i=[].concat(e(a.children),e(s.children))}if(t&&t.includes("right")){var l=document.getElementById("position-container-bottom-right"),u=document.getElementById("position-container-top-right");i=[].concat(e(l.children),e(u.children))}return i.filter((function(e){var t=e.id.match(/(\w+)-[0-9]+/)[1],r=n.includes(t);if("true"===e.getElementsByTagName("button")[0].getAttribute("aria-pressed")&&!r)return e}))}(t,r);n.length>0&&n[0].getElementsByTagName("button")[0].click()};const a={onPanelOpen:function(){i(this.options.position,this.element.id.match(/(\w+)-[0-9]+/)[1])}},s=ol.control.Control;const l=function(){return""!==getComputedStyle(document.documentElement).getPropertyValue("--blue-france-sun-113-625")};function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function c(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function p(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function h(e,t){for(var r=0;rc.right||m+n.height>c.bottom)a=f,s=h;else{var g=l-a,y=u-s;e.style.transform="translate("+g+"px,"+y+"px)"}}}};var M=r(7278),k=r(2579),I=r(421),L=r(3487),D=r(1596);function q(e){return function(e){if(Array.isArray(e))return U(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return U(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?U(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function U(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r').firstChild},_createCatalogContentTitleElement:function(e){return j('\n \x3c!-- titre --\x3e\n
    \n
    \n
    '.concat(e,"
    \n
    \n
    \n ")).firstChild},_createCatalogContentSearchElement:function(){var e=this,t='\n \x3c!-- barre de recherche --\x3e\n \x3c!-- https://www.systeme-de-design.gouv.fr/composants-et-modeles/composants/barre-de-recherche --\x3e\n \n ',r=j(t).attachShadow({mode:"open"});r.innerHTML=t.trim();var n=r.getElementById("search-button");n&&n.addEventListener("click",(function(){e.onSearchCatalogButtonClick()}));var o=r.getElementById("search-input");return o&&o.addEventListener("search",(function(){e.onSearchCatalogInputChange()})),r},_createCatalogWaitingElement:function(){var e=document.createElement("div");e.id=this._addUID("GPcatalogCalcWaitingContainer"),e.className="GPwaitingContainerHidden gpf-waiting--hidden";var t=document.createElement("p");return t.className="GPwaitingContainerInfo gpf-waiting_info",t.innerHTML="Recherche en cours...",e.appendChild(t),e},_createCatalogContentCategoriesTabs:function(e){for(var t=this,r="",n=function(e,t,r,n){var o="GPtabButton fr-tabs__tab",i="false",a=-1;return n&&(o="GPtabButton GPtabButtonActive fr-tabs__tab",i="true",a=0),'\n \n ")},o="",i=function(e){var t=e.default?"checked":"";return'\n \x3c!-- sous categorie --\x3e\n
    \n
    \n \n \n
    \n
    \n ")},a="",s=function(e,t,r,n){var a="GPtabContent fr-tabs__panel",s=-1;r&&(a="GPtabContent GPtabContentSelected fr-tabs__panel fr-tabs__panel--selected",s=0);var l='
    ';return n&&(l=function(e,t){for(var r="",n=0;n')}return'\n \x3c!-- sous categories --\x3e\n
    \n ').concat(o,'\n
    \n
    \n ').concat(r,"\n ")}(t,n)),'\n \x3c!-- panneaux --\x3e\n
    \n ').concat(l,"\n
    \n ")},l=0;l\n '.concat(r,"\n \n ").concat(a,"\n \n \n "),p=j(c.trim()).attachShadow({mode:"open"});p.innerHTML=c.trim();var f=p.querySelectorAll('[role="tabpanel-section"]'),h=p.querySelectorAll('[name="radio-inline"]');h&&h.forEach((function(e){e.addEventListener("change",(function(e){for(var t=0;t\n
    \n \n \n
    \n
    \n \n ')},a=function(e,t,r,n,o){return'\n \x3c!-- section --\x3e\n
    \n

    \n \n

    \n
    \n ').concat(o,"\n
    \n
    \n ")},s=e.section;s&&(n=n.sort((function(t,r){return t[e.filter.field].localeCompare(r[e.filter.field])})));for(var l={},u=0;u\n ').concat(o,"\n \n "),m=j(d).attachShadow({mode:"open"});m.innerHTML=d.trim();var g="checkboxes-".concat(e.id),y=m.querySelectorAll('[name="'+g+'"]');y&&y.forEach((function(e){e.addEventListener("click",(function(e){r.onSelectCatalogEntryClick(e)}))}));var v="button-collapse-".concat(e.id),b=m.querySelectorAll('[role="'+v+'"]');b&&b.forEach((function(e){e.addEventListener("click",(function(e){e.target.ariaExpanded=!("true"===e.target.ariaExpanded);var t=document.getElementById(e.target.getAttribute("aria-controls"));t&&("true"===e.target.ariaExpanded?(t.classList.add("fr-collapse--expanded"),t.classList.remove("GPelementHidden")):(t.classList.remove("fr-collapse--expanded"),t.classList.add("GPelementHidden")))}),!1)}));"button-icon-collapse-".concat(e.id);var w=m.querySelectorAll('[role="'+v+'"]');return w&&w.forEach((function(e){e.addEventListener("click",(function(e){e.target.parentElement.click()}))})),m}};function G(e){return G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},G(e)}function F(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */F=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(e,t,r){e[t]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",l=i.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function c(e,t,r,n){var i=t&&t.prototype instanceof y?t:y,a=Object.create(i.prototype),s=new N(n||[]);return o(a,"_invoke",{value:T(e,r,s)}),a}function p(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=c;var f="suspendedStart",h="suspendedYield",d="executing",m="completed",g={};function y(){}function v(){}function b(){}var w={};u(w,a,(function(){return this}));var E=Object.getPrototypeOf,x=E&&E(E(P([])));x&&x!==r&&n.call(x,a)&&(w=x);var S=b.prototype=y.prototype=Object.create(w);function _(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function A(e,t){function r(o,i,a,s){var l=p(e[o],e,i);if("throw"!==l.type){var u=l.arg,c=u.value;return c&&"object"==G(c)&&n.call(c,"__await")?t.resolve(c.__await).then((function(e){r("next",e,a,s)}),(function(e){r("throw",e,a,s)})):t.resolve(c).then((function(e){u.value=e,a(u)}),(function(e){return r("throw",e,a,s)}))}s(l.arg)}var i;o(this,"_invoke",{value:function(e,n){function o(){return new t((function(t,o){r(e,n,t,o)}))}return i=i?i.then(o,o):o()}})}function T(t,r,n){var o=f;return function(i,a){if(o===d)throw Error("Generator is already running");if(o===m){if("throw"===i)throw a;return{value:e,done:!0}}for(n.method=i,n.arg=a;;){var s=n.delegate;if(s){var l=R(s,n);if(l){if(l===g)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===f)throw o=m,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=d;var u=p(t,r,n);if("normal"===u.type){if(o=n.done?m:h,u.arg===g)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(o=m,n.method="throw",n.arg=u.arg)}}}function R(t,r){var n=r.method,o=t.iterator[n];if(o===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,R(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),g;var i=p(o,t.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,g;var a=i.arg;return a?a.done?(r[t.resultName]=a.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,g):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,g)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function N(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function P(t){if(t||""===t){var r=t[a];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,i=function r(){for(;++o=0;--i){var a=this.tryEntries[i],s=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var l=n.call(a,"catchLoc"),u=n.call(a,"finallyLoc");if(l&&u){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),C(r),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;C(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:P(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),g}},t}function V(e,t,r,n,o,i,a){try{var s=e[i](a),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,o)}function H(e,t){for(var r=0;r{var e={4582:(e,t)=>{"use strict";function r(e,t){return void 0===t&&(t=Object),t&&"function"==typeof t.getOwnPropertyDescriptors&&(e=t.create(null,t.getOwnPropertyDescriptors(e))),t&&"function"==typeof t.freeze?t.freeze(e):e}function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var o=r({allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,formnovalidate:!0,hidden:!0,ismap:!0,itemscope:!0,loop:!0,multiple:!0,muted:!0,nomodule:!0,novalidate:!0,open:!0,playsinline:!0,readonly:!0,required:!0,reversed:!0,selected:!0});var i=r({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});var s=r({script:!1,style:!1,textarea:!0,title:!0});function a(e){return e===l.HTML}var l=r({HTML:"text/html",XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),c=Object.keys(l).map((function(e){return l[e]}));var u=r({HTML:"http://www.w3.org/1999/xhtml",SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});t.assign=function(e,t){if(null===e||"object"!=typeof e)throw new TypeError("target is not an object");for(var r in t)n(t,r)&&(e[r]=t[r]);return e},t.find=function(e,t,r){if(void 0===r&&(r=Array.prototype),e&&"function"==typeof r.find)return r.find.call(e,t);for(var o=0;o-1},t.MIME_TYPE=l,t.NAMESPACE=u},5752:(e,t,r)=>{"use strict";var n=r(4582),o=r(4722),i=r(2983),s=r(6559),a=r(4466),l=o.DOMImplementation,c=n.hasDefaultHTMLNamespace,u=n.isHTMLMimeType,p=n.isValidMimeType,h=n.MIME_TYPE,d=n.NAMESPACE,f=i.ParseError,g=a.XMLReader;function m(e){return e.replace(/\r[\n\u0085]/g,"\n").replace(/[\r\u0085\u2028]/g,"\n")}function E(e){if(e=e||{locator:!0},this.assign=e.assign||n.assign,this.domHandler=e.domHandler||y,this.onError=e.onError||e.errorHandler,e.errorHandler&&"function"!=typeof e.errorHandler)throw new TypeError("errorHandler object is no longer supported, switch to onError!");e.errorHandler&&e.errorHandler("warning","The `errorHandler` option has been deprecated, use `onError` instead!",this),this.normalizeLineEndings=e.normalizeLineEndings||m,this.locator=!!e.locator,this.xmlns=this.assign(Object.create(null),e.xmlns)}function y(e){var t=e||{};this.mimeType=t.mimeType||h.XML_APPLICATION,this.defaultNamespace=t.defaultNamespace||null,this.cdata=!1,this.currentElement=void 0,this.doc=void 0,this.locator=void 0,this.onError=t.onError}function v(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function w(e,t,r){return"string"==typeof e?e.substr(t,r):e.length>=t+r||t?new java.lang.String(e,t,r)+"":e}function b(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}E.prototype.parseFromString=function(e,t){if(!p(t))throw new TypeError('DOMParser.parseFromString: the provided mimeType "'+t+'" is not valid.');var r=this.assign(Object.create(null),this.xmlns),o=s.XML_ENTITIES,i=r[""]||null;c(t)?(o=s.HTML_ENTITIES,i=d.HTML):t===h.XML_SVG_IMAGE&&(i=d.SVG),r[""]=i,r.xml=r.xml||d.XML;var a=new this.domHandler({mimeType:t,defaultNamespace:i,onError:this.onError}),l=this.locator?{}:void 0;this.locator&&a.setDocumentLocator(l);var u=new g;return u.errorHandler=a,u.domBuilder=a,!n.isHTMLMimeType(t)&&"string"!=typeof e&&u.errorHandler.fatalError("source is not a string"),u.parse(this.normalizeLineEndings(String(e)),r,o),a.doc.documentElement||u.errorHandler.fatalError("missing root element"),a.doc},y.prototype={startDocument:function(){var e=new l;this.doc=u(this.mimeType)?e.createHTMLDocument(!1):e.createDocument(this.defaultNamespace,"")},startElement:function(e,t,r,n){var o=this.doc,i=o.createElementNS(e,r||t),s=n.length;b(this,i),this.currentElement=i,this.locator&&v(this.locator,i);for(var a=0;a{"use strict";var n=r(4582),o=n.find,i=n.hasDefaultHTMLNamespace,s=n.hasOwn,a=n.isHTMLMimeType,l=n.isHTMLRawTextElement,c=n.isHTMLVoidElement,u=n.MIME_TYPE,p=n.NAMESPACE,h=Symbol(),d=r(2983),f=d.DOMException,g=d.DOMExceptionName,m=r(2763);function E(e){if(e!==h)throw new TypeError("Illegal constructor")}function y(e){return""!==e}function v(e,t){return s(e,t)||(e[t]=!0),e}function w(e){if(!e)return[];var t=function(e){return e?e.split(/[\t\n\f\r ]+/).filter(y):[]}(e);return Object.keys(t.reduce(v,{}))}function b(e){if(!m.QName_exact.test(e))throw new f(f.INVALID_CHARACTER_ERR,'invalid character in qualified name "'+e+'"')}function S(e,t){b(t),e=e||null;var r=null,o=t;if(t.indexOf(":")>=0){var i=t.split(":");r=i[0],o=i[1]}if(null!==r&&null===e)throw new f(f.NAMESPACE_ERR,"prefix is non-null and namespace is null");if("xml"===r&&e!==n.NAMESPACE.XML)throw new f(f.NAMESPACE_ERR,'prefix is "xml" and namespace is not the XML namespace');if(("xmlns"===r||"xmlns"===t)&&e!==n.NAMESPACE.XMLNS)throw new f(f.NAMESPACE_ERR,'either qualifiedName or prefix is "xmlns" and namespace is not the XMLNS namespace');if(e===n.NAMESPACE.XMLNS&&"xmlns"!==r&&"xmlns"!==t)throw new f(f.NAMESPACE_ERR,'namespace is the XMLNS namespace and neither qualifiedName nor prefix is "xmlns"');return[e,r,o]}function T(e,t){for(var r in e)s(e,r)&&(t[r]=e[r])}function _(e,t){var r=e.prototype;if(!(r instanceof t)){function n(){}n.prototype=t.prototype,T(r,n=new n),e.prototype=r=n}r.constructor!=e&&("function"!=typeof e&&console.error("unknown Class:"+e),r.constructor=e)}var R={},N=R.ELEMENT_NODE=1,O=R.ATTRIBUTE_NODE=2,C=R.TEXT_NODE=3,A=R.CDATA_SECTION_NODE=4,x=R.ENTITY_REFERENCE_NODE=5,I=R.ENTITY_NODE=6,P=R.PROCESSING_INSTRUCTION_NODE=7,M=R.COMMENT_NODE=8,D=R.DOCUMENT_NODE=9,L=R.DOCUMENT_TYPE_NODE=10,k=R.DOCUMENT_FRAGMENT_NODE=11,U=R.NOTATION_NODE=12,q=n.freeze({DOCUMENT_POSITION_DISCONNECTED:1,DOCUMENT_POSITION_PRECEDING:2,DOCUMENT_POSITION_FOLLOWING:4,DOCUMENT_POSITION_CONTAINS:8,DOCUMENT_POSITION_CONTAINED_BY:16,DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:32});function G(e){for(var t=[];e.parentNode||e.ownerElement;)e=e.parentNode||e.ownerElement,t.unshift(e);return t}function F(e,t){if(t.length=0){for(var o=t.length-1;n<=o;)t[n]=t[++n];if(t.length=o,e){var i=e.ownerDocument;i&&ee(i,e,r),r.ownerElement=null}}}function J(){}function Q(e){E(e)}function K(e){return("<"==e?"<":">"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function Z(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(Z(e,t))return!0}while(e=e.nextSibling)}function $(e,t){E(e);var r=t||{};this.ownerDocument=this,this.contentType=r.contentType||u.XML_APPLICATION,this.type=a(this.contentType)?"html":"xml"}function ee(e,t,r,n){e&&e._inc++,r.namespaceURI===p.XMLNS&&delete t._nsMap[r.prefix?r.localName:""]}function te(e,t,r){if(e&&e._inc){e._inc++;var n=t.childNodes;if(r&&!r.nextSibling)n[n.length++]=r;else{for(var o=t.firstChild,i=0;o;)n[i++]=o,o=o.nextSibling;n.length=i,delete n[n.length]}}}function re(e,t){if(e!==t.parentNode)throw new f(f.NOT_FOUND_ERR,"child's parent is not parent");var r=t.previousSibling,n=t.nextSibling;return r?r.nextSibling=n:e.firstChild=n,n?n.previousSibling=r:e.lastChild=r,te(e.ownerDocument,e),t.parentNode=null,t.previousSibling=null,t.nextSibling=null,t}function ne(e){return e&&e.nodeType===Q.DOCUMENT_TYPE_NODE}function oe(e){return e&&e.nodeType===Q.ELEMENT_NODE}function ie(e){return e&&e.nodeType===Q.TEXT_NODE}function se(e,t){var r=e.childNodes||[];if(o(r,oe)||ne(t))return!1;var n=o(r,ne);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function ae(e,t){var r=e.childNodes||[];if(o(r,(function(e){return oe(e)&&e!==t})))return!1;var n=o(r,ne);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function le(e,t,r){if(!function(e){return e&&(e.nodeType===Q.DOCUMENT_NODE||e.nodeType===Q.DOCUMENT_FRAGMENT_NODE||e.nodeType===Q.ELEMENT_NODE)}(e))throw new f(f.HIERARCHY_REQUEST_ERR,"Unexpected parent node type "+e.nodeType);if(r&&r.parentNode!==e)throw new f(f.NOT_FOUND_ERR,"child not in parent");if(!function(e){return e&&(e.nodeType===Q.CDATA_SECTION_NODE||e.nodeType===Q.COMMENT_NODE||e.nodeType===Q.DOCUMENT_FRAGMENT_NODE||e.nodeType===Q.DOCUMENT_TYPE_NODE||e.nodeType===Q.ELEMENT_NODE||e.nodeType===Q.PROCESSING_INSTRUCTION_NODE||e.nodeType===Q.TEXT_NODE)}(t)||ne(t)&&e.nodeType!==Q.DOCUMENT_NODE)throw new f(f.HIERARCHY_REQUEST_ERR,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function ce(e,t,r){var n=e.childNodes||[],i=t.childNodes||[];if(t.nodeType===Q.DOCUMENT_FRAGMENT_NODE){var s=i.filter(oe);if(s.length>1||o(i,ie))throw new f(f.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===s.length&&!se(e,r))throw new f(f.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!se(e,r))throw new f(f.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(ne(t)){if(o(n,ne))throw new f(f.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var a=o(n,oe);if(r&&n.indexOf(a)1||o(i,ie))throw new f(f.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===s.length&&!ae(e,r))throw new f(f.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!ae(e,r))throw new f(f.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(ne(t)){function l(e){return ne(e)&&e!==r}if(o(n,l))throw new f(f.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var a=o(n,oe);if(r&&n.indexOf(a)=0;g--){if(""===(E=n[g]).prefix&&E.namespace===e.namespaceURI){d=E.namespace;break}}if(d!==e.namespaceURI)for(g=n.length-1;g>=0;g--){var E;if((E=n[g]).namespace===e.namespaceURI){E.prefix&&(h=E.prefix+":"+u);break}}}t.push("<",h);for(var y=0;y");else{if(t.push(">"),o&&l(u))for(;a;)a.data?t.push(a.data):Ce(a,t,r,n.slice()),a=a.nextSibling;else for(;a;)Ce(a,t,r,n.slice()),a=a.nextSibling;t.push("")}return;case D:case k:for(a=e.firstChild;a;)Ce(a,t,r,n.slice()),a=a.nextSibling;return;case O:return Oe(t,e.name,e.value);case C:return t.push(e.data.replace(/[<&>]/g,K));case A:return t.push(m.CDATA_START,e.data,m.CDATA_END);case M:return t.push(m.COMMENT_START,e.data,m.COMMENT_END);case L:var T=e.publicId,_=e.systemId;return t.push(m.DOCTYPE_DECL_START," ",e.name),T?(t.push(" ",m.PUBLIC," ",T),_&&"."!==_&&t.push(" ",_)):_&&"."!==_&&t.push(" ",m.SYSTEM," ",_),e.internalSubset&&t.push(" [",e.internalSubset,"]"),void t.push(">");case P:return t.push("");case x:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function Ae(e,t,r){var n;switch(t.nodeType){case N:(n=t.cloneNode(!1)).ownerDocument=e;case k:break;case O:r=!0}if(n||(n=t.cloneNode(!1)),n.ownerDocument=e,n.parentNode=null,r)for(var o=t.firstChild;o;)n.appendChild(Ae(e,o,r)),o=o.nextSibling;return n}function xe(e,t,r){var n=new t.constructor(h);for(var o in t)if(s(t,o)){var i=t[o];"object"!=typeof i&&i!=n[o]&&(n[o]=i)}switch(t.childNodes&&(n.childNodes=new H),n.ownerDocument=e,n.nodeType){case N:var a=t.attributes,l=n.attributes=new Y,c=a.length;l._ownerElement=n;for(var u=0;u=0&&eV(t.ownerDocument)?q.DOCUMENT_POSITION_FOLLOWING:q.DOCUMENT_POSITION_PRECEDING);var a=G(t),l=G(r);if(!n&&l.indexOf(t)>=0||o&&t===r)return q.DOCUMENT_POSITION_CONTAINS+q.DOCUMENT_POSITION_PRECEDING;if(!o&&a.indexOf(r)>=0||n&&t===r)return q.DOCUMENT_POSITION_CONTAINED_BY+q.DOCUMENT_POSITION_FOLLOWING;var c=F(l,a);for(var u in c.childNodes){var p=c.childNodes[u];if(p===r)return q.DOCUMENT_POSITION_FOLLOWING;if(p===t)return q.DOCUMENT_POSITION_PRECEDING;if(l.indexOf(p)>=0)return q.DOCUMENT_POSITION_FOLLOWING;if(a.indexOf(p)>=0)return q.DOCUMENT_POSITION_PRECEDING}return 0}},T(R,Q),T(R,Q.prototype),T(q,Q),T(q,Q.prototype),$.prototype={implementation:null,nodeName:"#document",nodeType:D,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType===k){for(var r=e.firstChild;r;){var n=r.nextSibling;this.insertBefore(r,t),r=n}return e}return pe(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===N&&(this.documentElement=e),e},removeChild:function(e){var t=re(this,e);return t===this.documentElement&&(this.documentElement=null),t},replaceChild:function(e,t){pe(this,e,t,ue),e.ownerDocument=this,t&&this.removeChild(t),oe(e)&&(this.documentElement=e)},importNode:function(e,t){return Ae(this,e,t)},getElementById:function(e){var t=null;return Z(this.documentElement,(function(r){if(r.nodeType==N&&r.getAttribute("id")==e)return t=r,!0})),t},createElement:function(e){var t=new he(h);return t.ownerDocument=this,"html"===this.type&&(e=e.toLowerCase()),i(this.contentType)&&(t.namespaceURI=p.HTML),t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new H,(t.attributes=new Y)._ownerElement=t,t},createDocumentFragment:function(){var e=new Se(h);return e.ownerDocument=this,e.childNodes=new H,e},createTextNode:function(e){var t=new ge(h);return t.ownerDocument=this,t.childNodes=new H,t.appendData(e),t},createComment:function(e){var t=new me(h);return t.ownerDocument=this,t.childNodes=new H,t.appendData(e),t},createCDATASection:function(e){var t=new Ee(h);return t.ownerDocument=this,t.childNodes=new H,t.appendData(e),t},createProcessingInstruction:function(e,t){var r=new Te(h);return r.ownerDocument=this,r.childNodes=new H,r.nodeName=r.target=e,r.nodeValue=r.data=t,r},createAttribute:function(e){if(!m.QName_exact.test(e))throw new f(f.INVALID_CHARACTER_ERR,'invalid character in name "'+e+'"');return"html"===this.type&&(e=e.toLowerCase()),this._createAttribute(e)},_createAttribute:function(e){var t=new de(h);return t.ownerDocument=this,t.childNodes=new H,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){if(!m.Name.test(e))throw new f(f.INVALID_CHARACTER_ERR,'not a valid xml name "'+e+'"');if("html"===this.type)throw new f("document is an html document",g.NotSupportedError);var t=new be(h);return t.ownerDocument=this,t.childNodes=new H,t.nodeName=e,t},createElementNS:function(e,t){var r=S(e,t),n=new he(h),o=n.attributes=new Y;return n.childNodes=new H,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=r[0],n.prefix=r[1],n.localName=r[2],o._ownerElement=n,n},createAttributeNS:function(e,t){var r=S(e,t),n=new de(h);return n.ownerDocument=this,n.childNodes=new H,n.nodeName=t,n.name=t,n.specified=!0,n.namespaceURI=r[0],n.prefix=r[1],n.localName=r[2],n}},_($,Q),he.prototype={nodeType:N,attributes:null,getQualifiedName:function(){return this.prefix?this.prefix+":"+this.localName:this.localName},_isInHTMLDocumentAndNamespace:function(){return"html"===this.ownerDocument.type&&this.namespaceURI===p.HTML},hasAttribute:function(e){return!!this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t?t.value:null},getAttributeNode:function(e){return this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase()),this.attributes.getNamedItem(e)},setAttribute:function(e,t){this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase());var r=this.getAttributeNode(e);r?r.value=r.nodeValue=""+t:((r=this.ownerDocument._createAttribute(e)).value=r.nodeValue=""+t,this.setAttributeNode(r))},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);r&&this.removeAttributeNode(r)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);return r?r.value:null},setAttributeNS:function(e,t,r){var n=S(e,t)[2],o=this.getAttributeNodeNS(e,n);o?o.value=o.nodeValue=""+r:((o=this.ownerDocument.createAttributeNS(e,t)).value=o.nodeValue=""+r,this.setAttributeNode(o))},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByClassName:function(e){var t=w(e);return new j(this,(function(r){var n=[];return t.length>0&&Z(r,(function(o){if(o!==r&&o.nodeType===N){var i=o.getAttribute("class");if(i){var s=e===i;if(!s){var a=w(i);s=t.every((l=a,function(e){return l&&-1!==l.indexOf(e)}))}s&&n.push(o)}}var l})),n}))},getElementsByTagName:function(e){var t="html"===(this.nodeType===D?this:this.ownerDocument).type,r=e.toLowerCase();return new j(this,(function(n){var o=[];return Z(n,(function(i){i!==n&&i.nodeType===N&&(("*"===e||i.getQualifiedName()===(t&&i.namespaceURI===p.HTML?r:e))&&o.push(i))})),o}))},getElementsByTagNameNS:function(e,t){return new j(this,(function(r){var n=[];return Z(r,(function(o){o===r||o.nodeType!==N||"*"!==e&&o.namespaceURI!==e||"*"!==t&&o.localName!=t||n.push(o)})),n}))}},$.prototype.getElementsByClassName=he.prototype.getElementsByClassName,$.prototype.getElementsByTagName=he.prototype.getElementsByTagName,$.prototype.getElementsByTagNameNS=he.prototype.getElementsByTagNameNS,_(he,Q),de.prototype.nodeType=O,_(de,Q),fe.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,r){r=this.data.substring(0,e)+r+this.data.substring(e+t),this.nodeValue=this.data=r,this.length=r.length}},_(fe,Q),ge.prototype={nodeName:"#text",nodeType:C,splitText:function(e){var t=this.data,r=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var n=this.ownerDocument.createTextNode(r);return this.parentNode&&this.parentNode.insertBefore(n,this.nextSibling),n}},_(ge,fe),me.prototype={nodeName:"#comment",nodeType:M},_(me,fe),Ee.prototype={nodeName:"#cdata-section",nodeType:A},_(Ee,ge),ye.prototype.nodeType=L,_(ye,Q),ve.prototype.nodeType=U,_(ve,Q),we.prototype.nodeType=I,_(we,Q),be.prototype.nodeType=x,_(be,Q),Se.prototype.nodeName="#document-fragment",Se.prototype.nodeType=k,_(Se,Q),Te.prototype.nodeType=P,_(Te,fe),_e.prototype.serializeToString=function(e,t){return Re.call(e,t)},Q.prototype.toString=Re;try{if(Object.defineProperty){function Pe(e){switch(e.nodeType){case N:case k:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(Pe(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(j.prototype,"length",{get:function(){return B(this),this.$$length}}),Object.defineProperty(Q.prototype,"textContent",{get:function(){return Pe(this)},set:function(e){switch(this.nodeType){case N:case k:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),Ie=function(e,t,r){e["$$"+t]=r}}}catch(Me){}t._updateLiveList=B,t.Attr=de,t.CDATASection=Ee,t.CharacterData=fe,t.Comment=me,t.Document=$,t.DocumentFragment=Se,t.DocumentType=ye,t.DOMImplementation=J,t.Element=he,t.Entity=we,t.EntityReference=be,t.LiveNodeList=j,t.NamedNodeMap=Y,t.Node=Q,t.NodeList=H,t.Notation=ve,t.Text=ge,t.ProcessingInstruction=Te,t.XMLSerializer=_e},6559:(e,t,r)=>{"use strict";var n=r(4582).freeze;t.XML_ENTITIES=n({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),t.HTML_ENTITIES=n({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),t.entityMap=t.HTML_ENTITIES},2983:(e,t,r)=>{"use strict";function n(e,t){e.prototype=Object.create(Error.prototype,{constructor:{value:e},name:{value:e.name,enumerable:!0,writable:t}})}var o=r(4582).freeze({Error:"Error",IndexSizeError:"IndexSizeError",DomstringSizeError:"DomstringSizeError",HierarchyRequestError:"HierarchyRequestError",WrongDocumentError:"WrongDocumentError",InvalidCharacterError:"InvalidCharacterError",NoDataAllowedError:"NoDataAllowedError",NoModificationAllowedError:"NoModificationAllowedError",NotFoundError:"NotFoundError",NotSupportedError:"NotSupportedError",InUseAttributeError:"InUseAttributeError",InvalidStateError:"InvalidStateError",SyntaxError:"SyntaxError",InvalidModificationError:"InvalidModificationError",NamespaceError:"NamespaceError",InvalidAccessError:"InvalidAccessError",ValidationError:"ValidationError",TypeMismatchError:"TypeMismatchError",SecurityError:"SecurityError",NetworkError:"NetworkError",AbortError:"AbortError",URLMismatchError:"URLMismatchError",QuotaExceededError:"QuotaExceededError",TimeoutError:"TimeoutError",InvalidNodeTypeError:"InvalidNodeTypeError",DataCloneError:"DataCloneError",EncodingError:"EncodingError",NotReadableError:"NotReadableError",UnknownError:"UnknownError",ConstraintError:"ConstraintError",DataError:"DataError",TransactionInactiveError:"TransactionInactiveError",ReadOnlyError:"ReadOnlyError",VersionError:"VersionError",OperationError:"OperationError",NotAllowedError:"NotAllowedError",OptOutError:"OptOutError"}),i=Object.keys(o);function s(e){return"number"==typeof e&&e>=1&&e<=25}function a(e,t){var r;s(e)?(this.name=i[e],this.message=t||""):(this.message=e,this.name="string"==typeof(r=t)&&r.substring(r.length-o.Error.length)===o.Error?t:o.Error),Error.captureStackTrace&&Error.captureStackTrace(this,a)}n(a,!0),Object.defineProperties(a.prototype,{code:{enumerable:!0,get:function(){var e=i.indexOf(this.name);return s(e)?e:0}}});for(var l={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25},c=Object.entries(l),u=0;u{"use strict";function r(e){try{"function"!=typeof e&&(e=RegExp);var t=new e("𝌆","u").exec("𝌆");return!!t&&2===t[0].length}catch(e){}return!1}var n=r();function o(e){if("["!==e.source[0])throw new Error(e+" can not be used with chars");return e.source.slice(1,e.source.lastIndexOf("]"))}function i(e,t){if("["!==e.source[0])throw new Error("/"+e.source+"/ can not be used with chars_without");if(!t||"string"!=typeof t)throw new Error(JSON.stringify(t)+" is not a valid search");if(-1===e.source.indexOf(t))throw new Error('"'+t+'" is not is /'+e.source+"/");if("-"===t&&1!==e.source.indexOf(t))throw new Error('"'+t+'" is not at the first postion of /'+e.source+"/");return new RegExp(e.source.replace(t,""),n?"u":"")}function s(e){var t=this;return new RegExp(Array.prototype.slice.call(arguments).map((function(e){var r="string"==typeof e;if(r&&void 0===t&&"|"===e)throw new Error("use regg instead of reg to wrap expressions with `|`!");return r?e:e.source})).join(""),n?"mu":"m")}function a(e){if(0===arguments.length)throw new Error("no parameters provided");return s.apply(a,["(?:"].concat(Array.prototype.slice.call(arguments),[")"]))}var l=/[-\x09\x0A\x0D\x20-\x2C\x2E-\uD7FF\uE000-\uFFFD]/;n&&(l=s("[",o(l),"\\u{10000}-\\u{10FFFF}","]"));var c=/[\x20\x09\x0D\x0A]/,u=o(c),p=s(c,"+"),h=s(c,"*"),d=/[:_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;n&&(d=s("[",o(d),"\\u{10000}-\\u{10FFFF}","]"));var f=s("[",o(d),o(/[-.0-9\xB7]/),o(/[\u0300-\u036F\u203F-\u2040]/),"]"),g=s(d,f,"*"),m=s(f,"+"),E=s("&",g,";"),y=a(/&#[0-9]+;|&#x[0-9a-fA-F]+;/),v=a(E,"|",y),w=s("%",g,";"),b=a(s('"',a(/[^%&"]/,"|",w,"|",v),"*",'"'),"|",s("'",a(/[^%&']/,"|",w,"|",v),"*","'")),S=a('"',a(/[^<&"]/,"|",v),"*",'"',"|","'",a(/[^<&']/,"|",v),"*","'"),T=s(i(d,":"),i(f,":"),"*"),_=s(T,a(":",T),"?"),R=s("^",_,"$"),N=s("(",_,")"),O=a(/"[^"]*"|'[^']*'/),C=s(/^<\?/,"(",g,")",a(p,"(",l,"*?)"),"?",/\?>/),A=/[\x20\x0D\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/,x=a('"',A,'*"',"|","'",i(A,"'"),"*'"),I="\x3c!--",P=s(I,a(i(l,"-"),"|",s("-",i(l,"-"))),"*","--\x3e"),M="#PCDATA",D=a(s(/\(/,h,M,a(h,/\|/,h,_),"*",h,/\)\*/),"|",s(/\(/,h,M,h,/\)/)),L=a("EMPTY","|","ANY","|",D,"|",s(/\([^>]+\)/,/[?*+]?/)),k=s(""),U=s("NOTATION",p,/\(/,h,g,a(h,/\|/,h,g),"*",h,/\)/),q=s(/\(/,h,m,a(h,/\|/,h,m),"*",h,/\)/),G=a(U,"|",q),F=a(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/,"|",G),V=a(/#REQUIRED|#IMPLIED/,"|",a(a("#FIXED",p),"?",S)),H=s(""),j="SYSTEM",B="PUBLIC",Y=a(a(j,p,O),"|",a(B,p,x,p,O)),X=s("^",a(a(j,p,"(?",O,")"),"|",a(B,p,"(?",x,")",p,"(?",O,")"))),z=a(p,"NDATA",p,g),W=""),Q=a(b,"|",Y),K=a(J,"|",s(W,p,"%",p,g,p,Q,h,">")),Z=s(B,p,x),$=s(""),ee=s(h,"=",h),te=/1[.]\d+/,re=s(p,"version",ee,a("'",te,"'","|",'"',te,'"')),ne=/[A-Za-z][-A-Za-z0-9._]*/,oe=s(/^<\?xml/,re,a(p,"encoding",ee,a('"',ne,'"',"|","'",ne,"'")),"?",a(p,"standalone",ee,a("'",a("yes","|","no"),"'","|",'"',a("yes","|","no"),'"')),"?",h,/\?>/),ie=s(l,"*?",/\]\]>/),se=s(/",t.CDSect=se,t.Char=l,t.Comment=P,t.COMMENT_START=I,t.COMMENT_END="--\x3e",t.DOCTYPE_DECL_START="{"use strict";var n=r(4582);n.assign,n.hasDefaultHTMLNamespace,n.isHTMLMimeType,n.isValidMimeType,n.MIME_TYPE,n.NAMESPACE;var o=r(2983);o.DOMException,o.DOMExceptionName,o.ExceptionCode,o.ParseError;var i=r(4722);i.Attr,i.CDATASection,i.CharacterData,i.Comment,i.Document,i.DocumentFragment,i.DocumentType,i.DOMImplementation,i.Element,i.Entity,i.EntityReference,i.LiveNodeList,i.NamedNodeMap,i.Node,i.NodeList,i.Notation,i.ProcessingInstruction,i.Text,i.XMLSerializer;var s=r(5752);t.S4=s.DOMParser,s.onErrorStopParsing,s.onWarningStopParsing},4466:(e,t,r)=>{"use strict";var n=r(4582),o=r(2763),i=r(2983),s=n.isHTMLEscapableRawTextElement,a=n.isHTMLMimeType,l=n.isHTMLRawTextElement,c=n.hasOwn,u=n.NAMESPACE,p=i.ParseError,h=i.DOMException;function d(){}d.prototype={parse:function(e,t,r){var i=this.domBuilder;i.startDocument(),v(t,t=Object.create(null)),function(e,t,r,i,s){var l=a(i.mimeType);e.indexOf(o.UNICODE_REPLACEMENT_CHARACTER)>=0&&s.warning("Unicode replacement character detected, source encoding issues?");function u(e){if(e>65535){var t=55296+((e-=65536)>>10),r=56320+(1023&e);return String.fromCharCode(t,r)}return String.fromCharCode(e)}function d(e){var t=";"===e[e.length-1]?e:e+";";if(!l&&t!==e)return s.error("EntityRef: expecting ;"),e;var n=o.Reference.exec(t);if(!n||n[0].length!==t.length)return s.error("entity not matching Reference production: "+e),e;var i=t.slice(1,-1);return c(r,i)?r[i]:"#"===i.charAt(0)?u(parseInt(i.substr(1).replace("x","0x"))):(s.error("entity not found:"+e),e)}function v(t){if(t>x){var r=e.substring(x,t).replace(f,d);O&&w(x),i.characters(r,0,t-x),x=t}}function w(t,r){for(;t>=R&&(r=N.exec(e));)_=r.index,R=_+r[0].length,O.lineNumber++;O.columnNumber=t-_+1}var _=0,R=0,N=/.*(?:\r\n?|\n)|.*$/g,O=i.locator,C=[{currentNSMap:t}],A=[],x=0;for(;;){try{var I=e.indexOf("<",x);if(I<0){if(!l&&A.length>0)return s.fatalError("unclosed xml tag(s): "+A.join(", "));if(!e.substring(x).match(/^\s*$/)){var P=i.doc,M=P.createTextNode(e.substr(x));if(P.documentElement)return s.error("Extra content at the end of the document");P.appendChild(M),i.currentElement=M}return}if(I>x){var D=e.substring(x,I);l||0!==A.length||(D=D.replace(new RegExp(o.S_OPT.source,"g"),""))&&s.error("Unexpected content outside root element: '"+D+"'"),v(I)}switch(e.charAt(I+1)){case"/":var L=e.indexOf(">",I+2),k=e.substring(I+2,L>0?L:void 0);if(!k)return s.fatalError("end tag name missing");var U=L>0&&o.reg("^",o.QName_group,o.S_OPT,"$").exec(k);if(!U)return s.fatalError('end tag name contains invalid characters: "'+k+'"');if(!i.currentElement&&!i.doc.documentElement)return;var q=A[A.length-1]||i.currentElement.tagName||i.doc.documentElement.tagName||"";if(q!==U[1]){var G=U[1].toLowerCase();if(!l||q.toLowerCase()!==G)return s.fatalError('Opening and ending tag mismatch: "'+q+'" != "'+k+'"')}var F=C.pop();A.pop();var V=F.localNSMap;if(i.endElement(F.uri,F.localName,q),V)for(var H in V)c(V,H)&&i.endPrefixMapping(H);L++;break;case"?":O&&w(I),L=S(e,I,i,s);break;case"!":O&&w(I),L=b(e,I,i,s,l);break;default:O&&w(I);var j=new T,B=C[C.length-1].currentNSMap,Y=(L=m(e,I,j,B,d,s,l),j.length);if(j.closed||(l&&n.isHTMLVoidElement(j.tagName)?j.closed=!0:A.push(j.tagName)),O&&Y){for(var X=g(O,{}),z=0;zx?x=L:v(Math.max(I,x)+1)}}(e,t,r,i,this.errorHandler),i.endDocument()}};var f=/&#?\w+;?/g;function g(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function m(e,t,r,n,o,i,s){function a(e,t,n){return c(r.attributeNames,e)?i.fatalError("Attribute "+e+" redefined"):!s&&t.indexOf("<")>=0?i.fatalError("Unescaped '<' not allowed in attributes values"):void r.addValue(e,t.replace(/[\t\n\r]/g," ").replace(f,o),n)}for(var l,u=++t,p=0;;){var h=e.charAt(u);switch(h){case"=":if(1===p)l=e.slice(t,u),p=3;else{if(2!==p)throw new Error("attribute equal must after attrName");p=3}break;case"'":case'"':if(3===p||1===p){if(1===p&&(i.warning('attribute value must after "="'),l=e.slice(t,u)),t=u+1,!((u=e.indexOf(h,t))>0))throw new Error("attribute value no end '"+h+"' match");a(l,d=e.slice(t,u),t-1),p=5}else{if(4!=p)throw new Error('attribute value must after "="');a(l,d=e.slice(t,u),t),i.warning('attribute "'+l+'" missed start quot('+h+")!!"),t=u+1,p=5}break;case"/":switch(p){case 0:r.setTagName(e.slice(t,u));case 5:case 6:case 7:p=7,r.closed=!0;case 4:case 1:break;case 2:r.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return i.error("unexpected end of input"),0==p&&r.setTagName(e.slice(t,u)),u;case">":switch(p){case 0:r.setTagName(e.slice(t,u));case 5:case 6:case 7:break;case 4:case 1:"/"===(d=e.slice(t,u)).slice(-1)&&(r.closed=!0,d=d.slice(0,-1));case 2:2===p&&(d=l),4==p?(i.warning('attribute "'+d+'" missed quot(")!'),a(l,d,t)):(s||i.warning('attribute "'+d+'" missed value!! "'+d+'" instead!!'),a(d,d,t));break;case 3:if(!s)return i.fatalError("AttValue: ' or \" expected")}return u;case"€":h=" ";default:if(h<=" ")switch(p){case 0:r.setTagName(e.slice(t,u)),p=6;break;case 1:l=e.slice(t,u),p=2;break;case 4:var d=e.slice(t,u);i.warning('attribute "'+d+'" missed quot(")!!'),a(l,d,t);case 5:p=6}else switch(p){case 2:s||i.warning('attribute "'+l+'" missed value!! "'+l+'" instead2!!'),a(l,l,t),t=u,p=1;break;case 5:i.warning('attribute space is required"'+l+'"!!');case 6:p=1,t=u;break;case 3:p=4,t=u;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}u++}}function E(e,t,r){for(var n=e.tagName,o=null,i=e.length;i--;){var s=e[i],a=s.qName,l=s.value;if((f=a.indexOf(":"))>0)var p=s.prefix=a.slice(0,f),h=a.slice(f+1),d="xmlns"===p&&h;else h=a,p=null,d="xmlns"===a&&"";s.localName=h,!1!==d&&(null==o&&(o=Object.create(null),v(r,r=Object.create(null))),r[d]=o[d]=l,s.uri=u.XMLNS,t.startPrefixMapping(d,l))}for(i=e.length;i--;)(s=e[i]).prefix&&("xml"===s.prefix&&(s.uri=u.XML),"xmlns"!==s.prefix&&(s.uri=r[s.prefix]));var f;(f=n.indexOf(":"))>0?(p=e.prefix=n.slice(0,f),h=e.localName=n.slice(f+1)):(p=null,h=e.localName=n);var g=e.uri=r[p||""];if(t.startElement(g,h,n,e),!e.closed)return e.currentNSMap=r,e.localNSMap=o,!0;if(t.endElement(g,h,n),o)for(p in o)c(o,p)&&t.endPrefixMapping(p)}function y(e,t,r,n,o){var i=s(r);if(i||l(r)){var a=e.indexOf("",t),c=e.substring(t+1,a);return i&&(c=c.replace(f,n)),o.characters(c,0,c.length),a}return t+1}function v(e,t){for(var r in e)c(e,r)&&(t[r]=e[r])}function w(e,t){var r=t;function n(t){return t=t||0,e.charAt(r+t)}function i(e){r+=e=e||1}function s(){return e.substring(r)}return{char:n,getIndex:function(){return r},getMatch:function(e){var t=o.reg("^",e).exec(s());return t?(i(t[0].length),t[0]):null},getSource:function(){return e},skip:i,skipBlanks:function(){for(var t=0;r"!==s.char()?n.fatalError("doctype not terminated with > at position "+s.getIndex()):(s.skip(1),r.startDTD(c.name,c.publicId,c.systemId,c.internalSubset),r.endDTD(),s.getIndex());default:return n.fatalError('Not well-formed XML starting with "0)return n.fatalError("processing instruction at position "+t+" is an xml declaration which is only at the start of the document");if(!o.XMLDecl.test(e.substring(t)))return n.fatalError("xml declaration is not well-formed")}return r.processingInstruction(i[1],i[2]),t+i[0].length}function T(){this.attributeNames=Object.create(null)}T.prototype={setTagName:function(e){if(!o.QName_exact.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,r){if(!o.QName_exact.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:r}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=d,t.parseUtils=w,t.parseDoctypeCommentOrCData=b},6964:function(e,t,r){ /*! diff --git a/dist/modules/GpfExtOlDrawing.css b/dist/modules/GpfExtOlDrawing.css index edd93d31..b53b8be4 100644 --- a/dist/modules/GpfExtOlDrawing.css +++ b/dist/modules/GpfExtOlDrawing.css @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */div[id^=GPdrawing-]{right:8px;top:48px}button[id^=GPshowDrawingPicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowDrawingPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GPdrawingPanel-]{bottom:unset;height:inherit;left:-276px;overflow:hidden;position:absolute;top:0}div[id^=GPdrawingBasicPanel-]{padding:10px 15px}.drawing-tool-section:not(:last-child){border-bottom:1px solid #ddd}.drawing-tool-section{padding:2px 5px 5px}.drawing-tool-section-title{font-size:.75em;margin-bottom:0;margin-top:0;text-transform:uppercase}div.drawing-tools-flex-display{justify-content:center;margin:12px 0;padding:0}.drawing-tools-flex-display{align-items:center;display:flex}.drawing-tool:not(:last-child){margin-right:10px}div[id^=GPlayerSwitcher-]{right:8px;top:8px}div[id^=GPlayerSwitcher-] [draggable]{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;user-select:none;-khtml-user-drag:element;-webkit-user-drag:element}div[id^=GPlayerSwitcher-] input[type=checkbox]+button+dialog{max-height:0}input[id^=GPshowLayersList-]{display:none}button[id^=GPshowLayersListPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowLayersListPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}.position>div[id^=GPlayerSwitcher-]>dialog[id^=GPlayersList]{position:absolute}.position>div[id^=GPlayerSwitcher-]>button[id^=GPshowLayersListPicto-]{float:unset}dialog[id^=GPlayersList]{float:left;position:relative}button[id^=GPshowLayersListPicto-]{float:right}dialog[id^=GPlayersList]{border-bottom-right-radius:0;opacity:0}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{height:auto;max-height:inherit;opacity:1}.GPlayerCounter{background:#fff;border-radius:100px;color:#000;display:inline-block;font-size:12px;left:15px;line-height:1;min-width:15px;padding:2px 0 1px;position:relative;text-align:center;top:-15px}.GPlayerSwitcher_layer{border-bottom:1px dotted #ccc;overflow:hidden;position:relative;top:0}dialog[id^=GPlayersList] .GPlayerSwitcher_layer:last-child{border-bottom:none}.GPlayerAdvancedTools{display:block;max-height:0;opacity:0;transition:max-height .5s ease-out 0s,opacity .5s ease-out 0s}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{opacity:1}[id^=GPlayerInfoPanel]{left:unset;right:100%}div[id^=GPlayerInfoContent]{max-height:200px;overflow-y:auto;padding-left:10px;padding-right:10px;position:relative} /*# sourceMappingURL=GpfExtOlDrawing.css.map*/ \ No newline at end of file diff --git a/dist/modules/GpfExtOlDrawing.js b/dist/modules/GpfExtOlDrawing.js index 41a5edcb..2ac5517c 100644 --- a/dist/modules/GpfExtOlDrawing.js +++ b/dist/modules/GpfExtOlDrawing.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var e={4582:(e,t)=>{"use strict";function r(e,t){return void 0===t&&(t=Object),t&&"function"==typeof t.getOwnPropertyDescriptors&&(e=t.create(null,t.getOwnPropertyDescriptors(e))),t&&"function"==typeof t.freeze?t.freeze(e):e}function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var o=r({allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,formnovalidate:!0,hidden:!0,ismap:!0,itemscope:!0,loop:!0,multiple:!0,muted:!0,nomodule:!0,novalidate:!0,open:!0,playsinline:!0,readonly:!0,required:!0,reversed:!0,selected:!0});var i=r({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});var a=r({script:!1,style:!1,textarea:!0,title:!0});function A(e){return e===l.HTML}var l=r({HTML:"text/html",XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),s=Object.keys(l).map((function(e){return l[e]}));var g=r({HTML:"http://www.w3.org/1999/xhtml",SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});t.assign=function(e,t){if(null===e||"object"!=typeof e)throw new TypeError("target is not an object");for(var r in t)n(t,r)&&(e[r]=t[r]);return e},t.find=function(e,t,r){if(void 0===r&&(r=Array.prototype),e&&"function"==typeof r.find)return r.find.call(e,t);for(var o=0;o-1},t.MIME_TYPE=l,t.NAMESPACE=g},5752:(e,t,r)=>{"use strict";var n=r(4582),o=r(4722),i=r(2983),a=r(6559),A=r(4466),l=o.DOMImplementation,s=n.hasDefaultHTMLNamespace,g=n.isHTMLMimeType,c=n.isValidMimeType,d=n.MIME_TYPE,u=n.NAMESPACE,C=i.ParseError,p=A.XMLReader;function I(e){return e.replace(/\r[\n\u0085]/g,"\n").replace(/[\r\u0085\u2028]/g,"\n")}function f(e){if(e=e||{locator:!0},this.assign=e.assign||n.assign,this.domHandler=e.domHandler||h,this.onError=e.onError||e.errorHandler,e.errorHandler&&"function"!=typeof e.errorHandler)throw new TypeError("errorHandler object is no longer supported, switch to onError!");e.errorHandler&&e.errorHandler("warning","The `errorHandler` option has been deprecated, use `onError` instead!",this),this.normalizeLineEndings=e.normalizeLineEndings||I,this.locator=!!e.locator,this.xmlns=this.assign(Object.create(null),e.xmlns)}function h(e){var t=e||{};this.mimeType=t.mimeType||d.XML_APPLICATION,this.defaultNamespace=t.defaultNamespace||null,this.cdata=!1,this.currentElement=void 0,this.doc=void 0,this.locator=void 0,this.onError=t.onError}function m(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function y(e,t,r){return"string"==typeof e?e.substr(t,r):e.length>=t+r||t?new java.lang.String(e,t,r)+"":e}function v(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}f.prototype.parseFromString=function(e,t){if(!c(t))throw new TypeError('DOMParser.parseFromString: the provided mimeType "'+t+'" is not valid.');var r=this.assign(Object.create(null),this.xmlns),o=a.XML_ENTITIES,i=r[""]||null;s(t)?(o=a.HTML_ENTITIES,i=u.HTML):t===d.XML_SVG_IMAGE&&(i=u.SVG),r[""]=i,r.xml=r.xml||u.XML;var A=new this.domHandler({mimeType:t,defaultNamespace:i,onError:this.onError}),l=this.locator?{}:void 0;this.locator&&A.setDocumentLocator(l);var g=new p;return g.errorHandler=A,g.domBuilder=A,!n.isHTMLMimeType(t)&&"string"!=typeof e&&g.errorHandler.fatalError("source is not a string"),g.parse(this.normalizeLineEndings(String(e)),r,o),A.doc.documentElement||g.errorHandler.fatalError("missing root element"),A.doc},h.prototype={startDocument:function(){var e=new l;this.doc=g(this.mimeType)?e.createHTMLDocument(!1):e.createDocument(this.defaultNamespace,"")},startElement:function(e,t,r,n){var o=this.doc,i=o.createElementNS(e,r||t),a=n.length;v(this,i),this.currentElement=i,this.locator&&m(this.locator,i);for(var A=0;A{"use strict";var n=r(4582),o=n.find,i=n.hasDefaultHTMLNamespace,a=n.hasOwn,A=n.isHTMLMimeType,l=n.isHTMLRawTextElement,s=n.isHTMLVoidElement,g=n.MIME_TYPE,c=n.NAMESPACE,d=Symbol(),u=r(2983),C=u.DOMException,p=u.DOMExceptionName,I=r(2763);function f(e){if(e!==d)throw new TypeError("Illegal constructor")}function h(e){return""!==e}function m(e,t){return a(e,t)||(e[t]=!0),e}function y(e){if(!e)return[];var t=function(e){return e?e.split(/[\t\n\f\r ]+/).filter(h):[]}(e);return Object.keys(t.reduce(m,{}))}function v(e){if(!I.QName_exact.test(e))throw new C(C.INVALID_CHARACTER_ERR,'invalid character in qualified name "'+e+'"')}function b(e,t){v(t),e=e||null;var r=null,o=t;if(t.indexOf(":")>=0){var i=t.split(":");r=i[0],o=i[1]}if(null!==r&&null===e)throw new C(C.NAMESPACE_ERR,"prefix is non-null and namespace is null");if("xml"===r&&e!==n.NAMESPACE.XML)throw new C(C.NAMESPACE_ERR,'prefix is "xml" and namespace is not the XML namespace');if(("xmlns"===r||"xmlns"===t)&&e!==n.NAMESPACE.XMLNS)throw new C(C.NAMESPACE_ERR,'either qualifiedName or prefix is "xmlns" and namespace is not the XMLNS namespace');if(e===n.NAMESPACE.XMLNS&&"xmlns"!==r&&"xmlns"!==t)throw new C(C.NAMESPACE_ERR,'namespace is the XMLNS namespace and neither qualifiedName nor prefix is "xmlns"');return[e,r,o]}function w(e,t){for(var r in e)a(e,r)&&(t[r]=e[r])}function E(e,t){var r=e.prototype;if(!(r instanceof t)){function n(){}n.prototype=t.prototype,w(r,n=new n),e.prototype=r=n}r.constructor!=e&&("function"!=typeof e&&console.error("unknown Class:"+e),r.constructor=e)}var D={},M=D.ELEMENT_NODE=1,S=D.ATTRIBUTE_NODE=2,T=D.TEXT_NODE=3,O=D.CDATA_SECTION_NODE=4,N=D.ENTITY_REFERENCE_NODE=5,R=D.ENTITY_NODE=6,P=D.PROCESSING_INSTRUCTION_NODE=7,k=D.COMMENT_NODE=8,L=D.DOCUMENT_NODE=9,U=D.DOCUMENT_TYPE_NODE=10,x=D.DOCUMENT_FRAGMENT_NODE=11,B=D.NOTATION_NODE=12,G=n.freeze({DOCUMENT_POSITION_DISCONNECTED:1,DOCUMENT_POSITION_PRECEDING:2,DOCUMENT_POSITION_FOLLOWING:4,DOCUMENT_POSITION_CONTAINS:8,DOCUMENT_POSITION_CONTAINED_BY:16,DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:32});function F(e){for(var t=[];e.parentNode||e.ownerElement;)e=e.parentNode||e.ownerElement,t.unshift(e);return t}function V(e,t){if(t.length=0){for(var o=t.length-1;n<=o;)t[n]=t[++n];if(t.length=o,e){var i=e.ownerDocument;i&&ee(i,e,r),r.ownerElement=null}}}function X(){}function q(e){f(e)}function K(e){return("<"==e?"<":">"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function _(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(_(e,t))return!0}while(e=e.nextSibling)}function $(e,t){f(e);var r=t||{};this.ownerDocument=this,this.contentType=r.contentType||g.XML_APPLICATION,this.type=A(this.contentType)?"html":"xml"}function ee(e,t,r,n){e&&e._inc++,r.namespaceURI===c.XMLNS&&delete t._nsMap[r.prefix?r.localName:""]}function te(e,t,r){if(e&&e._inc){e._inc++;var n=t.childNodes;if(r&&!r.nextSibling)n[n.length++]=r;else{for(var o=t.firstChild,i=0;o;)n[i++]=o,o=o.nextSibling;n.length=i,delete n[n.length]}}}function re(e,t){if(e!==t.parentNode)throw new C(C.NOT_FOUND_ERR,"child's parent is not parent");var r=t.previousSibling,n=t.nextSibling;return r?r.nextSibling=n:e.firstChild=n,n?n.previousSibling=r:e.lastChild=r,te(e.ownerDocument,e),t.parentNode=null,t.previousSibling=null,t.nextSibling=null,t}function ne(e){return e&&e.nodeType===q.DOCUMENT_TYPE_NODE}function oe(e){return e&&e.nodeType===q.ELEMENT_NODE}function ie(e){return e&&e.nodeType===q.TEXT_NODE}function ae(e,t){var r=e.childNodes||[];if(o(r,oe)||ne(t))return!1;var n=o(r,ne);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function Ae(e,t){var r=e.childNodes||[];if(o(r,(function(e){return oe(e)&&e!==t})))return!1;var n=o(r,ne);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function le(e,t,r){if(!function(e){return e&&(e.nodeType===q.DOCUMENT_NODE||e.nodeType===q.DOCUMENT_FRAGMENT_NODE||e.nodeType===q.ELEMENT_NODE)}(e))throw new C(C.HIERARCHY_REQUEST_ERR,"Unexpected parent node type "+e.nodeType);if(r&&r.parentNode!==e)throw new C(C.NOT_FOUND_ERR,"child not in parent");if(!function(e){return e&&(e.nodeType===q.CDATA_SECTION_NODE||e.nodeType===q.COMMENT_NODE||e.nodeType===q.DOCUMENT_FRAGMENT_NODE||e.nodeType===q.DOCUMENT_TYPE_NODE||e.nodeType===q.ELEMENT_NODE||e.nodeType===q.PROCESSING_INSTRUCTION_NODE||e.nodeType===q.TEXT_NODE)}(t)||ne(t)&&e.nodeType!==q.DOCUMENT_NODE)throw new C(C.HIERARCHY_REQUEST_ERR,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function se(e,t,r){var n=e.childNodes||[],i=t.childNodes||[];if(t.nodeType===q.DOCUMENT_FRAGMENT_NODE){var a=i.filter(oe);if(a.length>1||o(i,ie))throw new C(C.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===a.length&&!ae(e,r))throw new C(C.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!ae(e,r))throw new C(C.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(ne(t)){if(o(n,ne))throw new C(C.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var A=o(n,oe);if(r&&n.indexOf(A)1||o(i,ie))throw new C(C.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===a.length&&!Ae(e,r))throw new C(C.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!Ae(e,r))throw new C(C.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(ne(t)){function l(e){return ne(e)&&e!==r}if(o(n,l))throw new C(C.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var A=o(n,oe);if(r&&n.indexOf(A)=0;p--){if(""===(f=n[p]).prefix&&f.namespace===e.namespaceURI){u=f.namespace;break}}if(u!==e.namespaceURI)for(p=n.length-1;p>=0;p--){var f;if((f=n[p]).namespace===e.namespaceURI){f.prefix&&(d=f.prefix+":"+g);break}}}t.push("<",d);for(var h=0;h");else{if(t.push(">"),o&&l(g))for(;A;)A.data?t.push(A.data):Te(A,t,r,n.slice()),A=A.nextSibling;else for(;A;)Te(A,t,r,n.slice()),A=A.nextSibling;t.push("")}return;case L:case x:for(A=e.firstChild;A;)Te(A,t,r,n.slice()),A=A.nextSibling;return;case S:return Se(t,e.name,e.value);case T:return t.push(e.data.replace(/[<&>]/g,K));case O:return t.push(I.CDATA_START,e.data,I.CDATA_END);case k:return t.push(I.COMMENT_START,e.data,I.COMMENT_END);case U:var w=e.publicId,E=e.systemId;return t.push(I.DOCTYPE_DECL_START," ",e.name),w?(t.push(" ",I.PUBLIC," ",w),E&&"."!==E&&t.push(" ",E)):E&&"."!==E&&t.push(" ",I.SYSTEM," ",E),e.internalSubset&&t.push(" [",e.internalSubset,"]"),void t.push(">");case P:return t.push("");case N:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function Oe(e,t,r){var n;switch(t.nodeType){case M:(n=t.cloneNode(!1)).ownerDocument=e;case x:break;case S:r=!0}if(n||(n=t.cloneNode(!1)),n.ownerDocument=e,n.parentNode=null,r)for(var o=t.firstChild;o;)n.appendChild(Oe(e,o,r)),o=o.nextSibling;return n}function Ne(e,t,r){var n=new t.constructor(d);for(var o in t)if(a(t,o)){var i=t[o];"object"!=typeof i&&i!=n[o]&&(n[o]=i)}switch(t.childNodes&&(n.childNodes=new Y),n.ownerDocument=e,n.nodeType){case M:var A=t.attributes,l=n.attributes=new Q,s=A.length;l._ownerElement=n;for(var g=0;g=0&&ej(t.ownerDocument)?G.DOCUMENT_POSITION_FOLLOWING:G.DOCUMENT_POSITION_PRECEDING);var A=F(t),l=F(r);if(!n&&l.indexOf(t)>=0||o&&t===r)return G.DOCUMENT_POSITION_CONTAINS+G.DOCUMENT_POSITION_PRECEDING;if(!o&&A.indexOf(r)>=0||n&&t===r)return G.DOCUMENT_POSITION_CONTAINED_BY+G.DOCUMENT_POSITION_FOLLOWING;var s=V(l,A);for(var g in s.childNodes){var c=s.childNodes[g];if(c===r)return G.DOCUMENT_POSITION_FOLLOWING;if(c===t)return G.DOCUMENT_POSITION_PRECEDING;if(l.indexOf(c)>=0)return G.DOCUMENT_POSITION_FOLLOWING;if(A.indexOf(c)>=0)return G.DOCUMENT_POSITION_PRECEDING}return 0}},w(D,q),w(D,q.prototype),w(G,q),w(G,q.prototype),$.prototype={implementation:null,nodeName:"#document",nodeType:L,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType===x){for(var r=e.firstChild;r;){var n=r.nextSibling;this.insertBefore(r,t),r=n}return e}return ce(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===M&&(this.documentElement=e),e},removeChild:function(e){var t=re(this,e);return t===this.documentElement&&(this.documentElement=null),t},replaceChild:function(e,t){ce(this,e,t,ge),e.ownerDocument=this,t&&this.removeChild(t),oe(e)&&(this.documentElement=e)},importNode:function(e,t){return Oe(this,e,t)},getElementById:function(e){var t=null;return _(this.documentElement,(function(r){if(r.nodeType==M&&r.getAttribute("id")==e)return t=r,!0})),t},createElement:function(e){var t=new de(d);return t.ownerDocument=this,"html"===this.type&&(e=e.toLowerCase()),i(this.contentType)&&(t.namespaceURI=c.HTML),t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new Y,(t.attributes=new Q)._ownerElement=t,t},createDocumentFragment:function(){var e=new be(d);return e.ownerDocument=this,e.childNodes=new Y,e},createTextNode:function(e){var t=new pe(d);return t.ownerDocument=this,t.childNodes=new Y,t.appendData(e),t},createComment:function(e){var t=new Ie(d);return t.ownerDocument=this,t.childNodes=new Y,t.appendData(e),t},createCDATASection:function(e){var t=new fe(d);return t.ownerDocument=this,t.childNodes=new Y,t.appendData(e),t},createProcessingInstruction:function(e,t){var r=new we(d);return r.ownerDocument=this,r.childNodes=new Y,r.nodeName=r.target=e,r.nodeValue=r.data=t,r},createAttribute:function(e){if(!I.QName_exact.test(e))throw new C(C.INVALID_CHARACTER_ERR,'invalid character in name "'+e+'"');return"html"===this.type&&(e=e.toLowerCase()),this._createAttribute(e)},_createAttribute:function(e){var t=new ue(d);return t.ownerDocument=this,t.childNodes=new Y,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){if(!I.Name.test(e))throw new C(C.INVALID_CHARACTER_ERR,'not a valid xml name "'+e+'"');if("html"===this.type)throw new C("document is an html document",p.NotSupportedError);var t=new ve(d);return t.ownerDocument=this,t.childNodes=new Y,t.nodeName=e,t},createElementNS:function(e,t){var r=b(e,t),n=new de(d),o=n.attributes=new Q;return n.childNodes=new Y,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=r[0],n.prefix=r[1],n.localName=r[2],o._ownerElement=n,n},createAttributeNS:function(e,t){var r=b(e,t),n=new ue(d);return n.ownerDocument=this,n.childNodes=new Y,n.nodeName=t,n.name=t,n.specified=!0,n.namespaceURI=r[0],n.prefix=r[1],n.localName=r[2],n}},E($,q),de.prototype={nodeType:M,attributes:null,getQualifiedName:function(){return this.prefix?this.prefix+":"+this.localName:this.localName},_isInHTMLDocumentAndNamespace:function(){return"html"===this.ownerDocument.type&&this.namespaceURI===c.HTML},hasAttribute:function(e){return!!this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t?t.value:null},getAttributeNode:function(e){return this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase()),this.attributes.getNamedItem(e)},setAttribute:function(e,t){this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase());var r=this.getAttributeNode(e);r?r.value=r.nodeValue=""+t:((r=this.ownerDocument._createAttribute(e)).value=r.nodeValue=""+t,this.setAttributeNode(r))},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);r&&this.removeAttributeNode(r)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);return r?r.value:null},setAttributeNS:function(e,t,r){var n=b(e,t)[2],o=this.getAttributeNodeNS(e,n);o?o.value=o.nodeValue=""+r:((o=this.ownerDocument.createAttributeNS(e,t)).value=o.nodeValue=""+r,this.setAttributeNode(o))},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByClassName:function(e){var t=y(e);return new z(this,(function(r){var n=[];return t.length>0&&_(r,(function(o){if(o!==r&&o.nodeType===M){var i=o.getAttribute("class");if(i){var a=e===i;if(!a){var A=y(i);a=t.every((l=A,function(e){return l&&-1!==l.indexOf(e)}))}a&&n.push(o)}}var l})),n}))},getElementsByTagName:function(e){var t="html"===(this.nodeType===L?this:this.ownerDocument).type,r=e.toLowerCase();return new z(this,(function(n){var o=[];return _(n,(function(i){i!==n&&i.nodeType===M&&(("*"===e||i.getQualifiedName()===(t&&i.namespaceURI===c.HTML?r:e))&&o.push(i))})),o}))},getElementsByTagNameNS:function(e,t){return new z(this,(function(r){var n=[];return _(r,(function(o){o===r||o.nodeType!==M||"*"!==e&&o.namespaceURI!==e||"*"!==t&&o.localName!=t||n.push(o)})),n}))}},$.prototype.getElementsByClassName=de.prototype.getElementsByClassName,$.prototype.getElementsByTagName=de.prototype.getElementsByTagName,$.prototype.getElementsByTagNameNS=de.prototype.getElementsByTagNameNS,E(de,q),ue.prototype.nodeType=S,E(ue,q),Ce.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,r){r=this.data.substring(0,e)+r+this.data.substring(e+t),this.nodeValue=this.data=r,this.length=r.length}},E(Ce,q),pe.prototype={nodeName:"#text",nodeType:T,splitText:function(e){var t=this.data,r=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var n=this.ownerDocument.createTextNode(r);return this.parentNode&&this.parentNode.insertBefore(n,this.nextSibling),n}},E(pe,Ce),Ie.prototype={nodeName:"#comment",nodeType:k},E(Ie,Ce),fe.prototype={nodeName:"#cdata-section",nodeType:O},E(fe,pe),he.prototype.nodeType=U,E(he,q),me.prototype.nodeType=B,E(me,q),ye.prototype.nodeType=R,E(ye,q),ve.prototype.nodeType=N,E(ve,q),be.prototype.nodeName="#document-fragment",be.prototype.nodeType=x,E(be,q),we.prototype.nodeType=P,E(we,Ce),Ee.prototype.serializeToString=function(e,t){return De.call(e,t)},q.prototype.toString=De;try{if(Object.defineProperty){function Pe(e){switch(e.nodeType){case M:case x:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(Pe(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(z.prototype,"length",{get:function(){return Z(this),this.$$length}}),Object.defineProperty(q.prototype,"textContent",{get:function(){return Pe(this)},set:function(e){switch(this.nodeType){case M:case x:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),Re=function(e,t,r){e["$$"+t]=r}}}catch(ke){}t._updateLiveList=Z,t.Attr=ue,t.CDATASection=fe,t.CharacterData=Ce,t.Comment=Ie,t.Document=$,t.DocumentFragment=be,t.DocumentType=he,t.DOMImplementation=X,t.Element=de,t.Entity=ye,t.EntityReference=ve,t.LiveNodeList=z,t.NamedNodeMap=Q,t.Node=q,t.NodeList=Y,t.Notation=me,t.Text=pe,t.ProcessingInstruction=we,t.XMLSerializer=Ee},6559:(e,t,r)=>{"use strict";var n=r(4582).freeze;t.XML_ENTITIES=n({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),t.HTML_ENTITIES=n({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),t.entityMap=t.HTML_ENTITIES},2983:(e,t,r)=>{"use strict";function n(e,t){e.prototype=Object.create(Error.prototype,{constructor:{value:e},name:{value:e.name,enumerable:!0,writable:t}})}var o=r(4582).freeze({Error:"Error",IndexSizeError:"IndexSizeError",DomstringSizeError:"DomstringSizeError",HierarchyRequestError:"HierarchyRequestError",WrongDocumentError:"WrongDocumentError",InvalidCharacterError:"InvalidCharacterError",NoDataAllowedError:"NoDataAllowedError",NoModificationAllowedError:"NoModificationAllowedError",NotFoundError:"NotFoundError",NotSupportedError:"NotSupportedError",InUseAttributeError:"InUseAttributeError",InvalidStateError:"InvalidStateError",SyntaxError:"SyntaxError",InvalidModificationError:"InvalidModificationError",NamespaceError:"NamespaceError",InvalidAccessError:"InvalidAccessError",ValidationError:"ValidationError",TypeMismatchError:"TypeMismatchError",SecurityError:"SecurityError",NetworkError:"NetworkError",AbortError:"AbortError",URLMismatchError:"URLMismatchError",QuotaExceededError:"QuotaExceededError",TimeoutError:"TimeoutError",InvalidNodeTypeError:"InvalidNodeTypeError",DataCloneError:"DataCloneError",EncodingError:"EncodingError",NotReadableError:"NotReadableError",UnknownError:"UnknownError",ConstraintError:"ConstraintError",DataError:"DataError",TransactionInactiveError:"TransactionInactiveError",ReadOnlyError:"ReadOnlyError",VersionError:"VersionError",OperationError:"OperationError",NotAllowedError:"NotAllowedError",OptOutError:"OptOutError"}),i=Object.keys(o);function a(e){return"number"==typeof e&&e>=1&&e<=25}function A(e,t){var r;a(e)?(this.name=i[e],this.message=t||""):(this.message=e,this.name="string"==typeof(r=t)&&r.substring(r.length-o.Error.length)===o.Error?t:o.Error),Error.captureStackTrace&&Error.captureStackTrace(this,A)}n(A,!0),Object.defineProperties(A.prototype,{code:{enumerable:!0,get:function(){var e=i.indexOf(this.name);return a(e)?e:0}}});for(var l={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25},s=Object.entries(l),g=0;g{"use strict";function r(e){try{"function"!=typeof e&&(e=RegExp);var t=new e("𝌆","u").exec("𝌆");return!!t&&2===t[0].length}catch(e){}return!1}var n=r();function o(e){if("["!==e.source[0])throw new Error(e+" can not be used with chars");return e.source.slice(1,e.source.lastIndexOf("]"))}function i(e,t){if("["!==e.source[0])throw new Error("/"+e.source+"/ can not be used with chars_without");if(!t||"string"!=typeof t)throw new Error(JSON.stringify(t)+" is not a valid search");if(-1===e.source.indexOf(t))throw new Error('"'+t+'" is not is /'+e.source+"/");if("-"===t&&1!==e.source.indexOf(t))throw new Error('"'+t+'" is not at the first postion of /'+e.source+"/");return new RegExp(e.source.replace(t,""),n?"u":"")}function a(e){var t=this;return new RegExp(Array.prototype.slice.call(arguments).map((function(e){var r="string"==typeof e;if(r&&void 0===t&&"|"===e)throw new Error("use regg instead of reg to wrap expressions with `|`!");return r?e:e.source})).join(""),n?"mu":"m")}function A(e){if(0===arguments.length)throw new Error("no parameters provided");return a.apply(A,["(?:"].concat(Array.prototype.slice.call(arguments),[")"]))}var l=/[-\x09\x0A\x0D\x20-\x2C\x2E-\uD7FF\uE000-\uFFFD]/;n&&(l=a("[",o(l),"\\u{10000}-\\u{10FFFF}","]"));var s=/[\x20\x09\x0D\x0A]/,g=o(s),c=a(s,"+"),d=a(s,"*"),u=/[:_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;n&&(u=a("[",o(u),"\\u{10000}-\\u{10FFFF}","]"));var C=a("[",o(u),o(/[-.0-9\xB7]/),o(/[\u0300-\u036F\u203F-\u2040]/),"]"),p=a(u,C,"*"),I=a(C,"+"),f=a("&",p,";"),h=A(/&#[0-9]+;|&#x[0-9a-fA-F]+;/),m=A(f,"|",h),y=a("%",p,";"),v=A(a('"',A(/[^%&"]/,"|",y,"|",m),"*",'"'),"|",a("'",A(/[^%&']/,"|",y,"|",m),"*","'")),b=A('"',A(/[^<&"]/,"|",m),"*",'"',"|","'",A(/[^<&']/,"|",m),"*","'"),w=a(i(u,":"),i(C,":"),"*"),E=a(w,A(":",w),"?"),D=a("^",E,"$"),M=a("(",E,")"),S=A(/"[^"]*"|'[^']*'/),T=a(/^<\?/,"(",p,")",A(c,"(",l,"*?)"),"?",/\?>/),O=/[\x20\x0D\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/,N=A('"',O,'*"',"|","'",i(O,"'"),"*'"),R="\x3c!--",P=a(R,A(i(l,"-"),"|",a("-",i(l,"-"))),"*","--\x3e"),k="#PCDATA",L=A(a(/\(/,d,k,A(d,/\|/,d,E),"*",d,/\)\*/),"|",a(/\(/,d,k,d,/\)/)),U=A("EMPTY","|","ANY","|",L,"|",a(/\([^>]+\)/,/[?*+]?/)),x=a(""),B=a("NOTATION",c,/\(/,d,p,A(d,/\|/,d,p),"*",d,/\)/),G=a(/\(/,d,I,A(d,/\|/,d,I),"*",d,/\)/),F=A(B,"|",G),V=A(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/,"|",F),j=A(/#REQUIRED|#IMPLIED/,"|",A(A("#FIXED",c),"?",b)),Y=a(""),z="SYSTEM",Z="PUBLIC",Q=A(A(z,c,S),"|",A(Z,c,N,c,S)),J=a("^",A(A(z,c,"(?",S,")"),"|",A(Z,c,"(?",N,")",c,"(?",S,")"))),H=A(c,"NDATA",c,p),W=""),q=A(v,"|",Q),K=A(X,"|",a(W,c,"%",c,p,c,q,d,">")),_=a(Z,c,N),$=a(""),ee=a(d,"=",d),te=/1[.]\d+/,re=a(c,"version",ee,A("'",te,"'","|",'"',te,'"')),ne=/[A-Za-z][-A-Za-z0-9._]*/,oe=a(/^<\?xml/,re,A(c,"encoding",ee,A('"',ne,'"',"|","'",ne,"'")),"?",A(c,"standalone",ee,A("'",A("yes","|","no"),"'","|",'"',A("yes","|","no"),'"')),"?",d,/\?>/),ie=a(l,"*?",/\]\]>/),ae=a(/",t.CDSect=ae,t.Char=l,t.Comment=P,t.COMMENT_START=R,t.COMMENT_END="--\x3e",t.DOCTYPE_DECL_START="{"use strict";var n=r(4582);n.assign,n.hasDefaultHTMLNamespace,n.isHTMLMimeType,n.isValidMimeType,n.MIME_TYPE,n.NAMESPACE;var o=r(2983);o.DOMException,o.DOMExceptionName,o.ExceptionCode,o.ParseError;var i=r(4722);i.Attr,i.CDATASection,i.CharacterData,i.Comment,i.Document,i.DocumentFragment,i.DocumentType,i.DOMImplementation,i.Element,i.Entity,i.EntityReference,i.LiveNodeList,i.NamedNodeMap,i.Node,i.NodeList,i.Notation,i.ProcessingInstruction,i.Text,i.XMLSerializer;var a=r(5752);t.S4=a.DOMParser,a.onErrorStopParsing,a.onWarningStopParsing},4466:(e,t,r)=>{"use strict";var n=r(4582),o=r(2763),i=r(2983),a=n.isHTMLEscapableRawTextElement,A=n.isHTMLMimeType,l=n.isHTMLRawTextElement,s=n.hasOwn,g=n.NAMESPACE,c=i.ParseError,d=i.DOMException;function u(){}u.prototype={parse:function(e,t,r){var i=this.domBuilder;i.startDocument(),m(t,t=Object.create(null)),function(e,t,r,i,a){var l=A(i.mimeType);e.indexOf(o.UNICODE_REPLACEMENT_CHARACTER)>=0&&a.warning("Unicode replacement character detected, source encoding issues?");function g(e){if(e>65535){var t=55296+((e-=65536)>>10),r=56320+(1023&e);return String.fromCharCode(t,r)}return String.fromCharCode(e)}function u(e){var t=";"===e[e.length-1]?e:e+";";if(!l&&t!==e)return a.error("EntityRef: expecting ;"),e;var n=o.Reference.exec(t);if(!n||n[0].length!==t.length)return a.error("entity not matching Reference production: "+e),e;var i=t.slice(1,-1);return s(r,i)?r[i]:"#"===i.charAt(0)?g(parseInt(i.substr(1).replace("x","0x"))):(a.error("entity not found:"+e),e)}function m(t){if(t>N){var r=e.substring(N,t).replace(C,u);S&&y(N),i.characters(r,0,t-N),N=t}}function y(t,r){for(;t>=D&&(r=M.exec(e));)E=r.index,D=E+r[0].length,S.lineNumber++;S.columnNumber=t-E+1}var E=0,D=0,M=/.*(?:\r\n?|\n)|.*$/g,S=i.locator,T=[{currentNSMap:t}],O=[],N=0;for(;;){try{var R=e.indexOf("<",N);if(R<0){if(!l&&O.length>0)return a.fatalError("unclosed xml tag(s): "+O.join(", "));if(!e.substring(N).match(/^\s*$/)){var P=i.doc,k=P.createTextNode(e.substr(N));if(P.documentElement)return a.error("Extra content at the end of the document");P.appendChild(k),i.currentElement=k}return}if(R>N){var L=e.substring(N,R);l||0!==O.length||(L=L.replace(new RegExp(o.S_OPT.source,"g"),""))&&a.error("Unexpected content outside root element: '"+L+"'"),m(R)}switch(e.charAt(R+1)){case"/":var U=e.indexOf(">",R+2),x=e.substring(R+2,U>0?U:void 0);if(!x)return a.fatalError("end tag name missing");var B=U>0&&o.reg("^",o.QName_group,o.S_OPT,"$").exec(x);if(!B)return a.fatalError('end tag name contains invalid characters: "'+x+'"');if(!i.currentElement&&!i.doc.documentElement)return;var G=O[O.length-1]||i.currentElement.tagName||i.doc.documentElement.tagName||"";if(G!==B[1]){var F=B[1].toLowerCase();if(!l||G.toLowerCase()!==F)return a.fatalError('Opening and ending tag mismatch: "'+G+'" != "'+x+'"')}var V=T.pop();O.pop();var j=V.localNSMap;if(i.endElement(V.uri,V.localName,G),j)for(var Y in j)s(j,Y)&&i.endPrefixMapping(Y);U++;break;case"?":S&&y(R),U=b(e,R,i,a);break;case"!":S&&y(R),U=v(e,R,i,a,l);break;default:S&&y(R);var z=new w,Z=T[T.length-1].currentNSMap,Q=(U=I(e,R,z,Z,u,a,l),z.length);if(z.closed||(l&&n.isHTMLVoidElement(z.tagName)?z.closed=!0:O.push(z.tagName)),S&&Q){for(var J=p(S,{}),H=0;HN?N=U:m(Math.max(R,N)+1)}}(e,t,r,i,this.errorHandler),i.endDocument()}};var C=/&#?\w+;?/g;function p(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function I(e,t,r,n,o,i,a){function A(e,t,n){return s(r.attributeNames,e)?i.fatalError("Attribute "+e+" redefined"):!a&&t.indexOf("<")>=0?i.fatalError("Unescaped '<' not allowed in attributes values"):void r.addValue(e,t.replace(/[\t\n\r]/g," ").replace(C,o),n)}for(var l,g=++t,c=0;;){var d=e.charAt(g);switch(d){case"=":if(1===c)l=e.slice(t,g),c=3;else{if(2!==c)throw new Error("attribute equal must after attrName");c=3}break;case"'":case'"':if(3===c||1===c){if(1===c&&(i.warning('attribute value must after "="'),l=e.slice(t,g)),t=g+1,!((g=e.indexOf(d,t))>0))throw new Error("attribute value no end '"+d+"' match");A(l,u=e.slice(t,g),t-1),c=5}else{if(4!=c)throw new Error('attribute value must after "="');A(l,u=e.slice(t,g),t),i.warning('attribute "'+l+'" missed start quot('+d+")!!"),t=g+1,c=5}break;case"/":switch(c){case 0:r.setTagName(e.slice(t,g));case 5:case 6:case 7:c=7,r.closed=!0;case 4:case 1:break;case 2:r.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return i.error("unexpected end of input"),0==c&&r.setTagName(e.slice(t,g)),g;case">":switch(c){case 0:r.setTagName(e.slice(t,g));case 5:case 6:case 7:break;case 4:case 1:"/"===(u=e.slice(t,g)).slice(-1)&&(r.closed=!0,u=u.slice(0,-1));case 2:2===c&&(u=l),4==c?(i.warning('attribute "'+u+'" missed quot(")!'),A(l,u,t)):(a||i.warning('attribute "'+u+'" missed value!! "'+u+'" instead!!'),A(u,u,t));break;case 3:if(!a)return i.fatalError("AttValue: ' or \" expected")}return g;case"€":d=" ";default:if(d<=" ")switch(c){case 0:r.setTagName(e.slice(t,g)),c=6;break;case 1:l=e.slice(t,g),c=2;break;case 4:var u=e.slice(t,g);i.warning('attribute "'+u+'" missed quot(")!!'),A(l,u,t);case 5:c=6}else switch(c){case 2:a||i.warning('attribute "'+l+'" missed value!! "'+l+'" instead2!!'),A(l,l,t),t=g,c=1;break;case 5:i.warning('attribute space is required"'+l+'"!!');case 6:c=1,t=g;break;case 3:c=4,t=g;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}g++}}function f(e,t,r){for(var n=e.tagName,o=null,i=e.length;i--;){var a=e[i],A=a.qName,l=a.value;if((C=A.indexOf(":"))>0)var c=a.prefix=A.slice(0,C),d=A.slice(C+1),u="xmlns"===c&&d;else d=A,c=null,u="xmlns"===A&&"";a.localName=d,!1!==u&&(null==o&&(o=Object.create(null),m(r,r=Object.create(null))),r[u]=o[u]=l,a.uri=g.XMLNS,t.startPrefixMapping(u,l))}for(i=e.length;i--;)(a=e[i]).prefix&&("xml"===a.prefix&&(a.uri=g.XML),"xmlns"!==a.prefix&&(a.uri=r[a.prefix]));var C;(C=n.indexOf(":"))>0?(c=e.prefix=n.slice(0,C),d=e.localName=n.slice(C+1)):(c=null,d=e.localName=n);var p=e.uri=r[c||""];if(t.startElement(p,d,n,e),!e.closed)return e.currentNSMap=r,e.localNSMap=o,!0;if(t.endElement(p,d,n),o)for(c in o)s(o,c)&&t.endPrefixMapping(c)}function h(e,t,r,n,o){var i=a(r);if(i||l(r)){var A=e.indexOf("",t),s=e.substring(t+1,A);return i&&(s=s.replace(C,n)),o.characters(s,0,s.length),A}return t+1}function m(e,t){for(var r in e)s(e,r)&&(t[r]=e[r])}function y(e,t){var r=t;function n(t){return t=t||0,e.charAt(r+t)}function i(e){r+=e=e||1}function a(){return e.substring(r)}return{char:n,getIndex:function(){return r},getMatch:function(e){var t=o.reg("^",e).exec(a());return t?(i(t[0].length),t[0]):null},getSource:function(){return e},skip:i,skipBlanks:function(){for(var t=0;r"!==a.char()?n.fatalError("doctype not terminated with > at position "+a.getIndex()):(a.skip(1),r.startDTD(s.name,s.publicId,s.systemId,s.internalSubset),r.endDTD(),a.getIndex());default:return n.fatalError('Not well-formed XML starting with "0)return n.fatalError("processing instruction at position "+t+" is an xml declaration which is only at the start of the document");if(!o.XMLDecl.test(e.substring(t)))return n.fatalError("xml declaration is not well-formed")}return r.processingInstruction(i[1],i[2]),t+i[0].length}function w(){this.attributeNames=Object.create(null)}w.prototype={setTagName:function(e){if(!o.QName_exact.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,r){if(!o.QName_exact.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:r}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=u,t.parseUtils=y,t.parseDoctypeCommentOrCData=v},562:(e,t,r)=>{"use strict";r.d(t,{A:()=>f});var n=r(7392),o=r.n(n),i=r(2940);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function A(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function l(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function g(e,t){for(var r=0;r{"use strict";r.d(t,{default:()=>Tt});var n=r(3391),o=r(562),i=r(1363),a=r(2938),A=r(9201),l=r(6736),s=r(5844);const g={configuration:{},isConfigLoaded:function(){if(this.configuration&&0!==Object.keys(this.configuration).length)return!0;var e="undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0!==r.g?r.g:{};return!!(e.Gp&&e.Gp.Config&&e.Gp.Config.layers&&0!==Object.keys(e.Gp.Config.layers).length)&&(this.configuration=e.Gp.Config,!0)}}; /**! diff --git a/dist/modules/GpfExtOlEditor.css b/dist/modules/GpfExtOlEditor.css index ced166a4..186b3dd7 100644 --- a/dist/modules/GpfExtOlEditor.css +++ b/dist/modules/GpfExtOlEditor.css @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */.GPimportMapBoxpRoot{padding:5px}.GPEditorMapBoxContainer{border:1px solid #87cefa;border-radius:5px;-webkit-box-shadow:0 0 5px #000;box-shadow:0 0 5px #000;-webkit-box-sizing:border-box;box-sizing:border-box;height:auto;padding:5px;position:relative;width:100%}.GPEditorMapBoxSep{border:4px double #87cefa;display:block;width:50%}.GPEditorMapBoxLayersTitle,.GPEditorMapBoxThemesTitle{font-style:italic;font-weight:700;padding:5px}.disabled{opacity:.5;pointer-events:none}.GPEditorMapBoxGroupDetails{border:1px dotted #87cefa;border-radius:5px}.GPEditorMapBoxLayerContainer{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:100%;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.GPEditorMapBoxLayerContainer,.GPEditorMapBoxLayerTitleContainer{min-height:28px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.GPEditorMapBoxLayerTitleContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:inherit;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.GPEditorMapBoxLayerImageInput{display:none}.GPEditorMapBoxLayerImageLabel{background-image:url(data:image/png;base64,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);background-position:-56px 0;cursor:pointer;min-height:28px;min-width:24px}input[type=checkbox]:checked+.GPEditorMapBoxLayerImageLabel{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.GPEditorMapBoxLayerTypeImage{background-image:url(data:image/png;base64,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);background-position:0 0;background-repeat:no-repeat;border:1px solid gray;border-radius:5px;-webkit-box-shadow:2px 2px 1px #d3d3d3;box-shadow:2px 2px 1px #d3d3d3;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;margin-right:5px;min-height:30px;min-width:30px}.GPEditorMapBoxLayerTitleInput{display:none}.GPEditorMapBoxLayerTitleLabel{border:1px solid gray;border-radius:5px;-webkit-box-shadow:2px 2px 1px #d3d3d3;box-shadow:2px 2px 1px #d3d3d3;cursor:pointer;margin-left:5px;padding:5px;width:inherit;word-break:break-word}input[type=checkbox]:checked+.GPEditorMapBoxLayerTitleLabel{background-color:#d3d3d3}.GPEditorMapBoxToolsContainer{display:-webkit-box;display:-ms-flexbox;display:flex;height:28px;min-width:28px;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.GPEditorMapBoxToolsVisibilityInput{display:none}.GPEditorMapBoxToolsVisibilityInputDisable{display:"block"}.GPEditorMapBoxToolsVisibilityLabel{background-image:url(data:image/png;base64,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);background-position:-28px 0;cursor:pointer;height:28px;width:28px}.GPEditorMapBoxToolsVisibilityLabelDisable{cursor:pointer}input[type=checkbox]:checked+.GPEditorMapBoxToolsVisibilityLabel{background-position:0 0}.GPEditorMapBoxFilterContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-left:28px}.GPEditorMapBoxFilterJsonContainer{border-radius:5px;border-style:solid;border-width:1px;padding:5px}.GPEditorMapBoxFilterDisplayJson{cursor:pointer;height:125px;overflow:scroll;resize:vertical;width:175px}.GPEditorMapBoxThemesContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:175px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.GPEditorMapBoxThemeContainer{border-radius:5px;border-style:solid;border-width:1px;margin:5px;padding:5px;text-align:center;width:inherit}.GPEditorMapBoxThemeContainer:focus{background-color:#d3d3d3}.GPEditorMapBoxThemeImage{cursor:pointer;height:60px;width:120px}.GPEditorMapBoxThemeTitle{cursor:pointer;padding:5px}.GPEditorMapBoxThemeMessage{color:red;font-style:italic}.GPEditorMapBoxStyleContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-left:28px}.GPEditorMapBoxStyleJsonContainer{border-radius:5px;border-style:solid;border-width:1px;padding:5px}.GPEditorMapBoxStyleJsonDisplay{cursor:pointer;height:125px;overflow:scroll;resize:vertical;width:175px}.GPEditorMapBoxStyleToolsScaleContainer{border-radius:5px;border-style:solid;border-width:1px;padding:5px;width:-webkit-min-content;width:-moz-min-content;width:min-content}.GPEditorMapBoxStyleToolsScaleMaxContainer,.GPEditorMapBoxStyleToolsScaleMinContainer{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:175px;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.gp-json-string{color:green}.gp-json-number{color:#ff8c00}.gp-json-boolean{color:blue}.gp-json-null{color:#f0f}.gp-json-key{color:red}.GPEditorMapBoxLegendContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:nowrap;flex-wrap:nowrap;margin-left:28px}.GPEditorMapBoxLegendRenderContainer{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:5px;border-style:solid;border-width:1px;overflow-y:auto;padding:5px;width:175px}.GPEditorMapBoxLegendRender{border:1px solid transparent;border-radius:5px;-webkit-box-shadow:2px 2px 1px grey;box-shadow:2px 2px 1px grey;cursor:pointer;min-height:28px;min-width:28px}.GPEditorMapBoxLegendEditable{border-color:#000}.GPEditorMapBoxLegendTitle{margin-left:10px}.GPEditorMapBoxLegendToolsContainer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:5px;width:230px}.legend-not-implemented,.legend-unknow{background-color:#fff}.legend-unknow:before{color:red;content:"\2753";font-size:15px}.legend-not-implemented:before{color:red;content:"\2718";font-size:15px}.legend-circle-not-editable,.legend-line-not-editable{border-color:#fff}.legend-styling-div{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.legend-styling{width:50px} /*# sourceMappingURL=GpfExtOlEditor.css.map*/ \ No newline at end of file diff --git a/dist/modules/GpfExtOlEditor.js b/dist/modules/GpfExtOlEditor.js index 46ed108e..6b150c1f 100644 --- a/dist/modules/GpfExtOlEditor.js +++ b/dist/modules/GpfExtOlEditor.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var e={3920:(e,t,i)=>{"use strict";i.d(t,{A:()=>n});const n={hex:function(e){if(e>255)throw new Error("'"+e+"'' is greater than 255(0xff);");return("0"+Number(e).toString(16)).slice(-2)},num:function(e){return parseInt(e,16)},arrayToRgba:function(e){if(!Array.isArray(e))throw new Error("Not an array !");var t=e[0],i=e[1],n=e[2],o=e[3]||1;return"rgba("+t+", "+i+", "+n+", "+parseFloat(o)+")"},arrayToHex:function(e){if(!Array.isArray(e))throw new Error("Not an array !");var t=e[0],i=e[1],n=e[2],o=e[3],a=[this.hex(t),this.hex(i),this.hex(n)],r={};return r.hex="#"+a.join(""),o&&(r.opacity=parseFloat(o)),r},rgbaToHex:function(e){var t=/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(0?.?\d+)\s*)?\)/.exec(e);if(!t)throw new Error("Invalid format: "+e);var i=t[1],n=t[2],o=t[3],a=t[4],r=[this.hex(i),this.hex(n),this.hex(o)],s={};return s.hex="#"+r.join(""),a&&(s.opacity=parseFloat(a)),s},hexToRgba:function(e,t){if(!e)throw new Error("Invalid format");e=e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,(function(e,t,i,n){return t+t+i+i+n+n}));var i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return(i=i?{r:parseInt(i[1],16),g:parseInt(i[2],16),b:parseInt(i[3],16)}:null)?"rgba("+i.r+", "+i.g+", "+i.b+", "+t+")":null},isHex:function(e){if(!e)return!1;if("#"!==e.charAt(0))return!1;return!!/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e)},isRGB:function(e){if(!e)return!1;return!!/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(0?.?\d+)\s*)?\)/.exec(e)}}},2536:(e,t,i)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}i.d(t,{A:()=>o});const o={detectSupport:function(){var e=!0,t=window.navigator.userAgent.toLowerCase();return-1===t.indexOf("iphone")&&-1===t.indexOf("ipod")&&-1===t.indexOf("ipad")&&-1===t.indexOf("android")&&-1===t.indexOf("mobile")&&-1===t.indexOf("blackberry")&&-1===t.indexOf("tablet")&&-1===t.indexOf("phone")&&-1===t.indexOf("touch")||(e=!1),-1===t.indexOf("msie")&&-1===t.indexOf("trident")||(e=!0),e},assign:function(e,t){for(var i in e=e||{},t)t.hasOwnProperty(i)&&(e[i]=t[i]);return e},mergeParams:function(e,t,i){if(void 0!==e&&void 0!==t)for(var o in void 0===i&&(i=!0),t)t.hasOwnProperty(o)&&("object"===n(t[o])?e.hasOwnProperty(o)?this.mergeParams(e[o],t[o],i):e[o]=t[o]:e.hasOwnProperty(o)?i&&(e[o]=t[o]):e[o]=t[o])}}},5844:(e,t,i)=>{"use strict";i.d(t,{A:()=>a});var n=i(3065),o={getLogger:function(e){if(void 0===t)var t={env:{VERBOSE:!1}};t.env.VERBOSE?n.enableAll():n.disableAll();var i=e||"default";return n.getLogger(i)},disableAll:function(){var e=n.getLoggers();for(var t in e){if(Object.hasOwnProperty.call(e,t))e[t].disableAll()}},enableAll:function(){var e=n.getLoggers();for(var t in e){if(Object.hasOwnProperty.call(e,t))e[t].enableAll()}}};const a=o;window.Gp&&(window.Gp.Logger=o)},6736:(e,t,i)=>{"use strict";var n;i.d(t,{A:()=>o});const o={generate:(n=Math.floor(Date.now()),function(){return n++}),name:function(e){var t=null,i=e.lastIndexOf("-");return t=-1===i?e:e.substring(0,i),t},index:function(e){var t=null,i=this.name(e),n=i.lastIndexOf("_");return-1!==n&&(t=i.substring(n+1)),t},uuid:function(e){var t=null,i=e.lastIndexOf("-");return-1!==i&&(t=parseInt(e.substring(i+1),10)),t}}},3110:function(e){var t;e.exports=(t={},(t=function(){this.listeners={}}).prototype={addEventListener:function(e,t,i){for(var n=[],o=arguments.length,a=0;a3?n.splice(3,n.length-1):[],void 0!==this.listeners[e]?this.listeners[e].push({scope:i,callback:t,args:n}):this.listeners[e]=[{scope:i,callback:t,args:n}]},removeEventListener:function(e,t,i){if(void 0!==this.listeners[e]){for(var n=this.listeners[e].length,o=[],a=0;a0;for(var o=0;o2?n.splice(2,n.length-1):[],n=[i].concat(n),void 0!==this.listeners[e]){var r=this.listeners[e].slice(),s=r.length;for(a=0;a=0&&t<=d.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?u+=":"+e:"symbol"==typeof e&&(u=void 0),d.name=e,d.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},d.methodFactory=i||p,d.getLevel=function(){return null!=l?l:null!=s?s:r},d.setLevel=function(e,t){return l=g(e),!1!==t&&h(l),c.call(d)},d.setDefaultLevel=function(e){s=g(e),m()||d.setLevel(e,!1)},d.resetLevel=function(){l=null,y(),c.call(d)},d.enableAll=function(e){d.setLevel(d.levels.TRACE,e)},d.disableAll=function(e){d.setLevel(d.levels.SILENT,e)},d.rebuild=function(){if(a!==d&&(r=g(a.getLevel())),c.call(d),a===d)for(var e in o)o[e].rebuild()},r=g(a?a.getLevel():"WARN");var f=m();null!=f&&(l=g(f)),c.call(d)}(a=new u).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=o[e];return t||(t=o[e]=new u(e,a.methodFactory)),t};var h=typeof window!==t?window.log:void 0;return a.noConflict=function(){return typeof window!==t&&window.log===a&&(window.log=h),a},a.getLoggers=function(){return o},a.default=a,a},void 0===(o="function"==typeof n?n.call(t,i,t,e):n)||(e.exports=o)}()}},t={};function i(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={exports:{}};return e[n].call(a.exports,a,a.exports,i),a.exports}i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var n={};(()=>{"use strict";i.d(n,{default:()=>te});var e=i(3110),t=i.n(e),o=i(2536),a=i(6736),r=i(5844);const s={onloaded:"editor:onloaded",layer:{onclickvisibility:"editor:layer:onclickvisibility",onclickclone:"editor:layer:onclickclone",onclickremove:"editor:layer:onclickremove"},legend:{onclickedition:"editor:legend:onclickedition",onchangevalue:"editor:legend:onchangevalue"},group:{oncollapse:"editor:group:oncollapse"},style:{oneditjson:"editor:style:oneditjson",scale:{onchangemin:"editor:style:scale:onchangemin",onchangemax:"editor:style:scale:onchangemax"}},filter:{oneditjson:"editor:filter:oneditjson"},themes:{onclickimage:"editor:themes:onclickimage",onclicktitle:"editor:themes:onclicktitle"},search:{onsubmit:"editor:search:onsubmit",onautocomplete:"editor:search:onautocomplete"}};function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function c(e,t){for(var i=0;i/g,">")).replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)/g,(function(e){var t="gp-json-number";return/^"/.test(e)?t=/:$/.test(e)?"gp-json-key":"gp-json-string":/true|false/.test(e)?t="gp-json-boolean":/null/.test(e)&&(t="gp-json-null"),""+e+""}))}},{key:"add",value:function(){if(!this.options.target){if(!document.getElementById(this.name.target)){var e=document.createElement("div");e.id=this.name.target,(document.documentElement||document.getElementsByTagName("body")[0]||document.getElementsByTagName("head")[0]).appendChild(e)}this.options.target=document.getElementById(this.name.target)}return this.container&&this.options.target.appendChild(this.container),this}},{key:"display",value:function(e){return p.trace("display()",e),void 0!==e&&(this.container.style.display=e?"flex":"none"),"flex"===this.container.style.display}},{key:"getContainer",value:function(){return this.container}},{key:"onEditJsonStyleMapBox",value:function(e){p.trace("onEditJsonStyleMapBox",e),e.editorID=this.id,e.data=this.options,t().dispatch(s.style.oneditjson,e)}},{key:"onChangeStyleScaleMinMapBox",value:function(e){p.trace("onChangeStyleScaleMinMapBox",e),e.editorID=this.id,e.data=this.options,t().dispatch(s.style.scale.onchangemin,e)}},{key:"onChangeStyleScaleMaxMapBox",value:function(e){p.trace("onChangeStyleScaleMaxMapBox",e),e.editorID=this.id,e.data=this.options,t().dispatch(s.style.scale.onchangemax,e)}}],i&&c(e.prototype,i),n&&c(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,i,n}();const h=u;function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function y(e,t){for(var i=0;i T \")",i.style.background=n.replace("%color%",0===t.color.indexOf("rgb")?t.color:T.A.hexToRgba(t.color,1)).replace("%opacity%",t.opacity||1).replace("%style%","font-size: 5em;font-weight: bold;");break;case"icon":t.image?(n="".replace("%x%",this.options.sprites.json[t.image].x).replace("%y%",this.options.sprites.json[t.image].y).replace(/%w%/g,this.options.sprites.json[t.image].width).replace(/%h%/g,this.options.sprites.json[t.image].height).replace("%W%",this.options.sprites.size.w).replace("%H%",this.options.sprites.size.h).replace("%URL%",this.options.sprites.url),i.innerHTML=n):(n="url(\"data:image/svg+xml;utf8,\")",i.style.background=n.replace("%color%",0===t.color.indexOf("rgb")?t.color:T.A.hexToRgba(t.color,1)).replace("%style%","fill: transparent;stroke-width: 10;"));break;case"line":var o=Array.isArray(t.dasharray)?t.dasharray.join(" "):0;n="url(\"data:image/svg+xml;utf8,\")",i.style.background=n.replace("%color%",0===t.color.indexOf("rgb")?t.color:T.A.hexToRgba(t.color,1)).replace("%stroke-opacity%",t.opacity||1).replace("%stroke-dasharray%",o).replace("%stroke-width%",3*(t.width||0));break;case"circle":var a=t["stroke-color"]||"#FFFFFF";n="url(\"data:image/svg+xml;utf8,\")",i.style.background=n.replace("%color%",0===t.color.indexOf("rgb")?t.color:T.A.hexToRgba(t.color,1)).replace("%opacity%",t.opacity||1).replace("%stroke-color%",0===a.indexOf("rgb")?a:T.A.hexToRgba(a,1)).replace("%stroke-opacity%",t["stroke-opacity"]||1).replace("%stroke-width%",3*(t["stroke-width"]||0));break;case"background":case"fill":if(t.pattern)n="".replace("%x%",this.options.sprites.json[t.pattern].x).replace("%y%",this.options.sprites.json[t.pattern].y).replace(/%w%/g,this.options.sprites.json[t.pattern].width).replace(/%h%/g,this.options.sprites.json[t.pattern].height).replace("%W%",this.options.sprites.size.w).replace("%H%",this.options.sprites.size.h).replace("%URL%",this.options.sprites.url),i.innerHTML=n;else{var r=t["outline-color"]||"#FFFFFF";n="url(\"data:image/svg+xml;utf8,\")",i.style.background=n.replace("%color%",0===t.color.indexOf("rgb")?t.color:T.A.hexToRgba(t.color,1)).replace("%opacity%",t.opacity||1).replace("%stroke-color%",0===r.indexOf("rgb")?r:T.A.hexToRgba(r,1))}break;default:return j.warn("type not found, no thumbnail..."),!1}return!0}},{key:"_getValue",value:function(e){var t=null;if("string"==typeof e)t=e;else if("number"==typeof e)t=e;else if(Array.isArray(e)){var i=!0;e.forEach((function(e){"number"!=typeof e&&(i=!1)})),i&&(t=e)}else"object"===S(e)?(t=null,"stops"in e&&(e.stops.sort((function(e,t){var i=e[0],n=t[0];return i>n?-1:i1?1:0;if(a){var r=document.createElement("hr");r.className=this.name.sep,e.appendChild(r)}if(this.options.tools.title){var l=document.createElement("div");l.id=this.name.titleLayersID+this.id,l.className=this.name.titleLayers,l.innerHTML=a?"Liste des 'couches' ("+o+")":"Liste des 'couches'",e.appendChild(l)}}var c=this.mapbox.layers.slice();if(c.forEach((function(e,t){var i=e.metadata;i?i["geoportail:order"]=t:e.metadata={"geoportail:order":t}})),this.options.tools.sort){var d=this.options.tools.sortBy,p=this.options.tools.sortOrder;c.sort((function(e,t){var i=0;if(e.metadata&&e.metadata["geoportail:group"]&&t.metadata&&t.metadata["geoportail:group"]){var n,o=null;o=e.metadata["geoportail:group"],n=t.metadata["geoportail:group"],i=o.localeCompare(n)}else switch(d){case"geom":i="asc"===p?e.type.localeCompare(t.type)||e.id.localeCompare(t.id):t.type.localeCompare(e.type)||t.id.localeCompare(e.id);break;case"class":i="asc"===p?e["source-layer"].localeCompare(t["source-layer"])||e.id.localeCompare(t.id):t["source-layer"].localeCompare(e["source-layer"])||t.id.localeCompare(e.id);break;default:i="asc"===p?e.id.localeCompare(t.id):t.id.localeCompare(e.id)}return i}))}Q.trace("Layers : ",c);var u=this.options.tools.sortBy,m=this.options.tools.groupAuto,y={};c.forEach((function(e){var t=e.metadata;if(t&&t["geoportail:group"]){var i=t["geoportail:group"];y[i]=y[i]?y[i]+1:1}else{var n=null;switch(u){case"class":n=e["source-layer"];break;case"geom":n=e.type;break;default:n=e.id}var o=n;if(m){var a=n.search(/_|-|:|=/);o=-1!==a?n.substring(0,a).trim():n}y[o]=y[o]?y[o]+1:1,t?t["geoportail:group"]=o:e.metadata={"geoportail:group":o}}})),Q.trace("Groups : ",y);var g,f=document.createElement("div");if(f.className=this.name.containerLayers,e.appendChild(f),void 0!==this.options.tools.collapse){(g=document.createElement("details")).className="",g.open=!this.options.tools.collapse,f.appendChild(g);var v=document.createElement("summary");v.className="",v.innerHTML="",g.appendChild(v)}for(var E=void 0!==this.options.tools.collapse?g:f,x=-1,w=0;w1){y[C]=-1;var T=new z({id:this.id,target:void 0!==this.options.tools.collapse?g:f,title:C,collapse:!0});T.add(),E=T.getContainer()}else 1===y[C]&&(E=void 0!==this.options.tools.collapse?g:f);else E=void 0!==this.options.tools.collapse?g:f}else E=void 0!==this.options.tools.collapse?g:f;if(this.options.tools.layers){var S=new G({id:this.id,target:E,position:x+"_"+this.id,tools:{visibility:this.options.tools.visibility,icon:this.options.tools.icon,type:this.options.tools.type,pin:this.options.tools.pin},obj:{id:k.id,type:k.type,source:k.source,"source-layer":k["source-layer"]}});S.add(),k.layout&&k.layout.visibility&&"none"===k.layout.visibility&&S.visibility(!1),this.layers.push(S)}if(this.options.tools.legend){var B=this.options.tools.editable;void 0===B&&(B=k.editable);var M=new P({id:this.id,target:E,sprites:this.sprites,obj:{id:k.id,source:k.source,title:k.id,editable:void 0!==B&&B,paint:k.paint,layout:k.layout}});M.add(),M.display(!1),S&&(S.addLegend(M),S.slotLegend())}if(this.options.tools.style){var j=new h({id:this.id,target:E,position:x+"_"+this.id,obj:{id:k.id,source:k.source,layout:k.layout,paint:k.paint}});j.add(),j.display(!1),S&&S.addStyle(j),k.layout&&k.layout.visibility&&"none"===k.layout.visibility&&S.visibility(!1)}if(this.options.tools.filter){var N=new L({id:this.id,target:E,position:x+"_"+this.id,obj:{id:k.id,source:k.source,filter:k.Filter}});N.add(),N.display(!1),S&&S.addFilter(N)}}else x>=0&&x--}}if(this.container=e,!this.options.target){if(!document.getElementById(this.name.target)){var O=document.createElement("div");O.id=this.name.target,(document.getElementsByTagName("body")[0]||document.getElementsByTagName("head")[0]||document.documentElement).appendChild(O)}this.options.target=document.getElementById(this.name.target)}this.container&&this.options.target.appendChild(this.container),t().dispatch(s.onloaded,this)}},{key:"_getSprites",value:function(e){var t,i=this;return e&&e.startsWith("mapbox://")?new Promise((function(e,t){Q.error("Protocole mapbox:// non géré !"),e(i)})):e?Promise.all([(t=e+".png",fetch(t,{credentials:"same-origin"}).then((function(e){if(e.ok)return e.blob().then((function(e){i.sprites.url=t;var n=new Image;return n.src=t,n.decode().then((function(){i.sprites.size={},i.sprites.size.h=n.height,i.sprites.size.w=n.width}))})).catch((function(e){Q.warn("fetch image sprites exception :",e)}));throw new Error("HTTP status code: "+e.status)})).catch((function(e){return new Promise((function(t,i){Q.error("fetch image sprites exception :",e),i(e)}))}))),fetch(e+".json",{credentials:"same-origin"}).then((function(e){if(e.ok)return e.json().then((function(e){i.sprites.json=e})).catch((function(e){Q.warn("fetch json sprites exception :",e)}));throw new Error("HTTP status code: "+e.status)})).catch((function(e){return new Promise((function(t,i){Q.error("fetch json sprites exception :",e),i(e)}))}))]):new Promise((function(e,t){Q.error("Auncun sprites disponibles !"),e(i)}))}},{key:"createElement",value:function(){var e=this;return"object"===K(this.options.style)?(this.mapbox=this.options.style,this.options.tools.legend?this._getSprites(this.mapbox.sprite).then((function(){return e._initContainer(),e})).catch((function(e){Q.warn("fetch sprites exception :",e)})):new Promise((function(t,i){e._initContainer(),t(e)}))):"string"==typeof this.options.style?fetch(this.options.style,{credentials:"same-origin"}).then((function(t){return t.json().then((function(t){e.mapbox=t})).then((function(){return e.options.tools.legend?e._getSprites(e.mapbox.sprite).then((function(){return e._initContainer(),e})).catch((function(e){Q.warn("fetch sprites exception :",e)})):new Promise((function(t,i){e._initContainer(),t(e)}))})).catch((function(e){Q.error("json exception :",e)}))})).catch((function(e){Q.error("fetch exception :",e)})):void 0}},{key:"display",value:function(e){this.container.style.display=e?"block":"none"}},{key:"setContext",value:function(e,t){this.context[e]=t}},{key:"getContext",value:function(e){return this.context[e]}},{key:"getID",value:function(){return this.id}},{key:"getContainer",value:function(){return this.container}},{key:"getStyle",value:function(){return this.mapbox}},{key:"getStyleLayer",value:function(e){for(var t=null,i=this.getLayer(e).options.obj.id,n=0;ndiv{bottom:auto;display:block;left:auto;position:relative;right:auto;top:auto}div[id^=GPtoolbox-measure-main]:hover button[id^=GPtoolbox-measure-button]{background-color:rgba(0,60,136,.7)}div[id^=GPlayerSwitcher-]{right:8px;top:8px}div[id^=GPlayerSwitcher-] [draggable]{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;user-select:none;-khtml-user-drag:element;-webkit-user-drag:element}div[id^=GPlayerSwitcher-] input[type=checkbox]+button+dialog{max-height:0}input[id^=GPshowLayersList-]{display:none}button[id^=GPshowLayersListPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowLayersListPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}.position>div[id^=GPlayerSwitcher-]>dialog[id^=GPlayersList]{position:absolute}.position>div[id^=GPlayerSwitcher-]>button[id^=GPshowLayersListPicto-]{float:unset}dialog[id^=GPlayersList]{float:left;position:relative}button[id^=GPshowLayersListPicto-]{float:right}dialog[id^=GPlayersList]{border-bottom-right-radius:0;opacity:0}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{height:auto;max-height:inherit;opacity:1}.GPlayerCounter{background:#fff;border-radius:100px;color:#000;display:inline-block;font-size:12px;left:15px;line-height:1;min-width:15px;padding:2px 0 1px;position:relative;text-align:center;top:-15px}.GPlayerSwitcher_layer{border-bottom:1px dotted #ccc;overflow:hidden;position:relative;top:0}dialog[id^=GPlayersList] .GPlayerSwitcher_layer:last-child{border-bottom:none}.GPlayerAdvancedTools{display:block;max-height:0;opacity:0;transition:max-height .5s ease-out 0s,opacity .5s ease-out 0s}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{opacity:1}[id^=GPlayerInfoPanel]{left:unset;right:100%}div[id^=GPlayerInfoContent]{max-height:200px;overflow-y:auto;padding-left:10px;padding-right:10px;position:relative} /*# sourceMappingURL=GpfExtOlElevationPath.css.map*/ \ No newline at end of file diff --git a/dist/modules/GpfExtOlElevationPath.js b/dist/modules/GpfExtOlElevationPath.js index fe13aebe..d1f09b22 100644 --- a/dist/modules/GpfExtOlElevationPath.js +++ b/dist/modules/GpfExtOlElevationPath.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var e={4582:(e,t)=>{"use strict";function r(e,t){return void 0===t&&(t=Object),t&&"function"==typeof t.getOwnPropertyDescriptors&&(e=t.create(null,t.getOwnPropertyDescriptors(e))),t&&"function"==typeof t.freeze?t.freeze(e):e}function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var o=r({allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,formnovalidate:!0,hidden:!0,ismap:!0,itemscope:!0,loop:!0,multiple:!0,muted:!0,nomodule:!0,novalidate:!0,open:!0,playsinline:!0,readonly:!0,required:!0,reversed:!0,selected:!0});var i=r({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});var a=r({script:!1,style:!1,textarea:!0,title:!0});function s(e){return e===l.HTML}var l=r({HTML:"text/html",XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),c=Object.keys(l).map((function(e){return l[e]}));var u=r({HTML:"http://www.w3.org/1999/xhtml",SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});t.assign=function(e,t){if(null===e||"object"!=typeof e)throw new TypeError("target is not an object");for(var r in t)n(t,r)&&(e[r]=t[r]);return e},t.find=function(e,t,r){if(void 0===r&&(r=Array.prototype),e&&"function"==typeof r.find)return r.find.call(e,t);for(var o=0;o-1},t.MIME_TYPE=l,t.NAMESPACE=u},5752:(e,t,r)=>{"use strict";var n=r(4582),o=r(4722),i=r(2983),a=r(6559),s=r(4466),l=o.DOMImplementation,c=n.hasDefaultHTMLNamespace,u=n.isHTMLMimeType,g=n.isValidMimeType,p=n.MIME_TYPE,d=n.NAMESPACE,h=i.ParseError,A=s.XMLReader;function f(e){return e.replace(/\r[\n\u0085]/g,"\n").replace(/[\r\u0085\u2028]/g,"\n")}function I(e){if(e=e||{locator:!0},this.assign=e.assign||n.assign,this.domHandler=e.domHandler||C,this.onError=e.onError||e.errorHandler,e.errorHandler&&"function"!=typeof e.errorHandler)throw new TypeError("errorHandler object is no longer supported, switch to onError!");e.errorHandler&&e.errorHandler("warning","The `errorHandler` option has been deprecated, use `onError` instead!",this),this.normalizeLineEndings=e.normalizeLineEndings||f,this.locator=!!e.locator,this.xmlns=this.assign(Object.create(null),e.xmlns)}function C(e){var t=e||{};this.mimeType=t.mimeType||p.XML_APPLICATION,this.defaultNamespace=t.defaultNamespace||null,this.cdata=!1,this.currentElement=void 0,this.doc=void 0,this.locator=void 0,this.onError=t.onError}function m(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function v(e,t,r){return"string"==typeof e?e.substr(t,r):e.length>=t+r||t?new java.lang.String(e,t,r)+"":e}function y(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}I.prototype.parseFromString=function(e,t){if(!g(t))throw new TypeError('DOMParser.parseFromString: the provided mimeType "'+t+'" is not valid.');var r=this.assign(Object.create(null),this.xmlns),o=a.XML_ENTITIES,i=r[""]||null;c(t)?(o=a.HTML_ENTITIES,i=d.HTML):t===p.XML_SVG_IMAGE&&(i=d.SVG),r[""]=i,r.xml=r.xml||d.XML;var s=new this.domHandler({mimeType:t,defaultNamespace:i,onError:this.onError}),l=this.locator?{}:void 0;this.locator&&s.setDocumentLocator(l);var u=new A;return u.errorHandler=s,u.domBuilder=s,!n.isHTMLMimeType(t)&&"string"!=typeof e&&u.errorHandler.fatalError("source is not a string"),u.parse(this.normalizeLineEndings(String(e)),r,o),s.doc.documentElement||u.errorHandler.fatalError("missing root element"),s.doc},C.prototype={startDocument:function(){var e=new l;this.doc=u(this.mimeType)?e.createHTMLDocument(!1):e.createDocument(this.defaultNamespace,"")},startElement:function(e,t,r,n){var o=this.doc,i=o.createElementNS(e,r||t),a=n.length;y(this,i),this.currentElement=i,this.locator&&m(this.locator,i);for(var s=0;s{"use strict";var n=r(4582),o=n.find,i=n.hasDefaultHTMLNamespace,a=n.hasOwn,s=n.isHTMLMimeType,l=n.isHTMLRawTextElement,c=n.isHTMLVoidElement,u=n.MIME_TYPE,g=n.NAMESPACE,p=Symbol(),d=r(2983),h=d.DOMException,A=d.DOMExceptionName,f=r(2763);function I(e){if(e!==p)throw new TypeError("Illegal constructor")}function C(e){return""!==e}function m(e,t){return a(e,t)||(e[t]=!0),e}function v(e){if(!e)return[];var t=function(e){return e?e.split(/[\t\n\f\r ]+/).filter(C):[]}(e);return Object.keys(t.reduce(m,{}))}function y(e){if(!f.QName_exact.test(e))throw new h(h.INVALID_CHARACTER_ERR,'invalid character in qualified name "'+e+'"')}function E(e,t){y(t),e=e||null;var r=null,o=t;if(t.indexOf(":")>=0){var i=t.split(":");r=i[0],o=i[1]}if(null!==r&&null===e)throw new h(h.NAMESPACE_ERR,"prefix is non-null and namespace is null");if("xml"===r&&e!==n.NAMESPACE.XML)throw new h(h.NAMESPACE_ERR,'prefix is "xml" and namespace is not the XML namespace');if(("xmlns"===r||"xmlns"===t)&&e!==n.NAMESPACE.XMLNS)throw new h(h.NAMESPACE_ERR,'either qualifiedName or prefix is "xmlns" and namespace is not the XMLNS namespace');if(e===n.NAMESPACE.XMLNS&&"xmlns"!==r&&"xmlns"!==t)throw new h(h.NAMESPACE_ERR,'namespace is the XMLNS namespace and neither qualifiedName nor prefix is "xmlns"');return[e,r,o]}function b(e,t){for(var r in e)a(e,r)&&(t[r]=e[r])}function w(e,t){var r=e.prototype;if(!(r instanceof t)){function n(){}n.prototype=t.prototype,b(r,n=new n),e.prototype=r=n}r.constructor!=e&&("function"!=typeof e&&console.error("unknown Class:"+e),r.constructor=e)}var S={},T=S.ELEMENT_NODE=1,P=S.ATTRIBUTE_NODE=2,R=S.TEXT_NODE=3,_=S.CDATA_SECTION_NODE=4,N=S.ENTITY_REFERENCE_NODE=5,O=S.ENTITY_NODE=6,x=S.PROCESSING_INSTRUCTION_NODE=7,D=S.COMMENT_NODE=8,L=S.DOCUMENT_NODE=9,M=S.DOCUMENT_TYPE_NODE=10,k=S.DOCUMENT_FRAGMENT_NODE=11,G=S.NOTATION_NODE=12,U=n.freeze({DOCUMENT_POSITION_DISCONNECTED:1,DOCUMENT_POSITION_PRECEDING:2,DOCUMENT_POSITION_FOLLOWING:4,DOCUMENT_POSITION_CONTAINS:8,DOCUMENT_POSITION_CONTAINED_BY:16,DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:32});function F(e){for(var t=[];e.parentNode||e.ownerElement;)e=e.parentNode||e.ownerElement,t.unshift(e);return t}function B(e,t){if(t.length=0){for(var o=t.length-1;n<=o;)t[n]=t[++n];if(t.length=o,e){var i=e.ownerDocument;i&&ee(i,e,r),r.ownerElement=null}}}function W(){}function K(e){I(e)}function J(e){return("<"==e?"<":">"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function Q(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(Q(e,t))return!0}while(e=e.nextSibling)}function $(e,t){I(e);var r=t||{};this.ownerDocument=this,this.contentType=r.contentType||u.XML_APPLICATION,this.type=s(this.contentType)?"html":"xml"}function ee(e,t,r,n){e&&e._inc++,r.namespaceURI===g.XMLNS&&delete t._nsMap[r.prefix?r.localName:""]}function te(e,t,r){if(e&&e._inc){e._inc++;var n=t.childNodes;if(r&&!r.nextSibling)n[n.length++]=r;else{for(var o=t.firstChild,i=0;o;)n[i++]=o,o=o.nextSibling;n.length=i,delete n[n.length]}}}function re(e,t){if(e!==t.parentNode)throw new h(h.NOT_FOUND_ERR,"child's parent is not parent");var r=t.previousSibling,n=t.nextSibling;return r?r.nextSibling=n:e.firstChild=n,n?n.previousSibling=r:e.lastChild=r,te(e.ownerDocument,e),t.parentNode=null,t.previousSibling=null,t.nextSibling=null,t}function ne(e){return e&&e.nodeType===K.DOCUMENT_TYPE_NODE}function oe(e){return e&&e.nodeType===K.ELEMENT_NODE}function ie(e){return e&&e.nodeType===K.TEXT_NODE}function ae(e,t){var r=e.childNodes||[];if(o(r,oe)||ne(t))return!1;var n=o(r,ne);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function se(e,t){var r=e.childNodes||[];if(o(r,(function(e){return oe(e)&&e!==t})))return!1;var n=o(r,ne);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function le(e,t,r){if(!function(e){return e&&(e.nodeType===K.DOCUMENT_NODE||e.nodeType===K.DOCUMENT_FRAGMENT_NODE||e.nodeType===K.ELEMENT_NODE)}(e))throw new h(h.HIERARCHY_REQUEST_ERR,"Unexpected parent node type "+e.nodeType);if(r&&r.parentNode!==e)throw new h(h.NOT_FOUND_ERR,"child not in parent");if(!function(e){return e&&(e.nodeType===K.CDATA_SECTION_NODE||e.nodeType===K.COMMENT_NODE||e.nodeType===K.DOCUMENT_FRAGMENT_NODE||e.nodeType===K.DOCUMENT_TYPE_NODE||e.nodeType===K.ELEMENT_NODE||e.nodeType===K.PROCESSING_INSTRUCTION_NODE||e.nodeType===K.TEXT_NODE)}(t)||ne(t)&&e.nodeType!==K.DOCUMENT_NODE)throw new h(h.HIERARCHY_REQUEST_ERR,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function ce(e,t,r){var n=e.childNodes||[],i=t.childNodes||[];if(t.nodeType===K.DOCUMENT_FRAGMENT_NODE){var a=i.filter(oe);if(a.length>1||o(i,ie))throw new h(h.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===a.length&&!ae(e,r))throw new h(h.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!ae(e,r))throw new h(h.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(ne(t)){if(o(n,ne))throw new h(h.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var s=o(n,oe);if(r&&n.indexOf(s)1||o(i,ie))throw new h(h.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===a.length&&!se(e,r))throw new h(h.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!se(e,r))throw new h(h.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(ne(t)){function l(e){return ne(e)&&e!==r}if(o(n,l))throw new h(h.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var s=o(n,oe);if(r&&n.indexOf(s)=0;A--){if(""===(I=n[A]).prefix&&I.namespace===e.namespaceURI){d=I.namespace;break}}if(d!==e.namespaceURI)for(A=n.length-1;A>=0;A--){var I;if((I=n[A]).namespace===e.namespaceURI){I.prefix&&(p=I.prefix+":"+u);break}}}t.push("<",p);for(var C=0;C");else{if(t.push(">"),o&&l(u))for(;s;)s.data?t.push(s.data):Re(s,t,r,n.slice()),s=s.nextSibling;else for(;s;)Re(s,t,r,n.slice()),s=s.nextSibling;t.push("")}return;case L:case k:for(s=e.firstChild;s;)Re(s,t,r,n.slice()),s=s.nextSibling;return;case P:return Pe(t,e.name,e.value);case R:return t.push(e.data.replace(/[<&>]/g,J));case _:return t.push(f.CDATA_START,e.data,f.CDATA_END);case D:return t.push(f.COMMENT_START,e.data,f.COMMENT_END);case M:var b=e.publicId,w=e.systemId;return t.push(f.DOCTYPE_DECL_START," ",e.name),b?(t.push(" ",f.PUBLIC," ",b),w&&"."!==w&&t.push(" ",w)):w&&"."!==w&&t.push(" ",f.SYSTEM," ",w),e.internalSubset&&t.push(" [",e.internalSubset,"]"),void t.push(">");case x:return t.push("");case N:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function _e(e,t,r){var n;switch(t.nodeType){case T:(n=t.cloneNode(!1)).ownerDocument=e;case k:break;case P:r=!0}if(n||(n=t.cloneNode(!1)),n.ownerDocument=e,n.parentNode=null,r)for(var o=t.firstChild;o;)n.appendChild(_e(e,o,r)),o=o.nextSibling;return n}function Ne(e,t,r){var n=new t.constructor(p);for(var o in t)if(a(t,o)){var i=t[o];"object"!=typeof i&&i!=n[o]&&(n[o]=i)}switch(t.childNodes&&(n.childNodes=new H),n.ownerDocument=e,n.nodeType){case T:var s=t.attributes,l=n.attributes=new q,c=s.length;l._ownerElement=n;for(var u=0;u=0&&ej(t.ownerDocument)?U.DOCUMENT_POSITION_FOLLOWING:U.DOCUMENT_POSITION_PRECEDING);var s=F(t),l=F(r);if(!n&&l.indexOf(t)>=0||o&&t===r)return U.DOCUMENT_POSITION_CONTAINS+U.DOCUMENT_POSITION_PRECEDING;if(!o&&s.indexOf(r)>=0||n&&t===r)return U.DOCUMENT_POSITION_CONTAINED_BY+U.DOCUMENT_POSITION_FOLLOWING;var c=B(l,s);for(var u in c.childNodes){var g=c.childNodes[u];if(g===r)return U.DOCUMENT_POSITION_FOLLOWING;if(g===t)return U.DOCUMENT_POSITION_PRECEDING;if(l.indexOf(g)>=0)return U.DOCUMENT_POSITION_FOLLOWING;if(s.indexOf(g)>=0)return U.DOCUMENT_POSITION_PRECEDING}return 0}},b(S,K),b(S,K.prototype),b(U,K),b(U,K.prototype),$.prototype={implementation:null,nodeName:"#document",nodeType:L,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType===k){for(var r=e.firstChild;r;){var n=r.nextSibling;this.insertBefore(r,t),r=n}return e}return ge(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===T&&(this.documentElement=e),e},removeChild:function(e){var t=re(this,e);return t===this.documentElement&&(this.documentElement=null),t},replaceChild:function(e,t){ge(this,e,t,ue),e.ownerDocument=this,t&&this.removeChild(t),oe(e)&&(this.documentElement=e)},importNode:function(e,t){return _e(this,e,t)},getElementById:function(e){var t=null;return Q(this.documentElement,(function(r){if(r.nodeType==T&&r.getAttribute("id")==e)return t=r,!0})),t},createElement:function(e){var t=new pe(p);return t.ownerDocument=this,"html"===this.type&&(e=e.toLowerCase()),i(this.contentType)&&(t.namespaceURI=g.HTML),t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new H,(t.attributes=new q)._ownerElement=t,t},createDocumentFragment:function(){var e=new Ee(p);return e.ownerDocument=this,e.childNodes=new H,e},createTextNode:function(e){var t=new Ae(p);return t.ownerDocument=this,t.childNodes=new H,t.appendData(e),t},createComment:function(e){var t=new fe(p);return t.ownerDocument=this,t.childNodes=new H,t.appendData(e),t},createCDATASection:function(e){var t=new Ie(p);return t.ownerDocument=this,t.childNodes=new H,t.appendData(e),t},createProcessingInstruction:function(e,t){var r=new be(p);return r.ownerDocument=this,r.childNodes=new H,r.nodeName=r.target=e,r.nodeValue=r.data=t,r},createAttribute:function(e){if(!f.QName_exact.test(e))throw new h(h.INVALID_CHARACTER_ERR,'invalid character in name "'+e+'"');return"html"===this.type&&(e=e.toLowerCase()),this._createAttribute(e)},_createAttribute:function(e){var t=new de(p);return t.ownerDocument=this,t.childNodes=new H,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){if(!f.Name.test(e))throw new h(h.INVALID_CHARACTER_ERR,'not a valid xml name "'+e+'"');if("html"===this.type)throw new h("document is an html document",A.NotSupportedError);var t=new ye(p);return t.ownerDocument=this,t.childNodes=new H,t.nodeName=e,t},createElementNS:function(e,t){var r=E(e,t),n=new pe(p),o=n.attributes=new q;return n.childNodes=new H,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=r[0],n.prefix=r[1],n.localName=r[2],o._ownerElement=n,n},createAttributeNS:function(e,t){var r=E(e,t),n=new de(p);return n.ownerDocument=this,n.childNodes=new H,n.nodeName=t,n.name=t,n.specified=!0,n.namespaceURI=r[0],n.prefix=r[1],n.localName=r[2],n}},w($,K),pe.prototype={nodeType:T,attributes:null,getQualifiedName:function(){return this.prefix?this.prefix+":"+this.localName:this.localName},_isInHTMLDocumentAndNamespace:function(){return"html"===this.ownerDocument.type&&this.namespaceURI===g.HTML},hasAttribute:function(e){return!!this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t?t.value:null},getAttributeNode:function(e){return this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase()),this.attributes.getNamedItem(e)},setAttribute:function(e,t){this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase());var r=this.getAttributeNode(e);r?r.value=r.nodeValue=""+t:((r=this.ownerDocument._createAttribute(e)).value=r.nodeValue=""+t,this.setAttributeNode(r))},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);r&&this.removeAttributeNode(r)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);return r?r.value:null},setAttributeNS:function(e,t,r){var n=E(e,t)[2],o=this.getAttributeNodeNS(e,n);o?o.value=o.nodeValue=""+r:((o=this.ownerDocument.createAttributeNS(e,t)).value=o.nodeValue=""+r,this.setAttributeNode(o))},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByClassName:function(e){var t=v(e);return new V(this,(function(r){var n=[];return t.length>0&&Q(r,(function(o){if(o!==r&&o.nodeType===T){var i=o.getAttribute("class");if(i){var a=e===i;if(!a){var s=v(i);a=t.every((l=s,function(e){return l&&-1!==l.indexOf(e)}))}a&&n.push(o)}}var l})),n}))},getElementsByTagName:function(e){var t="html"===(this.nodeType===L?this:this.ownerDocument).type,r=e.toLowerCase();return new V(this,(function(n){var o=[];return Q(n,(function(i){i!==n&&i.nodeType===T&&(("*"===e||i.getQualifiedName()===(t&&i.namespaceURI===g.HTML?r:e))&&o.push(i))})),o}))},getElementsByTagNameNS:function(e,t){return new V(this,(function(r){var n=[];return Q(r,(function(o){o===r||o.nodeType!==T||"*"!==e&&o.namespaceURI!==e||"*"!==t&&o.localName!=t||n.push(o)})),n}))}},$.prototype.getElementsByClassName=pe.prototype.getElementsByClassName,$.prototype.getElementsByTagName=pe.prototype.getElementsByTagName,$.prototype.getElementsByTagNameNS=pe.prototype.getElementsByTagNameNS,w(pe,K),de.prototype.nodeType=P,w(de,K),he.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,r){r=this.data.substring(0,e)+r+this.data.substring(e+t),this.nodeValue=this.data=r,this.length=r.length}},w(he,K),Ae.prototype={nodeName:"#text",nodeType:R,splitText:function(e){var t=this.data,r=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var n=this.ownerDocument.createTextNode(r);return this.parentNode&&this.parentNode.insertBefore(n,this.nextSibling),n}},w(Ae,he),fe.prototype={nodeName:"#comment",nodeType:D},w(fe,he),Ie.prototype={nodeName:"#cdata-section",nodeType:_},w(Ie,Ae),Ce.prototype.nodeType=M,w(Ce,K),me.prototype.nodeType=G,w(me,K),ve.prototype.nodeType=O,w(ve,K),ye.prototype.nodeType=N,w(ye,K),Ee.prototype.nodeName="#document-fragment",Ee.prototype.nodeType=k,w(Ee,K),be.prototype.nodeType=x,w(be,he),we.prototype.serializeToString=function(e,t){return Se.call(e,t)},K.prototype.toString=Se;try{if(Object.defineProperty){function xe(e){switch(e.nodeType){case T:case k:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(xe(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(V.prototype,"length",{get:function(){return Y(this),this.$$length}}),Object.defineProperty(K.prototype,"textContent",{get:function(){return xe(this)},set:function(e){switch(this.nodeType){case T:case k:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),Oe=function(e,t,r){e["$$"+t]=r}}}catch(De){}t._updateLiveList=Y,t.Attr=de,t.CDATASection=Ie,t.CharacterData=he,t.Comment=fe,t.Document=$,t.DocumentFragment=Ee,t.DocumentType=Ce,t.DOMImplementation=W,t.Element=pe,t.Entity=ve,t.EntityReference=ye,t.LiveNodeList=V,t.NamedNodeMap=q,t.Node=K,t.NodeList=H,t.Notation=me,t.Text=Ae,t.ProcessingInstruction=be,t.XMLSerializer=we},6559:(e,t,r)=>{"use strict";var n=r(4582).freeze;t.XML_ENTITIES=n({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),t.HTML_ENTITIES=n({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),t.entityMap=t.HTML_ENTITIES},2983:(e,t,r)=>{"use strict";function n(e,t){e.prototype=Object.create(Error.prototype,{constructor:{value:e},name:{value:e.name,enumerable:!0,writable:t}})}var o=r(4582).freeze({Error:"Error",IndexSizeError:"IndexSizeError",DomstringSizeError:"DomstringSizeError",HierarchyRequestError:"HierarchyRequestError",WrongDocumentError:"WrongDocumentError",InvalidCharacterError:"InvalidCharacterError",NoDataAllowedError:"NoDataAllowedError",NoModificationAllowedError:"NoModificationAllowedError",NotFoundError:"NotFoundError",NotSupportedError:"NotSupportedError",InUseAttributeError:"InUseAttributeError",InvalidStateError:"InvalidStateError",SyntaxError:"SyntaxError",InvalidModificationError:"InvalidModificationError",NamespaceError:"NamespaceError",InvalidAccessError:"InvalidAccessError",ValidationError:"ValidationError",TypeMismatchError:"TypeMismatchError",SecurityError:"SecurityError",NetworkError:"NetworkError",AbortError:"AbortError",URLMismatchError:"URLMismatchError",QuotaExceededError:"QuotaExceededError",TimeoutError:"TimeoutError",InvalidNodeTypeError:"InvalidNodeTypeError",DataCloneError:"DataCloneError",EncodingError:"EncodingError",NotReadableError:"NotReadableError",UnknownError:"UnknownError",ConstraintError:"ConstraintError",DataError:"DataError",TransactionInactiveError:"TransactionInactiveError",ReadOnlyError:"ReadOnlyError",VersionError:"VersionError",OperationError:"OperationError",NotAllowedError:"NotAllowedError",OptOutError:"OptOutError"}),i=Object.keys(o);function a(e){return"number"==typeof e&&e>=1&&e<=25}function s(e,t){var r;a(e)?(this.name=i[e],this.message=t||""):(this.message=e,this.name="string"==typeof(r=t)&&r.substring(r.length-o.Error.length)===o.Error?t:o.Error),Error.captureStackTrace&&Error.captureStackTrace(this,s)}n(s,!0),Object.defineProperties(s.prototype,{code:{enumerable:!0,get:function(){var e=i.indexOf(this.name);return a(e)?e:0}}});for(var l={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25},c=Object.entries(l),u=0;u{"use strict";function r(e){try{"function"!=typeof e&&(e=RegExp);var t=new e("𝌆","u").exec("𝌆");return!!t&&2===t[0].length}catch(e){}return!1}var n=r();function o(e){if("["!==e.source[0])throw new Error(e+" can not be used with chars");return e.source.slice(1,e.source.lastIndexOf("]"))}function i(e,t){if("["!==e.source[0])throw new Error("/"+e.source+"/ can not be used with chars_without");if(!t||"string"!=typeof t)throw new Error(JSON.stringify(t)+" is not a valid search");if(-1===e.source.indexOf(t))throw new Error('"'+t+'" is not is /'+e.source+"/");if("-"===t&&1!==e.source.indexOf(t))throw new Error('"'+t+'" is not at the first postion of /'+e.source+"/");return new RegExp(e.source.replace(t,""),n?"u":"")}function a(e){var t=this;return new RegExp(Array.prototype.slice.call(arguments).map((function(e){var r="string"==typeof e;if(r&&void 0===t&&"|"===e)throw new Error("use regg instead of reg to wrap expressions with `|`!");return r?e:e.source})).join(""),n?"mu":"m")}function s(e){if(0===arguments.length)throw new Error("no parameters provided");return a.apply(s,["(?:"].concat(Array.prototype.slice.call(arguments),[")"]))}var l=/[-\x09\x0A\x0D\x20-\x2C\x2E-\uD7FF\uE000-\uFFFD]/;n&&(l=a("[",o(l),"\\u{10000}-\\u{10FFFF}","]"));var c=/[\x20\x09\x0D\x0A]/,u=o(c),g=a(c,"+"),p=a(c,"*"),d=/[:_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;n&&(d=a("[",o(d),"\\u{10000}-\\u{10FFFF}","]"));var h=a("[",o(d),o(/[-.0-9\xB7]/),o(/[\u0300-\u036F\u203F-\u2040]/),"]"),A=a(d,h,"*"),f=a(h,"+"),I=a("&",A,";"),C=s(/&#[0-9]+;|&#x[0-9a-fA-F]+;/),m=s(I,"|",C),v=a("%",A,";"),y=s(a('"',s(/[^%&"]/,"|",v,"|",m),"*",'"'),"|",a("'",s(/[^%&']/,"|",v,"|",m),"*","'")),E=s('"',s(/[^<&"]/,"|",m),"*",'"',"|","'",s(/[^<&']/,"|",m),"*","'"),b=a(i(d,":"),i(h,":"),"*"),w=a(b,s(":",b),"?"),S=a("^",w,"$"),T=a("(",w,")"),P=s(/"[^"]*"|'[^']*'/),R=a(/^<\?/,"(",A,")",s(g,"(",l,"*?)"),"?",/\?>/),_=/[\x20\x0D\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/,N=s('"',_,'*"',"|","'",i(_,"'"),"*'"),O="\x3c!--",x=a(O,s(i(l,"-"),"|",a("-",i(l,"-"))),"*","--\x3e"),D="#PCDATA",L=s(a(/\(/,p,D,s(p,/\|/,p,w),"*",p,/\)\*/),"|",a(/\(/,p,D,p,/\)/)),M=s("EMPTY","|","ANY","|",L,"|",a(/\([^>]+\)/,/[?*+]?/)),k=a(""),G=a("NOTATION",g,/\(/,p,A,s(p,/\|/,p,A),"*",p,/\)/),U=a(/\(/,p,f,s(p,/\|/,p,f),"*",p,/\)/),F=s(G,"|",U),B=s(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/,"|",F),j=s(/#REQUIRED|#IMPLIED/,"|",s(s("#FIXED",g),"?",E)),H=a(""),V="SYSTEM",Y="PUBLIC",q=s(s(V,g,P),"|",s(Y,g,N,g,P)),z=a("^",s(s(V,g,"(?",P,")"),"|",s(Y,g,"(?",N,")",g,"(?",P,")"))),X=s(g,"NDATA",g,A),Z=""),K=s(y,"|",q),J=s(W,"|",a(Z,g,"%",g,A,g,K,p,">")),Q=a(Y,g,N),$=a(""),ee=a(p,"=",p),te=/1[.]\d+/,re=a(g,"version",ee,s("'",te,"'","|",'"',te,'"')),ne=/[A-Za-z][-A-Za-z0-9._]*/,oe=a(/^<\?xml/,re,s(g,"encoding",ee,s('"',ne,'"',"|","'",ne,"'")),"?",s(g,"standalone",ee,s("'",s("yes","|","no"),"'","|",'"',s("yes","|","no"),'"')),"?",p,/\?>/),ie=a(l,"*?",/\]\]>/),ae=a(/",t.CDSect=ae,t.Char=l,t.Comment=x,t.COMMENT_START=O,t.COMMENT_END="--\x3e",t.DOCTYPE_DECL_START="{"use strict";var n=r(4582);n.assign,n.hasDefaultHTMLNamespace,n.isHTMLMimeType,n.isValidMimeType,n.MIME_TYPE,n.NAMESPACE;var o=r(2983);o.DOMException,o.DOMExceptionName,o.ExceptionCode,o.ParseError;var i=r(4722);i.Attr,i.CDATASection,i.CharacterData,i.Comment,i.Document,i.DocumentFragment,i.DocumentType,i.DOMImplementation,i.Element,i.Entity,i.EntityReference,i.LiveNodeList,i.NamedNodeMap,i.Node,i.NodeList,i.Notation,i.ProcessingInstruction,i.Text,i.XMLSerializer;var a=r(5752);t.S4=a.DOMParser,a.onErrorStopParsing,a.onWarningStopParsing},4466:(e,t,r)=>{"use strict";var n=r(4582),o=r(2763),i=r(2983),a=n.isHTMLEscapableRawTextElement,s=n.isHTMLMimeType,l=n.isHTMLRawTextElement,c=n.hasOwn,u=n.NAMESPACE,g=i.ParseError,p=i.DOMException;function d(){}d.prototype={parse:function(e,t,r){var i=this.domBuilder;i.startDocument(),m(t,t=Object.create(null)),function(e,t,r,i,a){var l=s(i.mimeType);e.indexOf(o.UNICODE_REPLACEMENT_CHARACTER)>=0&&a.warning("Unicode replacement character detected, source encoding issues?");function u(e){if(e>65535){var t=55296+((e-=65536)>>10),r=56320+(1023&e);return String.fromCharCode(t,r)}return String.fromCharCode(e)}function d(e){var t=";"===e[e.length-1]?e:e+";";if(!l&&t!==e)return a.error("EntityRef: expecting ;"),e;var n=o.Reference.exec(t);if(!n||n[0].length!==t.length)return a.error("entity not matching Reference production: "+e),e;var i=t.slice(1,-1);return c(r,i)?r[i]:"#"===i.charAt(0)?u(parseInt(i.substr(1).replace("x","0x"))):(a.error("entity not found:"+e),e)}function m(t){if(t>N){var r=e.substring(N,t).replace(h,d);P&&v(N),i.characters(r,0,t-N),N=t}}function v(t,r){for(;t>=S&&(r=T.exec(e));)w=r.index,S=w+r[0].length,P.lineNumber++;P.columnNumber=t-w+1}var w=0,S=0,T=/.*(?:\r\n?|\n)|.*$/g,P=i.locator,R=[{currentNSMap:t}],_=[],N=0;for(;;){try{var O=e.indexOf("<",N);if(O<0){if(!l&&_.length>0)return a.fatalError("unclosed xml tag(s): "+_.join(", "));if(!e.substring(N).match(/^\s*$/)){var x=i.doc,D=x.createTextNode(e.substr(N));if(x.documentElement)return a.error("Extra content at the end of the document");x.appendChild(D),i.currentElement=D}return}if(O>N){var L=e.substring(N,O);l||0!==_.length||(L=L.replace(new RegExp(o.S_OPT.source,"g"),""))&&a.error("Unexpected content outside root element: '"+L+"'"),m(O)}switch(e.charAt(O+1)){case"/":var M=e.indexOf(">",O+2),k=e.substring(O+2,M>0?M:void 0);if(!k)return a.fatalError("end tag name missing");var G=M>0&&o.reg("^",o.QName_group,o.S_OPT,"$").exec(k);if(!G)return a.fatalError('end tag name contains invalid characters: "'+k+'"');if(!i.currentElement&&!i.doc.documentElement)return;var U=_[_.length-1]||i.currentElement.tagName||i.doc.documentElement.tagName||"";if(U!==G[1]){var F=G[1].toLowerCase();if(!l||U.toLowerCase()!==F)return a.fatalError('Opening and ending tag mismatch: "'+U+'" != "'+k+'"')}var B=R.pop();_.pop();var j=B.localNSMap;if(i.endElement(B.uri,B.localName,U),j)for(var H in j)c(j,H)&&i.endPrefixMapping(H);M++;break;case"?":P&&v(O),M=E(e,O,i,a);break;case"!":P&&v(O),M=y(e,O,i,a,l);break;default:P&&v(O);var V=new b,Y=R[R.length-1].currentNSMap,q=(M=f(e,O,V,Y,d,a,l),V.length);if(V.closed||(l&&n.isHTMLVoidElement(V.tagName)?V.closed=!0:_.push(V.tagName)),P&&q){for(var z=A(P,{}),X=0;XN?N=M:m(Math.max(O,N)+1)}}(e,t,r,i,this.errorHandler),i.endDocument()}};var h=/&#?\w+;?/g;function A(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function f(e,t,r,n,o,i,a){function s(e,t,n){return c(r.attributeNames,e)?i.fatalError("Attribute "+e+" redefined"):!a&&t.indexOf("<")>=0?i.fatalError("Unescaped '<' not allowed in attributes values"):void r.addValue(e,t.replace(/[\t\n\r]/g," ").replace(h,o),n)}for(var l,u=++t,g=0;;){var p=e.charAt(u);switch(p){case"=":if(1===g)l=e.slice(t,u),g=3;else{if(2!==g)throw new Error("attribute equal must after attrName");g=3}break;case"'":case'"':if(3===g||1===g){if(1===g&&(i.warning('attribute value must after "="'),l=e.slice(t,u)),t=u+1,!((u=e.indexOf(p,t))>0))throw new Error("attribute value no end '"+p+"' match");s(l,d=e.slice(t,u),t-1),g=5}else{if(4!=g)throw new Error('attribute value must after "="');s(l,d=e.slice(t,u),t),i.warning('attribute "'+l+'" missed start quot('+p+")!!"),t=u+1,g=5}break;case"/":switch(g){case 0:r.setTagName(e.slice(t,u));case 5:case 6:case 7:g=7,r.closed=!0;case 4:case 1:break;case 2:r.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return i.error("unexpected end of input"),0==g&&r.setTagName(e.slice(t,u)),u;case">":switch(g){case 0:r.setTagName(e.slice(t,u));case 5:case 6:case 7:break;case 4:case 1:"/"===(d=e.slice(t,u)).slice(-1)&&(r.closed=!0,d=d.slice(0,-1));case 2:2===g&&(d=l),4==g?(i.warning('attribute "'+d+'" missed quot(")!'),s(l,d,t)):(a||i.warning('attribute "'+d+'" missed value!! "'+d+'" instead!!'),s(d,d,t));break;case 3:if(!a)return i.fatalError("AttValue: ' or \" expected")}return u;case"€":p=" ";default:if(p<=" ")switch(g){case 0:r.setTagName(e.slice(t,u)),g=6;break;case 1:l=e.slice(t,u),g=2;break;case 4:var d=e.slice(t,u);i.warning('attribute "'+d+'" missed quot(")!!'),s(l,d,t);case 5:g=6}else switch(g){case 2:a||i.warning('attribute "'+l+'" missed value!! "'+l+'" instead2!!'),s(l,l,t),t=u,g=1;break;case 5:i.warning('attribute space is required"'+l+'"!!');case 6:g=1,t=u;break;case 3:g=4,t=u;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}u++}}function I(e,t,r){for(var n=e.tagName,o=null,i=e.length;i--;){var a=e[i],s=a.qName,l=a.value;if((h=s.indexOf(":"))>0)var g=a.prefix=s.slice(0,h),p=s.slice(h+1),d="xmlns"===g&&p;else p=s,g=null,d="xmlns"===s&&"";a.localName=p,!1!==d&&(null==o&&(o=Object.create(null),m(r,r=Object.create(null))),r[d]=o[d]=l,a.uri=u.XMLNS,t.startPrefixMapping(d,l))}for(i=e.length;i--;)(a=e[i]).prefix&&("xml"===a.prefix&&(a.uri=u.XML),"xmlns"!==a.prefix&&(a.uri=r[a.prefix]));var h;(h=n.indexOf(":"))>0?(g=e.prefix=n.slice(0,h),p=e.localName=n.slice(h+1)):(g=null,p=e.localName=n);var A=e.uri=r[g||""];if(t.startElement(A,p,n,e),!e.closed)return e.currentNSMap=r,e.localNSMap=o,!0;if(t.endElement(A,p,n),o)for(g in o)c(o,g)&&t.endPrefixMapping(g)}function C(e,t,r,n,o){var i=a(r);if(i||l(r)){var s=e.indexOf("",t),c=e.substring(t+1,s);return i&&(c=c.replace(h,n)),o.characters(c,0,c.length),s}return t+1}function m(e,t){for(var r in e)c(e,r)&&(t[r]=e[r])}function v(e,t){var r=t;function n(t){return t=t||0,e.charAt(r+t)}function i(e){r+=e=e||1}function a(){return e.substring(r)}return{char:n,getIndex:function(){return r},getMatch:function(e){var t=o.reg("^",e).exec(a());return t?(i(t[0].length),t[0]):null},getSource:function(){return e},skip:i,skipBlanks:function(){for(var t=0;r"!==a.char()?n.fatalError("doctype not terminated with > at position "+a.getIndex()):(a.skip(1),r.startDTD(c.name,c.publicId,c.systemId,c.internalSubset),r.endDTD(),a.getIndex());default:return n.fatalError('Not well-formed XML starting with "0)return n.fatalError("processing instruction at position "+t+" is an xml declaration which is only at the start of the document");if(!o.XMLDecl.test(e.substring(t)))return n.fatalError("xml declaration is not well-formed")}return r.processingInstruction(i[1],i[2]),t+i[0].length}function b(){this.attributeNames=Object.create(null)}b.prototype={setTagName:function(e){if(!o.QName_exact.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,r){if(!o.QName_exact.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:r}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=d,t.parseUtils=v,t.parseDoctypeCommentOrCData=y},562:(e,t,r)=>{"use strict";r.d(t,{A:()=>I});var n=r(7392),o=r.n(n),i=r(2940);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function s(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function l(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){for(var r=0;r{"use strict";r.d(t,{default:()=>y});var n=r(3391),o=r(7392),i=r.n(o),a=r(6736),s=r(5844),l=r(5771),c=r(9632),u=r(7255);const g={_addUID:function(e){return this.uid?e+"-"+this.uid:e}};function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function d(e,t){for(var r=0;r\n '));this.button=n.firstChild,this.button&&this.button.addEventListener("click",(function(t){return e.onClickButtonExport(t)})),r.appendChild(n.firstChild);var o=this.stringToHTML('\n
    \n \n \n \n
    \n '));if(this.menu=o.firstChild,this.menu){if(this.options.menu){var i=this.menu.className;this.menu.className=i.replace(this.menuClassHidden,"")}this.menu.querySelectorAll('input[type=radio][name="format"]').forEach((function(t){t.id.toUpperCase().includes(e.options.format.toUpperCase())&&(t.checked=!0),t.addEventListener("change",(function(t){e.setFormat(t.target.value)}))}))}r.appendChild(o.firstChild),this.container=r}},{key:"stringToHTML",value:function(e){if(function(){if(!window.DOMParser)return!1;var e=new DOMParser;try{e.parseFromString("x","text/html")}catch(e){return!1}return!0}())return(new DOMParser).parseFromString(e,"text/html").body;var t=document.createElement("div");return t.innerHTML=e,t}},{key:"isPluggableControl",value:function(){return!(!this.options.control||"function"!=typeof this.options.control.getContainer||"function"!=typeof this.options.control.getLayer)}},{key:"exportFeatures",value:function(e,t,r){var n=this,o=null;if(!e)return m.warn("Impossible to export : no layer is hosting features."),o;if(!e.getSource()||!e.getSource().getFeatures()||!e.getSource().getFeatures().length)return m.warn("Impossible to export : no features found."),o;e.getSource().getFeatures().forEach((function(e){!e.getStyle()&&n.options.control&&"function"==typeof n.options.control.getStyle&&e.setStyle(n.options.control.getStyle())}));var i={defaultStyle:r};t&&(i.extensions={"geoportail:compute":t});var a=null;switch(this.options.format.toUpperCase()){case"KML":i.writeStyles=!0,i.showPointNames=!0,a=new l.A(i);break;case"GPX":a=new u.default(i);break;case"GEOJSON":a=new c.A(i)}if(!a)return m.warn("Impossible to export : format unknown !?"),o;var s=e.getSource().getProjection(),g=this.getMap();g&&(s=s||g.getView().getProjection());var p=e.getSource().getFeatures();return o=a.writeFeatures(p,{dataProjection:"EPSG:4326",featureProjection:s||"EPSG:3857"})}},{key:"onClickButtonExport",value:function(e){this.isPluggableControl()||m.warn("Componant not pluggable with the control !");var t=this.options.control&&void 0!==this.options.control.getLayer?this.options.control.getData():this.options.layer,r=this.options.control&&void 0!==this.options.control.getData?this.options.control.getData():{},n=this.options.control&&void 0!==this.options.control.getStyle?this.options.control.getStyle():{},o=this.exportFeatures(t,r,n);if(o&&"null"!==o)if(this.dispatchEvent({type:"export:compute",content:o}),this.options.onExport&&"function"==typeof this.options.onExport)this.options.onExport(o);else{var i=document.createElement("a");if(i.setAttribute("href","data:"+this.mimeType+";charset=utf-8,"+encodeURIComponent(o)),i.setAttribute("download",this.options.name+this.extension),document.createEvent){var a=document.createEvent("MouseEvents");a.initEvent("click",!0,!0),i.dispatchEvent(a)}else i.click()}}},{key:"getContainer",value:function(){return this.container}},{key:"setControl",value:function(e){this.options.control=e}},{key:"setTarget",value:function(e){this.options.target=e}},{key:"setFormat",value:function(e){switch(this.options.format=e.toUpperCase(),this.options.format){case"KML":this.extension=".kml",this.mimeType="application/vnd.google-earth.kml+xml";break;case"GPX":this.extension=".gpx",this.mimeType="application/gpx+xml";break;case"GEOJSON":this.extension=".geojson",this.mimeType="application/geo+json";break;default:this.options.format="GEOJSON",this.extension=".geojson",this.mimeType="application/geo+json"}}},{key:"setName",value:function(e){this.options.name=e}},{key:"setTitle",value:function(e){this.options.title=e,this.button&&(this.button.value=this.options.menu?this.icon+e:e)}},{key:"setMenu",value:function(e){var t=this;if(this.options.menu=e,this.button&&(this.button.value=this.options.menu?this.icon+this.options.title:this.options.title),this.menu&&this.options.menu){var r=this.menu.className;this.menu.className=r.replace(this.menuClassHidden,""),this.menu.querySelectorAll('input[type=radio][name="format"]').forEach((function(e){e.id.toUpperCase().includes(t.options.format.toUpperCase())&&(e.checked=!0)}))}}},{key:"setLayer",value:function(e){this.options.layer=e}}],n&&d(r.prototype,n),o&&d(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(i());Object.assign(v.prototype,g),Object.assign(v.prototype,n.A);const y=v;window.ol&&window.ol.control&&(window.ol.control.Export=v)},9209:(e,t,r)=>{"use strict";r.d(t,{default:()=>Rt});var n=r(3391),o=r(562),i=r(1363),a=r(2938),s=r(9201),l=r(6736),c=r(5844);const u={configuration:{},isConfigLoaded:function(){if(this.configuration&&0!==Object.keys(this.configuration).length)return!0;var e="undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0!==r.g?r.g:{};return!!(e.Gp&&e.Gp.Config&&e.Gp.Config.layers&&0!==Object.keys(e.Gp.Config.layers).length)&&(this.configuration=e.Gp.Config,!0)}}; /**! diff --git a/dist/modules/GpfExtOlExport.css b/dist/modules/GpfExtOlExport.css index f0524284..537a9f17 100644 --- a/dist/modules/GpfExtOlExport.css +++ b/dist/modules/GpfExtOlExport.css @@ -8,7 +8,7 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */ \ No newline at end of file diff --git a/dist/modules/GpfExtOlExport.js b/dist/modules/GpfExtOlExport.js index 66c990e5..b1d227c3 100644 --- a/dist/modules/GpfExtOlExport.js +++ b/dist/modules/GpfExtOlExport.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var e={4582:(e,t)=>{"use strict";function r(e,t){return void 0===t&&(t=Object),t&&"function"==typeof t.getOwnPropertyDescriptors&&(e=t.create(null,t.getOwnPropertyDescriptors(e))),t&&"function"==typeof t.freeze?t.freeze(e):e}function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var o=r({allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,formnovalidate:!0,hidden:!0,ismap:!0,itemscope:!0,loop:!0,multiple:!0,muted:!0,nomodule:!0,novalidate:!0,open:!0,playsinline:!0,readonly:!0,required:!0,reversed:!0,selected:!0});var i=r({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});var g=r({script:!1,style:!1,textarea:!0,title:!0});function a(e){return e===A.HTML}var A=r({HTML:"text/html",XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),I=Object.keys(A).map((function(e){return A[e]}));var s=r({HTML:"http://www.w3.org/1999/xhtml",SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});t.assign=function(e,t){if(null===e||"object"!=typeof e)throw new TypeError("target is not an object");for(var r in t)n(t,r)&&(e[r]=t[r]);return e},t.find=function(e,t,r){if(void 0===r&&(r=Array.prototype),e&&"function"==typeof r.find)return r.find.call(e,t);for(var o=0;o-1},t.MIME_TYPE=A,t.NAMESPACE=s},5752:(e,t,r)=>{"use strict";var n=r(4582),o=r(4722),i=r(2983),g=r(6559),a=r(4466),A=o.DOMImplementation,I=n.hasDefaultHTMLNamespace,s=n.isHTMLMimeType,l=n.isValidMimeType,C=n.MIME_TYPE,c=n.NAMESPACE,u=i.ParseError,p=a.XMLReader;function f(e){return e.replace(/\r[\n\u0085]/g,"\n").replace(/[\r\u0085\u2028]/g,"\n")}function d(e){if(e=e||{locator:!0},this.assign=e.assign||n.assign,this.domHandler=e.domHandler||h,this.onError=e.onError||e.errorHandler,e.errorHandler&&"function"!=typeof e.errorHandler)throw new TypeError("errorHandler object is no longer supported, switch to onError!");e.errorHandler&&e.errorHandler("warning","The `errorHandler` option has been deprecated, use `onError` instead!",this),this.normalizeLineEndings=e.normalizeLineEndings||f,this.locator=!!e.locator,this.xmlns=this.assign(Object.create(null),e.xmlns)}function h(e){var t=e||{};this.mimeType=t.mimeType||C.XML_APPLICATION,this.defaultNamespace=t.defaultNamespace||null,this.cdata=!1,this.currentElement=void 0,this.doc=void 0,this.locator=void 0,this.onError=t.onError}function m(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function y(e,t,r){return"string"==typeof e?e.substr(t,r):e.length>=t+r||t?new java.lang.String(e,t,r)+"":e}function b(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}d.prototype.parseFromString=function(e,t){if(!l(t))throw new TypeError('DOMParser.parseFromString: the provided mimeType "'+t+'" is not valid.');var r=this.assign(Object.create(null),this.xmlns),o=g.XML_ENTITIES,i=r[""]||null;I(t)?(o=g.HTML_ENTITIES,i=c.HTML):t===C.XML_SVG_IMAGE&&(i=c.SVG),r[""]=i,r.xml=r.xml||c.XML;var a=new this.domHandler({mimeType:t,defaultNamespace:i,onError:this.onError}),A=this.locator?{}:void 0;this.locator&&a.setDocumentLocator(A);var s=new p;return s.errorHandler=a,s.domBuilder=a,!n.isHTMLMimeType(t)&&"string"!=typeof e&&s.errorHandler.fatalError("source is not a string"),s.parse(this.normalizeLineEndings(String(e)),r,o),a.doc.documentElement||s.errorHandler.fatalError("missing root element"),a.doc},h.prototype={startDocument:function(){var e=new A;this.doc=s(this.mimeType)?e.createHTMLDocument(!1):e.createDocument(this.defaultNamespace,"")},startElement:function(e,t,r,n){var o=this.doc,i=o.createElementNS(e,r||t),g=n.length;b(this,i),this.currentElement=i,this.locator&&m(this.locator,i);for(var a=0;a{"use strict";var n=r(4582),o=n.find,i=n.hasDefaultHTMLNamespace,g=n.hasOwn,a=n.isHTMLMimeType,A=n.isHTMLRawTextElement,I=n.isHTMLVoidElement,s=n.MIME_TYPE,l=n.NAMESPACE,C=Symbol(),c=r(2983),u=c.DOMException,p=c.DOMExceptionName,f=r(2763);function d(e){if(e!==C)throw new TypeError("Illegal constructor")}function h(e){return""!==e}function m(e,t){return g(e,t)||(e[t]=!0),e}function y(e){if(!e)return[];var t=function(e){return e?e.split(/[\t\n\f\r ]+/).filter(h):[]}(e);return Object.keys(t.reduce(m,{}))}function b(e){if(!f.QName_exact.test(e))throw new u(u.INVALID_CHARACTER_ERR,'invalid character in qualified name "'+e+'"')}function v(e,t){b(t),e=e||null;var r=null,o=t;if(t.indexOf(":")>=0){var i=t.split(":");r=i[0],o=i[1]}if(null!==r&&null===e)throw new u(u.NAMESPACE_ERR,"prefix is non-null and namespace is null");if("xml"===r&&e!==n.NAMESPACE.XML)throw new u(u.NAMESPACE_ERR,'prefix is "xml" and namespace is not the XML namespace');if(("xmlns"===r||"xmlns"===t)&&e!==n.NAMESPACE.XMLNS)throw new u(u.NAMESPACE_ERR,'either qualifiedName or prefix is "xmlns" and namespace is not the XMLNS namespace');if(e===n.NAMESPACE.XMLNS&&"xmlns"!==r&&"xmlns"!==t)throw new u(u.NAMESPACE_ERR,'namespace is the XMLNS namespace and neither qualifiedName nor prefix is "xmlns"');return[e,r,o]}function E(e,t){for(var r in e)g(e,r)&&(t[r]=e[r])}function w(e,t){var r=e.prototype;if(!(r instanceof t)){function n(){}n.prototype=t.prototype,E(r,n=new n),e.prototype=r=n}r.constructor!=e&&("function"!=typeof e&&console.error("unknown Class:"+e),r.constructor=e)}var N={},T=N.ELEMENT_NODE=1,S=N.ATTRIBUTE_NODE=2,D=N.TEXT_NODE=3,R=N.CDATA_SECTION_NODE=4,O=N.ENTITY_REFERENCE_NODE=5,x=N.ENTITY_NODE=6,M=N.PROCESSING_INSTRUCTION_NODE=7,k=N.COMMENT_NODE=8,L=N.DOCUMENT_NODE=9,P=N.DOCUMENT_TYPE_NODE=10,U=N.DOCUMENT_FRAGMENT_NODE=11,G=N.NOTATION_NODE=12,F=n.freeze({DOCUMENT_POSITION_DISCONNECTED:1,DOCUMENT_POSITION_PRECEDING:2,DOCUMENT_POSITION_FOLLOWING:4,DOCUMENT_POSITION_CONTAINS:8,DOCUMENT_POSITION_CONTAINED_BY:16,DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:32});function B(e){for(var t=[];e.parentNode||e.ownerElement;)e=e.parentNode||e.ownerElement,t.unshift(e);return t}function H(e,t){if(t.length=0){for(var o=t.length-1;n<=o;)t[n]=t[++n];if(t.length=o,e){var i=e.ownerDocument;i&&ee(i,e,r),r.ownerElement=null}}}function Q(){}function K(e){d(e)}function J(e){return("<"==e?"<":">"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function _(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(_(e,t))return!0}while(e=e.nextSibling)}function $(e,t){d(e);var r=t||{};this.ownerDocument=this,this.contentType=r.contentType||s.XML_APPLICATION,this.type=a(this.contentType)?"html":"xml"}function ee(e,t,r,n){e&&e._inc++,r.namespaceURI===l.XMLNS&&delete t._nsMap[r.prefix?r.localName:""]}function te(e,t,r){if(e&&e._inc){e._inc++;var n=t.childNodes;if(r&&!r.nextSibling)n[n.length++]=r;else{for(var o=t.firstChild,i=0;o;)n[i++]=o,o=o.nextSibling;n.length=i,delete n[n.length]}}}function re(e,t){if(e!==t.parentNode)throw new u(u.NOT_FOUND_ERR,"child's parent is not parent");var r=t.previousSibling,n=t.nextSibling;return r?r.nextSibling=n:e.firstChild=n,n?n.previousSibling=r:e.lastChild=r,te(e.ownerDocument,e),t.parentNode=null,t.previousSibling=null,t.nextSibling=null,t}function ne(e){return e&&e.nodeType===K.DOCUMENT_TYPE_NODE}function oe(e){return e&&e.nodeType===K.ELEMENT_NODE}function ie(e){return e&&e.nodeType===K.TEXT_NODE}function ge(e,t){var r=e.childNodes||[];if(o(r,oe)||ne(t))return!1;var n=o(r,ne);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function ae(e,t){var r=e.childNodes||[];if(o(r,(function(e){return oe(e)&&e!==t})))return!1;var n=o(r,ne);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function Ae(e,t,r){if(!function(e){return e&&(e.nodeType===K.DOCUMENT_NODE||e.nodeType===K.DOCUMENT_FRAGMENT_NODE||e.nodeType===K.ELEMENT_NODE)}(e))throw new u(u.HIERARCHY_REQUEST_ERR,"Unexpected parent node type "+e.nodeType);if(r&&r.parentNode!==e)throw new u(u.NOT_FOUND_ERR,"child not in parent");if(!function(e){return e&&(e.nodeType===K.CDATA_SECTION_NODE||e.nodeType===K.COMMENT_NODE||e.nodeType===K.DOCUMENT_FRAGMENT_NODE||e.nodeType===K.DOCUMENT_TYPE_NODE||e.nodeType===K.ELEMENT_NODE||e.nodeType===K.PROCESSING_INSTRUCTION_NODE||e.nodeType===K.TEXT_NODE)}(t)||ne(t)&&e.nodeType!==K.DOCUMENT_NODE)throw new u(u.HIERARCHY_REQUEST_ERR,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function Ie(e,t,r){var n=e.childNodes||[],i=t.childNodes||[];if(t.nodeType===K.DOCUMENT_FRAGMENT_NODE){var g=i.filter(oe);if(g.length>1||o(i,ie))throw new u(u.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===g.length&&!ge(e,r))throw new u(u.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!ge(e,r))throw new u(u.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(ne(t)){if(o(n,ne))throw new u(u.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var a=o(n,oe);if(r&&n.indexOf(a)1||o(i,ie))throw new u(u.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===g.length&&!ae(e,r))throw new u(u.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!ae(e,r))throw new u(u.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(ne(t)){function A(e){return ne(e)&&e!==r}if(o(n,A))throw new u(u.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var a=o(n,oe);if(r&&n.indexOf(a)=0;p--){if(""===(d=n[p]).prefix&&d.namespace===e.namespaceURI){c=d.namespace;break}}if(c!==e.namespaceURI)for(p=n.length-1;p>=0;p--){var d;if((d=n[p]).namespace===e.namespaceURI){d.prefix&&(C=d.prefix+":"+s);break}}}t.push("<",C);for(var h=0;h");else{if(t.push(">"),o&&A(s))for(;a;)a.data?t.push(a.data):De(a,t,r,n.slice()),a=a.nextSibling;else for(;a;)De(a,t,r,n.slice()),a=a.nextSibling;t.push("")}return;case L:case U:for(a=e.firstChild;a;)De(a,t,r,n.slice()),a=a.nextSibling;return;case S:return Se(t,e.name,e.value);case D:return t.push(e.data.replace(/[<&>]/g,J));case R:return t.push(f.CDATA_START,e.data,f.CDATA_END);case k:return t.push(f.COMMENT_START,e.data,f.COMMENT_END);case P:var E=e.publicId,w=e.systemId;return t.push(f.DOCTYPE_DECL_START," ",e.name),E?(t.push(" ",f.PUBLIC," ",E),w&&"."!==w&&t.push(" ",w)):w&&"."!==w&&t.push(" ",f.SYSTEM," ",w),e.internalSubset&&t.push(" [",e.internalSubset,"]"),void t.push(">");case M:return t.push("");case O:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function Re(e,t,r){var n;switch(t.nodeType){case T:(n=t.cloneNode(!1)).ownerDocument=e;case U:break;case S:r=!0}if(n||(n=t.cloneNode(!1)),n.ownerDocument=e,n.parentNode=null,r)for(var o=t.firstChild;o;)n.appendChild(Re(e,o,r)),o=o.nextSibling;return n}function Oe(e,t,r){var n=new t.constructor(C);for(var o in t)if(g(t,o)){var i=t[o];"object"!=typeof i&&i!=n[o]&&(n[o]=i)}switch(t.childNodes&&(n.childNodes=new j),n.ownerDocument=e,n.nodeType){case T:var a=t.attributes,A=n.attributes=new Z,I=a.length;A._ownerElement=n;for(var s=0;s=0&&eY(t.ownerDocument)?F.DOCUMENT_POSITION_FOLLOWING:F.DOCUMENT_POSITION_PRECEDING);var a=B(t),A=B(r);if(!n&&A.indexOf(t)>=0||o&&t===r)return F.DOCUMENT_POSITION_CONTAINS+F.DOCUMENT_POSITION_PRECEDING;if(!o&&a.indexOf(r)>=0||n&&t===r)return F.DOCUMENT_POSITION_CONTAINED_BY+F.DOCUMENT_POSITION_FOLLOWING;var I=H(A,a);for(var s in I.childNodes){var l=I.childNodes[s];if(l===r)return F.DOCUMENT_POSITION_FOLLOWING;if(l===t)return F.DOCUMENT_POSITION_PRECEDING;if(A.indexOf(l)>=0)return F.DOCUMENT_POSITION_FOLLOWING;if(a.indexOf(l)>=0)return F.DOCUMENT_POSITION_PRECEDING}return 0}},E(N,K),E(N,K.prototype),E(F,K),E(F,K.prototype),$.prototype={implementation:null,nodeName:"#document",nodeType:L,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType===U){for(var r=e.firstChild;r;){var n=r.nextSibling;this.insertBefore(r,t),r=n}return e}return le(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===T&&(this.documentElement=e),e},removeChild:function(e){var t=re(this,e);return t===this.documentElement&&(this.documentElement=null),t},replaceChild:function(e,t){le(this,e,t,se),e.ownerDocument=this,t&&this.removeChild(t),oe(e)&&(this.documentElement=e)},importNode:function(e,t){return Re(this,e,t)},getElementById:function(e){var t=null;return _(this.documentElement,(function(r){if(r.nodeType==T&&r.getAttribute("id")==e)return t=r,!0})),t},createElement:function(e){var t=new Ce(C);return t.ownerDocument=this,"html"===this.type&&(e=e.toLowerCase()),i(this.contentType)&&(t.namespaceURI=l.HTML),t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new j,(t.attributes=new Z)._ownerElement=t,t},createDocumentFragment:function(){var e=new ve(C);return e.ownerDocument=this,e.childNodes=new j,e},createTextNode:function(e){var t=new pe(C);return t.ownerDocument=this,t.childNodes=new j,t.appendData(e),t},createComment:function(e){var t=new fe(C);return t.ownerDocument=this,t.childNodes=new j,t.appendData(e),t},createCDATASection:function(e){var t=new de(C);return t.ownerDocument=this,t.childNodes=new j,t.appendData(e),t},createProcessingInstruction:function(e,t){var r=new Ee(C);return r.ownerDocument=this,r.childNodes=new j,r.nodeName=r.target=e,r.nodeValue=r.data=t,r},createAttribute:function(e){if(!f.QName_exact.test(e))throw new u(u.INVALID_CHARACTER_ERR,'invalid character in name "'+e+'"');return"html"===this.type&&(e=e.toLowerCase()),this._createAttribute(e)},_createAttribute:function(e){var t=new ce(C);return t.ownerDocument=this,t.childNodes=new j,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){if(!f.Name.test(e))throw new u(u.INVALID_CHARACTER_ERR,'not a valid xml name "'+e+'"');if("html"===this.type)throw new u("document is an html document",p.NotSupportedError);var t=new be(C);return t.ownerDocument=this,t.childNodes=new j,t.nodeName=e,t},createElementNS:function(e,t){var r=v(e,t),n=new Ce(C),o=n.attributes=new Z;return n.childNodes=new j,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=r[0],n.prefix=r[1],n.localName=r[2],o._ownerElement=n,n},createAttributeNS:function(e,t){var r=v(e,t),n=new ce(C);return n.ownerDocument=this,n.childNodes=new j,n.nodeName=t,n.name=t,n.specified=!0,n.namespaceURI=r[0],n.prefix=r[1],n.localName=r[2],n}},w($,K),Ce.prototype={nodeType:T,attributes:null,getQualifiedName:function(){return this.prefix?this.prefix+":"+this.localName:this.localName},_isInHTMLDocumentAndNamespace:function(){return"html"===this.ownerDocument.type&&this.namespaceURI===l.HTML},hasAttribute:function(e){return!!this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t?t.value:null},getAttributeNode:function(e){return this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase()),this.attributes.getNamedItem(e)},setAttribute:function(e,t){this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase());var r=this.getAttributeNode(e);r?r.value=r.nodeValue=""+t:((r=this.ownerDocument._createAttribute(e)).value=r.nodeValue=""+t,this.setAttributeNode(r))},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);r&&this.removeAttributeNode(r)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);return r?r.value:null},setAttributeNS:function(e,t,r){var n=v(e,t)[2],o=this.getAttributeNodeNS(e,n);o?o.value=o.nodeValue=""+r:((o=this.ownerDocument.createAttributeNS(e,t)).value=o.nodeValue=""+r,this.setAttributeNode(o))},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByClassName:function(e){var t=y(e);return new V(this,(function(r){var n=[];return t.length>0&&_(r,(function(o){if(o!==r&&o.nodeType===T){var i=o.getAttribute("class");if(i){var g=e===i;if(!g){var a=y(i);g=t.every((A=a,function(e){return A&&-1!==A.indexOf(e)}))}g&&n.push(o)}}var A})),n}))},getElementsByTagName:function(e){var t="html"===(this.nodeType===L?this:this.ownerDocument).type,r=e.toLowerCase();return new V(this,(function(n){var o=[];return _(n,(function(i){i!==n&&i.nodeType===T&&(("*"===e||i.getQualifiedName()===(t&&i.namespaceURI===l.HTML?r:e))&&o.push(i))})),o}))},getElementsByTagNameNS:function(e,t){return new V(this,(function(r){var n=[];return _(r,(function(o){o===r||o.nodeType!==T||"*"!==e&&o.namespaceURI!==e||"*"!==t&&o.localName!=t||n.push(o)})),n}))}},$.prototype.getElementsByClassName=Ce.prototype.getElementsByClassName,$.prototype.getElementsByTagName=Ce.prototype.getElementsByTagName,$.prototype.getElementsByTagNameNS=Ce.prototype.getElementsByTagNameNS,w(Ce,K),ce.prototype.nodeType=S,w(ce,K),ue.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,r){r=this.data.substring(0,e)+r+this.data.substring(e+t),this.nodeValue=this.data=r,this.length=r.length}},w(ue,K),pe.prototype={nodeName:"#text",nodeType:D,splitText:function(e){var t=this.data,r=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var n=this.ownerDocument.createTextNode(r);return this.parentNode&&this.parentNode.insertBefore(n,this.nextSibling),n}},w(pe,ue),fe.prototype={nodeName:"#comment",nodeType:k},w(fe,ue),de.prototype={nodeName:"#cdata-section",nodeType:R},w(de,pe),he.prototype.nodeType=P,w(he,K),me.prototype.nodeType=G,w(me,K),ye.prototype.nodeType=x,w(ye,K),be.prototype.nodeType=O,w(be,K),ve.prototype.nodeName="#document-fragment",ve.prototype.nodeType=U,w(ve,K),Ee.prototype.nodeType=M,w(Ee,ue),we.prototype.serializeToString=function(e,t){return Ne.call(e,t)},K.prototype.toString=Ne;try{if(Object.defineProperty){function Me(e){switch(e.nodeType){case T:case U:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(Me(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(V.prototype,"length",{get:function(){return z(this),this.$$length}}),Object.defineProperty(K.prototype,"textContent",{get:function(){return Me(this)},set:function(e){switch(this.nodeType){case T:case U:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),xe=function(e,t,r){e["$$"+t]=r}}}catch(ke){}t._updateLiveList=z,t.Attr=ce,t.CDATASection=de,t.CharacterData=ue,t.Comment=fe,t.Document=$,t.DocumentFragment=ve,t.DocumentType=he,t.DOMImplementation=Q,t.Element=Ce,t.Entity=ye,t.EntityReference=be,t.LiveNodeList=V,t.NamedNodeMap=Z,t.Node=K,t.NodeList=j,t.Notation=me,t.Text=pe,t.ProcessingInstruction=Ee,t.XMLSerializer=we},6559:(e,t,r)=>{"use strict";var n=r(4582).freeze;t.XML_ENTITIES=n({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),t.HTML_ENTITIES=n({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),t.entityMap=t.HTML_ENTITIES},2983:(e,t,r)=>{"use strict";function n(e,t){e.prototype=Object.create(Error.prototype,{constructor:{value:e},name:{value:e.name,enumerable:!0,writable:t}})}var o=r(4582).freeze({Error:"Error",IndexSizeError:"IndexSizeError",DomstringSizeError:"DomstringSizeError",HierarchyRequestError:"HierarchyRequestError",WrongDocumentError:"WrongDocumentError",InvalidCharacterError:"InvalidCharacterError",NoDataAllowedError:"NoDataAllowedError",NoModificationAllowedError:"NoModificationAllowedError",NotFoundError:"NotFoundError",NotSupportedError:"NotSupportedError",InUseAttributeError:"InUseAttributeError",InvalidStateError:"InvalidStateError",SyntaxError:"SyntaxError",InvalidModificationError:"InvalidModificationError",NamespaceError:"NamespaceError",InvalidAccessError:"InvalidAccessError",ValidationError:"ValidationError",TypeMismatchError:"TypeMismatchError",SecurityError:"SecurityError",NetworkError:"NetworkError",AbortError:"AbortError",URLMismatchError:"URLMismatchError",QuotaExceededError:"QuotaExceededError",TimeoutError:"TimeoutError",InvalidNodeTypeError:"InvalidNodeTypeError",DataCloneError:"DataCloneError",EncodingError:"EncodingError",NotReadableError:"NotReadableError",UnknownError:"UnknownError",ConstraintError:"ConstraintError",DataError:"DataError",TransactionInactiveError:"TransactionInactiveError",ReadOnlyError:"ReadOnlyError",VersionError:"VersionError",OperationError:"OperationError",NotAllowedError:"NotAllowedError",OptOutError:"OptOutError"}),i=Object.keys(o);function g(e){return"number"==typeof e&&e>=1&&e<=25}function a(e,t){var r;g(e)?(this.name=i[e],this.message=t||""):(this.message=e,this.name="string"==typeof(r=t)&&r.substring(r.length-o.Error.length)===o.Error?t:o.Error),Error.captureStackTrace&&Error.captureStackTrace(this,a)}n(a,!0),Object.defineProperties(a.prototype,{code:{enumerable:!0,get:function(){var e=i.indexOf(this.name);return g(e)?e:0}}});for(var A={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25},I=Object.entries(A),s=0;s{"use strict";function r(e){try{"function"!=typeof e&&(e=RegExp);var t=new e("𝌆","u").exec("𝌆");return!!t&&2===t[0].length}catch(e){}return!1}var n=r();function o(e){if("["!==e.source[0])throw new Error(e+" can not be used with chars");return e.source.slice(1,e.source.lastIndexOf("]"))}function i(e,t){if("["!==e.source[0])throw new Error("/"+e.source+"/ can not be used with chars_without");if(!t||"string"!=typeof t)throw new Error(JSON.stringify(t)+" is not a valid search");if(-1===e.source.indexOf(t))throw new Error('"'+t+'" is not is /'+e.source+"/");if("-"===t&&1!==e.source.indexOf(t))throw new Error('"'+t+'" is not at the first postion of /'+e.source+"/");return new RegExp(e.source.replace(t,""),n?"u":"")}function g(e){var t=this;return new RegExp(Array.prototype.slice.call(arguments).map((function(e){var r="string"==typeof e;if(r&&void 0===t&&"|"===e)throw new Error("use regg instead of reg to wrap expressions with `|`!");return r?e:e.source})).join(""),n?"mu":"m")}function a(e){if(0===arguments.length)throw new Error("no parameters provided");return g.apply(a,["(?:"].concat(Array.prototype.slice.call(arguments),[")"]))}var A=/[-\x09\x0A\x0D\x20-\x2C\x2E-\uD7FF\uE000-\uFFFD]/;n&&(A=g("[",o(A),"\\u{10000}-\\u{10FFFF}","]"));var I=/[\x20\x09\x0D\x0A]/,s=o(I),l=g(I,"+"),C=g(I,"*"),c=/[:_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;n&&(c=g("[",o(c),"\\u{10000}-\\u{10FFFF}","]"));var u=g("[",o(c),o(/[-.0-9\xB7]/),o(/[\u0300-\u036F\u203F-\u2040]/),"]"),p=g(c,u,"*"),f=g(u,"+"),d=g("&",p,";"),h=a(/&#[0-9]+;|&#x[0-9a-fA-F]+;/),m=a(d,"|",h),y=g("%",p,";"),b=a(g('"',a(/[^%&"]/,"|",y,"|",m),"*",'"'),"|",g("'",a(/[^%&']/,"|",y,"|",m),"*","'")),v=a('"',a(/[^<&"]/,"|",m),"*",'"',"|","'",a(/[^<&']/,"|",m),"*","'"),E=g(i(c,":"),i(u,":"),"*"),w=g(E,a(":",E),"?"),N=g("^",w,"$"),T=g("(",w,")"),S=a(/"[^"]*"|'[^']*'/),D=g(/^<\?/,"(",p,")",a(l,"(",A,"*?)"),"?",/\?>/),R=/[\x20\x0D\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/,O=a('"',R,'*"',"|","'",i(R,"'"),"*'"),x="\x3c!--",M=g(x,a(i(A,"-"),"|",g("-",i(A,"-"))),"*","--\x3e"),k="#PCDATA",L=a(g(/\(/,C,k,a(C,/\|/,C,w),"*",C,/\)\*/),"|",g(/\(/,C,k,C,/\)/)),P=a("EMPTY","|","ANY","|",L,"|",g(/\([^>]+\)/,/[?*+]?/)),U=g(""),G=g("NOTATION",l,/\(/,C,p,a(C,/\|/,C,p),"*",C,/\)/),F=g(/\(/,C,f,a(C,/\|/,C,f),"*",C,/\)/),B=a(G,"|",F),H=a(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/,"|",B),Y=a(/#REQUIRED|#IMPLIED/,"|",a(a("#FIXED",l),"?",v)),j=g(""),V="SYSTEM",z="PUBLIC",Z=a(a(V,l,S),"|",a(z,l,O,l,S)),q=g("^",a(a(V,l,"(?",S,")"),"|",a(z,l,"(?",O,")",l,"(?",S,")"))),X=a(l,"NDATA",l,p),W=""),K=a(b,"|",Z),J=a(Q,"|",g(W,l,"%",l,p,l,K,C,">")),_=g(z,l,O),$=g(""),ee=g(C,"=",C),te=/1[.]\d+/,re=g(l,"version",ee,a("'",te,"'","|",'"',te,'"')),ne=/[A-Za-z][-A-Za-z0-9._]*/,oe=g(/^<\?xml/,re,a(l,"encoding",ee,a('"',ne,'"',"|","'",ne,"'")),"?",a(l,"standalone",ee,a("'",a("yes","|","no"),"'","|",'"',a("yes","|","no"),'"')),"?",C,/\?>/),ie=g(A,"*?",/\]\]>/),ge=g(/",t.CDSect=ge,t.Char=A,t.Comment=M,t.COMMENT_START=x,t.COMMENT_END="--\x3e",t.DOCTYPE_DECL_START="{"use strict";var n=r(4582);n.assign,n.hasDefaultHTMLNamespace,n.isHTMLMimeType,n.isValidMimeType,n.MIME_TYPE,n.NAMESPACE;var o=r(2983);o.DOMException,o.DOMExceptionName,o.ExceptionCode,o.ParseError;var i=r(4722);i.Attr,i.CDATASection,i.CharacterData,i.Comment,i.Document,i.DocumentFragment,i.DocumentType,i.DOMImplementation,i.Element,i.Entity,i.EntityReference,i.LiveNodeList,i.NamedNodeMap,i.Node,i.NodeList,i.Notation,i.ProcessingInstruction,i.Text,i.XMLSerializer;var g=r(5752);t.S4=g.DOMParser,g.onErrorStopParsing,g.onWarningStopParsing},4466:(e,t,r)=>{"use strict";var n=r(4582),o=r(2763),i=r(2983),g=n.isHTMLEscapableRawTextElement,a=n.isHTMLMimeType,A=n.isHTMLRawTextElement,I=n.hasOwn,s=n.NAMESPACE,l=i.ParseError,C=i.DOMException;function c(){}c.prototype={parse:function(e,t,r){var i=this.domBuilder;i.startDocument(),m(t,t=Object.create(null)),function(e,t,r,i,g){var A=a(i.mimeType);e.indexOf(o.UNICODE_REPLACEMENT_CHARACTER)>=0&&g.warning("Unicode replacement character detected, source encoding issues?");function s(e){if(e>65535){var t=55296+((e-=65536)>>10),r=56320+(1023&e);return String.fromCharCode(t,r)}return String.fromCharCode(e)}function c(e){var t=";"===e[e.length-1]?e:e+";";if(!A&&t!==e)return g.error("EntityRef: expecting ;"),e;var n=o.Reference.exec(t);if(!n||n[0].length!==t.length)return g.error("entity not matching Reference production: "+e),e;var i=t.slice(1,-1);return I(r,i)?r[i]:"#"===i.charAt(0)?s(parseInt(i.substr(1).replace("x","0x"))):(g.error("entity not found:"+e),e)}function m(t){if(t>O){var r=e.substring(O,t).replace(u,c);S&&y(O),i.characters(r,0,t-O),O=t}}function y(t,r){for(;t>=N&&(r=T.exec(e));)w=r.index,N=w+r[0].length,S.lineNumber++;S.columnNumber=t-w+1}var w=0,N=0,T=/.*(?:\r\n?|\n)|.*$/g,S=i.locator,D=[{currentNSMap:t}],R=[],O=0;for(;;){try{var x=e.indexOf("<",O);if(x<0){if(!A&&R.length>0)return g.fatalError("unclosed xml tag(s): "+R.join(", "));if(!e.substring(O).match(/^\s*$/)){var M=i.doc,k=M.createTextNode(e.substr(O));if(M.documentElement)return g.error("Extra content at the end of the document");M.appendChild(k),i.currentElement=k}return}if(x>O){var L=e.substring(O,x);A||0!==R.length||(L=L.replace(new RegExp(o.S_OPT.source,"g"),""))&&g.error("Unexpected content outside root element: '"+L+"'"),m(x)}switch(e.charAt(x+1)){case"/":var P=e.indexOf(">",x+2),U=e.substring(x+2,P>0?P:void 0);if(!U)return g.fatalError("end tag name missing");var G=P>0&&o.reg("^",o.QName_group,o.S_OPT,"$").exec(U);if(!G)return g.fatalError('end tag name contains invalid characters: "'+U+'"');if(!i.currentElement&&!i.doc.documentElement)return;var F=R[R.length-1]||i.currentElement.tagName||i.doc.documentElement.tagName||"";if(F!==G[1]){var B=G[1].toLowerCase();if(!A||F.toLowerCase()!==B)return g.fatalError('Opening and ending tag mismatch: "'+F+'" != "'+U+'"')}var H=D.pop();R.pop();var Y=H.localNSMap;if(i.endElement(H.uri,H.localName,F),Y)for(var j in Y)I(Y,j)&&i.endPrefixMapping(j);P++;break;case"?":S&&y(x),P=v(e,x,i,g);break;case"!":S&&y(x),P=b(e,x,i,g,A);break;default:S&&y(x);var V=new E,z=D[D.length-1].currentNSMap,Z=(P=f(e,x,V,z,c,g,A),V.length);if(V.closed||(A&&n.isHTMLVoidElement(V.tagName)?V.closed=!0:R.push(V.tagName)),S&&Z){for(var q=p(S,{}),X=0;XO?O=P:m(Math.max(x,O)+1)}}(e,t,r,i,this.errorHandler),i.endDocument()}};var u=/&#?\w+;?/g;function p(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function f(e,t,r,n,o,i,g){function a(e,t,n){return I(r.attributeNames,e)?i.fatalError("Attribute "+e+" redefined"):!g&&t.indexOf("<")>=0?i.fatalError("Unescaped '<' not allowed in attributes values"):void r.addValue(e,t.replace(/[\t\n\r]/g," ").replace(u,o),n)}for(var A,s=++t,l=0;;){var C=e.charAt(s);switch(C){case"=":if(1===l)A=e.slice(t,s),l=3;else{if(2!==l)throw new Error("attribute equal must after attrName");l=3}break;case"'":case'"':if(3===l||1===l){if(1===l&&(i.warning('attribute value must after "="'),A=e.slice(t,s)),t=s+1,!((s=e.indexOf(C,t))>0))throw new Error("attribute value no end '"+C+"' match");a(A,c=e.slice(t,s),t-1),l=5}else{if(4!=l)throw new Error('attribute value must after "="');a(A,c=e.slice(t,s),t),i.warning('attribute "'+A+'" missed start quot('+C+")!!"),t=s+1,l=5}break;case"/":switch(l){case 0:r.setTagName(e.slice(t,s));case 5:case 6:case 7:l=7,r.closed=!0;case 4:case 1:break;case 2:r.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return i.error("unexpected end of input"),0==l&&r.setTagName(e.slice(t,s)),s;case">":switch(l){case 0:r.setTagName(e.slice(t,s));case 5:case 6:case 7:break;case 4:case 1:"/"===(c=e.slice(t,s)).slice(-1)&&(r.closed=!0,c=c.slice(0,-1));case 2:2===l&&(c=A),4==l?(i.warning('attribute "'+c+'" missed quot(")!'),a(A,c,t)):(g||i.warning('attribute "'+c+'" missed value!! "'+c+'" instead!!'),a(c,c,t));break;case 3:if(!g)return i.fatalError("AttValue: ' or \" expected")}return s;case"€":C=" ";default:if(C<=" ")switch(l){case 0:r.setTagName(e.slice(t,s)),l=6;break;case 1:A=e.slice(t,s),l=2;break;case 4:var c=e.slice(t,s);i.warning('attribute "'+c+'" missed quot(")!!'),a(A,c,t);case 5:l=6}else switch(l){case 2:g||i.warning('attribute "'+A+'" missed value!! "'+A+'" instead2!!'),a(A,A,t),t=s,l=1;break;case 5:i.warning('attribute space is required"'+A+'"!!');case 6:l=1,t=s;break;case 3:l=4,t=s;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}s++}}function d(e,t,r){for(var n=e.tagName,o=null,i=e.length;i--;){var g=e[i],a=g.qName,A=g.value;if((u=a.indexOf(":"))>0)var l=g.prefix=a.slice(0,u),C=a.slice(u+1),c="xmlns"===l&&C;else C=a,l=null,c="xmlns"===a&&"";g.localName=C,!1!==c&&(null==o&&(o=Object.create(null),m(r,r=Object.create(null))),r[c]=o[c]=A,g.uri=s.XMLNS,t.startPrefixMapping(c,A))}for(i=e.length;i--;)(g=e[i]).prefix&&("xml"===g.prefix&&(g.uri=s.XML),"xmlns"!==g.prefix&&(g.uri=r[g.prefix]));var u;(u=n.indexOf(":"))>0?(l=e.prefix=n.slice(0,u),C=e.localName=n.slice(u+1)):(l=null,C=e.localName=n);var p=e.uri=r[l||""];if(t.startElement(p,C,n,e),!e.closed)return e.currentNSMap=r,e.localNSMap=o,!0;if(t.endElement(p,C,n),o)for(l in o)I(o,l)&&t.endPrefixMapping(l)}function h(e,t,r,n,o){var i=g(r);if(i||A(r)){var a=e.indexOf("",t),I=e.substring(t+1,a);return i&&(I=I.replace(u,n)),o.characters(I,0,I.length),a}return t+1}function m(e,t){for(var r in e)I(e,r)&&(t[r]=e[r])}function y(e,t){var r=t;function n(t){return t=t||0,e.charAt(r+t)}function i(e){r+=e=e||1}function g(){return e.substring(r)}return{char:n,getIndex:function(){return r},getMatch:function(e){var t=o.reg("^",e).exec(g());return t?(i(t[0].length),t[0]):null},getSource:function(){return e},skip:i,skipBlanks:function(){for(var t=0;r"!==g.char()?n.fatalError("doctype not terminated with > at position "+g.getIndex()):(g.skip(1),r.startDTD(I.name,I.publicId,I.systemId,I.internalSubset),r.endDTD(),g.getIndex());default:return n.fatalError('Not well-formed XML starting with "0)return n.fatalError("processing instruction at position "+t+" is an xml declaration which is only at the start of the document");if(!o.XMLDecl.test(e.substring(t)))return n.fatalError("xml declaration is not well-formed")}return r.processingInstruction(i[1],i[2]),t+i[0].length}function E(){this.attributeNames=Object.create(null)}E.prototype={setTagName:function(e){if(!o.QName_exact.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,r){if(!o.QName_exact.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:r}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=c,t.parseUtils=y,t.parseDoctypeCommentOrCData=b},9994:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});const n={lightOrange:"data:image/png;base64,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IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjkyYWVkNjM2LWY3MDMtNDAzOC1hNzM4LWZiYzYxYzZlMTljNCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5NWMzZWI3NC0zYWRmLTRkYzUtOWZjZS1iODQ4NTc3Nzg4ODQiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0NjI3ZDg3NC1lZDIyLTRiZTUtYTlkNS00NDlmMzVhZDIxYzgiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5Mjc4OTUzMDYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphM2U3ZWQ1MS0xNTI4LTRhYjAtODVjOS0zNzNkNzgxZGM2ZmMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjI3KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PofUkY4AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGRuA4VZTAAAFcElEQVRYw82YW2xbVRaGv7XP8bHjXByHQkNhWigdVX1AikRBMBoQ8wASl4fRqPDAAxIPKAVxeRqQRohHBEVCaoGKUBCl4qHcNKCZVKMRRQxtgTaACLRKqlwB14NzM2ni2D2XvXjgBFXQOnFiA1uy/HB89u9/7bX+vf4l1HnpK57hTNCE0AzqAS5gAAuEID5KiWSiLPf4tp7YUjcSu4yLZzdi2IJyNXANcBlwAdAKzAHTwDhwDKEPywC+GZWHbPi7IKOvZIWguAnlr8BtwJ+AxDJeDYCPgF6Ed0hkh+Weov5mZLTHJMDeBjwYk0itYJtKTOpZML3SbYNfnYz2SBr0buARYENcFytdFvga2AGyT7p14Vcjoz3ShOgdKDuAi+pUewpMIDyCypvSreWGk9HdroOEV2F4A1hfTxGJCX2D5U7U/UzuD6NaXq49NRJhBsOjwMVLEtE4gaL4W5cV3IsxPEoizDT0ZLTHcSH6M/BWLLlVwpQKuPzhb+i8sRkv04Y/e5rvPigxtnM9trKU2k0D28A5LN3RsmXbrbFOU8DtQLpqfJqu97nh6TydmzvwWpOI8VDbxqbrkmz62yk+/Ps6yoe8KkeV/hHHfgrMNyrNEkBX1SAktgRs3T7ApV1rSWayiEkDLmLSJDNZLu1ay9btAyS2BEsEuWuZ99WKyRhgHeCcn8wGw/qbOnAS3jmfOwmP9Td1kNhQDduJcUwjyciS0RJXMMkWkPPUo/z4XFxZRhZII8mEwFCsT+f5xXTE7FAOteduItVaZodyhNPVZDeKccJGkxmsChIMOvTt6aRSzIP+7A9rRKWYp29PJ8GgsyqcVauZSADaj+IDTecWvBlD4e01HKjM07XtOOuuy+A2X0BYmib/8SxfvLWRYm8LdqZaCvkI/SDBci6nld0ze7KCLa4F3gSurR4MB5x1FnMhiCeor9hJiPKmWpbGp3EU2IbJFuTe5XfStbczLxgP7K0IPcCFDWhnJoFuMAek2/oNbWdku/WxHATejT1JPZcPvINysFYiK+gAFkXTK6H+MyhXADeseJ9fmrVDM6X080/+p1M2/yFsD1zjEIauEeMAqNpQE16oaKiqwfjYeLk+fuYl10HDq7DsBTavxs8o6FzFKez/dM3rLx9LjUyVxcb7yVkfzmpXFbACJURHIxgyxkyu1ml6qL0Z4YX4xl7Jfrrgm9Ov9bX/e++x1tHCgkQ11lgELGA4sBp3iHRbH5GDwJPAFLXo6KJnDmTh/aG2w2/3t47VSGQxs1zAE9U2s9pEjx3hXuBloCa7G1rxv8o3f/7SkUz/UFFWMqGRWMpHAqsDbl00KGotIXM7MawF7gKSS5oJJRospI7v+rD96Ikp8aV2EgrkVPW4OnIy6SVL9ZubvZgyaOVyYDfwl2oNqVWiXNEb231oTe+/BrzvK9Gy01MFyoiOKzIEmqsEfjGf/39U1yHgosJFUXhlFMl+z9E/nkvhVNHZsjux+9Caf77RnyzMBaJLmW4RrWAlB3Y4Uh13HLOA4wQjo6O2IRPNxVV4JuG5Et2SSelzjtFLzsZQ0NIZ8/2rx7K9+/paxqbKvyh4Bc4AFQxzau23Dow7FS+nHmfEUz05OqINH8+evXJPJVOuE93XkY4eSziaXcQpB2b+vZNt7+/8IPPl2OxPRMJ4dDsLzIho3hpzamJ6aqJ0ei6qtZAasmZ2OS1RyOMd6egBIzSFVoKj4y1Hnvhv+8cD02ZOkEmgIKITVnXKWDs1ksvNrgbTbRSZ46cypY50aWcllIsyKXvr8GTyi9f6WvePFGVQhO8EPW2NzI+OfV2pF2bDTgbg8D/aJeVUspd1BK3/G24u7/skO3+iYP3h3LdhI/B+AGodUpo8WKwoAAAAAElFTkSuQmCC",darkOrange:"data:image/png;base64,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czpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjIxNDZjMzUzLWIxZjItNGVjOC04NzQ3LTIwMGEyYWExM2ViMyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2NGViNmI2Ni03Y2I2LTRkZGUtYTI3OS01MGY0ZWFiZGFhODAiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1ODRhM2VjZC1kNGFmLTQ3NjItYjA1ZS04ODk2MGQ4ZTk0Y2MiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5MDM3ODI2MTQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxYzNjOGRkZi1kMjVkLTQ4YzQtYTAwYS0yMmU3ZDYwMzg1YjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjAzKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PuhCAHgAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGQOTjc4FAAAFdklEQVRYw82YW2gcZRTHf+eb2dlkc9lsrFYr2notfSgWxKKiog8VvIFI9UFQEaWtYPFJfREfRRSEeqlttViLD/WGisYXrShWpfWC1WpSN5eN3cZumkuTzWY3c/mOD9lI0WSTTXbVA8M8zMz3n//5zvl/5xyhxqb3ewYvaERpAvUAFzCABUIQH6GAHyvKa76tJbbUjMRW4+LbC7GsQbgCWA+sAs4AWoA8MAxkgEMo32LoxDO98oIN/xdk9IGUYEYvRrgduAW4Gogt4NMA+BroQHkfm+qW3aP6n5HRTSYG9hZga5lEwyKWKZVJvQCmQ3bZ4F8no5skAXov8BiwspwXizUL9APPgOyVXTr5r5HRzdKI1TsRngHOqlHuKTCI8hhG3padWqw7GX3IddDwcixvAefXUkTKhH7HcBfifi8vh1E1H1cfGkGYxPI4cM68RGw5zf3y3S7IuedgeZwgTNZ1Z3Sz46LRNcA7Zcmd25yGgPWP/M7q65toTLZSHBvn6OcFDm07n6g0n9oNAxsR54DsjBYs2251QWAbgFuBREX/tF3rc9+zA6xa3U5jSxwxHmpbueyqOOvvOM7rj67g1JfedFTNagngVtR+B0zUK8xiwLqKTmhcE3Dblk4uXbecRDKFmATgIiZBIpni0nXLuW1LJ41rgnmcvG6B59WiyRhgBeDM+UZipWHthnbcmDf7b8Y81m5oJ7GyErZTxjH1JCPzesu4ghtvBpkjH2X6uXFlAVEg9SMjhEAamFsyp4Yjcuks1s6uXdZacuksU8OVZDcC0mW8OpFRQqBruvqdwwpdDh+9cjaF0QHQv/2wRhRGB6afdzkVkKZxtDoyVaqZBKCHEXygcXafjhi63l3G9tIEGzYe4ZKrksSbzmCqMEz6mzE+eedC+juaiUYqhZCPchgkqKB4SzxntqQEO7oceBu4srIzHIitsMTOBOMJ1leCkxAMmEpRWt6Vg8BGTConOxZeSVdfzmwxHmpvRtkJnFmHcuYksBkxH8tO69e1nJEd1sdhP/BBuUippfnA+3jsr5ZI9TnzV33mFcB/DuEi4LpFr/PPZu3LkanES08fOltWnxe2Ba5xCEPXiHEAVG2oMS9UNFTVINOXKdamn3nQdSC8HMMeYPVS+hkFzQdObl9m2Zu7+xt6hkKx5fXktGumdNXyZQUKiPZGkDbGnFxqp+kh9kaUHeUTezHr6WRkxt/oa/toT39Lby6QqMoci4BJDB8vpTtEdlkflf3A08AQ1ejoTM8cyeRnudYD72Zb+qokMhNZLuCJaqtZaqDLLi0i7EHYDVTV7oZW/J9PNf3wanfycLoki5nQSFnKewKrnW5NNMhtKRDlt6EsB+4G4vM2/UrUNd5w5Pl028FfiuJL9SQUyKrqEXXkaNyLF2o3N9vUYKB0AbAduKFSQWqVKFv0+rYfXdbx4aB3qqQLDk8VKCKaUSQNmi0F/ujAwB9RTYeAMwoXabg2QvZ5jl4ym8Ip6FjgDm7/bdl7bw3Ec/lItEJyWyAS0RJWsmC7I9WM45hJHCfo6e21dZlozlju3pjnSnRT0tMXHdFzT8dQ0EJoTr2eSXXs7W/uG/pnwiswBZQw5NXaYw5knJKXVY8p8VSP9vZo3cezp1v2nniDK9FD7V70RMxoaganGJmJT0+0frbtt+RPfVN/EQnLo9sxYEREB6wxxweHhwYL4/mo2kSqi43c5zRH8GS7Fz1shMZQJTg41PzVU7+2fdNZNHlBTgI5ER20qkPG2qGebHZsSTpULzJH8slCe6ywrWTlrGTM3tw9Ef/xjUzLvp6idIlwQtBxa2Sit6+/VCvMuu0MwIE726RBSqlViaDli6Gm4t6e1MQveet3Z4+F9cD7Ewo4WRJBbaaSAAAAAElFTkSuQmCC",red:"data:image/png;base64,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293bv2fa/f0ASM5yljz/NiUAAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmI5YjA2YTAwLWZkOTQtNDc5MC1hNzIzLTlkMGUwNGRiNTRlNyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1MTQ3ZGU5Yi1kOTA0LTRlNWYtYjIyYy0wZmMzOGRmMWI3ZGEiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YzBjNTI2YS1lYTkyLTQxYWItODM5Yy05OWFhYTM0YjdlYzciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE2NDAxNTU0MjYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowMjQ4MDc5ZS1kMTYyLTQxZmItOGViYS1lMzY2NTRiNGRjMjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjIwOjQwKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PkaovgIAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPFCiKn0kIAAAFfUlEQVRYw82YTWxc1RXHf+e+N2/GH+Px2IEEV02AgqIsIkwgoYS2ahepVGCBUOiCRRdsAAnECthErBBCICGFj4gqRQqBRSABUrVm1URtCSATJ5ASZCPHH0kGgx1/xJl5nvH7uIcFY4iIM/GzZyhHenqL994993/u+f/fOUeos+nNnkHCJoQWRD0UFzCARYhQCVB8NFWWTwNbT99SNxC3GZfIXg9sADYDWxCuRekEskARYQplFPgEOAr045ph6bXRzwKM3pEX5mduQLkHuAvYCqSW8GkIfAT0IBwknT8lH87o/w2M3mpSqL0LeLQKIrOMZSpVUC8hpkf6bPiTg9FbpBn0L8ATwLoqL5ZrFjgNPAeyV47p3E8GRjdLE6r3oTwHXF0n7ikwgfAEIvvlqJYbDkY3uw4a3YLyNrC2niJSBXQG4c+Ie0yORnGSj5OnRhzlUJ4ErrkikBAoAjPVe7ik4F6D8iRxlGvoyegmx4X4NwgHgM6a8fUyIfc8doZbf99Ca66N0uwF+v7tc3DnWoJK6gqep1C2g3NEjsdLlm03GXSbAe4GmmvGZ91vA3Y8P8aN6ztoyaYxxsPaNrbcnmbbvV/x9ONdnPnA+w71otaMcDfYPqDUmDQTUgjdNYPQsSHkgYf62di9mmwujzHNgIsxzWRzeTZ2r+aBh/rp2BDWDLLQjSzpf7VMMIpB6QKcy77Tuc6wdVsHbspbfJspj63bOuhcV8u3g9KFJtufWQbHakfLdQUv3YrI4qwQ+e65616Jr6mknE4KJgIGgctLZnEq5vRgAWsXLyKttZweLFCcqiW7cdVP1DgwQoQwUNPJxIDDG7vXMDszBvqjDWvM7MwYb+xew8SAUzNowgCSDEwyNVMJQU8AAdC06DvBtOG/76xirlLi3u0nufn2HJmWTir+FJ9+PMu7B66nr6eVYLpWCgUoJ0DCGoq3wv/MbXkhmlkN7Ad+XTMY4kBTl6XlKnA8IQ4U/xyUx8wlB3ZpKvcC23Hz49K79Ep6GeWM8VB7J8pfgasaUM6cAx5EzPvSZ4OGljNy1AYIh4C/L6lASWYBcBCHQ0mBJOfM94rk+WjwAsKvgN8te51LK7kPpm3zK89OrZH1v4zaQ9c4RJFrxDgAqjbSlBcpGqlqODoyWq5TP1OtnoU9wPqV9DMKWlRnfJ+/6q3XKpmhSRVbXU8uuhb6Hq1eVsBHdDiGQWPMuZV1mpuMB/aPCK8CXcsMjs6pufCm3/7PPZXs8LhKnJBjMTCH4f2VdIfIcRsgcgh4FpgkiY4u9Mwqc4fn2468M58dSQhkIbNcwBPVNrPSRJdjWgb2AK8BidrdSCX4PGw5/re53IlBK8uZ0EhVyodCq/1uXTTIzfrExZ0oq4H7gfQSmv54IMqcfNFv7/0ilkCSg1CgoKon1ZEv017ar9/cbEvGEFeuQ9mF8IdaBamFuBB7I7tKq3r+EXjnK0tPTxUoIzqqyCBooRIGM2NjX8d1HQIuKFys0cYY2eeJ3riYwinorHUndvmr3nt7Pj1eVNEa5LZALKIVrBTAnopVRx3HzOE44dDwsG3IRHPBxrtTnkv8p5yjLzvoLy72oaC+mvOvz+V79pZbRyYvJbwC80AFQ1GtPevAqFPxCuoxL57ql8ND2vDx7MVW2JTOuMQPdxDvSInmF/yU1ZT+Nd92eGcp97+RH4BE1XHHLDAtomPWmK8mpiYn/AvFOCmRGmLTm53WOOKpDhM/YqApQsLe+dYPnym1f9xvTVGQc8C4iE5Y1Ulj7eRQoTC7Ih1qFJiTQc7vwN9ZUbk6Z+ydp6L0Z2+Ws/uGrAyI8I2gF6yR0vDI6Uq9fDbsZACO3NQuGa3kr3XC7H+ClvJeP1/6IrbBqbNno0b4+xbMlmARngcRbAAAAABJRU5ErkJggg==",turquoiseBlue:"data:image/png;base64,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/MUi8H5G35QHBm+BvjV3bu1znD4AWZpV+gY4OARGS5S97vHu3u65/XunPb8fN2tyj8UDOK0AAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjEwNGNlNWFhLTE1YzctNGI4Yi1iOGU1LTFmYWQyNWFiYzBhZCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpkNDMyZTY1Zi0xOThhLTQxM2EtYWYyMy1jNzhlNzczNGRlN2QiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyNzExODVkMi03MWZiLTRhZDMtYTJmMi1iNjM3OWU3MDc1OTEiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE4NjYyMzgzMjQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NGFiYzNkYS1lZWJiLTRlZjctYjdjNS04ZDRjODY5OGVjODMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI0OjI2KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pj0tlUwAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGBru/VeEAAAABmJLR0QA/wD/AP+gvaeTAAAFO0lEQVRYw9WYe2xTVRzHTx97dYS5B1UHa+/tY12dDoOKWyIGlfgHkCkSNTHGwHxA3NiAP/A5x4CMKEzdYL29YyAyBxKQZbI+NvYIaowaH9Ogi2GRbGjcFrbBNrq2a2/9nq5LCFnbbfSOeZJPTs/t6Tm/7/39zu+cU0IiXc7WSImNX0BsZiVYAhigmah5tHklsZrjSYtJSuZtaeSiiJU3gHUwfC9oARfBIHBP1DzaPH1eRuzmp0E6aTgSNX9EWMwSvOkMGPgG+CpguG8a0H7nA78zkMYqye0V0lYXDSHrYUw7cE5TxM04/b+38+vJ+RPRt0eIjVeAAhhyCQizFDKJEBjndaCY49Di4+CRlzFxfwSE3Ciol9i4DSBujoRUy7HIszFxdwSF3CioBy8qm1g5ufhirHwyJqwHrrDGWTlg8hFL1URN2+EF0XFPkyYuSWwhUVgnT2CygXBG3dFcM7bz1/au1u7OK9/93eWidUlHe1dCc810EsUAsXOPQZCI3rGZ6Wb4EXAEM0SCUFnZduz6T/09l4bHXYOCz+f0+XxeWg+7XYM/4vnKtlqHJHSIOrAHlYMFYmawRNCKycaDGZLVfMRdf/nPDpfXM+abotDnpy93dtzXfNgdZg+im2uimJ6h66UTeIMZsrat1jvkdPRRb/imLt4hl6N3DfqFEIPvOMzDJYspJsWfbUKEyFNttcKoyzkKo4UgYoRRt3OE9guT1br984nsmQ7gCWbIipaj4xeu9v/hFQTPlG7B89+u9v9O+4UQQ8f/BSlaVM8kgBOhji4p9mpvwQ+Wfwddjp6bQw2u8g44HT3535/tTUa/0Eccvg4sFDE1m2PBZkx2LVRqVcLQvG/PDDX1/tVxze38x+UZH6O1He28b764qgwtxOcf327eBGLFE9NikiD3qzDZhVBJgCJH3KubDnkfbD4s5Jw74qM1bcvDnxq8/vHt1SrS9InIJ2m7OQ4UYsKhCB9lJqHj0gPsHJzPvsS9w8rRRPDptI40M8PlH9fOJ5M5K008rsZmIwi5gc4QN9Zja8zn+5epch9PTFepU1iGuVunVqeyS9g0iv8zy96l0WiSjIsXx28iJEJhaONkMGB5YP14bkmI1SzIz1T0pRa9VKnNzCjUMcwWUAS2BtgWYLJN+xTo1OyrOhW7xsAwqnSGkd3i+uGjkT5Xw6DLt3AdEKQNB4YXbdtwQpuVuRtG7pwhxWA7vJgRib0nDuSDvtkIkjYcHE3aVWjRLL9/zyyETPK2Vq3OidAaOhiPDLcbxo3MRIik0eReWPnO15pHHiqbpYhS6hkNw7wAz0To6GM5hAzH3wkDa6b7x4bEwnkUfMnP6idX7Nex7GxElIDNerV6hU6jSdbp9RHck2w0w/FaGGoJm7KtnCfmWNlF1fOrK3Q6bekMRFABO7QM8yxewFLUi+5JSxPpAmcxy0gjt1Rytir4NcHKCfJTH/al5j1j1hr0pWEML55YD+x2GP6cVqNZZjQYEvUsG4vP4v8jKju5L1p6qnytxGKa6qogyOorBpVbXvxMe69xdxABb9I0DAGvIIRWp7NsBsJIoWVZKfaXuf+jMKp2b6z8+Adb4aErNwpCCh5J2pnfoH0ga08g7invBfaQjXjjuQifhyEgLdNolJP5UqR17y+QnSwvk1i565OZK6F8RzubvWwvDH8LvKZnmHXY8HKws+sNLJtI5muJ/7hYElOzJ1V+fN9R7CVDClPJOVXuqo06vS4HQjTwgDKDZRXk/1JiD7wrieFLk6T1lczCXUVK7aPZinS9XrTw+Q+Tql7SUmvGuQAAAABJRU5ErkJggg==",defaultOffset:[-25.5,-32]}},3391:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(9313);const o={onPanelOpen:function(){(0,n.A)(this.options.position,this.element.id.match(/(\w+)-[0-9]+/)[1])}}},7255:(e,t,r)=>{"use strict";r.d(t,{default:()=>b});const n=ol.format.GPX;var o=r.n(n);const i=ol.geom.MultiLineString;var g=r.n(i);const a=ol.geom.LineString;var A=r.n(a),I=r(2888),s=r(9335);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function C(e,t){for(var r=0;r{"use strict";r.d(t,{A:()=>p});var n=r(7304),o=r.n(n),i=r(2888);function g(e){return g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},g(e)}function a(e,t){for(var r=0;r{"use strict";r.d(t,{A:()=>v});const n=ol.format.KML;var o=r.n(n),i=r(2999),g=r(2888),a=r(3920),A=r(5844),I=r(9335),s=r(2536);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function C(e,t){for(var r=0;r)\s*(<)/g,"$1$2"),null===(n=I.A.parse(g)))return o;function A(e){var t="";t+=e.substr(6,2),t+=e.substr(4,2),t+=e.substr(2,2);for(var r=parseInt(t,16).toString(16),n="",o=r.length||0,i=0;i<6-o;i++)n+="0";return r="#"+n+r}var l=function(e,t){if(y.trace("label with style :",t),e){for(var r=e.getProperties().name,n=A("ff000000"),o="#FFFFFF",g=0,I="Sans",s="16px",l=null,C=5,c="#000000",u="#ffffff",p=1,f=!1,d=!1,h=t.childNodes,m=0;m{"use strict";r.d(t,{A:()=>T});var n=r(3920),o=r(5844),i=r(9994),g=r(9972),a=r.n(g),A=r(5576),I=r.n(A),s=r(2423),l=r.n(s),C=r(86),c=r.n(C),u=r(7158),p=r.n(u),f=r(7195),d=r.n(f),h=r(9464),m=r.n(h);const y=ol.geom.Polygon;var b=r.n(y);const v=ol.geom.MultiPolygon;var E=r.n(v),w=o.A.getLogger("styling");a().prototype.setPropertyFill=function(){var e=this.getStyle();if(e&&(!Array.isArray(e)||0!==e.length)){var t=e.getFill();if(t){var r=t.getColor();if(Array.isArray(r)){var o="rgba(";o+=r[0]+",",o+=r[1]+",",o+=r[2]+",",r=o+=r[3]+")"}if(n.A.isRGB(r)){var i=n.A.rgbaToHex(r);this.set("fill",i.hex),this.set("fill-opacity",i.opacity)}else this.set("fill",r),this.set("fill-opacity",1)}}},a().prototype.setPropertyStroke=function(){var e=this.getStyle();if(e&&(!Array.isArray(e)||0!==e.length)){var t=e.getStroke();if(t){var r=t.getColor();if(Array.isArray(r)){var o="rgba(";o+=r[0]+",",o+=r[1]+",",o+=r[2]+",",r=o+=r[3]+")"}if(n.A.isRGB(r)){var i=n.A.rgbaToHex(r);this.set("stroke",i.hex),this.set("stroke-opacity",i.opacity)}else this.set("stroke",r),this.set("stroke-opacity",1);this.set("stroke-width",t.getWidth())}}},a().prototype.setPropertyLabel=function(){var e=this.getStyle();if(e&&(!Array.isArray(e)||0!==e.length)){var t=void 0!==this.get("name");if(e.getText()&&t){var r=e.getText().getFill();if(r){var o=r.getColor();if(Array.isArray(o)){var i="rgba(";i+=o[0]+",",i+=o[1]+",",i+=o[2]+",",o=i+=o[3]+")"}if(n.A.isRGB(o)){var g=n.A.rgbaToHex(o);this.set("label-fill",g.hex),this.set("label-fill-opacity",g.opacity)}else this.set("label-fill",o),this.set("label-fill-opacity",1)}var a=e.getText().getStroke();if(a){var A=a.getColor();if(Array.isArray(A)){var I="rgba(";I+=A[0]+",",I+=A[1]+",",I+=A[2]+",",A=I+=A[3]+")"}if(n.A.isRGB(A)){var s=n.A.rgbaToHex(A);this.set("label-stroke",s.hex),this.set("label-stroke-opacity",s.opacity)}else this.set("label-stroke",A),this.set("label-stroke-opacity",1);this.set("label-stroke-width",a.getWidth())}this.set("label-font",e.getText().getFont()||N.DEFAULT_TEXT.font),this.set("label-textAlign",e.getText().getTextAlign()||N.DEFAULT_TEXT.textAlign)}}},a().prototype.setPropertyMarker=function(){var e=this.getStyle();if(e&&(!Array.isArray(e)||0!==e.length)){var t=e.getImage();if(t)if(t instanceof c()){var r=t.getColor();if(Array.isArray(r)){var o="rgba(";o+=r[0]+",",o+=r[1]+",",o+=r[2]+",",r=o+=r[3]+")"}if(r){var i=n.A.rgbaToHex(r);this.set("marker-color",i.hex)}var g=t.getScale();switch(Math.round(2*g)/2){case 0:case.5:this.set("marker-size","small");break;case 1:this.set("marker-size","medium");break;case 1.5:case 2:this.set("marker-size","large")}var a=t.getSrc();a&&this.set("marker-symbol",a),this.unset("circle-fill"),this.unset("circle-fill-opacity"),this.unset("circle-stroke"),this.unset("circle-stroke-width"),this.unset("circle-stroke-opacity"),this.unset("circle-radius")}else{var A=t.getFill();if(A){var I=A.getColor();if(Array.isArray(I)){var s="rgba(";s+=I[0]+",",s+=I[1]+",",s+=I[2]+",",I=s+=I[3]+")"}if(n.A.isRGB(I)){var l=n.A.rgbaToHex(I);this.set("circle-fill",l.hex),this.set("circle-fill-opacity",l.opacity)}else this.set("circle-fill",I),this.set("circle-fill-opacity",1)}var C=t.getStroke();if(C){var u=C.getColor();if(Array.isArray(u)){var p="rgba(";p+=u[0]+",",p+=u[1]+",",p+=u[2]+",",u=p+=u[3]+")"}if(n.A.isRGB(u)){var f=n.A.rgbaToHex(u);this.set("circle-stroke",f.hex),this.set("circle-stroke-opacity",f.opacity)}else this.set("circle-stroke",u),this.set("circle-stroke-opacity",1);this.set("circle-stroke-width",C.getWidth())}var d=t.getRadius();this.set("circle-radius",d)}}};var N={APPLY_CONVERT_GEOM_GPX:!0,DEFAULT_ICON:{src:i.A.lightOrange,anchor:[.5,1],scale:1},DEFAULT_CIRCLE:{radius:10,fill:{opacity:1,color:[0,0,0,1]},stroke:{width:1,opacity:1,color:[0,0,0,1]}},DEFAULT_STROKE:{width:5,opacity:1,color:[250,250,250,1]},DEFAULT_FILL:{opacity:1,color:[0,0,0,1]},DEFAULT_TEXT:{font:"16px sans",textAlign:"left",stroke:{color:[250,250,250,1],width:5,opactity:1},fill:{opacity:1,color:[0,0,0,1]}},getListTags:function(){return["type","fill","fill-opacity","stroke","stroke-opacity","stroke-width","circle-fill","circle-fill-opacity","circle-stroke","circle-stroke-opacity","circle-stroke-width","circle-radius","marker-symbol","marker-color","marker-size","label-fill","label-fill-opacity","label-stroke","label-stroke-width","label-stroke-opacity","label-font","label-textAlign"]},defineStyleFromProperties:function(e){var t=null,r={},o=null;if(e.get("marker-color")||e.get("marker-size")||e.get("marker-symbol")){(o={}).src=this.DEFAULT_ICON.src,o.anchor=this.DEFAULT_ICON.anchor;var i=e.get("marker-symbol");i&&-1!==i.search("data:image/png;base64")&&(o.src=i);var g=e.get("marker-color");n.A.isHex(g)&&(o.color=n.A.hexToRgba(g,1));var a=e.get("marker-size");if(a)switch(a){case"small":o.scale=.5;break;case"medium":o.scale=1;break;case"large":o.scale=1.5;break;default:o.scale=this.DEFAULT_ICON.scale}}var A=null;(e.get("stroke")||e.get("stroke-opacity")||e.get("stroke-width"))&&((A={}).color=n.A.hexToRgba(e.get("stroke"),+e.get("stroke-opacity")||this.DEFAULT_STROKE.opacity),A.width=+e.get("stroke-width")||this.DEFAULT_STROKE.width);var s=null;(e.get("fill")||e.get("fill-opacity"))&&((s={}).color=n.A.hexToRgba(e.get("fill"),+e.get("fill-opacity")||this.DEFAULT_FILL.opacity));var C=null,u=null,f=""!==e.get("name");f&&((e.get("label-fill")||e.get("label-fill-opacity"))&&((u={}).color=n.A.hexToRgba(e.get("label-fill"),+e.get("label-fill-opacity")||this.DEFAULT_TEXT.fill.opacity)),(e.get("label-stroke")||e.get("label-stroke-opacity")||e.get("label-stroke-width"))&&((C={}).color=n.A.hexToRgba(e.get("label-stroke"),+e.get("label-stroke-opacity")||this.DEFAULT_TEXT.stroke.opacity),C.width=+e.get("label-stroke-width")||this.DEFAULT_TEXT.stroke.width));var h=e.get("circle-radius")||this.DEFAULT_CIRCLE.radius,y=null;(e.get("circle-stroke")||e.get("circle-stroke-opacity")||e.get("circle-stroke-width"))&&((y={}).color=n.A.hexToRgba(e.get("circle-stroke"),+e.get("circle-stroke-opacity")||this.DEFAULT_CIRCLE.stroke.opacity),y.width=+e.get("circle-stroke-width")||this.DEFAULT_CIRCLE.stroke.width);var v=null;if((e.get("circle-fill")||e.get("circle-fill-opacity"))&&((v={}).color=n.A.hexToRgba(e.get("circle-fill"),+e.get("circle-fill-opacity")||this.DEFAULT_CIRCLE.fill.opacity)),e.getGeometry()){var w=e.getGeometry().getType();switch(w){case"Circle":case"Point":case"MultiPoint":var N=!1,T={};if(y&&(T.stroke=new(d())(y)),v&&(T.fill=new(p())(v)),0!==Object.keys(T).length&&(N=!0,T.radius=+h,r.image=new(l())(T)),o&&(r.image=new(c())(o)),f){var S={};if(C&&(S.stroke=new(d())(C)),u&&(S.fill=new(p())(u)),0!==Object.keys(S).length)S.text=e.get("name"),S.textAlign=e.get("label-textAlign")||this.DEFAULT_TEXT.textAlign,S.font=e.get("label-font")||this.DEFAULT_TEXT.font,r.text=new(m())(Object.assign({},this.DEFAULT_TEXT,S));else if(o||N){var D=new(m())(Object.assign({},this.DEFAULT_TEXT,{fill:new(p())(this.DEFAULT_TEXT.fill),stroke:new(d())(this.DEFAULT_TEXT.stroke)}));if(D){var R=D.clone();R.setText(e.get("name")),r.text=R}}}break;case"Polygon":case"MultiPolygon":A&&(r.stroke=new(d())(A)),s&&(r.fill=new(p())(s));break;case"LineString":case"MultiLineString":if(A&&(r.stroke=new(d())(A)),this.APPLY_CONVERT_GEOM_GPX&&s){var O=e.get("type");if(O&&("Polygon"===O||"MultiPolygon"===O)){r.fill=new(p())(s);var x=e.clone(),M="LineString"===w?b():E();e.setGeometry(new M([x.getGeometry().getCoordinates()]))}}}}return 0!==Object.keys(r).length&&(t=new(I())(r)),t},defineStyleFunctionByDefault:function(e){if(!e)return[];if(0===Object.keys(e).length)return[];return function(t,r){if(t.getGeometry()){var n=null;switch(t.getGeometry().getType()){case"Point":case"MultiPoint":var o={};if(e.getImage()&&(o.image=e.getImage()),e.getText()&&t.get("name")){var i=e.getText().clone();i.setText(t.get("name")),o.text=i}n=new(I())(o);break;case"Circle":var g={},a={};if(e.getFill()&&(a.fill=e.getFill()),e.getStroke()&&(a.stroke=e.getStroke()),e.getText()&&t.get("name")){var A=e.getText().clone();A.setText(t.get("name")),g.text=A}0!==Object.keys(a).length&&(a.radius=3,g.image=new(l())(a)),n=new(I())(g);break;case"Polygon":case"MultiPolygon":var s={};e.getFill()&&(s.fill=e.getFill()),e.getStroke()&&(s.stroke=e.getStroke()),n=new(I())(s);break;case"LineString":case"LinearRing":case"MultiLineString":var C={};e.getStroke()&&(C.stroke=e.getStroke()),n=new(I())(C)}return[n]}}},definePropertiesFromStyleByType:function(e){if(e.getGeometry())switch(e.getGeometry().getType()){case"Point":case"MultiPoint":e.setPropertyMarker(),e.setPropertyLabel();break;case"LineString":case"MultiLineString":e.setPropertyStroke();break;case"Polygon":case"MultiPolygon":e.setPropertyStroke(),e.setPropertyFill()}},definePropertiesFromStyle:function(e){var t=e.getStyle()||e.getStyleFunction();if(t){if("function"==typeof t){var r=t.call(this,e,0);if(!r||0===r.length)return;t=Array.isArray(r)?r[0]:r,e.setStyle(t)}this.definePropertiesFromStyleByType(e)}},defineTagFromStyle:function(e,t){return w.trace("todo..."),null}};const T=N},3920:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});const n={hex:function(e){if(e>255)throw new Error("'"+e+"'' is greater than 255(0xff);");return("0"+Number(e).toString(16)).slice(-2)},num:function(e){return parseInt(e,16)},arrayToRgba:function(e){if(!Array.isArray(e))throw new Error("Not an array !");var t=e[0],r=e[1],n=e[2],o=e[3]||1;return"rgba("+t+", "+r+", "+n+", "+parseFloat(o)+")"},arrayToHex:function(e){if(!Array.isArray(e))throw new Error("Not an array !");var t=e[0],r=e[1],n=e[2],o=e[3],i=[this.hex(t),this.hex(r),this.hex(n)],g={};return g.hex="#"+i.join(""),o&&(g.opacity=parseFloat(o)),g},rgbaToHex:function(e){var t=/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(0?.?\d+)\s*)?\)/.exec(e);if(!t)throw new Error("Invalid format: "+e);var r=t[1],n=t[2],o=t[3],i=t[4],g=[this.hex(r),this.hex(n),this.hex(o)],a={};return a.hex="#"+g.join(""),i&&(a.opacity=parseFloat(i)),a},hexToRgba:function(e,t){if(!e)throw new Error("Invalid format");e=e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,(function(e,t,r,n){return t+t+r+r+n+n}));var r=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return(r=r?{r:parseInt(r[1],16),g:parseInt(r[2],16),b:parseInt(r[3],16)}:null)?"rgba("+r.r+", "+r.g+", "+r.b+", "+t+")":null},isHex:function(e){if(!e)return!1;if("#"!==e.charAt(0))return!1;return!!/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e)},isRGB:function(e){if(!e)return!1;return!!/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(0?.?\d+)\s*)?\)/.exec(e)}}},2536:(e,t,r)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}r.d(t,{A:()=>o});const o={detectSupport:function(){var e=!0,t=window.navigator.userAgent.toLowerCase();return-1===t.indexOf("iphone")&&-1===t.indexOf("ipod")&&-1===t.indexOf("ipad")&&-1===t.indexOf("android")&&-1===t.indexOf("mobile")&&-1===t.indexOf("blackberry")&&-1===t.indexOf("tablet")&&-1===t.indexOf("phone")&&-1===t.indexOf("touch")||(e=!1),-1===t.indexOf("msie")&&-1===t.indexOf("trident")||(e=!0),e},assign:function(e,t){for(var r in e=e||{},t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e},mergeParams:function(e,t,r){if(void 0!==e&&void 0!==t)for(var o in void 0===r&&(r=!0),t)t.hasOwnProperty(o)&&("object"===n(t[o])?e.hasOwnProperty(o)?this.mergeParams(e[o],t[o],r):e[o]=t[o]:e.hasOwnProperty(o)?r&&(e[o]=t[o]):e[o]=t[o])}}},5844:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(3065),o={getLogger:function(e){if(void 0===t)var t={env:{VERBOSE:!1}};t.env.VERBOSE?n.enableAll():n.disableAll();var r=e||"default";return n.getLogger(r)},disableAll:function(){var e=n.getLoggers();for(var t in e){if(Object.hasOwnProperty.call(e,t))e[t].disableAll()}},enableAll:function(){var e=n.getLoggers();for(var t in e){if(Object.hasOwnProperty.call(e,t))e[t].enableAll()}}};const i=o;window.Gp&&(window.Gp.Logger=o)},9313:(e,t,r)=>{"use strict";function n(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);rg});var i=["GPoverviewMap","GPfullScreen"];const g=function(e,t){var r=function(e,t){var r=[].concat(i,[t]),o=[];if(e&&e.includes("left")){var g=document.getElementById("position-container-bottom-left"),a=document.getElementById("position-container-top-left");o=[].concat(n(g.children),n(a.children))}if(e&&e.includes("right")){var A=document.getElementById("position-container-bottom-right"),I=document.getElementById("position-container-top-right");o=[].concat(n(A.children),n(I.children))}return o.filter((function(e){var t=e.id.match(/(\w+)-[0-9]+/)[1],n=r.includes(t);if("true"===e.getElementsByTagName("button")[0].getAttribute("aria-pressed")&&!n)return e}))}(e,t);r.length>0&&r[0].getElementsByTagName("button")[0].click()}},9335:(e,t,r)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}r.d(t,{A:()=>i});var o=r(5844).A.getLogger("parser");const i={parse:function(e){var t=null,i="undefined"!=typeof window?window:null;"object"===("undefined"==typeof exports?"undefined":n(exports))&&null===window?t=(new(0,r(8978).S4)).parseFromString(e,"text/xml"):i.DOMParser?t=(new i.DOMParser).parseFromString(e,"text/xml"):i.ActiveXObject?((t=new i.ActiveXObject("Microsoft.XMLDOM")).async=!1,t.loadXML(e)):o.log("Incompatible environment for DOM Parser !");var g=t.querySelector("parsererror");return g?(console.error(g),null):(o.trace(t),t)},toString:function(e){var t=(new XMLSerializer).serializeToString(e);return o.trace(t),t},format:function(e){for(var t="",r=(e=e.replace(/(>)\s*(<)(\/*)/g,"$1\n$2$3").replace(/ *(.*) +\n/g,"$1\n").replace(/(<.+>)(.+\n)/g,"$1\n$2")).split("\n"),n=0,i="other",g={"single->single":0,"single->closing":-1,"single->opening":0,"single->other":0,"closing->single":0,"closing->closing":-1,"closing->opening":0,"closing->other":0,"opening->single":1,"opening->closing":0,"opening->opening":1,"opening->other":1,"other->single":0,"other->closing":-1,"other->opening":0,"other->other":0},a=0;a/)),s=Boolean(A.match(/<\/.+>/)),l=Boolean(A.match(/<[^!].*>/)),C=I?"single":s?"closing":l?"opening":"other",c=i+"->"+C;i=C;var u="";n+=g[c];for(var p=0;pclosing"===c?t=t.substr(0,t.length-1)+A+"\n":t+=u+A+"\n"}return o.trace(t),t}}},6736:(e,t,r)=>{"use strict";var n;r.d(t,{A:()=>o});const o={generate:(n=Math.floor(Date.now()),function(){return n++}),name:function(e){var t=null,r=e.lastIndexOf("-");return t=-1===r?e:e.substring(0,r),t},index:function(e){var t=null,r=this.name(e),n=r.lastIndexOf("_");return-1!==n&&(t=r.substring(n+1)),t},uuid:function(e){var t=null,r=e.lastIndexOf("-");return-1!==r&&(t=parseInt(e.substring(r+1),10)),t}}},3065:function(e,t,r){var n,o;!function(){"use strict";n=function(){var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"],o={},i=null;function g(e,t){var r=e[t];if("function"==typeof r.bind)return r.bind(e);try{return Function.prototype.bind.call(r,e)}catch(t){return function(){return Function.prototype.apply.apply(r,[e,arguments])}}}function a(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function A(n){return"debug"===n&&(n="log"),typeof console!==t&&("trace"===n&&r?a:void 0!==console[n]?g(console,n):void 0!==console.log?g(console,"log"):e)}function I(){for(var r=this.getLevel(),o=0;o=0&&t<=s.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?C+=":"+e:"symbol"==typeof e&&(C=void 0),s.name=e,s.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},s.methodFactory=r||l,s.getLevel=function(){return null!=A?A:null!=a?a:g},s.setLevel=function(e,t){return A=f(e),!1!==t&&c(A),I.call(s)},s.setDefaultLevel=function(e){a=f(e),u()||s.setLevel(e,!1)},s.resetLevel=function(){A=null,p(),I.call(s)},s.enableAll=function(e){s.setLevel(s.levels.TRACE,e)},s.disableAll=function(e){s.setLevel(s.levels.SILENT,e)},s.rebuild=function(){if(i!==s&&(g=f(i.getLevel())),I.call(s),i===s)for(var e in o)o[e].rebuild()},g=f(i?i.getLevel():"WARN");var d=u();null!=d&&(A=f(d)),I.call(s)}(i=new C).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=o[e];return t||(t=o[e]=new C(e,i.methodFactory)),t};var c=typeof window!==t?window.log:void 0;return i.noConflict=function(){return typeof window!==t&&window.log===i&&(window.log=c),i},i.getLoggers=function(){return o},i.default=i,i},void 0===(o="function"==typeof n?n.call(t,r,t,e):n)||(e.exports=o)}()},9972:e=>{"use strict";e.exports=ol.Feature},7392:e=>{"use strict";e.exports=ol.control.Control},7304:e=>{"use strict";e.exports=ol.format.GeoJSON},2999:e=>{"use strict";e.exports=ol.style},2423:e=>{"use strict";e.exports=ol.style.Circle},7158:e=>{"use strict";e.exports=ol.style.Fill},86:e=>{"use strict";e.exports=ol.style.Icon},7195:e=>{"use strict";e.exports=ol.style.Stroke},5576:e=>{"use strict";e.exports=ol.style.Style},9464:e=>{"use strict";e.exports=ol.style.Text}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n].call(i.exports,i,i.exports,r),i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var n={};(()=>{"use strict";r.d(n,{default:()=>y});var e=r(3391),t=r(7392),o=r.n(t),i=r(6736),g=r(5844),a=r(5771),A=r(9632),I=r(7255);const s={_addUID:function(e){return this.uid?e+"-"+this.uid:e}};function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function C(e,t){for(var r=0;r\n '));this.button=n.firstChild,this.button&&this.button.addEventListener("click",(function(t){return e.onClickButtonExport(t)})),r.appendChild(n.firstChild);var o=this.stringToHTML('\n
    \n \n \n \n
    \n '));if(this.menu=o.firstChild,this.menu){if(this.options.menu){var i=this.menu.className;this.menu.className=i.replace(this.menuClassHidden,"")}this.menu.querySelectorAll('input[type=radio][name="format"]').forEach((function(t){t.id.toUpperCase().includes(e.options.format.toUpperCase())&&(t.checked=!0),t.addEventListener("change",(function(t){e.setFormat(t.target.value)}))}))}r.appendChild(o.firstChild),this.container=r}},{key:"stringToHTML",value:function(e){if(function(){if(!window.DOMParser)return!1;var e=new DOMParser;try{e.parseFromString("x","text/html")}catch(e){return!1}return!0}())return(new DOMParser).parseFromString(e,"text/html").body;var t=document.createElement("div");return t.innerHTML=e,t}},{key:"isPluggableControl",value:function(){return!(!this.options.control||"function"!=typeof this.options.control.getContainer||"function"!=typeof this.options.control.getLayer)}},{key:"exportFeatures",value:function(e,t,r){var n=this,o=null;if(!e)return h.warn("Impossible to export : no layer is hosting features."),o;if(!e.getSource()||!e.getSource().getFeatures()||!e.getSource().getFeatures().length)return h.warn("Impossible to export : no features found."),o;e.getSource().getFeatures().forEach((function(e){!e.getStyle()&&n.options.control&&"function"==typeof n.options.control.getStyle&&e.setStyle(n.options.control.getStyle())}));var i={defaultStyle:r};t&&(i.extensions={"geoportail:compute":t});var g=null;switch(this.options.format.toUpperCase()){case"KML":i.writeStyles=!0,i.showPointNames=!0,g=new a.A(i);break;case"GPX":g=new I.default(i);break;case"GEOJSON":g=new A.A(i)}if(!g)return h.warn("Impossible to export : format unknown !?"),o;var s=e.getSource().getProjection(),l=this.getMap();l&&(s=s||l.getView().getProjection());var C=e.getSource().getFeatures();return o=g.writeFeatures(C,{dataProjection:"EPSG:4326",featureProjection:s||"EPSG:3857"})}},{key:"onClickButtonExport",value:function(e){this.isPluggableControl()||h.warn("Componant not pluggable with the control !");var t=this.options.control&&void 0!==this.options.control.getLayer?this.options.control.getData():this.options.layer,r=this.options.control&&void 0!==this.options.control.getData?this.options.control.getData():{},n=this.options.control&&void 0!==this.options.control.getStyle?this.options.control.getStyle():{},o=this.exportFeatures(t,r,n);if(o&&"null"!==o)if(this.dispatchEvent({type:"export:compute",content:o}),this.options.onExport&&"function"==typeof this.options.onExport)this.options.onExport(o);else{var i=document.createElement("a");if(i.setAttribute("href","data:"+this.mimeType+";charset=utf-8,"+encodeURIComponent(o)),i.setAttribute("download",this.options.name+this.extension),document.createEvent){var g=document.createEvent("MouseEvents");g.initEvent("click",!0,!0),i.dispatchEvent(g)}else i.click()}}},{key:"getContainer",value:function(){return this.container}},{key:"setControl",value:function(e){this.options.control=e}},{key:"setTarget",value:function(e){this.options.target=e}},{key:"setFormat",value:function(e){switch(this.options.format=e.toUpperCase(),this.options.format){case"KML":this.extension=".kml",this.mimeType="application/vnd.google-earth.kml+xml";break;case"GPX":this.extension=".gpx",this.mimeType="application/gpx+xml";break;case"GEOJSON":this.extension=".geojson",this.mimeType="application/geo+json";break;default:this.options.format="GEOJSON",this.extension=".geojson",this.mimeType="application/geo+json"}}},{key:"setName",value:function(e){this.options.name=e}},{key:"setTitle",value:function(e){this.options.title=e,this.button&&(this.button.value=this.options.menu?this.icon+e:e)}},{key:"setMenu",value:function(e){var t=this;if(this.options.menu=e,this.button&&(this.button.value=this.options.menu?this.icon+this.options.title:this.options.title),this.menu&&this.options.menu){var r=this.menu.className;this.menu.className=r.replace(this.menuClassHidden,""),this.menu.querySelectorAll('input[type=radio][name="format"]').forEach((function(e){e.id.toUpperCase().includes(t.options.format.toUpperCase())&&(e.checked=!0)}))}}},{key:"setLayer",value:function(e){this.options.layer=e}}],n&&C(r.prototype,n),o&&C(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(o());Object.assign(m.prototype,s),Object.assign(m.prototype,e.A);const y=m;window.ol&&window.ol.control&&(window.ol.control.Export=m)})(),GpfExtOlExport=n.default})(); //# sourceMappingURL=GpfExtOlExport.js.map \ No newline at end of file diff --git a/dist/modules/GpfExtOlFormats.js b/dist/modules/GpfExtOlFormats.js index 7462d694..1b93698d 100644 --- a/dist/modules/GpfExtOlFormats.js +++ b/dist/modules/GpfExtOlFormats.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var e={4582:(e,t)=>{"use strict";function r(e,t){return void 0===t&&(t=Object),t&&"function"==typeof t.getOwnPropertyDescriptors&&(e=t.create(null,t.getOwnPropertyDescriptors(e))),t&&"function"==typeof t.freeze?t.freeze(e):e}function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var o=r({allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,formnovalidate:!0,hidden:!0,ismap:!0,itemscope:!0,loop:!0,multiple:!0,muted:!0,nomodule:!0,novalidate:!0,open:!0,playsinline:!0,readonly:!0,required:!0,reversed:!0,selected:!0});var g=r({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});var i=r({script:!1,style:!1,textarea:!0,title:!0});function a(e){return e===A.HTML}var A=r({HTML:"text/html",XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),I=Object.keys(A).map((function(e){return A[e]}));var C=r({HTML:"http://www.w3.org/1999/xhtml",SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});t.assign=function(e,t){if(null===e||"object"!=typeof e)throw new TypeError("target is not an object");for(var r in t)n(t,r)&&(e[r]=t[r]);return e},t.find=function(e,t,r){if(void 0===r&&(r=Array.prototype),e&&"function"==typeof r.find)return r.find.call(e,t);for(var o=0;o-1},t.MIME_TYPE=A,t.NAMESPACE=C},5752:(e,t,r)=>{"use strict";var n=r(4582),o=r(4722),g=r(2983),i=r(6559),a=r(4466),A=o.DOMImplementation,I=n.hasDefaultHTMLNamespace,C=n.isHTMLMimeType,l=n.isValidMimeType,s=n.MIME_TYPE,c=n.NAMESPACE,u=g.ParseError,p=a.XMLReader;function f(e){return e.replace(/\r[\n\u0085]/g,"\n").replace(/[\r\u0085\u2028]/g,"\n")}function d(e){if(e=e||{locator:!0},this.assign=e.assign||n.assign,this.domHandler=e.domHandler||h,this.onError=e.onError||e.errorHandler,e.errorHandler&&"function"!=typeof e.errorHandler)throw new TypeError("errorHandler object is no longer supported, switch to onError!");e.errorHandler&&e.errorHandler("warning","The `errorHandler` option has been deprecated, use `onError` instead!",this),this.normalizeLineEndings=e.normalizeLineEndings||f,this.locator=!!e.locator,this.xmlns=this.assign(Object.create(null),e.xmlns)}function h(e){var t=e||{};this.mimeType=t.mimeType||s.XML_APPLICATION,this.defaultNamespace=t.defaultNamespace||null,this.cdata=!1,this.currentElement=void 0,this.doc=void 0,this.locator=void 0,this.onError=t.onError}function m(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function y(e,t,r){return"string"==typeof e?e.substr(t,r):e.length>=t+r||t?new java.lang.String(e,t,r)+"":e}function b(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}d.prototype.parseFromString=function(e,t){if(!l(t))throw new TypeError('DOMParser.parseFromString: the provided mimeType "'+t+'" is not valid.');var r=this.assign(Object.create(null),this.xmlns),o=i.XML_ENTITIES,g=r[""]||null;I(t)?(o=i.HTML_ENTITIES,g=c.HTML):t===s.XML_SVG_IMAGE&&(g=c.SVG),r[""]=g,r.xml=r.xml||c.XML;var a=new this.domHandler({mimeType:t,defaultNamespace:g,onError:this.onError}),A=this.locator?{}:void 0;this.locator&&a.setDocumentLocator(A);var C=new p;return C.errorHandler=a,C.domBuilder=a,!n.isHTMLMimeType(t)&&"string"!=typeof e&&C.errorHandler.fatalError("source is not a string"),C.parse(this.normalizeLineEndings(String(e)),r,o),a.doc.documentElement||C.errorHandler.fatalError("missing root element"),a.doc},h.prototype={startDocument:function(){var e=new A;this.doc=C(this.mimeType)?e.createHTMLDocument(!1):e.createDocument(this.defaultNamespace,"")},startElement:function(e,t,r,n){var o=this.doc,g=o.createElementNS(e,r||t),i=n.length;b(this,g),this.currentElement=g,this.locator&&m(this.locator,g);for(var a=0;a{"use strict";var n=r(4582),o=n.find,g=n.hasDefaultHTMLNamespace,i=n.hasOwn,a=n.isHTMLMimeType,A=n.isHTMLRawTextElement,I=n.isHTMLVoidElement,C=n.MIME_TYPE,l=n.NAMESPACE,s=Symbol(),c=r(2983),u=c.DOMException,p=c.DOMExceptionName,f=r(2763);function d(e){if(e!==s)throw new TypeError("Illegal constructor")}function h(e){return""!==e}function m(e,t){return i(e,t)||(e[t]=!0),e}function y(e){if(!e)return[];var t=function(e){return e?e.split(/[\t\n\f\r ]+/).filter(h):[]}(e);return Object.keys(t.reduce(m,{}))}function b(e){if(!f.QName_exact.test(e))throw new u(u.INVALID_CHARACTER_ERR,'invalid character in qualified name "'+e+'"')}function E(e,t){b(t),e=e||null;var r=null,o=t;if(t.indexOf(":")>=0){var g=t.split(":");r=g[0],o=g[1]}if(null!==r&&null===e)throw new u(u.NAMESPACE_ERR,"prefix is non-null and namespace is null");if("xml"===r&&e!==n.NAMESPACE.XML)throw new u(u.NAMESPACE_ERR,'prefix is "xml" and namespace is not the XML namespace');if(("xmlns"===r||"xmlns"===t)&&e!==n.NAMESPACE.XMLNS)throw new u(u.NAMESPACE_ERR,'either qualifiedName or prefix is "xmlns" and namespace is not the XMLNS namespace');if(e===n.NAMESPACE.XMLNS&&"xmlns"!==r&&"xmlns"!==t)throw new u(u.NAMESPACE_ERR,'namespace is the XMLNS namespace and neither qualifiedName nor prefix is "xmlns"');return[e,r,o]}function v(e,t){for(var r in e)i(e,r)&&(t[r]=e[r])}function w(e,t){var r=e.prototype;if(!(r instanceof t)){function n(){}n.prototype=t.prototype,v(r,n=new n),e.prototype=r=n}r.constructor!=e&&("function"!=typeof e&&console.error("unknown Class:"+e),r.constructor=e)}var N={},T=N.ELEMENT_NODE=1,S=N.ATTRIBUTE_NODE=2,D=N.TEXT_NODE=3,R=N.CDATA_SECTION_NODE=4,O=N.ENTITY_REFERENCE_NODE=5,x=N.ENTITY_NODE=6,M=N.PROCESSING_INSTRUCTION_NODE=7,L=N.COMMENT_NODE=8,k=N.DOCUMENT_NODE=9,P=N.DOCUMENT_TYPE_NODE=10,U=N.DOCUMENT_FRAGMENT_NODE=11,G=N.NOTATION_NODE=12,F=n.freeze({DOCUMENT_POSITION_DISCONNECTED:1,DOCUMENT_POSITION_PRECEDING:2,DOCUMENT_POSITION_FOLLOWING:4,DOCUMENT_POSITION_CONTAINS:8,DOCUMENT_POSITION_CONTAINED_BY:16,DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:32});function B(e){for(var t=[];e.parentNode||e.ownerElement;)e=e.parentNode||e.ownerElement,t.unshift(e);return t}function H(e,t){if(t.length=0){for(var o=t.length-1;n<=o;)t[n]=t[++n];if(t.length=o,e){var g=e.ownerDocument;g&&ee(g,e,r),r.ownerElement=null}}}function Q(){}function K(e){d(e)}function J(e){return("<"==e?"<":">"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function _(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(_(e,t))return!0}while(e=e.nextSibling)}function $(e,t){d(e);var r=t||{};this.ownerDocument=this,this.contentType=r.contentType||C.XML_APPLICATION,this.type=a(this.contentType)?"html":"xml"}function ee(e,t,r,n){e&&e._inc++,r.namespaceURI===l.XMLNS&&delete t._nsMap[r.prefix?r.localName:""]}function te(e,t,r){if(e&&e._inc){e._inc++;var n=t.childNodes;if(r&&!r.nextSibling)n[n.length++]=r;else{for(var o=t.firstChild,g=0;o;)n[g++]=o,o=o.nextSibling;n.length=g,delete n[n.length]}}}function re(e,t){if(e!==t.parentNode)throw new u(u.NOT_FOUND_ERR,"child's parent is not parent");var r=t.previousSibling,n=t.nextSibling;return r?r.nextSibling=n:e.firstChild=n,n?n.previousSibling=r:e.lastChild=r,te(e.ownerDocument,e),t.parentNode=null,t.previousSibling=null,t.nextSibling=null,t}function ne(e){return e&&e.nodeType===K.DOCUMENT_TYPE_NODE}function oe(e){return e&&e.nodeType===K.ELEMENT_NODE}function ge(e){return e&&e.nodeType===K.TEXT_NODE}function ie(e,t){var r=e.childNodes||[];if(o(r,oe)||ne(t))return!1;var n=o(r,ne);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function ae(e,t){var r=e.childNodes||[];if(o(r,(function(e){return oe(e)&&e!==t})))return!1;var n=o(r,ne);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function Ae(e,t,r){if(!function(e){return e&&(e.nodeType===K.DOCUMENT_NODE||e.nodeType===K.DOCUMENT_FRAGMENT_NODE||e.nodeType===K.ELEMENT_NODE)}(e))throw new u(u.HIERARCHY_REQUEST_ERR,"Unexpected parent node type "+e.nodeType);if(r&&r.parentNode!==e)throw new u(u.NOT_FOUND_ERR,"child not in parent");if(!function(e){return e&&(e.nodeType===K.CDATA_SECTION_NODE||e.nodeType===K.COMMENT_NODE||e.nodeType===K.DOCUMENT_FRAGMENT_NODE||e.nodeType===K.DOCUMENT_TYPE_NODE||e.nodeType===K.ELEMENT_NODE||e.nodeType===K.PROCESSING_INSTRUCTION_NODE||e.nodeType===K.TEXT_NODE)}(t)||ne(t)&&e.nodeType!==K.DOCUMENT_NODE)throw new u(u.HIERARCHY_REQUEST_ERR,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function Ie(e,t,r){var n=e.childNodes||[],g=t.childNodes||[];if(t.nodeType===K.DOCUMENT_FRAGMENT_NODE){var i=g.filter(oe);if(i.length>1||o(g,ge))throw new u(u.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===i.length&&!ie(e,r))throw new u(u.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!ie(e,r))throw new u(u.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(ne(t)){if(o(n,ne))throw new u(u.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var a=o(n,oe);if(r&&n.indexOf(a)1||o(g,ge))throw new u(u.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===i.length&&!ae(e,r))throw new u(u.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!ae(e,r))throw new u(u.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(ne(t)){function A(e){return ne(e)&&e!==r}if(o(n,A))throw new u(u.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var a=o(n,oe);if(r&&n.indexOf(a)=0;p--){if(""===(d=n[p]).prefix&&d.namespace===e.namespaceURI){c=d.namespace;break}}if(c!==e.namespaceURI)for(p=n.length-1;p>=0;p--){var d;if((d=n[p]).namespace===e.namespaceURI){d.prefix&&(s=d.prefix+":"+C);break}}}t.push("<",s);for(var h=0;h");else{if(t.push(">"),o&&A(C))for(;a;)a.data?t.push(a.data):De(a,t,r,n.slice()),a=a.nextSibling;else for(;a;)De(a,t,r,n.slice()),a=a.nextSibling;t.push("")}return;case k:case U:for(a=e.firstChild;a;)De(a,t,r,n.slice()),a=a.nextSibling;return;case S:return Se(t,e.name,e.value);case D:return t.push(e.data.replace(/[<&>]/g,J));case R:return t.push(f.CDATA_START,e.data,f.CDATA_END);case L:return t.push(f.COMMENT_START,e.data,f.COMMENT_END);case P:var v=e.publicId,w=e.systemId;return t.push(f.DOCTYPE_DECL_START," ",e.name),v?(t.push(" ",f.PUBLIC," ",v),w&&"."!==w&&t.push(" ",w)):w&&"."!==w&&t.push(" ",f.SYSTEM," ",w),e.internalSubset&&t.push(" [",e.internalSubset,"]"),void t.push(">");case M:return t.push("");case O:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function Re(e,t,r){var n;switch(t.nodeType){case T:(n=t.cloneNode(!1)).ownerDocument=e;case U:break;case S:r=!0}if(n||(n=t.cloneNode(!1)),n.ownerDocument=e,n.parentNode=null,r)for(var o=t.firstChild;o;)n.appendChild(Re(e,o,r)),o=o.nextSibling;return n}function Oe(e,t,r){var n=new t.constructor(s);for(var o in t)if(i(t,o)){var g=t[o];"object"!=typeof g&&g!=n[o]&&(n[o]=g)}switch(t.childNodes&&(n.childNodes=new V),n.ownerDocument=e,n.nodeType){case T:var a=t.attributes,A=n.attributes=new Z,I=a.length;A._ownerElement=n;for(var C=0;C=0&&eY(t.ownerDocument)?F.DOCUMENT_POSITION_FOLLOWING:F.DOCUMENT_POSITION_PRECEDING);var a=B(t),A=B(r);if(!n&&A.indexOf(t)>=0||o&&t===r)return F.DOCUMENT_POSITION_CONTAINS+F.DOCUMENT_POSITION_PRECEDING;if(!o&&a.indexOf(r)>=0||n&&t===r)return F.DOCUMENT_POSITION_CONTAINED_BY+F.DOCUMENT_POSITION_FOLLOWING;var I=H(A,a);for(var C in I.childNodes){var l=I.childNodes[C];if(l===r)return F.DOCUMENT_POSITION_FOLLOWING;if(l===t)return F.DOCUMENT_POSITION_PRECEDING;if(A.indexOf(l)>=0)return F.DOCUMENT_POSITION_FOLLOWING;if(a.indexOf(l)>=0)return F.DOCUMENT_POSITION_PRECEDING}return 0}},v(N,K),v(N,K.prototype),v(F,K),v(F,K.prototype),$.prototype={implementation:null,nodeName:"#document",nodeType:k,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType===U){for(var r=e.firstChild;r;){var n=r.nextSibling;this.insertBefore(r,t),r=n}return e}return le(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===T&&(this.documentElement=e),e},removeChild:function(e){var t=re(this,e);return t===this.documentElement&&(this.documentElement=null),t},replaceChild:function(e,t){le(this,e,t,Ce),e.ownerDocument=this,t&&this.removeChild(t),oe(e)&&(this.documentElement=e)},importNode:function(e,t){return Re(this,e,t)},getElementById:function(e){var t=null;return _(this.documentElement,(function(r){if(r.nodeType==T&&r.getAttribute("id")==e)return t=r,!0})),t},createElement:function(e){var t=new se(s);return t.ownerDocument=this,"html"===this.type&&(e=e.toLowerCase()),g(this.contentType)&&(t.namespaceURI=l.HTML),t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new V,(t.attributes=new Z)._ownerElement=t,t},createDocumentFragment:function(){var e=new Ee(s);return e.ownerDocument=this,e.childNodes=new V,e},createTextNode:function(e){var t=new pe(s);return t.ownerDocument=this,t.childNodes=new V,t.appendData(e),t},createComment:function(e){var t=new fe(s);return t.ownerDocument=this,t.childNodes=new V,t.appendData(e),t},createCDATASection:function(e){var t=new de(s);return t.ownerDocument=this,t.childNodes=new V,t.appendData(e),t},createProcessingInstruction:function(e,t){var r=new ve(s);return r.ownerDocument=this,r.childNodes=new V,r.nodeName=r.target=e,r.nodeValue=r.data=t,r},createAttribute:function(e){if(!f.QName_exact.test(e))throw new u(u.INVALID_CHARACTER_ERR,'invalid character in name "'+e+'"');return"html"===this.type&&(e=e.toLowerCase()),this._createAttribute(e)},_createAttribute:function(e){var t=new ce(s);return t.ownerDocument=this,t.childNodes=new V,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){if(!f.Name.test(e))throw new u(u.INVALID_CHARACTER_ERR,'not a valid xml name "'+e+'"');if("html"===this.type)throw new u("document is an html document",p.NotSupportedError);var t=new be(s);return t.ownerDocument=this,t.childNodes=new V,t.nodeName=e,t},createElementNS:function(e,t){var r=E(e,t),n=new se(s),o=n.attributes=new Z;return n.childNodes=new V,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=r[0],n.prefix=r[1],n.localName=r[2],o._ownerElement=n,n},createAttributeNS:function(e,t){var r=E(e,t),n=new ce(s);return n.ownerDocument=this,n.childNodes=new V,n.nodeName=t,n.name=t,n.specified=!0,n.namespaceURI=r[0],n.prefix=r[1],n.localName=r[2],n}},w($,K),se.prototype={nodeType:T,attributes:null,getQualifiedName:function(){return this.prefix?this.prefix+":"+this.localName:this.localName},_isInHTMLDocumentAndNamespace:function(){return"html"===this.ownerDocument.type&&this.namespaceURI===l.HTML},hasAttribute:function(e){return!!this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t?t.value:null},getAttributeNode:function(e){return this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase()),this.attributes.getNamedItem(e)},setAttribute:function(e,t){this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase());var r=this.getAttributeNode(e);r?r.value=r.nodeValue=""+t:((r=this.ownerDocument._createAttribute(e)).value=r.nodeValue=""+t,this.setAttributeNode(r))},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);r&&this.removeAttributeNode(r)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);return r?r.value:null},setAttributeNS:function(e,t,r){var n=E(e,t)[2],o=this.getAttributeNodeNS(e,n);o?o.value=o.nodeValue=""+r:((o=this.ownerDocument.createAttributeNS(e,t)).value=o.nodeValue=""+r,this.setAttributeNode(o))},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByClassName:function(e){var t=y(e);return new z(this,(function(r){var n=[];return t.length>0&&_(r,(function(o){if(o!==r&&o.nodeType===T){var g=o.getAttribute("class");if(g){var i=e===g;if(!i){var a=y(g);i=t.every((A=a,function(e){return A&&-1!==A.indexOf(e)}))}i&&n.push(o)}}var A})),n}))},getElementsByTagName:function(e){var t="html"===(this.nodeType===k?this:this.ownerDocument).type,r=e.toLowerCase();return new z(this,(function(n){var o=[];return _(n,(function(g){g!==n&&g.nodeType===T&&(("*"===e||g.getQualifiedName()===(t&&g.namespaceURI===l.HTML?r:e))&&o.push(g))})),o}))},getElementsByTagNameNS:function(e,t){return new z(this,(function(r){var n=[];return _(r,(function(o){o===r||o.nodeType!==T||"*"!==e&&o.namespaceURI!==e||"*"!==t&&o.localName!=t||n.push(o)})),n}))}},$.prototype.getElementsByClassName=se.prototype.getElementsByClassName,$.prototype.getElementsByTagName=se.prototype.getElementsByTagName,$.prototype.getElementsByTagNameNS=se.prototype.getElementsByTagNameNS,w(se,K),ce.prototype.nodeType=S,w(ce,K),ue.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,r){r=this.data.substring(0,e)+r+this.data.substring(e+t),this.nodeValue=this.data=r,this.length=r.length}},w(ue,K),pe.prototype={nodeName:"#text",nodeType:D,splitText:function(e){var t=this.data,r=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var n=this.ownerDocument.createTextNode(r);return this.parentNode&&this.parentNode.insertBefore(n,this.nextSibling),n}},w(pe,ue),fe.prototype={nodeName:"#comment",nodeType:L},w(fe,ue),de.prototype={nodeName:"#cdata-section",nodeType:R},w(de,pe),he.prototype.nodeType=P,w(he,K),me.prototype.nodeType=G,w(me,K),ye.prototype.nodeType=x,w(ye,K),be.prototype.nodeType=O,w(be,K),Ee.prototype.nodeName="#document-fragment",Ee.prototype.nodeType=U,w(Ee,K),ve.prototype.nodeType=M,w(ve,ue),we.prototype.serializeToString=function(e,t){return Ne.call(e,t)},K.prototype.toString=Ne;try{if(Object.defineProperty){function Me(e){switch(e.nodeType){case T:case U:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(Me(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(z.prototype,"length",{get:function(){return j(this),this.$$length}}),Object.defineProperty(K.prototype,"textContent",{get:function(){return Me(this)},set:function(e){switch(this.nodeType){case T:case U:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),xe=function(e,t,r){e["$$"+t]=r}}}catch(Le){}t._updateLiveList=j,t.Attr=ce,t.CDATASection=de,t.CharacterData=ue,t.Comment=fe,t.Document=$,t.DocumentFragment=Ee,t.DocumentType=he,t.DOMImplementation=Q,t.Element=se,t.Entity=ye,t.EntityReference=be,t.LiveNodeList=z,t.NamedNodeMap=Z,t.Node=K,t.NodeList=V,t.Notation=me,t.Text=pe,t.ProcessingInstruction=ve,t.XMLSerializer=we},6559:(e,t,r)=>{"use strict";var n=r(4582).freeze;t.XML_ENTITIES=n({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),t.HTML_ENTITIES=n({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),t.entityMap=t.HTML_ENTITIES},2983:(e,t,r)=>{"use strict";function n(e,t){e.prototype=Object.create(Error.prototype,{constructor:{value:e},name:{value:e.name,enumerable:!0,writable:t}})}var o=r(4582).freeze({Error:"Error",IndexSizeError:"IndexSizeError",DomstringSizeError:"DomstringSizeError",HierarchyRequestError:"HierarchyRequestError",WrongDocumentError:"WrongDocumentError",InvalidCharacterError:"InvalidCharacterError",NoDataAllowedError:"NoDataAllowedError",NoModificationAllowedError:"NoModificationAllowedError",NotFoundError:"NotFoundError",NotSupportedError:"NotSupportedError",InUseAttributeError:"InUseAttributeError",InvalidStateError:"InvalidStateError",SyntaxError:"SyntaxError",InvalidModificationError:"InvalidModificationError",NamespaceError:"NamespaceError",InvalidAccessError:"InvalidAccessError",ValidationError:"ValidationError",TypeMismatchError:"TypeMismatchError",SecurityError:"SecurityError",NetworkError:"NetworkError",AbortError:"AbortError",URLMismatchError:"URLMismatchError",QuotaExceededError:"QuotaExceededError",TimeoutError:"TimeoutError",InvalidNodeTypeError:"InvalidNodeTypeError",DataCloneError:"DataCloneError",EncodingError:"EncodingError",NotReadableError:"NotReadableError",UnknownError:"UnknownError",ConstraintError:"ConstraintError",DataError:"DataError",TransactionInactiveError:"TransactionInactiveError",ReadOnlyError:"ReadOnlyError",VersionError:"VersionError",OperationError:"OperationError",NotAllowedError:"NotAllowedError",OptOutError:"OptOutError"}),g=Object.keys(o);function i(e){return"number"==typeof e&&e>=1&&e<=25}function a(e,t){var r;i(e)?(this.name=g[e],this.message=t||""):(this.message=e,this.name="string"==typeof(r=t)&&r.substring(r.length-o.Error.length)===o.Error?t:o.Error),Error.captureStackTrace&&Error.captureStackTrace(this,a)}n(a,!0),Object.defineProperties(a.prototype,{code:{enumerable:!0,get:function(){var e=g.indexOf(this.name);return i(e)?e:0}}});for(var A={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25},I=Object.entries(A),C=0;C{"use strict";function r(e){try{"function"!=typeof e&&(e=RegExp);var t=new e("𝌆","u").exec("𝌆");return!!t&&2===t[0].length}catch(e){}return!1}var n=r();function o(e){if("["!==e.source[0])throw new Error(e+" can not be used with chars");return e.source.slice(1,e.source.lastIndexOf("]"))}function g(e,t){if("["!==e.source[0])throw new Error("/"+e.source+"/ can not be used with chars_without");if(!t||"string"!=typeof t)throw new Error(JSON.stringify(t)+" is not a valid search");if(-1===e.source.indexOf(t))throw new Error('"'+t+'" is not is /'+e.source+"/");if("-"===t&&1!==e.source.indexOf(t))throw new Error('"'+t+'" is not at the first postion of /'+e.source+"/");return new RegExp(e.source.replace(t,""),n?"u":"")}function i(e){var t=this;return new RegExp(Array.prototype.slice.call(arguments).map((function(e){var r="string"==typeof e;if(r&&void 0===t&&"|"===e)throw new Error("use regg instead of reg to wrap expressions with `|`!");return r?e:e.source})).join(""),n?"mu":"m")}function a(e){if(0===arguments.length)throw new Error("no parameters provided");return i.apply(a,["(?:"].concat(Array.prototype.slice.call(arguments),[")"]))}var A=/[-\x09\x0A\x0D\x20-\x2C\x2E-\uD7FF\uE000-\uFFFD]/;n&&(A=i("[",o(A),"\\u{10000}-\\u{10FFFF}","]"));var I=/[\x20\x09\x0D\x0A]/,C=o(I),l=i(I,"+"),s=i(I,"*"),c=/[:_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;n&&(c=i("[",o(c),"\\u{10000}-\\u{10FFFF}","]"));var u=i("[",o(c),o(/[-.0-9\xB7]/),o(/[\u0300-\u036F\u203F-\u2040]/),"]"),p=i(c,u,"*"),f=i(u,"+"),d=i("&",p,";"),h=a(/&#[0-9]+;|&#x[0-9a-fA-F]+;/),m=a(d,"|",h),y=i("%",p,";"),b=a(i('"',a(/[^%&"]/,"|",y,"|",m),"*",'"'),"|",i("'",a(/[^%&']/,"|",y,"|",m),"*","'")),E=a('"',a(/[^<&"]/,"|",m),"*",'"',"|","'",a(/[^<&']/,"|",m),"*","'"),v=i(g(c,":"),g(u,":"),"*"),w=i(v,a(":",v),"?"),N=i("^",w,"$"),T=i("(",w,")"),S=a(/"[^"]*"|'[^']*'/),D=i(/^<\?/,"(",p,")",a(l,"(",A,"*?)"),"?",/\?>/),R=/[\x20\x0D\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/,O=a('"',R,'*"',"|","'",g(R,"'"),"*'"),x="\x3c!--",M=i(x,a(g(A,"-"),"|",i("-",g(A,"-"))),"*","--\x3e"),L="#PCDATA",k=a(i(/\(/,s,L,a(s,/\|/,s,w),"*",s,/\)\*/),"|",i(/\(/,s,L,s,/\)/)),P=a("EMPTY","|","ANY","|",k,"|",i(/\([^>]+\)/,/[?*+]?/)),U=i(""),G=i("NOTATION",l,/\(/,s,p,a(s,/\|/,s,p),"*",s,/\)/),F=i(/\(/,s,f,a(s,/\|/,s,f),"*",s,/\)/),B=a(G,"|",F),H=a(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/,"|",B),Y=a(/#REQUIRED|#IMPLIED/,"|",a(a("#FIXED",l),"?",E)),V=i(""),z="SYSTEM",j="PUBLIC",Z=a(a(z,l,S),"|",a(j,l,O,l,S)),q=i("^",a(a(z,l,"(?",S,")"),"|",a(j,l,"(?",O,")",l,"(?",S,")"))),X=a(l,"NDATA",l,p),W=""),K=a(b,"|",Z),J=a(Q,"|",i(W,l,"%",l,p,l,K,s,">")),_=i(j,l,O),$=i(""),ee=i(s,"=",s),te=/1[.]\d+/,re=i(l,"version",ee,a("'",te,"'","|",'"',te,'"')),ne=/[A-Za-z][-A-Za-z0-9._]*/,oe=i(/^<\?xml/,re,a(l,"encoding",ee,a('"',ne,'"',"|","'",ne,"'")),"?",a(l,"standalone",ee,a("'",a("yes","|","no"),"'","|",'"',a("yes","|","no"),'"')),"?",s,/\?>/),ge=i(A,"*?",/\]\]>/),ie=i(/",t.CDSect=ie,t.Char=A,t.Comment=M,t.COMMENT_START=x,t.COMMENT_END="--\x3e",t.DOCTYPE_DECL_START="{"use strict";var n=r(4582);n.assign,n.hasDefaultHTMLNamespace,n.isHTMLMimeType,n.isValidMimeType,n.MIME_TYPE,n.NAMESPACE;var o=r(2983);o.DOMException,o.DOMExceptionName,o.ExceptionCode,o.ParseError;var g=r(4722);g.Attr,g.CDATASection,g.CharacterData,g.Comment,g.Document,g.DocumentFragment,g.DocumentType,g.DOMImplementation,g.Element,g.Entity,g.EntityReference,g.LiveNodeList,g.NamedNodeMap,g.Node,g.NodeList,g.Notation,g.ProcessingInstruction,g.Text,g.XMLSerializer;var i=r(5752);t.S4=i.DOMParser,i.onErrorStopParsing,i.onWarningStopParsing},4466:(e,t,r)=>{"use strict";var n=r(4582),o=r(2763),g=r(2983),i=n.isHTMLEscapableRawTextElement,a=n.isHTMLMimeType,A=n.isHTMLRawTextElement,I=n.hasOwn,C=n.NAMESPACE,l=g.ParseError,s=g.DOMException;function c(){}c.prototype={parse:function(e,t,r){var g=this.domBuilder;g.startDocument(),m(t,t=Object.create(null)),function(e,t,r,g,i){var A=a(g.mimeType);e.indexOf(o.UNICODE_REPLACEMENT_CHARACTER)>=0&&i.warning("Unicode replacement character detected, source encoding issues?");function C(e){if(e>65535){var t=55296+((e-=65536)>>10),r=56320+(1023&e);return String.fromCharCode(t,r)}return String.fromCharCode(e)}function c(e){var t=";"===e[e.length-1]?e:e+";";if(!A&&t!==e)return i.error("EntityRef: expecting ;"),e;var n=o.Reference.exec(t);if(!n||n[0].length!==t.length)return i.error("entity not matching Reference production: "+e),e;var g=t.slice(1,-1);return I(r,g)?r[g]:"#"===g.charAt(0)?C(parseInt(g.substr(1).replace("x","0x"))):(i.error("entity not found:"+e),e)}function m(t){if(t>O){var r=e.substring(O,t).replace(u,c);S&&y(O),g.characters(r,0,t-O),O=t}}function y(t,r){for(;t>=N&&(r=T.exec(e));)w=r.index,N=w+r[0].length,S.lineNumber++;S.columnNumber=t-w+1}var w=0,N=0,T=/.*(?:\r\n?|\n)|.*$/g,S=g.locator,D=[{currentNSMap:t}],R=[],O=0;for(;;){try{var x=e.indexOf("<",O);if(x<0){if(!A&&R.length>0)return i.fatalError("unclosed xml tag(s): "+R.join(", "));if(!e.substring(O).match(/^\s*$/)){var M=g.doc,L=M.createTextNode(e.substr(O));if(M.documentElement)return i.error("Extra content at the end of the document");M.appendChild(L),g.currentElement=L}return}if(x>O){var k=e.substring(O,x);A||0!==R.length||(k=k.replace(new RegExp(o.S_OPT.source,"g"),""))&&i.error("Unexpected content outside root element: '"+k+"'"),m(x)}switch(e.charAt(x+1)){case"/":var P=e.indexOf(">",x+2),U=e.substring(x+2,P>0?P:void 0);if(!U)return i.fatalError("end tag name missing");var G=P>0&&o.reg("^",o.QName_group,o.S_OPT,"$").exec(U);if(!G)return i.fatalError('end tag name contains invalid characters: "'+U+'"');if(!g.currentElement&&!g.doc.documentElement)return;var F=R[R.length-1]||g.currentElement.tagName||g.doc.documentElement.tagName||"";if(F!==G[1]){var B=G[1].toLowerCase();if(!A||F.toLowerCase()!==B)return i.fatalError('Opening and ending tag mismatch: "'+F+'" != "'+U+'"')}var H=D.pop();R.pop();var Y=H.localNSMap;if(g.endElement(H.uri,H.localName,F),Y)for(var V in Y)I(Y,V)&&g.endPrefixMapping(V);P++;break;case"?":S&&y(x),P=E(e,x,g,i);break;case"!":S&&y(x),P=b(e,x,g,i,A);break;default:S&&y(x);var z=new v,j=D[D.length-1].currentNSMap,Z=(P=f(e,x,z,j,c,i,A),z.length);if(z.closed||(A&&n.isHTMLVoidElement(z.tagName)?z.closed=!0:R.push(z.tagName)),S&&Z){for(var q=p(S,{}),X=0;XO?O=P:m(Math.max(x,O)+1)}}(e,t,r,g,this.errorHandler),g.endDocument()}};var u=/&#?\w+;?/g;function p(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function f(e,t,r,n,o,g,i){function a(e,t,n){return I(r.attributeNames,e)?g.fatalError("Attribute "+e+" redefined"):!i&&t.indexOf("<")>=0?g.fatalError("Unescaped '<' not allowed in attributes values"):void r.addValue(e,t.replace(/[\t\n\r]/g," ").replace(u,o),n)}for(var A,C=++t,l=0;;){var s=e.charAt(C);switch(s){case"=":if(1===l)A=e.slice(t,C),l=3;else{if(2!==l)throw new Error("attribute equal must after attrName");l=3}break;case"'":case'"':if(3===l||1===l){if(1===l&&(g.warning('attribute value must after "="'),A=e.slice(t,C)),t=C+1,!((C=e.indexOf(s,t))>0))throw new Error("attribute value no end '"+s+"' match");a(A,c=e.slice(t,C),t-1),l=5}else{if(4!=l)throw new Error('attribute value must after "="');a(A,c=e.slice(t,C),t),g.warning('attribute "'+A+'" missed start quot('+s+")!!"),t=C+1,l=5}break;case"/":switch(l){case 0:r.setTagName(e.slice(t,C));case 5:case 6:case 7:l=7,r.closed=!0;case 4:case 1:break;case 2:r.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return g.error("unexpected end of input"),0==l&&r.setTagName(e.slice(t,C)),C;case">":switch(l){case 0:r.setTagName(e.slice(t,C));case 5:case 6:case 7:break;case 4:case 1:"/"===(c=e.slice(t,C)).slice(-1)&&(r.closed=!0,c=c.slice(0,-1));case 2:2===l&&(c=A),4==l?(g.warning('attribute "'+c+'" missed quot(")!'),a(A,c,t)):(i||g.warning('attribute "'+c+'" missed value!! "'+c+'" instead!!'),a(c,c,t));break;case 3:if(!i)return g.fatalError("AttValue: ' or \" expected")}return C;case"€":s=" ";default:if(s<=" ")switch(l){case 0:r.setTagName(e.slice(t,C)),l=6;break;case 1:A=e.slice(t,C),l=2;break;case 4:var c=e.slice(t,C);g.warning('attribute "'+c+'" missed quot(")!!'),a(A,c,t);case 5:l=6}else switch(l){case 2:i||g.warning('attribute "'+A+'" missed value!! "'+A+'" instead2!!'),a(A,A,t),t=C,l=1;break;case 5:g.warning('attribute space is required"'+A+'"!!');case 6:l=1,t=C;break;case 3:l=4,t=C;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}C++}}function d(e,t,r){for(var n=e.tagName,o=null,g=e.length;g--;){var i=e[g],a=i.qName,A=i.value;if((u=a.indexOf(":"))>0)var l=i.prefix=a.slice(0,u),s=a.slice(u+1),c="xmlns"===l&&s;else s=a,l=null,c="xmlns"===a&&"";i.localName=s,!1!==c&&(null==o&&(o=Object.create(null),m(r,r=Object.create(null))),r[c]=o[c]=A,i.uri=C.XMLNS,t.startPrefixMapping(c,A))}for(g=e.length;g--;)(i=e[g]).prefix&&("xml"===i.prefix&&(i.uri=C.XML),"xmlns"!==i.prefix&&(i.uri=r[i.prefix]));var u;(u=n.indexOf(":"))>0?(l=e.prefix=n.slice(0,u),s=e.localName=n.slice(u+1)):(l=null,s=e.localName=n);var p=e.uri=r[l||""];if(t.startElement(p,s,n,e),!e.closed)return e.currentNSMap=r,e.localNSMap=o,!0;if(t.endElement(p,s,n),o)for(l in o)I(o,l)&&t.endPrefixMapping(l)}function h(e,t,r,n,o){var g=i(r);if(g||A(r)){var a=e.indexOf("",t),I=e.substring(t+1,a);return g&&(I=I.replace(u,n)),o.characters(I,0,I.length),a}return t+1}function m(e,t){for(var r in e)I(e,r)&&(t[r]=e[r])}function y(e,t){var r=t;function n(t){return t=t||0,e.charAt(r+t)}function g(e){r+=e=e||1}function i(){return e.substring(r)}return{char:n,getIndex:function(){return r},getMatch:function(e){var t=o.reg("^",e).exec(i());return t?(g(t[0].length),t[0]):null},getSource:function(){return e},skip:g,skipBlanks:function(){for(var t=0;r"!==i.char()?n.fatalError("doctype not terminated with > at position "+i.getIndex()):(i.skip(1),r.startDTD(I.name,I.publicId,I.systemId,I.internalSubset),r.endDTD(),i.getIndex());default:return n.fatalError('Not well-formed XML starting with "0)return n.fatalError("processing instruction at position "+t+" is an xml declaration which is only at the start of the document");if(!o.XMLDecl.test(e.substring(t)))return n.fatalError("xml declaration is not well-formed")}return r.processingInstruction(g[1],g[2]),t+g[0].length}function v(){this.attributeNames=Object.create(null)}v.prototype={setTagName:function(e){if(!o.QName_exact.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,r){if(!o.QName_exact.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:r}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=c,t.parseUtils=y,t.parseDoctypeCommentOrCData=b},9994:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});const n={lightOrange:"data:image/png;base64,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IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjkyYWVkNjM2LWY3MDMtNDAzOC1hNzM4LWZiYzYxYzZlMTljNCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5NWMzZWI3NC0zYWRmLTRkYzUtOWZjZS1iODQ4NTc3Nzg4ODQiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0NjI3ZDg3NC1lZDIyLTRiZTUtYTlkNS00NDlmMzVhZDIxYzgiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5Mjc4OTUzMDYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphM2U3ZWQ1MS0xNTI4LTRhYjAtODVjOS0zNzNkNzgxZGM2ZmMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjI3KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PofUkY4AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGRuA4VZTAAAFcElEQVRYw82YW2xbVRaGv7XP8bHjXByHQkNhWigdVX1AikRBMBoQ8wASl4fRqPDAAxIPKAVxeRqQRohHBEVCaoGKUBCl4qHcNKCZVKMRRQxtgTaACLRKqlwB14NzM2ni2D2XvXjgBFXQOnFiA1uy/HB89u9/7bX+vf4l1HnpK57hTNCE0AzqAS5gAAuEID5KiWSiLPf4tp7YUjcSu4yLZzdi2IJyNXANcBlwAdAKzAHTwDhwDKEPywC+GZWHbPi7IKOvZIWguAnlr8BtwJ+AxDJeDYCPgF6Ed0hkh+Weov5mZLTHJMDeBjwYk0itYJtKTOpZML3SbYNfnYz2SBr0buARYENcFytdFvga2AGyT7p14Vcjoz3ShOgdKDuAi+pUewpMIDyCypvSreWGk9HdroOEV2F4A1hfTxGJCX2D5U7U/UzuD6NaXq49NRJhBsOjwMVLEtE4gaL4W5cV3IsxPEoizDT0ZLTHcSH6M/BWLLlVwpQKuPzhb+i8sRkv04Y/e5rvPigxtnM9trKU2k0D28A5LN3RsmXbrbFOU8DtQLpqfJqu97nh6TydmzvwWpOI8VDbxqbrkmz62yk+/Ps6yoe8KkeV/hHHfgrMNyrNEkBX1SAktgRs3T7ApV1rSWayiEkDLmLSJDNZLu1ay9btAyS2BEsEuWuZ99WKyRhgHeCcn8wGw/qbOnAS3jmfOwmP9Td1kNhQDduJcUwjyciS0RJXMMkWkPPUo/z4XFxZRhZII8mEwFCsT+f5xXTE7FAOteduItVaZodyhNPVZDeKccJGkxmsChIMOvTt6aRSzIP+7A9rRKWYp29PJ8GgsyqcVauZSADaj+IDTecWvBlD4e01HKjM07XtOOuuy+A2X0BYmib/8SxfvLWRYm8LdqZaCvkI/SDBci6nld0ze7KCLa4F3gSurR4MB5x1FnMhiCeor9hJiPKmWpbGp3EU2IbJFuTe5XfStbczLxgP7K0IPcCFDWhnJoFuMAek2/oNbWdku/WxHATejT1JPZcPvINysFYiK+gAFkXTK6H+MyhXADeseJ9fmrVDM6X080/+p1M2/yFsD1zjEIauEeMAqNpQE16oaKiqwfjYeLk+fuYl10HDq7DsBTavxs8o6FzFKez/dM3rLx9LjUyVxcb7yVkfzmpXFbACJURHIxgyxkyu1ml6qL0Z4YX4xl7Jfrrgm9Ov9bX/e++x1tHCgkQ11lgELGA4sBp3iHRbH5GDwJPAFLXo6KJnDmTh/aG2w2/3t47VSGQxs1zAE9U2s9pEjx3hXuBloCa7G1rxv8o3f/7SkUz/UFFWMqGRWMpHAqsDbl00KGotIXM7MawF7gKSS5oJJRospI7v+rD96Ikp8aV2EgrkVPW4OnIy6SVL9ZubvZgyaOVyYDfwl2oNqVWiXNEb231oTe+/BrzvK9Gy01MFyoiOKzIEmqsEfjGf/39U1yHgosJFUXhlFMl+z9E/nkvhVNHZsjux+9Caf77RnyzMBaJLmW4RrWAlB3Y4Uh13HLOA4wQjo6O2IRPNxVV4JuG5Et2SSelzjtFLzsZQ0NIZ8/2rx7K9+/paxqbKvyh4Bc4AFQxzau23Dow7FS+nHmfEUz05OqINH8+evXJPJVOuE93XkY4eSziaXcQpB2b+vZNt7+/8IPPl2OxPRMJ4dDsLzIho3hpzamJ6aqJ0ei6qtZAasmZ2OS1RyOMd6egBIzSFVoKj4y1Hnvhv+8cD02ZOkEmgIKITVnXKWDs1ksvNrgbTbRSZ46cypY50aWcllIsyKXvr8GTyi9f6WvePFGVQhO8EPW2NzI+OfV2pF2bDTgbg8D/aJeVUspd1BK3/G24u7/skO3+iYP3h3LdhI/B+AGodUpo8WKwoAAAAAElFTkSuQmCC",darkOrange:"data:image/png;base64,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czpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjIxNDZjMzUzLWIxZjItNGVjOC04NzQ3LTIwMGEyYWExM2ViMyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2NGViNmI2Ni03Y2I2LTRkZGUtYTI3OS01MGY0ZWFiZGFhODAiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1ODRhM2VjZC1kNGFmLTQ3NjItYjA1ZS04ODk2MGQ4ZTk0Y2MiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5MDM3ODI2MTQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxYzNjOGRkZi1kMjVkLTQ4YzQtYTAwYS0yMmU3ZDYwMzg1YjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjAzKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PuhCAHgAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGQOTjc4FAAAFdklEQVRYw82YW2gcZRTHf+eb2dlkc9lsrFYr2notfSgWxKKiog8VvIFI9UFQEaWtYPFJfREfRRSEeqlttViLD/WGisYXrShWpfWC1WpSN5eN3cZumkuTzWY3c/mOD9lI0WSTTXbVA8M8zMz3n//5zvl/5xyhxqb3ewYvaERpAvUAFzCABUIQH6GAHyvKa76tJbbUjMRW4+LbC7GsQbgCWA+sAs4AWoA8MAxkgEMo32LoxDO98oIN/xdk9IGUYEYvRrgduAW4Gogt4NMA+BroQHkfm+qW3aP6n5HRTSYG9hZga5lEwyKWKZVJvQCmQ3bZ4F8no5skAXov8BiwspwXizUL9APPgOyVXTr5r5HRzdKI1TsRngHOqlHuKTCI8hhG3padWqw7GX3IddDwcixvAefXUkTKhH7HcBfifi8vh1E1H1cfGkGYxPI4cM68RGw5zf3y3S7IuedgeZwgTNZ1Z3Sz46LRNcA7Zcmd25yGgPWP/M7q65toTLZSHBvn6OcFDm07n6g0n9oNAxsR54DsjBYs2251QWAbgFuBREX/tF3rc9+zA6xa3U5jSxwxHmpbueyqOOvvOM7rj67g1JfedFTNagngVtR+B0zUK8xiwLqKTmhcE3Dblk4uXbecRDKFmATgIiZBIpni0nXLuW1LJ41rgnmcvG6B59WiyRhgBeDM+UZipWHthnbcmDf7b8Y81m5oJ7GyErZTxjH1JCPzesu4ghtvBpkjH2X6uXFlAVEg9SMjhEAamFsyp4Yjcuks1s6uXdZacuksU8OVZDcC0mW8OpFRQqBruvqdwwpdDh+9cjaF0QHQv/2wRhRGB6afdzkVkKZxtDoyVaqZBKCHEXygcXafjhi63l3G9tIEGzYe4ZKrksSbzmCqMEz6mzE+eedC+juaiUYqhZCPchgkqKB4SzxntqQEO7oceBu4srIzHIitsMTOBOMJ1leCkxAMmEpRWt6Vg8BGTConOxZeSVdfzmwxHmpvRtkJnFmHcuYksBkxH8tO69e1nJEd1sdhP/BBuUippfnA+3jsr5ZI9TnzV33mFcB/DuEi4LpFr/PPZu3LkanES08fOltWnxe2Ba5xCEPXiHEAVG2oMS9UNFTVINOXKdamn3nQdSC8HMMeYPVS+hkFzQdObl9m2Zu7+xt6hkKx5fXktGumdNXyZQUKiPZGkDbGnFxqp+kh9kaUHeUTezHr6WRkxt/oa/toT39Lby6QqMoci4BJDB8vpTtEdlkflf3A08AQ1ejoTM8cyeRnudYD72Zb+qokMhNZLuCJaqtZaqDLLi0i7EHYDVTV7oZW/J9PNf3wanfycLoki5nQSFnKewKrnW5NNMhtKRDlt6EsB+4G4vM2/UrUNd5w5Pl028FfiuJL9SQUyKrqEXXkaNyLF2o3N9vUYKB0AbAduKFSQWqVKFv0+rYfXdbx4aB3qqQLDk8VKCKaUSQNmi0F/ujAwB9RTYeAMwoXabg2QvZ5jl4ym8Ip6FjgDm7/bdl7bw3Ec/lItEJyWyAS0RJWsmC7I9WM45hJHCfo6e21dZlozlju3pjnSnRT0tMXHdFzT8dQ0EJoTr2eSXXs7W/uG/pnwiswBZQw5NXaYw5knJKXVY8p8VSP9vZo3cezp1v2nniDK9FD7V70RMxoaganGJmJT0+0frbtt+RPfVN/EQnLo9sxYEREB6wxxweHhwYL4/mo2kSqi43c5zRH8GS7Fz1shMZQJTg41PzVU7+2fdNZNHlBTgI5ER20qkPG2qGebHZsSTpULzJH8slCe6ywrWTlrGTM3tw9Ef/xjUzLvp6idIlwQtBxa2Sit6+/VCvMuu0MwIE726RBSqlViaDli6Gm4t6e1MQveet3Z4+F9cD7Ewo4WRJBbaaSAAAAAElFTkSuQmCC",red:"data:image/png;base64,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293bv2fa/f0ASM5yljz/NiUAAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmI5YjA2YTAwLWZkOTQtNDc5MC1hNzIzLTlkMGUwNGRiNTRlNyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1MTQ3ZGU5Yi1kOTA0LTRlNWYtYjIyYy0wZmMzOGRmMWI3ZGEiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YzBjNTI2YS1lYTkyLTQxYWItODM5Yy05OWFhYTM0YjdlYzciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE2NDAxNTU0MjYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowMjQ4MDc5ZS1kMTYyLTQxZmItOGViYS1lMzY2NTRiNGRjMjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjIwOjQwKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PkaovgIAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPFCiKn0kIAAAFfUlEQVRYw82YTWxc1RXHf+e+N2/GH+Px2IEEV02AgqIsIkwgoYS2ahepVGCBUOiCRRdsAAnECthErBBCICGFj4gqRQqBRSABUrVm1URtCSATJ5ASZCPHH0kGgx1/xJl5nvH7uIcFY4iIM/GzZyhHenqL994993/u+f/fOUeos+nNnkHCJoQWRD0UFzCARYhQCVB8NFWWTwNbT99SNxC3GZfIXg9sADYDWxCuRekEskARYQplFPgEOAr045ph6bXRzwKM3pEX5mduQLkHuAvYCqSW8GkIfAT0IBwknT8lH87o/w2M3mpSqL0LeLQKIrOMZSpVUC8hpkf6bPiTg9FbpBn0L8ATwLoqL5ZrFjgNPAeyV47p3E8GRjdLE6r3oTwHXF0n7ikwgfAEIvvlqJYbDkY3uw4a3YLyNrC2niJSBXQG4c+Ie0yORnGSj5OnRhzlUJ4ErrkikBAoAjPVe7ik4F6D8iRxlGvoyegmx4X4NwgHgM6a8fUyIfc8doZbf99Ca66N0uwF+v7tc3DnWoJK6gqep1C2g3NEjsdLlm03GXSbAe4GmmvGZ91vA3Y8P8aN6ztoyaYxxsPaNrbcnmbbvV/x9ONdnPnA+w71otaMcDfYPqDUmDQTUgjdNYPQsSHkgYf62di9mmwujzHNgIsxzWRzeTZ2r+aBh/rp2BDWDLLQjSzpf7VMMIpB6QKcy77Tuc6wdVsHbspbfJspj63bOuhcV8u3g9KFJtufWQbHakfLdQUv3YrI4qwQ+e65616Jr6mknE4KJgIGgctLZnEq5vRgAWsXLyKttZweLFCcqiW7cdVP1DgwQoQwUNPJxIDDG7vXMDszBvqjDWvM7MwYb+xew8SAUzNowgCSDEwyNVMJQU8AAdC06DvBtOG/76xirlLi3u0nufn2HJmWTir+FJ9+PMu7B66nr6eVYLpWCgUoJ0DCGoq3wv/MbXkhmlkN7Ad+XTMY4kBTl6XlKnA8IQ4U/xyUx8wlB3ZpKvcC23Hz49K79Ep6GeWM8VB7J8pfgasaUM6cAx5EzPvSZ4OGljNy1AYIh4C/L6lASWYBcBCHQ0mBJOfM94rk+WjwAsKvgN8te51LK7kPpm3zK89OrZH1v4zaQ9c4RJFrxDgAqjbSlBcpGqlqODoyWq5TP1OtnoU9wPqV9DMKWlRnfJ+/6q3XKpmhSRVbXU8uuhb6Hq1eVsBHdDiGQWPMuZV1mpuMB/aPCK8CXcsMjs6pufCm3/7PPZXs8LhKnJBjMTCH4f2VdIfIcRsgcgh4FpgkiY4u9Mwqc4fn2468M58dSQhkIbNcwBPVNrPSRJdjWgb2AK8BidrdSCX4PGw5/re53IlBK8uZ0EhVyodCq/1uXTTIzfrExZ0oq4H7gfQSmv54IMqcfNFv7/0ilkCSg1CgoKon1ZEv017ar9/cbEvGEFeuQ9mF8IdaBamFuBB7I7tKq3r+EXjnK0tPTxUoIzqqyCBooRIGM2NjX8d1HQIuKFys0cYY2eeJ3riYwinorHUndvmr3nt7Pj1eVNEa5LZALKIVrBTAnopVRx3HzOE44dDwsG3IRHPBxrtTnkv8p5yjLzvoLy72oaC+mvOvz+V79pZbRyYvJbwC80AFQ1GtPevAqFPxCuoxL57ql8ND2vDx7MVW2JTOuMQPdxDvSInmF/yU1ZT+Nd92eGcp97+RH4BE1XHHLDAtomPWmK8mpiYn/AvFOCmRGmLTm53WOOKpDhM/YqApQsLe+dYPnym1f9xvTVGQc8C4iE5Y1Ulj7eRQoTC7Ih1qFJiTQc7vwN9ZUbk6Z+ydp6L0Z2+Ws/uGrAyI8I2gF6yR0vDI6Uq9fDbsZACO3NQuGa3kr3XC7H+ClvJeP1/6IrbBqbNno0b4+xbMlmARngcRbAAAAABJRU5ErkJggg==",turquoiseBlue:"data:image/png;base64,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/MUi8H5G35QHBm+BvjV3bu1znD4AWZpV+gY4OARGS5S97vHu3u65/XunPb8fN2tyj8UDOK0AAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjEwNGNlNWFhLTE1YzctNGI4Yi1iOGU1LTFmYWQyNWFiYzBhZCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpkNDMyZTY1Zi0xOThhLTQxM2EtYWYyMy1jNzhlNzczNGRlN2QiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyNzExODVkMi03MWZiLTRhZDMtYTJmMi1iNjM3OWU3MDc1OTEiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE4NjYyMzgzMjQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NGFiYzNkYS1lZWJiLTRlZjctYjdjNS04ZDRjODY5OGVjODMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI0OjI2KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pj0tlUwAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGBru/VeEAAAABmJLR0QA/wD/AP+gvaeTAAAFO0lEQVRYw9WYe2xTVRzHTx97dYS5B1UHa+/tY12dDoOKWyIGlfgHkCkSNTHGwHxA3NiAP/A5x4CMKEzdYL29YyAyBxKQZbI+NvYIaowaH9Ogi2GRbGjcFrbBNrq2a2/9nq5LCFnbbfSOeZJPTs/t6Tm/7/39zu+cU0IiXc7WSImNX0BsZiVYAhigmah5tHklsZrjSYtJSuZtaeSiiJU3gHUwfC9oARfBIHBP1DzaPH1eRuzmp0E6aTgSNX9EWMwSvOkMGPgG+CpguG8a0H7nA78zkMYqye0V0lYXDSHrYUw7cE5TxM04/b+38+vJ+RPRt0eIjVeAAhhyCQizFDKJEBjndaCY49Di4+CRlzFxfwSE3Ciol9i4DSBujoRUy7HIszFxdwSF3CioBy8qm1g5ufhirHwyJqwHrrDGWTlg8hFL1URN2+EF0XFPkyYuSWwhUVgnT2CygXBG3dFcM7bz1/au1u7OK9/93eWidUlHe1dCc810EsUAsXOPQZCI3rGZ6Wb4EXAEM0SCUFnZduz6T/09l4bHXYOCz+f0+XxeWg+7XYM/4vnKtlqHJHSIOrAHlYMFYmawRNCKycaDGZLVfMRdf/nPDpfXM+abotDnpy93dtzXfNgdZg+im2uimJ6h66UTeIMZsrat1jvkdPRRb/imLt4hl6N3DfqFEIPvOMzDJYspJsWfbUKEyFNttcKoyzkKo4UgYoRRt3OE9guT1br984nsmQ7gCWbIipaj4xeu9v/hFQTPlG7B89+u9v9O+4UQQ8f/BSlaVM8kgBOhji4p9mpvwQ+Wfwddjp6bQw2u8g44HT3535/tTUa/0Eccvg4sFDE1m2PBZkx2LVRqVcLQvG/PDDX1/tVxze38x+UZH6O1He28b764qgwtxOcf327eBGLFE9NikiD3qzDZhVBJgCJH3KubDnkfbD4s5Jw74qM1bcvDnxq8/vHt1SrS9InIJ2m7OQ4UYsKhCB9lJqHj0gPsHJzPvsS9w8rRRPDptI40M8PlH9fOJ5M5K008rsZmIwi5gc4QN9Zja8zn+5epch9PTFepU1iGuVunVqeyS9g0iv8zy96l0WiSjIsXx28iJEJhaONkMGB5YP14bkmI1SzIz1T0pRa9VKnNzCjUMcwWUAS2BtgWYLJN+xTo1OyrOhW7xsAwqnSGkd3i+uGjkT5Xw6DLt3AdEKQNB4YXbdtwQpuVuRtG7pwhxWA7vJgRib0nDuSDvtkIkjYcHE3aVWjRLL9/zyyETPK2Vq3OidAaOhiPDLcbxo3MRIik0eReWPnO15pHHiqbpYhS6hkNw7wAz0To6GM5hAzH3wkDa6b7x4bEwnkUfMnP6idX7Nex7GxElIDNerV6hU6jSdbp9RHck2w0w/FaGGoJm7KtnCfmWNlF1fOrK3Q6bekMRFABO7QM8yxewFLUi+5JSxPpAmcxy0gjt1Rytir4NcHKCfJTH/al5j1j1hr0pWEML55YD+x2GP6cVqNZZjQYEvUsG4vP4v8jKju5L1p6qnytxGKa6qogyOorBpVbXvxMe69xdxABb9I0DAGvIIRWp7NsBsJIoWVZKfaXuf+jMKp2b6z8+Adb4aErNwpCCh5J2pnfoH0ga08g7invBfaQjXjjuQifhyEgLdNolJP5UqR17y+QnSwvk1i565OZK6F8RzubvWwvDH8LvKZnmHXY8HKws+sNLJtI5muJ/7hYElOzJ1V+fN9R7CVDClPJOVXuqo06vS4HQjTwgDKDZRXk/1JiD7wrieFLk6T1lczCXUVK7aPZinS9XrTw+Q+Tql7SUmvGuQAAAABJRU5ErkJggg==",defaultOffset:[-25.5,-32]}},2888:(e,t,r)=>{"use strict";r.d(t,{A:()=>T});var n=r(3920),o=r(5844),g=r(9994),i=r(9972),a=r.n(i),A=r(5576),I=r.n(A),C=r(2423),l=r.n(C),s=r(86),c=r.n(s),u=r(7158),p=r.n(u),f=r(7195),d=r.n(f),h=r(9464),m=r.n(h);const y=ol.geom.Polygon;var b=r.n(y);const E=ol.geom.MultiPolygon;var v=r.n(E),w=o.A.getLogger("styling");a().prototype.setPropertyFill=function(){var e=this.getStyle();if(e&&(!Array.isArray(e)||0!==e.length)){var t=e.getFill();if(t){var r=t.getColor();if(Array.isArray(r)){var o="rgba(";o+=r[0]+",",o+=r[1]+",",o+=r[2]+",",r=o+=r[3]+")"}if(n.A.isRGB(r)){var g=n.A.rgbaToHex(r);this.set("fill",g.hex),this.set("fill-opacity",g.opacity)}else this.set("fill",r),this.set("fill-opacity",1)}}},a().prototype.setPropertyStroke=function(){var e=this.getStyle();if(e&&(!Array.isArray(e)||0!==e.length)){var t=e.getStroke();if(t){var r=t.getColor();if(Array.isArray(r)){var o="rgba(";o+=r[0]+",",o+=r[1]+",",o+=r[2]+",",r=o+=r[3]+")"}if(n.A.isRGB(r)){var g=n.A.rgbaToHex(r);this.set("stroke",g.hex),this.set("stroke-opacity",g.opacity)}else this.set("stroke",r),this.set("stroke-opacity",1);this.set("stroke-width",t.getWidth())}}},a().prototype.setPropertyLabel=function(){var e=this.getStyle();if(e&&(!Array.isArray(e)||0!==e.length)){var t=void 0!==this.get("name");if(e.getText()&&t){var r=e.getText().getFill();if(r){var o=r.getColor();if(Array.isArray(o)){var g="rgba(";g+=o[0]+",",g+=o[1]+",",g+=o[2]+",",o=g+=o[3]+")"}if(n.A.isRGB(o)){var i=n.A.rgbaToHex(o);this.set("label-fill",i.hex),this.set("label-fill-opacity",i.opacity)}else this.set("label-fill",o),this.set("label-fill-opacity",1)}var a=e.getText().getStroke();if(a){var A=a.getColor();if(Array.isArray(A)){var I="rgba(";I+=A[0]+",",I+=A[1]+",",I+=A[2]+",",A=I+=A[3]+")"}if(n.A.isRGB(A)){var C=n.A.rgbaToHex(A);this.set("label-stroke",C.hex),this.set("label-stroke-opacity",C.opacity)}else this.set("label-stroke",A),this.set("label-stroke-opacity",1);this.set("label-stroke-width",a.getWidth())}this.set("label-font",e.getText().getFont()||N.DEFAULT_TEXT.font),this.set("label-textAlign",e.getText().getTextAlign()||N.DEFAULT_TEXT.textAlign)}}},a().prototype.setPropertyMarker=function(){var e=this.getStyle();if(e&&(!Array.isArray(e)||0!==e.length)){var t=e.getImage();if(t)if(t instanceof c()){var r=t.getColor();if(Array.isArray(r)){var o="rgba(";o+=r[0]+",",o+=r[1]+",",o+=r[2]+",",r=o+=r[3]+")"}if(r){var g=n.A.rgbaToHex(r);this.set("marker-color",g.hex)}var i=t.getScale();switch(Math.round(2*i)/2){case 0:case.5:this.set("marker-size","small");break;case 1:this.set("marker-size","medium");break;case 1.5:case 2:this.set("marker-size","large")}var a=t.getSrc();a&&this.set("marker-symbol",a),this.unset("circle-fill"),this.unset("circle-fill-opacity"),this.unset("circle-stroke"),this.unset("circle-stroke-width"),this.unset("circle-stroke-opacity"),this.unset("circle-radius")}else{var A=t.getFill();if(A){var I=A.getColor();if(Array.isArray(I)){var C="rgba(";C+=I[0]+",",C+=I[1]+",",C+=I[2]+",",I=C+=I[3]+")"}if(n.A.isRGB(I)){var l=n.A.rgbaToHex(I);this.set("circle-fill",l.hex),this.set("circle-fill-opacity",l.opacity)}else this.set("circle-fill",I),this.set("circle-fill-opacity",1)}var s=t.getStroke();if(s){var u=s.getColor();if(Array.isArray(u)){var p="rgba(";p+=u[0]+",",p+=u[1]+",",p+=u[2]+",",u=p+=u[3]+")"}if(n.A.isRGB(u)){var f=n.A.rgbaToHex(u);this.set("circle-stroke",f.hex),this.set("circle-stroke-opacity",f.opacity)}else this.set("circle-stroke",u),this.set("circle-stroke-opacity",1);this.set("circle-stroke-width",s.getWidth())}var d=t.getRadius();this.set("circle-radius",d)}}};var N={APPLY_CONVERT_GEOM_GPX:!0,DEFAULT_ICON:{src:g.A.lightOrange,anchor:[.5,1],scale:1},DEFAULT_CIRCLE:{radius:10,fill:{opacity:1,color:[0,0,0,1]},stroke:{width:1,opacity:1,color:[0,0,0,1]}},DEFAULT_STROKE:{width:5,opacity:1,color:[250,250,250,1]},DEFAULT_FILL:{opacity:1,color:[0,0,0,1]},DEFAULT_TEXT:{font:"16px sans",textAlign:"left",stroke:{color:[250,250,250,1],width:5,opactity:1},fill:{opacity:1,color:[0,0,0,1]}},getListTags:function(){return["type","fill","fill-opacity","stroke","stroke-opacity","stroke-width","circle-fill","circle-fill-opacity","circle-stroke","circle-stroke-opacity","circle-stroke-width","circle-radius","marker-symbol","marker-color","marker-size","label-fill","label-fill-opacity","label-stroke","label-stroke-width","label-stroke-opacity","label-font","label-textAlign"]},defineStyleFromProperties:function(e){var t=null,r={},o=null;if(e.get("marker-color")||e.get("marker-size")||e.get("marker-symbol")){(o={}).src=this.DEFAULT_ICON.src,o.anchor=this.DEFAULT_ICON.anchor;var g=e.get("marker-symbol");g&&-1!==g.search("data:image/png;base64")&&(o.src=g);var i=e.get("marker-color");n.A.isHex(i)&&(o.color=n.A.hexToRgba(i,1));var a=e.get("marker-size");if(a)switch(a){case"small":o.scale=.5;break;case"medium":o.scale=1;break;case"large":o.scale=1.5;break;default:o.scale=this.DEFAULT_ICON.scale}}var A=null;(e.get("stroke")||e.get("stroke-opacity")||e.get("stroke-width"))&&((A={}).color=n.A.hexToRgba(e.get("stroke"),+e.get("stroke-opacity")||this.DEFAULT_STROKE.opacity),A.width=+e.get("stroke-width")||this.DEFAULT_STROKE.width);var C=null;(e.get("fill")||e.get("fill-opacity"))&&((C={}).color=n.A.hexToRgba(e.get("fill"),+e.get("fill-opacity")||this.DEFAULT_FILL.opacity));var s=null,u=null,f=""!==e.get("name");f&&((e.get("label-fill")||e.get("label-fill-opacity"))&&((u={}).color=n.A.hexToRgba(e.get("label-fill"),+e.get("label-fill-opacity")||this.DEFAULT_TEXT.fill.opacity)),(e.get("label-stroke")||e.get("label-stroke-opacity")||e.get("label-stroke-width"))&&((s={}).color=n.A.hexToRgba(e.get("label-stroke"),+e.get("label-stroke-opacity")||this.DEFAULT_TEXT.stroke.opacity),s.width=+e.get("label-stroke-width")||this.DEFAULT_TEXT.stroke.width));var h=e.get("circle-radius")||this.DEFAULT_CIRCLE.radius,y=null;(e.get("circle-stroke")||e.get("circle-stroke-opacity")||e.get("circle-stroke-width"))&&((y={}).color=n.A.hexToRgba(e.get("circle-stroke"),+e.get("circle-stroke-opacity")||this.DEFAULT_CIRCLE.stroke.opacity),y.width=+e.get("circle-stroke-width")||this.DEFAULT_CIRCLE.stroke.width);var E=null;if((e.get("circle-fill")||e.get("circle-fill-opacity"))&&((E={}).color=n.A.hexToRgba(e.get("circle-fill"),+e.get("circle-fill-opacity")||this.DEFAULT_CIRCLE.fill.opacity)),e.getGeometry()){var w=e.getGeometry().getType();switch(w){case"Circle":case"Point":case"MultiPoint":var N=!1,T={};if(y&&(T.stroke=new(d())(y)),E&&(T.fill=new(p())(E)),0!==Object.keys(T).length&&(N=!0,T.radius=+h,r.image=new(l())(T)),o&&(r.image=new(c())(o)),f){var S={};if(s&&(S.stroke=new(d())(s)),u&&(S.fill=new(p())(u)),0!==Object.keys(S).length)S.text=e.get("name"),S.textAlign=e.get("label-textAlign")||this.DEFAULT_TEXT.textAlign,S.font=e.get("label-font")||this.DEFAULT_TEXT.font,r.text=new(m())(Object.assign({},this.DEFAULT_TEXT,S));else if(o||N){var D=new(m())(Object.assign({},this.DEFAULT_TEXT,{fill:new(p())(this.DEFAULT_TEXT.fill),stroke:new(d())(this.DEFAULT_TEXT.stroke)}));if(D){var R=D.clone();R.setText(e.get("name")),r.text=R}}}break;case"Polygon":case"MultiPolygon":A&&(r.stroke=new(d())(A)),C&&(r.fill=new(p())(C));break;case"LineString":case"MultiLineString":if(A&&(r.stroke=new(d())(A)),this.APPLY_CONVERT_GEOM_GPX&&C){var O=e.get("type");if(O&&("Polygon"===O||"MultiPolygon"===O)){r.fill=new(p())(C);var x=e.clone(),M="LineString"===w?b():v();e.setGeometry(new M([x.getGeometry().getCoordinates()]))}}}}return 0!==Object.keys(r).length&&(t=new(I())(r)),t},defineStyleFunctionByDefault:function(e){if(!e)return[];if(0===Object.keys(e).length)return[];return function(t,r){if(t.getGeometry()){var n=null;switch(t.getGeometry().getType()){case"Point":case"MultiPoint":var o={};if(e.getImage()&&(o.image=e.getImage()),e.getText()&&t.get("name")){var g=e.getText().clone();g.setText(t.get("name")),o.text=g}n=new(I())(o);break;case"Circle":var i={},a={};if(e.getFill()&&(a.fill=e.getFill()),e.getStroke()&&(a.stroke=e.getStroke()),e.getText()&&t.get("name")){var A=e.getText().clone();A.setText(t.get("name")),i.text=A}0!==Object.keys(a).length&&(a.radius=3,i.image=new(l())(a)),n=new(I())(i);break;case"Polygon":case"MultiPolygon":var C={};e.getFill()&&(C.fill=e.getFill()),e.getStroke()&&(C.stroke=e.getStroke()),n=new(I())(C);break;case"LineString":case"LinearRing":case"MultiLineString":var s={};e.getStroke()&&(s.stroke=e.getStroke()),n=new(I())(s)}return[n]}}},definePropertiesFromStyleByType:function(e){if(e.getGeometry())switch(e.getGeometry().getType()){case"Point":case"MultiPoint":e.setPropertyMarker(),e.setPropertyLabel();break;case"LineString":case"MultiLineString":e.setPropertyStroke();break;case"Polygon":case"MultiPolygon":e.setPropertyStroke(),e.setPropertyFill()}},definePropertiesFromStyle:function(e){var t=e.getStyle()||e.getStyleFunction();if(t){if("function"==typeof t){var r=t.call(this,e,0);if(!r||0===r.length)return;t=Array.isArray(r)?r[0]:r,e.setStyle(t)}this.definePropertiesFromStyleByType(e)}},defineTagFromStyle:function(e,t){return w.trace("todo..."),null}};const T=N},3920:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});const n={hex:function(e){if(e>255)throw new Error("'"+e+"'' is greater than 255(0xff);");return("0"+Number(e).toString(16)).slice(-2)},num:function(e){return parseInt(e,16)},arrayToRgba:function(e){if(!Array.isArray(e))throw new Error("Not an array !");var t=e[0],r=e[1],n=e[2],o=e[3]||1;return"rgba("+t+", "+r+", "+n+", "+parseFloat(o)+")"},arrayToHex:function(e){if(!Array.isArray(e))throw new Error("Not an array !");var t=e[0],r=e[1],n=e[2],o=e[3],g=[this.hex(t),this.hex(r),this.hex(n)],i={};return i.hex="#"+g.join(""),o&&(i.opacity=parseFloat(o)),i},rgbaToHex:function(e){var t=/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(0?.?\d+)\s*)?\)/.exec(e);if(!t)throw new Error("Invalid format: "+e);var r=t[1],n=t[2],o=t[3],g=t[4],i=[this.hex(r),this.hex(n),this.hex(o)],a={};return a.hex="#"+i.join(""),g&&(a.opacity=parseFloat(g)),a},hexToRgba:function(e,t){if(!e)throw new Error("Invalid format");e=e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,(function(e,t,r,n){return t+t+r+r+n+n}));var r=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return(r=r?{r:parseInt(r[1],16),g:parseInt(r[2],16),b:parseInt(r[3],16)}:null)?"rgba("+r.r+", "+r.g+", "+r.b+", "+t+")":null},isHex:function(e){if(!e)return!1;if("#"!==e.charAt(0))return!1;return!!/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e)},isRGB:function(e){if(!e)return!1;return!!/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(0?.?\d+)\s*)?\)/.exec(e)}}},2536:(e,t,r)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}r.d(t,{A:()=>o});const o={detectSupport:function(){var e=!0,t=window.navigator.userAgent.toLowerCase();return-1===t.indexOf("iphone")&&-1===t.indexOf("ipod")&&-1===t.indexOf("ipad")&&-1===t.indexOf("android")&&-1===t.indexOf("mobile")&&-1===t.indexOf("blackberry")&&-1===t.indexOf("tablet")&&-1===t.indexOf("phone")&&-1===t.indexOf("touch")||(e=!1),-1===t.indexOf("msie")&&-1===t.indexOf("trident")||(e=!0),e},assign:function(e,t){for(var r in e=e||{},t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e},mergeParams:function(e,t,r){if(void 0!==e&&void 0!==t)for(var o in void 0===r&&(r=!0),t)t.hasOwnProperty(o)&&("object"===n(t[o])?e.hasOwnProperty(o)?this.mergeParams(e[o],t[o],r):e[o]=t[o]:e.hasOwnProperty(o)?r&&(e[o]=t[o]):e[o]=t[o])}}},5844:(e,t,r)=>{"use strict";r.d(t,{A:()=>g});var n=r(3065),o={getLogger:function(e){if(void 0===t)var t={env:{VERBOSE:!1}};t.env.VERBOSE?n.enableAll():n.disableAll();var r=e||"default";return n.getLogger(r)},disableAll:function(){var e=n.getLoggers();for(var t in e){if(Object.hasOwnProperty.call(e,t))e[t].disableAll()}},enableAll:function(){var e=n.getLoggers();for(var t in e){if(Object.hasOwnProperty.call(e,t))e[t].enableAll()}}};const g=o;window.Gp&&(window.Gp.Logger=o)},9335:(e,t,r)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}r.d(t,{A:()=>g});var o=r(5844).A.getLogger("parser");const g={parse:function(e){var t=null,g="undefined"!=typeof window?window:null;"object"===("undefined"==typeof exports?"undefined":n(exports))&&null===window?t=(new(0,r(8978).S4)).parseFromString(e,"text/xml"):g.DOMParser?t=(new g.DOMParser).parseFromString(e,"text/xml"):g.ActiveXObject?((t=new g.ActiveXObject("Microsoft.XMLDOM")).async=!1,t.loadXML(e)):o.log("Incompatible environment for DOM Parser !");var i=t.querySelector("parsererror");return i?(console.error(i),null):(o.trace(t),t)},toString:function(e){var t=(new XMLSerializer).serializeToString(e);return o.trace(t),t},format:function(e){for(var t="",r=(e=e.replace(/(>)\s*(<)(\/*)/g,"$1\n$2$3").replace(/ *(.*) +\n/g,"$1\n").replace(/(<.+>)(.+\n)/g,"$1\n$2")).split("\n"),n=0,g="other",i={"single->single":0,"single->closing":-1,"single->opening":0,"single->other":0,"closing->single":0,"closing->closing":-1,"closing->opening":0,"closing->other":0,"opening->single":1,"opening->closing":0,"opening->opening":1,"opening->other":1,"other->single":0,"other->closing":-1,"other->opening":0,"other->other":0},a=0;a/)),C=Boolean(A.match(/<\/.+>/)),l=Boolean(A.match(/<[^!].*>/)),s=I?"single":C?"closing":l?"opening":"other",c=g+"->"+s;g=s;var u="";n+=i[c];for(var p=0;pclosing"===c?t=t.substr(0,t.length-1)+A+"\n":t+=u+A+"\n"}return o.trace(t),t}}},3065:function(e,t,r){var n,o;!function(){"use strict";n=function(){var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"],o={},g=null;function i(e,t){var r=e[t];if("function"==typeof r.bind)return r.bind(e);try{return Function.prototype.bind.call(r,e)}catch(t){return function(){return Function.prototype.apply.apply(r,[e,arguments])}}}function a(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function A(n){return"debug"===n&&(n="log"),typeof console!==t&&("trace"===n&&r?a:void 0!==console[n]?i(console,n):void 0!==console.log?i(console,"log"):e)}function I(){for(var r=this.getLevel(),o=0;o=0&&t<=C.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?s+=":"+e:"symbol"==typeof e&&(s=void 0),C.name=e,C.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},C.methodFactory=r||l,C.getLevel=function(){return null!=A?A:null!=a?a:i},C.setLevel=function(e,t){return A=f(e),!1!==t&&c(A),I.call(C)},C.setDefaultLevel=function(e){a=f(e),u()||C.setLevel(e,!1)},C.resetLevel=function(){A=null,p(),I.call(C)},C.enableAll=function(e){C.setLevel(C.levels.TRACE,e)},C.disableAll=function(e){C.setLevel(C.levels.SILENT,e)},C.rebuild=function(){if(g!==C&&(i=f(g.getLevel())),I.call(C),g===C)for(var e in o)o[e].rebuild()},i=f(g?g.getLevel():"WARN");var d=u();null!=d&&(A=f(d)),I.call(C)}(g=new s).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=o[e];return t||(t=o[e]=new s(e,g.methodFactory)),t};var c=typeof window!==t?window.log:void 0;return g.noConflict=function(){return typeof window!==t&&window.log===g&&(window.log=c),g},g.getLoggers=function(){return o},g.default=g,g},void 0===(o="function"==typeof n?n.call(t,r,t,e):n)||(e.exports=o)}()},9972:e=>{"use strict";e.exports=ol.Feature},7304:e=>{"use strict";e.exports=ol.format.GeoJSON},2999:e=>{"use strict";e.exports=ol.style},2423:e=>{"use strict";e.exports=ol.style.Circle},7158:e=>{"use strict";e.exports=ol.style.Fill},86:e=>{"use strict";e.exports=ol.style.Icon},7195:e=>{"use strict";e.exports=ol.style.Stroke},5576:e=>{"use strict";e.exports=ol.style.Style},9464:e=>{"use strict";e.exports=ol.style.Text}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var g=t[n]={exports:{}};return e[n].call(g.exports,g,g.exports,r),g.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var n={};(()=>{"use strict";var e=r(7304),t=r.n(e),n=r(2888);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function g(e,t){for(var r=0;r{"use strict";const e=ol.format.KML;var t=r.n(e),n=r(2999),o=r(2888),g=r(3920),i=r(5844),a=r(9335),A=r(2536);function I(e){return I="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},I(e)}function C(e,t){for(var r=0;r)\s*(<)/g,"$1$2"),null===(o=a.A.parse(I)))return i;function C(e){var t="";t+=e.substr(6,2),t+=e.substr(4,2),t+=e.substr(2,2);for(var r=parseInt(t,16).toString(16),n="",o=r.length||0,g=0;g<6-o;g++)n+="0";return r="#"+n+r}var l=function(e,t){if(h.trace("label with style :",t),e){for(var r=e.getProperties().name,o=C("ff000000"),i="#FFFFFF",a=0,A="Sans",I="16px",l=null,s=5,c="#000000",u="#ffffff",p=1,f=!1,d=!1,m=t.childNodes,y=0;y{"use strict";r.d(n,{default:()=>y});const e=ol.format.GPX;var t=r.n(e);const o=ol.geom.MultiLineString;var g=r.n(o);const i=ol.geom.LineString;var a=r.n(i),A=r(2888),I=r(9335);function C(e){return C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},C(e)}function l(e,t){for(var r=0;r{var t={3065:function(t,e,o){var n,r;!function(){"use strict";n=function(){var t=function(){},e="undefined",o=typeof window!==e&&typeof window.navigator!==e&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"],r={},i=null;function l(t,e){var o=t[e];if("function"==typeof o.bind)return o.bind(t);try{return Function.prototype.bind.call(o,t)}catch(e){return function(){return Function.prototype.apply.apply(o,[t,arguments])}}}function a(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function c(n){return"debug"===n&&(n="log"),typeof console!==e&&("trace"===n&&o?a:void 0!==console[n]?l(console,n):void 0!==console.log?l(console,"log"):t)}function u(){for(var o=this.getLevel(),r=0;r=0&&e<=s.levels.SILENT)return e;throw new TypeError("log.setLevel() called with invalid level: "+t)}"string"==typeof t?p+=":"+t:"symbol"==typeof t&&(p=void 0),s.name=t,s.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},s.methodFactory=o||f,s.getLevel=function(){return null!=c?c:null!=a?a:l},s.setLevel=function(t,e){return c=d(t),!1!==e&&v(c),u.call(s)},s.setDefaultLevel=function(t){a=d(t),y()||s.setLevel(t,!1)},s.resetLevel=function(){c=null,g(),u.call(s)},s.enableAll=function(t){s.setLevel(s.levels.TRACE,t)},s.disableAll=function(t){s.setLevel(s.levels.SILENT,t)},s.rebuild=function(){if(i!==s&&(l=d(i.getLevel())),u.call(s),i===s)for(var t in r)r[t].rebuild()},l=d(i?i.getLevel():"WARN");var b=y();null!=b&&(c=d(b)),u.call(s)}(i=new p).getLogger=function(t){if("symbol"!=typeof t&&"string"!=typeof t||""===t)throw new TypeError("You must supply a name when creating a logger.");var e=r[t];return e||(e=r[t]=new p(t,i.methodFactory)),e};var v=typeof window!==e?window.log:void 0;return i.noConflict=function(){return typeof window!==e&&window.log===i&&(window.log=v),i},i.getLoggers=function(){return r},i.default=i,i},void 0===(r="function"==typeof n?n.call(e,o,e,t):n)||(t.exports=r)}()}},e={};function o(n){var r=e[n];if(void 0!==r)return r.exports;var i=e[n]={exports:{}};return t[n].call(i.exports,i,i.exports,o),i.exports}o.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n={};(()=>{"use strict";o.d(n,{default:()=>w});const t=ol.control.Attribution;var e=o.n(t);const r=ol.proj;const i={getZoomLevelFromScaleDenominator:function(t,e){var o={};if("EPSG:2154"===e)o={0:104579.224549894,1:52277.5323537905,2:26135.4870785954,3:13066.8913818,4:6533.2286041135,5:3266.5595244627,6:1633.2660045974,7:816.629554986,8:408.3139146768,9:204.1567415109,10:102.0783167832,11:51.0391448966,12:25.5195690743,13:12.7597836936,14:6.379891636,15:3.1899457653,16:1.5949728695,17:.7974864315,18:.3987432149,19:.1993716073,20:.0996858037,21:.0498429018};else o={0:156543.033928041,1:78271.51696402048,2:39135.758482010235,3:19567.87924100512,4:9783.93962050256,5:4891.96981025128,6:2445.98490512564,7:1222.99245256282,8:611.49622628141,9:305.7481131407048,10:152.8740565703525,11:76.43702828517624,12:38.21851414258813,13:19.10925707129406,14:9.554628535647032,15:4.777314267823516,16:2.388657133911758,17:1.194328566955879,18:.5971642834779395,19:.2985821417389697,20:.1492910708694849,21:.0746455354347424};var n=28e-5*t;for(var r in o)if(o.hasOwnProperty(r)&&o[r]<=n)return r=parseInt(r,10);return 0},getAttributions:function(t){var e=t.zoom,o=[];if(null!=t.originators&&t.visibility)for(var n,r=0,i=t.originators.length;re&&(n=!1),n&&p&&p{var e={3065:function(e,t,n){var o,r;!function(){"use strict";o=function(){var e=function(){},t="undefined",n=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),o=["trace","debug","info","warn","error"],r={},i=null;function l(e,t){var n=e[t];if("function"==typeof n.bind)return n.bind(e);try{return Function.prototype.bind.call(n,e)}catch(t){return function(){return Function.prototype.apply.apply(n,[e,arguments])}}}function a(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function c(o){return"debug"===o&&(o="log"),typeof console!==t&&("trace"===o&&n?a:void 0!==console[o]?l(console,o):void 0!==console.log?l(console,"log"):e)}function s(){for(var n=this.getLevel(),r=0;r=0&&t<=u.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?p+=":"+e:"symbol"==typeof e&&(p=void 0),u.name=e,u.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},u.methodFactory=n||f,u.getLevel=function(){return null!=c?c:null!=a?a:l},u.setLevel=function(e,t){return c=g(e),!1!==t&&d(c),s.call(u)},u.setDefaultLevel=function(e){a=g(e),v()||u.setLevel(e,!1)},u.resetLevel=function(){c=null,y(),s.call(u)},u.enableAll=function(e){u.setLevel(u.levels.TRACE,e)},u.disableAll=function(e){u.setLevel(u.levels.SILENT,e)},u.rebuild=function(){if(i!==u&&(l=g(i.getLevel())),s.call(u),i===u)for(var e in r)r[e].rebuild()},l=g(i?i.getLevel():"WARN");var b=v();null!=b&&(c=g(b)),s.call(u)}(i=new p).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=r[e];return t||(t=r[e]=new p(e,i.methodFactory)),t};var d=typeof window!==t?window.log:void 0;return i.noConflict=function(){return typeof window!==t&&window.log===i&&(window.log=d),i},i.getLoggers=function(){return r},i.default=i,i},void 0===(r="function"==typeof o?o.call(t,n,t,e):o)||(e.exports=r)}()}},t={};function n(o){var r=t[o];if(void 0!==r)return r.exports;var i=t[o]={exports:{}};return e[o].call(i.exports,i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var o={};(()=>{"use strict";n.d(o,{default:()=>h});var e=n(3065),t={getLogger:function(t){if(void 0===n)var n={env:{VERBOSE:!1}};n.env.VERBOSE?e.enableAll():e.disableAll();var o=t||"default";return e.getLogger(o)},disableAll:function(){var t=e.getLoggers();for(var n in t){if(Object.hasOwnProperty.call(t,n))t[n].disableAll()}},enableAll:function(){var t=e.getLoggers();for(var n in t){if(Object.hasOwnProperty.call(t,n))t[n].enableAll()}}};const r=t;var i;window.Gp&&(window.Gp.Logger=t);const l={generate:(i=Math.floor(Date.now()),function(){return i++}),name:function(e){var t=null,n=e.lastIndexOf("-");return t=-1===n?e:e.substring(0,n),t},index:function(e){var t=null,n=this.name(e),o=n.lastIndexOf("_");return-1!==o&&(t=n.substring(o+1)),t},uuid:function(e){var t=null,n=e.lastIndexOf("-");return-1!==n&&(t=parseInt(e.substring(n+1),10)),t}},a=ol.control.FullScreen;var c=n.n(a);function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function u(e,t){for(var n=0;n{var t={4582:(t,e)=>{"use strict";function s(t,e){return void 0===e&&(e=Object),e&&"function"==typeof e.getOwnPropertyDescriptors&&(t=e.create(null,e.getOwnPropertyDescriptors(t))),e&&"function"==typeof e.freeze?e.freeze(t):t}function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}var n=s({allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,formnovalidate:!0,hidden:!0,ismap:!0,itemscope:!0,loop:!0,multiple:!0,muted:!0,nomodule:!0,novalidate:!0,open:!0,playsinline:!0,readonly:!0,required:!0,reversed:!0,selected:!0});var o=s({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});var r=s({script:!1,style:!1,textarea:!0,title:!0});function a(t){return t===l.HTML}var l=s({HTML:"text/html",XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),u=Object.keys(l).map((function(t){return l[t]}));var h=s({HTML:"http://www.w3.org/1999/xhtml",SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});e.assign=function(t,e){if(null===t||"object"!=typeof t)throw new TypeError("target is not an object");for(var s in e)i(e,s)&&(t[s]=e[s]);return t},e.find=function(t,e,s){if(void 0===s&&(s=Array.prototype),t&&"function"==typeof s.find)return s.find.call(t,e);for(var n=0;n-1},e.MIME_TYPE=l,e.NAMESPACE=h},5752:(t,e,s)=>{"use strict";var i=s(4582),n=s(4722),o=s(2983),r=s(6559),a=s(4466),l=n.DOMImplementation,u=i.hasDefaultHTMLNamespace,h=i.isHTMLMimeType,c=i.isValidMimeType,g=i.MIME_TYPE,p=i.NAMESPACE,d=o.ParseError,f=a.XMLReader;function A(t){return t.replace(/\r[\n\u0085]/g,"\n").replace(/[\r\u0085\u2028]/g,"\n")}function m(t){if(t=t||{locator:!0},this.assign=t.assign||i.assign,this.domHandler=t.domHandler||C,this.onError=t.onError||t.errorHandler,t.errorHandler&&"function"!=typeof t.errorHandler)throw new TypeError("errorHandler object is no longer supported, switch to onError!");t.errorHandler&&t.errorHandler("warning","The `errorHandler` option has been deprecated, use `onError` instead!",this),this.normalizeLineEndings=t.normalizeLineEndings||A,this.locator=!!t.locator,this.xmlns=this.assign(Object.create(null),t.xmlns)}function C(t){var e=t||{};this.mimeType=e.mimeType||g.XML_APPLICATION,this.defaultNamespace=e.defaultNamespace||null,this.cdata=!1,this.currentElement=void 0,this.doc=void 0,this.locator=void 0,this.onError=e.onError}function I(t,e){e.lineNumber=t.lineNumber,e.columnNumber=t.columnNumber}function y(t,e,s){return"string"==typeof t?t.substr(e,s):t.length>=e+s||e?new java.lang.String(t,e,s)+"":t}function _(t,e){t.currentElement?t.currentElement.appendChild(e):t.doc.appendChild(e)}m.prototype.parseFromString=function(t,e){if(!c(e))throw new TypeError('DOMParser.parseFromString: the provided mimeType "'+e+'" is not valid.');var s=this.assign(Object.create(null),this.xmlns),n=r.XML_ENTITIES,o=s[""]||null;u(e)?(n=r.HTML_ENTITIES,o=p.HTML):e===g.XML_SVG_IMAGE&&(o=p.SVG),s[""]=o,s.xml=s.xml||p.XML;var a=new this.domHandler({mimeType:e,defaultNamespace:o,onError:this.onError}),l=this.locator?{}:void 0;this.locator&&a.setDocumentLocator(l);var h=new f;return h.errorHandler=a,h.domBuilder=a,!i.isHTMLMimeType(e)&&"string"!=typeof t&&h.errorHandler.fatalError("source is not a string"),h.parse(this.normalizeLineEndings(String(t)),s,n),a.doc.documentElement||h.errorHandler.fatalError("missing root element"),a.doc},C.prototype={startDocument:function(){var t=new l;this.doc=h(this.mimeType)?t.createHTMLDocument(!1):t.createDocument(this.defaultNamespace,"")},startElement:function(t,e,s,i){var n=this.doc,o=n.createElementNS(t,s||e),r=i.length;_(this,o),this.currentElement=o,this.locator&&I(this.locator,o);for(var a=0;a{"use strict";var i=s(4582),n=i.find,o=i.hasDefaultHTMLNamespace,r=i.hasOwn,a=i.isHTMLMimeType,l=i.isHTMLRawTextElement,u=i.isHTMLVoidElement,h=i.MIME_TYPE,c=i.NAMESPACE,g=Symbol(),p=s(2983),d=p.DOMException,f=p.DOMExceptionName,A=s(2763);function m(t){if(t!==g)throw new TypeError("Illegal constructor")}function C(t){return""!==t}function I(t,e){return r(t,e)||(t[e]=!0),t}function y(t){if(!t)return[];var e=function(t){return t?t.split(/[\t\n\f\r ]+/).filter(C):[]}(t);return Object.keys(e.reduce(I,{}))}function _(t){if(!A.QName_exact.test(t))throw new d(d.INVALID_CHARACTER_ERR,'invalid character in qualified name "'+t+'"')}function v(t,e){_(e),t=t||null;var s=null,n=e;if(e.indexOf(":")>=0){var o=e.split(":");s=o[0],n=o[1]}if(null!==s&&null===t)throw new d(d.NAMESPACE_ERR,"prefix is non-null and namespace is null");if("xml"===s&&t!==i.NAMESPACE.XML)throw new d(d.NAMESPACE_ERR,'prefix is "xml" and namespace is not the XML namespace');if(("xmlns"===s||"xmlns"===e)&&t!==i.NAMESPACE.XMLNS)throw new d(d.NAMESPACE_ERR,'either qualifiedName or prefix is "xmlns" and namespace is not the XMLNS namespace');if(t===i.NAMESPACE.XMLNS&&"xmlns"!==s&&"xmlns"!==e)throw new d(d.NAMESPACE_ERR,'namespace is the XMLNS namespace and neither qualifiedName nor prefix is "xmlns"');return[t,s,n]}function M(t,e){for(var s in t)r(t,s)&&(e[s]=t[s])}function E(t,e){var s=t.prototype;if(!(s instanceof e)){function i(){}i.prototype=e.prototype,M(s,i=new i),t.prototype=s=i}s.constructor!=t&&("function"!=typeof t&&console.error("unknown Class:"+t),s.constructor=t)}var w={},S=w.ELEMENT_NODE=1,b=w.ATTRIBUTE_NODE=2,x=w.TEXT_NODE=3,R=w.CDATA_SECTION_NODE=4,T=w.ENTITY_REFERENCE_NODE=5,N=w.ENTITY_NODE=6,P=w.PROCESSING_INSTRUCTION_NODE=7,G=w.COMMENT_NODE=8,O=w.DOCUMENT_NODE=9,D=w.DOCUMENT_TYPE_NODE=10,j=w.DOCUMENT_FRAGMENT_NODE=11,k=w.NOTATION_NODE=12,L=i.freeze({DOCUMENT_POSITION_DISCONNECTED:1,DOCUMENT_POSITION_PRECEDING:2,DOCUMENT_POSITION_FOLLOWING:4,DOCUMENT_POSITION_CONTAINS:8,DOCUMENT_POSITION_CONTAINED_BY:16,DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:32});function U(t){for(var e=[];t.parentNode||t.ownerElement;)t=t.parentNode||t.ownerElement,e.unshift(t);return e}function z(t,e){if(e.length=0){for(var n=e.length-1;i<=n;)e[i]=e[++i];if(e.length=n,t){var o=t.ownerDocument;o&&tt(o,t,s),s.ownerElement=null}}}function Z(){}function K(t){m(t)}function Q(t){return("<"==t?"<":">"==t&&">")||"&"==t&&"&"||'"'==t&&"""||"&#"+t.charCodeAt()+";"}function J(t,e){if(e(t))return!0;if(t=t.firstChild)do{if(J(t,e))return!0}while(t=t.nextSibling)}function $(t,e){m(t);var s=e||{};this.ownerDocument=this,this.contentType=s.contentType||h.XML_APPLICATION,this.type=a(this.contentType)?"html":"xml"}function tt(t,e,s,i){t&&t._inc++,s.namespaceURI===c.XMLNS&&delete e._nsMap[s.prefix?s.localName:""]}function et(t,e,s){if(t&&t._inc){t._inc++;var i=e.childNodes;if(s&&!s.nextSibling)i[i.length++]=s;else{for(var n=e.firstChild,o=0;n;)i[o++]=n,n=n.nextSibling;i.length=o,delete i[i.length]}}}function st(t,e){if(t!==e.parentNode)throw new d(d.NOT_FOUND_ERR,"child's parent is not parent");var s=e.previousSibling,i=e.nextSibling;return s?s.nextSibling=i:t.firstChild=i,i?i.previousSibling=s:t.lastChild=s,et(t.ownerDocument,t),e.parentNode=null,e.previousSibling=null,e.nextSibling=null,e}function it(t){return t&&t.nodeType===K.DOCUMENT_TYPE_NODE}function nt(t){return t&&t.nodeType===K.ELEMENT_NODE}function ot(t){return t&&t.nodeType===K.TEXT_NODE}function rt(t,e){var s=t.childNodes||[];if(n(s,nt)||it(e))return!1;var i=n(s,it);return!(e&&i&&s.indexOf(i)>s.indexOf(e))}function at(t,e){var s=t.childNodes||[];if(n(s,(function(t){return nt(t)&&t!==e})))return!1;var i=n(s,it);return!(e&&i&&s.indexOf(i)>s.indexOf(e))}function lt(t,e,s){if(!function(t){return t&&(t.nodeType===K.DOCUMENT_NODE||t.nodeType===K.DOCUMENT_FRAGMENT_NODE||t.nodeType===K.ELEMENT_NODE)}(t))throw new d(d.HIERARCHY_REQUEST_ERR,"Unexpected parent node type "+t.nodeType);if(s&&s.parentNode!==t)throw new d(d.NOT_FOUND_ERR,"child not in parent");if(!function(t){return t&&(t.nodeType===K.CDATA_SECTION_NODE||t.nodeType===K.COMMENT_NODE||t.nodeType===K.DOCUMENT_FRAGMENT_NODE||t.nodeType===K.DOCUMENT_TYPE_NODE||t.nodeType===K.ELEMENT_NODE||t.nodeType===K.PROCESSING_INSTRUCTION_NODE||t.nodeType===K.TEXT_NODE)}(e)||it(e)&&t.nodeType!==K.DOCUMENT_NODE)throw new d(d.HIERARCHY_REQUEST_ERR,"Unexpected node type "+e.nodeType+" for parent node type "+t.nodeType)}function ut(t,e,s){var i=t.childNodes||[],o=e.childNodes||[];if(e.nodeType===K.DOCUMENT_FRAGMENT_NODE){var r=o.filter(nt);if(r.length>1||n(o,ot))throw new d(d.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===r.length&&!rt(t,s))throw new d(d.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(nt(e)&&!rt(t,s))throw new d(d.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(it(e)){if(n(i,it))throw new d(d.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var a=n(i,nt);if(s&&i.indexOf(a)1||n(o,ot))throw new d(d.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===r.length&&!at(t,s))throw new d(d.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(nt(e)&&!at(t,s))throw new d(d.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(it(e)){function l(t){return it(t)&&t!==s}if(n(i,l))throw new d(d.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var a=n(i,nt);if(s&&i.indexOf(a)=0;f--){if(""===(m=i[f]).prefix&&m.namespace===t.namespaceURI){p=m.namespace;break}}if(p!==t.namespaceURI)for(f=i.length-1;f>=0;f--){var m;if((m=i[f]).namespace===t.namespaceURI){m.prefix&&(g=m.prefix+":"+h);break}}}e.push("<",g);for(var C=0;C");else{if(e.push(">"),n&&l(h))for(;a;)a.data?e.push(a.data):xt(a,e,s,i.slice()),a=a.nextSibling;else for(;a;)xt(a,e,s,i.slice()),a=a.nextSibling;e.push("")}return;case O:case j:for(a=t.firstChild;a;)xt(a,e,s,i.slice()),a=a.nextSibling;return;case b:return bt(e,t.name,t.value);case x:return e.push(t.data.replace(/[<&>]/g,Q));case R:return e.push(A.CDATA_START,t.data,A.CDATA_END);case G:return e.push(A.COMMENT_START,t.data,A.COMMENT_END);case D:var M=t.publicId,E=t.systemId;return e.push(A.DOCTYPE_DECL_START," ",t.name),M?(e.push(" ",A.PUBLIC," ",M),E&&"."!==E&&e.push(" ",E)):E&&"."!==E&&e.push(" ",A.SYSTEM," ",E),t.internalSubset&&e.push(" [",t.internalSubset,"]"),void e.push(">");case P:return e.push("");case T:return e.push("&",t.nodeName,";");default:e.push("??",t.nodeName)}}function Rt(t,e,s){var i;switch(e.nodeType){case S:(i=e.cloneNode(!1)).ownerDocument=t;case j:break;case b:s=!0}if(i||(i=e.cloneNode(!1)),i.ownerDocument=t,i.parentNode=null,s)for(var n=e.firstChild;n;)i.appendChild(Rt(t,n,s)),n=n.nextSibling;return i}function Tt(t,e,s){var i=new e.constructor(g);for(var n in e)if(r(e,n)){var o=e[n];"object"!=typeof o&&o!=i[n]&&(i[n]=o)}switch(e.childNodes&&(i.childNodes=new W),i.ownerDocument=t,i.nodeType){case S:var a=e.attributes,l=i.attributes=new H,u=a.length;l._ownerElement=i;for(var h=0;h=0&&tq(e.ownerDocument)?L.DOCUMENT_POSITION_FOLLOWING:L.DOCUMENT_POSITION_PRECEDING);var a=U(e),l=U(s);if(!i&&l.indexOf(e)>=0||n&&e===s)return L.DOCUMENT_POSITION_CONTAINS+L.DOCUMENT_POSITION_PRECEDING;if(!n&&a.indexOf(s)>=0||i&&e===s)return L.DOCUMENT_POSITION_CONTAINED_BY+L.DOCUMENT_POSITION_FOLLOWING;var u=z(l,a);for(var h in u.childNodes){var c=u.childNodes[h];if(c===s)return L.DOCUMENT_POSITION_FOLLOWING;if(c===e)return L.DOCUMENT_POSITION_PRECEDING;if(l.indexOf(c)>=0)return L.DOCUMENT_POSITION_FOLLOWING;if(a.indexOf(c)>=0)return L.DOCUMENT_POSITION_PRECEDING}return 0}},M(w,K),M(w,K.prototype),M(L,K),M(L,K.prototype),$.prototype={implementation:null,nodeName:"#document",nodeType:O,doctype:null,documentElement:null,_inc:1,insertBefore:function(t,e){if(t.nodeType===j){for(var s=t.firstChild;s;){var i=s.nextSibling;this.insertBefore(s,e),s=i}return t}return ct(this,t,e),t.ownerDocument=this,null===this.documentElement&&t.nodeType===S&&(this.documentElement=t),t},removeChild:function(t){var e=st(this,t);return e===this.documentElement&&(this.documentElement=null),e},replaceChild:function(t,e){ct(this,t,e,ht),t.ownerDocument=this,e&&this.removeChild(e),nt(t)&&(this.documentElement=t)},importNode:function(t,e){return Rt(this,t,e)},getElementById:function(t){var e=null;return J(this.documentElement,(function(s){if(s.nodeType==S&&s.getAttribute("id")==t)return e=s,!0})),e},createElement:function(t){var e=new gt(g);return e.ownerDocument=this,"html"===this.type&&(t=t.toLowerCase()),o(this.contentType)&&(e.namespaceURI=c.HTML),e.nodeName=t,e.tagName=t,e.localName=t,e.childNodes=new W,(e.attributes=new H)._ownerElement=e,e},createDocumentFragment:function(){var t=new vt(g);return t.ownerDocument=this,t.childNodes=new W,t},createTextNode:function(t){var e=new ft(g);return e.ownerDocument=this,e.childNodes=new W,e.appendData(t),e},createComment:function(t){var e=new At(g);return e.ownerDocument=this,e.childNodes=new W,e.appendData(t),e},createCDATASection:function(t){var e=new mt(g);return e.ownerDocument=this,e.childNodes=new W,e.appendData(t),e},createProcessingInstruction:function(t,e){var s=new Mt(g);return s.ownerDocument=this,s.childNodes=new W,s.nodeName=s.target=t,s.nodeValue=s.data=e,s},createAttribute:function(t){if(!A.QName_exact.test(t))throw new d(d.INVALID_CHARACTER_ERR,'invalid character in name "'+t+'"');return"html"===this.type&&(t=t.toLowerCase()),this._createAttribute(t)},_createAttribute:function(t){var e=new pt(g);return e.ownerDocument=this,e.childNodes=new W,e.name=t,e.nodeName=t,e.localName=t,e.specified=!0,e},createEntityReference:function(t){if(!A.Name.test(t))throw new d(d.INVALID_CHARACTER_ERR,'not a valid xml name "'+t+'"');if("html"===this.type)throw new d("document is an html document",f.NotSupportedError);var e=new _t(g);return e.ownerDocument=this,e.childNodes=new W,e.nodeName=t,e},createElementNS:function(t,e){var s=v(t,e),i=new gt(g),n=i.attributes=new H;return i.childNodes=new W,i.ownerDocument=this,i.nodeName=e,i.tagName=e,i.namespaceURI=s[0],i.prefix=s[1],i.localName=s[2],n._ownerElement=i,i},createAttributeNS:function(t,e){var s=v(t,e),i=new pt(g);return i.ownerDocument=this,i.childNodes=new W,i.nodeName=e,i.name=e,i.specified=!0,i.namespaceURI=s[0],i.prefix=s[1],i.localName=s[2],i}},E($,K),gt.prototype={nodeType:S,attributes:null,getQualifiedName:function(){return this.prefix?this.prefix+":"+this.localName:this.localName},_isInHTMLDocumentAndNamespace:function(){return"html"===this.ownerDocument.type&&this.namespaceURI===c.HTML},hasAttribute:function(t){return!!this.getAttributeNode(t)},getAttribute:function(t){var e=this.getAttributeNode(t);return e?e.value:null},getAttributeNode:function(t){return this._isInHTMLDocumentAndNamespace()&&(t=t.toLowerCase()),this.attributes.getNamedItem(t)},setAttribute:function(t,e){this._isInHTMLDocumentAndNamespace()&&(t=t.toLowerCase());var s=this.getAttributeNode(t);s?s.value=s.nodeValue=""+e:((s=this.ownerDocument._createAttribute(t)).value=s.nodeValue=""+e,this.setAttributeNode(s))},removeAttribute:function(t){var e=this.getAttributeNode(t);e&&this.removeAttributeNode(e)},setAttributeNode:function(t){return this.attributes.setNamedItem(t)},setAttributeNodeNS:function(t){return this.attributes.setNamedItemNS(t)},removeAttributeNode:function(t){return this.attributes.removeNamedItem(t.nodeName)},removeAttributeNS:function(t,e){var s=this.getAttributeNodeNS(t,e);s&&this.removeAttributeNode(s)},hasAttributeNS:function(t,e){return null!=this.getAttributeNodeNS(t,e)},getAttributeNS:function(t,e){var s=this.getAttributeNodeNS(t,e);return s?s.value:null},setAttributeNS:function(t,e,s){var i=v(t,e)[2],n=this.getAttributeNodeNS(t,i);n?n.value=n.nodeValue=""+s:((n=this.ownerDocument.createAttributeNS(t,e)).value=n.nodeValue=""+s,this.setAttributeNode(n))},getAttributeNodeNS:function(t,e){return this.attributes.getNamedItemNS(t,e)},getElementsByClassName:function(t){var e=y(t);return new F(this,(function(s){var i=[];return e.length>0&&J(s,(function(n){if(n!==s&&n.nodeType===S){var o=n.getAttribute("class");if(o){var r=t===o;if(!r){var a=y(o);r=e.every((l=a,function(t){return l&&-1!==l.indexOf(t)}))}r&&i.push(n)}}var l})),i}))},getElementsByTagName:function(t){var e="html"===(this.nodeType===O?this:this.ownerDocument).type,s=t.toLowerCase();return new F(this,(function(i){var n=[];return J(i,(function(o){o!==i&&o.nodeType===S&&(("*"===t||o.getQualifiedName()===(e&&o.namespaceURI===c.HTML?s:t))&&n.push(o))})),n}))},getElementsByTagNameNS:function(t,e){return new F(this,(function(s){var i=[];return J(s,(function(n){n===s||n.nodeType!==S||"*"!==t&&n.namespaceURI!==t||"*"!==e&&n.localName!=e||i.push(n)})),i}))}},$.prototype.getElementsByClassName=gt.prototype.getElementsByClassName,$.prototype.getElementsByTagName=gt.prototype.getElementsByTagName,$.prototype.getElementsByTagNameNS=gt.prototype.getElementsByTagNameNS,E(gt,K),pt.prototype.nodeType=b,E(pt,K),dt.prototype={data:"",substringData:function(t,e){return this.data.substring(t,t+e)},appendData:function(t){t=this.data+t,this.nodeValue=this.data=t,this.length=t.length},insertData:function(t,e){this.replaceData(t,0,e)},deleteData:function(t,e){this.replaceData(t,e,"")},replaceData:function(t,e,s){s=this.data.substring(0,t)+s+this.data.substring(t+e),this.nodeValue=this.data=s,this.length=s.length}},E(dt,K),ft.prototype={nodeName:"#text",nodeType:x,splitText:function(t){var e=this.data,s=e.substring(t);e=e.substring(0,t),this.data=this.nodeValue=e,this.length=e.length;var i=this.ownerDocument.createTextNode(s);return this.parentNode&&this.parentNode.insertBefore(i,this.nextSibling),i}},E(ft,dt),At.prototype={nodeName:"#comment",nodeType:G},E(At,dt),mt.prototype={nodeName:"#cdata-section",nodeType:R},E(mt,ft),Ct.prototype.nodeType=D,E(Ct,K),It.prototype.nodeType=k,E(It,K),yt.prototype.nodeType=N,E(yt,K),_t.prototype.nodeType=T,E(_t,K),vt.prototype.nodeName="#document-fragment",vt.prototype.nodeType=j,E(vt,K),Mt.prototype.nodeType=P,E(Mt,dt),Et.prototype.serializeToString=function(t,e){return wt.call(t,e)},K.prototype.toString=wt;try{if(Object.defineProperty){function Pt(t){switch(t.nodeType){case S:case j:var e=[];for(t=t.firstChild;t;)7!==t.nodeType&&8!==t.nodeType&&e.push(Pt(t)),t=t.nextSibling;return e.join("");default:return t.nodeValue}}Object.defineProperty(F.prototype,"length",{get:function(){return B(this),this.$$length}}),Object.defineProperty(K.prototype,"textContent",{get:function(){return Pt(this)},set:function(t){switch(this.nodeType){case S:case j:for(;this.firstChild;)this.removeChild(this.firstChild);(t||String(t))&&this.appendChild(this.ownerDocument.createTextNode(t));break;default:this.data=t,this.value=t,this.nodeValue=t}}}),Nt=function(t,e,s){t["$$"+e]=s}}}catch(Gt){}e._updateLiveList=B,e.Attr=pt,e.CDATASection=mt,e.CharacterData=dt,e.Comment=At,e.Document=$,e.DocumentFragment=vt,e.DocumentType=Ct,e.DOMImplementation=Z,e.Element=gt,e.Entity=yt,e.EntityReference=_t,e.LiveNodeList=F,e.NamedNodeMap=H,e.Node=K,e.NodeList=W,e.Notation=It,e.Text=ft,e.ProcessingInstruction=Mt,e.XMLSerializer=Et},6559:(t,e,s)=>{"use strict";var i=s(4582).freeze;e.XML_ENTITIES=i({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),e.HTML_ENTITIES=i({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),e.entityMap=e.HTML_ENTITIES},2983:(t,e,s)=>{"use strict";function i(t,e){t.prototype=Object.create(Error.prototype,{constructor:{value:t},name:{value:t.name,enumerable:!0,writable:e}})}var n=s(4582).freeze({Error:"Error",IndexSizeError:"IndexSizeError",DomstringSizeError:"DomstringSizeError",HierarchyRequestError:"HierarchyRequestError",WrongDocumentError:"WrongDocumentError",InvalidCharacterError:"InvalidCharacterError",NoDataAllowedError:"NoDataAllowedError",NoModificationAllowedError:"NoModificationAllowedError",NotFoundError:"NotFoundError",NotSupportedError:"NotSupportedError",InUseAttributeError:"InUseAttributeError",InvalidStateError:"InvalidStateError",SyntaxError:"SyntaxError",InvalidModificationError:"InvalidModificationError",NamespaceError:"NamespaceError",InvalidAccessError:"InvalidAccessError",ValidationError:"ValidationError",TypeMismatchError:"TypeMismatchError",SecurityError:"SecurityError",NetworkError:"NetworkError",AbortError:"AbortError",URLMismatchError:"URLMismatchError",QuotaExceededError:"QuotaExceededError",TimeoutError:"TimeoutError",InvalidNodeTypeError:"InvalidNodeTypeError",DataCloneError:"DataCloneError",EncodingError:"EncodingError",NotReadableError:"NotReadableError",UnknownError:"UnknownError",ConstraintError:"ConstraintError",DataError:"DataError",TransactionInactiveError:"TransactionInactiveError",ReadOnlyError:"ReadOnlyError",VersionError:"VersionError",OperationError:"OperationError",NotAllowedError:"NotAllowedError",OptOutError:"OptOutError"}),o=Object.keys(n);function r(t){return"number"==typeof t&&t>=1&&t<=25}function a(t,e){var s;r(t)?(this.name=o[t],this.message=e||""):(this.message=t,this.name="string"==typeof(s=e)&&s.substring(s.length-n.Error.length)===n.Error?e:n.Error),Error.captureStackTrace&&Error.captureStackTrace(this,a)}i(a,!0),Object.defineProperties(a.prototype,{code:{enumerable:!0,get:function(){var t=o.indexOf(this.name);return r(t)?t:0}}});for(var l={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25},u=Object.entries(l),h=0;h{"use strict";function s(t){try{"function"!=typeof t&&(t=RegExp);var e=new t("𝌆","u").exec("𝌆");return!!e&&2===e[0].length}catch(t){}return!1}var i=s();function n(t){if("["!==t.source[0])throw new Error(t+" can not be used with chars");return t.source.slice(1,t.source.lastIndexOf("]"))}function o(t,e){if("["!==t.source[0])throw new Error("/"+t.source+"/ can not be used with chars_without");if(!e||"string"!=typeof e)throw new Error(JSON.stringify(e)+" is not a valid search");if(-1===t.source.indexOf(e))throw new Error('"'+e+'" is not is /'+t.source+"/");if("-"===e&&1!==t.source.indexOf(e))throw new Error('"'+e+'" is not at the first postion of /'+t.source+"/");return new RegExp(t.source.replace(e,""),i?"u":"")}function r(t){var e=this;return new RegExp(Array.prototype.slice.call(arguments).map((function(t){var s="string"==typeof t;if(s&&void 0===e&&"|"===t)throw new Error("use regg instead of reg to wrap expressions with `|`!");return s?t:t.source})).join(""),i?"mu":"m")}function a(t){if(0===arguments.length)throw new Error("no parameters provided");return r.apply(a,["(?:"].concat(Array.prototype.slice.call(arguments),[")"]))}var l=/[-\x09\x0A\x0D\x20-\x2C\x2E-\uD7FF\uE000-\uFFFD]/;i&&(l=r("[",n(l),"\\u{10000}-\\u{10FFFF}","]"));var u=/[\x20\x09\x0D\x0A]/,h=n(u),c=r(u,"+"),g=r(u,"*"),p=/[:_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;i&&(p=r("[",n(p),"\\u{10000}-\\u{10FFFF}","]"));var d=r("[",n(p),n(/[-.0-9\xB7]/),n(/[\u0300-\u036F\u203F-\u2040]/),"]"),f=r(p,d,"*"),A=r(d,"+"),m=r("&",f,";"),C=a(/&#[0-9]+;|&#x[0-9a-fA-F]+;/),I=a(m,"|",C),y=r("%",f,";"),_=a(r('"',a(/[^%&"]/,"|",y,"|",I),"*",'"'),"|",r("'",a(/[^%&']/,"|",y,"|",I),"*","'")),v=a('"',a(/[^<&"]/,"|",I),"*",'"',"|","'",a(/[^<&']/,"|",I),"*","'"),M=r(o(p,":"),o(d,":"),"*"),E=r(M,a(":",M),"?"),w=r("^",E,"$"),S=r("(",E,")"),b=a(/"[^"]*"|'[^']*'/),x=r(/^<\?/,"(",f,")",a(c,"(",l,"*?)"),"?",/\?>/),R=/[\x20\x0D\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/,T=a('"',R,'*"',"|","'",o(R,"'"),"*'"),N="\x3c!--",P=r(N,a(o(l,"-"),"|",r("-",o(l,"-"))),"*","--\x3e"),G="#PCDATA",O=a(r(/\(/,g,G,a(g,/\|/,g,E),"*",g,/\)\*/),"|",r(/\(/,g,G,g,/\)/)),D=a("EMPTY","|","ANY","|",O,"|",r(/\([^>]+\)/,/[?*+]?/)),j=r(""),k=r("NOTATION",c,/\(/,g,f,a(g,/\|/,g,f),"*",g,/\)/),L=r(/\(/,g,A,a(g,/\|/,g,A),"*",g,/\)/),U=a(k,"|",L),z=a(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/,"|",U),q=a(/#REQUIRED|#IMPLIED/,"|",a(a("#FIXED",c),"?",v)),W=r(""),F="SYSTEM",B="PUBLIC",H=a(a(F,c,b),"|",a(B,c,T,c,b)),V=r("^",a(a(F,c,"(?",b,")"),"|",a(B,c,"(?",T,")",c,"(?",b,")"))),Y=a(c,"NDATA",c,f),X=""),K=a(_,"|",H),Q=a(Z,"|",r(X,c,"%",c,f,c,K,g,">")),J=r(B,c,T),$=r(""),tt=r(g,"=",g),et=/1[.]\d+/,st=r(c,"version",tt,a("'",et,"'","|",'"',et,'"')),it=/[A-Za-z][-A-Za-z0-9._]*/,nt=r(/^<\?xml/,st,a(c,"encoding",tt,a('"',it,'"',"|","'",it,"'")),"?",a(c,"standalone",tt,a("'",a("yes","|","no"),"'","|",'"',a("yes","|","no"),'"')),"?",g,/\?>/),ot=r(l,"*?",/\]\]>/),rt=r(/",e.CDSect=rt,e.Char=l,e.Comment=P,e.COMMENT_START=N,e.COMMENT_END="--\x3e",e.DOCTYPE_DECL_START="{"use strict";var i=s(4582);i.assign,i.hasDefaultHTMLNamespace,i.isHTMLMimeType,i.isValidMimeType,i.MIME_TYPE,i.NAMESPACE;var n=s(2983);n.DOMException,n.DOMExceptionName,n.ExceptionCode,n.ParseError;var o=s(4722);o.Attr,o.CDATASection,o.CharacterData,o.Comment,o.Document,o.DocumentFragment,o.DocumentType,o.DOMImplementation,o.Element,o.Entity,o.EntityReference,o.LiveNodeList,o.NamedNodeMap,o.Node,o.NodeList,o.Notation,o.ProcessingInstruction,o.Text,o.XMLSerializer;var r=s(5752);e.S4=r.DOMParser,r.onErrorStopParsing,r.onWarningStopParsing},4466:(t,e,s)=>{"use strict";var i=s(4582),n=s(2763),o=s(2983),r=i.isHTMLEscapableRawTextElement,a=i.isHTMLMimeType,l=i.isHTMLRawTextElement,u=i.hasOwn,h=i.NAMESPACE,c=o.ParseError,g=o.DOMException;function p(){}p.prototype={parse:function(t,e,s){var o=this.domBuilder;o.startDocument(),I(e,e=Object.create(null)),function(t,e,s,o,r){var l=a(o.mimeType);t.indexOf(n.UNICODE_REPLACEMENT_CHARACTER)>=0&&r.warning("Unicode replacement character detected, source encoding issues?");function h(t){if(t>65535){var e=55296+((t-=65536)>>10),s=56320+(1023&t);return String.fromCharCode(e,s)}return String.fromCharCode(t)}function p(t){var e=";"===t[t.length-1]?t:t+";";if(!l&&e!==t)return r.error("EntityRef: expecting ;"),t;var i=n.Reference.exec(e);if(!i||i[0].length!==e.length)return r.error("entity not matching Reference production: "+t),t;var o=e.slice(1,-1);return u(s,o)?s[o]:"#"===o.charAt(0)?h(parseInt(o.substr(1).replace("x","0x"))):(r.error("entity not found:"+t),t)}function I(e){if(e>T){var s=t.substring(T,e).replace(d,p);b&&y(T),o.characters(s,0,e-T),T=e}}function y(e,s){for(;e>=w&&(s=S.exec(t));)E=s.index,w=E+s[0].length,b.lineNumber++;b.columnNumber=e-E+1}var E=0,w=0,S=/.*(?:\r\n?|\n)|.*$/g,b=o.locator,x=[{currentNSMap:e}],R=[],T=0;for(;;){try{var N=t.indexOf("<",T);if(N<0){if(!l&&R.length>0)return r.fatalError("unclosed xml tag(s): "+R.join(", "));if(!t.substring(T).match(/^\s*$/)){var P=o.doc,G=P.createTextNode(t.substr(T));if(P.documentElement)return r.error("Extra content at the end of the document");P.appendChild(G),o.currentElement=G}return}if(N>T){var O=t.substring(T,N);l||0!==R.length||(O=O.replace(new RegExp(n.S_OPT.source,"g"),""))&&r.error("Unexpected content outside root element: '"+O+"'"),I(N)}switch(t.charAt(N+1)){case"/":var D=t.indexOf(">",N+2),j=t.substring(N+2,D>0?D:void 0);if(!j)return r.fatalError("end tag name missing");var k=D>0&&n.reg("^",n.QName_group,n.S_OPT,"$").exec(j);if(!k)return r.fatalError('end tag name contains invalid characters: "'+j+'"');if(!o.currentElement&&!o.doc.documentElement)return;var L=R[R.length-1]||o.currentElement.tagName||o.doc.documentElement.tagName||"";if(L!==k[1]){var U=k[1].toLowerCase();if(!l||L.toLowerCase()!==U)return r.fatalError('Opening and ending tag mismatch: "'+L+'" != "'+j+'"')}var z=x.pop();R.pop();var q=z.localNSMap;if(o.endElement(z.uri,z.localName,L),q)for(var W in q)u(q,W)&&o.endPrefixMapping(W);D++;break;case"?":b&&y(N),D=v(t,N,o,r);break;case"!":b&&y(N),D=_(t,N,o,r,l);break;default:b&&y(N);var F=new M,B=x[x.length-1].currentNSMap,H=(D=A(t,N,F,B,p,r,l),F.length);if(F.closed||(l&&i.isHTMLVoidElement(F.tagName)?F.closed=!0:R.push(F.tagName)),b&&H){for(var V=f(b,{}),Y=0;YT?T=D:I(Math.max(N,T)+1)}}(t,e,s,o,this.errorHandler),o.endDocument()}};var d=/&#?\w+;?/g;function f(t,e){return e.lineNumber=t.lineNumber,e.columnNumber=t.columnNumber,e}function A(t,e,s,i,n,o,r){function a(t,e,i){return u(s.attributeNames,t)?o.fatalError("Attribute "+t+" redefined"):!r&&e.indexOf("<")>=0?o.fatalError("Unescaped '<' not allowed in attributes values"):void s.addValue(t,e.replace(/[\t\n\r]/g," ").replace(d,n),i)}for(var l,h=++e,c=0;;){var g=t.charAt(h);switch(g){case"=":if(1===c)l=t.slice(e,h),c=3;else{if(2!==c)throw new Error("attribute equal must after attrName");c=3}break;case"'":case'"':if(3===c||1===c){if(1===c&&(o.warning('attribute value must after "="'),l=t.slice(e,h)),e=h+1,!((h=t.indexOf(g,e))>0))throw new Error("attribute value no end '"+g+"' match");a(l,p=t.slice(e,h),e-1),c=5}else{if(4!=c)throw new Error('attribute value must after "="');a(l,p=t.slice(e,h),e),o.warning('attribute "'+l+'" missed start quot('+g+")!!"),e=h+1,c=5}break;case"/":switch(c){case 0:s.setTagName(t.slice(e,h));case 5:case 6:case 7:c=7,s.closed=!0;case 4:case 1:break;case 2:s.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return o.error("unexpected end of input"),0==c&&s.setTagName(t.slice(e,h)),h;case">":switch(c){case 0:s.setTagName(t.slice(e,h));case 5:case 6:case 7:break;case 4:case 1:"/"===(p=t.slice(e,h)).slice(-1)&&(s.closed=!0,p=p.slice(0,-1));case 2:2===c&&(p=l),4==c?(o.warning('attribute "'+p+'" missed quot(")!'),a(l,p,e)):(r||o.warning('attribute "'+p+'" missed value!! "'+p+'" instead!!'),a(p,p,e));break;case 3:if(!r)return o.fatalError("AttValue: ' or \" expected")}return h;case"€":g=" ";default:if(g<=" ")switch(c){case 0:s.setTagName(t.slice(e,h)),c=6;break;case 1:l=t.slice(e,h),c=2;break;case 4:var p=t.slice(e,h);o.warning('attribute "'+p+'" missed quot(")!!'),a(l,p,e);case 5:c=6}else switch(c){case 2:r||o.warning('attribute "'+l+'" missed value!! "'+l+'" instead2!!'),a(l,l,e),e=h,c=1;break;case 5:o.warning('attribute space is required"'+l+'"!!');case 6:c=1,e=h;break;case 3:c=4,e=h;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}h++}}function m(t,e,s){for(var i=t.tagName,n=null,o=t.length;o--;){var r=t[o],a=r.qName,l=r.value;if((d=a.indexOf(":"))>0)var c=r.prefix=a.slice(0,d),g=a.slice(d+1),p="xmlns"===c&&g;else g=a,c=null,p="xmlns"===a&&"";r.localName=g,!1!==p&&(null==n&&(n=Object.create(null),I(s,s=Object.create(null))),s[p]=n[p]=l,r.uri=h.XMLNS,e.startPrefixMapping(p,l))}for(o=t.length;o--;)(r=t[o]).prefix&&("xml"===r.prefix&&(r.uri=h.XML),"xmlns"!==r.prefix&&(r.uri=s[r.prefix]));var d;(d=i.indexOf(":"))>0?(c=t.prefix=i.slice(0,d),g=t.localName=i.slice(d+1)):(c=null,g=t.localName=i);var f=t.uri=s[c||""];if(e.startElement(f,g,i,t),!t.closed)return t.currentNSMap=s,t.localNSMap=n,!0;if(e.endElement(f,g,i),n)for(c in n)u(n,c)&&e.endPrefixMapping(c)}function C(t,e,s,i,n){var o=r(s);if(o||l(s)){var a=t.indexOf("",e),u=t.substring(e+1,a);return o&&(u=u.replace(d,i)),n.characters(u,0,u.length),a}return e+1}function I(t,e){for(var s in t)u(t,s)&&(e[s]=t[s])}function y(t,e){var s=e;function i(e){return e=e||0,t.charAt(s+e)}function o(t){s+=t=t||1}function r(){return t.substring(s)}return{char:i,getIndex:function(){return s},getMatch:function(t){var e=n.reg("^",t).exec(r());return e?(o(e[0].length),e[0]):null},getSource:function(){return t},skip:o,skipBlanks:function(){for(var e=0;s"!==r.char()?i.fatalError("doctype not terminated with > at position "+r.getIndex()):(r.skip(1),s.startDTD(u.name,u.publicId,u.systemId,u.internalSubset),s.endDTD(),r.getIndex());default:return i.fatalError('Not well-formed XML starting with "0)return i.fatalError("processing instruction at position "+e+" is an xml declaration which is only at the start of the document");if(!n.XMLDecl.test(t.substring(e)))return i.fatalError("xml declaration is not well-formed")}return s.processingInstruction(o[1],o[2]),e+o[0].length}function M(){this.attributeNames=Object.create(null)}M.prototype={setTagName:function(t){if(!n.QName_exact.test(t))throw new Error("invalid tagName:"+t);this.tagName=t},addValue:function(t,e,s){if(!n.QName_exact.test(t))throw new Error("invalid attribute:"+t);this.attributeNames[t]=this.length,this[this.length++]={qName:t,value:e,offset:s}},length:0,getLocalName:function(t){return this[t].localName},getLocator:function(t){return this[t].locator},getQName:function(t){return this[t].qName},getURI:function(t){return this[t].uri},getValue:function(t){return this[t].value}},e.XMLReader=p,e.parseUtils=y,e.parseDoctypeCommentOrCData=_},6964:function(t,e,s){ /*! diff --git a/dist/modules/GpfExtOlGeoportalOverviewMap.css b/dist/modules/GpfExtOlGeoportalOverviewMap.css index 175f5a13..38998fc6 100644 --- a/dist/modules/GpfExtOlGeoportalOverviewMap.css +++ b/dist/modules/GpfExtOlGeoportalOverviewMap.css @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */div[id^=GPoverviewMap-]{bottom:10.5em;left:.5em}.ol-overviewmap.ol-collapsed .ol-overviewmap-map{border:none;height:100px;width:100px}.ol-overviewmap .ol-overviewmap-box{border:2px solid red}.ol-overviewmap:not(.ol-collapsed) button{position:relative} /*# sourceMappingURL=GpfExtOlGeoportalOverviewMap.css.map*/ \ No newline at end of file diff --git a/dist/modules/GpfExtOlGeoportalOverviewMap.js b/dist/modules/GpfExtOlGeoportalOverviewMap.js index 3141c0fc..b03b5e30 100644 --- a/dist/modules/GpfExtOlGeoportalOverviewMap.js +++ b/dist/modules/GpfExtOlGeoportalOverviewMap.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var e={4582:(e,t)=>{"use strict";function r(e,t){return void 0===t&&(t=Object),t&&"function"==typeof t.getOwnPropertyDescriptors&&(e=t.create(null,t.getOwnPropertyDescriptors(e))),t&&"function"==typeof t.freeze?t.freeze(e):e}function o(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var n=r({allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,formnovalidate:!0,hidden:!0,ismap:!0,itemscope:!0,loop:!0,multiple:!0,muted:!0,nomodule:!0,novalidate:!0,open:!0,playsinline:!0,readonly:!0,required:!0,reversed:!0,selected:!0});var i=r({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});var s=r({script:!1,style:!1,textarea:!0,title:!0});function a(e){return e===l.HTML}var l=r({HTML:"text/html",XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),c=Object.keys(l).map((function(e){return l[e]}));var u=r({HTML:"http://www.w3.org/1999/xhtml",SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});t.assign=function(e,t){if(null===e||"object"!=typeof e)throw new TypeError("target is not an object");for(var r in t)o(t,r)&&(e[r]=t[r]);return e},t.find=function(e,t,r){if(void 0===r&&(r=Array.prototype),e&&"function"==typeof r.find)return r.find.call(e,t);for(var n=0;n-1},t.MIME_TYPE=l,t.NAMESPACE=u},5752:(e,t,r)=>{"use strict";var o=r(4582),n=r(4722),i=r(2983),s=r(6559),a=r(4466),l=n.DOMImplementation,c=o.hasDefaultHTMLNamespace,u=o.isHTMLMimeType,p=o.isValidMimeType,h=o.MIME_TYPE,f=o.NAMESPACE,d=i.ParseError,g=a.XMLReader;function m(e){return e.replace(/\r[\n\u0085]/g,"\n").replace(/[\r\u0085\u2028]/g,"\n")}function E(e){if(e=e||{locator:!0},this.assign=e.assign||o.assign,this.domHandler=e.domHandler||y,this.onError=e.onError||e.errorHandler,e.errorHandler&&"function"!=typeof e.errorHandler)throw new TypeError("errorHandler object is no longer supported, switch to onError!");e.errorHandler&&e.errorHandler("warning","The `errorHandler` option has been deprecated, use `onError` instead!",this),this.normalizeLineEndings=e.normalizeLineEndings||m,this.locator=!!e.locator,this.xmlns=this.assign(Object.create(null),e.xmlns)}function y(e){var t=e||{};this.mimeType=t.mimeType||h.XML_APPLICATION,this.defaultNamespace=t.defaultNamespace||null,this.cdata=!1,this.currentElement=void 0,this.doc=void 0,this.locator=void 0,this.onError=t.onError}function v(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function w(e,t,r){return"string"==typeof e?e.substr(t,r):e.length>=t+r||t?new java.lang.String(e,t,r)+"":e}function b(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}E.prototype.parseFromString=function(e,t){if(!p(t))throw new TypeError('DOMParser.parseFromString: the provided mimeType "'+t+'" is not valid.');var r=this.assign(Object.create(null),this.xmlns),n=s.XML_ENTITIES,i=r[""]||null;c(t)?(n=s.HTML_ENTITIES,i=f.HTML):t===h.XML_SVG_IMAGE&&(i=f.SVG),r[""]=i,r.xml=r.xml||f.XML;var a=new this.domHandler({mimeType:t,defaultNamespace:i,onError:this.onError}),l=this.locator?{}:void 0;this.locator&&a.setDocumentLocator(l);var u=new g;return u.errorHandler=a,u.domBuilder=a,!o.isHTMLMimeType(t)&&"string"!=typeof e&&u.errorHandler.fatalError("source is not a string"),u.parse(this.normalizeLineEndings(String(e)),r,n),a.doc.documentElement||u.errorHandler.fatalError("missing root element"),a.doc},y.prototype={startDocument:function(){var e=new l;this.doc=u(this.mimeType)?e.createHTMLDocument(!1):e.createDocument(this.defaultNamespace,"")},startElement:function(e,t,r,o){var n=this.doc,i=n.createElementNS(e,r||t),s=o.length;b(this,i),this.currentElement=i,this.locator&&v(this.locator,i);for(var a=0;a{"use strict";var o=r(4582),n=o.find,i=o.hasDefaultHTMLNamespace,s=o.hasOwn,a=o.isHTMLMimeType,l=o.isHTMLRawTextElement,c=o.isHTMLVoidElement,u=o.MIME_TYPE,p=o.NAMESPACE,h=Symbol(),f=r(2983),d=f.DOMException,g=f.DOMExceptionName,m=r(2763);function E(e){if(e!==h)throw new TypeError("Illegal constructor")}function y(e){return""!==e}function v(e,t){return s(e,t)||(e[t]=!0),e}function w(e){if(!e)return[];var t=function(e){return e?e.split(/[\t\n\f\r ]+/).filter(y):[]}(e);return Object.keys(t.reduce(v,{}))}function b(e){if(!m.QName_exact.test(e))throw new d(d.INVALID_CHARACTER_ERR,'invalid character in qualified name "'+e+'"')}function A(e,t){b(t),e=e||null;var r=null,n=t;if(t.indexOf(":")>=0){var i=t.split(":");r=i[0],n=i[1]}if(null!==r&&null===e)throw new d(d.NAMESPACE_ERR,"prefix is non-null and namespace is null");if("xml"===r&&e!==o.NAMESPACE.XML)throw new d(d.NAMESPACE_ERR,'prefix is "xml" and namespace is not the XML namespace');if(("xmlns"===r||"xmlns"===t)&&e!==o.NAMESPACE.XMLNS)throw new d(d.NAMESPACE_ERR,'either qualifiedName or prefix is "xmlns" and namespace is not the XMLNS namespace');if(e===o.NAMESPACE.XMLNS&&"xmlns"!==r&&"xmlns"!==t)throw new d(d.NAMESPACE_ERR,'namespace is the XMLNS namespace and neither qualifiedName nor prefix is "xmlns"');return[e,r,n]}function S(e,t){for(var r in e)s(e,r)&&(t[r]=e[r])}function T(e,t){var r=e.prototype;if(!(r instanceof t)){function o(){}o.prototype=t.prototype,S(r,o=new o),e.prototype=r=o}r.constructor!=e&&("function"!=typeof e&&console.error("unknown Class:"+e),r.constructor=e)}var R={},_=R.ELEMENT_NODE=1,N=R.ATTRIBUTE_NODE=2,O=R.TEXT_NODE=3,x=R.CDATA_SECTION_NODE=4,C=R.ENTITY_REFERENCE_NODE=5,I=R.ENTITY_NODE=6,M=R.PROCESSING_INSTRUCTION_NODE=7,P=R.COMMENT_NODE=8,D=R.DOCUMENT_NODE=9,L=R.DOCUMENT_TYPE_NODE=10,k=R.DOCUMENT_FRAGMENT_NODE=11,U=R.NOTATION_NODE=12,q=o.freeze({DOCUMENT_POSITION_DISCONNECTED:1,DOCUMENT_POSITION_PRECEDING:2,DOCUMENT_POSITION_FOLLOWING:4,DOCUMENT_POSITION_CONTAINS:8,DOCUMENT_POSITION_CONTAINED_BY:16,DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:32});function G(e){for(var t=[];e.parentNode||e.ownerElement;)e=e.parentNode||e.ownerElement,t.unshift(e);return t}function j(e,t){if(t.length=0){for(var n=t.length-1;o<=n;)t[o]=t[++o];if(t.length=n,e){var i=e.ownerDocument;i&&ee(i,e,r),r.ownerElement=null}}}function J(){}function K(e){E(e)}function Q(e){return("<"==e?"<":">"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function Z(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(Z(e,t))return!0}while(e=e.nextSibling)}function $(e,t){E(e);var r=t||{};this.ownerDocument=this,this.contentType=r.contentType||u.XML_APPLICATION,this.type=a(this.contentType)?"html":"xml"}function ee(e,t,r,o){e&&e._inc++,r.namespaceURI===p.XMLNS&&delete t._nsMap[r.prefix?r.localName:""]}function te(e,t,r){if(e&&e._inc){e._inc++;var o=t.childNodes;if(r&&!r.nextSibling)o[o.length++]=r;else{for(var n=t.firstChild,i=0;n;)o[i++]=n,n=n.nextSibling;o.length=i,delete o[o.length]}}}function re(e,t){if(e!==t.parentNode)throw new d(d.NOT_FOUND_ERR,"child's parent is not parent");var r=t.previousSibling,o=t.nextSibling;return r?r.nextSibling=o:e.firstChild=o,o?o.previousSibling=r:e.lastChild=r,te(e.ownerDocument,e),t.parentNode=null,t.previousSibling=null,t.nextSibling=null,t}function oe(e){return e&&e.nodeType===K.DOCUMENT_TYPE_NODE}function ne(e){return e&&e.nodeType===K.ELEMENT_NODE}function ie(e){return e&&e.nodeType===K.TEXT_NODE}function se(e,t){var r=e.childNodes||[];if(n(r,ne)||oe(t))return!1;var o=n(r,oe);return!(t&&o&&r.indexOf(o)>r.indexOf(t))}function ae(e,t){var r=e.childNodes||[];if(n(r,(function(e){return ne(e)&&e!==t})))return!1;var o=n(r,oe);return!(t&&o&&r.indexOf(o)>r.indexOf(t))}function le(e,t,r){if(!function(e){return e&&(e.nodeType===K.DOCUMENT_NODE||e.nodeType===K.DOCUMENT_FRAGMENT_NODE||e.nodeType===K.ELEMENT_NODE)}(e))throw new d(d.HIERARCHY_REQUEST_ERR,"Unexpected parent node type "+e.nodeType);if(r&&r.parentNode!==e)throw new d(d.NOT_FOUND_ERR,"child not in parent");if(!function(e){return e&&(e.nodeType===K.CDATA_SECTION_NODE||e.nodeType===K.COMMENT_NODE||e.nodeType===K.DOCUMENT_FRAGMENT_NODE||e.nodeType===K.DOCUMENT_TYPE_NODE||e.nodeType===K.ELEMENT_NODE||e.nodeType===K.PROCESSING_INSTRUCTION_NODE||e.nodeType===K.TEXT_NODE)}(t)||oe(t)&&e.nodeType!==K.DOCUMENT_NODE)throw new d(d.HIERARCHY_REQUEST_ERR,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function ce(e,t,r){var o=e.childNodes||[],i=t.childNodes||[];if(t.nodeType===K.DOCUMENT_FRAGMENT_NODE){var s=i.filter(ne);if(s.length>1||n(i,ie))throw new d(d.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===s.length&&!se(e,r))throw new d(d.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(ne(t)&&!se(e,r))throw new d(d.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(oe(t)){if(n(o,oe))throw new d(d.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var a=n(o,ne);if(r&&o.indexOf(a)1||n(i,ie))throw new d(d.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===s.length&&!ae(e,r))throw new d(d.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(ne(t)&&!ae(e,r))throw new d(d.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(oe(t)){function l(e){return oe(e)&&e!==r}if(n(o,l))throw new d(d.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var a=n(o,ne);if(r&&o.indexOf(a)=0;g--){if(""===(E=o[g]).prefix&&E.namespace===e.namespaceURI){f=E.namespace;break}}if(f!==e.namespaceURI)for(g=o.length-1;g>=0;g--){var E;if((E=o[g]).namespace===e.namespaceURI){E.prefix&&(h=E.prefix+":"+u);break}}}t.push("<",h);for(var y=0;y");else{if(t.push(">"),n&&l(u))for(;a;)a.data?t.push(a.data):Oe(a,t,r,o.slice()),a=a.nextSibling;else for(;a;)Oe(a,t,r,o.slice()),a=a.nextSibling;t.push("")}return;case D:case k:for(a=e.firstChild;a;)Oe(a,t,r,o.slice()),a=a.nextSibling;return;case N:return Ne(t,e.name,e.value);case O:return t.push(e.data.replace(/[<&>]/g,Q));case x:return t.push(m.CDATA_START,e.data,m.CDATA_END);case P:return t.push(m.COMMENT_START,e.data,m.COMMENT_END);case L:var S=e.publicId,T=e.systemId;return t.push(m.DOCTYPE_DECL_START," ",e.name),S?(t.push(" ",m.PUBLIC," ",S),T&&"."!==T&&t.push(" ",T)):T&&"."!==T&&t.push(" ",m.SYSTEM," ",T),e.internalSubset&&t.push(" [",e.internalSubset,"]"),void t.push(">");case M:return t.push("");case C:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function xe(e,t,r){var o;switch(t.nodeType){case _:(o=t.cloneNode(!1)).ownerDocument=e;case k:break;case N:r=!0}if(o||(o=t.cloneNode(!1)),o.ownerDocument=e,o.parentNode=null,r)for(var n=t.firstChild;n;)o.appendChild(xe(e,n,r)),n=n.nextSibling;return o}function Ce(e,t,r){var o=new t.constructor(h);for(var n in t)if(s(t,n)){var i=t[n];"object"!=typeof i&&i!=o[n]&&(o[n]=i)}switch(t.childNodes&&(o.childNodes=new V),o.ownerDocument=e,o.nodeType){case _:var a=t.attributes,l=o.attributes=new B,c=a.length;l._ownerElement=o;for(var u=0;u=0&&eF(t.ownerDocument)?q.DOCUMENT_POSITION_FOLLOWING:q.DOCUMENT_POSITION_PRECEDING);var a=G(t),l=G(r);if(!o&&l.indexOf(t)>=0||n&&t===r)return q.DOCUMENT_POSITION_CONTAINS+q.DOCUMENT_POSITION_PRECEDING;if(!n&&a.indexOf(r)>=0||o&&t===r)return q.DOCUMENT_POSITION_CONTAINED_BY+q.DOCUMENT_POSITION_FOLLOWING;var c=j(l,a);for(var u in c.childNodes){var p=c.childNodes[u];if(p===r)return q.DOCUMENT_POSITION_FOLLOWING;if(p===t)return q.DOCUMENT_POSITION_PRECEDING;if(l.indexOf(p)>=0)return q.DOCUMENT_POSITION_FOLLOWING;if(a.indexOf(p)>=0)return q.DOCUMENT_POSITION_PRECEDING}return 0}},S(R,K),S(R,K.prototype),S(q,K),S(q,K.prototype),$.prototype={implementation:null,nodeName:"#document",nodeType:D,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType===k){for(var r=e.firstChild;r;){var o=r.nextSibling;this.insertBefore(r,t),r=o}return e}return pe(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===_&&(this.documentElement=e),e},removeChild:function(e){var t=re(this,e);return t===this.documentElement&&(this.documentElement=null),t},replaceChild:function(e,t){pe(this,e,t,ue),e.ownerDocument=this,t&&this.removeChild(t),ne(e)&&(this.documentElement=e)},importNode:function(e,t){return xe(this,e,t)},getElementById:function(e){var t=null;return Z(this.documentElement,(function(r){if(r.nodeType==_&&r.getAttribute("id")==e)return t=r,!0})),t},createElement:function(e){var t=new he(h);return t.ownerDocument=this,"html"===this.type&&(e=e.toLowerCase()),i(this.contentType)&&(t.namespaceURI=p.HTML),t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new V,(t.attributes=new B)._ownerElement=t,t},createDocumentFragment:function(){var e=new Ae(h);return e.ownerDocument=this,e.childNodes=new V,e},createTextNode:function(e){var t=new ge(h);return t.ownerDocument=this,t.childNodes=new V,t.appendData(e),t},createComment:function(e){var t=new me(h);return t.ownerDocument=this,t.childNodes=new V,t.appendData(e),t},createCDATASection:function(e){var t=new Ee(h);return t.ownerDocument=this,t.childNodes=new V,t.appendData(e),t},createProcessingInstruction:function(e,t){var r=new Se(h);return r.ownerDocument=this,r.childNodes=new V,r.nodeName=r.target=e,r.nodeValue=r.data=t,r},createAttribute:function(e){if(!m.QName_exact.test(e))throw new d(d.INVALID_CHARACTER_ERR,'invalid character in name "'+e+'"');return"html"===this.type&&(e=e.toLowerCase()),this._createAttribute(e)},_createAttribute:function(e){var t=new fe(h);return t.ownerDocument=this,t.childNodes=new V,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){if(!m.Name.test(e))throw new d(d.INVALID_CHARACTER_ERR,'not a valid xml name "'+e+'"');if("html"===this.type)throw new d("document is an html document",g.NotSupportedError);var t=new be(h);return t.ownerDocument=this,t.childNodes=new V,t.nodeName=e,t},createElementNS:function(e,t){var r=A(e,t),o=new he(h),n=o.attributes=new B;return o.childNodes=new V,o.ownerDocument=this,o.nodeName=t,o.tagName=t,o.namespaceURI=r[0],o.prefix=r[1],o.localName=r[2],n._ownerElement=o,o},createAttributeNS:function(e,t){var r=A(e,t),o=new fe(h);return o.ownerDocument=this,o.childNodes=new V,o.nodeName=t,o.name=t,o.specified=!0,o.namespaceURI=r[0],o.prefix=r[1],o.localName=r[2],o}},T($,K),he.prototype={nodeType:_,attributes:null,getQualifiedName:function(){return this.prefix?this.prefix+":"+this.localName:this.localName},_isInHTMLDocumentAndNamespace:function(){return"html"===this.ownerDocument.type&&this.namespaceURI===p.HTML},hasAttribute:function(e){return!!this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t?t.value:null},getAttributeNode:function(e){return this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase()),this.attributes.getNamedItem(e)},setAttribute:function(e,t){this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase());var r=this.getAttributeNode(e);r?r.value=r.nodeValue=""+t:((r=this.ownerDocument._createAttribute(e)).value=r.nodeValue=""+t,this.setAttributeNode(r))},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);r&&this.removeAttributeNode(r)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);return r?r.value:null},setAttributeNS:function(e,t,r){var o=A(e,t)[2],n=this.getAttributeNodeNS(e,o);n?n.value=n.nodeValue=""+r:((n=this.ownerDocument.createAttributeNS(e,t)).value=n.nodeValue=""+r,this.setAttributeNode(n))},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByClassName:function(e){var t=w(e);return new H(this,(function(r){var o=[];return t.length>0&&Z(r,(function(n){if(n!==r&&n.nodeType===_){var i=n.getAttribute("class");if(i){var s=e===i;if(!s){var a=w(i);s=t.every((l=a,function(e){return l&&-1!==l.indexOf(e)}))}s&&o.push(n)}}var l})),o}))},getElementsByTagName:function(e){var t="html"===(this.nodeType===D?this:this.ownerDocument).type,r=e.toLowerCase();return new H(this,(function(o){var n=[];return Z(o,(function(i){i!==o&&i.nodeType===_&&(("*"===e||i.getQualifiedName()===(t&&i.namespaceURI===p.HTML?r:e))&&n.push(i))})),n}))},getElementsByTagNameNS:function(e,t){return new H(this,(function(r){var o=[];return Z(r,(function(n){n===r||n.nodeType!==_||"*"!==e&&n.namespaceURI!==e||"*"!==t&&n.localName!=t||o.push(n)})),o}))}},$.prototype.getElementsByClassName=he.prototype.getElementsByClassName,$.prototype.getElementsByTagName=he.prototype.getElementsByTagName,$.prototype.getElementsByTagNameNS=he.prototype.getElementsByTagNameNS,T(he,K),fe.prototype.nodeType=N,T(fe,K),de.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,r){r=this.data.substring(0,e)+r+this.data.substring(e+t),this.nodeValue=this.data=r,this.length=r.length}},T(de,K),ge.prototype={nodeName:"#text",nodeType:O,splitText:function(e){var t=this.data,r=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var o=this.ownerDocument.createTextNode(r);return this.parentNode&&this.parentNode.insertBefore(o,this.nextSibling),o}},T(ge,de),me.prototype={nodeName:"#comment",nodeType:P},T(me,de),Ee.prototype={nodeName:"#cdata-section",nodeType:x},T(Ee,ge),ye.prototype.nodeType=L,T(ye,K),ve.prototype.nodeType=U,T(ve,K),we.prototype.nodeType=I,T(we,K),be.prototype.nodeType=C,T(be,K),Ae.prototype.nodeName="#document-fragment",Ae.prototype.nodeType=k,T(Ae,K),Se.prototype.nodeType=M,T(Se,de),Te.prototype.serializeToString=function(e,t){return Re.call(e,t)},K.prototype.toString=Re;try{if(Object.defineProperty){function Me(e){switch(e.nodeType){case _:case k:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(Me(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(H.prototype,"length",{get:function(){return Y(this),this.$$length}}),Object.defineProperty(K.prototype,"textContent",{get:function(){return Me(this)},set:function(e){switch(this.nodeType){case _:case k:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),Ie=function(e,t,r){e["$$"+t]=r}}}catch(Pe){}t._updateLiveList=Y,t.Attr=fe,t.CDATASection=Ee,t.CharacterData=de,t.Comment=me,t.Document=$,t.DocumentFragment=Ae,t.DocumentType=ye,t.DOMImplementation=J,t.Element=he,t.Entity=we,t.EntityReference=be,t.LiveNodeList=H,t.NamedNodeMap=B,t.Node=K,t.NodeList=V,t.Notation=ve,t.Text=ge,t.ProcessingInstruction=Se,t.XMLSerializer=Te},6559:(e,t,r)=>{"use strict";var o=r(4582).freeze;t.XML_ENTITIES=o({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),t.HTML_ENTITIES=o({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),t.entityMap=t.HTML_ENTITIES},2983:(e,t,r)=>{"use strict";function o(e,t){e.prototype=Object.create(Error.prototype,{constructor:{value:e},name:{value:e.name,enumerable:!0,writable:t}})}var n=r(4582).freeze({Error:"Error",IndexSizeError:"IndexSizeError",DomstringSizeError:"DomstringSizeError",HierarchyRequestError:"HierarchyRequestError",WrongDocumentError:"WrongDocumentError",InvalidCharacterError:"InvalidCharacterError",NoDataAllowedError:"NoDataAllowedError",NoModificationAllowedError:"NoModificationAllowedError",NotFoundError:"NotFoundError",NotSupportedError:"NotSupportedError",InUseAttributeError:"InUseAttributeError",InvalidStateError:"InvalidStateError",SyntaxError:"SyntaxError",InvalidModificationError:"InvalidModificationError",NamespaceError:"NamespaceError",InvalidAccessError:"InvalidAccessError",ValidationError:"ValidationError",TypeMismatchError:"TypeMismatchError",SecurityError:"SecurityError",NetworkError:"NetworkError",AbortError:"AbortError",URLMismatchError:"URLMismatchError",QuotaExceededError:"QuotaExceededError",TimeoutError:"TimeoutError",InvalidNodeTypeError:"InvalidNodeTypeError",DataCloneError:"DataCloneError",EncodingError:"EncodingError",NotReadableError:"NotReadableError",UnknownError:"UnknownError",ConstraintError:"ConstraintError",DataError:"DataError",TransactionInactiveError:"TransactionInactiveError",ReadOnlyError:"ReadOnlyError",VersionError:"VersionError",OperationError:"OperationError",NotAllowedError:"NotAllowedError",OptOutError:"OptOutError"}),i=Object.keys(n);function s(e){return"number"==typeof e&&e>=1&&e<=25}function a(e,t){var r;s(e)?(this.name=i[e],this.message=t||""):(this.message=e,this.name="string"==typeof(r=t)&&r.substring(r.length-n.Error.length)===n.Error?t:n.Error),Error.captureStackTrace&&Error.captureStackTrace(this,a)}o(a,!0),Object.defineProperties(a.prototype,{code:{enumerable:!0,get:function(){var e=i.indexOf(this.name);return s(e)?e:0}}});for(var l={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25},c=Object.entries(l),u=0;u{"use strict";function r(e){try{"function"!=typeof e&&(e=RegExp);var t=new e("𝌆","u").exec("𝌆");return!!t&&2===t[0].length}catch(e){}return!1}var o=r();function n(e){if("["!==e.source[0])throw new Error(e+" can not be used with chars");return e.source.slice(1,e.source.lastIndexOf("]"))}function i(e,t){if("["!==e.source[0])throw new Error("/"+e.source+"/ can not be used with chars_without");if(!t||"string"!=typeof t)throw new Error(JSON.stringify(t)+" is not a valid search");if(-1===e.source.indexOf(t))throw new Error('"'+t+'" is not is /'+e.source+"/");if("-"===t&&1!==e.source.indexOf(t))throw new Error('"'+t+'" is not at the first postion of /'+e.source+"/");return new RegExp(e.source.replace(t,""),o?"u":"")}function s(e){var t=this;return new RegExp(Array.prototype.slice.call(arguments).map((function(e){var r="string"==typeof e;if(r&&void 0===t&&"|"===e)throw new Error("use regg instead of reg to wrap expressions with `|`!");return r?e:e.source})).join(""),o?"mu":"m")}function a(e){if(0===arguments.length)throw new Error("no parameters provided");return s.apply(a,["(?:"].concat(Array.prototype.slice.call(arguments),[")"]))}var l=/[-\x09\x0A\x0D\x20-\x2C\x2E-\uD7FF\uE000-\uFFFD]/;o&&(l=s("[",n(l),"\\u{10000}-\\u{10FFFF}","]"));var c=/[\x20\x09\x0D\x0A]/,u=n(c),p=s(c,"+"),h=s(c,"*"),f=/[:_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;o&&(f=s("[",n(f),"\\u{10000}-\\u{10FFFF}","]"));var d=s("[",n(f),n(/[-.0-9\xB7]/),n(/[\u0300-\u036F\u203F-\u2040]/),"]"),g=s(f,d,"*"),m=s(d,"+"),E=s("&",g,";"),y=a(/&#[0-9]+;|&#x[0-9a-fA-F]+;/),v=a(E,"|",y),w=s("%",g,";"),b=a(s('"',a(/[^%&"]/,"|",w,"|",v),"*",'"'),"|",s("'",a(/[^%&']/,"|",w,"|",v),"*","'")),A=a('"',a(/[^<&"]/,"|",v),"*",'"',"|","'",a(/[^<&']/,"|",v),"*","'"),S=s(i(f,":"),i(d,":"),"*"),T=s(S,a(":",S),"?"),R=s("^",T,"$"),_=s("(",T,")"),N=a(/"[^"]*"|'[^']*'/),O=s(/^<\?/,"(",g,")",a(p,"(",l,"*?)"),"?",/\?>/),x=/[\x20\x0D\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/,C=a('"',x,'*"',"|","'",i(x,"'"),"*'"),I="\x3c!--",M=s(I,a(i(l,"-"),"|",s("-",i(l,"-"))),"*","--\x3e"),P="#PCDATA",D=a(s(/\(/,h,P,a(h,/\|/,h,T),"*",h,/\)\*/),"|",s(/\(/,h,P,h,/\)/)),L=a("EMPTY","|","ANY","|",D,"|",s(/\([^>]+\)/,/[?*+]?/)),k=s(""),U=s("NOTATION",p,/\(/,h,g,a(h,/\|/,h,g),"*",h,/\)/),q=s(/\(/,h,m,a(h,/\|/,h,m),"*",h,/\)/),G=a(U,"|",q),j=a(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/,"|",G),F=a(/#REQUIRED|#IMPLIED/,"|",a(a("#FIXED",p),"?",A)),V=s(""),H="SYSTEM",Y="PUBLIC",B=a(a(H,p,N),"|",a(Y,p,C,p,N)),X=s("^",a(a(H,p,"(?",N,")"),"|",a(Y,p,"(?",C,")",p,"(?",N,")"))),z=a(p,"NDATA",p,g),W=""),K=a(b,"|",B),Q=a(J,"|",s(W,p,"%",p,g,p,K,h,">")),Z=s(Y,p,C),$=s(""),ee=s(h,"=",h),te=/1[.]\d+/,re=s(p,"version",ee,a("'",te,"'","|",'"',te,'"')),oe=/[A-Za-z][-A-Za-z0-9._]*/,ne=s(/^<\?xml/,re,a(p,"encoding",ee,a('"',oe,'"',"|","'",oe,"'")),"?",a(p,"standalone",ee,a("'",a("yes","|","no"),"'","|",'"',a("yes","|","no"),'"')),"?",h,/\?>/),ie=s(l,"*?",/\]\]>/),se=s(/",t.CDSect=se,t.Char=l,t.Comment=M,t.COMMENT_START=I,t.COMMENT_END="--\x3e",t.DOCTYPE_DECL_START="{"use strict";var o=r(4582);o.assign,o.hasDefaultHTMLNamespace,o.isHTMLMimeType,o.isValidMimeType,o.MIME_TYPE,o.NAMESPACE;var n=r(2983);n.DOMException,n.DOMExceptionName,n.ExceptionCode,n.ParseError;var i=r(4722);i.Attr,i.CDATASection,i.CharacterData,i.Comment,i.Document,i.DocumentFragment,i.DocumentType,i.DOMImplementation,i.Element,i.Entity,i.EntityReference,i.LiveNodeList,i.NamedNodeMap,i.Node,i.NodeList,i.Notation,i.ProcessingInstruction,i.Text,i.XMLSerializer;var s=r(5752);t.S4=s.DOMParser,s.onErrorStopParsing,s.onWarningStopParsing},4466:(e,t,r)=>{"use strict";var o=r(4582),n=r(2763),i=r(2983),s=o.isHTMLEscapableRawTextElement,a=o.isHTMLMimeType,l=o.isHTMLRawTextElement,c=o.hasOwn,u=o.NAMESPACE,p=i.ParseError,h=i.DOMException;function f(){}f.prototype={parse:function(e,t,r){var i=this.domBuilder;i.startDocument(),v(t,t=Object.create(null)),function(e,t,r,i,s){var l=a(i.mimeType);e.indexOf(n.UNICODE_REPLACEMENT_CHARACTER)>=0&&s.warning("Unicode replacement character detected, source encoding issues?");function u(e){if(e>65535){var t=55296+((e-=65536)>>10),r=56320+(1023&e);return String.fromCharCode(t,r)}return String.fromCharCode(e)}function f(e){var t=";"===e[e.length-1]?e:e+";";if(!l&&t!==e)return s.error("EntityRef: expecting ;"),e;var o=n.Reference.exec(t);if(!o||o[0].length!==t.length)return s.error("entity not matching Reference production: "+e),e;var i=t.slice(1,-1);return c(r,i)?r[i]:"#"===i.charAt(0)?u(parseInt(i.substr(1).replace("x","0x"))):(s.error("entity not found:"+e),e)}function v(t){if(t>C){var r=e.substring(C,t).replace(d,f);N&&w(C),i.characters(r,0,t-C),C=t}}function w(t,r){for(;t>=R&&(r=_.exec(e));)T=r.index,R=T+r[0].length,N.lineNumber++;N.columnNumber=t-T+1}var T=0,R=0,_=/.*(?:\r\n?|\n)|.*$/g,N=i.locator,O=[{currentNSMap:t}],x=[],C=0;for(;;){try{var I=e.indexOf("<",C);if(I<0){if(!l&&x.length>0)return s.fatalError("unclosed xml tag(s): "+x.join(", "));if(!e.substring(C).match(/^\s*$/)){var M=i.doc,P=M.createTextNode(e.substr(C));if(M.documentElement)return s.error("Extra content at the end of the document");M.appendChild(P),i.currentElement=P}return}if(I>C){var D=e.substring(C,I);l||0!==x.length||(D=D.replace(new RegExp(n.S_OPT.source,"g"),""))&&s.error("Unexpected content outside root element: '"+D+"'"),v(I)}switch(e.charAt(I+1)){case"/":var L=e.indexOf(">",I+2),k=e.substring(I+2,L>0?L:void 0);if(!k)return s.fatalError("end tag name missing");var U=L>0&&n.reg("^",n.QName_group,n.S_OPT,"$").exec(k);if(!U)return s.fatalError('end tag name contains invalid characters: "'+k+'"');if(!i.currentElement&&!i.doc.documentElement)return;var q=x[x.length-1]||i.currentElement.tagName||i.doc.documentElement.tagName||"";if(q!==U[1]){var G=U[1].toLowerCase();if(!l||q.toLowerCase()!==G)return s.fatalError('Opening and ending tag mismatch: "'+q+'" != "'+k+'"')}var j=O.pop();x.pop();var F=j.localNSMap;if(i.endElement(j.uri,j.localName,q),F)for(var V in F)c(F,V)&&i.endPrefixMapping(V);L++;break;case"?":N&&w(I),L=A(e,I,i,s);break;case"!":N&&w(I),L=b(e,I,i,s,l);break;default:N&&w(I);var H=new S,Y=O[O.length-1].currentNSMap,B=(L=m(e,I,H,Y,f,s,l),H.length);if(H.closed||(l&&o.isHTMLVoidElement(H.tagName)?H.closed=!0:x.push(H.tagName)),N&&B){for(var X=g(N,{}),z=0;zC?C=L:v(Math.max(I,C)+1)}}(e,t,r,i,this.errorHandler),i.endDocument()}};var d=/&#?\w+;?/g;function g(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function m(e,t,r,o,n,i,s){function a(e,t,o){return c(r.attributeNames,e)?i.fatalError("Attribute "+e+" redefined"):!s&&t.indexOf("<")>=0?i.fatalError("Unescaped '<' not allowed in attributes values"):void r.addValue(e,t.replace(/[\t\n\r]/g," ").replace(d,n),o)}for(var l,u=++t,p=0;;){var h=e.charAt(u);switch(h){case"=":if(1===p)l=e.slice(t,u),p=3;else{if(2!==p)throw new Error("attribute equal must after attrName");p=3}break;case"'":case'"':if(3===p||1===p){if(1===p&&(i.warning('attribute value must after "="'),l=e.slice(t,u)),t=u+1,!((u=e.indexOf(h,t))>0))throw new Error("attribute value no end '"+h+"' match");a(l,f=e.slice(t,u),t-1),p=5}else{if(4!=p)throw new Error('attribute value must after "="');a(l,f=e.slice(t,u),t),i.warning('attribute "'+l+'" missed start quot('+h+")!!"),t=u+1,p=5}break;case"/":switch(p){case 0:r.setTagName(e.slice(t,u));case 5:case 6:case 7:p=7,r.closed=!0;case 4:case 1:break;case 2:r.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return i.error("unexpected end of input"),0==p&&r.setTagName(e.slice(t,u)),u;case">":switch(p){case 0:r.setTagName(e.slice(t,u));case 5:case 6:case 7:break;case 4:case 1:"/"===(f=e.slice(t,u)).slice(-1)&&(r.closed=!0,f=f.slice(0,-1));case 2:2===p&&(f=l),4==p?(i.warning('attribute "'+f+'" missed quot(")!'),a(l,f,t)):(s||i.warning('attribute "'+f+'" missed value!! "'+f+'" instead!!'),a(f,f,t));break;case 3:if(!s)return i.fatalError("AttValue: ' or \" expected")}return u;case"€":h=" ";default:if(h<=" ")switch(p){case 0:r.setTagName(e.slice(t,u)),p=6;break;case 1:l=e.slice(t,u),p=2;break;case 4:var f=e.slice(t,u);i.warning('attribute "'+f+'" missed quot(")!!'),a(l,f,t);case 5:p=6}else switch(p){case 2:s||i.warning('attribute "'+l+'" missed value!! "'+l+'" instead2!!'),a(l,l,t),t=u,p=1;break;case 5:i.warning('attribute space is required"'+l+'"!!');case 6:p=1,t=u;break;case 3:p=4,t=u;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}u++}}function E(e,t,r){for(var o=e.tagName,n=null,i=e.length;i--;){var s=e[i],a=s.qName,l=s.value;if((d=a.indexOf(":"))>0)var p=s.prefix=a.slice(0,d),h=a.slice(d+1),f="xmlns"===p&&h;else h=a,p=null,f="xmlns"===a&&"";s.localName=h,!1!==f&&(null==n&&(n=Object.create(null),v(r,r=Object.create(null))),r[f]=n[f]=l,s.uri=u.XMLNS,t.startPrefixMapping(f,l))}for(i=e.length;i--;)(s=e[i]).prefix&&("xml"===s.prefix&&(s.uri=u.XML),"xmlns"!==s.prefix&&(s.uri=r[s.prefix]));var d;(d=o.indexOf(":"))>0?(p=e.prefix=o.slice(0,d),h=e.localName=o.slice(d+1)):(p=null,h=e.localName=o);var g=e.uri=r[p||""];if(t.startElement(g,h,o,e),!e.closed)return e.currentNSMap=r,e.localNSMap=n,!0;if(t.endElement(g,h,o),n)for(p in n)c(n,p)&&t.endPrefixMapping(p)}function y(e,t,r,o,n){var i=s(r);if(i||l(r)){var a=e.indexOf("",t),c=e.substring(t+1,a);return i&&(c=c.replace(d,o)),n.characters(c,0,c.length),a}return t+1}function v(e,t){for(var r in e)c(e,r)&&(t[r]=e[r])}function w(e,t){var r=t;function o(t){return t=t||0,e.charAt(r+t)}function i(e){r+=e=e||1}function s(){return e.substring(r)}return{char:o,getIndex:function(){return r},getMatch:function(e){var t=n.reg("^",e).exec(s());return t?(i(t[0].length),t[0]):null},getSource:function(){return e},skip:i,skipBlanks:function(){for(var t=0;r"!==s.char()?o.fatalError("doctype not terminated with > at position "+s.getIndex()):(s.skip(1),r.startDTD(c.name,c.publicId,c.systemId,c.internalSubset),r.endDTD(),s.getIndex());default:return o.fatalError('Not well-formed XML starting with "0)return o.fatalError("processing instruction at position "+t+" is an xml declaration which is only at the start of the document");if(!n.XMLDecl.test(e.substring(t)))return o.fatalError("xml declaration is not well-formed")}return r.processingInstruction(i[1],i[2]),t+i[0].length}function S(){this.attributeNames=Object.create(null)}S.prototype={setTagName:function(e){if(!n.QName_exact.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,r){if(!n.QName_exact.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:r}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=f,t.parseUtils=w,t.parseDoctypeCommentOrCData=b},3487:(e,t,r)=>{"use strict";r.d(t,{A:()=>E});var o=r(9201),n=r(9583),i=r.n(n),s=r(2536),a=r(7278),l=r(9815);function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}function u(e,t){for(var r=0;r{"use strict";r.d(t,{A:()=>w});var o=r(2987);const n=ol.tilegrid.WMTS;var i=r.n(n),s=r(9290),a=r(2536);const l={getZoomLevelFromScaleDenominator:function(e,t){var r={};if("EPSG:2154"===t)r={0:104579.224549894,1:52277.5323537905,2:26135.4870785954,3:13066.8913818,4:6533.2286041135,5:3266.5595244627,6:1633.2660045974,7:816.629554986,8:408.3139146768,9:204.1567415109,10:102.0783167832,11:51.0391448966,12:25.5195690743,13:12.7597836936,14:6.379891636,15:3.1899457653,16:1.5949728695,17:.7974864315,18:.3987432149,19:.1993716073,20:.0996858037,21:.0498429018};else r={0:156543.033928041,1:78271.51696402048,2:39135.758482010235,3:19567.87924100512,4:9783.93962050256,5:4891.96981025128,6:2445.98490512564,7:1222.99245256282,8:611.49622628141,9:305.7481131407048,10:152.8740565703525,11:76.43702828517624,12:38.21851414258813,13:19.10925707129406,14:9.554628535647032,15:4.777314267823516,16:2.388657133911758,17:1.194328566955879,18:.5971642834779395,19:.2985821417389697,20:.1492910708694849,21:.0746455354347424};var o=28e-5*e;for(var n in r)if(r.hasOwnProperty(n)&&r[n]<=o)return n=parseInt(n,10);return 0},getAttributions:function(e){var t=e.zoom,r=[];if(null!=e.originators&&e.visibility)for(var o,n=0,i=e.originators.length;nt&&(o=!1),o&&h&&h{"use strict";r.d(t,{A:()=>m});const o=ol.source.WMTS;var n=r.n(o),i=r(2938),s=r(2987),a=r(2536);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function c(e,t){for(var r=0;r{"use strict";r.d(t,{A:()=>o});const o={configuration:{},isConfigLoaded:function(){if(this.configuration&&0!==Object.keys(this.configuration).length)return!0;var e="undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0!==r.g?r.g:{};return!!(e.Gp&&e.Gp.Config&&e.Gp.Config.layers&&0!==Object.keys(e.Gp.Config.layers).length)&&(this.configuration=e.Gp.Config,!0)}}},2536:(e,t,r)=>{"use strict";function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}r.d(t,{A:()=>n});const n={detectSupport:function(){var e=!0,t=window.navigator.userAgent.toLowerCase();return-1===t.indexOf("iphone")&&-1===t.indexOf("ipod")&&-1===t.indexOf("ipad")&&-1===t.indexOf("android")&&-1===t.indexOf("mobile")&&-1===t.indexOf("blackberry")&&-1===t.indexOf("tablet")&&-1===t.indexOf("phone")&&-1===t.indexOf("touch")||(e=!1),-1===t.indexOf("msie")&&-1===t.indexOf("trident")||(e=!0),e},assign:function(e,t){for(var r in e=e||{},t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e},mergeParams:function(e,t,r){if(void 0!==e&&void 0!==t)for(var n in void 0===r&&(r=!0),t)t.hasOwnProperty(n)&&("object"===o(t[n])?e.hasOwnProperty(n)?this.mergeParams(e[n],t[n],r):e[n]=t[n]:e.hasOwnProperty(n)?r&&(e[n]=t[n]):e[n]=t[n])}}},5844:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var o=r(3065),n={getLogger:function(e){if(void 0===t)var t={env:{VERBOSE:!1}};t.env.VERBOSE?o.enableAll():o.disableAll();var r=e||"default";return o.getLogger(r)},disableAll:function(){var e=o.getLoggers();for(var t in e){if(Object.hasOwnProperty.call(e,t))e[t].disableAll()}},enableAll:function(){var e=o.getLoggers();for(var t in e){if(Object.hasOwnProperty.call(e,t))e[t].enableAll()}}};const i=n;window.Gp&&(window.Gp.Logger=n)},6964:function(e,t,r){ /*! @@ -19,5 +19,5 @@ * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE * @version v4.2.8+1e68dce6 */ -e.exports=function(){"use strict";function e(e){var t=typeof e;return null!==e&&("object"===t||"function"===t)}function t(e){return"function"==typeof e}var o=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},n=0,i=void 0,s=void 0,a=function(e,t){w[n]=e,w[n+1]=t,2===(n+=2)&&(s?s(b):S())};function l(e){s=e}function c(e){a=e}var u="undefined"!=typeof window?window:void 0,p=u||{},h=p.MutationObserver||p.WebKitMutationObserver,f="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),d="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function g(){return function(){return process.nextTick(b)}}function m(){return void 0!==i?function(){i(b)}:v()}function E(){var e=0,t=new h(b),r=document.createTextNode("");return t.observe(r,{characterData:!0}),function(){r.data=e=++e%2}}function y(){var e=new MessageChannel;return e.port1.onmessage=b,function(){return e.port2.postMessage(0)}}function v(){var e=setTimeout;return function(){return e(b,1)}}var w=new Array(1e3);function b(){for(var e=0;e{"use strict";function o(e){if(!(this instanceof o))throw new TypeError("ErrorService constructor cannot be called as a function.");var t=e;"string"==typeof e||e instanceof String?(this.message=e,this.status=-1,this.type=o.TYPE_UNKERR):(this.message=t.message||"undefined!?",this.type=t.type,this.status=t.status||-1),this.name="ErrorService",this.stack=(new Error).stack}r.d(t,{A:()=>n}),o.TYPE_SRVERR="SERVICE_ERROR",o.TYPE_USEERR="USAGE_ERROR",o.TYPE_UNKERR="UNKNOWN_ERROR",o.prototype=Object.create(Error.prototype,{constructor:{value:o,writable:!0,configurable:!0}});const n=o},4841:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var o=r(2710);function n(e){if(this.logger=o.A.getLogger(),this.logger.trace("[Constructeur WPS()]"),!(this instanceof n))throw new TypeError("WPS constructor cannot be called as a function.");if(this.options=e||{},this.DataObject=this.options.data,!this.DataObject)throw new TypeError("This data object is not defined !");this.paramservice=this.options.param.service||"WPS",this.paramversion=this.options.param.version||"1.0.0",this.paramidentifier=this.options.param.identifier||"gs:WPS",this.paramrawdataoutput=this.options.param.rawdataoutput||"result",this.paramrequest=this.options.param.request||"Execute",this.method=this.options.method||"GET"}n.prototype={requestString:null,constructor:n,template:{get:{value:"service=__SERVICE__&version=__VERSION__&rawdataoutput=__RAWDATAOUTPUT__&identifier=__IDENTIFIER__&request=__REQUEST__&datainputs=\x3c!-- __DATAINPUTS__ --\x3e",input:"__KEY__=__DATA__"},post:{value:'__IDENTIFIER__\x3c!-- __DATAINPUTS__ --\x3e__RAWDATAOUTPUT__',input:"__KEY____DATA__"}},namespaceByDefault:function(){return['xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"','xmlns="http://www.opengis.net/wps/1.0.0"','xmlns:wfs="http://www.opengis.net/wfs"','xmlns:wps="http://www.opengis.net/wps/1.0.0"','xmlns:ows="http://www.opengis.net/ows/1.1"','xmlns:gml="http://www.opengis.net/gml"','xmlns:ogc="http://www.opengis.net/ogc"','xmlns:wcs="http://www.opengis.net/wcs/1.1.1"','xmlns:xlink="http://www.w3.org/1999/xlink"'].join(" ")},schemaLocationByDefault:function(){return'xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd"'},processRequestString:function(){this.logger.trace("WPS::processRequestString ()");var e="";if("POST"===this.method)e=this.template.post.value;else{if("GET"!==this.method)return this.logger.error("No other method supported by the service !"),!1;e=this.template.get.value}return e=(e=(e=(e=(e=e.replace(/__SERVICE__/g,this.paramservice)).replace(/__VERSION__/g,this.paramversion)).replace(/__RAWDATAOUTPUT__/g,this.paramrawdataoutput)).replace(/__IDENTIFIER__/g,this.paramidentifier)).replace(/__REQUEST__/g,this.paramrequest),"POST"===this.method&&(e=(e=e.replace(/__NAMESPACE__/g,this.namespaceByDefault)).replace(/__SCHEMALOCATION__/g,this.schemaLocationByDefault)),(e=e.replace(//g,this.__addDataInputs()))?(this.requestString=e,this.logger.trace("traduction tmpl",e),!0):(this.logger.warn("traduction tmpl : empty request !?"),!1)},__addDataInputs:function(){this.logger.trace("WPS::__addDataInputs ()");for(var e,t="GET"===this.method?this.template.get.input:this.template.post.input,r="GET"===this.method?";":"",o="",n=this,i=this.DataObject.getData(),s=0;s{"use strict";r.d(t,{A:()=>a});var o=r(2710);function n(e){if(!(this instanceof n))throw new TypeError("XML constructor cannot be called as a function.");this.logger=o.A.getLogger(),this.logger.trace("[Constructeur XML ()]"),this.xmlString=null,this.xmlDoc=null,this.reader=null,e&&(e.xmlString&&"string"==typeof e.xmlString&&(this.xmlString=e.xmlString,this.xmlDoc=i(e.xmlString)),e.reader&&this.setReader(e.reader))}function i(e){if("undefined"==typeof window)return(new(0,r(8978).S4)).parseFromString(e,"text/xml");var t,o,n="Erreur lors du parsing de la réponse du service : XML non conforme";if(window.ActiveXObject){(o=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,o.loadXML(e);var i=o.parseError;if(i.errorCode)throw i.line&&i.linepos&&(n+="( ligne "+i.line+", colonne "+i.linepos),i.reason&&(n+=": "+i.reason+")"),new Error(n);return o}if(window.DOMParser){t=new window.DOMParser;try{o=t.parseFromString(e,"text/xml")}catch(e){throw"SyntaxError"===e.message?new Error(n):new Error("Erreur lors du parsing de la réponse du service : "+e.message)}if(o.getElementsByTagName("parsererror").length>0)for(var s=o.getElementsByTagName("parsererror"),a=0;a0){var r=function(e){if(e.attributes.length>0){for(var t={},r=e.attributes,o=0;o{"use strict";r.d(t,{Ay:()=>w});var o=r(3255),n=r(7966),i=r(3565),s=r(3041),a=r(5941),l=r(9924),c=r(1489),u=r(2993),p=r(7868),h=r(4154),f=r(210),d=r(8288),g=r(3474),m=r(9032);const E=m.rE,y=m.p6;var v={};v.servicesVersion=E,v.servicesDate=y,v.Protocols={},v.Protocols.XHR=f.A,v.Services=o.A,v.Services.DefaultUrl=n.A,v.Services.AltiResponse=i.A,v.Services.Alti={},v.Services.Alti.Elevation=s.A,v.Services.AutoCompleteResponse=a.A,v.Services.AutoComplete={},v.Services.AutoComplete.SuggestedLocation=l.A,v.Services.Config=h.A,v.Services.IsoCurveResponse=c.A,v.Services.RouteResponse=u.A,v.Services.Route={},v.Services.Route.RouteInstruction=p.A,v.Error=d.A,v.Helper=g.A;const w=v},3494:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var o,n=r(2710);const i={uuid:(o=Math.floor(Date.now()),function(){return o++}),call:function(e){var t=n.A.getLogger("JSONP");if(t.trace("[JSONP::call ()]"),!e)throw t.error("missing parameter : options !"),new Error("missing parameter : options !");if(!e.url)throw t.error("missing parameter : options.url !"),new Error("missing parameter : options.url !");if(e.timeOut||(t.info("setting 'options.timeOut' default value"),e.timeOut=0),!e.onResponse)throw t.error("missing parameter : options.onResponse !"),new Error("missing parameter : options.onResponse !");var r="string"==typeof e.callbackSuffix?e.callbackSuffix:this.uuid(),o=!1,i=!1,s=e.url.indexOf("callback=");if(-1!==s){o=!0;var a=e.url.indexOf("&",s);-1===a&&(a=e.url.length);var l=e.url.substring(s+9,a);l&&(i=!0,e.callbackName=l,t.info("setting 'options.callbackName' value ("+e.callbackName+") from 'options.url' parameter"))}if(!o){var c=e.url.indexOf("?");-1===c?e.url=e.url+"?callback=":c===e.url.length?e.url=e.url+"callback=":e.url=e.url+"&callback=",t.info("setting callback default key in 'options.url' : "+e.url)}var u=!!e.callbackName||i;if(i||(e.callbackName||(t.info("setting 'options.callbackName' default value"),e.callbackName="callback",(r||""===r)&&(e.callbackName+=r)),e.url=e.url.replace("callback=","callback="+e.callbackName),t.info("setting callback function name in 'options.url' : "+e.url)),e.onTimeOut||(t.info("setting 'options.onTimeOut' default value"),e.onTimeOut=function(){console.log("TimeOut while invoking url : "+e.url)}),!u){var p=this,h=null;e.timeOut>0&&(h=window.setTimeout((function(){window[e.callbackName]=function(){},e.onTimeOut(),p._deleteScript(r)}),e.timeOut)),window[e.callbackName]=function(t){window.clearTimeout(h),e.onResponse(t),p._deleteScript(r)}}this._createScript(r,e.url)},_createScript:function(e,t){var r,o=document.getElementById("results"+e);(r=document.createElement("script")).setAttribute("type","text/javascript"),r.setAttribute("src",t),r.setAttribute("charset","UTF-8"),r.setAttribute("id","results"+e),r.setAttribute("async","true");var n=document.documentElement||document.getElementsByTagName("head")[0];null===o?n.appendChild(r):n.replaceChild(r,o)},_deleteScript:function(e){var t=document.getElementById("results"+e);if(t){var r=t.parentNode||document.documentElement;if(!r)return;r.removeChild(t)}}}},6250:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var o=r(3474),n=r(210),i=r(3494);const s={send:function(e){var t=e||{method:"GET",protocol:"XHR",timeOut:0,format:null,wrap:!0,nocache:!0,output:"json",callback:null,callbackSuffix:null};if("undefined"!=typeof window||"JSONP"!==e.protocol){if("XHR"===e.protocol||"json"===e.format?t.wrap=!1:"JSONP"===e.protocol&&"xml"===e.format&&(t.wrap=!0),t.callback=null,t.output=t.wrap?"json":null,t.wrap){var r={};r.output=t.output,r.callback=t.callback,delete r.callback,t.url=o.A.normalyzeUrl(e.url,r)}switch(t.protocol){case"XHR":"GET"===e.method&&e.nocache&&(t.url=o.A.normalyzeUrl(t.url,{t:(new Date).getTime()})),n.A.call(t);break;case"JSONP":t.data&&(t.url=o.A.normalyzeUrl(t.url,t.data)),i.A.call(t);break;default:throw new Error("protocol not supported (XHR|JSONP) !")}}else console.log("Value (s) for parameter (s) 'protocol=JSONP (instead use XHR)' not supported to NodeJS")}}},210:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var o=r(2710),n=r(3474),i=r(6964),s=r.n(i);const a={call:function(e){var t=o.A.getLogger("XHR");if(t.trace("[XHR::call()]"),s().polyfill(),!e.url)throw new Error("missing parameter : url is not defined !");if(!e.method)throw new Error("missing parameter : method is not defined !");e.format||(e.format="text");var r={};switch(r.url=e.url,r.data=e.data?e.data:null,r.method=e.method,r.timeOut=e.timeOut||0,r.scope=e.scope||this,r.proxy=e.proxy||null,r.content=e.content||null,r.headers=e.headers||{referer:"http://localhost"},e.method){case"DELETE":case"GET":break;case"PUT":case"POST":r.content=e.content?e.content:"application/x-www-form-urlencoded",r.headers=e.headers?e.headers:{referer:"http://localhost"};break;case"HEAD":case"OPTIONS":throw new Error("HTTP method not yet supported !");default:throw new Error("HTTP method unknown !")}switch(e.format){case"text":this.__call(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;case"json":this.__callJSON(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;case"xml":this.__callXML(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;default:throw new Error("This output Format is not yet supported !")}},__call:function(e){var t=o.A.getLogger("XHR");return t.trace("[XHR::__call()]"),new Promise((function(o,i){var s="POST"===e.method||"PUT"===e.method?1:0;e.data&&("object"==typeof e.data&&Object.keys(e.data).length||"string"==typeof e.data&&e.data.length)&&!s&&(e.url=n.A.normalyzeUrl(e.url,e.data)),t.trace("URL = ",e.url);var a=null;if("undefined"==typeof window){var l=r(3092),c={headers:{Referer:"https://localhost"}};return e.data&&"string"==typeof e.data&&s&&(c={method:e.method,body:e.data,headers:{"Content-Type":e.content,Referer:"https://localhost"}}),l(e.url,c).then((function(e){if(e.ok)o(e.text());else{var t="Errors Occured on Http Request (status : '"+e.statusText+"' | url : '"+e.url+"')",r=e.status;i({message:t,status:r})}})).catch((function(e){i({message:e,status:-1})}))}if(window.XMLHttpRequest){t.trace("XMLHttpRequest"),(a=new XMLHttpRequest).open(e.method,e.url,!0),a.overrideMimeType=e.content;var u=null;e.timeOut>0&&(t.trace("XHR - TimeOut actif !"),u=window.setTimeout((function(){i({message:"TimeOut Occured on Http Request with XMLHttpRequest !",status:-1})}),e.timeOut)),s&&(t.trace("data = ",e.data),a.setRequestHeader("Content-type",e.content)),a.onerror=function(e){console.log(e),i(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},a.ontimeout=function(e){console.log(e),i(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},a.onreadystatechange=function(e){if(4===a.readyState)if(200===a.status)window.clearTimeout(u),o(a.response);else{var t="Errors Occured on Http Request (status : '"+e.target.statusText+"' | url : '"+e.target.responseURL+"' | response : '"+e.target.response+"')",r=e.target.status;i({message:t,status:r})}};var p=e.data&&s?e.data:null;a.send(p)}else{if(!window.XDomainRequest)throw new Error("CORS not supported");t.trace("XDomainRequest"),(a=new XDomainRequest).open(e.method,e.url),a.overrideMimeType=e.content,e.timeOut>0&&(a.timeout=e.timeout,t.trace("XHR - TimeOut actif !")),s&&a.setRequestHeader("Content-type",e.content),a.onerror=function(){i(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},a.ontimeout=function(){i(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},a.onload=function(e){if(200===a.status)o(a.responseText);else{var t="Errors Occured on Http Request (status : '"+e.target.statusText+"' | url : '"+e.target.responseURL+"')",r=e.target.status;i({message:t,status:r})}};var h=e.data&&s?e.data:null;a.send(h)}}))},__callJSON:function(e){return this.__call(e).then(JSON.parse).catch((function(t){console.log("_callJSON failed on : ",e.url,t)}))},__callXML:function(e){return this.__call(e).then((function(e){var t;"undefined"==typeof window?t=(new(0,r(8978).S4)).parseFromString(e,"text/xml"):window.DOMParser?t=(new window.DOMParser).parseFromString(e,"text/xml"):((t=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,t.loadXML(e));return t})).catch((function(t){console.log("__callXML failed on : ",e.url,t)}))}}},2366:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var o=r(2710),n=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(8933),c=r(5325);function u(e){if(!(this instanceof u))throw new TypeError(n.A.getMessage("CLASS_CONSTRUCTOR","Alti"));if(this.CLASSNAME="Alti",s.A.apply(this,arguments),this.logger=o.A.getLogger("Gp.Services.Alti"),this.logger.trace("[Constructeur Alti (options)]"),!e.positions)throw new Error(n.A.getMessage("PARAM_MISSING","positions"));if(0===e.positions.length)throw new Error(n.A.getMessage("PARAM_EMPTY","positions"));if(this.options.positions=e.positions,this.options.outputFormat="string"==typeof e.outputFormat?e.outputFormat.toLowerCase():"xml",this.options.resource=e.resource||"ign_rge_alti_wld",this.options.sampling=e.sampling||null,this.options.api="string"==typeof e.api?e.api.toUpperCase():"REST","REST"===this.options.api&&(this.options.httpMethod="GET"),this.options.zonly=e.zonly||!1,this.options.measures=e.measures||!1,!this.options.serverUrl){var t=a.A.Alti.newUrl(),r=null;switch(this.options.api){case"WPS":r=t.wps;break;case"REST":r=t[(e.sampling?"profil":"elevation")+"-"+this.options.outputFormat];break;default:throw new Error(n.A.getMessage("PARAM_UNKNOWN","api"))}if(!r)throw new Error("Url by default not found !");this.options.serverUrl=r,this.logger.trace("Server URL by default : "+this.options.serverUrl)}var i=this.options.serverUrl.lastIndexOf(".");if(-1!==i){var l=this.options.serverUrl.substring(i+1);if(l&&l.length<5)switch(this.logger.trace("Server Extension URL : "+l),l.toLowerCase()){case"json":case"xml":this.options.outputFormat=l.toLowerCase();break;default:throw new Error("type of service : unknown or unsupported (json or xml) !")}}}u.prototype=Object.create(s.A.prototype,{}),u.prototype.constructor=u,u.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,onSuccess:function(e){this.request=e,t.call(this,this.request)},onError:e,scope:this,resource:this.options.resource,positions:this.options.positions,outputFormat:this.options.outputFormat,sampling:this.options.sampling,api:this.options.api,zonly:this.options.zonly,measures:this.options.measures};l.A.build(r)},u.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,outputFormat:this.options.outputFormat,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};c.A.build(r)}else e.call(this,new i.A(n.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const p=u},3667:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var o=r(3565),n=r(3041),i=r(9206),s={};s.READERS={elevations:function(e){var t=new o.A;if(e.hasChildNodes())for(var r,n,i=e.childNodes,a=0;a{"use strict";r.d(t,{A:()=>a});var o=r(2710),n=r(8288),i=r(6933),s=r(4359);const a={build:function(e){o.A.getLogger("AltiRequestFactory").trace(["AltiRequestFactory::build()"]);var t=null,r={type:e.sampling?"Profil":"Elevation",method:e.httpMethod,param:{positions:null,delimiter:null,indent:null,crs:null,format:null,sampling:null,zonly:null,measures:null}};r.param.positions=e.positions,r.param.format=e.outputFormat,r.param.sampling=e.sampling,r.param.zonly=e.zonly,r.param.measures=e.measures,r.param.resource=e.resource;var a=!(null===e.onError||"function"!=typeof e.onError),l=!(null===e.onSuccess||"function"!=typeof e.onSuccess),c=null;switch(e.api){case"REST":var u=new i.A(r);if(!u.processRequestString()){if(c="Error in process request (rest) !",a)return void e.onError.call(e.scope,new n.A(c));throw new Error(c)}t=u.requestString;break;case"WPS":if(r.wps={service:null,version:null,identifier:null,rawdataoutput:null,request:null},!(t=s.A.build(r))){if(c="Error in process request (wps) !",a)return void e.onError.call(e.scope,new n.A(c));throw new Error(c)}break;default:if(c="Type of API is not supported by service (REST or WPS) !",a)return void e.onError.call(e.scope,new n.A(c));throw new Error(c)}return l&&e.onSuccess.call(e.scope,t),t}}},6933:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var o=r(2710),n=r(1097),i=r(5974),s=r(3471);function a(e){if(this.logger=o.A.getLogger("AltiRequestREST"),this.logger.trace("[Constructeur AltiRequestREST ()]"),!(this instanceof a))throw new TypeError("AltiRequestREST constructor cannot be called as a function.");if(this.options=e||{},!this.options)throw new Error(n.A.getMessage("PARAM_EMPTY","options"));if(!this.options.type)throw new Error(n.A.getMessage("PARAM_EMPTY","type (Elevation or Profil)"));switch(this.DataObject=null,this.options.type){case"Elevation":this.DataObject=new i.A(this.options.param);break;case"Profil":this.DataObject=new s.A(this.options.param);break;default:throw new Error(n.A.getMessage("PARAM_TYPE","type (Elevation or Profil)"))}this.method=this.options.method||"GET"}a.prototype={requestString:null,constructor:a,template:{get:{value:"lon=__LON__&lat=__LAT__&indent=__INDENT__&crs='__CRS__'&resource=__RESOURCE__&measures=__MEASURES__",input:{point:"&zonly=__ZONLY__",profil:"&sampling=__SAMPLING__"}},post:{value:"lon=__LON__\nlat=__LAT__\nindent=__INDENT__\ncrs='__CRS__'\nresource='__RESOURCE__'\nmeasures='__MEASURES__'\n",input:{point:"zonly=__ZONLY__\n",profil:"sampling=__SAMPLING__"}}},processRequestString:function(){this.logger.trace("AltiRequestREST::processRequestString ()");var e="";return"POST"===this.method?e=this.template.post.value:"GET"===this.method&&(e=this.template.get.value),e=(e=(e=(e=(e=(e=e.replace(/__LON__/g,this.DataObject.getLon())).replace(/__LAT__/g,this.DataObject.getLat())).replace(/__INDENT__/g,this.DataObject.indent)).replace(/__CRS__/g,this.DataObject.crs)).replace(/__RESOURCE__/g,this.DataObject.resource)).replace(/__MEASURES__/g,this.DataObject.measures),e+=this.__addDataInputs(),this.logger.trace("traduction tmpl",e),this.requestString=e,this.requestString},__addDataInputs:function(){var e;if(this.logger.trace("AltiRequestREST::addDataInput ()"),"POST"===this.method)e=this.template.post;else{if("GET"!==this.method)throw new Error("No other HTTP method supported by the service !");e=this.template.get}if("AltiElevationRequest"===this.DataObject.CLASSNAME)return e.input.point.replace(/__ZONLY__/g,this.DataObject.zonly.toString());if("AltiProfilRequest"===this.DataObject.CLASSNAME)return e.input.profil.replace(/__SAMPLING__/g,this.DataObject.sampling);throw new Error("No other object supported than elevation or profil !?")}};const l=a},4359:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var o=r(2710),n=r(1097),i=r(4841),s=r(5974),a=r(3471);const l={build:function(e){if(o.A.getLogger("AltiRequestWPS").trace(["AltiRequestWPS::build()"]),!e)throw new Error(n.A.getMessage("PARAM_EMPTY","options"));if(!e.type)throw new Error(n.A.getMessage("PARAM_EMPTY","type (Elevation or Profil)"));var t=null;switch(e.type){case"Elevation":e.wps.identifier="gs:WPSElevation",t=new s.A(e.param);break;case"Profil":e.wps.identifier="gs:WPSLineElevation",t=new a.A(e.param);break;default:throw new Error(n.A.getMessage("PARAM_TYPE","type (Elevation or Profil)"))}var r={data:t,method:e.method,param:e.wps},l=new i.A(r);if(!l.processRequestString())throw new Error("Enable to process request !");return l.requestString}}},5974:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var o=r(2710),n=r(6221);function i(e){if(!(this instanceof i))throw new TypeError("AltiElevationRequest constructor cannot be called as a function.");this.CLASSNAME="AltiElevationRequest",n.A.apply(this,arguments),this.logger=o.A.getLogger(),this.logger.trace("[Constructeur AltiElevationRequest ()]"),this.zonly=this.options.zonly||!1}i.prototype=Object.create(n.A.prototype,{zonly:{get:function(){return this._zonly},set:function(e){this._zonly=e}}}),i.prototype.constructor=i,i.prototype.getData=function(){var e=[];return e.push({k:"lon",v:this.getLon()}),e.push({k:"lat",v:this.getLat()}),e.push({k:"indent",v:this.indent}),e.push({k:"crs",v:this.crs}),e.push({k:"zonly",v:this.zonly}),e.push({k:"format",v:this.format}),e.push({k:"resource",v:this.resource}),e};const s=i},3471:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var o=r(2710),n=r(6221);function i(e){if(!(this instanceof i))throw new TypeError("AltiProfilRequest constructor cannot be called as a function.");this.CLASSNAME="AltiProfilRequest",n.A.apply(this,arguments),this.logger=o.A.getLogger(),this.logger.trace("[Constructeur AltiProfilRequest ()]"),this.sampling=this.options.sampling||3}i.prototype=Object.create(n.A.prototype,{sampling:{get:function(){return this._sampling},set:function(e){this._sampling=e}}}),i.prototype.constructor=i,i.prototype.getData=function(){var e=[];return e.push({k:"lon",v:this.getLon()}),e.push({k:"lat",v:this.getLat()}),e.push({k:"indent",v:this.indent}),e.push({k:"crs",v:this.crs}),e.push({k:"sampling",v:this.sampling}),e.push({k:"format",v:this.format}),e.push({k:"resource",v:this.resource}),e};const s=i},6221:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var o=r(2710);function n(e){if(!(this instanceof n))throw new TypeError("AltiRequest constructor cannot be called as a function.");this.logger=o.A.getLogger(),this.logger.trace("[Constructeur AltiRequest ()]"),this.options=e||{},this.positions=this.options.positions||[],this.delimiter=this.options.delimiter||"|",this.indent=this.options.indent||!1,this.crs=this.options.crs||"CRS:84",this.format=this.options.format||"json",this.resource=this.options.resource,this.measures=this.options.measures||!1}n.CLASSNAME="AltiRequest",n.prototype={constructor:n,setPositions:function(e){for(var t=[],r=0;rt||e{"use strict";r.d(t,{A:()=>u});var o=r(2710),n=r(1097),i=r(8288),s=r(4904),a=r(3667),l=r(3565),c=r(3041);const u={build:function(e){var t=o.A.getLogger("AltiResponseFactory");t.trace(["AltiResponseFactory::build()"]);var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{switch(e.outputFormat){case"xml":t.trace("analyze response : xml");try{var u=new s.A({reader:a.A});if("string"==typeof e.response?u.setXMLString(e.response):u.setXMLDoc(e.response),!(r=u.parse()))throw new Error(n.A.getMessage("SERVICE_RESPONSE_EXCEPTION_2"))}catch(t){var p=t.message;return void e.onError.call(e.scope,new i.A({message:n.A.getMessage("SERVICE_RESPONSE_EXCEPTION",p),status:200,type:i.A.TYPE_SRVERR}))}break;case"json":t.trace("analyze response : json"),t.trace("analyze response : ",typeof e.response);var h=null;if((h="string"==typeof e.response?JSON.parse(e.response):e.response)&&h.error)return void e.onError.call(e.scope,new i.A({message:n.A.getMessage("SERVICE_RESPONSE_EXCEPTION",h.error.description),status:200,type:i.A.TYPE_SRVERR}));if(h){var f,d=h.elevations,g=new l.A;if(Array.isArray(d)&&d.length)for(var m=0;m{"use strict";function o(){if(!(this instanceof o))throw new TypeError("AltiResponse constructor cannot be called as a function.");this.elevations=[]}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},3041:(e,t,r)=>{"use strict";function o(){if(!(this instanceof o))throw new TypeError("Elevation constructor cannot be called as a function.");this.z=null}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},9206:(e,t,r)=>{"use strict";function o(){if(!(this instanceof o))throw new TypeError("Measure constructor cannot be called as a function.");this.source_name=null,this.source_measure=null,this.z=null,this.acc=null}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},9338:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var o=r(895),n=r(7966),i=r(4889),s=r(2710),a=r(1097),l=r(3474),c=r(8288);function u(e){if(!(this instanceof u))throw new TypeError(a.A.getMessage("CLASS_CONSTRUCTOR","AutoComplete"));this.CLASSNAME="AutoComplete",this.logger=s.A.getLogger("Gp.Services.AutoComplete"),this.logger.trace("[Constructeur AutoComplete (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=n.A.AutoComplete.newUrl()),o.A.apply(this,arguments),!t.text)throw new Error(a.A.getMessage("PARAM_MISSING","text"));this.options.text=t.text,t.type||(t.type=["StreetAddress,PositionOfInterest"]),this.options.type=t.type,this.options.territory=t.terr||"",this.options.maximumResponses=t.maximumResponses||10,"XHR"===this.options.protocol&&"POST"===this.options.httpMethod&&(this.logger.warn("Le service ne gére pas le mode d'interrogation en POST, on bascule sur du GET !"),this.options.httpMethod="GET"),this.options.outputFormat=this.options.rawResponse?"":"json"}u.prototype=Object.create(o.A.prototype,{}),u.prototype.constructor=u,u.prototype.patchOptionConvertor=function(e){const t=e;return t.filterOptions&&(this.logger.warn("The parameter 'filterOptions' is deprecated"),t.filterOptions.type&&(this.logger.warn("The parameter 'filterOptions.type' is deprecated"),t.type||(t.type=t.filterOptions.type)),t.filterOptions.territory&&(this.logger.warn("The parameter 'filterOptions.territory' is deprecated"),t.terr||(t.terr=t.filterOptions.territory)),delete t.filterOptions),t},u.prototype.buildRequest=function(e,t){var r="";this.options.territory&&(r=this.options.territory);var o="";this.options.type&&(o=this.options.type.join(",")),this.request=l.A.normalyzeParameters({text:encodeURIComponent(this.options.text),type:o,terr:r,maximumResponses:this.options.maximumResponses}),this.request?t.call(this,this.request):e.call(this,new c.A(a.A.getMessage("SERVICE_REQUEST_BUILD")))},u.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onSuccess:t,onError:e,scope:this};i.A.build(r)}else e.call(this,new c.A(a.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const p=u},4889:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var o=r(2710),n=r(1097),i=r(8288),s=r(5941),a=r(9924);const l={build:function(e){var t=o.A.getLogger("AutoCompleteResponseFactory");t.trace(["AutoCompleteResponseFactory::build()"]);var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{var l=null;if(l="string"==typeof e.response?JSON.parse(e.response):e.response){if(l.error)return void e.onError.call(e.scope,new i.A({message:n.A.getMessage("SERVICE_RESPONSE_EXCEPTION",l.error.description),status:l.error.code,type:i.A.TYPE_SRVERR}));if(r=new s.A,!l.results||!Array.isArray(l.results))return void e.onError.call(e.scope,new i.A(n.A.getMessage("SERVICE_RESPONSE_FORMAT_3")));for(var c=null,u=0;u{"use strict";function o(){if(!(this instanceof o))throw new TypeError("AutoCompleteResponse constructor cannot be called as a function.");this.suggestedLocations=[]}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},9924:(e,t,r)=>{"use strict";function o(){if(!(this instanceof o))throw new TypeError("SuggestedLocation constructor cannot be called as a function.");this.type=null,this.position={x:null,y:null},this.commune=null,this.fullText=null,this.postalCode=null,this.classification=null,this.street=null,this.poi=null,this.kind=null}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},895:(e,t,r)=>{"use strict";r.d(t,{A:()=>u});var o=r(2710),n=r(3474),i=r(1097),s=r(6250),a=r(8288),l=r(9032);function c(e){if(!(this instanceof c))throw new TypeError(i.A.getMessage("CLASS_CONSTRUCTOR"));for(var t in this.logger=o.A.getLogger("CommonService"),this.logger.trace("[Constructeur CommonService (options)]"),this.options={protocol:"XHR",ssl:!0,proxyURL:"",callbackSuffix:null,httpMethod:"GET",timeOut:0,rawResponse:!1,scope:this,onSuccess:function(e){console.log("onSuccess - la reponse est la suivante : ",e)},onFailure:function(e){200!==e.status&&e.status?console.log("onFailure - Erreur (",e.status,") : ",e.message):console.log("onFailure : ",e.message)}},e)e.hasOwnProperty(t)&&(this.options[t]=e[t]);if(this.options.rawResponse&&!this.options.onSuccess&&(this.options.onSuccess=function(e){console.log("onSuccess - la réponse brute du service est la suivante : ",e)}),!!(null===this.options.onSuccess||"function"!=typeof this.options.onSuccess))throw new Error(i.A.getMessage("PARAM_MISSING","onSuccess()"));switch(this.options.httpMethod="string"==typeof e.httpMethod?e.httpMethod.toUpperCase():"GET",this.options.httpMethod){case"POST":case"GET":break;case"PUT":case"DELETE":case"HEAD":case"OPTIONS":throw new Error(i.A.getMessage("PARAM_NOT_SUPPORT","httpMethod"));default:throw new Error(i.A.getMessage("PARAM_UNKNOWN","httpMethod"))}switch(this.options.protocol="string"==typeof e.protocol?e.protocol.toUpperCase():"XHR",this.options.protocol){case"JSONP":case"XHR":break;default:throw new Error(i.A.getMessage("PARAM_UNKNOWN","protocol"))}if("undefined"==typeof window&&"JSONP"===this.options.protocol)throw new Error(i.A.getMessage("PARAM_NOT_SUPPORT_NODEJS","protocol=JSONP (instead use XHR)"));"JSONP"===this.options.protocol&&(this.options.httpMethod="GET"),this.options.nocache=e.nocache||!1,this.options.outputFormat=null,this.request=null,this.response=null}c.prototype={constructor:c,call:function(){this.logger.trace("CommonService::call ()");var e=this;function t(t){this.logger.trace("CommonService::onBuildRequest : ",t),this.callService.call(e,n,r)}function r(t){this.logger.trace("CommonService::onCallService : ",t),this.analyzeResponse.call(e,n,o)}function o(e){if(this.logger.trace("CommonService::onAnalyzeResponse : ",e),!e)return n.call(this,new a.A("Analyse de la reponse en échec !?"));this.options.onSuccess.call(this,e)}function n(e){this.logger.trace("CommonService::onError()");var t=e;t instanceof a.A||(t=new a.A(e.message)),this.options.onFailure.call(this,t)}(function(){this.logger.trace("CommonService::run ()"),this.buildRequest.call(e,n,t)}).call(e)},buildRequest:function(e,t){this.logger.error("overwritten method !"),e&&e.call(this,"This method must be overwritten !"),t.call(this,"This method must be overwritten !")},callService:function(e,t){var r=null,o=this.request,i=!(!this.options.proxyURL||"XHR"!==this.options.protocol),c={"gp-access-lib":l.rE};this.options.apiKey&&(c.apiKey=this.options.apiKey),this.options.serverUrl=n.A.normalyzeUrl(this.options.serverUrl,c,!1),i&&("GET"===this.options.httpMethod&&(r=this.options.proxyURL+n.A.normalyzeUrl(this.options.serverUrl,this.request,!0),o=null),"POST"===this.options.httpMethod&&(r=this.options.proxyURL+n.A.normalyzeUrl(this.options.serverUrl,null,!0),o=this.request));var u=this,p={url:r||this.options.serverUrl,method:this.options.httpMethod,protocol:this.options.protocol,timeOut:this.options.timeOut||0,format:this.options.outputFormat,nocache:this.options.nocache||!1,wrap:"XHR"!==this.options.protocol,callbackSuffix:this.options.callbackSuffix,data:o,headers:null,content:this.options.contentType||"application/xml",scope:this.options.scope||this,onResponse:function(r){u.logger.trace("callService::onResponse()");var o=null;if("XHR"===u.options.protocol&&(u.logger.trace("Response XHR",r),o=r),"JSONP"===u.options.protocol){if(u.logger.trace("Response JSON",r),!r)return void e.call(u,new a.A("Le contenu de la reponse est vide !?"));if(r.http){if(200!==r.http.status)return void e.call(u,new a.A({status:r.http.status,message:r.http.error,type:a.A.TYPE_SRVERR}));o=r.xml,u.options.rawResponse&&(o=r)}else o=r}if("function"==typeof u.options.onBeforeParse){var n=u.options.onBeforeParse(o);"string"==typeof n&&(o=n)}u.response=o,t.call(u,o)},onFailure:function(t){u.logger.trace("callService::onFailure()"),t.type=a.A.TYPE_SRVERR,e.call(u,new a.A(t))},onTimeOut:function(){u.logger.trace("callService::onTimeOut()"),e.call(u,new a.A("TimeOut!"))}};s.A.send(p)},analyzeResponse:function(e,t){this.logger.error("overwritten method !"),e&&e.call(this,"This method must be overwritten !"),t.call(this,"This method must be overwritten !")}};const u=c},4154:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var o=r(2710),n=r(1097),i=r(895),s=r(7966),a=r(9939);function l(e){if(!(this instanceof l))throw new TypeError(n.A.getMessage("CLASS_CONSTRUCTOR","Config"));if(this.CLASSNAME="Config",this.logger=o.A.getLogger("Gp.Config"),this.logger.trace("[Constructeur Config (options)]"),!!(null===e.onSuccess||"function"!=typeof e.onSuccess))throw new Error(n.A.getMessage("PARAM_MISSING","onSuccess()"));e.apiKey||e.customConfigFile||(e.apiKey="full"),this.options={},this.options.onSuccess=e.onSuccess,this.options.onFailure=e.onFailure,this.options.sync=e.sync||!1,this.options.listConfigUrls=e.customConfigFile?[e.customConfigFile]:Array.isArray(e.apiKey)?s.A.Config.url(e.apiKey):s.A.Config.url(e.apiKey.split(","))}l.prototype=Object.create(i.A.prototype,{}),l.prototype.constructor=l,l.prototype.buildRequest=function(e,t){this.listConfigUrls=this.options.listConfigUrls,this.listConfigUrls?t.call(this,this.listConfigUrls):e.call(this,new Error("url by default not found !"))},l.prototype.callService=function(e,t){this.options.sync?u.call(this,e,t):c.call(this,e,t)};var c=function(e,t){this.listConfigResults=[];let o=null;if("undefined"==typeof window){var n=r(3092);o=n}else o=window.fetch;var i=e=>o(e,{credentials:"same-origin"}).then((e=>{if(e.ok)return e.json().then((e=>e)).catch((e=>{throw new Error("Exception Json : "+e)}));throw new Error("Exception HTTP : "+e.status+" (status code) !")})).catch((e=>new Promise(((t,r)=>{r(e)})))),s=[];for(let e=0;e{if(!e)throw new Error("results config empty !?");e.forEach((e=>{this.listConfigResults.push(e)}))})).then((()=>{t.call(this,this.listConfigResults)})).catch((t=>{e.call(this,t)}))},u=function(e,t){this.listConfigResults=[];for(var r=0;r{"use strict";function o(){if(!(this instanceof o))throw new TypeError("ConfigInterface constructor cannot be called as a function.");this.generalOptions={apiKeys:{},title:null,defaultGMLGFIStyle:null,theme:null,wgs84Resolutions:[]},this.layers={},this.tileMatrixSets={}}r.d(t,{A:()=>n}),o.prototype={constructor:o,isKeyConfLoaded:function(e){if(e)return!!this.generalOptions.apiKeys[e]},getLayersId:function(e){return this.generalOptions.apiKeys[e]},getLayerId:function(e,t){if(e&&t){var r=null;if(this.layers){var o=this.layers;for(var n in o)if(o.hasOwnProperty(n)){var i=n.split("$");if(e===i[0]&&i[1]){var s=i[1].split(":");if(i[1].split(";")[1]===t.toUpperCase()){r=n;break}if(s[2]===t.toUpperCase()){r=n;break}}}}if(r)return r}},getLayersConf:function(e){var t={},r=this.getLayersId(e);if(r)for(var o=0;o{"use strict";r.d(t,{A:()=>n});var o={ssl:!0,newUrl:function(e){return(!1===o.ssl?"http://":"https://")+"data.geopf.fr"+e},Alti:{new_key:{"elevation-json":"/altimetrie/1.0/calcul/alti/rest/elevation.json","elevation-xml":"/altimetrie/1.0/calcul/alti/rest/elevation.xml","profil-json":"/altimetrie/1.0/calcul/alti/rest/elevationLine.json","profil-xml":"/altimetrie/1.0/calcul/alti/rest/elevationLine.xml"},newUrl:function(){return{"elevation-json":o.newUrl(this.new_key["elevation-json"]),"elevation-xml":o.newUrl(this.new_key["elevation-xml"]),"profil-json":o.newUrl(this.new_key["profil-json"]),"profil-xml":o.newUrl(this.new_key["profil-xml"])}}},ProcessIsoCurve:{new_key:"/navigation/isochrone",newUrl:function(){return o.newUrl(this.new_key)}},Config:{_key:"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/dist/",url:function(e){Array.isArray(e)||(e=e.split(","));for(var t=[],r=0;r{"use strict";r.d(t,{A:()=>c});var o=r(1097),n=r(8288),i=r(1135),s=r(6025);function a(){if(!(this instanceof a))throw new TypeError("GeocodeResponseParser constructor cannot be called as a function.")}function l(e,t){var r=new s.A;if(e.geometry&&"Point"===e.geometry.type&&(r.position={lon:e.geometry.coordinates[0],lat:e.geometry.coordinates[1]}),e.properties){for(var o in e.properties)"score"===o?r.accuracy=e.properties[o]:"_type"===o?"address"===e.properties[o]?r.type="StreetAddress":"poi"===e.properties[o]?r.type="PositionOfInterest":"parcel"!==e.properties[o]&&"cadastral"!==e.properties[o]||(r.type="CadastralParcel"):r.placeAttributes[o]=e.properties[o];"address"===e.properties._type&&(r.matchType=void 0!==e.properties.number&&null!==e.properties.number?"street number":"street")}t.locations.push(r)}a.prototype={constructor:a,parse:function(e){var t=new i.A;const r=JSON.parse(e);if("FeatureCollection"===r.type)for(var s=0;s{"use strict";r.d(t,{A:()=>p});var o=r(2710),n=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(6767),c=r(9375);function u(e){if(!(this instanceof u))throw new TypeError(n.A.getMessage("CLASS_CONSTRUCTOR","Geocode"));this.CLASSNAME="Geocode",this.logger=o.A.getLogger("Gp.Services.Geocode"),this.logger.trace("[Constructeur Geocode (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=a.A.Geocode.newUrl()),s.A.apply(this,[t]),!t.hasOwnProperty("query"))throw new Error(n.A.getMessage("PARAM_MISSING","query"));if(this.options.query=t.query,t.index||(this.options.index=t.index="StreetAddress"),t.filters)for(var r=Object.keys(t.filters),i=0;i0?t.index=t.filters.type[0]:t.index=t.filters.type),delete t.filters.type),t.filters.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),delete t.filters.bbox)),delete t.filterOptions),t.position&&(t.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),t.position.lon||(t.position.lon=t.position.x),delete t.position.x),t.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),t.position.lat||(t.position.lat=t.position.y),delete t.position.y)),t.returnFreeForm&&(this.logger.warn("The parameter 'returnFreeForm' is deprecated"),delete t.returnFreeForm),t.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete t.srs),t},u.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,geocodeMethod:"search",query:this.options.query,index:this.options.index,returnTrueGeometry:this.options.returnTrueGeometry,position:this.options.position,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=l.A.build(r),this.request?t.call(this,this.request):e.call(this,new i.A(n.A.getMessage("SERVICE_REQUEST_BUILD")))},u.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};c.A.build(r)}else e.call(this,new i.A(n.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const p=u},6767:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var o=r(2710),n=r(3955);const i={build:function(e){var t=o.A.getLogger("GeocodeRequestFactory");t.trace(["GeocodeRequestFactory::build()"]);var r=e||{},i=new n.A(r);if(!i.processRequestString())throw new Error("Error process request (rest) !");var s=i.requestString;return t.trace(s),s}}},3955:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var o=r(2710),n=r(1097),i=r(3757);function s(e){if(this.logger=o.A.getLogger("GeocodeRequestREST"),this.logger.trace("[Constructeur GeocodeRequestREST ()]"),!(this instanceof s))throw new TypeError("GeocodeRequestREST constructor cannot be called as a function.");if(!e)throw new Error(n.A.getMessage("PARAM_EMPTY","options"));this.settings=e}s.prototype={requestString:null,constructor:s,processRequestString:function(){var e="";const t=new i.A(this.settings).getParams();for(var r=0;r{"use strict";r.d(t,{A:()=>i});var o=r(2710);function n(e){if(!(this instanceof n))throw new TypeError("GeocodeParamREST constructor cannot be called as a function.");if(this.logger=o.A.getLogger(),this.logger.trace("[Constructeur GeocodeParamREST ()]"),this.options=e||{},!this.options.geocodeMethod||"search"!==this.options.geocodeMethod&&"reverse"!==this.options.geocodeMethod)throw new Error("Error geocodeMethod not valid");this.geocodeMethod=this.options.geocodeMethod,this.query=void 0!==this.options?this.options.query:null,this.searchGeometry=this.options.searchGeometry||null,this.index=this.options.index||null,this.lon=this.options.position&&this.options.position.lon?this.options.position.lon:null,this.lat=this.options.position&&this.options.position.lat?this.options.position.lat:null,this.maxResp=this.options.maxResp||null,this.returnTrueGeometry=this.options.returnTrueGeometry||null,this.filters=this.options.filters||{}}n.CLASSNAME="GeocodeParamREST",n.prototype={constructor:n,getFilters:function(){var e={};for(var t in this.filters)this.filters.hasOwnProperty(t)&&(e[t]=this.filters[t]);return e},getIndex:function(){return void 0===this.index?null:"StreetAddress"===this.index?"address":"CadastralParcel"===this.index?"parcel":"PositionOfInterest"===this.index?"poi":"location"===this.index?"location":this.index},getSearchGeometry:function(){return JSON.stringify(this.searchGeometry)}},n.prototype.getParams=function(){var e=[];"search"===this.geocodeMethod&&e.push({k:"q",v:this.query}),this.index&&e.push({k:"index",v:this.getIndex()}),"reverse"===this.geocodeMethod&&this.searchGeometry&&e.push({k:"searchgeom",v:this.getSearchGeometry()}),this.lon&&this.lat&&(e.push({k:"lon",v:this.lon}),e.push({k:"lat",v:this.lat})),this.maxResp&&e.push({k:"limit",v:this.maxResp}),this.returnTrueGeometry&&e.push({k:"returntruegeometry",v:this.returnTrueGeometry});const t=this.getFilters();for(var r in t)e.push({k:r,v:t[r]});return e};const i=n},9375:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var o=r(8288),n=r(1097),i=r(9723);const s={build:function(e){var t=null;if(e.response){if(e.rawResponse)t=e.response;else{try{if(!(t=(new i.A).parse(e.response)))throw new Error("L'analyse de la réponse du service !?")}catch(t){var r=t.message;return"string"==typeof e.response?r+="('"+e.response+"')":r+="('"+e.response.documentElement.innerHTML+"')",void e.onError.call(e.scope,new o.A({message:n.A.getMessage("SERVICE_RESPONSE_ANALYSE",r),type:o.A.TYPE_UNKERR,status:-1}))}if(t.exceptionReport)return void e.onError.call(e.scope,new o.A({message:n.A.getMessage("SERVICE_RESPONSE_EXCEPTION",t.exceptionReport),type:o.A.TYPE_SRVERR,status:200}))}e.onSuccess.call(e.scope,t)}else e.onError.call(e.scope,new o.A({message:n.A.getMessage("SERVICE_RESPONSE_EMPTY"),type:o.A.TYPE_SRVERR,status:-1}))}}},1135:(e,t,r)=>{"use strict";function o(){if(!(this instanceof o))throw new TypeError("GeocodeResponse constructor cannot be called as a function.");this.locations=[]}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},6025:(e,t,r)=>{"use strict";function o(){if(!(this instanceof o))throw new TypeError("GeocodedLocation constructor cannot be called as a function.");this.position=null,this.matchType=null,this.placeAttributes={},this.type=null,this.accuracy=null,this.CLASSNAME="GeocodedLocation"}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},6064:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var o=r(2710),n=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(6767),c=r(9375);function u(e){if(!(this instanceof u))throw new TypeError(n.A.getMessage("CLASS_CONSTRUCTOR","ReverseGeocode"));this.CLASSNAME="ReverseGeocode",this.logger=o.A.getLogger("Gp.Services.ReverseGeocode"),this.logger.trace("[Constructeur ReverseGeocode (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=a.A.ReverseGeocode.newUrl()),s.A.apply(this,[t]),t.searchGeometry)this.options.searchGeometry=t.searchGeometry;else if(!t.position)throw new Error(n.A.getMessage("PARAM_MISSING","searchGeometry"));if(t.index||(this.options.index=t.index="StreetAddress"),t.filters)for(var r=Object.keys(t.filters),i=0;i0?t.index=t.filterOptions.type[0]:t.index=t.filterOptions.type),delete t.filterOptions.type),t.filterOptions.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),t.searchGeometry||(t.searchGeometry=this.bbox2Json(t.filterOptions.bbox)),delete t.filterOptions.bbox),t.filterOptions.circle&&(this.logger.warn("The parameter 'filterOptions.circle' is deprecated"),t.searchGeometry||(t.searchGeometry=this.circle2Json(t.filterOptions.circle)),delete t.filterOptions.circle),t.filterOptions.polygon&&(this.logger.warn("The parameter 'filterOptions.polygon' is deprecated"),t.searchGeometry||(t.searchGeometry=this.polygon2Json(t.filterOptions.polygon)),delete t.filterOptions.polygon),!t.filters&&Object.keys(t.filterOptions).length>0&&(t.filters=t.filterOptions),delete t.filterOptions),t.position&&(t.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),t.position.lon||(t.position.lon=t.position.x),delete t.position.x),t.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),t.position.lat||(t.position.lat=t.position.y),delete t.position.y)),t.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete t.srs),t},u.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,geocodeMethod:"reverse",searchGeometry:this.options.searchGeometry,index:this.options.index,position:this.options.position,returnTrueGeometry:this.options.returnTrueGeometry,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=l.A.build(r),this.request?t.call(this,this.request):e.call(this,new i.A(n.A.getMessage("SERVICE_REQUEST_BUILD")))},u.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};c.A.build(r)}else e.call(this,new i.A(n.A.getMessage("SERVICE_RESPONSE_EMPTY")))},u.prototype.bbox2Json=function(e){return{type:"Polygon",coordinates:[[[e.left,e.top],[e.right,e.top],[e.right,e.bottom],[e.left,e.bottom],[e.left,e.top]]]}},u.prototype.circle2Json=function(e){return{type:"Circle",radius:e.radius,coordinates:[e.x,e.y]}},u.prototype.polygon2Json=function(e){for(var t={type:"Polygon",coordinates:[[]]},r=0;r{"use strict";r.d(t,{A:()=>p});var o=r(2710),n=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(9721),c=r(8297);function u(e){if(!(this instanceof u))throw new TypeError(n.A.getMessage("CLASS_CONSTRUCTOR","ProcessIsoCurve"));if(this.CLASSNAME="ProcessIsoCurve",s.A.apply(this,arguments),this.logger=o.A.getLogger("Gp.Services.ProcessIsoCurve"),this.logger.trace("[Constructeur ProcessIsoCurve (options)]"),!e.position)throw new Error(n.A.getMessage("PARAM_MISSING","position"));if(null===e.position.x)throw new Error(n.A.getMessage("PARAM_MISSING","position.x"));if(null===e.position.y)throw new Error(n.A.getMessage("PARAM_MISSING","position.y"));if(!e.time&&!e.distance)throw new Error("Parameter (s) 'distance' missing. Parameter time to calculate an isochrone, parameter distance for an isodistance");if(!e.time&&e.distance&&(this.options.method="distance",this.options.time&&delete this.options.time),e.time&&!e.distance&&(this.options.method="time",this.options.distance&&delete this.options.distance),this.options.method=this.options.method||"time",this.options.resource=e.resource||"bdtopo-valhalla",this.options.exclusions=e.exclusions||[],this.options.reverse=e.reverse||!1,this.options.srs=e.srs||"EPSG:4326",this.options.distanceUnit=e.distanceUnit||"m",this.options.timeUnit=e.timeUnit||"second",e.smoothing&&this.logger.warn("options.smoothing is DEPRECATED"),this.options.smoothing=!1,e.holes&&this.logger.warn("options.holes is DEPRECATED"),this.options.holes=!1,e.graph?("Voiture"===e.graph&&(this.options.graph="car"),"Pieton"===e.graph&&(this.options.graph="pedestrian")):this.options.graph="car",this.options.constraints=[],e.constraints){if(!Array.isArray(e.constraints))throw new Error(n.A.getMessage("PARAM_TYPE","constraints"));for(var t=0;t{"use strict";r.d(t,{A:()=>a});var o=r(2710),n=r(1097),i=r(527);function s(e){if(this.logger=o.A.getLogger("ProcessIsoCurveRequest"),this.logger.trace("[Constructeur ProcessIsoCurveRequest ()]"),!(this instanceof s))throw new TypeError("ProcessIsoCurveRequest constructor cannot be called as a function.");if(!e)throw new Error(n.A.getMessage("PARAM_EMPTY","options"));this.settings=e,this.mode=this.settings.httpMethod||"GET"}s.prototype={requestString:null,constructor:s,processRequestString:function(){var e="",t=0;switch(this.mode){case"GET":this.logger.trace("Process GET Request");var r=new i.A(this.settings).getParams();for(t=0;t{"use strict";r.d(t,{A:()=>i});var o=r(2710);function n(e){if(!(this instanceof n))throw new TypeError("ProcessIsoCurveParam constructor cannot be called as a function.");this.logger=o.A.getLogger(),this.logger.trace("[Constructeur ProcessIsoCurveParam ()]"),this.options=e||{},this.id=this.options.id,this.resource=this.options.resource,this.point=this.options.position,this.crs=this.options.srs,this.profile=this.options.graph,this.constraints=this.options.constraints,this.reverse=this.options.reverse,this.timeUnit=this.options.timeUnit,this.distanceUnit=this.options.distanceUnit,"distance"===this.options.method?(this.costType="distance",this.costValue=this.options.distance,"m"===this.distanceUnit&&this.costValue>=5e4&&(this.distanceUnit="km",this.costValue/=1e3)):(this.costType="time",this.costValue=this.options.time)}n.CLASSNAME="ProcessIsoCurveParam",n.prototype={constructor:n,getLocation:function(){return this.point.x+","+this.point.y},getDistanceUnit:function(){return"m"===this.distanceUnit?"meter":"km"===this.distanceUnit?"kilometer":""},getConstraints:function(){var e=[];if(0!==this.constraints.length)for(var t=0;t{"use strict";r.d(t,{A:()=>a});var o=r(2710),n=r(1097),i=r(8288),s=r(1489);const a={build:function(e){var t=o.A.getLogger("ProcessIsoCurveResponseFactory");t.trace(["ProcessIsoCurveResponseFactory::build()"]);var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{var a;if(t.trace("analyze response : json"),a="string"==typeof e.response?JSON.parse(e.response):e.response,r=new s.A,!a)return void e.onError.call(e.scope,new i.A(n.A.getMessage("SERVICE_RESPONSE_ANALYSE",e.response)));"distance"===a.costType?(r.time="",r.distance=a.costValue):(r.time=a.costValue,r.distance=""),r.message="",r.id="",r.srs=a.crs,r.geometry=a.geometry;var l=a.point.split(",");if(r.location&&(r.location.x=l[0],r.location.y=l[1]),r.exceptionReport)return void e.onError.call(e.scope,new i.A({message:n.A.getMessage("SERVICE_RESPONSE_EXCEPTION",r.exceptionReport),type:i.A.TYPE_SRVERR,status:200}))}e.onSuccess.call(e.scope,r)}else e.onError.call(e.scope,new i.A(n.A.getMessage("SERVICE_RESPONSE_EMPTY")))}}},1489:(e,t,r)=>{"use strict";function o(){if(!(this instanceof o))throw new TypeError("ProcessIsoCurveResponse constructor cannot be called as a function.");this.message=null,this.id=null,this.location={},this.location.x=null,this.location.y=null,this.srs=null,this.geometry=null,this.time=null,this.distance=null}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},6759:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var o=r(2710),n=r(8288),i=r(5851);const s={build:function(e){o.A.getLogger("RouteRequestFactory").trace(["RouteRequestFactory::build()"]);var t=e||{},r=!(null===e.onError||"function"!=typeof e.onError),s=null,a=new i.A(t);if(!a.processRequestString()){if(s="Error process request (rest) !",r)return void e.onError.call(e.scope,new n.A(s));throw new Error(s)}return a.requestString}}},5851:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var o=r(2710),n=r(1097),i=r(2785);function s(e){if(this.logger=o.A.getLogger("RouteRequestREST"),this.logger.trace("[Constructeur RouteRequestREST ()]"),!(this instanceof s))throw new TypeError("RouteRequestREST constructor cannot be called as a function.");if(!e)throw new Error(n.A.getMessage("PARAM_EMPTY","options"));this.settings=e}s.prototype={requestString:null,constructor:s,processRequestString:function(){this.logger.warn(" PROTOTYPE !");for(var e=new i.A(this.settings).getParams(),t="",r=0;r{"use strict";r.d(t,{A:()=>i});var o=r(2710);function n(e){if(!(this instanceof n))throw new TypeError("RouteParamREST constructor cannot be called as a function.");this.logger=o.A.getLogger(),this.logger.trace("[Constructeur RouteParamREST ()]"),this.options=e||{},this.resource=this.options.resource,this.start=this.options.startPoint.x+","+this.options.startPoint.y,this.end=this.options.endPoint.x+","+this.options.endPoint.y,this.intermediates=this.options.viaPoints,this.profile=this.options.graph,this.crs=this.options.srs,this.constraints=this.options.constraints,this.optimization=this.options.routePreference,this.getSteps=this.options.geometryInInstructions?"true":"false",this.distanceUnit=this.options.distanceUnit,this.timeUnit=this.options.timeUnit,this.waysAttributes=this.options.waysAttributes}n.CLASSNAME="RouteParamREST",n.prototype={constructor:n,getIntermediates:function(){var e=[];if(0!==this.intermediates.length)for(var t=0;t{"use strict";r.d(t,{A:()=>l});var o=r(2710),n=r(1097),i=r(8288),s=r(2993),a=r(7868);const l={build:function(e){var t=o.A.getLogger("RouteResponseFactory");t.trace("RouteResponseFactory::build()");var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{var l;if(t.trace("analyze response : json"),l="string"==typeof e.response?JSON.parse(e.response):e.response){if(l.message)return void e.onError.call(e.scope,new i.A(n.A.getMessage("SERVICE_RESPONSE_EXCEPTION",l.message)));var c=[],u=[],p=[];if((r=new s.A).hasOwnProperty("totalTime")&&(r.totalTime=parseFloat(l.duration)),r.hasOwnProperty("totalDistance")&&(r.totalDistance=parseFloat(l.distance)),r.hasOwnProperty("bbox")&&(r.bbox.left=parseFloat(l.bbox[0]),r.bbox.bottom=parseFloat(l.bbox[1]),r.bbox.right=parseFloat(l.bbox[2]),r.bbox.top=parseFloat(l.bbox[3])),r.hasOwnProperty("routeGeometry")&&!e.geometryInInstructions&&(r.routeGeometry=l.geometry),r.hasOwnProperty("routeInstructions")&&e.geometryInInstructions){var h,f=l.portions;if(Array.isArray(f)&&f.length)for(h=0;h{"use strict";function o(){if(!(this instanceof o))throw new TypeError("RouteInstruction constructor cannot be called as a function.");this.duration=null,this.distance=null,this.code=null,this.instruction=null,this.geometry=null}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},2993:(e,t,r)=>{"use strict";function o(){if(!(this instanceof o))throw new TypeError("RouteResponse constructor cannot be called as a function.");this.totalTime=null,this.totalDistance=null,this.bbox={left:null,right:null,top:null,bottom:null},this.routeGeometry=null,this.routeInstructions=[]}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},7372:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var o=r(2710),n=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(6759),c=r(3753);function u(e){if(!(this instanceof u))throw new TypeError(n.A.getMessage("CLASS_CONSTRUCTOR","Route"));if(this.CLASSNAME="Route",s.A.apply(this,arguments),this.logger=o.A.getLogger("Gp.Services.Route"),this.logger.trace("[Constructeur Route (options)]"),!e.startPoint)throw new Error(n.A.getMessage("PARAM_MISSING","startPoint"));if(null===e.startPoint.x)throw new Error(n.A.getMessage("PARAM_MISSING","startPoint.x"));if(null===e.startPoint.y)throw new Error(n.A.getMessage("PARAM_MISSING","startPoint.y"));if(!e.endPoint)throw new Error(n.A.getMessage("PARAM_MISSING","endPoint"));if(null===e.endPoint.x)throw new Error(n.A.getMessage("PARAM_MISSING","endPoint.x"));if(null===e.endPoint.y)throw new Error(n.A.getMessage("PARAM_MISSING","endPoint.y"));if(e.outputFormat&&"json"!==e.outputFormat&&this.logger.warn("options.outputFormat could only be json"),this.options.outputFormat="json",this.options.resource=e.resource||"bdtopo-osrm",this.options.startPoint=e.startPoint,this.options.endPoint=e.endPoint,this.options.viaPoints=e.viaPoints||[],this.options.routePreference=e.routePreference||"fastest",e.graph?("Voiture"===e.graph&&(this.options.graph="car"),"Pieton"===e.graph&&(this.options.graph="pedestrian")):this.options.graph="car",this.options.constraints=[],e.constraints){if(!Array.isArray(e.constraints))throw new Error(n.A.getMessage("PARAM_TYPE","constraints"));for(var t=0;t{"use strict";r.d(t,{A:()=>u});var o=r(4154),n=r(2366),i=r(1520),s=r(6064),a=r(9338),l=r(7372),c=r(7180);const u={getConfig:function(e){new o.A(e).call()},getAltitude:function(e){new n.A(e).call()},geocode:function(e){new i.A(e).call()},reverseGeocode:function(e){new s.A(e).call()},autoComplete:function(e){new a.A(e).call()},route:function(e){new l.A(e).call()},isoCurve:function(e){new c.A(e).call()}}},3474:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});const o={normalyzeParameters:function(e){var t=null;if(e){var r=[];for(var o in e)if(e.hasOwnProperty(o)){var n=e[o];n||(n=""),r.push(o+"="+n)}t=r.join("&")}return t},normalyzeUrl:function(e,t,r){var o=e;if(e){if(e.split("?").length-1>=2){var n=e.search(/\?/)+1;o=e.substring(0,n)+e.slice(n).replace(/\?/g,"&")}var i=e.indexOf("?");-1===i&&(o+="?"),-1!==i&&i!==e.length-1&&(o+="&")}return t&&(o+="string"==typeof t?t=t.replace("?",""):this.normalyzeParameters(t)),r&&(o=encodeURIComponent(o)),o},indent:function(e,t){return new Array((e||0)+1).join("\t")+t}}},2710:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var o=r(3065);const n={getLogger:function(e){if(void 0===t)var t={env:{VERBOSE:!1}};t.env.VERBOSE?o.enableAll():o.disableAll();var r=e||"default";return o.getLogger(r)}}},1097:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});const o={PARAM_MISSING:"Parameter(s) '%var%' missing",PARAM_EMPTY:"Parameter(s) '%var%' empty",PARAM_TYPE:"Wrong type(s) for parameter(s) '%var%'",PARAM_FORMAT:"Parameter(s) '%var%' not correctly formatted",PARAM_NOT_SUPPORT:"Value(s) for parameter(s) '%var%' not supported",PARAM_NOT_SUPPORT_NODEJS:"Value(s) for parameter(s) '%var%' not supported to NodeJS",PARAM_UNKNOWN:"Value(s) for parameter(s) '%var%' unknown",SERVICE_REQUEST_BUILD:"An error occurred during the request building of the service",SERVICE_REQUEST_EMPTY:"The request sent to the service is empty",SERVICE_RESPONSE_EXCEPTION:"The service returned an exception : '%var%'",SERVICE_RESPONSE_EXCEPTION_2:"The service returned an exception",SERVICE_RESPONSE_ANALYSE:"An error occurred while parsing the response '%var%' of the service",SERVICE_RESPONSE_ANALYSE_2:"An unknown error occurred while parsing the response",SERVICE_RESPONSE_EMPTY:"The response of the service is empty",SERVICE_RESPONSE_EMPTY_2:"The response from the service could not be analyzed or is empty",SERVICE_RESPONSE_FORMAT:"The format of the service response is not supported (handled format(s) : '%var%')",SERVICE_RESPONSE_FORMAT_2:"The format of the service response is not supported",SERVICE_RESPONSE_FORMAT_3:"No suggestion matching the search",CLASS_CONSTRUCTOR:"'%var%' constructor cannot be called as a function.",getMessage:function(e,t){if(0===Object.keys(arguments).length)return"Message indefined !";var r=Array.prototype.slice.call(arguments),o=r.shift(),n=r,i=this[o];try{i=Array.isArray(n)&&n.length>0?i.replace("%var%",n.join(" - ")):i.replace("%var%","%var% (not specified)")}catch(e){}return i}}},3065:function(e,t,r){var o,n;!function(){"use strict";o=function(){var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),o=["trace","debug","info","warn","error"],n={},i=null;function s(e,t){var r=e[t];if("function"==typeof r.bind)return r.bind(e);try{return Function.prototype.bind.call(r,e)}catch(t){return function(){return Function.prototype.apply.apply(r,[e,arguments])}}}function a(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function l(o){return"debug"===o&&(o="log"),typeof console!==t&&("trace"===o&&r?a:void 0!==console[o]?s(console,o):void 0!==console.log?s(console,"log"):e)}function c(){for(var r=this.getLevel(),n=0;n=0&&t<=u.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?h+=":"+e:"symbol"==typeof e&&(h=void 0),u.name=e,u.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},u.methodFactory=r||p,u.getLevel=function(){return null!=l?l:null!=a?a:s},u.setLevel=function(e,t){return l=m(e),!1!==t&&f(l),c.call(u)},u.setDefaultLevel=function(e){a=m(e),d()||u.setLevel(e,!1)},u.resetLevel=function(){l=null,g(),c.call(u)},u.enableAll=function(e){u.setLevel(u.levels.TRACE,e)},u.disableAll=function(e){u.setLevel(u.levels.SILENT,e)},u.rebuild=function(){if(i!==u&&(s=m(i.getLevel())),c.call(u),i===u)for(var e in n)n[e].rebuild()},s=m(i?i.getLevel():"WARN");var E=d();null!=E&&(l=m(E)),c.call(u)}(i=new h).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=n[e];return t||(t=n[e]=new h(e,i.methodFactory)),t};var f=typeof window!==t?window.log:void 0;return i.noConflict=function(){return typeof window!==t&&window.log===i&&(window.log=f),i},i.getLoggers=function(){return n},i.default=i,i},void 0===(n="function"==typeof o?o.call(t,r,t,e):o)||(e.exports=n)}()},3092:(e,t,r)=>{"use strict";var o=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==r.g)return r.g;throw new Error("unable to locate global object")}();e.exports=t=o.fetch,o.fetch&&(t.default=o.fetch.bind(o)),t.Headers=o.Headers,t.Request=o.Request,t.Response=o.Response},2938:e=>{"use strict";e.exports=ol.extent},9583:e=>{"use strict";e.exports=ol.layer.Tile},9201:e=>{"use strict";e.exports=ol.proj},9032:e=>{"use strict";e.exports=JSON.parse('{"rE":"3.4.6","p6":"19/12/2024"}')},8330:e=>{"use strict";e.exports=JSON.parse('{"rE":"1.0.0-beta.1-317"}')}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var i=t[o]={exports:{}};return e[o].call(i.exports,i,i.exports,r),i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var o={};(()=>{"use strict";r.d(o,{default:()=>E});var e,t=r(5844);const n={generate:(e=Math.floor(Date.now()),function(){return e++}),name:function(e){var t=null,r=e.lastIndexOf("-");return t=-1===r?e:e.substring(0,r),t},index:function(e){var t=null,r=this.name(e),o=r.lastIndexOf("_");return-1!==o&&(t=r.substring(o+1)),t},uuid:function(e){var t=null,r=e.lastIndexOf("-");return-1!==r&&(t=parseInt(e.substring(r+1),10)),t}};var i=r(3487);const s=ol.control.OverviewMap;var a=r.n(s);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function c(e,t){for(var r=0;r{"use strict";function o(e){if(!(this instanceof o))throw new TypeError("ErrorService constructor cannot be called as a function.");var t=e;"string"==typeof e||e instanceof String?(this.message=e,this.status=-1,this.type=o.TYPE_UNKERR):(this.message=t.message||"undefined!?",this.type=t.type,this.status=t.status||-1),this.name="ErrorService",this.stack=(new Error).stack}r.d(t,{A:()=>n}),o.TYPE_SRVERR="SERVICE_ERROR",o.TYPE_USEERR="USAGE_ERROR",o.TYPE_UNKERR="UNKNOWN_ERROR",o.prototype=Object.create(Error.prototype,{constructor:{value:o,writable:!0,configurable:!0}});const n=o},4841:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var o=r(2710);function n(e){if(this.logger=o.A.getLogger(),this.logger.trace("[Constructeur WPS()]"),!(this instanceof n))throw new TypeError("WPS constructor cannot be called as a function.");if(this.options=e||{},this.DataObject=this.options.data,!this.DataObject)throw new TypeError("This data object is not defined !");this.paramservice=this.options.param.service||"WPS",this.paramversion=this.options.param.version||"1.0.0",this.paramidentifier=this.options.param.identifier||"gs:WPS",this.paramrawdataoutput=this.options.param.rawdataoutput||"result",this.paramrequest=this.options.param.request||"Execute",this.method=this.options.method||"GET"}n.prototype={requestString:null,constructor:n,template:{get:{value:"service=__SERVICE__&version=__VERSION__&rawdataoutput=__RAWDATAOUTPUT__&identifier=__IDENTIFIER__&request=__REQUEST__&datainputs=\x3c!-- __DATAINPUTS__ --\x3e",input:"__KEY__=__DATA__"},post:{value:'__IDENTIFIER__\x3c!-- __DATAINPUTS__ --\x3e__RAWDATAOUTPUT__',input:"__KEY____DATA__"}},namespaceByDefault:function(){return['xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"','xmlns="http://www.opengis.net/wps/1.0.0"','xmlns:wfs="http://www.opengis.net/wfs"','xmlns:wps="http://www.opengis.net/wps/1.0.0"','xmlns:ows="http://www.opengis.net/ows/1.1"','xmlns:gml="http://www.opengis.net/gml"','xmlns:ogc="http://www.opengis.net/ogc"','xmlns:wcs="http://www.opengis.net/wcs/1.1.1"','xmlns:xlink="http://www.w3.org/1999/xlink"'].join(" ")},schemaLocationByDefault:function(){return'xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd"'},processRequestString:function(){this.logger.trace("WPS::processRequestString ()");var e="";if("POST"===this.method)e=this.template.post.value;else{if("GET"!==this.method)return this.logger.error("No other method supported by the service !"),!1;e=this.template.get.value}return e=(e=(e=(e=(e=e.replace(/__SERVICE__/g,this.paramservice)).replace(/__VERSION__/g,this.paramversion)).replace(/__RAWDATAOUTPUT__/g,this.paramrawdataoutput)).replace(/__IDENTIFIER__/g,this.paramidentifier)).replace(/__REQUEST__/g,this.paramrequest),"POST"===this.method&&(e=(e=e.replace(/__NAMESPACE__/g,this.namespaceByDefault)).replace(/__SCHEMALOCATION__/g,this.schemaLocationByDefault)),(e=e.replace(//g,this.__addDataInputs()))?(this.requestString=e,this.logger.trace("traduction tmpl",e),!0):(this.logger.warn("traduction tmpl : empty request !?"),!1)},__addDataInputs:function(){this.logger.trace("WPS::__addDataInputs ()");for(var e,t="GET"===this.method?this.template.get.input:this.template.post.input,r="GET"===this.method?";":"",o="",n=this,i=this.DataObject.getData(),s=0;s{"use strict";r.d(t,{A:()=>a});var o=r(2710);function n(e){if(!(this instanceof n))throw new TypeError("XML constructor cannot be called as a function.");this.logger=o.A.getLogger(),this.logger.trace("[Constructeur XML ()]"),this.xmlString=null,this.xmlDoc=null,this.reader=null,e&&(e.xmlString&&"string"==typeof e.xmlString&&(this.xmlString=e.xmlString,this.xmlDoc=i(e.xmlString)),e.reader&&this.setReader(e.reader))}function i(e){if("undefined"==typeof window)return(new(0,r(8978).S4)).parseFromString(e,"text/xml");var t,o,n="Erreur lors du parsing de la réponse du service : XML non conforme";if(window.ActiveXObject){(o=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,o.loadXML(e);var i=o.parseError;if(i.errorCode)throw i.line&&i.linepos&&(n+="( ligne "+i.line+", colonne "+i.linepos),i.reason&&(n+=": "+i.reason+")"),new Error(n);return o}if(window.DOMParser){t=new window.DOMParser;try{o=t.parseFromString(e,"text/xml")}catch(e){throw"SyntaxError"===e.message?new Error(n):new Error("Erreur lors du parsing de la réponse du service : "+e.message)}if(o.getElementsByTagName("parsererror").length>0)for(var s=o.getElementsByTagName("parsererror"),a=0;a0){var r=function(e){if(e.attributes.length>0){for(var t={},r=e.attributes,o=0;o{"use strict";r.d(t,{Ay:()=>w});var o=r(3255),n=r(7966),i=r(3565),s=r(3041),a=r(5941),l=r(9924),c=r(1489),u=r(2993),p=r(7868),h=r(4154),f=r(210),d=r(8288),g=r(3474),m=r(9032);const E=m.rE,y=m.p6;var v={};v.servicesVersion=E,v.servicesDate=y,v.Protocols={},v.Protocols.XHR=f.A,v.Services=o.A,v.Services.DefaultUrl=n.A,v.Services.AltiResponse=i.A,v.Services.Alti={},v.Services.Alti.Elevation=s.A,v.Services.AutoCompleteResponse=a.A,v.Services.AutoComplete={},v.Services.AutoComplete.SuggestedLocation=l.A,v.Services.Config=h.A,v.Services.IsoCurveResponse=c.A,v.Services.RouteResponse=u.A,v.Services.Route={},v.Services.Route.RouteInstruction=p.A,v.Error=d.A,v.Helper=g.A;const w=v},3494:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var o,n=r(2710);const i={uuid:(o=Math.floor(Date.now()),function(){return o++}),call:function(e){var t=n.A.getLogger("JSONP");if(t.trace("[JSONP::call ()]"),!e)throw t.error("missing parameter : options !"),new Error("missing parameter : options !");if(!e.url)throw t.error("missing parameter : options.url !"),new Error("missing parameter : options.url !");if(e.timeOut||(t.info("setting 'options.timeOut' default value"),e.timeOut=0),!e.onResponse)throw t.error("missing parameter : options.onResponse !"),new Error("missing parameter : options.onResponse !");var r="string"==typeof e.callbackSuffix?e.callbackSuffix:this.uuid(),o=!1,i=!1,s=e.url.indexOf("callback=");if(-1!==s){o=!0;var a=e.url.indexOf("&",s);-1===a&&(a=e.url.length);var l=e.url.substring(s+9,a);l&&(i=!0,e.callbackName=l,t.info("setting 'options.callbackName' value ("+e.callbackName+") from 'options.url' parameter"))}if(!o){var c=e.url.indexOf("?");-1===c?e.url=e.url+"?callback=":c===e.url.length?e.url=e.url+"callback=":e.url=e.url+"&callback=",t.info("setting callback default key in 'options.url' : "+e.url)}var u=!!e.callbackName||i;if(i||(e.callbackName||(t.info("setting 'options.callbackName' default value"),e.callbackName="callback",(r||""===r)&&(e.callbackName+=r)),e.url=e.url.replace("callback=","callback="+e.callbackName),t.info("setting callback function name in 'options.url' : "+e.url)),e.onTimeOut||(t.info("setting 'options.onTimeOut' default value"),e.onTimeOut=function(){console.log("TimeOut while invoking url : "+e.url)}),!u){var p=this,h=null;e.timeOut>0&&(h=window.setTimeout((function(){window[e.callbackName]=function(){},e.onTimeOut(),p._deleteScript(r)}),e.timeOut)),window[e.callbackName]=function(t){window.clearTimeout(h),e.onResponse(t),p._deleteScript(r)}}this._createScript(r,e.url)},_createScript:function(e,t){var r,o=document.getElementById("results"+e);(r=document.createElement("script")).setAttribute("type","text/javascript"),r.setAttribute("src",t),r.setAttribute("charset","UTF-8"),r.setAttribute("id","results"+e),r.setAttribute("async","true");var n=document.documentElement||document.getElementsByTagName("head")[0];null===o?n.appendChild(r):n.replaceChild(r,o)},_deleteScript:function(e){var t=document.getElementById("results"+e);if(t){var r=t.parentNode||document.documentElement;if(!r)return;r.removeChild(t)}}}},6250:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var o=r(3474),n=r(210),i=r(3494);const s={send:function(e){var t=e||{method:"GET",protocol:"XHR",timeOut:0,format:null,wrap:!0,nocache:!0,output:"json",callback:null,callbackSuffix:null};if("undefined"!=typeof window||"JSONP"!==e.protocol){if("XHR"===e.protocol||"json"===e.format?t.wrap=!1:"JSONP"===e.protocol&&"xml"===e.format&&(t.wrap=!0),t.callback=null,t.output=t.wrap?"json":null,t.wrap){var r={};r.output=t.output,r.callback=t.callback,delete r.callback,t.url=o.A.normalyzeUrl(e.url,r)}switch(t.protocol){case"XHR":"GET"===e.method&&e.nocache&&(t.url=o.A.normalyzeUrl(t.url,{t:(new Date).getTime()})),n.A.call(t);break;case"JSONP":t.data&&(t.url=o.A.normalyzeUrl(t.url,t.data)),i.A.call(t);break;default:throw new Error("protocol not supported (XHR|JSONP) !")}}else console.log("Value (s) for parameter (s) 'protocol=JSONP (instead use XHR)' not supported to NodeJS")}}},210:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var o=r(2710),n=r(3474),i=r(6964),s=r.n(i);const a={call:function(e){var t=o.A.getLogger("XHR");if(t.trace("[XHR::call()]"),s().polyfill(),!e.url)throw new Error("missing parameter : url is not defined !");if(!e.method)throw new Error("missing parameter : method is not defined !");e.format||(e.format="text");var r={};switch(r.url=e.url,r.data=e.data?e.data:null,r.method=e.method,r.timeOut=e.timeOut||0,r.scope=e.scope||this,r.proxy=e.proxy||null,r.content=e.content||null,r.headers=e.headers||{referer:"http://localhost"},e.method){case"DELETE":case"GET":break;case"PUT":case"POST":r.content=e.content?e.content:"application/x-www-form-urlencoded",r.headers=e.headers?e.headers:{referer:"http://localhost"};break;case"HEAD":case"OPTIONS":throw new Error("HTTP method not yet supported !");default:throw new Error("HTTP method unknown !")}switch(e.format){case"text":this.__call(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;case"json":this.__callJSON(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;case"xml":this.__callXML(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;default:throw new Error("This output Format is not yet supported !")}},__call:function(e){var t=o.A.getLogger("XHR");return t.trace("[XHR::__call()]"),new Promise((function(o,i){var s="POST"===e.method||"PUT"===e.method?1:0;e.data&&("object"==typeof e.data&&Object.keys(e.data).length||"string"==typeof e.data&&e.data.length)&&!s&&(e.url=n.A.normalyzeUrl(e.url,e.data)),t.trace("URL = ",e.url);var a=null;if("undefined"==typeof window){var l=r(3092),c={headers:{Referer:"https://localhost"}};return e.data&&"string"==typeof e.data&&s&&(c={method:e.method,body:e.data,headers:{"Content-Type":e.content,Referer:"https://localhost"}}),l(e.url,c).then((function(e){if(e.ok)o(e.text());else{var t="Errors Occured on Http Request (status : '"+e.statusText+"' | url : '"+e.url+"')",r=e.status;i({message:t,status:r})}})).catch((function(e){i({message:e,status:-1})}))}if(window.XMLHttpRequest){t.trace("XMLHttpRequest"),(a=new XMLHttpRequest).open(e.method,e.url,!0),a.overrideMimeType=e.content;var u=null;e.timeOut>0&&(t.trace("XHR - TimeOut actif !"),u=window.setTimeout((function(){i({message:"TimeOut Occured on Http Request with XMLHttpRequest !",status:-1})}),e.timeOut)),s&&(t.trace("data = ",e.data),a.setRequestHeader("Content-type",e.content)),a.onerror=function(e){console.log(e),i(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},a.ontimeout=function(e){console.log(e),i(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},a.onreadystatechange=function(e){if(4===a.readyState)if(200===a.status)window.clearTimeout(u),o(a.response);else{var t="Errors Occured on Http Request (status : '"+e.target.statusText+"' | url : '"+e.target.responseURL+"' | response : '"+e.target.response+"')",r=e.target.status;i({message:t,status:r})}};var p=e.data&&s?e.data:null;a.send(p)}else{if(!window.XDomainRequest)throw new Error("CORS not supported");t.trace("XDomainRequest"),(a=new XDomainRequest).open(e.method,e.url),a.overrideMimeType=e.content,e.timeOut>0&&(a.timeout=e.timeout,t.trace("XHR - TimeOut actif !")),s&&a.setRequestHeader("Content-type",e.content),a.onerror=function(){i(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},a.ontimeout=function(){i(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},a.onload=function(e){if(200===a.status)o(a.responseText);else{var t="Errors Occured on Http Request (status : '"+e.target.statusText+"' | url : '"+e.target.responseURL+"')",r=e.target.status;i({message:t,status:r})}};var h=e.data&&s?e.data:null;a.send(h)}}))},__callJSON:function(e){return this.__call(e).then(JSON.parse).catch((function(t){console.log("_callJSON failed on : ",e.url,t)}))},__callXML:function(e){return this.__call(e).then((function(e){var t;"undefined"==typeof window?t=(new(0,r(8978).S4)).parseFromString(e,"text/xml"):window.DOMParser?t=(new window.DOMParser).parseFromString(e,"text/xml"):((t=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,t.loadXML(e));return t})).catch((function(t){console.log("__callXML failed on : ",e.url,t)}))}}},2366:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var o=r(2710),n=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(8933),c=r(5325);function u(e){if(!(this instanceof u))throw new TypeError(n.A.getMessage("CLASS_CONSTRUCTOR","Alti"));if(this.CLASSNAME="Alti",s.A.apply(this,arguments),this.logger=o.A.getLogger("Gp.Services.Alti"),this.logger.trace("[Constructeur Alti (options)]"),!e.positions)throw new Error(n.A.getMessage("PARAM_MISSING","positions"));if(0===e.positions.length)throw new Error(n.A.getMessage("PARAM_EMPTY","positions"));if(this.options.positions=e.positions,this.options.outputFormat="string"==typeof e.outputFormat?e.outputFormat.toLowerCase():"xml",this.options.resource=e.resource||"ign_rge_alti_wld",this.options.sampling=e.sampling||null,this.options.api="string"==typeof e.api?e.api.toUpperCase():"REST","REST"===this.options.api&&(this.options.httpMethod="GET"),this.options.zonly=e.zonly||!1,this.options.measures=e.measures||!1,!this.options.serverUrl){var t=a.A.Alti.newUrl(),r=null;switch(this.options.api){case"WPS":r=t.wps;break;case"REST":r=t[(e.sampling?"profil":"elevation")+"-"+this.options.outputFormat];break;default:throw new Error(n.A.getMessage("PARAM_UNKNOWN","api"))}if(!r)throw new Error("Url by default not found !");this.options.serverUrl=r,this.logger.trace("Server URL by default : "+this.options.serverUrl)}var i=this.options.serverUrl.lastIndexOf(".");if(-1!==i){var l=this.options.serverUrl.substring(i+1);if(l&&l.length<5)switch(this.logger.trace("Server Extension URL : "+l),l.toLowerCase()){case"json":case"xml":this.options.outputFormat=l.toLowerCase();break;default:throw new Error("type of service : unknown or unsupported (json or xml) !")}}}u.prototype=Object.create(s.A.prototype,{}),u.prototype.constructor=u,u.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,onSuccess:function(e){this.request=e,t.call(this,this.request)},onError:e,scope:this,resource:this.options.resource,positions:this.options.positions,outputFormat:this.options.outputFormat,sampling:this.options.sampling,api:this.options.api,zonly:this.options.zonly,measures:this.options.measures};l.A.build(r)},u.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,outputFormat:this.options.outputFormat,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};c.A.build(r)}else e.call(this,new i.A(n.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const p=u},3667:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var o=r(3565),n=r(3041),i=r(9206),s={};s.READERS={elevations:function(e){var t=new o.A;if(e.hasChildNodes())for(var r,n,i=e.childNodes,a=0;a{"use strict";r.d(t,{A:()=>a});var o=r(2710),n=r(8288),i=r(6933),s=r(4359);const a={build:function(e){o.A.getLogger("AltiRequestFactory").trace(["AltiRequestFactory::build()"]);var t=null,r={type:e.sampling?"Profil":"Elevation",method:e.httpMethod,param:{positions:null,delimiter:null,indent:null,crs:null,format:null,sampling:null,zonly:null,measures:null}};r.param.positions=e.positions,r.param.format=e.outputFormat,r.param.sampling=e.sampling,r.param.zonly=e.zonly,r.param.measures=e.measures,r.param.resource=e.resource;var a=!(null===e.onError||"function"!=typeof e.onError),l=!(null===e.onSuccess||"function"!=typeof e.onSuccess),c=null;switch(e.api){case"REST":var u=new i.A(r);if(!u.processRequestString()){if(c="Error in process request (rest) !",a)return void e.onError.call(e.scope,new n.A(c));throw new Error(c)}t=u.requestString;break;case"WPS":if(r.wps={service:null,version:null,identifier:null,rawdataoutput:null,request:null},!(t=s.A.build(r))){if(c="Error in process request (wps) !",a)return void e.onError.call(e.scope,new n.A(c));throw new Error(c)}break;default:if(c="Type of API is not supported by service (REST or WPS) !",a)return void e.onError.call(e.scope,new n.A(c));throw new Error(c)}return l&&e.onSuccess.call(e.scope,t),t}}},6933:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var o=r(2710),n=r(1097),i=r(5974),s=r(3471);function a(e){if(this.logger=o.A.getLogger("AltiRequestREST"),this.logger.trace("[Constructeur AltiRequestREST ()]"),!(this instanceof a))throw new TypeError("AltiRequestREST constructor cannot be called as a function.");if(this.options=e||{},!this.options)throw new Error(n.A.getMessage("PARAM_EMPTY","options"));if(!this.options.type)throw new Error(n.A.getMessage("PARAM_EMPTY","type (Elevation or Profil)"));switch(this.DataObject=null,this.options.type){case"Elevation":this.DataObject=new i.A(this.options.param);break;case"Profil":this.DataObject=new s.A(this.options.param);break;default:throw new Error(n.A.getMessage("PARAM_TYPE","type (Elevation or Profil)"))}this.method=this.options.method||"GET"}a.prototype={requestString:null,constructor:a,template:{get:{value:"lon=__LON__&lat=__LAT__&indent=__INDENT__&crs='__CRS__'&resource=__RESOURCE__&measures=__MEASURES__",input:{point:"&zonly=__ZONLY__",profil:"&sampling=__SAMPLING__"}},post:{value:"lon=__LON__\nlat=__LAT__\nindent=__INDENT__\ncrs='__CRS__'\nresource='__RESOURCE__'\nmeasures='__MEASURES__'\n",input:{point:"zonly=__ZONLY__\n",profil:"sampling=__SAMPLING__"}}},processRequestString:function(){this.logger.trace("AltiRequestREST::processRequestString ()");var e="";return"POST"===this.method?e=this.template.post.value:"GET"===this.method&&(e=this.template.get.value),e=(e=(e=(e=(e=(e=e.replace(/__LON__/g,this.DataObject.getLon())).replace(/__LAT__/g,this.DataObject.getLat())).replace(/__INDENT__/g,this.DataObject.indent)).replace(/__CRS__/g,this.DataObject.crs)).replace(/__RESOURCE__/g,this.DataObject.resource)).replace(/__MEASURES__/g,this.DataObject.measures),e+=this.__addDataInputs(),this.logger.trace("traduction tmpl",e),this.requestString=e,this.requestString},__addDataInputs:function(){var e;if(this.logger.trace("AltiRequestREST::addDataInput ()"),"POST"===this.method)e=this.template.post;else{if("GET"!==this.method)throw new Error("No other HTTP method supported by the service !");e=this.template.get}if("AltiElevationRequest"===this.DataObject.CLASSNAME)return e.input.point.replace(/__ZONLY__/g,this.DataObject.zonly.toString());if("AltiProfilRequest"===this.DataObject.CLASSNAME)return e.input.profil.replace(/__SAMPLING__/g,this.DataObject.sampling);throw new Error("No other object supported than elevation or profil !?")}};const l=a},4359:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var o=r(2710),n=r(1097),i=r(4841),s=r(5974),a=r(3471);const l={build:function(e){if(o.A.getLogger("AltiRequestWPS").trace(["AltiRequestWPS::build()"]),!e)throw new Error(n.A.getMessage("PARAM_EMPTY","options"));if(!e.type)throw new Error(n.A.getMessage("PARAM_EMPTY","type (Elevation or Profil)"));var t=null;switch(e.type){case"Elevation":e.wps.identifier="gs:WPSElevation",t=new s.A(e.param);break;case"Profil":e.wps.identifier="gs:WPSLineElevation",t=new a.A(e.param);break;default:throw new Error(n.A.getMessage("PARAM_TYPE","type (Elevation or Profil)"))}var r={data:t,method:e.method,param:e.wps},l=new i.A(r);if(!l.processRequestString())throw new Error("Enable to process request !");return l.requestString}}},5974:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var o=r(2710),n=r(6221);function i(e){if(!(this instanceof i))throw new TypeError("AltiElevationRequest constructor cannot be called as a function.");this.CLASSNAME="AltiElevationRequest",n.A.apply(this,arguments),this.logger=o.A.getLogger(),this.logger.trace("[Constructeur AltiElevationRequest ()]"),this.zonly=this.options.zonly||!1}i.prototype=Object.create(n.A.prototype,{zonly:{get:function(){return this._zonly},set:function(e){this._zonly=e}}}),i.prototype.constructor=i,i.prototype.getData=function(){var e=[];return e.push({k:"lon",v:this.getLon()}),e.push({k:"lat",v:this.getLat()}),e.push({k:"indent",v:this.indent}),e.push({k:"crs",v:this.crs}),e.push({k:"zonly",v:this.zonly}),e.push({k:"format",v:this.format}),e.push({k:"resource",v:this.resource}),e};const s=i},3471:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var o=r(2710),n=r(6221);function i(e){if(!(this instanceof i))throw new TypeError("AltiProfilRequest constructor cannot be called as a function.");this.CLASSNAME="AltiProfilRequest",n.A.apply(this,arguments),this.logger=o.A.getLogger(),this.logger.trace("[Constructeur AltiProfilRequest ()]"),this.sampling=this.options.sampling||3}i.prototype=Object.create(n.A.prototype,{sampling:{get:function(){return this._sampling},set:function(e){this._sampling=e}}}),i.prototype.constructor=i,i.prototype.getData=function(){var e=[];return e.push({k:"lon",v:this.getLon()}),e.push({k:"lat",v:this.getLat()}),e.push({k:"indent",v:this.indent}),e.push({k:"crs",v:this.crs}),e.push({k:"sampling",v:this.sampling}),e.push({k:"format",v:this.format}),e.push({k:"resource",v:this.resource}),e};const s=i},6221:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var o=r(2710);function n(e){if(!(this instanceof n))throw new TypeError("AltiRequest constructor cannot be called as a function.");this.logger=o.A.getLogger(),this.logger.trace("[Constructeur AltiRequest ()]"),this.options=e||{},this.positions=this.options.positions||[],this.delimiter=this.options.delimiter||"|",this.indent=this.options.indent||!1,this.crs=this.options.crs||"CRS:84",this.format=this.options.format||"json",this.resource=this.options.resource,this.measures=this.options.measures||!1}n.CLASSNAME="AltiRequest",n.prototype={constructor:n,setPositions:function(e){for(var t=[],r=0;rt||e{"use strict";r.d(t,{A:()=>u});var o=r(2710),n=r(1097),i=r(8288),s=r(4904),a=r(3667),l=r(3565),c=r(3041);const u={build:function(e){var t=o.A.getLogger("AltiResponseFactory");t.trace(["AltiResponseFactory::build()"]);var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{switch(e.outputFormat){case"xml":t.trace("analyze response : xml");try{var u=new s.A({reader:a.A});if("string"==typeof e.response?u.setXMLString(e.response):u.setXMLDoc(e.response),!(r=u.parse()))throw new Error(n.A.getMessage("SERVICE_RESPONSE_EXCEPTION_2"))}catch(t){var p=t.message;return void e.onError.call(e.scope,new i.A({message:n.A.getMessage("SERVICE_RESPONSE_EXCEPTION",p),status:200,type:i.A.TYPE_SRVERR}))}break;case"json":t.trace("analyze response : json"),t.trace("analyze response : ",typeof e.response);var h=null;if((h="string"==typeof e.response?JSON.parse(e.response):e.response)&&h.error)return void e.onError.call(e.scope,new i.A({message:n.A.getMessage("SERVICE_RESPONSE_EXCEPTION",h.error.description),status:200,type:i.A.TYPE_SRVERR}));if(h){var f,d=h.elevations,g=new l.A;if(Array.isArray(d)&&d.length)for(var m=0;m{"use strict";function o(){if(!(this instanceof o))throw new TypeError("AltiResponse constructor cannot be called as a function.");this.elevations=[]}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},3041:(e,t,r)=>{"use strict";function o(){if(!(this instanceof o))throw new TypeError("Elevation constructor cannot be called as a function.");this.z=null}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},9206:(e,t,r)=>{"use strict";function o(){if(!(this instanceof o))throw new TypeError("Measure constructor cannot be called as a function.");this.source_name=null,this.source_measure=null,this.z=null,this.acc=null}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},9338:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var o=r(895),n=r(7966),i=r(4889),s=r(2710),a=r(1097),l=r(3474),c=r(8288);function u(e){if(!(this instanceof u))throw new TypeError(a.A.getMessage("CLASS_CONSTRUCTOR","AutoComplete"));this.CLASSNAME="AutoComplete",this.logger=s.A.getLogger("Gp.Services.AutoComplete"),this.logger.trace("[Constructeur AutoComplete (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=n.A.AutoComplete.newUrl()),o.A.apply(this,arguments),!t.text)throw new Error(a.A.getMessage("PARAM_MISSING","text"));this.options.text=t.text,t.type||(t.type=["StreetAddress,PositionOfInterest"]),this.options.type=t.type,this.options.territory=t.terr||"",this.options.maximumResponses=t.maximumResponses||10,"XHR"===this.options.protocol&&"POST"===this.options.httpMethod&&(this.logger.warn("Le service ne gére pas le mode d'interrogation en POST, on bascule sur du GET !"),this.options.httpMethod="GET"),this.options.outputFormat=this.options.rawResponse?"":"json"}u.prototype=Object.create(o.A.prototype,{}),u.prototype.constructor=u,u.prototype.patchOptionConvertor=function(e){const t=e;return t.filterOptions&&(this.logger.warn("The parameter 'filterOptions' is deprecated"),t.filterOptions.type&&(this.logger.warn("The parameter 'filterOptions.type' is deprecated"),t.type||(t.type=t.filterOptions.type)),t.filterOptions.territory&&(this.logger.warn("The parameter 'filterOptions.territory' is deprecated"),t.terr||(t.terr=t.filterOptions.territory)),delete t.filterOptions),t},u.prototype.buildRequest=function(e,t){var r="";this.options.territory&&(r=this.options.territory);var o="";this.options.type&&(o=this.options.type.join(",")),this.request=l.A.normalyzeParameters({text:encodeURIComponent(this.options.text),type:o,terr:r,maximumResponses:this.options.maximumResponses}),this.request?t.call(this,this.request):e.call(this,new c.A(a.A.getMessage("SERVICE_REQUEST_BUILD")))},u.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onSuccess:t,onError:e,scope:this};i.A.build(r)}else e.call(this,new c.A(a.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const p=u},4889:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var o=r(2710),n=r(1097),i=r(8288),s=r(5941),a=r(9924);const l={build:function(e){var t=o.A.getLogger("AutoCompleteResponseFactory");t.trace(["AutoCompleteResponseFactory::build()"]);var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{var l=null;if(l="string"==typeof e.response?JSON.parse(e.response):e.response){if(l.error)return void e.onError.call(e.scope,new i.A({message:n.A.getMessage("SERVICE_RESPONSE_EXCEPTION",l.error.description),status:l.error.code,type:i.A.TYPE_SRVERR}));if(r=new s.A,!l.results||!Array.isArray(l.results))return void e.onError.call(e.scope,new i.A(n.A.getMessage("SERVICE_RESPONSE_FORMAT_3")));for(var c=null,u=0;u{"use strict";function o(){if(!(this instanceof o))throw new TypeError("AutoCompleteResponse constructor cannot be called as a function.");this.suggestedLocations=[]}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},9924:(e,t,r)=>{"use strict";function o(){if(!(this instanceof o))throw new TypeError("SuggestedLocation constructor cannot be called as a function.");this.type=null,this.position={x:null,y:null},this.commune=null,this.fullText=null,this.postalCode=null,this.classification=null,this.street=null,this.poi=null,this.kind=null}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},895:(e,t,r)=>{"use strict";r.d(t,{A:()=>u});var o=r(2710),n=r(3474),i=r(1097),s=r(6250),a=r(8288),l=r(9032);function c(e){if(!(this instanceof c))throw new TypeError(i.A.getMessage("CLASS_CONSTRUCTOR"));for(var t in this.logger=o.A.getLogger("CommonService"),this.logger.trace("[Constructeur CommonService (options)]"),this.options={protocol:"XHR",ssl:!0,proxyURL:"",callbackSuffix:null,httpMethod:"GET",timeOut:0,rawResponse:!1,scope:this,onSuccess:function(e){console.log("onSuccess - la reponse est la suivante : ",e)},onFailure:function(e){200!==e.status&&e.status?console.log("onFailure - Erreur (",e.status,") : ",e.message):console.log("onFailure : ",e.message)}},e)e.hasOwnProperty(t)&&(this.options[t]=e[t]);if(this.options.rawResponse&&!this.options.onSuccess&&(this.options.onSuccess=function(e){console.log("onSuccess - la réponse brute du service est la suivante : ",e)}),!!(null===this.options.onSuccess||"function"!=typeof this.options.onSuccess))throw new Error(i.A.getMessage("PARAM_MISSING","onSuccess()"));switch(this.options.httpMethod="string"==typeof e.httpMethod?e.httpMethod.toUpperCase():"GET",this.options.httpMethod){case"POST":case"GET":break;case"PUT":case"DELETE":case"HEAD":case"OPTIONS":throw new Error(i.A.getMessage("PARAM_NOT_SUPPORT","httpMethod"));default:throw new Error(i.A.getMessage("PARAM_UNKNOWN","httpMethod"))}switch(this.options.protocol="string"==typeof e.protocol?e.protocol.toUpperCase():"XHR",this.options.protocol){case"JSONP":case"XHR":break;default:throw new Error(i.A.getMessage("PARAM_UNKNOWN","protocol"))}if("undefined"==typeof window&&"JSONP"===this.options.protocol)throw new Error(i.A.getMessage("PARAM_NOT_SUPPORT_NODEJS","protocol=JSONP (instead use XHR)"));"JSONP"===this.options.protocol&&(this.options.httpMethod="GET"),this.options.nocache=e.nocache||!1,this.options.outputFormat=null,this.request=null,this.response=null}c.prototype={constructor:c,call:function(){this.logger.trace("CommonService::call ()");var e=this;function t(t){this.logger.trace("CommonService::onBuildRequest : ",t),this.callService.call(e,n,r)}function r(t){this.logger.trace("CommonService::onCallService : ",t),this.analyzeResponse.call(e,n,o)}function o(e){if(this.logger.trace("CommonService::onAnalyzeResponse : ",e),!e)return n.call(this,new a.A("Analyse de la reponse en échec !?"));this.options.onSuccess.call(this,e)}function n(e){this.logger.trace("CommonService::onError()");var t=e;t instanceof a.A||(t=new a.A(e.message)),this.options.onFailure.call(this,t)}(function(){this.logger.trace("CommonService::run ()"),this.buildRequest.call(e,n,t)}).call(e)},buildRequest:function(e,t){this.logger.error("overwritten method !"),e&&e.call(this,"This method must be overwritten !"),t.call(this,"This method must be overwritten !")},callService:function(e,t){var r=null,o=this.request,i=!(!this.options.proxyURL||"XHR"!==this.options.protocol),c={"gp-access-lib":l.rE};this.options.apiKey&&(c.apiKey=this.options.apiKey),this.options.serverUrl=n.A.normalyzeUrl(this.options.serverUrl,c,!1),i&&("GET"===this.options.httpMethod&&(r=this.options.proxyURL+n.A.normalyzeUrl(this.options.serverUrl,this.request,!0),o=null),"POST"===this.options.httpMethod&&(r=this.options.proxyURL+n.A.normalyzeUrl(this.options.serverUrl,null,!0),o=this.request));var u=this,p={url:r||this.options.serverUrl,method:this.options.httpMethod,protocol:this.options.protocol,timeOut:this.options.timeOut||0,format:this.options.outputFormat,nocache:this.options.nocache||!1,wrap:"XHR"!==this.options.protocol,callbackSuffix:this.options.callbackSuffix,data:o,headers:null,content:this.options.contentType||"application/xml",scope:this.options.scope||this,onResponse:function(r){u.logger.trace("callService::onResponse()");var o=null;if("XHR"===u.options.protocol&&(u.logger.trace("Response XHR",r),o=r),"JSONP"===u.options.protocol){if(u.logger.trace("Response JSON",r),!r)return void e.call(u,new a.A("Le contenu de la reponse est vide !?"));if(r.http){if(200!==r.http.status)return void e.call(u,new a.A({status:r.http.status,message:r.http.error,type:a.A.TYPE_SRVERR}));o=r.xml,u.options.rawResponse&&(o=r)}else o=r}if("function"==typeof u.options.onBeforeParse){var n=u.options.onBeforeParse(o);"string"==typeof n&&(o=n)}u.response=o,t.call(u,o)},onFailure:function(t){u.logger.trace("callService::onFailure()"),t.type=a.A.TYPE_SRVERR,e.call(u,new a.A(t))},onTimeOut:function(){u.logger.trace("callService::onTimeOut()"),e.call(u,new a.A("TimeOut!"))}};s.A.send(p)},analyzeResponse:function(e,t){this.logger.error("overwritten method !"),e&&e.call(this,"This method must be overwritten !"),t.call(this,"This method must be overwritten !")}};const u=c},4154:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var o=r(2710),n=r(1097),i=r(895),s=r(7966),a=r(9939);function l(e){if(!(this instanceof l))throw new TypeError(n.A.getMessage("CLASS_CONSTRUCTOR","Config"));if(this.CLASSNAME="Config",this.logger=o.A.getLogger("Gp.Config"),this.logger.trace("[Constructeur Config (options)]"),!!(null===e.onSuccess||"function"!=typeof e.onSuccess))throw new Error(n.A.getMessage("PARAM_MISSING","onSuccess()"));e.apiKey||e.customConfigFile||(e.apiKey="full"),this.options={},this.options.onSuccess=e.onSuccess,this.options.onFailure=e.onFailure,this.options.sync=e.sync||!1,this.options.listConfigUrls=e.customConfigFile?[e.customConfigFile]:Array.isArray(e.apiKey)?s.A.Config.url(e.apiKey):s.A.Config.url(e.apiKey.split(","))}l.prototype=Object.create(i.A.prototype,{}),l.prototype.constructor=l,l.prototype.buildRequest=function(e,t){this.listConfigUrls=this.options.listConfigUrls,this.listConfigUrls?t.call(this,this.listConfigUrls):e.call(this,new Error("url by default not found !"))},l.prototype.callService=function(e,t){this.options.sync?u.call(this,e,t):c.call(this,e,t)};var c=function(e,t){this.listConfigResults=[];let o=null;if("undefined"==typeof window){var n=r(3092);o=n}else o=window.fetch;var i=e=>o(e,{credentials:"same-origin"}).then((e=>{if(e.ok)return e.json().then((e=>e)).catch((e=>{throw new Error("Exception Json : "+e)}));throw new Error("Exception HTTP : "+e.status+" (status code) !")})).catch((e=>new Promise(((t,r)=>{r(e)})))),s=[];for(let e=0;e{if(!e)throw new Error("results config empty !?");e.forEach((e=>{this.listConfigResults.push(e)}))})).then((()=>{t.call(this,this.listConfigResults)})).catch((t=>{e.call(this,t)}))},u=function(e,t){this.listConfigResults=[];for(var r=0;r{"use strict";function o(){if(!(this instanceof o))throw new TypeError("ConfigInterface constructor cannot be called as a function.");this.generalOptions={apiKeys:{},title:null,defaultGMLGFIStyle:null,theme:null,wgs84Resolutions:[]},this.layers={},this.tileMatrixSets={}}r.d(t,{A:()=>n}),o.prototype={constructor:o,isKeyConfLoaded:function(e){if(e)return!!this.generalOptions.apiKeys[e]},getLayersId:function(e){return this.generalOptions.apiKeys[e]},getLayerId:function(e,t){if(e&&t){var r=null;if(this.layers){var o=this.layers;for(var n in o)if(o.hasOwnProperty(n)){var i=n.split("$");if(e===i[0]&&i[1]){var s=i[1].split(":");if(i[1].split(";")[1]===t.toUpperCase()){r=n;break}if(s[2]===t.toUpperCase()){r=n;break}}}}if(r)return r}},getLayersConf:function(e){var t={},r=this.getLayersId(e);if(r)for(var o=0;o{"use strict";r.d(t,{A:()=>n});var o={ssl:!0,newUrl:function(e){return(!1===o.ssl?"http://":"https://")+"data.geopf.fr"+e},Alti:{new_key:{"elevation-json":"/altimetrie/1.0/calcul/alti/rest/elevation.json","elevation-xml":"/altimetrie/1.0/calcul/alti/rest/elevation.xml","profil-json":"/altimetrie/1.0/calcul/alti/rest/elevationLine.json","profil-xml":"/altimetrie/1.0/calcul/alti/rest/elevationLine.xml"},newUrl:function(){return{"elevation-json":o.newUrl(this.new_key["elevation-json"]),"elevation-xml":o.newUrl(this.new_key["elevation-xml"]),"profil-json":o.newUrl(this.new_key["profil-json"]),"profil-xml":o.newUrl(this.new_key["profil-xml"])}}},ProcessIsoCurve:{new_key:"/navigation/isochrone",newUrl:function(){return o.newUrl(this.new_key)}},Config:{_key:"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/dist/",url:function(e){Array.isArray(e)||(e=e.split(","));for(var t=[],r=0;r{"use strict";r.d(t,{A:()=>c});var o=r(1097),n=r(8288),i=r(1135),s=r(6025);function a(){if(!(this instanceof a))throw new TypeError("GeocodeResponseParser constructor cannot be called as a function.")}function l(e,t){var r=new s.A;if(e.geometry&&"Point"===e.geometry.type&&(r.position={lon:e.geometry.coordinates[0],lat:e.geometry.coordinates[1]}),e.properties){for(var o in e.properties)"score"===o?r.accuracy=e.properties[o]:"_type"===o?"address"===e.properties[o]?r.type="StreetAddress":"poi"===e.properties[o]?r.type="PositionOfInterest":"parcel"!==e.properties[o]&&"cadastral"!==e.properties[o]||(r.type="CadastralParcel"):r.placeAttributes[o]=e.properties[o];"address"===e.properties._type&&(r.matchType=void 0!==e.properties.number&&null!==e.properties.number?"street number":"street")}t.locations.push(r)}a.prototype={constructor:a,parse:function(e){var t=new i.A;const r=JSON.parse(e);if("FeatureCollection"===r.type)for(var s=0;s{"use strict";r.d(t,{A:()=>p});var o=r(2710),n=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(6767),c=r(9375);function u(e){if(!(this instanceof u))throw new TypeError(n.A.getMessage("CLASS_CONSTRUCTOR","Geocode"));this.CLASSNAME="Geocode",this.logger=o.A.getLogger("Gp.Services.Geocode"),this.logger.trace("[Constructeur Geocode (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=a.A.Geocode.newUrl()),s.A.apply(this,[t]),!t.hasOwnProperty("query"))throw new Error(n.A.getMessage("PARAM_MISSING","query"));if(this.options.query=t.query,t.index||(this.options.index=t.index="StreetAddress"),t.filters)for(var r=Object.keys(t.filters),i=0;i0?t.index=t.filters.type[0]:t.index=t.filters.type),delete t.filters.type),t.filters.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),delete t.filters.bbox)),delete t.filterOptions),t.position&&(t.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),t.position.lon||(t.position.lon=t.position.x),delete t.position.x),t.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),t.position.lat||(t.position.lat=t.position.y),delete t.position.y)),t.returnFreeForm&&(this.logger.warn("The parameter 'returnFreeForm' is deprecated"),delete t.returnFreeForm),t.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete t.srs),t},u.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,geocodeMethod:"search",query:this.options.query,index:this.options.index,returnTrueGeometry:this.options.returnTrueGeometry,position:this.options.position,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=l.A.build(r),this.request?t.call(this,this.request):e.call(this,new i.A(n.A.getMessage("SERVICE_REQUEST_BUILD")))},u.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};c.A.build(r)}else e.call(this,new i.A(n.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const p=u},6767:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var o=r(2710),n=r(3955);const i={build:function(e){var t=o.A.getLogger("GeocodeRequestFactory");t.trace(["GeocodeRequestFactory::build()"]);var r=e||{},i=new n.A(r);if(!i.processRequestString())throw new Error("Error process request (rest) !");var s=i.requestString;return t.trace(s),s}}},3955:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var o=r(2710),n=r(1097),i=r(3757);function s(e){if(this.logger=o.A.getLogger("GeocodeRequestREST"),this.logger.trace("[Constructeur GeocodeRequestREST ()]"),!(this instanceof s))throw new TypeError("GeocodeRequestREST constructor cannot be called as a function.");if(!e)throw new Error(n.A.getMessage("PARAM_EMPTY","options"));this.settings=e}s.prototype={requestString:null,constructor:s,processRequestString:function(){var e="";const t=new i.A(this.settings).getParams();for(var r=0;r{"use strict";r.d(t,{A:()=>i});var o=r(2710);function n(e){if(!(this instanceof n))throw new TypeError("GeocodeParamREST constructor cannot be called as a function.");if(this.logger=o.A.getLogger(),this.logger.trace("[Constructeur GeocodeParamREST ()]"),this.options=e||{},!this.options.geocodeMethod||"search"!==this.options.geocodeMethod&&"reverse"!==this.options.geocodeMethod)throw new Error("Error geocodeMethod not valid");this.geocodeMethod=this.options.geocodeMethod,this.query=void 0!==this.options?this.options.query:null,this.searchGeometry=this.options.searchGeometry||null,this.index=this.options.index||null,this.lon=this.options.position&&this.options.position.lon?this.options.position.lon:null,this.lat=this.options.position&&this.options.position.lat?this.options.position.lat:null,this.maxResp=this.options.maxResp||null,this.returnTrueGeometry=this.options.returnTrueGeometry||null,this.filters=this.options.filters||{}}n.CLASSNAME="GeocodeParamREST",n.prototype={constructor:n,getFilters:function(){var e={};for(var t in this.filters)this.filters.hasOwnProperty(t)&&(e[t]=this.filters[t]);return e},getIndex:function(){return void 0===this.index?null:"StreetAddress"===this.index?"address":"CadastralParcel"===this.index?"parcel":"PositionOfInterest"===this.index?"poi":"location"===this.index?"location":this.index},getSearchGeometry:function(){return JSON.stringify(this.searchGeometry)}},n.prototype.getParams=function(){var e=[];"search"===this.geocodeMethod&&e.push({k:"q",v:this.query}),this.index&&e.push({k:"index",v:this.getIndex()}),"reverse"===this.geocodeMethod&&this.searchGeometry&&e.push({k:"searchgeom",v:this.getSearchGeometry()}),this.lon&&this.lat&&(e.push({k:"lon",v:this.lon}),e.push({k:"lat",v:this.lat})),this.maxResp&&e.push({k:"limit",v:this.maxResp}),this.returnTrueGeometry&&e.push({k:"returntruegeometry",v:this.returnTrueGeometry});const t=this.getFilters();for(var r in t)e.push({k:r,v:t[r]});return e};const i=n},9375:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var o=r(8288),n=r(1097),i=r(9723);const s={build:function(e){var t=null;if(e.response){if(e.rawResponse)t=e.response;else{try{if(!(t=(new i.A).parse(e.response)))throw new Error("L'analyse de la réponse du service !?")}catch(t){var r=t.message;return"string"==typeof e.response?r+="('"+e.response+"')":r+="('"+e.response.documentElement.innerHTML+"')",void e.onError.call(e.scope,new o.A({message:n.A.getMessage("SERVICE_RESPONSE_ANALYSE",r),type:o.A.TYPE_UNKERR,status:-1}))}if(t.exceptionReport)return void e.onError.call(e.scope,new o.A({message:n.A.getMessage("SERVICE_RESPONSE_EXCEPTION",t.exceptionReport),type:o.A.TYPE_SRVERR,status:200}))}e.onSuccess.call(e.scope,t)}else e.onError.call(e.scope,new o.A({message:n.A.getMessage("SERVICE_RESPONSE_EMPTY"),type:o.A.TYPE_SRVERR,status:-1}))}}},1135:(e,t,r)=>{"use strict";function o(){if(!(this instanceof o))throw new TypeError("GeocodeResponse constructor cannot be called as a function.");this.locations=[]}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},6025:(e,t,r)=>{"use strict";function o(){if(!(this instanceof o))throw new TypeError("GeocodedLocation constructor cannot be called as a function.");this.position=null,this.matchType=null,this.placeAttributes={},this.type=null,this.accuracy=null,this.CLASSNAME="GeocodedLocation"}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},6064:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var o=r(2710),n=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(6767),c=r(9375);function u(e){if(!(this instanceof u))throw new TypeError(n.A.getMessage("CLASS_CONSTRUCTOR","ReverseGeocode"));this.CLASSNAME="ReverseGeocode",this.logger=o.A.getLogger("Gp.Services.ReverseGeocode"),this.logger.trace("[Constructeur ReverseGeocode (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=a.A.ReverseGeocode.newUrl()),s.A.apply(this,[t]),t.searchGeometry)this.options.searchGeometry=t.searchGeometry;else if(!t.position)throw new Error(n.A.getMessage("PARAM_MISSING","searchGeometry"));if(t.index||(this.options.index=t.index="StreetAddress"),t.filters)for(var r=Object.keys(t.filters),i=0;i0?t.index=t.filterOptions.type[0]:t.index=t.filterOptions.type),delete t.filterOptions.type),t.filterOptions.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),t.searchGeometry||(t.searchGeometry=this.bbox2Json(t.filterOptions.bbox)),delete t.filterOptions.bbox),t.filterOptions.circle&&(this.logger.warn("The parameter 'filterOptions.circle' is deprecated"),t.searchGeometry||(t.searchGeometry=this.circle2Json(t.filterOptions.circle)),delete t.filterOptions.circle),t.filterOptions.polygon&&(this.logger.warn("The parameter 'filterOptions.polygon' is deprecated"),t.searchGeometry||(t.searchGeometry=this.polygon2Json(t.filterOptions.polygon)),delete t.filterOptions.polygon),!t.filters&&Object.keys(t.filterOptions).length>0&&(t.filters=t.filterOptions),delete t.filterOptions),t.position&&(t.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),t.position.lon||(t.position.lon=t.position.x),delete t.position.x),t.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),t.position.lat||(t.position.lat=t.position.y),delete t.position.y)),t.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete t.srs),t},u.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,geocodeMethod:"reverse",searchGeometry:this.options.searchGeometry,index:this.options.index,position:this.options.position,returnTrueGeometry:this.options.returnTrueGeometry,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=l.A.build(r),this.request?t.call(this,this.request):e.call(this,new i.A(n.A.getMessage("SERVICE_REQUEST_BUILD")))},u.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};c.A.build(r)}else e.call(this,new i.A(n.A.getMessage("SERVICE_RESPONSE_EMPTY")))},u.prototype.bbox2Json=function(e){return{type:"Polygon",coordinates:[[[e.left,e.top],[e.right,e.top],[e.right,e.bottom],[e.left,e.bottom],[e.left,e.top]]]}},u.prototype.circle2Json=function(e){return{type:"Circle",radius:e.radius,coordinates:[e.x,e.y]}},u.prototype.polygon2Json=function(e){for(var t={type:"Polygon",coordinates:[[]]},r=0;r{"use strict";r.d(t,{A:()=>p});var o=r(2710),n=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(9721),c=r(8297);function u(e){if(!(this instanceof u))throw new TypeError(n.A.getMessage("CLASS_CONSTRUCTOR","ProcessIsoCurve"));if(this.CLASSNAME="ProcessIsoCurve",s.A.apply(this,arguments),this.logger=o.A.getLogger("Gp.Services.ProcessIsoCurve"),this.logger.trace("[Constructeur ProcessIsoCurve (options)]"),!e.position)throw new Error(n.A.getMessage("PARAM_MISSING","position"));if(null===e.position.x)throw new Error(n.A.getMessage("PARAM_MISSING","position.x"));if(null===e.position.y)throw new Error(n.A.getMessage("PARAM_MISSING","position.y"));if(!e.time&&!e.distance)throw new Error("Parameter (s) 'distance' missing. Parameter time to calculate an isochrone, parameter distance for an isodistance");if(!e.time&&e.distance&&(this.options.method="distance",this.options.time&&delete this.options.time),e.time&&!e.distance&&(this.options.method="time",this.options.distance&&delete this.options.distance),this.options.method=this.options.method||"time",this.options.resource=e.resource||"bdtopo-valhalla",this.options.exclusions=e.exclusions||[],this.options.reverse=e.reverse||!1,this.options.srs=e.srs||"EPSG:4326",this.options.distanceUnit=e.distanceUnit||"m",this.options.timeUnit=e.timeUnit||"second",e.smoothing&&this.logger.warn("options.smoothing is DEPRECATED"),this.options.smoothing=!1,e.holes&&this.logger.warn("options.holes is DEPRECATED"),this.options.holes=!1,e.graph?("Voiture"===e.graph&&(this.options.graph="car"),"Pieton"===e.graph&&(this.options.graph="pedestrian")):this.options.graph="car",this.options.constraints=[],e.constraints){if(!Array.isArray(e.constraints))throw new Error(n.A.getMessage("PARAM_TYPE","constraints"));for(var t=0;t{"use strict";r.d(t,{A:()=>a});var o=r(2710),n=r(1097),i=r(527);function s(e){if(this.logger=o.A.getLogger("ProcessIsoCurveRequest"),this.logger.trace("[Constructeur ProcessIsoCurveRequest ()]"),!(this instanceof s))throw new TypeError("ProcessIsoCurveRequest constructor cannot be called as a function.");if(!e)throw new Error(n.A.getMessage("PARAM_EMPTY","options"));this.settings=e,this.mode=this.settings.httpMethod||"GET"}s.prototype={requestString:null,constructor:s,processRequestString:function(){var e="",t=0;switch(this.mode){case"GET":this.logger.trace("Process GET Request");var r=new i.A(this.settings).getParams();for(t=0;t{"use strict";r.d(t,{A:()=>i});var o=r(2710);function n(e){if(!(this instanceof n))throw new TypeError("ProcessIsoCurveParam constructor cannot be called as a function.");this.logger=o.A.getLogger(),this.logger.trace("[Constructeur ProcessIsoCurveParam ()]"),this.options=e||{},this.id=this.options.id,this.resource=this.options.resource,this.point=this.options.position,this.crs=this.options.srs,this.profile=this.options.graph,this.constraints=this.options.constraints,this.reverse=this.options.reverse,this.timeUnit=this.options.timeUnit,this.distanceUnit=this.options.distanceUnit,"distance"===this.options.method?(this.costType="distance",this.costValue=this.options.distance,"m"===this.distanceUnit&&this.costValue>=5e4&&(this.distanceUnit="km",this.costValue/=1e3)):(this.costType="time",this.costValue=this.options.time)}n.CLASSNAME="ProcessIsoCurveParam",n.prototype={constructor:n,getLocation:function(){return this.point.x+","+this.point.y},getDistanceUnit:function(){return"m"===this.distanceUnit?"meter":"km"===this.distanceUnit?"kilometer":""},getConstraints:function(){var e=[];if(0!==this.constraints.length)for(var t=0;t{"use strict";r.d(t,{A:()=>a});var o=r(2710),n=r(1097),i=r(8288),s=r(1489);const a={build:function(e){var t=o.A.getLogger("ProcessIsoCurveResponseFactory");t.trace(["ProcessIsoCurveResponseFactory::build()"]);var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{var a;if(t.trace("analyze response : json"),a="string"==typeof e.response?JSON.parse(e.response):e.response,r=new s.A,!a)return void e.onError.call(e.scope,new i.A(n.A.getMessage("SERVICE_RESPONSE_ANALYSE",e.response)));"distance"===a.costType?(r.time="",r.distance=a.costValue):(r.time=a.costValue,r.distance=""),r.message="",r.id="",r.srs=a.crs,r.geometry=a.geometry;var l=a.point.split(",");if(r.location&&(r.location.x=l[0],r.location.y=l[1]),r.exceptionReport)return void e.onError.call(e.scope,new i.A({message:n.A.getMessage("SERVICE_RESPONSE_EXCEPTION",r.exceptionReport),type:i.A.TYPE_SRVERR,status:200}))}e.onSuccess.call(e.scope,r)}else e.onError.call(e.scope,new i.A(n.A.getMessage("SERVICE_RESPONSE_EMPTY")))}}},1489:(e,t,r)=>{"use strict";function o(){if(!(this instanceof o))throw new TypeError("ProcessIsoCurveResponse constructor cannot be called as a function.");this.message=null,this.id=null,this.location={},this.location.x=null,this.location.y=null,this.srs=null,this.geometry=null,this.time=null,this.distance=null}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},6759:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var o=r(2710),n=r(8288),i=r(5851);const s={build:function(e){o.A.getLogger("RouteRequestFactory").trace(["RouteRequestFactory::build()"]);var t=e||{},r=!(null===e.onError||"function"!=typeof e.onError),s=null,a=new i.A(t);if(!a.processRequestString()){if(s="Error process request (rest) !",r)return void e.onError.call(e.scope,new n.A(s));throw new Error(s)}return a.requestString}}},5851:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var o=r(2710),n=r(1097),i=r(2785);function s(e){if(this.logger=o.A.getLogger("RouteRequestREST"),this.logger.trace("[Constructeur RouteRequestREST ()]"),!(this instanceof s))throw new TypeError("RouteRequestREST constructor cannot be called as a function.");if(!e)throw new Error(n.A.getMessage("PARAM_EMPTY","options"));this.settings=e}s.prototype={requestString:null,constructor:s,processRequestString:function(){this.logger.warn(" PROTOTYPE !");for(var e=new i.A(this.settings).getParams(),t="",r=0;r{"use strict";r.d(t,{A:()=>i});var o=r(2710);function n(e){if(!(this instanceof n))throw new TypeError("RouteParamREST constructor cannot be called as a function.");this.logger=o.A.getLogger(),this.logger.trace("[Constructeur RouteParamREST ()]"),this.options=e||{},this.resource=this.options.resource,this.start=this.options.startPoint.x+","+this.options.startPoint.y,this.end=this.options.endPoint.x+","+this.options.endPoint.y,this.intermediates=this.options.viaPoints,this.profile=this.options.graph,this.crs=this.options.srs,this.constraints=this.options.constraints,this.optimization=this.options.routePreference,this.getSteps=this.options.geometryInInstructions?"true":"false",this.distanceUnit=this.options.distanceUnit,this.timeUnit=this.options.timeUnit,this.waysAttributes=this.options.waysAttributes}n.CLASSNAME="RouteParamREST",n.prototype={constructor:n,getIntermediates:function(){var e=[];if(0!==this.intermediates.length)for(var t=0;t{"use strict";r.d(t,{A:()=>l});var o=r(2710),n=r(1097),i=r(8288),s=r(2993),a=r(7868);const l={build:function(e){var t=o.A.getLogger("RouteResponseFactory");t.trace("RouteResponseFactory::build()");var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{var l;if(t.trace("analyze response : json"),l="string"==typeof e.response?JSON.parse(e.response):e.response){if(l.message)return void e.onError.call(e.scope,new i.A(n.A.getMessage("SERVICE_RESPONSE_EXCEPTION",l.message)));var c=[],u=[],p=[];if((r=new s.A).hasOwnProperty("totalTime")&&(r.totalTime=parseFloat(l.duration)),r.hasOwnProperty("totalDistance")&&(r.totalDistance=parseFloat(l.distance)),r.hasOwnProperty("bbox")&&(r.bbox.left=parseFloat(l.bbox[0]),r.bbox.bottom=parseFloat(l.bbox[1]),r.bbox.right=parseFloat(l.bbox[2]),r.bbox.top=parseFloat(l.bbox[3])),r.hasOwnProperty("routeGeometry")&&!e.geometryInInstructions&&(r.routeGeometry=l.geometry),r.hasOwnProperty("routeInstructions")&&e.geometryInInstructions){var h,f=l.portions;if(Array.isArray(f)&&f.length)for(h=0;h{"use strict";function o(){if(!(this instanceof o))throw new TypeError("RouteInstruction constructor cannot be called as a function.");this.duration=null,this.distance=null,this.code=null,this.instruction=null,this.geometry=null}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},2993:(e,t,r)=>{"use strict";function o(){if(!(this instanceof o))throw new TypeError("RouteResponse constructor cannot be called as a function.");this.totalTime=null,this.totalDistance=null,this.bbox={left:null,right:null,top:null,bottom:null},this.routeGeometry=null,this.routeInstructions=[]}r.d(t,{A:()=>n}),o.prototype={constructor:o};const n=o},7372:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var o=r(2710),n=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(6759),c=r(3753);function u(e){if(!(this instanceof u))throw new TypeError(n.A.getMessage("CLASS_CONSTRUCTOR","Route"));if(this.CLASSNAME="Route",s.A.apply(this,arguments),this.logger=o.A.getLogger("Gp.Services.Route"),this.logger.trace("[Constructeur Route (options)]"),!e.startPoint)throw new Error(n.A.getMessage("PARAM_MISSING","startPoint"));if(null===e.startPoint.x)throw new Error(n.A.getMessage("PARAM_MISSING","startPoint.x"));if(null===e.startPoint.y)throw new Error(n.A.getMessage("PARAM_MISSING","startPoint.y"));if(!e.endPoint)throw new Error(n.A.getMessage("PARAM_MISSING","endPoint"));if(null===e.endPoint.x)throw new Error(n.A.getMessage("PARAM_MISSING","endPoint.x"));if(null===e.endPoint.y)throw new Error(n.A.getMessage("PARAM_MISSING","endPoint.y"));if(e.outputFormat&&"json"!==e.outputFormat&&this.logger.warn("options.outputFormat could only be json"),this.options.outputFormat="json",this.options.resource=e.resource||"bdtopo-osrm",this.options.startPoint=e.startPoint,this.options.endPoint=e.endPoint,this.options.viaPoints=e.viaPoints||[],this.options.routePreference=e.routePreference||"fastest",e.graph?("Voiture"===e.graph&&(this.options.graph="car"),"Pieton"===e.graph&&(this.options.graph="pedestrian")):this.options.graph="car",this.options.constraints=[],e.constraints){if(!Array.isArray(e.constraints))throw new Error(n.A.getMessage("PARAM_TYPE","constraints"));for(var t=0;t{"use strict";r.d(t,{A:()=>u});var o=r(4154),n=r(2366),i=r(1520),s=r(6064),a=r(9338),l=r(7372),c=r(7180);const u={getConfig:function(e){new o.A(e).call()},getAltitude:function(e){new n.A(e).call()},geocode:function(e){new i.A(e).call()},reverseGeocode:function(e){new s.A(e).call()},autoComplete:function(e){new a.A(e).call()},route:function(e){new l.A(e).call()},isoCurve:function(e){new c.A(e).call()}}},3474:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});const o={normalyzeParameters:function(e){var t=null;if(e){var r=[];for(var o in e)if(e.hasOwnProperty(o)){var n=e[o];n||(n=""),r.push(o+"="+n)}t=r.join("&")}return t},normalyzeUrl:function(e,t,r){var o=e;if(e){if(e.split("?").length-1>=2){var n=e.search(/\?/)+1;o=e.substring(0,n)+e.slice(n).replace(/\?/g,"&")}var i=e.indexOf("?");-1===i&&(o+="?"),-1!==i&&i!==e.length-1&&(o+="&")}return t&&(o+="string"==typeof t?t=t.replace("?",""):this.normalyzeParameters(t)),r&&(o=encodeURIComponent(o)),o},indent:function(e,t){return new Array((e||0)+1).join("\t")+t}}},2710:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var o=r(3065);const n={getLogger:function(e){if(void 0===t)var t={env:{VERBOSE:!1}};t.env.VERBOSE?o.enableAll():o.disableAll();var r=e||"default";return o.getLogger(r)}}},1097:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});const o={PARAM_MISSING:"Parameter(s) '%var%' missing",PARAM_EMPTY:"Parameter(s) '%var%' empty",PARAM_TYPE:"Wrong type(s) for parameter(s) '%var%'",PARAM_FORMAT:"Parameter(s) '%var%' not correctly formatted",PARAM_NOT_SUPPORT:"Value(s) for parameter(s) '%var%' not supported",PARAM_NOT_SUPPORT_NODEJS:"Value(s) for parameter(s) '%var%' not supported to NodeJS",PARAM_UNKNOWN:"Value(s) for parameter(s) '%var%' unknown",SERVICE_REQUEST_BUILD:"An error occurred during the request building of the service",SERVICE_REQUEST_EMPTY:"The request sent to the service is empty",SERVICE_RESPONSE_EXCEPTION:"The service returned an exception : '%var%'",SERVICE_RESPONSE_EXCEPTION_2:"The service returned an exception",SERVICE_RESPONSE_ANALYSE:"An error occurred while parsing the response '%var%' of the service",SERVICE_RESPONSE_ANALYSE_2:"An unknown error occurred while parsing the response",SERVICE_RESPONSE_EMPTY:"The response of the service is empty",SERVICE_RESPONSE_EMPTY_2:"The response from the service could not be analyzed or is empty",SERVICE_RESPONSE_FORMAT:"The format of the service response is not supported (handled format(s) : '%var%')",SERVICE_RESPONSE_FORMAT_2:"The format of the service response is not supported",SERVICE_RESPONSE_FORMAT_3:"No suggestion matching the search",CLASS_CONSTRUCTOR:"'%var%' constructor cannot be called as a function.",getMessage:function(e,t){if(0===Object.keys(arguments).length)return"Message indefined !";var r=Array.prototype.slice.call(arguments),o=r.shift(),n=r,i=this[o];try{i=Array.isArray(n)&&n.length>0?i.replace("%var%",n.join(" - ")):i.replace("%var%","%var% (not specified)")}catch(e){}return i}}},3065:function(e,t,r){var o,n;!function(){"use strict";o=function(){var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),o=["trace","debug","info","warn","error"],n={},i=null;function s(e,t){var r=e[t];if("function"==typeof r.bind)return r.bind(e);try{return Function.prototype.bind.call(r,e)}catch(t){return function(){return Function.prototype.apply.apply(r,[e,arguments])}}}function a(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function l(o){return"debug"===o&&(o="log"),typeof console!==t&&("trace"===o&&r?a:void 0!==console[o]?s(console,o):void 0!==console.log?s(console,"log"):e)}function c(){for(var r=this.getLevel(),n=0;n=0&&t<=u.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?h+=":"+e:"symbol"==typeof e&&(h=void 0),u.name=e,u.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},u.methodFactory=r||p,u.getLevel=function(){return null!=l?l:null!=a?a:s},u.setLevel=function(e,t){return l=m(e),!1!==t&&f(l),c.call(u)},u.setDefaultLevel=function(e){a=m(e),d()||u.setLevel(e,!1)},u.resetLevel=function(){l=null,g(),c.call(u)},u.enableAll=function(e){u.setLevel(u.levels.TRACE,e)},u.disableAll=function(e){u.setLevel(u.levels.SILENT,e)},u.rebuild=function(){if(i!==u&&(s=m(i.getLevel())),c.call(u),i===u)for(var e in n)n[e].rebuild()},s=m(i?i.getLevel():"WARN");var E=d();null!=E&&(l=m(E)),c.call(u)}(i=new h).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=n[e];return t||(t=n[e]=new h(e,i.methodFactory)),t};var f=typeof window!==t?window.log:void 0;return i.noConflict=function(){return typeof window!==t&&window.log===i&&(window.log=f),i},i.getLoggers=function(){return n},i.default=i,i},void 0===(n="function"==typeof o?o.call(t,r,t,e):o)||(e.exports=n)}()},3092:(e,t,r)=>{"use strict";var o=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==r.g)return r.g;throw new Error("unable to locate global object")}();e.exports=t=o.fetch,o.fetch&&(t.default=o.fetch.bind(o)),t.Headers=o.Headers,t.Request=o.Request,t.Response=o.Response},2938:e=>{"use strict";e.exports=ol.extent},9583:e=>{"use strict";e.exports=ol.layer.Tile},9201:e=>{"use strict";e.exports=ol.proj},9032:e=>{"use strict";e.exports=JSON.parse('{"rE":"3.4.6","p6":"19/12/2024"}')},8330:e=>{"use strict";e.exports=JSON.parse('{"rE":"1.0.0-beta.1-318"}')}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var i=t[o]={exports:{}};return e[o].call(i.exports,i,i.exports,r),i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var o={};(()=>{"use strict";r.d(o,{default:()=>E});var e,t=r(5844);const n={generate:(e=Math.floor(Date.now()),function(){return e++}),name:function(e){var t=null,r=e.lastIndexOf("-");return t=-1===r?e:e.substring(0,r),t},index:function(e){var t=null,r=this.name(e),o=r.lastIndexOf("_");return-1!==o&&(t=r.substring(o+1)),t},uuid:function(e){var t=null,r=e.lastIndexOf("-");return-1!==r&&(t=parseInt(e.substring(r+1),10)),t}};var i=r(3487);const s=ol.control.OverviewMap;var a=r.n(s);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function c(e,t){for(var r=0;r{var t={3065:function(t,e,n){var o,r;!function(){"use strict";o=function(){var t=function(){},e="undefined",n=typeof window!==e&&typeof window.navigator!==e&&/Trident\/|MSIE /.test(window.navigator.userAgent),o=["trace","debug","info","warn","error"],r={},i=null;function l(t,e){var n=t[e];if("function"==typeof n.bind)return n.bind(t);try{return Function.prototype.bind.call(n,t)}catch(e){return function(){return Function.prototype.apply.apply(n,[t,arguments])}}}function a(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function c(o){return"debug"===o&&(o="log"),typeof console!==e&&("trace"===o&&n?a:void 0!==console[o]?l(console,o):void 0!==console.log?l(console,"log"):t)}function s(){for(var n=this.getLevel(),r=0;r=0&&e<=u.levels.SILENT)return e;throw new TypeError("log.setLevel() called with invalid level: "+t)}"string"==typeof t?p+=":"+t:"symbol"==typeof t&&(p=void 0),u.name=t,u.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},u.methodFactory=n||f,u.getLevel=function(){return null!=c?c:null!=a?a:l},u.setLevel=function(t,e){return c=g(t),!1!==e&&d(c),s.call(u)},u.setDefaultLevel=function(t){a=g(t),v()||u.setLevel(t,!1)},u.resetLevel=function(){c=null,y(),s.call(u)},u.enableAll=function(t){u.setLevel(u.levels.TRACE,t)},u.disableAll=function(t){u.setLevel(u.levels.SILENT,t)},u.rebuild=function(){if(i!==u&&(l=g(i.getLevel())),s.call(u),i===u)for(var t in r)r[t].rebuild()},l=g(i?i.getLevel():"WARN");var h=v();null!=h&&(c=g(h)),s.call(u)}(i=new p).getLogger=function(t){if("symbol"!=typeof t&&"string"!=typeof t||""===t)throw new TypeError("You must supply a name when creating a logger.");var e=r[t];return e||(e=r[t]=new p(t,i.methodFactory)),e};var d=typeof window!==e?window.log:void 0;return i.noConflict=function(){return typeof window!==e&&window.log===i&&(window.log=d),i},i.getLoggers=function(){return r},i.default=i,i},void 0===(r="function"==typeof o?o.call(e,n,e,t):o)||(t.exports=r)}()}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var i=e[o]={exports:{}};return t[o].call(i.exports,i,i.exports,n),i.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var o={};(()=>{"use strict";n.d(o,{default:()=>b});var t=n(3065),e={getLogger:function(e){if(void 0===n)var n={env:{VERBOSE:!1}};n.env.VERBOSE?t.enableAll():t.disableAll();var o=e||"default";return t.getLogger(o)},disableAll:function(){var e=t.getLoggers();for(var n in e){if(Object.hasOwnProperty.call(e,n))e[n].disableAll()}},enableAll:function(){var e=t.getLoggers();for(var n in e){if(Object.hasOwnProperty.call(e,n))e[n].enableAll()}}};const r=e;var i;window.Gp&&(window.Gp.Logger=e);const l={generate:(i=Math.floor(Date.now()),function(){return i++}),name:function(t){var e=null,n=t.lastIndexOf("-");return e=-1===n?t:t.substring(0,n),e},index:function(t){var e=null,n=this.name(t),o=n.lastIndexOf("_");return-1!==o&&(e=n.substring(o+1)),e},uuid:function(t){var e=null,n=t.lastIndexOf("-");return-1!==n&&(e=parseInt(t.substring(n+1),10)),e}},a=ol.control.Zoom;var c=n.n(a);function s(t){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},s(t)}function u(t,e){for(var n=0;n{var t={3065:function(t,e,n){var r,o;!function(){"use strict";r=function(){var t=function(){},e="undefined",n=typeof window!==e&&typeof window.navigator!==e&&/Trident\/|MSIE /.test(window.navigator.userAgent),r=["trace","debug","info","warn","error"],o={},i=null;function a(t,e){var n=t[e];if("function"==typeof n.bind)return n.bind(t);try{return Function.prototype.bind.call(n,t)}catch(e){return function(){return Function.prototype.apply.apply(n,[t,arguments])}}}function c(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function u(r){return"debug"===r&&(r="log"),typeof console!==e&&("trace"===r&&n?c:void 0!==console[r]?a(console,r):void 0!==console.log?a(console,"log"):t)}function l(){for(var n=this.getLevel(),o=0;o=0&&e<=s.levels.SILENT)return e;throw new TypeError("log.setLevel() called with invalid level: "+t)}"string"==typeof t?p+=":"+t:"symbol"==typeof t&&(p=void 0),s.name=t,s.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},s.methodFactory=n||f,s.getLevel=function(){return null!=u?u:null!=c?c:a},s.setLevel=function(t,e){return u=y(t),!1!==e&&h(u),l.call(s)},s.setDefaultLevel=function(t){c=y(t),d()||s.setLevel(t,!1)},s.resetLevel=function(){u=null,v(),l.call(s)},s.enableAll=function(t){s.setLevel(s.levels.TRACE,t)},s.disableAll=function(t){s.setLevel(s.levels.SILENT,t)},s.rebuild=function(){if(i!==s&&(a=y(i.getLevel())),l.call(s),i===s)for(var t in o)o[t].rebuild()},a=y(i?i.getLevel():"WARN");var g=d();null!=g&&(u=y(g)),l.call(s)}(i=new p).getLogger=function(t){if("symbol"!=typeof t&&"string"!=typeof t||""===t)throw new TypeError("You must supply a name when creating a logger.");var e=o[t];return e||(e=o[t]=new p(t,i.methodFactory)),e};var h=typeof window!==e?window.log:void 0;return i.noConflict=function(){return typeof window!==e&&window.log===i&&(window.log=h),i},i.getLoggers=function(){return o},i.default=i,i},void 0===(o="function"==typeof r?r.call(e,n,e,t):r)||(t.exports=o)}()}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var i=e[r]={exports:{}};return t[r].call(i.exports,i,i.exports,n),i.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var r={};(()=>{"use strict";function t(t){return function(t){if(Array.isArray(t))return e(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,n){if(t){if("string"==typeof t)return e(t,n);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?e(t,n):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function e(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);ndt});var o=["GPoverviewMap","GPfullScreen"];const i=function(e,n){var r=function(e,n){var r=[].concat(o,[n]),i=[];if(e&&e.includes("left")){var a=document.getElementById("position-container-bottom-left"),c=document.getElementById("position-container-top-left");i=[].concat(t(a.children),t(c.children))}if(e&&e.includes("right")){var u=document.getElementById("position-container-bottom-right"),l=document.getElementById("position-container-top-right");i=[].concat(t(u.children),t(l.children))}return i.filter((function(t){var e=t.id.match(/(\w+)-[0-9]+/)[1],n=r.includes(e);if("true"===t.getElementsByTagName("button")[0].getAttribute("aria-pressed")&&!n)return t}))}(e,n);r.length>0&&r[0].getElementsByTagName("button")[0].click()};const a={onPanelOpen:function(){i(this.options.position,this.element.id.match(/(\w+)-[0-9]+/)[1])}},c=ol.control.Control;const u=function(){return""!==getComputedStyle(document.documentElement).getPropertyValue("--blue-france-sun-113-625")};function l(t){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},l(t)}function s(t,e){(function(t,e){if(e.has(t))throw new TypeError("Cannot initialize the same private elements twice on an object")})(t,e),e.add(t)}function f(t,e,n){if("function"==typeof t?t===e:t.has(e))return arguments.length<3?e:n;throw new TypeError("Private element is not present on this object")}function p(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function h(t,e){for(var n=0;ns.right||v+r.height>s.bottom)a=p,c=h;else{var y=u-a,g=l-c;t.style.transform="translate("+y+"px,"+g+"px)"}}}};function Y(t){return Y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Y(t)}function z(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */z=function(){return e};var t,e={},n=Object.prototype,r=n.hasOwnProperty,o=Object.defineProperty||function(t,e,n){t[e]=n.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function l(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{l({},"")}catch(t){l=function(t,e,n){return t[e]=n}}function s(t,e,n,r){var i=e&&e.prototype instanceof g?e:g,a=Object.create(i.prototype),c=new S(r||[]);return o(a,"_invoke",{value:I(t,n,c)}),a}function f(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}e.wrap=s;var p="suspendedStart",h="suspendedYield",d="executing",v="completed",y={};function g(){}function m(){}function b(){}var w={};l(w,a,(function(){return this}));var E=Object.getPrototypeOf,O=E&&E(E(C([])));O&&O!==n&&r.call(O,a)&&(w=O);var L=b.prototype=g.prototype=Object.create(w);function x(t){["next","throw","return"].forEach((function(e){l(t,e,(function(t){return this._invoke(e,t)}))}))}function P(t,e){function n(o,i,a,c){var u=f(t[o],t,i);if("throw"!==u.type){var l=u.arg,s=l.value;return s&&"object"==Y(s)&&r.call(s,"__await")?e.resolve(s.__await).then((function(t){n("next",t,a,c)}),(function(t){n("throw",t,a,c)})):e.resolve(s).then((function(t){l.value=t,a(l)}),(function(t){return n("throw",t,a,c)}))}c(u.arg)}var i;o(this,"_invoke",{value:function(t,r){function o(){return new e((function(e,o){n(t,r,e,o)}))}return i=i?i.then(o,o):o()}})}function I(e,n,r){var o=p;return function(i,a){if(o===d)throw Error("Generator is already running");if(o===v){if("throw"===i)throw a;return{value:t,done:!0}}for(r.method=i,r.arg=a;;){var c=r.delegate;if(c){var u=G(c,r);if(u){if(u===y)continue;return u}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=v,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=d;var l=f(e,n,r);if("normal"===l.type){if(o=r.done?v:h,l.arg===y)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(o=v,r.method="throw",r.arg=l.arg)}}}function G(e,n){var r=n.method,o=e.iterator[r];if(o===t)return n.delegate=null,"throw"===r&&e.iterator.return&&(n.method="return",n.arg=t,G(e,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),y;var i=f(o,e.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,y;var a=i.arg;return a?a.done?(n[e.resultName]=a.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,y):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,y)}function F(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function _(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function S(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(F,this),this.reset(!0)}function C(e){if(e||""===e){var n=e[a];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,i=function n(){for(;++o=0;--i){var a=this.tryEntries[i],c=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var u=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(u&&l){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),_(n),y}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;_(n)}return o}}throw Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:C(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),y}},e}function q(t,e,n,r,o,i,a){try{var c=t[i](a),u=c.value}catch(t){return void n(t)}c.done?e(u):Promise.resolve(u).then(r,o)}function X(t){return function(){var e=this,n=arguments;return new Promise((function(r,o){var i=t.apply(e,n);function a(t){q(i,r,o,a,c,"next",t)}function c(t){q(i,r,o,a,c,"throw",t)}a(void 0)}))}}function Z(t,e){for(var n=0;n
    \n '},_createGetFeatureInfoAccordionGroup:function(){var t=document.createElement("div");return t.id=this._addUID("GPgetFeatureInfoAccordionGroup"),t.className="GPgetFeatureInfoAccordionGroup fr-accordions-group",t},_createGetFeatureInfoLayerAccordion:function(t){var e=this.stringToHTML('\n
    \n

    \n \n

    \n
    \n ').concat(this._createGetFeatureInfoWaitingDiv(),"\n
    \n
    \n ")).firstChild;return e.querySelector("button, button.fr-accordion__btn").addEventListener("click",(function(t){t.currentTarget.ariaExpanded=!("true"===t.currentTarget.ariaExpanded);var e=document.getElementById(t.currentTarget.getAttribute("aria-controls"));"true"===t.currentTarget.ariaExpanded?(e.classList.add("fr-collapse--expanded"),e.classList.remove("GPelementHidden")):(e.classList.remove("fr-collapse--expanded"),e.classList.add("GPelementHidden"))})),e}};function Q(t){return Q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Q(t)}function tt(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */tt=function(){return e};var t,e={},n=Object.prototype,r=n.hasOwnProperty,o=Object.defineProperty||function(t,e,n){t[e]=n.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function l(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{l({},"")}catch(t){l=function(t,e,n){return t[e]=n}}function s(t,e,n,r){var i=e&&e.prototype instanceof g?e:g,a=Object.create(i.prototype),c=new S(r||[]);return o(a,"_invoke",{value:I(t,n,c)}),a}function f(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}e.wrap=s;var p="suspendedStart",h="suspendedYield",d="executing",v="completed",y={};function g(){}function m(){}function b(){}var w={};l(w,a,(function(){return this}));var E=Object.getPrototypeOf,O=E&&E(E(C([])));O&&O!==n&&r.call(O,a)&&(w=O);var L=b.prototype=g.prototype=Object.create(w);function x(t){["next","throw","return"].forEach((function(e){l(t,e,(function(t){return this._invoke(e,t)}))}))}function P(t,e){function n(o,i,a,c){var u=f(t[o],t,i);if("throw"!==u.type){var l=u.arg,s=l.value;return s&&"object"==Q(s)&&r.call(s,"__await")?e.resolve(s.__await).then((function(t){n("next",t,a,c)}),(function(t){n("throw",t,a,c)})):e.resolve(s).then((function(t){l.value=t,a(l)}),(function(t){return n("throw",t,a,c)}))}c(u.arg)}var i;o(this,"_invoke",{value:function(t,r){function o(){return new e((function(e,o){n(t,r,e,o)}))}return i=i?i.then(o,o):o()}})}function I(e,n,r){var o=p;return function(i,a){if(o===d)throw Error("Generator is already running");if(o===v){if("throw"===i)throw a;return{value:t,done:!0}}for(r.method=i,r.arg=a;;){var c=r.delegate;if(c){var u=G(c,r);if(u){if(u===y)continue;return u}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=v,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=d;var l=f(e,n,r);if("normal"===l.type){if(o=r.done?v:h,l.arg===y)continue;return{value:l.arg,done:r.done}}"throw"===l.type&&(o=v,r.method="throw",r.arg=l.arg)}}}function G(e,n){var r=n.method,o=e.iterator[r];if(o===t)return n.delegate=null,"throw"===r&&e.iterator.return&&(n.method="return",n.arg=t,G(e,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),y;var i=f(o,e.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,y;var a=i.arg;return a?a.done?(n[e.resultName]=a.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,y):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,y)}function F(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function _(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function S(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(F,this),this.reset(!0)}function C(e){if(e||""===e){var n=e[a];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,i=function n(){for(;++o=0;--i){var a=this.tryEntries[i],c=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var u=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(u&&l){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),_(n),y}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;_(n)}return o}}throw Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:C(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),y}},e}function et(t,e,n,r,o,i,a){try{var c=t[i](a),u=c.value}catch(t){return void n(t)}c.done?e(u):Promise.resolve(u).then(r,o)}function nt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function rt(t){for(var e=1;e0)return e})).sort((function(t,e){return e.getZIndex()-t.getZIndex()})),!(this.layers.length>0))return;var e=this.getFeatureInfoAccordionGroup=this._createGetFeatureInfoAccordionGroup();this.getFeatureInfoPanelDiv.appendChild(e),this.map=t.map,this.pixel=t.pixel,this.coordinates=t.coordinate,this.res=t.map.getView().getResolution(),this.displayGetFeatureInfo()}}},{key:"getGetFeatureInfoLayer",value:function(t){var e={},n=this.getLayerFormat(t);if(e={format:n,layer:t},"wmts"===n){var r=t.getSource().getFeatureInfoUrl(this.coordinates,this.res,this.map.getView().getProjection(),{INFOFORMAT:"text/html",STYLES:""});e=rt(rt({},e),{url:r})}if("wms"===n){var o=t.getSource().getFeatureInfoUrl(this.coordinates,this.res,this.map.getView().getProjection(),{INFO_FORMAT:"text/html",STYLES:""});e=rt(rt({},e),{url:o})}return e}},{key:"getFeaturesAtClick",value:function(t){var e=[];return this.getMap().forEachFeatureAtPixel(this.pixel,(function(n,r){t==r&&e.push(n)})),e}},{key:"getGetFeatureInfoContent",value:(i=tt().mark((function t(e){var n,r,o=this;return tt().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n=null,"vector"!==e.format){t.next=7;break}return(r=this.getFeaturesAtClick(e.layer))&&(n=this.features2html(r)),t.abrupt("return",n);case 7:return t.abrupt("return",fetch(e.url).then((function(t){return t.text()})).then((function(t){var e=!1;if(0!==t.trim().length&&-1===t.indexOf("ServiceExceptionReport")&&-1===t.indexOf("java.lang.NullPointerException")&&-1===t.indexOf("java.lang.OutOfMemoryError")&&-1===t.indexOf("not queryable")&&-1===t.indexOf("No data")&&-1===t.indexOf("non interrogeable")||(e=!0),e)return null;var n=o.stringToHTML(t);return n&&n.innerHTML&&n.innerHTML.trim().length>0?t:null})).catch((function(t){return pt.log(t),t})));case 8:case"end":return t.stop()}}),t,this)})),a=function(){var t=this,e=arguments;return new Promise((function(n,r){var o=i.apply(t,e);function a(t){et(o,n,r,a,c,"next",t)}function c(t){et(o,n,r,a,c,"throw",t)}a(void 0)}))},function(t){return a.apply(this,arguments)})},{key:"getLayerTitle",value:function(t){if(void 0!==t.layer.getProperties&&void 0!==t.layer.getSource){var e=t.layer.getProperties(),n=e.source,r="";n&&(r=n._title||n.name||e.title||e.name||n.url_||"Couche de données")}return r}},{key:"displayGetFeatureInfo",value:function(){for(var t=this,e=this.layers.map((function(e){return t.getGetFeatureInfoLayer(e)})).map((function(e){var n=t.getLayerTitle(e),r=t._createGetFeatureInfoLayerAccordion(n);return r.style.display="none",new $(rt(rt({},e),{layername:n,content:null,contentDiv:r,pending:!0}))})),n=0;ndiv{display:inline-flex;gap:1rem}button[id^=GPshowIsoExclusions]{border:unset;bottom:unset;position:absolute;right:0;transform:translateY(-100%);transition:all .5s ease-out 0s}button[id^=GPshowIsoExclusions][aria-pressed=true]{transform:translateY(-100%) rotateX(180deg)}button[id^=GPshowIsoExclusions][aria-pressed=false]+div[id^=GPisoExclusions]{margin-bottom:0;max-height:0;opacity:0}button[id^=GPshowIsoExclusions][aria-pressed=true]+div[id^=GPisoExclusions]{display:block;margin-bottom:15px;max-height:76px;opacity:1}.GPisochronFormMini button[id^=GPshowIsoExclusions][aria-pressed=true]+div[id^=GPisoExclusions]{display:none}div[id^=GPisoExclusions]{overflow:hidden;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s,margin .3s ease-in-out .25s}div[id^=GPlayerSwitcher-]{right:8px;top:8px}div[id^=GPlayerSwitcher-] [draggable]{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;user-select:none;-khtml-user-drag:element;-webkit-user-drag:element}div[id^=GPlayerSwitcher-] input[type=checkbox]+button+dialog{max-height:0}input[id^=GPshowLayersList-]{display:none}button[id^=GPshowLayersListPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowLayersListPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}.position>div[id^=GPlayerSwitcher-]>dialog[id^=GPlayersList]{position:absolute}.position>div[id^=GPlayerSwitcher-]>button[id^=GPshowLayersListPicto-]{float:unset}dialog[id^=GPlayersList]{float:left;position:relative}button[id^=GPshowLayersListPicto-]{float:right}dialog[id^=GPlayersList]{border-bottom-right-radius:0;opacity:0}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{height:auto;max-height:inherit;opacity:1}.GPlayerCounter{background:#fff;border-radius:100px;color:#000;display:inline-block;font-size:12px;left:15px;line-height:1;min-width:15px;padding:2px 0 1px;position:relative;text-align:center;top:-15px}.GPlayerSwitcher_layer{border-bottom:1px dotted #ccc;overflow:hidden;position:relative;top:0}dialog[id^=GPlayersList] .GPlayerSwitcher_layer:last-child{border-bottom:none}.GPlayerAdvancedTools{display:block;max-height:0;opacity:0;transition:max-height .5s ease-out 0s,opacity .5s ease-out 0s}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{opacity:1}[id^=GPlayerInfoPanel]{left:unset;right:100%}div[id^=GPlayerInfoContent]{max-height:200px;overflow-y:auto;padding-left:10px;padding-right:10px;position:relative}[class*=GPlocationPoint]{position:relative}div[id^=GPlocationAutoCompleteResult]{background-color:var(--background-default-grey);border:1px solid var(--grey-900-175);border-top:none;left:0;max-height:140px;overflow-y:auto;top:45px}div[id^=GPlocationAutoCompleteList]{position:absolute;width:calc(100% - 56px);z-index:2} /*# sourceMappingURL=GpfExtOlIsocurve.css.map*/ \ No newline at end of file diff --git a/dist/modules/GpfExtOlIsocurve.js b/dist/modules/GpfExtOlIsocurve.js index 499b2158..cf4b453d 100644 --- a/dist/modules/GpfExtOlIsocurve.js +++ b/dist/modules/GpfExtOlIsocurve.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var e={4582:(e,t)=>{"use strict";function n(e,t){return void 0===t&&(t=Object),t&&"function"==typeof t.getOwnPropertyDescriptors&&(e=t.create(null,t.getOwnPropertyDescriptors(e))),t&&"function"==typeof t.freeze?t.freeze(e):e}function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var o=n({allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,formnovalidate:!0,hidden:!0,ismap:!0,itemscope:!0,loop:!0,multiple:!0,muted:!0,nomodule:!0,novalidate:!0,open:!0,playsinline:!0,readonly:!0,required:!0,reversed:!0,selected:!0});var i=n({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});var a=n({script:!1,style:!1,textarea:!0,title:!0});function s(e){return e===l.HTML}var l=n({HTML:"text/html",XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),c=Object.keys(l).map((function(e){return l[e]}));var u=n({HTML:"http://www.w3.org/1999/xhtml",SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});t.assign=function(e,t){if(null===e||"object"!=typeof e)throw new TypeError("target is not an object");for(var n in t)r(t,n)&&(e[n]=t[n]);return e},t.find=function(e,t,n){if(void 0===n&&(n=Array.prototype),e&&"function"==typeof n.find)return n.find.call(e,t);for(var o=0;o-1},t.MIME_TYPE=l,t.NAMESPACE=u},5752:(e,t,n)=>{"use strict";var r=n(4582),o=n(4722),i=n(2983),a=n(6559),s=n(4466),l=o.DOMImplementation,c=r.hasDefaultHTMLNamespace,u=r.isHTMLMimeType,g=r.isValidMimeType,d=r.MIME_TYPE,p=r.NAMESPACE,h=i.ParseError,f=s.XMLReader;function A(e){return e.replace(/\r[\n\u0085]/g,"\n").replace(/[\r\u0085\u2028]/g,"\n")}function I(e){if(e=e||{locator:!0},this.assign=e.assign||r.assign,this.domHandler=e.domHandler||m,this.onError=e.onError||e.errorHandler,e.errorHandler&&"function"!=typeof e.errorHandler)throw new TypeError("errorHandler object is no longer supported, switch to onError!");e.errorHandler&&e.errorHandler("warning","The `errorHandler` option has been deprecated, use `onError` instead!",this),this.normalizeLineEndings=e.normalizeLineEndings||A,this.locator=!!e.locator,this.xmlns=this.assign(Object.create(null),e.xmlns)}function m(e){var t=e||{};this.mimeType=t.mimeType||d.XML_APPLICATION,this.defaultNamespace=t.defaultNamespace||null,this.cdata=!1,this.currentElement=void 0,this.doc=void 0,this.locator=void 0,this.onError=t.onError}function C(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function y(e,t,n){return"string"==typeof e?e.substr(t,n):e.length>=t+n||t?new java.lang.String(e,t,n)+"":e}function v(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}I.prototype.parseFromString=function(e,t){if(!g(t))throw new TypeError('DOMParser.parseFromString: the provided mimeType "'+t+'" is not valid.');var n=this.assign(Object.create(null),this.xmlns),o=a.XML_ENTITIES,i=n[""]||null;c(t)?(o=a.HTML_ENTITIES,i=p.HTML):t===d.XML_SVG_IMAGE&&(i=p.SVG),n[""]=i,n.xml=n.xml||p.XML;var s=new this.domHandler({mimeType:t,defaultNamespace:i,onError:this.onError}),l=this.locator?{}:void 0;this.locator&&s.setDocumentLocator(l);var u=new f;return u.errorHandler=s,u.domBuilder=s,!r.isHTMLMimeType(t)&&"string"!=typeof e&&u.errorHandler.fatalError("source is not a string"),u.parse(this.normalizeLineEndings(String(e)),n,o),s.doc.documentElement||u.errorHandler.fatalError("missing root element"),s.doc},m.prototype={startDocument:function(){var e=new l;this.doc=u(this.mimeType)?e.createHTMLDocument(!1):e.createDocument(this.defaultNamespace,"")},startElement:function(e,t,n,r){var o=this.doc,i=o.createElementNS(e,n||t),a=r.length;v(this,i),this.currentElement=i,this.locator&&C(this.locator,i);for(var s=0;s{"use strict";var r=n(4582),o=r.find,i=r.hasDefaultHTMLNamespace,a=r.hasOwn,s=r.isHTMLMimeType,l=r.isHTMLRawTextElement,c=r.isHTMLVoidElement,u=r.MIME_TYPE,g=r.NAMESPACE,d=Symbol(),p=n(2983),h=p.DOMException,f=p.DOMExceptionName,A=n(2763);function I(e){if(e!==d)throw new TypeError("Illegal constructor")}function m(e){return""!==e}function C(e,t){return a(e,t)||(e[t]=!0),e}function y(e){if(!e)return[];var t=function(e){return e?e.split(/[\t\n\f\r ]+/).filter(m):[]}(e);return Object.keys(t.reduce(C,{}))}function v(e){if(!A.QName_exact.test(e))throw new h(h.INVALID_CHARACTER_ERR,'invalid character in qualified name "'+e+'"')}function E(e,t){v(t),e=e||null;var n=null,o=t;if(t.indexOf(":")>=0){var i=t.split(":");n=i[0],o=i[1]}if(null!==n&&null===e)throw new h(h.NAMESPACE_ERR,"prefix is non-null and namespace is null");if("xml"===n&&e!==r.NAMESPACE.XML)throw new h(h.NAMESPACE_ERR,'prefix is "xml" and namespace is not the XML namespace');if(("xmlns"===n||"xmlns"===t)&&e!==r.NAMESPACE.XMLNS)throw new h(h.NAMESPACE_ERR,'either qualifiedName or prefix is "xmlns" and namespace is not the XMLNS namespace');if(e===r.NAMESPACE.XMLNS&&"xmlns"!==n&&"xmlns"!==t)throw new h(h.NAMESPACE_ERR,'namespace is the XMLNS namespace and neither qualifiedName nor prefix is "xmlns"');return[e,n,o]}function b(e,t){for(var n in e)a(e,n)&&(t[n]=e[n])}function w(e,t){var n=e.prototype;if(!(n instanceof t)){function r(){}r.prototype=t.prototype,b(n,r=new r),e.prototype=n=r}n.constructor!=e&&("function"!=typeof e&&console.error("unknown Class:"+e),n.constructor=e)}var _={},S=_.ELEMENT_NODE=1,P=_.ATTRIBUTE_NODE=2,T=_.TEXT_NODE=3,R=_.CDATA_SECTION_NODE=4,O=_.ENTITY_REFERENCE_NODE=5,N=_.ENTITY_NODE=6,D=_.PROCESSING_INSTRUCTION_NODE=7,x=_.COMMENT_NODE=8,L=_.DOCUMENT_NODE=9,k=_.DOCUMENT_TYPE_NODE=10,M=_.DOCUMENT_FRAGMENT_NODE=11,G=_.NOTATION_NODE=12,U=r.freeze({DOCUMENT_POSITION_DISCONNECTED:1,DOCUMENT_POSITION_PRECEDING:2,DOCUMENT_POSITION_FOLLOWING:4,DOCUMENT_POSITION_CONTAINS:8,DOCUMENT_POSITION_CONTAINED_BY:16,DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:32});function B(e){for(var t=[];e.parentNode||e.ownerElement;)e=e.parentNode||e.ownerElement,t.unshift(e);return t}function F(e,t){if(t.length=0){for(var o=t.length-1;r<=o;)t[r]=t[++r];if(t.length=o,e){var i=e.ownerDocument;i&&ee(i,e,n),n.ownerElement=null}}}function W(){}function K(e){I(e)}function J(e){return("<"==e?"<":">"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function Q(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(Q(e,t))return!0}while(e=e.nextSibling)}function $(e,t){I(e);var n=t||{};this.ownerDocument=this,this.contentType=n.contentType||u.XML_APPLICATION,this.type=s(this.contentType)?"html":"xml"}function ee(e,t,n,r){e&&e._inc++,n.namespaceURI===g.XMLNS&&delete t._nsMap[n.prefix?n.localName:""]}function te(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n&&!n.nextSibling)r[r.length++]=n;else{for(var o=t.firstChild,i=0;o;)r[i++]=o,o=o.nextSibling;r.length=i,delete r[r.length]}}}function ne(e,t){if(e!==t.parentNode)throw new h(h.NOT_FOUND_ERR,"child's parent is not parent");var n=t.previousSibling,r=t.nextSibling;return n?n.nextSibling=r:e.firstChild=r,r?r.previousSibling=n:e.lastChild=n,te(e.ownerDocument,e),t.parentNode=null,t.previousSibling=null,t.nextSibling=null,t}function re(e){return e&&e.nodeType===K.DOCUMENT_TYPE_NODE}function oe(e){return e&&e.nodeType===K.ELEMENT_NODE}function ie(e){return e&&e.nodeType===K.TEXT_NODE}function ae(e,t){var n=e.childNodes||[];if(o(n,oe)||re(t))return!1;var r=o(n,re);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function se(e,t){var n=e.childNodes||[];if(o(n,(function(e){return oe(e)&&e!==t})))return!1;var r=o(n,re);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function le(e,t,n){if(!function(e){return e&&(e.nodeType===K.DOCUMENT_NODE||e.nodeType===K.DOCUMENT_FRAGMENT_NODE||e.nodeType===K.ELEMENT_NODE)}(e))throw new h(h.HIERARCHY_REQUEST_ERR,"Unexpected parent node type "+e.nodeType);if(n&&n.parentNode!==e)throw new h(h.NOT_FOUND_ERR,"child not in parent");if(!function(e){return e&&(e.nodeType===K.CDATA_SECTION_NODE||e.nodeType===K.COMMENT_NODE||e.nodeType===K.DOCUMENT_FRAGMENT_NODE||e.nodeType===K.DOCUMENT_TYPE_NODE||e.nodeType===K.ELEMENT_NODE||e.nodeType===K.PROCESSING_INSTRUCTION_NODE||e.nodeType===K.TEXT_NODE)}(t)||re(t)&&e.nodeType!==K.DOCUMENT_NODE)throw new h(h.HIERARCHY_REQUEST_ERR,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function ce(e,t,n){var r=e.childNodes||[],i=t.childNodes||[];if(t.nodeType===K.DOCUMENT_FRAGMENT_NODE){var a=i.filter(oe);if(a.length>1||o(i,ie))throw new h(h.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===a.length&&!ae(e,n))throw new h(h.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!ae(e,n))throw new h(h.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(re(t)){if(o(r,re))throw new h(h.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var s=o(r,oe);if(n&&r.indexOf(s)1||o(i,ie))throw new h(h.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===a.length&&!se(e,n))throw new h(h.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!se(e,n))throw new h(h.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(re(t)){function l(e){return re(e)&&e!==n}if(o(r,l))throw new h(h.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var s=o(r,oe);if(n&&r.indexOf(s)=0;f--){if(""===(I=r[f]).prefix&&I.namespace===e.namespaceURI){p=I.namespace;break}}if(p!==e.namespaceURI)for(f=r.length-1;f>=0;f--){var I;if((I=r[f]).namespace===e.namespaceURI){I.prefix&&(d=I.prefix+":"+u);break}}}t.push("<",d);for(var m=0;m");else{if(t.push(">"),o&&l(u))for(;s;)s.data?t.push(s.data):Te(s,t,n,r.slice()),s=s.nextSibling;else for(;s;)Te(s,t,n,r.slice()),s=s.nextSibling;t.push("")}return;case L:case M:for(s=e.firstChild;s;)Te(s,t,n,r.slice()),s=s.nextSibling;return;case P:return Pe(t,e.name,e.value);case T:return t.push(e.data.replace(/[<&>]/g,J));case R:return t.push(A.CDATA_START,e.data,A.CDATA_END);case x:return t.push(A.COMMENT_START,e.data,A.COMMENT_END);case k:var b=e.publicId,w=e.systemId;return t.push(A.DOCTYPE_DECL_START," ",e.name),b?(t.push(" ",A.PUBLIC," ",b),w&&"."!==w&&t.push(" ",w)):w&&"."!==w&&t.push(" ",A.SYSTEM," ",w),e.internalSubset&&t.push(" [",e.internalSubset,"]"),void t.push(">");case D:return t.push("");case O:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function Re(e,t,n){var r;switch(t.nodeType){case S:(r=t.cloneNode(!1)).ownerDocument=e;case M:break;case P:n=!0}if(r||(r=t.cloneNode(!1)),r.ownerDocument=e,r.parentNode=null,n)for(var o=t.firstChild;o;)r.appendChild(Re(e,o,n)),o=o.nextSibling;return r}function Oe(e,t,n){var r=new t.constructor(d);for(var o in t)if(a(t,o)){var i=t[o];"object"!=typeof i&&i!=r[o]&&(r[o]=i)}switch(t.childNodes&&(r.childNodes=new H),r.ownerDocument=e,r.nodeType){case S:var s=t.attributes,l=r.attributes=new Y,c=s.length;l._ownerElement=r;for(var u=0;u=0&&ej(t.ownerDocument)?U.DOCUMENT_POSITION_FOLLOWING:U.DOCUMENT_POSITION_PRECEDING);var s=B(t),l=B(n);if(!r&&l.indexOf(t)>=0||o&&t===n)return U.DOCUMENT_POSITION_CONTAINS+U.DOCUMENT_POSITION_PRECEDING;if(!o&&s.indexOf(n)>=0||r&&t===n)return U.DOCUMENT_POSITION_CONTAINED_BY+U.DOCUMENT_POSITION_FOLLOWING;var c=F(l,s);for(var u in c.childNodes){var g=c.childNodes[u];if(g===n)return U.DOCUMENT_POSITION_FOLLOWING;if(g===t)return U.DOCUMENT_POSITION_PRECEDING;if(l.indexOf(g)>=0)return U.DOCUMENT_POSITION_FOLLOWING;if(s.indexOf(g)>=0)return U.DOCUMENT_POSITION_PRECEDING}return 0}},b(_,K),b(_,K.prototype),b(U,K),b(U,K.prototype),$.prototype={implementation:null,nodeName:"#document",nodeType:L,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType===M){for(var n=e.firstChild;n;){var r=n.nextSibling;this.insertBefore(n,t),n=r}return e}return ge(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===S&&(this.documentElement=e),e},removeChild:function(e){var t=ne(this,e);return t===this.documentElement&&(this.documentElement=null),t},replaceChild:function(e,t){ge(this,e,t,ue),e.ownerDocument=this,t&&this.removeChild(t),oe(e)&&(this.documentElement=e)},importNode:function(e,t){return Re(this,e,t)},getElementById:function(e){var t=null;return Q(this.documentElement,(function(n){if(n.nodeType==S&&n.getAttribute("id")==e)return t=n,!0})),t},createElement:function(e){var t=new de(d);return t.ownerDocument=this,"html"===this.type&&(e=e.toLowerCase()),i(this.contentType)&&(t.namespaceURI=g.HTML),t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new H,(t.attributes=new Y)._ownerElement=t,t},createDocumentFragment:function(){var e=new Ee(d);return e.ownerDocument=this,e.childNodes=new H,e},createTextNode:function(e){var t=new fe(d);return t.ownerDocument=this,t.childNodes=new H,t.appendData(e),t},createComment:function(e){var t=new Ae(d);return t.ownerDocument=this,t.childNodes=new H,t.appendData(e),t},createCDATASection:function(e){var t=new Ie(d);return t.ownerDocument=this,t.childNodes=new H,t.appendData(e),t},createProcessingInstruction:function(e,t){var n=new be(d);return n.ownerDocument=this,n.childNodes=new H,n.nodeName=n.target=e,n.nodeValue=n.data=t,n},createAttribute:function(e){if(!A.QName_exact.test(e))throw new h(h.INVALID_CHARACTER_ERR,'invalid character in name "'+e+'"');return"html"===this.type&&(e=e.toLowerCase()),this._createAttribute(e)},_createAttribute:function(e){var t=new pe(d);return t.ownerDocument=this,t.childNodes=new H,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){if(!A.Name.test(e))throw new h(h.INVALID_CHARACTER_ERR,'not a valid xml name "'+e+'"');if("html"===this.type)throw new h("document is an html document",f.NotSupportedError);var t=new ve(d);return t.ownerDocument=this,t.childNodes=new H,t.nodeName=e,t},createElementNS:function(e,t){var n=E(e,t),r=new de(d),o=r.attributes=new Y;return r.childNodes=new H,r.ownerDocument=this,r.nodeName=t,r.tagName=t,r.namespaceURI=n[0],r.prefix=n[1],r.localName=n[2],o._ownerElement=r,r},createAttributeNS:function(e,t){var n=E(e,t),r=new pe(d);return r.ownerDocument=this,r.childNodes=new H,r.nodeName=t,r.name=t,r.specified=!0,r.namespaceURI=n[0],r.prefix=n[1],r.localName=n[2],r}},w($,K),de.prototype={nodeType:S,attributes:null,getQualifiedName:function(){return this.prefix?this.prefix+":"+this.localName:this.localName},_isInHTMLDocumentAndNamespace:function(){return"html"===this.ownerDocument.type&&this.namespaceURI===g.HTML},hasAttribute:function(e){return!!this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t?t.value:null},getAttributeNode:function(e){return this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase()),this.attributes.getNamedItem(e)},setAttribute:function(e,t){this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase());var n=this.getAttributeNode(e);n?n.value=n.nodeValue=""+t:((n=this.ownerDocument._createAttribute(e)).value=n.nodeValue=""+t,this.setAttributeNode(n))},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);n&&this.removeAttributeNode(n)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);return n?n.value:null},setAttributeNS:function(e,t,n){var r=E(e,t)[2],o=this.getAttributeNodeNS(e,r);o?o.value=o.nodeValue=""+n:((o=this.ownerDocument.createAttributeNS(e,t)).value=o.nodeValue=""+n,this.setAttributeNode(o))},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByClassName:function(e){var t=y(e);return new V(this,(function(n){var r=[];return t.length>0&&Q(n,(function(o){if(o!==n&&o.nodeType===S){var i=o.getAttribute("class");if(i){var a=e===i;if(!a){var s=y(i);a=t.every((l=s,function(e){return l&&-1!==l.indexOf(e)}))}a&&r.push(o)}}var l})),r}))},getElementsByTagName:function(e){var t="html"===(this.nodeType===L?this:this.ownerDocument).type,n=e.toLowerCase();return new V(this,(function(r){var o=[];return Q(r,(function(i){i!==r&&i.nodeType===S&&(("*"===e||i.getQualifiedName()===(t&&i.namespaceURI===g.HTML?n:e))&&o.push(i))})),o}))},getElementsByTagNameNS:function(e,t){return new V(this,(function(n){var r=[];return Q(n,(function(o){o===n||o.nodeType!==S||"*"!==e&&o.namespaceURI!==e||"*"!==t&&o.localName!=t||r.push(o)})),r}))}},$.prototype.getElementsByClassName=de.prototype.getElementsByClassName,$.prototype.getElementsByTagName=de.prototype.getElementsByTagName,$.prototype.getElementsByTagNameNS=de.prototype.getElementsByTagNameNS,w(de,K),pe.prototype.nodeType=P,w(pe,K),he.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,n){n=this.data.substring(0,e)+n+this.data.substring(e+t),this.nodeValue=this.data=n,this.length=n.length}},w(he,K),fe.prototype={nodeName:"#text",nodeType:T,splitText:function(e){var t=this.data,n=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var r=this.ownerDocument.createTextNode(n);return this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling),r}},w(fe,he),Ae.prototype={nodeName:"#comment",nodeType:x},w(Ae,he),Ie.prototype={nodeName:"#cdata-section",nodeType:R},w(Ie,fe),me.prototype.nodeType=k,w(me,K),Ce.prototype.nodeType=G,w(Ce,K),ye.prototype.nodeType=N,w(ye,K),ve.prototype.nodeType=O,w(ve,K),Ee.prototype.nodeName="#document-fragment",Ee.prototype.nodeType=M,w(Ee,K),be.prototype.nodeType=D,w(be,he),we.prototype.serializeToString=function(e,t){return _e.call(e,t)},K.prototype.toString=_e;try{if(Object.defineProperty){function De(e){switch(e.nodeType){case S:case M:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(De(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(V.prototype,"length",{get:function(){return q(this),this.$$length}}),Object.defineProperty(K.prototype,"textContent",{get:function(){return De(this)},set:function(e){switch(this.nodeType){case S:case M:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),Ne=function(e,t,n){e["$$"+t]=n}}}catch(xe){}t._updateLiveList=q,t.Attr=pe,t.CDATASection=Ie,t.CharacterData=he,t.Comment=Ae,t.Document=$,t.DocumentFragment=Ee,t.DocumentType=me,t.DOMImplementation=W,t.Element=de,t.Entity=ye,t.EntityReference=ve,t.LiveNodeList=V,t.NamedNodeMap=Y,t.Node=K,t.NodeList=H,t.Notation=Ce,t.Text=fe,t.ProcessingInstruction=be,t.XMLSerializer=we},6559:(e,t,n)=>{"use strict";var r=n(4582).freeze;t.XML_ENTITIES=r({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),t.HTML_ENTITIES=r({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),t.entityMap=t.HTML_ENTITIES},2983:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(Error.prototype,{constructor:{value:e},name:{value:e.name,enumerable:!0,writable:t}})}var o=n(4582).freeze({Error:"Error",IndexSizeError:"IndexSizeError",DomstringSizeError:"DomstringSizeError",HierarchyRequestError:"HierarchyRequestError",WrongDocumentError:"WrongDocumentError",InvalidCharacterError:"InvalidCharacterError",NoDataAllowedError:"NoDataAllowedError",NoModificationAllowedError:"NoModificationAllowedError",NotFoundError:"NotFoundError",NotSupportedError:"NotSupportedError",InUseAttributeError:"InUseAttributeError",InvalidStateError:"InvalidStateError",SyntaxError:"SyntaxError",InvalidModificationError:"InvalidModificationError",NamespaceError:"NamespaceError",InvalidAccessError:"InvalidAccessError",ValidationError:"ValidationError",TypeMismatchError:"TypeMismatchError",SecurityError:"SecurityError",NetworkError:"NetworkError",AbortError:"AbortError",URLMismatchError:"URLMismatchError",QuotaExceededError:"QuotaExceededError",TimeoutError:"TimeoutError",InvalidNodeTypeError:"InvalidNodeTypeError",DataCloneError:"DataCloneError",EncodingError:"EncodingError",NotReadableError:"NotReadableError",UnknownError:"UnknownError",ConstraintError:"ConstraintError",DataError:"DataError",TransactionInactiveError:"TransactionInactiveError",ReadOnlyError:"ReadOnlyError",VersionError:"VersionError",OperationError:"OperationError",NotAllowedError:"NotAllowedError",OptOutError:"OptOutError"}),i=Object.keys(o);function a(e){return"number"==typeof e&&e>=1&&e<=25}function s(e,t){var n;a(e)?(this.name=i[e],this.message=t||""):(this.message=e,this.name="string"==typeof(n=t)&&n.substring(n.length-o.Error.length)===o.Error?t:o.Error),Error.captureStackTrace&&Error.captureStackTrace(this,s)}r(s,!0),Object.defineProperties(s.prototype,{code:{enumerable:!0,get:function(){var e=i.indexOf(this.name);return a(e)?e:0}}});for(var l={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25},c=Object.entries(l),u=0;u{"use strict";function n(e){try{"function"!=typeof e&&(e=RegExp);var t=new e("𝌆","u").exec("𝌆");return!!t&&2===t[0].length}catch(e){}return!1}var r=n();function o(e){if("["!==e.source[0])throw new Error(e+" can not be used with chars");return e.source.slice(1,e.source.lastIndexOf("]"))}function i(e,t){if("["!==e.source[0])throw new Error("/"+e.source+"/ can not be used with chars_without");if(!t||"string"!=typeof t)throw new Error(JSON.stringify(t)+" is not a valid search");if(-1===e.source.indexOf(t))throw new Error('"'+t+'" is not is /'+e.source+"/");if("-"===t&&1!==e.source.indexOf(t))throw new Error('"'+t+'" is not at the first postion of /'+e.source+"/");return new RegExp(e.source.replace(t,""),r?"u":"")}function a(e){var t=this;return new RegExp(Array.prototype.slice.call(arguments).map((function(e){var n="string"==typeof e;if(n&&void 0===t&&"|"===e)throw new Error("use regg instead of reg to wrap expressions with `|`!");return n?e:e.source})).join(""),r?"mu":"m")}function s(e){if(0===arguments.length)throw new Error("no parameters provided");return a.apply(s,["(?:"].concat(Array.prototype.slice.call(arguments),[")"]))}var l=/[-\x09\x0A\x0D\x20-\x2C\x2E-\uD7FF\uE000-\uFFFD]/;r&&(l=a("[",o(l),"\\u{10000}-\\u{10FFFF}","]"));var c=/[\x20\x09\x0D\x0A]/,u=o(c),g=a(c,"+"),d=a(c,"*"),p=/[:_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;r&&(p=a("[",o(p),"\\u{10000}-\\u{10FFFF}","]"));var h=a("[",o(p),o(/[-.0-9\xB7]/),o(/[\u0300-\u036F\u203F-\u2040]/),"]"),f=a(p,h,"*"),A=a(h,"+"),I=a("&",f,";"),m=s(/&#[0-9]+;|&#x[0-9a-fA-F]+;/),C=s(I,"|",m),y=a("%",f,";"),v=s(a('"',s(/[^%&"]/,"|",y,"|",C),"*",'"'),"|",a("'",s(/[^%&']/,"|",y,"|",C),"*","'")),E=s('"',s(/[^<&"]/,"|",C),"*",'"',"|","'",s(/[^<&']/,"|",C),"*","'"),b=a(i(p,":"),i(h,":"),"*"),w=a(b,s(":",b),"?"),_=a("^",w,"$"),S=a("(",w,")"),P=s(/"[^"]*"|'[^']*'/),T=a(/^<\?/,"(",f,")",s(g,"(",l,"*?)"),"?",/\?>/),R=/[\x20\x0D\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/,O=s('"',R,'*"',"|","'",i(R,"'"),"*'"),N="\x3c!--",D=a(N,s(i(l,"-"),"|",a("-",i(l,"-"))),"*","--\x3e"),x="#PCDATA",L=s(a(/\(/,d,x,s(d,/\|/,d,w),"*",d,/\)\*/),"|",a(/\(/,d,x,d,/\)/)),k=s("EMPTY","|","ANY","|",L,"|",a(/\([^>]+\)/,/[?*+]?/)),M=a(""),G=a("NOTATION",g,/\(/,d,f,s(d,/\|/,d,f),"*",d,/\)/),U=a(/\(/,d,A,s(d,/\|/,d,A),"*",d,/\)/),B=s(G,"|",U),F=s(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/,"|",B),j=s(/#REQUIRED|#IMPLIED/,"|",s(s("#FIXED",g),"?",E)),H=a(""),V="SYSTEM",q="PUBLIC",Y=s(s(V,g,P),"|",s(q,g,O,g,P)),z=a("^",s(s(V,g,"(?",P,")"),"|",s(q,g,"(?",O,")",g,"(?",P,")"))),X=s(g,"NDATA",g,f),Z=""),K=s(v,"|",Y),J=s(W,"|",a(Z,g,"%",g,f,g,K,d,">")),Q=a(q,g,O),$=a(""),ee=a(d,"=",d),te=/1[.]\d+/,ne=a(g,"version",ee,s("'",te,"'","|",'"',te,'"')),re=/[A-Za-z][-A-Za-z0-9._]*/,oe=a(/^<\?xml/,ne,s(g,"encoding",ee,s('"',re,'"',"|","'",re,"'")),"?",s(g,"standalone",ee,s("'",s("yes","|","no"),"'","|",'"',s("yes","|","no"),'"')),"?",d,/\?>/),ie=a(l,"*?",/\]\]>/),ae=a(/",t.CDSect=ae,t.Char=l,t.Comment=D,t.COMMENT_START=N,t.COMMENT_END="--\x3e",t.DOCTYPE_DECL_START="{"use strict";var r=n(4582);r.assign,r.hasDefaultHTMLNamespace,r.isHTMLMimeType,r.isValidMimeType,r.MIME_TYPE,r.NAMESPACE;var o=n(2983);o.DOMException,o.DOMExceptionName,o.ExceptionCode,o.ParseError;var i=n(4722);i.Attr,i.CDATASection,i.CharacterData,i.Comment,i.Document,i.DocumentFragment,i.DocumentType,i.DOMImplementation,i.Element,i.Entity,i.EntityReference,i.LiveNodeList,i.NamedNodeMap,i.Node,i.NodeList,i.Notation,i.ProcessingInstruction,i.Text,i.XMLSerializer;var a=n(5752);t.S4=a.DOMParser,a.onErrorStopParsing,a.onWarningStopParsing},4466:(e,t,n)=>{"use strict";var r=n(4582),o=n(2763),i=n(2983),a=r.isHTMLEscapableRawTextElement,s=r.isHTMLMimeType,l=r.isHTMLRawTextElement,c=r.hasOwn,u=r.NAMESPACE,g=i.ParseError,d=i.DOMException;function p(){}p.prototype={parse:function(e,t,n){var i=this.domBuilder;i.startDocument(),C(t,t=Object.create(null)),function(e,t,n,i,a){var l=s(i.mimeType);e.indexOf(o.UNICODE_REPLACEMENT_CHARACTER)>=0&&a.warning("Unicode replacement character detected, source encoding issues?");function u(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}function p(e){var t=";"===e[e.length-1]?e:e+";";if(!l&&t!==e)return a.error("EntityRef: expecting ;"),e;var r=o.Reference.exec(t);if(!r||r[0].length!==t.length)return a.error("entity not matching Reference production: "+e),e;var i=t.slice(1,-1);return c(n,i)?n[i]:"#"===i.charAt(0)?u(parseInt(i.substr(1).replace("x","0x"))):(a.error("entity not found:"+e),e)}function C(t){if(t>O){var n=e.substring(O,t).replace(h,p);P&&y(O),i.characters(n,0,t-O),O=t}}function y(t,n){for(;t>=_&&(n=S.exec(e));)w=n.index,_=w+n[0].length,P.lineNumber++;P.columnNumber=t-w+1}var w=0,_=0,S=/.*(?:\r\n?|\n)|.*$/g,P=i.locator,T=[{currentNSMap:t}],R=[],O=0;for(;;){try{var N=e.indexOf("<",O);if(N<0){if(!l&&R.length>0)return a.fatalError("unclosed xml tag(s): "+R.join(", "));if(!e.substring(O).match(/^\s*$/)){var D=i.doc,x=D.createTextNode(e.substr(O));if(D.documentElement)return a.error("Extra content at the end of the document");D.appendChild(x),i.currentElement=x}return}if(N>O){var L=e.substring(O,N);l||0!==R.length||(L=L.replace(new RegExp(o.S_OPT.source,"g"),""))&&a.error("Unexpected content outside root element: '"+L+"'"),C(N)}switch(e.charAt(N+1)){case"/":var k=e.indexOf(">",N+2),M=e.substring(N+2,k>0?k:void 0);if(!M)return a.fatalError("end tag name missing");var G=k>0&&o.reg("^",o.QName_group,o.S_OPT,"$").exec(M);if(!G)return a.fatalError('end tag name contains invalid characters: "'+M+'"');if(!i.currentElement&&!i.doc.documentElement)return;var U=R[R.length-1]||i.currentElement.tagName||i.doc.documentElement.tagName||"";if(U!==G[1]){var B=G[1].toLowerCase();if(!l||U.toLowerCase()!==B)return a.fatalError('Opening and ending tag mismatch: "'+U+'" != "'+M+'"')}var F=T.pop();R.pop();var j=F.localNSMap;if(i.endElement(F.uri,F.localName,U),j)for(var H in j)c(j,H)&&i.endPrefixMapping(H);k++;break;case"?":P&&y(N),k=E(e,N,i,a);break;case"!":P&&y(N),k=v(e,N,i,a,l);break;default:P&&y(N);var V=new b,q=T[T.length-1].currentNSMap,Y=(k=A(e,N,V,q,p,a,l),V.length);if(V.closed||(l&&r.isHTMLVoidElement(V.tagName)?V.closed=!0:R.push(V.tagName)),P&&Y){for(var z=f(P,{}),X=0;XO?O=k:C(Math.max(N,O)+1)}}(e,t,n,i,this.errorHandler),i.endDocument()}};var h=/&#?\w+;?/g;function f(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function A(e,t,n,r,o,i,a){function s(e,t,r){return c(n.attributeNames,e)?i.fatalError("Attribute "+e+" redefined"):!a&&t.indexOf("<")>=0?i.fatalError("Unescaped '<' not allowed in attributes values"):void n.addValue(e,t.replace(/[\t\n\r]/g," ").replace(h,o),r)}for(var l,u=++t,g=0;;){var d=e.charAt(u);switch(d){case"=":if(1===g)l=e.slice(t,u),g=3;else{if(2!==g)throw new Error("attribute equal must after attrName");g=3}break;case"'":case'"':if(3===g||1===g){if(1===g&&(i.warning('attribute value must after "="'),l=e.slice(t,u)),t=u+1,!((u=e.indexOf(d,t))>0))throw new Error("attribute value no end '"+d+"' match");s(l,p=e.slice(t,u),t-1),g=5}else{if(4!=g)throw new Error('attribute value must after "="');s(l,p=e.slice(t,u),t),i.warning('attribute "'+l+'" missed start quot('+d+")!!"),t=u+1,g=5}break;case"/":switch(g){case 0:n.setTagName(e.slice(t,u));case 5:case 6:case 7:g=7,n.closed=!0;case 4:case 1:break;case 2:n.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return i.error("unexpected end of input"),0==g&&n.setTagName(e.slice(t,u)),u;case">":switch(g){case 0:n.setTagName(e.slice(t,u));case 5:case 6:case 7:break;case 4:case 1:"/"===(p=e.slice(t,u)).slice(-1)&&(n.closed=!0,p=p.slice(0,-1));case 2:2===g&&(p=l),4==g?(i.warning('attribute "'+p+'" missed quot(")!'),s(l,p,t)):(a||i.warning('attribute "'+p+'" missed value!! "'+p+'" instead!!'),s(p,p,t));break;case 3:if(!a)return i.fatalError("AttValue: ' or \" expected")}return u;case"€":d=" ";default:if(d<=" ")switch(g){case 0:n.setTagName(e.slice(t,u)),g=6;break;case 1:l=e.slice(t,u),g=2;break;case 4:var p=e.slice(t,u);i.warning('attribute "'+p+'" missed quot(")!!'),s(l,p,t);case 5:g=6}else switch(g){case 2:a||i.warning('attribute "'+l+'" missed value!! "'+l+'" instead2!!'),s(l,l,t),t=u,g=1;break;case 5:i.warning('attribute space is required"'+l+'"!!');case 6:g=1,t=u;break;case 3:g=4,t=u;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}u++}}function I(e,t,n){for(var r=e.tagName,o=null,i=e.length;i--;){var a=e[i],s=a.qName,l=a.value;if((h=s.indexOf(":"))>0)var g=a.prefix=s.slice(0,h),d=s.slice(h+1),p="xmlns"===g&&d;else d=s,g=null,p="xmlns"===s&&"";a.localName=d,!1!==p&&(null==o&&(o=Object.create(null),C(n,n=Object.create(null))),n[p]=o[p]=l,a.uri=u.XMLNS,t.startPrefixMapping(p,l))}for(i=e.length;i--;)(a=e[i]).prefix&&("xml"===a.prefix&&(a.uri=u.XML),"xmlns"!==a.prefix&&(a.uri=n[a.prefix]));var h;(h=r.indexOf(":"))>0?(g=e.prefix=r.slice(0,h),d=e.localName=r.slice(h+1)):(g=null,d=e.localName=r);var f=e.uri=n[g||""];if(t.startElement(f,d,r,e),!e.closed)return e.currentNSMap=n,e.localNSMap=o,!0;if(t.endElement(f,d,r),o)for(g in o)c(o,g)&&t.endPrefixMapping(g)}function m(e,t,n,r,o){var i=a(n);if(i||l(n)){var s=e.indexOf("",t),c=e.substring(t+1,s);return i&&(c=c.replace(h,r)),o.characters(c,0,c.length),s}return t+1}function C(e,t){for(var n in e)c(e,n)&&(t[n]=e[n])}function y(e,t){var n=t;function r(t){return t=t||0,e.charAt(n+t)}function i(e){n+=e=e||1}function a(){return e.substring(n)}return{char:r,getIndex:function(){return n},getMatch:function(e){var t=o.reg("^",e).exec(a());return t?(i(t[0].length),t[0]):null},getSource:function(){return e},skip:i,skipBlanks:function(){for(var t=0;n"!==a.char()?r.fatalError("doctype not terminated with > at position "+a.getIndex()):(a.skip(1),n.startDTD(c.name,c.publicId,c.systemId,c.internalSubset),n.endDTD(),a.getIndex());default:return r.fatalError('Not well-formed XML starting with "0)return r.fatalError("processing instruction at position "+t+" is an xml declaration which is only at the start of the document");if(!o.XMLDecl.test(e.substring(t)))return r.fatalError("xml declaration is not well-formed")}return n.processingInstruction(i[1],i[2]),t+i[0].length}function b(){this.attributeNames=Object.create(null)}b.prototype={setTagName:function(e){if(!o.QName_exact.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,n){if(!o.QName_exact.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:n}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=p,t.parseUtils=y,t.parseDoctypeCommentOrCData=v},562:(e,t,n)=>{"use strict";n.d(t,{A:()=>I});var r=n(7392),o=n.n(r),i=n(2940);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function s(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function l(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){for(var n=0;n{"use strict";n.d(t,{default:()=>v});var r=n(3391),o=n(7392),i=n.n(o),a=n(6736),s=n(5844),l=n(5771),c=n(9632),u=n(7255);const g={_addUID:function(e){return this.uid?e+"-"+this.uid:e}};function d(e){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d(e)}function p(e,t){for(var n=0;n\n '));this.button=r.firstChild,this.button&&this.button.addEventListener("click",(function(t){return e.onClickButtonExport(t)})),n.appendChild(r.firstChild);var o=this.stringToHTML('\n
    \n \n \n \n
    \n '));if(this.menu=o.firstChild,this.menu){if(this.options.menu){var i=this.menu.className;this.menu.className=i.replace(this.menuClassHidden,"")}this.menu.querySelectorAll('input[type=radio][name="format"]').forEach((function(t){t.id.toUpperCase().includes(e.options.format.toUpperCase())&&(t.checked=!0),t.addEventListener("change",(function(t){e.setFormat(t.target.value)}))}))}n.appendChild(o.firstChild),this.container=n}},{key:"stringToHTML",value:function(e){if(function(){if(!window.DOMParser)return!1;var e=new DOMParser;try{e.parseFromString("x","text/html")}catch(e){return!1}return!0}())return(new DOMParser).parseFromString(e,"text/html").body;var t=document.createElement("div");return t.innerHTML=e,t}},{key:"isPluggableControl",value:function(){return!(!this.options.control||"function"!=typeof this.options.control.getContainer||"function"!=typeof this.options.control.getLayer)}},{key:"exportFeatures",value:function(e,t,n){var r=this,o=null;if(!e)return C.warn("Impossible to export : no layer is hosting features."),o;if(!e.getSource()||!e.getSource().getFeatures()||!e.getSource().getFeatures().length)return C.warn("Impossible to export : no features found."),o;e.getSource().getFeatures().forEach((function(e){!e.getStyle()&&r.options.control&&"function"==typeof r.options.control.getStyle&&e.setStyle(r.options.control.getStyle())}));var i={defaultStyle:n};t&&(i.extensions={"geoportail:compute":t});var a=null;switch(this.options.format.toUpperCase()){case"KML":i.writeStyles=!0,i.showPointNames=!0,a=new l.A(i);break;case"GPX":a=new u.default(i);break;case"GEOJSON":a=new c.A(i)}if(!a)return C.warn("Impossible to export : format unknown !?"),o;var s=e.getSource().getProjection(),g=this.getMap();g&&(s=s||g.getView().getProjection());var d=e.getSource().getFeatures();return o=a.writeFeatures(d,{dataProjection:"EPSG:4326",featureProjection:s||"EPSG:3857"})}},{key:"onClickButtonExport",value:function(e){this.isPluggableControl()||C.warn("Componant not pluggable with the control !");var t=this.options.control&&void 0!==this.options.control.getLayer?this.options.control.getData():this.options.layer,n=this.options.control&&void 0!==this.options.control.getData?this.options.control.getData():{},r=this.options.control&&void 0!==this.options.control.getStyle?this.options.control.getStyle():{},o=this.exportFeatures(t,n,r);if(o&&"null"!==o)if(this.dispatchEvent({type:"export:compute",content:o}),this.options.onExport&&"function"==typeof this.options.onExport)this.options.onExport(o);else{var i=document.createElement("a");if(i.setAttribute("href","data:"+this.mimeType+";charset=utf-8,"+encodeURIComponent(o)),i.setAttribute("download",this.options.name+this.extension),document.createEvent){var a=document.createEvent("MouseEvents");a.initEvent("click",!0,!0),i.dispatchEvent(a)}else i.click()}}},{key:"getContainer",value:function(){return this.container}},{key:"setControl",value:function(e){this.options.control=e}},{key:"setTarget",value:function(e){this.options.target=e}},{key:"setFormat",value:function(e){switch(this.options.format=e.toUpperCase(),this.options.format){case"KML":this.extension=".kml",this.mimeType="application/vnd.google-earth.kml+xml";break;case"GPX":this.extension=".gpx",this.mimeType="application/gpx+xml";break;case"GEOJSON":this.extension=".geojson",this.mimeType="application/geo+json";break;default:this.options.format="GEOJSON",this.extension=".geojson",this.mimeType="application/geo+json"}}},{key:"setName",value:function(e){this.options.name=e}},{key:"setTitle",value:function(e){this.options.title=e,this.button&&(this.button.value=this.options.menu?this.icon+e:e)}},{key:"setMenu",value:function(e){var t=this;if(this.options.menu=e,this.button&&(this.button.value=this.options.menu?this.icon+this.options.title:this.options.title),this.menu&&this.options.menu){var n=this.menu.className;this.menu.className=n.replace(this.menuClassHidden,""),this.menu.querySelectorAll('input[type=radio][name="format"]').forEach((function(e){e.id.toUpperCase().includes(t.options.format.toUpperCase())&&(e.checked=!0)}))}}},{key:"setLayer",value:function(e){this.options.layer=e}}],r&&p(n.prototype,r),o&&p(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(i());Object.assign(y.prototype,g),Object.assign(y.prototype,r.A);const v=y;window.ol&&window.ol.control&&(window.ol.control.Export=y)},9209:(e,t,n)=>{"use strict";n.d(t,{default:()=>Tt});var r=n(3391),o=n(562),i=n(1363),a=n(2938),s=n(9201),l=n(6736),c=n(5844);const u={configuration:{},isConfigLoaded:function(){if(this.configuration&&0!==Object.keys(this.configuration).length)return!0;var e="undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0!==n.g?n.g:{};return!!(e.Gp&&e.Gp.Config&&e.Gp.Config.layers&&0!==Object.keys(e.Gp.Config.layers).length)&&(this.configuration=e.Gp.Config,!0)}}; /**! diff --git a/dist/modules/GpfExtOlLayerImport.css b/dist/modules/GpfExtOlLayerImport.css index 40875ebc..35a57b56 100644 --- a/dist/modules/GpfExtOlLayerImport.css +++ b/dist/modules/GpfExtOlLayerImport.css @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */div[id^=GPimport-]{left:10px;top:220px}button[id^=GPshowImportPicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowImportPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GPimportGetCapPanel-],[id^=GPimportMapBoxPanel-],[id^=GPimportPanel-]{height:inherit}[id^=GPimportPanel-]{position:absolute}[id^=GPimportGetCapPanel-],[id^=GPimportMapBoxPanel-]{position:relative;width:340px}form[id^=GPimportForm-]{padding:15px}div[id^=GPimportChoice-]{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-pack:distribute;justify-content:space-around}input[id^=GPimportSubmit-]{margin-top:20px}div[id^=GPimportGetCapResults-],div[id^=GPimportMapBoxResults-]{background-color:#fff;height:140px;overflow-y:auto;resize:vertical}input[id^=GPimportGetCapRubrique-],input[id^=GPimportGetCapRubrique-]~li,input[id^=GPimportMapBoxSource-],input[id^=GPimportMapBoxSource-]~div{display:none}input[id^=GPimportGetCapRubrique-]:checked~li,input[id^=GPimportGetCapRubrique-]~ul,input[id^=GPimportMapBoxSource-]:checked~div{display:block}input[id^=GPimportGetCapRubrique-]:checked~ul{display:none}.GPimportMapBoxpRoot{padding:5px}.GPEditorMapBoxContainer{border:1px solid #87cefa;border-radius:5px;-webkit-box-shadow:0 0 5px #000;box-shadow:0 0 5px #000;-webkit-box-sizing:border-box;box-sizing:border-box;height:auto;padding:5px;position:relative;width:100%}.GPEditorMapBoxSep{border:4px double #87cefa;display:block;width:50%}.GPEditorMapBoxLayersTitle,.GPEditorMapBoxThemesTitle{font-style:italic;font-weight:700;padding:5px}.disabled{opacity:.5;pointer-events:none}.GPEditorMapBoxGroupDetails{border:1px dotted #87cefa;border-radius:5px}.GPEditorMapBoxLayerContainer{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:100%;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.GPEditorMapBoxLayerContainer,.GPEditorMapBoxLayerTitleContainer{min-height:28px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.GPEditorMapBoxLayerTitleContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:inherit;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.GPEditorMapBoxLayerImageInput{display:none}.GPEditorMapBoxLayerImageLabel{background-image:url(data:image/png;base64,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);background-position:-56px 0;cursor:pointer;min-height:28px;min-width:24px}input[type=checkbox]:checked+.GPEditorMapBoxLayerImageLabel{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.GPEditorMapBoxLayerTypeImage{background-image:url(data:image/png;base64,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);background-position:0 0;background-repeat:no-repeat;border:1px solid gray;border-radius:5px;-webkit-box-shadow:2px 2px 1px #d3d3d3;box-shadow:2px 2px 1px #d3d3d3;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;margin-right:5px;min-height:30px;min-width:30px}.GPEditorMapBoxLayerTitleInput{display:none}.GPEditorMapBoxLayerTitleLabel{border:1px solid gray;border-radius:5px;-webkit-box-shadow:2px 2px 1px #d3d3d3;box-shadow:2px 2px 1px #d3d3d3;cursor:pointer;margin-left:5px;padding:5px;width:inherit;word-break:break-word}input[type=checkbox]:checked+.GPEditorMapBoxLayerTitleLabel{background-color:#d3d3d3}.GPEditorMapBoxToolsContainer{display:-webkit-box;display:-ms-flexbox;display:flex;height:28px;min-width:28px;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.GPEditorMapBoxToolsVisibilityInput{display:none}.GPEditorMapBoxToolsVisibilityInputDisable{display:"block"}.GPEditorMapBoxToolsVisibilityLabel{background-image:url(data:image/png;base64,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);background-position:-28px 0;cursor:pointer;height:28px;width:28px}.GPEditorMapBoxToolsVisibilityLabelDisable{cursor:pointer}input[type=checkbox]:checked+.GPEditorMapBoxToolsVisibilityLabel{background-position:0 0}.GPEditorMapBoxFilterContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-left:28px}.GPEditorMapBoxFilterJsonContainer{border-radius:5px;border-style:solid;border-width:1px;padding:5px}.GPEditorMapBoxFilterDisplayJson{cursor:pointer;height:125px;overflow:scroll;resize:vertical;width:175px}.GPEditorMapBoxThemesContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:175px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.GPEditorMapBoxThemeContainer{border-radius:5px;border-style:solid;border-width:1px;margin:5px;padding:5px;text-align:center;width:inherit}.GPEditorMapBoxThemeContainer:focus{background-color:#d3d3d3}.GPEditorMapBoxThemeImage{cursor:pointer;height:60px;width:120px}.GPEditorMapBoxThemeTitle{cursor:pointer;padding:5px}.GPEditorMapBoxThemeMessage{color:red;font-style:italic}.GPEditorMapBoxStyleContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-left:28px}.GPEditorMapBoxStyleJsonContainer{border-radius:5px;border-style:solid;border-width:1px;padding:5px}.GPEditorMapBoxStyleJsonDisplay{cursor:pointer;height:125px;overflow:scroll;resize:vertical;width:175px}.GPEditorMapBoxStyleToolsScaleContainer{border-radius:5px;border-style:solid;border-width:1px;padding:5px;width:-webkit-min-content;width:-moz-min-content;width:min-content}.GPEditorMapBoxStyleToolsScaleMaxContainer,.GPEditorMapBoxStyleToolsScaleMinContainer{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:175px;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.gp-json-string{color:green}.gp-json-number{color:#ff8c00}.gp-json-boolean{color:blue}.gp-json-null{color:#f0f}.gp-json-key{color:red}.GPEditorMapBoxLegendContainer{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:nowrap;flex-wrap:nowrap;margin-left:28px}.GPEditorMapBoxLegendRenderContainer{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:5px;border-style:solid;border-width:1px;overflow-y:auto;padding:5px;width:175px}.GPEditorMapBoxLegendRender{border:1px solid transparent;border-radius:5px;-webkit-box-shadow:2px 2px 1px grey;box-shadow:2px 2px 1px grey;cursor:pointer;min-height:28px;min-width:28px}.GPEditorMapBoxLegendEditable{border-color:#000}.GPEditorMapBoxLegendTitle{margin-left:10px}.GPEditorMapBoxLegendToolsContainer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:5px;width:230px}.legend-not-implemented,.legend-unknow{background-color:#fff}.legend-unknow:before{color:red;content:"\2753";font-size:15px}.legend-not-implemented:before{color:red;content:"\2718";font-size:15px}.legend-circle-not-editable,.legend-line-not-editable{border-color:#fff}.legend-styling-div{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.legend-styling{width:50px}div[id^=GPlayerSwitcher-]{right:8px;top:8px}div[id^=GPlayerSwitcher-] [draggable]{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;user-select:none;-khtml-user-drag:element;-webkit-user-drag:element}div[id^=GPlayerSwitcher-] input[type=checkbox]+button+dialog{max-height:0}input[id^=GPshowLayersList-]{display:none}button[id^=GPshowLayersListPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowLayersListPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}.position>div[id^=GPlayerSwitcher-]>dialog[id^=GPlayersList]{position:absolute}.position>div[id^=GPlayerSwitcher-]>button[id^=GPshowLayersListPicto-]{float:unset}dialog[id^=GPlayersList]{float:left;position:relative}button[id^=GPshowLayersListPicto-]{float:right}dialog[id^=GPlayersList]{border-bottom-right-radius:0;opacity:0}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{height:auto;max-height:inherit;opacity:1}.GPlayerCounter{background:#fff;border-radius:100px;color:#000;display:inline-block;font-size:12px;left:15px;line-height:1;min-width:15px;padding:2px 0 1px;position:relative;text-align:center;top:-15px}.GPlayerSwitcher_layer{border-bottom:1px dotted #ccc;overflow:hidden;position:relative;top:0}dialog[id^=GPlayersList] .GPlayerSwitcher_layer:last-child{border-bottom:none}.GPlayerAdvancedTools{display:block;max-height:0;opacity:0;transition:max-height .5s ease-out 0s,opacity .5s ease-out 0s}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{opacity:1}[id^=GPlayerInfoPanel]{left:unset;right:100%}div[id^=GPlayerInfoContent]{max-height:200px;overflow-y:auto;padding-left:10px;padding-right:10px;position:relative}div[id^=GProute-]{left:10px;top:100px}button[id^=GPshowRoutePicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowRoutePicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GProutePanel-]{height:inherit;left:34px;position:absolute;top:0}button[id^=GProuteReset]:hover{opacity:1}form[id^=GProuteForm]>.GPlocationStageFlexInput{margin-top:5px}form[id^=GProuteForm]>.GPlocationStageFlexInputHidden{margin-top:0}form[id^=GProuteForm].GProuteFormMini .GPlocationStageFlexInput:first-child{margin-top:5px}label.GProuteOriginPointerImg[id*=GProuteOriginPointerImg]{border-bottom-right-radius:3px;border-right:1px solid #999;border-top-right-radius:3px;width:28px}input[id*=GProuteOriginPointer]+.GProuteOriginPointerImg{background-position:-1px -1px}input[id*=GProuteOriginPointer]:checked+.GProuteOriginPointerImg{background-position:-29px -1px}.GProuteStageRemove,div[id^=GProuteStageAdd]{border:none;cursor:pointer;width:28px}.GProuteFormMini{overflow:hidden;-webkit-transform:translateY(-5px);transform:translateY(-5px)}.GProuteFormMini .GPpanelFooter,.GProuteFormMini .GProuteStageRemove,.GProuteFormMini button[id^=GPshowRouteExclusionsPicto],.GProuteFormMini button[id^=GPshowRouteExclusions][aria-pressed=true]+div[id^=GProuteExclusions],.GProuteFormMini div[id^=GProuteModeChoice],.GProuteFormMini div[id^=GProuteStageAdd],.GProuteFormMini>:not(.selected){display:none}.GProuteStageRemove{background-position:-84px 0}div[id^=GProuteStageAdd]{background-position:-56px 0}div[id^=GProuteModeChoice]{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around;margin:15px 0}div[id^=GProuteTransportChoice]>.GProuteTransportChoice{display:inline-flex}button[id^=GPshowRouteExclusions]{border:unset;bottom:unset;position:absolute;right:0;transition:all .5s ease-out 0s}button[id^=GPshowRouteExclusions][aria-pressed=true]{transform:translateY(-100%) rotateX(180deg)}button[id^=GPshowRouteExclusions][aria-pressed=false]+div[id^=GProuteExclusions]{margin-bottom:0;max-height:0;opacity:0}button[id^=GPshowRouteExclusions][aria-pressed=true]+div[id^=GProuteExclusions]{display:block;margin-bottom:15px;max-height:76px;opacity:1}div[id^=GProuteExclusions]{overflow:hidden;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s,margin .3s ease-in-out .25s}div[id^=GProuteResultsPanel]{padding:15px}div[id^=GProuteResults-]{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;-webkit-justify-content:space-between;-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-align-items:center;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:10px}div[id^=GProuteResultsNew]:hover{opacity:1}[class*=GPlocationPoint]{position:relative}div[id^=GPlocationAutoCompleteResult]{background-color:var(--background-default-grey);border:1px solid var(--grey-900-175);border-top:none;left:0;max-height:140px;overflow-y:auto;top:45px}div[id^=GPlocationAutoCompleteList]{position:absolute;width:calc(100% - 56px);z-index:2}div[id^=GPisochron-]{left:10px;top:140px}button[id^=GPshowIsochronPicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowIsochronPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GPisochronPanel-]{height:inherit;left:34px;position:absolute;top:0;z-index:2}input[id^=GPisochronOriginPointer]+.GPisochronOriginPointerImg{background-position:-1px -1px}input[id^=GPisochronOriginPointer]:checked+.GPisochronOriginPointerImg{background-position:-29px -1px}div[id^=GPisochronChoice]{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex}.GPisochronFormMini{max-height:58px;overflow:hidden}.GPisochronFormMini .GPpanelFooter,.GPisochronFormMini .GPpanelFooter button[id^=GPisochronReset-],.GPisochronFormMini .GPpanelFooter input[id^=GPisochronSubmit-],.GPisochronFormMini [id^=GPisoExclusions-],.GPisochronFormMini [id^=GPisochronChoice-],.GPisochronFormMini [id^=GPisochronDirectionChoice-],.GPisochronFormMini [id^=GPisochronPointLabelP-],.GPisochronFormMini [id^=GPisochronTransportChoice-],.GPisochronFormMini [id^=GPisochronValueChron-],.GPisochronFormMini [id^=GPisochronValueChronLabelP-],.GPisochronFormMini button[id^=GPshowIsoExclusionsPicto-]{display:none}.GPisochronFormMini{max-height:78px}.GPisochronFormMini .GPelementShow{color:var(--grey-200-850)}div[id^=GPisochronTransportChoice]>div{display:inline-flex;gap:1rem}button[id^=GPshowIsoExclusions]{border:unset;bottom:unset;position:absolute;right:0;transform:translateY(-100%);transition:all .5s ease-out 0s}button[id^=GPshowIsoExclusions][aria-pressed=true]{transform:translateY(-100%) rotateX(180deg)}button[id^=GPshowIsoExclusions][aria-pressed=false]+div[id^=GPisoExclusions]{margin-bottom:0;max-height:0;opacity:0}button[id^=GPshowIsoExclusions][aria-pressed=true]+div[id^=GPisoExclusions]{display:block;margin-bottom:15px;max-height:76px;opacity:1}.GPisochronFormMini button[id^=GPshowIsoExclusions][aria-pressed=true]+div[id^=GPisoExclusions]{display:none}div[id^=GPisoExclusions]{overflow:hidden;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s,margin .3s ease-in-out .25s}button[id^=GPshowElevationPathPicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowElevationPathPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GPelevationPathPanelReduce]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAAAaCAYAAABb9hlrAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH4gEQEjITjE0MtwAABGJJREFUaN7tmU1oHGUYx//PZEvSLjHVBLVaerCXSgo5tAqxiqBSxcSLWqknFaNdaYjiwUMOVVGi2EORJg0xtgbx0FKVgmirRU17SUpjPsCVUhQtVOr6ES8mmpqdnwffhekw2dndbMK23T8MzMzzzsz7PP/3+ZjnlaqooooqrlhY7gSol3Rr7tLMTlfNs3gAJqnGncvMJMk3M7+Q5xOB8zsl9Ui6XtI/ktZXzVs6MpmMNTU1rZa0SdJNknLkSNI0MCrpTzPLFkSQmR0FspIGJb1UNXHpHjM3N9dUW1t7u6QHJW2V9KukPyQhqcEt/i8lHctms8Oe5/0WR5SAW4AfgWGgC1ixjEo9AwwAXj7Fgb1AZ6WSMzk56QGbgQPA98AUsBvYAKwCVgJrgV3AKeAccAi4f3x8vCbOSA8AB91xGEguIzlZ/sdgFEmOnF43xq9UkoBrgD7gZ+B13/c3u/uPAG8AbwEdkpTNZjcCLwJngE+AtYV8YEW+VbxESvVxKfa5xBokZ19oTF+lkTMzM+MB9wJngT0hHT8KzP2bkGwHcB54Ktb2wNtAb5EGbgAaFhOzXegKYhDwQp6TwzvLvYgK1CPpwtkZYEtI9iowCowBAyHZeuCEi1pr4j4yBBwscmK7gZ7FJtYFSOq7TMgx4A7gB6AvnU5bSF4H1LtjVVCWSqUMeN550eN59SuWIMf+HDAL3LwEJC0bOSPdCRvpTljwOiT3RroTdQvM3QPanYfcFiHvAj4GjgCvLWDHT4EX8hZnUQQBCRf6tkWMD8bW/WVaiVEkDZZKDmWCI6kmD0FtwNfAugXsetG96qsIeSPwfhRBXoxy10n6XFKXpEPAy7kEDtwl6eHA8CeA5nJ2N2LuxXrEEjiaX2a9YpHvv2ODpFOS7gl84BVHVFLSntAjNZLeXGRLZK+knRHipyUNFONFrT3zlDsExhjZJNVLuqGE16+W1BjX6rmk3JY06v56w9gmaUuufRFCO3C3mZ0oAzmDki4G7nXkytJC+lgj3Qlr7ZnHzIK5JW4V09ozz0h3Yo0zdJOk3yVlHOELkY6kaUnXSnoynU6PNTc3F7RAUqmUSWqX1CLpA0nZ2Bzkqo5ScbKEvBNZSucrwS+zMnsI+DcqB8WV2Uuh6Loix/eGPKdf0g4z880Ml//6A/IO520VhdnZ2b8lHXM2fTQkrg1Eq3AleJ/rzX0mKVNQiFtmTLjk67mw1umIyTVxAXY61+904eS7SiMomUz6wGlJxyU9BswARzzPG5P0oaSfXJ4+m2v1eJ63VdKzzgbHo0J3Ik9MPVfiXM8XVdqYvety3sYwOSGSuhyJ35pZfyX24qampv5qaWl5T9JKSdvN7CHgC0n7JR11dm0Edklqk3Sjy/UHJiYmLsSWfsCQpDoz264qSq5Gi9lu8H0/73ZDmKCTrpq4UI65SnrOzIavRqJyG3ae522KqHinnefEbtiFCWpzJXSmTD91h83sl6vdo7SILe8qqqiiiisY/wFFCbN/sRPwgwAAAABJRU5ErkJggg==);background-position:-50px;background-repeat:no-repeat}[id^=GPelevationPathPanel-]{left:32px;position:absolute;top:6px}button[id^=GPelevationPathPanelInfo],button[id^=GPelevationPathPanelReduce]{display:none}.tooltipInit{opacity:0}.tooltipFadeIn{opacity:1;transition:opacity .3s ease 0s,transform 50ms ease 0s,top 50ms ease 0s,left 50ms ease 0s}.tooltipFadeOut{opacity:0;transition:opacity .5s ease 0s}div[id^=GPtoolbox-measure-main]{display:inline-block;float:left;left:78px;position:absolute;top:8px;z-index:1}div[id^=GPtoolbox-measure-widget]{border-radius:2px;display:none;left:auto}div[id^=GPtoolbox-measure-widget]>div{bottom:auto;display:block;left:auto;position:relative;right:auto;top:auto}div[id^=GPtoolbox-measure-main]:hover button[id^=GPtoolbox-measure-button]{background-color:rgba(0,60,136,.7)} /*# sourceMappingURL=GpfExtOlLayerImport.css.map*/ \ No newline at end of file diff --git a/dist/modules/GpfExtOlLayerImport.js b/dist/modules/GpfExtOlLayerImport.js index babc27f4..781f9340 100644 --- a/dist/modules/GpfExtOlLayerImport.js +++ b/dist/modules/GpfExtOlLayerImport.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var e={4582:(e,t)=>{"use strict";function n(e,t){return void 0===t&&(t=Object),t&&"function"==typeof t.getOwnPropertyDescriptors&&(e=t.create(null,t.getOwnPropertyDescriptors(e))),t&&"function"==typeof t.freeze?t.freeze(e):e}function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var i=n({allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,formnovalidate:!0,hidden:!0,ismap:!0,itemscope:!0,loop:!0,multiple:!0,muted:!0,nomodule:!0,novalidate:!0,open:!0,playsinline:!0,readonly:!0,required:!0,reversed:!0,selected:!0});var o=n({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});var a=n({script:!1,style:!1,textarea:!0,title:!0});function s(e){return e===l.HTML}var l=n({HTML:"text/html",XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),c=Object.keys(l).map((function(e){return l[e]}));var u=n({HTML:"http://www.w3.org/1999/xhtml",SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});t.assign=function(e,t){if(null===e||"object"!=typeof e)throw new TypeError("target is not an object");for(var n in t)r(t,n)&&(e[n]=t[n]);return e},t.find=function(e,t,n){if(void 0===n&&(n=Array.prototype),e&&"function"==typeof n.find)return n.find.call(e,t);for(var i=0;i-1},t.MIME_TYPE=l,t.NAMESPACE=u},5752:(e,t,n)=>{"use strict";var r=n(4582),i=n(4722),o=n(2983),a=n(6559),s=n(4466),l=i.DOMImplementation,c=r.hasDefaultHTMLNamespace,u=r.isHTMLMimeType,p=r.isValidMimeType,d=r.MIME_TYPE,h=r.NAMESPACE,g=o.ParseError,m=s.XMLReader;function f(e){return e.replace(/\r[\n\u0085]/g,"\n").replace(/[\r\u0085\u2028]/g,"\n")}function y(e){if(e=e||{locator:!0},this.assign=e.assign||r.assign,this.domHandler=e.domHandler||v,this.onError=e.onError||e.errorHandler,e.errorHandler&&"function"!=typeof e.errorHandler)throw new TypeError("errorHandler object is no longer supported, switch to onError!");e.errorHandler&&e.errorHandler("warning","The `errorHandler` option has been deprecated, use `onError` instead!",this),this.normalizeLineEndings=e.normalizeLineEndings||f,this.locator=!!e.locator,this.xmlns=this.assign(Object.create(null),e.xmlns)}function v(e){var t=e||{};this.mimeType=t.mimeType||d.XML_APPLICATION,this.defaultNamespace=t.defaultNamespace||null,this.cdata=!1,this.currentElement=void 0,this.doc=void 0,this.locator=void 0,this.onError=t.onError}function C(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function I(e,t,n){return"string"==typeof e?e.substr(t,n):e.length>=t+n||t?new java.lang.String(e,t,n)+"":e}function A(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}y.prototype.parseFromString=function(e,t){if(!p(t))throw new TypeError('DOMParser.parseFromString: the provided mimeType "'+t+'" is not valid.');var n=this.assign(Object.create(null),this.xmlns),i=a.XML_ENTITIES,o=n[""]||null;c(t)?(i=a.HTML_ENTITIES,o=h.HTML):t===d.XML_SVG_IMAGE&&(o=h.SVG),n[""]=o,n.xml=n.xml||h.XML;var s=new this.domHandler({mimeType:t,defaultNamespace:o,onError:this.onError}),l=this.locator?{}:void 0;this.locator&&s.setDocumentLocator(l);var u=new m;return u.errorHandler=s,u.domBuilder=s,!r.isHTMLMimeType(t)&&"string"!=typeof e&&u.errorHandler.fatalError("source is not a string"),u.parse(this.normalizeLineEndings(String(e)),n,i),s.doc.documentElement||u.errorHandler.fatalError("missing root element"),s.doc},v.prototype={startDocument:function(){var e=new l;this.doc=u(this.mimeType)?e.createHTMLDocument(!1):e.createDocument(this.defaultNamespace,"")},startElement:function(e,t,n,r){var i=this.doc,o=i.createElementNS(e,n||t),a=r.length;A(this,o),this.currentElement=o,this.locator&&C(this.locator,o);for(var s=0;s{"use strict";var r=n(4582),i=r.find,o=r.hasDefaultHTMLNamespace,a=r.hasOwn,s=r.isHTMLMimeType,l=r.isHTMLRawTextElement,c=r.isHTMLVoidElement,u=r.MIME_TYPE,p=r.NAMESPACE,d=Symbol(),h=n(2983),g=h.DOMException,m=h.DOMExceptionName,f=n(2763);function y(e){if(e!==d)throw new TypeError("Illegal constructor")}function v(e){return""!==e}function C(e,t){return a(e,t)||(e[t]=!0),e}function I(e){if(!e)return[];var t=function(e){return e?e.split(/[\t\n\f\r ]+/).filter(v):[]}(e);return Object.keys(t.reduce(C,{}))}function A(e){if(!f.QName_exact.test(e))throw new g(g.INVALID_CHARACTER_ERR,'invalid character in qualified name "'+e+'"')}function b(e,t){A(t),e=e||null;var n=null,i=t;if(t.indexOf(":")>=0){var o=t.split(":");n=o[0],i=o[1]}if(null!==n&&null===e)throw new g(g.NAMESPACE_ERR,"prefix is non-null and namespace is null");if("xml"===n&&e!==r.NAMESPACE.XML)throw new g(g.NAMESPACE_ERR,'prefix is "xml" and namespace is not the XML namespace');if(("xmlns"===n||"xmlns"===t)&&e!==r.NAMESPACE.XMLNS)throw new g(g.NAMESPACE_ERR,'either qualifiedName or prefix is "xmlns" and namespace is not the XMLNS namespace');if(e===r.NAMESPACE.XMLNS&&"xmlns"!==n&&"xmlns"!==t)throw new g(g.NAMESPACE_ERR,'namespace is the XMLNS namespace and neither qualifiedName nor prefix is "xmlns"');return[e,n,i]}function E(e,t){for(var n in e)a(e,n)&&(t[n]=e[n])}function _(e,t){var n=e.prototype;if(!(n instanceof t)){function r(){}r.prototype=t.prototype,E(n,r=new r),e.prototype=n=r}n.constructor!=e&&("function"!=typeof e&&console.error("unknown Class:"+e),n.constructor=e)}var w={},P=w.ELEMENT_NODE=1,S=w.ATTRIBUTE_NODE=2,x=w.TEXT_NODE=3,T=w.CDATA_SECTION_NODE=4,k=w.ENTITY_REFERENCE_NODE=5,R=w.ENTITY_NODE=6,L=w.PROCESSING_INSTRUCTION_NODE=7,O=w.COMMENT_NODE=8,M=w.DOCUMENT_NODE=9,N=w.DOCUMENT_TYPE_NODE=10,D=w.DOCUMENT_FRAGMENT_NODE=11,G=w.NOTATION_NODE=12,U=r.freeze({DOCUMENT_POSITION_DISCONNECTED:1,DOCUMENT_POSITION_PRECEDING:2,DOCUMENT_POSITION_FOLLOWING:4,DOCUMENT_POSITION_CONTAINS:8,DOCUMENT_POSITION_CONTAINED_BY:16,DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:32});function B(e){for(var t=[];e.parentNode||e.ownerElement;)e=e.parentNode||e.ownerElement,t.unshift(e);return t}function F(e,t){if(t.length=0){for(var i=t.length-1;r<=i;)t[r]=t[++r];if(t.length=i,e){var o=e.ownerDocument;o&&ee(o,e,n),n.ownerElement=null}}}function Z(){}function K(e){y(e)}function J(e){return("<"==e?"<":">"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function Q(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(Q(e,t))return!0}while(e=e.nextSibling)}function $(e,t){y(e);var n=t||{};this.ownerDocument=this,this.contentType=n.contentType||u.XML_APPLICATION,this.type=s(this.contentType)?"html":"xml"}function ee(e,t,n,r){e&&e._inc++,n.namespaceURI===p.XMLNS&&delete t._nsMap[n.prefix?n.localName:""]}function te(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n&&!n.nextSibling)r[r.length++]=n;else{for(var i=t.firstChild,o=0;i;)r[o++]=i,i=i.nextSibling;r.length=o,delete r[r.length]}}}function ne(e,t){if(e!==t.parentNode)throw new g(g.NOT_FOUND_ERR,"child's parent is not parent");var n=t.previousSibling,r=t.nextSibling;return n?n.nextSibling=r:e.firstChild=r,r?r.previousSibling=n:e.lastChild=n,te(e.ownerDocument,e),t.parentNode=null,t.previousSibling=null,t.nextSibling=null,t}function re(e){return e&&e.nodeType===K.DOCUMENT_TYPE_NODE}function ie(e){return e&&e.nodeType===K.ELEMENT_NODE}function oe(e){return e&&e.nodeType===K.TEXT_NODE}function ae(e,t){var n=e.childNodes||[];if(i(n,ie)||re(t))return!1;var r=i(n,re);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function se(e,t){var n=e.childNodes||[];if(i(n,(function(e){return ie(e)&&e!==t})))return!1;var r=i(n,re);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function le(e,t,n){if(!function(e){return e&&(e.nodeType===K.DOCUMENT_NODE||e.nodeType===K.DOCUMENT_FRAGMENT_NODE||e.nodeType===K.ELEMENT_NODE)}(e))throw new g(g.HIERARCHY_REQUEST_ERR,"Unexpected parent node type "+e.nodeType);if(n&&n.parentNode!==e)throw new g(g.NOT_FOUND_ERR,"child not in parent");if(!function(e){return e&&(e.nodeType===K.CDATA_SECTION_NODE||e.nodeType===K.COMMENT_NODE||e.nodeType===K.DOCUMENT_FRAGMENT_NODE||e.nodeType===K.DOCUMENT_TYPE_NODE||e.nodeType===K.ELEMENT_NODE||e.nodeType===K.PROCESSING_INSTRUCTION_NODE||e.nodeType===K.TEXT_NODE)}(t)||re(t)&&e.nodeType!==K.DOCUMENT_NODE)throw new g(g.HIERARCHY_REQUEST_ERR,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function ce(e,t,n){var r=e.childNodes||[],o=t.childNodes||[];if(t.nodeType===K.DOCUMENT_FRAGMENT_NODE){var a=o.filter(ie);if(a.length>1||i(o,oe))throw new g(g.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===a.length&&!ae(e,n))throw new g(g.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(ie(t)&&!ae(e,n))throw new g(g.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(re(t)){if(i(r,re))throw new g(g.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var s=i(r,ie);if(n&&r.indexOf(s)1||i(o,oe))throw new g(g.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===a.length&&!se(e,n))throw new g(g.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(ie(t)&&!se(e,n))throw new g(g.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(re(t)){function l(e){return re(e)&&e!==n}if(i(r,l))throw new g(g.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var s=i(r,ie);if(n&&r.indexOf(s)=0;m--){if(""===(y=r[m]).prefix&&y.namespace===e.namespaceURI){h=y.namespace;break}}if(h!==e.namespaceURI)for(m=r.length-1;m>=0;m--){var y;if((y=r[m]).namespace===e.namespaceURI){y.prefix&&(d=y.prefix+":"+u);break}}}t.push("<",d);for(var v=0;v");else{if(t.push(">"),i&&l(u))for(;s;)s.data?t.push(s.data):xe(s,t,n,r.slice()),s=s.nextSibling;else for(;s;)xe(s,t,n,r.slice()),s=s.nextSibling;t.push("")}return;case M:case D:for(s=e.firstChild;s;)xe(s,t,n,r.slice()),s=s.nextSibling;return;case S:return Se(t,e.name,e.value);case x:return t.push(e.data.replace(/[<&>]/g,J));case T:return t.push(f.CDATA_START,e.data,f.CDATA_END);case O:return t.push(f.COMMENT_START,e.data,f.COMMENT_END);case N:var E=e.publicId,_=e.systemId;return t.push(f.DOCTYPE_DECL_START," ",e.name),E?(t.push(" ",f.PUBLIC," ",E),_&&"."!==_&&t.push(" ",_)):_&&"."!==_&&t.push(" ",f.SYSTEM," ",_),e.internalSubset&&t.push(" [",e.internalSubset,"]"),void t.push(">");case L:return t.push("");case k:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function Te(e,t,n){var r;switch(t.nodeType){case P:(r=t.cloneNode(!1)).ownerDocument=e;case D:break;case S:n=!0}if(r||(r=t.cloneNode(!1)),r.ownerDocument=e,r.parentNode=null,n)for(var i=t.firstChild;i;)r.appendChild(Te(e,i,n)),i=i.nextSibling;return r}function ke(e,t,n){var r=new t.constructor(d);for(var i in t)if(a(t,i)){var o=t[i];"object"!=typeof o&&o!=r[i]&&(r[i]=o)}switch(t.childNodes&&(r.childNodes=new z),r.ownerDocument=e,r.nodeType){case P:var s=t.attributes,l=r.attributes=new q,c=s.length;l._ownerElement=r;for(var u=0;u=0&&ej(t.ownerDocument)?U.DOCUMENT_POSITION_FOLLOWING:U.DOCUMENT_POSITION_PRECEDING);var s=B(t),l=B(n);if(!r&&l.indexOf(t)>=0||i&&t===n)return U.DOCUMENT_POSITION_CONTAINS+U.DOCUMENT_POSITION_PRECEDING;if(!i&&s.indexOf(n)>=0||r&&t===n)return U.DOCUMENT_POSITION_CONTAINED_BY+U.DOCUMENT_POSITION_FOLLOWING;var c=F(l,s);for(var u in c.childNodes){var p=c.childNodes[u];if(p===n)return U.DOCUMENT_POSITION_FOLLOWING;if(p===t)return U.DOCUMENT_POSITION_PRECEDING;if(l.indexOf(p)>=0)return U.DOCUMENT_POSITION_FOLLOWING;if(s.indexOf(p)>=0)return U.DOCUMENT_POSITION_PRECEDING}return 0}},E(w,K),E(w,K.prototype),E(U,K),E(U,K.prototype),$.prototype={implementation:null,nodeName:"#document",nodeType:M,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType===D){for(var n=e.firstChild;n;){var r=n.nextSibling;this.insertBefore(n,t),n=r}return e}return pe(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===P&&(this.documentElement=e),e},removeChild:function(e){var t=ne(this,e);return t===this.documentElement&&(this.documentElement=null),t},replaceChild:function(e,t){pe(this,e,t,ue),e.ownerDocument=this,t&&this.removeChild(t),ie(e)&&(this.documentElement=e)},importNode:function(e,t){return Te(this,e,t)},getElementById:function(e){var t=null;return Q(this.documentElement,(function(n){if(n.nodeType==P&&n.getAttribute("id")==e)return t=n,!0})),t},createElement:function(e){var t=new de(d);return t.ownerDocument=this,"html"===this.type&&(e=e.toLowerCase()),o(this.contentType)&&(t.namespaceURI=p.HTML),t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new z,(t.attributes=new q)._ownerElement=t,t},createDocumentFragment:function(){var e=new be(d);return e.ownerDocument=this,e.childNodes=new z,e},createTextNode:function(e){var t=new me(d);return t.ownerDocument=this,t.childNodes=new z,t.appendData(e),t},createComment:function(e){var t=new fe(d);return t.ownerDocument=this,t.childNodes=new z,t.appendData(e),t},createCDATASection:function(e){var t=new ye(d);return t.ownerDocument=this,t.childNodes=new z,t.appendData(e),t},createProcessingInstruction:function(e,t){var n=new Ee(d);return n.ownerDocument=this,n.childNodes=new z,n.nodeName=n.target=e,n.nodeValue=n.data=t,n},createAttribute:function(e){if(!f.QName_exact.test(e))throw new g(g.INVALID_CHARACTER_ERR,'invalid character in name "'+e+'"');return"html"===this.type&&(e=e.toLowerCase()),this._createAttribute(e)},_createAttribute:function(e){var t=new he(d);return t.ownerDocument=this,t.childNodes=new z,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){if(!f.Name.test(e))throw new g(g.INVALID_CHARACTER_ERR,'not a valid xml name "'+e+'"');if("html"===this.type)throw new g("document is an html document",m.NotSupportedError);var t=new Ae(d);return t.ownerDocument=this,t.childNodes=new z,t.nodeName=e,t},createElementNS:function(e,t){var n=b(e,t),r=new de(d),i=r.attributes=new q;return r.childNodes=new z,r.ownerDocument=this,r.nodeName=t,r.tagName=t,r.namespaceURI=n[0],r.prefix=n[1],r.localName=n[2],i._ownerElement=r,r},createAttributeNS:function(e,t){var n=b(e,t),r=new he(d);return r.ownerDocument=this,r.childNodes=new z,r.nodeName=t,r.name=t,r.specified=!0,r.namespaceURI=n[0],r.prefix=n[1],r.localName=n[2],r}},_($,K),de.prototype={nodeType:P,attributes:null,getQualifiedName:function(){return this.prefix?this.prefix+":"+this.localName:this.localName},_isInHTMLDocumentAndNamespace:function(){return"html"===this.ownerDocument.type&&this.namespaceURI===p.HTML},hasAttribute:function(e){return!!this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t?t.value:null},getAttributeNode:function(e){return this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase()),this.attributes.getNamedItem(e)},setAttribute:function(e,t){this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase());var n=this.getAttributeNode(e);n?n.value=n.nodeValue=""+t:((n=this.ownerDocument._createAttribute(e)).value=n.nodeValue=""+t,this.setAttributeNode(n))},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);n&&this.removeAttributeNode(n)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);return n?n.value:null},setAttributeNS:function(e,t,n){var r=b(e,t)[2],i=this.getAttributeNodeNS(e,r);i?i.value=i.nodeValue=""+n:((i=this.ownerDocument.createAttributeNS(e,t)).value=i.nodeValue=""+n,this.setAttributeNode(i))},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByClassName:function(e){var t=I(e);return new H(this,(function(n){var r=[];return t.length>0&&Q(n,(function(i){if(i!==n&&i.nodeType===P){var o=i.getAttribute("class");if(o){var a=e===o;if(!a){var s=I(o);a=t.every((l=s,function(e){return l&&-1!==l.indexOf(e)}))}a&&r.push(i)}}var l})),r}))},getElementsByTagName:function(e){var t="html"===(this.nodeType===M?this:this.ownerDocument).type,n=e.toLowerCase();return new H(this,(function(r){var i=[];return Q(r,(function(o){o!==r&&o.nodeType===P&&(("*"===e||o.getQualifiedName()===(t&&o.namespaceURI===p.HTML?n:e))&&i.push(o))})),i}))},getElementsByTagNameNS:function(e,t){return new H(this,(function(n){var r=[];return Q(n,(function(i){i===n||i.nodeType!==P||"*"!==e&&i.namespaceURI!==e||"*"!==t&&i.localName!=t||r.push(i)})),r}))}},$.prototype.getElementsByClassName=de.prototype.getElementsByClassName,$.prototype.getElementsByTagName=de.prototype.getElementsByTagName,$.prototype.getElementsByTagNameNS=de.prototype.getElementsByTagNameNS,_(de,K),he.prototype.nodeType=S,_(he,K),ge.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,n){n=this.data.substring(0,e)+n+this.data.substring(e+t),this.nodeValue=this.data=n,this.length=n.length}},_(ge,K),me.prototype={nodeName:"#text",nodeType:x,splitText:function(e){var t=this.data,n=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var r=this.ownerDocument.createTextNode(n);return this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling),r}},_(me,ge),fe.prototype={nodeName:"#comment",nodeType:O},_(fe,ge),ye.prototype={nodeName:"#cdata-section",nodeType:T},_(ye,me),ve.prototype.nodeType=N,_(ve,K),Ce.prototype.nodeType=G,_(Ce,K),Ie.prototype.nodeType=R,_(Ie,K),Ae.prototype.nodeType=k,_(Ae,K),be.prototype.nodeName="#document-fragment",be.prototype.nodeType=D,_(be,K),Ee.prototype.nodeType=L,_(Ee,ge),_e.prototype.serializeToString=function(e,t){return we.call(e,t)},K.prototype.toString=we;try{if(Object.defineProperty){function Le(e){switch(e.nodeType){case P:case D:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(Le(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(H.prototype,"length",{get:function(){return V(this),this.$$length}}),Object.defineProperty(K.prototype,"textContent",{get:function(){return Le(this)},set:function(e){switch(this.nodeType){case P:case D:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),Re=function(e,t,n){e["$$"+t]=n}}}catch(Oe){}t._updateLiveList=V,t.Attr=he,t.CDATASection=ye,t.CharacterData=ge,t.Comment=fe,t.Document=$,t.DocumentFragment=be,t.DocumentType=ve,t.DOMImplementation=Z,t.Element=de,t.Entity=Ie,t.EntityReference=Ae,t.LiveNodeList=H,t.NamedNodeMap=q,t.Node=K,t.NodeList=z,t.Notation=Ce,t.Text=me,t.ProcessingInstruction=Ee,t.XMLSerializer=_e},6559:(e,t,n)=>{"use strict";var r=n(4582).freeze;t.XML_ENTITIES=r({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),t.HTML_ENTITIES=r({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),t.entityMap=t.HTML_ENTITIES},2983:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(Error.prototype,{constructor:{value:e},name:{value:e.name,enumerable:!0,writable:t}})}var i=n(4582).freeze({Error:"Error",IndexSizeError:"IndexSizeError",DomstringSizeError:"DomstringSizeError",HierarchyRequestError:"HierarchyRequestError",WrongDocumentError:"WrongDocumentError",InvalidCharacterError:"InvalidCharacterError",NoDataAllowedError:"NoDataAllowedError",NoModificationAllowedError:"NoModificationAllowedError",NotFoundError:"NotFoundError",NotSupportedError:"NotSupportedError",InUseAttributeError:"InUseAttributeError",InvalidStateError:"InvalidStateError",SyntaxError:"SyntaxError",InvalidModificationError:"InvalidModificationError",NamespaceError:"NamespaceError",InvalidAccessError:"InvalidAccessError",ValidationError:"ValidationError",TypeMismatchError:"TypeMismatchError",SecurityError:"SecurityError",NetworkError:"NetworkError",AbortError:"AbortError",URLMismatchError:"URLMismatchError",QuotaExceededError:"QuotaExceededError",TimeoutError:"TimeoutError",InvalidNodeTypeError:"InvalidNodeTypeError",DataCloneError:"DataCloneError",EncodingError:"EncodingError",NotReadableError:"NotReadableError",UnknownError:"UnknownError",ConstraintError:"ConstraintError",DataError:"DataError",TransactionInactiveError:"TransactionInactiveError",ReadOnlyError:"ReadOnlyError",VersionError:"VersionError",OperationError:"OperationError",NotAllowedError:"NotAllowedError",OptOutError:"OptOutError"}),o=Object.keys(i);function a(e){return"number"==typeof e&&e>=1&&e<=25}function s(e,t){var n;a(e)?(this.name=o[e],this.message=t||""):(this.message=e,this.name="string"==typeof(n=t)&&n.substring(n.length-i.Error.length)===i.Error?t:i.Error),Error.captureStackTrace&&Error.captureStackTrace(this,s)}r(s,!0),Object.defineProperties(s.prototype,{code:{enumerable:!0,get:function(){var e=o.indexOf(this.name);return a(e)?e:0}}});for(var l={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25},c=Object.entries(l),u=0;u{"use strict";function n(e){try{"function"!=typeof e&&(e=RegExp);var t=new e("𝌆","u").exec("𝌆");return!!t&&2===t[0].length}catch(e){}return!1}var r=n();function i(e){if("["!==e.source[0])throw new Error(e+" can not be used with chars");return e.source.slice(1,e.source.lastIndexOf("]"))}function o(e,t){if("["!==e.source[0])throw new Error("/"+e.source+"/ can not be used with chars_without");if(!t||"string"!=typeof t)throw new Error(JSON.stringify(t)+" is not a valid search");if(-1===e.source.indexOf(t))throw new Error('"'+t+'" is not is /'+e.source+"/");if("-"===t&&1!==e.source.indexOf(t))throw new Error('"'+t+'" is not at the first postion of /'+e.source+"/");return new RegExp(e.source.replace(t,""),r?"u":"")}function a(e){var t=this;return new RegExp(Array.prototype.slice.call(arguments).map((function(e){var n="string"==typeof e;if(n&&void 0===t&&"|"===e)throw new Error("use regg instead of reg to wrap expressions with `|`!");return n?e:e.source})).join(""),r?"mu":"m")}function s(e){if(0===arguments.length)throw new Error("no parameters provided");return a.apply(s,["(?:"].concat(Array.prototype.slice.call(arguments),[")"]))}var l=/[-\x09\x0A\x0D\x20-\x2C\x2E-\uD7FF\uE000-\uFFFD]/;r&&(l=a("[",i(l),"\\u{10000}-\\u{10FFFF}","]"));var c=/[\x20\x09\x0D\x0A]/,u=i(c),p=a(c,"+"),d=a(c,"*"),h=/[:_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;r&&(h=a("[",i(h),"\\u{10000}-\\u{10FFFF}","]"));var g=a("[",i(h),i(/[-.0-9\xB7]/),i(/[\u0300-\u036F\u203F-\u2040]/),"]"),m=a(h,g,"*"),f=a(g,"+"),y=a("&",m,";"),v=s(/&#[0-9]+;|&#x[0-9a-fA-F]+;/),C=s(y,"|",v),I=a("%",m,";"),A=s(a('"',s(/[^%&"]/,"|",I,"|",C),"*",'"'),"|",a("'",s(/[^%&']/,"|",I,"|",C),"*","'")),b=s('"',s(/[^<&"]/,"|",C),"*",'"',"|","'",s(/[^<&']/,"|",C),"*","'"),E=a(o(h,":"),o(g,":"),"*"),_=a(E,s(":",E),"?"),w=a("^",_,"$"),P=a("(",_,")"),S=s(/"[^"]*"|'[^']*'/),x=a(/^<\?/,"(",m,")",s(p,"(",l,"*?)"),"?",/\?>/),T=/[\x20\x0D\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/,k=s('"',T,'*"',"|","'",o(T,"'"),"*'"),R="\x3c!--",L=a(R,s(o(l,"-"),"|",a("-",o(l,"-"))),"*","--\x3e"),O="#PCDATA",M=s(a(/\(/,d,O,s(d,/\|/,d,_),"*",d,/\)\*/),"|",a(/\(/,d,O,d,/\)/)),N=s("EMPTY","|","ANY","|",M,"|",a(/\([^>]+\)/,/[?*+]?/)),D=a(""),G=a("NOTATION",p,/\(/,d,m,s(d,/\|/,d,m),"*",d,/\)/),U=a(/\(/,d,f,s(d,/\|/,d,f),"*",d,/\)/),B=s(G,"|",U),F=s(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/,"|",B),j=s(/#REQUIRED|#IMPLIED/,"|",s(s("#FIXED",p),"?",b)),z=a(""),H="SYSTEM",V="PUBLIC",q=s(s(H,p,S),"|",s(V,p,k,p,S)),W=a("^",s(s(H,p,"(?",S,")"),"|",s(V,p,"(?",k,")",p,"(?",S,")"))),Y=s(p,"NDATA",p,m),X=""),K=s(A,"|",q),J=s(Z,"|",a(X,p,"%",p,m,p,K,d,">")),Q=a(V,p,k),$=a(""),ee=a(d,"=",d),te=/1[.]\d+/,ne=a(p,"version",ee,s("'",te,"'","|",'"',te,'"')),re=/[A-Za-z][-A-Za-z0-9._]*/,ie=a(/^<\?xml/,ne,s(p,"encoding",ee,s('"',re,'"',"|","'",re,"'")),"?",s(p,"standalone",ee,s("'",s("yes","|","no"),"'","|",'"',s("yes","|","no"),'"')),"?",d,/\?>/),oe=a(l,"*?",/\]\]>/),ae=a(/",t.CDSect=ae,t.Char=l,t.Comment=L,t.COMMENT_START=R,t.COMMENT_END="--\x3e",t.DOCTYPE_DECL_START="{"use strict";var r=n(4582);r.assign,r.hasDefaultHTMLNamespace,r.isHTMLMimeType,r.isValidMimeType,r.MIME_TYPE,r.NAMESPACE;var i=n(2983);i.DOMException,i.DOMExceptionName,i.ExceptionCode,i.ParseError;var o=n(4722);o.Attr,o.CDATASection,o.CharacterData,o.Comment,o.Document,o.DocumentFragment,o.DocumentType,o.DOMImplementation,o.Element,o.Entity,o.EntityReference,o.LiveNodeList,o.NamedNodeMap,o.Node,o.NodeList,o.Notation,o.ProcessingInstruction,o.Text,o.XMLSerializer;var a=n(5752);t.S4=a.DOMParser,a.onErrorStopParsing,a.onWarningStopParsing},4466:(e,t,n)=>{"use strict";var r=n(4582),i=n(2763),o=n(2983),a=r.isHTMLEscapableRawTextElement,s=r.isHTMLMimeType,l=r.isHTMLRawTextElement,c=r.hasOwn,u=r.NAMESPACE,p=o.ParseError,d=o.DOMException;function h(){}h.prototype={parse:function(e,t,n){var o=this.domBuilder;o.startDocument(),C(t,t=Object.create(null)),function(e,t,n,o,a){var l=s(o.mimeType);e.indexOf(i.UNICODE_REPLACEMENT_CHARACTER)>=0&&a.warning("Unicode replacement character detected, source encoding issues?");function u(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}function h(e){var t=";"===e[e.length-1]?e:e+";";if(!l&&t!==e)return a.error("EntityRef: expecting ;"),e;var r=i.Reference.exec(t);if(!r||r[0].length!==t.length)return a.error("entity not matching Reference production: "+e),e;var o=t.slice(1,-1);return c(n,o)?n[o]:"#"===o.charAt(0)?u(parseInt(o.substr(1).replace("x","0x"))):(a.error("entity not found:"+e),e)}function C(t){if(t>k){var n=e.substring(k,t).replace(g,h);S&&I(k),o.characters(n,0,t-k),k=t}}function I(t,n){for(;t>=w&&(n=P.exec(e));)_=n.index,w=_+n[0].length,S.lineNumber++;S.columnNumber=t-_+1}var _=0,w=0,P=/.*(?:\r\n?|\n)|.*$/g,S=o.locator,x=[{currentNSMap:t}],T=[],k=0;for(;;){try{var R=e.indexOf("<",k);if(R<0){if(!l&&T.length>0)return a.fatalError("unclosed xml tag(s): "+T.join(", "));if(!e.substring(k).match(/^\s*$/)){var L=o.doc,O=L.createTextNode(e.substr(k));if(L.documentElement)return a.error("Extra content at the end of the document");L.appendChild(O),o.currentElement=O}return}if(R>k){var M=e.substring(k,R);l||0!==T.length||(M=M.replace(new RegExp(i.S_OPT.source,"g"),""))&&a.error("Unexpected content outside root element: '"+M+"'"),C(R)}switch(e.charAt(R+1)){case"/":var N=e.indexOf(">",R+2),D=e.substring(R+2,N>0?N:void 0);if(!D)return a.fatalError("end tag name missing");var G=N>0&&i.reg("^",i.QName_group,i.S_OPT,"$").exec(D);if(!G)return a.fatalError('end tag name contains invalid characters: "'+D+'"');if(!o.currentElement&&!o.doc.documentElement)return;var U=T[T.length-1]||o.currentElement.tagName||o.doc.documentElement.tagName||"";if(U!==G[1]){var B=G[1].toLowerCase();if(!l||U.toLowerCase()!==B)return a.fatalError('Opening and ending tag mismatch: "'+U+'" != "'+D+'"')}var F=x.pop();T.pop();var j=F.localNSMap;if(o.endElement(F.uri,F.localName,U),j)for(var z in j)c(j,z)&&o.endPrefixMapping(z);N++;break;case"?":S&&I(R),N=b(e,R,o,a);break;case"!":S&&I(R),N=A(e,R,o,a,l);break;default:S&&I(R);var H=new E,V=x[x.length-1].currentNSMap,q=(N=f(e,R,H,V,h,a,l),H.length);if(H.closed||(l&&r.isHTMLVoidElement(H.tagName)?H.closed=!0:T.push(H.tagName)),S&&q){for(var W=m(S,{}),Y=0;Yk?k=N:C(Math.max(R,k)+1)}}(e,t,n,o,this.errorHandler),o.endDocument()}};var g=/&#?\w+;?/g;function m(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function f(e,t,n,r,i,o,a){function s(e,t,r){return c(n.attributeNames,e)?o.fatalError("Attribute "+e+" redefined"):!a&&t.indexOf("<")>=0?o.fatalError("Unescaped '<' not allowed in attributes values"):void n.addValue(e,t.replace(/[\t\n\r]/g," ").replace(g,i),r)}for(var l,u=++t,p=0;;){var d=e.charAt(u);switch(d){case"=":if(1===p)l=e.slice(t,u),p=3;else{if(2!==p)throw new Error("attribute equal must after attrName");p=3}break;case"'":case'"':if(3===p||1===p){if(1===p&&(o.warning('attribute value must after "="'),l=e.slice(t,u)),t=u+1,!((u=e.indexOf(d,t))>0))throw new Error("attribute value no end '"+d+"' match");s(l,h=e.slice(t,u),t-1),p=5}else{if(4!=p)throw new Error('attribute value must after "="');s(l,h=e.slice(t,u),t),o.warning('attribute "'+l+'" missed start quot('+d+")!!"),t=u+1,p=5}break;case"/":switch(p){case 0:n.setTagName(e.slice(t,u));case 5:case 6:case 7:p=7,n.closed=!0;case 4:case 1:break;case 2:n.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return o.error("unexpected end of input"),0==p&&n.setTagName(e.slice(t,u)),u;case">":switch(p){case 0:n.setTagName(e.slice(t,u));case 5:case 6:case 7:break;case 4:case 1:"/"===(h=e.slice(t,u)).slice(-1)&&(n.closed=!0,h=h.slice(0,-1));case 2:2===p&&(h=l),4==p?(o.warning('attribute "'+h+'" missed quot(")!'),s(l,h,t)):(a||o.warning('attribute "'+h+'" missed value!! "'+h+'" instead!!'),s(h,h,t));break;case 3:if(!a)return o.fatalError("AttValue: ' or \" expected")}return u;case"€":d=" ";default:if(d<=" ")switch(p){case 0:n.setTagName(e.slice(t,u)),p=6;break;case 1:l=e.slice(t,u),p=2;break;case 4:var h=e.slice(t,u);o.warning('attribute "'+h+'" missed quot(")!!'),s(l,h,t);case 5:p=6}else switch(p){case 2:a||o.warning('attribute "'+l+'" missed value!! "'+l+'" instead2!!'),s(l,l,t),t=u,p=1;break;case 5:o.warning('attribute space is required"'+l+'"!!');case 6:p=1,t=u;break;case 3:p=4,t=u;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}u++}}function y(e,t,n){for(var r=e.tagName,i=null,o=e.length;o--;){var a=e[o],s=a.qName,l=a.value;if((g=s.indexOf(":"))>0)var p=a.prefix=s.slice(0,g),d=s.slice(g+1),h="xmlns"===p&&d;else d=s,p=null,h="xmlns"===s&&"";a.localName=d,!1!==h&&(null==i&&(i=Object.create(null),C(n,n=Object.create(null))),n[h]=i[h]=l,a.uri=u.XMLNS,t.startPrefixMapping(h,l))}for(o=e.length;o--;)(a=e[o]).prefix&&("xml"===a.prefix&&(a.uri=u.XML),"xmlns"!==a.prefix&&(a.uri=n[a.prefix]));var g;(g=r.indexOf(":"))>0?(p=e.prefix=r.slice(0,g),d=e.localName=r.slice(g+1)):(p=null,d=e.localName=r);var m=e.uri=n[p||""];if(t.startElement(m,d,r,e),!e.closed)return e.currentNSMap=n,e.localNSMap=i,!0;if(t.endElement(m,d,r),i)for(p in i)c(i,p)&&t.endPrefixMapping(p)}function v(e,t,n,r,i){var o=a(n);if(o||l(n)){var s=e.indexOf("",t),c=e.substring(t+1,s);return o&&(c=c.replace(g,r)),i.characters(c,0,c.length),s}return t+1}function C(e,t){for(var n in e)c(e,n)&&(t[n]=e[n])}function I(e,t){var n=t;function r(t){return t=t||0,e.charAt(n+t)}function o(e){n+=e=e||1}function a(){return e.substring(n)}return{char:r,getIndex:function(){return n},getMatch:function(e){var t=i.reg("^",e).exec(a());return t?(o(t[0].length),t[0]):null},getSource:function(){return e},skip:o,skipBlanks:function(){for(var t=0;n"!==a.char()?r.fatalError("doctype not terminated with > at position "+a.getIndex()):(a.skip(1),n.startDTD(c.name,c.publicId,c.systemId,c.internalSubset),n.endDTD(),a.getIndex());default:return r.fatalError('Not well-formed XML starting with "0)return r.fatalError("processing instruction at position "+t+" is an xml declaration which is only at the start of the document");if(!i.XMLDecl.test(e.substring(t)))return r.fatalError("xml declaration is not well-formed")}return n.processingInstruction(o[1],o[2]),t+o[0].length}function E(){this.attributeNames=Object.create(null)}E.prototype={setTagName:function(e){if(!i.QName_exact.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,n){if(!i.QName_exact.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:n}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=h,t.parseUtils=I,t.parseDoctypeCommentOrCData=A},562:(e,t,n)=>{"use strict";n.d(t,{A:()=>y});var r=n(7392),i=n.n(r),o=n(2940);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function s(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function l(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){for(var n=0;n{"use strict";n.d(t,{default:()=>ne});var r=n(3110),i=n.n(r),o=n(2536),a=n(6736),s=n(5844);const l={onloaded:"editor:onloaded",layer:{onclickvisibility:"editor:layer:onclickvisibility",onclickclone:"editor:layer:onclickclone",onclickremove:"editor:layer:onclickremove"},legend:{onclickedition:"editor:legend:onclickedition",onchangevalue:"editor:legend:onchangevalue"},group:{oncollapse:"editor:group:oncollapse"},style:{oneditjson:"editor:style:oneditjson",scale:{onchangemin:"editor:style:scale:onchangemin",onchangemax:"editor:style:scale:onchangemax"}},filter:{oneditjson:"editor:filter:oneditjson"},themes:{onclickimage:"editor:themes:onclickimage",onclicktitle:"editor:themes:onclicktitle"},search:{onsubmit:"editor:search:onsubmit",onautocomplete:"editor:search:onautocomplete"}};function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}function u(e,t){for(var n=0;n/g,">")).replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)/g,(function(e){var t="gp-json-number";return/^"/.test(e)?t=/:$/.test(e)?"gp-json-key":"gp-json-string":/true|false/.test(e)?t="gp-json-boolean":/null/.test(e)&&(t="gp-json-null"),""+e+""}))}},{key:"add",value:function(){if(!this.options.target){if(!document.getElementById(this.name.target)){var e=document.createElement("div");e.id=this.name.target,(document.documentElement||document.getElementsByTagName("body")[0]||document.getElementsByTagName("head")[0]).appendChild(e)}this.options.target=document.getElementById(this.name.target)}return this.container&&this.options.target.appendChild(this.container),this}},{key:"display",value:function(e){return d.trace("display()",e),void 0!==e&&(this.container.style.display=e?"flex":"none"),"flex"===this.container.style.display}},{key:"getContainer",value:function(){return this.container}},{key:"onEditJsonStyleMapBox",value:function(e){d.trace("onEditJsonStyleMapBox",e),e.editorID=this.id,e.data=this.options,i().dispatch(l.style.oneditjson,e)}},{key:"onChangeStyleScaleMinMapBox",value:function(e){d.trace("onChangeStyleScaleMinMapBox",e),e.editorID=this.id,e.data=this.options,i().dispatch(l.style.scale.onchangemin,e)}},{key:"onChangeStyleScaleMaxMapBox",value:function(e){d.trace("onChangeStyleScaleMaxMapBox",e),e.editorID=this.id,e.data=this.options,i().dispatch(l.style.scale.onchangemax,e)}}],t&&u(e.prototype,t),n&&u(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n}();const g=h;function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function f(e,t){for(var n=0;n T \")",n.style.background=r.replace("%color%",0===t.color.indexOf("rgb")?t.color:S.A.hexToRgba(t.color,1)).replace("%opacity%",t.opacity||1).replace("%style%","font-size: 5em;font-weight: bold;");break;case"icon":t.image?(r="".replace("%x%",this.options.sprites.json[t.image].x).replace("%y%",this.options.sprites.json[t.image].y).replace(/%w%/g,this.options.sprites.json[t.image].width).replace(/%h%/g,this.options.sprites.json[t.image].height).replace("%W%",this.options.sprites.size.w).replace("%H%",this.options.sprites.size.h).replace("%URL%",this.options.sprites.url),n.innerHTML=r):(r="url(\"data:image/svg+xml;utf8,\")",n.style.background=r.replace("%color%",0===t.color.indexOf("rgb")?t.color:S.A.hexToRgba(t.color,1)).replace("%style%","fill: transparent;stroke-width: 10;"));break;case"line":var i=Array.isArray(t.dasharray)?t.dasharray.join(" "):0;r="url(\"data:image/svg+xml;utf8,\")",n.style.background=r.replace("%color%",0===t.color.indexOf("rgb")?t.color:S.A.hexToRgba(t.color,1)).replace("%stroke-opacity%",t.opacity||1).replace("%stroke-dasharray%",i).replace("%stroke-width%",3*(t.width||0));break;case"circle":var o=t["stroke-color"]||"#FFFFFF";r="url(\"data:image/svg+xml;utf8,\")",n.style.background=r.replace("%color%",0===t.color.indexOf("rgb")?t.color:S.A.hexToRgba(t.color,1)).replace("%opacity%",t.opacity||1).replace("%stroke-color%",0===o.indexOf("rgb")?o:S.A.hexToRgba(o,1)).replace("%stroke-opacity%",t["stroke-opacity"]||1).replace("%stroke-width%",3*(t["stroke-width"]||0));break;case"background":case"fill":if(t.pattern)r="".replace("%x%",this.options.sprites.json[t.pattern].x).replace("%y%",this.options.sprites.json[t.pattern].y).replace(/%w%/g,this.options.sprites.json[t.pattern].width).replace(/%h%/g,this.options.sprites.json[t.pattern].height).replace("%W%",this.options.sprites.size.w).replace("%H%",this.options.sprites.size.h).replace("%URL%",this.options.sprites.url),n.innerHTML=r;else{var a=t["outline-color"]||"#FFFFFF";r="url(\"data:image/svg+xml;utf8,\")",n.style.background=r.replace("%color%",0===t.color.indexOf("rgb")?t.color:S.A.hexToRgba(t.color,1)).replace("%opacity%",t.opacity||1).replace("%stroke-color%",0===a.indexOf("rgb")?a:S.A.hexToRgba(a,1))}break;default:return R.warn("type not found, no thumbnail..."),!1}return!0}},{key:"_getValue",value:function(e){var t=null;if("string"==typeof e)t=e;else if("number"==typeof e)t=e;else if(Array.isArray(e)){var n=!0;e.forEach((function(e){"number"!=typeof e&&(n=!1)})),n&&(t=e)}else"object"===x(e)?(t=null,"stops"in e&&(e.stops.sort((function(e,t){var n=e[0],r=t[0];return n>r?-1:n1?1:0;if(o){var a=document.createElement("hr");a.className=this.name.sep,e.appendChild(a)}if(this.options.tools.title){var s=document.createElement("div");s.id=this.name.titleLayersID+this.id,s.className=this.name.titleLayers,s.innerHTML=o?"Liste des 'couches' ("+r+")":"Liste des 'couches'",e.appendChild(s)}}var c=this.mapbox.layers.slice();if(c.forEach((function(e,t){var n=e.metadata;n?n["geoportail:order"]=t:e.metadata={"geoportail:order":t}})),this.options.tools.sort){var u=this.options.tools.sortBy,p=this.options.tools.sortOrder;c.sort((function(e,t){var n=0;if(e.metadata&&e.metadata["geoportail:group"]&&t.metadata&&t.metadata["geoportail:group"]){var r,i=null;i=e.metadata["geoportail:group"],r=t.metadata["geoportail:group"],n=i.localeCompare(r)}else switch(u){case"geom":n="asc"===p?e.type.localeCompare(t.type)||e.id.localeCompare(t.id):t.type.localeCompare(e.type)||t.id.localeCompare(e.id);break;case"class":n="asc"===p?e["source-layer"].localeCompare(t["source-layer"])||e.id.localeCompare(t.id):t["source-layer"].localeCompare(e["source-layer"])||t.id.localeCompare(e.id);break;default:n="asc"===p?e.id.localeCompare(t.id):t.id.localeCompare(e.id)}return n}))}ee.trace("Layers : ",c);var d=this.options.tools.sortBy,h=this.options.tools.groupAuto,m={};c.forEach((function(e){var t=e.metadata;if(t&&t["geoportail:group"]){var n=t["geoportail:group"];m[n]=m[n]?m[n]+1:1}else{var r=null;switch(d){case"class":r=e["source-layer"];break;case"geom":r=e.type;break;default:r=e.id}var i=r;if(h){var o=r.search(/_|-|:|=/);i=-1!==o?r.substring(0,o).trim():r}m[i]=m[i]?m[i]+1:1,t?t["geoportail:group"]=i:e.metadata={"geoportail:group":i}}})),ee.trace("Groups : ",m);var f,y=document.createElement("div");if(y.className=this.name.containerLayers,e.appendChild(y),void 0!==this.options.tools.collapse){(f=document.createElement("details")).className="",f.open=!this.options.tools.collapse,y.appendChild(f);var v=document.createElement("summary");v.className="",v.innerHTML="",f.appendChild(v)}for(var C=void 0!==this.options.tools.collapse?f:y,A=-1,b=0;b1){m[_]=-1;var w=new V({id:this.id,target:void 0!==this.options.tools.collapse?f:y,title:_,collapse:!0});w.add(),C=w.getContainer()}else 1===m[_]&&(C=void 0!==this.options.tools.collapse?f:y);else C=void 0!==this.options.tools.collapse?f:y}else C=void 0!==this.options.tools.collapse?f:y;if(this.options.tools.layers){var S=new B({id:this.id,target:C,position:A+"_"+this.id,tools:{visibility:this.options.tools.visibility,icon:this.options.tools.icon,type:this.options.tools.type,pin:this.options.tools.pin},obj:{id:E.id,type:E.type,source:E.source,"source-layer":E["source-layer"]}});S.add(),E.layout&&E.layout.visibility&&"none"===E.layout.visibility&&S.visibility(!1),this.layers.push(S)}if(this.options.tools.legend){var x=this.options.tools.editable;void 0===x&&(x=E.editable);var T=new O({id:this.id,target:C,sprites:this.sprites,obj:{id:E.id,source:E.source,title:E.id,editable:void 0!==x&&x,paint:E.paint,layout:E.layout}});T.add(),T.display(!1),S&&(S.addLegend(T),S.slotLegend())}if(this.options.tools.style){var k=new g({id:this.id,target:C,position:A+"_"+this.id,obj:{id:E.id,source:E.source,layout:E.layout,paint:E.paint}});k.add(),k.display(!1),S&&S.addStyle(k),E.layout&&E.layout.visibility&&"none"===E.layout.visibility&&S.visibility(!1)}if(this.options.tools.filter){var R=new P({id:this.id,target:C,position:A+"_"+this.id,obj:{id:E.id,source:E.source,filter:E.Filter}});R.add(),R.display(!1),S&&S.addFilter(R)}}else A>=0&&A--}}if(this.container=e,!this.options.target){if(!document.getElementById(this.name.target)){var L=document.createElement("div");L.id=this.name.target,(document.getElementsByTagName("body")[0]||document.getElementsByTagName("head")[0]||document.documentElement).appendChild(L)}this.options.target=document.getElementById(this.name.target)}this.container&&this.options.target.appendChild(this.container),i().dispatch(l.onloaded,this)}},{key:"_getSprites",value:function(e){var t,n=this;return e&&e.startsWith("mapbox://")?new Promise((function(e,t){ee.error("Protocole mapbox:// non géré !"),e(n)})):e?Promise.all([(t=e+".png",fetch(t,{credentials:"same-origin"}).then((function(e){if(e.ok)return e.blob().then((function(e){n.sprites.url=t;var r=new Image;return r.src=t,r.decode().then((function(){n.sprites.size={},n.sprites.size.h=r.height,n.sprites.size.w=r.width}))})).catch((function(e){ee.warn("fetch image sprites exception :",e)}));throw new Error("HTTP status code: "+e.status)})).catch((function(e){return new Promise((function(t,n){ee.error("fetch image sprites exception :",e),n(e)}))}))),fetch(e+".json",{credentials:"same-origin"}).then((function(e){if(e.ok)return e.json().then((function(e){n.sprites.json=e})).catch((function(e){ee.warn("fetch json sprites exception :",e)}));throw new Error("HTTP status code: "+e.status)})).catch((function(e){return new Promise((function(t,n){ee.error("fetch json sprites exception :",e),n(e)}))}))]):new Promise((function(e,t){ee.error("Auncun sprites disponibles !"),e(n)}))}},{key:"createElement",value:function(){var e=this;return"object"===J(this.options.style)?(this.mapbox=this.options.style,this.options.tools.legend?this._getSprites(this.mapbox.sprite).then((function(){return e._initContainer(),e})).catch((function(e){ee.warn("fetch sprites exception :",e)})):new Promise((function(t,n){e._initContainer(),t(e)}))):"string"==typeof this.options.style?fetch(this.options.style,{credentials:"same-origin"}).then((function(t){return t.json().then((function(t){e.mapbox=t})).then((function(){return e.options.tools.legend?e._getSprites(e.mapbox.sprite).then((function(){return e._initContainer(),e})).catch((function(e){ee.warn("fetch sprites exception :",e)})):new Promise((function(t,n){e._initContainer(),t(e)}))})).catch((function(e){ee.error("json exception :",e)}))})).catch((function(e){ee.error("fetch exception :",e)})):void 0}},{key:"display",value:function(e){this.container.style.display=e?"block":"none"}},{key:"setContext",value:function(e,t){this.context[e]=t}},{key:"getContext",value:function(e){return this.context[e]}},{key:"getID",value:function(){return this.id}},{key:"getContainer",value:function(){return this.container}},{key:"getStyle",value:function(){return this.mapbox}},{key:"getStyleLayer",value:function(e){for(var t=null,n=this.getLayer(e).options.obj.id,r=0;r{"use strict";n.d(t,{default:()=>ee});var r=n(3391),i=n(562),o=n(2999);const a=ol.geom;var s=n(5074),l=n(9201);const c=ol.sphere;var u=n(9972),p=n.n(u),d=n(996),h=n.n(d),g=n(3668),m=n.n(g),f=n(2987),y=n(2536),v=n(5844),C=n(6736),I=n(9994),A=n(3600),b={_toolboxId:"GPtoolbox-measure-main",_buttonId:"GPtoolbox-measure-button",_widgetId:"GPtoolbox-measure-widget",getToolBoxID:function(e){return e?this._toolboxId+"-"+e:this._toolboxId},getButtonID:function(e){return e?this._buttonId+"-"+e:this._buttonId},getWidgetID:function(e){return e?this._widgetId+"-"+e:this._widgetId},_createToolBoxContainerElement:function(e){var t=document.createElement("div");t.id=this.getToolBoxID(e),t.className="GPshowAdvancedToolPicto";var n=document.createElement("button");n.id=this.getButtonID(e),n.className="GPshowOpen GPshowAdvancedToolPicto GPshowToolBoxPicto gpf-btn gpf-btn-icon-toolbox fr-btn",n.setAttribute("tabindex","0"),n.setAttribute("aria-pressed",!1),n.setAttribute("type","button");var r=this;n.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),this.blur();var i=document.getElementById(r.getWidgetID(e));"block"===i.style.display?i.style.display="none":i.style.display="block"})),t.appendChild(n);var i=document.createElement("div");return i.id=this.getWidgetID(e),i.addEventListener("click",(function(){}),!1),t.appendChild(i),t}};const E=b;var _=v.A.getLogger("toolbox"),w={_toolbox:{},add:function(e,t){if(_.trace("ToolBox.add()",t),e){var n="undefined"!=typeof window?window:"undefined"!=typeof self?self:null;n&&(this._toolbox=n.gpShareMeasureToolBox||{});var r=e.getTargetElement(),i=r.ownerDocument,o=r.id;this._toolbox&&0!==Object.keys(this._toolbox).length?this._toolbox[o]||(this._toolbox[o]=C.A.generate()):(this._toolbox={},this._toolbox[o]=C.A.generate());var a=this._toolbox[o];if(!i.getElementById(this.getToolBoxID(a))){_.trace("create toolbox !");var s=this._createToolBoxContainerElement(a);s.style.pointerEvents="auto",r.getElementsByClassName("ol-overlaycontainer-stopevent")[0].appendChild(s)}var l=i.getElementById(this.getWidgetID(a));t.setTarget(l),n&&(n.gpShareMeasureToolBox=this._toolbox),_.trace("add control to toolbox !")}else _.trace("map doesn't exist !?")}};y.A.assign(w,E);const P=w;var S=n(5370),x=n.n(S),T=n(9209),k=v.A.getLogger("measures"),R={DEFAULT_POINTER_STYLE:new o.Circle({radius:5,stroke:new o.Stroke({color:"#002A50",width:2}),fill:new o.Fill({color:"rgba(255, 155, 0, 0.7)"})}),DEFAULT_DRAW_START_STYLE:new o.Style({fill:new o.Fill({color:"rgba(0, 183, 152, 0.2)"}),stroke:new o.Stroke({color:"#002A50",lineDash:[10,10],width:2})}),DEFAULT_DRAW_FINISH_STYLE:new o.Style({fill:new o.Fill({color:"rgba(0, 183, 152, 0.3)"}),stroke:new o.Stroke({color:"#002A50",width:3})}),tools:{MeasureLength:[],MeasureArea:[],MeasureAzimuth:[]},measureDraw:null,measureSource:null,measureVector:null,eventLayerRemove:null,sketch:null,measureTooltipElement:null,measureTooltip:null,helpTooltipElement:null,helpTooltip:null,clean:function(){var e=this.CLASSNAME;k.trace("["+e+"] deactived tool !"),this.clearMeasure(),this.clearMeasureToolTip(),this.removeMeasureEvents(),this._pictoContainer.setAttribute("aria-pressed",!1)},onPointerMoveHandler:function(e){if(!e.dragging){var t=e.coordinate;if(this.sketch){var n,r=this.sketch.getGeometry();if(n=this.format(r),"LineString"===r.getType())t=r.getLastCoordinate();else{if("Polygon"!==r.getType())return;t=r.getInteriorPoint().getCoordinates()}this.measureTooltipElement.innerHTML=n,this.measureTooltip.setPosition(t)}}},onShowMeasureClick:function(e,t){"true"===e.target.ariaPressed&&this.onPanelOpen();var n=this.getMap(),r=n.getTargetElement().id,i="undefined"!=typeof window?window:"undefined"!=typeof self?self:null;i&&(this.tools=i.gpShareMeasures||{});var o=this.CLASSNAME;for(var a in this.tools)if(this.tools.hasOwnProperty(a))for(var s=this.tools[a],l=0;l2&&void 0!==arguments[2]?arguments[2]:null,r=(this.canvas||(this.canvas=document.createElement("canvas"))).getContext("2d");return r.font=null===n?"".concat(this._getCssProperty(t,"font-weight")," ").concat(this._getCssProperty(t,"font-size")," ").concat(this._getCssProperty(t,"font-family")):n,r.measureText(e).width},_dataZToSvgY:function(e,t,n,r){return t-(e-n)*r-.5},_dataDistToSvgX:function(e,t,n,r){return t-n+e*r},_svgXToDataDist:function(e,t,n,r){return(e+n-t)/r},_arrayBisect:function(e,t){var n;if(0===e.length)return 0;for(n=0;nT&&(x=Math.pow(10,Math.ceil(Math.log((g-h)/T)/Math.log(10))),k=Math.floor(h/x)*x,(R=Math.ceil(g/x)*x)===g&&(R+=x),k=Math.round(100*k)/100,R=Math.round(100*R)/100,L=Math.floor((R-k)/x)),L=Math.max(Math.round(L),1);var O=document.createElementNS("http://www.w3.org/2000/svg","g");O.setAttribute("class","profile-z-vertical");var M,D,G,U,B,F,j,z=document.createElementNS("http://www.w3.org/2000/svg","g"),H=w/L;M=g===h?w/.2:w/(R-k);for(var V=0;V<=L;V++)(D=document.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("class","profile-z-graduation"),D.setAttribute("font-family",o.fontFamily),D.setAttribute("font-size","10px"),D.setAttribute("fill","#5E5E5E"),D.textContent=(Math.round(100*(k+V*x))/100).toLocaleString(),G=w-V*H,D.setAttribute("transform","translate(".concat(b+E-8,", ").concat(G+5,")")),D.setAttribute("text-anchor","end"),O.appendChild(D),U=Math.round(G)-.5,B=document.createElementNS("http://www.w3.org/2000/svg","g"),(F=document.createElementNS("http://www.w3.org/2000/svg","path")).setAttribute("cs","100,100"),F.setAttribute("stroke-width","1"),0!==V?F.setAttribute("stroke-opacity","0.2"):F.setAttribute("stroke-opacity","1"),F.setAttribute("stroke","#000000"),F.setAttribute("fill","none"),F.setAttribute("d","M".concat(b+E,",").concat(U," L").concat(P+b+E,",").concat(U)),(j=document.createElementNS("http://www.w3.org/2000/svg","path")).setAttribute("cs","100,100"),j.setAttribute("stroke-width","1"),j.setAttribute("stroke-opacity","1"),j.setAttribute("stroke","#000000"),j.setAttribute("fill","none"),j.setAttribute("d","M".concat(b+E,",").concat(U," L").concat(b+E+5,",").concat(U)),j.setAttribute("transform","translate(-5, 0)"),B.appendChild(j),B.appendChild(F),z.appendChild(B);var q=document.createElementNS("http://www.w3.org/2000/svg","text");q.setAttribute("class","profile-z-legend"),q.setAttribute("font-family",o.fontFamily),q.setAttribute("font-size","11px"),q.setAttribute("fill","#5E5E5E"),q.textContent="Altitude (m)",q.setAttribute("transform","translate(".concat(9,", ").concat(Math.round(w/2),") rotate(-90)")),q.setAttribute("text-anchor","middle"),O.appendChild(q),S.appendChild(O),S.appendChild(z),m>2e3&&(m/=1e3,f="km");var W=Math.floor(P/_),Y=Math.pow(10,Math.ceil(Math.log(m/W)/Math.log(10)))/2,X=m,Z=Math.floor(X/Y);Z>W?(Y=Math.pow(10,Math.ceil(Math.log(m/W)/Math.log(10))),Z=Math.floor(X/Y)):Z<1&&(Y=Math.pow(10,Math.ceil(Math.log(m/W)/Math.log(10))-1),Z=Math.floor(X/Y));var K=Y*(Z=Math.max(Z,1)),J=document.createElementNS("http://www.w3.org/2000/svg","g");J.setAttribute("class","profile-x-vertical");for(var Q,$,ee,te,ne,re,ie=document.createElementNS("http://www.w3.org/2000/svg","g"),oe=P/X,ae=(X-K)*oe,se=Math.round((P-ae)/Z),le=0;le<=Z+1;le++)(Q=document.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("class","profile-x-graduation"),Q.setAttribute("font-family",o.fontFamily),Q.setAttribute("font-size","10px"),Q.setAttribute("fill","#5E5E5E"),le!==Z+1&&(Q.textContent=(Math.round(100*le*Y)/100).toLocaleString()),$=b+E+le*se,le===Z+1&&($=b+E+P),Q.setAttribute("transform","translate(".concat($,", ").concat(w+15+5,")")),Q.setAttribute("text-anchor","middle"),J.appendChild(Q),ee=$-.5,te=document.createElementNS("http://www.w3.org/2000/svg","g"),(ne=document.createElementNS("http://www.w3.org/2000/svg","path")).setAttribute("cs","100,100"),ne.setAttribute("stroke-width","1"),0!==le?ne.setAttribute("stroke-opacity","0.2"):ne.setAttribute("stroke-opacity","1"),ne.setAttribute("stroke","#000000"),ne.setAttribute("fill","none"),ne.setAttribute("d","M".concat(ee,",").concat(w," L").concat(ee,",0")),(re=document.createElementNS("http://www.w3.org/2000/svg","path")).setAttribute("cs","100,100"),re.setAttribute("stroke-width","1"),re.setAttribute("stroke-opacity","1"),re.setAttribute("stroke","#000000"),re.setAttribute("fill","none"),re.setAttribute("d","M".concat(ee,",").concat(w," L").concat(ee,",").concat(w-5)),re.setAttribute("transform","translate(0, 5)"),te.appendChild(re),te.appendChild(ne),ie.appendChild(te);var ce=document.createElementNS("http://www.w3.org/2000/svg","text");ce.setAttribute("class","profile-x-legend"),ce.setAttribute("font-family",o.fontFamily),ce.setAttribute("font-size","11px"),ce.setAttribute("fill","#5E5E5E"),ce.textContent="Distance (".concat(f,")"),ce.setAttribute("transform","translate(".concat(b+E+P/2,", ").concat(w+15+17+3,")")),ce.setAttribute("text-anchor","middle"),J.appendChild(ce),S.appendChild(J),S.appendChild(ie);var ue=document.createElementNS("http://www.w3.org/2000/svg","g"),pe=1;"km"===f&&(pe=1e3);for(var de=this._dataDistToSvgX(p[0].dist/pe,A,P,oe),he=this._dataZToSvgY(p[0].z,w,k,M),ge="M".concat(de,",").concat(he),me=1;mel.dist-o&&(c=l);var u=this._dataDistToSvgX(c.dist/pe,A,P,oe),d=this._dataZToSvgY(c.z,w,k,M);Ee.setAttribute("cx",u),Ee.setAttribute("cy",d),Ae.setAttribute("x1",u),Ae.setAttribute("y1",w),Ae.setAttribute("x2",u),Ae.setAttribute("y2",0),be.setAttribute("x1",b+E),be.setAttribute("y1",d),be.setAttribute("x2",P+b+E),be.setAttribute("y2",d),r.__updateProfileMarker(i,c);var h="Altitude : ".concat(c.z.toLocaleString()," m"),g="Pente : ".concat(c.slope," %"),f="(lat : ".concat(c.lat.toLocaleString()," / lon : ").concat(c.lon.toLocaleString(),")");we.innerHTML=h,Pe.innerHTML=g,Se.innerHTML=f;var y,v=Math.max(this._getTextWidth(f,Se),this._getTextWidth(h,we));c.dist>m*pe/2?(y="M -0.5 -0.5 l -6 6 l 0 16 l -".concat(v+10," 0 l 0 -44 l ").concat(v+10," 0 l 0 16 l 6 6"),_e.setAttribute("transform","translate(".concat(-(v/2+12),",0)"))):c.dist<=m*pe/2&&(y="M -0.5 -0.5 l 6 6 l 0 16 l ".concat(v+10," 0 l 0 -44 l -").concat(v+10," 0 l 0 16 l -6 6"),_e.setAttribute("transform","translate(".concat(v/2+12,",0)"))),Te.setAttribute("d",y),ke.setAttribute("d",y),xe.setAttribute("transform","translate(".concat(u,",").concat(d,")")),xe.style.transform="translate(".concat(u,"px,").concat(d,"px)")}.bind(this)),ve.appendChild(Ce),S.appendChild(ve),y.appendChild(S),t}},displayProfileRaw:function(e,t,n,r){if(t){for(;t.firstChild;)t.removeChild(t.firstChild);var i=e&&e.points?e.points:{},o=document.createElement("textarea");return o.id="profilElevationResults",o.rows=10,o.cols=50,o.style.width="100%",o.innerHTML=JSON.stringify(i,void 0,4),o.addEventListener("mouseover",(function(e){r.__customRawProfileMouseOverEvent(n,e)})),t.appendChild(o),t}},displayProfileLibD3:function(e,t,n,r){var i=n;if(t&&e){for(;t.firstChild;)t.removeChild(t.firstChild);var o=e.points;if(e.distance>2e3){e.unit="km";for(var a=0;al[0]-t?l:a,u=f(c.dist),p=y(c.z);w.select("#focusCircle").attr("cx",u).attr("cy",p),w.select("#focusLineX").attr("x1",u).attr("y1",y(_[0])).attr("x2",u).attr("y2",y(_[1])),w.select("#focusLineY").attr("x1",f(E[0])).attr("y1",p).attr("x2",f(E[1])).attr("y2",p),r.__updateProfileMarker(i,c),P.transition().duration(200).style("opacity",.9);var d="";d+=" Altitude : "+c.z+" m",s.currentSlope&&(d+="
    Pente : "+c.slope+" %"),d+="
    (Lat : "+c.lat+"/ Lon : "+c.lon+")",P.html(d).style("left",d3.event.pageX+"px").style("top",d3.event.pageY-28+"px")})),b}},displayProfileLibAmCharts:function(e,t,n,r){var i=n;if(t&&e){var o=e.points,a="[[title]] : [[value]]m
    ";if(i.options.displayProfileOptions.currentSlope&&(a+="Pente : [[slope]] %
    "),a+="(Lat: [[lat]] / Lon:[[lon]])",AmCharts.addInitHandler((function(){})),e.distance>2e3){e.unit="km";for(var s=0;s100?u=1:c>10&&(u=10),c=Math.round(c*u)/u,o[l].dist=c}var p={type:"serial",pathToImages:"http://cdn.amcharts.com/lib/3/images/",categoryField:"dist",autoMarginOffset:0,marginRight:10,marginTop:10,startDuration:0,color:"#5E5E5E",fontSize:8,theme:"light",thousandsSeparator:"",numberFormatter:{precision:-1,decimalSeparator:",",thousandsSeparator:" "},categoryAxis:{color:"#5E5E5E",gridPosition:"start",minHorizontalGap:40,tickPosition:"start",title:"Distance ("+e.unit+")",titleColor:"#5E5E5E",labelOffset:0,startOnAxis:!0},chartCursor:{animationDuration:0,bulletsEnabled:!0,bulletSize:10,categoryBalloonEnabled:!1,cursorColor:"#F90",graphBulletAlpha:1,graphBulletSize:1,zoomable:!1},trendLines:[],graphs:[{balloonColor:"#CCCCCC",balloonText:a,bullet:"round",bulletAlpha:0,bulletBorderColor:"#FFF",bulletBorderThickness:2,bulletColor:"#F90",bulletSize:6,hidden:!1,id:"AmGraph-1",fillAlphas:.4,fillColors:"#C77A04",lineAlpha:1,lineColor:"#C77A04",lineThickness:1,title:"Altitude",valueField:"z"}],guides:[],valueAxes:[{id:"ValueAxis-1",minVerticalGap:20,title:"Altitude (m)"}],balloon:{borderColor:"#CCCCCC",borderThickness:1,fillColor:"#FFFFFF",showBullet:!0},titles:[],allLabels:[],dataProvider:o},d=AmCharts.makeChart(t,p);return d.addListener("changed",(function(e){var t=e.chart.dataProvider[e.index];r.__updateProfileMarker(i,t)})),d}}};const B=U;var F;function j(e){return j="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},j(e)}function z(e,t){for(var n=0;n0&&y.A.mergeParams(t,{sampling:o}),y.A.mergeParams(t,{positions:e}),Q.trace("options du service",t),this._waitingContainer.className="GPwaitingContainer GPwaitingContainerVisible gpf-waiting gpf-waiting--visible",f.Ay.Services.getAltitude(t)}else Q.warn("missing geometry !?")}},{key:"_computeElevationMeasure",value:function(e){Q.trace("ElevationPath::_computeElevationMeasure",e);var t=e;if(this._getSketchCoords()){t[0].dist=0,t[0].slope=0,t[0].oldlat=t[0].lat,t[0].oldlon=t[0].lon,t[0].lat=Math.round(1e5*t[0].lat)/1e5,t[0].lon=Math.round(1e5*t[0].lon)/1e5;var n=0,r=0,i=0,o=0,a=0,s=0,l=[];console.log(t);for(var u=1;u0&&(r+=d,i+=f),a=h,t[u].dist=h,l.push(a),s+=f?Math.abs(Math.round(f/h*100)):0,t[u].slope=f?Math.abs(Math.round(f/h*100)):0;var y=t[u].slope;t[u].color=y>15&&y<30?"#005b4c":y>30&&y<45?"#00362d":y>45?"#00120f":"#00B798",t[u].oldlat=t[u].lat,t[u].oldlon=t[u].lon,t[u].lat=Math.round(1e5*t[u].lat)/1e5,t[u].lon=Math.round(1e5*t[u].lon)/1e5}Q.trace("List Distances",l);for(var v=t[0].z,C=t[0].z,I=t[0].slope,A=0;AC&&(C=b.z),b.zI&&(I=b.slope)}return{greaterSlope:I,meanSlope:Math.round(s/t.length),distancePlus:r,distanceMinus:n,ascendingElevation:i,descendingElevation:o,altMin:v.toLocaleString(),altMax:C.toLocaleString(),distance:this._getLength(),unit:"m",points:t}}}},{key:"_displayProfile",value:function(e){Q.trace("ElevationPath::_displayProfile",e),this._updateInfoContainer();var t=this.options.displayProfileOptions.target;t&&t.appendChild(this._panelContainer),t=this._profileContainer,this.options.displayProfileOptions.apply.call(this,e,t,this);var n=this.options.displayProfileOptions,r=document.getElementById("GPelevationPathPanelInfo-"+this._uid);r&&(n.totalDistance||n.greaterSlope||n.meanSlope||n.ascendingElevation||n.descendingElevation)&&(r.style.display="block"),this.dispatchEvent({type:"elevationpath:compute"})}},{key:"_updateInfoContainer",value:function(){Q.trace("ElevationPath::_updateInfoContainer");var e=this.options.displayProfileOptions.totalDistance,t=this.options.displayProfileOptions.meanSlope,n=this.options.displayProfileOptions.greaterSlope,r=this.options.displayProfileOptions.ascendingElevation,i=this.options.displayProfileOptions.descendingElevation,o=this._infoContainer;if(o.childElementCount)for(;o.firstChild;)o.removeChild(o.firstChild);e&&this._addElevationPathInformationsItem("Distance totale : ",Math.round(this._data.distance).toLocaleString()+" m"),r&&this._addElevationPathInformationsItem("Dénivelé positif : ",this._data.ascendingElevation.toLocaleString()+" m"),i&&this._addElevationPathInformationsItem("Dénivelé négatif : ",this._data.descendingElevation.toLocaleString()+" m"),t&&this._addElevationPathInformationsItem("Pente moyenne : ",this._data.meanSlope.toLocaleString()+" %"),n&&this._addElevationPathInformationsItem("Plus forte pente : ",this._data.greaterSlope.toLocaleString()+" %")}},{key:"_removeMeasure",value:function(){if(this._lastSketch=null,this._currentSketch=null,this._measureSource){this._marker&&(this._measureSource.removeFeature(this._marker),this._marker=null);for(var e=this._measureSource.getFeatures(),t=0;t{"use strict";n.d(t,{default:()=>A});var r=n(3391),i=n(7392),o=n.n(i),a=n(6736),s=n(5844),l=n(5771),c=n(9632),u=n(7255);const p={_addUID:function(e){return this.uid?e+"-"+this.uid:e}};function d(e){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d(e)}function h(e,t){for(var n=0;n\n '));this.button=r.firstChild,this.button&&this.button.addEventListener("click",(function(t){return e.onClickButtonExport(t)})),n.appendChild(r.firstChild);var i=this.stringToHTML('\n
    \n \n \n \n
    \n '));if(this.menu=i.firstChild,this.menu){if(this.options.menu){var o=this.menu.className;this.menu.className=o.replace(this.menuClassHidden,"")}this.menu.querySelectorAll('input[type=radio][name="format"]').forEach((function(t){t.id.toUpperCase().includes(e.options.format.toUpperCase())&&(t.checked=!0),t.addEventListener("change",(function(t){e.setFormat(t.target.value)}))}))}n.appendChild(i.firstChild),this.container=n}},{key:"stringToHTML",value:function(e){if(function(){if(!window.DOMParser)return!1;var e=new DOMParser;try{e.parseFromString("x","text/html")}catch(e){return!1}return!0}())return(new DOMParser).parseFromString(e,"text/html").body;var t=document.createElement("div");return t.innerHTML=e,t}},{key:"isPluggableControl",value:function(){return!(!this.options.control||"function"!=typeof this.options.control.getContainer||"function"!=typeof this.options.control.getLayer)}},{key:"exportFeatures",value:function(e,t,n){var r=this,i=null;if(!e)return C.warn("Impossible to export : no layer is hosting features."),i;if(!e.getSource()||!e.getSource().getFeatures()||!e.getSource().getFeatures().length)return C.warn("Impossible to export : no features found."),i;e.getSource().getFeatures().forEach((function(e){!e.getStyle()&&r.options.control&&"function"==typeof r.options.control.getStyle&&e.setStyle(r.options.control.getStyle())}));var o={defaultStyle:n};t&&(o.extensions={"geoportail:compute":t});var a=null;switch(this.options.format.toUpperCase()){case"KML":o.writeStyles=!0,o.showPointNames=!0,a=new l.A(o);break;case"GPX":a=new u.default(o);break;case"GEOJSON":a=new c.A(o)}if(!a)return C.warn("Impossible to export : format unknown !?"),i;var s=e.getSource().getProjection(),p=this.getMap();p&&(s=s||p.getView().getProjection());var d=e.getSource().getFeatures();return i=a.writeFeatures(d,{dataProjection:"EPSG:4326",featureProjection:s||"EPSG:3857"})}},{key:"onClickButtonExport",value:function(e){this.isPluggableControl()||C.warn("Componant not pluggable with the control !");var t=this.options.control&&void 0!==this.options.control.getLayer?this.options.control.getData():this.options.layer,n=this.options.control&&void 0!==this.options.control.getData?this.options.control.getData():{},r=this.options.control&&void 0!==this.options.control.getStyle?this.options.control.getStyle():{},i=this.exportFeatures(t,n,r);if(i&&"null"!==i)if(this.dispatchEvent({type:"export:compute",content:i}),this.options.onExport&&"function"==typeof this.options.onExport)this.options.onExport(i);else{var o=document.createElement("a");if(o.setAttribute("href","data:"+this.mimeType+";charset=utf-8,"+encodeURIComponent(i)),o.setAttribute("download",this.options.name+this.extension),document.createEvent){var a=document.createEvent("MouseEvents");a.initEvent("click",!0,!0),o.dispatchEvent(a)}else o.click()}}},{key:"getContainer",value:function(){return this.container}},{key:"setControl",value:function(e){this.options.control=e}},{key:"setTarget",value:function(e){this.options.target=e}},{key:"setFormat",value:function(e){switch(this.options.format=e.toUpperCase(),this.options.format){case"KML":this.extension=".kml",this.mimeType="application/vnd.google-earth.kml+xml";break;case"GPX":this.extension=".gpx",this.mimeType="application/gpx+xml";break;case"GEOJSON":this.extension=".geojson",this.mimeType="application/geo+json";break;default:this.options.format="GEOJSON",this.extension=".geojson",this.mimeType="application/geo+json"}}},{key:"setName",value:function(e){this.options.name=e}},{key:"setTitle",value:function(e){this.options.title=e,this.button&&(this.button.value=this.options.menu?this.icon+e:e)}},{key:"setMenu",value:function(e){var t=this;if(this.options.menu=e,this.button&&(this.button.value=this.options.menu?this.icon+this.options.title:this.options.title),this.menu&&this.options.menu){var n=this.menu.className;this.menu.className=n.replace(this.menuClassHidden,""),this.menu.querySelectorAll('input[type=radio][name="format"]').forEach((function(e){e.id.toUpperCase().includes(t.options.format.toUpperCase())&&(e.checked=!0)}))}}},{key:"setLayer",value:function(e){this.options.layer=e}}],r&&h(n.prototype,r),i&&h(n,i),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,i}(o());Object.assign(I.prototype,p),Object.assign(I.prototype,r.A);const A=I;window.ol&&window.ol.control&&(window.ol.control.Export=I)},9322:(e,t,n)=>{"use strict";n.d(t,{default:()=>M});var r=n(3391),i=n(562),o=n(1363),a=n(996),s=n.n(a),l=n(3668),c=n.n(l),u=n(2999),p=n(2987),d=n(2536),h=n(5844),g=n(6736),m=n(9994),f=n(6117),y=n(3600),v=n(9209),C=n(2714),I=n(8526),A=n(9632),b=n(2940);const E={_addUID:function(e){return this._uid?e+"-"+this._uid:e},_createMainContainerElement:function(){var e=document.createElement("div");return e.id=this._addUID("GPisochron"),e.className="GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen",e},_createShowIsoPictoElement:function(){var e=this,t=document.createElement("button"),n=document.createElement("span");return t.appendChild(n),t.id=this._addUID("GPshowIsochronPicto"),t.className="GPshowOpen GPshowAdvancedToolPicto GPshowIsochronPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-isocurve fr-btn fr-btn--tertiary",t.setAttribute("aria-label","Calculer une isochrone"),t.setAttribute("tabindex","0"),t.setAttribute("aria-pressed",!1),t.setAttribute("type","button"),t.addEventListener?t.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowIsoPanelClick(t)})):t.attachEvent&&t.attachEvent("onclick",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowIsoPanelClick(t)})),t},_createIsoPanelElement:function(){var e=document.createElement("dialog");return e.id=this._addUID("GPisochronPanel"),e.className="GPpanel gpf-panel fr-modal",e},_createIsoPanelDivElement:function(){var e=document.createElement("div");return e.className="gpf-panel__body fr-modal__body",e},_createIsoPanelHeaderElement:function(){var e=this,t=document.createElement("div");t.className="GPpanelHeader gpf-panel__header fr-modal__header";var n=document.createElement("div");n.className="GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w",n.innerHTML="Calcul d'isochrone",t.appendChild(n);var r=document.createElement("button");r.id=this._addUID("GPisochronPanelClose"),r.className="GPpanelClose GPisochronPanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w",r.title="Fermer le panneau",r.addEventListener?r.addEventListener("click",(function(){document.getElementById(e._addUID("GPshowIsochronPicto")).click()}),!1):r.attachEvent&&r.attachEvent("onclick",(function(){document.getElementById(e._addUID("GPshowIsochronPicto")).click()}));var i=document.createElement("span");return i.className="GPelementHidden gpf-visible",i.innerText="Fermer",r.appendChild(i),t.appendChild(r),t},_createIsoPanelFormElement:function(){var e=this,t=document.createElement("form");return t.id=this._addUID("GPisochronForm"),t.className="GPform gpf-panel__content gpf-mobile-form fr-modal__content",t.addEventListener("submit",(function(t){return t.preventDefault(),e.onIsoComputationSubmit(t),!1})),t},_createIsoWaitingElement:function(){var e=document.createElement("div");e.id=this._addUID("GPisochronCalcWaitingContainer"),e.className="GPwaitingContainer GPwaitingContainerHidden gpf-waiting gpf-waiting--hidden";var t=document.createElement("p");return t.className="GPwaitingContainerInfo gpf-waiting_info",t.innerHTML="Recherche en cours...",e.appendChild(t),e},_createIsoPanelFooterElement:function(){var e=document.createElement("div");return e.className="GPpanelFooter gpf-panel__footer fr-modal__footer",e},_createIsoPanelFormPointLabel:function(){var e=document.createElement("p");return e.id=this._addUID("GPisochronPointLabelP"),e.className="gpf-label fr-label",e.innerHTML="Départ",e},_createIsoPanelFormTypeChoiceElement:function(){var e=document.createElement("div");return e.id=this._addUID("GPisochronChoice"),e.className="fr-mt-2w",e},_createIsoPanelFormTypeChoiceChronElement:function(e){var t=this,n=document.createElement("div");n.className="GPisochronChoiceAlt gpf-flex gpf-flex-isocurve gpf-radio-group fr-radio-group";var r=document.createElement("input");r.id=this._addUID("GPisochronChoiceAltChron"),r.name="GPisochronChoiceMode",r.type="radio",r.checked=!!e,r.addEventListener?r.addEventListener("change",(function(e){document.getElementById(t._addUID("GPisochronValueChron")).className="GPflexInput gpf-flex fr-mt-1w",document.getElementById(t._addUID("GPisochronValueDist")).className="GPelementHidden gpf-hidden",document.getElementById(t._addUID("GPisochronValueChronLabelP")).className="gpf-label fr-label",document.getElementById(t._addUID("GPisochronValueDistLabelP")).className="GPelementHidden gpf-hidden",document.getElementById(t._addUID("GPisochronSubmit")).value="Calculer l'isochrone",t.onIsoTypeChoiceChange(e)}),!1):r.attachEvent&&r.attachEvent("onchange",(function(){document.getElementById(t._addUID("GPisochronValueChron")).className="GPflexInput gpf-flex fr-mt-1w",document.getElementById(t._addUID("GPisochronValueDist")).className="GPelementHidden gpf-hidden",document.getElementById(t._addUID("GPisochronValueChronLabelP")).className="gpf-label fr-label",document.getElementById(t._addUID("GPisochronValueDistLabelP")).className="GPelementHidden gpf-hidden",document.getElementById(t._addUID("GPisochronSubmit")).value="Calculer l'isochrone",t.onIsoTypeChoiceChange()})),r.value="isochron",n.appendChild(r);var i=document.createElement("label");i.className="GPisochronChoiceAltImg gpf-label fr-label",i.htmlFor=this._addUID("GPisochronChoiceAltChron"),i.innerHTML="Durée",i.title="Durée",n.appendChild(i);var o=document.createElement("span");return o.id=this._addUID("GPisochronChoiceAltChronTxt"),o.className="gpf-hidden",o.innerHTML="Durée",o.addEventListener?o.addEventListener("click",(function(){document.getElementById(t._addUID("GPisochronChoiceAltChron")).click()}),!1):o.attachEvent&&o.attachEvent("onclick",(function(){document.getElementById(t._addUID("GPisochronChoiceAltChron")).click()})),n.appendChild(o),n},_createIsoPanelFormTypeChoiceDistElement:function(e){var t=this,n=document.createElement("div");n.className="GPisochronChoiceAlt gpf-flex gpf-flex-isocurve gpf-radio-group fr-radio-group";var r=document.createElement("input");r.id=this._addUID("GPisochronChoiceAltDist"),r.name="GPisochronChoiceMode",r.type="radio",r.checked=!!e,r.addEventListener?r.addEventListener("change",(function(e){document.getElementById(t._addUID("GPisochronValueDist")).className="GPflexInput gpf-flex fr-mt-1w",document.getElementById(t._addUID("GPisochronValueChron")).className="GPelementHidden gpf-hidden",document.getElementById(t._addUID("GPisochronValueDistLabelP")).className="gpf-label fr-label",document.getElementById(t._addUID("GPisochronValueChronLabelP")).className="GPelementHidden gpf-hidden",document.getElementById(t._addUID("GPisochronSubmit")).value="Calculer l'isodistance",t.onIsoTypeChoiceChange(e)}),!1):r.attachEvent&&r.attachEvent("onchange",(function(){document.getElementById(t._addUID("GPisochronValueDist")).className="GPflexInput gpf-flex fr-mt-1w",document.getElementById(t._addUID("GPisochronValueChron")).className="GPelementHidden gpf-hidden",document.getElementById(t._addUID("GPisochronValueDistLabelP")).className="gpf-label fr-label",document.getElementById(t._addUID("GPisochronValueChronLabelP")).className="GPelementHidden gpf-hidden",document.getElementById(t._addUID("GPisochronSubmit")).value="Calculer l'isodistance",t.onIsoTypeChoiceChange()})),r.value="isodistance",n.appendChild(r);var i=document.createElement("label");i.className="GPisochronChoiceAltImg gpf-label fr-label",i.htmlFor=this._addUID("GPisochronChoiceAltDist"),i.innerHTML="Distance",i.title="Distance",n.appendChild(i);var o=document.createElement("span");return o.id=this._addUID("GPisochronChoiceAltDistTxt"),o.className="gpf-hidden",o.innerHTML="Distance",o.addEventListener?o.addEventListener("click",(function(){document.getElementById(t._addUID("GPisochronChoiceAltDist")).click()}),!1):o.attachEvent&&o.attachEvent("onclick",(function(){document.getElementById(t._addUID("GPisochronChoiceAltDist")).click()})),n.appendChild(o),n},_createIsoPanelFormLabelIsochronElement:function(e){var t=document.createElement("p");return t.id=this._addUID("GPisochronValueChronLabelP"),t.className=e?"gpf-label fr-label":"GPelementHidden gpf-hidden",t.innerHTML="Définir un temps de trajet",t},_createIsoPanelFormValueIsochronElement:function(e){var t=this,n=document.createElement("div");n.id=this._addUID("GPisochronValueChron"),n.className=e?"GPflexInput gpf-flex fr-mt-1w":"GPelementHidden gpf-hidden";var r=document.createElement("input");r.id=this._addUID("GPisochronValueChronInput1"),r.className="gpf-input fr-input",r.min="0",r.step="1",r.value="0",r.type="number",r.title="Temps",r.addEventListener?r.addEventListener("change",(function(e){"function"==typeof t.onIsoValueChronTimeMinuteChange&&t.onIsoValueChronTimeHourChange(e)})):r.attachEvent&&r.attachEvent("onchange",(function(e){"function"==typeof t.onIsoValueChronTimeMinuteChange&&t.onIsoValueChronTimeHourChange(e)})),n.appendChild(r);var i=document.createElement("label");i.innerHTML="h",i.className="gpf-label fr-label",n.appendChild(i);var o=document.createElement("input");o.id=this._addUID("GPisochronValueChronInput2"),o.className="gpf-input fr-input",o.min="0",o.max="59",o.step="1",o.value="0",o.type="number",o.title="Heures",o.addEventListener?o.addEventListener("change",(function(e){"function"==typeof t.onIsoValueChronTimeMinuteChange&&t.onIsoValueChronTimeMinuteChange(e)})):o.attachEvent&&o.attachEvent("onchange",(function(e){"function"==typeof t.onIsoValueChronTimeMinuteChange&&t.onIsoValueChronTimeMinuteChange(e)})),n.appendChild(o);var a=document.createElement("label");return a.innerHTML="min",a.className="gpf-label fr-label",n.appendChild(a),n},_createIsoPanelFormLabelIsodistanceElement:function(e){var t=document.createElement("p");return t.id=this._addUID("GPisochronValueDistLabelP"),t.className=e?"gpf-label fr-label":"GPelementHidden gpf-hidden",t.innerHTML="Définir une distance",t},_createIsoPanelFormValueIsodistanceElement:function(e){var t=this,n=document.createElement("div");n.id=this._addUID("GPisochronValueDist"),n.className=e?"GPflexInput gpf-flex fr-mt-1w":"GPelementHidden gpf-hidden";var r=document.createElement("input");r.id=this._addUID("GPisochronValueDistInput"),r.className="gpf-input fr-input fr-ml-1w",r.min="0",r.step="any",r.value="0",r.type="number",r.title="Distance",r.addEventListener?r.addEventListener("change",(function(e){"function"==typeof t.onIsoValueDistChange&&t.onIsoValueDistChange(e)})):r.attachEvent&&r.attachEvent("onchange",(function(e){"function"==typeof t.onIsoValueDistChange&&t.onIsoValueDistChange(e)})),n.appendChild(r);var i=document.createElement("label");return i.innerHTML="km",i.className="gpf-label fr-label",n.appendChild(i),n},_createIsoPanelFormModeChoiceTransportElement:function(e){var t=this,n=document.createElement("div");n.id=this._addUID("GPisochronTransportChoice");var r=document.createElement("label");r.className="GPisochronModeLabel gpf-label fr-label",r.innerHTML="Choisir un mode de déplacement",n.appendChild(r);for(var i=document.createElement("div"),o=0;o0)return n;var r=this._pictoIsoButton=this._createShowIsoPictoElement();n.appendChild(r);var i=this._IsoPanelContainer=this._createIsoPanelElement(),o=this._createIsoPanelDivElement();i.appendChild(o);var a=this._IsoPanelHeaderContainer=this._createIsoPanelHeaderElement();o.appendChild(a);var s=this._formContainer=this._createIsoPanelFormElement();s.appendChild(this._createIsoPanelFormModeChoiceTransportElement(this.options.graphs)),s.appendChild(this._createIsoPanelFormPointLabel());var l=this._createIsoPanelFormPointElement(e);s.appendChild(l);for(var c=!1,u=!1,p=this._createIsoPanelFormTypeChoiceElement(),d=0;d{"use strict";n.d(t,{default:()=>xt});var r=n(3391),i=n(562),o=n(1363),a=n(2938),s=n(9201),l=n(6736),c=n(5844);const u={configuration:{},isConfigLoaded:function(){if(this.configuration&&0!==Object.keys(this.configuration).length)return!0;var e="undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0!==n.g?n.g:{};return!!(e.Gp&&e.Gp.Config&&e.Gp.Config.layers&&0!==Object.keys(e.Gp.Config.layers).length)&&(this.configuration=e.Gp.Config,!0)}}; /**! diff --git a/dist/modules/GpfExtOlLayerSwitcher.css b/dist/modules/GpfExtOlLayerSwitcher.css index fdd241eb..8d9d8a22 100644 --- a/dist/modules/GpfExtOlLayerSwitcher.css +++ b/dist/modules/GpfExtOlLayerSwitcher.css @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */div[id^=GPlayerSwitcher-]{right:8px;top:8px}div[id^=GPlayerSwitcher-] [draggable]{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;user-select:none;-khtml-user-drag:element;-webkit-user-drag:element}div[id^=GPlayerSwitcher-] input[type=checkbox]+button+dialog{max-height:0}input[id^=GPshowLayersList-]{display:none}button[id^=GPshowLayersListPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowLayersListPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}.position>div[id^=GPlayerSwitcher-]>dialog[id^=GPlayersList]{position:absolute}.position>div[id^=GPlayerSwitcher-]>button[id^=GPshowLayersListPicto-]{float:unset}dialog[id^=GPlayersList]{float:left;position:relative}button[id^=GPshowLayersListPicto-]{float:right}dialog[id^=GPlayersList]{border-bottom-right-radius:0;opacity:0}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{height:auto;max-height:inherit;opacity:1}.GPlayerCounter{background:#fff;border-radius:100px;color:#000;display:inline-block;font-size:12px;left:15px;line-height:1;min-width:15px;padding:2px 0 1px;position:relative;text-align:center;top:-15px}.GPlayerSwitcher_layer{border-bottom:1px dotted #ccc;overflow:hidden;position:relative;top:0}dialog[id^=GPlayersList] .GPlayerSwitcher_layer:last-child{border-bottom:none}.GPlayerAdvancedTools{display:block;max-height:0;opacity:0;transition:max-height .5s ease-out 0s,opacity .5s ease-out 0s}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{opacity:1}[id^=GPlayerInfoPanel]{left:unset;right:100%}div[id^=GPlayerInfoContent]{max-height:200px;overflow-y:auto;padding-left:10px;padding-right:10px;position:relative} /*# sourceMappingURL=GpfExtOlLayerSwitcher.css.map*/ \ No newline at end of file diff --git a/dist/modules/GpfExtOlLayerSwitcher.js b/dist/modules/GpfExtOlLayerSwitcher.js index ed14feff..93d34639 100644 --- a/dist/modules/GpfExtOlLayerSwitcher.js +++ b/dist/modules/GpfExtOlLayerSwitcher.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var e={562:(e,t,n)=>{"use strict";n.d(t,{A:()=>y});var r=n(7392),i=n.n(r),a=n(2940);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function l(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function s(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function d(e,t){for(var n=0;n{"use strict";n.d(t,{A:()=>r});const r=function(){return""!==getComputedStyle(document.documentElement).getPropertyValue("--blue-france-sun-113-625")}},3391:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(9313);const i={onPanelOpen:function(){(0,r.A)(this.options.position,this.element.id.match(/(\w+)-[0-9]+/)[1])}}},5844:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(3065),i={getLogger:function(e){if(void 0===t)var t={env:{VERBOSE:!1}};t.env.VERBOSE?r.enableAll():r.disableAll();var n=e||"default";return r.getLogger(n)},disableAll:function(){var e=r.getLoggers();for(var t in e){if(Object.hasOwnProperty.call(e,t))e[t].disableAll()}},enableAll:function(){var e=r.getLoggers();for(var t in e){if(Object.hasOwnProperty.call(e,t))e[t].enableAll()}}};const a=i;window.Gp&&(window.Gp.Logger=i)},9313:(e,t,n)=>{"use strict";function r(e){return function(e){if(Array.isArray(e))return i(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return i(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);no});var a=["GPoverviewMap","GPfullScreen"];const o=function(e,t){var n=function(e,t){var n=[].concat(a,[t]),i=[];if(e&&e.includes("left")){var o=document.getElementById("position-container-bottom-left"),l=document.getElementById("position-container-top-left");i=[].concat(r(o.children),r(l.children))}if(e&&e.includes("right")){var s=document.getElementById("position-container-bottom-right"),c=document.getElementById("position-container-top-right");i=[].concat(r(s.children),r(c.children))}return i.filter((function(e){var t=e.id.match(/(\w+)-[0-9]+/)[1],r=n.includes(t);if("true"===e.getElementsByTagName("button")[0].getAttribute("aria-pressed")&&!r)return e}))}(e,t);n.length>0&&n[0].getElementsByTagName("button")[0].click()}},6736:(e,t,n)=>{"use strict";var r;n.d(t,{A:()=>i});const i={generate:(r=Math.floor(Date.now()),function(){return r++}),name:function(e){var t=null,n=e.lastIndexOf("-");return t=-1===n?e:e.substring(0,n),t},index:function(e){var t=null,n=this.name(e),r=n.lastIndexOf("_");return-1!==r&&(t=n.substring(r+1)),t},uuid:function(e){var t=null,n=e.lastIndexOf("-");return-1!==n&&(t=parseInt(e.substring(n+1),10)),t}}},3065:function(e,t,n){var r,i;!function(){"use strict";r=function(){var e=function(){},t="undefined",n=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),r=["trace","debug","info","warn","error"],i={},a=null;function o(e,t){var n=e[t];if("function"==typeof n.bind)return n.bind(e);try{return Function.prototype.bind.call(n,e)}catch(t){return function(){return Function.prototype.apply.apply(n,[e,arguments])}}}function l(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function s(r){return"debug"===r&&(r="log"),typeof console!==t&&("trace"===r&&n?l:void 0!==console[r]?o(console,r):void 0!==console.log?o(console,"log"):e)}function c(){for(var n=this.getLevel(),i=0;i=0&&t<=d.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?h+=":"+e:"symbol"==typeof e&&(h=void 0),d.name=e,d.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},d.methodFactory=n||u,d.getLevel=function(){return null!=s?s:null!=l?l:o},d.setLevel=function(e,t){return s=v(e),!1!==t&&p(s),c.call(d)},d.setDefaultLevel=function(e){l=v(e),f()||d.setLevel(e,!1)},d.resetLevel=function(){s=null,g(),c.call(d)},d.enableAll=function(e){d.setLevel(d.levels.TRACE,e)},d.disableAll=function(e){d.setLevel(d.levels.SILENT,e)},d.rebuild=function(){if(a!==d&&(o=v(a.getLevel())),c.call(d),a===d)for(var e in i)i[e].rebuild()},o=v(a?a.getLevel():"WARN");var y=f();null!=y&&(s=v(y)),c.call(d)}(a=new h).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=i[e];return t||(t=i[e]=new h(e,a.methodFactory)),t};var p=typeof window!==t?window.log:void 0;return a.noConflict=function(){return typeof window!==t&&window.log===a&&(window.log=p),a},a.getLoggers=function(){return i},a.default=a,a},void 0===(i="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=i)}()},1363:e=>{"use strict";e.exports=ol.Observable},7392:e=>{"use strict";e.exports=ol.control.Control},2938:e=>{"use strict";e.exports=ol.extent},9201:e=>{"use strict";e.exports=ol.proj}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var a=t[r]={exports:{}};return e[r].call(a.exports,a,a.exports,n),a.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var r={};(()=>{"use strict";n.d(r,{default:()=>Dt});var e=n(3391),t=n(562),i=n(1363),a=n(2938),o=n(9201),l=n(6736),s=n(5844);const c={configuration:{},isConfigLoaded:function(){if(this.configuration&&0!==Object.keys(this.configuration).length)return!0;var e="undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0!==n.g?n.g:{};return!!(e.Gp&&e.Gp.Config&&e.Gp.Config.layers&&0!==Object.keys(e.Gp.Config.layers).length)&&(this.configuration=e.Gp.Config,!0)}}; /**! diff --git a/dist/modules/GpfExtOlLayers.js b/dist/modules/GpfExtOlLayers.js index 210fa0f0..3f05a34a 100644 --- a/dist/modules/GpfExtOlLayers.js +++ b/dist/modules/GpfExtOlLayers.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var e={4582:(e,t)=>{"use strict";function r(e,t){return void 0===t&&(t=Object),t&&"function"==typeof t.getOwnPropertyDescriptors&&(e=t.create(null,t.getOwnPropertyDescriptors(e))),t&&"function"==typeof t.freeze?t.freeze(e):e}function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var o=r({allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,formnovalidate:!0,hidden:!0,ismap:!0,itemscope:!0,loop:!0,multiple:!0,muted:!0,nomodule:!0,novalidate:!0,open:!0,playsinline:!0,readonly:!0,required:!0,reversed:!0,selected:!0});var i=r({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});var s=r({script:!1,style:!1,textarea:!0,title:!0});function a(e){return e===l.HTML}var l=r({HTML:"text/html",XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),u=Object.keys(l).map((function(e){return l[e]}));var c=r({HTML:"http://www.w3.org/1999/xhtml",SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});t.assign=function(e,t){if(null===e||"object"!=typeof e)throw new TypeError("target is not an object");for(var r in t)n(t,r)&&(e[r]=t[r]);return e},t.find=function(e,t,r){if(void 0===r&&(r=Array.prototype),e&&"function"==typeof r.find)return r.find.call(e,t);for(var o=0;o-1},t.MIME_TYPE=l,t.NAMESPACE=c},5752:(e,t,r)=>{"use strict";var n=r(4582),o=r(4722),i=r(2983),s=r(6559),a=r(4466),l=o.DOMImplementation,u=n.hasDefaultHTMLNamespace,c=n.isHTMLMimeType,p=n.isValidMimeType,f=n.MIME_TYPE,h=n.NAMESPACE,d=i.ParseError,m=a.XMLReader;function g(e){return e.replace(/\r[\n\u0085]/g,"\n").replace(/[\r\u0085\u2028]/g,"\n")}function y(e){if(e=e||{locator:!0},this.assign=e.assign||n.assign,this.domHandler=e.domHandler||v,this.onError=e.onError||e.errorHandler,e.errorHandler&&"function"!=typeof e.errorHandler)throw new TypeError("errorHandler object is no longer supported, switch to onError!");e.errorHandler&&e.errorHandler("warning","The `errorHandler` option has been deprecated, use `onError` instead!",this),this.normalizeLineEndings=e.normalizeLineEndings||g,this.locator=!!e.locator,this.xmlns=this.assign(Object.create(null),e.xmlns)}function v(e){var t=e||{};this.mimeType=t.mimeType||f.XML_APPLICATION,this.defaultNamespace=t.defaultNamespace||null,this.cdata=!1,this.currentElement=void 0,this.doc=void 0,this.locator=void 0,this.onError=t.onError}function b(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function w(e,t,r){return"string"==typeof e?e.substr(t,r):e.length>=t+r||t?new java.lang.String(e,t,r)+"":e}function E(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}y.prototype.parseFromString=function(e,t){if(!p(t))throw new TypeError('DOMParser.parseFromString: the provided mimeType "'+t+'" is not valid.');var r=this.assign(Object.create(null),this.xmlns),o=s.XML_ENTITIES,i=r[""]||null;u(t)?(o=s.HTML_ENTITIES,i=h.HTML):t===f.XML_SVG_IMAGE&&(i=h.SVG),r[""]=i,r.xml=r.xml||h.XML;var a=new this.domHandler({mimeType:t,defaultNamespace:i,onError:this.onError}),l=this.locator?{}:void 0;this.locator&&a.setDocumentLocator(l);var c=new m;return c.errorHandler=a,c.domBuilder=a,!n.isHTMLMimeType(t)&&"string"!=typeof e&&c.errorHandler.fatalError("source is not a string"),c.parse(this.normalizeLineEndings(String(e)),r,o),a.doc.documentElement||c.errorHandler.fatalError("missing root element"),a.doc},v.prototype={startDocument:function(){var e=new l;this.doc=c(this.mimeType)?e.createHTMLDocument(!1):e.createDocument(this.defaultNamespace,"")},startElement:function(e,t,r,n){var o=this.doc,i=o.createElementNS(e,r||t),s=n.length;E(this,i),this.currentElement=i,this.locator&&b(this.locator,i);for(var a=0;a{"use strict";var n=r(4582),o=n.find,i=n.hasDefaultHTMLNamespace,s=n.hasOwn,a=n.isHTMLMimeType,l=n.isHTMLRawTextElement,u=n.isHTMLVoidElement,c=n.MIME_TYPE,p=n.NAMESPACE,f=Symbol(),h=r(2983),d=h.DOMException,m=h.DOMExceptionName,g=r(2763);function y(e){if(e!==f)throw new TypeError("Illegal constructor")}function v(e){return""!==e}function b(e,t){return s(e,t)||(e[t]=!0),e}function w(e){if(!e)return[];var t=function(e){return e?e.split(/[\t\n\f\r ]+/).filter(v):[]}(e);return Object.keys(t.reduce(b,{}))}function E(e){if(!g.QName_exact.test(e))throw new d(d.INVALID_CHARACTER_ERR,'invalid character in qualified name "'+e+'"')}function x(e,t){E(t),e=e||null;var r=null,o=t;if(t.indexOf(":")>=0){var i=t.split(":");r=i[0],o=i[1]}if(null!==r&&null===e)throw new d(d.NAMESPACE_ERR,"prefix is non-null and namespace is null");if("xml"===r&&e!==n.NAMESPACE.XML)throw new d(d.NAMESPACE_ERR,'prefix is "xml" and namespace is not the XML namespace');if(("xmlns"===r||"xmlns"===t)&&e!==n.NAMESPACE.XMLNS)throw new d(d.NAMESPACE_ERR,'either qualifiedName or prefix is "xmlns" and namespace is not the XMLNS namespace');if(e===n.NAMESPACE.XMLNS&&"xmlns"!==r&&"xmlns"!==t)throw new d(d.NAMESPACE_ERR,'namespace is the XMLNS namespace and neither qualifiedName nor prefix is "xmlns"');return[e,r,o]}function S(e,t){for(var r in e)s(e,r)&&(t[r]=e[r])}function _(e,t){var r=e.prototype;if(!(r instanceof t)){function n(){}n.prototype=t.prototype,S(r,n=new n),e.prototype=r=n}r.constructor!=e&&("function"!=typeof e&&console.error("unknown Class:"+e),r.constructor=e)}var A={},R=A.ELEMENT_NODE=1,T=A.ATTRIBUTE_NODE=2,N=A.TEXT_NODE=3,O=A.CDATA_SECTION_NODE=4,C=A.ENTITY_REFERENCE_NODE=5,M=A.ENTITY_NODE=6,P=A.PROCESSING_INSTRUCTION_NODE=7,I=A.COMMENT_NODE=8,k=A.DOCUMENT_NODE=9,D=A.DOCUMENT_TYPE_NODE=10,L=A.DOCUMENT_FRAGMENT_NODE=11,q=A.NOTATION_NODE=12,U=n.freeze({DOCUMENT_POSITION_DISCONNECTED:1,DOCUMENT_POSITION_PRECEDING:2,DOCUMENT_POSITION_FOLLOWING:4,DOCUMENT_POSITION_CONTAINS:8,DOCUMENT_POSITION_CONTAINED_BY:16,DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:32});function z(e){for(var t=[];e.parentNode||e.ownerElement;)e=e.parentNode||e.ownerElement,t.unshift(e);return t}function j(e,t){if(t.length=0){for(var o=t.length-1;n<=o;)t[n]=t[++n];if(t.length=o,e){var i=e.ownerDocument;i&&ee(i,e,r),r.ownerElement=null}}}function W(){}function J(e){y(e)}function K(e){return("<"==e?"<":">"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function Q(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(Q(e,t))return!0}while(e=e.nextSibling)}function Z(e,t){y(e);var r=t||{};this.ownerDocument=this,this.contentType=r.contentType||c.XML_APPLICATION,this.type=a(this.contentType)?"html":"xml"}function ee(e,t,r,n){e&&e._inc++,r.namespaceURI===p.XMLNS&&delete t._nsMap[r.prefix?r.localName:""]}function te(e,t,r){if(e&&e._inc){e._inc++;var n=t.childNodes;if(r&&!r.nextSibling)n[n.length++]=r;else{for(var o=t.firstChild,i=0;o;)n[i++]=o,o=o.nextSibling;n.length=i,delete n[n.length]}}}function re(e,t){if(e!==t.parentNode)throw new d(d.NOT_FOUND_ERR,"child's parent is not parent");var r=t.previousSibling,n=t.nextSibling;return r?r.nextSibling=n:e.firstChild=n,n?n.previousSibling=r:e.lastChild=r,te(e.ownerDocument,e),t.parentNode=null,t.previousSibling=null,t.nextSibling=null,t}function ne(e){return e&&e.nodeType===J.DOCUMENT_TYPE_NODE}function oe(e){return e&&e.nodeType===J.ELEMENT_NODE}function ie(e){return e&&e.nodeType===J.TEXT_NODE}function se(e,t){var r=e.childNodes||[];if(o(r,oe)||ne(t))return!1;var n=o(r,ne);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function ae(e,t){var r=e.childNodes||[];if(o(r,(function(e){return oe(e)&&e!==t})))return!1;var n=o(r,ne);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function le(e,t,r){if(!function(e){return e&&(e.nodeType===J.DOCUMENT_NODE||e.nodeType===J.DOCUMENT_FRAGMENT_NODE||e.nodeType===J.ELEMENT_NODE)}(e))throw new d(d.HIERARCHY_REQUEST_ERR,"Unexpected parent node type "+e.nodeType);if(r&&r.parentNode!==e)throw new d(d.NOT_FOUND_ERR,"child not in parent");if(!function(e){return e&&(e.nodeType===J.CDATA_SECTION_NODE||e.nodeType===J.COMMENT_NODE||e.nodeType===J.DOCUMENT_FRAGMENT_NODE||e.nodeType===J.DOCUMENT_TYPE_NODE||e.nodeType===J.ELEMENT_NODE||e.nodeType===J.PROCESSING_INSTRUCTION_NODE||e.nodeType===J.TEXT_NODE)}(t)||ne(t)&&e.nodeType!==J.DOCUMENT_NODE)throw new d(d.HIERARCHY_REQUEST_ERR,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function ue(e,t,r){var n=e.childNodes||[],i=t.childNodes||[];if(t.nodeType===J.DOCUMENT_FRAGMENT_NODE){var s=i.filter(oe);if(s.length>1||o(i,ie))throw new d(d.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===s.length&&!se(e,r))throw new d(d.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!se(e,r))throw new d(d.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(ne(t)){if(o(n,ne))throw new d(d.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var a=o(n,oe);if(r&&n.indexOf(a)1||o(i,ie))throw new d(d.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===s.length&&!ae(e,r))throw new d(d.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!ae(e,r))throw new d(d.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(ne(t)){function l(e){return ne(e)&&e!==r}if(o(n,l))throw new d(d.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var a=o(n,oe);if(r&&n.indexOf(a)=0;m--){if(""===(y=n[m]).prefix&&y.namespace===e.namespaceURI){h=y.namespace;break}}if(h!==e.namespaceURI)for(m=n.length-1;m>=0;m--){var y;if((y=n[m]).namespace===e.namespaceURI){y.prefix&&(f=y.prefix+":"+c);break}}}t.push("<",f);for(var v=0;v");else{if(t.push(">"),o&&l(c))for(;a;)a.data?t.push(a.data):Ne(a,t,r,n.slice()),a=a.nextSibling;else for(;a;)Ne(a,t,r,n.slice()),a=a.nextSibling;t.push("")}return;case k:case L:for(a=e.firstChild;a;)Ne(a,t,r,n.slice()),a=a.nextSibling;return;case T:return Te(t,e.name,e.value);case N:return t.push(e.data.replace(/[<&>]/g,K));case O:return t.push(g.CDATA_START,e.data,g.CDATA_END);case I:return t.push(g.COMMENT_START,e.data,g.COMMENT_END);case D:var S=e.publicId,_=e.systemId;return t.push(g.DOCTYPE_DECL_START," ",e.name),S?(t.push(" ",g.PUBLIC," ",S),_&&"."!==_&&t.push(" ",_)):_&&"."!==_&&t.push(" ",g.SYSTEM," ",_),e.internalSubset&&t.push(" [",e.internalSubset,"]"),void t.push(">");case P:return t.push("");case C:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function Oe(e,t,r){var n;switch(t.nodeType){case R:(n=t.cloneNode(!1)).ownerDocument=e;case L:break;case T:r=!0}if(n||(n=t.cloneNode(!1)),n.ownerDocument=e,n.parentNode=null,r)for(var o=t.firstChild;o;)n.appendChild(Oe(e,o,r)),o=o.nextSibling;return n}function Ce(e,t,r){var n=new t.constructor(f);for(var o in t)if(s(t,o)){var i=t[o];"object"!=typeof i&&i!=n[o]&&(n[o]=i)}switch(t.childNodes&&(n.childNodes=new G),n.ownerDocument=e,n.nodeType){case R:var a=t.attributes,l=n.attributes=new $,u=a.length;l._ownerElement=n;for(var c=0;c=0&&eF(t.ownerDocument)?U.DOCUMENT_POSITION_FOLLOWING:U.DOCUMENT_POSITION_PRECEDING);var a=z(t),l=z(r);if(!n&&l.indexOf(t)>=0||o&&t===r)return U.DOCUMENT_POSITION_CONTAINS+U.DOCUMENT_POSITION_PRECEDING;if(!o&&a.indexOf(r)>=0||n&&t===r)return U.DOCUMENT_POSITION_CONTAINED_BY+U.DOCUMENT_POSITION_FOLLOWING;var u=j(l,a);for(var c in u.childNodes){var p=u.childNodes[c];if(p===r)return U.DOCUMENT_POSITION_FOLLOWING;if(p===t)return U.DOCUMENT_POSITION_PRECEDING;if(l.indexOf(p)>=0)return U.DOCUMENT_POSITION_FOLLOWING;if(a.indexOf(p)>=0)return U.DOCUMENT_POSITION_PRECEDING}return 0}},S(A,J),S(A,J.prototype),S(U,J),S(U,J.prototype),Z.prototype={implementation:null,nodeName:"#document",nodeType:k,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType===L){for(var r=e.firstChild;r;){var n=r.nextSibling;this.insertBefore(r,t),r=n}return e}return pe(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===R&&(this.documentElement=e),e},removeChild:function(e){var t=re(this,e);return t===this.documentElement&&(this.documentElement=null),t},replaceChild:function(e,t){pe(this,e,t,ce),e.ownerDocument=this,t&&this.removeChild(t),oe(e)&&(this.documentElement=e)},importNode:function(e,t){return Oe(this,e,t)},getElementById:function(e){var t=null;return Q(this.documentElement,(function(r){if(r.nodeType==R&&r.getAttribute("id")==e)return t=r,!0})),t},createElement:function(e){var t=new fe(f);return t.ownerDocument=this,"html"===this.type&&(e=e.toLowerCase()),i(this.contentType)&&(t.namespaceURI=p.HTML),t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new G,(t.attributes=new $)._ownerElement=t,t},createDocumentFragment:function(){var e=new xe(f);return e.ownerDocument=this,e.childNodes=new G,e},createTextNode:function(e){var t=new me(f);return t.ownerDocument=this,t.childNodes=new G,t.appendData(e),t},createComment:function(e){var t=new ge(f);return t.ownerDocument=this,t.childNodes=new G,t.appendData(e),t},createCDATASection:function(e){var t=new ye(f);return t.ownerDocument=this,t.childNodes=new G,t.appendData(e),t},createProcessingInstruction:function(e,t){var r=new Se(f);return r.ownerDocument=this,r.childNodes=new G,r.nodeName=r.target=e,r.nodeValue=r.data=t,r},createAttribute:function(e){if(!g.QName_exact.test(e))throw new d(d.INVALID_CHARACTER_ERR,'invalid character in name "'+e+'"');return"html"===this.type&&(e=e.toLowerCase()),this._createAttribute(e)},_createAttribute:function(e){var t=new he(f);return t.ownerDocument=this,t.childNodes=new G,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){if(!g.Name.test(e))throw new d(d.INVALID_CHARACTER_ERR,'not a valid xml name "'+e+'"');if("html"===this.type)throw new d("document is an html document",m.NotSupportedError);var t=new Ee(f);return t.ownerDocument=this,t.childNodes=new G,t.nodeName=e,t},createElementNS:function(e,t){var r=x(e,t),n=new fe(f),o=n.attributes=new $;return n.childNodes=new G,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=r[0],n.prefix=r[1],n.localName=r[2],o._ownerElement=n,n},createAttributeNS:function(e,t){var r=x(e,t),n=new he(f);return n.ownerDocument=this,n.childNodes=new G,n.nodeName=t,n.name=t,n.specified=!0,n.namespaceURI=r[0],n.prefix=r[1],n.localName=r[2],n}},_(Z,J),fe.prototype={nodeType:R,attributes:null,getQualifiedName:function(){return this.prefix?this.prefix+":"+this.localName:this.localName},_isInHTMLDocumentAndNamespace:function(){return"html"===this.ownerDocument.type&&this.namespaceURI===p.HTML},hasAttribute:function(e){return!!this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t?t.value:null},getAttributeNode:function(e){return this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase()),this.attributes.getNamedItem(e)},setAttribute:function(e,t){this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase());var r=this.getAttributeNode(e);r?r.value=r.nodeValue=""+t:((r=this.ownerDocument._createAttribute(e)).value=r.nodeValue=""+t,this.setAttributeNode(r))},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);r&&this.removeAttributeNode(r)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);return r?r.value:null},setAttributeNS:function(e,t,r){var n=x(e,t)[2],o=this.getAttributeNodeNS(e,n);o?o.value=o.nodeValue=""+r:((o=this.ownerDocument.createAttributeNS(e,t)).value=o.nodeValue=""+r,this.setAttributeNode(o))},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByClassName:function(e){var t=w(e);return new V(this,(function(r){var n=[];return t.length>0&&Q(r,(function(o){if(o!==r&&o.nodeType===R){var i=o.getAttribute("class");if(i){var s=e===i;if(!s){var a=w(i);s=t.every((l=a,function(e){return l&&-1!==l.indexOf(e)}))}s&&n.push(o)}}var l})),n}))},getElementsByTagName:function(e){var t="html"===(this.nodeType===k?this:this.ownerDocument).type,r=e.toLowerCase();return new V(this,(function(n){var o=[];return Q(n,(function(i){i!==n&&i.nodeType===R&&(("*"===e||i.getQualifiedName()===(t&&i.namespaceURI===p.HTML?r:e))&&o.push(i))})),o}))},getElementsByTagNameNS:function(e,t){return new V(this,(function(r){var n=[];return Q(r,(function(o){o===r||o.nodeType!==R||"*"!==e&&o.namespaceURI!==e||"*"!==t&&o.localName!=t||n.push(o)})),n}))}},Z.prototype.getElementsByClassName=fe.prototype.getElementsByClassName,Z.prototype.getElementsByTagName=fe.prototype.getElementsByTagName,Z.prototype.getElementsByTagNameNS=fe.prototype.getElementsByTagNameNS,_(fe,J),he.prototype.nodeType=T,_(he,J),de.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,r){r=this.data.substring(0,e)+r+this.data.substring(e+t),this.nodeValue=this.data=r,this.length=r.length}},_(de,J),me.prototype={nodeName:"#text",nodeType:N,splitText:function(e){var t=this.data,r=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var n=this.ownerDocument.createTextNode(r);return this.parentNode&&this.parentNode.insertBefore(n,this.nextSibling),n}},_(me,de),ge.prototype={nodeName:"#comment",nodeType:I},_(ge,de),ye.prototype={nodeName:"#cdata-section",nodeType:O},_(ye,me),ve.prototype.nodeType=D,_(ve,J),be.prototype.nodeType=q,_(be,J),we.prototype.nodeType=M,_(we,J),Ee.prototype.nodeType=C,_(Ee,J),xe.prototype.nodeName="#document-fragment",xe.prototype.nodeType=L,_(xe,J),Se.prototype.nodeType=P,_(Se,de),_e.prototype.serializeToString=function(e,t){return Ae.call(e,t)},J.prototype.toString=Ae;try{if(Object.defineProperty){function Pe(e){switch(e.nodeType){case R:case L:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(Pe(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(V.prototype,"length",{get:function(){return H(this),this.$$length}}),Object.defineProperty(J.prototype,"textContent",{get:function(){return Pe(this)},set:function(e){switch(this.nodeType){case R:case L:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),Me=function(e,t,r){e["$$"+t]=r}}}catch(Ie){}t._updateLiveList=H,t.Attr=he,t.CDATASection=ye,t.CharacterData=de,t.Comment=ge,t.Document=Z,t.DocumentFragment=xe,t.DocumentType=ve,t.DOMImplementation=W,t.Element=fe,t.Entity=we,t.EntityReference=Ee,t.LiveNodeList=V,t.NamedNodeMap=$,t.Node=J,t.NodeList=G,t.Notation=be,t.Text=me,t.ProcessingInstruction=Se,t.XMLSerializer=_e},6559:(e,t,r)=>{"use strict";var n=r(4582).freeze;t.XML_ENTITIES=n({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),t.HTML_ENTITIES=n({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),t.entityMap=t.HTML_ENTITIES},2983:(e,t,r)=>{"use strict";function n(e,t){e.prototype=Object.create(Error.prototype,{constructor:{value:e},name:{value:e.name,enumerable:!0,writable:t}})}var o=r(4582).freeze({Error:"Error",IndexSizeError:"IndexSizeError",DomstringSizeError:"DomstringSizeError",HierarchyRequestError:"HierarchyRequestError",WrongDocumentError:"WrongDocumentError",InvalidCharacterError:"InvalidCharacterError",NoDataAllowedError:"NoDataAllowedError",NoModificationAllowedError:"NoModificationAllowedError",NotFoundError:"NotFoundError",NotSupportedError:"NotSupportedError",InUseAttributeError:"InUseAttributeError",InvalidStateError:"InvalidStateError",SyntaxError:"SyntaxError",InvalidModificationError:"InvalidModificationError",NamespaceError:"NamespaceError",InvalidAccessError:"InvalidAccessError",ValidationError:"ValidationError",TypeMismatchError:"TypeMismatchError",SecurityError:"SecurityError",NetworkError:"NetworkError",AbortError:"AbortError",URLMismatchError:"URLMismatchError",QuotaExceededError:"QuotaExceededError",TimeoutError:"TimeoutError",InvalidNodeTypeError:"InvalidNodeTypeError",DataCloneError:"DataCloneError",EncodingError:"EncodingError",NotReadableError:"NotReadableError",UnknownError:"UnknownError",ConstraintError:"ConstraintError",DataError:"DataError",TransactionInactiveError:"TransactionInactiveError",ReadOnlyError:"ReadOnlyError",VersionError:"VersionError",OperationError:"OperationError",NotAllowedError:"NotAllowedError",OptOutError:"OptOutError"}),i=Object.keys(o);function s(e){return"number"==typeof e&&e>=1&&e<=25}function a(e,t){var r;s(e)?(this.name=i[e],this.message=t||""):(this.message=e,this.name="string"==typeof(r=t)&&r.substring(r.length-o.Error.length)===o.Error?t:o.Error),Error.captureStackTrace&&Error.captureStackTrace(this,a)}n(a,!0),Object.defineProperties(a.prototype,{code:{enumerable:!0,get:function(){var e=i.indexOf(this.name);return s(e)?e:0}}});for(var l={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25},u=Object.entries(l),c=0;c{"use strict";function r(e){try{"function"!=typeof e&&(e=RegExp);var t=new e("𝌆","u").exec("𝌆");return!!t&&2===t[0].length}catch(e){}return!1}var n=r();function o(e){if("["!==e.source[0])throw new Error(e+" can not be used with chars");return e.source.slice(1,e.source.lastIndexOf("]"))}function i(e,t){if("["!==e.source[0])throw new Error("/"+e.source+"/ can not be used with chars_without");if(!t||"string"!=typeof t)throw new Error(JSON.stringify(t)+" is not a valid search");if(-1===e.source.indexOf(t))throw new Error('"'+t+'" is not is /'+e.source+"/");if("-"===t&&1!==e.source.indexOf(t))throw new Error('"'+t+'" is not at the first postion of /'+e.source+"/");return new RegExp(e.source.replace(t,""),n?"u":"")}function s(e){var t=this;return new RegExp(Array.prototype.slice.call(arguments).map((function(e){var r="string"==typeof e;if(r&&void 0===t&&"|"===e)throw new Error("use regg instead of reg to wrap expressions with `|`!");return r?e:e.source})).join(""),n?"mu":"m")}function a(e){if(0===arguments.length)throw new Error("no parameters provided");return s.apply(a,["(?:"].concat(Array.prototype.slice.call(arguments),[")"]))}var l=/[-\x09\x0A\x0D\x20-\x2C\x2E-\uD7FF\uE000-\uFFFD]/;n&&(l=s("[",o(l),"\\u{10000}-\\u{10FFFF}","]"));var u=/[\x20\x09\x0D\x0A]/,c=o(u),p=s(u,"+"),f=s(u,"*"),h=/[:_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;n&&(h=s("[",o(h),"\\u{10000}-\\u{10FFFF}","]"));var d=s("[",o(h),o(/[-.0-9\xB7]/),o(/[\u0300-\u036F\u203F-\u2040]/),"]"),m=s(h,d,"*"),g=s(d,"+"),y=s("&",m,";"),v=a(/&#[0-9]+;|&#x[0-9a-fA-F]+;/),b=a(y,"|",v),w=s("%",m,";"),E=a(s('"',a(/[^%&"]/,"|",w,"|",b),"*",'"'),"|",s("'",a(/[^%&']/,"|",w,"|",b),"*","'")),x=a('"',a(/[^<&"]/,"|",b),"*",'"',"|","'",a(/[^<&']/,"|",b),"*","'"),S=s(i(h,":"),i(d,":"),"*"),_=s(S,a(":",S),"?"),A=s("^",_,"$"),R=s("(",_,")"),T=a(/"[^"]*"|'[^']*'/),N=s(/^<\?/,"(",m,")",a(p,"(",l,"*?)"),"?",/\?>/),O=/[\x20\x0D\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/,C=a('"',O,'*"',"|","'",i(O,"'"),"*'"),M="\x3c!--",P=s(M,a(i(l,"-"),"|",s("-",i(l,"-"))),"*","--\x3e"),I="#PCDATA",k=a(s(/\(/,f,I,a(f,/\|/,f,_),"*",f,/\)\*/),"|",s(/\(/,f,I,f,/\)/)),D=a("EMPTY","|","ANY","|",k,"|",s(/\([^>]+\)/,/[?*+]?/)),L=s(""),q=s("NOTATION",p,/\(/,f,m,a(f,/\|/,f,m),"*",f,/\)/),U=s(/\(/,f,g,a(f,/\|/,f,g),"*",f,/\)/),z=a(q,"|",U),j=a(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/,"|",z),F=a(/#REQUIRED|#IMPLIED/,"|",a(a("#FIXED",p),"?",x)),G=s(""),V="SYSTEM",H="PUBLIC",$=a(a(V,p,T),"|",a(H,p,C,p,T)),B=s("^",a(a(V,p,"(?",T,")"),"|",a(H,p,"(?",C,")",p,"(?",T,")"))),Y=a(p,"NDATA",p,m),X=""),J=a(E,"|",$),K=a(W,"|",s(X,p,"%",p,m,p,J,f,">")),Q=s(H,p,C),Z=s(""),ee=s(f,"=",f),te=/1[.]\d+/,re=s(p,"version",ee,a("'",te,"'","|",'"',te,'"')),ne=/[A-Za-z][-A-Za-z0-9._]*/,oe=s(/^<\?xml/,re,a(p,"encoding",ee,a('"',ne,'"',"|","'",ne,"'")),"?",a(p,"standalone",ee,a("'",a("yes","|","no"),"'","|",'"',a("yes","|","no"),'"')),"?",f,/\?>/),ie=s(l,"*?",/\]\]>/),se=s(/",t.CDSect=se,t.Char=l,t.Comment=P,t.COMMENT_START=M,t.COMMENT_END="--\x3e",t.DOCTYPE_DECL_START="{"use strict";var n=r(4582);n.assign,n.hasDefaultHTMLNamespace,n.isHTMLMimeType,n.isValidMimeType,n.MIME_TYPE,n.NAMESPACE;var o=r(2983);o.DOMException,o.DOMExceptionName,o.ExceptionCode,o.ParseError;var i=r(4722);i.Attr,i.CDATASection,i.CharacterData,i.Comment,i.Document,i.DocumentFragment,i.DocumentType,i.DOMImplementation,i.Element,i.Entity,i.EntityReference,i.LiveNodeList,i.NamedNodeMap,i.Node,i.NodeList,i.Notation,i.ProcessingInstruction,i.Text,i.XMLSerializer;var s=r(5752);t.S4=s.DOMParser,s.onErrorStopParsing,s.onWarningStopParsing},4466:(e,t,r)=>{"use strict";var n=r(4582),o=r(2763),i=r(2983),s=n.isHTMLEscapableRawTextElement,a=n.isHTMLMimeType,l=n.isHTMLRawTextElement,u=n.hasOwn,c=n.NAMESPACE,p=i.ParseError,f=i.DOMException;function h(){}h.prototype={parse:function(e,t,r){var i=this.domBuilder;i.startDocument(),b(t,t=Object.create(null)),function(e,t,r,i,s){var l=a(i.mimeType);e.indexOf(o.UNICODE_REPLACEMENT_CHARACTER)>=0&&s.warning("Unicode replacement character detected, source encoding issues?");function c(e){if(e>65535){var t=55296+((e-=65536)>>10),r=56320+(1023&e);return String.fromCharCode(t,r)}return String.fromCharCode(e)}function h(e){var t=";"===e[e.length-1]?e:e+";";if(!l&&t!==e)return s.error("EntityRef: expecting ;"),e;var n=o.Reference.exec(t);if(!n||n[0].length!==t.length)return s.error("entity not matching Reference production: "+e),e;var i=t.slice(1,-1);return u(r,i)?r[i]:"#"===i.charAt(0)?c(parseInt(i.substr(1).replace("x","0x"))):(s.error("entity not found:"+e),e)}function b(t){if(t>C){var r=e.substring(C,t).replace(d,h);T&&w(C),i.characters(r,0,t-C),C=t}}function w(t,r){for(;t>=A&&(r=R.exec(e));)_=r.index,A=_+r[0].length,T.lineNumber++;T.columnNumber=t-_+1}var _=0,A=0,R=/.*(?:\r\n?|\n)|.*$/g,T=i.locator,N=[{currentNSMap:t}],O=[],C=0;for(;;){try{var M=e.indexOf("<",C);if(M<0){if(!l&&O.length>0)return s.fatalError("unclosed xml tag(s): "+O.join(", "));if(!e.substring(C).match(/^\s*$/)){var P=i.doc,I=P.createTextNode(e.substr(C));if(P.documentElement)return s.error("Extra content at the end of the document");P.appendChild(I),i.currentElement=I}return}if(M>C){var k=e.substring(C,M);l||0!==O.length||(k=k.replace(new RegExp(o.S_OPT.source,"g"),""))&&s.error("Unexpected content outside root element: '"+k+"'"),b(M)}switch(e.charAt(M+1)){case"/":var D=e.indexOf(">",M+2),L=e.substring(M+2,D>0?D:void 0);if(!L)return s.fatalError("end tag name missing");var q=D>0&&o.reg("^",o.QName_group,o.S_OPT,"$").exec(L);if(!q)return s.fatalError('end tag name contains invalid characters: "'+L+'"');if(!i.currentElement&&!i.doc.documentElement)return;var U=O[O.length-1]||i.currentElement.tagName||i.doc.documentElement.tagName||"";if(U!==q[1]){var z=q[1].toLowerCase();if(!l||U.toLowerCase()!==z)return s.fatalError('Opening and ending tag mismatch: "'+U+'" != "'+L+'"')}var j=N.pop();O.pop();var F=j.localNSMap;if(i.endElement(j.uri,j.localName,U),F)for(var G in F)u(F,G)&&i.endPrefixMapping(G);D++;break;case"?":T&&w(M),D=x(e,M,i,s);break;case"!":T&&w(M),D=E(e,M,i,s,l);break;default:T&&w(M);var V=new S,H=N[N.length-1].currentNSMap,$=(D=g(e,M,V,H,h,s,l),V.length);if(V.closed||(l&&n.isHTMLVoidElement(V.tagName)?V.closed=!0:O.push(V.tagName)),T&&$){for(var B=m(T,{}),Y=0;Y<$;Y++){var X=V[Y];w(X.offset),X.locator=m(T,{})}i.locator=B,y(V,i,H)&&N.push(V),i.locator=T}else y(V,i,H)&&N.push(V);l&&!V.closed?D=v(e,D,V.tagName,h,i):D++}}catch(e){if(e instanceof p)throw e;if(e instanceof f)throw new p(e.name+": "+e.message,i.locator,e);s.error("element parse error: "+e),D=-1}D>C?C=D:b(Math.max(M,C)+1)}}(e,t,r,i,this.errorHandler),i.endDocument()}};var d=/&#?\w+;?/g;function m(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function g(e,t,r,n,o,i,s){function a(e,t,n){return u(r.attributeNames,e)?i.fatalError("Attribute "+e+" redefined"):!s&&t.indexOf("<")>=0?i.fatalError("Unescaped '<' not allowed in attributes values"):void r.addValue(e,t.replace(/[\t\n\r]/g," ").replace(d,o),n)}for(var l,c=++t,p=0;;){var f=e.charAt(c);switch(f){case"=":if(1===p)l=e.slice(t,c),p=3;else{if(2!==p)throw new Error("attribute equal must after attrName");p=3}break;case"'":case'"':if(3===p||1===p){if(1===p&&(i.warning('attribute value must after "="'),l=e.slice(t,c)),t=c+1,!((c=e.indexOf(f,t))>0))throw new Error("attribute value no end '"+f+"' match");a(l,h=e.slice(t,c),t-1),p=5}else{if(4!=p)throw new Error('attribute value must after "="');a(l,h=e.slice(t,c),t),i.warning('attribute "'+l+'" missed start quot('+f+")!!"),t=c+1,p=5}break;case"/":switch(p){case 0:r.setTagName(e.slice(t,c));case 5:case 6:case 7:p=7,r.closed=!0;case 4:case 1:break;case 2:r.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return i.error("unexpected end of input"),0==p&&r.setTagName(e.slice(t,c)),c;case">":switch(p){case 0:r.setTagName(e.slice(t,c));case 5:case 6:case 7:break;case 4:case 1:"/"===(h=e.slice(t,c)).slice(-1)&&(r.closed=!0,h=h.slice(0,-1));case 2:2===p&&(h=l),4==p?(i.warning('attribute "'+h+'" missed quot(")!'),a(l,h,t)):(s||i.warning('attribute "'+h+'" missed value!! "'+h+'" instead!!'),a(h,h,t));break;case 3:if(!s)return i.fatalError("AttValue: ' or \" expected")}return c;case"€":f=" ";default:if(f<=" ")switch(p){case 0:r.setTagName(e.slice(t,c)),p=6;break;case 1:l=e.slice(t,c),p=2;break;case 4:var h=e.slice(t,c);i.warning('attribute "'+h+'" missed quot(")!!'),a(l,h,t);case 5:p=6}else switch(p){case 2:s||i.warning('attribute "'+l+'" missed value!! "'+l+'" instead2!!'),a(l,l,t),t=c,p=1;break;case 5:i.warning('attribute space is required"'+l+'"!!');case 6:p=1,t=c;break;case 3:p=4,t=c;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}c++}}function y(e,t,r){for(var n=e.tagName,o=null,i=e.length;i--;){var s=e[i],a=s.qName,l=s.value;if((d=a.indexOf(":"))>0)var p=s.prefix=a.slice(0,d),f=a.slice(d+1),h="xmlns"===p&&f;else f=a,p=null,h="xmlns"===a&&"";s.localName=f,!1!==h&&(null==o&&(o=Object.create(null),b(r,r=Object.create(null))),r[h]=o[h]=l,s.uri=c.XMLNS,t.startPrefixMapping(h,l))}for(i=e.length;i--;)(s=e[i]).prefix&&("xml"===s.prefix&&(s.uri=c.XML),"xmlns"!==s.prefix&&(s.uri=r[s.prefix]));var d;(d=n.indexOf(":"))>0?(p=e.prefix=n.slice(0,d),f=e.localName=n.slice(d+1)):(p=null,f=e.localName=n);var m=e.uri=r[p||""];if(t.startElement(m,f,n,e),!e.closed)return e.currentNSMap=r,e.localNSMap=o,!0;if(t.endElement(m,f,n),o)for(p in o)u(o,p)&&t.endPrefixMapping(p)}function v(e,t,r,n,o){var i=s(r);if(i||l(r)){var a=e.indexOf("",t),u=e.substring(t+1,a);return i&&(u=u.replace(d,n)),o.characters(u,0,u.length),a}return t+1}function b(e,t){for(var r in e)u(e,r)&&(t[r]=e[r])}function w(e,t){var r=t;function n(t){return t=t||0,e.charAt(r+t)}function i(e){r+=e=e||1}function s(){return e.substring(r)}return{char:n,getIndex:function(){return r},getMatch:function(e){var t=o.reg("^",e).exec(s());return t?(i(t[0].length),t[0]):null},getSource:function(){return e},skip:i,skipBlanks:function(){for(var t=0;r"!==s.char()?n.fatalError("doctype not terminated with > at position "+s.getIndex()):(s.skip(1),r.startDTD(u.name,u.publicId,u.systemId,u.internalSubset),r.endDTD(),s.getIndex());default:return n.fatalError('Not well-formed XML starting with "0)return n.fatalError("processing instruction at position "+t+" is an xml declaration which is only at the start of the document");if(!o.XMLDecl.test(e.substring(t)))return n.fatalError("xml declaration is not well-formed")}return r.processingInstruction(i[1],i[2]),t+i[0].length}function S(){this.attributeNames=Object.create(null)}S.prototype={setTagName:function(e){if(!o.QName_exact.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,r){if(!o.QName_exact.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:r}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=h,t.parseUtils=w,t.parseDoctypeCommentOrCData=E},1596:(e,t,r)=>{"use strict";r.d(t,{default:()=>di});const n=ol.layer.VectorTile;var o=r.n(n);const i=ol.source.VectorTile;var s=r.n(i);const a=ol.source.TileJSON;var l=r.n(a);const u=ol.format.MVT;var c=r.n(u);const p=ol.Observable,f=ol.style.Circle,h=ol.style.Fill,d=ol.style.Icon;new Array(6);function m(e,t,r,n,o,i,s,a){const l=Math.sin(i),u=Math.cos(i);return e[0]=n*u,e[1]=o*l,e[2]=-n*l,e[3]=o*u,e[4]=s*n*u-a*n*l+t,e[5]=s*o*l+a*o*u+r,e}function g(e,t,r,n,o){return o?(o[0]=e,o[1]=t,o[2]=r,o[3]=n,o):[e,t,r,n]}function y(e){return g(1/0,1/0,-1/0,-1/0,e)}function v(e,t,r,n,o){return function(e,t,r,n,o){for(;r1?(r=o,n=i):l>0&&(r+=s*l,n+=a*l)}return function(e,t,r,n){const o=r-e,i=n-t;return o*o+i*i}(e,t,r,n)}function S(e,t,r,n,o,i,s){const a=(r-t)/n;if(a<3){for(;t0;){const r=u.pop(),i=u.pop();let s=0;const a=e[i],p=e[i+1],f=e[r],h=e[r+1];for(let t=i+n;ts&&(c=t,s=r)}s>o&&(l[(c-t)/n]=1,i+n0&&d>f)&&(h<0&&m0&&m>h)?(a=r,l=p):(i[s++]=a,i[s++]=l,u=a,c=l,a=r,l=p)}return i[s++]=a,i[s++]=l,s}function T(e,t,r,n,o,i,s,a){for(let l=0,u=r.length;lt?1:ei&&(r-a)*(i-l)-(o-a)*(n-l)>0&&s++:n<=i&&(r-a)*(i-l)-(o-a)*(n-l)<0&&s--,a=r,l=n}return 0!==s}function M(e,t,r,n,o,i){if(0===r.length)return!1;if(!C(e,t,r[0],n,o,i))return!1;for(let t=1,s=r.length;ty&&(u=(c+p)/2,M(e,t,r,n,u,d)&&(g=u,y=o)),c=p}return isNaN(g)&&(g=o[i]),s?(s.push(g,d,y),s):[g,d,y]}const I={radians:6370997/(2*Math.PI),degrees:2*Math.PI*6370997/360,ft:.3048,m:1,"us-ft":1200/3937};const k=class{constructor(e){this.code_=e.code,this.units_=e.units,this.extent_=void 0!==e.extent?e.extent:null,this.worldExtent_=void 0!==e.worldExtent?e.worldExtent:null,this.axisOrientation_=void 0!==e.axisOrientation?e.axisOrientation:"enu",this.global_=void 0!==e.global&&e.global,this.canWrapX_=!(!this.global_||!this.extent_),this.getPointResolutionFunc_=e.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=e.metersPerUnit}canWrapX(){return this.canWrapX_}getCode(){return this.code_}getExtent(){return this.extent_}getUnits(){return this.units_}getMetersPerUnit(){return this.metersPerUnit_||I[this.units_]}getWorldExtent(){return this.worldExtent_}getAxisOrientation(){return this.axisOrientation_}isGlobal(){return this.global_}setGlobal(e){this.global_=e,this.canWrapX_=!(!e||!this.extent_)}getDefaultTileGrid(){return this.defaultTileGrid_}setDefaultTileGrid(e){this.defaultTileGrid_=e}setExtent(e){this.extent_=e,this.canWrapX_=!(!this.global_||!e)}setWorldExtent(e){this.worldExtent_=e}setGetPointResolution(e){this.getPointResolutionFunc_=e}getPointResolutionFunc(){return this.getPointResolutionFunc_}},D=6378137,L=Math.PI*D,q=[-L,-L,L,L],U=[-180,-85,180,85],z=D*Math.log(Math.tan(Math.PI/2));class j extends k{constructor(e){super({code:e,units:"m",extent:q,global:!0,worldExtent:U,getPointResolution:function(e,t){return e/Math.cosh(t[1]/D)}})}}const F=[new j("EPSG:3857"),new j("EPSG:102100"),new j("EPSG:102113"),new j("EPSG:900913"),new j("http://www.opengis.net/def/crs/EPSG/0/3857"),new j("http://www.opengis.net/gml/srs/epsg.xml#3857")];function G(e,t,r,n){const o=e.length;r=r>1?r:2,n=n??r,void 0===t&&(t=r>2?e.slice():new Array(o));for(let r=0;rz?n=z:n<-z&&(n=-z),t[r+1]=n}return t}function V(e,t,r,n){const o=e.length;r=r>1?r:2,n=n??r,void 0===t&&(t=r>2?e.slice():new Array(o));for(let r=0;r32700&&t<32761?r=t-32700:t>32600&&t<32661&&(n=!0,r=t-32600),r?{number:r,north:n}:null}const ee=[function(e){return Z(e)?new k({code:e,units:"m"}):null}];function te(e,t){if(void 0!==t)for(let r=0,n=e.length;r0}function ue(e,t,r,n,o,i,s){let a,l;const u=(r-t)/n;if(1===u)a=t;else if(2===u)a=t,l=o;else if(0!==u){let i=e[t],s=e[t+1],u=0;const c=[0];for(let o=t+n;o>1),o=+r(e[n],t),o<0?i=n+1:(s=n,a=!o);return a?i:~i}(c,p);f<0?(l=(p-c[-f-2])/(c[-f-1]-c[-f-2]),a=t+(-f-2)*n):a=t+f*n}s=s>1?s:2,i=i||new Array(s);for(let t=0;t{if(e===this.squaredTolerance_)return this.simplifiedGeometry_;this.simplifiedGeometry_=this.clone(),t&&this.simplifiedGeometry_.applyTransform(t);const r=this.simplifiedGeometry_.getFlatCoordinates();let n;switch(this.type_){case"LineString":r.length=S(r,0,this.simplifiedGeometry_.flatCoordinates_.length,this.simplifiedGeometry_.stride_,e,r,0),n=[r.length];break;case"MultiLineString":n=[],r.length=_(r,0,this.simplifiedGeometry_.ends_,this.simplifiedGeometry_.stride_,e,r,0,n);break;case"Polygon":n=[],r.length=T(r,0,this.simplifiedGeometry_.ends_,this.simplifiedGeometry_.stride_,Math.sqrt(e),r,0,n)}return n&&(this.simplifiedGeometry_=new pe(this.type_,r,n,2,this.properties_,this.id_)),this.squaredTolerance_=e,this.simplifiedGeometry_})),this}}pe.prototype.getFlatCoordinates=pe.prototype.getOrientedFlatCoordinates;const fe=pe,he=ol.style.Stroke,de=ol.style.Style,me=ol.style.Text,ge=ol.functions,ye=ol.render.canvas,ve=ol.TileState,be=ol.util;var we=r(7304);ol.layer.Image,ol.layer.Layer,ol.layer.Group,ol.Map,ol.source.Raster,ol.source.Source;const Ee=ol.tilegrid.TileGrid;r(9583);var xe=r(996),Se=r(3668);ol.View;const _e=ol.proj.Units;var Ae=r(2947),Re=r(8062),Te=r(9201),Ne=r(2938);ol.events.Event;function Oe(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Ce,Me={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],rebeccapurple:[102,51,153,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function Pe(e){return(e=Math.round(e))<0?0:e>255?255:e}function Ie(e){return e<0?0:e>1?1:e}function ke(e){return"%"===e[e.length-1]?Pe(parseFloat(e)/100*255):Pe(parseInt(e))}function De(e){return"%"===e[e.length-1]?Ie(parseFloat(e)/100):Ie(parseFloat(e))}function Le(e,t,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?e+(t-e)*r*6:2*r<1?t:3*r<2?e+(t-e)*(2/3-r)*6:e}try{Ce={}.parseCSSColor=function(e){var t,r=e.replace(/ /g,"").toLowerCase();if(r in Me)return Me[r].slice();if("#"===r[0])return 4===r.length?(t=parseInt(r.substr(1),16))>=0&&t<=4095?[(3840&t)>>4|(3840&t)>>8,240&t|(240&t)>>4,15&t|(15&t)<<4,1]:null:7===r.length&&(t=parseInt(r.substr(1),16))>=0&&t<=16777215?[(16711680&t)>>16,(65280&t)>>8,255&t,1]:null;var n=r.indexOf("("),o=r.indexOf(")");if(-1!==n&&o+1===r.length){var i=r.substr(0,n),s=r.substr(n+1,o-(n+1)).split(","),a=1;switch(i){case"rgba":if(4!==s.length)return null;a=De(s.pop());case"rgb":return 3!==s.length?null:[ke(s[0]),ke(s[1]),ke(s[2]),a];case"hsla":if(4!==s.length)return null;a=De(s.pop());case"hsl":if(3!==s.length)return null;var l=(parseFloat(s[0])%360+360)%360/360,u=De(s[1]),c=De(s[2]),p=c<=.5?c*(u+1):c+u-c*u,f=2*c-p;return[Pe(255*Le(f,p,l+1/3)),Pe(255*Le(f,p,l)),Pe(255*Le(f,p,l-1/3)),a];default:return null}}return null}}catch(e){}class qe{constructor(e,t,r,n=1){this.r=e,this.g=t,this.b=r,this.a=n}static parse(e){if(!e)return;if(e instanceof qe)return e;if("string"!=typeof e)return;const t=Ce(e);return t?new qe(t[0]/255*t[3],t[1]/255*t[3],t[2]/255*t[3],t[3]):void 0}toString(){const[e,t,r,n]=this.toArray();return`rgba(${Math.round(e)},${Math.round(t)},${Math.round(r)},${n})`}toArray(){const{r:e,g:t,b:r,a:n}=this;return 0===n?[0,0,0,0]:[255*e/n,255*t/n,255*r/n,n]}toArray01(){const{r:e,g:t,b:r,a:n}=this;return 0===n?[0,0,0,0]:[e/n,t/n,r/n,n]}toArray01PremultipliedAlpha(){const{r:e,g:t,b:r,a:n}=this;return[e,t,r,n]}}qe.black=new qe(0,0,0,1),qe.white=new qe(1,1,1,1),qe.transparent=new qe(0,0,0,0),qe.red=new qe(1,0,0,1),qe.blue=new qe(0,0,1,1);var Ue=qe;function ze(e){return"object"==typeof e?["literal",e]:e}function je(e,t){let r=e.stops;if(!r)return function(e,t){const r=["get",e.property];if(void 0===e.default)return"string"===t.type?["string",r]:r;if("enum"===t.type)return["match",r,Object.keys(t.values),r,e.default];{const n=["color"===t.type?"to-color":t.type,r,ze(e.default)];return"array"===t.type&&n.splice(1,0,t.value,t.length||null),n}}(e,t);const n=r&&"object"==typeof r[0][0],o=n||void 0!==e.property,i=n||!o;return r=r.map((e=>!o&&t.tokens&&"string"==typeof e[1]?[e[0],Ye(e[1])]:[e[0],ze(e[1])])),n?function(e,t,r){const n={},o={},i=[];for(let t=0;t3&&t===e[e.length-2]||(n&&2===e.length||e.push(t),e.push(r))}function Be(e,t){return e.type?e.type:t.expression.interpolated?"exponential":"interval"}function Ye(e){const t=["concat"],r=/{([^{}]+)}/g;let n=0;for(let o=r.exec(e);null!==o;o=r.exec(e)){const i=e.slice(n,r.lastIndex-o[0].length);n=r.lastIndex,i.length>0&&t.push(i),t.push(["get",o[1]])}if(1===t.length)return e;if(n`:"value"===e.itemType.kind?"array":`array<${t}>`}return e.kind}const ct=[Qe,Ze,et,tt,rt,st,nt,lt(ot),at];function pt(e,t){if("error"===t.kind)return null;if("array"===e.kind){if("array"===t.kind&&(0===t.N&&"value"===t.itemType.kind||!pt(e.itemType,t.itemType))&&("number"!=typeof e.N||e.N===t.N))return null}else{if(e.kind===t.kind)return null;if("value"===e.kind)for(const e of ct)if(!pt(e,t))return null}return`Expected ${ut(e)} but found ${ut(t)} instead.`}function ft(e,t){return t.some((t=>t.kind===e.kind))}function ht(e,t){return t.some((t=>"null"===t?null===e:"array"===t?Array.isArray(e):"object"===t?e&&!Array.isArray(e)&&"object"==typeof e:t===typeof e))}class dt{constructor(e,t,r){this.sensitivity=e?t?"variant":"case":t?"accent":"base",this.locale=r,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:"search"})}compare(e,t){return this.collator.compare(e,t)}resolvedLocale(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale}}class mt{constructor(e,t,r,n,o){this.text=e.normalize?e.normalize():e,this.image=t,this.scale=r,this.fontStack=n,this.textColor=o}}class gt{constructor(e){this.sections=e}static fromString(e){return new gt([new mt(e,null,null,null,null)])}isEmpty(){return 0===this.sections.length||!this.sections.some((e=>0!==e.text.length||e.image&&0!==e.image.name.length))}static factory(e){return e instanceof gt?e:gt.fromString(e)}toString(){return 0===this.sections.length?"":this.sections.map((e=>e.text)).join("")}serialize(){const e=["format"];for(const t of this.sections){if(t.image){e.push(["image",t.image.name]);continue}e.push(t.text);const r={};t.fontStack&&(r["text-font"]=["literal",t.fontStack.split(",")]),t.scale&&(r["font-scale"]=t.scale),t.textColor&&(r["text-color"]=["rgba"].concat(t.textColor.toArray())),e.push(r)}return e}}class yt{constructor(e){this.name=e.name,this.available=e.available}toString(){return this.name}static fromString(e){return e?new yt({name:e,available:!1}):null}serialize(){return["image",this.name]}}function vt(e,t,r,n){if(!("number"==typeof e&&e>=0&&e<=255&&"number"==typeof t&&t>=0&&t<=255&&"number"==typeof r&&r>=0&&r<=255)){return`Invalid rgba value [${("number"==typeof n?[e,t,r,n]:[e,t,r]).join(", ")}]: 'r', 'g', and 'b' must be between 0 and 255.`}return void 0===n||"number"==typeof n&&n>=0&&n<=1?null:`Invalid rgba value [${[e,t,r,n].join(", ")}]: 'a' must be between 0 and 1.`}function bt(e){if(null===e)return!0;if("string"==typeof e)return!0;if("boolean"==typeof e)return!0;if("number"==typeof e)return!0;if(e instanceof Ue)return!0;if(e instanceof dt)return!0;if(e instanceof gt)return!0;if(e instanceof yt)return!0;if(Array.isArray(e)){for(const t of e)if(!bt(t))return!1;return!0}if("object"==typeof e){for(const t in e)if(!bt(e[t]))return!1;return!0}return!1}function wt(e){if(null===e)return Qe;if("string"==typeof e)return et;if("boolean"==typeof e)return tt;if("number"==typeof e)return Ze;if(e instanceof Ue)return rt;if(e instanceof dt)return it;if(e instanceof gt)return st;if(e instanceof yt)return at;if(Array.isArray(e)){const t=e.length;let r;for(const t of e){const e=wt(t);if(r){if(r===e)continue;r=ot;break}r=e}return lt(r||ot,t)}return nt}function Et(e){const t=typeof e;return null===e?"":"string"===t||"number"===t||"boolean"===t?String(e):e instanceof Ue||e instanceof gt||e instanceof yt?e.toString():JSON.stringify(e)}class xt{constructor(e,t){this.type=e,this.value=t}static parse(e,t){if(2!==e.length)return t.error(`'literal' expression requires exactly one argument, but found ${e.length-1} instead.`);if(!bt(e[1]))return t.error("invalid value");const r=e[1];let n=wt(r);const o=t.expectedType;return"array"!==n.kind||0!==n.N||!o||"array"!==o.kind||"number"==typeof o.N&&0!==o.N||(n=o),new xt(n,r)}evaluate(){return this.value}eachChild(){}outputDefined(){return!0}serialize(){return"array"===this.type.kind||"object"===this.type.kind?["literal",this.value]:this.value instanceof Ue?["rgba"].concat(this.value.toArray()):this.value instanceof gt?this.value.serialize():this.value}}var St=xt;var _t=class{constructor(e){this.name="ExpressionEvaluationError",this.message=e}toJSON(){return this.message}};const At={string:et,number:Ze,boolean:tt,object:nt};class Rt{constructor(e,t){this.type=e,this.args=t}static parse(e,t){if(e.length<2)return t.error("Expected at least one argument.");let r,n=1;const o=e[0];if("array"===o){let o,i;if(e.length>2){const r=e[1];if("string"!=typeof r||!(r in At)||"object"===r)return t.error('The item type argument of "array" must be one of string, number, boolean',1);o=At[r],n++}else o=ot;if(e.length>3){if(null!==e[2]&&("number"!=typeof e[2]||e[2]<0||e[2]!==Math.floor(e[2])))return t.error('The length argument to "array" must be a positive integer literal',2);i=e[2],n++}r=lt(o,i)}else r=At[o];const i=[];for(;ne.outputDefined()))}serialize(){const e=this.type,t=[e.kind];if("array"===e.kind){const r=e.itemType;if("string"===r.kind||"number"===r.kind||"boolean"===r.kind){t.push(r.kind);const n=e.N;("number"==typeof n||this.args.length>1)&&t.push(n)}}return t.concat(this.args.map((e=>e.serialize())))}}var Tt=Rt;class Nt{constructor(e){this.type=st,this.sections=e}static parse(e,t){if(e.length<2)return t.error("Expected at least one argument.");const r=e[1];if(!Array.isArray(r)&&"object"==typeof r)return t.error("First argument must be an image or text section.");const n=[];let o=!1;for(let r=1;r<=e.length-1;++r){const i=e[r];if(o&&"object"==typeof i&&!Array.isArray(i)){o=!1;let e=null;if(i["font-scale"]&&(e=t.parse(i["font-scale"],1,Ze),!e))return null;let r=null;if(i["text-font"]&&(r=t.parse(i["text-font"],1,lt(et)),!r))return null;let s=null;if(i["text-color"]&&(s=t.parse(i["text-color"],1,rt),!s))return null;const a=n[n.length-1];a.scale=e,a.font=r,a.textColor=s}else{const i=t.parse(e[r],1,ot);if(!i)return null;const s=i.type.kind;if("string"!==s&&"value"!==s&&"null"!==s&&"resolvedImage"!==s)return t.error("Formatted text type must be 'string', 'value', 'image' or 'null'.");o=!0,n.push({content:i,scale:null,font:null,textColor:null})}}return new Nt(n)}evaluate(e){return new gt(this.sections.map((t=>{const r=t.content.evaluate(e);return wt(r)===at?new mt("",r,null,null,null):new mt(Et(r),null,t.scale?t.scale.evaluate(e):null,t.font?t.font.evaluate(e).join(","):null,t.textColor?t.textColor.evaluate(e):null)})))}eachChild(e){for(const t of this.sections)e(t.content),t.scale&&e(t.scale),t.font&&e(t.font),t.textColor&&e(t.textColor)}outputDefined(){return!1}serialize(){const e=["format"];for(const t of this.sections){e.push(t.content.serialize());const r={};t.scale&&(r["font-scale"]=t.scale.serialize()),t.font&&(r["text-font"]=t.font.serialize()),t.textColor&&(r["text-color"]=t.textColor.serialize()),e.push(r)}return e}}class Ot{constructor(e){this.type=at,this.input=e}static parse(e,t){if(2!==e.length)return t.error("Expected two arguments.");const r=t.parse(e[1],1,et);return r?new Ot(r):t.error("No image name provided.")}evaluate(e){const t=this.input.evaluate(e),r=yt.fromString(t);return r&&e.availableImages&&(r.available=e.availableImages.indexOf(t)>-1),r}eachChild(e){e(this.input)}outputDefined(){return!1}serialize(){return["image",this.input.serialize()]}}const Ct={"to-boolean":tt,"to-color":rt,"to-number":Ze,"to-string":et};class Mt{constructor(e,t){this.type=e,this.args=t}static parse(e,t){if(e.length<2)return t.error("Expected at least one argument.");const r=e[0];if(("to-boolean"===r||"to-string"===r)&&2!==e.length)return t.error("Expected one argument.");const n=Ct[r],o=[];for(let r=1;r4?`Invalid rbga value ${JSON.stringify(t)}: expected an array containing either three or four numeric values.`:vt(t[0],t[1],t[2],t[3]),!r))return new Ue(t[0]/255,t[1]/255,t[2]/255,t[3])}throw new _t(r||`Could not parse color from value '${"string"==typeof t?t:String(JSON.stringify(t))}'`)}if("number"===this.type.kind){let t=null;for(const r of this.args){if(t=r.evaluate(e),null===t)return 0;const n=Number(t);if(!isNaN(n))return n}throw new _t(`Could not convert ${JSON.stringify(t)} to number.`)}return"formatted"===this.type.kind?gt.fromString(Et(this.args[0].evaluate(e))):"resolvedImage"===this.type.kind?yt.fromString(Et(this.args[0].evaluate(e))):Et(this.args[0].evaluate(e))}eachChild(e){this.args.forEach(e)}outputDefined(){return this.args.every((e=>e.outputDefined()))}serialize(){if("formatted"===this.type.kind)return new Nt([{content:this.args[0],scale:null,font:null,textColor:null}]).serialize();if("resolvedImage"===this.type.kind)return new Ot(this.args[0]).serialize();const e=[`to-${this.type.kind}`];return this.eachChild((t=>{e.push(t.serialize())})),e}}var Pt=Mt;const It=["Unknown","Point","LineString","Polygon"];var kt=class{constructor(){this.globals=null,this.feature=null,this.featureState=null,this.formattedSection=null,this._parseColorCache={},this.availableImages=null,this.canonical=null,this.featureTileCoord=null,this.featureDistanceData=null}id(){return this.feature&&void 0!==this.feature.id?this.feature.id:null}geometryType(){return this.feature?"number"==typeof this.feature.type?It[this.feature.type]:this.feature.type:null}geometry(){return this.feature&&"geometry"in this.feature?this.feature.geometry:null}canonicalID(){return this.canonical}properties(){return this.feature&&this.feature.properties||{}}distanceFromCenter(){if(this.featureTileCoord&&this.featureDistanceData){const e=this.featureDistanceData.center,t=this.featureDistanceData.scale,{x:r,y:n}=this.featureTileCoord,o=r*t-e[0],i=n*t-e[1];return this.featureDistanceData.bearing[0]*o+this.featureDistanceData.bearing[1]*i}return 0}parseColor(e){let t=this._parseColorCache[e];return t||(t=this._parseColorCache[e]=Ue.parse(e)),t}};class Dt{constructor(e,t,r,n){this.name=e,this.type=t,this._evaluate=r,this.args=n}evaluate(e){return this._evaluate(e,this.args)}eachChild(e){this.args.forEach(e)}outputDefined(){return!1}serialize(){return[this.name].concat(this.args.map((e=>e.serialize())))}static parse(e,t){const r=e[0],n=Dt.definitions[r];if(!n)return t.error(`Unknown expression "${r}". If you wanted a literal array, use ["literal", [...]].`,0);const o=Array.isArray(n)?n[0]:n.type,i=Array.isArray(n)?[[n[1],n[2]]]:n.overloads,s=i.filter((([t])=>!Array.isArray(t)||t.length===e.length-1));let a=null;for(const[n,i]of s){a=new ur(t.registry,t.path,null,t.scope);const s=[];let l=!1;for(let t=1;t{return t=e,Array.isArray(t)?`(${t.map(ut).join(", ")})`:`(${ut(t.type)}...)`;var t})).join(" | "),n=[];for(let r=1;r=t[2])&&(!(e[1]<=t[1])&&!(e[3]>=t[3])))}function Ft(e,t){const r=(180+e[0])/360;const n=(o=e[1],(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+o*Math.PI/360)))/360);var o;const i=Math.pow(2,t.z);return[Math.round(r*i*Ut),Math.round(n*i*Ut)]}function Gt(e,t,r){const n=e[0]-t[0],o=e[1]-t[1],i=e[0]-r[0],s=e[1]-r[1];return n*s-i*o==0&&n*i<=0&&o*s<=0}function Vt(e,t){let r=!1;for(let s=0,a=t.length;sn[1]!=i[1]>n[1]&&n[0]<(i[0]-o[0])*(n[1]-o[1])/(i[1]-o[1])+o[0]&&(r=!r)}}var n,o,i;return r}function Ht(e,t){for(let r=0;r0&&p<0||c<0&&p>0}function Bt(e,t,r,n){const o=[t[0]-e[0],t[1]-e[1]],i=[n[0]-r[0],n[1]-r[1]];return 0!=(s=i)[0]*(a=o)[1]-s[1]*a[0]&&!(!$t(e,t,r,n)||!$t(r,n,e,t));var s,a}function Yt(e,t,r){for(const n of r)for(let r=0;rr[2]){const t=.5*n;let o=e[0]-r[0]>t?-n:r[0]-e[0]>t?n:0;0===o&&(o=e[0]-r[2]>t?-n:r[2]-e[0]>t?n:0),e[0]+=o}zt(t,e)}function Zt(e,t,r,n){const o=Math.pow(2,n.z)*Ut,i=[n.x*Ut,n.y*Ut],s=[];if(!e)return s;for(const n of e)for(const e of n){const n=[e.x+i[0],e.y+i[1]];Qt(n,t,r,o),s.push(n)}return s}function er(e,t,r,n){const o=Math.pow(2,n.z)*Ut,i=[n.x*Ut,n.y*Ut],s=[];if(!e)return s;for(const r of e){const e=[];for(const n of r){const r=[n.x+i[0],n.y+i[1]];zt(t,r),e.push(r)}s.push(e)}if(t[2]-t[0]<=o/2){(a=t)[0]=a[1]=1/0,a[2]=a[3]=-1/0;for(const e of s)for(const n of e)Qt(n,t,r,o)}var a;return s}class tr{constructor(e,t){this.type=tt,this.geojson=e,this.geometries=t}static parse(e,t){if(2!==e.length)return t.error(`'within' expression requires exactly one argument, but found ${e.length-1} instead.`);if(bt(e[1])){const t=e[1];if("FeatureCollection"===t.type)for(let e=0;e{t&&!nr(e)&&(t=!1)})),t}function or(e){if(e instanceof Lt&&"feature-state"===e.name)return!1;let t=!0;return e.eachChild((e=>{t&&!or(e)&&(t=!1)})),t}function ir(e,t){if(e instanceof Lt&&t.indexOf(e.name)>=0)return!1;let r=!0;return e.eachChild((e=>{r&&!ir(e,t)&&(r=!1)})),r}class sr{constructor(e,t){this.type=t.type,this.name=e,this.boundExpression=t}static parse(e,t){if(2!==e.length||"string"!=typeof e[1])return t.error("'var' expression requires exactly one string literal argument.");const r=e[1];return t.scope.has(r)?new sr(r,t.scope.get(r)):t.error(`Unknown variable "${r}". Make sure "${r}" has been bound in an enclosing "let" expression before using it.`,1)}evaluate(e){return this.boundExpression.evaluate(e)}eachChild(){}outputDefined(){return!1}serialize(){return["var",this.name]}}var ar=sr;class lr{constructor(e,t=[],r,n=new Ke,o=[]){this.registry=e,this.path=t,this.key=t.map((e=>`[${e}]`)).join(""),this.scope=n,this.errors=o,this.expectedType=r}parse(e,t,r,n,o={}){return t?this.concat(t,r,n)._parse(e,o):this._parse(e,o)}_parse(e,t){function r(e,t,r){return"assert"===r?new Tt(t,[e]):"coerce"===r?new Pt(t,[e]):e}if(null!==e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e||(e=["literal",e]),Array.isArray(e)){if(0===e.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].');const n=e[0];if("string"!=typeof n)return this.error(`Expression name must be a string, but found ${typeof n} instead. If you wanted a literal array, use ["literal", [...]].`,0),null;const o=this.registry[n];if(o){let n=o.parse(e,this);if(!n)return null;if(this.expectedType){const e=this.expectedType,o=n.type;if("string"!==e.kind&&"number"!==e.kind&&"boolean"!==e.kind&&"object"!==e.kind&&"array"!==e.kind||"value"!==o.kind)if("color"!==e.kind&&"formatted"!==e.kind&&"resolvedImage"!==e.kind||"value"!==o.kind&&"string"!==o.kind){if(this.checkSubtype(e,o))return null}else n=r(n,e,t.typeAnnotation||"coerce");else n=r(n,e,t.typeAnnotation||"assert")}if(!(n instanceof St)&&"resolvedImage"!==n.type.kind&&cr(n)){const e=new kt;try{n=new St(n.type,n.evaluate(e))}catch(e){return this.error(e.message),null}}return n}return this.error(`Unknown expression "${n}". If you wanted a literal array, use ["literal", [...]].`,0)}return void 0===e?this.error("'undefined' value invalid. Use null instead."):"object"==typeof e?this.error('Bare objects invalid. Use ["literal", {...}] instead.'):this.error(`Expected an array, but found ${typeof e} instead.`)}concat(e,t,r){const n="number"==typeof e?this.path.concat(e):this.path,o=r?this.scope.concat(r):this.scope;return new lr(this.registry,n,t||null,o,this.errors)}error(e,...t){const r=`${this.key}${t.map((e=>`[${e}]`)).join("")}`;this.errors.push(new We(r,e))}checkSubtype(e,t){const r=pt(e,t);return r&&this.error(r),r}}var ur=lr;function cr(e){if(e instanceof ar)return cr(e.boundExpression);if(e instanceof Lt&&"error"===e.name)return!1;if(e instanceof qt)return!1;if(e instanceof rr)return!1;const t=e instanceof Pt||e instanceof Tt;let r=!0;return e.eachChild((e=>{r=t?r&&cr(e):r&&e instanceof St})),!!r&&(nr(e)&&ir(e,["zoom","heatmap-density","line-progress","sky-radial-progress","accumulated","is-supported-script","pitch","distance-from-center"]))}function pr(e,t){const r=e.length-1;let n,o,i=0,s=r,a=0;for(;i<=s;)if(a=Math.floor((i+s)/2),n=e[a],o=e[a+1],n<=t){if(a===r||tt))throw new _t("Input is not a number.");s=a-1}return 0}class fr{constructor(e,t,r){this.type=e,this.input=t,this.labels=[],this.outputs=[];for(const[e,t]of r)this.labels.push(e),this.outputs.push(t)}static parse(e,t){if(e.length-1<4)return t.error(`Expected at least 4 arguments, but found only ${e.length-1}.`);if((e.length-1)%2!=0)return t.error("Expected an even number of arguments.");const r=t.parse(e[1],1,Ze);if(!r)return null;const n=[];let o=null;t.expectedType&&"value"!==t.expectedType.kind&&(o=t.expectedType);for(let r=1;r=i)return t.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.',a);const u=t.parse(s,l,o);if(!u)return null;o=o||u.type,n.push([i,u])}return new fr(o,r,n)}evaluate(e){const t=this.labels,r=this.outputs;if(1===t.length)return r[0].evaluate(e);const n=this.input.evaluate(e);if(n<=t[0])return r[0].evaluate(e);const o=t.length;if(n>=t[o-1])return r[o-1].evaluate(e);return r[pr(t,n)].evaluate(e)}eachChild(e){e(this.input);for(const t of this.outputs)e(t)}outputDefined(){return this.outputs.every((e=>e.outputDefined()))}serialize(){const e=["step",this.input.serialize()];for(let t=0;t0&&e.push(this.labels[t]),e.push(this.outputs[t].serialize());return e}}var hr=fr,dr=mr;function mr(e,t,r,n){this.cx=3*e,this.bx=3*(r-e)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*t,this.by=3*(n-t)-this.cy,this.ay=1-this.cy-this.by,this.p1x=e,this.p1y=n,this.p2x=r,this.p2y=n}mr.prototype.sampleCurveX=function(e){return((this.ax*e+this.bx)*e+this.cx)*e},mr.prototype.sampleCurveY=function(e){return((this.ay*e+this.by)*e+this.cy)*e},mr.prototype.sampleCurveDerivativeX=function(e){return(3*this.ax*e+2*this.bx)*e+this.cx},mr.prototype.solveCurveX=function(e,t){var r,n,o,i,s;for(void 0===t&&(t=1e-6),o=e,s=0;s<8;s++){if(i=this.sampleCurveX(o)-e,Math.abs(i)(n=1))return n;for(;ri?r=o:n=o,o=.5*(n-r)+r}return o},mr.prototype.solve=function(e,t){return this.sampleCurveY(this.solveCurveX(e,t))};var gr=Oe(dr);function yr(e,t,r){return e*(1-r)+t*r}var vr=Object.freeze({__proto__:null,number:yr,color:function(e,t,r){return new Ue(yr(e.r,t.r,r),yr(e.g,t.g,r),yr(e.b,t.b,r),yr(e.a,t.a,r))},array:function(e,t,r){return e.map(((e,n)=>yr(e,t[n],r)))}});const br=.95047,wr=1.08883,Er=4/29,xr=6/29,Sr=3*xr*xr,_r=xr*xr*xr,Ar=Math.PI/180,Rr=180/Math.PI;function Tr(e){return e>_r?Math.pow(e,1/3):e/Sr+Er}function Nr(e){return e>xr?e*e*e:Sr*(e-Er)}function Or(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function Cr(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function Mr(e){const t=Cr(e.r),r=Cr(e.g),n=Cr(e.b),o=Tr((.4124564*t+.3575761*r+.1804375*n)/br),i=Tr((.2126729*t+.7151522*r+.072175*n)/1);return{l:116*i-16,a:500*(o-i),b:200*(i-Tr((.0193339*t+.119192*r+.9503041*n)/wr)),alpha:e.a}}function Pr(e){let t=(e.l+16)/116,r=isNaN(e.a)?t:t+e.a/500,n=isNaN(e.b)?t:t-e.b/200;return t=1*Nr(t),r=br*Nr(r),n=wr*Nr(n),new Ue(Or(3.2404542*r-1.5371385*t-.4985314*n),Or(-.969266*r+1.8760108*t+.041556*n),Or(.0556434*r-.2040259*t+1.0572252*n),e.alpha)}function Ir(e,t,r){const n=t-e;return e+r*(n>180||n<-180?n-360*Math.round(n/360):n)}const kr={forward:Mr,reverse:Pr,interpolate:function(e,t,r){return{l:yr(e.l,t.l,r),a:yr(e.a,t.a,r),b:yr(e.b,t.b,r),alpha:yr(e.alpha,t.alpha,r)}}},Dr={forward:function(e){const{l:t,a:r,b:n}=Mr(e),o=Math.atan2(n,r)*Rr;return{h:o<0?o+360:o,c:Math.sqrt(r*r+n*n),l:t,alpha:e.a}},reverse:function(e){const t=e.h*Ar,r=e.c;return Pr({l:e.l,a:Math.cos(t)*r,b:Math.sin(t)*r,alpha:e.alpha})},interpolate:function(e,t,r){return{h:Ir(e.h,t.h,r),c:yr(e.c,t.c,r),l:yr(e.l,t.l,r),alpha:yr(e.alpha,t.alpha,r)}}};class Lr{constructor(e,t,r,n,o){this.type=e,this.operator=t,this.interpolation=r,this.input=n,this.labels=[],this.outputs=[];for(const[e,t]of o)this.labels.push(e),this.outputs.push(t)}static interpolationFactor(e,t,r,n){let o=0;if("exponential"===e.name)o=qr(t,e.base,r,n);else if("linear"===e.name)o=qr(t,1,r,n);else if("cubic-bezier"===e.name){const i=e.controlPoints;o=new gr(i[0],i[1],i[2],i[3]).solve(qr(t,1,r,n))}return o}static parse(e,t){let[r,n,o,...i]=e;if(!Array.isArray(n)||0===n.length)return t.error("Expected an interpolation type expression.",1);if("linear"===n[0])n={name:"linear"};else if("exponential"===n[0]){const e=n[1];if("number"!=typeof e)return t.error("Exponential interpolation requires a numeric base.",1,1);n={name:"exponential",base:e}}else{if("cubic-bezier"!==n[0])return t.error(`Unknown interpolation type ${String(n[0])}`,1,0);{const e=n.slice(1);if(4!==e.length||e.some((e=>"number"!=typeof e||e<0||e>1)))return t.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.",1);n={name:"cubic-bezier",controlPoints:e}}}if(e.length-1<4)return t.error(`Expected at least 4 arguments, but found only ${e.length-1}.`);if((e.length-1)%2!=0)return t.error("Expected an even number of arguments.");if(o=t.parse(o,2,Ze),!o)return null;const s=[];let a=null;"interpolate-hcl"===r||"interpolate-lab"===r?a=rt:t.expectedType&&"value"!==t.expectedType.kind&&(a=t.expectedType);for(let e=0;e=r)return t.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.',o);const u=t.parse(n,l,a);if(!u)return null;a=a||u.type,s.push([r,u])}return"number"===a.kind||"color"===a.kind||"array"===a.kind&&"number"===a.itemType.kind&&"number"==typeof a.N?new Lr(a,r,n,o,s):t.error(`Type ${ut(a)} is not interpolatable.`)}evaluate(e){const t=this.labels,r=this.outputs;if(1===t.length)return r[0].evaluate(e);const n=this.input.evaluate(e);if(n<=t[0])return r[0].evaluate(e);const o=t.length;if(n>=t[o-1])return r[o-1].evaluate(e);const i=pr(t,n),s=t[i],a=t[i+1],l=Lr.interpolationFactor(this.interpolation,n,s,a),u=r[i].evaluate(e),c=r[i+1].evaluate(e);return"interpolate"===this.operator?vr[this.type.kind.toLowerCase()](u,c,l):"interpolate-hcl"===this.operator?Dr.reverse(Dr.interpolate(Dr.forward(u),Dr.forward(c),l)):kr.reverse(kr.interpolate(kr.forward(u),kr.forward(c),l))}eachChild(e){e(this.input);for(const t of this.outputs)e(t)}outputDefined(){return this.outputs.every((e=>e.outputDefined()))}serialize(){let e;e="linear"===this.interpolation.name?["linear"]:"exponential"===this.interpolation.name?1===this.interpolation.base?["linear"]:["exponential",this.interpolation.base]:["cubic-bezier"].concat(this.interpolation.controlPoints);const t=[this.operator,e,this.input.serialize()];for(let e=0;ept(n,e.type)));return new zr(i?ot:r,o)}evaluate(e){let t,r=null,n=0;for(const o of this.args){if(n++,r=o.evaluate(e),r&&r instanceof yt&&!r.available&&(t||(t=r),r=null,n===this.args.length))return t;if(null!==r)break}return r}eachChild(e){this.args.forEach(e)}outputDefined(){return this.args.every((e=>e.outputDefined()))}serialize(){const e=["coalesce"];return this.eachChild((t=>{e.push(t.serialize())})),e}}var jr=zr;class Fr{constructor(e,t){this.type=t.type,this.bindings=[].concat(e),this.result=t}evaluate(e){return this.result.evaluate(e)}eachChild(e){for(const t of this.bindings)e(t[1]);e(this.result)}static parse(e,t){if(e.length<4)return t.error(`Expected at least 3 arguments, but found ${e.length-1} instead.`);const r=[];for(let n=1;n=r.length)throw new _t(`Array index out of bounds: ${t} > ${r.length-1}.`);if(t!==Math.floor(t))throw new _t(`Array index must be an integer, but found ${t} instead.`);return r[t]}eachChild(e){e(this.index),e(this.input)}outputDefined(){return!1}serialize(){return["at",this.index.serialize(),this.input.serialize()]}}var Hr=Vr;class $r{constructor(e,t){this.type=tt,this.needle=e,this.haystack=t}static parse(e,t){if(3!==e.length)return t.error(`Expected 2 arguments, but found ${e.length-1} instead.`);const r=t.parse(e[1],1,ot),n=t.parse(e[2],2,ot);return r&&n?ft(r.type,[tt,et,Ze,Qe,ot])?new $r(r,n):t.error(`Expected first argument to be of type boolean, string, number or null, but found ${ut(r.type)} instead`):null}evaluate(e){const t=this.needle.evaluate(e),r=this.haystack.evaluate(e);if(null==r)return!1;if(!ht(t,["boolean","string","number","null"]))throw new _t(`Expected first argument to be of type boolean, string, number or null, but found ${ut(wt(t))} instead.`);if(!ht(r,["string","array"]))throw new _t(`Expected second argument to be of type array or string, but found ${ut(wt(r))} instead.`);return r.indexOf(t)>=0}eachChild(e){e(this.needle),e(this.haystack)}outputDefined(){return!0}serialize(){return["in",this.needle.serialize(),this.haystack.serialize()]}}var Br=$r;class Yr{constructor(e,t,r){this.type=Ze,this.needle=e,this.haystack=t,this.fromIndex=r}static parse(e,t){if(e.length<=2||e.length>=5)return t.error(`Expected 3 or 4 arguments, but found ${e.length-1} instead.`);const r=t.parse(e[1],1,ot),n=t.parse(e[2],2,ot);if(!r||!n)return null;if(!ft(r.type,[tt,et,Ze,Qe,ot]))return t.error(`Expected first argument to be of type boolean, string, number or null, but found ${ut(r.type)} instead`);if(4===e.length){const o=t.parse(e[3],3,Ze);return o?new Yr(r,n,o):null}return new Yr(r,n)}evaluate(e){const t=this.needle.evaluate(e),r=this.haystack.evaluate(e);if(!ht(t,["boolean","string","number","null"]))throw new _t(`Expected first argument to be of type boolean, string, number or null, but found ${ut(wt(t))} instead.`);if(!ht(r,["string","array"]))throw new _t(`Expected second argument to be of type array or string, but found ${ut(wt(r))} instead.`);if(this.fromIndex){const n=this.fromIndex.evaluate(e);return r.indexOf(t,n)}return r.indexOf(t)}eachChild(e){e(this.needle),e(this.haystack),this.fromIndex&&e(this.fromIndex)}outputDefined(){return!1}serialize(){if(null!=this.fromIndex&&void 0!==this.fromIndex){const e=this.fromIndex.serialize();return["index-of",this.needle.serialize(),this.haystack.serialize(),e]}return["index-of",this.needle.serialize(),this.haystack.serialize()]}}var Xr=Yr;class Wr{constructor(e,t,r,n,o,i){this.inputType=e,this.type=t,this.input=r,this.cases=n,this.outputs=o,this.otherwise=i}static parse(e,t){if(e.length<5)return t.error(`Expected at least 4 arguments, but found only ${e.length-1}.`);if(e.length%2!=1)return t.error("Expected an even number of arguments.");let r,n;t.expectedType&&"value"!==t.expectedType.kind&&(n=t.expectedType);const o={},i=[];for(let s=2;sNumber.MAX_SAFE_INTEGER)return u.error(`Branch labels must be integers no larger than ${Number.MAX_SAFE_INTEGER}.`);if("number"==typeof e&&Math.floor(e)!==e)return u.error("Numeric branch labels must be integer values.");if(r){if(u.checkSubtype(r,wt(e)))return null}else r=wt(e);if(void 0!==o[String(e)])return u.error("Branch labels must be unique.");o[String(e)]=i.length}const c=t.parse(l,s,n);if(!c)return null;n=n||c.type,i.push(c)}const s=t.parse(e[1],1,ot);if(!s)return null;const a=t.parse(e[e.length-1],e.length-1,n);return a?"value"!==s.type.kind&&t.concat(1).checkSubtype(r,s.type)?null:new Wr(r,n,s,o,i,a):null}evaluate(e){const t=this.input.evaluate(e);return(wt(t)===this.inputType&&this.outputs[this.cases[t]]||this.otherwise).evaluate(e)}eachChild(e){e(this.input),this.outputs.forEach(e),e(this.otherwise)}outputDefined(){return this.outputs.every((e=>e.outputDefined()))&&this.otherwise.outputDefined()}serialize(){const e=["match",this.input.serialize()],t=Object.keys(this.cases).sort(),r=[],n={};for(const e of t){const t=n[this.cases[e]];void 0===t?(n[this.cases[e]]=r.length,r.push([this.cases[e],[e]])):r[t][1].push(e)}const o=e=>"number"===this.inputType.kind?Number(e):e;for(const[t,n]of r)1===n.length?e.push(o(n[0])):e.push(n.map(o)),e.push(this.outputs[t].serialize());return e.push(this.otherwise.serialize()),e}}var Jr=Wr;class Kr{constructor(e,t,r){this.type=e,this.branches=t,this.otherwise=r}static parse(e,t){if(e.length<4)return t.error(`Expected at least 3 arguments, but found only ${e.length-1}.`);if(e.length%2!=0)return t.error("Expected an odd number of arguments.");let r;t.expectedType&&"value"!==t.expectedType.kind&&(r=t.expectedType);const n=[];for(let o=1;ot.outputDefined()))&&this.otherwise.outputDefined()}serialize(){const e=["case"];return this.eachChild((t=>{e.push(t.serialize())})),e}}var Qr=Kr;class Zr{constructor(e,t,r,n){this.type=e,this.input=t,this.beginIndex=r,this.endIndex=n}static parse(e,t){if(e.length<=2||e.length>=5)return t.error(`Expected 3 or 4 arguments, but found ${e.length-1} instead.`);const r=t.parse(e[1],1,ot),n=t.parse(e[2],2,Ze);if(!r||!n)return null;if(!ft(r.type,[lt(ot),et,ot]))return t.error(`Expected first argument to be of type array or string, but found ${ut(r.type)} instead`);if(4===e.length){const o=t.parse(e[3],3,Ze);return o?new Zr(r.type,r,n,o):null}return new Zr(r.type,r,n)}evaluate(e){const t=this.input.evaluate(e),r=this.beginIndex.evaluate(e);if(!ht(t,["string","array"]))throw new _t(`Expected first argument to be of type array or string, but found ${ut(wt(t))} instead.`);if(this.endIndex){const n=this.endIndex.evaluate(e);return t.slice(r,n)}return t.slice(r)}eachChild(e){e(this.input),e(this.beginIndex),this.endIndex&&e(this.endIndex)}outputDefined(){return!1}serialize(){if(null!=this.endIndex&&void 0!==this.endIndex){const e=this.endIndex.serialize();return["slice",this.input.serialize(),this.beginIndex.serialize(),e]}return["slice",this.input.serialize(),this.beginIndex.serialize()]}}var en=Zr;function tn(e,t){return"=="===e||"!="===e?"boolean"===t.kind||"string"===t.kind||"number"===t.kind||"null"===t.kind||"value"===t.kind:"string"===t.kind||"number"===t.kind||"value"===t.kind}function rn(e,t,r,n){return 0===n.compare(t,r)}function nn(e,t,r){const n="=="!==e&&"!="!==e;return class o{constructor(e,t,r){this.type=tt,this.lhs=e,this.rhs=t,this.collator=r,this.hasUntypedArgument="value"===e.type.kind||"value"===t.type.kind}static parse(e,t){if(3!==e.length&&4!==e.length)return t.error("Expected two or three arguments.");const r=e[0];let i=t.parse(e[1],1,ot);if(!i)return null;if(!tn(r,i.type))return t.concat(1).error(`"${r}" comparisons are not supported for type '${ut(i.type)}'.`);let s=t.parse(e[2],2,ot);if(!s)return null;if(!tn(r,s.type))return t.concat(2).error(`"${r}" comparisons are not supported for type '${ut(s.type)}'.`);if(i.type.kind!==s.type.kind&&"value"!==i.type.kind&&"value"!==s.type.kind)return t.error(`Cannot compare types '${ut(i.type)}' and '${ut(s.type)}'.`);n&&("value"===i.type.kind&&"value"!==s.type.kind?i=new Tt(s.type,[i]):"value"!==i.type.kind&&"value"===s.type.kind&&(s=new Tt(i.type,[s])));let a=null;if(4===e.length){if("string"!==i.type.kind&&"string"!==s.type.kind&&"value"!==i.type.kind&&"value"!==s.type.kind)return t.error("Cannot use collator to compare non-string types.");if(a=t.parse(e[3],3,it),!a)return null}return new o(i,s,a)}evaluate(o){const i=this.lhs.evaluate(o),s=this.rhs.evaluate(o);if(n&&this.hasUntypedArgument){const t=wt(i),r=wt(s);if(t.kind!==r.kind||"string"!==t.kind&&"number"!==t.kind)throw new _t(`Expected arguments for "${e}" to be (string, string) or (number, number), but found (${t.kind}, ${r.kind}) instead.`)}if(this.collator&&!n&&this.hasUntypedArgument){const e=wt(i),r=wt(s);if("string"!==e.kind||"string"!==r.kind)return t(o,i,s)}return this.collator?r(o,i,s,this.collator.evaluate(o)):t(o,i,s)}eachChild(e){e(this.lhs),e(this.rhs),this.collator&&e(this.collator)}outputDefined(){return!0}serialize(){const t=[e];return this.eachChild((e=>{t.push(e.serialize())})),t}}}const on=nn("==",(function(e,t,r){return t===r}),rn),sn=nn("!=",(function(e,t,r){return t!==r}),(function(e,t,r,n){return!rn(0,t,r,n)})),an=nn("<",(function(e,t,r){return t",(function(e,t,r){return t>r}),(function(e,t,r,n){return n.compare(t,r)>0})),un=nn("<=",(function(e,t,r){return t<=r}),(function(e,t,r,n){return n.compare(t,r)<=0})),cn=nn(">=",(function(e,t,r){return t>=r}),(function(e,t,r,n){return n.compare(t,r)>=0}));class pn{constructor(e,t,r,n,o,i){this.type=et,this.number=e,this.locale=t,this.currency=r,this.unit=n,this.minFractionDigits=o,this.maxFractionDigits=i}static parse(e,t){if(3!==e.length)return t.error("Expected two arguments.");const r=t.parse(e[1],1,Ze);if(!r)return null;const n=e[2];if("object"!=typeof n||Array.isArray(n))return t.error("NumberFormat options argument must be an object.");let o=null;if(n.locale&&(o=t.parse(n.locale,1,et),!o))return null;let i=null;if(n.currency&&(i=t.parse(n.currency,1,et),!i))return null;let s=null;if(n.unit&&(s=t.parse(n.unit,1,et),!s))return null;let a=null;if(n["min-fraction-digits"]&&(a=t.parse(n["min-fraction-digits"],1,Ze),!a))return null;let l=null;return n["max-fraction-digits"]&&(l=t.parse(n["max-fraction-digits"],1,Ze),!l)?null:new pn(r,o,i,s,a,l)}evaluate(e){return new Intl.NumberFormat(this.locale?this.locale.evaluate(e):[],{style:(this.currency?"currency":this.unit&&"unit")||"decimal",currency:this.currency?this.currency.evaluate(e):void 0,unit:this.unit?this.unit.evaluate(e):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(e):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(e):void 0}).format(this.number.evaluate(e))}eachChild(e){e(this.number),this.locale&&e(this.locale),this.currency&&e(this.currency),this.unit&&e(this.unit),this.minFractionDigits&&e(this.minFractionDigits),this.maxFractionDigits&&e(this.maxFractionDigits)}outputDefined(){return!1}serialize(){const e={};return this.locale&&(e.locale=this.locale.serialize()),this.currency&&(e.currency=this.currency.serialize()),this.unit&&(e.unit=this.unit.serialize()),this.minFractionDigits&&(e["min-fraction-digits"]=this.minFractionDigits.serialize()),this.maxFractionDigits&&(e["max-fraction-digits"]=this.maxFractionDigits.serialize()),["number-format",this.number.serialize(),e]}}class fn{constructor(e){this.type=Ze,this.input=e}static parse(e,t){if(2!==e.length)return t.error(`Expected 1 argument, but found ${e.length-1} instead.`);const r=t.parse(e[1],1);return r?"array"!==r.type.kind&&"string"!==r.type.kind&&"value"!==r.type.kind?t.error(`Expected argument of type string or array, but found ${ut(r.type)} instead.`):new fn(r):null}evaluate(e){const t=this.input.evaluate(e);if("string"==typeof t)return t.length;if(Array.isArray(t))return t.length;throw new _t(`Expected value to be of type string or array, but found ${ut(wt(t))} instead.`)}eachChild(e){e(this.input)}outputDefined(){return!1}serialize(){const e=["length"];return this.eachChild((t=>{e.push(t.serialize())})),e}}const hn={"==":on,"!=":sn,">":ln,"<":an,">=":cn,"<=":un,array:Tt,at:Hr,boolean:Tt,case:Qr,coalesce:jr,collator:qt,format:Nt,image:Ot,in:Br,"index-of":Xr,interpolate:Ur,"interpolate-hcl":Ur,"interpolate-lab":Ur,length:fn,let:Gr,literal:St,match:Jr,number:Tt,"number-format":pn,object:Tt,slice:en,step:hr,string:Tt,"to-boolean":Pt,"to-color":Pt,"to-number":Pt,"to-string":Pt,var:ar,within:rr};function dn(e,[t,r,n,o]){t=t.evaluate(e),r=r.evaluate(e),n=n.evaluate(e);const i=o?o.evaluate(e):1,s=vt(t,r,n,i);if(s)throw new _t(s);return new Ue(t/255*i,r/255*i,n/255*i,i)}function mn(e,t){return e in t}function gn(e,t){const r=t[e];return void 0===r?null:r}function yn(e){return{type:e}}Lt.register(hn,{error:[{kind:"error"},[et],(e,[t])=>{throw new _t(t.evaluate(e))}],typeof:[et,[ot],(e,[t])=>ut(wt(t.evaluate(e)))],"to-rgba":[lt(Ze,4),[rt],(e,[t])=>t.evaluate(e).toArray()],rgb:[rt,[Ze,Ze,Ze],dn],rgba:[rt,[Ze,Ze,Ze,Ze],dn],has:{type:tt,overloads:[[[et],(e,[t])=>mn(t.evaluate(e),e.properties())],[[et,nt],(e,[t,r])=>mn(t.evaluate(e),r.evaluate(e))]]},get:{type:ot,overloads:[[[et],(e,[t])=>gn(t.evaluate(e),e.properties())],[[et,nt],(e,[t,r])=>gn(t.evaluate(e),r.evaluate(e))]]},"feature-state":[ot,[et],(e,[t])=>gn(t.evaluate(e),e.featureState||{})],properties:[nt,[],e=>e.properties()],"geometry-type":[et,[],e=>e.geometryType()],id:[ot,[],e=>e.id()],zoom:[Ze,[],e=>e.globals.zoom],pitch:[Ze,[],e=>e.globals.pitch||0],"distance-from-center":[Ze,[],e=>e.distanceFromCenter()],"heatmap-density":[Ze,[],e=>e.globals.heatmapDensity||0],"line-progress":[Ze,[],e=>e.globals.lineProgress||0],"sky-radial-progress":[Ze,[],e=>e.globals.skyRadialProgress||0],accumulated:[ot,[],e=>void 0===e.globals.accumulated?null:e.globals.accumulated],"+":[Ze,yn(Ze),(e,t)=>{let r=0;for(const n of t)r+=n.evaluate(e);return r}],"*":[Ze,yn(Ze),(e,t)=>{let r=1;for(const n of t)r*=n.evaluate(e);return r}],"-":{type:Ze,overloads:[[[Ze,Ze],(e,[t,r])=>t.evaluate(e)-r.evaluate(e)],[[Ze],(e,[t])=>-t.evaluate(e)]]},"/":[Ze,[Ze,Ze],(e,[t,r])=>t.evaluate(e)/r.evaluate(e)],"%":[Ze,[Ze,Ze],(e,[t,r])=>t.evaluate(e)%r.evaluate(e)],ln2:[Ze,[],()=>Math.LN2],pi:[Ze,[],()=>Math.PI],e:[Ze,[],()=>Math.E],"^":[Ze,[Ze,Ze],(e,[t,r])=>Math.pow(t.evaluate(e),r.evaluate(e))],sqrt:[Ze,[Ze],(e,[t])=>Math.sqrt(t.evaluate(e))],log10:[Ze,[Ze],(e,[t])=>Math.log(t.evaluate(e))/Math.LN10],ln:[Ze,[Ze],(e,[t])=>Math.log(t.evaluate(e))],log2:[Ze,[Ze],(e,[t])=>Math.log(t.evaluate(e))/Math.LN2],sin:[Ze,[Ze],(e,[t])=>Math.sin(t.evaluate(e))],cos:[Ze,[Ze],(e,[t])=>Math.cos(t.evaluate(e))],tan:[Ze,[Ze],(e,[t])=>Math.tan(t.evaluate(e))],asin:[Ze,[Ze],(e,[t])=>Math.asin(t.evaluate(e))],acos:[Ze,[Ze],(e,[t])=>Math.acos(t.evaluate(e))],atan:[Ze,[Ze],(e,[t])=>Math.atan(t.evaluate(e))],min:[Ze,yn(Ze),(e,t)=>Math.min(...t.map((t=>t.evaluate(e))))],max:[Ze,yn(Ze),(e,t)=>Math.max(...t.map((t=>t.evaluate(e))))],abs:[Ze,[Ze],(e,[t])=>Math.abs(t.evaluate(e))],round:[Ze,[Ze],(e,[t])=>{const r=t.evaluate(e);return r<0?-Math.round(-r):Math.round(r)}],floor:[Ze,[Ze],(e,[t])=>Math.floor(t.evaluate(e))],ceil:[Ze,[Ze],(e,[t])=>Math.ceil(t.evaluate(e))],"filter-==":[tt,[et,ot],(e,[t,r])=>e.properties()[t.value]===r.value],"filter-id-==":[tt,[ot],(e,[t])=>e.id()===t.value],"filter-type-==":[tt,[et],(e,[t])=>e.geometryType()===t.value],"filter-<":[tt,[et,ot],(e,[t,r])=>{const n=e.properties()[t.value],o=r.value;return typeof n==typeof o&&n{const r=e.id(),n=t.value;return typeof r==typeof n&&r":[tt,[et,ot],(e,[t,r])=>{const n=e.properties()[t.value],o=r.value;return typeof n==typeof o&&n>o}],"filter-id->":[tt,[ot],(e,[t])=>{const r=e.id(),n=t.value;return typeof r==typeof n&&r>n}],"filter-<=":[tt,[et,ot],(e,[t,r])=>{const n=e.properties()[t.value],o=r.value;return typeof n==typeof o&&n<=o}],"filter-id-<=":[tt,[ot],(e,[t])=>{const r=e.id(),n=t.value;return typeof r==typeof n&&r<=n}],"filter->=":[tt,[et,ot],(e,[t,r])=>{const n=e.properties()[t.value],o=r.value;return typeof n==typeof o&&n>=o}],"filter-id->=":[tt,[ot],(e,[t])=>{const r=e.id(),n=t.value;return typeof r==typeof n&&r>=n}],"filter-has":[tt,[ot],(e,[t])=>t.value in e.properties()],"filter-has-id":[tt,[],e=>null!==e.id()&&void 0!==e.id()],"filter-type-in":[tt,[lt(et)],(e,[t])=>t.value.indexOf(e.geometryType())>=0],"filter-id-in":[tt,[lt(ot)],(e,[t])=>t.value.indexOf(e.id())>=0],"filter-in-small":[tt,[et,lt(ot)],(e,[t,r])=>r.value.indexOf(e.properties()[t.value])>=0],"filter-in-large":[tt,[et,lt(ot)],(e,[t,r])=>function(e,t,r,n){for(;r<=n;){const o=r+n>>1;if(t[o]===e)return!0;t[o]>e?n=o-1:r=o+1}return!1}(e.properties()[t.value],r.value,0,r.value.length-1)],all:{type:tt,overloads:[[[tt,tt],(e,[t,r])=>t.evaluate(e)&&r.evaluate(e)],[yn(tt),(e,t)=>{for(const r of t)if(!r.evaluate(e))return!1;return!0}]]},any:{type:tt,overloads:[[[tt,tt],(e,[t,r])=>t.evaluate(e)||r.evaluate(e)],[yn(tt),(e,t)=>{for(const r of t)if(r.evaluate(e))return!0;return!1}]]},"!":[tt,[tt],(e,[t])=>!t.evaluate(e)],"is-supported-script":[tt,[et],(e,[t])=>{const r=e.globals&&e.globals.isSupportedScript;return!r||r(t.evaluate(e))}],upcase:[et,[et],(e,[t])=>t.evaluate(e).toUpperCase()],downcase:[et,[et],(e,[t])=>t.evaluate(e).toLowerCase()],concat:[et,yn(ot),(e,t)=>t.map((t=>Et(t.evaluate(e)))).join("")],"resolved-locale":[et,[it],(e,[t])=>t.evaluate(e).resolvedLocale()]});var vn=hn;function bn(e){return{result:"success",value:e}}function wn(e){return{result:"error",value:e}}function En(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}class xn{constructor(e,t){this.expression=e,this._warningHistory={},this._evaluator=new kt,this._defaultValue=t?function(e){return"color"===e.type&&(En(e.default)||Array.isArray(e.default))?new Ue(0,0,0,0):"color"===e.type?Ue.parse(e.default)||null:void 0===e.default?null:e.default}(t):null,this._enumValues=t&&"enum"===t.type?t.values:null}evaluateWithoutErrorHandling(e,t,r,n,o,i,s,a){return this._evaluator.globals=e,this._evaluator.feature=t,this._evaluator.featureState=r,this._evaluator.canonical=n||null,this._evaluator.availableImages=o||null,this._evaluator.formattedSection=i,this._evaluator.featureTileCoord=s||null,this._evaluator.featureDistanceData=a||null,this.expression.evaluate(this._evaluator)}evaluate(e,t,r,n,o,i,s,a){this._evaluator.globals=e,this._evaluator.feature=t||null,this._evaluator.featureState=r||null,this._evaluator.canonical=n||null,this._evaluator.availableImages=o||null,this._evaluator.formattedSection=i||null,this._evaluator.featureTileCoord=s||null,this._evaluator.featureDistanceData=a||null;try{const e=this.expression.evaluate(this._evaluator);if(null==e||"number"==typeof e&&e!=e)return this._defaultValue;if(this._enumValues&&!(e in this._enumValues))throw new _t(`Expected value to be one of ${Object.keys(this._enumValues).map((e=>JSON.stringify(e))).join(", ")}, but found ${JSON.stringify(e)} instead.`);return e}catch(e){return this._warningHistory[e.message]||(this._warningHistory[e.message]=!0,"undefined"!=typeof console&&console.warn(e.message)),this._defaultValue}}}function Sn(e,t){const r=new ur(vn,[],t?function(e){const t={color:rt,string:et,number:Ze,enum:et,boolean:tt,formatted:st,resolvedImage:at};if("array"===e.type)return lt(t[e.value]||ot,e.length);return t[e.type]}(t):void 0),n=r.parse(e,void 0,void 0,void 0,t&&"string"===t.type?{typeAnnotation:"coerce"}:void 0);return n?bn(new xn(n,t)):wn(r.errors)}class _n{constructor(e,t){this.kind=e,this._styleExpression=t,this.isStateDependent="constant"!==e&&!or(t.expression)}evaluateWithoutErrorHandling(e,t,r,n,o,i){return this._styleExpression.evaluateWithoutErrorHandling(e,t,r,n,o,i)}evaluate(e,t,r,n,o,i){return this._styleExpression.evaluate(e,t,r,n,o,i)}}class An{constructor(e,t,r,n){this.kind=e,this.zoomStops=r,this._styleExpression=t,this.isStateDependent="camera"!==e&&!or(t.expression),this.interpolationType=n}evaluateWithoutErrorHandling(e,t,r,n,o,i){return this._styleExpression.evaluateWithoutErrorHandling(e,t,r,n,o,i)}evaluate(e,t,r,n,o,i){return this._styleExpression.evaluate(e,t,r,n,o,i)}interpolationFactor(e,t,r){return this.interpolationType?Ur.interpolationFactor(this.interpolationType,e,t,r):0}}function Rn(e,t){if("error"===(e=Sn(e,t)).result)return e;const r=e.value.expression,n=nr(r);if(!n&&!function(e){return"data-driven"===e["property-type"]}(t))return wn([new We("","data expressions not supported")]);const o=ir(r,["zoom","pitch","distance-from-center"]);if(!o&&!function(e){return!!e.expression&&e.expression.parameters.indexOf("zoom")>-1}(t))return wn([new We("","zoom expressions not supported")]);const i=Tn(r);if(!i&&!o)return wn([new We("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.')]);if(i instanceof We)return wn([i]);if(i instanceof Ur&&!function(e){return!!e.expression&&e.expression.interpolated}(t))return wn([new We("",'"interpolate" expressions cannot be used with this property')]);if(!i)return bn(new _n(n?"constant":"source",e.value));const s=i instanceof Ur?i.interpolation:void 0;return bn(new An(n?"camera":"composite",e.value,i.labels,s))}function Tn(e){let t=null;if(e instanceof Gr)t=Tn(e.result);else if(e instanceof jr){for(const r of e.args)if(t=Tn(r),t)break}else(e instanceof hr||e instanceof Ur)&&e.input instanceof Lt&&"zoom"===e.input.name&&(t=e);return t instanceof We||e.eachChild((e=>{const r=Tn(e);r instanceof We?t=r:!t&&r?t=new We("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.'):t&&r&&t!==r&&(t=new We("",'Only one zoom-based "step" or "interpolate" subexpression may be used in an expression.'))})),t}function Nn(e){if(Array.isArray(e))return e.map(Nn);if(e instanceof Object&&!(e instanceof Number||e instanceof String||e instanceof Boolean)){const t={};for(const r in e)t[r]=Nn(e[r]);return t}return function(e){return e instanceof Number||e instanceof String||e instanceof Boolean?e.valueOf():e}(e)}var On={$version:8,$root:{version:{required:!0,type:"enum",values:[8]},name:{type:"string"},metadata:{type:"*"},center:{type:"array",value:"number"},zoom:{type:"number"},bearing:{type:"number",default:0,period:360,units:"degrees"},pitch:{type:"number",default:0,units:"degrees"},light:{type:"light"},terrain:{type:"terrain"},fog:{type:"fog"},sources:{required:!0,type:"sources"},sprite:{type:"string"},glyphs:{type:"string"},transition:{type:"transition"},projection:{type:"projection"},layers:{required:!0,type:"array",value:"layer"}},sources:{"*":{type:"source"}},source:["source_vector","source_raster","source_raster_dem","source_geojson","source_video","source_image"],source_vector:{type:{required:!0,type:"enum",values:{vector:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},attribution:{type:"string"},promoteId:{type:"promoteId"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_raster:{type:{required:!0,type:"enum",values:{raster:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},attribution:{type:"string"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_raster_dem:{type:{required:!0,type:"enum",values:{"raster-dem":{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},attribution:{type:"string"},encoding:{type:"enum",values:{terrarium:{},mapbox:{}},default:"mapbox"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_geojson:{type:{required:!0,type:"enum",values:{geojson:{}}},data:{type:"*"},maxzoom:{type:"number",default:18},attribution:{type:"string"},buffer:{type:"number",default:128,maximum:512,minimum:0},filter:{type:"*"},tolerance:{type:"number",default:.375},cluster:{type:"boolean",default:!1},clusterRadius:{type:"number",default:50,minimum:0},clusterMaxZoom:{type:"number"},clusterMinPoints:{type:"number"},clusterProperties:{type:"*"},lineMetrics:{type:"boolean",default:!1},generateId:{type:"boolean",default:!1},promoteId:{type:"promoteId"}},source_video:{type:{required:!0,type:"enum",values:{video:{}}},urls:{required:!0,type:"array",value:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},source_image:{type:{required:!0,type:"enum",values:{image:{}}},url:{required:!0,type:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},layer:{id:{type:"string",required:!0},type:{type:"enum",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},"fill-extrusion":{},raster:{},hillshade:{},background:{},sky:{}},required:!0},metadata:{type:"*"},source:{type:"string"},"source-layer":{type:"string"},minzoom:{type:"number",minimum:0,maximum:24},maxzoom:{type:"number",minimum:0,maximum:24},filter:{type:"filter"},layout:{type:"layout"},paint:{type:"paint"}},layout:["layout_fill","layout_line","layout_circle","layout_heatmap","layout_fill-extrusion","layout_symbol","layout_raster","layout_hillshade","layout_background","layout_sky"],layout_background:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_sky:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_fill:{"fill-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_circle:{"circle-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_heatmap:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},"layout_fill-extrusion":{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"},"fill-extrusion-edge-radius":{type:"number",private:!0,default:0,minimum:0,maximum:1,"property-type":"constant"}},layout_line:{"line-cap":{type:"enum",values:{butt:{},round:{},square:{}},default:"butt",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-join":{type:"enum",values:{bevel:{},round:{},miter:{}},default:"miter",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-miter-limit":{type:"number",default:2,requires:[{"line-join":"miter"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-round-limit":{type:"number",default:1.05,requires:[{"line-join":"round"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_symbol:{"symbol-placement":{type:"enum",values:{point:{},line:{},"line-center":{}},default:"point",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-spacing":{type:"number",default:250,minimum:1,units:"pixels",requires:[{"symbol-placement":"line"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"symbol-avoid-edges":{type:"boolean",default:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"symbol-z-order":{type:"enum",values:{auto:{},"viewport-y":{},source:{}},default:"auto",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-allow-overlap":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-ignore-placement":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-optional":{type:"boolean",default:!1,requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-size":{type:"number",default:1,minimum:0,units:"factor of the original icon size",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-text-fit":{type:"enum",values:{none:{},width:{},height:{},both:{}},default:"none",requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-text-fit-padding":{type:"array",value:"number",length:4,default:[0,0,0,0],units:"pixels",requires:["icon-image","text-field",{"icon-text-fit":["both","width","height"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-image":{type:"resolvedImage",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-keep-upright":{type:"boolean",default:!1,requires:["icon-image",{"icon-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-offset":{type:"array",value:"number",length:2,default:[0,0],requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-field":{type:"formatted",default:"",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-font":{type:"array",value:"string",default:["Open Sans Regular","Arial Unicode MS Regular"],requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-size":{type:"number",default:16,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-width":{type:"number",default:10,minimum:0,units:"ems",requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-line-height":{type:"number",default:1.2,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-letter-spacing":{type:"number",default:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-justify":{type:"enum",values:{auto:{},left:{},center:{},right:{}},default:"center",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-radial-offset":{type:"number",units:"ems",default:0,requires:["text-field"],"property-type":"data-driven",expression:{interpolated:!0,parameters:["zoom","feature"]}},"text-variable-anchor":{type:"array",value:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["text-field",{"!":"text-variable-anchor"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-angle":{type:"number",default:45,units:"degrees",requires:["text-field",{"symbol-placement":["line","line-center"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-writing-mode":{type:"array",value:"enum",values:{horizontal:{},vertical:{}},requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-keep-upright":{type:"boolean",default:!0,requires:["text-field",{"text-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-transform":{type:"enum",values:{none:{},uppercase:{},lowercase:{}},default:"none",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-offset":{type:"array",value:"number",units:"ems",length:2,default:[0,0],requires:["text-field",{"!":"text-radial-offset"}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-allow-overlap":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-ignore-placement":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-optional":{type:"boolean",default:!1,requires:["text-field","icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_raster:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_hillshade:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},filter:{type:"array",value:"*"},filter_symbol:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature","pitch","distance-from-center"]}},filter_fill:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_line:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_circle:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},"filter_fill-extrusion":{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_heatmap:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_operator:{type:"enum",values:{"==":{},"!=":{},">":{},">=":{},"<":{},"<=":{},in:{},"!in":{},all:{},any:{},none:{},has:{},"!has":{},within:{}}},geometry_type:{type:"enum",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:"expression"},stops:{type:"array",value:"function_stop"},base:{type:"number",default:1,minimum:0},property:{type:"string",default:"$zoom"},type:{type:"enum",values:{identity:{},exponential:{},interval:{},categorical:{}},default:"exponential"},colorSpace:{type:"enum",values:{rgb:{},lab:{},hcl:{}},default:"rgb"},default:{type:"*",required:!1}},function_stop:{type:"array",minimum:0,maximum:24,value:["number","color"],length:2},expression:{type:"array",value:"*",minimum:1},expression_name:{type:"enum",values:{let:{group:"Variable binding"},var:{group:"Variable binding"},literal:{group:"Types"},array:{group:"Types"},at:{group:"Lookup"},in:{group:"Lookup"},"index-of":{group:"Lookup"},slice:{group:"Lookup"},case:{group:"Decision"},match:{group:"Decision"},coalesce:{group:"Decision"},step:{group:"Ramps, scales, curves"},interpolate:{group:"Ramps, scales, curves"},"interpolate-hcl":{group:"Ramps, scales, curves"},"interpolate-lab":{group:"Ramps, scales, curves"},ln2:{group:"Math"},pi:{group:"Math"},e:{group:"Math"},typeof:{group:"Types"},string:{group:"Types"},number:{group:"Types"},boolean:{group:"Types"},object:{group:"Types"},collator:{group:"Types"},format:{group:"Types"},image:{group:"Types"},"number-format":{group:"Types"},"to-string":{group:"Types"},"to-number":{group:"Types"},"to-boolean":{group:"Types"},"to-rgba":{group:"Color"},"to-color":{group:"Types"},rgb:{group:"Color"},rgba:{group:"Color"},get:{group:"Lookup"},has:{group:"Lookup"},length:{group:"Lookup"},properties:{group:"Feature data"},"feature-state":{group:"Feature data"},"geometry-type":{group:"Feature data"},id:{group:"Feature data"},zoom:{group:"Camera"},pitch:{group:"Camera"},"distance-from-center":{group:"Camera"},"heatmap-density":{group:"Heatmap"},"line-progress":{group:"Feature data"},"sky-radial-progress":{group:"sky"},accumulated:{group:"Feature data"},"+":{group:"Math"},"*":{group:"Math"},"-":{group:"Math"},"/":{group:"Math"},"%":{group:"Math"},"^":{group:"Math"},sqrt:{group:"Math"},log10:{group:"Math"},ln:{group:"Math"},log2:{group:"Math"},sin:{group:"Math"},cos:{group:"Math"},tan:{group:"Math"},asin:{group:"Math"},acos:{group:"Math"},atan:{group:"Math"},min:{group:"Math"},max:{group:"Math"},round:{group:"Math"},abs:{group:"Math"},ceil:{group:"Math"},floor:{group:"Math"},distance:{group:"Math"},"==":{group:"Decision"},"!=":{group:"Decision"},">":{group:"Decision"},"<":{group:"Decision"},">=":{group:"Decision"},"<=":{group:"Decision"},all:{group:"Decision"},any:{group:"Decision"},"!":{group:"Decision"},within:{group:"Decision"},"is-supported-script":{group:"String"},upcase:{group:"String"},downcase:{group:"String"},concat:{group:"String"},"resolved-locale":{group:"String"}}},fog:{range:{type:"array",default:[.5,10],minimum:-20,maximum:20,length:2,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"high-color":{type:"color","property-type":"data-constant",default:"#245cdf",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"space-color":{type:"color","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],4,"#010b19",7,"#367ab9"],expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"horizon-blend":{type:"number","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],4,.2,7,.1],minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"star-intensity":{type:"number","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],5,.35,6,0],minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},light:{anchor:{type:"enum",default:"viewport",values:{map:{},viewport:{}},"property-type":"data-constant",transition:!1,expression:{interpolated:!1,parameters:["zoom"]}},position:{type:"array",default:[1.15,210,30],length:3,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},intensity:{type:"number","property-type":"data-constant",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},projection:{name:{type:"enum",values:{albers:{},equalEarth:{},equirectangular:{},lambertConformalConic:{},mercator:{},naturalEarth:{},winkelTripel:{},globe:{}},default:"mercator",required:!0},center:{type:"array",length:2,value:"number","property-type":"data-constant",minimum:[-180,-90],maximum:[180,90],transition:!1,requires:[{name:["albers","lambertConformalConic"]}]},parallels:{type:"array",length:2,value:"number","property-type":"data-constant",minimum:[-90,-90],maximum:[90,90],transition:!1,requires:[{name:["albers","lambertConformalConic"]}]}},terrain:{source:{type:"string",required:!0},exaggeration:{type:"number","property-type":"data-constant",default:1,minimum:0,maximum:1e3,expression:{interpolated:!0,parameters:["zoom"]},transition:!0,requires:["source"]}},paint:["paint_fill","paint_line","paint_circle","paint_heatmap","paint_fill-extrusion","paint_symbol","paint_raster","paint_hillshade","paint_background","paint_sky"],paint_fill:{"fill-antialias":{type:"boolean",default:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-outline-color":{type:"color",transition:!0,requires:[{"!":"fill-pattern"},{"fill-antialias":!0}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"}},"paint_fill-extrusion":{"fill-extrusion-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-extrusion-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-extrusion-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"fill-extrusion-height":{type:"number",default:0,minimum:0,units:"meters",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-base":{type:"number",default:0,minimum:0,units:"meters",transition:!0,requires:["fill-extrusion-height"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-vertical-gradient":{type:"boolean",default:!0,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-ambient-occlusion-intensity":{"property-type":"data-constant",type:"number",private:!0,default:0,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"fill-extrusion-ambient-occlusion-radius":{"property-type":"data-constant",type:"number",private:!0,default:3,minimum:0,expression:{interpolated:!0,parameters:["zoom"]},transition:!0,requires:["fill-extrusion-edge-radius"]}},paint_line:{"line-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"line-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["line-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-width":{type:"number",default:1,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-gap-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-offset":{type:"number",default:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-dasharray":{type:"array",value:"number",minimum:0,transition:!1,units:"line widths",requires:[{"!":"line-pattern"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-gradient":{type:"color",transition:!1,requires:[{"!":"line-pattern"},{source:"geojson",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:["line-progress"]},"property-type":"color-ramp"},"line-trim-offset":{type:"array",value:"number",length:2,default:[0,0],minimum:[0,0],maximum:[1,1],transition:!1,requires:[{source:"geojson",has:{lineMetrics:!0}}],"property-type":"constant"}},paint_circle:{"circle-radius":{type:"number",default:5,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-blur":{type:"number",default:0,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"circle-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["circle-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-scale":{type:"enum",values:{map:{},viewport:{}},default:"map",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-alignment":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-stroke-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"}},paint_heatmap:{"heatmap-radius":{type:"number",default:30,minimum:1,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-weight":{type:"number",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-intensity":{type:"number",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"heatmap-color":{type:"color",default:["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 255, 0)",.1,"royalblue",.3,"cyan",.5,"lime",.7,"yellow",1,"red"],transition:!1,expression:{interpolated:!0,parameters:["heatmap-density"]},"property-type":"color-ramp"},"heatmap-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_symbol:{"icon-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-color":{type:"color",default:"#000000",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["icon-image","icon-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-color":{type:"color",default:"#000000",transition:!0,overridable:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["text-field","text-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_raster:{"raster-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-hue-rotate":{type:"number",default:0,period:360,transition:!0,units:"degrees",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-min":{type:"number",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-max":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-saturation":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-contrast":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-resampling":{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"raster-fade-duration":{type:"number",default:300,minimum:0,transition:!1,units:"milliseconds",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_hillshade:{"hillshade-illumination-direction":{type:"number",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-illumination-anchor":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-exaggeration":{type:"number",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-shadow-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-highlight-color":{type:"color",default:"#FFFFFF",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-accent-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_background:{"background-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"background-pattern"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"background-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"background-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_sky:{"sky-type":{type:"enum",values:{gradient:{},atmosphere:{}},default:"atmosphere",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-atmosphere-sun":{type:"array",value:"number",length:2,units:"degrees",minimum:[0,0],maximum:[360,180],transition:!1,requires:[{"sky-type":"atmosphere"}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-atmosphere-sun-intensity":{type:"number",requires:[{"sky-type":"atmosphere"}],default:10,minimum:0,maximum:100,transition:!1,"property-type":"data-constant"},"sky-gradient-center":{type:"array",requires:[{"sky-type":"gradient"}],value:"number",default:[0,0],length:2,units:"degrees",minimum:[0,0],maximum:[360,180],transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-gradient-radius":{type:"number",requires:[{"sky-type":"gradient"}],default:90,minimum:0,maximum:180,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-gradient":{type:"color",default:["interpolate",["linear"],["sky-radial-progress"],.8,"#87ceeb",1,"white"],transition:!1,requires:[{"sky-type":"gradient"}],expression:{interpolated:!0,parameters:["sky-radial-progress"]},"property-type":"color-ramp"},"sky-atmosphere-halo-color":{type:"color",default:"white",transition:!1,requires:[{"sky-type":"atmosphere"}],"property-type":"data-constant"},"sky-atmosphere-color":{type:"color",default:"white",transition:!1,requires:[{"sky-type":"atmosphere"}],"property-type":"data-constant"},"sky-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},transition:{duration:{type:"number",default:300,minimum:0,units:"milliseconds"},delay:{type:"number",default:0,minimum:0,units:"milliseconds"}},"property-type":{"data-driven":{type:"property-type"},"color-ramp":{type:"property-type"},"data-constant":{type:"property-type"},constant:{type:"property-type"}},promoteId:{"*":{type:"string"}}};function Cn(e){if(!0===e||!1===e)return!0;if(!Array.isArray(e)||0===e.length)return!1;switch(e[0]){case"has":return e.length>=2&&"$id"!==e[1]&&"$type"!==e[1];case"in":return e.length>=3&&("string"!=typeof e[1]||Array.isArray(e[2]));case"!in":case"!has":case"none":return!1;case"==":case"!=":case">":case">=":case"<":case"<=":return 3!==e.length||Array.isArray(e[1])||Array.isArray(e[2]);case"any":case"all":for(const t of e.slice(1))if(!Cn(t)&&"boolean"!=typeof t)return!1;return!0;default:return!0}}function Mn(e,t="fill"){if(null==e)return{filter:()=>!0,needGeometry:!1,needFeature:!1};Cn(e)||(e=Un(e));const r=e;let n=!0;try{n=function(e){if(!kn(e))return e;let t=Nn(e);return In(t),t=Pn(t),t}(r)}catch(e){console.warn(`Failed to extract static filter. Filter will continue working, but at higher memory usage and slower framerate.\nThis is most likely a bug, please report this via https://github.com/mapbox/mapbox-gl-js/issues/new?assignees=&labels=&template=Bug_report.md\nand paste the contents of this message in the report.\nThank you!\nFilter Expression:\n${JSON.stringify(r,null,2)}\n `)}const o=On[`filter_${t}`],i=Sn(n,o);let s=null;if("error"===i.result)throw new Error(i.value.map((e=>`${e.key}: ${e.message}`)).join(", "));s=(e,t,r)=>i.value.evaluate(e,t,{},r);let a=null,l=null;if(n!==r){const e=Sn(r,o);if("error"===e.result)throw new Error(e.value.map((e=>`${e.key}: ${e.message}`)).join(", "));a=(t,r,n,o,i)=>e.value.evaluate(t,r,{},n,void 0,void 0,o,i),l=!nr(e.value.expression)}return{filter:s,dynamicFilter:a||void 0,needGeometry:qn(n),needFeature:!!l}}function Pn(e){if(!Array.isArray(e))return e;const t=function(e){if(Dn.has(e[0]))for(let t=1;tPn(e)))}function In(e){let t=!1;const r=[];if("case"===e[0]){for(let n=1;n",">=","<","<=","to-boolean"]);function Ln(e,t){return et?1:0}function qn(e){if(!Array.isArray(e))return!1;if("within"===e[0])return!0;for(let t=1;t"===t||"<="===t||">="===t?zn(e[1],e[2],t):"any"===t?(r=e.slice(1),["any"].concat(r.map(Un))):"all"===t?["all"].concat(e.slice(1).map(Un)):"none"===t?["all"].concat(e.slice(1).map(Un).map(Gn)):"in"===t?jn(e[1],e.slice(2)):"!in"===t?Gn(jn(e[1],e.slice(2))):"has"===t?Fn(e[1]):"!has"===t?Gn(Fn(e[1])):"within"!==t||e}function zn(e,t,r){switch(e){case"$type":return[`filter-type-${r}`,t];case"$id":return[`filter-id-${r}`,t];default:return[`filter-${r}`,e,t]}}function jn(e,t){if(0===t.length)return!1;switch(e){case"$type":return["filter-type-in",["literal",t]];case"$id":return["filter-id-in",["literal",t]];default:return t.length>200&&!t.some((e=>typeof e!=typeof t[0]))?["filter-in-large",e,["literal",t.sort(Ln)]]:["filter-in-small",e,["literal",t]]}}function Fn(e){switch(e){case"$type":return!0;case"$id":return["filter-has-id"];default:return["filter-has",e]}}function Gn(e){return["!",e]}var Vn=["type","source","source-layer","minzoom","maxzoom","filter","layout"];function Hn(e,t){const r={};for(const t in e)"ref"!==t&&(r[t]=e[t]);return Vn.forEach((e=>{e in t&&(r[e]=t[e])})),r}function $n(e){e=e.slice();const t=Object.create(null);for(let r=0;r1?p[p.length-2].toLowerCase():"";if(f==h||f==h.replace("-","")||d+"-"+f==h){s=o?s:Bn[h],p.pop(),d&&h.startsWith(d)&&p.pop();break}}o||"number"!=typeof f||(s=f,o=!0);var m=p.join(Yn).replace("Klokantech Noto Sans","Noto Sans");-1!==m.indexOf(Yn)&&(m='"'+m+'"'),l.push(m)}n=Wn[e]=[a,s,l]}return n[0]+Yn+n[1]+Yn+t+"px"+(r?"/"+r:"")+Yn+n[2]}));const Kn="https://api.mapbox.com";function Qn(e){const t="mapbox://";return 0!==e.indexOf(t)?"":e.slice(9)}function Zn(e,t){const r=Qn(e);if(!r)return decodeURI(new URL(e,location.href).href);const n="styles/";if(0!==r.indexOf(n))throw new Error(`unexpected style url: ${e}`);const o=r.slice(7);return`${Kn}/styles/v1/${o}?&access_token=${t}`}const eo=["a","b","c","d"];function to(e,t,r,n){const o=new URL(e,n),i=Qn(e);if(!i)return t?(o.searchParams.has(r)||o.searchParams.set(r,t),[decodeURI(o.href)]):[decodeURI(o.href)];if("mapbox.satellite"===i){const e=window.devicePixelRatio>=1.5?"@2x":"";return[`https://api.mapbox.com/v4/${i}/{z}/{x}/{y}${e}.webp?access_token=${t}`]}return eo.map((e=>`https://${e}.tiles.mapbox.com/v4/${i}/{z}/{x}/{y}.vector.pbf?access_token=${t}`))}const ro={},no={};let oo=0;function io(e){return e.id||(e.id=oo++),e.id}function so(e,t){return io(e)+"."+(0,be.getUid)(t)}function ao(e){let t=ro[e.id];return t||(t={},ro[io(e)]=t),t}function lo(e){let t=no[e.id];return t||(t={},no[io(e)]=t),t}function uo(e){return e*Math.PI/180}const co=function(){const e=[];for(let t=78271.51696402048;e.length<=24;t/=2)e.push(t);return e}();function po(e,t){if("undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"undefined"!=typeof OffscreenCanvas)return new OffscreenCanvas(e,t);const r=document.createElement("canvas");return r.width=e,r.height=t,r}function fo(e,t){let r=0;const n=t.length;for(;ro)).then((e=>(e instanceof Request||(e=new Request(e)),e.headers.get("Accept")||e.headers.set("Accept","application/json"),n&&(n.request=e),fetch(e).then((function(e){return delete mo[t],e.ok?e.json():Promise.reject(new Error("Error fetching source "+t))})).catch((function(e){return delete mo[t],Promise.reject(new Error("Error fetching source "+t))})))));return mo[t]=[o,i],i}function yo(e,t){if("string"!=typeof e)return Promise.resolve(e);if(!e.trim().startsWith("{"))return go("Style",e=Zn(e,t.accessToken),t);try{const t=JSON.parse(e);return Promise.resolve(t)}catch(e){return Promise.reject(e)}}const vo={};function bo(e,t,r={}){const n=[t,JSON.stringify(e)].toString();let o=vo[n];if(!o||r.transformRequest){let i;r.transformRequest&&(i=(e,t)=>{const n=r.transformRequest&&r.transformRequest(t,"Tiles")||t;if(e instanceof undefined.VectorTile)e.setLoader(((t,r,o)=>{(0,ge.toPromise)((()=>n)).then((r=>{fetch(r).then((e=>e.arrayBuffer())).then((r=>{const n=e.getFormat().readFeatures(r,{extent:t,featureProjection:o});e.setFeatures(n)})).catch((t=>e.setState(ve.ERROR)))}))}));else{const t=e.getImage();(0,ge.toPromise)((()=>n)).then((r=>{r instanceof Request?fetch(r).then((e=>e.blob())).then((e=>{const r=URL.createObjectURL(e);t.addEventListener("load",(()=>URL.revokeObjectURL(r))),t.addEventListener("error",(()=>URL.revokeObjectURL(r))),t.src=r})).catch((t=>e.setState(ve.ERROR))):t.src=r}))}});const s=e.url;if(s&&!e.tiles){const n=to(s,r.accessToken,r.accessTokenParam||"access_token",t||location.href);if(s.startsWith("mapbox://"))o=Promise.resolve({tileJson:Object.assign({},e,{url:void 0,tiles:n}),tileLoadFunction:i});else{const e={};o=go("Source",n[0],r,e).then((function(t){return t.tiles=t.tiles.map((function(n){return"tms"===t.scheme&&(n=n.replace("{y}","{-y}")),to(n,r.accessToken,r.accessTokenParam||"access_token",e.request.url)[0]})),Promise.resolve({tileJson:t,tileLoadFunction:i})}))}}else e=Object.assign({},e,{tiles:e.tiles.map((function(n){return"tms"===e.scheme&&(n=n.replace("{y}","{-y}")),to(n,r.accessToken,r.accessTokenParam||"access_token",t||location.href)[0]}))}),o=Promise.resolve({tileJson:Object.assign({},e),tileLoadFunction:i});vo[n]=o}return o}function wo(e,t,r,n){const o=[2*r*t.pixelRatio+t.width,2*r*t.pixelRatio+t.height],i=po(o[0],o[1]),s=i.getContext("2d");s.drawImage(e,t.x,t.y,t.width,t.height,r*t.pixelRatio,r*t.pixelRatio,t.width,t.height);const a=s.getImageData(0,0,o[0],o[1]);s.globalCompositeOperation="destination-over",s.fillStyle=`rgba(${255*n.r},${255*n.g},${255*n.b},${n.a})`;const l=a.data;for(let e=0,n=a.width;e0&&s.arc(e,o,r*t.pixelRatio,0,2*Math.PI)}return s.fill(),i}function Eo(e,t,r){const n=Math.max(0,Math.min(1,(r-e)/(t-e)));return n*n*(3-2*n)}function xo(e,t,r){const n=po(t.width,t.height),o=n.getContext("2d");o.drawImage(e,t.x,t.y,t.width,t.height,0,0,t.width,t.height);const i=o.getImageData(0,0,t.width,t.height),s=i.data;for(let e=0,t=i.width;e0?(s[o+0]=Math.round(255*r.r*l),s[o+1]=Math.round(255*r.g*l),s[o+2]=Math.round(255*r.b*l),s[o+3]=Math.round(255*l)):s[o+3]=0}return o.putImageData(i,0,0),n}const So=Array(256).join(" ");function _o(e,t){if(t>=.05){let r="";const n=e.split("\n"),o=So.slice(0,Math.round(t/.1));for(let e=0,t=n.length;e0&&(r+="\n"),r+=n[e].split("").join(o);return r}return e}let Ao;function Ro(){return Ao||(Ao=po(1,1).getContext("2d")),Ao}function To(e,t){return Ro().measureText(e).width+(e.length-1)*t}const No={};function Oo(e,t,r,n){if(-1!==e.indexOf("\n")){const o=e.split("\n"),i=[];for(let e=0,s=o.length;e1){const e=Ro();e.font=t;const o=e.measureText("M").width*r;let a="";const l=[];for(let e=0,t=s.length;e1;++e){const r=l[e];if(To(r,n)<.35*o){const o=e>0?To(l[e-1],n):1/0,i=e.7*o&&To(i,n)<.6*o){const s=r.split(" "),a=s.pop();To(a,n)<.2*o&&(l[e]=s.join(" "),l[e+1]=a+" "+i),t-=1}}i=l.join("\n")}else i=e;i=_o(i,n),No[o]=i}return i}const Co=/font-family: ?([^;]*);/,Mo=/("|')/g;let Po;function Io(e){if(!Po){Po={};const e=document.styleSheets;for(let t=0,r=e.length;t0&&"string"==typeof u[0]&&u[0]in vn);if(!i&&En(n)&&(n=je(n,o),i=!0),i){const e=function(e,t){const r=Rn(e,t);if("error"===r.result)throw new Error(r.value.map((e=>`${e.key}: ${e.message}`)).join(", "));return r.value}(n,o);l[r]=e.evaluate.bind(e)}else"color"==o.type&&(n=Ue.parse(n)),l[r]=function(){return n}}var u;return Uo.zoom=n,l[r](Uo,o,s)}function Go(e,t,r,n,o){if(!Fo(e,"layout",`${n}-allow-overlap`,t,r,o))return"declutter";return Fo(e,"layout",`${n}-ignore-placement`,t,r,o)?"none":"obstacle"}function Vo(e,t,r,n,o){return o||console.warn("No filterCache provided to evaluateFilter()"),e in o||(o[e]=Mn(t).filter),Uo.zoom=n,o[e](Uo,r)}let Ho=!1;function $o(e,t){if(e){if(!Ho&&(0===e.a||0===t))return;const r=e.a;return t=void 0===t?1:t,0===r?"transparent":"rgba("+Math.round(255*e.r/r)+","+Math.round(255*e.g/r)+","+Math.round(255*e.b/r)+","+r*t+")"}return e}const Bo=/\{[^{}}]*\}/g;function Yo(e,t){return e.replace(Bo,(function(e){return t[e.slice(1,-1)]||""}))}let Xo=!1;const Wo={};function Jo(e,t,r,n=co,o=void 0,i=void 0,s=void 0,a=void 0){if("string"==typeof t&&(t=JSON.parse(t)),8!=t.version)throw new Error("glStyle version 8 required.");let l,u,c;if(Wo[so(t,e)]=Array.from(arguments),i)if("undefined"!=typeof Image){const t=new Image;let r;(0,ge.toPromise)((()=>i)).then((e=>{e instanceof Request?fetch(e).then((e=>e.blob())).then((e=>{r=URL.createObjectURL(e),t.src=r})).catch((()=>{})):(t.crossOrigin="anonymous",t.src=e,r&&URL.revokeObjectURL(r))})),t.onload=function(){l=t,u=[t.width,t.height],e.changed(),t.onload=null}}else if("undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope){const e=self;e.postMessage({action:"loadImage",src:i}),e.addEventListener("message",(function(e){"imageLoaded"===e.data.action&&e.data.src===i&&(l=e.data.image,u=[l.width,l.height])}))}const p=$n(t.layers),m={},g=[],y={},v={},b=ao(t),w=lo(t);let E;for(let e=0,n=p.length;e=M.maxzoom)continue;const D=M.filter;if(!D||Vo(P,D,T,A,w)){let n,p,w,E,P,D;O=M;const L=m.index;if(3==R&&("fill"==M.type||"fill-extrusion"==M.type))if(p=Fo(M,"paint",M.type+"-opacity",A,T,b,N),M.type+"-pattern"in k){const e=Fo(M,"paint",M.type+"-pattern",A,T,b,N);if(e){const t="string"==typeof e?Yo(e,g):e.toString();if(l&&o&&o[t]){++C,D=_[C],D&&D.getFill()&&!D.getStroke()&&!D.getText()||(D=new de({fill:new h}),_[C]=D),w=D.getFill(),D.setZIndex(L);const e=t+"."+p;let r=v[e];if(!r){const n=o[t],i=po(n.width,n.height),s=i.getContext("2d");s.globalAlpha=p,s.drawImage(l,n.x,n.y,n.width,n.height,0,0,n.width,n.height),r=s.createPattern(i,"repeat"),v[e]=r}w.setColor(r)}}}else n=$o(Fo(M,"paint",M.type+"-color",A,T,b,N),p),M.type+"-outline-color"in k&&(P=$o(Fo(M,"paint",M.type+"-outline-color",A,T,b,N),p)),P||(P=n),(n||P)&&(++C,D=_[C],(!D||n&&!D.getFill()||!n&&D.getFill()||P&&!D.getStroke()||!P&&D.getStroke()||D.getText())&&(D=new de({fill:n?new h:void 0,stroke:P?new he:void 0}),_[C]=D),n&&(w=D.getFill(),w.setColor(n)),P&&(E=D.getStroke(),E.setColor(P),E.setWidth(.5)),D.setZIndex(L));if(1!=R&&"line"==M.type){n="line-pattern"in k?void 0:$o(Fo(M,"paint","line-color",A,T,b,N),Fo(M,"paint","line-opacity",A,T,b,N));const e=Fo(M,"paint","line-width",A,T,b,N);n&&e>0&&(++C,D=_[C],D&&D.getStroke()&&!D.getFill()&&!D.getText()||(D=new de({stroke:new he}),_[C]=D),E=D.getStroke(),E.setLineCap(Fo(M,"layout","line-cap",A,T,b,N)),E.setLineJoin(Fo(M,"layout","line-join",A,T,b,N)),E.setMiterLimit(Fo(M,"layout","line-miter-limit",A,T,b,N)),E.setColor(n),E.setWidth(e),E.setLineDash(k["line-dasharray"]?Fo(M,"paint","line-dasharray",A,T,b,N).map((function(t){return t*e})):null),D.setZIndex(L))}let q,U,z,j,F,G,V,H,$,B=!1,Y=null,X=0;if((1==R||2==R)&&"icon-image"in I){const t=Fo(M,"layout","icon-image",A,T,b,N);if(t){let n;q="string"==typeof t?Yo(t,g):t.toString();const s=a?a(e,q):void 0;if(l&&o&&o[q]||s){const e=Fo(M,"layout","icon-rotation-alignment",A,T,b,N);if(2==R){const t=r.getGeometry();if(t.getFlatMidpoint||t.getFlatMidpoints){const r=t.getExtent();if(Math.sqrt(Math.max(Math.pow((r[2]-r[0])/i,2),Math.pow((r[3]-r[1])/i,2)))>150){const r="MultiLineString"===t.getType()?t.getFlatMidpoints():t.getFlatMidpoint();jo||(zo=[NaN,NaN],jo=new fe("Point",zo,[],2,{},void 0)),n=jo,zo[0]=r[0],zo[1]=r[1];if("line"===Fo(M,"layout","symbol-placement",A,T,b,N)&&"map"===e){const e=t.getStride(),n=t.getFlatCoordinates();for(let t=0,o=n.length-e;t=l){X=Math.atan2(i-a,s-o);break}}}}}}if(2!==R||n){const t=Fo(M,"layout","icon-size",A,T,b,N),r=void 0!==k["icon-color"]?Fo(M,"paint","icon-color",A,T,b,N):null;if(!r||0!==r.a){const n=Fo(M,"paint","icon-halo-color",A,T,b,N),i=Fo(M,"paint","icon-halo-width",A,T,b,N);let a=`${q}.${t}.${i}.${n}`;if(null!==r&&(a+=`.${r}`),U=y[a],!U){const p=Go(M,A,T,"icon",b);let f;"icon-offset"in I&&(f=Fo(M,"layout","icon-offset",A,T,b,N).slice(0),f[0]*=t,f[1]*=-t);let h=r?[255*r.r,255*r.g,255*r.b,r.a]:void 0;if(s){const r={color:h,rotateWithView:"map"===e,displacement:f,declutterMode:p,scale:t};"string"==typeof s?r.src=s:(r.img=s,r.imgSize=[s.width,s.height]),U=new d(r)}else{const s=o[q];let a,m,g;i?s.sdf?(a=wo(xo(l,s,r||[0,0,0,1]),{x:0,y:0,width:s.width,height:s.height,pixelRatio:s.pixelRatio},i,n),h=void 0):a=wo(l,s,i,n):(s.sdf?(c||(c=xo(l,{x:0,y:0,width:u[0],height:u[1]},{r:1,g:1,b:1,a:1})),a=c):a=l,m=[s.width,s.height],g=[s.x,s.y]),U=new d({color:h,img:a,imgSize:u,size:m,offset:g,rotateWithView:"map"===e,scale:t/s.pixelRatio,displacement:f,declutterMode:p})}y[a]=U}}U&&(++C,D=_[C],D&&D.getImage()&&!D.getFill()&&!D.getStroke()||(D=new de,_[C]=D),D.setGeometry(n),U.setRotation(X+uo(Fo(M,"layout","icon-rotate",A,T,b,N))),U.setOpacity(Fo(M,"paint","icon-opacity",A,T,b,N)),U.setAnchor(Lo[Fo(M,"layout","icon-anchor",A,T,b,N)]),D.setImage(U),Y=D.getText(),D.setText(void 0),D.setZIndex(L),B=!0,z=!1)}else z=!0}}}if(1==R&&"circle"===M.type){++C,D=_[C],D&&D.getImage()&&!D.getFill()&&!D.getStroke()||(D=new de,_[C]=D);const e="circle-radius"in k?Fo(M,"paint","circle-radius",A,T,b,N):5,t=$o(Fo(M,"paint","circle-stroke-color",A,T,b,N),Fo(M,"paint","circle-stroke-opacity",A,T,b,N)),r=Fo(M,"paint","circle-translate",A,T,b,N),n=$o(Fo(M,"paint","circle-color",A,T,b,N),Fo(M,"paint","circle-opacity",A,T,b,N)),o=Fo(M,"paint","circle-stroke-width",A,T,b,N),i=e+"."+t+"."+n+"."+o+"."+r[0]+"."+r[1];U=y[i],U||(U=new f({radius:e,displacement:[r[0],-r[1]],stroke:t&&o>0?new he({width:o,color:t}):void 0,fill:n?new h({color:n}):void 0,declutterMode:"none"}),y[i]=U),D.setImage(U),Y=D.getText(),D.setText(void 0),D.setGeometry(void 0),D.setZIndex(L),B=!0}if("text-field"in I){V=Math.round(Fo(M,"layout","text-size",A,T,b,N));const e=Fo(M,"layout","text-font",A,T,b,N);G=Fo(M,"layout","text-line-height",A,T,b,N),F=Jn(s?s(e,t.metadata?t.metadata["ol:webfonts"]:void 0):e,V,G),F.includes("sans-serif")||(F+=",sans-serif"),H=Fo(M,"layout","text-letter-spacing",A,T,b,N),$=Fo(M,"layout","text-max-width",A,T,b,N);const r=Fo(M,"layout","text-field",A,T,b,N);j="object"==typeof r&&r.sections?1===r.sections.length?r.toString():r.sections.reduce(((t,r,n)=>{const o=r.fontStack?r.fontStack.split(","):e,i=Jn(s?s(o):o,V*(r.scale||1),G);let a=r.text;if("\n"===a)return t.push("\n",""),t;if(2==R)return t.push(_o(a,H),i),t;a=Oo(a,i,$,H).split("\n");for(let e=0,r=a.length;e0&&t.push("\n",""),t.push(a[e],i);return t}),[]):Yo(r,g).trim(),p=Fo(M,"paint","text-opacity",A,T,b,N)}if(j&&p&&!z){B||(++C,D=_[C],D&&D.getText()&&!D.getFill()&&!D.getStroke()||(D=new de,_[C]=D),D.setImage(void 0),D.setGeometry(void 0));const e=Go(M,A,T,"text",b);D.getText()||D.setText(Y),Y=D.getText(),(!Y||"getDeclutterMode"in Y&&Y.getDeclutterMode()!==e)&&(Y=new me({padding:[2,2,2,2],declutterMode:e}),D.setText(Y));const t=Fo(M,"layout","text-transform",A,T,b,N);"uppercase"==t?j=Array.isArray(j)?j.map(((e,t)=>t%2?e:e.toUpperCase())):j.toUpperCase():"lowercase"==t&&(j=Array.isArray(j)?j.map(((e,t)=>t%2?e:e.toLowerCase())):j.toLowerCase());const r=Array.isArray(j)?j:2==R?_o(j,H):Oo(j,F,$,H);if(Y.setText(r),Y.setFont(F),Y.setRotation(uo(Fo(M,"layout","text-rotate",A,T,b,N))),"function"==typeof Y.setKeepUpright){const e=Fo(M,"layout","text-keep-upright",A,T,b,N);Y.setKeepUpright(e)}const n=Fo(M,"layout","text-anchor",A,T,b,N),o=B||1==R?"point":Fo(M,"layout","symbol-placement",A,T,b,N);let i;if("line-center"===o?(Y.setPlacement("line"),i="center"):Y.setPlacement(o),"line"===o&&"function"==typeof Y.setRepeat){const e=Fo(M,"layout","symbol-spacing",A,T,b,N);Y.setRepeat(2*e)}Y.setOverflow("point"===o);let s=Fo(M,"paint","text-halo-width",A,T,b,N);const a=Fo(M,"layout","text-offset",A,T,b,N),l=Fo(M,"paint","text-translate",A,T,b,N);let u=0,c=0;if("point"==o){i="center",-1!==n.indexOf("left")?(i="left",c=s):-1!==n.indexOf("right")&&(i="right",c=-s);const e=Fo(M,"layout","text-rotation-alignment",A,T,b,N);Y.setRotateWithView("map"==e)}else Y.setMaxAngle(uo(Fo(M,"layout","text-max-angle",A,T,b,N))*j.length/r.length),Y.setRotateWithView(!1);Y.setTextAlign(i);let f="middle";0==n.indexOf("bottom")?(f="bottom",u=-s-.5*(G-1)*V):0==n.indexOf("top")&&(f="top",u=s+.5*(G-1)*V),Y.setTextBaseline(f);const h=Fo(M,"layout","text-justify",A,T,b,N);Y.setJustify("auto"===h?void 0:h),Y.setOffsetX(a[0]*V+c+l[0]),Y.setOffsetY(a[1]*V+u+l[1]),S.setColor($o(Fo(M,"paint","text-color",A,T,b,N),p)),Y.setFill(S);const d=$o(Fo(M,"paint","text-halo-color",A,T,b,N),p);if(d&&s>0){x.setColor(d),s*=2;const e=.5*V;x.setWidth(s<=e?s:e),Y.setStroke(x)}else Y.setStroke(void 0);const m=Fo(M,"layout","text-padding",A,T,b,N),g=Y.getPadding();m!==g[0]&&(g[0]=m,g[1]=m,g[2]=m,g[3]=m),D.setZIndex(L)}}}return C>-1?(_.length=C+1,Xo&&("set"in r?r.set("mapbox-layer",O):r.getProperties()["mapbox-layer"]=O),_):void 0};return e.setStyle(A),e.set("mapbox-source",E),e.set("mapbox-layers",g),e.set("mapbox-featurestate",e.get("mapbox-featurestate")||{}),A}function Ko(e,t=512){return e.getExtent()?(0,Re.createXYZ)({extent:e.getExtent(),tileSize:t,maxZoom:22}).getResolutions():co}function Qo(e,t){if(!t.accessToken){t=Object.assign({},t);new URL(e).searchParams.forEach(((e,r)=>{t.accessToken=e,t.accessTokenParam=r}))}return t}function Zo(e,t,r="",o={},s=void 0){let a,l,u,c,p=!0;return"string"==typeof r||Array.isArray(r)?c=r:(u=r,c=u.source||u.layers,o=u),"string"==typeof o?(a=o,u={}):(a=o.styleUrl,u=o),!1===u.updateSource&&(p=!1),s||(s=u.resolutions),a||"string"!=typeof t||t.trim().startsWith("{")||(a=t),a&&(a=a.startsWith("data:")?location.href:Zn(a,u.accessToken),u=Qo(a,u)),new Promise((function(r,o){yo(t,u).then((function(t){if(8!=t.version)return o(new Error("glStyle version 8 required."));if(!(e instanceof xe||e instanceof n))return o(new Error("Can only apply to VectorLayer or VectorTileLayer"));const f=e instanceof n?"vector":"geojson";if(c?l=Array.isArray(c)?t.layers.find((function(e){return e.id===c[0]})).source:c:(l=Object.keys(t.sources).find((function(e){return t.sources[e].type===f})),c=l),!l)return o(new Error(`No ${f} source found in the glStyle.`));function h(){if(!p)return Promise.resolve();if(e instanceof n)return ti(t.sources[l],a,u).then((function(t){const r=e.getSource();r?t!==r&&(r.setTileUrlFunction(t.getTileUrlFunction()),"function"==typeof r.setUrls&&"function"==typeof t.getUrls&&r.setUrls(t.getUrls()),r.format_||(r.format_=t.format_),r.getAttributions()||r.setAttributions(t.getAttributions()),r.getTileLoadFunction()===i.defaultLoadFunction&&r.setTileLoadFunction(t.getTileLoadFunction()),(0,Te.equivalent)(r.getProjection(),t.getProjection())&&(r.tileGrid=t.getTileGrid())):e.setSource(t);const n=e.getSource().getTileGrid();!isFinite(e.getMaxResolution())&&!isFinite(e.getMinZoom())&&n.getMinZoom()>0&&e.setMaxResolution(ho(Math.max(0,n.getMinZoom()-1e-12),n.getResolutions()))}));const r=t.sources[l];let o=e.getSource();o&&o.get("mapbox-source")===r||(o=ni(r,a,u));const s=e.getSource();return s?o!==s&&(s.getAttributions()||s.setAttributions(o.getAttributions()),s.format_||(s.format_=o.getFormat()),s.url_=o.getUrl()):e.setSource(o),Promise.resolve()}let d,m,g,y;function v(){if(y||t.sprite&&!m)y?(e.setStyle(y),h().then(r).catch(o)):o(new Error("Something went wrong trying to apply style."));else{if(u.projection&&!s){const e=(0,Te.get)(u.projection).getUnits();"m"!==e&&(s=co.map((t=>t/_e.METERS_PER_UNIT[e])))}y=Jo(e,t,c,s,m,g,((e,t=u.webfonts)=>function(e,t="https://cdn.jsdelivr.net/npm/@fontsource/{font-family}/{fontweight}{-fontstyle}.css"){const r=e.toString();if(r in ko)return ko[r];const n=[];for(let t=0,r=e.length;t=1.5?.5:1;const r=.5==d?"@2x":"";let n=e.origin+e.pathname+r+".json"+e.search;new Promise((function(t,r){go("Sprite",n,u).then(t).catch((function(o){n=e.origin+e.pathname+".json"+e.search,go("Sprite",n,u).then(t).catch(r)}))})).then((function(t){if(void 0===t&&o(new Error("No sprites found.")),m=t,g=e.origin+e.pathname+r+".png"+e.search,u.transformRequest){const e=u.transformRequest(g,"SpriteImage")||g;(e instanceof Request||e instanceof Promise)&&(g=e)}v()})).catch((function(e){o(new Error(`Sprites cannot be loaded: ${n}: ${e.message}`))}))}else v()})).catch(o)}))}function ei(e,t,r){const n=new a({tileJSON:t,tileSize:e.tileSize||t.tileSize||512}),o=n.getTileJSON(),i=n.getTileGrid(),s=(0,Te.get)(r.projection||"EPSG:3857"),l=function(e,t){const r=e.bounds;if(r){const e=(0,Te.fromLonLat)([r[0],r[1]],t),n=(0,Te.fromLonLat)([r[2],r[3]],t);return[e[0],e[1],n[0],n[1]]}return(0,Te.get)(t).getExtent()}(o,s),u=s.getExtent(),c=o.minzoom||0,p=o.maxzoom||22,f={attributions:n.getAttributions(),projection:s,tileGrid:new Ee({origin:u?(0,Ne.getTopLeft)(u):i.getOrigin(0),extent:l||i.getExtent(),minZoom:c,resolutions:Ko(s,t.tileSize).slice(0,p+1),tileSize:i.getTileSize(0)})};return Array.isArray(o.tiles)?f.urls=o.tiles:f.url=o.tiles,f}function ti(e,t,r){return new Promise((function(n,o){bo(e,t,r).then((function({tileJson:t,tileLoadFunction:o}){const s=ei(e,t,r);s.tileLoadFunction=o,s.format=new u,n(new i(s))})).catch(o)}))}function ri(e){return`{bbox-${(e?e.getCode():"EPSG:3857").toLowerCase().replace(/[^a-z0-9]/g,"-")}}`}function ni(e,t,r){const n=r.projection?new we({dataProjection:r.projection}):new we,o=e.data,i={};if("string"==typeof o){const[i]=to(o,r.accessToken,r.accessTokenParam||"access_token",t||location.href);if(/\{bbox-[0-9a-z-]+\}/.test(i)){const t=(e,t,r)=>{const n=ri(r);return i.replace(n,`${e.join(",")}`)},o=new Se({attributions:e.attribution,format:n,loader:(e,n,i,s,a)=>{go("GeoJSON","function"==typeof t?t(e,n,i):t,r).then((e=>{const t=o.getFormat().readFeatures(e,{featureProjection:i});o.addFeatures(t),s(t)})).catch((t=>{o.removeLoadedExtent(e),a()}))},strategy:Ae.bbox});return o.set("mapbox-source",e),o}const s=new Se({attributions:e.attribution,format:n,url:i,loader:(e,t,n,o,a)=>{go("GeoJSON",i,r).then((e=>{const t=s.getFormat().readFeatures(e,{featureProjection:n});s.addFeatures(t),o(t)})).catch((t=>{s.removeLoadedExtent(e),a()}))}});return s}i.features=n.readFeatures(o,{featureProjection:(0,Te.getUserProjection)()||"EPSG:3857"});const s=new Se(Object.assign({attributions:e.attribution,format:n},i));return s.set("mapbox-source",e),s}var oi=r(2536),ii=r(7278);function si(e){return si="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},si(e)}function ai(e,t){for(var r=0;r{"use strict";var n=r(996),o=r.n(n);const i=ol.style;var s=r(2536),a=r(7278),l=r(4998);function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function c(e,t){for(var r=0;r{"use strict";var n=r(9201),o=r(9583),i=r.n(o),s=r(2536),a=r(7278),l=r(4659);function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function c(e,t){for(var r=0;r{"use strict";var n=r(9201),o=r(9583),i=r.n(o),s=r(2536),a=r(7278),l=r(9815);function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function c(e,t){for(var r=0;r{"use strict";r.d(t,{A:()=>E});var n=r(3668),o=r.n(n),i=r(7304),s=r.n(i),a=r(2947),l=r(8062),u=r(2536),c=r(5844),p=r(7278),f=r(8330);function h(e){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h(e)}function d(e,t){for(var r=0;r{"use strict";r.d(t,{A:()=>v});var n=r(2987);const o=ol.source.TileWMS;var i=r.n(o),s=r(2536),a=r(5844),l=r(7278),u=r(8330);function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}function p(e,t){for(var r=0;r{"use strict";r.d(t,{A:()=>w});var n=r(2987);const o=ol.tilegrid.WMTS;var i=r.n(o),s=r(9290),a=r(2536);const l={getZoomLevelFromScaleDenominator:function(e,t){var r={};if("EPSG:2154"===t)r={0:104579.224549894,1:52277.5323537905,2:26135.4870785954,3:13066.8913818,4:6533.2286041135,5:3266.5595244627,6:1633.2660045974,7:816.629554986,8:408.3139146768,9:204.1567415109,10:102.0783167832,11:51.0391448966,12:25.5195690743,13:12.7597836936,14:6.379891636,15:3.1899457653,16:1.5949728695,17:.7974864315,18:.3987432149,19:.1993716073,20:.0996858037,21:.0498429018};else r={0:156543.033928041,1:78271.51696402048,2:39135.758482010235,3:19567.87924100512,4:9783.93962050256,5:4891.96981025128,6:2445.98490512564,7:1222.99245256282,8:611.49622628141,9:305.7481131407048,10:152.8740565703525,11:76.43702828517624,12:38.21851414258813,13:19.10925707129406,14:9.554628535647032,15:4.777314267823516,16:2.388657133911758,17:1.194328566955879,18:.5971642834779395,19:.2985821417389697,20:.1492910708694849,21:.0746455354347424};var n=28e-5*e;for(var o in r)if(r.hasOwnProperty(o)&&r[o]<=n)return o=parseInt(o,10);return 0},getAttributions:function(e){var t=e.zoom,r=[];if(null!=e.originators&&e.visibility)for(var n,o=0,i=e.originators.length;ot&&(n=!1),n&&f&&f{"use strict";r.d(t,{A:()=>g});const n=ol.source.WMTS;var o=r.n(n),i=r(2938),s=r(2987),a=r(2536);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function u(e,t){for(var r=0;r{"use strict";r.d(t,{A:()=>n});const n={configuration:{},isConfigLoaded:function(){if(this.configuration&&0!==Object.keys(this.configuration).length)return!0;var e="undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0!==r.g?r.g:{};return!!(e.Gp&&e.Gp.Config&&e.Gp.Config.layers&&0!==Object.keys(e.Gp.Config.layers).length)&&(this.configuration=e.Gp.Config,!0)}}},2536:(e,t,r)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}r.d(t,{A:()=>o});const o={detectSupport:function(){var e=!0,t=window.navigator.userAgent.toLowerCase();return-1===t.indexOf("iphone")&&-1===t.indexOf("ipod")&&-1===t.indexOf("ipad")&&-1===t.indexOf("android")&&-1===t.indexOf("mobile")&&-1===t.indexOf("blackberry")&&-1===t.indexOf("tablet")&&-1===t.indexOf("phone")&&-1===t.indexOf("touch")||(e=!1),-1===t.indexOf("msie")&&-1===t.indexOf("trident")||(e=!0),e},assign:function(e,t){for(var r in e=e||{},t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e},mergeParams:function(e,t,r){if(void 0!==e&&void 0!==t)for(var o in void 0===r&&(r=!0),t)t.hasOwnProperty(o)&&("object"===n(t[o])?e.hasOwnProperty(o)?this.mergeParams(e[o],t[o],r):e[o]=t[o]:e.hasOwnProperty(o)?r&&(e[o]=t[o]):e[o]=t[o])}}},5844:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(3065),o={getLogger:function(e){if(void 0===t)var t={env:{VERBOSE:!1}};t.env.VERBOSE?n.enableAll():n.disableAll();var r=e||"default";return n.getLogger(r)},disableAll:function(){var e=n.getLoggers();for(var t in e){if(Object.hasOwnProperty.call(e,t))e[t].disableAll()}},enableAll:function(){var e=n.getLoggers();for(var t in e){if(Object.hasOwnProperty.call(e,t))e[t].enableAll()}}};const i=o;window.Gp&&(window.Gp.Logger=o)},6964:function(e,t,r){ /*! @@ -19,5 +19,5 @@ * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE * @version v4.2.8+1e68dce6 */ -e.exports=function(){"use strict";function e(e){var t=typeof e;return null!==e&&("object"===t||"function"===t)}function t(e){return"function"==typeof e}var n=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},o=0,i=void 0,s=void 0,a=function(e,t){w[o]=e,w[o+1]=t,2===(o+=2)&&(s?s(E):S())};function l(e){s=e}function u(e){a=e}var c="undefined"!=typeof window?window:void 0,p=c||{},f=p.MutationObserver||p.WebKitMutationObserver,h="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),d="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function m(){return function(){return process.nextTick(E)}}function g(){return void 0!==i?function(){i(E)}:b()}function y(){var e=0,t=new f(E),r=document.createTextNode("");return t.observe(r,{characterData:!0}),function(){r.data=e=++e%2}}function v(){var e=new MessageChannel;return e.port1.onmessage=E,function(){return e.port2.postMessage(0)}}function b(){var e=setTimeout;return function(){return e(E,1)}}var w=new Array(1e3);function E(){for(var e=0;e{"use strict";function n(e){if(!(this instanceof n))throw new TypeError("ErrorService constructor cannot be called as a function.");var t=e;"string"==typeof e||e instanceof String?(this.message=e,this.status=-1,this.type=n.TYPE_UNKERR):(this.message=t.message||"undefined!?",this.type=t.type,this.status=t.status||-1),this.name="ErrorService",this.stack=(new Error).stack}r.d(t,{A:()=>o}),n.TYPE_SRVERR="SERVICE_ERROR",n.TYPE_USEERR="USAGE_ERROR",n.TYPE_UNKERR="UNKNOWN_ERROR",n.prototype=Object.create(Error.prototype,{constructor:{value:n,writable:!0,configurable:!0}});const o=n},4841:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(this.logger=n.A.getLogger(),this.logger.trace("[Constructeur WPS()]"),!(this instanceof o))throw new TypeError("WPS constructor cannot be called as a function.");if(this.options=e||{},this.DataObject=this.options.data,!this.DataObject)throw new TypeError("This data object is not defined !");this.paramservice=this.options.param.service||"WPS",this.paramversion=this.options.param.version||"1.0.0",this.paramidentifier=this.options.param.identifier||"gs:WPS",this.paramrawdataoutput=this.options.param.rawdataoutput||"result",this.paramrequest=this.options.param.request||"Execute",this.method=this.options.method||"GET"}o.prototype={requestString:null,constructor:o,template:{get:{value:"service=__SERVICE__&version=__VERSION__&rawdataoutput=__RAWDATAOUTPUT__&identifier=__IDENTIFIER__&request=__REQUEST__&datainputs=\x3c!-- __DATAINPUTS__ --\x3e",input:"__KEY__=__DATA__"},post:{value:'__IDENTIFIER__\x3c!-- __DATAINPUTS__ --\x3e__RAWDATAOUTPUT__',input:"__KEY____DATA__"}},namespaceByDefault:function(){return['xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"','xmlns="http://www.opengis.net/wps/1.0.0"','xmlns:wfs="http://www.opengis.net/wfs"','xmlns:wps="http://www.opengis.net/wps/1.0.0"','xmlns:ows="http://www.opengis.net/ows/1.1"','xmlns:gml="http://www.opengis.net/gml"','xmlns:ogc="http://www.opengis.net/ogc"','xmlns:wcs="http://www.opengis.net/wcs/1.1.1"','xmlns:xlink="http://www.w3.org/1999/xlink"'].join(" ")},schemaLocationByDefault:function(){return'xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd"'},processRequestString:function(){this.logger.trace("WPS::processRequestString ()");var e="";if("POST"===this.method)e=this.template.post.value;else{if("GET"!==this.method)return this.logger.error("No other method supported by the service !"),!1;e=this.template.get.value}return e=(e=(e=(e=(e=e.replace(/__SERVICE__/g,this.paramservice)).replace(/__VERSION__/g,this.paramversion)).replace(/__RAWDATAOUTPUT__/g,this.paramrawdataoutput)).replace(/__IDENTIFIER__/g,this.paramidentifier)).replace(/__REQUEST__/g,this.paramrequest),"POST"===this.method&&(e=(e=e.replace(/__NAMESPACE__/g,this.namespaceByDefault)).replace(/__SCHEMALOCATION__/g,this.schemaLocationByDefault)),(e=e.replace(//g,this.__addDataInputs()))?(this.requestString=e,this.logger.trace("traduction tmpl",e),!0):(this.logger.warn("traduction tmpl : empty request !?"),!1)},__addDataInputs:function(){this.logger.trace("WPS::__addDataInputs ()");for(var e,t="GET"===this.method?this.template.get.input:this.template.post.input,r="GET"===this.method?";":"",n="",o=this,i=this.DataObject.getData(),s=0;s{"use strict";r.d(t,{A:()=>a});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("XML constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur XML ()]"),this.xmlString=null,this.xmlDoc=null,this.reader=null,e&&(e.xmlString&&"string"==typeof e.xmlString&&(this.xmlString=e.xmlString,this.xmlDoc=i(e.xmlString)),e.reader&&this.setReader(e.reader))}function i(e){if("undefined"==typeof window)return(new(0,r(8978).S4)).parseFromString(e,"text/xml");var t,n,o="Erreur lors du parsing de la réponse du service : XML non conforme";if(window.ActiveXObject){(n=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,n.loadXML(e);var i=n.parseError;if(i.errorCode)throw i.line&&i.linepos&&(o+="( ligne "+i.line+", colonne "+i.linepos),i.reason&&(o+=": "+i.reason+")"),new Error(o);return n}if(window.DOMParser){t=new window.DOMParser;try{n=t.parseFromString(e,"text/xml")}catch(e){throw"SyntaxError"===e.message?new Error(o):new Error("Erreur lors du parsing de la réponse du service : "+e.message)}if(n.getElementsByTagName("parsererror").length>0)for(var s=n.getElementsByTagName("parsererror"),a=0;a0){var r=function(e){if(e.attributes.length>0){for(var t={},r=e.attributes,n=0;n{"use strict";r.d(t,{Ay:()=>w});var n=r(3255),o=r(7966),i=r(3565),s=r(3041),a=r(5941),l=r(9924),u=r(1489),c=r(2993),p=r(7868),f=r(4154),h=r(210),d=r(8288),m=r(3474),g=r(9032);const y=g.rE,v=g.p6;var b={};b.servicesVersion=y,b.servicesDate=v,b.Protocols={},b.Protocols.XHR=h.A,b.Services=n.A,b.Services.DefaultUrl=o.A,b.Services.AltiResponse=i.A,b.Services.Alti={},b.Services.Alti.Elevation=s.A,b.Services.AutoCompleteResponse=a.A,b.Services.AutoComplete={},b.Services.AutoComplete.SuggestedLocation=l.A,b.Services.Config=f.A,b.Services.IsoCurveResponse=u.A,b.Services.RouteResponse=c.A,b.Services.Route={},b.Services.Route.RouteInstruction=p.A,b.Error=d.A,b.Helper=m.A;const w=b},3494:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n,o=r(2710);const i={uuid:(n=Math.floor(Date.now()),function(){return n++}),call:function(e){var t=o.A.getLogger("JSONP");if(t.trace("[JSONP::call ()]"),!e)throw t.error("missing parameter : options !"),new Error("missing parameter : options !");if(!e.url)throw t.error("missing parameter : options.url !"),new Error("missing parameter : options.url !");if(e.timeOut||(t.info("setting 'options.timeOut' default value"),e.timeOut=0),!e.onResponse)throw t.error("missing parameter : options.onResponse !"),new Error("missing parameter : options.onResponse !");var r="string"==typeof e.callbackSuffix?e.callbackSuffix:this.uuid(),n=!1,i=!1,s=e.url.indexOf("callback=");if(-1!==s){n=!0;var a=e.url.indexOf("&",s);-1===a&&(a=e.url.length);var l=e.url.substring(s+9,a);l&&(i=!0,e.callbackName=l,t.info("setting 'options.callbackName' value ("+e.callbackName+") from 'options.url' parameter"))}if(!n){var u=e.url.indexOf("?");-1===u?e.url=e.url+"?callback=":u===e.url.length?e.url=e.url+"callback=":e.url=e.url+"&callback=",t.info("setting callback default key in 'options.url' : "+e.url)}var c=!!e.callbackName||i;if(i||(e.callbackName||(t.info("setting 'options.callbackName' default value"),e.callbackName="callback",(r||""===r)&&(e.callbackName+=r)),e.url=e.url.replace("callback=","callback="+e.callbackName),t.info("setting callback function name in 'options.url' : "+e.url)),e.onTimeOut||(t.info("setting 'options.onTimeOut' default value"),e.onTimeOut=function(){console.log("TimeOut while invoking url : "+e.url)}),!c){var p=this,f=null;e.timeOut>0&&(f=window.setTimeout((function(){window[e.callbackName]=function(){},e.onTimeOut(),p._deleteScript(r)}),e.timeOut)),window[e.callbackName]=function(t){window.clearTimeout(f),e.onResponse(t),p._deleteScript(r)}}this._createScript(r,e.url)},_createScript:function(e,t){var r,n=document.getElementById("results"+e);(r=document.createElement("script")).setAttribute("type","text/javascript"),r.setAttribute("src",t),r.setAttribute("charset","UTF-8"),r.setAttribute("id","results"+e),r.setAttribute("async","true");var o=document.documentElement||document.getElementsByTagName("head")[0];null===n?o.appendChild(r):o.replaceChild(r,n)},_deleteScript:function(e){var t=document.getElementById("results"+e);if(t){var r=t.parentNode||document.documentElement;if(!r)return;r.removeChild(t)}}}},6250:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(3474),o=r(210),i=r(3494);const s={send:function(e){var t=e||{method:"GET",protocol:"XHR",timeOut:0,format:null,wrap:!0,nocache:!0,output:"json",callback:null,callbackSuffix:null};if("undefined"!=typeof window||"JSONP"!==e.protocol){if("XHR"===e.protocol||"json"===e.format?t.wrap=!1:"JSONP"===e.protocol&&"xml"===e.format&&(t.wrap=!0),t.callback=null,t.output=t.wrap?"json":null,t.wrap){var r={};r.output=t.output,r.callback=t.callback,delete r.callback,t.url=n.A.normalyzeUrl(e.url,r)}switch(t.protocol){case"XHR":"GET"===e.method&&e.nocache&&(t.url=n.A.normalyzeUrl(t.url,{t:(new Date).getTime()})),o.A.call(t);break;case"JSONP":t.data&&(t.url=n.A.normalyzeUrl(t.url,t.data)),i.A.call(t);break;default:throw new Error("protocol not supported (XHR|JSONP) !")}}else console.log("Value (s) for parameter (s) 'protocol=JSONP (instead use XHR)' not supported to NodeJS")}}},210:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(2710),o=r(3474),i=r(6964),s=r.n(i);const a={call:function(e){var t=n.A.getLogger("XHR");if(t.trace("[XHR::call()]"),s().polyfill(),!e.url)throw new Error("missing parameter : url is not defined !");if(!e.method)throw new Error("missing parameter : method is not defined !");e.format||(e.format="text");var r={};switch(r.url=e.url,r.data=e.data?e.data:null,r.method=e.method,r.timeOut=e.timeOut||0,r.scope=e.scope||this,r.proxy=e.proxy||null,r.content=e.content||null,r.headers=e.headers||{referer:"http://localhost"},e.method){case"DELETE":case"GET":break;case"PUT":case"POST":r.content=e.content?e.content:"application/x-www-form-urlencoded",r.headers=e.headers?e.headers:{referer:"http://localhost"};break;case"HEAD":case"OPTIONS":throw new Error("HTTP method not yet supported !");default:throw new Error("HTTP method unknown !")}switch(e.format){case"text":this.__call(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;case"json":this.__callJSON(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;case"xml":this.__callXML(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;default:throw new Error("This output Format is not yet supported !")}},__call:function(e){var t=n.A.getLogger("XHR");return t.trace("[XHR::__call()]"),new Promise((function(n,i){var s="POST"===e.method||"PUT"===e.method?1:0;e.data&&("object"==typeof e.data&&Object.keys(e.data).length||"string"==typeof e.data&&e.data.length)&&!s&&(e.url=o.A.normalyzeUrl(e.url,e.data)),t.trace("URL = ",e.url);var a=null;if("undefined"==typeof window){var l=r(3092),u={headers:{Referer:"https://localhost"}};return e.data&&"string"==typeof e.data&&s&&(u={method:e.method,body:e.data,headers:{"Content-Type":e.content,Referer:"https://localhost"}}),l(e.url,u).then((function(e){if(e.ok)n(e.text());else{var t="Errors Occured on Http Request (status : '"+e.statusText+"' | url : '"+e.url+"')",r=e.status;i({message:t,status:r})}})).catch((function(e){i({message:e,status:-1})}))}if(window.XMLHttpRequest){t.trace("XMLHttpRequest"),(a=new XMLHttpRequest).open(e.method,e.url,!0),a.overrideMimeType=e.content;var c=null;e.timeOut>0&&(t.trace("XHR - TimeOut actif !"),c=window.setTimeout((function(){i({message:"TimeOut Occured on Http Request with XMLHttpRequest !",status:-1})}),e.timeOut)),s&&(t.trace("data = ",e.data),a.setRequestHeader("Content-type",e.content)),a.onerror=function(e){console.log(e),i(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},a.ontimeout=function(e){console.log(e),i(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},a.onreadystatechange=function(e){if(4===a.readyState)if(200===a.status)window.clearTimeout(c),n(a.response);else{var t="Errors Occured on Http Request (status : '"+e.target.statusText+"' | url : '"+e.target.responseURL+"' | response : '"+e.target.response+"')",r=e.target.status;i({message:t,status:r})}};var p=e.data&&s?e.data:null;a.send(p)}else{if(!window.XDomainRequest)throw new Error("CORS not supported");t.trace("XDomainRequest"),(a=new XDomainRequest).open(e.method,e.url),a.overrideMimeType=e.content,e.timeOut>0&&(a.timeout=e.timeout,t.trace("XHR - TimeOut actif !")),s&&a.setRequestHeader("Content-type",e.content),a.onerror=function(){i(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},a.ontimeout=function(){i(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},a.onload=function(e){if(200===a.status)n(a.responseText);else{var t="Errors Occured on Http Request (status : '"+e.target.statusText+"' | url : '"+e.target.responseURL+"')",r=e.target.status;i({message:t,status:r})}};var f=e.data&&s?e.data:null;a.send(f)}}))},__callJSON:function(e){return this.__call(e).then(JSON.parse).catch((function(t){console.log("_callJSON failed on : ",e.url,t)}))},__callXML:function(e){return this.__call(e).then((function(e){var t;"undefined"==typeof window?t=(new(0,r(8978).S4)).parseFromString(e,"text/xml"):window.DOMParser?t=(new window.DOMParser).parseFromString(e,"text/xml"):((t=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,t.loadXML(e));return t})).catch((function(t){console.log("__callXML failed on : ",e.url,t)}))}}},2366:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(8933),u=r(5325);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","Alti"));if(this.CLASSNAME="Alti",s.A.apply(this,arguments),this.logger=n.A.getLogger("Gp.Services.Alti"),this.logger.trace("[Constructeur Alti (options)]"),!e.positions)throw new Error(o.A.getMessage("PARAM_MISSING","positions"));if(0===e.positions.length)throw new Error(o.A.getMessage("PARAM_EMPTY","positions"));if(this.options.positions=e.positions,this.options.outputFormat="string"==typeof e.outputFormat?e.outputFormat.toLowerCase():"xml",this.options.resource=e.resource||"ign_rge_alti_wld",this.options.sampling=e.sampling||null,this.options.api="string"==typeof e.api?e.api.toUpperCase():"REST","REST"===this.options.api&&(this.options.httpMethod="GET"),this.options.zonly=e.zonly||!1,this.options.measures=e.measures||!1,!this.options.serverUrl){var t=a.A.Alti.newUrl(),r=null;switch(this.options.api){case"WPS":r=t.wps;break;case"REST":r=t[(e.sampling?"profil":"elevation")+"-"+this.options.outputFormat];break;default:throw new Error(o.A.getMessage("PARAM_UNKNOWN","api"))}if(!r)throw new Error("Url by default not found !");this.options.serverUrl=r,this.logger.trace("Server URL by default : "+this.options.serverUrl)}var i=this.options.serverUrl.lastIndexOf(".");if(-1!==i){var l=this.options.serverUrl.substring(i+1);if(l&&l.length<5)switch(this.logger.trace("Server Extension URL : "+l),l.toLowerCase()){case"json":case"xml":this.options.outputFormat=l.toLowerCase();break;default:throw new Error("type of service : unknown or unsupported (json or xml) !")}}}c.prototype=Object.create(s.A.prototype,{}),c.prototype.constructor=c,c.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,onSuccess:function(e){this.request=e,t.call(this,this.request)},onError:e,scope:this,resource:this.options.resource,positions:this.options.positions,outputFormat:this.options.outputFormat,sampling:this.options.sampling,api:this.options.api,zonly:this.options.zonly,measures:this.options.measures};l.A.build(r)},c.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,outputFormat:this.options.outputFormat,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};u.A.build(r)}else e.call(this,new i.A(o.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const p=c},3667:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(3565),o=r(3041),i=r(9206),s={};s.READERS={elevations:function(e){var t=new n.A;if(e.hasChildNodes())for(var r,o,i=e.childNodes,a=0;a{"use strict";r.d(t,{A:()=>a});var n=r(2710),o=r(8288),i=r(6933),s=r(4359);const a={build:function(e){n.A.getLogger("AltiRequestFactory").trace(["AltiRequestFactory::build()"]);var t=null,r={type:e.sampling?"Profil":"Elevation",method:e.httpMethod,param:{positions:null,delimiter:null,indent:null,crs:null,format:null,sampling:null,zonly:null,measures:null}};r.param.positions=e.positions,r.param.format=e.outputFormat,r.param.sampling=e.sampling,r.param.zonly=e.zonly,r.param.measures=e.measures,r.param.resource=e.resource;var a=!(null===e.onError||"function"!=typeof e.onError),l=!(null===e.onSuccess||"function"!=typeof e.onSuccess),u=null;switch(e.api){case"REST":var c=new i.A(r);if(!c.processRequestString()){if(u="Error in process request (rest) !",a)return void e.onError.call(e.scope,new o.A(u));throw new Error(u)}t=c.requestString;break;case"WPS":if(r.wps={service:null,version:null,identifier:null,rawdataoutput:null,request:null},!(t=s.A.build(r))){if(u="Error in process request (wps) !",a)return void e.onError.call(e.scope,new o.A(u));throw new Error(u)}break;default:if(u="Type of API is not supported by service (REST or WPS) !",a)return void e.onError.call(e.scope,new o.A(u));throw new Error(u)}return l&&e.onSuccess.call(e.scope,t),t}}},6933:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(2710),o=r(1097),i=r(5974),s=r(3471);function a(e){if(this.logger=n.A.getLogger("AltiRequestREST"),this.logger.trace("[Constructeur AltiRequestREST ()]"),!(this instanceof a))throw new TypeError("AltiRequestREST constructor cannot be called as a function.");if(this.options=e||{},!this.options)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));if(!this.options.type)throw new Error(o.A.getMessage("PARAM_EMPTY","type (Elevation or Profil)"));switch(this.DataObject=null,this.options.type){case"Elevation":this.DataObject=new i.A(this.options.param);break;case"Profil":this.DataObject=new s.A(this.options.param);break;default:throw new Error(o.A.getMessage("PARAM_TYPE","type (Elevation or Profil)"))}this.method=this.options.method||"GET"}a.prototype={requestString:null,constructor:a,template:{get:{value:"lon=__LON__&lat=__LAT__&indent=__INDENT__&crs='__CRS__'&resource=__RESOURCE__&measures=__MEASURES__",input:{point:"&zonly=__ZONLY__",profil:"&sampling=__SAMPLING__"}},post:{value:"lon=__LON__\nlat=__LAT__\nindent=__INDENT__\ncrs='__CRS__'\nresource='__RESOURCE__'\nmeasures='__MEASURES__'\n",input:{point:"zonly=__ZONLY__\n",profil:"sampling=__SAMPLING__"}}},processRequestString:function(){this.logger.trace("AltiRequestREST::processRequestString ()");var e="";return"POST"===this.method?e=this.template.post.value:"GET"===this.method&&(e=this.template.get.value),e=(e=(e=(e=(e=(e=e.replace(/__LON__/g,this.DataObject.getLon())).replace(/__LAT__/g,this.DataObject.getLat())).replace(/__INDENT__/g,this.DataObject.indent)).replace(/__CRS__/g,this.DataObject.crs)).replace(/__RESOURCE__/g,this.DataObject.resource)).replace(/__MEASURES__/g,this.DataObject.measures),e+=this.__addDataInputs(),this.logger.trace("traduction tmpl",e),this.requestString=e,this.requestString},__addDataInputs:function(){var e;if(this.logger.trace("AltiRequestREST::addDataInput ()"),"POST"===this.method)e=this.template.post;else{if("GET"!==this.method)throw new Error("No other HTTP method supported by the service !");e=this.template.get}if("AltiElevationRequest"===this.DataObject.CLASSNAME)return e.input.point.replace(/__ZONLY__/g,this.DataObject.zonly.toString());if("AltiProfilRequest"===this.DataObject.CLASSNAME)return e.input.profil.replace(/__SAMPLING__/g,this.DataObject.sampling);throw new Error("No other object supported than elevation or profil !?")}};const l=a},4359:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(2710),o=r(1097),i=r(4841),s=r(5974),a=r(3471);const l={build:function(e){if(n.A.getLogger("AltiRequestWPS").trace(["AltiRequestWPS::build()"]),!e)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));if(!e.type)throw new Error(o.A.getMessage("PARAM_EMPTY","type (Elevation or Profil)"));var t=null;switch(e.type){case"Elevation":e.wps.identifier="gs:WPSElevation",t=new s.A(e.param);break;case"Profil":e.wps.identifier="gs:WPSLineElevation",t=new a.A(e.param);break;default:throw new Error(o.A.getMessage("PARAM_TYPE","type (Elevation or Profil)"))}var r={data:t,method:e.method,param:e.wps},l=new i.A(r);if(!l.processRequestString())throw new Error("Enable to process request !");return l.requestString}}},5974:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(2710),o=r(6221);function i(e){if(!(this instanceof i))throw new TypeError("AltiElevationRequest constructor cannot be called as a function.");this.CLASSNAME="AltiElevationRequest",o.A.apply(this,arguments),this.logger=n.A.getLogger(),this.logger.trace("[Constructeur AltiElevationRequest ()]"),this.zonly=this.options.zonly||!1}i.prototype=Object.create(o.A.prototype,{zonly:{get:function(){return this._zonly},set:function(e){this._zonly=e}}}),i.prototype.constructor=i,i.prototype.getData=function(){var e=[];return e.push({k:"lon",v:this.getLon()}),e.push({k:"lat",v:this.getLat()}),e.push({k:"indent",v:this.indent}),e.push({k:"crs",v:this.crs}),e.push({k:"zonly",v:this.zonly}),e.push({k:"format",v:this.format}),e.push({k:"resource",v:this.resource}),e};const s=i},3471:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(2710),o=r(6221);function i(e){if(!(this instanceof i))throw new TypeError("AltiProfilRequest constructor cannot be called as a function.");this.CLASSNAME="AltiProfilRequest",o.A.apply(this,arguments),this.logger=n.A.getLogger(),this.logger.trace("[Constructeur AltiProfilRequest ()]"),this.sampling=this.options.sampling||3}i.prototype=Object.create(o.A.prototype,{sampling:{get:function(){return this._sampling},set:function(e){this._sampling=e}}}),i.prototype.constructor=i,i.prototype.getData=function(){var e=[];return e.push({k:"lon",v:this.getLon()}),e.push({k:"lat",v:this.getLat()}),e.push({k:"indent",v:this.indent}),e.push({k:"crs",v:this.crs}),e.push({k:"sampling",v:this.sampling}),e.push({k:"format",v:this.format}),e.push({k:"resource",v:this.resource}),e};const s=i},6221:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("AltiRequest constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur AltiRequest ()]"),this.options=e||{},this.positions=this.options.positions||[],this.delimiter=this.options.delimiter||"|",this.indent=this.options.indent||!1,this.crs=this.options.crs||"CRS:84",this.format=this.options.format||"json",this.resource=this.options.resource,this.measures=this.options.measures||!1}o.CLASSNAME="AltiRequest",o.prototype={constructor:o,setPositions:function(e){for(var t=[],r=0;rt||e{"use strict";r.d(t,{A:()=>c});var n=r(2710),o=r(1097),i=r(8288),s=r(4904),a=r(3667),l=r(3565),u=r(3041);const c={build:function(e){var t=n.A.getLogger("AltiResponseFactory");t.trace(["AltiResponseFactory::build()"]);var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{switch(e.outputFormat){case"xml":t.trace("analyze response : xml");try{var c=new s.A({reader:a.A});if("string"==typeof e.response?c.setXMLString(e.response):c.setXMLDoc(e.response),!(r=c.parse()))throw new Error(o.A.getMessage("SERVICE_RESPONSE_EXCEPTION_2"))}catch(t){var p=t.message;return void e.onError.call(e.scope,new i.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",p),status:200,type:i.A.TYPE_SRVERR}))}break;case"json":t.trace("analyze response : json"),t.trace("analyze response : ",typeof e.response);var f=null;if((f="string"==typeof e.response?JSON.parse(e.response):e.response)&&f.error)return void e.onError.call(e.scope,new i.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",f.error.description),status:200,type:i.A.TYPE_SRVERR}));if(f){var h,d=f.elevations,m=new l.A;if(Array.isArray(d)&&d.length)for(var g=0;g{"use strict";function n(){if(!(this instanceof n))throw new TypeError("AltiResponse constructor cannot be called as a function.");this.elevations=[]}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},3041:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("Elevation constructor cannot be called as a function.");this.z=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},9206:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("Measure constructor cannot be called as a function.");this.source_name=null,this.source_measure=null,this.z=null,this.acc=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},9338:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(895),o=r(7966),i=r(4889),s=r(2710),a=r(1097),l=r(3474),u=r(8288);function c(e){if(!(this instanceof c))throw new TypeError(a.A.getMessage("CLASS_CONSTRUCTOR","AutoComplete"));this.CLASSNAME="AutoComplete",this.logger=s.A.getLogger("Gp.Services.AutoComplete"),this.logger.trace("[Constructeur AutoComplete (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=o.A.AutoComplete.newUrl()),n.A.apply(this,arguments),!t.text)throw new Error(a.A.getMessage("PARAM_MISSING","text"));this.options.text=t.text,t.type||(t.type=["StreetAddress,PositionOfInterest"]),this.options.type=t.type,this.options.territory=t.terr||"",this.options.maximumResponses=t.maximumResponses||10,"XHR"===this.options.protocol&&"POST"===this.options.httpMethod&&(this.logger.warn("Le service ne gére pas le mode d'interrogation en POST, on bascule sur du GET !"),this.options.httpMethod="GET"),this.options.outputFormat=this.options.rawResponse?"":"json"}c.prototype=Object.create(n.A.prototype,{}),c.prototype.constructor=c,c.prototype.patchOptionConvertor=function(e){const t=e;return t.filterOptions&&(this.logger.warn("The parameter 'filterOptions' is deprecated"),t.filterOptions.type&&(this.logger.warn("The parameter 'filterOptions.type' is deprecated"),t.type||(t.type=t.filterOptions.type)),t.filterOptions.territory&&(this.logger.warn("The parameter 'filterOptions.territory' is deprecated"),t.terr||(t.terr=t.filterOptions.territory)),delete t.filterOptions),t},c.prototype.buildRequest=function(e,t){var r="";this.options.territory&&(r=this.options.territory);var n="";this.options.type&&(n=this.options.type.join(",")),this.request=l.A.normalyzeParameters({text:encodeURIComponent(this.options.text),type:n,terr:r,maximumResponses:this.options.maximumResponses}),this.request?t.call(this,this.request):e.call(this,new u.A(a.A.getMessage("SERVICE_REQUEST_BUILD")))},c.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onSuccess:t,onError:e,scope:this};i.A.build(r)}else e.call(this,new u.A(a.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const p=c},4889:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(2710),o=r(1097),i=r(8288),s=r(5941),a=r(9924);const l={build:function(e){var t=n.A.getLogger("AutoCompleteResponseFactory");t.trace(["AutoCompleteResponseFactory::build()"]);var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{var l=null;if(l="string"==typeof e.response?JSON.parse(e.response):e.response){if(l.error)return void e.onError.call(e.scope,new i.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",l.error.description),status:l.error.code,type:i.A.TYPE_SRVERR}));if(r=new s.A,!l.results||!Array.isArray(l.results))return void e.onError.call(e.scope,new i.A(o.A.getMessage("SERVICE_RESPONSE_FORMAT_3")));for(var u=null,c=0;c{"use strict";function n(){if(!(this instanceof n))throw new TypeError("AutoCompleteResponse constructor cannot be called as a function.");this.suggestedLocations=[]}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},9924:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("SuggestedLocation constructor cannot be called as a function.");this.type=null,this.position={x:null,y:null},this.commune=null,this.fullText=null,this.postalCode=null,this.classification=null,this.street=null,this.poi=null,this.kind=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},895:(e,t,r)=>{"use strict";r.d(t,{A:()=>c});var n=r(2710),o=r(3474),i=r(1097),s=r(6250),a=r(8288),l=r(9032);function u(e){if(!(this instanceof u))throw new TypeError(i.A.getMessage("CLASS_CONSTRUCTOR"));for(var t in this.logger=n.A.getLogger("CommonService"),this.logger.trace("[Constructeur CommonService (options)]"),this.options={protocol:"XHR",ssl:!0,proxyURL:"",callbackSuffix:null,httpMethod:"GET",timeOut:0,rawResponse:!1,scope:this,onSuccess:function(e){console.log("onSuccess - la reponse est la suivante : ",e)},onFailure:function(e){200!==e.status&&e.status?console.log("onFailure - Erreur (",e.status,") : ",e.message):console.log("onFailure : ",e.message)}},e)e.hasOwnProperty(t)&&(this.options[t]=e[t]);if(this.options.rawResponse&&!this.options.onSuccess&&(this.options.onSuccess=function(e){console.log("onSuccess - la réponse brute du service est la suivante : ",e)}),!!(null===this.options.onSuccess||"function"!=typeof this.options.onSuccess))throw new Error(i.A.getMessage("PARAM_MISSING","onSuccess()"));switch(this.options.httpMethod="string"==typeof e.httpMethod?e.httpMethod.toUpperCase():"GET",this.options.httpMethod){case"POST":case"GET":break;case"PUT":case"DELETE":case"HEAD":case"OPTIONS":throw new Error(i.A.getMessage("PARAM_NOT_SUPPORT","httpMethod"));default:throw new Error(i.A.getMessage("PARAM_UNKNOWN","httpMethod"))}switch(this.options.protocol="string"==typeof e.protocol?e.protocol.toUpperCase():"XHR",this.options.protocol){case"JSONP":case"XHR":break;default:throw new Error(i.A.getMessage("PARAM_UNKNOWN","protocol"))}if("undefined"==typeof window&&"JSONP"===this.options.protocol)throw new Error(i.A.getMessage("PARAM_NOT_SUPPORT_NODEJS","protocol=JSONP (instead use XHR)"));"JSONP"===this.options.protocol&&(this.options.httpMethod="GET"),this.options.nocache=e.nocache||!1,this.options.outputFormat=null,this.request=null,this.response=null}u.prototype={constructor:u,call:function(){this.logger.trace("CommonService::call ()");var e=this;function t(t){this.logger.trace("CommonService::onBuildRequest : ",t),this.callService.call(e,o,r)}function r(t){this.logger.trace("CommonService::onCallService : ",t),this.analyzeResponse.call(e,o,n)}function n(e){if(this.logger.trace("CommonService::onAnalyzeResponse : ",e),!e)return o.call(this,new a.A("Analyse de la reponse en échec !?"));this.options.onSuccess.call(this,e)}function o(e){this.logger.trace("CommonService::onError()");var t=e;t instanceof a.A||(t=new a.A(e.message)),this.options.onFailure.call(this,t)}(function(){this.logger.trace("CommonService::run ()"),this.buildRequest.call(e,o,t)}).call(e)},buildRequest:function(e,t){this.logger.error("overwritten method !"),e&&e.call(this,"This method must be overwritten !"),t.call(this,"This method must be overwritten !")},callService:function(e,t){var r=null,n=this.request,i=!(!this.options.proxyURL||"XHR"!==this.options.protocol),u={"gp-access-lib":l.rE};this.options.apiKey&&(u.apiKey=this.options.apiKey),this.options.serverUrl=o.A.normalyzeUrl(this.options.serverUrl,u,!1),i&&("GET"===this.options.httpMethod&&(r=this.options.proxyURL+o.A.normalyzeUrl(this.options.serverUrl,this.request,!0),n=null),"POST"===this.options.httpMethod&&(r=this.options.proxyURL+o.A.normalyzeUrl(this.options.serverUrl,null,!0),n=this.request));var c=this,p={url:r||this.options.serverUrl,method:this.options.httpMethod,protocol:this.options.protocol,timeOut:this.options.timeOut||0,format:this.options.outputFormat,nocache:this.options.nocache||!1,wrap:"XHR"!==this.options.protocol,callbackSuffix:this.options.callbackSuffix,data:n,headers:null,content:this.options.contentType||"application/xml",scope:this.options.scope||this,onResponse:function(r){c.logger.trace("callService::onResponse()");var n=null;if("XHR"===c.options.protocol&&(c.logger.trace("Response XHR",r),n=r),"JSONP"===c.options.protocol){if(c.logger.trace("Response JSON",r),!r)return void e.call(c,new a.A("Le contenu de la reponse est vide !?"));if(r.http){if(200!==r.http.status)return void e.call(c,new a.A({status:r.http.status,message:r.http.error,type:a.A.TYPE_SRVERR}));n=r.xml,c.options.rawResponse&&(n=r)}else n=r}if("function"==typeof c.options.onBeforeParse){var o=c.options.onBeforeParse(n);"string"==typeof o&&(n=o)}c.response=n,t.call(c,n)},onFailure:function(t){c.logger.trace("callService::onFailure()"),t.type=a.A.TYPE_SRVERR,e.call(c,new a.A(t))},onTimeOut:function(){c.logger.trace("callService::onTimeOut()"),e.call(c,new a.A("TimeOut!"))}};s.A.send(p)},analyzeResponse:function(e,t){this.logger.error("overwritten method !"),e&&e.call(this,"This method must be overwritten !"),t.call(this,"This method must be overwritten !")}};const c=u},4154:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(895),s=r(7966),a=r(9939);function l(e){if(!(this instanceof l))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","Config"));if(this.CLASSNAME="Config",this.logger=n.A.getLogger("Gp.Config"),this.logger.trace("[Constructeur Config (options)]"),!!(null===e.onSuccess||"function"!=typeof e.onSuccess))throw new Error(o.A.getMessage("PARAM_MISSING","onSuccess()"));e.apiKey||e.customConfigFile||(e.apiKey="full"),this.options={},this.options.onSuccess=e.onSuccess,this.options.onFailure=e.onFailure,this.options.sync=e.sync||!1,this.options.listConfigUrls=e.customConfigFile?[e.customConfigFile]:Array.isArray(e.apiKey)?s.A.Config.url(e.apiKey):s.A.Config.url(e.apiKey.split(","))}l.prototype=Object.create(i.A.prototype,{}),l.prototype.constructor=l,l.prototype.buildRequest=function(e,t){this.listConfigUrls=this.options.listConfigUrls,this.listConfigUrls?t.call(this,this.listConfigUrls):e.call(this,new Error("url by default not found !"))},l.prototype.callService=function(e,t){this.options.sync?c.call(this,e,t):u.call(this,e,t)};var u=function(e,t){this.listConfigResults=[];let n=null;if("undefined"==typeof window){var o=r(3092);n=o}else n=window.fetch;var i=e=>n(e,{credentials:"same-origin"}).then((e=>{if(e.ok)return e.json().then((e=>e)).catch((e=>{throw new Error("Exception Json : "+e)}));throw new Error("Exception HTTP : "+e.status+" (status code) !")})).catch((e=>new Promise(((t,r)=>{r(e)})))),s=[];for(let e=0;e{if(!e)throw new Error("results config empty !?");e.forEach((e=>{this.listConfigResults.push(e)}))})).then((()=>{t.call(this,this.listConfigResults)})).catch((t=>{e.call(this,t)}))},c=function(e,t){this.listConfigResults=[];for(var r=0;r{"use strict";function n(){if(!(this instanceof n))throw new TypeError("ConfigInterface constructor cannot be called as a function.");this.generalOptions={apiKeys:{},title:null,defaultGMLGFIStyle:null,theme:null,wgs84Resolutions:[]},this.layers={},this.tileMatrixSets={}}r.d(t,{A:()=>o}),n.prototype={constructor:n,isKeyConfLoaded:function(e){if(e)return!!this.generalOptions.apiKeys[e]},getLayersId:function(e){return this.generalOptions.apiKeys[e]},getLayerId:function(e,t){if(e&&t){var r=null;if(this.layers){var n=this.layers;for(var o in n)if(n.hasOwnProperty(o)){var i=o.split("$");if(e===i[0]&&i[1]){var s=i[1].split(":");if(i[1].split(";")[1]===t.toUpperCase()){r=o;break}if(s[2]===t.toUpperCase()){r=o;break}}}}if(r)return r}},getLayersConf:function(e){var t={},r=this.getLayersId(e);if(r)for(var n=0;n{"use strict";r.d(t,{A:()=>o});var n={ssl:!0,newUrl:function(e){return(!1===n.ssl?"http://":"https://")+"data.geopf.fr"+e},Alti:{new_key:{"elevation-json":"/altimetrie/1.0/calcul/alti/rest/elevation.json","elevation-xml":"/altimetrie/1.0/calcul/alti/rest/elevation.xml","profil-json":"/altimetrie/1.0/calcul/alti/rest/elevationLine.json","profil-xml":"/altimetrie/1.0/calcul/alti/rest/elevationLine.xml"},newUrl:function(){return{"elevation-json":n.newUrl(this.new_key["elevation-json"]),"elevation-xml":n.newUrl(this.new_key["elevation-xml"]),"profil-json":n.newUrl(this.new_key["profil-json"]),"profil-xml":n.newUrl(this.new_key["profil-xml"])}}},ProcessIsoCurve:{new_key:"/navigation/isochrone",newUrl:function(){return n.newUrl(this.new_key)}},Config:{_key:"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/dist/",url:function(e){Array.isArray(e)||(e=e.split(","));for(var t=[],r=0;r{"use strict";r.d(t,{A:()=>u});var n=r(1097),o=r(8288),i=r(1135),s=r(6025);function a(){if(!(this instanceof a))throw new TypeError("GeocodeResponseParser constructor cannot be called as a function.")}function l(e,t){var r=new s.A;if(e.geometry&&"Point"===e.geometry.type&&(r.position={lon:e.geometry.coordinates[0],lat:e.geometry.coordinates[1]}),e.properties){for(var n in e.properties)"score"===n?r.accuracy=e.properties[n]:"_type"===n?"address"===e.properties[n]?r.type="StreetAddress":"poi"===e.properties[n]?r.type="PositionOfInterest":"parcel"!==e.properties[n]&&"cadastral"!==e.properties[n]||(r.type="CadastralParcel"):r.placeAttributes[n]=e.properties[n];"address"===e.properties._type&&(r.matchType=void 0!==e.properties.number&&null!==e.properties.number?"street number":"street")}t.locations.push(r)}a.prototype={constructor:a,parse:function(e){var t=new i.A;const r=JSON.parse(e);if("FeatureCollection"===r.type)for(var s=0;s{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(6767),u=r(9375);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","Geocode"));this.CLASSNAME="Geocode",this.logger=n.A.getLogger("Gp.Services.Geocode"),this.logger.trace("[Constructeur Geocode (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=a.A.Geocode.newUrl()),s.A.apply(this,[t]),!t.hasOwnProperty("query"))throw new Error(o.A.getMessage("PARAM_MISSING","query"));if(this.options.query=t.query,t.index||(this.options.index=t.index="StreetAddress"),t.filters)for(var r=Object.keys(t.filters),i=0;i0?t.index=t.filters.type[0]:t.index=t.filters.type),delete t.filters.type),t.filters.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),delete t.filters.bbox)),delete t.filterOptions),t.position&&(t.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),t.position.lon||(t.position.lon=t.position.x),delete t.position.x),t.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),t.position.lat||(t.position.lat=t.position.y),delete t.position.y)),t.returnFreeForm&&(this.logger.warn("The parameter 'returnFreeForm' is deprecated"),delete t.returnFreeForm),t.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete t.srs),t},c.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,geocodeMethod:"search",query:this.options.query,index:this.options.index,returnTrueGeometry:this.options.returnTrueGeometry,position:this.options.position,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=l.A.build(r),this.request?t.call(this,this.request):e.call(this,new i.A(o.A.getMessage("SERVICE_REQUEST_BUILD")))},c.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};u.A.build(r)}else e.call(this,new i.A(o.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const p=c},6767:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(2710),o=r(3955);const i={build:function(e){var t=n.A.getLogger("GeocodeRequestFactory");t.trace(["GeocodeRequestFactory::build()"]);var r=e||{},i=new o.A(r);if(!i.processRequestString())throw new Error("Error process request (rest) !");var s=i.requestString;return t.trace(s),s}}},3955:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(2710),o=r(1097),i=r(3757);function s(e){if(this.logger=n.A.getLogger("GeocodeRequestREST"),this.logger.trace("[Constructeur GeocodeRequestREST ()]"),!(this instanceof s))throw new TypeError("GeocodeRequestREST constructor cannot be called as a function.");if(!e)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));this.settings=e}s.prototype={requestString:null,constructor:s,processRequestString:function(){var e="";const t=new i.A(this.settings).getParams();for(var r=0;r{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("GeocodeParamREST constructor cannot be called as a function.");if(this.logger=n.A.getLogger(),this.logger.trace("[Constructeur GeocodeParamREST ()]"),this.options=e||{},!this.options.geocodeMethod||"search"!==this.options.geocodeMethod&&"reverse"!==this.options.geocodeMethod)throw new Error("Error geocodeMethod not valid");this.geocodeMethod=this.options.geocodeMethod,this.query=void 0!==this.options?this.options.query:null,this.searchGeometry=this.options.searchGeometry||null,this.index=this.options.index||null,this.lon=this.options.position&&this.options.position.lon?this.options.position.lon:null,this.lat=this.options.position&&this.options.position.lat?this.options.position.lat:null,this.maxResp=this.options.maxResp||null,this.returnTrueGeometry=this.options.returnTrueGeometry||null,this.filters=this.options.filters||{}}o.CLASSNAME="GeocodeParamREST",o.prototype={constructor:o,getFilters:function(){var e={};for(var t in this.filters)this.filters.hasOwnProperty(t)&&(e[t]=this.filters[t]);return e},getIndex:function(){return void 0===this.index?null:"StreetAddress"===this.index?"address":"CadastralParcel"===this.index?"parcel":"PositionOfInterest"===this.index?"poi":"location"===this.index?"location":this.index},getSearchGeometry:function(){return JSON.stringify(this.searchGeometry)}},o.prototype.getParams=function(){var e=[];"search"===this.geocodeMethod&&e.push({k:"q",v:this.query}),this.index&&e.push({k:"index",v:this.getIndex()}),"reverse"===this.geocodeMethod&&this.searchGeometry&&e.push({k:"searchgeom",v:this.getSearchGeometry()}),this.lon&&this.lat&&(e.push({k:"lon",v:this.lon}),e.push({k:"lat",v:this.lat})),this.maxResp&&e.push({k:"limit",v:this.maxResp}),this.returnTrueGeometry&&e.push({k:"returntruegeometry",v:this.returnTrueGeometry});const t=this.getFilters();for(var r in t)e.push({k:r,v:t[r]});return e};const i=o},9375:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(8288),o=r(1097),i=r(9723);const s={build:function(e){var t=null;if(e.response){if(e.rawResponse)t=e.response;else{try{if(!(t=(new i.A).parse(e.response)))throw new Error("L'analyse de la réponse du service !?")}catch(t){var r=t.message;return"string"==typeof e.response?r+="('"+e.response+"')":r+="('"+e.response.documentElement.innerHTML+"')",void e.onError.call(e.scope,new n.A({message:o.A.getMessage("SERVICE_RESPONSE_ANALYSE",r),type:n.A.TYPE_UNKERR,status:-1}))}if(t.exceptionReport)return void e.onError.call(e.scope,new n.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",t.exceptionReport),type:n.A.TYPE_SRVERR,status:200}))}e.onSuccess.call(e.scope,t)}else e.onError.call(e.scope,new n.A({message:o.A.getMessage("SERVICE_RESPONSE_EMPTY"),type:n.A.TYPE_SRVERR,status:-1}))}}},1135:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("GeocodeResponse constructor cannot be called as a function.");this.locations=[]}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},6025:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("GeocodedLocation constructor cannot be called as a function.");this.position=null,this.matchType=null,this.placeAttributes={},this.type=null,this.accuracy=null,this.CLASSNAME="GeocodedLocation"}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},6064:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(6767),u=r(9375);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","ReverseGeocode"));this.CLASSNAME="ReverseGeocode",this.logger=n.A.getLogger("Gp.Services.ReverseGeocode"),this.logger.trace("[Constructeur ReverseGeocode (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=a.A.ReverseGeocode.newUrl()),s.A.apply(this,[t]),t.searchGeometry)this.options.searchGeometry=t.searchGeometry;else if(!t.position)throw new Error(o.A.getMessage("PARAM_MISSING","searchGeometry"));if(t.index||(this.options.index=t.index="StreetAddress"),t.filters)for(var r=Object.keys(t.filters),i=0;i0?t.index=t.filterOptions.type[0]:t.index=t.filterOptions.type),delete t.filterOptions.type),t.filterOptions.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),t.searchGeometry||(t.searchGeometry=this.bbox2Json(t.filterOptions.bbox)),delete t.filterOptions.bbox),t.filterOptions.circle&&(this.logger.warn("The parameter 'filterOptions.circle' is deprecated"),t.searchGeometry||(t.searchGeometry=this.circle2Json(t.filterOptions.circle)),delete t.filterOptions.circle),t.filterOptions.polygon&&(this.logger.warn("The parameter 'filterOptions.polygon' is deprecated"),t.searchGeometry||(t.searchGeometry=this.polygon2Json(t.filterOptions.polygon)),delete t.filterOptions.polygon),!t.filters&&Object.keys(t.filterOptions).length>0&&(t.filters=t.filterOptions),delete t.filterOptions),t.position&&(t.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),t.position.lon||(t.position.lon=t.position.x),delete t.position.x),t.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),t.position.lat||(t.position.lat=t.position.y),delete t.position.y)),t.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete t.srs),t},c.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,geocodeMethod:"reverse",searchGeometry:this.options.searchGeometry,index:this.options.index,position:this.options.position,returnTrueGeometry:this.options.returnTrueGeometry,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=l.A.build(r),this.request?t.call(this,this.request):e.call(this,new i.A(o.A.getMessage("SERVICE_REQUEST_BUILD")))},c.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};u.A.build(r)}else e.call(this,new i.A(o.A.getMessage("SERVICE_RESPONSE_EMPTY")))},c.prototype.bbox2Json=function(e){return{type:"Polygon",coordinates:[[[e.left,e.top],[e.right,e.top],[e.right,e.bottom],[e.left,e.bottom],[e.left,e.top]]]}},c.prototype.circle2Json=function(e){return{type:"Circle",radius:e.radius,coordinates:[e.x,e.y]}},c.prototype.polygon2Json=function(e){for(var t={type:"Polygon",coordinates:[[]]},r=0;r{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(9721),u=r(8297);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","ProcessIsoCurve"));if(this.CLASSNAME="ProcessIsoCurve",s.A.apply(this,arguments),this.logger=n.A.getLogger("Gp.Services.ProcessIsoCurve"),this.logger.trace("[Constructeur ProcessIsoCurve (options)]"),!e.position)throw new Error(o.A.getMessage("PARAM_MISSING","position"));if(null===e.position.x)throw new Error(o.A.getMessage("PARAM_MISSING","position.x"));if(null===e.position.y)throw new Error(o.A.getMessage("PARAM_MISSING","position.y"));if(!e.time&&!e.distance)throw new Error("Parameter (s) 'distance' missing. Parameter time to calculate an isochrone, parameter distance for an isodistance");if(!e.time&&e.distance&&(this.options.method="distance",this.options.time&&delete this.options.time),e.time&&!e.distance&&(this.options.method="time",this.options.distance&&delete this.options.distance),this.options.method=this.options.method||"time",this.options.resource=e.resource||"bdtopo-valhalla",this.options.exclusions=e.exclusions||[],this.options.reverse=e.reverse||!1,this.options.srs=e.srs||"EPSG:4326",this.options.distanceUnit=e.distanceUnit||"m",this.options.timeUnit=e.timeUnit||"second",e.smoothing&&this.logger.warn("options.smoothing is DEPRECATED"),this.options.smoothing=!1,e.holes&&this.logger.warn("options.holes is DEPRECATED"),this.options.holes=!1,e.graph?("Voiture"===e.graph&&(this.options.graph="car"),"Pieton"===e.graph&&(this.options.graph="pedestrian")):this.options.graph="car",this.options.constraints=[],e.constraints){if(!Array.isArray(e.constraints))throw new Error(o.A.getMessage("PARAM_TYPE","constraints"));for(var t=0;t{"use strict";r.d(t,{A:()=>a});var n=r(2710),o=r(1097),i=r(527);function s(e){if(this.logger=n.A.getLogger("ProcessIsoCurveRequest"),this.logger.trace("[Constructeur ProcessIsoCurveRequest ()]"),!(this instanceof s))throw new TypeError("ProcessIsoCurveRequest constructor cannot be called as a function.");if(!e)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));this.settings=e,this.mode=this.settings.httpMethod||"GET"}s.prototype={requestString:null,constructor:s,processRequestString:function(){var e="",t=0;switch(this.mode){case"GET":this.logger.trace("Process GET Request");var r=new i.A(this.settings).getParams();for(t=0;t{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("ProcessIsoCurveParam constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur ProcessIsoCurveParam ()]"),this.options=e||{},this.id=this.options.id,this.resource=this.options.resource,this.point=this.options.position,this.crs=this.options.srs,this.profile=this.options.graph,this.constraints=this.options.constraints,this.reverse=this.options.reverse,this.timeUnit=this.options.timeUnit,this.distanceUnit=this.options.distanceUnit,"distance"===this.options.method?(this.costType="distance",this.costValue=this.options.distance,"m"===this.distanceUnit&&this.costValue>=5e4&&(this.distanceUnit="km",this.costValue/=1e3)):(this.costType="time",this.costValue=this.options.time)}o.CLASSNAME="ProcessIsoCurveParam",o.prototype={constructor:o,getLocation:function(){return this.point.x+","+this.point.y},getDistanceUnit:function(){return"m"===this.distanceUnit?"meter":"km"===this.distanceUnit?"kilometer":""},getConstraints:function(){var e=[];if(0!==this.constraints.length)for(var t=0;t{"use strict";r.d(t,{A:()=>a});var n=r(2710),o=r(1097),i=r(8288),s=r(1489);const a={build:function(e){var t=n.A.getLogger("ProcessIsoCurveResponseFactory");t.trace(["ProcessIsoCurveResponseFactory::build()"]);var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{var a;if(t.trace("analyze response : json"),a="string"==typeof e.response?JSON.parse(e.response):e.response,r=new s.A,!a)return void e.onError.call(e.scope,new i.A(o.A.getMessage("SERVICE_RESPONSE_ANALYSE",e.response)));"distance"===a.costType?(r.time="",r.distance=a.costValue):(r.time=a.costValue,r.distance=""),r.message="",r.id="",r.srs=a.crs,r.geometry=a.geometry;var l=a.point.split(",");if(r.location&&(r.location.x=l[0],r.location.y=l[1]),r.exceptionReport)return void e.onError.call(e.scope,new i.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",r.exceptionReport),type:i.A.TYPE_SRVERR,status:200}))}e.onSuccess.call(e.scope,r)}else e.onError.call(e.scope,new i.A(o.A.getMessage("SERVICE_RESPONSE_EMPTY")))}}},1489:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("ProcessIsoCurveResponse constructor cannot be called as a function.");this.message=null,this.id=null,this.location={},this.location.x=null,this.location.y=null,this.srs=null,this.geometry=null,this.time=null,this.distance=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},6759:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(2710),o=r(8288),i=r(5851);const s={build:function(e){n.A.getLogger("RouteRequestFactory").trace(["RouteRequestFactory::build()"]);var t=e||{},r=!(null===e.onError||"function"!=typeof e.onError),s=null,a=new i.A(t);if(!a.processRequestString()){if(s="Error process request (rest) !",r)return void e.onError.call(e.scope,new o.A(s));throw new Error(s)}return a.requestString}}},5851:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(2710),o=r(1097),i=r(2785);function s(e){if(this.logger=n.A.getLogger("RouteRequestREST"),this.logger.trace("[Constructeur RouteRequestREST ()]"),!(this instanceof s))throw new TypeError("RouteRequestREST constructor cannot be called as a function.");if(!e)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));this.settings=e}s.prototype={requestString:null,constructor:s,processRequestString:function(){this.logger.warn(" PROTOTYPE !");for(var e=new i.A(this.settings).getParams(),t="",r=0;r{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("RouteParamREST constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur RouteParamREST ()]"),this.options=e||{},this.resource=this.options.resource,this.start=this.options.startPoint.x+","+this.options.startPoint.y,this.end=this.options.endPoint.x+","+this.options.endPoint.y,this.intermediates=this.options.viaPoints,this.profile=this.options.graph,this.crs=this.options.srs,this.constraints=this.options.constraints,this.optimization=this.options.routePreference,this.getSteps=this.options.geometryInInstructions?"true":"false",this.distanceUnit=this.options.distanceUnit,this.timeUnit=this.options.timeUnit,this.waysAttributes=this.options.waysAttributes}o.CLASSNAME="RouteParamREST",o.prototype={constructor:o,getIntermediates:function(){var e=[];if(0!==this.intermediates.length)for(var t=0;t{"use strict";r.d(t,{A:()=>l});var n=r(2710),o=r(1097),i=r(8288),s=r(2993),a=r(7868);const l={build:function(e){var t=n.A.getLogger("RouteResponseFactory");t.trace("RouteResponseFactory::build()");var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{var l;if(t.trace("analyze response : json"),l="string"==typeof e.response?JSON.parse(e.response):e.response){if(l.message)return void e.onError.call(e.scope,new i.A(o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",l.message)));var u=[],c=[],p=[];if((r=new s.A).hasOwnProperty("totalTime")&&(r.totalTime=parseFloat(l.duration)),r.hasOwnProperty("totalDistance")&&(r.totalDistance=parseFloat(l.distance)),r.hasOwnProperty("bbox")&&(r.bbox.left=parseFloat(l.bbox[0]),r.bbox.bottom=parseFloat(l.bbox[1]),r.bbox.right=parseFloat(l.bbox[2]),r.bbox.top=parseFloat(l.bbox[3])),r.hasOwnProperty("routeGeometry")&&!e.geometryInInstructions&&(r.routeGeometry=l.geometry),r.hasOwnProperty("routeInstructions")&&e.geometryInInstructions){var f,h=l.portions;if(Array.isArray(h)&&h.length)for(f=0;f{"use strict";function n(){if(!(this instanceof n))throw new TypeError("RouteInstruction constructor cannot be called as a function.");this.duration=null,this.distance=null,this.code=null,this.instruction=null,this.geometry=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},2993:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("RouteResponse constructor cannot be called as a function.");this.totalTime=null,this.totalDistance=null,this.bbox={left:null,right:null,top:null,bottom:null},this.routeGeometry=null,this.routeInstructions=[]}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},7372:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(6759),u=r(3753);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","Route"));if(this.CLASSNAME="Route",s.A.apply(this,arguments),this.logger=n.A.getLogger("Gp.Services.Route"),this.logger.trace("[Constructeur Route (options)]"),!e.startPoint)throw new Error(o.A.getMessage("PARAM_MISSING","startPoint"));if(null===e.startPoint.x)throw new Error(o.A.getMessage("PARAM_MISSING","startPoint.x"));if(null===e.startPoint.y)throw new Error(o.A.getMessage("PARAM_MISSING","startPoint.y"));if(!e.endPoint)throw new Error(o.A.getMessage("PARAM_MISSING","endPoint"));if(null===e.endPoint.x)throw new Error(o.A.getMessage("PARAM_MISSING","endPoint.x"));if(null===e.endPoint.y)throw new Error(o.A.getMessage("PARAM_MISSING","endPoint.y"));if(e.outputFormat&&"json"!==e.outputFormat&&this.logger.warn("options.outputFormat could only be json"),this.options.outputFormat="json",this.options.resource=e.resource||"bdtopo-osrm",this.options.startPoint=e.startPoint,this.options.endPoint=e.endPoint,this.options.viaPoints=e.viaPoints||[],this.options.routePreference=e.routePreference||"fastest",e.graph?("Voiture"===e.graph&&(this.options.graph="car"),"Pieton"===e.graph&&(this.options.graph="pedestrian")):this.options.graph="car",this.options.constraints=[],e.constraints){if(!Array.isArray(e.constraints))throw new Error(o.A.getMessage("PARAM_TYPE","constraints"));for(var t=0;t{"use strict";r.d(t,{A:()=>c});var n=r(4154),o=r(2366),i=r(1520),s=r(6064),a=r(9338),l=r(7372),u=r(7180);const c={getConfig:function(e){new n.A(e).call()},getAltitude:function(e){new o.A(e).call()},geocode:function(e){new i.A(e).call()},reverseGeocode:function(e){new s.A(e).call()},autoComplete:function(e){new a.A(e).call()},route:function(e){new l.A(e).call()},isoCurve:function(e){new u.A(e).call()}}},3474:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});const n={normalyzeParameters:function(e){var t=null;if(e){var r=[];for(var n in e)if(e.hasOwnProperty(n)){var o=e[n];o||(o=""),r.push(n+"="+o)}t=r.join("&")}return t},normalyzeUrl:function(e,t,r){var n=e;if(e){if(e.split("?").length-1>=2){var o=e.search(/\?/)+1;n=e.substring(0,o)+e.slice(o).replace(/\?/g,"&")}var i=e.indexOf("?");-1===i&&(n+="?"),-1!==i&&i!==e.length-1&&(n+="&")}return t&&(n+="string"==typeof t?t=t.replace("?",""):this.normalyzeParameters(t)),r&&(n=encodeURIComponent(n)),n},indent:function(e,t){return new Array((e||0)+1).join("\t")+t}}},2710:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(3065);const o={getLogger:function(e){if(void 0===t)var t={env:{VERBOSE:!1}};t.env.VERBOSE?n.enableAll():n.disableAll();var r=e||"default";return n.getLogger(r)}}},1097:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});const n={PARAM_MISSING:"Parameter(s) '%var%' missing",PARAM_EMPTY:"Parameter(s) '%var%' empty",PARAM_TYPE:"Wrong type(s) for parameter(s) '%var%'",PARAM_FORMAT:"Parameter(s) '%var%' not correctly formatted",PARAM_NOT_SUPPORT:"Value(s) for parameter(s) '%var%' not supported",PARAM_NOT_SUPPORT_NODEJS:"Value(s) for parameter(s) '%var%' not supported to NodeJS",PARAM_UNKNOWN:"Value(s) for parameter(s) '%var%' unknown",SERVICE_REQUEST_BUILD:"An error occurred during the request building of the service",SERVICE_REQUEST_EMPTY:"The request sent to the service is empty",SERVICE_RESPONSE_EXCEPTION:"The service returned an exception : '%var%'",SERVICE_RESPONSE_EXCEPTION_2:"The service returned an exception",SERVICE_RESPONSE_ANALYSE:"An error occurred while parsing the response '%var%' of the service",SERVICE_RESPONSE_ANALYSE_2:"An unknown error occurred while parsing the response",SERVICE_RESPONSE_EMPTY:"The response of the service is empty",SERVICE_RESPONSE_EMPTY_2:"The response from the service could not be analyzed or is empty",SERVICE_RESPONSE_FORMAT:"The format of the service response is not supported (handled format(s) : '%var%')",SERVICE_RESPONSE_FORMAT_2:"The format of the service response is not supported",SERVICE_RESPONSE_FORMAT_3:"No suggestion matching the search",CLASS_CONSTRUCTOR:"'%var%' constructor cannot be called as a function.",getMessage:function(e,t){if(0===Object.keys(arguments).length)return"Message indefined !";var r=Array.prototype.slice.call(arguments),n=r.shift(),o=r,i=this[n];try{i=Array.isArray(o)&&o.length>0?i.replace("%var%",o.join(" - ")):i.replace("%var%","%var% (not specified)")}catch(e){}return i}}},3065:function(e,t,r){var n,o;!function(){"use strict";n=function(){var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"],o={},i=null;function s(e,t){var r=e[t];if("function"==typeof r.bind)return r.bind(e);try{return Function.prototype.bind.call(r,e)}catch(t){return function(){return Function.prototype.apply.apply(r,[e,arguments])}}}function a(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function l(n){return"debug"===n&&(n="log"),typeof console!==t&&("trace"===n&&r?a:void 0!==console[n]?s(console,n):void 0!==console.log?s(console,"log"):e)}function u(){for(var r=this.getLevel(),o=0;o=0&&t<=c.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?f+=":"+e:"symbol"==typeof e&&(f=void 0),c.name=e,c.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},c.methodFactory=r||p,c.getLevel=function(){return null!=l?l:null!=a?a:s},c.setLevel=function(e,t){return l=g(e),!1!==t&&h(l),u.call(c)},c.setDefaultLevel=function(e){a=g(e),d()||c.setLevel(e,!1)},c.resetLevel=function(){l=null,m(),u.call(c)},c.enableAll=function(e){c.setLevel(c.levels.TRACE,e)},c.disableAll=function(e){c.setLevel(c.levels.SILENT,e)},c.rebuild=function(){if(i!==c&&(s=g(i.getLevel())),u.call(c),i===c)for(var e in o)o[e].rebuild()},s=g(i?i.getLevel():"WARN");var y=d();null!=y&&(l=g(y)),u.call(c)}(i=new f).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=o[e];return t||(t=o[e]=new f(e,i.methodFactory)),t};var h=typeof window!==t?window.log:void 0;return i.noConflict=function(){return typeof window!==t&&window.log===i&&(window.log=h),i},i.getLoggers=function(){return o},i.default=i,i},void 0===(o="function"==typeof n?n.call(t,r,t,e):n)||(e.exports=o)}()},3092:(e,t,r)=>{"use strict";var n=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==r.g)return r.g;throw new Error("unable to locate global object")}();e.exports=t=n.fetch,n.fetch&&(t.default=n.fetch.bind(n)),t.Headers=n.Headers,t.Request=n.Request,t.Response=n.Response},2938:e=>{"use strict";e.exports=ol.extent},7304:e=>{"use strict";e.exports=ol.format.GeoJSON},9583:e=>{"use strict";e.exports=ol.layer.Tile},996:e=>{"use strict";e.exports=ol.layer.Vector},2947:e=>{"use strict";e.exports=ol.loadingstrategy},9201:e=>{"use strict";e.exports=ol.proj},3668:e=>{"use strict";e.exports=ol.source.Vector},8062:e=>{"use strict";e.exports=ol.tilegrid},9032:e=>{"use strict";e.exports=JSON.parse('{"rE":"3.4.6","p6":"19/12/2024"}')},8330:e=>{"use strict";e.exports=JSON.parse('{"rE":"1.0.0-beta.1-317"}')}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n].call(i.exports,i,i.exports,r),i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r(9290),r(421),r(2579),r(3487),r(4659),r(4998),r(9815);var n=r(1596);GpfExtOlLayers=n.default})(); +e.exports=function(){"use strict";function e(e){var t=typeof e;return null!==e&&("object"===t||"function"===t)}function t(e){return"function"==typeof e}var n=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},o=0,i=void 0,s=void 0,a=function(e,t){w[o]=e,w[o+1]=t,2===(o+=2)&&(s?s(E):S())};function l(e){s=e}function u(e){a=e}var c="undefined"!=typeof window?window:void 0,p=c||{},f=p.MutationObserver||p.WebKitMutationObserver,h="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),d="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function m(){return function(){return process.nextTick(E)}}function g(){return void 0!==i?function(){i(E)}:b()}function y(){var e=0,t=new f(E),r=document.createTextNode("");return t.observe(r,{characterData:!0}),function(){r.data=e=++e%2}}function v(){var e=new MessageChannel;return e.port1.onmessage=E,function(){return e.port2.postMessage(0)}}function b(){var e=setTimeout;return function(){return e(E,1)}}var w=new Array(1e3);function E(){for(var e=0;e{"use strict";function n(e){if(!(this instanceof n))throw new TypeError("ErrorService constructor cannot be called as a function.");var t=e;"string"==typeof e||e instanceof String?(this.message=e,this.status=-1,this.type=n.TYPE_UNKERR):(this.message=t.message||"undefined!?",this.type=t.type,this.status=t.status||-1),this.name="ErrorService",this.stack=(new Error).stack}r.d(t,{A:()=>o}),n.TYPE_SRVERR="SERVICE_ERROR",n.TYPE_USEERR="USAGE_ERROR",n.TYPE_UNKERR="UNKNOWN_ERROR",n.prototype=Object.create(Error.prototype,{constructor:{value:n,writable:!0,configurable:!0}});const o=n},4841:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(this.logger=n.A.getLogger(),this.logger.trace("[Constructeur WPS()]"),!(this instanceof o))throw new TypeError("WPS constructor cannot be called as a function.");if(this.options=e||{},this.DataObject=this.options.data,!this.DataObject)throw new TypeError("This data object is not defined !");this.paramservice=this.options.param.service||"WPS",this.paramversion=this.options.param.version||"1.0.0",this.paramidentifier=this.options.param.identifier||"gs:WPS",this.paramrawdataoutput=this.options.param.rawdataoutput||"result",this.paramrequest=this.options.param.request||"Execute",this.method=this.options.method||"GET"}o.prototype={requestString:null,constructor:o,template:{get:{value:"service=__SERVICE__&version=__VERSION__&rawdataoutput=__RAWDATAOUTPUT__&identifier=__IDENTIFIER__&request=__REQUEST__&datainputs=\x3c!-- __DATAINPUTS__ --\x3e",input:"__KEY__=__DATA__"},post:{value:'__IDENTIFIER__\x3c!-- __DATAINPUTS__ --\x3e__RAWDATAOUTPUT__',input:"__KEY____DATA__"}},namespaceByDefault:function(){return['xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"','xmlns="http://www.opengis.net/wps/1.0.0"','xmlns:wfs="http://www.opengis.net/wfs"','xmlns:wps="http://www.opengis.net/wps/1.0.0"','xmlns:ows="http://www.opengis.net/ows/1.1"','xmlns:gml="http://www.opengis.net/gml"','xmlns:ogc="http://www.opengis.net/ogc"','xmlns:wcs="http://www.opengis.net/wcs/1.1.1"','xmlns:xlink="http://www.w3.org/1999/xlink"'].join(" ")},schemaLocationByDefault:function(){return'xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd"'},processRequestString:function(){this.logger.trace("WPS::processRequestString ()");var e="";if("POST"===this.method)e=this.template.post.value;else{if("GET"!==this.method)return this.logger.error("No other method supported by the service !"),!1;e=this.template.get.value}return e=(e=(e=(e=(e=e.replace(/__SERVICE__/g,this.paramservice)).replace(/__VERSION__/g,this.paramversion)).replace(/__RAWDATAOUTPUT__/g,this.paramrawdataoutput)).replace(/__IDENTIFIER__/g,this.paramidentifier)).replace(/__REQUEST__/g,this.paramrequest),"POST"===this.method&&(e=(e=e.replace(/__NAMESPACE__/g,this.namespaceByDefault)).replace(/__SCHEMALOCATION__/g,this.schemaLocationByDefault)),(e=e.replace(//g,this.__addDataInputs()))?(this.requestString=e,this.logger.trace("traduction tmpl",e),!0):(this.logger.warn("traduction tmpl : empty request !?"),!1)},__addDataInputs:function(){this.logger.trace("WPS::__addDataInputs ()");for(var e,t="GET"===this.method?this.template.get.input:this.template.post.input,r="GET"===this.method?";":"",n="",o=this,i=this.DataObject.getData(),s=0;s{"use strict";r.d(t,{A:()=>a});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("XML constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur XML ()]"),this.xmlString=null,this.xmlDoc=null,this.reader=null,e&&(e.xmlString&&"string"==typeof e.xmlString&&(this.xmlString=e.xmlString,this.xmlDoc=i(e.xmlString)),e.reader&&this.setReader(e.reader))}function i(e){if("undefined"==typeof window)return(new(0,r(8978).S4)).parseFromString(e,"text/xml");var t,n,o="Erreur lors du parsing de la réponse du service : XML non conforme";if(window.ActiveXObject){(n=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,n.loadXML(e);var i=n.parseError;if(i.errorCode)throw i.line&&i.linepos&&(o+="( ligne "+i.line+", colonne "+i.linepos),i.reason&&(o+=": "+i.reason+")"),new Error(o);return n}if(window.DOMParser){t=new window.DOMParser;try{n=t.parseFromString(e,"text/xml")}catch(e){throw"SyntaxError"===e.message?new Error(o):new Error("Erreur lors du parsing de la réponse du service : "+e.message)}if(n.getElementsByTagName("parsererror").length>0)for(var s=n.getElementsByTagName("parsererror"),a=0;a0){var r=function(e){if(e.attributes.length>0){for(var t={},r=e.attributes,n=0;n{"use strict";r.d(t,{Ay:()=>w});var n=r(3255),o=r(7966),i=r(3565),s=r(3041),a=r(5941),l=r(9924),u=r(1489),c=r(2993),p=r(7868),f=r(4154),h=r(210),d=r(8288),m=r(3474),g=r(9032);const y=g.rE,v=g.p6;var b={};b.servicesVersion=y,b.servicesDate=v,b.Protocols={},b.Protocols.XHR=h.A,b.Services=n.A,b.Services.DefaultUrl=o.A,b.Services.AltiResponse=i.A,b.Services.Alti={},b.Services.Alti.Elevation=s.A,b.Services.AutoCompleteResponse=a.A,b.Services.AutoComplete={},b.Services.AutoComplete.SuggestedLocation=l.A,b.Services.Config=f.A,b.Services.IsoCurveResponse=u.A,b.Services.RouteResponse=c.A,b.Services.Route={},b.Services.Route.RouteInstruction=p.A,b.Error=d.A,b.Helper=m.A;const w=b},3494:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n,o=r(2710);const i={uuid:(n=Math.floor(Date.now()),function(){return n++}),call:function(e){var t=o.A.getLogger("JSONP");if(t.trace("[JSONP::call ()]"),!e)throw t.error("missing parameter : options !"),new Error("missing parameter : options !");if(!e.url)throw t.error("missing parameter : options.url !"),new Error("missing parameter : options.url !");if(e.timeOut||(t.info("setting 'options.timeOut' default value"),e.timeOut=0),!e.onResponse)throw t.error("missing parameter : options.onResponse !"),new Error("missing parameter : options.onResponse !");var r="string"==typeof e.callbackSuffix?e.callbackSuffix:this.uuid(),n=!1,i=!1,s=e.url.indexOf("callback=");if(-1!==s){n=!0;var a=e.url.indexOf("&",s);-1===a&&(a=e.url.length);var l=e.url.substring(s+9,a);l&&(i=!0,e.callbackName=l,t.info("setting 'options.callbackName' value ("+e.callbackName+") from 'options.url' parameter"))}if(!n){var u=e.url.indexOf("?");-1===u?e.url=e.url+"?callback=":u===e.url.length?e.url=e.url+"callback=":e.url=e.url+"&callback=",t.info("setting callback default key in 'options.url' : "+e.url)}var c=!!e.callbackName||i;if(i||(e.callbackName||(t.info("setting 'options.callbackName' default value"),e.callbackName="callback",(r||""===r)&&(e.callbackName+=r)),e.url=e.url.replace("callback=","callback="+e.callbackName),t.info("setting callback function name in 'options.url' : "+e.url)),e.onTimeOut||(t.info("setting 'options.onTimeOut' default value"),e.onTimeOut=function(){console.log("TimeOut while invoking url : "+e.url)}),!c){var p=this,f=null;e.timeOut>0&&(f=window.setTimeout((function(){window[e.callbackName]=function(){},e.onTimeOut(),p._deleteScript(r)}),e.timeOut)),window[e.callbackName]=function(t){window.clearTimeout(f),e.onResponse(t),p._deleteScript(r)}}this._createScript(r,e.url)},_createScript:function(e,t){var r,n=document.getElementById("results"+e);(r=document.createElement("script")).setAttribute("type","text/javascript"),r.setAttribute("src",t),r.setAttribute("charset","UTF-8"),r.setAttribute("id","results"+e),r.setAttribute("async","true");var o=document.documentElement||document.getElementsByTagName("head")[0];null===n?o.appendChild(r):o.replaceChild(r,n)},_deleteScript:function(e){var t=document.getElementById("results"+e);if(t){var r=t.parentNode||document.documentElement;if(!r)return;r.removeChild(t)}}}},6250:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(3474),o=r(210),i=r(3494);const s={send:function(e){var t=e||{method:"GET",protocol:"XHR",timeOut:0,format:null,wrap:!0,nocache:!0,output:"json",callback:null,callbackSuffix:null};if("undefined"!=typeof window||"JSONP"!==e.protocol){if("XHR"===e.protocol||"json"===e.format?t.wrap=!1:"JSONP"===e.protocol&&"xml"===e.format&&(t.wrap=!0),t.callback=null,t.output=t.wrap?"json":null,t.wrap){var r={};r.output=t.output,r.callback=t.callback,delete r.callback,t.url=n.A.normalyzeUrl(e.url,r)}switch(t.protocol){case"XHR":"GET"===e.method&&e.nocache&&(t.url=n.A.normalyzeUrl(t.url,{t:(new Date).getTime()})),o.A.call(t);break;case"JSONP":t.data&&(t.url=n.A.normalyzeUrl(t.url,t.data)),i.A.call(t);break;default:throw new Error("protocol not supported (XHR|JSONP) !")}}else console.log("Value (s) for parameter (s) 'protocol=JSONP (instead use XHR)' not supported to NodeJS")}}},210:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(2710),o=r(3474),i=r(6964),s=r.n(i);const a={call:function(e){var t=n.A.getLogger("XHR");if(t.trace("[XHR::call()]"),s().polyfill(),!e.url)throw new Error("missing parameter : url is not defined !");if(!e.method)throw new Error("missing parameter : method is not defined !");e.format||(e.format="text");var r={};switch(r.url=e.url,r.data=e.data?e.data:null,r.method=e.method,r.timeOut=e.timeOut||0,r.scope=e.scope||this,r.proxy=e.proxy||null,r.content=e.content||null,r.headers=e.headers||{referer:"http://localhost"},e.method){case"DELETE":case"GET":break;case"PUT":case"POST":r.content=e.content?e.content:"application/x-www-form-urlencoded",r.headers=e.headers?e.headers:{referer:"http://localhost"};break;case"HEAD":case"OPTIONS":throw new Error("HTTP method not yet supported !");default:throw new Error("HTTP method unknown !")}switch(e.format){case"text":this.__call(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;case"json":this.__callJSON(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;case"xml":this.__callXML(r).then((function(r){t.trace(r),e.onResponse.call(this,r)})).catch((function(t){e.onFailure.call(this,t)}));break;default:throw new Error("This output Format is not yet supported !")}},__call:function(e){var t=n.A.getLogger("XHR");return t.trace("[XHR::__call()]"),new Promise((function(n,i){var s="POST"===e.method||"PUT"===e.method?1:0;e.data&&("object"==typeof e.data&&Object.keys(e.data).length||"string"==typeof e.data&&e.data.length)&&!s&&(e.url=o.A.normalyzeUrl(e.url,e.data)),t.trace("URL = ",e.url);var a=null;if("undefined"==typeof window){var l=r(3092),u={headers:{Referer:"https://localhost"}};return e.data&&"string"==typeof e.data&&s&&(u={method:e.method,body:e.data,headers:{"Content-Type":e.content,Referer:"https://localhost"}}),l(e.url,u).then((function(e){if(e.ok)n(e.text());else{var t="Errors Occured on Http Request (status : '"+e.statusText+"' | url : '"+e.url+"')",r=e.status;i({message:t,status:r})}})).catch((function(e){i({message:e,status:-1})}))}if(window.XMLHttpRequest){t.trace("XMLHttpRequest"),(a=new XMLHttpRequest).open(e.method,e.url,!0),a.overrideMimeType=e.content;var c=null;e.timeOut>0&&(t.trace("XHR - TimeOut actif !"),c=window.setTimeout((function(){i({message:"TimeOut Occured on Http Request with XMLHttpRequest !",status:-1})}),e.timeOut)),s&&(t.trace("data = ",e.data),a.setRequestHeader("Content-type",e.content)),a.onerror=function(e){console.log(e),i(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},a.ontimeout=function(e){console.log(e),i(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},a.onreadystatechange=function(e){if(4===a.readyState)if(200===a.status)window.clearTimeout(c),n(a.response);else{var t="Errors Occured on Http Request (status : '"+e.target.statusText+"' | url : '"+e.target.responseURL+"' | response : '"+e.target.response+"')",r=e.target.status;i({message:t,status:r})}};var p=e.data&&s?e.data:null;a.send(p)}else{if(!window.XDomainRequest)throw new Error("CORS not supported");t.trace("XDomainRequest"),(a=new XDomainRequest).open(e.method,e.url),a.overrideMimeType=e.content,e.timeOut>0&&(a.timeout=e.timeout,t.trace("XHR - TimeOut actif !")),s&&a.setRequestHeader("Content-type",e.content),a.onerror=function(){i(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},a.ontimeout=function(){i(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},a.onload=function(e){if(200===a.status)n(a.responseText);else{var t="Errors Occured on Http Request (status : '"+e.target.statusText+"' | url : '"+e.target.responseURL+"')",r=e.target.status;i({message:t,status:r})}};var f=e.data&&s?e.data:null;a.send(f)}}))},__callJSON:function(e){return this.__call(e).then(JSON.parse).catch((function(t){console.log("_callJSON failed on : ",e.url,t)}))},__callXML:function(e){return this.__call(e).then((function(e){var t;"undefined"==typeof window?t=(new(0,r(8978).S4)).parseFromString(e,"text/xml"):window.DOMParser?t=(new window.DOMParser).parseFromString(e,"text/xml"):((t=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,t.loadXML(e));return t})).catch((function(t){console.log("__callXML failed on : ",e.url,t)}))}}},2366:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(8933),u=r(5325);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","Alti"));if(this.CLASSNAME="Alti",s.A.apply(this,arguments),this.logger=n.A.getLogger("Gp.Services.Alti"),this.logger.trace("[Constructeur Alti (options)]"),!e.positions)throw new Error(o.A.getMessage("PARAM_MISSING","positions"));if(0===e.positions.length)throw new Error(o.A.getMessage("PARAM_EMPTY","positions"));if(this.options.positions=e.positions,this.options.outputFormat="string"==typeof e.outputFormat?e.outputFormat.toLowerCase():"xml",this.options.resource=e.resource||"ign_rge_alti_wld",this.options.sampling=e.sampling||null,this.options.api="string"==typeof e.api?e.api.toUpperCase():"REST","REST"===this.options.api&&(this.options.httpMethod="GET"),this.options.zonly=e.zonly||!1,this.options.measures=e.measures||!1,!this.options.serverUrl){var t=a.A.Alti.newUrl(),r=null;switch(this.options.api){case"WPS":r=t.wps;break;case"REST":r=t[(e.sampling?"profil":"elevation")+"-"+this.options.outputFormat];break;default:throw new Error(o.A.getMessage("PARAM_UNKNOWN","api"))}if(!r)throw new Error("Url by default not found !");this.options.serverUrl=r,this.logger.trace("Server URL by default : "+this.options.serverUrl)}var i=this.options.serverUrl.lastIndexOf(".");if(-1!==i){var l=this.options.serverUrl.substring(i+1);if(l&&l.length<5)switch(this.logger.trace("Server Extension URL : "+l),l.toLowerCase()){case"json":case"xml":this.options.outputFormat=l.toLowerCase();break;default:throw new Error("type of service : unknown or unsupported (json or xml) !")}}}c.prototype=Object.create(s.A.prototype,{}),c.prototype.constructor=c,c.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,onSuccess:function(e){this.request=e,t.call(this,this.request)},onError:e,scope:this,resource:this.options.resource,positions:this.options.positions,outputFormat:this.options.outputFormat,sampling:this.options.sampling,api:this.options.api,zonly:this.options.zonly,measures:this.options.measures};l.A.build(r)},c.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,outputFormat:this.options.outputFormat,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};u.A.build(r)}else e.call(this,new i.A(o.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const p=c},3667:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(3565),o=r(3041),i=r(9206),s={};s.READERS={elevations:function(e){var t=new n.A;if(e.hasChildNodes())for(var r,o,i=e.childNodes,a=0;a{"use strict";r.d(t,{A:()=>a});var n=r(2710),o=r(8288),i=r(6933),s=r(4359);const a={build:function(e){n.A.getLogger("AltiRequestFactory").trace(["AltiRequestFactory::build()"]);var t=null,r={type:e.sampling?"Profil":"Elevation",method:e.httpMethod,param:{positions:null,delimiter:null,indent:null,crs:null,format:null,sampling:null,zonly:null,measures:null}};r.param.positions=e.positions,r.param.format=e.outputFormat,r.param.sampling=e.sampling,r.param.zonly=e.zonly,r.param.measures=e.measures,r.param.resource=e.resource;var a=!(null===e.onError||"function"!=typeof e.onError),l=!(null===e.onSuccess||"function"!=typeof e.onSuccess),u=null;switch(e.api){case"REST":var c=new i.A(r);if(!c.processRequestString()){if(u="Error in process request (rest) !",a)return void e.onError.call(e.scope,new o.A(u));throw new Error(u)}t=c.requestString;break;case"WPS":if(r.wps={service:null,version:null,identifier:null,rawdataoutput:null,request:null},!(t=s.A.build(r))){if(u="Error in process request (wps) !",a)return void e.onError.call(e.scope,new o.A(u));throw new Error(u)}break;default:if(u="Type of API is not supported by service (REST or WPS) !",a)return void e.onError.call(e.scope,new o.A(u));throw new Error(u)}return l&&e.onSuccess.call(e.scope,t),t}}},6933:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(2710),o=r(1097),i=r(5974),s=r(3471);function a(e){if(this.logger=n.A.getLogger("AltiRequestREST"),this.logger.trace("[Constructeur AltiRequestREST ()]"),!(this instanceof a))throw new TypeError("AltiRequestREST constructor cannot be called as a function.");if(this.options=e||{},!this.options)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));if(!this.options.type)throw new Error(o.A.getMessage("PARAM_EMPTY","type (Elevation or Profil)"));switch(this.DataObject=null,this.options.type){case"Elevation":this.DataObject=new i.A(this.options.param);break;case"Profil":this.DataObject=new s.A(this.options.param);break;default:throw new Error(o.A.getMessage("PARAM_TYPE","type (Elevation or Profil)"))}this.method=this.options.method||"GET"}a.prototype={requestString:null,constructor:a,template:{get:{value:"lon=__LON__&lat=__LAT__&indent=__INDENT__&crs='__CRS__'&resource=__RESOURCE__&measures=__MEASURES__",input:{point:"&zonly=__ZONLY__",profil:"&sampling=__SAMPLING__"}},post:{value:"lon=__LON__\nlat=__LAT__\nindent=__INDENT__\ncrs='__CRS__'\nresource='__RESOURCE__'\nmeasures='__MEASURES__'\n",input:{point:"zonly=__ZONLY__\n",profil:"sampling=__SAMPLING__"}}},processRequestString:function(){this.logger.trace("AltiRequestREST::processRequestString ()");var e="";return"POST"===this.method?e=this.template.post.value:"GET"===this.method&&(e=this.template.get.value),e=(e=(e=(e=(e=(e=e.replace(/__LON__/g,this.DataObject.getLon())).replace(/__LAT__/g,this.DataObject.getLat())).replace(/__INDENT__/g,this.DataObject.indent)).replace(/__CRS__/g,this.DataObject.crs)).replace(/__RESOURCE__/g,this.DataObject.resource)).replace(/__MEASURES__/g,this.DataObject.measures),e+=this.__addDataInputs(),this.logger.trace("traduction tmpl",e),this.requestString=e,this.requestString},__addDataInputs:function(){var e;if(this.logger.trace("AltiRequestREST::addDataInput ()"),"POST"===this.method)e=this.template.post;else{if("GET"!==this.method)throw new Error("No other HTTP method supported by the service !");e=this.template.get}if("AltiElevationRequest"===this.DataObject.CLASSNAME)return e.input.point.replace(/__ZONLY__/g,this.DataObject.zonly.toString());if("AltiProfilRequest"===this.DataObject.CLASSNAME)return e.input.profil.replace(/__SAMPLING__/g,this.DataObject.sampling);throw new Error("No other object supported than elevation or profil !?")}};const l=a},4359:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(2710),o=r(1097),i=r(4841),s=r(5974),a=r(3471);const l={build:function(e){if(n.A.getLogger("AltiRequestWPS").trace(["AltiRequestWPS::build()"]),!e)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));if(!e.type)throw new Error(o.A.getMessage("PARAM_EMPTY","type (Elevation or Profil)"));var t=null;switch(e.type){case"Elevation":e.wps.identifier="gs:WPSElevation",t=new s.A(e.param);break;case"Profil":e.wps.identifier="gs:WPSLineElevation",t=new a.A(e.param);break;default:throw new Error(o.A.getMessage("PARAM_TYPE","type (Elevation or Profil)"))}var r={data:t,method:e.method,param:e.wps},l=new i.A(r);if(!l.processRequestString())throw new Error("Enable to process request !");return l.requestString}}},5974:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(2710),o=r(6221);function i(e){if(!(this instanceof i))throw new TypeError("AltiElevationRequest constructor cannot be called as a function.");this.CLASSNAME="AltiElevationRequest",o.A.apply(this,arguments),this.logger=n.A.getLogger(),this.logger.trace("[Constructeur AltiElevationRequest ()]"),this.zonly=this.options.zonly||!1}i.prototype=Object.create(o.A.prototype,{zonly:{get:function(){return this._zonly},set:function(e){this._zonly=e}}}),i.prototype.constructor=i,i.prototype.getData=function(){var e=[];return e.push({k:"lon",v:this.getLon()}),e.push({k:"lat",v:this.getLat()}),e.push({k:"indent",v:this.indent}),e.push({k:"crs",v:this.crs}),e.push({k:"zonly",v:this.zonly}),e.push({k:"format",v:this.format}),e.push({k:"resource",v:this.resource}),e};const s=i},3471:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(2710),o=r(6221);function i(e){if(!(this instanceof i))throw new TypeError("AltiProfilRequest constructor cannot be called as a function.");this.CLASSNAME="AltiProfilRequest",o.A.apply(this,arguments),this.logger=n.A.getLogger(),this.logger.trace("[Constructeur AltiProfilRequest ()]"),this.sampling=this.options.sampling||3}i.prototype=Object.create(o.A.prototype,{sampling:{get:function(){return this._sampling},set:function(e){this._sampling=e}}}),i.prototype.constructor=i,i.prototype.getData=function(){var e=[];return e.push({k:"lon",v:this.getLon()}),e.push({k:"lat",v:this.getLat()}),e.push({k:"indent",v:this.indent}),e.push({k:"crs",v:this.crs}),e.push({k:"sampling",v:this.sampling}),e.push({k:"format",v:this.format}),e.push({k:"resource",v:this.resource}),e};const s=i},6221:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("AltiRequest constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur AltiRequest ()]"),this.options=e||{},this.positions=this.options.positions||[],this.delimiter=this.options.delimiter||"|",this.indent=this.options.indent||!1,this.crs=this.options.crs||"CRS:84",this.format=this.options.format||"json",this.resource=this.options.resource,this.measures=this.options.measures||!1}o.CLASSNAME="AltiRequest",o.prototype={constructor:o,setPositions:function(e){for(var t=[],r=0;rt||e{"use strict";r.d(t,{A:()=>c});var n=r(2710),o=r(1097),i=r(8288),s=r(4904),a=r(3667),l=r(3565),u=r(3041);const c={build:function(e){var t=n.A.getLogger("AltiResponseFactory");t.trace(["AltiResponseFactory::build()"]);var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{switch(e.outputFormat){case"xml":t.trace("analyze response : xml");try{var c=new s.A({reader:a.A});if("string"==typeof e.response?c.setXMLString(e.response):c.setXMLDoc(e.response),!(r=c.parse()))throw new Error(o.A.getMessage("SERVICE_RESPONSE_EXCEPTION_2"))}catch(t){var p=t.message;return void e.onError.call(e.scope,new i.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",p),status:200,type:i.A.TYPE_SRVERR}))}break;case"json":t.trace("analyze response : json"),t.trace("analyze response : ",typeof e.response);var f=null;if((f="string"==typeof e.response?JSON.parse(e.response):e.response)&&f.error)return void e.onError.call(e.scope,new i.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",f.error.description),status:200,type:i.A.TYPE_SRVERR}));if(f){var h,d=f.elevations,m=new l.A;if(Array.isArray(d)&&d.length)for(var g=0;g{"use strict";function n(){if(!(this instanceof n))throw new TypeError("AltiResponse constructor cannot be called as a function.");this.elevations=[]}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},3041:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("Elevation constructor cannot be called as a function.");this.z=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},9206:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("Measure constructor cannot be called as a function.");this.source_name=null,this.source_measure=null,this.z=null,this.acc=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},9338:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(895),o=r(7966),i=r(4889),s=r(2710),a=r(1097),l=r(3474),u=r(8288);function c(e){if(!(this instanceof c))throw new TypeError(a.A.getMessage("CLASS_CONSTRUCTOR","AutoComplete"));this.CLASSNAME="AutoComplete",this.logger=s.A.getLogger("Gp.Services.AutoComplete"),this.logger.trace("[Constructeur AutoComplete (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=o.A.AutoComplete.newUrl()),n.A.apply(this,arguments),!t.text)throw new Error(a.A.getMessage("PARAM_MISSING","text"));this.options.text=t.text,t.type||(t.type=["StreetAddress,PositionOfInterest"]),this.options.type=t.type,this.options.territory=t.terr||"",this.options.maximumResponses=t.maximumResponses||10,"XHR"===this.options.protocol&&"POST"===this.options.httpMethod&&(this.logger.warn("Le service ne gére pas le mode d'interrogation en POST, on bascule sur du GET !"),this.options.httpMethod="GET"),this.options.outputFormat=this.options.rawResponse?"":"json"}c.prototype=Object.create(n.A.prototype,{}),c.prototype.constructor=c,c.prototype.patchOptionConvertor=function(e){const t=e;return t.filterOptions&&(this.logger.warn("The parameter 'filterOptions' is deprecated"),t.filterOptions.type&&(this.logger.warn("The parameter 'filterOptions.type' is deprecated"),t.type||(t.type=t.filterOptions.type)),t.filterOptions.territory&&(this.logger.warn("The parameter 'filterOptions.territory' is deprecated"),t.terr||(t.terr=t.filterOptions.territory)),delete t.filterOptions),t},c.prototype.buildRequest=function(e,t){var r="";this.options.territory&&(r=this.options.territory);var n="";this.options.type&&(n=this.options.type.join(",")),this.request=l.A.normalyzeParameters({text:encodeURIComponent(this.options.text),type:n,terr:r,maximumResponses:this.options.maximumResponses}),this.request?t.call(this,this.request):e.call(this,new u.A(a.A.getMessage("SERVICE_REQUEST_BUILD")))},c.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onSuccess:t,onError:e,scope:this};i.A.build(r)}else e.call(this,new u.A(a.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const p=c},4889:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(2710),o=r(1097),i=r(8288),s=r(5941),a=r(9924);const l={build:function(e){var t=n.A.getLogger("AutoCompleteResponseFactory");t.trace(["AutoCompleteResponseFactory::build()"]);var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{var l=null;if(l="string"==typeof e.response?JSON.parse(e.response):e.response){if(l.error)return void e.onError.call(e.scope,new i.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",l.error.description),status:l.error.code,type:i.A.TYPE_SRVERR}));if(r=new s.A,!l.results||!Array.isArray(l.results))return void e.onError.call(e.scope,new i.A(o.A.getMessage("SERVICE_RESPONSE_FORMAT_3")));for(var u=null,c=0;c{"use strict";function n(){if(!(this instanceof n))throw new TypeError("AutoCompleteResponse constructor cannot be called as a function.");this.suggestedLocations=[]}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},9924:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("SuggestedLocation constructor cannot be called as a function.");this.type=null,this.position={x:null,y:null},this.commune=null,this.fullText=null,this.postalCode=null,this.classification=null,this.street=null,this.poi=null,this.kind=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},895:(e,t,r)=>{"use strict";r.d(t,{A:()=>c});var n=r(2710),o=r(3474),i=r(1097),s=r(6250),a=r(8288),l=r(9032);function u(e){if(!(this instanceof u))throw new TypeError(i.A.getMessage("CLASS_CONSTRUCTOR"));for(var t in this.logger=n.A.getLogger("CommonService"),this.logger.trace("[Constructeur CommonService (options)]"),this.options={protocol:"XHR",ssl:!0,proxyURL:"",callbackSuffix:null,httpMethod:"GET",timeOut:0,rawResponse:!1,scope:this,onSuccess:function(e){console.log("onSuccess - la reponse est la suivante : ",e)},onFailure:function(e){200!==e.status&&e.status?console.log("onFailure - Erreur (",e.status,") : ",e.message):console.log("onFailure : ",e.message)}},e)e.hasOwnProperty(t)&&(this.options[t]=e[t]);if(this.options.rawResponse&&!this.options.onSuccess&&(this.options.onSuccess=function(e){console.log("onSuccess - la réponse brute du service est la suivante : ",e)}),!!(null===this.options.onSuccess||"function"!=typeof this.options.onSuccess))throw new Error(i.A.getMessage("PARAM_MISSING","onSuccess()"));switch(this.options.httpMethod="string"==typeof e.httpMethod?e.httpMethod.toUpperCase():"GET",this.options.httpMethod){case"POST":case"GET":break;case"PUT":case"DELETE":case"HEAD":case"OPTIONS":throw new Error(i.A.getMessage("PARAM_NOT_SUPPORT","httpMethod"));default:throw new Error(i.A.getMessage("PARAM_UNKNOWN","httpMethod"))}switch(this.options.protocol="string"==typeof e.protocol?e.protocol.toUpperCase():"XHR",this.options.protocol){case"JSONP":case"XHR":break;default:throw new Error(i.A.getMessage("PARAM_UNKNOWN","protocol"))}if("undefined"==typeof window&&"JSONP"===this.options.protocol)throw new Error(i.A.getMessage("PARAM_NOT_SUPPORT_NODEJS","protocol=JSONP (instead use XHR)"));"JSONP"===this.options.protocol&&(this.options.httpMethod="GET"),this.options.nocache=e.nocache||!1,this.options.outputFormat=null,this.request=null,this.response=null}u.prototype={constructor:u,call:function(){this.logger.trace("CommonService::call ()");var e=this;function t(t){this.logger.trace("CommonService::onBuildRequest : ",t),this.callService.call(e,o,r)}function r(t){this.logger.trace("CommonService::onCallService : ",t),this.analyzeResponse.call(e,o,n)}function n(e){if(this.logger.trace("CommonService::onAnalyzeResponse : ",e),!e)return o.call(this,new a.A("Analyse de la reponse en échec !?"));this.options.onSuccess.call(this,e)}function o(e){this.logger.trace("CommonService::onError()");var t=e;t instanceof a.A||(t=new a.A(e.message)),this.options.onFailure.call(this,t)}(function(){this.logger.trace("CommonService::run ()"),this.buildRequest.call(e,o,t)}).call(e)},buildRequest:function(e,t){this.logger.error("overwritten method !"),e&&e.call(this,"This method must be overwritten !"),t.call(this,"This method must be overwritten !")},callService:function(e,t){var r=null,n=this.request,i=!(!this.options.proxyURL||"XHR"!==this.options.protocol),u={"gp-access-lib":l.rE};this.options.apiKey&&(u.apiKey=this.options.apiKey),this.options.serverUrl=o.A.normalyzeUrl(this.options.serverUrl,u,!1),i&&("GET"===this.options.httpMethod&&(r=this.options.proxyURL+o.A.normalyzeUrl(this.options.serverUrl,this.request,!0),n=null),"POST"===this.options.httpMethod&&(r=this.options.proxyURL+o.A.normalyzeUrl(this.options.serverUrl,null,!0),n=this.request));var c=this,p={url:r||this.options.serverUrl,method:this.options.httpMethod,protocol:this.options.protocol,timeOut:this.options.timeOut||0,format:this.options.outputFormat,nocache:this.options.nocache||!1,wrap:"XHR"!==this.options.protocol,callbackSuffix:this.options.callbackSuffix,data:n,headers:null,content:this.options.contentType||"application/xml",scope:this.options.scope||this,onResponse:function(r){c.logger.trace("callService::onResponse()");var n=null;if("XHR"===c.options.protocol&&(c.logger.trace("Response XHR",r),n=r),"JSONP"===c.options.protocol){if(c.logger.trace("Response JSON",r),!r)return void e.call(c,new a.A("Le contenu de la reponse est vide !?"));if(r.http){if(200!==r.http.status)return void e.call(c,new a.A({status:r.http.status,message:r.http.error,type:a.A.TYPE_SRVERR}));n=r.xml,c.options.rawResponse&&(n=r)}else n=r}if("function"==typeof c.options.onBeforeParse){var o=c.options.onBeforeParse(n);"string"==typeof o&&(n=o)}c.response=n,t.call(c,n)},onFailure:function(t){c.logger.trace("callService::onFailure()"),t.type=a.A.TYPE_SRVERR,e.call(c,new a.A(t))},onTimeOut:function(){c.logger.trace("callService::onTimeOut()"),e.call(c,new a.A("TimeOut!"))}};s.A.send(p)},analyzeResponse:function(e,t){this.logger.error("overwritten method !"),e&&e.call(this,"This method must be overwritten !"),t.call(this,"This method must be overwritten !")}};const c=u},4154:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(895),s=r(7966),a=r(9939);function l(e){if(!(this instanceof l))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","Config"));if(this.CLASSNAME="Config",this.logger=n.A.getLogger("Gp.Config"),this.logger.trace("[Constructeur Config (options)]"),!!(null===e.onSuccess||"function"!=typeof e.onSuccess))throw new Error(o.A.getMessage("PARAM_MISSING","onSuccess()"));e.apiKey||e.customConfigFile||(e.apiKey="full"),this.options={},this.options.onSuccess=e.onSuccess,this.options.onFailure=e.onFailure,this.options.sync=e.sync||!1,this.options.listConfigUrls=e.customConfigFile?[e.customConfigFile]:Array.isArray(e.apiKey)?s.A.Config.url(e.apiKey):s.A.Config.url(e.apiKey.split(","))}l.prototype=Object.create(i.A.prototype,{}),l.prototype.constructor=l,l.prototype.buildRequest=function(e,t){this.listConfigUrls=this.options.listConfigUrls,this.listConfigUrls?t.call(this,this.listConfigUrls):e.call(this,new Error("url by default not found !"))},l.prototype.callService=function(e,t){this.options.sync?c.call(this,e,t):u.call(this,e,t)};var u=function(e,t){this.listConfigResults=[];let n=null;if("undefined"==typeof window){var o=r(3092);n=o}else n=window.fetch;var i=e=>n(e,{credentials:"same-origin"}).then((e=>{if(e.ok)return e.json().then((e=>e)).catch((e=>{throw new Error("Exception Json : "+e)}));throw new Error("Exception HTTP : "+e.status+" (status code) !")})).catch((e=>new Promise(((t,r)=>{r(e)})))),s=[];for(let e=0;e{if(!e)throw new Error("results config empty !?");e.forEach((e=>{this.listConfigResults.push(e)}))})).then((()=>{t.call(this,this.listConfigResults)})).catch((t=>{e.call(this,t)}))},c=function(e,t){this.listConfigResults=[];for(var r=0;r{"use strict";function n(){if(!(this instanceof n))throw new TypeError("ConfigInterface constructor cannot be called as a function.");this.generalOptions={apiKeys:{},title:null,defaultGMLGFIStyle:null,theme:null,wgs84Resolutions:[]},this.layers={},this.tileMatrixSets={}}r.d(t,{A:()=>o}),n.prototype={constructor:n,isKeyConfLoaded:function(e){if(e)return!!this.generalOptions.apiKeys[e]},getLayersId:function(e){return this.generalOptions.apiKeys[e]},getLayerId:function(e,t){if(e&&t){var r=null;if(this.layers){var n=this.layers;for(var o in n)if(n.hasOwnProperty(o)){var i=o.split("$");if(e===i[0]&&i[1]){var s=i[1].split(":");if(i[1].split(";")[1]===t.toUpperCase()){r=o;break}if(s[2]===t.toUpperCase()){r=o;break}}}}if(r)return r}},getLayersConf:function(e){var t={},r=this.getLayersId(e);if(r)for(var n=0;n{"use strict";r.d(t,{A:()=>o});var n={ssl:!0,newUrl:function(e){return(!1===n.ssl?"http://":"https://")+"data.geopf.fr"+e},Alti:{new_key:{"elevation-json":"/altimetrie/1.0/calcul/alti/rest/elevation.json","elevation-xml":"/altimetrie/1.0/calcul/alti/rest/elevation.xml","profil-json":"/altimetrie/1.0/calcul/alti/rest/elevationLine.json","profil-xml":"/altimetrie/1.0/calcul/alti/rest/elevationLine.xml"},newUrl:function(){return{"elevation-json":n.newUrl(this.new_key["elevation-json"]),"elevation-xml":n.newUrl(this.new_key["elevation-xml"]),"profil-json":n.newUrl(this.new_key["profil-json"]),"profil-xml":n.newUrl(this.new_key["profil-xml"])}}},ProcessIsoCurve:{new_key:"/navigation/isochrone",newUrl:function(){return n.newUrl(this.new_key)}},Config:{_key:"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/dist/",url:function(e){Array.isArray(e)||(e=e.split(","));for(var t=[],r=0;r{"use strict";r.d(t,{A:()=>u});var n=r(1097),o=r(8288),i=r(1135),s=r(6025);function a(){if(!(this instanceof a))throw new TypeError("GeocodeResponseParser constructor cannot be called as a function.")}function l(e,t){var r=new s.A;if(e.geometry&&"Point"===e.geometry.type&&(r.position={lon:e.geometry.coordinates[0],lat:e.geometry.coordinates[1]}),e.properties){for(var n in e.properties)"score"===n?r.accuracy=e.properties[n]:"_type"===n?"address"===e.properties[n]?r.type="StreetAddress":"poi"===e.properties[n]?r.type="PositionOfInterest":"parcel"!==e.properties[n]&&"cadastral"!==e.properties[n]||(r.type="CadastralParcel"):r.placeAttributes[n]=e.properties[n];"address"===e.properties._type&&(r.matchType=void 0!==e.properties.number&&null!==e.properties.number?"street number":"street")}t.locations.push(r)}a.prototype={constructor:a,parse:function(e){var t=new i.A;const r=JSON.parse(e);if("FeatureCollection"===r.type)for(var s=0;s{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(6767),u=r(9375);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","Geocode"));this.CLASSNAME="Geocode",this.logger=n.A.getLogger("Gp.Services.Geocode"),this.logger.trace("[Constructeur Geocode (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=a.A.Geocode.newUrl()),s.A.apply(this,[t]),!t.hasOwnProperty("query"))throw new Error(o.A.getMessage("PARAM_MISSING","query"));if(this.options.query=t.query,t.index||(this.options.index=t.index="StreetAddress"),t.filters)for(var r=Object.keys(t.filters),i=0;i0?t.index=t.filters.type[0]:t.index=t.filters.type),delete t.filters.type),t.filters.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),delete t.filters.bbox)),delete t.filterOptions),t.position&&(t.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),t.position.lon||(t.position.lon=t.position.x),delete t.position.x),t.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),t.position.lat||(t.position.lat=t.position.y),delete t.position.y)),t.returnFreeForm&&(this.logger.warn("The parameter 'returnFreeForm' is deprecated"),delete t.returnFreeForm),t.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete t.srs),t},c.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,geocodeMethod:"search",query:this.options.query,index:this.options.index,returnTrueGeometry:this.options.returnTrueGeometry,position:this.options.position,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=l.A.build(r),this.request?t.call(this,this.request):e.call(this,new i.A(o.A.getMessage("SERVICE_REQUEST_BUILD")))},c.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};u.A.build(r)}else e.call(this,new i.A(o.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const p=c},6767:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(2710),o=r(3955);const i={build:function(e){var t=n.A.getLogger("GeocodeRequestFactory");t.trace(["GeocodeRequestFactory::build()"]);var r=e||{},i=new o.A(r);if(!i.processRequestString())throw new Error("Error process request (rest) !");var s=i.requestString;return t.trace(s),s}}},3955:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(2710),o=r(1097),i=r(3757);function s(e){if(this.logger=n.A.getLogger("GeocodeRequestREST"),this.logger.trace("[Constructeur GeocodeRequestREST ()]"),!(this instanceof s))throw new TypeError("GeocodeRequestREST constructor cannot be called as a function.");if(!e)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));this.settings=e}s.prototype={requestString:null,constructor:s,processRequestString:function(){var e="";const t=new i.A(this.settings).getParams();for(var r=0;r{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("GeocodeParamREST constructor cannot be called as a function.");if(this.logger=n.A.getLogger(),this.logger.trace("[Constructeur GeocodeParamREST ()]"),this.options=e||{},!this.options.geocodeMethod||"search"!==this.options.geocodeMethod&&"reverse"!==this.options.geocodeMethod)throw new Error("Error geocodeMethod not valid");this.geocodeMethod=this.options.geocodeMethod,this.query=void 0!==this.options?this.options.query:null,this.searchGeometry=this.options.searchGeometry||null,this.index=this.options.index||null,this.lon=this.options.position&&this.options.position.lon?this.options.position.lon:null,this.lat=this.options.position&&this.options.position.lat?this.options.position.lat:null,this.maxResp=this.options.maxResp||null,this.returnTrueGeometry=this.options.returnTrueGeometry||null,this.filters=this.options.filters||{}}o.CLASSNAME="GeocodeParamREST",o.prototype={constructor:o,getFilters:function(){var e={};for(var t in this.filters)this.filters.hasOwnProperty(t)&&(e[t]=this.filters[t]);return e},getIndex:function(){return void 0===this.index?null:"StreetAddress"===this.index?"address":"CadastralParcel"===this.index?"parcel":"PositionOfInterest"===this.index?"poi":"location"===this.index?"location":this.index},getSearchGeometry:function(){return JSON.stringify(this.searchGeometry)}},o.prototype.getParams=function(){var e=[];"search"===this.geocodeMethod&&e.push({k:"q",v:this.query}),this.index&&e.push({k:"index",v:this.getIndex()}),"reverse"===this.geocodeMethod&&this.searchGeometry&&e.push({k:"searchgeom",v:this.getSearchGeometry()}),this.lon&&this.lat&&(e.push({k:"lon",v:this.lon}),e.push({k:"lat",v:this.lat})),this.maxResp&&e.push({k:"limit",v:this.maxResp}),this.returnTrueGeometry&&e.push({k:"returntruegeometry",v:this.returnTrueGeometry});const t=this.getFilters();for(var r in t)e.push({k:r,v:t[r]});return e};const i=o},9375:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(8288),o=r(1097),i=r(9723);const s={build:function(e){var t=null;if(e.response){if(e.rawResponse)t=e.response;else{try{if(!(t=(new i.A).parse(e.response)))throw new Error("L'analyse de la réponse du service !?")}catch(t){var r=t.message;return"string"==typeof e.response?r+="('"+e.response+"')":r+="('"+e.response.documentElement.innerHTML+"')",void e.onError.call(e.scope,new n.A({message:o.A.getMessage("SERVICE_RESPONSE_ANALYSE",r),type:n.A.TYPE_UNKERR,status:-1}))}if(t.exceptionReport)return void e.onError.call(e.scope,new n.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",t.exceptionReport),type:n.A.TYPE_SRVERR,status:200}))}e.onSuccess.call(e.scope,t)}else e.onError.call(e.scope,new n.A({message:o.A.getMessage("SERVICE_RESPONSE_EMPTY"),type:n.A.TYPE_SRVERR,status:-1}))}}},1135:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("GeocodeResponse constructor cannot be called as a function.");this.locations=[]}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},6025:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("GeocodedLocation constructor cannot be called as a function.");this.position=null,this.matchType=null,this.placeAttributes={},this.type=null,this.accuracy=null,this.CLASSNAME="GeocodedLocation"}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},6064:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(6767),u=r(9375);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","ReverseGeocode"));this.CLASSNAME="ReverseGeocode",this.logger=n.A.getLogger("Gp.Services.ReverseGeocode"),this.logger.trace("[Constructeur ReverseGeocode (options)]");var t=this.patchOptionConvertor(e);if(t.serverUrl||(t.serverUrl=a.A.ReverseGeocode.newUrl()),s.A.apply(this,[t]),t.searchGeometry)this.options.searchGeometry=t.searchGeometry;else if(!t.position)throw new Error(o.A.getMessage("PARAM_MISSING","searchGeometry"));if(t.index||(this.options.index=t.index="StreetAddress"),t.filters)for(var r=Object.keys(t.filters),i=0;i0?t.index=t.filterOptions.type[0]:t.index=t.filterOptions.type),delete t.filterOptions.type),t.filterOptions.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),t.searchGeometry||(t.searchGeometry=this.bbox2Json(t.filterOptions.bbox)),delete t.filterOptions.bbox),t.filterOptions.circle&&(this.logger.warn("The parameter 'filterOptions.circle' is deprecated"),t.searchGeometry||(t.searchGeometry=this.circle2Json(t.filterOptions.circle)),delete t.filterOptions.circle),t.filterOptions.polygon&&(this.logger.warn("The parameter 'filterOptions.polygon' is deprecated"),t.searchGeometry||(t.searchGeometry=this.polygon2Json(t.filterOptions.polygon)),delete t.filterOptions.polygon),!t.filters&&Object.keys(t.filterOptions).length>0&&(t.filters=t.filterOptions),delete t.filterOptions),t.position&&(t.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),t.position.lon||(t.position.lon=t.position.x),delete t.position.x),t.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),t.position.lat||(t.position.lat=t.position.y),delete t.position.y)),t.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete t.srs),t},c.prototype.buildRequest=function(e,t){var r={httpMethod:this.options.httpMethod,geocodeMethod:"reverse",searchGeometry:this.options.searchGeometry,index:this.options.index,position:this.options.position,returnTrueGeometry:this.options.returnTrueGeometry,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=l.A.build(r),this.request?t.call(this,this.request):e.call(this,new i.A(o.A.getMessage("SERVICE_REQUEST_BUILD")))},c.prototype.analyzeResponse=function(e,t){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onError:e,onSuccess:t,scope:this};u.A.build(r)}else e.call(this,new i.A(o.A.getMessage("SERVICE_RESPONSE_EMPTY")))},c.prototype.bbox2Json=function(e){return{type:"Polygon",coordinates:[[[e.left,e.top],[e.right,e.top],[e.right,e.bottom],[e.left,e.bottom],[e.left,e.top]]]}},c.prototype.circle2Json=function(e){return{type:"Circle",radius:e.radius,coordinates:[e.x,e.y]}},c.prototype.polygon2Json=function(e){for(var t={type:"Polygon",coordinates:[[]]},r=0;r{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(9721),u=r(8297);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","ProcessIsoCurve"));if(this.CLASSNAME="ProcessIsoCurve",s.A.apply(this,arguments),this.logger=n.A.getLogger("Gp.Services.ProcessIsoCurve"),this.logger.trace("[Constructeur ProcessIsoCurve (options)]"),!e.position)throw new Error(o.A.getMessage("PARAM_MISSING","position"));if(null===e.position.x)throw new Error(o.A.getMessage("PARAM_MISSING","position.x"));if(null===e.position.y)throw new Error(o.A.getMessage("PARAM_MISSING","position.y"));if(!e.time&&!e.distance)throw new Error("Parameter (s) 'distance' missing. Parameter time to calculate an isochrone, parameter distance for an isodistance");if(!e.time&&e.distance&&(this.options.method="distance",this.options.time&&delete this.options.time),e.time&&!e.distance&&(this.options.method="time",this.options.distance&&delete this.options.distance),this.options.method=this.options.method||"time",this.options.resource=e.resource||"bdtopo-valhalla",this.options.exclusions=e.exclusions||[],this.options.reverse=e.reverse||!1,this.options.srs=e.srs||"EPSG:4326",this.options.distanceUnit=e.distanceUnit||"m",this.options.timeUnit=e.timeUnit||"second",e.smoothing&&this.logger.warn("options.smoothing is DEPRECATED"),this.options.smoothing=!1,e.holes&&this.logger.warn("options.holes is DEPRECATED"),this.options.holes=!1,e.graph?("Voiture"===e.graph&&(this.options.graph="car"),"Pieton"===e.graph&&(this.options.graph="pedestrian")):this.options.graph="car",this.options.constraints=[],e.constraints){if(!Array.isArray(e.constraints))throw new Error(o.A.getMessage("PARAM_TYPE","constraints"));for(var t=0;t{"use strict";r.d(t,{A:()=>a});var n=r(2710),o=r(1097),i=r(527);function s(e){if(this.logger=n.A.getLogger("ProcessIsoCurveRequest"),this.logger.trace("[Constructeur ProcessIsoCurveRequest ()]"),!(this instanceof s))throw new TypeError("ProcessIsoCurveRequest constructor cannot be called as a function.");if(!e)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));this.settings=e,this.mode=this.settings.httpMethod||"GET"}s.prototype={requestString:null,constructor:s,processRequestString:function(){var e="",t=0;switch(this.mode){case"GET":this.logger.trace("Process GET Request");var r=new i.A(this.settings).getParams();for(t=0;t{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("ProcessIsoCurveParam constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur ProcessIsoCurveParam ()]"),this.options=e||{},this.id=this.options.id,this.resource=this.options.resource,this.point=this.options.position,this.crs=this.options.srs,this.profile=this.options.graph,this.constraints=this.options.constraints,this.reverse=this.options.reverse,this.timeUnit=this.options.timeUnit,this.distanceUnit=this.options.distanceUnit,"distance"===this.options.method?(this.costType="distance",this.costValue=this.options.distance,"m"===this.distanceUnit&&this.costValue>=5e4&&(this.distanceUnit="km",this.costValue/=1e3)):(this.costType="time",this.costValue=this.options.time)}o.CLASSNAME="ProcessIsoCurveParam",o.prototype={constructor:o,getLocation:function(){return this.point.x+","+this.point.y},getDistanceUnit:function(){return"m"===this.distanceUnit?"meter":"km"===this.distanceUnit?"kilometer":""},getConstraints:function(){var e=[];if(0!==this.constraints.length)for(var t=0;t{"use strict";r.d(t,{A:()=>a});var n=r(2710),o=r(1097),i=r(8288),s=r(1489);const a={build:function(e){var t=n.A.getLogger("ProcessIsoCurveResponseFactory");t.trace(["ProcessIsoCurveResponseFactory::build()"]);var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{var a;if(t.trace("analyze response : json"),a="string"==typeof e.response?JSON.parse(e.response):e.response,r=new s.A,!a)return void e.onError.call(e.scope,new i.A(o.A.getMessage("SERVICE_RESPONSE_ANALYSE",e.response)));"distance"===a.costType?(r.time="",r.distance=a.costValue):(r.time=a.costValue,r.distance=""),r.message="",r.id="",r.srs=a.crs,r.geometry=a.geometry;var l=a.point.split(",");if(r.location&&(r.location.x=l[0],r.location.y=l[1]),r.exceptionReport)return void e.onError.call(e.scope,new i.A({message:o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",r.exceptionReport),type:i.A.TYPE_SRVERR,status:200}))}e.onSuccess.call(e.scope,r)}else e.onError.call(e.scope,new i.A(o.A.getMessage("SERVICE_RESPONSE_EMPTY")))}}},1489:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("ProcessIsoCurveResponse constructor cannot be called as a function.");this.message=null,this.id=null,this.location={},this.location.x=null,this.location.y=null,this.srs=null,this.geometry=null,this.time=null,this.distance=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},6759:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(2710),o=r(8288),i=r(5851);const s={build:function(e){n.A.getLogger("RouteRequestFactory").trace(["RouteRequestFactory::build()"]);var t=e||{},r=!(null===e.onError||"function"!=typeof e.onError),s=null,a=new i.A(t);if(!a.processRequestString()){if(s="Error process request (rest) !",r)return void e.onError.call(e.scope,new o.A(s));throw new Error(s)}return a.requestString}}},5851:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(2710),o=r(1097),i=r(2785);function s(e){if(this.logger=n.A.getLogger("RouteRequestREST"),this.logger.trace("[Constructeur RouteRequestREST ()]"),!(this instanceof s))throw new TypeError("RouteRequestREST constructor cannot be called as a function.");if(!e)throw new Error(o.A.getMessage("PARAM_EMPTY","options"));this.settings=e}s.prototype={requestString:null,constructor:s,processRequestString:function(){this.logger.warn(" PROTOTYPE !");for(var e=new i.A(this.settings).getParams(),t="",r=0;r{"use strict";r.d(t,{A:()=>i});var n=r(2710);function o(e){if(!(this instanceof o))throw new TypeError("RouteParamREST constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur RouteParamREST ()]"),this.options=e||{},this.resource=this.options.resource,this.start=this.options.startPoint.x+","+this.options.startPoint.y,this.end=this.options.endPoint.x+","+this.options.endPoint.y,this.intermediates=this.options.viaPoints,this.profile=this.options.graph,this.crs=this.options.srs,this.constraints=this.options.constraints,this.optimization=this.options.routePreference,this.getSteps=this.options.geometryInInstructions?"true":"false",this.distanceUnit=this.options.distanceUnit,this.timeUnit=this.options.timeUnit,this.waysAttributes=this.options.waysAttributes}o.CLASSNAME="RouteParamREST",o.prototype={constructor:o,getIntermediates:function(){var e=[];if(0!==this.intermediates.length)for(var t=0;t{"use strict";r.d(t,{A:()=>l});var n=r(2710),o=r(1097),i=r(8288),s=r(2993),a=r(7868);const l={build:function(e){var t=n.A.getLogger("RouteResponseFactory");t.trace("RouteResponseFactory::build()");var r=null;if(e.response){if(e.rawResponse)t.trace("analyze response : raw"),r=e.response;else{var l;if(t.trace("analyze response : json"),l="string"==typeof e.response?JSON.parse(e.response):e.response){if(l.message)return void e.onError.call(e.scope,new i.A(o.A.getMessage("SERVICE_RESPONSE_EXCEPTION",l.message)));var u=[],c=[],p=[];if((r=new s.A).hasOwnProperty("totalTime")&&(r.totalTime=parseFloat(l.duration)),r.hasOwnProperty("totalDistance")&&(r.totalDistance=parseFloat(l.distance)),r.hasOwnProperty("bbox")&&(r.bbox.left=parseFloat(l.bbox[0]),r.bbox.bottom=parseFloat(l.bbox[1]),r.bbox.right=parseFloat(l.bbox[2]),r.bbox.top=parseFloat(l.bbox[3])),r.hasOwnProperty("routeGeometry")&&!e.geometryInInstructions&&(r.routeGeometry=l.geometry),r.hasOwnProperty("routeInstructions")&&e.geometryInInstructions){var f,h=l.portions;if(Array.isArray(h)&&h.length)for(f=0;f{"use strict";function n(){if(!(this instanceof n))throw new TypeError("RouteInstruction constructor cannot be called as a function.");this.duration=null,this.distance=null,this.code=null,this.instruction=null,this.geometry=null}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},2993:(e,t,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("RouteResponse constructor cannot be called as a function.");this.totalTime=null,this.totalDistance=null,this.bbox={left:null,right:null,top:null,bottom:null},this.routeGeometry=null,this.routeInstructions=[]}r.d(t,{A:()=>o}),n.prototype={constructor:n};const o=n},7372:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(2710),o=r(1097),i=r(8288),s=r(895),a=r(7966),l=r(6759),u=r(3753);function c(e){if(!(this instanceof c))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR","Route"));if(this.CLASSNAME="Route",s.A.apply(this,arguments),this.logger=n.A.getLogger("Gp.Services.Route"),this.logger.trace("[Constructeur Route (options)]"),!e.startPoint)throw new Error(o.A.getMessage("PARAM_MISSING","startPoint"));if(null===e.startPoint.x)throw new Error(o.A.getMessage("PARAM_MISSING","startPoint.x"));if(null===e.startPoint.y)throw new Error(o.A.getMessage("PARAM_MISSING","startPoint.y"));if(!e.endPoint)throw new Error(o.A.getMessage("PARAM_MISSING","endPoint"));if(null===e.endPoint.x)throw new Error(o.A.getMessage("PARAM_MISSING","endPoint.x"));if(null===e.endPoint.y)throw new Error(o.A.getMessage("PARAM_MISSING","endPoint.y"));if(e.outputFormat&&"json"!==e.outputFormat&&this.logger.warn("options.outputFormat could only be json"),this.options.outputFormat="json",this.options.resource=e.resource||"bdtopo-osrm",this.options.startPoint=e.startPoint,this.options.endPoint=e.endPoint,this.options.viaPoints=e.viaPoints||[],this.options.routePreference=e.routePreference||"fastest",e.graph?("Voiture"===e.graph&&(this.options.graph="car"),"Pieton"===e.graph&&(this.options.graph="pedestrian")):this.options.graph="car",this.options.constraints=[],e.constraints){if(!Array.isArray(e.constraints))throw new Error(o.A.getMessage("PARAM_TYPE","constraints"));for(var t=0;t{"use strict";r.d(t,{A:()=>c});var n=r(4154),o=r(2366),i=r(1520),s=r(6064),a=r(9338),l=r(7372),u=r(7180);const c={getConfig:function(e){new n.A(e).call()},getAltitude:function(e){new o.A(e).call()},geocode:function(e){new i.A(e).call()},reverseGeocode:function(e){new s.A(e).call()},autoComplete:function(e){new a.A(e).call()},route:function(e){new l.A(e).call()},isoCurve:function(e){new u.A(e).call()}}},3474:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});const n={normalyzeParameters:function(e){var t=null;if(e){var r=[];for(var n in e)if(e.hasOwnProperty(n)){var o=e[n];o||(o=""),r.push(n+"="+o)}t=r.join("&")}return t},normalyzeUrl:function(e,t,r){var n=e;if(e){if(e.split("?").length-1>=2){var o=e.search(/\?/)+1;n=e.substring(0,o)+e.slice(o).replace(/\?/g,"&")}var i=e.indexOf("?");-1===i&&(n+="?"),-1!==i&&i!==e.length-1&&(n+="&")}return t&&(n+="string"==typeof t?t=t.replace("?",""):this.normalyzeParameters(t)),r&&(n=encodeURIComponent(n)),n},indent:function(e,t){return new Array((e||0)+1).join("\t")+t}}},2710:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(3065);const o={getLogger:function(e){if(void 0===t)var t={env:{VERBOSE:!1}};t.env.VERBOSE?n.enableAll():n.disableAll();var r=e||"default";return n.getLogger(r)}}},1097:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});const n={PARAM_MISSING:"Parameter(s) '%var%' missing",PARAM_EMPTY:"Parameter(s) '%var%' empty",PARAM_TYPE:"Wrong type(s) for parameter(s) '%var%'",PARAM_FORMAT:"Parameter(s) '%var%' not correctly formatted",PARAM_NOT_SUPPORT:"Value(s) for parameter(s) '%var%' not supported",PARAM_NOT_SUPPORT_NODEJS:"Value(s) for parameter(s) '%var%' not supported to NodeJS",PARAM_UNKNOWN:"Value(s) for parameter(s) '%var%' unknown",SERVICE_REQUEST_BUILD:"An error occurred during the request building of the service",SERVICE_REQUEST_EMPTY:"The request sent to the service is empty",SERVICE_RESPONSE_EXCEPTION:"The service returned an exception : '%var%'",SERVICE_RESPONSE_EXCEPTION_2:"The service returned an exception",SERVICE_RESPONSE_ANALYSE:"An error occurred while parsing the response '%var%' of the service",SERVICE_RESPONSE_ANALYSE_2:"An unknown error occurred while parsing the response",SERVICE_RESPONSE_EMPTY:"The response of the service is empty",SERVICE_RESPONSE_EMPTY_2:"The response from the service could not be analyzed or is empty",SERVICE_RESPONSE_FORMAT:"The format of the service response is not supported (handled format(s) : '%var%')",SERVICE_RESPONSE_FORMAT_2:"The format of the service response is not supported",SERVICE_RESPONSE_FORMAT_3:"No suggestion matching the search",CLASS_CONSTRUCTOR:"'%var%' constructor cannot be called as a function.",getMessage:function(e,t){if(0===Object.keys(arguments).length)return"Message indefined !";var r=Array.prototype.slice.call(arguments),n=r.shift(),o=r,i=this[n];try{i=Array.isArray(o)&&o.length>0?i.replace("%var%",o.join(" - ")):i.replace("%var%","%var% (not specified)")}catch(e){}return i}}},3065:function(e,t,r){var n,o;!function(){"use strict";n=function(){var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"],o={},i=null;function s(e,t){var r=e[t];if("function"==typeof r.bind)return r.bind(e);try{return Function.prototype.bind.call(r,e)}catch(t){return function(){return Function.prototype.apply.apply(r,[e,arguments])}}}function a(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function l(n){return"debug"===n&&(n="log"),typeof console!==t&&("trace"===n&&r?a:void 0!==console[n]?s(console,n):void 0!==console.log?s(console,"log"):e)}function u(){for(var r=this.getLevel(),o=0;o=0&&t<=c.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?f+=":"+e:"symbol"==typeof e&&(f=void 0),c.name=e,c.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},c.methodFactory=r||p,c.getLevel=function(){return null!=l?l:null!=a?a:s},c.setLevel=function(e,t){return l=g(e),!1!==t&&h(l),u.call(c)},c.setDefaultLevel=function(e){a=g(e),d()||c.setLevel(e,!1)},c.resetLevel=function(){l=null,m(),u.call(c)},c.enableAll=function(e){c.setLevel(c.levels.TRACE,e)},c.disableAll=function(e){c.setLevel(c.levels.SILENT,e)},c.rebuild=function(){if(i!==c&&(s=g(i.getLevel())),u.call(c),i===c)for(var e in o)o[e].rebuild()},s=g(i?i.getLevel():"WARN");var y=d();null!=y&&(l=g(y)),u.call(c)}(i=new f).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=o[e];return t||(t=o[e]=new f(e,i.methodFactory)),t};var h=typeof window!==t?window.log:void 0;return i.noConflict=function(){return typeof window!==t&&window.log===i&&(window.log=h),i},i.getLoggers=function(){return o},i.default=i,i},void 0===(o="function"==typeof n?n.call(t,r,t,e):n)||(e.exports=o)}()},3092:(e,t,r)=>{"use strict";var n=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==r.g)return r.g;throw new Error("unable to locate global object")}();e.exports=t=n.fetch,n.fetch&&(t.default=n.fetch.bind(n)),t.Headers=n.Headers,t.Request=n.Request,t.Response=n.Response},2938:e=>{"use strict";e.exports=ol.extent},7304:e=>{"use strict";e.exports=ol.format.GeoJSON},9583:e=>{"use strict";e.exports=ol.layer.Tile},996:e=>{"use strict";e.exports=ol.layer.Vector},2947:e=>{"use strict";e.exports=ol.loadingstrategy},9201:e=>{"use strict";e.exports=ol.proj},3668:e=>{"use strict";e.exports=ol.source.Vector},8062:e=>{"use strict";e.exports=ol.tilegrid},9032:e=>{"use strict";e.exports=JSON.parse('{"rE":"3.4.6","p6":"19/12/2024"}')},8330:e=>{"use strict";e.exports=JSON.parse('{"rE":"1.0.0-beta.1-318"}')}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n].call(i.exports,i,i.exports,r),i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r(9290),r(421),r(2579),r(3487),r(4659),r(4998),r(9815);var n=r(1596);GpfExtOlLayers=n.default})(); //# sourceMappingURL=GpfExtOlLayers.js.map \ No newline at end of file diff --git a/dist/modules/GpfExtOlLegends.css b/dist/modules/GpfExtOlLegends.css index 0b011fe0..e43ef1c9 100644 --- a/dist/modules/GpfExtOlLegends.css +++ b/dist/modules/GpfExtOlLegends.css @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */div[id^=GPlegends-]{right:8px;top:58px}.position>div[id^=GPlegends-]>dialog[id^=GPlegendsPanel]{position:absolute}button[id^=GPshowLegendsPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowLegendsPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;height:auto;max-height:inherit;opacity:100%;visibility:visible;width:350px} /*# sourceMappingURL=GpfExtOlLegends.css.map*/ \ No newline at end of file diff --git a/dist/modules/GpfExtOlLegends.js b/dist/modules/GpfExtOlLegends.js index 7c473b34..108cfb25 100644 --- a/dist/modules/GpfExtOlLegends.js +++ b/dist/modules/GpfExtOlLegends.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var e={3065:function(e,t,n){var o,r;!function(){"use strict";o=function(){var e=function(){},t="undefined",n=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),o=["trace","debug","info","warn","error"],r={},i=null;function a(e,t){var n=e[t];if("function"==typeof n.bind)return n.bind(e);try{return Function.prototype.bind.call(n,e)}catch(t){return function(){return Function.prototype.apply.apply(n,[e,arguments])}}}function l(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function s(o){return"debug"===o&&(o="log"),typeof console!==t&&("trace"===o&&n?l:void 0!==console[o]?a(console,o):void 0!==console.log?a(console,"log"):e)}function c(){for(var n=this.getLevel(),r=0;r=0&&t<=u.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?f+=":"+e:"symbol"==typeof e&&(f=void 0),u.name=e,u.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},u.methodFactory=n||d,u.getLevel=function(){return null!=s?s:null!=l?l:a},u.setLevel=function(e,t){return s=v(e),!1!==t&&p(s),c.call(u)},u.setDefaultLevel=function(e){l=v(e),g()||u.setLevel(e,!1)},u.resetLevel=function(){s=null,h(),c.call(u)},u.enableAll=function(e){u.setLevel(u.levels.TRACE,e)},u.disableAll=function(e){u.setLevel(u.levels.SILENT,e)},u.rebuild=function(){if(i!==u&&(a=v(i.getLevel())),c.call(u),i===u)for(var e in r)r[e].rebuild()},a=v(i?i.getLevel():"WARN");var m=g();null!=m&&(s=v(m)),c.call(u)}(i=new f).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=r[e];return t||(t=r[e]=new f(e,i.methodFactory)),t};var p=typeof window!==t?window.log:void 0;return i.noConflict=function(){return typeof window!==t&&window.log===i&&(window.log=p),i},i.getLoggers=function(){return r},i.default=i,i},void 0===(r="function"==typeof o?o.call(t,n,t,e):o)||(e.exports=r)}()}},t={};function n(o){var r=t[o];if(void 0!==r)return r.exports;var i=t[o]={exports:{}};return e[o].call(i.exports,i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var o={};(()=>{"use strict";function e(e){return function(e){if(Array.isArray(e))return t(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,n){if(e){if("string"==typeof e)return t(e,n);var o={}.toString.call(e).slice(8,-1);return"Object"===o&&e.constructor&&(o=e.constructor.name),"Map"===o||"Set"===o?Array.from(e):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?t(e,n):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=Array(t);nY});var r=["GPoverviewMap","GPfullScreen"];const i=function(t,n){var o=function(t,n){var o=[].concat(r,[n]),i=[];if(t&&t.includes("left")){var a=document.getElementById("position-container-bottom-left"),l=document.getElementById("position-container-top-left");i=[].concat(e(a.children),e(l.children))}if(t&&t.includes("right")){var s=document.getElementById("position-container-bottom-right"),c=document.getElementById("position-container-top-right");i=[].concat(e(s.children),e(c.children))}return i.filter((function(e){var t=e.id.match(/(\w+)-[0-9]+/)[1],n=o.includes(t);if("true"===e.getElementsByTagName("button")[0].getAttribute("aria-pressed")&&!n)return e}))}(t,n);o.length>0&&o[0].getElementsByTagName("button")[0].click()};const a={onPanelOpen:function(){i(this.options.position,this.element.id.match(/(\w+)-[0-9]+/)[1])}},l=ol.control.Control;const s=function(){return""!==getComputedStyle(document.documentElement).getPropertyValue("--blue-france-sun-113-625")};function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}function u(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function d(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function p(e,t){for(var n=0;nu.right||h+o.height>u.bottom)a=f,l=p;else{var v=s-a,m=c-l;e.style.transform="translate("+v+"px,"+m+"px)"}}}};const R={_addUID:function(e){return this.uid?e+"-"+this.uid:e},_createMainContainerElement:function(){var e=document.createElement("div");return e.id=this._addUID("GPlegends"),e.className="GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen",e},_createShowLegendsPictoElement:function(){var e=this,t=document.createElement("button"),n=document.createElement("span");return t.appendChild(n),t.id=this._addUID("GPshowLegendsPicto"),t.className="GPshowOpen GPshowAdvancedToolPicto GPshowLegendsPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-legends fr-btn fr-btn--tertiary",t.setAttribute("aria-label","Afficher les légendes"),t.setAttribute("tabindex","0"),t.setAttribute("aria-pressed",!1),t.setAttribute("type","button"),t.addEventListener?t.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowLegendsClick(t)})):t.attachEvent&&t.attachEvent("onclick",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n),e.onShowLegendsClick(t)})),t},_createLegendsPanelElement:function(){var e=document.createElement("dialog");return e.id=this._addUID("GPlegendsPanel"),e.className="GPpanel gpf-panel fr-modal",e},_createLegendsPanelDivElement:function(){var e=document.createElement("div");return e.className="gpf-panel__legends",e},_createLegendsPanelHeaderElement:function(){var e=document.createElement("div");return e.className="gpf-panel__header_legends",e},_createLegendsPanelIconElement:function(){var e=document.createElement("label");return e.className="gpf-btn-header-legends gpf-btn-icon-header-legends",e.title="Légendes",e},_createLegendsPanelTitleElement:function(){var e=document.createElement("div");return e.className="gpf-panel__title_legends",e.innerHTML="Légendes",e},_createLegendsPanelCloseElement:function(){var e=this,t=document.createElement("button");t.className="gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline",t.title="Fermer le panneau";var n=document.createElement("span");return n.className="GPelementHidden gpf-visible",n.innerText="Fermer",t.appendChild(n),t.addEventListener?t.addEventListener("click",(function(){document.getElementById(e._addUID("GPshowLegendsPicto")).click()}),!1):t.attachEvent&&t.attachEvent("onclick",(function(){document.getElementById(e._addUID("GPshowLegendsPicto")).click()})),t},_createLegendElement:function(){var e=document.createElement("div");return e.className="legends-entries gpf-panel__body fr-modal__body",e},_createLegendEntry:function(e){if(e&&e.legends&&e.legends.length){var t=e.legends[0].url,n=function(e){if(function(){if(!window.DOMParser)return!1;var e=new DOMParser;try{e.parseFromString("x","text/html")}catch(e){return!1}return!0}())return(new DOMParser).parseFromString(e,"text/html").body;var t=document.createElement("div");return t.innerHTML=e,t}('\n \n \n \n
    \n ').concat(e.desc,'\n
    \n
    \n ')),o=n.firstChild.querySelector("button");return o&&o.addEventListener("click",(function(t){var n="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!n);var o=document.getElementById("GPlegend_ID_"+e.id);n?o.classList.replace("gpf-visible","gpf-hidden"):o.classList.replace("gpf-hidden","gpf-visible")})),n.firstChild}}};function N(e){return N="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},N(e)}function M(e,t){for(var n=0;ns.minScaleDenominator&&u.minScaleDenominator>s.minScaleDenominator&&u.minScaleDenominator{var e={4582:(e,t)=>{"use strict";function r(e,t){return void 0===t&&(t=Object),t&&"function"==typeof t.getOwnPropertyDescriptors&&(e=t.create(null,t.getOwnPropertyDescriptors(e))),t&&"function"==typeof t.freeze?t.freeze(e):e}function o(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var n=r({allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,formnovalidate:!0,hidden:!0,ismap:!0,itemscope:!0,loop:!0,multiple:!0,muted:!0,nomodule:!0,novalidate:!0,open:!0,playsinline:!0,readonly:!0,required:!0,reversed:!0,selected:!0});var i=r({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});var s=r({script:!1,style:!1,textarea:!0,title:!0});function a(e){return e===g.HTML}var g=r({HTML:"text/html",XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),l=Object.keys(g).map((function(e){return g[e]}));var c=r({HTML:"http://www.w3.org/1999/xhtml",SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});t.assign=function(e,t){if(null===e||"object"!=typeof e)throw new TypeError("target is not an object");for(var r in t)o(t,r)&&(e[r]=t[r]);return e},t.find=function(e,t,r){if(void 0===r&&(r=Array.prototype),e&&"function"==typeof r.find)return r.find.call(e,t);for(var n=0;n-1},t.MIME_TYPE=g,t.NAMESPACE=c},5752:(e,t,r)=>{"use strict";var o=r(4582),n=r(4722),i=r(2983),s=r(6559),a=r(4466),g=n.DOMImplementation,l=o.hasDefaultHTMLNamespace,c=o.isHTMLMimeType,u=o.isValidMimeType,A=o.MIME_TYPE,I=o.NAMESPACE,C=i.ParseError,p=a.XMLReader;function d(e){return e.replace(/\r[\n\u0085]/g,"\n").replace(/[\r\u0085\u2028]/g,"\n")}function h(e){if(e=e||{locator:!0},this.assign=e.assign||o.assign,this.domHandler=e.domHandler||f,this.onError=e.onError||e.errorHandler,e.errorHandler&&"function"!=typeof e.errorHandler)throw new TypeError("errorHandler object is no longer supported, switch to onError!");e.errorHandler&&e.errorHandler("warning","The `errorHandler` option has been deprecated, use `onError` instead!",this),this.normalizeLineEndings=e.normalizeLineEndings||d,this.locator=!!e.locator,this.xmlns=this.assign(Object.create(null),e.xmlns)}function f(e){var t=e||{};this.mimeType=t.mimeType||A.XML_APPLICATION,this.defaultNamespace=t.defaultNamespace||null,this.cdata=!1,this.currentElement=void 0,this.doc=void 0,this.locator=void 0,this.onError=t.onError}function m(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function E(e,t,r){return"string"==typeof e?e.substr(t,r):e.length>=t+r||t?new java.lang.String(e,t,r)+"":e}function v(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}h.prototype.parseFromString=function(e,t){if(!u(t))throw new TypeError('DOMParser.parseFromString: the provided mimeType "'+t+'" is not valid.');var r=this.assign(Object.create(null),this.xmlns),n=s.XML_ENTITIES,i=r[""]||null;l(t)?(n=s.HTML_ENTITIES,i=I.HTML):t===A.XML_SVG_IMAGE&&(i=I.SVG),r[""]=i,r.xml=r.xml||I.XML;var a=new this.domHandler({mimeType:t,defaultNamespace:i,onError:this.onError}),g=this.locator?{}:void 0;this.locator&&a.setDocumentLocator(g);var c=new p;return c.errorHandler=a,c.domBuilder=a,!o.isHTMLMimeType(t)&&"string"!=typeof e&&c.errorHandler.fatalError("source is not a string"),c.parse(this.normalizeLineEndings(String(e)),r,n),a.doc.documentElement||c.errorHandler.fatalError("missing root element"),a.doc},f.prototype={startDocument:function(){var e=new g;this.doc=c(this.mimeType)?e.createHTMLDocument(!1):e.createDocument(this.defaultNamespace,"")},startElement:function(e,t,r,o){var n=this.doc,i=n.createElementNS(e,r||t),s=o.length;v(this,i),this.currentElement=i,this.locator&&m(this.locator,i);for(var a=0;a{"use strict";var o=r(4582),n=o.find,i=o.hasDefaultHTMLNamespace,s=o.hasOwn,a=o.isHTMLMimeType,g=o.isHTMLRawTextElement,l=o.isHTMLVoidElement,c=o.MIME_TYPE,u=o.NAMESPACE,A=Symbol(),I=r(2983),C=I.DOMException,p=I.DOMExceptionName,d=r(2763);function h(e){if(e!==A)throw new TypeError("Illegal constructor")}function f(e){return""!==e}function m(e,t){return s(e,t)||(e[t]=!0),e}function E(e){if(!e)return[];var t=function(e){return e?e.split(/[\t\n\f\r ]+/).filter(f):[]}(e);return Object.keys(t.reduce(m,{}))}function v(e){if(!d.QName_exact.test(e))throw new C(C.INVALID_CHARACTER_ERR,'invalid character in qualified name "'+e+'"')}function y(e,t){v(t),e=e||null;var r=null,n=t;if(t.indexOf(":")>=0){var i=t.split(":");r=i[0],n=i[1]}if(null!==r&&null===e)throw new C(C.NAMESPACE_ERR,"prefix is non-null and namespace is null");if("xml"===r&&e!==o.NAMESPACE.XML)throw new C(C.NAMESPACE_ERR,'prefix is "xml" and namespace is not the XML namespace');if(("xmlns"===r||"xmlns"===t)&&e!==o.NAMESPACE.XMLNS)throw new C(C.NAMESPACE_ERR,'either qualifiedName or prefix is "xmlns" and namespace is not the XMLNS namespace');if(e===o.NAMESPACE.XMLNS&&"xmlns"!==r&&"xmlns"!==t)throw new C(C.NAMESPACE_ERR,'namespace is the XMLNS namespace and neither qualifiedName nor prefix is "xmlns"');return[e,r,n]}function w(e,t){for(var r in e)s(e,r)&&(t[r]=e[r])}function b(e,t){var r=e.prototype;if(!(r instanceof t)){function o(){}o.prototype=t.prototype,w(r,o=new o),e.prototype=r=o}r.constructor!=e&&("function"!=typeof e&&console.error("unknown Class:"+e),r.constructor=e)}var S={},R=S.ELEMENT_NODE=1,T=S.ATTRIBUTE_NODE=2,N=S.TEXT_NODE=3,O=S.CDATA_SECTION_NODE=4,P=S.ENTITY_REFERENCE_NODE=5,D=S.ENTITY_NODE=6,M=S.PROCESSING_INSTRUCTION_NODE=7,x=S.COMMENT_NODE=8,L=S.DOCUMENT_NODE=9,_=S.DOCUMENT_TYPE_NODE=10,U=S.DOCUMENT_FRAGMENT_NODE=11,k=S.NOTATION_NODE=12,G=o.freeze({DOCUMENT_POSITION_DISCONNECTED:1,DOCUMENT_POSITION_PRECEDING:2,DOCUMENT_POSITION_FOLLOWING:4,DOCUMENT_POSITION_CONTAINS:8,DOCUMENT_POSITION_CONTAINED_BY:16,DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:32});function q(e){for(var t=[];e.parentNode||e.ownerElement;)e=e.parentNode||e.ownerElement,t.unshift(e);return t}function B(e,t){if(t.length=0){for(var n=t.length-1;o<=n;)t[o]=t[++o];if(t.length=n,e){var i=e.ownerDocument;i&&ee(i,e,r),r.ownerElement=null}}}function K(){}function W(e){h(e)}function J(e){return("<"==e?"<":">"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function Q(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(Q(e,t))return!0}while(e=e.nextSibling)}function $(e,t){h(e);var r=t||{};this.ownerDocument=this,this.contentType=r.contentType||c.XML_APPLICATION,this.type=a(this.contentType)?"html":"xml"}function ee(e,t,r,o){e&&e._inc++,r.namespaceURI===u.XMLNS&&delete t._nsMap[r.prefix?r.localName:""]}function te(e,t,r){if(e&&e._inc){e._inc++;var o=t.childNodes;if(r&&!r.nextSibling)o[o.length++]=r;else{for(var n=t.firstChild,i=0;n;)o[i++]=n,n=n.nextSibling;o.length=i,delete o[o.length]}}}function re(e,t){if(e!==t.parentNode)throw new C(C.NOT_FOUND_ERR,"child's parent is not parent");var r=t.previousSibling,o=t.nextSibling;return r?r.nextSibling=o:e.firstChild=o,o?o.previousSibling=r:e.lastChild=r,te(e.ownerDocument,e),t.parentNode=null,t.previousSibling=null,t.nextSibling=null,t}function oe(e){return e&&e.nodeType===W.DOCUMENT_TYPE_NODE}function ne(e){return e&&e.nodeType===W.ELEMENT_NODE}function ie(e){return e&&e.nodeType===W.TEXT_NODE}function se(e,t){var r=e.childNodes||[];if(n(r,ne)||oe(t))return!1;var o=n(r,oe);return!(t&&o&&r.indexOf(o)>r.indexOf(t))}function ae(e,t){var r=e.childNodes||[];if(n(r,(function(e){return ne(e)&&e!==t})))return!1;var o=n(r,oe);return!(t&&o&&r.indexOf(o)>r.indexOf(t))}function ge(e,t,r){if(!function(e){return e&&(e.nodeType===W.DOCUMENT_NODE||e.nodeType===W.DOCUMENT_FRAGMENT_NODE||e.nodeType===W.ELEMENT_NODE)}(e))throw new C(C.HIERARCHY_REQUEST_ERR,"Unexpected parent node type "+e.nodeType);if(r&&r.parentNode!==e)throw new C(C.NOT_FOUND_ERR,"child not in parent");if(!function(e){return e&&(e.nodeType===W.CDATA_SECTION_NODE||e.nodeType===W.COMMENT_NODE||e.nodeType===W.DOCUMENT_FRAGMENT_NODE||e.nodeType===W.DOCUMENT_TYPE_NODE||e.nodeType===W.ELEMENT_NODE||e.nodeType===W.PROCESSING_INSTRUCTION_NODE||e.nodeType===W.TEXT_NODE)}(t)||oe(t)&&e.nodeType!==W.DOCUMENT_NODE)throw new C(C.HIERARCHY_REQUEST_ERR,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function le(e,t,r){var o=e.childNodes||[],i=t.childNodes||[];if(t.nodeType===W.DOCUMENT_FRAGMENT_NODE){var s=i.filter(ne);if(s.length>1||n(i,ie))throw new C(C.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===s.length&&!se(e,r))throw new C(C.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(ne(t)&&!se(e,r))throw new C(C.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(oe(t)){if(n(o,oe))throw new C(C.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var a=n(o,ne);if(r&&o.indexOf(a)1||n(i,ie))throw new C(C.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===s.length&&!ae(e,r))throw new C(C.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(ne(t)&&!ae(e,r))throw new C(C.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(oe(t)){function g(e){return oe(e)&&e!==r}if(n(o,g))throw new C(C.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var a=n(o,ne);if(r&&o.indexOf(a)=0;p--){if(""===(h=o[p]).prefix&&h.namespace===e.namespaceURI){I=h.namespace;break}}if(I!==e.namespaceURI)for(p=o.length-1;p>=0;p--){var h;if((h=o[p]).namespace===e.namespaceURI){h.prefix&&(A=h.prefix+":"+c);break}}}t.push("<",A);for(var f=0;f");else{if(t.push(">"),n&&g(c))for(;a;)a.data?t.push(a.data):Ne(a,t,r,o.slice()),a=a.nextSibling;else for(;a;)Ne(a,t,r,o.slice()),a=a.nextSibling;t.push("")}return;case L:case U:for(a=e.firstChild;a;)Ne(a,t,r,o.slice()),a=a.nextSibling;return;case T:return Te(t,e.name,e.value);case N:return t.push(e.data.replace(/[<&>]/g,J));case O:return t.push(d.CDATA_START,e.data,d.CDATA_END);case x:return t.push(d.COMMENT_START,e.data,d.COMMENT_END);case _:var w=e.publicId,b=e.systemId;return t.push(d.DOCTYPE_DECL_START," ",e.name),w?(t.push(" ",d.PUBLIC," ",w),b&&"."!==b&&t.push(" ",b)):b&&"."!==b&&t.push(" ",d.SYSTEM," ",b),e.internalSubset&&t.push(" [",e.internalSubset,"]"),void t.push(">");case M:return t.push("");case P:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function Oe(e,t,r){var o;switch(t.nodeType){case R:(o=t.cloneNode(!1)).ownerDocument=e;case U:break;case T:r=!0}if(o||(o=t.cloneNode(!1)),o.ownerDocument=e,o.parentNode=null,r)for(var n=t.firstChild;n;)o.appendChild(Oe(e,n,r)),n=n.nextSibling;return o}function Pe(e,t,r){var o=new t.constructor(A);for(var n in t)if(s(t,n)){var i=t[n];"object"!=typeof i&&i!=o[n]&&(o[n]=i)}switch(t.childNodes&&(o.childNodes=new V),o.ownerDocument=e,o.nodeType){case R:var a=t.attributes,g=o.attributes=new z,l=a.length;g._ownerElement=o;for(var c=0;c=0&&eH(t.ownerDocument)?G.DOCUMENT_POSITION_FOLLOWING:G.DOCUMENT_POSITION_PRECEDING);var a=q(t),g=q(r);if(!o&&g.indexOf(t)>=0||n&&t===r)return G.DOCUMENT_POSITION_CONTAINS+G.DOCUMENT_POSITION_PRECEDING;if(!n&&a.indexOf(r)>=0||o&&t===r)return G.DOCUMENT_POSITION_CONTAINED_BY+G.DOCUMENT_POSITION_FOLLOWING;var l=B(g,a);for(var c in l.childNodes){var u=l.childNodes[c];if(u===r)return G.DOCUMENT_POSITION_FOLLOWING;if(u===t)return G.DOCUMENT_POSITION_PRECEDING;if(g.indexOf(u)>=0)return G.DOCUMENT_POSITION_FOLLOWING;if(a.indexOf(u)>=0)return G.DOCUMENT_POSITION_PRECEDING}return 0}},w(S,W),w(S,W.prototype),w(G,W),w(G,W.prototype),$.prototype={implementation:null,nodeName:"#document",nodeType:L,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType===U){for(var r=e.firstChild;r;){var o=r.nextSibling;this.insertBefore(r,t),r=o}return e}return ue(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===R&&(this.documentElement=e),e},removeChild:function(e){var t=re(this,e);return t===this.documentElement&&(this.documentElement=null),t},replaceChild:function(e,t){ue(this,e,t,ce),e.ownerDocument=this,t&&this.removeChild(t),ne(e)&&(this.documentElement=e)},importNode:function(e,t){return Oe(this,e,t)},getElementById:function(e){var t=null;return Q(this.documentElement,(function(r){if(r.nodeType==R&&r.getAttribute("id")==e)return t=r,!0})),t},createElement:function(e){var t=new Ae(A);return t.ownerDocument=this,"html"===this.type&&(e=e.toLowerCase()),i(this.contentType)&&(t.namespaceURI=u.HTML),t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new V,(t.attributes=new z)._ownerElement=t,t},createDocumentFragment:function(){var e=new ye(A);return e.ownerDocument=this,e.childNodes=new V,e},createTextNode:function(e){var t=new pe(A);return t.ownerDocument=this,t.childNodes=new V,t.appendData(e),t},createComment:function(e){var t=new de(A);return t.ownerDocument=this,t.childNodes=new V,t.appendData(e),t},createCDATASection:function(e){var t=new he(A);return t.ownerDocument=this,t.childNodes=new V,t.appendData(e),t},createProcessingInstruction:function(e,t){var r=new we(A);return r.ownerDocument=this,r.childNodes=new V,r.nodeName=r.target=e,r.nodeValue=r.data=t,r},createAttribute:function(e){if(!d.QName_exact.test(e))throw new C(C.INVALID_CHARACTER_ERR,'invalid character in name "'+e+'"');return"html"===this.type&&(e=e.toLowerCase()),this._createAttribute(e)},_createAttribute:function(e){var t=new Ie(A);return t.ownerDocument=this,t.childNodes=new V,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){if(!d.Name.test(e))throw new C(C.INVALID_CHARACTER_ERR,'not a valid xml name "'+e+'"');if("html"===this.type)throw new C("document is an html document",p.NotSupportedError);var t=new ve(A);return t.ownerDocument=this,t.childNodes=new V,t.nodeName=e,t},createElementNS:function(e,t){var r=y(e,t),o=new Ae(A),n=o.attributes=new z;return o.childNodes=new V,o.ownerDocument=this,o.nodeName=t,o.tagName=t,o.namespaceURI=r[0],o.prefix=r[1],o.localName=r[2],n._ownerElement=o,o},createAttributeNS:function(e,t){var r=y(e,t),o=new Ie(A);return o.ownerDocument=this,o.childNodes=new V,o.nodeName=t,o.name=t,o.specified=!0,o.namespaceURI=r[0],o.prefix=r[1],o.localName=r[2],o}},b($,W),Ae.prototype={nodeType:R,attributes:null,getQualifiedName:function(){return this.prefix?this.prefix+":"+this.localName:this.localName},_isInHTMLDocumentAndNamespace:function(){return"html"===this.ownerDocument.type&&this.namespaceURI===u.HTML},hasAttribute:function(e){return!!this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t?t.value:null},getAttributeNode:function(e){return this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase()),this.attributes.getNamedItem(e)},setAttribute:function(e,t){this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase());var r=this.getAttributeNode(e);r?r.value=r.nodeValue=""+t:((r=this.ownerDocument._createAttribute(e)).value=r.nodeValue=""+t,this.setAttributeNode(r))},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);r&&this.removeAttributeNode(r)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);return r?r.value:null},setAttributeNS:function(e,t,r){var o=y(e,t)[2],n=this.getAttributeNodeNS(e,o);n?n.value=n.nodeValue=""+r:((n=this.ownerDocument.createAttributeNS(e,t)).value=n.nodeValue=""+r,this.setAttributeNode(n))},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByClassName:function(e){var t=E(e);return new Y(this,(function(r){var o=[];return t.length>0&&Q(r,(function(n){if(n!==r&&n.nodeType===R){var i=n.getAttribute("class");if(i){var s=e===i;if(!s){var a=E(i);s=t.every((g=a,function(e){return g&&-1!==g.indexOf(e)}))}s&&o.push(n)}}var g})),o}))},getElementsByTagName:function(e){var t="html"===(this.nodeType===L?this:this.ownerDocument).type,r=e.toLowerCase();return new Y(this,(function(o){var n=[];return Q(o,(function(i){i!==o&&i.nodeType===R&&(("*"===e||i.getQualifiedName()===(t&&i.namespaceURI===u.HTML?r:e))&&n.push(i))})),n}))},getElementsByTagNameNS:function(e,t){return new Y(this,(function(r){var o=[];return Q(r,(function(n){n===r||n.nodeType!==R||"*"!==e&&n.namespaceURI!==e||"*"!==t&&n.localName!=t||o.push(n)})),o}))}},$.prototype.getElementsByClassName=Ae.prototype.getElementsByClassName,$.prototype.getElementsByTagName=Ae.prototype.getElementsByTagName,$.prototype.getElementsByTagNameNS=Ae.prototype.getElementsByTagNameNS,b(Ae,W),Ie.prototype.nodeType=T,b(Ie,W),Ce.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,r){r=this.data.substring(0,e)+r+this.data.substring(e+t),this.nodeValue=this.data=r,this.length=r.length}},b(Ce,W),pe.prototype={nodeName:"#text",nodeType:N,splitText:function(e){var t=this.data,r=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var o=this.ownerDocument.createTextNode(r);return this.parentNode&&this.parentNode.insertBefore(o,this.nextSibling),o}},b(pe,Ce),de.prototype={nodeName:"#comment",nodeType:x},b(de,Ce),he.prototype={nodeName:"#cdata-section",nodeType:O},b(he,pe),fe.prototype.nodeType=_,b(fe,W),me.prototype.nodeType=k,b(me,W),Ee.prototype.nodeType=D,b(Ee,W),ve.prototype.nodeType=P,b(ve,W),ye.prototype.nodeName="#document-fragment",ye.prototype.nodeType=U,b(ye,W),we.prototype.nodeType=M,b(we,Ce),be.prototype.serializeToString=function(e,t){return Se.call(e,t)},W.prototype.toString=Se;try{if(Object.defineProperty){function Me(e){switch(e.nodeType){case R:case U:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(Me(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(Y.prototype,"length",{get:function(){return F(this),this.$$length}}),Object.defineProperty(W.prototype,"textContent",{get:function(){return Me(this)},set:function(e){switch(this.nodeType){case R:case U:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),De=function(e,t,r){e["$$"+t]=r}}}catch(xe){}t._updateLiveList=F,t.Attr=Ie,t.CDATASection=he,t.CharacterData=Ce,t.Comment=de,t.Document=$,t.DocumentFragment=ye,t.DocumentType=fe,t.DOMImplementation=K,t.Element=Ae,t.Entity=Ee,t.EntityReference=ve,t.LiveNodeList=Y,t.NamedNodeMap=z,t.Node=W,t.NodeList=V,t.Notation=me,t.Text=pe,t.ProcessingInstruction=we,t.XMLSerializer=be},6559:(e,t,r)=>{"use strict";var o=r(4582).freeze;t.XML_ENTITIES=o({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),t.HTML_ENTITIES=o({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),t.entityMap=t.HTML_ENTITIES},2983:(e,t,r)=>{"use strict";function o(e,t){e.prototype=Object.create(Error.prototype,{constructor:{value:e},name:{value:e.name,enumerable:!0,writable:t}})}var n=r(4582).freeze({Error:"Error",IndexSizeError:"IndexSizeError",DomstringSizeError:"DomstringSizeError",HierarchyRequestError:"HierarchyRequestError",WrongDocumentError:"WrongDocumentError",InvalidCharacterError:"InvalidCharacterError",NoDataAllowedError:"NoDataAllowedError",NoModificationAllowedError:"NoModificationAllowedError",NotFoundError:"NotFoundError",NotSupportedError:"NotSupportedError",InUseAttributeError:"InUseAttributeError",InvalidStateError:"InvalidStateError",SyntaxError:"SyntaxError",InvalidModificationError:"InvalidModificationError",NamespaceError:"NamespaceError",InvalidAccessError:"InvalidAccessError",ValidationError:"ValidationError",TypeMismatchError:"TypeMismatchError",SecurityError:"SecurityError",NetworkError:"NetworkError",AbortError:"AbortError",URLMismatchError:"URLMismatchError",QuotaExceededError:"QuotaExceededError",TimeoutError:"TimeoutError",InvalidNodeTypeError:"InvalidNodeTypeError",DataCloneError:"DataCloneError",EncodingError:"EncodingError",NotReadableError:"NotReadableError",UnknownError:"UnknownError",ConstraintError:"ConstraintError",DataError:"DataError",TransactionInactiveError:"TransactionInactiveError",ReadOnlyError:"ReadOnlyError",VersionError:"VersionError",OperationError:"OperationError",NotAllowedError:"NotAllowedError",OptOutError:"OptOutError"}),i=Object.keys(n);function s(e){return"number"==typeof e&&e>=1&&e<=25}function a(e,t){var r;s(e)?(this.name=i[e],this.message=t||""):(this.message=e,this.name="string"==typeof(r=t)&&r.substring(r.length-n.Error.length)===n.Error?t:n.Error),Error.captureStackTrace&&Error.captureStackTrace(this,a)}o(a,!0),Object.defineProperties(a.prototype,{code:{enumerable:!0,get:function(){var e=i.indexOf(this.name);return s(e)?e:0}}});for(var g={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25},l=Object.entries(g),c=0;c{"use strict";function r(e){try{"function"!=typeof e&&(e=RegExp);var t=new e("𝌆","u").exec("𝌆");return!!t&&2===t[0].length}catch(e){}return!1}var o=r();function n(e){if("["!==e.source[0])throw new Error(e+" can not be used with chars");return e.source.slice(1,e.source.lastIndexOf("]"))}function i(e,t){if("["!==e.source[0])throw new Error("/"+e.source+"/ can not be used with chars_without");if(!t||"string"!=typeof t)throw new Error(JSON.stringify(t)+" is not a valid search");if(-1===e.source.indexOf(t))throw new Error('"'+t+'" is not is /'+e.source+"/");if("-"===t&&1!==e.source.indexOf(t))throw new Error('"'+t+'" is not at the first postion of /'+e.source+"/");return new RegExp(e.source.replace(t,""),o?"u":"")}function s(e){var t=this;return new RegExp(Array.prototype.slice.call(arguments).map((function(e){var r="string"==typeof e;if(r&&void 0===t&&"|"===e)throw new Error("use regg instead of reg to wrap expressions with `|`!");return r?e:e.source})).join(""),o?"mu":"m")}function a(e){if(0===arguments.length)throw new Error("no parameters provided");return s.apply(a,["(?:"].concat(Array.prototype.slice.call(arguments),[")"]))}var g=/[-\x09\x0A\x0D\x20-\x2C\x2E-\uD7FF\uE000-\uFFFD]/;o&&(g=s("[",n(g),"\\u{10000}-\\u{10FFFF}","]"));var l=/[\x20\x09\x0D\x0A]/,c=n(l),u=s(l,"+"),A=s(l,"*"),I=/[:_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;o&&(I=s("[",n(I),"\\u{10000}-\\u{10FFFF}","]"));var C=s("[",n(I),n(/[-.0-9\xB7]/),n(/[\u0300-\u036F\u203F-\u2040]/),"]"),p=s(I,C,"*"),d=s(C,"+"),h=s("&",p,";"),f=a(/&#[0-9]+;|&#x[0-9a-fA-F]+;/),m=a(h,"|",f),E=s("%",p,";"),v=a(s('"',a(/[^%&"]/,"|",E,"|",m),"*",'"'),"|",s("'",a(/[^%&']/,"|",E,"|",m),"*","'")),y=a('"',a(/[^<&"]/,"|",m),"*",'"',"|","'",a(/[^<&']/,"|",m),"*","'"),w=s(i(I,":"),i(C,":"),"*"),b=s(w,a(":",w),"?"),S=s("^",b,"$"),R=s("(",b,")"),T=a(/"[^"]*"|'[^']*'/),N=s(/^<\?/,"(",p,")",a(u,"(",g,"*?)"),"?",/\?>/),O=/[\x20\x0D\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/,P=a('"',O,'*"',"|","'",i(O,"'"),"*'"),D="\x3c!--",M=s(D,a(i(g,"-"),"|",s("-",i(g,"-"))),"*","--\x3e"),x="#PCDATA",L=a(s(/\(/,A,x,a(A,/\|/,A,b),"*",A,/\)\*/),"|",s(/\(/,A,x,A,/\)/)),_=a("EMPTY","|","ANY","|",L,"|",s(/\([^>]+\)/,/[?*+]?/)),U=s(""),k=s("NOTATION",u,/\(/,A,p,a(A,/\|/,A,p),"*",A,/\)/),G=s(/\(/,A,d,a(A,/\|/,A,d),"*",A,/\)/),q=a(k,"|",G),B=a(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/,"|",q),H=a(/#REQUIRED|#IMPLIED/,"|",a(a("#FIXED",u),"?",y)),V=s(""),Y="SYSTEM",F="PUBLIC",z=a(a(Y,u,T),"|",a(F,u,P,u,T)),j=s("^",a(a(Y,u,"(?",T,")"),"|",a(F,u,"(?",P,")",u,"(?",T,")"))),X=a(u,"NDATA",u,p),Z=""),W=a(v,"|",z),J=a(K,"|",s(Z,u,"%",u,p,u,W,A,">")),Q=s(F,u,P),$=s(""),ee=s(A,"=",A),te=/1[.]\d+/,re=s(u,"version",ee,a("'",te,"'","|",'"',te,'"')),oe=/[A-Za-z][-A-Za-z0-9._]*/,ne=s(/^<\?xml/,re,a(u,"encoding",ee,a('"',oe,'"',"|","'",oe,"'")),"?",a(u,"standalone",ee,a("'",a("yes","|","no"),"'","|",'"',a("yes","|","no"),'"')),"?",A,/\?>/),ie=s(g,"*?",/\]\]>/),se=s(/",t.CDSect=se,t.Char=g,t.Comment=M,t.COMMENT_START=D,t.COMMENT_END="--\x3e",t.DOCTYPE_DECL_START="{"use strict";var o=r(4582);o.assign,o.hasDefaultHTMLNamespace,o.isHTMLMimeType,o.isValidMimeType,o.MIME_TYPE,o.NAMESPACE;var n=r(2983);n.DOMException,n.DOMExceptionName,n.ExceptionCode,n.ParseError;var i=r(4722);i.Attr,i.CDATASection,i.CharacterData,i.Comment,i.Document,i.DocumentFragment,i.DocumentType,i.DOMImplementation,i.Element,i.Entity,i.EntityReference,i.LiveNodeList,i.NamedNodeMap,i.Node,i.NodeList,i.Notation,i.ProcessingInstruction,i.Text,i.XMLSerializer;var s=r(5752);t.S4=s.DOMParser,s.onErrorStopParsing,s.onWarningStopParsing},4466:(e,t,r)=>{"use strict";var o=r(4582),n=r(2763),i=r(2983),s=o.isHTMLEscapableRawTextElement,a=o.isHTMLMimeType,g=o.isHTMLRawTextElement,l=o.hasOwn,c=o.NAMESPACE,u=i.ParseError,A=i.DOMException;function I(){}I.prototype={parse:function(e,t,r){var i=this.domBuilder;i.startDocument(),m(t,t=Object.create(null)),function(e,t,r,i,s){var g=a(i.mimeType);e.indexOf(n.UNICODE_REPLACEMENT_CHARACTER)>=0&&s.warning("Unicode replacement character detected, source encoding issues?");function c(e){if(e>65535){var t=55296+((e-=65536)>>10),r=56320+(1023&e);return String.fromCharCode(t,r)}return String.fromCharCode(e)}function I(e){var t=";"===e[e.length-1]?e:e+";";if(!g&&t!==e)return s.error("EntityRef: expecting ;"),e;var o=n.Reference.exec(t);if(!o||o[0].length!==t.length)return s.error("entity not matching Reference production: "+e),e;var i=t.slice(1,-1);return l(r,i)?r[i]:"#"===i.charAt(0)?c(parseInt(i.substr(1).replace("x","0x"))):(s.error("entity not found:"+e),e)}function m(t){if(t>P){var r=e.substring(P,t).replace(C,I);T&&E(P),i.characters(r,0,t-P),P=t}}function E(t,r){for(;t>=S&&(r=R.exec(e));)b=r.index,S=b+r[0].length,T.lineNumber++;T.columnNumber=t-b+1}var b=0,S=0,R=/.*(?:\r\n?|\n)|.*$/g,T=i.locator,N=[{currentNSMap:t}],O=[],P=0;for(;;){try{var D=e.indexOf("<",P);if(D<0){if(!g&&O.length>0)return s.fatalError("unclosed xml tag(s): "+O.join(", "));if(!e.substring(P).match(/^\s*$/)){var M=i.doc,x=M.createTextNode(e.substr(P));if(M.documentElement)return s.error("Extra content at the end of the document");M.appendChild(x),i.currentElement=x}return}if(D>P){var L=e.substring(P,D);g||0!==O.length||(L=L.replace(new RegExp(n.S_OPT.source,"g"),""))&&s.error("Unexpected content outside root element: '"+L+"'"),m(D)}switch(e.charAt(D+1)){case"/":var _=e.indexOf(">",D+2),U=e.substring(D+2,_>0?_:void 0);if(!U)return s.fatalError("end tag name missing");var k=_>0&&n.reg("^",n.QName_group,n.S_OPT,"$").exec(U);if(!k)return s.fatalError('end tag name contains invalid characters: "'+U+'"');if(!i.currentElement&&!i.doc.documentElement)return;var G=O[O.length-1]||i.currentElement.tagName||i.doc.documentElement.tagName||"";if(G!==k[1]){var q=k[1].toLowerCase();if(!g||G.toLowerCase()!==q)return s.fatalError('Opening and ending tag mismatch: "'+G+'" != "'+U+'"')}var B=N.pop();O.pop();var H=B.localNSMap;if(i.endElement(B.uri,B.localName,G),H)for(var V in H)l(H,V)&&i.endPrefixMapping(V);_++;break;case"?":T&&E(D),_=y(e,D,i,s);break;case"!":T&&E(D),_=v(e,D,i,s,g);break;default:T&&E(D);var Y=new w,F=N[N.length-1].currentNSMap,z=(_=d(e,D,Y,F,I,s,g),Y.length);if(Y.closed||(g&&o.isHTMLVoidElement(Y.tagName)?Y.closed=!0:O.push(Y.tagName)),T&&z){for(var j=p(T,{}),X=0;XP?P=_:m(Math.max(D,P)+1)}}(e,t,r,i,this.errorHandler),i.endDocument()}};var C=/&#?\w+;?/g;function p(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function d(e,t,r,o,n,i,s){function a(e,t,o){return l(r.attributeNames,e)?i.fatalError("Attribute "+e+" redefined"):!s&&t.indexOf("<")>=0?i.fatalError("Unescaped '<' not allowed in attributes values"):void r.addValue(e,t.replace(/[\t\n\r]/g," ").replace(C,n),o)}for(var g,c=++t,u=0;;){var A=e.charAt(c);switch(A){case"=":if(1===u)g=e.slice(t,c),u=3;else{if(2!==u)throw new Error("attribute equal must after attrName");u=3}break;case"'":case'"':if(3===u||1===u){if(1===u&&(i.warning('attribute value must after "="'),g=e.slice(t,c)),t=c+1,!((c=e.indexOf(A,t))>0))throw new Error("attribute value no end '"+A+"' match");a(g,I=e.slice(t,c),t-1),u=5}else{if(4!=u)throw new Error('attribute value must after "="');a(g,I=e.slice(t,c),t),i.warning('attribute "'+g+'" missed start quot('+A+")!!"),t=c+1,u=5}break;case"/":switch(u){case 0:r.setTagName(e.slice(t,c));case 5:case 6:case 7:u=7,r.closed=!0;case 4:case 1:break;case 2:r.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return i.error("unexpected end of input"),0==u&&r.setTagName(e.slice(t,c)),c;case">":switch(u){case 0:r.setTagName(e.slice(t,c));case 5:case 6:case 7:break;case 4:case 1:"/"===(I=e.slice(t,c)).slice(-1)&&(r.closed=!0,I=I.slice(0,-1));case 2:2===u&&(I=g),4==u?(i.warning('attribute "'+I+'" missed quot(")!'),a(g,I,t)):(s||i.warning('attribute "'+I+'" missed value!! "'+I+'" instead!!'),a(I,I,t));break;case 3:if(!s)return i.fatalError("AttValue: ' or \" expected")}return c;case"€":A=" ";default:if(A<=" ")switch(u){case 0:r.setTagName(e.slice(t,c)),u=6;break;case 1:g=e.slice(t,c),u=2;break;case 4:var I=e.slice(t,c);i.warning('attribute "'+I+'" missed quot(")!!'),a(g,I,t);case 5:u=6}else switch(u){case 2:s||i.warning('attribute "'+g+'" missed value!! "'+g+'" instead2!!'),a(g,g,t),t=c,u=1;break;case 5:i.warning('attribute space is required"'+g+'"!!');case 6:u=1,t=c;break;case 3:u=4,t=c;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}c++}}function h(e,t,r){for(var o=e.tagName,n=null,i=e.length;i--;){var s=e[i],a=s.qName,g=s.value;if((C=a.indexOf(":"))>0)var u=s.prefix=a.slice(0,C),A=a.slice(C+1),I="xmlns"===u&&A;else A=a,u=null,I="xmlns"===a&&"";s.localName=A,!1!==I&&(null==n&&(n=Object.create(null),m(r,r=Object.create(null))),r[I]=n[I]=g,s.uri=c.XMLNS,t.startPrefixMapping(I,g))}for(i=e.length;i--;)(s=e[i]).prefix&&("xml"===s.prefix&&(s.uri=c.XML),"xmlns"!==s.prefix&&(s.uri=r[s.prefix]));var C;(C=o.indexOf(":"))>0?(u=e.prefix=o.slice(0,C),A=e.localName=o.slice(C+1)):(u=null,A=e.localName=o);var p=e.uri=r[u||""];if(t.startElement(p,A,o,e),!e.closed)return e.currentNSMap=r,e.localNSMap=n,!0;if(t.endElement(p,A,o),n)for(u in n)l(n,u)&&t.endPrefixMapping(u)}function f(e,t,r,o,n){var i=s(r);if(i||g(r)){var a=e.indexOf("",t),l=e.substring(t+1,a);return i&&(l=l.replace(C,o)),n.characters(l,0,l.length),a}return t+1}function m(e,t){for(var r in e)l(e,r)&&(t[r]=e[r])}function E(e,t){var r=t;function o(t){return t=t||0,e.charAt(r+t)}function i(e){r+=e=e||1}function s(){return e.substring(r)}return{char:o,getIndex:function(){return r},getMatch:function(e){var t=n.reg("^",e).exec(s());return t?(i(t[0].length),t[0]):null},getSource:function(){return e},skip:i,skipBlanks:function(){for(var t=0;r"!==s.char()?o.fatalError("doctype not terminated with > at position "+s.getIndex()):(s.skip(1),r.startDTD(l.name,l.publicId,l.systemId,l.internalSubset),r.endDTD(),s.getIndex());default:return o.fatalError('Not well-formed XML starting with "0)return o.fatalError("processing instruction at position "+t+" is an xml declaration which is only at the start of the document");if(!n.XMLDecl.test(e.substring(t)))return o.fatalError("xml declaration is not well-formed")}return r.processingInstruction(i[1],i[2]),t+i[0].length}function w(){this.attributeNames=Object.create(null)}w.prototype={setTagName:function(e){if(!n.QName_exact.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,r){if(!n.QName_exact.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:r}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=I,t.parseUtils=E,t.parseDoctypeCommentOrCData=v},2940:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});const o=function(){return""!==getComputedStyle(document.documentElement).getPropertyValue("--blue-france-sun-113-625")}},9994:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});const o={lightOrange:"data:image/png;base64,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IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjkyYWVkNjM2LWY3MDMtNDAzOC1hNzM4LWZiYzYxYzZlMTljNCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5NWMzZWI3NC0zYWRmLTRkYzUtOWZjZS1iODQ4NTc3Nzg4ODQiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0NjI3ZDg3NC1lZDIyLTRiZTUtYTlkNS00NDlmMzVhZDIxYzgiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5Mjc4OTUzMDYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphM2U3ZWQ1MS0xNTI4LTRhYjAtODVjOS0zNzNkNzgxZGM2ZmMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjI3KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PofUkY4AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGRuA4VZTAAAFcElEQVRYw82YW2xbVRaGv7XP8bHjXByHQkNhWigdVX1AikRBMBoQ8wASl4fRqPDAAxIPKAVxeRqQRohHBEVCaoGKUBCl4qHcNKCZVKMRRQxtgTaACLRKqlwB14NzM2ni2D2XvXjgBFXQOnFiA1uy/HB89u9/7bX+vf4l1HnpK57hTNCE0AzqAS5gAAuEID5KiWSiLPf4tp7YUjcSu4yLZzdi2IJyNXANcBlwAdAKzAHTwDhwDKEPywC+GZWHbPi7IKOvZIWguAnlr8BtwJ+AxDJeDYCPgF6Ed0hkh+Weov5mZLTHJMDeBjwYk0itYJtKTOpZML3SbYNfnYz2SBr0buARYENcFytdFvga2AGyT7p14Vcjoz3ShOgdKDuAi+pUewpMIDyCypvSreWGk9HdroOEV2F4A1hfTxGJCX2D5U7U/UzuD6NaXq49NRJhBsOjwMVLEtE4gaL4W5cV3IsxPEoizDT0ZLTHcSH6M/BWLLlVwpQKuPzhb+i8sRkv04Y/e5rvPigxtnM9trKU2k0D28A5LN3RsmXbrbFOU8DtQLpqfJqu97nh6TydmzvwWpOI8VDbxqbrkmz62yk+/Ps6yoe8KkeV/hHHfgrMNyrNEkBX1SAktgRs3T7ApV1rSWayiEkDLmLSJDNZLu1ay9btAyS2BEsEuWuZ99WKyRhgHeCcn8wGw/qbOnAS3jmfOwmP9Td1kNhQDduJcUwjyciS0RJXMMkWkPPUo/z4XFxZRhZII8mEwFCsT+f5xXTE7FAOteduItVaZodyhNPVZDeKccJGkxmsChIMOvTt6aRSzIP+7A9rRKWYp29PJ8GgsyqcVauZSADaj+IDTecWvBlD4e01HKjM07XtOOuuy+A2X0BYmib/8SxfvLWRYm8LdqZaCvkI/SDBci6nld0ze7KCLa4F3gSurR4MB5x1FnMhiCeor9hJiPKmWpbGp3EU2IbJFuTe5XfStbczLxgP7K0IPcCFDWhnJoFuMAek2/oNbWdku/WxHATejT1JPZcPvINysFYiK+gAFkXTK6H+MyhXADeseJ9fmrVDM6X080/+p1M2/yFsD1zjEIauEeMAqNpQE16oaKiqwfjYeLk+fuYl10HDq7DsBTavxs8o6FzFKez/dM3rLx9LjUyVxcb7yVkfzmpXFbACJURHIxgyxkyu1ml6qL0Z4YX4xl7Jfrrgm9Ov9bX/e++x1tHCgkQ11lgELGA4sBp3iHRbH5GDwJPAFLXo6KJnDmTh/aG2w2/3t47VSGQxs1zAE9U2s9pEjx3hXuBloCa7G1rxv8o3f/7SkUz/UFFWMqGRWMpHAqsDbl00KGotIXM7MawF7gKSS5oJJRospI7v+rD96Ikp8aV2EgrkVPW4OnIy6SVL9ZubvZgyaOVyYDfwl2oNqVWiXNEb231oTe+/BrzvK9Gy01MFyoiOKzIEmqsEfjGf/39U1yHgosJFUXhlFMl+z9E/nkvhVNHZsjux+9Caf77RnyzMBaJLmW4RrWAlB3Y4Uh13HLOA4wQjo6O2IRPNxVV4JuG5Et2SSelzjtFLzsZQ0NIZ8/2rx7K9+/paxqbKvyh4Bc4AFQxzau23Dow7FS+nHmfEUz05OqINH8+evXJPJVOuE93XkY4eSziaXcQpB2b+vZNt7+/8IPPl2OxPRMJ4dDsLzIho3hpzamJ6aqJ0ei6qtZAasmZ2OS1RyOMd6egBIzSFVoKj4y1Hnvhv+8cD02ZOkEmgIKITVnXKWDs1ksvNrgbTbRSZ46cypY50aWcllIsyKXvr8GTyi9f6WvePFGVQhO8EPW2NzI+OfV2pF2bDTgbg8D/aJeVUspd1BK3/G24u7/skO3+iYP3h3LdhI/B+AGodUpo8WKwoAAAAAElFTkSuQmCC",darkOrange:"data:image/png;base64,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czpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjIxNDZjMzUzLWIxZjItNGVjOC04NzQ3LTIwMGEyYWExM2ViMyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2NGViNmI2Ni03Y2I2LTRkZGUtYTI3OS01MGY0ZWFiZGFhODAiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1ODRhM2VjZC1kNGFmLTQ3NjItYjA1ZS04ODk2MGQ4ZTk0Y2MiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5MDM3ODI2MTQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxYzNjOGRkZi1kMjVkLTQ4YzQtYTAwYS0yMmU3ZDYwMzg1YjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjAzKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PuhCAHgAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGQOTjc4FAAAFdklEQVRYw82YW2gcZRTHf+eb2dlkc9lsrFYr2notfSgWxKKiog8VvIFI9UFQEaWtYPFJfREfRRSEeqlttViLD/WGisYXrShWpfWC1WpSN5eN3cZumkuTzWY3c/mOD9lI0WSTTXbVA8M8zMz3n//5zvl/5xyhxqb3ewYvaERpAvUAFzCABUIQH6GAHyvKa76tJbbUjMRW4+LbC7GsQbgCWA+sAs4AWoA8MAxkgEMo32LoxDO98oIN/xdk9IGUYEYvRrgduAW4Gogt4NMA+BroQHkfm+qW3aP6n5HRTSYG9hZga5lEwyKWKZVJvQCmQ3bZ4F8no5skAXov8BiwspwXizUL9APPgOyVXTr5r5HRzdKI1TsRngHOqlHuKTCI8hhG3padWqw7GX3IddDwcixvAefXUkTKhH7HcBfifi8vh1E1H1cfGkGYxPI4cM68RGw5zf3y3S7IuedgeZwgTNZ1Z3Sz46LRNcA7Zcmd25yGgPWP/M7q65toTLZSHBvn6OcFDm07n6g0n9oNAxsR54DsjBYs2251QWAbgFuBREX/tF3rc9+zA6xa3U5jSxwxHmpbueyqOOvvOM7rj67g1JfedFTNagngVtR+B0zUK8xiwLqKTmhcE3Dblk4uXbecRDKFmATgIiZBIpni0nXLuW1LJ41rgnmcvG6B59WiyRhgBeDM+UZipWHthnbcmDf7b8Y81m5oJ7GyErZTxjH1JCPzesu4ghtvBpkjH2X6uXFlAVEg9SMjhEAamFsyp4Yjcuks1s6uXdZacuksU8OVZDcC0mW8OpFRQqBruvqdwwpdDh+9cjaF0QHQv/2wRhRGB6afdzkVkKZxtDoyVaqZBKCHEXygcXafjhi63l3G9tIEGzYe4ZKrksSbzmCqMEz6mzE+eedC+juaiUYqhZCPchgkqKB4SzxntqQEO7oceBu4srIzHIitsMTOBOMJ1leCkxAMmEpRWt6Vg8BGTConOxZeSVdfzmwxHmpvRtkJnFmHcuYksBkxH8tO69e1nJEd1sdhP/BBuUippfnA+3jsr5ZI9TnzV33mFcB/DuEi4LpFr/PPZu3LkanES08fOltWnxe2Ba5xCEPXiHEAVG2oMS9UNFTVINOXKdamn3nQdSC8HMMeYPVS+hkFzQdObl9m2Zu7+xt6hkKx5fXktGumdNXyZQUKiPZGkDbGnFxqp+kh9kaUHeUTezHr6WRkxt/oa/toT39Lby6QqMoci4BJDB8vpTtEdlkflf3A08AQ1ejoTM8cyeRnudYD72Zb+qokMhNZLuCJaqtZaqDLLi0i7EHYDVTV7oZW/J9PNf3wanfycLoki5nQSFnKewKrnW5NNMhtKRDlt6EsB+4G4vM2/UrUNd5w5Pl028FfiuJL9SQUyKrqEXXkaNyLF2o3N9vUYKB0AbAduKFSQWqVKFv0+rYfXdbx4aB3qqQLDk8VKCKaUSQNmi0F/ujAwB9RTYeAMwoXabg2QvZ5jl4ym8Ip6FjgDm7/bdl7bw3Ec/lItEJyWyAS0RJWsmC7I9WM45hJHCfo6e21dZlozlju3pjnSnRT0tMXHdFzT8dQ0EJoTr2eSXXs7W/uG/pnwiswBZQw5NXaYw5knJKXVY8p8VSP9vZo3cezp1v2nniDK9FD7V70RMxoaganGJmJT0+0frbtt+RPfVN/EQnLo9sxYEREB6wxxweHhwYL4/mo2kSqi43c5zRH8GS7Fz1shMZQJTg41PzVU7+2fdNZNHlBTgI5ER20qkPG2qGebHZsSTpULzJH8slCe6ywrWTlrGTM3tw9Ef/xjUzLvp6idIlwQtBxa2Sit6+/VCvMuu0MwIE726RBSqlViaDli6Gm4t6e1MQveet3Z4+F9cD7Ewo4WRJBbaaSAAAAAElFTkSuQmCC",red:"data:image/png;base64,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293bv2fa/f0ASM5yljz/NiUAAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmI5YjA2YTAwLWZkOTQtNDc5MC1hNzIzLTlkMGUwNGRiNTRlNyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1MTQ3ZGU5Yi1kOTA0LTRlNWYtYjIyYy0wZmMzOGRmMWI3ZGEiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YzBjNTI2YS1lYTkyLTQxYWItODM5Yy05OWFhYTM0YjdlYzciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE2NDAxNTU0MjYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowMjQ4MDc5ZS1kMTYyLTQxZmItOGViYS1lMzY2NTRiNGRjMjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjIwOjQwKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PkaovgIAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPFCiKn0kIAAAFfUlEQVRYw82YTWxc1RXHf+e+N2/GH+Px2IEEV02AgqIsIkwgoYS2ahepVGCBUOiCRRdsAAnECthErBBCICGFj4gqRQqBRSABUrVm1URtCSATJ5ASZCPHH0kGgx1/xJl5nvH7uIcFY4iIM/GzZyhHenqL994993/u+f/fOUeos+nNnkHCJoQWRD0UFzCARYhQCVB8NFWWTwNbT99SNxC3GZfIXg9sADYDWxCuRekEskARYQplFPgEOAr045ph6bXRzwKM3pEX5mduQLkHuAvYCqSW8GkIfAT0IBwknT8lH87o/w2M3mpSqL0LeLQKIrOMZSpVUC8hpkf6bPiTg9FbpBn0L8ATwLoqL5ZrFjgNPAeyV47p3E8GRjdLE6r3oTwHXF0n7ikwgfAEIvvlqJYbDkY3uw4a3YLyNrC2niJSBXQG4c+Ie0yORnGSj5OnRhzlUJ4ErrkikBAoAjPVe7ik4F6D8iRxlGvoyegmx4X4NwgHgM6a8fUyIfc8doZbf99Ca66N0uwF+v7tc3DnWoJK6gqep1C2g3NEjsdLlm03GXSbAe4GmmvGZ91vA3Y8P8aN6ztoyaYxxsPaNrbcnmbbvV/x9ONdnPnA+w71otaMcDfYPqDUmDQTUgjdNYPQsSHkgYf62di9mmwujzHNgIsxzWRzeTZ2r+aBh/rp2BDWDLLQjSzpf7VMMIpB6QKcy77Tuc6wdVsHbspbfJspj63bOuhcV8u3g9KFJtufWQbHakfLdQUv3YrI4qwQ+e65616Jr6mknE4KJgIGgctLZnEq5vRgAWsXLyKttZweLFCcqiW7cdVP1DgwQoQwUNPJxIDDG7vXMDszBvqjDWvM7MwYb+xew8SAUzNowgCSDEwyNVMJQU8AAdC06DvBtOG/76xirlLi3u0nufn2HJmWTir+FJ9+PMu7B66nr6eVYLpWCgUoJ0DCGoq3wv/MbXkhmlkN7Ad+XTMY4kBTl6XlKnA8IQ4U/xyUx8wlB3ZpKvcC23Hz49K79Ep6GeWM8VB7J8pfgasaUM6cAx5EzPvSZ4OGljNy1AYIh4C/L6lASWYBcBCHQ0mBJOfM94rk+WjwAsKvgN8te51LK7kPpm3zK89OrZH1v4zaQ9c4RJFrxDgAqjbSlBcpGqlqODoyWq5TP1OtnoU9wPqV9DMKWlRnfJ+/6q3XKpmhSRVbXU8uuhb6Hq1eVsBHdDiGQWPMuZV1mpuMB/aPCK8CXcsMjs6pufCm3/7PPZXs8LhKnJBjMTCH4f2VdIfIcRsgcgh4FpgkiY4u9Mwqc4fn2468M58dSQhkIbNcwBPVNrPSRJdjWgb2AK8BidrdSCX4PGw5/re53IlBK8uZ0EhVyodCq/1uXTTIzfrExZ0oq4H7gfQSmv54IMqcfNFv7/0ilkCSg1CgoKon1ZEv017ar9/cbEvGEFeuQ9mF8IdaBamFuBB7I7tKq3r+EXjnK0tPTxUoIzqqyCBooRIGM2NjX8d1HQIuKFys0cYY2eeJ3riYwinorHUndvmr3nt7Pj1eVNEa5LZALKIVrBTAnopVRx3HzOE44dDwsG3IRHPBxrtTnkv8p5yjLzvoLy72oaC+mvOvz+V79pZbRyYvJbwC80AFQ1GtPevAqFPxCuoxL57ql8ND2vDx7MVW2JTOuMQPdxDvSInmF/yU1ZT+Nd92eGcp97+RH4BE1XHHLDAtomPWmK8mpiYn/AvFOCmRGmLTm53WOOKpDhM/YqApQsLe+dYPnym1f9xvTVGQc8C4iE5Y1Ulj7eRQoTC7Ih1qFJiTQc7vwN9ZUbk6Z+ydp6L0Z2+Ws/uGrAyI8I2gF6yR0vDI6Uq9fDbsZACO3NQuGa3kr3XC7H+ClvJeP1/6IrbBqbNno0b4+xbMlmARngcRbAAAAABJRU5ErkJggg==",turquoiseBlue:"data:image/png;base64,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/MUi8H5G35QHBm+BvjV3bu1znD4AWZpV+gY4OARGS5S97vHu3u65/XunPb8fN2tyj8UDOK0AAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjEwNGNlNWFhLTE1YzctNGI4Yi1iOGU1LTFmYWQyNWFiYzBhZCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpkNDMyZTY1Zi0xOThhLTQxM2EtYWYyMy1jNzhlNzczNGRlN2QiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyNzExODVkMi03MWZiLTRhZDMtYTJmMi1iNjM3OWU3MDc1OTEiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE4NjYyMzgzMjQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NGFiYzNkYS1lZWJiLTRlZjctYjdjNS04ZDRjODY5OGVjODMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI0OjI2KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pj0tlUwAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGBru/VeEAAAABmJLR0QA/wD/AP+gvaeTAAAFO0lEQVRYw9WYe2xTVRzHTx97dYS5B1UHa+/tY12dDoOKWyIGlfgHkCkSNTHGwHxA3NiAP/A5x4CMKEzdYL29YyAyBxKQZbI+NvYIaowaH9Ogi2GRbGjcFrbBNrq2a2/9nq5LCFnbbfSOeZJPTs/t6Tm/7/39zu+cU0IiXc7WSImNX0BsZiVYAhigmah5tHklsZrjSYtJSuZtaeSiiJU3gHUwfC9oARfBIHBP1DzaPH1eRuzmp0E6aTgSNX9EWMwSvOkMGPgG+CpguG8a0H7nA78zkMYqye0V0lYXDSHrYUw7cE5TxM04/b+38+vJ+RPRt0eIjVeAAhhyCQizFDKJEBjndaCY49Di4+CRlzFxfwSE3Ciol9i4DSBujoRUy7HIszFxdwSF3CioBy8qm1g5ufhirHwyJqwHrrDGWTlg8hFL1URN2+EF0XFPkyYuSWwhUVgnT2CygXBG3dFcM7bz1/au1u7OK9/93eWidUlHe1dCc810EsUAsXOPQZCI3rGZ6Wb4EXAEM0SCUFnZduz6T/09l4bHXYOCz+f0+XxeWg+7XYM/4vnKtlqHJHSIOrAHlYMFYmawRNCKycaDGZLVfMRdf/nPDpfXM+abotDnpy93dtzXfNgdZg+im2uimJ6h66UTeIMZsrat1jvkdPRRb/imLt4hl6N3DfqFEIPvOMzDJYspJsWfbUKEyFNttcKoyzkKo4UgYoRRt3OE9guT1br984nsmQ7gCWbIipaj4xeu9v/hFQTPlG7B89+u9v9O+4UQQ8f/BSlaVM8kgBOhji4p9mpvwQ+Wfwddjp6bQw2u8g44HT3535/tTUa/0Eccvg4sFDE1m2PBZkx2LVRqVcLQvG/PDDX1/tVxze38x+UZH6O1He28b764qgwtxOcf327eBGLFE9NikiD3qzDZhVBJgCJH3KubDnkfbD4s5Jw74qM1bcvDnxq8/vHt1SrS9InIJ2m7OQ4UYsKhCB9lJqHj0gPsHJzPvsS9w8rRRPDptI40M8PlH9fOJ5M5K008rsZmIwi5gc4QN9Zja8zn+5epch9PTFepU1iGuVunVqeyS9g0iv8zy96l0WiSjIsXx28iJEJhaONkMGB5YP14bkmI1SzIz1T0pRa9VKnNzCjUMcwWUAS2BtgWYLJN+xTo1OyrOhW7xsAwqnSGkd3i+uGjkT5Xw6DLt3AdEKQNB4YXbdtwQpuVuRtG7pwhxWA7vJgRib0nDuSDvtkIkjYcHE3aVWjRLL9/zyyETPK2Vq3OidAaOhiPDLcbxo3MRIik0eReWPnO15pHHiqbpYhS6hkNw7wAz0To6GM5hAzH3wkDa6b7x4bEwnkUfMnP6idX7Nex7GxElIDNerV6hU6jSdbp9RHck2w0w/FaGGoJm7KtnCfmWNlF1fOrK3Q6bekMRFABO7QM8yxewFLUi+5JSxPpAmcxy0gjt1Rytir4NcHKCfJTH/al5j1j1hr0pWEML55YD+x2GP6cVqNZZjQYEvUsG4vP4v8jKju5L1p6qnytxGKa6qogyOorBpVbXvxMe69xdxABb9I0DAGvIIRWp7NsBsJIoWVZKfaXuf+jMKp2b6z8+Adb4aErNwpCCh5J2pnfoH0ga08g7invBfaQjXjjuQifhyEgLdNolJP5UqR17y+QnSwvk1i565OZK6F8RzubvWwvDH8LvKZnmHXY8HKws+sNLJtI5muJ/7hYElOzJ1V+fN9R7CVDClPJOVXuqo06vS4HQjTwgDKDZRXk/1JiD7wrieFLk6T1lczCXUVK7aPZinS9XrTw+Q+Tql7SUmvGuQAAAABJRU5ErkJggg==",defaultOffset:[-25.5,-32]}},3273:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});const o={getGeocodedLocationFreeform:function(e){var t=e.placeAttributes;if(t.label)return t.label;if("PositionOfInterest"===e.type){var r=t.toponym;return t.category&&Array.isArray(t.category)&&t.category.length>=2&&"administratif"===t.category[0]?r=r+", "+t.category[1]:t.postcode&&(r=r+", "+t.postcode[0],t.city&&(r=r+" "+t.city[0])),r}return"StreetAddress"===e.type?(t.housenumber?t.housenumber+" ":"")+t.street+" "+(t.postcode?t.postcode+", ":"")+t.city:"CadastralParcel"===e.type?t.id:"..."},getSuggestedLocationFreeform:function(e){if(e.fullText)return e.fullText;var t=[];return t.push(e.street||""),t.push(e.postalCode||""),t.push(e.commune||""),"PositionOfInterest"===e.type&&(t.push(e.poi||""),t.push(e.kind||"")),t.join(" - ")}}},2536:(e,t,r)=>{"use strict";function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}r.d(t,{A:()=>n});const n={detectSupport:function(){var e=!0,t=window.navigator.userAgent.toLowerCase();return-1===t.indexOf("iphone")&&-1===t.indexOf("ipod")&&-1===t.indexOf("ipad")&&-1===t.indexOf("android")&&-1===t.indexOf("mobile")&&-1===t.indexOf("blackberry")&&-1===t.indexOf("tablet")&&-1===t.indexOf("phone")&&-1===t.indexOf("touch")||(e=!1),-1===t.indexOf("msie")&&-1===t.indexOf("trident")||(e=!0),e},assign:function(e,t){for(var r in e=e||{},t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e},mergeParams:function(e,t,r){if(void 0!==e&&void 0!==t)for(var n in void 0===r&&(r=!0),t)t.hasOwnProperty(n)&&("object"===o(t[n])?e.hasOwnProperty(n)?this.mergeParams(e[n],t[n],r):e[n]=t[n]:e.hasOwnProperty(n)?r&&(e[n]=t[n]):e[n]=t[n])}}},5844:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var o=r(3065),n={getLogger:function(e){if(void 0===t)var t={env:{VERBOSE:!1}};t.env.VERBOSE?o.enableAll():o.disableAll();var r=e||"default";return o.getLogger(r)},disableAll:function(){var e=o.getLoggers();for(var t in e){if(Object.hasOwnProperty.call(e,t))e[t].disableAll()}},enableAll:function(){var e=o.getLoggers();for(var t in e){if(Object.hasOwnProperty.call(e,t))e[t].enableAll()}}};const i=n;window.Gp&&(window.Gp.Logger=n)},6736:(e,t,r)=>{"use strict";var o;r.d(t,{A:()=>n});const n={generate:(o=Math.floor(Date.now()),function(){return o++}),name:function(e){var t=null,r=e.lastIndexOf("-");return t=-1===r?e:e.substring(0,r),t},index:function(e){var t=null,r=this.name(e),o=r.lastIndexOf("_");return-1!==o&&(t=r.substring(o+1)),t},uuid:function(e){var t=null,r=e.lastIndexOf("-");return-1!==r&&(t=parseInt(e.substring(r+1),10)),t}}},6964:function(e,t,r){ /*! diff --git a/dist/modules/GpfExtOlMeasureArea.css b/dist/modules/GpfExtOlMeasureArea.css index 1a87c909..6bad8de9 100644 --- a/dist/modules/GpfExtOlMeasureArea.css +++ b/dist/modules/GpfExtOlMeasureArea.css @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */div[id^=GPmeasureArea-]{left:74px;top:260px}div[id^=GPlayerSwitcher-]{right:8px;top:8px}div[id^=GPlayerSwitcher-] [draggable]{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;user-select:none;-khtml-user-drag:element;-webkit-user-drag:element}div[id^=GPlayerSwitcher-] input[type=checkbox]+button+dialog{max-height:0}input[id^=GPshowLayersList-]{display:none}button[id^=GPshowLayersListPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowLayersListPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}.position>div[id^=GPlayerSwitcher-]>dialog[id^=GPlayersList]{position:absolute}.position>div[id^=GPlayerSwitcher-]>button[id^=GPshowLayersListPicto-]{float:unset}dialog[id^=GPlayersList]{float:left;position:relative}button[id^=GPshowLayersListPicto-]{float:right}dialog[id^=GPlayersList]{border-bottom-right-radius:0;opacity:0}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{height:auto;max-height:inherit;opacity:1}.GPlayerCounter{background:#fff;border-radius:100px;color:#000;display:inline-block;font-size:12px;left:15px;line-height:1;min-width:15px;padding:2px 0 1px;position:relative;text-align:center;top:-15px}.GPlayerSwitcher_layer{border-bottom:1px dotted #ccc;overflow:hidden;position:relative;top:0}dialog[id^=GPlayersList] .GPlayerSwitcher_layer:last-child{border-bottom:none}.GPlayerAdvancedTools{display:block;max-height:0;opacity:0;transition:max-height .5s ease-out 0s,opacity .5s ease-out 0s}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{opacity:1}[id^=GPlayerInfoPanel]{left:unset;right:100%}div[id^=GPlayerInfoContent]{max-height:200px;overflow-y:auto;padding-left:10px;padding-right:10px;position:relative}div[id^=GPtoolbox-measure-main]{display:inline-block;float:left;left:78px;position:absolute;top:8px;z-index:1}div[id^=GPtoolbox-measure-widget]{border-radius:2px;display:none;left:auto}div[id^=GPtoolbox-measure-widget]>div{bottom:auto;display:block;left:auto;position:relative;right:auto;top:auto}div[id^=GPtoolbox-measure-main]:hover button[id^=GPtoolbox-measure-button]{background-color:rgba(0,60,136,.7)} /*# sourceMappingURL=GpfExtOlMeasureArea.css.map*/ \ No newline at end of file diff --git a/dist/modules/GpfExtOlMeasureArea.js b/dist/modules/GpfExtOlMeasureArea.js index 5c70094f..fef4091d 100644 --- a/dist/modules/GpfExtOlMeasureArea.js +++ b/dist/modules/GpfExtOlMeasureArea.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var e={562:(e,t,n)=>{"use strict";n.d(t,{A:()=>v});var r=n(7392),i=n.n(r),o=n(2940);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function l(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function s(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function d(e,t){for(var n=0;n{"use strict";var r=n(3391),i=n(562),o=n(1363),a=n(2938),l=n(9201),s=n(6736),c=n(5844);const d={configuration:{},isConfigLoaded:function(){if(this.configuration&&0!==Object.keys(this.configuration).length)return!0;var e="undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0!==n.g?n.g:{};return!!(e.Gp&&e.Gp.Config&&e.Gp.Config.layers&&0!==Object.keys(e.Gp.Config.layers).length)&&(this.configuration=e.Gp.Config,!0)}}; /**! diff --git a/dist/modules/GpfExtOlMeasureAzimuth.css b/dist/modules/GpfExtOlMeasureAzimuth.css index 1286f53d..b66f0b8e 100644 --- a/dist/modules/GpfExtOlMeasureAzimuth.css +++ b/dist/modules/GpfExtOlMeasureAzimuth.css @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */div[id^=GPmeasureAzimuth-]{left:10px;top:260px}div[id^=GPtoolbox-measure-main]{display:inline-block;float:left;left:78px;position:absolute;top:8px;z-index:1}div[id^=GPtoolbox-measure-widget]{border-radius:2px;display:none;left:auto}div[id^=GPtoolbox-measure-widget]>div{bottom:auto;display:block;left:auto;position:relative;right:auto;top:auto}div[id^=GPtoolbox-measure-main]:hover button[id^=GPtoolbox-measure-button]{background-color:rgba(0,60,136,.7)}div[id^=GPlayerSwitcher-]{right:8px;top:8px}div[id^=GPlayerSwitcher-] [draggable]{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;user-select:none;-khtml-user-drag:element;-webkit-user-drag:element}div[id^=GPlayerSwitcher-] input[type=checkbox]+button+dialog{max-height:0}input[id^=GPshowLayersList-]{display:none}button[id^=GPshowLayersListPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowLayersListPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}.position>div[id^=GPlayerSwitcher-]>dialog[id^=GPlayersList]{position:absolute}.position>div[id^=GPlayerSwitcher-]>button[id^=GPshowLayersListPicto-]{float:unset}dialog[id^=GPlayersList]{float:left;position:relative}button[id^=GPshowLayersListPicto-]{float:right}dialog[id^=GPlayersList]{border-bottom-right-radius:0;opacity:0}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{height:auto;max-height:inherit;opacity:1}.GPlayerCounter{background:#fff;border-radius:100px;color:#000;display:inline-block;font-size:12px;left:15px;line-height:1;min-width:15px;padding:2px 0 1px;position:relative;text-align:center;top:-15px}.GPlayerSwitcher_layer{border-bottom:1px dotted #ccc;overflow:hidden;position:relative;top:0}dialog[id^=GPlayersList] .GPlayerSwitcher_layer:last-child{border-bottom:none}.GPlayerAdvancedTools{display:block;max-height:0;opacity:0;transition:max-height .5s ease-out 0s,opacity .5s ease-out 0s}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{opacity:1}[id^=GPlayerInfoPanel]{left:unset;right:100%}div[id^=GPlayerInfoContent]{max-height:200px;overflow-y:auto;padding-left:10px;padding-right:10px;position:relative} /*# sourceMappingURL=GpfExtOlMeasureAzimuth.css.map*/ \ No newline at end of file diff --git a/dist/modules/GpfExtOlMeasureAzimuth.js b/dist/modules/GpfExtOlMeasureAzimuth.js index 28a06fe8..6e8d5b3e 100644 --- a/dist/modules/GpfExtOlMeasureAzimuth.js +++ b/dist/modules/GpfExtOlMeasureAzimuth.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var e={562:(e,t,n)=>{"use strict";n.d(t,{A:()=>v});var r=n(7392),i=n.n(r),o=n(2940);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function l(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function s(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function d(e,t){for(var n=0;n{"use strict";var r=n(3391),i=n(562),o=n(1363),a=n(2938),l=n(9201),s=n(6736),c=n(5844);const d={configuration:{},isConfigLoaded:function(){if(this.configuration&&0!==Object.keys(this.configuration).length)return!0;var e="undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0!==n.g?n.g:{};return!!(e.Gp&&e.Gp.Config&&e.Gp.Config.layers&&0!==Object.keys(e.Gp.Config.layers).length)&&(this.configuration=e.Gp.Config,!0)}}; /**! diff --git a/dist/modules/GpfExtOlMeasureLength.css b/dist/modules/GpfExtOlMeasureLength.css index 2517b073..91cdc363 100644 --- a/dist/modules/GpfExtOlMeasureLength.css +++ b/dist/modules/GpfExtOlMeasureLength.css @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */div[id^=GPmeasureLength-]{left:42px;top:260px}div[id^=GPtoolbox-measure-main]{display:inline-block;float:left;left:78px;position:absolute;top:8px;z-index:1}div[id^=GPtoolbox-measure-widget]{border-radius:2px;display:none;left:auto}div[id^=GPtoolbox-measure-widget]>div{bottom:auto;display:block;left:auto;position:relative;right:auto;top:auto}div[id^=GPtoolbox-measure-main]:hover button[id^=GPtoolbox-measure-button]{background-color:rgba(0,60,136,.7)}div[id^=GPlayerSwitcher-]{right:8px;top:8px}div[id^=GPlayerSwitcher-] [draggable]{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;user-select:none;-khtml-user-drag:element;-webkit-user-drag:element}div[id^=GPlayerSwitcher-] input[type=checkbox]+button+dialog{max-height:0}input[id^=GPshowLayersList-]{display:none}button[id^=GPshowLayersListPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowLayersListPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}.position>div[id^=GPlayerSwitcher-]>dialog[id^=GPlayersList]{position:absolute}.position>div[id^=GPlayerSwitcher-]>button[id^=GPshowLayersListPicto-]{float:unset}dialog[id^=GPlayersList]{float:left;position:relative}button[id^=GPshowLayersListPicto-]{float:right}dialog[id^=GPlayersList]{border-bottom-right-radius:0;opacity:0}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{height:auto;max-height:inherit;opacity:1}.GPlayerCounter{background:#fff;border-radius:100px;color:#000;display:inline-block;font-size:12px;left:15px;line-height:1;min-width:15px;padding:2px 0 1px;position:relative;text-align:center;top:-15px}.GPlayerSwitcher_layer{border-bottom:1px dotted #ccc;overflow:hidden;position:relative;top:0}dialog[id^=GPlayersList] .GPlayerSwitcher_layer:last-child{border-bottom:none}.GPlayerAdvancedTools{display:block;max-height:0;opacity:0;transition:max-height .5s ease-out 0s,opacity .5s ease-out 0s}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{opacity:1}[id^=GPlayerInfoPanel]{left:unset;right:100%}div[id^=GPlayerInfoContent]{max-height:200px;overflow-y:auto;padding-left:10px;padding-right:10px;position:relative} /*# sourceMappingURL=GpfExtOlMeasureLength.css.map*/ \ No newline at end of file diff --git a/dist/modules/GpfExtOlMeasureLength.js b/dist/modules/GpfExtOlMeasureLength.js index cf7d5838..e8340534 100644 --- a/dist/modules/GpfExtOlMeasureLength.js +++ b/dist/modules/GpfExtOlMeasureLength.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var e={562:(e,t,n)=>{"use strict";n.d(t,{A:()=>v});var r=n(7392),i=n.n(r),o=n(2940);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function l(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function s(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function d(e,t){for(var n=0;n{"use strict";var r=n(3391),i=n(562),o=n(1363),a=n(2938),l=n(9201),s=n(6736),c=n(5844);const d={configuration:{},isConfigLoaded:function(){if(this.configuration&&0!==Object.keys(this.configuration).length)return!0;var e="undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0!==n.g?n.g:{};return!!(e.Gp&&e.Gp.Config&&e.Gp.Config.layers&&0!==Object.keys(e.Gp.Config.layers).length)&&(this.configuration=e.Gp.Config,!0)}}; /**! diff --git a/dist/modules/GpfExtOlReverseGeocode.css b/dist/modules/GpfExtOlReverseGeocode.css index 2919b5fd..cfbb9276 100644 --- a/dist/modules/GpfExtOlReverseGeocode.css +++ b/dist/modules/GpfExtOlReverseGeocode.css @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */div[id^=GPreverseGeocoding-]{left:10px;top:180px}button[id^=GPshowReverseGeocodingPicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowReverseGeocodingPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GPreverseGeocodingPanel-]{height:inherit;left:34px;position:absolute;top:0}[id^=GPreverseGeocodingForm-]{max-height:270px;overflow-y:auto;padding-left:15px;padding-right:15px;padding-top:10px;position:relative}input[id^=GPreverseGeocodingSubmit-]{margin-bottom:15px;margin-top:5px}div[id^=GPreverseGeocodingResultsList-]{max-height:210px;overflow-y:auto;position:relative}div[id^=GPlayerSwitcher-]{right:8px;top:8px}div[id^=GPlayerSwitcher-] [draggable]{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;user-select:none;-khtml-user-drag:element;-webkit-user-drag:element}div[id^=GPlayerSwitcher-] input[type=checkbox]+button+dialog{max-height:0}input[id^=GPshowLayersList-]{display:none}button[id^=GPshowLayersListPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowLayersListPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}.position>div[id^=GPlayerSwitcher-]>dialog[id^=GPlayersList]{position:absolute}.position>div[id^=GPlayerSwitcher-]>button[id^=GPshowLayersListPicto-]{float:unset}dialog[id^=GPlayersList]{float:left;position:relative}button[id^=GPshowLayersListPicto-]{float:right}dialog[id^=GPlayersList]{border-bottom-right-radius:0;opacity:0}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{height:auto;max-height:inherit;opacity:1}.GPlayerCounter{background:#fff;border-radius:100px;color:#000;display:inline-block;font-size:12px;left:15px;line-height:1;min-width:15px;padding:2px 0 1px;position:relative;text-align:center;top:-15px}.GPlayerSwitcher_layer{border-bottom:1px dotted #ccc;overflow:hidden;position:relative;top:0}dialog[id^=GPlayersList] .GPlayerSwitcher_layer:last-child{border-bottom:none}.GPlayerAdvancedTools{display:block;max-height:0;opacity:0;transition:max-height .5s ease-out 0s,opacity .5s ease-out 0s}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{opacity:1}[id^=GPlayerInfoPanel]{left:unset;right:100%}div[id^=GPlayerInfoContent]{max-height:200px;overflow-y:auto;padding-left:10px;padding-right:10px;position:relative} /*# sourceMappingURL=GpfExtOlReverseGeocode.css.map*/ \ No newline at end of file diff --git a/dist/modules/GpfExtOlReverseGeocode.js b/dist/modules/GpfExtOlReverseGeocode.js index 2d00c568..b21415e5 100644 --- a/dist/modules/GpfExtOlReverseGeocode.js +++ b/dist/modules/GpfExtOlReverseGeocode.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var e={4582:(e,t)=>{"use strict";function r(e,t){return void 0===t&&(t=Object),t&&"function"==typeof t.getOwnPropertyDescriptors&&(e=t.create(null,t.getOwnPropertyDescriptors(e))),t&&"function"==typeof t.freeze?t.freeze(e):e}function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var o=r({allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,formnovalidate:!0,hidden:!0,ismap:!0,itemscope:!0,loop:!0,multiple:!0,muted:!0,nomodule:!0,novalidate:!0,open:!0,playsinline:!0,readonly:!0,required:!0,reversed:!0,selected:!0});var i=r({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});var s=r({script:!1,style:!1,textarea:!0,title:!0});function a(e){return e===l.HTML}var l=r({HTML:"text/html",XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),c=Object.keys(l).map((function(e){return l[e]}));var g=r({HTML:"http://www.w3.org/1999/xhtml",SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});t.assign=function(e,t){if(null===e||"object"!=typeof e)throw new TypeError("target is not an object");for(var r in t)n(t,r)&&(e[r]=t[r]);return e},t.find=function(e,t,r){if(void 0===r&&(r=Array.prototype),e&&"function"==typeof r.find)return r.find.call(e,t);for(var o=0;o-1},t.MIME_TYPE=l,t.NAMESPACE=g},5752:(e,t,r)=>{"use strict";var n=r(4582),o=r(4722),i=r(2983),s=r(6559),a=r(4466),l=o.DOMImplementation,c=n.hasDefaultHTMLNamespace,g=n.isHTMLMimeType,u=n.isValidMimeType,p=n.MIME_TYPE,d=n.NAMESPACE,h=i.ParseError,I=a.XMLReader;function A(e){return e.replace(/\r[\n\u0085]/g,"\n").replace(/[\r\u0085\u2028]/g,"\n")}function C(e){if(e=e||{locator:!0},this.assign=e.assign||n.assign,this.domHandler=e.domHandler||f,this.onError=e.onError||e.errorHandler,e.errorHandler&&"function"!=typeof e.errorHandler)throw new TypeError("errorHandler object is no longer supported, switch to onError!");e.errorHandler&&e.errorHandler("warning","The `errorHandler` option has been deprecated, use `onError` instead!",this),this.normalizeLineEndings=e.normalizeLineEndings||A,this.locator=!!e.locator,this.xmlns=this.assign(Object.create(null),e.xmlns)}function f(e){var t=e||{};this.mimeType=t.mimeType||p.XML_APPLICATION,this.defaultNamespace=t.defaultNamespace||null,this.cdata=!1,this.currentElement=void 0,this.doc=void 0,this.locator=void 0,this.onError=t.onError}function m(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function v(e,t,r){return"string"==typeof e?e.substr(t,r):e.length>=t+r||t?new java.lang.String(e,t,r)+"":e}function y(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}C.prototype.parseFromString=function(e,t){if(!u(t))throw new TypeError('DOMParser.parseFromString: the provided mimeType "'+t+'" is not valid.');var r=this.assign(Object.create(null),this.xmlns),o=s.XML_ENTITIES,i=r[""]||null;c(t)?(o=s.HTML_ENTITIES,i=d.HTML):t===p.XML_SVG_IMAGE&&(i=d.SVG),r[""]=i,r.xml=r.xml||d.XML;var a=new this.domHandler({mimeType:t,defaultNamespace:i,onError:this.onError}),l=this.locator?{}:void 0;this.locator&&a.setDocumentLocator(l);var g=new I;return g.errorHandler=a,g.domBuilder=a,!n.isHTMLMimeType(t)&&"string"!=typeof e&&g.errorHandler.fatalError("source is not a string"),g.parse(this.normalizeLineEndings(String(e)),r,o),a.doc.documentElement||g.errorHandler.fatalError("missing root element"),a.doc},f.prototype={startDocument:function(){var e=new l;this.doc=g(this.mimeType)?e.createHTMLDocument(!1):e.createDocument(this.defaultNamespace,"")},startElement:function(e,t,r,n){var o=this.doc,i=o.createElementNS(e,r||t),s=n.length;y(this,i),this.currentElement=i,this.locator&&m(this.locator,i);for(var a=0;a{"use strict";var n=r(4582),o=n.find,i=n.hasDefaultHTMLNamespace,s=n.hasOwn,a=n.isHTMLMimeType,l=n.isHTMLRawTextElement,c=n.isHTMLVoidElement,g=n.MIME_TYPE,u=n.NAMESPACE,p=Symbol(),d=r(2983),h=d.DOMException,I=d.DOMExceptionName,A=r(2763);function C(e){if(e!==p)throw new TypeError("Illegal constructor")}function f(e){return""!==e}function m(e,t){return s(e,t)||(e[t]=!0),e}function v(e){if(!e)return[];var t=function(e){return e?e.split(/[\t\n\f\r ]+/).filter(f):[]}(e);return Object.keys(t.reduce(m,{}))}function y(e){if(!A.QName_exact.test(e))throw new h(h.INVALID_CHARACTER_ERR,'invalid character in qualified name "'+e+'"')}function E(e,t){y(t),e=e||null;var r=null,o=t;if(t.indexOf(":")>=0){var i=t.split(":");r=i[0],o=i[1]}if(null!==r&&null===e)throw new h(h.NAMESPACE_ERR,"prefix is non-null and namespace is null");if("xml"===r&&e!==n.NAMESPACE.XML)throw new h(h.NAMESPACE_ERR,'prefix is "xml" and namespace is not the XML namespace');if(("xmlns"===r||"xmlns"===t)&&e!==n.NAMESPACE.XMLNS)throw new h(h.NAMESPACE_ERR,'either qualifiedName or prefix is "xmlns" and namespace is not the XMLNS namespace');if(e===n.NAMESPACE.XMLNS&&"xmlns"!==r&&"xmlns"!==t)throw new h(h.NAMESPACE_ERR,'namespace is the XMLNS namespace and neither qualifiedName nor prefix is "xmlns"');return[e,r,o]}function b(e,t){for(var r in e)s(e,r)&&(t[r]=e[r])}function w(e,t){var r=e.prototype;if(!(r instanceof t)){function n(){}n.prototype=t.prototype,b(r,n=new n),e.prototype=r=n}r.constructor!=e&&("function"!=typeof e&&console.error("unknown Class:"+e),r.constructor=e)}var S={},R=S.ELEMENT_NODE=1,_=S.ATTRIBUTE_NODE=2,T=S.TEXT_NODE=3,N=S.CDATA_SECTION_NODE=4,P=S.ENTITY_REFERENCE_NODE=5,O=S.ENTITY_NODE=6,D=S.PROCESSING_INSTRUCTION_NODE=7,L=S.COMMENT_NODE=8,x=S.DOCUMENT_NODE=9,M=S.DOCUMENT_TYPE_NODE=10,G=S.DOCUMENT_FRAGMENT_NODE=11,k=S.NOTATION_NODE=12,U=n.freeze({DOCUMENT_POSITION_DISCONNECTED:1,DOCUMENT_POSITION_PRECEDING:2,DOCUMENT_POSITION_FOLLOWING:4,DOCUMENT_POSITION_CONTAINS:8,DOCUMENT_POSITION_CONTAINED_BY:16,DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:32});function F(e){for(var t=[];e.parentNode||e.ownerElement;)e=e.parentNode||e.ownerElement,t.unshift(e);return t}function q(e,t){if(t.length=0){for(var o=t.length-1;n<=o;)t[n]=t[++n];if(t.length=o,e){var i=e.ownerDocument;i&&ee(i,e,r),r.ownerElement=null}}}function W(){}function K(e){C(e)}function J(e){return("<"==e?"<":">"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function Q(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(Q(e,t))return!0}while(e=e.nextSibling)}function $(e,t){C(e);var r=t||{};this.ownerDocument=this,this.contentType=r.contentType||g.XML_APPLICATION,this.type=a(this.contentType)?"html":"xml"}function ee(e,t,r,n){e&&e._inc++,r.namespaceURI===u.XMLNS&&delete t._nsMap[r.prefix?r.localName:""]}function te(e,t,r){if(e&&e._inc){e._inc++;var n=t.childNodes;if(r&&!r.nextSibling)n[n.length++]=r;else{for(var o=t.firstChild,i=0;o;)n[i++]=o,o=o.nextSibling;n.length=i,delete n[n.length]}}}function re(e,t){if(e!==t.parentNode)throw new h(h.NOT_FOUND_ERR,"child's parent is not parent");var r=t.previousSibling,n=t.nextSibling;return r?r.nextSibling=n:e.firstChild=n,n?n.previousSibling=r:e.lastChild=r,te(e.ownerDocument,e),t.parentNode=null,t.previousSibling=null,t.nextSibling=null,t}function ne(e){return e&&e.nodeType===K.DOCUMENT_TYPE_NODE}function oe(e){return e&&e.nodeType===K.ELEMENT_NODE}function ie(e){return e&&e.nodeType===K.TEXT_NODE}function se(e,t){var r=e.childNodes||[];if(o(r,oe)||ne(t))return!1;var n=o(r,ne);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function ae(e,t){var r=e.childNodes||[];if(o(r,(function(e){return oe(e)&&e!==t})))return!1;var n=o(r,ne);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function le(e,t,r){if(!function(e){return e&&(e.nodeType===K.DOCUMENT_NODE||e.nodeType===K.DOCUMENT_FRAGMENT_NODE||e.nodeType===K.ELEMENT_NODE)}(e))throw new h(h.HIERARCHY_REQUEST_ERR,"Unexpected parent node type "+e.nodeType);if(r&&r.parentNode!==e)throw new h(h.NOT_FOUND_ERR,"child not in parent");if(!function(e){return e&&(e.nodeType===K.CDATA_SECTION_NODE||e.nodeType===K.COMMENT_NODE||e.nodeType===K.DOCUMENT_FRAGMENT_NODE||e.nodeType===K.DOCUMENT_TYPE_NODE||e.nodeType===K.ELEMENT_NODE||e.nodeType===K.PROCESSING_INSTRUCTION_NODE||e.nodeType===K.TEXT_NODE)}(t)||ne(t)&&e.nodeType!==K.DOCUMENT_NODE)throw new h(h.HIERARCHY_REQUEST_ERR,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function ce(e,t,r){var n=e.childNodes||[],i=t.childNodes||[];if(t.nodeType===K.DOCUMENT_FRAGMENT_NODE){var s=i.filter(oe);if(s.length>1||o(i,ie))throw new h(h.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===s.length&&!se(e,r))throw new h(h.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!se(e,r))throw new h(h.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(ne(t)){if(o(n,ne))throw new h(h.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var a=o(n,oe);if(r&&n.indexOf(a)1||o(i,ie))throw new h(h.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===s.length&&!ae(e,r))throw new h(h.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!ae(e,r))throw new h(h.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(ne(t)){function l(e){return ne(e)&&e!==r}if(o(n,l))throw new h(h.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var a=o(n,oe);if(r&&n.indexOf(a)=0;I--){if(""===(C=n[I]).prefix&&C.namespace===e.namespaceURI){d=C.namespace;break}}if(d!==e.namespaceURI)for(I=n.length-1;I>=0;I--){var C;if((C=n[I]).namespace===e.namespaceURI){C.prefix&&(p=C.prefix+":"+g);break}}}t.push("<",p);for(var f=0;f");else{if(t.push(">"),o&&l(g))for(;a;)a.data?t.push(a.data):Te(a,t,r,n.slice()),a=a.nextSibling;else for(;a;)Te(a,t,r,n.slice()),a=a.nextSibling;t.push("")}return;case x:case G:for(a=e.firstChild;a;)Te(a,t,r,n.slice()),a=a.nextSibling;return;case _:return _e(t,e.name,e.value);case T:return t.push(e.data.replace(/[<&>]/g,J));case N:return t.push(A.CDATA_START,e.data,A.CDATA_END);case L:return t.push(A.COMMENT_START,e.data,A.COMMENT_END);case M:var b=e.publicId,w=e.systemId;return t.push(A.DOCTYPE_DECL_START," ",e.name),b?(t.push(" ",A.PUBLIC," ",b),w&&"."!==w&&t.push(" ",w)):w&&"."!==w&&t.push(" ",A.SYSTEM," ",w),e.internalSubset&&t.push(" [",e.internalSubset,"]"),void t.push(">");case D:return t.push("");case P:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function Ne(e,t,r){var n;switch(t.nodeType){case R:(n=t.cloneNode(!1)).ownerDocument=e;case G:break;case _:r=!0}if(n||(n=t.cloneNode(!1)),n.ownerDocument=e,n.parentNode=null,r)for(var o=t.firstChild;o;)n.appendChild(Ne(e,o,r)),o=o.nextSibling;return n}function Pe(e,t,r){var n=new t.constructor(p);for(var o in t)if(s(t,o)){var i=t[o];"object"!=typeof i&&i!=n[o]&&(n[o]=i)}switch(t.childNodes&&(n.childNodes=new H),n.ownerDocument=e,n.nodeType){case R:var a=t.attributes,l=n.attributes=new j,c=a.length;l._ownerElement=n;for(var g=0;g=0&&eB(t.ownerDocument)?U.DOCUMENT_POSITION_FOLLOWING:U.DOCUMENT_POSITION_PRECEDING);var a=F(t),l=F(r);if(!n&&l.indexOf(t)>=0||o&&t===r)return U.DOCUMENT_POSITION_CONTAINS+U.DOCUMENT_POSITION_PRECEDING;if(!o&&a.indexOf(r)>=0||n&&t===r)return U.DOCUMENT_POSITION_CONTAINED_BY+U.DOCUMENT_POSITION_FOLLOWING;var c=q(l,a);for(var g in c.childNodes){var u=c.childNodes[g];if(u===r)return U.DOCUMENT_POSITION_FOLLOWING;if(u===t)return U.DOCUMENT_POSITION_PRECEDING;if(l.indexOf(u)>=0)return U.DOCUMENT_POSITION_FOLLOWING;if(a.indexOf(u)>=0)return U.DOCUMENT_POSITION_PRECEDING}return 0}},b(S,K),b(S,K.prototype),b(U,K),b(U,K.prototype),$.prototype={implementation:null,nodeName:"#document",nodeType:x,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType===G){for(var r=e.firstChild;r;){var n=r.nextSibling;this.insertBefore(r,t),r=n}return e}return ue(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===R&&(this.documentElement=e),e},removeChild:function(e){var t=re(this,e);return t===this.documentElement&&(this.documentElement=null),t},replaceChild:function(e,t){ue(this,e,t,ge),e.ownerDocument=this,t&&this.removeChild(t),oe(e)&&(this.documentElement=e)},importNode:function(e,t){return Ne(this,e,t)},getElementById:function(e){var t=null;return Q(this.documentElement,(function(r){if(r.nodeType==R&&r.getAttribute("id")==e)return t=r,!0})),t},createElement:function(e){var t=new pe(p);return t.ownerDocument=this,"html"===this.type&&(e=e.toLowerCase()),i(this.contentType)&&(t.namespaceURI=u.HTML),t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new H,(t.attributes=new j)._ownerElement=t,t},createDocumentFragment:function(){var e=new Ee(p);return e.ownerDocument=this,e.childNodes=new H,e},createTextNode:function(e){var t=new Ie(p);return t.ownerDocument=this,t.childNodes=new H,t.appendData(e),t},createComment:function(e){var t=new Ae(p);return t.ownerDocument=this,t.childNodes=new H,t.appendData(e),t},createCDATASection:function(e){var t=new Ce(p);return t.ownerDocument=this,t.childNodes=new H,t.appendData(e),t},createProcessingInstruction:function(e,t){var r=new be(p);return r.ownerDocument=this,r.childNodes=new H,r.nodeName=r.target=e,r.nodeValue=r.data=t,r},createAttribute:function(e){if(!A.QName_exact.test(e))throw new h(h.INVALID_CHARACTER_ERR,'invalid character in name "'+e+'"');return"html"===this.type&&(e=e.toLowerCase()),this._createAttribute(e)},_createAttribute:function(e){var t=new de(p);return t.ownerDocument=this,t.childNodes=new H,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){if(!A.Name.test(e))throw new h(h.INVALID_CHARACTER_ERR,'not a valid xml name "'+e+'"');if("html"===this.type)throw new h("document is an html document",I.NotSupportedError);var t=new ye(p);return t.ownerDocument=this,t.childNodes=new H,t.nodeName=e,t},createElementNS:function(e,t){var r=E(e,t),n=new pe(p),o=n.attributes=new j;return n.childNodes=new H,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=r[0],n.prefix=r[1],n.localName=r[2],o._ownerElement=n,n},createAttributeNS:function(e,t){var r=E(e,t),n=new de(p);return n.ownerDocument=this,n.childNodes=new H,n.nodeName=t,n.name=t,n.specified=!0,n.namespaceURI=r[0],n.prefix=r[1],n.localName=r[2],n}},w($,K),pe.prototype={nodeType:R,attributes:null,getQualifiedName:function(){return this.prefix?this.prefix+":"+this.localName:this.localName},_isInHTMLDocumentAndNamespace:function(){return"html"===this.ownerDocument.type&&this.namespaceURI===u.HTML},hasAttribute:function(e){return!!this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t?t.value:null},getAttributeNode:function(e){return this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase()),this.attributes.getNamedItem(e)},setAttribute:function(e,t){this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase());var r=this.getAttributeNode(e);r?r.value=r.nodeValue=""+t:((r=this.ownerDocument._createAttribute(e)).value=r.nodeValue=""+t,this.setAttributeNode(r))},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);r&&this.removeAttributeNode(r)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);return r?r.value:null},setAttributeNS:function(e,t,r){var n=E(e,t)[2],o=this.getAttributeNodeNS(e,n);o?o.value=o.nodeValue=""+r:((o=this.ownerDocument.createAttributeNS(e,t)).value=o.nodeValue=""+r,this.setAttributeNode(o))},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByClassName:function(e){var t=v(e);return new V(this,(function(r){var n=[];return t.length>0&&Q(r,(function(o){if(o!==r&&o.nodeType===R){var i=o.getAttribute("class");if(i){var s=e===i;if(!s){var a=v(i);s=t.every((l=a,function(e){return l&&-1!==l.indexOf(e)}))}s&&n.push(o)}}var l})),n}))},getElementsByTagName:function(e){var t="html"===(this.nodeType===x?this:this.ownerDocument).type,r=e.toLowerCase();return new V(this,(function(n){var o=[];return Q(n,(function(i){i!==n&&i.nodeType===R&&(("*"===e||i.getQualifiedName()===(t&&i.namespaceURI===u.HTML?r:e))&&o.push(i))})),o}))},getElementsByTagNameNS:function(e,t){return new V(this,(function(r){var n=[];return Q(r,(function(o){o===r||o.nodeType!==R||"*"!==e&&o.namespaceURI!==e||"*"!==t&&o.localName!=t||n.push(o)})),n}))}},$.prototype.getElementsByClassName=pe.prototype.getElementsByClassName,$.prototype.getElementsByTagName=pe.prototype.getElementsByTagName,$.prototype.getElementsByTagNameNS=pe.prototype.getElementsByTagNameNS,w(pe,K),de.prototype.nodeType=_,w(de,K),he.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,r){r=this.data.substring(0,e)+r+this.data.substring(e+t),this.nodeValue=this.data=r,this.length=r.length}},w(he,K),Ie.prototype={nodeName:"#text",nodeType:T,splitText:function(e){var t=this.data,r=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var n=this.ownerDocument.createTextNode(r);return this.parentNode&&this.parentNode.insertBefore(n,this.nextSibling),n}},w(Ie,he),Ae.prototype={nodeName:"#comment",nodeType:L},w(Ae,he),Ce.prototype={nodeName:"#cdata-section",nodeType:N},w(Ce,Ie),fe.prototype.nodeType=M,w(fe,K),me.prototype.nodeType=k,w(me,K),ve.prototype.nodeType=O,w(ve,K),ye.prototype.nodeType=P,w(ye,K),Ee.prototype.nodeName="#document-fragment",Ee.prototype.nodeType=G,w(Ee,K),be.prototype.nodeType=D,w(be,he),we.prototype.serializeToString=function(e,t){return Se.call(e,t)},K.prototype.toString=Se;try{if(Object.defineProperty){function De(e){switch(e.nodeType){case R:case G:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(De(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(V.prototype,"length",{get:function(){return Y(this),this.$$length}}),Object.defineProperty(K.prototype,"textContent",{get:function(){return De(this)},set:function(e){switch(this.nodeType){case R:case G:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),Oe=function(e,t,r){e["$$"+t]=r}}}catch(Le){}t._updateLiveList=Y,t.Attr=de,t.CDATASection=Ce,t.CharacterData=he,t.Comment=Ae,t.Document=$,t.DocumentFragment=Ee,t.DocumentType=fe,t.DOMImplementation=W,t.Element=pe,t.Entity=ve,t.EntityReference=ye,t.LiveNodeList=V,t.NamedNodeMap=j,t.Node=K,t.NodeList=H,t.Notation=me,t.Text=Ie,t.ProcessingInstruction=be,t.XMLSerializer=we},6559:(e,t,r)=>{"use strict";var n=r(4582).freeze;t.XML_ENTITIES=n({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),t.HTML_ENTITIES=n({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),t.entityMap=t.HTML_ENTITIES},2983:(e,t,r)=>{"use strict";function n(e,t){e.prototype=Object.create(Error.prototype,{constructor:{value:e},name:{value:e.name,enumerable:!0,writable:t}})}var o=r(4582).freeze({Error:"Error",IndexSizeError:"IndexSizeError",DomstringSizeError:"DomstringSizeError",HierarchyRequestError:"HierarchyRequestError",WrongDocumentError:"WrongDocumentError",InvalidCharacterError:"InvalidCharacterError",NoDataAllowedError:"NoDataAllowedError",NoModificationAllowedError:"NoModificationAllowedError",NotFoundError:"NotFoundError",NotSupportedError:"NotSupportedError",InUseAttributeError:"InUseAttributeError",InvalidStateError:"InvalidStateError",SyntaxError:"SyntaxError",InvalidModificationError:"InvalidModificationError",NamespaceError:"NamespaceError",InvalidAccessError:"InvalidAccessError",ValidationError:"ValidationError",TypeMismatchError:"TypeMismatchError",SecurityError:"SecurityError",NetworkError:"NetworkError",AbortError:"AbortError",URLMismatchError:"URLMismatchError",QuotaExceededError:"QuotaExceededError",TimeoutError:"TimeoutError",InvalidNodeTypeError:"InvalidNodeTypeError",DataCloneError:"DataCloneError",EncodingError:"EncodingError",NotReadableError:"NotReadableError",UnknownError:"UnknownError",ConstraintError:"ConstraintError",DataError:"DataError",TransactionInactiveError:"TransactionInactiveError",ReadOnlyError:"ReadOnlyError",VersionError:"VersionError",OperationError:"OperationError",NotAllowedError:"NotAllowedError",OptOutError:"OptOutError"}),i=Object.keys(o);function s(e){return"number"==typeof e&&e>=1&&e<=25}function a(e,t){var r;s(e)?(this.name=i[e],this.message=t||""):(this.message=e,this.name="string"==typeof(r=t)&&r.substring(r.length-o.Error.length)===o.Error?t:o.Error),Error.captureStackTrace&&Error.captureStackTrace(this,a)}n(a,!0),Object.defineProperties(a.prototype,{code:{enumerable:!0,get:function(){var e=i.indexOf(this.name);return s(e)?e:0}}});for(var l={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25},c=Object.entries(l),g=0;g{"use strict";function r(e){try{"function"!=typeof e&&(e=RegExp);var t=new e("𝌆","u").exec("𝌆");return!!t&&2===t[0].length}catch(e){}return!1}var n=r();function o(e){if("["!==e.source[0])throw new Error(e+" can not be used with chars");return e.source.slice(1,e.source.lastIndexOf("]"))}function i(e,t){if("["!==e.source[0])throw new Error("/"+e.source+"/ can not be used with chars_without");if(!t||"string"!=typeof t)throw new Error(JSON.stringify(t)+" is not a valid search");if(-1===e.source.indexOf(t))throw new Error('"'+t+'" is not is /'+e.source+"/");if("-"===t&&1!==e.source.indexOf(t))throw new Error('"'+t+'" is not at the first postion of /'+e.source+"/");return new RegExp(e.source.replace(t,""),n?"u":"")}function s(e){var t=this;return new RegExp(Array.prototype.slice.call(arguments).map((function(e){var r="string"==typeof e;if(r&&void 0===t&&"|"===e)throw new Error("use regg instead of reg to wrap expressions with `|`!");return r?e:e.source})).join(""),n?"mu":"m")}function a(e){if(0===arguments.length)throw new Error("no parameters provided");return s.apply(a,["(?:"].concat(Array.prototype.slice.call(arguments),[")"]))}var l=/[-\x09\x0A\x0D\x20-\x2C\x2E-\uD7FF\uE000-\uFFFD]/;n&&(l=s("[",o(l),"\\u{10000}-\\u{10FFFF}","]"));var c=/[\x20\x09\x0D\x0A]/,g=o(c),u=s(c,"+"),p=s(c,"*"),d=/[:_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;n&&(d=s("[",o(d),"\\u{10000}-\\u{10FFFF}","]"));var h=s("[",o(d),o(/[-.0-9\xB7]/),o(/[\u0300-\u036F\u203F-\u2040]/),"]"),I=s(d,h,"*"),A=s(h,"+"),C=s("&",I,";"),f=a(/&#[0-9]+;|&#x[0-9a-fA-F]+;/),m=a(C,"|",f),v=s("%",I,";"),y=a(s('"',a(/[^%&"]/,"|",v,"|",m),"*",'"'),"|",s("'",a(/[^%&']/,"|",v,"|",m),"*","'")),E=a('"',a(/[^<&"]/,"|",m),"*",'"',"|","'",a(/[^<&']/,"|",m),"*","'"),b=s(i(d,":"),i(h,":"),"*"),w=s(b,a(":",b),"?"),S=s("^",w,"$"),R=s("(",w,")"),_=a(/"[^"]*"|'[^']*'/),T=s(/^<\?/,"(",I,")",a(u,"(",l,"*?)"),"?",/\?>/),N=/[\x20\x0D\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/,P=a('"',N,'*"',"|","'",i(N,"'"),"*'"),O="\x3c!--",D=s(O,a(i(l,"-"),"|",s("-",i(l,"-"))),"*","--\x3e"),L="#PCDATA",x=a(s(/\(/,p,L,a(p,/\|/,p,w),"*",p,/\)\*/),"|",s(/\(/,p,L,p,/\)/)),M=a("EMPTY","|","ANY","|",x,"|",s(/\([^>]+\)/,/[?*+]?/)),G=s(""),k=s("NOTATION",u,/\(/,p,I,a(p,/\|/,p,I),"*",p,/\)/),U=s(/\(/,p,A,a(p,/\|/,p,A),"*",p,/\)/),F=a(k,"|",U),q=a(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/,"|",F),B=a(/#REQUIRED|#IMPLIED/,"|",a(a("#FIXED",u),"?",E)),H=s(""),V="SYSTEM",Y="PUBLIC",j=a(a(V,u,_),"|",a(Y,u,P,u,_)),z=s("^",a(a(V,u,"(?",_,")"),"|",a(Y,u,"(?",P,")",u,"(?",_,")"))),Z=a(u,"NDATA",u,I),X=""),K=a(y,"|",j),J=a(W,"|",s(X,u,"%",u,I,u,K,p,">")),Q=s(Y,u,P),$=s(""),ee=s(p,"=",p),te=/1[.]\d+/,re=s(u,"version",ee,a("'",te,"'","|",'"',te,'"')),ne=/[A-Za-z][-A-Za-z0-9._]*/,oe=s(/^<\?xml/,re,a(u,"encoding",ee,a('"',ne,'"',"|","'",ne,"'")),"?",a(u,"standalone",ee,a("'",a("yes","|","no"),"'","|",'"',a("yes","|","no"),'"')),"?",p,/\?>/),ie=s(l,"*?",/\]\]>/),se=s(/",t.CDSect=se,t.Char=l,t.Comment=D,t.COMMENT_START=O,t.COMMENT_END="--\x3e",t.DOCTYPE_DECL_START="{"use strict";var n=r(4582);n.assign,n.hasDefaultHTMLNamespace,n.isHTMLMimeType,n.isValidMimeType,n.MIME_TYPE,n.NAMESPACE;var o=r(2983);o.DOMException,o.DOMExceptionName,o.ExceptionCode,o.ParseError;var i=r(4722);i.Attr,i.CDATASection,i.CharacterData,i.Comment,i.Document,i.DocumentFragment,i.DocumentType,i.DOMImplementation,i.Element,i.Entity,i.EntityReference,i.LiveNodeList,i.NamedNodeMap,i.Node,i.NodeList,i.Notation,i.ProcessingInstruction,i.Text,i.XMLSerializer;var s=r(5752);t.S4=s.DOMParser,s.onErrorStopParsing,s.onWarningStopParsing},4466:(e,t,r)=>{"use strict";var n=r(4582),o=r(2763),i=r(2983),s=n.isHTMLEscapableRawTextElement,a=n.isHTMLMimeType,l=n.isHTMLRawTextElement,c=n.hasOwn,g=n.NAMESPACE,u=i.ParseError,p=i.DOMException;function d(){}d.prototype={parse:function(e,t,r){var i=this.domBuilder;i.startDocument(),m(t,t=Object.create(null)),function(e,t,r,i,s){var l=a(i.mimeType);e.indexOf(o.UNICODE_REPLACEMENT_CHARACTER)>=0&&s.warning("Unicode replacement character detected, source encoding issues?");function g(e){if(e>65535){var t=55296+((e-=65536)>>10),r=56320+(1023&e);return String.fromCharCode(t,r)}return String.fromCharCode(e)}function d(e){var t=";"===e[e.length-1]?e:e+";";if(!l&&t!==e)return s.error("EntityRef: expecting ;"),e;var n=o.Reference.exec(t);if(!n||n[0].length!==t.length)return s.error("entity not matching Reference production: "+e),e;var i=t.slice(1,-1);return c(r,i)?r[i]:"#"===i.charAt(0)?g(parseInt(i.substr(1).replace("x","0x"))):(s.error("entity not found:"+e),e)}function m(t){if(t>P){var r=e.substring(P,t).replace(h,d);_&&v(P),i.characters(r,0,t-P),P=t}}function v(t,r){for(;t>=S&&(r=R.exec(e));)w=r.index,S=w+r[0].length,_.lineNumber++;_.columnNumber=t-w+1}var w=0,S=0,R=/.*(?:\r\n?|\n)|.*$/g,_=i.locator,T=[{currentNSMap:t}],N=[],P=0;for(;;){try{var O=e.indexOf("<",P);if(O<0){if(!l&&N.length>0)return s.fatalError("unclosed xml tag(s): "+N.join(", "));if(!e.substring(P).match(/^\s*$/)){var D=i.doc,L=D.createTextNode(e.substr(P));if(D.documentElement)return s.error("Extra content at the end of the document");D.appendChild(L),i.currentElement=L}return}if(O>P){var x=e.substring(P,O);l||0!==N.length||(x=x.replace(new RegExp(o.S_OPT.source,"g"),""))&&s.error("Unexpected content outside root element: '"+x+"'"),m(O)}switch(e.charAt(O+1)){case"/":var M=e.indexOf(">",O+2),G=e.substring(O+2,M>0?M:void 0);if(!G)return s.fatalError("end tag name missing");var k=M>0&&o.reg("^",o.QName_group,o.S_OPT,"$").exec(G);if(!k)return s.fatalError('end tag name contains invalid characters: "'+G+'"');if(!i.currentElement&&!i.doc.documentElement)return;var U=N[N.length-1]||i.currentElement.tagName||i.doc.documentElement.tagName||"";if(U!==k[1]){var F=k[1].toLowerCase();if(!l||U.toLowerCase()!==F)return s.fatalError('Opening and ending tag mismatch: "'+U+'" != "'+G+'"')}var q=T.pop();N.pop();var B=q.localNSMap;if(i.endElement(q.uri,q.localName,U),B)for(var H in B)c(B,H)&&i.endPrefixMapping(H);M++;break;case"?":_&&v(O),M=E(e,O,i,s);break;case"!":_&&v(O),M=y(e,O,i,s,l);break;default:_&&v(O);var V=new b,Y=T[T.length-1].currentNSMap,j=(M=A(e,O,V,Y,d,s,l),V.length);if(V.closed||(l&&n.isHTMLVoidElement(V.tagName)?V.closed=!0:N.push(V.tagName)),_&&j){for(var z=I(_,{}),Z=0;ZP?P=M:m(Math.max(O,P)+1)}}(e,t,r,i,this.errorHandler),i.endDocument()}};var h=/&#?\w+;?/g;function I(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function A(e,t,r,n,o,i,s){function a(e,t,n){return c(r.attributeNames,e)?i.fatalError("Attribute "+e+" redefined"):!s&&t.indexOf("<")>=0?i.fatalError("Unescaped '<' not allowed in attributes values"):void r.addValue(e,t.replace(/[\t\n\r]/g," ").replace(h,o),n)}for(var l,g=++t,u=0;;){var p=e.charAt(g);switch(p){case"=":if(1===u)l=e.slice(t,g),u=3;else{if(2!==u)throw new Error("attribute equal must after attrName");u=3}break;case"'":case'"':if(3===u||1===u){if(1===u&&(i.warning('attribute value must after "="'),l=e.slice(t,g)),t=g+1,!((g=e.indexOf(p,t))>0))throw new Error("attribute value no end '"+p+"' match");a(l,d=e.slice(t,g),t-1),u=5}else{if(4!=u)throw new Error('attribute value must after "="');a(l,d=e.slice(t,g),t),i.warning('attribute "'+l+'" missed start quot('+p+")!!"),t=g+1,u=5}break;case"/":switch(u){case 0:r.setTagName(e.slice(t,g));case 5:case 6:case 7:u=7,r.closed=!0;case 4:case 1:break;case 2:r.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return i.error("unexpected end of input"),0==u&&r.setTagName(e.slice(t,g)),g;case">":switch(u){case 0:r.setTagName(e.slice(t,g));case 5:case 6:case 7:break;case 4:case 1:"/"===(d=e.slice(t,g)).slice(-1)&&(r.closed=!0,d=d.slice(0,-1));case 2:2===u&&(d=l),4==u?(i.warning('attribute "'+d+'" missed quot(")!'),a(l,d,t)):(s||i.warning('attribute "'+d+'" missed value!! "'+d+'" instead!!'),a(d,d,t));break;case 3:if(!s)return i.fatalError("AttValue: ' or \" expected")}return g;case"€":p=" ";default:if(p<=" ")switch(u){case 0:r.setTagName(e.slice(t,g)),u=6;break;case 1:l=e.slice(t,g),u=2;break;case 4:var d=e.slice(t,g);i.warning('attribute "'+d+'" missed quot(")!!'),a(l,d,t);case 5:u=6}else switch(u){case 2:s||i.warning('attribute "'+l+'" missed value!! "'+l+'" instead2!!'),a(l,l,t),t=g,u=1;break;case 5:i.warning('attribute space is required"'+l+'"!!');case 6:u=1,t=g;break;case 3:u=4,t=g;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}g++}}function C(e,t,r){for(var n=e.tagName,o=null,i=e.length;i--;){var s=e[i],a=s.qName,l=s.value;if((h=a.indexOf(":"))>0)var u=s.prefix=a.slice(0,h),p=a.slice(h+1),d="xmlns"===u&&p;else p=a,u=null,d="xmlns"===a&&"";s.localName=p,!1!==d&&(null==o&&(o=Object.create(null),m(r,r=Object.create(null))),r[d]=o[d]=l,s.uri=g.XMLNS,t.startPrefixMapping(d,l))}for(i=e.length;i--;)(s=e[i]).prefix&&("xml"===s.prefix&&(s.uri=g.XML),"xmlns"!==s.prefix&&(s.uri=r[s.prefix]));var h;(h=n.indexOf(":"))>0?(u=e.prefix=n.slice(0,h),p=e.localName=n.slice(h+1)):(u=null,p=e.localName=n);var I=e.uri=r[u||""];if(t.startElement(I,p,n,e),!e.closed)return e.currentNSMap=r,e.localNSMap=o,!0;if(t.endElement(I,p,n),o)for(u in o)c(o,u)&&t.endPrefixMapping(u)}function f(e,t,r,n,o){var i=s(r);if(i||l(r)){var a=e.indexOf("",t),c=e.substring(t+1,a);return i&&(c=c.replace(h,n)),o.characters(c,0,c.length),a}return t+1}function m(e,t){for(var r in e)c(e,r)&&(t[r]=e[r])}function v(e,t){var r=t;function n(t){return t=t||0,e.charAt(r+t)}function i(e){r+=e=e||1}function s(){return e.substring(r)}return{char:n,getIndex:function(){return r},getMatch:function(e){var t=o.reg("^",e).exec(s());return t?(i(t[0].length),t[0]):null},getSource:function(){return e},skip:i,skipBlanks:function(){for(var t=0;r"!==s.char()?n.fatalError("doctype not terminated with > at position "+s.getIndex()):(s.skip(1),r.startDTD(c.name,c.publicId,c.systemId,c.internalSubset),r.endDTD(),s.getIndex());default:return n.fatalError('Not well-formed XML starting with "0)return n.fatalError("processing instruction at position "+t+" is an xml declaration which is only at the start of the document");if(!o.XMLDecl.test(e.substring(t)))return n.fatalError("xml declaration is not well-formed")}return r.processingInstruction(i[1],i[2]),t+i[0].length}function b(){this.attributeNames=Object.create(null)}b.prototype={setTagName:function(e){if(!o.QName_exact.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,r){if(!o.QName_exact.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:r}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=d,t.parseUtils=v,t.parseDoctypeCommentOrCData=y},562:(e,t,r)=>{"use strict";r.d(t,{A:()=>C});var n=r(7392),o=r.n(n),i=r(2940);function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function a(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function l(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function g(e,t){for(var r=0;r{"use strict";r.d(t,{default:()=>Tt});var n=r(3391),o=r(562),i=r(1363),s=r(2938),a=r(9201),l=r(6736),c=r(5844);const g={configuration:{},isConfigLoaded:function(){if(this.configuration&&0!==Object.keys(this.configuration).length)return!0;var e="undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0!==r.g?r.g:{};return!!(e.Gp&&e.Gp.Config&&e.Gp.Config.layers&&0!==Object.keys(e.Gp.Config.layers).length)&&(this.configuration=e.Gp.Config,!0)}}; /**! diff --git a/dist/modules/GpfExtOlRoute.css b/dist/modules/GpfExtOlRoute.css index ef1d7661..1fc7fc94 100644 --- a/dist/modules/GpfExtOlRoute.css +++ b/dist/modules/GpfExtOlRoute.css @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */div[id^=GProute-]{left:10px;top:100px}button[id^=GPshowRoutePicto-][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowRoutePicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}[id^=GProutePanel-]{height:inherit;left:34px;position:absolute;top:0}button[id^=GProuteReset]:hover{opacity:1}form[id^=GProuteForm]>.GPlocationStageFlexInput{margin-top:5px}form[id^=GProuteForm]>.GPlocationStageFlexInputHidden{margin-top:0}form[id^=GProuteForm].GProuteFormMini .GPlocationStageFlexInput:first-child{margin-top:5px}label.GProuteOriginPointerImg[id*=GProuteOriginPointerImg]{border-bottom-right-radius:3px;border-right:1px solid #999;border-top-right-radius:3px;width:28px}input[id*=GProuteOriginPointer]+.GProuteOriginPointerImg{background-position:-1px -1px}input[id*=GProuteOriginPointer]:checked+.GProuteOriginPointerImg{background-position:-29px -1px}.GProuteStageRemove,div[id^=GProuteStageAdd]{border:none;cursor:pointer;width:28px}.GProuteFormMini{overflow:hidden;-webkit-transform:translateY(-5px);transform:translateY(-5px)}.GProuteFormMini .GPpanelFooter,.GProuteFormMini .GProuteStageRemove,.GProuteFormMini button[id^=GPshowRouteExclusionsPicto],.GProuteFormMini button[id^=GPshowRouteExclusions][aria-pressed=true]+div[id^=GProuteExclusions],.GProuteFormMini div[id^=GProuteModeChoice],.GProuteFormMini div[id^=GProuteStageAdd],.GProuteFormMini>:not(.selected){display:none}.GProuteStageRemove{background-position:-84px 0}div[id^=GProuteStageAdd]{background-position:-56px 0}div[id^=GProuteModeChoice]{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around;margin:15px 0}div[id^=GProuteTransportChoice]>.GProuteTransportChoice{display:inline-flex}button[id^=GPshowRouteExclusions]{border:unset;bottom:unset;position:absolute;right:0;transition:all .5s ease-out 0s}button[id^=GPshowRouteExclusions][aria-pressed=true]{transform:translateY(-100%) rotateX(180deg)}button[id^=GPshowRouteExclusions][aria-pressed=false]+div[id^=GProuteExclusions]{margin-bottom:0;max-height:0;opacity:0}button[id^=GPshowRouteExclusions][aria-pressed=true]+div[id^=GProuteExclusions]{display:block;margin-bottom:15px;max-height:76px;opacity:1}div[id^=GProuteExclusions]{overflow:hidden;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s,margin .3s ease-in-out .25s}div[id^=GProuteResultsPanel]{padding:15px}div[id^=GProuteResults-]{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;-webkit-justify-content:space-between;-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-align-items:center;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:10px}div[id^=GProuteResultsNew]:hover{opacity:1}[class*=GPlocationPoint]{position:relative}div[id^=GPlocationAutoCompleteResult]{background-color:var(--background-default-grey);border:1px solid var(--grey-900-175);border-top:none;left:0;max-height:140px;overflow-y:auto;top:45px}div[id^=GPlocationAutoCompleteList]{position:absolute;width:calc(100% - 56px);z-index:2}div[id^=GPlayerSwitcher-]{right:8px;top:8px}div[id^=GPlayerSwitcher-] [draggable]{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;user-select:none;-khtml-user-drag:element;-webkit-user-drag:element}div[id^=GPlayerSwitcher-] input[type=checkbox]+button+dialog{max-height:0}input[id^=GPshowLayersList-]{display:none}button[id^=GPshowLayersListPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowLayersListPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;opacity:100%;visibility:visible}.position>div[id^=GPlayerSwitcher-]>dialog[id^=GPlayersList]{position:absolute}.position>div[id^=GPlayerSwitcher-]>button[id^=GPshowLayersListPicto-]{float:unset}dialog[id^=GPlayersList]{float:left;position:relative}button[id^=GPshowLayersListPicto-]{float:right}dialog[id^=GPlayersList]{border-bottom-right-radius:0;opacity:0}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{height:auto;max-height:inherit;opacity:1}.GPlayerCounter{background:#fff;border-radius:100px;color:#000;display:inline-block;font-size:12px;left:15px;line-height:1;min-width:15px;padding:2px 0 1px;position:relative;text-align:center;top:-15px}.GPlayerSwitcher_layer{border-bottom:1px dotted #ccc;overflow:hidden;position:relative;top:0}dialog[id^=GPlayersList] .GPlayerSwitcher_layer:last-child{border-bottom:none}.GPlayerAdvancedTools{display:block;max-height:0;opacity:0;transition:max-height .5s ease-out 0s,opacity .5s ease-out 0s}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{opacity:1}[id^=GPlayerInfoPanel]{left:unset;right:100%}div[id^=GPlayerInfoContent]{max-height:200px;overflow-y:auto;padding-left:10px;padding-right:10px;position:relative} /*# sourceMappingURL=GpfExtOlRoute.css.map*/ \ No newline at end of file diff --git a/dist/modules/GpfExtOlRoute.js b/dist/modules/GpfExtOlRoute.js index 65d1f4ee..7eaa3cab 100644 --- a/dist/modules/GpfExtOlRoute.js +++ b/dist/modules/GpfExtOlRoute.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var e={4582:(e,t)=>{"use strict";function n(e,t){return void 0===t&&(t=Object),t&&"function"==typeof t.getOwnPropertyDescriptors&&(e=t.create(null,t.getOwnPropertyDescriptors(e))),t&&"function"==typeof t.freeze?t.freeze(e):e}function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var o=n({allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,formnovalidate:!0,hidden:!0,ismap:!0,itemscope:!0,loop:!0,multiple:!0,muted:!0,nomodule:!0,novalidate:!0,open:!0,playsinline:!0,readonly:!0,required:!0,reversed:!0,selected:!0});var i=n({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});var a=n({script:!1,style:!1,textarea:!0,title:!0});function s(e){return e===l.HTML}var l=n({HTML:"text/html",XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),c=Object.keys(l).map((function(e){return l[e]}));var u=n({HTML:"http://www.w3.org/1999/xhtml",SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});t.assign=function(e,t){if(null===e||"object"!=typeof e)throw new TypeError("target is not an object");for(var n in t)r(t,n)&&(e[n]=t[n]);return e},t.find=function(e,t,n){if(void 0===n&&(n=Array.prototype),e&&"function"==typeof n.find)return n.find.call(e,t);for(var o=0;o-1},t.MIME_TYPE=l,t.NAMESPACE=u},5752:(e,t,n)=>{"use strict";var r=n(4582),o=n(4722),i=n(2983),a=n(6559),s=n(4466),l=o.DOMImplementation,c=r.hasDefaultHTMLNamespace,u=r.isHTMLMimeType,g=r.isValidMimeType,d=r.MIME_TYPE,p=r.NAMESPACE,h=i.ParseError,f=s.XMLReader;function A(e){return e.replace(/\r[\n\u0085]/g,"\n").replace(/[\r\u0085\u2028]/g,"\n")}function m(e){if(e=e||{locator:!0},this.assign=e.assign||r.assign,this.domHandler=e.domHandler||I,this.onError=e.onError||e.errorHandler,e.errorHandler&&"function"!=typeof e.errorHandler)throw new TypeError("errorHandler object is no longer supported, switch to onError!");e.errorHandler&&e.errorHandler("warning","The `errorHandler` option has been deprecated, use `onError` instead!",this),this.normalizeLineEndings=e.normalizeLineEndings||A,this.locator=!!e.locator,this.xmlns=this.assign(Object.create(null),e.xmlns)}function I(e){var t=e||{};this.mimeType=t.mimeType||d.XML_APPLICATION,this.defaultNamespace=t.defaultNamespace||null,this.cdata=!1,this.currentElement=void 0,this.doc=void 0,this.locator=void 0,this.onError=t.onError}function C(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function v(e,t,n){return"string"==typeof e?e.substr(t,n):e.length>=t+n||t?new java.lang.String(e,t,n)+"":e}function y(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}m.prototype.parseFromString=function(e,t){if(!g(t))throw new TypeError('DOMParser.parseFromString: the provided mimeType "'+t+'" is not valid.');var n=this.assign(Object.create(null),this.xmlns),o=a.XML_ENTITIES,i=n[""]||null;c(t)?(o=a.HTML_ENTITIES,i=p.HTML):t===d.XML_SVG_IMAGE&&(i=p.SVG),n[""]=i,n.xml=n.xml||p.XML;var s=new this.domHandler({mimeType:t,defaultNamespace:i,onError:this.onError}),l=this.locator?{}:void 0;this.locator&&s.setDocumentLocator(l);var u=new f;return u.errorHandler=s,u.domBuilder=s,!r.isHTMLMimeType(t)&&"string"!=typeof e&&u.errorHandler.fatalError("source is not a string"),u.parse(this.normalizeLineEndings(String(e)),n,o),s.doc.documentElement||u.errorHandler.fatalError("missing root element"),s.doc},I.prototype={startDocument:function(){var e=new l;this.doc=u(this.mimeType)?e.createHTMLDocument(!1):e.createDocument(this.defaultNamespace,"")},startElement:function(e,t,n,r){var o=this.doc,i=o.createElementNS(e,n||t),a=r.length;y(this,i),this.currentElement=i,this.locator&&C(this.locator,i);for(var s=0;s{"use strict";var r=n(4582),o=r.find,i=r.hasDefaultHTMLNamespace,a=r.hasOwn,s=r.isHTMLMimeType,l=r.isHTMLRawTextElement,c=r.isHTMLVoidElement,u=r.MIME_TYPE,g=r.NAMESPACE,d=Symbol(),p=n(2983),h=p.DOMException,f=p.DOMExceptionName,A=n(2763);function m(e){if(e!==d)throw new TypeError("Illegal constructor")}function I(e){return""!==e}function C(e,t){return a(e,t)||(e[t]=!0),e}function v(e){if(!e)return[];var t=function(e){return e?e.split(/[\t\n\f\r ]+/).filter(I):[]}(e);return Object.keys(t.reduce(C,{}))}function y(e){if(!A.QName_exact.test(e))throw new h(h.INVALID_CHARACTER_ERR,'invalid character in qualified name "'+e+'"')}function E(e,t){y(t),e=e||null;var n=null,o=t;if(t.indexOf(":")>=0){var i=t.split(":");n=i[0],o=i[1]}if(null!==n&&null===e)throw new h(h.NAMESPACE_ERR,"prefix is non-null and namespace is null");if("xml"===n&&e!==r.NAMESPACE.XML)throw new h(h.NAMESPACE_ERR,'prefix is "xml" and namespace is not the XML namespace');if(("xmlns"===n||"xmlns"===t)&&e!==r.NAMESPACE.XMLNS)throw new h(h.NAMESPACE_ERR,'either qualifiedName or prefix is "xmlns" and namespace is not the XMLNS namespace');if(e===r.NAMESPACE.XMLNS&&"xmlns"!==n&&"xmlns"!==t)throw new h(h.NAMESPACE_ERR,'namespace is the XMLNS namespace and neither qualifiedName nor prefix is "xmlns"');return[e,n,o]}function b(e,t){for(var n in e)a(e,n)&&(t[n]=e[n])}function w(e,t){var n=e.prototype;if(!(n instanceof t)){function r(){}r.prototype=t.prototype,b(n,r=new r),e.prototype=n=r}n.constructor!=e&&("function"!=typeof e&&console.error("unknown Class:"+e),n.constructor=e)}var _={},P=_.ELEMENT_NODE=1,S=_.ATTRIBUTE_NODE=2,R=_.TEXT_NODE=3,T=_.CDATA_SECTION_NODE=4,O=_.ENTITY_REFERENCE_NODE=5,N=_.ENTITY_NODE=6,x=_.PROCESSING_INSTRUCTION_NODE=7,D=_.COMMENT_NODE=8,L=_.DOCUMENT_NODE=9,k=_.DOCUMENT_TYPE_NODE=10,G=_.DOCUMENT_FRAGMENT_NODE=11,M=_.NOTATION_NODE=12,U=r.freeze({DOCUMENT_POSITION_DISCONNECTED:1,DOCUMENT_POSITION_PRECEDING:2,DOCUMENT_POSITION_FOLLOWING:4,DOCUMENT_POSITION_CONTAINS:8,DOCUMENT_POSITION_CONTAINED_BY:16,DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:32});function B(e){for(var t=[];e.parentNode||e.ownerElement;)e=e.parentNode||e.ownerElement,t.unshift(e);return t}function F(e,t){if(t.length=0){for(var o=t.length-1;r<=o;)t[r]=t[++r];if(t.length=o,e){var i=e.ownerDocument;i&&ee(i,e,n),n.ownerElement=null}}}function K(){}function W(e){m(e)}function J(e){return("<"==e?"<":">"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function Q(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(Q(e,t))return!0}while(e=e.nextSibling)}function $(e,t){m(e);var n=t||{};this.ownerDocument=this,this.contentType=n.contentType||u.XML_APPLICATION,this.type=s(this.contentType)?"html":"xml"}function ee(e,t,n,r){e&&e._inc++,n.namespaceURI===g.XMLNS&&delete t._nsMap[n.prefix?n.localName:""]}function te(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n&&!n.nextSibling)r[r.length++]=n;else{for(var o=t.firstChild,i=0;o;)r[i++]=o,o=o.nextSibling;r.length=i,delete r[r.length]}}}function ne(e,t){if(e!==t.parentNode)throw new h(h.NOT_FOUND_ERR,"child's parent is not parent");var n=t.previousSibling,r=t.nextSibling;return n?n.nextSibling=r:e.firstChild=r,r?r.previousSibling=n:e.lastChild=n,te(e.ownerDocument,e),t.parentNode=null,t.previousSibling=null,t.nextSibling=null,t}function re(e){return e&&e.nodeType===W.DOCUMENT_TYPE_NODE}function oe(e){return e&&e.nodeType===W.ELEMENT_NODE}function ie(e){return e&&e.nodeType===W.TEXT_NODE}function ae(e,t){var n=e.childNodes||[];if(o(n,oe)||re(t))return!1;var r=o(n,re);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function se(e,t){var n=e.childNodes||[];if(o(n,(function(e){return oe(e)&&e!==t})))return!1;var r=o(n,re);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function le(e,t,n){if(!function(e){return e&&(e.nodeType===W.DOCUMENT_NODE||e.nodeType===W.DOCUMENT_FRAGMENT_NODE||e.nodeType===W.ELEMENT_NODE)}(e))throw new h(h.HIERARCHY_REQUEST_ERR,"Unexpected parent node type "+e.nodeType);if(n&&n.parentNode!==e)throw new h(h.NOT_FOUND_ERR,"child not in parent");if(!function(e){return e&&(e.nodeType===W.CDATA_SECTION_NODE||e.nodeType===W.COMMENT_NODE||e.nodeType===W.DOCUMENT_FRAGMENT_NODE||e.nodeType===W.DOCUMENT_TYPE_NODE||e.nodeType===W.ELEMENT_NODE||e.nodeType===W.PROCESSING_INSTRUCTION_NODE||e.nodeType===W.TEXT_NODE)}(t)||re(t)&&e.nodeType!==W.DOCUMENT_NODE)throw new h(h.HIERARCHY_REQUEST_ERR,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function ce(e,t,n){var r=e.childNodes||[],i=t.childNodes||[];if(t.nodeType===W.DOCUMENT_FRAGMENT_NODE){var a=i.filter(oe);if(a.length>1||o(i,ie))throw new h(h.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===a.length&&!ae(e,n))throw new h(h.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!ae(e,n))throw new h(h.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(re(t)){if(o(r,re))throw new h(h.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var s=o(r,oe);if(n&&r.indexOf(s)1||o(i,ie))throw new h(h.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===a.length&&!se(e,n))throw new h(h.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(oe(t)&&!se(e,n))throw new h(h.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(re(t)){function l(e){return re(e)&&e!==n}if(o(r,l))throw new h(h.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var s=o(r,oe);if(n&&r.indexOf(s)=0;f--){if(""===(m=r[f]).prefix&&m.namespace===e.namespaceURI){p=m.namespace;break}}if(p!==e.namespaceURI)for(f=r.length-1;f>=0;f--){var m;if((m=r[f]).namespace===e.namespaceURI){m.prefix&&(d=m.prefix+":"+u);break}}}t.push("<",d);for(var I=0;I");else{if(t.push(">"),o&&l(u))for(;s;)s.data?t.push(s.data):Re(s,t,n,r.slice()),s=s.nextSibling;else for(;s;)Re(s,t,n,r.slice()),s=s.nextSibling;t.push("")}return;case L:case G:for(s=e.firstChild;s;)Re(s,t,n,r.slice()),s=s.nextSibling;return;case S:return Se(t,e.name,e.value);case R:return t.push(e.data.replace(/[<&>]/g,J));case T:return t.push(A.CDATA_START,e.data,A.CDATA_END);case D:return t.push(A.COMMENT_START,e.data,A.COMMENT_END);case k:var b=e.publicId,w=e.systemId;return t.push(A.DOCTYPE_DECL_START," ",e.name),b?(t.push(" ",A.PUBLIC," ",b),w&&"."!==w&&t.push(" ",w)):w&&"."!==w&&t.push(" ",A.SYSTEM," ",w),e.internalSubset&&t.push(" [",e.internalSubset,"]"),void t.push(">");case x:return t.push("");case O:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function Te(e,t,n){var r;switch(t.nodeType){case P:(r=t.cloneNode(!1)).ownerDocument=e;case G:break;case S:n=!0}if(r||(r=t.cloneNode(!1)),r.ownerDocument=e,r.parentNode=null,n)for(var o=t.firstChild;o;)r.appendChild(Te(e,o,n)),o=o.nextSibling;return r}function Oe(e,t,n){var r=new t.constructor(d);for(var o in t)if(a(t,o)){var i=t[o];"object"!=typeof i&&i!=r[o]&&(r[o]=i)}switch(t.childNodes&&(r.childNodes=new H),r.ownerDocument=e,r.nodeType){case P:var s=t.attributes,l=r.attributes=new Y,c=s.length;l._ownerElement=r;for(var u=0;u=0&&ej(t.ownerDocument)?U.DOCUMENT_POSITION_FOLLOWING:U.DOCUMENT_POSITION_PRECEDING);var s=B(t),l=B(n);if(!r&&l.indexOf(t)>=0||o&&t===n)return U.DOCUMENT_POSITION_CONTAINS+U.DOCUMENT_POSITION_PRECEDING;if(!o&&s.indexOf(n)>=0||r&&t===n)return U.DOCUMENT_POSITION_CONTAINED_BY+U.DOCUMENT_POSITION_FOLLOWING;var c=F(l,s);for(var u in c.childNodes){var g=c.childNodes[u];if(g===n)return U.DOCUMENT_POSITION_FOLLOWING;if(g===t)return U.DOCUMENT_POSITION_PRECEDING;if(l.indexOf(g)>=0)return U.DOCUMENT_POSITION_FOLLOWING;if(s.indexOf(g)>=0)return U.DOCUMENT_POSITION_PRECEDING}return 0}},b(_,W),b(_,W.prototype),b(U,W),b(U,W.prototype),$.prototype={implementation:null,nodeName:"#document",nodeType:L,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType===G){for(var n=e.firstChild;n;){var r=n.nextSibling;this.insertBefore(n,t),n=r}return e}return ge(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===P&&(this.documentElement=e),e},removeChild:function(e){var t=ne(this,e);return t===this.documentElement&&(this.documentElement=null),t},replaceChild:function(e,t){ge(this,e,t,ue),e.ownerDocument=this,t&&this.removeChild(t),oe(e)&&(this.documentElement=e)},importNode:function(e,t){return Te(this,e,t)},getElementById:function(e){var t=null;return Q(this.documentElement,(function(n){if(n.nodeType==P&&n.getAttribute("id")==e)return t=n,!0})),t},createElement:function(e){var t=new de(d);return t.ownerDocument=this,"html"===this.type&&(e=e.toLowerCase()),i(this.contentType)&&(t.namespaceURI=g.HTML),t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new H,(t.attributes=new Y)._ownerElement=t,t},createDocumentFragment:function(){var e=new Ee(d);return e.ownerDocument=this,e.childNodes=new H,e},createTextNode:function(e){var t=new fe(d);return t.ownerDocument=this,t.childNodes=new H,t.appendData(e),t},createComment:function(e){var t=new Ae(d);return t.ownerDocument=this,t.childNodes=new H,t.appendData(e),t},createCDATASection:function(e){var t=new me(d);return t.ownerDocument=this,t.childNodes=new H,t.appendData(e),t},createProcessingInstruction:function(e,t){var n=new be(d);return n.ownerDocument=this,n.childNodes=new H,n.nodeName=n.target=e,n.nodeValue=n.data=t,n},createAttribute:function(e){if(!A.QName_exact.test(e))throw new h(h.INVALID_CHARACTER_ERR,'invalid character in name "'+e+'"');return"html"===this.type&&(e=e.toLowerCase()),this._createAttribute(e)},_createAttribute:function(e){var t=new pe(d);return t.ownerDocument=this,t.childNodes=new H,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){if(!A.Name.test(e))throw new h(h.INVALID_CHARACTER_ERR,'not a valid xml name "'+e+'"');if("html"===this.type)throw new h("document is an html document",f.NotSupportedError);var t=new ye(d);return t.ownerDocument=this,t.childNodes=new H,t.nodeName=e,t},createElementNS:function(e,t){var n=E(e,t),r=new de(d),o=r.attributes=new Y;return r.childNodes=new H,r.ownerDocument=this,r.nodeName=t,r.tagName=t,r.namespaceURI=n[0],r.prefix=n[1],r.localName=n[2],o._ownerElement=r,r},createAttributeNS:function(e,t){var n=E(e,t),r=new pe(d);return r.ownerDocument=this,r.childNodes=new H,r.nodeName=t,r.name=t,r.specified=!0,r.namespaceURI=n[0],r.prefix=n[1],r.localName=n[2],r}},w($,W),de.prototype={nodeType:P,attributes:null,getQualifiedName:function(){return this.prefix?this.prefix+":"+this.localName:this.localName},_isInHTMLDocumentAndNamespace:function(){return"html"===this.ownerDocument.type&&this.namespaceURI===g.HTML},hasAttribute:function(e){return!!this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t?t.value:null},getAttributeNode:function(e){return this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase()),this.attributes.getNamedItem(e)},setAttribute:function(e,t){this._isInHTMLDocumentAndNamespace()&&(e=e.toLowerCase());var n=this.getAttributeNode(e);n?n.value=n.nodeValue=""+t:((n=this.ownerDocument._createAttribute(e)).value=n.nodeValue=""+t,this.setAttributeNode(n))},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);n&&this.removeAttributeNode(n)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);return n?n.value:null},setAttributeNS:function(e,t,n){var r=E(e,t)[2],o=this.getAttributeNodeNS(e,r);o?o.value=o.nodeValue=""+n:((o=this.ownerDocument.createAttributeNS(e,t)).value=o.nodeValue=""+n,this.setAttributeNode(o))},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByClassName:function(e){var t=v(e);return new V(this,(function(n){var r=[];return t.length>0&&Q(n,(function(o){if(o!==n&&o.nodeType===P){var i=o.getAttribute("class");if(i){var a=e===i;if(!a){var s=v(i);a=t.every((l=s,function(e){return l&&-1!==l.indexOf(e)}))}a&&r.push(o)}}var l})),r}))},getElementsByTagName:function(e){var t="html"===(this.nodeType===L?this:this.ownerDocument).type,n=e.toLowerCase();return new V(this,(function(r){var o=[];return Q(r,(function(i){i!==r&&i.nodeType===P&&(("*"===e||i.getQualifiedName()===(t&&i.namespaceURI===g.HTML?n:e))&&o.push(i))})),o}))},getElementsByTagNameNS:function(e,t){return new V(this,(function(n){var r=[];return Q(n,(function(o){o===n||o.nodeType!==P||"*"!==e&&o.namespaceURI!==e||"*"!==t&&o.localName!=t||r.push(o)})),r}))}},$.prototype.getElementsByClassName=de.prototype.getElementsByClassName,$.prototype.getElementsByTagName=de.prototype.getElementsByTagName,$.prototype.getElementsByTagNameNS=de.prototype.getElementsByTagNameNS,w(de,W),pe.prototype.nodeType=S,w(pe,W),he.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,n){n=this.data.substring(0,e)+n+this.data.substring(e+t),this.nodeValue=this.data=n,this.length=n.length}},w(he,W),fe.prototype={nodeName:"#text",nodeType:R,splitText:function(e){var t=this.data,n=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var r=this.ownerDocument.createTextNode(n);return this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling),r}},w(fe,he),Ae.prototype={nodeName:"#comment",nodeType:D},w(Ae,he),me.prototype={nodeName:"#cdata-section",nodeType:T},w(me,fe),Ie.prototype.nodeType=k,w(Ie,W),Ce.prototype.nodeType=M,w(Ce,W),ve.prototype.nodeType=N,w(ve,W),ye.prototype.nodeType=O,w(ye,W),Ee.prototype.nodeName="#document-fragment",Ee.prototype.nodeType=G,w(Ee,W),be.prototype.nodeType=x,w(be,he),we.prototype.serializeToString=function(e,t){return _e.call(e,t)},W.prototype.toString=_e;try{if(Object.defineProperty){function xe(e){switch(e.nodeType){case P:case G:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(xe(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(V.prototype,"length",{get:function(){return q(this),this.$$length}}),Object.defineProperty(W.prototype,"textContent",{get:function(){return xe(this)},set:function(e){switch(this.nodeType){case P:case G:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),Ne=function(e,t,n){e["$$"+t]=n}}}catch(De){}t._updateLiveList=q,t.Attr=pe,t.CDATASection=me,t.CharacterData=he,t.Comment=Ae,t.Document=$,t.DocumentFragment=Ee,t.DocumentType=Ie,t.DOMImplementation=K,t.Element=de,t.Entity=ve,t.EntityReference=ye,t.LiveNodeList=V,t.NamedNodeMap=Y,t.Node=W,t.NodeList=H,t.Notation=Ce,t.Text=fe,t.ProcessingInstruction=be,t.XMLSerializer=we},6559:(e,t,n)=>{"use strict";var r=n(4582).freeze;t.XML_ENTITIES=r({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),t.HTML_ENTITIES=r({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),t.entityMap=t.HTML_ENTITIES},2983:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(Error.prototype,{constructor:{value:e},name:{value:e.name,enumerable:!0,writable:t}})}var o=n(4582).freeze({Error:"Error",IndexSizeError:"IndexSizeError",DomstringSizeError:"DomstringSizeError",HierarchyRequestError:"HierarchyRequestError",WrongDocumentError:"WrongDocumentError",InvalidCharacterError:"InvalidCharacterError",NoDataAllowedError:"NoDataAllowedError",NoModificationAllowedError:"NoModificationAllowedError",NotFoundError:"NotFoundError",NotSupportedError:"NotSupportedError",InUseAttributeError:"InUseAttributeError",InvalidStateError:"InvalidStateError",SyntaxError:"SyntaxError",InvalidModificationError:"InvalidModificationError",NamespaceError:"NamespaceError",InvalidAccessError:"InvalidAccessError",ValidationError:"ValidationError",TypeMismatchError:"TypeMismatchError",SecurityError:"SecurityError",NetworkError:"NetworkError",AbortError:"AbortError",URLMismatchError:"URLMismatchError",QuotaExceededError:"QuotaExceededError",TimeoutError:"TimeoutError",InvalidNodeTypeError:"InvalidNodeTypeError",DataCloneError:"DataCloneError",EncodingError:"EncodingError",NotReadableError:"NotReadableError",UnknownError:"UnknownError",ConstraintError:"ConstraintError",DataError:"DataError",TransactionInactiveError:"TransactionInactiveError",ReadOnlyError:"ReadOnlyError",VersionError:"VersionError",OperationError:"OperationError",NotAllowedError:"NotAllowedError",OptOutError:"OptOutError"}),i=Object.keys(o);function a(e){return"number"==typeof e&&e>=1&&e<=25}function s(e,t){var n;a(e)?(this.name=i[e],this.message=t||""):(this.message=e,this.name="string"==typeof(n=t)&&n.substring(n.length-o.Error.length)===o.Error?t:o.Error),Error.captureStackTrace&&Error.captureStackTrace(this,s)}r(s,!0),Object.defineProperties(s.prototype,{code:{enumerable:!0,get:function(){var e=i.indexOf(this.name);return a(e)?e:0}}});for(var l={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25},c=Object.entries(l),u=0;u{"use strict";function n(e){try{"function"!=typeof e&&(e=RegExp);var t=new e("𝌆","u").exec("𝌆");return!!t&&2===t[0].length}catch(e){}return!1}var r=n();function o(e){if("["!==e.source[0])throw new Error(e+" can not be used with chars");return e.source.slice(1,e.source.lastIndexOf("]"))}function i(e,t){if("["!==e.source[0])throw new Error("/"+e.source+"/ can not be used with chars_without");if(!t||"string"!=typeof t)throw new Error(JSON.stringify(t)+" is not a valid search");if(-1===e.source.indexOf(t))throw new Error('"'+t+'" is not is /'+e.source+"/");if("-"===t&&1!==e.source.indexOf(t))throw new Error('"'+t+'" is not at the first postion of /'+e.source+"/");return new RegExp(e.source.replace(t,""),r?"u":"")}function a(e){var t=this;return new RegExp(Array.prototype.slice.call(arguments).map((function(e){var n="string"==typeof e;if(n&&void 0===t&&"|"===e)throw new Error("use regg instead of reg to wrap expressions with `|`!");return n?e:e.source})).join(""),r?"mu":"m")}function s(e){if(0===arguments.length)throw new Error("no parameters provided");return a.apply(s,["(?:"].concat(Array.prototype.slice.call(arguments),[")"]))}var l=/[-\x09\x0A\x0D\x20-\x2C\x2E-\uD7FF\uE000-\uFFFD]/;r&&(l=a("[",o(l),"\\u{10000}-\\u{10FFFF}","]"));var c=/[\x20\x09\x0D\x0A]/,u=o(c),g=a(c,"+"),d=a(c,"*"),p=/[:_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;r&&(p=a("[",o(p),"\\u{10000}-\\u{10FFFF}","]"));var h=a("[",o(p),o(/[-.0-9\xB7]/),o(/[\u0300-\u036F\u203F-\u2040]/),"]"),f=a(p,h,"*"),A=a(h,"+"),m=a("&",f,";"),I=s(/&#[0-9]+;|&#x[0-9a-fA-F]+;/),C=s(m,"|",I),v=a("%",f,";"),y=s(a('"',s(/[^%&"]/,"|",v,"|",C),"*",'"'),"|",a("'",s(/[^%&']/,"|",v,"|",C),"*","'")),E=s('"',s(/[^<&"]/,"|",C),"*",'"',"|","'",s(/[^<&']/,"|",C),"*","'"),b=a(i(p,":"),i(h,":"),"*"),w=a(b,s(":",b),"?"),_=a("^",w,"$"),P=a("(",w,")"),S=s(/"[^"]*"|'[^']*'/),R=a(/^<\?/,"(",f,")",s(g,"(",l,"*?)"),"?",/\?>/),T=/[\x20\x0D\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/,O=s('"',T,'*"',"|","'",i(T,"'"),"*'"),N="\x3c!--",x=a(N,s(i(l,"-"),"|",a("-",i(l,"-"))),"*","--\x3e"),D="#PCDATA",L=s(a(/\(/,d,D,s(d,/\|/,d,w),"*",d,/\)\*/),"|",a(/\(/,d,D,d,/\)/)),k=s("EMPTY","|","ANY","|",L,"|",a(/\([^>]+\)/,/[?*+]?/)),G=a(""),M=a("NOTATION",g,/\(/,d,f,s(d,/\|/,d,f),"*",d,/\)/),U=a(/\(/,d,A,s(d,/\|/,d,A),"*",d,/\)/),B=s(M,"|",U),F=s(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/,"|",B),j=s(/#REQUIRED|#IMPLIED/,"|",s(s("#FIXED",g),"?",E)),H=a(""),V="SYSTEM",q="PUBLIC",Y=s(s(V,g,S),"|",s(q,g,O,g,S)),z=a("^",s(s(V,g,"(?",S,")"),"|",s(q,g,"(?",O,")",g,"(?",S,")"))),X=s(g,"NDATA",g,f),Z=""),W=s(y,"|",Y),J=s(K,"|",a(Z,g,"%",g,f,g,W,d,">")),Q=a(q,g,O),$=a(""),ee=a(d,"=",d),te=/1[.]\d+/,ne=a(g,"version",ee,s("'",te,"'","|",'"',te,'"')),re=/[A-Za-z][-A-Za-z0-9._]*/,oe=a(/^<\?xml/,ne,s(g,"encoding",ee,s('"',re,'"',"|","'",re,"'")),"?",s(g,"standalone",ee,s("'",s("yes","|","no"),"'","|",'"',s("yes","|","no"),'"')),"?",d,/\?>/),ie=a(l,"*?",/\]\]>/),ae=a(/",t.CDSect=ae,t.Char=l,t.Comment=x,t.COMMENT_START=N,t.COMMENT_END="--\x3e",t.DOCTYPE_DECL_START="{"use strict";var r=n(4582);r.assign,r.hasDefaultHTMLNamespace,r.isHTMLMimeType,r.isValidMimeType,r.MIME_TYPE,r.NAMESPACE;var o=n(2983);o.DOMException,o.DOMExceptionName,o.ExceptionCode,o.ParseError;var i=n(4722);i.Attr,i.CDATASection,i.CharacterData,i.Comment,i.Document,i.DocumentFragment,i.DocumentType,i.DOMImplementation,i.Element,i.Entity,i.EntityReference,i.LiveNodeList,i.NamedNodeMap,i.Node,i.NodeList,i.Notation,i.ProcessingInstruction,i.Text,i.XMLSerializer;var a=n(5752);t.S4=a.DOMParser,a.onErrorStopParsing,a.onWarningStopParsing},4466:(e,t,n)=>{"use strict";var r=n(4582),o=n(2763),i=n(2983),a=r.isHTMLEscapableRawTextElement,s=r.isHTMLMimeType,l=r.isHTMLRawTextElement,c=r.hasOwn,u=r.NAMESPACE,g=i.ParseError,d=i.DOMException;function p(){}p.prototype={parse:function(e,t,n){var i=this.domBuilder;i.startDocument(),C(t,t=Object.create(null)),function(e,t,n,i,a){var l=s(i.mimeType);e.indexOf(o.UNICODE_REPLACEMENT_CHARACTER)>=0&&a.warning("Unicode replacement character detected, source encoding issues?");function u(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}function p(e){var t=";"===e[e.length-1]?e:e+";";if(!l&&t!==e)return a.error("EntityRef: expecting ;"),e;var r=o.Reference.exec(t);if(!r||r[0].length!==t.length)return a.error("entity not matching Reference production: "+e),e;var i=t.slice(1,-1);return c(n,i)?n[i]:"#"===i.charAt(0)?u(parseInt(i.substr(1).replace("x","0x"))):(a.error("entity not found:"+e),e)}function C(t){if(t>O){var n=e.substring(O,t).replace(h,p);S&&v(O),i.characters(n,0,t-O),O=t}}function v(t,n){for(;t>=_&&(n=P.exec(e));)w=n.index,_=w+n[0].length,S.lineNumber++;S.columnNumber=t-w+1}var w=0,_=0,P=/.*(?:\r\n?|\n)|.*$/g,S=i.locator,R=[{currentNSMap:t}],T=[],O=0;for(;;){try{var N=e.indexOf("<",O);if(N<0){if(!l&&T.length>0)return a.fatalError("unclosed xml tag(s): "+T.join(", "));if(!e.substring(O).match(/^\s*$/)){var x=i.doc,D=x.createTextNode(e.substr(O));if(x.documentElement)return a.error("Extra content at the end of the document");x.appendChild(D),i.currentElement=D}return}if(N>O){var L=e.substring(O,N);l||0!==T.length||(L=L.replace(new RegExp(o.S_OPT.source,"g"),""))&&a.error("Unexpected content outside root element: '"+L+"'"),C(N)}switch(e.charAt(N+1)){case"/":var k=e.indexOf(">",N+2),G=e.substring(N+2,k>0?k:void 0);if(!G)return a.fatalError("end tag name missing");var M=k>0&&o.reg("^",o.QName_group,o.S_OPT,"$").exec(G);if(!M)return a.fatalError('end tag name contains invalid characters: "'+G+'"');if(!i.currentElement&&!i.doc.documentElement)return;var U=T[T.length-1]||i.currentElement.tagName||i.doc.documentElement.tagName||"";if(U!==M[1]){var B=M[1].toLowerCase();if(!l||U.toLowerCase()!==B)return a.fatalError('Opening and ending tag mismatch: "'+U+'" != "'+G+'"')}var F=R.pop();T.pop();var j=F.localNSMap;if(i.endElement(F.uri,F.localName,U),j)for(var H in j)c(j,H)&&i.endPrefixMapping(H);k++;break;case"?":S&&v(N),k=E(e,N,i,a);break;case"!":S&&v(N),k=y(e,N,i,a,l);break;default:S&&v(N);var V=new b,q=R[R.length-1].currentNSMap,Y=(k=A(e,N,V,q,p,a,l),V.length);if(V.closed||(l&&r.isHTMLVoidElement(V.tagName)?V.closed=!0:T.push(V.tagName)),S&&Y){for(var z=f(S,{}),X=0;XO?O=k:C(Math.max(N,O)+1)}}(e,t,n,i,this.errorHandler),i.endDocument()}};var h=/&#?\w+;?/g;function f(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function A(e,t,n,r,o,i,a){function s(e,t,r){return c(n.attributeNames,e)?i.fatalError("Attribute "+e+" redefined"):!a&&t.indexOf("<")>=0?i.fatalError("Unescaped '<' not allowed in attributes values"):void n.addValue(e,t.replace(/[\t\n\r]/g," ").replace(h,o),r)}for(var l,u=++t,g=0;;){var d=e.charAt(u);switch(d){case"=":if(1===g)l=e.slice(t,u),g=3;else{if(2!==g)throw new Error("attribute equal must after attrName");g=3}break;case"'":case'"':if(3===g||1===g){if(1===g&&(i.warning('attribute value must after "="'),l=e.slice(t,u)),t=u+1,!((u=e.indexOf(d,t))>0))throw new Error("attribute value no end '"+d+"' match");s(l,p=e.slice(t,u),t-1),g=5}else{if(4!=g)throw new Error('attribute value must after "="');s(l,p=e.slice(t,u),t),i.warning('attribute "'+l+'" missed start quot('+d+")!!"),t=u+1,g=5}break;case"/":switch(g){case 0:n.setTagName(e.slice(t,u));case 5:case 6:case 7:g=7,n.closed=!0;case 4:case 1:break;case 2:n.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return i.error("unexpected end of input"),0==g&&n.setTagName(e.slice(t,u)),u;case">":switch(g){case 0:n.setTagName(e.slice(t,u));case 5:case 6:case 7:break;case 4:case 1:"/"===(p=e.slice(t,u)).slice(-1)&&(n.closed=!0,p=p.slice(0,-1));case 2:2===g&&(p=l),4==g?(i.warning('attribute "'+p+'" missed quot(")!'),s(l,p,t)):(a||i.warning('attribute "'+p+'" missed value!! "'+p+'" instead!!'),s(p,p,t));break;case 3:if(!a)return i.fatalError("AttValue: ' or \" expected")}return u;case"€":d=" ";default:if(d<=" ")switch(g){case 0:n.setTagName(e.slice(t,u)),g=6;break;case 1:l=e.slice(t,u),g=2;break;case 4:var p=e.slice(t,u);i.warning('attribute "'+p+'" missed quot(")!!'),s(l,p,t);case 5:g=6}else switch(g){case 2:a||i.warning('attribute "'+l+'" missed value!! "'+l+'" instead2!!'),s(l,l,t),t=u,g=1;break;case 5:i.warning('attribute space is required"'+l+'"!!');case 6:g=1,t=u;break;case 3:g=4,t=u;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}u++}}function m(e,t,n){for(var r=e.tagName,o=null,i=e.length;i--;){var a=e[i],s=a.qName,l=a.value;if((h=s.indexOf(":"))>0)var g=a.prefix=s.slice(0,h),d=s.slice(h+1),p="xmlns"===g&&d;else d=s,g=null,p="xmlns"===s&&"";a.localName=d,!1!==p&&(null==o&&(o=Object.create(null),C(n,n=Object.create(null))),n[p]=o[p]=l,a.uri=u.XMLNS,t.startPrefixMapping(p,l))}for(i=e.length;i--;)(a=e[i]).prefix&&("xml"===a.prefix&&(a.uri=u.XML),"xmlns"!==a.prefix&&(a.uri=n[a.prefix]));var h;(h=r.indexOf(":"))>0?(g=e.prefix=r.slice(0,h),d=e.localName=r.slice(h+1)):(g=null,d=e.localName=r);var f=e.uri=n[g||""];if(t.startElement(f,d,r,e),!e.closed)return e.currentNSMap=n,e.localNSMap=o,!0;if(t.endElement(f,d,r),o)for(g in o)c(o,g)&&t.endPrefixMapping(g)}function I(e,t,n,r,o){var i=a(n);if(i||l(n)){var s=e.indexOf("",t),c=e.substring(t+1,s);return i&&(c=c.replace(h,r)),o.characters(c,0,c.length),s}return t+1}function C(e,t){for(var n in e)c(e,n)&&(t[n]=e[n])}function v(e,t){var n=t;function r(t){return t=t||0,e.charAt(n+t)}function i(e){n+=e=e||1}function a(){return e.substring(n)}return{char:r,getIndex:function(){return n},getMatch:function(e){var t=o.reg("^",e).exec(a());return t?(i(t[0].length),t[0]):null},getSource:function(){return e},skip:i,skipBlanks:function(){for(var t=0;n"!==a.char()?r.fatalError("doctype not terminated with > at position "+a.getIndex()):(a.skip(1),n.startDTD(c.name,c.publicId,c.systemId,c.internalSubset),n.endDTD(),a.getIndex());default:return r.fatalError('Not well-formed XML starting with "0)return r.fatalError("processing instruction at position "+t+" is an xml declaration which is only at the start of the document");if(!o.XMLDecl.test(e.substring(t)))return r.fatalError("xml declaration is not well-formed")}return n.processingInstruction(i[1],i[2]),t+i[0].length}function b(){this.attributeNames=Object.create(null)}b.prototype={setTagName:function(e){if(!o.QName_exact.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,n){if(!o.QName_exact.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:n}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=p,t.parseUtils=v,t.parseDoctypeCommentOrCData=y},562:(e,t,n)=>{"use strict";n.d(t,{A:()=>m});var r=n(7392),o=n.n(r),i=n(2940);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function s(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function l(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){for(var n=0;n{"use strict";n.d(t,{default:()=>y});var r=n(3391),o=n(7392),i=n.n(o),a=n(6736),s=n(5844),l=n(5771),c=n(9632),u=n(7255);const g={_addUID:function(e){return this.uid?e+"-"+this.uid:e}};function d(e){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d(e)}function p(e,t){for(var n=0;n\n '));this.button=r.firstChild,this.button&&this.button.addEventListener("click",(function(t){return e.onClickButtonExport(t)})),n.appendChild(r.firstChild);var o=this.stringToHTML('\n
    \n \n \n \n
    \n '));if(this.menu=o.firstChild,this.menu){if(this.options.menu){var i=this.menu.className;this.menu.className=i.replace(this.menuClassHidden,"")}this.menu.querySelectorAll('input[type=radio][name="format"]').forEach((function(t){t.id.toUpperCase().includes(e.options.format.toUpperCase())&&(t.checked=!0),t.addEventListener("change",(function(t){e.setFormat(t.target.value)}))}))}n.appendChild(o.firstChild),this.container=n}},{key:"stringToHTML",value:function(e){if(function(){if(!window.DOMParser)return!1;var e=new DOMParser;try{e.parseFromString("x","text/html")}catch(e){return!1}return!0}())return(new DOMParser).parseFromString(e,"text/html").body;var t=document.createElement("div");return t.innerHTML=e,t}},{key:"isPluggableControl",value:function(){return!(!this.options.control||"function"!=typeof this.options.control.getContainer||"function"!=typeof this.options.control.getLayer)}},{key:"exportFeatures",value:function(e,t,n){var r=this,o=null;if(!e)return C.warn("Impossible to export : no layer is hosting features."),o;if(!e.getSource()||!e.getSource().getFeatures()||!e.getSource().getFeatures().length)return C.warn("Impossible to export : no features found."),o;e.getSource().getFeatures().forEach((function(e){!e.getStyle()&&r.options.control&&"function"==typeof r.options.control.getStyle&&e.setStyle(r.options.control.getStyle())}));var i={defaultStyle:n};t&&(i.extensions={"geoportail:compute":t});var a=null;switch(this.options.format.toUpperCase()){case"KML":i.writeStyles=!0,i.showPointNames=!0,a=new l.A(i);break;case"GPX":a=new u.default(i);break;case"GEOJSON":a=new c.A(i)}if(!a)return C.warn("Impossible to export : format unknown !?"),o;var s=e.getSource().getProjection(),g=this.getMap();g&&(s=s||g.getView().getProjection());var d=e.getSource().getFeatures();return o=a.writeFeatures(d,{dataProjection:"EPSG:4326",featureProjection:s||"EPSG:3857"})}},{key:"onClickButtonExport",value:function(e){this.isPluggableControl()||C.warn("Componant not pluggable with the control !");var t=this.options.control&&void 0!==this.options.control.getLayer?this.options.control.getData():this.options.layer,n=this.options.control&&void 0!==this.options.control.getData?this.options.control.getData():{},r=this.options.control&&void 0!==this.options.control.getStyle?this.options.control.getStyle():{},o=this.exportFeatures(t,n,r);if(o&&"null"!==o)if(this.dispatchEvent({type:"export:compute",content:o}),this.options.onExport&&"function"==typeof this.options.onExport)this.options.onExport(o);else{var i=document.createElement("a");if(i.setAttribute("href","data:"+this.mimeType+";charset=utf-8,"+encodeURIComponent(o)),i.setAttribute("download",this.options.name+this.extension),document.createEvent){var a=document.createEvent("MouseEvents");a.initEvent("click",!0,!0),i.dispatchEvent(a)}else i.click()}}},{key:"getContainer",value:function(){return this.container}},{key:"setControl",value:function(e){this.options.control=e}},{key:"setTarget",value:function(e){this.options.target=e}},{key:"setFormat",value:function(e){switch(this.options.format=e.toUpperCase(),this.options.format){case"KML":this.extension=".kml",this.mimeType="application/vnd.google-earth.kml+xml";break;case"GPX":this.extension=".gpx",this.mimeType="application/gpx+xml";break;case"GEOJSON":this.extension=".geojson",this.mimeType="application/geo+json";break;default:this.options.format="GEOJSON",this.extension=".geojson",this.mimeType="application/geo+json"}}},{key:"setName",value:function(e){this.options.name=e}},{key:"setTitle",value:function(e){this.options.title=e,this.button&&(this.button.value=this.options.menu?this.icon+e:e)}},{key:"setMenu",value:function(e){var t=this;if(this.options.menu=e,this.button&&(this.button.value=this.options.menu?this.icon+this.options.title:this.options.title),this.menu&&this.options.menu){var n=this.menu.className;this.menu.className=n.replace(this.menuClassHidden,""),this.menu.querySelectorAll('input[type=radio][name="format"]').forEach((function(e){e.id.toUpperCase().includes(t.options.format.toUpperCase())&&(e.checked=!0)}))}}},{key:"setLayer",value:function(e){this.options.layer=e}}],r&&p(n.prototype,r),o&&p(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(i());Object.assign(v.prototype,g),Object.assign(v.prototype,r.A);const y=v;window.ol&&window.ol.control&&(window.ol.control.Export=v)},9209:(e,t,n)=>{"use strict";n.d(t,{default:()=>Rt});var r=n(3391),o=n(562),i=n(1363),a=n(2938),s=n(9201),l=n(6736),c=n(5844);const u={configuration:{},isConfigLoaded:function(){if(this.configuration&&0!==Object.keys(this.configuration).length)return!0;var e="undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0!==n.g?n.g:{};return!!(e.Gp&&e.Gp.Config&&e.Gp.Config.layers&&0!==Object.keys(e.Gp.Config.layers).length)&&(this.configuration=e.Gp.Config,!0)}}; /**! diff --git a/dist/modules/GpfExtOlSearchEngine.css b/dist/modules/GpfExtOlSearchEngine.css index 05de62b1..742a5263 100644 --- a/dist/modules/GpfExtOlSearchEngine.css +++ b/dist/modules/GpfExtOlSearchEngine.css @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * - */[id^=GPsearchEngine-]{display:flex;left:46px;top:8px}#position-container-bottom-right>[id^=GPsearchEngine-],#position-container-top-right>[id^=GPsearchEngine-]{align-items:end;flex-direction:column}button[id^=GPshowSearchEnginePicto]{display:inline-block;transition:border-radius 0s ease-out 0s;transition-delay:.5s}button[id^=GPshowSearchEnginePicto][aria-pressed=true]{transition:border-radius .5s ease-out 0s}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]{border-bottom-right-radius:0;transition-delay:0s}button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]~div button[id^=GPshowAdvancedSearch],button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]~div button[id^=GPshowGeolocate],button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]~div button[id^=GPshowSearchByCoordinate]{display:none}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]~div button[id^=GPshowAdvancedSearch],button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]~div button[id^=GPshowGeolocate],button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]~div button[id^=GPshowSearchByCoordinate]{display:inline-block}[id^=GPshowSearchEngine-]+button+form[id^=GPsearchInput-]{max-width:0}form[id^=GPsearchInput-]{display:inline-block;overflow:hidden;position:relative;transition:max-width .5s ease-out 0s}button[id^=GPsearchInputReset]{border:unset;position:absolute;right:0;top:0}button[id^=GPshowAdvancedSearch]{transition:border-radius 0s ease-out 0s;transition-delay:.5s}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{bottom:unset;height:inherit;overflow:hidden;vertical-align:top}form[id^=GPadvancedSearchForm],form[id^=GPcoordinateSearchForm]{max-height:250px;overflow-y:auto;padding-left:15px;padding-right:15px}input[id^=GPadvancedSearchSubmit],input[id^=GPcoordinateSearchSubmit]{margin-bottom:15px;margin-top:10px}[id^=GPshowSearchDiv]{display:flex}.GPsearchFirstLineWrapper{align-items:center;display:flex;flex-direction:row}.GPlabelTitle{font-weight:700}[id^=GPautocompleteResults-]{display:flex;flex-direction:column;width:100%}[id^=GPautoCompleteList],dialog[id^=GPgeocodeResultsList]{margin-left:33px}dialog[id^=GPgeocodeResultsList]{border-radius:4px;bottom:unset;height:inherit;top:35px}[id^=GPautocompleteResultsLocation],[id^=GPautocompleteResultsSuggest]{overflow-y:auto;padding:0;width:inherit}@media (max-width:576px){button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]{max-width:calc(100vw - 180px)}} + */[id^=GPsearchEngine-]{display:flex;left:46px;top:8px}#position-container-bottom-right>[id^=GPsearchEngine-],#position-container-top-right>[id^=GPsearchEngine-]{align-items:end;flex-direction:column}button[id^=GPshowSearchEnginePicto]{display:inline-block;transition:border-radius 0s ease-out 0s;transition-delay:.5s}button[id^=GPshowSearchEnginePicto][aria-pressed=true]{transition:border-radius .5s ease-out 0s}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]{border-bottom-right-radius:0;transition-delay:0s}button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]~div button[id^=GPshowAdvancedSearch],button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]~div button[id^=GPshowGeolocate],button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]~div button[id^=GPshowSearchByCoordinate]{display:none}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]~div button[id^=GPshowAdvancedSearch],button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]~div button[id^=GPshowGeolocate],button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]~div button[id^=GPshowSearchByCoordinate]{display:inline-block}[id^=GPshowSearchEngine-]+button+form[id^=GPsearchInput-]{max-width:0}form[id^=GPsearchInput-]{display:inline-block;overflow:hidden;position:relative;transition:max-width .5s ease-out 0s}button[id^=GPsearchInputReset]{border:unset;position:absolute;right:0;top:0}button[id^=GPshowAdvancedSearch]{transition:border-radius 0s ease-out 0s;transition-delay:.5s}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{bottom:unset;height:inherit;overflow:hidden;vertical-align:top}form[id^=GPadvancedSearchForm],form[id^=GPcoordinateSearchForm]{max-height:250px;overflow-y:auto;padding-left:15px;padding-right:15px}input[id^=GPadvancedSearchSubmit],input[id^=GPcoordinateSearchSubmit]{margin-bottom:15px;margin-top:10px}[id^=GPshowSearchDiv]{display:flex}.GPsearchFirstLineWrapper{align-items:center;display:flex;flex-direction:row}.GPlabelTitle{font-weight:700;margin-bottom:0}[id^=GPautocompleteResults-]{display:flex;flex-direction:column;width:100%}[id^=GPautoCompleteList],dialog[id^=GPgeocodeResultsList]{margin-left:33px}dialog[id^=GPgeocodeResultsList]{border-radius:4px;bottom:unset;height:inherit;top:35px}[id^=GPautocompleteResultsLocation],[id^=GPautocompleteResultsSuggest]{overflow-y:auto;padding:0;width:inherit}@media (max-width:576px){button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]{max-width:calc(100vw - 180px)}} /*# sourceMappingURL=GpfExtOlSearchEngine.css.map*/ \ No newline at end of file diff --git a/dist/modules/GpfExtOlSearchEngine.css.map b/dist/modules/GpfExtOlSearchEngine.css.map index 8dafd59b..a34fd14f 100644 --- a/dist/modules/GpfExtOlSearchEngine.css.map +++ b/dist/modules/GpfExtOlSearchEngine.css.map @@ -1 +1 @@ -{"version":3,"file":"GpfExtOlSearchEngine.css","mappings":";;;;;;;;;;;;;GAEA,sBAOE,YAAa,CALb,SAAU,CADV,OAEF,CAOA,2GAGE,eAAgB,CADhB,qBAEF,CAGA,oCACE,oBAAqB,CACrB,uCAAwC,CACxC,oBACF,CAEA,uDACE,wCACF,CAEA,wDACE,4BAA6B,CAC7B,mBACF,CAEA,oWAGE,YACF,CAEA,iWAGE,oBACF,CAEA,0DACE,WACF,CAYA,yBACE,oBAAqB,CAErB,eAAgB,CADhB,iBAAkB,CAElB,oCACF,CAEA,+BAIE,YAAa,CAHb,iBAAkB,CAElB,OAAU,CADV,KAGF,CAOA,iCACE,uCAAwC,CACxC,oBACF,CAgBA,sEAKE,YAAa,CAHb,cAAe,CAEf,eAAgB,CADhB,kBAGF,CAEA,gEAEE,gBAAiB,CACjB,eAAgB,CAChB,iBAAkB,CAClB,kBACF,CAEA,sEAGE,kBAAmB,CADnB,eAEF,CASA,sBACE,YACF,CAIA,0BAGE,kBAAmB,CAFnB,YAAa,CACb,kBAEF,CAIA,cACE,eACF,CAEA,6BACE,YAAa,CACb,qBAAsB,CACtB,UACF,CAEA,0DAEE,gBACF,CAMA,iCAEE,iBAAkB,CAElB,YAAa,CADb,cAAe,CAFf,QAIF,CAEA,uEAIE,eAAgB,CADhB,SAAU,CADV,aAGF,CAIA,yBAEE,iFAEE,6BACF,CAEF","sources":["webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/SearchEngine/GPFsearchEngine.css"],"sourcesContent":["/* SEARCH ENGINE */\n\n[id^=\"GPsearchEngine-\"] {\n top: 8px;\n left: 46px;\n}\n\n[id^=\"GPsearchEngine-\"] {\n /* dsfr */\n display: flex;\n}\n\n#position-container-bottom-right > [id^=\"GPsearchEngine-\"],\n#position-container-top-right > [id^=\"GPsearchEngine-\"] {\n flex-direction: column;\n align-items: end;\n}\n/* Showing/hiding search engine input */\n\nbutton[id^=GPshowSearchEnginePicto] {\n display: inline-block;\n transition: border-radius 0s ease-out 0s;\n transition-delay: 0.5s;\n}\n\nbutton[id^=GPshowSearchEnginePicto][aria-pressed=\"true\"] {\n transition: border-radius 0.5s ease-out 0s;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] {\n border-bottom-right-radius: 0;\n transition-delay: 0s;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowAdvancedSearch],\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowGeolocate],\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowSearchByCoordinate] {\n display: none;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowAdvancedSearch],\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowGeolocate],\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowSearchByCoordinate] {\n display: inline-block;\n}\n\n[id^=GPshowSearchEngine-] + button + form[id^=GPsearchInput-] {\n max-width: 0px;\n}\n\n/* div[id^=GPautoCompleteList] {\n display: none;\n} */\n\n/* button[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] + div[id^=GPautoCompleteList] {\n display: block;\n} */\n\n/* Simple search input */\n\nform[id^=GPsearchInput-] {\n display: inline-block;\n position: relative;\n overflow: hidden;\n transition: max-width 0.5s ease-out 0s;\n}\n\nbutton[id^=GPsearchInputReset] {\n position: absolute;\n top: 0px;\n right: 0px;\n border: unset;\n}\n\n/* General panels */\n\n\n/* Advanced search picto */\n\nbutton[id^=GPshowAdvancedSearch] {\n transition: border-radius 0s ease-out 0s;\n transition-delay: 0.5s;\n}\n\n/* Advanced search panel */\n\n/* button[id^=GPshowAdvancedSearch][aria-pressed=\"true\"] + div[id^=GPadvancedSearchPanel] {\n display: inline-block;\n visibility: visible;\n opacity: 100%;\n}\n\nbutton[id^=GPshowAdvancedSearch][aria-pressed=\"false\"] + div[id^=GPadvancedSearchPanel] {\n display: none;\n visibility: hidden;\n opacity: 0%;\n} */\n\ndialog[id^=GPcoordinateSearchPanel],\ndialog[id^=GPadvancedSearchPanel] {\n height: inherit;\n vertical-align: top;\n overflow: hidden;\n bottom: unset; /* fix dsfr */\n}\n\nform[id^=GPcoordinateSearchForm],\nform[id^=GPadvancedSearchForm] {\n max-height: 250px;\n overflow-y: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n\ninput[id^=GPcoordinateSearchSubmit],\ninput[id^=GPadvancedSearchSubmit] {\n margin-top: 10px;\n margin-bottom: 15px;\n}\n\n\n\n/* Simple search input */\n\n[id^=\"GPsearchInput\"] {}\n\n\n[id^=\"GPshowSearchDiv\"]{\n display: flex;\n}\n\n/* General panels */\n\n.GPsearchFirstLineWrapper {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n/* Autocomplete list / geocode results */\n\n.GPlabelTitle {\n font-weight: bold;\n}\n\n[id^=\"GPautocompleteResults-\"] {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n[id^=\"GPautoCompleteList\"],\ndialog[id^=\"GPgeocodeResultsList\"] {\n margin-left: 33px;\n}\n\n[id^=\"GPautoCompleteList\"] {\n /* overflow-y: auto; */\n}\n\ndialog[id^=\"GPgeocodeResultsList\"] {\n top: 35px;\n border-radius: 4px;\n height: inherit;\n bottom: unset; /* fix dsfr */\n}\n\n[id^=\"GPautocompleteResultsSuggest\"],\n[id^=\"GPautocompleteResultsLocation\"] {\n width: inherit;\n padding: 0;\n overflow-y: auto;\n}\n\n/* Mode Mobile */\n\n@media (max-width: 576px) {\n\n button[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] {\n /* 56px: widget de gauche, 40px: bouton loupe, 58px: bouton géoloc, 16px: padding + border des boutons droite, 10px: padding du bouton géoloc*/\n max-width: calc(100vw - 56px - 40px - 58px - 16px - 10px);\n }\n\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"GpfExtOlSearchEngine.css","mappings":";;;;;;;;;;;;;GAEA,sBAOE,YAAa,CALb,SAAU,CADV,OAEF,CAOA,2GAGE,eAAgB,CADhB,qBAEF,CAGA,oCACE,oBAAqB,CACrB,uCAAwC,CACxC,oBACF,CAEA,uDACE,wCACF,CAEA,wDACE,4BAA6B,CAC7B,mBACF,CAEA,oWAGE,YACF,CAEA,iWAGE,oBACF,CAEA,0DACE,WACF,CAYA,yBACE,oBAAqB,CAErB,eAAgB,CADhB,iBAAkB,CAElB,oCACF,CAEA,+BAIE,YAAa,CAHb,iBAAkB,CAElB,OAAU,CADV,KAGF,CAOA,iCACE,uCAAwC,CACxC,oBACF,CAgBA,sEAKE,YAAa,CAHb,cAAe,CAEf,eAAgB,CADhB,kBAGF,CAEA,gEAEE,gBAAiB,CACjB,eAAgB,CAChB,iBAAkB,CAClB,kBACF,CAEA,sEAGE,kBAAmB,CADnB,eAEF,CASA,sBACE,YACF,CAIA,0BAGE,kBAAmB,CAFnB,YAAa,CACb,kBAEF,CAIA,cACE,eAAiB,CACjB,eACF,CAEA,6BACE,YAAa,CACb,qBAAsB,CACtB,UACF,CAEA,0DAEE,gBACF,CAMA,iCAEE,iBAAkB,CAElB,YAAa,CADb,cAAe,CAFf,QAIF,CAEA,uEAIE,eAAgB,CADhB,SAAU,CADV,aAGF,CAIA,yBAEE,iFAEE,6BACF,CAEF","sources":["webpack://geopf-extensions-openlayers/./src/packages/CSS/Controls/SearchEngine/GPFsearchEngine.css"],"sourcesContent":["/* SEARCH ENGINE */\n\n[id^=\"GPsearchEngine-\"] {\n top: 8px;\n left: 46px;\n}\n\n[id^=\"GPsearchEngine-\"] {\n /* dsfr */\n display: flex;\n}\n\n#position-container-bottom-right > [id^=\"GPsearchEngine-\"],\n#position-container-top-right > [id^=\"GPsearchEngine-\"] {\n flex-direction: column;\n align-items: end;\n}\n/* Showing/hiding search engine input */\n\nbutton[id^=GPshowSearchEnginePicto] {\n display: inline-block;\n transition: border-radius 0s ease-out 0s;\n transition-delay: 0.5s;\n}\n\nbutton[id^=GPshowSearchEnginePicto][aria-pressed=\"true\"] {\n transition: border-radius 0.5s ease-out 0s;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] {\n border-bottom-right-radius: 0;\n transition-delay: 0s;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowAdvancedSearch],\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowGeolocate],\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowSearchByCoordinate] {\n display: none;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowAdvancedSearch],\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowGeolocate],\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] ~ div button[id^=GPshowSearchByCoordinate] {\n display: inline-block;\n}\n\n[id^=GPshowSearchEngine-] + button + form[id^=GPsearchInput-] {\n max-width: 0px;\n}\n\n/* div[id^=GPautoCompleteList] {\n display: none;\n} */\n\n/* button[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] + div[id^=GPautoCompleteList] {\n display: block;\n} */\n\n/* Simple search input */\n\nform[id^=GPsearchInput-] {\n display: inline-block;\n position: relative;\n overflow: hidden;\n transition: max-width 0.5s ease-out 0s;\n}\n\nbutton[id^=GPsearchInputReset] {\n position: absolute;\n top: 0px;\n right: 0px;\n border: unset;\n}\n\n/* General panels */\n\n\n/* Advanced search picto */\n\nbutton[id^=GPshowAdvancedSearch] {\n transition: border-radius 0s ease-out 0s;\n transition-delay: 0.5s;\n}\n\n/* Advanced search panel */\n\n/* button[id^=GPshowAdvancedSearch][aria-pressed=\"true\"] + div[id^=GPadvancedSearchPanel] {\n display: inline-block;\n visibility: visible;\n opacity: 100%;\n}\n\nbutton[id^=GPshowAdvancedSearch][aria-pressed=\"false\"] + div[id^=GPadvancedSearchPanel] {\n display: none;\n visibility: hidden;\n opacity: 0%;\n} */\n\ndialog[id^=GPcoordinateSearchPanel],\ndialog[id^=GPadvancedSearchPanel] {\n height: inherit;\n vertical-align: top;\n overflow: hidden;\n bottom: unset; /* fix dsfr */\n}\n\nform[id^=GPcoordinateSearchForm],\nform[id^=GPadvancedSearchForm] {\n max-height: 250px;\n overflow-y: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n\ninput[id^=GPcoordinateSearchSubmit],\ninput[id^=GPadvancedSearchSubmit] {\n margin-top: 10px;\n margin-bottom: 15px;\n}\n\n\n\n/* Simple search input */\n\n[id^=\"GPsearchInput\"] {}\n\n\n[id^=\"GPshowSearchDiv\"]{\n display: flex;\n}\n\n/* General panels */\n\n.GPsearchFirstLineWrapper {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n/* Autocomplete list / geocode results */\n\n.GPlabelTitle {\n font-weight: bold;\n margin-bottom: 0;\n}\n\n[id^=\"GPautocompleteResults-\"] {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n[id^=\"GPautoCompleteList\"],\ndialog[id^=\"GPgeocodeResultsList\"] {\n margin-left: 33px;\n}\n\n[id^=\"GPautoCompleteList\"] {\n /* overflow-y: auto; */\n}\n\ndialog[id^=\"GPgeocodeResultsList\"] {\n top: 35px;\n border-radius: 4px;\n height: inherit;\n bottom: unset; /* fix dsfr */\n}\n\n[id^=\"GPautocompleteResultsSuggest\"],\n[id^=\"GPautocompleteResultsLocation\"] {\n width: inherit;\n padding: 0;\n overflow-y: auto;\n}\n\n/* Mode Mobile */\n\n@media (max-width: 576px) {\n\n button[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] {\n /* 56px: widget de gauche, 40px: bouton loupe, 58px: bouton géoloc, 16px: padding + border des boutons droite, 10px: padding du bouton géoloc*/\n max-width: calc(100vw - 56px - 40px - 58px - 16px - 10px);\n }\n\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/modules/GpfExtOlSearchEngine.js b/dist/modules/GpfExtOlSearchEngine.js index 933f9477..be59846c 100644 --- a/dist/modules/GpfExtOlSearchEngine.js +++ b/dist/modules/GpfExtOlSearchEngine.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var __webpack_modules__={4582:(t,e)=>{"use strict";function r(t,e){return void 0===e&&(e=Object),e&&"function"==typeof e.getOwnPropertyDescriptors&&(t=e.create(null,e.getOwnPropertyDescriptors(t))),e&&"function"==typeof e.freeze?e.freeze(t):t}function n(t,e){return Object.prototype.hasOwnProperty.call(t,e)}var i=r({allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,formnovalidate:!0,hidden:!0,ismap:!0,itemscope:!0,loop:!0,multiple:!0,muted:!0,nomodule:!0,novalidate:!0,open:!0,playsinline:!0,readonly:!0,required:!0,reversed:!0,selected:!0});var o=r({area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});var s=r({script:!1,style:!1,textarea:!0,title:!0});function a(t){return t===l.HTML}var l=r({HTML:"text/html",XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),u=Object.keys(l).map((function(t){return l[t]}));var c=r({HTML:"http://www.w3.org/1999/xhtml",SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});e.assign=function(t,e){if(null===t||"object"!=typeof t)throw new TypeError("target is not an object");for(var r in e)n(e,r)&&(t[r]=e[r]);return t},e.find=function(t,e,r){if(void 0===r&&(r=Array.prototype),t&&"function"==typeof r.find)return r.find.call(t,e);for(var i=0;i-1},e.MIME_TYPE=l,e.NAMESPACE=c},5752:(t,e,r)=>{"use strict";var n=r(4582),i=r(4722),o=r(2983),s=r(6559),a=r(4466),l=i.DOMImplementation,u=n.hasDefaultHTMLNamespace,c=n.isHTMLMimeType,h=n.isValidMimeType,p=n.MIME_TYPE,d=n.NAMESPACE,g=o.ParseError,f=a.XMLReader;function m(t){return t.replace(/\r[\n\u0085]/g,"\n").replace(/[\r\u0085\u2028]/g,"\n")}function y(t){if(t=t||{locator:!0},this.assign=t.assign||n.assign,this.domHandler=t.domHandler||A,this.onError=t.onError||t.errorHandler,t.errorHandler&&"function"!=typeof t.errorHandler)throw new TypeError("errorHandler object is no longer supported, switch to onError!");t.errorHandler&&t.errorHandler("warning","The `errorHandler` option has been deprecated, use `onError` instead!",this),this.normalizeLineEndings=t.normalizeLineEndings||m,this.locator=!!t.locator,this.xmlns=this.assign(Object.create(null),t.xmlns)}function A(t){var e=t||{};this.mimeType=e.mimeType||p.XML_APPLICATION,this.defaultNamespace=e.defaultNamespace||null,this.cdata=!1,this.currentElement=void 0,this.doc=void 0,this.locator=void 0,this.onError=e.onError}function I(t,e){e.lineNumber=t.lineNumber,e.columnNumber=t.columnNumber}function C(t,e,r){return"string"==typeof t?t.substr(e,r):t.length>=e+r||e?new java.lang.String(t,e,r)+"":t}function v(t,e){t.currentElement?t.currentElement.appendChild(e):t.doc.appendChild(e)}y.prototype.parseFromString=function(t,e){if(!h(e))throw new TypeError('DOMParser.parseFromString: the provided mimeType "'+e+'" is not valid.');var r=this.assign(Object.create(null),this.xmlns),i=s.XML_ENTITIES,o=r[""]||null;u(e)?(i=s.HTML_ENTITIES,o=d.HTML):e===p.XML_SVG_IMAGE&&(o=d.SVG),r[""]=o,r.xml=r.xml||d.XML;var a=new this.domHandler({mimeType:e,defaultNamespace:o,onError:this.onError}),l=this.locator?{}:void 0;this.locator&&a.setDocumentLocator(l);var c=new f;return c.errorHandler=a,c.domBuilder=a,!n.isHTMLMimeType(e)&&"string"!=typeof t&&c.errorHandler.fatalError("source is not a string"),c.parse(this.normalizeLineEndings(String(t)),r,i),a.doc.documentElement||c.errorHandler.fatalError("missing root element"),a.doc},A.prototype={startDocument:function(){var t=new l;this.doc=c(this.mimeType)?t.createHTMLDocument(!1):t.createDocument(this.defaultNamespace,"")},startElement:function(t,e,r,n){var i=this.doc,o=i.createElementNS(t,r||e),s=n.length;v(this,o),this.currentElement=o,this.locator&&I(this.locator,o);for(var a=0;a{"use strict";var n=r(4582),i=n.find,o=n.hasDefaultHTMLNamespace,s=n.hasOwn,a=n.isHTMLMimeType,l=n.isHTMLRawTextElement,u=n.isHTMLVoidElement,c=n.MIME_TYPE,h=n.NAMESPACE,p=Symbol(),d=r(2983),g=d.DOMException,f=d.DOMExceptionName,m=r(2763);function y(t){if(t!==p)throw new TypeError("Illegal constructor")}function A(t){return""!==t}function I(t,e){return s(t,e)||(t[e]=!0),t}function C(t){if(!t)return[];var e=function(t){return t?t.split(/[\t\n\f\r ]+/).filter(A):[]}(t);return Object.keys(e.reduce(I,{}))}function v(t){if(!m.QName_exact.test(t))throw new g(g.INVALID_CHARACTER_ERR,'invalid character in qualified name "'+t+'"')}function _(t,e){v(e),t=t||null;var r=null,i=e;if(e.indexOf(":")>=0){var o=e.split(":");r=o[0],i=o[1]}if(null!==r&&null===t)throw new g(g.NAMESPACE_ERR,"prefix is non-null and namespace is null");if("xml"===r&&t!==n.NAMESPACE.XML)throw new g(g.NAMESPACE_ERR,'prefix is "xml" and namespace is not the XML namespace');if(("xmlns"===r||"xmlns"===e)&&t!==n.NAMESPACE.XMLNS)throw new g(g.NAMESPACE_ERR,'either qualifiedName or prefix is "xmlns" and namespace is not the XMLNS namespace');if(t===n.NAMESPACE.XMLNS&&"xmlns"!==r&&"xmlns"!==e)throw new g(g.NAMESPACE_ERR,'namespace is the XMLNS namespace and neither qualifiedName nor prefix is "xmlns"');return[t,r,i]}function b(t,e){for(var r in t)s(t,r)&&(e[r]=t[r])}function w(t,e){var r=t.prototype;if(!(r instanceof e)){function n(){}n.prototype=e.prototype,b(r,n=new n),t.prototype=r=n}r.constructor!=t&&("function"!=typeof t&&console.error("unknown Class:"+t),r.constructor=t)}var S={},E=S.ELEMENT_NODE=1,x=S.ATTRIBUTE_NODE=2,M=S.TEXT_NODE=3,R=S.CDATA_SECTION_NODE=4,T=S.ENTITY_REFERENCE_NODE=5,P=S.ENTITY_NODE=6,G=S.PROCESSING_INSTRUCTION_NODE=7,N=S.COMMENT_NODE=8,O=S.DOCUMENT_NODE=9,k=S.DOCUMENT_TYPE_NODE=10,L=S.DOCUMENT_FRAGMENT_NODE=11,D=S.NOTATION_NODE=12,j=n.freeze({DOCUMENT_POSITION_DISCONNECTED:1,DOCUMENT_POSITION_PRECEDING:2,DOCUMENT_POSITION_FOLLOWING:4,DOCUMENT_POSITION_CONTAINS:8,DOCUMENT_POSITION_CONTAINED_BY:16,DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:32});function U(t){for(var e=[];t.parentNode||t.ownerElement;)t=t.parentNode||t.ownerElement,e.unshift(t);return e}function z(t,e){if(e.length=0){for(var i=e.length-1;n<=i;)e[n]=e[++n];if(e.length=i,t){var o=t.ownerDocument;o&&tt(o,t,r),r.ownerElement=null}}}function Z(){}function K(t){y(t)}function J(t){return("<"==t?"<":">"==t&&">")||"&"==t&&"&"||'"'==t&&"""||"&#"+t.charCodeAt()+";"}function Q(t,e){if(e(t))return!0;if(t=t.firstChild)do{if(Q(t,e))return!0}while(t=t.nextSibling)}function $(t,e){y(t);var r=e||{};this.ownerDocument=this,this.contentType=r.contentType||c.XML_APPLICATION,this.type=a(this.contentType)?"html":"xml"}function tt(t,e,r,n){t&&t._inc++,r.namespaceURI===h.XMLNS&&delete e._nsMap[r.prefix?r.localName:""]}function et(t,e,r){if(t&&t._inc){t._inc++;var n=e.childNodes;if(r&&!r.nextSibling)n[n.length++]=r;else{for(var i=e.firstChild,o=0;i;)n[o++]=i,i=i.nextSibling;n.length=o,delete n[n.length]}}}function rt(t,e){if(t!==e.parentNode)throw new g(g.NOT_FOUND_ERR,"child's parent is not parent");var r=e.previousSibling,n=e.nextSibling;return r?r.nextSibling=n:t.firstChild=n,n?n.previousSibling=r:t.lastChild=r,et(t.ownerDocument,t),e.parentNode=null,e.previousSibling=null,e.nextSibling=null,e}function nt(t){return t&&t.nodeType===K.DOCUMENT_TYPE_NODE}function it(t){return t&&t.nodeType===K.ELEMENT_NODE}function ot(t){return t&&t.nodeType===K.TEXT_NODE}function st(t,e){var r=t.childNodes||[];if(i(r,it)||nt(e))return!1;var n=i(r,nt);return!(e&&n&&r.indexOf(n)>r.indexOf(e))}function at(t,e){var r=t.childNodes||[];if(i(r,(function(t){return it(t)&&t!==e})))return!1;var n=i(r,nt);return!(e&&n&&r.indexOf(n)>r.indexOf(e))}function lt(t,e,r){if(!function(t){return t&&(t.nodeType===K.DOCUMENT_NODE||t.nodeType===K.DOCUMENT_FRAGMENT_NODE||t.nodeType===K.ELEMENT_NODE)}(t))throw new g(g.HIERARCHY_REQUEST_ERR,"Unexpected parent node type "+t.nodeType);if(r&&r.parentNode!==t)throw new g(g.NOT_FOUND_ERR,"child not in parent");if(!function(t){return t&&(t.nodeType===K.CDATA_SECTION_NODE||t.nodeType===K.COMMENT_NODE||t.nodeType===K.DOCUMENT_FRAGMENT_NODE||t.nodeType===K.DOCUMENT_TYPE_NODE||t.nodeType===K.ELEMENT_NODE||t.nodeType===K.PROCESSING_INSTRUCTION_NODE||t.nodeType===K.TEXT_NODE)}(e)||nt(e)&&t.nodeType!==K.DOCUMENT_NODE)throw new g(g.HIERARCHY_REQUEST_ERR,"Unexpected node type "+e.nodeType+" for parent node type "+t.nodeType)}function ut(t,e,r){var n=t.childNodes||[],o=e.childNodes||[];if(e.nodeType===K.DOCUMENT_FRAGMENT_NODE){var s=o.filter(it);if(s.length>1||i(o,ot))throw new g(g.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===s.length&&!st(t,r))throw new g(g.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(it(e)&&!st(t,r))throw new g(g.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(nt(e)){if(i(n,nt))throw new g(g.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var a=i(n,it);if(r&&n.indexOf(a)1||i(o,ot))throw new g(g.HIERARCHY_REQUEST_ERR,"More than one element or text in fragment");if(1===s.length&&!at(t,r))throw new g(g.HIERARCHY_REQUEST_ERR,"Element in fragment can not be inserted before doctype")}if(it(e)&&!at(t,r))throw new g(g.HIERARCHY_REQUEST_ERR,"Only one element can be added and only after doctype");if(nt(e)){function l(t){return nt(t)&&t!==r}if(i(n,l))throw new g(g.HIERARCHY_REQUEST_ERR,"Only one doctype is allowed");var a=i(n,it);if(r&&n.indexOf(a)=0;f--){if(""===(y=n[f]).prefix&&y.namespace===t.namespaceURI){d=y.namespace;break}}if(d!==t.namespaceURI)for(f=n.length-1;f>=0;f--){var y;if((y=n[f]).namespace===t.namespaceURI){y.prefix&&(p=y.prefix+":"+c);break}}}e.push("<",p);for(var A=0;A");else{if(e.push(">"),i&&l(c))for(;a;)a.data?e.push(a.data):Mt(a,e,r,n.slice()),a=a.nextSibling;else for(;a;)Mt(a,e,r,n.slice()),a=a.nextSibling;e.push("")}return;case O:case L:for(a=t.firstChild;a;)Mt(a,e,r,n.slice()),a=a.nextSibling;return;case x:return xt(e,t.name,t.value);case M:return e.push(t.data.replace(/[<&>]/g,J));case R:return e.push(m.CDATA_START,t.data,m.CDATA_END);case N:return e.push(m.COMMENT_START,t.data,m.COMMENT_END);case k:var b=t.publicId,w=t.systemId;return e.push(m.DOCTYPE_DECL_START," ",t.name),b?(e.push(" ",m.PUBLIC," ",b),w&&"."!==w&&e.push(" ",w)):w&&"."!==w&&e.push(" ",m.SYSTEM," ",w),t.internalSubset&&e.push(" [",t.internalSubset,"]"),void e.push(">");case G:return e.push("");case T:return e.push("&",t.nodeName,";");default:e.push("??",t.nodeName)}}function Rt(t,e,r){var n;switch(e.nodeType){case E:(n=e.cloneNode(!1)).ownerDocument=t;case L:break;case x:r=!0}if(n||(n=e.cloneNode(!1)),n.ownerDocument=t,n.parentNode=null,r)for(var i=e.firstChild;i;)n.appendChild(Rt(t,i,r)),i=i.nextSibling;return n}function Tt(t,e,r){var n=new e.constructor(p);for(var i in e)if(s(e,i)){var o=e[i];"object"!=typeof o&&o!=n[i]&&(n[i]=o)}switch(e.childNodes&&(n.childNodes=new F),n.ownerDocument=t,n.nodeType){case E:var a=e.attributes,l=n.attributes=new H,u=a.length;l._ownerElement=n;for(var c=0;c=0&&tq(e.ownerDocument)?j.DOCUMENT_POSITION_FOLLOWING:j.DOCUMENT_POSITION_PRECEDING);var a=U(e),l=U(r);if(!n&&l.indexOf(e)>=0||i&&e===r)return j.DOCUMENT_POSITION_CONTAINS+j.DOCUMENT_POSITION_PRECEDING;if(!i&&a.indexOf(r)>=0||n&&e===r)return j.DOCUMENT_POSITION_CONTAINED_BY+j.DOCUMENT_POSITION_FOLLOWING;var u=z(l,a);for(var c in u.childNodes){var h=u.childNodes[c];if(h===r)return j.DOCUMENT_POSITION_FOLLOWING;if(h===e)return j.DOCUMENT_POSITION_PRECEDING;if(l.indexOf(h)>=0)return j.DOCUMENT_POSITION_FOLLOWING;if(a.indexOf(h)>=0)return j.DOCUMENT_POSITION_PRECEDING}return 0}},b(S,K),b(S,K.prototype),b(j,K),b(j,K.prototype),$.prototype={implementation:null,nodeName:"#document",nodeType:O,doctype:null,documentElement:null,_inc:1,insertBefore:function(t,e){if(t.nodeType===L){for(var r=t.firstChild;r;){var n=r.nextSibling;this.insertBefore(r,e),r=n}return t}return ht(this,t,e),t.ownerDocument=this,null===this.documentElement&&t.nodeType===E&&(this.documentElement=t),t},removeChild:function(t){var e=rt(this,t);return e===this.documentElement&&(this.documentElement=null),e},replaceChild:function(t,e){ht(this,t,e,ct),t.ownerDocument=this,e&&this.removeChild(e),it(t)&&(this.documentElement=t)},importNode:function(t,e){return Rt(this,t,e)},getElementById:function(t){var e=null;return Q(this.documentElement,(function(r){if(r.nodeType==E&&r.getAttribute("id")==t)return e=r,!0})),e},createElement:function(t){var e=new pt(p);return e.ownerDocument=this,"html"===this.type&&(t=t.toLowerCase()),o(this.contentType)&&(e.namespaceURI=h.HTML),e.nodeName=t,e.tagName=t,e.localName=t,e.childNodes=new F,(e.attributes=new H)._ownerElement=e,e},createDocumentFragment:function(){var t=new _t(p);return t.ownerDocument=this,t.childNodes=new F,t},createTextNode:function(t){var e=new ft(p);return e.ownerDocument=this,e.childNodes=new F,e.appendData(t),e},createComment:function(t){var e=new mt(p);return e.ownerDocument=this,e.childNodes=new F,e.appendData(t),e},createCDATASection:function(t){var e=new yt(p);return e.ownerDocument=this,e.childNodes=new F,e.appendData(t),e},createProcessingInstruction:function(t,e){var r=new bt(p);return r.ownerDocument=this,r.childNodes=new F,r.nodeName=r.target=t,r.nodeValue=r.data=e,r},createAttribute:function(t){if(!m.QName_exact.test(t))throw new g(g.INVALID_CHARACTER_ERR,'invalid character in name "'+t+'"');return"html"===this.type&&(t=t.toLowerCase()),this._createAttribute(t)},_createAttribute:function(t){var e=new dt(p);return e.ownerDocument=this,e.childNodes=new F,e.name=t,e.nodeName=t,e.localName=t,e.specified=!0,e},createEntityReference:function(t){if(!m.Name.test(t))throw new g(g.INVALID_CHARACTER_ERR,'not a valid xml name "'+t+'"');if("html"===this.type)throw new g("document is an html document",f.NotSupportedError);var e=new vt(p);return e.ownerDocument=this,e.childNodes=new F,e.nodeName=t,e},createElementNS:function(t,e){var r=_(t,e),n=new pt(p),i=n.attributes=new H;return n.childNodes=new F,n.ownerDocument=this,n.nodeName=e,n.tagName=e,n.namespaceURI=r[0],n.prefix=r[1],n.localName=r[2],i._ownerElement=n,n},createAttributeNS:function(t,e){var r=_(t,e),n=new dt(p);return n.ownerDocument=this,n.childNodes=new F,n.nodeName=e,n.name=e,n.specified=!0,n.namespaceURI=r[0],n.prefix=r[1],n.localName=r[2],n}},w($,K),pt.prototype={nodeType:E,attributes:null,getQualifiedName:function(){return this.prefix?this.prefix+":"+this.localName:this.localName},_isInHTMLDocumentAndNamespace:function(){return"html"===this.ownerDocument.type&&this.namespaceURI===h.HTML},hasAttribute:function(t){return!!this.getAttributeNode(t)},getAttribute:function(t){var e=this.getAttributeNode(t);return e?e.value:null},getAttributeNode:function(t){return this._isInHTMLDocumentAndNamespace()&&(t=t.toLowerCase()),this.attributes.getNamedItem(t)},setAttribute:function(t,e){this._isInHTMLDocumentAndNamespace()&&(t=t.toLowerCase());var r=this.getAttributeNode(t);r?r.value=r.nodeValue=""+e:((r=this.ownerDocument._createAttribute(t)).value=r.nodeValue=""+e,this.setAttributeNode(r))},removeAttribute:function(t){var e=this.getAttributeNode(t);e&&this.removeAttributeNode(e)},setAttributeNode:function(t){return this.attributes.setNamedItem(t)},setAttributeNodeNS:function(t){return this.attributes.setNamedItemNS(t)},removeAttributeNode:function(t){return this.attributes.removeNamedItem(t.nodeName)},removeAttributeNS:function(t,e){var r=this.getAttributeNodeNS(t,e);r&&this.removeAttributeNode(r)},hasAttributeNS:function(t,e){return null!=this.getAttributeNodeNS(t,e)},getAttributeNS:function(t,e){var r=this.getAttributeNodeNS(t,e);return r?r.value:null},setAttributeNS:function(t,e,r){var n=_(t,e)[2],i=this.getAttributeNodeNS(t,n);i?i.value=i.nodeValue=""+r:((i=this.ownerDocument.createAttributeNS(t,e)).value=i.nodeValue=""+r,this.setAttributeNode(i))},getAttributeNodeNS:function(t,e){return this.attributes.getNamedItemNS(t,e)},getElementsByClassName:function(t){var e=C(t);return new B(this,(function(r){var n=[];return e.length>0&&Q(r,(function(i){if(i!==r&&i.nodeType===E){var o=i.getAttribute("class");if(o){var s=t===o;if(!s){var a=C(o);s=e.every((l=a,function(t){return l&&-1!==l.indexOf(t)}))}s&&n.push(i)}}var l})),n}))},getElementsByTagName:function(t){var e="html"===(this.nodeType===O?this:this.ownerDocument).type,r=t.toLowerCase();return new B(this,(function(n){var i=[];return Q(n,(function(o){o!==n&&o.nodeType===E&&(("*"===t||o.getQualifiedName()===(e&&o.namespaceURI===h.HTML?r:t))&&i.push(o))})),i}))},getElementsByTagNameNS:function(t,e){return new B(this,(function(r){var n=[];return Q(r,(function(i){i===r||i.nodeType!==E||"*"!==t&&i.namespaceURI!==t||"*"!==e&&i.localName!=e||n.push(i)})),n}))}},$.prototype.getElementsByClassName=pt.prototype.getElementsByClassName,$.prototype.getElementsByTagName=pt.prototype.getElementsByTagName,$.prototype.getElementsByTagNameNS=pt.prototype.getElementsByTagNameNS,w(pt,K),dt.prototype.nodeType=x,w(dt,K),gt.prototype={data:"",substringData:function(t,e){return this.data.substring(t,t+e)},appendData:function(t){t=this.data+t,this.nodeValue=this.data=t,this.length=t.length},insertData:function(t,e){this.replaceData(t,0,e)},deleteData:function(t,e){this.replaceData(t,e,"")},replaceData:function(t,e,r){r=this.data.substring(0,t)+r+this.data.substring(t+e),this.nodeValue=this.data=r,this.length=r.length}},w(gt,K),ft.prototype={nodeName:"#text",nodeType:M,splitText:function(t){var e=this.data,r=e.substring(t);e=e.substring(0,t),this.data=this.nodeValue=e,this.length=e.length;var n=this.ownerDocument.createTextNode(r);return this.parentNode&&this.parentNode.insertBefore(n,this.nextSibling),n}},w(ft,gt),mt.prototype={nodeName:"#comment",nodeType:N},w(mt,gt),yt.prototype={nodeName:"#cdata-section",nodeType:R},w(yt,ft),At.prototype.nodeType=k,w(At,K),It.prototype.nodeType=D,w(It,K),Ct.prototype.nodeType=P,w(Ct,K),vt.prototype.nodeType=T,w(vt,K),_t.prototype.nodeName="#document-fragment",_t.prototype.nodeType=L,w(_t,K),bt.prototype.nodeType=G,w(bt,gt),wt.prototype.serializeToString=function(t,e){return St.call(t,e)},K.prototype.toString=St;try{if(Object.defineProperty){function Gt(t){switch(t.nodeType){case E:case L:var e=[];for(t=t.firstChild;t;)7!==t.nodeType&&8!==t.nodeType&&e.push(Gt(t)),t=t.nextSibling;return e.join("");default:return t.nodeValue}}Object.defineProperty(B.prototype,"length",{get:function(){return W(this),this.$$length}}),Object.defineProperty(K.prototype,"textContent",{get:function(){return Gt(this)},set:function(t){switch(this.nodeType){case E:case L:for(;this.firstChild;)this.removeChild(this.firstChild);(t||String(t))&&this.appendChild(this.ownerDocument.createTextNode(t));break;default:this.data=t,this.value=t,this.nodeValue=t}}}),Pt=function(t,e,r){t["$$"+e]=r}}}catch(Nt){}e._updateLiveList=W,e.Attr=dt,e.CDATASection=yt,e.CharacterData=gt,e.Comment=mt,e.Document=$,e.DocumentFragment=_t,e.DocumentType=At,e.DOMImplementation=Z,e.Element=pt,e.Entity=Ct,e.EntityReference=vt,e.LiveNodeList=B,e.NamedNodeMap=H,e.Node=K,e.NodeList=F,e.Notation=It,e.Text=ft,e.ProcessingInstruction=bt,e.XMLSerializer=wt},6559:(t,e,r)=>{"use strict";var n=r(4582).freeze;e.XML_ENTITIES=n({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),e.HTML_ENTITIES=n({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),e.entityMap=e.HTML_ENTITIES},2983:(t,e,r)=>{"use strict";function n(t,e){t.prototype=Object.create(Error.prototype,{constructor:{value:t},name:{value:t.name,enumerable:!0,writable:e}})}var i=r(4582).freeze({Error:"Error",IndexSizeError:"IndexSizeError",DomstringSizeError:"DomstringSizeError",HierarchyRequestError:"HierarchyRequestError",WrongDocumentError:"WrongDocumentError",InvalidCharacterError:"InvalidCharacterError",NoDataAllowedError:"NoDataAllowedError",NoModificationAllowedError:"NoModificationAllowedError",NotFoundError:"NotFoundError",NotSupportedError:"NotSupportedError",InUseAttributeError:"InUseAttributeError",InvalidStateError:"InvalidStateError",SyntaxError:"SyntaxError",InvalidModificationError:"InvalidModificationError",NamespaceError:"NamespaceError",InvalidAccessError:"InvalidAccessError",ValidationError:"ValidationError",TypeMismatchError:"TypeMismatchError",SecurityError:"SecurityError",NetworkError:"NetworkError",AbortError:"AbortError",URLMismatchError:"URLMismatchError",QuotaExceededError:"QuotaExceededError",TimeoutError:"TimeoutError",InvalidNodeTypeError:"InvalidNodeTypeError",DataCloneError:"DataCloneError",EncodingError:"EncodingError",NotReadableError:"NotReadableError",UnknownError:"UnknownError",ConstraintError:"ConstraintError",DataError:"DataError",TransactionInactiveError:"TransactionInactiveError",ReadOnlyError:"ReadOnlyError",VersionError:"VersionError",OperationError:"OperationError",NotAllowedError:"NotAllowedError",OptOutError:"OptOutError"}),o=Object.keys(i);function s(t){return"number"==typeof t&&t>=1&&t<=25}function a(t,e){var r;s(t)?(this.name=o[t],this.message=e||""):(this.message=t,this.name="string"==typeof(r=e)&&r.substring(r.length-i.Error.length)===i.Error?e:i.Error),Error.captureStackTrace&&Error.captureStackTrace(this,a)}n(a,!0),Object.defineProperties(a.prototype,{code:{enumerable:!0,get:function(){var t=o.indexOf(this.name);return s(t)?t:0}}});for(var l={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25},u=Object.entries(l),c=0;c{"use strict";function r(t){try{"function"!=typeof t&&(t=RegExp);var e=new t("𝌆","u").exec("𝌆");return!!e&&2===e[0].length}catch(t){}return!1}var n=r();function i(t){if("["!==t.source[0])throw new Error(t+" can not be used with chars");return t.source.slice(1,t.source.lastIndexOf("]"))}function o(t,e){if("["!==t.source[0])throw new Error("/"+t.source+"/ can not be used with chars_without");if(!e||"string"!=typeof e)throw new Error(JSON.stringify(e)+" is not a valid search");if(-1===t.source.indexOf(e))throw new Error('"'+e+'" is not is /'+t.source+"/");if("-"===e&&1!==t.source.indexOf(e))throw new Error('"'+e+'" is not at the first postion of /'+t.source+"/");return new RegExp(t.source.replace(e,""),n?"u":"")}function s(t){var e=this;return new RegExp(Array.prototype.slice.call(arguments).map((function(t){var r="string"==typeof t;if(r&&void 0===e&&"|"===t)throw new Error("use regg instead of reg to wrap expressions with `|`!");return r?t:t.source})).join(""),n?"mu":"m")}function a(t){if(0===arguments.length)throw new Error("no parameters provided");return s.apply(a,["(?:"].concat(Array.prototype.slice.call(arguments),[")"]))}var l=/[-\x09\x0A\x0D\x20-\x2C\x2E-\uD7FF\uE000-\uFFFD]/;n&&(l=s("[",i(l),"\\u{10000}-\\u{10FFFF}","]"));var u=/[\x20\x09\x0D\x0A]/,c=i(u),h=s(u,"+"),p=s(u,"*"),d=/[:_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;n&&(d=s("[",i(d),"\\u{10000}-\\u{10FFFF}","]"));var g=s("[",i(d),i(/[-.0-9\xB7]/),i(/[\u0300-\u036F\u203F-\u2040]/),"]"),f=s(d,g,"*"),m=s(g,"+"),y=s("&",f,";"),A=a(/&#[0-9]+;|&#x[0-9a-fA-F]+;/),I=a(y,"|",A),C=s("%",f,";"),v=a(s('"',a(/[^%&"]/,"|",C,"|",I),"*",'"'),"|",s("'",a(/[^%&']/,"|",C,"|",I),"*","'")),_=a('"',a(/[^<&"]/,"|",I),"*",'"',"|","'",a(/[^<&']/,"|",I),"*","'"),b=s(o(d,":"),o(g,":"),"*"),w=s(b,a(":",b),"?"),S=s("^",w,"$"),E=s("(",w,")"),x=a(/"[^"]*"|'[^']*'/),M=s(/^<\?/,"(",f,")",a(h,"(",l,"*?)"),"?",/\?>/),R=/[\x20\x0D\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/,T=a('"',R,'*"',"|","'",o(R,"'"),"*'"),P="\x3c!--",G=s(P,a(o(l,"-"),"|",s("-",o(l,"-"))),"*","--\x3e"),N="#PCDATA",O=a(s(/\(/,p,N,a(p,/\|/,p,w),"*",p,/\)\*/),"|",s(/\(/,p,N,p,/\)/)),k=a("EMPTY","|","ANY","|",O,"|",s(/\([^>]+\)/,/[?*+]?/)),L=s(""),D=s("NOTATION",h,/\(/,p,f,a(p,/\|/,p,f),"*",p,/\)/),j=s(/\(/,p,m,a(p,/\|/,p,m),"*",p,/\)/),U=a(D,"|",j),z=a(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/,"|",U),q=a(/#REQUIRED|#IMPLIED/,"|",a(a("#FIXED",h),"?",_)),F=s(""),B="SYSTEM",W="PUBLIC",H=a(a(B,h,x),"|",a(W,h,T,h,x)),V=s("^",a(a(B,h,"(?",x,")"),"|",a(W,h,"(?",T,")",h,"(?",x,")"))),Y=a(h,"NDATA",h,f),X=""),K=a(v,"|",H),J=a(Z,"|",s(X,h,"%",h,f,h,K,p,">")),Q=s(W,h,T),$=s(""),tt=s(p,"=",p),et=/1[.]\d+/,rt=s(h,"version",tt,a("'",et,"'","|",'"',et,'"')),nt=/[A-Za-z][-A-Za-z0-9._]*/,it=s(/^<\?xml/,rt,a(h,"encoding",tt,a('"',nt,'"',"|","'",nt,"'")),"?",a(h,"standalone",tt,a("'",a("yes","|","no"),"'","|",'"',a("yes","|","no"),'"')),"?",p,/\?>/),ot=s(l,"*?",/\]\]>/),st=s(/",e.CDSect=st,e.Char=l,e.Comment=G,e.COMMENT_START=P,e.COMMENT_END="--\x3e",e.DOCTYPE_DECL_START="{"use strict";var n=r(4582);n.assign,n.hasDefaultHTMLNamespace,n.isHTMLMimeType,n.isValidMimeType,n.MIME_TYPE,n.NAMESPACE;var i=r(2983);i.DOMException,i.DOMExceptionName,i.ExceptionCode,i.ParseError;var o=r(4722);o.Attr,o.CDATASection,o.CharacterData,o.Comment,o.Document,o.DocumentFragment,o.DocumentType,o.DOMImplementation,o.Element,o.Entity,o.EntityReference,o.LiveNodeList,o.NamedNodeMap,o.Node,o.NodeList,o.Notation,o.ProcessingInstruction,o.Text,o.XMLSerializer;var s=r(5752);e.S4=s.DOMParser,s.onErrorStopParsing,s.onWarningStopParsing},4466:(t,e,r)=>{"use strict";var n=r(4582),i=r(2763),o=r(2983),s=n.isHTMLEscapableRawTextElement,a=n.isHTMLMimeType,l=n.isHTMLRawTextElement,u=n.hasOwn,c=n.NAMESPACE,h=o.ParseError,p=o.DOMException;function d(){}d.prototype={parse:function(t,e,r){var o=this.domBuilder;o.startDocument(),I(e,e=Object.create(null)),function(t,e,r,o,s){var l=a(o.mimeType);t.indexOf(i.UNICODE_REPLACEMENT_CHARACTER)>=0&&s.warning("Unicode replacement character detected, source encoding issues?");function c(t){if(t>65535){var e=55296+((t-=65536)>>10),r=56320+(1023&t);return String.fromCharCode(e,r)}return String.fromCharCode(t)}function d(t){var e=";"===t[t.length-1]?t:t+";";if(!l&&e!==t)return s.error("EntityRef: expecting ;"),t;var n=i.Reference.exec(e);if(!n||n[0].length!==e.length)return s.error("entity not matching Reference production: "+t),t;var o=e.slice(1,-1);return u(r,o)?r[o]:"#"===o.charAt(0)?c(parseInt(o.substr(1).replace("x","0x"))):(s.error("entity not found:"+t),t)}function I(e){if(e>T){var r=t.substring(T,e).replace(g,d);x&&C(T),o.characters(r,0,e-T),T=e}}function C(e,r){for(;e>=S&&(r=E.exec(t));)w=r.index,S=w+r[0].length,x.lineNumber++;x.columnNumber=e-w+1}var w=0,S=0,E=/.*(?:\r\n?|\n)|.*$/g,x=o.locator,M=[{currentNSMap:e}],R=[],T=0;for(;;){try{var P=t.indexOf("<",T);if(P<0){if(!l&&R.length>0)return s.fatalError("unclosed xml tag(s): "+R.join(", "));if(!t.substring(T).match(/^\s*$/)){var G=o.doc,N=G.createTextNode(t.substr(T));if(G.documentElement)return s.error("Extra content at the end of the document");G.appendChild(N),o.currentElement=N}return}if(P>T){var O=t.substring(T,P);l||0!==R.length||(O=O.replace(new RegExp(i.S_OPT.source,"g"),""))&&s.error("Unexpected content outside root element: '"+O+"'"),I(P)}switch(t.charAt(P+1)){case"/":var k=t.indexOf(">",P+2),L=t.substring(P+2,k>0?k:void 0);if(!L)return s.fatalError("end tag name missing");var D=k>0&&i.reg("^",i.QName_group,i.S_OPT,"$").exec(L);if(!D)return s.fatalError('end tag name contains invalid characters: "'+L+'"');if(!o.currentElement&&!o.doc.documentElement)return;var j=R[R.length-1]||o.currentElement.tagName||o.doc.documentElement.tagName||"";if(j!==D[1]){var U=D[1].toLowerCase();if(!l||j.toLowerCase()!==U)return s.fatalError('Opening and ending tag mismatch: "'+j+'" != "'+L+'"')}var z=M.pop();R.pop();var q=z.localNSMap;if(o.endElement(z.uri,z.localName,j),q)for(var F in q)u(q,F)&&o.endPrefixMapping(F);k++;break;case"?":x&&C(P),k=_(t,P,o,s);break;case"!":x&&C(P),k=v(t,P,o,s,l);break;default:x&&C(P);var B=new b,W=M[M.length-1].currentNSMap,H=(k=m(t,P,B,W,d,s,l),B.length);if(B.closed||(l&&n.isHTMLVoidElement(B.tagName)?B.closed=!0:R.push(B.tagName)),x&&H){for(var V=f(x,{}),Y=0;YT?T=k:I(Math.max(P,T)+1)}}(t,e,r,o,this.errorHandler),o.endDocument()}};var g=/&#?\w+;?/g;function f(t,e){return e.lineNumber=t.lineNumber,e.columnNumber=t.columnNumber,e}function m(t,e,r,n,i,o,s){function a(t,e,n){return u(r.attributeNames,t)?o.fatalError("Attribute "+t+" redefined"):!s&&e.indexOf("<")>=0?o.fatalError("Unescaped '<' not allowed in attributes values"):void r.addValue(t,e.replace(/[\t\n\r]/g," ").replace(g,i),n)}for(var l,c=++e,h=0;;){var p=t.charAt(c);switch(p){case"=":if(1===h)l=t.slice(e,c),h=3;else{if(2!==h)throw new Error("attribute equal must after attrName");h=3}break;case"'":case'"':if(3===h||1===h){if(1===h&&(o.warning('attribute value must after "="'),l=t.slice(e,c)),e=c+1,!((c=t.indexOf(p,e))>0))throw new Error("attribute value no end '"+p+"' match");a(l,d=t.slice(e,c),e-1),h=5}else{if(4!=h)throw new Error('attribute value must after "="');a(l,d=t.slice(e,c),e),o.warning('attribute "'+l+'" missed start quot('+p+")!!"),e=c+1,h=5}break;case"/":switch(h){case 0:r.setTagName(t.slice(e,c));case 5:case 6:case 7:h=7,r.closed=!0;case 4:case 1:break;case 2:r.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return o.error("unexpected end of input"),0==h&&r.setTagName(t.slice(e,c)),c;case">":switch(h){case 0:r.setTagName(t.slice(e,c));case 5:case 6:case 7:break;case 4:case 1:"/"===(d=t.slice(e,c)).slice(-1)&&(r.closed=!0,d=d.slice(0,-1));case 2:2===h&&(d=l),4==h?(o.warning('attribute "'+d+'" missed quot(")!'),a(l,d,e)):(s||o.warning('attribute "'+d+'" missed value!! "'+d+'" instead!!'),a(d,d,e));break;case 3:if(!s)return o.fatalError("AttValue: ' or \" expected")}return c;case"€":p=" ";default:if(p<=" ")switch(h){case 0:r.setTagName(t.slice(e,c)),h=6;break;case 1:l=t.slice(e,c),h=2;break;case 4:var d=t.slice(e,c);o.warning('attribute "'+d+'" missed quot(")!!'),a(l,d,e);case 5:h=6}else switch(h){case 2:s||o.warning('attribute "'+l+'" missed value!! "'+l+'" instead2!!'),a(l,l,e),e=c,h=1;break;case 5:o.warning('attribute space is required"'+l+'"!!');case 6:h=1,e=c;break;case 3:h=4,e=c;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}c++}}function y(t,e,r){for(var n=t.tagName,i=null,o=t.length;o--;){var s=t[o],a=s.qName,l=s.value;if((g=a.indexOf(":"))>0)var h=s.prefix=a.slice(0,g),p=a.slice(g+1),d="xmlns"===h&&p;else p=a,h=null,d="xmlns"===a&&"";s.localName=p,!1!==d&&(null==i&&(i=Object.create(null),I(r,r=Object.create(null))),r[d]=i[d]=l,s.uri=c.XMLNS,e.startPrefixMapping(d,l))}for(o=t.length;o--;)(s=t[o]).prefix&&("xml"===s.prefix&&(s.uri=c.XML),"xmlns"!==s.prefix&&(s.uri=r[s.prefix]));var g;(g=n.indexOf(":"))>0?(h=t.prefix=n.slice(0,g),p=t.localName=n.slice(g+1)):(h=null,p=t.localName=n);var f=t.uri=r[h||""];if(e.startElement(f,p,n,t),!t.closed)return t.currentNSMap=r,t.localNSMap=i,!0;if(e.endElement(f,p,n),i)for(h in i)u(i,h)&&e.endPrefixMapping(h)}function A(t,e,r,n,i){var o=s(r);if(o||l(r)){var a=t.indexOf("",e),u=t.substring(e+1,a);return o&&(u=u.replace(g,n)),i.characters(u,0,u.length),a}return e+1}function I(t,e){for(var r in t)u(t,r)&&(e[r]=t[r])}function C(t,e){var r=e;function n(e){return e=e||0,t.charAt(r+e)}function o(t){r+=t=t||1}function s(){return t.substring(r)}return{char:n,getIndex:function(){return r},getMatch:function(t){var e=i.reg("^",t).exec(s());return e?(o(e[0].length),e[0]):null},getSource:function(){return t},skip:o,skipBlanks:function(){for(var e=0;r"!==s.char()?n.fatalError("doctype not terminated with > at position "+s.getIndex()):(s.skip(1),r.startDTD(u.name,u.publicId,u.systemId,u.internalSubset),r.endDTD(),s.getIndex());default:return n.fatalError('Not well-formed XML starting with "0)return n.fatalError("processing instruction at position "+e+" is an xml declaration which is only at the start of the document");if(!i.XMLDecl.test(t.substring(e)))return n.fatalError("xml declaration is not well-formed")}return r.processingInstruction(o[1],o[2]),e+o[0].length}function b(){this.attributeNames=Object.create(null)}b.prototype={setTagName:function(t){if(!i.QName_exact.test(t))throw new Error("invalid tagName:"+t);this.tagName=t},addValue:function(t,e,r){if(!i.QName_exact.test(t))throw new Error("invalid attribute:"+t);this.attributeNames[t]=this.length,this[this.length++]={qName:t,value:e,offset:r}},length:0,getLocalName:function(t){return this[t].localName},getLocator:function(t){return this[t].locator},getQName:function(t){return this[t].qName},getURI:function(t){return this[t].uri},getValue:function(t){return this[t].value}},e.XMLReader=d,e.parseUtils=C,e.parseDoctypeCommentOrCData=v},1596:(t,e,r)=>{"use strict";r.d(e,{default:()=>go});const n=ol.layer.VectorTile;var i=r.n(n);const o=ol.source.VectorTile;var s=r.n(o);const a=ol.source.TileJSON;var l=r.n(a);const u=ol.format.MVT;var c=r.n(u);const h=ol.Observable,p=ol.style.Circle,d=ol.style.Fill,g=ol.style.Icon;new Array(6);function f(t,e,r,n,i,o,s,a){const l=Math.sin(o),u=Math.cos(o);return t[0]=n*u,t[1]=i*l,t[2]=-n*l,t[3]=i*u,t[4]=s*n*u-a*n*l+e,t[5]=s*i*l+a*i*u+r,t}function m(t,e,r,n,i){return i?(i[0]=t,i[1]=e,i[2]=r,i[3]=n,i):[t,e,r,n]}function y(t){return m(1/0,1/0,-1/0,-1/0,t)}function A(t,e,r,n,i){return function(t,e,r,n,i){for(;r1?(r=i,n=o):l>0&&(r+=s*l,n+=a*l)}return function(t,e,r,n){const i=r-t,o=n-e;return i*i+o*o}(t,e,r,n)}function b(t,e,r,n,i,o,s){const a=(r-e)/n;if(a<3){for(;e0;){const r=u.pop(),o=u.pop();let s=0;const a=t[o],h=t[o+1],p=t[r],d=t[r+1];for(let e=o+n;es&&(c=e,s=r)}s>i&&(l[(c-e)/n]=1,o+n0&&g>p)&&(d<0&&f0&&f>d)?(a=r,l=h):(o[s++]=a,o[s++]=l,u=a,c=l,a=r,l=h)}return o[s++]=a,o[s++]=l,s}function x(t,e,r,n,i,o,s,a){for(let l=0,u=r.length;le?1:to&&(r-a)*(o-l)-(i-a)*(n-l)>0&&s++:n<=o&&(r-a)*(o-l)-(i-a)*(n-l)<0&&s--,a=r,l=n}return 0!==s}function P(t,e,r,n,i,o){if(0===r.length)return!1;if(!T(t,e,r[0],n,i,o))return!1;for(let e=1,s=r.length;ey&&(u=(c+h)/2,P(t,e,r,n,u,g)&&(m=u,y=i)),c=h}return isNaN(m)&&(m=i[o]),s?(s.push(m,g,y),s):[m,g,y]}const N={radians:6370997/(2*Math.PI),degrees:2*Math.PI*6370997/360,ft:.3048,m:1,"us-ft":1200/3937};const O=class{constructor(t){this.code_=t.code,this.units_=t.units,this.extent_=void 0!==t.extent?t.extent:null,this.worldExtent_=void 0!==t.worldExtent?t.worldExtent:null,this.axisOrientation_=void 0!==t.axisOrientation?t.axisOrientation:"enu",this.global_=void 0!==t.global&&t.global,this.canWrapX_=!(!this.global_||!this.extent_),this.getPointResolutionFunc_=t.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=t.metersPerUnit}canWrapX(){return this.canWrapX_}getCode(){return this.code_}getExtent(){return this.extent_}getUnits(){return this.units_}getMetersPerUnit(){return this.metersPerUnit_||N[this.units_]}getWorldExtent(){return this.worldExtent_}getAxisOrientation(){return this.axisOrientation_}isGlobal(){return this.global_}setGlobal(t){this.global_=t,this.canWrapX_=!(!t||!this.extent_)}getDefaultTileGrid(){return this.defaultTileGrid_}setDefaultTileGrid(t){this.defaultTileGrid_=t}setExtent(t){this.extent_=t,this.canWrapX_=!(!this.global_||!t)}setWorldExtent(t){this.worldExtent_=t}setGetPointResolution(t){this.getPointResolutionFunc_=t}getPointResolutionFunc(){return this.getPointResolutionFunc_}},k=6378137,L=Math.PI*k,D=[-L,-L,L,L],j=[-180,-85,180,85],U=k*Math.log(Math.tan(Math.PI/2));class z extends O{constructor(t){super({code:t,units:"m",extent:D,global:!0,worldExtent:j,getPointResolution:function(t,e){return t/Math.cosh(e[1]/k)}})}}const q=[new z("EPSG:3857"),new z("EPSG:102100"),new z("EPSG:102113"),new z("EPSG:900913"),new z("http://www.opengis.net/def/crs/EPSG/0/3857"),new z("http://www.opengis.net/gml/srs/epsg.xml#3857")];function F(t,e,r,n){const i=t.length;r=r>1?r:2,n=n??r,void 0===e&&(e=r>2?t.slice():new Array(i));for(let r=0;rU?n=U:n<-U&&(n=-U),e[r+1]=n}return e}function B(t,e,r,n){const i=t.length;r=r>1?r:2,n=n??r,void 0===e&&(e=r>2?t.slice():new Array(i));for(let r=0;r32700&&e<32761?r=e-32700:e>32600&&e<32661&&(n=!0,r=e-32600),r?{number:r,north:n}:null}const tt=[function(t){return $(t)?new O({code:t,units:"m"}):null}];function et(t,e){if(void 0!==e)for(let r=0,n=t.length;r0}function ut(t,e,r,n,i,o,s){let a,l;const u=(r-e)/n;if(1===u)a=e;else if(2===u)a=e,l=i;else if(0!==u){let o=t[e],s=t[e+1],u=0;const c=[0];for(let i=e+n;i>1),i=+r(t[n],e),i<0?o=n+1:(s=n,a=!i);return a?o:~o}(c,h);p<0?(l=(h-c[-p-2])/(c[-p-1]-c[-p-2]),a=e+(-p-2)*n):a=e+p*n}s=s>1?s:2,o=o||new Array(s);for(let e=0;e{if(t===this.squaredTolerance_)return this.simplifiedGeometry_;this.simplifiedGeometry_=this.clone(),e&&this.simplifiedGeometry_.applyTransform(e);const r=this.simplifiedGeometry_.getFlatCoordinates();let n;switch(this.type_){case"LineString":r.length=b(r,0,this.simplifiedGeometry_.flatCoordinates_.length,this.simplifiedGeometry_.stride_,t,r,0),n=[r.length];break;case"MultiLineString":n=[],r.length=w(r,0,this.simplifiedGeometry_.ends_,this.simplifiedGeometry_.stride_,t,r,0,n);break;case"Polygon":n=[],r.length=x(r,0,this.simplifiedGeometry_.ends_,this.simplifiedGeometry_.stride_,Math.sqrt(t),r,0,n)}return n&&(this.simplifiedGeometry_=new ht(this.type_,r,n,2,this.properties_,this.id_)),this.squaredTolerance_=t,this.simplifiedGeometry_})),this}}ht.prototype.getFlatCoordinates=ht.prototype.getOrientedFlatCoordinates;const pt=ht,dt=ol.style.Stroke,gt=ol.style.Style,ft=ol.style.Text,mt=ol.functions,yt=ol.render.canvas,At=ol.TileState,It=ol.util;var Ct=r(7304);ol.layer.Image,ol.layer.Layer,ol.layer.Group,ol.Map,ol.source.Raster,ol.source.Source;const vt=ol.tilegrid.TileGrid;r(9583);var _t=r(996),bt=r(3668);ol.View;const wt=ol.proj.Units;var St=r(2947),Et=r(8062),xt=r(9201),Mt=r(2938);ol.events.Event;function Rt(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Tt,Pt={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],rebeccapurple:[102,51,153,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function Gt(t){return(t=Math.round(t))<0?0:t>255?255:t}function Nt(t){return t<0?0:t>1?1:t}function Ot(t){return"%"===t[t.length-1]?Gt(parseFloat(t)/100*255):Gt(parseInt(t))}function kt(t){return"%"===t[t.length-1]?Nt(parseFloat(t)/100):Nt(parseFloat(t))}function Lt(t,e,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?t+(e-t)*r*6:2*r<1?e:3*r<2?t+(e-t)*(2/3-r)*6:t}try{Tt={}.parseCSSColor=function(t){var e,r=t.replace(/ /g,"").toLowerCase();if(r in Pt)return Pt[r].slice();if("#"===r[0])return 4===r.length?(e=parseInt(r.substr(1),16))>=0&&e<=4095?[(3840&e)>>4|(3840&e)>>8,240&e|(240&e)>>4,15&e|(15&e)<<4,1]:null:7===r.length&&(e=parseInt(r.substr(1),16))>=0&&e<=16777215?[(16711680&e)>>16,(65280&e)>>8,255&e,1]:null;var n=r.indexOf("("),i=r.indexOf(")");if(-1!==n&&i+1===r.length){var o=r.substr(0,n),s=r.substr(n+1,i-(n+1)).split(","),a=1;switch(o){case"rgba":if(4!==s.length)return null;a=kt(s.pop());case"rgb":return 3!==s.length?null:[Ot(s[0]),Ot(s[1]),Ot(s[2]),a];case"hsla":if(4!==s.length)return null;a=kt(s.pop());case"hsl":if(3!==s.length)return null;var l=(parseFloat(s[0])%360+360)%360/360,u=kt(s[1]),c=kt(s[2]),h=c<=.5?c*(u+1):c+u-c*u,p=2*c-h;return[Gt(255*Lt(p,h,l+1/3)),Gt(255*Lt(p,h,l)),Gt(255*Lt(p,h,l-1/3)),a];default:return null}}return null}}catch(t){}class Dt{constructor(t,e,r,n=1){this.r=t,this.g=e,this.b=r,this.a=n}static parse(t){if(!t)return;if(t instanceof Dt)return t;if("string"!=typeof t)return;const e=Tt(t);return e?new Dt(e[0]/255*e[3],e[1]/255*e[3],e[2]/255*e[3],e[3]):void 0}toString(){const[t,e,r,n]=this.toArray();return`rgba(${Math.round(t)},${Math.round(e)},${Math.round(r)},${n})`}toArray(){const{r:t,g:e,b:r,a:n}=this;return 0===n?[0,0,0,0]:[255*t/n,255*e/n,255*r/n,n]}toArray01(){const{r:t,g:e,b:r,a:n}=this;return 0===n?[0,0,0,0]:[t/n,e/n,r/n,n]}toArray01PremultipliedAlpha(){const{r:t,g:e,b:r,a:n}=this;return[t,e,r,n]}}Dt.black=new Dt(0,0,0,1),Dt.white=new Dt(1,1,1,1),Dt.transparent=new Dt(0,0,0,0),Dt.red=new Dt(1,0,0,1),Dt.blue=new Dt(0,0,1,1);var jt=Dt;function Ut(t){return"object"==typeof t?["literal",t]:t}function zt(t,e){let r=t.stops;if(!r)return function(t,e){const r=["get",t.property];if(void 0===t.default)return"string"===e.type?["string",r]:r;if("enum"===e.type)return["match",r,Object.keys(e.values),r,t.default];{const n=["color"===e.type?"to-color":e.type,r,Ut(t.default)];return"array"===e.type&&n.splice(1,0,e.value,e.length||null),n}}(t,e);const n=r&&"object"==typeof r[0][0],i=n||void 0!==t.property,o=n||!i;return r=r.map((t=>!i&&e.tokens&&"string"==typeof t[1]?[t[0],Yt(t[1])]:[t[0],Ut(t[1])])),n?function(t,e,r){const n={},i={},o=[];for(let e=0;e3&&e===t[t.length-2]||(n&&2===t.length||t.push(e),t.push(r))}function Vt(t,e){return t.type?t.type:e.expression.interpolated?"exponential":"interval"}function Yt(t){const e=["concat"],r=/{([^{}]+)}/g;let n=0;for(let i=r.exec(t);null!==i;i=r.exec(t)){const o=t.slice(n,r.lastIndex-i[0].length);n=r.lastIndex,o.length>0&&e.push(o),e.push(["get",i[1]])}if(1===e.length)return t;if(n`:"value"===t.itemType.kind?"array":`array<${e}>`}return t.kind}const ce=[Qt,$t,te,ee,re,se,ne,le(ie),ae];function he(t,e){if("error"===e.kind)return null;if("array"===t.kind){if("array"===e.kind&&(0===e.N&&"value"===e.itemType.kind||!he(t.itemType,e.itemType))&&("number"!=typeof t.N||t.N===e.N))return null}else{if(t.kind===e.kind)return null;if("value"===t.kind)for(const t of ce)if(!he(t,e))return null}return`Expected ${ue(t)} but found ${ue(e)} instead.`}function pe(t,e){return e.some((e=>e.kind===t.kind))}function de(t,e){return e.some((e=>"null"===e?null===t:"array"===e?Array.isArray(t):"object"===e?t&&!Array.isArray(t)&&"object"==typeof t:e===typeof t))}class ge{constructor(t,e,r){this.sensitivity=t?e?"variant":"case":e?"accent":"base",this.locale=r,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:"search"})}compare(t,e){return this.collator.compare(t,e)}resolvedLocale(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale}}class fe{constructor(t,e,r,n,i){this.text=t.normalize?t.normalize():t,this.image=e,this.scale=r,this.fontStack=n,this.textColor=i}}class me{constructor(t){this.sections=t}static fromString(t){return new me([new fe(t,null,null,null,null)])}isEmpty(){return 0===this.sections.length||!this.sections.some((t=>0!==t.text.length||t.image&&0!==t.image.name.length))}static factory(t){return t instanceof me?t:me.fromString(t)}toString(){return 0===this.sections.length?"":this.sections.map((t=>t.text)).join("")}serialize(){const t=["format"];for(const e of this.sections){if(e.image){t.push(["image",e.image.name]);continue}t.push(e.text);const r={};e.fontStack&&(r["text-font"]=["literal",e.fontStack.split(",")]),e.scale&&(r["font-scale"]=e.scale),e.textColor&&(r["text-color"]=["rgba"].concat(e.textColor.toArray())),t.push(r)}return t}}class ye{constructor(t){this.name=t.name,this.available=t.available}toString(){return this.name}static fromString(t){return t?new ye({name:t,available:!1}):null}serialize(){return["image",this.name]}}function Ae(t,e,r,n){if(!("number"==typeof t&&t>=0&&t<=255&&"number"==typeof e&&e>=0&&e<=255&&"number"==typeof r&&r>=0&&r<=255)){return`Invalid rgba value [${("number"==typeof n?[t,e,r,n]:[t,e,r]).join(", ")}]: 'r', 'g', and 'b' must be between 0 and 255.`}return void 0===n||"number"==typeof n&&n>=0&&n<=1?null:`Invalid rgba value [${[t,e,r,n].join(", ")}]: 'a' must be between 0 and 1.`}function Ie(t){if(null===t)return!0;if("string"==typeof t)return!0;if("boolean"==typeof t)return!0;if("number"==typeof t)return!0;if(t instanceof jt)return!0;if(t instanceof ge)return!0;if(t instanceof me)return!0;if(t instanceof ye)return!0;if(Array.isArray(t)){for(const e of t)if(!Ie(e))return!1;return!0}if("object"==typeof t){for(const e in t)if(!Ie(t[e]))return!1;return!0}return!1}function Ce(t){if(null===t)return Qt;if("string"==typeof t)return te;if("boolean"==typeof t)return ee;if("number"==typeof t)return $t;if(t instanceof jt)return re;if(t instanceof ge)return oe;if(t instanceof me)return se;if(t instanceof ye)return ae;if(Array.isArray(t)){const e=t.length;let r;for(const e of t){const t=Ce(e);if(r){if(r===t)continue;r=ie;break}r=t}return le(r||ie,e)}return ne}function ve(t){const e=typeof t;return null===t?"":"string"===e||"number"===e||"boolean"===e?String(t):t instanceof jt||t instanceof me||t instanceof ye?t.toString():JSON.stringify(t)}class _e{constructor(t,e){this.type=t,this.value=e}static parse(t,e){if(2!==t.length)return e.error(`'literal' expression requires exactly one argument, but found ${t.length-1} instead.`);if(!Ie(t[1]))return e.error("invalid value");const r=t[1];let n=Ce(r);const i=e.expectedType;return"array"!==n.kind||0!==n.N||!i||"array"!==i.kind||"number"==typeof i.N&&0!==i.N||(n=i),new _e(n,r)}evaluate(){return this.value}eachChild(){}outputDefined(){return!0}serialize(){return"array"===this.type.kind||"object"===this.type.kind?["literal",this.value]:this.value instanceof jt?["rgba"].concat(this.value.toArray()):this.value instanceof me?this.value.serialize():this.value}}var be=_e;var we=class{constructor(t){this.name="ExpressionEvaluationError",this.message=t}toJSON(){return this.message}};const Se={string:te,number:$t,boolean:ee,object:ne};class Ee{constructor(t,e){this.type=t,this.args=e}static parse(t,e){if(t.length<2)return e.error("Expected at least one argument.");let r,n=1;const i=t[0];if("array"===i){let i,o;if(t.length>2){const r=t[1];if("string"!=typeof r||!(r in Se)||"object"===r)return e.error('The item type argument of "array" must be one of string, number, boolean',1);i=Se[r],n++}else i=ie;if(t.length>3){if(null!==t[2]&&("number"!=typeof t[2]||t[2]<0||t[2]!==Math.floor(t[2])))return e.error('The length argument to "array" must be a positive integer literal',2);o=t[2],n++}r=le(i,o)}else r=Se[i];const o=[];for(;nt.outputDefined()))}serialize(){const t=this.type,e=[t.kind];if("array"===t.kind){const r=t.itemType;if("string"===r.kind||"number"===r.kind||"boolean"===r.kind){e.push(r.kind);const n=t.N;("number"==typeof n||this.args.length>1)&&e.push(n)}}return e.concat(this.args.map((t=>t.serialize())))}}var xe=Ee;class Me{constructor(t){this.type=se,this.sections=t}static parse(t,e){if(t.length<2)return e.error("Expected at least one argument.");const r=t[1];if(!Array.isArray(r)&&"object"==typeof r)return e.error("First argument must be an image or text section.");const n=[];let i=!1;for(let r=1;r<=t.length-1;++r){const o=t[r];if(i&&"object"==typeof o&&!Array.isArray(o)){i=!1;let t=null;if(o["font-scale"]&&(t=e.parse(o["font-scale"],1,$t),!t))return null;let r=null;if(o["text-font"]&&(r=e.parse(o["text-font"],1,le(te)),!r))return null;let s=null;if(o["text-color"]&&(s=e.parse(o["text-color"],1,re),!s))return null;const a=n[n.length-1];a.scale=t,a.font=r,a.textColor=s}else{const o=e.parse(t[r],1,ie);if(!o)return null;const s=o.type.kind;if("string"!==s&&"value"!==s&&"null"!==s&&"resolvedImage"!==s)return e.error("Formatted text type must be 'string', 'value', 'image' or 'null'.");i=!0,n.push({content:o,scale:null,font:null,textColor:null})}}return new Me(n)}evaluate(t){return new me(this.sections.map((e=>{const r=e.content.evaluate(t);return Ce(r)===ae?new fe("",r,null,null,null):new fe(ve(r),null,e.scale?e.scale.evaluate(t):null,e.font?e.font.evaluate(t).join(","):null,e.textColor?e.textColor.evaluate(t):null)})))}eachChild(t){for(const e of this.sections)t(e.content),e.scale&&t(e.scale),e.font&&t(e.font),e.textColor&&t(e.textColor)}outputDefined(){return!1}serialize(){const t=["format"];for(const e of this.sections){t.push(e.content.serialize());const r={};e.scale&&(r["font-scale"]=e.scale.serialize()),e.font&&(r["text-font"]=e.font.serialize()),e.textColor&&(r["text-color"]=e.textColor.serialize()),t.push(r)}return t}}class Re{constructor(t){this.type=ae,this.input=t}static parse(t,e){if(2!==t.length)return e.error("Expected two arguments.");const r=e.parse(t[1],1,te);return r?new Re(r):e.error("No image name provided.")}evaluate(t){const e=this.input.evaluate(t),r=ye.fromString(e);return r&&t.availableImages&&(r.available=t.availableImages.indexOf(e)>-1),r}eachChild(t){t(this.input)}outputDefined(){return!1}serialize(){return["image",this.input.serialize()]}}const Te={"to-boolean":ee,"to-color":re,"to-number":$t,"to-string":te};class Pe{constructor(t,e){this.type=t,this.args=e}static parse(t,e){if(t.length<2)return e.error("Expected at least one argument.");const r=t[0];if(("to-boolean"===r||"to-string"===r)&&2!==t.length)return e.error("Expected one argument.");const n=Te[r],i=[];for(let r=1;r4?`Invalid rbga value ${JSON.stringify(e)}: expected an array containing either three or four numeric values.`:Ae(e[0],e[1],e[2],e[3]),!r))return new jt(e[0]/255,e[1]/255,e[2]/255,e[3])}throw new we(r||`Could not parse color from value '${"string"==typeof e?e:String(JSON.stringify(e))}'`)}if("number"===this.type.kind){let e=null;for(const r of this.args){if(e=r.evaluate(t),null===e)return 0;const n=Number(e);if(!isNaN(n))return n}throw new we(`Could not convert ${JSON.stringify(e)} to number.`)}return"formatted"===this.type.kind?me.fromString(ve(this.args[0].evaluate(t))):"resolvedImage"===this.type.kind?ye.fromString(ve(this.args[0].evaluate(t))):ve(this.args[0].evaluate(t))}eachChild(t){this.args.forEach(t)}outputDefined(){return this.args.every((t=>t.outputDefined()))}serialize(){if("formatted"===this.type.kind)return new Me([{content:this.args[0],scale:null,font:null,textColor:null}]).serialize();if("resolvedImage"===this.type.kind)return new Re(this.args[0]).serialize();const t=[`to-${this.type.kind}`];return this.eachChild((e=>{t.push(e.serialize())})),t}}var Ge=Pe;const Ne=["Unknown","Point","LineString","Polygon"];var Oe=class{constructor(){this.globals=null,this.feature=null,this.featureState=null,this.formattedSection=null,this._parseColorCache={},this.availableImages=null,this.canonical=null,this.featureTileCoord=null,this.featureDistanceData=null}id(){return this.feature&&void 0!==this.feature.id?this.feature.id:null}geometryType(){return this.feature?"number"==typeof this.feature.type?Ne[this.feature.type]:this.feature.type:null}geometry(){return this.feature&&"geometry"in this.feature?this.feature.geometry:null}canonicalID(){return this.canonical}properties(){return this.feature&&this.feature.properties||{}}distanceFromCenter(){if(this.featureTileCoord&&this.featureDistanceData){const t=this.featureDistanceData.center,e=this.featureDistanceData.scale,{x:r,y:n}=this.featureTileCoord,i=r*e-t[0],o=n*e-t[1];return this.featureDistanceData.bearing[0]*i+this.featureDistanceData.bearing[1]*o}return 0}parseColor(t){let e=this._parseColorCache[t];return e||(e=this._parseColorCache[t]=jt.parse(t)),e}};class ke{constructor(t,e,r,n){this.name=t,this.type=e,this._evaluate=r,this.args=n}evaluate(t){return this._evaluate(t,this.args)}eachChild(t){this.args.forEach(t)}outputDefined(){return!1}serialize(){return[this.name].concat(this.args.map((t=>t.serialize())))}static parse(t,e){const r=t[0],n=ke.definitions[r];if(!n)return e.error(`Unknown expression "${r}". If you wanted a literal array, use ["literal", [...]].`,0);const i=Array.isArray(n)?n[0]:n.type,o=Array.isArray(n)?[[n[1],n[2]]]:n.overloads,s=o.filter((([e])=>!Array.isArray(e)||e.length===t.length-1));let a=null;for(const[n,o]of s){a=new ur(e.registry,e.path,null,e.scope);const s=[];let l=!1;for(let e=1;e{return e=t,Array.isArray(e)?`(${e.map(ue).join(", ")})`:`(${ue(e.type)}...)`;var e})).join(" | "),n=[];for(let r=1;r=e[2])&&(!(t[1]<=e[1])&&!(t[3]>=e[3])))}function qe(t,e){const r=(180+t[0])/360;const n=(i=t[1],(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+i*Math.PI/360)))/360);var i;const o=Math.pow(2,e.z);return[Math.round(r*o*je),Math.round(n*o*je)]}function Fe(t,e,r){const n=t[0]-e[0],i=t[1]-e[1],o=t[0]-r[0],s=t[1]-r[1];return n*s-o*i==0&&n*o<=0&&i*s<=0}function Be(t,e){let r=!1;for(let s=0,a=e.length;sn[1]!=o[1]>n[1]&&n[0]<(o[0]-i[0])*(n[1]-i[1])/(o[1]-i[1])+i[0]&&(r=!r)}}var n,i,o;return r}function We(t,e){for(let r=0;r0&&h<0||c<0&&h>0}function Ve(t,e,r,n){const i=[e[0]-t[0],e[1]-t[1]],o=[n[0]-r[0],n[1]-r[1]];return 0!=(s=o)[0]*(a=i)[1]-s[1]*a[0]&&!(!He(t,e,r,n)||!He(r,n,t,e));var s,a}function Ye(t,e,r){for(const n of r)for(let r=0;rr[2]){const e=.5*n;let i=t[0]-r[0]>e?-n:r[0]-t[0]>e?n:0;0===i&&(i=t[0]-r[2]>e?-n:r[2]-t[0]>e?n:0),t[0]+=i}Ue(e,t)}function $e(t,e,r,n){const i=Math.pow(2,n.z)*je,o=[n.x*je,n.y*je],s=[];if(!t)return s;for(const n of t)for(const t of n){const n=[t.x+o[0],t.y+o[1]];Qe(n,e,r,i),s.push(n)}return s}function tr(t,e,r,n){const i=Math.pow(2,n.z)*je,o=[n.x*je,n.y*je],s=[];if(!t)return s;for(const r of t){const t=[];for(const n of r){const r=[n.x+o[0],n.y+o[1]];Ue(e,r),t.push(r)}s.push(t)}if(e[2]-e[0]<=i/2){(a=e)[0]=a[1]=1/0,a[2]=a[3]=-1/0;for(const t of s)for(const n of t)Qe(n,e,r,i)}var a;return s}class er{constructor(t,e){this.type=ee,this.geojson=t,this.geometries=e}static parse(t,e){if(2!==t.length)return e.error(`'within' expression requires exactly one argument, but found ${t.length-1} instead.`);if(Ie(t[1])){const e=t[1];if("FeatureCollection"===e.type)for(let t=0;t{e&&!nr(t)&&(e=!1)})),e}function ir(t){if(t instanceof Le&&"feature-state"===t.name)return!1;let e=!0;return t.eachChild((t=>{e&&!ir(t)&&(e=!1)})),e}function or(t,e){if(t instanceof Le&&e.indexOf(t.name)>=0)return!1;let r=!0;return t.eachChild((t=>{r&&!or(t,e)&&(r=!1)})),r}class sr{constructor(t,e){this.type=e.type,this.name=t,this.boundExpression=e}static parse(t,e){if(2!==t.length||"string"!=typeof t[1])return e.error("'var' expression requires exactly one string literal argument.");const r=t[1];return e.scope.has(r)?new sr(r,e.scope.get(r)):e.error(`Unknown variable "${r}". Make sure "${r}" has been bound in an enclosing "let" expression before using it.`,1)}evaluate(t){return this.boundExpression.evaluate(t)}eachChild(){}outputDefined(){return!1}serialize(){return["var",this.name]}}var ar=sr;class lr{constructor(t,e=[],r,n=new Jt,i=[]){this.registry=t,this.path=e,this.key=e.map((t=>`[${t}]`)).join(""),this.scope=n,this.errors=i,this.expectedType=r}parse(t,e,r,n,i={}){return e?this.concat(e,r,n)._parse(t,i):this._parse(t,i)}_parse(t,e){function r(t,e,r){return"assert"===r?new xe(e,[t]):"coerce"===r?new Ge(e,[t]):t}if(null!==t&&"string"!=typeof t&&"boolean"!=typeof t&&"number"!=typeof t||(t=["literal",t]),Array.isArray(t)){if(0===t.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].');const n=t[0];if("string"!=typeof n)return this.error(`Expression name must be a string, but found ${typeof n} instead. If you wanted a literal array, use ["literal", [...]].`,0),null;const i=this.registry[n];if(i){let n=i.parse(t,this);if(!n)return null;if(this.expectedType){const t=this.expectedType,i=n.type;if("string"!==t.kind&&"number"!==t.kind&&"boolean"!==t.kind&&"object"!==t.kind&&"array"!==t.kind||"value"!==i.kind)if("color"!==t.kind&&"formatted"!==t.kind&&"resolvedImage"!==t.kind||"value"!==i.kind&&"string"!==i.kind){if(this.checkSubtype(t,i))return null}else n=r(n,t,e.typeAnnotation||"coerce");else n=r(n,t,e.typeAnnotation||"assert")}if(!(n instanceof be)&&"resolvedImage"!==n.type.kind&&cr(n)){const t=new Oe;try{n=new be(n.type,n.evaluate(t))}catch(t){return this.error(t.message),null}}return n}return this.error(`Unknown expression "${n}". If you wanted a literal array, use ["literal", [...]].`,0)}return void 0===t?this.error("'undefined' value invalid. Use null instead."):"object"==typeof t?this.error('Bare objects invalid. Use ["literal", {...}] instead.'):this.error(`Expected an array, but found ${typeof t} instead.`)}concat(t,e,r){const n="number"==typeof t?this.path.concat(t):this.path,i=r?this.scope.concat(r):this.scope;return new lr(this.registry,n,e||null,i,this.errors)}error(t,...e){const r=`${this.key}${e.map((t=>`[${t}]`)).join("")}`;this.errors.push(new Zt(r,t))}checkSubtype(t,e){const r=he(t,e);return r&&this.error(r),r}}var ur=lr;function cr(t){if(t instanceof ar)return cr(t.boundExpression);if(t instanceof Le&&"error"===t.name)return!1;if(t instanceof De)return!1;if(t instanceof rr)return!1;const e=t instanceof Ge||t instanceof xe;let r=!0;return t.eachChild((t=>{r=e?r&&cr(t):r&&t instanceof be})),!!r&&(nr(t)&&or(t,["zoom","heatmap-density","line-progress","sky-radial-progress","accumulated","is-supported-script","pitch","distance-from-center"]))}function hr(t,e){const r=t.length-1;let n,i,o=0,s=r,a=0;for(;o<=s;)if(a=Math.floor((o+s)/2),n=t[a],i=t[a+1],n<=e){if(a===r||ee))throw new we("Input is not a number.");s=a-1}return 0}class pr{constructor(t,e,r){this.type=t,this.input=e,this.labels=[],this.outputs=[];for(const[t,e]of r)this.labels.push(t),this.outputs.push(e)}static parse(t,e){if(t.length-1<4)return e.error(`Expected at least 4 arguments, but found only ${t.length-1}.`);if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");const r=e.parse(t[1],1,$t);if(!r)return null;const n=[];let i=null;e.expectedType&&"value"!==e.expectedType.kind&&(i=e.expectedType);for(let r=1;r=o)return e.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.',a);const u=e.parse(s,l,i);if(!u)return null;i=i||u.type,n.push([o,u])}return new pr(i,r,n)}evaluate(t){const e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);const n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);const i=e.length;if(n>=e[i-1])return r[i-1].evaluate(t);return r[hr(e,n)].evaluate(t)}eachChild(t){t(this.input);for(const e of this.outputs)t(e)}outputDefined(){return this.outputs.every((t=>t.outputDefined()))}serialize(){const t=["step",this.input.serialize()];for(let e=0;e0&&t.push(this.labels[e]),t.push(this.outputs[e].serialize());return t}}var dr=pr,gr=fr;function fr(t,e,r,n){this.cx=3*t,this.bx=3*(r-t)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*e,this.by=3*(n-e)-this.cy,this.ay=1-this.cy-this.by,this.p1x=t,this.p1y=n,this.p2x=r,this.p2y=n}fr.prototype.sampleCurveX=function(t){return((this.ax*t+this.bx)*t+this.cx)*t},fr.prototype.sampleCurveY=function(t){return((this.ay*t+this.by)*t+this.cy)*t},fr.prototype.sampleCurveDerivativeX=function(t){return(3*this.ax*t+2*this.bx)*t+this.cx},fr.prototype.solveCurveX=function(t,e){var r,n,i,o,s;for(void 0===e&&(e=1e-6),i=t,s=0;s<8;s++){if(o=this.sampleCurveX(i)-t,Math.abs(o)(n=1))return n;for(;ro?r=i:n=i,i=.5*(n-r)+r}return i},fr.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))};var mr=Rt(gr);function yr(t,e,r){return t*(1-r)+e*r}var Ar=Object.freeze({__proto__:null,number:yr,color:function(t,e,r){return new jt(yr(t.r,e.r,r),yr(t.g,e.g,r),yr(t.b,e.b,r),yr(t.a,e.a,r))},array:function(t,e,r){return t.map(((t,n)=>yr(t,e[n],r)))}});const Ir=.95047,Cr=1.08883,vr=4/29,_r=6/29,br=3*_r*_r,wr=_r*_r*_r,Sr=Math.PI/180,Er=180/Math.PI;function xr(t){return t>wr?Math.pow(t,1/3):t/br+vr}function Mr(t){return t>_r?t*t*t:br*(t-vr)}function Rr(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Tr(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Pr(t){const e=Tr(t.r),r=Tr(t.g),n=Tr(t.b),i=xr((.4124564*e+.3575761*r+.1804375*n)/Ir),o=xr((.2126729*e+.7151522*r+.072175*n)/1);return{l:116*o-16,a:500*(i-o),b:200*(o-xr((.0193339*e+.119192*r+.9503041*n)/Cr)),alpha:t.a}}function Gr(t){let e=(t.l+16)/116,r=isNaN(t.a)?e:e+t.a/500,n=isNaN(t.b)?e:e-t.b/200;return e=1*Mr(e),r=Ir*Mr(r),n=Cr*Mr(n),new jt(Rr(3.2404542*r-1.5371385*e-.4985314*n),Rr(-.969266*r+1.8760108*e+.041556*n),Rr(.0556434*r-.2040259*e+1.0572252*n),t.alpha)}function Nr(t,e,r){const n=e-t;return t+r*(n>180||n<-180?n-360*Math.round(n/360):n)}const Or={forward:Pr,reverse:Gr,interpolate:function(t,e,r){return{l:yr(t.l,e.l,r),a:yr(t.a,e.a,r),b:yr(t.b,e.b,r),alpha:yr(t.alpha,e.alpha,r)}}},kr={forward:function(t){const{l:e,a:r,b:n}=Pr(t),i=Math.atan2(n,r)*Er;return{h:i<0?i+360:i,c:Math.sqrt(r*r+n*n),l:e,alpha:t.a}},reverse:function(t){const e=t.h*Sr,r=t.c;return Gr({l:t.l,a:Math.cos(e)*r,b:Math.sin(e)*r,alpha:t.alpha})},interpolate:function(t,e,r){return{h:Nr(t.h,e.h,r),c:yr(t.c,e.c,r),l:yr(t.l,e.l,r),alpha:yr(t.alpha,e.alpha,r)}}};class Lr{constructor(t,e,r,n,i){this.type=t,this.operator=e,this.interpolation=r,this.input=n,this.labels=[],this.outputs=[];for(const[t,e]of i)this.labels.push(t),this.outputs.push(e)}static interpolationFactor(t,e,r,n){let i=0;if("exponential"===t.name)i=Dr(e,t.base,r,n);else if("linear"===t.name)i=Dr(e,1,r,n);else if("cubic-bezier"===t.name){const o=t.controlPoints;i=new mr(o[0],o[1],o[2],o[3]).solve(Dr(e,1,r,n))}return i}static parse(t,e){let[r,n,i,...o]=t;if(!Array.isArray(n)||0===n.length)return e.error("Expected an interpolation type expression.",1);if("linear"===n[0])n={name:"linear"};else if("exponential"===n[0]){const t=n[1];if("number"!=typeof t)return e.error("Exponential interpolation requires a numeric base.",1,1);n={name:"exponential",base:t}}else{if("cubic-bezier"!==n[0])return e.error(`Unknown interpolation type ${String(n[0])}`,1,0);{const t=n.slice(1);if(4!==t.length||t.some((t=>"number"!=typeof t||t<0||t>1)))return e.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.",1);n={name:"cubic-bezier",controlPoints:t}}}if(t.length-1<4)return e.error(`Expected at least 4 arguments, but found only ${t.length-1}.`);if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");if(i=e.parse(i,2,$t),!i)return null;const s=[];let a=null;"interpolate-hcl"===r||"interpolate-lab"===r?a=re:e.expectedType&&"value"!==e.expectedType.kind&&(a=e.expectedType);for(let t=0;t=r)return e.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.',i);const u=e.parse(n,l,a);if(!u)return null;a=a||u.type,s.push([r,u])}return"number"===a.kind||"color"===a.kind||"array"===a.kind&&"number"===a.itemType.kind&&"number"==typeof a.N?new Lr(a,r,n,i,s):e.error(`Type ${ue(a)} is not interpolatable.`)}evaluate(t){const e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);const n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);const i=e.length;if(n>=e[i-1])return r[i-1].evaluate(t);const o=hr(e,n),s=e[o],a=e[o+1],l=Lr.interpolationFactor(this.interpolation,n,s,a),u=r[o].evaluate(t),c=r[o+1].evaluate(t);return"interpolate"===this.operator?Ar[this.type.kind.toLowerCase()](u,c,l):"interpolate-hcl"===this.operator?kr.reverse(kr.interpolate(kr.forward(u),kr.forward(c),l)):Or.reverse(Or.interpolate(Or.forward(u),Or.forward(c),l))}eachChild(t){t(this.input);for(const e of this.outputs)t(e)}outputDefined(){return this.outputs.every((t=>t.outputDefined()))}serialize(){let t;t="linear"===this.interpolation.name?["linear"]:"exponential"===this.interpolation.name?1===this.interpolation.base?["linear"]:["exponential",this.interpolation.base]:["cubic-bezier"].concat(this.interpolation.controlPoints);const e=[this.operator,t,this.input.serialize()];for(let t=0;the(n,t.type)));return new Ur(o?ie:r,i)}evaluate(t){let e,r=null,n=0;for(const i of this.args){if(n++,r=i.evaluate(t),r&&r instanceof ye&&!r.available&&(e||(e=r),r=null,n===this.args.length))return e;if(null!==r)break}return r}eachChild(t){this.args.forEach(t)}outputDefined(){return this.args.every((t=>t.outputDefined()))}serialize(){const t=["coalesce"];return this.eachChild((e=>{t.push(e.serialize())})),t}}var zr=Ur;class qr{constructor(t,e){this.type=e.type,this.bindings=[].concat(t),this.result=e}evaluate(t){return this.result.evaluate(t)}eachChild(t){for(const e of this.bindings)t(e[1]);t(this.result)}static parse(t,e){if(t.length<4)return e.error(`Expected at least 3 arguments, but found ${t.length-1} instead.`);const r=[];for(let n=1;n=r.length)throw new we(`Array index out of bounds: ${e} > ${r.length-1}.`);if(e!==Math.floor(e))throw new we(`Array index must be an integer, but found ${e} instead.`);return r[e]}eachChild(t){t(this.index),t(this.input)}outputDefined(){return!1}serialize(){return["at",this.index.serialize(),this.input.serialize()]}}var Wr=Br;class Hr{constructor(t,e){this.type=ee,this.needle=t,this.haystack=e}static parse(t,e){if(3!==t.length)return e.error(`Expected 2 arguments, but found ${t.length-1} instead.`);const r=e.parse(t[1],1,ie),n=e.parse(t[2],2,ie);return r&&n?pe(r.type,[ee,te,$t,Qt,ie])?new Hr(r,n):e.error(`Expected first argument to be of type boolean, string, number or null, but found ${ue(r.type)} instead`):null}evaluate(t){const e=this.needle.evaluate(t),r=this.haystack.evaluate(t);if(null==r)return!1;if(!de(e,["boolean","string","number","null"]))throw new we(`Expected first argument to be of type boolean, string, number or null, but found ${ue(Ce(e))} instead.`);if(!de(r,["string","array"]))throw new we(`Expected second argument to be of type array or string, but found ${ue(Ce(r))} instead.`);return r.indexOf(e)>=0}eachChild(t){t(this.needle),t(this.haystack)}outputDefined(){return!0}serialize(){return["in",this.needle.serialize(),this.haystack.serialize()]}}var Vr=Hr;class Yr{constructor(t,e,r){this.type=$t,this.needle=t,this.haystack=e,this.fromIndex=r}static parse(t,e){if(t.length<=2||t.length>=5)return e.error(`Expected 3 or 4 arguments, but found ${t.length-1} instead.`);const r=e.parse(t[1],1,ie),n=e.parse(t[2],2,ie);if(!r||!n)return null;if(!pe(r.type,[ee,te,$t,Qt,ie]))return e.error(`Expected first argument to be of type boolean, string, number or null, but found ${ue(r.type)} instead`);if(4===t.length){const i=e.parse(t[3],3,$t);return i?new Yr(r,n,i):null}return new Yr(r,n)}evaluate(t){const e=this.needle.evaluate(t),r=this.haystack.evaluate(t);if(!de(e,["boolean","string","number","null"]))throw new we(`Expected first argument to be of type boolean, string, number or null, but found ${ue(Ce(e))} instead.`);if(!de(r,["string","array"]))throw new we(`Expected second argument to be of type array or string, but found ${ue(Ce(r))} instead.`);if(this.fromIndex){const n=this.fromIndex.evaluate(t);return r.indexOf(e,n)}return r.indexOf(e)}eachChild(t){t(this.needle),t(this.haystack),this.fromIndex&&t(this.fromIndex)}outputDefined(){return!1}serialize(){if(null!=this.fromIndex&&void 0!==this.fromIndex){const t=this.fromIndex.serialize();return["index-of",this.needle.serialize(),this.haystack.serialize(),t]}return["index-of",this.needle.serialize(),this.haystack.serialize()]}}var Xr=Yr;class Zr{constructor(t,e,r,n,i,o){this.inputType=t,this.type=e,this.input=r,this.cases=n,this.outputs=i,this.otherwise=o}static parse(t,e){if(t.length<5)return e.error(`Expected at least 4 arguments, but found only ${t.length-1}.`);if(t.length%2!=1)return e.error("Expected an even number of arguments.");let r,n;e.expectedType&&"value"!==e.expectedType.kind&&(n=e.expectedType);const i={},o=[];for(let s=2;sNumber.MAX_SAFE_INTEGER)return u.error(`Branch labels must be integers no larger than ${Number.MAX_SAFE_INTEGER}.`);if("number"==typeof t&&Math.floor(t)!==t)return u.error("Numeric branch labels must be integer values.");if(r){if(u.checkSubtype(r,Ce(t)))return null}else r=Ce(t);if(void 0!==i[String(t)])return u.error("Branch labels must be unique.");i[String(t)]=o.length}const c=e.parse(l,s,n);if(!c)return null;n=n||c.type,o.push(c)}const s=e.parse(t[1],1,ie);if(!s)return null;const a=e.parse(t[t.length-1],t.length-1,n);return a?"value"!==s.type.kind&&e.concat(1).checkSubtype(r,s.type)?null:new Zr(r,n,s,i,o,a):null}evaluate(t){const e=this.input.evaluate(t);return(Ce(e)===this.inputType&&this.outputs[this.cases[e]]||this.otherwise).evaluate(t)}eachChild(t){t(this.input),this.outputs.forEach(t),t(this.otherwise)}outputDefined(){return this.outputs.every((t=>t.outputDefined()))&&this.otherwise.outputDefined()}serialize(){const t=["match",this.input.serialize()],e=Object.keys(this.cases).sort(),r=[],n={};for(const t of e){const e=n[this.cases[t]];void 0===e?(n[this.cases[t]]=r.length,r.push([this.cases[t],[t]])):r[e][1].push(t)}const i=t=>"number"===this.inputType.kind?Number(t):t;for(const[e,n]of r)1===n.length?t.push(i(n[0])):t.push(n.map(i)),t.push(this.outputs[e].serialize());return t.push(this.otherwise.serialize()),t}}var Kr=Zr;class Jr{constructor(t,e,r){this.type=t,this.branches=e,this.otherwise=r}static parse(t,e){if(t.length<4)return e.error(`Expected at least 3 arguments, but found only ${t.length-1}.`);if(t.length%2!=0)return e.error("Expected an odd number of arguments.");let r;e.expectedType&&"value"!==e.expectedType.kind&&(r=e.expectedType);const n=[];for(let i=1;ie.outputDefined()))&&this.otherwise.outputDefined()}serialize(){const t=["case"];return this.eachChild((e=>{t.push(e.serialize())})),t}}var Qr=Jr;class $r{constructor(t,e,r,n){this.type=t,this.input=e,this.beginIndex=r,this.endIndex=n}static parse(t,e){if(t.length<=2||t.length>=5)return e.error(`Expected 3 or 4 arguments, but found ${t.length-1} instead.`);const r=e.parse(t[1],1,ie),n=e.parse(t[2],2,$t);if(!r||!n)return null;if(!pe(r.type,[le(ie),te,ie]))return e.error(`Expected first argument to be of type array or string, but found ${ue(r.type)} instead`);if(4===t.length){const i=e.parse(t[3],3,$t);return i?new $r(r.type,r,n,i):null}return new $r(r.type,r,n)}evaluate(t){const e=this.input.evaluate(t),r=this.beginIndex.evaluate(t);if(!de(e,["string","array"]))throw new we(`Expected first argument to be of type array or string, but found ${ue(Ce(e))} instead.`);if(this.endIndex){const n=this.endIndex.evaluate(t);return e.slice(r,n)}return e.slice(r)}eachChild(t){t(this.input),t(this.beginIndex),this.endIndex&&t(this.endIndex)}outputDefined(){return!1}serialize(){if(null!=this.endIndex&&void 0!==this.endIndex){const t=this.endIndex.serialize();return["slice",this.input.serialize(),this.beginIndex.serialize(),t]}return["slice",this.input.serialize(),this.beginIndex.serialize()]}}var tn=$r;function en(t,e){return"=="===t||"!="===t?"boolean"===e.kind||"string"===e.kind||"number"===e.kind||"null"===e.kind||"value"===e.kind:"string"===e.kind||"number"===e.kind||"value"===e.kind}function rn(t,e,r,n){return 0===n.compare(e,r)}function nn(t,e,r){const n="=="!==t&&"!="!==t;return class i{constructor(t,e,r){this.type=ee,this.lhs=t,this.rhs=e,this.collator=r,this.hasUntypedArgument="value"===t.type.kind||"value"===e.type.kind}static parse(t,e){if(3!==t.length&&4!==t.length)return e.error("Expected two or three arguments.");const r=t[0];let o=e.parse(t[1],1,ie);if(!o)return null;if(!en(r,o.type))return e.concat(1).error(`"${r}" comparisons are not supported for type '${ue(o.type)}'.`);let s=e.parse(t[2],2,ie);if(!s)return null;if(!en(r,s.type))return e.concat(2).error(`"${r}" comparisons are not supported for type '${ue(s.type)}'.`);if(o.type.kind!==s.type.kind&&"value"!==o.type.kind&&"value"!==s.type.kind)return e.error(`Cannot compare types '${ue(o.type)}' and '${ue(s.type)}'.`);n&&("value"===o.type.kind&&"value"!==s.type.kind?o=new xe(s.type,[o]):"value"!==o.type.kind&&"value"===s.type.kind&&(s=new xe(o.type,[s])));let a=null;if(4===t.length){if("string"!==o.type.kind&&"string"!==s.type.kind&&"value"!==o.type.kind&&"value"!==s.type.kind)return e.error("Cannot use collator to compare non-string types.");if(a=e.parse(t[3],3,oe),!a)return null}return new i(o,s,a)}evaluate(i){const o=this.lhs.evaluate(i),s=this.rhs.evaluate(i);if(n&&this.hasUntypedArgument){const e=Ce(o),r=Ce(s);if(e.kind!==r.kind||"string"!==e.kind&&"number"!==e.kind)throw new we(`Expected arguments for "${t}" to be (string, string) or (number, number), but found (${e.kind}, ${r.kind}) instead.`)}if(this.collator&&!n&&this.hasUntypedArgument){const t=Ce(o),r=Ce(s);if("string"!==t.kind||"string"!==r.kind)return e(i,o,s)}return this.collator?r(i,o,s,this.collator.evaluate(i)):e(i,o,s)}eachChild(t){t(this.lhs),t(this.rhs),this.collator&&t(this.collator)}outputDefined(){return!0}serialize(){const e=[t];return this.eachChild((t=>{e.push(t.serialize())})),e}}}const on=nn("==",(function(t,e,r){return e===r}),rn),sn=nn("!=",(function(t,e,r){return e!==r}),(function(t,e,r,n){return!rn(0,e,r,n)})),an=nn("<",(function(t,e,r){return e",(function(t,e,r){return e>r}),(function(t,e,r,n){return n.compare(e,r)>0})),un=nn("<=",(function(t,e,r){return e<=r}),(function(t,e,r,n){return n.compare(e,r)<=0})),cn=nn(">=",(function(t,e,r){return e>=r}),(function(t,e,r,n){return n.compare(e,r)>=0}));class hn{constructor(t,e,r,n,i,o){this.type=te,this.number=t,this.locale=e,this.currency=r,this.unit=n,this.minFractionDigits=i,this.maxFractionDigits=o}static parse(t,e){if(3!==t.length)return e.error("Expected two arguments.");const r=e.parse(t[1],1,$t);if(!r)return null;const n=t[2];if("object"!=typeof n||Array.isArray(n))return e.error("NumberFormat options argument must be an object.");let i=null;if(n.locale&&(i=e.parse(n.locale,1,te),!i))return null;let o=null;if(n.currency&&(o=e.parse(n.currency,1,te),!o))return null;let s=null;if(n.unit&&(s=e.parse(n.unit,1,te),!s))return null;let a=null;if(n["min-fraction-digits"]&&(a=e.parse(n["min-fraction-digits"],1,$t),!a))return null;let l=null;return n["max-fraction-digits"]&&(l=e.parse(n["max-fraction-digits"],1,$t),!l)?null:new hn(r,i,o,s,a,l)}evaluate(t){return new Intl.NumberFormat(this.locale?this.locale.evaluate(t):[],{style:(this.currency?"currency":this.unit&&"unit")||"decimal",currency:this.currency?this.currency.evaluate(t):void 0,unit:this.unit?this.unit.evaluate(t):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(t):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(t):void 0}).format(this.number.evaluate(t))}eachChild(t){t(this.number),this.locale&&t(this.locale),this.currency&&t(this.currency),this.unit&&t(this.unit),this.minFractionDigits&&t(this.minFractionDigits),this.maxFractionDigits&&t(this.maxFractionDigits)}outputDefined(){return!1}serialize(){const t={};return this.locale&&(t.locale=this.locale.serialize()),this.currency&&(t.currency=this.currency.serialize()),this.unit&&(t.unit=this.unit.serialize()),this.minFractionDigits&&(t["min-fraction-digits"]=this.minFractionDigits.serialize()),this.maxFractionDigits&&(t["max-fraction-digits"]=this.maxFractionDigits.serialize()),["number-format",this.number.serialize(),t]}}class pn{constructor(t){this.type=$t,this.input=t}static parse(t,e){if(2!==t.length)return e.error(`Expected 1 argument, but found ${t.length-1} instead.`);const r=e.parse(t[1],1);return r?"array"!==r.type.kind&&"string"!==r.type.kind&&"value"!==r.type.kind?e.error(`Expected argument of type string or array, but found ${ue(r.type)} instead.`):new pn(r):null}evaluate(t){const e=this.input.evaluate(t);if("string"==typeof e)return e.length;if(Array.isArray(e))return e.length;throw new we(`Expected value to be of type string or array, but found ${ue(Ce(e))} instead.`)}eachChild(t){t(this.input)}outputDefined(){return!1}serialize(){const t=["length"];return this.eachChild((e=>{t.push(e.serialize())})),t}}const dn={"==":on,"!=":sn,">":ln,"<":an,">=":cn,"<=":un,array:xe,at:Wr,boolean:xe,case:Qr,coalesce:zr,collator:De,format:Me,image:Re,in:Vr,"index-of":Xr,interpolate:jr,"interpolate-hcl":jr,"interpolate-lab":jr,length:pn,let:Fr,literal:be,match:Kr,number:xe,"number-format":hn,object:xe,slice:tn,step:dr,string:xe,"to-boolean":Ge,"to-color":Ge,"to-number":Ge,"to-string":Ge,var:ar,within:rr};function gn(t,[e,r,n,i]){e=e.evaluate(t),r=r.evaluate(t),n=n.evaluate(t);const o=i?i.evaluate(t):1,s=Ae(e,r,n,o);if(s)throw new we(s);return new jt(e/255*o,r/255*o,n/255*o,o)}function fn(t,e){return t in e}function mn(t,e){const r=e[t];return void 0===r?null:r}function yn(t){return{type:t}}Le.register(dn,{error:[{kind:"error"},[te],(t,[e])=>{throw new we(e.evaluate(t))}],typeof:[te,[ie],(t,[e])=>ue(Ce(e.evaluate(t)))],"to-rgba":[le($t,4),[re],(t,[e])=>e.evaluate(t).toArray()],rgb:[re,[$t,$t,$t],gn],rgba:[re,[$t,$t,$t,$t],gn],has:{type:ee,overloads:[[[te],(t,[e])=>fn(e.evaluate(t),t.properties())],[[te,ne],(t,[e,r])=>fn(e.evaluate(t),r.evaluate(t))]]},get:{type:ie,overloads:[[[te],(t,[e])=>mn(e.evaluate(t),t.properties())],[[te,ne],(t,[e,r])=>mn(e.evaluate(t),r.evaluate(t))]]},"feature-state":[ie,[te],(t,[e])=>mn(e.evaluate(t),t.featureState||{})],properties:[ne,[],t=>t.properties()],"geometry-type":[te,[],t=>t.geometryType()],id:[ie,[],t=>t.id()],zoom:[$t,[],t=>t.globals.zoom],pitch:[$t,[],t=>t.globals.pitch||0],"distance-from-center":[$t,[],t=>t.distanceFromCenter()],"heatmap-density":[$t,[],t=>t.globals.heatmapDensity||0],"line-progress":[$t,[],t=>t.globals.lineProgress||0],"sky-radial-progress":[$t,[],t=>t.globals.skyRadialProgress||0],accumulated:[ie,[],t=>void 0===t.globals.accumulated?null:t.globals.accumulated],"+":[$t,yn($t),(t,e)=>{let r=0;for(const n of e)r+=n.evaluate(t);return r}],"*":[$t,yn($t),(t,e)=>{let r=1;for(const n of e)r*=n.evaluate(t);return r}],"-":{type:$t,overloads:[[[$t,$t],(t,[e,r])=>e.evaluate(t)-r.evaluate(t)],[[$t],(t,[e])=>-e.evaluate(t)]]},"/":[$t,[$t,$t],(t,[e,r])=>e.evaluate(t)/r.evaluate(t)],"%":[$t,[$t,$t],(t,[e,r])=>e.evaluate(t)%r.evaluate(t)],ln2:[$t,[],()=>Math.LN2],pi:[$t,[],()=>Math.PI],e:[$t,[],()=>Math.E],"^":[$t,[$t,$t],(t,[e,r])=>Math.pow(e.evaluate(t),r.evaluate(t))],sqrt:[$t,[$t],(t,[e])=>Math.sqrt(e.evaluate(t))],log10:[$t,[$t],(t,[e])=>Math.log(e.evaluate(t))/Math.LN10],ln:[$t,[$t],(t,[e])=>Math.log(e.evaluate(t))],log2:[$t,[$t],(t,[e])=>Math.log(e.evaluate(t))/Math.LN2],sin:[$t,[$t],(t,[e])=>Math.sin(e.evaluate(t))],cos:[$t,[$t],(t,[e])=>Math.cos(e.evaluate(t))],tan:[$t,[$t],(t,[e])=>Math.tan(e.evaluate(t))],asin:[$t,[$t],(t,[e])=>Math.asin(e.evaluate(t))],acos:[$t,[$t],(t,[e])=>Math.acos(e.evaluate(t))],atan:[$t,[$t],(t,[e])=>Math.atan(e.evaluate(t))],min:[$t,yn($t),(t,e)=>Math.min(...e.map((e=>e.evaluate(t))))],max:[$t,yn($t),(t,e)=>Math.max(...e.map((e=>e.evaluate(t))))],abs:[$t,[$t],(t,[e])=>Math.abs(e.evaluate(t))],round:[$t,[$t],(t,[e])=>{const r=e.evaluate(t);return r<0?-Math.round(-r):Math.round(r)}],floor:[$t,[$t],(t,[e])=>Math.floor(e.evaluate(t))],ceil:[$t,[$t],(t,[e])=>Math.ceil(e.evaluate(t))],"filter-==":[ee,[te,ie],(t,[e,r])=>t.properties()[e.value]===r.value],"filter-id-==":[ee,[ie],(t,[e])=>t.id()===e.value],"filter-type-==":[ee,[te],(t,[e])=>t.geometryType()===e.value],"filter-<":[ee,[te,ie],(t,[e,r])=>{const n=t.properties()[e.value],i=r.value;return typeof n==typeof i&&n{const r=t.id(),n=e.value;return typeof r==typeof n&&r":[ee,[te,ie],(t,[e,r])=>{const n=t.properties()[e.value],i=r.value;return typeof n==typeof i&&n>i}],"filter-id->":[ee,[ie],(t,[e])=>{const r=t.id(),n=e.value;return typeof r==typeof n&&r>n}],"filter-<=":[ee,[te,ie],(t,[e,r])=>{const n=t.properties()[e.value],i=r.value;return typeof n==typeof i&&n<=i}],"filter-id-<=":[ee,[ie],(t,[e])=>{const r=t.id(),n=e.value;return typeof r==typeof n&&r<=n}],"filter->=":[ee,[te,ie],(t,[e,r])=>{const n=t.properties()[e.value],i=r.value;return typeof n==typeof i&&n>=i}],"filter-id->=":[ee,[ie],(t,[e])=>{const r=t.id(),n=e.value;return typeof r==typeof n&&r>=n}],"filter-has":[ee,[ie],(t,[e])=>e.value in t.properties()],"filter-has-id":[ee,[],t=>null!==t.id()&&void 0!==t.id()],"filter-type-in":[ee,[le(te)],(t,[e])=>e.value.indexOf(t.geometryType())>=0],"filter-id-in":[ee,[le(ie)],(t,[e])=>e.value.indexOf(t.id())>=0],"filter-in-small":[ee,[te,le(ie)],(t,[e,r])=>r.value.indexOf(t.properties()[e.value])>=0],"filter-in-large":[ee,[te,le(ie)],(t,[e,r])=>function(t,e,r,n){for(;r<=n;){const i=r+n>>1;if(e[i]===t)return!0;e[i]>t?n=i-1:r=i+1}return!1}(t.properties()[e.value],r.value,0,r.value.length-1)],all:{type:ee,overloads:[[[ee,ee],(t,[e,r])=>e.evaluate(t)&&r.evaluate(t)],[yn(ee),(t,e)=>{for(const r of e)if(!r.evaluate(t))return!1;return!0}]]},any:{type:ee,overloads:[[[ee,ee],(t,[e,r])=>e.evaluate(t)||r.evaluate(t)],[yn(ee),(t,e)=>{for(const r of e)if(r.evaluate(t))return!0;return!1}]]},"!":[ee,[ee],(t,[e])=>!e.evaluate(t)],"is-supported-script":[ee,[te],(t,[e])=>{const r=t.globals&&t.globals.isSupportedScript;return!r||r(e.evaluate(t))}],upcase:[te,[te],(t,[e])=>e.evaluate(t).toUpperCase()],downcase:[te,[te],(t,[e])=>e.evaluate(t).toLowerCase()],concat:[te,yn(ie),(t,e)=>e.map((e=>ve(e.evaluate(t)))).join("")],"resolved-locale":[te,[oe],(t,[e])=>e.evaluate(t).resolvedLocale()]});var An=dn;function In(t){return{result:"success",value:t}}function Cn(t){return{result:"error",value:t}}function vn(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}class _n{constructor(t,e){this.expression=t,this._warningHistory={},this._evaluator=new Oe,this._defaultValue=e?function(t){return"color"===t.type&&(vn(t.default)||Array.isArray(t.default))?new jt(0,0,0,0):"color"===t.type?jt.parse(t.default)||null:void 0===t.default?null:t.default}(e):null,this._enumValues=e&&"enum"===e.type?e.values:null}evaluateWithoutErrorHandling(t,e,r,n,i,o,s,a){return this._evaluator.globals=t,this._evaluator.feature=e,this._evaluator.featureState=r,this._evaluator.canonical=n||null,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=o,this._evaluator.featureTileCoord=s||null,this._evaluator.featureDistanceData=a||null,this.expression.evaluate(this._evaluator)}evaluate(t,e,r,n,i,o,s,a){this._evaluator.globals=t,this._evaluator.feature=e||null,this._evaluator.featureState=r||null,this._evaluator.canonical=n||null,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=o||null,this._evaluator.featureTileCoord=s||null,this._evaluator.featureDistanceData=a||null;try{const t=this.expression.evaluate(this._evaluator);if(null==t||"number"==typeof t&&t!=t)return this._defaultValue;if(this._enumValues&&!(t in this._enumValues))throw new we(`Expected value to be one of ${Object.keys(this._enumValues).map((t=>JSON.stringify(t))).join(", ")}, but found ${JSON.stringify(t)} instead.`);return t}catch(t){return this._warningHistory[t.message]||(this._warningHistory[t.message]=!0,"undefined"!=typeof console&&console.warn(t.message)),this._defaultValue}}}function bn(t,e){const r=new ur(An,[],e?function(t){const e={color:re,string:te,number:$t,enum:te,boolean:ee,formatted:se,resolvedImage:ae};if("array"===t.type)return le(e[t.value]||ie,t.length);return e[t.type]}(e):void 0),n=r.parse(t,void 0,void 0,void 0,e&&"string"===e.type?{typeAnnotation:"coerce"}:void 0);return n?In(new _n(n,e)):Cn(r.errors)}class wn{constructor(t,e){this.kind=t,this._styleExpression=e,this.isStateDependent="constant"!==t&&!ir(e.expression)}evaluateWithoutErrorHandling(t,e,r,n,i,o){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r,n,i,o)}evaluate(t,e,r,n,i,o){return this._styleExpression.evaluate(t,e,r,n,i,o)}}class Sn{constructor(t,e,r,n){this.kind=t,this.zoomStops=r,this._styleExpression=e,this.isStateDependent="camera"!==t&&!ir(e.expression),this.interpolationType=n}evaluateWithoutErrorHandling(t,e,r,n,i,o){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r,n,i,o)}evaluate(t,e,r,n,i,o){return this._styleExpression.evaluate(t,e,r,n,i,o)}interpolationFactor(t,e,r){return this.interpolationType?jr.interpolationFactor(this.interpolationType,t,e,r):0}}function En(t,e){if("error"===(t=bn(t,e)).result)return t;const r=t.value.expression,n=nr(r);if(!n&&!function(t){return"data-driven"===t["property-type"]}(e))return Cn([new Zt("","data expressions not supported")]);const i=or(r,["zoom","pitch","distance-from-center"]);if(!i&&!function(t){return!!t.expression&&t.expression.parameters.indexOf("zoom")>-1}(e))return Cn([new Zt("","zoom expressions not supported")]);const o=xn(r);if(!o&&!i)return Cn([new Zt("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.')]);if(o instanceof Zt)return Cn([o]);if(o instanceof jr&&!function(t){return!!t.expression&&t.expression.interpolated}(e))return Cn([new Zt("",'"interpolate" expressions cannot be used with this property')]);if(!o)return In(new wn(n?"constant":"source",t.value));const s=o instanceof jr?o.interpolation:void 0;return In(new Sn(n?"camera":"composite",t.value,o.labels,s))}function xn(t){let e=null;if(t instanceof Fr)e=xn(t.result);else if(t instanceof zr){for(const r of t.args)if(e=xn(r),e)break}else(t instanceof dr||t instanceof jr)&&t.input instanceof Le&&"zoom"===t.input.name&&(e=t);return e instanceof Zt||t.eachChild((t=>{const r=xn(t);r instanceof Zt?e=r:!e&&r?e=new Zt("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.'):e&&r&&e!==r&&(e=new Zt("",'Only one zoom-based "step" or "interpolate" subexpression may be used in an expression.'))})),e}function Mn(t){if(Array.isArray(t))return t.map(Mn);if(t instanceof Object&&!(t instanceof Number||t instanceof String||t instanceof Boolean)){const e={};for(const r in t)e[r]=Mn(t[r]);return e}return function(t){return t instanceof Number||t instanceof String||t instanceof Boolean?t.valueOf():t}(t)}var Rn={$version:8,$root:{version:{required:!0,type:"enum",values:[8]},name:{type:"string"},metadata:{type:"*"},center:{type:"array",value:"number"},zoom:{type:"number"},bearing:{type:"number",default:0,period:360,units:"degrees"},pitch:{type:"number",default:0,units:"degrees"},light:{type:"light"},terrain:{type:"terrain"},fog:{type:"fog"},sources:{required:!0,type:"sources"},sprite:{type:"string"},glyphs:{type:"string"},transition:{type:"transition"},projection:{type:"projection"},layers:{required:!0,type:"array",value:"layer"}},sources:{"*":{type:"source"}},source:["source_vector","source_raster","source_raster_dem","source_geojson","source_video","source_image"],source_vector:{type:{required:!0,type:"enum",values:{vector:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},attribution:{type:"string"},promoteId:{type:"promoteId"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_raster:{type:{required:!0,type:"enum",values:{raster:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},attribution:{type:"string"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_raster_dem:{type:{required:!0,type:"enum",values:{"raster-dem":{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},attribution:{type:"string"},encoding:{type:"enum",values:{terrarium:{},mapbox:{}},default:"mapbox"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_geojson:{type:{required:!0,type:"enum",values:{geojson:{}}},data:{type:"*"},maxzoom:{type:"number",default:18},attribution:{type:"string"},buffer:{type:"number",default:128,maximum:512,minimum:0},filter:{type:"*"},tolerance:{type:"number",default:.375},cluster:{type:"boolean",default:!1},clusterRadius:{type:"number",default:50,minimum:0},clusterMaxZoom:{type:"number"},clusterMinPoints:{type:"number"},clusterProperties:{type:"*"},lineMetrics:{type:"boolean",default:!1},generateId:{type:"boolean",default:!1},promoteId:{type:"promoteId"}},source_video:{type:{required:!0,type:"enum",values:{video:{}}},urls:{required:!0,type:"array",value:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},source_image:{type:{required:!0,type:"enum",values:{image:{}}},url:{required:!0,type:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},layer:{id:{type:"string",required:!0},type:{type:"enum",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},"fill-extrusion":{},raster:{},hillshade:{},background:{},sky:{}},required:!0},metadata:{type:"*"},source:{type:"string"},"source-layer":{type:"string"},minzoom:{type:"number",minimum:0,maximum:24},maxzoom:{type:"number",minimum:0,maximum:24},filter:{type:"filter"},layout:{type:"layout"},paint:{type:"paint"}},layout:["layout_fill","layout_line","layout_circle","layout_heatmap","layout_fill-extrusion","layout_symbol","layout_raster","layout_hillshade","layout_background","layout_sky"],layout_background:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_sky:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_fill:{"fill-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_circle:{"circle-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_heatmap:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},"layout_fill-extrusion":{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"},"fill-extrusion-edge-radius":{type:"number",private:!0,default:0,minimum:0,maximum:1,"property-type":"constant"}},layout_line:{"line-cap":{type:"enum",values:{butt:{},round:{},square:{}},default:"butt",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-join":{type:"enum",values:{bevel:{},round:{},miter:{}},default:"miter",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-miter-limit":{type:"number",default:2,requires:[{"line-join":"miter"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-round-limit":{type:"number",default:1.05,requires:[{"line-join":"round"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_symbol:{"symbol-placement":{type:"enum",values:{point:{},line:{},"line-center":{}},default:"point",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-spacing":{type:"number",default:250,minimum:1,units:"pixels",requires:[{"symbol-placement":"line"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"symbol-avoid-edges":{type:"boolean",default:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"symbol-z-order":{type:"enum",values:{auto:{},"viewport-y":{},source:{}},default:"auto",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-allow-overlap":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-ignore-placement":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-optional":{type:"boolean",default:!1,requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-size":{type:"number",default:1,minimum:0,units:"factor of the original icon size",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-text-fit":{type:"enum",values:{none:{},width:{},height:{},both:{}},default:"none",requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-text-fit-padding":{type:"array",value:"number",length:4,default:[0,0,0,0],units:"pixels",requires:["icon-image","text-field",{"icon-text-fit":["both","width","height"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-image":{type:"resolvedImage",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-keep-upright":{type:"boolean",default:!1,requires:["icon-image",{"icon-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-offset":{type:"array",value:"number",length:2,default:[0,0],requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-field":{type:"formatted",default:"",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-font":{type:"array",value:"string",default:["Open Sans Regular","Arial Unicode MS Regular"],requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-size":{type:"number",default:16,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-width":{type:"number",default:10,minimum:0,units:"ems",requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-line-height":{type:"number",default:1.2,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-letter-spacing":{type:"number",default:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-justify":{type:"enum",values:{auto:{},left:{},center:{},right:{}},default:"center",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-radial-offset":{type:"number",units:"ems",default:0,requires:["text-field"],"property-type":"data-driven",expression:{interpolated:!0,parameters:["zoom","feature"]}},"text-variable-anchor":{type:"array",value:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["text-field",{"!":"text-variable-anchor"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-angle":{type:"number",default:45,units:"degrees",requires:["text-field",{"symbol-placement":["line","line-center"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-writing-mode":{type:"array",value:"enum",values:{horizontal:{},vertical:{}},requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-keep-upright":{type:"boolean",default:!0,requires:["text-field",{"text-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-transform":{type:"enum",values:{none:{},uppercase:{},lowercase:{}},default:"none",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-offset":{type:"array",value:"number",units:"ems",length:2,default:[0,0],requires:["text-field",{"!":"text-radial-offset"}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-allow-overlap":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-ignore-placement":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-optional":{type:"boolean",default:!1,requires:["text-field","icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_raster:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_hillshade:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},filter:{type:"array",value:"*"},filter_symbol:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature","pitch","distance-from-center"]}},filter_fill:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_line:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_circle:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},"filter_fill-extrusion":{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_heatmap:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_operator:{type:"enum",values:{"==":{},"!=":{},">":{},">=":{},"<":{},"<=":{},in:{},"!in":{},all:{},any:{},none:{},has:{},"!has":{},within:{}}},geometry_type:{type:"enum",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:"expression"},stops:{type:"array",value:"function_stop"},base:{type:"number",default:1,minimum:0},property:{type:"string",default:"$zoom"},type:{type:"enum",values:{identity:{},exponential:{},interval:{},categorical:{}},default:"exponential"},colorSpace:{type:"enum",values:{rgb:{},lab:{},hcl:{}},default:"rgb"},default:{type:"*",required:!1}},function_stop:{type:"array",minimum:0,maximum:24,value:["number","color"],length:2},expression:{type:"array",value:"*",minimum:1},expression_name:{type:"enum",values:{let:{group:"Variable binding"},var:{group:"Variable binding"},literal:{group:"Types"},array:{group:"Types"},at:{group:"Lookup"},in:{group:"Lookup"},"index-of":{group:"Lookup"},slice:{group:"Lookup"},case:{group:"Decision"},match:{group:"Decision"},coalesce:{group:"Decision"},step:{group:"Ramps, scales, curves"},interpolate:{group:"Ramps, scales, curves"},"interpolate-hcl":{group:"Ramps, scales, curves"},"interpolate-lab":{group:"Ramps, scales, curves"},ln2:{group:"Math"},pi:{group:"Math"},e:{group:"Math"},typeof:{group:"Types"},string:{group:"Types"},number:{group:"Types"},boolean:{group:"Types"},object:{group:"Types"},collator:{group:"Types"},format:{group:"Types"},image:{group:"Types"},"number-format":{group:"Types"},"to-string":{group:"Types"},"to-number":{group:"Types"},"to-boolean":{group:"Types"},"to-rgba":{group:"Color"},"to-color":{group:"Types"},rgb:{group:"Color"},rgba:{group:"Color"},get:{group:"Lookup"},has:{group:"Lookup"},length:{group:"Lookup"},properties:{group:"Feature data"},"feature-state":{group:"Feature data"},"geometry-type":{group:"Feature data"},id:{group:"Feature data"},zoom:{group:"Camera"},pitch:{group:"Camera"},"distance-from-center":{group:"Camera"},"heatmap-density":{group:"Heatmap"},"line-progress":{group:"Feature data"},"sky-radial-progress":{group:"sky"},accumulated:{group:"Feature data"},"+":{group:"Math"},"*":{group:"Math"},"-":{group:"Math"},"/":{group:"Math"},"%":{group:"Math"},"^":{group:"Math"},sqrt:{group:"Math"},log10:{group:"Math"},ln:{group:"Math"},log2:{group:"Math"},sin:{group:"Math"},cos:{group:"Math"},tan:{group:"Math"},asin:{group:"Math"},acos:{group:"Math"},atan:{group:"Math"},min:{group:"Math"},max:{group:"Math"},round:{group:"Math"},abs:{group:"Math"},ceil:{group:"Math"},floor:{group:"Math"},distance:{group:"Math"},"==":{group:"Decision"},"!=":{group:"Decision"},">":{group:"Decision"},"<":{group:"Decision"},">=":{group:"Decision"},"<=":{group:"Decision"},all:{group:"Decision"},any:{group:"Decision"},"!":{group:"Decision"},within:{group:"Decision"},"is-supported-script":{group:"String"},upcase:{group:"String"},downcase:{group:"String"},concat:{group:"String"},"resolved-locale":{group:"String"}}},fog:{range:{type:"array",default:[.5,10],minimum:-20,maximum:20,length:2,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"high-color":{type:"color","property-type":"data-constant",default:"#245cdf",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"space-color":{type:"color","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],4,"#010b19",7,"#367ab9"],expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"horizon-blend":{type:"number","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],4,.2,7,.1],minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"star-intensity":{type:"number","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],5,.35,6,0],minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},light:{anchor:{type:"enum",default:"viewport",values:{map:{},viewport:{}},"property-type":"data-constant",transition:!1,expression:{interpolated:!1,parameters:["zoom"]}},position:{type:"array",default:[1.15,210,30],length:3,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},intensity:{type:"number","property-type":"data-constant",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},projection:{name:{type:"enum",values:{albers:{},equalEarth:{},equirectangular:{},lambertConformalConic:{},mercator:{},naturalEarth:{},winkelTripel:{},globe:{}},default:"mercator",required:!0},center:{type:"array",length:2,value:"number","property-type":"data-constant",minimum:[-180,-90],maximum:[180,90],transition:!1,requires:[{name:["albers","lambertConformalConic"]}]},parallels:{type:"array",length:2,value:"number","property-type":"data-constant",minimum:[-90,-90],maximum:[90,90],transition:!1,requires:[{name:["albers","lambertConformalConic"]}]}},terrain:{source:{type:"string",required:!0},exaggeration:{type:"number","property-type":"data-constant",default:1,minimum:0,maximum:1e3,expression:{interpolated:!0,parameters:["zoom"]},transition:!0,requires:["source"]}},paint:["paint_fill","paint_line","paint_circle","paint_heatmap","paint_fill-extrusion","paint_symbol","paint_raster","paint_hillshade","paint_background","paint_sky"],paint_fill:{"fill-antialias":{type:"boolean",default:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-outline-color":{type:"color",transition:!0,requires:[{"!":"fill-pattern"},{"fill-antialias":!0}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"}},"paint_fill-extrusion":{"fill-extrusion-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-extrusion-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-extrusion-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"fill-extrusion-height":{type:"number",default:0,minimum:0,units:"meters",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-base":{type:"number",default:0,minimum:0,units:"meters",transition:!0,requires:["fill-extrusion-height"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-vertical-gradient":{type:"boolean",default:!0,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-ambient-occlusion-intensity":{"property-type":"data-constant",type:"number",private:!0,default:0,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"fill-extrusion-ambient-occlusion-radius":{"property-type":"data-constant",type:"number",private:!0,default:3,minimum:0,expression:{interpolated:!0,parameters:["zoom"]},transition:!0,requires:["fill-extrusion-edge-radius"]}},paint_line:{"line-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"line-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["line-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-width":{type:"number",default:1,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-gap-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-offset":{type:"number",default:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-dasharray":{type:"array",value:"number",minimum:0,transition:!1,units:"line widths",requires:[{"!":"line-pattern"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-gradient":{type:"color",transition:!1,requires:[{"!":"line-pattern"},{source:"geojson",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:["line-progress"]},"property-type":"color-ramp"},"line-trim-offset":{type:"array",value:"number",length:2,default:[0,0],minimum:[0,0],maximum:[1,1],transition:!1,requires:[{source:"geojson",has:{lineMetrics:!0}}],"property-type":"constant"}},paint_circle:{"circle-radius":{type:"number",default:5,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-blur":{type:"number",default:0,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"circle-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["circle-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-scale":{type:"enum",values:{map:{},viewport:{}},default:"map",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-alignment":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-stroke-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"}},paint_heatmap:{"heatmap-radius":{type:"number",default:30,minimum:1,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-weight":{type:"number",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-intensity":{type:"number",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"heatmap-color":{type:"color",default:["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 255, 0)",.1,"royalblue",.3,"cyan",.5,"lime",.7,"yellow",1,"red"],transition:!1,expression:{interpolated:!0,parameters:["heatmap-density"]},"property-type":"color-ramp"},"heatmap-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_symbol:{"icon-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-color":{type:"color",default:"#000000",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["icon-image","icon-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-color":{type:"color",default:"#000000",transition:!0,overridable:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["text-field","text-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_raster:{"raster-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-hue-rotate":{type:"number",default:0,period:360,transition:!0,units:"degrees",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-min":{type:"number",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-max":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-saturation":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-contrast":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-resampling":{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"raster-fade-duration":{type:"number",default:300,minimum:0,transition:!1,units:"milliseconds",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_hillshade:{"hillshade-illumination-direction":{type:"number",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-illumination-anchor":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-exaggeration":{type:"number",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-shadow-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-highlight-color":{type:"color",default:"#FFFFFF",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-accent-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_background:{"background-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"background-pattern"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"background-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"background-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_sky:{"sky-type":{type:"enum",values:{gradient:{},atmosphere:{}},default:"atmosphere",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-atmosphere-sun":{type:"array",value:"number",length:2,units:"degrees",minimum:[0,0],maximum:[360,180],transition:!1,requires:[{"sky-type":"atmosphere"}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-atmosphere-sun-intensity":{type:"number",requires:[{"sky-type":"atmosphere"}],default:10,minimum:0,maximum:100,transition:!1,"property-type":"data-constant"},"sky-gradient-center":{type:"array",requires:[{"sky-type":"gradient"}],value:"number",default:[0,0],length:2,units:"degrees",minimum:[0,0],maximum:[360,180],transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-gradient-radius":{type:"number",requires:[{"sky-type":"gradient"}],default:90,minimum:0,maximum:180,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-gradient":{type:"color",default:["interpolate",["linear"],["sky-radial-progress"],.8,"#87ceeb",1,"white"],transition:!1,requires:[{"sky-type":"gradient"}],expression:{interpolated:!0,parameters:["sky-radial-progress"]},"property-type":"color-ramp"},"sky-atmosphere-halo-color":{type:"color",default:"white",transition:!1,requires:[{"sky-type":"atmosphere"}],"property-type":"data-constant"},"sky-atmosphere-color":{type:"color",default:"white",transition:!1,requires:[{"sky-type":"atmosphere"}],"property-type":"data-constant"},"sky-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},transition:{duration:{type:"number",default:300,minimum:0,units:"milliseconds"},delay:{type:"number",default:0,minimum:0,units:"milliseconds"}},"property-type":{"data-driven":{type:"property-type"},"color-ramp":{type:"property-type"},"data-constant":{type:"property-type"},constant:{type:"property-type"}},promoteId:{"*":{type:"string"}}};function Tn(t){if(!0===t||!1===t)return!0;if(!Array.isArray(t)||0===t.length)return!1;switch(t[0]){case"has":return t.length>=2&&"$id"!==t[1]&&"$type"!==t[1];case"in":return t.length>=3&&("string"!=typeof t[1]||Array.isArray(t[2]));case"!in":case"!has":case"none":return!1;case"==":case"!=":case">":case">=":case"<":case"<=":return 3!==t.length||Array.isArray(t[1])||Array.isArray(t[2]);case"any":case"all":for(const e of t.slice(1))if(!Tn(e)&&"boolean"!=typeof e)return!1;return!0;default:return!0}}function Pn(t,e="fill"){if(null==t)return{filter:()=>!0,needGeometry:!1,needFeature:!1};Tn(t)||(t=jn(t));const r=t;let n=!0;try{n=function(t){if(!On(t))return t;let e=Mn(t);return Nn(e),e=Gn(e),e}(r)}catch(t){console.warn(`Failed to extract static filter. Filter will continue working, but at higher memory usage and slower framerate.\nThis is most likely a bug, please report this via https://github.com/mapbox/mapbox-gl-js/issues/new?assignees=&labels=&template=Bug_report.md\nand paste the contents of this message in the report.\nThank you!\nFilter Expression:\n${JSON.stringify(r,null,2)}\n `)}const i=Rn[`filter_${e}`],o=bn(n,i);let s=null;if("error"===o.result)throw new Error(o.value.map((t=>`${t.key}: ${t.message}`)).join(", "));s=(t,e,r)=>o.value.evaluate(t,e,{},r);let a=null,l=null;if(n!==r){const t=bn(r,i);if("error"===t.result)throw new Error(t.value.map((t=>`${t.key}: ${t.message}`)).join(", "));a=(e,r,n,i,o)=>t.value.evaluate(e,r,{},n,void 0,void 0,i,o),l=!nr(t.value.expression)}return{filter:s,dynamicFilter:a||void 0,needGeometry:Dn(n),needFeature:!!l}}function Gn(t){if(!Array.isArray(t))return t;const e=function(t){if(kn.has(t[0]))for(let e=1;eGn(t)))}function Nn(t){let e=!1;const r=[];if("case"===t[0]){for(let n=1;n",">=","<","<=","to-boolean"]);function Ln(t,e){return te?1:0}function Dn(t){if(!Array.isArray(t))return!1;if("within"===t[0])return!0;for(let e=1;e"===e||"<="===e||">="===e?Un(t[1],t[2],e):"any"===e?(r=t.slice(1),["any"].concat(r.map(jn))):"all"===e?["all"].concat(t.slice(1).map(jn)):"none"===e?["all"].concat(t.slice(1).map(jn).map(Fn)):"in"===e?zn(t[1],t.slice(2)):"!in"===e?Fn(zn(t[1],t.slice(2))):"has"===e?qn(t[1]):"!has"===e?Fn(qn(t[1])):"within"!==e||t}function Un(t,e,r){switch(t){case"$type":return[`filter-type-${r}`,e];case"$id":return[`filter-id-${r}`,e];default:return[`filter-${r}`,t,e]}}function zn(t,e){if(0===e.length)return!1;switch(t){case"$type":return["filter-type-in",["literal",e]];case"$id":return["filter-id-in",["literal",e]];default:return e.length>200&&!e.some((t=>typeof t!=typeof e[0]))?["filter-in-large",t,["literal",e.sort(Ln)]]:["filter-in-small",t,["literal",e]]}}function qn(t){switch(t){case"$type":return!0;case"$id":return["filter-has-id"];default:return["filter-has",t]}}function Fn(t){return["!",t]}var Bn=["type","source","source-layer","minzoom","maxzoom","filter","layout"];function Wn(t,e){const r={};for(const e in t)"ref"!==e&&(r[e]=t[e]);return Bn.forEach((t=>{t in e&&(r[t]=e[t])})),r}function Hn(t){t=t.slice();const e=Object.create(null);for(let r=0;r1?h[h.length-2].toLowerCase():"";if(p==d||p==d.replace("-","")||g+"-"+p==d){s=i?s:Vn[d],h.pop(),g&&d.startsWith(g)&&h.pop();break}}i||"number"!=typeof p||(s=p,i=!0);var f=h.join(Yn).replace("Klokantech Noto Sans","Noto Sans");-1!==f.indexOf(Yn)&&(f='"'+f+'"'),l.push(f)}n=Zn[t]=[a,s,l]}return n[0]+Yn+n[1]+Yn+e+"px"+(r?"/"+r:"")+Yn+n[2]}));const Jn="https://api.mapbox.com";function Qn(t){const e="mapbox://";return 0!==t.indexOf(e)?"":t.slice(9)}function $n(t,e){const r=Qn(t);if(!r)return decodeURI(new URL(t,location.href).href);const n="styles/";if(0!==r.indexOf(n))throw new Error(`unexpected style url: ${t}`);const i=r.slice(7);return`${Jn}/styles/v1/${i}?&access_token=${e}`}const ti=["a","b","c","d"];function ei(t,e,r,n){const i=new URL(t,n),o=Qn(t);if(!o)return e?(i.searchParams.has(r)||i.searchParams.set(r,e),[decodeURI(i.href)]):[decodeURI(i.href)];if("mapbox.satellite"===o){const t=window.devicePixelRatio>=1.5?"@2x":"";return[`https://api.mapbox.com/v4/${o}/{z}/{x}/{y}${t}.webp?access_token=${e}`]}return ti.map((t=>`https://${t}.tiles.mapbox.com/v4/${o}/{z}/{x}/{y}.vector.pbf?access_token=${e}`))}const ri={},ni={};let ii=0;function oi(t){return t.id||(t.id=ii++),t.id}function si(t,e){return oi(t)+"."+(0,It.getUid)(e)}function ai(t){let e=ri[t.id];return e||(e={},ri[oi(t)]=e),e}function li(t){let e=ni[t.id];return e||(e={},ni[oi(t)]=e),e}function ui(t){return t*Math.PI/180}const ci=function(){const t=[];for(let e=78271.51696402048;t.length<=24;e/=2)t.push(e);return t}();function hi(t,e){if("undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"undefined"!=typeof OffscreenCanvas)return new OffscreenCanvas(t,e);const r=document.createElement("canvas");return r.width=t,r.height=e,r}function pi(t,e){let r=0;const n=e.length;for(;ri)).then((t=>(t instanceof Request||(t=new Request(t)),t.headers.get("Accept")||t.headers.set("Accept","application/json"),n&&(n.request=t),fetch(t).then((function(t){return delete gi[e],t.ok?t.json():Promise.reject(new Error("Error fetching source "+e))})).catch((function(t){return delete gi[e],Promise.reject(new Error("Error fetching source "+e))})))));return gi[e]=[i,o],o}function mi(t,e){if("string"!=typeof t)return Promise.resolve(t);if(!t.trim().startsWith("{"))return fi("Style",t=$n(t,e.accessToken),e);try{const e=JSON.parse(t);return Promise.resolve(e)}catch(t){return Promise.reject(t)}}const yi={};function Ai(t,e,r={}){const n=[e,JSON.stringify(t)].toString();let i=yi[n];if(!i||r.transformRequest){let o;r.transformRequest&&(o=(t,e)=>{const n=r.transformRequest&&r.transformRequest(e,"Tiles")||e;if(t instanceof undefined.VectorTile)t.setLoader(((e,r,i)=>{(0,mt.toPromise)((()=>n)).then((r=>{fetch(r).then((t=>t.arrayBuffer())).then((r=>{const n=t.getFormat().readFeatures(r,{extent:e,featureProjection:i});t.setFeatures(n)})).catch((e=>t.setState(At.ERROR)))}))}));else{const e=t.getImage();(0,mt.toPromise)((()=>n)).then((r=>{r instanceof Request?fetch(r).then((t=>t.blob())).then((t=>{const r=URL.createObjectURL(t);e.addEventListener("load",(()=>URL.revokeObjectURL(r))),e.addEventListener("error",(()=>URL.revokeObjectURL(r))),e.src=r})).catch((e=>t.setState(At.ERROR))):e.src=r}))}});const s=t.url;if(s&&!t.tiles){const n=ei(s,r.accessToken,r.accessTokenParam||"access_token",e||location.href);if(s.startsWith("mapbox://"))i=Promise.resolve({tileJson:Object.assign({},t,{url:void 0,tiles:n}),tileLoadFunction:o});else{const t={};i=fi("Source",n[0],r,t).then((function(e){return e.tiles=e.tiles.map((function(n){return"tms"===e.scheme&&(n=n.replace("{y}","{-y}")),ei(n,r.accessToken,r.accessTokenParam||"access_token",t.request.url)[0]})),Promise.resolve({tileJson:e,tileLoadFunction:o})}))}}else t=Object.assign({},t,{tiles:t.tiles.map((function(n){return"tms"===t.scheme&&(n=n.replace("{y}","{-y}")),ei(n,r.accessToken,r.accessTokenParam||"access_token",e||location.href)[0]}))}),i=Promise.resolve({tileJson:Object.assign({},t),tileLoadFunction:o});yi[n]=i}return i}function Ii(t,e,r,n){const i=[2*r*e.pixelRatio+e.width,2*r*e.pixelRatio+e.height],o=hi(i[0],i[1]),s=o.getContext("2d");s.drawImage(t,e.x,e.y,e.width,e.height,r*e.pixelRatio,r*e.pixelRatio,e.width,e.height);const a=s.getImageData(0,0,i[0],i[1]);s.globalCompositeOperation="destination-over",s.fillStyle=`rgba(${255*n.r},${255*n.g},${255*n.b},${n.a})`;const l=a.data;for(let t=0,n=a.width;t0&&s.arc(t,i,r*e.pixelRatio,0,2*Math.PI)}return s.fill(),o}function Ci(t,e,r){const n=Math.max(0,Math.min(1,(r-t)/(e-t)));return n*n*(3-2*n)}function vi(t,e,r){const n=hi(e.width,e.height),i=n.getContext("2d");i.drawImage(t,e.x,e.y,e.width,e.height,0,0,e.width,e.height);const o=i.getImageData(0,0,e.width,e.height),s=o.data;for(let t=0,e=o.width;t0?(s[i+0]=Math.round(255*r.r*l),s[i+1]=Math.round(255*r.g*l),s[i+2]=Math.round(255*r.b*l),s[i+3]=Math.round(255*l)):s[i+3]=0}return i.putImageData(o,0,0),n}const _i=Array(256).join(" ");function bi(t,e){if(e>=.05){let r="";const n=t.split("\n"),i=_i.slice(0,Math.round(e/.1));for(let t=0,e=n.length;t0&&(r+="\n"),r+=n[t].split("").join(i);return r}return t}let wi;function Si(){return wi||(wi=hi(1,1).getContext("2d")),wi}function Ei(t,e){return Si().measureText(t).width+(t.length-1)*e}const xi={};function Mi(t,e,r,n){if(-1!==t.indexOf("\n")){const i=t.split("\n"),o=[];for(let t=0,s=i.length;t1){const t=Si();t.font=e;const i=t.measureText("M").width*r;let a="";const l=[];for(let t=0,e=s.length;t1;++t){const r=l[t];if(Ei(r,n)<.35*i){const i=t>0?Ei(l[t-1],n):1/0,o=t.7*i&&Ei(o,n)<.6*i){const s=r.split(" "),a=s.pop();Ei(a,n)<.2*i&&(l[t]=s.join(" "),l[t+1]=a+" "+o),e-=1}}o=l.join("\n")}else o=t;o=bi(o,n),xi[i]=o}return o}const Ri=/font-family: ?([^;]*);/,Ti=/("|')/g;let Pi;function Gi(t){if(!Pi){Pi={};const t=document.styleSheets;for(let e=0,r=t.length;e0&&"string"==typeof u[0]&&u[0]in An);if(!o&&vn(n)&&(n=zt(n,i),o=!0),o){const t=function(t,e){const r=En(t,e);if("error"===r.result)throw new Error(r.value.map((t=>`${t.key}: ${t.message}`)).join(", "));return r.value}(n,i);l[r]=t.evaluate.bind(t)}else"color"==i.type&&(n=jt.parse(n)),l[r]=function(){return n}}var u;return Di.zoom=n,l[r](Di,i,s)}function qi(t,e,r,n,i){if(!zi(t,"layout",`${n}-allow-overlap`,e,r,i))return"declutter";return zi(t,"layout",`${n}-ignore-placement`,e,r,i)?"none":"obstacle"}function Fi(t,e,r,n,i){return i||console.warn("No filterCache provided to evaluateFilter()"),t in i||(i[t]=Pn(e).filter),Di.zoom=n,i[t](Di,r)}let Bi=!1;function Wi(t,e){if(t){if(!Bi&&(0===t.a||0===e))return;const r=t.a;return e=void 0===e?1:e,0===r?"transparent":"rgba("+Math.round(255*t.r/r)+","+Math.round(255*t.g/r)+","+Math.round(255*t.b/r)+","+r*e+")"}return t}const Hi=/\{[^{}}]*\}/g;function Vi(t,e){return t.replace(Hi,(function(t){return e[t.slice(1,-1)]||""}))}let Yi=!1;const Xi={};function Zi(t,e,r,n=ci,i=void 0,o=void 0,s=void 0,a=void 0){if("string"==typeof e&&(e=JSON.parse(e)),8!=e.version)throw new Error("glStyle version 8 required.");let l,u,c;if(Xi[si(e,t)]=Array.from(arguments),o)if("undefined"!=typeof Image){const e=new Image;let r;(0,mt.toPromise)((()=>o)).then((t=>{t instanceof Request?fetch(t).then((t=>t.blob())).then((t=>{r=URL.createObjectURL(t),e.src=r})).catch((()=>{})):(e.crossOrigin="anonymous",e.src=t,r&&URL.revokeObjectURL(r))})),e.onload=function(){l=e,u=[e.width,e.height],t.changed(),e.onload=null}}else if("undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope){const t=self;t.postMessage({action:"loadImage",src:o}),t.addEventListener("message",(function(t){"imageLoaded"===t.data.action&&t.data.src===o&&(l=t.data.image,u=[l.width,l.height])}))}const h=Hn(e.layers),f={},m=[],y={},A={},I=ai(e),C=li(e);let v;for(let t=0,n=h.length;t=P.maxzoom)continue;const k=P.filter;if(!k||Fi(G,k,x,S,C)){let n,h,C,v,G,k;R=P;const L=f.index;if(3==E&&("fill"==P.type||"fill-extrusion"==P.type))if(h=zi(P,"paint",P.type+"-opacity",S,x,I,M),P.type+"-pattern"in O){const t=zi(P,"paint",P.type+"-pattern",S,x,I,M);if(t){const e="string"==typeof t?Vi(t,m):t.toString();if(l&&i&&i[e]){++T,k=w[T],k&&k.getFill()&&!k.getStroke()&&!k.getText()||(k=new gt({fill:new d}),w[T]=k),C=k.getFill(),k.setZIndex(L);const t=e+"."+h;let r=A[t];if(!r){const n=i[e],o=hi(n.width,n.height),s=o.getContext("2d");s.globalAlpha=h,s.drawImage(l,n.x,n.y,n.width,n.height,0,0,n.width,n.height),r=s.createPattern(o,"repeat"),A[t]=r}C.setColor(r)}}}else n=Wi(zi(P,"paint",P.type+"-color",S,x,I,M),h),P.type+"-outline-color"in O&&(G=Wi(zi(P,"paint",P.type+"-outline-color",S,x,I,M),h)),G||(G=n),(n||G)&&(++T,k=w[T],(!k||n&&!k.getFill()||!n&&k.getFill()||G&&!k.getStroke()||!G&&k.getStroke()||k.getText())&&(k=new gt({fill:n?new d:void 0,stroke:G?new dt:void 0}),w[T]=k),n&&(C=k.getFill(),C.setColor(n)),G&&(v=k.getStroke(),v.setColor(G),v.setWidth(.5)),k.setZIndex(L));if(1!=E&&"line"==P.type){n="line-pattern"in O?void 0:Wi(zi(P,"paint","line-color",S,x,I,M),zi(P,"paint","line-opacity",S,x,I,M));const t=zi(P,"paint","line-width",S,x,I,M);n&&t>0&&(++T,k=w[T],k&&k.getStroke()&&!k.getFill()&&!k.getText()||(k=new gt({stroke:new dt}),w[T]=k),v=k.getStroke(),v.setLineCap(zi(P,"layout","line-cap",S,x,I,M)),v.setLineJoin(zi(P,"layout","line-join",S,x,I,M)),v.setMiterLimit(zi(P,"layout","line-miter-limit",S,x,I,M)),v.setColor(n),v.setWidth(t),v.setLineDash(O["line-dasharray"]?zi(P,"paint","line-dasharray",S,x,I,M).map((function(e){return e*t})):null),k.setZIndex(L))}let D,j,U,z,q,F,B,W,H,V=!1,Y=null,X=0;if((1==E||2==E)&&"icon-image"in N){const e=zi(P,"layout","icon-image",S,x,I,M);if(e){let n;D="string"==typeof e?Vi(e,m):e.toString();const s=a?a(t,D):void 0;if(l&&i&&i[D]||s){const t=zi(P,"layout","icon-rotation-alignment",S,x,I,M);if(2==E){const e=r.getGeometry();if(e.getFlatMidpoint||e.getFlatMidpoints){const r=e.getExtent();if(Math.sqrt(Math.max(Math.pow((r[2]-r[0])/o,2),Math.pow((r[3]-r[1])/o,2)))>150){const r="MultiLineString"===e.getType()?e.getFlatMidpoints():e.getFlatMidpoint();Ui||(ji=[NaN,NaN],Ui=new pt("Point",ji,[],2,{},void 0)),n=Ui,ji[0]=r[0],ji[1]=r[1];if("line"===zi(P,"layout","symbol-placement",S,x,I,M)&&"map"===t){const t=e.getStride(),n=e.getFlatCoordinates();for(let e=0,i=n.length-t;e=l){X=Math.atan2(o-a,s-i);break}}}}}}if(2!==E||n){const e=zi(P,"layout","icon-size",S,x,I,M),r=void 0!==O["icon-color"]?zi(P,"paint","icon-color",S,x,I,M):null;if(!r||0!==r.a){const n=zi(P,"paint","icon-halo-color",S,x,I,M),o=zi(P,"paint","icon-halo-width",S,x,I,M);let a=`${D}.${e}.${o}.${n}`;if(null!==r&&(a+=`.${r}`),j=y[a],!j){const h=qi(P,S,x,"icon",I);let p;"icon-offset"in N&&(p=zi(P,"layout","icon-offset",S,x,I,M).slice(0),p[0]*=e,p[1]*=-e);let d=r?[255*r.r,255*r.g,255*r.b,r.a]:void 0;if(s){const r={color:d,rotateWithView:"map"===t,displacement:p,declutterMode:h,scale:e};"string"==typeof s?r.src=s:(r.img=s,r.imgSize=[s.width,s.height]),j=new g(r)}else{const s=i[D];let a,f,m;o?s.sdf?(a=Ii(vi(l,s,r||[0,0,0,1]),{x:0,y:0,width:s.width,height:s.height,pixelRatio:s.pixelRatio},o,n),d=void 0):a=Ii(l,s,o,n):(s.sdf?(c||(c=vi(l,{x:0,y:0,width:u[0],height:u[1]},{r:1,g:1,b:1,a:1})),a=c):a=l,f=[s.width,s.height],m=[s.x,s.y]),j=new g({color:d,img:a,imgSize:u,size:f,offset:m,rotateWithView:"map"===t,scale:e/s.pixelRatio,displacement:p,declutterMode:h})}y[a]=j}}j&&(++T,k=w[T],k&&k.getImage()&&!k.getFill()&&!k.getStroke()||(k=new gt,w[T]=k),k.setGeometry(n),j.setRotation(X+ui(zi(P,"layout","icon-rotate",S,x,I,M))),j.setOpacity(zi(P,"paint","icon-opacity",S,x,I,M)),j.setAnchor(ki[zi(P,"layout","icon-anchor",S,x,I,M)]),k.setImage(j),Y=k.getText(),k.setText(void 0),k.setZIndex(L),V=!0,U=!1)}else U=!0}}}if(1==E&&"circle"===P.type){++T,k=w[T],k&&k.getImage()&&!k.getFill()&&!k.getStroke()||(k=new gt,w[T]=k);const t="circle-radius"in O?zi(P,"paint","circle-radius",S,x,I,M):5,e=Wi(zi(P,"paint","circle-stroke-color",S,x,I,M),zi(P,"paint","circle-stroke-opacity",S,x,I,M)),r=zi(P,"paint","circle-translate",S,x,I,M),n=Wi(zi(P,"paint","circle-color",S,x,I,M),zi(P,"paint","circle-opacity",S,x,I,M)),i=zi(P,"paint","circle-stroke-width",S,x,I,M),o=t+"."+e+"."+n+"."+i+"."+r[0]+"."+r[1];j=y[o],j||(j=new p({radius:t,displacement:[r[0],-r[1]],stroke:e&&i>0?new dt({width:i,color:e}):void 0,fill:n?new d({color:n}):void 0,declutterMode:"none"}),y[o]=j),k.setImage(j),Y=k.getText(),k.setText(void 0),k.setGeometry(void 0),k.setZIndex(L),V=!0}if("text-field"in N){B=Math.round(zi(P,"layout","text-size",S,x,I,M));const t=zi(P,"layout","text-font",S,x,I,M);F=zi(P,"layout","text-line-height",S,x,I,M),q=Kn(s?s(t,e.metadata?e.metadata["ol:webfonts"]:void 0):t,B,F),q.includes("sans-serif")||(q+=",sans-serif"),W=zi(P,"layout","text-letter-spacing",S,x,I,M),H=zi(P,"layout","text-max-width",S,x,I,M);const r=zi(P,"layout","text-field",S,x,I,M);z="object"==typeof r&&r.sections?1===r.sections.length?r.toString():r.sections.reduce(((e,r,n)=>{const i=r.fontStack?r.fontStack.split(","):t,o=Kn(s?s(i):i,B*(r.scale||1),F);let a=r.text;if("\n"===a)return e.push("\n",""),e;if(2==E)return e.push(bi(a,W),o),e;a=Mi(a,o,H,W).split("\n");for(let t=0,r=a.length;t0&&e.push("\n",""),e.push(a[t],o);return e}),[]):Vi(r,m).trim(),h=zi(P,"paint","text-opacity",S,x,I,M)}if(z&&h&&!U){V||(++T,k=w[T],k&&k.getText()&&!k.getFill()&&!k.getStroke()||(k=new gt,w[T]=k),k.setImage(void 0),k.setGeometry(void 0));const t=qi(P,S,x,"text",I);k.getText()||k.setText(Y),Y=k.getText(),(!Y||"getDeclutterMode"in Y&&Y.getDeclutterMode()!==t)&&(Y=new ft({padding:[2,2,2,2],declutterMode:t}),k.setText(Y));const e=zi(P,"layout","text-transform",S,x,I,M);"uppercase"==e?z=Array.isArray(z)?z.map(((t,e)=>e%2?t:t.toUpperCase())):z.toUpperCase():"lowercase"==e&&(z=Array.isArray(z)?z.map(((t,e)=>e%2?t:t.toLowerCase())):z.toLowerCase());const r=Array.isArray(z)?z:2==E?bi(z,W):Mi(z,q,H,W);if(Y.setText(r),Y.setFont(q),Y.setRotation(ui(zi(P,"layout","text-rotate",S,x,I,M))),"function"==typeof Y.setKeepUpright){const t=zi(P,"layout","text-keep-upright",S,x,I,M);Y.setKeepUpright(t)}const n=zi(P,"layout","text-anchor",S,x,I,M),i=V||1==E?"point":zi(P,"layout","symbol-placement",S,x,I,M);let o;if("line-center"===i?(Y.setPlacement("line"),o="center"):Y.setPlacement(i),"line"===i&&"function"==typeof Y.setRepeat){const t=zi(P,"layout","symbol-spacing",S,x,I,M);Y.setRepeat(2*t)}Y.setOverflow("point"===i);let s=zi(P,"paint","text-halo-width",S,x,I,M);const a=zi(P,"layout","text-offset",S,x,I,M),l=zi(P,"paint","text-translate",S,x,I,M);let u=0,c=0;if("point"==i){o="center",-1!==n.indexOf("left")?(o="left",c=s):-1!==n.indexOf("right")&&(o="right",c=-s);const t=zi(P,"layout","text-rotation-alignment",S,x,I,M);Y.setRotateWithView("map"==t)}else Y.setMaxAngle(ui(zi(P,"layout","text-max-angle",S,x,I,M))*z.length/r.length),Y.setRotateWithView(!1);Y.setTextAlign(o);let p="middle";0==n.indexOf("bottom")?(p="bottom",u=-s-.5*(F-1)*B):0==n.indexOf("top")&&(p="top",u=s+.5*(F-1)*B),Y.setTextBaseline(p);const d=zi(P,"layout","text-justify",S,x,I,M);Y.setJustify("auto"===d?void 0:d),Y.setOffsetX(a[0]*B+c+l[0]),Y.setOffsetY(a[1]*B+u+l[1]),b.setColor(Wi(zi(P,"paint","text-color",S,x,I,M),h)),Y.setFill(b);const g=Wi(zi(P,"paint","text-halo-color",S,x,I,M),h);if(g&&s>0){_.setColor(g),s*=2;const t=.5*B;_.setWidth(s<=t?s:t),Y.setStroke(_)}else Y.setStroke(void 0);const f=zi(P,"layout","text-padding",S,x,I,M),m=Y.getPadding();f!==m[0]&&(m[0]=f,m[1]=f,m[2]=f,m[3]=f),k.setZIndex(L)}}}return T>-1?(w.length=T+1,Yi&&("set"in r?r.set("mapbox-layer",R):r.getProperties()["mapbox-layer"]=R),w):void 0};return t.setStyle(S),t.set("mapbox-source",v),t.set("mapbox-layers",m),t.set("mapbox-featurestate",t.get("mapbox-featurestate")||{}),S}function Ki(t,e=512){return t.getExtent()?(0,Et.createXYZ)({extent:t.getExtent(),tileSize:e,maxZoom:22}).getResolutions():ci}function Ji(t,e){if(!e.accessToken){e=Object.assign({},e);new URL(t).searchParams.forEach(((t,r)=>{e.accessToken=t,e.accessTokenParam=r}))}return e}function Qi(t,e,r="",i={},s=void 0){let a,l,u,c,h=!0;return"string"==typeof r||Array.isArray(r)?c=r:(u=r,c=u.source||u.layers,i=u),"string"==typeof i?(a=i,u={}):(a=i.styleUrl,u=i),!1===u.updateSource&&(h=!1),s||(s=u.resolutions),a||"string"!=typeof e||e.trim().startsWith("{")||(a=e),a&&(a=a.startsWith("data:")?location.href:$n(a,u.accessToken),u=Ji(a,u)),new Promise((function(r,i){mi(e,u).then((function(e){if(8!=e.version)return i(new Error("glStyle version 8 required."));if(!(t instanceof _t||t instanceof n))return i(new Error("Can only apply to VectorLayer or VectorTileLayer"));const p=t instanceof n?"vector":"geojson";if(c?l=Array.isArray(c)?e.layers.find((function(t){return t.id===c[0]})).source:c:(l=Object.keys(e.sources).find((function(t){return e.sources[t].type===p})),c=l),!l)return i(new Error(`No ${p} source found in the glStyle.`));function d(){if(!h)return Promise.resolve();if(t instanceof n)return to(e.sources[l],a,u).then((function(e){const r=t.getSource();r?e!==r&&(r.setTileUrlFunction(e.getTileUrlFunction()),"function"==typeof r.setUrls&&"function"==typeof e.getUrls&&r.setUrls(e.getUrls()),r.format_||(r.format_=e.format_),r.getAttributions()||r.setAttributions(e.getAttributions()),r.getTileLoadFunction()===o.defaultLoadFunction&&r.setTileLoadFunction(e.getTileLoadFunction()),(0,xt.equivalent)(r.getProjection(),e.getProjection())&&(r.tileGrid=e.getTileGrid())):t.setSource(e);const n=t.getSource().getTileGrid();!isFinite(t.getMaxResolution())&&!isFinite(t.getMinZoom())&&n.getMinZoom()>0&&t.setMaxResolution(di(Math.max(0,n.getMinZoom()-1e-12),n.getResolutions()))}));const r=e.sources[l];let i=t.getSource();i&&i.get("mapbox-source")===r||(i=ro(r,a,u));const s=t.getSource();return s?i!==s&&(s.getAttributions()||s.setAttributions(i.getAttributions()),s.format_||(s.format_=i.getFormat()),s.url_=i.getUrl()):t.setSource(i),Promise.resolve()}let g,f,m,y;function A(){if(y||e.sprite&&!f)y?(t.setStyle(y),d().then(r).catch(i)):i(new Error("Something went wrong trying to apply style."));else{if(u.projection&&!s){const t=(0,xt.get)(u.projection).getUnits();"m"!==t&&(s=ci.map((e=>e/wt.METERS_PER_UNIT[t])))}y=Zi(t,e,c,s,f,m,((t,e=u.webfonts)=>function(t,e="https://cdn.jsdelivr.net/npm/@fontsource/{font-family}/{fontweight}{-fontstyle}.css"){const r=t.toString();if(r in Ni)return Ni[r];const n=[];for(let e=0,r=t.length;e=1.5?.5:1;const r=.5==g?"@2x":"";let n=t.origin+t.pathname+r+".json"+t.search;new Promise((function(e,r){fi("Sprite",n,u).then(e).catch((function(i){n=t.origin+t.pathname+".json"+t.search,fi("Sprite",n,u).then(e).catch(r)}))})).then((function(e){if(void 0===e&&i(new Error("No sprites found.")),f=e,m=t.origin+t.pathname+r+".png"+t.search,u.transformRequest){const t=u.transformRequest(m,"SpriteImage")||m;(t instanceof Request||t instanceof Promise)&&(m=t)}A()})).catch((function(t){i(new Error(`Sprites cannot be loaded: ${n}: ${t.message}`))}))}else A()})).catch(i)}))}function $i(t,e,r){const n=new a({tileJSON:e,tileSize:t.tileSize||e.tileSize||512}),i=n.getTileJSON(),o=n.getTileGrid(),s=(0,xt.get)(r.projection||"EPSG:3857"),l=function(t,e){const r=t.bounds;if(r){const t=(0,xt.fromLonLat)([r[0],r[1]],e),n=(0,xt.fromLonLat)([r[2],r[3]],e);return[t[0],t[1],n[0],n[1]]}return(0,xt.get)(e).getExtent()}(i,s),u=s.getExtent(),c=i.minzoom||0,h=i.maxzoom||22,p={attributions:n.getAttributions(),projection:s,tileGrid:new vt({origin:u?(0,Mt.getTopLeft)(u):o.getOrigin(0),extent:l||o.getExtent(),minZoom:c,resolutions:Ki(s,e.tileSize).slice(0,h+1),tileSize:o.getTileSize(0)})};return Array.isArray(i.tiles)?p.urls=i.tiles:p.url=i.tiles,p}function to(t,e,r){return new Promise((function(n,i){Ai(t,e,r).then((function({tileJson:e,tileLoadFunction:i}){const s=$i(t,e,r);s.tileLoadFunction=i,s.format=new u,n(new o(s))})).catch(i)}))}function eo(t){return`{bbox-${(t?t.getCode():"EPSG:3857").toLowerCase().replace(/[^a-z0-9]/g,"-")}}`}function ro(t,e,r){const n=r.projection?new Ct({dataProjection:r.projection}):new Ct,i=t.data,o={};if("string"==typeof i){const[o]=ei(i,r.accessToken,r.accessTokenParam||"access_token",e||location.href);if(/\{bbox-[0-9a-z-]+\}/.test(o)){const e=(t,e,r)=>{const n=eo(r);return o.replace(n,`${t.join(",")}`)},i=new bt({attributions:t.attribution,format:n,loader:(t,n,o,s,a)=>{fi("GeoJSON","function"==typeof e?e(t,n,o):e,r).then((t=>{const e=i.getFormat().readFeatures(t,{featureProjection:o});i.addFeatures(e),s(e)})).catch((e=>{i.removeLoadedExtent(t),a()}))},strategy:St.bbox});return i.set("mapbox-source",t),i}const s=new bt({attributions:t.attribution,format:n,url:o,loader:(t,e,n,i,a)=>{fi("GeoJSON",o,r).then((t=>{const e=s.getFormat().readFeatures(t,{featureProjection:n});s.addFeatures(e),i(e)})).catch((e=>{s.removeLoadedExtent(t),a()}))}});return s}o.features=n.readFeatures(i,{featureProjection:(0,xt.getUserProjection)()||"EPSG:3857"});const s=new bt(Object.assign({attributions:t.attribution,format:n},o));return s.set("mapbox-source",t),s}var no=r(2536),io=r(7278);function oo(t){return oo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},oo(t)}function so(t,e){for(var r=0;r{"use strict";r.d(e,{A:()=>y});var n=r(9201),i=r(9583),o=r.n(i),s=r(2536),a=r(7278),l=r(4659);function u(t){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},u(t)}function c(t,e){for(var r=0;r{"use strict";r.d(e,{A:()=>y});var n=r(9201),i=r(9583),o=r.n(i),s=r(2536),a=r(7278),l=r(9815);function u(t){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},u(t)}function c(t,e){for(var r=0;r{"use strict";r.d(e,{A:()=>A});var n=r(2987);const i=ol.source.TileWMS;var o=r.n(i),s=r(2536),a=r(5844),l=r(7278),u=r(8330);function c(t){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},c(t)}function h(t,e){for(var r=0;r{"use strict";r.d(e,{A:()=>C});var n=r(2987);const i=ol.tilegrid.WMTS;var o=r.n(i),s=r(9290),a=r(2536);const l={getZoomLevelFromScaleDenominator:function(t,e){var r={};if("EPSG:2154"===e)r={0:104579.224549894,1:52277.5323537905,2:26135.4870785954,3:13066.8913818,4:6533.2286041135,5:3266.5595244627,6:1633.2660045974,7:816.629554986,8:408.3139146768,9:204.1567415109,10:102.0783167832,11:51.0391448966,12:25.5195690743,13:12.7597836936,14:6.379891636,15:3.1899457653,16:1.5949728695,17:.7974864315,18:.3987432149,19:.1993716073,20:.0996858037,21:.0498429018};else r={0:156543.033928041,1:78271.51696402048,2:39135.758482010235,3:19567.87924100512,4:9783.93962050256,5:4891.96981025128,6:2445.98490512564,7:1222.99245256282,8:611.49622628141,9:305.7481131407048,10:152.8740565703525,11:76.43702828517624,12:38.21851414258813,13:19.10925707129406,14:9.554628535647032,15:4.777314267823516,16:2.388657133911758,17:1.194328566955879,18:.5971642834779395,19:.2985821417389697,20:.1492910708694849,21:.0746455354347424};var n=28e-5*t;for(var i in r)if(r.hasOwnProperty(i)&&r[i]<=n)return i=parseInt(i,10);return 0},getAttributions:function(t){var e=t.zoom,r=[];if(null!=t.originators&&t.visibility)for(var n,i=0,o=t.originators.length;ie&&(n=!1),n&&p&&p{"use strict";function _typeof(t){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_typeof(t)}function _regeneratorRuntime(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */_regeneratorRuntime=function(){return e};var t,e={},r=Object.prototype,n=r.hasOwnProperty,i=Object.defineProperty||function(t,e,r){t[e]=r.value},o="function"==typeof Symbol?Symbol:{},s=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag";function u(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},"")}catch(t){u=function(t,e,r){return t[e]=r}}function c(t,e,r,n){var o=e&&e.prototype instanceof y?e:y,s=Object.create(o.prototype),a=new T(n||[]);return i(s,"_invoke",{value:E(t,r,a)}),s}function h(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=c;var p="suspendedStart",d="suspendedYield",g="executing",f="completed",m={};function y(){}function A(){}function I(){}var C={};u(C,s,(function(){return this}));var v=Object.getPrototypeOf,_=v&&v(v(P([])));_&&_!==r&&n.call(_,s)&&(C=_);var b=I.prototype=y.prototype=Object.create(C);function w(t){["next","throw","return"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function S(t,e){function r(i,o,s,a){var l=h(t[i],t,o);if("throw"!==l.type){var u=l.arg,c=u.value;return c&&"object"==_typeof(c)&&n.call(c,"__await")?e.resolve(c.__await).then((function(t){r("next",t,s,a)}),(function(t){r("throw",t,s,a)})):e.resolve(c).then((function(t){u.value=t,s(u)}),(function(t){return r("throw",t,s,a)}))}a(l.arg)}var o;i(this,"_invoke",{value:function(t,n){function i(){return new e((function(e,i){r(t,n,e,i)}))}return o=o?o.then(i,i):i()}})}function E(e,r,n){var i=p;return function(o,s){if(i===g)throw Error("Generator is already running");if(i===f){if("throw"===o)throw s;return{value:t,done:!0}}for(n.method=o,n.arg=s;;){var a=n.delegate;if(a){var l=x(a,n);if(l){if(l===m)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===p)throw i=f,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=g;var u=h(e,r,n);if("normal"===u.type){if(i=n.done?f:d,u.arg===m)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(i=f,n.method="throw",n.arg=u.arg)}}}function x(e,r){var n=r.method,i=e.iterator[n];if(i===t)return r.delegate=null,"throw"===n&&e.iterator.return&&(r.method="return",r.arg=t,x(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),m;var o=h(i,e.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,m;var s=o.arg;return s?s.done?(r[e.resultName]=s.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,m):s:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,m)}function M(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function R(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(M,this),this.reset(!0)}function P(e){if(e||""===e){var r=e[s];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function r(){for(;++i=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return i("end");if(s.tryLoc<=this.prev){var l=n.call(s,"catchLoc"),u=n.call(s,"finallyLoc");if(l&&u){if(this.prev=0;--r){var i=this.tryEntries[r];if(i.tryLoc<=this.prev&&n.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),R(r),m}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;R(r)}return i}}throw Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:P(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),m}},e}function asyncGeneratorStep(t,e,r,n,i,o,s){try{var a=t[o](s),l=a.value}catch(t){return void r(t)}a.done?e(l):Promise.resolve(l).then(n,i)}function _asyncToGenerator(t){return function(){var e=this,r=arguments;return new Promise((function(n,i){var o=t.apply(e,r);function s(t){asyncGeneratorStep(o,n,i,s,a,"next",t)}function a(t){asyncGeneratorStep(o,n,i,s,a,"throw",t)}s(void 0)}))}}__webpack_require__.d(__webpack_exports__,{A:()=>__WEBPACK_DEFAULT_EXPORT__});var m_suggestions=[],controller=new AbortController,m_index="geoplateforme",m_fields="title,layer_name",m_size="1000",m_maximumResponses=10,m_filterByService=["WMTS","TMS"],m_filterByProjection=[],m_filterByLayerPriority=[],m_filterWMTSPriority=!1,m_filterByTMS=["ADMIN_EXPRESS","ISOHYPSE","PLAN.IGN","OCSGE_2016","OCSGE_2019","PCI","BDTOPO"],m_url="https://data.geopf.fr/recherche/api/indexes/".concat(m_index,"/suggest"),target=new EventTarget,suggest=function(){var t=_asyncToGenerator(_regeneratorRuntime().mark((function t(e){var r,n,i,o,s,a,l,u,c,h;return _regeneratorRuntime().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return clear(),controller=new AbortController,r=new URL(m_url),n={text:e,fields:m_fields,size:m_size},Object.keys(n).forEach((function(t){return r.searchParams.append(t,n[t])})),t.next=7,fetch(r,{});case 7:return i=t.sent,t.next=10,i.json();case 10:if(o=t.sent,200===i.status){t.next=13;break}throw new Error(i.message);case 13:if(o&&0!==o.length){t.next=15;break}return t.abrupt("return");case 15:s=_regeneratorRuntime().mark((function t(){var e;return _regeneratorRuntime().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=o[a],m_filterByLayerPriority.findIndex((function(t){return t.includes(e.source.layer_name)}))>=0&&(o[a].score+=100);case 3:case"end":return t.stop()}}),t)})),a=0;case 17:if(!(a=m_maximumResponses)){t.next=32;break}return t.abrupt("break",45);case 32:if(h={attribution:c.source.attribution||{},srs:c.source.srs||[],keywords:c.source.keywords||[],extent:c.source.extent||{},metadata:c.source.metadata_urls||[],name:c.source.layer_name||"",title:c.source.title||"",description:c.source.description,service:c.source.type||"",url:c.source.url||"",tech:c.source.tech||{},tags:c.source.tags||{},theme:c.source.theme||"",producer:c.source.producer||""},!m_filterByTMS.length){t.next=36;break}if(!("WMTS"===h.service&&m_filterByTMS.includes(h.name)||"TMS"===h.service&&!m_filterByTMS.includes(h.name))){t.next=36;break}return t.abrupt("continue",42);case 36:if(!m_filterByProjection.length){t.next=39;break}if(!m_filterByProjection.includes(h.srs[0])){t.next=39;break}return t.abrupt("continue",42);case 39:if(!l||!l[h.name]||"WMS"!==h.service){t.next=41;break}return t.abrupt("continue",42);case 41:m_suggestions.push(h);case 42:u++,t.next=26;break;case 45:return target.dispatchEvent(new CustomEvent("suggest",{bubbles:!0,detail:getSuggestions()})),t.abrupt("return",getSuggestions());case 47:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),unique=function(){return m_suggestions.filter((function(t,e,r){return e===r.findIndex((function(e){return e.service===t.service&&e.name===t.name&&e.title===t.title&&e.description===t.description}))}))},clear=function(){controller.abort(),m_suggestions=[]},inventory=function(t){for(var e={},r=0;r{"use strict";r.d(e,{A:()=>m});const n=ol.source.WMTS;var i=r.n(n),o=r(2938),s=r(2987),a=r(2536);function l(t){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},l(t)}function u(t,e){for(var r=0;r{"use strict";r.d(e,{A:()=>n});const n={configuration:{},isConfigLoaded:function(){if(this.configuration&&0!==Object.keys(this.configuration).length)return!0;var t="undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0!==r.g?r.g:{};return!!(t.Gp&&t.Gp.Config&&t.Gp.Config.layers&&0!==Object.keys(t.Gp.Config.layers).length)&&(this.configuration=t.Gp.Config,!0)}}},2536:(t,e,r)=>{"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}r.d(e,{A:()=>i});const i={detectSupport:function(){var t=!0,e=window.navigator.userAgent.toLowerCase();return-1===e.indexOf("iphone")&&-1===e.indexOf("ipod")&&-1===e.indexOf("ipad")&&-1===e.indexOf("android")&&-1===e.indexOf("mobile")&&-1===e.indexOf("blackberry")&&-1===e.indexOf("tablet")&&-1===e.indexOf("phone")&&-1===e.indexOf("touch")||(t=!1),-1===e.indexOf("msie")&&-1===e.indexOf("trident")||(t=!0),t},assign:function(t,e){for(var r in t=t||{},e)e.hasOwnProperty(r)&&(t[r]=e[r]);return t},mergeParams:function(t,e,r){if(void 0!==t&&void 0!==e)for(var i in void 0===r&&(r=!0),e)e.hasOwnProperty(i)&&("object"===n(e[i])?t.hasOwnProperty(i)?this.mergeParams(t[i],e[i],r):t[i]=e[i]:t.hasOwnProperty(i)?r&&(t[i]=e[i]):t[i]=e[i])}}},5844:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(3065),i={getLogger:function(t){if(void 0===e)var e={env:{VERBOSE:!1}};e.env.VERBOSE?n.enableAll():n.disableAll();var r=t||"default";return n.getLogger(r)},disableAll:function(){var t=n.getLoggers();for(var e in t){if(Object.hasOwnProperty.call(t,e))t[e].disableAll()}},enableAll:function(){var t=n.getLoggers();for(var e in t){if(Object.hasOwnProperty.call(t,e))t[e].enableAll()}}};const o=i;window.Gp&&(window.Gp.Logger=i)},6964:function(t,e,r){ /*! @@ -19,5 +19,5 @@ * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE * @version v4.2.8+1e68dce6 */ -t.exports=function(){"use strict";function t(t){var e=typeof t;return null!==t&&("object"===e||"function"===e)}function e(t){return"function"==typeof t}var n=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},i=0,o=void 0,s=void 0,a=function(t,e){C[i]=t,C[i+1]=e,2===(i+=2)&&(s?s(v):b())};function l(t){s=t}function u(t){a=t}var c="undefined"!=typeof window?window:void 0,h=c||{},p=h.MutationObserver||h.WebKitMutationObserver,d="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),g="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function f(){return function(){return process.nextTick(v)}}function m(){return void 0!==o?function(){o(v)}:I()}function y(){var t=0,e=new p(v),r=document.createTextNode("");return e.observe(r,{characterData:!0}),function(){r.data=t=++t%2}}function A(){var t=new MessageChannel;return t.port1.onmessage=v,function(){return t.port2.postMessage(0)}}function I(){var t=setTimeout;return function(){return t(v,1)}}var C=new Array(1e3);function v(){for(var t=0;t{"use strict";function n(t){if(!(this instanceof n))throw new TypeError("ErrorService constructor cannot be called as a function.");var e=t;"string"==typeof t||t instanceof String?(this.message=t,this.status=-1,this.type=n.TYPE_UNKERR):(this.message=e.message||"undefined!?",this.type=e.type,this.status=e.status||-1),this.name="ErrorService",this.stack=(new Error).stack}r.d(e,{A:()=>i}),n.TYPE_SRVERR="SERVICE_ERROR",n.TYPE_USEERR="USAGE_ERROR",n.TYPE_UNKERR="UNKNOWN_ERROR",n.prototype=Object.create(Error.prototype,{constructor:{value:n,writable:!0,configurable:!0}});const i=n},4841:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(2710);function i(t){if(this.logger=n.A.getLogger(),this.logger.trace("[Constructeur WPS()]"),!(this instanceof i))throw new TypeError("WPS constructor cannot be called as a function.");if(this.options=t||{},this.DataObject=this.options.data,!this.DataObject)throw new TypeError("This data object is not defined !");this.paramservice=this.options.param.service||"WPS",this.paramversion=this.options.param.version||"1.0.0",this.paramidentifier=this.options.param.identifier||"gs:WPS",this.paramrawdataoutput=this.options.param.rawdataoutput||"result",this.paramrequest=this.options.param.request||"Execute",this.method=this.options.method||"GET"}i.prototype={requestString:null,constructor:i,template:{get:{value:"service=__SERVICE__&version=__VERSION__&rawdataoutput=__RAWDATAOUTPUT__&identifier=__IDENTIFIER__&request=__REQUEST__&datainputs=\x3c!-- __DATAINPUTS__ --\x3e",input:"__KEY__=__DATA__"},post:{value:'__IDENTIFIER__\x3c!-- __DATAINPUTS__ --\x3e__RAWDATAOUTPUT__',input:"__KEY____DATA__"}},namespaceByDefault:function(){return['xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"','xmlns="http://www.opengis.net/wps/1.0.0"','xmlns:wfs="http://www.opengis.net/wfs"','xmlns:wps="http://www.opengis.net/wps/1.0.0"','xmlns:ows="http://www.opengis.net/ows/1.1"','xmlns:gml="http://www.opengis.net/gml"','xmlns:ogc="http://www.opengis.net/ogc"','xmlns:wcs="http://www.opengis.net/wcs/1.1.1"','xmlns:xlink="http://www.w3.org/1999/xlink"'].join(" ")},schemaLocationByDefault:function(){return'xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd"'},processRequestString:function(){this.logger.trace("WPS::processRequestString ()");var t="";if("POST"===this.method)t=this.template.post.value;else{if("GET"!==this.method)return this.logger.error("No other method supported by the service !"),!1;t=this.template.get.value}return t=(t=(t=(t=(t=t.replace(/__SERVICE__/g,this.paramservice)).replace(/__VERSION__/g,this.paramversion)).replace(/__RAWDATAOUTPUT__/g,this.paramrawdataoutput)).replace(/__IDENTIFIER__/g,this.paramidentifier)).replace(/__REQUEST__/g,this.paramrequest),"POST"===this.method&&(t=(t=t.replace(/__NAMESPACE__/g,this.namespaceByDefault)).replace(/__SCHEMALOCATION__/g,this.schemaLocationByDefault)),(t=t.replace(//g,this.__addDataInputs()))?(this.requestString=t,this.logger.trace("traduction tmpl",t),!0):(this.logger.warn("traduction tmpl : empty request !?"),!1)},__addDataInputs:function(){this.logger.trace("WPS::__addDataInputs ()");for(var t,e="GET"===this.method?this.template.get.input:this.template.post.input,r="GET"===this.method?";":"",n="",i=this,o=this.DataObject.getData(),s=0;s{"use strict";r.d(e,{A:()=>a});var n=r(2710);function i(t){if(!(this instanceof i))throw new TypeError("XML constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur XML ()]"),this.xmlString=null,this.xmlDoc=null,this.reader=null,t&&(t.xmlString&&"string"==typeof t.xmlString&&(this.xmlString=t.xmlString,this.xmlDoc=o(t.xmlString)),t.reader&&this.setReader(t.reader))}function o(t){if("undefined"==typeof window)return(new(0,r(8978).S4)).parseFromString(t,"text/xml");var e,n,i="Erreur lors du parsing de la réponse du service : XML non conforme";if(window.ActiveXObject){(n=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,n.loadXML(t);var o=n.parseError;if(o.errorCode)throw o.line&&o.linepos&&(i+="( ligne "+o.line+", colonne "+o.linepos),o.reason&&(i+=": "+o.reason+")"),new Error(i);return n}if(window.DOMParser){e=new window.DOMParser;try{n=e.parseFromString(t,"text/xml")}catch(t){throw"SyntaxError"===t.message?new Error(i):new Error("Erreur lors du parsing de la réponse du service : "+t.message)}if(n.getElementsByTagName("parsererror").length>0)for(var s=n.getElementsByTagName("parsererror"),a=0;a0){var r=function(t){if(t.attributes.length>0){for(var e={},r=t.attributes,n=0;n{"use strict";r.d(e,{Ay:()=>C});var n=r(3255),i=r(7966),o=r(3565),s=r(3041),a=r(5941),l=r(9924),u=r(1489),c=r(2993),h=r(7868),p=r(4154),d=r(210),g=r(8288),f=r(3474),m=r(9032);const y=m.rE,A=m.p6;var I={};I.servicesVersion=y,I.servicesDate=A,I.Protocols={},I.Protocols.XHR=d.A,I.Services=n.A,I.Services.DefaultUrl=i.A,I.Services.AltiResponse=o.A,I.Services.Alti={},I.Services.Alti.Elevation=s.A,I.Services.AutoCompleteResponse=a.A,I.Services.AutoComplete={},I.Services.AutoComplete.SuggestedLocation=l.A,I.Services.Config=p.A,I.Services.IsoCurveResponse=u.A,I.Services.RouteResponse=c.A,I.Services.Route={},I.Services.Route.RouteInstruction=h.A,I.Error=g.A,I.Helper=f.A;const C=I},3494:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n,i=r(2710);const o={uuid:(n=Math.floor(Date.now()),function(){return n++}),call:function(t){var e=i.A.getLogger("JSONP");if(e.trace("[JSONP::call ()]"),!t)throw e.error("missing parameter : options !"),new Error("missing parameter : options !");if(!t.url)throw e.error("missing parameter : options.url !"),new Error("missing parameter : options.url !");if(t.timeOut||(e.info("setting 'options.timeOut' default value"),t.timeOut=0),!t.onResponse)throw e.error("missing parameter : options.onResponse !"),new Error("missing parameter : options.onResponse !");var r="string"==typeof t.callbackSuffix?t.callbackSuffix:this.uuid(),n=!1,o=!1,s=t.url.indexOf("callback=");if(-1!==s){n=!0;var a=t.url.indexOf("&",s);-1===a&&(a=t.url.length);var l=t.url.substring(s+9,a);l&&(o=!0,t.callbackName=l,e.info("setting 'options.callbackName' value ("+t.callbackName+") from 'options.url' parameter"))}if(!n){var u=t.url.indexOf("?");-1===u?t.url=t.url+"?callback=":u===t.url.length?t.url=t.url+"callback=":t.url=t.url+"&callback=",e.info("setting callback default key in 'options.url' : "+t.url)}var c=!!t.callbackName||o;if(o||(t.callbackName||(e.info("setting 'options.callbackName' default value"),t.callbackName="callback",(r||""===r)&&(t.callbackName+=r)),t.url=t.url.replace("callback=","callback="+t.callbackName),e.info("setting callback function name in 'options.url' : "+t.url)),t.onTimeOut||(e.info("setting 'options.onTimeOut' default value"),t.onTimeOut=function(){console.log("TimeOut while invoking url : "+t.url)}),!c){var h=this,p=null;t.timeOut>0&&(p=window.setTimeout((function(){window[t.callbackName]=function(){},t.onTimeOut(),h._deleteScript(r)}),t.timeOut)),window[t.callbackName]=function(e){window.clearTimeout(p),t.onResponse(e),h._deleteScript(r)}}this._createScript(r,t.url)},_createScript:function(t,e){var r,n=document.getElementById("results"+t);(r=document.createElement("script")).setAttribute("type","text/javascript"),r.setAttribute("src",e),r.setAttribute("charset","UTF-8"),r.setAttribute("id","results"+t),r.setAttribute("async","true");var i=document.documentElement||document.getElementsByTagName("head")[0];null===n?i.appendChild(r):i.replaceChild(r,n)},_deleteScript:function(t){var e=document.getElementById("results"+t);if(e){var r=e.parentNode||document.documentElement;if(!r)return;r.removeChild(e)}}}},6250:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(3474),i=r(210),o=r(3494);const s={send:function(t){var e=t||{method:"GET",protocol:"XHR",timeOut:0,format:null,wrap:!0,nocache:!0,output:"json",callback:null,callbackSuffix:null};if("undefined"!=typeof window||"JSONP"!==t.protocol){if("XHR"===t.protocol||"json"===t.format?e.wrap=!1:"JSONP"===t.protocol&&"xml"===t.format&&(e.wrap=!0),e.callback=null,e.output=e.wrap?"json":null,e.wrap){var r={};r.output=e.output,r.callback=e.callback,delete r.callback,e.url=n.A.normalyzeUrl(t.url,r)}switch(e.protocol){case"XHR":"GET"===t.method&&t.nocache&&(e.url=n.A.normalyzeUrl(e.url,{t:(new Date).getTime()})),i.A.call(e);break;case"JSONP":e.data&&(e.url=n.A.normalyzeUrl(e.url,e.data)),o.A.call(e);break;default:throw new Error("protocol not supported (XHR|JSONP) !")}}else console.log("Value (s) for parameter (s) 'protocol=JSONP (instead use XHR)' not supported to NodeJS")}}},210:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(2710),i=r(3474),o=r(6964),s=r.n(o);const a={call:function(t){var e=n.A.getLogger("XHR");if(e.trace("[XHR::call()]"),s().polyfill(),!t.url)throw new Error("missing parameter : url is not defined !");if(!t.method)throw new Error("missing parameter : method is not defined !");t.format||(t.format="text");var r={};switch(r.url=t.url,r.data=t.data?t.data:null,r.method=t.method,r.timeOut=t.timeOut||0,r.scope=t.scope||this,r.proxy=t.proxy||null,r.content=t.content||null,r.headers=t.headers||{referer:"http://localhost"},t.method){case"DELETE":case"GET":break;case"PUT":case"POST":r.content=t.content?t.content:"application/x-www-form-urlencoded",r.headers=t.headers?t.headers:{referer:"http://localhost"};break;case"HEAD":case"OPTIONS":throw new Error("HTTP method not yet supported !");default:throw new Error("HTTP method unknown !")}switch(t.format){case"text":this.__call(r).then((function(r){e.trace(r),t.onResponse.call(this,r)})).catch((function(e){t.onFailure.call(this,e)}));break;case"json":this.__callJSON(r).then((function(r){e.trace(r),t.onResponse.call(this,r)})).catch((function(e){t.onFailure.call(this,e)}));break;case"xml":this.__callXML(r).then((function(r){e.trace(r),t.onResponse.call(this,r)})).catch((function(e){t.onFailure.call(this,e)}));break;default:throw new Error("This output Format is not yet supported !")}},__call:function(t){var e=n.A.getLogger("XHR");return e.trace("[XHR::__call()]"),new Promise((function(n,o){var s="POST"===t.method||"PUT"===t.method?1:0;t.data&&("object"==typeof t.data&&Object.keys(t.data).length||"string"==typeof t.data&&t.data.length)&&!s&&(t.url=i.A.normalyzeUrl(t.url,t.data)),e.trace("URL = ",t.url);var a=null;if("undefined"==typeof window){var l=r(3092),u={headers:{Referer:"https://localhost"}};return t.data&&"string"==typeof t.data&&s&&(u={method:t.method,body:t.data,headers:{"Content-Type":t.content,Referer:"https://localhost"}}),l(t.url,u).then((function(t){if(t.ok)n(t.text());else{var e="Errors Occured on Http Request (status : '"+t.statusText+"' | url : '"+t.url+"')",r=t.status;o({message:e,status:r})}})).catch((function(t){o({message:t,status:-1})}))}if(window.XMLHttpRequest){e.trace("XMLHttpRequest"),(a=new XMLHttpRequest).open(t.method,t.url,!0),a.overrideMimeType=t.content;var c=null;t.timeOut>0&&(e.trace("XHR - TimeOut actif !"),c=window.setTimeout((function(){o({message:"TimeOut Occured on Http Request with XMLHttpRequest !",status:-1})}),t.timeOut)),s&&(e.trace("data = ",t.data),a.setRequestHeader("Content-type",t.content)),a.onerror=function(t){console.log(t),o(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},a.ontimeout=function(t){console.log(t),o(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},a.onreadystatechange=function(t){if(4===a.readyState)if(200===a.status)window.clearTimeout(c),n(a.response);else{var e="Errors Occured on Http Request (status : '"+t.target.statusText+"' | url : '"+t.target.responseURL+"' | response : '"+t.target.response+"')",r=t.target.status;o({message:e,status:r})}};var h=t.data&&s?t.data:null;a.send(h)}else{if(!window.XDomainRequest)throw new Error("CORS not supported");e.trace("XDomainRequest"),(a=new XDomainRequest).open(t.method,t.url),a.overrideMimeType=t.content,t.timeOut>0&&(a.timeout=t.timeout,e.trace("XHR - TimeOut actif !")),s&&a.setRequestHeader("Content-type",t.content),a.onerror=function(){o(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},a.ontimeout=function(){o(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},a.onload=function(t){if(200===a.status)n(a.responseText);else{var e="Errors Occured on Http Request (status : '"+t.target.statusText+"' | url : '"+t.target.responseURL+"')",r=t.target.status;o({message:e,status:r})}};var p=t.data&&s?t.data:null;a.send(p)}}))},__callJSON:function(t){return this.__call(t).then(JSON.parse).catch((function(e){console.log("_callJSON failed on : ",t.url,e)}))},__callXML:function(t){return this.__call(t).then((function(t){var e;"undefined"==typeof window?e=(new(0,r(8978).S4)).parseFromString(t,"text/xml"):window.DOMParser?e=(new window.DOMParser).parseFromString(t,"text/xml"):((e=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,e.loadXML(t));return e})).catch((function(e){console.log("__callXML failed on : ",t.url,e)}))}}},2366:(t,e,r)=>{"use strict";r.d(e,{A:()=>h});var n=r(2710),i=r(1097),o=r(8288),s=r(895),a=r(7966),l=r(8933),u=r(5325);function c(t){if(!(this instanceof c))throw new TypeError(i.A.getMessage("CLASS_CONSTRUCTOR","Alti"));if(this.CLASSNAME="Alti",s.A.apply(this,arguments),this.logger=n.A.getLogger("Gp.Services.Alti"),this.logger.trace("[Constructeur Alti (options)]"),!t.positions)throw new Error(i.A.getMessage("PARAM_MISSING","positions"));if(0===t.positions.length)throw new Error(i.A.getMessage("PARAM_EMPTY","positions"));if(this.options.positions=t.positions,this.options.outputFormat="string"==typeof t.outputFormat?t.outputFormat.toLowerCase():"xml",this.options.resource=t.resource||"ign_rge_alti_wld",this.options.sampling=t.sampling||null,this.options.api="string"==typeof t.api?t.api.toUpperCase():"REST","REST"===this.options.api&&(this.options.httpMethod="GET"),this.options.zonly=t.zonly||!1,this.options.measures=t.measures||!1,!this.options.serverUrl){var e=a.A.Alti.newUrl(),r=null;switch(this.options.api){case"WPS":r=e.wps;break;case"REST":r=e[(t.sampling?"profil":"elevation")+"-"+this.options.outputFormat];break;default:throw new Error(i.A.getMessage("PARAM_UNKNOWN","api"))}if(!r)throw new Error("Url by default not found !");this.options.serverUrl=r,this.logger.trace("Server URL by default : "+this.options.serverUrl)}var o=this.options.serverUrl.lastIndexOf(".");if(-1!==o){var l=this.options.serverUrl.substring(o+1);if(l&&l.length<5)switch(this.logger.trace("Server Extension URL : "+l),l.toLowerCase()){case"json":case"xml":this.options.outputFormat=l.toLowerCase();break;default:throw new Error("type of service : unknown or unsupported (json or xml) !")}}}c.prototype=Object.create(s.A.prototype,{}),c.prototype.constructor=c,c.prototype.buildRequest=function(t,e){var r={httpMethod:this.options.httpMethod,onSuccess:function(t){this.request=t,e.call(this,this.request)},onError:t,scope:this,resource:this.options.resource,positions:this.options.positions,outputFormat:this.options.outputFormat,sampling:this.options.sampling,api:this.options.api,zonly:this.options.zonly,measures:this.options.measures};l.A.build(r)},c.prototype.analyzeResponse=function(t,e){if(this.response){var r={response:this.response,outputFormat:this.options.outputFormat,rawResponse:this.options.rawResponse,onError:t,onSuccess:e,scope:this};u.A.build(r)}else t.call(this,new o.A(i.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const h=c},3667:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(3565),i=r(3041),o=r(9206),s={};s.READERS={elevations:function(t){var e=new n.A;if(t.hasChildNodes())for(var r,i,o=t.childNodes,a=0;a{"use strict";r.d(e,{A:()=>a});var n=r(2710),i=r(8288),o=r(6933),s=r(4359);const a={build:function(t){n.A.getLogger("AltiRequestFactory").trace(["AltiRequestFactory::build()"]);var e=null,r={type:t.sampling?"Profil":"Elevation",method:t.httpMethod,param:{positions:null,delimiter:null,indent:null,crs:null,format:null,sampling:null,zonly:null,measures:null}};r.param.positions=t.positions,r.param.format=t.outputFormat,r.param.sampling=t.sampling,r.param.zonly=t.zonly,r.param.measures=t.measures,r.param.resource=t.resource;var a=!(null===t.onError||"function"!=typeof t.onError),l=!(null===t.onSuccess||"function"!=typeof t.onSuccess),u=null;switch(t.api){case"REST":var c=new o.A(r);if(!c.processRequestString()){if(u="Error in process request (rest) !",a)return void t.onError.call(t.scope,new i.A(u));throw new Error(u)}e=c.requestString;break;case"WPS":if(r.wps={service:null,version:null,identifier:null,rawdataoutput:null,request:null},!(e=s.A.build(r))){if(u="Error in process request (wps) !",a)return void t.onError.call(t.scope,new i.A(u));throw new Error(u)}break;default:if(u="Type of API is not supported by service (REST or WPS) !",a)return void t.onError.call(t.scope,new i.A(u));throw new Error(u)}return l&&t.onSuccess.call(t.scope,e),e}}},6933:(t,e,r)=>{"use strict";r.d(e,{A:()=>l});var n=r(2710),i=r(1097),o=r(5974),s=r(3471);function a(t){if(this.logger=n.A.getLogger("AltiRequestREST"),this.logger.trace("[Constructeur AltiRequestREST ()]"),!(this instanceof a))throw new TypeError("AltiRequestREST constructor cannot be called as a function.");if(this.options=t||{},!this.options)throw new Error(i.A.getMessage("PARAM_EMPTY","options"));if(!this.options.type)throw new Error(i.A.getMessage("PARAM_EMPTY","type (Elevation or Profil)"));switch(this.DataObject=null,this.options.type){case"Elevation":this.DataObject=new o.A(this.options.param);break;case"Profil":this.DataObject=new s.A(this.options.param);break;default:throw new Error(i.A.getMessage("PARAM_TYPE","type (Elevation or Profil)"))}this.method=this.options.method||"GET"}a.prototype={requestString:null,constructor:a,template:{get:{value:"lon=__LON__&lat=__LAT__&indent=__INDENT__&crs='__CRS__'&resource=__RESOURCE__&measures=__MEASURES__",input:{point:"&zonly=__ZONLY__",profil:"&sampling=__SAMPLING__"}},post:{value:"lon=__LON__\nlat=__LAT__\nindent=__INDENT__\ncrs='__CRS__'\nresource='__RESOURCE__'\nmeasures='__MEASURES__'\n",input:{point:"zonly=__ZONLY__\n",profil:"sampling=__SAMPLING__"}}},processRequestString:function(){this.logger.trace("AltiRequestREST::processRequestString ()");var t="";return"POST"===this.method?t=this.template.post.value:"GET"===this.method&&(t=this.template.get.value),t=(t=(t=(t=(t=(t=t.replace(/__LON__/g,this.DataObject.getLon())).replace(/__LAT__/g,this.DataObject.getLat())).replace(/__INDENT__/g,this.DataObject.indent)).replace(/__CRS__/g,this.DataObject.crs)).replace(/__RESOURCE__/g,this.DataObject.resource)).replace(/__MEASURES__/g,this.DataObject.measures),t+=this.__addDataInputs(),this.logger.trace("traduction tmpl",t),this.requestString=t,this.requestString},__addDataInputs:function(){var t;if(this.logger.trace("AltiRequestREST::addDataInput ()"),"POST"===this.method)t=this.template.post;else{if("GET"!==this.method)throw new Error("No other HTTP method supported by the service !");t=this.template.get}if("AltiElevationRequest"===this.DataObject.CLASSNAME)return t.input.point.replace(/__ZONLY__/g,this.DataObject.zonly.toString());if("AltiProfilRequest"===this.DataObject.CLASSNAME)return t.input.profil.replace(/__SAMPLING__/g,this.DataObject.sampling);throw new Error("No other object supported than elevation or profil !?")}};const l=a},4359:(t,e,r)=>{"use strict";r.d(e,{A:()=>l});var n=r(2710),i=r(1097),o=r(4841),s=r(5974),a=r(3471);const l={build:function(t){if(n.A.getLogger("AltiRequestWPS").trace(["AltiRequestWPS::build()"]),!t)throw new Error(i.A.getMessage("PARAM_EMPTY","options"));if(!t.type)throw new Error(i.A.getMessage("PARAM_EMPTY","type (Elevation or Profil)"));var e=null;switch(t.type){case"Elevation":t.wps.identifier="gs:WPSElevation",e=new s.A(t.param);break;case"Profil":t.wps.identifier="gs:WPSLineElevation",e=new a.A(t.param);break;default:throw new Error(i.A.getMessage("PARAM_TYPE","type (Elevation or Profil)"))}var r={data:e,method:t.method,param:t.wps},l=new o.A(r);if(!l.processRequestString())throw new Error("Enable to process request !");return l.requestString}}},5974:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(2710),i=r(6221);function o(t){if(!(this instanceof o))throw new TypeError("AltiElevationRequest constructor cannot be called as a function.");this.CLASSNAME="AltiElevationRequest",i.A.apply(this,arguments),this.logger=n.A.getLogger(),this.logger.trace("[Constructeur AltiElevationRequest ()]"),this.zonly=this.options.zonly||!1}o.prototype=Object.create(i.A.prototype,{zonly:{get:function(){return this._zonly},set:function(t){this._zonly=t}}}),o.prototype.constructor=o,o.prototype.getData=function(){var t=[];return t.push({k:"lon",v:this.getLon()}),t.push({k:"lat",v:this.getLat()}),t.push({k:"indent",v:this.indent}),t.push({k:"crs",v:this.crs}),t.push({k:"zonly",v:this.zonly}),t.push({k:"format",v:this.format}),t.push({k:"resource",v:this.resource}),t};const s=o},3471:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(2710),i=r(6221);function o(t){if(!(this instanceof o))throw new TypeError("AltiProfilRequest constructor cannot be called as a function.");this.CLASSNAME="AltiProfilRequest",i.A.apply(this,arguments),this.logger=n.A.getLogger(),this.logger.trace("[Constructeur AltiProfilRequest ()]"),this.sampling=this.options.sampling||3}o.prototype=Object.create(i.A.prototype,{sampling:{get:function(){return this._sampling},set:function(t){this._sampling=t}}}),o.prototype.constructor=o,o.prototype.getData=function(){var t=[];return t.push({k:"lon",v:this.getLon()}),t.push({k:"lat",v:this.getLat()}),t.push({k:"indent",v:this.indent}),t.push({k:"crs",v:this.crs}),t.push({k:"sampling",v:this.sampling}),t.push({k:"format",v:this.format}),t.push({k:"resource",v:this.resource}),t};const s=o},6221:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(2710);function i(t){if(!(this instanceof i))throw new TypeError("AltiRequest constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur AltiRequest ()]"),this.options=t||{},this.positions=this.options.positions||[],this.delimiter=this.options.delimiter||"|",this.indent=this.options.indent||!1,this.crs=this.options.crs||"CRS:84",this.format=this.options.format||"json",this.resource=this.options.resource,this.measures=this.options.measures||!1}i.CLASSNAME="AltiRequest",i.prototype={constructor:i,setPositions:function(t){for(var e=[],r=0;re||t{"use strict";r.d(e,{A:()=>c});var n=r(2710),i=r(1097),o=r(8288),s=r(4904),a=r(3667),l=r(3565),u=r(3041);const c={build:function(t){var e=n.A.getLogger("AltiResponseFactory");e.trace(["AltiResponseFactory::build()"]);var r=null;if(t.response){if(t.rawResponse)e.trace("analyze response : raw"),r=t.response;else{switch(t.outputFormat){case"xml":e.trace("analyze response : xml");try{var c=new s.A({reader:a.A});if("string"==typeof t.response?c.setXMLString(t.response):c.setXMLDoc(t.response),!(r=c.parse()))throw new Error(i.A.getMessage("SERVICE_RESPONSE_EXCEPTION_2"))}catch(e){var h=e.message;return void t.onError.call(t.scope,new o.A({message:i.A.getMessage("SERVICE_RESPONSE_EXCEPTION",h),status:200,type:o.A.TYPE_SRVERR}))}break;case"json":e.trace("analyze response : json"),e.trace("analyze response : ",typeof t.response);var p=null;if((p="string"==typeof t.response?JSON.parse(t.response):t.response)&&p.error)return void t.onError.call(t.scope,new o.A({message:i.A.getMessage("SERVICE_RESPONSE_EXCEPTION",p.error.description),status:200,type:o.A.TYPE_SRVERR}));if(p){var d,g=p.elevations,f=new l.A;if(Array.isArray(g)&&g.length)for(var m=0;m{"use strict";function n(){if(!(this instanceof n))throw new TypeError("AltiResponse constructor cannot be called as a function.");this.elevations=[]}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},3041:(t,e,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("Elevation constructor cannot be called as a function.");this.z=null}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},9206:(t,e,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("Measure constructor cannot be called as a function.");this.source_name=null,this.source_measure=null,this.z=null,this.acc=null}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},9338:(t,e,r)=>{"use strict";r.d(e,{A:()=>h});var n=r(895),i=r(7966),o=r(4889),s=r(2710),a=r(1097),l=r(3474),u=r(8288);function c(t){if(!(this instanceof c))throw new TypeError(a.A.getMessage("CLASS_CONSTRUCTOR","AutoComplete"));this.CLASSNAME="AutoComplete",this.logger=s.A.getLogger("Gp.Services.AutoComplete"),this.logger.trace("[Constructeur AutoComplete (options)]");var e=this.patchOptionConvertor(t);if(e.serverUrl||(e.serverUrl=i.A.AutoComplete.newUrl()),n.A.apply(this,arguments),!e.text)throw new Error(a.A.getMessage("PARAM_MISSING","text"));this.options.text=e.text,e.type||(e.type=["StreetAddress,PositionOfInterest"]),this.options.type=e.type,this.options.territory=e.terr||"",this.options.maximumResponses=e.maximumResponses||10,"XHR"===this.options.protocol&&"POST"===this.options.httpMethod&&(this.logger.warn("Le service ne gére pas le mode d'interrogation en POST, on bascule sur du GET !"),this.options.httpMethod="GET"),this.options.outputFormat=this.options.rawResponse?"":"json"}c.prototype=Object.create(n.A.prototype,{}),c.prototype.constructor=c,c.prototype.patchOptionConvertor=function(t){const e=t;return e.filterOptions&&(this.logger.warn("The parameter 'filterOptions' is deprecated"),e.filterOptions.type&&(this.logger.warn("The parameter 'filterOptions.type' is deprecated"),e.type||(e.type=e.filterOptions.type)),e.filterOptions.territory&&(this.logger.warn("The parameter 'filterOptions.territory' is deprecated"),e.terr||(e.terr=e.filterOptions.territory)),delete e.filterOptions),e},c.prototype.buildRequest=function(t,e){var r="";this.options.territory&&(r=this.options.territory);var n="";this.options.type&&(n=this.options.type.join(",")),this.request=l.A.normalyzeParameters({text:encodeURIComponent(this.options.text),type:n,terr:r,maximumResponses:this.options.maximumResponses}),this.request?e.call(this,this.request):t.call(this,new u.A(a.A.getMessage("SERVICE_REQUEST_BUILD")))},c.prototype.analyzeResponse=function(t,e){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onSuccess:e,onError:t,scope:this};o.A.build(r)}else t.call(this,new u.A(a.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const h=c},4889:(t,e,r)=>{"use strict";r.d(e,{A:()=>l});var n=r(2710),i=r(1097),o=r(8288),s=r(5941),a=r(9924);const l={build:function(t){var e=n.A.getLogger("AutoCompleteResponseFactory");e.trace(["AutoCompleteResponseFactory::build()"]);var r=null;if(t.response){if(t.rawResponse)e.trace("analyze response : raw"),r=t.response;else{var l=null;if(l="string"==typeof t.response?JSON.parse(t.response):t.response){if(l.error)return void t.onError.call(t.scope,new o.A({message:i.A.getMessage("SERVICE_RESPONSE_EXCEPTION",l.error.description),status:l.error.code,type:o.A.TYPE_SRVERR}));if(r=new s.A,!l.results||!Array.isArray(l.results))return void t.onError.call(t.scope,new o.A(i.A.getMessage("SERVICE_RESPONSE_FORMAT_3")));for(var u=null,c=0;c{"use strict";function n(){if(!(this instanceof n))throw new TypeError("AutoCompleteResponse constructor cannot be called as a function.");this.suggestedLocations=[]}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},9924:(t,e,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("SuggestedLocation constructor cannot be called as a function.");this.type=null,this.position={x:null,y:null},this.commune=null,this.fullText=null,this.postalCode=null,this.classification=null,this.street=null,this.poi=null,this.kind=null}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},895:(t,e,r)=>{"use strict";r.d(e,{A:()=>c});var n=r(2710),i=r(3474),o=r(1097),s=r(6250),a=r(8288),l=r(9032);function u(t){if(!(this instanceof u))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR"));for(var e in this.logger=n.A.getLogger("CommonService"),this.logger.trace("[Constructeur CommonService (options)]"),this.options={protocol:"XHR",ssl:!0,proxyURL:"",callbackSuffix:null,httpMethod:"GET",timeOut:0,rawResponse:!1,scope:this,onSuccess:function(t){console.log("onSuccess - la reponse est la suivante : ",t)},onFailure:function(t){200!==t.status&&t.status?console.log("onFailure - Erreur (",t.status,") : ",t.message):console.log("onFailure : ",t.message)}},t)t.hasOwnProperty(e)&&(this.options[e]=t[e]);if(this.options.rawResponse&&!this.options.onSuccess&&(this.options.onSuccess=function(t){console.log("onSuccess - la réponse brute du service est la suivante : ",t)}),!!(null===this.options.onSuccess||"function"!=typeof this.options.onSuccess))throw new Error(o.A.getMessage("PARAM_MISSING","onSuccess()"));switch(this.options.httpMethod="string"==typeof t.httpMethod?t.httpMethod.toUpperCase():"GET",this.options.httpMethod){case"POST":case"GET":break;case"PUT":case"DELETE":case"HEAD":case"OPTIONS":throw new Error(o.A.getMessage("PARAM_NOT_SUPPORT","httpMethod"));default:throw new Error(o.A.getMessage("PARAM_UNKNOWN","httpMethod"))}switch(this.options.protocol="string"==typeof t.protocol?t.protocol.toUpperCase():"XHR",this.options.protocol){case"JSONP":case"XHR":break;default:throw new Error(o.A.getMessage("PARAM_UNKNOWN","protocol"))}if("undefined"==typeof window&&"JSONP"===this.options.protocol)throw new Error(o.A.getMessage("PARAM_NOT_SUPPORT_NODEJS","protocol=JSONP (instead use XHR)"));"JSONP"===this.options.protocol&&(this.options.httpMethod="GET"),this.options.nocache=t.nocache||!1,this.options.outputFormat=null,this.request=null,this.response=null}u.prototype={constructor:u,call:function(){this.logger.trace("CommonService::call ()");var t=this;function e(e){this.logger.trace("CommonService::onBuildRequest : ",e),this.callService.call(t,i,r)}function r(e){this.logger.trace("CommonService::onCallService : ",e),this.analyzeResponse.call(t,i,n)}function n(t){if(this.logger.trace("CommonService::onAnalyzeResponse : ",t),!t)return i.call(this,new a.A("Analyse de la reponse en échec !?"));this.options.onSuccess.call(this,t)}function i(t){this.logger.trace("CommonService::onError()");var e=t;e instanceof a.A||(e=new a.A(t.message)),this.options.onFailure.call(this,e)}(function(){this.logger.trace("CommonService::run ()"),this.buildRequest.call(t,i,e)}).call(t)},buildRequest:function(t,e){this.logger.error("overwritten method !"),t&&t.call(this,"This method must be overwritten !"),e.call(this,"This method must be overwritten !")},callService:function(t,e){var r=null,n=this.request,o=!(!this.options.proxyURL||"XHR"!==this.options.protocol),u={"gp-access-lib":l.rE};this.options.apiKey&&(u.apiKey=this.options.apiKey),this.options.serverUrl=i.A.normalyzeUrl(this.options.serverUrl,u,!1),o&&("GET"===this.options.httpMethod&&(r=this.options.proxyURL+i.A.normalyzeUrl(this.options.serverUrl,this.request,!0),n=null),"POST"===this.options.httpMethod&&(r=this.options.proxyURL+i.A.normalyzeUrl(this.options.serverUrl,null,!0),n=this.request));var c=this,h={url:r||this.options.serverUrl,method:this.options.httpMethod,protocol:this.options.protocol,timeOut:this.options.timeOut||0,format:this.options.outputFormat,nocache:this.options.nocache||!1,wrap:"XHR"!==this.options.protocol,callbackSuffix:this.options.callbackSuffix,data:n,headers:null,content:this.options.contentType||"application/xml",scope:this.options.scope||this,onResponse:function(r){c.logger.trace("callService::onResponse()");var n=null;if("XHR"===c.options.protocol&&(c.logger.trace("Response XHR",r),n=r),"JSONP"===c.options.protocol){if(c.logger.trace("Response JSON",r),!r)return void t.call(c,new a.A("Le contenu de la reponse est vide !?"));if(r.http){if(200!==r.http.status)return void t.call(c,new a.A({status:r.http.status,message:r.http.error,type:a.A.TYPE_SRVERR}));n=r.xml,c.options.rawResponse&&(n=r)}else n=r}if("function"==typeof c.options.onBeforeParse){var i=c.options.onBeforeParse(n);"string"==typeof i&&(n=i)}c.response=n,e.call(c,n)},onFailure:function(e){c.logger.trace("callService::onFailure()"),e.type=a.A.TYPE_SRVERR,t.call(c,new a.A(e))},onTimeOut:function(){c.logger.trace("callService::onTimeOut()"),t.call(c,new a.A("TimeOut!"))}};s.A.send(h)},analyzeResponse:function(t,e){this.logger.error("overwritten method !"),t&&t.call(this,"This method must be overwritten !"),e.call(this,"This method must be overwritten !")}};const c=u},4154:(t,e,r)=>{"use strict";r.d(e,{A:()=>h});var n=r(2710),i=r(1097),o=r(895),s=r(7966),a=r(9939);function l(t){if(!(this instanceof l))throw new TypeError(i.A.getMessage("CLASS_CONSTRUCTOR","Config"));if(this.CLASSNAME="Config",this.logger=n.A.getLogger("Gp.Config"),this.logger.trace("[Constructeur Config (options)]"),!!(null===t.onSuccess||"function"!=typeof t.onSuccess))throw new Error(i.A.getMessage("PARAM_MISSING","onSuccess()"));t.apiKey||t.customConfigFile||(t.apiKey="full"),this.options={},this.options.onSuccess=t.onSuccess,this.options.onFailure=t.onFailure,this.options.sync=t.sync||!1,this.options.listConfigUrls=t.customConfigFile?[t.customConfigFile]:Array.isArray(t.apiKey)?s.A.Config.url(t.apiKey):s.A.Config.url(t.apiKey.split(","))}l.prototype=Object.create(o.A.prototype,{}),l.prototype.constructor=l,l.prototype.buildRequest=function(t,e){this.listConfigUrls=this.options.listConfigUrls,this.listConfigUrls?e.call(this,this.listConfigUrls):t.call(this,new Error("url by default not found !"))},l.prototype.callService=function(t,e){this.options.sync?c.call(this,t,e):u.call(this,t,e)};var u=function(t,e){this.listConfigResults=[];let n=null;if("undefined"==typeof window){var i=r(3092);n=i}else n=window.fetch;var o=t=>n(t,{credentials:"same-origin"}).then((t=>{if(t.ok)return t.json().then((t=>t)).catch((t=>{throw new Error("Exception Json : "+t)}));throw new Error("Exception HTTP : "+t.status+" (status code) !")})).catch((t=>new Promise(((e,r)=>{r(t)})))),s=[];for(let t=0;t{if(!t)throw new Error("results config empty !?");t.forEach((t=>{this.listConfigResults.push(t)}))})).then((()=>{e.call(this,this.listConfigResults)})).catch((e=>{t.call(this,e)}))},c=function(t,e){this.listConfigResults=[];for(var r=0;r{"use strict";function n(){if(!(this instanceof n))throw new TypeError("ConfigInterface constructor cannot be called as a function.");this.generalOptions={apiKeys:{},title:null,defaultGMLGFIStyle:null,theme:null,wgs84Resolutions:[]},this.layers={},this.tileMatrixSets={}}r.d(e,{A:()=>i}),n.prototype={constructor:n,isKeyConfLoaded:function(t){if(t)return!!this.generalOptions.apiKeys[t]},getLayersId:function(t){return this.generalOptions.apiKeys[t]},getLayerId:function(t,e){if(t&&e){var r=null;if(this.layers){var n=this.layers;for(var i in n)if(n.hasOwnProperty(i)){var o=i.split("$");if(t===o[0]&&o[1]){var s=o[1].split(":");if(o[1].split(";")[1]===e.toUpperCase()){r=i;break}if(s[2]===e.toUpperCase()){r=i;break}}}}if(r)return r}},getLayersConf:function(t){var e={},r=this.getLayersId(t);if(r)for(var n=0;n{"use strict";r.d(e,{A:()=>i});var n={ssl:!0,newUrl:function(t){return(!1===n.ssl?"http://":"https://")+"data.geopf.fr"+t},Alti:{new_key:{"elevation-json":"/altimetrie/1.0/calcul/alti/rest/elevation.json","elevation-xml":"/altimetrie/1.0/calcul/alti/rest/elevation.xml","profil-json":"/altimetrie/1.0/calcul/alti/rest/elevationLine.json","profil-xml":"/altimetrie/1.0/calcul/alti/rest/elevationLine.xml"},newUrl:function(){return{"elevation-json":n.newUrl(this.new_key["elevation-json"]),"elevation-xml":n.newUrl(this.new_key["elevation-xml"]),"profil-json":n.newUrl(this.new_key["profil-json"]),"profil-xml":n.newUrl(this.new_key["profil-xml"])}}},ProcessIsoCurve:{new_key:"/navigation/isochrone",newUrl:function(){return n.newUrl(this.new_key)}},Config:{_key:"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/dist/",url:function(t){Array.isArray(t)||(t=t.split(","));for(var e=[],r=0;r{"use strict";r.d(e,{A:()=>u});var n=r(1097),i=r(8288),o=r(1135),s=r(6025);function a(){if(!(this instanceof a))throw new TypeError("GeocodeResponseParser constructor cannot be called as a function.")}function l(t,e){var r=new s.A;if(t.geometry&&"Point"===t.geometry.type&&(r.position={lon:t.geometry.coordinates[0],lat:t.geometry.coordinates[1]}),t.properties){for(var n in t.properties)"score"===n?r.accuracy=t.properties[n]:"_type"===n?"address"===t.properties[n]?r.type="StreetAddress":"poi"===t.properties[n]?r.type="PositionOfInterest":"parcel"!==t.properties[n]&&"cadastral"!==t.properties[n]||(r.type="CadastralParcel"):r.placeAttributes[n]=t.properties[n];"address"===t.properties._type&&(r.matchType=void 0!==t.properties.number&&null!==t.properties.number?"street number":"street")}e.locations.push(r)}a.prototype={constructor:a,parse:function(t){var e=new o.A;const r=JSON.parse(t);if("FeatureCollection"===r.type)for(var s=0;s{"use strict";r.d(e,{A:()=>h});var n=r(2710),i=r(1097),o=r(8288),s=r(895),a=r(7966),l=r(6767),u=r(9375);function c(t){if(!(this instanceof c))throw new TypeError(i.A.getMessage("CLASS_CONSTRUCTOR","Geocode"));this.CLASSNAME="Geocode",this.logger=n.A.getLogger("Gp.Services.Geocode"),this.logger.trace("[Constructeur Geocode (options)]");var e=this.patchOptionConvertor(t);if(e.serverUrl||(e.serverUrl=a.A.Geocode.newUrl()),s.A.apply(this,[e]),!e.hasOwnProperty("query"))throw new Error(i.A.getMessage("PARAM_MISSING","query"));if(this.options.query=e.query,e.index||(this.options.index=e.index="StreetAddress"),e.filters)for(var r=Object.keys(e.filters),o=0;o0?e.index=e.filters.type[0]:e.index=e.filters.type),delete e.filters.type),e.filters.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),delete e.filters.bbox)),delete e.filterOptions),e.position&&(e.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),e.position.lon||(e.position.lon=e.position.x),delete e.position.x),e.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),e.position.lat||(e.position.lat=e.position.y),delete e.position.y)),e.returnFreeForm&&(this.logger.warn("The parameter 'returnFreeForm' is deprecated"),delete e.returnFreeForm),e.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete e.srs),e},c.prototype.buildRequest=function(t,e){var r={httpMethod:this.options.httpMethod,geocodeMethod:"search",query:this.options.query,index:this.options.index,returnTrueGeometry:this.options.returnTrueGeometry,position:this.options.position,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=l.A.build(r),this.request?e.call(this,this.request):t.call(this,new o.A(i.A.getMessage("SERVICE_REQUEST_BUILD")))},c.prototype.analyzeResponse=function(t,e){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onError:t,onSuccess:e,scope:this};u.A.build(r)}else t.call(this,new o.A(i.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const h=c},6767:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(2710),i=r(3955);const o={build:function(t){var e=n.A.getLogger("GeocodeRequestFactory");e.trace(["GeocodeRequestFactory::build()"]);var r=t||{},o=new i.A(r);if(!o.processRequestString())throw new Error("Error process request (rest) !");var s=o.requestString;return e.trace(s),s}}},3955:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(2710),i=r(1097),o=r(3757);function s(t){if(this.logger=n.A.getLogger("GeocodeRequestREST"),this.logger.trace("[Constructeur GeocodeRequestREST ()]"),!(this instanceof s))throw new TypeError("GeocodeRequestREST constructor cannot be called as a function.");if(!t)throw new Error(i.A.getMessage("PARAM_EMPTY","options"));this.settings=t}s.prototype={requestString:null,constructor:s,processRequestString:function(){var t="";const e=new o.A(this.settings).getParams();for(var r=0;r{"use strict";r.d(e,{A:()=>o});var n=r(2710);function i(t){if(!(this instanceof i))throw new TypeError("GeocodeParamREST constructor cannot be called as a function.");if(this.logger=n.A.getLogger(),this.logger.trace("[Constructeur GeocodeParamREST ()]"),this.options=t||{},!this.options.geocodeMethod||"search"!==this.options.geocodeMethod&&"reverse"!==this.options.geocodeMethod)throw new Error("Error geocodeMethod not valid");this.geocodeMethod=this.options.geocodeMethod,this.query=void 0!==this.options?this.options.query:null,this.searchGeometry=this.options.searchGeometry||null,this.index=this.options.index||null,this.lon=this.options.position&&this.options.position.lon?this.options.position.lon:null,this.lat=this.options.position&&this.options.position.lat?this.options.position.lat:null,this.maxResp=this.options.maxResp||null,this.returnTrueGeometry=this.options.returnTrueGeometry||null,this.filters=this.options.filters||{}}i.CLASSNAME="GeocodeParamREST",i.prototype={constructor:i,getFilters:function(){var t={};for(var e in this.filters)this.filters.hasOwnProperty(e)&&(t[e]=this.filters[e]);return t},getIndex:function(){return void 0===this.index?null:"StreetAddress"===this.index?"address":"CadastralParcel"===this.index?"parcel":"PositionOfInterest"===this.index?"poi":"location"===this.index?"location":this.index},getSearchGeometry:function(){return JSON.stringify(this.searchGeometry)}},i.prototype.getParams=function(){var t=[];"search"===this.geocodeMethod&&t.push({k:"q",v:this.query}),this.index&&t.push({k:"index",v:this.getIndex()}),"reverse"===this.geocodeMethod&&this.searchGeometry&&t.push({k:"searchgeom",v:this.getSearchGeometry()}),this.lon&&this.lat&&(t.push({k:"lon",v:this.lon}),t.push({k:"lat",v:this.lat})),this.maxResp&&t.push({k:"limit",v:this.maxResp}),this.returnTrueGeometry&&t.push({k:"returntruegeometry",v:this.returnTrueGeometry});const e=this.getFilters();for(var r in e)t.push({k:r,v:e[r]});return t};const o=i},9375:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(8288),i=r(1097),o=r(9723);const s={build:function(t){var e=null;if(t.response){if(t.rawResponse)e=t.response;else{try{if(!(e=(new o.A).parse(t.response)))throw new Error("L'analyse de la réponse du service !?")}catch(e){var r=e.message;return"string"==typeof t.response?r+="('"+t.response+"')":r+="('"+t.response.documentElement.innerHTML+"')",void t.onError.call(t.scope,new n.A({message:i.A.getMessage("SERVICE_RESPONSE_ANALYSE",r),type:n.A.TYPE_UNKERR,status:-1}))}if(e.exceptionReport)return void t.onError.call(t.scope,new n.A({message:i.A.getMessage("SERVICE_RESPONSE_EXCEPTION",e.exceptionReport),type:n.A.TYPE_SRVERR,status:200}))}t.onSuccess.call(t.scope,e)}else t.onError.call(t.scope,new n.A({message:i.A.getMessage("SERVICE_RESPONSE_EMPTY"),type:n.A.TYPE_SRVERR,status:-1}))}}},1135:(t,e,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("GeocodeResponse constructor cannot be called as a function.");this.locations=[]}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},6025:(t,e,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("GeocodedLocation constructor cannot be called as a function.");this.position=null,this.matchType=null,this.placeAttributes={},this.type=null,this.accuracy=null,this.CLASSNAME="GeocodedLocation"}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},6064:(t,e,r)=>{"use strict";r.d(e,{A:()=>h});var n=r(2710),i=r(1097),o=r(8288),s=r(895),a=r(7966),l=r(6767),u=r(9375);function c(t){if(!(this instanceof c))throw new TypeError(i.A.getMessage("CLASS_CONSTRUCTOR","ReverseGeocode"));this.CLASSNAME="ReverseGeocode",this.logger=n.A.getLogger("Gp.Services.ReverseGeocode"),this.logger.trace("[Constructeur ReverseGeocode (options)]");var e=this.patchOptionConvertor(t);if(e.serverUrl||(e.serverUrl=a.A.ReverseGeocode.newUrl()),s.A.apply(this,[e]),e.searchGeometry)this.options.searchGeometry=e.searchGeometry;else if(!e.position)throw new Error(i.A.getMessage("PARAM_MISSING","searchGeometry"));if(e.index||(this.options.index=e.index="StreetAddress"),e.filters)for(var r=Object.keys(e.filters),o=0;o0?e.index=e.filterOptions.type[0]:e.index=e.filterOptions.type),delete e.filterOptions.type),e.filterOptions.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),e.searchGeometry||(e.searchGeometry=this.bbox2Json(e.filterOptions.bbox)),delete e.filterOptions.bbox),e.filterOptions.circle&&(this.logger.warn("The parameter 'filterOptions.circle' is deprecated"),e.searchGeometry||(e.searchGeometry=this.circle2Json(e.filterOptions.circle)),delete e.filterOptions.circle),e.filterOptions.polygon&&(this.logger.warn("The parameter 'filterOptions.polygon' is deprecated"),e.searchGeometry||(e.searchGeometry=this.polygon2Json(e.filterOptions.polygon)),delete e.filterOptions.polygon),!e.filters&&Object.keys(e.filterOptions).length>0&&(e.filters=e.filterOptions),delete e.filterOptions),e.position&&(e.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),e.position.lon||(e.position.lon=e.position.x),delete e.position.x),e.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),e.position.lat||(e.position.lat=e.position.y),delete e.position.y)),e.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete e.srs),e},c.prototype.buildRequest=function(t,e){var r={httpMethod:this.options.httpMethod,geocodeMethod:"reverse",searchGeometry:this.options.searchGeometry,index:this.options.index,position:this.options.position,returnTrueGeometry:this.options.returnTrueGeometry,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=l.A.build(r),this.request?e.call(this,this.request):t.call(this,new o.A(i.A.getMessage("SERVICE_REQUEST_BUILD")))},c.prototype.analyzeResponse=function(t,e){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onError:t,onSuccess:e,scope:this};u.A.build(r)}else t.call(this,new o.A(i.A.getMessage("SERVICE_RESPONSE_EMPTY")))},c.prototype.bbox2Json=function(t){return{type:"Polygon",coordinates:[[[t.left,t.top],[t.right,t.top],[t.right,t.bottom],[t.left,t.bottom],[t.left,t.top]]]}},c.prototype.circle2Json=function(t){return{type:"Circle",radius:t.radius,coordinates:[t.x,t.y]}},c.prototype.polygon2Json=function(t){for(var e={type:"Polygon",coordinates:[[]]},r=0;r{"use strict";r.d(e,{A:()=>h});var n=r(2710),i=r(1097),o=r(8288),s=r(895),a=r(7966),l=r(9721),u=r(8297);function c(t){if(!(this instanceof c))throw new TypeError(i.A.getMessage("CLASS_CONSTRUCTOR","ProcessIsoCurve"));if(this.CLASSNAME="ProcessIsoCurve",s.A.apply(this,arguments),this.logger=n.A.getLogger("Gp.Services.ProcessIsoCurve"),this.logger.trace("[Constructeur ProcessIsoCurve (options)]"),!t.position)throw new Error(i.A.getMessage("PARAM_MISSING","position"));if(null===t.position.x)throw new Error(i.A.getMessage("PARAM_MISSING","position.x"));if(null===t.position.y)throw new Error(i.A.getMessage("PARAM_MISSING","position.y"));if(!t.time&&!t.distance)throw new Error("Parameter (s) 'distance' missing. Parameter time to calculate an isochrone, parameter distance for an isodistance");if(!t.time&&t.distance&&(this.options.method="distance",this.options.time&&delete this.options.time),t.time&&!t.distance&&(this.options.method="time",this.options.distance&&delete this.options.distance),this.options.method=this.options.method||"time",this.options.resource=t.resource||"bdtopo-valhalla",this.options.exclusions=t.exclusions||[],this.options.reverse=t.reverse||!1,this.options.srs=t.srs||"EPSG:4326",this.options.distanceUnit=t.distanceUnit||"m",this.options.timeUnit=t.timeUnit||"second",t.smoothing&&this.logger.warn("options.smoothing is DEPRECATED"),this.options.smoothing=!1,t.holes&&this.logger.warn("options.holes is DEPRECATED"),this.options.holes=!1,t.graph?("Voiture"===t.graph&&(this.options.graph="car"),"Pieton"===t.graph&&(this.options.graph="pedestrian")):this.options.graph="car",this.options.constraints=[],t.constraints){if(!Array.isArray(t.constraints))throw new Error(i.A.getMessage("PARAM_TYPE","constraints"));for(var e=0;e{"use strict";r.d(e,{A:()=>a});var n=r(2710),i=r(1097),o=r(527);function s(t){if(this.logger=n.A.getLogger("ProcessIsoCurveRequest"),this.logger.trace("[Constructeur ProcessIsoCurveRequest ()]"),!(this instanceof s))throw new TypeError("ProcessIsoCurveRequest constructor cannot be called as a function.");if(!t)throw new Error(i.A.getMessage("PARAM_EMPTY","options"));this.settings=t,this.mode=this.settings.httpMethod||"GET"}s.prototype={requestString:null,constructor:s,processRequestString:function(){var t="",e=0;switch(this.mode){case"GET":this.logger.trace("Process GET Request");var r=new o.A(this.settings).getParams();for(e=0;e{"use strict";r.d(e,{A:()=>o});var n=r(2710);function i(t){if(!(this instanceof i))throw new TypeError("ProcessIsoCurveParam constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur ProcessIsoCurveParam ()]"),this.options=t||{},this.id=this.options.id,this.resource=this.options.resource,this.point=this.options.position,this.crs=this.options.srs,this.profile=this.options.graph,this.constraints=this.options.constraints,this.reverse=this.options.reverse,this.timeUnit=this.options.timeUnit,this.distanceUnit=this.options.distanceUnit,"distance"===this.options.method?(this.costType="distance",this.costValue=this.options.distance,"m"===this.distanceUnit&&this.costValue>=5e4&&(this.distanceUnit="km",this.costValue/=1e3)):(this.costType="time",this.costValue=this.options.time)}i.CLASSNAME="ProcessIsoCurveParam",i.prototype={constructor:i,getLocation:function(){return this.point.x+","+this.point.y},getDistanceUnit:function(){return"m"===this.distanceUnit?"meter":"km"===this.distanceUnit?"kilometer":""},getConstraints:function(){var t=[];if(0!==this.constraints.length)for(var e=0;e{"use strict";r.d(e,{A:()=>a});var n=r(2710),i=r(1097),o=r(8288),s=r(1489);const a={build:function(t){var e=n.A.getLogger("ProcessIsoCurveResponseFactory");e.trace(["ProcessIsoCurveResponseFactory::build()"]);var r=null;if(t.response){if(t.rawResponse)e.trace("analyze response : raw"),r=t.response;else{var a;if(e.trace("analyze response : json"),a="string"==typeof t.response?JSON.parse(t.response):t.response,r=new s.A,!a)return void t.onError.call(t.scope,new o.A(i.A.getMessage("SERVICE_RESPONSE_ANALYSE",t.response)));"distance"===a.costType?(r.time="",r.distance=a.costValue):(r.time=a.costValue,r.distance=""),r.message="",r.id="",r.srs=a.crs,r.geometry=a.geometry;var l=a.point.split(",");if(r.location&&(r.location.x=l[0],r.location.y=l[1]),r.exceptionReport)return void t.onError.call(t.scope,new o.A({message:i.A.getMessage("SERVICE_RESPONSE_EXCEPTION",r.exceptionReport),type:o.A.TYPE_SRVERR,status:200}))}t.onSuccess.call(t.scope,r)}else t.onError.call(t.scope,new o.A(i.A.getMessage("SERVICE_RESPONSE_EMPTY")))}}},1489:(t,e,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("ProcessIsoCurveResponse constructor cannot be called as a function.");this.message=null,this.id=null,this.location={},this.location.x=null,this.location.y=null,this.srs=null,this.geometry=null,this.time=null,this.distance=null}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},6759:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(2710),i=r(8288),o=r(5851);const s={build:function(t){n.A.getLogger("RouteRequestFactory").trace(["RouteRequestFactory::build()"]);var e=t||{},r=!(null===t.onError||"function"!=typeof t.onError),s=null,a=new o.A(e);if(!a.processRequestString()){if(s="Error process request (rest) !",r)return void t.onError.call(t.scope,new i.A(s));throw new Error(s)}return a.requestString}}},5851:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(2710),i=r(1097),o=r(2785);function s(t){if(this.logger=n.A.getLogger("RouteRequestREST"),this.logger.trace("[Constructeur RouteRequestREST ()]"),!(this instanceof s))throw new TypeError("RouteRequestREST constructor cannot be called as a function.");if(!t)throw new Error(i.A.getMessage("PARAM_EMPTY","options"));this.settings=t}s.prototype={requestString:null,constructor:s,processRequestString:function(){this.logger.warn(" PROTOTYPE !");for(var t=new o.A(this.settings).getParams(),e="",r=0;r{"use strict";r.d(e,{A:()=>o});var n=r(2710);function i(t){if(!(this instanceof i))throw new TypeError("RouteParamREST constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur RouteParamREST ()]"),this.options=t||{},this.resource=this.options.resource,this.start=this.options.startPoint.x+","+this.options.startPoint.y,this.end=this.options.endPoint.x+","+this.options.endPoint.y,this.intermediates=this.options.viaPoints,this.profile=this.options.graph,this.crs=this.options.srs,this.constraints=this.options.constraints,this.optimization=this.options.routePreference,this.getSteps=this.options.geometryInInstructions?"true":"false",this.distanceUnit=this.options.distanceUnit,this.timeUnit=this.options.timeUnit,this.waysAttributes=this.options.waysAttributes}i.CLASSNAME="RouteParamREST",i.prototype={constructor:i,getIntermediates:function(){var t=[];if(0!==this.intermediates.length)for(var e=0;e{"use strict";r.d(e,{A:()=>l});var n=r(2710),i=r(1097),o=r(8288),s=r(2993),a=r(7868);const l={build:function(t){var e=n.A.getLogger("RouteResponseFactory");e.trace("RouteResponseFactory::build()");var r=null;if(t.response){if(t.rawResponse)e.trace("analyze response : raw"),r=t.response;else{var l;if(e.trace("analyze response : json"),l="string"==typeof t.response?JSON.parse(t.response):t.response){if(l.message)return void t.onError.call(t.scope,new o.A(i.A.getMessage("SERVICE_RESPONSE_EXCEPTION",l.message)));var u=[],c=[],h=[];if((r=new s.A).hasOwnProperty("totalTime")&&(r.totalTime=parseFloat(l.duration)),r.hasOwnProperty("totalDistance")&&(r.totalDistance=parseFloat(l.distance)),r.hasOwnProperty("bbox")&&(r.bbox.left=parseFloat(l.bbox[0]),r.bbox.bottom=parseFloat(l.bbox[1]),r.bbox.right=parseFloat(l.bbox[2]),r.bbox.top=parseFloat(l.bbox[3])),r.hasOwnProperty("routeGeometry")&&!t.geometryInInstructions&&(r.routeGeometry=l.geometry),r.hasOwnProperty("routeInstructions")&&t.geometryInInstructions){var p,d=l.portions;if(Array.isArray(d)&&d.length)for(p=0;p{"use strict";function n(){if(!(this instanceof n))throw new TypeError("RouteInstruction constructor cannot be called as a function.");this.duration=null,this.distance=null,this.code=null,this.instruction=null,this.geometry=null}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},2993:(t,e,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("RouteResponse constructor cannot be called as a function.");this.totalTime=null,this.totalDistance=null,this.bbox={left:null,right:null,top:null,bottom:null},this.routeGeometry=null,this.routeInstructions=[]}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},7372:(t,e,r)=>{"use strict";r.d(e,{A:()=>h});var n=r(2710),i=r(1097),o=r(8288),s=r(895),a=r(7966),l=r(6759),u=r(3753);function c(t){if(!(this instanceof c))throw new TypeError(i.A.getMessage("CLASS_CONSTRUCTOR","Route"));if(this.CLASSNAME="Route",s.A.apply(this,arguments),this.logger=n.A.getLogger("Gp.Services.Route"),this.logger.trace("[Constructeur Route (options)]"),!t.startPoint)throw new Error(i.A.getMessage("PARAM_MISSING","startPoint"));if(null===t.startPoint.x)throw new Error(i.A.getMessage("PARAM_MISSING","startPoint.x"));if(null===t.startPoint.y)throw new Error(i.A.getMessage("PARAM_MISSING","startPoint.y"));if(!t.endPoint)throw new Error(i.A.getMessage("PARAM_MISSING","endPoint"));if(null===t.endPoint.x)throw new Error(i.A.getMessage("PARAM_MISSING","endPoint.x"));if(null===t.endPoint.y)throw new Error(i.A.getMessage("PARAM_MISSING","endPoint.y"));if(t.outputFormat&&"json"!==t.outputFormat&&this.logger.warn("options.outputFormat could only be json"),this.options.outputFormat="json",this.options.resource=t.resource||"bdtopo-osrm",this.options.startPoint=t.startPoint,this.options.endPoint=t.endPoint,this.options.viaPoints=t.viaPoints||[],this.options.routePreference=t.routePreference||"fastest",t.graph?("Voiture"===t.graph&&(this.options.graph="car"),"Pieton"===t.graph&&(this.options.graph="pedestrian")):this.options.graph="car",this.options.constraints=[],t.constraints){if(!Array.isArray(t.constraints))throw new Error(i.A.getMessage("PARAM_TYPE","constraints"));for(var e=0;e{"use strict";r.d(e,{A:()=>c});var n=r(4154),i=r(2366),o=r(1520),s=r(6064),a=r(9338),l=r(7372),u=r(7180);const c={getConfig:function(t){new n.A(t).call()},getAltitude:function(t){new i.A(t).call()},geocode:function(t){new o.A(t).call()},reverseGeocode:function(t){new s.A(t).call()},autoComplete:function(t){new a.A(t).call()},route:function(t){new l.A(t).call()},isoCurve:function(t){new u.A(t).call()}}},3474:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n={normalyzeParameters:function(t){var e=null;if(t){var r=[];for(var n in t)if(t.hasOwnProperty(n)){var i=t[n];i||(i=""),r.push(n+"="+i)}e=r.join("&")}return e},normalyzeUrl:function(t,e,r){var n=t;if(t){if(t.split("?").length-1>=2){var i=t.search(/\?/)+1;n=t.substring(0,i)+t.slice(i).replace(/\?/g,"&")}var o=t.indexOf("?");-1===o&&(n+="?"),-1!==o&&o!==t.length-1&&(n+="&")}return e&&(n+="string"==typeof e?e=e.replace("?",""):this.normalyzeParameters(e)),r&&(n=encodeURIComponent(n)),n},indent:function(t,e){return new Array((t||0)+1).join("\t")+e}}},2710:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=r(3065);const i={getLogger:function(t){if(void 0===e)var e={env:{VERBOSE:!1}};e.env.VERBOSE?n.enableAll():n.disableAll();var r=t||"default";return n.getLogger(r)}}},1097:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n={PARAM_MISSING:"Parameter(s) '%var%' missing",PARAM_EMPTY:"Parameter(s) '%var%' empty",PARAM_TYPE:"Wrong type(s) for parameter(s) '%var%'",PARAM_FORMAT:"Parameter(s) '%var%' not correctly formatted",PARAM_NOT_SUPPORT:"Value(s) for parameter(s) '%var%' not supported",PARAM_NOT_SUPPORT_NODEJS:"Value(s) for parameter(s) '%var%' not supported to NodeJS",PARAM_UNKNOWN:"Value(s) for parameter(s) '%var%' unknown",SERVICE_REQUEST_BUILD:"An error occurred during the request building of the service",SERVICE_REQUEST_EMPTY:"The request sent to the service is empty",SERVICE_RESPONSE_EXCEPTION:"The service returned an exception : '%var%'",SERVICE_RESPONSE_EXCEPTION_2:"The service returned an exception",SERVICE_RESPONSE_ANALYSE:"An error occurred while parsing the response '%var%' of the service",SERVICE_RESPONSE_ANALYSE_2:"An unknown error occurred while parsing the response",SERVICE_RESPONSE_EMPTY:"The response of the service is empty",SERVICE_RESPONSE_EMPTY_2:"The response from the service could not be analyzed or is empty",SERVICE_RESPONSE_FORMAT:"The format of the service response is not supported (handled format(s) : '%var%')",SERVICE_RESPONSE_FORMAT_2:"The format of the service response is not supported",SERVICE_RESPONSE_FORMAT_3:"No suggestion matching the search",CLASS_CONSTRUCTOR:"'%var%' constructor cannot be called as a function.",getMessage:function(t,e){if(0===Object.keys(arguments).length)return"Message indefined !";var r=Array.prototype.slice.call(arguments),n=r.shift(),i=r,o=this[n];try{o=Array.isArray(i)&&i.length>0?o.replace("%var%",i.join(" - ")):o.replace("%var%","%var% (not specified)")}catch(t){}return o}}},3065:function(t,e,r){var n,i;!function(){"use strict";n=function(){var t=function(){},e="undefined",r=typeof window!==e&&typeof window.navigator!==e&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"],i={},o=null;function s(t,e){var r=t[e];if("function"==typeof r.bind)return r.bind(t);try{return Function.prototype.bind.call(r,t)}catch(e){return function(){return Function.prototype.apply.apply(r,[t,arguments])}}}function a(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function l(n){return"debug"===n&&(n="log"),typeof console!==e&&("trace"===n&&r?a:void 0!==console[n]?s(console,n):void 0!==console.log?s(console,"log"):t)}function u(){for(var r=this.getLevel(),i=0;i=0&&e<=c.levels.SILENT)return e;throw new TypeError("log.setLevel() called with invalid level: "+t)}"string"==typeof t?p+=":"+t:"symbol"==typeof t&&(p=void 0),c.name=t,c.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},c.methodFactory=r||h,c.getLevel=function(){return null!=l?l:null!=a?a:s},c.setLevel=function(t,e){return l=m(t),!1!==e&&d(l),u.call(c)},c.setDefaultLevel=function(t){a=m(t),g()||c.setLevel(t,!1)},c.resetLevel=function(){l=null,f(),u.call(c)},c.enableAll=function(t){c.setLevel(c.levels.TRACE,t)},c.disableAll=function(t){c.setLevel(c.levels.SILENT,t)},c.rebuild=function(){if(o!==c&&(s=m(o.getLevel())),u.call(c),o===c)for(var t in i)i[t].rebuild()},s=m(o?o.getLevel():"WARN");var y=g();null!=y&&(l=m(y)),u.call(c)}(o=new p).getLogger=function(t){if("symbol"!=typeof t&&"string"!=typeof t||""===t)throw new TypeError("You must supply a name when creating a logger.");var e=i[t];return e||(e=i[t]=new p(t,o.methodFactory)),e};var d=typeof window!==e?window.log:void 0;return o.noConflict=function(){return typeof window!==e&&window.log===o&&(window.log=d),o},o.getLoggers=function(){return i},o.default=o,o},void 0===(i="function"==typeof n?n.call(e,r,e,t):n)||(t.exports=i)}()},3092:(t,e,r)=>{"use strict";var n=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==r.g)return r.g;throw new Error("unable to locate global object")}();t.exports=e=n.fetch,n.fetch&&(e.default=n.fetch.bind(n)),e.Headers=n.Headers,e.Request=n.Request,e.Response=n.Response},2938:t=>{"use strict";t.exports=ol.extent},7304:t=>{"use strict";t.exports=ol.format.GeoJSON},9583:t=>{"use strict";t.exports=ol.layer.Tile},996:t=>{"use strict";t.exports=ol.layer.Vector},2947:t=>{"use strict";t.exports=ol.loadingstrategy},9201:t=>{"use strict";t.exports=ol.proj},3668:t=>{"use strict";t.exports=ol.source.Vector},8062:t=>{"use strict";t.exports=ol.tilegrid},9032:t=>{"use strict";t.exports=JSON.parse('{"rE":"3.4.6","p6":"19/12/2024"}')},8330:t=>{"use strict";t.exports=JSON.parse('{"rE":"1.0.0-beta.1-317"}')}},__webpack_module_cache__={};function __webpack_require__(t){var e=__webpack_module_cache__[t];if(void 0!==e)return e.exports;var r=__webpack_module_cache__[t]={exports:{}};return __webpack_modules__[t].call(r.exports,r,r.exports,__webpack_require__),r.exports}__webpack_require__.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return __webpack_require__.d(e,{a:e}),e},__webpack_require__.d=(t,e)=>{for(var r in e)__webpack_require__.o(e,r)&&!__webpack_require__.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),__webpack_require__.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var __webpack_exports__={};(()=>{"use strict";__webpack_require__.d(__webpack_exports__,{default:()=>Kn});const t=ol.control.Control;var e=__webpack_require__.n(t);const r=function(){return""!==getComputedStyle(document.documentElement).getPropertyValue("--blue-france-sun-113-625")};function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function i(t,e){(function(t,e){if(e.has(t))throw new TypeError("Cannot initialize the same private elements twice on an object")})(t,e),e.add(t)}function o(t,e,r){if("function"==typeof t?t===e:t.has(e))return arguments.length<3?e:r;throw new TypeError("Private element is not present on this object")}function s(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=Array(e);r0&&r[0].getElementsByTagName("button")[0].click()};const S={onPanelOpen:function(){w(this.options.position,this.element.id.match(/(\w+)-[0-9]+/)[1])}},E=ol.Overlay;var x=__webpack_require__.n(E),M=__webpack_require__(9201),R=__webpack_require__(2987),T=__webpack_require__(7278),P=__webpack_require__(5844),G=__webpack_require__(2536);const N={lightOrange:"data:image/png;base64,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IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjkyYWVkNjM2LWY3MDMtNDAzOC1hNzM4LWZiYzYxYzZlMTljNCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5NWMzZWI3NC0zYWRmLTRkYzUtOWZjZS1iODQ4NTc3Nzg4ODQiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0NjI3ZDg3NC1lZDIyLTRiZTUtYTlkNS00NDlmMzVhZDIxYzgiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5Mjc4OTUzMDYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphM2U3ZWQ1MS0xNTI4LTRhYjAtODVjOS0zNzNkNzgxZGM2ZmMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjI3KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PofUkY4AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGRuA4VZTAAAFcElEQVRYw82YW2xbVRaGv7XP8bHjXByHQkNhWigdVX1AikRBMBoQ8wASl4fRqPDAAxIPKAVxeRqQRohHBEVCaoGKUBCl4qHcNKCZVKMRRQxtgTaACLRKqlwB14NzM2ni2D2XvXjgBFXQOnFiA1uy/HB89u9/7bX+vf4l1HnpK57hTNCE0AzqAS5gAAuEID5KiWSiLPf4tp7YUjcSu4yLZzdi2IJyNXANcBlwAdAKzAHTwDhwDKEPywC+GZWHbPi7IKOvZIWguAnlr8BtwJ+AxDJeDYCPgF6Ed0hkh+Weov5mZLTHJMDeBjwYk0itYJtKTOpZML3SbYNfnYz2SBr0buARYENcFytdFvga2AGyT7p14Vcjoz3ShOgdKDuAi+pUewpMIDyCypvSreWGk9HdroOEV2F4A1hfTxGJCX2D5U7U/UzuD6NaXq49NRJhBsOjwMVLEtE4gaL4W5cV3IsxPEoizDT0ZLTHcSH6M/BWLLlVwpQKuPzhb+i8sRkv04Y/e5rvPigxtnM9trKU2k0D28A5LN3RsmXbrbFOU8DtQLpqfJqu97nh6TydmzvwWpOI8VDbxqbrkmz62yk+/Ps6yoe8KkeV/hHHfgrMNyrNEkBX1SAktgRs3T7ApV1rSWayiEkDLmLSJDNZLu1ay9btAyS2BEsEuWuZ99WKyRhgHeCcn8wGw/qbOnAS3jmfOwmP9Td1kNhQDduJcUwjyciS0RJXMMkWkPPUo/z4XFxZRhZII8mEwFCsT+f5xXTE7FAOteduItVaZodyhNPVZDeKccJGkxmsChIMOvTt6aRSzIP+7A9rRKWYp29PJ8GgsyqcVauZSADaj+IDTecWvBlD4e01HKjM07XtOOuuy+A2X0BYmib/8SxfvLWRYm8LdqZaCvkI/SDBci6nld0ze7KCLa4F3gSurR4MB5x1FnMhiCeor9hJiPKmWpbGp3EU2IbJFuTe5XfStbczLxgP7K0IPcCFDWhnJoFuMAek2/oNbWdku/WxHATejT1JPZcPvINysFYiK+gAFkXTK6H+MyhXADeseJ9fmrVDM6X080/+p1M2/yFsD1zjEIauEeMAqNpQE16oaKiqwfjYeLk+fuYl10HDq7DsBTavxs8o6FzFKez/dM3rLx9LjUyVxcb7yVkfzmpXFbACJURHIxgyxkyu1ml6qL0Z4YX4xl7Jfrrgm9Ov9bX/e++x1tHCgkQ11lgELGA4sBp3iHRbH5GDwJPAFLXo6KJnDmTh/aG2w2/3t47VSGQxs1zAE9U2s9pEjx3hXuBloCa7G1rxv8o3f/7SkUz/UFFWMqGRWMpHAqsDbl00KGotIXM7MawF7gKSS5oJJRospI7v+rD96Ikp8aV2EgrkVPW4OnIy6SVL9ZubvZgyaOVyYDfwl2oNqVWiXNEb231oTe+/BrzvK9Gy01MFyoiOKzIEmqsEfjGf/39U1yHgosJFUXhlFMl+z9E/nkvhVNHZsjux+9Caf77RnyzMBaJLmW4RrWAlB3Y4Uh13HLOA4wQjo6O2IRPNxVV4JuG5Et2SSelzjtFLzsZQ0NIZ8/2rx7K9+/paxqbKvyh4Bc4AFQxzau23Dow7FS+nHmfEUz05OqINH8+evXJPJVOuE93XkY4eSziaXcQpB2b+vZNt7+/8IPPl2OxPRMJ4dDsLzIho3hpzamJ6aqJ0ei6qtZAasmZ2OS1RyOMd6egBIzSFVoKj4y1Hnvhv+8cD02ZOkEmgIKITVnXKWDs1ksvNrgbTbRSZ46cypY50aWcllIsyKXvr8GTyi9f6WvePFGVQhO8EPW2NzI+OfV2pF2bDTgbg8D/aJeVUspd1BK3/G24u7/skO3+iYP3h3LdhI/B+AGodUpo8WKwoAAAAAElFTkSuQmCC",darkOrange:"data:image/png;base64,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czpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjIxNDZjMzUzLWIxZjItNGVjOC04NzQ3LTIwMGEyYWExM2ViMyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2NGViNmI2Ni03Y2I2LTRkZGUtYTI3OS01MGY0ZWFiZGFhODAiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1ODRhM2VjZC1kNGFmLTQ3NjItYjA1ZS04ODk2MGQ4ZTk0Y2MiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5MDM3ODI2MTQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxYzNjOGRkZi1kMjVkLTQ4YzQtYTAwYS0yMmU3ZDYwMzg1YjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjAzKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PuhCAHgAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGQOTjc4FAAAFdklEQVRYw82YW2gcZRTHf+eb2dlkc9lsrFYr2notfSgWxKKiog8VvIFI9UFQEaWtYPFJfREfRRSEeqlttViLD/WGisYXrShWpfWC1WpSN5eN3cZumkuTzWY3c/mOD9lI0WSTTXbVA8M8zMz3n//5zvl/5xyhxqb3ewYvaERpAvUAFzCABUIQH6GAHyvKa76tJbbUjMRW4+LbC7GsQbgCWA+sAs4AWoA8MAxkgEMo32LoxDO98oIN/xdk9IGUYEYvRrgduAW4Gogt4NMA+BroQHkfm+qW3aP6n5HRTSYG9hZga5lEwyKWKZVJvQCmQ3bZ4F8no5skAXov8BiwspwXizUL9APPgOyVXTr5r5HRzdKI1TsRngHOqlHuKTCI8hhG3padWqw7GX3IddDwcixvAefXUkTKhH7HcBfifi8vh1E1H1cfGkGYxPI4cM68RGw5zf3y3S7IuedgeZwgTNZ1Z3Sz46LRNcA7Zcmd25yGgPWP/M7q65toTLZSHBvn6OcFDm07n6g0n9oNAxsR54DsjBYs2251QWAbgFuBREX/tF3rc9+zA6xa3U5jSxwxHmpbueyqOOvvOM7rj67g1JfedFTNagngVtR+B0zUK8xiwLqKTmhcE3Dblk4uXbecRDKFmATgIiZBIpni0nXLuW1LJ41rgnmcvG6B59WiyRhgBeDM+UZipWHthnbcmDf7b8Y81m5oJ7GyErZTxjH1JCPzesu4ghtvBpkjH2X6uXFlAVEg9SMjhEAamFsyp4Yjcuks1s6uXdZacuksU8OVZDcC0mW8OpFRQqBruvqdwwpdDh+9cjaF0QHQv/2wRhRGB6afdzkVkKZxtDoyVaqZBKCHEXygcXafjhi63l3G9tIEGzYe4ZKrksSbzmCqMEz6mzE+eedC+juaiUYqhZCPchgkqKB4SzxntqQEO7oceBu4srIzHIitsMTOBOMJ1leCkxAMmEpRWt6Vg8BGTConOxZeSVdfzmwxHmpvRtkJnFmHcuYksBkxH8tO69e1nJEd1sdhP/BBuUippfnA+3jsr5ZI9TnzV33mFcB/DuEi4LpFr/PPZu3LkanES08fOltWnxe2Ba5xCEPXiHEAVG2oMS9UNFTVINOXKdamn3nQdSC8HMMeYPVS+hkFzQdObl9m2Zu7+xt6hkKx5fXktGumdNXyZQUKiPZGkDbGnFxqp+kh9kaUHeUTezHr6WRkxt/oa/toT39Lby6QqMoci4BJDB8vpTtEdlkflf3A08AQ1ejoTM8cyeRnudYD72Zb+qokMhNZLuCJaqtZaqDLLi0i7EHYDVTV7oZW/J9PNf3wanfycLoki5nQSFnKewKrnW5NNMhtKRDlt6EsB+4G4vM2/UrUNd5w5Pl028FfiuJL9SQUyKrqEXXkaNyLF2o3N9vUYKB0AbAduKFSQWqVKFv0+rYfXdbx4aB3qqQLDk8VKCKaUSQNmi0F/ujAwB9RTYeAMwoXabg2QvZ5jl4ym8Ip6FjgDm7/bdl7bw3Ec/lItEJyWyAS0RJWsmC7I9WM45hJHCfo6e21dZlozlju3pjnSnRT0tMXHdFzT8dQ0EJoTr2eSXXs7W/uG/pnwiswBZQw5NXaYw5knJKXVY8p8VSP9vZo3cezp1v2nniDK9FD7V70RMxoaganGJmJT0+0frbtt+RPfVN/EQnLo9sxYEREB6wxxweHhwYL4/mo2kSqi43c5zRH8GS7Fz1shMZQJTg41PzVU7+2fdNZNHlBTgI5ER20qkPG2qGebHZsSTpULzJH8slCe6ywrWTlrGTM3tw9Ef/xjUzLvp6idIlwQtBxa2Sit6+/VCvMuu0MwIE726RBSqlViaDli6Gm4t6e1MQveet3Z4+F9cD7Ewo4WRJBbaaSAAAAAElFTkSuQmCC",red:"data:image/png;base64,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293bv2fa/f0ASM5yljz/NiUAAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmI5YjA2YTAwLWZkOTQtNDc5MC1hNzIzLTlkMGUwNGRiNTRlNyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1MTQ3ZGU5Yi1kOTA0LTRlNWYtYjIyYy0wZmMzOGRmMWI3ZGEiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YzBjNTI2YS1lYTkyLTQxYWItODM5Yy05OWFhYTM0YjdlYzciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE2NDAxNTU0MjYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowMjQ4MDc5ZS1kMTYyLTQxZmItOGViYS1lMzY2NTRiNGRjMjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjIwOjQwKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PkaovgIAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPFCiKn0kIAAAFfUlEQVRYw82YTWxc1RXHf+e+N2/GH+Px2IEEV02AgqIsIkwgoYS2ahepVGCBUOiCRRdsAAnECthErBBCICGFj4gqRQqBRSABUrVm1URtCSATJ5ASZCPHH0kGgx1/xJl5nvH7uIcFY4iIM/GzZyhHenqL994993/u+f/fOUeos+nNnkHCJoQWRD0UFzCARYhQCVB8NFWWTwNbT99SNxC3GZfIXg9sADYDWxCuRekEskARYQplFPgEOAr045ph6bXRzwKM3pEX5mduQLkHuAvYCqSW8GkIfAT0IBwknT8lH87o/w2M3mpSqL0LeLQKIrOMZSpVUC8hpkf6bPiTg9FbpBn0L8ATwLoqL5ZrFjgNPAeyV47p3E8GRjdLE6r3oTwHXF0n7ikwgfAEIvvlqJYbDkY3uw4a3YLyNrC2niJSBXQG4c+Ie0yORnGSj5OnRhzlUJ4ErrkikBAoAjPVe7ik4F6D8iRxlGvoyegmx4X4NwgHgM6a8fUyIfc8doZbf99Ca66N0uwF+v7tc3DnWoJK6gqep1C2g3NEjsdLlm03GXSbAe4GmmvGZ91vA3Y8P8aN6ztoyaYxxsPaNrbcnmbbvV/x9ONdnPnA+w71otaMcDfYPqDUmDQTUgjdNYPQsSHkgYf62di9mmwujzHNgIsxzWRzeTZ2r+aBh/rp2BDWDLLQjSzpf7VMMIpB6QKcy77Tuc6wdVsHbspbfJspj63bOuhcV8u3g9KFJtufWQbHakfLdQUv3YrI4qwQ+e65616Jr6mknE4KJgIGgctLZnEq5vRgAWsXLyKttZweLFCcqiW7cdVP1DgwQoQwUNPJxIDDG7vXMDszBvqjDWvM7MwYb+xew8SAUzNowgCSDEwyNVMJQU8AAdC06DvBtOG/76xirlLi3u0nufn2HJmWTir+FJ9+PMu7B66nr6eVYLpWCgUoJ0DCGoq3wv/MbXkhmlkN7Ad+XTMY4kBTl6XlKnA8IQ4U/xyUx8wlB3ZpKvcC23Hz49K79Ep6GeWM8VB7J8pfgasaUM6cAx5EzPvSZ4OGljNy1AYIh4C/L6lASWYBcBCHQ0mBJOfM94rk+WjwAsKvgN8te51LK7kPpm3zK89OrZH1v4zaQ9c4RJFrxDgAqjbSlBcpGqlqODoyWq5TP1OtnoU9wPqV9DMKWlRnfJ+/6q3XKpmhSRVbXU8uuhb6Hq1eVsBHdDiGQWPMuZV1mpuMB/aPCK8CXcsMjs6pufCm3/7PPZXs8LhKnJBjMTCH4f2VdIfIcRsgcgh4FpgkiY4u9Mwqc4fn2468M58dSQhkIbNcwBPVNrPSRJdjWgb2AK8BidrdSCX4PGw5/re53IlBK8uZ0EhVyodCq/1uXTTIzfrExZ0oq4H7gfQSmv54IMqcfNFv7/0ilkCSg1CgoKon1ZEv017ar9/cbEvGEFeuQ9mF8IdaBamFuBB7I7tKq3r+EXjnK0tPTxUoIzqqyCBooRIGM2NjX8d1HQIuKFys0cYY2eeJ3riYwinorHUndvmr3nt7Pj1eVNEa5LZALKIVrBTAnopVRx3HzOE44dDwsG3IRHPBxrtTnkv8p5yjLzvoLy72oaC+mvOvz+V79pZbRyYvJbwC80AFQ1GtPevAqFPxCuoxL57ql8ND2vDx7MVW2JTOuMQPdxDvSInmF/yU1ZT+Nd92eGcp97+RH4BE1XHHLDAtomPWmK8mpiYn/AvFOCmRGmLTm53WOOKpDhM/YqApQsLe+dYPnym1f9xvTVGQc8C4iE5Y1Ulj7eRQoTC7Ih1qFJiTQc7vwN9ZUbk6Z+ydp6L0Z2+Ws/uGrAyI8I2gF6yR0vDI6Uq9fDbsZACO3NQuGa3kr3XC7H+ClvJeP1/6IrbBqbNno0b4+xbMlmARngcRbAAAAABJRU5ErkJggg==",turquoiseBlue:"data:image/png;base64,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/MUi8H5G35QHBm+BvjV3bu1znD4AWZpV+gY4OARGS5S97vHu3u65/XunPb8fN2tyj8UDOK0AAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjEwNGNlNWFhLTE1YzctNGI4Yi1iOGU1LTFmYWQyNWFiYzBhZCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpkNDMyZTY1Zi0xOThhLTQxM2EtYWYyMy1jNzhlNzczNGRlN2QiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyNzExODVkMi03MWZiLTRhZDMtYTJmMi1iNjM3OWU3MDc1OTEiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE4NjYyMzgzMjQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NGFiYzNkYS1lZWJiLTRlZjctYjdjNS04ZDRjODY5OGVjODMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI0OjI2KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pj0tlUwAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGBru/VeEAAAABmJLR0QA/wD/AP+gvaeTAAAFO0lEQVRYw9WYe2xTVRzHTx97dYS5B1UHa+/tY12dDoOKWyIGlfgHkCkSNTHGwHxA3NiAP/A5x4CMKEzdYL29YyAyBxKQZbI+NvYIaowaH9Ogi2GRbGjcFrbBNrq2a2/9nq5LCFnbbfSOeZJPTs/t6Tm/7/39zu+cU0IiXc7WSImNX0BsZiVYAhigmah5tHklsZrjSYtJSuZtaeSiiJU3gHUwfC9oARfBIHBP1DzaPH1eRuzmp0E6aTgSNX9EWMwSvOkMGPgG+CpguG8a0H7nA78zkMYqye0V0lYXDSHrYUw7cE5TxM04/b+38+vJ+RPRt0eIjVeAAhhyCQizFDKJEBjndaCY49Di4+CRlzFxfwSE3Ciol9i4DSBujoRUy7HIszFxdwSF3CioBy8qm1g5ufhirHwyJqwHrrDGWTlg8hFL1URN2+EF0XFPkyYuSWwhUVgnT2CygXBG3dFcM7bz1/au1u7OK9/93eWidUlHe1dCc810EsUAsXOPQZCI3rGZ6Wb4EXAEM0SCUFnZduz6T/09l4bHXYOCz+f0+XxeWg+7XYM/4vnKtlqHJHSIOrAHlYMFYmawRNCKycaDGZLVfMRdf/nPDpfXM+abotDnpy93dtzXfNgdZg+im2uimJ6h66UTeIMZsrat1jvkdPRRb/imLt4hl6N3DfqFEIPvOMzDJYspJsWfbUKEyFNttcKoyzkKo4UgYoRRt3OE9guT1br984nsmQ7gCWbIipaj4xeu9v/hFQTPlG7B89+u9v9O+4UQQ8f/BSlaVM8kgBOhji4p9mpvwQ+Wfwddjp6bQw2u8g44HT3535/tTUa/0Eccvg4sFDE1m2PBZkx2LVRqVcLQvG/PDDX1/tVxze38x+UZH6O1He28b764qgwtxOcf327eBGLFE9NikiD3qzDZhVBJgCJH3KubDnkfbD4s5Jw74qM1bcvDnxq8/vHt1SrS9InIJ2m7OQ4UYsKhCB9lJqHj0gPsHJzPvsS9w8rRRPDptI40M8PlH9fOJ5M5K008rsZmIwi5gc4QN9Zja8zn+5epch9PTFepU1iGuVunVqeyS9g0iv8zy96l0WiSjIsXx28iJEJhaONkMGB5YP14bkmI1SzIz1T0pRa9VKnNzCjUMcwWUAS2BtgWYLJN+xTo1OyrOhW7xsAwqnSGkd3i+uGjkT5Xw6DLt3AdEKQNB4YXbdtwQpuVuRtG7pwhxWA7vJgRib0nDuSDvtkIkjYcHE3aVWjRLL9/zyyETPK2Vq3OidAaOhiPDLcbxo3MRIik0eReWPnO15pHHiqbpYhS6hkNw7wAz0To6GM5hAzH3wkDa6b7x4bEwnkUfMnP6idX7Nex7GxElIDNerV6hU6jSdbp9RHck2w0w/FaGGoJm7KtnCfmWNlF1fOrK3Q6bekMRFABO7QM8yxewFLUi+5JSxPpAmcxy0gjt1Rytir4NcHKCfJTH/al5j1j1hr0pWEML55YD+x2GP6cVqNZZjQYEvUsG4vP4v8jKju5L1p6qnytxGKa6qogyOorBpVbXvxMe69xdxABb9I0DAGvIIRWp7NsBsJIoWVZKfaXuf+jMKp2b6z8+Adb4aErNwpCCh5J2pnfoH0ga08g7invBfaQjXjjuQifhyEgLdNolJP5UqR17y+QnSwvk1i565OZK6F8RzubvWwvDH8LvKZnmHXY8HKws+sNLJtI5muJ/7hYElOzJ1V+fN9R7CVDClPJOVXuqo06vS4HQjTwgDKDZRXk/1JiD7wrieFLk6T1lczCXUVK7aPZinS9XrTw+Q+Tql7SUmvGuQAAAABJRU5ErkJggg==",defaultOffset:[-25.5,-32]},O=ol.interaction;var k=P.A.getLogger("interactions");const L={_extensions:["Measures","ElevationPath","Drawing"],_options:{current:null,clean:null},unset:function(t,r){k.trace("unset()");var n={};G.A.mergeParams(n,this._options),G.A.mergeParams(n,r);for(var i=t.getInteractions().getArray(),o=0;o-1){if(n.current&&n.current===a)continue;i[o].setActive(!1);var l=s.source;if(void 0!==l&&l instanceof e())for(var u in n)if(n.hasOwnProperty(u)){if("current"===u)continue;if("function"==typeof l[u]){var c=Array.isArray(n[u])?n[u]:[n[u]];l[u].apply(l,c)}}}else i[o].setActive(!1)}}};var D;const j={generate:(D=Math.floor(Date.now()),function(){return D++}),name:function(t){var e=null,r=t.lastIndexOf("-");return e=-1===r?t:t.substring(0,r),e},index:function(t){var e=null,r=this.name(t),n=r.lastIndexOf("_");return-1!==n&&(e=r.substring(n+1)),e},uuid:function(t){var e=null,r=t.lastIndexOf("-");return-1!==r&&(e=parseInt(t.substring(r+1),10)),e}};var U={modulo:function(t,e){var r=t%e;return r*e<0?r+e:r},decimalToDMS:function(t,e,r){var n=this.modulo(t+180,360)-180,i=Math.abs(3600*n),o=r||0,s=Math.pow(10,o),a=Math.floor(i/3600),l=Math.floor((i-3600*a)/60),u=i-3600*a-60*l;return(u=Math.ceil(u*s)/s)>=60&&(u=0,l+=1),l>=60&&(l=0,a+=1),{d:a,m:l,s:u,direction:e.charAt(n<0?1:0)}},dmsToDecimal:function(t,e,r,n){var i=t+e/60+r/3600;return"S"!=n&&"O"!=n||(i*=-1),i},coordinateToDecimal:function(t){var e={};return e.lat=t[1].toFixed(6),e.lng=t[0].toFixed(6),e.unit="°",e},coordinateToDMS:function(t){return{lng:U.decimalToDMS(t[0],"EO",2),lat:U.decimalToDMS(t[1],"NS",2),unit:"DMS"}},coordinateToRad:function(t){var e={},r=.017453292519943295;return e.lng=t[0]*r,e.lng=e.lng.toFixed(8),e.lat=t[1]*r,e.lat=e.lat.toFixed(8),e.unit="rad",e},coordinateToGon:function(t){var e={},r=1.1111111111111112;return e.lng=t[0]*r,e.lng=e.lng.toFixed(8),e.lat=t[1]*r,e.lat=e.lat.toFixed(8),e.unit="gon",e},coordinateToMeter:function(t){var e={};return e.x=t[0].toFixed(2),e.y=t[1].toFixed(2),e.unit="m",e},coordinateToKMeter:function(t){var e={};return e.x=(t[0]/1e3).toFixed(2),e.y=(t[1]/1e3).toFixed(2),e.unit="km",e},toInteger:function(t,e){var r=parseInt(t,e||10);return!isNaN(r)&&isFinite(r)?r:null},isInteger:function(t){if(isNaN(t))return!1;var e=parseFloat(t);return(0|e)===e},toFloat:function(t){var e=parseFloat(t);return!isNaN(e)&&isFinite(e)?e:null}};const z=U;const q={advancedSearchFiltersByDefault:{PositionOfInterest:[{name:"category",title:"Type",value:["cimetière","aérodrome","réservoir","administratif","construction linéaire","construction ponctuelle","construction surfacique","cours d'eau","détail hydrographique","détail orographique","équipement de transport","plan d'eau","poste de transformation","terrain de sport","transport par câble","zone d'activité ou d'intérêt","zone d'habitation","lieu-dit non habité"]},{name:"postcode",title:"Code postal"},{name:"citycode",title:"Code INSEE"}],StreetAddress:[{name:"city",title:"Ville"},{name:"postcode",title:"Code postal"},{name:"citycode",title:"Code INSEE"}],CadastralParcel:[{name:"departmentcode",title:"Code département (INSEE)",description:"Code INSEE du département (ex: 01, 94)"},{name:"municipalitycode",title:"Code commune (INSEE)",description:"Code INSEE de la commune : 3 chiffres (ex: 067)"},{name:"oldmunicipalitycode",title:"Commune absorbée",description:"Commune absorbée : 3 chiffres (ex: 000, 001)"},{name:"districtcode",title:"Arrondissement",description:"Arrondissement : 3 chiffres (ex: 004, 012)"},{name:"section",title:"Section",description:"Section Cadastrale : 2 caractères (chiffre et/ou lettre)"},{name:"number",title:"Numéro",description:"Numéro de la parcelle : 4 chiffres (ex: 0041, 0250)"},{name:"sheet",title:"Feuille",description:"Numéro de la feuille cadastrale"}]},zoomToResultsByDefault:function(t){var e=15,r=t.service,n=t.fields,i=t.type,o={1:11,2:12,3:13,4:14,5:15,6:16,7:17,8:17};return"SuggestedLocation"===r&&"PositionOfInterest"===i&&(e=o[n.classification]),"GeocodedLocation"===r&&"PositionOfInterest"===i&&(e=o[n.importance]||14),"StreetAddress"===i&&(e=17),"CadastralParcel"===i&&(e=17),e}};const F={getGeocodedLocationFreeform:function(t){var e=t.placeAttributes;if(e.label)return e.label;if("PositionOfInterest"===t.type){var r=e.toponym;return e.category&&Array.isArray(e.category)&&e.category.length>=2&&"administratif"===e.category[0]?r=r+", "+e.category[1]:e.postcode&&(r=r+", "+e.postcode[0],e.city&&(r=r+" "+e.city[0])),r}return"StreetAddress"===t.type?(e.housenumber?e.housenumber+" ":"")+e.street+" "+(e.postcode?e.postcode+", ":"")+e.city:"CadastralParcel"===t.type?e.id:"..."},getSuggestedLocationFreeform:function(t){if(t.fullText)return t.fullText;var e=[];return e.push(t.street||""),e.push(t.postalCode||""),e.push(t.commune||""),"PositionOfInterest"===t.type&&(e.push(t.poi||""),e.push(t.kind||"")),e.join(" - ")}};var B=6378137,W=.0066943799901413165,H=484813681109536e-20,V=Math.PI/2,Y=1e-10,X=.017453292519943295,Z=57.29577951308232,K=Math.PI/4,J=2*Math.PI,Q=3.14159265359,$={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667};const tt={mm:{to_meter:.001},cm:{to_meter:.01},ft:{to_meter:.3048},"us-ft":{to_meter:1200/3937},fath:{to_meter:1.8288},kmi:{to_meter:1852},"us-ch":{to_meter:20.1168402336805},"us-mi":{to_meter:1609.34721869444},km:{to_meter:1e3},"ind-ft":{to_meter:.30479841},"ind-yd":{to_meter:.91439523},mi:{to_meter:1609.344},yd:{to_meter:.9144},ch:{to_meter:20.1168},link:{to_meter:.201168},dm:{to_meter:.01},in:{to_meter:.0254},"ind-ch":{to_meter:20.11669506},"us-in":{to_meter:.025400050800101},"us-yd":{to_meter:.914401828803658}};var et=/[\s_\-\/\(\)]/g;function rt(t,e){if(t[e])return t[e];for(var r,n=Object.keys(t),i=e.toLowerCase().replace(et,""),o=-1;++o=this.text.length)return;t=this.text[this.place++]}switch(this.state){case ot:return this.neutral(t);case 2:return this.keyword(t);case 4:return this.quoted(t);case 5:return this.afterquote(t);case 3:return this.number(t);case-1:return}},ht.prototype.afterquote=function(t){if('"'===t)return this.word+='"',void(this.state=4);if(ut.test(t))return this.word=this.word.trim(),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in afterquote yet, index '+this.place)},ht.prototype.afterItem=function(t){return","===t?(null!==this.word&&this.currentObject.push(this.word),this.word=null,void(this.state=ot)):"]"===t?(this.level--,null!==this.word&&(this.currentObject.push(this.word),this.word=null),this.state=ot,this.currentObject=this.stack.pop(),void(this.currentObject||(this.state=-1))):void 0},ht.prototype.number=function(t){if(!ct.test(t)){if(ut.test(t))return this.word=parseFloat(this.word),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in number yet, index '+this.place)}this.word+=t},ht.prototype.quoted=function(t){'"'!==t?this.word+=t:this.state=5},ht.prototype.keyword=function(t){if(lt.test(t))this.word+=t;else{if("["===t){var e=[];return e.push(this.word),this.level++,null===this.root?this.root=e:this.currentObject.push(e),this.stack.push(this.currentObject),this.currentObject=e,void(this.state=ot)}if(!ut.test(t))throw new Error("havn't handled \""+t+'" in keyword yet, index '+this.place);this.afterItem(t)}},ht.prototype.neutral=function(t){if(at.test(t))return this.word=t,void(this.state=2);if('"'===t)return this.word="",void(this.state=4);if(ct.test(t))return this.word=t,void(this.state=3);if(!ut.test(t))throw new Error("havn't handled \""+t+'" in neutral yet, index '+this.place);this.afterItem(t)},ht.prototype.output=function(){for(;this.place0?90:-90)):(t.lat0=ft(t.lat1>0?90:-90),t.lat_ts=t.lat1)}function At(t){var e=it(t),r=e[0],n={};return dt(e,n),mt(n),n[r]}function It(t){var e=this;if(2===arguments.length){var r=arguments[1];"string"==typeof r?"+"===r.charAt(0)?It[t]=nt(arguments[1]):It[t]=At(arguments[1]):It[t]=r}else if(1===arguments.length){if(Array.isArray(t))return t.map((function(t){Array.isArray(t)?It.apply(e,t):It(t)}));if("string"==typeof t){if(t in It)return It[t]}else"EPSG"in t?It["EPSG:"+t.EPSG]=t:"ESRI"in t?It["ESRI:"+t.ESRI]=t:"IAU2000"in t?It["IAU2000:"+t.IAU2000]=t:console.log(t);return}}!function(t){t("EPSG:4326","+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"),t("EPSG:4269","+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"),t("EPSG:3857","+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs");for(var e=1;e<=60;++e)t("EPSG:"+(32600+e),"+proj=utm +zone="+e+" +datum=WGS84 +units=m"),t("EPSG:"+(32700+e),"+proj=utm +zone="+e+" +south +datum=WGS84 +units=m");t.WGS84=t["EPSG:4326"],t["EPSG:3785"]=t["EPSG:3857"],t.GOOGLE=t["EPSG:3857"],t["EPSG:900913"]=t["EPSG:3857"],t["EPSG:102113"]=t["EPSG:3857"]}(It);const Ct=It;var vt=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];var _t=["3857","900913","3785","102113"];const bt=function(t){if(!function(t){return"string"==typeof t}(t))return t;if(function(t){return t in Ct}(t))return Ct[t];if(function(t){return vt.some((function(e){return t.indexOf(e)>-1}))}(t)){var e=At(t);if(function(t){var e=rt(t,"authority");if(e){var r=rt(e,"epsg");return r&&_t.indexOf(r)>-1}}(e))return Ct["EPSG:3857"];var r=function(t){var e=rt(t,"extension");if(e)return rt(e,"proj4")}(e);return r?nt(r):e}return function(t){return"+"===t[0]}(t)?nt(t):void 0};function wt(t,e){var r,n;if(t=t||{},!e)return t;for(n in e)void 0!==(r=e[n])&&(t[n]=r);return t}function St(t,e,r){var n=t*e;return r/Math.sqrt(1-n*n)}function Et(t){return t<0?-1:1}function xt(t){return Math.abs(t)<=Q?t:t-Et(t)*J}function Mt(t,e,r){var n=t*r,i=.5*t;return n=Math.pow((1-n)/(1+n),i),Math.tan(.5*(V-e))/n}function Rt(t,e){for(var r,n,i=.5*t,o=V-2*Math.atan(e),s=0;s<=15;s++)if(r=t*Math.sin(o),o+=n=V-2*Math.atan(e*Math.pow((1-r)/(1+r),i))-o,Math.abs(n)<=1e-10)return o;return-9999}function Tt(t){return t}var Pt=[{init:function(){var t=this.b/this.a;this.es=1-t*t,"x0"in this||(this.x0=0),"y0"in this||(this.y0=0),this.e=Math.sqrt(this.es),this.lat_ts?this.sphere?this.k0=Math.cos(this.lat_ts):this.k0=St(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)):this.k0||(this.k?this.k0=this.k:this.k0=1)},forward:function(t){var e,r,n=t.x,i=t.y;if(i*Z>90&&i*Z<-90&&n*Z>180&&n*Z<-180)return null;if(Math.abs(Math.abs(i)-V)<=Y)return null;if(this.sphere)e=this.x0+this.a*this.k0*xt(n-this.long0),r=this.y0+this.a*this.k0*Math.log(Math.tan(K+.5*i));else{var o=Math.sin(i),s=Mt(this.e,i,o);e=this.x0+this.a*this.k0*xt(n-this.long0),r=this.y0-this.a*this.k0*Math.log(s)}return t.x=e,t.y=r,t},inverse:function(t){var e,r,n=t.x-this.x0,i=t.y-this.y0;if(this.sphere)r=V-2*Math.atan(Math.exp(-i/(this.a*this.k0)));else{var o=Math.exp(-i/(this.a*this.k0));if(-9999===(r=Rt(this.e,o)))return null}return e=xt(this.long0+n/(this.a*this.k0)),t.x=e,t.y=r,t},names:["Mercator","Popular Visualisation Pseudo Mercator","Mercator_1SP","Mercator_Auxiliary_Sphere","merc"]},{init:function(){},forward:Tt,inverse:Tt,names:["longlat","identity"]}],Gt={},Nt=[];function Ot(t,e){var r=Nt.length;return t.names?(Nt[r]=t,t.names.forEach((function(t){Gt[t.toLowerCase()]=r})),this):(console.log(e),!0)}const kt={start:function(){Pt.forEach(Ot)},add:Ot,get:function(t){if(!t)return!1;var e=t.toLowerCase();return void 0!==Gt[e]&&Nt[Gt[e]]?Nt[Gt[e]]:void 0}};var Lt={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},APL4:{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},clrk80ign:{a:6378249.2,b:6356515,rf:293.4660213,ellipseName:"Clarke 1880 (IGN)"},clrk58:{a:6378293.645208759,rf:294.2606763692654,ellipseName:"Clarke 1858"},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS7:{a:6378135,rf:298.26,ellipseName:"WGS 72"}},Dt=Lt.WGS84={a:6378137,rf:298.257223563,ellipseName:"WGS 84"};Lt.sphere={a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"};var jt={wgs84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},ch1903:{towgs84:"674.374,15.056,405.346",ellipse:"bessel",datumName:"swiss"},ggrs87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},nad83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},nad27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"598.1,73.7,418.2,0.202,0.045,-2.455,6.7",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"577.326,90.129,463.919,5.137,1.474,5.297,2.4232",ellipse:"bessel",datumName:"Hermannskogel"},mgi:{towgs84:"577.326,90.129,463.919,5.137,1.474,5.297,2.4232",ellipse:"bessel",datumName:"Militar-Geographische Institut"},osni52:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"airy",datumName:"Irish National"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},rassadiran:{towgs84:"-133.63,-157.5,-158.62",ellipse:"intl",datumName:"Rassadiran"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},osgb36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Ordnance Survey of Great Britain 1936"},s_jtsk:{towgs84:"589,76,480",ellipse:"bessel",datumName:"S-JTSK (Ferro)"},beduaram:{towgs84:"-106,-87,188",ellipse:"clrk80",datumName:"Beduaram"},gunung_segara:{towgs84:"-403,684,41",ellipse:"bessel",datumName:"Gunung Segara Jakarta"},rnb72:{towgs84:"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",ellipse:"intl",datumName:"Reseau National Belge 1972"}};for(var Ut in jt){var zt=jt[Ut];jt[zt.datumName]=zt}const qt=jt;const Ft=function(t,e,r,n,i,o,s){var a={};return a.datum_type=void 0===t||"none"===t?5:4,e&&(a.datum_params=e.map(parseFloat),0===a.datum_params[0]&&0===a.datum_params[1]&&0===a.datum_params[2]||(a.datum_type=1),a.datum_params.length>3&&(0===a.datum_params[3]&&0===a.datum_params[4]&&0===a.datum_params[5]&&0===a.datum_params[6]||(a.datum_type=2,a.datum_params[3]*=H,a.datum_params[4]*=H,a.datum_params[5]*=H,a.datum_params[6]=a.datum_params[6]/1e6+1))),s&&(a.datum_type=3,a.grids=s),a.a=r,a.b=n,a.es=i,a.ep2=o,a};var Bt={};function Wt(t){if(0===t.length)return null;var e="@"===t[0];return e&&(t=t.slice(1)),"null"===t?{name:"null",mandatory:!e,grid:null,isNull:!0}:{name:t,mandatory:!e,grid:Bt[t]||null,isNull:!1}}function Ht(t){return t/3600*Math.PI/180}function Vt(t,e,r){return String.fromCharCode.apply(null,new Uint8Array(t.buffer.slice(e,r)))}function Yt(t){return t.map((function(t){return[Ht(t.longitudeShift),Ht(t.latitudeShift)]}))}function Xt(t,e,r){return{name:Vt(t,e+8,e+16).trim(),parent:Vt(t,e+24,e+24+8).trim(),lowerLatitude:t.getFloat64(e+72,r),upperLatitude:t.getFloat64(e+88,r),lowerLongitude:t.getFloat64(e+104,r),upperLongitude:t.getFloat64(e+120,r),latitudeInterval:t.getFloat64(e+136,r),longitudeInterval:t.getFloat64(e+152,r),gridNodeCount:t.getInt32(e+168,r)}}function Zt(t,e,r,n){for(var i=e+176,o=[],s=0;s-1.001*V)l=-V;else if(l>V&&l<1.001*V)l=V;else{if(l<-V)return{x:-1/0,y:-1/0,z:t.z};if(l>V)return{x:1/0,y:1/0,z:t.z}}return a>Math.PI&&(a-=2*Math.PI),i=Math.sin(l),s=Math.cos(l),o=i*i,{x:((n=r/Math.sqrt(1-e*o))+u)*s*Math.cos(a),y:(n+u)*s*Math.sin(a),z:(n*(1-e)+u)*i}}function $t(t,e,r,n){var i,o,s,a,l,u,c,h,p,d,g,f,m,y,A,I=1e-12,C=t.x,v=t.y,_=t.z?t.z:0;if(i=Math.sqrt(C*C+v*v),o=Math.sqrt(C*C+v*v+_*_),i/r1e-24&&m<30);return{x:y,y:Math.atan(g/Math.abs(d)),z:A}}function te(t){return 1===t||2===t}function ee(t,e,r){if(function(t,e){return t.datum_type===e.datum_type&&!(t.a!==e.a||Math.abs(t.es-e.es)>5e-11)&&(1===t.datum_type?t.datum_params[0]===e.datum_params[0]&&t.datum_params[1]===e.datum_params[1]&&t.datum_params[2]===e.datum_params[2]:2!==t.datum_type||t.datum_params[0]===e.datum_params[0]&&t.datum_params[1]===e.datum_params[1]&&t.datum_params[2]===e.datum_params[2]&&t.datum_params[3]===e.datum_params[3]&&t.datum_params[4]===e.datum_params[4]&&t.datum_params[5]===e.datum_params[5]&&t.datum_params[6]===e.datum_params[6])}(t,e))return r;if(5===t.datum_type||5===e.datum_type)return r;var n=t.a,i=t.es;if(3===t.datum_type){if(0!==re(t,!1,r))return;n=B,i=W}var o=e.a,s=e.b,a=e.es;if(3===e.datum_type&&(o=B,s=6356752.314,a=W),i===a&&n===o&&!te(t.datum_type)&&!te(e.datum_type))return r;if((r=Qt(r,i,n),te(t.datum_type)&&(r=function(t,e,r){if(1===e)return{x:t.x+r[0],y:t.y+r[1],z:t.z+r[2]};if(2===e){var n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],l=r[5],u=r[6];return{x:u*(t.x-l*t.y+a*t.z)+n,y:u*(l*t.x+t.y-s*t.z)+i,z:u*(-a*t.x+s*t.y+t.z)+o}}}(r,t.datum_type,t.datum_params)),te(e.datum_type)&&(r=function(t,e,r){if(1===e)return{x:t.x-r[0],y:t.y-r[1],z:t.z-r[2]};if(2===e){var n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],l=r[5],u=r[6],c=(t.x-n)/u,h=(t.y-i)/u,p=(t.z-o)/u;return{x:c+l*h-a*p,y:-l*c+h+s*p,z:a*c-s*h+p}}}(r,e.datum_type,e.datum_params)),r=$t(r,a,o,s),3===e.datum_type)&&0!==re(e,!0,r))return;return r}function re(t,e,r){if(null===t.grids||0===t.grids.length)return console.log("Grid shift grids not found"),-1;var n={x:-r.x,y:r.y},i={x:Number.NaN,y:Number.NaN},o=[];t:for(var s=0;sn.y||d>n.x||m1e-12&&Math.abs(s.y)>1e-12);if(l<0)return console.log("Inverse grid shift iterator failed to converge."),n;n.x=xt(o.x+r.ll[0]),n.y=o.y+r.ll[1]}else isNaN(o.x)||(n.x=t.x+o.x,n.y=t.y+o.y);return n}function ie(t,e){var r,n={x:t.x/e.del[0],y:t.y/e.del[1]},i=Math.floor(n.x),o=Math.floor(n.y),s=n.x-1*i,a=n.y-1*o,l={x:Number.NaN,y:Number.NaN};if(i<0||i>=e.lim[0])return l;if(o<0||o>=e.lim[1])return l;r=o*e.lim[0]+i;var u=e.cvs[r][0],c=e.cvs[r][1];r++;var h=e.cvs[r][0],p=e.cvs[r][1];r+=e.lim[0];var d=e.cvs[r][0],g=e.cvs[r][1];r--;var f=e.cvs[r][0],m=e.cvs[r][1],y=s*a,A=s*(1-a),I=(1-s)*(1-a),C=(1-s)*a;return l.x=I*u+A*h+C*f+y*d,l.y=I*c+A*p+C*m+y*g,l}function oe(t,e,r){var n,i,o,s=r.x,a=r.y,l=r.z||0,u={};for(o=0;o<3;o++)if(!e||2!==o||void 0!==r.z)switch(0===o?(n=s,i=-1!=="ew".indexOf(t.axis[o])?"x":"y"):1===o?(n=a,i=-1!=="ns".indexOf(t.axis[o])?"y":"x"):(n=l,i="z"),t.axis[o]){case"e":case"n":u[i]=n;break;case"w":case"s":u[i]=-n;break;case"u":void 0!==r[i]&&(u.z=n);break;case"d":void 0!==r[i]&&(u.z=-n);break;default:return null}return u}function se(t){var e={x:t[0],y:t[1]};return t.length>2&&(e.z=t[2]),t.length>3&&(e.m=t[3]),e}function ae(t){if("function"==typeof Number.isFinite){if(Number.isFinite(t))return;throw new TypeError("coordinates must be finite numbers")}if("number"!=typeof t||t!=t||!isFinite(t))throw new TypeError("coordinates must be finite numbers")}function le(t,e,r,n){var i,o=void 0!==(r=Array.isArray(r)?se(r):{x:r.x,y:r.y,z:r.z,m:r.m}).z;if(function(t){ae(t.x),ae(t.y)}(r),t.datum&&e.datum&&function(t,e){return(1===t.datum.datum_type||2===t.datum.datum_type||3===t.datum.datum_type)&&"WGS84"!==e.datumCode||(1===e.datum.datum_type||2===e.datum.datum_type||3===e.datum.datum_type)&&"WGS84"!==t.datumCode}(t,e)&&(r=le(t,i=new Jt("WGS84"),r,n),t=i),n&&"enu"!==t.axis&&(r=oe(t,!1,r)),"longlat"===t.projName)r={x:r.x*X,y:r.y*X,z:r.z||0};else if(t.to_meter&&(r={x:r.x*t.to_meter,y:r.y*t.to_meter,z:r.z||0}),!(r=t.inverse(r)))return;if(t.from_greenwich&&(r.x+=t.from_greenwich),r=ee(t.datum,e.datum,r))return e.from_greenwich&&(r={x:r.x-e.from_greenwich,y:r.y,z:r.z||0}),"longlat"===e.projName?r={x:r.x*Z,y:r.y*Z,z:r.z||0}:(r=e.forward(r),e.to_meter&&(r={x:r.x/e.to_meter,y:r.y/e.to_meter,z:r.z||0})),n&&"enu"!==e.axis?oe(e,!0,r):(r&&!o&&delete r.z,r)}var ue=Jt("WGS84");function ce(t,e,r,n){var i,o,s;return Array.isArray(r)?(i=le(t,e,r,n)||{x:NaN,y:NaN},r.length>2?void 0!==t.name&&"geocent"===t.name||void 0!==e.name&&"geocent"===e.name?"number"==typeof i.z?[i.x,i.y,i.z].concat(r.slice(3)):[i.x,i.y,r[2]].concat(r.slice(3)):[i.x,i.y].concat(r.slice(2)):[i.x,i.y]):(o=le(t,e,r,n),2===(s=Object.keys(r)).length||s.forEach((function(n){if(void 0!==t.name&&"geocent"===t.name||void 0!==e.name&&"geocent"===e.name){if("x"===n||"y"===n||"z"===n)return}else if("x"===n||"y"===n)return;o[n]=r[n]})),o)}function he(t){return t instanceof Jt?t:t.oProj?t.oProj:Jt(t)}const pe=function(t,e,r){t=he(t);var n,i=!1;return void 0===e?(e=t,t=ue,i=!0):(void 0!==e.x||Array.isArray(e))&&(r=e,e=t,t=ue,i=!0),e=he(e),r?ce(t,e,r):(n={forward:function(r,n){return ce(t,e,r,n)},inverse:function(r,n){return ce(e,t,r,n)}},i&&(n.oProj=e),n)};var de="AJSAJS",ge="AFAFAF",fe=65,me=73,ye=79,Ae=86,Ie=90;const Ce={forward:ve,inverse:function(t){var e=Se(Me(t.toUpperCase()));if(e.lat&&e.lon)return[e.lon,e.lat,e.lon,e.lat];return[e.left,e.bottom,e.right,e.top]},toPoint:_e};function ve(t,e){return e=e||5,function(t,e){var r="00000"+t.easting,n="00000"+t.northing;return t.zoneNumber+t.zoneLetter+(d=t.easting,g=t.northing,f=t.zoneNumber,m=xe(f),y=Math.floor(d/1e5),A=Math.floor(g/1e5)%20,i=y,o=A,s=m,a=s-1,l=de.charCodeAt(a),u=ge.charCodeAt(a),c=l+i-1,h=u+o,p=!1,c>Ie&&(c=c-Ie+fe-1,p=!0),(c===me||lme||(c>me||lye||(c>ye||lIe&&(c=c-Ie+fe-1),h>Ae?(h=h-Ae+fe-1,p=!0):p=!1,(h===me||ume||(h>me||uye||(h>ye||uAe&&(h=h-Ae+fe-1),String.fromCharCode(c)+String.fromCharCode(h))+r.substr(r.length-5,e)+n.substr(n.length-5,e);var i,o,s,a,l,u,c,h,p;var d,g,f,m,y,A}(function(t){var e,r,n,i,o,s,a,l,u=t.lat,c=t.lon,h=6378137,p=.00669438,d=.9996,g=be(u),f=be(c);l=Math.floor((c+180)/6)+1,180===c&&(l=60);u>=56&&u<64&&c>=3&&c<12&&(l=32);u>=72&&u<84&&(c>=0&&c<9?l=31:c>=9&&c<21?l=33:c>=21&&c<33?l=35:c>=33&&c<42&&(l=37));a=be(6*(l-1)-180+3),e=p/(1-p),r=h/Math.sqrt(1-p*Math.sin(g)*Math.sin(g)),n=Math.tan(g)*Math.tan(g),i=e*Math.cos(g)*Math.cos(g),o=Math.cos(g)*(f-a),s=h*((1-p/4-3*p*p/64-5*p*p*p/256)*g-(3*p/8+3*p*p/32+45*p*p*p/1024)*Math.sin(2*g)+(15*p*p/256+45*p*p*p/1024)*Math.sin(4*g)-35*p*p*p/3072*Math.sin(6*g));var m=d*r*(o+(1-n+i)*o*o*o/6+(5-18*n+n*n+72*i-58*e)*o*o*o*o*o/120)+5e5,y=d*(s+r*Math.tan(g)*(o*o/2+(5-n+9*i+4*i*i)*o*o*o*o/24+(61-58*n+n*n+600*i-330*e)*o*o*o*o*o*o/720));u<0&&(y+=1e7);return{northing:Math.round(y),easting:Math.round(m),zoneNumber:l,zoneLetter:Ee(u)}}({lat:t[1],lon:t[0]}),e)}function _e(t){var e=Se(Me(t.toUpperCase()));return e.lat&&e.lon?[e.lon,e.lat]:[(e.left+e.right)/2,(e.top+e.bottom)/2]}function be(t){return t*(Math.PI/180)}function we(t){return t/Math.PI*180}function Se(t){var e=t.northing,r=t.easting,n=t.zoneLetter,i=t.zoneNumber;if(i<0||i>60)return null;var o,s,a,l,u,c,h,p,d,g=.9996,f=6378137,m=.00669438,y=(1-Math.sqrt(.99330562))/(1+Math.sqrt(.99330562)),A=r-5e5,I=e;n<"N"&&(I-=1e7),h=6*(i-1)-180+3,o=.006739496752268451,d=(p=I/g/6367449.145945056)+(3*y/2-27*y*y*y/32)*Math.sin(2*p)+(21*y*y/16-55*y*y*y*y/32)*Math.sin(4*p)+151*y*y*y/96*Math.sin(6*p),s=f/Math.sqrt(1-m*Math.sin(d)*Math.sin(d)),a=Math.tan(d)*Math.tan(d),l=o*Math.cos(d)*Math.cos(d),u=.99330562*f/Math.pow(1-m*Math.sin(d)*Math.sin(d),1.5),c=A/(s*g);var C=d-s*Math.tan(d)/u*(c*c/2-(5+3*a+10*l-4*l*l-9*o)*c*c*c*c/24+(61+90*a+298*l+45*a*a-1.6983531815716497-3*l*l)*c*c*c*c*c*c/720);C=we(C);var v,_=(c-(1+2*a+l)*c*c*c/6+(5-2*l+28*a-3*l*l+8*o+24*a*a)*c*c*c*c*c/120)/Math.cos(d);if(_=h+we(_),t.accuracy){var b=Se({northing:t.northing+t.accuracy,easting:t.easting+t.accuracy,zoneLetter:t.zoneLetter,zoneNumber:t.zoneNumber});v={top:b.lat,right:b.lon,bottom:C,left:_}}else v={lat:C,lon:_};return v}function Ee(t){var e="Z";return 84>=t&&t>=72?e="X":72>t&&t>=64?e="W":64>t&&t>=56?e="V":56>t&&t>=48?e="U":48>t&&t>=40?e="T":40>t&&t>=32?e="S":32>t&&t>=24?e="R":24>t&&t>=16?e="Q":16>t&&t>=8?e="P":8>t&&t>=0?e="N":0>t&&t>=-8?e="M":-8>t&&t>=-16?e="L":-16>t&&t>=-24?e="K":-24>t&&t>=-32?e="J":-32>t&&t>=-40?e="H":-40>t&&t>=-48?e="G":-48>t&&t>=-56?e="F":-56>t&&t>=-64?e="E":-64>t&&t>=-72?e="D":-72>t&&t>=-80&&(e="C"),e}function xe(t){var e=t%6;return 0===e&&(e=6),e}function Me(t){if(t&&0===t.length)throw"MGRSPoint coverting from nothing";for(var e,r=t.length,n=null,i="",o=0;!/[A-Z]/.test(e=t.charAt(o));){if(o>=2)throw"MGRSPoint bad conversion from: "+t;i+=e,o++}var s=parseInt(i,10);if(0===o||o+3>r)throw"MGRSPoint bad conversion from: "+t;var a=t.charAt(o++);if(a<="A"||"B"===a||"Y"===a||a>="Z"||"I"===a||"O"===a)throw"MGRSPoint zone letter "+a+" not handled: "+t;n=t.substring(o,o+=2);for(var l=xe(s),u=function(t,e){var r=de.charCodeAt(e-1),n=1e5,i=!1;for(;r!==t.charCodeAt(0);){if(++r===me&&r++,r===ye&&r++,r>Ie){if(i)throw"Bad character: "+t;r=fe,i=!0}n+=1e5}return n}(n.charAt(0),l),c=function(t,e){if(t>"V")throw"MGRSPoint given invalid Northing "+t;var r=ge.charCodeAt(e-1),n=0,i=!1;for(;r!==t.charCodeAt(0);){if(++r===me&&r++,r===ye&&r++,r>Ae){if(i)throw"Bad character: "+t;r=fe,i=!0}n+=1e5}return n}(n.charAt(1),l);c0&&(p=1e5/Math.pow(10,f),d=t.substring(o,o+f),m=parseFloat(d)*p,g=t.substring(o+f),y=parseFloat(g)*p),{easting:m+u,northing:y+c,zoneLetter:a,zoneNumber:s,accuracy:p}}function Re(t){var e;switch(t){case"C":e=11e5;break;case"D":e=2e6;break;case"E":e=28e5;break;case"F":e=37e5;break;case"G":e=46e5;break;case"H":e=55e5;break;case"J":e=64e5;break;case"K":e=73e5;break;case"L":e=82e5;break;case"M":e=91e5;break;case"N":e=0;break;case"P":e=8e5;break;case"Q":e=17e5;break;case"R":e=26e5;break;case"S":e=35e5;break;case"T":e=44e5;break;case"U":e=53e5;break;case"V":e=62e5;break;case"W":e=7e6;break;case"X":e=79e5;break;default:e=-1}if(e>=0)return e;throw"Invalid zone letter: "+t}function Te(t,e,r){if(!(this instanceof Te))return new Te(t,e,r);if(Array.isArray(t))this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("object"==typeof t)this.x=t.x,this.y=t.y,this.z=t.z||0;else if("string"==typeof t&&void 0===e){var n=t.split(",");this.x=parseFloat(n[0],10),this.y=parseFloat(n[1],10),this.z=parseFloat(n[2],10)||0}else this.x=t,this.y=e,this.z=r||0;console.warn("proj4.Point will be removed in version 3, use proj4.toPoint")}Te.fromMGRS=function(t){return new Te(_e(t))},Te.prototype.toMGRS=function(t){return ve([this.x,this.y],t)};const Pe=Te;var Ge=.046875,Ne=.01953125,Oe=.01068115234375;function ke(t){var e=[];e[0]=1-t*(.25+t*(Ge+t*(Ne+t*Oe))),e[1]=t*(.75-t*(Ge+t*(Ne+t*Oe)));var r=t*t;return e[2]=r*(.46875-t*(.013020833333333334+.007120768229166667*t)),r*=t,e[3]=r*(.3645833333333333-.005696614583333333*t),e[4]=r*t*.3076171875,e}function Le(t,e,r,n){return r*=e,e*=e,n[0]*t-r*(n[1]+e*(n[2]+e*(n[3]+e*n[4])))}function De(t,e,r){for(var n=1/(1-e),i=t,o=20;o;--o){var s=Math.sin(i),a=1-e*s*s;if(i-=a=(Le(i,s,Math.cos(i),r)-t)*(a*Math.sqrt(a))*n,Math.abs(a)Y?Math.tan(o):0,g=Math.pow(d,2),f=Math.pow(g,2);e=1-this.es*Math.pow(a,2),u/=Math.sqrt(e);var m=Le(o,a,l,this.en);r=this.a*(this.k0*u*(1+c/6*(1-g+h+c/20*(5-18*g+f+14*h-58*g*h+c/42*(61+179*f-f*g-479*g)))))+this.x0,n=this.a*(this.k0*(m-this.ml0+a*s*u/2*(1+c/12*(5-g+9*h+4*p+c/30*(61+f-58*g+270*h-330*g*h+c/56*(1385+543*f-f*g-3111*g))))))+this.y0}else{var y=l*Math.sin(s);if(Math.abs(Math.abs(y)-1)=1){if(y-1>Y)return 93;n=0}else n=Math.acos(n);o<0&&(n=-n),n=this.a*this.k0*(n-this.lat0)+this.y0}return t.x=r,t.y=n,t},inverse:function(t){var e,r,n,i,o=(t.x-this.x0)*(1/this.a),s=(t.y-this.y0)*(1/this.a);if(this.es)if(r=De(e=this.ml0+s/this.k0,this.es,this.en),Math.abs(r)Y?Math.tan(r):0,c=this.ep2*Math.pow(l,2),h=Math.pow(c,2),p=Math.pow(u,2),d=Math.pow(p,2);e=1-this.es*Math.pow(a,2);var g=o*Math.sqrt(e)/this.k0,f=Math.pow(g,2);n=r-(e*=u)*f/(1-this.es)*.5*(1-f/12*(5+3*p-9*c*p+c-4*h-f/30*(61+90*p-252*c*p+45*d+46*c-f/56*(1385+3633*p+4095*d+1574*d*p)))),i=xt(this.long0+g*(1-f/6*(1+2*p+c-f/20*(5+28*p+24*d+8*c*p+6*c-f/42*(61+662*p+1320*d+720*d*p))))/l)}else n=V*Et(s),i=0;else{var m=Math.exp(o/this.k0),y=.5*(m-1/m),A=this.lat0+s/this.k0,I=Math.cos(A);e=Math.sqrt((1-Math.pow(I,2))/(1+Math.pow(y,2))),n=Math.asin(e),s<0&&(n=-n),i=0===y&&0===I?0:xt(Math.atan2(y,I)+this.long0)}return t.x=i,t.y=n,t},names:["Fast_Transverse_Mercator","Fast Transverse Mercator"]};function Ue(t){var e=Math.exp(t);return e=(e-1/e)/2}function ze(t,e){t=Math.abs(t),e=Math.abs(e);var r=Math.max(t,e),n=Math.min(t,e)/(r||1);return r*Math.sqrt(1+Math.pow(n,2))}function qe(t){var e=Math.abs(t);return e=function(t){var e=1+t,r=e-1;return 0===r?t:t*Math.log(e)/r}(e*(1+e/(ze(1,e)+1))),t<0?-e:e}function Fe(t,e){for(var r,n=2*Math.cos(2*e),i=t.length-1,o=t[i],s=0;--i>=0;)r=n*o-s+t[i],s=o,o=r;return e+r*Math.sin(2*e)}function Be(t,e,r){for(var n,i,o=Math.sin(e),s=Math.cos(e),a=Ue(r),l=function(t){var e=Math.exp(t);return(e+1/e)/2}(r),u=2*s*l,c=-2*o*a,h=t.length-1,p=t[h],d=0,g=0,f=0;--h>=0;)n=g,i=d,p=u*(g=p)-n-c*(d=f)+t[h],f=c*g-i+u*d;return[(u=o*l)*p-(c=s*a)*f,u*f+c*p]}const We={init:function(){if(!this.approx&&(isNaN(this.es)||this.es<=0))throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION["Fast_Transverse_Mercator"] in the WKT.');this.approx&&(je.init.apply(this),this.forward=je.forward,this.inverse=je.inverse),this.x0=void 0!==this.x0?this.x0:0,this.y0=void 0!==this.y0?this.y0:0,this.long0=void 0!==this.long0?this.long0:0,this.lat0=void 0!==this.lat0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var t=this.es/(1+Math.sqrt(1-this.es)),e=t/(2-t),r=e;this.cgb[0]=e*(2+e*(-2/3+e*(e*(116/45+e*(26/45+e*(-2854/675)))-2))),this.cbg[0]=e*(e*(2/3+e*(4/3+e*(-82/45+e*(32/45+e*(4642/4725)))))-2),r*=e,this.cgb[1]=r*(7/3+e*(e*(-227/45+e*(2704/315+e*(2323/945)))-1.6)),this.cbg[1]=r*(5/3+e*(-16/15+e*(-13/9+e*(904/315+e*(-1522/945))))),r*=e,this.cgb[2]=r*(56/15+e*(-136/35+e*(-1262/105+e*(73814/2835)))),this.cbg[2]=r*(-26/15+e*(34/21+e*(1.6+e*(-12686/2835)))),r*=e,this.cgb[3]=r*(4279/630+e*(-332/35+e*(-399572/14175))),this.cbg[3]=r*(1237/630+e*(e*(-24832/14175)-2.4)),r*=e,this.cgb[4]=r*(4174/315+e*(-144838/6237)),this.cbg[4]=r*(-734/315+e*(109598/31185)),r*=e,this.cgb[5]=r*(601676/22275),this.cbg[5]=r*(444337/155925),r=Math.pow(e,2),this.Qn=this.k0/(1+e)*(1+r*(1/4+r*(1/64+r/256))),this.utg[0]=e*(e*(2/3+e*(-37/96+e*(1/360+e*(81/512+e*(-96199/604800)))))-.5),this.gtu[0]=e*(.5+e*(-2/3+e*(5/16+e*(41/180+e*(-127/288+e*(7891/37800)))))),this.utg[1]=r*(-1/48+e*(-1/15+e*(437/1440+e*(-46/105+e*(1118711/3870720))))),this.gtu[1]=r*(13/48+e*(e*(557/1440+e*(281/630+e*(-1983433/1935360)))-.6)),r*=e,this.utg[2]=r*(-17/480+e*(37/840+e*(209/4480+e*(-5569/90720)))),this.gtu[2]=r*(61/240+e*(-103/140+e*(15061/26880+e*(167603/181440)))),r*=e,this.utg[3]=r*(-4397/161280+e*(11/504+e*(830251/7257600))),this.gtu[3]=r*(49561/161280+e*(-179/168+e*(6601661/7257600))),r*=e,this.utg[4]=r*(-4583/161280+e*(108847/3991680)),this.gtu[4]=r*(34729/80640+e*(-3418889/1995840)),r*=e,this.utg[5]=r*(-20648693/638668800),this.gtu[5]=.6650675310896665*r;var n=Fe(this.cbg,this.lat0);this.Zb=-this.Qn*(n+function(t,e){for(var r,n=2*Math.cos(e),i=t.length-1,o=t[i],s=0;--i>=0;)r=n*o-s+t[i],s=o,o=r;return Math.sin(e)*r}(this.gtu,2*n))},forward:function(t){var e=xt(t.x-this.long0),r=t.y;r=Fe(this.cbg,r);var n=Math.sin(r),i=Math.cos(r),o=Math.sin(e),s=Math.cos(e);r=Math.atan2(n,s*i),e=Math.atan2(o*i,ze(n,i*s)),e=qe(Math.tan(e));var a,l,u=Be(this.gtu,2*r,2*e);return r+=u[0],e+=u[1],Math.abs(e)<=2.623395162778?(a=this.a*(this.Qn*e)+this.x0,l=this.a*(this.Qn*r+this.Zb)+this.y0):(a=1/0,l=1/0),t.x=a,t.y=l,t},inverse:function(t){var e,r,n=(t.x-this.x0)*(1/this.a),i=(t.y-this.y0)*(1/this.a);if(i=(i-this.Zb)/this.Qn,n/=this.Qn,Math.abs(n)<=2.623395162778){var o=Be(this.utg,2*i,2*n);i+=o[0],n+=o[1],n=Math.atan(Ue(n));var s=Math.sin(i),a=Math.cos(i),l=Math.sin(n),u=Math.cos(n);i=Math.atan2(s*u,ze(l,u*a)),e=xt((n=Math.atan2(l,u*a))+this.long0),r=Fe(this.cgb,i)}else e=1/0,r=1/0;return t.x=e,t.y=r,t},names:["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc","Transverse_Mercator","Transverse Mercator","Gauss Kruger","Gauss_Kruger","tmerc"]};const He={init:function(){var t=function(t,e){if(void 0===t){if((t=Math.floor(30*(xt(e)+Math.PI)/Math.PI)+1)<0)return 0;if(t>60)return 60}return t}(this.zone,this.long0);if(void 0===t)throw new Error("unknown utm zone");this.lat0=0,this.long0=(6*Math.abs(t)-183)*X,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,We.init.apply(this),this.forward=We.forward,this.inverse=We.inverse},names:["Universal Transverse Mercator System","utm"],dependsOn:"etmerc"};function Ve(t,e){return Math.pow((1-t)/(1+t),e)}const Ye={init:function(){var t=Math.sin(this.lat0),e=Math.cos(this.lat0);e*=e,this.rc=Math.sqrt(1-this.es)/(1-this.es*t*t),this.C=Math.sqrt(1+this.es*e*e/(1-this.es)),this.phic0=Math.asin(t/this.C),this.ratexp=.5*this.C*this.e,this.K=Math.tan(.5*this.phic0+K)/(Math.pow(Math.tan(.5*this.lat0+K),this.C)*Ve(this.e*t,this.ratexp))},forward:function(t){var e=t.x,r=t.y;return t.y=2*Math.atan(this.K*Math.pow(Math.tan(.5*r+K),this.C)*Ve(this.e*Math.sin(r),this.ratexp))-V,t.x=this.C*e,t},inverse:function(t){for(var e=t.x/this.C,r=t.y,n=Math.pow(Math.tan(.5*r+K)/this.K,1/this.C),i=20;i>0&&(r=2*Math.atan(n*Ve(this.e*Math.sin(t.y),-.5*this.e))-V,!(Math.abs(r-t.y)<1e-14));--i)t.y=r;return i?(t.x=e,t.y=r,t):null},names:["gauss"]};const Xe={init:function(){Ye.init.apply(this),this.rc&&(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"))},forward:function(t){var e,r,n,i;return t.x=xt(t.x-this.long0),Ye.forward.apply(this,[t]),e=Math.sin(t.y),r=Math.cos(t.y),n=Math.cos(t.x),i=this.k0*this.R2/(1+this.sinc0*e+this.cosc0*r*n),t.x=i*r*Math.sin(t.x),t.y=i*(this.cosc0*e-this.sinc0*r*n),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var e,r,n,i,o;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,o=ze(t.x,t.y)){var s=2*Math.atan2(o,this.R2);e=Math.sin(s),r=Math.cos(s),i=Math.asin(r*this.sinc0+t.y*e*this.cosc0/o),n=Math.atan2(t.x*e,o*this.cosc0*r-t.y*this.sinc0*e)}else i=this.phic0,n=0;return t.x=n,t.y=i,Ye.inverse.apply(this,[t]),t.x=xt(t.x+this.long0),t},names:["Stereographic_North_Pole","Oblique_Stereographic","sterea","Oblique Stereographic Alternative","Double_Stereographic"]};const Ze={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.coslat0=Math.cos(this.lat0),this.sinlat0=Math.sin(this.lat0),this.sphere?1===this.k0&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=Y&&(this.k0=.5*(1+Et(this.lat0)*Math.sin(this.lat_ts))):(Math.abs(this.coslat0)<=Y&&(this.lat0>0?this.con=1:this.con=-1),this.cons=Math.sqrt(Math.pow(1+this.e,1+this.e)*Math.pow(1-this.e,1-this.e)),1===this.k0&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=Y&&Math.abs(Math.cos(this.lat_ts))>Y&&(this.k0=.5*this.cons*St(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts))/Mt(this.e,this.con*this.lat_ts,this.con*Math.sin(this.lat_ts))),this.ms1=St(this.e,this.sinlat0,this.coslat0),this.X0=2*Math.atan(this.ssfn_(this.lat0,this.sinlat0,this.e))-V,this.cosX0=Math.cos(this.X0),this.sinX0=Math.sin(this.X0))},forward:function(t){var e,r,n,i,o,s,a=t.x,l=t.y,u=Math.sin(l),c=Math.cos(l),h=xt(a-this.long0);return Math.abs(Math.abs(a-this.long0)-Math.PI)<=Y&&Math.abs(l+this.lat0)<=Y?(t.x=NaN,t.y=NaN,t):this.sphere?(e=2*this.k0/(1+this.sinlat0*u+this.coslat0*c*Math.cos(h)),t.x=this.a*e*c*Math.sin(h)+this.x0,t.y=this.a*e*(this.coslat0*u-this.sinlat0*c*Math.cos(h))+this.y0,t):(r=2*Math.atan(this.ssfn_(l,u,this.e))-V,i=Math.cos(r),n=Math.sin(r),Math.abs(this.coslat0)<=Y?(o=Mt(this.e,l*this.con,this.con*u),s=2*this.a*this.k0*o/this.cons,t.x=this.x0+s*Math.sin(a-this.long0),t.y=this.y0-this.con*s*Math.cos(a-this.long0),t):(Math.abs(this.sinlat0)0?xt(this.long0+Math.atan2(t.x,-1*t.y)):xt(this.long0+Math.atan2(t.x,t.y)):xt(this.long0+Math.atan2(t.x*Math.sin(a),s*this.coslat0*Math.cos(a)-t.y*this.sinlat0*Math.sin(a))),t.x=e,t.y=r,t)}if(Math.abs(this.coslat0)<=Y){if(s<=Y)return r=this.lat0,e=this.long0,t.x=e,t.y=r,t;t.x*=this.con,t.y*=this.con,n=s*this.cons/(2*this.a*this.k0),r=this.con*Rt(this.e,n),e=this.con*xt(this.con*this.long0+Math.atan2(t.x,-1*t.y))}else i=2*Math.atan(s*this.cosX0/(2*this.a*this.k0*this.ms1)),e=this.long0,s<=Y?o=this.X0:(o=Math.asin(Math.cos(i)*this.sinX0+t.y*Math.sin(i)*this.cosX0/s),e=xt(this.long0+Math.atan2(t.x*Math.sin(i),s*this.cosX0*Math.cos(i)-t.y*this.sinX0*Math.sin(i)))),r=-1*Rt(this.e,Math.tan(.5*(V+o)));return t.x=e,t.y=r,t},names:["stere","Stereographic_South_Pole","Polar Stereographic (variant B)","Polar_Stereographic"],ssfn_:function(t,e,r){return e*=r,Math.tan(.5*(V+t))*Math.pow((1-e)/(1+e),.5*r)}};const Ke={init:function(){var t=this.lat0;this.lambda0=this.long0;var e=Math.sin(t),r=this.a,n=1/this.rf,i=2*n-Math.pow(n,2),o=this.e=Math.sqrt(i);this.R=this.k0*r*Math.sqrt(1-i)/(1-i*Math.pow(e,2)),this.alpha=Math.sqrt(1+i/(1-i)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(e/this.alpha);var s=Math.log(Math.tan(Math.PI/4+this.b0/2)),a=Math.log(Math.tan(Math.PI/4+t/2)),l=Math.log((1+o*e)/(1-o*e));this.K=s-this.alpha*a+this.alpha*o/2*l},forward:function(t){var e=Math.log(Math.tan(Math.PI/4-t.y/2)),r=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),n=-this.alpha*(e+r)+this.K,i=2*(Math.atan(Math.exp(n))-Math.PI/4),o=this.alpha*(t.x-this.lambda0),s=Math.atan(Math.sin(o)/(Math.sin(this.b0)*Math.tan(i)+Math.cos(this.b0)*Math.cos(o))),a=Math.asin(Math.cos(this.b0)*Math.sin(i)-Math.sin(this.b0)*Math.cos(i)*Math.cos(o));return t.y=this.R/2*Math.log((1+Math.sin(a))/(1-Math.sin(a)))+this.y0,t.x=this.R*s+this.x0,t},inverse:function(t){for(var e=t.x-this.x0,r=t.y-this.y0,n=e/this.R,i=2*(Math.atan(Math.exp(r/this.R))-Math.PI/4),o=Math.asin(Math.cos(this.b0)*Math.sin(i)+Math.sin(this.b0)*Math.cos(i)*Math.cos(n)),s=Math.atan(Math.sin(n)/(Math.cos(this.b0)*Math.cos(n)-Math.sin(this.b0)*Math.tan(i))),a=this.lambda0+s/this.alpha,l=0,u=o,c=-1e3,h=0;Math.abs(u-c)>1e-7;){if(++h>20)return;l=1/this.alpha*(Math.log(Math.tan(Math.PI/4+o/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(u))/2)),c=u,u=2*Math.atan(Math.exp(l))-Math.PI/2}return t.x=a,t.y=u,t},names:["somerc"]};var Je=1e-7;const Qe={init:function(){var t,e,r,n,i,o,s,a,l,u,c,h,p,d=0,g=0,f=0,m=0,y=0,A=0,I=0;this.no_off=(p="object"==typeof(h=this).PROJECTION?Object.keys(h.PROJECTION)[0]:h.PROJECTION,"no_uoff"in h||"no_off"in h||-1!==["Hotine_Oblique_Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin"].indexOf(p)),this.no_rot="no_rot"in this;var C=!1;"alpha"in this&&(C=!0);var v=!1;if("rectified_grid_angle"in this&&(v=!0),C&&(I=this.alpha),v&&(d=this.rectified_grid_angle*X),C||v)g=this.longc;else if(f=this.long1,y=this.lat1,m=this.long2,A=this.lat2,Math.abs(y-A)<=Je||(t=Math.abs(y))<=Je||Math.abs(t-V)<=Je||Math.abs(Math.abs(this.lat0)-V)<=Je||Math.abs(Math.abs(A)-V)<=Je)throw new Error;var _=1-this.es;e=Math.sqrt(_),Math.abs(this.lat0)>Y?(a=Math.sin(this.lat0),r=Math.cos(this.lat0),t=1-this.es*a*a,this.B=r*r,this.B=Math.sqrt(1+this.es*this.B*this.B/_),this.A=this.B*this.k0*e/t,(i=(n=this.B*e/(r*Math.sqrt(t)))*n-1)<=0?i=0:(i=Math.sqrt(i),this.lat0<0&&(i=-i)),this.E=i+=n,this.E*=Math.pow(Mt(this.e,this.lat0,a),this.B)):(this.B=1/e,this.A=this.k0,this.E=n=i=1),C||v?(C?(c=Math.asin(Math.sin(I)/n),v||(d=I)):(c=d,I=Math.asin(n*Math.sin(c))),this.lam0=g-Math.asin(.5*(i-1/i)*Math.tan(c))/this.B):(o=Math.pow(Mt(this.e,y,Math.sin(y)),this.B),s=Math.pow(Mt(this.e,A,Math.sin(A)),this.B),i=this.E/o,l=(s-o)/(s+o),u=((u=this.E*this.E)-s*o)/(u+s*o),(t=f-m)<-Math.pi?m-=J:t>Math.pi&&(m+=J),this.lam0=xt(.5*(f+m)-Math.atan(u*Math.tan(.5*this.B*(f-m))/l)/this.B),c=Math.atan(2*Math.sin(this.B*xt(f-this.lam0))/(i-1/i)),d=I=Math.asin(n*Math.sin(c))),this.singam=Math.sin(c),this.cosgam=Math.cos(c),this.sinrot=Math.sin(d),this.cosrot=Math.cos(d),this.rB=1/this.B,this.ArB=this.A*this.rB,this.BrA=1/this.ArB,this.A,this.B,this.no_off?this.u_0=0:(this.u_0=Math.abs(this.ArB*Math.atan(Math.sqrt(n*n-1)/Math.cos(I))),this.lat0<0&&(this.u_0=-this.u_0)),i=.5*c,this.v_pole_n=this.ArB*Math.log(Math.tan(K-i)),this.v_pole_s=this.ArB*Math.log(Math.tan(K+i))},forward:function(t){var e,r,n,i,o,s,a,l,u={};if(t.x=t.x-this.lam0,Math.abs(Math.abs(t.y)-V)>Y){if(e=.5*((o=this.E/Math.pow(Mt(this.e,t.y,Math.sin(t.y)),this.B))-(s=1/o)),r=.5*(o+s),i=Math.sin(this.B*t.x),n=(e*this.singam-i*this.cosgam)/r,Math.abs(Math.abs(n)-1)0?this.v_pole_n:this.v_pole_s,a=this.ArB*t.y;return this.no_rot?(u.x=a,u.y=l):(a-=this.u_0,u.x=l*this.cosrot+a*this.sinrot,u.y=a*this.cosrot-l*this.sinrot),u.x=this.a*u.x+this.x0,u.y=this.a*u.y+this.y0,u},inverse:function(t){var e,r,n,i,o,s,a,l={};if(t.x=(t.x-this.x0)*(1/this.a),t.y=(t.y-this.y0)*(1/this.a),this.no_rot?(r=t.y,e=t.x):(r=t.x*this.cosrot-t.y*this.sinrot,e=t.y*this.cosrot+t.x*this.sinrot+this.u_0),i=.5*((n=Math.exp(-this.BrA*r))-1/n),o=.5*(n+1/n),a=((s=Math.sin(this.BrA*e))*this.cosgam+i*this.singam)/o,Math.abs(Math.abs(a)-1)Y?this.ns=Math.log(n/a)/Math.log(i/l):this.ns=e,isNaN(this.ns)&&(this.ns=e),this.f0=n/(this.ns*Math.pow(i,this.ns)),this.rh=this.a*this.f0*Math.pow(u,this.ns),this.title||(this.title="Lambert Conformal Conic")}},forward:function(t){var e=t.x,r=t.y;Math.abs(2*Math.abs(r)-Math.PI)<=Y&&(r=Et(r)*(V-2e-10));var n,i,o=Math.abs(Math.abs(r)-V);if(o>Y)n=Mt(this.e,r,Math.sin(r)),i=this.a*this.f0*Math.pow(n,this.ns);else{if((o=r*this.ns)<=0)return null;i=0}var s=this.ns*xt(e-this.long0);return t.x=this.k0*(i*Math.sin(s))+this.x0,t.y=this.k0*(this.rh-i*Math.cos(s))+this.y0,t},inverse:function(t){var e,r,n,i,o,s=(t.x-this.x0)/this.k0,a=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(e=Math.sqrt(s*s+a*a),r=1):(e=-Math.sqrt(s*s+a*a),r=-1);var l=0;if(0!==e&&(l=Math.atan2(r*s,r*a)),0!==e||this.ns>0){if(r=1/this.ns,n=Math.pow(e/(this.a*this.f0),r),-9999===(i=Rt(this.e,n)))return null}else i=-V;return o=xt(l/this.ns+this.long0),t.x=o,t.y=i,t},names:["Lambert Tangential Conformal Conic Projection","Lambert_Conformal_Conic","Lambert_Conformal_Conic_1SP","Lambert_Conformal_Conic_2SP","lcc","Lambert Conic Conformal (1SP)","Lambert Conic Conformal (2SP)"]};const tr={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var e,r,n,i,o,s,a,l=t.x,u=t.y,c=xt(l-this.long0);return e=Math.pow((1+this.e*Math.sin(u))/(1-this.e*Math.sin(u)),this.alfa*this.e/2),r=2*(Math.atan(this.k*Math.pow(Math.tan(u/2+this.s45),this.alfa)/e)-this.s45),n=-c*this.alfa,i=Math.asin(Math.cos(this.ad)*Math.sin(r)+Math.sin(this.ad)*Math.cos(r)*Math.cos(n)),o=Math.asin(Math.cos(r)*Math.sin(n)/Math.cos(i)),s=this.n*o,a=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(i/2+this.s45),this.n),t.y=a*Math.cos(s)/1,t.x=a*Math.sin(s)/1,this.czech||(t.y*=-1,t.x*=-1),t},inverse:function(t){var e,r,n,i,o,s,a,l=t.x;t.x=t.y,t.y=l,this.czech||(t.y*=-1,t.x*=-1),o=Math.sqrt(t.x*t.x+t.y*t.y),i=Math.atan2(t.y,t.x)/Math.sin(this.s0),n=2*(Math.atan(Math.pow(this.ro0/o,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),e=Math.asin(Math.cos(this.ad)*Math.sin(n)-Math.sin(this.ad)*Math.cos(n)*Math.cos(i)),r=Math.asin(Math.cos(n)*Math.sin(i)/Math.cos(e)),t.x=this.long0-r/this.alfa,s=e,a=0;var u=0;do{t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(e/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(s))/(1-this.e*Math.sin(s)),this.e/2))-this.s45),Math.abs(s-t.y)<1e-10&&(a=1),s=t.y,u+=1}while(0===a&&u<15);return u>=15?null:t},names:["Krovak","krovak"]};function er(t,e,r,n,i){return t*i-e*Math.sin(2*i)+r*Math.sin(4*i)-n*Math.sin(6*i)}function rr(t){return 1-.25*t*(1+t/16*(3+1.25*t))}function nr(t){return.375*t*(1+.25*t*(1+.46875*t))}function ir(t){return.05859375*t*t*(1+.75*t)}function or(t){return t*t*t*(35/3072)}function sr(t,e,r){var n=e*r;return t/Math.sqrt(1-n*n)}function ar(t){return Math.abs(t)1e-7?(1-t*t)*(e/(1-(r=t*e)*r)-.5/t*Math.log((1-r)/(1+r))):2*e}var hr=.3333333333333333,pr=.17222222222222222,dr=.10257936507936508,gr=.06388888888888888,fr=.0664021164021164,mr=.016415012942191543;const yr={init:function(){var t,e=Math.abs(this.lat0);if(Math.abs(e-V)0)switch(this.qp=cr(this.e,1),this.mmf=.5/(1-this.es),this.apa=function(t){var e,r=[];return r[0]=t*hr,e=t*t,r[0]+=e*pr,r[1]=e*gr,e*=t,r[0]+=e*dr,r[1]+=e*fr,r[2]=e*mr,r}(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),t=Math.sin(this.lat0),this.sinb1=cr(this.e,t)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*t*t)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}else this.mode===this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var e,r,n,i,o,s,a,l,u,c,h=t.x,p=t.y;if(h=xt(h-this.long0),this.sphere){if(o=Math.sin(p),c=Math.cos(p),n=Math.cos(h),this.mode===this.OBLIQ||this.mode===this.EQUIT){if((r=this.mode===this.EQUIT?1+c*n:1+this.sinph0*o+this.cosph0*c*n)<=Y)return null;e=(r=Math.sqrt(2/r))*c*Math.sin(h),r*=this.mode===this.EQUIT?o:this.cosph0*o-this.sinph0*c*n}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(n=-n),Math.abs(p+this.lat0)=0?(e=(u=Math.sqrt(s))*i,r=n*(this.mode===this.S_POLE?u:-u)):e=r=0}}return t.x=this.a*e+this.x0,t.y=this.a*r+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var e,r,n,i,o,s,a,l,u,c,h=t.x/this.a,p=t.y/this.a;if(this.sphere){var d,g=0,f=0;if((r=.5*(d=Math.sqrt(h*h+p*p)))>1)return null;switch(r=2*Math.asin(r),this.mode!==this.OBLIQ&&this.mode!==this.EQUIT||(f=Math.sin(r),g=Math.cos(r)),this.mode){case this.EQUIT:r=Math.abs(d)<=Y?0:Math.asin(p*f/d),h*=f,p=g*d;break;case this.OBLIQ:r=Math.abs(d)<=Y?this.lat0:Math.asin(g*this.sinph0+p*f*this.cosph0/d),h*=f*this.cosph0,p=(g-Math.sin(r)*this.sinph0)*d;break;case this.N_POLE:p=-p,r=V-r;break;case this.S_POLE:r-=V}e=0!==p||this.mode!==this.EQUIT&&this.mode!==this.OBLIQ?Math.atan2(h,p):0}else{if(a=0,this.mode===this.OBLIQ||this.mode===this.EQUIT){if(h/=this.dd,p*=this.dd,(s=Math.sqrt(h*h+p*p))1&&(t=t>1?1:-1),Math.asin(t)}const Ir={init:function(){Math.abs(this.lat1+this.lat2)Y?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)},forward:function(t){var e=t.x,r=t.y;this.sin_phi=Math.sin(r),this.cos_phi=Math.cos(r);var n=cr(this.e3,this.sin_phi),i=this.a*Math.sqrt(this.c-this.ns0*n)/this.ns0,o=this.ns0*xt(e-this.long0),s=i*Math.sin(o)+this.x0,a=this.rh-i*Math.cos(o)+this.y0;return t.x=s,t.y=a,t},inverse:function(t){var e,r,n,i,o,s;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(e=Math.sqrt(t.x*t.x+t.y*t.y),n=1):(e=-Math.sqrt(t.x*t.x+t.y*t.y),n=-1),i=0,0!==e&&(i=Math.atan2(n*t.x,n*t.y)),n=e*this.ns0/this.a,this.sphere?s=Math.asin((this.c-n*n)/(2*this.ns0)):(r=(this.c-n*n)/this.ns0,s=this.phi1z(this.e3,r)),o=xt(i/this.ns0+this.long0),t.x=o,t.y=s,t},names:["Albers_Conic_Equal_Area","Albers","aea"],phi1z:function(t,e){var r,n,i,o,s=Ar(.5*e);if(t0||Math.abs(o)<=Y?(s=this.x0+1*this.a*r*Math.sin(n)/o,a=this.y0+1*this.a*(this.cos_p14*e-this.sin_p14*r*i)/o):(s=this.x0+this.infinity_dist*r*Math.sin(n),a=this.y0+this.infinity_dist*(this.cos_p14*e-this.sin_p14*r*i)),t.x=s,t.y=a,t},inverse:function(t){var e,r,n,i,o,s;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(e=Math.sqrt(t.x*t.x+t.y*t.y))?(i=Math.atan2(e,this.rc),r=Math.sin(i),s=Ar((n=Math.cos(i))*this.sin_p14+t.y*r*this.cos_p14/e),o=Math.atan2(t.x*r,e*this.cos_p14*n-t.y*this.sin_p14*r),o=xt(this.long0+o)):(s=this.phic0,o=0),t.x=o,t.y=s,t},names:["gnom"]};const vr={init:function(){this.sphere||(this.k0=St(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var e,r,n=t.x,i=t.y,o=xt(n-this.long0);if(this.sphere)e=this.x0+this.a*o*Math.cos(this.lat_ts),r=this.y0+this.a*Math.sin(i)/Math.cos(this.lat_ts);else{var s=cr(this.e,Math.sin(i));e=this.x0+this.a*this.k0*o,r=this.y0+this.a*s*.5/this.k0}return t.x=e,t.y=r,t},inverse:function(t){var e,r;return t.x-=this.x0,t.y-=this.y0,this.sphere?(e=xt(this.long0+t.x/this.a/Math.cos(this.lat_ts)),r=Math.asin(t.y/this.a*Math.cos(this.lat_ts))):(r=function(t,e){var r=1-(1-t*t)/(2*t)*Math.log((1-t)/(1+t));if(Math.abs(Math.abs(e)-r)<1e-6)return e<0?-1*V:V;for(var n,i,o,s,a=Math.asin(.5*e),l=0;l<30;l++)if(i=Math.sin(a),o=Math.cos(a),s=t*i,a+=n=Math.pow(1-s*s,2)/(2*o)*(e/(1-t*t)-i/(1-s*s)+.5/t*Math.log((1-s)/(1+s))),Math.abs(n)<=1e-10)return a;return NaN}(this.e,2*t.y*this.k0/this.a),e=xt(this.long0+t.x/(this.a*this.k0))),t.x=e,t.y=r,t},names:["cea"]};const _r={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Equidistant Cylindrical (Plate Carre)",this.rc=Math.cos(this.lat_ts)},forward:function(t){var e=t.x,r=t.y,n=xt(e-this.long0),i=ar(r-this.lat0);return t.x=this.x0+this.a*n*this.rc,t.y=this.y0+this.a*i,t},inverse:function(t){var e=t.x,r=t.y;return t.x=xt(this.long0+(e-this.x0)/(this.a*this.rc)),t.y=ar(this.lat0+(r-this.y0)/this.a),t},names:["Equirectangular","Equidistant_Cylindrical","eqc"]};const br={init:function(){this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=rr(this.es),this.e1=nr(this.es),this.e2=ir(this.es),this.e3=or(this.es),this.ml0=this.a*er(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var e,r,n,i=t.x,o=t.y,s=xt(i-this.long0);if(n=s*Math.sin(o),this.sphere)Math.abs(o)<=Y?(e=this.a*s,r=-1*this.a*this.lat0):(e=this.a*Math.sin(n)/Math.tan(o),r=this.a*(ar(o-this.lat0)+(1-Math.cos(n))/Math.tan(o)));else if(Math.abs(o)<=Y)e=this.a*s,r=-1*this.ml0;else{var a=sr(this.a,this.e,Math.sin(o))/Math.tan(o);e=a*Math.sin(n),r=this.a*er(this.e0,this.e1,this.e2,this.e3,o)-this.ml0+a*(1-Math.cos(n))}return t.x=e+this.x0,t.y=r+this.y0,t},inverse:function(t){var e,r,n,i,o,s,a,l,u;if(n=t.x-this.x0,i=t.y-this.y0,this.sphere)if(Math.abs(i+this.a*this.lat0)<=Y)e=xt(n/this.a+this.long0),r=0;else{var c;for(s=this.lat0+i/this.a,a=n*n/this.a/this.a+s*s,l=s,o=20;o;--o)if(l+=u=-1*(s*(l*(c=Math.tan(l))+1)-l-.5*(l*l+a)*c)/((l-s)/c-1),Math.abs(u)<=Y){r=l;break}e=xt(this.long0+Math.asin(n*Math.tan(l)/this.a)/Math.sin(r))}else if(Math.abs(i+this.ml0)<=Y)r=0,e=xt(this.long0+n/this.a);else{var h,p,d,g,f;for(s=(this.ml0+i)/this.a,a=n*n/this.a/this.a+s*s,l=s,o=20;o;--o)if(f=this.e*Math.sin(l),h=Math.sqrt(1-f*f)*Math.tan(l),p=this.a*er(this.e0,this.e1,this.e2,this.e3,l),d=this.e0-2*this.e1*Math.cos(2*l)+4*this.e2*Math.cos(4*l)-6*this.e3*Math.cos(6*l),l-=u=(s*(h*(g=p/this.a)+1)-g-.5*h*(g*g+a))/(this.es*Math.sin(2*l)*(g*g+a-2*s*g)/(4*h)+(s-g)*(h*d-2/Math.sin(2*l))-d),Math.abs(u)<=Y){r=l;break}h=Math.sqrt(1-this.es*Math.pow(Math.sin(r),2))*Math.tan(r),e=xt(this.long0+Math.asin(n*h/this.a)/Math.sin(r))}return t.x=e,t.y=r,t},names:["Polyconic","poly"]};const wr={init:function(){this.A=[],this.A[1]=.6399175073,this.A[2]=-.1358797613,this.A[3]=.063294409,this.A[4]=-.02526853,this.A[5]=.0117879,this.A[6]=-.0055161,this.A[7]=.0026906,this.A[8]=-.001333,this.A[9]=67e-5,this.A[10]=-34e-5,this.B_re=[],this.B_im=[],this.B_re[1]=.7557853228,this.B_im[1]=0,this.B_re[2]=.249204646,this.B_im[2]=.003371507,this.B_re[3]=-.001541739,this.B_im[3]=.04105856,this.B_re[4]=-.10162907,this.B_im[4]=.01727609,this.B_re[5]=-.26623489,this.B_im[5]=-.36249218,this.B_re[6]=-.6870983,this.B_im[6]=-1.1651967,this.C_re=[],this.C_im=[],this.C_re[1]=1.3231270439,this.C_im[1]=0,this.C_re[2]=-.577245789,this.C_im[2]=-.007809598,this.C_re[3]=.508307513,this.C_im[3]=-.112208952,this.C_re[4]=-.15094762,this.C_im[4]=.18200602,this.C_re[5]=1.01418179,this.C_im[5]=1.64497696,this.C_re[6]=1.9660549,this.C_im[6]=2.5127645,this.D=[],this.D[1]=1.5627014243,this.D[2]=.5185406398,this.D[3]=-.03333098,this.D[4]=-.1052906,this.D[5]=-.0368594,this.D[6]=.007317,this.D[7]=.0122,this.D[8]=.00394,this.D[9]=-.0013},forward:function(t){var e,r=t.x,n=t.y-this.lat0,i=r-this.long0,o=n/H*1e-5,s=i,a=1,l=0;for(e=1;e<=10;e++)a*=o,l+=this.A[e]*a;var u,c=l,h=s,p=1,d=0,g=0,f=0;for(e=1;e<=6;e++)u=d*c+p*h,p=p*c-d*h,d=u,g=g+this.B_re[e]*p-this.B_im[e]*d,f=f+this.B_im[e]*p+this.B_re[e]*d;return t.x=f*this.a+this.x0,t.y=g*this.a+this.y0,t},inverse:function(t){var e,r,n=t.x,i=t.y,o=n-this.x0,s=(i-this.y0)/this.a,a=o/this.a,l=1,u=0,c=0,h=0;for(e=1;e<=6;e++)r=u*s+l*a,l=l*s-u*a,u=r,c=c+this.C_re[e]*l-this.C_im[e]*u,h=h+this.C_im[e]*l+this.C_re[e]*u;for(var p=0;p.999999999999&&(r=.999999999999),e=Math.asin(r);var n=xt(this.long0+t.x/(.900316316158*this.a*Math.cos(e)));n<-Math.PI&&(n=-Math.PI),n>Math.PI&&(n=Math.PI),r=(2*e+Math.sin(2*e))/Math.PI,Math.abs(r)>1&&(r=1);var i=Math.asin(r);return t.x=n,t.y=i,t},names:["Mollweide","moll"]};const Mr={init:function(){Math.abs(this.lat1+this.lat2)=0?(r=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(r=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1);var o=0;return 0!==r&&(o=Math.atan2(e*t.x,e*t.y)),this.sphere?(i=xt(this.long0+o/this.ns),n=ar(this.g-r/this.a),t.x=i,t.y=n,t):(n=lr(this.g-r/this.a,this.e0,this.e1,this.e2,this.e3),i=xt(this.long0+o/this.ns),t.x=i,t.y=n,t)},names:["Equidistant_Conic","eqdc"]};const Rr={init:function(){this.R=this.a},forward:function(t){var e,r,n=t.x,i=t.y,o=xt(n-this.long0);Math.abs(i)<=Y&&(e=this.x0+this.R*o,r=this.y0);var s=Ar(2*Math.abs(i/Math.PI));(Math.abs(o)<=Y||Math.abs(Math.abs(i)-V)<=Y)&&(e=this.x0,r=i>=0?this.y0+Math.PI*this.R*Math.tan(.5*s):this.y0+Math.PI*this.R*-Math.tan(.5*s));var a=.5*Math.abs(Math.PI/o-o/Math.PI),l=a*a,u=Math.sin(s),c=Math.cos(s),h=c/(u+c-1),p=h*h,d=h*(2/u-1),g=d*d,f=Math.PI*this.R*(a*(h-g)+Math.sqrt(l*(h-g)*(h-g)-(g+l)*(p-g)))/(g+l);o<0&&(f=-f),e=this.x0+f;var m=l+h;return f=Math.PI*this.R*(d*m-a*Math.sqrt((g+l)*(l+1)-m*m))/(g+l),r=i>=0?this.y0+f:this.y0-f,t.x=e,t.y=r,t},inverse:function(t){var e,r,n,i,o,s,a,l,u,c,h,p;return t.x-=this.x0,t.y-=this.y0,h=Math.PI*this.R,o=(n=t.x/h)*n+(i=t.y/h)*i,h=3*(i*i/(l=-2*(s=-Math.abs(i)*(1+o))+1+2*i*i+o*o)+(2*(a=s-2*i*i+n*n)*a*a/l/l/l-9*s*a/l/l)/27)/(u=(s-a*a/3/l)/l)/(c=2*Math.sqrt(-u/3)),Math.abs(h)>1&&(h=h>=0?1:-1),p=Math.acos(h)/3,r=t.y>=0?(-c*Math.cos(p+Math.PI/3)-a/3/l)*Math.PI:-(-c*Math.cos(p+Math.PI/3)-a/3/l)*Math.PI,e=Math.abs(n)2*V*this.a)return;return r=e/this.a,n=Math.sin(r),i=Math.cos(r),o=this.long0,Math.abs(e)<=Y?s=this.lat0:(s=Ar(i*this.sin_p12+t.y*n*this.cos_p12/e),a=Math.abs(this.lat0)-V,o=Math.abs(a)<=Y?this.lat0>=0?xt(this.long0+Math.atan2(t.x,-t.y)):xt(this.long0-Math.atan2(-t.x,t.y)):xt(this.long0+Math.atan2(t.x*n,e*this.cos_p12*i-t.y*this.sin_p12*n))),t.x=o,t.y=s,t}return l=rr(this.es),u=nr(this.es),c=ir(this.es),h=or(this.es),Math.abs(this.sin_p12-1)<=Y?(s=lr(((p=this.a*er(l,u,c,h,V))-(e=Math.sqrt(t.x*t.x+t.y*t.y)))/this.a,l,u,c,h),o=xt(this.long0+Math.atan2(t.x,-1*t.y)),t.x=o,t.y=s,t):Math.abs(this.sin_p12+1)<=Y?(p=this.a*er(l,u,c,h,V),s=lr(((e=Math.sqrt(t.x*t.x+t.y*t.y))-p)/this.a,l,u,c,h),o=xt(this.long0+Math.atan2(t.x,t.y)),t.x=o,t.y=s,t):(e=Math.sqrt(t.x*t.x+t.y*t.y),f=Math.atan2(t.x,t.y),d=sr(this.a,this.e,this.sin_p12),m=Math.cos(f),A=-(y=this.e*this.cos_p12*m)*y/(1-this.es),I=3*this.es*(1-A)*this.sin_p12*this.cos_p12*m/(1-this.es),_=1-A*(v=(C=e/d)-A*(1+A)*Math.pow(C,3)/6-I*(1+3*A)*Math.pow(C,4)/24)*v/2-C*v*v*v/6,g=Math.asin(this.sin_p12*Math.cos(v)+this.cos_p12*Math.sin(v)*m),o=xt(this.long0+Math.asin(Math.sin(f)*Math.sin(v)/Math.cos(g))),b=Math.sin(g),s=Math.atan2((b-this.es*_*this.sin_p12)*Math.tan(g),b*(1-this.es)),t.x=o,t.y=s,t)},names:["Azimuthal_Equidistant","aeqd"]};const Pr={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)},forward:function(t){var e,r,n,i,o,s,a,l=t.x,u=t.y;return n=xt(l-this.long0),e=Math.sin(u),r=Math.cos(u),i=Math.cos(n),((o=this.sin_p14*e+this.cos_p14*r*i)>0||Math.abs(o)<=Y)&&(s=1*this.a*r*Math.sin(n),a=this.y0+1*this.a*(this.cos_p14*e-this.sin_p14*r*i)),t.x=s,t.y=a,t},inverse:function(t){var e,r,n,i,o,s,a;return t.x-=this.x0,t.y-=this.y0,r=Ar((e=Math.sqrt(t.x*t.x+t.y*t.y))/this.a),n=Math.sin(r),i=Math.cos(r),s=this.long0,Math.abs(e)<=Y?(a=this.lat0,t.x=s,t.y=a,t):(a=Ar(i*this.sin_p14+t.y*n*this.cos_p14/e),o=Math.abs(this.lat0)-V,Math.abs(o)<=Y?(s=this.lat0>=0?xt(this.long0+Math.atan2(t.x,-t.y)):xt(this.long0-Math.atan2(-t.x,t.y)),t.x=s,t.y=a,t):(s=xt(this.long0+Math.atan2(t.x*n,e*this.cos_p14*i-t.y*this.sin_p14*n)),t.x=s,t.y=a,t))},names:["ortho"]};var Gr=1,Nr=2,Or=3,kr=4,Lr=5,Dr=6,jr=1,Ur=2,zr=3,qr=4;function Fr(t,e,r,n){var i;return tK&&i<=V+K?(n.value=Ur,i-=V):i>V+K||i<=-(V+K)?(n.value=zr,i=i>=0?i-Q:i+Q):(n.value=qr,i+=V)),i}function Br(t,e){var r=t+e;return r<-3.14159265359?r+=J:r>3.14159265359&&(r-=J),r}const Wr={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=V-K/2?this.face=Lr:this.lat0<=-(V-K/2)?this.face=Dr:Math.abs(this.long0)<=K?this.face=Gr:Math.abs(this.long0)<=V+K?this.face=this.long0>0?Nr:kr:this.face=Or,0!==this.es&&(this.one_minus_f=1-(this.a-this.b)/this.a,this.one_minus_f_squared=this.one_minus_f*this.one_minus_f)},forward:function(t){var e,r,n,i,o,s,a={x:0,y:0},l={value:0};if(t.x-=this.long0,e=0!==this.es?Math.atan(this.one_minus_f_squared*Math.tan(t.y)):t.y,r=t.x,this.face===Lr)i=V-e,r>=K&&r<=V+K?(l.value=jr,n=r-V):r>V+K||r<=-(V+K)?(l.value=Ur,n=r>0?r-Q:r+Q):r>-(V+K)&&r<=-K?(l.value=zr,n=r+V):(l.value=qr,n=r);else if(this.face===Dr)i=V+e,r>=K&&r<=V+K?(l.value=jr,n=-r+V):r=-K?(l.value=Ur,n=-r):r<-K&&r>=-(V+K)?(l.value=zr,n=-r-V):(l.value=qr,n=r>0?-r+Q:-r-Q);else{var u,c,h,p,d,g;this.face===Nr?r=Br(r,+V):this.face===Or?r=Br(r,3.14159265359):this.face===kr&&(r=Br(r,-V)),p=Math.sin(e),d=Math.cos(e),g=Math.sin(r),u=d*Math.cos(r),c=d*g,h=p,this.face===Gr?n=Fr(i=Math.acos(u),h,c,l):this.face===Nr?n=Fr(i=Math.acos(c),h,-u,l):this.face===Or?n=Fr(i=Math.acos(-u),h,-c,l):this.face===kr?n=Fr(i=Math.acos(-c),h,u,l):(i=n=0,l.value=jr)}return s=Math.atan(3.8197186342052367*(n+Math.acos(Math.sin(n)*Math.cos(K))-V)),o=Math.sqrt((1-Math.cos(i))/(Math.cos(s)*Math.cos(s))/(1-Math.cos(Math.atan(1/Math.cos(n))))),l.value===Ur?s+=V:l.value===zr?s+=Q:l.value===qr&&(s+=4.7123889803850005),a.x=o*Math.cos(s),a.y=o*Math.sin(s),a.x=a.x*this.a+this.x0,a.y=a.y*this.a+this.y0,t.x=a.x,t.y=a.y,t},inverse:function(t){var e,r,n,i,o,s,a,l,u,c,h,p,d={lam:0,phi:0},g={value:0};if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,r=Math.atan(Math.sqrt(t.x*t.x+t.y*t.y)),e=Math.atan2(t.y,t.x),t.x>=0&&t.x>=Math.abs(t.y)?g.value=jr:t.y>=0&&t.y>=Math.abs(t.x)?(g.value=Ur,e-=V):t.x<0&&-t.x>=Math.abs(t.y)?(g.value=zr,e=e<0?e+Q:e-Q):(g.value=qr,e+=V),u=.26179938779916667*Math.tan(e),o=Math.sin(u)/(Math.cos(u)-1/Math.sqrt(2)),s=Math.atan(o),(a=1-(n=Math.cos(e))*n*(i=Math.tan(r))*i*(1-Math.cos(Math.atan(1/Math.cos(s)))))<-1?a=-1:a>1&&(a=1),this.face===Lr)l=Math.acos(a),d.phi=V-l,g.value===jr?d.lam=s+V:g.value===Ur?d.lam=s<0?s+Q:s-Q:g.value===zr?d.lam=s-V:d.lam=s;else if(this.face===Dr)l=Math.acos(a),d.phi=l-V,g.value===jr?d.lam=-s+V:g.value===Ur?d.lam=-s:g.value===zr?d.lam=-s-V:d.lam=s<0?-s-Q:-s+Q;else{var f,m,y;u=(f=a)*f,m=(u+=(y=u>=1?0:Math.sqrt(1-u)*Math.sin(s))*y)>=1?0:Math.sqrt(1-u),g.value===Ur?(u=m,m=-y,y=u):g.value===zr?(m=-m,y=-y):g.value===qr&&(u=m,m=y,y=-u),this.face===Nr?(u=f,f=-m,m=u):this.face===Or?(f=-f,m=-m):this.face===kr&&(u=f,f=m,m=-u),d.phi=Math.acos(-y)-V,d.lam=Math.atan2(m,f),this.face===Nr?d.lam=Br(d.lam,-V):this.face===Or?d.lam=Br(d.lam,-3.14159265359):this.face===kr&&(d.lam=Br(d.lam,+V))}return 0!==this.es&&(c=d.phi<0?1:0,h=Math.tan(d.phi),p=this.b/Math.sqrt(h*h+this.one_minus_f_squared),d.phi=Math.atan(Math.sqrt(this.a*this.a-p*p)/(this.one_minus_f*p)),c&&(d.phi=-d.phi)),d.lam+=this.long0,t.x=d.lam,t.y=d.phi,t},names:["Quadrilateralized Spherical Cube","Quadrilateralized_Spherical_Cube","qsc"]};var Hr=[[1,22199e-21,-715515e-10,31103e-10],[.9986,-482243e-9,-24897e-9,-13309e-10],[.9954,-83103e-8,-448605e-10,-9.86701e-7],[.99,-.00135364,-59661e-9,36777e-10],[.9822,-.00167442,-449547e-11,-572411e-11],[.973,-.00214868,-903571e-10,1.8736e-8],[.96,-.00305085,-900761e-10,164917e-11],[.9427,-.00382792,-653386e-10,-26154e-10],[.9216,-.00467746,-10457e-8,481243e-11],[.8962,-.00536223,-323831e-10,-543432e-11],[.8679,-.00609363,-113898e-9,332484e-11],[.835,-.00698325,-640253e-10,9.34959e-7],[.7986,-.00755338,-500009e-10,9.35324e-7],[.7597,-.00798324,-35971e-9,-227626e-11],[.7186,-.00851367,-701149e-10,-86303e-10],[.6732,-.00986209,-199569e-9,191974e-10],[.6213,-.010418,883923e-10,624051e-11],[.5722,-.00906601,182e-6,624051e-11],[.5322,-.00677797,275608e-9,624051e-11]],Vr=[[-520417e-23,.0124,121431e-23,-845284e-16],[.062,.0124,-1.26793e-9,4.22642e-10],[.124,.0124,5.07171e-9,-1.60604e-9],[.186,.0123999,-1.90189e-8,6.00152e-9],[.248,.0124002,7.10039e-8,-2.24e-8],[.31,.0123992,-2.64997e-7,8.35986e-8],[.372,.0124029,9.88983e-7,-3.11994e-7],[.434,.0123893,-369093e-11,-4.35621e-7],[.4958,.0123198,-102252e-10,-3.45523e-7],[.5571,.0121916,-154081e-10,-5.82288e-7],[.6176,.0119938,-241424e-10,-5.25327e-7],[.6769,.011713,-320223e-10,-5.16405e-7],[.7346,.0113541,-397684e-10,-6.09052e-7],[.7903,.0109107,-489042e-10,-104739e-11],[.8435,.0103431,-64615e-9,-1.40374e-9],[.8936,.00969686,-64636e-9,-8547e-9],[.9394,.00840947,-192841e-9,-42106e-10],[.9761,.00616527,-256e-6,-42106e-10],[1,.00328947,-319159e-9,-42106e-10]],Yr=.8487,Xr=1.3523,Zr=11.459155902616464,Kr=1/Zr,Jr=18,Qr=function(t,e){return t[0]+e*(t[1]+e*(t[2]+e*t[3]))};const $r={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.long0=this.long0||0,this.es=0,this.title=this.title||"Robinson"},forward:function(t){var e=xt(t.x-this.long0),r=Math.abs(t.y),n=Math.floor(r*Zr);n<0?n=0:n>=Jr&&(n=17);var i={x:Qr(Hr[n],r=Z*(r-Kr*n))*e,y:Qr(Vr[n],r)};return t.y<0&&(i.y=-i.y),i.x=i.x*this.a*Yr+this.x0,i.y=i.y*this.a*Xr+this.y0,i},inverse:function(t){var e={x:(t.x-this.x0)/(this.a*Yr),y:Math.abs(t.y-this.y0)/(this.a*Xr)};if(e.y>=1)e.x/=Hr[18][0],e.y=t.y<0?-V:V;else{var r=Math.floor(e.y*Jr);for(r<0?r=0:r>=Jr&&(r=17);;)if(Vr[r][0]>e.y)--r;else{if(!(Vr[r+1][0]<=e.y))break;++r}var n=Vr[r],i=5*(e.y-n[0])/(Vr[r+1][0]-n[0]);i=function(t,e,r,n){for(var i=e;n;--n){var o=t(i);if(i-=o,Math.abs(o)1e10)throw new Error;if(this.radius_g=1+this.radius_g_1,this.C=this.radius_g*this.radius_g-1,0!==this.es){var t=1-this.es,e=1/t;this.radius_p=Math.sqrt(t),this.radius_p2=t,this.radius_p_inv2=e,this.shape="ellipse"}else this.radius_p=1,this.radius_p2=1,this.radius_p_inv2=1,this.shape="sphere";this.title||(this.title="Geostationary Satellite View")},forward:function(t){var e,r,n,i,o=t.x,s=t.y;if(o-=this.long0,"ellipse"===this.shape){s=Math.atan(this.radius_p2*Math.tan(s));var a=this.radius_p/ze(this.radius_p*Math.cos(s),Math.sin(s));if(r=a*Math.cos(o)*Math.cos(s),n=a*Math.sin(o)*Math.cos(s),i=a*Math.sin(s),(this.radius_g-r)*r-n*n-i*i*this.radius_p_inv2<0)return t.x=Number.NaN,t.y=Number.NaN,t;e=this.radius_g-r,this.flip_axis?(t.x=this.radius_g_1*Math.atan(n/ze(i,e)),t.y=this.radius_g_1*Math.atan(i/e)):(t.x=this.radius_g_1*Math.atan(n/e),t.y=this.radius_g_1*Math.atan(i/ze(n,e)))}else"sphere"===this.shape&&(e=Math.cos(s),r=Math.cos(o)*e,n=Math.sin(o)*e,i=Math.sin(s),e=this.radius_g-r,this.flip_axis?(t.x=this.radius_g_1*Math.atan(n/ze(i,e)),t.y=this.radius_g_1*Math.atan(i/e)):(t.x=this.radius_g_1*Math.atan(n/e),t.y=this.radius_g_1*Math.atan(i/ze(n,e))));return t.x=t.x*this.a,t.y=t.y*this.a,t},inverse:function(t){var e,r,n,i,o=-1,s=0,a=0;if(t.x=t.x/this.a,t.y=t.y/this.a,"ellipse"===this.shape){this.flip_axis?(a=Math.tan(t.y/this.radius_g_1),s=Math.tan(t.x/this.radius_g_1)*ze(1,a)):(s=Math.tan(t.x/this.radius_g_1),a=Math.tan(t.y/this.radius_g_1)*ze(1,s));var l=a/this.radius_p;if(e=s*s+l*l+o*o,(n=(r=2*this.radius_g*o)*r-4*e*this.C)<0)return t.x=Number.NaN,t.y=Number.NaN,t;i=(-r-Math.sqrt(n))/(2*e),o=this.radius_g+i*o,s*=i,a*=i,t.x=Math.atan2(s,o),t.y=Math.atan(a*Math.cos(t.x)/o),t.y=Math.atan(this.radius_p_inv2*Math.tan(t.y))}else if("sphere"===this.shape){if(this.flip_axis?(a=Math.tan(t.y/this.radius_g_1),s=Math.tan(t.x/this.radius_g_1)*Math.sqrt(1+a*a)):(s=Math.tan(t.x/this.radius_g_1),a=Math.tan(t.y/this.radius_g_1)*Math.sqrt(1+s*s)),e=s*s+a*a+o*o,(n=(r=2*this.radius_g*o)*r-4*e*this.C)<0)return t.x=Number.NaN,t.y=Number.NaN,t;i=(-r-Math.sqrt(n))/(2*e),o=this.radius_g+i*o,s*=i,a*=i,t.x=Math.atan2(s,o),t.y=Math.atan(a*Math.cos(t.x)/o)}return t.x=t.x+this.long0,t},names:["Geostationary Satellite View","Geostationary_Satellite","geos"]};var un=1.340264,cn=-.081106,hn=893e-6,pn=.003796,dn=Math.sqrt(3)/2;const gn={init:function(){this.es=0,this.long0=void 0!==this.long0?this.long0:0},forward:function(t){var e=xt(t.x-this.long0),r=t.y,n=Math.asin(dn*Math.sin(r)),i=n*n,o=i*i*i;return t.x=e*Math.cos(n)/(dn*(un+3*cn*i+o*(7*hn+.034164*i))),t.y=n*(un+cn*i+o*(hn+pn*i)),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a;var e,r,n,i,o=t.y;for(i=0;i<12&&(o-=n=(o*(un+cn*(e=o*o)+(r=e*e*e)*(hn+pn*e))-t.y)/(un+3*cn*e+r*(7*hn+.034164*e)),!(Math.abs(n)<1e-9));++i);return r=(e=o*o)*e*e,t.x=dn*t.x*(un+3*cn*e+r*(7*hn+.034164*e))/Math.cos(o),t.y=Math.asin(Math.sin(o)/dn),t.x=xt(t.x+this.long0),t},names:["eqearth","Equal Earth","Equal_Earth"]};var fn=1e-10;function mn(t){var e,r,n,i=xt(t.x-(this.long0||0)),o=t.y;return e=this.am1+this.m1-Le(o,r=Math.sin(o),n=Math.cos(o),this.en),r=n*i/(e*Math.sqrt(1-this.es*r*r)),t.x=e*Math.sin(r),t.y=this.am1-e*Math.cos(r),t.x=this.a*t.x+(this.x0||0),t.y=this.a*t.y+(this.y0||0),t}function yn(t){var e,r,n,i;if(t.x=(t.x-(this.x0||0))/this.a,t.y=(t.y-(this.y0||0))/this.a,r=ze(t.x,t.y=this.am1-t.y),i=De(this.am1+this.m1-r,this.es,this.en),(e=Math.abs(i))fn?(t.x=r*Math.sin(e=n*Math.cos(i)/r),t.y=this.cphi1-r*Math.cos(e)):t.x=t.y=0,t.x=this.a*t.x+(this.x0||0),t.y=this.a*t.y+(this.y0||0),t}function In(t){var e,r;t.x=(t.x-(this.x0||0))/this.a,t.y=(t.y-(this.y0||0))/this.a;var n=ze(t.x,t.y=this.cphi1-t.y);if(r=this.cphi1+this.phi1-n,Math.abs(r)>V)throw new Error;return e=Math.abs(Math.abs(r)-V)<=fn?0:n*Math.atan2(t.x,t.y)/Math.cos(r),t.x=xt(e+(this.long0||0)),t.y=ar(r),t}const Cn={init:function(){var t;if(this.phi1=this.lat1,Math.abs(this.phi1)=V?this.cphi1=0:this.cphi1=1/Math.tan(this.phi1),this.inverse=In,this.forward=An)},names:["bonne","Bonne (Werner lat_1=90)"]};var vn;pe.defaultDatum="WGS84",pe.Proj=Jt,pe.WGS84=new pe.Proj("WGS84"),pe.Point=Pe,pe.toPoint=se,pe.defs=Ct,pe.nadgrid=function(t,e){var r=new DataView(e),n=function(t){var e=t.getInt32(8,!1);if(11===e)return!1;e=t.getInt32(8,!0),11!==e&&console.warn("Failed to detect nadgrid endian-ness, defaulting to little-endian");return!0}(r),i=function(t,e){return{nFields:t.getInt32(8,e),nSubgridFields:t.getInt32(24,e),nSubgrids:t.getInt32(40,e),shiftType:Vt(t,56,64).trim(),fromSemiMajorAxis:t.getFloat64(120,e),fromSemiMinorAxis:t.getFloat64(136,e),toSemiMajorAxis:t.getFloat64(152,e),toSemiMinorAxis:t.getFloat64(168,e)}}(r,n),o=function(t,e,r){for(var n=176,i=[],o=0;o2?(document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("GPelementHidden","GPelementVisible"),document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("gpf-hidden","gpf-visible")):(document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden")),e.onAutoCompleteSearchText(t))})),n.addEventListener("keydown",(function(t){var r=t.which||t.keyCode;13===r&&t.preventDefault();var n=document.getElementById(e._addUID("GPautocompleteResults"));if(n){var i=n.getElementsByClassName("GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current"),o=n.getElementsByClassName("GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine"),s=o.length;if(s){var a=null;if(i.length)a=i[0];else if((a=o[0]).className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current",a.style.color="#000000",a.style["background-color"]="#CEDBEF",13!==r)return;var l=parseInt(j.index(a.id),10),u=l===s-1?o[0]:o[l+1],c=0===l?o[s-1]:o[l-1];switch(a.style["background-color"]="",a.style.color="",c.style["background-color"]="",c.style.color="",u.style["background-color"]="",u.style.color="",r){case 38:a.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine",c.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current",c.style.color="#000000",c.style["background-color"]="#CEDBEF",a.scrollIntoView();break;case 40:a.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine",u.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current",u.style.color="#000000",u.style["background-color"]="#CEDBEF",a.scrollIntoView();break;case 13:t.preventDefault(),a.click(t)}a.focus()}}})),r.appendChild(n),r},_createSearchResetElement:function(){var t=this,e=document.createElement("button");return e.id=this._addUID("GPsearchInputReset"),e.className="GPshowOpen GPsearchInputReset gpf-btn gpf-btn-icon-reset gpf-btn-icon-search-reset fr-btn fr-btn--secondary gpf-btn--secondary",e.setAttribute("aria-label","Supprimer la recherche"),e.addEventListener("click",(function(e){document.getElementById(t._addUID("GPsearchInputText")).value="",document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),t.onSearchResetClick()})),e},_createButtonsElement:function(){var t=document.createElement("div");return t.className="GPbuttonsContainer",t},_createFirstLineWrapper:function(){var t=document.createElement("div");return t.className="GPsearchFirstLineWrapper",t},_createRadioContainer:function(){var t=document.createElement("div");return t.className="GPsearchRadioContainer",t},_createRadioElements:function(){var t=document.createElement("div");t.className="GPsearchRadioElements";var e=document.createElement("div");e.className="GPsearchSplitChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w";var r=document.createElement("input");r.id=this._addUID("GPsearchSplitLocations"),r.type="radio",r.name="GPsearchSplit",r.value="address",r.checked=!0,e.appendChild(r);var n=document.createElement("label");n.className="gpf-label fr-label",n.htmlFor=this._addUID("GPsearchSplitLocations"),n.title="Adresses",n.innerHTML="Adresses",e.appendChild(n),r.addEventListener?r.addEventListener("change",(function(){r.checked?(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.add("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.remove("gpf-hidden","GPelementHidden")):(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.add("gpf-hidden","GPelementHidden"))})):r.attachEvent&&r.attachEvent("onchange",(function(){r.checked?(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.add("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.remove("gpf-hidden","GPelementHidden")):(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.add("gpf-hidden","GPelementHidden"))}));var i=document.createElement("div");i.className="GPsearchSplitChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w";var o=document.createElement("input");o.id=this._addUID("GPsearchSplitData"),o.type="radio",o.name="GPsearchSplit",o.value="data",i.appendChild(o);var s=document.createElement("label");return s.className="gpf-label fr-label",s.htmlFor=this._addUID("GPsearchSplitData"),s.title="Cartes et données",s.innerHTML="Cartes et données",i.appendChild(s),o.addEventListener?o.addEventListener("change",(function(){o.checked?(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.add("gpf-hidden","GPelementHidden")):(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.add("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.remove("gpf-hidden","GPelementHidden"))})):o.attachEvent&&o.attachEvent("onchange",(function(){o.checked?(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.remove("gpf-hidden","GPelementHidden")):(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.add("gpf-hidden","GPelementHidden"))})),t.appendChild(e),t.appendChild(i),[t,r,o]},_createShowAdvancedSearchElement:function(){var t=this,e=document.createElement("span");return e.id=this._addUID("GPshowAdvancedSearch"),e.className="GPshowOpen GPshowAdvancedSearch",e.innerText="Recherche avancée",e.setAttribute("tabindex","0"),e.setAttribute("aria-pressed",!1),e.addEventListener("click",(function(e){var n="true"===e.target.ariaPressed;e.target.setAttribute("aria-pressed",!n);var i="#GPsearchInput-"+t._uid;n?(document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("gpf-visible","gpf-hidden"),document.querySelector(i+" input").disabled=!1,document.querySelector(i+" .GPsearchInputReset")&&(document.querySelector(i+" .GPsearchInputReset").disabled=!1),r()&&(document.querySelector("#GPshowSearchEnginePicto-"+t._uid).disabled=!1)):(document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("GPelementHidden","GPelementVisible"),document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("gpf-hidden","gpf-visible"),document.querySelector(i+" input").disabled=!0,document.querySelector(i+" .GPsearchInputReset")&&(document.querySelector(i+" .GPsearchInputReset").disabled=!0),r()&&(document.querySelector("#GPshowSearchEnginePicto-"+t._uid).disabled=!0)),document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(t._addUID("GPcoordinateSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPcoordinateSearchPanel")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(t._addUID("GPshowSearchByCoordinate")).setAttribute("aria-pressed",!1)})),e},_createShowGeolocateElement:function(){var t=this,e=document.createElement("button");return e.id=this._addUID("GPshowGeolocate"),e.className="GPshowOpen GPshowAdvancedToolPicto GPshowGeolocate gpf-btn gpf-btn-icon-search-geolocate fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w",e.title="Activer la géolocalisation",e.setAttribute("tabindex","0"),e.setAttribute("aria-pressed",!1),e.addEventListener("click",(function(e){var r="true"===e.target.ariaPressed;e.target.setAttribute("aria-pressed",!r),t.onShowSearchGeolocateClick(e)})),e},_createShowSearchByCoordinateElement:function(){var t=this,e=document.createElement("button");return e.id=this._addUID("GPshowSearchByCoordinate"),e.className="GPshowOpen GPshowAdvancedToolPicto GPshowSearchByCoordinate gpf-btn gpf-btn-icon-search-coordinate fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w",e.title="Ouvrir la recherche par coordonnées",e.setAttribute("tabindex","0"),e.setAttribute("aria-pressed",!1),e.addEventListener("click",(function(e){var n="true"===e.target.ariaPressed;e.target.setAttribute("aria-pressed",!n);var i="#GPsearchInput-"+t._uid;n?(document.getElementById(t._addUID("GPcoordinateSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPcoordinateSearchPanel")).classList.replace("gpf-visible","gpf-hidden"),document.querySelector(i+" input").disabled=!1,document.querySelector(i+" .GPsearchInputReset").disabled=!1,r()&&(document.querySelector("#GPshowSearchEnginePicto-"+t._uid).disabled=!1)):(document.getElementById(t._addUID("GPcoordinateSearchPanel")).classList.replace("GPelementHidden","GPelementVisible"),document.getElementById(t._addUID("GPcoordinateSearchPanel")).classList.replace("gpf-hidden","gpf-visible"),document.querySelector(i+" input").disabled=!0,document.querySelector(i+" .GPsearchInputReset").disabled=!0,r()&&(document.querySelector("#GPshowSearchEnginePicto-"+t._uid).disabled=!0)),document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(t._addUID("GPshowAdvancedSearch")).setAttribute("aria-pressed",!1)})),e},_createAdvancedSearchPanelElement:function(){var t=document.createElement("dialog");return t.id=this._addUID("GPadvancedSearchPanel"),t.className="GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal",t},_createAdvancedSearchPanelDivElement:function(){var t=document.createElement("div");return t.className="gpf-panel__body fr-modal__body",t},_createGeocodeResultsElement:function(){var t=document.createElement("dialog");return t.id=this._addUID("GPgeocodeResultsList"),t.className="GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal",t.appendChild(this._createGeocodeResultsHeaderElement()),t},_createGeocodeResultsDivElement:function(){var t=document.createElement("div");return t.className="gpf-panel__body fr-modal__body",t},_createAutoCompleteElement:function(){var t=document.createElement("div");return t.id=this._addUID("GPautoCompleteList"),t.className="GPautoCompleteList GPelementHidden gpf-panel fr-modal gpf-hidden ",t},_createCoordinateSearchPanelElement:function(){var t=document.createElement("dialog");return t.id=this._addUID("GPcoordinateSearchPanel"),t.className="GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal",t},_createCoordinateSearchPanelDivElement:function(){var t=document.createElement("div");return t.className="gpf-panel__body fr-modal__body",t},_createAutoCompleteListElement:function(){var t=this,e=document.createElement("div");return e.id=this._addUID("GPautocompleteResults"),e.className="",e.addEventListener?e.addEventListener("click",(function(e){document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden")}),!1):e.attachEvent&&e.attachEvent("onclick",(function(e){document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden")})),e},_createAutoCompletedLocationContainer:function(){var t=document.createElement("select");return t.id=this._addUID("GPautocompleteResultsLocation"),t.className="GPelementHidden gpf-hidden gpf-select",t.size=20,t.autofocus=!0,t},_createAutoCompletedLocationTitleElement:function(){var t=document.getElementById(this._addUID("GPautocompleteResultsLocation")),e=document.createElement("option");e.className="GPlabel GPlabelTitle gpf-label fr-label",e.innerHTML="Lieux et adresses",t.appendChild(e)},_createAutoCompletedLocationElement:function(t,e){var r=this,n=document.getElementById(this._addUID("GPautocompleteResultsLocation")),i=document.createElement("option");i.id=this._addUID("AutoCompletedLocation_"+e),i.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine";var o=F.getSuggestedLocationFreeform(t);i.innerHTML=o,i.title=o,i.addEventListener?i.addEventListener("click",(function(t){r.onAutoCompletedResultsItemClick(t)}),!1):i.attachEvent&&i.attachEvent("onclick",(function(t){r.onAutoCompletedResultsItemClick(t)})),n.appendChild(i)},_createSearchedSuggestContainer:function(){var t=document.createElement("select");return t.id=this._addUID("GPautocompleteResultsSuggest"),t.className="GPelementHidden gpf-hidden gpf-select",t.size=6,t.autofocus=!0,t},_createSearchedSuggestTitleElement:function(){var t=document.getElementById(this._addUID("GPautocompleteResultsSuggest")),e=document.createElement("option");e.className="GPlabel GPlabelTitle gpf-label fr-label",e.innerHTML="Cartes et données",t.appendChild(e)},_createSearchedSuggestElement:function(t,e){var r=this,n=document.getElementById(this._addUID("GPautocompleteResultsSuggest")),i=document.createElement("option");i.id=this._addUID("AutoCompletedSuggest_"+e),i.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine",i.innerHTML=t.title+" ("+t.service+")",i.dataset.layer=t.name,i.title="".concat(t.description," (nom technique : ").concat(t.name,")"),i.addEventListener?i.addEventListener("click",(function(t){r.onSearchedResultsItemClick(t)}),!1):i.attachEvent&&i.attachEvent("onclick",(function(t){r.onSearchedResultsItemClick(t)})),n.appendChild(i)},_createAdvancedSearchPanelHeaderElement:function(){var t=this,e=document.createElement("div");e.className="GPpanelHeader gpf-panel__header fr-modal__header";var n=document.createElement("div");n.className="GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w",n.innerHTML="Recherche avancée",e.appendChild(n);var i=document.createElement("button");i.id=this._addUID("GPadvancedSearchClose"),i.className="GPpanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w",i.title="Fermer la recherche avancée",i.addEventListener?i.addEventListener("click",(function(){var e="#GPsearchInput-"+t._uid;document.querySelector(e+" input").disabled=!1,document.querySelector(e+" .GPsearchInputReset")&&(document.querySelector(e+" .GPsearchInputReset").disabled=!1),r()&&(document.querySelector("#GPshowSearchEnginePicto-"+t._uid).disabled=!1),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(t._addUID("GPshowAdvancedSearch")).setAttribute("aria-pressed",!1),document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("gpf-visible","gpf-hidden")}),!1):i.attachEvent&&i.attachEvent("onclick",(function(){var e="#GPsearchInput-"+t._uid;document.querySelector(e+" input").disabled=!1,document.querySelector(e+" .GPsearchInputReset")&&(document.querySelector(e+" .GPsearchInputReset").disabled=!1),r()&&(document.querySelector("#GPshowSearchEnginePicto-"+t._uid).disabled=!1),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(t._addUID("GPshowAdvancedSearch")).setAttribute("aria-pressed",!1),document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("gpf-visible","gpf-hidden")}));var o=document.createElement("span");return o.className="GPelementHidden gpf-visible",o.innerText="Fermer",i.appendChild(o),e.appendChild(i),e},_createAdvancedSearchPanelFormElement:function(t){var e=this,r=document.createElement("form");r.id=this._addUID("GPadvancedSearchForm"),r.className="gpf-panel__content fr-modal__content",r.addEventListener("submit",(function(t){t.preventDefault();for(var r=[],n="#GPadvancedSearchFilters-"+e._uid,i=document.querySelectorAll(n+" > div > div > input,select#category"),o=0;o\n \n \n \n \n \n \n \n \n \n \n \n ',t},_setCoordinateSearchLatLabelElement:function(t){document.getElementById(this._addUID("GPcoordinateSearchLatLabel"))&&document.getElementById(this._addUID("GPcoordinateSearchLatLabel")).remove();var e=document.createElement("label");return e.className="GPcoordinateSearchLabel gpf-label fr-label",e.id=this._addUID("GPcoordinateSearchLatLabel"),e.htmlFor="coordinate-lat",e.innerHTML="Geographical"===t?"Latitude :":"X :",e},_setCoordinateSearchLatInputElement:function(t){document.getElementById(this._addUID("GPcoordinateSearchLatInput"))&&document.getElementById(this._addUID("GPcoordinateSearchLatInput")).remove(),document.getElementById(this._addUID("GPcoordinateSearchLatDMS"))&&document.getElementById(this._addUID("GPcoordinateSearchLatDMS")).remove();var e=document.createElement("input");switch(e.id=this._addUID("GPcoordinateSearchLatInput"),e.className="GPcoordinateSearchInput gpf-input fr-input",e.title="Saisir des coordonnées",e.name="coordinate-lat",e.type="number",e.step="any",e.required="",t){case"DMS":return e.title+=" géographiques (en sexa)",e.className="GPelementHidden gpf-hidden",this._setCoordinateSearchLatDMSElement();case"DEC":e.title+=" géographiques (en decimal)",e.min="-180",e.max="180";break;case"M":e.title+=" cartésiennes (en mètre)";break;case"KM":e.title+=" cartésiennes (en kilomètre)"}return e},_setCoordinateSearchLatDMSElement:function(){var t=document.createElement("div");return t.id=this._addUID("GPcoordinateSearchLatDMS"),t.innerHTML='\n
    \n \n \n \n \n \n \n \n \n \n \n
    \n ',t},_createCoordinateSearchSubmitElement:function(){var t=document.createElement("input");return t.type="submit",t.id=this._addUID("GPcoordinateSearchSubmit"),t.className="GPsubmit gpf-btn gpf-btn-icon-submit fr-btn fr-btn--secondary gpf-btn--secondary",t.value="Chercher",t}};function jn(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,o,s,a=[],l=!0,u=!1;try{if(o=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=o.call(r)).done)&&(a.push(n.value),a.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(s=r.return(),Object(s)!==s))return}finally{if(u)throw i}}return a}}(t,e)||function(t,e){if(t){if("string"==typeof t)return Un(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Un(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Un(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);rs&&(Xn.trace("zoom level max..."),n=s),Xn.trace("zoom",n),n}},{key:"_onResultMarkerSelect",value:function(t){var e=this.getMap(),r="";if("string"!=typeof t)if("GeocodedLocation"===t.service){r="
      ";var n=t.location.placeAttributes;for(var i in n)n.hasOwnProperty(i)&&"trueGeometry"!==i&&"extraFields"!==i&&"houseNumberInfos"!==i&&"_count"!==i&&(r+="
    • ",r+=''+i.toUpperCase()+" : ",r+=n[i],r+="
    • ");r+="
    "}else r="SuggestedLocation"===t.service?F.getSuggestedLocationFreeform(t.location):"sans informations.";else r=t;this._popupContent.innerHTML=r,this._popupOverlay?this._popupOverlay.setPosition(this._marker.getPosition()):(this._popupOverlay=new(x())({element:this._popupDiv,positioning:"bottom-center",position:this._marker.getPosition(),offset:[0,-42]}),e.addOverlay(this._popupOverlay))}},{key:"_setSystem",value:function(t){if("object"===zn(t))if(t.crs)if(t.label||(Xn.warn("crs label not defined, use crs code by default."),t.label=t.crs),t.type||(Xn.warn("type srs not defined, use 'Metric' by default."),t.type="Metric"),Gn.loadByName(t.crs),(0,M.get)(t.crs)){for(var e=0;e latitude : "+i[1];t._setMarker(r,o)}t.dispatchEvent({type:"searchengine:geolocation:click",coordinates:r})}}))}},{key:"onShowSearchByCoordinateClick",value:function(){var t=null,e=null;if(this._coordinateSearchLngInput&&"DIV"===this._coordinateSearchLngInput.nodeName&&this._coordinateSearchLatInput&&"DIV"===this._coordinateSearchLatInput.nodeName?(t=this._getCoordinateSearchDMS(this._coordinateSearchLngInput),e=this._getCoordinateSearchDMS(this._coordinateSearchLatInput)):(t=this._coordinateSearchLngInput.value,e=this._coordinateSearchLatInput.value),t&&e){var r=[t,e],n=this.getMap().getView().getProjection().getCode();"EPSG:4326"!==n&&(r=(0,M.transform)(r,"EPSG:4326",n)),isNaN(r[0])||isNaN(r[1])?this._setMarker():(this._setPosition(r,10),this._displayMarker&&this._setMarker(r,"sans information"),this.dispatchEvent({type:"searchengine:coordinates:click",coordinates:r}))}}},{key:"_getCoordinateSearchDMS",value:function(t){if(t&&"DIV"===t.nodeName){var e=t.querySelectorAll("[name]");if(e){var r=z.toInteger(e[0].value),n=z.toInteger(e[1].value),i=z.toInteger(e[2].value),o=e[3].options[e[3].selectedIndex].text;if(!(r&&n&&i&&o))return;return z.dmsToDecimal(r,n,i,o)}}}},{key:"onAutoCompleteInputClick",value:function(){var t=document.getElementById("GPsearchInputText-"+this._uid);t&&!t.disabled&&t.value.length>2&&this._displaySuggestedLocation()}},{key:"onAutoCompleteSearchText",value:function(t){var e=t.target.value;if(e)if(this._currentGeocodingLocation=e,e.length<3)this._clearSuggestedLocation();else{var r=this.options.autocompleteOptions.triggerGeocode,n=this.options.autocompleteOptions.triggerDelay,i=this.options.autocompleteOptions.maximumEntries,o=this.options.autocompleteOptions.prettifyResults,s=this;this._requestAutoComplete({text:e,onSuccess:function(t){if(Xn.log("request from AutoComplete",t),t){s._suggestedLocations=t.suggestedLocations,s._locationsToBeDisplayed=[];for(var e=0;e=0;e--){var r=t[e];("StreetAddress"===r.type&&"municipality"===r.kind||"PositionOfInterest"===r.type&&"lieu-dit habité"===r.poiType[0]&&"zone d'habitation"===r.poiType[1])&&t.splice(e,1),"PositionOfInterest"!==r.type||"administratif"!==r.poiType[0]||"département"!==r.poiType[1]&&"région"!==r.poiType[1]||(r.fullText=r.fullText+", "+r.poiType[1])}}},{key:"_hideSuggestedLocation",value:function(){this._autocompleteContainer&&(this._autocompleteContainer.classList.replace("GPelementVisible","GPelementHidden"),this._autocompleteContainer.classList.replace("gpf-visible","gpf-hidden"))}},{key:"_displaySuggestedLocation",value:function(){this._autocompleteContainer&&(this._autocompleteContainer.classList.replace("GPelementHidden","GPelementVisible"),this._autocompleteContainer.classList.replace("gpf-hidden","gpf-visible"))}},{key:"_clearGeocodedLocation",value:function(){if(this._geocodedLocations=[],this._geocodedContainer)for(;this._geocodedContainer.firstChild;)this._geocodedContainer.removeChild(this._geocodedContainer.firstChild)}}],i&&qn(n.prototype,i),o&&qn(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,i,o}(g);Object.assign(Zn.prototype,Dn),Object.assign(Zn.prototype,S);const Kn=Zn;window.ol&&window.ol.control&&(window.ol.control.SearchEngine=Zn)})(),GpfExtOlSearchEngine=__webpack_exports__.default})(); +t.exports=function(){"use strict";function t(t){var e=typeof t;return null!==t&&("object"===e||"function"===e)}function e(t){return"function"==typeof t}var n=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},i=0,o=void 0,s=void 0,a=function(t,e){C[i]=t,C[i+1]=e,2===(i+=2)&&(s?s(v):b())};function l(t){s=t}function u(t){a=t}var c="undefined"!=typeof window?window:void 0,h=c||{},p=h.MutationObserver||h.WebKitMutationObserver,d="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),g="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function f(){return function(){return process.nextTick(v)}}function m(){return void 0!==o?function(){o(v)}:I()}function y(){var t=0,e=new p(v),r=document.createTextNode("");return e.observe(r,{characterData:!0}),function(){r.data=t=++t%2}}function A(){var t=new MessageChannel;return t.port1.onmessage=v,function(){return t.port2.postMessage(0)}}function I(){var t=setTimeout;return function(){return t(v,1)}}var C=new Array(1e3);function v(){for(var t=0;t{"use strict";function n(t){if(!(this instanceof n))throw new TypeError("ErrorService constructor cannot be called as a function.");var e=t;"string"==typeof t||t instanceof String?(this.message=t,this.status=-1,this.type=n.TYPE_UNKERR):(this.message=e.message||"undefined!?",this.type=e.type,this.status=e.status||-1),this.name="ErrorService",this.stack=(new Error).stack}r.d(e,{A:()=>i}),n.TYPE_SRVERR="SERVICE_ERROR",n.TYPE_USEERR="USAGE_ERROR",n.TYPE_UNKERR="UNKNOWN_ERROR",n.prototype=Object.create(Error.prototype,{constructor:{value:n,writable:!0,configurable:!0}});const i=n},4841:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(2710);function i(t){if(this.logger=n.A.getLogger(),this.logger.trace("[Constructeur WPS()]"),!(this instanceof i))throw new TypeError("WPS constructor cannot be called as a function.");if(this.options=t||{},this.DataObject=this.options.data,!this.DataObject)throw new TypeError("This data object is not defined !");this.paramservice=this.options.param.service||"WPS",this.paramversion=this.options.param.version||"1.0.0",this.paramidentifier=this.options.param.identifier||"gs:WPS",this.paramrawdataoutput=this.options.param.rawdataoutput||"result",this.paramrequest=this.options.param.request||"Execute",this.method=this.options.method||"GET"}i.prototype={requestString:null,constructor:i,template:{get:{value:"service=__SERVICE__&version=__VERSION__&rawdataoutput=__RAWDATAOUTPUT__&identifier=__IDENTIFIER__&request=__REQUEST__&datainputs=\x3c!-- __DATAINPUTS__ --\x3e",input:"__KEY__=__DATA__"},post:{value:'__IDENTIFIER__\x3c!-- __DATAINPUTS__ --\x3e__RAWDATAOUTPUT__',input:"__KEY____DATA__"}},namespaceByDefault:function(){return['xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"','xmlns="http://www.opengis.net/wps/1.0.0"','xmlns:wfs="http://www.opengis.net/wfs"','xmlns:wps="http://www.opengis.net/wps/1.0.0"','xmlns:ows="http://www.opengis.net/ows/1.1"','xmlns:gml="http://www.opengis.net/gml"','xmlns:ogc="http://www.opengis.net/ogc"','xmlns:wcs="http://www.opengis.net/wcs/1.1.1"','xmlns:xlink="http://www.w3.org/1999/xlink"'].join(" ")},schemaLocationByDefault:function(){return'xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd"'},processRequestString:function(){this.logger.trace("WPS::processRequestString ()");var t="";if("POST"===this.method)t=this.template.post.value;else{if("GET"!==this.method)return this.logger.error("No other method supported by the service !"),!1;t=this.template.get.value}return t=(t=(t=(t=(t=t.replace(/__SERVICE__/g,this.paramservice)).replace(/__VERSION__/g,this.paramversion)).replace(/__RAWDATAOUTPUT__/g,this.paramrawdataoutput)).replace(/__IDENTIFIER__/g,this.paramidentifier)).replace(/__REQUEST__/g,this.paramrequest),"POST"===this.method&&(t=(t=t.replace(/__NAMESPACE__/g,this.namespaceByDefault)).replace(/__SCHEMALOCATION__/g,this.schemaLocationByDefault)),(t=t.replace(//g,this.__addDataInputs()))?(this.requestString=t,this.logger.trace("traduction tmpl",t),!0):(this.logger.warn("traduction tmpl : empty request !?"),!1)},__addDataInputs:function(){this.logger.trace("WPS::__addDataInputs ()");for(var t,e="GET"===this.method?this.template.get.input:this.template.post.input,r="GET"===this.method?";":"",n="",i=this,o=this.DataObject.getData(),s=0;s{"use strict";r.d(e,{A:()=>a});var n=r(2710);function i(t){if(!(this instanceof i))throw new TypeError("XML constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur XML ()]"),this.xmlString=null,this.xmlDoc=null,this.reader=null,t&&(t.xmlString&&"string"==typeof t.xmlString&&(this.xmlString=t.xmlString,this.xmlDoc=o(t.xmlString)),t.reader&&this.setReader(t.reader))}function o(t){if("undefined"==typeof window)return(new(0,r(8978).S4)).parseFromString(t,"text/xml");var e,n,i="Erreur lors du parsing de la réponse du service : XML non conforme";if(window.ActiveXObject){(n=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,n.loadXML(t);var o=n.parseError;if(o.errorCode)throw o.line&&o.linepos&&(i+="( ligne "+o.line+", colonne "+o.linepos),o.reason&&(i+=": "+o.reason+")"),new Error(i);return n}if(window.DOMParser){e=new window.DOMParser;try{n=e.parseFromString(t,"text/xml")}catch(t){throw"SyntaxError"===t.message?new Error(i):new Error("Erreur lors du parsing de la réponse du service : "+t.message)}if(n.getElementsByTagName("parsererror").length>0)for(var s=n.getElementsByTagName("parsererror"),a=0;a0){var r=function(t){if(t.attributes.length>0){for(var e={},r=t.attributes,n=0;n{"use strict";r.d(e,{Ay:()=>C});var n=r(3255),i=r(7966),o=r(3565),s=r(3041),a=r(5941),l=r(9924),u=r(1489),c=r(2993),h=r(7868),p=r(4154),d=r(210),g=r(8288),f=r(3474),m=r(9032);const y=m.rE,A=m.p6;var I={};I.servicesVersion=y,I.servicesDate=A,I.Protocols={},I.Protocols.XHR=d.A,I.Services=n.A,I.Services.DefaultUrl=i.A,I.Services.AltiResponse=o.A,I.Services.Alti={},I.Services.Alti.Elevation=s.A,I.Services.AutoCompleteResponse=a.A,I.Services.AutoComplete={},I.Services.AutoComplete.SuggestedLocation=l.A,I.Services.Config=p.A,I.Services.IsoCurveResponse=u.A,I.Services.RouteResponse=c.A,I.Services.Route={},I.Services.Route.RouteInstruction=h.A,I.Error=g.A,I.Helper=f.A;const C=I},3494:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n,i=r(2710);const o={uuid:(n=Math.floor(Date.now()),function(){return n++}),call:function(t){var e=i.A.getLogger("JSONP");if(e.trace("[JSONP::call ()]"),!t)throw e.error("missing parameter : options !"),new Error("missing parameter : options !");if(!t.url)throw e.error("missing parameter : options.url !"),new Error("missing parameter : options.url !");if(t.timeOut||(e.info("setting 'options.timeOut' default value"),t.timeOut=0),!t.onResponse)throw e.error("missing parameter : options.onResponse !"),new Error("missing parameter : options.onResponse !");var r="string"==typeof t.callbackSuffix?t.callbackSuffix:this.uuid(),n=!1,o=!1,s=t.url.indexOf("callback=");if(-1!==s){n=!0;var a=t.url.indexOf("&",s);-1===a&&(a=t.url.length);var l=t.url.substring(s+9,a);l&&(o=!0,t.callbackName=l,e.info("setting 'options.callbackName' value ("+t.callbackName+") from 'options.url' parameter"))}if(!n){var u=t.url.indexOf("?");-1===u?t.url=t.url+"?callback=":u===t.url.length?t.url=t.url+"callback=":t.url=t.url+"&callback=",e.info("setting callback default key in 'options.url' : "+t.url)}var c=!!t.callbackName||o;if(o||(t.callbackName||(e.info("setting 'options.callbackName' default value"),t.callbackName="callback",(r||""===r)&&(t.callbackName+=r)),t.url=t.url.replace("callback=","callback="+t.callbackName),e.info("setting callback function name in 'options.url' : "+t.url)),t.onTimeOut||(e.info("setting 'options.onTimeOut' default value"),t.onTimeOut=function(){console.log("TimeOut while invoking url : "+t.url)}),!c){var h=this,p=null;t.timeOut>0&&(p=window.setTimeout((function(){window[t.callbackName]=function(){},t.onTimeOut(),h._deleteScript(r)}),t.timeOut)),window[t.callbackName]=function(e){window.clearTimeout(p),t.onResponse(e),h._deleteScript(r)}}this._createScript(r,t.url)},_createScript:function(t,e){var r,n=document.getElementById("results"+t);(r=document.createElement("script")).setAttribute("type","text/javascript"),r.setAttribute("src",e),r.setAttribute("charset","UTF-8"),r.setAttribute("id","results"+t),r.setAttribute("async","true");var i=document.documentElement||document.getElementsByTagName("head")[0];null===n?i.appendChild(r):i.replaceChild(r,n)},_deleteScript:function(t){var e=document.getElementById("results"+t);if(e){var r=e.parentNode||document.documentElement;if(!r)return;r.removeChild(e)}}}},6250:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(3474),i=r(210),o=r(3494);const s={send:function(t){var e=t||{method:"GET",protocol:"XHR",timeOut:0,format:null,wrap:!0,nocache:!0,output:"json",callback:null,callbackSuffix:null};if("undefined"!=typeof window||"JSONP"!==t.protocol){if("XHR"===t.protocol||"json"===t.format?e.wrap=!1:"JSONP"===t.protocol&&"xml"===t.format&&(e.wrap=!0),e.callback=null,e.output=e.wrap?"json":null,e.wrap){var r={};r.output=e.output,r.callback=e.callback,delete r.callback,e.url=n.A.normalyzeUrl(t.url,r)}switch(e.protocol){case"XHR":"GET"===t.method&&t.nocache&&(e.url=n.A.normalyzeUrl(e.url,{t:(new Date).getTime()})),i.A.call(e);break;case"JSONP":e.data&&(e.url=n.A.normalyzeUrl(e.url,e.data)),o.A.call(e);break;default:throw new Error("protocol not supported (XHR|JSONP) !")}}else console.log("Value (s) for parameter (s) 'protocol=JSONP (instead use XHR)' not supported to NodeJS")}}},210:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(2710),i=r(3474),o=r(6964),s=r.n(o);const a={call:function(t){var e=n.A.getLogger("XHR");if(e.trace("[XHR::call()]"),s().polyfill(),!t.url)throw new Error("missing parameter : url is not defined !");if(!t.method)throw new Error("missing parameter : method is not defined !");t.format||(t.format="text");var r={};switch(r.url=t.url,r.data=t.data?t.data:null,r.method=t.method,r.timeOut=t.timeOut||0,r.scope=t.scope||this,r.proxy=t.proxy||null,r.content=t.content||null,r.headers=t.headers||{referer:"http://localhost"},t.method){case"DELETE":case"GET":break;case"PUT":case"POST":r.content=t.content?t.content:"application/x-www-form-urlencoded",r.headers=t.headers?t.headers:{referer:"http://localhost"};break;case"HEAD":case"OPTIONS":throw new Error("HTTP method not yet supported !");default:throw new Error("HTTP method unknown !")}switch(t.format){case"text":this.__call(r).then((function(r){e.trace(r),t.onResponse.call(this,r)})).catch((function(e){t.onFailure.call(this,e)}));break;case"json":this.__callJSON(r).then((function(r){e.trace(r),t.onResponse.call(this,r)})).catch((function(e){t.onFailure.call(this,e)}));break;case"xml":this.__callXML(r).then((function(r){e.trace(r),t.onResponse.call(this,r)})).catch((function(e){t.onFailure.call(this,e)}));break;default:throw new Error("This output Format is not yet supported !")}},__call:function(t){var e=n.A.getLogger("XHR");return e.trace("[XHR::__call()]"),new Promise((function(n,o){var s="POST"===t.method||"PUT"===t.method?1:0;t.data&&("object"==typeof t.data&&Object.keys(t.data).length||"string"==typeof t.data&&t.data.length)&&!s&&(t.url=i.A.normalyzeUrl(t.url,t.data)),e.trace("URL = ",t.url);var a=null;if("undefined"==typeof window){var l=r(3092),u={headers:{Referer:"https://localhost"}};return t.data&&"string"==typeof t.data&&s&&(u={method:t.method,body:t.data,headers:{"Content-Type":t.content,Referer:"https://localhost"}}),l(t.url,u).then((function(t){if(t.ok)n(t.text());else{var e="Errors Occured on Http Request (status : '"+t.statusText+"' | url : '"+t.url+"')",r=t.status;o({message:e,status:r})}})).catch((function(t){o({message:t,status:-1})}))}if(window.XMLHttpRequest){e.trace("XMLHttpRequest"),(a=new XMLHttpRequest).open(t.method,t.url,!0),a.overrideMimeType=t.content;var c=null;t.timeOut>0&&(e.trace("XHR - TimeOut actif !"),c=window.setTimeout((function(){o({message:"TimeOut Occured on Http Request with XMLHttpRequest !",status:-1})}),t.timeOut)),s&&(e.trace("data = ",t.data),a.setRequestHeader("Content-type",t.content)),a.onerror=function(t){console.log(t),o(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},a.ontimeout=function(t){console.log(t),o(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},a.onreadystatechange=function(t){if(4===a.readyState)if(200===a.status)window.clearTimeout(c),n(a.response);else{var e="Errors Occured on Http Request (status : '"+t.target.statusText+"' | url : '"+t.target.responseURL+"' | response : '"+t.target.response+"')",r=t.target.status;o({message:e,status:r})}};var h=t.data&&s?t.data:null;a.send(h)}else{if(!window.XDomainRequest)throw new Error("CORS not supported");e.trace("XDomainRequest"),(a=new XDomainRequest).open(t.method,t.url),a.overrideMimeType=t.content,t.timeOut>0&&(a.timeout=t.timeout,e.trace("XHR - TimeOut actif !")),s&&a.setRequestHeader("Content-type",t.content),a.onerror=function(){o(new Error("Errors Occured on Http Request with XMLHttpRequest !"))},a.ontimeout=function(){o(new Error("TimeOut Occured on Http Request with XMLHttpRequest !"))},a.onload=function(t){if(200===a.status)n(a.responseText);else{var e="Errors Occured on Http Request (status : '"+t.target.statusText+"' | url : '"+t.target.responseURL+"')",r=t.target.status;o({message:e,status:r})}};var p=t.data&&s?t.data:null;a.send(p)}}))},__callJSON:function(t){return this.__call(t).then(JSON.parse).catch((function(e){console.log("_callJSON failed on : ",t.url,e)}))},__callXML:function(t){return this.__call(t).then((function(t){var e;"undefined"==typeof window?e=(new(0,r(8978).S4)).parseFromString(t,"text/xml"):window.DOMParser?e=(new window.DOMParser).parseFromString(t,"text/xml"):((e=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,e.loadXML(t));return e})).catch((function(e){console.log("__callXML failed on : ",t.url,e)}))}}},2366:(t,e,r)=>{"use strict";r.d(e,{A:()=>h});var n=r(2710),i=r(1097),o=r(8288),s=r(895),a=r(7966),l=r(8933),u=r(5325);function c(t){if(!(this instanceof c))throw new TypeError(i.A.getMessage("CLASS_CONSTRUCTOR","Alti"));if(this.CLASSNAME="Alti",s.A.apply(this,arguments),this.logger=n.A.getLogger("Gp.Services.Alti"),this.logger.trace("[Constructeur Alti (options)]"),!t.positions)throw new Error(i.A.getMessage("PARAM_MISSING","positions"));if(0===t.positions.length)throw new Error(i.A.getMessage("PARAM_EMPTY","positions"));if(this.options.positions=t.positions,this.options.outputFormat="string"==typeof t.outputFormat?t.outputFormat.toLowerCase():"xml",this.options.resource=t.resource||"ign_rge_alti_wld",this.options.sampling=t.sampling||null,this.options.api="string"==typeof t.api?t.api.toUpperCase():"REST","REST"===this.options.api&&(this.options.httpMethod="GET"),this.options.zonly=t.zonly||!1,this.options.measures=t.measures||!1,!this.options.serverUrl){var e=a.A.Alti.newUrl(),r=null;switch(this.options.api){case"WPS":r=e.wps;break;case"REST":r=e[(t.sampling?"profil":"elevation")+"-"+this.options.outputFormat];break;default:throw new Error(i.A.getMessage("PARAM_UNKNOWN","api"))}if(!r)throw new Error("Url by default not found !");this.options.serverUrl=r,this.logger.trace("Server URL by default : "+this.options.serverUrl)}var o=this.options.serverUrl.lastIndexOf(".");if(-1!==o){var l=this.options.serverUrl.substring(o+1);if(l&&l.length<5)switch(this.logger.trace("Server Extension URL : "+l),l.toLowerCase()){case"json":case"xml":this.options.outputFormat=l.toLowerCase();break;default:throw new Error("type of service : unknown or unsupported (json or xml) !")}}}c.prototype=Object.create(s.A.prototype,{}),c.prototype.constructor=c,c.prototype.buildRequest=function(t,e){var r={httpMethod:this.options.httpMethod,onSuccess:function(t){this.request=t,e.call(this,this.request)},onError:t,scope:this,resource:this.options.resource,positions:this.options.positions,outputFormat:this.options.outputFormat,sampling:this.options.sampling,api:this.options.api,zonly:this.options.zonly,measures:this.options.measures};l.A.build(r)},c.prototype.analyzeResponse=function(t,e){if(this.response){var r={response:this.response,outputFormat:this.options.outputFormat,rawResponse:this.options.rawResponse,onError:t,onSuccess:e,scope:this};u.A.build(r)}else t.call(this,new o.A(i.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const h=c},3667:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(3565),i=r(3041),o=r(9206),s={};s.READERS={elevations:function(t){var e=new n.A;if(t.hasChildNodes())for(var r,i,o=t.childNodes,a=0;a{"use strict";r.d(e,{A:()=>a});var n=r(2710),i=r(8288),o=r(6933),s=r(4359);const a={build:function(t){n.A.getLogger("AltiRequestFactory").trace(["AltiRequestFactory::build()"]);var e=null,r={type:t.sampling?"Profil":"Elevation",method:t.httpMethod,param:{positions:null,delimiter:null,indent:null,crs:null,format:null,sampling:null,zonly:null,measures:null}};r.param.positions=t.positions,r.param.format=t.outputFormat,r.param.sampling=t.sampling,r.param.zonly=t.zonly,r.param.measures=t.measures,r.param.resource=t.resource;var a=!(null===t.onError||"function"!=typeof t.onError),l=!(null===t.onSuccess||"function"!=typeof t.onSuccess),u=null;switch(t.api){case"REST":var c=new o.A(r);if(!c.processRequestString()){if(u="Error in process request (rest) !",a)return void t.onError.call(t.scope,new i.A(u));throw new Error(u)}e=c.requestString;break;case"WPS":if(r.wps={service:null,version:null,identifier:null,rawdataoutput:null,request:null},!(e=s.A.build(r))){if(u="Error in process request (wps) !",a)return void t.onError.call(t.scope,new i.A(u));throw new Error(u)}break;default:if(u="Type of API is not supported by service (REST or WPS) !",a)return void t.onError.call(t.scope,new i.A(u));throw new Error(u)}return l&&t.onSuccess.call(t.scope,e),e}}},6933:(t,e,r)=>{"use strict";r.d(e,{A:()=>l});var n=r(2710),i=r(1097),o=r(5974),s=r(3471);function a(t){if(this.logger=n.A.getLogger("AltiRequestREST"),this.logger.trace("[Constructeur AltiRequestREST ()]"),!(this instanceof a))throw new TypeError("AltiRequestREST constructor cannot be called as a function.");if(this.options=t||{},!this.options)throw new Error(i.A.getMessage("PARAM_EMPTY","options"));if(!this.options.type)throw new Error(i.A.getMessage("PARAM_EMPTY","type (Elevation or Profil)"));switch(this.DataObject=null,this.options.type){case"Elevation":this.DataObject=new o.A(this.options.param);break;case"Profil":this.DataObject=new s.A(this.options.param);break;default:throw new Error(i.A.getMessage("PARAM_TYPE","type (Elevation or Profil)"))}this.method=this.options.method||"GET"}a.prototype={requestString:null,constructor:a,template:{get:{value:"lon=__LON__&lat=__LAT__&indent=__INDENT__&crs='__CRS__'&resource=__RESOURCE__&measures=__MEASURES__",input:{point:"&zonly=__ZONLY__",profil:"&sampling=__SAMPLING__"}},post:{value:"lon=__LON__\nlat=__LAT__\nindent=__INDENT__\ncrs='__CRS__'\nresource='__RESOURCE__'\nmeasures='__MEASURES__'\n",input:{point:"zonly=__ZONLY__\n",profil:"sampling=__SAMPLING__"}}},processRequestString:function(){this.logger.trace("AltiRequestREST::processRequestString ()");var t="";return"POST"===this.method?t=this.template.post.value:"GET"===this.method&&(t=this.template.get.value),t=(t=(t=(t=(t=(t=t.replace(/__LON__/g,this.DataObject.getLon())).replace(/__LAT__/g,this.DataObject.getLat())).replace(/__INDENT__/g,this.DataObject.indent)).replace(/__CRS__/g,this.DataObject.crs)).replace(/__RESOURCE__/g,this.DataObject.resource)).replace(/__MEASURES__/g,this.DataObject.measures),t+=this.__addDataInputs(),this.logger.trace("traduction tmpl",t),this.requestString=t,this.requestString},__addDataInputs:function(){var t;if(this.logger.trace("AltiRequestREST::addDataInput ()"),"POST"===this.method)t=this.template.post;else{if("GET"!==this.method)throw new Error("No other HTTP method supported by the service !");t=this.template.get}if("AltiElevationRequest"===this.DataObject.CLASSNAME)return t.input.point.replace(/__ZONLY__/g,this.DataObject.zonly.toString());if("AltiProfilRequest"===this.DataObject.CLASSNAME)return t.input.profil.replace(/__SAMPLING__/g,this.DataObject.sampling);throw new Error("No other object supported than elevation or profil !?")}};const l=a},4359:(t,e,r)=>{"use strict";r.d(e,{A:()=>l});var n=r(2710),i=r(1097),o=r(4841),s=r(5974),a=r(3471);const l={build:function(t){if(n.A.getLogger("AltiRequestWPS").trace(["AltiRequestWPS::build()"]),!t)throw new Error(i.A.getMessage("PARAM_EMPTY","options"));if(!t.type)throw new Error(i.A.getMessage("PARAM_EMPTY","type (Elevation or Profil)"));var e=null;switch(t.type){case"Elevation":t.wps.identifier="gs:WPSElevation",e=new s.A(t.param);break;case"Profil":t.wps.identifier="gs:WPSLineElevation",e=new a.A(t.param);break;default:throw new Error(i.A.getMessage("PARAM_TYPE","type (Elevation or Profil)"))}var r={data:e,method:t.method,param:t.wps},l=new o.A(r);if(!l.processRequestString())throw new Error("Enable to process request !");return l.requestString}}},5974:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(2710),i=r(6221);function o(t){if(!(this instanceof o))throw new TypeError("AltiElevationRequest constructor cannot be called as a function.");this.CLASSNAME="AltiElevationRequest",i.A.apply(this,arguments),this.logger=n.A.getLogger(),this.logger.trace("[Constructeur AltiElevationRequest ()]"),this.zonly=this.options.zonly||!1}o.prototype=Object.create(i.A.prototype,{zonly:{get:function(){return this._zonly},set:function(t){this._zonly=t}}}),o.prototype.constructor=o,o.prototype.getData=function(){var t=[];return t.push({k:"lon",v:this.getLon()}),t.push({k:"lat",v:this.getLat()}),t.push({k:"indent",v:this.indent}),t.push({k:"crs",v:this.crs}),t.push({k:"zonly",v:this.zonly}),t.push({k:"format",v:this.format}),t.push({k:"resource",v:this.resource}),t};const s=o},3471:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(2710),i=r(6221);function o(t){if(!(this instanceof o))throw new TypeError("AltiProfilRequest constructor cannot be called as a function.");this.CLASSNAME="AltiProfilRequest",i.A.apply(this,arguments),this.logger=n.A.getLogger(),this.logger.trace("[Constructeur AltiProfilRequest ()]"),this.sampling=this.options.sampling||3}o.prototype=Object.create(i.A.prototype,{sampling:{get:function(){return this._sampling},set:function(t){this._sampling=t}}}),o.prototype.constructor=o,o.prototype.getData=function(){var t=[];return t.push({k:"lon",v:this.getLon()}),t.push({k:"lat",v:this.getLat()}),t.push({k:"indent",v:this.indent}),t.push({k:"crs",v:this.crs}),t.push({k:"sampling",v:this.sampling}),t.push({k:"format",v:this.format}),t.push({k:"resource",v:this.resource}),t};const s=o},6221:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(2710);function i(t){if(!(this instanceof i))throw new TypeError("AltiRequest constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur AltiRequest ()]"),this.options=t||{},this.positions=this.options.positions||[],this.delimiter=this.options.delimiter||"|",this.indent=this.options.indent||!1,this.crs=this.options.crs||"CRS:84",this.format=this.options.format||"json",this.resource=this.options.resource,this.measures=this.options.measures||!1}i.CLASSNAME="AltiRequest",i.prototype={constructor:i,setPositions:function(t){for(var e=[],r=0;re||t{"use strict";r.d(e,{A:()=>c});var n=r(2710),i=r(1097),o=r(8288),s=r(4904),a=r(3667),l=r(3565),u=r(3041);const c={build:function(t){var e=n.A.getLogger("AltiResponseFactory");e.trace(["AltiResponseFactory::build()"]);var r=null;if(t.response){if(t.rawResponse)e.trace("analyze response : raw"),r=t.response;else{switch(t.outputFormat){case"xml":e.trace("analyze response : xml");try{var c=new s.A({reader:a.A});if("string"==typeof t.response?c.setXMLString(t.response):c.setXMLDoc(t.response),!(r=c.parse()))throw new Error(i.A.getMessage("SERVICE_RESPONSE_EXCEPTION_2"))}catch(e){var h=e.message;return void t.onError.call(t.scope,new o.A({message:i.A.getMessage("SERVICE_RESPONSE_EXCEPTION",h),status:200,type:o.A.TYPE_SRVERR}))}break;case"json":e.trace("analyze response : json"),e.trace("analyze response : ",typeof t.response);var p=null;if((p="string"==typeof t.response?JSON.parse(t.response):t.response)&&p.error)return void t.onError.call(t.scope,new o.A({message:i.A.getMessage("SERVICE_RESPONSE_EXCEPTION",p.error.description),status:200,type:o.A.TYPE_SRVERR}));if(p){var d,g=p.elevations,f=new l.A;if(Array.isArray(g)&&g.length)for(var m=0;m{"use strict";function n(){if(!(this instanceof n))throw new TypeError("AltiResponse constructor cannot be called as a function.");this.elevations=[]}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},3041:(t,e,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("Elevation constructor cannot be called as a function.");this.z=null}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},9206:(t,e,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("Measure constructor cannot be called as a function.");this.source_name=null,this.source_measure=null,this.z=null,this.acc=null}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},9338:(t,e,r)=>{"use strict";r.d(e,{A:()=>h});var n=r(895),i=r(7966),o=r(4889),s=r(2710),a=r(1097),l=r(3474),u=r(8288);function c(t){if(!(this instanceof c))throw new TypeError(a.A.getMessage("CLASS_CONSTRUCTOR","AutoComplete"));this.CLASSNAME="AutoComplete",this.logger=s.A.getLogger("Gp.Services.AutoComplete"),this.logger.trace("[Constructeur AutoComplete (options)]");var e=this.patchOptionConvertor(t);if(e.serverUrl||(e.serverUrl=i.A.AutoComplete.newUrl()),n.A.apply(this,arguments),!e.text)throw new Error(a.A.getMessage("PARAM_MISSING","text"));this.options.text=e.text,e.type||(e.type=["StreetAddress,PositionOfInterest"]),this.options.type=e.type,this.options.territory=e.terr||"",this.options.maximumResponses=e.maximumResponses||10,"XHR"===this.options.protocol&&"POST"===this.options.httpMethod&&(this.logger.warn("Le service ne gére pas le mode d'interrogation en POST, on bascule sur du GET !"),this.options.httpMethod="GET"),this.options.outputFormat=this.options.rawResponse?"":"json"}c.prototype=Object.create(n.A.prototype,{}),c.prototype.constructor=c,c.prototype.patchOptionConvertor=function(t){const e=t;return e.filterOptions&&(this.logger.warn("The parameter 'filterOptions' is deprecated"),e.filterOptions.type&&(this.logger.warn("The parameter 'filterOptions.type' is deprecated"),e.type||(e.type=e.filterOptions.type)),e.filterOptions.territory&&(this.logger.warn("The parameter 'filterOptions.territory' is deprecated"),e.terr||(e.terr=e.filterOptions.territory)),delete e.filterOptions),e},c.prototype.buildRequest=function(t,e){var r="";this.options.territory&&(r=this.options.territory);var n="";this.options.type&&(n=this.options.type.join(",")),this.request=l.A.normalyzeParameters({text:encodeURIComponent(this.options.text),type:n,terr:r,maximumResponses:this.options.maximumResponses}),this.request?e.call(this,this.request):t.call(this,new u.A(a.A.getMessage("SERVICE_REQUEST_BUILD")))},c.prototype.analyzeResponse=function(t,e){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onSuccess:e,onError:t,scope:this};o.A.build(r)}else t.call(this,new u.A(a.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const h=c},4889:(t,e,r)=>{"use strict";r.d(e,{A:()=>l});var n=r(2710),i=r(1097),o=r(8288),s=r(5941),a=r(9924);const l={build:function(t){var e=n.A.getLogger("AutoCompleteResponseFactory");e.trace(["AutoCompleteResponseFactory::build()"]);var r=null;if(t.response){if(t.rawResponse)e.trace("analyze response : raw"),r=t.response;else{var l=null;if(l="string"==typeof t.response?JSON.parse(t.response):t.response){if(l.error)return void t.onError.call(t.scope,new o.A({message:i.A.getMessage("SERVICE_RESPONSE_EXCEPTION",l.error.description),status:l.error.code,type:o.A.TYPE_SRVERR}));if(r=new s.A,!l.results||!Array.isArray(l.results))return void t.onError.call(t.scope,new o.A(i.A.getMessage("SERVICE_RESPONSE_FORMAT_3")));for(var u=null,c=0;c{"use strict";function n(){if(!(this instanceof n))throw new TypeError("AutoCompleteResponse constructor cannot be called as a function.");this.suggestedLocations=[]}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},9924:(t,e,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("SuggestedLocation constructor cannot be called as a function.");this.type=null,this.position={x:null,y:null},this.commune=null,this.fullText=null,this.postalCode=null,this.classification=null,this.street=null,this.poi=null,this.kind=null}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},895:(t,e,r)=>{"use strict";r.d(e,{A:()=>c});var n=r(2710),i=r(3474),o=r(1097),s=r(6250),a=r(8288),l=r(9032);function u(t){if(!(this instanceof u))throw new TypeError(o.A.getMessage("CLASS_CONSTRUCTOR"));for(var e in this.logger=n.A.getLogger("CommonService"),this.logger.trace("[Constructeur CommonService (options)]"),this.options={protocol:"XHR",ssl:!0,proxyURL:"",callbackSuffix:null,httpMethod:"GET",timeOut:0,rawResponse:!1,scope:this,onSuccess:function(t){console.log("onSuccess - la reponse est la suivante : ",t)},onFailure:function(t){200!==t.status&&t.status?console.log("onFailure - Erreur (",t.status,") : ",t.message):console.log("onFailure : ",t.message)}},t)t.hasOwnProperty(e)&&(this.options[e]=t[e]);if(this.options.rawResponse&&!this.options.onSuccess&&(this.options.onSuccess=function(t){console.log("onSuccess - la réponse brute du service est la suivante : ",t)}),!!(null===this.options.onSuccess||"function"!=typeof this.options.onSuccess))throw new Error(o.A.getMessage("PARAM_MISSING","onSuccess()"));switch(this.options.httpMethod="string"==typeof t.httpMethod?t.httpMethod.toUpperCase():"GET",this.options.httpMethod){case"POST":case"GET":break;case"PUT":case"DELETE":case"HEAD":case"OPTIONS":throw new Error(o.A.getMessage("PARAM_NOT_SUPPORT","httpMethod"));default:throw new Error(o.A.getMessage("PARAM_UNKNOWN","httpMethod"))}switch(this.options.protocol="string"==typeof t.protocol?t.protocol.toUpperCase():"XHR",this.options.protocol){case"JSONP":case"XHR":break;default:throw new Error(o.A.getMessage("PARAM_UNKNOWN","protocol"))}if("undefined"==typeof window&&"JSONP"===this.options.protocol)throw new Error(o.A.getMessage("PARAM_NOT_SUPPORT_NODEJS","protocol=JSONP (instead use XHR)"));"JSONP"===this.options.protocol&&(this.options.httpMethod="GET"),this.options.nocache=t.nocache||!1,this.options.outputFormat=null,this.request=null,this.response=null}u.prototype={constructor:u,call:function(){this.logger.trace("CommonService::call ()");var t=this;function e(e){this.logger.trace("CommonService::onBuildRequest : ",e),this.callService.call(t,i,r)}function r(e){this.logger.trace("CommonService::onCallService : ",e),this.analyzeResponse.call(t,i,n)}function n(t){if(this.logger.trace("CommonService::onAnalyzeResponse : ",t),!t)return i.call(this,new a.A("Analyse de la reponse en échec !?"));this.options.onSuccess.call(this,t)}function i(t){this.logger.trace("CommonService::onError()");var e=t;e instanceof a.A||(e=new a.A(t.message)),this.options.onFailure.call(this,e)}(function(){this.logger.trace("CommonService::run ()"),this.buildRequest.call(t,i,e)}).call(t)},buildRequest:function(t,e){this.logger.error("overwritten method !"),t&&t.call(this,"This method must be overwritten !"),e.call(this,"This method must be overwritten !")},callService:function(t,e){var r=null,n=this.request,o=!(!this.options.proxyURL||"XHR"!==this.options.protocol),u={"gp-access-lib":l.rE};this.options.apiKey&&(u.apiKey=this.options.apiKey),this.options.serverUrl=i.A.normalyzeUrl(this.options.serverUrl,u,!1),o&&("GET"===this.options.httpMethod&&(r=this.options.proxyURL+i.A.normalyzeUrl(this.options.serverUrl,this.request,!0),n=null),"POST"===this.options.httpMethod&&(r=this.options.proxyURL+i.A.normalyzeUrl(this.options.serverUrl,null,!0),n=this.request));var c=this,h={url:r||this.options.serverUrl,method:this.options.httpMethod,protocol:this.options.protocol,timeOut:this.options.timeOut||0,format:this.options.outputFormat,nocache:this.options.nocache||!1,wrap:"XHR"!==this.options.protocol,callbackSuffix:this.options.callbackSuffix,data:n,headers:null,content:this.options.contentType||"application/xml",scope:this.options.scope||this,onResponse:function(r){c.logger.trace("callService::onResponse()");var n=null;if("XHR"===c.options.protocol&&(c.logger.trace("Response XHR",r),n=r),"JSONP"===c.options.protocol){if(c.logger.trace("Response JSON",r),!r)return void t.call(c,new a.A("Le contenu de la reponse est vide !?"));if(r.http){if(200!==r.http.status)return void t.call(c,new a.A({status:r.http.status,message:r.http.error,type:a.A.TYPE_SRVERR}));n=r.xml,c.options.rawResponse&&(n=r)}else n=r}if("function"==typeof c.options.onBeforeParse){var i=c.options.onBeforeParse(n);"string"==typeof i&&(n=i)}c.response=n,e.call(c,n)},onFailure:function(e){c.logger.trace("callService::onFailure()"),e.type=a.A.TYPE_SRVERR,t.call(c,new a.A(e))},onTimeOut:function(){c.logger.trace("callService::onTimeOut()"),t.call(c,new a.A("TimeOut!"))}};s.A.send(h)},analyzeResponse:function(t,e){this.logger.error("overwritten method !"),t&&t.call(this,"This method must be overwritten !"),e.call(this,"This method must be overwritten !")}};const c=u},4154:(t,e,r)=>{"use strict";r.d(e,{A:()=>h});var n=r(2710),i=r(1097),o=r(895),s=r(7966),a=r(9939);function l(t){if(!(this instanceof l))throw new TypeError(i.A.getMessage("CLASS_CONSTRUCTOR","Config"));if(this.CLASSNAME="Config",this.logger=n.A.getLogger("Gp.Config"),this.logger.trace("[Constructeur Config (options)]"),!!(null===t.onSuccess||"function"!=typeof t.onSuccess))throw new Error(i.A.getMessage("PARAM_MISSING","onSuccess()"));t.apiKey||t.customConfigFile||(t.apiKey="full"),this.options={},this.options.onSuccess=t.onSuccess,this.options.onFailure=t.onFailure,this.options.sync=t.sync||!1,this.options.listConfigUrls=t.customConfigFile?[t.customConfigFile]:Array.isArray(t.apiKey)?s.A.Config.url(t.apiKey):s.A.Config.url(t.apiKey.split(","))}l.prototype=Object.create(o.A.prototype,{}),l.prototype.constructor=l,l.prototype.buildRequest=function(t,e){this.listConfigUrls=this.options.listConfigUrls,this.listConfigUrls?e.call(this,this.listConfigUrls):t.call(this,new Error("url by default not found !"))},l.prototype.callService=function(t,e){this.options.sync?c.call(this,t,e):u.call(this,t,e)};var u=function(t,e){this.listConfigResults=[];let n=null;if("undefined"==typeof window){var i=r(3092);n=i}else n=window.fetch;var o=t=>n(t,{credentials:"same-origin"}).then((t=>{if(t.ok)return t.json().then((t=>t)).catch((t=>{throw new Error("Exception Json : "+t)}));throw new Error("Exception HTTP : "+t.status+" (status code) !")})).catch((t=>new Promise(((e,r)=>{r(t)})))),s=[];for(let t=0;t{if(!t)throw new Error("results config empty !?");t.forEach((t=>{this.listConfigResults.push(t)}))})).then((()=>{e.call(this,this.listConfigResults)})).catch((e=>{t.call(this,e)}))},c=function(t,e){this.listConfigResults=[];for(var r=0;r{"use strict";function n(){if(!(this instanceof n))throw new TypeError("ConfigInterface constructor cannot be called as a function.");this.generalOptions={apiKeys:{},title:null,defaultGMLGFIStyle:null,theme:null,wgs84Resolutions:[]},this.layers={},this.tileMatrixSets={}}r.d(e,{A:()=>i}),n.prototype={constructor:n,isKeyConfLoaded:function(t){if(t)return!!this.generalOptions.apiKeys[t]},getLayersId:function(t){return this.generalOptions.apiKeys[t]},getLayerId:function(t,e){if(t&&e){var r=null;if(this.layers){var n=this.layers;for(var i in n)if(n.hasOwnProperty(i)){var o=i.split("$");if(t===o[0]&&o[1]){var s=o[1].split(":");if(o[1].split(";")[1]===e.toUpperCase()){r=i;break}if(s[2]===e.toUpperCase()){r=i;break}}}}if(r)return r}},getLayersConf:function(t){var e={},r=this.getLayersId(t);if(r)for(var n=0;n{"use strict";r.d(e,{A:()=>i});var n={ssl:!0,newUrl:function(t){return(!1===n.ssl?"http://":"https://")+"data.geopf.fr"+t},Alti:{new_key:{"elevation-json":"/altimetrie/1.0/calcul/alti/rest/elevation.json","elevation-xml":"/altimetrie/1.0/calcul/alti/rest/elevation.xml","profil-json":"/altimetrie/1.0/calcul/alti/rest/elevationLine.json","profil-xml":"/altimetrie/1.0/calcul/alti/rest/elevationLine.xml"},newUrl:function(){return{"elevation-json":n.newUrl(this.new_key["elevation-json"]),"elevation-xml":n.newUrl(this.new_key["elevation-xml"]),"profil-json":n.newUrl(this.new_key["profil-json"]),"profil-xml":n.newUrl(this.new_key["profil-xml"])}}},ProcessIsoCurve:{new_key:"/navigation/isochrone",newUrl:function(){return n.newUrl(this.new_key)}},Config:{_key:"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/dist/",url:function(t){Array.isArray(t)||(t=t.split(","));for(var e=[],r=0;r{"use strict";r.d(e,{A:()=>u});var n=r(1097),i=r(8288),o=r(1135),s=r(6025);function a(){if(!(this instanceof a))throw new TypeError("GeocodeResponseParser constructor cannot be called as a function.")}function l(t,e){var r=new s.A;if(t.geometry&&"Point"===t.geometry.type&&(r.position={lon:t.geometry.coordinates[0],lat:t.geometry.coordinates[1]}),t.properties){for(var n in t.properties)"score"===n?r.accuracy=t.properties[n]:"_type"===n?"address"===t.properties[n]?r.type="StreetAddress":"poi"===t.properties[n]?r.type="PositionOfInterest":"parcel"!==t.properties[n]&&"cadastral"!==t.properties[n]||(r.type="CadastralParcel"):r.placeAttributes[n]=t.properties[n];"address"===t.properties._type&&(r.matchType=void 0!==t.properties.number&&null!==t.properties.number?"street number":"street")}e.locations.push(r)}a.prototype={constructor:a,parse:function(t){var e=new o.A;const r=JSON.parse(t);if("FeatureCollection"===r.type)for(var s=0;s{"use strict";r.d(e,{A:()=>h});var n=r(2710),i=r(1097),o=r(8288),s=r(895),a=r(7966),l=r(6767),u=r(9375);function c(t){if(!(this instanceof c))throw new TypeError(i.A.getMessage("CLASS_CONSTRUCTOR","Geocode"));this.CLASSNAME="Geocode",this.logger=n.A.getLogger("Gp.Services.Geocode"),this.logger.trace("[Constructeur Geocode (options)]");var e=this.patchOptionConvertor(t);if(e.serverUrl||(e.serverUrl=a.A.Geocode.newUrl()),s.A.apply(this,[e]),!e.hasOwnProperty("query"))throw new Error(i.A.getMessage("PARAM_MISSING","query"));if(this.options.query=e.query,e.index||(this.options.index=e.index="StreetAddress"),e.filters)for(var r=Object.keys(e.filters),o=0;o0?e.index=e.filters.type[0]:e.index=e.filters.type),delete e.filters.type),e.filters.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),delete e.filters.bbox)),delete e.filterOptions),e.position&&(e.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),e.position.lon||(e.position.lon=e.position.x),delete e.position.x),e.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),e.position.lat||(e.position.lat=e.position.y),delete e.position.y)),e.returnFreeForm&&(this.logger.warn("The parameter 'returnFreeForm' is deprecated"),delete e.returnFreeForm),e.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete e.srs),e},c.prototype.buildRequest=function(t,e){var r={httpMethod:this.options.httpMethod,geocodeMethod:"search",query:this.options.query,index:this.options.index,returnTrueGeometry:this.options.returnTrueGeometry,position:this.options.position,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=l.A.build(r),this.request?e.call(this,this.request):t.call(this,new o.A(i.A.getMessage("SERVICE_REQUEST_BUILD")))},c.prototype.analyzeResponse=function(t,e){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onError:t,onSuccess:e,scope:this};u.A.build(r)}else t.call(this,new o.A(i.A.getMessage("SERVICE_RESPONSE_EMPTY")))};const h=c},6767:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(2710),i=r(3955);const o={build:function(t){var e=n.A.getLogger("GeocodeRequestFactory");e.trace(["GeocodeRequestFactory::build()"]);var r=t||{},o=new i.A(r);if(!o.processRequestString())throw new Error("Error process request (rest) !");var s=o.requestString;return e.trace(s),s}}},3955:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(2710),i=r(1097),o=r(3757);function s(t){if(this.logger=n.A.getLogger("GeocodeRequestREST"),this.logger.trace("[Constructeur GeocodeRequestREST ()]"),!(this instanceof s))throw new TypeError("GeocodeRequestREST constructor cannot be called as a function.");if(!t)throw new Error(i.A.getMessage("PARAM_EMPTY","options"));this.settings=t}s.prototype={requestString:null,constructor:s,processRequestString:function(){var t="";const e=new o.A(this.settings).getParams();for(var r=0;r{"use strict";r.d(e,{A:()=>o});var n=r(2710);function i(t){if(!(this instanceof i))throw new TypeError("GeocodeParamREST constructor cannot be called as a function.");if(this.logger=n.A.getLogger(),this.logger.trace("[Constructeur GeocodeParamREST ()]"),this.options=t||{},!this.options.geocodeMethod||"search"!==this.options.geocodeMethod&&"reverse"!==this.options.geocodeMethod)throw new Error("Error geocodeMethod not valid");this.geocodeMethod=this.options.geocodeMethod,this.query=void 0!==this.options?this.options.query:null,this.searchGeometry=this.options.searchGeometry||null,this.index=this.options.index||null,this.lon=this.options.position&&this.options.position.lon?this.options.position.lon:null,this.lat=this.options.position&&this.options.position.lat?this.options.position.lat:null,this.maxResp=this.options.maxResp||null,this.returnTrueGeometry=this.options.returnTrueGeometry||null,this.filters=this.options.filters||{}}i.CLASSNAME="GeocodeParamREST",i.prototype={constructor:i,getFilters:function(){var t={};for(var e in this.filters)this.filters.hasOwnProperty(e)&&(t[e]=this.filters[e]);return t},getIndex:function(){return void 0===this.index?null:"StreetAddress"===this.index?"address":"CadastralParcel"===this.index?"parcel":"PositionOfInterest"===this.index?"poi":"location"===this.index?"location":this.index},getSearchGeometry:function(){return JSON.stringify(this.searchGeometry)}},i.prototype.getParams=function(){var t=[];"search"===this.geocodeMethod&&t.push({k:"q",v:this.query}),this.index&&t.push({k:"index",v:this.getIndex()}),"reverse"===this.geocodeMethod&&this.searchGeometry&&t.push({k:"searchgeom",v:this.getSearchGeometry()}),this.lon&&this.lat&&(t.push({k:"lon",v:this.lon}),t.push({k:"lat",v:this.lat})),this.maxResp&&t.push({k:"limit",v:this.maxResp}),this.returnTrueGeometry&&t.push({k:"returntruegeometry",v:this.returnTrueGeometry});const e=this.getFilters();for(var r in e)t.push({k:r,v:e[r]});return t};const o=i},9375:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(8288),i=r(1097),o=r(9723);const s={build:function(t){var e=null;if(t.response){if(t.rawResponse)e=t.response;else{try{if(!(e=(new o.A).parse(t.response)))throw new Error("L'analyse de la réponse du service !?")}catch(e){var r=e.message;return"string"==typeof t.response?r+="('"+t.response+"')":r+="('"+t.response.documentElement.innerHTML+"')",void t.onError.call(t.scope,new n.A({message:i.A.getMessage("SERVICE_RESPONSE_ANALYSE",r),type:n.A.TYPE_UNKERR,status:-1}))}if(e.exceptionReport)return void t.onError.call(t.scope,new n.A({message:i.A.getMessage("SERVICE_RESPONSE_EXCEPTION",e.exceptionReport),type:n.A.TYPE_SRVERR,status:200}))}t.onSuccess.call(t.scope,e)}else t.onError.call(t.scope,new n.A({message:i.A.getMessage("SERVICE_RESPONSE_EMPTY"),type:n.A.TYPE_SRVERR,status:-1}))}}},1135:(t,e,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("GeocodeResponse constructor cannot be called as a function.");this.locations=[]}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},6025:(t,e,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("GeocodedLocation constructor cannot be called as a function.");this.position=null,this.matchType=null,this.placeAttributes={},this.type=null,this.accuracy=null,this.CLASSNAME="GeocodedLocation"}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},6064:(t,e,r)=>{"use strict";r.d(e,{A:()=>h});var n=r(2710),i=r(1097),o=r(8288),s=r(895),a=r(7966),l=r(6767),u=r(9375);function c(t){if(!(this instanceof c))throw new TypeError(i.A.getMessage("CLASS_CONSTRUCTOR","ReverseGeocode"));this.CLASSNAME="ReverseGeocode",this.logger=n.A.getLogger("Gp.Services.ReverseGeocode"),this.logger.trace("[Constructeur ReverseGeocode (options)]");var e=this.patchOptionConvertor(t);if(e.serverUrl||(e.serverUrl=a.A.ReverseGeocode.newUrl()),s.A.apply(this,[e]),e.searchGeometry)this.options.searchGeometry=e.searchGeometry;else if(!e.position)throw new Error(i.A.getMessage("PARAM_MISSING","searchGeometry"));if(e.index||(this.options.index=e.index="StreetAddress"),e.filters)for(var r=Object.keys(e.filters),o=0;o0?e.index=e.filterOptions.type[0]:e.index=e.filterOptions.type),delete e.filterOptions.type),e.filterOptions.bbox&&(this.logger.warn("The parameter 'filterOptions.bbox' is deprecated"),e.searchGeometry||(e.searchGeometry=this.bbox2Json(e.filterOptions.bbox)),delete e.filterOptions.bbox),e.filterOptions.circle&&(this.logger.warn("The parameter 'filterOptions.circle' is deprecated"),e.searchGeometry||(e.searchGeometry=this.circle2Json(e.filterOptions.circle)),delete e.filterOptions.circle),e.filterOptions.polygon&&(this.logger.warn("The parameter 'filterOptions.polygon' is deprecated"),e.searchGeometry||(e.searchGeometry=this.polygon2Json(e.filterOptions.polygon)),delete e.filterOptions.polygon),!e.filters&&Object.keys(e.filterOptions).length>0&&(e.filters=e.filterOptions),delete e.filterOptions),e.position&&(e.position.x&&(this.logger.warn("The parameter 'position.x' is deprecated"),e.position.lon||(e.position.lon=e.position.x),delete e.position.x),e.position.y&&(this.logger.warn("The parameter 'position.y' is deprecated"),e.position.lat||(e.position.lat=e.position.y),delete e.position.y)),e.srs&&(this.logger.warn("The parameter 'srs' is deprecated"),delete e.srs),e},c.prototype.buildRequest=function(t,e){var r={httpMethod:this.options.httpMethod,geocodeMethod:"reverse",searchGeometry:this.options.searchGeometry,index:this.options.index,position:this.options.position,returnTrueGeometry:this.options.returnTrueGeometry,maxResp:this.options.maximumResponses,filters:this.options.filters};this.request=l.A.build(r),this.request?e.call(this,this.request):t.call(this,new o.A(i.A.getMessage("SERVICE_REQUEST_BUILD")))},c.prototype.analyzeResponse=function(t,e){if(this.response){var r={response:this.response,rawResponse:this.options.rawResponse,onError:t,onSuccess:e,scope:this};u.A.build(r)}else t.call(this,new o.A(i.A.getMessage("SERVICE_RESPONSE_EMPTY")))},c.prototype.bbox2Json=function(t){return{type:"Polygon",coordinates:[[[t.left,t.top],[t.right,t.top],[t.right,t.bottom],[t.left,t.bottom],[t.left,t.top]]]}},c.prototype.circle2Json=function(t){return{type:"Circle",radius:t.radius,coordinates:[t.x,t.y]}},c.prototype.polygon2Json=function(t){for(var e={type:"Polygon",coordinates:[[]]},r=0;r{"use strict";r.d(e,{A:()=>h});var n=r(2710),i=r(1097),o=r(8288),s=r(895),a=r(7966),l=r(9721),u=r(8297);function c(t){if(!(this instanceof c))throw new TypeError(i.A.getMessage("CLASS_CONSTRUCTOR","ProcessIsoCurve"));if(this.CLASSNAME="ProcessIsoCurve",s.A.apply(this,arguments),this.logger=n.A.getLogger("Gp.Services.ProcessIsoCurve"),this.logger.trace("[Constructeur ProcessIsoCurve (options)]"),!t.position)throw new Error(i.A.getMessage("PARAM_MISSING","position"));if(null===t.position.x)throw new Error(i.A.getMessage("PARAM_MISSING","position.x"));if(null===t.position.y)throw new Error(i.A.getMessage("PARAM_MISSING","position.y"));if(!t.time&&!t.distance)throw new Error("Parameter (s) 'distance' missing. Parameter time to calculate an isochrone, parameter distance for an isodistance");if(!t.time&&t.distance&&(this.options.method="distance",this.options.time&&delete this.options.time),t.time&&!t.distance&&(this.options.method="time",this.options.distance&&delete this.options.distance),this.options.method=this.options.method||"time",this.options.resource=t.resource||"bdtopo-valhalla",this.options.exclusions=t.exclusions||[],this.options.reverse=t.reverse||!1,this.options.srs=t.srs||"EPSG:4326",this.options.distanceUnit=t.distanceUnit||"m",this.options.timeUnit=t.timeUnit||"second",t.smoothing&&this.logger.warn("options.smoothing is DEPRECATED"),this.options.smoothing=!1,t.holes&&this.logger.warn("options.holes is DEPRECATED"),this.options.holes=!1,t.graph?("Voiture"===t.graph&&(this.options.graph="car"),"Pieton"===t.graph&&(this.options.graph="pedestrian")):this.options.graph="car",this.options.constraints=[],t.constraints){if(!Array.isArray(t.constraints))throw new Error(i.A.getMessage("PARAM_TYPE","constraints"));for(var e=0;e{"use strict";r.d(e,{A:()=>a});var n=r(2710),i=r(1097),o=r(527);function s(t){if(this.logger=n.A.getLogger("ProcessIsoCurveRequest"),this.logger.trace("[Constructeur ProcessIsoCurveRequest ()]"),!(this instanceof s))throw new TypeError("ProcessIsoCurveRequest constructor cannot be called as a function.");if(!t)throw new Error(i.A.getMessage("PARAM_EMPTY","options"));this.settings=t,this.mode=this.settings.httpMethod||"GET"}s.prototype={requestString:null,constructor:s,processRequestString:function(){var t="",e=0;switch(this.mode){case"GET":this.logger.trace("Process GET Request");var r=new o.A(this.settings).getParams();for(e=0;e{"use strict";r.d(e,{A:()=>o});var n=r(2710);function i(t){if(!(this instanceof i))throw new TypeError("ProcessIsoCurveParam constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur ProcessIsoCurveParam ()]"),this.options=t||{},this.id=this.options.id,this.resource=this.options.resource,this.point=this.options.position,this.crs=this.options.srs,this.profile=this.options.graph,this.constraints=this.options.constraints,this.reverse=this.options.reverse,this.timeUnit=this.options.timeUnit,this.distanceUnit=this.options.distanceUnit,"distance"===this.options.method?(this.costType="distance",this.costValue=this.options.distance,"m"===this.distanceUnit&&this.costValue>=5e4&&(this.distanceUnit="km",this.costValue/=1e3)):(this.costType="time",this.costValue=this.options.time)}i.CLASSNAME="ProcessIsoCurveParam",i.prototype={constructor:i,getLocation:function(){return this.point.x+","+this.point.y},getDistanceUnit:function(){return"m"===this.distanceUnit?"meter":"km"===this.distanceUnit?"kilometer":""},getConstraints:function(){var t=[];if(0!==this.constraints.length)for(var e=0;e{"use strict";r.d(e,{A:()=>a});var n=r(2710),i=r(1097),o=r(8288),s=r(1489);const a={build:function(t){var e=n.A.getLogger("ProcessIsoCurveResponseFactory");e.trace(["ProcessIsoCurveResponseFactory::build()"]);var r=null;if(t.response){if(t.rawResponse)e.trace("analyze response : raw"),r=t.response;else{var a;if(e.trace("analyze response : json"),a="string"==typeof t.response?JSON.parse(t.response):t.response,r=new s.A,!a)return void t.onError.call(t.scope,new o.A(i.A.getMessage("SERVICE_RESPONSE_ANALYSE",t.response)));"distance"===a.costType?(r.time="",r.distance=a.costValue):(r.time=a.costValue,r.distance=""),r.message="",r.id="",r.srs=a.crs,r.geometry=a.geometry;var l=a.point.split(",");if(r.location&&(r.location.x=l[0],r.location.y=l[1]),r.exceptionReport)return void t.onError.call(t.scope,new o.A({message:i.A.getMessage("SERVICE_RESPONSE_EXCEPTION",r.exceptionReport),type:o.A.TYPE_SRVERR,status:200}))}t.onSuccess.call(t.scope,r)}else t.onError.call(t.scope,new o.A(i.A.getMessage("SERVICE_RESPONSE_EMPTY")))}}},1489:(t,e,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("ProcessIsoCurveResponse constructor cannot be called as a function.");this.message=null,this.id=null,this.location={},this.location.x=null,this.location.y=null,this.srs=null,this.geometry=null,this.time=null,this.distance=null}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},6759:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(2710),i=r(8288),o=r(5851);const s={build:function(t){n.A.getLogger("RouteRequestFactory").trace(["RouteRequestFactory::build()"]);var e=t||{},r=!(null===t.onError||"function"!=typeof t.onError),s=null,a=new o.A(e);if(!a.processRequestString()){if(s="Error process request (rest) !",r)return void t.onError.call(t.scope,new i.A(s));throw new Error(s)}return a.requestString}}},5851:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(2710),i=r(1097),o=r(2785);function s(t){if(this.logger=n.A.getLogger("RouteRequestREST"),this.logger.trace("[Constructeur RouteRequestREST ()]"),!(this instanceof s))throw new TypeError("RouteRequestREST constructor cannot be called as a function.");if(!t)throw new Error(i.A.getMessage("PARAM_EMPTY","options"));this.settings=t}s.prototype={requestString:null,constructor:s,processRequestString:function(){this.logger.warn(" PROTOTYPE !");for(var t=new o.A(this.settings).getParams(),e="",r=0;r{"use strict";r.d(e,{A:()=>o});var n=r(2710);function i(t){if(!(this instanceof i))throw new TypeError("RouteParamREST constructor cannot be called as a function.");this.logger=n.A.getLogger(),this.logger.trace("[Constructeur RouteParamREST ()]"),this.options=t||{},this.resource=this.options.resource,this.start=this.options.startPoint.x+","+this.options.startPoint.y,this.end=this.options.endPoint.x+","+this.options.endPoint.y,this.intermediates=this.options.viaPoints,this.profile=this.options.graph,this.crs=this.options.srs,this.constraints=this.options.constraints,this.optimization=this.options.routePreference,this.getSteps=this.options.geometryInInstructions?"true":"false",this.distanceUnit=this.options.distanceUnit,this.timeUnit=this.options.timeUnit,this.waysAttributes=this.options.waysAttributes}i.CLASSNAME="RouteParamREST",i.prototype={constructor:i,getIntermediates:function(){var t=[];if(0!==this.intermediates.length)for(var e=0;e{"use strict";r.d(e,{A:()=>l});var n=r(2710),i=r(1097),o=r(8288),s=r(2993),a=r(7868);const l={build:function(t){var e=n.A.getLogger("RouteResponseFactory");e.trace("RouteResponseFactory::build()");var r=null;if(t.response){if(t.rawResponse)e.trace("analyze response : raw"),r=t.response;else{var l;if(e.trace("analyze response : json"),l="string"==typeof t.response?JSON.parse(t.response):t.response){if(l.message)return void t.onError.call(t.scope,new o.A(i.A.getMessage("SERVICE_RESPONSE_EXCEPTION",l.message)));var u=[],c=[],h=[];if((r=new s.A).hasOwnProperty("totalTime")&&(r.totalTime=parseFloat(l.duration)),r.hasOwnProperty("totalDistance")&&(r.totalDistance=parseFloat(l.distance)),r.hasOwnProperty("bbox")&&(r.bbox.left=parseFloat(l.bbox[0]),r.bbox.bottom=parseFloat(l.bbox[1]),r.bbox.right=parseFloat(l.bbox[2]),r.bbox.top=parseFloat(l.bbox[3])),r.hasOwnProperty("routeGeometry")&&!t.geometryInInstructions&&(r.routeGeometry=l.geometry),r.hasOwnProperty("routeInstructions")&&t.geometryInInstructions){var p,d=l.portions;if(Array.isArray(d)&&d.length)for(p=0;p{"use strict";function n(){if(!(this instanceof n))throw new TypeError("RouteInstruction constructor cannot be called as a function.");this.duration=null,this.distance=null,this.code=null,this.instruction=null,this.geometry=null}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},2993:(t,e,r)=>{"use strict";function n(){if(!(this instanceof n))throw new TypeError("RouteResponse constructor cannot be called as a function.");this.totalTime=null,this.totalDistance=null,this.bbox={left:null,right:null,top:null,bottom:null},this.routeGeometry=null,this.routeInstructions=[]}r.d(e,{A:()=>i}),n.prototype={constructor:n};const i=n},7372:(t,e,r)=>{"use strict";r.d(e,{A:()=>h});var n=r(2710),i=r(1097),o=r(8288),s=r(895),a=r(7966),l=r(6759),u=r(3753);function c(t){if(!(this instanceof c))throw new TypeError(i.A.getMessage("CLASS_CONSTRUCTOR","Route"));if(this.CLASSNAME="Route",s.A.apply(this,arguments),this.logger=n.A.getLogger("Gp.Services.Route"),this.logger.trace("[Constructeur Route (options)]"),!t.startPoint)throw new Error(i.A.getMessage("PARAM_MISSING","startPoint"));if(null===t.startPoint.x)throw new Error(i.A.getMessage("PARAM_MISSING","startPoint.x"));if(null===t.startPoint.y)throw new Error(i.A.getMessage("PARAM_MISSING","startPoint.y"));if(!t.endPoint)throw new Error(i.A.getMessage("PARAM_MISSING","endPoint"));if(null===t.endPoint.x)throw new Error(i.A.getMessage("PARAM_MISSING","endPoint.x"));if(null===t.endPoint.y)throw new Error(i.A.getMessage("PARAM_MISSING","endPoint.y"));if(t.outputFormat&&"json"!==t.outputFormat&&this.logger.warn("options.outputFormat could only be json"),this.options.outputFormat="json",this.options.resource=t.resource||"bdtopo-osrm",this.options.startPoint=t.startPoint,this.options.endPoint=t.endPoint,this.options.viaPoints=t.viaPoints||[],this.options.routePreference=t.routePreference||"fastest",t.graph?("Voiture"===t.graph&&(this.options.graph="car"),"Pieton"===t.graph&&(this.options.graph="pedestrian")):this.options.graph="car",this.options.constraints=[],t.constraints){if(!Array.isArray(t.constraints))throw new Error(i.A.getMessage("PARAM_TYPE","constraints"));for(var e=0;e{"use strict";r.d(e,{A:()=>c});var n=r(4154),i=r(2366),o=r(1520),s=r(6064),a=r(9338),l=r(7372),u=r(7180);const c={getConfig:function(t){new n.A(t).call()},getAltitude:function(t){new i.A(t).call()},geocode:function(t){new o.A(t).call()},reverseGeocode:function(t){new s.A(t).call()},autoComplete:function(t){new a.A(t).call()},route:function(t){new l.A(t).call()},isoCurve:function(t){new u.A(t).call()}}},3474:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n={normalyzeParameters:function(t){var e=null;if(t){var r=[];for(var n in t)if(t.hasOwnProperty(n)){var i=t[n];i||(i=""),r.push(n+"="+i)}e=r.join("&")}return e},normalyzeUrl:function(t,e,r){var n=t;if(t){if(t.split("?").length-1>=2){var i=t.search(/\?/)+1;n=t.substring(0,i)+t.slice(i).replace(/\?/g,"&")}var o=t.indexOf("?");-1===o&&(n+="?"),-1!==o&&o!==t.length-1&&(n+="&")}return e&&(n+="string"==typeof e?e=e.replace("?",""):this.normalyzeParameters(e)),r&&(n=encodeURIComponent(n)),n},indent:function(t,e){return new Array((t||0)+1).join("\t")+e}}},2710:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=r(3065);const i={getLogger:function(t){if(void 0===e)var e={env:{VERBOSE:!1}};e.env.VERBOSE?n.enableAll():n.disableAll();var r=t||"default";return n.getLogger(r)}}},1097:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n={PARAM_MISSING:"Parameter(s) '%var%' missing",PARAM_EMPTY:"Parameter(s) '%var%' empty",PARAM_TYPE:"Wrong type(s) for parameter(s) '%var%'",PARAM_FORMAT:"Parameter(s) '%var%' not correctly formatted",PARAM_NOT_SUPPORT:"Value(s) for parameter(s) '%var%' not supported",PARAM_NOT_SUPPORT_NODEJS:"Value(s) for parameter(s) '%var%' not supported to NodeJS",PARAM_UNKNOWN:"Value(s) for parameter(s) '%var%' unknown",SERVICE_REQUEST_BUILD:"An error occurred during the request building of the service",SERVICE_REQUEST_EMPTY:"The request sent to the service is empty",SERVICE_RESPONSE_EXCEPTION:"The service returned an exception : '%var%'",SERVICE_RESPONSE_EXCEPTION_2:"The service returned an exception",SERVICE_RESPONSE_ANALYSE:"An error occurred while parsing the response '%var%' of the service",SERVICE_RESPONSE_ANALYSE_2:"An unknown error occurred while parsing the response",SERVICE_RESPONSE_EMPTY:"The response of the service is empty",SERVICE_RESPONSE_EMPTY_2:"The response from the service could not be analyzed or is empty",SERVICE_RESPONSE_FORMAT:"The format of the service response is not supported (handled format(s) : '%var%')",SERVICE_RESPONSE_FORMAT_2:"The format of the service response is not supported",SERVICE_RESPONSE_FORMAT_3:"No suggestion matching the search",CLASS_CONSTRUCTOR:"'%var%' constructor cannot be called as a function.",getMessage:function(t,e){if(0===Object.keys(arguments).length)return"Message indefined !";var r=Array.prototype.slice.call(arguments),n=r.shift(),i=r,o=this[n];try{o=Array.isArray(i)&&i.length>0?o.replace("%var%",i.join(" - ")):o.replace("%var%","%var% (not specified)")}catch(t){}return o}}},3065:function(t,e,r){var n,i;!function(){"use strict";n=function(){var t=function(){},e="undefined",r=typeof window!==e&&typeof window.navigator!==e&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"],i={},o=null;function s(t,e){var r=t[e];if("function"==typeof r.bind)return r.bind(t);try{return Function.prototype.bind.call(r,t)}catch(e){return function(){return Function.prototype.apply.apply(r,[t,arguments])}}}function a(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function l(n){return"debug"===n&&(n="log"),typeof console!==e&&("trace"===n&&r?a:void 0!==console[n]?s(console,n):void 0!==console.log?s(console,"log"):t)}function u(){for(var r=this.getLevel(),i=0;i=0&&e<=c.levels.SILENT)return e;throw new TypeError("log.setLevel() called with invalid level: "+t)}"string"==typeof t?p+=":"+t:"symbol"==typeof t&&(p=void 0),c.name=t,c.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},c.methodFactory=r||h,c.getLevel=function(){return null!=l?l:null!=a?a:s},c.setLevel=function(t,e){return l=m(t),!1!==e&&d(l),u.call(c)},c.setDefaultLevel=function(t){a=m(t),g()||c.setLevel(t,!1)},c.resetLevel=function(){l=null,f(),u.call(c)},c.enableAll=function(t){c.setLevel(c.levels.TRACE,t)},c.disableAll=function(t){c.setLevel(c.levels.SILENT,t)},c.rebuild=function(){if(o!==c&&(s=m(o.getLevel())),u.call(c),o===c)for(var t in i)i[t].rebuild()},s=m(o?o.getLevel():"WARN");var y=g();null!=y&&(l=m(y)),u.call(c)}(o=new p).getLogger=function(t){if("symbol"!=typeof t&&"string"!=typeof t||""===t)throw new TypeError("You must supply a name when creating a logger.");var e=i[t];return e||(e=i[t]=new p(t,o.methodFactory)),e};var d=typeof window!==e?window.log:void 0;return o.noConflict=function(){return typeof window!==e&&window.log===o&&(window.log=d),o},o.getLoggers=function(){return i},o.default=o,o},void 0===(i="function"==typeof n?n.call(e,r,e,t):n)||(t.exports=i)}()},3092:(t,e,r)=>{"use strict";var n=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==r.g)return r.g;throw new Error("unable to locate global object")}();t.exports=e=n.fetch,n.fetch&&(e.default=n.fetch.bind(n)),e.Headers=n.Headers,e.Request=n.Request,e.Response=n.Response},2938:t=>{"use strict";t.exports=ol.extent},7304:t=>{"use strict";t.exports=ol.format.GeoJSON},9583:t=>{"use strict";t.exports=ol.layer.Tile},996:t=>{"use strict";t.exports=ol.layer.Vector},2947:t=>{"use strict";t.exports=ol.loadingstrategy},9201:t=>{"use strict";t.exports=ol.proj},3668:t=>{"use strict";t.exports=ol.source.Vector},8062:t=>{"use strict";t.exports=ol.tilegrid},9032:t=>{"use strict";t.exports=JSON.parse('{"rE":"3.4.6","p6":"19/12/2024"}')},8330:t=>{"use strict";t.exports=JSON.parse('{"rE":"1.0.0-beta.1-318"}')}},__webpack_module_cache__={};function __webpack_require__(t){var e=__webpack_module_cache__[t];if(void 0!==e)return e.exports;var r=__webpack_module_cache__[t]={exports:{}};return __webpack_modules__[t].call(r.exports,r,r.exports,__webpack_require__),r.exports}__webpack_require__.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return __webpack_require__.d(e,{a:e}),e},__webpack_require__.d=(t,e)=>{for(var r in e)__webpack_require__.o(e,r)&&!__webpack_require__.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),__webpack_require__.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var __webpack_exports__={};(()=>{"use strict";__webpack_require__.d(__webpack_exports__,{default:()=>Kn});const t=ol.control.Control;var e=__webpack_require__.n(t);const r=function(){return""!==getComputedStyle(document.documentElement).getPropertyValue("--blue-france-sun-113-625")};function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function i(t,e){(function(t,e){if(e.has(t))throw new TypeError("Cannot initialize the same private elements twice on an object")})(t,e),e.add(t)}function o(t,e,r){if("function"==typeof t?t===e:t.has(e))return arguments.length<3?e:r;throw new TypeError("Private element is not present on this object")}function s(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=Array(e);r0&&r[0].getElementsByTagName("button")[0].click()};const S={onPanelOpen:function(){w(this.options.position,this.element.id.match(/(\w+)-[0-9]+/)[1])}},E=ol.Overlay;var x=__webpack_require__.n(E),M=__webpack_require__(9201),R=__webpack_require__(2987),T=__webpack_require__(7278),P=__webpack_require__(5844),G=__webpack_require__(2536);const N={lightOrange:"data:image/png;base64,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IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjkyYWVkNjM2LWY3MDMtNDAzOC1hNzM4LWZiYzYxYzZlMTljNCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5NWMzZWI3NC0zYWRmLTRkYzUtOWZjZS1iODQ4NTc3Nzg4ODQiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0NjI3ZDg3NC1lZDIyLTRiZTUtYTlkNS00NDlmMzVhZDIxYzgiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5Mjc4OTUzMDYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphM2U3ZWQ1MS0xNTI4LTRhYjAtODVjOS0zNzNkNzgxZGM2ZmMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjI3KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PofUkY4AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGRuA4VZTAAAFcElEQVRYw82YW2xbVRaGv7XP8bHjXByHQkNhWigdVX1AikRBMBoQ8wASl4fRqPDAAxIPKAVxeRqQRohHBEVCaoGKUBCl4qHcNKCZVKMRRQxtgTaACLRKqlwB14NzM2ni2D2XvXjgBFXQOnFiA1uy/HB89u9/7bX+vf4l1HnpK57hTNCE0AzqAS5gAAuEID5KiWSiLPf4tp7YUjcSu4yLZzdi2IJyNXANcBlwAdAKzAHTwDhwDKEPywC+GZWHbPi7IKOvZIWguAnlr8BtwJ+AxDJeDYCPgF6Ed0hkh+Weov5mZLTHJMDeBjwYk0itYJtKTOpZML3SbYNfnYz2SBr0buARYENcFytdFvga2AGyT7p14Vcjoz3ShOgdKDuAi+pUewpMIDyCypvSreWGk9HdroOEV2F4A1hfTxGJCX2D5U7U/UzuD6NaXq49NRJhBsOjwMVLEtE4gaL4W5cV3IsxPEoizDT0ZLTHcSH6M/BWLLlVwpQKuPzhb+i8sRkv04Y/e5rvPigxtnM9trKU2k0D28A5LN3RsmXbrbFOU8DtQLpqfJqu97nh6TydmzvwWpOI8VDbxqbrkmz62yk+/Ps6yoe8KkeV/hHHfgrMNyrNEkBX1SAktgRs3T7ApV1rSWayiEkDLmLSJDNZLu1ay9btAyS2BEsEuWuZ99WKyRhgHeCcn8wGw/qbOnAS3jmfOwmP9Td1kNhQDduJcUwjyciS0RJXMMkWkPPUo/z4XFxZRhZII8mEwFCsT+f5xXTE7FAOteduItVaZodyhNPVZDeKccJGkxmsChIMOvTt6aRSzIP+7A9rRKWYp29PJ8GgsyqcVauZSADaj+IDTecWvBlD4e01HKjM07XtOOuuy+A2X0BYmib/8SxfvLWRYm8LdqZaCvkI/SDBci6nld0ze7KCLa4F3gSurR4MB5x1FnMhiCeor9hJiPKmWpbGp3EU2IbJFuTe5XfStbczLxgP7K0IPcCFDWhnJoFuMAek2/oNbWdku/WxHATejT1JPZcPvINysFYiK+gAFkXTK6H+MyhXADeseJ9fmrVDM6X080/+p1M2/yFsD1zjEIauEeMAqNpQE16oaKiqwfjYeLk+fuYl10HDq7DsBTavxs8o6FzFKez/dM3rLx9LjUyVxcb7yVkfzmpXFbACJURHIxgyxkyu1ml6qL0Z4YX4xl7Jfrrgm9Ov9bX/e++x1tHCgkQ11lgELGA4sBp3iHRbH5GDwJPAFLXo6KJnDmTh/aG2w2/3t47VSGQxs1zAE9U2s9pEjx3hXuBloCa7G1rxv8o3f/7SkUz/UFFWMqGRWMpHAqsDbl00KGotIXM7MawF7gKSS5oJJRospI7v+rD96Ikp8aV2EgrkVPW4OnIy6SVL9ZubvZgyaOVyYDfwl2oNqVWiXNEb231oTe+/BrzvK9Gy01MFyoiOKzIEmqsEfjGf/39U1yHgosJFUXhlFMl+z9E/nkvhVNHZsjux+9Caf77RnyzMBaJLmW4RrWAlB3Y4Uh13HLOA4wQjo6O2IRPNxVV4JuG5Et2SSelzjtFLzsZQ0NIZ8/2rx7K9+/paxqbKvyh4Bc4AFQxzau23Dow7FS+nHmfEUz05OqINH8+evXJPJVOuE93XkY4eSziaXcQpB2b+vZNt7+/8IPPl2OxPRMJ4dDsLzIho3hpzamJ6aqJ0ei6qtZAasmZ2OS1RyOMd6egBIzSFVoKj4y1Hnvhv+8cD02ZOkEmgIKITVnXKWDs1ksvNrgbTbRSZ46cypY50aWcllIsyKXvr8GTyi9f6WvePFGVQhO8EPW2NzI+OfV2pF2bDTgbg8D/aJeVUspd1BK3/G24u7/skO3+iYP3h3LdhI/B+AGodUpo8WKwoAAAAAElFTkSuQmCC",darkOrange:"data:image/png;base64,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czpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjIxNDZjMzUzLWIxZjItNGVjOC04NzQ3LTIwMGEyYWExM2ViMyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2NGViNmI2Ni03Y2I2LTRkZGUtYTI3OS01MGY0ZWFiZGFhODAiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1ODRhM2VjZC1kNGFmLTQ3NjItYjA1ZS04ODk2MGQ4ZTk0Y2MiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5MDM3ODI2MTQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxYzNjOGRkZi1kMjVkLTQ4YzQtYTAwYS0yMmU3ZDYwMzg1YjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjAzKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PuhCAHgAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGQOTjc4FAAAFdklEQVRYw82YW2gcZRTHf+eb2dlkc9lsrFYr2notfSgWxKKiog8VvIFI9UFQEaWtYPFJfREfRRSEeqlttViLD/WGisYXrShWpfWC1WpSN5eN3cZumkuTzWY3c/mOD9lI0WSTTXbVA8M8zMz3n//5zvl/5xyhxqb3ewYvaERpAvUAFzCABUIQH6GAHyvKa76tJbbUjMRW4+LbC7GsQbgCWA+sAs4AWoA8MAxkgEMo32LoxDO98oIN/xdk9IGUYEYvRrgduAW4Gogt4NMA+BroQHkfm+qW3aP6n5HRTSYG9hZga5lEwyKWKZVJvQCmQ3bZ4F8no5skAXov8BiwspwXizUL9APPgOyVXTr5r5HRzdKI1TsRngHOqlHuKTCI8hhG3padWqw7GX3IddDwcixvAefXUkTKhH7HcBfifi8vh1E1H1cfGkGYxPI4cM68RGw5zf3y3S7IuedgeZwgTNZ1Z3Sz46LRNcA7Zcmd25yGgPWP/M7q65toTLZSHBvn6OcFDm07n6g0n9oNAxsR54DsjBYs2251QWAbgFuBREX/tF3rc9+zA6xa3U5jSxwxHmpbueyqOOvvOM7rj67g1JfedFTNagngVtR+B0zUK8xiwLqKTmhcE3Dblk4uXbecRDKFmATgIiZBIpni0nXLuW1LJ41rgnmcvG6B59WiyRhgBeDM+UZipWHthnbcmDf7b8Y81m5oJ7GyErZTxjH1JCPzesu4ghtvBpkjH2X6uXFlAVEg9SMjhEAamFsyp4Yjcuks1s6uXdZacuksU8OVZDcC0mW8OpFRQqBruvqdwwpdDh+9cjaF0QHQv/2wRhRGB6afdzkVkKZxtDoyVaqZBKCHEXygcXafjhi63l3G9tIEGzYe4ZKrksSbzmCqMEz6mzE+eedC+juaiUYqhZCPchgkqKB4SzxntqQEO7oceBu4srIzHIitsMTOBOMJ1leCkxAMmEpRWt6Vg8BGTConOxZeSVdfzmwxHmpvRtkJnFmHcuYksBkxH8tO69e1nJEd1sdhP/BBuUippfnA+3jsr5ZI9TnzV33mFcB/DuEi4LpFr/PPZu3LkanES08fOltWnxe2Ba5xCEPXiHEAVG2oMS9UNFTVINOXKdamn3nQdSC8HMMeYPVS+hkFzQdObl9m2Zu7+xt6hkKx5fXktGumdNXyZQUKiPZGkDbGnFxqp+kh9kaUHeUTezHr6WRkxt/oa/toT39Lby6QqMoci4BJDB8vpTtEdlkflf3A08AQ1ejoTM8cyeRnudYD72Zb+qokMhNZLuCJaqtZaqDLLi0i7EHYDVTV7oZW/J9PNf3wanfycLoki5nQSFnKewKrnW5NNMhtKRDlt6EsB+4G4vM2/UrUNd5w5Pl028FfiuJL9SQUyKrqEXXkaNyLF2o3N9vUYKB0AbAduKFSQWqVKFv0+rYfXdbx4aB3qqQLDk8VKCKaUSQNmi0F/ujAwB9RTYeAMwoXabg2QvZ5jl4ym8Ip6FjgDm7/bdl7bw3Ec/lItEJyWyAS0RJWsmC7I9WM45hJHCfo6e21dZlozlju3pjnSnRT0tMXHdFzT8dQ0EJoTr2eSXXs7W/uG/pnwiswBZQw5NXaYw5knJKXVY8p8VSP9vZo3cezp1v2nniDK9FD7V70RMxoaganGJmJT0+0frbtt+RPfVN/EQnLo9sxYEREB6wxxweHhwYL4/mo2kSqi43c5zRH8GS7Fz1shMZQJTg41PzVU7+2fdNZNHlBTgI5ER20qkPG2qGebHZsSTpULzJH8slCe6ywrWTlrGTM3tw9Ef/xjUzLvp6idIlwQtBxa2Sit6+/VCvMuu0MwIE726RBSqlViaDli6Gm4t6e1MQveet3Z4+F9cD7Ewo4WRJBbaaSAAAAAElFTkSuQmCC",red:"data:image/png;base64,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293bv2fa/f0ASM5yljz/NiUAAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmI5YjA2YTAwLWZkOTQtNDc5MC1hNzIzLTlkMGUwNGRiNTRlNyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1MTQ3ZGU5Yi1kOTA0LTRlNWYtYjIyYy0wZmMzOGRmMWI3ZGEiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YzBjNTI2YS1lYTkyLTQxYWItODM5Yy05OWFhYTM0YjdlYzciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE2NDAxNTU0MjYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowMjQ4MDc5ZS1kMTYyLTQxZmItOGViYS1lMzY2NTRiNGRjMjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjIwOjQwKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PkaovgIAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPFCiKn0kIAAAFfUlEQVRYw82YTWxc1RXHf+e+N2/GH+Px2IEEV02AgqIsIkwgoYS2ahepVGCBUOiCRRdsAAnECthErBBCICGFj4gqRQqBRSABUrVm1URtCSATJ5ASZCPHH0kGgx1/xJl5nvH7uIcFY4iIM/GzZyhHenqL994993/u+f/fOUeos+nNnkHCJoQWRD0UFzCARYhQCVB8NFWWTwNbT99SNxC3GZfIXg9sADYDWxCuRekEskARYQplFPgEOAr045ph6bXRzwKM3pEX5mduQLkHuAvYCqSW8GkIfAT0IBwknT8lH87o/w2M3mpSqL0LeLQKIrOMZSpVUC8hpkf6bPiTg9FbpBn0L8ATwLoqL5ZrFjgNPAeyV47p3E8GRjdLE6r3oTwHXF0n7ikwgfAEIvvlqJYbDkY3uw4a3YLyNrC2niJSBXQG4c+Ie0yORnGSj5OnRhzlUJ4ErrkikBAoAjPVe7ik4F6D8iRxlGvoyegmx4X4NwgHgM6a8fUyIfc8doZbf99Ca66N0uwF+v7tc3DnWoJK6gqep1C2g3NEjsdLlm03GXSbAe4GmmvGZ91vA3Y8P8aN6ztoyaYxxsPaNrbcnmbbvV/x9ONdnPnA+w71otaMcDfYPqDUmDQTUgjdNYPQsSHkgYf62di9mmwujzHNgIsxzWRzeTZ2r+aBh/rp2BDWDLLQjSzpf7VMMIpB6QKcy77Tuc6wdVsHbspbfJspj63bOuhcV8u3g9KFJtufWQbHakfLdQUv3YrI4qwQ+e65616Jr6mknE4KJgIGgctLZnEq5vRgAWsXLyKttZweLFCcqiW7cdVP1DgwQoQwUNPJxIDDG7vXMDszBvqjDWvM7MwYb+xew8SAUzNowgCSDEwyNVMJQU8AAdC06DvBtOG/76xirlLi3u0nufn2HJmWTir+FJ9+PMu7B66nr6eVYLpWCgUoJ0DCGoq3wv/MbXkhmlkN7Ad+XTMY4kBTl6XlKnA8IQ4U/xyUx8wlB3ZpKvcC23Hz49K79Ep6GeWM8VB7J8pfgasaUM6cAx5EzPvSZ4OGljNy1AYIh4C/L6lASWYBcBCHQ0mBJOfM94rk+WjwAsKvgN8te51LK7kPpm3zK89OrZH1v4zaQ9c4RJFrxDgAqjbSlBcpGqlqODoyWq5TP1OtnoU9wPqV9DMKWlRnfJ+/6q3XKpmhSRVbXU8uuhb6Hq1eVsBHdDiGQWPMuZV1mpuMB/aPCK8CXcsMjs6pufCm3/7PPZXs8LhKnJBjMTCH4f2VdIfIcRsgcgh4FpgkiY4u9Mwqc4fn2468M58dSQhkIbNcwBPVNrPSRJdjWgb2AK8BidrdSCX4PGw5/re53IlBK8uZ0EhVyodCq/1uXTTIzfrExZ0oq4H7gfQSmv54IMqcfNFv7/0ilkCSg1CgoKon1ZEv017ar9/cbEvGEFeuQ9mF8IdaBamFuBB7I7tKq3r+EXjnK0tPTxUoIzqqyCBooRIGM2NjX8d1HQIuKFys0cYY2eeJ3riYwinorHUndvmr3nt7Pj1eVNEa5LZALKIVrBTAnopVRx3HzOE44dDwsG3IRHPBxrtTnkv8p5yjLzvoLy72oaC+mvOvz+V79pZbRyYvJbwC80AFQ1GtPevAqFPxCuoxL57ql8ND2vDx7MVW2JTOuMQPdxDvSInmF/yU1ZT+Nd92eGcp97+RH4BE1XHHLDAtomPWmK8mpiYn/AvFOCmRGmLTm53WOOKpDhM/YqApQsLe+dYPnym1f9xvTVGQc8C4iE5Y1Ulj7eRQoTC7Ih1qFJiTQc7vwN9ZUbk6Z+ydp6L0Z2+Ws/uGrAyI8I2gF6yR0vDI6Uq9fDbsZACO3NQuGa3kr3XC7H+ClvJeP1/6IrbBqbNno0b4+xbMlmARngcRbAAAAABJRU5ErkJggg==",turquoiseBlue:"data:image/png;base64,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/MUi8H5G35QHBm+BvjV3bu1znD4AWZpV+gY4OARGS5S97vHu3u65/XunPb8fN2tyj8UDOK0AAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjEwNGNlNWFhLTE1YzctNGI4Yi1iOGU1LTFmYWQyNWFiYzBhZCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpkNDMyZTY1Zi0xOThhLTQxM2EtYWYyMy1jNzhlNzczNGRlN2QiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyNzExODVkMi03MWZiLTRhZDMtYTJmMi1iNjM3OWU3MDc1OTEiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE4NjYyMzgzMjQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NGFiYzNkYS1lZWJiLTRlZjctYjdjNS04ZDRjODY5OGVjODMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI0OjI2KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pj0tlUwAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGBru/VeEAAAABmJLR0QA/wD/AP+gvaeTAAAFO0lEQVRYw9WYe2xTVRzHTx97dYS5B1UHa+/tY12dDoOKWyIGlfgHkCkSNTHGwHxA3NiAP/A5x4CMKEzdYL29YyAyBxKQZbI+NvYIaowaH9Ogi2GRbGjcFrbBNrq2a2/9nq5LCFnbbfSOeZJPTs/t6Tm/7/39zu+cU0IiXc7WSImNX0BsZiVYAhigmah5tHklsZrjSYtJSuZtaeSiiJU3gHUwfC9oARfBIHBP1DzaPH1eRuzmp0E6aTgSNX9EWMwSvOkMGPgG+CpguG8a0H7nA78zkMYqye0V0lYXDSHrYUw7cE5TxM04/b+38+vJ+RPRt0eIjVeAAhhyCQizFDKJEBjndaCY49Di4+CRlzFxfwSE3Ciol9i4DSBujoRUy7HIszFxdwSF3CioBy8qm1g5ufhirHwyJqwHrrDGWTlg8hFL1URN2+EF0XFPkyYuSWwhUVgnT2CygXBG3dFcM7bz1/au1u7OK9/93eWidUlHe1dCc810EsUAsXOPQZCI3rGZ6Wb4EXAEM0SCUFnZduz6T/09l4bHXYOCz+f0+XxeWg+7XYM/4vnKtlqHJHSIOrAHlYMFYmawRNCKycaDGZLVfMRdf/nPDpfXM+abotDnpy93dtzXfNgdZg+im2uimJ6h66UTeIMZsrat1jvkdPRRb/imLt4hl6N3DfqFEIPvOMzDJYspJsWfbUKEyFNttcKoyzkKo4UgYoRRt3OE9guT1br984nsmQ7gCWbIipaj4xeu9v/hFQTPlG7B89+u9v9O+4UQQ8f/BSlaVM8kgBOhji4p9mpvwQ+Wfwddjp6bQw2u8g44HT3535/tTUa/0Eccvg4sFDE1m2PBZkx2LVRqVcLQvG/PDDX1/tVxze38x+UZH6O1He28b764qgwtxOcf327eBGLFE9NikiD3qzDZhVBJgCJH3KubDnkfbD4s5Jw74qM1bcvDnxq8/vHt1SrS9InIJ2m7OQ4UYsKhCB9lJqHj0gPsHJzPvsS9w8rRRPDptI40M8PlH9fOJ5M5K008rsZmIwi5gc4QN9Zja8zn+5epch9PTFepU1iGuVunVqeyS9g0iv8zy96l0WiSjIsXx28iJEJhaONkMGB5YP14bkmI1SzIz1T0pRa9VKnNzCjUMcwWUAS2BtgWYLJN+xTo1OyrOhW7xsAwqnSGkd3i+uGjkT5Xw6DLt3AdEKQNB4YXbdtwQpuVuRtG7pwhxWA7vJgRib0nDuSDvtkIkjYcHE3aVWjRLL9/zyyETPK2Vq3OidAaOhiPDLcbxo3MRIik0eReWPnO15pHHiqbpYhS6hkNw7wAz0To6GM5hAzH3wkDa6b7x4bEwnkUfMnP6idX7Nex7GxElIDNerV6hU6jSdbp9RHck2w0w/FaGGoJm7KtnCfmWNlF1fOrK3Q6bekMRFABO7QM8yxewFLUi+5JSxPpAmcxy0gjt1Rytir4NcHKCfJTH/al5j1j1hr0pWEML55YD+x2GP6cVqNZZjQYEvUsG4vP4v8jKju5L1p6qnytxGKa6qogyOorBpVbXvxMe69xdxABb9I0DAGvIIRWp7NsBsJIoWVZKfaXuf+jMKp2b6z8+Adb4aErNwpCCh5J2pnfoH0ga08g7invBfaQjXjjuQifhyEgLdNolJP5UqR17y+QnSwvk1i565OZK6F8RzubvWwvDH8LvKZnmHXY8HKws+sNLJtI5muJ/7hYElOzJ1V+fN9R7CVDClPJOVXuqo06vS4HQjTwgDKDZRXk/1JiD7wrieFLk6T1lczCXUVK7aPZinS9XrTw+Q+Tql7SUmvGuQAAAABJRU5ErkJggg==",defaultOffset:[-25.5,-32]},O=ol.interaction;var k=P.A.getLogger("interactions");const L={_extensions:["Measures","ElevationPath","Drawing"],_options:{current:null,clean:null},unset:function(t,r){k.trace("unset()");var n={};G.A.mergeParams(n,this._options),G.A.mergeParams(n,r);for(var i=t.getInteractions().getArray(),o=0;o-1){if(n.current&&n.current===a)continue;i[o].setActive(!1);var l=s.source;if(void 0!==l&&l instanceof e())for(var u in n)if(n.hasOwnProperty(u)){if("current"===u)continue;if("function"==typeof l[u]){var c=Array.isArray(n[u])?n[u]:[n[u]];l[u].apply(l,c)}}}else i[o].setActive(!1)}}};var D;const j={generate:(D=Math.floor(Date.now()),function(){return D++}),name:function(t){var e=null,r=t.lastIndexOf("-");return e=-1===r?t:t.substring(0,r),e},index:function(t){var e=null,r=this.name(t),n=r.lastIndexOf("_");return-1!==n&&(e=r.substring(n+1)),e},uuid:function(t){var e=null,r=t.lastIndexOf("-");return-1!==r&&(e=parseInt(t.substring(r+1),10)),e}};var U={modulo:function(t,e){var r=t%e;return r*e<0?r+e:r},decimalToDMS:function(t,e,r){var n=this.modulo(t+180,360)-180,i=Math.abs(3600*n),o=r||0,s=Math.pow(10,o),a=Math.floor(i/3600),l=Math.floor((i-3600*a)/60),u=i-3600*a-60*l;return(u=Math.ceil(u*s)/s)>=60&&(u=0,l+=1),l>=60&&(l=0,a+=1),{d:a,m:l,s:u,direction:e.charAt(n<0?1:0)}},dmsToDecimal:function(t,e,r,n){var i=t+e/60+r/3600;return"S"!=n&&"O"!=n||(i*=-1),i},coordinateToDecimal:function(t){var e={};return e.lat=t[1].toFixed(6),e.lng=t[0].toFixed(6),e.unit="°",e},coordinateToDMS:function(t){return{lng:U.decimalToDMS(t[0],"EO",2),lat:U.decimalToDMS(t[1],"NS",2),unit:"DMS"}},coordinateToRad:function(t){var e={},r=.017453292519943295;return e.lng=t[0]*r,e.lng=e.lng.toFixed(8),e.lat=t[1]*r,e.lat=e.lat.toFixed(8),e.unit="rad",e},coordinateToGon:function(t){var e={},r=1.1111111111111112;return e.lng=t[0]*r,e.lng=e.lng.toFixed(8),e.lat=t[1]*r,e.lat=e.lat.toFixed(8),e.unit="gon",e},coordinateToMeter:function(t){var e={};return e.x=t[0].toFixed(2),e.y=t[1].toFixed(2),e.unit="m",e},coordinateToKMeter:function(t){var e={};return e.x=(t[0]/1e3).toFixed(2),e.y=(t[1]/1e3).toFixed(2),e.unit="km",e},toInteger:function(t,e){var r=parseInt(t,e||10);return!isNaN(r)&&isFinite(r)?r:null},isInteger:function(t){if(isNaN(t))return!1;var e=parseFloat(t);return(0|e)===e},toFloat:function(t){var e=parseFloat(t);return!isNaN(e)&&isFinite(e)?e:null}};const z=U;const q={advancedSearchFiltersByDefault:{PositionOfInterest:[{name:"category",title:"Type",value:["cimetière","aérodrome","réservoir","administratif","construction linéaire","construction ponctuelle","construction surfacique","cours d'eau","détail hydrographique","détail orographique","équipement de transport","plan d'eau","poste de transformation","terrain de sport","transport par câble","zone d'activité ou d'intérêt","zone d'habitation","lieu-dit non habité"]},{name:"postcode",title:"Code postal"},{name:"citycode",title:"Code INSEE"}],StreetAddress:[{name:"city",title:"Ville"},{name:"postcode",title:"Code postal"},{name:"citycode",title:"Code INSEE"}],CadastralParcel:[{name:"departmentcode",title:"Code département (INSEE)",description:"Code INSEE du département (ex: 01, 94)"},{name:"municipalitycode",title:"Code commune (INSEE)",description:"Code INSEE de la commune : 3 chiffres (ex: 067)"},{name:"oldmunicipalitycode",title:"Commune absorbée",description:"Commune absorbée : 3 chiffres (ex: 000, 001)"},{name:"districtcode",title:"Arrondissement",description:"Arrondissement : 3 chiffres (ex: 004, 012)"},{name:"section",title:"Section",description:"Section Cadastrale : 2 caractères (chiffre et/ou lettre)"},{name:"number",title:"Numéro",description:"Numéro de la parcelle : 4 chiffres (ex: 0041, 0250)"},{name:"sheet",title:"Feuille",description:"Numéro de la feuille cadastrale"}]},zoomToResultsByDefault:function(t){var e=15,r=t.service,n=t.fields,i=t.type,o={1:11,2:12,3:13,4:14,5:15,6:16,7:17,8:17};return"SuggestedLocation"===r&&"PositionOfInterest"===i&&(e=o[n.classification]),"GeocodedLocation"===r&&"PositionOfInterest"===i&&(e=o[n.importance]||14),"StreetAddress"===i&&(e=17),"CadastralParcel"===i&&(e=17),e}};const F={getGeocodedLocationFreeform:function(t){var e=t.placeAttributes;if(e.label)return e.label;if("PositionOfInterest"===t.type){var r=e.toponym;return e.category&&Array.isArray(e.category)&&e.category.length>=2&&"administratif"===e.category[0]?r=r+", "+e.category[1]:e.postcode&&(r=r+", "+e.postcode[0],e.city&&(r=r+" "+e.city[0])),r}return"StreetAddress"===t.type?(e.housenumber?e.housenumber+" ":"")+e.street+" "+(e.postcode?e.postcode+", ":"")+e.city:"CadastralParcel"===t.type?e.id:"..."},getSuggestedLocationFreeform:function(t){if(t.fullText)return t.fullText;var e=[];return e.push(t.street||""),e.push(t.postalCode||""),e.push(t.commune||""),"PositionOfInterest"===t.type&&(e.push(t.poi||""),e.push(t.kind||"")),e.join(" - ")}};var B=6378137,W=.0066943799901413165,H=484813681109536e-20,V=Math.PI/2,Y=1e-10,X=.017453292519943295,Z=57.29577951308232,K=Math.PI/4,J=2*Math.PI,Q=3.14159265359,$={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667};const tt={mm:{to_meter:.001},cm:{to_meter:.01},ft:{to_meter:.3048},"us-ft":{to_meter:1200/3937},fath:{to_meter:1.8288},kmi:{to_meter:1852},"us-ch":{to_meter:20.1168402336805},"us-mi":{to_meter:1609.34721869444},km:{to_meter:1e3},"ind-ft":{to_meter:.30479841},"ind-yd":{to_meter:.91439523},mi:{to_meter:1609.344},yd:{to_meter:.9144},ch:{to_meter:20.1168},link:{to_meter:.201168},dm:{to_meter:.01},in:{to_meter:.0254},"ind-ch":{to_meter:20.11669506},"us-in":{to_meter:.025400050800101},"us-yd":{to_meter:.914401828803658}};var et=/[\s_\-\/\(\)]/g;function rt(t,e){if(t[e])return t[e];for(var r,n=Object.keys(t),i=e.toLowerCase().replace(et,""),o=-1;++o=this.text.length)return;t=this.text[this.place++]}switch(this.state){case ot:return this.neutral(t);case 2:return this.keyword(t);case 4:return this.quoted(t);case 5:return this.afterquote(t);case 3:return this.number(t);case-1:return}},ht.prototype.afterquote=function(t){if('"'===t)return this.word+='"',void(this.state=4);if(ut.test(t))return this.word=this.word.trim(),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in afterquote yet, index '+this.place)},ht.prototype.afterItem=function(t){return","===t?(null!==this.word&&this.currentObject.push(this.word),this.word=null,void(this.state=ot)):"]"===t?(this.level--,null!==this.word&&(this.currentObject.push(this.word),this.word=null),this.state=ot,this.currentObject=this.stack.pop(),void(this.currentObject||(this.state=-1))):void 0},ht.prototype.number=function(t){if(!ct.test(t)){if(ut.test(t))return this.word=parseFloat(this.word),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in number yet, index '+this.place)}this.word+=t},ht.prototype.quoted=function(t){'"'!==t?this.word+=t:this.state=5},ht.prototype.keyword=function(t){if(lt.test(t))this.word+=t;else{if("["===t){var e=[];return e.push(this.word),this.level++,null===this.root?this.root=e:this.currentObject.push(e),this.stack.push(this.currentObject),this.currentObject=e,void(this.state=ot)}if(!ut.test(t))throw new Error("havn't handled \""+t+'" in keyword yet, index '+this.place);this.afterItem(t)}},ht.prototype.neutral=function(t){if(at.test(t))return this.word=t,void(this.state=2);if('"'===t)return this.word="",void(this.state=4);if(ct.test(t))return this.word=t,void(this.state=3);if(!ut.test(t))throw new Error("havn't handled \""+t+'" in neutral yet, index '+this.place);this.afterItem(t)},ht.prototype.output=function(){for(;this.place0?90:-90)):(t.lat0=ft(t.lat1>0?90:-90),t.lat_ts=t.lat1)}function At(t){var e=it(t),r=e[0],n={};return dt(e,n),mt(n),n[r]}function It(t){var e=this;if(2===arguments.length){var r=arguments[1];"string"==typeof r?"+"===r.charAt(0)?It[t]=nt(arguments[1]):It[t]=At(arguments[1]):It[t]=r}else if(1===arguments.length){if(Array.isArray(t))return t.map((function(t){Array.isArray(t)?It.apply(e,t):It(t)}));if("string"==typeof t){if(t in It)return It[t]}else"EPSG"in t?It["EPSG:"+t.EPSG]=t:"ESRI"in t?It["ESRI:"+t.ESRI]=t:"IAU2000"in t?It["IAU2000:"+t.IAU2000]=t:console.log(t);return}}!function(t){t("EPSG:4326","+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"),t("EPSG:4269","+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"),t("EPSG:3857","+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs");for(var e=1;e<=60;++e)t("EPSG:"+(32600+e),"+proj=utm +zone="+e+" +datum=WGS84 +units=m"),t("EPSG:"+(32700+e),"+proj=utm +zone="+e+" +south +datum=WGS84 +units=m");t.WGS84=t["EPSG:4326"],t["EPSG:3785"]=t["EPSG:3857"],t.GOOGLE=t["EPSG:3857"],t["EPSG:900913"]=t["EPSG:3857"],t["EPSG:102113"]=t["EPSG:3857"]}(It);const Ct=It;var vt=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];var _t=["3857","900913","3785","102113"];const bt=function(t){if(!function(t){return"string"==typeof t}(t))return t;if(function(t){return t in Ct}(t))return Ct[t];if(function(t){return vt.some((function(e){return t.indexOf(e)>-1}))}(t)){var e=At(t);if(function(t){var e=rt(t,"authority");if(e){var r=rt(e,"epsg");return r&&_t.indexOf(r)>-1}}(e))return Ct["EPSG:3857"];var r=function(t){var e=rt(t,"extension");if(e)return rt(e,"proj4")}(e);return r?nt(r):e}return function(t){return"+"===t[0]}(t)?nt(t):void 0};function wt(t,e){var r,n;if(t=t||{},!e)return t;for(n in e)void 0!==(r=e[n])&&(t[n]=r);return t}function St(t,e,r){var n=t*e;return r/Math.sqrt(1-n*n)}function Et(t){return t<0?-1:1}function xt(t){return Math.abs(t)<=Q?t:t-Et(t)*J}function Mt(t,e,r){var n=t*r,i=.5*t;return n=Math.pow((1-n)/(1+n),i),Math.tan(.5*(V-e))/n}function Rt(t,e){for(var r,n,i=.5*t,o=V-2*Math.atan(e),s=0;s<=15;s++)if(r=t*Math.sin(o),o+=n=V-2*Math.atan(e*Math.pow((1-r)/(1+r),i))-o,Math.abs(n)<=1e-10)return o;return-9999}function Tt(t){return t}var Pt=[{init:function(){var t=this.b/this.a;this.es=1-t*t,"x0"in this||(this.x0=0),"y0"in this||(this.y0=0),this.e=Math.sqrt(this.es),this.lat_ts?this.sphere?this.k0=Math.cos(this.lat_ts):this.k0=St(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)):this.k0||(this.k?this.k0=this.k:this.k0=1)},forward:function(t){var e,r,n=t.x,i=t.y;if(i*Z>90&&i*Z<-90&&n*Z>180&&n*Z<-180)return null;if(Math.abs(Math.abs(i)-V)<=Y)return null;if(this.sphere)e=this.x0+this.a*this.k0*xt(n-this.long0),r=this.y0+this.a*this.k0*Math.log(Math.tan(K+.5*i));else{var o=Math.sin(i),s=Mt(this.e,i,o);e=this.x0+this.a*this.k0*xt(n-this.long0),r=this.y0-this.a*this.k0*Math.log(s)}return t.x=e,t.y=r,t},inverse:function(t){var e,r,n=t.x-this.x0,i=t.y-this.y0;if(this.sphere)r=V-2*Math.atan(Math.exp(-i/(this.a*this.k0)));else{var o=Math.exp(-i/(this.a*this.k0));if(-9999===(r=Rt(this.e,o)))return null}return e=xt(this.long0+n/(this.a*this.k0)),t.x=e,t.y=r,t},names:["Mercator","Popular Visualisation Pseudo Mercator","Mercator_1SP","Mercator_Auxiliary_Sphere","merc"]},{init:function(){},forward:Tt,inverse:Tt,names:["longlat","identity"]}],Gt={},Nt=[];function Ot(t,e){var r=Nt.length;return t.names?(Nt[r]=t,t.names.forEach((function(t){Gt[t.toLowerCase()]=r})),this):(console.log(e),!0)}const kt={start:function(){Pt.forEach(Ot)},add:Ot,get:function(t){if(!t)return!1;var e=t.toLowerCase();return void 0!==Gt[e]&&Nt[Gt[e]]?Nt[Gt[e]]:void 0}};var Lt={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},APL4:{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},clrk80ign:{a:6378249.2,b:6356515,rf:293.4660213,ellipseName:"Clarke 1880 (IGN)"},clrk58:{a:6378293.645208759,rf:294.2606763692654,ellipseName:"Clarke 1858"},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS7:{a:6378135,rf:298.26,ellipseName:"WGS 72"}},Dt=Lt.WGS84={a:6378137,rf:298.257223563,ellipseName:"WGS 84"};Lt.sphere={a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"};var jt={wgs84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},ch1903:{towgs84:"674.374,15.056,405.346",ellipse:"bessel",datumName:"swiss"},ggrs87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},nad83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},nad27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"598.1,73.7,418.2,0.202,0.045,-2.455,6.7",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"577.326,90.129,463.919,5.137,1.474,5.297,2.4232",ellipse:"bessel",datumName:"Hermannskogel"},mgi:{towgs84:"577.326,90.129,463.919,5.137,1.474,5.297,2.4232",ellipse:"bessel",datumName:"Militar-Geographische Institut"},osni52:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"airy",datumName:"Irish National"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},rassadiran:{towgs84:"-133.63,-157.5,-158.62",ellipse:"intl",datumName:"Rassadiran"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},osgb36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Ordnance Survey of Great Britain 1936"},s_jtsk:{towgs84:"589,76,480",ellipse:"bessel",datumName:"S-JTSK (Ferro)"},beduaram:{towgs84:"-106,-87,188",ellipse:"clrk80",datumName:"Beduaram"},gunung_segara:{towgs84:"-403,684,41",ellipse:"bessel",datumName:"Gunung Segara Jakarta"},rnb72:{towgs84:"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",ellipse:"intl",datumName:"Reseau National Belge 1972"}};for(var Ut in jt){var zt=jt[Ut];jt[zt.datumName]=zt}const qt=jt;const Ft=function(t,e,r,n,i,o,s){var a={};return a.datum_type=void 0===t||"none"===t?5:4,e&&(a.datum_params=e.map(parseFloat),0===a.datum_params[0]&&0===a.datum_params[1]&&0===a.datum_params[2]||(a.datum_type=1),a.datum_params.length>3&&(0===a.datum_params[3]&&0===a.datum_params[4]&&0===a.datum_params[5]&&0===a.datum_params[6]||(a.datum_type=2,a.datum_params[3]*=H,a.datum_params[4]*=H,a.datum_params[5]*=H,a.datum_params[6]=a.datum_params[6]/1e6+1))),s&&(a.datum_type=3,a.grids=s),a.a=r,a.b=n,a.es=i,a.ep2=o,a};var Bt={};function Wt(t){if(0===t.length)return null;var e="@"===t[0];return e&&(t=t.slice(1)),"null"===t?{name:"null",mandatory:!e,grid:null,isNull:!0}:{name:t,mandatory:!e,grid:Bt[t]||null,isNull:!1}}function Ht(t){return t/3600*Math.PI/180}function Vt(t,e,r){return String.fromCharCode.apply(null,new Uint8Array(t.buffer.slice(e,r)))}function Yt(t){return t.map((function(t){return[Ht(t.longitudeShift),Ht(t.latitudeShift)]}))}function Xt(t,e,r){return{name:Vt(t,e+8,e+16).trim(),parent:Vt(t,e+24,e+24+8).trim(),lowerLatitude:t.getFloat64(e+72,r),upperLatitude:t.getFloat64(e+88,r),lowerLongitude:t.getFloat64(e+104,r),upperLongitude:t.getFloat64(e+120,r),latitudeInterval:t.getFloat64(e+136,r),longitudeInterval:t.getFloat64(e+152,r),gridNodeCount:t.getInt32(e+168,r)}}function Zt(t,e,r,n){for(var i=e+176,o=[],s=0;s-1.001*V)l=-V;else if(l>V&&l<1.001*V)l=V;else{if(l<-V)return{x:-1/0,y:-1/0,z:t.z};if(l>V)return{x:1/0,y:1/0,z:t.z}}return a>Math.PI&&(a-=2*Math.PI),i=Math.sin(l),s=Math.cos(l),o=i*i,{x:((n=r/Math.sqrt(1-e*o))+u)*s*Math.cos(a),y:(n+u)*s*Math.sin(a),z:(n*(1-e)+u)*i}}function $t(t,e,r,n){var i,o,s,a,l,u,c,h,p,d,g,f,m,y,A,I=1e-12,C=t.x,v=t.y,_=t.z?t.z:0;if(i=Math.sqrt(C*C+v*v),o=Math.sqrt(C*C+v*v+_*_),i/r1e-24&&m<30);return{x:y,y:Math.atan(g/Math.abs(d)),z:A}}function te(t){return 1===t||2===t}function ee(t,e,r){if(function(t,e){return t.datum_type===e.datum_type&&!(t.a!==e.a||Math.abs(t.es-e.es)>5e-11)&&(1===t.datum_type?t.datum_params[0]===e.datum_params[0]&&t.datum_params[1]===e.datum_params[1]&&t.datum_params[2]===e.datum_params[2]:2!==t.datum_type||t.datum_params[0]===e.datum_params[0]&&t.datum_params[1]===e.datum_params[1]&&t.datum_params[2]===e.datum_params[2]&&t.datum_params[3]===e.datum_params[3]&&t.datum_params[4]===e.datum_params[4]&&t.datum_params[5]===e.datum_params[5]&&t.datum_params[6]===e.datum_params[6])}(t,e))return r;if(5===t.datum_type||5===e.datum_type)return r;var n=t.a,i=t.es;if(3===t.datum_type){if(0!==re(t,!1,r))return;n=B,i=W}var o=e.a,s=e.b,a=e.es;if(3===e.datum_type&&(o=B,s=6356752.314,a=W),i===a&&n===o&&!te(t.datum_type)&&!te(e.datum_type))return r;if((r=Qt(r,i,n),te(t.datum_type)&&(r=function(t,e,r){if(1===e)return{x:t.x+r[0],y:t.y+r[1],z:t.z+r[2]};if(2===e){var n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],l=r[5],u=r[6];return{x:u*(t.x-l*t.y+a*t.z)+n,y:u*(l*t.x+t.y-s*t.z)+i,z:u*(-a*t.x+s*t.y+t.z)+o}}}(r,t.datum_type,t.datum_params)),te(e.datum_type)&&(r=function(t,e,r){if(1===e)return{x:t.x-r[0],y:t.y-r[1],z:t.z-r[2]};if(2===e){var n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],l=r[5],u=r[6],c=(t.x-n)/u,h=(t.y-i)/u,p=(t.z-o)/u;return{x:c+l*h-a*p,y:-l*c+h+s*p,z:a*c-s*h+p}}}(r,e.datum_type,e.datum_params)),r=$t(r,a,o,s),3===e.datum_type)&&0!==re(e,!0,r))return;return r}function re(t,e,r){if(null===t.grids||0===t.grids.length)return console.log("Grid shift grids not found"),-1;var n={x:-r.x,y:r.y},i={x:Number.NaN,y:Number.NaN},o=[];t:for(var s=0;sn.y||d>n.x||m1e-12&&Math.abs(s.y)>1e-12);if(l<0)return console.log("Inverse grid shift iterator failed to converge."),n;n.x=xt(o.x+r.ll[0]),n.y=o.y+r.ll[1]}else isNaN(o.x)||(n.x=t.x+o.x,n.y=t.y+o.y);return n}function ie(t,e){var r,n={x:t.x/e.del[0],y:t.y/e.del[1]},i=Math.floor(n.x),o=Math.floor(n.y),s=n.x-1*i,a=n.y-1*o,l={x:Number.NaN,y:Number.NaN};if(i<0||i>=e.lim[0])return l;if(o<0||o>=e.lim[1])return l;r=o*e.lim[0]+i;var u=e.cvs[r][0],c=e.cvs[r][1];r++;var h=e.cvs[r][0],p=e.cvs[r][1];r+=e.lim[0];var d=e.cvs[r][0],g=e.cvs[r][1];r--;var f=e.cvs[r][0],m=e.cvs[r][1],y=s*a,A=s*(1-a),I=(1-s)*(1-a),C=(1-s)*a;return l.x=I*u+A*h+C*f+y*d,l.y=I*c+A*p+C*m+y*g,l}function oe(t,e,r){var n,i,o,s=r.x,a=r.y,l=r.z||0,u={};for(o=0;o<3;o++)if(!e||2!==o||void 0!==r.z)switch(0===o?(n=s,i=-1!=="ew".indexOf(t.axis[o])?"x":"y"):1===o?(n=a,i=-1!=="ns".indexOf(t.axis[o])?"y":"x"):(n=l,i="z"),t.axis[o]){case"e":case"n":u[i]=n;break;case"w":case"s":u[i]=-n;break;case"u":void 0!==r[i]&&(u.z=n);break;case"d":void 0!==r[i]&&(u.z=-n);break;default:return null}return u}function se(t){var e={x:t[0],y:t[1]};return t.length>2&&(e.z=t[2]),t.length>3&&(e.m=t[3]),e}function ae(t){if("function"==typeof Number.isFinite){if(Number.isFinite(t))return;throw new TypeError("coordinates must be finite numbers")}if("number"!=typeof t||t!=t||!isFinite(t))throw new TypeError("coordinates must be finite numbers")}function le(t,e,r,n){var i,o=void 0!==(r=Array.isArray(r)?se(r):{x:r.x,y:r.y,z:r.z,m:r.m}).z;if(function(t){ae(t.x),ae(t.y)}(r),t.datum&&e.datum&&function(t,e){return(1===t.datum.datum_type||2===t.datum.datum_type||3===t.datum.datum_type)&&"WGS84"!==e.datumCode||(1===e.datum.datum_type||2===e.datum.datum_type||3===e.datum.datum_type)&&"WGS84"!==t.datumCode}(t,e)&&(r=le(t,i=new Jt("WGS84"),r,n),t=i),n&&"enu"!==t.axis&&(r=oe(t,!1,r)),"longlat"===t.projName)r={x:r.x*X,y:r.y*X,z:r.z||0};else if(t.to_meter&&(r={x:r.x*t.to_meter,y:r.y*t.to_meter,z:r.z||0}),!(r=t.inverse(r)))return;if(t.from_greenwich&&(r.x+=t.from_greenwich),r=ee(t.datum,e.datum,r))return e.from_greenwich&&(r={x:r.x-e.from_greenwich,y:r.y,z:r.z||0}),"longlat"===e.projName?r={x:r.x*Z,y:r.y*Z,z:r.z||0}:(r=e.forward(r),e.to_meter&&(r={x:r.x/e.to_meter,y:r.y/e.to_meter,z:r.z||0})),n&&"enu"!==e.axis?oe(e,!0,r):(r&&!o&&delete r.z,r)}var ue=Jt("WGS84");function ce(t,e,r,n){var i,o,s;return Array.isArray(r)?(i=le(t,e,r,n)||{x:NaN,y:NaN},r.length>2?void 0!==t.name&&"geocent"===t.name||void 0!==e.name&&"geocent"===e.name?"number"==typeof i.z?[i.x,i.y,i.z].concat(r.slice(3)):[i.x,i.y,r[2]].concat(r.slice(3)):[i.x,i.y].concat(r.slice(2)):[i.x,i.y]):(o=le(t,e,r,n),2===(s=Object.keys(r)).length||s.forEach((function(n){if(void 0!==t.name&&"geocent"===t.name||void 0!==e.name&&"geocent"===e.name){if("x"===n||"y"===n||"z"===n)return}else if("x"===n||"y"===n)return;o[n]=r[n]})),o)}function he(t){return t instanceof Jt?t:t.oProj?t.oProj:Jt(t)}const pe=function(t,e,r){t=he(t);var n,i=!1;return void 0===e?(e=t,t=ue,i=!0):(void 0!==e.x||Array.isArray(e))&&(r=e,e=t,t=ue,i=!0),e=he(e),r?ce(t,e,r):(n={forward:function(r,n){return ce(t,e,r,n)},inverse:function(r,n){return ce(e,t,r,n)}},i&&(n.oProj=e),n)};var de="AJSAJS",ge="AFAFAF",fe=65,me=73,ye=79,Ae=86,Ie=90;const Ce={forward:ve,inverse:function(t){var e=Se(Me(t.toUpperCase()));if(e.lat&&e.lon)return[e.lon,e.lat,e.lon,e.lat];return[e.left,e.bottom,e.right,e.top]},toPoint:_e};function ve(t,e){return e=e||5,function(t,e){var r="00000"+t.easting,n="00000"+t.northing;return t.zoneNumber+t.zoneLetter+(d=t.easting,g=t.northing,f=t.zoneNumber,m=xe(f),y=Math.floor(d/1e5),A=Math.floor(g/1e5)%20,i=y,o=A,s=m,a=s-1,l=de.charCodeAt(a),u=ge.charCodeAt(a),c=l+i-1,h=u+o,p=!1,c>Ie&&(c=c-Ie+fe-1,p=!0),(c===me||lme||(c>me||lye||(c>ye||lIe&&(c=c-Ie+fe-1),h>Ae?(h=h-Ae+fe-1,p=!0):p=!1,(h===me||ume||(h>me||uye||(h>ye||uAe&&(h=h-Ae+fe-1),String.fromCharCode(c)+String.fromCharCode(h))+r.substr(r.length-5,e)+n.substr(n.length-5,e);var i,o,s,a,l,u,c,h,p;var d,g,f,m,y,A}(function(t){var e,r,n,i,o,s,a,l,u=t.lat,c=t.lon,h=6378137,p=.00669438,d=.9996,g=be(u),f=be(c);l=Math.floor((c+180)/6)+1,180===c&&(l=60);u>=56&&u<64&&c>=3&&c<12&&(l=32);u>=72&&u<84&&(c>=0&&c<9?l=31:c>=9&&c<21?l=33:c>=21&&c<33?l=35:c>=33&&c<42&&(l=37));a=be(6*(l-1)-180+3),e=p/(1-p),r=h/Math.sqrt(1-p*Math.sin(g)*Math.sin(g)),n=Math.tan(g)*Math.tan(g),i=e*Math.cos(g)*Math.cos(g),o=Math.cos(g)*(f-a),s=h*((1-p/4-3*p*p/64-5*p*p*p/256)*g-(3*p/8+3*p*p/32+45*p*p*p/1024)*Math.sin(2*g)+(15*p*p/256+45*p*p*p/1024)*Math.sin(4*g)-35*p*p*p/3072*Math.sin(6*g));var m=d*r*(o+(1-n+i)*o*o*o/6+(5-18*n+n*n+72*i-58*e)*o*o*o*o*o/120)+5e5,y=d*(s+r*Math.tan(g)*(o*o/2+(5-n+9*i+4*i*i)*o*o*o*o/24+(61-58*n+n*n+600*i-330*e)*o*o*o*o*o*o/720));u<0&&(y+=1e7);return{northing:Math.round(y),easting:Math.round(m),zoneNumber:l,zoneLetter:Ee(u)}}({lat:t[1],lon:t[0]}),e)}function _e(t){var e=Se(Me(t.toUpperCase()));return e.lat&&e.lon?[e.lon,e.lat]:[(e.left+e.right)/2,(e.top+e.bottom)/2]}function be(t){return t*(Math.PI/180)}function we(t){return t/Math.PI*180}function Se(t){var e=t.northing,r=t.easting,n=t.zoneLetter,i=t.zoneNumber;if(i<0||i>60)return null;var o,s,a,l,u,c,h,p,d,g=.9996,f=6378137,m=.00669438,y=(1-Math.sqrt(.99330562))/(1+Math.sqrt(.99330562)),A=r-5e5,I=e;n<"N"&&(I-=1e7),h=6*(i-1)-180+3,o=.006739496752268451,d=(p=I/g/6367449.145945056)+(3*y/2-27*y*y*y/32)*Math.sin(2*p)+(21*y*y/16-55*y*y*y*y/32)*Math.sin(4*p)+151*y*y*y/96*Math.sin(6*p),s=f/Math.sqrt(1-m*Math.sin(d)*Math.sin(d)),a=Math.tan(d)*Math.tan(d),l=o*Math.cos(d)*Math.cos(d),u=.99330562*f/Math.pow(1-m*Math.sin(d)*Math.sin(d),1.5),c=A/(s*g);var C=d-s*Math.tan(d)/u*(c*c/2-(5+3*a+10*l-4*l*l-9*o)*c*c*c*c/24+(61+90*a+298*l+45*a*a-1.6983531815716497-3*l*l)*c*c*c*c*c*c/720);C=we(C);var v,_=(c-(1+2*a+l)*c*c*c/6+(5-2*l+28*a-3*l*l+8*o+24*a*a)*c*c*c*c*c/120)/Math.cos(d);if(_=h+we(_),t.accuracy){var b=Se({northing:t.northing+t.accuracy,easting:t.easting+t.accuracy,zoneLetter:t.zoneLetter,zoneNumber:t.zoneNumber});v={top:b.lat,right:b.lon,bottom:C,left:_}}else v={lat:C,lon:_};return v}function Ee(t){var e="Z";return 84>=t&&t>=72?e="X":72>t&&t>=64?e="W":64>t&&t>=56?e="V":56>t&&t>=48?e="U":48>t&&t>=40?e="T":40>t&&t>=32?e="S":32>t&&t>=24?e="R":24>t&&t>=16?e="Q":16>t&&t>=8?e="P":8>t&&t>=0?e="N":0>t&&t>=-8?e="M":-8>t&&t>=-16?e="L":-16>t&&t>=-24?e="K":-24>t&&t>=-32?e="J":-32>t&&t>=-40?e="H":-40>t&&t>=-48?e="G":-48>t&&t>=-56?e="F":-56>t&&t>=-64?e="E":-64>t&&t>=-72?e="D":-72>t&&t>=-80&&(e="C"),e}function xe(t){var e=t%6;return 0===e&&(e=6),e}function Me(t){if(t&&0===t.length)throw"MGRSPoint coverting from nothing";for(var e,r=t.length,n=null,i="",o=0;!/[A-Z]/.test(e=t.charAt(o));){if(o>=2)throw"MGRSPoint bad conversion from: "+t;i+=e,o++}var s=parseInt(i,10);if(0===o||o+3>r)throw"MGRSPoint bad conversion from: "+t;var a=t.charAt(o++);if(a<="A"||"B"===a||"Y"===a||a>="Z"||"I"===a||"O"===a)throw"MGRSPoint zone letter "+a+" not handled: "+t;n=t.substring(o,o+=2);for(var l=xe(s),u=function(t,e){var r=de.charCodeAt(e-1),n=1e5,i=!1;for(;r!==t.charCodeAt(0);){if(++r===me&&r++,r===ye&&r++,r>Ie){if(i)throw"Bad character: "+t;r=fe,i=!0}n+=1e5}return n}(n.charAt(0),l),c=function(t,e){if(t>"V")throw"MGRSPoint given invalid Northing "+t;var r=ge.charCodeAt(e-1),n=0,i=!1;for(;r!==t.charCodeAt(0);){if(++r===me&&r++,r===ye&&r++,r>Ae){if(i)throw"Bad character: "+t;r=fe,i=!0}n+=1e5}return n}(n.charAt(1),l);c0&&(p=1e5/Math.pow(10,f),d=t.substring(o,o+f),m=parseFloat(d)*p,g=t.substring(o+f),y=parseFloat(g)*p),{easting:m+u,northing:y+c,zoneLetter:a,zoneNumber:s,accuracy:p}}function Re(t){var e;switch(t){case"C":e=11e5;break;case"D":e=2e6;break;case"E":e=28e5;break;case"F":e=37e5;break;case"G":e=46e5;break;case"H":e=55e5;break;case"J":e=64e5;break;case"K":e=73e5;break;case"L":e=82e5;break;case"M":e=91e5;break;case"N":e=0;break;case"P":e=8e5;break;case"Q":e=17e5;break;case"R":e=26e5;break;case"S":e=35e5;break;case"T":e=44e5;break;case"U":e=53e5;break;case"V":e=62e5;break;case"W":e=7e6;break;case"X":e=79e5;break;default:e=-1}if(e>=0)return e;throw"Invalid zone letter: "+t}function Te(t,e,r){if(!(this instanceof Te))return new Te(t,e,r);if(Array.isArray(t))this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("object"==typeof t)this.x=t.x,this.y=t.y,this.z=t.z||0;else if("string"==typeof t&&void 0===e){var n=t.split(",");this.x=parseFloat(n[0],10),this.y=parseFloat(n[1],10),this.z=parseFloat(n[2],10)||0}else this.x=t,this.y=e,this.z=r||0;console.warn("proj4.Point will be removed in version 3, use proj4.toPoint")}Te.fromMGRS=function(t){return new Te(_e(t))},Te.prototype.toMGRS=function(t){return ve([this.x,this.y],t)};const Pe=Te;var Ge=.046875,Ne=.01953125,Oe=.01068115234375;function ke(t){var e=[];e[0]=1-t*(.25+t*(Ge+t*(Ne+t*Oe))),e[1]=t*(.75-t*(Ge+t*(Ne+t*Oe)));var r=t*t;return e[2]=r*(.46875-t*(.013020833333333334+.007120768229166667*t)),r*=t,e[3]=r*(.3645833333333333-.005696614583333333*t),e[4]=r*t*.3076171875,e}function Le(t,e,r,n){return r*=e,e*=e,n[0]*t-r*(n[1]+e*(n[2]+e*(n[3]+e*n[4])))}function De(t,e,r){for(var n=1/(1-e),i=t,o=20;o;--o){var s=Math.sin(i),a=1-e*s*s;if(i-=a=(Le(i,s,Math.cos(i),r)-t)*(a*Math.sqrt(a))*n,Math.abs(a)Y?Math.tan(o):0,g=Math.pow(d,2),f=Math.pow(g,2);e=1-this.es*Math.pow(a,2),u/=Math.sqrt(e);var m=Le(o,a,l,this.en);r=this.a*(this.k0*u*(1+c/6*(1-g+h+c/20*(5-18*g+f+14*h-58*g*h+c/42*(61+179*f-f*g-479*g)))))+this.x0,n=this.a*(this.k0*(m-this.ml0+a*s*u/2*(1+c/12*(5-g+9*h+4*p+c/30*(61+f-58*g+270*h-330*g*h+c/56*(1385+543*f-f*g-3111*g))))))+this.y0}else{var y=l*Math.sin(s);if(Math.abs(Math.abs(y)-1)=1){if(y-1>Y)return 93;n=0}else n=Math.acos(n);o<0&&(n=-n),n=this.a*this.k0*(n-this.lat0)+this.y0}return t.x=r,t.y=n,t},inverse:function(t){var e,r,n,i,o=(t.x-this.x0)*(1/this.a),s=(t.y-this.y0)*(1/this.a);if(this.es)if(r=De(e=this.ml0+s/this.k0,this.es,this.en),Math.abs(r)Y?Math.tan(r):0,c=this.ep2*Math.pow(l,2),h=Math.pow(c,2),p=Math.pow(u,2),d=Math.pow(p,2);e=1-this.es*Math.pow(a,2);var g=o*Math.sqrt(e)/this.k0,f=Math.pow(g,2);n=r-(e*=u)*f/(1-this.es)*.5*(1-f/12*(5+3*p-9*c*p+c-4*h-f/30*(61+90*p-252*c*p+45*d+46*c-f/56*(1385+3633*p+4095*d+1574*d*p)))),i=xt(this.long0+g*(1-f/6*(1+2*p+c-f/20*(5+28*p+24*d+8*c*p+6*c-f/42*(61+662*p+1320*d+720*d*p))))/l)}else n=V*Et(s),i=0;else{var m=Math.exp(o/this.k0),y=.5*(m-1/m),A=this.lat0+s/this.k0,I=Math.cos(A);e=Math.sqrt((1-Math.pow(I,2))/(1+Math.pow(y,2))),n=Math.asin(e),s<0&&(n=-n),i=0===y&&0===I?0:xt(Math.atan2(y,I)+this.long0)}return t.x=i,t.y=n,t},names:["Fast_Transverse_Mercator","Fast Transverse Mercator"]};function Ue(t){var e=Math.exp(t);return e=(e-1/e)/2}function ze(t,e){t=Math.abs(t),e=Math.abs(e);var r=Math.max(t,e),n=Math.min(t,e)/(r||1);return r*Math.sqrt(1+Math.pow(n,2))}function qe(t){var e=Math.abs(t);return e=function(t){var e=1+t,r=e-1;return 0===r?t:t*Math.log(e)/r}(e*(1+e/(ze(1,e)+1))),t<0?-e:e}function Fe(t,e){for(var r,n=2*Math.cos(2*e),i=t.length-1,o=t[i],s=0;--i>=0;)r=n*o-s+t[i],s=o,o=r;return e+r*Math.sin(2*e)}function Be(t,e,r){for(var n,i,o=Math.sin(e),s=Math.cos(e),a=Ue(r),l=function(t){var e=Math.exp(t);return(e+1/e)/2}(r),u=2*s*l,c=-2*o*a,h=t.length-1,p=t[h],d=0,g=0,f=0;--h>=0;)n=g,i=d,p=u*(g=p)-n-c*(d=f)+t[h],f=c*g-i+u*d;return[(u=o*l)*p-(c=s*a)*f,u*f+c*p]}const We={init:function(){if(!this.approx&&(isNaN(this.es)||this.es<=0))throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION["Fast_Transverse_Mercator"] in the WKT.');this.approx&&(je.init.apply(this),this.forward=je.forward,this.inverse=je.inverse),this.x0=void 0!==this.x0?this.x0:0,this.y0=void 0!==this.y0?this.y0:0,this.long0=void 0!==this.long0?this.long0:0,this.lat0=void 0!==this.lat0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var t=this.es/(1+Math.sqrt(1-this.es)),e=t/(2-t),r=e;this.cgb[0]=e*(2+e*(-2/3+e*(e*(116/45+e*(26/45+e*(-2854/675)))-2))),this.cbg[0]=e*(e*(2/3+e*(4/3+e*(-82/45+e*(32/45+e*(4642/4725)))))-2),r*=e,this.cgb[1]=r*(7/3+e*(e*(-227/45+e*(2704/315+e*(2323/945)))-1.6)),this.cbg[1]=r*(5/3+e*(-16/15+e*(-13/9+e*(904/315+e*(-1522/945))))),r*=e,this.cgb[2]=r*(56/15+e*(-136/35+e*(-1262/105+e*(73814/2835)))),this.cbg[2]=r*(-26/15+e*(34/21+e*(1.6+e*(-12686/2835)))),r*=e,this.cgb[3]=r*(4279/630+e*(-332/35+e*(-399572/14175))),this.cbg[3]=r*(1237/630+e*(e*(-24832/14175)-2.4)),r*=e,this.cgb[4]=r*(4174/315+e*(-144838/6237)),this.cbg[4]=r*(-734/315+e*(109598/31185)),r*=e,this.cgb[5]=r*(601676/22275),this.cbg[5]=r*(444337/155925),r=Math.pow(e,2),this.Qn=this.k0/(1+e)*(1+r*(1/4+r*(1/64+r/256))),this.utg[0]=e*(e*(2/3+e*(-37/96+e*(1/360+e*(81/512+e*(-96199/604800)))))-.5),this.gtu[0]=e*(.5+e*(-2/3+e*(5/16+e*(41/180+e*(-127/288+e*(7891/37800)))))),this.utg[1]=r*(-1/48+e*(-1/15+e*(437/1440+e*(-46/105+e*(1118711/3870720))))),this.gtu[1]=r*(13/48+e*(e*(557/1440+e*(281/630+e*(-1983433/1935360)))-.6)),r*=e,this.utg[2]=r*(-17/480+e*(37/840+e*(209/4480+e*(-5569/90720)))),this.gtu[2]=r*(61/240+e*(-103/140+e*(15061/26880+e*(167603/181440)))),r*=e,this.utg[3]=r*(-4397/161280+e*(11/504+e*(830251/7257600))),this.gtu[3]=r*(49561/161280+e*(-179/168+e*(6601661/7257600))),r*=e,this.utg[4]=r*(-4583/161280+e*(108847/3991680)),this.gtu[4]=r*(34729/80640+e*(-3418889/1995840)),r*=e,this.utg[5]=r*(-20648693/638668800),this.gtu[5]=.6650675310896665*r;var n=Fe(this.cbg,this.lat0);this.Zb=-this.Qn*(n+function(t,e){for(var r,n=2*Math.cos(e),i=t.length-1,o=t[i],s=0;--i>=0;)r=n*o-s+t[i],s=o,o=r;return Math.sin(e)*r}(this.gtu,2*n))},forward:function(t){var e=xt(t.x-this.long0),r=t.y;r=Fe(this.cbg,r);var n=Math.sin(r),i=Math.cos(r),o=Math.sin(e),s=Math.cos(e);r=Math.atan2(n,s*i),e=Math.atan2(o*i,ze(n,i*s)),e=qe(Math.tan(e));var a,l,u=Be(this.gtu,2*r,2*e);return r+=u[0],e+=u[1],Math.abs(e)<=2.623395162778?(a=this.a*(this.Qn*e)+this.x0,l=this.a*(this.Qn*r+this.Zb)+this.y0):(a=1/0,l=1/0),t.x=a,t.y=l,t},inverse:function(t){var e,r,n=(t.x-this.x0)*(1/this.a),i=(t.y-this.y0)*(1/this.a);if(i=(i-this.Zb)/this.Qn,n/=this.Qn,Math.abs(n)<=2.623395162778){var o=Be(this.utg,2*i,2*n);i+=o[0],n+=o[1],n=Math.atan(Ue(n));var s=Math.sin(i),a=Math.cos(i),l=Math.sin(n),u=Math.cos(n);i=Math.atan2(s*u,ze(l,u*a)),e=xt((n=Math.atan2(l,u*a))+this.long0),r=Fe(this.cgb,i)}else e=1/0,r=1/0;return t.x=e,t.y=r,t},names:["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc","Transverse_Mercator","Transverse Mercator","Gauss Kruger","Gauss_Kruger","tmerc"]};const He={init:function(){var t=function(t,e){if(void 0===t){if((t=Math.floor(30*(xt(e)+Math.PI)/Math.PI)+1)<0)return 0;if(t>60)return 60}return t}(this.zone,this.long0);if(void 0===t)throw new Error("unknown utm zone");this.lat0=0,this.long0=(6*Math.abs(t)-183)*X,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,We.init.apply(this),this.forward=We.forward,this.inverse=We.inverse},names:["Universal Transverse Mercator System","utm"],dependsOn:"etmerc"};function Ve(t,e){return Math.pow((1-t)/(1+t),e)}const Ye={init:function(){var t=Math.sin(this.lat0),e=Math.cos(this.lat0);e*=e,this.rc=Math.sqrt(1-this.es)/(1-this.es*t*t),this.C=Math.sqrt(1+this.es*e*e/(1-this.es)),this.phic0=Math.asin(t/this.C),this.ratexp=.5*this.C*this.e,this.K=Math.tan(.5*this.phic0+K)/(Math.pow(Math.tan(.5*this.lat0+K),this.C)*Ve(this.e*t,this.ratexp))},forward:function(t){var e=t.x,r=t.y;return t.y=2*Math.atan(this.K*Math.pow(Math.tan(.5*r+K),this.C)*Ve(this.e*Math.sin(r),this.ratexp))-V,t.x=this.C*e,t},inverse:function(t){for(var e=t.x/this.C,r=t.y,n=Math.pow(Math.tan(.5*r+K)/this.K,1/this.C),i=20;i>0&&(r=2*Math.atan(n*Ve(this.e*Math.sin(t.y),-.5*this.e))-V,!(Math.abs(r-t.y)<1e-14));--i)t.y=r;return i?(t.x=e,t.y=r,t):null},names:["gauss"]};const Xe={init:function(){Ye.init.apply(this),this.rc&&(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"))},forward:function(t){var e,r,n,i;return t.x=xt(t.x-this.long0),Ye.forward.apply(this,[t]),e=Math.sin(t.y),r=Math.cos(t.y),n=Math.cos(t.x),i=this.k0*this.R2/(1+this.sinc0*e+this.cosc0*r*n),t.x=i*r*Math.sin(t.x),t.y=i*(this.cosc0*e-this.sinc0*r*n),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var e,r,n,i,o;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,o=ze(t.x,t.y)){var s=2*Math.atan2(o,this.R2);e=Math.sin(s),r=Math.cos(s),i=Math.asin(r*this.sinc0+t.y*e*this.cosc0/o),n=Math.atan2(t.x*e,o*this.cosc0*r-t.y*this.sinc0*e)}else i=this.phic0,n=0;return t.x=n,t.y=i,Ye.inverse.apply(this,[t]),t.x=xt(t.x+this.long0),t},names:["Stereographic_North_Pole","Oblique_Stereographic","sterea","Oblique Stereographic Alternative","Double_Stereographic"]};const Ze={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.coslat0=Math.cos(this.lat0),this.sinlat0=Math.sin(this.lat0),this.sphere?1===this.k0&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=Y&&(this.k0=.5*(1+Et(this.lat0)*Math.sin(this.lat_ts))):(Math.abs(this.coslat0)<=Y&&(this.lat0>0?this.con=1:this.con=-1),this.cons=Math.sqrt(Math.pow(1+this.e,1+this.e)*Math.pow(1-this.e,1-this.e)),1===this.k0&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=Y&&Math.abs(Math.cos(this.lat_ts))>Y&&(this.k0=.5*this.cons*St(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts))/Mt(this.e,this.con*this.lat_ts,this.con*Math.sin(this.lat_ts))),this.ms1=St(this.e,this.sinlat0,this.coslat0),this.X0=2*Math.atan(this.ssfn_(this.lat0,this.sinlat0,this.e))-V,this.cosX0=Math.cos(this.X0),this.sinX0=Math.sin(this.X0))},forward:function(t){var e,r,n,i,o,s,a=t.x,l=t.y,u=Math.sin(l),c=Math.cos(l),h=xt(a-this.long0);return Math.abs(Math.abs(a-this.long0)-Math.PI)<=Y&&Math.abs(l+this.lat0)<=Y?(t.x=NaN,t.y=NaN,t):this.sphere?(e=2*this.k0/(1+this.sinlat0*u+this.coslat0*c*Math.cos(h)),t.x=this.a*e*c*Math.sin(h)+this.x0,t.y=this.a*e*(this.coslat0*u-this.sinlat0*c*Math.cos(h))+this.y0,t):(r=2*Math.atan(this.ssfn_(l,u,this.e))-V,i=Math.cos(r),n=Math.sin(r),Math.abs(this.coslat0)<=Y?(o=Mt(this.e,l*this.con,this.con*u),s=2*this.a*this.k0*o/this.cons,t.x=this.x0+s*Math.sin(a-this.long0),t.y=this.y0-this.con*s*Math.cos(a-this.long0),t):(Math.abs(this.sinlat0)0?xt(this.long0+Math.atan2(t.x,-1*t.y)):xt(this.long0+Math.atan2(t.x,t.y)):xt(this.long0+Math.atan2(t.x*Math.sin(a),s*this.coslat0*Math.cos(a)-t.y*this.sinlat0*Math.sin(a))),t.x=e,t.y=r,t)}if(Math.abs(this.coslat0)<=Y){if(s<=Y)return r=this.lat0,e=this.long0,t.x=e,t.y=r,t;t.x*=this.con,t.y*=this.con,n=s*this.cons/(2*this.a*this.k0),r=this.con*Rt(this.e,n),e=this.con*xt(this.con*this.long0+Math.atan2(t.x,-1*t.y))}else i=2*Math.atan(s*this.cosX0/(2*this.a*this.k0*this.ms1)),e=this.long0,s<=Y?o=this.X0:(o=Math.asin(Math.cos(i)*this.sinX0+t.y*Math.sin(i)*this.cosX0/s),e=xt(this.long0+Math.atan2(t.x*Math.sin(i),s*this.cosX0*Math.cos(i)-t.y*this.sinX0*Math.sin(i)))),r=-1*Rt(this.e,Math.tan(.5*(V+o)));return t.x=e,t.y=r,t},names:["stere","Stereographic_South_Pole","Polar Stereographic (variant B)","Polar_Stereographic"],ssfn_:function(t,e,r){return e*=r,Math.tan(.5*(V+t))*Math.pow((1-e)/(1+e),.5*r)}};const Ke={init:function(){var t=this.lat0;this.lambda0=this.long0;var e=Math.sin(t),r=this.a,n=1/this.rf,i=2*n-Math.pow(n,2),o=this.e=Math.sqrt(i);this.R=this.k0*r*Math.sqrt(1-i)/(1-i*Math.pow(e,2)),this.alpha=Math.sqrt(1+i/(1-i)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(e/this.alpha);var s=Math.log(Math.tan(Math.PI/4+this.b0/2)),a=Math.log(Math.tan(Math.PI/4+t/2)),l=Math.log((1+o*e)/(1-o*e));this.K=s-this.alpha*a+this.alpha*o/2*l},forward:function(t){var e=Math.log(Math.tan(Math.PI/4-t.y/2)),r=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),n=-this.alpha*(e+r)+this.K,i=2*(Math.atan(Math.exp(n))-Math.PI/4),o=this.alpha*(t.x-this.lambda0),s=Math.atan(Math.sin(o)/(Math.sin(this.b0)*Math.tan(i)+Math.cos(this.b0)*Math.cos(o))),a=Math.asin(Math.cos(this.b0)*Math.sin(i)-Math.sin(this.b0)*Math.cos(i)*Math.cos(o));return t.y=this.R/2*Math.log((1+Math.sin(a))/(1-Math.sin(a)))+this.y0,t.x=this.R*s+this.x0,t},inverse:function(t){for(var e=t.x-this.x0,r=t.y-this.y0,n=e/this.R,i=2*(Math.atan(Math.exp(r/this.R))-Math.PI/4),o=Math.asin(Math.cos(this.b0)*Math.sin(i)+Math.sin(this.b0)*Math.cos(i)*Math.cos(n)),s=Math.atan(Math.sin(n)/(Math.cos(this.b0)*Math.cos(n)-Math.sin(this.b0)*Math.tan(i))),a=this.lambda0+s/this.alpha,l=0,u=o,c=-1e3,h=0;Math.abs(u-c)>1e-7;){if(++h>20)return;l=1/this.alpha*(Math.log(Math.tan(Math.PI/4+o/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(u))/2)),c=u,u=2*Math.atan(Math.exp(l))-Math.PI/2}return t.x=a,t.y=u,t},names:["somerc"]};var Je=1e-7;const Qe={init:function(){var t,e,r,n,i,o,s,a,l,u,c,h,p,d=0,g=0,f=0,m=0,y=0,A=0,I=0;this.no_off=(p="object"==typeof(h=this).PROJECTION?Object.keys(h.PROJECTION)[0]:h.PROJECTION,"no_uoff"in h||"no_off"in h||-1!==["Hotine_Oblique_Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin"].indexOf(p)),this.no_rot="no_rot"in this;var C=!1;"alpha"in this&&(C=!0);var v=!1;if("rectified_grid_angle"in this&&(v=!0),C&&(I=this.alpha),v&&(d=this.rectified_grid_angle*X),C||v)g=this.longc;else if(f=this.long1,y=this.lat1,m=this.long2,A=this.lat2,Math.abs(y-A)<=Je||(t=Math.abs(y))<=Je||Math.abs(t-V)<=Je||Math.abs(Math.abs(this.lat0)-V)<=Je||Math.abs(Math.abs(A)-V)<=Je)throw new Error;var _=1-this.es;e=Math.sqrt(_),Math.abs(this.lat0)>Y?(a=Math.sin(this.lat0),r=Math.cos(this.lat0),t=1-this.es*a*a,this.B=r*r,this.B=Math.sqrt(1+this.es*this.B*this.B/_),this.A=this.B*this.k0*e/t,(i=(n=this.B*e/(r*Math.sqrt(t)))*n-1)<=0?i=0:(i=Math.sqrt(i),this.lat0<0&&(i=-i)),this.E=i+=n,this.E*=Math.pow(Mt(this.e,this.lat0,a),this.B)):(this.B=1/e,this.A=this.k0,this.E=n=i=1),C||v?(C?(c=Math.asin(Math.sin(I)/n),v||(d=I)):(c=d,I=Math.asin(n*Math.sin(c))),this.lam0=g-Math.asin(.5*(i-1/i)*Math.tan(c))/this.B):(o=Math.pow(Mt(this.e,y,Math.sin(y)),this.B),s=Math.pow(Mt(this.e,A,Math.sin(A)),this.B),i=this.E/o,l=(s-o)/(s+o),u=((u=this.E*this.E)-s*o)/(u+s*o),(t=f-m)<-Math.pi?m-=J:t>Math.pi&&(m+=J),this.lam0=xt(.5*(f+m)-Math.atan(u*Math.tan(.5*this.B*(f-m))/l)/this.B),c=Math.atan(2*Math.sin(this.B*xt(f-this.lam0))/(i-1/i)),d=I=Math.asin(n*Math.sin(c))),this.singam=Math.sin(c),this.cosgam=Math.cos(c),this.sinrot=Math.sin(d),this.cosrot=Math.cos(d),this.rB=1/this.B,this.ArB=this.A*this.rB,this.BrA=1/this.ArB,this.A,this.B,this.no_off?this.u_0=0:(this.u_0=Math.abs(this.ArB*Math.atan(Math.sqrt(n*n-1)/Math.cos(I))),this.lat0<0&&(this.u_0=-this.u_0)),i=.5*c,this.v_pole_n=this.ArB*Math.log(Math.tan(K-i)),this.v_pole_s=this.ArB*Math.log(Math.tan(K+i))},forward:function(t){var e,r,n,i,o,s,a,l,u={};if(t.x=t.x-this.lam0,Math.abs(Math.abs(t.y)-V)>Y){if(e=.5*((o=this.E/Math.pow(Mt(this.e,t.y,Math.sin(t.y)),this.B))-(s=1/o)),r=.5*(o+s),i=Math.sin(this.B*t.x),n=(e*this.singam-i*this.cosgam)/r,Math.abs(Math.abs(n)-1)0?this.v_pole_n:this.v_pole_s,a=this.ArB*t.y;return this.no_rot?(u.x=a,u.y=l):(a-=this.u_0,u.x=l*this.cosrot+a*this.sinrot,u.y=a*this.cosrot-l*this.sinrot),u.x=this.a*u.x+this.x0,u.y=this.a*u.y+this.y0,u},inverse:function(t){var e,r,n,i,o,s,a,l={};if(t.x=(t.x-this.x0)*(1/this.a),t.y=(t.y-this.y0)*(1/this.a),this.no_rot?(r=t.y,e=t.x):(r=t.x*this.cosrot-t.y*this.sinrot,e=t.y*this.cosrot+t.x*this.sinrot+this.u_0),i=.5*((n=Math.exp(-this.BrA*r))-1/n),o=.5*(n+1/n),a=((s=Math.sin(this.BrA*e))*this.cosgam+i*this.singam)/o,Math.abs(Math.abs(a)-1)Y?this.ns=Math.log(n/a)/Math.log(i/l):this.ns=e,isNaN(this.ns)&&(this.ns=e),this.f0=n/(this.ns*Math.pow(i,this.ns)),this.rh=this.a*this.f0*Math.pow(u,this.ns),this.title||(this.title="Lambert Conformal Conic")}},forward:function(t){var e=t.x,r=t.y;Math.abs(2*Math.abs(r)-Math.PI)<=Y&&(r=Et(r)*(V-2e-10));var n,i,o=Math.abs(Math.abs(r)-V);if(o>Y)n=Mt(this.e,r,Math.sin(r)),i=this.a*this.f0*Math.pow(n,this.ns);else{if((o=r*this.ns)<=0)return null;i=0}var s=this.ns*xt(e-this.long0);return t.x=this.k0*(i*Math.sin(s))+this.x0,t.y=this.k0*(this.rh-i*Math.cos(s))+this.y0,t},inverse:function(t){var e,r,n,i,o,s=(t.x-this.x0)/this.k0,a=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(e=Math.sqrt(s*s+a*a),r=1):(e=-Math.sqrt(s*s+a*a),r=-1);var l=0;if(0!==e&&(l=Math.atan2(r*s,r*a)),0!==e||this.ns>0){if(r=1/this.ns,n=Math.pow(e/(this.a*this.f0),r),-9999===(i=Rt(this.e,n)))return null}else i=-V;return o=xt(l/this.ns+this.long0),t.x=o,t.y=i,t},names:["Lambert Tangential Conformal Conic Projection","Lambert_Conformal_Conic","Lambert_Conformal_Conic_1SP","Lambert_Conformal_Conic_2SP","lcc","Lambert Conic Conformal (1SP)","Lambert Conic Conformal (2SP)"]};const tr={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var e,r,n,i,o,s,a,l=t.x,u=t.y,c=xt(l-this.long0);return e=Math.pow((1+this.e*Math.sin(u))/(1-this.e*Math.sin(u)),this.alfa*this.e/2),r=2*(Math.atan(this.k*Math.pow(Math.tan(u/2+this.s45),this.alfa)/e)-this.s45),n=-c*this.alfa,i=Math.asin(Math.cos(this.ad)*Math.sin(r)+Math.sin(this.ad)*Math.cos(r)*Math.cos(n)),o=Math.asin(Math.cos(r)*Math.sin(n)/Math.cos(i)),s=this.n*o,a=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(i/2+this.s45),this.n),t.y=a*Math.cos(s)/1,t.x=a*Math.sin(s)/1,this.czech||(t.y*=-1,t.x*=-1),t},inverse:function(t){var e,r,n,i,o,s,a,l=t.x;t.x=t.y,t.y=l,this.czech||(t.y*=-1,t.x*=-1),o=Math.sqrt(t.x*t.x+t.y*t.y),i=Math.atan2(t.y,t.x)/Math.sin(this.s0),n=2*(Math.atan(Math.pow(this.ro0/o,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),e=Math.asin(Math.cos(this.ad)*Math.sin(n)-Math.sin(this.ad)*Math.cos(n)*Math.cos(i)),r=Math.asin(Math.cos(n)*Math.sin(i)/Math.cos(e)),t.x=this.long0-r/this.alfa,s=e,a=0;var u=0;do{t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(e/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(s))/(1-this.e*Math.sin(s)),this.e/2))-this.s45),Math.abs(s-t.y)<1e-10&&(a=1),s=t.y,u+=1}while(0===a&&u<15);return u>=15?null:t},names:["Krovak","krovak"]};function er(t,e,r,n,i){return t*i-e*Math.sin(2*i)+r*Math.sin(4*i)-n*Math.sin(6*i)}function rr(t){return 1-.25*t*(1+t/16*(3+1.25*t))}function nr(t){return.375*t*(1+.25*t*(1+.46875*t))}function ir(t){return.05859375*t*t*(1+.75*t)}function or(t){return t*t*t*(35/3072)}function sr(t,e,r){var n=e*r;return t/Math.sqrt(1-n*n)}function ar(t){return Math.abs(t)1e-7?(1-t*t)*(e/(1-(r=t*e)*r)-.5/t*Math.log((1-r)/(1+r))):2*e}var hr=.3333333333333333,pr=.17222222222222222,dr=.10257936507936508,gr=.06388888888888888,fr=.0664021164021164,mr=.016415012942191543;const yr={init:function(){var t,e=Math.abs(this.lat0);if(Math.abs(e-V)0)switch(this.qp=cr(this.e,1),this.mmf=.5/(1-this.es),this.apa=function(t){var e,r=[];return r[0]=t*hr,e=t*t,r[0]+=e*pr,r[1]=e*gr,e*=t,r[0]+=e*dr,r[1]+=e*fr,r[2]=e*mr,r}(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),t=Math.sin(this.lat0),this.sinb1=cr(this.e,t)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*t*t)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}else this.mode===this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var e,r,n,i,o,s,a,l,u,c,h=t.x,p=t.y;if(h=xt(h-this.long0),this.sphere){if(o=Math.sin(p),c=Math.cos(p),n=Math.cos(h),this.mode===this.OBLIQ||this.mode===this.EQUIT){if((r=this.mode===this.EQUIT?1+c*n:1+this.sinph0*o+this.cosph0*c*n)<=Y)return null;e=(r=Math.sqrt(2/r))*c*Math.sin(h),r*=this.mode===this.EQUIT?o:this.cosph0*o-this.sinph0*c*n}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(n=-n),Math.abs(p+this.lat0)=0?(e=(u=Math.sqrt(s))*i,r=n*(this.mode===this.S_POLE?u:-u)):e=r=0}}return t.x=this.a*e+this.x0,t.y=this.a*r+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var e,r,n,i,o,s,a,l,u,c,h=t.x/this.a,p=t.y/this.a;if(this.sphere){var d,g=0,f=0;if((r=.5*(d=Math.sqrt(h*h+p*p)))>1)return null;switch(r=2*Math.asin(r),this.mode!==this.OBLIQ&&this.mode!==this.EQUIT||(f=Math.sin(r),g=Math.cos(r)),this.mode){case this.EQUIT:r=Math.abs(d)<=Y?0:Math.asin(p*f/d),h*=f,p=g*d;break;case this.OBLIQ:r=Math.abs(d)<=Y?this.lat0:Math.asin(g*this.sinph0+p*f*this.cosph0/d),h*=f*this.cosph0,p=(g-Math.sin(r)*this.sinph0)*d;break;case this.N_POLE:p=-p,r=V-r;break;case this.S_POLE:r-=V}e=0!==p||this.mode!==this.EQUIT&&this.mode!==this.OBLIQ?Math.atan2(h,p):0}else{if(a=0,this.mode===this.OBLIQ||this.mode===this.EQUIT){if(h/=this.dd,p*=this.dd,(s=Math.sqrt(h*h+p*p))1&&(t=t>1?1:-1),Math.asin(t)}const Ir={init:function(){Math.abs(this.lat1+this.lat2)Y?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)},forward:function(t){var e=t.x,r=t.y;this.sin_phi=Math.sin(r),this.cos_phi=Math.cos(r);var n=cr(this.e3,this.sin_phi),i=this.a*Math.sqrt(this.c-this.ns0*n)/this.ns0,o=this.ns0*xt(e-this.long0),s=i*Math.sin(o)+this.x0,a=this.rh-i*Math.cos(o)+this.y0;return t.x=s,t.y=a,t},inverse:function(t){var e,r,n,i,o,s;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(e=Math.sqrt(t.x*t.x+t.y*t.y),n=1):(e=-Math.sqrt(t.x*t.x+t.y*t.y),n=-1),i=0,0!==e&&(i=Math.atan2(n*t.x,n*t.y)),n=e*this.ns0/this.a,this.sphere?s=Math.asin((this.c-n*n)/(2*this.ns0)):(r=(this.c-n*n)/this.ns0,s=this.phi1z(this.e3,r)),o=xt(i/this.ns0+this.long0),t.x=o,t.y=s,t},names:["Albers_Conic_Equal_Area","Albers","aea"],phi1z:function(t,e){var r,n,i,o,s=Ar(.5*e);if(t0||Math.abs(o)<=Y?(s=this.x0+1*this.a*r*Math.sin(n)/o,a=this.y0+1*this.a*(this.cos_p14*e-this.sin_p14*r*i)/o):(s=this.x0+this.infinity_dist*r*Math.sin(n),a=this.y0+this.infinity_dist*(this.cos_p14*e-this.sin_p14*r*i)),t.x=s,t.y=a,t},inverse:function(t){var e,r,n,i,o,s;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(e=Math.sqrt(t.x*t.x+t.y*t.y))?(i=Math.atan2(e,this.rc),r=Math.sin(i),s=Ar((n=Math.cos(i))*this.sin_p14+t.y*r*this.cos_p14/e),o=Math.atan2(t.x*r,e*this.cos_p14*n-t.y*this.sin_p14*r),o=xt(this.long0+o)):(s=this.phic0,o=0),t.x=o,t.y=s,t},names:["gnom"]};const vr={init:function(){this.sphere||(this.k0=St(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var e,r,n=t.x,i=t.y,o=xt(n-this.long0);if(this.sphere)e=this.x0+this.a*o*Math.cos(this.lat_ts),r=this.y0+this.a*Math.sin(i)/Math.cos(this.lat_ts);else{var s=cr(this.e,Math.sin(i));e=this.x0+this.a*this.k0*o,r=this.y0+this.a*s*.5/this.k0}return t.x=e,t.y=r,t},inverse:function(t){var e,r;return t.x-=this.x0,t.y-=this.y0,this.sphere?(e=xt(this.long0+t.x/this.a/Math.cos(this.lat_ts)),r=Math.asin(t.y/this.a*Math.cos(this.lat_ts))):(r=function(t,e){var r=1-(1-t*t)/(2*t)*Math.log((1-t)/(1+t));if(Math.abs(Math.abs(e)-r)<1e-6)return e<0?-1*V:V;for(var n,i,o,s,a=Math.asin(.5*e),l=0;l<30;l++)if(i=Math.sin(a),o=Math.cos(a),s=t*i,a+=n=Math.pow(1-s*s,2)/(2*o)*(e/(1-t*t)-i/(1-s*s)+.5/t*Math.log((1-s)/(1+s))),Math.abs(n)<=1e-10)return a;return NaN}(this.e,2*t.y*this.k0/this.a),e=xt(this.long0+t.x/(this.a*this.k0))),t.x=e,t.y=r,t},names:["cea"]};const _r={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Equidistant Cylindrical (Plate Carre)",this.rc=Math.cos(this.lat_ts)},forward:function(t){var e=t.x,r=t.y,n=xt(e-this.long0),i=ar(r-this.lat0);return t.x=this.x0+this.a*n*this.rc,t.y=this.y0+this.a*i,t},inverse:function(t){var e=t.x,r=t.y;return t.x=xt(this.long0+(e-this.x0)/(this.a*this.rc)),t.y=ar(this.lat0+(r-this.y0)/this.a),t},names:["Equirectangular","Equidistant_Cylindrical","eqc"]};const br={init:function(){this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=rr(this.es),this.e1=nr(this.es),this.e2=ir(this.es),this.e3=or(this.es),this.ml0=this.a*er(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var e,r,n,i=t.x,o=t.y,s=xt(i-this.long0);if(n=s*Math.sin(o),this.sphere)Math.abs(o)<=Y?(e=this.a*s,r=-1*this.a*this.lat0):(e=this.a*Math.sin(n)/Math.tan(o),r=this.a*(ar(o-this.lat0)+(1-Math.cos(n))/Math.tan(o)));else if(Math.abs(o)<=Y)e=this.a*s,r=-1*this.ml0;else{var a=sr(this.a,this.e,Math.sin(o))/Math.tan(o);e=a*Math.sin(n),r=this.a*er(this.e0,this.e1,this.e2,this.e3,o)-this.ml0+a*(1-Math.cos(n))}return t.x=e+this.x0,t.y=r+this.y0,t},inverse:function(t){var e,r,n,i,o,s,a,l,u;if(n=t.x-this.x0,i=t.y-this.y0,this.sphere)if(Math.abs(i+this.a*this.lat0)<=Y)e=xt(n/this.a+this.long0),r=0;else{var c;for(s=this.lat0+i/this.a,a=n*n/this.a/this.a+s*s,l=s,o=20;o;--o)if(l+=u=-1*(s*(l*(c=Math.tan(l))+1)-l-.5*(l*l+a)*c)/((l-s)/c-1),Math.abs(u)<=Y){r=l;break}e=xt(this.long0+Math.asin(n*Math.tan(l)/this.a)/Math.sin(r))}else if(Math.abs(i+this.ml0)<=Y)r=0,e=xt(this.long0+n/this.a);else{var h,p,d,g,f;for(s=(this.ml0+i)/this.a,a=n*n/this.a/this.a+s*s,l=s,o=20;o;--o)if(f=this.e*Math.sin(l),h=Math.sqrt(1-f*f)*Math.tan(l),p=this.a*er(this.e0,this.e1,this.e2,this.e3,l),d=this.e0-2*this.e1*Math.cos(2*l)+4*this.e2*Math.cos(4*l)-6*this.e3*Math.cos(6*l),l-=u=(s*(h*(g=p/this.a)+1)-g-.5*h*(g*g+a))/(this.es*Math.sin(2*l)*(g*g+a-2*s*g)/(4*h)+(s-g)*(h*d-2/Math.sin(2*l))-d),Math.abs(u)<=Y){r=l;break}h=Math.sqrt(1-this.es*Math.pow(Math.sin(r),2))*Math.tan(r),e=xt(this.long0+Math.asin(n*h/this.a)/Math.sin(r))}return t.x=e,t.y=r,t},names:["Polyconic","poly"]};const wr={init:function(){this.A=[],this.A[1]=.6399175073,this.A[2]=-.1358797613,this.A[3]=.063294409,this.A[4]=-.02526853,this.A[5]=.0117879,this.A[6]=-.0055161,this.A[7]=.0026906,this.A[8]=-.001333,this.A[9]=67e-5,this.A[10]=-34e-5,this.B_re=[],this.B_im=[],this.B_re[1]=.7557853228,this.B_im[1]=0,this.B_re[2]=.249204646,this.B_im[2]=.003371507,this.B_re[3]=-.001541739,this.B_im[3]=.04105856,this.B_re[4]=-.10162907,this.B_im[4]=.01727609,this.B_re[5]=-.26623489,this.B_im[5]=-.36249218,this.B_re[6]=-.6870983,this.B_im[6]=-1.1651967,this.C_re=[],this.C_im=[],this.C_re[1]=1.3231270439,this.C_im[1]=0,this.C_re[2]=-.577245789,this.C_im[2]=-.007809598,this.C_re[3]=.508307513,this.C_im[3]=-.112208952,this.C_re[4]=-.15094762,this.C_im[4]=.18200602,this.C_re[5]=1.01418179,this.C_im[5]=1.64497696,this.C_re[6]=1.9660549,this.C_im[6]=2.5127645,this.D=[],this.D[1]=1.5627014243,this.D[2]=.5185406398,this.D[3]=-.03333098,this.D[4]=-.1052906,this.D[5]=-.0368594,this.D[6]=.007317,this.D[7]=.0122,this.D[8]=.00394,this.D[9]=-.0013},forward:function(t){var e,r=t.x,n=t.y-this.lat0,i=r-this.long0,o=n/H*1e-5,s=i,a=1,l=0;for(e=1;e<=10;e++)a*=o,l+=this.A[e]*a;var u,c=l,h=s,p=1,d=0,g=0,f=0;for(e=1;e<=6;e++)u=d*c+p*h,p=p*c-d*h,d=u,g=g+this.B_re[e]*p-this.B_im[e]*d,f=f+this.B_im[e]*p+this.B_re[e]*d;return t.x=f*this.a+this.x0,t.y=g*this.a+this.y0,t},inverse:function(t){var e,r,n=t.x,i=t.y,o=n-this.x0,s=(i-this.y0)/this.a,a=o/this.a,l=1,u=0,c=0,h=0;for(e=1;e<=6;e++)r=u*s+l*a,l=l*s-u*a,u=r,c=c+this.C_re[e]*l-this.C_im[e]*u,h=h+this.C_im[e]*l+this.C_re[e]*u;for(var p=0;p.999999999999&&(r=.999999999999),e=Math.asin(r);var n=xt(this.long0+t.x/(.900316316158*this.a*Math.cos(e)));n<-Math.PI&&(n=-Math.PI),n>Math.PI&&(n=Math.PI),r=(2*e+Math.sin(2*e))/Math.PI,Math.abs(r)>1&&(r=1);var i=Math.asin(r);return t.x=n,t.y=i,t},names:["Mollweide","moll"]};const Mr={init:function(){Math.abs(this.lat1+this.lat2)=0?(r=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(r=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1);var o=0;return 0!==r&&(o=Math.atan2(e*t.x,e*t.y)),this.sphere?(i=xt(this.long0+o/this.ns),n=ar(this.g-r/this.a),t.x=i,t.y=n,t):(n=lr(this.g-r/this.a,this.e0,this.e1,this.e2,this.e3),i=xt(this.long0+o/this.ns),t.x=i,t.y=n,t)},names:["Equidistant_Conic","eqdc"]};const Rr={init:function(){this.R=this.a},forward:function(t){var e,r,n=t.x,i=t.y,o=xt(n-this.long0);Math.abs(i)<=Y&&(e=this.x0+this.R*o,r=this.y0);var s=Ar(2*Math.abs(i/Math.PI));(Math.abs(o)<=Y||Math.abs(Math.abs(i)-V)<=Y)&&(e=this.x0,r=i>=0?this.y0+Math.PI*this.R*Math.tan(.5*s):this.y0+Math.PI*this.R*-Math.tan(.5*s));var a=.5*Math.abs(Math.PI/o-o/Math.PI),l=a*a,u=Math.sin(s),c=Math.cos(s),h=c/(u+c-1),p=h*h,d=h*(2/u-1),g=d*d,f=Math.PI*this.R*(a*(h-g)+Math.sqrt(l*(h-g)*(h-g)-(g+l)*(p-g)))/(g+l);o<0&&(f=-f),e=this.x0+f;var m=l+h;return f=Math.PI*this.R*(d*m-a*Math.sqrt((g+l)*(l+1)-m*m))/(g+l),r=i>=0?this.y0+f:this.y0-f,t.x=e,t.y=r,t},inverse:function(t){var e,r,n,i,o,s,a,l,u,c,h,p;return t.x-=this.x0,t.y-=this.y0,h=Math.PI*this.R,o=(n=t.x/h)*n+(i=t.y/h)*i,h=3*(i*i/(l=-2*(s=-Math.abs(i)*(1+o))+1+2*i*i+o*o)+(2*(a=s-2*i*i+n*n)*a*a/l/l/l-9*s*a/l/l)/27)/(u=(s-a*a/3/l)/l)/(c=2*Math.sqrt(-u/3)),Math.abs(h)>1&&(h=h>=0?1:-1),p=Math.acos(h)/3,r=t.y>=0?(-c*Math.cos(p+Math.PI/3)-a/3/l)*Math.PI:-(-c*Math.cos(p+Math.PI/3)-a/3/l)*Math.PI,e=Math.abs(n)2*V*this.a)return;return r=e/this.a,n=Math.sin(r),i=Math.cos(r),o=this.long0,Math.abs(e)<=Y?s=this.lat0:(s=Ar(i*this.sin_p12+t.y*n*this.cos_p12/e),a=Math.abs(this.lat0)-V,o=Math.abs(a)<=Y?this.lat0>=0?xt(this.long0+Math.atan2(t.x,-t.y)):xt(this.long0-Math.atan2(-t.x,t.y)):xt(this.long0+Math.atan2(t.x*n,e*this.cos_p12*i-t.y*this.sin_p12*n))),t.x=o,t.y=s,t}return l=rr(this.es),u=nr(this.es),c=ir(this.es),h=or(this.es),Math.abs(this.sin_p12-1)<=Y?(s=lr(((p=this.a*er(l,u,c,h,V))-(e=Math.sqrt(t.x*t.x+t.y*t.y)))/this.a,l,u,c,h),o=xt(this.long0+Math.atan2(t.x,-1*t.y)),t.x=o,t.y=s,t):Math.abs(this.sin_p12+1)<=Y?(p=this.a*er(l,u,c,h,V),s=lr(((e=Math.sqrt(t.x*t.x+t.y*t.y))-p)/this.a,l,u,c,h),o=xt(this.long0+Math.atan2(t.x,t.y)),t.x=o,t.y=s,t):(e=Math.sqrt(t.x*t.x+t.y*t.y),f=Math.atan2(t.x,t.y),d=sr(this.a,this.e,this.sin_p12),m=Math.cos(f),A=-(y=this.e*this.cos_p12*m)*y/(1-this.es),I=3*this.es*(1-A)*this.sin_p12*this.cos_p12*m/(1-this.es),_=1-A*(v=(C=e/d)-A*(1+A)*Math.pow(C,3)/6-I*(1+3*A)*Math.pow(C,4)/24)*v/2-C*v*v*v/6,g=Math.asin(this.sin_p12*Math.cos(v)+this.cos_p12*Math.sin(v)*m),o=xt(this.long0+Math.asin(Math.sin(f)*Math.sin(v)/Math.cos(g))),b=Math.sin(g),s=Math.atan2((b-this.es*_*this.sin_p12)*Math.tan(g),b*(1-this.es)),t.x=o,t.y=s,t)},names:["Azimuthal_Equidistant","aeqd"]};const Pr={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)},forward:function(t){var e,r,n,i,o,s,a,l=t.x,u=t.y;return n=xt(l-this.long0),e=Math.sin(u),r=Math.cos(u),i=Math.cos(n),((o=this.sin_p14*e+this.cos_p14*r*i)>0||Math.abs(o)<=Y)&&(s=1*this.a*r*Math.sin(n),a=this.y0+1*this.a*(this.cos_p14*e-this.sin_p14*r*i)),t.x=s,t.y=a,t},inverse:function(t){var e,r,n,i,o,s,a;return t.x-=this.x0,t.y-=this.y0,r=Ar((e=Math.sqrt(t.x*t.x+t.y*t.y))/this.a),n=Math.sin(r),i=Math.cos(r),s=this.long0,Math.abs(e)<=Y?(a=this.lat0,t.x=s,t.y=a,t):(a=Ar(i*this.sin_p14+t.y*n*this.cos_p14/e),o=Math.abs(this.lat0)-V,Math.abs(o)<=Y?(s=this.lat0>=0?xt(this.long0+Math.atan2(t.x,-t.y)):xt(this.long0-Math.atan2(-t.x,t.y)),t.x=s,t.y=a,t):(s=xt(this.long0+Math.atan2(t.x*n,e*this.cos_p14*i-t.y*this.sin_p14*n)),t.x=s,t.y=a,t))},names:["ortho"]};var Gr=1,Nr=2,Or=3,kr=4,Lr=5,Dr=6,jr=1,Ur=2,zr=3,qr=4;function Fr(t,e,r,n){var i;return tK&&i<=V+K?(n.value=Ur,i-=V):i>V+K||i<=-(V+K)?(n.value=zr,i=i>=0?i-Q:i+Q):(n.value=qr,i+=V)),i}function Br(t,e){var r=t+e;return r<-3.14159265359?r+=J:r>3.14159265359&&(r-=J),r}const Wr={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=V-K/2?this.face=Lr:this.lat0<=-(V-K/2)?this.face=Dr:Math.abs(this.long0)<=K?this.face=Gr:Math.abs(this.long0)<=V+K?this.face=this.long0>0?Nr:kr:this.face=Or,0!==this.es&&(this.one_minus_f=1-(this.a-this.b)/this.a,this.one_minus_f_squared=this.one_minus_f*this.one_minus_f)},forward:function(t){var e,r,n,i,o,s,a={x:0,y:0},l={value:0};if(t.x-=this.long0,e=0!==this.es?Math.atan(this.one_minus_f_squared*Math.tan(t.y)):t.y,r=t.x,this.face===Lr)i=V-e,r>=K&&r<=V+K?(l.value=jr,n=r-V):r>V+K||r<=-(V+K)?(l.value=Ur,n=r>0?r-Q:r+Q):r>-(V+K)&&r<=-K?(l.value=zr,n=r+V):(l.value=qr,n=r);else if(this.face===Dr)i=V+e,r>=K&&r<=V+K?(l.value=jr,n=-r+V):r=-K?(l.value=Ur,n=-r):r<-K&&r>=-(V+K)?(l.value=zr,n=-r-V):(l.value=qr,n=r>0?-r+Q:-r-Q);else{var u,c,h,p,d,g;this.face===Nr?r=Br(r,+V):this.face===Or?r=Br(r,3.14159265359):this.face===kr&&(r=Br(r,-V)),p=Math.sin(e),d=Math.cos(e),g=Math.sin(r),u=d*Math.cos(r),c=d*g,h=p,this.face===Gr?n=Fr(i=Math.acos(u),h,c,l):this.face===Nr?n=Fr(i=Math.acos(c),h,-u,l):this.face===Or?n=Fr(i=Math.acos(-u),h,-c,l):this.face===kr?n=Fr(i=Math.acos(-c),h,u,l):(i=n=0,l.value=jr)}return s=Math.atan(3.8197186342052367*(n+Math.acos(Math.sin(n)*Math.cos(K))-V)),o=Math.sqrt((1-Math.cos(i))/(Math.cos(s)*Math.cos(s))/(1-Math.cos(Math.atan(1/Math.cos(n))))),l.value===Ur?s+=V:l.value===zr?s+=Q:l.value===qr&&(s+=4.7123889803850005),a.x=o*Math.cos(s),a.y=o*Math.sin(s),a.x=a.x*this.a+this.x0,a.y=a.y*this.a+this.y0,t.x=a.x,t.y=a.y,t},inverse:function(t){var e,r,n,i,o,s,a,l,u,c,h,p,d={lam:0,phi:0},g={value:0};if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,r=Math.atan(Math.sqrt(t.x*t.x+t.y*t.y)),e=Math.atan2(t.y,t.x),t.x>=0&&t.x>=Math.abs(t.y)?g.value=jr:t.y>=0&&t.y>=Math.abs(t.x)?(g.value=Ur,e-=V):t.x<0&&-t.x>=Math.abs(t.y)?(g.value=zr,e=e<0?e+Q:e-Q):(g.value=qr,e+=V),u=.26179938779916667*Math.tan(e),o=Math.sin(u)/(Math.cos(u)-1/Math.sqrt(2)),s=Math.atan(o),(a=1-(n=Math.cos(e))*n*(i=Math.tan(r))*i*(1-Math.cos(Math.atan(1/Math.cos(s)))))<-1?a=-1:a>1&&(a=1),this.face===Lr)l=Math.acos(a),d.phi=V-l,g.value===jr?d.lam=s+V:g.value===Ur?d.lam=s<0?s+Q:s-Q:g.value===zr?d.lam=s-V:d.lam=s;else if(this.face===Dr)l=Math.acos(a),d.phi=l-V,g.value===jr?d.lam=-s+V:g.value===Ur?d.lam=-s:g.value===zr?d.lam=-s-V:d.lam=s<0?-s-Q:-s+Q;else{var f,m,y;u=(f=a)*f,m=(u+=(y=u>=1?0:Math.sqrt(1-u)*Math.sin(s))*y)>=1?0:Math.sqrt(1-u),g.value===Ur?(u=m,m=-y,y=u):g.value===zr?(m=-m,y=-y):g.value===qr&&(u=m,m=y,y=-u),this.face===Nr?(u=f,f=-m,m=u):this.face===Or?(f=-f,m=-m):this.face===kr&&(u=f,f=m,m=-u),d.phi=Math.acos(-y)-V,d.lam=Math.atan2(m,f),this.face===Nr?d.lam=Br(d.lam,-V):this.face===Or?d.lam=Br(d.lam,-3.14159265359):this.face===kr&&(d.lam=Br(d.lam,+V))}return 0!==this.es&&(c=d.phi<0?1:0,h=Math.tan(d.phi),p=this.b/Math.sqrt(h*h+this.one_minus_f_squared),d.phi=Math.atan(Math.sqrt(this.a*this.a-p*p)/(this.one_minus_f*p)),c&&(d.phi=-d.phi)),d.lam+=this.long0,t.x=d.lam,t.y=d.phi,t},names:["Quadrilateralized Spherical Cube","Quadrilateralized_Spherical_Cube","qsc"]};var Hr=[[1,22199e-21,-715515e-10,31103e-10],[.9986,-482243e-9,-24897e-9,-13309e-10],[.9954,-83103e-8,-448605e-10,-9.86701e-7],[.99,-.00135364,-59661e-9,36777e-10],[.9822,-.00167442,-449547e-11,-572411e-11],[.973,-.00214868,-903571e-10,1.8736e-8],[.96,-.00305085,-900761e-10,164917e-11],[.9427,-.00382792,-653386e-10,-26154e-10],[.9216,-.00467746,-10457e-8,481243e-11],[.8962,-.00536223,-323831e-10,-543432e-11],[.8679,-.00609363,-113898e-9,332484e-11],[.835,-.00698325,-640253e-10,9.34959e-7],[.7986,-.00755338,-500009e-10,9.35324e-7],[.7597,-.00798324,-35971e-9,-227626e-11],[.7186,-.00851367,-701149e-10,-86303e-10],[.6732,-.00986209,-199569e-9,191974e-10],[.6213,-.010418,883923e-10,624051e-11],[.5722,-.00906601,182e-6,624051e-11],[.5322,-.00677797,275608e-9,624051e-11]],Vr=[[-520417e-23,.0124,121431e-23,-845284e-16],[.062,.0124,-1.26793e-9,4.22642e-10],[.124,.0124,5.07171e-9,-1.60604e-9],[.186,.0123999,-1.90189e-8,6.00152e-9],[.248,.0124002,7.10039e-8,-2.24e-8],[.31,.0123992,-2.64997e-7,8.35986e-8],[.372,.0124029,9.88983e-7,-3.11994e-7],[.434,.0123893,-369093e-11,-4.35621e-7],[.4958,.0123198,-102252e-10,-3.45523e-7],[.5571,.0121916,-154081e-10,-5.82288e-7],[.6176,.0119938,-241424e-10,-5.25327e-7],[.6769,.011713,-320223e-10,-5.16405e-7],[.7346,.0113541,-397684e-10,-6.09052e-7],[.7903,.0109107,-489042e-10,-104739e-11],[.8435,.0103431,-64615e-9,-1.40374e-9],[.8936,.00969686,-64636e-9,-8547e-9],[.9394,.00840947,-192841e-9,-42106e-10],[.9761,.00616527,-256e-6,-42106e-10],[1,.00328947,-319159e-9,-42106e-10]],Yr=.8487,Xr=1.3523,Zr=11.459155902616464,Kr=1/Zr,Jr=18,Qr=function(t,e){return t[0]+e*(t[1]+e*(t[2]+e*t[3]))};const $r={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.long0=this.long0||0,this.es=0,this.title=this.title||"Robinson"},forward:function(t){var e=xt(t.x-this.long0),r=Math.abs(t.y),n=Math.floor(r*Zr);n<0?n=0:n>=Jr&&(n=17);var i={x:Qr(Hr[n],r=Z*(r-Kr*n))*e,y:Qr(Vr[n],r)};return t.y<0&&(i.y=-i.y),i.x=i.x*this.a*Yr+this.x0,i.y=i.y*this.a*Xr+this.y0,i},inverse:function(t){var e={x:(t.x-this.x0)/(this.a*Yr),y:Math.abs(t.y-this.y0)/(this.a*Xr)};if(e.y>=1)e.x/=Hr[18][0],e.y=t.y<0?-V:V;else{var r=Math.floor(e.y*Jr);for(r<0?r=0:r>=Jr&&(r=17);;)if(Vr[r][0]>e.y)--r;else{if(!(Vr[r+1][0]<=e.y))break;++r}var n=Vr[r],i=5*(e.y-n[0])/(Vr[r+1][0]-n[0]);i=function(t,e,r,n){for(var i=e;n;--n){var o=t(i);if(i-=o,Math.abs(o)1e10)throw new Error;if(this.radius_g=1+this.radius_g_1,this.C=this.radius_g*this.radius_g-1,0!==this.es){var t=1-this.es,e=1/t;this.radius_p=Math.sqrt(t),this.radius_p2=t,this.radius_p_inv2=e,this.shape="ellipse"}else this.radius_p=1,this.radius_p2=1,this.radius_p_inv2=1,this.shape="sphere";this.title||(this.title="Geostationary Satellite View")},forward:function(t){var e,r,n,i,o=t.x,s=t.y;if(o-=this.long0,"ellipse"===this.shape){s=Math.atan(this.radius_p2*Math.tan(s));var a=this.radius_p/ze(this.radius_p*Math.cos(s),Math.sin(s));if(r=a*Math.cos(o)*Math.cos(s),n=a*Math.sin(o)*Math.cos(s),i=a*Math.sin(s),(this.radius_g-r)*r-n*n-i*i*this.radius_p_inv2<0)return t.x=Number.NaN,t.y=Number.NaN,t;e=this.radius_g-r,this.flip_axis?(t.x=this.radius_g_1*Math.atan(n/ze(i,e)),t.y=this.radius_g_1*Math.atan(i/e)):(t.x=this.radius_g_1*Math.atan(n/e),t.y=this.radius_g_1*Math.atan(i/ze(n,e)))}else"sphere"===this.shape&&(e=Math.cos(s),r=Math.cos(o)*e,n=Math.sin(o)*e,i=Math.sin(s),e=this.radius_g-r,this.flip_axis?(t.x=this.radius_g_1*Math.atan(n/ze(i,e)),t.y=this.radius_g_1*Math.atan(i/e)):(t.x=this.radius_g_1*Math.atan(n/e),t.y=this.radius_g_1*Math.atan(i/ze(n,e))));return t.x=t.x*this.a,t.y=t.y*this.a,t},inverse:function(t){var e,r,n,i,o=-1,s=0,a=0;if(t.x=t.x/this.a,t.y=t.y/this.a,"ellipse"===this.shape){this.flip_axis?(a=Math.tan(t.y/this.radius_g_1),s=Math.tan(t.x/this.radius_g_1)*ze(1,a)):(s=Math.tan(t.x/this.radius_g_1),a=Math.tan(t.y/this.radius_g_1)*ze(1,s));var l=a/this.radius_p;if(e=s*s+l*l+o*o,(n=(r=2*this.radius_g*o)*r-4*e*this.C)<0)return t.x=Number.NaN,t.y=Number.NaN,t;i=(-r-Math.sqrt(n))/(2*e),o=this.radius_g+i*o,s*=i,a*=i,t.x=Math.atan2(s,o),t.y=Math.atan(a*Math.cos(t.x)/o),t.y=Math.atan(this.radius_p_inv2*Math.tan(t.y))}else if("sphere"===this.shape){if(this.flip_axis?(a=Math.tan(t.y/this.radius_g_1),s=Math.tan(t.x/this.radius_g_1)*Math.sqrt(1+a*a)):(s=Math.tan(t.x/this.radius_g_1),a=Math.tan(t.y/this.radius_g_1)*Math.sqrt(1+s*s)),e=s*s+a*a+o*o,(n=(r=2*this.radius_g*o)*r-4*e*this.C)<0)return t.x=Number.NaN,t.y=Number.NaN,t;i=(-r-Math.sqrt(n))/(2*e),o=this.radius_g+i*o,s*=i,a*=i,t.x=Math.atan2(s,o),t.y=Math.atan(a*Math.cos(t.x)/o)}return t.x=t.x+this.long0,t},names:["Geostationary Satellite View","Geostationary_Satellite","geos"]};var un=1.340264,cn=-.081106,hn=893e-6,pn=.003796,dn=Math.sqrt(3)/2;const gn={init:function(){this.es=0,this.long0=void 0!==this.long0?this.long0:0},forward:function(t){var e=xt(t.x-this.long0),r=t.y,n=Math.asin(dn*Math.sin(r)),i=n*n,o=i*i*i;return t.x=e*Math.cos(n)/(dn*(un+3*cn*i+o*(7*hn+.034164*i))),t.y=n*(un+cn*i+o*(hn+pn*i)),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a;var e,r,n,i,o=t.y;for(i=0;i<12&&(o-=n=(o*(un+cn*(e=o*o)+(r=e*e*e)*(hn+pn*e))-t.y)/(un+3*cn*e+r*(7*hn+.034164*e)),!(Math.abs(n)<1e-9));++i);return r=(e=o*o)*e*e,t.x=dn*t.x*(un+3*cn*e+r*(7*hn+.034164*e))/Math.cos(o),t.y=Math.asin(Math.sin(o)/dn),t.x=xt(t.x+this.long0),t},names:["eqearth","Equal Earth","Equal_Earth"]};var fn=1e-10;function mn(t){var e,r,n,i=xt(t.x-(this.long0||0)),o=t.y;return e=this.am1+this.m1-Le(o,r=Math.sin(o),n=Math.cos(o),this.en),r=n*i/(e*Math.sqrt(1-this.es*r*r)),t.x=e*Math.sin(r),t.y=this.am1-e*Math.cos(r),t.x=this.a*t.x+(this.x0||0),t.y=this.a*t.y+(this.y0||0),t}function yn(t){var e,r,n,i;if(t.x=(t.x-(this.x0||0))/this.a,t.y=(t.y-(this.y0||0))/this.a,r=ze(t.x,t.y=this.am1-t.y),i=De(this.am1+this.m1-r,this.es,this.en),(e=Math.abs(i))fn?(t.x=r*Math.sin(e=n*Math.cos(i)/r),t.y=this.cphi1-r*Math.cos(e)):t.x=t.y=0,t.x=this.a*t.x+(this.x0||0),t.y=this.a*t.y+(this.y0||0),t}function In(t){var e,r;t.x=(t.x-(this.x0||0))/this.a,t.y=(t.y-(this.y0||0))/this.a;var n=ze(t.x,t.y=this.cphi1-t.y);if(r=this.cphi1+this.phi1-n,Math.abs(r)>V)throw new Error;return e=Math.abs(Math.abs(r)-V)<=fn?0:n*Math.atan2(t.x,t.y)/Math.cos(r),t.x=xt(e+(this.long0||0)),t.y=ar(r),t}const Cn={init:function(){var t;if(this.phi1=this.lat1,Math.abs(this.phi1)=V?this.cphi1=0:this.cphi1=1/Math.tan(this.phi1),this.inverse=In,this.forward=An)},names:["bonne","Bonne (Werner lat_1=90)"]};var vn;pe.defaultDatum="WGS84",pe.Proj=Jt,pe.WGS84=new pe.Proj("WGS84"),pe.Point=Pe,pe.toPoint=se,pe.defs=Ct,pe.nadgrid=function(t,e){var r=new DataView(e),n=function(t){var e=t.getInt32(8,!1);if(11===e)return!1;e=t.getInt32(8,!0),11!==e&&console.warn("Failed to detect nadgrid endian-ness, defaulting to little-endian");return!0}(r),i=function(t,e){return{nFields:t.getInt32(8,e),nSubgridFields:t.getInt32(24,e),nSubgrids:t.getInt32(40,e),shiftType:Vt(t,56,64).trim(),fromSemiMajorAxis:t.getFloat64(120,e),fromSemiMinorAxis:t.getFloat64(136,e),toSemiMajorAxis:t.getFloat64(152,e),toSemiMinorAxis:t.getFloat64(168,e)}}(r,n),o=function(t,e,r){for(var n=176,i=[],o=0;o2?(document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("GPelementHidden","GPelementVisible"),document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("gpf-hidden","gpf-visible")):(document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(e._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden")),e.onAutoCompleteSearchText(t))})),n.addEventListener("keydown",(function(t){var r=t.which||t.keyCode;13===r&&t.preventDefault();var n=document.getElementById(e._addUID("GPautocompleteResults"));if(n){var i=n.getElementsByClassName("GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current"),o=n.getElementsByClassName("GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine"),s=o.length;if(s){var a=null;if(i.length)a=i[0];else if((a=o[0]).className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current",a.style.color="#000000",a.style["background-color"]="#CEDBEF",13!==r)return;var l=parseInt(j.index(a.id),10),u=l===s-1?o[0]:o[l+1],c=0===l?o[s-1]:o[l-1];switch(a.style["background-color"]="",a.style.color="",c.style["background-color"]="",c.style.color="",u.style["background-color"]="",u.style.color="",r){case 38:a.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine",c.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current",c.style.color="#000000",c.style["background-color"]="#CEDBEF",a.scrollIntoView();break;case 40:a.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine",u.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current",u.style.color="#000000",u.style["background-color"]="#CEDBEF",a.scrollIntoView();break;case 13:t.preventDefault(),a.click(t)}a.focus()}}})),r.appendChild(n),r},_createSearchResetElement:function(){var t=this,e=document.createElement("button");return e.id=this._addUID("GPsearchInputReset"),e.className="GPshowOpen GPsearchInputReset gpf-btn gpf-btn-icon-reset gpf-btn-icon-search-reset fr-btn fr-btn--secondary gpf-btn--secondary",e.setAttribute("aria-label","Supprimer la recherche"),e.addEventListener("click",(function(e){document.getElementById(t._addUID("GPsearchInputText")).value="",document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),t.onSearchResetClick()})),e},_createButtonsElement:function(){var t=document.createElement("div");return t.className="GPbuttonsContainer",t},_createFirstLineWrapper:function(){var t=document.createElement("div");return t.className="GPsearchFirstLineWrapper",t},_createRadioContainer:function(){var t=document.createElement("div");return t.className="GPsearchRadioContainer",t},_createRadioElements:function(){var t=document.createElement("div");t.className="GPsearchRadioElements";var e=document.createElement("div");e.className="GPsearchSplitChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w";var r=document.createElement("input");r.id=this._addUID("GPsearchSplitLocations"),r.type="radio",r.name="GPsearchSplit",r.value="address",r.checked=!0,e.appendChild(r);var n=document.createElement("label");n.className="gpf-label fr-label",n.htmlFor=this._addUID("GPsearchSplitLocations"),n.title="Adresses",n.innerHTML="Adresses",e.appendChild(n),r.addEventListener?r.addEventListener("change",(function(){r.checked?(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.add("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.remove("gpf-hidden","GPelementHidden")):(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.add("gpf-hidden","GPelementHidden"))})):r.attachEvent&&r.attachEvent("onchange",(function(){r.checked?(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.add("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.remove("gpf-hidden","GPelementHidden")):(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.add("gpf-hidden","GPelementHidden"))}));var i=document.createElement("div");i.className="GPsearchSplitChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w";var o=document.createElement("input");o.id=this._addUID("GPsearchSplitData"),o.type="radio",o.name="GPsearchSplit",o.value="data",i.appendChild(o);var s=document.createElement("label");return s.className="gpf-label fr-label",s.htmlFor=this._addUID("GPsearchSplitData"),s.title="Cartes et données",s.innerHTML="Cartes et données",i.appendChild(s),o.addEventListener?o.addEventListener("change",(function(){o.checked?(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.add("gpf-hidden","GPelementHidden")):(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.add("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.remove("gpf-hidden","GPelementHidden"))})):o.attachEvent&&o.attachEvent("onchange",(function(){o.checked?(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.remove("gpf-hidden","GPelementHidden")):(document.querySelector("[id^='GPautocompleteResultsSuggest']").classList.remove("gpf-hidden","GPelementHidden"),document.querySelector("[id^='GPautocompleteResultsLocation']").classList.add("gpf-hidden","GPelementHidden"))})),t.appendChild(e),t.appendChild(i),[t,r,o]},_createShowAdvancedSearchElement:function(){var t=this,e=document.createElement("span");return e.id=this._addUID("GPshowAdvancedSearch"),e.className="GPshowOpen GPshowAdvancedSearch",e.innerText="Recherche avancée",e.setAttribute("tabindex","0"),e.setAttribute("aria-pressed",!1),e.addEventListener("click",(function(e){var n="true"===e.target.ariaPressed;e.target.setAttribute("aria-pressed",!n);var i="#GPsearchInput-"+t._uid;n?(document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("gpf-visible","gpf-hidden"),document.querySelector(i+" input").disabled=!1,document.querySelector(i+" .GPsearchInputReset")&&(document.querySelector(i+" .GPsearchInputReset").disabled=!1),r()&&(document.querySelector("#GPshowSearchEnginePicto-"+t._uid).disabled=!1)):(document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("GPelementHidden","GPelementVisible"),document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("gpf-hidden","gpf-visible"),document.querySelector(i+" input").disabled=!0,document.querySelector(i+" .GPsearchInputReset")&&(document.querySelector(i+" .GPsearchInputReset").disabled=!0),r()&&(document.querySelector("#GPshowSearchEnginePicto-"+t._uid).disabled=!0)),document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(t._addUID("GPcoordinateSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPcoordinateSearchPanel")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(t._addUID("GPshowSearchByCoordinate")).setAttribute("aria-pressed",!1)})),e},_createShowGeolocateElement:function(){var t=this,e=document.createElement("button");return e.id=this._addUID("GPshowGeolocate"),e.className="GPshowOpen GPshowAdvancedToolPicto GPshowGeolocate gpf-btn gpf-btn-icon-search-geolocate fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w",e.title="Activer la géolocalisation",e.setAttribute("tabindex","0"),e.setAttribute("aria-pressed",!1),e.addEventListener("click",(function(e){var r="true"===e.target.ariaPressed;e.target.setAttribute("aria-pressed",!r),t.onShowSearchGeolocateClick(e)})),e},_createShowSearchByCoordinateElement:function(){var t=this,e=document.createElement("button");return e.id=this._addUID("GPshowSearchByCoordinate"),e.className="GPshowOpen GPshowAdvancedToolPicto GPshowSearchByCoordinate gpf-btn gpf-btn-icon-search-coordinate fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w",e.title="Ouvrir la recherche par coordonnées",e.setAttribute("tabindex","0"),e.setAttribute("aria-pressed",!1),e.addEventListener("click",(function(e){var n="true"===e.target.ariaPressed;e.target.setAttribute("aria-pressed",!n);var i="#GPsearchInput-"+t._uid;n?(document.getElementById(t._addUID("GPcoordinateSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPcoordinateSearchPanel")).classList.replace("gpf-visible","gpf-hidden"),document.querySelector(i+" input").disabled=!1,document.querySelector(i+" .GPsearchInputReset").disabled=!1,r()&&(document.querySelector("#GPshowSearchEnginePicto-"+t._uid).disabled=!1)):(document.getElementById(t._addUID("GPcoordinateSearchPanel")).classList.replace("GPelementHidden","GPelementVisible"),document.getElementById(t._addUID("GPcoordinateSearchPanel")).classList.replace("gpf-hidden","gpf-visible"),document.querySelector(i+" input").disabled=!0,document.querySelector(i+" .GPsearchInputReset").disabled=!0,r()&&(document.querySelector("#GPshowSearchEnginePicto-"+t._uid).disabled=!0)),document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(t._addUID("GPshowAdvancedSearch")).setAttribute("aria-pressed",!1)})),e},_createAdvancedSearchPanelElement:function(){var t=document.createElement("dialog");return t.id=this._addUID("GPadvancedSearchPanel"),t.className="GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal",t},_createAdvancedSearchPanelDivElement:function(){var t=document.createElement("div");return t.className="gpf-panel__body fr-modal__body",t},_createGeocodeResultsElement:function(){var t=document.createElement("dialog");return t.id=this._addUID("GPgeocodeResultsList"),t.className="GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal",t.appendChild(this._createGeocodeResultsHeaderElement()),t},_createGeocodeResultsDivElement:function(){var t=document.createElement("div");return t.className="gpf-panel__body fr-modal__body",t},_createAutoCompleteElement:function(){var t=document.createElement("div");return t.id=this._addUID("GPautoCompleteList"),t.className="GPautoCompleteList GPelementHidden gpf-panel fr-modal gpf-hidden ",t},_createCoordinateSearchPanelElement:function(){var t=document.createElement("dialog");return t.id=this._addUID("GPcoordinateSearchPanel"),t.className="GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal",t},_createCoordinateSearchPanelDivElement:function(){var t=document.createElement("div");return t.className="gpf-panel__body fr-modal__body",t},_createAutoCompleteListElement:function(){var t=this,e=document.createElement("div");return e.id=this._addUID("GPautocompleteResults"),e.className="",e.addEventListener?e.addEventListener("click",(function(e){document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden")}),!1):e.attachEvent&&e.attachEvent("onclick",(function(e){document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPautoCompleteList")).classList.replace("gpf-visible","gpf-hidden")})),e},_createAutoCompletedLocationContainer:function(){var t=document.createElement("div");return t.id=this._addUID("GPautocompleteResultsLocation"),t.className="GPelementHidden gpf-hidden gpf-select",t.size=20,t.autofocus=!0,t},_createAutoCompletedLocationTitleElement:function(){var t=document.getElementById(this._addUID("GPautocompleteResultsLocation")),e=document.createElement("p");e.className="GPlabel GPlabelTitle gpf-label fr-label",e.innerHTML="Lieux et adresses",t.appendChild(e)},_createAutoCompletedLocationElement:function(t,e){var r=this,n=document.getElementById(this._addUID("GPautocompleteResultsLocation")),i=document.createElement("p");i.id=this._addUID("AutoCompletedLocation_"+e),i.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine";var o=F.getSuggestedLocationFreeform(t);i.innerHTML=o,i.title=o,i.addEventListener?i.addEventListener("click",(function(t){r.onAutoCompletedResultsItemClick(t)}),!1):i.attachEvent&&i.attachEvent("onclick",(function(t){r.onAutoCompletedResultsItemClick(t)})),n.appendChild(i)},_createSearchedSuggestContainer:function(){var t=document.createElement("div");return t.id=this._addUID("GPautocompleteResultsSuggest"),t.className="GPelementHidden gpf-hidden gpf-select",t.size=6,t.autofocus=!0,t},_createSearchedSuggestTitleElement:function(){var t=document.getElementById(this._addUID("GPautocompleteResultsSuggest")),e=document.createElement("p");e.className="GPlabel GPlabelTitle gpf-label fr-label",e.innerHTML="Cartes et données",t.appendChild(e)},_createSearchedSuggestElement:function(t,e){var r=this,n=document.getElementById(this._addUID("GPautocompleteResultsSuggest")),i=document.createElement("p");i.id=this._addUID("AutoCompletedSuggest_"+e),i.className="GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine",i.innerHTML=t.title+" ("+t.service+")",i.dataset.layer=t.name,i.title="".concat(t.description," (nom technique : ").concat(t.name,")"),i.addEventListener?i.addEventListener("click",(function(t){r.onSearchedResultsItemClick(t)}),!1):i.attachEvent&&i.attachEvent("onclick",(function(t){r.onSearchedResultsItemClick(t)})),n.appendChild(i)},_createAdvancedSearchPanelHeaderElement:function(){var t=this,e=document.createElement("div");e.className="GPpanelHeader gpf-panel__header fr-modal__header";var n=document.createElement("div");n.className="GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w",n.innerHTML="Recherche avancée",e.appendChild(n);var i=document.createElement("button");i.id=this._addUID("GPadvancedSearchClose"),i.className="GPpanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w",i.title="Fermer la recherche avancée",i.addEventListener?i.addEventListener("click",(function(){var e="#GPsearchInput-"+t._uid;document.querySelector(e+" input").disabled=!1,document.querySelector(e+" .GPsearchInputReset")&&(document.querySelector(e+" .GPsearchInputReset").disabled=!1),r()&&(document.querySelector("#GPshowSearchEnginePicto-"+t._uid).disabled=!1),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(t._addUID("GPshowAdvancedSearch")).setAttribute("aria-pressed",!1),document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("gpf-visible","gpf-hidden")}),!1):i.attachEvent&&i.attachEvent("onclick",(function(){var e="#GPsearchInput-"+t._uid;document.querySelector(e+" input").disabled=!1,document.querySelector(e+" .GPsearchInputReset")&&(document.querySelector(e+" .GPsearchInputReset").disabled=!1),r()&&(document.querySelector("#GPshowSearchEnginePicto-"+t._uid).disabled=!1),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPgeocodeResultsList")).classList.replace("gpf-visible","gpf-hidden"),document.getElementById(t._addUID("GPshowAdvancedSearch")).setAttribute("aria-pressed",!1),document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("GPelementVisible","GPelementHidden"),document.getElementById(t._addUID("GPadvancedSearchPanel")).classList.replace("gpf-visible","gpf-hidden")}));var o=document.createElement("span");return o.className="GPelementHidden gpf-visible",o.innerText="Fermer",i.appendChild(o),e.appendChild(i),e},_createAdvancedSearchPanelFormElement:function(t){var e=this,r=document.createElement("form");r.id=this._addUID("GPadvancedSearchForm"),r.className="gpf-panel__content fr-modal__content",r.addEventListener("submit",(function(t){t.preventDefault();for(var r=[],n="#GPadvancedSearchFilters-"+e._uid,i=document.querySelectorAll(n+" > div > div > input,select#category"),o=0;o\n \n \n \n \n \n \n \n \n \n \n \n ',t},_setCoordinateSearchLatLabelElement:function(t){document.getElementById(this._addUID("GPcoordinateSearchLatLabel"))&&document.getElementById(this._addUID("GPcoordinateSearchLatLabel")).remove();var e=document.createElement("label");return e.className="GPcoordinateSearchLabel gpf-label fr-label",e.id=this._addUID("GPcoordinateSearchLatLabel"),e.htmlFor="coordinate-lat",e.innerHTML="Geographical"===t?"Latitude :":"X :",e},_setCoordinateSearchLatInputElement:function(t){document.getElementById(this._addUID("GPcoordinateSearchLatInput"))&&document.getElementById(this._addUID("GPcoordinateSearchLatInput")).remove(),document.getElementById(this._addUID("GPcoordinateSearchLatDMS"))&&document.getElementById(this._addUID("GPcoordinateSearchLatDMS")).remove();var e=document.createElement("input");switch(e.id=this._addUID("GPcoordinateSearchLatInput"),e.className="GPcoordinateSearchInput gpf-input fr-input",e.title="Saisir des coordonnées",e.name="coordinate-lat",e.type="number",e.step="any",e.required="",t){case"DMS":return e.title+=" géographiques (en sexa)",e.className="GPelementHidden gpf-hidden",this._setCoordinateSearchLatDMSElement();case"DEC":e.title+=" géographiques (en decimal)",e.min="-180",e.max="180";break;case"M":e.title+=" cartésiennes (en mètre)";break;case"KM":e.title+=" cartésiennes (en kilomètre)"}return e},_setCoordinateSearchLatDMSElement:function(){var t=document.createElement("div");return t.id=this._addUID("GPcoordinateSearchLatDMS"),t.innerHTML='\n
    \n \n \n \n \n \n \n \n \n \n \n
    \n ',t},_createCoordinateSearchSubmitElement:function(){var t=document.createElement("input");return t.type="submit",t.id=this._addUID("GPcoordinateSearchSubmit"),t.className="GPsubmit gpf-btn gpf-btn-icon-submit fr-btn fr-btn--secondary gpf-btn--secondary",t.value="Chercher",t}};function jn(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,o,s,a=[],l=!0,u=!1;try{if(o=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=o.call(r)).done)&&(a.push(n.value),a.length!==e);l=!0);}catch(t){u=!0,i=t}finally{try{if(!l&&null!=r.return&&(s=r.return(),Object(s)!==s))return}finally{if(u)throw i}}return a}}(t,e)||function(t,e){if(t){if("string"==typeof t)return Un(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Un(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Un(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);rs&&(Xn.trace("zoom level max..."),n=s),Xn.trace("zoom",n),n}},{key:"_onResultMarkerSelect",value:function(t){var e=this.getMap(),r="";if("string"!=typeof t)if("GeocodedLocation"===t.service){r="
      ";var n=t.location.placeAttributes;for(var i in n)n.hasOwnProperty(i)&&"trueGeometry"!==i&&"extraFields"!==i&&"houseNumberInfos"!==i&&"_count"!==i&&(r+="
    • ",r+=''+i.toUpperCase()+" : ",r+=n[i],r+="
    • ");r+="
    "}else r="SuggestedLocation"===t.service?F.getSuggestedLocationFreeform(t.location):"sans informations.";else r=t;this._popupContent.innerHTML=r,this._popupOverlay?this._popupOverlay.setPosition(this._marker.getPosition()):(this._popupOverlay=new(x())({element:this._popupDiv,positioning:"bottom-center",position:this._marker.getPosition(),offset:[0,-42]}),e.addOverlay(this._popupOverlay))}},{key:"_setSystem",value:function(t){if("object"===zn(t))if(t.crs)if(t.label||(Xn.warn("crs label not defined, use crs code by default."),t.label=t.crs),t.type||(Xn.warn("type srs not defined, use 'Metric' by default."),t.type="Metric"),Gn.loadByName(t.crs),(0,M.get)(t.crs)){for(var e=0;e latitude : "+i[1];t._setMarker(r,o)}t.dispatchEvent({type:"searchengine:geolocation:click",coordinates:r})}}))}},{key:"onShowSearchByCoordinateClick",value:function(){var t=null,e=null;if(this._coordinateSearchLngInput&&"DIV"===this._coordinateSearchLngInput.nodeName&&this._coordinateSearchLatInput&&"DIV"===this._coordinateSearchLatInput.nodeName?(t=this._getCoordinateSearchDMS(this._coordinateSearchLngInput),e=this._getCoordinateSearchDMS(this._coordinateSearchLatInput)):(t=this._coordinateSearchLngInput.value,e=this._coordinateSearchLatInput.value),t&&e){var r=[t,e],n=this.getMap().getView().getProjection().getCode();"EPSG:4326"!==n&&(r=(0,M.transform)(r,"EPSG:4326",n)),isNaN(r[0])||isNaN(r[1])?this._setMarker():(this._setPosition(r,10),this._displayMarker&&this._setMarker(r,"sans information"),this.dispatchEvent({type:"searchengine:coordinates:click",coordinates:r}))}}},{key:"_getCoordinateSearchDMS",value:function(t){if(t&&"DIV"===t.nodeName){var e=t.querySelectorAll("[name]");if(e){var r=z.toInteger(e[0].value),n=z.toInteger(e[1].value),i=z.toInteger(e[2].value),o=e[3].options[e[3].selectedIndex].text;if(!(r&&n&&i&&o))return;return z.dmsToDecimal(r,n,i,o)}}}},{key:"onAutoCompleteInputClick",value:function(){var t=document.getElementById("GPsearchInputText-"+this._uid);t&&!t.disabled&&t.value.length>2&&this._displaySuggestedLocation()}},{key:"onAutoCompleteSearchText",value:function(t){var e=t.target.value;if(e)if(this._currentGeocodingLocation=e,e.length<3)this._clearSuggestedLocation();else{var r=this.options.autocompleteOptions.triggerGeocode,n=this.options.autocompleteOptions.triggerDelay,i=this.options.autocompleteOptions.maximumEntries,o=this.options.autocompleteOptions.prettifyResults,s=this;this._requestAutoComplete({text:e,onSuccess:function(t){if(Xn.log("request from AutoComplete",t),t){s._suggestedLocations=t.suggestedLocations,s._locationsToBeDisplayed=[];for(var e=0;e=0;e--){var r=t[e];("StreetAddress"===r.type&&"municipality"===r.kind||"PositionOfInterest"===r.type&&"lieu-dit habité"===r.poiType[0]&&"zone d'habitation"===r.poiType[1])&&t.splice(e,1),"PositionOfInterest"!==r.type||"administratif"!==r.poiType[0]||"département"!==r.poiType[1]&&"région"!==r.poiType[1]||(r.fullText=r.fullText+", "+r.poiType[1])}}},{key:"_hideSuggestedLocation",value:function(){this._autocompleteContainer&&(this._autocompleteContainer.classList.replace("GPelementVisible","GPelementHidden"),this._autocompleteContainer.classList.replace("gpf-visible","gpf-hidden"))}},{key:"_displaySuggestedLocation",value:function(){this._autocompleteContainer&&(this._autocompleteContainer.classList.replace("GPelementHidden","GPelementVisible"),this._autocompleteContainer.classList.replace("gpf-hidden","gpf-visible"))}},{key:"_clearGeocodedLocation",value:function(){if(this._geocodedLocations=[],this._geocodedContainer)for(;this._geocodedContainer.firstChild;)this._geocodedContainer.removeChild(this._geocodedContainer.firstChild)}}],i&&qn(n.prototype,i),o&&qn(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,i,o}(g);Object.assign(Zn.prototype,Dn),Object.assign(Zn.prototype,S);const Kn=Zn;window.ol&&window.ol.control&&(window.ol.control.SearchEngine=Zn)})(),GpfExtOlSearchEngine=__webpack_exports__.default})(); //# sourceMappingURL=GpfExtOlSearchEngine.js.map \ No newline at end of file diff --git a/dist/modules/GpfExtOlSearchEngine.js.map b/dist/modules/GpfExtOlSearchEngine.js.map index d7540d6c..3283a22b 100644 --- a/dist/modules/GpfExtOlSearchEngine.js.map +++ b/dist/modules/GpfExtOlSearchEngine.js.map @@ -1 +1 @@ -{"version":3,"file":"GpfExtOlSearchEngine.js","mappings":"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CACJ,EACA,IACA,IACA,GAEJ,SAAY,CACR,EACA,EACA,IACA,GAEJ,SAAY,CACR,EACA,IACA,IACA,GAEJ,cAAiB,CACb,IACA,IACA,GACA,GAEJ,SAAY,CACR,IACA,IACA,IACA,GAEJ,UAAa,CACT,EACA,IACA,EACA,GAEJ,SAAY,CACR,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,YAAe,CACX,IACA,EACA,IACA,GAEJ,eAAkB,CACd,GACA,IACA,GACA,GAEJ,WAAc,CACV,IACA,IACA,EACA,GAEJ,WAAc,CACV,IACA,GACA,IACA,GAEJ,QAAW,CACP,IACA,EACA,EACA,GAEJ,WAAc,CACV,IACA,IACA,IACA,GAEJ,aAAgB,CACZ,IACA,IACA,IACA,GAEJ,cAAiB,CACb,GACA,GACA,IACA,GAEJ,cAAiB,CACb,GACA,GACA,GACA,GAEJ,cAAiB,CACb,GACA,GACA,GACA,GAEJ,cAAiB,CACb,EACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,EACA,IACA,GAEJ,SAAY,CACR,IACA,GACA,IACA,GAEJ,YAAe,CACX,EACA,IACA,IACA,GAEJ,QAAW,CACP,IACA,IACA,IACA,GAEJ,QAAW,CACP,IACA,IACA,IACA,GAEJ,WAAc,CACV,GACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,GACA,GACA,GAEJ,YAAe,CACX,IACA,IACA,IACA,GAEJ,YAAe,CACX,GACA,IACA,GACA,GAEJ,QAAW,CACP,IACA,EACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,IACA,IACA,GAEJ,KAAQ,CACJ,IACA,IACA,EACA,GAEJ,UAAa,CACT,IACA,IACA,GACA,GAEJ,KAAQ,CACJ,IACA,IACA,IACA,GAEJ,MAAS,CACL,EACA,IACA,EACA,GAEJ,YAAe,CACX,IACA,IACA,GACA,GAEJ,KAAQ,CACJ,IACA,IACA,IACA,GAEJ,SAAY,CACR,IACA,IACA,IACA,GAEJ,QAAW,CACP,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,GACA,GACA,GAEJ,OAAU,CACN,GACA,EACA,IACA,GAEJ,MAAS,CACL,IACA,IACA,IACA,GAEJ,MAAS,CACL,IACA,IACA,IACA,GAEJ,SAAY,CACR,IACA,IACA,IACA,GAEJ,cAAiB,CACb,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,EACA,GAEJ,aAAgB,CACZ,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,qBAAwB,CACpB,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,YAAe,CACX,IACA,IACA,IACA,GAEJ,cAAiB,CACb,GACA,IACA,IACA,GAEJ,aAAgB,CACZ,IACA,IACA,IACA,GAEJ,eAAkB,CACd,IACA,IACA,IACA,GAEJ,eAAkB,CACd,IACA,IACA,IACA,GAEJ,eAAkB,CACd,IACA,IACA,IACA,GAEJ,YAAe,CACX,IACA,IACA,IACA,GAEJ,KAAQ,CACJ,EACA,IACA,EACA,GAEJ,UAAa,CACT,GACA,IACA,GACA,GAEJ,MAAS,CACL,IACA,IACA,IACA,GAEJ,QAAW,CACP,IACA,EACA,IACA,GAEJ,OAAU,CACN,IACA,EACA,EACA,GAEJ,iBAAoB,CAChB,IACA,IACA,IACA,GAEJ,WAAc,CACV,EACA,EACA,IACA,GAEJ,aAAgB,CACZ,IACA,GACA,IACA,GAEJ,aAAgB,CACZ,IACA,IACA,IACA,GAEJ,eAAkB,CACd,GACA,IACA,IACA,GAEJ,gBAAmB,CACf,IACA,IACA,IACA,GAEJ,kBAAqB,CACjB,EACA,IACA,IACA,GAEJ,gBAAmB,CACf,GACA,IACA,IACA,GAEJ,gBAAmB,CACf,IACA,GACA,IACA,GAEJ,aAAgB,CACZ,GACA,GACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,SA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","sources":["webpack://geopf-extensions-openlayers/./node_modules/@xmldom/xmldom/lib/conventions.js","webpack://geopf-extensions-openlayers/./node_modules/@xmldom/xmldom/lib/dom-parser.js","webpack://geopf-extensions-openlayers/./node_modules/@xmldom/xmldom/lib/dom.js","webpack://geopf-extensions-openlayers/./node_modules/@xmldom/xmldom/lib/entities.js","webpack://geopf-extensions-openlayers/./node_modules/@xmldom/xmldom/lib/errors.js","webpack://geopf-extensions-openlayers/./node_modules/@xmldom/xmldom/lib/grammar.js","webpack://geopf-extensions-openlayers/./node_modules/@xmldom/xmldom/lib/index.js","webpack://geopf-extensions-openlayers/./node_modules/@xmldom/xmldom/lib/sax.js","webpack://geopf-extensions-openlayers/external assign \"ol.layer.VectorTile\"","webpack://geopf-extensions-openlayers/external assign \"ol.source.VectorTile\"","webpack://geopf-extensions-openlayers/external assign \"ol.source.TileJSON\"","webpack://geopf-extensions-openlayers/external assign \"ol.format.MVT\"","webpack://geopf-extensions-openlayers/external assign \"ol.Observable\"","webpack://geopf-extensions-openlayers/external assign \"ol.style.Circle\"","webpack://geopf-extensions-openlayers/external assign \"ol.style.Fill\"","webpack://geopf-extensions-openlayers/external assign \"ol.style.Icon\"","webpack://geopf-extensions-openlayers/./node_modules/ol/transform.js","webpack://geopf-extensions-openlayers/./node_modules/ol/extent.js","webpack://geopf-extensions-openlayers/./node_modules/ol/math.js","webpack://geopf-extensions-openlayers/./node_modules/ol/geom/flat/simplify.js","webpack://geopf-extensions-openlayers/./node_modules/ol/array.js","webpack://geopf-extensions-openlayers/./node_modules/ol/geom/flat/contains.js","webpack://geopf-extensions-openlayers/./node_modules/ol/geom/flat/interiorpoint.js","webpack://geopf-extensions-openlayers/./node_modules/ol/proj/Units.js","webpack://geopf-extensions-openlayers/./node_modules/ol/proj/Projection.js","webpack://geopf-extensions-openlayers/./node_modules/ol/proj/epsg3857.js","webpack://geopf-extensions-openlayers/./node_modules/ol/proj/epsg4326.js","webpack://geopf-extensions-openlayers/./node_modules/ol/proj/projections.js","webpack://geopf-extensions-openlayers/./node_modules/ol/proj/transforms.js","webpack://geopf-extensions-openlayers/./node_modules/ol/proj/utm.js","webpack://geopf-extensions-openlayers/./node_modules/ol/proj.js","webpack://geopf-extensions-openlayers/./node_modules/ol/geom/flat/orient.js","webpack://geopf-extensions-openlayers/./node_modules/ol/geom/flat/interpolate.js","webpack://geopf-extensions-openlayers/./node_modules/ol/render/Feature.js","webpack://geopf-extensions-openlayers/./node_modules/ol/geom/flat/center.js","webpack://geopf-extensions-openlayers/./node_modules/ol/geom/flat/transform.js","webpack://geopf-extensions-openlayers/./node_modules/ol/functions.js","webpack://geopf-extensions-openlayers/external assign \"ol.style.Stroke\"","webpack://geopf-extensions-openlayers/external assign \"ol.style.Style\"","webpack://geopf-extensions-openlayers/external assign \"ol.style.Text\"","webpack://geopf-extensions-openlayers/external assign \"ol.functions\"","webpack://geopf-extensions-openlayers/external assign \"ol.render.canvas\"","webpack://geopf-extensions-openlayers/external assign \"ol.TileState\"","webpack://geopf-extensions-openlayers/external assign \"ol.util\"","webpack://geopf-extensions-openlayers/external assign \"ol.layer.Image\"","webpack://geopf-extensions-openlayers/external assign \"ol.layer.Layer\"","webpack://geopf-extensions-openlayers/external assign \"ol.layer.Group\"","webpack://geopf-extensions-openlayers/external assign \"ol.Map\"","webpack://geopf-extensions-openlayers/external assign \"ol.source.Raster\"","webpack://geopf-extensions-openlayers/external assign \"ol.source.Source\"","webpack://geopf-extensions-openlayers/external assign \"ol.tilegrid.TileGrid\"","webpack://geopf-extensions-openlayers/external assign \"ol.View\"","webpack://geopf-extensions-openlayers/external assign \"ol.proj.Units\"","webpack://geopf-extensions-openlayers/external assign \"ol.events.Event\"","webpack://geopf-extensions-openlayers/./node_modules/ol-mapbox-style/dist/index.js","webpack://geopf-extensions-openlayers/external assign {\"commonjs\":\"ol\",\"commonjs2\":\"ol\",\"amd\":\"ol\",\"root\":\"ol\"}","webpack://geopf-extensions-openlayers/./src/packages/Layers/LayerMapBox.js","webpack://geopf-extensions-openlayers/./src/packages/Layers/LayerWMS.js","webpack://geopf-extensions-openlayers/./src/packages/Layers/LayerWMTS.js","webpack://geopf-extensions-openlayers/external assign \"ol.source.TileWMS\"","webpack://geopf-extensions-openlayers/./src/packages/Layers/SourceWMS.js","webpack://geopf-extensions-openlayers/external assign \"ol.tilegrid.WMTS\"","webpack://geopf-extensions-openlayers/./src/packages/Utils/LayerUtils.js","webpack://geopf-extensions-openlayers/./src/packages/Layers/SourceWMTS.js","webpack://geopf-extensions-openlayers/./src/packages/Services/Search.js","webpack://geopf-extensions-openlayers/external assign \"ol.source.WMTS\"","webpack://geopf-extensions-openlayers/./src/packages/Sources/WMTS.js","webpack://geopf-extensions-openlayers/./src/packages/Utils/Config.js","webpack://geopf-extensions-openlayers/./src/packages/Utils/Helper.js","webpack://geopf-extensions-openlayers/./src/packages/Utils/LoggerByDefault.js","webpack://geopf-extensions-openlayers/./node_modules/es6-promise/dist/es6-promise.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Exceptions/ErrorService.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Formats/WPS.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Formats/XML.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Gp.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Protocols/JSONP.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Protocols/Protocol.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Protocols/XHR.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Alti.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Formats/AltiResponseReader.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Request/AltiRequestFactory.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Request/AltiRequestREST.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Request/AltiRequestWPS.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Request/model/AltiElevationRequest.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Request/model/AltiProfilRequest.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Request/model/AltiRequest.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Response/AltiResponseFactory.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Response/model/AltiResponse.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Response/model/Elevation.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Response/model/Measure.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/AutoComplete/AutoComplete.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/AutoComplete/Response/AutoCompleteResponseFactory.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/AutoComplete/Response/model/AutoCompleteResponse.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/AutoComplete/Response/model/SuggestedLocation.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/CommonService.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Config/Config.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Config/ConfigInterface.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/DefaultUrlService.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Geocode/Formats/GeocodeResponseParser.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Geocode/Geocode.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Geocode/Request/GeocodeRequestFactory.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Geocode/Request/GeocodeRequestREST.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Geocode/Request/model/GeocodeParamREST.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Geocode/Response/GeocodeResponseFactory.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Geocode/Response/model/GeocodeResponse.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Geocode/Response/model/GeocodedLocation.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Geocode/ReverseGeocode.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/ProcessIsoCurve/ProcessIsoCurve.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/ProcessIsoCurve/Request/ProcessIsoCurveRequest.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/ProcessIsoCurve/Request/model/ProcessIsoCurveParam.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/ProcessIsoCurve/Response/ProcessIsoCurveResponseFactory.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/ProcessIsoCurve/Response/model/ProcessIsoCurveResponse.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Route/Request/RouteRequestFactory.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Route/Request/RouteRequestREST.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Route/Request/model/RouteParamREST.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Route/Response/RouteResponseFactory.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Route/Response/model/RouteInstruction.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Route/Response/model/RouteResponse.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Route/Route.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Services.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Utils/Helper.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Utils/LoggerByDefault.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Utils/MessagesResources.js","webpack://geopf-extensions-openlayers/./node_modules/loglevel/lib/loglevel.js","webpack://geopf-extensions-openlayers/./node_modules/node-fetch/browser.js","webpack://geopf-extensions-openlayers/external assign \"ol.extent\"","webpack://geopf-extensions-openlayers/external assign \"ol.format.GeoJSON\"","webpack://geopf-extensions-openlayers/external assign \"ol.layer.Tile\"","webpack://geopf-extensions-openlayers/external assign \"ol.layer.Vector\"","webpack://geopf-extensions-openlayers/external assign \"ol.loadingstrategy\"","webpack://geopf-extensions-openlayers/external assign \"ol.proj\"","webpack://geopf-extensions-openlayers/external assign \"ol.source.Vector\"","webpack://geopf-extensions-openlayers/external assign \"ol.tilegrid\"","webpack://geopf-extensions-openlayers/webpack/bootstrap","webpack://geopf-extensions-openlayers/webpack/runtime/compat get default export","webpack://geopf-extensions-openlayers/webpack/runtime/define property getters","webpack://geopf-extensions-openlayers/webpack/runtime/global","webpack://geopf-extensions-openlayers/webpack/runtime/hasOwnProperty shorthand","webpack://geopf-extensions-openlayers/external assign \"ol.control.Control\"","webpack://geopf-extensions-openlayers/./src/packages/Controls/Utils/CheckDsfr.js","webpack://geopf-extensions-openlayers/./src/packages/Controls/Control.js","webpack://geopf-extensions-openlayers/./src/packages/Utils/PanelManager.js","webpack://geopf-extensions-openlayers/./src/packages/Controls/Widget.js","webpack://geopf-extensions-openlayers/external assign \"ol.Overlay\"","webpack://geopf-extensions-openlayers/./src/packages/Controls/Utils/Markers.js","webpack://geopf-extensions-openlayers/external assign \"ol.interaction\"","webpack://geopf-extensions-openlayers/./src/packages/Controls/Utils/Interactions.js","webpack://geopf-extensions-openlayers/./src/packages/Utils/SelectorID.js","webpack://geopf-extensions-openlayers/./src/packages/Utils/MathUtils.js","webpack://geopf-extensions-openlayers/./src/packages/Utils/SearchEngineUtils.js","webpack://geopf-extensions-openlayers/./src/packages/Utils/GeocodeUtils.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/constants/values.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/constants/PrimeMeridian.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/constants/units.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/match.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projString.js","webpack://geopf-extensions-openlayers/./node_modules/wkt-parser/parser.js","webpack://geopf-extensions-openlayers/./node_modules/wkt-parser/process.js","webpack://geopf-extensions-openlayers/./node_modules/wkt-parser/index.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/defs.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/global.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/parseCode.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/extend.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/msfnz.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/sign.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/adjust_lon.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/tsfnz.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/phi2z.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/longlat.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/merc.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/constants/Ellipsoid.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/constants/Datum.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/datum.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/nadgrid.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/Proj.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/deriveConstants.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/datumUtils.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/datum_transform.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/adjust_axis.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/toPoint.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/checkSanity.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/transform.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/core.js","webpack://geopf-extensions-openlayers/./node_modules/mgrs/mgrs.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/Point.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/pj_enfn.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/pj_mlfn.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/pj_inv_mlfn.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/tmerc.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/sinh.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/hypot.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/asinhy.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/log1py.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/gatg.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/clens_cmplx.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/cosh.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/etmerc.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/clens.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/utm.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/adjust_zone.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/srat.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/gauss.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/sterea.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/stere.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/somerc.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/omerc.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/lcc.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/krovak.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/mlfn.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/e0fn.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/e1fn.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/e2fn.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/e3fn.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/gN.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/adjust_lat.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/imlfn.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/cass.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/qsfnz.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/laea.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/asinz.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/aea.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/gnom.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/cea.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/iqsfnz.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/eqc.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/poly.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/nzmg.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/mill.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/sinu.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/moll.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/eqdc.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/vandg.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/aeqd.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/ortho.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/qsc.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/robin.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/geocent.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/tpers.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/geos.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/eqearth.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/bonne.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/projs.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/index.js","webpack://geopf-extensions-openlayers/external assign \"ol.proj.transforms\"","webpack://geopf-extensions-openlayers/external assign \"ol.proj.Projection\"","webpack://geopf-extensions-openlayers/./src/packages/CRS/Proj4.js","webpack://geopf-extensions-openlayers/./src/packages/Utils/Register.js","webpack://geopf-extensions-openlayers/./src/packages/CRS/CRS.js","webpack://geopf-extensions-openlayers/./src/packages/Controls/SearchEngine/SearchEngineDOM.js","webpack://geopf-extensions-openlayers/./src/packages/Controls/SearchEngine/SearchEngine.js"],"sourcesContent":["'use strict';\n\n/**\n * Ponyfill for `Array.prototype.find` which is only available in ES6 runtimes.\n *\n * Works with anything that has a `length` property and index access properties,\n * including NodeList.\n *\n * @param {T[] | { length: number; [number]: T }} list\n * @param {function (item: T, index: number, list:T[]):boolean} predicate\n * @param {Partial>?} ac\n * Allows injecting a custom implementation in tests (`Array.prototype` by default).\n * @returns {T | undefined}\n * @template {unknown} T\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n * @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find\n */\nfunction find(list, predicate, ac) {\n\tif (ac === undefined) {\n\t\tac = Array.prototype;\n\t}\n\tif (list && typeof ac.find === 'function') {\n\t\treturn ac.find.call(list, predicate);\n\t}\n\tfor (var i = 0; i < list.length; i++) {\n\t\tif (hasOwn(list, i)) {\n\t\t\tvar item = list[i];\n\t\t\tif (predicate.call(undefined, item, i, list)) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * \"Shallow freezes\" an object to render it immutable.\n * Uses `Object.freeze` if available,\n * otherwise the immutability is only in the type.\n *\n * Is used to create \"enum like\" objects.\n *\n * If `Object.getOwnPropertyDescriptors` is available,\n * a new object with all properties of object but without any prototype is created and returned\n * after freezing it.\n *\n * @param {T} object\n * The object to freeze.\n * @param {Pick} [oc=Object]\n * `Object` by default,\n * allows to inject custom object constructor for tests.\n * @returns {Readonly}\n * @template {Object} T\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n * @prettierignore\n */\nfunction freeze(object, oc) {\n\tif (oc === undefined) {\n\t\toc = Object;\n\t}\n\tif (oc && typeof oc.getOwnPropertyDescriptors === 'function') {\n\t\tobject = oc.create(null, oc.getOwnPropertyDescriptors(object));\n\t}\n\treturn oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object;\n}\n\n/**\n * Implementation for `Object.hasOwn` but ES5 compatible.\n *\n * @param {any} object\n * @param {string | number} key\n * @returns {boolean}\n */\nfunction hasOwn(object, key) {\n\treturn Object.prototype.hasOwnProperty.call(object, key);\n}\n\n/**\n * Since xmldom can not rely on `Object.assign`,\n * it uses/provides a simplified version that is sufficient for its needs.\n *\n * @param {Object} target\n * @param {Object | null | undefined} source\n * @returns {Object}\n * The target with the merged/overridden properties.\n * @throws {TypeError}\n * If target is not an object.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign\n */\nfunction assign(target, source) {\n\tif (target === null || typeof target !== 'object') {\n\t\tthrow new TypeError('target is not an object');\n\t}\n\tfor (var key in source) {\n\t\tif (hasOwn(source, key)) {\n\t\t\ttarget[key] = source[key];\n\t\t}\n\t}\n\treturn target;\n}\n\n/**\n * A number of attributes are boolean attributes.\n * The presence of a boolean attribute on an element represents the `true` value,\n * and the absence of the attribute represents the `false` value.\n *\n * If the attribute is present, its value must either be the empty string, or a value that is\n * an ASCII case-insensitive match for the attribute's canonical name,\n * with no leading or trailing whitespace.\n *\n * Note: The values `\"true\"` and `\"false\"` are not allowed on boolean attributes.\n * To represent a `false` value, the attribute has to be omitted altogether.\n *\n * @see https://html.spec.whatwg.org/#boolean-attributes\n * @see https://html.spec.whatwg.org/#attributes-3\n */\nvar HTML_BOOLEAN_ATTRIBUTES = freeze({\n\tallowfullscreen: true,\n\tasync: true,\n\tautofocus: true,\n\tautoplay: true,\n\tchecked: true,\n\tcontrols: true,\n\tdefault: true,\n\tdefer: true,\n\tdisabled: true,\n\tformnovalidate: true,\n\thidden: true,\n\tismap: true,\n\titemscope: true,\n\tloop: true,\n\tmultiple: true,\n\tmuted: true,\n\tnomodule: true,\n\tnovalidate: true,\n\topen: true,\n\tplaysinline: true,\n\treadonly: true,\n\trequired: true,\n\treversed: true,\n\tselected: true,\n});\n\n/**\n * Check if `name` is matching one of the HTML boolean attribute names.\n * This method doesn't check if such attributes are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} name\n * @returns {boolean}\n * @see {@link HTML_BOOLEAN_ATTRIBUTES}\n * @see https://html.spec.whatwg.org/#boolean-attributes\n * @see https://html.spec.whatwg.org/#attributes-3\n */\nfunction isHTMLBooleanAttribute(name) {\n\treturn hasOwn(HTML_BOOLEAN_ATTRIBUTES, name.toLowerCase());\n}\n\n/**\n * Void elements only have a start tag; end tags must not be specified for void elements.\n * These elements should be written as self-closing like this: ``.\n * This should not be confused with optional tags that HTML allows to omit the end tag for\n * (like `li`, `tr` and others), which can have content after them,\n * so they can not be written as self-closing.\n * xmldom does not have any logic for optional end tags cases,\n * and will report them as a warning.\n * Content that would go into the unopened element,\n * will instead be added as a sibling text node.\n *\n * @type {Readonly<{\n * \tarea: boolean;\n * \tcol: boolean;\n * \timg: boolean;\n * \twbr: boolean;\n * \tlink: boolean;\n * \thr: boolean;\n * \tsource: boolean;\n * \tbr: boolean;\n * \tinput: boolean;\n * \tparam: boolean;\n * \tmeta: boolean;\n * \tembed: boolean;\n * \ttrack: boolean;\n * \tbase: boolean;\n * }>}\n * @see https://html.spec.whatwg.org/#void-elements\n * @see https://html.spec.whatwg.org/#optional-tags\n */\nvar HTML_VOID_ELEMENTS = freeze({\n\tarea: true,\n\tbase: true,\n\tbr: true,\n\tcol: true,\n\tembed: true,\n\thr: true,\n\timg: true,\n\tinput: true,\n\tlink: true,\n\tmeta: true,\n\tparam: true,\n\tsource: true,\n\ttrack: true,\n\twbr: true,\n});\n\n/**\n * Check if `tagName` is matching one of the HTML void element names.\n * This method doesn't check if such tags are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} tagName\n * @returns {boolean}\n * @see {@link HTML_VOID_ELEMENTS}\n * @see https://html.spec.whatwg.org/#void-elements\n */\nfunction isHTMLVoidElement(tagName) {\n\treturn hasOwn(HTML_VOID_ELEMENTS, tagName.toLowerCase());\n}\n\n/**\n * Tag names that are raw text elements according to HTML spec.\n * The value denotes whether they are escapable or not.\n *\n * @see {@link isHTMLEscapableRawTextElement}\n * @see {@link isHTMLRawTextElement}\n * @see https://html.spec.whatwg.org/#raw-text-elements\n * @see https://html.spec.whatwg.org/#escapable-raw-text-elements\n */\nvar HTML_RAW_TEXT_ELEMENTS = freeze({\n\tscript: false,\n\tstyle: false,\n\ttextarea: true,\n\ttitle: true,\n});\n\n/**\n * Check if `tagName` is matching one of the HTML raw text element names.\n * This method doesn't check if such tags are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} tagName\n * @returns {boolean}\n * @see {@link isHTMLEscapableRawTextElement}\n * @see {@link HTML_RAW_TEXT_ELEMENTS}\n * @see https://html.spec.whatwg.org/#raw-text-elements\n * @see https://html.spec.whatwg.org/#escapable-raw-text-elements\n */\nfunction isHTMLRawTextElement(tagName) {\n\tvar key = tagName.toLowerCase();\n\treturn hasOwn(HTML_RAW_TEXT_ELEMENTS, key) && !HTML_RAW_TEXT_ELEMENTS[key];\n}\n/**\n * Check if `tagName` is matching one of the HTML escapable raw text element names.\n * This method doesn't check if such tags are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} tagName\n * @returns {boolean}\n * @see {@link isHTMLRawTextElement}\n * @see {@link HTML_RAW_TEXT_ELEMENTS}\n * @see https://html.spec.whatwg.org/#raw-text-elements\n * @see https://html.spec.whatwg.org/#escapable-raw-text-elements\n */\nfunction isHTMLEscapableRawTextElement(tagName) {\n\tvar key = tagName.toLowerCase();\n\treturn hasOwn(HTML_RAW_TEXT_ELEMENTS, key) && HTML_RAW_TEXT_ELEMENTS[key];\n}\n/**\n * Only returns true if `value` matches MIME_TYPE.HTML, which indicates an HTML document.\n *\n * @param {string} mimeType\n * @returns {mimeType is 'text/html'}\n * @see https://www.iana.org/assignments/media-types/text/html\n * @see https://en.wikipedia.org/wiki/HTML\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring\n */\nfunction isHTMLMimeType(mimeType) {\n\treturn mimeType === MIME_TYPE.HTML;\n}\n/**\n * For both the `text/html` and the `application/xhtml+xml` namespace the spec defines that the\n * HTML namespace is provided as the default.\n *\n * @param {string} mimeType\n * @returns {boolean}\n * @see https://dom.spec.whatwg.org/#dom-document-createelement\n * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument\n * @see https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument\n */\nfunction hasDefaultHTMLNamespace(mimeType) {\n\treturn isHTMLMimeType(mimeType) || mimeType === MIME_TYPE.XML_XHTML_APPLICATION;\n}\n\n/**\n * All mime types that are allowed as input to `DOMParser.parseFromString`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02\n * MDN\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype\n * WHATWG HTML Spec\n * @see {@link DOMParser.prototype.parseFromString}\n */\nvar MIME_TYPE = freeze({\n\t/**\n\t * `text/html`, the only mime type that triggers treating an XML document as HTML.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring\n\t * WHATWG HTML Spec\n\t */\n\tHTML: 'text/html',\n\n\t/**\n\t * `application/xml`, the standard mime type for XML documents.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType\n\t * registration\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_APPLICATION: 'application/xml',\n\n\t/**\n\t * `text/html`, an alias for `application/xml`.\n\t *\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303\n\t * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_TEXT: 'text/xml',\n\n\t/**\n\t * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,\n\t * but is parsed as an XML document.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType\n\t * registration\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec\n\t * @see https://en.wikipedia.org/wiki/XHTML Wikipedia\n\t */\n\tXML_XHTML_APPLICATION: 'application/xhtml+xml',\n\n\t/**\n\t * `image/svg+xml`,\n\t *\n\t * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration\n\t * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1\n\t * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia\n\t */\n\tXML_SVG_IMAGE: 'image/svg+xml',\n});\n/**\n * @typedef {'application/xhtml+xml' | 'application/xml' | 'image/svg+xml' | 'text/html' | 'text/xml'}\n * MimeType\n */\n/**\n * @type {MimeType[]}\n * @private\n * Basically `Object.values`, which is not available in ES5.\n */\nvar _MIME_TYPES = Object.keys(MIME_TYPE).map(function (key) {\n\treturn MIME_TYPE[key];\n});\n\n/**\n * Only returns true if `mimeType` is one of the allowed values for\n * `DOMParser.parseFromString`.\n *\n * @param {string} mimeType\n * @returns {mimeType is 'application/xhtml+xml' | 'application/xml' | 'image/svg+xml' | 'text/html' | 'text/xml'}\n *\n */\nfunction isValidMimeType(mimeType) {\n\treturn _MIME_TYPES.indexOf(mimeType) > -1;\n}\n/**\n * Namespaces that are used in this code base.\n *\n * @see http://www.w3.org/TR/REC-xml-names\n */\nvar NAMESPACE = freeze({\n\t/**\n\t * The XHTML namespace.\n\t *\n\t * @see http://www.w3.org/1999/xhtml\n\t */\n\tHTML: 'http://www.w3.org/1999/xhtml',\n\n\t/**\n\t * The SVG namespace.\n\t *\n\t * @see http://www.w3.org/2000/svg\n\t */\n\tSVG: 'http://www.w3.org/2000/svg',\n\n\t/**\n\t * The `xml:` namespace.\n\t *\n\t * @see http://www.w3.org/XML/1998/namespace\n\t */\n\tXML: 'http://www.w3.org/XML/1998/namespace',\n\n\t/**\n\t * The `xmlns:` namespace.\n\t *\n\t * @see https://www.w3.org/2000/xmlns/\n\t */\n\tXMLNS: 'http://www.w3.org/2000/xmlns/',\n});\n\nexports.assign = assign;\nexports.find = find;\nexports.freeze = freeze;\nexports.HTML_BOOLEAN_ATTRIBUTES = HTML_BOOLEAN_ATTRIBUTES;\nexports.HTML_RAW_TEXT_ELEMENTS = HTML_RAW_TEXT_ELEMENTS;\nexports.HTML_VOID_ELEMENTS = HTML_VOID_ELEMENTS;\nexports.hasDefaultHTMLNamespace = hasDefaultHTMLNamespace;\nexports.hasOwn = hasOwn;\nexports.isHTMLBooleanAttribute = isHTMLBooleanAttribute;\nexports.isHTMLRawTextElement = isHTMLRawTextElement;\nexports.isHTMLEscapableRawTextElement = isHTMLEscapableRawTextElement;\nexports.isHTMLMimeType = isHTMLMimeType;\nexports.isHTMLVoidElement = isHTMLVoidElement;\nexports.isValidMimeType = isValidMimeType;\nexports.MIME_TYPE = MIME_TYPE;\nexports.NAMESPACE = NAMESPACE;\n","'use strict';\n\nvar conventions = require('./conventions');\nvar dom = require('./dom');\nvar errors = require('./errors');\nvar entities = require('./entities');\nvar sax = require('./sax');\n\nvar DOMImplementation = dom.DOMImplementation;\n\nvar hasDefaultHTMLNamespace = conventions.hasDefaultHTMLNamespace;\nvar isHTMLMimeType = conventions.isHTMLMimeType;\nvar isValidMimeType = conventions.isValidMimeType;\nvar MIME_TYPE = conventions.MIME_TYPE;\nvar NAMESPACE = conventions.NAMESPACE;\nvar ParseError = errors.ParseError;\n\nvar XMLReader = sax.XMLReader;\n\n/**\n * Normalizes line ending according to :\n *\n * > XML parsed entities are often stored in computer files which,\n * > for editing convenience, are organized into lines.\n * > These lines are typically separated by some combination\n * > of the characters CARRIAGE RETURN (#xD) and LINE FEED (#xA).\n * >\n * > To simplify the tasks of applications, the XML processor must behave\n * > as if it normalized all line breaks in external parsed entities (including the document entity)\n * > on input, before parsing, by translating all of the following to a single #xA character:\n * >\n * > 1. the two-character sequence #xD #xA,\n * > 2. the two-character sequence #xD #x85,\n * > 3. the single character #x85,\n * > 4. the single character #x2028,\n * > 5. any #xD character that is not immediately followed by #xA or #x85.\n *\n * @param {string} input\n * @returns {string}\n * @prettierignore\n */\nfunction normalizeLineEndings(input) {\n\treturn input.replace(/\\r[\\n\\u0085]/g, '\\n').replace(/[\\r\\u0085\\u2028]/g, '\\n');\n}\n\n/**\n * @typedef Locator\n * @property {number} [columnNumber]\n * @property {number} [lineNumber]\n */\n\n/**\n * @typedef DOMParserOptions\n * @property {typeof assign} [assign]\n * The method to use instead of `conventions.assign`, which is used to copy values from\n * `options` before they are used for parsing.\n * @property {typeof DOMHandler} [domHandler]\n * For internal testing: The class for creating an instance for handling events from the SAX\n * parser.\n * *****Warning: By configuring a faulty implementation, the specified behavior can completely\n * be broken.*****.\n * @property {Function} [errorHandler]\n * DEPRECATED! use `onError` instead.\n * @property {function(level:ErrorLevel, message:string, context: DOMHandler):void}\n * [onError]\n * A function that is invoked for every error that occurs during parsing.\n *\n * If it is not provided, all errors are reported to `console.error`\n * and only `fatalError`s are thrown as a `ParseError`,\n * which prevents any further processing.\n * If the provided method throws, a `ParserError` is thrown,\n * which prevents any further processing.\n *\n * Be aware that many `warning`s are considered an error that prevents further processing in\n * most implementations.\n * @property {boolean} [locator=true]\n * Configures if the nodes created during parsing will have a `lineNumber` and a `columnNumber`\n * attribute describing their location in the XML string.\n * Default is true.\n * @property {(string) => string} [normalizeLineEndings]\n * used to replace line endings before parsing, defaults to `normalizeLineEndings`\n * @property {Object} [xmlns]\n * The XML namespaces that should be assumed when parsing.\n * The default namespace can be provided by the key that is the empty string.\n * When the `mimeType` for HTML, XHTML or SVG are passed to `parseFromString`,\n * the default namespace that will be used,\n * will be overridden according to the specification.\n * @see {@link normalizeLineEndings}\n */\n\n/**\n * The DOMParser interface provides the ability to parse XML or HTML source code from a string\n * into a DOM `Document`.\n *\n * ***xmldom is different from the spec in that it allows an `options` parameter,\n * to control the behavior***.\n *\n * @class\n * @param {DOMParserOptions} [options]\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization\n */\nfunction DOMParser(options) {\n\toptions = options || { locator: true };\n\n\t/**\n\t * The method to use instead of `conventions.assign`, which is used to copy values from\n\t * `options`\n\t * before they are used for parsing.\n\t *\n\t * @type {conventions.assign}\n\t * @private\n\t * @see {@link conventions.assign}\n\t * @readonly\n\t */\n\tthis.assign = options.assign || conventions.assign;\n\n\t/**\n\t * For internal testing: The class for creating an instance for handling events from the SAX\n\t * parser.\n\t * *****Warning: By configuring a faulty implementation, the specified behavior can completely\n\t * be broken*****.\n\t *\n\t * @type {typeof DOMHandler}\n\t * @private\n\t * @readonly\n\t */\n\tthis.domHandler = options.domHandler || DOMHandler;\n\n\t/**\n\t * A function that is invoked for every error that occurs during parsing.\n\t *\n\t * If it is not provided, all errors are reported to `console.error`\n\t * and only `fatalError`s are thrown as a `ParseError`,\n\t * which prevents any further processing.\n\t * If the provided method throws, a `ParserError` is thrown,\n\t * which prevents any further processing.\n\t *\n\t * Be aware that many `warning`s are considered an error that prevents further processing in\n\t * most implementations.\n\t *\n\t * @type {function(level:ErrorLevel, message:string, context: DOMHandler):void}\n\t * @see {@link onErrorStopParsing}\n\t * @see {@link onWarningStopParsing}\n\t */\n\tthis.onError = options.onError || options.errorHandler;\n\tif (options.errorHandler && typeof options.errorHandler !== 'function') {\n\t\tthrow new TypeError('errorHandler object is no longer supported, switch to onError!');\n\t} else if (options.errorHandler) {\n\t\toptions.errorHandler('warning', 'The `errorHandler` option has been deprecated, use `onError` instead!', this);\n\t}\n\n\t/**\n\t * used to replace line endings before parsing, defaults to `normalizeLineEndings`\n\t *\n\t * @type {(string) => string}\n\t * @readonly\n\t */\n\tthis.normalizeLineEndings = options.normalizeLineEndings || normalizeLineEndings;\n\n\t/**\n\t * Configures if the nodes created during parsing will have a `lineNumber` and a\n\t * `columnNumber`\n\t * attribute describing their location in the XML string.\n\t * Default is true.\n\t *\n\t * @type {boolean}\n\t * @readonly\n\t */\n\tthis.locator = !!options.locator;\n\n\t/**\n\t * The default namespace can be provided by the key that is the empty string.\n\t * When the `mimeType` for HTML, XHTML or SVG are passed to `parseFromString`,\n\t * the default namespace that will be used,\n\t * will be overridden according to the specification.\n\t *\n\t * @type {Readonly}\n\t * @readonly\n\t */\n\tthis.xmlns = this.assign(Object.create(null), options.xmlns);\n}\n\n/**\n * Parses `source` using the options in the way configured by the `DOMParserOptions` of `this`\n * `DOMParser`. If `mimeType` is `text/html` an HTML `Document` is created,\n * otherwise an XML `Document` is created.\n *\n * __It behaves different from the description in the living standard__:\n * - Uses the `options` passed to the `DOMParser` constructor to modify the behavior.\n * - Any unexpected input is reported to `onError` with either a `warning`,\n * `error` or `fatalError` level.\n * - Any `fatalError` throws a `ParseError` which prevents further processing.\n * - Any error thrown by `onError` is converted to a `ParseError` which prevents further\n * processing - If no `Document` was created during parsing it is reported as a `fatalError`.\n * *****Warning: By configuring a faulty DOMHandler implementation,\n * the specified behavior can completely be broken*****.\n *\n * @param {string} source\n * The XML mime type only allows string input!\n * @param {string} [mimeType='application/xml']\n * the mimeType or contentType of the document to be created determines the `type` of document\n * created (XML or HTML)\n * @returns {Document}\n * The `Document` node.\n * @throws {ParseError}\n * for any `fatalError` or anything that is thrown by `onError`\n * @throws {TypeError}\n * for any invalid `mimeType`\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString\n * @see https://html.spec.whatwg.org/#dom-domparser-parsefromstring-dev\n */\nDOMParser.prototype.parseFromString = function (source, mimeType) {\n\tif (!isValidMimeType(mimeType)) {\n\t\tthrow new TypeError('DOMParser.parseFromString: the provided mimeType \"' + mimeType + '\" is not valid.');\n\t}\n\tvar defaultNSMap = this.assign(Object.create(null), this.xmlns);\n\tvar entityMap = entities.XML_ENTITIES;\n\tvar defaultNamespace = defaultNSMap[''] || null;\n\tif (hasDefaultHTMLNamespace(mimeType)) {\n\t\tentityMap = entities.HTML_ENTITIES;\n\t\tdefaultNamespace = NAMESPACE.HTML;\n\t} else if (mimeType === MIME_TYPE.XML_SVG_IMAGE) {\n\t\tdefaultNamespace = NAMESPACE.SVG;\n\t}\n\tdefaultNSMap[''] = defaultNamespace;\n\tdefaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML;\n\n\tvar domBuilder = new this.domHandler({\n\t\tmimeType: mimeType,\n\t\tdefaultNamespace: defaultNamespace,\n\t\tonError: this.onError,\n\t});\n\tvar locator = this.locator ? {} : undefined;\n\tif (this.locator) {\n\t\tdomBuilder.setDocumentLocator(locator);\n\t}\n\n\tvar sax = new XMLReader();\n\tsax.errorHandler = domBuilder;\n\tsax.domBuilder = domBuilder;\n\tvar isXml = !conventions.isHTMLMimeType(mimeType);\n\tif (isXml && typeof source !== 'string') {\n\t\tsax.errorHandler.fatalError('source is not a string');\n\t}\n\tsax.parse(this.normalizeLineEndings(String(source)), defaultNSMap, entityMap);\n\tif (!domBuilder.doc.documentElement) {\n\t\tsax.errorHandler.fatalError('missing root element');\n\t}\n\treturn domBuilder.doc;\n};\n\n/**\n * @typedef DOMHandlerOptions\n * @property {string} [mimeType=MIME_TYPE.XML_APPLICATION]\n * @property {string | null} [defaultNamespace=null]\n */\n/**\n * The class that is used to handle events from the SAX parser to create the related DOM\n * elements.\n *\n * Some methods are only implemented as an empty function,\n * since they are (at least currently) not relevant for xmldom.\n *\n * @class\n * @param {DOMHandlerOptions} [options]\n * @see http://www.saxproject.org/apidoc/org/xml/sax/ext/DefaultHandler2.html\n */\nfunction DOMHandler(options) {\n\tvar opt = options || {};\n\t/**\n\t * The mime type is used to determine if the DOM handler will create an XML or HTML document.\n\t * Only if it is set to `text/html` it will create an HTML document.\n\t * It defaults to MIME_TYPE.XML_APPLICATION.\n\t *\n\t * @type {string}\n\t * @see {@link MIME_TYPE}\n\t * @readonly\n\t */\n\tthis.mimeType = opt.mimeType || MIME_TYPE.XML_APPLICATION;\n\n\t/**\n\t * The namespace to use to create an XML document.\n\t * For the following reasons this is required:\n\t * - The SAX API for `startDocument` doesn't offer any way to pass a namespace,\n\t * since at that point there is no way for the parser to know what the default namespace from\n\t * the document will be.\n\t * - When creating using `DOMImplementation.createDocument` it is required to pass a\n\t * namespace,\n\t * to determine the correct `Document.contentType`, which should match `this.mimeType`.\n\t * - When parsing an XML document with the `application/xhtml+xml` mimeType,\n\t * the HTML namespace needs to be the default namespace.\n\t *\n\t * @type {string | null}\n\t * @private\n\t * @readonly\n\t */\n\tthis.defaultNamespace = opt.defaultNamespace || null;\n\n\t/**\n\t * @type {boolean}\n\t * @private\n\t */\n\tthis.cdata = false;\n\n\t/**\n\t * The last `Element` that was created by `startElement`.\n\t * `endElement` sets it to the `currentElement.parentNode`.\n\t *\n\t * Note: The sax parser currently sets it to white space text nodes between tags.\n\t *\n\t * @type {Element | Node | undefined}\n\t * @private\n\t */\n\tthis.currentElement = undefined;\n\n\t/**\n\t * The Document that is created as part of `startDocument`,\n\t * and returned by `DOMParser.parseFromString`.\n\t *\n\t * @type {Document | undefined}\n\t * @readonly\n\t */\n\tthis.doc = undefined;\n\n\t/**\n\t * The locator is stored as part of setDocumentLocator.\n\t * It is controlled and mutated by the SAX parser to store the current parsing position.\n\t * It is used by DOMHandler to set `columnNumber` and `lineNumber`\n\t * on the DOM nodes.\n\t *\n\t * @type {Readonly | undefined}\n\t * @private\n\t * @readonly (the\n\t * sax parser currently sometimes set's it)\n\t */\n\tthis.locator = undefined;\n\t/**\n\t * @type {function (level:ErrorLevel ,message:string, context:DOMHandler):void}\n\t * @readonly\n\t */\n\tthis.onError = opt.onError;\n}\n\nfunction position(locator, node) {\n\tnode.lineNumber = locator.lineNumber;\n\tnode.columnNumber = locator.columnNumber;\n}\n\nDOMHandler.prototype = {\n\t/**\n\t * Either creates an XML or an HTML document and stores it under `this.doc`.\n\t * If it is an XML document, `this.defaultNamespace` is used to create it,\n\t * and it will not contain any `childNodes`.\n\t * If it is an HTML document, it will be created without any `childNodes`.\n\t *\n\t * @see http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html\n\t */\n\tstartDocument: function () {\n\t\tvar impl = new DOMImplementation();\n\t\tthis.doc = isHTMLMimeType(this.mimeType) ? impl.createHTMLDocument(false) : impl.createDocument(this.defaultNamespace, '');\n\t},\n\tstartElement: function (namespaceURI, localName, qName, attrs) {\n\t\tvar doc = this.doc;\n\t\tvar el = doc.createElementNS(namespaceURI, qName || localName);\n\t\tvar len = attrs.length;\n\t\tappendElement(this, el);\n\t\tthis.currentElement = el;\n\n\t\tthis.locator && position(this.locator, el);\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tvar namespaceURI = attrs.getURI(i);\n\t\t\tvar value = attrs.getValue(i);\n\t\t\tvar qName = attrs.getQName(i);\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\n\t\t\tthis.locator && position(attrs.getLocator(i), attr);\n\t\t\tattr.value = attr.nodeValue = value;\n\t\t\tel.setAttributeNode(attr);\n\t\t}\n\t},\n\tendElement: function (namespaceURI, localName, qName) {\n\t\tthis.currentElement = this.currentElement.parentNode;\n\t},\n\tstartPrefixMapping: function (prefix, uri) {},\n\tendPrefixMapping: function (prefix) {},\n\tprocessingInstruction: function (target, data) {\n\t\tvar ins = this.doc.createProcessingInstruction(target, data);\n\t\tthis.locator && position(this.locator, ins);\n\t\tappendElement(this, ins);\n\t},\n\tignorableWhitespace: function (ch, start, length) {},\n\tcharacters: function (chars, start, length) {\n\t\tchars = _toString.apply(this, arguments);\n\t\t//console.log(chars)\n\t\tif (chars) {\n\t\t\tif (this.cdata) {\n\t\t\t\tvar charNode = this.doc.createCDATASection(chars);\n\t\t\t} else {\n\t\t\t\tvar charNode = this.doc.createTextNode(chars);\n\t\t\t}\n\t\t\tif (this.currentElement) {\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t} else if (/^\\s*$/.test(chars)) {\n\t\t\t\tthis.doc.appendChild(charNode);\n\t\t\t\t//process xml\n\t\t\t}\n\t\t\tthis.locator && position(this.locator, charNode);\n\t\t}\n\t},\n\tskippedEntity: function (name) {},\n\tendDocument: function () {\n\t\tthis.doc.normalize();\n\t},\n\t/**\n\t * Stores the locator to be able to set the `columnNumber` and `lineNumber`\n\t * on the created DOM nodes.\n\t *\n\t * @param {Locator} locator\n\t */\n\tsetDocumentLocator: function (locator) {\n\t\tif (locator) {\n\t\t\tlocator.lineNumber = 0;\n\t\t}\n\t\tthis.locator = locator;\n\t},\n\t//LexicalHandler\n\tcomment: function (chars, start, length) {\n\t\tchars = _toString.apply(this, arguments);\n\t\tvar comm = this.doc.createComment(chars);\n\t\tthis.locator && position(this.locator, comm);\n\t\tappendElement(this, comm);\n\t},\n\n\tstartCDATA: function () {\n\t\t//used in characters() methods\n\t\tthis.cdata = true;\n\t},\n\tendCDATA: function () {\n\t\tthis.cdata = false;\n\t},\n\n\tstartDTD: function (name, publicId, systemId, internalSubset) {\n\t\tvar impl = this.doc.implementation;\n\t\tif (impl && impl.createDocumentType) {\n\t\t\tvar dt = impl.createDocumentType(name, publicId, systemId, internalSubset);\n\t\t\tthis.locator && position(this.locator, dt);\n\t\t\tappendElement(this, dt);\n\t\t\tthis.doc.doctype = dt;\n\t\t}\n\t},\n\treportError: function (level, message) {\n\t\tif (typeof this.onError === 'function') {\n\t\t\ttry {\n\t\t\t\tthis.onError(level, message, this);\n\t\t\t} catch (e) {\n\t\t\t\tthrow new ParseError('Reporting ' + level + ' \"' + message + '\" caused ' + e, this.locator);\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.error('[xmldom ' + level + ']\\t' + message, _locator(this.locator));\n\t\t}\n\t},\n\t/**\n\t * @see http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html\n\t */\n\twarning: function (message) {\n\t\tthis.reportError('warning', message);\n\t},\n\terror: function (message) {\n\t\tthis.reportError('error', message);\n\t},\n\t/**\n\t * This function reports a fatal error and throws a ParseError.\n\t *\n\t * @param {string} message\n\t * - The message to be used for reporting and throwing the error.\n\t * @returns {never}\n\t * This function always throws an error and never returns a value.\n\t * @throws {ParseError}\n\t * Always throws a ParseError with the provided message.\n\t */\n\tfatalError: function (message) {\n\t\tthis.reportError('fatalError', message);\n\t\tthrow new ParseError(message, this.locator);\n\t},\n};\n\nfunction _locator(l) {\n\tif (l) {\n\t\treturn '\\n@#[line:' + l.lineNumber + ',col:' + l.columnNumber + ']';\n\t}\n}\n\nfunction _toString(chars, start, length) {\n\tif (typeof chars == 'string') {\n\t\treturn chars.substr(start, length);\n\t} else {\n\t\t//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\n\t\tif (chars.length >= start + length || start) {\n\t\t\treturn new java.lang.String(chars, start, length) + '';\n\t\t}\n\t\treturn chars;\n\t}\n}\n\n/*\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html\n * used method of org.xml.sax.ext.LexicalHandler:\n * #comment(chars, start, length)\n * #startCDATA()\n * #endCDATA()\n * #startDTD(name, publicId, systemId)\n *\n *\n * IGNORED method of org.xml.sax.ext.LexicalHandler:\n * #endDTD()\n * #startEntity(name)\n * #endEntity(name)\n *\n *\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html\n * IGNORED method of org.xml.sax.ext.DeclHandler\n * \t#attributeDecl(eName, aName, type, mode, value)\n * #elementDecl(name, model)\n * #externalEntityDecl(name, publicId, systemId)\n * #internalEntityDecl(name, value)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html\n * IGNORED method of org.xml.sax.EntityResolver2\n * #resolveEntity(String name,String publicId,String baseURI,String systemId)\n * #resolveEntity(publicId, systemId)\n * #getExternalSubset(name, baseURI)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html\n * IGNORED method of org.xml.sax.DTDHandler\n * #notationDecl(name, publicId, systemId) {};\n * #unparsedEntityDecl(name, publicId, systemId, notationName) {};\n */\n'endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl'.replace(\n\t/\\w+/g,\n\tfunction (key) {\n\t\tDOMHandler.prototype[key] = function () {\n\t\t\treturn null;\n\t\t};\n\t}\n);\n\n/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */\nfunction appendElement(handler, node) {\n\tif (!handler.currentElement) {\n\t\thandler.doc.appendChild(node);\n\t} else {\n\t\thandler.currentElement.appendChild(node);\n\t}\n}\n\n/**\n * A method that prevents any further parsing when an `error`\n * with level `error` is reported during parsing.\n *\n * @see {@link DOMParserOptions.onError}\n * @see {@link onWarningStopParsing}\n */\nfunction onErrorStopParsing(level) {\n\tif (level === 'error') throw 'onErrorStopParsing';\n}\n\n/**\n * A method that prevents any further parsing when any `error` is reported during parsing.\n *\n * @see {@link DOMParserOptions.onError}\n * @see {@link onErrorStopParsing}\n */\nfunction onWarningStopParsing() {\n\tthrow 'onWarningStopParsing';\n}\n\nexports.__DOMHandler = DOMHandler;\nexports.DOMParser = DOMParser;\nexports.normalizeLineEndings = normalizeLineEndings;\nexports.onErrorStopParsing = onErrorStopParsing;\nexports.onWarningStopParsing = onWarningStopParsing;\n","'use strict';\n\nvar conventions = require('./conventions');\nvar find = conventions.find;\nvar hasDefaultHTMLNamespace = conventions.hasDefaultHTMLNamespace;\nvar hasOwn = conventions.hasOwn;\nvar isHTMLMimeType = conventions.isHTMLMimeType;\nvar isHTMLRawTextElement = conventions.isHTMLRawTextElement;\nvar isHTMLVoidElement = conventions.isHTMLVoidElement;\nvar MIME_TYPE = conventions.MIME_TYPE;\nvar NAMESPACE = conventions.NAMESPACE;\n\n/**\n * Private DOM Constructor symbol\n *\n * Internal symbol used for construction of all classes whose constructors should be private.\n * Currently used for checks in `Node`, `Document`, `Element`, `Attr`, `CharacterData`, `Text`, `Comment`,\n * `CDATASection`, `DocumentType`, `Notation`, `Entity`, `EntityReference`, `DocumentFragment`, `ProcessingInstruction`\n * so the constructor can't be used from outside the module.\n */\nvar PDC = Symbol();\n\nvar errors = require('./errors');\nvar DOMException = errors.DOMException;\nvar DOMExceptionName = errors.DOMExceptionName;\n\nvar g = require('./grammar');\n\n/**\n * Checks if the given symbol equals the Private DOM Constructor symbol (PDC)\n * and throws an Illegal constructor exception when the symbols don't match.\n * This ensures that the constructor remains private and can't be used outside this module.\n */\nfunction checkSymbol(symbol) {\n\tif (symbol !== PDC) {\n\t\tthrow new TypeError('Illegal constructor');\n\t}\n}\n\n/**\n * A prerequisite for `[].filter`, to drop elements that are empty.\n *\n * @param {string} input\n * The string to be checked.\n * @returns {boolean}\n * Returns `true` if the input string is not empty, `false` otherwise.\n */\nfunction notEmptyString(input) {\n\treturn input !== '';\n}\n/**\n * Splits a string on ASCII whitespace characters (U+0009 TAB, U+000A LF, U+000C FF, U+000D CR,\n * U+0020 SPACE).\n * It follows the definition from the infra specification from WHATWG.\n *\n * @param {string} input\n * The string to be split.\n * @returns {string[]}\n * An array of the split strings. The array can be empty if the input string is empty or only\n * contains whitespace characters.\n * @see {@link https://infra.spec.whatwg.org/#split-on-ascii-whitespace}\n * @see {@link https://infra.spec.whatwg.org/#ascii-whitespace}\n */\nfunction splitOnASCIIWhitespace(input) {\n\t// U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE\n\treturn input ? input.split(/[\\t\\n\\f\\r ]+/).filter(notEmptyString) : [];\n}\n\n/**\n * Adds element as a key to current if it is not already present.\n *\n * @param {Record} current\n * The current record object to which the element will be added as a key.\n * The object's keys are string types and values are either boolean or undefined.\n * @param {string} element\n * The string to be added as a key to the current record.\n * @returns {Record}\n * The updated record object after the addition of the new element.\n */\nfunction orderedSetReducer(current, element) {\n\tif (!hasOwn(current, element)) {\n\t\tcurrent[element] = true;\n\t}\n\treturn current;\n}\n\n/**\n * Converts a string into an ordered set by splitting the input on ASCII whitespace and\n * ensuring uniqueness of elements.\n * This follows the definition of an ordered set from the infra specification by WHATWG.\n *\n * @param {string} input\n * The input string to be transformed into an ordered set.\n * @returns {string[]}\n * An array of unique strings obtained from the input, preserving the original order.\n * The array can be empty if the input string is empty or only contains whitespace characters.\n * @see {@link https://infra.spec.whatwg.org/#ordered-set}\n */\nfunction toOrderedSet(input) {\n\tif (!input) return [];\n\tvar list = splitOnASCIIWhitespace(input);\n\treturn Object.keys(list.reduce(orderedSetReducer, {}));\n}\n\n/**\n * Uses `list.indexOf` to implement a function that behaves like `Array.prototype.includes`.\n * This function is used in environments where `Array.prototype.includes` may not be available.\n *\n * @param {any[]} list\n * The array in which to search for the element.\n * @returns {function(any): boolean}\n * A function that accepts an element and returns a boolean indicating whether the element is\n * included in the provided list.\n */\nfunction arrayIncludes(list) {\n\treturn function (element) {\n\t\treturn list && list.indexOf(element) !== -1;\n\t};\n}\n\n/**\n * Validates a qualified name based on the criteria provided in the DOM specification by\n * WHATWG.\n *\n * @param {string} qualifiedName\n * The qualified name to be validated.\n * @throws {DOMException}\n * With code {@link DOMException.INVALID_CHARACTER_ERR} if the qualified name contains an\n * invalid character.\n * @see {@link https://dom.spec.whatwg.org/#validate}\n */\nfunction validateQualifiedName(qualifiedName) {\n\tif (!g.QName_exact.test(qualifiedName)) {\n\t\tthrow new DOMException(DOMException.INVALID_CHARACTER_ERR, 'invalid character in qualified name \"' + qualifiedName + '\"');\n\t}\n}\n\n/**\n * Validates a qualified name and the namespace associated with it,\n * based on the criteria provided in the DOM specification by WHATWG.\n *\n * @param {string | null} namespace\n * The namespace to be validated. It can be a string or null.\n * @param {string} qualifiedName\n * The qualified name to be validated.\n * @returns {[namespace: string | null, prefix: string | null, localName: string]}\n * Returns a tuple with the namespace,\n * prefix and local name of the qualified name.\n * @throws {DOMException}\n * Throws a DOMException if the qualified name or the namespace is not valid.\n * @see {@link https://dom.spec.whatwg.org/#validate-and-extract}\n */\nfunction validateAndExtract(namespace, qualifiedName) {\n\tvalidateQualifiedName(qualifiedName);\n\tnamespace = namespace || null;\n\t/**\n\t * @type {string | null}\n\t */\n\tvar prefix = null;\n\tvar localName = qualifiedName;\n\tif (qualifiedName.indexOf(':') >= 0) {\n\t\tvar splitResult = qualifiedName.split(':');\n\t\tprefix = splitResult[0];\n\t\tlocalName = splitResult[1];\n\t}\n\tif (prefix !== null && namespace === null) {\n\t\tthrow new DOMException(DOMException.NAMESPACE_ERR, 'prefix is non-null and namespace is null');\n\t}\n\tif (prefix === 'xml' && namespace !== conventions.NAMESPACE.XML) {\n\t\tthrow new DOMException(DOMException.NAMESPACE_ERR, 'prefix is \"xml\" and namespace is not the XML namespace');\n\t}\n\tif ((prefix === 'xmlns' || qualifiedName === 'xmlns') && namespace !== conventions.NAMESPACE.XMLNS) {\n\t\tthrow new DOMException(\n\t\t\tDOMException.NAMESPACE_ERR,\n\t\t\t'either qualifiedName or prefix is \"xmlns\" and namespace is not the XMLNS namespace'\n\t\t);\n\t}\n\tif (namespace === conventions.NAMESPACE.XMLNS && prefix !== 'xmlns' && qualifiedName !== 'xmlns') {\n\t\tthrow new DOMException(\n\t\t\tDOMException.NAMESPACE_ERR,\n\t\t\t'namespace is the XMLNS namespace and neither qualifiedName nor prefix is \"xmlns\"'\n\t\t);\n\t}\n\treturn [namespace, prefix, localName];\n}\n\n/**\n * Copies properties from one object to another.\n * It only copies the object's own (not inherited) properties.\n *\n * @param {Object} src\n * The source object from which properties are copied.\n * @param {Object} dest\n * The destination object to which properties are copied.\n */\nfunction copy(src, dest) {\n\tfor (var p in src) {\n\t\tif (hasOwn(src, p)) {\n\t\t\tdest[p] = src[p];\n\t\t}\n\t}\n}\n\n/**\n * Extends a class with the properties and methods of a super class.\n * It uses a form of prototypal inheritance, and establishes the `constructor` property\n * correctly(?).\n *\n * It is not clear to the current maintainers if this implementation is making sense,\n * since it creates an intermediate prototype function,\n * which all properties of `Super` are copied onto using `_copy`.\n *\n * @param {Object} Class\n * The class that is to be extended.\n * @param {Object} Super\n * The super class from which properties and methods are inherited.\n * @private\n */\nfunction _extends(Class, Super) {\n\tvar pt = Class.prototype;\n\tif (!(pt instanceof Super)) {\n\t\tfunction t() {}\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt, t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif (pt.constructor != Class) {\n\t\tif (typeof Class != 'function') {\n\t\t\tconsole.error('unknown Class:' + Class);\n\t\t}\n\t\tpt.constructor = Class;\n\t}\n}\n\nvar NodeType = {};\nvar ELEMENT_NODE = (NodeType.ELEMENT_NODE = 1);\nvar ATTRIBUTE_NODE = (NodeType.ATTRIBUTE_NODE = 2);\nvar TEXT_NODE = (NodeType.TEXT_NODE = 3);\nvar CDATA_SECTION_NODE = (NodeType.CDATA_SECTION_NODE = 4);\nvar ENTITY_REFERENCE_NODE = (NodeType.ENTITY_REFERENCE_NODE = 5);\nvar ENTITY_NODE = (NodeType.ENTITY_NODE = 6);\nvar PROCESSING_INSTRUCTION_NODE = (NodeType.PROCESSING_INSTRUCTION_NODE = 7);\nvar COMMENT_NODE = (NodeType.COMMENT_NODE = 8);\nvar DOCUMENT_NODE = (NodeType.DOCUMENT_NODE = 9);\nvar DOCUMENT_TYPE_NODE = (NodeType.DOCUMENT_TYPE_NODE = 10);\nvar DOCUMENT_FRAGMENT_NODE = (NodeType.DOCUMENT_FRAGMENT_NODE = 11);\nvar NOTATION_NODE = (NodeType.NOTATION_NODE = 12);\n\nvar DocumentPosition = conventions.freeze({\n\tDOCUMENT_POSITION_DISCONNECTED: 1,\n\tDOCUMENT_POSITION_PRECEDING: 2,\n\tDOCUMENT_POSITION_FOLLOWING: 4,\n\tDOCUMENT_POSITION_CONTAINS: 8,\n\tDOCUMENT_POSITION_CONTAINED_BY: 16,\n\tDOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 32,\n});\n\n//helper functions for compareDocumentPosition\n/**\n * Constructs a parent chain for a node.\n *\n * @param {Node} node\n * The start node from which the parent chain will be constructed.\n * @returns {Node[]}\n * The array of nodes representing the parent chain from the root to the specified node.\n */\nfunction parentChain(node) {\n\tvar chain = [];\n\twhile (node.parentNode || node.ownerElement) {\n\t\tnode = node.parentNode || node.ownerElement;\n\t\tchain.unshift(node);\n\t}\n\treturn chain;\n}\n\n/**\n * Finds the common ancestor in two parent chains.\n *\n * @param {Node[]} a\n * The first parent chain.\n * @param {Node[]} b\n * The second parent chain.\n * @returns {Node}\n * The common ancestor node if it exists. If there is no common ancestor, the function will\n * return `null`.\n */\nfunction commonAncestor(a, b) {\n\tif (b.length < a.length) return commonAncestor(b, a);\n\tvar c = null;\n\tfor (var n in a) {\n\t\tif (a[n] !== b[n]) return c;\n\t\tc = a[n];\n\t}\n\treturn c;\n}\n\n/**\n * Assigns a unique identifier to a document to ensure consistency while comparing unrelated\n * nodes.\n *\n * @param {Document} doc\n * The document to which a unique identifier is to be assigned.\n * @returns {string}\n * The unique identifier of the document. If the document already had a unique identifier, the\n * function will return the existing one.\n */\nfunction docGUID(doc) {\n\tif (!doc.guid) doc.guid = Math.random();\n\treturn doc.guid;\n}\n//-- end of helper functions\n\n/**\n * The NodeList interface provides the abstraction of an ordered collection of nodes,\n * without defining or constraining how this collection is implemented.\n * NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n * You can also access the items of the NodeList with a `for...of` loop.\n *\n * @class NodeList\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * @constructs NodeList\n */\nfunction NodeList() {}\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1\n\t * inclusive.\n\t *\n\t * @type {number}\n\t */\n\tlength: 0,\n\t/**\n\t * Returns the item at `index`. If index is greater than or equal to the number of nodes in\n\t * the list, this returns null.\n\t *\n\t * @param index\n\t * Unsigned long Index into the collection.\n\t * @returns {Node | null}\n\t * The node at position `index` in the NodeList,\n\t * or null if that is not a valid index.\n\t */\n\titem: function (index) {\n\t\treturn index >= 0 && index < this.length ? this[index] : null;\n\t},\n\t/**\n\t * Returns a string representation of the NodeList.\n\t *\n\t * @param {unknown} nodeFilter\n\t * __A filter function? Not implemented according to the spec?__.\n\t * @returns {string}\n\t * A string representation of the NodeList.\n\t */\n\ttoString: function (nodeFilter) {\n\t\tfor (var buf = [], i = 0; i < this.length; i++) {\n\t\t\tserializeToString(this[i], buf, nodeFilter);\n\t\t}\n\t\treturn buf.join('');\n\t},\n\t/**\n\t * Filters the NodeList based on a predicate.\n\t *\n\t * @param {function(Node): boolean} predicate\n\t * - A predicate function to filter the NodeList.\n\t * @returns {Node[]}\n\t * An array of nodes that satisfy the predicate.\n\t * @private\n\t */\n\tfilter: function (predicate) {\n\t\treturn Array.prototype.filter.call(this, predicate);\n\t},\n\t/**\n\t * Returns the first index at which a given node can be found in the NodeList, or -1 if it is\n\t * not present.\n\t *\n\t * @param {Node} item\n\t * - The Node item to locate in the NodeList.\n\t * @returns {number}\n\t * The first index of the node in the NodeList; -1 if not found.\n\t * @private\n\t */\n\tindexOf: function (item) {\n\t\treturn Array.prototype.indexOf.call(this, item);\n\t},\n};\nNodeList.prototype[Symbol.iterator] = function () {\n\tvar me = this;\n\tvar index = 0;\n\n\treturn {\n\t\tnext: function () {\n\t\t\tif (index < me.length) {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: me[index++],\n\t\t\t\t\tdone: false,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tdone: true,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\treturn: function () {\n\t\t\treturn {\n\t\t\t\tdone: true,\n\t\t\t};\n\t\t},\n\t};\n};\n\n/**\n * Represents a live collection of nodes that is automatically updated when its associated\n * document changes.\n *\n * @class LiveNodeList\n * @param {Node} node\n * The associated node.\n * @param {function} refresh\n * The function to refresh the live node list.\n * @augments NodeList\n * @constructs LiveNodeList\n */\nfunction LiveNodeList(node, refresh) {\n\tthis._node = node;\n\tthis._refresh = refresh;\n\t_updateLiveList(this);\n}\n/**\n * Updates the live node list.\n *\n * @param {LiveNodeList} list\n * The live node list to update.\n * @private\n */\nfunction _updateLiveList(list) {\n\tvar inc = list._node._inc || list._node.ownerDocument._inc;\n\tif (list._inc !== inc) {\n\t\tvar ls = list._refresh(list._node);\n\t\t__set__(list, 'length', ls.length);\n\t\tif (!list.$$length || ls.length < list.$$length) {\n\t\t\tfor (var i = ls.length; i in list; i++) {\n\t\t\t\tif (hasOwn(list, i)) {\n\t\t\t\t\tdelete list[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcopy(ls, list);\n\t\tlist._inc = inc;\n\t}\n}\n/**\n * Returns the node at position `index` in the LiveNodeList, or null if that is not a valid\n * index.\n *\n * @param {number} i\n * Index into the collection.\n * @returns {Node | null}\n * The node at position `index` in the LiveNodeList, or null if that is not a valid index.\n */\nLiveNodeList.prototype.item = function (i) {\n\t_updateLiveList(this);\n\treturn this[i] || null;\n};\n\n_extends(LiveNodeList, NodeList);\n\n/**\n * Objects implementing the NamedNodeMap interface are used to represent collections of nodes\n * that can be accessed by name.\n * Note that NamedNodeMap does not inherit from NodeList;\n * NamedNodeMaps are not maintained in any particular order.\n * Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal\n * index,\n * but this is simply to allow convenient enumeration of the contents of a NamedNodeMap,\n * and does not imply that the DOM specifies an order to these Nodes.\n * NamedNodeMap objects in the DOM are live.\n * used for attributes or DocumentType entities\n *\n * This implementation only supports property indices, but does not support named properties,\n * as specified in the living standard.\n *\n * @class NamedNodeMap\n * @see https://dom.spec.whatwg.org/#interface-namednodemap\n * @see https://webidl.spec.whatwg.org/#dfn-supported-property-names\n * @constructs NamedNodeMap\n */\nfunction NamedNodeMap() {}\n/**\n * Returns the index of a node within the list.\n *\n * @param {Array} list\n * The list of nodes.\n * @param {Node} node\n * The node to find.\n * @returns {number}\n * The index of the node within the list, or -1 if not found.\n * @private\n */\nfunction _findNodeIndex(list, node) {\n\tvar i = 0;\n\twhile (i < list.length) {\n\t\tif (list[i] === node) {\n\t\t\treturn i;\n\t\t}\n\t\ti++;\n\t}\n}\n/**\n * Adds a new attribute to the list and updates the owner element of the attribute.\n *\n * @param {Element} el\n * The element which will become the owner of the new attribute.\n * @param {NamedNodeMap} list\n * The list to which the new attribute will be added.\n * @param {Attr} newAttr\n * The new attribute to be added.\n * @param {Attr} oldAttr\n * The old attribute to be replaced, or null if no attribute is to be replaced.\n * @returns {void}\n * @private\n */\nfunction _addNamedNode(el, list, newAttr, oldAttr) {\n\tif (oldAttr) {\n\t\tlist[_findNodeIndex(list, oldAttr)] = newAttr;\n\t} else {\n\t\tlist[list.length] = newAttr;\n\t\tlist.length++;\n\t}\n\tif (el) {\n\t\tnewAttr.ownerElement = el;\n\t\tvar doc = el.ownerDocument;\n\t\tif (doc) {\n\t\t\toldAttr && _onRemoveAttribute(doc, el, oldAttr);\n\t\t\t_onAddAttribute(doc, el, newAttr);\n\t\t}\n\t}\n}\n/**\n * Removes an attribute from the list and updates the owner element of the attribute.\n *\n * @param {Element} el\n * The element which is the current owner of the attribute.\n * @param {NamedNodeMap} list\n * The list from which the attribute will be removed.\n * @param {Attr} attr\n * The attribute to be removed.\n * @returns {void}\n * @private\n */\nfunction _removeNamedNode(el, list, attr) {\n\t//console.log('remove attr:'+attr)\n\tvar i = _findNodeIndex(list, attr);\n\tif (i >= 0) {\n\t\tvar lastIndex = list.length - 1;\n\t\twhile (i <= lastIndex) {\n\t\t\tlist[i] = list[++i];\n\t\t}\n\t\tlist.length = lastIndex;\n\t\tif (el) {\n\t\t\tvar doc = el.ownerDocument;\n\t\t\tif (doc) {\n\t\t\t\t_onRemoveAttribute(doc, el, attr);\n\t\t\t}\n\t\t\tattr.ownerElement = null;\n\t\t}\n\t}\n}\nNamedNodeMap.prototype = {\n\tlength: 0,\n\titem: NodeList.prototype.item,\n\n\t/**\n\t * Get an attribute by name. Note: Name is in lower case in case of HTML namespace and\n\t * document.\n\t *\n\t * @param {string} localName\n\t * The local name of the attribute.\n\t * @returns {Attr | null}\n\t * The attribute with the given local name, or null if no such attribute exists.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-get-by-name\n\t */\n\tgetNamedItem: function (localName) {\n\t\tif (this._ownerElement && this._ownerElement._isInHTMLDocumentAndNamespace()) {\n\t\t\tlocalName = localName.toLowerCase();\n\t\t}\n\t\tvar i = 0;\n\t\twhile (i < this.length) {\n\t\t\tvar attr = this[i];\n\t\t\tif (attr.nodeName === localName) {\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\treturn null;\n\t},\n\n\t/**\n\t * Set an attribute.\n\t *\n\t * @param {Attr} attr\n\t * The attribute to set.\n\t * @returns {Attr | null}\n\t * The old attribute with the same local name and namespace URI as the new one, or null if no\n\t * such attribute exists.\n\t * @throws {DOMException}\n\t * With code:\n\t * - {@link INUSE_ATTRIBUTE_ERR} - If the attribute is already an attribute of another\n\t * element.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-set\n\t */\n\tsetNamedItem: function (attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif (el && el !== this._ownerElement) {\n\t\t\tthrow new DOMException(DOMException.INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItemNS(attr.namespaceURI, attr.localName);\n\t\tif (oldAttr === attr) {\n\t\t\treturn attr;\n\t\t}\n\t\t_addNamedNode(this._ownerElement, this, attr, oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/**\n\t * Set an attribute, replacing an existing attribute with the same local name and namespace\n\t * URI if one exists.\n\t *\n\t * @param {Attr} attr\n\t * The attribute to set.\n\t * @returns {Attr | null}\n\t * The old attribute with the same local name and namespace URI as the new one, or null if no\n\t * such attribute exists.\n\t * @throws {DOMException}\n\t * Throws a DOMException with the name \"InUseAttributeError\" if the attribute is already an\n\t * attribute of another element.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-set\n\t */\n\tsetNamedItemNS: function (attr) {\n\t\treturn this.setNamedItem(attr);\n\t},\n\n\t/**\n\t * Removes an attribute specified by the local name.\n\t *\n\t * @param {string} localName\n\t * The local name of the attribute to be removed.\n\t * @returns {Attr}\n\t * The attribute node that was removed.\n\t * @throws {DOMException}\n\t * With code:\n\t * - {@link DOMException.NOT_FOUND_ERR} if no attribute with the given name is found.\n\t * @see https://dom.spec.whatwg.org/#dom-namednodemap-removenameditem\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-remove-by-name\n\t */\n\tremoveNamedItem: function (localName) {\n\t\tvar attr = this.getNamedItem(localName);\n\t\tif (!attr) {\n\t\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, localName);\n\t\t}\n\t\t_removeNamedNode(this._ownerElement, this, attr);\n\t\treturn attr;\n\t},\n\n\t/**\n\t * Removes an attribute specified by the namespace and local name.\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI of the attribute to be removed.\n\t * @param {string} localName\n\t * The local name of the attribute to be removed.\n\t * @returns {Attr}\n\t * The attribute node that was removed.\n\t * @throws {DOMException}\n\t * With code:\n\t * - {@link DOMException.NOT_FOUND_ERR} if no attribute with the given namespace URI and local\n\t * name is found.\n\t * @see https://dom.spec.whatwg.org/#dom-namednodemap-removenameditemns\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-remove-by-namespace\n\t */\n\tremoveNamedItemNS: function (namespaceURI, localName) {\n\t\tvar attr = this.getNamedItemNS(namespaceURI, localName);\n\t\tif (!attr) {\n\t\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, namespaceURI ? namespaceURI + ' : ' + localName : localName);\n\t\t}\n\t\t_removeNamedNode(this._ownerElement, this, attr);\n\t\treturn attr;\n\t},\n\n\t/**\n\t * Get an attribute by namespace and local name.\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI of the attribute.\n\t * @param {string} localName\n\t * The local name of the attribute.\n\t * @returns {Attr | null}\n\t * The attribute with the given namespace URI and local name, or null if no such attribute\n\t * exists.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-get-by-namespace\n\t */\n\tgetNamedItemNS: function (namespaceURI, localName) {\n\t\tif (!namespaceURI) {\n\t\t\tnamespaceURI = null;\n\t\t}\n\t\tvar i = 0;\n\t\twhile (i < this.length) {\n\t\t\tvar node = this[i];\n\t\t\tif (node.localName === localName && node.namespaceURI === namespaceURI) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\treturn null;\n\t},\n};\nNamedNodeMap.prototype[Symbol.iterator] = function () {\n\tvar me = this;\n\tvar index = 0;\n\n\treturn {\n\t\tnext: function () {\n\t\t\tif (index < me.length) {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: me[index++],\n\t\t\t\t\tdone: false,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tdone: true,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\treturn: function () {\n\t\t\treturn {\n\t\t\t\tdone: true,\n\t\t\t};\n\t\t},\n\t};\n};\n\n/**\n * The DOMImplementation interface provides a number of methods for performing operations that\n * are independent of any particular instance of the document object model.\n *\n * The DOMImplementation interface represents an object providing methods which are not\n * dependent on any particular document.\n * Such an object is returned by the `Document.implementation` property.\n *\n * **The individual methods describe the differences compared to the specs**.\n *\n * @class DOMImplementation\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN\n * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core\n * (Initial)\n * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core\n * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard\n * @constructs DOMImplementation\n */\nfunction DOMImplementation() {}\n\nDOMImplementation.prototype = {\n\t/**\n\t * Test if the DOM implementation implements a specific feature and version, as specified in\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMFeatures DOM Features}.\n\t *\n\t * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given\n\t * feature is supported. The different implementations fairly diverged in what kind of\n\t * features were reported. The latest version of the spec settled to force this method to\n\t * always return true, where the functionality was accurate and in use.\n\t *\n\t * @deprecated\n\t * It is deprecated and modern browsers return true in all cases.\n\t * @function DOMImplementation#hasFeature\n\t * @param {string} feature\n\t * The name of the feature to test.\n\t * @param {string} [version]\n\t * This is the version number of the feature to test.\n\t * @returns {boolean}\n\t * Always returns true.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN\n\t * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-5CED94D7 DOM Level 3 Core\n\t */\n\thasFeature: function (feature, version) {\n\t\treturn true;\n\t},\n\t/**\n\t * Creates a DOM Document object of the specified type with its document element. Note that\n\t * based on the {@link DocumentType}\n\t * given to create the document, the implementation may instantiate specialized\n\t * {@link Document} objects that support additional features than the \"Core\", such as \"HTML\"\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#DOM2HTML DOM Level 2 HTML}.\n\t * On the other hand, setting the {@link DocumentType} after the document was created makes\n\t * this very unlikely to happen. Alternatively, specialized {@link Document} creation methods,\n\t * such as createHTMLDocument\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#DOM2HTML DOM Level 2 HTML},\n\t * can be used to obtain specific types of {@link Document} objects.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - There is no interface/class `XMLDocument`, it returns a `Document`\n\t * instance (with it's `type` set to `'xml'`).\n\t * - `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t *\n\t * @function DOMImplementation.createDocument\n\t * @param {string | null} namespaceURI\n\t * The\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-namespaceURI namespace URI}\n\t * of the document element to create or null.\n\t * @param {string | null} qualifiedName\n\t * The\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-qualifiedname qualified name}\n\t * of the document element to be created or null.\n\t * @param {DocumentType | null} [doctype=null]\n\t * The type of document to be created or null. When doctype is not null, its\n\t * {@link Node#ownerDocument} attribute is set to the document being created. Default is\n\t * `null`\n\t * @returns {Document}\n\t * A new {@link Document} object with its document element. If the NamespaceURI,\n\t * qualifiedName, and doctype are null, the returned {@link Document} is empty with no\n\t * document element.\n\t * @throws {DOMException}\n\t * With code:\n\t *\n\t * - `INVALID_CHARACTER_ERR`: Raised if the specified qualified name is not an XML name\n\t * according to {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#XML XML 1.0}.\n\t * - `NAMESPACE_ERR`: Raised if the qualifiedName is malformed, if the qualifiedName has a\n\t * prefix and the namespaceURI is null, or if the qualifiedName is null and the namespaceURI\n\t * is different from null, or if the qualifiedName has a prefix that is \"xml\" and the\n\t * namespaceURI is different from \"{@link http://www.w3.org/XML/1998/namespace}\"\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#Namespaces XML Namespaces},\n\t * or if the DOM implementation does not support the \"XML\" feature but a non-null namespace\n\t * URI was provided, since namespaces were defined by XML.\n\t * - `WRONG_DOCUMENT_ERR`: Raised if doctype has already been used with a different document\n\t * or was created from a different implementation.\n\t * - `NOT_SUPPORTED_ERR`: May be raised if the implementation does not support the feature\n\t * \"XML\" and the language exposed through the Document does not support XML Namespaces (such\n\t * as {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#HTML40 HTML 4.01}).\n\t * @since DOM Level 2.\n\t * @see {@link #createHTMLDocument}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument DOM Living Standard\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocument DOM\n\t * Level 3 Core\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM\n\t * Level 2 Core (initial)\n\t */\n\tcreateDocument: function (namespaceURI, qualifiedName, doctype) {\n\t\tvar contentType = MIME_TYPE.XML_APPLICATION;\n\t\tif (namespaceURI === NAMESPACE.HTML) {\n\t\t\tcontentType = MIME_TYPE.XML_XHTML_APPLICATION;\n\t\t} else if (namespaceURI === NAMESPACE.SVG) {\n\t\t\tcontentType = MIME_TYPE.XML_SVG_IMAGE;\n\t\t}\n\t\tvar doc = new Document(PDC, { contentType: contentType });\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype || null;\n\t\tif (doctype) {\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif (qualifiedName) {\n\t\t\tvar root = doc.createElementNS(namespaceURI, qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t/**\n\t * Creates an empty DocumentType node. Entity declarations and notations are not made\n\t * available. Entity reference expansions and default attribute additions do not occur.\n\t *\n\t * **This behavior is slightly different from the one in the specs**:\n\t * - `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t * - `publicId` and `systemId` contain the raw data including any possible quotes,\n\t * so they can always be serialized back to the original value\n\t * - `internalSubset` contains the raw string between `[` and `]` if present,\n\t * but is not parsed or validated in any form.\n\t *\n\t * @function DOMImplementation#createDocumentType\n\t * @param {string} qualifiedName\n\t * The {@link https://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-qualifiedname qualified\n\t * name} of the document type to be created.\n\t * @param {string} [publicId]\n\t * The external subset public identifier.\n\t * @param {string} [systemId]\n\t * The external subset system identifier.\n\t * @param {string} [internalSubset]\n\t * the internal subset or an empty string if it is not present\n\t * @returns {DocumentType}\n\t * A new {@link DocumentType} node with {@link Node#ownerDocument} set to null.\n\t * @throws {DOMException}\n\t * With code:\n\t *\n\t * - `INVALID_CHARACTER_ERR`: Raised if the specified qualified name is not an XML name\n\t * according to {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#XML XML 1.0}.\n\t * - `NAMESPACE_ERR`: Raised if the qualifiedName is malformed.\n\t * - `NOT_SUPPORTED_ERR`: May be raised if the implementation does not support the feature\n\t * \"XML\" and the language exposed through the Document does not support XML Namespaces (such\n\t * as {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#HTML40 HTML 4.01}).\n\t * @since DOM Level 2.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType\n\t * MDN\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living\n\t * Standard\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-3-Core-DOM-createDocType DOM\n\t * Level 3 Core\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM\n\t * Level 2 Core\n\t * @see https://github.com/xmldom/xmldom/blob/master/CHANGELOG.md#050\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/#core-ID-Core-DocType-internalSubset\n\t * @prettierignore\n\t */\n\tcreateDocumentType: function (qualifiedName, publicId, systemId, internalSubset) {\n\t\tvalidateQualifiedName(qualifiedName);\n\t\tvar node = new DocumentType(PDC);\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId || '';\n\t\tnode.systemId = systemId || '';\n\t\tnode.internalSubset = internalSubset || '';\n\t\tnode.childNodes = new NodeList();\n\n\t\treturn node;\n\t},\n\t/**\n\t * Returns an HTML document, that might already have a basic DOM structure.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - If the first argument is `false` no initial nodes are added (steps 3-7 in the specs are\n\t * omitted)\n\t * - `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t *\n\t * @param {string | false} [title]\n\t * A string containing the title to give the new HTML document.\n\t * @returns {Document}\n\t * The HTML document.\n\t * @since WHATWG Living Standard.\n\t * @see {@link #createDocument}\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument\n\t * @see https://dom.spec.whatwg.org/#html-document\n\t */\n\tcreateHTMLDocument: function (title) {\n\t\tvar doc = new Document(PDC, { contentType: MIME_TYPE.HTML });\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tif (title !== false) {\n\t\t\tdoc.doctype = this.createDocumentType('html');\n\t\t\tdoc.doctype.ownerDocument = doc;\n\t\t\tdoc.appendChild(doc.doctype);\n\t\t\tvar htmlNode = doc.createElement('html');\n\t\t\tdoc.appendChild(htmlNode);\n\t\t\tvar headNode = doc.createElement('head');\n\t\t\thtmlNode.appendChild(headNode);\n\t\t\tif (typeof title === 'string') {\n\t\t\t\tvar titleNode = doc.createElement('title');\n\t\t\t\ttitleNode.appendChild(doc.createTextNode(title));\n\t\t\t\theadNode.appendChild(titleNode);\n\t\t\t}\n\t\t\thtmlNode.appendChild(doc.createElement('body'));\n\t\t}\n\t\treturn doc;\n\t},\n};\n\n/**\n * The DOM Node interface is an abstract base class upon which many other DOM API objects are\n * based, thus letting those object types to be used similarly and often interchangeably. As an\n * abstract class, there is no such thing as a plain Node object. All objects that implement\n * Node functionality are based on one of its subclasses. Most notable are Document, Element,\n * and DocumentFragment.\n *\n * In addition, every kind of DOM node is represented by an interface based on Node. These\n * include Attr, CharacterData (which Text, Comment, CDATASection and ProcessingInstruction are\n * all based on), and DocumentType.\n *\n * In some cases, a particular feature of the base Node interface may not apply to one of its\n * child interfaces; in that case, the inheriting node may return null or throw an exception,\n * depending on circumstances. For example, attempting to add children to a node type that\n * cannot have children will throw an exception.\n *\n * **This behavior is slightly different from the in the specs**:\n * - unimplemented interfaces: `EventTarget`\n *\n * @class\n * @abstract\n * @param {Symbol} symbol\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n * @see https://dom.spec.whatwg.org/#node\n * @prettierignore\n */\nfunction Node(symbol) {\n\tcheckSymbol(symbol);\n}\n\nNode.prototype = {\n\t/**\n\t * The first child of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tfirstChild: null,\n\t/**\n\t * The last child of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tlastChild: null,\n\t/**\n\t * The previous sibling of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tpreviousSibling: null,\n\t/**\n\t * The next sibling of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tnextSibling: null,\n\t/**\n\t * The parent node of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tparentNode: null,\n\t/**\n\t * The parent element of this node.\n\t *\n\t * @type {Element | null}\n\t */\n\tget parentElement() {\n\t\treturn this.parentNode && this.parentNode.nodeType === this.ELEMENT_NODE ? this.parentNode : null;\n\t},\n\t/**\n\t * The child nodes of this node.\n\t *\n\t * @type {NodeList}\n\t */\n\tchildNodes: null,\n\t/**\n\t * The document object associated with this node.\n\t *\n\t * @type {Document | null}\n\t */\n\townerDocument: null,\n\t/**\n\t * The value of this node.\n\t *\n\t * @type {string | null}\n\t */\n\tnodeValue: null,\n\t/**\n\t * The namespace URI of this node.\n\t *\n\t * @type {string | null}\n\t */\n\tnamespaceURI: null,\n\t/**\n\t * The prefix of the namespace for this node.\n\t *\n\t * @type {string | null}\n\t */\n\tprefix: null,\n\t/**\n\t * The local part of the qualified name of this node.\n\t *\n\t * @type {string | null}\n\t */\n\tlocalName: null,\n\t/**\n\t * The baseURI is currently always `about:blank`,\n\t * since that's what happens when you create a document from scratch.\n\t *\n\t * @type {'about:blank'}\n\t */\n\tbaseURI: 'about:blank',\n\t/**\n\t * Is true if this node is part of a document.\n\t *\n\t * @type {boolean}\n\t */\n\tget isConnected() {\n\t\tvar rootNode = this.getRootNode();\n\t\treturn rootNode && rootNode.nodeType === rootNode.DOCUMENT_NODE;\n\t},\n\t/**\n\t * Checks whether `other` is an inclusive descendant of this node.\n\t *\n\t * @param {Node | null | undefined} other\n\t * The node to check.\n\t * @returns {boolean}\n\t * True if `other` is an inclusive descendant of this node; false otherwise.\n\t * @see https://dom.spec.whatwg.org/#dom-node-contains\n\t */\n\tcontains: function (other) {\n\t\tif (!other) return false;\n\t\tvar parent = other;\n\t\tdo {\n\t\t\tif (this === parent) return true;\n\t\t\tparent = other.parentNode;\n\t\t} while (parent);\n\t\treturn false;\n\t},\n\t/**\n\t * @typedef GetRootNodeOptions\n\t * @property {boolean} [composed=false]\n\t */\n\t/**\n\t * Searches for the root node of this node.\n\t *\n\t * **This behavior is slightly different from the in the specs**:\n\t * - ignores `options.composed`, since `ShadowRoot`s are unsupported, always returns root.\n\t *\n\t * @param {GetRootNodeOptions} [options]\n\t * @returns {Node}\n\t * Root node.\n\t * @see https://dom.spec.whatwg.org/#dom-node-getrootnode\n\t * @see https://dom.spec.whatwg.org/#concept-shadow-including-root\n\t */\n\tgetRootNode: function (options) {\n\t\tvar parent = this;\n\t\tdo {\n\t\t\tif (!parent.parentNode) {\n\t\t\t\treturn parent;\n\t\t\t}\n\t\t\tparent = parent.parentNode;\n\t\t} while (parent);\n\t},\n\t/**\n\t * Checks whether the given node is equal to this node.\n\t *\n\t * @param {Node} [otherNode]\n\t * @see https://dom.spec.whatwg.org/#concept-node-equals\n\t */\n\tisEqualNode: function (otherNode) {\n\t\tif (!otherNode) return false;\n\n\t\tif (this.nodeType !== otherNode.nodeType) return false;\n\n\t\tswitch (this.nodeType) {\n\t\t\tcase this.DOCUMENT_TYPE_NODE:\n\t\t\t\tif (this.name !== otherNode.name) return false;\n\t\t\t\tif (this.publicId !== otherNode.publicId) return false;\n\t\t\t\tif (this.systemId !== otherNode.systemId) return false;\n\t\t\t\tbreak;\n\t\t\tcase this.ELEMENT_NODE:\n\t\t\t\tif (this.namespaceURI !== otherNode.namespaceURI) return false;\n\t\t\t\tif (this.prefix !== otherNode.prefix) return false;\n\t\t\t\tif (this.localName !== otherNode.localName) return false;\n\t\t\t\tif (this.attributes.length !== otherNode.attributes.length) return false;\n\t\t\t\tfor (var i = 0; i < this.attributes.length; i++) {\n\t\t\t\t\tvar attr = this.attributes.item(i);\n\t\t\t\t\tif (!attr.isEqualNode(otherNode.getAttributeNodeNS(attr.namespaceURI, attr.localName))) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase this.ATTRIBUTE_NODE:\n\t\t\t\tif (this.namespaceURI !== otherNode.namespaceURI) return false;\n\t\t\t\tif (this.localName !== otherNode.localName) return false;\n\t\t\t\tif (this.value !== otherNode.value) return false;\n\n\t\t\t\tbreak;\n\t\t\tcase this.PROCESSING_INSTRUCTION_NODE:\n\t\t\t\tif (this.target !== otherNode.target || this.data !== otherNode.data) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase this.TEXT_NODE:\n\t\t\tcase this.COMMENT_NODE:\n\t\t\t\tif (this.data !== otherNode.data) return false;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (this.childNodes.length !== otherNode.childNodes.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (var i = 0; i < this.childNodes.length; i++) {\n\t\t\tif (!this.childNodes[i].isEqualNode(otherNode.childNodes[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t},\n\t/**\n\t * Checks whether or not the given node is this node.\n\t *\n\t * @param {Node} [otherNode]\n\t */\n\tisSameNode: function (otherNode) {\n\t\treturn this === otherNode;\n\t},\n\t/**\n\t * Inserts a node before a reference node as a child of this node.\n\t *\n\t * @param {Node} newChild\n\t * The new child node to be inserted.\n\t * @param {Node | null} refChild\n\t * The reference node before which newChild will be inserted.\n\t * @returns {Node}\n\t * The new child node successfully inserted.\n\t * @throws {DOMException}\n\t * Throws a DOMException if inserting the node would result in a DOM tree that is not\n\t * well-formed, or if `child` is provided but is not a child of `parent`.\n\t * See {@link _insertBefore} for more details.\n\t * @since Modified in DOM L2\n\t */\n\tinsertBefore: function (newChild, refChild) {\n\t\treturn _insertBefore(this, newChild, refChild);\n\t},\n\t/**\n\t * Replaces an old child node with a new child node within this node.\n\t *\n\t * @param {Node} newChild\n\t * The new node that is to replace the old node.\n\t * If it already exists in the DOM, it is removed from its original position.\n\t * @param {Node} oldChild\n\t * The existing child node to be replaced.\n\t * @returns {Node}\n\t * Returns the replaced child node.\n\t * @throws {DOMException}\n\t * Throws a DOMException if replacing the node would result in a DOM tree that is not\n\t * well-formed, or if `oldChild` is not a child of `this`.\n\t * This can also occur if the pre-replacement validity assertion fails.\n\t * See {@link _insertBefore}, {@link Node.removeChild}, and\n\t * {@link assertPreReplacementValidityInDocument} for more details.\n\t * @see https://dom.spec.whatwg.org/#concept-node-replace\n\t */\n\treplaceChild: function (newChild, oldChild) {\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\t/**\n\t * Removes an existing child node from this node.\n\t *\n\t * @param {Node} oldChild\n\t * The child node to be removed.\n\t * @returns {Node}\n\t * Returns the removed child node.\n\t * @throws {DOMException}\n\t * Throws a DOMException if `oldChild` is not a child of `this`.\n\t * See {@link _removeChild} for more details.\n\t */\n\tremoveChild: function (oldChild) {\n\t\treturn _removeChild(this, oldChild);\n\t},\n\t/**\n\t * Appends a child node to this node.\n\t *\n\t * @param {Node} newChild\n\t * The child node to be appended to this node.\n\t * If it already exists in the DOM, it is removed from its original position.\n\t * @returns {Node}\n\t * Returns the appended child node.\n\t * @throws {DOMException}\n\t * Throws a DOMException if appending the node would result in a DOM tree that is not\n\t * well-formed, or if `newChild` is not a valid Node.\n\t * See {@link insertBefore} for more details.\n\t */\n\tappendChild: function (newChild) {\n\t\treturn this.insertBefore(newChild, null);\n\t},\n\t/**\n\t * Determines whether this node has any child nodes.\n\t *\n\t * @returns {boolean}\n\t * Returns true if this node has any child nodes, and false otherwise.\n\t */\n\thasChildNodes: function () {\n\t\treturn this.firstChild != null;\n\t},\n\t/**\n\t * Creates a copy of the calling node.\n\t *\n\t * @param {boolean} deep\n\t * If true, the contents of the node are recursively copied.\n\t * If false, only the node itself (and its attributes, if it is an element) are copied.\n\t * @returns {Node}\n\t * Returns the newly created copy of the node.\n\t * @throws {DOMException}\n\t * May throw a DOMException if operations within {@link Element#setAttributeNode} or\n\t * {@link Node#appendChild} (which are potentially invoked in this method) do not meet their\n\t * specific constraints.\n\t * @see {@link cloneNode}\n\t */\n\tcloneNode: function (deep) {\n\t\treturn cloneNode(this.ownerDocument || this, this, deep);\n\t},\n\t/**\n\t * Puts the specified node and all of its subtree into a \"normalized\" form. In a normalized\n\t * subtree, no text nodes in the subtree are empty and there are no adjacent text nodes.\n\t *\n\t * Specifically, this method merges any adjacent text nodes (i.e., nodes for which `nodeType`\n\t * is `TEXT_NODE`) into a single node with the combined data. It also removes any empty text\n\t * nodes.\n\t *\n\t * This method operates recursively, so it also normalizes any and all descendent nodes within\n\t * the subtree.\n\t *\n\t * @throws {DOMException}\n\t * May throw a DOMException if operations within removeChild or appendData (which are\n\t * potentially invoked in this method) do not meet their specific constraints.\n\t * @since Modified in DOM Level 2\n\t * @see {@link Node.removeChild}\n\t * @see {@link CharacterData.appendData}\n\t */\n\tnormalize: function () {\n\t\tvar child = this.firstChild;\n\t\twhile (child) {\n\t\t\tvar next = child.nextSibling;\n\t\t\tif (next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE) {\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t} else {\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Checks whether the DOM implementation implements a specific feature and its version.\n\t *\n\t * @deprecated\n\t * Since `DOMImplementation.hasFeature` is deprecated and always returns true.\n\t * @param {string} feature\n\t * The package name of the feature to test. This is the same name that can be passed to the\n\t * method `hasFeature` on `DOMImplementation`.\n\t * @param {string} version\n\t * This is the version number of the package name to test.\n\t * @returns {boolean}\n\t * Returns true in all cases in the current implementation.\n\t * @since Introduced in DOM Level 2\n\t * @see {@link DOMImplementation.hasFeature}\n\t */\n\tisSupported: function (feature, version) {\n\t\treturn this.ownerDocument.implementation.hasFeature(feature, version);\n\t},\n\t/**\n\t * Look up the prefix associated to the given namespace URI, starting from this node.\n\t * **The default namespace declarations are ignored by this method.**\n\t * See Namespace Prefix Lookup for details on the algorithm used by this method.\n\t *\n\t * **This behavior is different from the in the specs**:\n\t * - no node type specific handling\n\t * - uses the internal attribute _nsMap for resolving namespaces that is updated when changing attributes\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI for which to find the associated prefix.\n\t * @returns {string | null}\n\t * The associated prefix, if found; otherwise, null.\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix\n\t * @see https://github.com/xmldom/xmldom/issues/322\n\t * @prettierignore\n\t */\n\tlookupPrefix: function (namespaceURI) {\n\t\tvar el = this;\n\t\twhile (el) {\n\t\t\tvar map = el._nsMap;\n\t\t\t//console.dir(map)\n\t\t\tif (map) {\n\t\t\t\tfor (var n in map) {\n\t\t\t\t\tif (hasOwn(map, n) && map[n] === namespaceURI) {\n\t\t\t\t\t\treturn n;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tel = el.nodeType == ATTRIBUTE_NODE ? el.ownerDocument : el.parentNode;\n\t\t}\n\t\treturn null;\n\t},\n\t/**\n\t * This function is used to look up the namespace URI associated with the given prefix,\n\t * starting from this node.\n\t *\n\t * **This behavior is different from the in the specs**:\n\t * - no node type specific handling\n\t * - uses the internal attribute _nsMap for resolving namespaces that is updated when changing attributes\n\t *\n\t * @param {string | null} prefix\n\t * The prefix for which to find the associated namespace URI.\n\t * @returns {string | null}\n\t * The associated namespace URI, if found; otherwise, null.\n\t * @since DOM Level 3\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupnamespaceuri\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI\n\t * @prettierignore\n\t */\n\tlookupNamespaceURI: function (prefix) {\n\t\tvar el = this;\n\t\twhile (el) {\n\t\t\tvar map = el._nsMap;\n\t\t\t//console.dir(map)\n\t\t\tif (map) {\n\t\t\t\tif (hasOwn(map, prefix)) {\n\t\t\t\t\treturn map[prefix];\n\t\t\t\t}\n\t\t\t}\n\t\t\tel = el.nodeType == ATTRIBUTE_NODE ? el.ownerDocument : el.parentNode;\n\t\t}\n\t\treturn null;\n\t},\n\t/**\n\t * Determines whether the given namespace URI is the default namespace.\n\t *\n\t * The function works by looking up the prefix associated with the given namespace URI. If no\n\t * prefix is found (i.e., the namespace URI is not registered in the namespace map of this\n\t * node or any of its ancestors), it returns `true`, implying the namespace URI is considered\n\t * the default.\n\t *\n\t * **This behavior is different from the in the specs**:\n\t * - no node type specific handling\n\t * - uses the internal attribute _nsMap for resolving namespaces that is updated when changing attributes\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI to be checked.\n\t * @returns {boolean}\n\t * Returns true if the given namespace URI is the default namespace, false otherwise.\n\t * @since DOM Level 3\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace\n\t * @see https://dom.spec.whatwg.org/#dom-node-isdefaultnamespace\n\t * @prettierignore\n\t */\n\tisDefaultNamespace: function (namespaceURI) {\n\t\tvar prefix = this.lookupPrefix(namespaceURI);\n\t\treturn prefix == null;\n\t},\n\t/**\n\t * Compares the reference node with a node with regard to their position in the document and\n\t * according to the document order.\n\t *\n\t * @param {Node} other\n\t * The node to compare the reference node to.\n\t * @returns {number}\n\t * Returns how the node is positioned relatively to the reference node according to the\n\t * bitmask. 0 if reference node and given node are the same.\n\t * @since DOM Level 3\n\t * @see https://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#Node3-compare\n\t * @see https://dom.spec.whatwg.org/#dom-node-comparedocumentposition\n\t */\n\tcompareDocumentPosition: function (other) {\n\t\tif (this === other) return 0;\n\t\tvar node1 = other;\n\t\tvar node2 = this;\n\t\tvar attr1 = null;\n\t\tvar attr2 = null;\n\t\tif (node1 instanceof Attr) {\n\t\t\tattr1 = node1;\n\t\t\tnode1 = attr1.ownerElement;\n\t\t}\n\t\tif (node2 instanceof Attr) {\n\t\t\tattr2 = node2;\n\t\t\tnode2 = attr2.ownerElement;\n\t\t\tif (attr1 && node1 && node2 === node1) {\n\t\t\t\tfor (var i = 0, attr; (attr = node2.attributes[i]); i++) {\n\t\t\t\t\tif (attr === attr1)\n\t\t\t\t\t\treturn DocumentPosition.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC + DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t\t\t\tif (attr === attr2)\n\t\t\t\t\t\treturn DocumentPosition.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC + DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!node1 || !node2 || node2.ownerDocument !== node1.ownerDocument) {\n\t\t\treturn (\n\t\t\t\tDocumentPosition.DOCUMENT_POSITION_DISCONNECTED +\n\t\t\t\tDocumentPosition.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC +\n\t\t\t\t(docGUID(node2.ownerDocument) > docGUID(node1.ownerDocument)\n\t\t\t\t\t? DocumentPosition.DOCUMENT_POSITION_FOLLOWING\n\t\t\t\t\t: DocumentPosition.DOCUMENT_POSITION_PRECEDING)\n\t\t\t);\n\t\t}\n\t\tvar chain1 = parentChain(node1);\n\t\tvar chain2 = parentChain(node2);\n\t\tif ((!attr1 && chain2.indexOf(node1) >= 0) || (attr2 && node1 === node2)) {\n\t\t\treturn DocumentPosition.DOCUMENT_POSITION_CONTAINS + DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t}\n\t\tif ((!attr2 && chain1.indexOf(node2) >= 0) || (attr1 && node1 === node2)) {\n\t\t\treturn DocumentPosition.DOCUMENT_POSITION_CONTAINED_BY + DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t}\n\t\tvar ca = commonAncestor(chain2, chain1);\n\t\tfor (var n in ca.childNodes) {\n\t\t\tvar child = ca.childNodes[n];\n\t\t\tif (child === node2) return DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t\tif (child === node1) return DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t\tif (chain2.indexOf(child) >= 0) return DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t\tif (chain1.indexOf(child) >= 0) return DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t}\n\t\treturn 0;\n\t},\n};\n\n/**\n * Encodes special XML characters to their corresponding entities.\n *\n * @param {string} c\n * The character to be encoded.\n * @returns {string}\n * The encoded character.\n * @private\n */\nfunction _xmlEncoder(c) {\n\treturn (\n\t\t(c == '<' && '<') || (c == '>' && '>') || (c == '&' && '&') || (c == '\"' && '"') || '&#' + c.charCodeAt() + ';'\n\t);\n}\n\ncopy(NodeType, Node);\ncopy(NodeType, Node.prototype);\ncopy(DocumentPosition, Node);\ncopy(DocumentPosition, Node.prototype);\n\n/**\n * @param callback\n * Return true for continue,false for break.\n * @returns\n * boolean true: break visit;\n */\nfunction _visitNode(node, callback) {\n\tif (callback(node)) {\n\t\treturn true;\n\t}\n\tif ((node = node.firstChild)) {\n\t\tdo {\n\t\t\tif (_visitNode(node, callback)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} while ((node = node.nextSibling));\n\t}\n}\n\n/**\n * @typedef DocumentOptions\n * @property {string} [contentType=MIME_TYPE.XML_APPLICATION]\n */\n/**\n * The Document interface describes the common properties and methods for any kind of document.\n *\n * It should usually be created using `new DOMImplementation().createDocument(...)`\n * or `new DOMImplementation().createHTMLDocument(...)`.\n *\n * The constructor is considered a private API and offers to initially set the `contentType`\n * property via it's options parameter.\n *\n * @class\n * @param {Symbol} symbol\n * @param {DocumentOptions} [options]\n * @augments Node\n * @private\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document\n * @see https://dom.spec.whatwg.org/#interface-document\n */\nfunction Document(symbol, options) {\n\tcheckSymbol(symbol);\n\n\tvar opt = options || {};\n\tthis.ownerDocument = this;\n\t/**\n\t * The mime type of the document is determined at creation time and can not be modified.\n\t *\n\t * @type {string}\n\t * @see https://dom.spec.whatwg.org/#concept-document-content-type\n\t * @see {@link DOMImplementation}\n\t * @see {@link MIME_TYPE}\n\t * @readonly\n\t */\n\tthis.contentType = opt.contentType || MIME_TYPE.XML_APPLICATION;\n\t/**\n\t * @type {'html' | 'xml'}\n\t * @see https://dom.spec.whatwg.org/#concept-document-type\n\t * @see {@link DOMImplementation}\n\t * @readonly\n\t */\n\tthis.type = isHTMLMimeType(this.contentType) ? 'html' : 'xml';\n}\n\n/**\n * Updates the namespace mapping of an element when a new attribute is added.\n *\n * @param {Document} doc\n * The document that the element belongs to.\n * @param {Element} el\n * The element to which the attribute is being added.\n * @param {Attr} newAttr\n * The new attribute being added.\n * @private\n */\nfunction _onAddAttribute(doc, el, newAttr) {\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI;\n\tif (ns === NAMESPACE.XMLNS) {\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix ? newAttr.localName : ''] = newAttr.value;\n\t}\n}\n\n/**\n * Updates the namespace mapping of an element when an attribute is removed.\n *\n * @param {Document} doc\n * The document that the element belongs to.\n * @param {Element} el\n * The element from which the attribute is being removed.\n * @param {Attr} newAttr\n * The attribute being removed.\n * @param {boolean} remove\n * Indicates whether the attribute is to be removed.\n * @private\n */\nfunction _onRemoveAttribute(doc, el, newAttr, remove) {\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI;\n\tif (ns === NAMESPACE.XMLNS) {\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix ? newAttr.localName : ''];\n\t}\n}\n\n/**\n * Updates `parent.childNodes`, adjusting the indexed items and its `length`.\n * If `newChild` is provided and has no nextSibling, it will be appended.\n * Otherwise, it's assumed that an item has been removed or inserted,\n * and `parent.firstNode` and its `.nextSibling` to re-indexing all child nodes of `parent`.\n *\n * @param {Document} doc\n * The parent document of `el`.\n * @param {Node} parent\n * The parent node whose childNodes list needs to be updated.\n * @param {Node} [newChild]\n * The new child node to be appended. If not provided, the function assumes a node has been\n * removed.\n * @private\n */\nfunction _onUpdateChild(doc, parent, newChild) {\n\tif (doc && doc._inc) {\n\t\tdoc._inc++;\n\t\tvar childNodes = parent.childNodes;\n\t\t// assumes nextSibling and previousSibling were already configured upfront\n\t\tif (newChild && !newChild.nextSibling) {\n\t\t\t// if an item has been appended, we only need to update the last index and the length\n\t\t\tchildNodes[childNodes.length++] = newChild;\n\t\t} else {\n\t\t\t// otherwise we need to reindex all items,\n\t\t\t// which can take a while when processing nodes with a lot of children\n\t\t\tvar child = parent.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile (child) {\n\t\t\t\tchildNodes[i++] = child;\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\tchildNodes.length = i;\n\t\t\tdelete childNodes[childNodes.length];\n\t\t}\n\t}\n}\n\n/**\n * Removes the connections between `parentNode` and `child`\n * and any existing `child.previousSibling` or `child.nextSibling`.\n *\n * @param {Node} parentNode\n * The parent node from which the child node is to be removed.\n * @param {Node} child\n * The child node to be removed from the parentNode.\n * @returns {Node}\n * Returns the child node that was removed.\n * @throws {DOMException}\n * With code:\n * - {@link DOMException.NOT_FOUND_ERR} If the parentNode is not the parent of the child node.\n * @private\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n */\nfunction _removeChild(parentNode, child) {\n\tif (parentNode !== child.parentNode) {\n\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, \"child's parent is not parent\");\n\t}\n\tvar oldPreviousSibling = child.previousSibling;\n\tvar oldNextSibling = child.nextSibling;\n\tif (oldPreviousSibling) {\n\t\toldPreviousSibling.nextSibling = oldNextSibling;\n\t} else {\n\t\tparentNode.firstChild = oldNextSibling;\n\t}\n\tif (oldNextSibling) {\n\t\toldNextSibling.previousSibling = oldPreviousSibling;\n\t} else {\n\t\tparentNode.lastChild = oldPreviousSibling;\n\t}\n\t_onUpdateChild(parentNode.ownerDocument, parentNode);\n\tchild.parentNode = null;\n\tchild.previousSibling = null;\n\tchild.nextSibling = null;\n\treturn child;\n}\n\n/**\n * Returns `true` if `node` can be a parent for insertion.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasValidParentNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE)\n\t);\n}\n\n/**\n * Returns `true` if `node` can be inserted according to it's `nodeType`.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasInsertableNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.CDATA_SECTION_NODE ||\n\t\t\tnode.nodeType === Node.COMMENT_NODE ||\n\t\t\tnode.nodeType === Node.DOCUMENT_FRAGMENT_NODE ||\n\t\t\tnode.nodeType === Node.DOCUMENT_TYPE_NODE ||\n\t\t\tnode.nodeType === Node.ELEMENT_NODE ||\n\t\t\tnode.nodeType === Node.PROCESSING_INSTRUCTION_NODE ||\n\t\t\tnode.nodeType === Node.TEXT_NODE)\n\t);\n}\n\n/**\n * Returns true if `node` is a DOCTYPE node.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isDocTypeNode(node) {\n\treturn node && node.nodeType === Node.DOCUMENT_TYPE_NODE;\n}\n\n/**\n * Returns true if the node is an element.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isElementNode(node) {\n\treturn node && node.nodeType === Node.ELEMENT_NODE;\n}\n/**\n * Returns true if `node` is a text node.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isTextNode(node) {\n\treturn node && node.nodeType === Node.TEXT_NODE;\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Document} doc\n * The document node.\n * @param {Node} child\n * The node that would become the nextSibling if the element would be inserted.\n * @returns {boolean}\n * `true` if an element can be inserted before child.\n * @private\n */\nfunction isElementInsertionPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\tif (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Node} doc\n * The document node.\n * @param {Node} child\n * The node that would become the nextSibling if the element would be inserted.\n * @returns {boolean}\n * `true` if an element can be inserted before child.\n * @private\n */\nfunction isElementReplacementPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\n\tfunction hasElementChildThatIsNotChild(node) {\n\t\treturn isElementNode(node) && node !== child;\n\t}\n\n\tif (find(parentChildNodes, hasElementChildThatIsNotChild)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Asserts pre-insertion validity of a node into a parent before a child.\n * Throws errors for invalid node combinations that would result in an ill-formed DOM.\n *\n * @param {Node} parent\n * The parent node to insert `node` into.\n * @param {Node} node\n * The node to insert.\n * @param {Node | null} child\n * The node that should become the `nextSibling` of `node`. If null, no sibling is considered.\n * @throws {DOMException}\n * With code:\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `parent` is not a Document,\n * DocumentFragment, or Element node.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a host-including inclusive\n * ancestor of `parent`. (Currently not implemented)\n * - {@link DOMException.NOT_FOUND_ERR} If `child` is non-null and its `parent` is not\n * `parent`.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is not a DocumentFragment,\n * DocumentType, Element, or CharacterData node.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If either `node` is a Text node and `parent` is\n * a document, or if `node` is a doctype and `parent` is not a document.\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidity1to5(parent, node, child) {\n\t// 1. If `parent` is not a Document, DocumentFragment, or Element node, then throw a \"HierarchyRequestError\" DOMException.\n\tif (!hasValidParentNodeType(parent)) {\n\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Unexpected parent node type ' + parent.nodeType);\n\t}\n\t// 2. If `node` is a host-including inclusive ancestor of `parent`, then throw a \"HierarchyRequestError\" DOMException.\n\t// not implemented!\n\t// 3. If `child` is non-null and its parent is not `parent`, then throw a \"NotFoundError\" DOMException.\n\tif (child && child.parentNode !== parent) {\n\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, 'child not in parent');\n\t}\n\tif (\n\t\t// 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a \"HierarchyRequestError\" DOMException.\n\t\t!hasInsertableNodeType(node) ||\n\t\t// 5. If either `node` is a Text node and `parent` is a document,\n\t\t// the sax parser currently adds top level text nodes, this will be fixed in 0.9.0\n\t\t// || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)\n\t\t// or `node` is a doctype and `parent` is not a document, then throw a \"HierarchyRequestError\" DOMException.\n\t\t(isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE)\n\t) {\n\t\tthrow new DOMException(\n\t\t\tDOMException.HIERARCHY_REQUEST_ERR,\n\t\t\t'Unexpected node type ' + node.nodeType + ' for parent node type ' + parent.nodeType\n\t\t);\n\t}\n}\n\n/**\n * Asserts pre-insertion validity of a node into a document before a child.\n * Throws errors for invalid node combinations that would result in an ill-formed DOM.\n *\n * @param {Document} parent\n * The parent node to insert `node` into.\n * @param {Node} node\n * The node to insert.\n * @param {Node | undefined} child\n * The node that should become the `nextSibling` of `node`. If undefined, no sibling is\n * considered.\n * @returns {Node}\n * @throws {DOMException}\n * With code:\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a DocumentFragment with more than\n * one element child or has a Text node child.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a DocumentFragment with one\n * element child and either `parent` has an element child, `child` is a doctype, or `child` is\n * non-null and a doctype is following `child`.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is an Element and `parent` has an\n * element child, `child` is a doctype, or `child` is non-null and a doctype is following\n * `child`.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a DocumentType and `parent` has a\n * doctype child, `child` is non-null and an element is preceding `child`, or `child` is null\n * and `parent` has an element child.\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If node has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child,\n\t\t// `child` is a doctype, or `child` is non-null and a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child, `child` is a doctype,\n\t\t// or `child` is non-null and a doctype is following `child`.\n\t\tif (!isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\t// `parent` has a doctype child,\n\t\tif (find(parentChildNodes, isDocTypeNode)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// `child` is non-null and an element is preceding `child`,\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t\t// or `child` is null and `parent` has an element child.\n\t\tif (!child && parentElementChild) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Doctype can not be appended since element is present');\n\t\t}\n\t}\n}\n\n/**\n * @param {Document} parent\n * The parent node to insert `node` into.\n * @param {Node} node\n * The node to insert.\n * @param {Node | undefined} child\n * the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws {DOMException}\n * For several node combinations that would create a DOM that is not well-formed.\n * @throws {DOMException}\n * If `child` is provided but is not a child of `parent`.\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreReplacementValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If `node` has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (!isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\tfunction hasDoctypeChildThatIsNotChild(node) {\n\t\t\treturn isDocTypeNode(node) && node !== child;\n\t\t}\n\n\t\t// `parent` has a doctype child that is not `child`,\n\t\tif (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// or an element is preceding `child`.\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t}\n}\n\n/**\n * Inserts a node into a parent node before a child node.\n *\n * @param {Node} parent\n * The parent node to insert the node into.\n * @param {Node} node\n * The node to insert into the parent.\n * @param {Node | null} child\n * The node that should become the next sibling of the node.\n * If null, the function inserts the node at the end of the children of the parent node.\n * @param {Function} [_inDocumentAssertion]\n * An optional function to check pre-insertion validity if parent is a document node.\n * Defaults to {@link assertPreInsertionValidityInDocument}\n * @returns {Node}\n * Returns the inserted node.\n * @throws {DOMException}\n * Throws a DOMException if inserting the node would result in a DOM tree that is not\n * well-formed. See {@link assertPreInsertionValidity1to5},\n * {@link assertPreInsertionValidityInDocument}.\n * @throws {DOMException}\n * Throws a DOMException if child is provided but is not a child of the parent. See\n * {@link Node.removeChild}\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction _insertBefore(parent, node, child, _inDocumentAssertion) {\n\t// To ensure pre-insertion validity of a node into a parent before a child, run these steps:\n\tassertPreInsertionValidity1to5(parent, node, child);\n\n\t// If parent is a document, and any of the statements below, switched on the interface node implements,\n\t// are true, then throw a \"HierarchyRequestError\" DOMException.\n\tif (parent.nodeType === Node.DOCUMENT_NODE) {\n\t\t(_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child);\n\t}\n\n\tvar cp = node.parentNode;\n\tif (cp) {\n\t\tcp.removeChild(node); //remove and update\n\t}\n\tif (node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n\t\tvar newFirst = node.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn node;\n\t\t}\n\t\tvar newLast = node.lastChild;\n\t} else {\n\t\tnewFirst = newLast = node;\n\t}\n\tvar pre = child ? child.previousSibling : parent.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = child;\n\n\tif (pre) {\n\t\tpre.nextSibling = newFirst;\n\t} else {\n\t\tparent.firstChild = newFirst;\n\t}\n\tif (child == null) {\n\t\tparent.lastChild = newLast;\n\t} else {\n\t\tchild.previousSibling = newLast;\n\t}\n\tdo {\n\t\tnewFirst.parentNode = parent;\n\t} while (newFirst !== newLast && (newFirst = newFirst.nextSibling));\n\t_onUpdateChild(parent.ownerDocument || parent, parent, node);\n\tif (node.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnode.firstChild = node.lastChild = null;\n\t}\n\n\treturn node;\n}\n\nDocument.prototype = {\n\t/**\n\t * The implementation that created this document.\n\t *\n\t * @type DOMImplementation\n\t * @readonly\n\t */\n\timplementation: null,\n\tnodeName: '#document',\n\tnodeType: DOCUMENT_NODE,\n\t/**\n\t * The DocumentType node of the document.\n\t *\n\t * @type DocumentType\n\t * @readonly\n\t */\n\tdoctype: null,\n\tdocumentElement: null,\n\t_inc: 1,\n\n\tinsertBefore: function (newChild, refChild) {\n\t\t//raises\n\t\tif (newChild.nodeType === DOCUMENT_FRAGMENT_NODE) {\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile (child) {\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child, refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\t_insertBefore(this, newChild, refChild);\n\t\tnewChild.ownerDocument = this;\n\t\tif (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn newChild;\n\t},\n\tremoveChild: function (oldChild) {\n\t\tvar removed = _removeChild(this, oldChild);\n\t\tif (removed === this.documentElement) {\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn removed;\n\t},\n\treplaceChild: function (newChild, oldChild) {\n\t\t//raises\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\tnewChild.ownerDocument = this;\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t\tif (isElementNode(newChild)) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t},\n\t// Introduced in DOM Level 2:\n\timportNode: function (importedNode, deep) {\n\t\treturn importNode(this, importedNode, deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById: function (id) {\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement, function (node) {\n\t\t\tif (node.nodeType == ELEMENT_NODE) {\n\t\t\t\tif (node.getAttribute('id') == id) {\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn rtv;\n\t},\n\n\t/**\n\t * Creates a new `Element` that is owned by this `Document`.\n\t * In HTML Documents `localName` is the lower cased `tagName`,\n\t * otherwise no transformation is being applied.\n\t * When `contentType` implies the HTML namespace, it will be set as `namespaceURI`.\n\t *\n\t * __This implementation differs from the specification:__ - The provided name is not checked\n\t * against the `Name` production,\n\t * so no related error will be thrown.\n\t * - There is no interface `HTMLElement`, it is always an `Element`.\n\t * - There is no support for a second argument to indicate using custom elements.\n\t *\n\t * @param {string} tagName\n\t * @returns {Element}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement\n\t * @see https://dom.spec.whatwg.org/#dom-document-createelement\n\t * @see https://dom.spec.whatwg.org/#concept-create-element\n\t */\n\tcreateElement: function (tagName) {\n\t\tvar node = new Element(PDC);\n\t\tnode.ownerDocument = this;\n\t\tif (this.type === 'html') {\n\t\t\ttagName = tagName.toLowerCase();\n\t\t}\n\t\tif (hasDefaultHTMLNamespace(this.contentType)) {\n\t\t\tnode.namespaceURI = NAMESPACE.HTML;\n\t\t}\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.localName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs = (node.attributes = new NamedNodeMap());\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t/**\n\t * @returns {DocumentFragment}\n\t */\n\tcreateDocumentFragment: function () {\n\t\tvar node = new DocumentFragment(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\t/**\n\t * @param {string} data\n\t * @returns {Text}\n\t */\n\tcreateTextNode: function (data) {\n\t\tvar node = new Text(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\t/**\n\t * @param {string} data\n\t * @returns {Comment}\n\t */\n\tcreateComment: function (data) {\n\t\tvar node = new Comment(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\t/**\n\t * @param {string} data\n\t * @returns {CDATASection}\n\t */\n\tcreateCDATASection: function (data) {\n\t\tvar node = new CDATASection(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\t/**\n\t * @param {string} target\n\t * @param {string} data\n\t * @returns {ProcessingInstruction}\n\t */\n\tcreateProcessingInstruction: function (target, data) {\n\t\tvar node = new ProcessingInstruction(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.nodeName = node.target = target;\n\t\tnode.nodeValue = node.data = data;\n\t\treturn node;\n\t},\n\t/**\n\t * Creates an `Attr` node that is owned by this document.\n\t * In HTML Documents `localName` is the lower cased `name`,\n\t * otherwise no transformation is being applied.\n\t *\n\t * __This implementation differs from the specification:__ - The provided name is not checked\n\t * against the `Name` production,\n\t * so no related error will be thrown.\n\t *\n\t * @param {string} name\n\t * @returns {Attr}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/createAttribute\n\t * @see https://dom.spec.whatwg.org/#dom-document-createattribute\n\t */\n\tcreateAttribute: function (name) {\n\t\tif (!g.QName_exact.test(name)) {\n\t\t\tthrow new DOMException(DOMException.INVALID_CHARACTER_ERR, 'invalid character in name \"' + name + '\"');\n\t\t}\n\t\tif (this.type === 'html') {\n\t\t\tname = name.toLowerCase();\n\t\t}\n\t\treturn this._createAttribute(name);\n\t},\n\t_createAttribute: function (name) {\n\t\tvar node = new Attr(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.name = name;\n\t\tnode.nodeName = name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\t/**\n\t * Creates an EntityReference object.\n\t * The current implementation does not fill the `childNodes` with those of the corresponding\n\t * `Entity`\n\t *\n\t * @deprecated\n\t * In DOM Level 4.\n\t * @param {string} name\n\t * The name of the entity to reference. No namespace well-formedness checks are performed.\n\t * @returns {EntityReference}\n\t * @throws {DOMException}\n\t * With code `INVALID_CHARACTER_ERR` when `name` is not valid.\n\t * @throws {DOMException}\n\t * with code `NOT_SUPPORTED_ERR` when the document is of type `html`\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-392B75AE\n\t */\n\tcreateEntityReference: function (name) {\n\t\tif (!g.Name.test(name)) {\n\t\t\tthrow new DOMException(DOMException.INVALID_CHARACTER_ERR, 'not a valid xml name \"' + name + '\"');\n\t\t}\n\t\tif (this.type === 'html') {\n\t\t\tthrow new DOMException('document is an html document', DOMExceptionName.NotSupportedError);\n\t\t}\n\n\t\tvar node = new EntityReference(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.nodeName = name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\t/**\n\t * @param {string} namespaceURI\n\t * @param {string} qualifiedName\n\t * @returns {Element}\n\t */\n\tcreateElementNS: function (namespaceURI, qualifiedName) {\n\t\tvar validated = validateAndExtract(namespaceURI, qualifiedName);\n\t\tvar node = new Element(PDC);\n\t\tvar attrs = (node.attributes = new NamedNodeMap());\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = validated[0];\n\t\tnode.prefix = validated[1];\n\t\tnode.localName = validated[2];\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\t/**\n\t * @param {string} namespaceURI\n\t * @param {string} qualifiedName\n\t * @returns {Attr}\n\t */\n\tcreateAttributeNS: function (namespaceURI, qualifiedName) {\n\t\tvar validated = validateAndExtract(namespaceURI, qualifiedName);\n\t\tvar node = new Attr(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.specified = true;\n\t\tnode.namespaceURI = validated[0];\n\t\tnode.prefix = validated[1];\n\t\tnode.localName = validated[2];\n\t\treturn node;\n\t},\n};\n_extends(Document, Node);\n\nfunction Element(symbol) {\n\tcheckSymbol(symbol);\n\n\tthis._nsMap = Object.create(null);\n}\nElement.prototype = {\n\tnodeType: ELEMENT_NODE,\n\t/**\n\t * The attributes of this element.\n\t *\n\t * @type {NamedNodeMap | null}\n\t */\n\tattributes: null,\n\tgetQualifiedName: function () {\n\t\treturn this.prefix ? this.prefix + ':' + this.localName : this.localName;\n\t},\n\t_isInHTMLDocumentAndNamespace: function () {\n\t\treturn this.ownerDocument.type === 'html' && this.namespaceURI === NAMESPACE.HTML;\n\t},\n\thasAttribute: function (name) {\n\t\treturn !!this.getAttributeNode(name);\n\t},\n\t/**\n\t * Returns element’s first attribute whose qualified name is `name`, and `null`\n\t * if there is no such attribute.\n\t *\n\t * @param {string} name\n\t * @returns {string | null}\n\t */\n\tgetAttribute: function (name) {\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr ? attr.value : null;\n\t},\n\tgetAttributeNode: function (name) {\n\t\tif (this._isInHTMLDocumentAndNamespace()) {\n\t\t\tname = name.toLowerCase();\n\t\t}\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\t/**\n\t * Sets the value of element’s first attribute whose qualified name is qualifiedName to value.\n\t *\n\t * @param {string} name\n\t * @param {string} value\n\t */\n\tsetAttribute: function (name, value) {\n\t\tif (this._isInHTMLDocumentAndNamespace()) {\n\t\t\tname = name.toLowerCase();\n\t\t}\n\t\tvar attr = this.getAttributeNode(name);\n\t\tif (attr) {\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t} else {\n\t\t\tattr = this.ownerDocument._createAttribute(name);\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t\tthis.setAttributeNode(attr);\n\t\t}\n\t},\n\tremoveAttribute: function (name) {\n\t\tvar attr = this.getAttributeNode(name);\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\tsetAttributeNode: function (newAttr) {\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS: function (newAttr) {\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode: function (oldAttr) {\n\t\t//console.log(this == oldAttr.ownerElement)\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS: function (namespaceURI, localName) {\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS: function (namespaceURI, localName) {\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName) != null;\n\t},\n\t/**\n\t * Returns element’s attribute whose namespace is `namespaceURI` and local name is\n\t * `localName`,\n\t * or `null` if there is no such attribute.\n\t *\n\t * @param {string} namespaceURI\n\t * @param {string} localName\n\t * @returns {string | null}\n\t */\n\tgetAttributeNS: function (namespaceURI, localName) {\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr ? attr.value : null;\n\t},\n\t/**\n\t * Sets the value of element’s attribute whose namespace is `namespaceURI` and local name is\n\t * `localName` to value.\n\t *\n\t * @param {string} namespaceURI\n\t * @param {string} qualifiedName\n\t * @param {string} value\n\t * @see https://dom.spec.whatwg.org/#dom-element-setattributens\n\t */\n\tsetAttributeNS: function (namespaceURI, qualifiedName, value) {\n\t\tvar validated = validateAndExtract(namespaceURI, qualifiedName);\n\t\tvar localName = validated[2];\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\tif (attr) {\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t} else {\n\t\t\tattr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t\tthis.setAttributeNode(attr);\n\t\t}\n\t},\n\tgetAttributeNodeNS: function (namespaceURI, localName) {\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\t/**\n\t * Returns a LiveNodeList of all child elements which have **all** of the given class name(s).\n\t *\n\t * Returns an empty list if `classNames` is an empty string or only contains HTML white space\n\t * characters.\n\t *\n\t * Warning: This returns a live LiveNodeList.\n\t * Changes in the DOM will reflect in the array as the changes occur.\n\t * If an element selected by this array no longer qualifies for the selector,\n\t * it will automatically be removed. Be aware of this for iteration purposes.\n\t *\n\t * @param {string} classNames\n\t * Is a string representing the class name(s) to match; multiple class names are separated by\n\t * (ASCII-)whitespace.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByClassName\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname\n\t */\n\tgetElementsByClassName: function (classNames) {\n\t\tvar classNamesSet = toOrderedSet(classNames);\n\t\treturn new LiveNodeList(this, function (base) {\n\t\t\tvar ls = [];\n\t\t\tif (classNamesSet.length > 0) {\n\t\t\t\t_visitNode(base, function (node) {\n\t\t\t\t\tif (node !== base && node.nodeType === ELEMENT_NODE) {\n\t\t\t\t\t\tvar nodeClassNames = node.getAttribute('class');\n\t\t\t\t\t\t// can be null if the attribute does not exist\n\t\t\t\t\t\tif (nodeClassNames) {\n\t\t\t\t\t\t\t// before splitting and iterating just compare them for the most common case\n\t\t\t\t\t\t\tvar matches = classNames === nodeClassNames;\n\t\t\t\t\t\t\tif (!matches) {\n\t\t\t\t\t\t\t\tvar nodeClassNamesSet = toOrderedSet(nodeClassNames);\n\t\t\t\t\t\t\t\tmatches = classNamesSet.every(arrayIncludes(nodeClassNamesSet));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matches) {\n\t\t\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn ls;\n\t\t});\n\t},\n\n\t/**\n\t * Returns a LiveNodeList of elements with the given qualifiedName.\n\t * Searching for all descendants can be done by passing `*` as `qualifiedName`.\n\t *\n\t * All descendants of the specified element are searched, but not the element itself.\n\t * The returned list is live, which means it updates itself with the DOM tree automatically.\n\t * Therefore, there is no need to call `Element.getElementsByTagName()`\n\t * with the same element and arguments repeatedly if the DOM changes in between calls.\n\t *\n\t * When called on an HTML element in an HTML document,\n\t * `getElementsByTagName` lower-cases the argument before searching for it.\n\t * This is undesirable when trying to match camel-cased SVG elements (such as\n\t * ``) in an HTML document.\n\t * Instead, use `Element.getElementsByTagNameNS()`,\n\t * which preserves the capitalization of the tag name.\n\t *\n\t * `Element.getElementsByTagName` is similar to `Document.getElementsByTagName()`,\n\t * except that it only searches for elements that are descendants of the specified element.\n\t *\n\t * @param {string} qualifiedName\n\t * @returns {LiveNodeList}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByTagName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbytagname\n\t */\n\tgetElementsByTagName: function (qualifiedName) {\n\t\tvar isHTMLDocument = (this.nodeType === DOCUMENT_NODE ? this : this.ownerDocument).type === 'html';\n\t\tvar lowerQualifiedName = qualifiedName.toLowerCase();\n\t\treturn new LiveNodeList(this, function (base) {\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base, function (node) {\n\t\t\t\tif (node === base || node.nodeType !== ELEMENT_NODE) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (qualifiedName === '*') {\n\t\t\t\t\tls.push(node);\n\t\t\t\t} else {\n\t\t\t\t\tvar nodeQualifiedName = node.getQualifiedName();\n\t\t\t\t\tvar matchingQName = isHTMLDocument && node.namespaceURI === NAMESPACE.HTML ? lowerQualifiedName : qualifiedName;\n\t\t\t\t\tif (nodeQualifiedName === matchingQName) {\n\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS: function (namespaceURI, localName) {\n\t\treturn new LiveNodeList(this, function (base) {\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base, function (node) {\n\t\t\t\tif (\n\t\t\t\t\tnode !== base &&\n\t\t\t\t\tnode.nodeType === ELEMENT_NODE &&\n\t\t\t\t\t(namespaceURI === '*' || node.namespaceURI === namespaceURI) &&\n\t\t\t\t\t(localName === '*' || node.localName == localName)\n\t\t\t\t) {\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n};\nDocument.prototype.getElementsByClassName = Element.prototype.getElementsByClassName;\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n_extends(Element, Node);\nfunction Attr(symbol) {\n\tcheckSymbol(symbol);\n\n\tthis.namespaceURI = null;\n\tthis.prefix = null;\n\tthis.ownerElement = null;\n}\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr, Node);\n\nfunction CharacterData(symbol) {\n\tcheckSymbol(symbol);\n}\nCharacterData.prototype = {\n\tdata: '',\n\tsubstringData: function (offset, count) {\n\t\treturn this.data.substring(offset, offset + count);\n\t},\n\tappendData: function (text) {\n\t\ttext = this.data + text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function (offset, text) {\n\t\tthis.replaceData(offset, 0, text);\n\t},\n\tdeleteData: function (offset, count) {\n\t\tthis.replaceData(offset, count, '');\n\t},\n\treplaceData: function (offset, count, text) {\n\t\tvar start = this.data.substring(0, offset);\n\t\tvar end = this.data.substring(offset + count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n};\n_extends(CharacterData, Node);\nfunction Text(symbol) {\n\tcheckSymbol(symbol);\n}\nText.prototype = {\n\tnodeName: '#text',\n\tnodeType: TEXT_NODE,\n\tsplitText: function (offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif (this.parentNode) {\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t},\n};\n_extends(Text, CharacterData);\nfunction Comment(symbol) {\n\tcheckSymbol(symbol);\n}\nComment.prototype = {\n\tnodeName: '#comment',\n\tnodeType: COMMENT_NODE,\n};\n_extends(Comment, CharacterData);\n\nfunction CDATASection(symbol) {\n\tcheckSymbol(symbol);\n}\nCDATASection.prototype = {\n\tnodeName: '#cdata-section',\n\tnodeType: CDATA_SECTION_NODE,\n};\n_extends(CDATASection, Text);\n\nfunction DocumentType(symbol) {\n\tcheckSymbol(symbol);\n}\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType, Node);\n\nfunction Notation(symbol) {\n\tcheckSymbol(symbol);\n}\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation, Node);\n\nfunction Entity(symbol) {\n\tcheckSymbol(symbol);\n}\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity, Node);\n\nfunction EntityReference(symbol) {\n\tcheckSymbol(symbol);\n}\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference, Node);\n\nfunction DocumentFragment(symbol) {\n\tcheckSymbol(symbol);\n}\nDocumentFragment.prototype.nodeName = '#document-fragment';\nDocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment, Node);\n\nfunction ProcessingInstruction(symbol) {\n\tcheckSymbol(symbol);\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction, CharacterData);\nfunction XMLSerializer() {}\nXMLSerializer.prototype.serializeToString = function (node, nodeFilter) {\n\treturn nodeSerializeToString.call(node, nodeFilter);\n};\nNode.prototype.toString = nodeSerializeToString;\nfunction nodeSerializeToString(nodeFilter) {\n\tvar buf = [];\n\tvar refNode = (this.nodeType === DOCUMENT_NODE && this.documentElement) || this;\n\tvar prefix = refNode.prefix;\n\tvar uri = refNode.namespaceURI;\n\n\tif (uri && prefix == null) {\n\t\tvar prefix = refNode.lookupPrefix(uri);\n\t\tif (prefix == null) {\n\t\t\tvar visibleNamespaces = [\n\t\t\t\t{ namespace: uri, prefix: null },\n\t\t\t\t//{namespace:uri,prefix:''}\n\t\t\t];\n\t\t}\n\t}\n\tserializeToString(this, buf, nodeFilter, visibleNamespaces);\n\treturn buf.join('');\n}\n\nfunction needNamespaceDefine(node, isHTML, visibleNamespaces) {\n\tvar prefix = node.prefix || '';\n\tvar uri = node.namespaceURI;\n\t// According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) ,\n\t// and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl :\n\t// > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty.\n\t// in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using)\n\t// and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared :\n\t// > [...] Furthermore, the attribute value [...] must not be an empty string.\n\t// so serializing empty namespace value like xmlns:ds=\"\" would produce an invalid XML document.\n\tif (!uri) {\n\t\treturn false;\n\t}\n\tif ((prefix === 'xml' && uri === NAMESPACE.XML) || uri === NAMESPACE.XMLNS) {\n\t\treturn false;\n\t}\n\n\tvar i = visibleNamespaces.length;\n\twhile (i--) {\n\t\tvar ns = visibleNamespaces[i];\n\t\t// get namespace prefix\n\t\tif (ns.prefix === prefix) {\n\t\t\treturn ns.namespace !== uri;\n\t\t}\n\t}\n\treturn true;\n}\n/**\n * Literal whitespace other than space that appear in attribute values are serialized as\n * their entity references, so they will be preserved.\n * (In contrast to whitespace literals in the input which are normalized to spaces).\n *\n * Well-formed constraint: No < in Attribute Values:\n * > The replacement text of any entity referred to directly or indirectly\n * > in an attribute value must not contain a <.\n *\n * @see https://www.w3.org/TR/xml11/#CleanAttrVals\n * @see https://www.w3.org/TR/xml11/#NT-AttValue\n * @see https://www.w3.org/TR/xml11/#AVNormalize\n * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes\n * @prettierignore\n */\nfunction addSerializedAttribute(buf, qualifiedName, value) {\n\tbuf.push(' ', qualifiedName, '=\"', value.replace(/[<>&\"\\t\\n\\r]/g, _xmlEncoder), '\"');\n}\n\nfunction serializeToString(node, buf, nodeFilter, visibleNamespaces) {\n\tif (!visibleNamespaces) {\n\t\tvisibleNamespaces = [];\n\t}\n\tvar doc = node.nodeType === DOCUMENT_NODE ? node : node.ownerDocument;\n\tvar isHTML = doc.type === 'html';\n\n\tif (nodeFilter) {\n\t\tnode = nodeFilter(node);\n\t\tif (node) {\n\t\t\tif (typeof node == 'string') {\n\t\t\t\tbuf.push(node);\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t\t//buf.sort.apply(attrs, attributeSorter);\n\t}\n\n\tswitch (node.nodeType) {\n\t\tcase ELEMENT_NODE:\n\t\t\tvar attrs = node.attributes;\n\t\t\tvar len = attrs.length;\n\t\t\tvar child = node.firstChild;\n\t\t\tvar nodeName = node.tagName;\n\n\t\t\tvar prefixedNodeName = nodeName;\n\t\t\tif (!isHTML && !node.prefix && node.namespaceURI) {\n\t\t\t\tvar defaultNS;\n\t\t\t\t// lookup current default ns from `xmlns` attribute\n\t\t\t\tfor (var ai = 0; ai < attrs.length; ai++) {\n\t\t\t\t\tif (attrs.item(ai).name === 'xmlns') {\n\t\t\t\t\t\tdefaultNS = attrs.item(ai).value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!defaultNS) {\n\t\t\t\t\t// lookup current default ns in visibleNamespaces\n\t\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\t\tvar namespace = visibleNamespaces[nsi];\n\t\t\t\t\t\tif (namespace.prefix === '' && namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\t\tdefaultNS = namespace.namespace;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (defaultNS !== node.namespaceURI) {\n\t\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\t\tvar namespace = visibleNamespaces[nsi];\n\t\t\t\t\t\tif (namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\t\tif (namespace.prefix) {\n\t\t\t\t\t\t\t\tprefixedNodeName = namespace.prefix + ':' + nodeName;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbuf.push('<', prefixedNodeName);\n\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\t// add namespaces for attributes\n\t\t\t\tvar attr = attrs.item(i);\n\t\t\t\tif (attr.prefix == 'xmlns') {\n\t\t\t\t\tvisibleNamespaces.push({\n\t\t\t\t\t\tprefix: attr.localName,\n\t\t\t\t\t\tnamespace: attr.value,\n\t\t\t\t\t});\n\t\t\t\t} else if (attr.nodeName == 'xmlns') {\n\t\t\t\t\tvisibleNamespaces.push({ prefix: '', namespace: attr.value });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\tvar attr = attrs.item(i);\n\t\t\t\tif (needNamespaceDefine(attr, isHTML, visibleNamespaces)) {\n\t\t\t\t\tvar prefix = attr.prefix || '';\n\t\t\t\t\tvar uri = attr.namespaceURI;\n\t\t\t\t\taddSerializedAttribute(buf, prefix ? 'xmlns:' + prefix : 'xmlns', uri);\n\t\t\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace: uri });\n\t\t\t\t}\n\t\t\t\tserializeToString(attr, buf, nodeFilter, visibleNamespaces);\n\t\t\t}\n\n\t\t\t// add namespace for current node\n\t\t\tif (nodeName === prefixedNodeName && needNamespaceDefine(node, isHTML, visibleNamespaces)) {\n\t\t\t\tvar prefix = node.prefix || '';\n\t\t\t\tvar uri = node.namespaceURI;\n\t\t\t\taddSerializedAttribute(buf, prefix ? 'xmlns:' + prefix : 'xmlns', uri);\n\t\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace: uri });\n\t\t\t}\n\t\t\t// in XML elements can be closed when they have no children\n\t\t\tvar canCloseTag = !child;\n\t\t\tif (canCloseTag && (isHTML || node.namespaceURI === NAMESPACE.HTML)) {\n\t\t\t\t// in HTML (doc or ns) only void elements can be closed right away\n\t\t\t\tcanCloseTag = isHTMLVoidElement(nodeName);\n\t\t\t}\n\t\t\tif (canCloseTag) {\n\t\t\t\tbuf.push('/>');\n\t\t\t} else {\n\t\t\t\tbuf.push('>');\n\t\t\t\t//if is cdata child node\n\t\t\t\tif (isHTML && isHTMLRawTextElement(nodeName)) {\n\t\t\t\t\twhile (child) {\n\t\t\t\t\t\tif (child.data) {\n\t\t\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tserializeToString(child, buf, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\twhile (child) {\n\t\t\t\t\t\tserializeToString(child, buf, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbuf.push('');\n\t\t\t}\n\t\t\t// remove added visible namespaces\n\t\t\t//visibleNamespaces.length = startVisibleNamespaces;\n\t\t\treturn;\n\t\tcase DOCUMENT_NODE:\n\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\tvar child = node.firstChild;\n\t\t\twhile (child) {\n\t\t\t\tserializeToString(child, buf, nodeFilter, visibleNamespaces.slice());\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\treturn;\n\t\tcase ATTRIBUTE_NODE:\n\t\t\treturn addSerializedAttribute(buf, node.name, node.value);\n\t\tcase TEXT_NODE:\n\t\t\t/*\n\t\t\t * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form,\n\t\t\t * except when used as markup delimiters, or within a comment, a processing instruction,\n\t\t\t * or a CDATA section.\n\t\t\t * If they are needed elsewhere, they must be escaped using either numeric character\n\t\t\t * references or the strings `&` and `<` respectively.\n\t\t\t * The right angle bracket (>) may be represented using the string \" > \",\n\t\t\t * and must, for compatibility, be escaped using either `>`,\n\t\t\t * or a character reference when it appears in the string `]]>` in content,\n\t\t\t * when that string is not marking the end of a CDATA section.\n\t\t\t *\n\t\t\t * In the content of elements, character data is any string of characters which does not\n\t\t\t * contain the start-delimiter of any markup and does not include the CDATA-section-close\n\t\t\t * delimiter, `]]>`.\n\t\t\t *\n\t\t\t * @see https://www.w3.org/TR/xml/#NT-CharData\n\t\t\t * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node\n\t\t\t */\n\t\t\treturn buf.push(node.data.replace(/[<&>]/g, _xmlEncoder));\n\t\tcase CDATA_SECTION_NODE:\n\t\t\treturn buf.push(g.CDATA_START, node.data, g.CDATA_END);\n\t\tcase COMMENT_NODE:\n\t\t\treturn buf.push(g.COMMENT_START, node.data, g.COMMENT_END);\n\t\tcase DOCUMENT_TYPE_NODE:\n\t\t\tvar pubid = node.publicId;\n\t\t\tvar sysid = node.systemId;\n\t\t\tbuf.push(g.DOCTYPE_DECL_START, ' ', node.name);\n\t\t\tif (pubid) {\n\t\t\t\tbuf.push(' ', g.PUBLIC, ' ', pubid);\n\t\t\t\tif (sysid && sysid !== '.') {\n\t\t\t\t\tbuf.push(' ', sysid);\n\t\t\t\t}\n\t\t\t} else if (sysid && sysid !== '.') {\n\t\t\t\tbuf.push(' ', g.SYSTEM, ' ', sysid);\n\t\t\t}\n\t\t\tif (node.internalSubset) {\n\t\t\t\tbuf.push(' [', node.internalSubset, ']');\n\t\t\t}\n\t\t\tbuf.push('>');\n\t\t\treturn;\n\t\tcase PROCESSING_INSTRUCTION_NODE:\n\t\t\treturn buf.push('');\n\t\tcase ENTITY_REFERENCE_NODE:\n\t\t\treturn buf.push('&', node.nodeName, ';');\n\t\t//case ENTITY_NODE:\n\t\t//case NOTATION_NODE:\n\t\tdefault:\n\t\t\tbuf.push('??', node.nodeName);\n\t}\n}\nfunction importNode(doc, node, deep) {\n\tvar node2;\n\tswitch (node.nodeType) {\n\t\tcase ELEMENT_NODE:\n\t\t\tnode2 = node.cloneNode(false);\n\t\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i',\n\tlt: '<',\n\tquot: '\"',\n});\n\n/**\n * A map of all entities that are detected in an HTML document.\n * They contain all entries from `XML_ENTITIES`.\n *\n * @see {@link XML_ENTITIES}\n * @see {@link DOMParser.parseFromString}\n * @see {@link DOMImplementation.prototype.createHTMLDocument}\n * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5)\n * Spec\n * @see https://html.spec.whatwg.org/entities.json JSON\n * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names\n * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML\n * Wikipedia (HTML)\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML\n * Wikpedia (XHTML)\n */\nexports.HTML_ENTITIES = freeze({\n\tAacute: '\\u00C1',\n\taacute: '\\u00E1',\n\tAbreve: '\\u0102',\n\tabreve: '\\u0103',\n\tac: '\\u223E',\n\tacd: '\\u223F',\n\tacE: '\\u223E\\u0333',\n\tAcirc: '\\u00C2',\n\tacirc: '\\u00E2',\n\tacute: '\\u00B4',\n\tAcy: '\\u0410',\n\tacy: '\\u0430',\n\tAElig: '\\u00C6',\n\taelig: '\\u00E6',\n\taf: '\\u2061',\n\tAfr: '\\uD835\\uDD04',\n\tafr: '\\uD835\\uDD1E',\n\tAgrave: '\\u00C0',\n\tagrave: '\\u00E0',\n\talefsym: '\\u2135',\n\taleph: '\\u2135',\n\tAlpha: '\\u0391',\n\talpha: '\\u03B1',\n\tAmacr: '\\u0100',\n\tamacr: '\\u0101',\n\tamalg: '\\u2A3F',\n\tAMP: '\\u0026',\n\tamp: '\\u0026',\n\tAnd: '\\u2A53',\n\tand: '\\u2227',\n\tandand: '\\u2A55',\n\tandd: '\\u2A5C',\n\tandslope: '\\u2A58',\n\tandv: '\\u2A5A',\n\tang: '\\u2220',\n\tange: '\\u29A4',\n\tangle: '\\u2220',\n\tangmsd: '\\u2221',\n\tangmsdaa: '\\u29A8',\n\tangmsdab: '\\u29A9',\n\tangmsdac: '\\u29AA',\n\tangmsdad: '\\u29AB',\n\tangmsdae: '\\u29AC',\n\tangmsdaf: '\\u29AD',\n\tangmsdag: '\\u29AE',\n\tangmsdah: '\\u29AF',\n\tangrt: '\\u221F',\n\tangrtvb: '\\u22BE',\n\tangrtvbd: '\\u299D',\n\tangsph: '\\u2222',\n\tangst: '\\u00C5',\n\tangzarr: '\\u237C',\n\tAogon: '\\u0104',\n\taogon: '\\u0105',\n\tAopf: '\\uD835\\uDD38',\n\taopf: '\\uD835\\uDD52',\n\tap: '\\u2248',\n\tapacir: '\\u2A6F',\n\tapE: '\\u2A70',\n\tape: '\\u224A',\n\tapid: '\\u224B',\n\tapos: '\\u0027',\n\tApplyFunction: '\\u2061',\n\tapprox: '\\u2248',\n\tapproxeq: '\\u224A',\n\tAring: '\\u00C5',\n\taring: '\\u00E5',\n\tAscr: '\\uD835\\uDC9C',\n\tascr: '\\uD835\\uDCB6',\n\tAssign: '\\u2254',\n\tast: '\\u002A',\n\tasymp: '\\u2248',\n\tasympeq: '\\u224D',\n\tAtilde: '\\u00C3',\n\tatilde: '\\u00E3',\n\tAuml: '\\u00C4',\n\tauml: '\\u00E4',\n\tawconint: '\\u2233',\n\tawint: '\\u2A11',\n\tbackcong: '\\u224C',\n\tbackepsilon: '\\u03F6',\n\tbackprime: '\\u2035',\n\tbacksim: '\\u223D',\n\tbacksimeq: '\\u22CD',\n\tBackslash: '\\u2216',\n\tBarv: '\\u2AE7',\n\tbarvee: '\\u22BD',\n\tBarwed: '\\u2306',\n\tbarwed: '\\u2305',\n\tbarwedge: '\\u2305',\n\tbbrk: '\\u23B5',\n\tbbrktbrk: '\\u23B6',\n\tbcong: '\\u224C',\n\tBcy: '\\u0411',\n\tbcy: '\\u0431',\n\tbdquo: '\\u201E',\n\tbecaus: '\\u2235',\n\tBecause: '\\u2235',\n\tbecause: '\\u2235',\n\tbemptyv: '\\u29B0',\n\tbepsi: '\\u03F6',\n\tbernou: '\\u212C',\n\tBernoullis: '\\u212C',\n\tBeta: '\\u0392',\n\tbeta: '\\u03B2',\n\tbeth: '\\u2136',\n\tbetween: '\\u226C',\n\tBfr: '\\uD835\\uDD05',\n\tbfr: '\\uD835\\uDD1F',\n\tbigcap: '\\u22C2',\n\tbigcirc: '\\u25EF',\n\tbigcup: '\\u22C3',\n\tbigodot: '\\u2A00',\n\tbigoplus: '\\u2A01',\n\tbigotimes: '\\u2A02',\n\tbigsqcup: '\\u2A06',\n\tbigstar: '\\u2605',\n\tbigtriangledown: '\\u25BD',\n\tbigtriangleup: '\\u25B3',\n\tbiguplus: '\\u2A04',\n\tbigvee: '\\u22C1',\n\tbigwedge: '\\u22C0',\n\tbkarow: '\\u290D',\n\tblacklozenge: '\\u29EB',\n\tblacksquare: '\\u25AA',\n\tblacktriangle: '\\u25B4',\n\tblacktriangledown: '\\u25BE',\n\tblacktriangleleft: '\\u25C2',\n\tblacktriangleright: '\\u25B8',\n\tblank: '\\u2423',\n\tblk12: '\\u2592',\n\tblk14: '\\u2591',\n\tblk34: '\\u2593',\n\tblock: '\\u2588',\n\tbne: '\\u003D\\u20E5',\n\tbnequiv: '\\u2261\\u20E5',\n\tbNot: '\\u2AED',\n\tbnot: '\\u2310',\n\tBopf: '\\uD835\\uDD39',\n\tbopf: '\\uD835\\uDD53',\n\tbot: '\\u22A5',\n\tbottom: '\\u22A5',\n\tbowtie: '\\u22C8',\n\tboxbox: '\\u29C9',\n\tboxDL: '\\u2557',\n\tboxDl: '\\u2556',\n\tboxdL: '\\u2555',\n\tboxdl: '\\u2510',\n\tboxDR: '\\u2554',\n\tboxDr: '\\u2553',\n\tboxdR: '\\u2552',\n\tboxdr: '\\u250C',\n\tboxH: '\\u2550',\n\tboxh: '\\u2500',\n\tboxHD: '\\u2566',\n\tboxHd: '\\u2564',\n\tboxhD: '\\u2565',\n\tboxhd: '\\u252C',\n\tboxHU: '\\u2569',\n\tboxHu: '\\u2567',\n\tboxhU: '\\u2568',\n\tboxhu: '\\u2534',\n\tboxminus: '\\u229F',\n\tboxplus: '\\u229E',\n\tboxtimes: '\\u22A0',\n\tboxUL: '\\u255D',\n\tboxUl: '\\u255C',\n\tboxuL: '\\u255B',\n\tboxul: '\\u2518',\n\tboxUR: '\\u255A',\n\tboxUr: '\\u2559',\n\tboxuR: '\\u2558',\n\tboxur: '\\u2514',\n\tboxV: '\\u2551',\n\tboxv: '\\u2502',\n\tboxVH: '\\u256C',\n\tboxVh: '\\u256B',\n\tboxvH: '\\u256A',\n\tboxvh: '\\u253C',\n\tboxVL: '\\u2563',\n\tboxVl: '\\u2562',\n\tboxvL: '\\u2561',\n\tboxvl: '\\u2524',\n\tboxVR: '\\u2560',\n\tboxVr: '\\u255F',\n\tboxvR: '\\u255E',\n\tboxvr: '\\u251C',\n\tbprime: '\\u2035',\n\tBreve: '\\u02D8',\n\tbreve: '\\u02D8',\n\tbrvbar: '\\u00A6',\n\tBscr: '\\u212C',\n\tbscr: '\\uD835\\uDCB7',\n\tbsemi: '\\u204F',\n\tbsim: '\\u223D',\n\tbsime: '\\u22CD',\n\tbsol: '\\u005C',\n\tbsolb: '\\u29C5',\n\tbsolhsub: '\\u27C8',\n\tbull: '\\u2022',\n\tbullet: '\\u2022',\n\tbump: '\\u224E',\n\tbumpE: '\\u2AAE',\n\tbumpe: '\\u224F',\n\tBumpeq: '\\u224E',\n\tbumpeq: '\\u224F',\n\tCacute: '\\u0106',\n\tcacute: '\\u0107',\n\tCap: '\\u22D2',\n\tcap: '\\u2229',\n\tcapand: '\\u2A44',\n\tcapbrcup: '\\u2A49',\n\tcapcap: '\\u2A4B',\n\tcapcup: '\\u2A47',\n\tcapdot: '\\u2A40',\n\tCapitalDifferentialD: '\\u2145',\n\tcaps: '\\u2229\\uFE00',\n\tcaret: '\\u2041',\n\tcaron: '\\u02C7',\n\tCayleys: '\\u212D',\n\tccaps: '\\u2A4D',\n\tCcaron: '\\u010C',\n\tccaron: '\\u010D',\n\tCcedil: '\\u00C7',\n\tccedil: '\\u00E7',\n\tCcirc: '\\u0108',\n\tccirc: '\\u0109',\n\tCconint: '\\u2230',\n\tccups: '\\u2A4C',\n\tccupssm: '\\u2A50',\n\tCdot: '\\u010A',\n\tcdot: '\\u010B',\n\tcedil: '\\u00B8',\n\tCedilla: '\\u00B8',\n\tcemptyv: '\\u29B2',\n\tcent: '\\u00A2',\n\tCenterDot: '\\u00B7',\n\tcenterdot: '\\u00B7',\n\tCfr: '\\u212D',\n\tcfr: '\\uD835\\uDD20',\n\tCHcy: '\\u0427',\n\tchcy: '\\u0447',\n\tcheck: '\\u2713',\n\tcheckmark: '\\u2713',\n\tChi: '\\u03A7',\n\tchi: '\\u03C7',\n\tcir: '\\u25CB',\n\tcirc: '\\u02C6',\n\tcirceq: '\\u2257',\n\tcirclearrowleft: '\\u21BA',\n\tcirclearrowright: '\\u21BB',\n\tcircledast: '\\u229B',\n\tcircledcirc: '\\u229A',\n\tcircleddash: '\\u229D',\n\tCircleDot: '\\u2299',\n\tcircledR: '\\u00AE',\n\tcircledS: '\\u24C8',\n\tCircleMinus: '\\u2296',\n\tCirclePlus: '\\u2295',\n\tCircleTimes: '\\u2297',\n\tcirE: '\\u29C3',\n\tcire: '\\u2257',\n\tcirfnint: '\\u2A10',\n\tcirmid: '\\u2AEF',\n\tcirscir: '\\u29C2',\n\tClockwiseContourIntegral: '\\u2232',\n\tCloseCurlyDoubleQuote: '\\u201D',\n\tCloseCurlyQuote: '\\u2019',\n\tclubs: '\\u2663',\n\tclubsuit: '\\u2663',\n\tColon: '\\u2237',\n\tcolon: '\\u003A',\n\tColone: '\\u2A74',\n\tcolone: '\\u2254',\n\tcoloneq: '\\u2254',\n\tcomma: '\\u002C',\n\tcommat: '\\u0040',\n\tcomp: '\\u2201',\n\tcompfn: '\\u2218',\n\tcomplement: '\\u2201',\n\tcomplexes: '\\u2102',\n\tcong: '\\u2245',\n\tcongdot: '\\u2A6D',\n\tCongruent: '\\u2261',\n\tConint: '\\u222F',\n\tconint: '\\u222E',\n\tContourIntegral: '\\u222E',\n\tCopf: '\\u2102',\n\tcopf: '\\uD835\\uDD54',\n\tcoprod: '\\u2210',\n\tCoproduct: '\\u2210',\n\tCOPY: '\\u00A9',\n\tcopy: '\\u00A9',\n\tcopysr: '\\u2117',\n\tCounterClockwiseContourIntegral: '\\u2233',\n\tcrarr: '\\u21B5',\n\tCross: '\\u2A2F',\n\tcross: '\\u2717',\n\tCscr: '\\uD835\\uDC9E',\n\tcscr: '\\uD835\\uDCB8',\n\tcsub: '\\u2ACF',\n\tcsube: '\\u2AD1',\n\tcsup: '\\u2AD0',\n\tcsupe: '\\u2AD2',\n\tctdot: '\\u22EF',\n\tcudarrl: '\\u2938',\n\tcudarrr: '\\u2935',\n\tcuepr: '\\u22DE',\n\tcuesc: '\\u22DF',\n\tcularr: '\\u21B6',\n\tcularrp: '\\u293D',\n\tCup: '\\u22D3',\n\tcup: '\\u222A',\n\tcupbrcap: '\\u2A48',\n\tCupCap: '\\u224D',\n\tcupcap: '\\u2A46',\n\tcupcup: '\\u2A4A',\n\tcupdot: '\\u228D',\n\tcupor: '\\u2A45',\n\tcups: '\\u222A\\uFE00',\n\tcurarr: '\\u21B7',\n\tcurarrm: '\\u293C',\n\tcurlyeqprec: '\\u22DE',\n\tcurlyeqsucc: '\\u22DF',\n\tcurlyvee: '\\u22CE',\n\tcurlywedge: '\\u22CF',\n\tcurren: '\\u00A4',\n\tcurvearrowleft: '\\u21B6',\n\tcurvearrowright: '\\u21B7',\n\tcuvee: '\\u22CE',\n\tcuwed: '\\u22CF',\n\tcwconint: '\\u2232',\n\tcwint: '\\u2231',\n\tcylcty: '\\u232D',\n\tDagger: '\\u2021',\n\tdagger: '\\u2020',\n\tdaleth: '\\u2138',\n\tDarr: '\\u21A1',\n\tdArr: '\\u21D3',\n\tdarr: '\\u2193',\n\tdash: '\\u2010',\n\tDashv: '\\u2AE4',\n\tdashv: '\\u22A3',\n\tdbkarow: '\\u290F',\n\tdblac: '\\u02DD',\n\tDcaron: '\\u010E',\n\tdcaron: '\\u010F',\n\tDcy: '\\u0414',\n\tdcy: '\\u0434',\n\tDD: '\\u2145',\n\tdd: '\\u2146',\n\tddagger: '\\u2021',\n\tddarr: '\\u21CA',\n\tDDotrahd: '\\u2911',\n\tddotseq: '\\u2A77',\n\tdeg: '\\u00B0',\n\tDel: '\\u2207',\n\tDelta: '\\u0394',\n\tdelta: '\\u03B4',\n\tdemptyv: '\\u29B1',\n\tdfisht: '\\u297F',\n\tDfr: '\\uD835\\uDD07',\n\tdfr: '\\uD835\\uDD21',\n\tdHar: '\\u2965',\n\tdharl: '\\u21C3',\n\tdharr: '\\u21C2',\n\tDiacriticalAcute: '\\u00B4',\n\tDiacriticalDot: '\\u02D9',\n\tDiacriticalDoubleAcute: '\\u02DD',\n\tDiacriticalGrave: '\\u0060',\n\tDiacriticalTilde: '\\u02DC',\n\tdiam: '\\u22C4',\n\tDiamond: '\\u22C4',\n\tdiamond: '\\u22C4',\n\tdiamondsuit: '\\u2666',\n\tdiams: '\\u2666',\n\tdie: '\\u00A8',\n\tDifferentialD: '\\u2146',\n\tdigamma: '\\u03DD',\n\tdisin: '\\u22F2',\n\tdiv: '\\u00F7',\n\tdivide: '\\u00F7',\n\tdivideontimes: '\\u22C7',\n\tdivonx: '\\u22C7',\n\tDJcy: '\\u0402',\n\tdjcy: '\\u0452',\n\tdlcorn: '\\u231E',\n\tdlcrop: '\\u230D',\n\tdollar: '\\u0024',\n\tDopf: '\\uD835\\uDD3B',\n\tdopf: '\\uD835\\uDD55',\n\tDot: '\\u00A8',\n\tdot: '\\u02D9',\n\tDotDot: '\\u20DC',\n\tdoteq: '\\u2250',\n\tdoteqdot: '\\u2251',\n\tDotEqual: '\\u2250',\n\tdotminus: '\\u2238',\n\tdotplus: '\\u2214',\n\tdotsquare: '\\u22A1',\n\tdoublebarwedge: '\\u2306',\n\tDoubleContourIntegral: '\\u222F',\n\tDoubleDot: '\\u00A8',\n\tDoubleDownArrow: '\\u21D3',\n\tDoubleLeftArrow: '\\u21D0',\n\tDoubleLeftRightArrow: '\\u21D4',\n\tDoubleLeftTee: '\\u2AE4',\n\tDoubleLongLeftArrow: '\\u27F8',\n\tDoubleLongLeftRightArrow: '\\u27FA',\n\tDoubleLongRightArrow: '\\u27F9',\n\tDoubleRightArrow: '\\u21D2',\n\tDoubleRightTee: '\\u22A8',\n\tDoubleUpArrow: '\\u21D1',\n\tDoubleUpDownArrow: '\\u21D5',\n\tDoubleVerticalBar: '\\u2225',\n\tDownArrow: '\\u2193',\n\tDownarrow: '\\u21D3',\n\tdownarrow: '\\u2193',\n\tDownArrowBar: '\\u2913',\n\tDownArrowUpArrow: '\\u21F5',\n\tDownBreve: '\\u0311',\n\tdowndownarrows: '\\u21CA',\n\tdownharpoonleft: '\\u21C3',\n\tdownharpoonright: '\\u21C2',\n\tDownLeftRightVector: '\\u2950',\n\tDownLeftTeeVector: '\\u295E',\n\tDownLeftVector: '\\u21BD',\n\tDownLeftVectorBar: '\\u2956',\n\tDownRightTeeVector: '\\u295F',\n\tDownRightVector: '\\u21C1',\n\tDownRightVectorBar: '\\u2957',\n\tDownTee: '\\u22A4',\n\tDownTeeArrow: '\\u21A7',\n\tdrbkarow: '\\u2910',\n\tdrcorn: '\\u231F',\n\tdrcrop: '\\u230C',\n\tDscr: '\\uD835\\uDC9F',\n\tdscr: '\\uD835\\uDCB9',\n\tDScy: '\\u0405',\n\tdscy: '\\u0455',\n\tdsol: '\\u29F6',\n\tDstrok: '\\u0110',\n\tdstrok: '\\u0111',\n\tdtdot: '\\u22F1',\n\tdtri: '\\u25BF',\n\tdtrif: '\\u25BE',\n\tduarr: '\\u21F5',\n\tduhar: '\\u296F',\n\tdwangle: '\\u29A6',\n\tDZcy: '\\u040F',\n\tdzcy: '\\u045F',\n\tdzigrarr: '\\u27FF',\n\tEacute: '\\u00C9',\n\teacute: '\\u00E9',\n\teaster: '\\u2A6E',\n\tEcaron: '\\u011A',\n\tecaron: '\\u011B',\n\tecir: '\\u2256',\n\tEcirc: '\\u00CA',\n\tecirc: '\\u00EA',\n\tecolon: '\\u2255',\n\tEcy: '\\u042D',\n\tecy: '\\u044D',\n\teDDot: '\\u2A77',\n\tEdot: '\\u0116',\n\teDot: '\\u2251',\n\tedot: '\\u0117',\n\tee: '\\u2147',\n\tefDot: '\\u2252',\n\tEfr: '\\uD835\\uDD08',\n\tefr: '\\uD835\\uDD22',\n\teg: '\\u2A9A',\n\tEgrave: '\\u00C8',\n\tegrave: '\\u00E8',\n\tegs: '\\u2A96',\n\tegsdot: '\\u2A98',\n\tel: '\\u2A99',\n\tElement: '\\u2208',\n\telinters: '\\u23E7',\n\tell: '\\u2113',\n\tels: '\\u2A95',\n\telsdot: '\\u2A97',\n\tEmacr: '\\u0112',\n\temacr: '\\u0113',\n\tempty: '\\u2205',\n\temptyset: '\\u2205',\n\tEmptySmallSquare: '\\u25FB',\n\temptyv: '\\u2205',\n\tEmptyVerySmallSquare: '\\u25AB',\n\temsp: '\\u2003',\n\temsp13: '\\u2004',\n\temsp14: '\\u2005',\n\tENG: '\\u014A',\n\teng: '\\u014B',\n\tensp: '\\u2002',\n\tEogon: '\\u0118',\n\teogon: '\\u0119',\n\tEopf: '\\uD835\\uDD3C',\n\teopf: '\\uD835\\uDD56',\n\tepar: '\\u22D5',\n\teparsl: '\\u29E3',\n\teplus: '\\u2A71',\n\tepsi: '\\u03B5',\n\tEpsilon: '\\u0395',\n\tepsilon: '\\u03B5',\n\tepsiv: '\\u03F5',\n\teqcirc: '\\u2256',\n\teqcolon: '\\u2255',\n\teqsim: '\\u2242',\n\teqslantgtr: '\\u2A96',\n\teqslantless: '\\u2A95',\n\tEqual: '\\u2A75',\n\tequals: '\\u003D',\n\tEqualTilde: '\\u2242',\n\tequest: '\\u225F',\n\tEquilibrium: '\\u21CC',\n\tequiv: '\\u2261',\n\tequivDD: '\\u2A78',\n\teqvparsl: '\\u29E5',\n\terarr: '\\u2971',\n\terDot: '\\u2253',\n\tEscr: '\\u2130',\n\tescr: '\\u212F',\n\tesdot: '\\u2250',\n\tEsim: '\\u2A73',\n\tesim: '\\u2242',\n\tEta: '\\u0397',\n\teta: '\\u03B7',\n\tETH: '\\u00D0',\n\teth: '\\u00F0',\n\tEuml: '\\u00CB',\n\teuml: '\\u00EB',\n\teuro: '\\u20AC',\n\texcl: '\\u0021',\n\texist: '\\u2203',\n\tExists: '\\u2203',\n\texpectation: '\\u2130',\n\tExponentialE: '\\u2147',\n\texponentiale: '\\u2147',\n\tfallingdotseq: '\\u2252',\n\tFcy: '\\u0424',\n\tfcy: '\\u0444',\n\tfemale: '\\u2640',\n\tffilig: '\\uFB03',\n\tfflig: '\\uFB00',\n\tffllig: '\\uFB04',\n\tFfr: '\\uD835\\uDD09',\n\tffr: '\\uD835\\uDD23',\n\tfilig: '\\uFB01',\n\tFilledSmallSquare: '\\u25FC',\n\tFilledVerySmallSquare: '\\u25AA',\n\tfjlig: '\\u0066\\u006A',\n\tflat: '\\u266D',\n\tfllig: '\\uFB02',\n\tfltns: '\\u25B1',\n\tfnof: '\\u0192',\n\tFopf: '\\uD835\\uDD3D',\n\tfopf: '\\uD835\\uDD57',\n\tForAll: '\\u2200',\n\tforall: '\\u2200',\n\tfork: '\\u22D4',\n\tforkv: '\\u2AD9',\n\tFouriertrf: '\\u2131',\n\tfpartint: '\\u2A0D',\n\tfrac12: '\\u00BD',\n\tfrac13: '\\u2153',\n\tfrac14: '\\u00BC',\n\tfrac15: '\\u2155',\n\tfrac16: '\\u2159',\n\tfrac18: '\\u215B',\n\tfrac23: '\\u2154',\n\tfrac25: '\\u2156',\n\tfrac34: '\\u00BE',\n\tfrac35: '\\u2157',\n\tfrac38: '\\u215C',\n\tfrac45: '\\u2158',\n\tfrac56: '\\u215A',\n\tfrac58: '\\u215D',\n\tfrac78: '\\u215E',\n\tfrasl: '\\u2044',\n\tfrown: '\\u2322',\n\tFscr: '\\u2131',\n\tfscr: '\\uD835\\uDCBB',\n\tgacute: '\\u01F5',\n\tGamma: '\\u0393',\n\tgamma: '\\u03B3',\n\tGammad: '\\u03DC',\n\tgammad: '\\u03DD',\n\tgap: '\\u2A86',\n\tGbreve: '\\u011E',\n\tgbreve: '\\u011F',\n\tGcedil: '\\u0122',\n\tGcirc: '\\u011C',\n\tgcirc: '\\u011D',\n\tGcy: '\\u0413',\n\tgcy: '\\u0433',\n\tGdot: '\\u0120',\n\tgdot: '\\u0121',\n\tgE: '\\u2267',\n\tge: '\\u2265',\n\tgEl: '\\u2A8C',\n\tgel: '\\u22DB',\n\tgeq: '\\u2265',\n\tgeqq: '\\u2267',\n\tgeqslant: '\\u2A7E',\n\tges: '\\u2A7E',\n\tgescc: '\\u2AA9',\n\tgesdot: '\\u2A80',\n\tgesdoto: '\\u2A82',\n\tgesdotol: '\\u2A84',\n\tgesl: '\\u22DB\\uFE00',\n\tgesles: '\\u2A94',\n\tGfr: '\\uD835\\uDD0A',\n\tgfr: '\\uD835\\uDD24',\n\tGg: '\\u22D9',\n\tgg: '\\u226B',\n\tggg: '\\u22D9',\n\tgimel: '\\u2137',\n\tGJcy: '\\u0403',\n\tgjcy: '\\u0453',\n\tgl: '\\u2277',\n\tgla: '\\u2AA5',\n\tglE: '\\u2A92',\n\tglj: '\\u2AA4',\n\tgnap: '\\u2A8A',\n\tgnapprox: '\\u2A8A',\n\tgnE: '\\u2269',\n\tgne: '\\u2A88',\n\tgneq: '\\u2A88',\n\tgneqq: '\\u2269',\n\tgnsim: '\\u22E7',\n\tGopf: '\\uD835\\uDD3E',\n\tgopf: '\\uD835\\uDD58',\n\tgrave: '\\u0060',\n\tGreaterEqual: '\\u2265',\n\tGreaterEqualLess: '\\u22DB',\n\tGreaterFullEqual: '\\u2267',\n\tGreaterGreater: '\\u2AA2',\n\tGreaterLess: '\\u2277',\n\tGreaterSlantEqual: '\\u2A7E',\n\tGreaterTilde: '\\u2273',\n\tGscr: '\\uD835\\uDCA2',\n\tgscr: '\\u210A',\n\tgsim: '\\u2273',\n\tgsime: '\\u2A8E',\n\tgsiml: '\\u2A90',\n\tGt: '\\u226B',\n\tGT: '\\u003E',\n\tgt: '\\u003E',\n\tgtcc: '\\u2AA7',\n\tgtcir: '\\u2A7A',\n\tgtdot: '\\u22D7',\n\tgtlPar: '\\u2995',\n\tgtquest: '\\u2A7C',\n\tgtrapprox: '\\u2A86',\n\tgtrarr: '\\u2978',\n\tgtrdot: '\\u22D7',\n\tgtreqless: '\\u22DB',\n\tgtreqqless: '\\u2A8C',\n\tgtrless: '\\u2277',\n\tgtrsim: '\\u2273',\n\tgvertneqq: '\\u2269\\uFE00',\n\tgvnE: '\\u2269\\uFE00',\n\tHacek: '\\u02C7',\n\thairsp: '\\u200A',\n\thalf: '\\u00BD',\n\thamilt: '\\u210B',\n\tHARDcy: '\\u042A',\n\thardcy: '\\u044A',\n\thArr: '\\u21D4',\n\tharr: '\\u2194',\n\tharrcir: '\\u2948',\n\tharrw: '\\u21AD',\n\tHat: '\\u005E',\n\thbar: '\\u210F',\n\tHcirc: '\\u0124',\n\thcirc: '\\u0125',\n\thearts: '\\u2665',\n\theartsuit: '\\u2665',\n\thellip: '\\u2026',\n\thercon: '\\u22B9',\n\tHfr: '\\u210C',\n\thfr: '\\uD835\\uDD25',\n\tHilbertSpace: '\\u210B',\n\thksearow: '\\u2925',\n\thkswarow: '\\u2926',\n\thoarr: '\\u21FF',\n\thomtht: '\\u223B',\n\thookleftarrow: '\\u21A9',\n\thookrightarrow: '\\u21AA',\n\tHopf: '\\u210D',\n\thopf: '\\uD835\\uDD59',\n\thorbar: '\\u2015',\n\tHorizontalLine: '\\u2500',\n\tHscr: '\\u210B',\n\thscr: '\\uD835\\uDCBD',\n\thslash: '\\u210F',\n\tHstrok: '\\u0126',\n\thstrok: '\\u0127',\n\tHumpDownHump: '\\u224E',\n\tHumpEqual: '\\u224F',\n\thybull: '\\u2043',\n\thyphen: '\\u2010',\n\tIacute: '\\u00CD',\n\tiacute: '\\u00ED',\n\tic: '\\u2063',\n\tIcirc: '\\u00CE',\n\ticirc: '\\u00EE',\n\tIcy: '\\u0418',\n\ticy: '\\u0438',\n\tIdot: '\\u0130',\n\tIEcy: '\\u0415',\n\tiecy: '\\u0435',\n\tiexcl: '\\u00A1',\n\tiff: '\\u21D4',\n\tIfr: '\\u2111',\n\tifr: '\\uD835\\uDD26',\n\tIgrave: '\\u00CC',\n\tigrave: '\\u00EC',\n\tii: '\\u2148',\n\tiiiint: '\\u2A0C',\n\tiiint: '\\u222D',\n\tiinfin: '\\u29DC',\n\tiiota: '\\u2129',\n\tIJlig: '\\u0132',\n\tijlig: '\\u0133',\n\tIm: '\\u2111',\n\tImacr: '\\u012A',\n\timacr: '\\u012B',\n\timage: '\\u2111',\n\tImaginaryI: '\\u2148',\n\timagline: '\\u2110',\n\timagpart: '\\u2111',\n\timath: '\\u0131',\n\timof: '\\u22B7',\n\timped: '\\u01B5',\n\tImplies: '\\u21D2',\n\tin: '\\u2208',\n\tincare: '\\u2105',\n\tinfin: '\\u221E',\n\tinfintie: '\\u29DD',\n\tinodot: '\\u0131',\n\tInt: '\\u222C',\n\tint: '\\u222B',\n\tintcal: '\\u22BA',\n\tintegers: '\\u2124',\n\tIntegral: '\\u222B',\n\tintercal: '\\u22BA',\n\tIntersection: '\\u22C2',\n\tintlarhk: '\\u2A17',\n\tintprod: '\\u2A3C',\n\tInvisibleComma: '\\u2063',\n\tInvisibleTimes: '\\u2062',\n\tIOcy: '\\u0401',\n\tiocy: '\\u0451',\n\tIogon: '\\u012E',\n\tiogon: '\\u012F',\n\tIopf: '\\uD835\\uDD40',\n\tiopf: '\\uD835\\uDD5A',\n\tIota: '\\u0399',\n\tiota: '\\u03B9',\n\tiprod: '\\u2A3C',\n\tiquest: '\\u00BF',\n\tIscr: '\\u2110',\n\tiscr: '\\uD835\\uDCBE',\n\tisin: '\\u2208',\n\tisindot: '\\u22F5',\n\tisinE: '\\u22F9',\n\tisins: '\\u22F4',\n\tisinsv: '\\u22F3',\n\tisinv: '\\u2208',\n\tit: '\\u2062',\n\tItilde: '\\u0128',\n\titilde: '\\u0129',\n\tIukcy: '\\u0406',\n\tiukcy: '\\u0456',\n\tIuml: '\\u00CF',\n\tiuml: '\\u00EF',\n\tJcirc: '\\u0134',\n\tjcirc: '\\u0135',\n\tJcy: '\\u0419',\n\tjcy: '\\u0439',\n\tJfr: '\\uD835\\uDD0D',\n\tjfr: '\\uD835\\uDD27',\n\tjmath: '\\u0237',\n\tJopf: '\\uD835\\uDD41',\n\tjopf: '\\uD835\\uDD5B',\n\tJscr: '\\uD835\\uDCA5',\n\tjscr: '\\uD835\\uDCBF',\n\tJsercy: '\\u0408',\n\tjsercy: '\\u0458',\n\tJukcy: '\\u0404',\n\tjukcy: '\\u0454',\n\tKappa: '\\u039A',\n\tkappa: '\\u03BA',\n\tkappav: '\\u03F0',\n\tKcedil: '\\u0136',\n\tkcedil: '\\u0137',\n\tKcy: '\\u041A',\n\tkcy: '\\u043A',\n\tKfr: '\\uD835\\uDD0E',\n\tkfr: '\\uD835\\uDD28',\n\tkgreen: '\\u0138',\n\tKHcy: '\\u0425',\n\tkhcy: '\\u0445',\n\tKJcy: '\\u040C',\n\tkjcy: '\\u045C',\n\tKopf: '\\uD835\\uDD42',\n\tkopf: '\\uD835\\uDD5C',\n\tKscr: '\\uD835\\uDCA6',\n\tkscr: '\\uD835\\uDCC0',\n\tlAarr: '\\u21DA',\n\tLacute: '\\u0139',\n\tlacute: '\\u013A',\n\tlaemptyv: '\\u29B4',\n\tlagran: '\\u2112',\n\tLambda: '\\u039B',\n\tlambda: '\\u03BB',\n\tLang: '\\u27EA',\n\tlang: '\\u27E8',\n\tlangd: '\\u2991',\n\tlangle: '\\u27E8',\n\tlap: '\\u2A85',\n\tLaplacetrf: '\\u2112',\n\tlaquo: '\\u00AB',\n\tLarr: '\\u219E',\n\tlArr: '\\u21D0',\n\tlarr: '\\u2190',\n\tlarrb: '\\u21E4',\n\tlarrbfs: '\\u291F',\n\tlarrfs: '\\u291D',\n\tlarrhk: '\\u21A9',\n\tlarrlp: '\\u21AB',\n\tlarrpl: '\\u2939',\n\tlarrsim: '\\u2973',\n\tlarrtl: '\\u21A2',\n\tlat: '\\u2AAB',\n\tlAtail: '\\u291B',\n\tlatail: '\\u2919',\n\tlate: '\\u2AAD',\n\tlates: '\\u2AAD\\uFE00',\n\tlBarr: '\\u290E',\n\tlbarr: '\\u290C',\n\tlbbrk: '\\u2772',\n\tlbrace: '\\u007B',\n\tlbrack: '\\u005B',\n\tlbrke: '\\u298B',\n\tlbrksld: '\\u298F',\n\tlbrkslu: '\\u298D',\n\tLcaron: '\\u013D',\n\tlcaron: '\\u013E',\n\tLcedil: '\\u013B',\n\tlcedil: '\\u013C',\n\tlceil: '\\u2308',\n\tlcub: '\\u007B',\n\tLcy: '\\u041B',\n\tlcy: '\\u043B',\n\tldca: '\\u2936',\n\tldquo: '\\u201C',\n\tldquor: '\\u201E',\n\tldrdhar: '\\u2967',\n\tldrushar: '\\u294B',\n\tldsh: '\\u21B2',\n\tlE: '\\u2266',\n\tle: '\\u2264',\n\tLeftAngleBracket: '\\u27E8',\n\tLeftArrow: '\\u2190',\n\tLeftarrow: '\\u21D0',\n\tleftarrow: '\\u2190',\n\tLeftArrowBar: '\\u21E4',\n\tLeftArrowRightArrow: '\\u21C6',\n\tleftarrowtail: '\\u21A2',\n\tLeftCeiling: '\\u2308',\n\tLeftDoubleBracket: '\\u27E6',\n\tLeftDownTeeVector: '\\u2961',\n\tLeftDownVector: '\\u21C3',\n\tLeftDownVectorBar: '\\u2959',\n\tLeftFloor: '\\u230A',\n\tleftharpoondown: '\\u21BD',\n\tleftharpoonup: '\\u21BC',\n\tleftleftarrows: '\\u21C7',\n\tLeftRightArrow: '\\u2194',\n\tLeftrightarrow: '\\u21D4',\n\tleftrightarrow: '\\u2194',\n\tleftrightarrows: '\\u21C6',\n\tleftrightharpoons: '\\u21CB',\n\tleftrightsquigarrow: '\\u21AD',\n\tLeftRightVector: '\\u294E',\n\tLeftTee: '\\u22A3',\n\tLeftTeeArrow: '\\u21A4',\n\tLeftTeeVector: '\\u295A',\n\tleftthreetimes: '\\u22CB',\n\tLeftTriangle: '\\u22B2',\n\tLeftTriangleBar: '\\u29CF',\n\tLeftTriangleEqual: '\\u22B4',\n\tLeftUpDownVector: '\\u2951',\n\tLeftUpTeeVector: '\\u2960',\n\tLeftUpVector: '\\u21BF',\n\tLeftUpVectorBar: '\\u2958',\n\tLeftVector: '\\u21BC',\n\tLeftVectorBar: '\\u2952',\n\tlEg: '\\u2A8B',\n\tleg: '\\u22DA',\n\tleq: '\\u2264',\n\tleqq: '\\u2266',\n\tleqslant: '\\u2A7D',\n\tles: '\\u2A7D',\n\tlescc: '\\u2AA8',\n\tlesdot: '\\u2A7F',\n\tlesdoto: '\\u2A81',\n\tlesdotor: '\\u2A83',\n\tlesg: '\\u22DA\\uFE00',\n\tlesges: '\\u2A93',\n\tlessapprox: '\\u2A85',\n\tlessdot: '\\u22D6',\n\tlesseqgtr: '\\u22DA',\n\tlesseqqgtr: '\\u2A8B',\n\tLessEqualGreater: '\\u22DA',\n\tLessFullEqual: '\\u2266',\n\tLessGreater: '\\u2276',\n\tlessgtr: '\\u2276',\n\tLessLess: '\\u2AA1',\n\tlesssim: '\\u2272',\n\tLessSlantEqual: '\\u2A7D',\n\tLessTilde: '\\u2272',\n\tlfisht: '\\u297C',\n\tlfloor: '\\u230A',\n\tLfr: '\\uD835\\uDD0F',\n\tlfr: '\\uD835\\uDD29',\n\tlg: '\\u2276',\n\tlgE: '\\u2A91',\n\tlHar: '\\u2962',\n\tlhard: '\\u21BD',\n\tlharu: '\\u21BC',\n\tlharul: '\\u296A',\n\tlhblk: '\\u2584',\n\tLJcy: '\\u0409',\n\tljcy: '\\u0459',\n\tLl: '\\u22D8',\n\tll: '\\u226A',\n\tllarr: '\\u21C7',\n\tllcorner: '\\u231E',\n\tLleftarrow: '\\u21DA',\n\tllhard: '\\u296B',\n\tlltri: '\\u25FA',\n\tLmidot: '\\u013F',\n\tlmidot: '\\u0140',\n\tlmoust: '\\u23B0',\n\tlmoustache: '\\u23B0',\n\tlnap: '\\u2A89',\n\tlnapprox: '\\u2A89',\n\tlnE: '\\u2268',\n\tlne: '\\u2A87',\n\tlneq: '\\u2A87',\n\tlneqq: '\\u2268',\n\tlnsim: '\\u22E6',\n\tloang: '\\u27EC',\n\tloarr: '\\u21FD',\n\tlobrk: '\\u27E6',\n\tLongLeftArrow: '\\u27F5',\n\tLongleftarrow: '\\u27F8',\n\tlongleftarrow: '\\u27F5',\n\tLongLeftRightArrow: '\\u27F7',\n\tLongleftrightarrow: '\\u27FA',\n\tlongleftrightarrow: '\\u27F7',\n\tlongmapsto: '\\u27FC',\n\tLongRightArrow: '\\u27F6',\n\tLongrightarrow: '\\u27F9',\n\tlongrightarrow: '\\u27F6',\n\tlooparrowleft: '\\u21AB',\n\tlooparrowright: '\\u21AC',\n\tlopar: '\\u2985',\n\tLopf: '\\uD835\\uDD43',\n\tlopf: '\\uD835\\uDD5D',\n\tloplus: '\\u2A2D',\n\tlotimes: '\\u2A34',\n\tlowast: '\\u2217',\n\tlowbar: '\\u005F',\n\tLowerLeftArrow: '\\u2199',\n\tLowerRightArrow: '\\u2198',\n\tloz: '\\u25CA',\n\tlozenge: '\\u25CA',\n\tlozf: '\\u29EB',\n\tlpar: '\\u0028',\n\tlparlt: '\\u2993',\n\tlrarr: '\\u21C6',\n\tlrcorner: '\\u231F',\n\tlrhar: '\\u21CB',\n\tlrhard: '\\u296D',\n\tlrm: '\\u200E',\n\tlrtri: '\\u22BF',\n\tlsaquo: '\\u2039',\n\tLscr: '\\u2112',\n\tlscr: '\\uD835\\uDCC1',\n\tLsh: '\\u21B0',\n\tlsh: '\\u21B0',\n\tlsim: '\\u2272',\n\tlsime: '\\u2A8D',\n\tlsimg: '\\u2A8F',\n\tlsqb: '\\u005B',\n\tlsquo: '\\u2018',\n\tlsquor: '\\u201A',\n\tLstrok: '\\u0141',\n\tlstrok: '\\u0142',\n\tLt: '\\u226A',\n\tLT: '\\u003C',\n\tlt: '\\u003C',\n\tltcc: '\\u2AA6',\n\tltcir: '\\u2A79',\n\tltdot: '\\u22D6',\n\tlthree: '\\u22CB',\n\tltimes: '\\u22C9',\n\tltlarr: '\\u2976',\n\tltquest: '\\u2A7B',\n\tltri: '\\u25C3',\n\tltrie: '\\u22B4',\n\tltrif: '\\u25C2',\n\tltrPar: '\\u2996',\n\tlurdshar: '\\u294A',\n\tluruhar: '\\u2966',\n\tlvertneqq: '\\u2268\\uFE00',\n\tlvnE: '\\u2268\\uFE00',\n\tmacr: '\\u00AF',\n\tmale: '\\u2642',\n\tmalt: '\\u2720',\n\tmaltese: '\\u2720',\n\tMap: '\\u2905',\n\tmap: '\\u21A6',\n\tmapsto: '\\u21A6',\n\tmapstodown: '\\u21A7',\n\tmapstoleft: '\\u21A4',\n\tmapstoup: '\\u21A5',\n\tmarker: '\\u25AE',\n\tmcomma: '\\u2A29',\n\tMcy: '\\u041C',\n\tmcy: '\\u043C',\n\tmdash: '\\u2014',\n\tmDDot: '\\u223A',\n\tmeasuredangle: '\\u2221',\n\tMediumSpace: '\\u205F',\n\tMellintrf: '\\u2133',\n\tMfr: '\\uD835\\uDD10',\n\tmfr: '\\uD835\\uDD2A',\n\tmho: '\\u2127',\n\tmicro: '\\u00B5',\n\tmid: '\\u2223',\n\tmidast: '\\u002A',\n\tmidcir: '\\u2AF0',\n\tmiddot: '\\u00B7',\n\tminus: '\\u2212',\n\tminusb: '\\u229F',\n\tminusd: '\\u2238',\n\tminusdu: '\\u2A2A',\n\tMinusPlus: '\\u2213',\n\tmlcp: '\\u2ADB',\n\tmldr: '\\u2026',\n\tmnplus: '\\u2213',\n\tmodels: '\\u22A7',\n\tMopf: '\\uD835\\uDD44',\n\tmopf: '\\uD835\\uDD5E',\n\tmp: '\\u2213',\n\tMscr: '\\u2133',\n\tmscr: '\\uD835\\uDCC2',\n\tmstpos: '\\u223E',\n\tMu: '\\u039C',\n\tmu: '\\u03BC',\n\tmultimap: '\\u22B8',\n\tmumap: '\\u22B8',\n\tnabla: '\\u2207',\n\tNacute: '\\u0143',\n\tnacute: '\\u0144',\n\tnang: '\\u2220\\u20D2',\n\tnap: '\\u2249',\n\tnapE: '\\u2A70\\u0338',\n\tnapid: '\\u224B\\u0338',\n\tnapos: '\\u0149',\n\tnapprox: '\\u2249',\n\tnatur: '\\u266E',\n\tnatural: '\\u266E',\n\tnaturals: '\\u2115',\n\tnbsp: '\\u00A0',\n\tnbump: '\\u224E\\u0338',\n\tnbumpe: '\\u224F\\u0338',\n\tncap: '\\u2A43',\n\tNcaron: '\\u0147',\n\tncaron: '\\u0148',\n\tNcedil: '\\u0145',\n\tncedil: '\\u0146',\n\tncong: '\\u2247',\n\tncongdot: '\\u2A6D\\u0338',\n\tncup: '\\u2A42',\n\tNcy: '\\u041D',\n\tncy: '\\u043D',\n\tndash: '\\u2013',\n\tne: '\\u2260',\n\tnearhk: '\\u2924',\n\tneArr: '\\u21D7',\n\tnearr: '\\u2197',\n\tnearrow: '\\u2197',\n\tnedot: '\\u2250\\u0338',\n\tNegativeMediumSpace: '\\u200B',\n\tNegativeThickSpace: '\\u200B',\n\tNegativeThinSpace: '\\u200B',\n\tNegativeVeryThinSpace: '\\u200B',\n\tnequiv: '\\u2262',\n\tnesear: '\\u2928',\n\tnesim: '\\u2242\\u0338',\n\tNestedGreaterGreater: '\\u226B',\n\tNestedLessLess: '\\u226A',\n\tNewLine: '\\u000A',\n\tnexist: '\\u2204',\n\tnexists: '\\u2204',\n\tNfr: '\\uD835\\uDD11',\n\tnfr: '\\uD835\\uDD2B',\n\tngE: '\\u2267\\u0338',\n\tnge: '\\u2271',\n\tngeq: '\\u2271',\n\tngeqq: '\\u2267\\u0338',\n\tngeqslant: '\\u2A7E\\u0338',\n\tnges: '\\u2A7E\\u0338',\n\tnGg: '\\u22D9\\u0338',\n\tngsim: '\\u2275',\n\tnGt: '\\u226B\\u20D2',\n\tngt: '\\u226F',\n\tngtr: '\\u226F',\n\tnGtv: '\\u226B\\u0338',\n\tnhArr: '\\u21CE',\n\tnharr: '\\u21AE',\n\tnhpar: '\\u2AF2',\n\tni: '\\u220B',\n\tnis: '\\u22FC',\n\tnisd: '\\u22FA',\n\tniv: '\\u220B',\n\tNJcy: '\\u040A',\n\tnjcy: '\\u045A',\n\tnlArr: '\\u21CD',\n\tnlarr: '\\u219A',\n\tnldr: '\\u2025',\n\tnlE: '\\u2266\\u0338',\n\tnle: '\\u2270',\n\tnLeftarrow: '\\u21CD',\n\tnleftarrow: '\\u219A',\n\tnLeftrightarrow: '\\u21CE',\n\tnleftrightarrow: '\\u21AE',\n\tnleq: '\\u2270',\n\tnleqq: '\\u2266\\u0338',\n\tnleqslant: '\\u2A7D\\u0338',\n\tnles: '\\u2A7D\\u0338',\n\tnless: '\\u226E',\n\tnLl: '\\u22D8\\u0338',\n\tnlsim: '\\u2274',\n\tnLt: '\\u226A\\u20D2',\n\tnlt: '\\u226E',\n\tnltri: '\\u22EA',\n\tnltrie: '\\u22EC',\n\tnLtv: '\\u226A\\u0338',\n\tnmid: '\\u2224',\n\tNoBreak: '\\u2060',\n\tNonBreakingSpace: '\\u00A0',\n\tNopf: '\\u2115',\n\tnopf: '\\uD835\\uDD5F',\n\tNot: '\\u2AEC',\n\tnot: '\\u00AC',\n\tNotCongruent: '\\u2262',\n\tNotCupCap: '\\u226D',\n\tNotDoubleVerticalBar: '\\u2226',\n\tNotElement: '\\u2209',\n\tNotEqual: '\\u2260',\n\tNotEqualTilde: '\\u2242\\u0338',\n\tNotExists: '\\u2204',\n\tNotGreater: '\\u226F',\n\tNotGreaterEqual: '\\u2271',\n\tNotGreaterFullEqual: '\\u2267\\u0338',\n\tNotGreaterGreater: '\\u226B\\u0338',\n\tNotGreaterLess: '\\u2279',\n\tNotGreaterSlantEqual: '\\u2A7E\\u0338',\n\tNotGreaterTilde: '\\u2275',\n\tNotHumpDownHump: '\\u224E\\u0338',\n\tNotHumpEqual: '\\u224F\\u0338',\n\tnotin: '\\u2209',\n\tnotindot: '\\u22F5\\u0338',\n\tnotinE: '\\u22F9\\u0338',\n\tnotinva: '\\u2209',\n\tnotinvb: '\\u22F7',\n\tnotinvc: '\\u22F6',\n\tNotLeftTriangle: '\\u22EA',\n\tNotLeftTriangleBar: '\\u29CF\\u0338',\n\tNotLeftTriangleEqual: '\\u22EC',\n\tNotLess: '\\u226E',\n\tNotLessEqual: '\\u2270',\n\tNotLessGreater: '\\u2278',\n\tNotLessLess: '\\u226A\\u0338',\n\tNotLessSlantEqual: '\\u2A7D\\u0338',\n\tNotLessTilde: '\\u2274',\n\tNotNestedGreaterGreater: '\\u2AA2\\u0338',\n\tNotNestedLessLess: '\\u2AA1\\u0338',\n\tnotni: '\\u220C',\n\tnotniva: '\\u220C',\n\tnotnivb: '\\u22FE',\n\tnotnivc: '\\u22FD',\n\tNotPrecedes: '\\u2280',\n\tNotPrecedesEqual: '\\u2AAF\\u0338',\n\tNotPrecedesSlantEqual: '\\u22E0',\n\tNotReverseElement: '\\u220C',\n\tNotRightTriangle: '\\u22EB',\n\tNotRightTriangleBar: '\\u29D0\\u0338',\n\tNotRightTriangleEqual: '\\u22ED',\n\tNotSquareSubset: '\\u228F\\u0338',\n\tNotSquareSubsetEqual: '\\u22E2',\n\tNotSquareSuperset: '\\u2290\\u0338',\n\tNotSquareSupersetEqual: '\\u22E3',\n\tNotSubset: '\\u2282\\u20D2',\n\tNotSubsetEqual: '\\u2288',\n\tNotSucceeds: '\\u2281',\n\tNotSucceedsEqual: '\\u2AB0\\u0338',\n\tNotSucceedsSlantEqual: '\\u22E1',\n\tNotSucceedsTilde: '\\u227F\\u0338',\n\tNotSuperset: '\\u2283\\u20D2',\n\tNotSupersetEqual: '\\u2289',\n\tNotTilde: '\\u2241',\n\tNotTildeEqual: '\\u2244',\n\tNotTildeFullEqual: '\\u2247',\n\tNotTildeTilde: '\\u2249',\n\tNotVerticalBar: '\\u2224',\n\tnpar: '\\u2226',\n\tnparallel: '\\u2226',\n\tnparsl: '\\u2AFD\\u20E5',\n\tnpart: '\\u2202\\u0338',\n\tnpolint: '\\u2A14',\n\tnpr: '\\u2280',\n\tnprcue: '\\u22E0',\n\tnpre: '\\u2AAF\\u0338',\n\tnprec: '\\u2280',\n\tnpreceq: '\\u2AAF\\u0338',\n\tnrArr: '\\u21CF',\n\tnrarr: '\\u219B',\n\tnrarrc: '\\u2933\\u0338',\n\tnrarrw: '\\u219D\\u0338',\n\tnRightarrow: '\\u21CF',\n\tnrightarrow: '\\u219B',\n\tnrtri: '\\u22EB',\n\tnrtrie: '\\u22ED',\n\tnsc: '\\u2281',\n\tnsccue: '\\u22E1',\n\tnsce: '\\u2AB0\\u0338',\n\tNscr: '\\uD835\\uDCA9',\n\tnscr: '\\uD835\\uDCC3',\n\tnshortmid: '\\u2224',\n\tnshortparallel: '\\u2226',\n\tnsim: '\\u2241',\n\tnsime: '\\u2244',\n\tnsimeq: '\\u2244',\n\tnsmid: '\\u2224',\n\tnspar: '\\u2226',\n\tnsqsube: '\\u22E2',\n\tnsqsupe: '\\u22E3',\n\tnsub: '\\u2284',\n\tnsubE: '\\u2AC5\\u0338',\n\tnsube: '\\u2288',\n\tnsubset: '\\u2282\\u20D2',\n\tnsubseteq: '\\u2288',\n\tnsubseteqq: '\\u2AC5\\u0338',\n\tnsucc: '\\u2281',\n\tnsucceq: '\\u2AB0\\u0338',\n\tnsup: '\\u2285',\n\tnsupE: '\\u2AC6\\u0338',\n\tnsupe: '\\u2289',\n\tnsupset: '\\u2283\\u20D2',\n\tnsupseteq: '\\u2289',\n\tnsupseteqq: '\\u2AC6\\u0338',\n\tntgl: '\\u2279',\n\tNtilde: '\\u00D1',\n\tntilde: '\\u00F1',\n\tntlg: '\\u2278',\n\tntriangleleft: '\\u22EA',\n\tntrianglelefteq: '\\u22EC',\n\tntriangleright: '\\u22EB',\n\tntrianglerighteq: '\\u22ED',\n\tNu: '\\u039D',\n\tnu: '\\u03BD',\n\tnum: '\\u0023',\n\tnumero: '\\u2116',\n\tnumsp: '\\u2007',\n\tnvap: '\\u224D\\u20D2',\n\tnVDash: '\\u22AF',\n\tnVdash: '\\u22AE',\n\tnvDash: '\\u22AD',\n\tnvdash: '\\u22AC',\n\tnvge: '\\u2265\\u20D2',\n\tnvgt: '\\u003E\\u20D2',\n\tnvHarr: '\\u2904',\n\tnvinfin: '\\u29DE',\n\tnvlArr: '\\u2902',\n\tnvle: '\\u2264\\u20D2',\n\tnvlt: '\\u003C\\u20D2',\n\tnvltrie: '\\u22B4\\u20D2',\n\tnvrArr: '\\u2903',\n\tnvrtrie: '\\u22B5\\u20D2',\n\tnvsim: '\\u223C\\u20D2',\n\tnwarhk: '\\u2923',\n\tnwArr: '\\u21D6',\n\tnwarr: '\\u2196',\n\tnwarrow: '\\u2196',\n\tnwnear: '\\u2927',\n\tOacute: '\\u00D3',\n\toacute: '\\u00F3',\n\toast: '\\u229B',\n\tocir: '\\u229A',\n\tOcirc: '\\u00D4',\n\tocirc: '\\u00F4',\n\tOcy: '\\u041E',\n\tocy: '\\u043E',\n\todash: '\\u229D',\n\tOdblac: '\\u0150',\n\todblac: '\\u0151',\n\todiv: '\\u2A38',\n\todot: '\\u2299',\n\todsold: '\\u29BC',\n\tOElig: '\\u0152',\n\toelig: '\\u0153',\n\tofcir: '\\u29BF',\n\tOfr: '\\uD835\\uDD12',\n\tofr: '\\uD835\\uDD2C',\n\togon: '\\u02DB',\n\tOgrave: '\\u00D2',\n\tograve: '\\u00F2',\n\togt: '\\u29C1',\n\tohbar: '\\u29B5',\n\tohm: '\\u03A9',\n\toint: '\\u222E',\n\tolarr: '\\u21BA',\n\tolcir: '\\u29BE',\n\tolcross: '\\u29BB',\n\toline: '\\u203E',\n\tolt: '\\u29C0',\n\tOmacr: '\\u014C',\n\tomacr: '\\u014D',\n\tOmega: '\\u03A9',\n\tomega: '\\u03C9',\n\tOmicron: '\\u039F',\n\tomicron: '\\u03BF',\n\tomid: '\\u29B6',\n\tominus: '\\u2296',\n\tOopf: '\\uD835\\uDD46',\n\toopf: '\\uD835\\uDD60',\n\topar: '\\u29B7',\n\tOpenCurlyDoubleQuote: '\\u201C',\n\tOpenCurlyQuote: '\\u2018',\n\toperp: '\\u29B9',\n\toplus: '\\u2295',\n\tOr: '\\u2A54',\n\tor: '\\u2228',\n\torarr: '\\u21BB',\n\tord: '\\u2A5D',\n\torder: '\\u2134',\n\torderof: '\\u2134',\n\tordf: '\\u00AA',\n\tordm: '\\u00BA',\n\torigof: '\\u22B6',\n\toror: '\\u2A56',\n\torslope: '\\u2A57',\n\torv: '\\u2A5B',\n\toS: '\\u24C8',\n\tOscr: '\\uD835\\uDCAA',\n\toscr: '\\u2134',\n\tOslash: '\\u00D8',\n\toslash: '\\u00F8',\n\tosol: '\\u2298',\n\tOtilde: '\\u00D5',\n\totilde: '\\u00F5',\n\tOtimes: '\\u2A37',\n\totimes: '\\u2297',\n\totimesas: '\\u2A36',\n\tOuml: '\\u00D6',\n\touml: '\\u00F6',\n\tovbar: '\\u233D',\n\tOverBar: '\\u203E',\n\tOverBrace: '\\u23DE',\n\tOverBracket: '\\u23B4',\n\tOverParenthesis: '\\u23DC',\n\tpar: '\\u2225',\n\tpara: '\\u00B6',\n\tparallel: '\\u2225',\n\tparsim: '\\u2AF3',\n\tparsl: '\\u2AFD',\n\tpart: '\\u2202',\n\tPartialD: '\\u2202',\n\tPcy: '\\u041F',\n\tpcy: '\\u043F',\n\tpercnt: '\\u0025',\n\tperiod: '\\u002E',\n\tpermil: '\\u2030',\n\tperp: '\\u22A5',\n\tpertenk: '\\u2031',\n\tPfr: '\\uD835\\uDD13',\n\tpfr: '\\uD835\\uDD2D',\n\tPhi: '\\u03A6',\n\tphi: '\\u03C6',\n\tphiv: '\\u03D5',\n\tphmmat: '\\u2133',\n\tphone: '\\u260E',\n\tPi: '\\u03A0',\n\tpi: '\\u03C0',\n\tpitchfork: '\\u22D4',\n\tpiv: '\\u03D6',\n\tplanck: '\\u210F',\n\tplanckh: '\\u210E',\n\tplankv: '\\u210F',\n\tplus: '\\u002B',\n\tplusacir: '\\u2A23',\n\tplusb: '\\u229E',\n\tpluscir: '\\u2A22',\n\tplusdo: '\\u2214',\n\tplusdu: '\\u2A25',\n\tpluse: '\\u2A72',\n\tPlusMinus: '\\u00B1',\n\tplusmn: '\\u00B1',\n\tplussim: '\\u2A26',\n\tplustwo: '\\u2A27',\n\tpm: '\\u00B1',\n\tPoincareplane: '\\u210C',\n\tpointint: '\\u2A15',\n\tPopf: '\\u2119',\n\tpopf: '\\uD835\\uDD61',\n\tpound: '\\u00A3',\n\tPr: '\\u2ABB',\n\tpr: '\\u227A',\n\tprap: '\\u2AB7',\n\tprcue: '\\u227C',\n\tprE: '\\u2AB3',\n\tpre: '\\u2AAF',\n\tprec: '\\u227A',\n\tprecapprox: '\\u2AB7',\n\tpreccurlyeq: '\\u227C',\n\tPrecedes: '\\u227A',\n\tPrecedesEqual: '\\u2AAF',\n\tPrecedesSlantEqual: '\\u227C',\n\tPrecedesTilde: '\\u227E',\n\tpreceq: '\\u2AAF',\n\tprecnapprox: '\\u2AB9',\n\tprecneqq: '\\u2AB5',\n\tprecnsim: '\\u22E8',\n\tprecsim: '\\u227E',\n\tPrime: '\\u2033',\n\tprime: '\\u2032',\n\tprimes: '\\u2119',\n\tprnap: '\\u2AB9',\n\tprnE: '\\u2AB5',\n\tprnsim: '\\u22E8',\n\tprod: '\\u220F',\n\tProduct: '\\u220F',\n\tprofalar: '\\u232E',\n\tprofline: '\\u2312',\n\tprofsurf: '\\u2313',\n\tprop: '\\u221D',\n\tProportion: '\\u2237',\n\tProportional: '\\u221D',\n\tpropto: '\\u221D',\n\tprsim: '\\u227E',\n\tprurel: '\\u22B0',\n\tPscr: '\\uD835\\uDCAB',\n\tpscr: '\\uD835\\uDCC5',\n\tPsi: '\\u03A8',\n\tpsi: '\\u03C8',\n\tpuncsp: '\\u2008',\n\tQfr: '\\uD835\\uDD14',\n\tqfr: '\\uD835\\uDD2E',\n\tqint: '\\u2A0C',\n\tQopf: '\\u211A',\n\tqopf: '\\uD835\\uDD62',\n\tqprime: '\\u2057',\n\tQscr: '\\uD835\\uDCAC',\n\tqscr: '\\uD835\\uDCC6',\n\tquaternions: '\\u210D',\n\tquatint: '\\u2A16',\n\tquest: '\\u003F',\n\tquesteq: '\\u225F',\n\tQUOT: '\\u0022',\n\tquot: '\\u0022',\n\trAarr: '\\u21DB',\n\trace: '\\u223D\\u0331',\n\tRacute: '\\u0154',\n\tracute: '\\u0155',\n\tradic: '\\u221A',\n\traemptyv: '\\u29B3',\n\tRang: '\\u27EB',\n\trang: '\\u27E9',\n\trangd: '\\u2992',\n\trange: '\\u29A5',\n\trangle: '\\u27E9',\n\traquo: '\\u00BB',\n\tRarr: '\\u21A0',\n\trArr: '\\u21D2',\n\trarr: '\\u2192',\n\trarrap: '\\u2975',\n\trarrb: '\\u21E5',\n\trarrbfs: '\\u2920',\n\trarrc: '\\u2933',\n\trarrfs: '\\u291E',\n\trarrhk: '\\u21AA',\n\trarrlp: '\\u21AC',\n\trarrpl: '\\u2945',\n\trarrsim: '\\u2974',\n\tRarrtl: '\\u2916',\n\trarrtl: '\\u21A3',\n\trarrw: '\\u219D',\n\trAtail: '\\u291C',\n\tratail: '\\u291A',\n\tratio: '\\u2236',\n\trationals: '\\u211A',\n\tRBarr: '\\u2910',\n\trBarr: '\\u290F',\n\trbarr: '\\u290D',\n\trbbrk: '\\u2773',\n\trbrace: '\\u007D',\n\trbrack: '\\u005D',\n\trbrke: '\\u298C',\n\trbrksld: '\\u298E',\n\trbrkslu: '\\u2990',\n\tRcaron: '\\u0158',\n\trcaron: '\\u0159',\n\tRcedil: '\\u0156',\n\trcedil: '\\u0157',\n\trceil: '\\u2309',\n\trcub: '\\u007D',\n\tRcy: '\\u0420',\n\trcy: '\\u0440',\n\trdca: '\\u2937',\n\trdldhar: '\\u2969',\n\trdquo: '\\u201D',\n\trdquor: '\\u201D',\n\trdsh: '\\u21B3',\n\tRe: '\\u211C',\n\treal: '\\u211C',\n\trealine: '\\u211B',\n\trealpart: '\\u211C',\n\treals: '\\u211D',\n\trect: '\\u25AD',\n\tREG: '\\u00AE',\n\treg: '\\u00AE',\n\tReverseElement: '\\u220B',\n\tReverseEquilibrium: '\\u21CB',\n\tReverseUpEquilibrium: '\\u296F',\n\trfisht: '\\u297D',\n\trfloor: '\\u230B',\n\tRfr: '\\u211C',\n\trfr: '\\uD835\\uDD2F',\n\trHar: '\\u2964',\n\trhard: '\\u21C1',\n\trharu: '\\u21C0',\n\trharul: '\\u296C',\n\tRho: '\\u03A1',\n\trho: '\\u03C1',\n\trhov: '\\u03F1',\n\tRightAngleBracket: '\\u27E9',\n\tRightArrow: '\\u2192',\n\tRightarrow: '\\u21D2',\n\trightarrow: '\\u2192',\n\tRightArrowBar: '\\u21E5',\n\tRightArrowLeftArrow: '\\u21C4',\n\trightarrowtail: '\\u21A3',\n\tRightCeiling: '\\u2309',\n\tRightDoubleBracket: '\\u27E7',\n\tRightDownTeeVector: '\\u295D',\n\tRightDownVector: '\\u21C2',\n\tRightDownVectorBar: '\\u2955',\n\tRightFloor: '\\u230B',\n\trightharpoondown: '\\u21C1',\n\trightharpoonup: '\\u21C0',\n\trightleftarrows: '\\u21C4',\n\trightleftharpoons: '\\u21CC',\n\trightrightarrows: '\\u21C9',\n\trightsquigarrow: '\\u219D',\n\tRightTee: '\\u22A2',\n\tRightTeeArrow: '\\u21A6',\n\tRightTeeVector: '\\u295B',\n\trightthreetimes: '\\u22CC',\n\tRightTriangle: '\\u22B3',\n\tRightTriangleBar: '\\u29D0',\n\tRightTriangleEqual: '\\u22B5',\n\tRightUpDownVector: '\\u294F',\n\tRightUpTeeVector: '\\u295C',\n\tRightUpVector: '\\u21BE',\n\tRightUpVectorBar: '\\u2954',\n\tRightVector: '\\u21C0',\n\tRightVectorBar: '\\u2953',\n\tring: '\\u02DA',\n\trisingdotseq: '\\u2253',\n\trlarr: '\\u21C4',\n\trlhar: '\\u21CC',\n\trlm: '\\u200F',\n\trmoust: '\\u23B1',\n\trmoustache: '\\u23B1',\n\trnmid: '\\u2AEE',\n\troang: '\\u27ED',\n\troarr: '\\u21FE',\n\trobrk: '\\u27E7',\n\tropar: '\\u2986',\n\tRopf: '\\u211D',\n\tropf: '\\uD835\\uDD63',\n\troplus: '\\u2A2E',\n\trotimes: '\\u2A35',\n\tRoundImplies: '\\u2970',\n\trpar: '\\u0029',\n\trpargt: '\\u2994',\n\trppolint: '\\u2A12',\n\trrarr: '\\u21C9',\n\tRrightarrow: '\\u21DB',\n\trsaquo: '\\u203A',\n\tRscr: '\\u211B',\n\trscr: '\\uD835\\uDCC7',\n\tRsh: '\\u21B1',\n\trsh: '\\u21B1',\n\trsqb: '\\u005D',\n\trsquo: '\\u2019',\n\trsquor: '\\u2019',\n\trthree: '\\u22CC',\n\trtimes: '\\u22CA',\n\trtri: '\\u25B9',\n\trtrie: '\\u22B5',\n\trtrif: '\\u25B8',\n\trtriltri: '\\u29CE',\n\tRuleDelayed: '\\u29F4',\n\truluhar: '\\u2968',\n\trx: '\\u211E',\n\tSacute: '\\u015A',\n\tsacute: '\\u015B',\n\tsbquo: '\\u201A',\n\tSc: '\\u2ABC',\n\tsc: '\\u227B',\n\tscap: '\\u2AB8',\n\tScaron: '\\u0160',\n\tscaron: '\\u0161',\n\tsccue: '\\u227D',\n\tscE: '\\u2AB4',\n\tsce: '\\u2AB0',\n\tScedil: '\\u015E',\n\tscedil: '\\u015F',\n\tScirc: '\\u015C',\n\tscirc: '\\u015D',\n\tscnap: '\\u2ABA',\n\tscnE: '\\u2AB6',\n\tscnsim: '\\u22E9',\n\tscpolint: '\\u2A13',\n\tscsim: '\\u227F',\n\tScy: '\\u0421',\n\tscy: '\\u0441',\n\tsdot: '\\u22C5',\n\tsdotb: '\\u22A1',\n\tsdote: '\\u2A66',\n\tsearhk: '\\u2925',\n\tseArr: '\\u21D8',\n\tsearr: '\\u2198',\n\tsearrow: '\\u2198',\n\tsect: '\\u00A7',\n\tsemi: '\\u003B',\n\tseswar: '\\u2929',\n\tsetminus: '\\u2216',\n\tsetmn: '\\u2216',\n\tsext: '\\u2736',\n\tSfr: '\\uD835\\uDD16',\n\tsfr: '\\uD835\\uDD30',\n\tsfrown: '\\u2322',\n\tsharp: '\\u266F',\n\tSHCHcy: '\\u0429',\n\tshchcy: '\\u0449',\n\tSHcy: '\\u0428',\n\tshcy: '\\u0448',\n\tShortDownArrow: '\\u2193',\n\tShortLeftArrow: '\\u2190',\n\tshortmid: '\\u2223',\n\tshortparallel: '\\u2225',\n\tShortRightArrow: '\\u2192',\n\tShortUpArrow: '\\u2191',\n\tshy: '\\u00AD',\n\tSigma: '\\u03A3',\n\tsigma: '\\u03C3',\n\tsigmaf: '\\u03C2',\n\tsigmav: '\\u03C2',\n\tsim: '\\u223C',\n\tsimdot: '\\u2A6A',\n\tsime: '\\u2243',\n\tsimeq: '\\u2243',\n\tsimg: '\\u2A9E',\n\tsimgE: '\\u2AA0',\n\tsiml: '\\u2A9D',\n\tsimlE: '\\u2A9F',\n\tsimne: '\\u2246',\n\tsimplus: '\\u2A24',\n\tsimrarr: '\\u2972',\n\tslarr: '\\u2190',\n\tSmallCircle: '\\u2218',\n\tsmallsetminus: '\\u2216',\n\tsmashp: '\\u2A33',\n\tsmeparsl: '\\u29E4',\n\tsmid: '\\u2223',\n\tsmile: '\\u2323',\n\tsmt: '\\u2AAA',\n\tsmte: '\\u2AAC',\n\tsmtes: '\\u2AAC\\uFE00',\n\tSOFTcy: '\\u042C',\n\tsoftcy: '\\u044C',\n\tsol: '\\u002F',\n\tsolb: '\\u29C4',\n\tsolbar: '\\u233F',\n\tSopf: '\\uD835\\uDD4A',\n\tsopf: '\\uD835\\uDD64',\n\tspades: '\\u2660',\n\tspadesuit: '\\u2660',\n\tspar: '\\u2225',\n\tsqcap: '\\u2293',\n\tsqcaps: '\\u2293\\uFE00',\n\tsqcup: '\\u2294',\n\tsqcups: '\\u2294\\uFE00',\n\tSqrt: '\\u221A',\n\tsqsub: '\\u228F',\n\tsqsube: '\\u2291',\n\tsqsubset: '\\u228F',\n\tsqsubseteq: '\\u2291',\n\tsqsup: '\\u2290',\n\tsqsupe: '\\u2292',\n\tsqsupset: '\\u2290',\n\tsqsupseteq: '\\u2292',\n\tsqu: '\\u25A1',\n\tSquare: '\\u25A1',\n\tsquare: '\\u25A1',\n\tSquareIntersection: '\\u2293',\n\tSquareSubset: '\\u228F',\n\tSquareSubsetEqual: '\\u2291',\n\tSquareSuperset: '\\u2290',\n\tSquareSupersetEqual: '\\u2292',\n\tSquareUnion: '\\u2294',\n\tsquarf: '\\u25AA',\n\tsquf: '\\u25AA',\n\tsrarr: '\\u2192',\n\tSscr: '\\uD835\\uDCAE',\n\tsscr: '\\uD835\\uDCC8',\n\tssetmn: '\\u2216',\n\tssmile: '\\u2323',\n\tsstarf: '\\u22C6',\n\tStar: '\\u22C6',\n\tstar: '\\u2606',\n\tstarf: '\\u2605',\n\tstraightepsilon: '\\u03F5',\n\tstraightphi: '\\u03D5',\n\tstrns: '\\u00AF',\n\tSub: '\\u22D0',\n\tsub: '\\u2282',\n\tsubdot: '\\u2ABD',\n\tsubE: '\\u2AC5',\n\tsube: '\\u2286',\n\tsubedot: '\\u2AC3',\n\tsubmult: '\\u2AC1',\n\tsubnE: '\\u2ACB',\n\tsubne: '\\u228A',\n\tsubplus: '\\u2ABF',\n\tsubrarr: '\\u2979',\n\tSubset: '\\u22D0',\n\tsubset: '\\u2282',\n\tsubseteq: '\\u2286',\n\tsubseteqq: '\\u2AC5',\n\tSubsetEqual: '\\u2286',\n\tsubsetneq: '\\u228A',\n\tsubsetneqq: '\\u2ACB',\n\tsubsim: '\\u2AC7',\n\tsubsub: '\\u2AD5',\n\tsubsup: '\\u2AD3',\n\tsucc: '\\u227B',\n\tsuccapprox: '\\u2AB8',\n\tsucccurlyeq: '\\u227D',\n\tSucceeds: '\\u227B',\n\tSucceedsEqual: '\\u2AB0',\n\tSucceedsSlantEqual: '\\u227D',\n\tSucceedsTilde: '\\u227F',\n\tsucceq: '\\u2AB0',\n\tsuccnapprox: '\\u2ABA',\n\tsuccneqq: '\\u2AB6',\n\tsuccnsim: '\\u22E9',\n\tsuccsim: '\\u227F',\n\tSuchThat: '\\u220B',\n\tSum: '\\u2211',\n\tsum: '\\u2211',\n\tsung: '\\u266A',\n\tSup: '\\u22D1',\n\tsup: '\\u2283',\n\tsup1: '\\u00B9',\n\tsup2: '\\u00B2',\n\tsup3: '\\u00B3',\n\tsupdot: '\\u2ABE',\n\tsupdsub: '\\u2AD8',\n\tsupE: '\\u2AC6',\n\tsupe: '\\u2287',\n\tsupedot: '\\u2AC4',\n\tSuperset: '\\u2283',\n\tSupersetEqual: '\\u2287',\n\tsuphsol: '\\u27C9',\n\tsuphsub: '\\u2AD7',\n\tsuplarr: '\\u297B',\n\tsupmult: '\\u2AC2',\n\tsupnE: '\\u2ACC',\n\tsupne: '\\u228B',\n\tsupplus: '\\u2AC0',\n\tSupset: '\\u22D1',\n\tsupset: '\\u2283',\n\tsupseteq: '\\u2287',\n\tsupseteqq: '\\u2AC6',\n\tsupsetneq: '\\u228B',\n\tsupsetneqq: '\\u2ACC',\n\tsupsim: '\\u2AC8',\n\tsupsub: '\\u2AD4',\n\tsupsup: '\\u2AD6',\n\tswarhk: '\\u2926',\n\tswArr: '\\u21D9',\n\tswarr: '\\u2199',\n\tswarrow: '\\u2199',\n\tswnwar: '\\u292A',\n\tszlig: '\\u00DF',\n\tTab: '\\u0009',\n\ttarget: '\\u2316',\n\tTau: '\\u03A4',\n\ttau: '\\u03C4',\n\ttbrk: '\\u23B4',\n\tTcaron: '\\u0164',\n\ttcaron: '\\u0165',\n\tTcedil: '\\u0162',\n\ttcedil: '\\u0163',\n\tTcy: '\\u0422',\n\ttcy: '\\u0442',\n\ttdot: '\\u20DB',\n\ttelrec: '\\u2315',\n\tTfr: '\\uD835\\uDD17',\n\ttfr: '\\uD835\\uDD31',\n\tthere4: '\\u2234',\n\tTherefore: '\\u2234',\n\ttherefore: '\\u2234',\n\tTheta: '\\u0398',\n\ttheta: '\\u03B8',\n\tthetasym: '\\u03D1',\n\tthetav: '\\u03D1',\n\tthickapprox: '\\u2248',\n\tthicksim: '\\u223C',\n\tThickSpace: '\\u205F\\u200A',\n\tthinsp: '\\u2009',\n\tThinSpace: '\\u2009',\n\tthkap: '\\u2248',\n\tthksim: '\\u223C',\n\tTHORN: '\\u00DE',\n\tthorn: '\\u00FE',\n\tTilde: '\\u223C',\n\ttilde: '\\u02DC',\n\tTildeEqual: '\\u2243',\n\tTildeFullEqual: '\\u2245',\n\tTildeTilde: '\\u2248',\n\ttimes: '\\u00D7',\n\ttimesb: '\\u22A0',\n\ttimesbar: '\\u2A31',\n\ttimesd: '\\u2A30',\n\ttint: '\\u222D',\n\ttoea: '\\u2928',\n\ttop: '\\u22A4',\n\ttopbot: '\\u2336',\n\ttopcir: '\\u2AF1',\n\tTopf: '\\uD835\\uDD4B',\n\ttopf: '\\uD835\\uDD65',\n\ttopfork: '\\u2ADA',\n\ttosa: '\\u2929',\n\ttprime: '\\u2034',\n\tTRADE: '\\u2122',\n\ttrade: '\\u2122',\n\ttriangle: '\\u25B5',\n\ttriangledown: '\\u25BF',\n\ttriangleleft: '\\u25C3',\n\ttrianglelefteq: '\\u22B4',\n\ttriangleq: '\\u225C',\n\ttriangleright: '\\u25B9',\n\ttrianglerighteq: '\\u22B5',\n\ttridot: '\\u25EC',\n\ttrie: '\\u225C',\n\ttriminus: '\\u2A3A',\n\tTripleDot: '\\u20DB',\n\ttriplus: '\\u2A39',\n\ttrisb: '\\u29CD',\n\ttritime: '\\u2A3B',\n\ttrpezium: '\\u23E2',\n\tTscr: '\\uD835\\uDCAF',\n\ttscr: '\\uD835\\uDCC9',\n\tTScy: '\\u0426',\n\ttscy: '\\u0446',\n\tTSHcy: '\\u040B',\n\ttshcy: '\\u045B',\n\tTstrok: '\\u0166',\n\ttstrok: '\\u0167',\n\ttwixt: '\\u226C',\n\ttwoheadleftarrow: '\\u219E',\n\ttwoheadrightarrow: '\\u21A0',\n\tUacute: '\\u00DA',\n\tuacute: '\\u00FA',\n\tUarr: '\\u219F',\n\tuArr: '\\u21D1',\n\tuarr: '\\u2191',\n\tUarrocir: '\\u2949',\n\tUbrcy: '\\u040E',\n\tubrcy: '\\u045E',\n\tUbreve: '\\u016C',\n\tubreve: '\\u016D',\n\tUcirc: '\\u00DB',\n\tucirc: '\\u00FB',\n\tUcy: '\\u0423',\n\tucy: '\\u0443',\n\tudarr: '\\u21C5',\n\tUdblac: '\\u0170',\n\tudblac: '\\u0171',\n\tudhar: '\\u296E',\n\tufisht: '\\u297E',\n\tUfr: '\\uD835\\uDD18',\n\tufr: '\\uD835\\uDD32',\n\tUgrave: '\\u00D9',\n\tugrave: '\\u00F9',\n\tuHar: '\\u2963',\n\tuharl: '\\u21BF',\n\tuharr: '\\u21BE',\n\tuhblk: '\\u2580',\n\tulcorn: '\\u231C',\n\tulcorner: '\\u231C',\n\tulcrop: '\\u230F',\n\tultri: '\\u25F8',\n\tUmacr: '\\u016A',\n\tumacr: '\\u016B',\n\tuml: '\\u00A8',\n\tUnderBar: '\\u005F',\n\tUnderBrace: '\\u23DF',\n\tUnderBracket: '\\u23B5',\n\tUnderParenthesis: '\\u23DD',\n\tUnion: '\\u22C3',\n\tUnionPlus: '\\u228E',\n\tUogon: '\\u0172',\n\tuogon: '\\u0173',\n\tUopf: '\\uD835\\uDD4C',\n\tuopf: '\\uD835\\uDD66',\n\tUpArrow: '\\u2191',\n\tUparrow: '\\u21D1',\n\tuparrow: '\\u2191',\n\tUpArrowBar: '\\u2912',\n\tUpArrowDownArrow: '\\u21C5',\n\tUpDownArrow: '\\u2195',\n\tUpdownarrow: '\\u21D5',\n\tupdownarrow: '\\u2195',\n\tUpEquilibrium: '\\u296E',\n\tupharpoonleft: '\\u21BF',\n\tupharpoonright: '\\u21BE',\n\tuplus: '\\u228E',\n\tUpperLeftArrow: '\\u2196',\n\tUpperRightArrow: '\\u2197',\n\tUpsi: '\\u03D2',\n\tupsi: '\\u03C5',\n\tupsih: '\\u03D2',\n\tUpsilon: '\\u03A5',\n\tupsilon: '\\u03C5',\n\tUpTee: '\\u22A5',\n\tUpTeeArrow: '\\u21A5',\n\tupuparrows: '\\u21C8',\n\turcorn: '\\u231D',\n\turcorner: '\\u231D',\n\turcrop: '\\u230E',\n\tUring: '\\u016E',\n\turing: '\\u016F',\n\turtri: '\\u25F9',\n\tUscr: '\\uD835\\uDCB0',\n\tuscr: '\\uD835\\uDCCA',\n\tutdot: '\\u22F0',\n\tUtilde: '\\u0168',\n\tutilde: '\\u0169',\n\tutri: '\\u25B5',\n\tutrif: '\\u25B4',\n\tuuarr: '\\u21C8',\n\tUuml: '\\u00DC',\n\tuuml: '\\u00FC',\n\tuwangle: '\\u29A7',\n\tvangrt: '\\u299C',\n\tvarepsilon: '\\u03F5',\n\tvarkappa: '\\u03F0',\n\tvarnothing: '\\u2205',\n\tvarphi: '\\u03D5',\n\tvarpi: '\\u03D6',\n\tvarpropto: '\\u221D',\n\tvArr: '\\u21D5',\n\tvarr: '\\u2195',\n\tvarrho: '\\u03F1',\n\tvarsigma: '\\u03C2',\n\tvarsubsetneq: '\\u228A\\uFE00',\n\tvarsubsetneqq: '\\u2ACB\\uFE00',\n\tvarsupsetneq: '\\u228B\\uFE00',\n\tvarsupsetneqq: '\\u2ACC\\uFE00',\n\tvartheta: '\\u03D1',\n\tvartriangleleft: '\\u22B2',\n\tvartriangleright: '\\u22B3',\n\tVbar: '\\u2AEB',\n\tvBar: '\\u2AE8',\n\tvBarv: '\\u2AE9',\n\tVcy: '\\u0412',\n\tvcy: '\\u0432',\n\tVDash: '\\u22AB',\n\tVdash: '\\u22A9',\n\tvDash: '\\u22A8',\n\tvdash: '\\u22A2',\n\tVdashl: '\\u2AE6',\n\tVee: '\\u22C1',\n\tvee: '\\u2228',\n\tveebar: '\\u22BB',\n\tveeeq: '\\u225A',\n\tvellip: '\\u22EE',\n\tVerbar: '\\u2016',\n\tverbar: '\\u007C',\n\tVert: '\\u2016',\n\tvert: '\\u007C',\n\tVerticalBar: '\\u2223',\n\tVerticalLine: '\\u007C',\n\tVerticalSeparator: '\\u2758',\n\tVerticalTilde: '\\u2240',\n\tVeryThinSpace: '\\u200A',\n\tVfr: '\\uD835\\uDD19',\n\tvfr: '\\uD835\\uDD33',\n\tvltri: '\\u22B2',\n\tvnsub: '\\u2282\\u20D2',\n\tvnsup: '\\u2283\\u20D2',\n\tVopf: '\\uD835\\uDD4D',\n\tvopf: '\\uD835\\uDD67',\n\tvprop: '\\u221D',\n\tvrtri: '\\u22B3',\n\tVscr: '\\uD835\\uDCB1',\n\tvscr: '\\uD835\\uDCCB',\n\tvsubnE: '\\u2ACB\\uFE00',\n\tvsubne: '\\u228A\\uFE00',\n\tvsupnE: '\\u2ACC\\uFE00',\n\tvsupne: '\\u228B\\uFE00',\n\tVvdash: '\\u22AA',\n\tvzigzag: '\\u299A',\n\tWcirc: '\\u0174',\n\twcirc: '\\u0175',\n\twedbar: '\\u2A5F',\n\tWedge: '\\u22C0',\n\twedge: '\\u2227',\n\twedgeq: '\\u2259',\n\tweierp: '\\u2118',\n\tWfr: '\\uD835\\uDD1A',\n\twfr: '\\uD835\\uDD34',\n\tWopf: '\\uD835\\uDD4E',\n\twopf: '\\uD835\\uDD68',\n\twp: '\\u2118',\n\twr: '\\u2240',\n\twreath: '\\u2240',\n\tWscr: '\\uD835\\uDCB2',\n\twscr: '\\uD835\\uDCCC',\n\txcap: '\\u22C2',\n\txcirc: '\\u25EF',\n\txcup: '\\u22C3',\n\txdtri: '\\u25BD',\n\tXfr: '\\uD835\\uDD1B',\n\txfr: '\\uD835\\uDD35',\n\txhArr: '\\u27FA',\n\txharr: '\\u27F7',\n\tXi: '\\u039E',\n\txi: '\\u03BE',\n\txlArr: '\\u27F8',\n\txlarr: '\\u27F5',\n\txmap: '\\u27FC',\n\txnis: '\\u22FB',\n\txodot: '\\u2A00',\n\tXopf: '\\uD835\\uDD4F',\n\txopf: '\\uD835\\uDD69',\n\txoplus: '\\u2A01',\n\txotime: '\\u2A02',\n\txrArr: '\\u27F9',\n\txrarr: '\\u27F6',\n\tXscr: '\\uD835\\uDCB3',\n\txscr: '\\uD835\\uDCCD',\n\txsqcup: '\\u2A06',\n\txuplus: '\\u2A04',\n\txutri: '\\u25B3',\n\txvee: '\\u22C1',\n\txwedge: '\\u22C0',\n\tYacute: '\\u00DD',\n\tyacute: '\\u00FD',\n\tYAcy: '\\u042F',\n\tyacy: '\\u044F',\n\tYcirc: '\\u0176',\n\tycirc: '\\u0177',\n\tYcy: '\\u042B',\n\tycy: '\\u044B',\n\tyen: '\\u00A5',\n\tYfr: '\\uD835\\uDD1C',\n\tyfr: '\\uD835\\uDD36',\n\tYIcy: '\\u0407',\n\tyicy: '\\u0457',\n\tYopf: '\\uD835\\uDD50',\n\tyopf: '\\uD835\\uDD6A',\n\tYscr: '\\uD835\\uDCB4',\n\tyscr: '\\uD835\\uDCCE',\n\tYUcy: '\\u042E',\n\tyucy: '\\u044E',\n\tYuml: '\\u0178',\n\tyuml: '\\u00FF',\n\tZacute: '\\u0179',\n\tzacute: '\\u017A',\n\tZcaron: '\\u017D',\n\tzcaron: '\\u017E',\n\tZcy: '\\u0417',\n\tzcy: '\\u0437',\n\tZdot: '\\u017B',\n\tzdot: '\\u017C',\n\tzeetrf: '\\u2128',\n\tZeroWidthSpace: '\\u200B',\n\tZeta: '\\u0396',\n\tzeta: '\\u03B6',\n\tZfr: '\\u2128',\n\tzfr: '\\uD835\\uDD37',\n\tZHcy: '\\u0416',\n\tzhcy: '\\u0436',\n\tzigrarr: '\\u21DD',\n\tZopf: '\\u2124',\n\tzopf: '\\uD835\\uDD6B',\n\tZscr: '\\uD835\\uDCB5',\n\tzscr: '\\uD835\\uDCCF',\n\tzwj: '\\u200D',\n\tzwnj: '\\u200C',\n});\n\n/**\n * @deprecated\n * Use `HTML_ENTITIES` instead.\n * @see {@link HTML_ENTITIES}\n */\nexports.entityMap = exports.HTML_ENTITIES;\n","'use strict';\n\nvar conventions = require('./conventions');\n\nfunction extendError(constructor, writableName) {\n\tconstructor.prototype = Object.create(Error.prototype, {\n\t\tconstructor: { value: constructor },\n\t\tname: { value: constructor.name, enumerable: true, writable: writableName },\n\t});\n}\n\nvar DOMExceptionName = conventions.freeze({\n\t/**\n\t * the default value as defined by the spec\n\t */\n\tError: 'Error',\n\t/**\n\t * @deprecated\n\t * Use RangeError instead.\n\t */\n\tIndexSizeError: 'IndexSizeError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tDomstringSizeError: 'DomstringSizeError',\n\tHierarchyRequestError: 'HierarchyRequestError',\n\tWrongDocumentError: 'WrongDocumentError',\n\tInvalidCharacterError: 'InvalidCharacterError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tNoDataAllowedError: 'NoDataAllowedError',\n\tNoModificationAllowedError: 'NoModificationAllowedError',\n\tNotFoundError: 'NotFoundError',\n\tNotSupportedError: 'NotSupportedError',\n\tInUseAttributeError: 'InUseAttributeError',\n\tInvalidStateError: 'InvalidStateError',\n\tSyntaxError: 'SyntaxError',\n\tInvalidModificationError: 'InvalidModificationError',\n\tNamespaceError: 'NamespaceError',\n\t/**\n\t * @deprecated\n\t * Use TypeError for invalid arguments,\n\t * \"NotSupportedError\" DOMException for unsupported operations,\n\t * and \"NotAllowedError\" DOMException for denied requests instead.\n\t */\n\tInvalidAccessError: 'InvalidAccessError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tValidationError: 'ValidationError',\n\t/**\n\t * @deprecated\n\t * Use TypeError instead.\n\t */\n\tTypeMismatchError: 'TypeMismatchError',\n\tSecurityError: 'SecurityError',\n\tNetworkError: 'NetworkError',\n\tAbortError: 'AbortError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tURLMismatchError: 'URLMismatchError',\n\tQuotaExceededError: 'QuotaExceededError',\n\tTimeoutError: 'TimeoutError',\n\tInvalidNodeTypeError: 'InvalidNodeTypeError',\n\tDataCloneError: 'DataCloneError',\n\tEncodingError: 'EncodingError',\n\tNotReadableError: 'NotReadableError',\n\tUnknownError: 'UnknownError',\n\tConstraintError: 'ConstraintError',\n\tDataError: 'DataError',\n\tTransactionInactiveError: 'TransactionInactiveError',\n\tReadOnlyError: 'ReadOnlyError',\n\tVersionError: 'VersionError',\n\tOperationError: 'OperationError',\n\tNotAllowedError: 'NotAllowedError',\n\tOptOutError: 'OptOutError',\n});\nvar DOMExceptionNames = Object.keys(DOMExceptionName);\n\nfunction isValidDomExceptionCode(value) {\n\treturn typeof value === 'number' && value >= 1 && value <= 25;\n}\nfunction endsWithError(value) {\n\treturn typeof value === 'string' && value.substring(value.length - DOMExceptionName.Error.length) === DOMExceptionName.Error;\n}\n/**\n * DOM operations only raise exceptions in \"exceptional\" circumstances, i.e., when an operation\n * is impossible to perform (either for logical reasons, because data is lost, or because the\n * implementation has become unstable). In general, DOM methods return specific error values in\n * ordinary processing situations, such as out-of-bound errors when using NodeList.\n *\n * Implementations should raise other exceptions under other circumstances. For example,\n * implementations should raise an implementation-dependent exception if a null argument is\n * passed when null was not expected.\n *\n * This implementation supports the following usages:\n * 1. according to the living standard (both arguments are optional):\n * ```\n * new DOMException(\"message (can be empty)\", DOMExceptionNames.HierarchyRequestError)\n * ```\n * 2. according to previous xmldom implementation (only the first argument is required):\n * ```\n * new DOMException(DOMException.HIERARCHY_REQUEST_ERR, \"optional message\")\n * ```\n * both result in the proper name being set.\n *\n * @class DOMException\n * @param {number | string} messageOrCode\n * The reason why an operation is not acceptable.\n * If it is a number, it is used to determine the `name`, see\n * {@link https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF ExceptionCode}\n * @param {string | keyof typeof DOMExceptionName | Error} [nameOrMessage]\n * The `name` to use for the error.\n * If `messageOrCode` is a number, this arguments is used as the `message` instead.\n * @augments Error\n * @see https://webidl.spec.whatwg.org/#idl-DOMException\n * @see https://webidl.spec.whatwg.org/#dfn-error-names-table\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-17189187\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n */\nfunction DOMException(messageOrCode, nameOrMessage) {\n\t// support old way of passing arguments: first argument is a valid number\n\tif (isValidDomExceptionCode(messageOrCode)) {\n\t\tthis.name = DOMExceptionNames[messageOrCode];\n\t\tthis.message = nameOrMessage || '';\n\t} else {\n\t\tthis.message = messageOrCode;\n\t\tthis.name = endsWithError(nameOrMessage) ? nameOrMessage : DOMExceptionName.Error;\n\t}\n\tif (Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n}\nextendError(DOMException, true);\nObject.defineProperties(DOMException.prototype, {\n\tcode: {\n\t\tenumerable: true,\n\t\tget: function () {\n\t\t\tvar code = DOMExceptionNames.indexOf(this.name);\n\t\t\tif (isValidDomExceptionCode(code)) return code;\n\t\t\treturn 0;\n\t\t},\n\t},\n});\n\nvar ExceptionCode = {\n\tINDEX_SIZE_ERR: 1,\n\tDOMSTRING_SIZE_ERR: 2,\n\tHIERARCHY_REQUEST_ERR: 3,\n\tWRONG_DOCUMENT_ERR: 4,\n\tINVALID_CHARACTER_ERR: 5,\n\tNO_DATA_ALLOWED_ERR: 6,\n\tNO_MODIFICATION_ALLOWED_ERR: 7,\n\tNOT_FOUND_ERR: 8,\n\tNOT_SUPPORTED_ERR: 9,\n\tINUSE_ATTRIBUTE_ERR: 10,\n\tINVALID_STATE_ERR: 11,\n\tSYNTAX_ERR: 12,\n\tINVALID_MODIFICATION_ERR: 13,\n\tNAMESPACE_ERR: 14,\n\tINVALID_ACCESS_ERR: 15,\n\tVALIDATION_ERR: 16,\n\tTYPE_MISMATCH_ERR: 17,\n\tSECURITY_ERR: 18,\n\tNETWORK_ERR: 19,\n\tABORT_ERR: 20,\n\tURL_MISMATCH_ERR: 21,\n\tQUOTA_EXCEEDED_ERR: 22,\n\tTIMEOUT_ERR: 23,\n\tINVALID_NODE_TYPE_ERR: 24,\n\tDATA_CLONE_ERR: 25,\n};\n\nvar entries = Object.entries(ExceptionCode);\nfor (var i = 0; i < entries.length; i++) {\n\tvar key = entries[i][0];\n\tDOMException[key] = entries[i][1];\n}\n\n/**\n * Creates an error that will not be caught by XMLReader aka the SAX parser.\n *\n * @class\n * @param {string} message\n * @param {any} [locator]\n */\nfunction ParseError(message, locator) {\n\tthis.message = message;\n\tthis.locator = locator;\n\tif (Error.captureStackTrace) Error.captureStackTrace(this, ParseError);\n}\nextendError(ParseError);\n\nexports.DOMException = DOMException;\nexports.DOMExceptionName = DOMExceptionName;\nexports.ExceptionCode = ExceptionCode;\nexports.ParseError = ParseError;\n","'use strict';\n\n/**\n * Detects relevant unicode support for regular expressions in the runtime.\n * Should the runtime not accepts the flag `u` or unicode ranges,\n * character classes without unicode handling will be used.\n *\n * @param {typeof RegExp} [RegExpImpl=RegExp]\n * For testing: the RegExp class.\n * @returns {boolean}\n * @see https://node.green/#ES2015-syntax-RegExp--y--and--u--flags\n */\nfunction detectUnicodeSupport(RegExpImpl) {\n\ttry {\n\t\tif (typeof RegExpImpl !== 'function') {\n\t\t\tRegExpImpl = RegExp;\n\t\t}\n\t\t// eslint-disable-next-line es5/no-unicode-regex,es5/no-unicode-code-point-escape\n\t\tvar match = new RegExpImpl('\\u{1d306}', 'u').exec('𝌆');\n\t\treturn !!match && match[0].length === 2;\n\t} catch (error) {}\n\treturn false;\n}\nvar UNICODE_SUPPORT = detectUnicodeSupport();\n\n/**\n * Removes `[`, `]` and any trailing quantifiers from the source of a RegExp.\n *\n * @param {RegExp} regexp\n */\nfunction chars(regexp) {\n\tif (regexp.source[0] !== '[') {\n\t\tthrow new Error(regexp + ' can not be used with chars');\n\t}\n\treturn regexp.source.slice(1, regexp.source.lastIndexOf(']'));\n}\n\n/**\n * Creates a new character list regular expression,\n * by removing `search` from the source of `regexp`.\n *\n * @param {RegExp} regexp\n * @param {string} search\n * The character(s) to remove.\n * @returns {RegExp}\n */\nfunction chars_without(regexp, search) {\n\tif (regexp.source[0] !== '[') {\n\t\tthrow new Error('/' + regexp.source + '/ can not be used with chars_without');\n\t}\n\tif (!search || typeof search !== 'string') {\n\t\tthrow new Error(JSON.stringify(search) + ' is not a valid search');\n\t}\n\tif (regexp.source.indexOf(search) === -1) {\n\t\tthrow new Error('\"' + search + '\" is not is /' + regexp.source + '/');\n\t}\n\tif (search === '-' && regexp.source.indexOf(search) !== 1) {\n\t\tthrow new Error('\"' + search + '\" is not at the first postion of /' + regexp.source + '/');\n\t}\n\treturn new RegExp(regexp.source.replace(search, ''), UNICODE_SUPPORT ? 'u' : '');\n}\n\n/**\n * Combines and Regular expressions correctly by using `RegExp.source`.\n *\n * @param {...(RegExp | string)[]} args\n * @returns {RegExp}\n */\nfunction reg(args) {\n\tvar self = this;\n\treturn new RegExp(\n\t\tArray.prototype.slice\n\t\t\t.call(arguments)\n\t\t\t.map(function (part) {\n\t\t\t\tvar isStr = typeof part === 'string';\n\t\t\t\tif (isStr && self === undefined && part === '|') {\n\t\t\t\t\tthrow new Error('use regg instead of reg to wrap expressions with `|`!');\n\t\t\t\t}\n\t\t\t\treturn isStr ? part : part.source;\n\t\t\t})\n\t\t\t.join(''),\n\t\tUNICODE_SUPPORT ? 'mu' : 'm'\n\t);\n}\n\n/**\n * Like `reg` but wraps the expression in `(?:`,`)` to create a non tracking group.\n *\n * @param {...(RegExp | string)[]} args\n * @returns {RegExp}\n */\nfunction regg(args) {\n\tif (arguments.length === 0) {\n\t\tthrow new Error('no parameters provided');\n\t}\n\treturn reg.apply(regg, ['(?:'].concat(Array.prototype.slice.call(arguments), [')']));\n}\n\n// /**\n// * Append ^ to the beginning of the expression.\n// * @param {...(RegExp | string)[]} args\n// * @returns {RegExp}\n// */\n// function reg_start(args) {\n// \tif (arguments.length === 0) {\n// \t\tthrow new Error('no parameters provided');\n// \t}\n// \treturn reg.apply(reg_start, ['^'].concat(Array.prototype.slice.call(arguments)));\n// }\n\n// https://www.w3.org/TR/xml/#document\n// `[1] document ::= prolog element Misc*`\n// https://www.w3.org/TR/xml11/#NT-document\n// `[1] document ::= ( prolog element Misc* ) - ( Char* RestrictedChar Char* )`\n\n/**\n * A character usually appearing in wrongly converted strings.\n *\n * @type {string}\n * @see https://en.wikipedia.org/wiki/Specials_(Unicode_block)#Replacement_character\n * @see https://nodejs.dev/en/api/v18/buffer/#buffers-and-character-encodings\n * @see https://www.unicode.org/faq/utf_bom.html#BOM\n * @readonly\n */\nvar UNICODE_REPLACEMENT_CHARACTER = '\\uFFFD';\n// https://www.w3.org/TR/xml/#NT-Char\n// any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.\n// `[2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]`\n// https://www.w3.org/TR/xml11/#NT-Char\n// `[2] Char ::= [#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]`\n// https://www.w3.org/TR/xml11/#NT-RestrictedChar\n// `[2a] RestrictedChar ::= [#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]`\n// https://www.w3.org/TR/xml11/#charsets\nvar Char = /[-\\x09\\x0A\\x0D\\x20-\\x2C\\x2E-\\uD7FF\\uE000-\\uFFFD]/; // without \\u10000-\\uEFFFF\nif (UNICODE_SUPPORT) {\n\t// eslint-disable-next-line es5/no-unicode-code-point-escape\n\tChar = reg('[', chars(Char), '\\\\u{10000}-\\\\u{10FFFF}', ']');\n}\n\nvar _SChar = /[\\x20\\x09\\x0D\\x0A]/;\nvar SChar_s = chars(_SChar);\n// https://www.w3.org/TR/xml11/#NT-S\n// `[3] S ::= (#x20 | #x9 | #xD | #xA)+`\nvar S = reg(_SChar, '+');\n// optional whitespace described as `S?` in the grammar,\n// simplified to 0-n occurrences of the character class\n// instead of 0-1 occurrences of a non-capturing group around S\nvar S_OPT = reg(_SChar, '*');\n\n// https://www.w3.org/TR/xml11/#NT-NameStartChar\n// `[4] NameStartChar ::= \":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]`\nvar NameStartChar =\n\t/[:_a-zA-Z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02FF\\u0370-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/; // without \\u10000-\\uEFFFF\nif (UNICODE_SUPPORT) {\n\t// eslint-disable-next-line es5/no-unicode-code-point-escape\n\tNameStartChar = reg('[', chars(NameStartChar), '\\\\u{10000}-\\\\u{10FFFF}', ']');\n}\nvar NameStartChar_s = chars(NameStartChar);\n\n// https://www.w3.org/TR/xml11/#NT-NameChar\n// `[4a] NameChar ::= NameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]`\nvar NameChar = reg('[', NameStartChar_s, chars(/[-.0-9\\xB7]/), chars(/[\\u0300-\\u036F\\u203F-\\u2040]/), ']');\n// https://www.w3.org/TR/xml11/#NT-Name\n// `[5] Name ::= NameStartChar (NameChar)*`\nvar Name = reg(NameStartChar, NameChar, '*');\n/*\nhttps://www.w3.org/TR/xml11/#NT-Names\n`[6] Names ::= Name (#x20 Name)*`\n*/\n\n// https://www.w3.org/TR/xml11/#NT-Nmtoken\n// `[7] Nmtoken ::= (NameChar)+`\nvar Nmtoken = reg(NameChar, '+');\n/*\nhttps://www.w3.org/TR/xml11/#NT-Nmtokens\n`[8] Nmtokens ::= Nmtoken (#x20 Nmtoken)*`\nvar Nmtokens = reg(Nmtoken, regg(/\\x20/, Nmtoken), '*');\n*/\n\n// https://www.w3.org/TR/xml11/#NT-EntityRef\n// `[68] EntityRef ::= '&' Name ';'` [WFC: Entity Declared] [VC: Entity Declared] [WFC: Parsed Entity] [WFC: No Recursion]\nvar EntityRef = reg('&', Name, ';');\n// https://www.w3.org/TR/xml11/#NT-CharRef\n// `[66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'` [WFC: Legal Character]\nvar CharRef = regg(/&#[0-9]+;|&#x[0-9a-fA-F]+;/);\n\n/*\nhttps://www.w3.org/TR/xml11/#NT-Reference\n- `[67] Reference ::= EntityRef | CharRef`\n- `[66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'` [WFC: Legal Character]\n- `[68] EntityRef ::= '&' Name ';'` [WFC: Entity Declared] [VC: Entity Declared] [WFC: Parsed Entity] [WFC: No Recursion]\n*/\nvar Reference = regg(EntityRef, '|', CharRef);\n\n// https://www.w3.org/TR/xml11/#NT-PEReference\n// `[69] PEReference ::= '%' Name ';'`\n// [VC: Entity Declared] [WFC: No Recursion] [WFC: In DTD]\nvar PEReference = reg('%', Name, ';');\n\n// https://www.w3.org/TR/xml11/#NT-EntityValue\n// `[9] EntityValue ::= '\"' ([^%&\"] | PEReference | Reference)* '\"' | \"'\" ([^%&'] | PEReference | Reference)* \"'\"`\nvar EntityValue = regg(\n\treg('\"', regg(/[^%&\"]/, '|', PEReference, '|', Reference), '*', '\"'),\n\t'|',\n\treg(\"'\", regg(/[^%&']/, '|', PEReference, '|', Reference), '*', \"'\")\n);\n\n// https://www.w3.org/TR/xml11/#NT-AttValue\n// `[10] AttValue ::= '\"' ([^<&\"] | Reference)* '\"' | \"'\" ([^<&'] | Reference)* \"'\"`\nvar AttValue = regg('\"', regg(/[^<&\"]/, '|', Reference), '*', '\"', '|', \"'\", regg(/[^<&']/, '|', Reference), '*', \"'\");\n\n// https://www.w3.org/TR/xml-names/#ns-decl\n// https://www.w3.org/TR/xml-names/#ns-qualnames\n// NameStartChar without \":\"\nvar NCNameStartChar = chars_without(NameStartChar, ':');\n// https://www.w3.org/TR/xml-names/#orphans\n// `[5] NCNameChar ::= NameChar - ':'`\n// An XML NameChar, minus the \":\"\nvar NCNameChar = chars_without(NameChar, ':');\n// https://www.w3.org/TR/xml-names/#NT-NCName\n// `[4] NCName ::= Name - (Char* ':' Char*)`\n// An XML Name, minus the \":\"\nvar NCName = reg(NCNameStartChar, NCNameChar, '*');\n\n/**\nhttps://www.w3.org/TR/xml-names/#ns-qualnames\n\n```\n[7] QName ::= PrefixedName | UnprefixedName\n\t\t\t\t === (NCName ':' NCName) | NCName\n\t\t\t\t === NCName (':' NCName)?\n[8] PrefixedName ::= Prefix ':' LocalPart\n\t\t\t\t\t\t\t\t === NCName ':' NCName\n[9] UnprefixedName ::= LocalPart\n\t\t\t\t\t\t\t\t\t === NCName\n[10] Prefix ::= NCName\n[11] LocalPart ::= NCName\n```\n*/\nvar QName = reg(NCName, regg(':', NCName), '?');\nvar QName_exact = reg('^', QName, '$');\nvar QName_group = reg('(', QName, ')');\n\n// https://www.w3.org/TR/xml11/#NT-SystemLiteral\n// `[11] SystemLiteral ::= ('\"' [^\"]* '\"') | (\"'\" [^']* \"'\")`\nvar SystemLiteral = regg(/\"[^\"]*\"|'[^']*'/);\n\n/*\n https://www.w3.org/TR/xml11/#NT-PI\n ```\n [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))\n [16] PI ::= '' Char*)))? '?>'\n ```\n target /xml/i is not excluded!\n*/\nvar PI = reg(/^<\\?/, '(', Name, ')', regg(S, '(', Char, '*?)'), '?', /\\?>/);\n\n// https://www.w3.org/TR/xml11/#NT-PubidChar\n// `[13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]`\nvar PubidChar = /[\\x20\\x0D\\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/;\n\n// https://www.w3.org/TR/xml11/#NT-PubidLiteral\n// `[12] PubidLiteral ::= '\"' PubidChar* '\"' | \"'\" (PubidChar - \"'\")* \"'\"`\nvar PubidLiteral = regg('\"', PubidChar, '*\"', '|', \"'\", chars_without(PubidChar, \"'\"), \"*'\");\n\n// https://www.w3.org/TR/xml11/#NT-CharData\n// `[14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)`\n\nvar COMMENT_START = '';\n// https://www.w3.org/TR/xml11/#NT-Comment\n// `[15] Comment ::= ''`\nvar Comment = reg(COMMENT_START, regg(chars_without(Char, '-'), '|', reg('-', chars_without(Char, '-'))), '*', COMMENT_END);\n\nvar PCDATA = '#PCDATA';\n// https://www.w3.org/TR/xml11/#NT-Mixed\n// `[51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' | '(' S? '#PCDATA' S? ')'`\n// https://www.w3.org/TR/xml-names/#NT-Mixed\n// `[51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? QName)* S? ')*' | '(' S? '#PCDATA' S? ')'`\n// [VC: Proper Group/PE Nesting] [VC: No Duplicate Types]\nvar Mixed = regg(\n\treg(/\\(/, S_OPT, PCDATA, regg(S_OPT, /\\|/, S_OPT, QName), '*', S_OPT, /\\)\\*/),\n\t'|',\n\treg(/\\(/, S_OPT, PCDATA, S_OPT, /\\)/)\n);\n\nvar _children_quantity = /[?*+]?/;\n/*\n `[49] choice ::= '(' S? cp ( S? '|' S? cp )+ S? ')'` [VC: Proper Group/PE Nesting]\n `[50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')'` [VC: Proper Group/PE Nesting]\n simplification to solve circular referencing, but doesn't check validity constraint \"Proper Group/PE Nesting\"\n var _choice_or_seq = reg('[', NameChar_s, SChar_s, chars(_children_quantity), '()|,]*');\n ```\n [48] cp ::= (Name | choice | seq) ('?' | '*' | '+')?\n === (Name | '(' S? cp ( S? '|' S? cp )+ S? ')' | '(' S? cp ( S? ',' S? cp )* S? ')') ('?' | '*' | '+')?\n !== (Name | [_choice_or_seq]*) ('?' | '*' | '+')?\n ```\n simplification to solve circular referencing, but doesn't check validity constraint \"Proper Group/PE Nesting\"\n var cp = reg(regg(Name, '|', _choice_or_seq), _children_quantity);\n*/\n/*\nInefficient regular expression (High)\nThis part of the regular expression may cause exponential backtracking on strings starting with '(|' and containing many repetitions of '|'.\nhttps://github.com/xmldom/xmldom/security/code-scanning/91\nvar choice = regg(/\\(/, S_OPT, cp, regg(S_OPT, /\\|/, S_OPT, cp), '+', S_OPT, /\\)/);\n*/\n/*\nInefficient regular expression (High)\nThis part of the regular expression may cause exponential backtracking on strings starting with '(,' and containing many repetitions of ','.\nhttps://github.com/xmldom/xmldom/security/code-scanning/92\nvar seq = regg(/\\(/, S_OPT, cp, regg(S_OPT, /,/, S_OPT, cp), '*', S_OPT, /\\)/);\n*/\n\n// `[47] children ::= (choice | seq) ('?' | '*' | '+')?`\n// simplification to solve circular referencing, but doesn't check validity constraint \"Proper Group/PE Nesting\"\nvar children = reg(/\\([^>]+\\)/, _children_quantity /*regg(choice, '|', seq), _children_quantity*/);\n\n// https://www.w3.org/TR/xml11/#NT-contentspec\n// `[46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children`\nvar contentspec = regg('EMPTY', '|', 'ANY', '|', Mixed, '|', children);\n\nvar ELEMENTDECL_START = ''`\n// https://www.w3.org/TR/xml-names/#NT-elementdecl\n// `[17] elementdecl ::= ''`\n// because of https://www.w3.org/TR/xml11/#NT-PEReference\n// since xmldom is not supporting replacements of PEReferences in the DTD\n// this also supports PEReference in the possible places\nvar elementdecl = reg(ELEMENTDECL_START, S, regg(QName, '|', PEReference), S, regg(contentspec, '|', PEReference), S_OPT, '>');\n\n// https://www.w3.org/TR/xml11/#NT-NotationType\n// `[58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')'`\n// [VC: Notation Attributes] [VC: One Notation Per Element Type] [VC: No Notation on Empty Element] [VC: No Duplicate Tokens]\nvar NotationType = reg('NOTATION', S, /\\(/, S_OPT, Name, regg(S_OPT, /\\|/, S_OPT, Name), '*', S_OPT, /\\)/);\n// https://www.w3.org/TR/xml11/#NT-Enumeration\n// `[59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'`\n// [VC: Enumeration] [VC: No Duplicate Tokens]\nvar Enumeration = reg(/\\(/, S_OPT, Nmtoken, regg(S_OPT, /\\|/, S_OPT, Nmtoken), '*', S_OPT, /\\)/);\n\n// https://www.w3.org/TR/xml11/#NT-EnumeratedType\n// `[57] EnumeratedType ::= NotationType | Enumeration`\nvar EnumeratedType = regg(NotationType, '|', Enumeration);\n\n/*\n```\n[55] StringType ::= 'CDATA'\n[56] TokenizedType ::= 'ID' [VC: ID] [VC: One ID per Element Type] [VC: ID Attribute Default]\n | 'IDREF' [VC: IDREF]\n | 'IDREFS' [VC: IDREF]\n\t | 'ENTITY' [VC: Entity Name]\n\t | 'ENTITIES' [VC: Entity Name]\n\t | 'NMTOKEN' [VC: Name Token]\n\t | 'NMTOKENS' [VC: Name Token]\n [54] AttType ::= StringType | TokenizedType | EnumeratedType\n```*/\nvar AttType = regg(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/, '|', EnumeratedType);\n\n// `[60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue)`\n// [WFC: No < in Attribute Values] [WFC: No External Entity References]\n// [VC: Fixed Attribute Default] [VC: Required Attribute] [VC: Attribute Default Value Syntactically Correct]\nvar DefaultDecl = regg(/#REQUIRED|#IMPLIED/, '|', regg(regg('#FIXED', S), '?', AttValue));\n\n// https://www.w3.org/TR/xml11/#NT-AttDef\n// [53] AttDef ::= S Name S AttType S DefaultDecl\n// https://www.w3.org/TR/xml-names/#NT-AttDef\n// [1] NSAttName ::= PrefixedAttName | DefaultAttName\n// [2] PrefixedAttName ::= 'xmlns:' NCName [NSC: Reserved Prefixes and Namespace Names]\n// [3] DefaultAttName ::= 'xmlns'\n// [21] AttDef ::= S (QName | NSAttName) S AttType S DefaultDecl\n// \t\t\t\t\t\t === S Name S AttType S DefaultDecl\n// xmldom is not distinguishing between QName and NSAttName on this level\n// to support XML without namespaces in DTD we can not restrict it to QName\nvar AttDef = regg(S, Name, S, AttType, S, DefaultDecl);\n\nvar ATTLIST_DECL_START = ''`\n// https://www.w3.org/TR/xml-names/#NT-AttlistDecl\n// `[20] AttlistDecl ::= ''`\n// to support XML without namespaces in DTD we can not restrict it to QName\nvar AttlistDecl = reg(ATTLIST_DECL_START, S, Name, AttDef, '*', S_OPT, '>');\n\nvar SYSTEM = 'SYSTEM';\nvar PUBLIC = 'PUBLIC';\n// https://www.w3.org/TR/xml11/#NT-ExternalID\n// `[75] ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral`\nvar ExternalID = regg(regg(SYSTEM, S, SystemLiteral), '|', regg(PUBLIC, S, PubidLiteral, S, SystemLiteral));\nvar ExternalID_match = reg(\n\t'^',\n\tregg(\n\t\tregg(SYSTEM, S, '(?', SystemLiteral, ')'),\n\t\t'|',\n\t\tregg(PUBLIC, S, '(?', PubidLiteral, ')', S, '(?', SystemLiteral, ')')\n\t)\n);\n\n// https://www.w3.org/TR/xml11/#NT-NDataDecl\n// `[76] NDataDecl ::= S 'NDATA' S Name` [VC: Notation Declared]\nvar NDataDecl = regg(S, 'NDATA', S, Name);\n\n// https://www.w3.org/TR/xml11/#NT-EntityDef\n// `[73] EntityDef ::= EntityValue | (ExternalID NDataDecl?)`\nvar EntityDef = regg(EntityValue, '|', regg(ExternalID, NDataDecl, '?'));\n\nvar ENTITY_DECL_START = ''`\nvar GEDecl = reg(ENTITY_DECL_START, S, Name, S, EntityDef, S_OPT, '>');\n// https://www.w3.org/TR/xml11/#NT-PEDef\n// `[74] PEDef ::= EntityValue | ExternalID`\nvar PEDef = regg(EntityValue, '|', ExternalID);\n// https://www.w3.org/TR/xml11/#NT-PEDecl\n// `[72] PEDecl ::= ''`\nvar PEDecl = reg(ENTITY_DECL_START, S, '%', S, Name, S, PEDef, S_OPT, '>');\n// https://www.w3.org/TR/xml11/#NT-EntityDecl\n// `[70] EntityDecl ::= GEDecl | PEDecl`\nvar EntityDecl = regg(GEDecl, '|', PEDecl);\n\n// https://www.w3.org/TR/xml11/#NT-PublicID\n// `[83] PublicID ::= 'PUBLIC' S PubidLiteral`\nvar PublicID = reg(PUBLIC, S, PubidLiteral);\n// https://www.w3.org/TR/xml11/#NT-NotationDecl\n// `[82] NotationDecl ::= ''` [VC: Unique Notation Name]\nvar NotationDecl = reg('');\n\n// https://www.w3.org/TR/xml11/#NT-Eq\n// `[25] Eq ::= S? '=' S?`\nvar Eq = reg(S_OPT, '=', S_OPT);\n// https://www.w3.org/TR/xml/#NT-VersionNum\n// `[26] VersionNum ::= '1.' [0-9]+`\n// https://www.w3.org/TR/xml11/#NT-VersionNum\n// `[26] VersionNum ::= '1.1'`\nvar VersionNum = /1[.]\\d+/;\n// https://www.w3.org/TR/xml11/#NT-VersionInfo\n// `[24] VersionInfo ::= S 'version' Eq (\"'\" VersionNum \"'\" | '\"' VersionNum '\"')`\nvar VersionInfo = reg(S, 'version', Eq, regg(\"'\", VersionNum, \"'\", '|', '\"', VersionNum, '\"'));\n// https://www.w3.org/TR/xml11/#NT-EncName\n// `[81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*`\nvar EncName = /[A-Za-z][-A-Za-z0-9._]*/;\n// https://www.w3.org/TR/xml11/#NT-EncDecl\n// `[80] EncodingDecl ::= S 'encoding' Eq ('\"' EncName '\"' | \"'\" EncName \"'\" )`\nvar EncodingDecl = regg(S, 'encoding', Eq, regg('\"', EncName, '\"', '|', \"'\", EncName, \"'\"));\n// https://www.w3.org/TR/xml11/#NT-SDDecl\n// `[32] SDDecl ::= S 'standalone' Eq ((\"'\" ('yes' | 'no') \"'\") | ('\"' ('yes' | 'no') '\"'))`\nvar SDDecl = regg(S, 'standalone', Eq, regg(\"'\", regg('yes', '|', 'no'), \"'\", '|', '\"', regg('yes', '|', 'no'), '\"'));\n// https://www.w3.org/TR/xml11/#NT-XMLDecl\n// [23] XMLDecl ::= ''\nvar XMLDecl = reg(/^<\\?xml/, VersionInfo, EncodingDecl, '?', SDDecl, '?', S_OPT, /\\?>/);\n\n/*\n https://www.w3.org/TR/xml/#NT-markupdecl\n https://www.w3.org/TR/xml11/#NT-markupdecl\n `[29] markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment`\n var markupdecl = regg(elementdecl, '|', AttlistDecl, '|', EntityDecl, '|', NotationDecl, '|', PI_unsafe, '|', Comment);\n*/\n/*\n https://www.w3.org/TR/xml-names/#NT-doctypedecl\n`[28a] DeclSep ::= PEReference | S`\n https://www.w3.org/TR/xml11/#NT-intSubset\n```\n [28b] intSubset ::= (markupdecl | DeclSep)*\n === (markupdecl | PEReference | S)*\n```\n [WFC: PE Between Declarations]\n var intSubset = reg(regg(markupdecl, '|', PEReference, '|', S), '*');\n*/\nvar DOCTYPE_DECL_START = ''`\n https://www.afterwardsw3.org/TR/xml-names/#NT-doctypedecl\n `[16] doctypedecl ::= ''`\n var doctypedecl = reg('');\n*/\n\nvar CDATA_START = '';\nvar CDStart = //;\nvar CData = reg(Char, '*?', CDEnd);\n/*\n https://www.w3.org/TR/xml/#dt-cdsection\n `[18] \tCDSect\t ::= \tCDStart CData CDEnd`\n `[19] \tCDStart\t ::= \t'' Char*))`\n `[21] \tCDEnd\t ::= \t']]>'`\n*/\nvar CDSect = reg(CDStart, CData);\n\n// unit tested\nexports.chars = chars;\nexports.chars_without = chars_without;\nexports.detectUnicodeSupport = detectUnicodeSupport;\nexports.reg = reg;\nexports.regg = regg;\nexports.AttlistDecl = AttlistDecl;\nexports.CDATA_START = CDATA_START;\nexports.CDATA_END = CDATA_END;\nexports.CDSect = CDSect;\nexports.Char = Char;\nexports.Comment = Comment;\nexports.COMMENT_START = COMMENT_START;\nexports.COMMENT_END = COMMENT_END;\nexports.DOCTYPE_DECL_START = DOCTYPE_DECL_START;\nexports.elementdecl = elementdecl;\nexports.EntityDecl = EntityDecl;\nexports.EntityValue = EntityValue;\nexports.ExternalID = ExternalID;\nexports.ExternalID_match = ExternalID_match;\nexports.Name = Name;\nexports.NotationDecl = NotationDecl;\nexports.Reference = Reference;\nexports.PEReference = PEReference;\nexports.PI = PI;\nexports.PUBLIC = PUBLIC;\nexports.PubidLiteral = PubidLiteral;\nexports.QName = QName;\nexports.QName_exact = QName_exact;\nexports.QName_group = QName_group;\nexports.S = S;\nexports.SChar_s = SChar_s;\nexports.S_OPT = S_OPT;\nexports.SYSTEM = SYSTEM;\nexports.SystemLiteral = SystemLiteral;\nexports.UNICODE_REPLACEMENT_CHARACTER = UNICODE_REPLACEMENT_CHARACTER;\nexports.UNICODE_SUPPORT = UNICODE_SUPPORT;\nexports.XMLDecl = XMLDecl;\n","'use strict';\nvar conventions = require('./conventions');\nexports.assign = conventions.assign;\nexports.hasDefaultHTMLNamespace = conventions.hasDefaultHTMLNamespace;\nexports.isHTMLMimeType = conventions.isHTMLMimeType;\nexports.isValidMimeType = conventions.isValidMimeType;\nexports.MIME_TYPE = conventions.MIME_TYPE;\nexports.NAMESPACE = conventions.NAMESPACE;\n\nvar errors = require('./errors');\nexports.DOMException = errors.DOMException;\nexports.DOMExceptionName = errors.DOMExceptionName;\nexports.ExceptionCode = errors.ExceptionCode;\nexports.ParseError = errors.ParseError;\n\nvar dom = require('./dom');\nexports.Attr = dom.Attr;\nexports.CDATASection = dom.CDATASection;\nexports.CharacterData = dom.CharacterData;\nexports.Comment = dom.Comment;\nexports.Document = dom.Document;\nexports.DocumentFragment = dom.DocumentFragment;\nexports.DocumentType = dom.DocumentType;\nexports.DOMImplementation = dom.DOMImplementation;\nexports.Element = dom.Element;\nexports.Entity = dom.Entity;\nexports.EntityReference = dom.EntityReference;\nexports.LiveNodeList = dom.LiveNodeList;\nexports.NamedNodeMap = dom.NamedNodeMap;\nexports.Node = dom.Node;\nexports.NodeList = dom.NodeList;\nexports.Notation = dom.Notation;\nexports.ProcessingInstruction = dom.ProcessingInstruction;\nexports.Text = dom.Text;\nexports.XMLSerializer = dom.XMLSerializer;\n\nvar domParser = require('./dom-parser');\nexports.DOMParser = domParser.DOMParser;\nexports.onErrorStopParsing = domParser.onErrorStopParsing;\nexports.onWarningStopParsing = domParser.onWarningStopParsing;\n","'use strict';\n\nvar conventions = require('./conventions');\nvar g = require('./grammar');\nvar errors = require('./errors');\n\nvar isHTMLEscapableRawTextElement = conventions.isHTMLEscapableRawTextElement;\nvar isHTMLMimeType = conventions.isHTMLMimeType;\nvar isHTMLRawTextElement = conventions.isHTMLRawTextElement;\nvar hasOwn = conventions.hasOwn;\nvar NAMESPACE = conventions.NAMESPACE;\nvar ParseError = errors.ParseError;\nvar DOMException = errors.DOMException;\n\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\nvar S_TAG = 0; //tag name offerring\nvar S_ATTR = 1; //attr name offerring\nvar S_ATTR_SPACE = 2; //attr name end and space offer\nvar S_EQ = 3; //=space?\nvar S_ATTR_NOQUOT_VALUE = 4; //attr value(no quot value only)\nvar S_ATTR_END = 5; //attr value end and no space(quot end)\nvar S_TAG_SPACE = 6; //(attr value end || tag end ) && (space offer)\nvar S_TAG_CLOSE = 7; //closed el\n\nfunction XMLReader() {}\n\nXMLReader.prototype = {\n\tparse: function (source, defaultNSMap, entityMap) {\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap, (defaultNSMap = Object.create(null)));\n\t\tparse(source, defaultNSMap, entityMap, domBuilder, this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t},\n};\n\n/**\n * Detecting everything that might be a reference,\n * including those without ending `;`, since those are allowed in HTML.\n * The entityReplacer takes care of verifying and transforming each occurrence,\n * and reports to the errorHandler on those that are not OK,\n * depending on the context.\n */\nvar ENTITY_REG = /&#?\\w+;?/g;\n\nfunction parse(source, defaultNSMapCopy, entityMap, domBuilder, errorHandler) {\n\tvar isHTML = isHTMLMimeType(domBuilder.mimeType);\n\tif (source.indexOf(g.UNICODE_REPLACEMENT_CHARACTER) >= 0) {\n\t\terrorHandler.warning('Unicode replacement character detected, source encoding issues?');\n\t}\n\n\tfunction fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10),\n\t\t\t\tsurrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\n\tfunction entityReplacer(a) {\n\t\tvar complete = a[a.length - 1] === ';' ? a : a + ';';\n\t\tif (!isHTML && complete !== a) {\n\t\t\terrorHandler.error('EntityRef: expecting ;');\n\t\t\treturn a;\n\t\t}\n\t\tvar match = g.Reference.exec(complete);\n\t\tif (!match || match[0].length !== complete.length) {\n\t\t\terrorHandler.error('entity not matching Reference production: ' + a);\n\t\t\treturn a;\n\t\t}\n\t\tvar k = complete.slice(1, -1);\n\t\tif (hasOwn(entityMap, k)) {\n\t\t\treturn entityMap[k];\n\t\t} else if (k.charAt(0) === '#') {\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x', '0x')));\n\t\t} else {\n\t\t\terrorHandler.error('entity not found:' + a);\n\t\t\treturn a;\n\t\t}\n\t}\n\n\tfunction appendText(end) {\n\t\t//has some bugs\n\t\tif (end > start) {\n\t\t\tvar xt = source.substring(start, end).replace(ENTITY_REG, entityReplacer);\n\t\t\tlocator && position(start);\n\t\t\tdomBuilder.characters(xt, 0, end - start);\n\t\t\tstart = end;\n\t\t}\n\t}\n\n\tfunction position(p, m) {\n\t\twhile (p >= lineEnd && (m = linePattern.exec(source))) {\n\t\t\tlineStart = m.index;\n\t\t\tlineEnd = lineStart + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t}\n\t\tlocator.columnNumber = p - lineStart + 1;\n\t}\n\n\tvar lineStart = 0;\n\tvar lineEnd = 0;\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g;\n\tvar locator = domBuilder.locator;\n\n\tvar parseStack = [{ currentNSMap: defaultNSMapCopy }];\n\tvar unclosedTags = [];\n\tvar start = 0;\n\twhile (true) {\n\t\ttry {\n\t\t\tvar tagStart = source.indexOf('<', start);\n\t\t\tif (tagStart < 0) {\n\t\t\t\tif (!isHTML && unclosedTags.length > 0) {\n\t\t\t\t\treturn errorHandler.fatalError('unclosed xml tag(s): ' + unclosedTags.join(', '));\n\t\t\t\t}\n\t\t\t\tif (!source.substring(start).match(/^\\s*$/)) {\n\t\t\t\t\tvar doc = domBuilder.doc;\n\t\t\t\t\tvar text = doc.createTextNode(source.substr(start));\n\t\t\t\t\tif (doc.documentElement) {\n\t\t\t\t\t\treturn errorHandler.error('Extra content at the end of the document');\n\t\t\t\t\t}\n\t\t\t\t\tdoc.appendChild(text);\n\t\t\t\t\tdomBuilder.currentElement = text;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (tagStart > start) {\n\t\t\t\tvar fromSource = source.substring(start, tagStart);\n\t\t\t\tif (!isHTML && unclosedTags.length === 0) {\n\t\t\t\t\tfromSource = fromSource.replace(new RegExp(g.S_OPT.source, 'g'), '');\n\t\t\t\t\tfromSource && errorHandler.error(\"Unexpected content outside root element: '\" + fromSource + \"'\");\n\t\t\t\t}\n\t\t\t\tappendText(tagStart);\n\t\t\t}\n\t\t\tswitch (source.charAt(tagStart + 1)) {\n\t\t\t\tcase '/':\n\t\t\t\t\tvar end = source.indexOf('>', tagStart + 2);\n\t\t\t\t\tvar tagNameRaw = source.substring(tagStart + 2, end > 0 ? end : undefined);\n\t\t\t\t\tif (!tagNameRaw) {\n\t\t\t\t\t\treturn errorHandler.fatalError('end tag name missing');\n\t\t\t\t\t}\n\t\t\t\t\tvar tagNameMatch = end > 0 && g.reg('^', g.QName_group, g.S_OPT, '$').exec(tagNameRaw);\n\t\t\t\t\tif (!tagNameMatch) {\n\t\t\t\t\t\treturn errorHandler.fatalError('end tag name contains invalid characters: \"' + tagNameRaw + '\"');\n\t\t\t\t\t}\n\t\t\t\t\tif (!domBuilder.currentElement && !domBuilder.doc.documentElement) {\n\t\t\t\t\t\t// not enough information to provide a helpful error message,\n\t\t\t\t\t\t// but parsing will throw since there is no root element\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar currentTagName =\n\t\t\t\t\t\tunclosedTags[unclosedTags.length - 1] ||\n\t\t\t\t\t\tdomBuilder.currentElement.tagName ||\n\t\t\t\t\t\tdomBuilder.doc.documentElement.tagName ||\n\t\t\t\t\t\t'';\n\t\t\t\t\tif (currentTagName !== tagNameMatch[1]) {\n\t\t\t\t\t\tvar tagNameLower = tagNameMatch[1].toLowerCase();\n\t\t\t\t\t\tif (!isHTML || currentTagName.toLowerCase() !== tagNameLower) {\n\t\t\t\t\t\t\treturn errorHandler.fatalError('Opening and ending tag mismatch: \"' + currentTagName + '\" != \"' + tagNameRaw + '\"');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar config = parseStack.pop();\n\t\t\t\t\tunclosedTags.pop();\n\t\t\t\t\tvar localNSMap = config.localNSMap;\n\t\t\t\t\tdomBuilder.endElement(config.uri, config.localName, currentTagName);\n\t\t\t\t\tif (localNSMap) {\n\t\t\t\t\t\tfor (var prefix in localNSMap) {\n\t\t\t\t\t\t\tif (hasOwn(localNSMap, prefix)) {\n\t\t\t\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tend++;\n\t\t\t\t\tbreak;\n\t\t\t\t// end element\n\t\t\t\tcase '?': // \n\t\t\t\t\tlocator && position(tagStart);\n\t\t\t\t\tend = parseProcessingInstruction(source, tagStart, domBuilder, errorHandler);\n\t\t\t\t\tbreak;\n\t\t\t\tcase '!': // start) {\n\t\t\tstart = end;\n\t\t} else {\n\t\t\t//Possible sax fallback here, risk of positional error\n\t\t\tappendText(Math.max(tagStart, start) + 1);\n\t\t}\n\t}\n}\n\nfunction copyLocator(f, t) {\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n}\n\n/**\n * @returns\n * end of the elementStartPart(end of elementEndPart for selfClosed el)\n * @see {@link #appendElement}\n */\nfunction parseElementStartPart(source, start, el, currentNSMap, entityReplacer, errorHandler, isHTML) {\n\t/**\n\t * @param {string} qname\n\t * @param {string} value\n\t * @param {number} startIndex\n\t */\n\tfunction addAttribute(qname, value, startIndex) {\n\t\tif (hasOwn(el.attributeNames, qname)) {\n\t\t\treturn errorHandler.fatalError('Attribute ' + qname + ' redefined');\n\t\t}\n\t\tif (!isHTML && value.indexOf('<') >= 0) {\n\t\t\treturn errorHandler.fatalError(\"Unescaped '<' not allowed in attributes values\");\n\t\t}\n\t\tel.addValue(\n\t\t\tqname,\n\t\t\t// @see https://www.w3.org/TR/xml/#AVNormalize\n\t\t\t// since the xmldom sax parser does not \"interpret\" DTD the following is not implemented:\n\t\t\t// - recursive replacement of (DTD) entity references\n\t\t\t// - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA\n\t\t\tvalue.replace(/[\\t\\n\\r]/g, ' ').replace(ENTITY_REG, entityReplacer),\n\t\t\tstartIndex\n\t\t);\n\t}\n\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG; //status\n\twhile (true) {\n\t\tvar c = source.charAt(p);\n\t\tswitch (c) {\n\t\t\tcase '=':\n\t\t\t\tif (s === S_ATTR) {\n\t\t\t\t\t//attrName\n\t\t\t\t\tattrName = source.slice(start, p);\n\t\t\t\t\ts = S_EQ;\n\t\t\t\t} else if (s === S_ATTR_SPACE) {\n\t\t\t\t\ts = S_EQ;\n\t\t\t\t} else {\n\t\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\t\tthrow new Error('attribute equal must after attrName'); // No known test case\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"'\":\n\t\t\tcase '\"':\n\t\t\t\tif (\n\t\t\t\t\ts === S_EQ ||\n\t\t\t\t\ts === S_ATTR //|| s == S_ATTR_SPACE\n\t\t\t\t) {\n\t\t\t\t\t//equal\n\t\t\t\t\tif (s === S_ATTR) {\n\t\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"');\n\t\t\t\t\t\tattrName = source.slice(start, p);\n\t\t\t\t\t}\n\t\t\t\t\tstart = p + 1;\n\t\t\t\t\tp = source.indexOf(c, start);\n\t\t\t\t\tif (p > 0) {\n\t\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\t\taddAttribute(attrName, value, start - 1);\n\t\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\t\tthrow new Error(\"attribute value no end '\" + c + \"' match\");\n\t\t\t\t\t}\n\t\t\t\t} else if (s == S_ATTR_NOQUOT_VALUE) {\n\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\t\terrorHandler.warning('attribute \"' + attrName + '\" missed start quot(' + c + ')!!');\n\t\t\t\t\tstart = p + 1;\n\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t} else {\n\t\t\t\t\t//fatalError: no equal before\n\t\t\t\t\tthrow new Error('attribute value must after \"=\"'); // No known test case\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '/':\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase S_TAG:\n\t\t\t\t\t\tel.setTagName(source.slice(start, p));\n\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\t\ts = S_TAG_CLOSE;\n\t\t\t\t\t\tel.closed = true;\n\t\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\tcase S_ATTR:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\t\tel.closed = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t//case S_EQ:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error(\"attribute invalid close char('/')\"); // No known test case\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '': //end document\n\t\t\t\terrorHandler.error('unexpected end of input');\n\t\t\t\tif (s == S_TAG) {\n\t\t\t\t\tel.setTagName(source.slice(start, p));\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\tcase '>':\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase S_TAG:\n\t\t\t\t\t\tel.setTagName(source.slice(start, p));\n\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\t\tbreak; //normal\n\t\t\t\t\tcase S_ATTR_NOQUOT_VALUE: //Compatible state\n\t\t\t\t\tcase S_ATTR:\n\t\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\t\tif (value.slice(-1) === '/') {\n\t\t\t\t\t\t\tel.closed = true;\n\t\t\t\t\t\t\tvalue = value.slice(0, -1);\n\t\t\t\t\t\t}\n\t\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\t\tif (s === S_ATTR_SPACE) {\n\t\t\t\t\t\t\tvalue = attrName;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (s == S_ATTR_NOQUOT_VALUE) {\n\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + value + '\" missed quot(\")!');\n\t\t\t\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!isHTML) {\n\t\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + value + '\" missed value!! \"' + value + '\" instead!!');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\taddAttribute(value, value, start);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase S_EQ:\n\t\t\t\t\t\tif (!isHTML) {\n\t\t\t\t\t\t\treturn errorHandler.fatalError('AttValue: \\' or \" expected');\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\t\tcase '\\u0080':\n\t\t\t\tc = ' ';\n\t\t\tdefault:\n\t\t\t\tif (c <= ' ') {\n\t\t\t\t\t//space\n\t\t\t\t\tswitch (s) {\n\t\t\t\t\t\tcase S_TAG:\n\t\t\t\t\t\t\tel.setTagName(source.slice(start, p)); //tagName\n\t\t\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_ATTR:\n\t\t\t\t\t\t\tattrName = source.slice(start, p);\n\t\t\t\t\t\t\ts = S_ATTR_SPACE;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\t\t\tvar value = source.slice(start, p);\n\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + value + '\" missed quot(\")!!');\n\t\t\t\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t//case S_TAG_SPACE:\n\t\t\t\t\t\t//case S_EQ:\n\t\t\t\t\t\t//case S_ATTR_SPACE:\n\t\t\t\t\t\t//\tvoid();break;\n\t\t\t\t\t\t//case S_TAG_CLOSE:\n\t\t\t\t\t\t//ignore warning\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t//not space\n\t\t\t\t\t//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n\t\t\t\t\t//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\n\t\t\t\t\tswitch (s) {\n\t\t\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\n\t\t\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\t\t\tif (!isHTML) {\n\t\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + attrName + '\" missed value!! \"' + attrName + '\" instead2!!');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\taddAttribute(attrName, attrName, start);\n\t\t\t\t\t\t\tstart = p;\n\t\t\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\t\t\terrorHandler.warning('attribute space is required\"' + attrName + '\"!!');\n\t\t\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\t\t\tstart = p;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_EQ:\n\t\t\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\n\t\t\t\t\t\t\tstart = p;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t} //end outer switch\n\t\tp++;\n\t}\n}\n\n/**\n * @returns\n * `true` if a new namespace has been defined.\n */\nfunction appendElement(el, domBuilder, currentNSMap) {\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\tvar i = el.length;\n\twhile (i--) {\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif (nsp > 0) {\n\t\t\tvar prefix = (a.prefix = qName.slice(0, nsp));\n\t\t\tvar localName = qName.slice(nsp + 1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName;\n\t\t} else {\n\t\t\tlocalName = qName;\n\t\t\tprefix = null;\n\t\t\tnsPrefix = qName === 'xmlns' && '';\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName;\n\t\t//prefix == null for no ns prefix attribute\n\t\tif (nsPrefix !== false) {\n\t\t\t//hack!!\n\t\t\tif (localNSMap == null) {\n\t\t\t\tlocalNSMap = Object.create(null);\n\t\t\t\t_copy(currentNSMap, (currentNSMap = Object.create(null)));\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = NAMESPACE.XMLNS;\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value);\n\t\t}\n\t}\n\tvar i = el.length;\n\twhile (i--) {\n\t\ta = el[i];\n\t\tif (a.prefix) {\n\t\t\t//no prefix attribute has no namespace\n\t\t\tif (a.prefix === 'xml') {\n\t\t\t\ta.uri = NAMESPACE.XML;\n\t\t\t}\n\t\t\tif (a.prefix !== 'xmlns') {\n\t\t\t\ta.uri = currentNSMap[a.prefix];\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif (nsp > 0) {\n\t\tprefix = el.prefix = tagName.slice(0, nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp + 1);\n\t} else {\n\t\tprefix = null; //important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = (el.uri = currentNSMap[prefix || '']);\n\tdomBuilder.startElement(ns, localName, tagName, el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif (el.closed) {\n\t\tdomBuilder.endElement(ns, localName, tagName);\n\t\tif (localNSMap) {\n\t\t\tfor (prefix in localNSMap) {\n\t\t\t\tif (hasOwn(localNSMap, prefix)) {\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\t//parseStack.push(el);\n\t\treturn true;\n\t}\n}\n\nfunction parseHtmlSpecialContent(source, elStartEnd, tagName, entityReplacer, domBuilder) {\n\t// https://html.spec.whatwg.org/#raw-text-elements\n\t// https://html.spec.whatwg.org/#escapable-raw-text-elements\n\t// https://html.spec.whatwg.org/#cdata-rcdata-restrictions:raw-text-elements\n\t// TODO: https://html.spec.whatwg.org/#cdata-rcdata-restrictions\n\tvar isEscapableRaw = isHTMLEscapableRawTextElement(tagName);\n\tif (isEscapableRaw || isHTMLRawTextElement(tagName)) {\n\t\tvar elEndStart = source.indexOf('', elStartEnd);\n\t\tvar text = source.substring(elStartEnd + 1, elEndStart);\n\n\t\tif (isEscapableRaw) {\n\t\t\ttext = text.replace(ENTITY_REG, entityReplacer);\n\t\t}\n\t\tdomBuilder.characters(text, 0, text.length);\n\t\treturn elEndStart;\n\t}\n\treturn elStartEnd + 1;\n}\n\nfunction _copy(source, target) {\n\tfor (var n in source) {\n\t\tif (hasOwn(source, n)) {\n\t\t\ttarget[n] = source[n];\n\t\t}\n\t}\n}\n\n/**\n * @typedef ParseUtils\n * @property {function(relativeIndex: number?): string | undefined} char\n * Provides look ahead access to a singe character relative to the current index.\n * @property {function(): number} getIndex\n * Provides read-only access to the current index.\n * @property {function(reg: RegExp): string | null} getMatch\n * Applies the provided regular expression enforcing that it starts at the current index and\n * returns the complete matching string,\n * and moves the current index by the length of the matching string.\n * @property {function(): string} getSource\n * Provides read-only access to the complete source.\n * @property {function(places: number?): void} skip\n * moves the current index by places (defaults to 1)\n * @property {function(): number} skipBlanks\n * Moves the current index by the amount of white space that directly follows the current index\n * and returns the amount of whitespace chars skipped (0..n),\n * or -1 if the end of the source was reached.\n * @property {function(): string} substringFromIndex\n * creates a substring from the current index to the end of `source`\n * @property {function(compareWith: string): boolean} substringStartsWith\n * Checks if source contains `compareWith`,\n * starting from the current index.\n * @see {@link parseUtils}\n */\n\n/**\n * A temporary scope for parsing and look ahead operations in `source`,\n * starting from index `start`.\n *\n * Some operations move the current index by a number of positions,\n * after which `getIndex` returns the new index.\n *\n * @param {string} source\n * @param {number} start\n * @returns {ParseUtils}\n */\nfunction parseUtils(source, start) {\n\tvar index = start;\n\n\tfunction char(n) {\n\t\tn = n || 0;\n\t\treturn source.charAt(index + n);\n\t}\n\n\tfunction skip(n) {\n\t\tn = n || 1;\n\t\tindex += n;\n\t}\n\n\tfunction skipBlanks() {\n\t\tvar blanks = 0;\n\t\twhile (index < source.length) {\n\t\t\tvar c = char();\n\t\t\tif (c !== ' ' && c !== '\\n' && c !== '\\t' && c !== '\\r') {\n\t\t\t\treturn blanks;\n\t\t\t}\n\t\t\tblanks++;\n\t\t\tskip();\n\t\t}\n\t\treturn -1;\n\t}\n\tfunction substringFromIndex() {\n\t\treturn source.substring(index);\n\t}\n\tfunction substringStartsWith(text) {\n\t\treturn source.substring(index, index + text.length) === text;\n\t}\n\n\tfunction getMatch(args) {\n\t\tvar expr = g.reg('^', args);\n\t\tvar match = expr.exec(substringFromIndex());\n\t\tif (match) {\n\t\t\tskip(match[0].length);\n\t\t\treturn match[0];\n\t\t}\n\t\treturn null;\n\t}\n\treturn {\n\t\tchar: char,\n\t\tgetIndex: function () {\n\t\t\treturn index;\n\t\t},\n\t\tgetMatch: getMatch,\n\t\tgetSource: function () {\n\t\t\treturn source;\n\t\t},\n\t\tskip: skip,\n\t\tskipBlanks: skipBlanks,\n\t\tsubstringFromIndex: substringFromIndex,\n\t\tsubstringStartsWith: substringStartsWith,\n\t};\n}\n\n/**\n * @param {ParseUtils} p\n * @param {DOMHandler} errorHandler\n * @returns {string}\n */\nfunction parseDoctypeInternalSubset(p, errorHandler) {\n\t/**\n\t * @param {ParseUtils} p\n\t * @param {DOMHandler} errorHandler\n\t * @returns {string}\n\t */\n\tfunction parsePI(p, errorHandler) {\n\t\tvar match = g.PI.exec(p.substringFromIndex());\n\t\tif (!match) {\n\t\t\treturn errorHandler.fatalError('processing instruction is not well-formed at position ' + p.getIndex());\n\t\t}\n\t\tif (match[1].toLowerCase() === 'xml') {\n\t\t\treturn errorHandler.fatalError(\n\t\t\t\t'xml declaration is only allowed at the start of the document, but found at position ' + p.getIndex()\n\t\t\t);\n\t\t}\n\t\tp.skip(match[0].length);\n\t\treturn match[0];\n\t}\n\t// Parse internal subset\n\tvar source = p.getSource();\n\tif (p.char() === '[') {\n\t\tp.skip(1);\n\t\tvar intSubsetStart = p.getIndex();\n\t\twhile (p.getIndex() < source.length) {\n\t\t\tp.skipBlanks();\n\t\t\tif (p.char() === ']') {\n\t\t\t\tvar internalSubset = source.substring(intSubsetStart, p.getIndex());\n\t\t\t\tp.skip(1);\n\t\t\t\treturn internalSubset;\n\t\t\t}\n\t\t\tvar current = null;\n\t\t\t// Only in external subset\n\t\t\t// if (char() === '<' && char(1) === '!' && char(2) === '[') {\n\t\t\t// \tparseConditionalSections(p, errorHandler);\n\t\t\t// } else\n\t\t\tif (p.char() === '<' && p.char(1) === '!') {\n\t\t\t\tswitch (p.char(2)) {\n\t\t\t\t\tcase 'E': // ELEMENT | ENTITY\n\t\t\t\t\t\tif (p.char(3) === 'L') {\n\t\t\t\t\t\t\tcurrent = p.getMatch(g.elementdecl);\n\t\t\t\t\t\t} else if (p.char(3) === 'N') {\n\t\t\t\t\t\t\tcurrent = p.getMatch(g.EntityDecl);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'A': // ATTRIBUTE\n\t\t\t\t\t\tcurrent = p.getMatch(g.AttlistDecl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'N': // NOTATION\n\t\t\t\t\t\tcurrent = p.getMatch(g.NotationDecl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '-': // COMMENT\n\t\t\t\t\t\tcurrent = p.getMatch(g.Comment);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if (p.char() === '<' && p.char(1) === '?') {\n\t\t\t\tcurrent = parsePI(p, errorHandler);\n\t\t\t} else if (p.char() === '%') {\n\t\t\t\tcurrent = p.getMatch(g.PEReference);\n\t\t\t} else {\n\t\t\t\treturn errorHandler.fatalError('Error detected in Markup declaration');\n\t\t\t}\n\t\t\tif (!current) {\n\t\t\t\treturn errorHandler.fatalError('Error in internal subset at position ' + p.getIndex());\n\t\t\t}\n\t\t}\n\t\treturn errorHandler.fatalError('doctype internal subset is not well-formed, missing ]');\n\t}\n}\n\n/**\n * Called when the parser encounters an element starting with '') {\n\t\t\t\treturn errorHandler.fatalError('doctype not terminated with > at position ' + p.getIndex());\n\t\t\t}\n\t\t\tp.skip(1);\n\t\t\tdomBuilder.startDTD(doctype.name, doctype.publicId, doctype.systemId, doctype.internalSubset);\n\t\t\tdomBuilder.endDTD();\n\t\t\treturn p.getIndex();\n\t\t}\n\t\tdefault:\n\t\t\treturn errorHandler.fatalError('Not well-formed XML starting with \" 0) {\n\t\t\treturn errorHandler.fatalError(\n\t\t\t\t'processing instruction at position ' + start + ' is an xml declaration which is only at the start of the document'\n\t\t\t);\n\t\t}\n\t\tif (!g.XMLDecl.test(source.substring(start))) {\n\t\t\treturn errorHandler.fatalError('xml declaration is not well-formed');\n\t\t}\n\t}\n\tdomBuilder.processingInstruction(match[1], match[2]);\n\treturn start + match[0].length;\n}\n\nfunction ElementAttributes() {\n\tthis.attributeNames = Object.create(null);\n}\n\nElementAttributes.prototype = {\n\tsetTagName: function (tagName) {\n\t\tif (!g.QName_exact.test(tagName)) {\n\t\t\tthrow new Error('invalid tagName:' + tagName);\n\t\t}\n\t\tthis.tagName = tagName;\n\t},\n\taddValue: function (qName, value, offset) {\n\t\tif (!g.QName_exact.test(qName)) {\n\t\t\tthrow new Error('invalid attribute:' + qName);\n\t\t}\n\t\tthis.attributeNames[qName] = this.length;\n\t\tthis[this.length++] = { qName: qName, value: value, offset: offset };\n\t},\n\tlength: 0,\n\tgetLocalName: function (i) {\n\t\treturn this[i].localName;\n\t},\n\tgetLocator: function (i) {\n\t\treturn this[i].locator;\n\t},\n\tgetQName: function (i) {\n\t\treturn this[i].qName;\n\t},\n\tgetURI: function (i) {\n\t\treturn this[i].uri;\n\t},\n\tgetValue: function (i) {\n\t\treturn this[i].value;\n\t},\n\t//\t,getIndex:function(uri, localName)){\n\t//\t\tif(localName){\n\t//\n\t//\t\t}else{\n\t//\t\t\tvar qName = uri\n\t//\t\t}\n\t//\t},\n\t//\tgetValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},\n\t//\tgetType:function(uri,localName){}\n\t//\tgetType:function(i){},\n};\n\nexports.XMLReader = XMLReader;\nexports.parseUtils = parseUtils;\nexports.parseDoctypeCommentOrCData = parseDoctypeCommentOrCData;\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.VectorTile;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.VectorTile;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.TileJSON;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.format.MVT;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.Observable;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Circle;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Fill;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Icon;","/**\n * @module ol/transform\n */\nimport {assert} from './asserts.js';\n\n/**\n * An array representing an affine 2d transformation for use with\n * {@link module:ol/transform} functions. The array has 6 elements.\n * @typedef {!Array} Transform\n * @api\n */\n\n/**\n * Collection of affine 2d transformation functions. The functions work on an\n * array of 6 elements. The element order is compatible with the [SVGMatrix\n * interface](https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix) and is\n * a subset (elements a to f) of a 3×3 matrix:\n * ```\n * [ a c e ]\n * [ b d f ]\n * [ 0 0 1 ]\n * ```\n */\n\n/**\n * @private\n * @type {Transform}\n */\nconst tmp_ = new Array(6);\n\n/**\n * Create an identity transform.\n * @return {!Transform} Identity transform.\n */\nexport function create() {\n return [1, 0, 0, 1, 0, 0];\n}\n\n/**\n * Resets the given transform to an identity transform.\n * @param {!Transform} transform Transform.\n * @return {!Transform} Transform.\n */\nexport function reset(transform) {\n return set(transform, 1, 0, 0, 1, 0, 0);\n}\n\n/**\n * Multiply the underlying matrices of two transforms and return the result in\n * the first transform.\n * @param {!Transform} transform1 Transform parameters of matrix 1.\n * @param {!Transform} transform2 Transform parameters of matrix 2.\n * @return {!Transform} transform1 multiplied with transform2.\n */\nexport function multiply(transform1, transform2) {\n const a1 = transform1[0];\n const b1 = transform1[1];\n const c1 = transform1[2];\n const d1 = transform1[3];\n const e1 = transform1[4];\n const f1 = transform1[5];\n const a2 = transform2[0];\n const b2 = transform2[1];\n const c2 = transform2[2];\n const d2 = transform2[3];\n const e2 = transform2[4];\n const f2 = transform2[5];\n\n transform1[0] = a1 * a2 + c1 * b2;\n transform1[1] = b1 * a2 + d1 * b2;\n transform1[2] = a1 * c2 + c1 * d2;\n transform1[3] = b1 * c2 + d1 * d2;\n transform1[4] = a1 * e2 + c1 * f2 + e1;\n transform1[5] = b1 * e2 + d1 * f2 + f1;\n\n return transform1;\n}\n\n/**\n * Set the transform components a-f on a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} a The a component of the transform.\n * @param {number} b The b component of the transform.\n * @param {number} c The c component of the transform.\n * @param {number} d The d component of the transform.\n * @param {number} e The e component of the transform.\n * @param {number} f The f component of the transform.\n * @return {!Transform} Matrix with transform applied.\n */\nexport function set(transform, a, b, c, d, e, f) {\n transform[0] = a;\n transform[1] = b;\n transform[2] = c;\n transform[3] = d;\n transform[4] = e;\n transform[5] = f;\n return transform;\n}\n\n/**\n * Set transform on one matrix from another matrix.\n * @param {!Transform} transform1 Matrix to set transform to.\n * @param {!Transform} transform2 Matrix to set transform from.\n * @return {!Transform} transform1 with transform from transform2 applied.\n */\nexport function setFromArray(transform1, transform2) {\n transform1[0] = transform2[0];\n transform1[1] = transform2[1];\n transform1[2] = transform2[2];\n transform1[3] = transform2[3];\n transform1[4] = transform2[4];\n transform1[5] = transform2[5];\n return transform1;\n}\n\n/**\n * Transforms the given coordinate with the given transform returning the\n * resulting, transformed coordinate. The coordinate will be modified in-place.\n *\n * @param {Transform} transform The transformation.\n * @param {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} coordinate The coordinate to transform.\n * @return {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} return coordinate so that operations can be\n * chained together.\n */\nexport function apply(transform, coordinate) {\n const x = coordinate[0];\n const y = coordinate[1];\n coordinate[0] = transform[0] * x + transform[2] * y + transform[4];\n coordinate[1] = transform[1] * x + transform[3] * y + transform[5];\n return coordinate;\n}\n\n/**\n * Applies rotation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} angle Angle in radians.\n * @return {!Transform} The rotated transform.\n */\nexport function rotate(transform, angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n return multiply(transform, set(tmp_, cos, sin, -sin, cos, 0, 0));\n}\n\n/**\n * Applies scale to a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scaled transform.\n */\nexport function scale(transform, x, y) {\n return multiply(transform, set(tmp_, x, 0, 0, y, 0, 0));\n}\n\n/**\n * Creates a scale transform.\n * @param {!Transform} target Transform to overwrite.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scale transform.\n */\nexport function makeScale(target, x, y) {\n return set(target, x, 0, 0, y, 0, 0);\n}\n\n/**\n * Applies translation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} dx Translation x.\n * @param {number} dy Translation y.\n * @return {!Transform} The translated transform.\n */\nexport function translate(transform, dx, dy) {\n return multiply(transform, set(tmp_, 1, 0, 0, 1, dx, dy));\n}\n\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative).\n * @param {!Transform} transform The transform (will be modified in place).\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {!Transform} The composite transform.\n */\nexport function compose(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {\n const sin = Math.sin(angle);\n const cos = Math.cos(angle);\n transform[0] = sx * cos;\n transform[1] = sy * sin;\n transform[2] = -sx * sin;\n transform[3] = sy * cos;\n transform[4] = dx2 * sx * cos - dy2 * sx * sin + dx1;\n transform[5] = dx2 * sy * sin + dy2 * sy * cos + dy1;\n return transform;\n}\n\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative). The resulting transform\n * string can be applied as `transform` property of an HTMLElement's style.\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {string} The composite css transform.\n * @api\n */\nexport function composeCssTransform(dx1, dy1, sx, sy, angle, dx2, dy2) {\n return toString(compose(create(), dx1, dy1, sx, sy, angle, dx2, dy2));\n}\n\n/**\n * Invert the given transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (source) transform.\n */\nexport function invert(source) {\n return makeInverse(source, source);\n}\n\n/**\n * Invert the given transform.\n * @param {!Transform} target Transform to be set as the inverse of\n * the source transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (target) transform.\n */\nexport function makeInverse(target, source) {\n const det = determinant(source);\n assert(det !== 0, 'Transformation matrix cannot be inverted');\n\n const a = source[0];\n const b = source[1];\n const c = source[2];\n const d = source[3];\n const e = source[4];\n const f = source[5];\n\n target[0] = d / det;\n target[1] = -b / det;\n target[2] = -c / det;\n target[3] = a / det;\n target[4] = (c * f - d * e) / det;\n target[5] = -(a * f - b * e) / det;\n\n return target;\n}\n\n/**\n * Returns the determinant of the given matrix.\n * @param {!Transform} mat Matrix.\n * @return {number} Determinant.\n */\nexport function determinant(mat) {\n return mat[0] * mat[3] - mat[1] * mat[2];\n}\n\n/**\n * @type {Array}\n */\nconst matrixPrecision = [1e6, 1e6, 1e6, 1e6, 2, 2];\n\n/**\n * A rounded string version of the transform. This can be used\n * for CSS transforms.\n * @param {!Transform} mat Matrix.\n * @return {string} The transform as a string.\n */\nexport function toString(mat) {\n const transformString =\n 'matrix(' +\n mat\n .map(\n (value, i) =>\n Math.round(value * matrixPrecision[i]) / matrixPrecision[i],\n )\n .join(', ') +\n ')';\n return transformString;\n}\n","/**\n * @module ol/extent\n */\nimport Relationship from './extent/Relationship.js';\n\n/**\n * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`.\n * @typedef {Array} Extent\n * @api\n */\n\n/**\n * Extent corner.\n * @typedef {'bottom-left' | 'bottom-right' | 'top-left' | 'top-right'} Corner\n */\n\n/**\n * Build an extent that includes all given coordinates.\n *\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Bounding extent.\n * @api\n */\nexport function boundingExtent(coordinates) {\n const extent = createEmpty();\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Array} xs Xs.\n * @param {Array} ys Ys.\n * @param {Extent} [dest] Destination extent.\n * @private\n * @return {Extent} Extent.\n */\nfunction _boundingExtentXYs(xs, ys, dest) {\n const minX = Math.min.apply(null, xs);\n const minY = Math.min.apply(null, ys);\n const maxX = Math.max.apply(null, xs);\n const maxY = Math.max.apply(null, ys);\n return createOrUpdate(minX, minY, maxX, maxY, dest);\n}\n\n/**\n * Return extent increased by the provided value.\n * @param {Extent} extent Extent.\n * @param {number} value The amount by which the extent should be buffered.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n * @api\n */\nexport function buffer(extent, value, dest) {\n if (dest) {\n dest[0] = extent[0] - value;\n dest[1] = extent[1] - value;\n dest[2] = extent[2] + value;\n dest[3] = extent[3] + value;\n return dest;\n }\n return [\n extent[0] - value,\n extent[1] - value,\n extent[2] + value,\n extent[3] + value,\n ];\n}\n\n/**\n * Creates a clone of an extent.\n *\n * @param {Extent} extent Extent to clone.\n * @param {Extent} [dest] Extent.\n * @return {Extent} The clone.\n */\nexport function clone(extent, dest) {\n if (dest) {\n dest[0] = extent[0];\n dest[1] = extent[1];\n dest[2] = extent[2];\n dest[3] = extent[3];\n return dest;\n }\n return extent.slice();\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {number} Closest squared distance.\n */\nexport function closestSquaredDistanceXY(extent, x, y) {\n let dx, dy;\n if (x < extent[0]) {\n dx = extent[0] - x;\n } else if (extent[2] < x) {\n dx = x - extent[2];\n } else {\n dx = 0;\n }\n if (y < extent[1]) {\n dy = extent[1] - y;\n } else if (extent[3] < y) {\n dy = y - extent[3];\n } else {\n dy = 0;\n }\n return dx * dx + dy * dy;\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n * @api\n */\nexport function containsCoordinate(extent, coordinate) {\n return containsXY(extent, coordinate[0], coordinate[1]);\n}\n\n/**\n * Check if one extent contains another.\n *\n * An extent is deemed contained if it lies completely within the other extent,\n * including if they share one or more edges.\n *\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The second extent is contained by or on the edge of the\n * first.\n * @api\n */\nexport function containsExtent(extent1, extent2) {\n return (\n extent1[0] <= extent2[0] &&\n extent2[2] <= extent1[2] &&\n extent1[1] <= extent2[1] &&\n extent2[3] <= extent1[3]\n );\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @return {boolean} The x, y values are contained in the extent.\n * @api\n */\nexport function containsXY(extent, x, y) {\n return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];\n}\n\n/**\n * Get the relationship between a coordinate and extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate The coordinate.\n * @return {import(\"./extent/Relationship.js\").default} The relationship (bitwise compare with\n * import(\"./extent/Relationship.js\").Relationship).\n */\nexport function coordinateRelationship(extent, coordinate) {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const x = coordinate[0];\n const y = coordinate[1];\n let relationship = Relationship.UNKNOWN;\n if (x < minX) {\n relationship = relationship | Relationship.LEFT;\n } else if (x > maxX) {\n relationship = relationship | Relationship.RIGHT;\n }\n if (y < minY) {\n relationship = relationship | Relationship.BELOW;\n } else if (y > maxY) {\n relationship = relationship | Relationship.ABOVE;\n }\n if (relationship === Relationship.UNKNOWN) {\n relationship = Relationship.INTERSECTING;\n }\n return relationship;\n}\n\n/**\n * Create an empty extent.\n * @return {Extent} Empty extent.\n * @api\n */\nexport function createEmpty() {\n return [Infinity, Infinity, -Infinity, -Infinity];\n}\n\n/**\n * Create a new extent or update the provided extent.\n * @param {number} minX Minimum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxX Maximum X.\n * @param {number} maxY Maximum Y.\n * @param {Extent} [dest] Destination extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdate(minX, minY, maxX, maxY, dest) {\n if (dest) {\n dest[0] = minX;\n dest[1] = minY;\n dest[2] = maxX;\n dest[3] = maxY;\n return dest;\n }\n return [minX, minY, maxX, maxY];\n}\n\n/**\n * Create a new empty extent or make the provided one empty.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateEmpty(dest) {\n return createOrUpdate(Infinity, Infinity, -Infinity, -Infinity, dest);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinate(coordinate, dest) {\n const x = coordinate[0];\n const y = coordinate[1];\n return createOrUpdate(x, y, x, y, dest);\n}\n\n/**\n * @param {Array} coordinates Coordinates.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinates(coordinates, dest) {\n const extent = createOrUpdateEmpty(dest);\n return extendCoordinates(extent, coordinates);\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromFlatCoordinates(\n flatCoordinates,\n offset,\n end,\n stride,\n dest,\n) {\n const extent = createOrUpdateEmpty(dest);\n return extendFlatCoordinates(extent, flatCoordinates, offset, end, stride);\n}\n\n/**\n * @param {Array>} rings Rings.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromRings(rings, dest) {\n const extent = createOrUpdateEmpty(dest);\n return extendRings(extent, rings);\n}\n\n/**\n * Determine if two extents are equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The two extents are equivalent.\n * @api\n */\nexport function equals(extent1, extent2) {\n return (\n extent1[0] == extent2[0] &&\n extent1[2] == extent2[2] &&\n extent1[1] == extent2[1] &&\n extent1[3] == extent2[3]\n );\n}\n\n/**\n * Determine if two extents are approximately equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {number} tolerance Tolerance in extent coordinate units.\n * @return {boolean} The two extents differ by less than the tolerance.\n */\nexport function approximatelyEquals(extent1, extent2, tolerance) {\n return (\n Math.abs(extent1[0] - extent2[0]) < tolerance &&\n Math.abs(extent1[2] - extent2[2]) < tolerance &&\n Math.abs(extent1[1] - extent2[1]) < tolerance &&\n Math.abs(extent1[3] - extent2[3]) < tolerance\n );\n}\n\n/**\n * Modify an extent to include another extent.\n * @param {Extent} extent1 The extent to be modified.\n * @param {Extent} extent2 The extent that will be included in the first.\n * @return {Extent} A reference to the first (extended) extent.\n * @api\n */\nexport function extend(extent1, extent2) {\n if (extent2[0] < extent1[0]) {\n extent1[0] = extent2[0];\n }\n if (extent2[2] > extent1[2]) {\n extent1[2] = extent2[2];\n }\n if (extent2[1] < extent1[1]) {\n extent1[1] = extent2[1];\n }\n if (extent2[3] > extent1[3]) {\n extent1[3] = extent2[3];\n }\n return extent1;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n */\nexport function extendCoordinate(extent, coordinate) {\n if (coordinate[0] < extent[0]) {\n extent[0] = coordinate[0];\n }\n if (coordinate[0] > extent[2]) {\n extent[2] = coordinate[0];\n }\n if (coordinate[1] < extent[1]) {\n extent[1] = coordinate[1];\n }\n if (coordinate[1] > extent[3]) {\n extent[3] = coordinate[1];\n }\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Extent.\n */\nexport function extendCoordinates(extent, coordinates) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Extent} Extent.\n */\nexport function extendFlatCoordinates(\n extent,\n flatCoordinates,\n offset,\n end,\n stride,\n) {\n for (; offset < end; offset += stride) {\n extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array>} rings Rings.\n * @return {Extent} Extent.\n */\nexport function extendRings(extent, rings) {\n for (let i = 0, ii = rings.length; i < ii; ++i) {\n extendCoordinates(extent, rings[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n */\nexport function extendXY(extent, x, y) {\n extent[0] = Math.min(extent[0], x);\n extent[1] = Math.min(extent[1], y);\n extent[2] = Math.max(extent[2], x);\n extent[3] = Math.max(extent[3], y);\n}\n\n/**\n * This function calls `callback` for each corner of the extent. If the\n * callback returns a truthy value the function returns that value\n * immediately. Otherwise the function returns `false`.\n * @param {Extent} extent Extent.\n * @param {function(import(\"./coordinate.js\").Coordinate): S} callback Callback.\n * @return {S|boolean} Value.\n * @template S\n */\nexport function forEachCorner(extent, callback) {\n let val;\n val = callback(getBottomLeft(extent));\n if (val) {\n return val;\n }\n val = callback(getBottomRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopLeft(extent));\n if (val) {\n return val;\n }\n return false;\n}\n\n/**\n * Get the size of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Area.\n * @api\n */\nexport function getArea(extent) {\n let area = 0;\n if (!isEmpty(extent)) {\n area = getWidth(extent) * getHeight(extent);\n }\n return area;\n}\n\n/**\n * Get the bottom left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom left coordinate.\n * @api\n */\nexport function getBottomLeft(extent) {\n return [extent[0], extent[1]];\n}\n\n/**\n * Get the bottom right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom right coordinate.\n * @api\n */\nexport function getBottomRight(extent) {\n return [extent[2], extent[1]];\n}\n\n/**\n * Get the center coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Center.\n * @api\n */\nexport function getCenter(extent) {\n return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];\n}\n\n/**\n * Get a corner coordinate of an extent.\n * @param {Extent} extent Extent.\n * @param {Corner} corner Corner.\n * @return {import(\"./coordinate.js\").Coordinate} Corner coordinate.\n */\nexport function getCorner(extent, corner) {\n let coordinate;\n if (corner === 'bottom-left') {\n coordinate = getBottomLeft(extent);\n } else if (corner === 'bottom-right') {\n coordinate = getBottomRight(extent);\n } else if (corner === 'top-left') {\n coordinate = getTopLeft(extent);\n } else if (corner === 'top-right') {\n coordinate = getTopRight(extent);\n } else {\n throw new Error('Invalid corner');\n }\n return coordinate;\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Enlarged area.\n */\nexport function getEnlargedArea(extent1, extent2) {\n const minX = Math.min(extent1[0], extent2[0]);\n const minY = Math.min(extent1[1], extent2[1]);\n const maxX = Math.max(extent1[2], extent2[2]);\n const maxY = Math.max(extent1[3], extent2[3]);\n return (maxX - minX) * (maxY - minY);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @param {Extent} [dest] Destination extent.\n * @return {Extent} Extent.\n */\nexport function getForViewAndSize(center, resolution, rotation, size, dest) {\n const [x0, y0, x1, y1, x2, y2, x3, y3] = getRotatedViewport(\n center,\n resolution,\n rotation,\n size,\n );\n return createOrUpdate(\n Math.min(x0, x1, x2, x3),\n Math.min(y0, y1, y2, y3),\n Math.max(x0, x1, x2, x3),\n Math.max(y0, y1, y2, y3),\n dest,\n );\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array} Linear ring representing the viewport.\n */\nexport function getRotatedViewport(center, resolution, rotation, size) {\n const dx = (resolution * size[0]) / 2;\n const dy = (resolution * size[1]) / 2;\n const cosRotation = Math.cos(rotation);\n const sinRotation = Math.sin(rotation);\n const xCos = dx * cosRotation;\n const xSin = dx * sinRotation;\n const yCos = dy * cosRotation;\n const ySin = dy * sinRotation;\n const x = center[0];\n const y = center[1];\n return [\n x - xCos + ySin,\n y - xSin - yCos,\n x - xCos - ySin,\n y - xSin + yCos,\n x + xCos - ySin,\n y + xSin + yCos,\n x + xCos + ySin,\n y + xSin - yCos,\n x - xCos + ySin,\n y - xSin - yCos,\n ];\n}\n\n/**\n * Get the height of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Height.\n * @api\n */\nexport function getHeight(extent) {\n return extent[3] - extent[1];\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Intersection area.\n */\nexport function getIntersectionArea(extent1, extent2) {\n const intersection = getIntersection(extent1, extent2);\n return getArea(intersection);\n}\n\n/**\n * Get the intersection of two extents.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {Extent} [dest] Optional extent to populate with intersection.\n * @return {Extent} Intersecting extent.\n * @api\n */\nexport function getIntersection(extent1, extent2, dest) {\n const intersection = dest ? dest : createEmpty();\n if (intersects(extent1, extent2)) {\n if (extent1[0] > extent2[0]) {\n intersection[0] = extent1[0];\n } else {\n intersection[0] = extent2[0];\n }\n if (extent1[1] > extent2[1]) {\n intersection[1] = extent1[1];\n } else {\n intersection[1] = extent2[1];\n }\n if (extent1[2] < extent2[2]) {\n intersection[2] = extent1[2];\n } else {\n intersection[2] = extent2[2];\n }\n if (extent1[3] < extent2[3]) {\n intersection[3] = extent1[3];\n } else {\n intersection[3] = extent2[3];\n }\n } else {\n createOrUpdateEmpty(intersection);\n }\n return intersection;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @return {number} Margin.\n */\nexport function getMargin(extent) {\n return getWidth(extent) + getHeight(extent);\n}\n\n/**\n * Get the size (width, height) of an extent.\n * @param {Extent} extent The extent.\n * @return {import(\"./size.js\").Size} The extent size.\n * @api\n */\nexport function getSize(extent) {\n return [extent[2] - extent[0], extent[3] - extent[1]];\n}\n\n/**\n * Get the top left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top left coordinate.\n * @api\n */\nexport function getTopLeft(extent) {\n return [extent[0], extent[3]];\n}\n\n/**\n * Get the top right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top right coordinate.\n * @api\n */\nexport function getTopRight(extent) {\n return [extent[2], extent[3]];\n}\n\n/**\n * Get the width of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Width.\n * @api\n */\nexport function getWidth(extent) {\n return extent[2] - extent[0];\n}\n\n/**\n * Determine if one extent intersects another.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent.\n * @return {boolean} The two extents intersect.\n * @api\n */\nexport function intersects(extent1, extent2) {\n return (\n extent1[0] <= extent2[2] &&\n extent1[2] >= extent2[0] &&\n extent1[1] <= extent2[3] &&\n extent1[3] >= extent2[1]\n );\n}\n\n/**\n * Determine if an extent is empty.\n * @param {Extent} extent Extent.\n * @return {boolean} Is empty.\n * @api\n */\nexport function isEmpty(extent) {\n return extent[2] < extent[0] || extent[3] < extent[1];\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function returnOrUpdate(extent, dest) {\n if (dest) {\n dest[0] = extent[0];\n dest[1] = extent[1];\n dest[2] = extent[2];\n dest[3] = extent[3];\n return dest;\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} value Value.\n */\nexport function scaleFromCenter(extent, value) {\n const deltaX = ((extent[2] - extent[0]) / 2) * (value - 1);\n const deltaY = ((extent[3] - extent[1]) / 2) * (value - 1);\n extent[0] -= deltaX;\n extent[2] += deltaX;\n extent[1] -= deltaY;\n extent[3] += deltaY;\n}\n\n/**\n * Determine if the segment between two coordinates intersects (crosses,\n * touches, or is contained by) the provided extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} start Segment start coordinate.\n * @param {import(\"./coordinate.js\").Coordinate} end Segment end coordinate.\n * @return {boolean} The segment intersects the extent.\n */\nexport function intersectsSegment(extent, start, end) {\n let intersects = false;\n const startRel = coordinateRelationship(extent, start);\n const endRel = coordinateRelationship(extent, end);\n if (\n startRel === Relationship.INTERSECTING ||\n endRel === Relationship.INTERSECTING\n ) {\n intersects = true;\n } else {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const startX = start[0];\n const startY = start[1];\n const endX = end[0];\n const endY = end[1];\n const slope = (endY - startY) / (endX - startX);\n let x, y;\n if (!!(endRel & Relationship.ABOVE) && !(startRel & Relationship.ABOVE)) {\n // potentially intersects top\n x = endX - (endY - maxY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.RIGHT) &&\n !(startRel & Relationship.RIGHT)\n ) {\n // potentially intersects right\n y = endY - (endX - maxX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.BELOW) &&\n !(startRel & Relationship.BELOW)\n ) {\n // potentially intersects bottom\n x = endX - (endY - minY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.LEFT) &&\n !(startRel & Relationship.LEFT)\n ) {\n // potentially intersects left\n y = endY - (endX - minX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n }\n return intersects;\n}\n\n/**\n * Apply a transform function to the extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./proj.js\").TransformFunction} transformFn Transform function.\n * Called with `[minX, minY, maxX, maxY]` extent coordinates.\n * @param {Extent} [dest] Destination extent.\n * @param {number} [stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {Extent} Extent.\n * @api\n */\nexport function applyTransform(extent, transformFn, dest, stops) {\n if (isEmpty(extent)) {\n return createOrUpdateEmpty(dest);\n }\n let coordinates = [];\n if (stops > 1) {\n const width = extent[2] - extent[0];\n const height = extent[3] - extent[1];\n for (let i = 0; i < stops; ++i) {\n coordinates.push(\n extent[0] + (width * i) / stops,\n extent[1],\n extent[2],\n extent[1] + (height * i) / stops,\n extent[2] - (width * i) / stops,\n extent[3],\n extent[0],\n extent[3] - (height * i) / stops,\n );\n }\n } else {\n coordinates = [\n extent[0],\n extent[1],\n extent[2],\n extent[1],\n extent[2],\n extent[3],\n extent[0],\n extent[3],\n ];\n }\n transformFn(coordinates, coordinates, 2);\n const xs = [];\n const ys = [];\n for (let i = 0, l = coordinates.length; i < l; i += 2) {\n xs.push(coordinates[i]);\n ys.push(coordinates[i + 1]);\n }\n return _boundingExtentXYs(xs, ys, dest);\n}\n\n/**\n * Modifies the provided extent in-place to be within the real world\n * extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @return {Extent} The extent within the real world extent.\n */\nexport function wrapX(extent, projection) {\n const projectionExtent = projection.getExtent();\n const center = getCenter(extent);\n if (\n projection.canWrapX() &&\n (center[0] < projectionExtent[0] || center[0] >= projectionExtent[2])\n ) {\n const worldWidth = getWidth(projectionExtent);\n const worldsAway = Math.floor(\n (center[0] - projectionExtent[0]) / worldWidth,\n );\n const offset = worldsAway * worldWidth;\n extent[0] -= offset;\n extent[2] -= offset;\n }\n return extent;\n}\n\n/**\n * Fits the extent to the real world\n *\n * If the extent does not cross the anti meridian, this will return the extent in an array\n * If the extent crosses the anti meridian, the extent will be sliced, so each part fits within the\n * real world\n *\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @param {boolean} [multiWorld] Return all worlds\n * @return {Array} The extent within the real world extent.\n */\nexport function wrapAndSliceX(extent, projection, multiWorld) {\n if (projection.canWrapX()) {\n const projectionExtent = projection.getExtent();\n\n if (!isFinite(extent[0]) || !isFinite(extent[2])) {\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n }\n\n wrapX(extent, projection);\n const worldWidth = getWidth(projectionExtent);\n\n if (getWidth(extent) > worldWidth && !multiWorld) {\n // the extent wraps around on itself\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n }\n if (extent[0] < projectionExtent[0]) {\n // the extent crosses the anti meridian, so it needs to be sliced\n return [\n [extent[0] + worldWidth, extent[1], projectionExtent[2], extent[3]],\n [projectionExtent[0], extent[1], extent[2], extent[3]],\n ];\n }\n if (extent[2] > projectionExtent[2]) {\n // the extent crosses the anti meridian, so it needs to be sliced\n return [\n [extent[0], extent[1], projectionExtent[2], extent[3]],\n [projectionExtent[0], extent[1], extent[2] - worldWidth, extent[3]],\n ];\n }\n }\n\n return [extent];\n}\n","/**\n * @module ol/math\n */\n\n/**\n * Takes a number and clamps it to within the provided bounds.\n * @param {number} value The input number.\n * @param {number} min The minimum value to return.\n * @param {number} max The maximum value to return.\n * @return {number} The input number if it is within bounds, or the nearest\n * number within the bounds.\n */\nexport function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Returns the square of the closest distance between the point (x, y) and the\n * line segment (x1, y1) to (x2, y2).\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredSegmentDistance(x, y, x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n if (dx !== 0 || dy !== 0) {\n const t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n x1 = x2;\n y1 = y2;\n } else if (t > 0) {\n x1 += dx * t;\n y1 += dy * t;\n }\n }\n return squaredDistance(x, y, x1, y1);\n}\n\n/**\n * Returns the square of the distance between the points (x1, y1) and (x2, y2).\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredDistance(x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n return dx * dx + dy * dy;\n}\n\n/**\n * Solves system of linear equations using Gaussian elimination method.\n *\n * @param {Array>} mat Augmented matrix (n x n + 1 column)\n * in row-major order.\n * @return {Array|null} The resulting vector.\n */\nexport function solveLinearSystem(mat) {\n const n = mat.length;\n\n for (let i = 0; i < n; i++) {\n // Find max in the i-th column (ignoring i - 1 first rows)\n let maxRow = i;\n let maxEl = Math.abs(mat[i][i]);\n for (let r = i + 1; r < n; r++) {\n const absValue = Math.abs(mat[r][i]);\n if (absValue > maxEl) {\n maxEl = absValue;\n maxRow = r;\n }\n }\n\n if (maxEl === 0) {\n return null; // matrix is singular\n }\n\n // Swap max row with i-th (current) row\n const tmp = mat[maxRow];\n mat[maxRow] = mat[i];\n mat[i] = tmp;\n\n // Subtract the i-th row to make all the remaining rows 0 in the i-th column\n for (let j = i + 1; j < n; j++) {\n const coef = -mat[j][i] / mat[i][i];\n for (let k = i; k < n + 1; k++) {\n if (i == k) {\n mat[j][k] = 0;\n } else {\n mat[j][k] += coef * mat[i][k];\n }\n }\n }\n }\n\n // Solve Ax=b for upper triangular matrix A (mat)\n const x = new Array(n);\n for (let l = n - 1; l >= 0; l--) {\n x[l] = mat[l][n] / mat[l][l];\n for (let m = l - 1; m >= 0; m--) {\n mat[m][n] -= mat[m][l] * x[l];\n }\n }\n return x;\n}\n\n/**\n * Converts radians to to degrees.\n *\n * @param {number} angleInRadians Angle in radians.\n * @return {number} Angle in degrees.\n */\nexport function toDegrees(angleInRadians) {\n return (angleInRadians * 180) / Math.PI;\n}\n\n/**\n * Converts degrees to radians.\n *\n * @param {number} angleInDegrees Angle in degrees.\n * @return {number} Angle in radians.\n */\nexport function toRadians(angleInDegrees) {\n return (angleInDegrees * Math.PI) / 180;\n}\n\n/**\n * Returns the modulo of a / b, depending on the sign of b.\n *\n * @param {number} a Dividend.\n * @param {number} b Divisor.\n * @return {number} Modulo.\n */\nexport function modulo(a, b) {\n const r = a % b;\n return r * b < 0 ? r + b : r;\n}\n\n/**\n * Calculates the linearly interpolated value of x between a and b.\n *\n * @param {number} a Number\n * @param {number} b Number\n * @param {number} x Value to be interpolated.\n * @return {number} Interpolated value.\n */\nexport function lerp(a, b, x) {\n return a + x * (b - a);\n}\n\n/**\n * Returns a number with a limited number of decimal digits.\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The input number with a limited number of decimal digits.\n */\nexport function toFixed(n, decimals) {\n const factor = Math.pow(10, decimals);\n return Math.round(n * factor) / factor;\n}\n\n/**\n * Rounds a number to the nearest integer value considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The nearest integer.\n */\nexport function round(n, decimals) {\n return Math.round(toFixed(n, decimals));\n}\n\n/**\n * Rounds a number to the next smaller integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next smaller integer.\n */\nexport function floor(n, decimals) {\n return Math.floor(toFixed(n, decimals));\n}\n\n/**\n * Rounds a number to the next bigger integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next bigger integer.\n */\nexport function ceil(n, decimals) {\n return Math.ceil(toFixed(n, decimals));\n}\n\n/**\n * Wraps a number between some minimum and maximum values.\n * @param {number} n The number to wrap.\n * @param {number} min The minimum of the range (inclusive).\n * @param {number} max The maximum of the range (exclusive).\n * @return {number} The wrapped number.\n */\nexport function wrap(n, min, max) {\n if (n >= min && n < max) {\n return n;\n }\n const range = max - min;\n return ((((n - min) % range) + range) % range) + min;\n}\n","/**\n * @module ol/geom/flat/simplify\n */\n// Based on simplify-js https://github.com/mourner/simplify-js\n// Copyright (c) 2012, Vladimir Agafonkin\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//\n// 1. Redistributions of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n\nimport {squaredDistance, squaredSegmentDistance} from '../../math.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {boolean} highQuality Highest quality.\n * @param {Array} [simplifiedFlatCoordinates] Simplified flat\n * coordinates.\n * @return {Array} Simplified line string.\n */\nexport function simplifyLineString(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n highQuality,\n simplifiedFlatCoordinates,\n) {\n simplifiedFlatCoordinates =\n simplifiedFlatCoordinates !== undefined ? simplifiedFlatCoordinates : [];\n if (!highQuality) {\n end = radialDistance(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n );\n flatCoordinates = simplifiedFlatCoordinates;\n offset = 0;\n stride = 2;\n }\n simplifiedFlatCoordinates.length = douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n );\n return simplifiedFlatCoordinates;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n) {\n const n = (end - offset) / stride;\n if (n < 3) {\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n /** @type {Array} */\n const markers = new Array(n);\n markers[0] = 1;\n markers[n - 1] = 1;\n /** @type {Array} */\n const stack = [offset, end - stride];\n let index = 0;\n while (stack.length > 0) {\n const last = stack.pop();\n const first = stack.pop();\n let maxSquaredDistance = 0;\n const x1 = flatCoordinates[first];\n const y1 = flatCoordinates[first + 1];\n const x2 = flatCoordinates[last];\n const y2 = flatCoordinates[last + 1];\n for (let i = first + stride; i < last; i += stride) {\n const x = flatCoordinates[i];\n const y = flatCoordinates[i + 1];\n const squaredDistance = squaredSegmentDistance(x, y, x1, y1, x2, y2);\n if (squaredDistance > maxSquaredDistance) {\n index = i;\n maxSquaredDistance = squaredDistance;\n }\n }\n if (maxSquaredDistance > squaredTolerance) {\n markers[(index - offset) / stride] = 1;\n if (first + stride < index) {\n stack.push(first, index);\n }\n if (index + stride < last) {\n stack.push(index, last);\n }\n }\n }\n for (let i = 0; i < n; ++i) {\n if (markers[i]) {\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride + 1];\n }\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n simplifiedOffset = douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n );\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEndss,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n /** @type {Array} */\n const simplifiedEnds = [];\n simplifiedOffset = douglasPeuckerArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n );\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function radialDistance(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n) {\n if (end <= offset + stride) {\n // zero or one point, no simplification possible, so copy and return\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n // copy first point\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n let x2 = x1;\n let y2 = y1;\n for (offset += stride; offset < end; offset += stride) {\n x2 = flatCoordinates[offset];\n y2 = flatCoordinates[offset + 1];\n if (squaredDistance(x1, y1, x2, y2) > squaredTolerance) {\n // copy point at offset\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n }\n }\n if (x2 != x1 || y2 != y1) {\n // copy last point\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {number} value Value.\n * @param {number} tolerance Tolerance.\n * @return {number} Rounded value.\n */\nexport function snap(value, tolerance) {\n return tolerance * Math.round(value / tolerance);\n}\n\n/**\n * Simplifies a line string using an algorithm designed by Tim Schaub.\n * Coordinates are snapped to the nearest value in a virtual grid and\n * consecutive duplicate coordinates are discarded. This effectively preserves\n * topology as the simplification of any subsection of a line string is\n * independent of the rest of the line string. This means that, for examples,\n * the common edge between two polygons will be simplified to the same line\n * string independently in both polygons. This implementation uses a single\n * pass over the coordinates and eliminates intermediate collinear points.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function quantize(\n flatCoordinates,\n offset,\n end,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n) {\n // do nothing if the line is empty\n if (offset == end) {\n return simplifiedOffset;\n }\n // snap the first coordinate (P1)\n let x1 = snap(flatCoordinates[offset], tolerance);\n let y1 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // add the first coordinate to the output\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n // find the next coordinate that does not snap to the same value as the first\n // coordinate (P2)\n let x2, y2;\n do {\n x2 = snap(flatCoordinates[offset], tolerance);\n y2 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n if (offset == end) {\n // all coordinates snap to the same value, the line collapses to a point\n // push the last snapped value anyway to ensure that the output contains\n // at least two points\n // FIXME should we really return at least two points anyway?\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n }\n } while (x2 == x1 && y2 == y1);\n while (offset < end) {\n // snap the next coordinate (P3)\n const x3 = snap(flatCoordinates[offset], tolerance);\n const y3 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // skip P3 if it is equal to P2\n if (x3 == x2 && y3 == y2) {\n continue;\n }\n // calculate the delta between P1 and P2\n const dx1 = x2 - x1;\n const dy1 = y2 - y1;\n // calculate the delta between P3 and P1\n const dx2 = x3 - x1;\n const dy2 = y3 - y1;\n // if P1, P2, and P3 are colinear and P3 is further from P1 than P2 is from\n // P1 in the same direction then P2 is on the straight line between P1 and\n // P3\n if (\n dx1 * dy2 == dy1 * dx2 &&\n ((dx1 < 0 && dx2 < dx1) || dx1 == dx2 || (dx1 > 0 && dx2 > dx1)) &&\n ((dy1 < 0 && dy2 < dy1) || dy1 == dy2 || (dy1 > 0 && dy2 > dy1))\n ) {\n // discard P2 and set P2 = P3\n x2 = x3;\n y2 = y3;\n continue;\n }\n // either P1, P2, and P3 are not colinear, or they are colinear but P3 is\n // between P3 and P1 or on the opposite half of the line to P2. add P2,\n // and continue with P1 = P2 and P2 = P3\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n x2 = x3;\n y2 = y3;\n }\n // add the last point (P2)\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function quantizeArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n simplifiedOffset = quantize(\n flatCoordinates,\n offset,\n end,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n );\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function quantizeMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEndss,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n /** @type {Array} */\n const simplifiedEnds = [];\n simplifiedOffset = quantizeArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n );\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n","/**\n * @module ol/array\n */\n\n/**\n * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1.\n * https://github.com/darkskyapp/binary-search\n *\n * @param {Array<*>} haystack Items to search through.\n * @param {*} needle The item to look for.\n * @param {Function} [comparator] Comparator function.\n * @return {number} The index of the item if found, -1 if not.\n */\nexport function binarySearch(haystack, needle, comparator) {\n let mid, cmp;\n comparator = comparator || ascending;\n let low = 0;\n let high = haystack.length;\n let found = false;\n\n while (low < high) {\n /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n * to double (which gives the wrong results). */\n mid = low + ((high - low) >> 1);\n cmp = +comparator(haystack[mid], needle);\n\n if (cmp < 0.0) {\n /* Too low. */\n low = mid + 1;\n } else {\n /* Key found or too high */\n high = mid;\n found = !cmp;\n }\n }\n\n /* Key not found. */\n return found ? low : ~low;\n}\n\n/**\n * Compare function sorting arrays in ascending order. Safe to use for numeric values.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is less than, equal to, or greater than the second.\n */\nexport function ascending(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n}\n\n/**\n * Compare function sorting arrays in descending order. Safe to use for numeric values.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is greater than, equal to, or less than the second.\n */\nexport function descending(a, b) {\n return a < b ? 1 : a > b ? -1 : 0;\n}\n\n/**\n * {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution} can use a function\n * of this type to determine which nearest resolution to use.\n *\n * This function takes a `{number}` representing a value between two array entries,\n * a `{number}` representing the value of the nearest higher entry and\n * a `{number}` representing the value of the nearest lower entry\n * as arguments and returns a `{number}`. If a negative number or zero is returned\n * the lower value will be used, if a positive number is returned the higher value\n * will be used.\n * @typedef {function(number, number, number): number} NearestDirectionFunction\n * @api\n */\n\n/**\n * @param {Array} arr Array in descending order.\n * @param {number} target Target.\n * @param {number|NearestDirectionFunction} direction\n * 0 means return the nearest,\n * > 0 means return the largest nearest,\n * < 0 means return the smallest nearest.\n * @return {number} Index.\n */\nexport function linearFindNearest(arr, target, direction) {\n if (arr[0] <= target) {\n return 0;\n }\n\n const n = arr.length;\n if (target <= arr[n - 1]) {\n return n - 1;\n }\n\n if (typeof direction === 'function') {\n for (let i = 1; i < n; ++i) {\n const candidate = arr[i];\n if (candidate === target) {\n return i;\n }\n if (candidate < target) {\n if (direction(target, arr[i - 1], candidate) > 0) {\n return i - 1;\n }\n return i;\n }\n }\n return n - 1;\n }\n\n if (direction > 0) {\n for (let i = 1; i < n; ++i) {\n if (arr[i] < target) {\n return i - 1;\n }\n }\n return n - 1;\n }\n\n if (direction < 0) {\n for (let i = 1; i < n; ++i) {\n if (arr[i] <= target) {\n return i;\n }\n }\n return n - 1;\n }\n\n for (let i = 1; i < n; ++i) {\n if (arr[i] == target) {\n return i;\n }\n if (arr[i] < target) {\n if (arr[i - 1] - target < target - arr[i]) {\n return i - 1;\n }\n return i;\n }\n }\n return n - 1;\n}\n\n/**\n * @param {Array<*>} arr Array.\n * @param {number} begin Begin index.\n * @param {number} end End index.\n */\nexport function reverseSubArray(arr, begin, end) {\n while (begin < end) {\n const tmp = arr[begin];\n arr[begin] = arr[end];\n arr[end] = tmp;\n ++begin;\n --end;\n }\n}\n\n/**\n * @param {Array} arr The array to modify.\n * @param {!Array|VALUE} data The elements or arrays of elements to add to arr.\n * @template VALUE\n */\nexport function extend(arr, data) {\n const extension = Array.isArray(data) ? data : [data];\n const length = extension.length;\n for (let i = 0; i < length; i++) {\n arr[arr.length] = extension[i];\n }\n}\n\n/**\n * @param {Array} arr The array to modify.\n * @param {VALUE} obj The element to remove.\n * @template VALUE\n * @return {boolean} If the element was removed.\n */\nexport function remove(arr, obj) {\n const i = arr.indexOf(obj);\n const found = i > -1;\n if (found) {\n arr.splice(i, 1);\n }\n return found;\n}\n\n/**\n * @param {Array|Uint8ClampedArray} arr1 The first array to compare.\n * @param {Array|Uint8ClampedArray} arr2 The second array to compare.\n * @return {boolean} Whether the two arrays are equal.\n */\nexport function equals(arr1, arr2) {\n const len1 = arr1.length;\n if (len1 !== arr2.length) {\n return false;\n }\n for (let i = 0; i < len1; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Sort the passed array such that the relative order of equal elements is preserved.\n * See https://en.wikipedia.org/wiki/Sorting_algorithm#Stability for details.\n * @param {Array<*>} arr The array to sort (modifies original).\n * @param {!function(*, *): number} compareFnc Comparison function.\n * @api\n */\nexport function stableSort(arr, compareFnc) {\n const length = arr.length;\n const tmp = Array(arr.length);\n let i;\n for (i = 0; i < length; i++) {\n tmp[i] = {index: i, value: arr[i]};\n }\n tmp.sort(function (a, b) {\n return compareFnc(a.value, b.value) || a.index - b.index;\n });\n for (i = 0; i < arr.length; i++) {\n arr[i] = tmp[i].value;\n }\n}\n\n/**\n * @param {Array<*>} arr The array to test.\n * @param {Function} [func] Comparison function.\n * @param {boolean} [strict] Strictly sorted (default false).\n * @return {boolean} Return index.\n */\nexport function isSorted(arr, func, strict) {\n const compare = func || ascending;\n return arr.every(function (currentVal, index) {\n if (index === 0) {\n return true;\n }\n const res = compare(arr[index - 1], currentVal);\n return !(res > 0 || (strict && res === 0));\n });\n}\n","/**\n * @module ol/geom/flat/contains\n */\nimport {forEachCorner} from '../../extent.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} Contains extent.\n */\nexport function linearRingContainsExtent(\n flatCoordinates,\n offset,\n end,\n stride,\n extent,\n) {\n const outside = forEachCorner(\n extent,\n /**\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} Contains (x, y).\n */\n function (coordinate) {\n return !linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n coordinate[0],\n coordinate[1],\n );\n },\n );\n return !outside;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n x,\n y,\n) {\n // https://geomalgorithms.com/a03-_inclusion.html\n // Copyright 2000 softSurfer, 2012 Dan Sunday\n // This code may be freely used and modified for any purpose\n // providing that this copyright notice is included with it.\n // SoftSurfer makes no warranty for this code, and cannot be held\n // liable for any real or imagined damage resulting from its use.\n // Users of this code must verify correctness for their application.\n let wn = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n if (y1 <= y) {\n if (y2 > y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) > 0) {\n wn++;\n }\n } else if (y2 <= y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) < 0) {\n wn--;\n }\n x1 = x2;\n y1 = y2;\n }\n return wn !== 0;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingsContainsXY(\n flatCoordinates,\n offset,\n ends,\n stride,\n x,\n y,\n) {\n if (ends.length === 0) {\n return false;\n }\n if (!linearRingContainsXY(flatCoordinates, offset, ends[0], stride, x, y)) {\n return false;\n }\n for (let i = 1, ii = ends.length; i < ii; ++i) {\n if (\n linearRingContainsXY(flatCoordinates, ends[i - 1], ends[i], stride, x, y)\n ) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingssContainsXY(\n flatCoordinates,\n offset,\n endss,\n stride,\n x,\n y,\n) {\n if (endss.length === 0) {\n return false;\n }\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n return true;\n }\n offset = ends[ends.length - 1];\n }\n return false;\n}\n","/**\n * @module ol/geom/flat/interiorpoint\n */\nimport {ascending} from '../../array.js';\nimport {linearRingsContainsXY} from './contains.js';\n\n/**\n * Calculates a point that is likely to lie in the interior of the linear rings.\n * Inspired by JTS's com.vividsolutions.jts.geom.Geometry#getInteriorPoint.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Array} flatCenters Flat centers.\n * @param {number} flatCentersOffset Flat center offset.\n * @param {Array} [dest] Destination.\n * @return {Array} Destination point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointOfArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n flatCenters,\n flatCentersOffset,\n dest,\n) {\n let i, ii, x, x1, x2, y1, y2;\n const y = flatCenters[flatCentersOffset + 1];\n /** @type {Array} */\n const intersections = [];\n // Calculate intersections with the horizontal line\n for (let r = 0, rr = ends.length; r < rr; ++r) {\n const end = ends[r];\n x1 = flatCoordinates[end - stride];\n y1 = flatCoordinates[end - stride + 1];\n for (i = offset; i < end; i += stride) {\n x2 = flatCoordinates[i];\n y2 = flatCoordinates[i + 1];\n if ((y <= y1 && y2 <= y) || (y1 <= y && y <= y2)) {\n x = ((y - y1) / (y2 - y1)) * (x2 - x1) + x1;\n intersections.push(x);\n }\n x1 = x2;\n y1 = y2;\n }\n }\n // Find the longest segment of the horizontal line that has its center point\n // inside the linear ring.\n let pointX = NaN;\n let maxSegmentLength = -Infinity;\n intersections.sort(ascending);\n x1 = intersections[0];\n for (i = 1, ii = intersections.length; i < ii; ++i) {\n x2 = intersections[i];\n const segmentLength = Math.abs(x2 - x1);\n if (segmentLength > maxSegmentLength) {\n x = (x1 + x2) / 2;\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n pointX = x;\n maxSegmentLength = segmentLength;\n }\n }\n x1 = x2;\n }\n if (isNaN(pointX)) {\n // There is no horizontal line that has its center point inside the linear\n // ring. Use the center of the the linear ring's extent.\n pointX = flatCenters[flatCentersOffset];\n }\n if (dest) {\n dest.push(pointX, y, maxSegmentLength);\n return dest;\n }\n return [pointX, y, maxSegmentLength];\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array} flatCenters Flat centers.\n * @return {Array} Interior points as XYM coordinates, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointsOfMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n flatCenters,\n) {\n /** @type {Array} */\n let interiorPoints = [];\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n interiorPoints = getInteriorPointOfArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n flatCenters,\n 2 * i,\n interiorPoints,\n );\n offset = ends[ends.length - 1];\n }\n return interiorPoints;\n}\n","/**\n * @module ol/proj/Units\n */\n\n/**\n * @typedef {'radians' | 'degrees' | 'ft' | 'm' | 'pixels' | 'tile-pixels' | 'us-ft'} Units\n * Projection units.\n */\n\n/**\n * See http://duff.ess.washington.edu/data/raster/drg/docs/geotiff.txt\n * @type {Object}\n */\nconst unitByCode = {\n '9001': 'm',\n '9002': 'ft',\n '9003': 'us-ft',\n '9101': 'radians',\n '9102': 'degrees',\n};\n\n/**\n * @param {number} code Unit code.\n * @return {Units} Units.\n */\nexport function fromCode(code) {\n return unitByCode[code];\n}\n\n/**\n * @typedef {Object} MetersPerUnitLookup\n * @property {number} radians Radians\n * @property {number} degrees Degrees\n * @property {number} ft Feet\n * @property {number} m Meters\n * @property {number} us-ft US feet\n */\n\n/**\n * Meters per unit lookup table.\n * @const\n * @type {MetersPerUnitLookup}\n * @api\n */\nexport const METERS_PER_UNIT = {\n // use the radius of the Normal sphere\n 'radians': 6370997 / (2 * Math.PI),\n 'degrees': (2 * Math.PI * 6370997) / 360,\n 'ft': 0.3048,\n 'm': 1,\n 'us-ft': 1200 / 3937,\n};\n","/**\n * @module ol/proj/Projection\n */\nimport {METERS_PER_UNIT} from './Units.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} code The SRS identifier code, e.g. `EPSG:4326`.\n * @property {import(\"./Units.js\").Units} [units] Units. Required unless a\n * proj4 projection is defined for `code`.\n * @property {import(\"../extent.js\").Extent} [extent] The validity extent for the SRS.\n * @property {string} [axisOrientation='enu'] The axis orientation as specified in Proj4.\n * @property {boolean} [global=false] Whether the projection is valid for the whole globe.\n * @property {number} [metersPerUnit] The meters per unit for the SRS.\n * If not provided, the `units` are used to get the meters per unit from the {@link METERS_PER_UNIT}\n * lookup table.\n * @property {import(\"../extent.js\").Extent} [worldExtent] The world extent for the SRS.\n * @property {function(number, import(\"../coordinate.js\").Coordinate):number} [getPointResolution]\n * Function to determine resolution at a point. The function is called with a\n * `number` view resolution and a {@link module:ol/coordinate~Coordinate} as arguments, and returns\n * the `number` resolution in projection units at the passed coordinate. If this is `undefined`,\n * the default {@link module:ol/proj.getPointResolution} function will be used.\n */\n\n/**\n * @classdesc\n * In most cases, you should not need to create instances of this class.\n * Instead, where projection information is required, you can use a string\n * projection code or identifier (e.g. `EPSG:4326`) instead of a projection\n * instance.\n *\n * The library includes support for transforming coordinates between the following\n * projections:\n *\n * * WGS 84 / Geographic - Using codes `EPSG:4326`, `CRS:84`, `urn:ogc:def:crs:EPSG:6.6:4326`,\n * `urn:ogc:def:crs:OGC:1.3:CRS84`, `urn:ogc:def:crs:OGC:2:84`, `http://www.opengis.net/gml/srs/epsg.xml#4326`,\n * or `urn:x-ogc:def:crs:EPSG:4326`\n * * WGS 84 / Spherical Mercator - Using codes `EPSG:3857`, `EPSG:102100`, `EPSG:102113`, `EPSG:900913`,\n * `urn:ogc:def:crs:EPSG:6.18:3:3857`, or `http://www.opengis.net/gml/srs/epsg.xml#3857`\n * * WGS 84 / UTM zones - Using codes `EPSG:32601` through `EPSG:32660` for northern zones\n * and `EPSG:32701` through `EPSG:32760` for southern zones. Note that the built-in UTM transforms\n * are lower accuracy (with errors on the order of 0.1 m) than those that you might get in a\n * library like [proj4js](https://github.com/proj4js/proj4js).\n *\n * For additional projection support, or to use higher accuracy transforms than the built-in ones, you can use\n * the [proj4js](https://github.com/proj4js/proj4js) library. With `proj4js`, after adding any new projection\n * definitions, call the {@link module:ol/proj/proj4.register} function.\n *\n * You can use the {@link module:ol/proj.get} function to retrieve a projection instance\n * for one of the registered projections.\n *\n * @api\n */\nclass Projection {\n /**\n * @param {Options} options Projection options.\n */\n constructor(options) {\n /**\n * @private\n * @type {string}\n */\n this.code_ = options.code;\n\n /**\n * Units of projected coordinates. When set to `TILE_PIXELS`, a\n * `this.extent_` and `this.worldExtent_` must be configured properly for each\n * tile.\n * @private\n * @type {import(\"./Units.js\").Units}\n */\n this.units_ = /** @type {import(\"./Units.js\").Units} */ (options.units);\n\n /**\n * Validity extent of the projection in projected coordinates. For projections\n * with `TILE_PIXELS` units, this is the extent of the tile in\n * tile pixel space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.extent_ = options.extent !== undefined ? options.extent : null;\n\n /**\n * Extent of the world in EPSG:4326. For projections with\n * `TILE_PIXELS` units, this is the extent of the tile in\n * projected coordinate space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.worldExtent_ =\n options.worldExtent !== undefined ? options.worldExtent : null;\n\n /**\n * @private\n * @type {string}\n */\n this.axisOrientation_ =\n options.axisOrientation !== undefined ? options.axisOrientation : 'enu';\n\n /**\n * @private\n * @type {boolean}\n */\n this.global_ = options.global !== undefined ? options.global : false;\n\n /**\n * @private\n * @type {boolean}\n */\n this.canWrapX_ = !!(this.global_ && this.extent_);\n\n /**\n * @private\n * @type {function(number, import(\"../coordinate.js\").Coordinate):number|undefined}\n */\n this.getPointResolutionFunc_ = options.getPointResolution;\n\n /**\n * @private\n * @type {import(\"../tilegrid/TileGrid.js\").default}\n */\n this.defaultTileGrid_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.metersPerUnit_ = options.metersPerUnit;\n }\n\n /**\n * @return {boolean} The projection is suitable for wrapping the x-axis\n */\n canWrapX() {\n return this.canWrapX_;\n }\n\n /**\n * Get the code for this projection, e.g. 'EPSG:4326'.\n * @return {string} Code.\n * @api\n */\n getCode() {\n return this.code_;\n }\n\n /**\n * Get the validity extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getExtent() {\n return this.extent_;\n }\n\n /**\n * Get the units of this projection.\n * @return {import(\"./Units.js\").Units} Units.\n * @api\n */\n getUnits() {\n return this.units_;\n }\n\n /**\n * Get the amount of meters per unit of this projection. If the projection is\n * not configured with `metersPerUnit` or a units identifier, the return is\n * `undefined`.\n * @return {number|undefined} Meters.\n * @api\n */\n getMetersPerUnit() {\n return this.metersPerUnit_ || METERS_PER_UNIT[this.units_];\n }\n\n /**\n * Get the world extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getWorldExtent() {\n return this.worldExtent_;\n }\n\n /**\n * Get the axis orientation of this projection.\n * Example values are:\n * enu - the default easting, northing, elevation.\n * neu - northing, easting, up - useful for \"lat/long\" geographic coordinates,\n * or south orientated transverse mercator.\n * wnu - westing, northing, up - some planetary coordinate systems have\n * \"west positive\" coordinate systems\n * @return {string} Axis orientation.\n * @api\n */\n getAxisOrientation() {\n return this.axisOrientation_;\n }\n\n /**\n * Is this projection a global projection which spans the whole world?\n * @return {boolean} Whether the projection is global.\n * @api\n */\n isGlobal() {\n return this.global_;\n }\n\n /**\n * Set if the projection is a global projection which spans the whole world\n * @param {boolean} global Whether the projection is global.\n * @api\n */\n setGlobal(global) {\n this.global_ = global;\n this.canWrapX_ = !!(global && this.extent_);\n }\n\n /**\n * @return {import(\"../tilegrid/TileGrid.js\").default} The default tile grid.\n */\n getDefaultTileGrid() {\n return this.defaultTileGrid_;\n }\n\n /**\n * @param {import(\"../tilegrid/TileGrid.js\").default} tileGrid The default tile grid.\n */\n setDefaultTileGrid(tileGrid) {\n this.defaultTileGrid_ = tileGrid;\n }\n\n /**\n * Set the validity extent for this projection.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n setExtent(extent) {\n this.extent_ = extent;\n this.canWrapX_ = !!(this.global_ && extent);\n }\n\n /**\n * Set the world extent for this projection.\n * @param {import(\"../extent.js\").Extent} worldExtent World extent\n * [minlon, minlat, maxlon, maxlat].\n * @api\n */\n setWorldExtent(worldExtent) {\n this.worldExtent_ = worldExtent;\n }\n\n /**\n * Set the getPointResolution function (see {@link module:ol/proj.getPointResolution}\n * for this projection.\n * @param {function(number, import(\"../coordinate.js\").Coordinate):number} func Function\n * @api\n */\n setGetPointResolution(func) {\n this.getPointResolutionFunc_ = func;\n }\n\n /**\n * Get the custom point resolution function for this projection (if set).\n * @return {function(number, import(\"../coordinate.js\").Coordinate):number|undefined} The custom point\n * resolution function (if set).\n */\n getPointResolutionFunc() {\n return this.getPointResolutionFunc_;\n }\n}\n\nexport default Projection;\n","/**\n * @module ol/proj/epsg3857\n */\nimport Projection from './Projection.js';\n\n/**\n * Radius of WGS84 sphere\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n/**\n * @const\n * @type {number}\n */\nexport const HALF_SIZE = Math.PI * RADIUS;\n\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const EXTENT = [-HALF_SIZE, -HALF_SIZE, HALF_SIZE, HALF_SIZE];\n\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const WORLD_EXTENT = [-180, -85, 180, 85];\n\n/**\n * Maximum safe value in y direction\n * @const\n * @type {number}\n */\nexport const MAX_SAFE_Y = RADIUS * Math.log(Math.tan(Math.PI / 2));\n\n/**\n * @classdesc\n * Projection object for web/spherical Mercator (EPSG:3857).\n */\nclass EPSG3857Projection extends Projection {\n /**\n * @param {string} code Code.\n */\n constructor(code) {\n super({\n code: code,\n units: 'm',\n extent: EXTENT,\n global: true,\n worldExtent: WORLD_EXTENT,\n getPointResolution: function (resolution, point) {\n return resolution / Math.cosh(point[1] / RADIUS);\n },\n });\n }\n}\n\n/**\n * Projections equal to EPSG:3857.\n *\n * @const\n * @type {Array}\n */\nexport const PROJECTIONS = [\n new EPSG3857Projection('EPSG:3857'),\n new EPSG3857Projection('EPSG:102100'),\n new EPSG3857Projection('EPSG:102113'),\n new EPSG3857Projection('EPSG:900913'),\n new EPSG3857Projection('http://www.opengis.net/def/crs/EPSG/0/3857'),\n new EPSG3857Projection('http://www.opengis.net/gml/srs/epsg.xml#3857'),\n];\n\n/**\n * Transformation from EPSG:4326 to EPSG:3857.\n *\n * @param {Array} input Input array of coordinate values.\n * @param {Array} [output] Output array of coordinate values.\n * @param {number} [dimension] Dimension (default is `2`).\n * @param {number} [stride] Stride (default is `dimension`).\n * @return {Array} Output array of coordinate values.\n */\nexport function fromEPSG4326(input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n stride = stride ?? dimension;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += stride) {\n output[i] = (HALF_SIZE * input[i]) / 180;\n let y = RADIUS * Math.log(Math.tan((Math.PI * (+input[i + 1] + 90)) / 360));\n if (y > MAX_SAFE_Y) {\n y = MAX_SAFE_Y;\n } else if (y < -MAX_SAFE_Y) {\n y = -MAX_SAFE_Y;\n }\n output[i + 1] = y;\n }\n return output;\n}\n\n/**\n * Transformation from EPSG:3857 to EPSG:4326.\n *\n * @param {Array} input Input array of coordinate values.\n * @param {Array} [output] Output array of coordinate values.\n * @param {number} [dimension] Dimension (default is `2`).\n * @param {number} [stride] Stride (default is `dimension`).\n * @return {Array} Output array of coordinate values.\n */\nexport function toEPSG4326(input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n stride = stride ?? dimension;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += stride) {\n output[i] = (180 * input[i]) / HALF_SIZE;\n output[i + 1] =\n (360 * Math.atan(Math.exp(input[i + 1] / RADIUS))) / Math.PI - 90;\n }\n return output;\n}\n","/**\n * @module ol/proj/epsg4326\n */\nimport Projection from './Projection.js';\n\n/**\n * Semi-major radius of the WGS84 ellipsoid.\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n/**\n * Extent of the EPSG:4326 projection which is the whole world.\n *\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const EXTENT = [-180, -90, 180, 90];\n\n/**\n * @const\n * @type {number}\n */\nexport const METERS_PER_UNIT = (Math.PI * RADIUS) / 180;\n\n/**\n * @classdesc\n * Projection object for WGS84 geographic coordinates (EPSG:4326).\n *\n * Note that OpenLayers does not strictly comply with the EPSG definition.\n * The EPSG registry defines 4326 as a CRS for Latitude,Longitude (y,x).\n * OpenLayers treats EPSG:4326 as a pseudo-projection, with x,y coordinates.\n */\nclass EPSG4326Projection extends Projection {\n /**\n * @param {string} code Code.\n * @param {string} [axisOrientation] Axis orientation.\n */\n constructor(code, axisOrientation) {\n super({\n code: code,\n units: 'degrees',\n extent: EXTENT,\n axisOrientation: axisOrientation,\n global: true,\n metersPerUnit: METERS_PER_UNIT,\n worldExtent: EXTENT,\n });\n }\n}\n\n/**\n * Projections equal to EPSG:4326.\n *\n * @const\n * @type {Array}\n */\nexport const PROJECTIONS = [\n new EPSG4326Projection('CRS:84'),\n new EPSG4326Projection('EPSG:4326', 'neu'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:1.3:CRS84'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:2:84'),\n new EPSG4326Projection('http://www.opengis.net/def/crs/OGC/1.3/CRS84'),\n new EPSG4326Projection('http://www.opengis.net/gml/srs/epsg.xml#4326', 'neu'),\n new EPSG4326Projection('http://www.opengis.net/def/crs/EPSG/0/4326', 'neu'),\n];\n","/**\n * @module ol/proj/projections\n */\n\n/**\n * @type {Object}\n */\nlet cache = {};\n\n/**\n * Clear the projections cache.\n */\nexport function clear() {\n cache = {};\n}\n\n/**\n * Get a cached projection by code.\n * @param {string} code The code for the projection.\n * @return {import(\"./Projection.js\").default|null} The projection (if cached).\n */\nexport function get(code) {\n return (\n cache[code] ||\n cache[code.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\\w+)$/, 'EPSG:$3')] ||\n null\n );\n}\n\n/**\n * Add a projection to the cache.\n * @param {string} code The projection code.\n * @param {import(\"./Projection.js\").default} projection The projection to cache.\n */\nexport function add(code, projection) {\n cache[code] = projection;\n}\n","/**\n * @module ol/proj/transforms\n */\nimport {isEmpty} from '../obj.js';\n\n/**\n * @private\n * @type {!Object>}\n */\nlet transforms = {};\n\n/**\n * Clear the transform cache.\n */\nexport function clear() {\n transforms = {};\n}\n\n/**\n * Registers a conversion function to convert coordinates from the source\n * projection to the destination projection.\n *\n * @param {import(\"./Projection.js\").default} source Source.\n * @param {import(\"./Projection.js\").default} destination Destination.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform.\n */\nexport function add(source, destination, transformFn) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n if (!(sourceCode in transforms)) {\n transforms[sourceCode] = {};\n }\n transforms[sourceCode][destinationCode] = transformFn;\n}\n\n/**\n * Unregisters the conversion function to convert coordinates from the source\n * projection to the destination projection. This method is used to clean up\n * cached transforms during testing.\n *\n * @param {import(\"./Projection.js\").default} source Source projection.\n * @param {import(\"./Projection.js\").default} destination Destination projection.\n * @return {import(\"../proj.js\").TransformFunction} transformFn The unregistered transform.\n */\nexport function remove(source, destination) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n const transform = transforms[sourceCode][destinationCode];\n delete transforms[sourceCode][destinationCode];\n if (isEmpty(transforms[sourceCode])) {\n delete transforms[sourceCode];\n }\n return transform;\n}\n\n/**\n * Get a transform given a source code and a destination code.\n * @param {string} sourceCode The code for the source projection.\n * @param {string} destinationCode The code for the destination projection.\n * @return {import(\"../proj.js\").TransformFunction|null} The transform function (if found).\n */\nexport function get(sourceCode, destinationCode) {\n if (sourceCode in transforms && destinationCode in transforms[sourceCode]) {\n return transforms[sourceCode][destinationCode];\n }\n return null;\n}\n","/**\n * @module ol/proj/utm\n */\n\n/**\n * Adapted from https://github.com/Turbo87/utm\n * Copyright (c) 2012-2017 Tobias Bieniek\n *\n * The functions here provide approximate transforms to and from UTM.\n * They are not appropriate for use beyond the validity extend of a UTM\n * zone, and the accuracy of the transform decreases toward the zone\n * edges.\n */\n\nimport Projection from './Projection.js';\nimport {toDegrees, toRadians, wrap} from '../math.js';\n\n/**\n * @typedef {Object} UTMZone\n * @property {number} number The zone number (1 - 60).\n * @property {boolean} north The northern hemisphere.\n */\n\nconst K0 = 0.9996;\n\nconst E = 0.00669438;\nconst E2 = E * E;\nconst E3 = E2 * E;\nconst E_P2 = E / (1 - E);\n\nconst SQRT_E = Math.sqrt(1 - E);\nconst _E = (1 - SQRT_E) / (1 + SQRT_E);\nconst _E2 = _E * _E;\nconst _E3 = _E2 * _E;\nconst _E4 = _E3 * _E;\nconst _E5 = _E4 * _E;\n\nconst M1 = 1 - E / 4 - (3 * E2) / 64 - (5 * E3) / 256;\nconst M2 = (3 * E) / 8 + (3 * E2) / 32 + (45 * E3) / 1024;\nconst M3 = (15 * E2) / 256 + (45 * E3) / 1024;\nconst M4 = (35 * E3) / 3072;\n\nconst P2 = (3 / 2) * _E - (27 / 32) * _E3 + (269 / 512) * _E5;\nconst P3 = (21 / 16) * _E2 - (55 / 32) * _E4;\nconst P4 = (151 / 96) * _E3 - (417 / 128) * _E5;\nconst P5 = (1097 / 512) * _E4;\n\nconst R = 6378137;\n\n/**\n * @param {number} easting Easting value of coordinate.\n * @param {number} northing Northing value of coordinate.\n * @param {UTMZone} zone The UTM zone.\n * @return {import(\"../coordinate.js\").Coordinate} The transformed coordinate.\n */\nfunction toLonLat(easting, northing, zone) {\n const x = easting - 500000;\n const y = zone.north ? northing : northing - 10000000;\n\n const m = y / K0;\n const mu = m / (R * M1);\n\n const pRad =\n mu +\n P2 * Math.sin(2 * mu) +\n P3 * Math.sin(4 * mu) +\n P4 * Math.sin(6 * mu) +\n P5 * Math.sin(8 * mu);\n\n const pSin = Math.sin(pRad);\n const pSin2 = pSin * pSin;\n\n const pCos = Math.cos(pRad);\n\n const pTan = pSin / pCos;\n const pTan2 = pTan * pTan;\n const pTan4 = pTan2 * pTan2;\n\n const epSin = 1 - E * pSin2;\n const epSinSqrt = Math.sqrt(1 - E * pSin2);\n\n const n = R / epSinSqrt;\n const r = (1 - E) / epSin;\n\n const c = E_P2 * pCos ** 2;\n const c2 = c * c;\n\n const d = x / (n * K0);\n const d2 = d * d;\n const d3 = d2 * d;\n const d4 = d3 * d;\n const d5 = d4 * d;\n const d6 = d5 * d;\n\n const latitude =\n pRad -\n (pTan / r) *\n (d2 / 2 - (d4 / 24) * (5 + 3 * pTan2 + 10 * c - 4 * c2 - 9 * E_P2)) +\n (d6 / 720) * (61 + 90 * pTan2 + 298 * c + 45 * pTan4 - 252 * E_P2 - 3 * c2);\n\n let longitude =\n (d -\n (d3 / 6) * (1 + 2 * pTan2 + c) +\n (d5 / 120) * (5 - 2 * c + 28 * pTan2 - 3 * c2 + 8 * E_P2 + 24 * pTan4)) /\n pCos;\n\n longitude = wrap(\n longitude + toRadians(zoneToCentralLongitude(zone.number)),\n -Math.PI,\n Math.PI,\n );\n\n return [toDegrees(longitude), toDegrees(latitude)];\n}\n\nconst MIN_LATITUDE = -80;\nconst MAX_LATITUDE = 84;\nconst MIN_LONGITUDE = -180;\nconst MAX_LONGITUDE = 180;\n\n/**\n * @param {number} longitude The longitude.\n * @param {number} latitude The latitude.\n * @param {UTMZone} zone The UTM zone.\n * @return {import('../coordinate.js').Coordinate} The UTM coordinate.\n */\nfunction fromLonLat(longitude, latitude, zone) {\n longitude = wrap(longitude, MIN_LONGITUDE, MAX_LONGITUDE);\n\n if (latitude < MIN_LATITUDE) {\n latitude = MIN_LATITUDE;\n } else if (latitude > MAX_LATITUDE) {\n latitude = MAX_LATITUDE;\n }\n\n const latRad = toRadians(latitude);\n const latSin = Math.sin(latRad);\n const latCos = Math.cos(latRad);\n\n const latTan = latSin / latCos;\n const latTan2 = latTan * latTan;\n const latTan4 = latTan2 * latTan2;\n\n const lonRad = toRadians(longitude);\n const centralLon = zoneToCentralLongitude(zone.number);\n const centralLonRad = toRadians(centralLon);\n\n const n = R / Math.sqrt(1 - E * latSin ** 2);\n const c = E_P2 * latCos ** 2;\n\n const a = latCos * wrap(lonRad - centralLonRad, -Math.PI, Math.PI);\n const a2 = a * a;\n const a3 = a2 * a;\n const a4 = a3 * a;\n const a5 = a4 * a;\n const a6 = a5 * a;\n\n const m =\n R *\n (M1 * latRad -\n M2 * Math.sin(2 * latRad) +\n M3 * Math.sin(4 * latRad) -\n M4 * Math.sin(6 * latRad));\n\n const easting =\n K0 *\n n *\n (a +\n (a3 / 6) * (1 - latTan2 + c) +\n (a5 / 120) * (5 - 18 * latTan2 + latTan4 + 72 * c - 58 * E_P2)) +\n 500000;\n\n let northing =\n K0 *\n (m +\n n *\n latTan *\n (a2 / 2 +\n (a4 / 24) * (5 - latTan2 + 9 * c + 4 * c ** 2) +\n (a6 / 720) * (61 - 58 * latTan2 + latTan4 + 600 * c - 330 * E_P2)));\n\n if (!zone.north) {\n northing += 10000000;\n }\n\n return [easting, northing];\n}\n\n/**\n * @param {number} zone The zone number.\n * @return {number} The central longitude in degrees.\n */\nfunction zoneToCentralLongitude(zone) {\n return (zone - 1) * 6 - 180 + 3;\n}\n\n/**\n * @type {Array}\n */\nconst epsgRegExes = [\n /^EPSG:(\\d+)$/,\n /^urn:ogc:def:crs:EPSG::(\\d+)$/,\n /^http:\\/\\/www\\.opengis\\.net\\/def\\/crs\\/EPSG\\/0\\/(\\d+)$/,\n];\n\n/**\n * @param {string} code The projection code.\n * @return {UTMZone|null} The UTM zone info (or null if not UTM).\n */\nexport function zoneFromCode(code) {\n let epsgId = 0;\n for (const re of epsgRegExes) {\n const match = code.match(re);\n if (match) {\n epsgId = parseInt(match[1]);\n break;\n }\n }\n if (!epsgId) {\n return null;\n }\n\n let number = 0;\n let north = false;\n if (epsgId > 32700 && epsgId < 32761) {\n number = epsgId - 32700;\n } else if (epsgId > 32600 && epsgId < 32661) {\n north = true;\n number = epsgId - 32600;\n }\n if (!number) {\n return null;\n }\n\n return {number, north};\n}\n\n/**\n * @param {function(number, number, UTMZone): import('../coordinate.js').Coordinate} transformer The transformer.\n * @param {UTMZone} zone The UTM zone.\n * @return {import('../proj.js').TransformFunction} The transform function.\n */\nfunction makeTransformFunction(transformer, zone) {\n return function (input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n stride = stride ?? dimension;\n if (!output) {\n if (dimension > 2) {\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += stride) {\n const x = input[i];\n const y = input[i + 1];\n const coord = transformer(x, y, zone);\n output[i] = coord[0];\n output[i + 1] = coord[1];\n }\n return output;\n };\n}\n\n/**\n * @param {string} code The projection code.\n * @return {import('./Projection.js').default|null} A projection or null if unable to create one.\n */\nexport function makeProjection(code) {\n const zone = zoneFromCode(code);\n if (!zone) {\n return null;\n }\n return new Projection({code, units: 'm'});\n}\n\n/**\n * @param {import('./Projection.js').default} projection The projection.\n * @return {import('../proj.js').Transforms|null} The transforms lookup or null if unable to handle projection.\n */\nexport function makeTransforms(projection) {\n const zone = zoneFromCode(projection.getCode());\n if (!zone) {\n return null;\n }\n\n return {\n forward: makeTransformFunction(fromLonLat, zone),\n inverse: makeTransformFunction(toLonLat, zone),\n };\n}\n","/**\n * @module ol/proj\n */\n\n/**\n * The ol/proj module stores:\n * * a list of {@link module:ol/proj/Projection~Projection}\n * objects, one for each projection supported by the application\n * * a list of transform functions needed to convert coordinates in one projection\n * into another.\n *\n * The static functions are the methods used to maintain these.\n * Each transform function can handle not only simple coordinate pairs, but also\n * large arrays of coordinates such as vector geometries.\n *\n * When loaded, the library adds projection objects for EPSG:4326 (WGS84\n * geographic coordinates) and EPSG:3857 (Web or Spherical Mercator, as used\n * for example by Bing Maps or OpenStreetMap), together with the relevant\n * transform functions.\n *\n * Additional transforms may be added by using the http://proj4js.org/\n * library (version 2.2 or later). You can use the full build supplied by\n * Proj4js, or create a custom build to support those projections you need; see\n * the Proj4js website for how to do this. You also need the Proj4js definitions\n * for the required projections. These definitions can be obtained from\n * https://epsg.io/, and are a JS function, so can be loaded in a script\n * tag (as in the examples) or pasted into your application.\n *\n * After all required projection definitions are added to proj4's registry (by\n * using `proj4.defs()`), simply call `register(proj4)` from the `ol/proj/proj4`\n * package. Existing transforms are not changed by this function. See\n * examples/wms-image-custom-proj for an example of this.\n *\n * Additional projection definitions can be registered with `proj4.defs()` any\n * time. Just make sure to call `register(proj4)` again; for example, with user-supplied data where you don't\n * know in advance what projections are needed, you can initially load minimal\n * support and then load whichever are requested.\n *\n * Note that Proj4js does not support projection extents. If you want to add\n * one for creating default tile grids, you can add it after the Projection\n * object has been created with `setExtent`, for example,\n * `get('EPSG:1234').setExtent(extent)`.\n *\n * In addition to Proj4js support, any transform functions can be added with\n * {@link module:ol/proj.addCoordinateTransforms}. To use this, you must first create\n * a {@link module:ol/proj/Projection~Projection} object for the new projection and add it with\n * {@link module:ol/proj.addProjection}. You can then add the forward and inverse\n * functions with {@link module:ol/proj.addCoordinateTransforms}. See\n * examples/wms-custom-proj for an example of this.\n *\n * Note that if no transforms are needed and you only need to define the\n * projection, just add a {@link module:ol/proj/Projection~Projection} with\n * {@link module:ol/proj.addProjection}. See examples/wms-no-proj for an example of\n * this.\n */\nimport Projection from './proj/Projection.js';\nimport {\n PROJECTIONS as EPSG3857_PROJECTIONS,\n fromEPSG4326,\n toEPSG4326,\n} from './proj/epsg3857.js';\nimport {PROJECTIONS as EPSG4326_PROJECTIONS} from './proj/epsg4326.js';\nimport {METERS_PER_UNIT} from './proj/Units.js';\nimport {\n add as addProj,\n clear as clearProj,\n get as getProj,\n} from './proj/projections.js';\nimport {\n add as addTransformFunc,\n clear as clearTransformFuncs,\n get as getTransformFunc,\n} from './proj/transforms.js';\nimport {applyTransform, getWidth} from './extent.js';\nimport {clamp, modulo} from './math.js';\nimport {equals, getWorldsAway} from './coordinate.js';\nimport {getDistance} from './sphere.js';\nimport {\n makeProjection as makeUTMProjection,\n makeTransforms as makeUTMTransforms,\n} from './proj/utm.js';\nimport {warn} from './console.js';\n\n/**\n * A projection as {@link module:ol/proj/Projection~Projection}, SRS identifier\n * string or undefined.\n * @typedef {Projection|string|undefined} ProjectionLike\n * @api\n */\n\n/**\n * @typedef {Object} Transforms\n * @property {TransformFunction} forward The forward transform (from geographic).\n * @property {TransformFunction} inverse The inverse transform (to geographic).\n */\n\n/**\n * @type {Array}\n */\nconst transformFactories = [makeUTMTransforms];\n\n/**\n * @type {Array}\n */\nconst projectionFactories = [makeUTMProjection];\n\n/**\n * A transform function accepts an array of input coordinate values, an optional\n * output array, and an optional dimension (default should be 2). The function\n * transforms the input coordinate values, populates the output array, and\n * returns the output array.\n *\n * @callback TransformFunction\n * @param {Array} input\n * @param {Array} [output]\n * @param {number} [dimension]\n * @param {number} [stride]\n * @return {Array}\n *\n * @api\n */\n\nexport {METERS_PER_UNIT};\n\nexport {Projection};\n\nlet showCoordinateWarning = true;\n\n/**\n * @param {boolean} [disable = true] Disable console info about `useGeographic()`\n */\nexport function disableCoordinateWarning(disable) {\n const hide = disable === undefined ? true : disable;\n showCoordinateWarning = !hide;\n}\n\n/**\n * @param {Array} input Input coordinate array.\n * @param {Array} [output] Output array of coordinate values.\n * @return {Array} Output coordinate array (new array, same coordinate\n * values).\n */\nexport function cloneTransform(input, output) {\n if (output !== undefined) {\n for (let i = 0, ii = input.length; i < ii; ++i) {\n output[i] = input[i];\n }\n output = output;\n } else {\n output = input.slice();\n }\n return output;\n}\n\n/**\n * @param {Array} input Input coordinate array.\n * @param {Array} [output] Output array of coordinate values.\n * @return {Array} Input coordinate array (same array as input).\n */\nexport function identityTransform(input, output) {\n if (output !== undefined && input !== output) {\n for (let i = 0, ii = input.length; i < ii; ++i) {\n output[i] = input[i];\n }\n input = output;\n }\n return input;\n}\n\n/**\n * Add a Projection object to the list of supported projections that can be\n * looked up by their code.\n *\n * @param {Projection} projection Projection instance.\n * @api\n */\nexport function addProjection(projection) {\n addProj(projection.getCode(), projection);\n addTransformFunc(projection, projection, cloneTransform);\n}\n\n/**\n * @param {Array} projections Projections.\n */\nexport function addProjections(projections) {\n projections.forEach(addProjection);\n}\n\n/**\n * Fetches a Projection object for the code specified.\n *\n * @param {ProjectionLike} projectionLike Either a code string which is\n * a combination of authority and identifier such as \"EPSG:4326\", or an\n * existing projection object, or undefined.\n * @return {Projection|null} Projection object, or null if not in list.\n * @api\n */\nexport function get(projectionLike) {\n if (!(typeof projectionLike === 'string')) {\n return projectionLike;\n }\n const projection = getProj(projectionLike);\n if (projection) {\n return projection;\n }\n for (const makeProjection of projectionFactories) {\n const projection = makeProjection(projectionLike);\n if (projection) {\n return projection;\n }\n }\n return null;\n}\n\n/**\n * Get the resolution of the point in degrees or distance units.\n * For projections with degrees as the unit this will simply return the\n * provided resolution. For other projections the point resolution is\n * by default estimated by transforming the `point` pixel to EPSG:4326,\n * measuring its width and height on the normal sphere,\n * and taking the average of the width and height.\n * A custom function can be provided for a specific projection, either\n * by setting the `getPointResolution` option in the\n * {@link module:ol/proj/Projection~Projection} constructor or by using\n * {@link module:ol/proj/Projection~Projection#setGetPointResolution} to change an existing\n * projection object.\n * @param {ProjectionLike} projection The projection.\n * @param {number} resolution Nominal resolution in projection units.\n * @param {import(\"./coordinate.js\").Coordinate} point Point to find adjusted resolution at.\n * @param {import(\"./proj/Units.js\").Units} [units] Units to get the point resolution in.\n * Default is the projection's units.\n * @return {number} Point resolution.\n * @api\n */\nexport function getPointResolution(projection, resolution, point, units) {\n projection = get(projection);\n let pointResolution;\n const getter = projection.getPointResolutionFunc();\n if (getter) {\n pointResolution = getter(resolution, point);\n if (units && units !== projection.getUnits()) {\n const metersPerUnit = projection.getMetersPerUnit();\n if (metersPerUnit) {\n pointResolution =\n (pointResolution * metersPerUnit) / METERS_PER_UNIT[units];\n }\n }\n } else {\n const projUnits = projection.getUnits();\n if ((projUnits == 'degrees' && !units) || units == 'degrees') {\n pointResolution = resolution;\n } else {\n // Estimate point resolution by transforming the center pixel to EPSG:4326,\n // measuring its width and height on the normal sphere, and taking the\n // average of the width and height.\n const toEPSG4326 = getTransformFromProjections(\n projection,\n get('EPSG:4326'),\n );\n if (!toEPSG4326 && projUnits !== 'degrees') {\n // no transform is available\n pointResolution = resolution * projection.getMetersPerUnit();\n } else {\n let vertices = [\n point[0] - resolution / 2,\n point[1],\n point[0] + resolution / 2,\n point[1],\n point[0],\n point[1] - resolution / 2,\n point[0],\n point[1] + resolution / 2,\n ];\n vertices = toEPSG4326(vertices, vertices, 2);\n const width = getDistance(vertices.slice(0, 2), vertices.slice(2, 4));\n const height = getDistance(vertices.slice(4, 6), vertices.slice(6, 8));\n pointResolution = (width + height) / 2;\n }\n const metersPerUnit = units\n ? METERS_PER_UNIT[units]\n : projection.getMetersPerUnit();\n if (metersPerUnit !== undefined) {\n pointResolution /= metersPerUnit;\n }\n }\n }\n return pointResolution;\n}\n\n/**\n * Registers transformation functions that don't alter coordinates. Those allow\n * to transform between projections with equal meaning.\n *\n * @param {Array} projections Projections.\n * @api\n */\nexport function addEquivalentProjections(projections) {\n addProjections(projections);\n projections.forEach(function (source) {\n projections.forEach(function (destination) {\n if (source !== destination) {\n addTransformFunc(source, destination, cloneTransform);\n }\n });\n });\n}\n\n/**\n * Registers transformation functions to convert coordinates in any projection\n * in projection1 to any projection in projection2.\n *\n * @param {Array} projections1 Projections with equal\n * meaning.\n * @param {Array} projections2 Projections with equal\n * meaning.\n * @param {TransformFunction} forwardTransform Transformation from any\n * projection in projection1 to any projection in projection2.\n * @param {TransformFunction} inverseTransform Transform from any projection\n * in projection2 to any projection in projection1..\n */\nexport function addEquivalentTransforms(\n projections1,\n projections2,\n forwardTransform,\n inverseTransform,\n) {\n projections1.forEach(function (projection1) {\n projections2.forEach(function (projection2) {\n addTransformFunc(projection1, projection2, forwardTransform);\n addTransformFunc(projection2, projection1, inverseTransform);\n });\n });\n}\n\n/**\n * Clear all cached projections and transforms.\n */\nexport function clearAllProjections() {\n clearProj();\n clearTransformFuncs();\n}\n\n/**\n * @param {Projection|string|undefined} projection Projection.\n * @param {string} defaultCode Default code.\n * @return {Projection} Projection.\n */\nexport function createProjection(projection, defaultCode) {\n if (!projection) {\n return get(defaultCode);\n }\n if (typeof projection === 'string') {\n return get(projection);\n }\n return /** @type {Projection} */ (projection);\n}\n\n/**\n * Creates a {@link module:ol/proj~TransformFunction} from a simple 2D coordinate transform\n * function.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} coordTransform Coordinate\n * transform.\n * @return {TransformFunction} Transform function.\n */\nexport function createTransformFromCoordinateTransform(coordTransform) {\n return (\n /**\n * @param {Array} input Input.\n * @param {Array} [output] Output.\n * @param {number} [dimension] Dimensions that should be transformed.\n * @param {number} [stride] Stride.\n * @return {Array} Output.\n */\n function (input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension !== undefined ? dimension : 2;\n stride = stride ?? dimension;\n output = output !== undefined ? output : new Array(length);\n for (let i = 0; i < length; i += stride) {\n const point = coordTransform(input.slice(i, i + dimension));\n const pointLength = point.length;\n for (let j = 0, jj = stride; j < jj; ++j) {\n output[i + j] = j >= pointLength ? input[i + j] : point[j];\n }\n }\n return output;\n }\n );\n}\n\n/**\n * Registers coordinate transform functions to convert coordinates between the\n * source projection and the destination projection.\n * The forward and inverse functions convert coordinate pairs; this function\n * converts these into the functions used internally which also handle\n * extents and coordinate arrays.\n *\n * @param {ProjectionLike} source Source projection.\n * @param {ProjectionLike} destination Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} forward The forward transform\n * function (that is, from the source projection to the destination\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} inverse The inverse transform\n * function (that is, from the destination projection to the source\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}. If the transform function can only\n * transform less dimensions than the input coordinate, it is supposeed to return a coordinate\n * with only the length it can transform. The other dimensions will be taken unchanged from the\n * source.\n * @api\n */\nexport function addCoordinateTransforms(source, destination, forward, inverse) {\n const sourceProj = get(source);\n const destProj = get(destination);\n addTransformFunc(\n sourceProj,\n destProj,\n createTransformFromCoordinateTransform(forward),\n );\n addTransformFunc(\n destProj,\n sourceProj,\n createTransformFromCoordinateTransform(inverse),\n );\n}\n\n/**\n * Transforms a coordinate from longitude/latitude to a different projection.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate as longitude and latitude, i.e.\n * an array with longitude as 1st and latitude as 2nd element.\n * @param {ProjectionLike} [projection] Target projection. The\n * default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate projected to the target projection.\n * @api\n */\nexport function fromLonLat(coordinate, projection) {\n disableCoordinateWarning();\n return transform(\n coordinate,\n 'EPSG:4326',\n projection !== undefined ? projection : 'EPSG:3857',\n );\n}\n\n/**\n * Transforms a coordinate to longitude/latitude.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Projected coordinate.\n * @param {ProjectionLike} [projection] Projection of the coordinate.\n * The default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate as longitude and latitude, i.e. an array\n * with longitude as 1st and latitude as 2nd element.\n * @api\n */\nexport function toLonLat(coordinate, projection) {\n const lonLat = transform(\n coordinate,\n projection !== undefined ? projection : 'EPSG:3857',\n 'EPSG:4326',\n );\n const lon = lonLat[0];\n if (lon < -180 || lon > 180) {\n lonLat[0] = modulo(lon + 180, 360) - 180;\n }\n return lonLat;\n}\n\n/**\n * Checks if two projections are the same, that is every coordinate in one\n * projection does represent the same geographic point as the same coordinate in\n * the other projection.\n *\n * @param {Projection} projection1 Projection 1.\n * @param {Projection} projection2 Projection 2.\n * @return {boolean} Equivalent.\n * @api\n */\nexport function equivalent(projection1, projection2) {\n if (projection1 === projection2) {\n return true;\n }\n const equalUnits = projection1.getUnits() === projection2.getUnits();\n if (projection1.getCode() === projection2.getCode()) {\n return equalUnits;\n }\n const transformFunc = getTransformFromProjections(projection1, projection2);\n return transformFunc === cloneTransform && equalUnits;\n}\n\n/**\n * Searches in the list of transform functions for the function for converting\n * coordinates from the source projection to the destination projection.\n *\n * @param {Projection} source Source Projection object.\n * @param {Projection} destination Destination Projection\n * object.\n * @return {TransformFunction|null} Transform function.\n */\nexport function getTransformFromProjections(source, destination) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n let transformFunc = getTransformFunc(sourceCode, destinationCode);\n if (transformFunc) {\n return transformFunc;\n }\n\n /**\n * @type {Transforms|null}\n */\n let sourceTransforms = null;\n\n /**\n * @type {Transforms|null}\n */\n let destinationTransforms = null;\n\n // lazily add projections if we have supported transforms\n for (const makeTransforms of transformFactories) {\n if (!sourceTransforms) {\n sourceTransforms = makeTransforms(source);\n }\n if (!destinationTransforms) {\n destinationTransforms = makeTransforms(destination);\n }\n }\n\n if (!sourceTransforms && !destinationTransforms) {\n return null;\n }\n\n const intermediateCode = 'EPSG:4326';\n if (!destinationTransforms) {\n const toDestination = getTransformFunc(intermediateCode, destinationCode);\n if (toDestination) {\n transformFunc = composeTransformFuncs(\n sourceTransforms.inverse,\n toDestination,\n );\n }\n } else if (!sourceTransforms) {\n const fromSource = getTransformFunc(sourceCode, intermediateCode);\n if (fromSource) {\n transformFunc = composeTransformFuncs(\n fromSource,\n destinationTransforms.forward,\n );\n }\n } else {\n transformFunc = composeTransformFuncs(\n sourceTransforms.inverse,\n destinationTransforms.forward,\n );\n }\n\n if (transformFunc) {\n addProjection(source);\n addProjection(destination);\n addTransformFunc(source, destination, transformFunc);\n }\n\n return transformFunc;\n}\n\n/**\n * @param {TransformFunction} t1 The first transform function.\n * @param {TransformFunction} t2 The second transform function.\n * @return {TransformFunction} The composed transform function.\n */\nfunction composeTransformFuncs(t1, t2) {\n return function (input, output, dimensions, stride) {\n output = t1(input, output, dimensions, stride);\n return t2(output, output, dimensions, stride);\n };\n}\n\n/**\n * Given the projection-like objects, searches for a transformation\n * function to convert a coordinates array from the source projection to the\n * destination projection.\n *\n * @param {ProjectionLike} source Source.\n * @param {ProjectionLike} destination Destination.\n * @return {TransformFunction} Transform function.\n * @api\n */\nexport function getTransform(source, destination) {\n const sourceProjection = get(source);\n const destinationProjection = get(destination);\n return getTransformFromProjections(sourceProjection, destinationProjection);\n}\n\n/**\n * Transforms a coordinate from source projection to destination projection.\n * This returns a new coordinate (and does not modify the original). If there\n * is no available transform between the two projection, the function will throw\n * an error.\n *\n * See {@link module:ol/proj.transformExtent} for extent transformation.\n * See the transform method of {@link module:ol/geom/Geometry~Geometry} and its\n * subclasses for geometry transforms.\n *\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\nexport function transform(coordinate, source, destination) {\n const transformFunc = getTransform(source, destination);\n if (!transformFunc) {\n const sourceCode = get(source).getCode();\n const destinationCode = get(destination).getCode();\n throw new Error(\n `No transform available between ${sourceCode} and ${destinationCode}`,\n );\n }\n return transformFunc(coordinate, undefined, coordinate.length);\n}\n\n/**\n * Transforms an extent from source projection to destination projection. This\n * returns a new extent (and does not modify the original).\n *\n * @param {import(\"./extent.js\").Extent} extent The extent to transform.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @param {number} [stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {import(\"./extent.js\").Extent} The transformed extent.\n * @api\n */\nexport function transformExtent(extent, source, destination, stops) {\n const transformFunc = getTransform(source, destination);\n return applyTransform(extent, transformFunc, undefined, stops);\n}\n\n/**\n * Transforms the given point to the destination projection.\n *\n * @param {import(\"./coordinate.js\").Coordinate} point Point.\n * @param {Projection} sourceProjection Source projection.\n * @param {Projection} destinationProjection Destination projection.\n * @return {import(\"./coordinate.js\").Coordinate} Point.\n */\nexport function transformWithProjections(\n point,\n sourceProjection,\n destinationProjection,\n) {\n const transformFunc = getTransformFromProjections(\n sourceProjection,\n destinationProjection,\n );\n return transformFunc(point);\n}\n\n/**\n * @type {Projection|null}\n */\nlet userProjection = null;\n\n/**\n * Set the projection for coordinates supplied from and returned by API methods.\n * This includes all API methods except for those interacting with tile grids,\n * plus {@link import(\"./Map.js\").FrameState} and {@link import(\"./View.js\").State}.\n * @param {ProjectionLike} projection The user projection.\n * @api\n */\nexport function setUserProjection(projection) {\n userProjection = get(projection);\n}\n\n/**\n * Clear the user projection if set.\n * @api\n */\nexport function clearUserProjection() {\n userProjection = null;\n}\n\n/**\n * Get the projection for coordinates supplied from and returned by API methods.\n * @return {Projection|null} The user projection (or null if not set).\n * @api\n */\nexport function getUserProjection() {\n return userProjection;\n}\n\n/**\n * Use geographic coordinates (WGS-84 datum) in API methods.\n * This includes all API methods except for those interacting with tile grids,\n * plus {@link import(\"./Map.js\").FrameState} and {@link import(\"./View.js\").State}.\n * @api\n */\nexport function useGeographic() {\n setUserProjection('EPSG:4326');\n}\n\n/**\n * Return a coordinate transformed into the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array} coordinate Input coordinate.\n * @param {ProjectionLike} sourceProjection The input coordinate projection.\n * @return {Array} The input coordinate in the user projection.\n */\nexport function toUserCoordinate(coordinate, sourceProjection) {\n if (!userProjection) {\n return coordinate;\n }\n return transform(coordinate, sourceProjection, userProjection);\n}\n\n/**\n * Return a coordinate transformed from the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array} coordinate Input coordinate.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {Array} The input coordinate transformed.\n */\nexport function fromUserCoordinate(coordinate, destProjection) {\n if (!userProjection) {\n if (\n showCoordinateWarning &&\n !equals(coordinate, [0, 0]) &&\n coordinate[0] >= -180 &&\n coordinate[0] <= 180 &&\n coordinate[1] >= -90 &&\n coordinate[1] <= 90\n ) {\n showCoordinateWarning = false;\n warn(\n 'Call useGeographic() from ol/proj once to work with [longitude, latitude] coordinates.',\n );\n }\n return coordinate;\n }\n return transform(coordinate, userProjection, destProjection);\n}\n\n/**\n * Return an extent transformed into the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} sourceProjection The input extent projection.\n * @return {import(\"./extent.js\").Extent} The input extent in the user projection.\n */\nexport function toUserExtent(extent, sourceProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, sourceProjection, userProjection);\n}\n\n/**\n * Return an extent transformed from the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {import(\"./extent.js\").Extent} The input extent transformed.\n */\nexport function fromUserExtent(extent, destProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, userProjection, destProjection);\n}\n\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in input projection units per pixel.\n * @param {ProjectionLike} sourceProjection The input projection.\n * @return {number} Resolution in user projection units per pixel.\n */\nexport function toUserResolution(resolution, sourceProjection) {\n if (!userProjection) {\n return resolution;\n }\n const sourceMetersPerUnit = get(sourceProjection).getMetersPerUnit();\n const userMetersPerUnit = userProjection.getMetersPerUnit();\n return sourceMetersPerUnit && userMetersPerUnit\n ? (resolution * sourceMetersPerUnit) / userMetersPerUnit\n : resolution;\n}\n\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in user projection units per pixel.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {number} Resolution in destination projection units per pixel.\n */\nexport function fromUserResolution(resolution, destProjection) {\n if (!userProjection) {\n return resolution;\n }\n const destMetersPerUnit = get(destProjection).getMetersPerUnit();\n const userMetersPerUnit = userProjection.getMetersPerUnit();\n return destMetersPerUnit && userMetersPerUnit\n ? (resolution * userMetersPerUnit) / destMetersPerUnit\n : resolution;\n}\n\n/**\n * Creates a safe coordinate transform function from a coordinate transform function.\n * \"Safe\" means that it can handle wrapping of x-coordinates for global projections,\n * and that coordinates exceeding the source projection validity extent's range will be\n * clamped to the validity range.\n * @param {Projection} sourceProj Source projection.\n * @param {Projection} destProj Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} transform Transform function (source to destination).\n * @return {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} Safe transform function (source to destination).\n */\nexport function createSafeCoordinateTransform(sourceProj, destProj, transform) {\n return function (coord) {\n let transformed, worldsAway;\n if (sourceProj.canWrapX()) {\n const sourceExtent = sourceProj.getExtent();\n const sourceExtentWidth = getWidth(sourceExtent);\n coord = coord.slice(0);\n worldsAway = getWorldsAway(coord, sourceProj, sourceExtentWidth);\n if (worldsAway) {\n // Move x to the real world\n coord[0] = coord[0] - worldsAway * sourceExtentWidth;\n }\n coord[0] = clamp(coord[0], sourceExtent[0], sourceExtent[2]);\n coord[1] = clamp(coord[1], sourceExtent[1], sourceExtent[3]);\n transformed = transform(coord);\n } else {\n transformed = transform(coord);\n }\n if (worldsAway && destProj.canWrapX()) {\n // Move transformed coordinate back to the offset world\n transformed[0] += worldsAway * getWidth(destProj.getExtent());\n }\n return transformed;\n };\n}\n\n/**\n * Add transforms to and from EPSG:4326 and EPSG:3857. This function is called\n * by when this module is executed and should only need to be called again after\n * `clearAllProjections()` is called (e.g. in tests).\n */\nexport function addCommon() {\n // Add transformations that don't alter coordinates to convert within set of\n // projections with equal meaning.\n addEquivalentProjections(EPSG3857_PROJECTIONS);\n addEquivalentProjections(EPSG4326_PROJECTIONS);\n // Add transformations to convert EPSG:4326 like coordinates to EPSG:3857 like\n // coordinates and back.\n addEquivalentTransforms(\n EPSG4326_PROJECTIONS,\n EPSG3857_PROJECTIONS,\n fromEPSG4326,\n toEPSG4326,\n );\n}\n\naddCommon();\n","/**\n * @module ol/geom/flat/orient\n */\nimport {coordinates as reverseCoordinates} from './reverse.js';\n\n/**\n * Is the linear ring oriented clockwise in a coordinate system with a bottom-left\n * coordinate origin? For a coordinate system with a top-left coordinate origin,\n * the ring's orientation is clockwise when this function returns false.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {boolean|undefined} Is clockwise.\n */\nexport function linearRingIsClockwise(flatCoordinates, offset, end, stride) {\n // https://stackoverflow.com/q/1165647/clockwise-method#1165943\n // https://github.com/OSGeo/gdal/blob/master/gdal/ogr/ogrlinearring.cpp\n let edge = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n edge += (x2 - x1) * (y2 + y1);\n x1 = x2;\n y1 = y2;\n }\n return edge === 0 ? undefined : edge > 0;\n}\n\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingsAreOriented(\n flatCoordinates,\n offset,\n ends,\n stride,\n right,\n) {\n right = right !== undefined ? right : false;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const isClockwise = linearRingIsClockwise(\n flatCoordinates,\n offset,\n end,\n stride,\n );\n if (i === 0) {\n if ((right && isClockwise) || (!right && !isClockwise)) {\n return false;\n }\n } else {\n if ((right && !isClockwise) || (!right && isClockwise)) {\n return false;\n }\n }\n offset = end;\n }\n return true;\n}\n\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingssAreOriented(\n flatCoordinates,\n offset,\n endss,\n stride,\n right,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (!linearRingsAreOriented(flatCoordinates, offset, ends, stride, right)) {\n return false;\n }\n if (ends.length) {\n offset = ends[ends.length - 1];\n }\n }\n return true;\n}\n\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {boolean} [right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRings(\n flatCoordinates,\n offset,\n ends,\n stride,\n right,\n) {\n right = right !== undefined ? right : false;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const isClockwise = linearRingIsClockwise(\n flatCoordinates,\n offset,\n end,\n stride,\n );\n const reverse =\n i === 0\n ? (right && isClockwise) || (!right && !isClockwise)\n : (right && !isClockwise) || (!right && isClockwise);\n if (reverse) {\n reverseCoordinates(flatCoordinates, offset, end, stride);\n }\n offset = end;\n }\n return offset;\n}\n\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRingsArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n right,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n offset = orientLinearRings(\n flatCoordinates,\n offset,\n endss[i],\n stride,\n right,\n );\n }\n return offset;\n}\n\n/**\n * Return a two-dimensional endss\n * @param {Array} flatCoordinates Flat coordinates\n * @param {Array} ends Linear ring end indexes\n * @return {Array>} Two dimensional endss array that can\n * be used to construct a MultiPolygon\n */\nexport function inflateEnds(flatCoordinates, ends) {\n const endss = [];\n let offset = 0;\n let prevEndIndex = 0;\n let startOrientation;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n // classifies an array of rings into polygons with outer rings and holes\n const orientation = linearRingIsClockwise(flatCoordinates, offset, end, 2);\n if (startOrientation === undefined) {\n startOrientation = orientation;\n }\n if (orientation === startOrientation) {\n endss.push(ends.slice(prevEndIndex, i + 1));\n } else {\n if (endss.length === 0) {\n continue;\n }\n endss[endss.length - 1].push(ends[prevEndIndex]);\n }\n prevEndIndex = i + 1;\n offset = end;\n }\n return endss;\n}\n","/**\n * @module ol/geom/flat/interpolate\n */\nimport {binarySearch} from '../../array.js';\nimport {lerp} from '../../math.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} fraction Fraction.\n * @param {Array} [dest] Destination.\n * @param {number} [dimension] Destination dimension (default is `2`)\n * @return {Array} Destination.\n */\nexport function interpolatePoint(\n flatCoordinates,\n offset,\n end,\n stride,\n fraction,\n dest,\n dimension,\n) {\n let o, t;\n const n = (end - offset) / stride;\n if (n === 1) {\n o = offset;\n } else if (n === 2) {\n o = offset;\n t = fraction;\n } else if (n !== 0) {\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n let length = 0;\n const cumulativeLengths = [0];\n for (let i = offset + stride; i < end; i += stride) {\n const x2 = flatCoordinates[i];\n const y2 = flatCoordinates[i + 1];\n length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n cumulativeLengths.push(length);\n x1 = x2;\n y1 = y2;\n }\n const target = fraction * length;\n const index = binarySearch(cumulativeLengths, target);\n if (index < 0) {\n t =\n (target - cumulativeLengths[-index - 2]) /\n (cumulativeLengths[-index - 1] - cumulativeLengths[-index - 2]);\n o = offset + (-index - 2) * stride;\n } else {\n o = offset + index * stride;\n }\n }\n dimension = dimension > 1 ? dimension : 2;\n dest = dest ? dest : new Array(dimension);\n for (let i = 0; i < dimension; ++i) {\n dest[i] =\n o === undefined\n ? NaN\n : t === undefined\n ? flatCoordinates[o + i]\n : lerp(flatCoordinates[o + i], flatCoordinates[o + stride + i], t);\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} m M.\n * @param {boolean} extrapolate Extrapolate.\n * @return {import(\"../../coordinate.js\").Coordinate|null} Coordinate.\n */\nexport function lineStringCoordinateAtM(\n flatCoordinates,\n offset,\n end,\n stride,\n m,\n extrapolate,\n) {\n if (end == offset) {\n return null;\n }\n let coordinate;\n if (m < flatCoordinates[offset + stride - 1]) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(offset, offset + stride);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n return null;\n }\n if (flatCoordinates[end - 1] < m) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(end - stride, end);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n return null;\n }\n // FIXME use O(1) search\n if (m == flatCoordinates[offset + stride - 1]) {\n return flatCoordinates.slice(offset, offset + stride);\n }\n let lo = offset / stride;\n let hi = end / stride;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (m < flatCoordinates[(mid + 1) * stride - 1]) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n const m0 = flatCoordinates[lo * stride - 1];\n if (m == m0) {\n return flatCoordinates.slice((lo - 1) * stride, (lo - 1) * stride + stride);\n }\n const m1 = flatCoordinates[(lo + 1) * stride - 1];\n const t = (m - m0) / (m1 - m0);\n coordinate = [];\n for (let i = 0; i < stride - 1; ++i) {\n coordinate.push(\n lerp(\n flatCoordinates[(lo - 1) * stride + i],\n flatCoordinates[lo * stride + i],\n t,\n ),\n );\n }\n coordinate.push(m);\n return coordinate;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} m M.\n * @param {boolean} extrapolate Extrapolate.\n * @param {boolean} interpolate Interpolate.\n * @return {import(\"../../coordinate.js\").Coordinate|null} Coordinate.\n */\nexport function lineStringsCoordinateAtM(\n flatCoordinates,\n offset,\n ends,\n stride,\n m,\n extrapolate,\n interpolate,\n) {\n if (interpolate) {\n return lineStringCoordinateAtM(\n flatCoordinates,\n offset,\n ends[ends.length - 1],\n stride,\n m,\n extrapolate,\n );\n }\n let coordinate;\n if (m < flatCoordinates[stride - 1]) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(0, stride);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n return null;\n }\n if (flatCoordinates[flatCoordinates.length - 1] < m) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(flatCoordinates.length - stride);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n return null;\n }\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n if (offset == end) {\n continue;\n }\n if (m < flatCoordinates[offset + stride - 1]) {\n return null;\n }\n if (m <= flatCoordinates[end - 1]) {\n return lineStringCoordinateAtM(\n flatCoordinates,\n offset,\n end,\n stride,\n m,\n false,\n );\n }\n offset = end;\n }\n return null;\n}\n","/**\n * @module ol/render/Feature\n */\nimport Feature from '../Feature.js';\nimport {\n LineString,\n MultiLineString,\n MultiPoint,\n MultiPolygon,\n Point,\n Polygon,\n} from '../geom.js';\nimport {\n compose as composeTransform,\n create as createTransform,\n} from '../transform.js';\nimport {\n createOrUpdateFromCoordinate,\n createOrUpdateFromFlatCoordinates,\n getCenter,\n getHeight,\n} from '../extent.js';\nimport {\n douglasPeucker,\n douglasPeuckerArray,\n quantizeArray,\n} from '../geom/flat/simplify.js';\nimport {extend} from '../array.js';\nimport {\n getInteriorPointOfArray,\n getInteriorPointsOfMultiArray,\n} from '../geom/flat/interiorpoint.js';\nimport {get as getProjection} from '../proj.js';\nimport {inflateEnds} from '../geom/flat/orient.js';\nimport {interpolatePoint} from '../geom/flat/interpolate.js';\nimport {linearRingss as linearRingssCenter} from '../geom/flat/center.js';\nimport {memoizeOne} from '../functions.js';\nimport {transform2D} from '../geom/flat/transform.js';\n\n/**\n * @typedef {'Point' | 'LineString' | 'LinearRing' | 'Polygon' | 'MultiPoint' | 'MultiLineString'} Type\n * The geometry type. One of `'Point'`, `'LineString'`, `'LinearRing'`,\n * `'Polygon'`, `'MultiPoint'` or 'MultiLineString'`.\n */\n\n/**\n * @type {import(\"../transform.js\").Transform}\n */\nconst tmpTransform = createTransform();\n\n/**\n * Lightweight, read-only, {@link module:ol/Feature~Feature} and {@link module:ol/geom/Geometry~Geometry} like\n * structure, optimized for vector tile rendering and styling. Geometry access\n * through the API is limited to getting the type and extent of the geometry.\n */\nclass RenderFeature {\n /**\n * @param {Type} type Geometry type.\n * @param {Array} flatCoordinates Flat coordinates. These always need\n * to be right-handed for polygons.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Object} properties Properties.\n * @param {number|string|undefined} id Feature id.\n */\n constructor(type, flatCoordinates, ends, stride, properties, id) {\n /**\n * @type {import(\"../style/Style.js\").StyleFunction|undefined}\n */\n this.styleFunction;\n\n /**\n * @private\n * @type {import(\"../extent.js\").Extent|undefined}\n */\n this.extent_;\n\n /**\n * @private\n * @type {number|string|undefined}\n */\n this.id_ = id;\n\n /**\n * @private\n * @type {Type}\n */\n this.type_ = type;\n\n /**\n * @private\n * @type {Array}\n */\n this.flatCoordinates_ = flatCoordinates;\n\n /**\n * @private\n * @type {Array}\n */\n this.flatInteriorPoints_ = null;\n\n /**\n * @private\n * @type {Array}\n */\n this.flatMidpoints_ = null;\n\n /**\n * @private\n * @type {Array|null}\n */\n this.ends_ = ends || null;\n\n /**\n * @private\n * @type {Object}\n */\n this.properties_ = properties;\n\n /**\n * @private\n * @type {number}\n */\n this.squaredTolerance_;\n\n /**\n * @private\n * @type {number}\n */\n this.stride_ = stride;\n\n /**\n * @private\n * @type {RenderFeature}\n */\n this.simplifiedGeometry_;\n }\n\n /**\n * Get a feature property by its key.\n * @param {string} key Key\n * @return {*} Value for the requested key.\n * @api\n */\n get(key) {\n return this.properties_[key];\n }\n\n /**\n * Get the extent of this feature's geometry.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getExtent() {\n if (!this.extent_) {\n this.extent_ =\n this.type_ === 'Point'\n ? createOrUpdateFromCoordinate(this.flatCoordinates_)\n : createOrUpdateFromFlatCoordinates(\n this.flatCoordinates_,\n 0,\n this.flatCoordinates_.length,\n 2,\n );\n }\n return this.extent_;\n }\n\n /**\n * @return {Array} Flat interior points.\n */\n getFlatInteriorPoint() {\n if (!this.flatInteriorPoints_) {\n const flatCenter = getCenter(this.getExtent());\n this.flatInteriorPoints_ = getInteriorPointOfArray(\n this.flatCoordinates_,\n 0,\n this.ends_,\n 2,\n flatCenter,\n 0,\n );\n }\n return this.flatInteriorPoints_;\n }\n\n /**\n * @return {Array} Flat interior points.\n */\n getFlatInteriorPoints() {\n if (!this.flatInteriorPoints_) {\n const ends = inflateEnds(this.flatCoordinates_, this.ends_);\n const flatCenters = linearRingssCenter(this.flatCoordinates_, 0, ends, 2);\n this.flatInteriorPoints_ = getInteriorPointsOfMultiArray(\n this.flatCoordinates_,\n 0,\n ends,\n 2,\n flatCenters,\n );\n }\n return this.flatInteriorPoints_;\n }\n\n /**\n * @return {Array} Flat midpoint.\n */\n getFlatMidpoint() {\n if (!this.flatMidpoints_) {\n this.flatMidpoints_ = interpolatePoint(\n this.flatCoordinates_,\n 0,\n this.flatCoordinates_.length,\n 2,\n 0.5,\n );\n }\n return this.flatMidpoints_;\n }\n\n /**\n * @return {Array} Flat midpoints.\n */\n getFlatMidpoints() {\n if (!this.flatMidpoints_) {\n this.flatMidpoints_ = [];\n const flatCoordinates = this.flatCoordinates_;\n let offset = 0;\n const ends = /** @type {Array} */ (this.ends_);\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const midpoint = interpolatePoint(flatCoordinates, offset, end, 2, 0.5);\n extend(this.flatMidpoints_, midpoint);\n offset = end;\n }\n }\n return this.flatMidpoints_;\n }\n\n /**\n * Get the feature identifier. This is a stable identifier for the feature and\n * is set when reading data from a remote source.\n * @return {number|string|undefined} Id.\n * @api\n */\n getId() {\n return this.id_;\n }\n\n /**\n * @return {Array} Flat coordinates.\n */\n getOrientedFlatCoordinates() {\n return this.flatCoordinates_;\n }\n\n /**\n * For API compatibility with {@link module:ol/Feature~Feature}, this method is useful when\n * determining the geometry type in style function (see {@link #getType}).\n * @return {RenderFeature} Feature.\n * @api\n */\n getGeometry() {\n return this;\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {RenderFeature} Simplified geometry.\n */\n getSimplifiedGeometry(squaredTolerance) {\n return this;\n }\n\n /**\n * Get a transformed and simplified version of the geometry.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [transform] Optional transform function.\n * @return {RenderFeature} Simplified geometry.\n */\n simplifyTransformed(squaredTolerance, transform) {\n return this;\n }\n\n /**\n * Get the feature properties.\n * @return {Object} Feature properties.\n * @api\n */\n getProperties() {\n return this.properties_;\n }\n\n /**\n * Get an object of all property names and values. This has the same behavior as getProperties,\n * but is here to conform with the {@link module:ol/Feature~Feature} interface.\n * @return {Object?} Object.\n */\n getPropertiesInternal() {\n return this.properties_;\n }\n\n /**\n * @return {number} Stride.\n */\n getStride() {\n return this.stride_;\n }\n\n /**\n * @return {import('../style/Style.js').StyleFunction|undefined} Style\n */\n getStyleFunction() {\n return this.styleFunction;\n }\n\n /**\n * Get the type of this feature's geometry.\n * @return {Type} Geometry type.\n * @api\n */\n getType() {\n return this.type_;\n }\n\n /**\n * Transform geometry coordinates from tile pixel space to projected.\n *\n * @param {import(\"../proj.js\").ProjectionLike} projection The data projection\n */\n transform(projection) {\n projection = getProjection(projection);\n const pixelExtent = projection.getExtent();\n const projectedExtent = projection.getWorldExtent();\n if (pixelExtent && projectedExtent) {\n const scale = getHeight(projectedExtent) / getHeight(pixelExtent);\n composeTransform(\n tmpTransform,\n projectedExtent[0],\n projectedExtent[3],\n scale,\n -scale,\n 0,\n 0,\n 0,\n );\n transform2D(\n this.flatCoordinates_,\n 0,\n this.flatCoordinates_.length,\n 2,\n tmpTransform,\n this.flatCoordinates_,\n );\n }\n }\n\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n */\n applyTransform(transformFn) {\n transformFn(this.flatCoordinates_, this.flatCoordinates_, this.stride_);\n }\n\n /**\n * @return {RenderFeature} A cloned render feature.\n */\n clone() {\n return new RenderFeature(\n this.type_,\n this.flatCoordinates_.slice(),\n this.ends_?.slice(),\n this.stride_,\n Object.assign({}, this.properties_),\n this.id_,\n );\n }\n\n /**\n * @return {Array|null} Ends.\n */\n getEnds() {\n return this.ends_;\n }\n\n /**\n * Add transform and resolution based geometry simplification to this instance.\n * @return {RenderFeature} This render feature.\n */\n enableSimplifyTransformed() {\n this.simplifyTransformed = memoizeOne((squaredTolerance, transform) => {\n if (squaredTolerance === this.squaredTolerance_) {\n return this.simplifiedGeometry_;\n }\n this.simplifiedGeometry_ = this.clone();\n if (transform) {\n this.simplifiedGeometry_.applyTransform(transform);\n }\n const simplifiedFlatCoordinates =\n this.simplifiedGeometry_.getFlatCoordinates();\n let simplifiedEnds;\n switch (this.type_) {\n case 'LineString':\n simplifiedFlatCoordinates.length = douglasPeucker(\n simplifiedFlatCoordinates,\n 0,\n this.simplifiedGeometry_.flatCoordinates_.length,\n this.simplifiedGeometry_.stride_,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n );\n simplifiedEnds = [simplifiedFlatCoordinates.length];\n break;\n case 'MultiLineString':\n simplifiedEnds = [];\n simplifiedFlatCoordinates.length = douglasPeuckerArray(\n simplifiedFlatCoordinates,\n 0,\n this.simplifiedGeometry_.ends_,\n this.simplifiedGeometry_.stride_,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n simplifiedEnds,\n );\n break;\n case 'Polygon':\n simplifiedEnds = [];\n simplifiedFlatCoordinates.length = quantizeArray(\n simplifiedFlatCoordinates,\n 0,\n this.simplifiedGeometry_.ends_,\n this.simplifiedGeometry_.stride_,\n Math.sqrt(squaredTolerance),\n simplifiedFlatCoordinates,\n 0,\n simplifiedEnds,\n );\n break;\n default:\n }\n if (simplifiedEnds) {\n this.simplifiedGeometry_ = new RenderFeature(\n this.type_,\n simplifiedFlatCoordinates,\n simplifiedEnds,\n 2,\n this.properties_,\n this.id_,\n );\n }\n this.squaredTolerance_ = squaredTolerance;\n return this.simplifiedGeometry_;\n });\n return this;\n }\n}\n\n/**\n * @return {Array} Flat coordinates.\n */\nRenderFeature.prototype.getFlatCoordinates =\n RenderFeature.prototype.getOrientedFlatCoordinates;\n\n/**\n * Create a geometry from an `ol/render/Feature`\n * @param {RenderFeature} renderFeature\n * Render Feature\n * @return {Point|MultiPoint|LineString|MultiLineString|Polygon|MultiPolygon}\n * New geometry instance.\n * @api\n */\nexport function toGeometry(renderFeature) {\n const geometryType = renderFeature.getType();\n switch (geometryType) {\n case 'Point':\n return new Point(renderFeature.getFlatCoordinates());\n case 'MultiPoint':\n return new MultiPoint(renderFeature.getFlatCoordinates(), 'XY');\n case 'LineString':\n return new LineString(renderFeature.getFlatCoordinates(), 'XY');\n case 'MultiLineString':\n return new MultiLineString(\n renderFeature.getFlatCoordinates(),\n 'XY',\n /** @type {Array} */ (renderFeature.getEnds()),\n );\n case 'Polygon':\n const flatCoordinates = renderFeature.getFlatCoordinates();\n const ends = renderFeature.getEnds();\n const endss = inflateEnds(flatCoordinates, ends);\n return endss.length > 1\n ? new MultiPolygon(flatCoordinates, 'XY', endss)\n : new Polygon(flatCoordinates, 'XY', ends);\n default:\n throw new Error('Invalid geometry type:' + geometryType);\n }\n}\n\n/**\n * Create an `ol/Feature` from an `ol/render/Feature`\n * @param {RenderFeature} renderFeature RenderFeature\n * @param {string} [geometryName='geometry'] Geometry name to use\n * when creating the Feature.\n * @return {Feature} Newly constructed `ol/Feature` with properties,\n * geometry, and id copied over.\n * @api\n */\nexport function toFeature(renderFeature, geometryName) {\n const id = renderFeature.getId();\n const geometry = toGeometry(renderFeature);\n const properties = renderFeature.getProperties();\n const feature = new Feature();\n if (geometryName !== undefined) {\n feature.setGeometryName(geometryName);\n }\n feature.setGeometry(geometry);\n if (id !== undefined) {\n feature.setId(id);\n }\n feature.setProperties(properties, true);\n return feature;\n}\n\nexport default RenderFeature;\n","/**\n * @module ol/geom/flat/center\n */\nimport {createEmpty, createOrUpdateFromFlatCoordinates} from '../../extent.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @return {Array} Flat centers.\n */\nexport function linearRingss(flatCoordinates, offset, endss, stride) {\n const flatCenters = [];\n let extent = createEmpty();\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n extent = createOrUpdateFromFlatCoordinates(\n flatCoordinates,\n offset,\n ends[0],\n stride,\n );\n flatCenters.push((extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2);\n offset = ends[ends.length - 1];\n }\n return flatCenters;\n}\n","/**\n * @module ol/geom/flat/transform\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {Array} [dest] Destination.\n * @param {number} [destinationStride] Stride of destination coordinates; if unspecified, assumed to be 2.\n * @return {Array} Transformed coordinates.\n */\nexport function transform2D(\n flatCoordinates,\n offset,\n end,\n stride,\n transform,\n dest,\n destinationStride,\n) {\n dest = dest ? dest : [];\n destinationStride = destinationStride ? destinationStride : 2;\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const x = flatCoordinates[j];\n const y = flatCoordinates[j + 1];\n dest[i++] = transform[0] * x + transform[2] * y + transform[4];\n dest[i++] = transform[1] * x + transform[3] * y + transform[5];\n\n for (let k = 2; k < destinationStride; k++) {\n dest[i++] = flatCoordinates[j + k];\n }\n }\n\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} angle Angle.\n * @param {Array} anchor Rotation anchor point.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function rotate(\n flatCoordinates,\n offset,\n end,\n stride,\n angle,\n anchor,\n dest,\n) {\n dest = dest ? dest : [];\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const anchorX = anchor[0];\n const anchorY = anchor[1];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const deltaX = flatCoordinates[j] - anchorX;\n const deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + deltaX * cos - deltaY * sin;\n dest[i++] = anchorY + deltaX * sin + deltaY * cos;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * Scale the coordinates.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} sx Scale factor in the x-direction.\n * @param {number} sy Scale factor in the y-direction.\n * @param {Array} anchor Scale anchor point.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function scale(\n flatCoordinates,\n offset,\n end,\n stride,\n sx,\n sy,\n anchor,\n dest,\n) {\n dest = dest ? dest : [];\n const anchorX = anchor[0];\n const anchorY = anchor[1];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const deltaX = flatCoordinates[j] - anchorX;\n const deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + sx * deltaX;\n dest[i++] = anchorY + sy * deltaY;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function translate(\n flatCoordinates,\n offset,\n end,\n stride,\n deltaX,\n deltaY,\n dest,\n) {\n dest = dest ? dest : [];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n dest[i++] = flatCoordinates[j] + deltaX;\n dest[i++] = flatCoordinates[j + 1] + deltaY;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n","/**\n * @module ol/functions\n */\n\nimport {equals as arrayEquals} from './array.js';\n\n/**\n * Always returns true.\n * @return {boolean} true.\n */\nexport function TRUE() {\n return true;\n}\n\n/**\n * Always returns false.\n * @return {boolean} false.\n */\nexport function FALSE() {\n return false;\n}\n\n/**\n * A reusable function, used e.g. as a default for callbacks.\n *\n * @return {void} Nothing.\n */\nexport function VOID() {}\n\n/**\n * Wrap a function in another function that remembers the last return. If the\n * returned function is called twice in a row with the same arguments and the same\n * this object, it will return the value from the first call in the second call.\n *\n * @param {function(...any): ReturnType} fn The function to memoize.\n * @return {function(...any): ReturnType} The memoized function.\n * @template ReturnType\n */\nexport function memoizeOne(fn) {\n /** @type {ReturnType} */\n let lastResult;\n\n /** @type {Array|undefined} */\n let lastArgs;\n\n let lastThis;\n\n /**\n * @this {*} Only need to know if `this` changed, don't care what type\n * @return {ReturnType} Memoized value\n */\n return function () {\n const nextArgs = Array.prototype.slice.call(arguments);\n if (!lastArgs || this !== lastThis || !arrayEquals(nextArgs, lastArgs)) {\n lastThis = this;\n lastArgs = nextArgs;\n lastResult = fn.apply(this, arguments);\n }\n return lastResult;\n };\n}\n\n/**\n * @template T\n * @param {function(): (T | Promise)} getter A function that returns a value or a promise for a value.\n * @return {Promise} A promise for the value.\n */\nexport function toPromise(getter) {\n function promiseGetter() {\n let value;\n try {\n value = getter();\n } catch (err) {\n return Promise.reject(err);\n }\n if (value instanceof Promise) {\n return value;\n }\n return Promise.resolve(value);\n }\n return promiseGetter();\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Stroke;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Style;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Text;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.functions;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.render.canvas;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.TileState;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.util;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.Image;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.Layer;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.Group;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.Map;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.Raster;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.Source;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.tilegrid.TileGrid;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.View;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.proj.Units;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.events.Event;","import Circle from 'ol/style/Circle.js';\nimport Fill from 'ol/style/Fill.js';\nimport Icon from 'ol/style/Icon.js';\nimport RenderFeature from 'ol/render/Feature.js';\nimport Stroke from 'ol/style/Stroke.js';\nimport Style from 'ol/style/Style.js';\nimport Text from 'ol/style/Text.js';\nimport { toPromise } from 'ol/functions.js';\nimport { registerFont, checkedFonts } from 'ol/render/canvas.js';\nimport TileState from 'ol/TileState.js';\nimport { VectorTile } from 'ol';\nimport { getUid } from 'ol/util.js';\nimport GeoJSON from 'ol/format/GeoJSON.js';\nimport ImageLayer from 'ol/layer/Image.js';\nimport Layer from 'ol/layer/Layer.js';\nimport LayerGroup from 'ol/layer/Group.js';\nimport MVT from 'ol/format/MVT.js';\nimport Map from 'ol/Map.js';\nimport Raster from 'ol/source/Raster.js';\nimport Source from 'ol/source/Source.js';\nimport TileGrid from 'ol/tilegrid/TileGrid.js';\nimport TileJSON from 'ol/source/TileJSON.js';\nimport TileLayer from 'ol/layer/Tile.js';\nimport VectorLayer from 'ol/layer/Vector.js';\nimport VectorSource from 'ol/source/Vector.js';\nimport VectorTileLayer from 'ol/layer/VectorTile.js';\nimport VectorTileSource, { defaultLoadFunction } from 'ol/source/VectorTile.js';\nimport View from 'ol/View.js';\nimport { METERS_PER_UNIT } from 'ol/proj/Units.js';\nimport { bbox } from 'ol/loadingstrategy.js';\nimport { createXYZ } from 'ol/tilegrid.js';\nimport { get as get$1, getUserProjection, getPointResolution, fromLonLat, equivalent } from 'ol/proj.js';\nimport { getCenter, getTopLeft } from 'ol/extent.js';\nimport BaseEvent from 'ol/events/Event.js';\nimport EventType from 'ol/events/EventType.js';\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nvar csscolorparser = {};\n\nvar parseCSSColor_1;\n// (c) Dean McNamee , 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n 'transparent': [\n 0,\n 0,\n 0,\n 0\n ],\n 'aliceblue': [\n 240,\n 248,\n 255,\n 1\n ],\n 'antiquewhite': [\n 250,\n 235,\n 215,\n 1\n ],\n 'aqua': [\n 0,\n 255,\n 255,\n 1\n ],\n 'aquamarine': [\n 127,\n 255,\n 212,\n 1\n ],\n 'azure': [\n 240,\n 255,\n 255,\n 1\n ],\n 'beige': [\n 245,\n 245,\n 220,\n 1\n ],\n 'bisque': [\n 255,\n 228,\n 196,\n 1\n ],\n 'black': [\n 0,\n 0,\n 0,\n 1\n ],\n 'blanchedalmond': [\n 255,\n 235,\n 205,\n 1\n ],\n 'blue': [\n 0,\n 0,\n 255,\n 1\n ],\n 'blueviolet': [\n 138,\n 43,\n 226,\n 1\n ],\n 'brown': [\n 165,\n 42,\n 42,\n 1\n ],\n 'burlywood': [\n 222,\n 184,\n 135,\n 1\n ],\n 'cadetblue': [\n 95,\n 158,\n 160,\n 1\n ],\n 'chartreuse': [\n 127,\n 255,\n 0,\n 1\n ],\n 'chocolate': [\n 210,\n 105,\n 30,\n 1\n ],\n 'coral': [\n 255,\n 127,\n 80,\n 1\n ],\n 'cornflowerblue': [\n 100,\n 149,\n 237,\n 1\n ],\n 'cornsilk': [\n 255,\n 248,\n 220,\n 1\n ],\n 'crimson': [\n 220,\n 20,\n 60,\n 1\n ],\n 'cyan': [\n 0,\n 255,\n 255,\n 1\n ],\n 'darkblue': [\n 0,\n 0,\n 139,\n 1\n ],\n 'darkcyan': [\n 0,\n 139,\n 139,\n 1\n ],\n 'darkgoldenrod': [\n 184,\n 134,\n 11,\n 1\n ],\n 'darkgray': [\n 169,\n 169,\n 169,\n 1\n ],\n 'darkgreen': [\n 0,\n 100,\n 0,\n 1\n ],\n 'darkgrey': [\n 169,\n 169,\n 169,\n 1\n ],\n 'darkkhaki': [\n 189,\n 183,\n 107,\n 1\n ],\n 'darkmagenta': [\n 139,\n 0,\n 139,\n 1\n ],\n 'darkolivegreen': [\n 85,\n 107,\n 47,\n 1\n ],\n 'darkorange': [\n 255,\n 140,\n 0,\n 1\n ],\n 'darkorchid': [\n 153,\n 50,\n 204,\n 1\n ],\n 'darkred': [\n 139,\n 0,\n 0,\n 1\n ],\n 'darksalmon': [\n 233,\n 150,\n 122,\n 1\n ],\n 'darkseagreen': [\n 143,\n 188,\n 143,\n 1\n ],\n 'darkslateblue': [\n 72,\n 61,\n 139,\n 1\n ],\n 'darkslategray': [\n 47,\n 79,\n 79,\n 1\n ],\n 'darkslategrey': [\n 47,\n 79,\n 79,\n 1\n ],\n 'darkturquoise': [\n 0,\n 206,\n 209,\n 1\n ],\n 'darkviolet': [\n 148,\n 0,\n 211,\n 1\n ],\n 'deeppink': [\n 255,\n 20,\n 147,\n 1\n ],\n 'deepskyblue': [\n 0,\n 191,\n 255,\n 1\n ],\n 'dimgray': [\n 105,\n 105,\n 105,\n 1\n ],\n 'dimgrey': [\n 105,\n 105,\n 105,\n 1\n ],\n 'dodgerblue': [\n 30,\n 144,\n 255,\n 1\n ],\n 'firebrick': [\n 178,\n 34,\n 34,\n 1\n ],\n 'floralwhite': [\n 255,\n 250,\n 240,\n 1\n ],\n 'forestgreen': [\n 34,\n 139,\n 34,\n 1\n ],\n 'fuchsia': [\n 255,\n 0,\n 255,\n 1\n ],\n 'gainsboro': [\n 220,\n 220,\n 220,\n 1\n ],\n 'ghostwhite': [\n 248,\n 248,\n 255,\n 1\n ],\n 'gold': [\n 255,\n 215,\n 0,\n 1\n ],\n 'goldenrod': [\n 218,\n 165,\n 32,\n 1\n ],\n 'gray': [\n 128,\n 128,\n 128,\n 1\n ],\n 'green': [\n 0,\n 128,\n 0,\n 1\n ],\n 'greenyellow': [\n 173,\n 255,\n 47,\n 1\n ],\n 'grey': [\n 128,\n 128,\n 128,\n 1\n ],\n 'honeydew': [\n 240,\n 255,\n 240,\n 1\n ],\n 'hotpink': [\n 255,\n 105,\n 180,\n 1\n ],\n 'indianred': [\n 205,\n 92,\n 92,\n 1\n ],\n 'indigo': [\n 75,\n 0,\n 130,\n 1\n ],\n 'ivory': [\n 255,\n 255,\n 240,\n 1\n ],\n 'khaki': [\n 240,\n 230,\n 140,\n 1\n ],\n 'lavender': [\n 230,\n 230,\n 250,\n 1\n ],\n 'lavenderblush': [\n 255,\n 240,\n 245,\n 1\n ],\n 'lawngreen': [\n 124,\n 252,\n 0,\n 1\n ],\n 'lemonchiffon': [\n 255,\n 250,\n 205,\n 1\n ],\n 'lightblue': [\n 173,\n 216,\n 230,\n 1\n ],\n 'lightcoral': [\n 240,\n 128,\n 128,\n 1\n ],\n 'lightcyan': [\n 224,\n 255,\n 255,\n 1\n ],\n 'lightgoldenrodyellow': [\n 250,\n 250,\n 210,\n 1\n ],\n 'lightgray': [\n 211,\n 211,\n 211,\n 1\n ],\n 'lightgreen': [\n 144,\n 238,\n 144,\n 1\n ],\n 'lightgrey': [\n 211,\n 211,\n 211,\n 1\n ],\n 'lightpink': [\n 255,\n 182,\n 193,\n 1\n ],\n 'lightsalmon': [\n 255,\n 160,\n 122,\n 1\n ],\n 'lightseagreen': [\n 32,\n 178,\n 170,\n 1\n ],\n 'lightskyblue': [\n 135,\n 206,\n 250,\n 1\n ],\n 'lightslategray': [\n 119,\n 136,\n 153,\n 1\n ],\n 'lightslategrey': [\n 119,\n 136,\n 153,\n 1\n ],\n 'lightsteelblue': [\n 176,\n 196,\n 222,\n 1\n ],\n 'lightyellow': [\n 255,\n 255,\n 224,\n 1\n ],\n 'lime': [\n 0,\n 255,\n 0,\n 1\n ],\n 'limegreen': [\n 50,\n 205,\n 50,\n 1\n ],\n 'linen': [\n 250,\n 240,\n 230,\n 1\n ],\n 'magenta': [\n 255,\n 0,\n 255,\n 1\n ],\n 'maroon': [\n 128,\n 0,\n 0,\n 1\n ],\n 'mediumaquamarine': [\n 102,\n 205,\n 170,\n 1\n ],\n 'mediumblue': [\n 0,\n 0,\n 205,\n 1\n ],\n 'mediumorchid': [\n 186,\n 85,\n 211,\n 1\n ],\n 'mediumpurple': [\n 147,\n 112,\n 219,\n 1\n ],\n 'mediumseagreen': [\n 60,\n 179,\n 113,\n 1\n ],\n 'mediumslateblue': [\n 123,\n 104,\n 238,\n 1\n ],\n 'mediumspringgreen': [\n 0,\n 250,\n 154,\n 1\n ],\n 'mediumturquoise': [\n 72,\n 209,\n 204,\n 1\n ],\n 'mediumvioletred': [\n 199,\n 21,\n 133,\n 1\n ],\n 'midnightblue': [\n 25,\n 25,\n 112,\n 1\n ],\n 'mintcream': [\n 245,\n 255,\n 250,\n 1\n ],\n 'mistyrose': [\n 255,\n 228,\n 225,\n 1\n ],\n 'moccasin': [\n 255,\n 228,\n 181,\n 1\n ],\n 'navajowhite': [\n 255,\n 222,\n 173,\n 1\n ],\n 'navy': [\n 0,\n 0,\n 128,\n 1\n ],\n 'oldlace': [\n 253,\n 245,\n 230,\n 1\n ],\n 'olive': [\n 128,\n 128,\n 0,\n 1\n ],\n 'olivedrab': [\n 107,\n 142,\n 35,\n 1\n ],\n 'orange': [\n 255,\n 165,\n 0,\n 1\n ],\n 'orangered': [\n 255,\n 69,\n 0,\n 1\n ],\n 'orchid': [\n 218,\n 112,\n 214,\n 1\n ],\n 'palegoldenrod': [\n 238,\n 232,\n 170,\n 1\n ],\n 'palegreen': [\n 152,\n 251,\n 152,\n 1\n ],\n 'paleturquoise': [\n 175,\n 238,\n 238,\n 1\n ],\n 'palevioletred': [\n 219,\n 112,\n 147,\n 1\n ],\n 'papayawhip': [\n 255,\n 239,\n 213,\n 1\n ],\n 'peachpuff': [\n 255,\n 218,\n 185,\n 1\n ],\n 'peru': [\n 205,\n 133,\n 63,\n 1\n ],\n 'pink': [\n 255,\n 192,\n 203,\n 1\n ],\n 'plum': [\n 221,\n 160,\n 221,\n 1\n ],\n 'powderblue': [\n 176,\n 224,\n 230,\n 1\n ],\n 'purple': [\n 128,\n 0,\n 128,\n 1\n ],\n 'rebeccapurple': [\n 102,\n 51,\n 153,\n 1\n ],\n 'red': [\n 255,\n 0,\n 0,\n 1\n ],\n 'rosybrown': [\n 188,\n 143,\n 143,\n 1\n ],\n 'royalblue': [\n 65,\n 105,\n 225,\n 1\n ],\n 'saddlebrown': [\n 139,\n 69,\n 19,\n 1\n ],\n 'salmon': [\n 250,\n 128,\n 114,\n 1\n ],\n 'sandybrown': [\n 244,\n 164,\n 96,\n 1\n ],\n 'seagreen': [\n 46,\n 139,\n 87,\n 1\n ],\n 'seashell': [\n 255,\n 245,\n 238,\n 1\n ],\n 'sienna': [\n 160,\n 82,\n 45,\n 1\n ],\n 'silver': [\n 192,\n 192,\n 192,\n 1\n ],\n 'skyblue': [\n 135,\n 206,\n 235,\n 1\n ],\n 'slateblue': [\n 106,\n 90,\n 205,\n 1\n ],\n 'slategray': [\n 112,\n 128,\n 144,\n 1\n ],\n 'slategrey': [\n 112,\n 128,\n 144,\n 1\n ],\n 'snow': [\n 255,\n 250,\n 250,\n 1\n ],\n 'springgreen': [\n 0,\n 255,\n 127,\n 1\n ],\n 'steelblue': [\n 70,\n 130,\n 180,\n 1\n ],\n 'tan': [\n 210,\n 180,\n 140,\n 1\n ],\n 'teal': [\n 0,\n 128,\n 128,\n 1\n ],\n 'thistle': [\n 216,\n 191,\n 216,\n 1\n ],\n 'tomato': [\n 255,\n 99,\n 71,\n 1\n ],\n 'turquoise': [\n 64,\n 224,\n 208,\n 1\n ],\n 'violet': [\n 238,\n 130,\n 238,\n 1\n ],\n 'wheat': [\n 245,\n 222,\n 179,\n 1\n ],\n 'white': [\n 255,\n 255,\n 255,\n 1\n ],\n 'whitesmoke': [\n 245,\n 245,\n 245,\n 1\n ],\n 'yellow': [\n 255,\n 255,\n 0,\n 1\n ],\n 'yellowgreen': [\n 154,\n 205,\n 50,\n 1\n ]\n};\nfunction clamp_css_byte(i) {\n // Clamp to integer 0 .. 255.\n i = Math.round(i);\n // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\nfunction clamp_css_float(f) {\n // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\nfunction parse_css_int(str) {\n // int or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_byte(parseFloat(str) / 100 * 255);\n return clamp_css_byte(parseInt(str));\n}\nfunction parse_css_float(str) {\n // float or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_float(parseFloat(str) / 100);\n return clamp_css_float(parseFloat(str));\n}\nfunction css_hue_to_rgb(m1, m2, h) {\n if (h < 0)\n h += 1;\n else if (h > 1)\n h -= 1;\n if (h * 6 < 1)\n return m1 + (m2 - m1) * h * 6;\n if (h * 2 < 1)\n return m2;\n if (h * 3 < 2)\n return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n return m1;\n}\nfunction parseCSSColor(css_str) {\n // Remove all whitespace, not compliant, but should just be more accepting.\n var str = css_str.replace(/ /g, '').toLowerCase();\n // Color keywords (and transparent) lookup.\n if (str in kCSSColorTable)\n return kCSSColorTable[str].slice();\n // dup.\n // #abc and #abc123 syntax.\n if (str[0] === '#') {\n if (str.length === 4) {\n var iv = parseInt(str.substr(1), 16);\n // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 4095))\n return null;\n // Covers NaN.\n return [\n (iv & 3840) >> 4 | (iv & 3840) >> 8,\n iv & 240 | (iv & 240) >> 4,\n iv & 15 | (iv & 15) << 4,\n 1\n ];\n } else if (str.length === 7) {\n var iv = parseInt(str.substr(1), 16);\n // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 16777215))\n return null;\n // Covers NaN.\n return [\n (iv & 16711680) >> 16,\n (iv & 65280) >> 8,\n iv & 255,\n 1\n ];\n }\n return null;\n }\n var op = str.indexOf('('), ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === str.length) {\n var fname = str.substr(0, op);\n var params = str.substr(op + 1, ep - (op + 1)).split(',');\n var alpha = 1;\n // To allow case fallthrough.\n switch (fname) {\n case 'rgba':\n if (params.length !== 4)\n return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'rgb':\n if (params.length !== 3)\n return null;\n return [\n parse_css_int(params[0]),\n parse_css_int(params[1]),\n parse_css_int(params[2]),\n alpha\n ];\n case 'hsla':\n if (params.length !== 4)\n return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'hsl':\n if (params.length !== 3)\n return null;\n var h = (parseFloat(params[0]) % 360 + 360) % 360 / 360;\n // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n var s = parse_css_float(params[1]);\n var l = parse_css_float(params[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n return [\n clamp_css_byte(css_hue_to_rgb(m1, m2, h + 1 / 3) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h - 1 / 3) * 255),\n alpha\n ];\n default:\n return null;\n }\n }\n return null;\n}\ntry {\n parseCSSColor_1 = csscolorparser.parseCSSColor = parseCSSColor;\n} catch (e) {\n}\n\n// \n/**\n * An RGBA color value. Create instances from color strings using the static\n * method `Color.parse`. The constructor accepts RGB channel values in the range\n * `[0, 1]`, premultiplied by A.\n *\n * @param {number} r The red channel.\n * @param {number} g The green channel.\n * @param {number} b The blue channel.\n * @param {number} a The alpha channel.\n * @private\n */\nclass Color {\n constructor(r, g, b, a = 1) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n }\n /**\n * Parses valid CSS color strings and returns a `Color` instance.\n * @returns A `Color` instance, or `undefined` if the input is not a valid color string.\n */\n static parse(input) {\n if (!input) {\n return undefined;\n }\n if (input instanceof Color) {\n return input;\n }\n if (typeof input !== 'string') {\n return undefined;\n }\n const rgba = parseCSSColor_1(input);\n if (!rgba) {\n return undefined;\n }\n return new Color(rgba[0] / 255 * rgba[3], rgba[1] / 255 * rgba[3], rgba[2] / 255 * rgba[3], rgba[3]);\n }\n /**\n * Returns an RGBA string representing the color value.\n *\n * @returns An RGBA string.\n * @example\n * var purple = new Color.parse('purple');\n * purple.toString; // = \"rgba(128,0,128,1)\"\n * var translucentGreen = new Color.parse('rgba(26, 207, 26, .73)');\n * translucentGreen.toString(); // = \"rgba(26,207,26,0.73)\"\n */\n toString() {\n const [r, g, b, a] = this.toArray();\n return `rgba(${ Math.round(r) },${ Math.round(g) },${ Math.round(b) },${ a })`;\n }\n /**\n * Returns an RGBA array of values representing the color, unpremultiplied by A.\n *\n * @returns An array of RGBA color values in the range [0, 255].\n */\n toArray() {\n const {r, g, b, a} = this;\n return a === 0 ? [\n 0,\n 0,\n 0,\n 0\n ] : [\n r * 255 / a,\n g * 255 / a,\n b * 255 / a,\n a\n ];\n }\n /**\n * Returns a RGBA array of float values representing the color, unpremultiplied by A.\n *\n * @returns An array of RGBA color values in the range [0, 1].\n */\n toArray01() {\n const {r, g, b, a} = this;\n return a === 0 ? [\n 0,\n 0,\n 0,\n 0\n ] : [\n r / a,\n g / a,\n b / a,\n a\n ];\n }\n /**\n * Returns an RGBA array of values representing the color, premultiplied by A.\n *\n * @returns An array of RGBA color values in the range [0, 1].\n */\n toArray01PremultipliedAlpha() {\n const {r, g, b, a} = this;\n return [\n r,\n g,\n b,\n a\n ];\n }\n}\nColor.black = new Color(0, 0, 0, 1);\nColor.white = new Color(1, 1, 1, 1);\nColor.transparent = new Color(0, 0, 0, 0);\nColor.red = new Color(1, 0, 0, 1);\nColor.blue = new Color(0, 0, 1, 1);\nvar Color$1 = Color;\n\nfunction convertLiteral(value) {\n return typeof value === 'object' ? [\n 'literal',\n value\n ] : value;\n}\nfunction convertFunction(parameters, propertySpec) {\n let stops = parameters.stops;\n if (!stops) {\n // identity function\n return convertIdentityFunction(parameters, propertySpec);\n }\n const zoomAndFeatureDependent = stops && typeof stops[0][0] === 'object';\n const featureDependent = zoomAndFeatureDependent || parameters.property !== undefined;\n const zoomDependent = zoomAndFeatureDependent || !featureDependent;\n stops = stops.map(stop => {\n if (!featureDependent && propertySpec.tokens && typeof stop[1] === 'string') {\n return [\n stop[0],\n convertTokenString(stop[1])\n ];\n }\n return [\n stop[0],\n convertLiteral(stop[1])\n ];\n });\n if (zoomAndFeatureDependent) {\n return convertZoomAndPropertyFunction(parameters, propertySpec, stops);\n } else if (zoomDependent) {\n return convertZoomFunction(parameters, propertySpec, stops);\n } else {\n return convertPropertyFunction(parameters, propertySpec, stops);\n }\n}\nfunction convertIdentityFunction(parameters, propertySpec) {\n const get = [\n 'get',\n parameters.property\n ];\n if (parameters.default === undefined) {\n // By default, expressions for string-valued properties get coerced. To preserve\n // legacy function semantics, insert an explicit assertion instead.\n return propertySpec.type === 'string' ? [\n 'string',\n get\n ] : get;\n } else if (propertySpec.type === 'enum') {\n return [\n 'match',\n get,\n Object.keys(propertySpec.values),\n get,\n parameters.default\n ];\n } else {\n const expression = [\n propertySpec.type === 'color' ? 'to-color' : propertySpec.type,\n get,\n convertLiteral(parameters.default)\n ];\n if (propertySpec.type === 'array') {\n expression.splice(1, 0, propertySpec.value, propertySpec.length || null);\n }\n return expression;\n }\n}\nfunction getInterpolateOperator(parameters) {\n switch (parameters.colorSpace) {\n case 'hcl':\n return 'interpolate-hcl';\n case 'lab':\n return 'interpolate-lab';\n default:\n return 'interpolate';\n }\n}\nfunction convertZoomAndPropertyFunction(parameters, propertySpec, stops) {\n const featureFunctionParameters = {};\n const featureFunctionStops = {};\n const zoomStops = [];\n for (let s = 0; s < stops.length; s++) {\n const stop = stops[s];\n const zoom = stop[0].zoom;\n if (featureFunctionParameters[zoom] === undefined) {\n featureFunctionParameters[zoom] = {\n zoom,\n type: parameters.type,\n property: parameters.property,\n default: parameters.default\n };\n featureFunctionStops[zoom] = [];\n zoomStops.push(zoom);\n }\n featureFunctionStops[zoom].push([\n stop[0].value,\n stop[1]\n ]);\n }\n // the interpolation type for the zoom dimension of a zoom-and-property\n // function is determined directly from the style property specification\n // for which it's being used: linear for interpolatable properties, step\n // otherwise.\n const functionType = getFunctionType({}, propertySpec);\n if (functionType === 'exponential') {\n const expression = [\n getInterpolateOperator(parameters),\n ['linear'],\n ['zoom']\n ];\n for (const z of zoomStops) {\n const output = convertPropertyFunction(featureFunctionParameters[z], propertySpec, featureFunctionStops[z]);\n appendStopPair(expression, z, output, false);\n }\n return expression;\n } else {\n const expression = [\n 'step',\n ['zoom']\n ];\n for (const z of zoomStops) {\n const output = convertPropertyFunction(featureFunctionParameters[z], propertySpec, featureFunctionStops[z]);\n appendStopPair(expression, z, output, true);\n }\n fixupDegenerateStepCurve(expression);\n return expression;\n }\n}\nfunction coalesce(a, b) {\n if (a !== undefined)\n return a;\n if (b !== undefined)\n return b;\n}\nfunction getFallback(parameters, propertySpec) {\n const defaultValue = convertLiteral(coalesce(parameters.default, propertySpec.default));\n /*\n * Some fields with type: resolvedImage have an undefined default.\n * Because undefined is an invalid value for resolvedImage, set fallback to\n * an empty string instead of undefined to ensure output\n * passes validation.\n */\n if (defaultValue === undefined && propertySpec.type === 'resolvedImage') {\n return '';\n }\n return defaultValue;\n}\nfunction convertPropertyFunction(parameters, propertySpec, stops) {\n const type = getFunctionType(parameters, propertySpec);\n const get = [\n 'get',\n parameters.property\n ];\n if (type === 'categorical' && typeof stops[0][0] === 'boolean') {\n const expression = ['case'];\n for (const stop of stops) {\n expression.push([\n '==',\n get,\n stop[0]\n ], stop[1]);\n }\n expression.push(getFallback(parameters, propertySpec));\n return expression;\n } else if (type === 'categorical') {\n const expression = [\n 'match',\n get\n ];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], false);\n }\n expression.push(getFallback(parameters, propertySpec));\n return expression;\n } else if (type === 'interval') {\n const expression = [\n 'step',\n [\n 'number',\n get\n ]\n ];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], true);\n }\n fixupDegenerateStepCurve(expression);\n return parameters.default === undefined ? expression : [\n 'case',\n [\n '==',\n [\n 'typeof',\n get\n ],\n 'number'\n ],\n expression,\n convertLiteral(parameters.default)\n ];\n } else if (type === 'exponential') {\n const base = parameters.base !== undefined ? parameters.base : 1;\n const expression = [\n getInterpolateOperator(parameters),\n base === 1 ? ['linear'] : [\n 'exponential',\n base\n ],\n [\n 'number',\n get\n ]\n ];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], false);\n }\n return parameters.default === undefined ? expression : [\n 'case',\n [\n '==',\n [\n 'typeof',\n get\n ],\n 'number'\n ],\n expression,\n convertLiteral(parameters.default)\n ];\n } else {\n throw new Error(`Unknown property function type ${ type }`);\n }\n}\nfunction convertZoomFunction(parameters, propertySpec, stops, input = ['zoom']) {\n const type = getFunctionType(parameters, propertySpec);\n let expression;\n let isStep = false;\n if (type === 'interval') {\n expression = [\n 'step',\n input\n ];\n isStep = true;\n } else if (type === 'exponential') {\n const base = parameters.base !== undefined ? parameters.base : 1;\n expression = [\n getInterpolateOperator(parameters),\n base === 1 ? ['linear'] : [\n 'exponential',\n base\n ],\n input\n ];\n } else {\n throw new Error(`Unknown zoom function type \"${ type }\"`);\n }\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], isStep);\n }\n fixupDegenerateStepCurve(expression);\n return expression;\n}\nfunction fixupDegenerateStepCurve(expression) {\n // degenerate step curve (i.e. a constant function): add a noop stop\n if (expression[0] === 'step' && expression.length === 3) {\n expression.push(0);\n expression.push(expression[3]);\n }\n}\nfunction appendStopPair(curve, input, output, isStep) {\n // Skip duplicate stop values. They were not validated for functions, but they are for expressions.\n // https://github.com/mapbox/mapbox-gl-js/issues/4107\n if (curve.length > 3 && input === curve[curve.length - 2]) {\n return;\n }\n // step curves don't get the first input value, as it is redundant.\n if (!(isStep && curve.length === 2)) {\n curve.push(input);\n }\n curve.push(output);\n}\nfunction getFunctionType(parameters, propertySpec) {\n if (parameters.type) {\n return parameters.type;\n } else {\n return propertySpec.expression.interpolated ? 'exponential' : 'interval';\n }\n}\n// \"String with {name} token\" => [\"concat\", \"String with \", [\"get\", \"name\"], \" token\"]\nfunction convertTokenString(s) {\n const result = ['concat'];\n const re = /{([^{}]+)}/g;\n let pos = 0;\n for (let match = re.exec(s); match !== null; match = re.exec(s)) {\n const literal = s.slice(pos, re.lastIndex - match[0].length);\n pos = re.lastIndex;\n if (literal.length > 0)\n result.push(literal);\n result.push([\n 'get',\n match[1]\n ]);\n }\n if (result.length === 1) {\n return s;\n }\n if (pos < s.length) {\n result.push(s.slice(pos));\n } else if (result.length === 2) {\n return [\n 'to-string',\n result[1]\n ];\n }\n return result;\n}\n\n// \nclass ParsingError extends Error {\n constructor(key, message) {\n super(message);\n this.message = message;\n this.key = key;\n }\n}\nvar ParsingError$1 = ParsingError;\n\n// \n/**\n * Tracks `let` bindings during expression parsing.\n * @private\n */\nclass Scope {\n constructor(parent, bindings = []) {\n this.parent = parent;\n this.bindings = {};\n for (const [name, expression] of bindings) {\n this.bindings[name] = expression;\n }\n }\n concat(bindings) {\n return new Scope(this, bindings);\n }\n get(name) {\n if (this.bindings[name]) {\n return this.bindings[name];\n }\n if (this.parent) {\n return this.parent.get(name);\n }\n throw new Error(`${ name } not found in scope.`);\n }\n has(name) {\n if (this.bindings[name])\n return true;\n return this.parent ? this.parent.has(name) : false;\n }\n}\nvar Scope$1 = Scope;\n\n// \nconst NullType = { kind: 'null' };\nconst NumberType = { kind: 'number' };\nconst StringType = { kind: 'string' };\nconst BooleanType = { kind: 'boolean' };\nconst ColorType = { kind: 'color' };\nconst ObjectType = { kind: 'object' };\nconst ValueType = { kind: 'value' };\nconst ErrorType = { kind: 'error' };\nconst CollatorType = { kind: 'collator' };\nconst FormattedType = { kind: 'formatted' };\nconst ResolvedImageType = { kind: 'resolvedImage' };\nfunction array$1(itemType, N) {\n return {\n kind: 'array',\n itemType,\n N\n };\n}\nfunction toString$1(type) {\n if (type.kind === 'array') {\n const itemType = toString$1(type.itemType);\n return typeof type.N === 'number' ? `array<${ itemType }, ${ type.N }>` : type.itemType.kind === 'value' ? 'array' : `array<${ itemType }>`;\n } else {\n return type.kind;\n }\n}\nconst valueMemberTypes = [\n NullType,\n NumberType,\n StringType,\n BooleanType,\n ColorType,\n FormattedType,\n ObjectType,\n array$1(ValueType),\n ResolvedImageType\n];\n/**\n * Returns null if `t` is a subtype of `expected`; otherwise returns an\n * error message.\n * @private\n */\nfunction checkSubtype(expected, t) {\n if (t.kind === 'error') {\n // Error is a subtype of every type\n return null;\n } else if (expected.kind === 'array') {\n if (t.kind === 'array' && (t.N === 0 && t.itemType.kind === 'value' || !checkSubtype(expected.itemType, t.itemType)) && (typeof expected.N !== 'number' || expected.N === t.N)) {\n return null;\n }\n } else if (expected.kind === t.kind) {\n return null;\n } else if (expected.kind === 'value') {\n for (const memberType of valueMemberTypes) {\n if (!checkSubtype(memberType, t)) {\n return null;\n }\n }\n }\n return `Expected ${ toString$1(expected) } but found ${ toString$1(t) } instead.`;\n}\nfunction isValidType(provided, allowedTypes) {\n return allowedTypes.some(t => t.kind === provided.kind);\n}\nfunction isValidNativeType(provided, allowedTypes) {\n return allowedTypes.some(t => {\n if (t === 'null') {\n return provided === null;\n } else if (t === 'array') {\n return Array.isArray(provided);\n } else if (t === 'object') {\n return provided && !Array.isArray(provided) && typeof provided === 'object';\n } else {\n return t === typeof provided;\n }\n });\n}\n\n// \n// Flow type declarations for Intl cribbed from\n// https://github.com/facebook/flow/issues/1270\nclass Collator {\n constructor(caseSensitive, diacriticSensitive, locale) {\n if (caseSensitive)\n this.sensitivity = diacriticSensitive ? 'variant' : 'case';\n else\n this.sensitivity = diacriticSensitive ? 'accent' : 'base';\n this.locale = locale;\n this.collator = new Intl.Collator(this.locale ? this.locale : [], {\n sensitivity: this.sensitivity,\n usage: 'search'\n });\n }\n compare(lhs, rhs) {\n return this.collator.compare(lhs, rhs);\n }\n resolvedLocale() {\n // We create a Collator without \"usage: search\" because we don't want\n // the search options encoded in our result (e.g. \"en-u-co-search\")\n return new Intl.Collator(this.locale ? this.locale : []).resolvedOptions().locale;\n }\n}\n\n// \nclass FormattedSection {\n constructor(text, image, scale, fontStack, textColor) {\n // combine characters so that diacritic marks are not separate code points\n this.text = text.normalize ? text.normalize() : text;\n this.image = image;\n this.scale = scale;\n this.fontStack = fontStack;\n this.textColor = textColor;\n }\n}\nclass Formatted {\n constructor(sections) {\n this.sections = sections;\n }\n static fromString(unformatted) {\n return new Formatted([new FormattedSection(unformatted, null, null, null, null)]);\n }\n isEmpty() {\n if (this.sections.length === 0)\n return true;\n return !this.sections.some(section => section.text.length !== 0 || section.image && section.image.name.length !== 0);\n }\n static factory(text) {\n if (text instanceof Formatted) {\n return text;\n } else {\n return Formatted.fromString(text);\n }\n }\n toString() {\n if (this.sections.length === 0)\n return '';\n return this.sections.map(section => section.text).join('');\n }\n serialize() {\n const serialized = ['format'];\n for (const section of this.sections) {\n if (section.image) {\n serialized.push([\n 'image',\n section.image.name\n ]);\n continue;\n }\n serialized.push(section.text);\n const options = {};\n if (section.fontStack) {\n options['text-font'] = [\n 'literal',\n section.fontStack.split(',')\n ];\n }\n if (section.scale) {\n options['font-scale'] = section.scale;\n }\n if (section.textColor) {\n options['text-color'] = ['rgba'].concat(section.textColor.toArray());\n }\n serialized.push(options);\n }\n return serialized;\n }\n}\n\n// \nclass ResolvedImage {\n constructor(options) {\n this.name = options.name;\n this.available = options.available;\n }\n toString() {\n return this.name;\n }\n static fromString(name) {\n if (!name)\n return null;\n // treat empty values as no image\n return new ResolvedImage({\n name,\n available: false\n });\n }\n serialize() {\n return [\n 'image',\n this.name\n ];\n }\n}\n\nfunction validateRGBA(r, g, b, a) {\n if (!(typeof r === 'number' && r >= 0 && r <= 255 && typeof g === 'number' && g >= 0 && g <= 255 && typeof b === 'number' && b >= 0 && b <= 255)) {\n const value = typeof a === 'number' ? [\n r,\n g,\n b,\n a\n ] : [\n r,\n g,\n b\n ];\n return `Invalid rgba value [${ value.join(', ') }]: 'r', 'g', and 'b' must be between 0 and 255.`;\n }\n if (!(typeof a === 'undefined' || typeof a === 'number' && a >= 0 && a <= 1)) {\n return `Invalid rgba value [${ [\n r,\n g,\n b,\n a\n ].join(', ') }]: 'a' must be between 0 and 1.`;\n }\n return null;\n}\nfunction isValue(mixed) {\n if (mixed === null) {\n return true;\n } else if (typeof mixed === 'string') {\n return true;\n } else if (typeof mixed === 'boolean') {\n return true;\n } else if (typeof mixed === 'number') {\n return true;\n } else if (mixed instanceof Color$1) {\n return true;\n } else if (mixed instanceof Collator) {\n return true;\n } else if (mixed instanceof Formatted) {\n return true;\n } else if (mixed instanceof ResolvedImage) {\n return true;\n } else if (Array.isArray(mixed)) {\n for (const item of mixed) {\n if (!isValue(item)) {\n return false;\n }\n }\n return true;\n } else if (typeof mixed === 'object') {\n for (const key in mixed) {\n if (!isValue(mixed[key])) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n}\nfunction typeOf(value) {\n if (value === null) {\n return NullType;\n } else if (typeof value === 'string') {\n return StringType;\n } else if (typeof value === 'boolean') {\n return BooleanType;\n } else if (typeof value === 'number') {\n return NumberType;\n } else if (value instanceof Color$1) {\n return ColorType;\n } else if (value instanceof Collator) {\n return CollatorType;\n } else if (value instanceof Formatted) {\n return FormattedType;\n } else if (value instanceof ResolvedImage) {\n return ResolvedImageType;\n } else if (Array.isArray(value)) {\n const length = value.length;\n let itemType;\n for (const item of value) {\n const t = typeOf(item);\n if (!itemType) {\n itemType = t;\n } else if (itemType === t) {\n continue;\n } else {\n itemType = ValueType;\n break;\n }\n }\n return array$1(itemType || ValueType, length);\n } else {\n return ObjectType;\n }\n}\nfunction toString(value) {\n const type = typeof value;\n if (value === null) {\n return '';\n } else if (type === 'string' || type === 'number' || type === 'boolean') {\n return String(value);\n } else if (value instanceof Color$1 || value instanceof Formatted || value instanceof ResolvedImage) {\n return value.toString();\n } else {\n return JSON.stringify(value);\n }\n}\n\nclass Literal {\n constructor(type, value) {\n this.type = type;\n this.value = value;\n }\n static parse(args, context) {\n if (args.length !== 2)\n return context.error(`'literal' expression requires exactly one argument, but found ${ args.length - 1 } instead.`);\n if (!isValue(args[1]))\n return context.error(`invalid value`);\n const value = args[1];\n let type = typeOf(value);\n // special case: infer the item type if possible for zero-length arrays\n const expected = context.expectedType;\n if (type.kind === 'array' && type.N === 0 && expected && expected.kind === 'array' && (typeof expected.N !== 'number' || expected.N === 0)) {\n type = expected;\n }\n return new Literal(type, value);\n }\n evaluate() {\n return this.value;\n }\n eachChild() {\n }\n outputDefined() {\n return true;\n }\n serialize() {\n if (this.type.kind === 'array' || this.type.kind === 'object') {\n return [\n 'literal',\n this.value\n ];\n } else if (this.value instanceof Color$1) {\n // Constant-folding can generate Literal expressions that you\n // couldn't actually generate with a \"literal\" expression,\n // so we have to implement an equivalent serialization here\n return ['rgba'].concat(this.value.toArray());\n } else if (this.value instanceof Formatted) {\n // Same as Color\n return this.value.serialize();\n } else {\n return this.value;\n }\n }\n}\nvar Literal$1 = Literal;\n\n// \nclass RuntimeError {\n constructor(message) {\n this.name = 'ExpressionEvaluationError';\n this.message = message;\n }\n toJSON() {\n return this.message;\n }\n}\nvar RuntimeError$1 = RuntimeError;\n\nconst types$2 = {\n string: StringType,\n number: NumberType,\n boolean: BooleanType,\n object: ObjectType\n};\nclass Assertion {\n constructor(type, args) {\n this.type = type;\n this.args = args;\n }\n static parse(args, context) {\n if (args.length < 2)\n return context.error(`Expected at least one argument.`);\n let i = 1;\n let type;\n const name = args[0];\n if (name === 'array') {\n let itemType;\n if (args.length > 2) {\n const type = args[1];\n if (typeof type !== 'string' || !(type in types$2) || type === 'object')\n return context.error('The item type argument of \"array\" must be one of string, number, boolean', 1);\n itemType = types$2[type];\n i++;\n } else {\n itemType = ValueType;\n }\n let N;\n if (args.length > 3) {\n if (args[2] !== null && (typeof args[2] !== 'number' || args[2] < 0 || args[2] !== Math.floor(args[2]))) {\n return context.error('The length argument to \"array\" must be a positive integer literal', 2);\n }\n N = args[2];\n i++;\n }\n type = array$1(itemType, N);\n } else {\n type = types$2[name];\n }\n const parsed = [];\n for (; i < args.length; i++) {\n const input = context.parse(args[i], i, ValueType);\n if (!input)\n return null;\n parsed.push(input);\n }\n return new Assertion(type, parsed);\n }\n evaluate(ctx) {\n for (let i = 0; i < this.args.length; i++) {\n const value = this.args[i].evaluate(ctx);\n const error = checkSubtype(this.type, typeOf(value));\n if (!error) {\n return value;\n } else if (i === this.args.length - 1) {\n throw new RuntimeError$1(`Expected value to be of type ${ toString$1(this.type) }, but found ${ toString$1(typeOf(value)) } instead.`);\n }\n }\n return null;\n }\n eachChild(fn) {\n this.args.forEach(fn);\n }\n outputDefined() {\n return this.args.every(arg => arg.outputDefined());\n }\n serialize() {\n const type = this.type;\n const serialized = [type.kind];\n if (type.kind === 'array') {\n const itemType = type.itemType;\n if (itemType.kind === 'string' || itemType.kind === 'number' || itemType.kind === 'boolean') {\n serialized.push(itemType.kind);\n const N = type.N;\n if (typeof N === 'number' || this.args.length > 1) {\n serialized.push(N);\n }\n }\n }\n return serialized.concat(this.args.map(arg => arg.serialize()));\n }\n}\nvar Assertion$1 = Assertion;\n\n// \nclass FormatExpression {\n constructor(sections) {\n this.type = FormattedType;\n this.sections = sections;\n }\n static parse(args, context) {\n if (args.length < 2) {\n return context.error(`Expected at least one argument.`);\n }\n const firstArg = args[1];\n if (!Array.isArray(firstArg) && typeof firstArg === 'object') {\n return context.error(`First argument must be an image or text section.`);\n }\n const sections = [];\n let nextTokenMayBeObject = false;\n for (let i = 1; i <= args.length - 1; ++i) {\n const arg = args[i];\n if (nextTokenMayBeObject && typeof arg === 'object' && !Array.isArray(arg)) {\n nextTokenMayBeObject = false;\n let scale = null;\n if (arg['font-scale']) {\n scale = context.parse(arg['font-scale'], 1, NumberType);\n if (!scale)\n return null;\n }\n let font = null;\n if (arg['text-font']) {\n font = context.parse(arg['text-font'], 1, array$1(StringType));\n if (!font)\n return null;\n }\n let textColor = null;\n if (arg['text-color']) {\n textColor = context.parse(arg['text-color'], 1, ColorType);\n if (!textColor)\n return null;\n }\n const lastExpression = sections[sections.length - 1];\n lastExpression.scale = scale;\n lastExpression.font = font;\n lastExpression.textColor = textColor;\n } else {\n const content = context.parse(args[i], 1, ValueType);\n if (!content)\n return null;\n const kind = content.type.kind;\n if (kind !== 'string' && kind !== 'value' && kind !== 'null' && kind !== 'resolvedImage')\n return context.error(`Formatted text type must be 'string', 'value', 'image' or 'null'.`);\n nextTokenMayBeObject = true;\n sections.push({\n content,\n scale: null,\n font: null,\n textColor: null\n });\n }\n }\n return new FormatExpression(sections);\n }\n evaluate(ctx) {\n const evaluateSection = section => {\n const evaluatedContent = section.content.evaluate(ctx);\n if (typeOf(evaluatedContent) === ResolvedImageType) {\n return new FormattedSection('', evaluatedContent, null, null, null);\n }\n return new FormattedSection(toString(evaluatedContent), null, section.scale ? section.scale.evaluate(ctx) : null, section.font ? section.font.evaluate(ctx).join(',') : null, section.textColor ? section.textColor.evaluate(ctx) : null);\n };\n return new Formatted(this.sections.map(evaluateSection));\n }\n eachChild(fn) {\n for (const section of this.sections) {\n fn(section.content);\n if (section.scale) {\n fn(section.scale);\n }\n if (section.font) {\n fn(section.font);\n }\n if (section.textColor) {\n fn(section.textColor);\n }\n }\n }\n outputDefined() {\n // Technically the combinatoric set of all children\n // Usually, this.text will be undefined anyway\n return false;\n }\n serialize() {\n const serialized = ['format'];\n for (const section of this.sections) {\n serialized.push(section.content.serialize());\n const options = {};\n if (section.scale) {\n options['font-scale'] = section.scale.serialize();\n }\n if (section.font) {\n options['text-font'] = section.font.serialize();\n }\n if (section.textColor) {\n options['text-color'] = section.textColor.serialize();\n }\n serialized.push(options);\n }\n return serialized;\n }\n}\n\n// \nclass ImageExpression {\n constructor(input) {\n this.type = ResolvedImageType;\n this.input = input;\n }\n static parse(args, context) {\n if (args.length !== 2) {\n return context.error(`Expected two arguments.`);\n }\n const name = context.parse(args[1], 1, StringType);\n if (!name)\n return context.error(`No image name provided.`);\n return new ImageExpression(name);\n }\n evaluate(ctx) {\n const evaluatedImageName = this.input.evaluate(ctx);\n const value = ResolvedImage.fromString(evaluatedImageName);\n if (value && ctx.availableImages)\n value.available = ctx.availableImages.indexOf(evaluatedImageName) > -1;\n return value;\n }\n eachChild(fn) {\n fn(this.input);\n }\n outputDefined() {\n // The output of image is determined by the list of available images in the evaluation context\n return false;\n }\n serialize() {\n return [\n 'image',\n this.input.serialize()\n ];\n }\n}\n\nconst types$1 = {\n 'to-boolean': BooleanType,\n 'to-color': ColorType,\n 'to-number': NumberType,\n 'to-string': StringType\n};\n/**\n * Special form for error-coalescing coercion expressions \"to-number\",\n * \"to-color\". Since these coercions can fail at runtime, they accept multiple\n * arguments, only evaluating one at a time until one succeeds.\n *\n * @private\n */\nclass Coercion {\n constructor(type, args) {\n this.type = type;\n this.args = args;\n }\n static parse(args, context) {\n if (args.length < 2)\n return context.error(`Expected at least one argument.`);\n const name = args[0];\n if ((name === 'to-boolean' || name === 'to-string') && args.length !== 2)\n return context.error(`Expected one argument.`);\n const type = types$1[name];\n const parsed = [];\n for (let i = 1; i < args.length; i++) {\n const input = context.parse(args[i], i, ValueType);\n if (!input)\n return null;\n parsed.push(input);\n }\n return new Coercion(type, parsed);\n }\n evaluate(ctx) {\n if (this.type.kind === 'boolean') {\n return Boolean(this.args[0].evaluate(ctx));\n } else if (this.type.kind === 'color') {\n let input;\n let error;\n for (const arg of this.args) {\n input = arg.evaluate(ctx);\n error = null;\n if (input instanceof Color$1) {\n return input;\n } else if (typeof input === 'string') {\n const c = ctx.parseColor(input);\n if (c)\n return c;\n } else if (Array.isArray(input)) {\n if (input.length < 3 || input.length > 4) {\n error = `Invalid rbga value ${ JSON.stringify(input) }: expected an array containing either three or four numeric values.`;\n } else {\n error = validateRGBA(input[0], input[1], input[2], input[3]);\n }\n if (!error) {\n return new Color$1(input[0] / 255, input[1] / 255, input[2] / 255, input[3]);\n }\n }\n }\n throw new RuntimeError$1(error || `Could not parse color from value '${ typeof input === 'string' ? input : String(JSON.stringify(input)) }'`);\n } else if (this.type.kind === 'number') {\n let value = null;\n for (const arg of this.args) {\n value = arg.evaluate(ctx);\n if (value === null)\n return 0;\n const num = Number(value);\n if (isNaN(num))\n continue;\n return num;\n }\n throw new RuntimeError$1(`Could not convert ${ JSON.stringify(value) } to number.`);\n } else if (this.type.kind === 'formatted') {\n // There is no explicit 'to-formatted' but this coercion can be implicitly\n // created by properties that expect the 'formatted' type.\n return Formatted.fromString(toString(this.args[0].evaluate(ctx)));\n } else if (this.type.kind === 'resolvedImage') {\n return ResolvedImage.fromString(toString(this.args[0].evaluate(ctx)));\n } else {\n return toString(this.args[0].evaluate(ctx));\n }\n }\n eachChild(fn) {\n this.args.forEach(fn);\n }\n outputDefined() {\n return this.args.every(arg => arg.outputDefined());\n }\n serialize() {\n if (this.type.kind === 'formatted') {\n return new FormatExpression([{\n content: this.args[0],\n scale: null,\n font: null,\n textColor: null\n }]).serialize();\n }\n if (this.type.kind === 'resolvedImage') {\n return new ImageExpression(this.args[0]).serialize();\n }\n const serialized = [`to-${ this.type.kind }`];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n}\nvar Coercion$1 = Coercion;\n\n// \nconst geometryTypes = [\n 'Unknown',\n 'Point',\n 'LineString',\n 'Polygon'\n];\nclass EvaluationContext {\n constructor() {\n this.globals = null;\n this.feature = null;\n this.featureState = null;\n this.formattedSection = null;\n this._parseColorCache = {};\n this.availableImages = null;\n this.canonical = null;\n this.featureTileCoord = null;\n this.featureDistanceData = null;\n }\n id() {\n return this.feature && this.feature.id !== undefined ? this.feature.id : null;\n }\n geometryType() {\n return this.feature ? typeof this.feature.type === 'number' ? geometryTypes[this.feature.type] : this.feature.type : null;\n }\n geometry() {\n return this.feature && 'geometry' in this.feature ? this.feature.geometry : null;\n }\n canonicalID() {\n return this.canonical;\n }\n properties() {\n return this.feature && this.feature.properties || {};\n }\n distanceFromCenter() {\n if (this.featureTileCoord && this.featureDistanceData) {\n const c = this.featureDistanceData.center;\n const scale = this.featureDistanceData.scale;\n const {x, y} = this.featureTileCoord;\n // Calculate the distance vector `d` (left handed)\n const dX = x * scale - c[0];\n const dY = y * scale - c[1];\n // The bearing vector `b` (left handed)\n const bX = this.featureDistanceData.bearing[0];\n const bY = this.featureDistanceData.bearing[1];\n // Distance is calculated as `dot(d, v)`\n const dist = bX * dX + bY * dY;\n return dist;\n }\n return 0;\n }\n parseColor(input) {\n let cached = this._parseColorCache[input];\n if (!cached) {\n cached = this._parseColorCache[input] = Color$1.parse(input);\n }\n return cached;\n }\n}\nvar EvaluationContext$1 = EvaluationContext;\n\n// \nclass CompoundExpression {\n constructor(name, type, evaluate, args) {\n this.name = name;\n this.type = type;\n this._evaluate = evaluate;\n this.args = args;\n }\n evaluate(ctx) {\n return this._evaluate(ctx, this.args);\n }\n eachChild(fn) {\n this.args.forEach(fn);\n }\n outputDefined() {\n return false;\n }\n serialize() {\n return [this.name].concat(this.args.map(arg => arg.serialize()));\n }\n static parse(args, context) {\n const op = args[0];\n const definition = CompoundExpression.definitions[op];\n if (!definition) {\n return context.error(`Unknown expression \"${ op }\". If you wanted a literal array, use [\"literal\", [...]].`, 0);\n }\n // Now check argument types against each signature\n const type = Array.isArray(definition) ? definition[0] : definition.type;\n const availableOverloads = Array.isArray(definition) ? [[\n definition[1],\n definition[2]\n ]] : definition.overloads;\n const overloads = availableOverloads.filter(([signature]) => !Array.isArray(signature) || // varags\n signature.length === args.length - 1 // correct param count\n);\n let signatureContext = null;\n for (const [params, evaluate] of overloads) {\n // Use a fresh context for each attempted signature so that, if\n // we eventually succeed, we haven't polluted `context.errors`.\n signatureContext = new ParsingContext$1(context.registry, context.path, null, context.scope);\n // First parse all the args, potentially coercing to the\n // types expected by this overload.\n const parsedArgs = [];\n let argParseFailed = false;\n for (let i = 1; i < args.length; i++) {\n const arg = args[i];\n const expectedType = Array.isArray(params) ? params[i - 1] : params.type;\n const parsed = signatureContext.parse(arg, 1 + parsedArgs.length, expectedType);\n if (!parsed) {\n argParseFailed = true;\n break;\n }\n parsedArgs.push(parsed);\n }\n if (argParseFailed) {\n // Couldn't coerce args of this overload to expected type, move\n // on to next one.\n continue;\n }\n if (Array.isArray(params)) {\n if (params.length !== parsedArgs.length) {\n signatureContext.error(`Expected ${ params.length } arguments, but found ${ parsedArgs.length } instead.`);\n continue;\n }\n }\n for (let i = 0; i < parsedArgs.length; i++) {\n const expected = Array.isArray(params) ? params[i] : params.type;\n const arg = parsedArgs[i];\n signatureContext.concat(i + 1).checkSubtype(expected, arg.type);\n }\n if (signatureContext.errors.length === 0) {\n return new CompoundExpression(op, type, evaluate, parsedArgs);\n }\n }\n if (overloads.length === 1) {\n context.errors.push(...signatureContext.errors);\n } else {\n const expected = overloads.length ? overloads : availableOverloads;\n const signatures = expected.map(([params]) => stringifySignature(params)).join(' | ');\n const actualTypes = [];\n // For error message, re-parse arguments without trying to\n // apply any coercions\n for (let i = 1; i < args.length; i++) {\n const parsed = context.parse(args[i], 1 + actualTypes.length);\n if (!parsed)\n return null;\n actualTypes.push(toString$1(parsed.type));\n }\n context.error(`Expected arguments of type ${ signatures }, but found (${ actualTypes.join(', ') }) instead.`);\n }\n return null;\n }\n static register(registry, definitions) {\n CompoundExpression.definitions = definitions;\n for (const name in definitions) {\n registry[name] = CompoundExpression;\n }\n }\n}\nfunction stringifySignature(signature) {\n if (Array.isArray(signature)) {\n return `(${ signature.map(toString$1).join(', ') })`;\n } else {\n return `(${ toString$1(signature.type) }...)`;\n }\n}\nvar CompoundExpression$1 = CompoundExpression;\n\n// \nclass CollatorExpression {\n constructor(caseSensitive, diacriticSensitive, locale) {\n this.type = CollatorType;\n this.locale = locale;\n this.caseSensitive = caseSensitive;\n this.diacriticSensitive = diacriticSensitive;\n }\n static parse(args, context) {\n if (args.length !== 2)\n return context.error(`Expected one argument.`);\n const options = args[1];\n if (typeof options !== 'object' || Array.isArray(options))\n return context.error(`Collator options argument must be an object.`);\n const caseSensitive = context.parse(options['case-sensitive'] === undefined ? false : options['case-sensitive'], 1, BooleanType);\n if (!caseSensitive)\n return null;\n const diacriticSensitive = context.parse(options['diacritic-sensitive'] === undefined ? false : options['diacritic-sensitive'], 1, BooleanType);\n if (!diacriticSensitive)\n return null;\n let locale = null;\n if (options['locale']) {\n locale = context.parse(options['locale'], 1, StringType);\n if (!locale)\n return null;\n }\n return new CollatorExpression(caseSensitive, diacriticSensitive, locale);\n }\n evaluate(ctx) {\n return new Collator(this.caseSensitive.evaluate(ctx), this.diacriticSensitive.evaluate(ctx), this.locale ? this.locale.evaluate(ctx) : null);\n }\n eachChild(fn) {\n fn(this.caseSensitive);\n fn(this.diacriticSensitive);\n if (this.locale) {\n fn(this.locale);\n }\n }\n outputDefined() {\n // Technically the set of possible outputs is the combinatoric set of Collators produced\n // by all possible outputs of locale/caseSensitive/diacriticSensitive\n // But for the primary use of Collators in comparison operators, we ignore the Collator's\n // possible outputs anyway, so we can get away with leaving this false for now.\n return false;\n }\n serialize() {\n const options = {};\n options['case-sensitive'] = this.caseSensitive.serialize();\n options['diacritic-sensitive'] = this.diacriticSensitive.serialize();\n if (this.locale) {\n options['locale'] = this.locale.serialize();\n }\n return [\n 'collator',\n options\n ];\n }\n}\n\n// \n// minX, minY, maxX, maxY\nconst EXTENT = 8192;\nfunction updateBBox(bbox, coord) {\n bbox[0] = Math.min(bbox[0], coord[0]);\n bbox[1] = Math.min(bbox[1], coord[1]);\n bbox[2] = Math.max(bbox[2], coord[0]);\n bbox[3] = Math.max(bbox[3], coord[1]);\n}\nfunction mercatorXfromLng(lng) {\n return (180 + lng) / 360;\n}\nfunction mercatorYfromLat(lat) {\n return (180 - 180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + lat * Math.PI / 360))) / 360;\n}\nfunction boxWithinBox(bbox1, bbox2) {\n if (bbox1[0] <= bbox2[0])\n return false;\n if (bbox1[2] >= bbox2[2])\n return false;\n if (bbox1[1] <= bbox2[1])\n return false;\n if (bbox1[3] >= bbox2[3])\n return false;\n return true;\n}\nfunction getTileCoordinates(p, canonical) {\n const x = mercatorXfromLng(p[0]);\n const y = mercatorYfromLat(p[1]);\n const tilesAtZoom = Math.pow(2, canonical.z);\n return [\n Math.round(x * tilesAtZoom * EXTENT),\n Math.round(y * tilesAtZoom * EXTENT)\n ];\n}\nfunction onBoundary(p, p1, p2) {\n const x1 = p[0] - p1[0];\n const y1 = p[1] - p1[1];\n const x2 = p[0] - p2[0];\n const y2 = p[1] - p2[1];\n return x1 * y2 - x2 * y1 === 0 && x1 * x2 <= 0 && y1 * y2 <= 0;\n}\nfunction rayIntersect(p, p1, p2) {\n return p1[1] > p[1] !== p2[1] > p[1] && p[0] < (p2[0] - p1[0]) * (p[1] - p1[1]) / (p2[1] - p1[1]) + p1[0];\n}\n// ray casting algorithm for detecting if point is in polygon\nfunction pointWithinPolygon(point, rings) {\n let inside = false;\n for (let i = 0, len = rings.length; i < len; i++) {\n const ring = rings[i];\n for (let j = 0, len2 = ring.length; j < len2 - 1; j++) {\n if (onBoundary(point, ring[j], ring[j + 1]))\n return false;\n if (rayIntersect(point, ring[j], ring[j + 1]))\n inside = !inside;\n }\n }\n return inside;\n}\nfunction pointWithinPolygons(point, polygons) {\n for (let i = 0; i < polygons.length; i++) {\n if (pointWithinPolygon(point, polygons[i]))\n return true;\n }\n return false;\n}\nfunction perp(v1, v2) {\n return v1[0] * v2[1] - v1[1] * v2[0];\n}\n// check if p1 and p2 are in different sides of line segment q1->q2\nfunction twoSided(p1, p2, q1, q2) {\n // q1->p1 (x1, y1), q1->p2 (x2, y2), q1->q2 (x3, y3)\n const x1 = p1[0] - q1[0];\n const y1 = p1[1] - q1[1];\n const x2 = p2[0] - q1[0];\n const y2 = p2[1] - q1[1];\n const x3 = q2[0] - q1[0];\n const y3 = q2[1] - q1[1];\n const det1 = x1 * y3 - x3 * y1;\n const det2 = x2 * y3 - x3 * y2;\n if (det1 > 0 && det2 < 0 || det1 < 0 && det2 > 0)\n return true;\n return false;\n}\n// a, b are end points for line segment1, c and d are end points for line segment2\nfunction lineIntersectLine(a, b, c, d) {\n // check if two segments are parallel or not\n // precondition is end point a, b is inside polygon, if line a->b is\n // parallel to polygon edge c->d, then a->b won't intersect with c->d\n const vectorP = [\n b[0] - a[0],\n b[1] - a[1]\n ];\n const vectorQ = [\n d[0] - c[0],\n d[1] - c[1]\n ];\n if (perp(vectorQ, vectorP) === 0)\n return false;\n // If lines are intersecting with each other, the relative location should be:\n // a and b lie in different sides of segment c->d\n // c and d lie in different sides of segment a->b\n if (twoSided(a, b, c, d) && twoSided(c, d, a, b))\n return true;\n return false;\n}\nfunction lineIntersectPolygon(p1, p2, polygon) {\n for (const ring of polygon) {\n // loop through every edge of the ring\n for (let j = 0; j < ring.length - 1; ++j) {\n if (lineIntersectLine(p1, p2, ring[j], ring[j + 1])) {\n return true;\n }\n }\n }\n return false;\n}\nfunction lineStringWithinPolygon(line, polygon) {\n // First, check if geometry points of line segments are all inside polygon\n for (let i = 0; i < line.length; ++i) {\n if (!pointWithinPolygon(line[i], polygon)) {\n return false;\n }\n }\n // Second, check if there is line segment intersecting polygon edge\n for (let i = 0; i < line.length - 1; ++i) {\n if (lineIntersectPolygon(line[i], line[i + 1], polygon)) {\n return false;\n }\n }\n return true;\n}\nfunction lineStringWithinPolygons(line, polygons) {\n for (let i = 0; i < polygons.length; i++) {\n if (lineStringWithinPolygon(line, polygons[i]))\n return true;\n }\n return false;\n}\nfunction getTilePolygon(coordinates, bbox, canonical) {\n const polygon = [];\n for (let i = 0; i < coordinates.length; i++) {\n const ring = [];\n for (let j = 0; j < coordinates[i].length; j++) {\n const coord = getTileCoordinates(coordinates[i][j], canonical);\n updateBBox(bbox, coord);\n ring.push(coord);\n }\n polygon.push(ring);\n }\n return polygon;\n}\nfunction getTilePolygons(coordinates, bbox, canonical) {\n const polygons = [];\n for (let i = 0; i < coordinates.length; i++) {\n const polygon = getTilePolygon(coordinates[i], bbox, canonical);\n polygons.push(polygon);\n }\n return polygons;\n}\nfunction updatePoint(p, bbox, polyBBox, worldSize) {\n if (p[0] < polyBBox[0] || p[0] > polyBBox[2]) {\n const halfWorldSize = worldSize * 0.5;\n let shift = p[0] - polyBBox[0] > halfWorldSize ? -worldSize : polyBBox[0] - p[0] > halfWorldSize ? worldSize : 0;\n if (shift === 0) {\n shift = p[0] - polyBBox[2] > halfWorldSize ? -worldSize : polyBBox[2] - p[0] > halfWorldSize ? worldSize : 0;\n }\n p[0] += shift;\n }\n updateBBox(bbox, p);\n}\nfunction resetBBox(bbox) {\n bbox[0] = bbox[1] = Infinity;\n bbox[2] = bbox[3] = -Infinity;\n}\nfunction getTilePoints(geometry, pointBBox, polyBBox, canonical) {\n const worldSize = Math.pow(2, canonical.z) * EXTENT;\n const shifts = [\n canonical.x * EXTENT,\n canonical.y * EXTENT\n ];\n const tilePoints = [];\n if (!geometry)\n return tilePoints;\n for (const points of geometry) {\n for (const point of points) {\n const p = [\n point.x + shifts[0],\n point.y + shifts[1]\n ];\n updatePoint(p, pointBBox, polyBBox, worldSize);\n tilePoints.push(p);\n }\n }\n return tilePoints;\n}\nfunction getTileLines(geometry, lineBBox, polyBBox, canonical) {\n const worldSize = Math.pow(2, canonical.z) * EXTENT;\n const shifts = [\n canonical.x * EXTENT,\n canonical.y * EXTENT\n ];\n const tileLines = [];\n if (!geometry)\n return tileLines;\n for (const line of geometry) {\n const tileLine = [];\n for (const point of line) {\n const p = [\n point.x + shifts[0],\n point.y + shifts[1]\n ];\n updateBBox(lineBBox, p);\n tileLine.push(p);\n }\n tileLines.push(tileLine);\n }\n if (lineBBox[2] - lineBBox[0] <= worldSize / 2) {\n resetBBox(lineBBox);\n for (const line of tileLines) {\n for (const p of line) {\n updatePoint(p, lineBBox, polyBBox, worldSize);\n }\n }\n }\n return tileLines;\n}\nfunction pointsWithinPolygons(ctx, polygonGeometry) {\n const pointBBox = [\n Infinity,\n Infinity,\n -Infinity,\n -Infinity\n ];\n const polyBBox = [\n Infinity,\n Infinity,\n -Infinity,\n -Infinity\n ];\n const canonical = ctx.canonicalID();\n if (!canonical) {\n return false;\n }\n if (polygonGeometry.type === 'Polygon') {\n const tilePolygon = getTilePolygon(polygonGeometry.coordinates, polyBBox, canonical);\n const tilePoints = getTilePoints(ctx.geometry(), pointBBox, polyBBox, canonical);\n if (!boxWithinBox(pointBBox, polyBBox))\n return false;\n for (const point of tilePoints) {\n if (!pointWithinPolygon(point, tilePolygon))\n return false;\n }\n }\n if (polygonGeometry.type === 'MultiPolygon') {\n const tilePolygons = getTilePolygons(polygonGeometry.coordinates, polyBBox, canonical);\n const tilePoints = getTilePoints(ctx.geometry(), pointBBox, polyBBox, canonical);\n if (!boxWithinBox(pointBBox, polyBBox))\n return false;\n for (const point of tilePoints) {\n if (!pointWithinPolygons(point, tilePolygons))\n return false;\n }\n }\n return true;\n}\nfunction linesWithinPolygons(ctx, polygonGeometry) {\n const lineBBox = [\n Infinity,\n Infinity,\n -Infinity,\n -Infinity\n ];\n const polyBBox = [\n Infinity,\n Infinity,\n -Infinity,\n -Infinity\n ];\n const canonical = ctx.canonicalID();\n if (!canonical) {\n return false;\n }\n if (polygonGeometry.type === 'Polygon') {\n const tilePolygon = getTilePolygon(polygonGeometry.coordinates, polyBBox, canonical);\n const tileLines = getTileLines(ctx.geometry(), lineBBox, polyBBox, canonical);\n if (!boxWithinBox(lineBBox, polyBBox))\n return false;\n for (const line of tileLines) {\n if (!lineStringWithinPolygon(line, tilePolygon))\n return false;\n }\n }\n if (polygonGeometry.type === 'MultiPolygon') {\n const tilePolygons = getTilePolygons(polygonGeometry.coordinates, polyBBox, canonical);\n const tileLines = getTileLines(ctx.geometry(), lineBBox, polyBBox, canonical);\n if (!boxWithinBox(lineBBox, polyBBox))\n return false;\n for (const line of tileLines) {\n if (!lineStringWithinPolygons(line, tilePolygons))\n return false;\n }\n }\n return true;\n}\nclass Within {\n constructor(geojson, geometries) {\n this.type = BooleanType;\n this.geojson = geojson;\n this.geometries = geometries;\n }\n static parse(args, context) {\n if (args.length !== 2)\n return context.error(`'within' expression requires exactly one argument, but found ${ args.length - 1 } instead.`);\n if (isValue(args[1])) {\n const geojson = args[1];\n if (geojson.type === 'FeatureCollection') {\n for (let i = 0; i < geojson.features.length; ++i) {\n const type = geojson.features[i].geometry.type;\n if (type === 'Polygon' || type === 'MultiPolygon') {\n return new Within(geojson, geojson.features[i].geometry);\n }\n }\n } else if (geojson.type === 'Feature') {\n const type = geojson.geometry.type;\n if (type === 'Polygon' || type === 'MultiPolygon') {\n return new Within(geojson, geojson.geometry);\n }\n } else if (geojson.type === 'Polygon' || geojson.type === 'MultiPolygon') {\n return new Within(geojson, geojson);\n }\n }\n return context.error(`'within' expression requires valid geojson object that contains polygon geometry type.`);\n }\n evaluate(ctx) {\n if (ctx.geometry() != null && ctx.canonicalID() != null) {\n if (ctx.geometryType() === 'Point') {\n return pointsWithinPolygons(ctx, this.geometries);\n } else if (ctx.geometryType() === 'LineString') {\n return linesWithinPolygons(ctx, this.geometries);\n }\n }\n return false;\n }\n eachChild() {\n }\n outputDefined() {\n return true;\n }\n serialize() {\n return [\n 'within',\n this.geojson\n ];\n }\n}\nvar Within$1 = Within;\n\n// \nfunction isFeatureConstant(e) {\n if (e instanceof CompoundExpression$1) {\n if (e.name === 'get' && e.args.length === 1) {\n return false;\n } else if (e.name === 'feature-state') {\n return false;\n } else if (e.name === 'has' && e.args.length === 1) {\n return false;\n } else if (e.name === 'properties' || e.name === 'geometry-type' || e.name === 'id') {\n return false;\n } else if (/^filter-/.test(e.name)) {\n return false;\n }\n }\n if (e instanceof Within$1) {\n return false;\n }\n let result = true;\n e.eachChild(arg => {\n if (result && !isFeatureConstant(arg)) {\n result = false;\n }\n });\n return result;\n}\nfunction isStateConstant(e) {\n if (e instanceof CompoundExpression$1) {\n if (e.name === 'feature-state') {\n return false;\n }\n }\n let result = true;\n e.eachChild(arg => {\n if (result && !isStateConstant(arg)) {\n result = false;\n }\n });\n return result;\n}\nfunction isGlobalPropertyConstant(e, properties) {\n if (e instanceof CompoundExpression$1 && properties.indexOf(e.name) >= 0) {\n return false;\n }\n let result = true;\n e.eachChild(arg => {\n if (result && !isGlobalPropertyConstant(arg, properties)) {\n result = false;\n }\n });\n return result;\n}\n\n// \nclass Var {\n constructor(name, boundExpression) {\n this.type = boundExpression.type;\n this.name = name;\n this.boundExpression = boundExpression;\n }\n static parse(args, context) {\n if (args.length !== 2 || typeof args[1] !== 'string')\n return context.error(`'var' expression requires exactly one string literal argument.`);\n const name = args[1];\n if (!context.scope.has(name)) {\n return context.error(`Unknown variable \"${ name }\". Make sure \"${ name }\" has been bound in an enclosing \"let\" expression before using it.`, 1);\n }\n return new Var(name, context.scope.get(name));\n }\n evaluate(ctx) {\n return this.boundExpression.evaluate(ctx);\n }\n eachChild() {\n }\n outputDefined() {\n return false;\n }\n serialize() {\n return [\n 'var',\n this.name\n ];\n }\n}\nvar Var$1 = Var;\n\n// \n/**\n * State associated parsing at a given point in an expression tree.\n * @private\n */\nclass ParsingContext {\n // The expected type of this expression. Provided only to allow Expression\n // implementations to infer argument types: Expression#parse() need not\n // check that the output type of the parsed expression matches\n // `expectedType`.\n constructor(registry, path = [], expectedType, scope = new Scope$1(), errors = []) {\n this.registry = registry;\n this.path = path;\n this.key = path.map(part => `[${ part }]`).join('');\n this.scope = scope;\n this.errors = errors;\n this.expectedType = expectedType;\n }\n /**\n * @param expr the JSON expression to parse\n * @param index the optional argument index if this expression is an argument of a parent expression that's being parsed\n * @param options\n * @param options.omitTypeAnnotations set true to omit inferred type annotations. Caller beware: with this option set, the parsed expression's type will NOT satisfy `expectedType` if it would normally be wrapped in an inferred annotation.\n * @private\n */\n parse(expr, index, expectedType, bindings, options = {}) {\n if (index) {\n return this.concat(index, expectedType, bindings)._parse(expr, options);\n }\n return this._parse(expr, options);\n }\n _parse(expr, options) {\n if (expr === null || typeof expr === 'string' || typeof expr === 'boolean' || typeof expr === 'number') {\n expr = [\n 'literal',\n expr\n ];\n }\n function annotate(parsed, type, typeAnnotation) {\n if (typeAnnotation === 'assert') {\n return new Assertion$1(type, [parsed]);\n } else if (typeAnnotation === 'coerce') {\n return new Coercion$1(type, [parsed]);\n } else {\n return parsed;\n }\n }\n if (Array.isArray(expr)) {\n if (expr.length === 0) {\n return this.error(`Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []].`);\n }\n const op = expr[0];\n if (typeof op !== 'string') {\n this.error(`Expression name must be a string, but found ${ typeof op } instead. If you wanted a literal array, use [\"literal\", [...]].`, 0);\n return null;\n }\n const Expr = this.registry[op];\n if (Expr) {\n let parsed = Expr.parse(expr, this);\n if (!parsed)\n return null;\n if (this.expectedType) {\n const expected = this.expectedType;\n const actual = parsed.type;\n // When we expect a number, string, boolean, or array but have a value, wrap it in an assertion.\n // When we expect a color or formatted string, but have a string or value, wrap it in a coercion.\n // Otherwise, we do static type-checking.\n //\n // These behaviors are overridable for:\n // * The \"coalesce\" operator, which needs to omit type annotations.\n // * String-valued properties (e.g. `text-field`), where coercion is more convenient than assertion.\n //\n if ((expected.kind === 'string' || expected.kind === 'number' || expected.kind === 'boolean' || expected.kind === 'object' || expected.kind === 'array') && actual.kind === 'value') {\n parsed = annotate(parsed, expected, options.typeAnnotation || 'assert');\n } else if ((expected.kind === 'color' || expected.kind === 'formatted' || expected.kind === 'resolvedImage') && (actual.kind === 'value' || actual.kind === 'string')) {\n parsed = annotate(parsed, expected, options.typeAnnotation || 'coerce');\n } else if (this.checkSubtype(expected, actual)) {\n return null;\n }\n }\n // If an expression's arguments are all literals, we can evaluate\n // it immediately and replace it with a literal value in the\n // parsed/compiled result. Expressions that expect an image should\n // not be resolved here so we can later get the available images.\n if (!(parsed instanceof Literal$1) && parsed.type.kind !== 'resolvedImage' && isConstant(parsed)) {\n const ec = new EvaluationContext$1();\n try {\n parsed = new Literal$1(parsed.type, parsed.evaluate(ec));\n } catch (e) {\n this.error(e.message);\n return null;\n }\n }\n return parsed;\n }\n return this.error(`Unknown expression \"${ op }\". If you wanted a literal array, use [\"literal\", [...]].`, 0);\n } else if (typeof expr === 'undefined') {\n return this.error(`'undefined' value invalid. Use null instead.`);\n } else if (typeof expr === 'object') {\n return this.error(`Bare objects invalid. Use [\"literal\", {...}] instead.`);\n } else {\n return this.error(`Expected an array, but found ${ typeof expr } instead.`);\n }\n }\n /**\n * Returns a copy of this context suitable for parsing the subexpression at\n * index `index`, optionally appending to 'let' binding map.\n *\n * Note that `errors` property, intended for collecting errors while\n * parsing, is copied by reference rather than cloned.\n * @private\n */\n concat(index, expectedType, bindings) {\n const path = typeof index === 'number' ? this.path.concat(index) : this.path;\n const scope = bindings ? this.scope.concat(bindings) : this.scope;\n return new ParsingContext(this.registry, path, expectedType || null, scope, this.errors);\n }\n /**\n * Push a parsing (or type checking) error into the `this.errors`\n * @param error The message\n * @param keys Optionally specify the source of the error at a child\n * of the current expression at `this.key`.\n * @private\n */\n error(error, ...keys) {\n const key = `${ this.key }${ keys.map(k => `[${ k }]`).join('') }`;\n this.errors.push(new ParsingError$1(key, error));\n }\n /**\n * Returns null if `t` is a subtype of `expected`; otherwise returns an\n * error message and also pushes it to `this.errors`.\n */\n checkSubtype(expected, t) {\n const error = checkSubtype(expected, t);\n if (error)\n this.error(error);\n return error;\n }\n}\nvar ParsingContext$1 = ParsingContext;\nfunction isConstant(expression) {\n if (expression instanceof Var$1) {\n return isConstant(expression.boundExpression);\n } else if (expression instanceof CompoundExpression$1 && expression.name === 'error') {\n return false;\n } else if (expression instanceof CollatorExpression) {\n // Although the results of a Collator expression with fixed arguments\n // generally shouldn't change between executions, we can't serialize them\n // as constant expressions because results change based on environment.\n return false;\n } else if (expression instanceof Within$1) {\n return false;\n }\n const isTypeAnnotation = expression instanceof Coercion$1 || expression instanceof Assertion$1;\n let childrenConstant = true;\n expression.eachChild(child => {\n // We can _almost_ assume that if `expressions` children are constant,\n // they would already have been evaluated to Literal values when they\n // were parsed. Type annotations are the exception, because they might\n // have been inferred and added after a child was parsed.\n // So we recurse into isConstant() for the children of type annotations,\n // but otherwise simply check whether they are Literals.\n if (isTypeAnnotation) {\n childrenConstant = childrenConstant && isConstant(child);\n } else {\n childrenConstant = childrenConstant && child instanceof Literal$1;\n }\n });\n if (!childrenConstant) {\n return false;\n }\n return isFeatureConstant(expression) && isGlobalPropertyConstant(expression, [\n 'zoom',\n 'heatmap-density',\n 'line-progress',\n 'sky-radial-progress',\n 'accumulated',\n 'is-supported-script',\n 'pitch',\n 'distance-from-center'\n ]);\n}\n\n// \n/**\n * Returns the index of the last stop <= input, or 0 if it doesn't exist.\n * @private\n */\nfunction findStopLessThanOrEqualTo(stops, input) {\n const lastIndex = stops.length - 1;\n let lowerIndex = 0;\n let upperIndex = lastIndex;\n let currentIndex = 0;\n let currentValue, nextValue;\n while (lowerIndex <= upperIndex) {\n currentIndex = Math.floor((lowerIndex + upperIndex) / 2);\n currentValue = stops[currentIndex];\n nextValue = stops[currentIndex + 1];\n if (currentValue <= input) {\n if (currentIndex === lastIndex || input < nextValue) {\n // Search complete\n return currentIndex;\n }\n lowerIndex = currentIndex + 1;\n } else if (currentValue > input) {\n upperIndex = currentIndex - 1;\n } else {\n throw new RuntimeError$1('Input is not a number.');\n }\n }\n return 0;\n}\n\n// \nclass Step {\n constructor(type, input, stops) {\n this.type = type;\n this.input = input;\n this.labels = [];\n this.outputs = [];\n for (const [label, expression] of stops) {\n this.labels.push(label);\n this.outputs.push(expression);\n }\n }\n static parse(args, context) {\n if (args.length - 1 < 4) {\n return context.error(`Expected at least 4 arguments, but found only ${ args.length - 1 }.`);\n }\n if ((args.length - 1) % 2 !== 0) {\n return context.error(`Expected an even number of arguments.`);\n }\n const input = context.parse(args[1], 1, NumberType);\n if (!input)\n return null;\n const stops = [];\n let outputType = null;\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n for (let i = 1; i < args.length; i += 2) {\n const label = i === 1 ? -Infinity : args[i];\n const value = args[i + 1];\n const labelKey = i;\n const valueKey = i + 1;\n if (typeof label !== 'number') {\n return context.error('Input/output pairs for \"step\" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey);\n }\n if (stops.length && stops[stops.length - 1][0] >= label) {\n return context.error('Input/output pairs for \"step\" expressions must be arranged with input values in strictly ascending order.', labelKey);\n }\n const parsed = context.parse(value, valueKey, outputType);\n if (!parsed)\n return null;\n outputType = outputType || parsed.type;\n stops.push([\n label,\n parsed\n ]);\n }\n return new Step(outputType, input, stops);\n }\n evaluate(ctx) {\n const labels = this.labels;\n const outputs = this.outputs;\n if (labels.length === 1) {\n return outputs[0].evaluate(ctx);\n }\n const value = this.input.evaluate(ctx);\n if (value <= labels[0]) {\n return outputs[0].evaluate(ctx);\n }\n const stopCount = labels.length;\n if (value >= labels[stopCount - 1]) {\n return outputs[stopCount - 1].evaluate(ctx);\n }\n const index = findStopLessThanOrEqualTo(labels, value);\n return outputs[index].evaluate(ctx);\n }\n eachChild(fn) {\n fn(this.input);\n for (const expression of this.outputs) {\n fn(expression);\n }\n }\n outputDefined() {\n return this.outputs.every(out => out.outputDefined());\n }\n serialize() {\n const serialized = [\n 'step',\n this.input.serialize()\n ];\n for (let i = 0; i < this.labels.length; i++) {\n if (i > 0) {\n serialized.push(this.labels[i]);\n }\n serialized.push(this.outputs[i].serialize());\n }\n return serialized;\n }\n}\nvar Step$1 = Step;\n\n/*\n * Copyright (C) 2008 Apple Inc. All Rights Reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Ported from Webkit\n * http://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/UnitBezier.h\n */\n\nvar unitbezier = UnitBezier;\nfunction UnitBezier(p1x, p1y, p2x, p2y) {\n // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1).\n this.cx = 3 * p1x;\n this.bx = 3 * (p2x - p1x) - this.cx;\n this.ax = 1 - this.cx - this.bx;\n this.cy = 3 * p1y;\n this.by = 3 * (p2y - p1y) - this.cy;\n this.ay = 1 - this.cy - this.by;\n this.p1x = p1x;\n this.p1y = p2y;\n this.p2x = p2x;\n this.p2y = p2y;\n}\nUnitBezier.prototype.sampleCurveX = function (t) {\n // `ax t^3 + bx t^2 + cx t' expanded using Horner's rule.\n return ((this.ax * t + this.bx) * t + this.cx) * t;\n};\nUnitBezier.prototype.sampleCurveY = function (t) {\n return ((this.ay * t + this.by) * t + this.cy) * t;\n};\nUnitBezier.prototype.sampleCurveDerivativeX = function (t) {\n return (3 * this.ax * t + 2 * this.bx) * t + this.cx;\n};\nUnitBezier.prototype.solveCurveX = function (x, epsilon) {\n if (typeof epsilon === 'undefined')\n epsilon = 0.000001;\n var t0, t1, t2, x2, i;\n // First try a few iterations of Newton's method -- normally very fast.\n for (t2 = x, i = 0; i < 8; i++) {\n x2 = this.sampleCurveX(t2) - x;\n if (Math.abs(x2) < epsilon)\n return t2;\n var d2 = this.sampleCurveDerivativeX(t2);\n if (Math.abs(d2) < 0.000001)\n break;\n t2 = t2 - x2 / d2;\n }\n // Fall back to the bisection method for reliability.\n t0 = 0;\n t1 = 1;\n t2 = x;\n if (t2 < t0)\n return t0;\n if (t2 > t1)\n return t1;\n while (t0 < t1) {\n x2 = this.sampleCurveX(t2);\n if (Math.abs(x2 - x) < epsilon)\n return t2;\n if (x > x2) {\n t0 = t2;\n } else {\n t1 = t2;\n }\n t2 = (t1 - t0) * 0.5 + t0;\n }\n // Failure.\n return t2;\n};\nUnitBezier.prototype.solve = function (x, epsilon) {\n return this.sampleCurveY(this.solveCurveX(x, epsilon));\n};\n\nvar UnitBezier$1 = /*@__PURE__*/getDefaultExportFromCjs(unitbezier);\n\n// \nfunction number(a, b, t) {\n return a * (1 - t) + b * t;\n}\nfunction color(from, to, t) {\n return new Color$1(number(from.r, to.r, t), number(from.g, to.g, t), number(from.b, to.b, t), number(from.a, to.a, t));\n}\nfunction array(from, to, t) {\n return from.map((d, i) => {\n return number(d, to[i], t);\n });\n}\n\nvar interpolate = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tnumber: number,\n\tcolor: color,\n\tarray: array\n});\n\n// \n// Constants\nconst Xn = 0.95047,\n // D65 standard referent\n Yn = 1, Zn = 1.08883, t0 = 4 / 29, t1 = 6 / 29, t2 = 3 * t1 * t1, t3 = t1 * t1 * t1, deg2rad$1 = Math.PI / 180, rad2deg = 180 / Math.PI;\n// Utilities\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\nfunction xyz2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\nfunction rgb2xyz(x) {\n x /= 255;\n return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n// LAB\nfunction rgbToLab(rgbColor) {\n const b = rgb2xyz(rgbColor.r), a = rgb2xyz(rgbColor.g), l = rgb2xyz(rgbColor.b), x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn), y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.072175 * l) / Yn), z = xyz2lab((0.0193339 * b + 0.119192 * a + 0.9503041 * l) / Zn);\n return {\n l: 116 * y - 16,\n a: 500 * (x - y),\n b: 200 * (y - z),\n alpha: rgbColor.a\n };\n}\nfunction labToRgb(labColor) {\n let y = (labColor.l + 16) / 116, x = isNaN(labColor.a) ? y : y + labColor.a / 500, z = isNaN(labColor.b) ? y : y - labColor.b / 200;\n y = Yn * lab2xyz(y);\n x = Xn * lab2xyz(x);\n z = Zn * lab2xyz(z);\n return new Color$1(xyz2rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n xyz2rgb(-0.969266 * x + 1.8760108 * y + 0.041556 * z), xyz2rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z), labColor.alpha);\n}\nfunction interpolateLab(from, to, t) {\n return {\n l: number(from.l, to.l, t),\n a: number(from.a, to.a, t),\n b: number(from.b, to.b, t),\n alpha: number(from.alpha, to.alpha, t)\n };\n}\n// HCL\nfunction rgbToHcl(rgbColor) {\n const {l, a, b} = rgbToLab(rgbColor);\n const h = Math.atan2(b, a) * rad2deg;\n return {\n h: h < 0 ? h + 360 : h,\n c: Math.sqrt(a * a + b * b),\n l,\n alpha: rgbColor.a\n };\n}\nfunction hclToRgb(hclColor) {\n const h = hclColor.h * deg2rad$1, c = hclColor.c, l = hclColor.l;\n return labToRgb({\n l,\n a: Math.cos(h) * c,\n b: Math.sin(h) * c,\n alpha: hclColor.alpha\n });\n}\nfunction interpolateHue(a, b, t) {\n const d = b - a;\n return a + t * (d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d);\n}\nfunction interpolateHcl(from, to, t) {\n return {\n h: interpolateHue(from.h, to.h, t),\n c: number(from.c, to.c, t),\n l: number(from.l, to.l, t),\n alpha: number(from.alpha, to.alpha, t)\n };\n}\nconst lab = {\n forward: rgbToLab,\n reverse: labToRgb,\n interpolate: interpolateLab\n};\nconst hcl = {\n forward: rgbToHcl,\n reverse: hclToRgb,\n interpolate: interpolateHcl\n};\n\n// \nclass Interpolate {\n constructor(type, operator, interpolation, input, stops) {\n this.type = type;\n this.operator = operator;\n this.interpolation = interpolation;\n this.input = input;\n this.labels = [];\n this.outputs = [];\n for (const [label, expression] of stops) {\n this.labels.push(label);\n this.outputs.push(expression);\n }\n }\n static interpolationFactor(interpolation, input, lower, upper) {\n let t = 0;\n if (interpolation.name === 'exponential') {\n t = exponentialInterpolation(input, interpolation.base, lower, upper);\n } else if (interpolation.name === 'linear') {\n t = exponentialInterpolation(input, 1, lower, upper);\n } else if (interpolation.name === 'cubic-bezier') {\n const c = interpolation.controlPoints;\n const ub = new UnitBezier$1(c[0], c[1], c[2], c[3]);\n t = ub.solve(exponentialInterpolation(input, 1, lower, upper));\n }\n return t;\n }\n static parse(args, context) {\n let [operator, interpolation, input, ...rest] = args;\n if (!Array.isArray(interpolation) || interpolation.length === 0) {\n return context.error(`Expected an interpolation type expression.`, 1);\n }\n if (interpolation[0] === 'linear') {\n interpolation = { name: 'linear' };\n } else if (interpolation[0] === 'exponential') {\n const base = interpolation[1];\n if (typeof base !== 'number')\n return context.error(`Exponential interpolation requires a numeric base.`, 1, 1);\n interpolation = {\n name: 'exponential',\n base\n };\n } else if (interpolation[0] === 'cubic-bezier') {\n const controlPoints = interpolation.slice(1);\n if (controlPoints.length !== 4 || controlPoints.some(t => typeof t !== 'number' || t < 0 || t > 1)) {\n return context.error('Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.', 1);\n }\n interpolation = {\n name: 'cubic-bezier',\n controlPoints: controlPoints\n };\n } else {\n return context.error(`Unknown interpolation type ${ String(interpolation[0]) }`, 1, 0);\n }\n if (args.length - 1 < 4) {\n return context.error(`Expected at least 4 arguments, but found only ${ args.length - 1 }.`);\n }\n if ((args.length - 1) % 2 !== 0) {\n return context.error(`Expected an even number of arguments.`);\n }\n input = context.parse(input, 2, NumberType);\n if (!input)\n return null;\n const stops = [];\n let outputType = null;\n if (operator === 'interpolate-hcl' || operator === 'interpolate-lab') {\n outputType = ColorType;\n } else if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n for (let i = 0; i < rest.length; i += 2) {\n const label = rest[i];\n const value = rest[i + 1];\n const labelKey = i + 3;\n const valueKey = i + 4;\n if (typeof label !== 'number') {\n return context.error('Input/output pairs for \"interpolate\" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey);\n }\n if (stops.length && stops[stops.length - 1][0] >= label) {\n return context.error('Input/output pairs for \"interpolate\" expressions must be arranged with input values in strictly ascending order.', labelKey);\n }\n const parsed = context.parse(value, valueKey, outputType);\n if (!parsed)\n return null;\n outputType = outputType || parsed.type;\n stops.push([\n label,\n parsed\n ]);\n }\n if (outputType.kind !== 'number' && outputType.kind !== 'color' && !(outputType.kind === 'array' && outputType.itemType.kind === 'number' && typeof outputType.N === 'number')) {\n return context.error(`Type ${ toString$1(outputType) } is not interpolatable.`);\n }\n return new Interpolate(outputType, operator, interpolation, input, stops);\n }\n evaluate(ctx) {\n const labels = this.labels;\n const outputs = this.outputs;\n if (labels.length === 1) {\n return outputs[0].evaluate(ctx);\n }\n const value = this.input.evaluate(ctx);\n if (value <= labels[0]) {\n return outputs[0].evaluate(ctx);\n }\n const stopCount = labels.length;\n if (value >= labels[stopCount - 1]) {\n return outputs[stopCount - 1].evaluate(ctx);\n }\n const index = findStopLessThanOrEqualTo(labels, value);\n const lower = labels[index];\n const upper = labels[index + 1];\n const t = Interpolate.interpolationFactor(this.interpolation, value, lower, upper);\n const outputLower = outputs[index].evaluate(ctx);\n const outputUpper = outputs[index + 1].evaluate(ctx);\n if (this.operator === 'interpolate') {\n return interpolate[this.type.kind.toLowerCase()](outputLower, outputUpper, t); // eslint-disable-line import/namespace\n } else if (this.operator === 'interpolate-hcl') {\n return hcl.reverse(hcl.interpolate(hcl.forward(outputLower), hcl.forward(outputUpper), t));\n } else {\n return lab.reverse(lab.interpolate(lab.forward(outputLower), lab.forward(outputUpper), t));\n }\n }\n eachChild(fn) {\n fn(this.input);\n for (const expression of this.outputs) {\n fn(expression);\n }\n }\n outputDefined() {\n return this.outputs.every(out => out.outputDefined());\n }\n serialize() {\n let interpolation;\n if (this.interpolation.name === 'linear') {\n interpolation = ['linear'];\n } else if (this.interpolation.name === 'exponential') {\n if (this.interpolation.base === 1) {\n interpolation = ['linear'];\n } else {\n interpolation = [\n 'exponential',\n this.interpolation.base\n ];\n }\n } else {\n interpolation = ['cubic-bezier'].concat(this.interpolation.controlPoints);\n }\n const serialized = [\n this.operator,\n interpolation,\n this.input.serialize()\n ];\n for (let i = 0; i < this.labels.length; i++) {\n serialized.push(this.labels[i], this.outputs[i].serialize());\n }\n return serialized;\n }\n}\n/**\n * Returns a ratio that can be used to interpolate between exponential function\n * stops.\n * How it works: Two consecutive stop values define a (scaled and shifted) exponential function `f(x) = a * base^x + b`, where `base` is the user-specified base,\n * and `a` and `b` are constants affording sufficient degrees of freedom to fit\n * the function to the given stops.\n *\n * Here's a bit of algebra that lets us compute `f(x)` directly from the stop\n * values without explicitly solving for `a` and `b`:\n *\n * First stop value: `f(x0) = y0 = a * base^x0 + b`\n * Second stop value: `f(x1) = y1 = a * base^x1 + b`\n * => `y1 - y0 = a(base^x1 - base^x0)`\n * => `a = (y1 - y0)/(base^x1 - base^x0)`\n *\n * Desired value: `f(x) = y = a * base^x + b`\n * => `f(x) = y0 + a * (base^x - base^x0)`\n *\n * From the above, we can replace the `a` in `a * (base^x - base^x0)` and do a\n * little algebra:\n * ```\n * a * (base^x - base^x0) = (y1 - y0)/(base^x1 - base^x0) * (base^x - base^x0)\n * = (y1 - y0) * (base^x - base^x0) / (base^x1 - base^x0)\n * ```\n *\n * If we let `(base^x - base^x0) / (base^x1 base^x0)`, then we have\n * `f(x) = y0 + (y1 - y0) * ratio`. In other words, `ratio` may be treated as\n * an interpolation factor between the two stops' output values.\n *\n * (Note: a slightly different form for `ratio`,\n * `(base^(x-x0) - 1) / (base^(x1-x0) - 1) `, is equivalent, but requires fewer\n * expensive `Math.pow()` operations.)\n *\n * @private\n*/\nfunction exponentialInterpolation(input, base, lowerValue, upperValue) {\n const difference = upperValue - lowerValue;\n const progress = input - lowerValue;\n if (difference === 0) {\n return 0;\n } else if (base === 1) {\n return progress / difference;\n } else {\n return (Math.pow(base, progress) - 1) / (Math.pow(base, difference) - 1);\n }\n}\nvar Interpolate$1 = Interpolate;\n\nclass Coalesce {\n constructor(type, args) {\n this.type = type;\n this.args = args;\n }\n static parse(args, context) {\n if (args.length < 2) {\n return context.error('Expectected at least one argument.');\n }\n let outputType = null;\n const expectedType = context.expectedType;\n if (expectedType && expectedType.kind !== 'value') {\n outputType = expectedType;\n }\n const parsedArgs = [];\n for (const arg of args.slice(1)) {\n const parsed = context.parse(arg, 1 + parsedArgs.length, outputType, undefined, { typeAnnotation: 'omit' });\n if (!parsed)\n return null;\n outputType = outputType || parsed.type;\n parsedArgs.push(parsed);\n }\n // Above, we parse arguments without inferred type annotation so that\n // they don't produce a runtime error for `null` input, which would\n // preempt the desired null-coalescing behavior.\n // Thus, if any of our arguments would have needed an annotation, we\n // need to wrap the enclosing coalesce expression with it instead.\n const needsAnnotation = expectedType && parsedArgs.some(arg => checkSubtype(expectedType, arg.type));\n return needsAnnotation ? new Coalesce(ValueType, parsedArgs) : new Coalesce(outputType, parsedArgs);\n }\n evaluate(ctx) {\n let result = null;\n let argCount = 0;\n let firstImage;\n for (const arg of this.args) {\n argCount++;\n result = arg.evaluate(ctx);\n // we need to keep track of the first requested image in a coalesce statement\n // if coalesce can't find a valid image, we return the first image so styleimagemissing can fire\n if (result && result instanceof ResolvedImage && !result.available) {\n // set to first image\n if (!firstImage) {\n firstImage = result;\n }\n result = null;\n // if we reach the end, return the first image\n if (argCount === this.args.length) {\n return firstImage;\n }\n }\n if (result !== null)\n break;\n }\n return result;\n }\n eachChild(fn) {\n this.args.forEach(fn);\n }\n outputDefined() {\n return this.args.every(arg => arg.outputDefined());\n }\n serialize() {\n const serialized = ['coalesce'];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n}\nvar Coalesce$1 = Coalesce;\n\n// \nclass Let {\n constructor(bindings, result) {\n this.type = result.type;\n this.bindings = [].concat(bindings);\n this.result = result;\n }\n evaluate(ctx) {\n return this.result.evaluate(ctx);\n }\n eachChild(fn) {\n for (const binding of this.bindings) {\n fn(binding[1]);\n }\n fn(this.result);\n }\n static parse(args, context) {\n if (args.length < 4)\n return context.error(`Expected at least 3 arguments, but found ${ args.length - 1 } instead.`);\n const bindings = [];\n for (let i = 1; i < args.length - 1; i += 2) {\n const name = args[i];\n if (typeof name !== 'string') {\n return context.error(`Expected string, but found ${ typeof name } instead.`, i);\n }\n if (/[^a-zA-Z0-9_]/.test(name)) {\n return context.error(`Variable names must contain only alphanumeric characters or '_'.`, i);\n }\n const value = context.parse(args[i + 1], i + 1);\n if (!value)\n return null;\n bindings.push([\n name,\n value\n ]);\n }\n const result = context.parse(args[args.length - 1], args.length - 1, context.expectedType, bindings);\n if (!result)\n return null;\n return new Let(bindings, result);\n }\n outputDefined() {\n return this.result.outputDefined();\n }\n serialize() {\n const serialized = ['let'];\n for (const [name, expr] of this.bindings) {\n serialized.push(name, expr.serialize());\n }\n serialized.push(this.result.serialize());\n return serialized;\n }\n}\nvar Let$1 = Let;\n\n// \nclass At {\n constructor(type, index, input) {\n this.type = type;\n this.index = index;\n this.input = input;\n }\n static parse(args, context) {\n if (args.length !== 3)\n return context.error(`Expected 2 arguments, but found ${ args.length - 1 } instead.`);\n const index = context.parse(args[1], 1, NumberType);\n const input = context.parse(args[2], 2, array$1(context.expectedType || ValueType));\n if (!index || !input)\n return null;\n const t = input.type;\n return new At(t.itemType, index, input);\n }\n evaluate(ctx) {\n const index = this.index.evaluate(ctx);\n const array = this.input.evaluate(ctx);\n if (index < 0) {\n throw new RuntimeError$1(`Array index out of bounds: ${ index } < 0.`);\n }\n if (index >= array.length) {\n throw new RuntimeError$1(`Array index out of bounds: ${ index } > ${ array.length - 1 }.`);\n }\n if (index !== Math.floor(index)) {\n throw new RuntimeError$1(`Array index must be an integer, but found ${ index } instead.`);\n }\n return array[index];\n }\n eachChild(fn) {\n fn(this.index);\n fn(this.input);\n }\n outputDefined() {\n return false;\n }\n serialize() {\n return [\n 'at',\n this.index.serialize(),\n this.input.serialize()\n ];\n }\n}\nvar At$1 = At;\n\n// \nclass In {\n constructor(needle, haystack) {\n this.type = BooleanType;\n this.needle = needle;\n this.haystack = haystack;\n }\n static parse(args, context) {\n if (args.length !== 3) {\n return context.error(`Expected 2 arguments, but found ${ args.length - 1 } instead.`);\n }\n const needle = context.parse(args[1], 1, ValueType);\n const haystack = context.parse(args[2], 2, ValueType);\n if (!needle || !haystack)\n return null;\n if (!isValidType(needle.type, [\n BooleanType,\n StringType,\n NumberType,\n NullType,\n ValueType\n ])) {\n return context.error(`Expected first argument to be of type boolean, string, number or null, but found ${ toString$1(needle.type) } instead`);\n }\n return new In(needle, haystack);\n }\n evaluate(ctx) {\n const needle = this.needle.evaluate(ctx);\n const haystack = this.haystack.evaluate(ctx);\n if (haystack == null)\n return false;\n if (!isValidNativeType(needle, [\n 'boolean',\n 'string',\n 'number',\n 'null'\n ])) {\n throw new RuntimeError$1(`Expected first argument to be of type boolean, string, number or null, but found ${ toString$1(typeOf(needle)) } instead.`);\n }\n if (!isValidNativeType(haystack, [\n 'string',\n 'array'\n ])) {\n throw new RuntimeError$1(`Expected second argument to be of type array or string, but found ${ toString$1(typeOf(haystack)) } instead.`);\n }\n return haystack.indexOf(needle) >= 0;\n }\n eachChild(fn) {\n fn(this.needle);\n fn(this.haystack);\n }\n outputDefined() {\n return true;\n }\n serialize() {\n return [\n 'in',\n this.needle.serialize(),\n this.haystack.serialize()\n ];\n }\n}\nvar In$1 = In;\n\n// \nclass IndexOf {\n constructor(needle, haystack, fromIndex) {\n this.type = NumberType;\n this.needle = needle;\n this.haystack = haystack;\n this.fromIndex = fromIndex;\n }\n static parse(args, context) {\n if (args.length <= 2 || args.length >= 5) {\n return context.error(`Expected 3 or 4 arguments, but found ${ args.length - 1 } instead.`);\n }\n const needle = context.parse(args[1], 1, ValueType);\n const haystack = context.parse(args[2], 2, ValueType);\n if (!needle || !haystack)\n return null;\n if (!isValidType(needle.type, [\n BooleanType,\n StringType,\n NumberType,\n NullType,\n ValueType\n ])) {\n return context.error(`Expected first argument to be of type boolean, string, number or null, but found ${ toString$1(needle.type) } instead`);\n }\n if (args.length === 4) {\n const fromIndex = context.parse(args[3], 3, NumberType);\n if (!fromIndex)\n return null;\n return new IndexOf(needle, haystack, fromIndex);\n } else {\n return new IndexOf(needle, haystack);\n }\n }\n evaluate(ctx) {\n const needle = this.needle.evaluate(ctx);\n const haystack = this.haystack.evaluate(ctx);\n if (!isValidNativeType(needle, [\n 'boolean',\n 'string',\n 'number',\n 'null'\n ])) {\n throw new RuntimeError$1(`Expected first argument to be of type boolean, string, number or null, but found ${ toString$1(typeOf(needle)) } instead.`);\n }\n if (!isValidNativeType(haystack, [\n 'string',\n 'array'\n ])) {\n throw new RuntimeError$1(`Expected second argument to be of type array or string, but found ${ toString$1(typeOf(haystack)) } instead.`);\n }\n if (this.fromIndex) {\n const fromIndex = this.fromIndex.evaluate(ctx);\n return haystack.indexOf(needle, fromIndex);\n }\n return haystack.indexOf(needle);\n }\n eachChild(fn) {\n fn(this.needle);\n fn(this.haystack);\n if (this.fromIndex) {\n fn(this.fromIndex);\n }\n }\n outputDefined() {\n return false;\n }\n serialize() {\n if (this.fromIndex != null && this.fromIndex !== undefined) {\n const fromIndex = this.fromIndex.serialize();\n return [\n 'index-of',\n this.needle.serialize(),\n this.haystack.serialize(),\n fromIndex\n ];\n }\n return [\n 'index-of',\n this.needle.serialize(),\n this.haystack.serialize()\n ];\n }\n}\nvar IndexOf$1 = IndexOf;\n\n// Map input label values to output expression index\nclass Match {\n constructor(inputType, outputType, input, cases, outputs, otherwise) {\n this.inputType = inputType;\n this.type = outputType;\n this.input = input;\n this.cases = cases;\n this.outputs = outputs;\n this.otherwise = otherwise;\n }\n static parse(args, context) {\n if (args.length < 5)\n return context.error(`Expected at least 4 arguments, but found only ${ args.length - 1 }.`);\n if (args.length % 2 !== 1)\n return context.error(`Expected an even number of arguments.`);\n let inputType;\n let outputType;\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n const cases = {};\n const outputs = [];\n for (let i = 2; i < args.length - 1; i += 2) {\n let labels = args[i];\n const value = args[i + 1];\n if (!Array.isArray(labels)) {\n labels = [labels];\n }\n const labelContext = context.concat(i);\n if (labels.length === 0) {\n return labelContext.error('Expected at least one branch label.');\n }\n for (const label of labels) {\n if (typeof label !== 'number' && typeof label !== 'string') {\n return labelContext.error(`Branch labels must be numbers or strings.`);\n } else if (typeof label === 'number' && Math.abs(label) > Number.MAX_SAFE_INTEGER) {\n return labelContext.error(`Branch labels must be integers no larger than ${ Number.MAX_SAFE_INTEGER }.`);\n } else if (typeof label === 'number' && Math.floor(label) !== label) {\n return labelContext.error(`Numeric branch labels must be integer values.`);\n } else if (!inputType) {\n inputType = typeOf(label);\n } else if (labelContext.checkSubtype(inputType, typeOf(label))) {\n return null;\n }\n if (typeof cases[String(label)] !== 'undefined') {\n return labelContext.error('Branch labels must be unique.');\n }\n cases[String(label)] = outputs.length;\n }\n const result = context.parse(value, i, outputType);\n if (!result)\n return null;\n outputType = outputType || result.type;\n outputs.push(result);\n }\n const input = context.parse(args[1], 1, ValueType);\n if (!input)\n return null;\n const otherwise = context.parse(args[args.length - 1], args.length - 1, outputType);\n if (!otherwise)\n return null;\n if (input.type.kind !== 'value' && context.concat(1).checkSubtype(inputType, input.type)) {\n return null;\n }\n return new Match(inputType, outputType, input, cases, outputs, otherwise);\n }\n evaluate(ctx) {\n const input = this.input.evaluate(ctx);\n const output = typeOf(input) === this.inputType && this.outputs[this.cases[input]] || this.otherwise;\n return output.evaluate(ctx);\n }\n eachChild(fn) {\n fn(this.input);\n this.outputs.forEach(fn);\n fn(this.otherwise);\n }\n outputDefined() {\n return this.outputs.every(out => out.outputDefined()) && this.otherwise.outputDefined();\n }\n serialize() {\n const serialized = [\n 'match',\n this.input.serialize()\n ];\n // Sort so serialization has an arbitrary defined order, even though\n // branch order doesn't affect evaluation\n const sortedLabels = Object.keys(this.cases).sort();\n // Group branches by unique match expression to support condensed\n // serializations of the form [case1, case2, ...] -> matchExpression\n const groupedByOutput = [];\n const outputLookup = {};\n // lookup index into groupedByOutput for a given output expression\n for (const label of sortedLabels) {\n const outputIndex = outputLookup[this.cases[label]];\n if (outputIndex === undefined) {\n // First time seeing this output, add it to the end of the grouped list\n outputLookup[this.cases[label]] = groupedByOutput.length;\n groupedByOutput.push([\n this.cases[label],\n [label]\n ]);\n } else {\n // We've seen this expression before, add the label to that output's group\n groupedByOutput[outputIndex][1].push(label);\n }\n }\n const coerceLabel = label => this.inputType.kind === 'number' ? Number(label) : label;\n for (const [outputIndex, labels] of groupedByOutput) {\n if (labels.length === 1) {\n // Only a single label matches this output expression\n serialized.push(coerceLabel(labels[0]));\n } else {\n // Array of literal labels pointing to this output expression\n serialized.push(labels.map(coerceLabel));\n }\n serialized.push(this.outputs[outputIndex].serialize());\n }\n serialized.push(this.otherwise.serialize());\n return serialized;\n }\n}\nvar Match$1 = Match;\n\nclass Case {\n constructor(type, branches, otherwise) {\n this.type = type;\n this.branches = branches;\n this.otherwise = otherwise;\n }\n static parse(args, context) {\n if (args.length < 4)\n return context.error(`Expected at least 3 arguments, but found only ${ args.length - 1 }.`);\n if (args.length % 2 !== 0)\n return context.error(`Expected an odd number of arguments.`);\n let outputType;\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n const branches = [];\n for (let i = 1; i < args.length - 1; i += 2) {\n const test = context.parse(args[i], i, BooleanType);\n if (!test)\n return null;\n const result = context.parse(args[i + 1], i + 1, outputType);\n if (!result)\n return null;\n branches.push([\n test,\n result\n ]);\n outputType = outputType || result.type;\n }\n const otherwise = context.parse(args[args.length - 1], args.length - 1, outputType);\n if (!otherwise)\n return null;\n return new Case(outputType, branches, otherwise);\n }\n evaluate(ctx) {\n for (const [test, expression] of this.branches) {\n if (test.evaluate(ctx)) {\n return expression.evaluate(ctx);\n }\n }\n return this.otherwise.evaluate(ctx);\n }\n eachChild(fn) {\n for (const [test, expression] of this.branches) {\n fn(test);\n fn(expression);\n }\n fn(this.otherwise);\n }\n outputDefined() {\n return this.branches.every(([_, out]) => out.outputDefined()) && this.otherwise.outputDefined();\n }\n serialize() {\n const serialized = ['case'];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n}\nvar Case$1 = Case;\n\n// \nclass Slice {\n constructor(type, input, beginIndex, endIndex) {\n this.type = type;\n this.input = input;\n this.beginIndex = beginIndex;\n this.endIndex = endIndex;\n }\n static parse(args, context) {\n if (args.length <= 2 || args.length >= 5) {\n return context.error(`Expected 3 or 4 arguments, but found ${ args.length - 1 } instead.`);\n }\n const input = context.parse(args[1], 1, ValueType);\n const beginIndex = context.parse(args[2], 2, NumberType);\n if (!input || !beginIndex)\n return null;\n if (!isValidType(input.type, [\n array$1(ValueType),\n StringType,\n ValueType\n ])) {\n return context.error(`Expected first argument to be of type array or string, but found ${ toString$1(input.type) } instead`);\n }\n if (args.length === 4) {\n const endIndex = context.parse(args[3], 3, NumberType);\n if (!endIndex)\n return null;\n return new Slice(input.type, input, beginIndex, endIndex);\n } else {\n return new Slice(input.type, input, beginIndex);\n }\n }\n evaluate(ctx) {\n const input = this.input.evaluate(ctx);\n const beginIndex = this.beginIndex.evaluate(ctx);\n if (!isValidNativeType(input, [\n 'string',\n 'array'\n ])) {\n throw new RuntimeError$1(`Expected first argument to be of type array or string, but found ${ toString$1(typeOf(input)) } instead.`);\n }\n if (this.endIndex) {\n const endIndex = this.endIndex.evaluate(ctx);\n return input.slice(beginIndex, endIndex);\n }\n return input.slice(beginIndex);\n }\n eachChild(fn) {\n fn(this.input);\n fn(this.beginIndex);\n if (this.endIndex) {\n fn(this.endIndex);\n }\n }\n outputDefined() {\n return false;\n }\n serialize() {\n if (this.endIndex != null && this.endIndex !== undefined) {\n const endIndex = this.endIndex.serialize();\n return [\n 'slice',\n this.input.serialize(),\n this.beginIndex.serialize(),\n endIndex\n ];\n }\n return [\n 'slice',\n this.input.serialize(),\n this.beginIndex.serialize()\n ];\n }\n}\nvar Slice$1 = Slice;\n\n// \nfunction isComparableType(op, type) {\n if (op === '==' || op === '!=') {\n // equality operator\n return type.kind === 'boolean' || type.kind === 'string' || type.kind === 'number' || type.kind === 'null' || type.kind === 'value';\n } else {\n // ordering operator\n return type.kind === 'string' || type.kind === 'number' || type.kind === 'value';\n }\n}\nfunction eq(ctx, a, b) {\n return a === b;\n}\nfunction neq(ctx, a, b) {\n return a !== b;\n}\nfunction lt(ctx, a, b) {\n return a < b;\n}\nfunction gt(ctx, a, b) {\n return a > b;\n}\nfunction lteq(ctx, a, b) {\n return a <= b;\n}\nfunction gteq(ctx, a, b) {\n return a >= b;\n}\nfunction eqCollate(ctx, a, b, c) {\n return c.compare(a, b) === 0;\n}\nfunction neqCollate(ctx, a, b, c) {\n return !eqCollate(ctx, a, b, c);\n}\nfunction ltCollate(ctx, a, b, c) {\n return c.compare(a, b) < 0;\n}\nfunction gtCollate(ctx, a, b, c) {\n return c.compare(a, b) > 0;\n}\nfunction lteqCollate(ctx, a, b, c) {\n return c.compare(a, b) <= 0;\n}\nfunction gteqCollate(ctx, a, b, c) {\n return c.compare(a, b) >= 0;\n}\n/**\n * Special form for comparison operators, implementing the signatures:\n * - (T, T, ?Collator) => boolean\n * - (T, value, ?Collator) => boolean\n * - (value, T, ?Collator) => boolean\n *\n * For inequalities, T must be either value, string, or number. For ==/!=, it\n * can also be boolean or null.\n *\n * Equality semantics are equivalent to Javascript's strict equality (===/!==)\n * -- i.e., when the arguments' types don't match, == evaluates to false, != to\n * true.\n *\n * When types don't match in an ordering comparison, a runtime error is thrown.\n *\n * @private\n */\nfunction makeComparison(op, compareBasic, compareWithCollator) {\n const isOrderComparison = op !== '==' && op !== '!=';\n return class Comparison {\n constructor(lhs, rhs, collator) {\n this.type = BooleanType;\n this.lhs = lhs;\n this.rhs = rhs;\n this.collator = collator;\n this.hasUntypedArgument = lhs.type.kind === 'value' || rhs.type.kind === 'value';\n }\n static parse(args, context) {\n if (args.length !== 3 && args.length !== 4)\n return context.error(`Expected two or three arguments.`);\n const op = args[0];\n let lhs = context.parse(args[1], 1, ValueType);\n if (!lhs)\n return null;\n if (!isComparableType(op, lhs.type)) {\n return context.concat(1).error(`\"${ op }\" comparisons are not supported for type '${ toString$1(lhs.type) }'.`);\n }\n let rhs = context.parse(args[2], 2, ValueType);\n if (!rhs)\n return null;\n if (!isComparableType(op, rhs.type)) {\n return context.concat(2).error(`\"${ op }\" comparisons are not supported for type '${ toString$1(rhs.type) }'.`);\n }\n if (lhs.type.kind !== rhs.type.kind && lhs.type.kind !== 'value' && rhs.type.kind !== 'value') {\n return context.error(`Cannot compare types '${ toString$1(lhs.type) }' and '${ toString$1(rhs.type) }'.`);\n }\n if (isOrderComparison) {\n // typing rules specific to less/greater than operators\n if (lhs.type.kind === 'value' && rhs.type.kind !== 'value') {\n // (value, T)\n lhs = new Assertion$1(rhs.type, [lhs]);\n } else if (lhs.type.kind !== 'value' && rhs.type.kind === 'value') {\n // (T, value)\n rhs = new Assertion$1(lhs.type, [rhs]);\n }\n }\n let collator = null;\n if (args.length === 4) {\n if (lhs.type.kind !== 'string' && rhs.type.kind !== 'string' && lhs.type.kind !== 'value' && rhs.type.kind !== 'value') {\n return context.error(`Cannot use collator to compare non-string types.`);\n }\n collator = context.parse(args[3], 3, CollatorType);\n if (!collator)\n return null;\n }\n return new Comparison(lhs, rhs, collator);\n }\n evaluate(ctx) {\n const lhs = this.lhs.evaluate(ctx);\n const rhs = this.rhs.evaluate(ctx);\n if (isOrderComparison && this.hasUntypedArgument) {\n const lt = typeOf(lhs);\n const rt = typeOf(rhs);\n // check that type is string or number, and equal\n if (lt.kind !== rt.kind || !(lt.kind === 'string' || lt.kind === 'number')) {\n throw new RuntimeError$1(`Expected arguments for \"${ op }\" to be (string, string) or (number, number), but found (${ lt.kind }, ${ rt.kind }) instead.`);\n }\n }\n if (this.collator && !isOrderComparison && this.hasUntypedArgument) {\n const lt = typeOf(lhs);\n const rt = typeOf(rhs);\n if (lt.kind !== 'string' || rt.kind !== 'string') {\n return compareBasic(ctx, lhs, rhs);\n }\n }\n return this.collator ? compareWithCollator(ctx, lhs, rhs, this.collator.evaluate(ctx)) : compareBasic(ctx, lhs, rhs);\n }\n eachChild(fn) {\n fn(this.lhs);\n fn(this.rhs);\n if (this.collator) {\n fn(this.collator);\n }\n }\n outputDefined() {\n return true;\n }\n serialize() {\n const serialized = [op];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n };\n}\nconst Equals = makeComparison('==', eq, eqCollate);\nconst NotEquals = makeComparison('!=', neq, neqCollate);\nconst LessThan = makeComparison('<', lt, ltCollate);\nconst GreaterThan = makeComparison('>', gt, gtCollate);\nconst LessThanOrEqual = makeComparison('<=', lteq, lteqCollate);\nconst GreaterThanOrEqual = makeComparison('>=', gteq, gteqCollate);\n\n// \nclass NumberFormat {\n // BCP 47 language tag\n // ISO 4217 currency code, required if style=currency\n // Simple units sanctioned for use in ECMAScript, required if style=unit. https://tc39.es/proposal-unified-intl-numberformat/section6/locales-currencies-tz_proposed_out.html#sec-issanctionedsimpleunitidentifier\n // Default 0\n // Default 3\n constructor(number, locale, currency, unit, minFractionDigits, maxFractionDigits) {\n this.type = StringType;\n this.number = number;\n this.locale = locale;\n this.currency = currency;\n this.unit = unit;\n this.minFractionDigits = minFractionDigits;\n this.maxFractionDigits = maxFractionDigits;\n }\n static parse(args, context) {\n if (args.length !== 3)\n return context.error(`Expected two arguments.`);\n const number = context.parse(args[1], 1, NumberType);\n if (!number)\n return null;\n const options = args[2];\n if (typeof options !== 'object' || Array.isArray(options))\n return context.error(`NumberFormat options argument must be an object.`);\n let locale = null;\n if (options['locale']) {\n locale = context.parse(options['locale'], 1, StringType);\n if (!locale)\n return null;\n }\n let currency = null;\n if (options['currency']) {\n currency = context.parse(options['currency'], 1, StringType);\n if (!currency)\n return null;\n }\n let unit = null;\n if (options['unit']) {\n unit = context.parse(options['unit'], 1, StringType);\n if (!unit)\n return null;\n }\n let minFractionDigits = null;\n if (options['min-fraction-digits']) {\n minFractionDigits = context.parse(options['min-fraction-digits'], 1, NumberType);\n if (!minFractionDigits)\n return null;\n }\n let maxFractionDigits = null;\n if (options['max-fraction-digits']) {\n maxFractionDigits = context.parse(options['max-fraction-digits'], 1, NumberType);\n if (!maxFractionDigits)\n return null;\n }\n return new NumberFormat(number, locale, currency, unit, minFractionDigits, maxFractionDigits);\n }\n evaluate(ctx) {\n return new Intl.NumberFormat(this.locale ? this.locale.evaluate(ctx) : [], {\n style: this.currency && 'currency' || this.unit && 'unit' || 'decimal',\n currency: this.currency ? this.currency.evaluate(ctx) : undefined,\n unit: this.unit ? this.unit.evaluate(ctx) : undefined,\n minimumFractionDigits: this.minFractionDigits ? this.minFractionDigits.evaluate(ctx) : undefined,\n maximumFractionDigits: this.maxFractionDigits ? this.maxFractionDigits.evaluate(ctx) : undefined\n }).format(this.number.evaluate(ctx));\n }\n eachChild(fn) {\n fn(this.number);\n if (this.locale) {\n fn(this.locale);\n }\n if (this.currency) {\n fn(this.currency);\n }\n if (this.unit) {\n fn(this.unit);\n }\n if (this.minFractionDigits) {\n fn(this.minFractionDigits);\n }\n if (this.maxFractionDigits) {\n fn(this.maxFractionDigits);\n }\n }\n outputDefined() {\n return false;\n }\n serialize() {\n const options = {};\n if (this.locale) {\n options['locale'] = this.locale.serialize();\n }\n if (this.currency) {\n options['currency'] = this.currency.serialize();\n }\n if (this.unit) {\n options['unit'] = this.unit.serialize();\n }\n if (this.minFractionDigits) {\n options['min-fraction-digits'] = this.minFractionDigits.serialize();\n }\n if (this.maxFractionDigits) {\n options['max-fraction-digits'] = this.maxFractionDigits.serialize();\n }\n return [\n 'number-format',\n this.number.serialize(),\n options\n ];\n }\n}\n\n// \nclass Length {\n constructor(input) {\n this.type = NumberType;\n this.input = input;\n }\n static parse(args, context) {\n if (args.length !== 2)\n return context.error(`Expected 1 argument, but found ${ args.length - 1 } instead.`);\n const input = context.parse(args[1], 1);\n if (!input)\n return null;\n if (input.type.kind !== 'array' && input.type.kind !== 'string' && input.type.kind !== 'value')\n return context.error(`Expected argument of type string or array, but found ${ toString$1(input.type) } instead.`);\n return new Length(input);\n }\n evaluate(ctx) {\n const input = this.input.evaluate(ctx);\n if (typeof input === 'string') {\n return input.length;\n } else if (Array.isArray(input)) {\n return input.length;\n } else {\n throw new RuntimeError$1(`Expected value to be of type string or array, but found ${ toString$1(typeOf(input)) } instead.`);\n }\n }\n eachChild(fn) {\n fn(this.input);\n }\n outputDefined() {\n return false;\n }\n serialize() {\n const serialized = ['length'];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n}\nvar Length$1 = Length;\n\n// \nconst expressions = {\n // special forms\n '==': Equals,\n '!=': NotEquals,\n '>': GreaterThan,\n '<': LessThan,\n '>=': GreaterThanOrEqual,\n '<=': LessThanOrEqual,\n 'array': Assertion$1,\n 'at': At$1,\n 'boolean': Assertion$1,\n 'case': Case$1,\n 'coalesce': Coalesce$1,\n 'collator': CollatorExpression,\n 'format': FormatExpression,\n 'image': ImageExpression,\n 'in': In$1,\n 'index-of': IndexOf$1,\n 'interpolate': Interpolate$1,\n 'interpolate-hcl': Interpolate$1,\n 'interpolate-lab': Interpolate$1,\n 'length': Length$1,\n 'let': Let$1,\n 'literal': Literal$1,\n 'match': Match$1,\n 'number': Assertion$1,\n 'number-format': NumberFormat,\n 'object': Assertion$1,\n 'slice': Slice$1,\n 'step': Step$1,\n 'string': Assertion$1,\n 'to-boolean': Coercion$1,\n 'to-color': Coercion$1,\n 'to-number': Coercion$1,\n 'to-string': Coercion$1,\n 'var': Var$1,\n 'within': Within$1\n};\nfunction rgba(ctx, [r, g, b, a]) {\n r = r.evaluate(ctx);\n g = g.evaluate(ctx);\n b = b.evaluate(ctx);\n const alpha = a ? a.evaluate(ctx) : 1;\n const error = validateRGBA(r, g, b, alpha);\n if (error)\n throw new RuntimeError$1(error);\n return new Color$1(r / 255 * alpha, g / 255 * alpha, b / 255 * alpha, alpha);\n}\nfunction has(key, obj) {\n return key in obj;\n}\nfunction get(key, obj) {\n const v = obj[key];\n return typeof v === 'undefined' ? null : v;\n}\nfunction binarySearch(v, a, i, j) {\n while (i <= j) {\n const m = i + j >> 1;\n if (a[m] === v)\n return true;\n if (a[m] > v)\n j = m - 1;\n else\n i = m + 1;\n }\n return false;\n}\nfunction varargs(type) {\n return { type };\n}\nCompoundExpression$1.register(expressions, {\n 'error': [\n ErrorType,\n [StringType],\n (ctx, [v]) => {\n throw new RuntimeError$1(v.evaluate(ctx));\n }\n ],\n 'typeof': [\n StringType,\n [ValueType],\n (ctx, [v]) => toString$1(typeOf(v.evaluate(ctx)))\n ],\n 'to-rgba': [\n array$1(NumberType, 4),\n [ColorType],\n (ctx, [v]) => {\n return v.evaluate(ctx).toArray();\n }\n ],\n 'rgb': [\n ColorType,\n [\n NumberType,\n NumberType,\n NumberType\n ],\n rgba\n ],\n 'rgba': [\n ColorType,\n [\n NumberType,\n NumberType,\n NumberType,\n NumberType\n ],\n rgba\n ],\n 'has': {\n type: BooleanType,\n overloads: [\n [\n [StringType],\n (ctx, [key]) => has(key.evaluate(ctx), ctx.properties())\n ],\n [\n [\n StringType,\n ObjectType\n ],\n (ctx, [key, obj]) => has(key.evaluate(ctx), obj.evaluate(ctx))\n ]\n ]\n },\n 'get': {\n type: ValueType,\n overloads: [\n [\n [StringType],\n (ctx, [key]) => get(key.evaluate(ctx), ctx.properties())\n ],\n [\n [\n StringType,\n ObjectType\n ],\n (ctx, [key, obj]) => get(key.evaluate(ctx), obj.evaluate(ctx))\n ]\n ]\n },\n 'feature-state': [\n ValueType,\n [StringType],\n (ctx, [key]) => get(key.evaluate(ctx), ctx.featureState || {})\n ],\n 'properties': [\n ObjectType,\n [],\n ctx => ctx.properties()\n ],\n 'geometry-type': [\n StringType,\n [],\n ctx => ctx.geometryType()\n ],\n 'id': [\n ValueType,\n [],\n ctx => ctx.id()\n ],\n 'zoom': [\n NumberType,\n [],\n ctx => ctx.globals.zoom\n ],\n 'pitch': [\n NumberType,\n [],\n ctx => ctx.globals.pitch || 0\n ],\n 'distance-from-center': [\n NumberType,\n [],\n ctx => ctx.distanceFromCenter()\n ],\n 'heatmap-density': [\n NumberType,\n [],\n ctx => ctx.globals.heatmapDensity || 0\n ],\n 'line-progress': [\n NumberType,\n [],\n ctx => ctx.globals.lineProgress || 0\n ],\n 'sky-radial-progress': [\n NumberType,\n [],\n ctx => ctx.globals.skyRadialProgress || 0\n ],\n 'accumulated': [\n ValueType,\n [],\n ctx => ctx.globals.accumulated === undefined ? null : ctx.globals.accumulated\n ],\n '+': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => {\n let result = 0;\n for (const arg of args) {\n result += arg.evaluate(ctx);\n }\n return result;\n }\n ],\n '*': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => {\n let result = 1;\n for (const arg of args) {\n result *= arg.evaluate(ctx);\n }\n return result;\n }\n ],\n '-': {\n type: NumberType,\n overloads: [\n [\n [\n NumberType,\n NumberType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) - b.evaluate(ctx)\n ],\n [\n [NumberType],\n (ctx, [a]) => -a.evaluate(ctx)\n ]\n ]\n },\n '/': [\n NumberType,\n [\n NumberType,\n NumberType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) / b.evaluate(ctx)\n ],\n '%': [\n NumberType,\n [\n NumberType,\n NumberType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) % b.evaluate(ctx)\n ],\n 'ln2': [\n NumberType,\n [],\n () => Math.LN2\n ],\n 'pi': [\n NumberType,\n [],\n () => Math.PI\n ],\n 'e': [\n NumberType,\n [],\n () => Math.E\n ],\n '^': [\n NumberType,\n [\n NumberType,\n NumberType\n ],\n (ctx, [b, e]) => Math.pow(b.evaluate(ctx), e.evaluate(ctx))\n ],\n 'sqrt': [\n NumberType,\n [NumberType],\n (ctx, [x]) => Math.sqrt(x.evaluate(ctx))\n ],\n 'log10': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx)) / Math.LN10\n ],\n 'ln': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx))\n ],\n 'log2': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx)) / Math.LN2\n ],\n 'sin': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.sin(n.evaluate(ctx))\n ],\n 'cos': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.cos(n.evaluate(ctx))\n ],\n 'tan': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.tan(n.evaluate(ctx))\n ],\n 'asin': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.asin(n.evaluate(ctx))\n ],\n 'acos': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.acos(n.evaluate(ctx))\n ],\n 'atan': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.atan(n.evaluate(ctx))\n ],\n 'min': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => Math.min(...args.map(arg => arg.evaluate(ctx)))\n ],\n 'max': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => Math.max(...args.map(arg => arg.evaluate(ctx)))\n ],\n 'abs': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.abs(n.evaluate(ctx))\n ],\n 'round': [\n NumberType,\n [NumberType],\n (ctx, [n]) => {\n const v = n.evaluate(ctx);\n // Javascript's Math.round() rounds towards +Infinity for halfway\n // values, even when they're negative. It's more common to round\n // away from 0 (e.g., this is what python and C++ do)\n return v < 0 ? -Math.round(-v) : Math.round(v);\n }\n ],\n 'floor': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.floor(n.evaluate(ctx))\n ],\n 'ceil': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.ceil(n.evaluate(ctx))\n ],\n 'filter-==': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => ctx.properties()[k.value] === v.value\n ],\n 'filter-id-==': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => ctx.id() === v.value\n ],\n 'filter-type-==': [\n BooleanType,\n [StringType],\n (ctx, [v]) => ctx.geometryType() === v.value\n ],\n 'filter-<': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => {\n const a = ctx.properties()[k.value];\n const b = v.value;\n return typeof a === typeof b && a < b;\n }\n ],\n 'filter-id-<': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = v.value;\n return typeof a === typeof b && a < b;\n }\n ],\n 'filter->': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => {\n const a = ctx.properties()[k.value];\n const b = v.value;\n return typeof a === typeof b && a > b;\n }\n ],\n 'filter-id->': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = v.value;\n return typeof a === typeof b && a > b;\n }\n ],\n 'filter-<=': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => {\n const a = ctx.properties()[k.value];\n const b = v.value;\n return typeof a === typeof b && a <= b;\n }\n ],\n 'filter-id-<=': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = v.value;\n return typeof a === typeof b && a <= b;\n }\n ],\n 'filter->=': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => {\n const a = ctx.properties()[k.value];\n const b = v.value;\n return typeof a === typeof b && a >= b;\n }\n ],\n 'filter-id->=': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = v.value;\n return typeof a === typeof b && a >= b;\n }\n ],\n 'filter-has': [\n BooleanType,\n [ValueType],\n (ctx, [k]) => k.value in ctx.properties()\n ],\n 'filter-has-id': [\n BooleanType,\n [],\n ctx => ctx.id() !== null && ctx.id() !== undefined\n ],\n 'filter-type-in': [\n BooleanType,\n [array$1(StringType)],\n (ctx, [v]) => v.value.indexOf(ctx.geometryType()) >= 0\n ],\n 'filter-id-in': [\n BooleanType,\n [array$1(ValueType)],\n (ctx, [v]) => v.value.indexOf(ctx.id()) >= 0\n ],\n 'filter-in-small': [\n BooleanType,\n [\n StringType,\n array$1(ValueType)\n ],\n // assumes v is an array literal\n (ctx, [k, v]) => v.value.indexOf(ctx.properties()[k.value]) >= 0\n ],\n 'filter-in-large': [\n BooleanType,\n [\n StringType,\n array$1(ValueType)\n ],\n // assumes v is a array literal with values sorted in ascending order and of a single type\n (ctx, [k, v]) => binarySearch(ctx.properties()[k.value], v.value, 0, v.value.length - 1)\n ],\n 'all': {\n type: BooleanType,\n overloads: [\n [\n [\n BooleanType,\n BooleanType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) && b.evaluate(ctx)\n ],\n [\n varargs(BooleanType),\n (ctx, args) => {\n for (const arg of args) {\n if (!arg.evaluate(ctx))\n return false;\n }\n return true;\n }\n ]\n ]\n },\n 'any': {\n type: BooleanType,\n overloads: [\n [\n [\n BooleanType,\n BooleanType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) || b.evaluate(ctx)\n ],\n [\n varargs(BooleanType),\n (ctx, args) => {\n for (const arg of args) {\n if (arg.evaluate(ctx))\n return true;\n }\n return false;\n }\n ]\n ]\n },\n '!': [\n BooleanType,\n [BooleanType],\n (ctx, [b]) => !b.evaluate(ctx)\n ],\n 'is-supported-script': [\n BooleanType,\n [StringType],\n // At parse time this will always return true, so we need to exclude this expression with isGlobalPropertyConstant\n (ctx, [s]) => {\n const isSupportedScript = ctx.globals && ctx.globals.isSupportedScript;\n if (isSupportedScript) {\n return isSupportedScript(s.evaluate(ctx));\n }\n return true;\n }\n ],\n 'upcase': [\n StringType,\n [StringType],\n (ctx, [s]) => s.evaluate(ctx).toUpperCase()\n ],\n 'downcase': [\n StringType,\n [StringType],\n (ctx, [s]) => s.evaluate(ctx).toLowerCase()\n ],\n 'concat': [\n StringType,\n varargs(ValueType),\n (ctx, args) => args.map(arg => toString(arg.evaluate(ctx))).join('')\n ],\n 'resolved-locale': [\n StringType,\n [CollatorType],\n (ctx, [collator]) => collator.evaluate(ctx).resolvedLocale()\n ]\n});\nvar definitions = expressions;\n\n// \n/**\n * A type used for returning and propagating errors. The first element of the union\n * represents success and contains a value, and the second represents an error and\n * contains an error value.\n * @private\n */\nfunction success(value) {\n return {\n result: 'success',\n value\n };\n}\nfunction error(value) {\n return {\n result: 'error',\n value\n };\n}\n\n// \nfunction supportsPropertyExpression(spec) {\n return spec['property-type'] === 'data-driven';\n}\nfunction supportsZoomExpression(spec) {\n return !!spec.expression && spec.expression.parameters.indexOf('zoom') > -1;\n}\nfunction supportsInterpolation(spec) {\n return !!spec.expression && spec.expression.interpolated;\n}\n\nfunction isFunction(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nclass StyleExpression {\n constructor(expression, propertySpec) {\n this.expression = expression;\n this._warningHistory = {};\n this._evaluator = new EvaluationContext$1();\n this._defaultValue = propertySpec ? getDefaultValue(propertySpec) : null;\n this._enumValues = propertySpec && propertySpec.type === 'enum' ? propertySpec.values : null;\n }\n evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection, featureTileCoord, featureDistanceData) {\n this._evaluator.globals = globals;\n this._evaluator.feature = feature;\n this._evaluator.featureState = featureState;\n this._evaluator.canonical = canonical || null;\n this._evaluator.availableImages = availableImages || null;\n this._evaluator.formattedSection = formattedSection;\n this._evaluator.featureTileCoord = featureTileCoord || null;\n this._evaluator.featureDistanceData = featureDistanceData || null;\n return this.expression.evaluate(this._evaluator);\n }\n evaluate(globals, feature, featureState, canonical, availableImages, formattedSection, featureTileCoord, featureDistanceData) {\n this._evaluator.globals = globals;\n this._evaluator.feature = feature || null;\n this._evaluator.featureState = featureState || null;\n this._evaluator.canonical = canonical || null;\n this._evaluator.availableImages = availableImages || null;\n this._evaluator.formattedSection = formattedSection || null;\n this._evaluator.featureTileCoord = featureTileCoord || null;\n this._evaluator.featureDistanceData = featureDistanceData || null;\n try {\n const val = this.expression.evaluate(this._evaluator);\n // eslint-disable-next-line no-self-compare\n if (val === null || val === undefined || typeof val === 'number' && val !== val) {\n return this._defaultValue;\n }\n if (this._enumValues && !(val in this._enumValues)) {\n throw new RuntimeError$1(`Expected value to be one of ${ Object.keys(this._enumValues).map(v => JSON.stringify(v)).join(', ') }, but found ${ JSON.stringify(val) } instead.`);\n }\n return val;\n } catch (e) {\n if (!this._warningHistory[e.message]) {\n this._warningHistory[e.message] = true;\n if (typeof console !== 'undefined') {\n console.warn(e.message);\n }\n }\n return this._defaultValue;\n }\n }\n}\nfunction isExpression(expression) {\n return Array.isArray(expression) && expression.length > 0 && typeof expression[0] === 'string' && expression[0] in definitions;\n}\n/**\n * Parse and typecheck the given style spec JSON expression. If\n * options.defaultValue is provided, then the resulting StyleExpression's\n * `evaluate()` method will handle errors by logging a warning (once per\n * message) and returning the default value. Otherwise, it will throw\n * evaluation errors.\n *\n * @private\n */\nfunction createExpression(expression, propertySpec) {\n const parser = new ParsingContext$1(definitions, [], propertySpec ? getExpectedType(propertySpec) : undefined);\n // For string-valued properties, coerce to string at the top level rather than asserting.\n const parsed = parser.parse(expression, undefined, undefined, undefined, propertySpec && propertySpec.type === 'string' ? { typeAnnotation: 'coerce' } : undefined);\n if (!parsed) {\n return error(parser.errors);\n }\n return success(new StyleExpression(parsed, propertySpec));\n}\nclass ZoomConstantExpression {\n constructor(kind, expression) {\n this.kind = kind;\n this._styleExpression = expression;\n this.isStateDependent = kind !== 'constant' && !isStateConstant(expression.expression);\n }\n evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection) {\n return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n evaluate(globals, feature, featureState, canonical, availableImages, formattedSection) {\n return this._styleExpression.evaluate(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n}\nclass ZoomDependentExpression {\n constructor(kind, expression, zoomStops, interpolationType) {\n this.kind = kind;\n this.zoomStops = zoomStops;\n this._styleExpression = expression;\n this.isStateDependent = kind !== 'camera' && !isStateConstant(expression.expression);\n this.interpolationType = interpolationType;\n }\n evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection) {\n return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n evaluate(globals, feature, featureState, canonical, availableImages, formattedSection) {\n return this._styleExpression.evaluate(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n interpolationFactor(input, lower, upper) {\n if (this.interpolationType) {\n return Interpolate$1.interpolationFactor(this.interpolationType, input, lower, upper);\n } else {\n return 0;\n }\n }\n}\nfunction createPropertyExpression(expression, propertySpec) {\n expression = createExpression(expression, propertySpec);\n if (expression.result === 'error') {\n return expression;\n }\n const parsed = expression.value.expression;\n const isFeatureConstant$1 = isFeatureConstant(parsed);\n if (!isFeatureConstant$1 && !supportsPropertyExpression(propertySpec)) {\n return error([new ParsingError$1('', 'data expressions not supported')]);\n }\n const isZoomConstant = isGlobalPropertyConstant(parsed, [\n 'zoom',\n 'pitch',\n 'distance-from-center'\n ]);\n if (!isZoomConstant && !supportsZoomExpression(propertySpec)) {\n return error([new ParsingError$1('', 'zoom expressions not supported')]);\n }\n const zoomCurve = findZoomCurve(parsed);\n if (!zoomCurve && !isZoomConstant) {\n return error([new ParsingError$1('', '\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.')]);\n } else if (zoomCurve instanceof ParsingError$1) {\n return error([zoomCurve]);\n } else if (zoomCurve instanceof Interpolate$1 && !supportsInterpolation(propertySpec)) {\n return error([new ParsingError$1('', '\"interpolate\" expressions cannot be used with this property')]);\n }\n if (!zoomCurve) {\n return success(isFeatureConstant$1 ? new ZoomConstantExpression('constant', expression.value) : new ZoomConstantExpression('source', expression.value));\n }\n const interpolationType = zoomCurve instanceof Interpolate$1 ? zoomCurve.interpolation : undefined;\n return success(isFeatureConstant$1 ? new ZoomDependentExpression('camera', expression.value, zoomCurve.labels, interpolationType) : new ZoomDependentExpression('composite', expression.value, zoomCurve.labels, interpolationType));\n}\n// Zoom-dependent expressions may only use [\"zoom\"] as the input to a top-level \"step\" or \"interpolate\"\n// expression (collectively referred to as a \"curve\"). The curve may be wrapped in one or more \"let\" or\n// \"coalesce\" expressions.\nfunction findZoomCurve(expression) {\n let result = null;\n if (expression instanceof Let$1) {\n result = findZoomCurve(expression.result);\n } else if (expression instanceof Coalesce$1) {\n for (const arg of expression.args) {\n result = findZoomCurve(arg);\n if (result) {\n break;\n }\n }\n } else if ((expression instanceof Step$1 || expression instanceof Interpolate$1) && expression.input instanceof CompoundExpression$1 && expression.input.name === 'zoom') {\n result = expression;\n }\n if (result instanceof ParsingError$1) {\n return result;\n }\n expression.eachChild(child => {\n const childResult = findZoomCurve(child);\n if (childResult instanceof ParsingError$1) {\n result = childResult;\n } else if (!result && childResult) {\n result = new ParsingError$1('', '\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.');\n } else if (result && childResult && result !== childResult) {\n result = new ParsingError$1('', 'Only one zoom-based \"step\" or \"interpolate\" subexpression may be used in an expression.');\n }\n });\n return result;\n}\nfunction getExpectedType(spec) {\n const types = {\n color: ColorType,\n string: StringType,\n number: NumberType,\n enum: StringType,\n boolean: BooleanType,\n formatted: FormattedType,\n resolvedImage: ResolvedImageType\n };\n if (spec.type === 'array') {\n return array$1(types[spec.value] || ValueType, spec.length);\n }\n return types[spec.type];\n}\nfunction getDefaultValue(spec) {\n if (spec.type === 'color' && (isFunction(spec.default) || Array.isArray(spec.default))) {\n // Special case for heatmap-color: it uses the 'default:' to define a\n // default color ramp, but createExpression expects a simple value to fall\n // back to in case of runtime errors\n return new Color$1(0, 0, 0, 0);\n } else if (spec.type === 'color') {\n return Color$1.parse(spec.default) || null;\n } else if (spec.default === undefined) {\n return null;\n } else {\n return spec.default;\n }\n}\n\n// \n// Turn jsonlint-lines-primitives objects into primitive objects\nfunction unbundle(value) {\n if (value instanceof Number || value instanceof String || value instanceof Boolean) {\n return value.valueOf();\n } else {\n return value;\n }\n}\nfunction deepUnbundle(value) {\n if (Array.isArray(value)) {\n return value.map(deepUnbundle);\n } else if (value instanceof Object && !(value instanceof Number || value instanceof String || value instanceof Boolean)) {\n const unbundledValue = {};\n for (const key in value) {\n unbundledValue[key] = deepUnbundle(value[key]);\n }\n return unbundledValue;\n }\n return unbundle(value);\n}\n\nvar spec = {\"$version\":8,\"$root\":{\"version\":{\"required\":true,\"type\":\"enum\",\"values\":[8]},\"name\":{\"type\":\"string\"},\"metadata\":{\"type\":\"*\"},\"center\":{\"type\":\"array\",\"value\":\"number\"},\"zoom\":{\"type\":\"number\"},\"bearing\":{\"type\":\"number\",\"default\":0,\"period\":360,\"units\":\"degrees\"},\"pitch\":{\"type\":\"number\",\"default\":0,\"units\":\"degrees\"},\"light\":{\"type\":\"light\"},\"terrain\":{\"type\":\"terrain\"},\"fog\":{\"type\":\"fog\"},\"sources\":{\"required\":true,\"type\":\"sources\"},\"sprite\":{\"type\":\"string\"},\"glyphs\":{\"type\":\"string\"},\"transition\":{\"type\":\"transition\"},\"projection\":{\"type\":\"projection\"},\"layers\":{\"required\":true,\"type\":\"array\",\"value\":\"layer\"}},\"sources\":{\"*\":{\"type\":\"source\"}},\"source\":[\"source_vector\",\"source_raster\",\"source_raster_dem\",\"source_geojson\",\"source_video\",\"source_image\"],\"source_vector\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"vector\":{}}},\"url\":{\"type\":\"string\"},\"tiles\":{\"type\":\"array\",\"value\":\"string\"},\"bounds\":{\"type\":\"array\",\"value\":\"number\",\"length\":4,\"default\":[-180,-85.051129,180,85.051129]},\"scheme\":{\"type\":\"enum\",\"values\":{\"xyz\":{},\"tms\":{}},\"default\":\"xyz\"},\"minzoom\":{\"type\":\"number\",\"default\":0},\"maxzoom\":{\"type\":\"number\",\"default\":22},\"attribution\":{\"type\":\"string\"},\"promoteId\":{\"type\":\"promoteId\"},\"volatile\":{\"type\":\"boolean\",\"default\":false},\"*\":{\"type\":\"*\"}},\"source_raster\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"raster\":{}}},\"url\":{\"type\":\"string\"},\"tiles\":{\"type\":\"array\",\"value\":\"string\"},\"bounds\":{\"type\":\"array\",\"value\":\"number\",\"length\":4,\"default\":[-180,-85.051129,180,85.051129]},\"minzoom\":{\"type\":\"number\",\"default\":0},\"maxzoom\":{\"type\":\"number\",\"default\":22},\"tileSize\":{\"type\":\"number\",\"default\":512,\"units\":\"pixels\"},\"scheme\":{\"type\":\"enum\",\"values\":{\"xyz\":{},\"tms\":{}},\"default\":\"xyz\"},\"attribution\":{\"type\":\"string\"},\"volatile\":{\"type\":\"boolean\",\"default\":false},\"*\":{\"type\":\"*\"}},\"source_raster_dem\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"raster-dem\":{}}},\"url\":{\"type\":\"string\"},\"tiles\":{\"type\":\"array\",\"value\":\"string\"},\"bounds\":{\"type\":\"array\",\"value\":\"number\",\"length\":4,\"default\":[-180,-85.051129,180,85.051129]},\"minzoom\":{\"type\":\"number\",\"default\":0},\"maxzoom\":{\"type\":\"number\",\"default\":22},\"tileSize\":{\"type\":\"number\",\"default\":512,\"units\":\"pixels\"},\"attribution\":{\"type\":\"string\"},\"encoding\":{\"type\":\"enum\",\"values\":{\"terrarium\":{},\"mapbox\":{}},\"default\":\"mapbox\"},\"volatile\":{\"type\":\"boolean\",\"default\":false},\"*\":{\"type\":\"*\"}},\"source_geojson\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"geojson\":{}}},\"data\":{\"type\":\"*\"},\"maxzoom\":{\"type\":\"number\",\"default\":18},\"attribution\":{\"type\":\"string\"},\"buffer\":{\"type\":\"number\",\"default\":128,\"maximum\":512,\"minimum\":0},\"filter\":{\"type\":\"*\"},\"tolerance\":{\"type\":\"number\",\"default\":0.375},\"cluster\":{\"type\":\"boolean\",\"default\":false},\"clusterRadius\":{\"type\":\"number\",\"default\":50,\"minimum\":0},\"clusterMaxZoom\":{\"type\":\"number\"},\"clusterMinPoints\":{\"type\":\"number\"},\"clusterProperties\":{\"type\":\"*\"},\"lineMetrics\":{\"type\":\"boolean\",\"default\":false},\"generateId\":{\"type\":\"boolean\",\"default\":false},\"promoteId\":{\"type\":\"promoteId\"}},\"source_video\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"video\":{}}},\"urls\":{\"required\":true,\"type\":\"array\",\"value\":\"string\"},\"coordinates\":{\"required\":true,\"type\":\"array\",\"length\":4,\"value\":{\"type\":\"array\",\"length\":2,\"value\":\"number\"}}},\"source_image\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"image\":{}}},\"url\":{\"required\":true,\"type\":\"string\"},\"coordinates\":{\"required\":true,\"type\":\"array\",\"length\":4,\"value\":{\"type\":\"array\",\"length\":2,\"value\":\"number\"}}},\"layer\":{\"id\":{\"type\":\"string\",\"required\":true},\"type\":{\"type\":\"enum\",\"values\":{\"fill\":{},\"line\":{},\"symbol\":{},\"circle\":{},\"heatmap\":{},\"fill-extrusion\":{},\"raster\":{},\"hillshade\":{},\"background\":{},\"sky\":{}},\"required\":true},\"metadata\":{\"type\":\"*\"},\"source\":{\"type\":\"string\"},\"source-layer\":{\"type\":\"string\"},\"minzoom\":{\"type\":\"number\",\"minimum\":0,\"maximum\":24},\"maxzoom\":{\"type\":\"number\",\"minimum\":0,\"maximum\":24},\"filter\":{\"type\":\"filter\"},\"layout\":{\"type\":\"layout\"},\"paint\":{\"type\":\"paint\"}},\"layout\":[\"layout_fill\",\"layout_line\",\"layout_circle\",\"layout_heatmap\",\"layout_fill-extrusion\",\"layout_symbol\",\"layout_raster\",\"layout_hillshade\",\"layout_background\",\"layout_sky\"],\"layout_background\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_sky\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_fill\":{\"fill-sort-key\":{\"type\":\"number\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_circle\":{\"circle-sort-key\":{\"type\":\"number\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_heatmap\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_fill-extrusion\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"},\"fill-extrusion-edge-radius\":{\"type\":\"number\",\"private\":true,\"default\":0,\"minimum\":0,\"maximum\":1,\"property-type\":\"constant\"}},\"layout_line\":{\"line-cap\":{\"type\":\"enum\",\"values\":{\"butt\":{},\"round\":{},\"square\":{}},\"default\":\"butt\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-join\":{\"type\":\"enum\",\"values\":{\"bevel\":{},\"round\":{},\"miter\":{}},\"default\":\"miter\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-miter-limit\":{\"type\":\"number\",\"default\":2,\"requires\":[{\"line-join\":\"miter\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-round-limit\":{\"type\":\"number\",\"default\":1.05,\"requires\":[{\"line-join\":\"round\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-sort-key\":{\"type\":\"number\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_symbol\":{\"symbol-placement\":{\"type\":\"enum\",\"values\":{\"point\":{},\"line\":{},\"line-center\":{}},\"default\":\"point\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-spacing\":{\"type\":\"number\",\"default\":250,\"minimum\":1,\"units\":\"pixels\",\"requires\":[{\"symbol-placement\":\"line\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-avoid-edges\":{\"type\":\"boolean\",\"default\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-sort-key\":{\"type\":\"number\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"symbol-z-order\":{\"type\":\"enum\",\"values\":{\"auto\":{},\"viewport-y\":{},\"source\":{}},\"default\":\"auto\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-allow-overlap\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-ignore-placement\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-optional\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"icon-image\",\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-rotation-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{},\"auto\":{}},\"default\":\"auto\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-size\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"units\":\"factor of the original icon size\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-text-fit\":{\"type\":\"enum\",\"values\":{\"none\":{},\"width\":{},\"height\":{},\"both\":{}},\"default\":\"none\",\"requires\":[\"icon-image\",\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-text-fit-padding\":{\"type\":\"array\",\"value\":\"number\",\"length\":4,\"default\":[0,0,0,0],\"units\":\"pixels\",\"requires\":[\"icon-image\",\"text-field\",{\"icon-text-fit\":[\"both\",\"width\",\"height\"]}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-image\":{\"type\":\"resolvedImage\",\"tokens\":true,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-rotate\":{\"type\":\"number\",\"default\":0,\"period\":360,\"units\":\"degrees\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-padding\":{\"type\":\"number\",\"default\":2,\"minimum\":0,\"units\":\"pixels\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-keep-upright\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"icon-image\",{\"icon-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-offset\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-anchor\":{\"type\":\"enum\",\"values\":{\"center\":{},\"left\":{},\"right\":{},\"top\":{},\"bottom\":{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},\"default\":\"center\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-pitch-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{},\"auto\":{}},\"default\":\"auto\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-pitch-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{},\"auto\":{}},\"default\":\"auto\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotation-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{},\"auto\":{}},\"default\":\"auto\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-field\":{\"type\":\"formatted\",\"default\":\"\",\"tokens\":true,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-font\":{\"type\":\"array\",\"value\":\"string\",\"default\":[\"Open Sans Regular\",\"Arial Unicode MS Regular\"],\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-size\":{\"type\":\"number\",\"default\":16,\"minimum\":0,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-width\":{\"type\":\"number\",\"default\":10,\"minimum\":0,\"units\":\"ems\",\"requires\":[\"text-field\",{\"symbol-placement\":[\"point\"]}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-line-height\":{\"type\":\"number\",\"default\":1.2,\"units\":\"ems\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-letter-spacing\":{\"type\":\"number\",\"default\":0,\"units\":\"ems\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-justify\":{\"type\":\"enum\",\"values\":{\"auto\":{},\"left\":{},\"center\":{},\"right\":{}},\"default\":\"center\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-radial-offset\":{\"type\":\"number\",\"units\":\"ems\",\"default\":0,\"requires\":[\"text-field\"],\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]}},\"text-variable-anchor\":{\"type\":\"array\",\"value\":\"enum\",\"values\":{\"center\":{},\"left\":{},\"right\":{},\"top\":{},\"bottom\":{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},\"requires\":[\"text-field\",{\"symbol-placement\":[\"point\"]}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-anchor\":{\"type\":\"enum\",\"values\":{\"center\":{},\"left\":{},\"right\":{},\"top\":{},\"bottom\":{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},\"default\":\"center\",\"requires\":[\"text-field\",{\"!\":\"text-variable-anchor\"}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-angle\":{\"type\":\"number\",\"default\":45,\"units\":\"degrees\",\"requires\":[\"text-field\",{\"symbol-placement\":[\"line\",\"line-center\"]}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-writing-mode\":{\"type\":\"array\",\"value\":\"enum\",\"values\":{\"horizontal\":{},\"vertical\":{}},\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotate\":{\"type\":\"number\",\"default\":0,\"period\":360,\"units\":\"degrees\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-padding\":{\"type\":\"number\",\"default\":2,\"minimum\":0,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-keep-upright\":{\"type\":\"boolean\",\"default\":true,\"requires\":[\"text-field\",{\"text-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-transform\":{\"type\":\"enum\",\"values\":{\"none\":{},\"uppercase\":{},\"lowercase\":{}},\"default\":\"none\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-offset\":{\"type\":\"array\",\"value\":\"number\",\"units\":\"ems\",\"length\":2,\"default\":[0,0],\"requires\":[\"text-field\",{\"!\":\"text-radial-offset\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-allow-overlap\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-ignore-placement\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-optional\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"text-field\",\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_raster\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_hillshade\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"filter\":{\"type\":\"array\",\"value\":\"*\"},\"filter_symbol\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\",\"pitch\",\"distance-from-center\"]}},\"filter_fill\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_line\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_circle\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_fill-extrusion\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_heatmap\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_operator\":{\"type\":\"enum\",\"values\":{\"==\":{},\"!=\":{},\">\":{},\">=\":{},\"<\":{},\"<=\":{},\"in\":{},\"!in\":{},\"all\":{},\"any\":{},\"none\":{},\"has\":{},\"!has\":{},\"within\":{}}},\"geometry_type\":{\"type\":\"enum\",\"values\":{\"Point\":{},\"LineString\":{},\"Polygon\":{}}},\"function\":{\"expression\":{\"type\":\"expression\"},\"stops\":{\"type\":\"array\",\"value\":\"function_stop\"},\"base\":{\"type\":\"number\",\"default\":1,\"minimum\":0},\"property\":{\"type\":\"string\",\"default\":\"$zoom\"},\"type\":{\"type\":\"enum\",\"values\":{\"identity\":{},\"exponential\":{},\"interval\":{},\"categorical\":{}},\"default\":\"exponential\"},\"colorSpace\":{\"type\":\"enum\",\"values\":{\"rgb\":{},\"lab\":{},\"hcl\":{}},\"default\":\"rgb\"},\"default\":{\"type\":\"*\",\"required\":false}},\"function_stop\":{\"type\":\"array\",\"minimum\":0,\"maximum\":24,\"value\":[\"number\",\"color\"],\"length\":2},\"expression\":{\"type\":\"array\",\"value\":\"*\",\"minimum\":1},\"expression_name\":{\"type\":\"enum\",\"values\":{\"let\":{\"group\":\"Variable binding\"},\"var\":{\"group\":\"Variable binding\"},\"literal\":{\"group\":\"Types\"},\"array\":{\"group\":\"Types\"},\"at\":{\"group\":\"Lookup\"},\"in\":{\"group\":\"Lookup\"},\"index-of\":{\"group\":\"Lookup\"},\"slice\":{\"group\":\"Lookup\"},\"case\":{\"group\":\"Decision\"},\"match\":{\"group\":\"Decision\"},\"coalesce\":{\"group\":\"Decision\"},\"step\":{\"group\":\"Ramps, scales, curves\"},\"interpolate\":{\"group\":\"Ramps, scales, curves\"},\"interpolate-hcl\":{\"group\":\"Ramps, scales, curves\"},\"interpolate-lab\":{\"group\":\"Ramps, scales, curves\"},\"ln2\":{\"group\":\"Math\"},\"pi\":{\"group\":\"Math\"},\"e\":{\"group\":\"Math\"},\"typeof\":{\"group\":\"Types\"},\"string\":{\"group\":\"Types\"},\"number\":{\"group\":\"Types\"},\"boolean\":{\"group\":\"Types\"},\"object\":{\"group\":\"Types\"},\"collator\":{\"group\":\"Types\"},\"format\":{\"group\":\"Types\"},\"image\":{\"group\":\"Types\"},\"number-format\":{\"group\":\"Types\"},\"to-string\":{\"group\":\"Types\"},\"to-number\":{\"group\":\"Types\"},\"to-boolean\":{\"group\":\"Types\"},\"to-rgba\":{\"group\":\"Color\"},\"to-color\":{\"group\":\"Types\"},\"rgb\":{\"group\":\"Color\"},\"rgba\":{\"group\":\"Color\"},\"get\":{\"group\":\"Lookup\"},\"has\":{\"group\":\"Lookup\"},\"length\":{\"group\":\"Lookup\"},\"properties\":{\"group\":\"Feature data\"},\"feature-state\":{\"group\":\"Feature data\"},\"geometry-type\":{\"group\":\"Feature data\"},\"id\":{\"group\":\"Feature data\"},\"zoom\":{\"group\":\"Camera\"},\"pitch\":{\"group\":\"Camera\"},\"distance-from-center\":{\"group\":\"Camera\"},\"heatmap-density\":{\"group\":\"Heatmap\"},\"line-progress\":{\"group\":\"Feature data\"},\"sky-radial-progress\":{\"group\":\"sky\"},\"accumulated\":{\"group\":\"Feature data\"},\"+\":{\"group\":\"Math\"},\"*\":{\"group\":\"Math\"},\"-\":{\"group\":\"Math\"},\"/\":{\"group\":\"Math\"},\"%\":{\"group\":\"Math\"},\"^\":{\"group\":\"Math\"},\"sqrt\":{\"group\":\"Math\"},\"log10\":{\"group\":\"Math\"},\"ln\":{\"group\":\"Math\"},\"log2\":{\"group\":\"Math\"},\"sin\":{\"group\":\"Math\"},\"cos\":{\"group\":\"Math\"},\"tan\":{\"group\":\"Math\"},\"asin\":{\"group\":\"Math\"},\"acos\":{\"group\":\"Math\"},\"atan\":{\"group\":\"Math\"},\"min\":{\"group\":\"Math\"},\"max\":{\"group\":\"Math\"},\"round\":{\"group\":\"Math\"},\"abs\":{\"group\":\"Math\"},\"ceil\":{\"group\":\"Math\"},\"floor\":{\"group\":\"Math\"},\"distance\":{\"group\":\"Math\"},\"==\":{\"group\":\"Decision\"},\"!=\":{\"group\":\"Decision\"},\">\":{\"group\":\"Decision\"},\"<\":{\"group\":\"Decision\"},\">=\":{\"group\":\"Decision\"},\"<=\":{\"group\":\"Decision\"},\"all\":{\"group\":\"Decision\"},\"any\":{\"group\":\"Decision\"},\"!\":{\"group\":\"Decision\"},\"within\":{\"group\":\"Decision\"},\"is-supported-script\":{\"group\":\"String\"},\"upcase\":{\"group\":\"String\"},\"downcase\":{\"group\":\"String\"},\"concat\":{\"group\":\"String\"},\"resolved-locale\":{\"group\":\"String\"}}},\"fog\":{\"range\":{\"type\":\"array\",\"default\":[0.5,10],\"minimum\":-20,\"maximum\":20,\"length\":2,\"value\":\"number\",\"property-type\":\"data-constant\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]}},\"color\":{\"type\":\"color\",\"property-type\":\"data-constant\",\"default\":\"#ffffff\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"high-color\":{\"type\":\"color\",\"property-type\":\"data-constant\",\"default\":\"#245cdf\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"space-color\":{\"type\":\"color\",\"property-type\":\"data-constant\",\"default\":[\"interpolate\",[\"linear\"],[\"zoom\"],4,\"#010b19\",7,\"#367ab9\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"horizon-blend\":{\"type\":\"number\",\"property-type\":\"data-constant\",\"default\":[\"interpolate\",[\"linear\"],[\"zoom\"],4,0.2,7,0.1],\"minimum\":0,\"maximum\":1,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"star-intensity\":{\"type\":\"number\",\"property-type\":\"data-constant\",\"default\":[\"interpolate\",[\"linear\"],[\"zoom\"],5,0.35,6,0],\"minimum\":0,\"maximum\":1,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true}},\"light\":{\"anchor\":{\"type\":\"enum\",\"default\":\"viewport\",\"values\":{\"map\":{},\"viewport\":{}},\"property-type\":\"data-constant\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]}},\"position\":{\"type\":\"array\",\"default\":[1.15,210,30],\"length\":3,\"value\":\"number\",\"property-type\":\"data-constant\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]}},\"color\":{\"type\":\"color\",\"property-type\":\"data-constant\",\"default\":\"#ffffff\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"intensity\":{\"type\":\"number\",\"property-type\":\"data-constant\",\"default\":0.5,\"minimum\":0,\"maximum\":1,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true}},\"projection\":{\"name\":{\"type\":\"enum\",\"values\":{\"albers\":{},\"equalEarth\":{},\"equirectangular\":{},\"lambertConformalConic\":{},\"mercator\":{},\"naturalEarth\":{},\"winkelTripel\":{},\"globe\":{}},\"default\":\"mercator\",\"required\":true},\"center\":{\"type\":\"array\",\"length\":2,\"value\":\"number\",\"property-type\":\"data-constant\",\"minimum\":[-180,-90],\"maximum\":[180,90],\"transition\":false,\"requires\":[{\"name\":[\"albers\",\"lambertConformalConic\"]}]},\"parallels\":{\"type\":\"array\",\"length\":2,\"value\":\"number\",\"property-type\":\"data-constant\",\"minimum\":[-90,-90],\"maximum\":[90,90],\"transition\":false,\"requires\":[{\"name\":[\"albers\",\"lambertConformalConic\"]}]}},\"terrain\":{\"source\":{\"type\":\"string\",\"required\":true},\"exaggeration\":{\"type\":\"number\",\"property-type\":\"data-constant\",\"default\":1,\"minimum\":0,\"maximum\":1000,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true,\"requires\":[\"source\"]}},\"paint\":[\"paint_fill\",\"paint_line\",\"paint_circle\",\"paint_heatmap\",\"paint_fill-extrusion\",\"paint_symbol\",\"paint_raster\",\"paint_hillshade\",\"paint_background\",\"paint_sky\"],\"paint_fill\":{\"fill-antialias\":{\"type\":\"boolean\",\"default\":true,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[{\"!\":\"fill-pattern\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-outline-color\":{\"type\":\"color\",\"transition\":true,\"requires\":[{\"!\":\"fill-pattern\"},{\"fill-antialias\":true}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"fill-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-pattern\":{\"type\":\"resolvedImage\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"}},\"paint_fill-extrusion\":{\"fill-extrusion-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[{\"!\":\"fill-extrusion-pattern\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"fill-extrusion-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-pattern\":{\"type\":\"resolvedImage\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-height\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"units\":\"meters\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-base\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"units\":\"meters\",\"transition\":true,\"requires\":[\"fill-extrusion-height\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-vertical-gradient\":{\"type\":\"boolean\",\"default\":true,\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-ambient-occlusion-intensity\":{\"property-type\":\"data-constant\",\"type\":\"number\",\"private\":true,\"default\":0,\"minimum\":0,\"maximum\":1,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"fill-extrusion-ambient-occlusion-radius\":{\"property-type\":\"data-constant\",\"type\":\"number\",\"private\":true,\"default\":3,\"minimum\":0,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true,\"requires\":[\"fill-extrusion-edge-radius\"]}},\"paint_line\":{\"line-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[{\"!\":\"line-pattern\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"line-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-width\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-gap-width\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-offset\":{\"type\":\"number\",\"default\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-blur\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-dasharray\":{\"type\":\"array\",\"value\":\"number\",\"minimum\":0,\"transition\":false,\"units\":\"line widths\",\"requires\":[{\"!\":\"line-pattern\"}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-pattern\":{\"type\":\"resolvedImage\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-gradient\":{\"type\":\"color\",\"transition\":false,\"requires\":[{\"!\":\"line-pattern\"},{\"source\":\"geojson\",\"has\":{\"lineMetrics\":true}}],\"expression\":{\"interpolated\":true,\"parameters\":[\"line-progress\"]},\"property-type\":\"color-ramp\"},\"line-trim-offset\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"minimum\":[0,0],\"maximum\":[1,1],\"transition\":false,\"requires\":[{\"source\":\"geojson\",\"has\":{\"lineMetrics\":true}}],\"property-type\":\"constant\"}},\"paint_circle\":{\"circle-radius\":{\"type\":\"number\",\"default\":5,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-blur\":{\"type\":\"number\",\"default\":0,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"circle-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-scale\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"viewport\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-stroke-width\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"}},\"paint_heatmap\":{\"heatmap-radius\":{\"type\":\"number\",\"default\":30,\"minimum\":1,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-weight\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"transition\":false,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-intensity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"heatmap-color\":{\"type\":\"color\",\"default\":[\"interpolate\",[\"linear\"],[\"heatmap-density\"],0,\"rgba(0, 0, 255, 0)\",0.1,\"royalblue\",0.3,\"cyan\",0.5,\"lime\",0.7,\"yellow\",1,\"red\"],\"transition\":false,\"expression\":{\"interpolated\":true,\"parameters\":[\"heatmap-density\"]},\"property-type\":\"color-ramp\"},\"heatmap-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_symbol\":{\"icon-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-color\":{\"type\":\"color\",\"default\":\"rgba(0, 0, 0, 0)\",\"transition\":true,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-width\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-blur\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"icon-image\",\"icon-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"overridable\":true,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-color\":{\"type\":\"color\",\"default\":\"rgba(0, 0, 0, 0)\",\"transition\":true,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-width\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-blur\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"text-field\",\"text-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_raster\":{\"raster-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-hue-rotate\":{\"type\":\"number\",\"default\":0,\"period\":360,\"transition\":true,\"units\":\"degrees\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-min\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-max\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-saturation\":{\"type\":\"number\",\"default\":0,\"minimum\":-1,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-contrast\":{\"type\":\"number\",\"default\":0,\"minimum\":-1,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-resampling\":{\"type\":\"enum\",\"values\":{\"linear\":{},\"nearest\":{}},\"default\":\"linear\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-fade-duration\":{\"type\":\"number\",\"default\":300,\"minimum\":0,\"transition\":false,\"units\":\"milliseconds\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_hillshade\":{\"hillshade-illumination-direction\":{\"type\":\"number\",\"default\":335,\"minimum\":0,\"maximum\":359,\"transition\":false,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-illumination-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"viewport\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-exaggeration\":{\"type\":\"number\",\"default\":0.5,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-shadow-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-highlight-color\":{\"type\":\"color\",\"default\":\"#FFFFFF\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-accent-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_background\":{\"background-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[{\"!\":\"background-pattern\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"background-pattern\":{\"type\":\"resolvedImage\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"background-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_sky\":{\"sky-type\":{\"type\":\"enum\",\"values\":{\"gradient\":{},\"atmosphere\":{}},\"default\":\"atmosphere\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"sky-atmosphere-sun\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"units\":\"degrees\",\"minimum\":[0,0],\"maximum\":[360,180],\"transition\":false,\"requires\":[{\"sky-type\":\"atmosphere\"}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"sky-atmosphere-sun-intensity\":{\"type\":\"number\",\"requires\":[{\"sky-type\":\"atmosphere\"}],\"default\":10,\"minimum\":0,\"maximum\":100,\"transition\":false,\"property-type\":\"data-constant\"},\"sky-gradient-center\":{\"type\":\"array\",\"requires\":[{\"sky-type\":\"gradient\"}],\"value\":\"number\",\"default\":[0,0],\"length\":2,\"units\":\"degrees\",\"minimum\":[0,0],\"maximum\":[360,180],\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"sky-gradient-radius\":{\"type\":\"number\",\"requires\":[{\"sky-type\":\"gradient\"}],\"default\":90,\"minimum\":0,\"maximum\":180,\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"sky-gradient\":{\"type\":\"color\",\"default\":[\"interpolate\",[\"linear\"],[\"sky-radial-progress\"],0.8,\"#87ceeb\",1,\"white\"],\"transition\":false,\"requires\":[{\"sky-type\":\"gradient\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"sky-radial-progress\"]},\"property-type\":\"color-ramp\"},\"sky-atmosphere-halo-color\":{\"type\":\"color\",\"default\":\"white\",\"transition\":false,\"requires\":[{\"sky-type\":\"atmosphere\"}],\"property-type\":\"data-constant\"},\"sky-atmosphere-color\":{\"type\":\"color\",\"default\":\"white\",\"transition\":false,\"requires\":[{\"sky-type\":\"atmosphere\"}],\"property-type\":\"data-constant\"},\"sky-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"transition\":{\"duration\":{\"type\":\"number\",\"default\":300,\"minimum\":0,\"units\":\"milliseconds\"},\"delay\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"units\":\"milliseconds\"}},\"property-type\":{\"data-driven\":{\"type\":\"property-type\"},\"color-ramp\":{\"type\":\"property-type\"},\"data-constant\":{\"type\":\"property-type\"},\"constant\":{\"type\":\"property-type\"}},\"promoteId\":{\"*\":{\"type\":\"string\"}}};\n\n// \nfunction isExpressionFilter(filter) {\n if (filter === true || filter === false) {\n return true;\n }\n if (!Array.isArray(filter) || filter.length === 0) {\n return false;\n }\n switch (filter[0]) {\n case 'has':\n return filter.length >= 2 && filter[1] !== '$id' && filter[1] !== '$type';\n case 'in':\n return filter.length >= 3 && (typeof filter[1] !== 'string' || Array.isArray(filter[2]));\n case '!in':\n case '!has':\n case 'none':\n return false;\n case '==':\n case '!=':\n case '>':\n case '>=':\n case '<':\n case '<=':\n return filter.length !== 3 || (Array.isArray(filter[1]) || Array.isArray(filter[2]));\n case 'any':\n case 'all':\n for (const f of filter.slice(1)) {\n if (!isExpressionFilter(f) && typeof f !== 'boolean') {\n return false;\n }\n }\n return true;\n default:\n return true;\n }\n}\n/**\n * Given a filter expressed as nested arrays, return a new function\n * that evaluates whether a given feature (with a .properties or .tags property)\n * passes its test.\n *\n * @private\n * @param {Array} filter mapbox gl filter\n * @param {string} layerType the type of the layer this filter will be applied to.\n * @returns {Function} filter-evaluating function\n */\nfunction createFilter(filter, layerType = 'fill') {\n if (filter === null || filter === undefined) {\n return {\n filter: () => true,\n needGeometry: false,\n needFeature: false\n };\n }\n if (!isExpressionFilter(filter)) {\n filter = convertFilter(filter);\n }\n const filterExp = filter;\n let staticFilter = true;\n try {\n staticFilter = extractStaticFilter(filterExp);\n } catch (e) {\n console.warn(`Failed to extract static filter. Filter will continue working, but at higher memory usage and slower framerate.\nThis is most likely a bug, please report this via https://github.com/mapbox/mapbox-gl-js/issues/new?assignees=&labels=&template=Bug_report.md\nand paste the contents of this message in the report.\nThank you!\nFilter Expression:\n${ JSON.stringify(filterExp, null, 2) }\n `);\n }\n // Compile the static component of the filter\n const filterSpec = spec[`filter_${ layerType }`];\n const compiledStaticFilter = createExpression(staticFilter, filterSpec);\n let filterFunc = null;\n if (compiledStaticFilter.result === 'error') {\n throw new Error(compiledStaticFilter.value.map(err => `${ err.key }: ${ err.message }`).join(', '));\n } else {\n filterFunc = (globalProperties, feature, canonical) => compiledStaticFilter.value.evaluate(globalProperties, feature, {}, canonical);\n }\n // If the static component is not equal to the entire filter then we have a dynamic component\n // Compile the dynamic component separately\n let dynamicFilterFunc = null;\n let needFeature = null;\n if (staticFilter !== filterExp) {\n const compiledDynamicFilter = createExpression(filterExp, filterSpec);\n if (compiledDynamicFilter.result === 'error') {\n throw new Error(compiledDynamicFilter.value.map(err => `${ err.key }: ${ err.message }`).join(', '));\n } else {\n dynamicFilterFunc = (globalProperties, feature, canonical, featureTileCoord, featureDistanceData) => compiledDynamicFilter.value.evaluate(globalProperties, feature, {}, canonical, undefined, undefined, featureTileCoord, featureDistanceData);\n needFeature = !isFeatureConstant(compiledDynamicFilter.value.expression);\n }\n }\n filterFunc = filterFunc;\n const needGeometry = geometryNeeded(staticFilter);\n return {\n filter: filterFunc,\n dynamicFilter: dynamicFilterFunc ? dynamicFilterFunc : undefined,\n needGeometry,\n needFeature: !!needFeature\n };\n}\nfunction extractStaticFilter(filter) {\n if (!isDynamicFilter(filter)) {\n return filter;\n }\n // Shallow copy so we can replace expressions in-place\n let result = deepUnbundle(filter);\n // 1. Union branches\n unionDynamicBranches(result);\n // 2. Collapse dynamic conditions to `true`\n result = collapseDynamicBooleanExpressions(result);\n return result;\n}\nfunction collapseDynamicBooleanExpressions(expression) {\n if (!Array.isArray(expression)) {\n return expression;\n }\n const collapsed = collapsedExpression(expression);\n if (collapsed === true) {\n return collapsed;\n } else {\n return collapsed.map(subExpression => collapseDynamicBooleanExpressions(subExpression));\n }\n}\n/**\n * Traverses the expression and replaces all instances of branching on a\n * `dynamic` conditional (such as `['pitch']` or `['distance-from-center']`)\n * into an `any` expression.\n * This ensures that all possible outcomes of a `dynamic` branch are considered\n * when evaluating the expression upfront during filtering.\n *\n * @param {Array} filter the filter expression mutated in-place.\n */\nfunction unionDynamicBranches(filter) {\n let isBranchingDynamically = false;\n const branches = [];\n if (filter[0] === 'case') {\n for (let i = 1; i < filter.length - 1; i += 2) {\n isBranchingDynamically = isBranchingDynamically || isDynamicFilter(filter[i]);\n branches.push(filter[i + 1]);\n }\n branches.push(filter[filter.length - 1]);\n } else if (filter[0] === 'match') {\n isBranchingDynamically = isBranchingDynamically || isDynamicFilter(filter[1]);\n for (let i = 2; i < filter.length - 1; i += 2) {\n branches.push(filter[i + 1]);\n }\n branches.push(filter[filter.length - 1]);\n } else if (filter[0] === 'step') {\n isBranchingDynamically = isBranchingDynamically || isDynamicFilter(filter[1]);\n for (let i = 1; i < filter.length - 1; i += 2) {\n branches.push(filter[i + 1]);\n }\n }\n if (isBranchingDynamically) {\n filter.length = 0;\n filter.push('any', ...branches);\n }\n // traverse and recurse into children\n for (let i = 1; i < filter.length; i++) {\n unionDynamicBranches(filter[i]);\n }\n}\nfunction isDynamicFilter(filter) {\n // Base Cases\n if (!Array.isArray(filter)) {\n return false;\n }\n if (isRootExpressionDynamic(filter[0])) {\n return true;\n }\n for (let i = 1; i < filter.length; i++) {\n const child = filter[i];\n if (isDynamicFilter(child)) {\n return true;\n }\n }\n return false;\n}\nfunction isRootExpressionDynamic(expression) {\n return expression === 'pitch' || expression === 'distance-from-center';\n}\nconst dynamicConditionExpressions = new Set([\n 'in',\n '==',\n '!=',\n '>',\n '>=',\n '<',\n '<=',\n 'to-boolean'\n]);\nfunction collapsedExpression(expression) {\n if (dynamicConditionExpressions.has(expression[0])) {\n for (let i = 1; i < expression.length; i++) {\n const param = expression[i];\n if (isDynamicFilter(param)) {\n return true;\n }\n }\n }\n return expression;\n}\n// Comparison function to sort numbers and strings\nfunction compare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\nfunction geometryNeeded(filter) {\n if (!Array.isArray(filter))\n return false;\n if (filter[0] === 'within')\n return true;\n for (let index = 1; index < filter.length; index++) {\n if (geometryNeeded(filter[index]))\n return true;\n }\n return false;\n}\nfunction convertFilter(filter) {\n if (!filter)\n return true;\n const op = filter[0];\n if (filter.length <= 1)\n return op !== 'any';\n const converted = op === '==' ? convertComparisonOp(filter[1], filter[2], '==') : op === '!=' ? convertNegation(convertComparisonOp(filter[1], filter[2], '==')) : op === '<' || op === '>' || op === '<=' || op === '>=' ? convertComparisonOp(filter[1], filter[2], op) : op === 'any' ? convertDisjunctionOp(filter.slice(1)) : op === 'all' ? ['all'].concat(filter.slice(1).map(convertFilter)) : op === 'none' ? ['all'].concat(filter.slice(1).map(convertFilter).map(convertNegation)) : op === 'in' ? convertInOp(filter[1], filter.slice(2)) : op === '!in' ? convertNegation(convertInOp(filter[1], filter.slice(2))) : op === 'has' ? convertHasOp(filter[1]) : op === '!has' ? convertNegation(convertHasOp(filter[1])) : op === 'within' ? filter : true;\n return converted;\n}\nfunction convertComparisonOp(property, value, op) {\n switch (property) {\n case '$type':\n return [\n `filter-type-${ op }`,\n value\n ];\n case '$id':\n return [\n `filter-id-${ op }`,\n value\n ];\n default:\n return [\n `filter-${ op }`,\n property,\n value\n ];\n }\n}\nfunction convertDisjunctionOp(filters) {\n return ['any'].concat(filters.map(convertFilter));\n}\nfunction convertInOp(property, values) {\n if (values.length === 0) {\n return false;\n }\n switch (property) {\n case '$type':\n return [\n `filter-type-in`,\n [\n 'literal',\n values\n ]\n ];\n case '$id':\n return [\n `filter-id-in`,\n [\n 'literal',\n values\n ]\n ];\n default:\n if (values.length > 200 && !values.some(v => typeof v !== typeof values[0])) {\n return [\n 'filter-in-large',\n property,\n [\n 'literal',\n values.sort(compare)\n ]\n ];\n } else {\n return [\n 'filter-in-small',\n property,\n [\n 'literal',\n values\n ]\n ];\n }\n }\n}\nfunction convertHasOp(property) {\n switch (property) {\n case '$type':\n return true;\n case '$id':\n return [`filter-has-id`];\n default:\n return [\n `filter-has`,\n property\n ];\n }\n}\nfunction convertNegation(filter) {\n return [\n '!',\n filter\n ];\n}\n\n// \nvar refProperties = [\n 'type',\n 'source',\n 'source-layer',\n 'minzoom',\n 'maxzoom',\n 'filter',\n 'layout'\n];\n\n// \nfunction deref(layer, parent) {\n const result = {};\n for (const k in layer) {\n if (k !== 'ref') {\n result[k] = layer[k];\n }\n }\n refProperties.forEach(k => {\n if (k in parent) {\n result[k] = parent[k];\n }\n });\n return result;\n}\n/**\n * Given an array of layers, some of which may contain `ref` properties\n * whose value is the `id` of another property, return a new array where\n * such layers have been augmented with the 'type', 'source', etc. properties\n * from the parent layer, and the `ref` property has been removed.\n *\n * The input is not modified. The output may contain references to portions\n * of the input.\n *\n * @private\n * @param {Array} layers\n * @returns {Array}\n */\nfunction derefLayers(layers) {\n layers = layers.slice();\n const map = Object.create(null);\n for (let i = 0; i < layers.length; i++) {\n map[layers[i].id] = layers[i];\n }\n for (let i = 0; i < layers.length; i++) {\n if ('ref' in layers[i]) {\n layers[i] = deref(layers[i], map[layers[i].ref]);\n }\n }\n return layers;\n}\n\nvar fontWeights = {\n thin: 100,\n hairline: 100,\n 'ultra-light': 200,\n 'extra-light': 200,\n light: 300,\n book: 300,\n regular: 400,\n normal: 400,\n plain: 400,\n roman: 400,\n standard: 400,\n medium: 500,\n 'semi-bold': 600,\n 'demi-bold': 600,\n bold: 700,\n 'extra-bold': 800,\n 'ultra-bold': 800,\n heavy: 900,\n black: 900,\n 'heavy-black': 900,\n fat: 900,\n poster: 900,\n 'ultra-black': 950,\n 'extra-black': 950\n};\nvar sp = ' ';\nvar italicRE = /(italic|oblique)$/i;\nvar fontCache = {};\nvar mapboxToCssFont = function (fonts, size, lineHeight) {\n var cssData = fontCache[fonts];\n if (!cssData) {\n if (!Array.isArray(fonts)) {\n fonts = [fonts];\n }\n var weight = 400;\n var style = 'normal';\n var fontFamilies = [];\n var haveWeight, haveStyle;\n for (var i = 0, ii = fonts.length; i < ii; ++i) {\n var font = fonts[i];\n var parts = font.split(' ');\n var maybeWeight = parts[parts.length - 1].toLowerCase();\n if (maybeWeight == 'normal' || maybeWeight == 'italic' || maybeWeight == 'oblique') {\n style = haveStyle ? style : maybeWeight;\n haveStyle = true;\n parts.pop();\n maybeWeight = parts[parts.length - 1].toLowerCase();\n } else if (italicRE.test(maybeWeight)) {\n maybeWeight = maybeWeight.replace(italicRE, '');\n style = haveStyle ? style : parts[parts.length - 1].replace(maybeWeight, '');\n haveStyle = true;\n }\n for (var w in fontWeights) {\n var previousPart = parts.length > 1 ? parts[parts.length - 2].toLowerCase() : '';\n if (maybeWeight == w || maybeWeight == w.replace('-', '') || previousPart + '-' + maybeWeight == w) {\n weight = haveWeight ? weight : fontWeights[w];\n parts.pop();\n if (previousPart && w.startsWith(previousPart)) {\n parts.pop();\n }\n break;\n }\n }\n if (!haveWeight && typeof maybeWeight == 'number') {\n weight = maybeWeight;\n haveWeight = true;\n }\n var fontFamily = parts.join(sp).replace('Klokantech Noto Sans', 'Noto Sans');\n if (fontFamily.indexOf(sp) !== -1) {\n fontFamily = '\"' + fontFamily + '\"';\n }\n fontFamilies.push(fontFamily);\n }\n // CSS font property: font-style font-weight font-size/line-height font-family\n cssData = fontCache[fonts] = [\n style,\n weight,\n fontFamilies\n ];\n }\n return cssData[0] + sp + cssData[1] + sp + size + 'px' + (lineHeight ? '/' + lineHeight : '') + sp + cssData[2];\n};\n\nvar mb2css = /*@__PURE__*/getDefaultExportFromCjs(mapboxToCssFont);\n\nconst mapboxBaseUrl = 'https://api.mapbox.com';\n/**\n * Gets the path from a mapbox:// URL.\n * @param {string} url The Mapbox URL.\n * @return {string} The path.\n * @private\n */\nfunction getMapboxPath(url) {\n const startsWith = 'mapbox://';\n if (url.indexOf(startsWith) !== 0) {\n return '';\n }\n return url.slice(startsWith.length);\n}\n/**\n * Turns mapbox:// sprite URLs into resolvable URLs.\n * @param {string} url The sprite URL.\n * @param {string} token The access token.\n * @param {string} styleUrl The style URL.\n * @return {string} A resolvable URL.\n * @private\n */\nfunction normalizeSpriteUrl(url, token, styleUrl) {\n const mapboxPath = getMapboxPath(url);\n if (!mapboxPath) {\n return decodeURI(new URL(url, styleUrl).href);\n }\n const startsWith = 'sprites/';\n if (mapboxPath.indexOf(startsWith) !== 0) {\n throw new Error(`unexpected sprites url: ${ url }`);\n }\n const sprite = mapboxPath.slice(startsWith.length);\n return `${ mapboxBaseUrl }/styles/v1/${ sprite }/sprite?access_token=${ token }`;\n}\n/**\n * Turns mapbox:// style URLs into resolvable URLs.\n * @param {string} url The style URL.\n * @param {string} token The access token.\n * @return {string} A resolvable URL.\n * @private\n */\nfunction normalizeStyleUrl(url, token) {\n const mapboxPath = getMapboxPath(url);\n if (!mapboxPath) {\n return decodeURI(new URL(url, location.href).href);\n }\n const startsWith = 'styles/';\n if (mapboxPath.indexOf(startsWith) !== 0) {\n throw new Error(`unexpected style url: ${ url }`);\n }\n const style = mapboxPath.slice(startsWith.length);\n return `${ mapboxBaseUrl }/styles/v1/${ style }?&access_token=${ token }`;\n}\nconst mapboxSubdomains = [\n 'a',\n 'b',\n 'c',\n 'd'\n];\n/**\n * Turns mapbox:// source URLs into vector tile URL templates.\n * @param {string} url The source URL.\n * @param {string} token The access token.\n * @param {string} tokenParam The access token key.\n * @param {string} styleUrl The style URL.\n * @return {Array} A vector tile template.\n * @private\n */\nfunction normalizeSourceUrl(url, token, tokenParam, styleUrl) {\n const urlObject = new URL(url, styleUrl);\n const mapboxPath = getMapboxPath(url);\n if (!mapboxPath) {\n if (!token) {\n return [decodeURI(urlObject.href)];\n }\n if (!urlObject.searchParams.has(tokenParam)) {\n urlObject.searchParams.set(tokenParam, token);\n }\n return [decodeURI(urlObject.href)];\n }\n if (mapboxPath === 'mapbox.satellite') {\n const sizeFactor = window.devicePixelRatio >= 1.5 ? '@2x' : '';\n return [`https://api.mapbox.com/v4/${ mapboxPath }/{z}/{x}/{y}${ sizeFactor }.webp?access_token=${ token }`];\n }\n return mapboxSubdomains.map(sub => `https://${ sub }.tiles.mapbox.com/v4/${ mapboxPath }/{z}/{x}/{y}.vector.pbf?access_token=${ token }`);\n}\n\n/** @typedef {'Style'|'Source'|'Sprite'|'SpriteImage'|'Tiles'|'GeoJSON'} ResourceType */\n/** @typedef {import(\"ol\").Map} Map */\n/** @typedef {import(\"ol/layer\").Layer} Layer */\n/** @typedef {import(\"ol/layer\").Group} LayerGroup */\n/** @typedef {import(\"ol/layer\").Vector} VectorLayer */\n/** @typedef {import(\"ol/layer\").VectorTile} VectorTileLayer */\n/** @typedef {import(\"ol/source\").Source} Source */\nconst functionCacheByStyleId = {};\nconst filterCacheByStyleId = {};\nlet styleId = 0;\nfunction getStyleId(glStyle) {\n if (!glStyle.id) {\n glStyle.id = styleId++;\n }\n return glStyle.id;\n}\nfunction getStyleFunctionKey(glStyle, olLayer) {\n return getStyleId(glStyle) + '.' + getUid(olLayer);\n}\n/**\n * @param {Object} glStyle Mapboox style object.\n * @return {Object} Function cache.\n */\nfunction getFunctionCache(glStyle) {\n let functionCache = functionCacheByStyleId[glStyle.id];\n if (!functionCache) {\n functionCache = {};\n functionCacheByStyleId[getStyleId(glStyle)] = functionCache;\n }\n return functionCache;\n}\nfunction clearFunctionCache() {\n for (const key in functionCacheByStyleId) {\n delete functionCacheByStyleId[key];\n }\n}\n/**\n * @param {Object} glStyle Mapboox style object.\n * @return {Object} Filter cache.\n */\nfunction getFilterCache(glStyle) {\n let filterCache = filterCacheByStyleId[glStyle.id];\n if (!filterCache) {\n filterCache = {};\n filterCacheByStyleId[getStyleId(glStyle)] = filterCache;\n }\n return filterCache;\n}\nfunction deg2rad(degrees) {\n return degrees * Math.PI / 180;\n}\nconst defaultResolutions = (function () {\n const resolutions = [];\n for (let res = 78271.51696402048; resolutions.length <= 24; res /= 2) {\n resolutions.push(res);\n }\n return resolutions;\n}());\n/**\n * @param {number} width Width of the canvas.\n * @param {number} height Height of the canvas.\n * @return {HTMLCanvasElement} Canvas.\n */\nfunction createCanvas(width, height) {\n if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope && typeof OffscreenCanvas !== 'undefined') {\n // eslint-disable-line\n return new OffscreenCanvas(width, height);\n }\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\nfunction getZoomForResolution(resolution, resolutions) {\n let i = 0;\n const ii = resolutions.length;\n for (; i < ii; ++i) {\n const candidate = resolutions[i];\n if (candidate < resolution && i + 1 < ii) {\n const zoomFactor = resolutions[i] / resolutions[i + 1];\n return i + Math.log(resolutions[i] / resolution) / Math.log(zoomFactor);\n }\n }\n return ii - 1;\n}\nfunction getResolutionForZoom(zoom, resolutions) {\n const base = Math.floor(zoom);\n const factor = Math.pow(2, zoom - base);\n return resolutions[base] / factor;\n}\nconst pendingRequests = {};\n/**\n * @param {ResourceType} resourceType Type of resource to load.\n * @param {string} url Url of the resource.\n * @param {Options} [options={}] Options.\n * @param {{request?: Request}} [metadata] Object to be filled with the request.\n * @return {Promise} Promise that resolves with the loaded resource\n * or rejects with the Response object.\n * @private\n */\nfunction fetchResource(resourceType, url, options = {}, metadata) {\n if (url in pendingRequests) {\n if (metadata) {\n metadata.request = pendingRequests[url][0];\n }\n return pendingRequests[url][1];\n }\n const transformedRequest = options.transformRequest ? options.transformRequest(url, resourceType) || url : url;\n const pendingRequest = toPromise(() => transformedRequest).then(transformedRequest => {\n if (!(transformedRequest instanceof Request)) {\n transformedRequest = new Request(transformedRequest);\n }\n if (!transformedRequest.headers.get('Accept')) {\n transformedRequest.headers.set('Accept', 'application/json');\n }\n if (metadata) {\n metadata.request = transformedRequest;\n }\n return fetch(transformedRequest).then(function (response) {\n delete pendingRequests[url];\n return response.ok ? response.json() : Promise.reject(new Error('Error fetching source ' + url));\n }).catch(function (error) {\n delete pendingRequests[url];\n return Promise.reject(new Error('Error fetching source ' + url));\n });\n });\n pendingRequests[url] = [\n transformedRequest,\n pendingRequest\n ];\n return pendingRequest;\n}\nfunction getGlStyle(glStyleOrUrl, options) {\n if (typeof glStyleOrUrl === 'string') {\n if (glStyleOrUrl.trim().startsWith('{')) {\n try {\n const glStyle = JSON.parse(glStyleOrUrl);\n return Promise.resolve(glStyle);\n } catch (error) {\n return Promise.reject(error);\n }\n } else {\n glStyleOrUrl = normalizeStyleUrl(glStyleOrUrl, options.accessToken);\n return fetchResource('Style', glStyleOrUrl, options);\n }\n } else {\n return Promise.resolve(glStyleOrUrl);\n }\n}\nconst tilejsonCache = {};\n/**\n * @param {Object} glSource glStyle source object.\n * @param {string} styleUrl Style URL.\n * @param {Options} options Options.\n * @return {Promise<{tileJson: Object, tileLoadFunction: import('ol/Tile.js').LoadFunction}?>} TileJson and load function\n */\nfunction getTileJson(glSource, styleUrl, options = {}) {\n const cacheKey = [\n styleUrl,\n JSON.stringify(glSource)\n ].toString();\n let promise = tilejsonCache[cacheKey];\n if (!promise || options.transformRequest) {\n let tileLoadFunction;\n if (options.transformRequest) {\n tileLoadFunction = (tile, src) => {\n const transformedRequest = options.transformRequest ? options.transformRequest(src, 'Tiles') || src : src;\n if (tile instanceof VectorTile) {\n tile.setLoader((extent, resolution, projection) => {\n toPromise(() => transformedRequest).then(transformedRequest => {\n fetch(transformedRequest).then(response => response.arrayBuffer()).then(data => {\n const format = tile.getFormat();\n const features = format.readFeatures(data, {\n extent: extent,\n featureProjection: projection\n });\n // @ts-ignore\n tile.setFeatures(features);\n }).catch(e => tile.setState(TileState.ERROR));\n });\n });\n } else {\n const img = tile.getImage();\n toPromise(() => transformedRequest).then(transformedRequest => {\n if (transformedRequest instanceof Request) {\n fetch(transformedRequest).then(response => response.blob()).then(blob => {\n const url = URL.createObjectURL(blob);\n img.addEventListener('load', () => URL.revokeObjectURL(url));\n img.addEventListener('error', () => URL.revokeObjectURL(url));\n img.src = url;\n }).catch(e => tile.setState(TileState.ERROR));\n } else {\n img.src = transformedRequest;\n }\n });\n }\n };\n }\n const url = glSource.url;\n if (url && !glSource.tiles) {\n const normalizedSourceUrl = normalizeSourceUrl(url, options.accessToken, options.accessTokenParam || 'access_token', styleUrl || location.href);\n if (url.startsWith('mapbox://')) {\n promise = Promise.resolve({\n tileJson: Object.assign({}, glSource, {\n url: undefined,\n tiles: normalizedSourceUrl\n }),\n tileLoadFunction\n });\n } else {\n const metadata = {};\n promise = fetchResource('Source', normalizedSourceUrl[0], options, metadata).then(function (tileJson) {\n tileJson.tiles = tileJson.tiles.map(function (tileUrl) {\n if (tileJson.scheme === 'tms') {\n tileUrl = tileUrl.replace('{y}', '{-y}');\n }\n return normalizeSourceUrl(tileUrl, options.accessToken, options.accessTokenParam || 'access_token', metadata.request.url)[0];\n });\n return Promise.resolve({\n tileJson,\n tileLoadFunction\n });\n });\n }\n } else {\n glSource = Object.assign({}, glSource, {\n tiles: glSource.tiles.map(function (tileUrl) {\n if (glSource.scheme === 'tms') {\n tileUrl = tileUrl.replace('{y}', '{-y}');\n }\n return normalizeSourceUrl(tileUrl, options.accessToken, options.accessTokenParam || 'access_token', styleUrl || location.href)[0];\n })\n });\n promise = Promise.resolve({\n tileJson: Object.assign({}, glSource),\n tileLoadFunction\n });\n }\n tilejsonCache[cacheKey] = promise;\n }\n return promise;\n}\n/**\n * @param {HTMLImageElement|HTMLCanvasElement} spriteImage Sprite image id.\n * @param {{x: number, y: number, width: number, height: number, pixelRatio: number}} spriteImageData Sprite image data.\n * @param {number} haloWidth Halo width.\n * @param {{r: number, g: number, b: number, a: number}} haloColor Halo color.\n * @return {HTMLCanvasElement} Canvas element with the halo.\n */\nfunction drawIconHalo(spriteImage, spriteImageData, haloWidth, haloColor) {\n const imgSize = [\n 2 * haloWidth * spriteImageData.pixelRatio + spriteImageData.width,\n 2 * haloWidth * spriteImageData.pixelRatio + spriteImageData.height\n ];\n const imageCanvas = createCanvas(imgSize[0], imgSize[1]);\n const imageContext = imageCanvas.getContext('2d');\n imageContext.drawImage(spriteImage, spriteImageData.x, spriteImageData.y, spriteImageData.width, spriteImageData.height, haloWidth * spriteImageData.pixelRatio, haloWidth * spriteImageData.pixelRatio, spriteImageData.width, spriteImageData.height);\n const imageData = imageContext.getImageData(0, 0, imgSize[0], imgSize[1]);\n imageContext.globalCompositeOperation = 'destination-over';\n imageContext.fillStyle = `rgba(${ haloColor.r * 255 },${ haloColor.g * 255 },${ haloColor.b * 255 },${ haloColor.a })`;\n const data = imageData.data;\n for (let i = 0, ii = imageData.width; i < ii; ++i) {\n for (let j = 0, jj = imageData.height; j < jj; ++j) {\n const index = (j * ii + i) * 4;\n const alpha = data[index + 3];\n if (alpha > 0) {\n imageContext.arc(i, j, haloWidth * spriteImageData.pixelRatio, 0, 2 * Math.PI);\n }\n }\n }\n imageContext.fill();\n return imageCanvas;\n}\nfunction smoothstep(min, max, value) {\n const x = Math.max(0, Math.min(1, (value - min) / (max - min)));\n return x * x * (3 - 2 * x);\n}\n/**\n * @param {HTMLImageElement} image SDF image\n * @param {{x: number, y: number, width: number, height: number}} area Area to unSDF\n * @param {{r: number, g: number, b: number, a: number}} color Color to use\n * @return {HTMLCanvasElement} Regular image\n */\nfunction drawSDF(image, area, color) {\n const imageCanvas = createCanvas(area.width, area.height);\n const imageContext = imageCanvas.getContext('2d');\n imageContext.drawImage(image, area.x, area.y, area.width, area.height, 0, 0, area.width, area.height);\n const imageData = imageContext.getImageData(0, 0, area.width, area.height);\n const data = imageData.data;\n for (let i = 0, ii = imageData.width; i < ii; ++i) {\n for (let j = 0, jj = imageData.height; j < jj; ++j) {\n const index = (j * ii + i) * 4;\n const dist = data[index + 3] / 255;\n const buffer = 0.75;\n const gamma = 0.1;\n const alpha = smoothstep(buffer - gamma, buffer + gamma, dist);\n if (alpha > 0) {\n data[index + 0] = Math.round(255 * color.r * alpha);\n data[index + 1] = Math.round(255 * color.g * alpha);\n data[index + 2] = Math.round(255 * color.b * alpha);\n data[index + 3] = Math.round(255 * alpha);\n } else {\n data[index + 3] = 0;\n }\n }\n }\n imageContext.putImageData(imageData, 0, 0);\n return imageCanvas;\n} /**\n * @typedef {import(\"./apply.js\").Options} Options\n * @private\n */\n\nconst hairSpacePool = Array(256).join('\\u200A');\nfunction applyLetterSpacing(text, letterSpacing) {\n if (letterSpacing >= 0.05) {\n let textWithLetterSpacing = '';\n const lines = text.split('\\n');\n const joinSpaceString = hairSpacePool.slice(0, Math.round(letterSpacing / 0.1));\n for (let l = 0, ll = lines.length; l < ll; ++l) {\n if (l > 0) {\n textWithLetterSpacing += '\\n';\n }\n textWithLetterSpacing += lines[l].split('').join(joinSpaceString);\n }\n return textWithLetterSpacing;\n }\n return text;\n}\nlet measureContext;\nfunction getMeasureContext() {\n if (!measureContext) {\n measureContext = createCanvas(1, 1).getContext('2d');\n }\n return measureContext;\n}\nfunction measureText(text, letterSpacing) {\n return getMeasureContext().measureText(text).width + (text.length - 1) * letterSpacing;\n}\nconst measureCache = {};\nfunction wrapText(text, font, em, letterSpacing) {\n if (text.indexOf('\\n') !== -1) {\n const hardLines = text.split('\\n');\n const lines = [];\n for (let i = 0, ii = hardLines.length; i < ii; ++i) {\n lines.push(wrapText(hardLines[i], font, em, letterSpacing));\n }\n return lines.join('\\n');\n }\n const key = em + ',' + font + ',' + text + ',' + letterSpacing;\n let wrappedText = measureCache[key];\n if (!wrappedText) {\n const words = text.split(' ');\n if (words.length > 1) {\n const ctx = getMeasureContext();\n ctx.font = font;\n const oneEm = ctx.measureText('M').width;\n const maxWidth = oneEm * em;\n let line = '';\n const lines = [];\n // Pass 1 - wrap lines to not exceed maxWidth\n for (let i = 0, ii = words.length; i < ii; ++i) {\n const word = words[i];\n const testLine = line + (line ? ' ' : '') + word;\n if (measureText(testLine, letterSpacing) <= maxWidth) {\n line = testLine;\n } else {\n if (line) {\n lines.push(line);\n }\n line = word;\n }\n }\n if (line) {\n lines.push(line);\n }\n // Pass 2 - add lines with a width of less than 30% of maxWidth to the previous or next line\n for (let i = 0, ii = lines.length; i < ii && ii > 1; ++i) {\n const line = lines[i];\n if (measureText(line, letterSpacing) < maxWidth * 0.35) {\n const prevWidth = i > 0 ? measureText(lines[i - 1], letterSpacing) : Infinity;\n const nextWidth = i < ii - 1 ? measureText(lines[i + 1], letterSpacing) : Infinity;\n lines.splice(i, 1);\n ii -= 1;\n if (prevWidth < nextWidth) {\n lines[i - 1] += ' ' + line;\n i -= 1;\n } else {\n lines[i] = line + ' ' + lines[i];\n }\n }\n }\n // Pass 3 - try to fill 80% of maxWidth for each line\n for (let i = 0, ii = lines.length - 1; i < ii; ++i) {\n const line = lines[i];\n const next = lines[i + 1];\n if (measureText(line, letterSpacing) > maxWidth * 0.7 && measureText(next, letterSpacing) < maxWidth * 0.6) {\n const lineWords = line.split(' ');\n const lastWord = lineWords.pop();\n if (measureText(lastWord, letterSpacing) < maxWidth * 0.2) {\n lines[i] = lineWords.join(' ');\n lines[i + 1] = lastWord + ' ' + next;\n }\n ii -= 1;\n }\n }\n wrappedText = lines.join('\\n');\n } else {\n wrappedText = text;\n }\n wrappedText = applyLetterSpacing(wrappedText, letterSpacing);\n measureCache[key] = wrappedText;\n }\n return wrappedText;\n}\nconst fontFamilyRegEx = /font-family: ?([^;]*);/;\nconst stripQuotesRegEx = /(\"|')/g;\nlet loadedFontFamilies;\nfunction hasFontFamily(family) {\n if (!loadedFontFamilies) {\n loadedFontFamilies = {};\n const styleSheets = document.styleSheets;\n for (let i = 0, ii = styleSheets.length; i < ii; ++i) {\n const styleSheet = styleSheets[i];\n try {\n const cssRules = styleSheet.rules || styleSheet.cssRules;\n if (cssRules) {\n for (let j = 0, jj = cssRules.length; j < jj; ++j) {\n const cssRule = cssRules[j];\n if (cssRule.type == 5) {\n const match = cssRule.cssText.match(fontFamilyRegEx);\n loadedFontFamilies[match[1].replace(stripQuotesRegEx, '')] = true;\n }\n }\n }\n } catch (e) {\n }\n }\n }\n return family in loadedFontFamilies;\n}\nconst processedFontFamilies = {};\n/**\n * @param {Array} fonts Fonts.\n * @param {string} [templateUrl] Template URL.\n * @return {Array} Processed fonts.\n * @private\n */\nfunction getFonts(fonts, templateUrl = 'https://cdn.jsdelivr.net/npm/@fontsource/{font-family}/{fontweight}{-fontstyle}.css') {\n const fontsKey = fonts.toString();\n if (fontsKey in processedFontFamilies) {\n return processedFontFamilies[fontsKey];\n }\n const fontDescriptions = [];\n for (let i = 0, ii = fonts.length; i < ii; ++i) {\n fonts[i] = fonts[i].replace('Arial Unicode MS', 'Arial');\n const font = fonts[i];\n const cssFont = mb2css(font, 1);\n registerFont(cssFont);\n const parts = cssFont.split(' ');\n fontDescriptions.push([\n parts.slice(3).join(' ').replace(/\"/g, ''),\n parts[1],\n parts[0]\n ]);\n }\n for (let i = 0, ii = fontDescriptions.length; i < ii; ++i) {\n const fontDescription = fontDescriptions[i];\n const family = fontDescription[0];\n if (!hasFontFamily(family)) {\n if (checkedFonts.get(`${ fontDescription[2] }\\n${ fontDescription[1] } \\n${ family }`) !== 100) {\n const fontUrl = templateUrl.replace('{font-family}', family.replace(/ /g, '-').toLowerCase()).replace('{Font+Family}', family.replace(/ /g, '+')).replace('{fontweight}', fontDescription[1]).replace('{-fontstyle}', fontDescription[2].replace('normal', '').replace(/(.+)/, '-$1')).replace('{fontstyle}', fontDescription[2]);\n if (!document.querySelector('link[href=\"' + fontUrl + '\"]')) {\n const markup = document.createElement('link');\n markup.href = fontUrl;\n markup.rel = 'stylesheet';\n document.head.appendChild(markup);\n }\n }\n }\n }\n processedFontFamilies[fontsKey] = fonts;\n return fonts;\n}\n\n/*\nol-mapbox-style - Use Mapbox/MapLibre Style objects with OpenLayers\nCopyright 2016-present ol-mapbox-style contributors\nLicense: https://raw.githubusercontent.com/openlayers/ol-mapbox-style/master/LICENSE\n*/\n/**\n * @typedef {import(\"ol/layer/Vector\").default} VectorLayer\n * @typedef {import(\"ol/layer/VectorTile\").default} VectorTileLayer\n * @typedef {import(\"ol/style/Style\").StyleFunction} StyleFunction\n * @typedef {import('./util.js').ResourceType} ResourceType\n */\nconst types = {\n 'Point': 1,\n 'MultiPoint': 1,\n 'LineString': 2,\n 'MultiLineString': 2,\n 'Polygon': 3,\n 'MultiPolygon': 3\n};\nconst anchor = {\n 'center': [\n 0.5,\n 0.5\n ],\n 'left': [\n 0,\n 0.5\n ],\n 'right': [\n 1,\n 0.5\n ],\n 'top': [\n 0.5,\n 0\n ],\n 'bottom': [\n 0.5,\n 1\n ],\n 'top-left': [\n 0,\n 0\n ],\n 'top-right': [\n 1,\n 0\n ],\n 'bottom-left': [\n 0,\n 1\n ],\n 'bottom-right': [\n 1,\n 1\n ]\n};\nconst expressionData = function (rawExpression, propertySpec) {\n const compiledExpression = createPropertyExpression(rawExpression, propertySpec);\n if (compiledExpression.result === 'error') {\n throw new Error(compiledExpression.value.map(err => `${ err.key }: ${ err.message }`).join(', '));\n }\n return compiledExpression.value;\n};\nconst emptyObj$1 = {};\nconst zoomObj = { zoom: 0 };\nlet renderFeatureCoordinates, renderFeature;\n/**\n * @private\n * @param {Object} layer Gl object layer.\n * @param {string} layoutOrPaint 'layout' or 'paint'.\n * @param {string} property Feature property.\n * @param {number} zoom Zoom.\n * @param {Object} feature Gl feature.\n * @param {Object} [functionCache] Function cache.\n * @param {Object} [featureState] Feature state.\n * @return {?} Value.\n */\nfunction getValue(layer, layoutOrPaint, property, zoom, feature, functionCache, featureState) {\n const layerId = layer.id;\n if (!functionCache) {\n functionCache = {};\n console.warn('No functionCache provided to getValue()'); //eslint-disable-line no-console\n }\n if (!functionCache[layerId]) {\n functionCache[layerId] = {};\n }\n const functions = functionCache[layerId];\n if (!functions[property]) {\n let value = (layer[layoutOrPaint] || emptyObj$1)[property];\n const propertySpec = spec[`${ layoutOrPaint }_${ layer.type }`][property];\n if (value === undefined) {\n value = propertySpec.default;\n }\n let isExpr = isExpression(value);\n if (!isExpr && isFunction(value)) {\n value = convertFunction(value, propertySpec);\n isExpr = true;\n }\n if (isExpr) {\n const compiledExpression = expressionData(value, propertySpec);\n functions[property] = compiledExpression.evaluate.bind(compiledExpression);\n } else {\n if (propertySpec.type == 'color') {\n value = Color$1.parse(value);\n }\n functions[property] = function () {\n return value;\n };\n }\n }\n zoomObj.zoom = zoom;\n return functions[property](zoomObj, feature, featureState);\n}\n/**\n * @private\n * @param {Object} layer Gl object layer.\n * @param {number} zoom Zoom.\n * @param {Object} feature Gl feature.\n * @param {\"icon\"|\"text\"} prefix Style property prefix.\n * @param {Object} [functionCache] Function cache.\n * @return {\"declutter\"|\"obstacle\"|\"none\"} Value.\n */\nfunction getDeclutterMode(layer, zoom, feature, prefix, functionCache) {\n const allowOverlap = getValue(layer, 'layout', `${ prefix }-allow-overlap`, zoom, feature, functionCache);\n if (!allowOverlap) {\n return 'declutter';\n }\n const ignorePlacement = getValue(layer, 'layout', `${ prefix }-ignore-placement`, zoom, feature, functionCache);\n if (!ignorePlacement) {\n return 'obstacle';\n }\n return 'none';\n}\n/**\n * @private\n * @param {string} layerId Layer id.\n * @param {?} filter Filter.\n * @param {Object} feature Feature.\n * @param {number} zoom Zoom.\n * @param {Object} [filterCache] Filter cache.\n * @return {boolean} Filter result.\n */\nfunction evaluateFilter(layerId, filter, feature, zoom, filterCache) {\n if (!filterCache) {\n console.warn('No filterCache provided to evaluateFilter()'); //eslint-disable-line no-console\n }\n if (!(layerId in filterCache)) {\n filterCache[layerId] = createFilter(filter).filter;\n }\n zoomObj.zoom = zoom;\n return filterCache[layerId](zoomObj, feature);\n}\nlet renderTransparentEnabled = false;\n/**\n * Configure whether features with a transparent style should be rendered. When\n * set to `true`, it will be possible to hit detect content that is not visible,\n * like transparent fills of polygons, using `ol/layer/Layer#getFeatures()` or\n * `ol/Map#getFeaturesAtPixel()`\n * @param {boolean} enabled Rendering of transparent elements is enabled.\n * Default is `false`.\n */\nfunction renderTransparent(enabled) {\n if (enabled !== renderTransparentEnabled) {\n clearFunctionCache();\n renderTransparentEnabled = enabled;\n }\n}\n/**\n * @private\n * @param {?} color Color.\n * @param {number} [opacity] Opacity.\n * @return {string} Color.\n */\nfunction colorWithOpacity(color, opacity) {\n if (color) {\n if (!renderTransparentEnabled && (color.a === 0 || opacity === 0)) {\n return undefined;\n }\n const a = color.a;\n opacity = opacity === undefined ? 1 : opacity;\n return a === 0 ? 'transparent' : 'rgba(' + Math.round(color.r * 255 / a) + ',' + Math.round(color.g * 255 / a) + ',' + Math.round(color.b * 255 / a) + ',' + a * opacity + ')';\n }\n return color;\n}\nconst templateRegEx = /\\{[^{}}]*\\}/g;\n/**\n * @private\n * @param {string} text Text.\n * @param {Object} properties Properties.\n * @return {string} Text.\n */\nfunction fromTemplate(text, properties) {\n return text.replace(templateRegEx, function (match) {\n return properties[match.slice(1, -1)] || '';\n });\n}\nlet recordLayer = false;\n/**\n * Turns recording of the Mapbox/MapLibre Style's `layer` on and off. When turned on,\n * the layer that a rendered feature belongs to will be set as the feature's\n * `mapbox-layer` property.\n * @param {boolean} record Recording of the style layer is on.\n */\nfunction recordStyleLayer(record = false) {\n recordLayer = record;\n}\nconst styleFunctionArgs = {};\n/**\n * Creates a style function from the `glStyle` object for all layers that use\n * the specified `source`, which needs to be a `\"type\": \"vector\"` or\n * `\"type\": \"geojson\"` source and applies it to the specified OpenLayers layer.\n *\n * Two additional properties will be set on the provided layer:\n *\n * * `mapbox-source`: The `id` of the Mapbox/MapLibre Style document's source that the\n * OpenLayers layer was created from. Usually `apply()` creates one\n * OpenLayers layer per Mapbox/MapLibre Style source, unless the layer stack has\n * layers from different sources in between.\n * * `mapbox-layers`: The `id`s of the Mapbox/MapLibre Style document's layers that are\n * included in the OpenLayers layer.\n *\n * This function also works in a web worker. In worker mode, the main thread needs\n * to listen to messages from the worker and respond with another message to make\n * sure that sprite image loading works:\n *\n * ```js\n * worker.addEventListener('message', event => {\n * if (event.data.action === 'loadImage') {\n * const image = new Image();\n * image.crossOrigin = 'anonymous';\n * image.addEventListener('load', function() {\n * createImageBitmap(image, 0, 0, image.width, image.height).then(imageBitmap => {\n * worker.postMessage({\n * action: 'imageLoaded',\n * image: imageBitmap,\n * src: event.data.src\n * }, [imageBitmap]);\n * });\n * });\n * image.src = event.data.src;\n * }\n * });\n * ```\n *\n * @param {VectorLayer|VectorTileLayer} olLayer OpenLayers layer to\n * apply the style to. In addition to the style, the layer will get two\n * properties: `mapbox-source` will be the `id` of the `glStyle`'s source used\n * for the layer, and `mapbox-layers` will be an array of the `id`s of the\n * `glStyle`'s layers.\n * @param {string|Object} glStyle Mapbox/MapLibre Style object.\n * @param {string|Array} sourceOrLayers `source` key or an array of layer `id`s\n * from the Mapbox/MapLibre Style object. When a `source` key is provided, all layers for\n * the specified source will be included in the style function. When layer `id`s\n * are provided, they must be from layers that use the same source.\n * @param {Array} resolutions\n * Resolutions for mapping resolution to zoom level.\n * @param {Object} spriteData Sprite data from the url specified in\n * the Mapbox/MapLibre Style object's `sprite` property. Only required if a `sprite`\n * property is specified in the Mapbox/MapLibre Style object.\n * @param {string|Request|Promise} spriteImageUrl Sprite image url for the sprite\n * specified in the Mapbox/MapLibre Style object's `sprite` property. Only required if a\n * `sprite` property is specified in the Mapbox/MapLibre Style object.\n * @param {function(Array, string=):Array} getFonts Function that\n * receives a font stack and the url template from the GL style's `metadata['ol:webfonts']`\n * property (if set) as arguments, and returns a (modified) font stack that\n * is available. Font names are the names used in the Mapbox/MapLibre Style object. If\n * not provided, the font stack will be used as-is. This function can also be\n * used for loading web fonts.\n * @param {function(VectorLayer|VectorTileLayer, string):HTMLImageElement|HTMLCanvasElement|string|undefined} [getImage=undefined]\n * Function that returns an image or a URL for an image name. If the result is an HTMLImageElement, it must already be\n * loaded. The layer can be used to call layer.changed() when the loading and processing of the image has finished.\n * This function can be used for icons not in the sprite or to override sprite icons.\n * @return {StyleFunction} Style function for use in\n * `ol.layer.Vector` or `ol.layer.VectorTile`.\n */\nfunction stylefunction(olLayer, glStyle, sourceOrLayers, resolutions = defaultResolutions, spriteData = undefined, spriteImageUrl = undefined, getFonts = undefined, getImage = undefined) {\n if (typeof glStyle == 'string') {\n glStyle = JSON.parse(glStyle);\n }\n if (glStyle.version != 8) {\n throw new Error('glStyle version 8 required.');\n }\n styleFunctionArgs[getStyleFunctionKey(glStyle, olLayer)] = Array.from(arguments);\n let spriteImage, spriteImageSize;\n let spriteImageUnSDFed;\n if (spriteImageUrl) {\n if (typeof Image !== 'undefined') {\n const img = new Image();\n let blobUrl;\n toPromise(() => spriteImageUrl).then(spriteImageUrl => {\n if (spriteImageUrl instanceof Request) {\n fetch(spriteImageUrl).then(response => response.blob()).then(blob => {\n blobUrl = URL.createObjectURL(blob);\n img.src = blobUrl;\n }).catch(() => {\n });\n } else {\n img.crossOrigin = 'anonymous';\n img.src = spriteImageUrl;\n if (blobUrl) {\n URL.revokeObjectURL(blobUrl);\n }\n }\n });\n img.onload = function () {\n spriteImage = img;\n spriteImageSize = [\n img.width,\n img.height\n ];\n olLayer.changed();\n img.onload = null;\n };\n } else if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {\n //eslint-disable-line\n const worker = self;\n // Main thread needs to handle 'loadImage' and dispatch 'imageLoaded'\n worker.postMessage({\n action: 'loadImage',\n src: spriteImageUrl\n });\n worker.addEventListener('message', function handler(event) {\n if (event.data.action === 'imageLoaded' && event.data.src === spriteImageUrl) {\n spriteImage = event.data.image;\n spriteImageSize = [\n spriteImage.width,\n spriteImage.height\n ];\n }\n });\n }\n }\n const allLayers = derefLayers(glStyle.layers);\n const layersBySourceLayer = {};\n const mapboxLayers = [];\n const iconImageCache = {};\n const patternCache = {};\n const functionCache = getFunctionCache(glStyle);\n const filterCache = getFilterCache(glStyle);\n let mapboxSource;\n for (let i = 0, ii = allLayers.length; i < ii; ++i) {\n const layer = allLayers[i];\n const layerId = layer.id;\n if (typeof sourceOrLayers == 'string' && layer.source == sourceOrLayers || Array.isArray(sourceOrLayers) && sourceOrLayers.indexOf(layerId) !== -1) {\n const sourceLayer = layer['source-layer'];\n if (!mapboxSource) {\n mapboxSource = layer.source;\n const source = glStyle.sources[mapboxSource];\n if (!source) {\n throw new Error(`Source \"${ mapboxSource }\" is not defined`);\n }\n const type = source.type;\n if (type !== 'vector' && type !== 'geojson') {\n throw new Error(`Source \"${ mapboxSource }\" is not of type \"vector\" or \"geojson\", but \"${ type }\"`);\n }\n } else if (layer.source !== mapboxSource) {\n throw new Error(`Layer \"${ layerId }\" does not use source \"${ mapboxSource }`);\n }\n let layers = layersBySourceLayer[sourceLayer];\n if (!layers) {\n layers = [];\n layersBySourceLayer[sourceLayer] = layers;\n }\n layers.push({\n layer: layer,\n index: i\n });\n mapboxLayers.push(layerId);\n }\n }\n const textHalo = new Stroke();\n const textColor = new Fill();\n const styles = [];\n /**\n * @param {import(\"ol/Feature\").default|import(\"ol/render/Feature\").default} feature Feature.\n * @param {number} resolution Resolution.\n * @param {string} [onlyLayer] Calculate style for this layer only.\n * @return {Array} Style.\n */\n const styleFunction = function (feature, resolution, onlyLayer) {\n const properties = feature.getProperties();\n const layers = layersBySourceLayer[properties.layer];\n if (!layers) {\n return undefined;\n }\n let zoom = resolutions.indexOf(resolution);\n if (zoom == -1) {\n zoom = getZoomForResolution(resolution, resolutions);\n }\n const type = types[feature.getGeometry().getType()];\n const f = {\n id: feature.getId(),\n properties: properties,\n type: type\n };\n const featureState = olLayer.get('mapbox-featurestate')[feature.getId()];\n let stylesLength = -1;\n let featureBelongsToLayer;\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const layerData = layers[i];\n const layer = layerData.layer;\n const layerId = layer.id;\n if (onlyLayer !== undefined && onlyLayer !== layerId) {\n continue;\n }\n const layout = layer.layout || emptyObj$1;\n const paint = layer.paint || emptyObj$1;\n if (layout.visibility === 'none' || 'minzoom' in layer && zoom < layer.minzoom || 'maxzoom' in layer && zoom >= layer.maxzoom) {\n continue;\n }\n const filter = layer.filter;\n if (!filter || evaluateFilter(layerId, filter, f, zoom, filterCache)) {\n featureBelongsToLayer = layer;\n let color, opacity, fill, stroke, strokeColor, style;\n const index = layerData.index;\n if (type == 3 && (layer.type == 'fill' || layer.type == 'fill-extrusion')) {\n opacity = getValue(layer, 'paint', layer.type + '-opacity', zoom, f, functionCache, featureState);\n if (layer.type + '-pattern' in paint) {\n const fillIcon = getValue(layer, 'paint', layer.type + '-pattern', zoom, f, functionCache, featureState);\n if (fillIcon) {\n const icon = typeof fillIcon === 'string' ? fromTemplate(fillIcon, properties) : fillIcon.toString();\n if (spriteImage && spriteData && spriteData[icon]) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getFill() || style.getStroke() || style.getText()) {\n style = new Style({ fill: new Fill() });\n styles[stylesLength] = style;\n }\n fill = style.getFill();\n style.setZIndex(index);\n const icon_cache_key = icon + '.' + opacity;\n let pattern = patternCache[icon_cache_key];\n if (!pattern) {\n const spriteImageData = spriteData[icon];\n const canvas = createCanvas(spriteImageData.width, spriteImageData.height);\n const ctx = canvas.getContext('2d');\n ctx.globalAlpha = opacity;\n ctx.drawImage(spriteImage, spriteImageData.x, spriteImageData.y, spriteImageData.width, spriteImageData.height, 0, 0, spriteImageData.width, spriteImageData.height);\n pattern = ctx.createPattern(canvas, 'repeat');\n patternCache[icon_cache_key] = pattern;\n }\n fill.setColor(pattern);\n }\n }\n } else {\n color = colorWithOpacity(getValue(layer, 'paint', layer.type + '-color', zoom, f, functionCache, featureState), opacity);\n if (layer.type + '-outline-color' in paint) {\n strokeColor = colorWithOpacity(getValue(layer, 'paint', layer.type + '-outline-color', zoom, f, functionCache, featureState), opacity);\n }\n if (!strokeColor) {\n strokeColor = color;\n }\n if (color || strokeColor) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || color && !style.getFill() || !color && style.getFill() || strokeColor && !style.getStroke() || !strokeColor && style.getStroke() || style.getText()) {\n style = new Style({\n fill: color ? new Fill() : undefined,\n stroke: strokeColor ? new Stroke() : undefined\n });\n styles[stylesLength] = style;\n }\n if (color) {\n fill = style.getFill();\n fill.setColor(color);\n }\n if (strokeColor) {\n stroke = style.getStroke();\n stroke.setColor(strokeColor);\n stroke.setWidth(0.5);\n }\n style.setZIndex(index);\n }\n }\n }\n if (type != 1 && layer.type == 'line') {\n if (!('line-pattern' in paint)) {\n color = colorWithOpacity(getValue(layer, 'paint', 'line-color', zoom, f, functionCache, featureState), getValue(layer, 'paint', 'line-opacity', zoom, f, functionCache, featureState));\n } else {\n color = undefined;\n }\n const width = getValue(layer, 'paint', 'line-width', zoom, f, functionCache, featureState);\n if (color && width > 0) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getStroke() || style.getFill() || style.getText()) {\n style = new Style({ stroke: new Stroke() });\n styles[stylesLength] = style;\n }\n stroke = style.getStroke();\n stroke.setLineCap(getValue(layer, 'layout', 'line-cap', zoom, f, functionCache, featureState));\n stroke.setLineJoin(getValue(layer, 'layout', 'line-join', zoom, f, functionCache, featureState));\n stroke.setMiterLimit(getValue(layer, 'layout', 'line-miter-limit', zoom, f, functionCache, featureState));\n stroke.setColor(color);\n stroke.setWidth(width);\n stroke.setLineDash(paint['line-dasharray'] ? getValue(layer, 'paint', 'line-dasharray', zoom, f, functionCache, featureState).map(function (x) {\n return x * width;\n }) : null);\n style.setZIndex(index);\n }\n }\n let hasImage = false;\n let text = null;\n let placementAngle = 0;\n let icon, iconImg, skipLabel;\n if ((type == 1 || type == 2) && 'icon-image' in layout) {\n const iconImage = getValue(layer, 'layout', 'icon-image', zoom, f, functionCache, featureState);\n if (iconImage) {\n icon = typeof iconImage === 'string' ? fromTemplate(iconImage, properties) : iconImage.toString();\n let styleGeom = undefined;\n const imageElement = getImage ? getImage(olLayer, icon) : undefined;\n if (spriteImage && spriteData && spriteData[icon] || imageElement) {\n const iconRotationAlignment = getValue(layer, 'layout', 'icon-rotation-alignment', zoom, f, functionCache, featureState);\n if (type == 2) {\n const geom = feature.getGeometry();\n // ol package and ol-debug.js only\n if (geom.getFlatMidpoint || geom.getFlatMidpoints) {\n const extent = geom.getExtent();\n const size = Math.sqrt(Math.max(Math.pow((extent[2] - extent[0]) / resolution, 2), Math.pow((extent[3] - extent[1]) / resolution, 2)));\n if (size > 150) {\n //FIXME Do not hard-code a size of 150\n const midpoint = geom.getType() === 'MultiLineString' ? geom.getFlatMidpoints() : geom.getFlatMidpoint();\n if (!renderFeature) {\n renderFeatureCoordinates = [\n NaN,\n NaN\n ];\n renderFeature = new RenderFeature('Point', renderFeatureCoordinates, [], 2, {}, undefined);\n }\n styleGeom = renderFeature;\n renderFeatureCoordinates[0] = midpoint[0];\n renderFeatureCoordinates[1] = midpoint[1];\n const placement = getValue(layer, 'layout', 'symbol-placement', zoom, f, functionCache, featureState);\n if (placement === 'line' && iconRotationAlignment === 'map') {\n const stride = geom.getStride();\n const coordinates = geom.getFlatCoordinates();\n for (let i = 0, ii = coordinates.length - stride; i < ii; i += stride) {\n const x1 = coordinates[i];\n const y1 = coordinates[i + 1];\n const x2 = coordinates[i + stride];\n const y2 = coordinates[i + stride + 1];\n const minX = Math.min(x1, x2);\n const maxX = Math.max(x1, x2);\n const xM = midpoint[0];\n const yM = midpoint[1];\n const dotProduct = (y2 - y1) * (xM - x1) - (x2 - x1) * (yM - y1);\n if (Math.abs(dotProduct) < 0.001 && //midpoint is aligned with the segment\n xM <= maxX && xM >= minX //midpoint is on the segment and not outside it\n) {\n placementAngle = Math.atan2(y1 - y2, x2 - x1);\n break;\n }\n }\n }\n }\n }\n }\n if (type !== 2 || styleGeom) {\n const iconSize = getValue(layer, 'layout', 'icon-size', zoom, f, functionCache, featureState);\n const iconColor = paint['icon-color'] !== undefined ? getValue(layer, 'paint', 'icon-color', zoom, f, functionCache, featureState) : null;\n if (!iconColor || iconColor.a !== 0) {\n const haloColor = getValue(layer, 'paint', 'icon-halo-color', zoom, f, functionCache, featureState);\n const haloWidth = getValue(layer, 'paint', 'icon-halo-width', zoom, f, functionCache, featureState);\n let iconCacheKey = `${ icon }.${ iconSize }.${ haloWidth }.${ haloColor }`;\n if (iconColor !== null) {\n iconCacheKey += `.${ iconColor }`;\n }\n iconImg = iconImageCache[iconCacheKey];\n if (!iconImg) {\n const declutterMode = getDeclutterMode(layer, zoom, f, 'icon', functionCache);\n let displacement;\n if ('icon-offset' in layout) {\n displacement = getValue(layer, 'layout', 'icon-offset', zoom, f, functionCache, featureState).slice(0);\n displacement[0] *= iconSize;\n displacement[1] *= -iconSize;\n }\n let color = iconColor ? [\n iconColor.r * 255,\n iconColor.g * 255,\n iconColor.b * 255,\n iconColor.a\n ] : undefined;\n if (imageElement) {\n const iconOptions = {\n color: color,\n rotateWithView: iconRotationAlignment === 'map',\n displacement: displacement,\n declutterMode: declutterMode,\n scale: iconSize\n };\n if (typeof imageElement === 'string') {\n // it is a src URL\n iconOptions.src = imageElement;\n } else {\n iconOptions.img = imageElement;\n iconOptions.imgSize = [\n imageElement.width,\n imageElement.height\n ];\n }\n iconImg = new Icon(iconOptions);\n } else {\n const spriteImageData = spriteData[icon];\n let img, size, offset;\n if (haloWidth) {\n if (spriteImageData.sdf) {\n img = drawIconHalo(drawSDF(spriteImage, spriteImageData, iconColor || [\n 0,\n 0,\n 0,\n 1\n ]), {\n x: 0,\n y: 0,\n width: spriteImageData.width,\n height: spriteImageData.height,\n pixelRatio: spriteImageData.pixelRatio\n }, haloWidth, haloColor);\n color = undefined; // do not tint haloed icons\n } else {\n img = drawIconHalo(spriteImage, spriteImageData, haloWidth, haloColor);\n }\n } else {\n if (spriteImageData.sdf) {\n if (!spriteImageUnSDFed) {\n spriteImageUnSDFed = drawSDF(spriteImage, {\n x: 0,\n y: 0,\n width: spriteImageSize[0],\n height: spriteImageSize[1]\n }, {\n r: 1,\n g: 1,\n b: 1,\n a: 1\n });\n }\n img = spriteImageUnSDFed;\n } else {\n img = spriteImage;\n }\n size = [\n spriteImageData.width,\n spriteImageData.height\n ];\n offset = [\n spriteImageData.x,\n spriteImageData.y\n ];\n }\n iconImg = new Icon({\n color: color,\n img: img,\n // @ts-ignore\n imgSize: spriteImageSize,\n size: size,\n offset: offset,\n rotateWithView: iconRotationAlignment === 'map',\n scale: iconSize / spriteImageData.pixelRatio,\n displacement: displacement,\n declutterMode: declutterMode\n });\n }\n iconImageCache[iconCacheKey] = iconImg;\n }\n }\n if (iconImg) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getImage() || style.getFill() || style.getStroke()) {\n style = new Style();\n styles[stylesLength] = style;\n }\n style.setGeometry(styleGeom);\n iconImg.setRotation(placementAngle + deg2rad(getValue(layer, 'layout', 'icon-rotate', zoom, f, functionCache, featureState)));\n iconImg.setOpacity(getValue(layer, 'paint', 'icon-opacity', zoom, f, functionCache, featureState));\n iconImg.setAnchor(anchor[getValue(layer, 'layout', 'icon-anchor', zoom, f, functionCache, featureState)]);\n style.setImage(iconImg);\n text = style.getText();\n style.setText(undefined);\n style.setZIndex(index);\n hasImage = true;\n skipLabel = false;\n }\n } else {\n skipLabel = true;\n }\n }\n }\n }\n if (type == 1 && layer.type === 'circle') {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getImage() || style.getFill() || style.getStroke()) {\n style = new Style();\n styles[stylesLength] = style;\n }\n const circleRadius = 'circle-radius' in paint ? getValue(layer, 'paint', 'circle-radius', zoom, f, functionCache, featureState) : 5;\n const circleStrokeColor = colorWithOpacity(getValue(layer, 'paint', 'circle-stroke-color', zoom, f, functionCache, featureState), getValue(layer, 'paint', 'circle-stroke-opacity', zoom, f, functionCache, featureState));\n const circleTranslate = getValue(layer, 'paint', 'circle-translate', zoom, f, functionCache, featureState);\n const circleColor = colorWithOpacity(getValue(layer, 'paint', 'circle-color', zoom, f, functionCache, featureState), getValue(layer, 'paint', 'circle-opacity', zoom, f, functionCache, featureState));\n const circleStrokeWidth = getValue(layer, 'paint', 'circle-stroke-width', zoom, f, functionCache, featureState);\n const cache_key = circleRadius + '.' + circleStrokeColor + '.' + circleColor + '.' + circleStrokeWidth + '.' + circleTranslate[0] + '.' + circleTranslate[1];\n iconImg = iconImageCache[cache_key];\n if (!iconImg) {\n iconImg = new Circle({\n radius: circleRadius,\n displacement: [\n circleTranslate[0],\n -circleTranslate[1]\n ],\n stroke: circleStrokeColor && circleStrokeWidth > 0 ? new Stroke({\n width: circleStrokeWidth,\n color: circleStrokeColor\n }) : undefined,\n fill: circleColor ? new Fill({ color: circleColor }) : undefined,\n declutterMode: 'none'\n });\n iconImageCache[cache_key] = iconImg;\n }\n style.setImage(iconImg);\n text = style.getText();\n style.setText(undefined);\n style.setGeometry(undefined);\n style.setZIndex(index);\n hasImage = true;\n }\n let label, font, textLineHeight, textSize, letterSpacing, maxTextWidth;\n if ('text-field' in layout) {\n textSize = Math.round(getValue(layer, 'layout', 'text-size', zoom, f, functionCache, featureState));\n const fontArray = getValue(layer, 'layout', 'text-font', zoom, f, functionCache, featureState);\n textLineHeight = getValue(layer, 'layout', 'text-line-height', zoom, f, functionCache, featureState);\n font = mb2css(getFonts ? getFonts(fontArray, glStyle.metadata ? glStyle.metadata['ol:webfonts'] : undefined) : fontArray, textSize, textLineHeight);\n if (!font.includes('sans-serif')) {\n font += ',sans-serif';\n }\n letterSpacing = getValue(layer, 'layout', 'text-letter-spacing', zoom, f, functionCache, featureState);\n maxTextWidth = getValue(layer, 'layout', 'text-max-width', zoom, f, functionCache, featureState);\n const textField = getValue(layer, 'layout', 'text-field', zoom, f, functionCache, featureState);\n if (typeof textField === 'object' && textField.sections) {\n if (textField.sections.length === 1) {\n label = textField.toString();\n } else {\n label = textField.sections.reduce((acc, chunk, i) => {\n const fonts = chunk.fontStack ? chunk.fontStack.split(',') : fontArray;\n const chunkFont = mb2css(getFonts ? getFonts(fonts) : fonts, textSize * (chunk.scale || 1), textLineHeight);\n let text = chunk.text;\n if (text === '\\n') {\n acc.push('\\n', '');\n return acc;\n }\n if (type == 2) {\n acc.push(applyLetterSpacing(text, letterSpacing), chunkFont);\n return acc;\n }\n text = wrapText(text, chunkFont, maxTextWidth, letterSpacing).split('\\n');\n for (let i = 0, ii = text.length; i < ii; ++i) {\n if (i > 0) {\n acc.push('\\n', '');\n }\n acc.push(text[i], chunkFont);\n }\n return acc;\n }, []);\n }\n } else {\n label = fromTemplate(textField, properties).trim();\n }\n opacity = getValue(layer, 'paint', 'text-opacity', zoom, f, functionCache, featureState);\n }\n if (label && opacity && !skipLabel) {\n if (!hasImage) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getText() || style.getFill() || style.getStroke()) {\n style = new Style();\n styles[stylesLength] = style;\n }\n style.setImage(undefined);\n style.setGeometry(undefined);\n }\n const declutterMode = getDeclutterMode(layer, zoom, f, 'text', functionCache);\n if (!style.getText()) {\n style.setText(text);\n }\n text = style.getText();\n if (!text || 'getDeclutterMode' in text && text.getDeclutterMode() !== declutterMode) {\n text = new Text({\n padding: [\n 2,\n 2,\n 2,\n 2\n ],\n // @ts-ignore\n declutterMode: declutterMode\n });\n style.setText(text);\n }\n const textTransform = getValue(layer, 'layout', 'text-transform', zoom, f, functionCache, featureState);\n if (textTransform == 'uppercase') {\n label = Array.isArray(label) ? label.map((t, i) => i % 2 ? t : t.toUpperCase()) : label.toUpperCase();\n } else if (textTransform == 'lowercase') {\n label = Array.isArray(label) ? label.map((t, i) => i % 2 ? t : t.toLowerCase()) : label.toLowerCase();\n }\n const wrappedLabel = Array.isArray(label) ? label : type == 2 ? applyLetterSpacing(label, letterSpacing) : wrapText(label, font, maxTextWidth, letterSpacing);\n text.setText(wrappedLabel);\n text.setFont(font);\n text.setRotation(deg2rad(getValue(layer, 'layout', 'text-rotate', zoom, f, functionCache, featureState)));\n if (typeof text.setKeepUpright === 'function') {\n const keepUpright = getValue(layer, 'layout', 'text-keep-upright', zoom, f, functionCache, featureState);\n text.setKeepUpright(keepUpright);\n }\n const textAnchor = getValue(layer, 'layout', 'text-anchor', zoom, f, functionCache, featureState);\n const placement = hasImage || type == 1 ? 'point' : getValue(layer, 'layout', 'symbol-placement', zoom, f, functionCache, featureState);\n let textAlign;\n if (placement === 'line-center') {\n text.setPlacement('line');\n textAlign = 'center';\n } else {\n text.setPlacement(placement);\n }\n if (placement === 'line' && typeof text.setRepeat === 'function') {\n const symbolSpacing = getValue(layer, 'layout', 'symbol-spacing', zoom, f, functionCache, featureState);\n text.setRepeat(symbolSpacing * 2);\n }\n text.setOverflow(placement === 'point');\n let textHaloWidth = getValue(layer, 'paint', 'text-halo-width', zoom, f, functionCache, featureState);\n const textOffset = getValue(layer, 'layout', 'text-offset', zoom, f, functionCache, featureState);\n const textTranslate = getValue(layer, 'paint', 'text-translate', zoom, f, functionCache, featureState);\n // Text offset has to take halo width and line height into account\n let vOffset = 0;\n let hOffset = 0;\n if (placement == 'point') {\n textAlign = 'center';\n if (textAnchor.indexOf('left') !== -1) {\n textAlign = 'left';\n hOffset = textHaloWidth;\n } else if (textAnchor.indexOf('right') !== -1) {\n textAlign = 'right';\n hOffset = -textHaloWidth;\n }\n const textRotationAlignment = getValue(layer, 'layout', 'text-rotation-alignment', zoom, f, functionCache, featureState);\n text.setRotateWithView(textRotationAlignment == 'map');\n } else {\n text.setMaxAngle(deg2rad(getValue(layer, 'layout', 'text-max-angle', zoom, f, functionCache, featureState)) * label.length / wrappedLabel.length);\n text.setRotateWithView(false);\n }\n text.setTextAlign(textAlign);\n let textBaseline = 'middle';\n if (textAnchor.indexOf('bottom') == 0) {\n textBaseline = 'bottom';\n vOffset = -textHaloWidth - 0.5 * (textLineHeight - 1) * textSize;\n } else if (textAnchor.indexOf('top') == 0) {\n textBaseline = 'top';\n vOffset = textHaloWidth + 0.5 * (textLineHeight - 1) * textSize;\n }\n text.setTextBaseline(textBaseline);\n const textJustify = getValue(layer, 'layout', 'text-justify', zoom, f, functionCache, featureState);\n text.setJustify(textJustify === 'auto' ? undefined : textJustify);\n text.setOffsetX(textOffset[0] * textSize + hOffset + textTranslate[0]);\n text.setOffsetY(textOffset[1] * textSize + vOffset + textTranslate[1]);\n textColor.setColor(colorWithOpacity(getValue(layer, 'paint', 'text-color', zoom, f, functionCache, featureState), opacity));\n text.setFill(textColor);\n const haloColor = colorWithOpacity(getValue(layer, 'paint', 'text-halo-color', zoom, f, functionCache, featureState), opacity);\n if (haloColor && textHaloWidth > 0) {\n textHalo.setColor(haloColor);\n // spec here : https://docs.mapbox.com/mapbox-gl-js/style-spec/#paint-symbol-text-halo-width\n // Halo width must be doubled because it is applied around the center of the text outline\n textHaloWidth *= 2;\n // 1/4 of text size (spec) x 2\n const halfTextSize = 0.5 * textSize;\n textHalo.setWidth(textHaloWidth <= halfTextSize ? textHaloWidth : halfTextSize);\n text.setStroke(textHalo);\n } else {\n text.setStroke(undefined);\n }\n const textPadding = getValue(layer, 'layout', 'text-padding', zoom, f, functionCache, featureState);\n const padding = text.getPadding();\n if (textPadding !== padding[0]) {\n padding[0] = textPadding;\n padding[1] = textPadding;\n padding[2] = textPadding;\n padding[3] = textPadding;\n }\n style.setZIndex(index);\n }\n }\n }\n if (stylesLength > -1) {\n styles.length = stylesLength + 1;\n if (recordLayer) {\n if ('set' in feature) {\n // ol/Feature\n feature.set('mapbox-layer', featureBelongsToLayer);\n } else {\n // ol/render/Feature\n feature.getProperties()['mapbox-layer'] = featureBelongsToLayer;\n }\n }\n return styles;\n }\n return undefined;\n };\n olLayer.setStyle(styleFunction);\n olLayer.set('mapbox-source', mapboxSource);\n olLayer.set('mapbox-layers', mapboxLayers);\n olLayer.set('mapbox-featurestate', olLayer.get('mapbox-featurestate') || {});\n return styleFunction;\n}\n/**\n * Get the the style for a specific Mapbox layer only. This can be useful for creating a legend.\n * @param {import(\"ol/Feature\").default|import(\"ol/render/Feature\").default} feature OpenLayers feature.\n * @param {number} resolution View resolution.\n * @param {import(\"ol/layer\").Vector|import(\"ol/layer\").VectorTile} olLayer OpenLayers layer.\n * @param {string} layerId Id of the Mapbox layer to get the style for\n * @return {Array} Styles for the provided Mapbox layer.\n */\nfunction getStyleForLayer(feature, resolution, olLayer, layerId) {\n const evaluateStyle = olLayer.getStyleFunction();\n if (evaluateStyle.length === 3) {\n // @ts-ignore\n return evaluateStyle(feature, resolution, layerId);\n }\n return undefined;\n}\n\n/**\n * Generates a shaded relief image given elevation data. Uses a 3x3\n * neighborhood for determining slope and aspect.\n * @param {Array} inputs Array of input images.\n * @param {Object} data Data added in the \"beforeoperations\" event.\n * @return {ImageData} Output image.\n */\nfunction hillshade(inputs, data) {\n const elevationImage = inputs[0];\n const width = elevationImage.width;\n const height = elevationImage.height;\n const elevationData = elevationImage.data;\n const shadeData = new Uint8ClampedArray(elevationData.length);\n const dp = data.resolution * 2;\n const maxX = width - 1;\n const maxY = height - 1;\n const pixel = [\n 0,\n 0,\n 0,\n 0\n ];\n const twoPi = 2 * Math.PI;\n const halfPi = Math.PI / 2;\n const sunEl = Math.PI * data.sunEl / 180;\n const sunAz = Math.PI * data.sunAz / 180;\n const cosSunEl = Math.cos(sunEl);\n const sinSunEl = Math.sin(sunEl);\n const highlightColor = data.highlightColor;\n const shadowColor = data.shadowColor;\n const accentColor = data.accentColor;\n const encoding = data.encoding;\n let pixelX, pixelY, x0, x1, y0, y1, offset, z0, z1, dzdx, dzdy, slope, aspect, accent, scaled, shade, scaledAccentColor, compositeShadeColor, clamp, slopeScaleBase, scaledSlope, cosIncidence;\n function calculateElevation(pixel, encoding = 'mapbox') {\n // The method used to extract elevations from the DEM.\n //\n // The supported methods are the Mapbox format\n // (red * 256 * 256 + green * 256 + blue) * 0.1 - 10000\n // and the Terrarium format\n // (red * 256 + green + blue / 256) - 32768\n //\n if (encoding === 'mapbox') {\n return (pixel[0] * 256 * 256 + pixel[1] * 256 + pixel[2]) * 0.1 - 10000;\n }\n if (encoding === 'terrarium') {\n return pixel[0] * 256 + pixel[1] + pixel[2] / 256 - 32768;\n }\n }\n for (pixelY = 0; pixelY <= maxY; ++pixelY) {\n y0 = pixelY === 0 ? 0 : pixelY - 1;\n y1 = pixelY === maxY ? maxY : pixelY + 1;\n for (pixelX = 0; pixelX <= maxX; ++pixelX) {\n x0 = pixelX === 0 ? 0 : pixelX - 1;\n x1 = pixelX === maxX ? maxX : pixelX + 1;\n // determine elevation for (x0, pixelY)\n offset = (pixelY * width + x0) * 4;\n pixel[0] = elevationData[offset];\n pixel[1] = elevationData[offset + 1];\n pixel[2] = elevationData[offset + 2];\n pixel[3] = elevationData[offset + 3];\n z0 = data.vert * calculateElevation(pixel, encoding);\n // determine elevation for (x1, pixelY)\n offset = (pixelY * width + x1) * 4;\n pixel[0] = elevationData[offset];\n pixel[1] = elevationData[offset + 1];\n pixel[2] = elevationData[offset + 2];\n pixel[3] = elevationData[offset + 3];\n z1 = data.vert * calculateElevation(pixel, encoding);\n dzdx = (z1 - z0) / dp;\n // determine elevation for (pixelX, y0)\n offset = (y0 * width + pixelX) * 4;\n pixel[0] = elevationData[offset];\n pixel[1] = elevationData[offset + 1];\n pixel[2] = elevationData[offset + 2];\n pixel[3] = elevationData[offset + 3];\n z0 = data.vert * calculateElevation(pixel, encoding);\n // determine elevation for (pixelX, y1)\n offset = (y1 * width + pixelX) * 4;\n pixel[0] = elevationData[offset];\n pixel[1] = elevationData[offset + 1];\n pixel[2] = elevationData[offset + 2];\n pixel[3] = elevationData[offset + 3];\n z1 = data.vert * calculateElevation(pixel, encoding);\n dzdy = (z1 - z0) / dp;\n aspect = Math.atan2(dzdy, -dzdx);\n if (aspect < 0) {\n aspect = halfPi - aspect;\n } else if (aspect > halfPi) {\n aspect = twoPi - aspect + halfPi;\n } else {\n aspect = halfPi - aspect;\n }\n // Bootstrap slope and corresponding incident values\n slope = Math.atan(Math.sqrt(dzdx * dzdx + dzdy * dzdy));\n cosIncidence = sinSunEl * Math.cos(slope) + cosSunEl * Math.sin(slope) * Math.cos(sunAz - aspect);\n accent = Math.cos(slope);\n // 255 for Hex colors\n scaled = 255 * cosIncidence;\n /*\n * The following is heavily inspired\n * by [Maplibre's equivalent WebGL shader](https://github.com/maplibre/maplibre-gl-js/blob/main/src/shaders/hillshade.fragment.glsl)\n */\n // Forces given value to stay between two given extremes\n clamp = Math.min(Math.max(2 * data.sunEl, 0), 1);\n // Intensity basis for hillshade opacity\n slopeScaleBase = 1.875 - data.opacity * 1.75;\n // Intensity interpolation so that higher intensity values create more opaque hillshading\n scaledSlope = data.opacity !== 0.5 ? halfPi * ((Math.pow(slopeScaleBase, slope) - 1) / (Math.pow(slopeScaleBase, halfPi) - 1)) : slope;\n // Accent hillshade color with given accentColor to emphasize rougher terrain\n scaledAccentColor = {\n r: (1 - accent) * accentColor.r * clamp * 255,\n g: (1 - accent) * accentColor.g * clamp * 255,\n b: (1 - accent) * accentColor.b * clamp * 255,\n a: (1 - accent) * accentColor.a * clamp * 255\n };\n // Allows highlight vs shadow discrimination\n shade = Math.abs(((aspect + sunAz) / Math.PI + 0.5) % 2 - 1);\n // Creates a composite color mix between highlight & shadow colors to emphasize slopes\n compositeShadeColor = {\n r: (highlightColor.r * (1 - shade) + shadowColor.r * shade) * scaled,\n g: (highlightColor.g * (1 - shade) + shadowColor.g * shade) * scaled,\n b: (highlightColor.b * (1 - shade) + shadowColor.b * shade) * scaled,\n a: (highlightColor.a * (1 - shade) + shadowColor.a * shade) * scaled\n };\n // Fill in result color value\n offset = (pixelY * width + pixelX) * 4;\n shadeData[offset] = scaledAccentColor.r * (1 - shade) + compositeShadeColor.r;\n shadeData[offset + 1] = scaledAccentColor.g * (1 - shade) + compositeShadeColor.g;\n shadeData[offset + 2] = scaledAccentColor.b * (1 - shade) + compositeShadeColor.b;\n // Key opacity on the scaledSlope to improve legibility by increasing higher elevation rates' contrast\n shadeData[offset + 3] = elevationData[offset + 3] * data.opacity * clamp * Math.sin(scaledSlope);\n }\n }\n return new ImageData(shadeData, width, height);\n}\n\n/*\nol-mapbox-style - Use Mapbox/MapLibre Style objects with OpenLayers\nCopyright 2016-present ol-mapbox-style contributors\nLicense: https://raw.githubusercontent.com/openlayers/ol-mapbox-style/master/LICENSE\n*/\n/**\n * @typedef {Object} FeatureIdentifier\n * @property {string|number} id The feature id.\n * @property {string} source The source id.\n */\n/**\n * @typedef {Object} Options\n * @property {string} [accessToken] Access token for 'mapbox://' urls.\n * @property {function(string, import(\"./util.js\").ResourceType): (Request|string|Promise|void)} [transformRequest]\n * Function for controlling how `ol-mapbox-style` fetches resources. Can be used for modifying\n * the url, adding headers or setting credentials options. Called with the url and the resource\n * type as arguments, this function is supposed to return a `Request` or a url `string`, or a promise tehereof.\n * Without a return value the original request will not be modified.\n * @property {string} [projection='EPSG:3857'] Only useful when working with non-standard projections.\n * Code of a projection registered with OpenLayers. All sources of the style must be provided in this\n * projection. The projection must also have a valid extent defined, which will be used to determine the\n * origin and resolutions of the tile grid for all tiled sources of the style. When provided, the bbox\n * placeholder in tile and geojson urls changes: the default is `{bbox-epsg-3857}`, when projection is e.g.\n * set to `EPSG:4326`, the bbox placeholder will be `{bbox-epsg-4326}`.\n * @property {Array} [resolutions] Only useful when working with non-standard projections.\n * Resolutions for mapping resolution to the `zoom` used in the Mapbox/MapLibre style.\n * @property {string} [styleUrl] URL of the Mapbox GL style. Required for styles that were provided\n * as object, when they contain a relative sprite url, or sources referencing data by relative url.\n * @property {string} [webfonts] Template for resolving webfonts. Can be used to specify where to fetch\n * web fonts when no `ol:webfonts` metadata is set in the style object. See `getFonts()` and the\n * \"Font handling\" section in `README.md` for details.\n * @property {function(VectorLayer|VectorTileLayer, string):HTMLImageElement|HTMLCanvasElement|string|undefined} [getImage=undefined]\n * Function that returns an image for an icon name. If the result is an HTMLImageElement, it must already be\n * loaded. The layer can be used to call layer.changed() when the loading and processing of the image has finished.\n * This function be used for icons not in the sprite or to override sprite icons.\n * @property {string} [accessTokenParam='access_token'] Access token param. For internal use.\n */\n/**\n * @typedef {Object} ApplyStyleOptions\n * @property {string} [source=''] Source. Default is `''`, which causes the first source in the\n * style to be used.\n * @property {Array} [layers] Layers. If no source is provided, the layers with the\n * provided ids will be used from the style's `layers` array. All layers need to use the same source.\n * @property {boolean} [updateSource=true] Update or create vector (tile) layer source with parameters\n * specified for the source in the mapbox style definition.\n */\n/**\n * @param {import(\"ol/proj/Projection.js\").default} projection Projection.\n * @param {number} [tileSize=512] Tile size.\n * @return {Array} Resolutions.\n */\nfunction getTileResolutions(projection, tileSize = 512) {\n return projection.getExtent() ? createXYZ({\n extent: projection.getExtent(),\n tileSize: tileSize,\n maxZoom: 22\n }).getResolutions() : defaultResolutions;\n}\n/**\n * @param {string} styleUrl Style URL.\n * @param {Options} options Options.\n * @return {Options} Completed options with accessToken and accessTokenParam.\n */\nfunction completeOptions(styleUrl, options) {\n if (!options.accessToken) {\n options = Object.assign({}, options);\n const searchParams = new URL(styleUrl).searchParams;\n // The last search parameter is the access token\n searchParams.forEach((value, key) => {\n options.accessToken = value;\n options.accessTokenParam = key;\n });\n }\n return options;\n}\n/**\n * Applies a style function to an `ol/layer/VectorTile` or `ol/layer/Vector`\n * with an `ol/source/VectorTile` or an `ol/source/Vector`. If the layer does not have a source\n * yet, it will be created and populated from the information in the `glStyle` (unless `updateSource` is\n * set to `false`).\n *\n * **Example:**\n * ```js\n * import {applyStyle} from 'ol-mapbox-style';\n * import {VectorTile} from 'ol/layer.js';\n *\n * const layer = new VectorTile({declutter: true});\n * applyStyle(layer, 'https://api.maptiler.com/maps/basic/style.json?key=YOUR_OPENMAPTILES_TOKEN');\n * ```\n *\n * The style function will render all layers from the `glStyle` object that use the source\n * of the first layer, the specified `source`, or a subset of layers from the same source. The\n * source needs to be a `\"type\": \"vector\"` or `\"type\": \"geojson\"` source.\n *\n * Two additional properties will be set on the provided layer:\n *\n * * `mapbox-source`: The `id` of the Mapbox/MapLibre Style document's source that the\n * OpenLayers layer was created from. Usually `apply()` creates one\n * OpenLayers layer per Mapbox/MapLibre Style source, unless the layer stack has\n * layers from different sources in between.\n * * `mapbox-layers`: The `id`s of the Mapbox/MapLibre Style document's layers that are\n * included in the OpenLayers layer.\n *\n * @param {VectorTileLayer|VectorLayer} layer OpenLayers layer. When the layer has a source configured,\n * it will be modified to use the configuration from the glStyle's `source`. Options specified on the\n * layer's source will override those from the glStyle's `source`, except for `url` and\n * `tileUrlFunction`. When the source projection is the default (`EPSG:3857`), the `tileGrid` will\n * also be overridden. If you'd rather not have ol-mapbox-style modify the source, configure `applyStyle()`\n * with the `updateSource: false` option.\n * @param {string|Object} glStyle Mapbox/MapLibre Style object.\n * @param {string|Array|Options&ApplyStyleOptions} [sourceOrLayersOrOptions] Options or\n * `source` key or an array of layer `id`s from the Mapbox/MapLibre Style object. When a `source` key is\n * provided, all layers for the specified source will be included in the style function. When layer\n * `id`s are provided, they must be from layers that use the same source. When not provided or a falsey\n * value, all layers using the first source specified in the glStyle will be rendered.\n * @param {Options&ApplyStyleOptions|string} [optionsOrPath] **Deprecated**. Options. Alternatively the path of the style file\n * (only required when a relative path is used for the `\"sprite\"` property of the style).\n * @param {Array} [resolutions] **Deprecated**. Resolutions for mapping resolution to zoom level.\n * Only needed when working with non-standard tile grids or projections, can also be supplied with\n * options.\n * @return {Promise} Promise which will be resolved when the style can be used\n * for rendering.\n */\nfunction applyStyle(layer, glStyle, sourceOrLayersOrOptions = '', optionsOrPath = {}, resolutions = undefined) {\n let styleUrl, sourceId;\n /** @type {Options&ApplyStyleOptions} */\n let options;\n let sourceOrLayers;\n let updateSource = true;\n if (typeof sourceOrLayersOrOptions !== 'string' && !Array.isArray(sourceOrLayersOrOptions)) {\n options = sourceOrLayersOrOptions;\n sourceOrLayers = options.source || options.layers;\n optionsOrPath = options;\n } else {\n sourceOrLayers = sourceOrLayersOrOptions;\n }\n if (typeof optionsOrPath === 'string') {\n styleUrl = optionsOrPath;\n options = {};\n } else {\n styleUrl = optionsOrPath.styleUrl;\n options = optionsOrPath;\n }\n if (options.updateSource === false) {\n updateSource = false;\n }\n if (!resolutions) {\n resolutions = options.resolutions;\n }\n if (!styleUrl && typeof glStyle === 'string' && !glStyle.trim().startsWith('{')) {\n styleUrl = glStyle;\n }\n if (styleUrl) {\n styleUrl = styleUrl.startsWith('data:') ? location.href : normalizeStyleUrl(styleUrl, options.accessToken);\n options = completeOptions(styleUrl, options);\n }\n return new Promise(function (resolve, reject) {\n // TODO: figure out where best place to check source type is\n // Note that the source arg is an array of gl layer ids and each must be\n // dereferenced to get source type to validate\n getGlStyle(glStyle, options).then(function (glStyle) {\n if (glStyle.version != 8) {\n return reject(new Error('glStyle version 8 required.'));\n }\n if (!(layer instanceof VectorLayer || layer instanceof VectorTileLayer)) {\n return reject(new Error('Can only apply to VectorLayer or VectorTileLayer'));\n }\n const type = layer instanceof VectorTileLayer ? 'vector' : 'geojson';\n if (!sourceOrLayers) {\n sourceId = Object.keys(glStyle.sources).find(function (key) {\n return glStyle.sources[key].type === type;\n });\n sourceOrLayers = sourceId;\n } else if (Array.isArray(sourceOrLayers)) {\n sourceId = glStyle.layers.find(function (layer) {\n return layer.id === sourceOrLayers[0];\n }).source;\n } else {\n sourceId = sourceOrLayers;\n }\n if (!sourceId) {\n return reject(new Error(`No ${ type } source found in the glStyle.`));\n }\n function assignSource() {\n if (!updateSource) {\n return Promise.resolve();\n }\n if (layer instanceof VectorTileLayer) {\n return setupVectorSource(glStyle.sources[sourceId], styleUrl, options).then(function (source) {\n const targetSource = layer.getSource();\n if (!targetSource) {\n layer.setSource(source);\n } else if (source !== targetSource) {\n targetSource.setTileUrlFunction(source.getTileUrlFunction());\n if (typeof targetSource.setUrls === 'function' && typeof source.getUrls === 'function') {\n // to get correct keys for tile cache and queue\n targetSource.setUrls(source.getUrls());\n }\n //@ts-ignore\n if (!targetSource.format_) {\n //@ts-ignore\n targetSource.format_ = source.format_;\n }\n if (!targetSource.getAttributions()) {\n targetSource.setAttributions(source.getAttributions());\n }\n if (targetSource.getTileLoadFunction() === defaultLoadFunction) {\n targetSource.setTileLoadFunction(source.getTileLoadFunction());\n }\n if (equivalent(targetSource.getProjection(), source.getProjection())) {\n targetSource.tileGrid = source.getTileGrid();\n }\n }\n const tileGrid = layer.getSource().getTileGrid();\n if (!isFinite(layer.getMaxResolution()) && !isFinite(layer.getMinZoom()) && tileGrid.getMinZoom() > 0) {\n layer.setMaxResolution(getResolutionForZoom(Math.max(0, tileGrid.getMinZoom() - 1e-12), tileGrid.getResolutions()));\n }\n });\n }\n const glSource = glStyle.sources[sourceId];\n let source = layer.getSource();\n if (!source || source.get('mapbox-source') !== glSource) {\n source = setupGeoJSONSource(glSource, styleUrl, options);\n }\n const targetSource = layer.getSource();\n if (!targetSource) {\n layer.setSource(source);\n } else if (source !== targetSource) {\n if (!targetSource.getAttributions()) {\n targetSource.setAttributions(source.getAttributions());\n }\n //@ts-ignore\n if (!targetSource.format_) {\n //@ts-ignore\n targetSource.format_ = source.getFormat();\n }\n //@ts-ignore\n targetSource.url_ = source.getUrl();\n }\n return Promise.resolve();\n }\n let spriteScale, spriteData, spriteImageUrl, style;\n function onChange() {\n if (!style && (!glStyle.sprite || spriteData)) {\n if (options.projection && !resolutions) {\n const projection = get$1(options.projection);\n const units = projection.getUnits();\n if (units !== 'm') {\n resolutions = defaultResolutions.map(resolution => resolution / METERS_PER_UNIT[units]);\n }\n }\n style = stylefunction(layer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, (fonts, templateUrl = options.webfonts) => getFonts(fonts, templateUrl), options.getImage);\n if (!layer.getStyle()) {\n reject(new Error(`Nothing to show for source [${ sourceId }]`));\n } else {\n assignSource().then(resolve).catch(reject);\n }\n } else if (style) {\n layer.setStyle(style);\n assignSource().then(resolve).catch(reject);\n } else {\n reject(new Error('Something went wrong trying to apply style.'));\n }\n }\n if (glStyle.sprite) {\n const sprite = new URL(normalizeSpriteUrl(glStyle.sprite, options.accessToken, styleUrl || location.href));\n spriteScale = window.devicePixelRatio >= 1.5 ? 0.5 : 1;\n const sizeFactor = spriteScale == 0.5 ? '@2x' : '';\n let spriteUrl = sprite.origin + sprite.pathname + sizeFactor + '.json' + sprite.search;\n new Promise(function (resolve, reject) {\n fetchResource('Sprite', spriteUrl, options).then(resolve).catch(function (error) {\n spriteUrl = sprite.origin + sprite.pathname + '.json' + sprite.search;\n fetchResource('Sprite', spriteUrl, options).then(resolve).catch(reject);\n });\n }).then(function (spritesJson) {\n if (spritesJson === undefined) {\n reject(new Error('No sprites found.'));\n }\n spriteData = spritesJson;\n spriteImageUrl = sprite.origin + sprite.pathname + sizeFactor + '.png' + sprite.search;\n if (options.transformRequest) {\n const transformed = options.transformRequest(spriteImageUrl, 'SpriteImage') || spriteImageUrl;\n if (transformed instanceof Request || transformed instanceof Promise) {\n spriteImageUrl = transformed;\n }\n }\n onChange();\n }).catch(function (err) {\n reject(new Error(`Sprites cannot be loaded: ${ spriteUrl }: ${ err.message }`));\n });\n } else {\n onChange();\n }\n }).catch(reject);\n });\n}\nconst emptyObj = {};\nfunction setFirstBackground(mapOrLayer, glStyle, options) {\n glStyle.layers.some(function (layer) {\n if (layer.type === 'background') {\n if (mapOrLayer instanceof Layer) {\n mapOrLayer.setBackground(function (resolution) {\n return getBackgroundColor(layer, resolution, options, {});\n });\n return true;\n }\n if (mapOrLayer instanceof Map || mapOrLayer instanceof LayerGroup) {\n mapOrLayer.getLayers().insertAt(0, setupBackgroundLayer(layer, options, {}));\n return true;\n }\n }\n });\n}\n/**\n * Applies properties of the Mapbox/MapLibre Style's first `background` layer to the\n * provided map or layer (group).\n *\n * **Example:**\n * ```js\n * import {applyBackground} from 'ol-mapbox-style';\n * import {Map} from 'ol';\n *\n * const map = new Map({target: 'map'});\n * applyBackground(map, 'https://api.maptiler.com/maps/basic/style.json?key=YOUR_OPENMAPTILES_TOKEN');\n * ```\n * @param {Map|import(\"ol/layer/Base.js\").default} mapOrLayer OpenLayers Map or layer (group).\n * @param {Object|string} glStyle Mapbox/MapLibre Style object or url.\n * @param {Options} options Options.\n * @return {Promise} Promise that resolves when the background is applied.\n */\nfunction applyBackground(mapOrLayer, glStyle, options = {}) {\n return getGlStyle(glStyle, options).then(function (glStyle) {\n setFirstBackground(mapOrLayer, glStyle, options);\n });\n}\nfunction getSourceIdByRef(layers, ref) {\n let sourceId;\n layers.some(function (layer) {\n if (layer.id == ref) {\n sourceId = layer.source;\n return true;\n }\n });\n return sourceId;\n}\nfunction extentFromTileJSON(tileJSON, projection) {\n const bounds = tileJSON.bounds;\n if (bounds) {\n const ll = fromLonLat([\n bounds[0],\n bounds[1]\n ], projection);\n const tr = fromLonLat([\n bounds[2],\n bounds[3]\n ], projection);\n return [\n ll[0],\n ll[1],\n tr[0],\n tr[1]\n ];\n }\n return get$1(projection).getExtent();\n}\nfunction sourceOptionsFromTileJSON(glSource, tileJSON, options) {\n const tileJSONSource = new TileJSON({\n tileJSON: tileJSON,\n tileSize: glSource.tileSize || tileJSON.tileSize || 512\n });\n const tileJSONDoc = tileJSONSource.getTileJSON();\n const tileGrid = tileJSONSource.getTileGrid();\n const projection = get$1(options.projection || 'EPSG:3857');\n const extent = extentFromTileJSON(tileJSONDoc, projection);\n const projectionExtent = projection.getExtent();\n const minZoom = tileJSONDoc.minzoom || 0;\n const maxZoom = tileJSONDoc.maxzoom || 22;\n /** @type {import(\"ol/source/VectorTile.js\").Options} */\n const sourceOptions = {\n attributions: tileJSONSource.getAttributions(),\n projection: projection,\n tileGrid: new TileGrid({\n origin: projectionExtent ? getTopLeft(projectionExtent) : tileGrid.getOrigin(0),\n extent: extent || tileGrid.getExtent(),\n minZoom: minZoom,\n resolutions: getTileResolutions(projection, tileJSON.tileSize).slice(0, maxZoom + 1),\n tileSize: tileGrid.getTileSize(0)\n })\n };\n if (Array.isArray(tileJSONDoc.tiles)) {\n sourceOptions.urls = tileJSONDoc.tiles;\n } else {\n sourceOptions.url = tileJSONDoc.tiles;\n }\n return sourceOptions;\n}\nfunction getBackgroundColor(glLayer, resolution, options, functionCache) {\n const background = {\n id: glLayer.id,\n type: glLayer.type\n };\n const layout = glLayer.layout || {};\n const paint = glLayer.paint || {};\n background['paint'] = paint;\n const zoom = getZoomForResolution(resolution, options.resolutions || defaultResolutions);\n let opacity;\n const bg = getValue(background, 'paint', 'background-color', zoom, emptyObj, functionCache);\n if (paint['background-opacity'] !== undefined) {\n opacity = getValue(background, 'paint', 'background-opacity', zoom, emptyObj, functionCache);\n }\n return layout.visibility == 'none' ? undefined : colorWithOpacity(bg, opacity);\n}\n/**\n * @param {Object} glLayer Mapbox/MapLibre Style layer object.\n * @param {Options} options Options.\n * @param {Object} functionCache Cache for functions.\n * @return {Layer} OpenLayers layer.\n */\nfunction setupBackgroundLayer(glLayer, options, functionCache) {\n const div = document.createElement('div');\n div.className = 'ol-mapbox-style-background';\n div.style.position = 'absolute';\n div.style.width = '100%';\n div.style.height = '100%';\n return new Layer({\n source: new Source({}),\n render(frameState) {\n const color = getBackgroundColor(glLayer, frameState.viewState.resolution, options, functionCache);\n div.style.backgroundColor = color;\n return div;\n }\n });\n}\n/**\n * Creates an OpenLayers VectorTile source for a gl source entry.\n * @param {Object} glSource \"source\" entry from a Mapbox/MapLibre Style object.\n * @param {string|undefined} styleUrl URL to use for the source. This is expected to be the complete http(s) url,\n * with access key applied.\n * @param {Options} options Options.\n * @return {Promise} Promise resolving to a VectorTile source.\n * @private\n */\nfunction setupVectorSource(glSource, styleUrl, options) {\n return new Promise(function (resolve, reject) {\n getTileJson(glSource, styleUrl, options).then(function ({tileJson, tileLoadFunction}) {\n const sourceOptions = sourceOptionsFromTileJSON(glSource, tileJson, options);\n sourceOptions.tileLoadFunction = tileLoadFunction;\n sourceOptions.format = new MVT();\n resolve(new VectorTileSource(sourceOptions));\n }).catch(reject);\n });\n}\nfunction setupVectorLayer(glSource, styleUrl, options) {\n const layer = new VectorTileLayer({\n declutter: true,\n visible: false\n });\n setupVectorSource(glSource, styleUrl, options).then(function (source) {\n source.set('mapbox-source', glSource);\n layer.setSource(source);\n }).catch(function (error) {\n layer.setSource(undefined);\n });\n return layer;\n}\nfunction getBboxTemplate(projection) {\n const projCode = projection ? projection.getCode() : 'EPSG:3857';\n return `{bbox-${ projCode.toLowerCase().replace(/[^a-z0-9]/g, '-') }}`;\n}\nfunction setupRasterSource(glSource, styleUrl, options) {\n return new Promise(function (resolve, reject) {\n getTileJson(glSource, styleUrl, options).then(function ({tileJson, tileLoadFunction}) {\n const source = new TileJSON({\n interpolate: options.interpolate === undefined ? true : options.interpolate,\n transition: 0,\n crossOrigin: 'anonymous',\n tileJSON: tileJson\n });\n source.tileGrid = sourceOptionsFromTileJSON(glSource, tileJson, options).tileGrid;\n if (options.projection) {\n //@ts-ignore\n source.projection = get$1(options.projection);\n }\n const getTileUrl = source.getTileUrlFunction();\n if (tileLoadFunction) {\n source.setTileLoadFunction(tileLoadFunction);\n }\n source.setTileUrlFunction(function (tileCoord, pixelRatio, projection) {\n const bboxTemplate = getBboxTemplate(projection);\n let src = getTileUrl(tileCoord, pixelRatio, projection);\n if (src.indexOf(bboxTemplate) != -1) {\n const bbox = source.getTileGrid().getTileCoordExtent(tileCoord);\n src = src.replace(bboxTemplate, bbox.toString());\n }\n return src;\n });\n source.set('mapbox-source', glSource);\n resolve(source);\n }).catch(function (error) {\n reject(error);\n });\n });\n}\nfunction setupRasterLayer(glSource, styleUrl, options) {\n const layer = new TileLayer();\n setupRasterSource(glSource, styleUrl, options).then(function (source) {\n layer.setSource(source);\n }).catch(function () {\n layer.setSource(undefined);\n });\n return layer;\n}\n/**\n *\n * @param {Object} glSource \"source\" entry from a Mapbox/MapLibre Style object.\n * @param {string} styleUrl Style url\n * @param {Options} options ol-mapbox-style options.\n * @return {ImageLayer} The raster layer\n */\nfunction setupHillshadeLayer(glSource, styleUrl, options) {\n const tileLayer = setupRasterLayer(glSource, styleUrl, options);\n /** @type {ImageLayer} */\n const layer = new ImageLayer({\n source: new Raster({\n operationType: 'image',\n operation: hillshade,\n sources: [tileLayer]\n })\n });\n return layer;\n}\n/**\n * @param {Object} glSource glStyle source.\n * @param {string} styleUrl Style URL.\n * @param {Options} options Options.\n * @return {VectorSource} Configured vector source.\n */\nfunction setupGeoJSONSource(glSource, styleUrl, options) {\n const geoJsonFormat = options.projection ? new GeoJSON({ dataProjection: options.projection }) : new GeoJSON();\n const data = glSource.data;\n const sourceOptions = {};\n if (typeof data == 'string') {\n const [geoJsonUrl] = normalizeSourceUrl(data, options.accessToken, options.accessTokenParam || 'access_token', styleUrl || location.href);\n if (/\\{bbox-[0-9a-z-]+\\}/.test(geoJsonUrl)) {\n const extentUrl = (extent, resolution, projection) => {\n const bboxTemplate = getBboxTemplate(projection);\n return geoJsonUrl.replace(bboxTemplate, `${ extent.join(',') }`);\n };\n const source = new VectorSource({\n attributions: glSource.attribution,\n format: geoJsonFormat,\n loader: (extent, resolution, projection, success, failure) => {\n const url = typeof extentUrl === 'function' ? extentUrl(extent, resolution, projection) : extentUrl;\n fetchResource('GeoJSON', url, options).then(json => {\n const features = source.getFormat().readFeatures(json, { featureProjection: projection });\n source.addFeatures(features);\n success(features);\n }).catch(response => {\n source.removeLoadedExtent(extent);\n failure();\n });\n },\n strategy: bbox\n });\n source.set('mapbox-source', glSource);\n return source;\n }\n const source = new VectorSource({\n attributions: glSource.attribution,\n format: geoJsonFormat,\n url: geoJsonUrl,\n loader: (extent, resolution, projection, success, failure) => {\n fetchResource('GeoJSON', geoJsonUrl, options).then(json => {\n const features = source.getFormat().readFeatures(json, { featureProjection: projection });\n source.addFeatures(features);\n success(features);\n }).catch(response => {\n source.removeLoadedExtent(extent);\n failure();\n });\n }\n });\n return source;\n }\n sourceOptions.features = geoJsonFormat.readFeatures(data, { featureProjection: getUserProjection() || 'EPSG:3857' });\n const source = new VectorSource(Object.assign({\n attributions: glSource.attribution,\n format: geoJsonFormat\n }, sourceOptions));\n source.set('mapbox-source', glSource);\n return source;\n}\nfunction setupGeoJSONLayer(glSource, styleUrl, options) {\n return new VectorLayer({\n declutter: true,\n source: setupGeoJSONSource(glSource, styleUrl, options),\n visible: false\n });\n}\nfunction prerenderRasterLayer(glLayer, layer, functionCache) {\n let zoom = null;\n return function (event) {\n if (glLayer.paint && 'raster-opacity' in glLayer.paint && event.frameState.viewState.zoom !== zoom) {\n zoom = event.frameState.viewState.zoom;\n delete functionCache[glLayer.id];\n updateRasterLayerProperties(glLayer, layer, zoom, functionCache);\n }\n };\n}\nfunction updateRasterLayerProperties(glLayer, layer, zoom, functionCache) {\n const opacity = getValue(glLayer, 'paint', 'raster-opacity', zoom, emptyObj, functionCache);\n layer.setOpacity(opacity);\n}\nfunction manageVisibility(layer, mapOrGroup) {\n function onChange() {\n const glStyle = mapOrGroup.get('mapbox-style');\n if (!glStyle) {\n return;\n }\n const mapboxLayers = derefLayers(glStyle.layers);\n const layerMapboxLayerids = layer.get('mapbox-layers');\n const visible = mapboxLayers.filter(function (mapboxLayer) {\n return layerMapboxLayerids.includes(mapboxLayer.id);\n }).some(function (mapboxLayer) {\n return !mapboxLayer.layout || !mapboxLayer.layout.visibility || mapboxLayer.layout.visibility === 'visible';\n });\n if (layer.get('visible') !== visible) {\n layer.setVisible(visible);\n }\n }\n layer.on('change', onChange);\n onChange();\n}\nfunction setupLayer(glStyle, styleUrl, glLayer, options) {\n const functionCache = getFunctionCache(glStyle);\n const glLayers = glStyle.layers;\n const type = glLayer.type;\n const id = glLayer.source || getSourceIdByRef(glLayers, glLayer.ref);\n const glSource = glStyle.sources[id];\n let layer;\n if (type == 'background') {\n layer = setupBackgroundLayer(glLayer, options, functionCache);\n } else if (glSource.type == 'vector') {\n layer = setupVectorLayer(glSource, styleUrl, options);\n } else if (glSource.type == 'raster') {\n layer = setupRasterLayer(glSource, styleUrl, options);\n layer.setVisible(glLayer.layout ? glLayer.layout.visibility !== 'none' : true);\n layer.on('prerender', prerenderRasterLayer(glLayer, layer, functionCache));\n } else if (glSource.type == 'geojson') {\n layer = setupGeoJSONLayer(glSource, styleUrl, options);\n } else if (glSource.type == 'raster-dem' && glLayer.type == 'hillshade') {\n const hillshadeLayer = setupHillshadeLayer(glSource, styleUrl, options);\n layer = hillshadeLayer;\n hillshadeLayer.getSource().on('beforeoperations', function (event) {\n const data = event.data;\n data.resolution = getPointResolution(options.projection || 'EPSG:3857', event.resolution, getCenter(event.extent), 'm');\n const zoom = getZoomForResolution(event.resolution, options.resolutions || defaultResolutions);\n data.encoding = glSource.encoding;\n data.vert = 5 * getValue(glLayer, 'paint', 'hillshade-exaggeration', zoom, emptyObj, functionCache);\n data.sunAz = getValue(glLayer, 'paint', 'hillshade-illumination-direction', zoom, emptyObj, functionCache);\n data.sunEl = 35;\n data.opacity = 0.3;\n data.highlightColor = getValue(glLayer, 'paint', 'hillshade-highlight-color', zoom, emptyObj, functionCache);\n data.shadowColor = getValue(glLayer, 'paint', 'hillshade-shadow-color', zoom, emptyObj, functionCache);\n data.accentColor = getValue(glLayer, 'paint', 'hillshade-accent-color', zoom, emptyObj, functionCache);\n });\n layer.setVisible(glLayer.layout ? glLayer.layout.visibility !== 'none' : true);\n }\n const glSourceId = id;\n if (layer) {\n layer.set('mapbox-source', glSourceId);\n }\n return layer;\n}\n/**\n * @param {*} glStyle Mapbox/MapLibre Style.\n * @param {Map|LayerGroup} mapOrGroup Map or layer group.\n * @param {string} styleUrl Style URL.\n * @param {Options} options Options.\n * @return {Promise} Promise that resolves when the style is loaded.\n */\nfunction processStyle(glStyle, mapOrGroup, styleUrl, options) {\n const promises = [];\n let view = null;\n if (mapOrGroup instanceof Map) {\n view = mapOrGroup.getView();\n if (!view.isDef() && !view.getRotation() && !view.getResolutions()) {\n const projection = options.projection ? get$1(options.projection) : view.getProjection();\n view = new View(Object.assign(view.getProperties(), {\n maxResolution: defaultResolutions[0] / METERS_PER_UNIT[projection.getUnits()],\n projection: options.projection || view.getProjection()\n }));\n mapOrGroup.setView(view);\n }\n if ('center' in glStyle && !view.getCenter()) {\n view.setCenter(fromLonLat(glStyle.center, view.getProjection()));\n }\n if ('zoom' in glStyle && view.getZoom() === undefined) {\n view.setResolution(defaultResolutions[0] / METERS_PER_UNIT[view.getProjection().getUnits()] / Math.pow(2, glStyle.zoom));\n }\n if (!view.getCenter() || view.getZoom() === undefined) {\n view.fit(view.getProjection().getExtent(), {\n nearest: true,\n size: mapOrGroup.getSize()\n });\n }\n }\n mapOrGroup.set('mapbox-style', glStyle);\n mapOrGroup.set('mapbox-metadata', {\n styleUrl,\n options\n });\n const glLayers = glStyle.layers;\n let layerIds = [];\n let layer, glSourceId, id;\n for (let i = 0, ii = glLayers.length; i < ii; ++i) {\n const glLayer = glLayers[i];\n const type = glLayer.type;\n if (type == 'heatmap') {\n //FIXME Unsupported layer type\n // eslint-disable-next-line no-console\n console.debug(`layers[${ i }].type \"${ type }\" not supported`);\n continue;\n } else {\n id = glLayer.source || getSourceIdByRef(glLayers, glLayer.ref);\n // this technique assumes gl layers will be in a particular order\n if (!id || id != glSourceId) {\n if (layerIds.length) {\n promises.push(finalizeLayer(layer, layerIds, glStyle, styleUrl, mapOrGroup, options));\n layerIds = [];\n }\n layer = setupLayer(glStyle, styleUrl, glLayer, options);\n if (!(layer instanceof VectorLayer || layer instanceof VectorTileLayer)) {\n layerIds = [];\n }\n glSourceId = layer.get('mapbox-source');\n }\n layerIds.push(glLayer.id);\n }\n }\n promises.push(finalizeLayer(layer, layerIds, glStyle, styleUrl, mapOrGroup, options));\n return Promise.all(promises);\n}\n/**\n * Loads and applies a Mapbox/MapLibre Style object into an OpenLayers Map or LayerGroup.\n * This includes the map background, the layers, and for Map instances that did not\n * have a View defined yet also the center and the zoom.\n *\n * **Example:**\n * ```js\n * import apply from 'ol-mapbox-style';\n *\n * apply('map', 'mapbox://styles/mapbox/bright-v9', {accessToken: 'YOUR_MAPBOX_TOKEN'});\n * ```\n *\n * The center and zoom will only be set if present in the Mapbox/MapLibre Style document,\n * and if not already set on the OpenLayers map.\n *\n * Layers will be added to the OpenLayers map, without affecting any layers that\n * might already be set on the map.\n *\n * Layers added by `apply()` will have two additional properties:\n *\n * * `mapbox-source`: The `id` of the Mapbox/MapLibre Style document's source that the\n * OpenLayers layer was created from. Usually `apply()` creates one\n * OpenLayers layer per Mapbox/MapLibre Style source, unless the layer stack has\n * layers from different sources in between.\n * * `mapbox-layers`: The `id`s of the Mapbox/MapLibre Style document's layers that are\n * included in the OpenLayers layer.\n *\n * This function sets an additional `mapbox-style` property on the OpenLayers\n * Map or LayerGroup instance, which holds the Mapbox/MapLibre Style object.\n *\n * @param {Map|HTMLElement|string|LayerGroup} mapOrGroupOrElement Either an existing\n * OpenLayers Map instance, or a HTML element, or the id of a HTML element that will be\n * the target of a new OpenLayers Map, or a layer group. If layer group, styles\n * releated to the map and view will be ignored.\n * @param {string|Object} style JSON style object or style url pointing to a\n * Mapbox/MapLibre Style object. When using Mapbox APIs, the url is the `styleUrl`\n * shown in Mapbox Studio's \"share\" panel. In addition, the `accessToken` option\n * (see below) must be set.\n * When passed as JSON style object, all OpenLayers layers created by `apply()`\n * will be immediately available, but they may not have a source yet (i.e. when\n * they are defined by a TileJSON url in the Mapbox/MapLibre Style document). When passed\n * as style url, layers will be added to the map when the Mapbox/MapLibre Style document\n * is loaded and parsed.\n * @param {Options} options Options.\n * @return {Promise} A promise that resolves after all layers have been added to\n * the OpenLayers Map instance or LayerGroup, their sources set, and their styles applied. The\n * `resolve` callback will be called with the OpenLayers Map instance or LayerGroup as\n * argument.\n */\nfunction apply(mapOrGroupOrElement, style, options = {}) {\n let promise;\n /** @type {Map|LayerGroup} */\n let mapOrGroup;\n if (typeof mapOrGroupOrElement === 'string' || mapOrGroupOrElement instanceof HTMLElement) {\n mapOrGroup = new Map({ target: mapOrGroupOrElement });\n } else {\n mapOrGroup = mapOrGroupOrElement;\n }\n if (typeof style === 'string') {\n const styleUrl = style.startsWith('data:') ? location.href : normalizeStyleUrl(style, options.accessToken);\n options = completeOptions(styleUrl, options);\n promise = new Promise(function (resolve, reject) {\n getGlStyle(style, options).then(function (glStyle) {\n processStyle(glStyle, mapOrGroup, styleUrl, options).then(function () {\n resolve(mapOrGroup);\n }).catch(reject);\n }).catch(function (err) {\n reject(new Error(`Could not load ${ style }: ${ err.message }`));\n });\n });\n } else {\n promise = new Promise(function (resolve, reject) {\n processStyle(style, mapOrGroup, !options.styleUrl || options.styleUrl.startsWith('data:') ? location.href : normalizeStyleUrl(options.styleUrl, options.accessToken), options).then(function () {\n resolve(mapOrGroup);\n }).catch(reject);\n });\n }\n return promise;\n}\n/**\n * If layerIds is not empty, applies the style specified in glStyle to the layer,\n * and adds the layer to the map.\n *\n * The layer may not yet have a source when the function is called. If so, the style\n * is applied to the layer via a once listener on the 'change:source' event.\n *\n * @param {Layer} layer An OpenLayers layer instance.\n * @param {Array} layerIds Array containing layer ids of already-processed layers.\n * @param {Object} glStyle Style as a JSON object.\n * @param {string|undefined} styleUrl The original style URL. Only required\n * when a relative path is used with the `\"sprite\"` property of the style.\n * @param {Map|LayerGroup} mapOrGroup OpenLayers Map.\n * @param {Options} options Options.\n * @return {Promise} Returns a promise that resolves after the source has\n * been set on the specified layer, and the style has been applied.\n */\nfunction finalizeLayer(layer, layerIds, glStyle, styleUrl, mapOrGroup, options = {}) {\n let minZoom = 24;\n let maxZoom = 0;\n const glLayers = glStyle.layers;\n for (let i = 0, ii = glLayers.length; i < ii; ++i) {\n const glLayer = glLayers[i];\n if (layerIds.indexOf(glLayer.id) !== -1) {\n minZoom = Math.min('minzoom' in glLayer ? glLayer.minzoom : 0, minZoom);\n maxZoom = Math.max('maxzoom' in glLayer ? glLayer.maxzoom : 24, maxZoom);\n }\n }\n return new Promise(function (resolve, reject) {\n const setStyle = function () {\n const source = layer.getSource();\n if (!source || source.getState() === 'error') {\n reject(new Error('Error accessing data for source ' + layer.get('mapbox-source')));\n return;\n }\n if ('getTileGrid' in source) {\n const tileGrid = /** @type {import(\"ol/source/Tile.js\").default|import(\"ol/source/VectorTile.js\").default} */\n source.getTileGrid();\n if (tileGrid) {\n const sourceMinZoom = tileGrid.getMinZoom();\n if (minZoom > 0 || sourceMinZoom > 0) {\n layer.setMaxResolution(Math.min(getResolutionForZoom(Math.max(0, minZoom - 1e-12), defaultResolutions), getResolutionForZoom(Math.max(0, sourceMinZoom - 1e-12), tileGrid.getResolutions())));\n }\n if (maxZoom < 24) {\n layer.setMinResolution(getResolutionForZoom(maxZoom, defaultResolutions));\n }\n }\n } else {\n if (minZoom > 0) {\n layer.setMaxResolution(getResolutionForZoom(Math.max(0, minZoom - 1e-12), defaultResolutions));\n }\n }\n if (source instanceof VectorSource || source instanceof VectorTileSource) {\n applyStyle(layer, glStyle, layerIds, Object.assign({ styleUrl: styleUrl }, options)).then(function () {\n manageVisibility(layer, mapOrGroup);\n resolve();\n }).catch(reject);\n } else {\n resolve();\n }\n };\n layer.set('mapbox-layers', layerIds);\n const layers = mapOrGroup.getLayers();\n if (layers.getArray().indexOf(layer) === -1) {\n layers.push(layer);\n }\n if (layer.getSource()) {\n setStyle();\n } else {\n layer.once('change:source', setStyle);\n }\n });\n}\n/**\n * Get the Mapbox Layer object for the provided `layerId`.\n * @param {Map|LayerGroup} mapOrGroup Map or LayerGroup.\n * @param {string} layerId Mapbox Layer id.\n * @return {Object} Mapbox Layer object.\n */\nfunction getMapboxLayer(mapOrGroup, layerId) {\n const style = mapOrGroup.get('mapbox-style');\n const layerStyle = style.layers.find(function (layer) {\n return layer.id === layerId;\n });\n return layerStyle;\n}\n/**\n * Add a new Mapbox Layer object to the style. The map will be re-rendered.\n * @param {Map|LayerGroup} mapOrGroup The Map or LayerGroup `apply` was called on.\n * @param {Object} mapboxLayer Mapbox Layer object.\n * @param {string} [beforeLayerId] Optional id of the Mapbox Layer before the new layer that will be added.\n * @return {Promise} Resolves when the added layer is available.\n */\nfunction addMapboxLayer(mapOrGroup, mapboxLayer, beforeLayerId) {\n const glStyle = mapOrGroup.get('mapbox-style');\n const mapboxLayers = glStyle.layers;\n let spliceIndex;\n let sourceIndex = -1;\n if (beforeLayerId !== undefined) {\n const beforeMapboxLayer = getMapboxLayer(mapOrGroup, beforeLayerId);\n if (beforeMapboxLayer === undefined) {\n throw new Error(`Layer with id \"${ beforeLayerId }\" not found.`);\n }\n spliceIndex = mapboxLayers.indexOf(beforeMapboxLayer);\n } else {\n spliceIndex = mapboxLayers.length;\n }\n let sourceOffset;\n if (spliceIndex > 0 && mapboxLayers[spliceIndex - 1].source === mapboxLayer.source) {\n sourceIndex = spliceIndex - 1;\n sourceOffset = -1;\n } else if (spliceIndex < mapboxLayers.length && mapboxLayers[spliceIndex].source === mapboxLayer.source) {\n sourceIndex = spliceIndex;\n sourceOffset = 0;\n }\n if (sourceIndex === -1) {\n const {options, styleUrl} = mapOrGroup.get('mapbox-metadata');\n const layer = setupLayer(glStyle, styleUrl, mapboxLayer, options);\n if (beforeLayerId) {\n const beforeLayer = getLayer(mapOrGroup, beforeLayerId);\n const beforeLayerIndex = mapOrGroup.getLayers().getArray().indexOf(beforeLayer);\n mapOrGroup.getLayers().insertAt(beforeLayerIndex, layer);\n }\n mapboxLayers.splice(spliceIndex, 0, mapboxLayer);\n return finalizeLayer(layer, [mapboxLayer.id], glStyle, styleUrl, mapOrGroup, options);\n }\n if (mapboxLayers.some(layer => layer.id === mapboxLayer.id)) {\n throw new Error(`Layer with id \"${ mapboxLayer.id }\" already exists.`);\n }\n const sourceLayerId = mapboxLayers[sourceIndex].id;\n const args = styleFunctionArgs[getStyleFunctionKey(mapOrGroup.get('mapbox-style'), getLayer(mapOrGroup, sourceLayerId))];\n mapboxLayers.splice(spliceIndex, 0, mapboxLayer);\n if (args) {\n const [olLayer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, getFonts, getImage] = args;\n if (Array.isArray(sourceOrLayers)) {\n const layerIndex = sourceOrLayers.indexOf(sourceLayerId) + sourceOffset;\n sourceOrLayers.splice(layerIndex, 0, mapboxLayer.id);\n }\n stylefunction(olLayer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, getFonts, getImage);\n } else {\n getLayer(mapOrGroup, mapboxLayers[sourceIndex].id).changed();\n }\n return Promise.resolve();\n}\n/**\n * Update a Mapbox Layer object in the style. The map will be re-rendered with the new style.\n * @param {Map|LayerGroup} mapOrGroup The Map or LayerGroup `apply` was called on.\n * @param {Object} mapboxLayer Updated Mapbox Layer object.\n */\nfunction updateMapboxLayer(mapOrGroup, mapboxLayer) {\n const glStyle = mapOrGroup.get('mapbox-style');\n const mapboxLayers = glStyle.layers;\n const index = mapboxLayers.findIndex(function (layer) {\n return layer.id === mapboxLayer.id;\n });\n if (index === -1) {\n throw new Error(`Layer with id \"${ mapboxLayer.id }\" not found.`);\n }\n const oldLayer = mapboxLayers[index];\n if (oldLayer.source !== mapboxLayer.source) {\n throw new Error('Updated layer and previous version must use the same source.');\n }\n delete getFunctionCache(glStyle)[mapboxLayer.id];\n delete getFilterCache(glStyle)[mapboxLayer.id];\n mapboxLayers[index] = mapboxLayer;\n const args = styleFunctionArgs[getStyleFunctionKey(mapOrGroup.get('mapbox-style'), getLayer(mapOrGroup, mapboxLayer.id))];\n if (args) {\n stylefunction.apply(undefined, args);\n } else {\n getLayer(mapOrGroup, mapboxLayer.id).changed();\n }\n}\n/**\n * Updates a Mapbox source object in the style. The according OpenLayers source will be replaced\n * and the map will be re-rendered.\n * @param {Map|LayerGroup} mapOrGroup The Map or LayerGroup `apply` was called on.\n * @param {string} id Key of the source in the `sources` object literal.\n * @param {Object} mapboxSource Mapbox source object.\n * @return {Promise} Promise that resolves when the source has been updated.\n */\nfunction updateMapboxSource(mapOrGroup, id, mapboxSource) {\n const currentSource = getSource(mapOrGroup, id);\n const layers = mapOrGroup.getLayers().getArray().filter(function (layer) {\n return (layer instanceof VectorLayer || layer instanceof TileLayer || layer instanceof VectorTileLayer) && layer.getSource() === currentSource;\n });\n const metadata = mapOrGroup.get('mapbox-metadata');\n let newSourcePromise;\n switch (mapboxSource.type) {\n case 'vector':\n newSourcePromise = setupVectorSource(mapboxSource, metadata.styleUrl, metadata.options);\n break;\n case 'geojson':\n newSourcePromise = Promise.resolve(setupGeoJSONSource(mapboxSource, metadata.styleUrl, metadata.options));\n break;\n case 'raster':\n case 'raster-dem':\n newSourcePromise = setupRasterSource(mapboxSource, metadata.styleUrl, metadata.options);\n break;\n default:\n return Promise.reject(new Error('Unsupported source type ' + mapboxSource.type));\n }\n newSourcePromise.then(function (newSource) {\n layers.forEach(function (layer) {\n layer.setSource(newSource);\n });\n });\n return newSourcePromise;\n}\n/**\n * Remove a Mapbox Layer object from the style. The map will be re-rendered.\n * @param {Map|LayerGroup} mapOrGroup The Map or LayerGroup `apply` was called on.\n * @param {string|Object} mapboxLayerIdOrLayer Mapbox Layer id or Mapbox Layer object.\n */\nfunction removeMapboxLayer(mapOrGroup, mapboxLayerIdOrLayer) {\n const mapboxLayerId = typeof mapboxLayerIdOrLayer === 'string' ? mapboxLayerIdOrLayer : mapboxLayerIdOrLayer.id;\n const layer = getLayer(mapOrGroup, mapboxLayerId);\n /** @type {Array} */\n const layerMapboxLayers = layer.get('mapbox-layers');\n if (layerMapboxLayers.length === 1) {\n throw new Error('Cannot remove last Mapbox layer from an OpenLayers layer.');\n }\n layerMapboxLayers.splice(layerMapboxLayers.indexOf(mapboxLayerId), 1);\n const glStyle = mapOrGroup.get('mapbox-style');\n const layers = glStyle.layers;\n layers.splice(layers.findIndex(layer => layer.id === mapboxLayerId), 1);\n const args = styleFunctionArgs[getStyleFunctionKey(glStyle, layer)];\n if (args) {\n const [olLayer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, getFonts, getImage] = args;\n if (Array.isArray(sourceOrLayers)) {\n sourceOrLayers.splice(sourceOrLayers.findIndex(layer => layer === mapboxLayerId), 1);\n }\n stylefunction(olLayer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, getFonts, getImage);\n } else {\n getLayer(mapOrGroup, mapboxLayerId).changed();\n }\n}\n/**\n * Get the OpenLayers layer instance that contains the provided Mapbox/MapLibre Style\n * `layer`. Note that multiple Mapbox/MapLibre Style layers are combined in a single\n * OpenLayers layer instance when they use the same Mapbox/MapLibre Style `source`.\n * @param {Map|LayerGroup} map OpenLayers Map or LayerGroup.\n * @param {string} layerId Mapbox/MapLibre Style layer id.\n * @return {Layer} OpenLayers layer instance.\n */\nfunction getLayer(map, layerId) {\n const layers = map.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const mapboxLayers = layers[i].get('mapbox-layers');\n if (mapboxLayers && mapboxLayers.indexOf(layerId) !== -1) {\n return layers[i];\n }\n }\n return undefined;\n}\n/**\n * Get the OpenLayers layer instances for the provided Mapbox/MapLibre Style `source`.\n * @param {Map|LayerGroup} map OpenLayers Map or LayerGroup.\n * @param {string} sourceId Mapbox/MapLibre Style source id.\n * @return {Array} OpenLayers layer instances.\n */\nfunction getLayers(map, sourceId) {\n const result = [];\n const layers = map.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n if (layers[i].get('mapbox-source') === sourceId) {\n result.push(layers[i]);\n }\n }\n return result;\n}\n/**\n * Get the OpenLayers source instance for the provided Mapbox/MapLibre Style `source`.\n * @param {Map|LayerGroup} map OpenLayers Map or LayerGroup.\n * @param {string} sourceId Mapbox/MapLibre Style source id.\n * @return {Source} OpenLayers source instance.\n */\nfunction getSource(map, sourceId) {\n const layers = map.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const source = /** @type {Layer} */\n layers[i].getSource();\n if (layers[i].get('mapbox-source') === sourceId) {\n return source;\n }\n }\n return undefined;\n}\n/**\n * Sets or removes a feature state. The feature state is taken into account for styling,\n * just like the feature's properties, and can be used e.g. to conditionally render selected\n * features differently.\n *\n * The feature state will be stored on the OpenLayers layer matching the feature identifier, in the\n * `mapbox-featurestate` property.\n * @param {Map|VectorLayer|VectorTileLayer} mapOrLayer OpenLayers Map or layer to set the feature\n * state on.\n * @param {FeatureIdentifier} feature Feature identifier.\n * @param {Object|null} state Feature state. Set to `null` to remove the feature state.\n */\nfunction setFeatureState(mapOrLayer, feature, state) {\n const layers = 'getLayers' in mapOrLayer ? getLayers(mapOrLayer, feature.source) : [mapOrLayer];\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const featureState = layers[i].get('mapbox-featurestate');\n if (featureState) {\n if (state) {\n featureState[feature.id] = state;\n } else {\n delete featureState[feature.id];\n }\n layers[i].changed();\n } else {\n throw new Error(`Map or layer for source \"${ feature.source }\" not found.`);\n }\n }\n}\n/**\n * Sets or removes a feature state. The feature state is taken into account for styling,\n * just like the feature's properties, and can be used e.g. to conditionally render selected\n * features differently.\n * @param {Map|VectorLayer|VectorTileLayer} mapOrLayer Map or layer to set the feature state on.\n * @param {FeatureIdentifier} feature Feature identifier.\n * @return {Object|null} Feature state or `null` when no feature state is set for the given\n * feature identifier.\n */\nfunction getFeatureState(mapOrLayer, feature) {\n const layers = 'getLayers' in mapOrLayer ? getLayers(mapOrLayer, feature.source) : [mapOrLayer];\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const featureState = layers[i].get('mapbox-featurestate');\n if (featureState && featureState[feature.id]) {\n return featureState[feature.id];\n }\n }\n return undefined;\n}\n\n/** @typedef {import(\"ol/Map.js\").default} Map */\n/**\n * @classdesc\n * Event emitted on configuration or loading error.\n */\nclass ErrorEvent extends BaseEvent {\n /**\n * @param {Error} error error object.\n */\n constructor(error) {\n super(EventType.ERROR);\n /**\n * @type {Error}\n */\n this.error = error;\n }\n}\n/**\n * @typedef {Object} Options\n * @property {string} styleUrl The URL of the Mapbox/MapLibre Style object to use for this layer. For a\n * style created with Mapbox Studio and hosted on Mapbox, this will look like\n * 'mapbox://styles/you/your-style'.\n * @property {string} [accessToken] The access token for your Mapbox/MapLibre style. This has to be provided\n * for `mapbox://` style urls. For `https://` and other urls, any access key must be the last query\n * parameter of the style url.\n * @property {string} [source] If your style uses more than one source, you need to use either the\n * `source` property or the `layers` property to limit rendering to a single vector source. The\n * `source` property corresponds to the id of a vector source in your Mapbox/MapLibre style.\n * @property {Array} [layers] Limit rendering to the list of included layers. All layers\n * must share the same vector source. If your style uses more than one source, you need to use\n * either the `source` property or the `layers` property to limit rendering to a single vector\n * source.\n * @property {boolean} [declutter=true] Declutter images and text. Decluttering is applied to all\n * image and text styles of all Vector and VectorTile layers that have set this to `true`. The priority\n * is defined by the z-index of the layer, the `zIndex` of the style and the render order of features.\n * Higher z-index means higher priority. Within the same z-index, a feature rendered before another has\n * higher priority.\n *\n * As an optimization decluttered features from layers with the same `className` are rendered above\n * the fill and stroke styles of all of those layers regardless of z-index. To opt out of this\n * behavior and place declutterd features with their own layer configure the layer with a `className`\n * other than `ol-layer`.\n * @property {import(\"ol/layer/Base.js\").BackgroundColor|false} [background] Background color for the layer.\n * If not specified, the background from the Mapbox/MapLibre Style object will be used. Set to `false` to prevent\n * the Mapbox/MapLibre style's background from being used.\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"ol/extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible. If neither `maxResolution` nor `minZoom` are defined, the layer's `maxResolution` will\n * match the style source's `minzoom`.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will\n * be visible. If neither `maxResolution` nor `minZoom` are defined, the layer's `minZoom` will match\n * the style source's `minzoom`.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {import(\"ol/render.js\").OrderFunction} [renderOrder] Render order. Function to be used when sorting\n * features before rendering. By default features are drawn in the order that they are created. Use\n * `null` to avoid the sort, but get an undefined draw order.\n * @property {number} [renderBuffer=100] The buffer in pixels around the tile extent used by the\n * renderer when getting features from the vector tile for the rendering or hit-detection.\n * Recommended value: Vector tiles are usually generated with a buffer, so this value should match\n * the largest possible buffer of the used tiles. It should be at least the size of the largest\n * point symbol or line width.\n * @property {import(\"ol/layer/VectorTile.js\").VectorTileRenderType} [renderMode='hybrid'] Render mode for vector tiles:\n * * `'hybrid'`: Polygon and line elements are rendered as images, so pixels are scaled during zoom\n * animations. Point symbols and texts are accurately rendered as vectors and can stay upright on\n * rotated views.\n * * `'vector'`: Everything is rendered as vectors. Use this mode for improved performance on vector\n * tile layers with only a few rendered features (e.g. for highlighting a subset of features of\n * another layer with the same source).\n * @property {import(\"ol/Map.js\").default} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use `map.addLayer()`.\n * @property {boolean} [updateWhileAnimating=false] When set to `true`, feature batches will be\n * recreated during animations. This means that no vectors will be shown clipped, but the setting\n * will have a performance impact for large amounts of vector data. When set to `false`, batches\n * will be recreated when no animation is active.\n * @property {boolean} [updateWhileInteracting=false] When set to `true`, feature batches will be\n * recreated during interactions. See also `updateWhileAnimating`.\n * @property {number} [preload=0] Preload. Load low-resolution tiles up to `preload` levels. `0`\n * means no preloading.\n * @property {boolean} [useInterimTilesOnError=true] Use interim tiles on error.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n/**\n * @classdesc\n * ```js\n * import {MapboxVectorLayer} from 'ol-mapbox-style';\n * ```\n * A vector tile layer based on a Mapbox/MapLibre style that uses a single vector source. Configure\n * the layer with the `styleUrl` and `accessToken` shown in Mapbox Studio's share panel.\n * If the style uses more than one source, use the `source` property to choose a single\n * vector source. If you want to render a subset of the layers in the style, use the `layers`\n * property (all layers must share the same vector source). See the constructor options for\n * more detail.\n *\n * const map = new Map({\n * view: new View({\n * center: [0, 0],\n * zoom: 1,\n * }),\n * layers: [\n * new MapboxVectorLayer({\n * styleUrl: 'mapbox://styles/mapbox/bright-v9',\n * accessToken: 'your-mapbox-access-token-here',\n * }),\n * ],\n * target: 'map',\n * });\n *\n * On configuration or loading error, the layer will trigger an `'error'` event. Listeners\n * will receive an object with an `error` property that can be used to diagnose the problem.\n *\n * **Note for users of the full build**: The `MapboxVectorLayer` requires the\n * [ol-mapbox-style](https://github.com/openlayers/ol-mapbox-style) library to be loaded as well.\n *\n * @param {Options} options Options.\n * @extends {VectorTileLayer}\n * @fires module:ol/events/Event~BaseEvent#event:error\n * @api\n */\nclass MapboxVectorLayer extends VectorTileLayer {\n /**\n * @param {Options} options Layer options. At a minimum, `styleUrl` and `accessToken`\n * must be provided.\n */\n constructor(options) {\n const declutter = 'declutter' in options ? options.declutter : true;\n const source = new VectorTileSource({\n state: 'loading',\n format: new MVT()\n });\n super({\n source: source,\n background: options.background === false ? null : options.background,\n declutter: declutter,\n className: options.className,\n opacity: options.opacity,\n visible: options.visible,\n zIndex: options.zIndex,\n minResolution: options.minResolution,\n maxResolution: options.maxResolution,\n minZoom: options.minZoom,\n maxZoom: options.maxZoom,\n renderOrder: options.renderOrder,\n renderBuffer: options.renderBuffer,\n renderMode: options.renderMode,\n map: options.map,\n updateWhileAnimating: options.updateWhileAnimating,\n updateWhileInteracting: options.updateWhileInteracting,\n preload: options.preload,\n useInterimTilesOnError: options.useInterimTilesOnError,\n properties: options.properties\n });\n if (options.accessToken) {\n this.accessToken = options.accessToken;\n }\n const url = options.styleUrl;\n const promises = [applyStyle(this, url, options.layers || options.source, { accessToken: this.accessToken })];\n if (this.getBackground() === undefined) {\n promises.push(applyBackground(this, options.styleUrl, { accessToken: this.accessToken }));\n }\n Promise.all(promises).then(() => {\n source.setState('ready');\n }).catch(error => {\n this.dispatchEvent(new ErrorEvent(error));\n const source = this.getSource();\n source.setState('error');\n });\n }\n}\n\nexport { MapboxVectorLayer, addMapboxLayer, apply, applyBackground, applyStyle, apply as default, getFeatureState, getLayer, getLayers, getMapboxLayer, getSource, getStyleForLayer, recordStyleLayer, removeMapboxLayer, renderTransparent, setFeatureState, stylefunction, updateMapboxLayer, updateMapboxSource };\n//# sourceMappingURL=index.js.map\n","const __WEBPACK_NAMESPACE_OBJECT__ = undefined;","// import openlayers\nimport VectorTileLayer from \"ol/layer/VectorTile\";\nimport VectorTileSource from \"ol/source/VectorTile\";\nimport TileJSONSource from \"ol/source/TileJSON\";\nimport MVT from \"ol/format/MVT\";\nimport { unByKey as observableUnByKey } from \"ol/Observable\";\n// import olms : module ES6\nimport { applyStyle } from \"ol-mapbox-style\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Config from \"../Utils/Config\";\n\n/**\n* @classdesc\n* Geoportal Layer Mapbox creation\n*\n* @constructor\n* @extends {ol.layer.VectorTile}\n* @alias ol.layer.GeoportalMapBox\n* @type {ol.layer.GeoportalMapBox}\n* @param {Object} options - options for function call.\n* @param {String} options.layer - Layer name (e.g. \"PLAN.IGN\")\n* @param {Object} [options.configuration] - configuration (cf. example) \n* @param {String} [options.style] - Style name (e.g. \"classique\")\n* @param {String} [options.source] - Source name (e.g. \"plan_ign\")\n* @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n* @param {Object} [settings] - other options for ol.layer.VectorTile function (see {@link https://openlayers.org/en/latest/apidoc/module-ol_layer_VectorTile-VectorTileLayer.html ol.layer.VectorTile})\n* @example\n* var LayerMapBox = new ol.layer.GeoportalMapBox({\n* layer : \"PLAN.IGN\",\n* [style : \"classique\",]\n* [source : \"plan_ign\",]\n* [ssl: true]\n* }, {\n* opacity\n* visible\n* extent\n* declutter\n* ...\n* });\n* \n* // Ex. configuration object for TMS Layer\n* \"PLAN.IGN$GEOPORTAIL:GPP:TMS\": {\n* \"hidden\": true,\n* \"queryable\": false,\n* \"serviceParams\": {\n* \"id\": \"GPP:TMS\",\n* \"version\": \"1.0.0\",\n* \"serverUrl\": {\n* \"cartes\": \"https://wxs.ign.fr/cartes/geoportail/tms/1.0.0/\"\n* }\n* },\n* \"name\": \"PLAN.IGN\",\n* \"title\": \"Plan IGN\",\n* \"description\": \"BDUni tuilée\",\n* \"formats\": [\n* {\n* \"current\": true,\n* \"name\": \"application/x-protobuf\"\n* }\n* ],\n* \"styles\": [\n* {\n* \"name\": \"standard\",\n* \"title\": \"Style standard\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/standard.json\"\n* },\n* {\n* \"name\": \"classique\",\n* \"title\": \"Style classique\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/classique.json\"\n* },\n* {\n* \"name\": \"transparent\",\n* \"title\": \"Style transparent\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/transparent.json\"\n* },\n* {\n* \"name\": \"accentue\",\n* \"title\": \"Style accentue\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/accentue.json\"\n* },\n* {\n* \"name\": \"attenue\",\n* \"title\": \"Style attenue\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/attenue.json\"\n* },\n* {\n* \"name\": \"gris\",\n* \"title\": \"Style en noir et blanc\",\n* \"current\": false,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/gris.json\"\n* },\n* {\n* \"name\": \"epure\",\n* \"title\": \"Style epure\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/epure.json\"\n* },\n* {\n* \"name\": \"sans_toponymes\",\n* \"title\": \"Style sans toponymes\",\n* \"current\": false,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/sans_toponymes.json\"\n* }\n* ],\n* \"globalConstraint\": {\n* \"crs\": null,\n* \"bbox\": {\n* \"left\": -724011.531917197,\n* \"right\": 1095801.237496279,\n* \"top\": 6672646.821182753,\n* \"bottom\": 5009377.0856973175\n* },\n* \"minScaleDenominator\": null,\n* \"maxScaleDenominator\": null\n* },\n* \"quicklookUrl\": \"https://wxs.ign.fr/static/pictures/ign_carte2.jpg\",\n* \"layerId\": \"PLAN.IGN$GEOPORTAIL:GPP:TMS\",\n* \"defaultProjection\": \"EPSG:3857\"\n* }\n*\n*/\nvar LayerMapBox = class LayerMapBox extends VectorTileLayer {\n \n /**\n * See {@link ol.layer.GeoportalMapBox}\n * @module LayerMapBox\n * @alias module:~layers/GeoportalMapBox\n * @param {*} options - options\n * @param {*} [settings] - other settings\n * @example\n * import LayerMapBox from \"gpf-ext-ol/layers/LayerMapBox\"\n * ou \n * import { LayerMapBox } from \"gpf-ext-ol\"\n */\n constructor (options, settings) {\n // if (!(this instanceof LayerMapBox)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n \n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n \n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n \n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n \n // si ssl = false on fait du http\n // par défaut, ssl = true, on fait du https\n var protocol = options.ssl === false ? \"http://\" : \"https://\";\n \n // WARNING :\n // on fait le choix de ne pas utiliser la clef apiKey pour checker \n // les droits sur la ressource\n // car le service n'est pas securisé...\n \n // configuration de la ressource\n var layerCfg = options.configuration;\n\n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config chargée\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n\n // id de la ressource\n var layerId = options.layer + \"$GEOPORTAIL:GPP:TMS\";\n \n // récupération des ressources utiles depuis la configuration\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : Layer ID not found into the catalogue !?\");\n }\n }\n\n var styleUrl = null;\n var styleTitle = \"\";\n var styleName = options.style;\n for (var i = 0; i < layerCfg.styles.length; i++) {\n var style = layerCfg.styles[i];\n // si le nom du style est en option, on le recherche...\n // sinon, on recherche le style par defaut !\n if (styleName && style.name === styleName) {\n styleUrl = style.url;\n styleTitle = style.title;\n break;\n } else {\n if (!styleName && style.current) {\n styleName = style.name;\n styleUrl = style.url;\n styleTitle = style.title;\n break;\n }\n }\n }\n \n if (!styleUrl) {\n throw new Error(\"ERROR : Style URL not found !?\");\n }\n \n styleUrl.replace(/(http|https):\\/\\//, protocol);\n \n // création de la source\n var source = new VectorTileSource({\n state : \"loading\", // statut\n format : new MVT()\n });\n \n source._originators = layerCfg.originators;\n source._legends = layerCfg.legends;\n source._metadata = layerCfg.metadata;\n source._description = layerCfg.description;\n source._title = layerCfg.title + \" (\" + styleTitle + \")\";\n source._quicklookUrl = layerCfg.quicklookUrl;\n \n // options definies sur ol.layer.VectorTile\n var layerVectorTileOptions = {\n source : source\n };\n \n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(layerVectorTileOptions, settings);\n \n // on surcharge les originators (non récupérés depuis configuration de la couche)\n if (options.olParams && !layerCfg.originators) {\n source._originators = options.olParams.attributions;\n }\n \n // création d'une ol.layer.VectorTile avec les options récupérées ci-dessus.\n super(layerVectorTileOptions);\n \n this.name = options.layer;\n this.service = \"TMS\";\n this.protocol = protocol;\n this.sourceId = options.source;\n this.styleUrl = styleUrl;\n this.config = layerCfg;\n \n // récuperation du style\n this.setStyleMapBox();\n \n return this;\n }\n \n /**\n * Get Style MapBox\n * @private\n */\n setStyleMapBox () {\n var self = this;\n fetch(this.styleUrl, {\n credentials : \"same-origin\"\n }).then(function (response) {\n if (response.ok) {\n response.json().then(function (style) {\n self.onStyleMapBoxLoad(style);\n });\n }\n }).catch(function (e) {\n self.onStyleMapBoxError(e);\n });\n };\n \n /**\n * Add Style\n * @param {*} style - json style\n */\n onStyleMapBoxLoad (style) {\n // si on a plusieurs sources, on ne peut en prendre qu'une seule...\n if (!this.sourceId) {\n this.sourceId = Object.keys(style.sources)[0];\n }\n \n var styleSource = style.sources[this.sourceId];\n if (!styleSource) {\n this.onStyleMapBoxError({\n message : \"ERROR : Source ID not found !? !\"\n });\n return;\n }\n \n if (styleSource.type !== \"vector\") {\n this.onStyleMapBoxError({\n message : \"ERROR : Source TYPE not permitted !\"\n });\n return;\n }\n \n var source = this.getSource();\n \n // WARNING :\n // la clef renseignée dans les urls n'est pas forcement la bonne\n // car la substitution avec la clef utilisateur n'est pas faite par le service...\n if (styleSource.url) {\n // protocole : http ou https\n styleSource.url.replace(/(http|https):\\/\\//, this.protocol);\n \n var vectorTileJson = new TileJSONSource({\n url : styleSource.url\n });\n var self = this;\n var key = vectorTileJson.on(\"change\", function () {\n if (vectorTileJson.getState() === \"ready\") {\n var doc = vectorTileJson.getTileJSON();\n if (!doc) {\n return;\n }\n self.set(\"mapbox-extensions\", doc);\n var tiles = Array.isArray(doc.tiles) ? doc.tiles : [doc.tiles];\n // protocole : http ou https\n for (var i = 0; i < styleSource.tiles.length; i++) {\n tiles[i].replace(/(http|https):\\/\\//, this.protocol);\n }\n source.setUrls(tiles);\n observableUnByKey(key);\n }\n });\n }\n \n if (styleSource.tiles) {\n // protocole : http ou https\n for (var j = 0; j < styleSource.tiles.length; j++) {\n styleSource.tiles[j].replace(/(http|https):\\/\\//, this.protocol);\n }\n source.setUrls(styleSource.tiles);\n }\n \n applyStyle(this, style, this.sourceId).then(() => {\n source.setState(\"ready\");\n this.set(\"mapbox-styles\", style);\n }).catch((error) => {\n this.onStyleMapBoxError(error);\n });\n };\n \n /**\n * Error\n * @param {*} error - message\n */\n onStyleMapBoxError (error) {\n var source = this.getSource();\n source.setState(\"error\");\n // eslint-disable-next-line no-console\n console.error(error.message);\n };\n\n /**\n * Get configuration\n * @returns {Object} - configuration\n */\n getConfiguration () {\n return this.config;\n }\n\n /**\n * Get legends\n * @returns {Array} - legends\n */\n getLegends () {\n return this.getSource()._legends;\n }\n\n /**\n * Get metadata\n * @returns {Array} - metadata\n */\n getMetadata () {\n return this.getSource()._metadata;\n }\n\n /**\n * Get description\n * @returns {String} - description\n */\n getDescription () {\n return this.getSource()._description;\n }\n\n /**\n * Get title\n * @returns {String} - title\n */\n getTitle () {\n return this.getSource()._title;\n }\n\n /**\n * Get quicklook url\n * @returns {String} - quicklook\n */\n getQuicklookUrl () {\n return this.getSource()._quicklookUrl;\n }\n\n /**\n * Get originators\n * @returns {Array} - originators\n */\n getOriginators () {\n return this.getSource()._originators;\n }\n \n};\n\nexport default LayerMapBox;\n\n// Expose LayerMapBox as ol.layer.GeoportalMapBox. (for a build bundle)\nif (window.ol && window.ol.layer) {\n window.ol.layer.GeoportalMapBox = LayerMapBox;\n}\n","// import openlayers\nimport {\n get as olGetProj,\n transformExtent as olTransformExtentProj\n} from \"ol/proj\";\nimport TileLayer from \"ol/layer/Tile\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Config from \"../Utils/Config\";\n// import local with ol dependencies\nimport SourceWMS from \"./SourceWMS\";\n\n/**\n * @classdesc\n * Geoportal LayerWMS source creation (inherit from ol.layer.Tile)\n *\n * @constructor\n * @extends {ol.layer.Tile}\n * @alias ol.layer.GeoportalWMS\n * @type {ol.layer.GeoportalWMS}\n * @param {Object} options - options for function call.\n * @param {String} options.layer - Layer name (e.g. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {Object} [options.configuration] - configuration (cf. example) \n * @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n * @param {String} [options.apiKey] - Access key to Geoportal platform\n * @param {Object} [options.olParams] - other options for ol.layer.Tile function (see {@link http://openlayers.org/en/latest/apidoc/ol.layer.Tile.html ol.layer.Tile})\n * @param {Object} [options.olParams.sourceParams] - other options for ol.source.TileWMS function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.TileWMS.html ol.source.TileWMS})\n * @example\n * var layerWMS = new ol.layer.GeoportalWMS({\n * layer : \"ORTHOIMAGERY.ORTHOPHOTOS\"\n * });\n * \n * layerWMS.getLegends();\n * layerWMS.getMetadata();\n * layerWMS.getTitle();\n * layerWMS.getDescription();\n * layerWMS.getQuicklookUrl();\n * layerWMS.getOriginators();\n */\nvar LayerWMS = class LayerWMS extends TileLayer {\n\n /**\n * See {@link ol.layer.GeoportalWMS}\n * @module LayerWMS\n * @alias module:~layers/GeoportalWMS\n * @param {*} options - options\n * @example\n * import LayerWMS from \"gpf-ext-ol/layers/LayerWMS\"\n * ou \n * import { LayerWMS } from \"gpf-ext-ol\"\n */\n constructor (options) {\n // if (!(this instanceof LayerWMS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n\n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n\n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n\n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n\n // configuration de la ressource\n var layerCfg = options.configuration;\n\n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config chargée\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n // récupération des autres paramètres nécessaires à la création de la layer\n var layerId = Config.configuration.getLayerId(options.layer, \"WMS\");\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : Layer ID not found into the catalogue !?\");\n }\n }\n\n // création de la source WMS\n var olSourceParams;\n if (options.olParams && options.olParams.sourceParams) {\n olSourceParams = options.olParams.sourceParams;\n }\n var wmsSource = new SourceWMS({\n layer : options.layer,\n configuration : options.configuration,\n ssl : options.ssl,\n apiKey : options.apiKey,\n olParams : olSourceParams\n });\n\n var layerTileOptions = {\n source : wmsSource\n };\n\n // si le param LAYERS n'a pas été renseigné lors de la création de la source,\n // c'est que l'identifiant de la couche n'a pas été trouvé. on passe donc la recherche des paramètres.\n if (wmsSource.getParams().LAYERS !== undefined) {\n /* INFO : on ne récupère l'emprise de la couche que lorsque que l'utilisateur spécifie la projection.\n Si aucune projection n'est spécifiée, il faudrait spécifier l'emprise dans la projection de la carte (car OpenLayers reprojette),\n mais on ne peut pas la récupérer à ce niveau. On ne spécifie donc aucune emprise.\n Idem pour les résolutions : il faut connaitre l'unité de la projection (metres ou degrés) pour pouvoir calculer la résolution.\n */\n if (olSourceParams && olSourceParams.projection) {\n // récupération de l'étendue (en EPSG:4326), et reprojection dans la proj spécifiée\n var geobbox = [\n layerCfg.globalConstraints.extent.left,\n layerCfg.globalConstraints.extent.bottom,\n layerCfg.globalConstraints.extent.right,\n layerCfg.globalConstraints.extent.top\n ];\n layerTileOptions.extent = olTransformExtentProj(geobbox, \"EPSG:4326\", olSourceParams.projection);\n\n // récupération des résolutions min et max\n var p;\n // on récupère tout d'abord la projection\n if (typeof olSourceParams.projection === \"string\") {\n p = olGetProj(olSourceParams.projection);\n } else if (typeof olSourceParams.projection === \"object\" && olSourceParams.projection.getCode()) {\n p = olGetProj(olSourceParams.projection.getCode());\n }\n // puis, selon l'unité de la projection, on calcule la résolution correspondante\n if (p && p.getUnits()) {\n if (p.getUnits() === \"m\") {\n /* fixme : fix temporaire pour gérer les min/max scaledenominator qui sont arrondis dans la configuration !\n * on les arrondit respectivement à l'unité inférieure et supérieure\n * pour que les couches soient bien disponibles aux niveaux de zoom correspondants */\n // info : 1 pixel = 0.00028 m\n layerTileOptions.minResolution = (layerCfg.globalConstraints.minScale - 1) * 0.00028;\n layerTileOptions.maxResolution = (layerCfg.globalConstraints.maxScale + 1) * 0.00028;\n } else if (p.getUnits() === \"degrees\") {\n /* fixme : fix temporaire pour gérer les min/max scaledenominator qui sont arrondis dans la configuration !\n * on les arrondit respectivement à l'unité inférieure et supérieure\n * pour que les couches soient bien disponibles aux niveaux de zoom correspondants */\n // info : 6378137 * 2 * pi / 360 = rayon de la terre (ellipsoide WGS84)\n layerTileOptions.minResolution = (layerCfg.globalConstraints.minScale - 1) * 0.00028 * 180 / (Math.PI * 6378137);\n layerTileOptions.maxResolution = (layerCfg.globalConstraints.maxScale + 1) * 0.00028 * 180 / (Math.PI * 6378137);\n }\n }\n }\n }\n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(layerTileOptions, options.olParams);\n\n // création d'une ol.layer.Tile avec les options récupérées ci-dessus.\n super(layerTileOptions);\n\n this.name = options.layer;\n this.service = \"WMS\";\n this.config = layerCfg;\n\n return this;\n }\n\n /**\n * Get configuration\n * @returns {Object} - configuration\n */\n getConfiguration () {\n return this.config;\n }\n \n /**\n * Get legends\n * @returns {Array} - legends\n */\n getLegends () {\n return this.getSource()._legends;\n }\n\n /**\n * Get metadata\n * @returns {Array} - metadata\n */\n getMetadata () {\n return this.getSource()._metadata;\n }\n\n /**\n * Get description\n * @returns {String} - description\n */\n getDescription () {\n return this.getSource()._description;\n }\n\n /**\n * Get title\n * @returns {String} - title\n */\n getTitle () {\n return this.getSource()._title;\n }\n\n /**\n * Get quicklook url\n * @returns {String} - quicklook\n */\n getQuicklookUrl () {\n return this.getSource()._quicklookUrl;\n }\n\n /**\n * Get originators\n * @returns {Array} - originators\n */\n getOriginators () {\n return this.getSource()._originators;\n }\n\n};\n\nexport default LayerWMS;\n\n// Expose LayerWMS as ol.layerGeoportalWMS. (for a build bundle)\nif (window.ol && window.ol.layer) {\n window.ol.layer.GeoportalWMS = LayerWMS;\n}\n","// import openlayers\nimport { get as olGetProj } from \"ol/proj\";\nimport TileLayer from \"ol/layer/Tile\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Config from \"../Utils/Config\";\n// import local with ol dependencies\nimport SourceWMTS from \"./SourceWMTS\";\n\n/**\n* @classdesc\n* Geoportal LayerWMTS source creation (inherit from ol.layer.Tile)\n*\n* @constructor\n* @extends {ol.layer.Tile}\n* @alias ol.layer.GeoportalWMTS\n* @type {ol.layer.GeoportalWMTS}\n* @param {Object} options - options for function call.\n* @param {String} options.layer - Layer name (e.g. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n* @param {Object} [options.configuration] - configuration (cf. example) \n* @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n* @param {String} [options.apiKey] - Access key to Geoportal platform\n* @param {Object} [options.olParams] - other options for ol.layer.Tile function (see {@link http://openlayers.org/en/latest/apidoc/ol.layer.Tile.html ol.layer.Tile})\n* @param {Object} [options.olParams.sourceParams] - other options for ol.source.WMTS function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.WMTS.html ol.source.WMTS})\n* @example\n* var layerWMTS = new ol.layer.GeoportalWMTS({\n* layer : \"ORTHOIMAGERY.ORTHOPHOTOS\"\n* });\n* layerWMTS.getLegends();\n* layerWMTS.getMetadata();\n* layerWMTS.getTitle();\n* layerWMTS.getDescription();\n* layerWMTS.getQuicklookUrl();\n* layerWMTS.getOriginators();\n* \n* // Ex. configuration object for WMTS Layer\n* {\n* \"name\" : \"GEOGRAPHICALGRIDSYSTEMS.MAPS.OVERVIEW\",\n* \"globalConstraint\" : {\n* \"maxScaleDenominator\" : 279541132.01435894,\n* \"minScaleDenominator\" : 2183915.0938621787,\n* \"bbox\" : {\n* \"left\" : -179.5,\n* \"right\" : 179.5,\n* \"top\" : 75,\n* \"bottom\" : -75\n* }\n* },\n* \"params\" : {\n* \"url\" : \"https:*data.geopf.fr/wmts\",\n* \"styles\" : \"normal\",\n* \"version\" : \"1.0.0\",\n* \"format\" : \"image/jpeg\",\n* \"projection\" : \"EPSG:3857\",\n* \"minScale\" : 2183915.0938621787,\n* \"maxScale\" : 279541132.01435894,\n* \"extent\" : {\n* \"left\" : -179.5,\n* \"right\" : 179.5,\n* \"top\" : 75,\n* \"bottom\" : -75\n* },\n* \"legends\" : [\n* {\n* \"format\" : \"image/jpeg\",\n* \"url\" : \"https:*data.geopf.fr/annexes/ressources/legendes/LEGEND.jpg\",\n* \"minScaleDenominator\" : \"200\"\n* }\n* ],\n* \"title\" : \"Carte Mondiale pour la mini-vue\",\n* \"description\" : \"Carte Mondiale pour la mini-vue\",\n* \"tileMatrixSetLimits\" : {\n* \"1\" : {\n* \"minTileRow\" : \"0\",\n* \"maxTileRow\" : \"1\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"1\"\n* },\n* \"2\" : {\n* \"minTileRow\" : \"0\",\n* \"maxTileRow\" : \"3\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"3\"\n* },\n* \"3\" : {\n* \"minTileRow\" : \"1\",\n* \"maxTileRow\" : \"6\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"7\"\n* },\n* \"4\" : {\n* \"minTileRow\" : \"2\",\n* \"maxTileRow\" : \"13\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"15\"\n* },\n* \"5\" : {\n* \"minTileRow\" : \"5\",\n* \"maxTileRow\" : \"26\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"31\"\n* },\n* \"6\" : {\n* \"minTileRow\" : \"11\",\n* \"maxTileRow\" : \"52\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"63\"\n* },\n* \"7\" : {\n* \"minTileRow\" : \"22\",\n* \"maxTileRow\" : \"105\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"127\"\n* },\n* \"8\" : {\n* \"minTileRow\" : \"45\",\n* \"maxTileRow\" : \"210\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"255\"\n* }\n* },\n* \"TMSLink\" : \"PM_1_8\",\n* \"matrixIds\" : [\n* \"1\",\n* \"2\",\n* \"3\",\n* \"4\",\n* \"5\",\n* \"6\",\n* \"7\",\n* \"8\"\n* ],\n* \"tileMatrices\" : {\n* \"1\" : {\n* \"matrixId\" : \"1\",\n* \"matrixHeight\" : 2,\n* \"matrixWidth\" : 2,\n* \"scaleDenominator\" : 279541132.01435894,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"2\" : {\n* \"matrixId\" : \"2\",\n* \"matrixHeight\" : 4,\n* \"matrixWidth\" : 4,\n* \"scaleDenominator\" : 139770566.0071793,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"3\" : {\n* \"matrixId\" : \"3\",\n* \"matrixHeight\" : 8,\n* \"matrixWidth\" : 8,\n* \"scaleDenominator\" : 69885283.00358965,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"4\" : {\n* \"matrixId\" : \"4\",\n* \"matrixHeight\" : 16,\n* \"matrixWidth\" : 16,\n* \"scaleDenominator\" : 34942641.50179486,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"5\" : {\n* \"matrixId\" : \"5\",\n* \"matrixHeight\" : 32,\n* \"matrixWidth\" : 32,\n* \"scaleDenominator\" : 17471320.75089743,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"6\" : {\n* \"matrixId\" : \"6\",\n* \"matrixHeight\" : 64,\n* \"matrixWidth\" : 64,\n* \"scaleDenominator\" : 8735660.375448715,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"7\" : {\n* \"matrixId\" : \"7\",\n* \"matrixHeight\" : 128,\n* \"matrixWidth\" : 128,\n* \"scaleDenominator\" : 4367830.1877243575,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"8\" : {\n* \"matrixId\" : \"8\",\n* \"matrixHeight\" : 256,\n* \"matrixWidth\" : 256,\n* \"scaleDenominator\" : 2183915.0938621787,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* }\n* },\n* \"nativeResolutions\" : [\n* \"78271.51696402048\",\n* \"39135.75848201023\",\n* \"19567.87924100512\",\n* \"9783.939620502561\",\n* \"4891.969810251280\",\n* \"2445.984905125640\",\n* \"1222.992452562820\",\n* \"611.4962262814100\"\n* ]\n* }\n*/\nvar LayerWMTS = class LayerWMTS extends TileLayer {\n \n /**\n * See {@link ol.layer.GeoportalWMTS}\n * @module LayerWMTS\n * @alias module:~layers/GeoportalWMTS\n * @param {*} options - options\n * @example\n * import LayerWMTS from \"gpf-ext-ol/layers/LayerWMTS\n * ou \n * import { LayerWMTS } from \"gpf-ext-ol\"\n */\n constructor (options) {\n // if (!(this instanceof LayerWMTS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n \n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n \n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n \n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n \n // configuration de la ressource\n var layerCfg = options.configuration;\n \n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config chargée\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n // récupération des autres paramètres nécessaires à la création de la layer\n var layerId = Config.configuration.getLayerId(options.layer, \"WMTS\");\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : Layer ID not found into the catalogue !?\");\n }\n }\n \n // création de la source WMTS\n var olSourceParams;\n if (options.olParams && options.olParams.sourceParams) {\n olSourceParams = options.olParams.sourceParams;\n }\n var wmtsSource = new SourceWMTS({\n layer : options.layer,\n configuration : options.configuration,\n ssl : options.ssl,\n apiKey : options.apiKey,\n olParams : olSourceParams\n });\n \n var layerTileOptions = {\n source : wmtsSource\n };\n \n // si le param layer n'a pas été renseigné lors de la création de la source,\n // c'est que l'identifiant de la couche n'a pas été trouvé. on passe donc la recherche des paramètres.\n if (wmtsSource.getLayer() !== undefined) {\n if (layerCfg.globalConstrainWFSts && layerCfg.globalConstraints.projection) {\n /* INFO : désactivation temporaire de l'étendue, car certaines étendues (trop grandes ?)\n provoquent quelques bugs d'affichage (zoom > 16 par exemple) */\n // récupération de l'étendue (en EPSG:4326), et reprojection dans la proj de la couche\n // var geobbox = [\n // layerCfg.globalConstraints.extent.left,\n // layerCfg.globalConstraints.extent.bottom,\n // layerCfg.globalConstraints.extent.right,\n // layerCfg.globalConstraints.extent.top\n // ];\n // layerTileOptions.extent = ol.proj.transformExtent(geobbox, \"EPSG:4326\", layerCfg.globalConstraints.projection);\n \n // récupération des résolutions min et max\n var p;\n // on récupère tout d'abord la projection\n if (typeof layerCfg.globalConstraints.projection === \"string\") {\n p = olGetProj(layerCfg.globalConstraints.projection);\n }\n // puis, selon l'unité de la projection, on calcule la résolution correspondante\n if (p && p.getUnits()) {\n if (p.getUnits() === \"m\") {\n /* fixme : fix temporaire pour gérer les min/max scaledenominator qui sont arrondis dans la configuration !\n * on les arrondit respectivement à l'unité inférieure et supérieure\n * pour que les couches soient bien disponibles aux niveaux de zoom correspondants */\n // info : 1 pixel = 0.00028 m\n layerTileOptions.minResolution = (layerCfg.globalConstraints.minScale - 1) * 0.00028;\n layerTileOptions.maxResolution = (layerCfg.globalConstraints.maxScale + 1) * 0.00028;\n } else if (p.getUnits() === \"degrees\") {\n /* fixme : fix temporaire pour gérer les min/max scaledenominator qui sont arrondis dans la configuration !\n * on les arrondit respectivement à l'unité inférieure et supérieure\n * pour que les couches soient bien disponibles aux niveaux de zoom correspondants */\n // info : 6378137 * 2 * pi / 360 = rayon de la terre (ellipsoide WGS84)\n layerTileOptions.minResolution = (layerCfg.globalConstraints.minScale - 1) * 0.00028 * 180 / (Math.PI * 6378137);\n layerTileOptions.maxResolution = (layerCfg.globalConstraints.maxScale + 1) * 0.00028 * 180 / (Math.PI * 6378137);\n }\n }\n }\n }\n \n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(layerTileOptions, options.olParams);\n \n // création d'une ol.layer.Tile avec les options récupérées ci-dessus.\n super(layerTileOptions);\n \n this.name = options.layer;\n this.service = \"WMTS\";\n this.config = layerCfg;\n\n return this;\n }\n \n /**\n * Get configuration\n * @returns {Object} - configuration\n */\n getConfiguration () {\n return this.config;\n }\n \n /**\n * Get legends\n * @returns {Array} - legends\n */\n getLegends () {\n return this.getSource()._legends;\n }\n\n /**\n * Get metadata\n * @returns {Array} - metadata\n */\n getMetadata () {\n return this.getSource()._metadata;\n }\n\n /**\n * Get description\n * @returns {String} - description\n */\n getDescription () {\n return this.getSource()._description;\n }\n\n /**\n * Get title\n * @returns {String} - title\n */\n getTitle () {\n return this.getSource()._title;\n }\n\n /**\n * Get quicklook url\n * @returns {String} - quicklook\n */\n getQuicklookUrl () {\n return this.getSource()._quicklookUrl;\n }\n\n /**\n * Get originators\n * @returns {Array} - originators\n */\n getOriginators () {\n return this.getSource()._originators;\n }\n \n};\n\nexport default LayerWMTS;\n\n// Expose LayerWMTS as ol.layerGeoportalWMTS. (for a build bundle)\nif (window.ol && window.ol.layer) {\n window.ol.layer.GeoportalWMTS = LayerWMTS;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.TileWMS;","import Gp from \"geoportal-access-lib\";\n// import OpenLayers\nimport TileWMSSource from \"ol/source/TileWMS\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Logger from \"../Utils/LoggerByDefault\";\nimport Config from \"../Utils/Config\";\n// package.json (extract version)\nimport Pkg from \"../../../package.json\";\n\nvar logger = Logger.getLogger(\"sourcewms\");\n\n/**\n * @classdesc\n * Geoportal tile WMS source creation (inherit from ol.source.TileWMS)\n *\n * @constructor\n * @alias ol.source.GeoportalWMS\n * @type {ol.source.GeoportalWMS}\n * @extends {ol.source.TileWMS}\n * @param {Object} options - options for function call.\n * @param {String} options.layer - Layer name (e.g. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {Object} [options.configuration] - configuration (cf. example) \n * @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n * @param {String} [options.apiKey] - Access key to Geoportal platform\n * @param {Array} [options.legends] - Legends objects associated to the layer\n * @param {Array} [options.metadata] - Metadata objects associated to the layer\n * @param {String} [options.title] - title of the layer\n * @param {String} [options.description] - description of the layer\n * @param {String} [options.quicklookUrl] - quicklookUrl of the layer\n * @param {Object} [options.olParams] - other options for ol.source.TileWMS function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.TileWMS.html ol.source.TileWMS})\n * @example\n * var sourceWMS = new ol.source.GeoportalWMS({\n * layer : \"ORTHOIMAGERY.ORTHOPHOTOS\"\n * });\n */\nvar SourceWMS = class SourceWMS extends TileWMSSource {\n\n constructor (options) {\n // if (!(this instanceof SourceWMS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n\n // check layer params\n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n\n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n\n // configuration de la ressource\n var layerCfg = options.configuration;\n var wmsParams = (layerCfg) ? layerCfg.params : null;\n var apiKey = options.apiKey;\n\n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n\n var layerId = Config.configuration.getLayerId(options.layer, \"WMS\");\n if (!layerId) {\n throw new Error(`ERROR : WMS Layer ID ${options.layer} cannot be found in Geoportal Configuration. Make sure that this resource is included in your contract key.`);\n }\n\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : WMS Layer configuration cannot be found in Geoportal.\");\n }\n\n apiKey = Config.configuration.getLayerKey(layerId)[0];\n wmsParams = Config.configuration.getLayerParams(options.layer, \"WMS\");\n }\n\n // si ssl = false on fait du http\n // par défaut, ssl = true, on fait du https\n var protocol = options.ssl === false ? \"http://\" : \"https://\";\n\n var urlParams = {\n \"gp-ol-ext\" : Pkg.olExtVersion || Pkg.version\n };\n if (wmsParams.url.includes(\"/private/\")) {\n // si l'url est privée\n // Ajout de la clef d'API fournie par l'utilisateur en prioritée\n // ou récupérée depuis la configuration\n var key = options.apiKey || apiKey;\n if (!key) {\n throw new Error(\"ERROR : WMS Layer apiKey cannot be found in Geoportal Configuration.\");\n }\n urlParams[\"apikey\"] = key;\n }\n\n var wmsSourceOptions = {\n // tracker extension openlayers\n url : Gp.Helper.normalyzeUrl(wmsParams.url.replace(/(http|https):\\/\\//, protocol), urlParams, false),\n params : {\n SERVICE : \"WMS\",\n LAYERS : options.layer,\n VERSION : wmsParams.version,\n STYLES : wmsParams.styles,\n FORMAT : wmsParams.format\n },\n crossOrigin : \"anonymous\"\n // ,\n // attributions : [\n // new ol.Attribution({\n // html : \"\"\n // })\n // ]\n };\n\n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(wmsSourceOptions, options.olParams);\n\n // on surcharge les originators (non récupérés depuis configuration de la couche)\n if (options.olParams && !wmsParams.originators) {\n wmsParams.originators = options.olParams.attributions;\n }\n\n // returns a WMS object, that inherits from ol.source.TileWMS.\n super(wmsSourceOptions);\n\n // save originators (to be updated by Originators control)\n this._originators = wmsParams.originators;\n\n // save legends and metadata (to be added to LayerSwitcher control)\n this._legends = options.legends || wmsParams.legends;\n this._metadata = options.metadata || wmsParams.metadata;\n this._title = options.title || wmsParams.title;\n this._description = options.description || wmsParams.description;\n this._quicklookUrl = options.quicklookUrl || wmsParams.quicklookUrl;\n\n this.name = options.layer;\n this.service = \"WMS\";\n\n return this;\n }\n\n};\n\nexport default SourceWMS;\n\n// Expose SourceWMS as ol.source.GeoportalWMTS. (for a build bundle)\nif (window.ol && window.ol.source) {\n window.ol.source.GeoportalWMS = SourceWMS;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.tilegrid.WMTS;","/**\n* @module LayerUtils\n* @alias module:~utils/LayerUtils\n* @description\n* ...\n*\n* @example\n* import LayerUtils from \"gpf-ext-ol/utils/LayerUtils\"\n* ou \n* import {LayerUtils} from \"gpf-ext-ol\n\n* LayerUtils.getZoomLevelFromScaleDenominator();\n* LayerUtils.getAttributions();\n* LayerUtils.intersects();\n*/\nvar LayerUtils = {\n\n /**\n * Obtenir le ZoomLevel à partir du ScaleDenominator\n * @function getZoomLevelFromScaleDenominator\n * @param {Number} scaleDenominator - the scale denominator\n * @param {String} crs - the crs\n *\n * @returns {Integer} zoom level\n */\n getZoomLevelFromScaleDenominator : function (scaleDenominator, crs) {\n // ------------------------------------------------- //\n // Code issu de l'API Geoportal/Catalogue/Config.js //\n // ------------------------------------------------- //\n // var configuration = Gp.Config;\n // var general = configuration.generalOptions;\n // var layers = configuration.layersContext;\n //\n // for (var tms in general.tileMatrixSets) {\n // var tileMatrixSet = general.tileMatrixSets[tms];\n // // IGN's WMTS bug : epsg:nnnn instead of EPSG:nnnn\n // var crs = tileMatrixSet.supportedCRS = tileMatrixSet.supportedCRS.replace(/epsg/,\"EPSG\");\n //\n // if (!Geoportal.Catalogue.CRSRESOLUTIONS.hasOwnProperty(crs)) {\n // var p= new OpenLayers.Projection(crs);\n // Geoportal.Catalogue.CRSRESOLUTIONS[crs]= [];\n // var matrixIds= tileMatrixSet.matrixIds;\n // for (var i= 0, li= matrixIds.length; i} params.extent - map current geographical extent (EPSG:4326) : [top, left, bottom, right] = [maxy, minx, miny, maxx]\n * @param {Number} params.zoom - map current zoom\n * @param {String} params.crs - map current projection code (ex \"EPSG:2154\")\n * @param {Boolean} params.visibility - layer visibility\n * @param {Gp.Services.Config.Originator} params.originators - resource originators (from Gp.Config.layers[].originators)\n * @returns {Object} attributions - associative array, mapping originators url (keys) with their properties : html attributions elements\n */\n getAttributions : function (params) {\n var zoom = params.zoom;\n\n var attributions = [];\n\n if (params.originators != null && params.visibility) {\n // drawLogo = boolean, true if attribution should be displayed (zoom, extent), false otherwise\n var drawLogo;\n for (var j = 0, jl = params.originators.length; j < jl; j++) {\n drawLogo = true;\n var originator = params.originators[j];\n\n var constraints = params.originators[j].constraints || [];\n for (var k = 0, kl = constraints.length; k < kl; k++) {\n var constraint = constraints[k];\n drawLogo = true;\n\n var minZoomLevel = this.getZoomLevelFromScaleDenominator(constraint.maxScaleDenominator, params.crs);\n var maxZoomLevel = this.getZoomLevelFromScaleDenominator(constraint.minScaleDenominator, params.crs) || 21;\n\n // min zoom constraints\n if (minZoomLevel && (minZoomLevel > zoom)) {\n drawLogo = false;\n }\n\n // max zoom constraints\n if (drawLogo && maxZoomLevel && (maxZoomLevel < zoom)) {\n drawLogo = false;\n }\n\n // bbox constraints\n var bbox = constraint.bbox;\n if (drawLogo && bbox) {\n drawLogo = false;\n var viewExtent = params.extent;\n if (viewExtent) {\n var bounds = [bbox.top, bbox.left, bbox.bottom, bbox.right];\n if (this.intersects(viewExtent, bounds)) {\n // at least one constraint matches the map ones\n drawLogo = true;\n break;\n }\n }\n }\n }\n\n if (drawLogo) {\n // on a un originator qui correspond au zoom et à l'étendue.\n\n var logo = originator.logo;\n var url = originator.url;\n var name = originator.name ? originator.name : \"\";\n var text = originator.attribution;\n\n var container = document.createElement(\"div\");\n container.className = \"gp-control-attribution\";\n\n // on crée un lien dans tous les cas (même s'il ne pointe pas vers une référence), pour avoir accès à la class CSS (pour surcharge)\n var link = null;\n link = document.createElement(\"a\");\n link.className = \"gp-control-attribution-link\";\n link.target = \"_blank\";\n container.appendChild(link);\n if (url) {\n link.href = url;\n }\n\n var bImage = !!(logo);\n var image = null;\n // si on a un logo, on l'affiche à l'interieur du lien\n if (bImage) {\n image = document.createElement(\"img\");\n if (link) {\n image.className = \"gp-control-attribution-image\";\n link.appendChild(image);\n } else {\n image.className = \"\";\n container.appendChild(image);\n }\n image.src = logo;\n image.title = text || name;\n image.style.height = \"30px\";\n image.style.width = \"30px\";\n } else {\n // sinon, on affiche le nom de l'originator, ou sa description ou l'url.\n if (name) {\n link.textContent = name;\n } else if (text) {\n link.textContent = text;\n } else if (url) {\n link.textContent = url;\n } else {\n link.textContent = \"\";\n }\n }\n\n attributions.push(container.innerHTML + \" \");\n }\n }\n }\n\n return attributions;\n },\n\n /**\n * Determines if one extent (extent1) intersects another (extent2)\n *\n * @function intersects\n * @param {Array.} extent1 - First extent : [top, left, bottom, right] = [maxy, minx, miny, maxx]\n * @param {Array.} extent2 - Second extent : [top, left, bottom, right] = [maxy, minx, miny, maxx]\n * @return {Boolean} intersects - True if the two extents intersect, false otherwise.\n */\n intersects : function (extent1, extent2) {\n var intersectsX = (extent1[1] <= extent2[3]) && (extent2[1] <= extent1[3]);\n var intersectsY = (extent1[2] <= extent2[0]) && (extent2[2] <= extent1[0]);\n return intersectsX && intersectsY;\n }\n};\n\nexport default LayerUtils;\n","import Gp from \"geoportal-access-lib\";\n// import OpenLayers\nimport WMTSTileGrid from \"ol/tilegrid/WMTS\";\n// import local with ol dependencies\nimport WMTSExtended from \"../Sources/WMTS\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport LayerUtils from \"../Utils/LayerUtils\";\nimport Logger from \"../Utils/LoggerByDefault\";\nimport Config from \"../Utils/Config\";\n// package.json (extract version)\nimport Pkg from \"../../../package.json\";\n\nvar logger = Logger.getLogger(\"sourcewmts\");\n\n/**\n * @classdesc\n * Geoportal WMTS source creation (inherit from ol.source.WMTS)\n *\n * @constructor\n * @alias ol.source.GeoportalWMTS\n * @type {ol.source.GeoportalWMTS}\n * @extends {WMTSExtended}\n * @param {Object} options - options for function call.\n * @param {String} options.layer - Layer name (e.g. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {Object} [options.configuration] - configuration (cf. example) \n * @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n * @param {String} [options.apiKey] - Access key to Geoportal platform\n * @param {Array} [options.legends] - Legends objects associated to the layer\n * @param {Array} [options.metadata] - Metadata objects associated to the layer\n * @param {String} [options.title] - title of the layer\n * @param {String} [options.description] - description of the layer\n * @param {String} [options.quicklookUrl] - quicklookUrl of the layer\n * @param {Object} [options.olParams] - other options for ol.source.WMTS function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.WMTS.html ol.source.WMTS})\n * @example\n * var sourceWMTS = new ol.source.GeoportalWMTS({\n * layer : \"ORTHOIMAGERY.ORTHOPHOTOS\"\n * });\n */\nvar SourceWMTS = class SourceWMTS extends WMTSExtended {\n\n constructor (options) {\n // if (!(this instanceof SourceWMTS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n\n // check layer params\n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n\n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n\n // configuration de la ressource\n var layerCfg = options.configuration;\n var wmtsParams = (layerCfg) ? layerCfg.params : null;\n var apiKey = options.apiKey;\n \n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n\n var layerId = Config.configuration.getLayerId(options.layer, \"WMTS\");\n if (!layerId) {\n throw new Error(`ERROR : WMTS Layer ID ${options.layer} cannot be found in Geoportal Configuration. Make sure that this resource is included in your contract key.`);\n }\n\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : WMTS Layer configuration cannot be found in Geoportal.\");\n }\n\n apiKey = Config.configuration.getLayerKey(layerId)[0];\n wmtsParams = Config.configuration.getLayerParams(options.layer, \"WMTS\");\n }\n\n // si ssl = false on fait du http\n // par défaut, ssl = true, on fait du https\n var protocol = options.ssl === false ? \"http://\" : \"https://\";\n\n var urlParams = {\n \"gp-ol-ext\" : Pkg.olExtVersion || Pkg.version\n };\n if (wmtsParams.url.includes(\"/private/\")) {\n // si l'url est privée\n // Ajout de la clef d'API fournie par l'utilisateur en prioritée\n // ou récupérée depuis la configuration\n var key = options.apiKey || apiKey;\n if (!key) {\n throw new Error(\"ERROR : WMS Layer apiKey cannot be found in Geoportal Configuration.\");\n }\n urlParams[\"apikey\"] = key;\n }\n\n var wmtsSourceOptions = {\n // tracker extension openlayers\n // FIXME : gp-ext version en mode AMD\n url : Gp.Helper.normalyzeUrl(wmtsParams.url.replace(/(http|https):\\/\\//, protocol), urlParams, false),\n version : wmtsParams.version,\n style : wmtsParams.styles,\n format : wmtsParams.format,\n projection : wmtsParams.projection,\n maxZoom : LayerUtils.getZoomLevelFromScaleDenominator(wmtsParams.minScale),\n layer : options.layer,\n matrixSet : wmtsParams.TMSLink,\n tileGrid : new WMTSTileGrid({\n resolutions : wmtsParams.nativeResolutions,\n matrixIds : wmtsParams.matrixIds,\n origin : [Object.values(wmtsParams.tileMatrices)[0].topLeftCorner.x, Object.values(wmtsParams.tileMatrices)[0].topLeftCorner.y]\n }),\n crossOrigin : \"anonymous\"\n };\n\n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(wmtsSourceOptions, options.olParams);\n\n // on surcharge les originators (non récupérés depuis configuration de la couche)\n if (options.olParams && !wmtsParams.originators) {\n wmtsParams.originators = options.olParams.attributions;\n }\n \n // returns a WMTS object, that inherits from WMTSExtended.\n super(wmtsSourceOptions);\n\n // add originators to layer source (to be updated by Originators control)\n this._originators = wmtsParams.originators;\n\n // add legends and metadata (to be added to LayerSwitcher control)\n this._legends = options.legends || wmtsParams.legends;\n this._metadata = options.metadata || wmtsParams.metadata;\n this._description = options.description || wmtsParams.description;\n this._title = options.title || wmtsParams.title;\n this._quicklookUrl = options.quicklookUrl || wmtsParams.quicklookUrl;\n\n this.name = options.layer;\n this.service = \"WMTS\";\n \n return this;\n }\n\n};\n\nexport default SourceWMTS;\n\n// Expose SourceWMTS as ol.source.GeoportalWMTS. (for a build bundle)\nif (window.ol && window.ol.source) {\n window.ol.source.GeoportalWMTS = SourceWMTS;\n}\n","/**\n * @classdesc\n * \n * Gestion du service de recherche de couches\n * \n * @module Search\n * @alias module:~services/Search\n * @fixme en attente d'evolution du service pour le filtrage sur le type \n * afin d'écarter des reponses de la recherche (ex. DOWNLOAD)\n * @see https://geoservices.ign.fr/documentation/services/services-geoplateforme/service-geoplateforme-de-recherche\n */\n\n/** resultats du service */\nlet m_suggestions = [];\n\n/** gestion annulation du fetch */\nlet controller = new AbortController();\n\n/** index de recherche */\nlet m_index = \"geoplateforme\";\n\n/** \n * liste des champs de recherche\n * valeurs : \"title, description, theme, keywords, layer_name\"\n */\nlet m_fields = \"title,layer_name\";\n\n/** nombre de suggestions du service */\nlet m_size = \"1000\";\n\n/** nombre maximum de réponses */\nlet m_maximumResponses = 10;\n\n/** \n * liste des filtres sur les services\n * @type {Array}\n * @example\n * valeurs : [\"WMTS\", \"TMS\", \"WMS\", \"WFS\", ...]\n */\nlet m_filterByService = [\"WMTS\", \"TMS\"];\n\n/** \n * liste des couches à exclure avec ces projections \n * @type {Array}\n * @example\n * [\"EPSG:4326\",...]\n */\nlet m_filterByProjection = [];\n\n/** \n * liste des couches priortaires dans la recherche\n * sous la forme : [name]\n * > mettre un poids au score des couches que l'on souhaite \n * > mettre en avant dans la recherche\n * \n * @type {Array}\n * @example\n * \"PLAN.IGN$GEOPORTAIL:GPP:TMS\" ou \"PLAN.IGN:TMS\" ou \"PLAN.IGN\"\n * \n */\nlet m_filterByLayerPriority = [];\n\n/** Prioriser les couches de type WMTS sur le service WMS */\nlet m_filterWMTSPriority = false;\n\n/** \n * filtres les services uniquement en TMS\n * @fixme en attente d'evolution du service pour determiner les \"real\" couches vecteurs\n * @type {Array}\n */\nlet m_filterByTMS = [\n \"ADMIN_EXPRESS\",\n \"ISOHYPSE\",\n \"PLAN.IGN\",\n \"OCSGE_2016\",\n \"OCSGE_2019\",\n \"PCI\",\n \"BDTOPO\"\n];\n\n/** url du service (template avec ${m_index}) */\nlet m_url = `https://data.geopf.fr/recherche/api/indexes/${m_index}/suggest`;\n\n/**\n * Interface pour les evenements\n * @example\n * target.dispatchEvent(new CustomEvent(\"myEvent\", { detail : {} }));\n * target.addEventListener(\"myEvent\", handler);\n */\nconst target = new EventTarget();\n\n/**\n * Appel du service de recherche\n * @param {*} text - recherche\n * @returns {Object} json\n * @fire suggest\n * @example\n * {\n * \"attribution\": {},\n * \"srs\": [\n * \"EPSG:3857\"\n * ],\n * \"keywords\": [],\n * \"extent\": {\n * \"type\": \"Polygon\",\n * \"coordinates\": [\n * [\n * [\n * 55.9423828,\n * -21.5354858\n * ],\n * [\n * 55.9423828,\n * 51.1237818\n * ],\n * [\n * -63.28125,\n * 51.1237818\n * ],\n * [\n * -63.28125,\n * -21.5354858\n * ],\n * [\n * 55.9423828,\n * -21.5354858\n * ]\n * ]\n * ]\n * },\n * \"metadata\": [],\n * \"name\": \"PLAN.IGN\",\n * \"title\": \"Plan IGN\",\n * \"description\": \"Plan IGN personnalisable\",\n * \"service\": \"TMS\",\n * \"url\": \"https://data.geopf.fr/tms/1.0.0/PLAN.IGN\"\n * }\n * @fire suggest\n */\nconst suggest = async (text) => {\n // ex. request\n // https://data.geopf.fr/recherche/api/indexes/geoplateforme/suggest?text=ORTHO&fields=title\n clear();\n\n controller = new AbortController();\n\n let url = new URL(m_url);\n let params = {\n text : text,\n fields : m_fields,\n size : m_size\n };\n\n Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));\n\n var response = await fetch(url, {\n // FIXME\n // signal : controller.signal\n });\n\n var results = await response.json();\n\n if (response.status !== 200) {\n throw new Error(response.message);\n }\n\n // ex. response\n // [\n // {\n // \"index\": \"geoplateforme\",\n // \"score\": 3.4832718,\n // \"source\": {\n // \"id\": \"fc2af911-d9c2-4fc8-aee7-46034eebf821\",\n // \"offering_id\": \"faa4c69c-d03b-4502-af87-7f3667411321\",\n // \"index_name\": \"geoplateforme\",\n // \"layer_name\": \"nl_bdtopo_allauch\",\n // \"title\": \"NL - BD Topo : Allauch\",\n // \"description\": \"Extrait de BD TOPo sur Allauch\",\n // \"type\": \"WMS\",\n // \"url\": \"https://data.geopf.fr/wms-v?service=WMS&version=1.3.0&request=GetMap&layers=nl_bdtopo_allauch&bbox={xmin},{ymin},{xmax},{ymax}&styles={styles}&width={width}&height={height}&srs={srs}&format={format}\",\n // \"open\": true,\n // \"publication_date\": \"2023-11-27\",\n // \"keywords\": [\n // \"BDTOPO\",\n // \"Recette\"\n // ],\n // \"extent\": {},\n // \"metadata_urls\": [],\n // \"srs\": [\n // \"EPSG:2154\"\n // ],\n // \"attribution\": {\n // \"title\": \"Ministère de la Transition écologique et de la Cohésion des territoires\",\n // \"url\": \"https://www.ecologie.gouv.fr/\",\n // \"logo\": {\n // \"format\": \"image/png\",\n // \"url\": \"https://data.geopf.fr/annexes/ressources/logos/mtect.png\",\n // \"width\": 294,\n // \"height\": 171\n // }\n // }\n // }\n // }\n // ]\n if (!results || results.length === 0) {\n return;\n }\n\n // INFO\n // Attribution d'un score bonus aux couches priortaires,\n // puis retriage des résultats en fonction du score\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n const found = m_filterByLayerPriority.findIndex((element) => { return element.includes(result.source.layer_name); });\n if (found >= 0) {\n results[i].score += 100;\n // console.log(\"found\", result);\n }\n }\n results.sort((a, b) => b.score - a.score);\n\n var filter = null;\n if (m_filterWMTSPriority) {\n filter = inventory(results);\n }\n\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n var services = (m_filterByService.length === 0 || m_filterByService.includes(result.source.type));\n // FIXME \n // utilisation le champ : result.source.open ?\n if (services) {\n if (unique().length >= m_maximumResponses) {\n break;\n }\n // INFO\n // champs possibles mais pas toujours remplis :\n // srs[], attributions{}, extent{}, metada_url[]\n var o = {\n attribution : result.source.attribution || {},\n srs : result.source.srs || [],\n keywords : result.source.keywords || [],\n extent : result.source.extent || {},\n metadata : result.source.metadata_urls || [], // mapping ?\n name : result.source.layer_name || \"\",\n title : result.source.title || \"\",\n description : result.source.description,\n service : result.source.type || \"\", // mapping\n url : result.source.url || \"\",\n tech : result.source.tech || {},\n tags : result.source.tags || {},\n theme : result.source.theme || \"\",\n producer : result.source.producer || \"\"\n };\n if (m_filterByTMS.length) {\n if ((o.service === \"WMTS\" && m_filterByTMS.includes(o.name)) ||\n (o.service === \"TMS\" && !m_filterByTMS.includes(o.name))) {\n continue;\n }\n }\n if (m_filterByProjection.length) {\n // FIXME Array !?\n if (m_filterByProjection.includes(o.srs[0])) {\n continue;\n }\n }\n if (filter && filter[o.name] && o.service === \"WMS\") {\n continue;\n }\n m_suggestions.push(o);\n // console.log(\"suggestion\", result);\n }\n }\n\n target.dispatchEvent(\n new CustomEvent(\"suggest\", {\n bubbles : true,\n detail : getSuggestions()\n })\n );\n\n return getSuggestions();\n};\n\n/**\n * Retourne la liste des suggestions sans doublons\n * @returns {Object} liste des suggestions sans doublons\n */\nconst unique = () => {\n return m_suggestions.filter((value, index, self) =>\n index === self.findIndex((t) => (\n t.service === value.service &&\n t.name === value.name &&\n t.title === value.title &&\n t.description === value.description\n ))\n );\n // INFO\n // soit on trie, \n // soit on laisse le trie natif en fonction du score\n // .sort((a, b) => {\n // // INFO\n // // titleA (WMTS)\n // // titleA (WMS)\n // // titleA (WFS)\n // // titleA (TMS)\n // // titleB (WMTS)\n // return a.title.localeCompare(b.title) || b.service - a.service;\n // });\n};\n\n/**\n * Clear\n */\nconst clear = () => {\n controller.abort();\n m_suggestions = [];\n};\n\n/** \n * Determine si une couche est associé avec des services WMS et/ou WMTS\n * \n * true : WMTS only ou WMTS avec des WMS associés ou pas\n * false : WMS only\n * @param {Array} results - réponse de la recherche\n * @returns {Object} - ...\n * @example\n * {\n * PLAN.IGN: true, // WMTS et des WMS\n * BDTOPO:batiments: false // uniquements des WMS\n * }\n */\nconst inventory = (results) => {\n var inventory = {};\n for (let i = 0; i < results.length; i++) {\n const type = results[i].source.type;\n const name = results[i].source.layer_name;\n if (type === \"WMTS\" || type === \"WMS\") {\n if (inventory[name] === undefined) {\n inventory[name] = type === \"WMTS\";\n }\n inventory[name] ||= type === \"WMTS\";\n }\n }\n // console.log(inventory);\n return inventory;\n};\n\n// getter (reponse)\n\n/**\n * Liste des suggestions (unique)\n * @returns {Array} Liste des suggestions (unique)\n */\nconst getSuggestions = () => {\n return unique();\n};\n/**\n * Liste des noms (unique)\n * @returns {Array} Liste des noms (unique)\n */\nconst getNames = () => {\n return unique().map((o) => { return o.name; });\n};\n/**\n * Liste des titres (unique)\n * @returns {Array} Liste des titres (unique)\n */\nconst getTitles = () => {\n return unique().map((o) => { return o.title; });\n};\n\n// setter (conf)\n\n/**\n * Renseigne le nom de l'indexe\n * @param {String} value - nom de l'indexe\n * @see m_index\n */\nconst setIndex = (value) => {\n m_index = value;\n};\n/**\n * Renseigne la liste des champs de recherche\n * @param {Array} value - liste des champs de recherche\n * @see m_fields\n */\nconst setFields = (value) => {\n m_fields = value;\n};\n/**\n * Renseigne le nombre de suggestions du service\n * @param {Number} value - le nombre de suggestions du service\n * @see m_size\n */\nconst setSize = (value) => {\n m_size = parseInt(value);\n};\n/**\n * Renseigne l'url du service\n * @param {String} value - url du service\n * @see m_url\n */\nconst setUrl = (value) => {\n m_url = eval(\"`\" + value + \"`\"); // insecure !\n};\n/**\n * Renseigne le nombre de réponse souhaitée\n * @param {Number} value - nombre de réponse\n * @see m_maximumResponses\n */\nconst setMaximumResponses = (value) => {\n m_maximumResponses = parseInt(value);\n};\n/**\n * Filtre sur la liste des services à selectionner\n * @param {String} value - liste de service\n * @see m_filterByService\n */\nconst setFiltersByService = (value) => {\n m_filterByService = value === \"\" ? [] : value.split(\",\");\n};\n/**\n * Filtre sur les couches à exclure\n * @param {String} value - liste des projections\n * @see m_filterByProjection\n */\nconst setFiltersByProjection = (value) => {\n m_filterByProjection = value === \"\" ? [] : value.split(\",\");\n};\n/**\n * Filtre sur les couches prioritaires dans la recherche\n * @param {String} value - liste des couches prioritaires\n * @see m_filterByLayerPriority\n */\nconst setFiltersByLayerPriority = (value) => {\n m_filterByLayerPriority = value === \"\" ? [] : value.split(\",\");\n};\n/** \n * Active ou non le filtre 'strange' \n * @param {Boolean} value - active le filtre\n */\nconst setFilterWMTSPriority = (value) => {\n m_filterWMTSPriority = value;\n};\n/**\n * Filtre sur les \"purs\" couches vecteurs tuilés\n * @param {String} value - liste des couches\n * @see m_filterByTMS\n */\nconst setFiltersByTMS = (value) => {\n m_filterByTMS = value === \"\" ? [] : value.split(\",\");\n};\n/**\n * Mise à jour de la liste des \"purs\" couches vecteurs tuilés\n * @param {String} value - url\n */\nconst updateFilterByTMS = async (value) => {\n var url = value;\n if (!url) {\n url = \"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/vectorTileConfig/fullVectorTileConfig.json\";\n }\n const response = await fetch(url);\n const results = await response.json();\n\n if (response.status !== 200) {\n throw new Error(response.message);\n }\n\n if (!results) {\n throw new Error(\"Liste vide !\");\n }\n\n var lstName = Object.keys(results.layers).map((k) => { return k.split(\"$\")[0]; });\n if (lstName) {\n setFiltersByTMS(lstName.toString());\n }\n\n return m_filterByTMS;\n};\n\nexport default {\n target,\n suggest,\n clear,\n getSuggestions,\n getNames,\n getTitles,\n setIndex,\n setFields,\n setSize,\n setUrl,\n setMaximumResponses,\n setFiltersByService,\n setFiltersByTMS,\n updateFilterByTMS,\n setFiltersByProjection,\n setFiltersByLayerPriority,\n setFilterWMTSPriority\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.WMTS;","// import OpenLayers\nimport WMTSSource from \"ol/source/WMTS\";\nimport {\n extend,\n createEmpty as olCreateEmpty,\n getWidth as olGetWidth,\n intersects as olIntersects\n} from \"ol/extent\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Utils from \"../Utils/Helper\";\n\n/**\n * @classdesc\n *\n * Extended ol.source.WMTS.\n *\n * @constructor\n * @alias ol.source.WMTSExtended\n * @type {ol.source.WMTS}\n * @extends {ol.source.WMTS}\n * @param {Object} options - Options\n */\nvar WMTS = class WMTS extends WMTSSource {\n\n constructor (options) {\n // if (!(this instanceof WMTS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n\n // call constructor\n super(options);\n }\n\n /**\n * Return the GetFeatureInfo URL for the passed coordinate, resolution, and\n * projection. Return `undefined` if the GetFeatureInfo URL cannot be\n * constructed.\n * @param {ol.Coordinate} coordinate - Coordinate.\n * @param {Number} resolution - Resolution.\n * @param {ol.proj.Projection} projection - Projection.\n * @param {!Object} params - GetFeatureInfo params. `INFOFORMAT` at least should\n * be provided.\n * @return {String|undefined} GetFeatureInfo URL.\n */\n getFeatureInfoUrl (coordinate, resolution, projection, params) {\n // INFO\n // en fonction de la version d'openlayers, la méthode est differente :\n // - getGetFeatureInfoUrl en v5\n // - getFeatureInfoUrl en v6\n var pixelRatio = (this.options && this.options.tilePixelRatio) ? this.options.tilePixelRatio : 1;\n\n var tileGrid = this.tileGrid;\n var tileCoord = this.tileGrid.getTileCoordForCoordAndResolution(coordinate, resolution);\n\n // this code is duplicated from createFromWMTSTemplate function\n var getTransformedTileCoord = function (tileCoord, tileGrid, projection) {\n var tmpTileCoord = [0, 0, 0]; /* Note : [z(zoomLevel),x,y] */\n var tmpExtent = olCreateEmpty();\n var x = tileCoord[1];\n var y = tileCoord[2];\n var tileExtent = tileGrid.getTileCoordExtent(tileCoord);\n var extent = projection.getExtent();\n\n if (extent != null && projection.isGlobal()) {\n var numCols = Math.ceil(olGetWidth(extent) / olGetWidth(tileExtent));\n x = x % numCols;\n tmpTileCoord[0] = tileCoord[0];\n tmpTileCoord[1] = x;\n tmpTileCoord[2] = tileCoord[2];\n tileExtent = tileGrid.getTileCoordExtent(tmpTileCoord, tmpExtent);\n }\n if (!olIntersects(tileExtent, extent) /* || ol.extent.touches(tileExtent, extent) */) {\n return null;\n }\n return [tileCoord[0], x, y];\n };\n\n var tileExtent = tileGrid.getTileCoordExtent(tileCoord);\n var transformedTileCoord = getTransformedTileCoord(tileCoord, tileGrid, projection);\n\n if (tileGrid.getResolutions().length <= tileCoord[0]) {\n return undefined;\n }\n\n var tileResolution = tileGrid.getResolution(tileCoord[0]);\n var tileMatrix = tileGrid.getMatrixIds()[tileCoord[0]];\n\n var baseParams = {\n SERVICE : \"WMTS\",\n VERSION : \"1.0.0\",\n REQUEST : \"GetFeatureInfo\",\n LAYER : this.getLayer(),\n TILECOL : transformedTileCoord[1],\n TILEROW : transformedTileCoord[2],\n TILEMATRIX : tileMatrix,\n TILEMATRIXSET : this.getMatrixSet(),\n FORMAT : this.getFormat() || \"image/png\",\n STYLE : this.getStyle() || \"normal\"\n };\n\n Utils.assign(baseParams, params);\n\n /* var tileSize = tileGrid.getTileSize();\n var x = Math.floor(tileSize*((coordinate[0]-tileExtent[0])/(tileExtent[2]-tileExtent[0])));\n var y = Math.floor(tileSize*((tileExtent[3]-coordinate[1])/(tileExtent[3]-tileExtent[1]))); */\n\n var x = Math.floor((coordinate[0] - tileExtent[0]) / (tileResolution / pixelRatio));\n var y = Math.floor((tileExtent[3] - coordinate[1]) / (tileResolution / pixelRatio));\n\n /* patch parce que la fonction getTileCoordForCoordAndResolution(coords,res) d'Openlayers peut renvoyer\n une tuile dont l'étendue (getTileCoordExtent) ne contient pas le point passé en paramètre (coords) */\n var tileSize = tileGrid.getTileSize(tileCoord[0]);\n x = Math.min(x, (tileSize[0] | tileSize) - 1);\n y = Math.max(y, 0);\n\n baseParams[\"I\"] = x;\n baseParams[\"J\"] = y;\n\n var url = this.urls[0];\n\n var featureInfoUrl = Gp.Helper.normalyzeUrl(url, baseParams);\n\n return featureInfoUrl;\n };\n\n};\n\nexport default WMTS;\n\n// Expose WMTS as ol.source.WMTSExtended. (for a build bundle)\nif (window.ol && window.ol.source) {\n window.ol.source.WMTSExtended = WMTS;\n}\n","/**\n * @module Config\n * @alias module:~utils/Config\n * @private\n * @description\n * ...\n *\n * @example\n * isConfigLoaded();\n */\nvar Config = {\n\n /**\n * Config\n *\n * @public\n * @type {Object}\n */\n configuration : {},\n\n /**\n * Check if the configuration is loaded\n *\n * @returns {Boolean} True if Config is loaded, false otherwise\n */\n isConfigLoaded : function () {\n // config already loaded !\n if (this.configuration && Object.keys(this.configuration).length !== 0) {\n return true;\n }\n var scope = typeof window !== \"undefined\" ? window : typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : {};\n if (scope.Gp && scope.Gp.Config && scope.Gp.Config.layers && Object.keys(scope.Gp.Config.layers).length !== 0) {\n /** ts-syntax */ (this.configuration) = scope.Gp.Config;\n return true;\n }\n return false;\n }\n\n};\n\nexport default Config;\n","/**\n* @module Helper\n* @alias module:~utils/HelperUtils\n* @description\n* ...\n*\n* @example\n* import HelperUtils from \"gpf-ext-ol/utils/HelperUtils\"\n* ou \n* import {HelperUtils} from \"gpf-ext-ol\n* \n* HelperUtils.detectSupport();\n* HelperUtils.assign();\n* HelperUtils.mergeParams();\n*/\nvar Helper = {\n\n /**\n * this method is called by the constructor.\n * this information is useful to switch to touch mode.\n * Detection : test for desktop or tactile\n *\n * @function detectSupport\n * @returns {Boolean} isDesktop - true for desktop userAgent, false for mobile\n */\n detectSupport : function () {\n var isDesktop = true;\n var userAgent = window.navigator.userAgent.toLowerCase();\n\n if (userAgent.indexOf(\"iphone\") !== -1 ||\n userAgent.indexOf(\"ipod\") !== -1 ||\n userAgent.indexOf(\"ipad\") !== -1 ||\n userAgent.indexOf(\"android\") !== -1 ||\n userAgent.indexOf(\"mobile\") !== -1 ||\n userAgent.indexOf(\"blackberry\") !== -1 ||\n userAgent.indexOf(\"tablet\") !== -1 ||\n userAgent.indexOf(\"phone\") !== -1 ||\n userAgent.indexOf(\"touch\") !== -1) {\n isDesktop = false;\n }\n\n if (userAgent.indexOf(\"msie\") !== -1 ||\n userAgent.indexOf(\"trident\") !== -1) {\n isDesktop = true;\n }\n\n return isDesktop;\n },\n\n /**\n * Copies all source object members to dest\n *\n * @function assign\n * @param {Object} dest - destination object where properties and method will be copied\n * @param {Object} source - source object from which properties and method will be copied\n * @returns {Object} dest\n */\n assign : function (dest, source) {\n dest = dest || {};\n for (var prop in source) {\n if (source.hasOwnProperty(prop)) {\n dest[prop] = source[prop];\n }\n }\n return dest;\n },\n\n /**\n * Merge two objects parameters (deeper than assign)\n *\n * @function mergeParams\n * @param {Object} dest - destination object where properties and method will be merge\n * @param {Object} source - source object from which properties and method will be merge\n * @param {Boolean} replace - replace destination value by source if exists or not (true by default)\n */\n mergeParams : function (dest, source, replace) {\n if (typeof dest === \"undefined\" || typeof source === \"undefined\") {\n return;\n }\n if (typeof replace === \"undefined\") {\n replace = true;\n }\n for (var param in source) {\n if (source.hasOwnProperty(param)) {\n if (typeof source[param] === \"object\") {\n if (dest.hasOwnProperty(param)) {\n this.mergeParams(dest[param], source[param], replace);\n } else {\n dest[param] = source[param];\n }\n } else {\n if (dest.hasOwnProperty(param)) {\n if (replace) {\n dest[param] = source[param];\n }\n } else {\n dest[param] = source[param];\n }\n }\n }\n }\n }\n};\n\nexport default Helper;\n","import * as Log from \"loglevel\";\n\n/**\n * @module LoggerByDefault\n * @alias module:~utils/Logger\n * @description\n * ...\n *\n * @example\n * import Logger from \"gpf-ext-ol/utils/LoggerByDefault\"\n * ou \n * import {Logger} from \"gpf-ext-ol\n * \n * Logger.getLogger();\n * Logger.disableAll();\n * Logger.enableAll();\n */\nvar LoggerByDefault = {\n /**\n * creation d'un logger statique\n *\n * @function getLogger\n * @param {String} [name=\"default\"] - the logger name\n * @returns {Object} logger\n */\n getLogger : function (name) {\n // on définit process si non défini dans l'environnement\n if (typeof process === \"undefined\") {\n var process = {};\n process.env = {\n VERBOSE : false\n };\n }\n (process.env.VERBOSE) ? Log.enableAll() : Log.disableAll();\n var logname = name || \"default\";\n return Log.getLogger(logname);\n },\n /**\n * desactive tous les loggers\n * @function disableAll\n */\n disableAll : function () {\n var loggers = Log.getLoggers();\n for (const key in loggers) {\n if (Object.hasOwnProperty.call(loggers, key)) {\n const logger = loggers[key];\n logger.disableAll();\n }\n }\n },\n /**\n * active tous les loggers\n * @function enableAll\n */\n enableAll : function () {\n var loggers = Log.getLoggers();\n for (const key in loggers) {\n if (Object.hasOwnProperty.call(loggers, key)) {\n const logger = loggers[key];\n logger.enableAll();\n }\n }\n }\n};\n\nexport default LoggerByDefault;\n\n// Expose Export as ol.control.Catalog (for a build bundle)\nif (window.Gp) {\n window.Gp.Logger = LoggerByDefault;\n}\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version v4.2.8+1e68dce6\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\n\n\nvar _isArray = void 0;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var vertx = Function('return this')().require('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n\n if (_state) {\n var callback = arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve$1(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n try {\n then$$1.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then$$1, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$1 === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$1)) {\n handleForeignThenable(promise, maybeThenable, then$$1);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n var then$$1 = void 0;\n try {\n then$$1 = value.then;\n } catch (error) {\n reject(promise, error);\n return;\n }\n handleMaybeThenable(promise, value, then$$1);\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = void 0,\n callback = void 0,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = void 0,\n error = void 0,\n succeeded = true;\n\n if (hasCallback) {\n try {\n value = callback(detail);\n } catch (e) {\n succeeded = false;\n error = e;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (succeeded === false) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n}\n\nvar Enumerator = function () {\n function Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n }\n\n Enumerator.prototype._enumerate = function _enumerate(input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n var c = this._instanceConstructor;\n var resolve$$1 = c.resolve;\n\n\n if (resolve$$1 === resolve$1) {\n var _then = void 0;\n var error = void 0;\n var didError = false;\n try {\n _then = entry.then;\n } catch (e) {\n didError = true;\n error = e;\n }\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise$1) {\n var promise = new c(noop);\n if (didError) {\n reject(promise, error);\n } else {\n handleMaybeThenable(promise, entry, _then);\n }\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$1) {\n return resolve$$1(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$1(entry), i);\n }\n };\n\n Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n var promise = this.promise;\n\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n };\n\n Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n };\n\n return Enumerator;\n}();\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all(entries) {\n return new Enumerator(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {Function} resolver\n Useful for tooling.\n @constructor\n*/\n\nvar Promise$1 = function () {\n function Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n }\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n Chaining\n --------\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n Assimilation\n ------------\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n If the assimliated promise rejects, then the downstream promise will also reject.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n Simple Example\n --------------\n Synchronous Example\n ```javascript\n let result;\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n Advanced Example\n --------------\n Synchronous Example\n ```javascript\n let author, books;\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n function foundBooks(books) {\n }\n function failure(reason) {\n }\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n\n\n Promise.prototype.catch = function _catch(onRejection) {\n return this.then(null, onRejection);\n };\n\n /**\n `finally` will be invoked regardless of the promise's fate just as native\n try/catch/finally behaves\n \n Synchronous example:\n \n ```js\n findAuthor() {\n if (Math.random() > 0.5) {\n throw new Error();\n }\n return new Author();\n }\n \n try {\n return findAuthor(); // succeed or fail\n } catch(error) {\n return findOtherAuther();\n } finally {\n // always runs\n // doesn't affect the return value\n }\n ```\n \n Asynchronous example:\n \n ```js\n findAuthor().catch(function(reason){\n return findOtherAuther();\n }).finally(function(){\n // author was either found, or not\n });\n ```\n \n @method finally\n @param {Function} callback\n @return {Promise}\n */\n\n\n Promise.prototype.finally = function _finally(callback) {\n var promise = this;\n var constructor = promise.constructor;\n\n if (isFunction(callback)) {\n return promise.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n throw reason;\n });\n });\n }\n\n return promise.then(callback, callback);\n };\n\n return Promise;\n}();\n\nPromise$1.prototype.then = then;\nPromise$1.all = all;\nPromise$1.race = race;\nPromise$1.resolve = resolve$1;\nPromise$1.reject = reject$1;\nPromise$1._setScheduler = setScheduler;\nPromise$1._setAsap = setAsap;\nPromise$1._asap = asap;\n\n/*global self*/\nfunction polyfill() {\n var local = void 0;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$1;\n}\n\n// Strange compat..\nPromise$1.polyfill = polyfill;\nPromise$1.Promise = Promise$1;\n\nreturn Promise$1;\n\n})));\n\n\n\n//# sourceMappingURL=es6-promise.map\n","/**\n * Errors raised by API for one among three reasons : wrong API usage, underlying service error or unknown reason.\n *\n * @property {String} message - Error message\n * @property {Number} status - Error status : when {@link Gp.Error.TYPE_SRVERR}, gives the [HTTP status of the underlying web service response]{@link https://en.wikipedia.org/wiki/List_of_HTTP_status_codes} ; -1 otherwise.\n * @property {String} type - Error type ({@link Gp.Error.TYPE_SRVERR}, {@link Gp.Error.TYPE_USEERR} or {@link Gp.Error.TYPE_UNKERR}).\n *\n * @namespace\n * @alias Gp.Error\n * @param {Object|String} error - Options for creating error object. Can be a String (message) or an Object.\n * @param {String} error.message - Error message to return to user.\n * @param {enum} [error.type=TYPE_UNKERR] - Error type\n * @param {status} [error.status=-1] - Error status : when {@link Gp.Error.TYPE_SRVERR}, gives the [HTTP status of the underlying web service response]{@link https://en.wikipedia.org/wiki/List_of_HTTP_status_codes}.\n *\n */\nfunction ErrorService (error) {\n if (!(this instanceof ErrorService)) {\n throw new TypeError(\"ErrorService constructor cannot be called as a function.\");\n }\n\n var e = error;\n if (typeof error === \"string\" || error instanceof String) {\n this.message = error;\n this.status = -1;\n this.type = ErrorService.TYPE_UNKERR;\n } else {\n this.message = e.message || \"undefined!?\";\n this.type = e.type;\n this.status = e.status || -1;\n }\n\n this.name = \"ErrorService\";\n this.stack = (new Error()).stack;\n}\n\n/**\n * Error raised when underlying geoportal service answers on error.\n *\n * @type {String}\n * @constant\n * @static\n */\nErrorService.TYPE_SRVERR = \"SERVICE_ERROR\";\n/**\n * Error raised when funcion use is inappropriate\n *\n * @type {String}\n * @constant\n * @static\n */\nErrorService.TYPE_USEERR = \"USAGE_ERROR\";\n/**\n * Error raised when API can't perform the job for a reason other than the two other ones.\n *\n * @type {String}\n * @constant\n * @static\n */\nErrorService.TYPE_UNKERR = \"UNKNOWN_ERROR\";\n\n/**\n * @lends module:ErrorService\n */\nErrorService.prototype = Object.create(Error.prototype, {\n constructor : {\n value : ErrorService,\n writable : true,\n configurable : true\n }\n});\n\nexport default ErrorService;\n","import Logger from \"../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n * Standard WPS\n *\n * @constructor\n * @alias Gp.Formats.WPS\n * @param {Object} options - options\n * @param {Object} options.data - objet\n * @param {String} options.method - POST|GET\n * @param {String} options.param.service - \"WPS\"\n * @param {String} options.param.version - \"1.0.0\"\n * @param {String} options.param.identifier - \"gs:WPSElevation|gs:WPSLineElevation\"\n * @param {String} options.param.rawdataoutput - \"result\"\n * @param {String} options.param.request - \"Execute\"\n * @param {Function} options.onsuccess - function callback success (TODO)\n * @param {Function} options.onerror - function callback error (TODO)\n * @private\n */\nfunction WPS (options) {\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur WPS()]\");\n\n if (!(this instanceof WPS)) {\n throw new TypeError(\"WPS constructor cannot be called as a function.\");\n }\n\n this.options = options || {};\n\n /**\n * Objet DATA\n */\n this.DataObject = this.options.data;\n\n if (!this.DataObject) {\n throw new TypeError(\"This data object is not defined !\");\n }\n\n /**\n * param service.\n * Par defaut, \"WPS\".\n */\n this.paramservice = this.options.param.service || \"WPS\";\n\n /**\n * param version.\n * Par defaut, \"1.0.0\".\n */\n this.paramversion = this.options.param.version || \"1.0.0\";\n\n /**\n * param identifier\n * Par defaut, \"gs:WPS\"\n */\n this.paramidentifier = this.options.param.identifier || \"gs:WPS\";\n\n /**\n * param rawdataoutput\n * Par defaut, \"result\".\n */\n this.paramrawdataoutput = this.options.param.rawdataoutput || \"result\";\n\n /**\n * param request\n * Par defaut, \"Execute\".\n */\n this.paramrequest = this.options.param.request || \"Execute\";\n\n /**\n * methode.\n * Par defaut, \"GET\".\n */\n this.method = this.options.method || \"GET\";\n}\n\nWPS.prototype = {\n\n /**\n * @lends module:WPS#\n */\n\n /**\n * request\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : WPS,\n\n /**\n * Template de la requête.\n */\n template : {\n get : {\n value : \"service=__SERVICE__\" +\n \"&version=__VERSION__\" +\n \"&rawdataoutput=__RAWDATAOUTPUT__\" +\n \"&identifier=__IDENTIFIER__\" +\n \"&request=__REQUEST__\" +\n \"&datainputs=\",\n\n input : \"__KEY__=__DATA__\"\n\n },\n post : {\n\n value : \"\" +\n \"\" +\n \"__IDENTIFIER__\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"__RAWDATAOUTPUT__\" +\n \"\" +\n \"\" +\n \"\",\n\n input : \"\" +\n \"__KEY__\" +\n \"\" +\n \"__DATA__\" +\n \"\" +\n \"\"\n }\n },\n\n /**\n * Namespace par defaut de la requete POST.\n *\n * @returns {String} namespace\n */\n namespaceByDefault : function () {\n var ns = [\n \"xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\"\",\n \"xmlns=\\\"http://www.opengis.net/wps/1.0.0\\\"\",\n \"xmlns:wfs=\\\"http://www.opengis.net/wfs\\\"\",\n \"xmlns:wps=\\\"http://www.opengis.net/wps/1.0.0\\\"\",\n \"xmlns:ows=\\\"http://www.opengis.net/ows/1.1\\\"\",\n \"xmlns:gml=\\\"http://www.opengis.net/gml\\\"\",\n \"xmlns:ogc=\\\"http://www.opengis.net/ogc\\\"\",\n \"xmlns:wcs=\\\"http://www.opengis.net/wcs/1.1.1\\\"\",\n \"xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\"\n ];\n\n return ns.join(\" \");\n },\n\n /**\n * Schemalocation par defaut.\n *\n * @returns {String} schemaLocation\n */\n schemaLocationByDefault : function () {\n return \"xsi:schemaLocation=\\\"http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd\\\"\";\n },\n\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out :\n * // service=__SERVICE__\n * // &version=__VERSION__\n * // &rawdataoutput=__RAWDATAOUTPUT__\n * // &identifier=__IDENTIFIER__\n * // &request=__REQUEST__\n * // &datainputs=\"__DATAINPUTS__\"\n * // avec __DATAINPUTS__ = __KEY__=__DATA__;...\n *\n * // POST out :\n * // \n * // \n * // __IDENTIFIER__\n * // \n * // \n * // \n * // \n * // \n * // __RAWDATAOUTPUT__\n * // \n * // \n * // \",\n * // avec __DATAINPUTS__\n * // \n * // __KEY__\n * // \n * // __DATA__\n * // \n * // \n *\n * @returns {Boolean} validation de la construction de la requete\n */\n processRequestString : function () {\n this.logger.trace(\"WPS::processRequestString ()\");\n\n var template = \"\";\n if (this.method === \"POST\") {\n template = this.template.post.value;\n } else if (this.method === \"GET\") {\n template = this.template.get.value;\n } else {\n this.logger.error(\"No other method supported by the service !\");\n return false;\n }\n\n template = template.replace(/__SERVICE__/g, this.paramservice);\n template = template.replace(/__VERSION__/g, this.paramversion);\n template = template.replace(/__RAWDATAOUTPUT__/g, this.paramrawdataoutput);\n template = template.replace(/__IDENTIFIER__/g, this.paramidentifier);\n template = template.replace(/__REQUEST__/g, this.paramrequest);\n\n // ajout +\n if (this.method === \"POST\") {\n template = template.replace(/__NAMESPACE__/g, this.namespaceByDefault);\n template = template.replace(/__SCHEMALOCATION__/g, this.schemaLocationByDefault);\n }\n\n // ajout des datainputs\n template = template.replace(//g, this.__addDataInputs());\n\n if (!template) {\n this.logger.warn(\"traduction tmpl : empty request !?\");\n return false;\n }\n\n this.requestString = template;\n this.logger.trace(\"traduction tmpl\", template);\n\n return true;\n },\n\n /**\n * Ajout des données\n *\n * @returns {String} Données concaténées dans une chaine\n */\n __addDataInputs : function () {\n this.logger.trace(\"WPS::__addDataInputs ()\");\n\n // c'est un peu grossier...\n var tmpl = this.method === \"GET\" ? this.template.get.input : this.template.post.input;\n var sep = this.method === \"GET\" ? \";\" : \"\";\n\n var result = \"\";\n var that = this;\n var map = this.DataObject.getData();\n for (var i = 0; i < map.length; i++) {\n // FIXME closure ?\n (function (j) {\n if (sep) {\n sep = (j === map.length - 1) ? \"\" : \";\";\n }\n result = result.concat(that.__addDataInput(tmpl, map[j].k, map[j].v), sep);\n })(i);\n }\n\n return result;\n },\n\n /**\n * Ajout d'une donnée.\n *\n * @param {String} tmpl - template\n * @param {String} key - clef\n * @param {String} data - valeur\n * @returns {String} chaine avec les substitutions clef/valeur\n */\n __addDataInput : function (tmpl, key, data) {\n var tmp = tmpl;\n tmp = tmp.replace(/__KEY__/g, key);\n tmp = tmp.replace(/__DATA__/g, data);\n return tmp;\n },\n\n /**\n * Definir le mode de requête\n *\n * @param {String} method - GET|POST\n */\n setMethod : function (method) {\n if (method === \"GET\" || method === \"POST\") {\n this.method = method;\n } else {\n this.logger.warn(\"support only GET and POST method !\");\n }\n },\n\n /**\n * Retourne le mode de requete (GET|POST).\n *\n * @returns {AltiRequest.options.mode|String} methode (GET|POST)\n */\n getMethod : function () {\n return this.method;\n }\n};\n\nexport default WPS;\n","/* global require */\n\nimport Logger from \"../Utils/LoggerByDefault\";\n// import __xmldom from \"xmldom\";\n\n/**\n * @classdesc\n *\n * Classe permettant d'écrire ou de lire du XML, sous forme de document DOM,\n * éventuellement selon des clés de lecture (readers) ou d'écriture (writers) spécifiques.\n *\n * @constructor\n * @alias Gp.Formats.XML\n *\n * @param {Object} [options] - options du format XML\n *\n * @param {Object} [options.reader] - Instance d'un Reader de service (AltiResponseReader, GeocodeRequestReader, etc.)\n * utile pour interpréter le XML lorsque sa structure est connue.\n * Ce reader doit comporter au moins une fonction statique read (root) permettant d'initialiser la lecture.\n *\n * @param {Object} [options.writers] - writers\n *\n * @param {String} [options.xmlString] - chaîne de caractère contenant du XML à interpréter.\n *\n * @private\n */\nfunction XML (options) {\n if (!(this instanceof XML)) {\n throw new TypeError(\"XML constructor cannot be called as a function.\");\n }\n\n // FIXME : notion de singleton\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur XML ()]\");\n\n /**\n * Chaîne de caractères contenant le texte XML\n * @type {String}\n */\n this.xmlString = null;\n\n /**\n * DOM Element correspondant à la structure du XML.\n * @type {DOMElement}\n */\n this.xmlDoc = null;\n\n /**\n * Objet contenant des fonctions de lecture des différentes balises XML.\n * @type {Object}\n */\n this.reader = null;\n\n // traitement des paramètres d'options s'il y en a\n if (options) {\n if (options.xmlString && typeof options.xmlString === \"string\") {\n this.xmlString = options.xmlString;\n // Si une chaine de caractère a été passée en entrée : on la transforme aussi en XML document\n this.xmlDoc = __getXMLDOC(options.xmlString);\n }\n if (options.reader) {\n this.setReader(options.reader);\n }\n }\n}\n\nXML.prototype = {\n\n /**\n * @lends module:XML\n */\n\n /*\n * Constructeur (alias)\n */\n constructor : XML,\n\n /**\n * Méthode permettant de récupérer la chaîne de caractères associée au format XML\n *\n * @returns {String} xmlString - la chaîne de caractères correspondant au format XML\n */\n getXMLString : function () {\n return this.xmlString;\n },\n\n /**\n * Méthode permettant d'attribuer une chaîne de caractères au format XML (attribut xmlString).\n * La méthode va aussi transformer cette chaîne de caractères en document XML,\n * afin de remplir l'attribut xmlDoc.\n *\n * @param {String} xmlString - la chaîne de caractères correspondant au format XML\n */\n setXMLString : function (xmlString) {\n if (xmlString && typeof xmlString === \"string\") {\n this.xmlString = xmlString;\n this.xmlDoc = __getXMLDOC(xmlString);\n }\n },\n\n /**\n * Méthode permettant de récupérer les readers associés au format XML, s'ils ont été définis\n *\n * @return {Object} readers - les readers associés au format XML, s'ils existent,\n * sous forme d'une collection de fonctions\n */\n getReader : function () {\n return this.reader;\n },\n\n /**\n * Méthode permettant d'attribuer des readers, sous la forme d'un objet de fonctions (node, data),\n * lorsqu'ils n'ont pas été définis lors de l'instanciation par exemple (new XML (options)).\n *\n * @param {Object} reader - Instance d'un Reader de service (AltiResponseReader, GeocodeRequestReader, etc.)\n * utile pour interpréter le XML lorsque sa structure est connue.\n * Ce reader doit comporter au moins une fonction statique read (root) permettant d'initialiser la lecture.\n */\n setReader : function (reader) {\n if (reader && reader.read && typeof reader.read === \"function\") {\n this.reader = reader;\n }\n },\n\n /**\n * Méthode permettant de récupérer le document XML associé au format, s'il existe.\n *\n * @return {DOMElement} xmlDoc - le document XML (DOM document node) s'il existe\n */\n getXMLDoc : function () {\n return this.xmlDoc;\n },\n\n /**\n * Setter\n */\n setXMLDoc : function (doc) {\n this.xmlDoc = doc;\n },\n /**\n * Méthode initialisant la lecture du XML, à partir d'un XML Document :\n * création d'un objet JavaScript contenant les informations du XML,\n * sauf dans le cas où il n'existe pas de XML Document à interpréter (retourne un objet vide).\n *\n * @return {Object} [parserOutput] - un objet JavaScript contenant les informations du XML :\n * - soit toutes les informations si aucun reader n'a été spécifié à la création du format\n * - soit les informations spécifiées dans le reader.\n */\n parse : function () {\n // build xml document from xmlString\n if (!this.xmlDoc && this.xmlString) {\n this.xmlDoc = __getXMLDOC(this.xmlString);\n }\n if (this.xmlDoc) {\n var root = __getRootNode(this.xmlDoc);\n if (root) {\n var parserOutput;\n // call reader if exists\n if (this.reader && this.reader.read) {\n parserOutput = this.reader.read(root);\n } else {\n parserOutput = {};\n parserOutput[root.nodeName] = __readDefault(root);\n }\n return parserOutput;\n } else {\n return {};\n }\n }\n }\n\n};\n\n/**\n * Méthode de la classe (privée) permettant de créer un XML Document à partir d'une chaîne de caractères XML,\n * en utilisant DOMParser () lorsque c'est possible.\n * For more information, see: https://dvcs.w3.org/hg/innerhtml/raw-file/tip/index.html#the-domparser-interface\n *\n * @private\n * @memberof XML\n * @method __getXMLDOC\n * @param {String} xmlString - xml string to be converted into DOM element\n * @return {DOMElement} - the corresponding XML Document\n */\nfunction __getXMLDOC (xmlString) {\n if (typeof window === \"undefined\") {\n // env. nodejs\n var DOMParser = require(\"@xmldom/xmldom\").DOMParser; // __xmldom.DOMParser;\n return new DOMParser().parseFromString(xmlString, \"text/xml\");\n } else {\n // env. browser\n\n var parser;\n var xmlDoc;\n var errorMsg = \"Erreur lors du parsing de la réponse du service : XML non conforme\";\n\n if (window.ActiveXObject) {\n // Internet Explorer < 9\n xmlDoc = new window.ActiveXObject(\"Microsoft.XMLDOM\");\n xmlDoc.async = false;\n xmlDoc.loadXML(xmlString);\n var parseError = xmlDoc.parseError;\n if (parseError.errorCode) {\n if (parseError.line && parseError.linepos) {\n errorMsg += \"( ligne \" + parseError.line + \", colonne \" + parseError.linepos;\n }\n if (parseError.reason) {\n errorMsg += \": \" + parseError.reason + \")\";\n }\n throw new Error(errorMsg);\n }\n return xmlDoc;\n } else if (window.DOMParser) {\n // les autres (Chrome, Mozilla, IE >= 9)\n parser = new window.DOMParser();\n try {\n xmlDoc = parser.parseFromString(xmlString, \"text/xml\");\n } catch (e) {\n // Internet Explorer browser raises exception if xmlString is not valid XML\n if (e.message === \"SyntaxError\") {\n throw new Error(errorMsg);\n } else {\n throw new Error(\"Erreur lors du parsing de la réponse du service : \" + e.message);\n }\n }\n // look for parsing error in case no exception was raised\n if (xmlDoc.getElementsByTagName(\"parsererror\").length > 0) {\n var parsererror = xmlDoc.getElementsByTagName(\"parsererror\");\n for (var i = 0; i < parsererror.length; i++) {\n var content = parsererror[i].innerHTML;\n // except in case parsererror is just because of huge xml, but parsing is done.\n if (content.indexOf(\"Huge input lookup\") === -1) {\n errorMsg += \"(\" + content + \")\";\n throw new Error(errorMsg);\n }\n }\n } else if (!xmlDoc.documentElement) { // may happen in chrome browser\n throw new Error(errorMsg);\n }\n return xmlDoc;\n } else {\n // FIXME\n throw new Error(\"Incompatible DOM Parser pour ce navigateur !\");\n }\n }\n}\n\n/**\n * Méthode de la classe (privée) permettant de récupérer le noeud racine du document,\n * à partir d'un document node (nodeType=9), puis lecture de ce noeud (readNode)\n *\n * @private\n * @memberof XML\n * @method __getRootNode\n * @param {DOMElement} [xmlDoc] - a Document Node\n * @return {DOMElement} root - the document root node\n */\nfunction __getRootNode (xmlDoc) {\n var root;\n if (xmlDoc.nodeType === 9) {\n // INFO : nodeType 9 represents the entire document (the root-node of the DOM tree)\n root = xmlDoc.documentElement;\n } else if (xmlDoc.nodeType === 1) {\n root = xmlDoc;\n }\n return root;\n}\n\n/**\n * Méthode de la classe (privée) permettant de lire automatiquement un noeud XML,\n * lorsqu'aucun reader spécifique n'a été spécifié (parser brut)\n *\n * @private\n * @memberof XML\n * @method readDefault\n * @param {DOMElement} node - a DOM element node\n * @example final data object looks like :\n * data = {\n * attributeName: attributeValue,\n * childName: {\n * attributeName: attributeValue,\n * attributeName: attributeValue,\n * childName: {\n * \"textContent\": textContent\n * },\n * childName: {\n * childName: {\n * attributeName:attributeValue\n * }\n * }\n * }\n * }\n */\nfunction __readDefault (node) {\n var data = {};\n\n // if element node has attributes, set their values to data\n if (node.attributes.length > 0) {\n var dataAttributes = __getAttributes(node);\n data[\"attributes\"] = dataAttributes;\n }\n\n // if element node has childNodes, read them and set them to data\n if (node.hasChildNodes()) {\n var childData = {};\n var child;\n var children = node.childNodes;\n\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n\n if (child.nodeType === 3) { // TEXT_NODE\n data[\"textContent\"] = child.nodeValue;\n } else if (child.nodeType === 1) {\n childData = __readDefault(child);\n\n if (!data[child.nodeName]) {\n // store childData in an object\n data[child.nodeName] = childData;\n } else {\n // in case several childNodes has the same name : store them in an array.\n // if data[nodeName] already exists but is not an array\n if (!Array.isArray(data[child.nodeName])) {\n var old = data[child.nodeName];\n data[child.nodeName] = [];\n data[child.nodeName].push(old);\n }\n data[child.nodeName].push(childData);\n }\n }\n // TODO : manage other node types (4=CDATA, etc)\n }\n }\n\n return data;\n}\n\n/**\n * Méthode de la classe (privée) permettant de récupérer les attributs d'un noeud élément\n *\n * @private\n * @memberof XML\n * @method __getAttributes\n * @param {DOMElement} node - noeud contenant l'attribut recherché\n * @return {Object} nodeAttributes - objet contenant les noms et valeurs des différents attributs\n */\nfunction __getAttributes (node) {\n if (node.attributes.length > 0) {\n var nodeAttributes = {};\n var attributes = node.attributes;\n for (var i = 0; i < attributes.length; i++) {\n var attribute = attributes[i];\n nodeAttributes[attribute.nodeName] = attribute.nodeValue;\n }\n return nodeAttributes;\n }\n}\n\nexport default XML;\n","/**\n* Global variable Gp.\n*\n* @module Gp\n* @alias Gp\n* @description\n*\n* This is the global variable that is exposed in the browser environment.\n* Content is composed of constructor, functions and properties...\n*\n* > {@link Gp.Error Error()}\n* - .TYPE_SRVERR : \"SERVICE_ERROR\"\n* - .TYPE_UNKERR : \"UNKNOWN_ERROR\"\n* - .TYPE_USEERR : \"USAGE_ERROR\"\n*\n* > {@link module:Helper Helper}\n* - .indent()\n* - .normalyzeParameters()\n* - .normalyzeUrl()\n*\n* > {@link module:XHR Protocols.XHR}\n* - .call()\n*\n* > {@link module:Services Services (objects)}\n* - .Alti\n* - {@link Gp.Services.Alti.Elevation .Elevation()}\n* - {@link Gp.Services.AltiResponse .AltiResponse()}\n* - .AutoComplete\n* - {@link Gp.Services.AutoComplete.SuggestedLocation .SuggestedLocation()}\n* - {@link Gp.Services.AutoCompleteResponse .AutoCompleteResponse()}\n* - {@link Gp.Services.Config .Config()}\n* - {@link Gp.Services.DefaultUrl .DefaultUrl()}\n* - {@link Gp.Services.GeocodeResponse .GeocodeResponse()}\n* - {@link Gp.Services.GetConfigResponse .GetConfigResponse()}\n* - {@link Gp.Services.IsoCurveResponse .IsoCurveResponse()}\n* - .Route\n* - {@link Gp.Services.Route.RouteInstruction .RouteInstruction()}\n* - {@link Gp.Services.RouteResponse .RouteResponse()}\n*\n* > Services (factory)\n* - {@link module:Services~autoComplete .autoComplete()}\n* - {@link module:Services~geocode .geocode()}\n* - {@link module:Services~getAltitude .getAltitude()}\n* - {@link module:Services~getConfig .getConfig()}\n* - {@link module:Services~isoCurve .isoCurve()}\n* - {@link module:Services~reverseGeocode .reverseGeocode()}\n* - {@link module:Services~route .route()}\n*\n* > servicesDate : \"YYYY-MM-DD\"\n*\n* > servicesVersion : \"X.X.X\"\n*\n*/\n\nimport Services from \"./Services/Services\";\nimport DefaultUrl from \"./Services/DefaultUrlService\";\nimport AltiResponse from \"./Services/Alti/Response/model/AltiResponse\";\nimport Elevation from \"./Services/Alti/Response/model/Elevation\";\nimport AutoCompleteResponse from \"./Services/AutoComplete/Response/model/AutoCompleteResponse\";\nimport SuggestedLocation from \"./Services/AutoComplete/Response/model/SuggestedLocation\";\nimport IsoCurveResponse from \"./Services/ProcessIsoCurve/Response/model/ProcessIsoCurveResponse\";\nimport RouteResponse from \"./Services/Route/Response/model/RouteResponse\";\nimport RouteInstruction from \"./Services/Route/Response/model/RouteInstruction\";\nimport Config from \"./Services/Config/Config\";\nimport XHR from \"./Protocols/XHR\";\nimport Error from \"./Exceptions/ErrorService\";\nimport Helper from \"./Utils/Helper\";\n\nimport Pkg from \"../package.json\";\n\n/** Version */\nexport const servicesVersion = Pkg.version;\n/** Publication date */\nexport const servicesDate = Pkg.date;\n\n// on declare les ns dans root global\nvar Gp = {};\n\nGp.servicesVersion = servicesVersion;\nGp.servicesDate = servicesDate;\n\n// Export Protocols\nGp.Protocols = {};\nGp.Protocols.XHR = XHR;\n// Export services\nGp.Services = Services;\n// Export DefaultUrls\nGp.Services.DefaultUrl = DefaultUrl;\n// Export Alti\nGp.Services.AltiResponse = AltiResponse;\nGp.Services.Alti = {};\nGp.Services.Alti.Elevation = Elevation;\n// Export Autocomplete\nGp.Services.AutoCompleteResponse = AutoCompleteResponse;\nGp.Services.AutoComplete = {};\nGp.Services.AutoComplete.SuggestedLocation = SuggestedLocation;\n// Export Config\nGp.Services.Config = Config;\n// Export IsoCurve\nGp.Services.IsoCurveResponse = IsoCurveResponse;\n// Export Route\nGp.Services.RouteResponse = RouteResponse;\nGp.Services.Route = {};\nGp.Services.Route.RouteInstruction = RouteInstruction;\n// Export Erreurs et Outils\nGp.Error = Error;\nGp.Helper = Helper;\n\nexport default Gp;\n","/**\n * JSONP : Implémentation du protocole JSONP de la plateforme Géoportail\n *\n * @module JSONP\n * @private\n * @alias Gp.Protocols.JSONP\n */\nimport Logger from \"../Utils/LoggerByDefault\";\n\n// cf. https://github.com/sobstel/jsonp.js\nvar JSONP = {\n\n /**\n * Construction d'un identifiant statique basé sur le timestamp,\n * et qui s'incremente de +1 à chaque appel\n */\n uuid : (function () {\n var id = Math.floor(Date.now());\n return function () {\n return id++;\n };\n })(),\n\n /**\n * Cette fonction réalise l'appel du service fourni via le paramètre \"options.url\"\n * en mettant en œuvre le protocole JSONP.\n *\n * @method call\n * @static\n * @param {Object} options - parametres d'invocation du service en JSONP\n * @param {String} options.url - URL du service à invoquer (indépendamment du protocole JSONP).\n * Cette URL contient déjà les paramètres du service.\n * Si le paramètre dédié à la mise en oeuvre du protocole JSONP (callback=xxx) n'est pas présent, il est rajouté par la fonction ;\n * sa valeur est déterminée en fonction du paramètre callbackName.\n * @param {Number} [options.timeOut = 0] - Nombre de ms au bout duquel on considère que le service n'a pas répondu.\n * Une valeur de 0 pour ce paramètre permet de désactiver la gestion du timeOut.\n * @param {String} [options.callbackSuffix = null] - Suffixe de la fonction de callback à rajouter sur l'URL.\n * Si aucun suffixe n'est spécifié (cas par défaut), on utilisera l'identifiant this.uuid () comme suffixe. Ex: \"callback1458574396582 ()\"\n * @param {String} [options.callbackName = gp.protocol.jsonp] - Valeur du paramètre callback à rajouter sur l'URL.\n * Si l'URL fournie contient déjà le paramètre callback, le paramètre callbackName ne sera pas pris en compte.\n * La fonction de callback est créée dynamiquement par la fonction JSONP ;\n * elle a deux fonctions :\n * elle annule la condition de timeOut\n * puis appelle la fonction fournie par l'utilisateur via le paramètre onResponse.\n * @param {Function} options.onResponse - Nom de la fonction qui sera appelée lors de la réception des résultats du service.\n * Ce paramètre sera ignoré si l'URL contient déjà le paramètre callback.\n * La fonction de rappel appelée sera alors celle ayant pour nom la valeur de ce paramètre.\n * @param {Function} [options.onTimeOut] - Nom de la fonction qui sera appelée en cas de non réponse du service.\n * Le temps au bout duquel on considère que le service n'a pas répondu est déterminé par le paramètre timeOut.\n * @example\n * var options = {\n * url : 'http://localhost/some/test.json&callback=myResults',\n * timeOut : 100,\n * callbackName : 'myResults',\n * callbackSuffix : \"\",\n * onResponse : function (response) {\n * console.log('results : ', response);\n * },\n *\n * };\n * JSONP.call(options);\n */\n call : function (options) {\n // logger\n var logger = Logger.getLogger(\"JSONP\");\n logger.trace(\"[JSONP::call ()]\");\n\n // analyse parametres\n\n if (!options) {\n logger.error(\"missing parameter : options !\");\n throw new Error(\"missing parameter : options !\");\n }\n\n if (!options.url) {\n logger.error(\"missing parameter : options.url !\");\n throw new Error(\"missing parameter : options.url !\");\n }\n\n if (!options.timeOut) {\n logger.info(\"setting 'options.timeOut' default value\");\n options.timeOut = 0;\n }\n\n // FIXME si un callback coté client a été mis en place,\n // cette condition sur cette methode n'a pas de sens !?\n if (!options.onResponse) {\n logger.error(\"missing parameter : options.onResponse !\");\n throw new Error(\"missing parameter : options.onResponse !\");\n // FIXME doit on definir un callback interne par defaut !?\n // options.onResponse = function (data) {\n // console.log(\"response callback (inner) : \", data);\n // };\n }\n\n // ID du callback à utiliser : null ou string.\n // si l'utilisateur a spécifié un suffixe pour le callback, on le récupère comme un ID (ex: options.callbackSuffix = \"\")\n // sinon, on utilise un timestamp : this.uuid ()\n var callbackId = (typeof options.callbackSuffix === \"string\") ? options.callbackSuffix : this.uuid();\n\n // on recherche le parametre callback et son nom de fonction dans l'url\n var urlHasCallbackKey = false;\n var urlHasCallbackName = false;\n\n var idx = options.url.indexOf(\"callback=\");\n\n if (idx !== -1) {\n urlHasCallbackKey = true;\n // extraction callbackName de l'url : entre \"callback=\" et \"&\" ou fin de ligne\n var j = options.url.indexOf(\"&\", idx);\n if (j === -1) {\n j = options.url.length;\n }\n\n // on ecrase le parametre options.callbackName s'il avait été défini\n var callbackName = options.url.substring(idx + 9, j);\n\n if (callbackName) {\n urlHasCallbackName = true;\n options.callbackName = callbackName;\n logger.info(\"setting 'options.callbackName' value (\" + options.callbackName + \") from 'options.url' parameter\");\n }\n }\n\n // on ajoute le parametre callback dans l'URL s'il n'existe pas\n if (!urlHasCallbackKey) {\n // gestion des autres param. et \"?\"\n var k = options.url.indexOf(\"?\");\n if (k === -1) {\n // aucun param., ni de '?'\n options.url = options.url + \"?\" + \"callback=\";\n } else if (k === options.url.length) {\n // uniquement le '?'\n options.url = options.url + \"callback=\";\n } else {\n // le '?' et les param. existent\n options.url = options.url + \"&\" + \"callback=\";\n }\n logger.info(\"setting callback default key in 'options.url' : \" + options.url);\n }\n\n // utilisation de la fonction callback coté client ?\n var HasCallbackName = options.callbackName ? true : urlHasCallbackName;\n\n // on ajoute le nom de la fonction callback dans l'URL si elle n'existe pas\n if (!urlHasCallbackName) {\n // fonction callback par defaut\n if (!options.callbackName) {\n logger.info(\"setting 'options.callbackName' default value\");\n options.callbackName = \"callback\"; // ou \"gp.protocol.jsonp\" ?\n // info : si on ne veut pas gerer d'ID dans le callback,\n // options.callbackSuffix = \"\"\n if (callbackId || callbackId === \"\") {\n options.callbackName += callbackId;\n }\n }\n options.url = options.url.replace(\"callback=\", \"callback=\" + options.callbackName);\n logger.info(\"setting callback function name in 'options.url' : \" + options.url);\n }\n\n // timeOut par defaut\n if (!options.onTimeOut) {\n logger.info(\"setting 'options.onTimeOut' default value\");\n /** callback timeout par defaut */\n options.onTimeOut = function (/* error */) {\n console.log(\"TimeOut while invoking url : \" + options.url);\n };\n }\n\n if (!HasCallbackName) {\n var self = this;\n\n // event du timeout\n var onTimeOutTrigger = null;\n\n // declenche le timeout si > à 0 !\n if (options.timeOut > 0) {\n onTimeOutTrigger = window.setTimeout(\n function () {\n /** fonction de reponse du service */\n window[options.callbackName] = function () {};\n options.onTimeOut();\n self._deleteScript(callbackId);\n }, options.timeOut);\n }\n\n // FIXME le nom de la fonction n'accepte pas de namespace !\n // ex. Gp.Function.callback\n /**\n * fonction de reponse du service\n * @param {Object} data - data\n * @private\n */\n window[options.callbackName] = function (data) {\n window.clearTimeout(onTimeOutTrigger);\n options.onResponse(data);\n self._deleteScript(callbackId);\n };\n }\n\n this._createScript(callbackId, options.url);\n },\n\n /**\n * create Script\n * @param {String} callbackId - callback Id\n * @param {String} url - url\n * @private\n */\n _createScript : function (callbackId, url) {\n var scriptu;\n var scripto = document.getElementById(\"results\" + callbackId);\n\n scriptu = document.createElement(\"script\");\n scriptu.setAttribute(\"type\", \"text/javascript\");\n scriptu.setAttribute(\"src\", url);\n scriptu.setAttribute(\"charset\", \"UTF-8\");\n scriptu.setAttribute(\"id\", \"results\" + callbackId);\n scriptu.setAttribute(\"async\", \"true\"); // FIXME async ?\n // head ou body ou autres ?\n var node = document.documentElement || document.getElementsByTagName(\"head\")[0];\n if (scripto === null) {\n node.appendChild(scriptu);\n } else {\n // s'il existe déjà, on le remplace !\n node.replaceChild(scriptu, scripto);\n }\n },\n\n /**\n * delete Script\n * @param {String} callbackId - callback Id\n * @private\n */\n _deleteScript : function (callbackId) {\n var script = document.getElementById(\"results\" + callbackId);\n if (script) {\n var node = script.parentNode || document.documentElement;\n if (!node) {\n return;\n }\n node.removeChild(script);\n }\n }\n};\n\nexport default JSONP;\n","/**\n * Interface de dialogue avec les webservices\n *\n * @module Protocols\n * @private\n * @alias Gp.Protocols\n */\nimport Helper from \"../Utils/Helper\";\nimport XHR from \"./XHR\";\nimport JSONP from \"./JSONP\";\n\nvar Protocol = {\n\n /**\n * Interface unique d\"envoi d\"une requête.\n *\n * @method send\n * @static\n * @param {Object} options - options generales\n * @param {String} options.url - url du service\n * @param {String} options.method - GET, POST, PUT, DELETE\n * @param {String} options.protocol - XHR | JSONP\n * @param {String} options.format - format de la reponse du service : json, xml ou null (brute)...\n * @param {String} options.wrap - encapsuler la reponse du service dans du JSON : true|false (true par defaut sur le protocole JSONP)\n * @param {String} options.callbackSuffix - suffixe de la fonction de callback (JSONP uniquement) (ex: si callbackSuffix=\"\", la fonction s'appellera \"callback\")\n * @param {String} options.timeOut - 0 ms\n * @param {Boolean} options.nocache - true|false\n * @param {Object|String} options.data - content (post) ou param (get)\n * @param {Object|String} options.headers - (post) ex. referer\n * @param {Object|String} options.content - (post) ex. \"application/json\"\n * @param {String} options.scope - this (TODO)\n * @param {Function} options.onResponse - callback\n * @param {Function} options.onFailure - callback\n * @param {Function} options.onTimeOut - callback\n * @param {String} options.proxyUrl - (TODO)\n */\n send : function (options) {\n // INFO\n // \"output\" - param est interne à la classe \"Protocol\" (parametrable via \"wrap\"), et à ajouter à l\"url\n // ce param est independant du service car il est géré par le filtre LUA :\n // ex. json|xml (json par defaut).\n // Ce param. permet d\"encapsuler du XML dans du JSON :\n // {http : {status:200, error:null},xml :\"réponse du service\"}\n // Utile pour les services qui ne repondent que du XML (ex. Geocodage)\n //\n // |-------------------------------------------------|\n // | \\service | | | |\n // | output\\ format| json | xml | remarques |\n // |--------\\------|------|-----|--------------------|\n // | json | json | json| json/xml encapsulé |\n // | xml | json | xml | param inactif |\n // |-------------------------------------------------|\n // ex. le service demande une reponse native au \"format\" json et avec un \"output\" json.\n // on a donc une reponse json encapsulé dans un json : ce qu'on ne souhaite pas !\n // dans ce cas on ne renseigne pas output=json\n\n // INFO\n // \"wrap\" - choix d\"encapsuler ou non les reponses dans du JSON.\n // Par defaut, on encapsule uniquement les reponses sur le protocole JSONP (et qui sont en xml) !\n\n // INFO\n // \"callback\" - param est interne à la classe \"Protocol\" (non parametrable), et à ajouter à l\"url\n // ce param est independant du service car il est géré aussi par le filtre LUA :\n // ex. callback|null\n // Ce param. permet de renvoyer une reponse javascript :\n // callback ({http : {status:200, error:null},xml :\"réponse du service\"})\n // Ce param. est non renseigné par defaut car pour du JSONP, on utilise le\n // le protocol JSONP, et ce dernier implemente déjà le callback !\n\n // settings par defaut\n var settings = options || {\n method : \"GET\",\n // protocol : \"JSONP\",\n protocol : \"XHR\",\n timeOut : 0,\n format : null,\n wrap : true,\n nocache : true,\n output : \"json\",\n callback : null,\n callbackSuffix : null\n };\n\n // on determine l'environnement d'execution : browser ou non ?\n // et on stoppe pour nodeJS... sur un protocole JSONP !\n if (typeof window === \"undefined\" && options.protocol === \"JSONP\") {\n console.log(\"Value (s) for parameter (s) 'protocol=JSONP (instead use XHR)' not supported to NodeJS\");\n return;\n }\n\n if (options.protocol === \"XHR\" || options.format === \"json\") {\n settings.wrap = false;\n } else if (options.protocol === \"JSONP\" && options.format === \"xml\") {\n settings.wrap = true;\n }\n\n settings.callback = null; // FIXME non géré !?\n settings.output = settings.wrap ? \"json\" : null;\n\n // on encapsule les reponses dans un objet JSON\n if (settings.wrap) {\n var params = {};\n params.output = settings.output;\n params.callback = settings.callback;\n delete params.callback; // FIXME non géré !?\n settings.url = Helper.normalyzeUrl(options.url, params);\n }\n\n // choix de l\"implementation :\n // XHR ou JSONP\n switch (settings.protocol) {\n case \"XHR\":\n // on normalise l'url (gestion du cache)\n if (options.method === \"GET\" && options.nocache) {\n settings.url = Helper.normalyzeUrl(settings.url, {\n t : new Date().getTime()\n });\n }\n // appel du service en XHR\n XHR.call(settings);\n break;\n case \"JSONP\":\n\n // on normalise l'url si les params. sont renseignés dans la string|object \"data\"\n if (settings.data) {\n settings.url = Helper.normalyzeUrl(settings.url, settings.data);\n }\n\n // appel du service en JSONP\n JSONP.call(settings);\n break;\n default:\n throw new Error(\"protocol not supported (XHR|JSONP) !\");\n }\n }\n\n};\n\nexport default Protocol;\n","/* global Promise, require, XDomainRequest */\n\nimport Logger from \"../Utils/LoggerByDefault\";\nimport Helper from \"../Utils/Helper\";\nimport ES6Promise from \"es6-promise\";\n// import __request from \"request\";\n// import __xmldom from \"xmldom\";\n\n/**\n * Ajax Request (use of Promises)\n *\n * @module XHR\n * @alias Gp.Protocols.XHR\n * @see dependance 'es6-promise'\n */\n\n// cf. https://xhr.spec.whatwg.org/\n// cf. https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest\n\nvar XHR = {\n\n /**\n * Interface unique d'envoi d'une requête.\n *\n * @method call\n * @static\n * @param {Object} settings - options generales\n * @param {String} settings.url - url du service\n * @param {String} settings.method - GET, POST, PUT, DELETE\n * @param {String} settings.format - format de la reponse du service : json, xml ou null (brute)\n * @param {String} settings.data - content (post) ou param (get)\n * @param {String} settings.proxy - proxy url\n * @param {Object|String} settings.headers - (post) ex. referer\n * @param {Object|String} settings.content - (post) ex. 'application/json'\n * @param {String} settings.timeOut - timeout = 0 par defaut\n * @param {String} settings.scope - this\n * @param {Function} settings.onResponse - callback\n * @param {Function} settings.onFailure - callback\n */\n call : function (settings) {\n // logger\n var logger = Logger.getLogger(\"XHR\");\n logger.trace(\"[XHR::call()]\");\n\n // FIXME\n // To polyfill the global environment\n ES6Promise.polyfill();\n\n // test sur les settings obligatoires\n if (!settings.url) {\n throw new Error(\"missing parameter : url is not defined !\");\n }\n\n if (!settings.method) {\n throw new Error(\"missing parameter : method is not defined !\");\n }\n\n if (!settings.format) {\n settings.format = \"text\"; // reponse brute !\n }\n\n var options = {};\n options.url = settings.url;\n options.data = settings.data ? settings.data : null;\n options.method = settings.method;\n options.timeOut = settings.timeOut || 0;\n options.scope = settings.scope || this;\n options.proxy = settings.proxy || null;\n options.content = settings.content || null;\n options.headers = settings.headers || {\n referer : \"http://localhost\"\n };\n\n // test sur les valeurs de 'settings.method'\n switch (settings.method) {\n case \"DELETE\":\n case \"GET\":\n break;\n case \"PUT\":\n case \"POST\":\n // on force sur ces params spécifiques au mode POST\n options.content = settings.content ? settings.content : \"application/x-www-form-urlencoded\"; // FIXME en attente des services : bascule en \"application/xml\" ou \"application/json\"\n options.headers = settings.headers ? settings.headers : { referer : \"http://localhost\" }; // FIXME parametrable...\n break;\n case \"HEAD\":\n case \"OPTIONS\":\n throw new Error(\"HTTP method not yet supported !\");\n default:\n throw new Error(\"HTTP method unknown !\");\n }\n\n // test sur les valeurs de 'settings.format'\n switch (settings.format) {\n case \"text\":\n this.__call(options)\n .then(function (response) {\n logger.trace(response);\n settings.onResponse.call(this, response);\n })\n .catch(function (error) {\n settings.onFailure.call(this, error);\n });\n break;\n case \"json\":\n this.__callJSON(options)\n .then(function (response) {\n logger.trace(response);\n settings.onResponse.call(this, response);\n })\n .catch(function (error) {\n settings.onFailure.call(this, error);\n });\n break;\n case \"xml\":\n this.__callXML(options)\n .then(function (response) {\n logger.trace(response);\n settings.onResponse.call(this, response);\n })\n .catch(function (error) {\n settings.onFailure.call(this, error);\n });\n break;\n default:\n throw new Error(\"This output Format is not yet supported !\");\n }\n },\n\n /**\n * Requete\n *\n * @method __call\n * @private\n * @param {Object} options - options\n * @return {Object} promise\n */\n __call : function (options) {\n var logger = Logger.getLogger(\"XHR\");\n logger.trace(\"[XHR::__call()]\");\n\n var promise = new Promise(\n function (resolve, reject) {\n // traitement du corps de la requête\n var corps = (options.method === \"POST\" || options.method === \"PUT\") ? 1 : 0;\n\n // seulement si options.data n'est pas vide (peut être un objet ou une chaine de caractères)\n if (options.data && ((typeof options.data === \"object\" && Object.keys(options.data).length) || (typeof options.data === \"string\" && options.data.length)) && !corps) {\n options.url = Helper.normalyzeUrl(options.url, options.data);\n }\n\n logger.trace(\"URL = \", options.url);\n\n var hXHR = null;\n\n // test on env. nodejs or browser\n if (typeof window === \"undefined\") {\n var nodefetch = require(\"node-fetch\");\n\n var opts = {\n headers : {\n Referer : \"https://localhost\"\n }\n };\n\n if (options.data && typeof options.data === \"string\" && corps) {\n opts = {\n method : options.method,\n body : options.data,\n headers : {\n \"Content-Type\" : options.content,\n Referer : \"https://localhost\"\n }\n };\n }\n\n return nodefetch(options.url, opts)\n .then(function (response) {\n if (response.ok) { // res.status >= 200 && res.status < 300\n resolve(response.text());\n } else {\n var message = \"Errors Occured on Http Request (status : '\" + response.statusText + \"' | url : '\" + response.url + \"')\";\n var status = response.status;\n reject({\n message : message,\n status : status\n });\n }\n })\n .catch(function (e) {\n reject({\n message : e,\n status : -1\n });\n });\n } else {\n if (window.XMLHttpRequest) {\n logger.trace(\"XMLHttpRequest\");\n\n hXHR = new XMLHttpRequest();\n hXHR.open(options.method, options.url, true); // async\n hXHR.overrideMimeType = options.content;\n\n // gestion du timeout\n var onTimeOutTrigger = null;\n if (options.timeOut > 0) {\n // FIXME le timeout interne ne me permet pas de declencher le bon message...\n // hXHR.timeout = options.timeOut;\n logger.trace(\"XHR - TimeOut actif !\");\n /**\n * Description\n *\n * @method onTimeOutTrigger\n * @private\n */\n onTimeOutTrigger = window.setTimeout(\n function () {\n var message = \"TimeOut Occured on Http Request with XMLHttpRequest !\";\n reject({\n message : message,\n status : -1\n });\n }, options.timeOut);\n }\n\n if (corps) {\n // headers, data, content of data\n // cf. https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-setrequestheader\n logger.trace(\"data = \", options.data);\n hXHR.setRequestHeader(\"Content-type\", options.content);\n // FIXME refused to set unsafe header content-length javascript\n // hXHR.setRequestHeader (\"Content-length\", options.data.length);\n // hXHR.setRequestHeader (\"Referer\", options.headers.referer);\n }\n\n /**\n * On Error\n * FIXME ne se declenche pas !?\n *\n * @param {Object} e - Event\n * @method onerror\n * @private\n */\n hXHR.onerror = function (e) {\n console.log(e);\n reject(new Error(\"Errors Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * On Timeout\n * FIXME ne se declenche pas !?\n *\n * @param {Object} e - Event\n * @method ontimeout\n * @private\n */\n hXHR.ontimeout = function (e) {\n console.log(e);\n reject(new Error(\"TimeOut Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * Description\n *\n * @method onreadystatechange\n * @private\n */\n hXHR.onreadystatechange = function (e) {\n if (hXHR.readyState === 4) { // DONE\n if (hXHR.status === 200) {\n window.clearTimeout(onTimeOutTrigger);\n resolve(hXHR.response);\n } else {\n var message = \"Errors Occured on Http Request (status : '\" + e.target.statusText + \"' | url : '\" + e.target.responseURL + \"' | response : '\" + e.target.response + \"')\";\n var status = e.target.status;\n reject({\n message : message,\n status : status\n });\n }\n }\n };\n\n // gestion du content data\n var data4xhr = (options.data && corps) ? options.data : null;\n\n hXHR.send(data4xhr);\n } else if (window.XDomainRequest) {\n // worked in Internet Explorer 8–10 only !\n logger.trace(\"XDomainRequest\");\n\n hXHR = new XDomainRequest();\n hXHR.open(options.method, options.url);\n\n hXHR.overrideMimeType = options.content;\n\n if (options.timeOut > 0) {\n hXHR.timeout = options.timeout;\n logger.trace(\"XHR - TimeOut actif !\");\n }\n\n if (corps) {\n // headers, data, content of data\n // cf. https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-setrequestheader\n hXHR.setRequestHeader(\"Content-type\", options.content);\n // FIXME refused to set unsafe header content-length javascript\n // hXHR.setRequestHeader (\"Content-length\", options.data.length);\n // hXHR.setRequestHeader (\"Referer\", options.headers.referer);\n }\n\n /**\n * Description\n *\n * @method onerror\n * @private\n */\n hXHR.onerror = function () {\n reject(new Error(\"Errors Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * Description\n *\n * @method ontimeout\n * @private\n */\n hXHR.ontimeout = function () {\n reject(new Error(\"TimeOut Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * On Load\n *\n * @method onload\n * @private\n */\n hXHR.onload = function (e) {\n if (hXHR.status === 200) {\n resolve(hXHR.responseText);\n } else {\n var message = \"Errors Occured on Http Request (status : '\" + e.target.statusText + \"' | url : '\" + e.target.responseURL + \"')\";\n var status = e.target.status;\n reject({\n message : message,\n status : status\n });\n }\n };\n\n var data4xdr = (options.data && corps) ? options.data : null;\n\n hXHR.send(data4xdr);\n } else {\n throw new Error(\"CORS not supported\");\n }\n }\n }\n );\n\n return promise;\n },\n\n /**\n * Requete avec parser JSON\n *\n * @method __callJSON\n * @private\n * @param {Object} options - options\n * @return {Object} promise\n */\n __callJSON : function (options) {\n return this.__call(options)\n .then(JSON.parse)\n .catch(function (error) {\n console.log(\"_callJSON failed on : \", options.url, error);\n // FIXME pas d'exception, laissons le fil se derouler...\n // throw error;\n });\n },\n\n /**\n * Requete avec parser XML\n *\n * @method __callXML\n * @private\n * @param {Object} options - options\n * @return {Object} promise\n */\n __callXML : function (options) {\n return this.__call(options)\n .then(function (response) {\n var xmlDoc;\n\n // test on env. nodejs or browser\n if (typeof window === \"undefined\") {\n var DOMParser = require(\"@xmldom/xmldom\").DOMParser; // __xmldom.DOMParser\n xmlDoc = new DOMParser().parseFromString(response, \"text/xml\");\n } else {\n if (window.DOMParser) {\n var parser = new window.DOMParser();\n xmlDoc = parser.parseFromString(response, \"text/xml\");\n } else { // IE\n xmlDoc = new window.ActiveXObject(\"Microsoft.XMLDOM\");\n xmlDoc.async = false;\n xmlDoc.loadXML(response);\n }\n }\n\n return xmlDoc;\n })\n .catch(function (error) {\n console.log(\"__callXML failed on : \", options.url, error);\n // FIXME pas d'exception, laissons le fil se derouler...\n // throw error;\n });\n }\n\n};\n\nexport default XHR;\n","\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport AltiRequestFactory from \"./Request/AltiRequestFactory\";\nimport AltiResponseFactory from \"./Response/AltiResponseFactory\";\n\n/**\n * @classdesc\n *\n * Appel du service d'altimétrie du Géoportail\n *\n * @todo gestion du parma. output et callback\n * @todo outputFormat (REST) et format (WPS)\n * @todo La reponse JSON peut encapsuler un XML !\n *\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.Alti\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {Array.} options.positions - Tableau ({lon:float,lat:float}) contenant les coordonnées des points (CRS:84)\n * dont on veut connaître les altitudes (ou à partir desquelles on va calculer le profil).\n * Chaque élément du tableau est un objet JavaScript avec deux attributs : lon et lat, qui sont des flottants.\n * Minimum 2 éléments si on souhaite calculer un profil altimétrique (ElevationLine).\n * Maximum 50 éléments.\n *\n * @param {String} options.outputFormat - Le format de la réponse du service alti : 'xml' ou 'json'.\n * Ce paramètre déterminera l'extension '.xml' ou '.json' du service dans le cas de l'API REST,\n * ou la valeur du paramètre 'format' dans le cas de la norme WPS.\n * Nécessaire si serverUrl est renseigné, et qu'on souhaite passer par l'API REST,\n * pour connaître le format dans lequel sera fournie la réponse (pour son traitement).\n * Non nécessaire pour la norme WPS. Par défaut, ce paramètre vaut 'json'.\n *\n * @param {Number} [options.sampling] - Nombre de points à utiliser pour déterminer le tracé d'un profil altimétrique, compris entre 2 et 5000.\n * A spécifier lorsqu'on souhaite accéder à cette fonctionnalité.\n * Dans ce cas, les points fournis en entrée (au minimum de deux) servent à déterminer l'axe planimétrique\n * le long duquel le profil doit être calculé.\n * Si le paramètre sampling n'est pas spécifié ou moins de deux points sont fournis,\n * c'est le service Elevation qui sera interrogé (altitudes simples calculées pour les points fournis).\n * Une valeur de sampling strictement inférieure à 2 déclenchera un échantillonnage avec la valeur par défaut du service (3 points).\n *\n * @param {String} [options.api] - Manière d'accéder au service : 'REST' (via l'API REST) ou 'WPS' (via la norme WPS).\n * Par défaut, on utilise l'API REST.\n *\n * @param {Boolean} [options.zonly] - Permet de ne récupérer que les altitudes en sortie s'il vaut 'true'.\n * Vaut 'false' par défaut.\n *\n * @param {String} [options.resource] - Resource utilisée pour réaliser le calcul.\n *\n * @example\n * var options = {\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * positions : [{lon:, lat:}, {lon:, lat:}],\n * outputFormat : 'json' // json|xml\n * sampling : 3,\n * api : 'REST', // REST|WPS\n * zonly : false // false|true,\n * resource : \"resource-par-defaut\"\n * };\n *\n */\nfunction Alti (options) {\n if (!(this instanceof Alti)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"Alti\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"Alti\";\n\n // appel du constructeur par heritage\n CommonService.apply(this, arguments);\n\n this.logger = Logger.getLogger(\"Gp.Services.Alti\");\n this.logger.trace(\"[Constructeur Alti (options)]\");\n\n // #####################\n // analyse des options\n // #####################\n\n if (!options.positions) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"positions\"));\n }\n\n if (options.positions.length === 0) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"positions\"));\n }\n\n // ajout des options spécifiques au service\n this.options.positions = options.positions;\n\n // format de réponse du service : \"json\" ou \"xml\" (valeur par défaut), en minuscule !\n this.options.outputFormat = (typeof options.outputFormat === \"string\") ? options.outputFormat.toLowerCase() : \"xml\";\n\n // ressource utilisée pour le calcul altimétrique\n this.options.resource = options.resource || \"ign_rge_alti_wld\";\n\n // sampling\n this.options.sampling = options.sampling || null;\n\n // type d'api utilisé pour requeter le service, en majuscule !\n this.options.api = (typeof options.api === \"string\") ? options.api.toUpperCase() : \"REST\";\n\n // l'api ne peut être interrogée qu'en GET.\n if (this.options.api === \"REST\") {\n this.options.httpMethod = \"GET\";\n }\n\n // param. zonly\n this.options.zonly = options.zonly || false;\n\n // param. measures\n this.options.measures = options.measures || false;\n\n // gestion de l'url du service par defaut\n // si l'url n'est pas renseignée, il faut utiliser les urls par defaut\n // en fonction du type d'api, REST ou WPS, du format de reponse demandé (outputFormat)\n // ainsi que sur le type de service (profil ou elevation)\n if (!this.options.serverUrl) {\n var lstUrlByDefault = DefaultUrlService.Alti.newUrl();\n var urlFound = null;\n switch (this.options.api) {\n case \"WPS\":\n urlFound = lstUrlByDefault.wps;\n break;\n case \"REST\":\n var key = (options.sampling ? \"profil\" : \"elevation\") + \"-\" + this.options.outputFormat;\n urlFound = lstUrlByDefault[key];\n break;\n default:\n throw new Error(_.getMessage(\"PARAM_UNKNOWN\", \"api\"));\n }\n\n if (!urlFound) {\n throw new Error(\"Url by default not found !\");\n }\n this.options.serverUrl = urlFound;\n this.logger.trace(\"Server URL by default : \" + this.options.serverUrl);\n }\n\n // gestion du type de service\n // si l'extension de l'url est .json ou .xml, on surcharge le format de sortie (outputFormat)\n var idx = this.options.serverUrl.lastIndexOf(\".\");\n if (idx !== -1) {\n var extension = this.options.serverUrl.substring(idx + 1);\n if (extension && extension.length < 5) { // FIXME extension de moins de 4 car. ...\n this.logger.trace(\"Server Extension URL : \" + extension);\n switch (extension.toLowerCase()) {\n case \"json\":\n case \"xml\":\n this.options.outputFormat = extension.toLowerCase();\n break;\n default:\n throw new Error(\"type of service : unknown or unsupported (json or xml) !\");\n }\n }\n }\n}\n\n/**\n * @lends module:Alti#\n */\nAlti.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/**\n * Constructeur (alias)\n */\nAlti.prototype.constructor = Alti;\n\n/**\n * Création de la requête (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nAlti.prototype.buildRequest = function (error, success) {\n // utilisation en mode callback\n var options = {\n httpMethod : this.options.httpMethod,\n // callback\n onSuccess : function (result) {\n // sauvegarde de la requete !\n this.request = result;\n success.call(this, this.request);\n },\n onError : error,\n scope : this,\n // spécifique au service :\n resource : this.options.resource,\n positions : this.options.positions,\n outputFormat : this.options.outputFormat,\n sampling : this.options.sampling,\n api : this.options.api,\n zonly : this.options.zonly,\n measures : this.options.measures\n };\n\n AltiRequestFactory.build(options);\n};\n\n/**\n * Analyse de la reponse (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nAlti.prototype.analyzeResponse = function (error, success) {\n // INFO\n // Factory pour masquer la complexité du retour du service qui renvoie soit\n // - une 'string' qui contient du XML ou JSON natif en mode XHR\n // - un objet JSON qui est natif ou encapsulé\n\n if (this.response) {\n var options = {\n response : this.response,\n outputFormat : this.options.outputFormat, // utile pour parser la string en mode XHR : JSON ou XML !\n rawResponse : this.options.rawResponse,\n onError : error,\n onSuccess : success,\n scope : this\n };\n\n AltiResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default Alti;\n","\n/**\n * Fonction retournant un objet contenant des clés de lecture (readers)\n * qui permettent de parser des réponses XML du service Altimétrique du Géoportail\n * (calcul altimétrique simple ou profil altimétrique d'une courbe),\n * lorsque le paramètre output = xml,\n * afin de récupérer les élévations retournées.\n *\n * @module AltiResponseReader\n * @alias Gp.Services.Alti.Formats.AltiResponseReader\n * @private\n */\n\n// import Logger from \"../../../Utils/LoggerByDefault\";\nimport AltiResponse from \"../Response/model/AltiResponse\";\nimport Elevation from \"../Response/model/Elevation\";\nimport Measure from \"../Response/model/Measure\";\n\n/**\n *\n * Objet AltiResponseReader\n *\n * @member {Object} AltiResponseReader\n *\n * @property {Object} AltiResponseReader.READERS - Objet contenant des fonctions de lecture, appelées \"readers\"\n * dont chaque clé correspond au nom d'un tag du XML que l'on souhaite lire\n * et la valeur associée est une fonction (node, data)\n * où node est un noeud du document DOM\n * et data est un objet où l'on stocke les informations lues dans le XML.\n *\n * @property {Method} AltiResponseReader.READERS.elevations - Lecture d'un noeud \"elevations\" de la réponse XML\n * du service alti, correspondant logiquement à la racine du document\n * (contient un ou plusieurs childNodes correspondant chacun à une élévation retournée)\n *\n * @property {Method} AltiResponseReader.READERS.elevation - Lecture d'un noeud \"elevation\" de la réponse xml du service alti.\n * (contient un ou 4 childNode (s) correspondant à l'altitude (z) et éventuellement lat, lon, et acc)\n *\n * @property {Method} AltiResponseReader.READERS.lat - Lecture d'un noeud \"lat\" de la réponse xml du service alti.\n * (contient une valeur de latitude, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.lon - Lecture d'un noeud \"lon\" de la réponse xml du service alti.\n * (contient une valeur de longitude, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.z - Lecture d'un noeud \"z\" de la réponse xml du service alti.\n * (contient une valeur d'altitude, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.acc - Lecture d'un noeud \"acc\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.measures - Lecture d'un noeud \"measures\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.source_name - Lecture d'un noeud \"source_name\" de la réponse xml du service alti.\n * (pour remplir l'éventuel objet measure)\n *\n * @property {Method} AltiResponseReader.READERS.source_mesure - Lecture d'un noeud \"source_mesure\" de la réponse xml du service alti.\n * (pour remplir l'éventuel objet measure)\n *\n * @property {Method} AltiResponseReader.READERS.exceptionreport - Lecture d'un noeud \"ExceptionReport\" de la réponse xml du service alti.\n *\n * @property {Method} AltiResponseReader.READERS.exception - Lecture d'un noeud \"Exception\" de la réponse xml du service alti.\n *\n * @property {Method} AltiResponseReader.read - Méthode permettant de lancer la lecture d'une réponse XML du service altimétrique,\n * à l'aide des readers de la classe.\n *\n */\nvar AltiResponseReader = {};\n\nAltiResponseReader.READERS = {\n\n /**\n * Lecture d'un noeud \"elevations\" de la réponse XML du service alti, correspondant logiquement à la racine du document\n * (contient un ou plusieurs childNodes correspondant chacun à une élévation retournée)\n *\n * @param {DOMElement} root - racine de la réponse XML\n * @static\n * @memberof AltiResponseReader\n * @returns {Object} Retourne un objet de type AltiResponse\n */\n elevations : function (root) {\n // INFO : on passe en paramètre l'objet en entrée elevations, vide, à remplir.\n var altiResponse = new AltiResponse();\n\n if (root.hasChildNodes()) {\n var children = root.childNodes;\n var child;\n var elevation;\n\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n\n if (AltiResponseReader.READERS[child.nodeName]) {\n elevation = AltiResponseReader.READERS[child.nodeName](child);\n altiResponse.elevations.push(elevation);\n }\n }\n }\n\n return altiResponse;\n },\n\n /**\n * Lecture d'un noeud \"elevation\" de la réponse xml du service alti.\n * (contient un ou 5 childNode (s) correspondant à l'altitude (z) et éventuellement lat, lon, acc et measures)\n *\n * @param {DOMElement} node - noeud elevation à lire pour récupérer les informations de l'élévation retournée (z [, lon, lat, acc, measures])\n * @return {Array} elevationResponse - format de la réponse en sortie, instance de AltiResponse\n * @static\n * @memberof AltiResponseReader\n */\n elevation : function (node) {\n var elevation = new Elevation();\n\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (AltiResponseReader.READERS[child.nodeName]) {\n // INFO : on passe en paramètre l'objet en entrée elevation, vide, à remplir.\n AltiResponseReader.READERS[child.nodeName](child, elevation);\n }\n }\n }\n return elevation;\n },\n\n /**\n * Lecture d'un noeud \"lat\" de la réponse xml du service alti.\n * (contient une valeur de latitude, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la latitude\n * @param {Object} elevation - objet dans lequel stocker la latitude retournée\n * @static\n * @memberof AltiResponseReader\n */\n lat : function (node, elevation) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n elevation.lat = parseFloat(textNode.nodeValue);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : latitude attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"lon\" de la réponse xml du service alti.\n * (contient une valeur de longitude, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la longitude\n * @param {Object} elevation - objet dans lequel stocker la longitude retournée\n * @static\n * @memberof AltiResponseReader\n */\n lon : function (node, elevation) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n elevation.lon = parseFloat(textNode.nodeValue);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : longitude attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"z\" de la réponse xml du service alti.\n * (contient une valeur d'altitude, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'altitude\n * @param {Object} elevationObject - objet dans lequel stocker l'altitude retournée : elevation ou measure\n * @static\n * @memberof AltiResponseReader\n */\n z : function (node, elevationObject) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n if (elevationObject) {\n elevationObject.z = parseFloat(textNode.nodeValue);\n } else {\n elevationObject = new Elevation();\n elevationObject.z = parseFloat(textNode.nodeValue);\n return elevationObject;\n }\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : altitude attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"acc\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} elevationObject - objet dans lequel stocker la précision retournée : elevation ou measure\n * @static\n * @memberof AltiResponseReader\n */\n acc : function (node, elevationObject) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n elevationObject.acc = parseFloat(textNode.nodeValue);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : précision (acc) attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"source_name\" de la réponse xml du service alti.\n * (contient le nom de la source, qui est un string)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} measure - objet dans lequel stocker le nom de la source retourné\n * @static\n * @memberof AltiResponseReader\n */\n source_name : function (node, measure) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n measure.source_name = textNode.nodeValue;\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : source_name attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"source_measure\" de la réponse xml du service alti.\n * (contient le nom de la mesure, qui est un string)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} measure - objet dans lequel stocker le nom de la source retourné\n * @static\n * @memberof AltiResponseReader\n */\n source_measure : function (node, measure) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n measure.source_measure = textNode.nodeValue;\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : source_measure attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"measures\" et de ses enfants \"measure\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} elevation - objet dans lequel stocker la précision retournée\n * @static\n * @memberof AltiResponseReader\n */\n measures : function (node, elevation) {\n elevation.measures = [];\n var measure;\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var measureNode;\n var measureChildren;\n for (var i = 0; i < children.length; i++) {\n measure = new Measure();\n measureNode = children[i];\n measureChildren = measureNode.childNodes;\n for (var j = 0; j < measureChildren.length; j++) {\n if (AltiResponseReader.READERS[measureChildren[j].nodeName]) {\n // INFO : on passe en paramètre l'objet en entrée elevation, vide, à remplir.\n AltiResponseReader.READERS[measureChildren[j].nodeName](measureChildren[j], measure);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : measures attendues mais absentes\");\n }\n }\n elevation.measures.push(measure);\n }\n }\n },\n\n /**\n * Lecture d'un noeud \"ExceptionReport\" de la réponse xml du service alti.\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'exception\n * @return {Object} exceptionReport - objet contenant l'exception\n * @static\n * @memberof AltiResponseReader\n */\n exceptionreport : function (node) {\n var response = {};\n\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (child.nodeName === \"Exception\") {\n response.exceptionReport = AltiResponseReader.READERS.exception(child);\n }\n }\n }\n\n return response;\n },\n\n /**\n * Lecture d'un noeud \"Exception\" de la réponse xml du service alti.\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'exception\n * @return {Object} exceptionReport - objet contenant l'exception, avec deux attributs :\n * {String} exceptionReport.exceptionCode - qui contient l'identifiant du code de l'exception\n * {String} exceptionReport.exception - qui contient le message de l'exception\n * @static\n * @memberof AltiResponseReader\n */\n exception : function (node) {\n var exceptionReport = {};\n\n // get exception code\n var exceptionCode = node.getAttribute(\"exceptionCode\");\n if (exceptionCode) {\n exceptionReport.exceptionCode = exceptionCode;\n }\n\n // get exception message\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n exceptionReport.exception = textNode.nodeValue;\n }\n\n return exceptionReport;\n },\n\n /**\n * Lecture d'un noeud \"Error\" de la réponse xml du service alti.\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'exception\n * @return {Object} error - objet contenant l'exception\n * @static\n */\n error : function (node) {\n var response = {\n error : {}\n };\n // get error code and description\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n var textNode;\n // get error code\n if (child.nodeType === 1 && child.nodeName === \"code\") { // 1 === node.ELEMENT_NODE\n textNode = child.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n response.error.code = textNode.nodeValue;\n }\n }\n // get error description\n if (child.nodeType === 1 && child.nodeName === \"description\") { // 1 === node.ELEMENT_NODE\n textNode = child.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n response.error.description = textNode.nodeValue;\n }\n }\n }\n }\n return response;\n }\n\n};\n\n/**\n * Méthode permettant de lancer la lecture d'une réponse XML du service altimétrique,\n * à l'aide des readers de la classe.\n *\n * @method AltiResponseReader.read\n * @param {DOMElement} root - racine de la réponse XML à lire\n * @static\n * @memberof AltiResponseReader\n */\nAltiResponseReader.read = function (root) {\n if (root.nodeName === \"elevations\") {\n var altiResponse = AltiResponseReader.READERS.elevations(root);\n return altiResponse;\n } else if (root.nodeName === \"ExceptionReport\") {\n var exceptionReport = AltiResponseReader.READERS.exceptionreport(root);\n return exceptionReport;\n } else if (root.nodeName === \"error\") {\n var error = AltiResponseReader.READERS.error(root);\n return error;\n } else {\n throw new Error(\"Erreur lors de la lecture de la réponse : elle n'est pas au format attendu.\");\n }\n};\n\nexport default AltiResponseReader;\n","/**\n * Creation d'une requête en REST ou WPS\n * (Factory)\n *\n * @module AltiRequestFactory\n * @alias Gp.Services.Alti.Request.AltiRequestFactory\n * @private\n */\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport AltiRequestREST from \"./AltiRequestREST\";\nimport AltiRequestWPS from \"./AltiRequestWPS\";\n\nvar AltiRequestFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Alti\n *\n * @example\n * var options = {\n * httpMethod : 'GET', // GET|POST\n * onSuccess : function (response) {},\n * onError : function (error) {},\n * scope : this,\n * positions : [{lon:, lat:}, {lon:, lat:}],\n * outputFormat : 'json' // json|xml\n * sampling : 3,\n * api : 'REST', // REST|WPS\n * zonly : false // false|true\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"AltiRequestFactory\");\n logger.trace([\"AltiRequestFactory::build()\"]);\n\n var request = null;\n\n // on factorise les options par groupe;\n // - global,\n // - param, les params pour les data inputs\n // - wps, les param du service\n // - callback\n\n var settings = {\n // ajout des valeurs par defaut spécifiques au service\n type : options.sampling ? \"Profil\" : \"Elevation\",\n method : options.httpMethod,\n param : {\n positions : null,\n delimiter : null, // FIXME par defaut, on ne le met pas en place car ça fait planter la requête !?\n indent : null, // par defaut\n crs : null, // par defaut\n format : null, // (only to POST)\n sampling : null, // (only use by Profil)\n zonly : null, // (only use by Elevation)\n measures : null // (only use by Elevation)\n }\n };\n\n // surcharge des valeurs obligatoires\n settings.param.positions = options.positions;\n settings.param.format = options.outputFormat;\n settings.param.sampling = options.sampling;\n settings.param.zonly = options.zonly;\n settings.param.measures = options.measures;\n settings.param.resource = options.resource;\n\n // gestion des callback\n var bOnError = !!(options.onError !== null && typeof options.onError === \"function\"); // cast variable to boolean\n var bOnSuccess = !!(options.onSuccess !== null && typeof options.onSuccess === \"function\");\n\n var message = null;\n switch (options.api) {\n case \"REST\":\n // FIXME les exceptions ne sont pas 'catchées' sur le constructeur !\n var myReq = new AltiRequestREST(settings);\n if (!myReq.processRequestString()) {\n message = \"Error in process request (rest) !\";\n if (bOnError) {\n options.onError.call(options.scope, new ErrorService(message));\n return;\n }\n throw new Error(message);\n }\n request = myReq.requestString;\n break;\n case \"WPS\":\n // ajout des valeurs par defaut spécifiques au service WPS\n settings.wps = {\n service : null, // par defaut\n version : null, // par defaut\n identifier : null, // par defaut\n rawdataoutput : null, // par defaut\n request : null // par defaut\n };\n\n request = AltiRequestWPS.build(settings);\n if (!request) {\n message = \"Error in process request (wps) !\";\n if (bOnError) {\n options.onError.call(options.scope, new ErrorService(message));\n return;\n }\n throw new Error(message);\n }\n break;\n default:\n message = \"Type of API is not supported by service (REST or WPS) !\";\n if (bOnError) {\n options.onError.call(options.scope, new ErrorService(message));\n return;\n }\n throw new Error(message);\n }\n\n if (bOnSuccess) {\n options.onSuccess.call(options.scope, request);\n }\n\n return request;\n }\n};\n\nexport default AltiRequestFactory;\n","/* jshint multistr : true */\n\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport AltiElevationRequest from \"./model/AltiElevationRequest\";\nimport AltiProfilRequest from \"./model/AltiProfilRequest\";\n\n/**\n * @classdesc\n * Classe de gestion des requêtes de type REST sur le service altimetrique.\n *\n * @todo Le service Alti n'implemente pas le POST !?\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiRequestREST\n * @param {Object} options - options\n * @param {Object} options.param.positions - tableau de coordonnées lon/lat\n * @param {String} options.param.delimiter - '|'\n * @param {Boolean} options.param.indent - false|true\n * @param {String} options.param.crs - 'CRS:84'\n * @param {String} options.param.sampling - 3\n * @param {String} options.param.resource - 'rge_alti_corse2a_float32_zip_lamb93'\n * @param {Boolean} options.param.zonly - false|true\n * @param {Boolean} options.param.measures - false|true\n * @param {String} options.param.format - \"JSON|XML\"\n * @param {String} options.type - \"Profil|Elevation\"\n * @param {String} options.method - GET|POST\n *\n * @example\n * var options = {\n * type : 'Profil', // Elevation\n * method : 'GET', // par defaut\n * param : {\n * positions : [\n * {lon:'1.11', lat:'1.11'},\n * {lon:'1.10', lat:'1.10'},\n * {lon:'1.12', lat:'1.12'}\n * ],\n * delimiter : \";\", // par defaut\n * indent : true, // par defaut\n * crs : 'EPSG:4326', // par defaut\n * format : 'json', // par defaut (only to POST)\n * sampling : 3 , // par defaut (only use by Profil)\n * zonly : false // par defaut (only use by Elevation)\n * measures : false // par defaut (only use by Elevation)\n * }\n * };\n *\n * var result;\n * try {\n * var obj = new AltiRequestREST (options);\n * if (! obj.processRequestString ()) {\n * throw new Error(\"Request empty !?\")\n * }\n * result = obj.requestString;\n * } catch (e) {\n * // exceptions...\n * }\n * @private\n */\nfunction AltiRequestREST (options) {\n this.logger = Logger.getLogger(\"AltiRequestREST\");\n this.logger.trace(\"[Constructeur AltiRequestREST ()]\");\n\n if (!(this instanceof AltiRequestREST)) {\n throw new TypeError(\"AltiRequestREST constructor cannot be called as a function.\");\n }\n\n this.options = options || {};\n\n // existance des options\n if (!this.options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n // type de requete : Altitude ou Profil\n // (param. à determiner en fonction des parametres d'entrée)\n if (!this.options.type) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"type (Elevation or Profil)\"));\n }\n\n // construction du modele de requête\n // (test du type d'objet candidat)\n this.DataObject = null;\n switch (this.options.type) {\n case \"Elevation\":\n this.DataObject = new AltiElevationRequest(this.options.param);\n break;\n case \"Profil\":\n this.DataObject = new AltiProfilRequest(this.options.param);\n break;\n default:\n throw new Error(_.getMessage(\"PARAM_TYPE\", \"type (Elevation or Profil)\"));\n }\n\n /**\n * methode.\n * Par defaut, \"GET\".\n */\n this.method = this.options.method || \"GET\";\n}\n\nAltiRequestREST.prototype = {\n\n /**\n * request\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : AltiRequestREST,\n\n /**\n * Template de la requête.\n */\n template : {\n get : {\n // FIXME on retire le param 'delimiter' : &delimiter='__DELIMITER__'\n value : \"lon=__LON__&lat=__LAT__&indent=__INDENT__&crs='__CRS__'&resource=__RESOURCE__&measures=__MEASURES__\",\n input : {\n point : \"&zonly=__ZONLY__\",\n profil : \"&sampling=__SAMPLING__\"\n }\n },\n post : {\n // FIXME on retire le param 'delimiter' : delimiter='__DELIMITER__'\\n\\\n value : \"lon=__LON__\\n\" +\n \"lat=__LAT__\\n\" +\n \"indent=__INDENT__\\n\" +\n \"crs='__CRS__'\\n\" +\n \"resource='__RESOURCE__'\\n\" +\n \"measures='__MEASURES__'\\n\",\n input : {\n point : \"zonly=__ZONLY__\\n\",\n profil : \"sampling=__SAMPLING__\"\n }\n }\n },\n\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out : lon=0.2367,2.1570&lat=48.0551,46.6077&delimiter=,&indent=true&zonly=true&crs='CRS:84'\n * // POST out : Not yet supported method POST !\n * @returns {String}\n */\n processRequestString : function () {\n this.logger.trace(\"AltiRequestREST::processRequestString ()\");\n\n var template = \"\";\n if (this.method === \"POST\") {\n template = this.template.post.value;\n } else if (this.method === \"GET\") {\n template = this.template.get.value;\n }\n\n template = template.replace(/__LON__/g, this.DataObject.getLon());\n template = template.replace(/__LAT__/g, this.DataObject.getLat());\n // FIXME on retire le param 'delimiter'\n // template = template.replace(/__DELIMITER__/g, this.DataObject.delimiter);\n template = template.replace(/__INDENT__/g, this.DataObject.indent);\n template = template.replace(/__CRS__/g, this.DataObject.crs);\n template = template.replace(/__RESOURCE__/g, this.DataObject.resource);\n template = template.replace(/__MEASURES__/g, this.DataObject.measures);\n\n // ajout +\n template = template + this.__addDataInputs();\n this.logger.trace(\"traduction tmpl\", template);\n\n // sauvegarde\n this.requestString = template;\n\n return this.requestString;\n },\n\n /**\n * Ajout de parametres spécifiques (ex. zonly)\n *\n * @returns {String}\n */\n __addDataInputs : function () {\n this.logger.trace(\"AltiRequestREST::addDataInput ()\");\n\n var myTemplate;\n if (this.method === \"POST\") {\n myTemplate = this.template.post;\n } else if (this.method === \"GET\") {\n myTemplate = this.template.get;\n } else {\n throw new Error(\"No other HTTP method supported by the service !\");\n }\n\n var tmpl = null;\n if (this.DataObject.CLASSNAME === \"AltiElevationRequest\") {\n tmpl = myTemplate.input.point;\n return tmpl.replace(/__ZONLY__/g, this.DataObject.zonly.toString());\n } else if (this.DataObject.CLASSNAME === \"AltiProfilRequest\") {\n tmpl = myTemplate.input.profil;\n return tmpl.replace(/__SAMPLING__/g, this.DataObject.sampling);\n } else {\n throw new Error(\"No other object supported than elevation or profil !?\");\n }\n }\n};\n\nexport default AltiRequestREST;\n","/**\n * Classe d'interface des requêtes de type WPS sur le service altimetrique.\n * (Factory)\n *\n * @module Gp.Services.Alti.Request.AltiRequestWPS\n * @alias Gp.Services.Alti.Request.AltiRequestWPS\n * @private\n */\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport WPS from \"../../../Formats/WPS\";\nimport AltiElevationRequest from \"./model/AltiElevationRequest\";\nimport AltiProfilRequest from \"./model/AltiProfilRequest\";\n\nvar AltiRequestWPS = {\n\n /**\n * Interface unique de construction de la requête.\n *\n * @method build\n * @param {Object} options - options\n * @param {Object} options.param.positions - tableau de coordonnées lon/lat\n * @param {String} options.param.delimiter - '|'\n * @param {Boolean} options.param.indent - false|true\n * @param {String} options.param.crs - 'CRS:84'\n * @param {String} options.param.sampling - 3\n * @param {Boolean} options.param.zonly - false|true\n * @param {String} options.param.format - \"JSON|XML\" (only to POST)\n * @param {String} options.wps.service - \"WPS\"\n * @param {String} options.wps.version - \"1.0.0\"\n * @param {String} options.wps.identifier - \"gs:WPSElevation|gs:WPSLineElevation\"\n * @param {String} options.wps.rawdataoutput - \"result\"\n * @param {String} options.wps.request - \"Execute\"\n * @param {String} options.type - \"Profil|Elevation\"\n * @param {String} options.method - GET|POST\n * @example\n * var options = {\n * type : 'Profil', // Elevation\n * method : 'GET', // par defaut\n * param : {\n * positions : [\n * {lon:'1.11', lat:'1.11'},\n * {lon:'1.10', lat:'1.10'},\n * {lon:'1.12', lat:'1.12'}\n * ],\n * delimiter : \";\", // par defaut\n * indent : true, // par defaut\n * crs : 'EPSG:4326', // par defaut\n * format : 'json', // par defaut (only to POST)\n * sampling : 3 , // par defaut (only use by Profil)\n * zonly : false, // par defaut (only use by Elevation)\n * },\n * wps : {\n * service : 'WPS', // par defaut\n * version : '1.0.0', // par defaut\n * identifier : 'gs:WPS', // par defaut, Elevation = gs:WPSElevation, Profil = gs:WPSLineElevation\n * rawdataoutput : 'result',// par defaut\n * request : 'Execute' // par defaut\n * }\n * };\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"AltiRequestWPS\");\n logger.trace([\"AltiRequestWPS::build()\"]);\n\n // existance des options\n if (!options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n // type de requete : Altitude ou Profil\n // (param. à determiner en fonction des parametres d'entrée)\n if (!options.type) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"type (Elevation or Profil)\"));\n }\n\n // construction du modele de requête\n // (test du type d'objet candidat)\n var DataObject = null;\n switch (options.type) {\n case \"Elevation\":\n // surcharge\n options.wps.identifier = \"gs:WPSElevation\";\n DataObject = new AltiElevationRequest(options.param);\n break;\n case \"Profil\":\n // surcharge\n options.wps.identifier = \"gs:WPSLineElevation\";\n DataObject = new AltiProfilRequest(options.param);\n break;\n default:\n throw new Error(_.getMessage(\"PARAM_TYPE\", \"type (Elevation or Profil)\"));\n }\n\n // construction de la requête WPS\n var settings = {\n data : DataObject,\n method : options.method,\n param : options.wps\n };\n\n var rqstWPS = new WPS(settings);\n\n if (!rqstWPS.processRequestString()) {\n throw new Error(\"Enable to process request !\");\n }\n\n return rqstWPS.requestString;\n }\n};\n\nexport default AltiRequestWPS;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\nimport AltiRequest from \"./AltiRequest\";\n\n/**\n * @classdesc\n *\n * Classe de gestion des param. des requêtes de type POINT du service altimetrique.\n *\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiElevationRequest\n * @param {Object} options - options\n * @param {Boolean} options.zonly - false|true\n *\n * @private\n */\nfunction AltiElevationRequest (options) {\n if (!(this instanceof AltiElevationRequest)) {\n throw new TypeError(\"AltiElevationRequest constructor cannot be called as a function.\");\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"AltiElevationRequest\";\n\n // appel du constructeur par heritage\n AltiRequest.apply(this, arguments);\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur AltiElevationRequest ()]\");\n\n /**\n * Z uniquement.\n * true|false\n */\n this.zonly = this.options.zonly || false; // test des options héritées !\n}\n\n/**\n * @lends module:AltiElevationRequest#\n */\n\nAltiElevationRequest.prototype = Object.create(AltiRequest.prototype, {\n\n /**\n * Setter/getter pour \"zonly\"\n */\n zonly : {\n /** getter */\n get : function () {\n return this._zonly;\n },\n /** setter */\n set : function (z) {\n this._zonly = z;\n }\n }\n\n});\n\n/**\n * Constructeur (alias)\n */\nAltiElevationRequest.prototype.constructor = AltiElevationRequest;\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Array}\n */\nAltiElevationRequest.prototype.getData = function () {\n // par glop..., appel de AltiRequest::getData () !\n var map = [];\n map.push({\n k : \"lon\",\n v : this.getLon()\n });\n map.push({\n k : \"lat\",\n v : this.getLat()\n });\n // map.push({k : \"delimiter\", v : this.delimiter}); // FIXME on retire le param \"delimiter\"\n map.push({\n k : \"indent\",\n v : this.indent\n });\n map.push({\n k : \"crs\",\n v : this.crs\n });\n map.push({\n k : \"zonly\",\n v : this.zonly\n });\n map.push({\n k : \"format\",\n v : this.format\n });\n map.push({\n k : \"resource\",\n v : this.resource\n });\n\n return map;\n};\n\nexport default AltiElevationRequest;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\nimport AltiRequest from \"./AltiRequest\";\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes de type PROFIL du service altimetrique.\n *\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiProfilRequest\n * @param {Object} options - options\n * @param {String} options.sampling - 3\n *\n * @private\n */\nfunction AltiProfilRequest (options) {\n if (!(this instanceof AltiProfilRequest)) {\n throw new TypeError(\"AltiProfilRequest constructor cannot be called as a function.\");\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"AltiProfilRequest\";\n\n // appel du constructeur par heritage\n AltiRequest.apply(this, arguments);\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur AltiProfilRequest ()]\");\n\n /**\n * Sampling\n * Par defaut, 3\n */\n this.sampling = this.options.sampling || 3; // test des options héritées !\n}\n\n/**\n * @lends module:AltiProfilRequest#\n */\n\nAltiProfilRequest.prototype = Object.create(AltiRequest.prototype, {\n\n /**\n * Setter/getter pour \"sampling\"\n */\n sampling : {\n /** getter */\n get : function () {\n return this._sampling;\n },\n /** setter */\n set : function (value) {\n this._sampling = value;\n }\n }\n});\n\n/**\n * Constructeur (alias)\n */\nAltiProfilRequest.prototype.constructor = AltiProfilRequest;\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Object[]}\n */\nAltiProfilRequest.prototype.getData = function () {\n // par glop..., appel de AltiRequest::getData () !\n var map = [];\n map.push({\n k : \"lon\",\n v : this.getLon()\n });\n map.push({\n k : \"lat\",\n v : this.getLat()\n });\n // map.push({k : \"delimiter\", v : this.delimiter}); // FIXME on retire le param \"delimiter\"\n map.push({\n k : \"indent\",\n v : this.indent\n });\n map.push({\n k : \"crs\",\n v : this.crs\n });\n map.push({\n k : \"sampling\",\n v : this.sampling\n });\n map.push({\n k : \"format\",\n v : this.format\n });\n map.push({\n k : \"resource\",\n v : this.resource\n });\n\n return map;\n};\n\nexport default AltiProfilRequest;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes du service altimetrique.\n *\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiRequest\n * @param {Object} options - options\n * @param {Object} options.positions - tableau de coordonnées lon/lat\n * @param {String} options.delimiter - \"|\"\n * @param {Boolean} options.indent - false|true\n * @param {String} options.crs - \"CRS:84\"\n * @param {String} options.format - \"JSON|XML\"\n *\n * @private\n */\nfunction AltiRequest (options) {\n if (!(this instanceof AltiRequest)) {\n throw new TypeError(\"AltiRequest constructor cannot be called as a function.\");\n }\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur AltiRequest ()]\");\n\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n /**\n * Liste des coordonnées.\n * @example\n * var c = [{lon : \"\", lat : \"\"}, {lon : \"\", lat : \"\"}];\n */\n this.positions = this.options.positions || [];\n\n /**\n * Caractère de séparation.\n * Par defaut, \"|\".\n */\n this.delimiter = this.options.delimiter || \"|\";\n\n /**\n * Indentation.\n * true|false\n */\n this.indent = this.options.indent || false;\n\n /**\n * Projection.\n * Par defaut, CRS:84.\n */\n this.crs = this.options.crs || \"CRS:84\";\n\n /**\n * format de sortie.\n * Par defaut, \"json\".\n */\n this.format = this.options.format || \"json\";\n\n /*\n * Ressource utilisée\n */\n this.resource = this.options.resource;\n\n /**\n * Réponse détaillée (source & accuracy)\n * true|false\n */\n this.measures = this.options.measures || false;\n}\n\n/**\n * CLASSNAME\n */\nAltiRequest.CLASSNAME = \"AltiRequest\";\n\nAltiRequest.prototype = {\n\n /**\n * @lends module:AltiRequest#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor : AltiRequest,\n\n /**\n * Ajout d\"une liste de coordonnées.\n *\n * @param {Object[]} lstPosition - liste de positions\n * @example\n * obj.setPositions ([{lon : \"0.15\", lat : \"0.15\"}, {lon : \"1.15\", lat : \"1.15\"}]);\n */\n setPositions : function (lstPosition) {\n var positions = [];\n for (var i = 0; i < lstPosition.length; i++) {\n var o = lstPosition[i];\n if (o.lon && o.lat) {\n positions.push(o);\n }\n }\n\n this.positions = positions;\n },\n\n /**\n * Liste des coordonnées.\n *\n * @param {Int} pos - position\n * @returns {positions}\n * @example\n * obj.getPositions (); // [{lon : \"\", lat : \"\"}, {lon : \"\", lat : \"\"}]\n * obj.getPositions (0); // [{lon : \"\", lat : \"\"}]\n */\n getPositions : function (pos) {\n // FIXME test if not a number !?\n if (!pos) {\n return this.positions;\n }\n\n var index = this.positions.length - 1;\n if (pos > index || pos < index) {\n this.logger.warn(\"index out of range !\");\n return this.positions;\n }\n\n return this.positions[pos];\n },\n\n /**\n * Ajout d\"une liste de coordonnées.\n *\n * @param {Object[]} lstPosition - liste de positions\n * @example\n * obj.addPositions ([{lon : \"0.15\", lat : \"0.15\"}, {lon : \"1.15\", lat : \"1.15\"}]);\n */\n addPositions : function (lstPosition) {\n for (var i = 0; i < lstPosition.length; i++) {\n var o = lstPosition[i];\n if (o.lon && o.lat) {\n this.positions.push(lstPosition[i]);\n }\n }\n },\n\n /**\n * Retourne la liste des longitudes avec un caractère de séparation.\n *\n * @returns {String} - une liste de longitudes\n * @example\n * // out : 0.2367|2.1570|43.789|...\n */\n getLon : function () {\n var lstLon = [];\n for (var i = 0; i < this.positions.length; i++) {\n lstLon.push(this.positions[i].lon);\n }\n this.logger.trace(lstLon);\n return lstLon.join(this.delimiter);\n },\n\n /**\n * Retourne la liste des lattitudes avec un caractère de séparation.\n *\n * @returns {String} - une liste de lattitudes\n * @example\n * // out : 0.2367|2.1570|43.789|...\n */\n getLat : function () {\n var lstLat = [];\n for (var i = 0; i < this.positions.length; i++) {\n lstLat.push(this.positions[i].lat);\n }\n this.logger.trace(lstLat);\n return lstLat.join(this.delimiter);\n }\n\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Object[]}\n */\nAltiRequest.prototype.getData = function () {\n var map = [];\n\n map.push({\n k : \"lon\",\n v : this.getLon()\n });\n map.push({\n k : \"lat\",\n v : this.getLat()\n });\n map.push({\n k : \"delimiter\",\n v : this.delimiter\n });\n map.push({\n k : \"indent\",\n v : this.indent\n });\n map.push({\n k : \"crs\",\n v : this.crs\n });\n map.push({\n k : \"format\",\n v : this.format\n });\n\n return map;\n};\n\nexport default AltiRequest;\n","/**\n * Factory pour générer une reponse JSON à partir d'un XML ou d'un JSON\n * (Factory)\n *\n * @module AltiResponseFactory\n * @private\n * @alias Gp.Services.Alti.Response.AltiResponseFactory\n */\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport XML from \"../../../Formats/XML\";\nimport AltiResponseReader from \"../Formats/AltiResponseReader\";\nimport AltiResponse from \"./model/AltiResponse\";\nimport Elevation from \"./model/Elevation\";\n\nvar AltiResponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Alti\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"AltiResponseFactory\");\n logger.trace([\"AltiResponseFactory::build()\"]);\n\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n switch (options.outputFormat) {\n case \"xml\":\n logger.trace(\"analyze response : xml\");\n\n try {\n var p = new XML({\n reader : AltiResponseReader\n });\n\n if (typeof options.response === \"string\") {\n p.setXMLString(options.response);\n } else {\n p.setXMLDoc(options.response);\n }\n\n data = p.parse();\n\n if (!data) {\n throw new Error(MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION_2\"));\n }\n } catch (e) {\n var message = e.message;\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", message),\n status : 200,\n type : ErrorService.TYPE_SRVERR\n }));\n return;\n }\n\n break;\n\n case \"json\":\n logger.trace(\"analyze response : json\");\n logger.trace(\"analyze response : \", typeof options.response);\n\n var JSONResponse = null;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // le service renvoie t il une erreur ?\n if (JSONResponse && JSONResponse.error) {\n // ex. {\"error\": {\"code\": \"BAD_PARAMETER\",\"description\": \"The values () cannot be parsed as a valid longitude (double value such as -180 < lat < 180).\"}}\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", JSONResponse.error.description),\n status : 200,\n type : ErrorService.TYPE_SRVERR\n }));\n return;\n }\n\n // analyse de la reponse\n if (JSONResponse) {\n var elevations = JSONResponse.elevations;\n var altiResponse = new AltiResponse();\n var elevation;\n if (Array.isArray(elevations) && elevations.length) {\n for (var i = 0; i < elevations.length; i++) {\n elevation = new Elevation();\n\n if (typeof elevations[i] === \"object\") {\n // elevations[i] est un objet elevation\n if (elevations[i].lon) {\n elevation.lon = elevations[i].lon;\n }\n if (elevations[i].lat) {\n elevation.lat = elevations[i].lat;\n }\n if (elevations[i].z) {\n elevation.z = elevations[i].z;\n }\n if (elevations[i].acc) {\n elevation.acc = elevations[i].acc;\n }\n if (elevations[i].measures) {\n elevation.measures = elevations[i].measures;\n }\n } else if (typeof elevations[i] === \"number\") {\n // elevations[i] est un nombre, dans le cas de zonly=true notamment\n elevation.z = elevations[i];\n }\n\n if (Array.isArray(altiResponse.elevations)) {\n altiResponse.elevations.push(elevation);\n }\n }\n }\n data = altiResponse;\n }\n\n if (!data) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE_2\"),\n type : ErrorService.TYPE_UNKERR,\n status : -1\n }));\n return;\n }\n break;\n\n default:\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_FORMAT_2\"),\n type : ErrorService.TYPE_UNKERR,\n status : -1\n }));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type : ErrorService.TYPE_SRVERR,\n status : 200\n }));\n return;\n } else if (data.error) {\n var errorMess = data.error.description;\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", errorMess),\n type : ErrorService.TYPE_SRVERR,\n status : 200\n }));\n return;\n }\n }\n } else {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default AltiResponseFactory;\n","/**\n * Response object for {@link module:Services~getAltitude Gp.Services.getAltitude ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Array.} elevations - Elevations array.\n *\n * @namespace\n * @alias Gp.Services.AltiResponse\n */\nfunction AltiResponse () {\n if (!(this instanceof AltiResponse)) {\n throw new TypeError(\"AltiResponse constructor cannot be called as a function.\");\n }\n\n this.elevations = [];\n}\n\nAltiResponse.prototype = {\n\n constructor : AltiResponse\n\n};\n\nexport default AltiResponse;\n","\n/**\n * Single elevation object returned by underlying web service. Contains at least, one elevation (z). May also contain point coordinates and elevation accuracy if \"zonly\" parameter wasn't set to true.\n *\n * @property {Float} lat - Point latitude. (only if zonly=false)\n * @property {Float} lon - Point longitude. (only if zonly=false)\n * @property {Float} z - Point elevation.\n * @property {Float} acc - Accuracy of elevation for this point. (only if zonly=false)\n *\n * @namespace\n * @alias Gp.Services.Alti.Elevation\n */\nfunction Elevation () {\n if (!(this instanceof Elevation)) {\n throw new TypeError(\"Elevation constructor cannot be called as a function.\");\n }\n\n this.z = null;\n}\n\nElevation.prototype = {\n\n constructor : Elevation\n\n};\n\nexport default Elevation;\n","\n/**\n * Single measure object returned by underlying web service if measures = true and zonly = false\n *\n * @property {String} source_name - Name of the source\n * @property {String} source_measure - Name of the measure\n * @property {Float} z - Point elevation.\n * @property {Float} acc - Accuracy of elevation for this point. (only if zonly=false)\n *\n * @namespace\n * @alias Gp.Services.Alti.Measure\n */\nfunction Measure () {\n if (!(this instanceof Measure)) {\n throw new TypeError(\"Measure constructor cannot be called as a function.\");\n }\n\n this.source_name = null;\n this.source_measure = null;\n this.z = null;\n this.acc = null;\n}\n\nMeasure.prototype = {\n\n constructor : Measure\n\n};\n\nexport default Measure;\n","import CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport AutoCompleteResponseFactory from \"./Response/AutoCompleteResponseFactory\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport MR from \"../../Utils/MessagesResources\";\nimport Helper from \"../../Utils/Helper\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\n\n/**\n * @classdesc\n * Appel du service d'autocomplétion du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.AutoComplete\n *\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String} options.text - La chaîne de caractère à compléter.\n * Cette chaîne n'est pas \"URL encodée\".\n * C'est l'API qui s'occupe de l'encoder pour l'inclure dans la requête.\n *\n * @param {Array.} [options.type = [\"StreetAddress\"]] - Type de l'objet recherché.\n * Le service d'autocomplétion du Géoportail permet de rechercher des toponymes 'PositionOfInterest' et/ou des adresses postales 'StreetAddress'.\n * D'autres types pourront être rajoutés selon l'évolution du service.\n * Par défaut, type = ['StreetAddress'].\n *\n * @param {String} [options.territory] - Limitation de la zone de recherche de localisants.\n * Le service d'autocomplétion du Géoportail permet de limiter la recherche à la métropole et la Corse : options.territory = 'METROPOLE',\n * DOMS TOMS : options.territory = 'DOMTOM', ou à un département : options.territory = '31'\n * Pas de valeur par défaut.\n * La valeur par défaut est donc celle du service.\n * Le service d'autocomplétion du Géoportail renvoie toutes les informations quand aucun territoire n'est spécifié.\n *\n * @param {Number} [options.maximumResponses = 10] - Nombre de réponses maximal que l'on souhaite recevoir.\n * Pas de valeur par défaut.\n * La valeur par défaut sera donc celle du service : 10.\n *\n * @example\n * var options = {\n * // options communes aux services\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * text : \"\",\n * type : \"StreetAddress\",\n * territory : 'METROPOLE',\n * maximumResponses : 10\n * };\n */\nfunction AutoComplete (options_) {\n if (!(this instanceof AutoComplete)) {\n throw new TypeError(MR.getMessage(\"CLASS_CONSTRUCTOR\", \"AutoComplete\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"AutoComplete\";\n\n this.logger = Logger.getLogger(\"Gp.Services.AutoComplete\");\n this.logger.trace(\"[Constructeur AutoComplete (options)]\");\n\n var options = this.patchOptionConvertor(options_);\n\n if (!options.serverUrl) {\n options.serverUrl = DefaultUrlService.AutoComplete.newUrl();\n }\n\n // appel du constructeur par heritage\n CommonService.apply(this, arguments);\n\n if (!options.text) {\n throw new Error(MR.getMessage(\"PARAM_MISSING\", \"text\"));\n }\n\n // ajout des options spécifiques au service\n this.options.text = options.text;\n\n // on definit des parametres par defaut\n if (!options.type) {\n options.type = [\"StreetAddress,PositionOfInterest\"];\n }\n\n this.options.type = options.type;\n this.options.territory = options.terr || \"\";\n this.options.maximumResponses = options.maximumResponses || 10;\n\n // INFO\n // le service ne repond pas en mode POST (405 Method Not Allowed)\n if (this.options.protocol === \"XHR\" && this.options.httpMethod === \"POST\") {\n this.logger.warn(\"Le service ne gére pas le mode d'interrogation en POST, on bascule sur du GET !\");\n this.options.httpMethod = \"GET\"; // on surcharge !\n }\n\n // attributs d'instances\n\n /**\n * Format forcé de la réponse du service : \"json\"\n * sauf si l'on souhaite une reponse brute (options.rawResponse)\n */\n this.options.outputFormat = (this.options.rawResponse) ? \"\" : \"json\";\n}\n\n/**\n * @lends module:AutoComplete#\n */\n\nAutoComplete.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nAutoComplete.prototype.constructor = AutoComplete;\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} options_ - options du service\n * @return {Object} - options\n */\nAutoComplete.prototype.patchOptionConvertor = function (options_) {\n const options = options_;\n\n if (options.filterOptions) {\n this.logger.warn(\"The parameter 'filterOptions' is deprecated\");\n\n if (options.filterOptions.type) {\n this.logger.warn(\"The parameter 'filterOptions.type' is deprecated\");\n if (!options.type) {\n options.type = options.filterOptions.type;\n }\n }\n\n if (options.filterOptions.territory) {\n this.logger.warn(\"The parameter 'filterOptions.territory' is deprecated\");\n if (!options.terr) {\n options.terr = options.filterOptions.territory;\n }\n }\n\n delete options.filterOptions;\n }\n\n return options;\n};\n\n/**\n * (overwrite)\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nAutoComplete.prototype.buildRequest = function (error, success) {\n // ex.\n // http://wxs.ign.fr/CLEF/ols/apis/completion?\n // text=Brie-Comt&\n // type=StreetAddress,PositionOfInterest&\n // territory=METROPOLE&\n // maximumResponses=10\n\n // traitement des param KPV sous forme de tableau\n var territory = \"\";\n if (this.options.territory) {\n territory = this.options.territory;\n }\n\n var type = \"\";\n if (this.options.type) {\n type = this.options.type.join(\",\");\n }\n\n // normalisation de la requete avec param KPV\n this.request = Helper.normalyzeParameters({\n text : encodeURIComponent(this.options.text),\n type : type,\n terr : territory,\n maximumResponses : this.options.maximumResponses\n });\n\n (!this.request)\n ? error.call(this, new ErrorService(MR.getMessage(\"SERVICE_REQUEST_BUILD\")))\n : success.call(this, this.request);\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback de succès de l'analyse de la réponse\n */\nAutoComplete.prototype.analyzeResponse = function (error, success) {\n if (this.response) {\n var options = {\n response : this.response,\n rawResponse : this.options.rawResponse,\n onSuccess : success,\n onError : error,\n scope : this\n };\n\n AutoCompleteResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(MR.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default AutoComplete;\n","/**\n * Factory pour générer une reponse JSON à partir d'un XML ou d'un JSON\n * (Factory)\n *\n * @module AutoCompleteResponseFactory\n * @private\n * @alias Gp.Services.AutoComplete.Response.AutoCompleteResponseFactory\n */\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport AutoCompleteResponse from \"./model/AutoCompleteResponse\";\nimport SuggestedLocation from \"./model/SuggestedLocation\";\n\nvar AutoCompleteResponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Alti\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"AutoCompleteResponseFactory\");\n logger.trace([\"AutoCompleteResponseFactory::build()\"]);\n\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n var JSONResponse = null;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // analyse de la réponse\n if (JSONResponse) {\n // le service renvoie t il une erreur ?\n if (JSONResponse.error) {\n // ex. ?\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", JSONResponse.error.description),\n status : JSONResponse.error.code,\n type : ErrorService.TYPE_SRVERR\n }));\n return;\n }\n\n // création de l'objet réponse\n data = new AutoCompleteResponse();\n\n // boucle sur les résultats de l'autocomplétion\n if (JSONResponse.results && Array.isArray(JSONResponse.results)) {\n var suggestedLocation = null;\n\n for (var i = 0; i < JSONResponse.results.length; i++) {\n var result = JSONResponse.results[i];\n suggestedLocation = new SuggestedLocation();\n\n if (result) {\n if (result.country === \"StreetAddress\") {\n suggestedLocation.street = result.street;\n suggestedLocation.type = \"StreetAddress\";\n } else if (result.country === \"PositionOfInterest\") {\n suggestedLocation.poi = result.street;\n suggestedLocation.type = \"PositionOfInterest\";\n suggestedLocation.poiType = result.poiType;\n }\n\n if (suggestedLocation.position) {\n suggestedLocation.position.x = result.x;\n suggestedLocation.position.y = result.y;\n }\n\n suggestedLocation.kind = result.kind;\n suggestedLocation.commune = result.city;\n suggestedLocation.fullText = result.fulltext;\n suggestedLocation.postalCode = result.zipcode;\n suggestedLocation.classification = result.classification;\n }\n // Ajout du résultat au tableau reverseGeocodedLocations de geocodedLocation\n data.suggestedLocations.push(suggestedLocation);\n }\n } else {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_FORMAT_3\")));\n return;\n }\n\n if (!data.suggestedLocations.length) {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_FORMAT_3\")));\n return;\n }\n }\n\n if (!data) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE_2\"),\n type : ErrorService.TYPE_UNKERR,\n status : -1\n }));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type : ErrorService.TYPE_SRVERR,\n status : 200\n }));\n return;\n }\n }\n } else {\n // si la réponse (xmlString) est vide, on appelle le callback d'erreur\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n\n // si tout s'est bien passé, on appelle le callback de succès\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default AutoCompleteResponseFactory;\n","/**\n * Response object for {@link module:Services~autoComplete Gp.Services.autoComplete ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Array.} suggestedLocations - SuggestedLocations array.\n *\n * @namespace\n * @alias Gp.Services.AutoCompleteResponse\n */\nfunction AutoCompleteResponse () {\n if (!(this instanceof AutoCompleteResponse)) {\n throw new TypeError(\"AutoCompleteResponse constructor cannot be called as a function.\");\n }\n\n this.suggestedLocations = [];\n}\n\nAutoCompleteResponse.prototype = {\n\n constructor : AutoCompleteResponse\n\n};\n\nexport default AutoCompleteResponse;\n","\n/**\n * Single SuggestedLocation Object returned by underlying web service.\n * Each suggested location represents a street address (\"StreetAddress\") or a place name (\"PositionOfInterest\").\n *\n * @property {String} type - Suggested location type : \"StreetAddress\" ou \"PositionOfInterest\"\n * @property {Gp.Point} position - Position of the suggested location given in requested coordinates system.\n * @property {String} commune - Suggested municipality\n * @property {String} fullText - Full text representation of the suggested location.\n * @property {String} postalCode - Suggested location postcode\n * @property {Integer} classification - Number used to classify the importance of the place where is the suggested location from 1 (most important) to 7 (less important).\n * @property {String} street - Street name of the suggested location (\"StreetAddress\" only).\n * @property {String} kind - Nature of the suggested location : \"prefecture\", \"monument\", \"commune\", ... for instance (\"PositionOfInterest\" only).\n *\n * @namespace\n * @alias Gp.Services.AutoComplete.SuggestedLocation\n */\nfunction SuggestedLocation () {\n if (!(this instanceof SuggestedLocation)) {\n throw new TypeError(\"SuggestedLocation constructor cannot be called as a function.\");\n }\n\n /* REPONSE :\n {\n \"status\" : \"OK\",\n \"results\" : [\n {\n \"country\":\"PositionOfInterest\",\n \"x\":-1.559185,\n \"y\":47.952603,\n \"city\":\"Brie\",\n \"zipcode\":\"35150\",\n \"street\":\"corbe\",\n \"kind\":\"Lieu-dit habité\",\n \"fulltext\":\"corbe, 35150 Brie\",\n \"classification\":6\n },\n {\n \"country\":\"StreetAddress\",\n \"x\":1.538295,\n \"y\":43.19646,\n \"city\":\"Brie\",\n \"zipcode\":\"09700\",\n \"street\":\"courreste\",\n \"kind\":\"\",\n \"fulltext\":\"courreste, 09700 Brie\",\n \"classification\":7\n }\n ]\n }\n */\n\n /* REPONSE EN ERREUR\n {\n status : \"ERROR\",\n results : [ ]\n }\n */\n\n /**\n * Suggested location type : \"StreetAddress\" ou \"PositionOfInterest\"\n * @type {String}\n */\n this.type = null;\n\n /**\n * Position of the suggested location given in requested coordinates system.\n * @type {Gp.Point}\n */\n this.position = {\n x : null,\n y : null\n };\n\n /**\n * Suggested municipality\n * @type {String}\n */\n this.commune = null;\n\n /**\n * Full text representation of the suggested location.\n * @type {String}\n */\n this.fullText = null;\n\n /**\n * Suggested location postcode\n * @type {Number}\n */\n this.postalCode = null;\n\n /**\n * Number used to classify the importance of the place where is the suggested location from 1 (most important) to 7 (less important).\n * @type {Integer}\n */\n this.classification = null;\n\n /**\n * Street name of the suggested location (\"StreetAddress\" only).\n * @type {String}\n */\n this.street = null;\n\n /**\n * Place name of the suggested location (\"PositionOfInterest\" only).\n * @type {String}\n */\n this.poi = null;\n\n /**\n * Nature of the suggested location : \"prefecture\", \"monument\", \"commune\", ... for instance (\"PositionOfInterest\" only).\n * @type {String}\n */\n this.kind = null;\n}\n\nSuggestedLocation.prototype = {\n\n constructor : SuggestedLocation\n};\n\nexport default SuggestedLocation;\n","import Logger from \"../Utils/LoggerByDefault\";\nimport Helper from \"../Utils/Helper\";\nimport _ from \"../Utils/MessagesResources\";\nimport Protocol from \"../Protocols/Protocol\";\nimport ErrorService from \"../Exceptions/ErrorService\";\n// import DefaultUrlService from \"./DefaultUrlService\";\n// package.json (extract version)\nimport Pkg from \"../../package.json\";\n\n/**\n * @classdesc\n * Composant Service\n *\n * @constructor\n * @alias Gp.Services.CommonService\n * @param {Object} options - options communes à tous les services\n *\n * @param {String} [options.serverUrl] - URL d'accès au service. Par défaut \"https://data.geopf.fr/SERVICE/\".\n * Permet de forcer l'utilisation d'un service équivalent déployé derrière une éventuelle autre URL d'accès.\n * Si ce paramètre est renseigné alors, le paramètre par défaut est ignoré.\n *\n * @param {String} [options.protocol] - Le protocole à utiliser pour récupérer les informations du service :\n * peut valoir 'JSONP' ou 'XHR'.\n * Par défaut, c'est le protocole XHR qui sera utilisé.\n * Attention, le protocole JSONP n'est pas valide dans un environnement NodeJS (Utilisation du mode XHR).\n *\n * @param {Boolean} [options.ssl] - Indique si l'on souhaite intérroger les services en https.\n * Ce paramètre ne fonctionne que pour une utilisation hors navigateur (ex. NodeJS).\n * Sur un navigateur, le protocole est automatiquement extrait de l'url du site...\n * Par défaut, on utilise le protocole http (ssl=false).\n *\n * @param {String} [options.proxyURL] - Le proxy à utiliser pour pallier au problème de cross-domain dans le cas d'une requête XHR.\n * Utile si le paramètre 'protocol' vaut 'XHR', il ne sera pas pris en compte si protocol vaut JSONP.\n *\n * @param {String} [options.callbackSuffix] - Suffixe de la fonction de callback à utiliser, dans le cas du protocole JSONP.\n * Par défaut, la fonction de callback portera un nom du type \"callback\"+ID, où ID est soit un identifiant unique généré à chaque requête,\n * soit le paramètre callbackSuffix s'il est spécifié. Par exemple, si callbackSuffix=\"_2\", la fonction sera \"callback_2 ()\".\n * Utile pour utiliser une réponse déjà encapsulée dans une fonction de callback, dont le nom est connu\n * Utile seulement si le paramètre 'protocol' vaut 'JSONP', il ne sera pas pris en compte si protocol vaut 'XHR'.\n *\n * @param {String} [options.httpMethod] - La méthode HTTP\n * à utiliser dans le cas d'une requête XHR : peut valoir 'GET' ou 'POST'.\n * Non pris en compte si 'protocol' vaut JSONP qui fonctionne obligatoirement en GET.\n * Par défaut, c'est la méthode GET qui est utilisée.\n *\n * @param {String} [options.contentType] - Content-Type de la requete\n * à utiliser dans le cas d'une requête XHR en mode POST.\n * Non pris en compte si 'protocol' vaut JSONP et/ou la méthode HTTP vaut GET.\n * Par défaut, c'est la méthode GET qui est utilisée donc on n'utilise pas de Content-Type.\n *\n * @param {Number} [options.timeOut] - Délai d'attente maximal (en ms) de la réponse du service (à partir de l'envoi de la requête).\n * Par défaut, aucun timeOut n'est pris en compte (timeoutDelay= 0).\n *\n * @param {Boolean} [options.rawResponse] - Indique si l'on souhaite que la réponse du service ne soit pas parsée par l'API avant d'être restituée.\n * (Cf. paramètre « onSuccess » pour plus de détails).\n *\n * @param {Function} [options.onSuccess] - Fonction appelée lorsque le service répond correctement à la requête\n * (code HTTP 200, sans message d'erreur).\n * Cette fonction prend en paramètre la réponse du service,\n * soit sous la forme d'un Object Javascript formaté par le parseur dédié à la syntaxe du service (comportement par défaut) ;\n * soit brute au format String non prétraité si le paramètre « rawResponse » a été précisé avec la valeur « true ».\n *\n * @param {Function} [options.onFailure] - Fonction appelée lorsque le service ne répond pas correctement\n * (code HTTP de retour différent de 200 ou pas de réponse).\n *\n * @param {Function} [options.onBeforeParse] - Fonction appelée avant le parsing de la réponse\n * Permet de modifier la réponse avant parsing et la fonction doit retourner une String.\n * Cette fonction prend en paramètre la réponse telle que renvoyée par le service\n * (cad au format json ou xml).\n * Pour le JSONP, si le paramètre \"rawResponse\" a été précisé avec la valeur \"true\",\n * la fonction prend en paramètre un Object JavaScript contenant la réponse XML.\n *\n * @example\n * var options = {\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * ssl : false,\n * proxyURL : null,\n * callbackName : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * onBeforeParse : function (rawResponse) {}\n * };\n */\nfunction CommonService (options) {\n if (!(this instanceof CommonService)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\"));\n }\n\n this.logger = Logger.getLogger(\"CommonService\");\n this.logger.trace(\"[Constructeur CommonService (options)]\");\n\n // #####################\n // récupération des options par défaut pour les paramètres optionnels\n // #####################\n\n /**\n * Options du service\n * @type {Object}\n */\n this.options = {\n // protocol : \"JSONP\",\n protocol : \"XHR\",\n ssl : true,\n proxyURL : \"\",\n // callbackName : \"\",\n callbackSuffix : null,\n httpMethod : \"GET\",\n timeOut : 0,\n rawResponse : false,\n scope : this,\n /**\n * callback par defaut pour la reponse\n * @param {Object} response - response\n * @private\n */\n onSuccess : function (response) {\n console.log(\"onSuccess - la reponse est la suivante : \", response);\n },\n /**\n * callback par defaut pour les erreurs\n * @param {Object} error - error\n * @private\n */\n onFailure : function (error) {\n if (error.status === 200 || !error.status) {\n console.log(\"onFailure : \", error.message);\n } else {\n console.log(\"onFailure - Erreur (\", error.status, \") : \", error.message);\n }\n }\n };\n\n // et on ajoute les options en paramètre aux options par défaut\n for (var opt in options) {\n if (options.hasOwnProperty(opt)) {\n this.options[opt] = options[opt];\n }\n }\n\n // #####################\n // analyse des options\n // #####################\n\n // modification de la fonction de callback onSuccess dans le cas où la réponse brute est demandée\n if (this.options.rawResponse && !this.options.onSuccess) {\n /**\n * callback par defaut pour la reponse\n * @param {Object} response - response\n * @private\n */\n this.options.onSuccess = function (response) {\n console.log(\"onSuccess - la réponse brute du service est la suivante : \", response);\n };\n }\n\n // gestion du callback onSuccess\n var bOnSuccess = !!(this.options.onSuccess !== null && typeof this.options.onSuccess === \"function\");\n if (!bOnSuccess) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"onSuccess()\"));\n }\n\n // gestion de la methode HTTP\n this.options.httpMethod = (typeof options.httpMethod === \"string\") ? options.httpMethod.toUpperCase() : \"GET\";\n\n switch (this.options.httpMethod) {\n case \"POST\":\n case \"GET\":\n break;\n case \"PUT\":\n case \"DELETE\":\n case \"HEAD\":\n case \"OPTIONS\":\n throw new Error(_.getMessage(\"PARAM_NOT_SUPPORT\", \"httpMethod\"));\n default:\n throw new Error(_.getMessage(\"PARAM_UNKNOWN\", \"httpMethod\"));\n }\n\n // gestion du protocole\n // this.options.protocol = (typeof options.protocol === \"string\" ) ? options.protocol.toUpperCase() : \"JSONP\";\n this.options.protocol = (typeof options.protocol === \"string\") ? options.protocol.toUpperCase() : \"XHR\";\n\n switch (this.options.protocol) {\n case \"JSONP\":\n case \"XHR\":\n break;\n default:\n throw new Error(_.getMessage(\"PARAM_UNKNOWN\", \"protocol\"));\n }\n\n // on determine l'environnement d'execution : browser ou non ?\n // et on lance une exception sur l'utilisation du protocole JSONP pour nodeJS...\n if (typeof window === \"undefined\" && this.options.protocol === \"JSONP\") {\n throw new Error(_.getMessage(\"PARAM_NOT_SUPPORT_NODEJS\", \"protocol=JSONP (instead use XHR)\"));\n }\n\n // le protocole JSONP ne fonctionne qu'en GET.\n if (this.options.protocol === \"JSONP\") {\n this.options.httpMethod = \"GET\";\n }\n\n // gestion du cache\n this.options.nocache = options.nocache || false;\n\n // #####################\n // attributs d'instances\n // #####################\n\n /**\n * Format de réponse du service\n */\n this.options.outputFormat = null;\n /**\n * Requête envoyée au service\n */\n this.request = null;\n /**\n * Reponse du service\n */\n this.response = null;\n}\n\n/**\n * @lends module:CommonService\n */\nCommonService.prototype = {\n\n /*\n * Constructeur (alias)\n */\n constructor : CommonService,\n\n /**\n * Appel du service Géoportail\n */\n call : function () {\n /* jshint validthis : true */\n this.logger.trace(\"CommonService::call ()\");\n\n var context = this;\n /** fonction d'execution */\n function run () {\n this.logger.trace(\"CommonService::run ()\");\n this.buildRequest.call(context, onError, onBuildRequest);\n }\n\n run.call(context);\n\n // callback de fin de construction de la requête\n function onBuildRequest (result) {\n this.logger.trace(\"CommonService::onBuildRequest : \", result);\n this.callService.call(context, onError, onCallService);\n }\n\n // callback de fin d'appel au service\n function onCallService (result) {\n this.logger.trace(\"CommonService::onCallService : \", result);\n this.analyzeResponse.call(context, onError, onAnalyzeResponse);\n }\n\n // callback de fin de lecture de la reponse\n function onAnalyzeResponse (result) {\n this.logger.trace(\"CommonService::onAnalyzeResponse : \", result);\n if (result) {\n this.options.onSuccess.call(this, result);\n } else {\n return onError.call(this, new ErrorService(\"Analyse de la reponse en échec !?\"));\n }\n }\n\n // callback de gestion des erreurs : renvoit un objet de type ErrorService\n function onError (error) {\n this.logger.trace(\"CommonService::onError()\");\n // error : l'objet est du type ErrorService ou Error\n var e = error;\n if (!(e instanceof ErrorService)) {\n e = new ErrorService(error.message);\n }\n this.options.onFailure.call(this, e);\n }\n },\n\n /**\n * Création de la requête\n * @param {Function} error - callback\n * @param {Function} success - callback\n */\n buildRequest : function (error, success) {\n // INFO\n this.logger.error(\"overwritten method !\");\n // retourne l'objet 'this.request'\n if (error) {\n error.call(this, \"This method must be overwritten !\");\n }\n success.call(this, \"This method must be overwritten !\");\n },\n\n /**\n * Appel du service\n * @param {Function} error - callback\n * @param {Function} success - callback\n */\n callService : function (error, success) {\n // INFO\n // retourne l'objet 'this.response'\n\n // NOTES\n // Pour le mode XHR, on recupère une reponse sous forme d'un json ou xml (#document).\n // Pour le mode JSONP, on a toujours un objet JSON mais sous 2 formes :\n // - natif\n // - XML encapsulé :\n // {http : {status:200, error:null},xml :'réponse du service'}\n // {http : {status:400, error:'reponse du service'},xml :null}\n // En XHR, la reponse est directement sauvegardée dans 'this.response'.\n // Par contre, en JSONP, on doit analyser la reponse (status ou non vide),\n // et ne renvoyer que le contenu (xml ou l'objet)\n\n // gestion de la proxification du service\n var strUrlProxified = null;\n var strData = this.request;\n\n // a t on mis en place un proxy ?\n // la proxyfication est valable uniquement en mode XHR !\n var bUrlProxified = !!(this.options.proxyURL && this.options.protocol === \"XHR\");\n\n // rajout de l'option gpbibaccess\n // INFO : acces au numero de version de package.conf aprés compilation !\n var requestMetaOptions = {\n \"gp-access-lib\" : Pkg.version\n };\n\n if (this.options.apiKey) {\n requestMetaOptions.apiKey = this.options.apiKey;\n }\n\n this.options.serverUrl = Helper.normalyzeUrl(this.options.serverUrl, requestMetaOptions, false);\n\n // si le proxy est renseigné, on proxifie l'url du service\n if (bUrlProxified) {\n if (this.options.httpMethod === \"GET\") {\n strUrlProxified = this.options.proxyURL + Helper.normalyzeUrl(this.options.serverUrl, this.request, true);\n strData = null;\n }\n\n if (this.options.httpMethod === \"POST\") {\n strUrlProxified = this.options.proxyURL + Helper.normalyzeUrl(this.options.serverUrl, null, true);\n strData = this.request;\n }\n }\n\n // contexte du composant spécifique !\n var self = this;\n\n var options = {\n url : strUrlProxified || this.options.serverUrl,\n method : this.options.httpMethod,\n protocol : this.options.protocol,\n timeOut : this.options.timeOut || 0,\n format : this.options.outputFormat, // ceci declenche le parsing de la reponse du service, mais on souhaite toujours une reponse brute (string) !\n nocache : this.options.nocache || false, // ceci permet d'ajouter un timestamp dans la requête\n wrap : this.options.protocol !== \"XHR\", // ceci declenche l'encapsulation de la reponse XML du service dans du JSON, mais pas en mode XHR !\n callbackSuffix : this.options.callbackSuffix,\n // callbackName : this.options.callbackName || null,\n data : strData,\n headers : null, // TODO...\n content : this.options.contentType || \"application/xml\",\n scope : this.options.scope || this,\n // callback de reponse\n onResponse : function (response) {\n self.logger.trace(\"callService::onResponse()\");\n\n // le contenu de la reponse à renvoyer !\n var content = null;\n\n // XHR : on renvoie toujours la reponse brute du service (json ou xml)\n // au parser du composant...\n if (self.options.protocol === \"XHR\") {\n self.logger.trace(\"Response XHR\", response);\n content = response; // par defaut, la reponse du service !\n }\n\n // JSONP : on pre-analyse la reponse brute du service (encapsuler ou pas)\n // avant de l'envoyer au parser du composant...\n if (self.options.protocol === \"JSONP\") {\n self.logger.trace(\"Response JSON\", response);\n if (response) {\n if (response.http) {\n // reponse encapsulée :\n // ex. reponse du service en xml\n // > {http : {status:200, error:null},xml :'réponse du service'}\n if (response.http.status !== 200) {\n error.call(self, new ErrorService({\n status : response.http.status,\n message : response.http.error,\n type : ErrorService.TYPE_SRVERR\n }));\n return;\n } else {\n content = response.xml; // par defaut !\n if (self.options.rawResponse) {\n content = response;\n }\n }\n } else {\n // reponse non encapsulée :\n // ex. reponse du service en json ou xml\n content = response;\n }\n } else {\n error.call(self, new ErrorService(\"Le contenu de la reponse est vide !?\"));\n return;\n }\n }\n\n // si on souhaite parser la reponse du service\n if (typeof self.options.onBeforeParse === \"function\") {\n var newResponse = self.options.onBeforeParse(content);\n if (typeof newResponse === \"string\") {\n // la reponse parsée par l'utilisateur est retournée sous\n // forme de string !\n content = newResponse;\n }\n }\n // sauvegarde de la reponse dans l'objet parent (CommonService)\n self.response = content;\n // on renvoie la reponse...\n success.call(self, content);\n },\n // callback des erreurs\n onFailure : function (e) {\n self.logger.trace(\"callService::onFailure()\");\n // on est forcement sur une erreur levée par un service !\n e.type = ErrorService.TYPE_SRVERR;\n error.call(self, new ErrorService(e));\n },\n // callback de timeOut\n onTimeOut : function () {\n self.logger.trace(\"callService::onTimeOut()\");\n error.call(self, new ErrorService(\"TimeOut!\"));\n }\n };\n\n Protocol.send(options);\n },\n\n /**\n * Analyse de la réponse\n * @param {Function} error - callback\n * @param {Function} success - callback\n */\n analyzeResponse : function (error, success) {\n // INFO\n this.logger.error(\"overwritten method !\");\n // retourne l'objet spécifique au type de composant (json)\n if (error) {\n error.call(this, \"This method must be overwritten !\");\n }\n success.call(this, \"This method must be overwritten !\");\n }\n\n};\n\nexport default CommonService;\n","import Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport ConfigInterface from \"./ConfigInterface\";\n\n/**\n * @classdesc\n *\n * Recupération de la configuration de clés Géoportail sous forme de JSON\n *\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.Config\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n * @param {Sting} options.apiKey - clé(s) dont on veut obtenir la configuration. Si plusieurs clés, séparer chacune par une virgule\n * @param {Boolean} [options.sync=false] - force le mode synchrone\n * @param {String} options.customConfigFile - chemin vers un fichier de configuration personnalisé. Surcharge le paramètre apiKey.\n * @see Gp.Services.GetConfigInterface\n *\n * @example\n * var options = {\n * apiKey : \"cartes,ortho\",\n * sync : false,\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * };\n *\n */\nfunction Config (options) {\n if (!(this instanceof Config)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"Config\"));\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"Config\";\n\n this.logger = Logger.getLogger(\"Gp.Config\");\n this.logger.trace(\"[Constructeur Config (options)]\");\n\n // #####################\n // analyse des options\n // #####################\n\n // gestion du callback onSuccess\n var bOnSuccess = !!(options.onSuccess !== null && typeof options.onSuccess === \"function\");\n if (!bOnSuccess) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"onSuccess()\"));\n }\n if (!options.apiKey && !options.customConfigFile) {\n // si pas de thème spécifié, on récupère toutes les ressources possibles dans l'objet Config\n options.apiKey = \"full\";\n }\n this.options = {};\n this.options.onSuccess = options.onSuccess;\n this.options.onFailure = options.onFailure;\n\n // mode sync\n this.options.sync = options.sync || false;\n\n // gestion d'un tableau d'url des fichiers de configuration\n this.options.listConfigUrls = (options.customConfigFile)\n ? [options.customConfigFile]\n : !Array.isArray(options.apiKey)\n ? DefaultUrlService.Config.url(options.apiKey.split(\",\"))\n : DefaultUrlService.Config.url(options.apiKey);\n}\n\n/**\n * @lends module:Config#\n */\nConfig.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/**\n * Constructeur (alias)\n */\nConfig.prototype.constructor = Config;\n\n/**\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n * @overload\n */\nConfig.prototype.buildRequest = function (error, success) {\n // liste des urls des fichiers de configuration en JSON\n this.listConfigUrls = this.options.listConfigUrls;\n\n if (!this.listConfigUrls) {\n error.call(this, new Error(\"url by default not found !\"));\n return;\n }\n\n // INFO :\n // il n'y a pas de construction de requête,\n // on passe directement à l'appel des requêtes\n success.call(this, this.listConfigUrls);\n};\n\n/**\n * Récupération des configuration\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n * @overload\n */\nConfig.prototype.callService = function (error, success) {\n if (this.options.sync) {\n __callServiceSync.call(this, error, success);\n } else {\n __callService.call(this, error, success);\n }\n};\n\n/**\n * Requêtes en mode asynchrone\n *\n * @param {*} error\n * @param {*} success\n * @private\n */\nvar __callService = function (error, success) {\n // liste des resultats au format JSON\n this.listConfigResults = [];\n\n // test on env. nodejs or browser\n let Fetch = null;\n if (typeof window === \"undefined\") {\n var nodefetch = require(\"node-fetch\");\n Fetch = nodefetch;\n } else {\n Fetch = window.fetch;\n }\n\n // the factory of fetch !\n var fetchFactory = (url) => {\n return Fetch(url, { credentials : \"same-origin\" })\n .then((response) => {\n if (response.ok) {\n return response.json()\n .then((json) => {\n // TODO :\n // tester le contenu !\n return json;\n })\n .catch((error) => {\n throw new Error(\"Exception Json : \" + error);\n });\n } else {\n throw new Error(\"Exception HTTP : \" + response.status + \" (status code) !\");\n }\n })\n .catch((error) => {\n return new Promise((resolve, reject) => {\n // eslint-disable-line no-unused-vars\n reject(error);\n });\n });\n };\n\n // construction des promises fetch\n var promises = [];\n for (let index = 0; index < this.listConfigUrls.length; index++) {\n const url = this.listConfigUrls[index];\n promises.push(fetchFactory(url));\n }\n\n Promise.all(promises)\n .then((results) => {\n if (!results) {\n throw new Error(\"results config empty !?\");\n }\n results.forEach((result) => {\n // TODO :\n // verification des resultats\n this.listConfigResults.push(result);\n });\n })\n .then(() => {\n success.call(this, this.listConfigResults);\n })\n .catch((e) => {\n // TODO :\n // construction d'un message\n error.call(this, e);\n });\n};\n\n/**\n * Requêtes en mode synchrone\n *\n * @param {*} error\n * @param {*} success\n * @private\n */\nvar __callServiceSync = function (error, success) {\n // liste des resultats au format JSON\n this.listConfigResults = [];\n\n // FIXME :\n // boucle synchrone !\n for (var i = 0; i < this.listConfigUrls.length; i++) {\n const url = this.listConfigUrls[i];\n // TODO :\n // prévoir le CORS, headers, ...\n const request = new XMLHttpRequest();\n request.open(\"GET\", url, false);\n request.send(null);\n if (request.status === 200) {\n // TODO :\n // tester la reponse !\n var response = JSON.parse(request.responseText);\n this.listConfigResults.push(response);\n }\n }\n // callback\n if (this.listConfigResults.length !== 0) {\n success.call(this, this.listConfigResults);\n } else {\n error.call(this, new Error(\"...\"));\n }\n};\n\n/**\n * Analyse et mise en forme de la réponse en fusionnant les configurations\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n * @overload\n */\nConfig.prototype.analyzeResponse = function (error, success) {\n // fonction de merge des objects JSON\n var mergeConfig = function (objects) {\n // objet fusion des couches\n var allLayersConfig = {};\n // objet fusion des clés\n var allKeysConfig = {};\n // objet fusion des TMS\n var allTMSConfig = {};\n\n // on fusionne les résultat\n for (var i = 0; i < objects.length; i++) {\n if (!objects[i].generalOptions || !objects[i].layers) {\n return;\n }\n allKeysConfig = {\n ...allKeysConfig,\n ...objects[i].generalOptions.apiKeys\n };\n allLayersConfig = {\n ...allLayersConfig,\n ...objects[i].layers\n };\n allTMSConfig = {\n ...allTMSConfig,\n ...objects[i].tileMatrixSets\n };\n }\n\n var mergedConfig = {\n generalOptions : {\n apiKeys : allKeysConfig\n },\n layers : allLayersConfig,\n tileMatrixSets : allTMSConfig\n };\n return mergedConfig;\n };\n\n // fusion des configurations JSON\n var ConfigJSON = mergeConfig(this.listConfigResults);\n if (!ConfigJSON) {\n error.call(this, new Error(\"configuration structure not conforme !\"));\n return;\n }\n\n // creation des interfaces\n var IConfig = new ConfigInterface();\n // ajout des interfaces avec la configuration JSON\n Object.assign(IConfig, ConfigJSON);\n\n // définition de la variable globale Gp.Config\n var scope = typeof window !== \"undefined\" ? window : {};\n if (!scope.Gp) {\n scope.Gp = {};\n }\n\n // enregistrement\n if (scope.Gp.Config) {\n Object.assign(scope.Gp.Config, IConfig);\n // dans le doute..., ceinture et bretelles !\n for (var property in IConfig) {\n scope.Gp.Config[property] = IConfig[property];\n }\n } else {\n scope.Gp.Config = IConfig;\n }\n\n // INFO :\n // il n'y a pas d'analyse des résultats,\n // on passe directement à l'appel de la callback utilisateur\n success.call(this, scope.Gp.Config);\n};\n\nexport default Config;\n","\n/**\n * Response object for {@link module:Services~getConfig Gp.Services.getConfig ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Object} generalOptions - General properties for default map configuration resources.\n * @property {Object} generalOptions.apiKeys - Object that associates apiKey (s) with an array of resources IDs availables with that key.\n * @property {String} generalOptions.title - Underlying web service Title.\n * @property {String} generalOptions.defaultGMLGFIStyle - XSL URL used by default to translate an XML GetFeatureInfo response into an HTML array.\n * @property {String} generalOptions.theme - default theme (FIXME : for what ?)\n * @property {Array.} generalOptions.wgs84Resolutions - geographical resolutions Array for each [zoom level of the Geoportal platform]{@link http://api.ign.fr/tech-docs-js/webmaster/layers.html#Geoportal_resolutions} from 0 to 21. Expressed in degrees/pixel.\n * @property {Object} layers - Associative array mapping resources availables IDs (keys) with their properties (values given as {@link Gp.Services.Config.Layer}).\n * @property {Object} tileMatrixSets - Associative Array mapping TileMatrixSets IDs (keys) availables with their properties (values given as {@link Gp.Services.Config.TileMatrixSet}).\n *\n * @namespace\n * @alias Gp.Services.GetConfigInterface\n */\nfunction ConfigInterface () {\n if (!(this instanceof ConfigInterface)) {\n throw new TypeError(\"ConfigInterface constructor cannot be called as a function.\");\n }\n\n this.generalOptions = {\n apiKeys : {},\n title : null,\n defaultGMLGFIStyle : null,\n theme : null,\n wgs84Resolutions : []\n };\n\n this.layers = {};\n\n this.tileMatrixSets = {};\n}\n\nConfigInterface.prototype = {\n\n /*\n * Constructor (alias)\n */\n constructor : ConfigInterface,\n\n /**\n * Check if config is loaded for a given key\n *\n * @param {String} apiKey - Access key to Geoportal platform\n * @returns {Boolean} isKeyConfLoaded - true if config of the key is already loaded, false otherwise\n */\n isKeyConfLoaded : function (apiKey) {\n if (!apiKey) {\n return;\n }\n if (this.generalOptions.apiKeys[apiKey]) {\n return true;\n }\n return false;\n },\n\n /**\n * Returns an array of Geoportal layers identifiers, corresponding to an API contract key.\n *\n * @param {String} apiKey - Access key to Geoportal platform\n * @returns {Array} apiKeys - Array of geoportal layers identifiers\n */\n getLayersId : function (apiKey) {\n return this.generalOptions.apiKeys[apiKey];\n },\n\n /**\n * Returns the id of a Geoportal layer with its name and its service.\n *\n * @param {String} layerName - name of the layer (ex. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {String} service - name of the service (ex. \"WMS\" ou \"WMTS\")\n * @returns {String} Id of the layer (ex. \"ORTHOIMAGERY.ORTHOPHOTOS$GEOPORTAIL:OGC:WMTS\")\n */\n getLayerId : function (layerName, service) {\n if (!layerName || !service) {\n return;\n }\n var layerId = null;\n\n // layer\n // key : [layerName]$[contexte]:OGC:[service]\n // ex : \"ORTHOIMAGERY.ORTHOPHOTOS$GEOPORTAIL:OGC:WMTS\"\n\n // service\n // key : [layerName]$[contexte];[service]\n // ex : PositionOfInterest$OGC:OPENLS;ReverseGeocode\n\n if (this.layers) {\n var layers = this.layers;\n for (var key in layers) {\n if (layers.hasOwnProperty(key)) {\n var parts = key.split(\"$\");\n if (layerName === parts[0]) {\n if (parts[1]) {\n var servicePartsLayer = parts[1].split(\":\");\n var servicePartsService = parts[1].split(\";\");\n\n if (servicePartsService[1] === service.toUpperCase()) {\n layerId = key;\n break;\n }\n if (servicePartsLayer[2] === service.toUpperCase()) {\n layerId = key;\n break;\n }\n }\n }\n }\n }\n }\n if (!layerId) {\n return;\n }\n return layerId;\n },\n\n /**\n * Returns an associative array of Geoportal layers configurations, corresponding to an API contract key.\n * If no key is specified, all layers from configuration are returned.\n *\n * @param {String} apiKey - Access key to Geoportal platform\n * @returns {Object} layers - Object which properties are layers identifiers.\n */\n getLayersConf : function (apiKey) {\n var layers = {};\n var layersIdArray = this.getLayersId(apiKey);\n if (layersIdArray) {\n for (var i = 0; i < layersIdArray.length; i++) {\n var lyrId = layersIdArray[i];\n layers[lyrId] = this.layers[lyrId];\n }\n }\n return layers;\n },\n\n /**\n * Returns a geoportal layer configuration, given its identifier\n *\n * @param {String} layerId - Geoportal layer identifier (e.g. \"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\")\n * @return {Object} layer - Layer configuration\n * @see Gp.Services.Config.Layer\n */\n getLayerConf : function (layerId) {\n if (!this.layers) {\n return;\n }\n return this.layers[layerId];\n },\n\n /**\n * Get all parameters needed to display a WFS, WMS or WMTS layer given its name, its service and its key\n *\n * @param {String} layerName - name of the layer (ex. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {String} service - name of the service (ex. \"WMS\" ou \"WMTS\")\n * @param {String} [apiKey] - Contract API key\n * @returns {Object} params - params of the service (WFS, WMS or WMTS) for the given layer\n * @returns {String} params.url - Url of the service to reach to display the layer\n * @returns {String} params.version - Version of the service\n * @returns {String} params.styles - Default style of the layer\n * @returns {String} params.format - Default format of the layer\n * @returns {String} params.projection - Default projection of the layer\n * @returns {Number} params.minScale - Min scale denominator of the layer\n * @returns {Number} params.maxScale - Max scale denominator of the layer\n * @returns {Gp.BBox} params.extent - Extent of the layer, in the projection of the layer\n * @returns {Array} params.legends - Array of legends associated to the layer\n * @returns {Array} params.title - Name of the layer, readable by a human\n * @returns {Array} params.description - Description of the layer\n * @returns {String} params.[TMSLink] - Id of the Tile Matrix Set (TMS), in the case of WMTS layer\n * @returns {Gp.Point} params.[matrixOrigin] - Originof the tile matrix (top left corner), in the case of WMTS layer\n * @returns {Array} params.[nativeResolutions] - Array with the resolution of each level of the tile matrix set, in the case of WMTS layer\n * @returns {Array} params.[matrixIds] - Array with the ID of each level of the tile matrix set, in the case of WMTS layer\n */\n getLayerParams : function (layerName, service) {\n var params = {};\n\n if ((service === \"WMS\" || Object.keys(this.tileMatrixSets).length !== 0) && Object.keys(this.layers).length !== 0) {\n // get the layerId of the layer\n var layerId = this.getLayerId(layerName, service);\n\n if (layerId) {\n // get the layer Conf Object\n var layerConf = this.getLayerConf(layerId);\n\n var keys = this.getLayerKey(layerId);\n if (keys.length === 0) {\n return;\n }\n\n // get services params\n for (var i = 0; i < keys.length; i++) {\n // only one serverUrl is saved in Gp.Config : with multiKeys, we have to retrieve the key used in the serverUrl property\n if (layerConf.serviceParams.serverUrl[keys[i]]) {\n params.url = layerConf.serviceParams.serverUrl[keys[i]];\n }\n }\n\n if (service !== \"WFS\") {\n const wmsTypeRegex = /\\/v\\//;\n // WMS vector style always empty (not in getCap)\n if (wmsTypeRegex.test(params.url)) {\n params.styles = \" \";\n } else {\n // WMS raster style is defined in getCap\n params.styles = layerConf.styles[0].name;\n }\n }\n\n params.version = layerConf.serviceParams.version;\n params.format = (layerConf.formats && layerConf.formats.length) ? layerConf.formats[0].name : \"\";\n params.projection = layerConf.defaultProjection;\n\n // get layer info and constraints\n params.minScale = layerConf.globalConstraint.minScaleDenominator;\n params.maxScale = layerConf.globalConstraint.maxScaleDenominator;\n params.extent = layerConf.globalConstraint.bbox;\n params.legends = layerConf.legends;\n params.title = layerConf.title;\n params.description = layerConf.description;\n\n if (service === \"WMS\") {\n params.metadata = layerConf.metadata;\n }\n\n // Informations non disponibles avec les getCap\n // params.metadata = layerConf.getMetadata();\n // params.originators = layerConf.getOriginators();\n // params.quicklookUrl = layerConf.getQuicklookUrl();\n\n // WMTS : get the tileMatrixSetLimits\n if (layerConf.wmtsOptions) {\n params.tileMatrixSetLimits = layerConf.wmtsOptions.tileMatrixSetLimits;\n var TMSLink = layerConf.wmtsOptions.tileMatrixSetLink;\n if (TMSLink) {\n params.TMSLink = TMSLink;\n var tmsConf = this.getTMSConf(TMSLink);\n // Get matrix origin : Gp.Point = Object{x:Float, y:Float}\n // params.matrixOrigin = tmsConf.getTopLeftCorner();\n params.matrixIds = Object.keys(tmsConf.tileMatrices);\n params.tileMatrices = tmsConf.tileMatrices;\n // by default, pseudo mercator resolutions\n params.nativeResolutions = tmsConf.nativeResolutions || this.getTMSConf(\"PM\").nativeResolutions;\n }\n }\n }\n }\n return params;\n },\n\n /**\n * Get the contract key(s) associated to a given layer.\n *\n * @param {String} layerId - Geoportal layer identifier (e.g. \"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\")\n * @return {Array} layerKey - array of key(s) associated to the given layer\n */\n getLayerKey : function (layerId) {\n var layerKey = [];\n if (this.generalOptions && this.generalOptions.apiKeys && Object.keys(this.generalOptions.apiKeys).length !== 0) {\n var resourcesByKey = this.generalOptions.apiKeys;\n for (var key in resourcesByKey) {\n var resourcesArray = resourcesByKey[key];\n resourcesArray.forEach(function (arrayLayerId) {\n if (arrayLayerId === layerId) {\n layerKey.push(key);\n }\n });\n }\n }\n return layerKey;\n },\n\n /**\n * Returns an associative array of Tile Matrix Sets configurations.\n *\n * @return {Object} tileMatrixSets - Object which properties are TMS identifiers\n *\n */\n getTileMatrixSets : function () {\n return this.tileMatrixSets;\n },\n\n /**\n * Returns a Tile Matrix Sets configuration, given its identifier.\n *\n * @param {String} tmsID - Tile Matrix Set identifier (e.g. : \"PM\")\n * @return {Object} tileMatrixSet - Tile Matrix Set configuration\n * @see Gp.Services.Config.TileMatrixSet\n */\n getTMSConf : function (tmsID) {\n if (!this.tileMatrixSets) {\n return;\n }\n return this.tileMatrixSets[tmsID];\n },\n\n /**\n * Get global constraints for a given Layer : extent, minScale, maxScale, projection\n *\n * @param {String} layerId - Geoportal layer identifier (e.g. \"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\")\n * @returns {Object} params - layer constraints\n * @returns {String} params.projection - default layer projection\n * @returns {Number} params.minScale - layer min scale denominator\n * @returns {Number} params.maxScale - layer max scale denominator\n * @returns {Gp.BBox} params.extent - layer extent expressed in the layer projection\n */\n getGlobalConstraints : function (layerId) {\n var params = {};\n\n if (layerId) {\n // get layer configuration object\n var layerConf = this.getLayerConf(layerId);\n params.projection = layerConf.defaultProjection;\n params.minScale = layerConf.globalConstraint.minScaleDenominator;\n params.maxScale = layerConf.globalConstraint.maxScaleDenominator;\n params.extent = layerConf.globalConstraint.bbox;\n }\n\n return params;\n }\n\n};\n\nexport default ConfigInterface;\n","// cette classe contient les URLs par defaut des services.\n// DefaultUrlService.Alti.url(key)[elevation-json]\n// DefaultUrlService.Alti.url(key)[elevation-xml]\n// DefaultUrlService.Alti.url(key)[profil-json]\n// DefaultUrlService.Alti.url(key)[profil-xml]\n// DefaultUrlService.ProcessIsoCurve.url(key)\n// DefaultUrlService.AutoComplete.url(key)\n// DefaultUrlService.ReverseGeocode.url(key)\n// DefaultUrlService.Geocode.url(key)\n// DefaultUrlService.Route.url(key)\n\n// Example :\n//\n// DefaultUrlService.Alti.url('alti')[elevation-json]\n// output {String} -> http://wxs.ign.fr/calcul/alti/rest/elevation.json\n//\n// DefaultUrlService.Alti.url('calcul')\n// output {Object|String}\n// -> http://wxs.ign.fr/calcul/alti/rest/elevation.json\n// -> http://wxs.ign.fr/calcul/alti/rest/elevation.xml\n// -> http://wxs.ign.fr/calcul/alti/rest/elevationLine.json\n// -> http://wxs.ign.fr/calcul/alti/rest/elevationLine.xml\n//\n// ssl by default.\n//\n// Force to not do ssl :\n// DefaultUrlService.ssl = false;\n//\n// DefaultUrlService.AutoComplete.url('calcul')\n// output {Object|String}\n// -> https://wxs.ign.fr/calcul/ols/apis/completion\n\n/**\n * Default Geoportal web services URLs access.\n *\n * @namespace\n * @alias Gp.Services.DefaultUrl\n */\nvar DefaultUrlService = {\n\n /** if set true, require the use of https protocol */\n ssl : true,\n\n /**\n * base new-url of geoplateforme services (ssl protocol management)\n * @param {String} path - path\n * @returns {String} url\n */\n newUrl : function (path) {\n var NEW_GPF_HOSTNAME = \"data.geopf.fr\";\n\n // comportement par défaut => https\n // sinon, il est fixé par l'option 'ssl' (false => http)\n var _protocol;\n if (DefaultUrlService.ssl === false) {\n _protocol = \"http://\";\n } else {\n _protocol = \"https://\";\n }\n\n return _protocol + NEW_GPF_HOSTNAME + path;\n },\n\n /**\n * Elevation web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns elevation service default urls with or without geoportal access key given as a parameter. The result is a javascript object with different urls given used protocols (\"elevation-json\", \"elevation-xml\", \"profil-json\" or \"profil-xml\").\n */\n Alti : {\n new_key : {\n // rest\n \"elevation-json\" : \"/altimetrie/1.0/calcul/alti/rest/elevation.json\",\n \"elevation-xml\" : \"/altimetrie/1.0/calcul/alti/rest/elevation.xml\",\n \"profil-json\" : \"/altimetrie/1.0/calcul/alti/rest/elevationLine.json\",\n \"profil-xml\" : \"/altimetrie/1.0/calcul/alti/rest/elevationLine.xml\"\n },\n\n /**\n * newurl from geoplateforme service\n * @param {String} key - key\n * @returns {String} url\n */\n newUrl : function () {\n return {\n // rest\n \"elevation-json\" : DefaultUrlService.newUrl(this.new_key[\"elevation-json\"]),\n \"elevation-xml\" : DefaultUrlService.newUrl(this.new_key[\"elevation-xml\"]),\n \"profil-json\" : DefaultUrlService.newUrl(this.new_key[\"profil-json\"]),\n \"profil-xml\" : DefaultUrlService.newUrl(this.new_key[\"profil-xml\"])\n };\n }\n },\n /**\n * IsoCurve web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns isocurve service default urls with or without geoportal access key given as a parameter. The result is a javascript object with different urls given used protocols (\"iso-json\" or \"iso-xml\").\n */\n ProcessIsoCurve : {\n\n new_key : \"/navigation/isochrone\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Config web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns config service default urls with or without geoportal access key given as a parameter.\n */\n Config : {\n _key : \"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/dist/\",\n /**\n * url\n * @param {String} key - key\n * @returns {String} url\n */\n url : function (key) {\n // key must be an array of one or several keys\n if (!Array.isArray(key)) {\n key = key.split(\",\");\n }\n // not homogeneous with others geoportal services URLs\n var url = [];\n for (var i = 0; i < key.length; i++) {\n url[i] = this._key + key[i] + \"Config.json\";\n }\n return url;\n }\n },\n /**\n * Autocompletion web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns autocomplete service default urls with or without geoportal access key given as a parameter. The result is a String.\n */\n AutoComplete : {\n new_key : \"/geocodage/completion\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Reverse geocoding web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns reverse geocoding service default urls with or without geoportal access key given as a parameter. The result is a String.\n */\n ReverseGeocode : {\n new_key : \"/geocodage/reverse\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Geocoding web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns geocoding service default urls with or without geoportal access key given as a parameter. The result is a String.\n */\n Geocode : {\n new_key : \"/geocodage/search\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Routing web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns routing service default urls with or without geoportal access key given as a parameter. The result is a javascript object with different urls given used protocols.\n */\n Route : {\n new_key : \"/navigation/itineraire\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n }\n};\n\nexport default DefaultUrlService;\n","// import Logger from \"../../../Utils/LoggerByDefault\";\nimport MR from \"../../../Utils/MessagesResources\";\nimport ErrSrv from \"../../../Exceptions/ErrorService\";\nimport GeocodeResponse from \"../Response/model/GeocodeResponse\";\nimport GeocodedLocation from \"../Response/model/GeocodedLocation\";\n\n/**\n * Fonction retournant un objet contenant des clés de lecture (readers)\n * qui permettent de parser des réponses XML du service de géocodage direct du Géoportail\n * afin de récupérer les résultats retournés.\n * @module GeocodeResponseParser\n * @alias Gp.Services.Geocode.Formats.GeocodeResponseParser\n * @private\n */\n\n/**\n * @classdesc\n *\n * Classe permettant de parser une réponse GeoJSON\n *\n * @constructor\n * @alias Gp.Formats.GeocodeResponseParser\n *\n * @private\n */\nfunction GeocodeResponseParser () {\n if (!(this instanceof GeocodeResponseParser)) {\n throw new TypeError(\"GeocodeResponseParser constructor cannot be called as a function.\");\n }\n}\n\nGeocodeResponseParser.prototype = {\n\n /**\n * @lends module:GeocodeResponseParser\n */\n\n /*\n * Constructeur (alias)\n */\n constructor : GeocodeResponseParser,\n\n /**\n * Méthode permettant de lancer la lecture d'une réponse GeoJSON,\n *\n * @param {String} json - réponse au format GeoJSON\n * @return {Object} geocodeResponse|exceptionReport : l'objet contenant les informations de la réponse GeoJSON,\n * sous la forme d'un objet GeocodeResponse, ou un objet littéral exceptionReport si le service a renvoyé une exception.\n */\n parse : function (json) {\n var geocodeResponse = new GeocodeResponse();\n\n const obj = JSON.parse(json);\n\n if (obj.type === \"FeatureCollection\") {\n for (var i = 0; i < obj.features.length; ++i) {\n _parseFeature(obj.features[i], geocodeResponse);\n }\n } else if (obj.type === \"Feature\") {\n _parseFeature(obj, geocodeResponse);\n } else if (obj.type === \"SERVICE_ERROR\") {\n return _parseError(obj);\n } else {\n var mess = MR.getMessage(\"SERVICE_RESPONSE_ANALYSE\", obj.type);\n throw new ErrSrv({\n message : mess,\n type : ErrSrv.TYPE_UNKERR,\n status : 200\n });\n }\n\n return geocodeResponse;\n }\n};\n\n/**\n * Méthode permettant de parser un feature\n *\n * @private\n *\n * @param {Object} feature\n * @param {Object} geocodeResponse\n *\n * @memberof GeocodeResponseParser\n * @return {Object} objet GeocodedLocation\n */\nfunction _parseFeature (feature, geocodeResponse) {\n var location = new GeocodedLocation();\n if (feature.geometry && feature.geometry.type === \"Point\") {\n location.position = {\n lon : feature.geometry.coordinates[0],\n lat : feature.geometry.coordinates[1]\n };\n }\n if (feature.properties) {\n for (var prop in feature.properties) {\n if (prop === \"score\") {\n location.accuracy = feature.properties[prop];\n } else if (prop === \"_type\") {\n if (feature.properties[prop] === \"address\") {\n location.type = \"StreetAddress\";\n } else if (feature.properties[prop] === \"poi\") {\n location.type = \"PositionOfInterest\";\n } else if (feature.properties[prop] === \"parcel\" || feature.properties[prop] === \"cadastral\") {\n location.type = \"CadastralParcel\";\n }\n } else {\n location.placeAttributes[prop] = feature.properties[prop];\n }\n }\n if (feature.properties._type === \"address\") {\n location.matchType = feature.properties.number !== undefined && feature.properties.number !== null ? \"street number\" : \"street\";\n }\n }\n geocodeResponse.locations.push(location);\n}\n\n/**\n * Méthode permettant de parser une erreur\n *\n * @private\n *\n * @param {Object} error\n *\n * @memberof GeocodeResponseParser\n * @return {Object}\n */\nfunction _parseError (error) {\n return {\n exceptionReport : error\n };\n}\n\nexport default GeocodeResponseParser;\n","import Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport GeocodeRequestFactory from \"./Request/GeocodeRequestFactory\";\nimport GeocodeResponseFactory from \"./Response/GeocodeResponseFactory\";\n\n/**\n * @classdesc\n * Appel du service de géocodage direct du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n *\n *\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.Geocode\n *\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String|Object} options.query - Nom de l'adresse, du toponyme, de l'unité administrative ou de la parcelle cadastrale recherchée.\n *\n * @param {Object} [options.filters] - Les propriétés possibles de cet objet sont décrites ci-après.\n * @param {String} [options.filters.[prop]] - Critère supplémentaire pour filtrer la recherche sous la forme\n * d'un couple clé/valeur à définir selon les possibilités du serveur ajouté à la requête.\n * Le service de géocodage du Géoportail permet de filtrer les adresses postales avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"city\".\n * Il permet également de filtrer les toponymes avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"type\".\n * Enfin, il permet de filtrer les parcelles cadastrales avec les propriétés :\n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n *\n * @param {String} [options.index = \"StreetAddress\"] - Type de l'objet recherché.\n * Le service de géocodage du Géoportail permet de rechercher des 'PositionOfInterest' pour des toponymes, des 'StreetAddress'\n * pour des adresses postales ou des 'CadastralParcel' pour des parcelles cadastrales.\n * L'index 'location' regroupe les indexes 'StreetAddress' et 'PositionOfInterest'.\n * D'autres types pourront être rajoutés selon l'évolution du service.\n * Par défaut, index = 'StreetAddress'.\n *\n * @param {Object} options.position - Position du point de référence pour le calcul de proximité exprimée dans le système de référence spécifié par le srs.\n * @param {Float} options.position.lon - Longitude du point de référence pour le calcul de proximité.\n * @param {Float} options.position.lat - Latitude du point de référence pour le calcul de proximité.\n *\n * @param {Number} [options.maximumResponses] - Nombre de réponses maximal que l'on souhaite recevoir.\n * Pas de valeur par défaut.\n * Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 20.\n *\n * @param {Boolean} [options.returnTrueGeometry = false] - Booléen indiquant si l'on souhaite récupérer la géométrie vraie des objects géolocalisés.\n * false par défaut.\n *\n *\n * @example\n * var options = {\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * proxyURL : null,\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * position : {lon:, lat:},\n * index : 'StreetAddress',\n * query : '10 rue du pont Machin-ville'\n * (...)\n * };\n */\nfunction Geocode (options_) {\n if (!(this instanceof Geocode)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"Geocode\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"Geocode\";\n\n this.logger = Logger.getLogger(\"Gp.Services.Geocode\");\n this.logger.trace(\"[Constructeur Geocode (options)]\");\n\n var options = this.patchOptionConvertor(options_);\n if (!options.serverUrl) {\n options.serverUrl = DefaultUrlService.Geocode.newUrl();\n }\n\n // appel du constructeur par heritage\n CommonService.apply(this, [options]);\n\n if (!options.hasOwnProperty(\"query\")) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"query\"));\n }\n\n // ajout des options spécifiques au service\n this.options.query = options.query;\n\n // on definit l'index par defaut\n if (!options.index) {\n this.options.index = options.index = \"StreetAddress\";\n }\n\n if (options.filters) {\n var filter = Object.keys(options.filters);\n for (var i = 0; i < filter.length; i++) {\n var key = filter[i];\n // on supprime les filtres vides\n if (typeof options.filters[key] === \"undefined\" ||\n (typeof options.filters[key] === \"object\" && Object.keys(options.filters[key]).length === 0) ||\n (typeof options.filters[key] === \"string\" && options.filters[key].length === 0) ||\n (Array.isArray(options.filters[key]) && options.filters[key].length === 0)\n ) {\n delete this.options.filters[key];\n }\n }\n }\n\n this.options.index = options.index || \"StreetAddress\";\n this.options.maximumResponses = options.maximumResponses || 20;\n}\n\n/**\n * @lends module:Geocode#\n */\nGeocode.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nGeocode.prototype.constructor = Geocode;\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} options_ - options du service\n * @return {Object} - options\n */\nGeocode.prototype.patchOptionConvertor = function (options_) {\n const options = options_;\n\n if (options.hasOwnProperty(\"location\")) {\n this.logger.warn(\"The parameter 'location' is deprecated\");\n\n if (!options.query) {\n options.query = options.location;\n }\n delete options.location;\n }\n\n if (options.filterOptions) {\n this.logger.warn(\"The parameter 'filterOptions' is deprecated\");\n\n if (!options.filters) {\n options.filters = options.filterOptions;\n\n if (options.filters.type) {\n this.logger.warn(\"The parameter 'filterOptions.type' is deprecated\");\n if (!options.index) {\n if (Array.isArray(options.filters.type) && options.filters.type.length > 0) {\n options.index = options.filters.type[0];\n } else {\n options.index = options.filters.type;\n }\n }\n delete options.filters.type;\n }\n\n if (options.filters.bbox) {\n this.logger.warn(\"The parameter 'filterOptions.bbox' is deprecated\");\n delete options.filters.bbox;\n }\n }\n delete options.filterOptions;\n }\n\n if (options.position) {\n if (options.position.x) {\n this.logger.warn(\"The parameter 'position.x' is deprecated\");\n\n if (!options.position.lon) {\n options.position.lon = options.position.x;\n }\n delete options.position.x;\n }\n\n if (options.position.y) {\n this.logger.warn(\"The parameter 'position.y' is deprecated\");\n\n if (!options.position.lat) {\n options.position.lat = options.position.y;\n }\n delete options.position.y;\n }\n }\n\n if (options.returnFreeForm) {\n this.logger.warn(\"The parameter 'returnFreeForm' is deprecated\");\n delete options.returnFreeForm;\n }\n\n if (options.srs) {\n this.logger.warn(\"The parameter 'srs' is deprecated\");\n delete options.srs;\n }\n\n return options;\n};\n\n/**\n * Création de la requête (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nGeocode.prototype.buildRequest = function (error, success) {\n var options = {\n httpMethod : this.options.httpMethod,\n // options specifiques du service\n geocodeMethod : \"search\",\n query : this.options.query,\n index : this.options.index,\n returnTrueGeometry : this.options.returnTrueGeometry,\n position : this.options.position,\n maxResp : this.options.maximumResponses,\n filters : this.options.filters\n };\n\n this.request = GeocodeRequestFactory.build(options);\n\n // on teste si la requete a bien été construite !\n (!this.request)\n ? error.call(this, new ErrorService(_.getMessage(\"SERVICE_REQUEST_BUILD\")))\n : success.call(this, this.request);\n};\n\n/**\n * Analyse de la reponse (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nGeocode.prototype.analyzeResponse = function (error, success) {\n /* INFO :\n Etape 1 : Création de la requête (URL)\n -> stockage de la requête dans this.request\n Etape 2 : Envoi de la requête\n -> appel du protocol XHR, et envoi (par ex send ())\n -> récupération de la réponse JSON dans la fonction onSuccess () (this.response)\n -> si code HTTP 200 et pas de message d'erreur : etape 3\n -> si code HTTP != 200 : lancement de la fonction de callback onFailure avec le message d'erreur\n Etape 3 : Analyse de la réponse JSON (si rawResponse === false )\n -> appel du parser pour récupérer le document\n Etape 4 : Lancement de la fonction de callback onSuccess avec la réponse :\n -> JSON (si rawResponse === true)\n -> ou geocodedLocations\n */\n\n if (this.response) {\n var options = {\n response : this.response,\n rawResponse : this.options.rawResponse,\n onError : error,\n onSuccess : success,\n scope : this\n };\n\n GeocodeResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default Geocode;\n","import Logger from \"../../../Utils/LoggerByDefault\";\nimport GeocodeRequestREST from \"./GeocodeRequestREST\";\n\n/**\n * Creation d'une requête\n * (Factory)\n *\n * @module GeocodeRequestFactory\n * @alias Gp.Services.Geocode.Request.GeocodeRequestFactory\n * @private\n */\nvar GeocodeRequestFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Geocode\n *\n * @example\n * var options = {\n * // options specifiques du service\n * geocodeMethod:\n * query:\n * filters:\n * maximumResponses:\n * };\n * var result = GeocodeRequestFactory.build(options);\n * if (!result) {\n * // error...\n * }\n * @returns {String} request\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"GeocodeRequestFactory\");\n logger.trace([\"GeocodeRequestFactory::build()\"]);\n\n var settings = options || {};\n\n var myReq = new GeocodeRequestREST(settings);\n if (!myReq.processRequestString()) {\n throw new Error(\"Error process request (rest) !\");\n }\n var request = myReq.requestString;\n\n logger.trace(request);\n\n return request;\n }\n};\n\nexport default GeocodeRequestFactory;\n","\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport GeocodeParamREST from \"./model/GeocodeParamREST\";\n\n/**\n * @classdesc\n * Classe de gestion des requêtes de type REST sur le service de calcul d'itineraire\n * (uniquement en GET)\n *\n * @constructor\n * @alias Gp.Services.Geocode.Request.GeocodeRequestREST\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * var options = {\n * (...)\n * };\n *\n * @private\n */\nfunction GeocodeRequestREST (options) {\n this.logger = Logger.getLogger(\"GeocodeRequestREST\");\n this.logger.trace(\"[Constructeur GeocodeRequestREST ()]\");\n\n if (!(this instanceof GeocodeRequestREST)) {\n throw new TypeError(\"GeocodeRequestREST constructor cannot be called as a function.\");\n }\n\n // existance des options\n if (!options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n /** liste des options */\n this.settings = options;\n}\n\nGeocodeRequestREST.prototype = {\n\n /**\n * @lends module:GeocodeRequestREST#\n */\n\n /**\n * request\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : GeocodeRequestREST,\n\n /**\n * Construction de la requête.\n *\n * @returns {String} request\n */\n processRequestString : function () {\n var request = \"\";\n\n // Mapping des options avec le service de l'API REST\n const oParams = new GeocodeParamREST(this.settings);\n\n const params = oParams.getParams();\n for (var i = 0; i < params.length; i++) {\n var o = params[i];\n if (request) {\n request += \"&\";\n }\n request += o.k + \"=\" + o.v;\n }\n\n if (!this.settings.geocodeMethod || (this.settings.geocodeMethod !== \"search\" && this.settings.geocodeMethod !== \"reverse\")) {\n throw new Error(\"Error geocodeMethod not valid\");\n }\n\n this.requestString = \"?\" + request;\n this.logger.trace(this.requestString);\n\n return this.requestString;\n }\n};\n\nexport default GeocodeRequestREST;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes du service de calcul d'itineraire (REST).\n * Permet le mapping avec les options du service.\n * @constructor\n * @alias Gp.Services.Route.Request.RouteParamREST\n * @param {Object} options - options\n *\n * @private\n */\nfunction GeocodeParamREST (options) {\n if (!(this instanceof GeocodeParamREST)) {\n throw new TypeError(\"GeocodeParamREST constructor cannot be called as a function.\");\n }\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur GeocodeParamREST ()]\");\n\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n // methode de geocodage\n if (!this.options.geocodeMethod || (this.options.geocodeMethod !== \"search\" && this.options.geocodeMethod !== \"reverse\")) {\n throw new Error(\"Error geocodeMethod not valid\");\n }\n this.geocodeMethod = this.options.geocodeMethod;\n\n // mapping des options avec l'API REST\n this.query = (typeof this.options !== \"undefined\") ? this.options.query : null;\n\n this.searchGeometry = this.options.searchGeometry || null;\n\n this.index = this.options.index || null;\n\n this.lon = this.options.position && this.options.position.lon ? this.options.position.lon : null;\n\n this.lat = this.options.position && this.options.position.lat ? this.options.position.lat : null;\n\n this.maxResp = this.options.maxResp || null;\n\n this.returnTrueGeometry = this.options.returnTrueGeometry || null;\n\n this.filters = this.options.filters || {};\n}\n\n/**\n * CLASSNAME\n */\nGeocodeParamREST.CLASSNAME = \"GeocodeParamREST\";\n\nGeocodeParamREST.prototype = {\n\n /**\n * @lends module:GeocodeParamREST#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor : GeocodeParamREST,\n\n /**\n * Retourne les filtres\n * @returns {String} les filtres\n */\n getFilters : function () {\n var filters = {};\n for (var prop in this.filters) {\n if (this.filters.hasOwnProperty(prop)) {\n filters[prop] = this.filters[prop];\n }\n }\n return filters;\n },\n\n /**\n * Retourne l'index\n * @returns {String} l'index\n */\n getIndex : function () {\n if (this.index === undefined) {\n return null;\n }\n if (this.index === \"StreetAddress\") {\n return \"address\";\n } else if (this.index === \"CadastralParcel\") {\n return \"parcel\";\n } else if (this.index === \"PositionOfInterest\") {\n return \"poi\";\n } else if (this.index === \"location\") {\n return \"location\";\n }\n return this.index;\n },\n\n /**\n * Retourne la géométrie de recherche\n * @returns {String} la géométrie de recherche au format json\n */\n getSearchGeometry : function () {\n return JSON.stringify(this.searchGeometry);\n }\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Array} liste de paramêtres\n */\nGeocodeParamREST.prototype.getParams = function () {\n var map = [];\n\n if (this.geocodeMethod === \"search\") {\n map.push({\n k : \"q\",\n v : this.query\n });\n }\n\n if (this.index) {\n map.push({\n k : \"index\",\n v : this.getIndex()\n });\n }\n\n if (this.geocodeMethod === \"reverse\" && this.searchGeometry) {\n map.push({\n k : \"searchgeom\",\n v : this.getSearchGeometry()\n });\n }\n\n if (this.lon && this.lat) {\n map.push({\n k : \"lon\",\n v : this.lon\n });\n map.push({\n k : \"lat\",\n v : this.lat\n });\n }\n\n if (this.maxResp) {\n map.push({\n k : \"limit\",\n v : this.maxResp\n });\n }\n\n if (this.returnTrueGeometry) {\n map.push({\n k : \"returntruegeometry\",\n v : this.returnTrueGeometry\n });\n }\n\n const filters = this.getFilters();\n for (var key in filters) {\n map.push({\n k : key,\n v : filters[key]\n });\n }\n\n return map;\n};\n\nexport default GeocodeParamREST;\n","/**\n * Factory pour générer une reponse JSON à partir d'un XML\n * (Factory)\n *\n * @module GeocodeResponseFactory\n * @alias Gp.Services.Geocode.Response.GeocodeResponseFactory\n * @private\n */\n// import Logger from \"../../../Utils/LoggerByDefault\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport GeocodeResponseParser from \"../Formats/GeocodeResponseParser\";\n\nvar GeocodeReponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Geocode\n *\n * @example\n * var options = {\n * response :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // data de type GeocodeResponse\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n data = options.response;\n } else {\n try {\n const parser = new GeocodeResponseParser();\n data = parser.parse(options.response);\n\n if (!data) {\n throw new Error(\"L'analyse de la réponse du service !?\");\n }\n } catch (e) {\n var message = e.message;\n if (typeof options.response === \"string\") {\n message += \"('\" + options.response + \"')\";\n } else {\n message += \"('\" + options.response.documentElement.innerHTML + \"')\";\n }\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE\", message),\n type : ErrorService.TYPE_UNKERR,\n status : -1\n }));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type : ErrorService.TYPE_SRVERR,\n status : 200 // FIXME : 200 ?\n }));\n return;\n }\n }\n } else {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\"),\n type : ErrorService.TYPE_SRVERR,\n status : -1 // FIXME : status response\n }));\n return;\n }\n\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default GeocodeReponseFactory;\n","\n/**\n * Response object for {@link module:Services~geocode Gp.Services.geocode ()} or {@link module:Services~reverseGeocode Gp.Services.reverseGeocode ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Array.} locations - locations array.\n *\n * @namespace\n * @alias Gp.Services.GeocodeResponse\n */\nfunction GeocodeResponse () {\n if (!(this instanceof GeocodeResponse)) {\n throw new TypeError(\"GeocodeResponse constructor cannot be called as a function.\");\n }\n\n this.locations = [];\n}\n\nGeocodeResponse.prototype = {\n\n constructor : GeocodeResponse\n\n};\n\nexport default GeocodeResponse;\n","\n/**\n * Single location object returned by the underlying geocoding web service.\n *\n * @property {Gp.Point} position - Position of the location given in the requested coordinates system.\n * @property {String} type - location type \"StreetAddress\" (for an address), \"PositionOfInterest\" (for a place name) or \"CadastralParcel\" (for cadastral parcel).\n * @property {String} matchType - how geocoding is performed : \"street number\" (exact address), \"street enhanced\" (street number calculated by interpolation), \"street\" (only the street), \"city\" (only the city).\n * @property {Float} accuracy - Accuracy of the response towards the requested location between 0 (unaccurate) and 1 (exact match).\n * @property {Object} placeAttributes - Associative array matching the following attributes with their values given by the underlying web service :\n *\n * *Common attributes : *\n *\n * - **trueGeometry** - the 'real life' geometry if different from 'Point' type.\n *\n * *if type === \"StreetAddress\" :*\n *\n * - **number** - Street number.\n * - **postalCode** - PostCode\n * - **street** - Street name\n * - **city** - City\n * - **houseNumberInfos** - additional street number information\n * - **inseeCode** - INSEE Code\n *\n *\n * *if type === \"PositionOfInterest\" :*\n *\n * - **type** - Place name type\n * - **postalCode** - PostCode\n * - **toponyme** - Toponyme\n * - **extraFields** - additional place name properties\n * - **inseeCode** - INSEE Code\n *\n *\n * *si type = \"CadastralParcel\" :*\n *\n * - **codeCommuneAbs** - when a parcel comes from a city that was absorbed by another, code of that old city. \"000\" otherwise.\n * - **codeArrondissement** - arrondissement\n * - **identifiant** - cadastral parcel code\n * - **feuille** - Parcel Sheet (eg. \"1\").\n * - **numero** - Parcel Number (eg. \"0041\")\n * - **section** - Parcel Section (eg. \"0D\").\n * - **nomCommune** - Parcel municipality name.\n * - **codeCommune** - Parcel municipality.\n * - **codeDepartement** - Parcel Department.\n *\n * @namespace\n * @alias Gp.Services.Geocode.GeocodedLocation\n */\nfunction GeocodedLocation () {\n if (!(this instanceof GeocodedLocation)) {\n throw new TypeError(\"GeocodedLocation constructor cannot be called as a function.\");\n }\n\n this.position = null;\n\n this.matchType = null;\n\n this.placeAttributes = {};\n\n this.type = null;\n\n this.accuracy = null;\n\n /**\n * Nom de la classe : \"GeocodedLocation\"\n * @type {String}\n */\n this.CLASSNAME = \"GeocodedLocation\";\n}\n\nGeocodedLocation.prototype = {\n\n constructor : GeocodedLocation\n\n};\n\nexport default GeocodedLocation;\n","import Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport GeocodeRequestFactory from \"./Request/GeocodeRequestFactory\";\nimport GeocodeResponseFactory from \"./Response/GeocodeResponseFactory\";\n\n/**\n * @classdesc\n * Appel du service de géocodage inverse du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.ReverseGeocode\n *\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {Object} options.position - Position du point de référence pour le calcul de proximité exprimée dans le système de référence spécifié par le srs.\n * @param {Float} options.position.lon - Longitude du point de référence pour le calcul de proximité.\n * @param {Float} options.position.lat - Latitude du point de référence pour le calcul de proximité.\n *\n * @param {Object} [options.filters] - Les propriétés possibles de cet objet.\n * @param {String} [options.filters.[proprietes du filtre]] - Critère supplémentaire pour filtrer la recherche sous la forme\n * d'un couple clé/valeur à définir selon les possibilités du serveur ajouté à la requête.\n * Le service de géocodage du Géoportail permet de filtrer les adresses postales avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"city\".\n * Il permet également de filtrer les toponymes avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"type\".\n * Enfin, il permet de filtrer les parcelles cadastrales avec les propriétés :\n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n *\n * @param {Object} [options.searchGeometry] - Emprise dans laquelle on souhaite effectuer la recherche.\n * Les propriétés possibles de cet objet sont décrites ci-après.\n * @param {String} options.searchGeometry.type - Type de géometrie (Point|Circle|Linestring|Polygon)\n * @param {Array.|Array.Array.} options.searchGeometry.coordinates - Coordonnées des points constituant la géométrie.\n * @param {Float} options.searchGeometry.radius - Rayon. Paramètre applicable uniquement pour le type 'Circle'.\n *\n * @param {String} [options.index = \"StreetAddress\"] - Type de l'objet recherché.\n * Le service de géocodage du Géoportail permet de rechercher des 'PositionOfInterest' pour des toponymes, des 'StreetAddress'\n * pour des adresses postales ou des 'CadastralParcel' pour des parcelles cadastrales. L'index 'location' permet une recherche\n * multi-indexes en regroupant les indexes 'PositionOfInterest' et 'StreetAddress'.\n * D'autres types pourront être rajoutés selon l'évolution du service.\n * Par défaut, index = 'StreetAddress'.\n *\n * @param {Number} [options.maximumResponses] - Nombre de réponses maximal que l'on souhaite recevoir.\n * Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 20s.\n *\n * @param {Boolean} [options.returnTrueGeometry] - Booléen indiquant si l'on souhaite récupérer la géométrie vraie des objects géolocalisés.\n * false par défaut.\n *\n * @example\n * var options = {\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * proxyURL : null,\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * index : 'StreetAddress',\n * searchGeometry : {\n * type : Circle,\n * coordinates : [48, 2],\n * radius : 100\n * },\n * position : {lon:2 , lat:48.5},\n * maximumResponses : 25,\n * };\n *\n */\nfunction ReverseGeocode (options_) {\n if (!(this instanceof ReverseGeocode)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"ReverseGeocode\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"ReverseGeocode\";\n\n this.logger = Logger.getLogger(\"Gp.Services.ReverseGeocode\");\n this.logger.trace(\"[Constructeur ReverseGeocode (options)]\");\n\n var options = this.patchOptionConvertor(options_);\n if (!options.serverUrl) {\n options.serverUrl = DefaultUrlService.ReverseGeocode.newUrl();\n }\n\n // appel du constructeur par heritage\n CommonService.apply(this, [options]);\n\n if (!options.searchGeometry) {\n if (!options.position) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"searchGeometry\"));\n }\n } else {\n this.options.searchGeometry = options.searchGeometry;\n }\n\n // on definit l'index par defaut\n if (!options.index) {\n this.options.index = options.index = \"StreetAddress\";\n }\n\n if (options.filters) {\n var filter = Object.keys(options.filters);\n for (var i = 0; i < filter.length; i++) {\n var key = filter[i];\n // on supprime les filtres vides\n if (typeof options.filters[key] === \"undefined\" ||\n (typeof options.filters[key] === \"object\" && Object.keys(options.filters[key]).length === 0) ||\n (typeof options.filters[key] === \"string\" && options.filters[key].length === 0) ||\n (Array.isArray(options.filters[key]) && options.filters[key].length === 0)\n ) {\n delete this.options.filters[key];\n }\n }\n }\n\n this.options.position = options.position;\n this.options.index = options.index || \"StreetAddress\";\n this.options.maximumResponses = options.maximumResponses || 20;\n}\n\n/**\n * @lends module:ReverseGeocode#\n */\nReverseGeocode.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nReverseGeocode.prototype.constructor = ReverseGeocode;\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} options_ - options du service\n * @return {Object} - options\n */\nReverseGeocode.prototype.patchOptionConvertor = function (options_) {\n var options = options_;\n\n if (options.filterOptions) {\n this.logger.warn(\"The parameter 'filterOptions' is deprecated\");\n\n if (options.filterOptions.type) {\n this.logger.warn(\"The parameter 'filterOptions.type' is deprecated\");\n if (!options.index) {\n if (Array.isArray(options.filterOptions.type) && options.filterOptions.type.length > 0) {\n options.index = options.filterOptions.type[0];\n } else {\n options.index = options.filterOptions.type;\n }\n }\n delete options.filterOptions.type;\n }\n\n if (options.filterOptions.bbox) {\n this.logger.warn(\"The parameter 'filterOptions.bbox' is deprecated\");\n if (!options.searchGeometry) {\n // convertir la geometrie\n options.searchGeometry = this.bbox2Json(options.filterOptions.bbox);\n }\n delete options.filterOptions.bbox;\n }\n\n if (options.filterOptions.circle) {\n this.logger.warn(\"The parameter 'filterOptions.circle' is deprecated\");\n if (!options.searchGeometry) {\n // convertir la geometrie\n options.searchGeometry = this.circle2Json(options.filterOptions.circle);\n }\n delete options.filterOptions.circle;\n }\n\n if (options.filterOptions.polygon) {\n this.logger.warn(\"The parameter 'filterOptions.polygon' is deprecated\");\n if (!options.searchGeometry) {\n // convertir la geometrie\n options.searchGeometry = this.polygon2Json(options.filterOptions.polygon);\n }\n delete options.filterOptions.polygon;\n }\n\n if (!options.filters && Object.keys(options.filterOptions).length > 0) {\n options.filters = options.filterOptions;\n }\n\n delete options.filterOptions;\n }\n\n if (options.position) {\n if (options.position.x) {\n this.logger.warn(\"The parameter 'position.x' is deprecated\");\n\n if (!options.position.lon) {\n options.position.lon = options.position.x;\n }\n delete options.position.x;\n }\n\n if (options.position.y) {\n this.logger.warn(\"The parameter 'position.y' is deprecated\");\n\n if (!options.position.lat) {\n options.position.lat = options.position.y;\n }\n delete options.position.y;\n }\n }\n\n if (options.srs) {\n this.logger.warn(\"The parameter 'srs' is deprecated\");\n delete options.srs;\n }\n\n return options;\n};\n\n/**\n * (overwrite)\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nReverseGeocode.prototype.buildRequest = function (error, success) {\n var options = {\n httpMethod : this.options.httpMethod,\n // options specifiques du service\n geocodeMethod : \"reverse\",\n searchGeometry : this.options.searchGeometry,\n index : this.options.index,\n position : this.options.position,\n returnTrueGeometry : this.options.returnTrueGeometry,\n maxResp : this.options.maximumResponses,\n filters : this.options.filters\n };\n\n this.request = GeocodeRequestFactory.build(options);\n\n // on teste si la requete a bien été construite !\n (!this.request)\n ? error.call(this, new ErrorService(_.getMessage(\"SERVICE_REQUEST_BUILD\")))\n : success.call(this, this.request);\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nReverseGeocode.prototype.analyzeResponse = function (error, success) {\n if (this.response) {\n var options = {\n response : this.response,\n rawResponse : this.options.rawResponse,\n onError : error,\n onSuccess : success,\n scope : this\n };\n\n GeocodeResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Array} bbox - bbox\n * @return {Object} - geometrie au format json\n */\nReverseGeocode.prototype.bbox2Json = function (bbox) {\n return {\n type : \"Polygon\",\n coordinates : [[\n [bbox.left, bbox.top],\n [bbox.right, bbox.top],\n [bbox.right, bbox.bottom],\n [bbox.left, bbox.bottom],\n [bbox.left, bbox.top]\n ]]\n };\n};\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} circle - circle\n * @return {Object} - geometrie au format json\n */\nReverseGeocode.prototype.circle2Json = function (circle) {\n return {\n type : \"Circle\",\n radius : circle.radius,\n coordinates : [circle.x, circle.y]\n };\n};\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Array} polygon - polygon\n * @return {Object} - geometrie au format json\n */\nReverseGeocode.prototype.polygon2Json = function (polygon) {\n var jsonGeom = {\n type : \"Polygon\",\n coordinates : [[]]\n };\n\n for (var i = 0; i < polygon.length; ++i) {\n jsonGeom.coordinates[0].push([polygon[i].x, polygon[i].y]);\n }\n\n return jsonGeom;\n};\n\n/**\n * Codes EPSG géographiques (lat/lon). Utiles car les coordonnées doivent être inversées.\n */\nReverseGeocode.geoEPSG = [\"EPSG:4326\"];\n\nexport default ReverseGeocode;\n","\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport ProcessIsoCurveRequest from \"./Request/ProcessIsoCurveRequest\";\nimport ProcessIsoCurveResponseFactory from \"./Response/ProcessIsoCurveResponseFactory\";\n\n/**\n * @classdesc\n * Appel du service d'isochrone/distance du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.ProcessIsoCurve\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String} options.resource - La ressource utilisée pour le calcul : bdtopo-valhalla (par défaut) ou bdtopo-pgr.\n *\n * @param {String} options.outputFormat - Le format de la réponse du service iso : 'json' uniquement et par défaut.\n *\n * @param {Object} options.position - Point de départ du calcul.\n * Coordonnées exprimées en longitudes, latitudes (EPSG:4326)\n * @param {Float} options.position.x - Abcisse du point de départ du calcul d'isochrone/distance.\n * @param {Float} options.position.y - Ordonnée du point de départ du calcul d'isochrone/distance.\n *\n * @param {String} options.srs - Projection.\n * Système de coordonnées dans lequel les coordonnées du point « location » sont exprimées et\n * dans lequel la géométrie de la courbe résultante sera exprimée.\n * Par défaut, le système de coordonnées utilisé sera « EPSG:4326 ».\n *\n * @param {String} [options.graph = \"voiture\"] - Nom du graphe à utiliser pour le calcul (« Pieton » ou « Voiture »).\n * La valeur par défaut est : «voiture»\n *\n * @param {Array.} [options.exclusions] - DEPRECATED: Ce paramètre est conservé pour une rétrocompatibilité de l'api. Le nouveau paramètre à utiliser est options.constraints.\n * Critères d'exclusions à appliquer pour le calcul.\n * On précise ici le type de tronçons que l'on ne veut pas que l'isochrone/distance emprunte\n * (valeurs possibles : « toll » (éviter les péages), « bridge », « tunnel »).\n *\n * @param {Object[]} [options.constraints] - Critères de contraintes à appliquer sur un itinéraire. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities.\n * @param {String} [options.constraints.constraintType] - Type de la contrainte. Généralement \"banned\".\n * @param {String} [options.constraints.key] - Clé de la contrainte. Généralement \"wayType\".\n * @param {String} [options.constraints.operator] - Opérateur de la contrainte. Généralement \"=\".\n * @param {String} [options.constraints.value] - Valeur de la contrainte. Généralement \"autoroute\".\n *\n * @param {String} [options.method = \"time\"] - Méthode utilisée pour le calcul de la courbe iso.\n * Les valeurs possible sont \"time\" pour un calcul d'isochrone, \"distance\" pour un calcul d'isodistance.\n * Pas de valeur spécifié équivaut à un calcul d'isochrone.\n *\n * @param {String} [options.distanceUnit = \"m\"] - Indique si la distance doit être exprimée en km ou m dans la réponse (\"m\" or \"km\").\n *\n * @param {String} [options.timeUnit = \"second\"] - Indique si la durée doit être exprimée en seconde, minute ou heure dans la réponse (\"standard\", \"second\", \"minute\", \"hour\"). Il peut-être formatté hh:mm::ss avec la valeur standard.\n *\n * @param {Float} options.time - Durée maximum (exprimée en secondes) à utiliser pour le calcul de la courbe à partir du ou jusqu'au point « location ».\n * Ce paramètre doit être renseigné si l'option \"méthod\" a la valeur \"time\".\n * Si l'option method n'est pas renseignée, ce paramètre doit être renseigné.\n *\n * @param {Float} options.distance - Distance maximum (exprimée en metres) à utiliser pour le calcul de la courbe à partir du ou j'usqu'au point « location ».\n * Ce paramètre doit être renseigné si l'option \"méthod\" a la valeur \"DISTANCE\".\n * Si l'option \"method\" n'est pas renseignée, ce paramètre sera ignoré.\n *\n * @param {Boolean} [options.reverse = false] - Indique si la géométrie résultante doit être lissée (« true ») pour ne pas avoir d'effet d'escalier.\n * Par défaut, la valeur « false » est appliquée.\n *\n * @param {Boolean} [options.smoothing = false] - Indique si la géométrie résultante doit être lissée (« true ») pour ne pas avoir d'effet d'escalier.\n * Par défaut, la valeur « false » est appliquée.\n *\n * @param {Boolean} [options.holes = false] - Indique si la géométrie résultante (surface) doit être retournée avec des trous (« true »).\n * Par défaut, la valeur « false » est appliquée.\n *\n * @example\n * var options = {\n * // options communes aux services\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * position : {\n * x : 2.3242664298058053,\n * y : 48.86118017324745\n * },\n * resource : bdtopo-valhalla,\n * distance : 200,\n * [time : ]\n * method : \"distance\",\n * graph : \"voiture\",\n * reverse : false\n * };\n */\n\nfunction ProcessIsoCurve (options) {\n if (!(this instanceof ProcessIsoCurve)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"ProcessIsoCurve\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"ProcessIsoCurve\";\n\n // appel du constructeur par heritage\n CommonService.apply(this, arguments);\n\n this.logger = Logger.getLogger(\"Gp.Services.ProcessIsoCurve\");\n this.logger.trace(\"[Constructeur ProcessIsoCurve (options)]\");\n\n if (!options.position) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"position\"));\n }\n\n // on lance une exception afin d'eviter au service de le faire...\n if (options.position.x === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"position.x\"));\n }\n\n if (options.position.y === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"position.y\"));\n }\n\n if (!options.time && !options.distance) {\n throw new Error(\"Parameter (s) 'distance' missing. Parameter time to calculate an isochrone, parameter distance for an isodistance\");\n }\n\n // si on a que le paramètre \"distance\" en entrée, on calcule une isodistance.\n // Le paramètre \"méthode\" doit pour avoir une réponse du service, être passé à \"distance\"\n if (!options.time && options.distance) {\n this.options.method = \"distance\";\n // on supprime l'éventuel attribut time, résidu d'un appel antérieur\n if (this.options.time) {\n delete this.options.time;\n }\n }\n\n // si on a que le paramètre \"time\" en entrée, on calcule une isochrone.\n // Le paramètre \"méthode\" doit pour avoir une réponse du service, être passé à \"time\"\n if (options.time && !options.distance) {\n this.options.method = \"time\";\n // on supprime l'éventuel attribut time, résidu d'un appel antérieur\n if (this.options.distance) {\n delete this.options.distance;\n }\n }\n\n // au cas où on a ni l'un, ni l'autre...\n this.options.method = this.options.method || \"time\";\n\n // options par defaut du service\n // TODO: modifier la ressource lors de la mise en production du service\n this.options.resource = options.resource || \"bdtopo-valhalla\";\n this.options.exclusions = options.exclusions || [];\n this.options.reverse = options.reverse || false;\n this.options.srs = options.srs || \"EPSG:4326\";\n this.options.distanceUnit = options.distanceUnit || \"m\";\n this.options.timeUnit = options.timeUnit || \"second\";\n\n // options depreciees\n if (options.smoothing) {\n this.logger.warn(\"options.smoothing is DEPRECATED\");\n }\n this.options.smoothing = false;\n if (options.holes) {\n this.logger.warn(\"options.holes is DEPRECATED\");\n }\n this.options.holes = false;\n\n // Gestion du graphe\n if (options.graph) {\n if (options.graph === \"Voiture\") {\n this.options.graph = \"car\";\n }\n if (options.graph === \"Pieton\") {\n this.options.graph = \"pedestrian\";\n }\n } else {\n this.options.graph = \"car\";\n }\n\n // Gestions des contraintes\n this.options.constraints = [];\n if (options.constraints) {\n if (Array.isArray(options.constraints)) {\n for (var k = 0; k < options.constraints.length; k++) {\n this.options.constraints.push(options.constraints[k]);\n }\n } else {\n throw new Error(_.getMessage(\"PARAM_TYPE\", \"constraints\"));\n }\n }\n\n // Gestion de l'ancien paramètre exclusions\n var constraintTunnel = {};\n var constraintPont = {};\n var constraintAutoroute = {};\n if (options.exclusions) {\n if (options.exclusions.length !== 0) {\n this.logger.warn(\"options.exclusions is DEPRECATED !!\");\n for (var c = 0; c < options.exclusions.length; c++) {\n if (typeof options.exclusions[c] === \"string\") {\n options.exclusions[c] = options.exclusions[c].toLowerCase();\n } else {\n // on ne crée pas une erreur pour rétro-compatibilité avec les anciennes versions\n continue;\n }\n if (options.exclusions[c] === \"toll\") {\n constraintAutoroute.constraintType = \"banned\";\n constraintAutoroute.key = \"wayType\";\n constraintAutoroute.operator = \"=\";\n constraintAutoroute.value = \"autoroute\";\n this.options.constraints.push(constraintAutoroute);\n }\n if (options.exclusions[c] === \"tunnel\") {\n constraintTunnel.constraintType = \"banned\";\n constraintTunnel.key = \"wayType\";\n constraintTunnel.operator = \"=\";\n constraintTunnel.value = \"tunnel\";\n this.options.constraints.push(constraintTunnel);\n }\n if (options.exclusions[c] === \"bridge\") {\n constraintPont.constraintType = \"banned\";\n constraintPont.key = \"wayType\";\n constraintPont.operator = \"=\";\n constraintPont.value = \"pont\";\n this.options.constraints.push(constraintPont);\n }\n }\n }\n }\n\n // on passe l'option outputFormat en minuscules afin d'éviter des exceptions.\n this.options.outputFormat = (typeof options.outputFormat === \"string\") ? options.outputFormat.toLowerCase() : \"json\";\n if (options.outputFormat && options.outputFormat !== \"json\") {\n throw new Error(_.getMessage(\"PARAM_NOT_SUPPORT\", \"outputFormat\"));\n }\n this.options.outputFormat = \"json\";\n\n // gestion de l'url du service par defaut\n // si l'url n'est pas renseignée, il faut utiliser les urls par defaut\n if (!this.options.serverUrl) {\n var urlFound = DefaultUrlService.ProcessIsoCurve.newUrl();\n if (!urlFound) {\n throw new Error(\"Url by default not found !\");\n }\n this.options.serverUrl = urlFound;\n this.logger.trace(\"Serveur URL par defaut : \" + this.options.serverUrl);\n }\n}\n\n/**\n * @lends module:ProcessIsoCurve#\n */\nProcessIsoCurve.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nProcessIsoCurve.prototype.constructor = ProcessIsoCurve;\n\n/**\n * Création de la requête (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nProcessIsoCurve.prototype.buildRequest = function (error, success) {\n try {\n var oIsoCurve = new ProcessIsoCurveRequest(this.options);\n if (!oIsoCurve.processRequestString()) {\n throw new Error(_.getMessage(\"SERVICE_REQUEST_BUILD\"));\n }\n\n this.request = oIsoCurve.requestString;\n } catch (e) {\n error.call(this, new ErrorService(e.message));\n return;\n }\n\n success.call(this, this.request);\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} onError - callback des erreurs\n * @param {Function} onSuccess - callback de succès de l'analyse de la réponse\n */\nProcessIsoCurve.prototype.analyzeResponse = function (onError, onSuccess) {\n if (this.response) {\n var options = {\n response : this.response,\n outputFormat : this.options.outputFormat,\n rawResponse : this.options.rawResponse,\n onSuccess : onSuccess,\n onError : onError,\n scope : this\n };\n\n ProcessIsoCurveResponseFactory.build(options);\n } else {\n onError.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default ProcessIsoCurve;\n","\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport ProcessIsoCurveParam from \"./model/ProcessIsoCurveParam\";\n\n/**\n * @classdesc\n * Classe de gestion des requêtes sur le service de calcul d'isoschrone/isodistance.\n * Les requêtes peuvent être en mode GET ou POST,\n * et le format de sorti est en JSON.\n *\n * @constructor\n * @alias Gp.Services.ProcessIsoCurve.Request.ProcessIsoCurveRequest\n * @param {Object} options - options\n *\n * @example\n * var options = {\n * httpMethod : 'GET', // GET|POST\n * // spécifique au service\n * position : {\n * x : 2.3242664298058053,\n * y : 48.86118017324745\n * },\n * graph : \"car\",\n * method : 'time',\n * time : 1000, //distance : 200\n * reverse : false,\n * srs : 'EPSG:4326'\n * };\n *\n * try {\n *\n * var oIsoCurve = new ProcessIsoCurveRequest (options);\n * if (!oIsoCurve.processRequestString ()) {\n * // error\n * }\n *\n * var request = oIsoCurve.requestString;\n *\n * } catch (e) {\n * // error\n * }\n * @private\n */\nfunction ProcessIsoCurveRequest (options) {\n this.logger = Logger.getLogger(\"ProcessIsoCurveRequest\");\n this.logger.trace(\"[Constructeur ProcessIsoCurveRequest ()]\");\n\n if (!(this instanceof ProcessIsoCurveRequest)) {\n throw new TypeError(\"ProcessIsoCurveRequest constructor cannot be called as a function.\");\n }\n\n // existance des options\n if (!options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n /**\n * Liste des options\n */\n this.settings = options;\n\n /**\n * Mode HTPP.\n * Par defaut, \"GET\".\n * @type {String}\n */\n this.mode = this.settings.httpMethod || \"GET\";\n}\n\nProcessIsoCurveRequest.prototype = {\n\n /**\n * @lends module:ProcessIsoCurveRequest#\n */\n\n /**\n * Requête\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : ProcessIsoCurveRequest,\n\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out :\n * // (http://wxs.ign.fr/KEY/isochrone?)\n * // resource=&\n * // point=&\n * // costValue=&\n * // costType=&\n * // profile=&\n * // constraints=&\n * // direction=&\n * // crs=\n *\n * // POST out :\n * {\n * resource: \"bduni-idf-pgr\",\n * point: \"2.337306,48.849319\",\n * costValue: 100,\n * costType: \"time\",\n * profile: \"car\",\n * constraints: [{\n * constraintType: \"banned\",\n * key: \"ways_type\",\n * operator: \"=\",\n * value: \"autoroute\"\n * }]\n * }\n *\n * @returns {String} request\n */\n processRequestString : function () {\n var request = \"\";\n var i = 0;\n\n switch (this.mode) {\n case \"GET\":\n this.logger.trace(\"Process GET Request\");\n\n // Mapping des options avec le service de l'API REST\n var oParams = new ProcessIsoCurveParam(this.settings);\n var params = oParams.getParams();\n\n for (i = 0; i < params.length; i++) {\n var o = params[i];\n if (request) {\n request += \"&\";\n }\n request += o.k + \"=\" + o.v;\n }\n\n break;\n\n case \"POST\":\n this.logger.trace(\"Process POST Request\");\n // creation du JSON\n var postRequest = {};\n\n postRequest.resource = this.settings.resource;\n\n postRequest.point = this.settings.position.x + \",\" + this.settings.position.y;\n\n if (this.settings.method === \"distance\") {\n postRequest.costType = \"distance\";\n postRequest.costValue = this.settings.distance;\n } else {\n postRequest.costType = \"time\";\n postRequest.costValue = this.settings.time;\n }\n\n postRequest.profile = this.settings.graph;\n\n if (this.settings.reverse) {\n postRequest.direction = \"arrival\";\n } else {\n postRequest.direction = \"departure\";\n }\n\n postRequest.constraints = this.settings.constraints;\n\n postRequest.distanceUnit = this.settings.distanceUnit;\n\n postRequest.timeUnit = this.settings.timeUnit;\n\n postRequest.crs = this.settings.srs;\n\n // conversion en chaîne de caractères\n request = JSON.stringify(postRequest);\n break;\n\n default:\n this.logger.error(\"No other HTTP method supported by the service !\");\n }\n\n this.logger.trace(request);\n this.requestString = request;\n\n return this.requestString;\n }\n};\n\nexport default ProcessIsoCurveRequest;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n *\n * Classe de gestion des param. des requêtes du service de calcul des iso.\n * Permet le mapping avec les options du service.\n *\n * @constructor\n * @alias Gp.Services.ProcessIsoCurve.Request.ProcessIsoCurveParam\n * @param {Object} options - options\n * @private\n *\n */\nfunction ProcessIsoCurveParam (options) {\n if (!(this instanceof ProcessIsoCurveParam)) {\n throw new TypeError(\"ProcessIsoCurveParam constructor cannot be called as a function.\");\n }\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur ProcessIsoCurveParam ()]\");\n\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n // mapping des options avec l'API REST\n\n /** Identifiant de l’isochrone */\n this.id = this.options.id;\n\n /** Resource */\n this.resource = this.options.resource;\n\n /** Coordonnées de départ (ou arrivée si le reverse est à true). */\n this.point = this.options.position;\n\n /** projection (code EPSG comme epsg:4326 ou wgs84) */\n this.crs = this.options.srs;\n\n /**\n * Profil de véhicule à utiliser pour le calcul.\n * Voiture ou Pieton\n */\n this.profile = this.options.graph;\n\n /** Liste des règles de restrictions à utiliser */\n this.constraints = this.options.constraints;\n\n this.reverse = this.options.reverse;\n\n this.timeUnit = this.options.timeUnit;\n\n this.distanceUnit = this.options.distanceUnit;\n\n /**\n * \"time\" pour isochrone ou \"distance\" for isodistance.\n * Par defaut, time...\n */\n if (this.options.method === \"distance\") {\n this.costType = \"distance\";\n this.costValue = this.options.distance;\n if (this.distanceUnit === \"m\" && this.costValue >= 50000) {\n this.distanceUnit = \"km\";\n this.costValue /= 1000;\n }\n } else {\n this.costType = \"time\";\n this.costValue = this.options.time;\n }\n}\n\n/**\n * CLASSNAME\n */\nProcessIsoCurveParam.CLASSNAME = \"ProcessIsoCurveParam\";\n\nProcessIsoCurveParam.prototype = {\n\n /**\n * @lends module:ProcessIsoCurveParam#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor : ProcessIsoCurveParam,\n\n /**\n * Retourne le point\n * @returns {String} x,y\n */\n getLocation : function () {\n return this.point.x + \",\" + this.point.y;\n },\n\n /**\n * Retourne l'unité de la distance\n * @returns {String}\n */\n getDistanceUnit : function () {\n if (this.distanceUnit === \"m\") {\n return \"meter\";\n }\n if (this.distanceUnit === \"km\") {\n return \"kilometer\";\n }\n return \"\";\n },\n\n /**\n * Retourne la liste des contraintes\n * @returns {String}\n */\n getConstraints : function () {\n var constraintArray = [];\n\n if (this.constraints.length !== 0) {\n for (var k = 0; k < this.constraints.length; k++) {\n constraintArray.push(JSON.stringify(this.constraints[k]));\n }\n }\n return constraintArray.join(\"|\");\n },\n\n /**\n * Retourne la direction\n * @returns {String}\n */\n getDirection : function () {\n if (this.reverse) {\n return \"arrival\";\n } else {\n return \"departure\";\n }\n }\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Object[]} KVP\n */\nProcessIsoCurveParam.prototype.getParams = function () {\n var map = [];\n\n map.push({\n k : \"resource\",\n v : this.resource\n });\n\n map.push({\n k : \"point\",\n v : this.getLocation()\n });\n\n map.push({\n k : \"direction\",\n v : this.getDirection()\n });\n\n map.push({\n k : \"costType\",\n v : this.costType\n });\n\n map.push({\n k : \"costValue\",\n v : this.costValue\n });\n\n map.push({\n k : \"profile\",\n v : this.profile\n });\n\n map.push({\n k : \"timeUnit\",\n v : this.timeUnit\n });\n\n map.push({\n k : \"distanceUnit\",\n v : this.getDistanceUnit()\n });\n\n if (this.crs) {\n map.push({\n k : \"crs\",\n v : this.crs\n });\n }\n\n if (this.constraints) {\n map.push({\n k : \"constraints\",\n v : this.getConstraints()\n });\n }\n\n return map;\n};\n\nexport default ProcessIsoCurveParam;\n","import Logger from \"../../../Utils/LoggerByDefault\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport ProcessIsoCurveResponse from \"./model/ProcessIsoCurveResponse\";\n\n/**\n * Factory pour générer une reponse JSON à partir d'un JSON\n * (Factory)\n *\n * @module ProcessIsoCurveResponseFactory\n * @alias Gp.Services.ProcessIsoCurve.Response.ProcessIsoCurveResponseFactory\n * @private\n */\nvar ProcessIsoCurveResponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant ProcessIsoCurve\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"ProcessIsoCurveResponseFactory\");\n logger.trace([\"ProcessIsoCurveResponseFactory::build()\"]);\n\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n logger.trace(\"analyze response : json\");\n\n var JSONResponse;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // analyse de la reponse\n // création de l'objet de réponse\n data = new ProcessIsoCurveResponse();\n\n // remplissage de l'objet créé avec les attribtuts de la réponse du service\n if (JSONResponse) {\n if (JSONResponse.costType === \"distance\") {\n data.time = \"\";\n data.distance = JSONResponse.costValue;\n } else {\n data.time = JSONResponse.costValue;\n data.distance = \"\";\n }\n\n data.message = \"\";\n data.id = \"\";\n data.srs = JSONResponse.crs;\n data.geometry = JSONResponse.geometry;\n var coords = JSONResponse.point.split(\",\");\n if (data.location) {\n data.location.x = coords[0];\n data.location.y = coords[1];\n }\n } else {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE\", options.response)));\n return;\n }\n\n // info : en cas de problèmes de droits (clé invalide ou autre), la réponse est au format XML !!\n // ex. Key does not exist or has expired\n // mais le statut est 403, l'erreur est donc remontée plus tôt.\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type : ErrorService.TYPE_SRVERR,\n status : 200\n }));\n return;\n }\n }\n } else {\n // si la réponse est vide, on appelle le callback d'erreur\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n\n // si tout s'est bien passé, on appelle le callback de succès\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default ProcessIsoCurveResponseFactory;\n","\n/**\n * Response object for {@link module:Services~isoCurve Gp.Services.isoCurve ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Float} distance - distance (expressed in meters) used for the request.\n * @property {Float} time - time (expressed in seconds) used for the request.\n * @property {Object} geometry - Geometry (expressed in [GeoJSON]{@link http://geojson.org/}) of the isocurve.\n * @property {String} id - request id (used by underlying webservice).\n * @property {Gp.Point} location - Position of the start or end point used for the request (expressed in \"srs\" coordinates system).\n * @property {String} message - message\n * @property {String} srs - Identifier of the coordinates system used for the isocurve.\n *\n * @namespace\n * @alias Gp.Services.IsoCurveResponse\n *\n */\nfunction ProcessIsoCurveResponse () {\n if (!(this instanceof ProcessIsoCurveResponse)) {\n throw new TypeError(\"ProcessIsoCurveResponse constructor cannot be called as a function.\");\n }\n\n this.message = null;\n\n this.id = null;\n\n this.location = {};\n this.location.x = null;\n this.location.y = null;\n\n this.srs = null;\n\n this.geometry = null;\n\n this.time = null;\n\n this.distance = null;\n}\n\nProcessIsoCurveResponse.prototype = {\n\n constructor : ProcessIsoCurveResponse\n\n};\n\nexport default ProcessIsoCurveResponse;\n","import Logger from \"../../../Utils/LoggerByDefault\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport RouteRequestREST from \"./RouteRequestREST\";\n\n/**\n * Creation d'une requête REST en mode POST ou GET\n * (Factory)\n *\n * @module RouteRequestFactory\n * @alias Gp.Services.Route.Request.RouteRequestFactory\n * @private\n */\nvar RouteRequestFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * // utilisation avec les callback\n * var options = {\n * (...)\n * onSuccess : function (response) {},\n * onError : function (error) {},\n * // spécifique au service\n * startPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * endPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * provideBbox : false,\n * exclusions : [\"bridge\", \"tunnel\", \"toll\"],\n * distanceUnit : \"km\",\n * graph : \"Voiture\",\n * geometryInInstructions : false,\n * routePreference : \"fastest\"\n * };\n * RouteRequestFactory.build(options);\n *\n * // utilisation sans callback\n * var options = {...};\n * try {\n * var result = RouteRequestFactory.build(options);\n * if (! result) { throw new Error(\"...\"):}\n * } catch (e) {\n * // todo\n * }\n * @returns {String} request\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"RouteRequestFactory\");\n logger.trace([\"RouteRequestFactory::build()\"]);\n\n var request = null;\n\n var settings = options || {};\n\n // gestion des callback\n var bOnError = !!(options.onError !== null && typeof options.onError === \"function\");\n\n var message = null;\n\n // FIXME les exceptions ne sont pas 'catchées' sur le constructeur !\n var myReq = new RouteRequestREST(settings);\n if (!myReq.processRequestString()) {\n message = \"Error process request (rest) !\";\n if (bOnError) {\n options.onError.call(options.scope, new ErrorService(message));\n return;\n }\n throw new Error(message);\n }\n request = myReq.requestString;\n\n return request;\n }\n};\n\nexport default RouteRequestFactory;\n","\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport RouteParamREST from \"./model/RouteParamREST\";\n\n/**\n * @classdesc\n * Classe de gestion des requêtes de type REST sur le service de calcul d'itineraire\n * (uniquement en GET)\n *\n * @constructor\n * @alias Gp.Services.Route.Request.RouteRequestREST\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * var options = {\n * (...)\n * };\n *\n * @private\n */\nfunction RouteRequestREST (options) {\n this.logger = Logger.getLogger(\"RouteRequestREST\");\n this.logger.trace(\"[Constructeur RouteRequestREST ()]\");\n\n if (!(this instanceof RouteRequestREST)) {\n throw new TypeError(\"RouteRequestREST constructor cannot be called as a function.\");\n }\n\n // existance des options\n if (!options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n /** liste des options */\n this.settings = options;\n}\n\nRouteRequestREST.prototype = {\n\n /**\n * @lends module:RouteRequestREST#\n */\n\n /**\n * request\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : RouteRequestREST,\n\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out : origin=2.416907353809513,48.8465772142297&destination=2.4248037771493673,48.84591353161838\n * // POST out : Not yet supported method POST !\n * @returns {String} request\n */\n processRequestString : function () {\n // INFO\n // construction simple sans template...,\n // mais en attendant que les services soient fixés, on taggue ce composant en mode PROTOTYPE !\n this.logger.warn(\" PROTOTYPE !\");\n\n // Mapping des options avec le service de l'API REST\n var oParams = new RouteParamREST(this.settings);\n var params = oParams.getParams();\n\n var request = \"\";\n for (var i = 0; i < params.length; i++) {\n var o = params[i];\n if (request) {\n request += \"&\";\n }\n request += o.k + \"=\" + o.v;\n }\n\n // Exemple :\n // http://wxs.ign.fr/KEY/itineraire/rest/route.json?\n // origin=&\n // destination=&\n // waypoints=&\n // method=DISTANCE&\n // graph=Pieton&\n // graphName=Pieton&\n // exclusions=&\n // tolerance=10&\n // srs=\n\n this.logger.trace(request);\n this.requestString = request;\n\n return this.requestString;\n }\n};\n\nexport default RouteRequestREST;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes du service de calcul d'itineraire (REST).\n * Permet le mapping avec les options du service.\n * @constructor\n * @alias Gp.Services.Route.Request.RouteParamREST\n * @param {Object} options - options\n *\n * @private\n */\nfunction RouteParamREST (options) {\n if (!(this instanceof RouteParamREST)) {\n throw new TypeError(\"RouteParamREST constructor cannot be called as a function.\");\n }\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur RouteParamREST ()]\");\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n // mapping des options avec l'API REST\n\n /** Ressource utilisée */\n this.resource = this.options.resource;\n\n /** Coordonnées du point de départ. */\n this.start = this.options.startPoint.x + \",\" + this.options.startPoint.y;\n\n /** Coordonnées du point d’arrivée. */\n this.end = this.options.endPoint.x + \",\" + this.options.endPoint.y;\n\n /** Coordonnées des étapes point de départ. */\n this.intermediates = this.options.viaPoints;\n\n /** Nom du profile à utiliser */\n this.profile = this.options.graph;\n\n /** projection (code EPSG comme epsg:4326 ou wgs84) */\n this.crs = this.options.srs;\n\n /** Liste des contraintes */\n this.constraints = this.options.constraints;\n\n /** Nom de l'optimisation à utiliser */\n this.optimization = this.options.routePreference;\n\n /** Format de sortie (résumé de l’itinéraire) */\n this.getSteps = (this.options.geometryInInstructions) ? \"true\" : \"false\";\n\n /** Unité des distances */\n this.distanceUnit = this.options.distanceUnit;\n\n /** Unité des durées */\n this.timeUnit = this.options.timeUnit;\n\n /** Attributs des voies */\n this.waysAttributes = this.options.waysAttributes;\n}\n\n/**\n * CLASSNAME\n */\nRouteParamREST.CLASSNAME = \"RouteParamREST\";\n\nRouteParamREST.prototype = {\n\n /**\n * @lends module:RouteParamREST#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor : RouteParamREST,\n\n /**\n * Retourne une liste de points\n * @returns {String} une liste de points (sep '|')\n */\n getIntermediates : function () {\n var array = [];\n if (this.intermediates.length !== 0) {\n for (var i = 0; i < this.intermediates.length; i++) {\n var obj = this.intermediates[i];\n array.push(obj.x + \",\" + obj.y);\n }\n }\n\n return array.join(\"|\");\n },\n\n /**\n * Retourne une liste d'attributs\n * @returns {String} une liste d'attributs (sep '|')\n */\n getWaysAttributes : function () {\n return this.waysAttributes.join(\"|\");\n },\n\n /**\n * Retourne un profile\n * @returns {String} profile\n */\n getProfile : function () {\n return this.profile;\n },\n\n /**\n * Retourne un distanceUnit\n * @returns {String} distanceUnit\n */\n getDistanceUnit : function () {\n if (this.distanceUnit === \"m\") {\n return \"meter\";\n }\n if (this.distanceUnit === \"km\") {\n return \"kilometer\";\n }\n return \"\";\n },\n\n /**\n * Retourne une optimisation\n * @returns {String} optimization\n */\n getOptimization : function () {\n if (this.optimization) {\n return this.optimization;\n } else {\n return \"\";\n }\n },\n\n /**\n * Retourne la liste des constraints\n * @returns {String} une liste des constraints (sep '|')\n */\n getConstraints : function () {\n var constraintArray = [];\n\n if (this.constraints.length !== 0) {\n for (var k = 0; k < this.constraints.length; k++) {\n constraintArray.push(JSON.stringify(this.constraints[k]));\n }\n }\n return constraintArray.join(\"|\");\n }\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Array} liste de paramêtres\n */\nRouteParamREST.prototype.getParams = function () {\n var map = [];\n\n map.push({\n k : \"resource\",\n v : this.resource\n });\n\n map.push({\n k : \"start\",\n v : this.start\n });\n\n map.push({\n k : \"end\",\n v : this.end\n });\n\n map.push({\n k : \"geometryFormat\",\n v : \"geojson\"\n });\n\n if (this.optimization) {\n map.push({\n k : \"optimization\",\n v : this.getOptimization()\n });\n }\n\n if (this.intermediates) {\n map.push({\n k : \"intermediates\",\n v : this.getIntermediates()\n });\n }\n\n if (this.profile) {\n map.push({\n k : \"profile\",\n v : this.getProfile()\n });\n }\n\n if (this.constraints) {\n map.push({\n k : \"constraints\",\n v : this.getConstraints()\n });\n }\n\n if (this.crs) {\n map.push({\n k : \"crs\",\n v : this.crs\n });\n }\n\n if (this.distanceUnit) {\n map.push({\n k : \"distanceUnit\",\n v : this.getDistanceUnit()\n });\n }\n\n if (this.timeUnit) {\n map.push({\n k : \"timeUnit\",\n v : this.timeUnit\n });\n }\n\n if (this.waysAttributes) {\n map.push({\n k : \"waysAttributes\",\n v : this.getWaysAttributes()\n });\n }\n\n return map;\n};\n\nexport default RouteParamREST;\n","import Logger from \"../../../Utils/LoggerByDefault\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport RouteResponse from \"./model/RouteResponse\";\nimport RouteInstruction from \"./model/RouteInstruction\";\n\n/**\n * Factory pour générer une reponse JSON à partir d'un XML ou d'un JSON\n * (Factory)\n *\n * @module RouteResponseFactory\n * @alias Gp.Services.Route.Response.RouteResponseFactory\n * @private\n */\nvar RouteResponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"RouteResponseFactory\");\n logger.trace(\"RouteResponseFactory::build()\");\n\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n logger.trace(\"analyze response : json\");\n\n var JSONResponse;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // construction de l'objet réponse JSON\n if (JSONResponse) {\n // le service renvoie t il une erreur ?\n if (JSONResponse.message) {\n // ex. {\"message\":\"message not null\", \"status\":\"ERROR\"}\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", JSONResponse.message)));\n return;\n }\n var legs = [];\n var legSteps = [];\n var steps = [];\n\n data = new RouteResponse();\n\n if (data.hasOwnProperty(\"totalTime\")) {\n data.totalTime = parseFloat(JSONResponse.duration);\n }\n if (data.hasOwnProperty(\"totalDistance\")) {\n data.totalDistance = parseFloat(JSONResponse.distance);\n }\n\n if (data.hasOwnProperty(\"bbox\")) {\n data.bbox.left = parseFloat(JSONResponse.bbox[0]);\n data.bbox.bottom = parseFloat(JSONResponse.bbox[1]);\n data.bbox.right = parseFloat(JSONResponse.bbox[2]);\n data.bbox.top = parseFloat(JSONResponse.bbox[3]);\n }\n\n if (data.hasOwnProperty(\"routeGeometry\") && !options.geometryInInstructions) {\n data.routeGeometry = JSONResponse.geometry;\n }\n\n if (data.hasOwnProperty(\"routeInstructions\") && options.geometryInInstructions) {\n var legList = JSONResponse.portions;\n var i;\n if (Array.isArray(legList) && legList.length) {\n for (i = 0; i < legList.length; i++) {\n legs.push(legList[i]);\n }\n }\n if (legs.length) {\n for (i = 0; i < legs.length; i++) {\n legSteps.push(legs[i].steps);\n }\n }\n if (legSteps.length) {\n for (i = 0; i < legSteps.length; i++) {\n steps = steps.concat(legSteps[i]);\n }\n }\n\n steps.forEach(function (step) {\n data.routeInstructions.push(new RouteInstruction());\n data.routeInstructions[data.routeInstructions.length - 1].duration = step.duration;\n data.routeInstructions[data.routeInstructions.length - 1].distance = step.distance;\n data.routeInstructions[data.routeInstructions.length - 1].code = \"\";\n data.routeInstructions[data.routeInstructions.length - 1].instruction = \"\";\n data.routeInstructions[data.routeInstructions.length - 1].geometry = step.geometry;\n\n // on ne souhaite pas de ce type de valeur...\n if (step.name === \"Valeur non renseignée\") {\n step.name = \"\";\n }\n\n switch (step.instruction.type) {\n case \"turn\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Tourner\";\n break;\n case \"new name\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Continuer tout droit\";\n break;\n case \"depart\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Départ\";\n break;\n case \"arrive\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Arrivée\";\n break;\n case \"merge\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Rejoindre\";\n break;\n case \"ramp\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Prendre la bretelle\";\n break;\n case \"on ramp\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Prendre la bretelle\";\n break;\n case \"off ramp\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Prendre la sortie\";\n break;\n case \"fork\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Sur la bifurcation, prendre\";\n break;\n case \"end of road\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"À la fin de la route, prendre\";\n break;\n case \"use lane\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Utiliser la file\";\n break;\n case \"continue\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Continuer\";\n break;\n case \"roundabout\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Au rond-point\";\n break;\n case \"rotary\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Au rond-point\";\n break;\n case \"roundabout turn\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Au rond point, tourner\";\n break;\n case \"notification\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"\";\n break;\n default:\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"?\" + step.instruction.type + \"?\";\n break;\n }\n\n if (step.instruction.modifier) {\n switch (step.instruction.modifier) {\n case \"uturn\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction = \"Faire demi-tour\";\n break;\n case \"sharp right\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" complètement à droite\";\n break;\n case \"right\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" à droite\";\n break;\n case \"slight right\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" légèrement à droite\";\n break;\n case \"straight\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction = \"Continuer tout droit\";\n break;\n case \"slight left\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" lègèrement à gauche\";\n break;\n case \"left\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" à gauche\";\n break;\n case \"sharp left\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" complètement à gauche\";\n break;\n default:\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" ?\" + step.instruction.modifier + \"?\";\n break;\n }\n }\n\n if (step.instruction.exit) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += `${step.instruction.exit}e sortie`;\n }\n\n if (step.attributes.name) {\n if (step.attributes.name.nom_1_droite || step.attributes.name.toponyme) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" sur\";\n }\n\n if (step.attributes.name.nom_1_droite) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += ` ${step.attributes.name.nom_1_droite}`;\n }\n\n if (step.attributes.name.toponyme) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += ` ${step.attributes.name.toponyme}`;\n }\n }\n });\n }\n }\n\n if (!data) {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE\", \"json\")));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION_2\")));\n return;\n }\n }\n } else {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default RouteResponseFactory;\n","\n/**\n * Single Route Instruction object.\n *\n * @property {String} code - Instruction code :\n *\n * - \"F\" : Straight forward\n * - \"B\" : U-turn\n * - \"L\" : turn left\n * - \"R\" : turn right\n * - \"BL\" : turn left strongly\n * - \"BR\" : turn right strongly\n * - \"FL\" : turn lightly to the left\n * - \"FR\" : turn lightly to the right\n * - \"round_about_entry\" : round about entry\n * - \"round_about_exit\" : round about exit\n *\n * @property {String} instruction - Instruction text : translated code + street name\n * @property {Object} geometry - Geometry (expressed in [GeoJSON]{@link http://geojson.org/}) of the street.\n * @property {Float} distance - Length of the instruction. Expressed in km or m, depending on distanceUnit parameter.\n * @property {Float} duration - Instruction duration in seconds.\n *\n * @namespace\n * @alias Gp.Services.Route.RouteInstruction\n */\nfunction RouteInstruction () {\n if (!(this instanceof RouteInstruction)) {\n throw new TypeError(\"RouteInstruction constructor cannot be called as a function.\");\n }\n\n this.duration = null;\n\n this.distance = null;\n\n this.code = null;\n\n this.instruction = null;\n\n this.geometry = null; // FIXME can be null if option 'geometryInInstructions' is false !\n}\n\nRouteInstruction.prototype = {\n\n constructor : RouteInstruction\n\n};\n\nexport default RouteInstruction;\n","/**\n * Response object for {@link module:Services~route Gp.Services.route ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Gp.BBox} bbox - Bounding Box of the route. Given when provideBBox parameter is used in function call.\n * @property {Object} routeGeometry - Geometry (expressed in [GeoJSON]{@link http://geojson.org/}) of the route.\n * @property {Array.} routeInstructions - Instructions of the route.\n * @property {String} totalDistance - Length of the route. If distanceUnit parameter was set to \"km\" (default), totalDistance is a string containing the total distance expressed in kilometers, followed by \" Km\" (e.g. : \"19.6 Km\"). If distanceUnit parameter was set to \"m\", totalDistance is a string containing the total distance expressed in meters (e.g. : \"19599.14\").\n * @property {Float} totalTime - Route duration in seconds.\n *\n * @namespace\n * @alias Gp.Services.RouteResponse\n */\nfunction RouteResponse () {\n if (!(this instanceof RouteResponse)) {\n throw new TypeError(\"RouteResponse constructor cannot be called as a function.\");\n }\n\n this.totalTime = null;\n\n this.totalDistance = null;\n\n this.bbox = {\n left : null,\n right : null,\n top : null,\n bottom : null\n };\n\n this.routeGeometry = null; // FIXME can be null if option 'geometryInInstructions' is true !\n\n this.routeInstructions = [];\n}\n\nRouteResponse.prototype = {\n\n constructor : RouteResponse\n\n};\n\nexport default RouteResponse;\n","\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport RouteRequestFactory from \"./Request/RouteRequestFactory\";\nimport RouteResponseFactory from \"./Response/RouteResponseFactory\";\n\n/**\n * @classdesc\n * Appel du service d'itinéraire du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n *\n * @alias Gp.Services.Route\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String} options.resource - La ressource utilisée pour le calcul. Ce paramètre devrait être obligatoire car il l'est dans l'appel au service. Mais il ne l'est pas pour des raisons de rétrocompatibilité.\n *\n * @param {String} options.outputFormat - Le format de la réponse du service itineraire : 'json' uniquement et par défaut.\n *\n * @param {String} [options.routePreference = \"fastest\"] - Mode de calcul à utiliser :\n * - le plus rapide « fastest »\n * - le plus court « shortest »\n * Par défaut : « fastest ».\n *\n * @param {Object} options.startPoint - Point de départ du calcul. Coordonnées exprimées en longitudes, latitudes (EPSG:4326)\n * @param {Float} options.startPoint.x - Abcisse du point de départ du calcul d'itinéraire.\n * @param {Float} options.startPoint.y - Ordonnée du point de départ du calcul d'itinéraire.\n *\n * @param {Object} options.endPoint - Point d'arrivée du calcul. Coordonnées exprimées en longitudes, latitudes (EPSG:4326)\n * @param {Float} options.endPoint.x - Abcisse du point d'arrivée du calcul d'itinéraire.\n * @param {Float} options.endPoint.y - Ordonnée du point d'arrivée du calcul d'itinéraire.\n *\n * @param {Object[]} [options.viaPoints] - Liste de point ({x:Float,y:Float}) intermédaires que l'itinéraire doit emprunter dans l'ordre du tableau.\n * Coordonnées exprimées en longitudes, latitudes (EPSG:4326) :{x:float, y:float}\n *\n * @param {String} [options.graph = \"voiture\"] - Type de graphe utilisé : \"Voiture\" ou \"Pieton\".\n * Détermine le profil de vitesses utilisé pour le calcul ainsi que les tronçons autorisés ou non.\n * Par défaut, c'est la valeur \"Voiture\" qui sera utilisée.\n *\n * @param {String[]} [options.exclusions] - DEPRECATED: Critères d'exclusions à appliquer pour le calcul. (correspond au paramètre \"avoidFeature\" d'OpenLS)\n * On précise ici le type de tronçons que l'on ne veut pas que l'itinéraire emprunte\n * (valeurs possibles : « toll » (éviter les péages), « bridge », « tunnel »).\n * Ce paramètre est conservé pour une rétrocompatibilité de l'api. Le nouveau paramètre à utiliser est options.constraints\n *\n * @param {Object[]} [options.constraints] - Critères de contraintes à appliquer sur un itinéraire. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities.\n * @param {String} [options.constraints.constraintType] - Type de la contrainte. Généralement \"banned\".\n * @param {String} [options.constraints.key] - Clé de la contrainte. Généralement \"wayType\".\n * @param {String} [options.constraints.operator] - Opérateur de la contrainte. Généralement \"=\".\n * @param {String} [options.constraints.value] - Valeur de la contrainte. Généralement \"autoroute\".\n *\n * @param {Boolean} [options.geometryInInstructions = false] - Indique si la géométrie de l'itinéraire doit être reprise morceau par morceau dans les instructions.\n * (correspond au paramètre \"provideGeometry\" d'OpenLS) Par défaut : false.\n *\n * @param {Boolean} [options.provideBbox = true] - Indique si les instructions doivent être localisées par une bbox dans la réponse.\n * Par défaut : true.\n *\n * @param {String} [options.distanceUnit = \"m\"] - Indique si la distance doit être exprimée en km ou m dans la réponse.\n * Par défaut : m.\n * @param {String} [options.timeUnit = \"second\"] - Indique si la durée doit être exprimée en seconde, minute ou heure dans la réponse. Il peut-être formatté hh:mm::ss avec la valeur standard.\n * Les valeurs possibles sont \"standard\", \"second\", \"minute\" ou \"hour\".\n * Par défaut : \"standard\".\n *\n * @param {String} [options.srs] - Système de coordonnées dans lequel les paramètres géographiques en entrée et la réponse du service sont exprimés.\n * Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 'EPSG:4326'.\n *\n * @param {String[]} [options.waysAttributes] - Nom des attributs des voies. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities.\n *\n * @example\n * var options = {\n * // options communes aux services\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'XHR',\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * resource : 'bdtopo'\n * outputFormat : 'json',\n * startPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * endPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * provideBbox : true,\n * exclusions : [\"Bridge\", \"Tunnel\", \"Toll\"],\n * distanceUnit : \"km\",\n * graph : \"Voiture\",\n * geometryInInstructions : true,\n * routePreference : \"fastest\"\n * };\n *\n */\nfunction Route (options) {\n if (!(this instanceof Route)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"Route\"));\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"Route\";\n\n // appel du constructeur par heritage\n CommonService.apply(this, arguments);\n\n this.logger = Logger.getLogger(\"Gp.Services.Route\");\n this.logger.trace(\"[Constructeur Route (options)]\");\n\n if (!options.startPoint) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"startPoint\"));\n }\n\n // on lance une exception afin d'eviter au service de le faire...\n if (options.startPoint.x === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"startPoint.x\"));\n }\n\n if (options.startPoint.y === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"startPoint.y\"));\n }\n\n if (!options.endPoint) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"endPoint\"));\n }\n\n // on lance une exception afin d'eviter au service de le faire...\n if (options.endPoint.x === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"endPoint.x\"));\n }\n\n if (options.endPoint.y === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"endPoint.y\"));\n }\n\n // options par defaut\n\n // on passe l'option outputFormat en minuscules afin d'éviter des exceptions.\n if (options.outputFormat && options.outputFormat !== \"json\") {\n this.logger.warn(\"options.outputFormat could only be json\");\n }\n this.options.outputFormat = \"json\";\n\n this.options.resource = options.resource || \"bdtopo-osrm\";\n this.options.startPoint = options.startPoint;\n this.options.endPoint = options.endPoint;\n this.options.viaPoints = options.viaPoints || [];\n this.options.routePreference = options.routePreference || \"fastest\";\n /** Gestion des anciennes valeurs de graph */\n if (options.graph) {\n if (options.graph === \"Voiture\") {\n this.options.graph = \"car\";\n }\n if (options.graph === \"Pieton\") {\n this.options.graph = \"pedestrian\";\n }\n } else {\n this.options.graph = \"car\";\n }\n this.options.constraints = [];\n if (options.constraints) {\n if (Array.isArray(options.constraints)) {\n for (var k = 0; k < options.constraints.length; k++) {\n this.options.constraints.push(options.constraints[k]);\n }\n } else {\n throw new Error(_.getMessage(\"PARAM_TYPE\", \"constraints\"));\n }\n }\n\n /** Gestion de l'ancien paramètre exclusion */\n var constraintTunnel = {};\n var constraintPont = {};\n var constraintAutoroute = {};\n if (options.exclusions) {\n if (options.exclusions.length !== 0) {\n this.logger.warn(\"options.exclusions is DEPRECATED !!\");\n for (var c = 0; c < options.exclusions.length; c++) {\n if (typeof options.exclusions[c] === \"string\") {\n options.exclusions[c] = options.exclusions[c].toLowerCase();\n } else {\n // on ne crée pas une erreur pour rétro-compatibilité avec les anciennes versions\n continue;\n }\n if (options.exclusions[c] === \"toll\") {\n constraintAutoroute.constraintType = \"banned\";\n constraintAutoroute.key = \"wayType\";\n constraintAutoroute.operator = \"=\";\n constraintAutoroute.value = \"autoroute\";\n this.options.constraints.push(constraintAutoroute);\n }\n if (options.exclusions[c] === \"tunnel\") {\n constraintTunnel.constraintType = \"banned\";\n constraintTunnel.key = \"wayType\";\n constraintTunnel.operator = \"=\";\n constraintTunnel.value = \"tunnel\";\n this.options.constraints.push(constraintTunnel);\n }\n if (options.exclusions[c] === \"bridge\") {\n constraintPont.constraintType = \"banned\";\n constraintPont.key = \"wayType\";\n constraintPont.operator = \"=\";\n constraintPont.value = \"pont\";\n this.options.constraints.push(constraintPont);\n }\n }\n }\n }\n\n this.options.geometryInInstructions = options.geometryInInstructions || false;\n this.options.provideBbox = options.provideBbox || true;\n this.options.distanceUnit = options.distanceUnit || \"m\";\n this.options.timeUnit = options.timeUnit || \"second\";\n this.options.expectedStartTime = null; // FIXME not yet implemented !\n this.options.srs = options.srs || \"EPSG:4326\";\n this.options.waysAttributes = options.waysAttributes || [];\n\n // gestion de l'url du service par defaut\n // si l'url n'est pas renseignée, il faut utiliser les urls par defaut\n if (!this.options.serverUrl) {\n var UrlByDefault = DefaultUrlService.Route.newUrl();\n\n if (!UrlByDefault) {\n throw new Error(\"Url by default not found !\");\n }\n this.options.serverUrl = UrlByDefault;\n this.logger.trace(\"Serveur URL par defaut : \" + this.options.serverUrl);\n }\n}\n\n/**\n * @lends module:Route#\n */\nRoute.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nRoute.prototype.constructor = Route;\n\n/**\n * (overwrite)\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nRoute.prototype.buildRequest = function (error, success) {\n var options = {\n // spécifique au service\n resource : this.options.resource,\n startPoint : this.options.startPoint,\n endPoint : this.options.endPoint,\n viaPoints : this.options.viaPoints,\n provideBbox : this.options.provideBbox,\n constraints : this.options.constraints,\n distanceUnit : this.options.distanceUnit,\n timeUnit : this.options.timeUnit,\n graph : this.options.graph,\n geometryInInstructions : this.options.geometryInInstructions,\n routePreference : this.options.routePreference,\n srs : this.options.srs,\n waysAttributes : this.options.waysAttributes\n };\n\n this.request = RouteRequestFactory.build(options);\n\n // on teste si la requete a bien été construite !\n if (!this.request) {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_REQUEST_BUILD\")));\n } else {\n success.call(this, this.request);\n }\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nRoute.prototype.analyzeResponse = function (error, success) {\n // INFO\n // Factory pour masquer la complexité du retour du service\n\n if (this.response) {\n var options = {\n distanceUnit : this.options.distanceUnit,\n timeUnit : this.options.timeUnit,\n response : this.response,\n outputFormat : this.options.outputFormat, // utile pour parser la string en mode XHR : JSON ou XML !\n rawResponse : this.options.rawResponse,\n onError : error,\n onSuccess : success,\n scope : this,\n geometryInInstructions : this.options.geometryInInstructions\n };\n\n RouteResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default Route;\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"point|circle|bbox\" }] */\n\n/**\n* Geoportal web services invocation namespace.\n*\n* @module Services\n* @alias Gp.Services\n*/\nimport Config from \"./Config/Config\";\nimport Alti from \"./Alti/Alti\";\nimport Geocode from \"./Geocode/Geocode\";\nimport ReverseGeocode from \"./Geocode/ReverseGeocode\";\nimport AutoComplete from \"./AutoComplete/AutoComplete\";\nimport Route from \"./Route/Route\";\nimport ProcessIsoCurve from \"./ProcessIsoCurve/ProcessIsoCurve\";\n\nvar Services = {\n /**\n * Access to Geoportal resources metadata availables with one ore several keys\n *\n * @method getConfig\n * @param {Object} options - Options for function call.\n * @param {String} [options.apiKey] - Access key(s) (\",\" as separator, no spaces) to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}\n * @param {String} [options.customConfigFile] - path to a local config file. Overload the apiKey parameter\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.GetConfigResponse} object as a parameter except if \"rawResponse\" parameter is set to true : a String will be returned.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n */\n getConfig : function (options) {\n var configService = new Config(options);\n configService.call();\n },\n /**\n * Getting elevations in or along of one or several points on french territories using the [elevation services of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/alti.html}.
    \n * Two use cases are availables :
    \n * 1. getting elevations of the given points : don't use the options.sampling parameter ;
    \n * 2. getting a regular set of elevations along the given points : use the options.sampling parameter.\n *\n * @method getAltitude\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {Array.} options.positions - Array of positions ({lon:float, lat:float}) expressed in CRS:84 coordinates system, where to get elevations. 50 positions maximum may be given. 2 positions minimum are required if you use the options.sampling parameter.\n * @param {Number} [options.sampling] - Number of points to use (between 2 and 5000) in order to compute an elevation path. The points given with the options.positions parameter are used to fix the planimetric path along which the elevations will be computed.
    \n * If not used, only elevations of these positions will be returned.\n * @param {Boolean} [options.zonly=false] - Set this parameter to true if you only want to have elevations returned without corresponding coordinates.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.AltiResponse} object as a parameter, except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n * @param {String} [options.api='REST'] - What API to use for interacting with underlying web service : 'REST'. Only use if you know what you are doing.\n * @param {String} [options.outputFormat='xml'] - Output format for underlying web service response : 'xml' or 'json'. Only use if you know what you are doing.\n */\n getAltitude : function (options) {\n var altiService = new Alti(options);\n altiService.call();\n },\n /**\n * Getting positon of a geographic identifier (places names, address, cadastral parcel, other...) using the [geocoding web service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/geocodage.html}.\n *\n * @example\n * Gp.Services.geocode ({\n * apiKey : \"carte\",\n * location : \"73 avenue de Paris, Saint-Mandé\",\n * // traitement des resultats\n * onSuccess : function (result) {\n * console.log(\"found (x:\"+result.position.x+\", y:\"+result.position.y+\")\") ;\n * }\n * }) ;\n *\n *\n * @method geocode\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} [options.index=\"StreetAddress\"] - Geographical identifier type to search. Values currently availables are : \"PositionOfInterest\" for place names, \"StreetAddress\" for address search, \"CadastralParcel\" for Cadastral parcels search, \"location\" for a multi-index search on \"StreetAddress\" and \"PositionOfInterest\". Default is \"StreetAddress\".\n * @param {String} options.query - Geographic identifier to locate.\n * @param {Object} [options.filters] - Additional filters to apply to search. The following properties may be given.\n * @param {String} [options.filters.[prop]] - Additionnal properties to filter search. Properties depends on options.index, and values type should be \"String\".\n *

    \n * Properties availables for address search :
    \n * \"postalCode\", \"inseeCode\" and \"city\".\n *

    \n * Properties availables for place names search :
    \n * \"postalCode\", \"inseeCode\" and \"type\".\n *

    \n * Properties availables for cadastral parcels search :
    \n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n * @param {Number} [options.maximumResponses=20] - Maximum number of responses. Default underlying service value applies (20) if not provided.\n * @param {Boolean} [options.returnTrueGeometry=false] - Set this parameter to true if you wish to have the true geometrie returned.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.GeocodeResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=http (s)://data.geopf.fr/geocodage/search] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n geocode : function (options) {\n var geocodeService = new Geocode(options);\n geocodeService.call();\n },\n /**\n * Retrieving geographical identifiers (place names, address, cadastral parcels, ...) near a given position, using the [reverse geocoding web service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/geocodage-inverse.html}.\n *\n * @method reverseGeocode\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} [options.index=\"StreetAddress\"] - Geographical identifier type to search. Values currently availables are : \"PositionOfInterest\" for place names, \"StreetAddress\" for address search, \"CadastralParcel\" for Cadastral parcels search, \"location\" for a multi-index search on \"StreetAddress\" and \"PositionOfInterest\". Default is \"StreetAddress\".\n * @param {Object} options.position - Reference position where to search geographical identifiers.\n * @param {Float} options.position.lon - Longitude\n * @param {Float} options.position.lat - Latitude\n * @param {Object} [options.filters] - Additional filters to apply to search. The following properties may be given.\n * @param {String} [options.filters.[prop]] - Additionnal properties to filter search. Properties depends on options.index, and values type should be \"String\".\n *

    \n * Properties availables for address search :
    \n * \"postalCode\", \"inseeCode\" and \"city\".\n *

    \n * Properties availables for place names search :
    \n * \"postalCode\", \"inseeCode\" and \"type\".\n *

    \n * Properties availables for cadastral parcels search :
    \n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n * @param {Object} [options.searchGeometry] - Location where to perform the search.\n * @param {String} options.searchGeometry.type - Geometry type (Point|Circle|Linestring|Polygon)\n * @param {Array.|Array.Array.} options.searchGeometry.coordinates - Coordinates\n * @param {Float} [options.searchGeometry.radius] - Radius (only for type 'Circle')\n * @param {Number} [options.maximumResponses=20] - Maximum number of responses. Default underlying service value applies (20) if not provided.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.GeocodeResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=https://data.geopf.fr/geocodage/reverse] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n reverseGeocode : function (options) {\n var reverseGeocodeService = new ReverseGeocode(options);\n reverseGeocodeService.call();\n },\n /**\n * Getting suggestions of probable places names or address based on uncomplete texts, using the [autocompletion service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/autocompletion.html}\n *\n * @method autoComplete\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} options.text - Text input to complete.\n * @param {Array.} [options.filterOptions.type = \"StreetAddress\"] - Suggestion types to provide : address (\"StreetAddress\") and/or place name (\"PositionOfInterest\").\n * @param {Array.} [options.filterOptions.territory] - Places where to limit the search of suggestions : \"METROPOLE\" (Corsica and metropolitan France), \"DOMTOM\" (French overseas departments and territories), or an INSEE code of a department. No limitation by default. For instance : ['METROPOLE', '31']\n * @param {Number} [options.maximumResponses = 10] - Maximum number of responses.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.AutoCompleteResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=https://data.geopf.fr/geocodage/completion] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n autoComplete : function (options) {\n var autoCompleteService = new AutoComplete(options);\n autoCompleteService.call();\n },\n /**\n * Getting a route from one point to another using the [route service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/itineraires.html}.\n *\n * @method route\n * @param {Object} options - Options for function call.\n * @param {String} options.resource - Resource used to compute the route. Available values are in the GetCapabilities.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} [options.routePreference = \"fastest\"] - Indicates the way to compute the route : \"fastest\" (time optimisation) or \"shortest\" (distance optimisation). Available values are in the GetCapabilities.\n * @param {Gp.Point} options.startPoint - Start point of the route. Expressed in CRS:84 coordinates system (startPoint.x corresponds to longitude, startPoint.y corresponds to latitude). Available bbox are in the GetCapabilities.\n * @param {Gp.Point} options.endPoint - End point of the route. Expressed in CRS:84 coordinates system (endPoint.x corresponds to longitude, endPoint.y corresponds to latitude). Available bbox are in the GetCapabilities.\n * @param {Array.} [options.viaPoints] - Ordered via Points of the route. Expressed in CRS:84 coordinates system (viaPoints[i].x corresponds to longitude, viaPoints[i].y corresponds to latitude). Available bbox are in the GetCapabilities.\n * @param {String} [options.graph = \"Voiture\"] - User profile to use to compute the route : \"Voiture\" (using a vehicule) or \"Pieton\" (pedestrian). Has an influence on the kind of roads the route may use and the average speed. Available bbox are in the GetCapabilities.\n * @param {Array.} [options.exclusions] - DEPRECATED: use options.constraints. Indicates if route has to avoid some features (\"toll\", \"bridge\" or \"tunnel\").\n * @param {Boolean} [options.geometryInInstructions = false] - Indicates if route geometry has to be also returned with route instructions.\n * @param {Boolean} [options.provideBoundingBox = true] - Indicates if route instructions has to be localised with a BBOX in the response.\n * @param {String} [options.distanceUnit = \"m\"] - The unit used to provide distances in the response (\"meter\" or \"kilometer\").\n * @param {String} [options.timeUnit = \"second\"] - The unit used to provide duration in the response (\"standard\", \"second\", \"minute\", \"hour\").\n * @param {Array.} [options.waysAttributes] - Way Attributes to add in the response. Available values are in the GetCapabilities.\n * @param {Array.} [options.constraints] - Constraints used ({'constraintType':'banned','key':'ways_type','operator':'=','value':'autoroute'}). Available values are in the GetCapabilities.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.RouteResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.outputFormat='json'] - Output format (\"json\" or \"xml\") to use for underlying webService. Only use if you know what you are doing.\n * @param {String} [options.serverUrl=https://data.geopf.fr/navigation/itineraire] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n route : function (options) {\n var routeService = new Route(options);\n routeService.call();\n },\n /**\n * Computing a set of places (curve) reachable from a given point (or from where to start to reach a given point) within a time or distance constraint using the [isochrone service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/isochrones.html}.\n *\n * @method isoCurve\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} options.resource - Resource used to compute the route. Available values are in the GetCapabilities.\n * @param {Gp.Point} options.position - Start or Arrival (options.reverse===true) Point for the computing. Expressed in CRS:84 coordinates system (position.x corresponds to longitude, position.y corresponds to latitude).\n * @param {String} [options.graph = \"Voiture\"] - User profile to use to compute the isoCurve : \"Voiture\" (using a vehicule) or \"Pieton\" (pedestrian). Has an influence on the kind of roads to use and the average speed. Available values are in the GetCapabilities.\n * @param {Array.} [options.exclusions] - DEPRECATED: use options.constraints. Indicates if route has to avoid some features (\"toll\", \"bridge\" or \"tunnel\").\n * @param {Array.} [options.constraints] - Constraints used ({'constraintType':'banned','key':'ways_type','operator':'=','value':'autoroute'}). Available values are in the GetCapabilities.\n * @param {String} [options.method = \"time\"] - Computing method to use : \"time\" (using a duration as a constraint) or \"distance\" (using a distance as a constraint). Available values are in the GetCapabilities.\n * @param {Float} options.time - Maximum duration (expressed in seconds) to use when options.method is set to \"time\".\n * @param {Float} options.distance - Maximum distance (expressed in meters) to use when options.method is set to \"distance\".\n * @param {Boolean} [options.reverse = false] - Set this parameter to true if you want options.position to be the destination (instead of departure) for the computing.\n * @param {String} [options.distanceUnit = \"km\"] - The unit used to provide distances in the response (\"m\" or \"km\").\n * @param {String} [options.timeUnit = \"second\"] - The unit used to provide duration in the response (\"standard\", \"second\", \"minute\", \"hour\").\n * @param {Boolean} [options.smoothing = false] - DEPRECATED: Set this parameter to true if you want the resulting geometry to be smoothed.\n * @param {Boolean} [options.holes = false] - DEPRECATED: Set this parameter to true if you want the resulting geometry (polygon) to have holes if pertinent.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.IsoCurveResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.outputFormat='json'] - Output format (\"json\") to use for underlying webService. Only use if you know what you are doing.\n * @param {String} [options.serverUrl=https://data.geopf.fr/navigation/isochrone] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n isoCurve : function (options) {\n var processIsoCurveService = new ProcessIsoCurve(options);\n processIsoCurveService.call();\n }\n};\n\n/**\n * Point object.\n *\n * @namespace\n * @alias Gp.Point\n *\n * @property {Float} x - Point abscissa\n * @property {Float} y - Point ordinate\n */\nvar point = {};\n\n/**\n * Circle object.\n *\n * @namespace\n * @alias Gp.Circle\n *\n * @property {Float} x - Circle center abscissa.\n * @property {Float} y - Circle center ordinate.\n * @property {Float} radius - Circle radius.\n */\nvar circle = {};\n\n/**\n * Bounding box object, expressed with four coordinates.\n *\n * @namespace\n * @alias Gp.BBox\n *\n * @property {Float} left - minimum abscissa\n * @property {Float} right - maximum abscissa\n * @property {Float} bottom - minimum ordinate\n * @property {Float} top - maximum ordinate\n */\nvar bbox = {};\n\nexport default Services;\n","/**\n * Classe utilitaire\n *\n * @module Helper\n * @alias Gp.Helper\n */\nvar Helper = {\n\n /**\n * concatenation des parametres key/value dans les urls\n *\n * @method normalyzeParameters\n * @static\n * @param {Object} params - tableau de clef/valeur\n *\n * @example\n * Gp.Utils.Helper.normalyzeParameters ({\n * key1:value1,\n * key2:value2,\n * key3:value3\n * });\n * // out : \"key1=value1&key2=value2&key3=value3\"\n *\n * @returns {String} retourne les paramètres concaténés\n */\n normalyzeParameters : function (params) {\n var myParams = null;\n\n if (params) {\n var tabParams = [];\n for (var key in params) {\n if (params.hasOwnProperty(key)) {\n var value = params[key];\n if (!value) {\n value = \"\";\n }\n tabParams.push(key + \"=\" + value);\n }\n }\n\n myParams = tabParams.join(\"&\");\n }\n\n return myParams;\n },\n\n /**\n * Concaténation et encodage des urls.\n *\n * @method normalyzeUrl\n * @static\n * @param {String} url - url\n * @param {Object|String} params - tableau de clef/valeur ou string\n * @param {Boolean} encode - true|false, false par defaut\n *\n * @example\n * Gp.Utils.Helper.normalyzeUrl (url, {\n * key1:value1,\n * key2=:value2,\n * key3:value3\n * });\n * // out : \"url?key1=value1&key2=value2&key3=value3\"\n *\n * @returns {String} retourne une url normalisée\n */\n normalyzeUrl : function (url, params, encode) {\n var myUrl = url;\n\n if (url) {\n if (url.split(\"?\").length - 1 >= 2) {\n // S'il y a plusieurs \"?\" dans l'URL, on garde le premier et on remplace les autres par des &\n var firstOccuranceIndex = url.search(/\\?/) + 1;\n myUrl = url.substring(0, firstOccuranceIndex) + url.slice(firstOccuranceIndex).replace(/\\?/g, \"&\");\n }\n\n var k = url.indexOf(\"?\");\n if (k === -1) { // pas de ? et KVP\n myUrl += \"?\";\n }\n\n if (k !== -1 && k !== url.length - 1) { // KVP\n myUrl += \"&\";\n }\n }\n\n if (params) {\n if (typeof params === \"string\") {\n params = params.replace(\"?\", \"\");\n myUrl += params;\n } else {\n myUrl += this.normalyzeParameters(params);\n }\n }\n\n if (encode) {\n // FIXME bonne idée ?\n myUrl = encodeURIComponent(myUrl);\n }\n\n return myUrl;\n },\n\n /**\n * Indentation d'une chaine\n *\n * @method indent\n * @static\n * @param {Number} n - nombre de tabulation\n * @param {String} msg - chaine\n *\n * @example\n * Gp.Utils.Helper.indent (2, \"message à indenter\")\n * // out\n * // ........message à indenter\n *\n * @returns {String} retourne une chaine indentée\n */\n indent : function (n, msg) {\n var num = n || 0;\n return new Array(num + 1).join(\"\\t\") + msg;\n }\n};\n\nexport default Helper;\n","import * as Log from \"loglevel\";\n\nvar LoggerByDefault = {\n /**\n * logger statique\n *\n * @static\n * @param {String} name - nom du logger\n * @returns {Object} retourne un logger\n */\n getLogger : function (name) {\n // Substitute global constants configured at compile time\n // cf. webpack.config.js\n // on définit process si non défini dans l'environnement\n // eslint-disable-next-line no-use-before-define\n if (typeof process === \"undefined\") {\n var process = {};\n process.env = {\n VERBOSE : false\n };\n }\n (process.env.VERBOSE) ? Log.enableAll() : Log.disableAll();\n var logname = name || \"default\";\n return Log.getLogger(logname);\n }\n};\n\nexport default LoggerByDefault;\n","/**\n * Classe de gestion des erreurs qui permer d'associer un message d'erreur à l'exception lancée.\n *\n * @example\n * MessagesResources.getMessage(\"ERROR_PARAM_MISSING\", \"x\", \"y\", \"z\")));\n * // --> output : Parameter(s) 'x - y - z' missing\n *\n * @module MessagesResources\n * @alias Gp.Utils.MessagesResources\n * @private\n */\nvar MessagesResources = {\n\n // Paramètres\n PARAM_MISSING : \"Parameter(s) '%var%' missing\",\n PARAM_EMPTY : \"Parameter(s) '%var%' empty\",\n PARAM_TYPE : \"Wrong type(s) for parameter(s) '%var%'\",\n PARAM_FORMAT : \"Parameter(s) '%var%' not correctly formatted\",\n PARAM_NOT_SUPPORT : \"Value(s) for parameter(s) '%var%' not supported\",\n PARAM_NOT_SUPPORT_NODEJS : \"Value(s) for parameter(s) '%var%' not supported to NodeJS\",\n PARAM_UNKNOWN : \"Value(s) for parameter(s) '%var%' unknown\",\n\n // Services\n // Requête\n SERVICE_REQUEST_BUILD : \"An error occurred during the request building of the service\",\n SERVICE_REQUEST_EMPTY : \"The request sent to the service is empty\",\n\n // Réponse\n SERVICE_RESPONSE_EXCEPTION : \"The service returned an exception : '%var%'\",\n SERVICE_RESPONSE_EXCEPTION_2 : \"The service returned an exception\",\n SERVICE_RESPONSE_ANALYSE : \"An error occurred while parsing the response '%var%' of the service\",\n SERVICE_RESPONSE_ANALYSE_2 : \"An unknown error occurred while parsing the response\",\n SERVICE_RESPONSE_EMPTY : \"The response of the service is empty\",\n SERVICE_RESPONSE_EMPTY_2 : \"The response from the service could not be analyzed or is empty\",\n SERVICE_RESPONSE_FORMAT : \"The format of the service response is not supported (handled format(s) : '%var%')\",\n SERVICE_RESPONSE_FORMAT_2 : \"The format of the service response is not supported\",\n SERVICE_RESPONSE_FORMAT_3 : \"No suggestion matching the search\",\n\n // Classes\n CLASS_CONSTRUCTOR : \"'%var%' constructor cannot be called as a function.\",\n\n /**\n * Fonction qui va retourner le message d'erreur associé à la clé donnée\n *\n * @method getMessage\n * @param {String} clef - Clef de l'erreur (ex : ERROR_PARAM)\n * @param {String[]} parametres - Paramètres/variables concernés par le message d'erreur associé à la clef donnée\n * @return {String} message - String contenant le message de l'exception\n */\n getMessage : function (clef, parametres) {\n // param de la fonction uniquement pour la documentation...\n\n if (Object.keys(arguments).length === 0) {\n return \"Message indefined !\";\n }\n\n var params = Array.prototype.slice.call(arguments);\n var key = params.shift();\n var args = params;\n\n var message = this[key];\n\n try {\n if (Array.isArray(args) && args.length > 0) {\n message = message.replace(\"%var%\", args.join(\" - \"));\n } else {\n message = message.replace(\"%var%\", \"%var% (not specified)\");\n }\n } catch (e) {\n // error de string.replace()\n\n }\n\n return message;\n }\n};\n\nexport default MessagesResources;\n","/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(definition);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = definition();\n } else {\n root.log = definition();\n }\n}(this, function () {\n \"use strict\";\n\n // Slightly dubious tricks to cut down minimized file size\n var noop = function() {};\n var undefinedType = \"undefined\";\n var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (\n /Trident\\/|MSIE /.test(window.navigator.userAgent)\n );\n\n var logMethods = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n ];\n\n var _loggersByName = {};\n var defaultLogger = null;\n\n // Cross-browser bind equivalent that works at least back to IE6\n function bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function() {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n }\n\n // Trace() doesn't print the message in IE, so for that case we need to wrap it\n function traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n // In old IE, native console methods themselves don't have apply().\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace) console.trace();\n }\n\n // Build the best logging method possible for this env\n // Wherever possible we want to bind, not wrap, to preserve stack traces\n function realMethod(methodName) {\n if (methodName === 'debug') {\n methodName = 'log';\n }\n\n if (typeof console === undefinedType) {\n return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n } else if (methodName === 'trace' && isIE) {\n return traceForIE;\n } else if (console[methodName] !== undefined) {\n return bindMethod(console, methodName);\n } else if (console.log !== undefined) {\n return bindMethod(console, 'log');\n } else {\n return noop;\n }\n }\n\n // These private functions always need `this` to be set properly\n\n function replaceLoggingMethods() {\n /*jshint validthis:true */\n var level = this.getLevel();\n\n // Replace the actual methods.\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = (i < level) ?\n noop :\n this.methodFactory(methodName, level, this.name);\n }\n\n // Define log.log as an alias for log.debug\n this.log = this.debug;\n\n // Return any important warnings.\n if (typeof console === undefinedType && level < this.levels.SILENT) {\n return \"No console available for logging\";\n }\n }\n\n // In old IE versions, the console isn't present until you first open it.\n // We build realMethod() replacements here that regenerate logging methods\n function enableLoggingWhenConsoleArrives(methodName) {\n return function () {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this);\n this[methodName].apply(this, arguments);\n }\n };\n }\n\n // By default, we use closely bound real methods wherever possible, and\n // otherwise we wait for a console to appear, and then try again.\n function defaultMethodFactory(methodName, _level, _loggerName) {\n /*jshint validthis:true */\n return realMethod(methodName) ||\n enableLoggingWhenConsoleArrives.apply(this, arguments);\n }\n\n function Logger(name, factory) {\n // Private instance variables.\n var self = this;\n /**\n * The level inherited from a parent logger (or a global default). We\n * cache this here rather than delegating to the parent so that it stays\n * in sync with the actual logging methods that we have installed (the\n * parent could change levels but we might not have rebuilt the loggers\n * in this child yet).\n * @type {number}\n */\n var inheritedLevel;\n /**\n * The default level for this logger, if any. If set, this overrides\n * `inheritedLevel`.\n * @type {number|null}\n */\n var defaultLevel;\n /**\n * A user-specific level for this logger. If set, this overrides\n * `defaultLevel`.\n * @type {number|null}\n */\n var userLevel;\n\n var storageKey = \"loglevel\";\n if (typeof name === \"string\") {\n storageKey += \":\" + name;\n } else if (typeof name === \"symbol\") {\n storageKey = undefined;\n }\n\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {}\n }\n\n function getPersistedLevel() {\n var storedLevel;\n\n if (typeof window === undefinedType || !storageKey) return;\n\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {}\n\n // Fallback to cookies if local storage gives us nothing\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var cookieName = encodeURIComponent(storageKey);\n var location = cookie.indexOf(cookieName + \"=\");\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(\n cookie.slice(location + cookieName.length + 1)\n )[1];\n }\n } catch (ignore) {}\n }\n\n // If the stored level is not valid, treat it as if nothing was stored.\n if (self.levels[storedLevel] === undefined) {\n storedLevel = undefined;\n }\n\n return storedLevel;\n }\n\n function clearPersistedLevel() {\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage.removeItem(storageKey);\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n } catch (ignore) {}\n }\n\n function normalizeLevel(input) {\n var level = input;\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n return level;\n } else {\n throw new TypeError(\"log.setLevel() called with invalid level: \" + input);\n }\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n if (userLevel != null) {\n return userLevel;\n } else if (defaultLevel != null) {\n return defaultLevel;\n } else {\n return inheritedLevel;\n }\n };\n\n self.setLevel = function (level, persist) {\n userLevel = normalizeLevel(level);\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(userLevel);\n }\n\n // NOTE: in v2, this should call rebuild(), which updates children.\n return replaceLoggingMethods.call(self);\n };\n\n self.setDefaultLevel = function (level) {\n defaultLevel = normalizeLevel(level);\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.resetLevel = function () {\n userLevel = null;\n clearPersistedLevel();\n replaceLoggingMethods.call(self);\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n self.rebuild = function () {\n if (defaultLogger !== self) {\n inheritedLevel = normalizeLevel(defaultLogger.getLevel());\n }\n replaceLoggingMethods.call(self);\n\n if (defaultLogger === self) {\n for (var childName in _loggersByName) {\n _loggersByName[childName].rebuild();\n }\n }\n };\n\n // Initialize all the internal levels.\n inheritedLevel = normalizeLevel(\n defaultLogger ? defaultLogger.getLevel() : \"WARN\"\n );\n var initialLevel = getPersistedLevel();\n if (initialLevel != null) {\n userLevel = normalizeLevel(initialLevel);\n }\n replaceLoggingMethods.call(self);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n defaultLogger = new Logger();\n\n defaultLogger.getLogger = function getLogger(name) {\n if ((typeof name !== \"symbol\" && typeof name !== \"string\") || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name,\n defaultLogger.methodFactory\n );\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = (typeof window !== undefinedType) ? window.log : undefined;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n };\n\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n // ES6 default export, for compatibility\n defaultLogger['default'] = defaultLogger;\n\n return defaultLogger;\n}));\n","\"use strict\";\n\n// ref: https://github.com/tc39/proposal-global\nvar getGlobal = function () {\n\t// the only reliable means to get the global object is\n\t// `Function('return this')()`\n\t// However, this causes CSP violations in Chrome apps.\n\tif (typeof self !== 'undefined') { return self; }\n\tif (typeof window !== 'undefined') { return window; }\n\tif (typeof global !== 'undefined') { return global; }\n\tthrow new Error('unable to locate global object');\n}\n\nvar globalObject = getGlobal();\n\nmodule.exports = exports = globalObject.fetch;\n\n// Needed for TypeScript and Webpack.\nif (globalObject.fetch) {\n\texports.default = globalObject.fetch.bind(globalObject);\n}\n\nexports.Headers = globalObject.Headers;\nexports.Request = globalObject.Request;\nexports.Response = globalObject.Response;\n","module.exports = ol.extent;","module.exports = ol.format.GeoJSON;","module.exports = ol.layer.Tile;","module.exports = ol.layer.Vector;","module.exports = ol.loadingstrategy;","module.exports = ol.proj;","module.exports = ol.source.Vector;","module.exports = ol.tilegrid;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","const __WEBPACK_NAMESPACE_OBJECT__ = ol.control.Control;","var checkDsfr = function () {\n // HACK: check si le styl dsfr est chargé via la variable blue-france-sun-113-625\n var style = getComputedStyle(document.documentElement);\n var color = style.getPropertyValue(\"--blue-france-sun-113-625\");\n if (color === \"\") {\n return false;\n }\n return true;\n};\n\nexport default checkDsfr;\n\n","import Control from \"ol/control/Control\";\nimport checkDsfr from \"./Utils/CheckDsfr\";\n\nvar ControlExtended = class ControlExtended extends Control {\n\n constructor (options) {\n options = options || {};\n super({\n element : options.element,\n target : options.target,\n render : options.render\n });\n // Can the control appear in the ControlList control\n if (options && options.listable) {\n this.listable = true;\n } else {\n this.listable = false;\n }\n // Set the control desctiption\n if (options && options.description) {\n this.description = options.description;\n } else {\n this.description = \"\";\n }\n }\n\n setPosition (pos) {\n if (this.getMap()) {\n var instance = new PositionFactory(this);\n instance.set(pos);\n }\n }\n\n updatePosition (pos) {\n if (this.getMap()) {\n var instance = new PositionFactory(this);\n instance.update(pos);\n }\n }\n\n};\n\nexport default ControlExtended;\n\n/**\n * gestion des anchors\n */\nconst ANCHORS = [\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\"\n];\n\n/**\n * Position\n * @private\n */\nclass PositionFactory {\n\n /**\n * constructor\n * @param {*} caller - ...\n */\n constructor (caller) {\n this.caller = caller;\n this.container = null;\n\n this.#createContainer(\"top-left\");\n this.#createContainer(\"top-right\");\n this.#createContainer(\"bottom-left\");\n this.#createContainer(\"bottom-right\");\n\n return this;\n }\n\n /**\n * ...\n * @param {*} name - ...\n * @returns {Boolean} ...\n */\n #existContainer (name) {\n var div = this.container.children[\"position-container-\" + name];\n if (div) {\n return true;\n }\n return false;\n }\n\n /**\n * ...\n * @param {*} name - ...\n * @private\n */\n #createContainer (name) {\n this.container = this.caller.getMap().getOverlayContainerStopEvent();\n\n if (this.#existContainer(name)) {\n return;\n }\n // INFO\n // positionner les classes position-container-[left|right|top|bottom]\n // ex. { position:relative; height:50px; width:100%; }\n var div = document.createElement(\"div\");\n div.id = \"position-container-\" + name;\n div.className = \"position position-container-\" + name ;\n\n this.container.appendChild(div);\n }\n\n /**\n * ...\n * @param {*} pos - ...\n * @param {*} update - ...\n * @todo fonctionnement à tester !\n */\n #setAnchor (pos, update) {\n var self = this;\n const position = (pos) => {\n var element = self.container.children[\"position-container-\" + pos];\n return element.children.length;\n };\n const sizeW = (pos) => {\n var element = self.container.children[\"position-container-\" + pos];\n var width = element.offsetWidth;\n return width;\n };\n const sizeH = (pos) => {\n var element = self.container.children[\"position-container-\" + pos];\n var height = element.offsetHeight;\n if (update) {\n if (pos.includes(\"top\")) {\n height = 0;\n }\n // on recalcule la position en hauteur\n for (let index = 0; index < element.children.length; index++) {\n const id = element.children[index].id;\n if (id === self.caller.element.id) {\n height = (pos.includes(\"bottom\")) ? height - self.caller.element.offsetHeight : height * (-1);\n break;\n }\n height -= element.children[index].offsetHeight;\n }\n }\n return height;\n };\n const clear = (element) => {\n element.style.top = \"unset\";\n element.style.bottom = \"unset\";\n element.style.left = \"unset\";\n element.style.right = \"unset\";\n };\n\n // on supprime le style de positionnement (top, left...)\n // car on souhaite une nouvelle position\n clear(this.caller.element);\n this.caller.element.style.position = \"unset\"; // div.GPwidget\n\n // on recherche les panneaux (panel) :\n // * panel de formulaire\n // * panel de resultats (?)\n var panels = Array.from(this.caller.element.getElementsByClassName(\"GPpanel\"));\n if (panels.length === 0) {\n return;\n }\n var offset = 0;\n panels.forEach((panel) => {\n // INFO\n // on va eviter de modifier les panneaux de resultats\n // car leurs positions sont souvent relative aux panneaux\n // des formulaires\n if (panel.nodeName.toLowerCase() !== \"dialog\") {\n return;\n }\n clear(panel);\n // on modifie le positionnement du menu (dialog ou div : panel)\n // en fonction du bouton\n // ex. bouton : bottom-left, menu : bottom:0px; left:50px\n switch (pos.toLowerCase()) {\n case \"top-left\":\n if (checkDsfr()) {\n panel.style.top = \"0px\";\n } else {\n panel.style.top = position(pos) ? sizeH(pos) + \"px\" : \"0px\";\n }\n panel.style.left = sizeW(pos) + offset + \"px\";\n break;\n case \"bottom-left\":\n if (checkDsfr()) {\n panel.style.top = \"0px\";\n } else {\n panel.style.bottom = position(pos) ? sizeH(pos) + \"px\" : \"0px\";\n }\n panel.style.left = sizeW(pos) + offset + \"px\";\n break;\n case \"top-right\":\n if (checkDsfr()) {\n panel.style.top = \"0px\";\n } else {\n panel.style.top = position(pos) ? sizeH(pos) + \"px\" : \"0px\";\n }\n panel.style.right = sizeW(pos) + offset + \"px\";\n break;\n case \"bottom-right\":\n if (checkDsfr()) {\n panel.style.top = \"0px\";\n } else {\n panel.style.bottom = position(pos) ? sizeH(pos) + \"px\" : \"0px\";\n }\n panel.style.right = sizeW(pos) + offset + \"px\";\n break;\n default:\n break;\n }\n offset += panel.offsetWidth;\n });\n }\n\n /**\n * ...\n * @param {*} pos - ...\n * @public\n */\n set (pos) {\n if (!ANCHORS.includes(pos.toLowerCase())) {\n return;\n }\n // positionnement de l'element\n this.#setAnchor(pos, false);\n\n if (pos.includes(\"bottom\")) {\n this.container.children[\"position-container-\" + pos].prepend(this.caller.element);\n } else {\n this.container.children[\"position-container-\" + pos].appendChild(this.caller.element);\n }\n }\n\n /**\n * ...\n * @param {*} pos - ...\n * @public\n */\n update (pos) {\n if (!ANCHORS.includes(pos.toLowerCase())) {\n return;\n }\n // positionnement de l'element\n // mais, il faut prendre en compte la position !\n this.#setAnchor(pos, true);\n }\n\n};\n","const exceptions = [\"GPoverviewMap\", \"GPfullScreen\"];\n\nfunction getSameSideOpenedPanel (position, openedPanelID) {\n // on ajoute aux exceptions le panel qui vient d'être ouvert\n var exceptionPanel = [...exceptions, openedPanelID];\n var controlPanels = [];\n if (position && position.includes(\"left\")) {\n var bottomLeft = document.getElementById(\"position-container-bottom-left\");\n var topLeft = document.getElementById(\"position-container-top-left\");\n controlPanels = [...bottomLeft.children, ...topLeft.children];\n }\n if (position && position.includes(\"right\")) {\n var bottomRight = document.getElementById(\"position-container-bottom-right\");\n var topRight = document.getElementById(\"position-container-top-right\");\n controlPanels = [...bottomRight.children, ...topRight.children];\n }\n // on ne ferme que les panles déjà ouverts qui ne sont pas exceptions\n return controlPanels.filter(p => {\n var panelID = p.id.match(/(\\w+)-[0-9]+/)[1];\n var isException = exceptionPanel.includes(panelID);\n var isOpened = p.getElementsByTagName(\"button\")[0].getAttribute(\"aria-pressed\");\n if (isOpened === \"true\" && !isException) {\n return p;\n }\n });\n}\n\nvar PanelManager = function (position, openedPanelID) {\n var openedPanel = getSameSideOpenedPanel(position, openedPanelID);\n if (openedPanel.length > 0) {\n openedPanel[0].getElementsByTagName(\"button\")[0].click();\n }\n};\n\nexport default PanelManager;\n","import PanelManager from \"../Utils/PanelManager\";\n// Mixin pour ajouter des méthodes communes à tous les widgets.\n\n// voir fichiers DOM et assign\n// modifier snippets.\nvar Widget = {\n /**\n * This method is called when a widget opens a panel\n * It calls the panelManager to automatically close other panels\n */\n onPanelOpen : function () {\n // On récupère l'id du widget à partir de l'id du DOM de la forme GPwidgetName-1876465465\n PanelManager(this.options.position, this.element.id.match(/(\\w+)-[0-9]+/)[1]);\n }\n};\n\nexport default Widget;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.Overlay;","var Marker = {\n lightOrange : \"data:image/png;base64,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IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjkyYWVkNjM2LWY3MDMtNDAzOC1hNzM4LWZiYzYxYzZlMTljNCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5NWMzZWI3NC0zYWRmLTRkYzUtOWZjZS1iODQ4NTc3Nzg4ODQiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0NjI3ZDg3NC1lZDIyLTRiZTUtYTlkNS00NDlmMzVhZDIxYzgiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5Mjc4OTUzMDYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphM2U3ZWQ1MS0xNTI4LTRhYjAtODVjOS0zNzNkNzgxZGM2ZmMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjI3KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PofUkY4AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGRuA4VZTAAAFcElEQVRYw82YW2xbVRaGv7XP8bHjXByHQkNhWigdVX1AikRBMBoQ8wASl4fRqPDAAxIPKAVxeRqQRohHBEVCaoGKUBCl4qHcNKCZVKMRRQxtgTaACLRKqlwB14NzM2ni2D2XvXjgBFXQOnFiA1uy/HB89u9/7bX+vf4l1HnpK57hTNCE0AzqAS5gAAuEID5KiWSiLPf4tp7YUjcSu4yLZzdi2IJyNXANcBlwAdAKzAHTwDhwDKEPywC+GZWHbPi7IKOvZIWguAnlr8BtwJ+AxDJeDYCPgF6Ed0hkh+Weov5mZLTHJMDeBjwYk0itYJtKTOpZML3SbYNfnYz2SBr0buARYENcFytdFvga2AGyT7p14Vcjoz3ShOgdKDuAi+pUewpMIDyCypvSreWGk9HdroOEV2F4A1hfTxGJCX2D5U7U/UzuD6NaXq49NRJhBsOjwMVLEtE4gaL4W5cV3IsxPEoizDT0ZLTHcSH6M/BWLLlVwpQKuPzhb+i8sRkv04Y/e5rvPigxtnM9trKU2k0D28A5LN3RsmXbrbFOU8DtQLpqfJqu97nh6TydmzvwWpOI8VDbxqbrkmz62yk+/Ps6yoe8KkeV/hHHfgrMNyrNEkBX1SAktgRs3T7ApV1rSWayiEkDLmLSJDNZLu1ay9btAyS2BEsEuWuZ99WKyRhgHeCcn8wGw/qbOnAS3jmfOwmP9Td1kNhQDduJcUwjyciS0RJXMMkWkPPUo/z4XFxZRhZII8mEwFCsT+f5xXTE7FAOteduItVaZodyhNPVZDeKccJGkxmsChIMOvTt6aRSzIP+7A9rRKWYp29PJ8GgsyqcVauZSADaj+IDTecWvBlD4e01HKjM07XtOOuuy+A2X0BYmib/8SxfvLWRYm8LdqZaCvkI/SDBci6nld0ze7KCLa4F3gSurR4MB5x1FnMhiCeor9hJiPKmWpbGp3EU2IbJFuTe5XfStbczLxgP7K0IPcCFDWhnJoFuMAek2/oNbWdku/WxHATejT1JPZcPvINysFYiK+gAFkXTK6H+MyhXADeseJ9fmrVDM6X080/+p1M2/yFsD1zjEIauEeMAqNpQE16oaKiqwfjYeLk+fuYl10HDq7DsBTavxs8o6FzFKez/dM3rLx9LjUyVxcb7yVkfzmpXFbACJURHIxgyxkyu1ml6qL0Z4YX4xl7Jfrrgm9Ov9bX/e++x1tHCgkQ11lgELGA4sBp3iHRbH5GDwJPAFLXo6KJnDmTh/aG2w2/3t47VSGQxs1zAE9U2s9pEjx3hXuBloCa7G1rxv8o3f/7SkUz/UFFWMqGRWMpHAqsDbl00KGotIXM7MawF7gKSS5oJJRospI7v+rD96Ikp8aV2EgrkVPW4OnIy6SVL9ZubvZgyaOVyYDfwl2oNqVWiXNEb231oTe+/BrzvK9Gy01MFyoiOKzIEmqsEfjGf/39U1yHgosJFUXhlFMl+z9E/nkvhVNHZsjux+9Caf77RnyzMBaJLmW4RrWAlB3Y4Uh13HLOA4wQjo6O2IRPNxVV4JuG5Et2SSelzjtFLzsZQ0NIZ8/2rx7K9+/paxqbKvyh4Bc4AFQxzau23Dow7FS+nHmfEUz05OqINH8+evXJPJVOuE93XkY4eSziaXcQpB2b+vZNt7+/8IPPl2OxPRMJ4dDsLzIho3hpzamJ6aqJ0ei6qtZAasmZ2OS1RyOMd6egBIzSFVoKj4y1Hnvhv+8cD02ZOkEmgIKITVnXKWDs1ksvNrgbTbRSZ46cypY50aWcllIsyKXvr8GTyi9f6WvePFGVQhO8EPW2NzI+OfV2pF2bDTgbg8D/aJeVUspd1BK3/G24u7/skO3+iYP3h3LdhI/B+AGodUpo8WKwoAAAAAElFTkSuQmCC\",\n darkOrange : \"data:image/png;base64,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czpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjIxNDZjMzUzLWIxZjItNGVjOC04NzQ3LTIwMGEyYWExM2ViMyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2NGViNmI2Ni03Y2I2LTRkZGUtYTI3OS01MGY0ZWFiZGFhODAiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1ODRhM2VjZC1kNGFmLTQ3NjItYjA1ZS04ODk2MGQ4ZTk0Y2MiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5MDM3ODI2MTQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxYzNjOGRkZi1kMjVkLTQ4YzQtYTAwYS0yMmU3ZDYwMzg1YjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjAzKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PuhCAHgAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGQOTjc4FAAAFdklEQVRYw82YW2gcZRTHf+eb2dlkc9lsrFYr2notfSgWxKKiog8VvIFI9UFQEaWtYPFJfREfRRSEeqlttViLD/WGisYXrShWpfWC1WpSN5eN3cZumkuTzWY3c/mOD9lI0WSTTXbVA8M8zMz3n//5zvl/5xyhxqb3ewYvaERpAvUAFzCABUIQH6GAHyvKa76tJbbUjMRW4+LbC7GsQbgCWA+sAs4AWoA8MAxkgEMo32LoxDO98oIN/xdk9IGUYEYvRrgduAW4Gogt4NMA+BroQHkfm+qW3aP6n5HRTSYG9hZga5lEwyKWKZVJvQCmQ3bZ4F8no5skAXov8BiwspwXizUL9APPgOyVXTr5r5HRzdKI1TsRngHOqlHuKTCI8hhG3padWqw7GX3IddDwcixvAefXUkTKhH7HcBfifi8vh1E1H1cfGkGYxPI4cM68RGw5zf3y3S7IuedgeZwgTNZ1Z3Sz46LRNcA7Zcmd25yGgPWP/M7q65toTLZSHBvn6OcFDm07n6g0n9oNAxsR54DsjBYs2251QWAbgFuBREX/tF3rc9+zA6xa3U5jSxwxHmpbueyqOOvvOM7rj67g1JfedFTNagngVtR+B0zUK8xiwLqKTmhcE3Dblk4uXbecRDKFmATgIiZBIpni0nXLuW1LJ41rgnmcvG6B59WiyRhgBeDM+UZipWHthnbcmDf7b8Y81m5oJ7GyErZTxjH1JCPzesu4ghtvBpkjH2X6uXFlAVEg9SMjhEAamFsyp4Yjcuks1s6uXdZacuksU8OVZDcC0mW8OpFRQqBruvqdwwpdDh+9cjaF0QHQv/2wRhRGB6afdzkVkKZxtDoyVaqZBKCHEXygcXafjhi63l3G9tIEGzYe4ZKrksSbzmCqMEz6mzE+eedC+juaiUYqhZCPchgkqKB4SzxntqQEO7oceBu4srIzHIitsMTOBOMJ1leCkxAMmEpRWt6Vg8BGTConOxZeSVdfzmwxHmpvRtkJnFmHcuYksBkxH8tO69e1nJEd1sdhP/BBuUippfnA+3jsr5ZI9TnzV33mFcB/DuEi4LpFr/PPZu3LkanES08fOltWnxe2Ba5xCEPXiHEAVG2oMS9UNFTVINOXKdamn3nQdSC8HMMeYPVS+hkFzQdObl9m2Zu7+xt6hkKx5fXktGumdNXyZQUKiPZGkDbGnFxqp+kh9kaUHeUTezHr6WRkxt/oa/toT39Lby6QqMoci4BJDB8vpTtEdlkflf3A08AQ1ejoTM8cyeRnudYD72Zb+qokMhNZLuCJaqtZaqDLLi0i7EHYDVTV7oZW/J9PNf3wanfycLoki5nQSFnKewKrnW5NNMhtKRDlt6EsB+4G4vM2/UrUNd5w5Pl028FfiuJL9SQUyKrqEXXkaNyLF2o3N9vUYKB0AbAduKFSQWqVKFv0+rYfXdbx4aB3qqQLDk8VKCKaUSQNmi0F/ujAwB9RTYeAMwoXabg2QvZ5jl4ym8Ip6FjgDm7/bdl7bw3Ec/lItEJyWyAS0RJWsmC7I9WM45hJHCfo6e21dZlozlju3pjnSnRT0tMXHdFzT8dQ0EJoTr2eSXXs7W/uG/pnwiswBZQw5NXaYw5knJKXVY8p8VSP9vZo3cezp1v2nniDK9FD7V70RMxoaganGJmJT0+0frbtt+RPfVN/EQnLo9sxYEREB6wxxweHhwYL4/mo2kSqi43c5zRH8GS7Fz1shMZQJTg41PzVU7+2fdNZNHlBTgI5ER20qkPG2qGebHZsSTpULzJH8slCe6ywrWTlrGTM3tw9Ef/xjUzLvp6idIlwQtBxa2Sit6+/VCvMuu0MwIE726RBSqlViaDli6Gm4t6e1MQveet3Z4+F9cD7Ewo4WRJBbaaSAAAAAElFTkSuQmCC\",\n red : \"data:image/png;base64,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293bv2fa/f0ASM5yljz/NiUAAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmI5YjA2YTAwLWZkOTQtNDc5MC1hNzIzLTlkMGUwNGRiNTRlNyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1MTQ3ZGU5Yi1kOTA0LTRlNWYtYjIyYy0wZmMzOGRmMWI3ZGEiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YzBjNTI2YS1lYTkyLTQxYWItODM5Yy05OWFhYTM0YjdlYzciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE2NDAxNTU0MjYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowMjQ4MDc5ZS1kMTYyLTQxZmItOGViYS1lMzY2NTRiNGRjMjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjIwOjQwKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PkaovgIAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPFCiKn0kIAAAFfUlEQVRYw82YTWxc1RXHf+e+N2/GH+Px2IEEV02AgqIsIkwgoYS2ahepVGCBUOiCRRdsAAnECthErBBCICGFj4gqRQqBRSABUrVm1URtCSATJ5ASZCPHH0kGgx1/xJl5nvH7uIcFY4iIM/GzZyhHenqL994993/u+f/fOUeos+nNnkHCJoQWRD0UFzCARYhQCVB8NFWWTwNbT99SNxC3GZfIXg9sADYDWxCuRekEskARYQplFPgEOAr045ph6bXRzwKM3pEX5mduQLkHuAvYCqSW8GkIfAT0IBwknT8lH87o/w2M3mpSqL0LeLQKIrOMZSpVUC8hpkf6bPiTg9FbpBn0L8ATwLoqL5ZrFjgNPAeyV47p3E8GRjdLE6r3oTwHXF0n7ikwgfAEIvvlqJYbDkY3uw4a3YLyNrC2niJSBXQG4c+Ie0yORnGSj5OnRhzlUJ4ErrkikBAoAjPVe7ik4F6D8iRxlGvoyegmx4X4NwgHgM6a8fUyIfc8doZbf99Ca66N0uwF+v7tc3DnWoJK6gqep1C2g3NEjsdLlm03GXSbAe4GmmvGZ91vA3Y8P8aN6ztoyaYxxsPaNrbcnmbbvV/x9ONdnPnA+w71otaMcDfYPqDUmDQTUgjdNYPQsSHkgYf62di9mmwujzHNgIsxzWRzeTZ2r+aBh/rp2BDWDLLQjSzpf7VMMIpB6QKcy77Tuc6wdVsHbspbfJspj63bOuhcV8u3g9KFJtufWQbHakfLdQUv3YrI4qwQ+e65616Jr6mknE4KJgIGgctLZnEq5vRgAWsXLyKttZweLFCcqiW7cdVP1DgwQoQwUNPJxIDDG7vXMDszBvqjDWvM7MwYb+xew8SAUzNowgCSDEwyNVMJQU8AAdC06DvBtOG/76xirlLi3u0nufn2HJmWTir+FJ9+PMu7B66nr6eVYLpWCgUoJ0DCGoq3wv/MbXkhmlkN7Ad+XTMY4kBTl6XlKnA8IQ4U/xyUx8wlB3ZpKvcC23Hz49K79Ep6GeWM8VB7J8pfgasaUM6cAx5EzPvSZ4OGljNy1AYIh4C/L6lASWYBcBCHQ0mBJOfM94rk+WjwAsKvgN8te51LK7kPpm3zK89OrZH1v4zaQ9c4RJFrxDgAqjbSlBcpGqlqODoyWq5TP1OtnoU9wPqV9DMKWlRnfJ+/6q3XKpmhSRVbXU8uuhb6Hq1eVsBHdDiGQWPMuZV1mpuMB/aPCK8CXcsMjs6pufCm3/7PPZXs8LhKnJBjMTCH4f2VdIfIcRsgcgh4FpgkiY4u9Mwqc4fn2468M58dSQhkIbNcwBPVNrPSRJdjWgb2AK8BidrdSCX4PGw5/re53IlBK8uZ0EhVyodCq/1uXTTIzfrExZ0oq4H7gfQSmv54IMqcfNFv7/0ilkCSg1CgoKon1ZEv017ar9/cbEvGEFeuQ9mF8IdaBamFuBB7I7tKq3r+EXjnK0tPTxUoIzqqyCBooRIGM2NjX8d1HQIuKFys0cYY2eeJ3riYwinorHUndvmr3nt7Pj1eVNEa5LZALKIVrBTAnopVRx3HzOE44dDwsG3IRHPBxrtTnkv8p5yjLzvoLy72oaC+mvOvz+V79pZbRyYvJbwC80AFQ1GtPevAqFPxCuoxL57ql8ND2vDx7MVW2JTOuMQPdxDvSInmF/yU1ZT+Nd92eGcp97+RH4BE1XHHLDAtomPWmK8mpiYn/AvFOCmRGmLTm53WOOKpDhM/YqApQsLe+dYPnym1f9xvTVGQc8C4iE5Y1Ulj7eRQoTC7Ih1qFJiTQc7vwN9ZUbk6Z+ydp6L0Z2+Ws/uGrAyI8I2gF6yR0vDI6Uq9fDbsZACO3NQuGa3kr3XC7H+ClvJeP1/6IrbBqbNno0b4+xbMlmARngcRbAAAAABJRU5ErkJggg==\",\n turquoiseBlue : \"data:image/png;base64,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/MUi8H5G35QHBm+BvjV3bu1znD4AWZpV+gY4OARGS5S97vHu3u65/XunPb8fN2tyj8UDOK0AAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjEwNGNlNWFhLTE1YzctNGI4Yi1iOGU1LTFmYWQyNWFiYzBhZCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpkNDMyZTY1Zi0xOThhLTQxM2EtYWYyMy1jNzhlNzczNGRlN2QiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyNzExODVkMi03MWZiLTRhZDMtYTJmMi1iNjM3OWU3MDc1OTEiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE4NjYyMzgzMjQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NGFiYzNkYS1lZWJiLTRlZjctYjdjNS04ZDRjODY5OGVjODMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI0OjI2KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pj0tlUwAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGBru/VeEAAAABmJLR0QA/wD/AP+gvaeTAAAFO0lEQVRYw9WYe2xTVRzHTx97dYS5B1UHa+/tY12dDoOKWyIGlfgHkCkSNTHGwHxA3NiAP/A5x4CMKEzdYL29YyAyBxKQZbI+NvYIaowaH9Ogi2GRbGjcFrbBNrq2a2/9nq5LCFnbbfSOeZJPTs/t6Tm/7/39zu+cU0IiXc7WSImNX0BsZiVYAhigmah5tHklsZrjSYtJSuZtaeSiiJU3gHUwfC9oARfBIHBP1DzaPH1eRuzmp0E6aTgSNX9EWMwSvOkMGPgG+CpguG8a0H7nA78zkMYqye0V0lYXDSHrYUw7cE5TxM04/b+38+vJ+RPRt0eIjVeAAhhyCQizFDKJEBjndaCY49Di4+CRlzFxfwSE3Ciol9i4DSBujoRUy7HIszFxdwSF3CioBy8qm1g5ufhirHwyJqwHrrDGWTlg8hFL1URN2+EF0XFPkyYuSWwhUVgnT2CygXBG3dFcM7bz1/au1u7OK9/93eWidUlHe1dCc810EsUAsXOPQZCI3rGZ6Wb4EXAEM0SCUFnZduz6T/09l4bHXYOCz+f0+XxeWg+7XYM/4vnKtlqHJHSIOrAHlYMFYmawRNCKycaDGZLVfMRdf/nPDpfXM+abotDnpy93dtzXfNgdZg+im2uimJ6h66UTeIMZsrat1jvkdPRRb/imLt4hl6N3DfqFEIPvOMzDJYspJsWfbUKEyFNttcKoyzkKo4UgYoRRt3OE9guT1br984nsmQ7gCWbIipaj4xeu9v/hFQTPlG7B89+u9v9O+4UQQ8f/BSlaVM8kgBOhji4p9mpvwQ+Wfwddjp6bQw2u8g44HT3535/tTUa/0Eccvg4sFDE1m2PBZkx2LVRqVcLQvG/PDDX1/tVxze38x+UZH6O1He28b764qgwtxOcf327eBGLFE9NikiD3qzDZhVBJgCJH3KubDnkfbD4s5Jw74qM1bcvDnxq8/vHt1SrS9InIJ2m7OQ4UYsKhCB9lJqHj0gPsHJzPvsS9w8rRRPDptI40M8PlH9fOJ5M5K008rsZmIwi5gc4QN9Zja8zn+5epch9PTFepU1iGuVunVqeyS9g0iv8zy96l0WiSjIsXx28iJEJhaONkMGB5YP14bkmI1SzIz1T0pRa9VKnNzCjUMcwWUAS2BtgWYLJN+xTo1OyrOhW7xsAwqnSGkd3i+uGjkT5Xw6DLt3AdEKQNB4YXbdtwQpuVuRtG7pwhxWA7vJgRib0nDuSDvtkIkjYcHE3aVWjRLL9/zyyETPK2Vq3OidAaOhiPDLcbxo3MRIik0eReWPnO15pHHiqbpYhS6hkNw7wAz0To6GM5hAzH3wkDa6b7x4bEwnkUfMnP6idX7Nex7GxElIDNerV6hU6jSdbp9RHck2w0w/FaGGoJm7KtnCfmWNlF1fOrK3Q6bekMRFABO7QM8yxewFLUi+5JSxPpAmcxy0gjt1Rytir4NcHKCfJTH/al5j1j1hr0pWEML55YD+x2GP6cVqNZZjQYEvUsG4vP4v8jKju5L1p6qnytxGKa6qogyOorBpVbXvxMe69xdxABb9I0DAGvIIRWp7NsBsJIoWVZKfaXuf+jMKp2b6z8+Adb4aErNwpCCh5J2pnfoH0ga08g7invBfaQjXjjuQifhyEgLdNolJP5UqR17y+QnSwvk1i565OZK6F8RzubvWwvDH8LvKZnmHXY8HKws+sNLJtI5muJ/7hYElOzJ1V+fN9R7CVDClPJOVXuqo06vS4HQjTwgDKDZRXk/1JiD7wrieFLk6T1lczCXUVK7aPZinS9XrTw+Q+Tql7SUmvGuQAAAABJRU5ErkJggg==\",\n defaultOffset : [-25.5, -32]\n};\n\nexport default Marker;\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.interaction;","// import OpenLayers\nimport Control from \"ol/control/Control\";\nimport {\n Select as SelectInteraction,\n Modify as ModifyInteraction,\n Draw as DrawInteraction\n} from \"ol/interaction\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Utils from \"../../Utils/Helper\";\n\nvar logger = Logger.getLogger(\"interactions\");\n\n/**\n * @private\n * @description\n * Pourquoi et comment l'utiliser ?\n * Cette classe permet de gérer les interactions entre chaque extension.\n * Une extension qui active une interaction avec la carte, doit desactiver\n * les autres interactions issues d'autre extensions.\n * La désactivation d'une interaction s'accompagne d'actions telles que\n * le nettoyage des dessins, l'état du composant graphique, ...\n *\n * Ex\n * // desactive toutes les interactions avec l'opération par defaut : clean\n * Interactions.unset(map);\n * // desactive les interactions sauf celles de Drawing. On execute des\n * // operations particulieres : status, collapse et message\n * Interactions.unset(map, {\n * current : \"Drawing\",\n * status : false,\n * collapse : true,\n * messsage : [\"WARNING\", \"Ceci est un avertissement !\"]\n * });\n *\n * Dans le code de l'extension, il faut placer des informations dans l'interaction :\n * interaction.setProperties({\n * name : \"Drawing\",\n * source : this\n * });\n */\nvar Interactions = {\n\n /**\n * Liste des extensions qui utilisent le mécanisme des interactions\n */\n _extensions : [\n \"Measures\",\n \"ElevationPath\",\n \"Drawing\"\n ],\n\n /**\n * Options par defaut\n * - current : ex. \"Drawing\"\n * c'est l'extension qui demande la desactivation des autres interactions.\n * Par defaut, toutes les interactions sont desactivées.\n * - clean :\n * c'est la suppression des interactions, des dessins de la carte,\n * ainsi que la reinitialisation de l'état graphique.\n * Les extensions doivent implementer la méthode 'clean()'.\n * Par defaut, tous les dessins sont supprimés\n */\n _options : {\n current : null,\n clean : null\n },\n\n /**\n * Permet de desactive les interactions (Draw) de la carte pour les extensions,\n * sauf l'interaction courrante (si elle est renseignée avec l'option 'current').\n * Il est possible d'ajouter des fonctionnalités via les options.\n * Par defaut, l'option 'clean' est renseignée...\n *\n * @param {Object} map - the map\n * @param {Object} options - options\n */\n unset : function (map, options) {\n logger.trace(\"unset()\");\n\n var opts = {};\n Utils.mergeParams(opts, this._options);\n Utils.mergeParams(opts, options);\n\n var interactions = map.getInteractions().getArray();\n for (var i = 0; i < interactions.length; i++) {\n if (interactions[i].getActive() &&\n (interactions[i] instanceof DrawInteraction ||\n interactions[i] instanceof SelectInteraction ||\n interactions[i] instanceof ModifyInteraction)) {\n var prop = interactions[i].getProperties();\n var name = prop.name;\n if (typeof name !== \"undefined\" && this._extensions.indexOf(name) > -1) {\n // doit on desactiver l'interaction courrante ?\n if (opts.current && opts.current === name) {\n continue;\n }\n interactions[i].setActive(false);\n // instance de l'extension\n var source = prop.source;\n if (typeof source !== \"undefined\" && source instanceof Control) {\n // opérations sur le composant graphique\n for (var action in opts) {\n if (opts.hasOwnProperty(action)) {\n if (action === \"current\") {\n continue;\n }\n if (typeof source[action] === \"function\") {\n var args = Array.isArray(opts[action]) ? opts[action] : [opts[action]];\n source[action].apply(source, args);\n }\n }\n }\n }\n } else {\n interactions[i].setActive(false);\n }\n }\n }\n }\n};\n\nexport default Interactions;\n","/**\n * @module SelectorID\n * @alias module:~utils/SelectorID\n * @private\n * @description\n * formalisme d'un tag ID :\n * -> NAME(_ORDER)-1460636385836\n *\n * @example\n * Ex.\n * GProutePoints-1460636385836\n * GProutePoint_10-1460636385836\n */\nvar SelectorID = {\n\n /**\n * Construction d'un identifiant statique basé sur le timestamp,\n * et qui s'incremente de +1 à chaque appel\n * @function generate\n */\n generate : (function () {\n var timestamp = Math.floor(Date.now());\n return function () {\n return timestamp++;\n };\n })(),\n\n /**\n * nom du tag\n * @function name\n * @param {String} id - the id\n * @returns {String} index\n */\n name : function (id) {\n var name = null;\n\n var i = id.lastIndexOf(\"-\");\n if (i === -1) {\n name = id;\n } else {\n name = id.substring(0, i);\n }\n\n return name;\n },\n\n /**\n * numero d'identifiant du tag\n *\n * @function index\n * @param {String} id - the id\n * @returns {String} index\n */\n index : function (id) {\n var index = null;\n\n var name = this.name(id);\n // if (name !== id) {\n var i = name.lastIndexOf(\"_\");\n if (i !== -1) {\n index = name.substring(i + 1);\n }\n // }\n\n return index;\n },\n\n /**\n * uuid du tag\n *\n * @function uuid\n * @param {String} id - the id\n * @returns {String} uuid\n */\n uuid : function (id) {\n var uuid = null;\n\n var i = id.lastIndexOf(\"-\");\n if (i !== -1) {\n uuid = parseInt(id.substring(i + 1), 10);\n }\n\n return uuid;\n }\n\n};\n\nexport default SelectorID;\n","/**\n* @module MathUtils\n* @alias module:~utils/MathUtils\n* @description\n* ...\n*\n* @example\n* modulo();\n* decimalToDMS();\n* coordinateTo();\n* toInteger();\n* isInteger();\n* toFloat();\n*/\nvar MathUtils = {\n /**\n * Reste de la division euclidienne\n * \n * @function modulo\n * @param {Number} a - divisor\n * @param {Number} b - quotient\n * @returns {Number} Modulo\n */\n modulo : function (a, b) {\n var r = a % b;\n return r * b < 0 ? r + b : r;\n },\n\n /**\n * Transform degrees, minutes, seconds form decimal degrees -\n * Largely inspired by the private function degreesToStringHDMS from ol/coordinate.js\n *\n * @function decimalToDMS\n * @param {Number} degrees - decimal degrees\n * @param {Array} hemispheres - \"NS\" ou \"EO\"\n * @param {Number} numDigits - number of digits for seconds\n * @returns {Object} DMS coordinate\n */\n decimalToDMS : function (degrees, hemispheres, numDigits) {\n var normalizedDegrees = this.modulo(degrees + 180, 360) - 180;\n var x = Math.abs(3600 * normalizedDegrees);\n var dflPrecision = numDigits || 0;\n var precision = Math.pow(10, dflPrecision);\n\n var deg = Math.floor(x / 3600);\n var min = Math.floor((x - deg * 3600) / 60);\n var sec = x - (deg * 3600) - (min * 60);\n sec = Math.ceil(sec * precision) / precision;\n\n if (sec >= 60) {\n sec = 0;\n min += 1;\n }\n\n if (min >= 60) {\n min = 0;\n deg += 1;\n }\n\n var direction = hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0);\n return {\n d : deg,\n m : min,\n s : sec,\n direction : direction\n };\n },\n\n /**\n * Transform decimal degrees form degrees, minutes, seconds\n * \n * @function dmsToDecimal\n * @param {*} degrees - degrees\n * @param {*} minutes - minutes\n * @param {*} seconds - seconds\n * @param {*} hemispheres - \"NS\" ou \"EO\"\n * @returns {Number} decimal coordinate\n */\n dmsToDecimal (degrees, minutes, seconds, hemispheres) {\n var dd = degrees + minutes/60 + seconds/(60*60);\n \n if (hemispheres == \"S\" || hemispheres == \"O\") {\n dd = dd * -1;\n }\n return dd;\n },\n /**\n * ol coordinate to decimal\n * \n * @function coordinateToDecimal\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {lat, lng, unit:°}\n */\n coordinateToDecimal (olCoordinate) {\n var coordinate = {};\n coordinate.lat = olCoordinate[1].toFixed(6);\n coordinate.lng = olCoordinate[0].toFixed(6);\n coordinate.unit = \"°\";\n return coordinate;\n },\n\n /**\n * ol coordinate to dms\n * \n * @function coordinateToDMS\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {lat, lng, unit:dms}\n */\n coordinateToDMS (olCoordinate) {\n return {\n lng : MathUtils.decimalToDMS(olCoordinate[0], \"EO\", 2),\n lat : MathUtils.decimalToDMS(olCoordinate[1], \"NS\", 2),\n unit : \"DMS\"\n };\n },\n\n /**\n * ol coordinate to rad\n * \n * @function coordinateToRad\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {lat, lng, unit:rad}\n */\n coordinateToRad (olCoordinate) {\n var coordinate = {};\n var d = 0.01745329251994329577;\n coordinate.lng = olCoordinate[0] * d;\n coordinate.lng = coordinate.lng.toFixed(8);\n coordinate.lat = olCoordinate[1] * d;\n coordinate.lat = coordinate.lat.toFixed(8);\n coordinate.unit = \"rad\";\n return coordinate;\n },\n\n /**\n * ol coordinate to gon\n * \n * @function coordinateToGon\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {lat, lng, unit:gon}\n */\n coordinateToGon (olCoordinate) {\n var coordinate = {};\n var d = 1.11111111111111111111;\n coordinate.lng = olCoordinate[0] * d;\n coordinate.lng = coordinate.lng.toFixed(8);\n coordinate.lat = olCoordinate[1] * d;\n coordinate.lat = coordinate.lat.toFixed(8);\n coordinate.unit = \"gon\";\n return coordinate;\n },\n\n /**\n * ol coordinate to meter\n * \n * @function coordinateToMeter\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {x, y, unit:m}\n */\n coordinateToMeter (olCoordinate) {\n // on recoit toujours des coordonnées metriques\n var coordinate = {};\n coordinate.x = olCoordinate[0].toFixed(2);\n coordinate.y = olCoordinate[1].toFixed(2);\n coordinate.unit = \"m\";\n return coordinate;\n },\n\n /**\n * ol coordinate to kilometer\n * \n * @function coordinateToKMeter\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {x, lyng, unit:km}\n */\n coordinateToKMeter (olCoordinate) {\n // on recoit toujours des coordonnées metriques\n var coordinate = {};\n coordinate.x = (olCoordinate[0] / 1000).toFixed(2);\n coordinate.y = (olCoordinate[1] / 1000).toFixed(2);\n coordinate.unit = \"km\";\n return coordinate;\n },\n\n /**\n * Converts string to Integer\n *\n * @function toInteger\n * @param {String} s - string number\n * @param {Numeric} base - between 2 and 36\n * @returns {null|Numeric} result\n */\n toInteger : function (s, base) {\n var _base = base || 10;\n var n = parseInt(s, _base);\n if (!isNaN(n) && isFinite(n)) {\n return n;\n }\n return null;\n },\n\n /**\n * check if s represents an integer\n *\n * @function isInteger\n * @param {String} s - string number\n * @returns {Boolean} is integer\n */\n isInteger : function (s) {\n if (isNaN(s)) {\n return false;\n }\n\n var v = parseFloat(s);\n return ((v | 0) === v);\n },\n\n /**\n * Converts s to float\n *\n * @function toFloat\n * @param {String} s - string number\n * @returns {null|Numeric} result\n */\n toFloat : function (s) {\n var n = parseFloat(s);\n if (!isNaN(n) && isFinite(n)) {\n return n;\n }\n return null;\n }\n};\n\nexport default MathUtils;\n","/**\n * @module SearchEngineUtils\n * @alias module:~utils/SearchEngineUtils\n * @private\n * @description\n * ...\n *\n * @example\n * advancedSearchFiltersByDefault();\n * zoomToResultsByDefault();\n */\nvar SearchEngineUtils = {\n /**\n * Advanced Search Filters by default\n * @function advancedSearchFiltersByDefault\n */\n advancedSearchFiltersByDefault : {\n PositionOfInterest : [\n {\n name : \"category\",\n title : \"Type\",\n value : [\n \"cimetière\",\n \"aérodrome\",\n \"réservoir\",\n \"administratif\",\n \"construction linéaire\",\n \"construction ponctuelle\",\n \"construction surfacique\",\n \"cours d'eau\",\n \"détail hydrographique\",\n \"détail orographique\",\n \"équipement de transport\",\n \"plan d'eau\",\n \"poste de transformation\",\n \"terrain de sport\",\n \"transport par câble\",\n \"zone d'activité ou d'intérêt\",\n \"zone d'habitation\",\n \"lieu-dit non habité\"\n ]\n }, {\n name : \"postcode\",\n title : \"Code postal\"\n }, {\n name : \"citycode\",\n title : \"Code INSEE\"\n }\n ],\n StreetAddress : [\n {\n name : \"city\",\n title : \"Ville\"\n }, {\n name : \"postcode\",\n title : \"Code postal\"\n }, {\n name : \"citycode\",\n title : \"Code INSEE\"\n }\n ],\n CadastralParcel : [\n {\n name : \"departmentcode\",\n title : \"Code département (INSEE)\",\n description : \"Code INSEE du département (ex: 01, 94)\"\n }, {\n name : \"municipalitycode\",\n title : \"Code commune (INSEE)\",\n description : \"Code INSEE de la commune : 3 chiffres (ex: 067)\"\n }, {\n name : \"oldmunicipalitycode\",\n title : \"Commune absorbée\",\n description : \"Commune absorbée : 3 chiffres (ex: 000, 001)\"\n }, {\n name : \"districtcode\",\n title : \"Arrondissement\",\n description : \"Arrondissement : 3 chiffres (ex: 004, 012)\"\n }, {\n name : \"section\",\n title : \"Section\",\n description : \"Section Cadastrale : 2 caractères (chiffre et/ou lettre)\"\n }, {\n name : \"number\",\n title : \"Numéro\",\n description : \"Numéro de la parcelle : 4 chiffres (ex: 0041, 0250)\"\n }, {\n name : \"sheet\",\n title : \"Feuille\",\n description : \"Numéro de la feuille cadastrale\"\n }\n ]\n },\n\n /**\n * Provides default zoom based on results.\n *\n * @function zoomToResultsByDefault\n * @param {Object} info - location information\n * @returns {Integer} zoom level\n */\n zoomToResultsByDefault : function (info) {\n // FIXME\n // la classification du geocodage est differente de l'importance de l'autocompletion !\n\n var zoom = 15;\n\n var service = info.service;\n var fields = info.fields;\n var type = info.type;\n\n var importance = {\n 1 : 11,\n 2 : 12,\n 3 : 13,\n 4 : 14,\n 5 : 15,\n 6 : 16,\n 7 : 17,\n 8 : 17\n };\n\n // AutoCompletion POI\n if (service === \"SuggestedLocation\") {\n if (type === \"PositionOfInterest\") {\n zoom = importance[fields.classification];\n }\n }\n\n // Geocodage POI\n if (service === \"GeocodedLocation\") {\n if (type === \"PositionOfInterest\") {\n zoom = importance[fields.importance] || 14; // au cas où la recherche est en freeform !\n }\n }\n\n if (type === \"StreetAddress\") {\n zoom = 17;\n }\n\n if (type === \"CadastralParcel\") {\n zoom = 17;\n }\n\n return zoom;\n }\n};\n\nexport default SearchEngineUtils;\n","/**\n * @module GeocodeUtils\n * @alias module:~utils/GeocodeUtils\n * @private\n * @description\n * ...\n *\n * @example\n * getGeocodedLocationFreeform();\n * getSuggestedLocationFreeform();\n */\nvar GeocodeUtils = {\n /**\n * Return the freeform of a structured geocoded item\n *\n * @param {Object} geocodedLocation - Geocoded location\n * @returns {String} freeform string\n */\n getGeocodedLocationFreeform : function (geocodedLocation) {\n var attributes = geocodedLocation.placeAttributes;\n if (attributes.label) {\n return attributes.label;\n } else if (geocodedLocation.type === \"PositionOfInterest\") {\n var resultToReturn = attributes.toponym;\n if (attributes.category && Array.isArray(attributes.category) && attributes.category.length >= 2 && attributes.category[0] === \"administratif\") {\n // gestion particulière des territoires administratifs\n resultToReturn = resultToReturn + \", \" + attributes.category[1];\n } else {\n // gestion standard des POI non adminsitratifs\n if (attributes.postcode) {\n resultToReturn = resultToReturn + \", \" + attributes.postcode[0];\n if (attributes.city) {\n resultToReturn = resultToReturn + \" \" + attributes.city[0];\n }\n }\n }\n return resultToReturn;\n } else if (geocodedLocation.type === \"StreetAddress\") {\n return (attributes.housenumber ? attributes.housenumber + \" \" : \"\") + attributes.street + \" \" + (attributes.postcode ? attributes.postcode + \", \" : \"\") + attributes.city;\n } else if (geocodedLocation.type === \"CadastralParcel\") {\n return attributes.id;\n } else {\n return \"...\";\n }\n },\n\n /**\n * Return the freeform of a structured suggested item\n *\n * @param {Object} suggestedLocation - Suggested location\n * @returns {String} freeform string\n */\n getSuggestedLocationFreeform : function (suggestedLocation) {\n if (suggestedLocation.fullText) {\n return suggestedLocation.fullText;\n } else {\n var values = [];\n values.push(suggestedLocation.street || \"\");\n values.push(suggestedLocation.postalCode || \"\");\n values.push(suggestedLocation.commune || \"\");\n\n if (suggestedLocation.type === \"PositionOfInterest\") {\n values.push(suggestedLocation.poi || \"\");\n values.push(suggestedLocation.kind || \"\");\n }\n return values.join(\" - \");\n }\n }\n};\n\nexport default GeocodeUtils;\n","export var PJD_3PARAM = 1;\nexport var PJD_7PARAM = 2;\nexport var PJD_GRIDSHIFT = 3;\nexport var PJD_WGS84 = 4; // WGS84 or equivalent\nexport var PJD_NODATUM = 5; // WGS84 or equivalent\nexport var SRS_WGS84_SEMIMAJOR = 6378137.0; // only used in grid shift transforms\nexport var SRS_WGS84_SEMIMINOR = 6356752.314; // only used in grid shift transforms\nexport var SRS_WGS84_ESQUARED = 0.0066943799901413165; // only used in grid shift transforms\nexport var SEC_TO_RAD = 4.84813681109535993589914102357e-6;\nexport var HALF_PI = Math.PI/2;\n// ellipoid pj_set_ell.c\nexport var SIXTH = 0.1666666666666666667;\n/* 1/6 */\nexport var RA4 = 0.04722222222222222222;\n/* 17/360 */\nexport var RA6 = 0.02215608465608465608;\nexport var EPSLN = 1.0e-10;\n// you'd think you could use Number.EPSILON above but that makes\n// Mollweide get into an infinate loop.\n\nexport var D2R = 0.01745329251994329577;\nexport var R2D = 57.29577951308232088;\nexport var FORTPI = Math.PI/4;\nexport var TWO_PI = Math.PI * 2;\n// SPI is slightly greater than Math.PI, so values that exceed the -180..180\n// degree range by a tiny amount don't get wrapped. This prevents points that\n// have drifted from their original location along the 180th meridian (due to\n// floating point error) from changing their sign.\nexport var SPI = 3.14159265359;\n","var exports = {};\nexport {exports as default};\n\nexports.greenwich = 0.0; //\"0dE\",\nexports.lisbon = -9.131906111111; //\"9d07'54.862\\\"W\",\nexports.paris = 2.337229166667; //\"2d20'14.025\\\"E\",\nexports.bogota = -74.080916666667; //\"74d04'51.3\\\"W\",\nexports.madrid = -3.687938888889; //\"3d41'16.58\\\"W\",\nexports.rome = 12.452333333333; //\"12d27'8.4\\\"E\",\nexports.bern = 7.439583333333; //\"7d26'22.5\\\"E\",\nexports.jakarta = 106.807719444444; //\"106d48'27.79\\\"E\",\nexports.ferro = -17.666666666667; //\"17d40'W\",\nexports.brussels = 4.367975; //\"4d22'4.71\\\"E\",\nexports.stockholm = 18.058277777778; //\"18d3'29.8\\\"E\",\nexports.athens = 23.7163375; //\"23d42'58.815\\\"E\",\nexports.oslo = 10.722916666667; //\"10d43'22.5\\\"E\"\n","export default {\n 'mm': {to_meter: 0.001},\n 'cm': {to_meter: 0.01},\n 'ft': {to_meter: 0.3048},\n 'us-ft': {to_meter: 1200 / 3937},\n 'fath': {to_meter: 1.8288},\n 'kmi': {to_meter: 1852},\n 'us-ch': {to_meter: 20.1168402336805},\n 'us-mi': {to_meter: 1609.34721869444},\n 'km': {to_meter: 1000},\n 'ind-ft': {to_meter: 0.30479841},\n 'ind-yd': {to_meter: 0.91439523},\n 'mi': {to_meter: 1609.344},\n 'yd': {to_meter: 0.9144},\n 'ch': {to_meter: 20.1168},\n 'link': {to_meter: 0.201168},\n 'dm': {to_meter: 0.01},\n 'in': {to_meter: 0.0254},\n 'ind-ch': {to_meter: 20.11669506},\n 'us-in': {to_meter: 0.025400050800101},\n 'us-yd': {to_meter: 0.914401828803658}\n};\n","var ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nexport default function match(obj, key) {\n if (obj[key]) {\n return obj[key];\n }\n var keys = Object.keys(obj);\n var lkey = key.toLowerCase().replace(ignoredChar, '');\n var i = -1;\n var testkey, processedKey;\n while (++i < keys.length) {\n testkey = keys[i];\n processedKey = testkey.toLowerCase().replace(ignoredChar, '');\n if (processedKey === lkey) {\n return obj[testkey];\n }\n }\n}\n","import {D2R} from './constants/values';\nimport PrimeMeridian from './constants/PrimeMeridian';\nimport units from './constants/units';\nimport match from './match';\n\nexport default function(defData) {\n var self = {};\n var paramObj = defData.split('+').map(function(v) {\n return v.trim();\n }).filter(function(a) {\n return a;\n }).reduce(function(p, a) {\n var split = a.split('=');\n split.push(true);\n p[split[0].toLowerCase()] = split[1];\n return p;\n }, {});\n var paramName, paramVal, paramOutname;\n var params = {\n proj: 'projName',\n datum: 'datumCode',\n rf: function(v) {\n self.rf = parseFloat(v);\n },\n lat_0: function(v) {\n self.lat0 = v * D2R;\n },\n lat_1: function(v) {\n self.lat1 = v * D2R;\n },\n lat_2: function(v) {\n self.lat2 = v * D2R;\n },\n lat_ts: function(v) {\n self.lat_ts = v * D2R;\n },\n lon_0: function(v) {\n self.long0 = v * D2R;\n },\n lon_1: function(v) {\n self.long1 = v * D2R;\n },\n lon_2: function(v) {\n self.long2 = v * D2R;\n },\n alpha: function(v) {\n self.alpha = parseFloat(v) * D2R;\n },\n gamma: function(v) {\n self.rectified_grid_angle = parseFloat(v);\n },\n lonc: function(v) {\n self.longc = v * D2R;\n },\n x_0: function(v) {\n self.x0 = parseFloat(v);\n },\n y_0: function(v) {\n self.y0 = parseFloat(v);\n },\n k_0: function(v) {\n self.k0 = parseFloat(v);\n },\n k: function(v) {\n self.k0 = parseFloat(v);\n },\n a: function(v) {\n self.a = parseFloat(v);\n },\n b: function(v) {\n self.b = parseFloat(v);\n },\n r: function(v) {\n self.a = self.b = parseFloat(v);\n },\n r_a: function() {\n self.R_A = true;\n },\n zone: function(v) {\n self.zone = parseInt(v, 10);\n },\n south: function() {\n self.utmSouth = true;\n },\n towgs84: function(v) {\n self.datum_params = v.split(\",\").map(function(a) {\n return parseFloat(a);\n });\n },\n to_meter: function(v) {\n self.to_meter = parseFloat(v);\n },\n units: function(v) {\n self.units = v;\n var unit = match(units, v);\n if (unit) {\n self.to_meter = unit.to_meter;\n }\n },\n from_greenwich: function(v) {\n self.from_greenwich = v * D2R;\n },\n pm: function(v) {\n var pm = match(PrimeMeridian, v);\n self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;\n },\n nadgrids: function(v) {\n if (v === '@null') {\n self.datumCode = 'none';\n }\n else {\n self.nadgrids = v;\n }\n },\n axis: function(v) {\n var legalAxis = \"ewnsud\";\n if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {\n self.axis = v;\n }\n },\n approx: function() {\n self.approx = true;\n }\n };\n for (paramName in paramObj) {\n paramVal = paramObj[paramName];\n if (paramName in params) {\n paramOutname = params[paramName];\n if (typeof paramOutname === 'function') {\n paramOutname(paramVal);\n }\n else {\n self[paramOutname] = paramVal;\n }\n }\n else {\n self[paramName] = paramVal;\n }\n }\n if(typeof self.datumCode === 'string' && self.datumCode !== \"WGS84\"){\n self.datumCode = self.datumCode.toLowerCase();\n }\n return self;\n}\n","export default parseString;\n\nvar NEUTRAL = 1;\nvar KEYWORD = 2;\nvar NUMBER = 3;\nvar QUOTED = 4;\nvar AFTERQUOTE = 5;\nvar ENDED = -1;\nvar whitespace = /\\s/;\nvar latin = /[A-Za-z]/;\nvar keyword = /[A-Za-z84_]/;\nvar endThings = /[,\\]]/;\nvar digets = /[\\d\\.E\\-\\+]/;\n// const ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nfunction Parser(text) {\n if (typeof text !== 'string') {\n throw new Error('not a string');\n }\n this.text = text.trim();\n this.level = 0;\n this.place = 0;\n this.root = null;\n this.stack = [];\n this.currentObject = null;\n this.state = NEUTRAL;\n}\nParser.prototype.readCharicter = function() {\n var char = this.text[this.place++];\n if (this.state !== QUOTED) {\n while (whitespace.test(char)) {\n if (this.place >= this.text.length) {\n return;\n }\n char = this.text[this.place++];\n }\n }\n switch (this.state) {\n case NEUTRAL:\n return this.neutral(char);\n case KEYWORD:\n return this.keyword(char)\n case QUOTED:\n return this.quoted(char);\n case AFTERQUOTE:\n return this.afterquote(char);\n case NUMBER:\n return this.number(char);\n case ENDED:\n return;\n }\n};\nParser.prototype.afterquote = function(char) {\n if (char === '\"') {\n this.word += '\"';\n this.state = QUOTED;\n return;\n }\n if (endThings.test(char)) {\n this.word = this.word.trim();\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in afterquote yet, index ' + this.place);\n};\nParser.prototype.afterItem = function(char) {\n if (char === ',') {\n if (this.word !== null) {\n this.currentObject.push(this.word);\n }\n this.word = null;\n this.state = NEUTRAL;\n return;\n }\n if (char === ']') {\n this.level--;\n if (this.word !== null) {\n this.currentObject.push(this.word);\n this.word = null;\n }\n this.state = NEUTRAL;\n this.currentObject = this.stack.pop();\n if (!this.currentObject) {\n this.state = ENDED;\n }\n\n return;\n }\n};\nParser.prototype.number = function(char) {\n if (digets.test(char)) {\n this.word += char;\n return;\n }\n if (endThings.test(char)) {\n this.word = parseFloat(this.word);\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in number yet, index ' + this.place);\n};\nParser.prototype.quoted = function(char) {\n if (char === '\"') {\n this.state = AFTERQUOTE;\n return;\n }\n this.word += char;\n return;\n};\nParser.prototype.keyword = function(char) {\n if (keyword.test(char)) {\n this.word += char;\n return;\n }\n if (char === '[') {\n var newObjects = [];\n newObjects.push(this.word);\n this.level++;\n if (this.root === null) {\n this.root = newObjects;\n } else {\n this.currentObject.push(newObjects);\n }\n this.stack.push(this.currentObject);\n this.currentObject = newObjects;\n this.state = NEUTRAL;\n return;\n }\n if (endThings.test(char)) {\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in keyword yet, index ' + this.place);\n};\nParser.prototype.neutral = function(char) {\n if (latin.test(char)) {\n this.word = char;\n this.state = KEYWORD;\n return;\n }\n if (char === '\"') {\n this.word = '';\n this.state = QUOTED;\n return;\n }\n if (digets.test(char)) {\n this.word = char;\n this.state = NUMBER;\n return;\n }\n if (endThings.test(char)) {\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in neutral yet, index ' + this.place);\n};\nParser.prototype.output = function() {\n while (this.place < this.text.length) {\n this.readCharicter();\n }\n if (this.state === ENDED) {\n return this.root;\n }\n throw new Error('unable to parse string \"' +this.text + '\". State is ' + this.state);\n};\n\nfunction parseString(txt) {\n var parser = new Parser(txt);\n return parser.output();\n}\n","\n\nfunction mapit(obj, key, value) {\n if (Array.isArray(key)) {\n value.unshift(key);\n key = null;\n }\n var thing = key ? {} : obj;\n\n var out = value.reduce(function(newObj, item) {\n sExpr(item, newObj);\n return newObj\n }, thing);\n if (key) {\n obj[key] = out;\n }\n}\n\nexport function sExpr(v, obj) {\n if (!Array.isArray(v)) {\n obj[v] = true;\n return;\n }\n var key = v.shift();\n if (key === 'PARAMETER') {\n key = v.shift();\n }\n if (v.length === 1) {\n if (Array.isArray(v[0])) {\n obj[key] = {};\n sExpr(v[0], obj[key]);\n return;\n }\n obj[key] = v[0];\n return;\n }\n if (!v.length) {\n obj[key] = true;\n return;\n }\n if (key === 'TOWGS84') {\n obj[key] = v;\n return;\n }\n if (key === 'AXIS') {\n if (!(key in obj)) {\n obj[key] = [];\n }\n obj[key].push(v);\n return;\n }\n if (!Array.isArray(key)) {\n obj[key] = {};\n }\n\n var i;\n switch (key) {\n case 'UNIT':\n case 'PRIMEM':\n case 'VERT_DATUM':\n obj[key] = {\n name: v[0].toLowerCase(),\n convert: v[1]\n };\n if (v.length === 3) {\n sExpr(v[2], obj[key]);\n }\n return;\n case 'SPHEROID':\n case 'ELLIPSOID':\n obj[key] = {\n name: v[0],\n a: v[1],\n rf: v[2]\n };\n if (v.length === 4) {\n sExpr(v[3], obj[key]);\n }\n return;\n case 'EDATUM':\n case 'ENGINEERINGDATUM':\n case 'LOCAL_DATUM':\n case 'DATUM':\n case 'VERT_CS':\n case 'VERTCRS':\n case 'VERTICALCRS':\n v[0] = ['name', v[0]];\n mapit(obj, key, v);\n return;\n case 'COMPD_CS':\n case 'COMPOUNDCRS':\n case 'FITTED_CS':\n // the followings are the crs defined in\n // https://github.com/proj4js/proj4js/blob/1da4ed0b865d0fcb51c136090569210cdcc9019e/lib/parseCode.js#L11\n case 'PROJECTEDCRS':\n case 'PROJCRS':\n case 'GEOGCS':\n case 'GEOCCS':\n case 'PROJCS':\n case 'LOCAL_CS':\n case 'GEODCRS':\n case 'GEODETICCRS':\n case 'GEODETICDATUM':\n case 'ENGCRS':\n case 'ENGINEERINGCRS':\n v[0] = ['name', v[0]];\n mapit(obj, key, v);\n obj[key].type = key;\n return;\n default:\n i = -1;\n while (++i < v.length) {\n if (!Array.isArray(v[i])) {\n return sExpr(v, obj[key]);\n }\n }\n return mapit(obj, key, v);\n }\n}\n","var D2R = 0.01745329251994329577;\nimport parser from './parser';\nimport {sExpr} from './process';\n\nvar knownTypes = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS', 'GEOCCS', 'PROJCS', 'LOCAL_CS', 'GEODCRS',\n 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\n\nfunction rename(obj, params) {\n var outName = params[0];\n var inName = params[1];\n if (!(outName in obj) && (inName in obj)) {\n obj[outName] = obj[inName];\n if (params.length === 3) {\n obj[outName] = params[2](obj[outName]);\n }\n }\n}\n\nfunction d2r(input) {\n return input * D2R;\n}\n\nfunction cleanWKT(wkt) {\n var keys = Object.keys(wkt);\n for (var i = 0, ii = keys.length; i 0 ? 90 : -90);\n wkt.lat_ts = wkt.lat1;\n } else if (!wkt.lat_ts && wkt.lat0 && wkt.projName === 'Polar_Stereographic') {\n wkt.lat_ts = wkt.lat0;\n wkt.lat0 = d2r(wkt.lat0 > 0 ? 90 : -90);\n }\n}\nexport default function(wkt) {\n var lisp = parser(wkt);\n var type = lisp[0];\n var obj = {};\n sExpr(lisp, obj);\n cleanWKT(obj);\n return obj[type];\n}\n","import globals from './global';\nimport parseProj from './projString';\nimport wkt from 'wkt-parser';\n\nfunction defs(name) {\n /*global console*/\n var that = this;\n if (arguments.length === 2) {\n var def = arguments[1];\n if (typeof def === 'string') {\n if (def.charAt(0) === '+') {\n defs[name] = parseProj(arguments[1]);\n }\n else {\n defs[name] = wkt(arguments[1]);\n }\n } else {\n defs[name] = def;\n }\n }\n else if (arguments.length === 1) {\n if (Array.isArray(name)) {\n return name.map(function(v) {\n if (Array.isArray(v)) {\n defs.apply(that, v);\n }\n else {\n defs(v);\n }\n });\n }\n else if (typeof name === 'string') {\n if (name in defs) {\n return defs[name];\n }\n }\n else if ('EPSG' in name) {\n defs['EPSG:' + name.EPSG] = name;\n }\n else if ('ESRI' in name) {\n defs['ESRI:' + name.ESRI] = name;\n }\n else if ('IAU2000' in name) {\n defs['IAU2000:' + name.IAU2000] = name;\n }\n else {\n console.log(name);\n }\n return;\n }\n\n\n}\nglobals(defs);\nexport default defs;\n","export default function(defs) {\n defs('EPSG:4326', \"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\");\n defs('EPSG:4269', \"+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\");\n defs('EPSG:3857', \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs\");\n // UTM WGS84\n for (var i = 1; i <= 60; ++i) {\n defs('EPSG:' + (32600 + i), \"+proj=utm +zone=\" + i + \" +datum=WGS84 +units=m\");\n defs('EPSG:' + (32700 + i), \"+proj=utm +zone=\" + i + \" +south +datum=WGS84 +units=m\");\n }\n\n defs.WGS84 = defs['EPSG:4326'];\n defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857\n defs.GOOGLE = defs['EPSG:3857'];\n defs['EPSG:900913'] = defs['EPSG:3857'];\n defs['EPSG:102113'] = defs['EPSG:3857'];\n}\n","import defs from './defs';\nimport wkt from 'wkt-parser';\nimport projStr from './projString';\nimport match from './match';\nfunction testObj(code){\n return typeof code === 'string';\n}\nfunction testDef(code){\n return code in defs;\n}\nvar codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\nfunction testWKT(code){\n return codeWords.some(function (word) {\n return code.indexOf(word) > -1;\n });\n}\nvar codes = ['3857', '900913', '3785', '102113'];\nfunction checkMercator(item) {\n var auth = match(item, 'authority');\n if (!auth) {\n return;\n }\n var code = match(auth, 'epsg');\n return code && codes.indexOf(code) > -1;\n}\nfunction checkProjStr(item) {\n var ext = match(item, 'extension');\n if (!ext) {\n return;\n }\n return match(ext, 'proj4');\n}\nfunction testProj(code){\n return code[0] === '+';\n}\nfunction parse(code){\n if (testObj(code)) {\n //check to see if this is a WKT string\n if (testDef(code)) {\n return defs[code];\n }\n if (testWKT(code)) {\n var out = wkt(code);\n // test of spetial case, due to this being a very common and often malformed\n if (checkMercator(out)) {\n return defs['EPSG:3857'];\n }\n var maybeProjStr = checkProjStr(out);\n if (maybeProjStr) {\n return projStr(maybeProjStr);\n }\n return out;\n }\n if (testProj(code)) {\n return projStr(code);\n }\n }else{\n return code;\n }\n}\n\nexport default parse;\n","export default function(destination, source) {\n destination = destination || {};\n var value, property;\n if (!source) {\n return destination;\n }\n for (property in source) {\n value = source[property];\n if (value !== undefined) {\n destination[property] = value;\n }\n }\n return destination;\n}\n","export default function(eccent, sinphi, cosphi) {\n var con = eccent * sinphi;\n return cosphi / (Math.sqrt(1 - con * con));\n}","export default function(x) {\n return x<0 ? -1 : 1;\n}","\nimport {TWO_PI, SPI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, phi, sinphi) {\n var con = eccent * sinphi;\n var com = 0.5 * eccent;\n con = Math.pow(((1 - con) / (1 + con)), com);\n return (Math.tan(0.5 * (HALF_PI - phi)) / con);\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, ts) {\n var eccnth = 0.5 * eccent;\n var con, dphi;\n var phi = HALF_PI - 2 * Math.atan(ts);\n for (var i = 0; i <= 15; i++) {\n con = eccent * Math.sin(phi);\n dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n //console.log(\"phi2z has NoConvergence\");\n return -9999;\n}\n","export function init() {\n //no-op for longlat\n}\n\nfunction identity(pt) {\n return pt;\n}\nexport {identity as forward};\nexport {identity as inverse};\nexport var names = [\"longlat\", \"identity\"];\nexport default {\n init: init,\n forward: identity,\n inverse: identity,\n names: names\n};\n","import merc from \"./projections/merc\";\nimport longlat from \"./projections/longlat\";\nvar projs = [merc, longlat];\nvar names = {};\nvar projStore = [];\n\nfunction add(proj, i) {\n var len = projStore.length;\n if (!proj.names) {\n console.log(i);\n return true;\n }\n projStore[len] = proj;\n proj.names.forEach(function(n) {\n names[n.toLowerCase()] = len;\n });\n return this;\n}\n\nexport {add};\n\nexport function get(name) {\n if (!name) {\n return false;\n }\n var n = name.toLowerCase();\n if (typeof names[n] !== 'undefined' && projStore[names[n]]) {\n return projStore[names[n]];\n }\n}\n\nexport function start() {\n projs.forEach(add);\n}\nexport default {\n start: start,\n add: add,\n get: get\n};\n","import msfnz from '../common/msfnz';\n\nimport adjust_lon from '../common/adjust_lon';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport {FORTPI, R2D, EPSLN, HALF_PI} from '../constants/values';\nexport function init() {\n var con = this.b / this.a;\n this.es = 1 - con * con;\n if(!('x0' in this)){\n this.x0 = 0;\n }\n if(!('y0' in this)){\n this.y0 = 0;\n }\n this.e = Math.sqrt(this.es);\n if (this.lat_ts) {\n if (this.sphere) {\n this.k0 = Math.cos(this.lat_ts);\n }\n else {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n }\n else {\n if (!this.k0) {\n if (this.k) {\n this.k0 = this.k;\n }\n else {\n this.k0 = 1;\n }\n }\n }\n}\n\n/* Mercator forward equations--mapping lat,long to x,y\n --------------------------------------------------*/\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n // convert to radians\n if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {\n return null;\n }\n\n var x, y;\n if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n return null;\n }\n else {\n if (this.sphere) {\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\n }\n else {\n var sinphi = Math.sin(lat);\n var ts = tsfnz(this.e, lat, sinphi);\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 - this.a * this.k0 * Math.log(ts);\n }\n p.x = x;\n p.y = y;\n return p;\n }\n}\n\n/* Mercator inverse equations--mapping x,y to lat/long\n --------------------------------------------------*/\nexport function inverse(p) {\n\n var x = p.x - this.x0;\n var y = p.y - this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));\n }\n else {\n var ts = Math.exp(-y / (this.a * this.k0));\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n lon = adjust_lon(this.long0 + x / (this.a * this.k0));\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Mercator\", \"Popular Visualisation Pseudo Mercator\", \"Mercator_1SP\", \"Mercator_Auxiliary_Sphere\", \"merc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","var exports = {};\nexport {exports as default};\nexports.MERIT = {\n a: 6378137.0,\n rf: 298.257,\n ellipseName: \"MERIT 1983\"\n};\n\nexports.SGS85 = {\n a: 6378136.0,\n rf: 298.257,\n ellipseName: \"Soviet Geodetic System 85\"\n};\n\nexports.GRS80 = {\n a: 6378137.0,\n rf: 298.257222101,\n ellipseName: \"GRS 1980(IUGG, 1980)\"\n};\n\nexports.IAU76 = {\n a: 6378140.0,\n rf: 298.257,\n ellipseName: \"IAU 1976\"\n};\n\nexports.airy = {\n a: 6377563.396,\n b: 6356256.910,\n ellipseName: \"Airy 1830\"\n};\n\nexports.APL4 = {\n a: 6378137,\n rf: 298.25,\n ellipseName: \"Appl. Physics. 1965\"\n};\n\nexports.NWL9D = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"Naval Weapons Lab., 1965\"\n};\n\nexports.mod_airy = {\n a: 6377340.189,\n b: 6356034.446,\n ellipseName: \"Modified Airy\"\n};\n\nexports.andrae = {\n a: 6377104.43,\n rf: 300.0,\n ellipseName: \"Andrae 1876 (Den., Iclnd.)\"\n};\n\nexports.aust_SA = {\n a: 6378160.0,\n rf: 298.25,\n ellipseName: \"Australian Natl & S. Amer. 1969\"\n};\n\nexports.GRS67 = {\n a: 6378160.0,\n rf: 298.2471674270,\n ellipseName: \"GRS 67(IUGG 1967)\"\n};\n\nexports.bessel = {\n a: 6377397.155,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841\"\n};\n\nexports.bess_nam = {\n a: 6377483.865,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841 (Namibia)\"\n};\n\nexports.clrk66 = {\n a: 6378206.4,\n b: 6356583.8,\n ellipseName: \"Clarke 1866\"\n};\n\nexports.clrk80 = {\n a: 6378249.145,\n rf: 293.4663,\n ellipseName: \"Clarke 1880 mod.\"\n};\n\nexports.clrk80ign = {\n a: 6378249.2,\n b: 6356515,\n rf: 293.4660213,\n ellipseName: \"Clarke 1880 (IGN)\"\n};\n\nexports.clrk58 = {\n a: 6378293.645208759,\n rf: 294.2606763692654,\n ellipseName: \"Clarke 1858\"\n};\n\nexports.CPM = {\n a: 6375738.7,\n rf: 334.29,\n ellipseName: \"Comm. des Poids et Mesures 1799\"\n};\n\nexports.delmbr = {\n a: 6376428.0,\n rf: 311.5,\n ellipseName: \"Delambre 1810 (Belgium)\"\n};\n\nexports.engelis = {\n a: 6378136.05,\n rf: 298.2566,\n ellipseName: \"Engelis 1985\"\n};\n\nexports.evrst30 = {\n a: 6377276.345,\n rf: 300.8017,\n ellipseName: \"Everest 1830\"\n};\n\nexports.evrst48 = {\n a: 6377304.063,\n rf: 300.8017,\n ellipseName: \"Everest 1948\"\n};\n\nexports.evrst56 = {\n a: 6377301.243,\n rf: 300.8017,\n ellipseName: \"Everest 1956\"\n};\n\nexports.evrst69 = {\n a: 6377295.664,\n rf: 300.8017,\n ellipseName: \"Everest 1969\"\n};\n\nexports.evrstSS = {\n a: 6377298.556,\n rf: 300.8017,\n ellipseName: \"Everest (Sabah & Sarawak)\"\n};\n\nexports.fschr60 = {\n a: 6378166.0,\n rf: 298.3,\n ellipseName: \"Fischer (Mercury Datum) 1960\"\n};\n\nexports.fschr60m = {\n a: 6378155.0,\n rf: 298.3,\n ellipseName: \"Fischer 1960\"\n};\n\nexports.fschr68 = {\n a: 6378150.0,\n rf: 298.3,\n ellipseName: \"Fischer 1968\"\n};\n\nexports.helmert = {\n a: 6378200.0,\n rf: 298.3,\n ellipseName: \"Helmert 1906\"\n};\n\nexports.hough = {\n a: 6378270.0,\n rf: 297.0,\n ellipseName: \"Hough\"\n};\n\nexports.intl = {\n a: 6378388.0,\n rf: 297.0,\n ellipseName: \"International 1909 (Hayford)\"\n};\n\nexports.kaula = {\n a: 6378163.0,\n rf: 298.24,\n ellipseName: \"Kaula 1961\"\n};\n\nexports.lerch = {\n a: 6378139.0,\n rf: 298.257,\n ellipseName: \"Lerch 1979\"\n};\n\nexports.mprts = {\n a: 6397300.0,\n rf: 191.0,\n ellipseName: \"Maupertius 1738\"\n};\n\nexports.new_intl = {\n a: 6378157.5,\n b: 6356772.2,\n ellipseName: \"New International 1967\"\n};\n\nexports.plessis = {\n a: 6376523.0,\n rf: 6355863.0,\n ellipseName: \"Plessis 1817 (France)\"\n};\n\nexports.krass = {\n a: 6378245.0,\n rf: 298.3,\n ellipseName: \"Krassovsky, 1942\"\n};\n\nexports.SEasia = {\n a: 6378155.0,\n b: 6356773.3205,\n ellipseName: \"Southeast Asia\"\n};\n\nexports.walbeck = {\n a: 6376896.0,\n b: 6355834.8467,\n ellipseName: \"Walbeck\"\n};\n\nexports.WGS60 = {\n a: 6378165.0,\n rf: 298.3,\n ellipseName: \"WGS 60\"\n};\n\nexports.WGS66 = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"WGS 66\"\n};\n\nexports.WGS7 = {\n a: 6378135.0,\n rf: 298.26,\n ellipseName: \"WGS 72\"\n};\n\nexport var WGS84 = exports.WGS84 = {\n a: 6378137.0,\n rf: 298.257223563,\n ellipseName: \"WGS 84\"\n};\n\nexports.sphere = {\n a: 6370997.0,\n b: 6370997.0,\n ellipseName: \"Normal Sphere (r=6370997)\"\n};\n","var datums = {\n wgs84: {\n towgs84: \"0,0,0\",\n ellipse: \"WGS84\",\n datumName: \"WGS84\"\n },\n ch1903: {\n towgs84: \"674.374,15.056,405.346\",\n ellipse: \"bessel\",\n datumName: \"swiss\"\n },\n ggrs87: {\n towgs84: \"-199.87,74.79,246.62\",\n ellipse: \"GRS80\",\n datumName: \"Greek_Geodetic_Reference_System_1987\"\n },\n nad83: {\n towgs84: \"0,0,0\",\n ellipse: \"GRS80\",\n datumName: \"North_American_Datum_1983\"\n },\n nad27: {\n nadgrids: \"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",\n ellipse: \"clrk66\",\n datumName: \"North_American_Datum_1927\"\n },\n potsdam: {\n towgs84: \"598.1,73.7,418.2,0.202,0.045,-2.455,6.7\",\n ellipse: \"bessel\",\n datumName: \"Potsdam Rauenberg 1950 DHDN\"\n },\n carthage: {\n towgs84: \"-263.0,6.0,431.0\",\n ellipse: \"clark80\",\n datumName: \"Carthage 1934 Tunisia\"\n },\n hermannskogel: {\n towgs84: \"577.326,90.129,463.919,5.137,1.474,5.297,2.4232\",\n ellipse: \"bessel\",\n datumName: \"Hermannskogel\"\n },\n mgi: {\n towgs84: \"577.326,90.129,463.919,5.137,1.474,5.297,2.4232\",\n ellipse: \"bessel\",\n datumName: \"Militar-Geographische Institut\",\n },\n osni52: {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"airy\",\n datumName: \"Irish National\"\n },\n ire65: {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"mod_airy\",\n datumName: \"Ireland 1965\"\n },\n rassadiran: {\n towgs84: \"-133.63,-157.5,-158.62\",\n ellipse: \"intl\",\n datumName: \"Rassadiran\"\n },\n nzgd49: {\n towgs84: \"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",\n ellipse: \"intl\",\n datumName: \"New Zealand Geodetic Datum 1949\"\n },\n osgb36: {\n towgs84: \"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",\n ellipse: \"airy\",\n datumName: \"Ordnance Survey of Great Britain 1936\"\n },\n s_jtsk: {\n towgs84: \"589,76,480\",\n ellipse: 'bessel',\n datumName: 'S-JTSK (Ferro)'\n },\n beduaram: {\n towgs84: '-106,-87,188',\n ellipse: 'clrk80',\n datumName: 'Beduaram'\n },\n gunung_segara: {\n towgs84: '-403,684,41',\n ellipse: 'bessel',\n datumName: 'Gunung Segara Jakarta'\n },\n rnb72: {\n towgs84: \"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1\",\n ellipse: \"intl\",\n datumName: \"Reseau National Belge 1972\"\n }\n};\n\nfor (var key in datums) {\n var datum = datums[key];\n datums[datum.datumName] = datum;\n}\n\nexport default datums;\n","import {PJD_3PARAM, PJD_7PARAM, PJD_GRIDSHIFT, PJD_WGS84, PJD_NODATUM, SEC_TO_RAD} from './constants/values';\n\nfunction datum(datumCode, datum_params, a, b, es, ep2, nadgrids) {\n var out = {};\n\n if (datumCode === undefined || datumCode === 'none') {\n out.datum_type = PJD_NODATUM;\n } else {\n out.datum_type = PJD_WGS84;\n }\n\n if (datum_params) {\n out.datum_params = datum_params.map(parseFloat);\n if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {\n out.datum_type = PJD_3PARAM;\n }\n if (out.datum_params.length > 3) {\n if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {\n out.datum_type = PJD_7PARAM;\n out.datum_params[3] *= SEC_TO_RAD;\n out.datum_params[4] *= SEC_TO_RAD;\n out.datum_params[5] *= SEC_TO_RAD;\n out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;\n }\n }\n }\n\n if (nadgrids) {\n out.datum_type = PJD_GRIDSHIFT;\n out.grids = nadgrids;\n }\n out.a = a; //datum object also uses these values\n out.b = b;\n out.es = es;\n out.ep2 = ep2;\n return out;\n}\n\nexport default datum;\n","/**\n * Resources for details of NTv2 file formats:\n * - https://web.archive.org/web/20140127204822if_/http://www.mgs.gov.on.ca:80/stdprodconsume/groups/content/@mgs/@iandit/documents/resourcelist/stel02_047447.pdf\n * - http://mimaka.com/help/gs/html/004_NTV2%20Data%20Format.htm\n */\n\nvar loadedNadgrids = {};\n\n/**\n * Load a binary NTv2 file (.gsb) to a key that can be used in a proj string like +nadgrids=. Pass the NTv2 file\n * as an ArrayBuffer.\n */\nexport default function nadgrid(key, data) {\n var view = new DataView(data);\n var isLittleEndian = detectLittleEndian(view);\n var header = readHeader(view, isLittleEndian);\n var subgrids = readSubgrids(view, header, isLittleEndian);\n var nadgrid = {header: header, subgrids: subgrids};\n loadedNadgrids[key] = nadgrid;\n return nadgrid;\n}\n\n/**\n * Given a proj4 value for nadgrids, return an array of loaded grids\n */\nexport function getNadgrids(nadgrids) {\n // Format details: http://proj.maptools.org/gen_parms.html\n if (nadgrids === undefined) { return null; }\n var grids = nadgrids.split(',');\n return grids.map(parseNadgridString);\n}\n\nfunction parseNadgridString(value) {\n if (value.length === 0) {\n return null;\n }\n var optional = value[0] === '@';\n if (optional) {\n value = value.slice(1);\n }\n if (value === 'null') {\n return {name: 'null', mandatory: !optional, grid: null, isNull: true};\n }\n return {\n name: value,\n mandatory: !optional,\n grid: loadedNadgrids[value] || null,\n isNull: false\n };\n}\n\nfunction secondsToRadians(seconds) {\n return (seconds / 3600) * Math.PI / 180;\n}\n\nfunction detectLittleEndian(view) {\n var nFields = view.getInt32(8, false);\n if (nFields === 11) {\n return false;\n }\n nFields = view.getInt32(8, true);\n if (nFields !== 11) {\n console.warn('Failed to detect nadgrid endian-ness, defaulting to little-endian');\n }\n return true;\n}\n\nfunction readHeader(view, isLittleEndian) {\n return {\n nFields: view.getInt32(8, isLittleEndian),\n nSubgridFields: view.getInt32(24, isLittleEndian),\n nSubgrids: view.getInt32(40, isLittleEndian),\n shiftType: decodeString(view, 56, 56 + 8).trim(),\n fromSemiMajorAxis: view.getFloat64(120, isLittleEndian),\n fromSemiMinorAxis: view.getFloat64(136, isLittleEndian),\n toSemiMajorAxis: view.getFloat64(152, isLittleEndian),\n toSemiMinorAxis: view.getFloat64(168, isLittleEndian),\n };\n}\n\nfunction decodeString(view, start, end) {\n return String.fromCharCode.apply(null, new Uint8Array(view.buffer.slice(start, end)));\n}\n\nfunction readSubgrids(view, header, isLittleEndian) {\n var gridOffset = 176;\n var grids = [];\n for (var i = 0; i < header.nSubgrids; i++) {\n var subHeader = readGridHeader(view, gridOffset, isLittleEndian);\n var nodes = readGridNodes(view, gridOffset, subHeader, isLittleEndian);\n var lngColumnCount = Math.round(\n 1 + (subHeader.upperLongitude - subHeader.lowerLongitude) / subHeader.longitudeInterval);\n var latColumnCount = Math.round(\n 1 + (subHeader.upperLatitude - subHeader.lowerLatitude) / subHeader.latitudeInterval);\n // Proj4 operates on radians whereas the coordinates are in seconds in the grid\n grids.push({\n ll: [secondsToRadians(subHeader.lowerLongitude), secondsToRadians(subHeader.lowerLatitude)],\n del: [secondsToRadians(subHeader.longitudeInterval), secondsToRadians(subHeader.latitudeInterval)],\n lim: [lngColumnCount, latColumnCount],\n count: subHeader.gridNodeCount,\n cvs: mapNodes(nodes)\n });\n gridOffset += 176 + subHeader.gridNodeCount * 16;\n }\n return grids;\n}\n\nfunction mapNodes(nodes) {\n return nodes.map(function (r) {return [secondsToRadians(r.longitudeShift), secondsToRadians(r.latitudeShift)];});\n}\n\nfunction readGridHeader(view, offset, isLittleEndian) {\n return {\n name: decodeString(view, offset + 8, offset + 16).trim(),\n parent: decodeString(view, offset + 24, offset + 24 + 8).trim(),\n lowerLatitude: view.getFloat64(offset + 72, isLittleEndian),\n upperLatitude: view.getFloat64(offset + 88, isLittleEndian),\n lowerLongitude: view.getFloat64(offset + 104, isLittleEndian),\n upperLongitude: view.getFloat64(offset + 120, isLittleEndian),\n latitudeInterval: view.getFloat64(offset + 136, isLittleEndian),\n longitudeInterval: view.getFloat64(offset + 152, isLittleEndian),\n gridNodeCount: view.getInt32(offset + 168, isLittleEndian)\n };\n}\n\nfunction readGridNodes(view, offset, gridHeader, isLittleEndian) {\n var nodesOffset = offset + 176;\n var gridRecordLength = 16;\n var gridShiftRecords = [];\n for (var i = 0; i < gridHeader.gridNodeCount; i++) {\n var record = {\n latitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength, isLittleEndian),\n longitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength + 4, isLittleEndian),\n latitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 8, isLittleEndian),\n longitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 12, isLittleEndian),\n };\n gridShiftRecords.push(record);\n }\n return gridShiftRecords;\n}\n","import parseCode from './parseCode';\nimport extend from './extend';\nimport projections from './projections';\nimport {sphere as dc_sphere, eccentricity as dc_eccentricity} from './deriveConstants';\nimport Datum from './constants/Datum';\nimport datum from './datum';\nimport match from './match';\nimport {getNadgrids} from \"./nadgrid\";\n\nfunction Projection(srsCode,callback) {\n if (!(this instanceof Projection)) {\n return new Projection(srsCode);\n }\n callback = callback || function(error){\n if(error){\n throw error;\n }\n };\n var json = parseCode(srsCode);\n if(typeof json !== 'object'){\n callback('Could not parse to valid json: ' + srsCode);\n return;\n }\n var ourProj = Projection.projections.get(json.projName);\n if(!ourProj){\n callback('Could not get projection name from: ' + srsCode);\n return;\n }\n if (json.datumCode && json.datumCode !== 'none') {\n var datumDef = match(Datum, json.datumCode);\n if (datumDef) {\n json.datum_params = json.datum_params || (datumDef.towgs84 ? datumDef.towgs84.split(',') : null);\n json.ellps = datumDef.ellipse;\n json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;\n }\n }\n json.k0 = json.k0 || 1.0;\n json.axis = json.axis || 'enu';\n json.ellps = json.ellps || 'wgs84';\n json.lat1 = json.lat1 || json.lat0; // Lambert_Conformal_Conic_1SP, for example, needs this\n\n var sphere_ = dc_sphere(json.a, json.b, json.rf, json.ellps, json.sphere);\n var ecc = dc_eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);\n var nadgrids = getNadgrids(json.nadgrids);\n var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2,\n nadgrids);\n\n extend(this, json); // transfer everything over from the projection because we don't know what we'll need\n extend(this, ourProj); // transfer all the methods from the projection\n\n // copy the 4 things over we calculated in deriveConstants.sphere\n this.a = sphere_.a;\n this.b = sphere_.b;\n this.rf = sphere_.rf;\n this.sphere = sphere_.sphere;\n\n // copy the 3 things we calculated in deriveConstants.eccentricity\n this.es = ecc.es;\n this.e = ecc.e;\n this.ep2 = ecc.ep2;\n\n // add in the datum object\n this.datum = datumObj;\n\n // init the projection\n this.init();\n\n // legecy callback from back in the day when it went to spatialreference.org\n callback(null, this);\n\n}\nProjection.projections = projections;\nProjection.projections.start();\nexport default Projection;\n","import {SIXTH, RA4, RA6, EPSLN} from './constants/values';\nimport {default as Ellipsoid, WGS84} from './constants/Ellipsoid';\nimport match from './match';\n\nexport function eccentricity(a, b, rf, R_A) {\n var a2 = a * a; // used in geocentric\n var b2 = b * b; // used in geocentric\n var es = (a2 - b2) / a2; // e ^ 2\n var e = 0;\n if (R_A) {\n a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));\n a2 = a * a;\n es = 0;\n } else {\n e = Math.sqrt(es); // eccentricity\n }\n var ep2 = (a2 - b2) / b2; // used in geocentric\n return {\n es: es,\n e: e,\n ep2: ep2\n };\n}\nexport function sphere(a, b, rf, ellps, sphere) {\n if (!a) { // do we have an ellipsoid?\n var ellipse = match(Ellipsoid, ellps);\n if (!ellipse) {\n ellipse = WGS84;\n }\n a = ellipse.a;\n b = ellipse.b;\n rf = ellipse.rf;\n }\n\n if (rf && !b) {\n b = (1.0 - 1.0 / rf) * a;\n }\n if (rf === 0 || Math.abs(a - b) < EPSLN) {\n sphere = true;\n b = a;\n }\n return {\n a: a,\n b: b,\n rf: rf,\n sphere: sphere\n };\n}\n","'use strict';\nimport {PJD_3PARAM, PJD_7PARAM, HALF_PI} from './constants/values';\nexport function compareDatums(source, dest) {\n if (source.datum_type !== dest.datum_type) {\n return false; // false, datums are not equal\n } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {\n // the tolerance for es is to ensure that GRS80 and WGS84\n // are considered identical\n return false;\n } else if (source.datum_type === PJD_3PARAM) {\n return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);\n } else if (source.datum_type === PJD_7PARAM) {\n return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);\n } else {\n return true; // datums are equal\n }\n} // cs_compare_datums()\n\n/*\n * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates\n * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),\n * according to the current ellipsoid parameters.\n *\n * Latitude : Geodetic latitude in radians (input)\n * Longitude : Geodetic longitude in radians (input)\n * Height : Geodetic height, in meters (input)\n * X : Calculated Geocentric X coordinate, in meters (output)\n * Y : Calculated Geocentric Y coordinate, in meters (output)\n * Z : Calculated Geocentric Z coordinate, in meters (output)\n *\n */\nexport function geodeticToGeocentric(p, es, a) {\n var Longitude = p.x;\n var Latitude = p.y;\n var Height = p.z ? p.z : 0; //Z value not always supplied\n\n var Rn; /* Earth radius at location */\n var Sin_Lat; /* Math.sin(Latitude) */\n var Sin2_Lat; /* Square of Math.sin(Latitude) */\n var Cos_Lat; /* Math.cos(Latitude) */\n\n /*\n ** Don't blow up if Latitude is just a little out of the value\n ** range as it may just be a rounding issue. Also removed longitude\n ** test, it should be wrapped by Math.cos() and Math.sin(). NFW for PROJ.4, Sep/2001.\n */\n if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {\n Latitude = -HALF_PI;\n } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n Latitude = HALF_PI;\n } else if (Latitude < -HALF_PI) {\n /* Latitude out of range */\n //..reportError('geocent:lat out of range:' + Latitude);\n return { x: -Infinity, y: -Infinity, z: p.z };\n } else if (Latitude > HALF_PI) {\n /* Latitude out of range */\n return { x: Infinity, y: Infinity, z: p.z };\n }\n\n if (Longitude > Math.PI) {\n Longitude -= (2 * Math.PI);\n }\n Sin_Lat = Math.sin(Latitude);\n Cos_Lat = Math.cos(Latitude);\n Sin2_Lat = Sin_Lat * Sin_Lat;\n Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));\n return {\n x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),\n y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),\n z: ((Rn * (1 - es)) + Height) * Sin_Lat\n };\n} // cs_geodetic_to_geocentric()\n\nexport function geocentricToGeodetic(p, es, a, b) {\n /* local defintions and variables */\n /* end-criterium of loop, accuracy of sin(Latitude) */\n var genau = 1e-12;\n var genau2 = (genau * genau);\n var maxiter = 30;\n\n var P; /* distance between semi-minor axis and location */\n var RR; /* distance between center and location */\n var CT; /* sin of geocentric latitude */\n var ST; /* cos of geocentric latitude */\n var RX;\n var RK;\n var RN; /* Earth radius at location */\n var CPHI0; /* cos of start or old geodetic latitude in iterations */\n var SPHI0; /* sin of start or old geodetic latitude in iterations */\n var CPHI; /* cos of searched geodetic latitude */\n var SPHI; /* sin of searched geodetic latitude */\n var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */\n var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */\n\n var X = p.x;\n var Y = p.y;\n var Z = p.z ? p.z : 0.0; //Z value not always supplied\n var Longitude;\n var Latitude;\n var Height;\n\n P = Math.sqrt(X * X + Y * Y);\n RR = Math.sqrt(X * X + Y * Y + Z * Z);\n\n /* special cases for latitude and longitude */\n if (P / a < genau) {\n\n /* special case, if P=0. (X=0., Y=0.) */\n Longitude = 0.0;\n\n /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis\n * of ellipsoid (=center of mass), Latitude becomes PI/2 */\n if (RR / a < genau) {\n Latitude = HALF_PI;\n Height = -b;\n return {\n x: p.x,\n y: p.y,\n z: p.z\n };\n }\n } else {\n /* ellipsoidal (geodetic) longitude\n * interval: -PI < Longitude <= +PI */\n Longitude = Math.atan2(Y, X);\n }\n\n /* --------------------------------------------------------------\n * Following iterative algorithm was developped by\n * \"Institut for Erdmessung\", University of Hannover, July 1988.\n * Internet: www.ife.uni-hannover.de\n * Iterative computation of CPHI,SPHI and Height.\n * Iteration of CPHI and SPHI to 10**-12 radian resp.\n * 2*10**-7 arcsec.\n * --------------------------------------------------------------\n */\n CT = Z / RR;\n ST = P / RR;\n RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);\n CPHI0 = ST * (1.0 - es) * RX;\n SPHI0 = CT * RX;\n iter = 0;\n\n /* loop to find sin(Latitude) resp. Latitude\n * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */\n do {\n iter++;\n RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);\n\n /* ellipsoidal (geodetic) height */\n Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);\n\n RK = es * RN / (RN + Height);\n RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);\n CPHI = ST * (1.0 - RK) * RX;\n SPHI = CT * RX;\n SDPHI = SPHI * CPHI0 - CPHI * SPHI0;\n CPHI0 = CPHI;\n SPHI0 = SPHI;\n }\n while (SDPHI * SDPHI > genau2 && iter < maxiter);\n\n /* ellipsoidal (geodetic) latitude */\n Latitude = Math.atan(SPHI / Math.abs(CPHI));\n return {\n x: Longitude,\n y: Latitude,\n z: Height\n };\n} // cs_geocentric_to_geodetic()\n\n/****************************************************************/\n// pj_geocentic_to_wgs84( p )\n// p = point to transform in geocentric coordinates (x,y,z)\n\n\n/** point object, nothing fancy, just allows values to be\n passed back and forth by reference rather than by value.\n Other point classes may be used as long as they have\n x and y properties, which will get modified in the transform method.\n*/\nexport function geocentricToWgs84(p, datum_type, datum_params) {\n\n if (datum_type === PJD_3PARAM) {\n // if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: p.x + datum_params[0],\n y: p.y + datum_params[1],\n z: p.z + datum_params[2],\n };\n } else if (datum_type === PJD_7PARAM) {\n var Dx_BF = datum_params[0];\n var Dy_BF = datum_params[1];\n var Dz_BF = datum_params[2];\n var Rx_BF = datum_params[3];\n var Ry_BF = datum_params[4];\n var Rz_BF = datum_params[5];\n var M_BF = datum_params[6];\n // if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,\n y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,\n z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF\n };\n }\n} // cs_geocentric_to_wgs84\n\n/****************************************************************/\n// pj_geocentic_from_wgs84()\n// coordinate system definition,\n// point to transform in geocentric coordinates (x,y,z)\nexport function geocentricFromWgs84(p, datum_type, datum_params) {\n\n if (datum_type === PJD_3PARAM) {\n //if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: p.x - datum_params[0],\n y: p.y - datum_params[1],\n z: p.z - datum_params[2],\n };\n\n } else if (datum_type === PJD_7PARAM) {\n var Dx_BF = datum_params[0];\n var Dy_BF = datum_params[1];\n var Dz_BF = datum_params[2];\n var Rx_BF = datum_params[3];\n var Ry_BF = datum_params[4];\n var Rz_BF = datum_params[5];\n var M_BF = datum_params[6];\n var x_tmp = (p.x - Dx_BF) / M_BF;\n var y_tmp = (p.y - Dy_BF) / M_BF;\n var z_tmp = (p.z - Dz_BF) / M_BF;\n //if( x[io] === HUGE_VAL )\n // continue;\n\n return {\n x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,\n y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,\n z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp\n };\n } //cs_geocentric_from_wgs84()\n}\n","import {\n PJD_3PARAM,\n PJD_7PARAM,\n PJD_GRIDSHIFT,\n PJD_NODATUM,\n R2D,\n SRS_WGS84_ESQUARED,\n SRS_WGS84_SEMIMAJOR, SRS_WGS84_SEMIMINOR\n} from './constants/values';\n\nimport {geodeticToGeocentric, geocentricToGeodetic, geocentricToWgs84, geocentricFromWgs84, compareDatums} from './datumUtils';\nimport adjust_lon from \"./common/adjust_lon\";\nfunction checkParams(type) {\n return (type === PJD_3PARAM || type === PJD_7PARAM);\n}\n\nexport default function(source, dest, point) {\n // Short cut if the datums are identical.\n if (compareDatums(source, dest)) {\n return point; // in this case, zero is sucess,\n // whereas cs_compare_datums returns 1 to indicate TRUE\n // confusing, should fix this\n }\n\n // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest\n if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {\n return point;\n }\n\n // If this datum requires grid shifts, then apply it to geodetic coordinates.\n var source_a = source.a;\n var source_es = source.es;\n if (source.datum_type === PJD_GRIDSHIFT) {\n var gridShiftCode = applyGridShift(source, false, point);\n if (gridShiftCode !== 0) {\n return undefined;\n }\n source_a = SRS_WGS84_SEMIMAJOR;\n source_es = SRS_WGS84_ESQUARED;\n }\n\n var dest_a = dest.a;\n var dest_b = dest.b;\n var dest_es = dest.es;\n if (dest.datum_type === PJD_GRIDSHIFT) {\n dest_a = SRS_WGS84_SEMIMAJOR;\n dest_b = SRS_WGS84_SEMIMINOR;\n dest_es = SRS_WGS84_ESQUARED;\n }\n\n // Do we need to go through geocentric coordinates?\n if (source_es === dest_es && source_a === dest_a && !checkParams(source.datum_type) && !checkParams(dest.datum_type)) {\n return point;\n }\n\n // Convert to geocentric coordinates.\n point = geodeticToGeocentric(point, source_es, source_a);\n // Convert between datums\n if (checkParams(source.datum_type)) {\n point = geocentricToWgs84(point, source.datum_type, source.datum_params);\n }\n if (checkParams(dest.datum_type)) {\n point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);\n }\n point = geocentricToGeodetic(point, dest_es, dest_a, dest_b);\n\n if (dest.datum_type === PJD_GRIDSHIFT) {\n var destGridShiftResult = applyGridShift(dest, true, point);\n if (destGridShiftResult !== 0) {\n return undefined;\n }\n }\n\n return point;\n}\n\nexport function applyGridShift(source, inverse, point) {\n if (source.grids === null || source.grids.length === 0) {\n console.log('Grid shift grids not found');\n return -1;\n }\n var input = {x: -point.x, y: point.y};\n var output = {x: Number.NaN, y: Number.NaN};\n var onlyMandatoryGrids = false;\n var attemptedGrids = [];\n outer:\n for (var i = 0; i < source.grids.length; i++) {\n var grid = source.grids[i];\n attemptedGrids.push(grid.name);\n if (grid.isNull) {\n output = input;\n break;\n }\n onlyMandatoryGrids = grid.mandatory;\n if (grid.grid === null) {\n if (grid.mandatory) {\n console.log(\"Unable to find mandatory grid '\" + grid.name + \"'\");\n return -1;\n }\n continue;\n }\n var subgrids = grid.grid.subgrids;\n for (var j = 0, jj = subgrids.length; j < jj; j++) {\n var subgrid = subgrids[j];\n // skip tables that don't match our point at all\n var epsilon = (Math.abs(subgrid.del[1]) + Math.abs(subgrid.del[0])) / 10000.0;\n var minX = subgrid.ll[0] - epsilon;\n var minY = subgrid.ll[1] - epsilon;\n var maxX = subgrid.ll[0] + (subgrid.lim[0] - 1) * subgrid.del[0] + epsilon;\n var maxY = subgrid.ll[1] + (subgrid.lim[1] - 1) * subgrid.del[1] + epsilon;\n if (minY > input.y || minX > input.x || maxY < input.y || maxX < input.x ) {\n continue;\n }\n output = applySubgridShift(input, inverse, subgrid);\n if (!isNaN(output.x)) {\n break outer;\n }\n }\n }\n if (isNaN(output.x)) {\n console.log(\"Failed to find a grid shift table for location '\"+\n -input.x * R2D + \" \" + input.y * R2D + \" tried: '\" + attemptedGrids + \"'\");\n return -1;\n }\n point.x = -output.x;\n point.y = output.y;\n return 0;\n}\n\nfunction applySubgridShift(pin, inverse, ct) {\n var val = {x: Number.NaN, y: Number.NaN};\n if (isNaN(pin.x)) { return val; }\n var tb = {x: pin.x, y: pin.y};\n tb.x -= ct.ll[0];\n tb.y -= ct.ll[1];\n tb.x = adjust_lon(tb.x - Math.PI) + Math.PI;\n var t = nadInterpolate(tb, ct);\n if (inverse) {\n if (isNaN(t.x)) {\n return val;\n }\n t.x = tb.x - t.x;\n t.y = tb.y - t.y;\n var i = 9, tol = 1e-12;\n var dif, del;\n do {\n del = nadInterpolate(t, ct);\n if (isNaN(del.x)) {\n console.log(\"Inverse grid shift iteration failed, presumably at grid edge. Using first approximation.\");\n break;\n }\n dif = {x: tb.x - (del.x + t.x), y: tb.y - (del.y + t.y)};\n t.x += dif.x;\n t.y += dif.y;\n } while (i-- && Math.abs(dif.x) > tol && Math.abs(dif.y) > tol);\n if (i < 0) {\n console.log(\"Inverse grid shift iterator failed to converge.\");\n return val;\n }\n val.x = adjust_lon(t.x + ct.ll[0]);\n val.y = t.y + ct.ll[1];\n } else {\n if (!isNaN(t.x)) {\n val.x = pin.x + t.x;\n val.y = pin.y + t.y;\n }\n }\n return val;\n}\n\nfunction nadInterpolate(pin, ct) {\n var t = {x: pin.x / ct.del[0], y: pin.y / ct.del[1]};\n var indx = {x: Math.floor(t.x), y: Math.floor(t.y)};\n var frct = {x: t.x - 1.0 * indx.x, y: t.y - 1.0 * indx.y};\n var val= {x: Number.NaN, y: Number.NaN};\n var inx;\n if (indx.x < 0 || indx.x >= ct.lim[0]) {\n return val;\n }\n if (indx.y < 0 || indx.y >= ct.lim[1]) {\n return val;\n }\n inx = (indx.y * ct.lim[0]) + indx.x;\n var f00 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx++;\n var f10= {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx += ct.lim[0];\n var f11 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx--;\n var f01 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n var m11 = frct.x * frct.y, m10 = frct.x * (1.0 - frct.y),\n m00 = (1.0 - frct.x) * (1.0 - frct.y), m01 = (1.0 - frct.x) * frct.y;\n val.x = (m00 * f00.x + m10 * f10.x + m01 * f01.x + m11 * f11.x);\n val.y = (m00 * f00.y + m10 * f10.y + m01 * f01.y + m11 * f11.y);\n return val;\n}\n","export default function(crs, denorm, point) {\n var xin = point.x,\n yin = point.y,\n zin = point.z || 0.0;\n var v, t, i;\n var out = {};\n for (i = 0; i < 3; i++) {\n if (denorm && i === 2 && point.z === undefined) {\n continue;\n }\n if (i === 0) {\n v = xin;\n if (\"ew\".indexOf(crs.axis[i]) !== -1) {\n t = 'x';\n } else {\n t = 'y';\n }\n\n }\n else if (i === 1) {\n v = yin;\n if (\"ns\".indexOf(crs.axis[i]) !== -1) {\n t = 'y';\n } else {\n t = 'x';\n }\n }\n else {\n v = zin;\n t = 'z';\n }\n switch (crs.axis[i]) {\n case 'e':\n out[t] = v;\n break;\n case 'w':\n out[t] = -v;\n break;\n case 'n':\n out[t] = v;\n break;\n case 's':\n out[t] = -v;\n break;\n case 'u':\n if (point[t] !== undefined) {\n out.z = v;\n }\n break;\n case 'd':\n if (point[t] !== undefined) {\n out.z = -v;\n }\n break;\n default:\n //console.log(\"ERROR: unknow axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n return null;\n }\n }\n return out;\n}\n","export default function (array){\n var out = {\n x: array[0],\n y: array[1]\n };\n if (array.length>2) {\n out.z = array[2];\n }\n if (array.length>3) {\n out.m = array[3];\n }\n return out;\n}","export default function (point) {\n checkCoord(point.x);\n checkCoord(point.y);\n}\nfunction checkCoord(num) {\n if (typeof Number.isFinite === 'function') {\n if (Number.isFinite(num)) {\n return;\n }\n throw new TypeError('coordinates must be finite numbers');\n }\n if (typeof num !== 'number' || num !== num || !isFinite(num)) {\n throw new TypeError('coordinates must be finite numbers');\n }\n}\n","import {D2R, R2D, PJD_3PARAM, PJD_7PARAM, PJD_GRIDSHIFT} from './constants/values';\nimport datum_transform from './datum_transform';\nimport adjust_axis from './adjust_axis';\nimport proj from './Proj';\nimport toPoint from './common/toPoint';\nimport checkSanity from './checkSanity';\n\nfunction checkNotWGS(source, dest) {\n return (\n (source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM || source.datum.datum_type === PJD_GRIDSHIFT) && dest.datumCode !== 'WGS84') ||\n ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM || dest.datum.datum_type === PJD_GRIDSHIFT) && source.datumCode !== 'WGS84');\n}\n\nexport default function transform(source, dest, point, enforceAxis) {\n var wgs84;\n if (Array.isArray(point)) {\n point = toPoint(point);\n } else {\n // Clone the point object so inputs don't get modified\n point = {\n x: point.x,\n y: point.y,\n z: point.z,\n m: point.m\n };\n }\n var hasZ = point.z !== undefined;\n checkSanity(point);\n // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n if (source.datum && dest.datum && checkNotWGS(source, dest)) {\n wgs84 = new proj('WGS84');\n point = transform(source, wgs84, point, enforceAxis);\n source = wgs84;\n }\n // DGR, 2010/11/12\n if (enforceAxis && source.axis !== 'enu') {\n point = adjust_axis(source, false, point);\n }\n // Transform source points to long/lat, if they aren't already.\n if (source.projName === 'longlat') {\n point = {\n x: point.x * D2R,\n y: point.y * D2R,\n z: point.z || 0\n };\n } else {\n if (source.to_meter) {\n point = {\n x: point.x * source.to_meter,\n y: point.y * source.to_meter,\n z: point.z || 0\n };\n }\n point = source.inverse(point); // Convert Cartesian to longlat\n if (!point) {\n return;\n }\n }\n // Adjust for the prime meridian if necessary\n if (source.from_greenwich) {\n point.x += source.from_greenwich;\n }\n\n // Convert datums if needed, and if possible.\n point = datum_transform(source.datum, dest.datum, point);\n if (!point) {\n return;\n }\n\n // Adjust for the prime meridian if necessary\n if (dest.from_greenwich) {\n point = {\n x: point.x - dest.from_greenwich,\n y: point.y,\n z: point.z || 0\n };\n }\n\n if (dest.projName === 'longlat') {\n // convert radians to decimal degrees\n point = {\n x: point.x * R2D,\n y: point.y * R2D,\n z: point.z || 0\n };\n } else { // else project\n point = dest.forward(point);\n if (dest.to_meter) {\n point = {\n x: point.x / dest.to_meter,\n y: point.y / dest.to_meter,\n z: point.z || 0\n };\n }\n }\n\n // DGR, 2010/11/12\n if (enforceAxis && dest.axis !== 'enu') {\n return adjust_axis(dest, true, point);\n }\n\n if (point && !hasZ) {\n delete point.z;\n }\n return point;\n}\n","import proj from './Proj';\nimport transform from './transform';\nvar wgs84 = proj('WGS84');\n\nfunction transformer(from, to, coords, enforceAxis) {\n var transformedArray, out, keys;\n if (Array.isArray(coords)) {\n transformedArray = transform(from, to, coords, enforceAxis) || {x: NaN, y: NaN};\n if (coords.length > 2) {\n if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n if (typeof transformedArray.z === 'number') {\n return [transformedArray.x, transformedArray.y, transformedArray.z].concat(coords.slice(3));\n } else {\n return [transformedArray.x, transformedArray.y, coords[2]].concat(coords.slice(3));\n }\n } else {\n return [transformedArray.x, transformedArray.y].concat(coords.slice(2));\n }\n } else {\n return [transformedArray.x, transformedArray.y];\n }\n } else {\n out = transform(from, to, coords, enforceAxis);\n keys = Object.keys(coords);\n if (keys.length === 2) {\n return out;\n }\n keys.forEach(function (key) {\n if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n if (key === 'x' || key === 'y' || key === 'z') {\n return;\n }\n } else {\n if (key === 'x' || key === 'y') {\n return;\n }\n }\n out[key] = coords[key];\n });\n return out;\n }\n}\n\nfunction checkProj(item) {\n if (item instanceof proj) {\n return item;\n }\n if (item.oProj) {\n return item.oProj;\n }\n return proj(item);\n}\n\nfunction proj4(fromProj, toProj, coord) {\n fromProj = checkProj(fromProj);\n var single = false;\n var obj;\n if (typeof toProj === 'undefined') {\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n } else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {\n coord = toProj;\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n }\n toProj = checkProj(toProj);\n if (coord) {\n return transformer(fromProj, toProj, coord);\n } else {\n obj = {\n forward: function (coords, enforceAxis) {\n return transformer(fromProj, toProj, coords, enforceAxis);\n },\n inverse: function (coords, enforceAxis) {\n return transformer(toProj, fromProj, coords, enforceAxis);\n }\n };\n if (single) {\n obj.oProj = toProj;\n }\n return obj;\n }\n}\nexport default proj4;","\n\n\n/**\n * UTM zones are grouped, and assigned to one of a group of 6\n * sets.\n *\n * {int} @private\n */\nvar NUM_100K_SETS = 6;\n\n/**\n * The column letters (for easting) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n/**\n * The row letters (for northing) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\nvar A = 65; // A\nvar I = 73; // I\nvar O = 79; // O\nvar V = 86; // V\nvar Z = 90; // Z\nexport default {\n forward: forward,\n inverse: inverse,\n toPoint: toPoint\n};\n/**\n * Conversion of lat/lon to MGRS.\n *\n * @param {object} ll Object literal with lat and lon properties on a\n * WGS84 ellipsoid.\n * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n * 100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.\n * @return {string} the MGRS string for the given location and accuracy.\n */\nexport function forward(ll, accuracy) {\n accuracy = accuracy || 5; // default accuracy 1m\n return encode(LLtoUTM({\n lat: ll[1],\n lon: ll[0]\n }), accuracy);\n};\n\n/**\n * Conversion of MGRS to lat/lon.\n *\n * @param {string} mgrs MGRS string.\n * @return {array} An array with left (longitude), bottom (latitude), right\n * (longitude) and top (latitude) values in WGS84, representing the\n * bounding box for the provided MGRS reference.\n */\nexport function inverse(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n if (bbox.lat && bbox.lon) {\n return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];\n }\n return [bbox.left, bbox.bottom, bbox.right, bbox.top];\n};\n\nexport function toPoint(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n if (bbox.lat && bbox.lon) {\n return [bbox.lon, bbox.lat];\n }\n return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];\n};\n/**\n * Conversion from degrees to radians.\n *\n * @private\n * @param {number} deg the angle in degrees.\n * @return {number} the angle in radians.\n */\nfunction degToRad(deg) {\n return (deg * (Math.PI / 180.0));\n}\n\n/**\n * Conversion from radians to degrees.\n *\n * @private\n * @param {number} rad the angle in radians.\n * @return {number} the angle in degrees.\n */\nfunction radToDeg(rad) {\n return (180.0 * (rad / Math.PI));\n}\n\n/**\n * Converts a set of Longitude and Latitude co-ordinates to UTM\n * using the WGS84 ellipsoid.\n *\n * @private\n * @param {object} ll Object literal with lat and lon properties\n * representing the WGS84 coordinate to be converted.\n * @return {object} Object literal containing the UTM value with easting,\n * northing, zoneNumber and zoneLetter properties, and an optional\n * accuracy property in digits. Returns null if the conversion failed.\n */\nfunction LLtoUTM(ll) {\n var Lat = ll.lat;\n var Long = ll.lon;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var k0 = 0.9996;\n var LongOrigin;\n var eccPrimeSquared;\n var N, T, C, A, M;\n var LatRad = degToRad(Lat);\n var LongRad = degToRad(Long);\n var LongOriginRad;\n var ZoneNumber;\n // (int)\n ZoneNumber = Math.floor((Long + 180) / 6) + 1;\n\n //Make sure the longitude 180.00 is in Zone 60\n if (Long === 180) {\n ZoneNumber = 60;\n }\n\n // Special zone for Norway\n if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {\n ZoneNumber = 32;\n }\n\n // Special zones for Svalbard\n if (Lat >= 72.0 && Lat < 84.0) {\n if (Long >= 0.0 && Long < 9.0) {\n ZoneNumber = 31;\n }\n else if (Long >= 9.0 && Long < 21.0) {\n ZoneNumber = 33;\n }\n else if (Long >= 21.0 && Long < 33.0) {\n ZoneNumber = 35;\n }\n else if (Long >= 33.0 && Long < 42.0) {\n ZoneNumber = 37;\n }\n }\n\n LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin\n // in middle of\n // zone\n LongOriginRad = degToRad(LongOrigin);\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));\n T = Math.tan(LatRad) * Math.tan(LatRad);\n C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);\n A = Math.cos(LatRad) * (LongRad - LongOriginRad);\n\n M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));\n\n var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);\n\n var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));\n if (Lat < 0.0) {\n UTMNorthing += 10000000.0; //10000000 meter offset for\n // southern hemisphere\n }\n\n return {\n northing: Math.round(UTMNorthing),\n easting: Math.round(UTMEasting),\n zoneNumber: ZoneNumber,\n zoneLetter: getLetterDesignator(Lat)\n };\n}\n\n/**\n * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience\n * class where the Zone can be specified as a single string eg.\"60N\" which\n * is then broken down into the ZoneNumber and ZoneLetter.\n *\n * @private\n * @param {object} utm An object literal with northing, easting, zoneNumber\n * and zoneLetter properties. If an optional accuracy property is\n * provided (in meters), a bounding box will be returned instead of\n * latitude and longitude.\n * @return {object} An object literal containing either lat and lon values\n * (if no accuracy was provided), or top, right, bottom and left values\n * for the bounding box calculated according to the provided accuracy.\n * Returns null if the conversion failed.\n */\nfunction UTMtoLL(utm) {\n\n var UTMNorthing = utm.northing;\n var UTMEasting = utm.easting;\n var zoneLetter = utm.zoneLetter;\n var zoneNumber = utm.zoneNumber;\n // check the ZoneNummber is valid\n if (zoneNumber < 0 || zoneNumber > 60) {\n return null;\n }\n\n var k0 = 0.9996;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var eccPrimeSquared;\n var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));\n var N1, T1, C1, R1, D, M;\n var LongOrigin;\n var mu, phi1Rad;\n\n // remove 500,000 meter offset for longitude\n var x = UTMEasting - 500000.0;\n var y = UTMNorthing;\n\n // We must know somehow if we are in the Northern or Southern\n // hemisphere, this is the only time we use the letter So even\n // if the Zone letter isn't exactly correct it should indicate\n // the hemisphere correctly\n if (zoneLetter < 'N') {\n y -= 10000000.0; // remove 10,000,000 meter offset used\n // for southern hemisphere\n }\n\n // There are 60 zones with zone 1 being at West -180 to -174\n LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin\n // in middle of\n // zone\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n M = y / k0;\n mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));\n\n phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);\n // double phi1 = ProjMath.radToDeg(phi1Rad);\n\n N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));\n T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);\n C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);\n R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);\n D = x / (N1 * k0);\n\n var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);\n lat = radToDeg(lat);\n\n var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);\n lon = LongOrigin + radToDeg(lon);\n\n var result;\n if (utm.accuracy) {\n var topRight = UTMtoLL({\n northing: utm.northing + utm.accuracy,\n easting: utm.easting + utm.accuracy,\n zoneLetter: utm.zoneLetter,\n zoneNumber: utm.zoneNumber\n });\n result = {\n top: topRight.lat,\n right: topRight.lon,\n bottom: lat,\n left: lon\n };\n }\n else {\n result = {\n lat: lat,\n lon: lon\n };\n }\n return result;\n}\n\n/**\n * Calculates the MGRS letter designator for the given latitude.\n *\n * @private\n * @param {number} lat The latitude in WGS84 to get the letter designator\n * for.\n * @return {char} The letter designator.\n */\nfunction getLetterDesignator(lat) {\n //This is here as an error flag to show that the Latitude is\n //outside MGRS limits\n var LetterDesignator = 'Z';\n\n if ((84 >= lat) && (lat >= 72)) {\n LetterDesignator = 'X';\n }\n else if ((72 > lat) && (lat >= 64)) {\n LetterDesignator = 'W';\n }\n else if ((64 > lat) && (lat >= 56)) {\n LetterDesignator = 'V';\n }\n else if ((56 > lat) && (lat >= 48)) {\n LetterDesignator = 'U';\n }\n else if ((48 > lat) && (lat >= 40)) {\n LetterDesignator = 'T';\n }\n else if ((40 > lat) && (lat >= 32)) {\n LetterDesignator = 'S';\n }\n else if ((32 > lat) && (lat >= 24)) {\n LetterDesignator = 'R';\n }\n else if ((24 > lat) && (lat >= 16)) {\n LetterDesignator = 'Q';\n }\n else if ((16 > lat) && (lat >= 8)) {\n LetterDesignator = 'P';\n }\n else if ((8 > lat) && (lat >= 0)) {\n LetterDesignator = 'N';\n }\n else if ((0 > lat) && (lat >= -8)) {\n LetterDesignator = 'M';\n }\n else if ((-8 > lat) && (lat >= -16)) {\n LetterDesignator = 'L';\n }\n else if ((-16 > lat) && (lat >= -24)) {\n LetterDesignator = 'K';\n }\n else if ((-24 > lat) && (lat >= -32)) {\n LetterDesignator = 'J';\n }\n else if ((-32 > lat) && (lat >= -40)) {\n LetterDesignator = 'H';\n }\n else if ((-40 > lat) && (lat >= -48)) {\n LetterDesignator = 'G';\n }\n else if ((-48 > lat) && (lat >= -56)) {\n LetterDesignator = 'F';\n }\n else if ((-56 > lat) && (lat >= -64)) {\n LetterDesignator = 'E';\n }\n else if ((-64 > lat) && (lat >= -72)) {\n LetterDesignator = 'D';\n }\n else if ((-72 > lat) && (lat >= -80)) {\n LetterDesignator = 'C';\n }\n return LetterDesignator;\n}\n\n/**\n * Encodes a UTM location as MGRS string.\n *\n * @private\n * @param {object} utm An object literal with easting, northing,\n * zoneLetter, zoneNumber\n * @param {number} accuracy Accuracy in digits (1-5).\n * @return {string} MGRS string for the given UTM location.\n */\nfunction encode(utm, accuracy) {\n // prepend with leading zeroes\n var seasting = \"00000\" + utm.easting,\n snorthing = \"00000\" + utm.northing;\n\n return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);\n}\n\n/**\n * Get the two letter 100k designator for a given UTM easting,\n * northing and zone number value.\n *\n * @private\n * @param {number} easting\n * @param {number} northing\n * @param {number} zoneNumber\n * @return the two letter 100k designator for the given UTM location.\n */\nfunction get100kID(easting, northing, zoneNumber) {\n var setParm = get100kSetForZone(zoneNumber);\n var setColumn = Math.floor(easting / 100000);\n var setRow = Math.floor(northing / 100000) % 20;\n return getLetter100kID(setColumn, setRow, setParm);\n}\n\n/**\n * Given a UTM zone number, figure out the MGRS 100K set it is in.\n *\n * @private\n * @param {number} i An UTM zone number.\n * @return {number} the 100k set the UTM zone is in.\n */\nfunction get100kSetForZone(i) {\n var setParm = i % NUM_100K_SETS;\n if (setParm === 0) {\n setParm = NUM_100K_SETS;\n }\n\n return setParm;\n}\n\n/**\n * Get the two-letter MGRS 100k designator given information\n * translated from the UTM northing, easting and zone number.\n *\n * @private\n * @param {number} column the column index as it relates to the MGRS\n * 100k set spreadsheet, created from the UTM easting.\n * Values are 1-8.\n * @param {number} row the row index as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM northing value. Values\n * are from 0-19.\n * @param {number} parm the set block, as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM zone. Values are from\n * 1-60.\n * @return two letter MGRS 100k code.\n */\nfunction getLetter100kID(column, row, parm) {\n // colOrigin and rowOrigin are the letters at the origin of the set\n var index = parm - 1;\n var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);\n var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);\n\n // colInt and rowInt are the letters to build to return\n var colInt = colOrigin + column - 1;\n var rowInt = rowOrigin + row;\n var rollover = false;\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n rollover = true;\n }\n\n if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {\n colInt++;\n }\n\n if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {\n colInt++;\n\n if (colInt === I) {\n colInt++;\n }\n }\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n rollover = true;\n }\n else {\n rollover = false;\n }\n\n if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {\n rowInt++;\n }\n\n if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {\n rowInt++;\n\n if (rowInt === I) {\n rowInt++;\n }\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n }\n\n var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);\n return twoLetter;\n}\n\n/**\n * Decode the UTM parameters from a MGRS string.\n *\n * @private\n * @param {string} mgrsString an UPPERCASE coordinate string is expected.\n * @return {object} An object literal with easting, northing, zoneLetter,\n * zoneNumber and accuracy (in meters) properties.\n */\nfunction decode(mgrsString) {\n\n if (mgrsString && mgrsString.length === 0) {\n throw (\"MGRSPoint coverting from nothing\");\n }\n\n var length = mgrsString.length;\n\n var hunK = null;\n var sb = \"\";\n var testChar;\n var i = 0;\n\n // get Zone number\n while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {\n if (i >= 2) {\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n sb += testChar;\n i++;\n }\n\n var zoneNumber = parseInt(sb, 10);\n\n if (i === 0 || i + 3 > length) {\n // A good MGRS string has to be 4-5 digits long,\n // ##AAA/#AAA at least.\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n\n var zoneLetter = mgrsString.charAt(i++);\n\n // Should we check the zone letter here? Why not.\n if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {\n throw (\"MGRSPoint zone letter \" + zoneLetter + \" not handled: \" + mgrsString);\n }\n\n hunK = mgrsString.substring(i, i += 2);\n\n var set = get100kSetForZone(zoneNumber);\n\n var east100k = getEastingFromChar(hunK.charAt(0), set);\n var north100k = getNorthingFromChar(hunK.charAt(1), set);\n\n // We have a bug where the northing may be 2000000 too low.\n // How\n // do we know when to roll over?\n\n while (north100k < getMinNorthing(zoneLetter)) {\n north100k += 2000000;\n }\n\n // calculate the char index for easting/northing separator\n var remainder = length - i;\n\n if (remainder % 2 !== 0) {\n throw (\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\" + mgrsString);\n }\n\n var sep = remainder / 2;\n\n var sepEasting = 0.0;\n var sepNorthing = 0.0;\n var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;\n if (sep > 0) {\n accuracyBonus = 100000.0 / Math.pow(10, sep);\n sepEastingString = mgrsString.substring(i, i + sep);\n sepEasting = parseFloat(sepEastingString) * accuracyBonus;\n sepNorthingString = mgrsString.substring(i + sep);\n sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;\n }\n\n easting = sepEasting + east100k;\n northing = sepNorthing + north100k;\n\n return {\n easting: easting,\n northing: northing,\n zoneLetter: zoneLetter,\n zoneNumber: zoneNumber,\n accuracy: accuracyBonus\n };\n}\n\n/**\n * Given the first letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the easting value that\n * should be added to the other, secondary easting value.\n *\n * @private\n * @param {char} e The first letter from a two-letter MGRS 100´k zone.\n * @param {number} set The MGRS table set for the zone number.\n * @return {number} The easting value for the given letter and set.\n */\nfunction getEastingFromChar(e, set) {\n // colOrigin is the letter at the origin of the set for the\n // column\n var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);\n var eastingValue = 100000.0;\n var rewindMarker = false;\n\n while (curCol !== e.charCodeAt(0)) {\n curCol++;\n if (curCol === I) {\n curCol++;\n }\n if (curCol === O) {\n curCol++;\n }\n if (curCol > Z) {\n if (rewindMarker) {\n throw (\"Bad character: \" + e);\n }\n curCol = A;\n rewindMarker = true;\n }\n eastingValue += 100000.0;\n }\n\n return eastingValue;\n}\n\n/**\n * Given the second letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the northing value that\n * should be added to the other, secondary northing value. You have to\n * remember that Northings are determined from the equator, and the vertical\n * cycle of letters mean a 2000000 additional northing meters. This happens\n * approx. every 18 degrees of latitude. This method does *NOT* count any\n * additional northings. You have to figure out how many 2000000 meters need\n * to be added for the zone letter of the MGRS coordinate.\n *\n * @private\n * @param {char} n Second letter of the MGRS 100k zone\n * @param {number} set The MGRS table set number, which is dependent on the\n * UTM zone number.\n * @return {number} The northing value for the given letter and set.\n */\nfunction getNorthingFromChar(n, set) {\n\n if (n > 'V') {\n throw (\"MGRSPoint given invalid Northing \" + n);\n }\n\n // rowOrigin is the letter at the origin of the set for the\n // column\n var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);\n var northingValue = 0.0;\n var rewindMarker = false;\n\n while (curRow !== n.charCodeAt(0)) {\n curRow++;\n if (curRow === I) {\n curRow++;\n }\n if (curRow === O) {\n curRow++;\n }\n // fixing a bug making whole application hang in this loop\n // when 'n' is a wrong character\n if (curRow > V) {\n if (rewindMarker) { // making sure that this loop ends\n throw (\"Bad character: \" + n);\n }\n curRow = A;\n rewindMarker = true;\n }\n northingValue += 100000.0;\n }\n\n return northingValue;\n}\n\n/**\n * The function getMinNorthing returns the minimum northing value of a MGRS\n * zone.\n *\n * Ported from Geotrans' c Lattitude_Band_Value structure table.\n *\n * @private\n * @param {char} zoneLetter The MGRS zone to get the min northing for.\n * @return {number}\n */\nfunction getMinNorthing(zoneLetter) {\n var northing;\n switch (zoneLetter) {\n case 'C':\n northing = 1100000.0;\n break;\n case 'D':\n northing = 2000000.0;\n break;\n case 'E':\n northing = 2800000.0;\n break;\n case 'F':\n northing = 3700000.0;\n break;\n case 'G':\n northing = 4600000.0;\n break;\n case 'H':\n northing = 5500000.0;\n break;\n case 'J':\n northing = 6400000.0;\n break;\n case 'K':\n northing = 7300000.0;\n break;\n case 'L':\n northing = 8200000.0;\n break;\n case 'M':\n northing = 9100000.0;\n break;\n case 'N':\n northing = 0.0;\n break;\n case 'P':\n northing = 800000.0;\n break;\n case 'Q':\n northing = 1700000.0;\n break;\n case 'R':\n northing = 2600000.0;\n break;\n case 'S':\n northing = 3500000.0;\n break;\n case 'T':\n northing = 4400000.0;\n break;\n case 'U':\n northing = 5300000.0;\n break;\n case 'V':\n northing = 6200000.0;\n break;\n case 'W':\n northing = 7000000.0;\n break;\n case 'X':\n northing = 7900000.0;\n break;\n default:\n northing = -1.0;\n }\n if (northing >= 0.0) {\n return northing;\n }\n else {\n throw (\"Invalid zone letter: \" + zoneLetter);\n }\n\n}\n","import {toPoint, forward} from 'mgrs';\n\nfunction Point(x, y, z) {\n if (!(this instanceof Point)) {\n return new Point(x, y, z);\n }\n if (Array.isArray(x)) {\n this.x = x[0];\n this.y = x[1];\n this.z = x[2] || 0.0;\n } else if(typeof x === 'object') {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z || 0.0;\n } else if (typeof x === 'string' && typeof y === 'undefined') {\n var coords = x.split(',');\n this.x = parseFloat(coords[0], 10);\n this.y = parseFloat(coords[1], 10);\n this.z = parseFloat(coords[2], 10) || 0.0;\n } else {\n this.x = x;\n this.y = y;\n this.z = z || 0.0;\n }\n console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');\n}\n\nPoint.fromMGRS = function(mgrsStr) {\n return new Point(toPoint(mgrsStr));\n};\nPoint.prototype.toMGRS = function(accuracy) {\n return forward([this.x, this.y], accuracy);\n};\nexport default Point;\n","var C00 = 1;\nvar C02 = 0.25;\nvar C04 = 0.046875;\nvar C06 = 0.01953125;\nvar C08 = 0.01068115234375;\nvar C22 = 0.75;\nvar C44 = 0.46875;\nvar C46 = 0.01302083333333333333;\nvar C48 = 0.00712076822916666666;\nvar C66 = 0.36458333333333333333;\nvar C68 = 0.00569661458333333333;\nvar C88 = 0.3076171875;\n\nexport default function(es) {\n var en = [];\n en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));\n en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));\n var t = es * es;\n en[2] = t * (C44 - es * (C46 + es * C48));\n t *= es;\n en[3] = t * (C66 - es * C68);\n en[4] = t * es * C88;\n return en;\n}","export default function(phi, sphi, cphi, en) {\n cphi *= sphi;\n sphi *= sphi;\n return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));\n}","import pj_mlfn from \"./pj_mlfn\";\nimport {EPSLN} from '../constants/values';\n\nvar MAX_ITER = 20;\n\nexport default function(arg, es, en) {\n var k = 1 / (1 - es);\n var phi = arg;\n for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */\n var s = Math.sin(phi);\n var t = 1 - es * s * s;\n //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;\n //phi -= t * (t * Math.sqrt(t)) * k;\n t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;\n phi -= t;\n if (Math.abs(t) < EPSLN) {\n return phi;\n }\n }\n //..reportError(\"cass:pj_inv_mlfn: Convergence error\");\n return phi;\n}\n","// Heavily based on this tmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js\n\nimport pj_enfn from '../common/pj_enfn';\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport adjust_lon from '../common/adjust_lon';\n\nimport {EPSLN, HALF_PI} from '../constants/values';\nimport sign from '../common/sign';\n\nexport function init() {\n this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n if (this.es) {\n this.en = pj_enfn(this.es);\n this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);\n }\n}\n\n/**\n Transverse Mercator Forward - long/lat to x/y\n long/lat in radians\n */\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var con;\n var x, y;\n var sin_phi = Math.sin(lat);\n var cos_phi = Math.cos(lat);\n\n if (!this.es) {\n var b = cos_phi * Math.sin(delta_lon);\n\n if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {\n return (93);\n }\n else {\n x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;\n y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));\n b = Math.abs(y);\n\n if (b >= 1) {\n if ((b - 1) > EPSLN) {\n return (93);\n }\n else {\n y = 0;\n }\n }\n else {\n y = Math.acos(y);\n }\n\n if (lat < 0) {\n y = -y;\n }\n\n y = this.a * this.k0 * (y - this.lat0) + this.y0;\n }\n }\n else {\n var al = cos_phi * delta_lon;\n var als = Math.pow(al, 2);\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var cs = Math.pow(c, 2);\n var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;\n var t = Math.pow(tq, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n al = al / Math.sqrt(con);\n var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);\n\n x = this.a * (this.k0 * al * (1 +\n als / 6 * (1 - t + c +\n als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +\n als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +\n this.x0;\n\n y = this.a * (this.k0 * (ml - this.ml0 +\n sin_phi * delta_lon * al / 2 * (1 +\n als / 12 * (5 - t + 9 * c + 4 * cs +\n als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +\n als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +\n this.y0;\n }\n\n p.x = x;\n p.y = y;\n\n return p;\n}\n\n/**\n Transverse Mercator Inverse - x/y to long/lat\n */\nexport function inverse(p) {\n var con, phi;\n var lat, lon;\n var x = (p.x - this.x0) * (1 / this.a);\n var y = (p.y - this.y0) * (1 / this.a);\n\n if (!this.es) {\n var f = Math.exp(x / this.k0);\n var g = 0.5 * (f - 1 / f);\n var temp = this.lat0 + y / this.k0;\n var h = Math.cos(temp);\n con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));\n lat = Math.asin(con);\n\n if (y < 0) {\n lat = -lat;\n }\n\n if ((g === 0) && (h === 0)) {\n lon = 0;\n }\n else {\n lon = adjust_lon(Math.atan2(g, h) + this.long0);\n }\n }\n else { // ellipsoidal form\n con = this.ml0 + y / this.k0;\n phi = pj_inv_mlfn(con, this.es, this.en);\n\n if (Math.abs(phi) < HALF_PI) {\n var sin_phi = Math.sin(phi);\n var cos_phi = Math.cos(phi);\n var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var cs = Math.pow(c, 2);\n var t = Math.pow(tan_phi, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n var d = x * Math.sqrt(con) / this.k0;\n var ds = Math.pow(d, 2);\n con = con * tan_phi;\n\n lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -\n ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -\n ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -\n ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));\n\n lon = adjust_lon(this.long0 + (d * (1 -\n ds / 6 * (1 + 2 * t + c -\n ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -\n ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));\n }\n else {\n lat = HALF_PI * sign(y);\n lon = 0;\n }\n }\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"Fast_Transverse_Mercator\", \"Fast Transverse Mercator\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(x) {\n var r = Math.exp(x);\n r = (r - 1 / r) / 2;\n return r;\n}","export default function(x, y) {\n x = Math.abs(x);\n y = Math.abs(y);\n var a = Math.max(x, y);\n var b = Math.min(x, y) / (a ? a : 1);\n\n return a * Math.sqrt(1 + Math.pow(b, 2));\n}\n","import hypot from './hypot';\nimport log1py from './log1py';\n\nexport default function(x) {\n var y = Math.abs(x);\n y = log1py(y * (1 + y / (hypot(1, y) + 1)));\n\n return x < 0 ? -y : y;\n}\n","export default function(x) {\n var y = 1 + x;\n var z = y - 1;\n\n return z === 0 ? x : x * Math.log(y) / z;\n}\n","export default function(pp, B) {\n var cos_2B = 2 * Math.cos(2 * B);\n var i = pp.length - 1;\n var h1 = pp[i];\n var h2 = 0;\n var h;\n\n while (--i >= 0) {\n h = -h2 + cos_2B * h1 + pp[i];\n h2 = h1;\n h1 = h;\n }\n\n return (B + h * Math.sin(2 * B));\n}\n","import sinh from './sinh';\nimport cosh from './cosh';\n\nexport default function(pp, arg_r, arg_i) {\n var sin_arg_r = Math.sin(arg_r);\n var cos_arg_r = Math.cos(arg_r);\n var sinh_arg_i = sinh(arg_i);\n var cosh_arg_i = cosh(arg_i);\n var r = 2 * cos_arg_r * cosh_arg_i;\n var i = -2 * sin_arg_r * sinh_arg_i;\n var j = pp.length - 1;\n var hr = pp[j];\n var hi1 = 0;\n var hr1 = 0;\n var hi = 0;\n var hr2;\n var hi2;\n\n while (--j >= 0) {\n hr2 = hr1;\n hi2 = hi1;\n hr1 = hr;\n hi1 = hi;\n hr = -hr2 + r * hr1 - i * hi1 + pp[j];\n hi = -hi2 + i * hr1 + r * hi1;\n }\n\n r = sin_arg_r * cosh_arg_i;\n i = cos_arg_r * sinh_arg_i;\n\n return [r * hr - i * hi, r * hi + i * hr];\n}\n","export default function(x) {\n var r = Math.exp(x);\n r = (r + 1 / r) / 2;\n return r;\n}","// Heavily based on this etmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js\n\nimport tmerc from '../projections/tmerc';\nimport sinh from '../common/sinh';\nimport hypot from '../common/hypot';\nimport asinhy from '../common/asinhy';\nimport gatg from '../common/gatg';\nimport clens from '../common/clens';\nimport clens_cmplx from '../common/clens_cmplx';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n if (!this.approx && (isNaN(this.es) || this.es <= 0)) {\n throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION[\"Fast_Transverse_Mercator\"] in the WKT.');\n }\n if (this.approx) {\n // When '+approx' is set, use tmerc instead\n tmerc.init.apply(this);\n this.forward = tmerc.forward;\n this.inverse = tmerc.inverse;\n }\n\n this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n this.cgb = [];\n this.cbg = [];\n this.utg = [];\n this.gtu = [];\n\n var f = this.es / (1 + Math.sqrt(1 - this.es));\n var n = f / (2 - f);\n var np = n;\n\n this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));\n this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));\n\n np = np * n;\n this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));\n this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));\n\n np = np * n;\n this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));\n this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));\n\n np = np * n;\n this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));\n this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));\n\n np = np * n;\n this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));\n this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));\n\n np = np * n;\n this.cgb[5] = np * (601676 / 22275);\n this.cbg[5] = np * (444337 / 155925);\n\n np = Math.pow(n, 2);\n this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));\n\n this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));\n this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));\n\n this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));\n this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));\n\n np = np * n;\n this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));\n this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));\n\n np = np * n;\n this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));\n this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));\n\n np = np * n;\n this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));\n this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));\n\n np = np * n;\n this.utg[5] = np * (-20648693 / 638668800);\n this.gtu[5] = np * (212378941 / 319334400);\n\n var Z = gatg(this.cbg, this.lat0);\n this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));\n}\n\nexport function forward(p) {\n var Ce = adjust_lon(p.x - this.long0);\n var Cn = p.y;\n\n Cn = gatg(this.cbg, Cn);\n var sin_Cn = Math.sin(Cn);\n var cos_Cn = Math.cos(Cn);\n var sin_Ce = Math.sin(Ce);\n var cos_Ce = Math.cos(Ce);\n\n Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);\n Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));\n Ce = asinhy(Math.tan(Ce));\n\n var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);\n\n Cn = Cn + tmp[0];\n Ce = Ce + tmp[1];\n\n var x;\n var y;\n\n if (Math.abs(Ce) <= 2.623395162778) {\n x = this.a * (this.Qn * Ce) + this.x0;\n y = this.a * (this.Qn * Cn + this.Zb) + this.y0;\n }\n else {\n x = Infinity;\n y = Infinity;\n }\n\n p.x = x;\n p.y = y;\n\n return p;\n}\n\nexport function inverse(p) {\n var Ce = (p.x - this.x0) * (1 / this.a);\n var Cn = (p.y - this.y0) * (1 / this.a);\n\n Cn = (Cn - this.Zb) / this.Qn;\n Ce = Ce / this.Qn;\n\n var lon;\n var lat;\n\n if (Math.abs(Ce) <= 2.623395162778) {\n var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);\n\n Cn = Cn + tmp[0];\n Ce = Ce + tmp[1];\n Ce = Math.atan(sinh(Ce));\n\n var sin_Cn = Math.sin(Cn);\n var cos_Cn = Math.cos(Cn);\n var sin_Ce = Math.sin(Ce);\n var cos_Ce = Math.cos(Ce);\n\n Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));\n Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);\n\n lon = adjust_lon(Ce + this.long0);\n lat = gatg(this.cgb, Cn);\n }\n else {\n lon = Infinity;\n lat = Infinity;\n }\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"Extended_Transverse_Mercator\", \"Extended Transverse Mercator\", \"etmerc\", \"Transverse_Mercator\", \"Transverse Mercator\", \"Gauss Kruger\", \"Gauss_Kruger\", \"tmerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(pp, arg_r) {\n var r = 2 * Math.cos(arg_r);\n var i = pp.length - 1;\n var hr1 = pp[i];\n var hr2 = 0;\n var hr;\n\n while (--i >= 0) {\n hr = -hr2 + r * hr1 + pp[i];\n hr2 = hr1;\n hr1 = hr;\n }\n\n return Math.sin(arg_r) * hr;\n}\n","import adjust_zone from '../common/adjust_zone';\nimport etmerc from './etmerc';\nexport var dependsOn = 'etmerc';\nimport {D2R} from '../constants/values';\n\n\nexport function init() {\n var zone = adjust_zone(this.zone, this.long0);\n if (zone === undefined) {\n throw new Error('unknown utm zone');\n }\n this.lat0 = 0;\n this.long0 = ((6 * Math.abs(zone)) - 183) * D2R;\n this.x0 = 500000;\n this.y0 = this.utmSouth ? 10000000 : 0;\n this.k0 = 0.9996;\n\n etmerc.init.apply(this);\n this.forward = etmerc.forward;\n this.inverse = etmerc.inverse;\n}\n\nexport var names = [\"Universal Transverse Mercator System\", \"utm\"];\nexport default {\n init: init,\n names: names,\n dependsOn: dependsOn\n};\n","import adjust_lon from './adjust_lon';\n\nexport default function(zone, lon) {\n if (zone === undefined) {\n zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;\n\n if (zone < 0) {\n return 0;\n } else if (zone > 60) {\n return 60;\n }\n }\n return zone;\n}\n","export default function(esinp, exp) {\n return (Math.pow((1 - esinp) / (1 + esinp), exp));\n}","import srat from '../common/srat';\nvar MAX_ITER = 20;\nimport {HALF_PI, FORTPI} from '../constants/values';\n\nexport function init() {\n var sphi = Math.sin(this.lat0);\n var cphi = Math.cos(this.lat0);\n cphi *= cphi;\n this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);\n this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));\n this.phic0 = Math.asin(sphi / this.C);\n this.ratexp = 0.5 * this.C * this.e;\n this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));\n}\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n\n p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;\n p.x = this.C * lon;\n return p;\n}\n\nexport function inverse(p) {\n var DEL_TOL = 1e-14;\n var lon = p.x / this.C;\n var lat = p.y;\n var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);\n for (var i = MAX_ITER; i > 0; --i) {\n lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;\n if (Math.abs(lat - p.y) < DEL_TOL) {\n break;\n }\n p.y = lat;\n }\n /* convergence failed */\n if (!i) {\n return null;\n }\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"gauss\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import gauss from './gauss';\nimport adjust_lon from '../common/adjust_lon';\nimport hypot from '../common/hypot';\n\nexport function init() {\n gauss.init.apply(this);\n if (!this.rc) {\n return;\n }\n this.sinc0 = Math.sin(this.phic0);\n this.cosc0 = Math.cos(this.phic0);\n this.R2 = 2 * this.rc;\n if (!this.title) {\n this.title = \"Oblique Stereographic Alternative\";\n }\n}\n\nexport function forward(p) {\n var sinc, cosc, cosl, k;\n p.x = adjust_lon(p.x - this.long0);\n gauss.forward.apply(this, [p]);\n sinc = Math.sin(p.y);\n cosc = Math.cos(p.y);\n cosl = Math.cos(p.x);\n k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);\n p.x = k * cosc * Math.sin(p.x);\n p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);\n p.x = this.a * p.x + this.x0;\n p.y = this.a * p.y + this.y0;\n return p;\n}\n\nexport function inverse(p) {\n var sinc, cosc, lon, lat, rho;\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n if ((rho = hypot(p.x, p.y))) {\n var c = 2 * Math.atan2(rho, this.R2);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);\n lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n gauss.inverse.apply(this, [p]);\n p.x = adjust_lon(p.x + this.long0);\n return p;\n}\n\nexport var names = [\"Stereographic_North_Pole\", \"Oblique_Stereographic\", \"sterea\",\"Oblique Stereographic Alternative\",\"Double_Stereographic\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {EPSLN, HALF_PI} from '../constants/values';\n\nimport sign from '../common/sign';\nimport msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function ssfn_(phit, sinphi, eccen) {\n sinphi *= eccen;\n return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));\n}\n\nexport function init() {\n\n // setting default parameters\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n\n this.coslat0 = Math.cos(this.lat0);\n this.sinlat0 = Math.sin(this.lat0);\n if (this.sphere) {\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));\n }\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (this.lat0 > 0) {\n //North pole\n //trace('stere:north pole');\n this.con = 1;\n }\n else {\n //South pole\n //trace('stere:south pole');\n this.con = -1;\n }\n }\n this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN && Math.abs(Math.cos(this.lat_ts)) > EPSLN) {\n // When k0 is 1 (default value) and lat_ts is a vaild number and lat0 is at a pole and lat_ts is not at a pole\n // Recalculate k0 using formula 21-35 from p161 of Snyder, 1987\n this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));\n }\n this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);\n this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;\n this.cosX0 = Math.cos(this.X0);\n this.sinX0 = Math.sin(this.X0);\n }\n}\n\n// Stereographic forward equations--mapping lat,long to x,y\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var sinlat = Math.sin(lat);\n var coslat = Math.cos(lat);\n var A, X, sinX, cosX, ts, rh;\n var dlon = adjust_lon(lon - this.long0);\n\n if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {\n //case of the origine point\n //trace('stere:this is the origin point');\n p.x = NaN;\n p.y = NaN;\n return p;\n }\n if (this.sphere) {\n //trace('stere:sphere case');\n A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));\n p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;\n p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;\n return p;\n }\n else {\n X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;\n cosX = Math.cos(X);\n sinX = Math.sin(X);\n if (Math.abs(this.coslat0) <= EPSLN) {\n ts = tsfnz(this.e, lat * this.con, this.con * sinlat);\n rh = 2 * this.a * this.k0 * ts / this.cons;\n p.x = this.x0 + rh * Math.sin(lon - this.long0);\n p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);\n //trace(p.toString());\n return p;\n }\n else if (Math.abs(this.sinlat0) < EPSLN) {\n //Eq\n //trace('stere:equateur');\n A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));\n p.y = A * sinX;\n }\n else {\n //other case\n //trace('stere:normal case');\n A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));\n p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;\n }\n p.x = A * cosX * Math.sin(dlon) + this.x0;\n }\n //trace(p.toString());\n return p;\n}\n\n//* Stereographic inverse equations--mapping x,y to lat/long\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat, ts, ce, Chi;\n var rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (this.sphere) {\n var c = 2 * Math.atan(rh / (2 * this.a * this.k0));\n lon = this.long0;\n lat = this.lat0;\n if (rh <= EPSLN) {\n p.x = lon;\n p.y = lat;\n return p;\n }\n lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);\n if (Math.abs(this.coslat0) < EPSLN) {\n if (this.lat0 > 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n }\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));\n }\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (rh <= EPSLN) {\n lat = this.lat0;\n lon = this.long0;\n p.x = lon;\n p.y = lat;\n //trace(p.toString());\n return p;\n }\n p.x *= this.con;\n p.y *= this.con;\n ts = rh * this.cons / (2 * this.a * this.k0);\n lat = this.con * phi2z(this.e, ts);\n lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));\n lon = this.long0;\n if (rh <= EPSLN) {\n Chi = this.X0;\n }\n else {\n Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));\n }\n lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));\n }\n }\n p.x = lon;\n p.y = lat;\n\n //trace(p.toString());\n return p;\n\n}\n\nexport var names = [\"stere\", \"Stereographic_South_Pole\", \"Polar Stereographic (variant B)\", \"Polar_Stereographic\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n ssfn_: ssfn_\n};\n","/*\n references:\n Formules et constantes pour le Calcul pour la\n projection cylindrique conforme à axe oblique et pour la transformation entre\n des systèmes de référence.\n http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf\n */\n\nexport function init() {\n var phy0 = this.lat0;\n this.lambda0 = this.long0;\n var sinPhy0 = Math.sin(phy0);\n var semiMajorAxis = this.a;\n var invF = this.rf;\n var flattening = 1 / invF;\n var e2 = 2 * flattening - Math.pow(flattening, 2);\n var e = this.e = Math.sqrt(e2);\n this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));\n this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));\n this.b0 = Math.asin(sinPhy0 / this.alpha);\n var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));\n var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));\n var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));\n this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;\n}\n\nexport function forward(p) {\n var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));\n var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));\n var S = -this.alpha * (Sa1 + Sa2) + this.K;\n\n // spheric latitude\n var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);\n\n // spheric longitude\n var I = this.alpha * (p.x - this.lambda0);\n\n // psoeudo equatorial rotation\n var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));\n\n var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));\n\n p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;\n p.x = this.R * rotI + this.x0;\n return p;\n}\n\nexport function inverse(p) {\n var Y = p.x - this.x0;\n var X = p.y - this.y0;\n\n var rotI = Y / this.R;\n var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);\n\n var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));\n var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));\n\n var lambda = this.lambda0 + I / this.alpha;\n\n var S = 0;\n var phy = b;\n var prevPhy = -1000;\n var iteration = 0;\n while (Math.abs(phy - prevPhy) > 0.0000001) {\n if (++iteration > 20) {\n //...reportError(\"omercFwdInfinity\");\n return;\n }\n //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));\n S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));\n prevPhy = phy;\n phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;\n }\n\n p.x = lambda;\n p.y = phy;\n return p;\n}\n\nexport var names = [\"somerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import tsfnz from '../common/tsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport { D2R, EPSLN, HALF_PI, TWO_PI, FORTPI } from '../constants/values';\n\nvar TOL = 1e-7;\n\nfunction isTypeA(P) {\n var typeAProjections = ['Hotine_Oblique_Mercator','Hotine_Oblique_Mercator_Azimuth_Natural_Origin'];\n var projectionName = typeof P.PROJECTION === \"object\" ? Object.keys(P.PROJECTION)[0] : P.PROJECTION;\n \n return 'no_uoff' in P || 'no_off' in P || typeAProjections.indexOf(projectionName) !== -1;\n}\n\n\n/* Initialize the Oblique Mercator projection\n ------------------------------------------*/\nexport function init() { \n var con, com, cosph0, D, F, H, L, sinph0, p, J, gamma = 0,\n gamma0, lamc = 0, lam1 = 0, lam2 = 0, phi1 = 0, phi2 = 0, alpha_c = 0, AB;\n \n // only Type A uses the no_off or no_uoff property\n // https://github.com/OSGeo/proj.4/issues/104\n this.no_off = isTypeA(this);\n this.no_rot = 'no_rot' in this;\n \n var alp = false;\n if (\"alpha\" in this) {\n alp = true;\n }\n\n var gam = false;\n if (\"rectified_grid_angle\" in this) {\n gam = true;\n }\n\n if (alp) {\n alpha_c = this.alpha;\n }\n \n if (gam) {\n gamma = (this.rectified_grid_angle * D2R);\n }\n \n if (alp || gam) {\n lamc = this.longc;\n } else {\n lam1 = this.long1;\n phi1 = this.lat1;\n lam2 = this.long2;\n phi2 = this.lat2;\n \n if (Math.abs(phi1 - phi2) <= TOL || (con = Math.abs(phi1)) <= TOL ||\n Math.abs(con - HALF_PI) <= TOL || Math.abs(Math.abs(this.lat0) - HALF_PI) <= TOL ||\n Math.abs(Math.abs(phi2) - HALF_PI) <= TOL) {\n throw new Error();\n }\n }\n \n var one_es = 1.0 - this.es;\n com = Math.sqrt(one_es);\n \n if (Math.abs(this.lat0) > EPSLN) {\n sinph0 = Math.sin(this.lat0);\n cosph0 = Math.cos(this.lat0);\n con = 1 - this.es * sinph0 * sinph0;\n this.B = cosph0 * cosph0;\n this.B = Math.sqrt(1 + this.es * this.B * this.B / one_es);\n this.A = this.B * this.k0 * com / con;\n D = this.B * com / (cosph0 * Math.sqrt(con));\n F = D * D -1;\n \n if (F <= 0) {\n F = 0;\n } else {\n F = Math.sqrt(F);\n if (this.lat0 < 0) {\n F = -F;\n }\n }\n \n this.E = F += D;\n this.E *= Math.pow(tsfnz(this.e, this.lat0, sinph0), this.B);\n } else {\n this.B = 1 / com;\n this.A = this.k0;\n this.E = D = F = 1;\n }\n \n if (alp || gam) {\n if (alp) {\n gamma0 = Math.asin(Math.sin(alpha_c) / D);\n if (!gam) {\n gamma = alpha_c;\n }\n } else {\n gamma0 = gamma;\n alpha_c = Math.asin(D * Math.sin(gamma0));\n }\n this.lam0 = lamc - Math.asin(0.5 * (F - 1 / F) * Math.tan(gamma0)) / this.B;\n } else {\n H = Math.pow(tsfnz(this.e, phi1, Math.sin(phi1)), this.B);\n L = Math.pow(tsfnz(this.e, phi2, Math.sin(phi2)), this.B);\n F = this.E / H;\n p = (L - H) / (L + H);\n J = this.E * this.E;\n J = (J - L * H) / (J + L * H);\n con = lam1 - lam2;\n \n if (con < -Math.pi) {\n lam2 -=TWO_PI;\n } else if (con > Math.pi) {\n lam2 += TWO_PI;\n }\n \n this.lam0 = adjust_lon(0.5 * (lam1 + lam2) - Math.atan(J * Math.tan(0.5 * this.B * (lam1 - lam2)) / p) / this.B);\n gamma0 = Math.atan(2 * Math.sin(this.B * adjust_lon(lam1 - this.lam0)) / (F - 1 / F));\n gamma = alpha_c = Math.asin(D * Math.sin(gamma0));\n }\n \n this.singam = Math.sin(gamma0);\n this.cosgam = Math.cos(gamma0);\n this.sinrot = Math.sin(gamma);\n this.cosrot = Math.cos(gamma);\n \n this.rB = 1 / this.B;\n this.ArB = this.A * this.rB;\n this.BrA = 1 / this.ArB;\n AB = this.A * this.B;\n \n if (this.no_off) {\n this.u_0 = 0;\n } else {\n this.u_0 = Math.abs(this.ArB * Math.atan(Math.sqrt(D * D - 1) / Math.cos(alpha_c)));\n \n if (this.lat0 < 0) {\n this.u_0 = - this.u_0;\n } \n }\n \n F = 0.5 * gamma0;\n this.v_pole_n = this.ArB * Math.log(Math.tan(FORTPI - F));\n this.v_pole_s = this.ArB * Math.log(Math.tan(FORTPI + F));\n}\n\n\n/* Oblique Mercator forward equations--mapping lat,long to x,y\n ----------------------------------------------------------*/\nexport function forward(p) {\n var coords = {};\n var S, T, U, V, W, temp, u, v;\n p.x = p.x - this.lam0;\n \n if (Math.abs(Math.abs(p.y) - HALF_PI) > EPSLN) {\n W = this.E / Math.pow(tsfnz(this.e, p.y, Math.sin(p.y)), this.B);\n \n temp = 1 / W;\n S = 0.5 * (W - temp);\n T = 0.5 * (W + temp);\n V = Math.sin(this.B * p.x);\n U = (S * this.singam - V * this.cosgam) / T;\n \n if (Math.abs(Math.abs(U) - 1.0) < EPSLN) {\n throw new Error();\n }\n \n v = 0.5 * this.ArB * Math.log((1 - U)/(1 + U));\n temp = Math.cos(this.B * p.x);\n \n if (Math.abs(temp) < TOL) {\n u = this.A * p.x;\n } else {\n u = this.ArB * Math.atan2((S * this.cosgam + V * this.singam), temp);\n } \n } else {\n v = p.y > 0 ? this.v_pole_n : this.v_pole_s;\n u = this.ArB * p.y;\n }\n \n if (this.no_rot) {\n coords.x = u;\n coords.y = v;\n } else {\n u -= this.u_0;\n coords.x = v * this.cosrot + u * this.sinrot;\n coords.y = u * this.cosrot - v * this.sinrot;\n }\n \n coords.x = (this.a * coords.x + this.x0);\n coords.y = (this.a * coords.y + this.y0);\n \n return coords;\n}\n\nexport function inverse(p) {\n var u, v, Qp, Sp, Tp, Vp, Up;\n var coords = {};\n \n p.x = (p.x - this.x0) * (1.0 / this.a);\n p.y = (p.y - this.y0) * (1.0 / this.a);\n\n if (this.no_rot) {\n v = p.y;\n u = p.x;\n } else {\n v = p.x * this.cosrot - p.y * this.sinrot;\n u = p.y * this.cosrot + p.x * this.sinrot + this.u_0;\n }\n \n Qp = Math.exp(-this.BrA * v);\n Sp = 0.5 * (Qp - 1 / Qp);\n Tp = 0.5 * (Qp + 1 / Qp);\n Vp = Math.sin(this.BrA * u);\n Up = (Vp * this.cosgam + Sp * this.singam) / Tp;\n \n if (Math.abs(Math.abs(Up) - 1) < EPSLN) {\n coords.x = 0;\n coords.y = Up < 0 ? -HALF_PI : HALF_PI;\n } else {\n coords.y = this.E / Math.sqrt((1 + Up) / (1 - Up));\n coords.y = phi2z(this.e, Math.pow(coords.y, 1 / this.B));\n \n if (coords.y === Infinity) {\n throw new Error();\n }\n \n coords.x = -this.rB * Math.atan2((Sp * this.cosgam - Vp * this.singam), Math.cos(this.BrA * u));\n }\n \n coords.x += this.lam0;\n \n return coords;\n}\n\nexport var names = [\"Hotine_Oblique_Mercator\", \"Hotine Oblique Mercator\", \"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\", \"Hotine_Oblique_Mercator_Two_Point_Natural_Origin\", \"Hotine_Oblique_Mercator_Azimuth_Center\", \"Oblique_Mercator\", \"omerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport sign from '../common/sign';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport {HALF_PI, EPSLN} from '../constants/values';\nexport function init() {\n \n //double lat0; /* the reference latitude */\n //double long0; /* the reference longitude */\n //double lat1; /* first standard parallel */\n //double lat2; /* second standard parallel */\n //double r_maj; /* major axis */\n //double r_min; /* minor axis */\n //double false_east; /* x offset in meters */\n //double false_north; /* y offset in meters */\n \n //the above value can be set with proj4.defs\n //example: proj4.defs(\"EPSG:2154\",\"+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs\");\n\n if (!this.lat2) {\n this.lat2 = this.lat1;\n } //if lat2 is not defined\n if (!this.k0) {\n this.k0 = 1;\n }\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n\n var temp = this.b / this.a;\n this.e = Math.sqrt(1 - temp * temp);\n\n var sin1 = Math.sin(this.lat1);\n var cos1 = Math.cos(this.lat1);\n var ms1 = msfnz(this.e, sin1, cos1);\n var ts1 = tsfnz(this.e, this.lat1, sin1);\n\n var sin2 = Math.sin(this.lat2);\n var cos2 = Math.cos(this.lat2);\n var ms2 = msfnz(this.e, sin2, cos2);\n var ts2 = tsfnz(this.e, this.lat2, sin2);\n\n var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);\n }\n else {\n this.ns = sin1;\n }\n if (isNaN(this.ns)) {\n this.ns = sin1;\n }\n this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));\n this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);\n if (!this.title) {\n this.title = \"Lambert Conformal Conic\";\n }\n}\n\n// Lambert Conformal conic forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n // singular cases :\n if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {\n lat = sign(lat) * (HALF_PI - 2 * EPSLN);\n }\n\n var con = Math.abs(Math.abs(lat) - HALF_PI);\n var ts, rh1;\n if (con > EPSLN) {\n ts = tsfnz(this.e, lat, Math.sin(lat));\n rh1 = this.a * this.f0 * Math.pow(ts, this.ns);\n }\n else {\n con = lat * this.ns;\n if (con <= 0) {\n return null;\n }\n rh1 = 0;\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;\n p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;\n\n return p;\n}\n\n// Lambert Conformal Conic inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n var rh1, con, ts;\n var lat, lon;\n var x = (p.x - this.x0) / this.k0;\n var y = (this.rh - (p.y - this.y0) / this.k0);\n if (this.ns > 0) {\n rh1 = Math.sqrt(x * x + y * y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(x * x + y * y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2((con * x), (con * y));\n }\n if ((rh1 !== 0) || (this.ns > 0)) {\n con = 1 / this.ns;\n ts = Math.pow((rh1 / (this.a * this.f0)), con);\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n else {\n lat = -HALF_PI;\n }\n lon = adjust_lon(theta / this.ns + this.long0);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\n \"Lambert Tangential Conformal Conic Projection\",\n \"Lambert_Conformal_Conic\",\n \"Lambert_Conformal_Conic_1SP\",\n \"Lambert_Conformal_Conic_2SP\",\n \"lcc\",\n \"Lambert Conic Conformal (1SP)\",\n \"Lambert Conic Conformal (2SP)\"\n];\n\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n this.a = 6377397.155;\n this.es = 0.006674372230614;\n this.e = Math.sqrt(this.es);\n if (!this.lat0) {\n this.lat0 = 0.863937979737193;\n }\n if (!this.long0) {\n this.long0 = 0.7417649320975901 - 0.308341501185665;\n }\n /* if scale not set default to 0.9999 */\n if (!this.k0) {\n this.k0 = 0.9999;\n }\n this.s45 = 0.785398163397448; /* 45 */\n this.s90 = 2 * this.s45;\n this.fi0 = this.lat0;\n this.e2 = this.es;\n this.e = Math.sqrt(this.e2);\n this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));\n this.uq = 1.04216856380474;\n this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);\n this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);\n this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;\n this.k1 = this.k0;\n this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));\n this.s0 = 1.37008346281555;\n this.n = Math.sin(this.s0);\n this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);\n this.ad = this.s90 - this.uq;\n}\n\n/* ellipsoid */\n/* calculate xy from lat/lon */\n/* Constants, identical to inverse transform function */\nexport function forward(p) {\n var gfi, u, deltav, s, d, eps, ro;\n var lon = p.x;\n var lat = p.y;\n var delta_lon = adjust_lon(lon - this.long0);\n /* Transformation */\n gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));\n u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);\n deltav = -delta_lon * this.alfa;\n s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));\n d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));\n eps = this.n * d;\n ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);\n p.y = ro * Math.cos(eps) / 1;\n p.x = ro * Math.sin(eps) / 1;\n\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n return (p);\n}\n\n/* calculate lat/lon from xy */\nexport function inverse(p) {\n var u, deltav, s, d, eps, ro, fi1;\n var ok;\n\n /* Transformation */\n /* revert y, x*/\n var tmp = p.x;\n p.x = p.y;\n p.y = tmp;\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n ro = Math.sqrt(p.x * p.x + p.y * p.y);\n eps = Math.atan2(p.y, p.x);\n d = eps / Math.sin(this.s0);\n s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);\n u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));\n deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));\n p.x = this.long0 - deltav / this.alfa;\n fi1 = u;\n ok = 0;\n var iter = 0;\n do {\n p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);\n if (Math.abs(fi1 - p.y) < 0.0000000001) {\n ok = 1;\n }\n fi1 = p.y;\n iter += 1;\n } while (ok === 0 && iter < 15);\n if (iter >= 15) {\n return null;\n }\n\n return (p);\n}\n\nexport var names = [\"Krovak\", \"krovak\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(e0, e1, e2, e3, phi) {\n return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));\n}","export default function(x) {\n return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n}","export default function(x) {\n return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n}","export default function(x) {\n return (0.05859375 * x * x * (1 + 0.75 * x));\n}","export default function(x) {\n return (x * x * x * (35 / 3072));\n}","export default function(a, e, sinphi) {\n var temp = e * sinphi;\n return a / Math.sqrt(1 - temp * temp);\n}","import {HALF_PI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n}\n","export default function(ml, e0, e1, e2, e3) {\n var phi;\n var dphi;\n\n phi = ml / e0;\n for (var i = 0; i < 15; i++) {\n dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //..reportError(\"IMLFN-CONV:Latitude failed to converge after 15 iterations\");\n return NaN;\n}","import mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nexport function init() {\n if (!this.sphere) {\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n }\n}\n\n/* Cassini forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var x, y;\n var lam = p.x;\n var phi = p.y;\n lam = adjust_lon(lam - this.long0);\n\n if (this.sphere) {\n x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));\n y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);\n }\n else {\n //ellipsoid\n var sinphi = Math.sin(phi);\n var cosphi = Math.cos(phi);\n var nl = gN(this.a, this.e, sinphi);\n var tl = Math.tan(phi) * Math.tan(phi);\n var al = lam * Math.cos(phi);\n var asq = al * al;\n var cl = this.es * cosphi * cosphi / (1 - this.es);\n var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\n x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));\n y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);\n\n\n }\n\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var phi, lam;\n\n if (this.sphere) {\n var dd = y + this.lat0;\n phi = Math.asin(Math.sin(dd) * Math.cos(x));\n lam = Math.atan2(Math.tan(x), Math.cos(dd));\n }\n else {\n /* ellipsoid */\n var ml1 = this.ml0 / this.a + y;\n var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);\n if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {\n p.x = this.long0;\n p.y = HALF_PI;\n if (y < 0) {\n p.y *= -1;\n }\n return p;\n }\n var nl1 = gN(this.a, this.e, Math.sin(phi1));\n\n var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);\n var tl1 = Math.pow(Math.tan(phi1), 2);\n var dl = x * this.a / nl1;\n var dsq = dl * dl;\n phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);\n lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);\n\n }\n\n p.x = adjust_lon(lam + this.long0);\n p.y = adjust_lat(phi);\n return p;\n\n}\n\nexport var names = [\"Cassini\", \"Cassini_Soldner\", \"cass\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(eccent, sinphi) {\n var con;\n if (eccent > 1.0e-7) {\n con = eccent * sinphi;\n return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));\n }\n else {\n return (2 * sinphi);\n }\n}","\nimport {HALF_PI, EPSLN, FORTPI} from '../constants/values';\n\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\n\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\nexport var S_POLE = 1;\n\nexport var N_POLE = 2;\nexport var EQUIT = 3;\nexport var OBLIQ = 4;\n\n/* Initialize the Lambert Azimuthal Equal Area projection\n ------------------------------------------------------*/\nexport function init() {\n var t = Math.abs(this.lat0);\n if (Math.abs(t - HALF_PI) < EPSLN) {\n this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;\n }\n else if (Math.abs(t) < EPSLN) {\n this.mode = this.EQUIT;\n }\n else {\n this.mode = this.OBLIQ;\n }\n if (this.es > 0) {\n var sinphi;\n\n this.qp = qsfnz(this.e, 1);\n this.mmf = 0.5 / (1 - this.es);\n this.apa = authset(this.es);\n switch (this.mode) {\n case this.N_POLE:\n this.dd = 1;\n break;\n case this.S_POLE:\n this.dd = 1;\n break;\n case this.EQUIT:\n this.rq = Math.sqrt(0.5 * this.qp);\n this.dd = 1 / this.rq;\n this.xmf = 1;\n this.ymf = 0.5 * this.qp;\n break;\n case this.OBLIQ:\n this.rq = Math.sqrt(0.5 * this.qp);\n sinphi = Math.sin(this.lat0);\n this.sinb1 = qsfnz(this.e, sinphi) / this.qp;\n this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);\n this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);\n this.ymf = (this.xmf = this.rq) / this.dd;\n this.xmf *= this.dd;\n break;\n }\n }\n else {\n if (this.mode === this.OBLIQ) {\n this.sinph0 = Math.sin(this.lat0);\n this.cosph0 = Math.cos(this.lat0);\n }\n }\n}\n\n/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;\n var lam = p.x;\n var phi = p.y;\n\n lam = adjust_lon(lam - this.long0);\n if (this.sphere) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n coslam = Math.cos(lam);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n if (y <= EPSLN) {\n return null;\n }\n y = Math.sqrt(2 / y);\n x = y * cosphi * Math.sin(lam);\n y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n coslam = -coslam;\n }\n if (Math.abs(phi + this.lat0) < EPSLN) {\n return null;\n }\n y = FORTPI - phi * 0.5;\n y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));\n x = y * Math.sin(lam);\n y *= coslam;\n }\n }\n else {\n sinb = 0;\n cosb = 0;\n b = 0;\n coslam = Math.cos(lam);\n sinlam = Math.sin(lam);\n sinphi = Math.sin(phi);\n q = qsfnz(this.e, sinphi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinb = q / this.qp;\n cosb = Math.sqrt(1 - sinb * sinb);\n }\n switch (this.mode) {\n case this.OBLIQ:\n b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;\n break;\n case this.EQUIT:\n b = 1 + cosb * coslam;\n break;\n case this.N_POLE:\n b = HALF_PI + phi;\n q = this.qp - q;\n break;\n case this.S_POLE:\n b = phi - HALF_PI;\n q = this.qp + q;\n break;\n }\n if (Math.abs(b) < EPSLN) {\n return null;\n }\n switch (this.mode) {\n case this.OBLIQ:\n case this.EQUIT:\n b = Math.sqrt(2 / b);\n if (this.mode === this.OBLIQ) {\n y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);\n }\n else {\n y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;\n }\n x = this.xmf * b * cosb * sinlam;\n break;\n case this.N_POLE:\n case this.S_POLE:\n if (q >= 0) {\n x = (b = Math.sqrt(q)) * sinlam;\n y = coslam * ((this.mode === this.S_POLE) ? b : -b);\n }\n else {\n x = y = 0;\n }\n break;\n }\n }\n\n p.x = this.a * x + this.x0;\n p.y = this.a * y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var lam, phi, cCe, sCe, q, rho, ab;\n if (this.sphere) {\n var cosz = 0,\n rh, sinz = 0;\n\n rh = Math.sqrt(x * x + y * y);\n phi = rh * 0.5;\n if (phi > 1) {\n return null;\n }\n phi = 2 * Math.asin(phi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinz = Math.sin(phi);\n cosz = Math.cos(phi);\n }\n switch (this.mode) {\n case this.EQUIT:\n phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);\n x *= sinz;\n y = cosz * rh;\n break;\n case this.OBLIQ:\n phi = (Math.abs(rh) <= EPSLN) ? this.lat0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);\n x *= sinz * this.cosph0;\n y = (cosz - Math.sin(phi) * this.sinph0) * rh;\n break;\n case this.N_POLE:\n y = -y;\n phi = HALF_PI - phi;\n break;\n case this.S_POLE:\n phi -= HALF_PI;\n break;\n }\n lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);\n }\n else {\n ab = 0;\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n x /= this.dd;\n y *= this.dd;\n rho = Math.sqrt(x * x + y * y);\n if (rho < EPSLN) {\n p.x = this.long0;\n p.y = this.lat0;\n return p;\n }\n sCe = 2 * Math.asin(0.5 * rho / this.rq);\n cCe = Math.cos(sCe);\n x *= (sCe = Math.sin(sCe));\n if (this.mode === this.OBLIQ) {\n ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;\n q = this.qp * ab;\n y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;\n }\n else {\n ab = y * sCe / rho;\n q = this.qp * ab;\n y = rho * cCe;\n }\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n y = -y;\n }\n q = (x * x + y * y);\n if (!q) {\n p.x = this.long0;\n p.y = this.lat0;\n return p;\n }\n ab = 1 - q / this.qp;\n if (this.mode === this.S_POLE) {\n ab = -ab;\n }\n }\n lam = Math.atan2(x, y);\n phi = authlat(Math.asin(ab), this.apa);\n }\n\n p.x = adjust_lon(this.long0 + lam);\n p.y = phi;\n return p;\n}\n\n/* determine latitude from authalic latitude */\nvar P00 = 0.33333333333333333333;\n\nvar P01 = 0.17222222222222222222;\nvar P02 = 0.10257936507936507936;\nvar P10 = 0.06388888888888888888;\nvar P11 = 0.06640211640211640211;\nvar P20 = 0.01641501294219154443;\n\nfunction authset(es) {\n var t;\n var APA = [];\n APA[0] = es * P00;\n t = es * es;\n APA[0] += t * P01;\n APA[1] = t * P10;\n t *= es;\n APA[0] += t * P02;\n APA[1] += t * P11;\n APA[2] = t * P20;\n return APA;\n}\n\nfunction authlat(beta, APA) {\n var t = beta + beta;\n return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));\n}\n\nexport var names = [\"Lambert Azimuthal Equal Area\", \"Lambert_Azimuthal_Equal_Area\", \"laea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n S_POLE: S_POLE,\n N_POLE: N_POLE,\n EQUIT: EQUIT,\n OBLIQ: OBLIQ\n};\n","export default function(x) {\n if (Math.abs(x) > 1) {\n x = (x > 1) ? 1 : -1;\n }\n return Math.asin(x);\n}","import msfnz from '../common/msfnz';\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e3 = Math.sqrt(this.es);\n\n this.sin_po = Math.sin(this.lat1);\n this.cos_po = Math.cos(this.lat1);\n this.t1 = this.sin_po;\n this.con = this.sin_po;\n this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs1 = qsfnz(this.e3, this.sin_po);\n\n this.sin_po = Math.sin(this.lat2);\n this.cos_po = Math.cos(this.lat2);\n this.t2 = this.sin_po;\n this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs2 = qsfnz(this.e3, this.sin_po);\n\n this.sin_po = Math.sin(this.lat0);\n this.cos_po = Math.cos(this.lat0);\n this.t3 = this.sin_po;\n this.qs0 = qsfnz(this.e3, this.sin_po);\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);\n }\n else {\n this.ns0 = this.con;\n }\n this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;\n this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;\n}\n\n/* Albers Conical Equal Area forward equations--mapping lat,long to x,y\n -------------------------------------------------------------------*/\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n this.sin_phi = Math.sin(lat);\n this.cos_phi = Math.cos(lat);\n\n var qs = qsfnz(this.e3, this.sin_phi);\n var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;\n var theta = this.ns0 * adjust_lon(lon - this.long0);\n var x = rh1 * Math.sin(theta) + this.x0;\n var y = this.rh - rh1 * Math.cos(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh1, qs, con, theta, lon, lat;\n\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n if (this.ns0 >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n con = rh1 * this.ns0 / this.a;\n if (this.sphere) {\n lat = Math.asin((this.c - con * con) / (2 * this.ns0));\n }\n else {\n qs = (this.c - con * con) / this.ns0;\n lat = this.phi1z(this.e3, qs);\n }\n\n lon = adjust_lon(theta / this.ns0 + this.long0);\n p.x = lon;\n p.y = lat;\n return p;\n}\n\n/* Function to compute phi1, the latitude for the inverse of the\n Albers Conical Equal-Area projection.\n-------------------------------------------*/\nexport function phi1z(eccent, qs) {\n var sinphi, cosphi, con, com, dphi;\n var phi = asinz(0.5 * qs);\n if (eccent < EPSLN) {\n return phi;\n }\n\n var eccnts = eccent * eccent;\n for (var i = 1; i <= 25; i++) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n con = eccent * sinphi;\n com = 1 - con * con;\n dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi = phi + dphi;\n if (Math.abs(dphi) <= 1e-7) {\n return phi;\n }\n }\n return null;\n}\n\nexport var names = [\"Albers_Conic_Equal_Area\", \"Albers\", \"aea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n phi1z: phi1z\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\n/*\n reference:\n Wolfram Mathworld \"Gnomonic Projection\"\n http://mathworld.wolfram.com/GnomonicProjection.html\n Accessed: 12th November 2009\n */\nexport function init() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.sin_p14 = Math.sin(this.lat0);\n this.cos_p14 = Math.cos(this.lat0);\n // Approximation for projecting points to the horizon (infinity)\n this.infinity_dist = 1000 * this.a;\n this.rc = 1;\n}\n\n/* Gnomonic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var sinphi, cosphi; /* sin and cos value */\n var dlon; /* delta longitude value */\n var coslon; /* cos of longitude */\n var ksp; /* scale factor */\n var g;\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n dlon = adjust_lon(lon - this.long0);\n\n sinphi = Math.sin(lat);\n cosphi = Math.cos(lat);\n\n coslon = Math.cos(dlon);\n g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n ksp = 1;\n if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;\n }\n else {\n\n // Point is in the opposing hemisphere and is unprojectable\n // We still need to return a reasonable point, so we project\n // to infinity, on a bearing\n // equivalent to the northern hemisphere equivalent\n // This is a reasonable approximation for short shapes and lines that\n // straddle the horizon.\n\n x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);\n y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh; /* Rho */\n var sinc, cosc;\n var c;\n var lon, lat;\n\n /* Inverse equations\n -----------------*/\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n\n if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {\n c = Math.atan2(rh, this.rc);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n\n lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);\n lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);\n lon = adjust_lon(this.long0 + lon);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"gnom\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport qsfnz from '../common/qsfnz';\nimport msfnz from '../common/msfnz';\nimport iqsfnz from '../common/iqsfnz';\n\n/*\n reference:\n \"Cartographic Projection Procedures for the UNIX Environment-\n A User's Manual\" by Gerald I. Evenden,\n USGS Open File Report 90-284and Release 4 Interim Reports (2003)\n*/\nexport function init() {\n //no-op\n if (!this.sphere) {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n}\n\n/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n if (this.sphere) {\n x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);\n y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);\n }\n else {\n var qs = qsfnz(this.e, Math.sin(lat));\n x = this.x0 + this.a * this.k0 * dlon;\n y = this.y0 + this.a * qs * 0.5 / this.k0;\n }\n\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));\n lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\n }\n else {\n lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);\n lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"cea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, q) {\n var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));\n if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {\n if (q < 0) {\n return (-1 * HALF_PI);\n }\n else {\n return HALF_PI;\n }\n }\n //var phi = 0.5* q/(1-eccent*eccent);\n var phi = Math.asin(0.5 * q);\n var dphi;\n var sin_phi;\n var cos_phi;\n var con;\n for (var i = 0; i < 30; i++) {\n sin_phi = Math.sin(phi);\n cos_phi = Math.cos(phi);\n con = eccent * sin_phi;\n dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //console.log(\"IQSFN-CONV:Latitude failed to converge after 30 iterations\");\n return NaN;\n}\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\n\nexport function init() {\n\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n this.lat_ts = this.lat_ts || 0;\n this.title = this.title || \"Equidistant Cylindrical (Plate Carre)\";\n\n this.rc = Math.cos(this.lat_ts);\n}\n\n// forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n var dlon = adjust_lon(lon - this.long0);\n var dlat = adjust_lat(lat - this.lat0);\n p.x = this.x0 + (this.a * dlon * this.rc);\n p.y = this.y0 + (this.a * dlat);\n return p;\n}\n\n// inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n var x = p.x;\n var y = p.y;\n\n p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));\n p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n return p;\n}\n\nexport var names = [\"Equirectangular\", \"Equidistant_Cylindrical\", \"eqc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport mlfn from '../common/mlfn';\nimport {EPSLN} from '../constants/values';\n\nimport gN from '../common/gN';\nvar MAX_ITER = 20;\n\nexport function init() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas\n}\n\n/* Polyconic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y, el;\n var dlon = adjust_lon(lon - this.long0);\n el = dlon * Math.sin(lat);\n if (this.sphere) {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.a * this.lat0;\n }\n else {\n x = this.a * Math.sin(el) / Math.tan(lat);\n y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));\n }\n }\n else {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.ml0;\n }\n else {\n var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);\n x = nl * Math.sin(el);\n y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));\n }\n\n }\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n var lon, lat, x, y, i;\n var al, bl;\n var phi, dphi;\n x = p.x - this.x0;\n y = p.y - this.y0;\n\n if (this.sphere) {\n if (Math.abs(y + this.a * this.lat0) <= EPSLN) {\n lon = adjust_lon(x / this.a + this.long0);\n lat = 0;\n }\n else {\n al = this.lat0 + y / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var tanphi;\n for (i = MAX_ITER; i; --i) {\n tanphi = Math.tan(phi);\n dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);\n phi += dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));\n }\n }\n else {\n if (Math.abs(y + this.ml0) <= EPSLN) {\n lat = 0;\n lon = adjust_lon(this.long0 + x / this.a);\n }\n else {\n\n al = (this.ml0 + y) / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var cl, mln, mlnp, ma;\n var con;\n for (i = MAX_ITER; i; --i) {\n con = this.e * Math.sin(phi);\n cl = Math.sqrt(1 - con * con) * Math.tan(phi);\n mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);\n ma = mln / this.a;\n dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);\n phi -= dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n\n //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);\n cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);\n lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Polyconic\", \"poly\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {SEC_TO_RAD} from '../constants/values';\n\n/*\n reference\n Department of Land and Survey Technical Circular 1973/32\n http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf\n OSG Technical Report 4.1\n http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf\n */\n\n/**\n * iterations: Number of iterations to refine inverse transform.\n * 0 -> km accuracy\n * 1 -> m accuracy -- suitable for most mapping applications\n * 2 -> mm accuracy\n */\nexport var iterations = 1;\n\nexport function init() {\n this.A = [];\n this.A[1] = 0.6399175073;\n this.A[2] = -0.1358797613;\n this.A[3] = 0.063294409;\n this.A[4] = -0.02526853;\n this.A[5] = 0.0117879;\n this.A[6] = -0.0055161;\n this.A[7] = 0.0026906;\n this.A[8] = -0.001333;\n this.A[9] = 0.00067;\n this.A[10] = -0.00034;\n\n this.B_re = [];\n this.B_im = [];\n this.B_re[1] = 0.7557853228;\n this.B_im[1] = 0;\n this.B_re[2] = 0.249204646;\n this.B_im[2] = 0.003371507;\n this.B_re[3] = -0.001541739;\n this.B_im[3] = 0.041058560;\n this.B_re[4] = -0.10162907;\n this.B_im[4] = 0.01727609;\n this.B_re[5] = -0.26623489;\n this.B_im[5] = -0.36249218;\n this.B_re[6] = -0.6870983;\n this.B_im[6] = -1.1651967;\n\n this.C_re = [];\n this.C_im = [];\n this.C_re[1] = 1.3231270439;\n this.C_im[1] = 0;\n this.C_re[2] = -0.577245789;\n this.C_im[2] = -0.007809598;\n this.C_re[3] = 0.508307513;\n this.C_im[3] = -0.112208952;\n this.C_re[4] = -0.15094762;\n this.C_im[4] = 0.18200602;\n this.C_re[5] = 1.01418179;\n this.C_im[5] = 1.64497696;\n this.C_re[6] = 1.9660549;\n this.C_im[6] = 2.5127645;\n\n this.D = [];\n this.D[1] = 1.5627014243;\n this.D[2] = 0.5185406398;\n this.D[3] = -0.03333098;\n this.D[4] = -0.1052906;\n this.D[5] = -0.0368594;\n this.D[6] = 0.007317;\n this.D[7] = 0.01220;\n this.D[8] = 0.00394;\n this.D[9] = -0.0013;\n}\n\n/**\n New Zealand Map Grid Forward - long/lat to x/y\n long/lat in radians\n */\nexport function forward(p) {\n var n;\n var lon = p.x;\n var lat = p.y;\n\n var delta_lat = lat - this.lat0;\n var delta_lon = lon - this.long0;\n\n // 1. Calculate d_phi and d_psi ... // and d_lambda\n // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.\n var d_phi = delta_lat / SEC_TO_RAD * 1E-5;\n var d_lambda = delta_lon;\n var d_phi_n = 1; // d_phi^0\n\n var d_psi = 0;\n for (n = 1; n <= 10; n++) {\n d_phi_n = d_phi_n * d_phi;\n d_psi = d_psi + this.A[n] * d_phi_n;\n }\n\n // 2. Calculate theta\n var th_re = d_psi;\n var th_im = d_lambda;\n\n // 3. Calculate z\n var th_n_re = 1;\n var th_n_im = 0; // theta^0\n var th_n_re1;\n var th_n_im1;\n\n var z_re = 0;\n var z_im = 0;\n for (n = 1; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;\n z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;\n }\n\n // 4. Calculate easting and northing\n p.x = (z_im * this.a) + this.x0;\n p.y = (z_re * this.a) + this.y0;\n\n return p;\n}\n\n/**\n New Zealand Map Grid Inverse - x/y to long/lat\n */\nexport function inverse(p) {\n var n;\n var x = p.x;\n var y = p.y;\n\n var delta_x = x - this.x0;\n var delta_y = y - this.y0;\n\n // 1. Calculate z\n var z_re = delta_y / this.a;\n var z_im = delta_x / this.a;\n\n // 2a. Calculate theta - first approximation gives km accuracy\n var z_n_re = 1;\n var z_n_im = 0; // z^0\n var z_n_re1;\n var z_n_im1;\n\n var th_re = 0;\n var th_im = 0;\n for (n = 1; n <= 6; n++) {\n z_n_re1 = z_n_re * z_re - z_n_im * z_im;\n z_n_im1 = z_n_im * z_re + z_n_re * z_im;\n z_n_re = z_n_re1;\n z_n_im = z_n_im1;\n th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;\n th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;\n }\n\n // 2b. Iterate to refine the accuracy of the calculation\n // 0 iterations gives km accuracy\n // 1 iteration gives m accuracy -- good enough for most mapping applications\n // 2 iterations bives mm accuracy\n for (var i = 0; i < this.iterations; i++) {\n var th_n_re = th_re;\n var th_n_im = th_im;\n var th_n_re1;\n var th_n_im1;\n\n var num_re = z_re;\n var num_im = z_im;\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n th_n_re = 1;\n th_n_im = 0;\n var den_re = this.B_re[1];\n var den_im = this.B_im[1];\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n // Complex division\n var den2 = den_re * den_re + den_im * den_im;\n th_re = (num_re * den_re + num_im * den_im) / den2;\n th_im = (num_im * den_re - num_re * den_im) / den2;\n }\n\n // 3. Calculate d_phi ... // and d_lambda\n var d_psi = th_re;\n var d_lambda = th_im;\n var d_psi_n = 1; // d_psi^0\n\n var d_phi = 0;\n for (n = 1; n <= 9; n++) {\n d_psi_n = d_psi_n * d_psi;\n d_phi = d_phi + this.D[n] * d_psi_n;\n }\n\n // 4. Calculate latitude and longitude\n // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.\n var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);\n var lon = this.long0 + d_lambda;\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"New_Zealand_Map_Grid\", \"nzmg\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\n\n/* Initialize the Miller Cylindrical projection\n -------------------------------------------*/\nexport function init() {\n //no-op\n}\n\n/* Miller Cylindrical forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x = this.x0 + this.a * dlon;\n var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Miller Cylindrical inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n\n var lon = adjust_lon(this.long0 + p.x / this.a);\n var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Miller_Cylindrical\", \"mill\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport pj_enfn from '../common/pj_enfn';\nvar MAX_ITER = 20;\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n\nexport function init() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n\n\n if (!this.sphere) {\n this.en = pj_enfn(this.es);\n }\n else {\n this.n = 1;\n this.m = 0;\n this.es = 0;\n this.C_y = Math.sqrt((this.m + 1) / this.n);\n this.C_x = this.C_y / (this.m + 1);\n }\n\n}\n\n/* Sinusoidal forward equations--mapping lat,long to x,y\n -----------------------------------------------------*/\nexport function forward(p) {\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n lon = adjust_lon(lon - this.long0);\n\n if (this.sphere) {\n if (!this.m) {\n lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\n }\n else {\n var k = this.n * Math.sin(lat);\n for (var i = MAX_ITER; i; --i) {\n var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));\n lat -= V;\n if (Math.abs(V) < EPSLN) {\n break;\n }\n }\n }\n x = this.a * this.C_x * lon * (this.m + Math.cos(lat));\n y = this.a * this.C_y * lat;\n\n }\n else {\n\n var s = Math.sin(lat);\n var c = Math.cos(lat);\n y = this.a * pj_mlfn(lat, s, c, this.en);\n x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);\n }\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var lat, temp, lon, s;\n\n p.x -= this.x0;\n lon = p.x / this.a;\n p.y -= this.y0;\n lat = p.y / this.a;\n\n if (this.sphere) {\n lat /= this.C_y;\n lon = lon / (this.C_x * (this.m + Math.cos(lat)));\n if (this.m) {\n lat = asinz((this.m * lat + Math.sin(lat)) / this.n);\n }\n else if (this.n !== 1) {\n lat = asinz(Math.sin(lat) / this.n);\n }\n lon = adjust_lon(lon + this.long0);\n lat = adjust_lat(lat);\n }\n else {\n lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);\n s = Math.abs(lat);\n if (s < HALF_PI) {\n s = Math.sin(lat);\n temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));\n //temp = this.long0 + p.x / (this.a * Math.cos(lat));\n lon = adjust_lon(temp);\n }\n else if ((s - EPSLN) < HALF_PI) {\n lon = this.long0;\n }\n }\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Sinusoidal\", \"sinu\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nexport function init() {}\nimport {EPSLN} from '../constants/values';\n/* Mollweide forward equations--mapping lat,long to x,y\n ----------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var theta = lat;\n var con = Math.PI * Math.sin(lat);\n\n /* Iterate using the Newton-Raphson method to find theta\n -----------------------------------------------------*/\n while (true) {\n var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));\n theta += delta_theta;\n if (Math.abs(delta_theta) < EPSLN) {\n break;\n }\n }\n theta /= 2;\n\n /* If the latitude is 90 deg, force the x coordinate to be \"0 + false easting\"\n this is done here because of precision problems with \"cos(theta)\"\n --------------------------------------------------------------------------*/\n if (Math.PI / 2 - Math.abs(lat) < EPSLN) {\n delta_lon = 0;\n }\n var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;\n var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var theta;\n var arg;\n\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n arg = p.y / (1.4142135623731 * this.a);\n\n /* Because of division by zero problems, 'arg' can not be 1. Therefore\n a number very close to one is used instead.\n -------------------------------------------------------------------*/\n if (Math.abs(arg) > 0.999999999999) {\n arg = 0.999999999999;\n }\n theta = Math.asin(arg);\n var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));\n if (lon < (-Math.PI)) {\n lon = -Math.PI;\n }\n if (lon > Math.PI) {\n lon = Math.PI;\n }\n arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;\n if (Math.abs(arg) > 1) {\n arg = 1;\n }\n var lat = Math.asin(arg);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Mollweide\", \"moll\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport msfnz from '../common/msfnz';\nimport mlfn from '../common/mlfn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.lat2 = this.lat2 || this.lat1;\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n\n this.sinphi = Math.sin(this.lat1);\n this.cosphi = Math.cos(this.lat1);\n\n this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);\n\n if (Math.abs(this.lat1 - this.lat2) < EPSLN) {\n this.ns = this.sinphi;\n }\n else {\n this.sinphi = Math.sin(this.lat2);\n this.cosphi = Math.cos(this.lat2);\n this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);\n this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);\n }\n this.g = this.ml1 + this.ms1 / this.ns;\n this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n this.rh = this.a * (this.g - this.ml0);\n}\n\n/* Equidistant Conic forward equations--mapping lat,long to x,y\n -----------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var rh1;\n\n /* Forward equations\n -----------------*/\n if (this.sphere) {\n rh1 = this.a * (this.g - lat);\n }\n else {\n var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n rh1 = this.a * (this.g - ml);\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n var x = this.x0 + rh1 * Math.sin(theta);\n var y = this.y0 + this.rh - rh1 * Math.cos(theta);\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n var con, rh1, lat, lon;\n if (this.ns >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + theta / this.ns);\n lat = adjust_lat(this.g - rh1 / this.a);\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n var ml = this.g - rh1 / this.a;\n lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);\n lon = adjust_lon(this.long0 + theta / this.ns);\n p.x = lon;\n p.y = lat;\n return p;\n }\n\n}\n\nexport var names = [\"Equidistant_Conic\", \"eqdc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n/* Initialize the Van Der Grinten projection\n ----------------------------------------*/\nexport function init() {\n //this.R = 6370997; //Radius of earth\n this.R = this.a;\n}\n\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x, y;\n\n if (Math.abs(lat) <= EPSLN) {\n x = this.x0 + this.R * dlon;\n y = this.y0;\n }\n var theta = asinz(2 * Math.abs(lat / Math.PI));\n if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {\n x = this.x0;\n if (lat >= 0) {\n y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);\n }\n else {\n y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);\n }\n // return(OK);\n }\n var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));\n var asq = al * al;\n var sinth = Math.sin(theta);\n var costh = Math.cos(theta);\n\n var g = costh / (sinth + costh - 1);\n var gsq = g * g;\n var m = g * (2 / sinth - 1);\n var msq = m * m;\n var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);\n if (dlon < 0) {\n con = -con;\n }\n x = this.x0 + con;\n //con = Math.abs(con / (Math.PI * this.R));\n var q = asq + g;\n con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);\n if (lat >= 0) {\n //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 + con;\n }\n else {\n //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 - con;\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Van Der Grinten inverse equations--mapping x,y to lat/long\n ---------------------------------------------------------*/\nexport function inverse(p) {\n var lon, lat;\n var xx, yy, xys, c1, c2, c3;\n var a1;\n var m1;\n var con;\n var th1;\n var d;\n\n /* inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n con = Math.PI * this.R;\n xx = p.x / con;\n yy = p.y / con;\n xys = xx * xx + yy * yy;\n c1 = -Math.abs(yy) * (1 + xys);\n c2 = c1 - 2 * yy * yy + xx * xx;\n c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;\n d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;\n a1 = (c1 - c2 * c2 / 3 / c3) / c3;\n m1 = 2 * Math.sqrt(-a1 / 3);\n con = ((3 * d) / a1) / m1;\n if (Math.abs(con) > 1) {\n if (con >= 0) {\n con = 1;\n }\n else {\n con = -1;\n }\n }\n th1 = Math.acos(con) / 3;\n if (p.y >= 0) {\n lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n else {\n lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n\n if (Math.abs(xx) < EPSLN) {\n lon = this.long0;\n }\n else {\n lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Van_der_Grinten_I\", \"VanDerGrinten\", \"vandg\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport asinz from '../common/asinz';\nimport imlfn from '../common/imlfn';\n\n\n\nexport function init() {\n this.sin_p12 = Math.sin(this.lat0);\n this.cos_p12 = Math.cos(this.lat0);\n}\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var sinphi = Math.sin(p.y);\n var cosphi = Math.cos(p.y);\n var dlon = adjust_lon(lon - this.long0);\n var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;\n if (this.sphere) {\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);\n p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);\n p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);\n return p;\n }\n else {\n //default case\n cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);\n c = Math.acos(cos_c);\n kp = c ? c / Math.sin(c) : 1;\n p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);\n p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));\n return p;\n }\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);\n p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);\n p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);\n return p;\n }\n else {\n //Default case\n tanphi = sinphi / cosphi;\n Nl1 = gN(this.a, this.e, this.sin_p12);\n Nl = gN(this.a, this.e, sinphi);\n psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));\n Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));\n if (Az === 0) {\n s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {\n s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else {\n s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));\n }\n G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);\n H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);\n GH = G * H;\n Hs = H * H;\n s2 = s * s;\n s3 = s2 * s;\n s4 = s3 * s;\n s5 = s4 * s;\n c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);\n p.x = this.x0 + c * Math.sin(Az);\n p.y = this.y0 + c * Math.cos(Az);\n return p;\n }\n }\n\n\n}\n\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F, sinpsi;\n if (this.sphere) {\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (rh > (2 * HALF_PI * this.a)) {\n return;\n }\n z = rh / this.a;\n\n sinz = Math.sin(z);\n cosz = Math.cos(z);\n\n lon = this.long0;\n if (Math.abs(rh) <= EPSLN) {\n lat = this.lat0;\n }\n else {\n lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);\n con = Math.abs(this.lat0) - HALF_PI;\n if (Math.abs(con) <= EPSLN) {\n if (this.lat0 >= 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n }\n else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n }\n }\n else {\n /*con = cosz - this.sin_p12 * Math.sin(lat);\n if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {\n //no-op, just keep the lon value as is\n } else {\n var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));\n }*/\n lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = Mlp - rh;\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = rh - Mlp;\n\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n //default case\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n Az = Math.atan2(p.x, p.y);\n N1 = gN(this.a, this.e, this.sin_p12);\n cosAz = Math.cos(Az);\n tmp = this.e * this.cos_p12 * cosAz;\n A = -tmp * tmp / (1 - this.es);\n B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);\n D = rh / N1;\n Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;\n F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;\n psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);\n lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));\n sinpsi = Math.sin(psi);\n lat = Math.atan2((sinpsi - this.es * F * this.sin_p12) * Math.tan(psi), sinpsi * (1 - this.es));\n p.x = lon;\n p.y = lat;\n return p;\n }\n }\n\n}\n\nexport var names = [\"Azimuthal_Equidistant\", \"aeqd\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nexport function init() {\n //double temp; /* temporary variable */\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.sin_p14 = Math.sin(this.lat0);\n this.cos_p14 = Math.cos(this.lat0);\n}\n\n/* Orthographic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var sinphi, cosphi; /* sin and cos value */\n var dlon; /* delta longitude value */\n var coslon; /* cos of longitude */\n var ksp; /* scale factor */\n var g, x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n dlon = adjust_lon(lon - this.long0);\n\n sinphi = Math.sin(lat);\n cosphi = Math.cos(lat);\n\n coslon = Math.cos(dlon);\n g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n ksp = 1;\n if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n x = this.a * ksp * cosphi * Math.sin(dlon);\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh; /* height above ellipsoid */\n var z; /* angle */\n var sinz, cosz; /* sin of z and cos of z */\n var con;\n var lon, lat;\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n z = asinz(rh / this.a);\n\n sinz = Math.sin(z);\n cosz = Math.cos(z);\n\n lon = this.long0;\n if (Math.abs(rh) <= EPSLN) {\n lat = this.lat0;\n p.x = lon;\n p.y = lat;\n return p;\n }\n lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);\n con = Math.abs(this.lat0) - HALF_PI;\n if (Math.abs(con) <= EPSLN) {\n if (this.lat0 >= 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n }\n else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n }\n p.x = lon;\n p.y = lat;\n return p;\n }\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"ortho\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","// QSC projection rewritten from the original PROJ4\n// https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c\n\nimport {EPSLN, TWO_PI, SPI, HALF_PI, FORTPI} from '../constants/values';\n\n/* constants */\nvar FACE_ENUM = {\n FRONT: 1,\n RIGHT: 2,\n BACK: 3,\n LEFT: 4,\n TOP: 5,\n BOTTOM: 6\n};\n\nvar AREA_ENUM = {\n AREA_0: 1,\n AREA_1: 2,\n AREA_2: 3,\n AREA_3: 4\n};\n\nexport function init() {\n\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n this.lat_ts = this.lat_ts || 0;\n this.title = this.title || \"Quadrilateralized Spherical Cube\";\n\n /* Determine the cube face from the center of projection. */\n if (this.lat0 >= HALF_PI - FORTPI / 2.0) {\n this.face = FACE_ENUM.TOP;\n } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {\n this.face = FACE_ENUM.BOTTOM;\n } else if (Math.abs(this.long0) <= FORTPI) {\n this.face = FACE_ENUM.FRONT;\n } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {\n this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;\n } else {\n this.face = FACE_ENUM.BACK;\n }\n\n /* Fill in useful values for the ellipsoid <-> sphere shift\n * described in [LK12]. */\n if (this.es !== 0) {\n this.one_minus_f = 1 - (this.a - this.b) / this.a;\n this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;\n }\n}\n\n// QSC forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n var xy = {x: 0, y: 0};\n var lat, lon;\n var theta, phi;\n var t, mu;\n /* nu; */\n var area = {value: 0};\n\n // move lon according to projection's lon\n p.x -= this.long0;\n\n /* Convert the geodetic latitude to a geocentric latitude.\n * This corresponds to the shift from the ellipsoid to the sphere\n * described in [LK12]. */\n if (this.es !== 0) {//if (P->es != 0) {\n lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));\n } else {\n lat = p.y;\n }\n\n /* Convert the input lat, lon into theta, phi as used by QSC.\n * This depends on the cube face and the area on it.\n * For the top and bottom face, we can compute theta and phi\n * directly from phi, lam. For the other faces, we must use\n * unit sphere cartesian coordinates as an intermediate step. */\n lon = p.x; //lon = lp.lam;\n if (this.face === FACE_ENUM.TOP) {\n phi = HALF_PI - lat;\n if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n theta = lon - HALF_PI;\n } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_1;\n theta = (lon > 0.0 ? lon - SPI : lon + SPI);\n } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {\n area.value = AREA_ENUM.AREA_2;\n theta = lon + HALF_PI;\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta = lon;\n }\n } else if (this.face === FACE_ENUM.BOTTOM) {\n phi = HALF_PI + lat;\n if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n theta = -lon + HALF_PI;\n } else if (lon < FORTPI && lon >= -FORTPI) {\n area.value = AREA_ENUM.AREA_1;\n theta = -lon;\n } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_2;\n theta = -lon - HALF_PI;\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);\n }\n } else {\n var q, r, s;\n var sinlat, coslat;\n var sinlon, coslon;\n\n if (this.face === FACE_ENUM.RIGHT) {\n lon = qsc_shift_lon_origin(lon, +HALF_PI);\n } else if (this.face === FACE_ENUM.BACK) {\n lon = qsc_shift_lon_origin(lon, +SPI);\n } else if (this.face === FACE_ENUM.LEFT) {\n lon = qsc_shift_lon_origin(lon, -HALF_PI);\n }\n sinlat = Math.sin(lat);\n coslat = Math.cos(lat);\n sinlon = Math.sin(lon);\n coslon = Math.cos(lon);\n q = coslat * coslon;\n r = coslat * sinlon;\n s = sinlat;\n\n if (this.face === FACE_ENUM.FRONT) {\n phi = Math.acos(q);\n theta = qsc_fwd_equat_face_theta(phi, s, r, area);\n } else if (this.face === FACE_ENUM.RIGHT) {\n phi = Math.acos(r);\n theta = qsc_fwd_equat_face_theta(phi, s, -q, area);\n } else if (this.face === FACE_ENUM.BACK) {\n phi = Math.acos(-q);\n theta = qsc_fwd_equat_face_theta(phi, s, -r, area);\n } else if (this.face === FACE_ENUM.LEFT) {\n phi = Math.acos(-r);\n theta = qsc_fwd_equat_face_theta(phi, s, q, area);\n } else {\n /* Impossible */\n phi = theta = 0;\n area.value = AREA_ENUM.AREA_0;\n }\n }\n\n /* Compute mu and nu for the area of definition.\n * For mu, see Eq. (3-21) in [OL76], but note the typos:\n * compare with Eq. (3-14). For nu, see Eq. (3-38). */\n mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));\n t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));\n\n /* Apply the result to the real area. */\n if (area.value === AREA_ENUM.AREA_1) {\n mu += HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_2) {\n mu += SPI;\n } else if (area.value === AREA_ENUM.AREA_3) {\n mu += 1.5 * SPI;\n }\n\n /* Now compute x, y from mu and nu */\n xy.x = t * Math.cos(mu);\n xy.y = t * Math.sin(mu);\n xy.x = xy.x * this.a + this.x0;\n xy.y = xy.y * this.a + this.y0;\n\n p.x = xy.x;\n p.y = xy.y;\n return p;\n}\n\n// QSC inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n var lp = {lam: 0, phi: 0};\n var mu, nu, cosmu, tannu;\n var tantheta, theta, cosphi, phi;\n var t;\n var area = {value: 0};\n\n /* de-offset */\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n /* Convert the input x, y to the mu and nu angles as used by QSC.\n * This depends on the area of the cube face. */\n nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));\n mu = Math.atan2(p.y, p.x);\n if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {\n area.value = AREA_ENUM.AREA_0;\n } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {\n area.value = AREA_ENUM.AREA_1;\n mu -= HALF_PI;\n } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {\n area.value = AREA_ENUM.AREA_2;\n mu = (mu < 0.0 ? mu + SPI : mu - SPI);\n } else {\n area.value = AREA_ENUM.AREA_3;\n mu += HALF_PI;\n }\n\n /* Compute phi and theta for the area of definition.\n * The inverse projection is not described in the original paper, but some\n * good hints can be found here (as of 2011-12-14):\n * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302\n * (search for \"Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>\") */\n t = (SPI / 12) * Math.tan(mu);\n tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));\n theta = Math.atan(tantheta);\n cosmu = Math.cos(mu);\n tannu = Math.tan(nu);\n cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));\n if (cosphi < -1) {\n cosphi = -1;\n } else if (cosphi > +1) {\n cosphi = +1;\n }\n\n /* Apply the result to the real area on the cube face.\n * For the top and bottom face, we can compute phi and lam directly.\n * For the other faces, we must use unit sphere cartesian coordinates\n * as an intermediate step. */\n if (this.face === FACE_ENUM.TOP) {\n phi = Math.acos(cosphi);\n lp.phi = HALF_PI - phi;\n if (area.value === AREA_ENUM.AREA_0) {\n lp.lam = theta + HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_1) {\n lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);\n } else if (area.value === AREA_ENUM.AREA_2) {\n lp.lam = theta - HALF_PI;\n } else /* area.value == AREA_ENUM.AREA_3 */ {\n lp.lam = theta;\n }\n } else if (this.face === FACE_ENUM.BOTTOM) {\n phi = Math.acos(cosphi);\n lp.phi = phi - HALF_PI;\n if (area.value === AREA_ENUM.AREA_0) {\n lp.lam = -theta + HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_1) {\n lp.lam = -theta;\n } else if (area.value === AREA_ENUM.AREA_2) {\n lp.lam = -theta - HALF_PI;\n } else /* area.value == AREA_ENUM.AREA_3 */ {\n lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);\n }\n } else {\n /* Compute phi and lam via cartesian unit sphere coordinates. */\n var q, r, s;\n q = cosphi;\n t = q * q;\n if (t >= 1) {\n s = 0;\n } else {\n s = Math.sqrt(1 - t) * Math.sin(theta);\n }\n t += s * s;\n if (t >= 1) {\n r = 0;\n } else {\n r = Math.sqrt(1 - t);\n }\n /* Rotate q,r,s into the correct area. */\n if (area.value === AREA_ENUM.AREA_1) {\n t = r;\n r = -s;\n s = t;\n } else if (area.value === AREA_ENUM.AREA_2) {\n r = -r;\n s = -s;\n } else if (area.value === AREA_ENUM.AREA_3) {\n t = r;\n r = s;\n s = -t;\n }\n /* Rotate q,r,s into the correct cube face. */\n if (this.face === FACE_ENUM.RIGHT) {\n t = q;\n q = -r;\n r = t;\n } else if (this.face === FACE_ENUM.BACK) {\n q = -q;\n r = -r;\n } else if (this.face === FACE_ENUM.LEFT) {\n t = q;\n q = r;\n r = -t;\n }\n /* Now compute phi and lam from the unit sphere coordinates. */\n lp.phi = Math.acos(-s) - HALF_PI;\n lp.lam = Math.atan2(r, q);\n if (this.face === FACE_ENUM.RIGHT) {\n lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);\n } else if (this.face === FACE_ENUM.BACK) {\n lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);\n } else if (this.face === FACE_ENUM.LEFT) {\n lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);\n }\n }\n\n /* Apply the shift from the sphere to the ellipsoid as described\n * in [LK12]. */\n if (this.es !== 0) {\n var invert_sign;\n var tanphi, xa;\n invert_sign = (lp.phi < 0 ? 1 : 0);\n tanphi = Math.tan(lp.phi);\n xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);\n lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));\n if (invert_sign) {\n lp.phi = -lp.phi;\n }\n }\n\n lp.lam += this.long0;\n p.x = lp.lam;\n p.y = lp.phi;\n return p;\n}\n\n/* Helper function for forward projection: compute the theta angle\n * and determine the area number. */\nfunction qsc_fwd_equat_face_theta(phi, y, x, area) {\n var theta;\n if (phi < EPSLN) {\n area.value = AREA_ENUM.AREA_0;\n theta = 0.0;\n } else {\n theta = Math.atan2(y, x);\n if (Math.abs(theta) <= FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_1;\n theta -= HALF_PI;\n } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_2;\n theta = (theta >= 0.0 ? theta - SPI : theta + SPI);\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta += HALF_PI;\n }\n }\n return theta;\n}\n\n/* Helper function: shift the longitude. */\nfunction qsc_shift_lon_origin(lon, offset) {\n var slon = lon + offset;\n if (slon < -SPI) {\n slon += TWO_PI;\n } else if (slon > +SPI) {\n slon -= TWO_PI;\n }\n return slon;\n}\n\nexport var names = [\"Quadrilateralized Spherical Cube\", \"Quadrilateralized_Spherical_Cube\", \"qsc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n\n","// Robinson projection\n// Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c\n// Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039\n\nimport {HALF_PI, D2R, R2D, EPSLN} from '../constants/values';\nimport adjust_lon from '../common/adjust_lon';\n\nvar COEFS_X = [\n [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],\n [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],\n [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],\n [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],\n [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],\n [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],\n [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],\n [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],\n [0.9216, -0.00467746, -0.00010457, 4.81243e-06],\n [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],\n [0.8679, -0.00609363, -0.000113898, 3.32484e-06],\n [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],\n [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],\n [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],\n [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],\n [0.6732, -0.00986209, -0.000199569, 1.91974e-05],\n [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],\n [0.5722, -0.00906601, 0.000182, 6.24051e-06],\n [0.5322, -0.00677797, 0.000275608, 6.24051e-06]\n];\n\nvar COEFS_Y = [\n [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],\n [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],\n [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],\n [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],\n [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],\n [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],\n [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],\n [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],\n [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],\n [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],\n [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],\n [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],\n [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],\n [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],\n [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],\n [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],\n [0.9394, 0.00840947, -0.000192841, -4.2106e-06],\n [0.9761, 0.00616527, -0.000256, -4.2106e-06],\n [1.0000, 0.00328947, -0.000319159, -4.2106e-06]\n];\n\nvar FXC = 0.8487;\nvar FYC = 1.3523;\nvar C1 = R2D/5; // rad to 5-degree interval\nvar RC1 = 1/C1;\nvar NODES = 18;\n\nvar poly3_val = function(coefs, x) {\n return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));\n};\n\nvar poly3_der = function(coefs, x) {\n return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);\n};\n\nfunction newton_rapshon(f_df, start, max_err, iters) {\n var x = start;\n for (; iters; --iters) {\n var upd = f_df(x);\n x -= upd;\n if (Math.abs(upd) < max_err) {\n break;\n }\n }\n return x;\n}\n\nexport function init() {\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.long0 = this.long0 || 0;\n this.es = 0;\n this.title = this.title || \"Robinson\";\n}\n\nexport function forward(ll) {\n var lon = adjust_lon(ll.x - this.long0);\n\n var dphi = Math.abs(ll.y);\n var i = Math.floor(dphi * C1);\n if (i < 0) {\n i = 0;\n } else if (i >= NODES) {\n i = NODES - 1;\n }\n dphi = R2D * (dphi - RC1 * i);\n var xy = {\n x: poly3_val(COEFS_X[i], dphi) * lon,\n y: poly3_val(COEFS_Y[i], dphi)\n };\n if (ll.y < 0) {\n xy.y = -xy.y;\n }\n\n xy.x = xy.x * this.a * FXC + this.x0;\n xy.y = xy.y * this.a * FYC + this.y0;\n return xy;\n}\n\nexport function inverse(xy) {\n var ll = {\n x: (xy.x - this.x0) / (this.a * FXC),\n y: Math.abs(xy.y - this.y0) / (this.a * FYC)\n };\n\n if (ll.y >= 1) { // pathologic case\n ll.x /= COEFS_X[NODES][0];\n ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;\n } else {\n // find table interval\n var i = Math.floor(ll.y * NODES);\n if (i < 0) {\n i = 0;\n } else if (i >= NODES) {\n i = NODES - 1;\n }\n for (;;) {\n if (COEFS_Y[i][0] > ll.y) {\n --i;\n } else if (COEFS_Y[i+1][0] <= ll.y) {\n ++i;\n } else {\n break;\n }\n }\n // linear interpolation in 5 degree interval\n var coefs = COEFS_Y[i];\n var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]);\n // find t so that poly3_val(coefs, t) = ll.y\n t = newton_rapshon(function(x) {\n return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);\n }, t, EPSLN, 100);\n\n ll.x /= poly3_val(COEFS_X[i], t);\n ll.y = (5 * i + t) * D2R;\n if (xy.y < 0) {\n ll.y = -ll.y;\n }\n }\n\n ll.x = adjust_lon(ll.x + this.long0);\n return ll;\n}\n\nexport var names = [\"Robinson\", \"robin\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {\n geodeticToGeocentric,\n geocentricToGeodetic\n} from '../datumUtils';\n\nexport function init() {\n this.name = 'geocent';\n\n}\n\nexport function forward(p) {\n var point = geodeticToGeocentric(p, this.es, this.a);\n return point;\n}\n\nexport function inverse(p) {\n var point = geocentricToGeodetic(p, this.es, this.a, this.b);\n return point;\n}\n\nexport var names = [\"Geocentric\", 'geocentric', \"geocent\", \"Geocent\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};","\nvar mode = {\n N_POLE: 0,\n S_POLE: 1,\n EQUIT: 2,\n OBLIQ: 3\n};\n\nimport { D2R, HALF_PI, EPSLN } from \"../constants/values\";\nimport hypot from \"../common/hypot\";\n\nvar params = {\n h: { def: 100000, num: true }, // default is Karman line, no default in PROJ.7\n azi: { def: 0, num: true, degrees: true }, // default is North\n tilt: { def: 0, num: true, degrees: true }, // default is Nadir\n long0: { def: 0, num: true }, // default is Greenwich, conversion to rad is automatic\n lat0: { def: 0, num: true } // default is Equator, conversion to rad is automatic\n};\n\nexport function init() {\n Object.keys(params).forEach(function (p) {\n if (typeof this[p] === \"undefined\") {\n this[p] = params[p].def;\n } else if (params[p].num && isNaN(this[p])) {\n throw new Error(\"Invalid parameter value, must be numeric \" + p + \" = \" + this[p]);\n } else if (params[p].num) {\n this[p] = parseFloat(this[p]);\n }\n if (params[p].degrees) {\n this[p] = this[p] * D2R;\n }\n }.bind(this));\n\n if (Math.abs((Math.abs(this.lat0) - HALF_PI)) < EPSLN) {\n this.mode = this.lat0 < 0 ? mode.S_POLE : mode.N_POLE;\n } else if (Math.abs(this.lat0) < EPSLN) {\n this.mode = mode.EQUIT;\n } else {\n this.mode = mode.OBLIQ;\n this.sinph0 = Math.sin(this.lat0);\n this.cosph0 = Math.cos(this.lat0);\n }\n\n this.pn1 = this.h / this.a; // Normalize relative to the Earth's radius\n\n if (this.pn1 <= 0 || this.pn1 > 1e10) {\n throw new Error(\"Invalid height\");\n }\n \n this.p = 1 + this.pn1;\n this.rp = 1 / this.p;\n this.h1 = 1 / this.pn1;\n this.pfact = (this.p + 1) * this.h1;\n this.es = 0;\n\n var omega = this.tilt;\n var gamma = this.azi;\n this.cg = Math.cos(gamma);\n this.sg = Math.sin(gamma);\n this.cw = Math.cos(omega);\n this.sw = Math.sin(omega);\n}\n\nexport function forward(p) {\n p.x -= this.long0;\n var sinphi = Math.sin(p.y);\n var cosphi = Math.cos(p.y);\n var coslam = Math.cos(p.x);\n var x, y;\n switch (this.mode) {\n case mode.OBLIQ:\n y = this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n break;\n case mode.EQUIT:\n y = cosphi * coslam;\n break;\n case mode.S_POLE:\n y = -sinphi;\n break;\n case mode.N_POLE:\n y = sinphi;\n break;\n }\n y = this.pn1 / (this.p - y);\n x = y * cosphi * Math.sin(p.x);\n\n switch (this.mode) {\n case mode.OBLIQ:\n y *= this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n break;\n case mode.EQUIT:\n y *= sinphi;\n break;\n case mode.N_POLE:\n y *= -(cosphi * coslam);\n break;\n case mode.S_POLE:\n y *= cosphi * coslam;\n break;\n }\n\n // Tilt \n var yt, ba;\n yt = y * this.cg + x * this.sg;\n ba = 1 / (yt * this.sw * this.h1 + this.cw);\n x = (x * this.cg - y * this.sg) * this.cw * ba;\n y = yt * ba;\n\n p.x = x * this.a;\n p.y = y * this.a;\n return p;\n}\n\nexport function inverse(p) {\n p.x /= this.a;\n p.y /= this.a;\n var r = { x: p.x, y: p.y };\n\n // Un-Tilt\n var bm, bq, yt;\n yt = 1 / (this.pn1 - p.y * this.sw);\n bm = this.pn1 * p.x * yt;\n bq = this.pn1 * p.y * this.cw * yt;\n p.x = bm * this.cg + bq * this.sg;\n p.y = bq * this.cg - bm * this.sg;\n\n var rh = hypot(p.x, p.y);\n if (Math.abs(rh) < EPSLN) {\n r.x = 0;\n r.y = p.y;\n } else {\n var cosz, sinz;\n sinz = 1 - rh * rh * this.pfact;\n sinz = (this.p - Math.sqrt(sinz)) / (this.pn1 / rh + rh / this.pn1);\n cosz = Math.sqrt(1 - sinz * sinz);\n switch (this.mode) {\n case mode.OBLIQ:\n r.y = Math.asin(cosz * this.sinph0 + p.y * sinz * this.cosph0 / rh);\n p.y = (cosz - this.sinph0 * Math.sin(r.y)) * rh;\n p.x *= sinz * this.cosph0;\n break;\n case mode.EQUIT:\n r.y = Math.asin(p.y * sinz / rh);\n p.y = cosz * rh;\n p.x *= sinz;\n break;\n case mode.N_POLE:\n r.y = Math.asin(cosz);\n p.y = -p.y;\n break;\n case mode.S_POLE:\n r.y = -Math.asin(cosz);\n break;\n }\n r.x = Math.atan2(p.x, p.y);\n }\n\n p.x = r.x + this.long0;\n p.y = r.y;\n return p;\n}\n\nexport var names = [\"Tilted_Perspective\", \"tpers\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import hypot from '../common/hypot';\n\nexport function init() {\n this.flip_axis = (this.sweep === 'x' ? 1 : 0);\n this.h = Number(this.h);\n this.radius_g_1 = this.h / this.a;\n\n if (this.radius_g_1 <= 0 || this.radius_g_1 > 1e10) {\n throw new Error();\n }\n\n this.radius_g = 1.0 + this.radius_g_1;\n this.C = this.radius_g * this.radius_g - 1.0;\n\n if (this.es !== 0.0) {\n var one_es = 1.0 - this.es;\n var rone_es = 1 / one_es;\n\n this.radius_p = Math.sqrt(one_es);\n this.radius_p2 = one_es;\n this.radius_p_inv2 = rone_es;\n\n this.shape = 'ellipse'; // Use as a condition in the forward and inverse functions.\n } else {\n this.radius_p = 1.0;\n this.radius_p2 = 1.0;\n this.radius_p_inv2 = 1.0;\n\n this.shape = 'sphere'; // Use as a condition in the forward and inverse functions.\n }\n\n if (!this.title) {\n this.title = \"Geostationary Satellite View\";\n }\n}\n\nfunction forward(p) {\n var lon = p.x;\n var lat = p.y;\n var tmp, v_x, v_y, v_z;\n lon = lon - this.long0;\n\n if (this.shape === 'ellipse') {\n lat = Math.atan(this.radius_p2 * Math.tan(lat));\n var r = this.radius_p / hypot(this.radius_p * Math.cos(lat), Math.sin(lat));\n\n v_x = r * Math.cos(lon) * Math.cos(lat);\n v_y = r * Math.sin(lon) * Math.cos(lat);\n v_z = r * Math.sin(lat);\n\n if (((this.radius_g - v_x) * v_x - v_y * v_y - v_z * v_z * this.radius_p_inv2) < 0.0) {\n p.x = Number.NaN;\n p.y = Number.NaN;\n return p;\n }\n\n tmp = this.radius_g - v_x;\n if (this.flip_axis) {\n p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp));\n p.y = this.radius_g_1 * Math.atan(v_z / tmp);\n } else {\n p.x = this.radius_g_1 * Math.atan(v_y / tmp);\n p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp));\n }\n } else if (this.shape === 'sphere') {\n tmp = Math.cos(lat);\n v_x = Math.cos(lon) * tmp;\n v_y = Math.sin(lon) * tmp;\n v_z = Math.sin(lat);\n tmp = this.radius_g - v_x;\n\n if (this.flip_axis) {\n p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp));\n p.y = this.radius_g_1 * Math.atan(v_z / tmp);\n } else {\n p.x = this.radius_g_1 * Math.atan(v_y / tmp);\n p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp));\n }\n }\n p.x = p.x * this.a;\n p.y = p.y * this.a;\n return p;\n}\n\nfunction inverse(p) {\n var v_x = -1.0;\n var v_y = 0.0;\n var v_z = 0.0;\n var a, b, det, k;\n\n p.x = p.x / this.a;\n p.y = p.y / this.a;\n\n if (this.shape === 'ellipse') {\n if (this.flip_axis) {\n v_z = Math.tan(p.y / this.radius_g_1);\n v_y = Math.tan(p.x / this.radius_g_1) * hypot(1.0, v_z);\n } else {\n v_y = Math.tan(p.x / this.radius_g_1);\n v_z = Math.tan(p.y / this.radius_g_1) * hypot(1.0, v_y);\n }\n\n var v_zp = v_z / this.radius_p;\n a = v_y * v_y + v_zp * v_zp + v_x * v_x;\n b = 2 * this.radius_g * v_x;\n det = (b * b) - 4 * a * this.C;\n\n if (det < 0.0) {\n p.x = Number.NaN;\n p.y = Number.NaN;\n return p;\n }\n\n k = (-b - Math.sqrt(det)) / (2.0 * a);\n v_x = this.radius_g + k * v_x;\n v_y *= k;\n v_z *= k;\n\n p.x = Math.atan2(v_y, v_x);\n p.y = Math.atan(v_z * Math.cos(p.x) / v_x);\n p.y = Math.atan(this.radius_p_inv2 * Math.tan(p.y));\n } else if (this.shape === 'sphere') {\n if (this.flip_axis) {\n v_z = Math.tan(p.y / this.radius_g_1);\n v_y = Math.tan(p.x / this.radius_g_1) * Math.sqrt(1.0 + v_z * v_z);\n } else {\n v_y = Math.tan(p.x / this.radius_g_1);\n v_z = Math.tan(p.y / this.radius_g_1) * Math.sqrt(1.0 + v_y * v_y);\n }\n\n a = v_y * v_y + v_z * v_z + v_x * v_x;\n b = 2 * this.radius_g * v_x;\n det = (b * b) - 4 * a * this.C;\n if (det < 0.0) {\n p.x = Number.NaN;\n p.y = Number.NaN;\n return p;\n }\n\n k = (-b - Math.sqrt(det)) / (2.0 * a);\n v_x = this.radius_g + k * v_x;\n v_y *= k;\n v_z *= k;\n\n p.x = Math.atan2(v_y, v_x);\n p.y = Math.atan(v_z * Math.cos(p.x) / v_x);\n }\n p.x = p.x + this.long0;\n return p;\n}\n\nexport var names = [\"Geostationary Satellite View\", \"Geostationary_Satellite\", \"geos\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n};\n\n","/**\n * Copyright 2018 Bernie Jenny, Monash University, Melbourne, Australia.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Equal Earth is a projection inspired by the Robinson projection, but unlike\n * the Robinson projection retains the relative size of areas. The projection\n * was designed in 2018 by Bojan Savric, Tom Patterson and Bernhard Jenny.\n *\n * Publication:\n * Bojan Savric, Tom Patterson & Bernhard Jenny (2018). The Equal Earth map\n * projection, International Journal of Geographical Information Science,\n * DOI: 10.1080/13658816.2018.1504949\n *\n * Code released August 2018\n * Ported to JavaScript and adapted for mapshaper-proj by Matthew Bloch August 2018\n * Modified for proj4js by Andreas Hocevar by Andreas Hocevar March 2024\n */\n\nimport adjust_lon from \"../common/adjust_lon\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = Math.sqrt(3) / 2.0;\n\nexport function init() {\n this.es = 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n}\n\nexport function forward(p) {\n var lam = adjust_lon(p.x - this.long0);\n var phi = p.y;\n var paramLat = Math.asin(M * Math.sin(phi)),\n paramLatSq = paramLat * paramLat,\n paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n p.x = lam * Math.cos(paramLat) /\n (M * (A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq)));\n p.y = paramLat * (A1 + A2 * paramLatSq + paramLatPow6 * (A3 + A4 * paramLatSq));\n\n p.x = this.a * p.x + this.x0;\n p.y = this.a * p.y + this.y0;\n return p;\n}\n\nexport function inverse(p) {\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n var EPS = 1e-9,\n NITER = 12,\n paramLat = p.y,\n paramLatSq, paramLatPow6, fy, fpy, dlat, i;\n\n for (i = 0; i < NITER; ++i) {\n paramLatSq = paramLat * paramLat;\n paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n fy = paramLat * (A1 + A2 * paramLatSq + paramLatPow6 * (A3 + A4 * paramLatSq)) - p.y;\n fpy = A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq);\n paramLat -= dlat = fy / fpy;\n if (Math.abs(dlat) < EPS) {\n break;\n }\n }\n paramLatSq = paramLat * paramLat;\n paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n p.x = M * p.x * (A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq)) /\n Math.cos(paramLat);\n p.y = Math.asin(Math.sin(paramLat) / M);\n\n p.x = adjust_lon(p.x + this.long0);\n return p;\n}\n\nexport var names = [\"eqearth\", \"Equal Earth\", \"Equal_Earth\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};","import adjust_lat from \"../common/adjust_lat\";\nimport adjust_lon from \"../common/adjust_lon\";\nimport hypot from \"../common/hypot\";\nimport pj_enfn from \"../common/pj_enfn\";\nimport pj_inv_mlfn from \"../common/pj_inv_mlfn\";\nimport pj_mlfn from \"../common/pj_mlfn\";\nimport { HALF_PI } from \"../constants/values\";\n\nvar EPS10 = 1e-10;\n\nexport function init() {\n var c;\n\n this.phi1 = this.lat1;\n if (Math.abs(this.phi1) < EPS10) {\n throw new Error();\n }\n if (this.es) {\n this.en = pj_enfn(this.es);\n this.m1 = pj_mlfn(this.phi1, this.am1 = Math.sin(this.phi1),\n c = Math.cos(this.phi1), this.en);\n this.am1 = c / (Math.sqrt(1 - this.es * this.am1 * this.am1) * this.am1);\n this.inverse = e_inv;\n this.forward = e_fwd;\n } else {\n if (Math.abs(this.phi1) + EPS10 >= HALF_PI) {\n this.cphi1 = 0;\n }\n else {\n this.cphi1 = 1 / Math.tan(this.phi1);\n }\n this.inverse = s_inv;\n this.forward = s_fwd;\n }\n}\n\nfunction e_fwd(p) {\n var lam = adjust_lon(p.x - (this.long0 || 0));\n var phi = p.y;\n var rh, E, c;\n rh = this.am1 + this.m1 - pj_mlfn(phi, E = Math.sin(phi), c = Math.cos(phi), this.en);\n E = c * lam / (rh * Math.sqrt(1 - this.es * E * E));\n p.x = rh * Math.sin(E);\n p.y = this.am1 - rh * Math.cos(E);\n\n p.x = this.a * p.x + (this.x0 || 0);\n p.y = this.a * p.y + (this.y0 || 0);\n return p;\n}\n\nfunction e_inv(p) {\n p.x = (p.x - (this.x0 || 0)) / this.a;\n p.y = (p.y - (this.y0 || 0)) / this.a;\n\n var s, rh, lam, phi;\n rh = hypot(p.x, p.y = this.am1 - p.y);\n phi = pj_inv_mlfn(this.am1 + this.m1 - rh, this.es, this.en);\n if ((s = Math.abs(phi)) < HALF_PI) {\n s = Math.sin(phi);\n lam = rh * Math.atan2(p.x, p.y) * Math.sqrt(1 - this.es * s * s) / Math.cos(phi);\n } else if (Math.abs(s - HALF_PI) <= EPS10) {\n lam = 0;\n }\n else {\n throw new Error();\n }\n p.x = adjust_lon(lam + (this.long0 || 0));\n p.y = adjust_lat(phi);\n return p;\n}\n\nfunction s_fwd(p) {\n var lam = adjust_lon(p.x - (this.long0 || 0));\n var phi = p.y;\n var E, rh;\n rh = this.cphi1 + this.phi1 - phi;\n if (Math.abs(rh) > EPS10) {\n p.x = rh * Math.sin(E = lam * Math.cos(phi) / rh);\n p.y = this.cphi1 - rh * Math.cos(E);\n } else {\n p.x = p.y = 0;\n }\n\n p.x = this.a * p.x + (this.x0 || 0);\n p.y = this.a * p.y + (this.y0 || 0);\n return p;\n}\n\nfunction s_inv(p) {\n p.x = (p.x - (this.x0 || 0)) / this.a;\n p.y = (p.y - (this.y0 || 0)) / this.a;\n\n var lam, phi;\n var rh = hypot(p.x, p.y = this.cphi1 - p.y);\n phi = this.cphi1 + this.phi1 - rh;\n if (Math.abs(phi) > HALF_PI) {\n throw new Error();\n }\n if (Math.abs(Math.abs(phi) - HALF_PI) <= EPS10) {\n lam = 0;\n } else {\n lam = rh * Math.atan2(p.x, p.y) / Math.cos(phi);\n }\n p.x = adjust_lon(lam + (this.long0 || 0));\n p.y = adjust_lat(phi);\n return p;\n}\n\nexport var names = [\"bonne\", \"Bonne (Werner lat_1=90)\"];\nexport default {\n init: init,\n names: names\n};","import tmerc from './lib/projections/tmerc';\nimport etmerc from './lib/projections/etmerc';\nimport utm from './lib/projections/utm';\nimport sterea from './lib/projections/sterea';\nimport stere from './lib/projections/stere';\nimport somerc from './lib/projections/somerc';\nimport omerc from './lib/projections/omerc';\nimport lcc from './lib/projections/lcc';\nimport krovak from './lib/projections/krovak';\nimport cass from './lib/projections/cass';\nimport laea from './lib/projections/laea';\nimport aea from './lib/projections/aea';\nimport gnom from './lib/projections/gnom';\nimport cea from './lib/projections/cea';\nimport eqc from './lib/projections/eqc';\nimport poly from './lib/projections/poly';\nimport nzmg from './lib/projections/nzmg';\nimport mill from './lib/projections/mill';\nimport sinu from './lib/projections/sinu';\nimport moll from './lib/projections/moll';\nimport eqdc from './lib/projections/eqdc';\nimport vandg from './lib/projections/vandg';\nimport aeqd from './lib/projections/aeqd';\nimport ortho from './lib/projections/ortho';\nimport qsc from './lib/projections/qsc';\nimport robin from './lib/projections/robin';\nimport geocent from './lib/projections/geocent';\nimport tpers from './lib/projections/tpers';\nimport geos from './lib/projections/geos';\nimport eqearth from './lib/projections/eqearth';\nimport bonne from './lib/projections/bonne';\nexport default function(proj4){\n proj4.Proj.projections.add(tmerc);\n proj4.Proj.projections.add(etmerc);\n proj4.Proj.projections.add(utm);\n proj4.Proj.projections.add(sterea);\n proj4.Proj.projections.add(stere);\n proj4.Proj.projections.add(somerc);\n proj4.Proj.projections.add(omerc);\n proj4.Proj.projections.add(lcc);\n proj4.Proj.projections.add(krovak);\n proj4.Proj.projections.add(cass);\n proj4.Proj.projections.add(laea);\n proj4.Proj.projections.add(aea);\n proj4.Proj.projections.add(gnom);\n proj4.Proj.projections.add(cea);\n proj4.Proj.projections.add(eqc);\n proj4.Proj.projections.add(poly);\n proj4.Proj.projections.add(nzmg);\n proj4.Proj.projections.add(mill);\n proj4.Proj.projections.add(sinu);\n proj4.Proj.projections.add(moll);\n proj4.Proj.projections.add(eqdc);\n proj4.Proj.projections.add(vandg);\n proj4.Proj.projections.add(aeqd);\n proj4.Proj.projections.add(ortho);\n proj4.Proj.projections.add(qsc);\n proj4.Proj.projections.add(robin);\n proj4.Proj.projections.add(geocent);\n proj4.Proj.projections.add(tpers);\n proj4.Proj.projections.add(geos);\n proj4.Proj.projections.add(eqearth);\n proj4.Proj.projections.add(bonne);\n}","import proj4 from './core';\nimport Proj from \"./Proj\";\nimport Point from \"./Point\";\nimport common from \"./common/toPoint\";\nimport defs from \"./defs\";\nimport nadgrid from \"./nadgrid\";\nimport transform from \"./transform\";\nimport mgrs from \"mgrs\";\nimport includedProjections from \"../projs\";\n\nproj4.defaultDatum = 'WGS84'; //default datum\nproj4.Proj = Proj;\nproj4.WGS84 = new proj4.Proj('WGS84');\nproj4.Point = Point;\nproj4.toPoint = common;\nproj4.defs = defs;\nproj4.nadgrid = nadgrid;\nproj4.transform = transform;\nproj4.mgrs = mgrs;\nproj4.version = '__VERSION__';\nincludedProjections(proj4);\nexport default proj4;\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.proj.transforms;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.proj.Projection;","import {\n addCoordinateTransforms,\n addProjection,\n addEquivalentProjections,\n get\n} from \"ol/proj\";\nimport { get as getTransform } from \"ol/proj/transforms\";\nimport Projection from \"ol/proj/Projection\";\n\nimport Logger from \"../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"CRS\");\n\nexport function register (proj4) {\n const projCodes = Object.keys(proj4.defs);\n logger.trace(\"proj. codes :\", projCodes);\n\n const len = projCodes.length;\n let i, j;\n for (i = 0; i < len; ++i) {\n const code = projCodes[i];\n if (!get(code)) {\n const def = proj4.defs(code);\n addProjection(new Projection({\n code : code,\n axisOrientation : def.axis,\n metersPerUnit : def.to_meter,\n units : def.units\n }));\n }\n }\n for (i = 0; i < len; ++i) {\n const code1 = projCodes[i];\n const proj1 = get(code1);\n\n for (j = 0; j < len; ++j) {\n const code2 = projCodes[j];\n const proj2 = get(code2);\n\n if (!getTransform(code1, code2)) {\n if (proj4.defs[code1] === proj4.defs[code2]) {\n addEquivalentProjections([proj1, proj2]);\n } else {\n const transform = proj4(code1, code2);\n addCoordinateTransforms(proj1, proj2, transform.forward, transform.inverse);\n }\n }\n }\n }\n}\n","/**\n * @module Register\n * @alias module:~utils/Register\n * @description\n * Register definition for IGNF, and EPSG CRS.\n *\n * @example\n * Gp.Register.IGNF.AMST63\n * // return : \"+title=Amsterdam 1963 +proj=geocent +towgs84=109.753,-528.133,-362.244,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\"\n * Gp.Register.get(\"IGNF:AMST63\")\n * // same as Gp.Register.IGNF.AMST63\n */\nvar Register = {\n\n /**\n * instance already loaded into proj4\n */\n isLoaded : false,\n\n /**\n * get the definition for a code\n *\n * @function get\n * @param {String} name - ie. EPSG:2154 (Lambert)\n * @returns {Object} definition\n * @example\n * Register.get(\"EPSG:2154\");\n * // \"+title=RGF93 / Lambert-93 +proj=lcc +lat_1=49 ...\"\n */\n get : function (name) {\n if (name === \"\" || name === null || typeof name === \"undefined\") {\n return;\n }\n\n var s = name.split(\":\");\n if (s.length !== 2) {\n return;\n }\n\n var _register = s[0];\n var _code = s[1];\n\n if (!this.hasOwnProperty(_register)) {\n return;\n }\n\n if (!this[_register].hasOwnProperty(_code)) {\n return;\n }\n\n return this[_register][_code];\n },\n\n /**\n * does projection code exist ?\n *\n * @function exist\n * @param {String} name - ie. EPSG:2154 (Lambert)\n * @returns {Boolean} true/false\n * @example\n * Register.exist(\"EPSG:2154\"); // true\n */\n exist : function (name) {\n if (name === \"\" || name === null || typeof name === \"undefined\") {\n return false;\n }\n\n var s = name.split(\":\");\n if (s.length !== 2) {\n return false;\n }\n\n var _register = s[0];\n var _code = s[1];\n\n if (!this.hasOwnProperty(_register)) {\n return false;\n }\n\n if (!this[_register].hasOwnProperty(_code)) {\n return false;\n }\n\n return true;\n },\n\n /**\n * load all defs to proj4\n * @function load\n * @param {Object} Proj4 - proj4 instance\n */\n load : function (Proj4) {\n // un flag pour savoir si le chargement est déjà realisé\n // (car ceci peut être couteux !)\n if (!this.isLoaded) {\n var registers = [\n \"IGNF\", // exception lors du register IGNF ?\n \"EPSG\",\n \"CRS\"\n ];\n for (var i = 0; i < registers.length; i++) {\n var _register = registers[i];\n var codes = this[_register];\n for (var _code in codes) {\n if (codes.hasOwnProperty(_code)) {\n var name = _register + \":\" + _code;\n Proj4.defs(name, this.get(name));\n // on enlève la dependance à OpenLayers...\n // la fonction register est donc à appeller afin d'enregistrer\n // les definitions dans OpenLayers :\n // import { get } from \"ol/proj\";\n // import proj4 from \"proj4\";\n // import { register } from \"ol/proj/proj4\";\n // Register.load();\n // // Make projections defined in proj4 (with proj4.defs()) available in OpenLayers.\n // // see ol/proj/proj4.register (https://openlayers.org/en/latest/apidoc/module-ol_proj_proj4.html)\n // register(proj4);\n // console.log(get(\"CRS:84\").getCode()); // \"CRS:84\"\n }\n }\n }\n /** ts-syntax */ (this.isLoaded) = true;\n }\n },\n\n /**\n * load defs by default to proj4\n *\n * include into proj4 :\n * - WGS84\n * - ['EPSG:4326']\n * - ['EPSG:3785'], ['EPSG:3857'], GOOGLE, ['EPSG:900913'], ['EPSG:102113']\n * +\n * - [\"EPSG:2154\"], [\"EPSG:27571\"], [\"EPSG:27572\"], [\"EPSG:27573\"], [\"EPSG:2757\"],\n * - [\"CRS:84\"],\n * - [\"IGNF:LAMB93\"],\n * - [\"IGNF:LAMBE\"], [\"IGNF:LAMB1\"], [\"IGNF:LAMB2\"], [\"IGNF:LAMB3\"], [\"IGNF:LAMB4\"],\n * - [\"IGNF:RGF93G\"],\n * - [\"IGNF:WGS84G\"]\n *\n * @function loadByDefault\n * @param {Object} Proj4 - proj4 instance\n */\n loadByDefault : function (Proj4) {\n // la liste de projections par defaut...\n var registers = {\n EPSG : {\n 2154 : Register[\"EPSG\"][\"2154\"],\n 27571 : Register[\"EPSG\"][\"27571\"],\n 27572 : Register[\"EPSG\"][\"27572\"],\n 27573 : Register[\"EPSG\"][\"27573\"],\n 27574 : Register[\"EPSG\"][\"27574\"]\n },\n CRS : {\n 84 : Register[\"CRS\"][\"84\"]\n },\n IGNF : {\n LAMB93 : Register[\"IGNF\"][\"LAMB93\"],\n LAMBE : Register[\"IGNF\"][\"LAMBE\"],\n LAMB1 : Register[\"IGNF\"][\"LAMB1\"],\n LAMB2 : Register[\"IGNF\"][\"LAMB2\"],\n LAMB3 : Register[\"IGNF\"][\"LAMB3\"],\n LAMB4 : Register[\"IGNF\"][\"LAMB4\"],\n RGF93G : Register[\"IGNF\"][\"RGF93G\"],\n WGS84G : Register[\"IGNF\"][\"WGS84G\"]\n }\n };\n\n for (var register in registers) {\n if (registers.hasOwnProperty(register)) {\n var codes = registers[register];\n for (var code in codes) {\n if (codes.hasOwnProperty(code)) {\n var name = register + \":\" + code;\n Proj4.defs(name, codes[code]);\n }\n }\n }\n }\n },\n\n /**\n * load only a def to proj4\n *\n * @function loadByName\n * @param {Object} Proj4 - proj4 instance\n * @param {String} name - ie. EPSG:2154 (Lambert)\n * @returns {Boolean} true/false\n */\n loadByName : function (Proj4, name) {\n if (!this.exist(name)) {\n return false;\n }\n\n try {\n Proj4.defs(name, this.get(name));\n } catch (e) {\n // FIXME message !?\n return false;\n }\n\n return true;\n },\n\n /**\n * definitions EPSG\n * @enum\n */\n EPSG : {\n 4978 : \"+proj=geocent +datum=WGS84 +units=m +no_defs \",\n 3857 : \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs\",\n 3785 : \"+title=WGS 84 / Pseudo-Mercator (deprecated) +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs\",\n 4149 : \"+title=CH1903 +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs \",\n 4150 : \"+title=CH1903plus +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs \",\n 4151 : \"+title=CHTRF95 +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4171 : \"+title=RGF93 +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4230 : \"+title=ED50 +proj=longlat +ellps=intl +no_defs \",\n 4235 : \"+title=Guyane Francaise +proj=longlat +ellps=intl +no_defs \",\n 4258 : \"+title=ETRS89 +proj=longlat +ellps=GRS80 +no_defs \",\n 4275 : \"+title=NTF +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs \",\n 4322 : \"+title=WGS 72 +proj=longlat +ellps=WGS72 +no_defs \",\n 4326 : \"+title=WGS 84 +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs \",\n 4467 : \"+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 4470 : \"+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4471 : \"+proj=utm +zone=38 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 4474 : \"+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs \",\n 4558 : \"+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4559 : \"+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 4621 : \"+title=Fort Marigot +proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs \",\n 4622 : \"+title=Guadeloupe 1948 +proj=longlat +ellps=intl +no_defs \",\n 4623 : \"+title=CSG67 +proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 +no_defs \",\n 4624 : \"+title=RGFG95 +proj=longlat +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +no_defs \",\n 4625 : \"+title=Martinique 1938 +proj=longlat +ellps=intl +no_defs \",\n 4626 : \"+title=Reunion 1947 +proj=longlat +ellps=intl +no_defs \",\n 4627 : \"+title=RGR92 +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4628 : \"+title=Tahiti 52 +proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +no_defs \",\n 4629 : \"+title=Tahaa 54 +proj=longlat +ellps=intl +no_defs \",\n 4630 : \"+title=IGN72 Nuku Hiva +proj=longlat +ellps=intl +no_defs \",\n 4632 : \"+title=Combani 1950 +proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +no_defs \",\n 4633 : \"+title=IGN56 Lifou +proj=longlat +ellps=intl +no_defs \",\n 4634 : \"+title=IGN72 Grand Terre +proj=longlat +ellps=intl +no_defs \",\n 4637 : \"+title=Perroud 1950 +proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +no_defs \",\n 4638 : \"+title=Saint Pierre et Miquelon 1950 +proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +no_defs \",\n 4640 : \"+title=RRAF 1991 +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4641 : \"+title=IGN53 Mare +proj=longlat +ellps=intl +no_defs \",\n 4645 : \"+title=RGNC 1991 +proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4687 : \"+proj=longlat +ellps=GRS80 +no_defs \",\n 4662 : \"+title=IGN72 Grande Terre +proj=longlat +ellps=intl +no_defs \",\n 4689 : \"+title=IGN63 Hiva Oa +proj=longlat +ellps=intl +no_defs \",\n 4690 : \"+title=Tahiti 79 +proj=longlat +ellps=intl +no_defs \",\n 4691 : \"+title=Moorea 87 +proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +no_defs \",\n 4692 : \"+title=Maupiti 83 +proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +no_defs \",\n 4698 : \"+title=IGN 1962 Kerguelen +proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs \",\n 4749 : \"+title=RGNC91-93 +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4750 : \"+title=ST87 Ouvea +proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +no_defs \",\n 4807 : \"+title=NTF (Paris) +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs \",\n 2056 : \"+title=CH1903+ / LV95 +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs \",\n 2154 : \"+title=RGF93 / Lambert-93 +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 2213 : \"+title=ETRS89 / TM 30 NE +proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs \",\n 2969 : \"+title=Fort Marigot / UTM zone 20N +proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m +no_defs \",\n 2970 : \"+title=Guadeloupe 1948 / UTM zone 20N +proj=utm +zone=20 +ellps=intl +units=m +no_defs \",\n 2971 : \"+title=CSG67 / UTM zone 22N +proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs \",\n 2972 : \"+title=RGFG95 / UTM zone 22N +proj=utm +zone=22 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs \",\n 2973 : \"+title=Martinique 1938 / UTM zone 20N +proj=utm +zone=20 +ellps=intl +units=m +no_defs \",\n 2975 : \"+title=RGR92 / UTM zone 40S +proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 2976 : \"+title=Tahiti 52 / UTM zone 6S +proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m +no_defs \",\n 2977 : \"+title=Tahaa 54 / UTM zone 5S +proj=utm +zone=5 +south +ellps=intl +units=m +no_defs \",\n 2978 : \"+title=IGN72 Nuku Hiva / UTM zone 7S +proj=utm +zone=7 +south +ellps=intl +units=m +no_defs \",\n 2980 : \"+title=Combani 1950 / UTM zone 38S +proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs \",\n 2981 : \"+title=IGN56 Lifou / UTM zone 58S +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs \",\n 2982 : \"+title=IGN72 Grand Terre / UTM zone 58S (deprecated) +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs \",\n 2984 : \"+title=RGNC 1991 / Lambert New Caledonia (deprecated) +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=intl +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 2986 : \"+title=Terre Adelie 1950 +proj=stere +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-90.000000000 +lon_0=140.000000000 +lat_ts=-67.000000000 +k=0.96027295 +x_0=300000.000 +y_0=-2299363.482 +units=m +no_defs\",\n 2987 : \"+title=Saint Pierre et Miquelon 1950 / UTM zone 21N +proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m +no_defs \",\n 2989 : \"+title=RRAF 1991 / UTM zone 20N +proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 2990 : \"+title=Reunion 1947 / TM Reunion (deprecated) +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +units=m +no_defs \",\n 2995 : \"+title=IGN53 Mare / UTM zone 58S +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs \",\n 3038 : \"+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3039 : \"+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3040 : \"+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3041 : \"+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 3042 : \"+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 3043 : \"+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 3044 : \"+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3045 : \"+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3046 : \"+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3047 : \"+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3048 : \"+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3049 : \"+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3050 : \"+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3051 : \"+proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3034 : \"+title=ETRS89 / ETRS-LCC +proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +units=m +no_defs \",\n 3035 : \"+title=ETRS89 / ETRS-LAEA +proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs \",\n 3042 : \"+title=ETRS89 / ETRS-TM30 +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs \",\n 3043 : \"+title=ETRS89 / ETRS-TM31 +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs \",\n 3044 : \"+title=ETRS89 / ETRS-TM32 +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs \",\n 25828 : \"+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25829 : \"+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 25830 : \"+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 25831 : \"+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 25832 : \"+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25833 : \"+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25834 : \"+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25835 : \"+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25836 : \"+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25837 : \"+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25838 : \"+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3060 : \"+title=IGN72 Grande Terre / UTM zone 58S +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs \",\n 3163 : \"+title=RGNC91-93 / Lambert New Caledonia +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3164 : \"+title=ST87 Ouvea / UTM zone 58S +proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m +no_defs \",\n 3165 : \"+title=NEA74 Noumea / Noumea Lambert +proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +units=m +no_defs \",\n 3166 : \"+title=NEA74 Noumea / Noumea Lambert 2 +proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +units=m +no_defs \",\n 3169 : \"+title=RGNC91-93 / UTM zone 57S +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3170 : \"+title=RGNC91-93 / UTM zone 58S +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3171 : \"+title=RGNC91-93 / UTM zone 59S +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3172 : \"+title=IGN53 Mare / UTM zone 59S +proj=utm +zone=59 +south +ellps=intl +units=m +no_defs \",\n 3296 : \"+title=RGPF / UTM zone 5S +proj=utm +zone=5 +south +ellps=GRS80 +units=m +no_defs \",\n 3297 : \"+title=RGPF / UTM zone 6S +proj=utm +zone=6 +south +ellps=GRS80 +units=m +no_defs \",\n 3298 : \"+title=RGPF / UTM zone 7S +proj=utm +zone=7 +south +ellps=GRS80 +units=m +no_defs \",\n 3299 : \"+title=RGPF / UTM zone 8S +proj=utm +zone=8 +south +ellps=GRS80 +units=m +no_defs \",\n 3302 : \"+title=IGN63 Hiva Oa / UTM zone 7S +proj=utm +zone=7 +south +ellps=intl +units=m +no_defs \",\n 3303 : \"+title=Fatu Iva 72 / UTM zone 7S +proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m +no_defs \",\n 3304 : \"+title=Tahiti 79 / UTM zone 6S +proj=utm +zone=6 +south +ellps=intl +units=m +no_defs \",\n 3305 : \"+title=Moorea 87 / UTM zone 6S +proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m +no_defs \",\n 3306 : \"+title=Maupiti 83 / UTM zone 5S +proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m +no_defs \",\n 3312 : \"+title=CSG67 / UTM zone 21N +proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs \",\n 3313 : \"+title=RGFG95 / UTM zone 21N +proj=utm +zone=21 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs \",\n 3336 : \"+title=IGN 1962 Kerguelen / UTM zone 42S +proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs \",\n 3395 : \"+title=WGS 84 / World Mercator +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 3727 : \"+title=Reunion 1947 / TM Reunion +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +units=m +no_defs \",\n 21781 : \"+title=CH1903 / LV03 +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs \",\n 25830 : \"+title=ETRS89 / UTM zone 30N +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs \",\n 25831 : \"+title=ETRS89 / UTM zone 31N +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs \",\n 25832 : \"+title=ETRS89 / UTM zone 32N +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs \",\n 27561 : \"+title=NTF (Paris) / Lambert Nord France +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27562 : \"+title=NTF (Paris) / Lambert Centre France +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27563 : \"+title=NTF (Paris) / Lambert Sud France +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.9998774990000001 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27564 : \"+title=NTF (Paris) / Lambert Corse +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.9999447100000001 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27571 : \"+title=NTF (Paris) / Lambert zone I +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27572 : \"+title=NTF (Paris) / Lambert zone II +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27573 : \"+title=NTF (Paris) / Lambert zone III +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.9998774990000001 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27574 : \"+title=NTF (Paris) / Lambert zone IV +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.9999447100000001 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27581 : \"+title=NTF (Paris) / France I (deprecated) +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27582 : \"+title=NTF (Paris) / France II (deprecated) +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27583 : \"+title=NTF (Paris) / France III (deprecated) +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.9998774990000001 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27584 : \"+title=NTF (Paris) / France IV (deprecated) +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.9999447100000001 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27591 : \"+title=NTF (Paris) / Nord France (deprecated) +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27592 : \"+title=NTF (Paris) / Centre France (deprecated) +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27593 : \"+title=NTF (Paris) / Sud France (deprecated) +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.9998774990000001 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27594 : \"+title=NTF (Paris) / Corse (deprecated) +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.9999447100000001 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 32601 : \"+proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32602 : \"+proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32603 : \"+proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32604 : \"+proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32605 : \"+proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32606 : \"+proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32607 : \"+proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32608 : \"+proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32609 : \"+proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32610 : \"+proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32611 : \"+proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32612 : \"+proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32613 : \"+proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32614 : \"+proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32615 : \"+proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32616 : \"+proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32617 : \"+proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32618 : \"+proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32619 : \"+proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32620 : \"+proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32621 : \"+proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32622 : \"+proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32623 : \"+proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32624 : \"+proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32625 : \"+proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32626 : \"+proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32627 : \"+proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32628 : \"+proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32629 : \"+proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32630 : \"+proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32631 : \"+proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32632 : \"+proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32633 : \"+proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32634 : \"+proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32635 : \"+proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32636 : \"+proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32637 : \"+proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32638 : \"+proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32639 : \"+proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32640 : \"+proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32641 : \"+proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32642 : \"+proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32643 : \"+proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32644 : \"+proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32645 : \"+proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32646 : \"+proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32647 : \"+proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32648 : \"+proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32649 : \"+proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32650 : \"+proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32651 : \"+proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32652 : \"+proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32653 : \"+proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32654 : \"+proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32655 : \"+proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32656 : \"+proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32657 : \"+proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32658 : \"+proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32659 : \"+proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32660 : \"+proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32661 : \"+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32662 : \"+title=WGS 84 / Plate Carree +proj=eqc +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32701 : \"+proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32702 : \"+proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32703 : \"+proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32704 : \"+proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32705 : \"+proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32706 : \"+proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32707 : \"+proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32708 : \"+proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32709 : \"+proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32710 : \"+proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32711 : \"+proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32712 : \"+proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32713 : \"+proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32714 : \"+proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32715 : \"+proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32716 : \"+proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32717 : \"+proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32718 : \"+proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32719 : \"+proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32720 : \"+proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32721 : \"+proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32722 : \"+proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32723 : \"+proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32724 : \"+proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32725 : \"+proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32726 : \"+proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32727 : \"+proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32728 : \"+proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32729 : \"+proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32730 : \"+proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32731 : \"+proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32732 : \"+proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32733 : \"+proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32734 : \"+proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32735 : \"+proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32736 : \"+proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32737 : \"+proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32738 : \"+proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32739 : \"+proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32740 : \"+proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32741 : \"+proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32742 : \"+proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32743 : \"+proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32744 : \"+proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32745 : \"+proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32746 : \"+proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32747 : \"+proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32748 : \"+proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32749 : \"+proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32750 : \"+proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32751 : \"+proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32752 : \"+proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32753 : \"+proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32754 : \"+proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32755 : \"+proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32756 : \"+proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32757 : \"+proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32758 : \"+proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32759 : \"+proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32760 : \"+proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32761 : \"+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 310024802 : \"+title=Geoportail - France metropolitaine +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=46.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310915814 : \"+title=Geoportail - Antilles francaises +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310486805 : \"+title=Geoportail - Guyane +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=4.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310700806 : \"+title=Geoportail - Reunion et dependances +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-21.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310702807 : \"+title=Geoportail - Mayotte +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-12.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310706808 : \"+title=Geoportail - Saint-Pierre et Miquelon +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=47.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310547809 : \"+title=Geoportail - Nouvelle-Caledonie +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-22.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642810 : \"+title=Geoportail - Wallis et Futuna +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-14.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310032811 : \"+title=Geoportail - Polynesie francaise +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642812 : \"+title=Geoportail - Kerguelen +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-49.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642801 : \"+title=Geoportail - Crozet +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-46.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642813 : \"+title=Geoportail - Amsterdam et Saint-Paul +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-38.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642901 : \"+title=Geoportail - Monde +proj=mill +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lon_0=0.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 5489 : \"+title=RGAF09 geographiques (dms) +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137 +rf=298.257222101 +units=m +no_defs\",\n 5490 : \"+title=RGAF09 UTM Nord Fuseau 20 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137 +rf=298.257222101 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\"\n },\n /**\n * definitions CRS\n * @enum\n */\n CRS : {\n 84 : \"+title=WGS 84 longitude-latitude +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs \"\n },\n /**\n * definitions IGNF\n * @enum\n */\n IGNF : {\n AMST63 : \"+title=Amsterdam 1963 +proj=geocent +towgs84=109.753,-528.133,-362.244,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n CROZ63 : \"+title=Crozet 1963 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n CSG67 : \"+title=Guyane CSG67 +proj=geocent +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n ED50 : \"+title=ED50 +proj=geocent +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n ETRS89 : \"+title=Systeme de reference terrestre Europeen (1989) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n GUAD48 : \"+title=Guadeloupe Ste Anne +proj=geocent +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n GUADFM49 : \"+title=Guadeloupe Fort Marigot +proj=geocent +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n IGN63 : \"+title=IGN 1963 (Hiva Oa, Tahuata, Mohotani) +proj=geocent +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n IGN72 : \"+title=IGN 1972 Grande-Terre / Ile des Pins +proj=geocent +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n KERG62CAR : \"+title=Kerguelen - K0 +proj=geocent +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MART38 : \"+title=Martinique Fort-Desaix +proj=geocent +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MAYO50 : \"+title=Mayotte Combani +proj=geocent +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MOOREA87 : \"+title=Moorea 1987 +proj=geocent +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n NTF : \"+title=Nouvelle Triangulation Francaise +proj=geocent +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +units=m +no_defs\",\n NUKU72 : \"+title=IGN 1972 Nuku Hiva +proj=geocent +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n REUN47 : \"+title=Reunion 1947 +proj=geocent +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n RGF93 : \"+title=Reseau geodesique francais 1993 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGFG95 : \"+title=Reseau geodesique francais de Guyane 1995 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGM04 : \"+title=RGM04 (Reseau Geodesique de Mayotte 2004) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGNC : \"+title=Reseau Geodesique de Nouvelle-Caledonie +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGPF : \"+title=RGPF (Reseau Geodesique de Polynesie Francaise) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGR92 : \"+title=Reseau geodesique Reunion 1992 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGSPM06 : \"+title=Reseau Geodesique Saint-Pierre-et-Miquelon (2006) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGTAAF07 : \"+title=Reseau Geodesique des TAAF (2007) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RRAF91 : \"+title=RRAF 1991 (Reseau de Reference des Antilles Francaises) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n STPL69 : \"+title=Saint-Paul 1969 +proj=geocent +towgs84=225.571,-346.608,-46.567,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n STPM50 : \"+title=St Pierre et Miquelon 1950 +proj=geocent +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +units=m +no_defs\",\n TAHAA : \"+title=Raiatea - Tahaa 51-54 (Tahaa, Base Terme Est) +proj=geocent +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n TAHI79 : \"+title=IGN79 (Tahiti) Iles de la Societe +proj=geocent +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n TERA50 : \"+title=Pointe Geologie - Perroud 1950 +proj=geocent +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n WALL78 : \"+title=Wallis-Uvea 1978 (MOP78) +proj=geocent +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n WGS72 : \"+title=World Geodetic System 1972 +proj=geocent +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +units=m +no_defs\",\n WGS84 : \"+title=World Geodetic System 1984 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n AMST63GEO : \"+title=Amsterdam 1963 +proj=longlat +towgs84=109.753,-528.133,-362.244,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n CROZ63GEO : \"+title=Crozet 1963 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n CSG67GEO : \"+title=Guyane CSG67 +proj=longlat +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n ED50G : \"+title=ED50 +proj=longlat +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n GUAD48GEO : \"+title=Guadeloupe Ste Anne +proj=longlat +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n GUADFM49GEO : \"+title=Guadeloupe Fort Marigot +proj=longlat +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n IGN63GEO : \"+title=IGN 1963 (Hiva Oa, Tahuata, Mohotani) +proj=longlat +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n IGN72GEO : \"+title=IGN 1972 Grande-Terre / Ile des Pins +proj=longlat +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n KERG62GEO : \"+title=Kerguelen - K0 +proj=longlat +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MART38GEO : \"+title=Martinique Fort-Desaix +proj=longlat +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MAYO50GEO : \"+title=Mayotte Combani +proj=longlat +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MOOREA87GEO : \"+title=Moorea 1987 +proj=longlat +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n NTFG : \"+title=Nouvelle Triangulation Francaise Greenwich degres sexagesimaux +proj=longlat +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +units=m +no_defs\",\n NTFP : \"+title=Nouvelle Triangulation Francaise Paris grades +proj=longlat +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +units=m +no_defs\",\n NUKU72GEO : \"+title=IGN 1972 Nuku Hiva +proj=longlat +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n REUN47GEO : \"+title=Reunion 1947 +proj=longlat +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n RGF93G : \"+title=Reseau geodesique francais 1993 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGFG95GEO : \"+title=Reseau geodesique francais de Guyane 1995 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGM04GEO : \"+title=RGM04 (Reseau Geodesique de Mayotte 2004) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGNCGEO : \"+title=Reseau Geodesique de Nouvelle-Caledonie +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGPFGEO : \"+title=RGPF (Reseau Geodesique de Polynesie Francaise) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGR92GEO : \"+title=Reseau geodesique de la Reunion 1992 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGSPM06GEO : \"+title=Saint-Pierre-et-Miquelon (2006) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGTAAF07G : \"+title=Reseau Geodesique des TAAF (2007) (dms) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n STPL69GEO : \"+title=Saint-Paul 1969 +proj=longlat +towgs84=225.571,-346.608,-46.567,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n STPM50GEO : \"+title=St Pierre et Miquelon 1950 +proj=longlat +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +units=m +no_defs\",\n TAHAAGEO : \"+title=Raiatea - Tahaa 51-54 (Tahaa, Base Terme Est) +proj=longlat +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n TAHI79GEO : \"+title=IGN79 (Tahiti) Iles de la Societe +proj=longlat +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n TERA50G : \"+title=Pointe Geologie - Perroud 1950 +proj=longlat +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n WALL78GEO : \"+title=Wallis - Uvea 1978 (MOP78) +proj=longlat +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n WGS72G : \"+title=WGS72 +proj=longlat +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +units=m +no_defs\",\n WGS84G : \"+title=World Geodetic System 1984 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n WGS84RRAFGEO : \"+title=Reseau de reference des Antilles francaises (1988-1991) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n XGEO : \"+title=Systeme CIO-BIH +proj=longlat +towgs84=0.0000,0.0000,0.5000,0.0000,0.0000,0.0140,-0.100000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n AMST63UTM43S : \"+title=Amsterdam 1963 UTM fuseau 43 Sud +proj=tmerc +towgs84=109.753,-528.133,-362.244,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n CROZ63UTM39S : \"+title=Crozet 1963 +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n CSG67UTM21 : \"+title=Guyane CSG67 UTM fuseau 21 +proj=tmerc +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n CSG67UTM22 : \"+title=Guyane CSG67 UTM fuseau 22 +proj=tmerc +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALANF : \"+title=Geoportail - Antilles francaises +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALASP : \"+title=Geoportail - Amsterdam et Saint-Paul +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-38.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALCRZ : \"+title=Geoportail - Crozet +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-46.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALFXX : \"+title=Geoportail - France metropolitaine +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=46.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALGUF : \"+title=Geoportail - Guyane +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=4.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALKER : \"+title=Geoportail - Kerguelen +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-49.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALMYT : \"+title=Geoportail - Mayotte +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-12.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALNCL : \"+title=Geoportail - Nouvelle-Caledonie +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-22.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALPYF : \"+title=Geoportail - Polynesie francaise +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALREU : \"+title=Geoportail - Reunion et dependances +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-21.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALSPM : \"+title=Geoportail - Saint-Pierre et Miquelon +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=47.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALWLF : \"+title=Geoportail - Wallis et Futuna +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-14.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GUAD48UTM20 : \"+title=Guadeloupe Ste Anne +proj=tmerc +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n GUADFM49U20 : \"+title=Guadeloupe Fort Marigot +proj=tmerc +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n IGN63UTM7S : \"+title=IGN 1963 - Hiva Oa, Tahuata, Mohotani - UTM fuseau 7 Sud +proj=tmerc +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n IGN72UTM58S : \"+title=IGN 1972 - UTM fuseau 58 Sud +proj=tmerc +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n KERG62UTM42S : \"+title=Kerguelen 1962 +proj=tmerc +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n LAMB1 : \"+title=Lambert I +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=49.500000000 +lon_0=0.000000000 +k_0=0.99987734 +lat_1=49.500000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs\",\n LAMB1C : \"+title=Lambert I Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=49.500000000 +lon_0=0.000000000 +k_0=0.99987734 +lat_1=49.500000000 +x_0=600000.000 +y_0=1200000.000 +units=m +no_defs\",\n LAMB2 : \"+title=Lambert II +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs\",\n LAMB2C : \"+title=Lambert II Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=2200000.000 +units=m +no_defs\",\n LAMB3 : \"+title=Lambert III +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=44.100000000 +lon_0=0.000000000 +k_0=0.99987750 +lat_1=44.100000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs\",\n LAMB3C : \"+title=Lambert III Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=44.100000000 +lon_0=0.000000000 +k_0=0.99987750 +lat_1=44.100000000 +x_0=600000.000 +y_0=3200000.000 +units=m +no_defs\",\n LAMB4 : \"+title=Lambert IV +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=42.165000000 +lon_0=0.000000000 +k_0=0.99994471 +lat_1=42.165000000 +x_0=234.358 +y_0=185861.369 +units=m +no_defs\",\n LAMB4C : \"+title=Lambert IV Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=42.165000000 +lon_0=0.000000000 +k_0=0.99994471 +lat_1=42.165000000 +x_0=234.358 +y_0=4185861.369 +units=m +no_defs\",\n LAMB93 : \"+title=Lambert 93 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=46.500000000 +lon_0=3.000000000 +lat_1=44.000000000 +lat_2=49.000000000 +x_0=700000.000 +y_0=6600000.000 +units=m +no_defs\",\n RGF93CC42 : \"+title=Lambert conique conforme Zone 1 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=42.000000000 +lon_0=3.000000000 +lat_1=41.200000000 +lat_2=42.800000000 +x_0=1700000.000 +y_0=1200000.000 +units=m +no_defs\",\n RGF93CC43 : \"+title=Lambert conique conforme Zone 2 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=43.000000000 +lon_0=3.000000000 +lat_1=42.200000000 +lat_2=43.800000000 +x_0=1700000.000 +y_0=2200000.000 +units=m +no_defs\",\n RGF93CC44 : \"+title=Lambert conique conforme Zone 3 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=44.000000000 +lon_0=3.000000000 +lat_1=43.200000000 +lat_2=44.800000000 +x_0=1700000.000 +y_0=3200000.000 +units=m +no_defs\",\n RGF93CC45 : \"+title=Lambert conique conforme Zone 4 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=45.000000000 +lon_0=3.000000000 +lat_1=44.200000000 +lat_2=45.800000000 +x_0=1700000.000 +y_0=4200000.000 +units=m +no_defs\",\n RGF93CC46 : \"+title=Lambert conique conforme Zone 5 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=46.000000000 +lon_0=3.000000000 +lat_1=45.200000000 +lat_2=46.800000000 +x_0=1700000.000 +y_0=5200000.000 +units=m +no_defs\",\n RGF93CC47 : \"+title=Lambert conique conforme Zone 6 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=47.000000000 +lon_0=3.000000000 +lat_1=46.200000000 +lat_2=47.800000000 +x_0=1700000.000 +y_0=6200000.000 +units=m +no_defs\",\n RGF93CC48 : \"+title=Lambert conique conforme Zone 7 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=48.000000000 +lon_0=3.000000000 +lat_1=47.200000000 +lat_2=48.800000000 +x_0=1700000.000 +y_0=7200000.000 +units=m +no_defs\",\n RGF93CC49 : \"+title=Lambert conique conforme Zone 8 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=49.000000000 +lon_0=3.000000000 +lat_1=48.200000000 +lat_2=49.800000000 +x_0=1700000.000 +y_0=8200000.000 +units=m +no_defs\",\n RGF93CC50 : \"+title=Lambert conique conforme Zone 9 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=50.000000000 +lon_0=3.000000000 +lat_1=49.200000000 +lat_2=50.800000000 +x_0=1700000.000 +y_0=9200000.000 +units=m +no_defs\",\n LAMBE : \"+title=Lambert II etendu +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=2200000.000 +units=m +no_defs\",\n MART38UTM20 : \"+title=Martinique Fort-Desaix +proj=tmerc +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n MAYO50UTM38S : \"+title=Mayotte Combani +proj=tmerc +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n MILLER : \"+title=Geoportail - Monde +proj=mill +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lon_0=0.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n MOOREA87U6S : \"+title=Moorea 1987 - UTM fuseau 6 Sud +proj=tmerc +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n NUKU72U7S : \"+title=IGN 1972 Nuku Hiva - UTM fuseau 7 Sud +proj=tmerc +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n // REUN47GAUSSL : \"+title=Reunion Gauss Laborde +proj=gstmerc +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-21.116666667 +lon_0=55.533333333 +k_0=1.00000000 +x_0=160000.000 +y_0=50000.000 +units=m +no_defs\",\n RGM04UTM38S : \"+title=UTM fuseau 38 Sud (Reseau Geodesique de Mayotte 2004) +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGNCUTM57S : \"+title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 57 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGNCUTM58S : \"+title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 58 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGNCUTM59S : \"+title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 59 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGPFUTM5S : \"+title=RGPF - UTM fuseau 5 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGPFUTM6S : \"+title=RGPF - UTM fuseau 6 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGPFUTM7S : \"+title=RGPF - UTM fuseau 7 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGR92UTM40S : \"+title=RGR92 UTM fuseau 40 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGSPM06U21 : \"+title=Saint-Pierre-et-Miquelon (2006) UTM Fuseau 21 Nord +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n STPL69UTM43S : \"+title=Saint-Paul 1969 UTM fuseau 43 Sud +proj=tmerc +towgs84=225.571,-346.608,-46.567,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n STPM50UTM21 : \"+title=St Pierre et Miquelon 1950 +proj=tmerc +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n TAHAAUTM05S : \"+title=Tahaa 1951 +proj=tmerc +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n TAHI51UTM06S : \"+title=Tahiti-Terme Nord UTM fuseau 6 Sud +proj=tmerc +towgs84=162.0000,117.0000,154.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n TAHI79UTM6S : \"+title=Tahiti 1979 +proj=tmerc +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n TERA50STEREO : \"+title=Terre Adelie 1950 +proj=stere +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-90.000000000 +lon_0=140.000000000 +lat_ts=-67 +k=0.96027295 +x_0=300000.000 +y_0=-2299363.482 +units=m +no_defs\",\n UTM01SW84 : \"+title=World Geodetic System 1984 UTM fuseau 01 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n UTM20W84GUAD : \"+title=World Geodetic System 1984 UTM fuseau 20 Nord-Guadeloupe +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM20W84MART : \"+title=World Geodetic System 1984 UTM fuseau 20 Nord-Martinique +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM22RGFG95 : \"+title=RGFG95 UTM fuseau 22 Nord-Guyane +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM39SW84 : \"+title=World Geodetic System 1984 UTM fuseau 39 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n UTM42SW84 : \"+title=World Geodetic System 1984 UTM fuseau 42 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n UTM43SW84 : \"+title=World Geodetic System 1984 UTM fuseau 43 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n WALL78UTM1S : \"+title=Wallis-Uvea 1978 (MOP78) UTM 1 SUD +proj=tmerc +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n ETRS89GEO : \"+title=ETRS89 geographiques (dms) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n ETRS89LAEA : \"+title=ETRS89 Lambert Azimutal Equal Area +proj=laea +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=52.000000000 +lon_0=10.000000000 +x_0=4321000.000 +y_0=3210000.000 +units=m +no_defs\",\n ETRS89LCC : \"+title=ETRS89 Lambert Conformal Conic +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=52.000000000 +lon_0=9.999999995 +lat_1=35.000000000 +lat_2=65.000000000 +x_0=4000000.000 +y_0=2800000.000 +units=m +no_defs\",\n UTM26ETRS89 : \"+title=Europe - de 30d a 24d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM27ETRS89 : \"+title=Europe - de 24d a 18d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM28ETRS89 : \"+title=Europe - de 18d a 12d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM29ETRS89 : \"+title=Europe - de 12d a 6d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM30ETRS89 : \"+title=Europe - de -6d a 0d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM31ETRS89 : \"+title=Europe - de 0d a 6d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM32ETRS89 : \"+title=Europe - de 6d a 12d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM33ETRS89 : \"+title=Europe - de 12d a 18d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM34ETRS89 : \"+title=Europe - de 18d a 24d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM35ETRS89 : \"+title=Europe - de 24d a 30d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM36ETRS89 : \"+title=Europe - de 30d a 36d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM37ETRS89 : \"+title=Europe - de 36d a 42d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM38ETRS89 : \"+title=Europe - de 42d a 48d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\"\n }\n};\n\nexport default Register;\n","/*\n * FIXME\n * en mode bundle, l'action register des methodes de chargement est executée 2 fois.\n * mais aucun impact sur performance, car le register teste si la projection a été déjà\n * chargé...\n */\n\n// import external\nimport Proj4 from \"proj4\";\n// import OpenLayers\n// import { register } from \"ol/proj/proj4\";\nimport { register } from \"./Proj4\";\nimport {\n getTransform,\n addProjection,\n get as getProjection\n} from \"ol/proj\";\n// import { clear as clearProj } from \"ol/proj/transforms\";\nimport { applyTransform } from \"ol/extent\";\n// import local\nimport Register from \"../Utils/Register\";\nimport Logger from \"../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"CRS\");\n\nvar CRS = {\n\n /**\n * List of extent projections\n */\n projectionsExtent : {\n \"EPSG:2154\" : {\n left : -9.62,\n bottom : 41.18,\n right : 10.3,\n top : 51.54\n },\n \"EPSG:27572\" : {\n left : -4.87,\n bottom : 42.33,\n right : 8.23,\n top : 51.14\n }\n },\n\n /**\n * Load all custom definition projection\n */\n load : function () {\n logger.trace(\"Loading custom definitions projections\");\n // loading except if it's already loaded...\n if (!Register.isLoaded) {\n // load all defs into proj4\n Register.load(Proj4);\n try {\n // register all defs\n register(Proj4);\n // Expose proj4 with custom defs into OpenLayers global variable\n if (window.ol && window.ol.proj && window.ol.proj.proj4) {\n window.ol.proj.proj4.register = register;\n window.ol.proj.proj4.register(Proj4);\n }\n } catch (e) {\n // FIXME ?\n logger.error(e);\n // clearProj();\n }\n }\n },\n\n /**\n * Load definition projection by default\n *\n * include into proj4 :\n * - WGS84\n * - ['EPSG:4326']\n * - ['EPSG:3785'], ['EPSG:3857'], GOOGLE, ['EPSG:900913'], ['EPSG:102113']\n * +\n * - [\"EPSG:2154\"], [\"EPSG:27571\"], [\"EPSG:27572\"], [\"EPSG:27573\"], [\"EPSG:2757\"],\n * - [\"CRS:84\"],\n * - [\"IGNF:LAMB93\"],\n * - [\"IGNF:LAMBE\"], [\"IGNF:LAMB1\"], [\"IGNF:LAMB2\"], [\"IGNF:LAMB3\"], [\"IGNF:LAMB4\"],\n * - [\"IGNF:RGF93G\"],\n * - [\"IGNF:WGS84G\"]\n */\n loadByDefault : function () {\n logger.trace(\"Loading custom definitions projections by default\");\n // loading except if it's already loaded...\n if (!Register.isLoaded) {\n // load defs by default into proj4\n Register.loadByDefault(Proj4);\n try {\n // register all defs\n register(Proj4);\n // Expose proj4 with custom defs into OpenLayers global variable\n if (window.ol && window.ol.proj && window.ol.proj.proj4) {\n window.ol.proj.proj4.register = register;\n window.ol.proj.proj4.register(Proj4);\n }\n } catch (e) {\n // FIXME une projection ne passe pas avec ol.proj/proj4.register()...\n // on fait quoi ?\n logger.error(e);\n // clearProj();\n }\n }\n },\n\n /**\n * Load a custom definition projection\n * @param {String} name - ie. EPSG:2154 (Lambert)\n */\n loadByName : function (name) {\n logger.trace(\"Loading a custom definition projection : \", name);\n // loading except if it's already loaded...\n if (!Register.isLoaded) {\n // load defs by default into proj4\n Register.loadByName(Proj4, name);\n try {\n // register all defs\n register(Proj4);\n // Expose proj4 with custom defs into OpenLayers global variable\n if (window.ol && window.ol.proj && window.ol.proj.proj4) {\n window.ol.proj.proj4.register = register;\n window.ol.proj.proj4.register(Proj4);\n }\n } catch (e) {\n // FIXME ?\n logger.error(e);\n // clearProj();\n }\n }\n },\n\n /**\n * Overload OpenLayers ol.proj parameters,\n * to manage EPSG:2154 extent restriction\n */\n overload : function () {\n logger.trace(\"Loading projections aera (extent)\");\n for (var code in this.projectionsExtent) {\n if (this.projectionsExtent.hasOwnProperty(code)) {\n var extent = this.projectionsExtent[code];\n var proj = getProjection(code);\n var fromLonLat = getTransform(\"EPSG:4326\", proj);\n\n // very approximate calculation of projection extent\n var _extent = applyTransform([extent.bottom, extent.right, extent.top, extent.left], fromLonLat);\n proj.setExtent(_extent);\n addProjection(proj);\n\n // Expose projection extent with custom defs into OpenLayers global variable\n if (window.ol && window.ol.proj && window.ol.proj.addProjection) {\n window.ol.proj.addProjection(proj);\n }\n }\n }\n }\n};\n\nexport default CRS;\n\n// Expose proj4 with custom defs into OpenLayers global variable\nif (window.ol && window.ol.proj && window.ol.proj.proj4) {\n window.ol.proj.proj4.register = register;\n}\n","import ID from \"../../Utils/SelectorID\";\nimport GeocodeUtils from \"../../Utils/GeocodeUtils\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar SearchEngineDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPsearchEngine\");\n container.className = \"GPwidget gpf-widget\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * SElement with picto and search input\n * @returns {DOMElement} DOM element\n */\n _createSearchDivElement : function () {\n var searchDiv = document.createElement(\"div\");\n searchDiv.id = this._addUID(\"GPshowSearchDiv\");\n return searchDiv;\n },\n\n /**\n * Show search engine\n * @param {Boolean} collapsible - ...\n * @returns {DOMElement} DOM element\n */\n _createShowSearchEnginePictoElement : function (collapsible) {\n // contexte d'execution\n var self = this;\n if (checkDsfr()) {\n // Jamais collapsible en DSFR\n collapsible = true;\n }\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowSearchEnginePicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowSearchEnginePicto gpf-btn gpf-btn-icon-search fr-btn\";\n button.title = \"Afficher/masquer la recherche par lieux\";\n if (checkDsfr()) {\n // Pas la même du bouton fonction en DSFR\n button.title = \"Rechercher\";\n }\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", !collapsible);\n button.disabled = !collapsible;\n button.setAttribute(\"type\", \"button\");\n\n // Close all results and panels when minimizing the widget\n button.addEventListener(\"click\", function (e) {\n if (checkDsfr()) {\n // En DSFR, le bouton fait la même chose que la touche Entrée\n var container = document.getElementById(self._addUID(\"GPautocompleteResults\"));\n var curr = container.getElementsByClassName(\"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\");\n var list = container.getElementsByClassName(\"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\");\n\n // si aucune suggestion, on ne va pas plus loin !\n var length = list.length;\n if (!length) {\n return;\n }\n\n var current = null;\n\n // si aucun item courant, on prend le 1er !\n if (!curr.length) {\n current = list[0];\n current.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\";\n current.style.color = \"#000000\";\n current.style[\"background-color\"] = \"#CEDBEF\";\n } else {\n current = curr[0];\n }\n current.click();\n return;\n }\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n if (status) {}\n\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n var showAdvancedSearch = document.getElementById(self._addUID(\"GPshowAdvancedSearch\"));\n if (showAdvancedSearch) {\n showAdvancedSearch.style.display = null;\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n var showGeolocate = document.getElementById(self._addUID(\"GPshowGeolocate\"));\n if (showGeolocate) {\n showGeolocate.style.display = null;\n }\n var showCoordinate = document.getElementById(self._addUID(\"GPshowSearchByCoordinate\"));\n if (showCoordinate) {\n showCoordinate.style.display = null;\n }\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false; // FIXME form[id^=GPsearchInput] = #GPsearchInput ?\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n self.onShowSearchEngineClick(e);\n });\n\n return button;\n },\n\n /**\n * Simple search input\n * @param {String} placeholder - placeholder\n *\n * @returns {DOMElement} DOM element\n */\n _createSearchInputElement : function (placeholder) {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GPsearchInput\");\n form.className = \"gpf-panel__content fr-modal__content\";\n // Open geocode results panel when submitting the input\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n if (document.getElementById(self._addUID(\"GPsearchInputText\")).value === \"\") {\n return false;\n }\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n // cf. FIXME\n // document.querySelector(\"#GPsearchInput input\").blur ();\n\n // gestionnaire d'evenement :\n // on récupère la valeur de saisie pour requête sur le service de geocodage\n self.onGeocodingSearchSubmit(e);\n return false;\n });\n\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPsearchInputText\");\n input.className = \"GPsearchInputText gpf-input fr-input\";\n input.type = \"text\";\n input.placeholder = placeholder;\n input.autocomplete = \"off\";\n // Manage autocomplete list appearance when filling the address input\n input.addEventListener(\"keyup\", function (e) {\n var charCode = e.which || e.keyCode;\n if (charCode === 13 || charCode === 10 || charCode === 38 || charCode === 40) {\n return;\n }\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n if (input.value.length > 2) {\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n } else {\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n // gestionnaire d'evenement :\n // on récupère la valeur de saisie pour requête sur le service d'autocompletion\n self.onAutoCompleteSearchText(e);\n });\n\n // FIXME ce code interfere avec le click sur la liste des suggested locations !\n // input.addEventListener(\"blur\", function (e) {\n // document.getElementById(self._addUID(\"GPautoCompleteList\")).style.display = \"none\";\n // });\n\n input.addEventListener(\"keydown\", function (e) {\n // FIXME\n // l'action clavier 'enter (13)' lance le submit de la form !\n // Ce comportement n'est pas souhaité car le submit execute un geocodage !\n // Il faut donc trouver le moyen d'eviter le submit sur un return venant\n // seulement d'une selection de suggestion...\n\n var charCode = e.which || e.keyCode;\n if (charCode === 13) {\n e.preventDefault();\n }\n var container = document.getElementById(self._addUID(\"GPautocompleteResults\"));\n\n // si aucun container !?\n if (!container) {\n return;\n }\n\n var curr = container.getElementsByClassName(\"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\");\n var list = container.getElementsByClassName(\"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\");\n\n // si aucune suggestion, on ne va pas plus loin !\n var length = list.length;\n if (!length) {\n return;\n }\n\n var current = null;\n\n // si aucun item courant, on prend le 1er !\n if (!curr.length) {\n current = list[0];\n current.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\";\n current.style.color = \"#000000\";\n current.style[\"background-color\"] = \"#CEDBEF\";\n if (charCode !== 13) {\n return;\n }\n } else {\n current = curr[0];\n }\n\n var index = parseInt(ID.index(current.id), 10);\n var next = (index === length - 1) ? list[0] : list[index + 1];\n var prev = (index === 0) ? list[length - 1] : list[index - 1];\n\n current.style[\"background-color\"] = \"\";\n current.style.color = \"\";\n prev.style[\"background-color\"] = \"\";\n prev.style.color = \"\";\n next.style[\"background-color\"] = \"\";\n next.style.color = \"\";\n\n switch (charCode) {\n case 38: // arrow up\n current.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n prev.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\";\n prev.style.color = \"#000000\";\n prev.style[\"background-color\"] = \"#CEDBEF\";\n current.scrollIntoView();\n break;\n case 40: // arrow down\n current.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n next.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\";\n next.style.color = \"#000000\";\n next.style[\"background-color\"] = \"#CEDBEF\";\n current.scrollIntoView();\n break;\n case 13: // enter\n // cf. FIXME\n e.preventDefault();\n current.click(e);\n break;\n }\n\n current.focus();\n });\n\n form.appendChild(input);\n\n return form;\n },\n\n _createSearchResetElement : function () {\n // contexte d'execution\n var self = this;\n\n var buttonReset = document.createElement(\"button\");\n buttonReset.id = this._addUID(\"GPsearchInputReset\");\n buttonReset.className = \"GPshowOpen GPsearchInputReset gpf-btn gpf-btn-icon-reset gpf-btn-icon-search-reset fr-btn fr-btn--secondary gpf-btn--secondary\"; /* not use : fr-btn--close */\n buttonReset.setAttribute(\"aria-label\", \"Supprimer la recherche\");\n // Reset input\n buttonReset.addEventListener(\"click\", function (e) {\n // FIXME event déclenché sur la frappe \"return\" dans la zone de saisie !?\n document.getElementById(self._addUID(\"GPsearchInputText\")).value = \"\";\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n self.onSearchResetClick();\n });\n\n return buttonReset;\n },\n\n\n _createButtonsElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPbuttonsContainer\";\n return div;\n },\n\n _createFirstLineWrapper : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPsearchFirstLineWrapper\";\n return div;\n },\n\n _createRadioContainer : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPsearchRadioContainer\";\n return div;\n },\n\n _createRadioElements : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPsearchRadioElements\";\n var choiceLocations = document.createElement(\"div\");\n choiceLocations.className = \"GPsearchSplitChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w\";\n var inputLocations = document.createElement(\"input\");\n inputLocations.id = this._addUID(\"GPsearchSplitLocations\");\n inputLocations.type = \"radio\";\n inputLocations.name = \"GPsearchSplit\";\n inputLocations.value = \"address\";\n inputLocations.checked = true;\n\n choiceLocations.appendChild(inputLocations);\n\n var labelLocations = document.createElement(\"label\");\n labelLocations.className = \"gpf-label fr-label\";\n labelLocations.htmlFor = this._addUID(\"GPsearchSplitLocations\");\n labelLocations.title = \"Adresses\";\n labelLocations.innerHTML = \"Adresses\";\n choiceLocations.appendChild(labelLocations);\n if (inputLocations.addEventListener) {\n inputLocations.addEventListener(\"change\", function () {\n if (inputLocations.checked) {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n } else {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n }\n });\n } else if (inputLocations.attachEvent) {\n inputLocations.attachEvent(\"onchange\", function () {\n if (inputLocations.checked) {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n } else {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n }\n });\n }\n\n var choiceData = document.createElement(\"div\");\n choiceData.className = \"GPsearchSplitChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w\";\n var inputData = document.createElement(\"input\");\n inputData.id = this._addUID(\"GPsearchSplitData\");\n inputData.type = \"radio\";\n inputData.name = \"GPsearchSplit\";\n inputData.value = \"data\";\n\n choiceData.appendChild(inputData);\n\n var labelData = document.createElement(\"label\");\n labelData.className = \"gpf-label fr-label\";\n labelData.htmlFor = this._addUID(\"GPsearchSplitData\");\n labelData.title = \"Cartes et données\";\n labelData.innerHTML = \"Cartes et données\";\n choiceData.appendChild(labelData);\n if (inputData.addEventListener) {\n inputData.addEventListener(\"change\", function () {\n if (inputData.checked) {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n } else {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n }\n });\n } else if (inputData.attachEvent) {\n inputData.attachEvent(\"onchange\", function () {\n if (inputData.checked) {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n } else {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n }\n });\n }\n\n div.appendChild(choiceLocations);\n div.appendChild(choiceData);\n\n return [div, inputLocations, inputData];\n },\n\n /**\n * Show advanced search panel\n *\n * @returns {DOMElement} DOM element\n */\n _createShowAdvancedSearchElement : function () {\n // contexte d'execution\n var self = this;\n\n var span = document.createElement(\"span\");\n span.id = this._addUID(\"GPshowAdvancedSearch\");\n span.className = \"GPshowOpen GPshowAdvancedSearch\";\n span.innerText = \"Recherche avancée\";\n span.setAttribute(\"tabindex\", \"0\");\n span.setAttribute(\"aria-pressed\", false);\n\n // Open advanced search\n span.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n\n var id = \"#GPsearchInput-\" + self._uid;\n if (status) {\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n } else {\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n document.querySelector(id + \" input\").disabled = true;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = true;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = true;\n }\n }\n\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.getElementById(self._addUID(\"GPshowSearchByCoordinate\")).setAttribute(\"aria-pressed\", false);\n });\n\n return span;\n },\n\n /**\n * Show geolocate button\n *\n * @returns {DOMElement} DOM element\n */\n _createShowGeolocateElement : function () {\n // contexte d'execution\n var self = this;\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowGeolocate\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowGeolocate gpf-btn gpf-btn-icon-search-geolocate fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w\";\n button.title = \"Activer la géolocalisation\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n\n // Open advanced search\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n if (status) {\n // somme stuff...\n }\n self.onShowSearchGeolocateClick(e);\n });\n\n return button;\n },\n\n /**\n * Show search by coordinate button\n *\n * @returns {DOMElement} DOM element\n */\n _createShowSearchByCoordinateElement : function () {\n // contexte d'execution\n var self = this;\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowSearchByCoordinate\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowSearchByCoordinate gpf-btn gpf-btn-icon-search-coordinate fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w\";\n button.title = \"Ouvrir la recherche par coordonnées\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n\n // Open advanced search\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n var id = \"#GPsearchInput-\" + self._uid;\n if (status) {\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.querySelector(id + \" input\").disabled = false;\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n } else {\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n document.querySelector(id + \" input\").disabled = true;\n document.querySelector(id + \" .GPsearchInputReset\").disabled = true;\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = true;\n }\n }\n\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).setAttribute(\"aria-pressed\", false);\n });\n\n return button;\n },\n\n\n\n // ################################################################### //\n // ################### Methods of advanced search #################### //\n // ################################################################### //\n\n /**\n * Advanced search panel\n *\n * FIXME\n * don't call this._createAdvancedSearchPanelHeaderElement\n * don't call this._createAdvancedSearchPanelFormElement\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchPanelElement : function () {\n var div = document.createElement(\"dialog\");\n div.id = this._addUID(\"GPadvancedSearchPanel\");\n div.className = \"GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal\";\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n // div.appendChild(this._createAdvancedSearchPanelHeaderElement ());\n // div.appendChild(this._createAdvancedSearchPanelFormElement ());\n\n return div;\n },\n\n _createAdvancedSearchPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Geocoding results\n *\n * FIXME\n * don't call this._createGeocodeResultsListElement\n *\n * @returns {DOMElement} DOM element\n */\n _createGeocodeResultsElement : function () {\n var div = document.createElement(\"dialog\");\n div.id = this._addUID(\"GPgeocodeResultsList\");\n div.className = \"GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal\";\n\n div.appendChild(this._createGeocodeResultsHeaderElement());\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n // div.appendChild(this._createGeocodeResultsListElement ());\n\n return div;\n },\n\n _createGeocodeResultsDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Autocompletion results\n *\n * FIXME\n * don't call this._createAutoCompleteListElement\n *\n * @returns {DOMElement} DOM element\n */\n _createAutoCompleteElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPautoCompleteList\");\n div.className = \"GPautoCompleteList GPelementHidden gpf-panel fr-modal gpf-hidden \"; // GPpanel ?\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n // div.appendChild(this._createAutoCompleteListElement ());\n\n return div;\n },\n\n /**\n * Coordinate search panel\n *\n * FIXME\n * don't call this._createCoordinateSearchPanelHeaderElement\n * don't call this._createCoordinateSearchPanelFormElement\n *\n * @returns {DOMElement} DOM element\n */\n _createCoordinateSearchPanelElement : function () {\n var div = document.createElement(\"dialog\");\n div.id = this._addUID(\"GPcoordinateSearchPanel\");\n div.className = \"GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal\";\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n // div.appendChild(this._createCoordinateSearchPanelHeaderElement ());\n // div.appendChild(this._createCoordinateSearchPanelFormElement ());\n\n return div;\n },\n\n _createCoordinateSearchPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n // ################################################################### //\n // ################### Autocompletion container ###################### //\n // ################################################################### //\n\n /**\n * Autocompletion results list.\n *\n * @returns {DOMElement} DOM element\n */\n _createAutoCompleteListElement : function () {\n // contexte d'execution\n var self = this;\n\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPautocompleteResults\");\n container.className = \"\";\n\n if (container.addEventListener) {\n container.addEventListener(\"click\", function (e) {\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }, false);\n } else if (container.attachEvent) {\n container.attachEvent(\"onclick\", function (e) {\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n });\n }\n\n // Proposals are dynamically filled in Javascript by autocomplete or search service\n //
    ...
    \n\n return container;\n },\n\n _createAutoCompletedLocationContainer () {\n var container = document.createElement(\"select\");\n container.id = this._addUID(\"GPautocompleteResultsLocation\");\n container.className = \"GPelementHidden gpf-hidden gpf-select\";\n container.size = 20;\n container.autofocus = true;\n return container;\n },\n _createAutoCompletedLocationTitleElement () {\n var container = document.getElementById(this._addUID(\"GPautocompleteResultsLocation\"));\n var label = document.createElement(\"option\");\n label.className = \"GPlabel GPlabelTitle gpf-label fr-label\";\n label.innerHTML = \"Lieux et adresses\";\n container.appendChild(label);\n },\n\n /**\n * Autocompletion result.\n * Proposals are dynamically filled in Javascript by autocomplete service\n *\n * TODO formaliser le contenu des reponse\n *\n * @param {Object} location - suggested or geocoded location results\n * @param {Number} id - ID\n */\n _createAutoCompletedLocationElement : function (location, id) {\n // contexte d'execution\n var self = this;\n\n var container = document.getElementById(this._addUID(\"GPautocompleteResultsLocation\"));\n\n var div = document.createElement(\"option\");\n div.id = this._addUID(\"AutoCompletedLocation_\" + id);\n div.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n var value = GeocodeUtils.getSuggestedLocationFreeform(location);\n div.innerHTML = value;\n div.title = value;\n if (div.addEventListener) {\n div.addEventListener(\"click\", function (e) {\n self.onAutoCompletedResultsItemClick(e);\n }, false);\n } else if (div.attachEvent) {\n div.attachEvent(\"onclick\", function (e) {\n self.onAutoCompletedResultsItemClick(e);\n });\n }\n\n container.appendChild(div);\n },\n\n _createSearchedSuggestContainer () {\n var container = document.createElement(\"select\");\n container.id = this._addUID(\"GPautocompleteResultsSuggest\");\n container.className = \"GPelementHidden gpf-hidden gpf-select\";\n container.size = 6;\n container.autofocus = true;\n return container;\n },\n _createSearchedSuggestTitleElement () {\n var container = document.getElementById(this._addUID(\"GPautocompleteResultsSuggest\"));\n var label = document.createElement(\"option\");\n label.className = \"GPlabel GPlabelTitle gpf-label fr-label\";\n label.innerHTML = \"Cartes et données\";\n container.appendChild(label);\n },\n\n /**\n * Autocompletion result of search service.\n * Proposals are dynamically filled in Javascript by autocomplete service\n *\n *\n * @param {Object} suggest - suggested results\n * @param {Number} id - ID\n */\n _createSearchedSuggestElement : function (suggest, id) {\n // contexte d'execution\n var self = this;\n\n var container = document.getElementById(this._addUID(\"GPautocompleteResultsSuggest\"));\n\n var div = document.createElement(\"option\");\n div.id = this._addUID(\"AutoCompletedSuggest_\" + id);\n div.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n div.innerHTML = suggest.title + \" (\" + suggest.service + \")\";\n div.dataset.layer = suggest.name;\n div.title = `${suggest.description} (nom technique : ${suggest.name})`;\n if (div.addEventListener) {\n div.addEventListener(\"click\", function (e) {\n self.onSearchedResultsItemClick(e);\n }, false);\n } else if (div.attachEvent) {\n div.attachEvent(\"onclick\", function (e) {\n self.onSearchedResultsItemClick(e);\n });\n }\n\n container.appendChild(div);\n },\n\n // ################################################################### //\n // ############### Geocoding with advanced container ################# //\n // ################################################################### //\n\n /**\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchPanelHeaderElement : function () {\n // contexte d'execution\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = \"Recherche avancée\";\n container.appendChild(divTitle);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPadvancedSearchClose\");\n divClose.className = \"GPpanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer la recherche avancée\";\n\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n // document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).style.display = \"inline-block\";\n document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).setAttribute(\"aria-pressed\", false);\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n // document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).style.display = \"inline-block\";\n document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).setAttribute(\"aria-pressed\", false);\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n\n /**\n * @param {Object[]} advancedSearchCodes - codes\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchPanelFormElement : function (advancedSearchCodes) {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GPadvancedSearchForm\");\n form.className = \"gpf-panel__content fr-modal__content\";\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n // data\n var data = [];\n // liste des attributs de la ressource de geocodage\n var id = \"#GPadvancedSearchFilters-\" + self._uid;\n var matchesFilters = document.querySelectorAll(id + \" > div > div > input,select#category\");\n for (var i = 0; i < matchesFilters.length; i++) {\n var element = matchesFilters[i];\n data.push({\n key : element.name,\n value : element.value\n });\n }\n\n // gestionnaire d'evenement :\n // on récupère les valeurs de saisies pour requête sur le service de geocodage\n self.onGeocodingAdvancedSearchSubmit(e, data);\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n\n return false;\n });\n\n var div = document.createElement(\"div\");\n div.className = \"GPflexInput gpf-flex-column \";\n\n var label = document.createElement(\"label\");\n label.className = \"GPadvancedSearchCodeLabel gpf-label fr-label\";\n label.innerHTML = \"Recherche par\";\n div.appendChild(label);\n\n var select = this._createAdvancedSearchFormCodeElement(advancedSearchCodes);\n div.appendChild(select);\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n\n // var filters = this._createAdvancedSearchFormFiltersElement ();\n // form.appendChild(filters);\n\n // var input = this._createAdvancedSearchFormInputElement ();\n // form.appendChild(input);\n\n form.appendChild(div);\n\n return form;\n },\n\n /**\n * @param {Object[]} codes - codes\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFormCodeElement : function (codes) {\n // contexte d'execution\n var self = this;\n\n var select = document.createElement(\"select\");\n select.id = this._addUID(\"GPadvancedSearchCode\");\n select.title = \"Choisir un type de recherche\";\n select.className = \"GPadvancedSearchCode gpf-select fr-select\";\n select.addEventListener(\"change\", function (e) {\n // var idx = e.target.selectedIndex;\n // var value = e.target.options[idx].value;\n // gestionnaire d'evenement :\n // permet de recuperer des informations diverses...\n self.onGeocodingAdvancedSearchCodeChange(e);\n }, false);\n\n // liste statique au cas où des codes n'ont pas été passés en entrée\n if (!codes) {\n codes = [{\n id : \"PositionOfInterest\",\n title : \"Lieux/toponymes\"\n }, {\n id : \"StreetAddress\",\n title : \"Adresses\"\n }, {\n id : \"CadastralParcel\",\n title : \"Parcelles cadastrales\"\n }];\n }\n\n for (var i = 0; i < codes.length; i++) {\n var option = document.createElement(\"option\");\n option.value = codes[i].id;\n option.text = codes[i].title;\n select.appendChild(option);\n }\n\n return select;\n },\n\n /**\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFormInputElement : function () {\n var input = document.createElement(\"input\");\n input.type = \"submit\";\n input.id = this._addUID(\"GPadvancedSearchSubmit\");\n input.className = \"GPsubmit gpf-btn gpf-btn-icon-submit fr-btn fr-btn--secondary gpf-btn--secondary\";\n input.value = \"Chercher\";\n\n return input;\n },\n\n /**\n * Filters geocoding.\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFormFiltersElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPadvancedSearchFilters\");\n return container;\n },\n\n /**\n * Create filter container for resources :\n * \"PositionOfInterest\", \"StreetAddress\", ...\n *\n * @param {String} code - code of geocoding resource\n * @param {Boolean} display - display\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFiltersTableElement : function (code, display) {\n var container = document.createElement(\"div\");\n container.id = this._addUID(code);\n if (!display) {\n container.style.display = \"none\";\n }\n\n return container;\n },\n\n /**\n * Create filter attribut for a resource :\n * \"PositionOfInterest\", \"StreetAddress\", ...\n * Research filters are filled in Javascript depending on developer choice\n *\n * @param {Object} filterAttributes - filter attributes :\n * @param {String} filterAttributes.code - code of geocoding resource\n * @param {String} filterAttributes.name - ID\n * @param {String} filterAttributes.title - label\n * @param {String} filterAttributes.description - description\n * @param {String} filterAttributes.value - value\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFiltersAttributElement : function (filterAttributes) {\n // INFORMATION\n // cette methode peut être appelée si le document n'existe pas, elle\n // permet ainsi de creer une div sans insertion dans le container...\n\n var container = null;\n var name = filterAttributes.name;\n var title = filterAttributes.title;\n var description = filterAttributes.description;\n var code = filterAttributes.code;\n var value = filterAttributes.value;\n\n var div = document.createElement(\"div\");\n div.className = \"GPflexInput gpf-flex-column \";\n\n var label = document.createElement(\"label\");\n label.className = \"GPadvancedSearchFilterLabel gpf-label fr-label\";\n label.htmlFor = name;\n label.title = description || title;\n label.innerHTML = title;\n div.appendChild(label);\n\n if (name === \"category\") {\n var select = document.createElement(\"select\");\n select.id = name;\n select.name = name;\n select.title = title;\n select.className = \"GPadvancedSearchFilterInput gpf-select fr-select\";\n if (value) {\n if (Array.isArray(value)) {\n for (var i = 0; i < value.length; i++) {\n var option = document.createElement(\"option\");\n option.value = value[i];\n option.text = value[i];\n select.appendChild(option);\n }\n }\n }\n div.appendChild(select);\n } else {\n var input = document.createElement(\"input\");\n input.id = name;\n input.className = \"GPadvancedSearchFilterInput gpf-input fr-input\";\n input.type = \"text\";\n input.name = name;\n if (value) {\n if (Array.isArray(value)) {\n var listId = name + \"_list\";\n input.setAttribute(\"list\", listId);\n var dl = document.createElement(\"datalist\");\n dl.id = listId;\n for (var i = 0; i < value.length; ++i) {\n var option = document.createElement(\"option\");\n option.value = value[i];\n dl.appendChild(option);\n }\n div.appendChild(dl);\n } else {\n input.value = value;\n }\n }\n div.appendChild(input);\n }\n\n container = document.getElementById(this._addUID(code));\n\n if (container) {\n container.appendChild(div);\n } else {\n // le container, c'est la div !\n container = div;\n }\n\n return container;\n },\n\n // ################################################################### //\n // ################## Geocoding results container #################### //\n // ################################################################### //\n\n /**\n * @returns {DOMElement} DOM element\n */\n _createGeocodeResultsHeaderElement : function () {\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = \"Résultats de la recherche\";\n container.appendChild(divTitle);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPgeocodeResultsClose\");\n divClose.className = \"GPpanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer la fenêtre de résultats\";\n\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n\n /**\n * Geocoding results list.\n *\n * @returns {DOMElement} DOM element\n */\n _createGeocodeResultsListElement : function () {\n // contexte d'execution\n var self = this;\n\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPgeocodeResults\");\n container.className = \"gpf-panel__list\";\n container.setAttribute(\"tabindex\", \"0\");\n\n if (container.addEventListener) {\n container.addEventListener(\"click\", function (e) {\n if (!e.ctrlKey) {\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n self.onGeocodedResultsItemClick(e);\n }, false);\n } else if (container.attachEvent) {\n container.attachEvent(\"onclick\", function (e) {\n if (!e.ctrlKey) {\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n self.onGeocodedResultsItemClick(e);\n });\n }\n // Results are dynamically filled in Javascript by geocoding service\n //
    ...
    \n\n return container;\n },\n\n /**\n * Geocoding result.\n * Results are dynamically filled in Javascript by geocoding service\n *\n * TODO formaliser le contenu des reponses\n * FIXME formater la reponse en amont !\n *\n * @param {Object} location - suggested or geocoded location results\n * @param {Number} id - ID\n */\n _createGeocodedLocationElement : function (location, id) {\n var container = document.getElementById(this._addUID(\"GPgeocodeResults\"));\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GeocodedLocation_\" + id);\n div.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n\n if (typeof location === \"string\") {\n div.innerHTML = location;\n } else {\n div.innerHTML = GeocodeUtils.getGeocodedLocationFreeform(location);\n }\n\n container.appendChild(div);\n },\n\n // ################################################################### //\n // ################## Coordinate search container #################### //\n // ################################################################### //\n\n _createCoordinateSearchPanelHeaderElement () {\n // contexte d'execution\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = \"Recherche par coordonnées\";\n container.appendChild(divTitle);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPcoordinateSearchClose\");\n divClose.className = \"GPpanelClose GPcoordinateSearchClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer la recherche par coordonnées\";\n\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n document.getElementById(self._addUID(\"GPshowSearchByCoordinate\")).setAttribute(\"aria-pressed\", false);\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n self.onCoordinateSearchClose();\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n document.getElementById(self._addUID(\"GPshowSearchByCoordinate\")).setAttribute(\"aria-pressed\", false);\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n self.onCoordinateSearchClose();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n _createCoordinateSearchPanelFormElement () {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GPcoordinateSearchForm\");\n form.className = \"gpf-panel__content fr-modal__content\";\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n self.onShowSearchByCoordinateClick();\n return false;\n });\n\n return form;\n },\n\n __createCoordinateSearchDivElement () {\n var div = document.createElement(\"div\");\n div.className = \"GPflexInput gpf-flex-column \";\n return div;\n },\n\n _createCoordinateSearchSystemsLabelElement () {\n var label = document.createElement(\"label\");\n label.className = \"GPcoordinateSearchSystemsLabel gpf-label fr-label\";\n label.innerHTML = \"Système de référence\";\n return label;\n },\n _setCoordinateSearchSystemsSelectElement (systems) {\n if (document.getElementById(this._addUID(\"GPcoordinateSearchSystem\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchSystem\")).remove();\n }\n // contexte d'execution\n var context = this;\n\n var selectSystem = document.createElement(\"select\");\n selectSystem.id = this._addUID(\"GPcoordinateSearchSystem\");\n selectSystem.title = \"Choisir un système de réference\";\n selectSystem.className = \"GPselect GPcoordinateSearchSystemsSelect gpf-select fr-select\";\n selectSystem.addEventListener(\"change\", function (e) {\n context.onCoordinateSearchSystemChange(e);\n });\n\n for (var i = 0; i < systems.length; i++) {\n var obj = systems[i];\n var option = document.createElement(\"option\");\n option.value = obj.code;\n option.text = obj.label || i;\n // option.label = obj.label;\n selectSystem.appendChild(option);\n }\n\n return selectSystem;\n },\n\n _createCoordinateSearchUnitsLabelElement () {\n var label = document.createElement(\"label\");\n label.className = \"GPcoordinateSearchUnitsLabel gpf-label fr-label\";\n label.innerHTML = \"Unités\";\n return label;\n },\n _setCoordinateSearchUnitsSelectElement (units) {\n if (document.getElementById(this._addUID(\"GPcoordinateSearchUnits\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchUnits\")).remove();\n }\n // contexte d'execution\n var context = this;\n\n var selectUnits = document.createElement(\"select\");\n selectUnits.id = this._addUID(\"GPcoordinateSearchUnits\");\n selectUnits.title = \"Choisir un type d'unité\";\n selectUnits.className = \"GPselect GPcoordinateSearchUnitsSelect gpf-select fr-select\";\n selectUnits.addEventListener(\"change\", function (e) {\n context.onCoordinateSearchUnitsChange(e);\n });\n\n for (var j = 0; j < units.length; j++) {\n var obj = units[j];\n var option = document.createElement(\"option\");\n option.value = (obj.code) ? obj.code : j;\n option.text = obj.label || j;\n // option.label = obj.label;\n selectUnits.appendChild(option);\n }\n\n return selectUnits;\n },\n\n /**\n * update Label\n * @param {String} type - Geographical or Metric\n * @returns {DOMElement} label\n */\n _setCoordinateSearchLngLabelElement (type) {\n // type geographical ou metric\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLngLabel\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLngLabel\")).remove();\n }\n var labelLng = document.createElement(\"label\");\n labelLng.className = \"GPcoordinateSearchLabel gpf-label fr-label\";\n labelLng.id = this._addUID(\"GPcoordinateSearchLngLabel\");\n labelLng.htmlFor = \"coordinate-lng\";\n labelLng.innerHTML = (type === \"Geographical\") ? \"Longitude :\" : \"Y :\";\n\n return labelLng;\n },\n /**\n * update Input coordinate\n * @param {String} code - ex. DMS : degrés sexadecimaux\n * @returns {DOMElement} input\n */\n _setCoordinateSearchLngInputElement (code) {\n // code DMS ou other\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLngInput\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLngInput\")).remove();\n }\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLngDMS\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLngDMS\")).remove();\n }\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPcoordinateSearchLngInput\");\n input.className = \"GPcoordinateSearchInput gpf-input fr-input\";\n input.title = \"Saisir des coordonnées\";\n input.name = \"coordinate-lng\";\n input.type = \"number\";\n input.step = \"any\";\n input.required = \"\";\n switch (code) {\n case \"DMS\":\n input.title += \" géographiques (en sexa)\";\n input.className = \"GPelementHidden gpf-hidden\";\n return this._setCoordinateSearchLngDMSElement();\n break;\n case \"DEC\":\n input.title += \" géographiques (en decimal)\";\n input.min = \"-180\";\n input.max = \"180\";\n break;\n case \"M\":\n input.title += \" cartésiennes (en mètre)\";\n break;\n case \"KM\":\n input.title += \" cartésiennes (en kilomètre)\";\n break;\n default:\n break;\n }\n return input;\n },\n _setCoordinateSearchLngDMSElement () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPcoordinateSearchLngDMS\");\n div.innerHTML = `\n
    \n \n \n \n \n \n \n \n \n \n \n
    \n `;\n return div;\n },\n /**\n * update Label\n * @param {String} type - Geographical or Metric\n * @returns {DOMElement} label\n */\n _setCoordinateSearchLatLabelElement (type) {\n // type geographical ou metric\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLatLabel\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLatLabel\")).remove();\n }\n var labelLat = document.createElement(\"label\");\n labelLat.className = \"GPcoordinateSearchLabel gpf-label fr-label\";\n labelLat.id = this._addUID(\"GPcoordinateSearchLatLabel\");\n labelLat.htmlFor = \"coordinate-lat\";\n labelLat.innerHTML = (type === \"Geographical\") ? \"Latitude :\" : \"X :\";\n\n return labelLat;\n },\n /**\n * update Input coordinate\n * @param {String} code - ex. DMS : degrés sexadecimaux\n * @returns {DOMElement} input\n */\n _setCoordinateSearchLatInputElement (code) {\n // code DMS ou other\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLatInput\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLatInput\")).remove();\n }\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLatDMS\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLatDMS\")).remove();\n }\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPcoordinateSearchLatInput\");\n input.className = \"GPcoordinateSearchInput gpf-input fr-input\";\n input.title =\"Saisir des coordonnées\";\n input.name = \"coordinate-lat\";\n input.type = \"number\";\n input.step = \"any\";\n input.required = \"\";\n switch (code) {\n case \"DMS\":\n input.title += \" géographiques (en sexa)\";\n input.className = \"GPelementHidden gpf-hidden\";\n return this._setCoordinateSearchLatDMSElement();\n break;\n case \"DEC\":\n input.title += \" géographiques (en decimal)\";\n input.min = \"-180\";\n input.max = \"180\";\n break;\n case \"M\":\n input.title += \" cartésiennes (en mètre)\";\n break;\n case \"KM\":\n input.title += \" cartésiennes (en kilomètre)\";\n break;\n default:\n break;\n }\n return input;\n },\n _setCoordinateSearchLatDMSElement () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPcoordinateSearchLatDMS\");\n div.innerHTML = `\n
    \n \n \n \n \n \n \n \n \n \n \n
    \n `;\n return div;\n },\n\n /**\n * submit\n * @returns {DOMElement} input\n */\n _createCoordinateSearchSubmitElement () {\n var input = document.createElement(\"input\");\n input.type = \"submit\";\n input.id = this._addUID(\"GPcoordinateSearchSubmit\");\n input.className = \"GPsubmit gpf-btn gpf-btn-icon-submit fr-btn fr-btn--secondary gpf-btn--secondary\";\n input.value = \"Chercher\";\n return input;\n },\n};\n\nexport default SearchEngineDOM;\n","// import CSS\nimport \"../../CSS/Controls/SearchEngine/GPFsearchEngine.css\";\n// import \"../../CSS/Controls/SearchEngine/GPFsearchEngineStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Control from \"../Control\";\nimport Widget from \"../Widget\";\nimport Overlay from \"ol/Overlay\";\nimport {\n transform as olProjTransform,\n get as olProjGet,\n transformExtent as olProjTransformExtent\n} from \"ol/proj\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Config from \"../../Utils/Config\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Utils from \"../../Utils/Helper\";\nimport Markers from \"../Utils/Markers\";\nimport Interactions from \"../Utils/Interactions\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport MathUtils from \"../../Utils/MathUtils\";\nimport SearchEngineUtils from \"../../Utils/SearchEngineUtils\";\nimport GeocodeUtils from \"../../Utils/GeocodeUtils\";\nimport CRS from \"../../CRS/CRS\";\n// import local des layers\nimport GeoportalWMS from \"../../Layers/LayerWMS\";\nimport GeoportalWMTS from \"../../Layers/LayerWMTS\";\nimport GeoportalMapBox from \"../../Layers/LayerMapBox\";\n// Service\nimport Search from \"../../Services/Search\";\n// DOM\nimport SearchEngineDOM from \"./SearchEngineDOM\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar logger = Logger.getLogger(\"searchengine\");\n\n/**\n * @classdesc\n * SearchEngine control\n *\n * @constructor\n * @extends {ol.control.Control}\n * @type {ol.control.SearchEngine}\n * @alias ol.control.SearchEngine\n * @param {Object} options - control options\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {String} [options.apiKey] - API key. The key \"calcul\" is used by default.\n * @param {Boolean} [options.ssl = true] - use of ssl or not (default true, service requested using https protocol)\n * @param {Boolean} [options.collapsed = true] - collapse mode, true by default\n * @param {Boolean} [options.collapsible = true] - force control to be collapsed or not, true by default.\n * @param {String} [options.direction = \"start\"] - TODO : position of picto, by default : \"start\"\n * @param {String} [options.placeholder] - Placeholder in search bar. Default is \"Rechercher un lieu, une adresse\".\n * @param {Boolean} [options.displayMarker = true] - set a marker on search result, defaults to true.\n * @param {String} [options.markerStyle = \"lightOrange\"] - Marker style. Currently possible values are \"lightOrange\" (default value), \"darkOrange\", \"red\" and \"turquoiseBlue\".\n * @param {String} [options.markerUrl = \"\"] - Marker url. By default, if not specified, use option markerStyle. Otherwise, you can added a http url or a base64 image.\n * @param {Boolean} [options.splitResults = true] - False to disable layers search\n * @param {Boolean} [options.displayButtonAdvancedSearch = false] - False to disable advanced search tools (it will not be displayed). Default is false (not displayed)\n * @param {Boolean} [options.displayButtonGeolocate = false] - False to disable advanced search tools (it will not be displayed). Default is false (not displayed)\n * @param {Boolean} [options.displayButtonCoordinateSearch = false] - False to disable advanced search tools (it will not be displayed). Default is false (not displayed)\n * @param {Boolean} [options.displayButtonClose = true] - False to disable advanced search tools (it will not be displayed). Default is true (displayed)\n * @param {Object} [options.coordinateSearch] - coordinates search options.\n * @param {DOMElement} [options.coordinateSearch.target = null] - TODO : target location of results window. By default under the search bar.\n * @param {Array} [options.coordinateSearch.units] - list of coordinates units, to be displayed in control units list.\n * Values may be \"DEC\" (decimal degrees), \"DMS\" (sexagecimal) for geographical coordinates,\n * and \"M\" or \"KM\" for metric coordinates\n * @param {Array} [options.coordinateSearch.systems] - list of projection systems, default are Geographical (\"EPSG:4326\"), Web Mercator (\"EPSG:3857\") and Lambert 93 (\"EPSG:2154\").\n * Each array element (=system) is an object with following properties :\n * @param {String} [options.coordinateSearch.systems.crs] - Proj4 crs alias (from proj4 defs). e.g. : \"EPSG:4326\". Required\n * @param {String} [options.coordinateSearch.systems.label] - CRS label to be displayed in control. Default is crs code (e.g. \"EPSG:4326\")\n * @param {String} [options.coordinateSearch.systems.type] - CRS units type for coordinates conversion : \"Geographical\" or \"Metric\". Default: \"Geographical\"\n * @param {Object} [options.advancedSearch] - advanced search options for geocoding (filters). Properties can be found among geocode options.filterOptions (see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~geocode Gp.Services.geocode})\n * @param {DOMElement} [options.advancedSearch.target = null] - TODO : target location of results window. By default under the search bar.\n * @param {Object} [options.resources] - resources to be used by geocode and autocompletion services :\n * @param {String} [options.resources.geocode = \"location\"] - resources geocoding, by default : \"location\"\n * @param {Array} [options.resources.autocomplete] - resources autocompletion, by default : [\"PositionOfInterest\", \"StreetAddress\"]\n * @param {Boolean} [options.resources.search = false] - false to disable search service, by default : \"false\"\n * @param {Object} [options.searchOptions = {}] - options of search service\n * @param {Boolean} [options.searchOptions.addToMap = true] - add layer automatically to map, defaults to true.\n * @param {String} [options.searchOptions.filterServices] - filter on a list of search services, each field is separated by a comma. \"WMTS,TMS\" by default\n * @param {String} [options.searchOptions.filterWMTSPriority] - filter on priority WMTS layer in search, each field is separated by a comma. \"PLAN.IGN,ORTHOIMAGERY.ORTHOPHOTOS\" by default\n * @param {Boolean} [options.searchOptions.filterLayersPriority = false] - filter on priority layers in search, false by default\n * @param {String} [options.searchOptions.filterVectortiles] - filter on list of search layers only on service TMS, each field is separated by a comma. \"PLAN.IGN, ...\" by default\n * @param {Boolean} [options.searchOptions.updateVectortiles = false] - updating the list of search layers only on service TMS\n * @param {Object} [options.searchOptions.serviceOptions] - options of search service\n * @param {Sring} [options.searchOptions.serviceOptions.url] - url of service\n * @param {String} [options.searchOptions.serviceOptions.index] - index of search, \"standard\" by default\n * @param {String} [options.searchOptions.serviceOptions.fields] - list of search fields, each field is separated by a comma. \"title,layer_name\" by default\n * @param {Number} [options.searchOptions.serviceOptions.size] - number of response in the service. 1000 by default\n * @param {Number} [options.searchOptions.serviceOptions.maximumResponses] - number of results in the response. 10 by default\n * @param {Object} [options.geocodeOptions = {}] - options of geocode service (see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~geocode Gp.Services.geocode})\n * @param {Object} [options.geocodeOptions.serviceOptions] - options of geocode service\n * @param {Object} [options.autocompleteOptions = {}] - options of autocomplete service (see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~autoComplete Gp.Services.autoComplete})\n * @param {Object} [options.autocompleteOptions.serviceOptions] - options of autocomplete service\n * @param {Boolean} [options.autocompleteOptions.triggerGeocode = false] - trigger a geocoding request if the autocompletion does not return any suggestions, false by default\n * @param {Number} [options.autocompleteOptions.triggerDelay = 1000] - waiting time before sending the geocoding request, 1000ms by default\n * @param {Number} [options.autocompleteOptions.maximumEntries] - maximum autocompletion results we want to display\n * @param {Boolean} [options.autocompleteOptions.prettifyResults = false] - apply a filter/prettifier function to clean or prettify autocomplete entries\n * @param {Sting|Numeric|Function} [options.zoomTo] - zoom to results, by default, current zoom.\n * Value possible : auto or zoom level.\n * Possible to overload it with a function :\n * zoomTo : function (info) {\n * // do some stuff...\n * return zoom;\n * }\n * @fires searchengine:autocomplete:click\n * @fires searchengine:geocode:click\n * @fires searchengine:search:click\n * @fires searchengine:geolocation:click\n * @fires searchengine:coordinates:click\n * @todo option : direction (start|end) de la position du picto (loupe)\n * @todo option : choix du target pour les fenetres geocodage ou recherche par coordonnées\n * @example\n * var SearchEngine = ol.control.SearchEngine({\n * apiKey : \"CLEAPI\",\n * collapsed : true,\n * collapsible : true,\n * displayButtonAdvancedSearch : true,\n * displayButtonGeolocate : true,\n * displayButtonCoordinateSearch : true,\n * markerStyle : \"lightOrange\" // \"http://...\" or \"data/base64...\"\n * resources : {\n * geocode : [\"StreetAddress\", \"PositionOfInterest\"],\n * autocomplete : [\"StreetAddress\"],\n * search : false\n * },\n * advancedSearch : {\n * target : document.getElementById(\"dialog\"),\n * PositionOfInterest : [{name : \"municipality\", title : \"Ville\"}],\n * StreetAddress : [{...}]\n * },\n * coordinateSearch : {\n * target : null\n * systems : [\n * {\n * \"crs\" : \"EPSG:3857\",\n * \"label\" : \"Web Mercator\",\n * \"type\" : \"Metric\"\n * },\n * {\n * \"crs\" : \"EPSG:4326\",\n * \"label\" : \"Géographiques\",\n * \"type\" : \"Geographical\"\n * }\n * ],\n * units : [\"DEC\", \"DMS\"]\n * },\n * geocodeOptions : {},\n * autocompleteOptions : {},\n * searchOptions : {}\n * });\n *\n * SearchEngine.on(\"searchengine:autocomplete:click\", function (e) {\n * console.warn(\"autocomplete\", e.location);\n * });\n * SearchEngine.on(\"searchengine:search:click\", function (e) {\n * console.warn(\"search\", e.suggest);\n * });\n * SearchEngine.on(\"searchengine:geocode:click\", function (e) {\n * console.warn(\"geocode\", e.location);\n * });\n * SearchEngine.on(\"searchengine:geolocation:click\", function (e) {\n * console.warn(\"geolocation\", e.);\n * });\n * SearchEngine.on(\"searchengine:coordinate:click\", function (e) {\n * console.warn(\"coordinate\", e.);\n * });\n */\nvar SearchEngine = class SearchEngine extends Control {\n\n /**\n * See {@link ol.control.SearchEngine}\n * @module SearchEngine\n * @alias module:~controls/SearchEngine\n * @param {*} options - options\n * @example\n * import SearchEngine from \"gpf-ext-ol/controls/SearchEngine\"\n * ou\n * import { SearchEngine } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof SearchEngine)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"SearchEngine\";\n // initialisation du composant\n this.initialize(options);\n\n // // Widget main DOM container\n this.container = this._initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this.container) : this.element = this.container;\n\n return this;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (!map) {\n this._clearResults();\n }\n\n // mode \"collapsed\"\n if (!this.collapsed) {\n this._showSearchEngineButton.setAttribute(\"aria-pressed\", true);\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Returns true if widget is collapsed (minimized), false otherwise\n *\n * @returns {Boolean} collapsed - true if widget is collapsed\n */\n getCollapsed () {\n return this.collapsed;\n }\n\n /**\n * Collapse or display widget main container\n *\n * @param {Boolean} collapsed - True to collapse widget, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.log(\"[ERROR] SearchEngine:setCollapsed - missing collapsed parameter\");\n return;\n }\n\n if (!this.options.collapsible) {\n return; // on interdit le mode pliable !\n }\n\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n\n this._showSearchEngineButton.click();\n this.collapsed = collapsed;\n }\n\n /**\n * Get locations data from geocode service\n *\n * @returns {Object} data - locations\n */\n getData () {\n return this._geocodedLocations;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize SearchEngine control (called by SearchEngine constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n this._checkInputOptions(options);\n\n // define default options\n this.options = {\n collapsed : true,\n collapsible : true,\n zoomTo : \"\",\n resources : {\n geocode : [],\n autocomplete : [],\n search : false\n },\n displayButtonClose : true,\n displayButtonAdvancedSearch : false,\n displayButtonGeolocate : false,\n displayButtonCoordinateSearch : false,\n advancedSearch : {},\n coordinateSearch : {},\n searchOptions : {\n addToMap : true,\n serviceOptions : {\n maximumResponses : 5,\n }\n },\n geocodeOptions : {\n serviceOptions : {}\n },\n autocompleteOptions : {\n serviceOptions : {\n maximumResponses : 5,\n },\n triggerGeocode : false,\n triggerDelay : 1000,\n prettifyResults : false\n },\n displayMarker : true,\n markerStyle : \"lightOrange\",\n markerUrl : \"\",\n placeholder : \"Rechercher un lieu, une adresse\",\n splitResults : true,\n };\n\n // merge with user options\n Utils.mergeParams(this.options, options);\n if (this.options.resources.geocode === \"\") {\n this.options.resources.geocode = [\"PositionOfInterest\", \"StreetAddress\"];\n }\n if (this.options.resources.autocomplete.length === 0) {\n this.options.resources.autocomplete = [\"PositionOfInterest\", \"StreetAddress\"];\n }\n if (this.options.resources.search) {\n // configuration avec gestion des options surchargées du service\n if (this.options.searchOptions) {\n if (this.options.searchOptions.serviceOptions) {\n if (this.options.searchOptions.serviceOptions.url) {\n Search.setUrl(this.options.searchOptions.serviceOptions.url);\n }\n if (this.options.searchOptions.serviceOptions.fields) {\n Search.setFields(this.options.searchOptions.serviceOptions.fields);\n }\n if (this.options.searchOptions.serviceOptions.index) {\n Search.setIndex(this.options.searchOptions.serviceOptions.index);\n }\n if (this.options.searchOptions.serviceOptions.size) {\n Search.setSize(this.options.searchOptions.serviceOptions.size);\n }\n if (this.options.searchOptions.serviceOptions.maximumResponses) {\n Search.setMaximumResponses(this.options.searchOptions.serviceOptions.maximumResponses);\n }\n }\n if (this.options.searchOptions.filterServices) {\n Search.setFiltersByService(this.options.searchOptions.filterServices);\n }\n if (this.options.searchOptions.filterLayersPriority) {\n Search.setFiltersByLayerPriority(this.options.searchOptions.filterLayersPriority);\n }\n if (this.options.searchOptions.filterWMTSPriority) {\n Search.setFilterWMTSPriority(this.options.searchOptions.filterWMTSPriority);\n }\n if (this.options.searchOptions.filterVectortiles) {\n Search.setFiltersByTMS(this.options.searchOptions.filterVectortiles);\n }\n if (this.options.searchOptions.updateVectortiles) {\n Search.updateFilterByTMS(); // url par defaut\n }\n }\n // abonnement au service\n Search.target.addEventListener(\"suggest\", (e) => {\n logger.debug(e);\n this._fillSearchedSuggestListContainer(e.detail);\n });\n }\n\n if (!this.options.collapsible) {\n this.options.collapsed = false; // on interdit le mode pliable !\n }\n /** {Boolean} specify if searchEngine control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n // identifiant du contrôle : utile pour suffixer les identifiants CSS (pour gérer le cas où il y en a plusieurs dans la même page)\n this._uid = this.options.id || SelectorID.generate();\n\n this._showSearchEngineButton = null;\n\n // container de l'input de recherche\n this._inputSearchContainer = null;\n\n // container des reponses de l'autocompletion / du service de recherche\n this._autocompleteContainer = null;\n this._containerResultsLocation = null;\n this._containerResultsSuggest = null;\n // Radio buttons correspondants\n this._radioButtonLocation = null;\n this._radioButtonSuggest = null;\n\n // listes des reponses de l'autocompletion\n this._suggestedLocations = [];\n\n // container des reponses du geocodage\n this._geocodedContainer = null;\n\n // liste des reponses du geocodage\n this._geocodedLocations = [];\n\n // container des filtres du geocodage\n this._filterContainer = null;\n\n // ressource de geocodage selectionnée pour le geocodage avancé\n this._currentGeocodingCode = null;\n\n // localisant\n this._currentGeocodingLocation = null;\n\n // liste des filtres du geocodage pour le geocodage avancé\n this._advancedSearchFilters = {};\n this._initAdvancedSearchFilters();\n\n // liste des ressources du geocodage pour le geocodage avancé\n this._advancedSearchCodes = [];\n this._initAdvancedSearchCodes();\n\n // recherche par coordonnées : systemes de projections\n this._coordinateSearchSystems = [];\n if (this.options.displayButtonCoordinateSearch) {\n this._initCoordinateSearchSystems();\n this._currentCoordinateSearchSystems = this._coordinateSearchSystems[0]; // epsg:4326\n this._currentCoordinateSearchType = this._coordinateSearchSystems[0].type; // geographical ou metric\n }\n\n // recherche par coordonnées : unités\n this._coordinateSearchUnits = [];\n if (this.options.displayButtonCoordinateSearch) {\n this._initCoordinateSearchUnits();\n this._currentCoordinateSearchUnits = this._coordinateSearchUnits[this._currentCoordinateSearchType][0].code; // decimal\n }\n\n\n this._coordinateSearchLngInput = null;\n this._coordinateSearchLatInput = null;\n\n // marker\n this._marker = null;\n\n // marker style or url\n var _markerStyle = this.options.markerStyle;\n var _markerUrl = this.options.markerUrl;\n if (_markerUrl) {\n this._markerUrl = _markerUrl;\n } else {\n this._markerUrl = (Object.keys(Markers).indexOf(_markerStyle) === -1) ? Markers[\"lightOrange\"] : Markers[_markerStyle];\n }\n\n // marker display\n this._displayMarker = this.options.displayMarker;\n\n // popup\n this._popupContent = null;\n this._popupDiv = this._initPopupDiv();\n this._popupOverlay = null;\n\n // trigger geocode\n this._triggerHandler = null;\n }\n\n /**\n * this method is called by this.initialize()\n * and makes sure input options are correctly formated\n *\n * @param {Object} options - options\n *\n * @private\n */\n _checkInputOptions (options) {\n var i;\n\n if (options.resources) {\n // on vérifie que resources est bien un objet\n if (typeof options.resources === \"object\") {\n // ressources de geocodage\n var geocodeResources = options.resources.geocode;\n if (geocodeResources) {\n // on vérifie que la liste des ressources de geocodage est bien un tableau\n if (Array.isArray(geocodeResources)) {\n var geocodeResourcesList = [\"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\", \"Administratif\"];\n for (i = 0; i < geocodeResources.length; i++) {\n if (geocodeResourcesList.indexOf(geocodeResources[i]) === -1) {\n // si la resource n'est pas référencée, on l'enlève\n // geocodeResources.splice(i, 1);\n logger.log(\"[SearchEngine] options.resources.geocode : \" + geocodeResources[i] + \" is not a resource for geocode\");\n }\n }\n } else {\n logger.log(\"[SearchEngine] 'options.resources.geocode' parameter should be an array\");\n geocodeResources = null;\n }\n }\n\n // ressources d'autocompletion\n var autocompleteResources = options.resources.autocomplete;\n if (autocompleteResources) {\n // on vérifie que la liste des ressources d'autocompletion est bien un tableau\n if (Array.isArray(autocompleteResources)) {\n var autocompleteResourcesList = [\"StreetAddress\", \"PositionOfInterest\"];\n for (i = 0; i < autocompleteResources.length; i++) {\n if (autocompleteResourcesList.indexOf(autocompleteResources[i]) === -1) {\n // si la resource n'est pas référencée, on l'enlève\n // autocompleteResources.splice(i, 1);\n logger.log(\"[SearchEngine] options.resources.autocomplete : \" + autocompleteResources[i] + \" is not a resource for autocomplete\");\n }\n }\n } else {\n logger.log(\"[SearchEngine] 'options.resources.autocomplete' parameter should be an array\");\n autocompleteResources = null;\n }\n }\n } else {\n logger.log(\"[SearchEngine] 'resources' parameter should be an object\");\n options.resources = null;\n }\n }\n }\n\n /**\n * this method is called by this.initialize()\n * and initialize the geocoding resources titles.\n *\n * @private\n */\n _initAdvancedSearchCodes () {\n // INFORMATION\n // on y ajoute les filtres attributaires pour une table de ressources\n // selectionnée via un evenement (onchange) de la liste deroulante du\n // menu avancé du geocodage.\n // cf. onGeocodingAdvancedSearchCodeChange() pour la selection de la\n // ressource de geocodage à afficher\n\n var geocodeResources = this.options.resources.geocode;\n if (geocodeResources === \"location\") {\n geocodeResources = [\"PositionOfInterest\", \"StreetAddress\", \"CadastralParcel\"];\n }\n if (!Array.isArray(geocodeResources)) {\n geocodeResources = [geocodeResources];\n }\n for (var i = 0; i < geocodeResources.length; i++) {\n switch (geocodeResources[i]) {\n case \"PositionOfInterest\":\n this._advancedSearchCodes.push({\n id : \"PositionOfInterest\",\n title : \"Lieux/toponymes\"\n });\n break;\n case \"StreetAddress\":\n this._advancedSearchCodes.push({\n id : \"StreetAddress\",\n title : \"Adresses\"\n });\n break;\n case \"CadastralParcel\":\n this._advancedSearchCodes.push({\n id : \"CadastralParcel\",\n title : \"Parcelles cadastrales\"\n });\n break;\n default:\n break;\n }\n }\n // par défaut, au cas où aucune ressource passée en option ne correspond à celles attendues\n if (this._advancedSearchCodes.length === 0) {\n this._advancedSearchCodes = [{\n id : \"StreetAddress\",\n title : \"Adresses\"\n }, {\n id : \"PositionOfInterest\",\n title : \"Lieux/toponymes\"\n }, {\n id : \"CadastralParcel\",\n title : \"Cadastre\"\n }];\n }\n\n logger.log(\"advancedSearchCodes\", this._advancedSearchCodes);\n }\n\n /**\n * this method is called by this.onAdd()\n * and initialize the advanced geocoding filters.\n *\n * @private\n */\n _initAdvancedSearchFilters () {\n // liste des filtres par defauts pour toutes les ressources\n this._advancedSearchFilters = SearchEngineUtils.advancedSearchFiltersByDefault;\n\n // on merge les options avancées avec celles par defaut\n var advancedSearchFiltersCustom = this.options.advancedSearch;\n Utils.assign(this._advancedSearchFilters, advancedSearchFiltersCustom);\n\n logger.log(\"advancedSearchFilters\", this._advancedSearchFilters);\n }\n\n /**\n * this method is called by the constructor and initialize the projection\n * systems.\n * getting coordinates in the requested projection :\n * see this.onCoordinateSearchSystemChange()\n *\n * @private\n */\n _initCoordinateSearchSystems () {\n // on donne la possibilité à l'utilisateur de modifier\n // la liste des systèmes à afficher\n // Ex. this.options.coordinateSearch.systems\n\n // systemes de projection disponible par defaut\n var projectionSystemsByDefault = [{\n label : \"G\\u00e9ographique\",\n crs : \"EPSG:4326\",\n type : \"Geographical\"\n }, {\n label : \"Web Mercator\",\n crs : \"EPSG:3857\",\n type : \"Metric\"\n }, {\n label : \"Lambert 93\",\n crs : \"EPSG:2154\",\n type : \"Metric\"\n }];\n\n var systems = this.options.coordinateSearch.systems;\n if (systems) {\n // on ajoute les definitions d'un systeme de reference fournies par l'utilisateur\n for (var i = 0; i < systems.length; i++) {\n var sys = systems[i];\n this._setSystem(sys);\n }\n }\n\n // on ajoute les systèmes de projections par défaut\n if (this._coordinateSearchSystems.length === 0) {\n for (var j = 0; j < projectionSystemsByDefault.length; j++) {\n this._setSystem(projectionSystemsByDefault[j]);\n }\n }\n }\n\n /**\n * this method is called by the constructor and initialize the units.\n * getting coordinates in the requested units :\n * see this.onCoordinateSearchUnitsChange()\n *\n * @private\n */\n _initCoordinateSearchUnits () {\n // on donne la possibilité à l'utilisateur de modifier\n // la liste des unités à afficher\n // Ex.\n // this.options.units : [\"DEC\", \"DMS\"]\n\n // unités disponible par defaut\n var projectionUnitsByDefault = {\n Geographical : [{\n code : \"DEC\",\n label : \"degrés décimaux\",\n format : MathUtils.coordinateToDecimal\n }, {\n code : \"DMS\",\n label : \"degrés sexagésimaux\",\n format : MathUtils.coordinateToDMS\n }],\n Metric : [{\n code : \"M\",\n label : \"mètres\",\n format : MathUtils.coordinateToMeter\n }, {\n code : \"KM\",\n label : \"kilomètres\",\n format : MathUtils.coordinateToKMeter\n }]\n };\n\n var units = this.options.coordinateSearch.units;\n if (units) {\n for (var type in projectionUnitsByDefault) {\n if (projectionUnitsByDefault.hasOwnProperty(type)) {\n var found = false;\n for (var j = 0; j < projectionUnitsByDefault[type].length; j++) {\n var obj = projectionUnitsByDefault[type][j];\n for (var i = 0; i < units.length; i++) {\n var unit = units[i];\n if (obj.code === unit) {\n found = true;\n if (!this._coordinateSearchUnits[type]) {\n this._coordinateSearchUnits[type] = [];\n }\n this._coordinateSearchUnits[type].push(obj);\n }\n }\n }\n if (!found) {\n this._coordinateSearchUnits[type] = projectionUnitsByDefault[type];\n }\n }\n }\n }\n\n // au cas où...\n if (typeof this._coordinateSearchUnits === \"object\" && Object.keys(this._coordinateSearchUnits).length === 0) {\n this._coordinateSearchUnits = projectionUnitsByDefault;\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize popup div\n * (to display results information on marker click)\n *\n * @return {Object} element - DOM element for popup\n * @private\n */\n _initPopupDiv () {\n var context = this;\n var element = document.createElement(\"div\");\n element.className = \"gp-feature-info-div gpf-widget-color\";\n // bouton de fermeture de la pop-up\n var closer = document.createElement(\"button\");\n closer.title = \"Fermer la pop-up\";\n closer.className = \"gp-styling-button closer gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-mt-1v fr-mr-2v\";\n\n // on closer click : remove popup\n closer.onclick = function () {\n if (context._popupOverlay != null) {\n context._popupOverlay.setPosition(undefined);\n }\n return false;\n };\n this._popupContent = document.createElement(\"div\");\n this._popupContent.className = \"gp-features-content-div\";\n this._popupContent.style[\"min-width\"] = \"200px\";\n element.appendChild(this._popupContent);\n element.appendChild(closer);\n\n return element;\n }\n\n // ################################################################### //\n // ######################## DOM initialize ########################### //\n // ################################################################### //\n\n /**\n * Create control main container\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initContainer () {\n // create main container\n var container = this._createMainContainerElement();\n\n var searchDiv = this._createSearchDivElement();\n // create search engine picto\n var picto = this._showSearchEngineButton = this._createShowSearchEnginePictoElement(this.options.collapsible);\n searchDiv.appendChild(picto);\n\n // only dsfr : on applique un fond blanc sur une barre de recherche fixe\n if (!this.options.collapsible) {\n container.classList.add(\"gpf-widget-color\", \"gpf-widget-padding\");\n }\n\n var search = this._inputSearchContainer = this._createSearchInputElement(this.options.placeholder);\n if (this.options.displayButtonClose) {\n search.appendChild(this._createSearchResetElement());\n }\n\n var context = this;\n if (search.addEventListener) {\n search.addEventListener(\"click\", function () {\n context.onAutoCompleteInputClick();\n });\n } else if (search.attachEvent) {\n search.attachEvent(\"onclick\", function () {\n context.onAutoCompleteInputClick();\n });\n }\n searchDiv.appendChild(search);\n\n var buttonsContainer = this._createButtonsElement();\n var firstLineWrapper = this._createFirstLineWrapper();\n firstLineWrapper.appendChild(searchDiv);\n firstLineWrapper.appendChild(buttonsContainer);\n container.appendChild(firstLineWrapper);\n\n if (checkDsfr() && this.options.splitResults || this.options.displayButtonAdvancedSearch) {\n var radioContainer = this._createRadioContainer();\n container.appendChild(radioContainer);\n }\n\n if (checkDsfr() && this.options.splitResults) {\n var radioElements;\n [radioElements, this._radioButtonLocation, this._radioButtonSuggest] = this._createRadioElements();\n radioContainer.appendChild(radioElements);\n }\n\n if (this.options.displayButtonAdvancedSearch) {\n var advancedShow = this._createShowAdvancedSearchElement();\n radioContainer.appendChild(advancedShow);\n\n // INFO je decompose les appels car j'ai besoin de recuperer le container\n // des filtres\n var advancedPanel = this._createAdvancedSearchPanelElement();\n var advancedPanelDiv = this._createAdvancedSearchPanelDivElement();\n var advancedHeader = this._createAdvancedSearchPanelHeaderElement();\n var advancedForm = this._createAdvancedSearchPanelFormElement(this._advancedSearchCodes);\n var advancedFormFilters = this._filterContainer = this._createAdvancedSearchFormFiltersElement();\n this._setFilter(this._advancedSearchCodes[0].id); // ex \"PositionOfInterest\"\n var advancedFormInput = this._createAdvancedSearchFormInputElement();\n\n advancedForm.appendChild(advancedFormFilters);\n advancedForm.appendChild(advancedFormInput);\n advancedPanelDiv.appendChild(advancedHeader);\n advancedPanelDiv.appendChild(advancedForm);\n advancedPanel.appendChild(advancedPanelDiv);\n container.appendChild(advancedPanel);\n }\n\n if (this.options.displayButtonGeolocate) {\n var geolocateShow = this._createShowGeolocateElement();\n buttonsContainer.appendChild(geolocateShow);\n }\n\n if (this.options.displayButtonCoordinateSearch) {\n var searchByCoordinateShow = this._createShowSearchByCoordinateElement();\n buttonsContainer.appendChild(searchByCoordinateShow);\n\n var coordinatePanel = this._createCoordinateSearchPanelElement();\n var coordinatePanelDiv = this._createCoordinateSearchPanelDivElement();\n var coordinateHeader = this._createCoordinateSearchPanelHeaderElement();\n var coordinateForm = this._createCoordinateSearchPanelFormElement();\n\n var div = null;\n div = this._containerSystems = this.__createCoordinateSearchDivElement();\n coordinateForm.appendChild(div);\n var labelSystems = this._createCoordinateSearchSystemsLabelElement();\n var systems = this._setCoordinateSearchSystemsSelectElement(this._coordinateSearchSystems);\n div.appendChild(labelSystems);\n div.appendChild(systems);\n\n div = this._containerUnits = this.__createCoordinateSearchDivElement();\n coordinateForm.appendChild(div);\n var labelUnits = this._createCoordinateSearchUnitsLabelElement();\n var units = this._setCoordinateSearchUnitsSelectElement(this._coordinateSearchUnits[this._currentCoordinateSearchType]);\n div.appendChild(labelUnits);\n div.appendChild(units);\n\n div = this._containerCoordinateLng = this.__createCoordinateSearchDivElement();\n coordinateForm.appendChild(div);\n var coordinateLng = this._setCoordinateSearchLngLabelElement(this._currentCoordinateSearchType);\n var coordinateInputLng = this._coordinateSearchLngInput = this._setCoordinateSearchLngInputElement(this._currentCoordinateSearchUnits);\n div.appendChild(coordinateLng);\n div.appendChild(coordinateInputLng);\n\n div = this._containerCoordinateLat = this.__createCoordinateSearchDivElement();\n coordinateForm.appendChild(div);\n var coordinateLat = this._setCoordinateSearchLatLabelElement(this._currentCoordinateSearchType);\n var coordinateInputLat = this._coordinateSearchLatInput = this._setCoordinateSearchLatInputElement(this._currentCoordinateSearchUnits);\n div.appendChild(coordinateLat);\n div.appendChild(coordinateInputLat);\n\n var submit = this._createCoordinateSearchSubmitElement();\n coordinateForm.appendChild(submit);\n\n coordinatePanelDiv.appendChild(coordinateHeader);\n coordinatePanelDiv.appendChild(coordinateForm);\n\n coordinatePanel.appendChild(coordinatePanelDiv);\n container.appendChild(coordinatePanel);\n }\n\n // INFO je decompose les appels car j'ai besoin de recuperer le container\n // des resultats de l'autocompletion\n var autocomplete = this._autocompleteContainer = this._createAutoCompleteElement();\n var autocompleteList = this._createAutoCompleteListElement();\n var containerResultsLocation = this._containerResultsLocation = this._createAutoCompletedLocationContainer();\n var containerResultsSuggest = this._containerResultsSuggest = this._createSearchedSuggestContainer();\n autocompleteList.appendChild(containerResultsLocation);\n autocompleteList.appendChild(containerResultsSuggest);\n autocomplete.appendChild(autocompleteList);\n container.appendChild(autocomplete);\n\n // INFO je decompose les appels car j'ai besoin de recuperer le container\n // des resultats du geocodage\n var geocode = this._createGeocodeResultsElement();\n var geocodeDiv = this._createGeocodeResultsDivElement();\n geocode.appendChild(geocodeDiv);\n var geocodeList = this._geocodedContainer = this._createGeocodeResultsListElement();\n geocodeDiv.appendChild(geocodeList);\n container.appendChild(geocode);\n\n return container;\n }\n\n /**\n * this method is called by :\n * - this._initContainer() : ...\n * - this.onGeocodingAdvancedSearchCodeChoice() : ...\n * and initialize or create the filters container HTMLElement\n * to the geocoding advanced menu.\n *\n * @param {String} code - resource geocoding name\n *\n * @returns {DOMElement} DOM element\n * @private\n */\n _setFilter (code) {\n // INFORMATION\n // Nous avons 2 solutions possibles pour la mise en place des filtres.\n // 1. Soit on decide de creer tous les filtres pour chaque ressource\n // de geocodage à l'initialisation du composant, et on joue sur le\n // mode 'hidden' pour n'afficher que la ressource selectionnée.\n // 2. Soit on decide de creer à chaque fois les filtres pour la\n // ressource selectionnée.\n // Chaque solution a ses inconvenients/avantages.\n // Implementation du choix 2 car elle offre plus de souplesse pour\n // recuperer les 'form-data'...\n\n var container = this._filterContainer;\n\n var codeFound = false;\n for (var i = 0; i < this._advancedSearchCodes.length; i++) {\n if (this._advancedSearchCodes[i].id === code) {\n codeFound = true;\n break;\n }\n }\n\n if (!codeFound) {\n // cette ressource n'est pas disponible,\n // on supprime les anciens enfants...\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n return;\n }\n\n // on sauvegarde la ressource de geocodage sélectionnée\n this._currentGeocodingCode = code;\n\n // on supprime les enfants...\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n\n var lstAttributs = this._advancedSearchFilters[code];\n if (!lstAttributs || lstAttributs.length === 0) {\n // cette ressource n'est pas parametrable\n return;\n }\n\n var divTable = this._createAdvancedSearchFiltersTableElement(code, true);\n\n for (var j = 0; j < lstAttributs.length; j++) {\n var divFilter = this._createAdvancedSearchFiltersAttributElement(lstAttributs[j]);\n divTable.appendChild(divFilter);\n }\n\n container.appendChild(divTable);\n\n return container;\n }\n\n // ################################################################### //\n // ################ methods to request and results ################### //\n // ################################################################### //\n\n /**\n * this method is called by this.onAutoCompleteSearch()\n * and executes a request to the service.\n *\n * @param {Object} settings - service settings\n * @param {String} settings.text - text\n * @param {Function} settings.onSuccess - callback\n * @param {Function} settings.onFailure - callback\n * @private\n */\n _requestAutoComplete (settings) {\n // on ne fait pas de requête si on n'a pas renseigné de parametres !\n if (!settings || (typeof settings === \"object\" && Object.keys(settings).length === 0)) {\n return;\n }\n\n // on ne fait pas de requête si la parametre 'text' est vide !\n if (!settings.text) {\n return;\n }\n\n logger.log(settings);\n\n var options = {};\n // on recupere les options du service\n Utils.assign(options, this.options.autocompleteOptions.serviceOptions);\n // ainsi que la recherche et les callbacks\n Utils.assign(options, settings);\n\n // on ajoute le paramètre filterOptions.type spécifiant les ressources.\n var resources = this.options.resources.autocomplete;\n if (resources && Array.isArray(resources)) {\n // il se peut que l'utilisateur ait surchargé ce paramètre dans geocodeOptions,\n if (!options.type) {\n options.type = resources;\n }\n }\n\n // cas où la clef API n'est pas renseignée dans les options du service,\n // on utilise celle renseignée au niveau du controle ou la clé \"calcul\" par défaut.\n options.apiKey = options.apiKey || this.options.apiKey;\n\n // si l'utilisateur a spécifié le paramètre ssl au niveau du control, on s'en sert\n // true par défaut (https)\n if (typeof options.ssl !== \"boolean\") {\n if (typeof this.options.ssl === \"boolean\") {\n options.ssl = this.options.ssl;\n } else {\n options.ssl = true;\n }\n }\n logger.log(options);\n\n Gp.Services.autoComplete(options);\n }\n\n /**\n * this method is called by this.onAutoCompleteSearchText() (case of success)\n * and fills the container of the location list.\n * it creates a HTML Element per location\n *\n * @param {Array} locations - Array of Gp.Services.AutoComplete.SuggestedLocation corresponding to autocomplete results list\n * @private\n */\n _fillAutoCompletedLocationListContainer (locations) {\n if (!locations || locations.length === 0) {\n return;\n }\n\n // on vide la liste avant de la construire\n var element = this._containerResultsLocation;\n if (element.childElementCount) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n element.classList.add(\"GPelementHidden\", \"gpf-hidden\");\n if (locations.length) {\n if (!this._radioButtonLocation || (this._radioButtonLocation && this._radioButtonLocation.checked)) {\n element.classList.remove(\"GPelementHidden\", \"gpf-hidden\");\n }\n this._displaySuggestedLocation();\n if (!checkDsfr() || !this.options.splitResults) {\n this._createAutoCompletedLocationTitleElement();\n }\n for (var i = 0; i < locations.length; i++) {\n // Proposals are dynamically filled in Javascript by autocomplete service\n this._createAutoCompletedLocationElement(locations[i], i);\n }\n }\n }\n\n /**\n * this method is called by this.() (case of success)\n * and fills the container of the suggest list.\n * it creates a HTML Element per suggest\n *\n * @param {Array} suggests - Array of suggested corresponding to search results list\n * @private\n */\n _fillSearchedSuggestListContainer (suggests) {\n // on vide la liste avant de la construire\n var element = this._containerResultsSuggest;\n if (element.childElementCount) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n element.classList.add(\"GPelementHidden\", \"gpf-hidden\");\n if (suggests.length) {\n if (!this._radioButtonSuggest || (this._radioButtonSuggest && this._radioButtonSuggest.checked)) {\n element.classList.remove(\"GPelementHidden\", \"gpf-hidden\");\n }\n if (!checkDsfr() || !this.options.splitResults) {\n this._createSearchedSuggestTitleElement();\n }\n for (let i = 0; i < suggests.length; i++) {\n const suggest = suggests[i];\n this._createSearchedSuggestElement(suggest, i);\n }\n }\n }\n\n /**\n * this method is called by this.onAutoCompleteSearch()\n * and executes a request to the service.\n *\n * @param {Object} settings - service settings\n * @param {String} settings.location - text\n * @param {Function} settings.onSuccess - callback\n * @param {Function} settings.onFailure - callback\n * @private\n */\n _requestGeocoding (settings) {\n // on ne fait pas de requête si on n'a pas renseigné de parametres !\n if (!settings || (typeof settings === \"object\" && Object.keys(settings).length === 0)) {\n return;\n }\n\n // on ne fait pas de requête si la parametre 'text' est vide !\n if (settings.query === null) {\n return;\n }\n\n logger.log(settings);\n\n var options = {};\n // on recupere les options du service\n Utils.assign(options, this.options.geocodeOptions.serviceOptions);\n // ainsi que la recherche et les callbacks\n Utils.assign(options, settings);\n // on redefinie les callbacks si les callbacks de service existent\n var self = this;\n var bOnFailure = !!(this.options.geocodeOptions.serviceOptions.onFailure !== null && typeof this.options.geocodeOptions.serviceOptions.onFailure === \"function\"); // cast variable to boolean\n var bOnSuccess = !!(this.options.geocodeOptions.serviceOptions.onSuccess !== null && typeof this.options.geocodeOptions.serviceOptions.onSuccess === \"function\");\n if (bOnSuccess) {\n var cbOnSuccess = function (e) {\n settings.onSuccess.call(self, e);\n self.options.geocodeOptions.serviceOptions.onSuccess.call(self, e);\n };\n options.onSuccess = cbOnSuccess;\n }\n if (bOnFailure) {\n var cbOnFailure = function (e) {\n settings.onFailure.call(self, e);\n self.options.geocodeOptions.serviceOptions.onFailure.call(self, e);\n };\n options.onFailure = cbOnFailure;\n }\n\n // on ajoute le paramètre index spécifiant les ressources.\n var resources = this.options.resources.geocode;\n if (resources) {\n // il se peut que l'utilisateur ait surchargé ce paramètre dans geocodeOptions,\n // ou qu'il ait déjà été rempli (cas de la recherche avancée)\n if (!options.index) {\n options.index = resources;\n }\n }\n\n // cas où la clef API n'est pas renseignée dans les options du service,\n // on utilise celle renseignée au niveau du controle ou la clé \"calcul\" par défaut\n options.apiKey = options.apiKey || this.options.apiKey;\n\n // si l'utilisateur a spécifié le paramètre ssl au niveau du control, on s'en sert\n // true par défaut (https)\n if (typeof options.ssl !== \"boolean\") {\n if (typeof this.options.ssl === \"boolean\") {\n options.ssl = this.options.ssl;\n } else {\n options.ssl = true;\n }\n }\n\n logger.log(options);\n\n Gp.Services.geocode(options);\n }\n\n /**\n * this method is called by this.onGeocodingSearch()\n * and fills the container of the location results.\n * it creates a HTML Element per location\n * (cf. this. ...)\n *\n * @param {Object[]} locations - locations\n *\n * @private\n */\n _fillGeocodedLocationListContainer (locations) {\n if (!locations || locations.length === 0) {\n this._clearGeocodedLocation();\n return;\n }\n\n // on vide la liste avant de la construire\n var element = this._geocodedContainer;\n if (element.childElementCount) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n\n for (var i = 0; i < locations.length; i++) {\n logger.log(locations[i]);\n // Proposals are dynamically filled in Javascript by autocomplete service\n this._createGeocodedLocationElement(locations[i], i);\n }\n\n // sauvegarde de l'etat des locations\n this._geocodedLocations = locations;\n }\n\n // ################################################################### //\n // ######################### other methods ########################### //\n // ################################################################### //\n\n /**\n * this sends the label to the panel.\n *\n * @param {String} label - label suggested location\n * @private\n */\n _setLabel (label) {\n document.getElementById(\"GPsearchInputText-\" + this._uid).value = label;\n }\n\n /**\n * this method is called by this.on*ResultsItemClick()\n * and move/zoom on a position.\n *\n * @param {Array} position - ol.Coordinate object [lon, lat] (en lat/lon : \"EPSG:4326\")\n * @param {Number} zoom - zoom level\n * @private\n */\n _setPosition (position, zoom) {\n var view = this.getMap().getView();\n view.setCenter(position);\n view.setZoom(zoom);\n }\n\n /**\n * this method is called by this.on*ResultsItemClick()\n * and displays a marker.\n * FIXME\n *\n * @param {Array} position - ol.Coordinate object [lon, lat] ou [x, y]\n * @param {Object} info - location information\n * @private\n */\n _setMarker (position, info) {\n var map = this.getMap();\n var context = this;\n\n // remove previous markers\n if (this._marker != null) {\n map.removeOverlay(this._marker);\n this._marker = null;\n }\n\n if (position) {\n // création de l'élément DOM\n var markerDiv = document.createElement(\"img\");\n markerDiv.src = this._markerUrl;\n\n // ajout de l'évènement onclick (pour afficher une popup)\n if (markerDiv.addEventListener) {\n markerDiv.addEventListener(\n \"click\",\n function () {\n context._onResultMarkerSelect(info);\n }\n );\n } else if (markerDiv.attachEvent) {\n // Internet Explorer\n markerDiv.attachEvent(\n \"onclick\",\n function () {\n context._onResultMarkerSelect(info);\n }\n );\n }\n\n // création du marker (overlay)\n this._marker = new Overlay({\n position : position,\n // offset : [-25.5, -38], // FIXME mauvais rendu !?\n positioning : \"center-center\",\n element : markerDiv,\n stopEvent : false\n });\n map.addOverlay(this._marker);\n }\n }\n\n /**\n * this method is called by this.on*ResultsItemClick()\n * and get zoom to results.\n *\n * @param {Object} info - info\n *\n * @returns {Integer} zoom\n * @private\n */\n _getZoom (info) {\n var map = this.getMap();\n var key = this.options.zoomTo;\n var zoom = null;\n\n // les valeurs du zooms sont determinées\n // soit par les mots clefs suivants : max, min ou auto\n // soit par un niveau de zoom\n // soit defini par l'utilisateur via une fonction\n\n if (typeof key === \"function\") {\n logger.trace(\"zoom function\");\n zoom = key.call(this, info);\n }\n\n if (typeof key === \"number\") {\n logger.trace(\"zoom level\");\n zoom = key;\n }\n\n if (typeof key === \"string\") {\n // if (key === \"max\") {\n // zoom = map.getMaxZoom();\n // } else if (key === \"min\") {\n // zoom = map.getMinZoom();\n // } else\n\n if (key === \"auto\") {\n logger.trace(\"zoom auto\");\n zoom = SearchEngineUtils.zoomToResultsByDefault(info);\n } else {\n logger.trace(\"zoom level parsing\");\n var value = parseInt(key, 10);\n if (!isNaN(value)) {\n logger.trace(\"zoom parsing\");\n zoom = value;\n }\n }\n }\n\n // polyfill IE\n Number.isInteger = Number.isInteger || function (value) {\n return typeof value === \"number\" &&\n isFinite(value) &&\n Math.floor(value) === value;\n };\n\n // test de validité du zoom,\n // on prend le zoom courant par defaut ...\n if (!zoom || zoom === \"\" || !Number.isInteger(zoom)) {\n logger.trace(\"zoom not found, current zoom...\");\n zoom = map.getView().getZoom();\n }\n\n // FIXME test si le zoom est dans l'espace de la carte\n var min = map.minZoom; // .getMinZoom();\n var max = map.maxZoom; // .getMaxZoom();\n if (zoom < min) {\n logger.trace(\"zoom level min...\");\n zoom = min;\n }\n if (zoom > max) {\n logger.trace(\"zoom level max...\");\n zoom = max;\n }\n\n logger.trace(\"zoom\", zoom);\n return zoom;\n }\n\n /**\n * this method is called on 'click' on this._marker\n * (cf. this._setMarker() )\n * and sets a popup with marker information\n *\n * @param {Object} information - location information\n * @private\n */\n _onResultMarkerSelect (information) {\n var map = this.getMap();\n\n var popupContent = \"\";\n if (typeof information !== \"string\") {\n if (information.service === \"GeocodedLocation\") {\n popupContent = \"
      \";\n var attributes = information.location.placeAttributes;\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr)) {\n if (attr !== \"trueGeometry\" && attr !== \"extraFields\" && attr !== \"houseNumberInfos\" && attr !== \"_count\") {\n popupContent += \"
    • \";\n popupContent += \"\" + attr.toUpperCase() + \" : \";\n popupContent += attributes[attr];\n popupContent += \"
    • \";\n }\n }\n }\n popupContent += \"
    \";\n } else if (information.service === \"SuggestedLocation\") {\n popupContent = GeocodeUtils.getSuggestedLocationFreeform(information.location);\n } else {\n popupContent = \"sans informations.\";\n }\n } else {\n popupContent = information;\n }\n\n this._popupContent.innerHTML = popupContent;\n if (!this._popupOverlay) {\n // ajout de la popup a la carte comme un overlay\n this._popupOverlay = new Overlay({\n element : this._popupDiv,\n positioning : \"bottom-center\",\n position : this._marker.getPosition(),\n offset : [0, -42]\n });\n map.addOverlay(this._popupOverlay);\n } else {\n // si l'overlay est déjà créé, on modifie juste sa position\n this._popupOverlay.setPosition(this._marker.getPosition());\n }\n }\n\n /**\n * Set additional projection system\n *\n * @param {Object} system - projection system\n * @param {String} system.crs - Proj4 crs alias (from proj4 defs) e.g. \"EPSG:4326\"\n * @param {String} [system.label] - CRS label to be displayed in control. Default is system.crs alias\n * @param {String} [system.type] - CRS units type for coordinates conversion (one of control options.units). Default is \"Metric\"\n */\n _setSystem (system) {\n if (typeof system !== \"object\") {\n logger.log(\"[ERROR] MousePosition:addSystem - system parameter should be an object\");\n return;\n }\n if (!system.crs) {\n logger.error(\"crs not defined !\");\n return;\n }\n if (!system.label) {\n logger.warn(\"crs label not defined, use crs code by default.\");\n system.label = system.crs;\n }\n if (!system.type) {\n logger.warn(\"type srs not defined, use 'Metric' by default.\");\n system.type = \"Metric\";\n }\n\n // chargement de la definition de la projection\n // même si déjà chargé...\n CRS.loadByName(system.crs);\n\n if (!olProjGet(system.crs)) {\n logger.error(\"crs '{}' not available into proj4 definitions !\", system.crs);\n return;\n }\n\n // add system to control systems\n for (var j = 0; j < this._coordinateSearchSystems.length; j++) {\n var obj = this._coordinateSearchSystems[j];\n if (system.crs === obj.crs) {\n // warn user\n logger.info(\"crs '{}' already configured\", obj.crs);\n }\n }\n system.code = this._coordinateSearchSystems.length;\n this._coordinateSearchSystems.push(system);\n }\n\n // ################################################################### //\n // ###################### other handlers events ###################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on 'GPshowSearchEnginePicto' tag label\n * (cf. this._createShowSearchEnginePictoElement), and it cleans the component\n * when it's closed.\n *\n * @param { event } e évènement associé au clic\n * @private\n */\n onShowSearchEngineClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n // on supprime toutes les interactions\n Interactions.unset(map);\n var opened = this._showSearchEngineButton.ariaPressed;\n this.collapsed = !(opened === \"true\");\n // on génère nous même l'evenement OpenLayers de changement de propriété\n // (utiliser ol.control.SearchEngine.on(\"change:collapsed\", function ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n\n // on nettoie si on ferme le composant\n if (this.collapsed) {\n this._clearResults();\n }\n }\n\n /**\n * this method is called by event 'click' on 'GPsearchInputReset' tag div\n * (cf. this._createSearchInputElement), and it cleans the value of input.\n *\n * @private\n */\n onSearchResetClick () {\n this._clearResults();\n }\n\n /**\n * this method is called by event 'click' on 'GPshowGeolocate' tag div\n * (cf. this._createShowGeolocateElement)\n *\n * @private\n */\n onShowSearchGeolocateClick () {\n if (\"geolocation\" in navigator) {\n /* geolocation is available */\n navigator.geolocation.getCurrentPosition((position) => {\n var view = this.getMap().getView();\n var viewProj = view.getProjection().getCode();\n var coordinates_4326 = [position.coords.longitude, position.coords.latitude];\n var coordinates;\n if (viewProj !== \"EPSG:4326\") {\n // on retransforme les coordonnées de la position dans la projection de la carte\n coordinates = olProjTransform(coordinates_4326, \"EPSG:4326\", viewProj);\n } else {\n coordinates = coordinates_4326;\n }\n if (isNaN(coordinates[0]) || isNaN(coordinates[1])) {\n this._setMarker();\n return;\n }\n this._setPosition(coordinates, 15); // FIXME zoom fixe !\n if (this._displayMarker) {\n var markerInfo = \"
    Ma position
    longitude : \" + coordinates_4326[0] + \"
    latitude : \" + coordinates_4326[1];\n this._setMarker(coordinates, markerInfo);\n }\n /**\n * event triggered when i want a geolocation\n *\n * @event searchengine:geolocation:click\n * @property {Object} type - event\n * @property {Object} coordinates - coordinates\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:geolocation:click\", function (e) {\n * console.log(e.coordinates);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:geolocation:click\",\n coordinates : coordinates\n });\n });\n } else {\n /* geolocation IS NOT available */\n }\n }\n\n /**\n * this method is called by event 'click' on 'GPshowSearchByCoordinate' tag div\n * (cf. this._createShowSearchByCoordinateElement)\n *\n * @private\n */\n onShowSearchByCoordinateClick () {\n var lng = null;\n var lat = null;\n if (this._coordinateSearchLngInput && this._coordinateSearchLngInput.nodeName === \"DIV\" &&\n this._coordinateSearchLatInput && this._coordinateSearchLatInput.nodeName === \"DIV\"\n ) {\n lng = this._getCoordinateSearchDMS(this._coordinateSearchLngInput);\n lat = this._getCoordinateSearchDMS(this._coordinateSearchLatInput);\n } else {\n lng = this._coordinateSearchLngInput.value;\n lat = this._coordinateSearchLatInput.value;\n }\n\n if (!lng || !lat) {\n return;\n }\n\n var coordinates = [lng, lat];\n\n var view = this.getMap().getView();\n var viewProj = view.getProjection().getCode();\n if (viewProj !== \"EPSG:4326\") {\n coordinates = olProjTransform(coordinates, \"EPSG:4326\", viewProj);\n }\n if (isNaN(coordinates[0]) || isNaN(coordinates[1])) {\n this._setMarker();\n return;\n }\n this._setPosition(coordinates, 10); // FIXME zoom fixe !\n if (this._displayMarker) {\n this._setMarker(coordinates, \"sans information\");\n }\n\n /**\n * event triggered when we are positioned\n *\n * @event searchengine:coordinates:click\n * @property {Object} type - event\n * @property {Object} coordinates - coordinates\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:coordinates:click\", function (e) {\n * console.log(e.coordinates);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:coordinates:click\",\n coordinates : coordinates\n });\n }\n\n _getCoordinateSearchDMS (dom) {\n if (dom && dom.nodeName === \"DIV\") {\n var nodes = dom.querySelectorAll(\"[name]\");\n if (nodes) {\n var degrees = MathUtils.toInteger(nodes[0].value);\n var minutes = MathUtils.toInteger(nodes[1].value);\n var seconds = MathUtils.toInteger(nodes[2].value);\n var hemispheres = nodes[3].options[nodes[3].selectedIndex].text;\n if (!degrees || !minutes || !seconds || !hemispheres) {\n return;\n }\n return MathUtils.dmsToDecimal(degrees, minutes, seconds, hemispheres);\n }\n }\n }\n // ################################################################### //\n // ################## handlers events AutoComplete ################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on 'GPlocationOrigin' input\n *\n * @private\n */\n onAutoCompleteInputClick () {\n var inputSearchTextContainer = document.getElementById(\"GPsearchInputText-\" + this._uid);\n if (inputSearchTextContainer && !inputSearchTextContainer.disabled && inputSearchTextContainer.value.length > 2) {\n this._displaySuggestedLocation();\n }\n }\n\n /**\n * this method is called by event 'keyup' on 'GPsearchInputText' tag input\n * (cf. this._createSearchInputElement), and it gets the value of input.\n * this value is passed as a parameter for the service autocomplete (text).\n * the results of the request are displayed into a drop down menu.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onAutoCompleteSearchText (e) {\n var value = e.target.value;\n if (!value) {\n return;\n }\n\n // on sauvegarde le localisant\n this._currentGeocodingLocation = value;\n\n // on limite les requêtes à partir de 3 car. saisie !\n if (value.length < 3) {\n this._clearSuggestedLocation();\n return;\n }\n\n var _triggerGeocode = this.options.autocompleteOptions.triggerGeocode;\n var _triggerDelay = this.options.autocompleteOptions.triggerDelay;\n var _maximumEntries = this.options.autocompleteOptions.maximumEntries;\n var _prettifyResults = this.options.autocompleteOptions.prettifyResults;\n\n // INFORMATION\n // on effectue la requête au service d'autocompletion.\n // on met en place des callbacks afin de recuperer les resultats ou\n // les messages d'erreurs du service.\n // les resultats sont affichés dans une liste deroulante.\n var context = this;\n this._requestAutoComplete({\n text : value,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(\"request from AutoComplete\", results);\n if (results) {\n // on sauvegarde l'etat des résultats\n context._suggestedLocations = results.suggestedLocations;\n context._locationsToBeDisplayed = [];\n // on vérifie qu'on n'a pas récupéré des coordonnées nulles (par ex recherche par code postal)\n for (var i = 0; i < context._suggestedLocations.length; i++) {\n var ilocation = context._suggestedLocations[i];\n if (ilocation.position && ilocation.position.x === 0 && ilocation.position.y === 0 && ilocation.fullText) {\n // si les coordonnées sont nulles, il faut relancer une requête de géocodage avec l'attribut \"fullText\" récupéré\n context._getGeocodeCoordinatesFromFullText(ilocation, i);\n } else {\n // sinon on peut afficher normalement le résultat dans la liste\n context._locationsToBeDisplayed.push(ilocation);\n }\n };\n // on filtre et enjolive éventuellement les résultats\n if (_prettifyResults === true) {\n context._prettifyAutocompleteResults(context._locationsToBeDisplayed);\n }\n // on ne garde que le nombre de résultats que l'on veut afficher\n if (_maximumEntries) {\n context._locationsToBeDisplayed = context._locationsToBeDisplayed.slice(0, _maximumEntries);\n }\n\n // on affiche les résultats qui n'ont pas des coordonnées nulles\n context._fillAutoCompletedLocationListContainer(context._locationsToBeDisplayed);\n // on annule eventuellement une requete de geocodage en cours car on obtient des\n // de nouveau des resultats d'autocompletion...\n if (context._triggerHandler) {\n clearTimeout(context._triggerHandler);\n context._triggerHandler = null;\n logger.warn(\"Cancel a geocode request !\");\n }\n }\n },\n // callback onFailure\n onFailure : function (error) {\n // FIXME\n // où affiche t on les messages : ex. 'No suggestion matching the search' ?\n context._clearSuggestedLocation();\n logger.log(error.message);\n // on envoie une requete de geocodage si aucun resultat d'autocompletion\n // n'a été trouvé ! Et on n'oublie pas d'annuler celle qui est en cours !\n if (error.message === \"No suggestion matching the search\" && _triggerGeocode /* && value.length === 5 */) {\n if (context._triggerHandler) {\n clearTimeout(context._triggerHandler);\n logger.warn(\"Cancel the last geocode request !\");\n }\n context._triggerHandler = setTimeout(\n function () {\n logger.warn(\"Launch a geocode request !\");\n context._requestGeocoding({\n location : value,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(\"request from Geocoding\", results);\n if (results) {\n context._locationsToBeDisplayed = [];\n // on modifie la structure des reponses pour être\n // compatible avec l'autocompletion !\n var locations = results.locations;\n for (var i = 0; i < locations.length; i++) {\n var location = locations[i];\n location.fullText = GeocodeUtils.getGeocodedLocationFreeform(location);\n location.position = {\n x : location.position.lon,\n y : location.position.lat\n };\n context._locationsToBeDisplayed.push(location);\n }\n context._fillAutoCompletedLocationListContainer(locations);\n }\n },\n // callback onFailure\n onFailure : function (error) {\n logger.log(error.message);\n }\n });\n }, _triggerDelay\n );\n }\n }\n });\n\n // INFORMATION\n // on effectue une requête au service de recherche.\n // les resultats sont ajoutées à la suite de l'autocompletion,\n // et un abonnement est mis en place pour les récuperer.\n if (this.options.resources.search) {\n // appel du service (cf. abonnement : Search.target.addEventListener(\"suggest\"))\n Search.suggest(value);\n }\n\n var map = this.getMap();\n map.on(\n \"click\",\n this._hideSuggestedLocation,\n this\n );\n map.on(\n \"pointerdrag\",\n this._hideSuggestedLocation,\n this\n );\n }\n\n /**\n * this method is called by Gp.Services.autoComplete callback in case of success\n * (cf. this.onAutoCompleteSearchText), for suggested locations with null coordinates\n * (case of postalCode research for instance).\n * Send a geocode request with suggested location 'fullText' attribute, to get its coordinates and display it in autocomplete results list container.\n *\n * @param {Gp.Services.AutoCompleteResponse.SuggestedLocation} suggestedLocation - autocompletion result (with null coordinates) to be geocoded\n * @param {Number} i - suggestedLocation position in Gp.Services.AutoCompleteResponse.suggestedLocations autocomplete results list\n * @private\n */\n _getGeocodeCoordinatesFromFullText (suggestedLocation, i) {\n var context = this;\n Gp.Services.geocode({\n apiKey : this.options.apiKey,\n ssl : this.options.ssl,\n q : GeocodeUtils.getSuggestedLocationFreeform(suggestedLocation),\n index : suggestedLocation.type,\n // callback onSuccess\n onSuccess : function (response) {\n logger.log(\"request from Geocoding (coordinates null)\", response);\n if (response.locations && response.locations.length !== 0 && response.locations[0].position) {\n // on modifie les coordonnées du résultat en EPSG:4326 donc lat,lon\n /// \\TODO verifier si l'inversion des coordonnees est necessaire\n if (context._suggestedLocations && context._suggestedLocations[i]) {\n context._suggestedLocations[i].position = {\n lon : response.locations[0].position.y,\n lat : response.locations[0].position.x\n };\n // et on l'affiche dans la liste\n context._locationsToBeDisplayed.unshift(context._suggestedLocations[i]);\n context._fillAutoCompletedLocationListContainer(context._locationsToBeDisplayed);\n }\n }\n },\n // callback onFailure\n onFailure : function () {\n // si on n'a pas réussi à récupérer les coordonnées, on affiche quand même le résultat\n if (context._suggestedLocations && context._suggestedLocations[i]) {\n context._createAutoCompletedLocationElement(context._suggestedLocations[i], i);\n }\n }\n });\n }\n\n /**\n * this method is called by event 'click' on 'GPautoCompleteResultsList' tag div\n * (cf. this._createAutoCompleteListElement), and it selects the location.\n * this location displays a marker on the map.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onAutoCompletedResultsItemClick (e) {\n // TODO on souhaite un comportement different pour la selection des reponses\n // de l'autocompletion :\n // - liste deroulante des reponses,\n // - puis possibilité de cliquer sur une suggestion\n // - mais aussi de la choisir avec le clavier (arrow up/down), puis valider\n // par un return\n // cette selection avec les fleches doit mettre à jour le input !\n // (comme un moteur de recherche de navigateur)\n\n var idx = SelectorID.index(e.target.id);\n logger.log(idx);\n logger.log(this._locationsToBeDisplayed[idx]);\n\n if (!idx) {\n return;\n }\n\n var position = [\n this._locationsToBeDisplayed[idx].position.x,\n this._locationsToBeDisplayed[idx].position.y\n ];\n var info = {\n service : \"SuggestedLocation\",\n location : this._locationsToBeDisplayed[idx]\n };\n\n // on ajoute le texte de l'autocomplétion dans l'input\n var label = GeocodeUtils.getSuggestedLocationFreeform(this._locationsToBeDisplayed[idx]);\n this._setLabel(label);\n\n // on sauvegarde le localisant\n this._currentGeocodingLocation = label;\n\n // Info : la position est en EPSG:4326, à transformer dans la projection de la carte\n var view = this.getMap().getView();\n var mapProj = view.getProjection().getCode();\n if (mapProj !== \"EPSG:4326\") {\n // on retransforme les coordonnées de la position dans la projection de la carte\n position = olProjTransform(position, \"EPSG:4326\", mapProj);\n }\n // on centre la vue et positionne le marker, à la position reprojetée dans la projection de la carte\n var zoom = this._getZoom(info);\n this._setPosition(position, zoom);\n if (this._displayMarker) {\n this._setMarker(position, info);\n }\n /**\n * event triggered when an element of the results is clicked for autocompletion\n *\n * @event searchengine:autocomplete:click\n * @property {Object} type - event\n * @property {Object} location - location\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:autocomplete:click\", function (e) {\n * console.log(e.location);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:autocomplete:click\",\n location : this._locationsToBeDisplayed[idx]\n });\n }\n\n /**\n * this method is called by event 'click' on '' tag div\n * (cf. this.), and it selects the suggest.\n * this suggest call an event to added layer on the map.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onSearchedResultsItemClick (e) {\n var idx = SelectorID.index(e.target.id);\n\n var error = null;\n try {\n var suggest = Search.getSuggestions()[idx];\n if (!suggest) {\n throw \"No suggestions found !\";\n }\n\n // Ajout de la couche sur la carte si l'option le permet\n if (this.options.searchOptions.addToMap) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw \"ERROR : contract key configuration has to be loaded to load Geoportal layers.\";\n }\n var service = suggest.service;\n var name = suggest.name;\n var layer = null;\n switch (service) {\n case \"WMS\":\n layer = new GeoportalWMS({\n layer : name\n });\n break;\n case \"WMTS\":\n layer = new GeoportalWMTS({\n layer : name\n });\n break;\n case \"TMS\":\n layer = new GeoportalMapBox({\n layer : name\n });\n default:\n break;\n }\n if (layer) {\n var map = this.getMap();\n map.addLayer(layer);\n }\n }\n } catch (e) {\n error = e;\n }\n\n /**\n * event triggered when an element of the results is clicked for search service\n *\n * @event searchengine:search:click\n * @property {Object} type - event\n * @property {Object} suggest - suggest\n * @property {Object} error - error\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:search:click\", function (e) {\n * console.log(e.suggest);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:search:click\",\n suggest : suggest,\n error : error\n });\n }\n\n // ################################################################### //\n // ################### handlers events Geocode ####################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'submit' on 'GPsearchInput' tag form\n * (cf. this._createSearchInputElement), and it gets the value of input.\n * this value is passed as a parameter for the service geocoding.\n * the results of the request are displayed into a window.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onGeocodingSearchSubmit (e) {\n var value = e.target[0].value;\n if (!value) {\n return;\n }\n\n // on sauvegarde le localisant\n this._currentGeocodingLocation = value;\n\n // on met en place l'affichage des resultats dans une fenetre de recherche.\n var context = this;\n this._requestGeocoding({\n query : value,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(\"request from Geocoding\", results);\n if (results) {\n var locations = results.locations;\n context._fillGeocodedLocationListContainer(locations);\n }\n },\n // callback onFailure\n onFailure : function (error) {\n // FIXME cf. this.onAutoCompleteSearch()\n context._clearGeocodedLocation();\n logger.log(error.message);\n }\n });\n }\n\n /**\n * this method is called by event 'submit' on 'GPgeocodeResultsList' tag div\n * (cf. this._createGeocodeResultsListElement), and it selects the location.\n * this location displays a marker on the map.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onGeocodedResultsItemClick (e) {\n var idx = SelectorID.index(e.target.id);\n\n if (!idx) {\n return;\n }\n\n var position = [\n this._geocodedLocations[idx].position.lon,\n this._geocodedLocations[idx].position.lat\n ];\n var info = {\n service : \"GeocodedLocation\",\n location : this._geocodedLocations[idx]\n };\n\n // on ajoute le texte du géocodage dans l'input\n var label = GeocodeUtils.getGeocodedLocationFreeform(this._geocodedLocations[idx]);\n this._setLabel(label);\n\n // Info : la position est en EPSG:4326, à transformer dans la projection de la carte\n var view = this.getMap().getView();\n var mapProj = view.getProjection().getCode();\n if (mapProj !== \"EPSG:4326\") {\n // on retransforme les coordonnées de la position dans la projection de la carte\n position = olProjTransform(position, \"EPSG:4326\", mapProj);\n }\n // on centre la vue et positionne le marker, à la position reprojetée dans la projection de la carte\n var zoom = this._getZoom(this.options.zoomTo);\n this._setPosition(position, zoom);\n if (this._displayMarker) {\n this._setMarker(position, info);\n }\n /**\n * event triggered when an element of the results is clicked for geocoding\n *\n * @event searchengine:geocode:click\n * @property {Object} type - event\n * @property {Object} location - location\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:geocode:click\", function (e) {\n * console.log(e.location);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:geocode:click\",\n location : this._geocodedLocations[idx]\n });\n }\n\n // ################################################################### //\n // ############## handlers events Geocode Advanced ################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'change' on 'GPadvancedSearchCode' tag select\n * (cf. this._createAdvancedSearchFormCodeElement), and it gets the value of\n * option selected.\n * this value is passed as a parameter to create the attributs container.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onGeocodingAdvancedSearchCodeChange (e) {\n logger.log(e);\n var idx = e.target.selectedIndex;\n var value = e.target.options[idx].value;\n\n if (!value) {\n return;\n }\n\n // INFORMATION\n // le declenchement de l'evenement va creer un container de filtre à la volée...\n // l'insertion des containers d'attributs dans le DOM sont :\n // - soit GPadvancedSearchFilters > PositionOfInterest\n // - soit GPadvancedSearchFilters > StreetAddress\n // - soit GPadvancedSearchFilters > CadastralParcel\n // cf. _setFilter() pour la creation du container\n\n this._setFilter(value);\n }\n\n /**\n * this method is called by event 'submit' on 'GPadvancedSearchForm' tag form\n * (cf. this._createAdvancedSearchPanelFormElement), and it gets the value of all input.\n * this value is passed as a parameter for the service geocoding.\n * the results of the request are displayed into a window.\n *\n * @param {Object} e - HTMLElement\n * @param {Array} data - [{key: ..., value: ...}]\n * @private\n */\n onGeocodingAdvancedSearchSubmit (e, data) {\n logger.log(data);\n if (!data || data.length === 0) {\n return;\n }\n\n var _location;\n var _filterOptions = {};\n\n for (var i = 0; i < data.length; i++) {\n var filter = data[i];\n if (filter.value) {\n if (filter.key === \"section\") {\n filter.value = filter.value.toUpperCase();\n }\n _filterOptions[filter.key] = filter.value;\n }\n }\n\n var inputSearchTextContainer = document.getElementById(\"GPsearchInputText-\" + this._uid);\n _location = inputSearchTextContainer.value;\n\n // On ne prend pas en compte ce qu'il y a dans l'input de recherche simple pour la recherche avance de PC\n if (this._currentGeocodingCode === \"CadastralParcel\") {\n _location = \"\";\n }\n\n // on met en place l'affichage des resultats dans une fenetre de recherche.\n var context = this;\n this._requestGeocoding({\n query : _location,\n index : this._currentGeocodingCode,\n filters : _filterOptions,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(results);\n if (results) {\n var locations = results.locations;\n context._fillGeocodedLocationListContainer(locations);\n }\n },\n // callback onFailure\n onFailure : function (error) {\n // FIXME cf. this.onAutoCompleteSearch()\n context._clearGeocodedLocation();\n logger.log(error.message);\n }\n });\n }\n\n /**\n * this method is called by 'onGeocodingAdvancedSearchSubmit' method,\n * in case geocoding type is 'CadastralParcel',\n * and gets request parameters from inputs\n *\n * @param {Object} filterOptions - object with inputs value (department, insee, ...)\n * @returns {String} location - cadastral parcel number : concatenation of inputs values (e.g. : 940670000D0041 or 94067_____0041)\n * @private\n */\n _getCadastralParcelRequestParams (filterOptions) {\n /* info:\n la parcelle cadastrale se compose de 14 chiffres ou lettres, indiquant, de gauche à droite :\n - le code du département (2 caractères)\n - le code commune (3 caractères). (Remarque : code département + code commune = code INSEE)\n - OU le code INSEE de la commune (5 chiffres) (remplace les 2 précédents)\n - le code commune absorbée INSEE, ou '000' (3 caractères),\n - la section (2 caractères),\n - le numéro de parcelle (4 caractères).\n Exemple de parcelle : '940670000D0041'. Si l'identifiant est incomplet (par exemple '940670000D'), le service renverra uniquement les 25 premiers résultats pouvant correspondre.\n */\n\n var _location = \"\";\n\n var l;\n // code département (2 caractères)\n var dep = filterOptions.department;\n if (dep) {\n l = dep.length;\n if (l === 2) {\n _location = dep;\n } else if (l === 1) {\n // si un seul numéro a été saisi, on présume que c'est un numéro < 10\n _location = \"0\" + dep;\n } else {\n _location = dep.substring(0, 2);\n }\n } else {\n _location = \"__\";\n }\n\n // code commune insee (3 caractères)\n var commune = filterOptions.commune;\n if (commune) {\n l = commune.length;\n if (l === 3) {\n _location += commune;\n } else if (l === 2) {\n _location += \"_\" + commune;\n } else if (l === 1) {\n _location += \"__\" + commune;\n } else { // l > 3\n _location += commune.substring(0, 3);\n }\n } else {\n _location += \"___\";\n }\n\n // code insee (5 caractères) : surcharge les 2 autres si renseigné\n var insee = filterOptions.insee;\n if (insee) {\n if (insee.length === 5) {\n _location = insee;\n }\n }\n\n // code commune absorbee INSEE (3 caractères)\n var absorbedCity = filterOptions.absorbedCity;\n if (absorbedCity) {\n l = absorbedCity.length;\n if (l === 3) {\n _location += absorbedCity;\n } else if (l < 3) {\n if (l === 2) {\n _location += \"_\" + absorbedCity;\n } else if (l === 1) {\n _location += \"__\" + absorbedCity;\n }\n } else { // l > 3\n _location += absorbedCity.substring(0, 3);\n }\n } else {\n _location += \"___\";\n }\n\n // section (2 caractères)\n var section = filterOptions.section;\n if (section) {\n l = section.length;\n if (l === 2) {\n _location += section;\n } else if (l === 1) {\n _location += \"_\" + section;\n } else {\n _location += section.substring(0, 2);\n }\n } else {\n _location += \"__\";\n }\n\n // numéro de parcelle (4 caractères)\n var number = filterOptions.number;\n if (number) {\n l = number.length;\n if (l === 4) {\n _location += number;\n } else if (l === 3) {\n _location += \"_\" + number;\n } else if (l === 2) {\n _location += \"__\" + number;\n } else if (l === 1) {\n _location += \"___\" + number;\n } else { // l > 4\n _location += number.substring(0, 4);\n }\n } else {\n _location += \"___\";\n }\n\n logger.log(\"location : \" + _location);\n\n return _location;\n }\n\n // ################################################################### //\n // ############### handlers events Coordinate Search ################# //\n // ################################################################### //\n\n /**\n * this method is called by event 'change' on ''\n * tag select (cf. this.),\n * and selects the system projection.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onCoordinateSearchSystemChange (e) {\n var idx = e.target.selectedIndex; // index\n var value = e.target.options[idx].value; // crs\n\n // on nettoie les coordonnées saisies\n this._coordinateSearchLngInput.value = \"\";\n this._coordinateSearchLatInput.value = \"\";\n\n // INFO\n // si on change de type de systeme, on doit aussi changer le type d'unités !\n var type = null;\n for (var i = 0; i < this._coordinateSearchSystems.length; ++i) {\n if (this._coordinateSearchSystems[i].code === Number(value)) {\n type = this._coordinateSearchSystems[i].type;\n break;\n }\n }\n\n if (!type) {\n logger.log(\"system not found in projection systems container\");\n return;\n }\n\n // on enregistre le systeme courant\n this._currentCoordinateSearchSystems = this._coordinateSearchSystems[Number(value)];\n\n if (type !== this._currentCoordinateSearchType) {\n // on met à jour les unités du menu deroulant : Geographique ou Métrique\n this._currentCoordinateSearchType = type;\n this._currentCoordinateSearchUnits = this._coordinateSearchUnits[type][0].code;\n this._containerUnits.appendChild(this._setCoordinateSearchUnitsSelectElement(this._coordinateSearchUnits[type]));\n // et on modifie la zone de saisie des coordonnées (label + input)\n this._updateCoordinateSearchElements();\n }\n }\n\n /**\n * this method is called by event 'change' on ''\n * tag select (cf. this.),\n * and selects the units projection.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onCoordinateSearchUnitsChange (e) {\n var idx = e.target.selectedIndex;\n var value = e.target.options[idx].value;\n\n // on nettoie les coordonnées saisies\n this._coordinateSearchLngInput.value = \"\";\n this._coordinateSearchLatInput.value = \"\";\n\n // et on modifie la zone de saisie des coordonnées (label + input)\n this._currentCoordinateSearchUnits = value;\n this._updateCoordinateSearchElements();\n }\n\n /**\n * this method is called by event 'click' on ''\n * tag select (cf. this.),\n * and clear app.\n *\n * @private\n */\n onCoordinateSearchClose () {\n this._setMarker();\n this._coordinateSearchLngInput.value = \"\";\n this._coordinateSearchLatInput.value = \"\";\n }\n\n _updateCoordinateSearchElements () {\n var lbl = this._setCoordinateSearchLngLabelElement(this._currentCoordinateSearchType);\n var input = this._coordinateSearchLngInput = this._setCoordinateSearchLngInputElement(this._currentCoordinateSearchUnits);\n this._containerCoordinateLng.appendChild(lbl);\n this._containerCoordinateLng.appendChild(input);\n lbl = this._setCoordinateSearchLatLabelElement(this._currentCoordinateSearchType);\n input = this._coordinateSearchLatInput = this._setCoordinateSearchLatInputElement(this._currentCoordinateSearchUnits);\n this._containerCoordinateLat.appendChild(lbl);\n this._containerCoordinateLat.appendChild(input);\n }\n\n // ################################################################### //\n // ############################## clean ############################## //\n // ################################################################### //\n\n /**\n * this method is called by this.onSearchReset()\n * and it clears all results and the marker.\n *\n * @private\n */\n _clearResults () {\n var map = this.getMap();\n\n this._currentGeocodingLocation = null;\n\n this._clearSuggestedLocation();\n this._clearGeocodedLocation();\n\n this._setMarker();\n // on retire l'overlay de la popup de la carte\n if (this._popupOverlay != null) {\n map.removeOverlay(this._popupOverlay);\n this._popupOverlay = null;\n }\n }\n\n /**\n * this method is called by this.onAutoCompleteSearchText()\n * and it clears all suggested location.\n *\n * @private\n */\n _clearSuggestedLocation () {\n this._suggestedLocations = [];\n if (this._containerResultsLocation) {\n while (this._containerResultsLocation.firstChild) {\n this._containerResultsLocation.removeChild(this._containerResultsLocation.firstChild);\n }\n }\n if (this.options.resources.search) {\n Search.clear();\n if (this._containerResultsSuggest) {\n while (this._containerResultsSuggest.firstChild) {\n this._containerResultsSuggest.removeChild(this._containerResultsSuggest.firstChild);\n }\n }\n }\n }\n\n /**\n * this method is called by this.onAutoCompleteSearchText()\n * and it clears suggested location from duplicate entries and improve unprecise fulltext entries.\n *\n * @param {Array} autocompleteResults - Array of autocompleteResults to display\n * @private\n */\n _prettifyAutocompleteResults (autocompleteResults) {\n for (var i = autocompleteResults.length - 1; i >= 0; i--) {\n var autocompleteResult = autocompleteResults[i];\n if ((autocompleteResult.type === \"StreetAddress\" && autocompleteResult.kind === \"municipality\") ||\n autocompleteResult.type === \"PositionOfInterest\" && autocompleteResult.poiType[0] === \"lieu-dit habité\" && autocompleteResult.poiType[1] === \"zone d'habitation\") {\n // on retire les éléments streetAdress - municipality car déjà pris en compte par POI\n autocompleteResults.splice(i, 1);\n }\n // on précise le type dans le fulltext au POI des types département et région\n if ((autocompleteResult.type === \"PositionOfInterest\" && autocompleteResult.poiType[0] === \"administratif\" &&\n (autocompleteResult.poiType[1] === \"département\" || autocompleteResult.poiType[1] === \"région\"))) {\n autocompleteResult.fullText = autocompleteResult.fullText + \", \" + autocompleteResult.poiType[1];\n }\n };\n }\n\n /**\n * this method is called to hide suggested locations\n *\n * @private\n */\n _hideSuggestedLocation () {\n if (this._autocompleteContainer) {\n this._autocompleteContainer.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n this._autocompleteContainer.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n }\n\n /**\n * this method is called to display suggested location.\n *\n * @private\n */\n _displaySuggestedLocation () {\n if (this._autocompleteContainer) {\n this._autocompleteContainer.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n this._autocompleteContainer.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n }\n }\n\n /**\n * this method is called by this.onGeocodingAdvancedSearchSubmit()\n * and it clears all geocoded location.\n *\n * @private\n */\n _clearGeocodedLocation () {\n this._geocodedLocations = [];\n if (this._geocodedContainer) {\n while (this._geocodedContainer.firstChild) {\n this._geocodedContainer.removeChild(this._geocodedContainer.firstChild);\n }\n }\n }\n\n};\n\n// on récupère les méthodes de la classe commune ReverseGeocoding\nObject.assign(SearchEngine.prototype, SearchEngineDOM);\nObject.assign(SearchEngine.prototype, Widget);\n\nexport default SearchEngine;\n\n// Expose SearchEngine as ol.control.SearchEngine (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.SearchEngine = SearchEngine;\n}\n"],"names":["freeze","object","oc","undefined","Object","getOwnPropertyDescriptors","create","hasOwn","key","prototype","hasOwnProperty","call","HTML_BOOLEAN_ATTRIBUTES","allowfullscreen","async","autofocus","autoplay","checked","controls","default","defer","disabled","formnovalidate","hidden","ismap","itemscope","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected","HTML_VOID_ELEMENTS","area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr","HTML_RAW_TEXT_ELEMENTS","script","style","textarea","title","isHTMLMimeType","mimeType","MIME_TYPE","HTML","XML_APPLICATION","XML_TEXT","XML_XHTML_APPLICATION","XML_SVG_IMAGE","_MIME_TYPES","keys","map","NAMESPACE","SVG","XML","XMLNS","exports","assign","target","TypeError","find","list","predicate","ac","Array","i","length","item","hasDefaultHTMLNamespace","isHTMLBooleanAttribute","name","toLowerCase","isHTMLRawTextElement","tagName","isHTMLEscapableRawTextElement","isHTMLVoidElement","isValidMimeType","indexOf","conventions","dom","errors","entities","sax","DOMImplementation","ParseError","XMLReader","normalizeLineEndings","replace","DOMParser","options","locator","this","domHandler","DOMHandler","onError","errorHandler","xmlns","opt","defaultNamespace","cdata","currentElement","doc","position","node","lineNumber","columnNumber","_toString","chars","start","substr","java","lang","String","appendElement","handler","appendChild","parseFromString","defaultNSMap","entityMap","XML_ENTITIES","HTML_ENTITIES","xml","domBuilder","setDocumentLocator","fatalError","parse","documentElement","startDocument","impl","createHTMLDocument","createDocument","startElement","namespaceURI","localName","qName","attrs","el","createElementNS","len","getURI","value","getValue","attr","getQName","createAttributeNS","getLocator","nodeValue","setAttributeNode","endElement","parentNode","startPrefixMapping","prefix","uri","endPrefixMapping","processingInstruction","data","ins","createProcessingInstruction","ignorableWhitespace","ch","characters","apply","arguments","charNode","createCDATASection","createTextNode","test","skippedEntity","endDocument","normalize","comment","comm","createComment","startCDATA","endCDATA","startDTD","publicId","systemId","internalSubset","implementation","createDocumentType","dt","doctype","reportError","level","message","e","console","error","l","_locator","warning","__DOMHandler","onErrorStopParsing","onWarningStopParsing","PDC","Symbol","DOMException","DOMExceptionName","g","checkSymbol","symbol","notEmptyString","orderedSetReducer","current","element","toOrderedSet","split","filter","splitOnASCIIWhitespace","reduce","validateQualifiedName","qualifiedName","QName_exact","INVALID_CHARACTER_ERR","validateAndExtract","namespace","splitResult","NAMESPACE_ERR","copy","src","dest","p","_extends","Class","Super","pt","t","constructor","NodeType","ELEMENT_NODE","ATTRIBUTE_NODE","TEXT_NODE","CDATA_SECTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","PROCESSING_INSTRUCTION_NODE","COMMENT_NODE","DOCUMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","NOTATION_NODE","DocumentPosition","DOCUMENT_POSITION_DISCONNECTED","DOCUMENT_POSITION_PRECEDING","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_CONTAINS","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC","parentChain","chain","ownerElement","unshift","commonAncestor","a","b","c","n","docGUID","guid","Math","random","NodeList","LiveNodeList","refresh","_node","_refresh","_updateLiveList","inc","_inc","ownerDocument","ls","__set__","$$length","NamedNodeMap","_findNodeIndex","_addNamedNode","newAttr","oldAttr","_onRemoveAttribute","ns","_nsMap","_onAddAttribute","_removeNamedNode","lastIndex","Node","_xmlEncoder","charCodeAt","_visitNode","callback","firstChild","nextSibling","Document","contentType","type","remove","_onUpdateChild","parent","newChild","childNodes","child","_removeChild","NOT_FOUND_ERR","oldPreviousSibling","previousSibling","oldNextSibling","lastChild","isDocTypeNode","nodeType","isElementNode","isTextNode","isElementInsertionPossible","parentChildNodes","docTypeNode","isElementReplacementPossible","assertPreInsertionValidity1to5","hasValidParentNodeType","HIERARCHY_REQUEST_ERR","hasInsertableNodeType","assertPreInsertionValidityInDocument","nodeChildNodes","nodeChildElements","parentElementChild","assertPreReplacementValidityInDocument","hasDoctypeChildThatIsNotChild","_insertBefore","_inDocumentAssertion","cp","removeChild","newFirst","newLast","pre","Element","Attr","CharacterData","Text","Comment","CDATASection","DocumentType","Notation","Entity","EntityReference","DocumentFragment","ProcessingInstruction","XMLSerializer","nodeSerializeToString","nodeFilter","buf","refNode","lookupPrefix","visibleNamespaces","serializeToString","join","needNamespaceDefine","isHTML","addSerializedAttribute","push","attributes","nodeName","prefixedNodeName","defaultNS","ai","nsi","canCloseTag","slice","CDATA_START","CDATA_END","COMMENT_START","COMMENT_END","pubid","sysid","DOCTYPE_DECL_START","PUBLIC","SYSTEM","importNode","deep","node2","cloneNode","v","attrs2","_ownerElement","index","toString","iterator","me","next","done","return","getNamedItem","_isInHTMLDocumentAndNamespace","setNamedItem","INUSE_ATTRIBUTE_ERR","getNamedItemNS","setNamedItemNS","removeNamedItem","removeNamedItemNS","hasFeature","feature","version","root","htmlNode","createElement","headNode","titleNode","parentElement","baseURI","isConnected","rootNode","getRootNode","contains","other","isEqualNode","otherNode","getAttributeNodeNS","isSameNode","insertBefore","refChild","replaceChild","oldChild","hasChildNodes","appendData","isSupported","lookupNamespaceURI","isDefaultNamespace","compareDocumentPosition","node1","attr1","attr2","chain1","chain2","ca","removed","importedNode","getElementById","id","rtv","getAttribute","createDocumentFragment","createAttribute","_createAttribute","specified","createEntityReference","Name","NotSupportedError","validated","getQualifiedName","hasAttribute","getAttributeNode","setAttribute","removeAttribute","removeAttributeNode","setAttributeNodeNS","removeAttributeNS","old","hasAttributeNS","getAttributeNS","setAttributeNS","getElementsByClassName","classNames","classNamesSet","nodeClassNames","matches","nodeClassNamesSet","every","getElementsByTagName","isHTMLDocument","lowerQualifiedName","getElementsByTagNameNS","substringData","offset","count","substring","text","insertData","replaceData","deleteData","splitText","newText","newNode","defineProperty","getTextContent","get","set","amp","apos","gt","lt","quot","Aacute","aacute","Abreve","abreve","acd","acE","Acirc","acirc","acute","Acy","acy","AElig","aelig","af","Afr","afr","Agrave","agrave","alefsym","aleph","Alpha","alpha","Amacr","amacr","amalg","AMP","And","and","andand","andd","andslope","andv","ang","ange","angle","angmsd","angmsdaa","angmsdab","angmsdac","angmsdad","angmsdae","angmsdaf","angmsdag","angmsdah","angrt","angrtvb","angrtvbd","angsph","angst","angzarr","Aogon","aogon","Aopf","aopf","ap","apacir","apE","ape","apid","ApplyFunction","approx","approxeq","Aring","aring","Ascr","ascr","Assign","ast","asymp","asympeq","Atilde","atilde","Auml","auml","awconint","awint","backcong","backepsilon","backprime","backsim","backsimeq","Backslash","Barv","barvee","Barwed","barwed","barwedge","bbrk","bbrktbrk","bcong","Bcy","bcy","bdquo","becaus","Because","because","bemptyv","bepsi","bernou","Bernoullis","Beta","beta","beth","between","Bfr","bfr","bigcap","bigcirc","bigcup","bigodot","bigoplus","bigotimes","bigsqcup","bigstar","bigtriangledown","bigtriangleup","biguplus","bigvee","bigwedge","bkarow","blacklozenge","blacksquare","blacktriangle","blacktriangledown","blacktriangleleft","blacktriangleright","blank","blk12","blk14","blk34","block","bne","bnequiv","bNot","bnot","Bopf","bopf","bot","bottom","bowtie","boxbox","boxDL","boxDl","boxdL","boxdl","boxDR","boxDr","boxdR","boxdr","boxH","boxh","boxHD","boxHd","boxhD","boxhd","boxHU","boxHu","boxhU","boxhu","boxminus","boxplus","boxtimes","boxUL","boxUl","boxuL","boxul","boxUR","boxUr","boxuR","boxur","boxV","boxv","boxVH","boxVh","boxvH","boxvh","boxVL","boxVl","boxvL","boxvl","boxVR","boxVr","boxvR","boxvr","bprime","Breve","breve","brvbar","Bscr","bscr","bsemi","bsim","bsime","bsol","bsolb","bsolhsub","bull","bullet","bump","bumpE","bumpe","Bumpeq","bumpeq","Cacute","cacute","Cap","cap","capand","capbrcup","capcap","capcup","capdot","CapitalDifferentialD","caps","caret","caron","Cayleys","ccaps","Ccaron","ccaron","Ccedil","ccedil","Ccirc","ccirc","Cconint","ccups","ccupssm","Cdot","cdot","cedil","Cedilla","cemptyv","cent","CenterDot","centerdot","Cfr","cfr","CHcy","chcy","check","checkmark","Chi","chi","cir","circ","circeq","circlearrowleft","circlearrowright","circledast","circledcirc","circleddash","CircleDot","circledR","circledS","CircleMinus","CirclePlus","CircleTimes","cirE","cire","cirfnint","cirmid","cirscir","ClockwiseContourIntegral","CloseCurlyDoubleQuote","CloseCurlyQuote","clubs","clubsuit","Colon","colon","Colone","colone","coloneq","comma","commat","comp","compfn","complement","complexes","cong","congdot","Congruent","Conint","conint","ContourIntegral","Copf","copf","coprod","Coproduct","COPY","copysr","CounterClockwiseContourIntegral","crarr","Cross","cross","Cscr","cscr","csub","csube","csup","csupe","ctdot","cudarrl","cudarrr","cuepr","cuesc","cularr","cularrp","Cup","cup","cupbrcap","CupCap","cupcap","cupcup","cupdot","cupor","cups","curarr","curarrm","curlyeqprec","curlyeqsucc","curlyvee","curlywedge","curren","curvearrowleft","curvearrowright","cuvee","cuwed","cwconint","cwint","cylcty","Dagger","dagger","daleth","Darr","dArr","darr","dash","Dashv","dashv","dbkarow","dblac","Dcaron","dcaron","Dcy","dcy","DD","dd","ddagger","ddarr","DDotrahd","ddotseq","deg","Del","Delta","delta","demptyv","dfisht","Dfr","dfr","dHar","dharl","dharr","DiacriticalAcute","DiacriticalDot","DiacriticalDoubleAcute","DiacriticalGrave","DiacriticalTilde","diam","Diamond","diamond","diamondsuit","diams","die","DifferentialD","digamma","disin","div","divide","divideontimes","divonx","DJcy","djcy","dlcorn","dlcrop","dollar","Dopf","dopf","Dot","dot","DotDot","doteq","doteqdot","DotEqual","dotminus","dotplus","dotsquare","doublebarwedge","DoubleContourIntegral","DoubleDot","DoubleDownArrow","DoubleLeftArrow","DoubleLeftRightArrow","DoubleLeftTee","DoubleLongLeftArrow","DoubleLongLeftRightArrow","DoubleLongRightArrow","DoubleRightArrow","DoubleRightTee","DoubleUpArrow","DoubleUpDownArrow","DoubleVerticalBar","DownArrow","Downarrow","downarrow","DownArrowBar","DownArrowUpArrow","DownBreve","downdownarrows","downharpoonleft","downharpoonright","DownLeftRightVector","DownLeftTeeVector","DownLeftVector","DownLeftVectorBar","DownRightTeeVector","DownRightVector","DownRightVectorBar","DownTee","DownTeeArrow","drbkarow","drcorn","drcrop","Dscr","dscr","DScy","dscy","dsol","Dstrok","dstrok","dtdot","dtri","dtrif","duarr","duhar","dwangle","DZcy","dzcy","dzigrarr","Eacute","eacute","easter","Ecaron","ecaron","ecir","Ecirc","ecirc","ecolon","Ecy","ecy","eDDot","Edot","eDot","edot","ee","efDot","Efr","efr","eg","Egrave","egrave","egs","egsdot","elinters","ell","els","elsdot","Emacr","emacr","empty","emptyset","EmptySmallSquare","emptyv","EmptyVerySmallSquare","emsp","emsp13","emsp14","ENG","eng","ensp","Eogon","eogon","Eopf","eopf","epar","eparsl","eplus","epsi","Epsilon","epsilon","epsiv","eqcirc","eqcolon","eqsim","eqslantgtr","eqslantless","Equal","equals","EqualTilde","equest","Equilibrium","equiv","equivDD","eqvparsl","erarr","erDot","Escr","escr","esdot","Esim","esim","Eta","eta","ETH","eth","Euml","euml","euro","excl","exist","Exists","expectation","ExponentialE","exponentiale","fallingdotseq","Fcy","fcy","female","ffilig","fflig","ffllig","Ffr","ffr","filig","FilledSmallSquare","FilledVerySmallSquare","fjlig","flat","fllig","fltns","fnof","Fopf","fopf","ForAll","forall","fork","forkv","Fouriertrf","fpartint","frac12","frac13","frac14","frac15","frac16","frac18","frac23","frac25","frac34","frac35","frac38","frac45","frac56","frac58","frac78","frasl","frown","Fscr","fscr","gacute","Gamma","gamma","Gammad","gammad","gap","Gbreve","gbreve","Gcedil","Gcirc","gcirc","Gcy","gcy","Gdot","gdot","gE","ge","gEl","gel","geq","geqq","geqslant","ges","gescc","gesdot","gesdoto","gesdotol","gesl","gesles","Gfr","gfr","Gg","gg","ggg","gimel","GJcy","gjcy","gl","gla","glE","glj","gnap","gnapprox","gnE","gne","gneq","gneqq","gnsim","Gopf","gopf","grave","GreaterEqual","GreaterEqualLess","GreaterFullEqual","GreaterGreater","GreaterLess","GreaterSlantEqual","GreaterTilde","Gscr","gscr","gsim","gsime","gsiml","Gt","GT","gtcc","gtcir","gtdot","gtlPar","gtquest","gtrapprox","gtrarr","gtrdot","gtreqless","gtreqqless","gtrless","gtrsim","gvertneqq","gvnE","Hacek","hairsp","half","hamilt","HARDcy","hardcy","hArr","harr","harrcir","harrw","Hat","hbar","Hcirc","hcirc","hearts","heartsuit","hellip","hercon","Hfr","hfr","HilbertSpace","hksearow","hkswarow","hoarr","homtht","hookleftarrow","hookrightarrow","Hopf","hopf","horbar","HorizontalLine","Hscr","hscr","hslash","Hstrok","hstrok","HumpDownHump","HumpEqual","hybull","hyphen","Iacute","iacute","ic","Icirc","icirc","Icy","icy","Idot","IEcy","iecy","iexcl","iff","Ifr","ifr","Igrave","igrave","ii","iiiint","iiint","iinfin","iiota","IJlig","ijlig","Im","Imacr","imacr","image","ImaginaryI","imagline","imagpart","imath","imof","imped","Implies","in","incare","infin","infintie","inodot","Int","int","intcal","integers","Integral","intercal","Intersection","intlarhk","intprod","InvisibleComma","InvisibleTimes","IOcy","iocy","Iogon","iogon","Iopf","iopf","Iota","iota","iprod","iquest","Iscr","iscr","isin","isindot","isinE","isins","isinsv","isinv","it","Itilde","itilde","Iukcy","iukcy","Iuml","iuml","Jcirc","jcirc","Jcy","jcy","Jfr","jfr","jmath","Jopf","jopf","Jscr","jscr","Jsercy","jsercy","Jukcy","jukcy","Kappa","kappa","kappav","Kcedil","kcedil","Kcy","kcy","Kfr","kfr","kgreen","KHcy","khcy","KJcy","kjcy","Kopf","kopf","Kscr","kscr","lAarr","Lacute","lacute","laemptyv","lagran","Lambda","lambda","Lang","langd","langle","lap","Laplacetrf","laquo","Larr","lArr","larr","larrb","larrbfs","larrfs","larrhk","larrlp","larrpl","larrsim","larrtl","lat","lAtail","latail","late","lates","lBarr","lbarr","lbbrk","lbrace","lbrack","lbrke","lbrksld","lbrkslu","Lcaron","lcaron","Lcedil","lcedil","lceil","lcub","Lcy","lcy","ldca","ldquo","ldquor","ldrdhar","ldrushar","ldsh","lE","le","LeftAngleBracket","LeftArrow","Leftarrow","leftarrow","LeftArrowBar","LeftArrowRightArrow","leftarrowtail","LeftCeiling","LeftDoubleBracket","LeftDownTeeVector","LeftDownVector","LeftDownVectorBar","LeftFloor","leftharpoondown","leftharpoonup","leftleftarrows","LeftRightArrow","Leftrightarrow","leftrightarrow","leftrightarrows","leftrightharpoons","leftrightsquigarrow","LeftRightVector","LeftTee","LeftTeeArrow","LeftTeeVector","leftthreetimes","LeftTriangle","LeftTriangleBar","LeftTriangleEqual","LeftUpDownVector","LeftUpTeeVector","LeftUpVector","LeftUpVectorBar","LeftVector","LeftVectorBar","lEg","leg","leq","leqq","leqslant","les","lescc","lesdot","lesdoto","lesdotor","lesg","lesges","lessapprox","lessdot","lesseqgtr","lesseqqgtr","LessEqualGreater","LessFullEqual","LessGreater","lessgtr","LessLess","lesssim","LessSlantEqual","LessTilde","lfisht","lfloor","Lfr","lfr","lg","lgE","lHar","lhard","lharu","lharul","lhblk","LJcy","ljcy","Ll","ll","llarr","llcorner","Lleftarrow","llhard","lltri","Lmidot","lmidot","lmoust","lmoustache","lnap","lnapprox","lnE","lne","lneq","lneqq","lnsim","loang","loarr","lobrk","LongLeftArrow","Longleftarrow","longleftarrow","LongLeftRightArrow","Longleftrightarrow","longleftrightarrow","longmapsto","LongRightArrow","Longrightarrow","longrightarrow","looparrowleft","looparrowright","lopar","Lopf","lopf","loplus","lotimes","lowast","lowbar","LowerLeftArrow","LowerRightArrow","loz","lozenge","lozf","lpar","lparlt","lrarr","lrcorner","lrhar","lrhard","lrm","lrtri","lsaquo","Lscr","lscr","Lsh","lsh","lsim","lsime","lsimg","lsqb","lsquo","lsquor","Lstrok","lstrok","Lt","LT","ltcc","ltcir","ltdot","lthree","ltimes","ltlarr","ltquest","ltri","ltrie","ltrif","ltrPar","lurdshar","luruhar","lvertneqq","lvnE","macr","male","malt","maltese","Map","mapsto","mapstodown","mapstoleft","mapstoup","marker","mcomma","Mcy","mcy","mdash","mDDot","measuredangle","MediumSpace","Mellintrf","Mfr","mfr","mho","micro","mid","midast","midcir","middot","minus","minusb","minusd","minusdu","MinusPlus","mlcp","mldr","mnplus","models","Mopf","mopf","mp","Mscr","mscr","mstpos","Mu","mu","multimap","mumap","nabla","Nacute","nacute","nang","nap","napE","napid","napos","napprox","natur","natural","naturals","nbsp","nbump","nbumpe","ncap","Ncaron","ncaron","Ncedil","ncedil","ncong","ncongdot","ncup","Ncy","ncy","ndash","ne","nearhk","neArr","nearr","nearrow","nedot","NegativeMediumSpace","NegativeThickSpace","NegativeThinSpace","NegativeVeryThinSpace","nequiv","nesear","nesim","NestedGreaterGreater","NestedLessLess","NewLine","nexist","nexists","Nfr","nfr","ngE","nge","ngeq","ngeqq","ngeqslant","nges","nGg","ngsim","nGt","ngt","ngtr","nGtv","nhArr","nharr","nhpar","ni","nis","nisd","niv","NJcy","njcy","nlArr","nlarr","nldr","nlE","nle","nLeftarrow","nleftarrow","nLeftrightarrow","nleftrightarrow","nleq","nleqq","nleqslant","nles","nless","nLl","nlsim","nLt","nlt","nltri","nltrie","nLtv","nmid","NoBreak","NonBreakingSpace","Nopf","nopf","Not","not","NotCongruent","NotCupCap","NotDoubleVerticalBar","NotElement","NotEqual","NotEqualTilde","NotExists","NotGreater","NotGreaterEqual","NotGreaterFullEqual","NotGreaterGreater","NotGreaterLess","NotGreaterSlantEqual","NotGreaterTilde","NotHumpDownHump","NotHumpEqual","notin","notindot","notinE","notinva","notinvb","notinvc","NotLeftTriangle","NotLeftTriangleBar","NotLeftTriangleEqual","NotLess","NotLessEqual","NotLessGreater","NotLessLess","NotLessSlantEqual","NotLessTilde","NotNestedGreaterGreater","NotNestedLessLess","notni","notniva","notnivb","notnivc","NotPrecedes","NotPrecedesEqual","NotPrecedesSlantEqual","NotReverseElement","NotRightTriangle","NotRightTriangleBar","NotRightTriangleEqual","NotSquareSubset","NotSquareSubsetEqual","NotSquareSuperset","NotSquareSupersetEqual","NotSubset","NotSubsetEqual","NotSucceeds","NotSucceedsEqual","NotSucceedsSlantEqual","NotSucceedsTilde","NotSuperset","NotSupersetEqual","NotTilde","NotTildeEqual","NotTildeFullEqual","NotTildeTilde","NotVerticalBar","npar","nparallel","nparsl","npart","npolint","npr","nprcue","npre","nprec","npreceq","nrArr","nrarr","nrarrc","nrarrw","nRightarrow","nrightarrow","nrtri","nrtrie","nsc","nsccue","nsce","Nscr","nscr","nshortmid","nshortparallel","nsim","nsime","nsimeq","nsmid","nspar","nsqsube","nsqsupe","nsub","nsubE","nsube","nsubset","nsubseteq","nsubseteqq","nsucc","nsucceq","nsup","nsupE","nsupe","nsupset","nsupseteq","nsupseteqq","ntgl","Ntilde","ntilde","ntlg","ntriangleleft","ntrianglelefteq","ntriangleright","ntrianglerighteq","Nu","nu","num","numero","numsp","nvap","nVDash","nVdash","nvDash","nvdash","nvge","nvgt","nvHarr","nvinfin","nvlArr","nvle","nvlt","nvltrie","nvrArr","nvrtrie","nvsim","nwarhk","nwArr","nwarr","nwarrow","nwnear","Oacute","oacute","oast","ocir","Ocirc","ocirc","Ocy","ocy","odash","Odblac","odblac","odiv","odot","odsold","OElig","oelig","ofcir","Ofr","ofr","ogon","Ograve","ograve","ogt","ohbar","ohm","oint","olarr","olcir","olcross","oline","olt","Omacr","omacr","Omega","omega","Omicron","omicron","omid","ominus","Oopf","oopf","opar","OpenCurlyDoubleQuote","OpenCurlyQuote","operp","oplus","Or","or","orarr","ord","order","orderof","ordf","ordm","origof","oror","orslope","orv","oS","Oscr","oscr","Oslash","oslash","osol","Otilde","otilde","Otimes","otimes","otimesas","Ouml","ouml","ovbar","OverBar","OverBrace","OverBracket","OverParenthesis","par","para","parallel","parsim","parsl","part","PartialD","Pcy","pcy","percnt","period","permil","perp","pertenk","Pfr","pfr","Phi","phi","phiv","phmmat","phone","Pi","pi","pitchfork","piv","planck","planckh","plankv","plus","plusacir","plusb","pluscir","plusdo","plusdu","pluse","PlusMinus","plusmn","plussim","plustwo","pm","Poincareplane","pointint","Popf","popf","pound","Pr","pr","prap","prcue","prE","prec","precapprox","preccurlyeq","Precedes","PrecedesEqual","PrecedesSlantEqual","PrecedesTilde","preceq","precnapprox","precneqq","precnsim","precsim","Prime","prime","primes","prnap","prnE","prnsim","prod","Product","profalar","profline","profsurf","prop","Proportion","Proportional","propto","prsim","prurel","Pscr","pscr","Psi","psi","puncsp","Qfr","qfr","qint","Qopf","qopf","qprime","Qscr","qscr","quaternions","quatint","quest","questeq","QUOT","rAarr","race","Racute","racute","radic","raemptyv","Rang","rang","rangd","range","rangle","raquo","Rarr","rArr","rarr","rarrap","rarrb","rarrbfs","rarrc","rarrfs","rarrhk","rarrlp","rarrpl","rarrsim","Rarrtl","rarrtl","rarrw","rAtail","ratail","ratio","rationals","RBarr","rBarr","rbarr","rbbrk","rbrace","rbrack","rbrke","rbrksld","rbrkslu","Rcaron","rcaron","Rcedil","rcedil","rceil","rcub","Rcy","rcy","rdca","rdldhar","rdquo","rdquor","rdsh","Re","real","realine","realpart","reals","rect","REG","reg","ReverseElement","ReverseEquilibrium","ReverseUpEquilibrium","rfisht","rfloor","Rfr","rfr","rHar","rhard","rharu","rharul","Rho","rho","rhov","RightAngleBracket","RightArrow","Rightarrow","rightarrow","RightArrowBar","RightArrowLeftArrow","rightarrowtail","RightCeiling","RightDoubleBracket","RightDownTeeVector","RightDownVector","RightDownVectorBar","RightFloor","rightharpoondown","rightharpoonup","rightleftarrows","rightleftharpoons","rightrightarrows","rightsquigarrow","RightTee","RightTeeArrow","RightTeeVector","rightthreetimes","RightTriangle","RightTriangleBar","RightTriangleEqual","RightUpDownVector","RightUpTeeVector","RightUpVector","RightUpVectorBar","RightVector","RightVectorBar","ring","risingdotseq","rlarr","rlhar","rlm","rmoust","rmoustache","rnmid","roang","roarr","robrk","ropar","Ropf","ropf","roplus","rotimes","RoundImplies","rpar","rpargt","rppolint","rrarr","Rrightarrow","rsaquo","Rscr","rscr","Rsh","rsh","rsqb","rsquo","rsquor","rthree","rtimes","rtri","rtrie","rtrif","rtriltri","RuleDelayed","ruluhar","rx","Sacute","sacute","sbquo","Sc","sc","scap","Scaron","scaron","sccue","scE","sce","Scedil","scedil","Scirc","scirc","scnap","scnE","scnsim","scpolint","scsim","Scy","scy","sdot","sdotb","sdote","searhk","seArr","searr","searrow","sect","semi","seswar","setminus","setmn","sext","Sfr","sfr","sfrown","sharp","SHCHcy","shchcy","SHcy","shcy","ShortDownArrow","ShortLeftArrow","shortmid","shortparallel","ShortRightArrow","ShortUpArrow","shy","Sigma","sigma","sigmaf","sigmav","sim","simdot","sime","simeq","simg","simgE","siml","simlE","simne","simplus","simrarr","slarr","SmallCircle","smallsetminus","smashp","smeparsl","smid","smile","smt","smte","smtes","SOFTcy","softcy","sol","solb","solbar","Sopf","sopf","spades","spadesuit","spar","sqcap","sqcaps","sqcup","sqcups","Sqrt","sqsub","sqsube","sqsubset","sqsubseteq","sqsup","sqsupe","sqsupset","sqsupseteq","squ","Square","square","SquareIntersection","SquareSubset","SquareSubsetEqual","SquareSuperset","SquareSupersetEqual","SquareUnion","squarf","squf","srarr","Sscr","sscr","ssetmn","ssmile","sstarf","Star","star","starf","straightepsilon","straightphi","strns","Sub","sub","subdot","subE","sube","subedot","submult","subnE","subne","subplus","subrarr","Subset","subset","subseteq","subseteqq","SubsetEqual","subsetneq","subsetneqq","subsim","subsub","subsup","succ","succapprox","succcurlyeq","Succeeds","SucceedsEqual","SucceedsSlantEqual","SucceedsTilde","succeq","succnapprox","succneqq","succnsim","succsim","SuchThat","Sum","sum","sung","Sup","sup","sup1","sup2","sup3","supdot","supdsub","supE","supe","supedot","Superset","SupersetEqual","suphsol","suphsub","suplarr","supmult","supnE","supne","supplus","Supset","supset","supseteq","supseteqq","supsetneq","supsetneqq","supsim","supsub","supsup","swarhk","swArr","swarr","swarrow","swnwar","szlig","Tab","Tau","tau","tbrk","Tcaron","tcaron","Tcedil","tcedil","Tcy","tcy","tdot","telrec","Tfr","tfr","there4","Therefore","therefore","Theta","theta","thetasym","thetav","thickapprox","thicksim","ThickSpace","thinsp","ThinSpace","thkap","thksim","THORN","thorn","Tilde","tilde","TildeEqual","TildeFullEqual","TildeTilde","times","timesb","timesbar","timesd","tint","toea","top","topbot","topcir","Topf","topf","topfork","tosa","tprime","TRADE","trade","triangle","triangledown","triangleleft","trianglelefteq","triangleq","triangleright","trianglerighteq","tridot","trie","triminus","TripleDot","triplus","trisb","tritime","trpezium","Tscr","tscr","TScy","tscy","TSHcy","tshcy","Tstrok","tstrok","twixt","twoheadleftarrow","twoheadrightarrow","Uacute","uacute","Uarr","uArr","uarr","Uarrocir","Ubrcy","ubrcy","Ubreve","ubreve","Ucirc","ucirc","Ucy","ucy","udarr","Udblac","udblac","udhar","ufisht","Ufr","ufr","Ugrave","ugrave","uHar","uharl","uharr","uhblk","ulcorn","ulcorner","ulcrop","ultri","Umacr","umacr","uml","UnderBar","UnderBrace","UnderBracket","UnderParenthesis","Union","UnionPlus","Uogon","uogon","Uopf","uopf","UpArrow","Uparrow","uparrow","UpArrowBar","UpArrowDownArrow","UpDownArrow","Updownarrow","updownarrow","UpEquilibrium","upharpoonleft","upharpoonright","uplus","UpperLeftArrow","UpperRightArrow","Upsi","upsi","upsih","Upsilon","upsilon","UpTee","UpTeeArrow","upuparrows","urcorn","urcorner","urcrop","Uring","uring","urtri","Uscr","uscr","utdot","Utilde","utilde","utri","utrif","uuarr","Uuml","uuml","uwangle","vangrt","varepsilon","varkappa","varnothing","varphi","varpi","varpropto","vArr","varr","varrho","varsigma","varsubsetneq","varsubsetneqq","varsupsetneq","varsupsetneqq","vartheta","vartriangleleft","vartriangleright","Vbar","vBar","vBarv","Vcy","vcy","VDash","Vdash","vDash","vdash","Vdashl","Vee","vee","veebar","veeeq","vellip","Verbar","verbar","Vert","vert","VerticalBar","VerticalLine","VerticalSeparator","VerticalTilde","VeryThinSpace","Vfr","vfr","vltri","vnsub","vnsup","Vopf","vopf","vprop","vrtri","Vscr","vscr","vsubnE","vsubne","vsupnE","vsupne","Vvdash","vzigzag","Wcirc","wcirc","wedbar","Wedge","wedge","wedgeq","weierp","Wfr","wfr","Wopf","wopf","wp","wr","wreath","Wscr","wscr","xcap","xcirc","xcup","xdtri","Xfr","xfr","xhArr","xharr","Xi","xi","xlArr","xlarr","xmap","xnis","xodot","Xopf","xopf","xoplus","xotime","xrArr","xrarr","Xscr","xscr","xsqcup","xuplus","xutri","xvee","xwedge","Yacute","yacute","YAcy","yacy","Ycirc","ycirc","Ycy","ycy","yen","Yfr","yfr","YIcy","yicy","Yopf","yopf","Yscr","yscr","YUcy","yucy","Yuml","yuml","Zacute","zacute","Zcaron","zcaron","Zcy","zcy","Zdot","zdot","zeetrf","ZeroWidthSpace","Zeta","zeta","Zfr","zfr","ZHcy","zhcy","zigrarr","Zopf","zopf","Zscr","zscr","zwj","zwnj","extendError","writableName","Error","enumerable","writable","IndexSizeError","DomstringSizeError","HierarchyRequestError","WrongDocumentError","InvalidCharacterError","NoDataAllowedError","NoModificationAllowedError","NotFoundError","InUseAttributeError","InvalidStateError","SyntaxError","InvalidModificationError","NamespaceError","InvalidAccessError","ValidationError","TypeMismatchError","SecurityError","NetworkError","AbortError","URLMismatchError","QuotaExceededError","TimeoutError","InvalidNodeTypeError","DataCloneError","EncodingError","NotReadableError","UnknownError","ConstraintError","DataError","TransactionInactiveError","ReadOnlyError","VersionError","OperationError","NotAllowedError","OptOutError","DOMExceptionNames","isValidDomExceptionCode","messageOrCode","nameOrMessage","captureStackTrace","defineProperties","code","ExceptionCode","INDEX_SIZE_ERR","DOMSTRING_SIZE_ERR","WRONG_DOCUMENT_ERR","NO_DATA_ALLOWED_ERR","NO_MODIFICATION_ALLOWED_ERR","NOT_SUPPORTED_ERR","INVALID_STATE_ERR","SYNTAX_ERR","INVALID_MODIFICATION_ERR","INVALID_ACCESS_ERR","VALIDATION_ERR","TYPE_MISMATCH_ERR","SECURITY_ERR","NETWORK_ERR","ABORT_ERR","URL_MISMATCH_ERR","QUOTA_EXCEEDED_ERR","TIMEOUT_ERR","INVALID_NODE_TYPE_ERR","DATA_CLONE_ERR","entries","detectUnicodeSupport","RegExpImpl","RegExp","match","exec","UNICODE_SUPPORT","regexp","lastIndexOf","chars_without","search","JSON","stringify","args","self","isStr","regg","concat","Char","_SChar","SChar_s","S","S_OPT","NameStartChar","NameChar","Nmtoken","EntityRef","CharRef","Reference","PEReference","EntityValue","AttValue","NCName","QName","QName_group","SystemLiteral","PI","PubidChar","PubidLiteral","PCDATA","Mixed","contentspec","elementdecl","NotationType","Enumeration","EnumeratedType","AttType","DefaultDecl","AttlistDecl","ExternalID","ExternalID_match","NDataDecl","ENTITY_DECL_START","GEDecl","PEDef","EntityDecl","PublicID","NotationDecl","Eq","VersionNum","VersionInfo","EncName","XMLDecl","CData","CDSect","UNICODE_REPLACEMENT_CHARACTER","domParser","_copy","defaultNSMapCopy","fixedFromCharCode","surrogate1","surrogate2","fromCharCode","entityReplacer","complete","k","charAt","parseInt","appendText","end","xt","ENTITY_REG","m","lineEnd","linePattern","lineStart","parseStack","currentNSMap","unclosedTags","tagStart","fromSource","tagNameRaw","tagNameMatch","currentTagName","tagNameLower","config","pop","localNSMap","parseProcessingInstruction","parseDoctypeCommentOrCData","ElementAttributes","parseElementStartPart","closed","locator2","copyLocator","parseHtmlSpecialContent","max","f","addAttribute","qname","startIndex","attributeNames","addValue","attrName","s","setTagName","nsp","nsPrefix","elStartEnd","isEscapableRaw","elEndStart","parseUtils","char","skip","substringFromIndex","getIndex","getMatch","getSource","skipBlanks","blanks","substringStartsWith","groups","SystemLiteralOnly","parsePI","intSubsetStart","parseDoctypeInternalSubset","endDTD","getLocalName","ol","layer","VectorTile","TileJSON","format","MVT","Observable","Circle","Fill","Icon","compose","transform","dx1","dy1","sx","sy","dx2","dy2","sin","cos","createOrUpdate","minX","minY","maxX","maxY","createOrUpdateEmpty","Infinity","createOrUpdateFromFlatCoordinates","flatCoordinates","stride","extent","extendXY","extendFlatCoordinates","x","y","min","getHeight","squaredSegmentDistance","x1","y1","x2","y2","dx","dy","douglasPeucker","squaredTolerance","simplifiedFlatCoordinates","simplifiedOffset","markers","stack","last","first","maxSquaredDistance","squaredDistance","douglasPeuckerArray","ends","simplifiedEnds","snap","tolerance","round","quantize","x3","y3","quantizeArray","ascending","arr","extension","isArray","linearRingContainsXY","wn","linearRingsContainsXY","getInteriorPointOfArray","flatCenters","flatCentersOffset","intersections","r","rr","pointX","NaN","maxSegmentLength","sort","segmentLength","abs","isNaN","code_","units_","extent_","worldExtent_","worldExtent","axisOrientation_","axisOrientation","global_","global","canWrapX_","getPointResolutionFunc_","getPointResolution","defaultTileGrid_","metersPerUnit_","metersPerUnit","canWrapX","getCode","getExtent","getUnits","getMetersPerUnit","getWorldExtent","getAxisOrientation","isGlobal","setGlobal","getDefaultTileGrid","setDefaultTileGrid","tileGrid","setExtent","setWorldExtent","setGetPointResolution","func","getPointResolutionFunc","RADIUS","HALF_SIZE","EXTENT","WORLD_EXTENT","MAX_SAFE_Y","log","tan","EPSG3857Projection","super","units","resolution","point","cosh","PROJECTIONS","fromEPSG4326","output","dimension","toEPSG4326","atan","exp","EPSG4326Projection","cache","transforms","destination","transformFn","sourceCode","destinationCode","E","sqrt","epsgRegExes","zoneFromCode","epsgId","re","number","north","projectionFactories","cloneTransform","addProjection","projection","add","projectionLike","makeProjection","addEquivalentProjections","projections","forEach","addProjections","projections2","forwardTransform","inverseTransform","linearRingIsClockwise","edge","interpolatePoint","fraction","o","cumulativeLengths","haystack","needle","comparator","cmp","low","high","found","binarySearch","projection1","projection2","tmpTransform","RenderFeature","properties","styleFunction","id_","type_","flatCoordinates_","flatInteriorPoints_","flatMidpoints_","ends_","properties_","squaredTolerance_","stride_","simplifiedGeometry_","coordinate","createOrUpdateFromCoordinate","getFlatInteriorPoint","flatCenter","getFlatInteriorPoints","endss","startOrientation","prevEndIndex","orientation","linearRingss","interiorPoints","getInteriorPointsOfMultiArray","getFlatMidpoint","getFlatMidpoints","midpoint","getId","getOrientedFlatCoordinates","getGeometry","getSimplifiedGeometry","simplifyTransformed","getProperties","getPropertiesInternal","getStride","getStyleFunction","getType","pixelExtent","projectedExtent","scale","destinationStride","j","transform2D","applyTransform","clone","getEnds","enableSimplifyTransformed","fn","lastResult","lastArgs","lastThis","nextArgs","arr1","arr2","len1","memoizeOne","getFlatCoordinates","Stroke","Style","functions","render","canvas","TileState","util","Image","Layer","Group","Raster","Source","tilegrid","TileGrid","View","proj","Units","events","Event","getDefaultExportFromCjs","__esModule","parseCSSColor_1","kCSSColorTable","clamp_css_byte","clamp_css_float","parse_css_int","str","parseFloat","parse_css_float","css_hue_to_rgb","m1","m2","h","parseCSSColor","css_str","iv","op","ep","fname","params","Color","rgba","toArray","toArray01","toArray01PremultipliedAlpha","black","white","transparent","red","blue","Color$1","convertLiteral","convertFunction","parameters","propertySpec","stops","property","values","expression","splice","convertIdentityFunction","zoomAndFeatureDependent","featureDependent","zoomDependent","stop","tokens","convertTokenString","featureFunctionParameters","featureFunctionStops","zoomStops","zoom","functionType","getFunctionType","getInterpolateOperator","z","appendStopPair","convertPropertyFunction","fixupDegenerateStepCurve","convertZoomAndPropertyFunction","isStep","convertZoomFunction","colorSpace","getFallback","defaultValue","curve","interpolated","result","pos","literal","ParsingError","ParsingError$1","Scope","bindings","has","Scope$1","NullType","kind","NumberType","StringType","BooleanType","ColorType","ObjectType","ValueType","CollatorType","FormattedType","ResolvedImageType","array$1","itemType","N","toString$1","valueMemberTypes","checkSubtype","expected","memberType","isValidType","provided","allowedTypes","some","isValidNativeType","Collator","caseSensitive","diacriticSensitive","locale","sensitivity","collator","Intl","usage","compare","lhs","rhs","resolvedLocale","resolvedOptions","FormattedSection","fontStack","textColor","Formatted","sections","fromString","unformatted","isEmpty","section","factory","serialize","serialized","ResolvedImage","available","validateRGBA","isValue","mixed","typeOf","Literal","context","expectedType","evaluate","eachChild","outputDefined","Literal$1","RuntimeError$1","toJSON","types$2","string","boolean","Assertion","floor","parsed","ctx","arg","Assertion$1","FormatExpression","firstArg","nextTokenMayBeObject","font","lastExpression","content","evaluatedContent","ImageExpression","evaluatedImageName","availableImages","types$1","Coercion","Boolean","parseColor","Number","Coercion$1","geometryTypes","EvaluationContext$1","globals","featureState","formattedSection","_parseColorCache","canonical","featureTileCoord","featureDistanceData","geometryType","geometry","canonicalID","distanceFromCenter","center","dX","dY","bearing","cached","CompoundExpression","_evaluate","definition","definitions","availableOverloads","overloads","signature","signatureContext","ParsingContext$1","registry","path","scope","parsedArgs","argParseFailed","signatures","stringifySignature","actualTypes","register","CompoundExpression$1","CollatorExpression","updateBBox","bbox","coord","boxWithinBox","bbox1","bbox2","getTileCoordinates","tilesAtZoom","pow","onBoundary","p1","p2","pointWithinPolygon","rings","inside","len2","pointWithinPolygons","polygons","twoSided","q1","q2","det1","det2","lineIntersectLine","d","vectorP","vectorQ","v1","v2","lineIntersectPolygon","polygon","lineStringWithinPolygon","line","lineStringWithinPolygons","getTilePolygon","coordinates","getTilePolygons","updatePoint","polyBBox","worldSize","halfWorldSize","shift","getTilePoints","pointBBox","shifts","tilePoints","points","getTileLines","lineBBox","tileLines","tileLine","Within","geojson","geometries","features","polygonGeometry","tilePolygon","tilePolygons","pointsWithinPolygons","linesWithinPolygons","Within$1","isFeatureConstant","isStateConstant","isGlobalPropertyConstant","Var","boundExpression","Var$1","ParsingContext","expr","_parse","annotate","typeAnnotation","Expr","actual","isConstant","ec","isTypeAnnotation","childrenConstant","findStopLessThanOrEqualTo","currentValue","nextValue","lowerIndex","upperIndex","currentIndex","Step","labels","outputs","label","outputType","labelKey","valueKey","stopCount","out","Step$1","unitbezier","UnitBezier","p1x","p1y","p2x","p2y","cx","bx","ax","cy","by","ay","sampleCurveX","sampleCurveY","sampleCurveDerivativeX","solveCurveX","t0","t1","t2","d2","solve","UnitBezier$1","interpolate","__proto__","color","from","to","array","Xn","Zn","t3","deg2rad$1","rad2deg","xyz2lab","lab2xyz","xyz2rgb","rgb2xyz","rgbToLab","rgbColor","labToRgb","labColor","interpolateHue","lab","forward","reverse","hcl","atan2","hclColor","Interpolate","operator","interpolation","interpolationFactor","lower","upper","exponentialInterpolation","controlPoints","rest","outputLower","outputUpper","lowerValue","upperValue","difference","progress","Interpolate$1","Coalesce","needsAnnotation","firstImage","argCount","Coalesce$1","Let","binding","Let$1","At","At$1","In","In$1","IndexOf","fromIndex","IndexOf$1","Match","inputType","cases","otherwise","labelContext","MAX_SAFE_INTEGER","sortedLabels","groupedByOutput","outputLookup","outputIndex","coerceLabel","Match$1","Case","branches","_","Case$1","Slice","beginIndex","endIndex","Slice$1","isComparableType","eqCollate","makeComparison","compareBasic","compareWithCollator","isOrderComparison","Comparison","hasUntypedArgument","rt","Equals","NotEquals","LessThan","GreaterThan","LessThanOrEqual","GreaterThanOrEqual","NumberFormat","currency","unit","minFractionDigits","maxFractionDigits","minimumFractionDigits","maximumFractionDigits","Length","expressions","obj","varargs","pitch","heatmapDensity","lineProgress","skyRadialProgress","accumulated","LN2","LN10","asin","acos","ceil","isSupportedScript","toUpperCase","success","isFunction","StyleExpression","_warningHistory","_evaluator","_defaultValue","spec","getDefaultValue","_enumValues","evaluateWithoutErrorHandling","val","warn","createExpression","parser","types","enum","formatted","resolvedImage","getExpectedType","ZoomConstantExpression","_styleExpression","isStateDependent","ZoomDependentExpression","interpolationType","createPropertyExpression","isFeatureConstant$1","supportsPropertyExpression","isZoomConstant","supportsZoomExpression","zoomCurve","findZoomCurve","supportsInterpolation","childResult","deepUnbundle","unbundledValue","valueOf","unbundle","isExpressionFilter","createFilter","layerType","needGeometry","needFeature","convertFilter","filterExp","staticFilter","isDynamicFilter","unionDynamicBranches","collapseDynamicBooleanExpressions","extractStaticFilter","filterSpec","compiledStaticFilter","filterFunc","err","globalProperties","dynamicFilterFunc","compiledDynamicFilter","dynamicFilter","geometryNeeded","collapsed","dynamicConditionExpressions","collapsedExpression","subExpression","isBranchingDynamically","Set","filters","convertComparisonOp","convertNegation","convertInOp","convertHasOp","refProperties","deref","derefLayers","layers","ref","fontWeights","thin","hairline","light","book","regular","normal","plain","roman","standard","medium","bold","heavy","fat","poster","sp","italicRE","fontCache","mb2css","fonts","size","lineHeight","cssData","haveWeight","haveStyle","weight","fontFamilies","parts","maybeWeight","w","previousPart","startsWith","fontFamily","mapboxBaseUrl","getMapboxPath","url","normalizeStyleUrl","token","mapboxPath","decodeURI","URL","location","href","mapboxSubdomains","normalizeSourceUrl","tokenParam","styleUrl","urlObject","searchParams","sizeFactor","window","devicePixelRatio","functionCacheByStyleId","filterCacheByStyleId","styleId","getStyleId","glStyle","getStyleFunctionKey","olLayer","getUid","getFunctionCache","functionCache","getFilterCache","filterCache","deg2rad","degrees","defaultResolutions","resolutions","res","createCanvas","width","height","WorkerGlobalScope","OffscreenCanvas","document","getZoomForResolution","zoomFactor","getResolutionForZoom","factor","pendingRequests","fetchResource","resourceType","metadata","request","transformedRequest","transformRequest","pendingRequest","toPromise","then","Request","headers","fetch","response","ok","json","Promise","reject","catch","getGlStyle","glStyleOrUrl","resolve","trim","accessToken","tilejsonCache","getTileJson","glSource","cacheKey","promise","tileLoadFunction","tile","setLoader","arrayBuffer","getFormat","readFeatures","featureProjection","setFeatures","setState","getImage","blob","createObjectURL","addEventListener","revokeObjectURL","tiles","normalizedSourceUrl","accessTokenParam","tileJson","tileUrl","scheme","drawIconHalo","spriteImage","spriteImageData","haloWidth","haloColor","imgSize","pixelRatio","imageCanvas","imageContext","getContext","drawImage","imageData","getImageData","globalCompositeOperation","fillStyle","jj","arc","fill","smoothstep","drawSDF","buffer","putImageData","hairSpacePool","applyLetterSpacing","letterSpacing","textWithLetterSpacing","lines","joinSpaceString","measureContext","getMeasureContext","measureText","measureCache","wrapText","em","hardLines","wrappedText","words","maxWidth","word","testLine","prevWidth","nextWidth","lineWords","lastWord","fontFamilyRegEx","stripQuotesRegEx","loadedFontFamilies","hasFontFamily","family","styleSheets","styleSheet","cssRules","rules","cssRule","cssText","processedFontFamilies","emptyObj$1","zoomObj","renderFeatureCoordinates","renderFeature","layoutOrPaint","layerId","isExpr","compiledExpression","rawExpression","expressionData","bind","getDeclutterMode","evaluateFilter","renderTransparentEnabled","colorWithOpacity","opacity","templateRegEx","fromTemplate","recordLayer","styleFunctionArgs","stylefunction","sourceOrLayers","spriteData","spriteImageUrl","getFonts","spriteImageSize","spriteImageUnSDFed","blobUrl","crossOrigin","onload","changed","worker","postMessage","action","event","allLayers","layersBySourceLayer","mapboxLayers","iconImageCache","patternCache","mapboxSource","sourceLayer","sources","textHalo","styles","onlyLayer","featureBelongsToLayer","stylesLength","layerData","layout","paint","visibility","minzoom","maxzoom","stroke","strokeColor","fillIcon","icon","getFill","getStroke","getText","setZIndex","icon_cache_key","pattern","globalAlpha","createPattern","setColor","setWidth","setLineCap","setLineJoin","setMiterLimit","setLineDash","iconImg","skipLabel","textLineHeight","textSize","maxTextWidth","hasImage","placementAngle","iconImage","styleGeom","imageElement","iconRotationAlignment","geom","xM","dotProduct","iconSize","iconColor","iconCacheKey","declutterMode","displacement","iconOptions","rotateWithView","sdf","setGeometry","setRotation","setOpacity","setAnchor","setImage","setText","circleRadius","circleStrokeColor","circleTranslate","circleColor","circleStrokeWidth","cache_key","radius","fontArray","includes","textField","acc","chunk","chunkFont","padding","textTransform","wrappedLabel","setFont","setKeepUpright","keepUpright","textAnchor","placement","textAlign","setPlacement","setRepeat","symbolSpacing","setOverflow","textHaloWidth","textOffset","textTranslate","vOffset","hOffset","textRotationAlignment","setRotateWithView","setMaxAngle","setTextAlign","textBaseline","setTextBaseline","textJustify","setJustify","setOffsetX","setOffsetY","setFill","halfTextSize","setStroke","textPadding","getPadding","setStyle","getTileResolutions","tileSize","createXYZ","maxZoom","getResolutions","completeOptions","applyStyle","sourceOrLayersOrOptions","optionsOrPath","sourceId","updateSource","assignSource","setupVectorSource","targetSource","setTileUrlFunction","getTileUrlFunction","setUrls","getUrls","format_","getAttributions","setAttributions","getTileLoadFunction","defaultLoadFunction","setTileLoadFunction","equivalent","getProjection","getTileGrid","setSource","isFinite","getMaxResolution","getMinZoom","setMaxResolution","setupGeoJSONSource","url_","getUrl","spriteScale","onChange","sprite","METERS_PER_UNIT","templateUrl","webfonts","fontsKey","fontDescriptions","cssFont","registerFont","fontDescription","checkedFonts","fontUrl","querySelector","markup","rel","head","getStyle","normalizeSpriteUrl","spriteUrl","origin","pathname","spritesJson","transformed","sourceOptionsFromTileJSON","tileJSON","tileJSONSource","tileJSONDoc","getTileJSON","bounds","fromLonLat","tr","extentFromTileJSON","projectionExtent","minZoom","sourceOptions","attributions","getTopLeft","getOrigin","getTileSize","urls","getBboxTemplate","geoJsonFormat","dataProjection","geoJsonUrl","extentUrl","bboxTemplate","attribution","loader","failure","addFeatures","removeLoadedExtent","strategy","getUserProjection","LayerMapBox","_VectorTileLayer","settings","_this","_classCallCheck","ssl","protocol","layerCfg","configuration","Config","isConfigLoaded","getLayerConf","styleTitle","styleName","VectorTileSource","state","_originators","originators","_legends","legends","_metadata","_description","description","_title","_quicklookUrl","quicklookUrl","layerVectorTileOptions","Utils","mergeParams","olParams","service","setStyleMapBox","_possibleConstructorReturn","_inherits","credentials","onStyleMapBoxLoad","onStyleMapBoxError","_this2","styleSource","vectorTileJson","TileJSONSource","on","getState","observableUnByKey","VectorTileLayer","GeoportalMapBox","LayerWMS","_TileLayer","olSourceParams","getLayerId","sourceParams","wmsSource","SourceWMS","apiKey","layerTileOptions","getParams","LAYERS","geobbox","globalConstraints","left","right","olTransformExtentProj","olGetProj","_typeof","minResolution","minScale","maxResolution","maxScale","TileLayer","GeoportalWMS","LayerWMTS","wmtsSource","SourceWMTS","getLayer","globalConstrainWFSts","GeoportalWMTS","TileWMS","Logger","getLogger","_TileWMSSource","wmsParams","getLayerKey","getLayerParams","urlParams","Pkg","olExtVersion","wmsSourceOptions","Gp","Helper","normalyzeUrl","SERVICE","VERSION","STYLES","FORMAT","TileWMSSource","WMTS","getZoomLevelFromScaleDenominator","scaleDenominator","crs","resolutionsNatives","drawLogo","jl","originator","constraints","kl","constraint","minZoomLevel","maxScaleDenominator","maxZoomLevel","minScaleDenominator","viewExtent","intersects","logo","container","className","textContent","innerHTML","extent1","extent2","intersectsX","intersectsY","_WMTSExtended","wmtsParams","wmtsSourceOptions","LayerUtils","matrixSet","TMSLink","WMTSTileGrid","nativeResolutions","matrixIds","tileMatrices","topLeftCorner","WMTSExtended","_regeneratorRuntime","asyncIterator","u","toStringTag","define","configurable","wrap","Generator","Context","makeInvokeMethod","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","defineIteratorMethods","_invoke","AsyncIterator","invoke","__await","callInvokeWithMethodAndArg","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","resultName","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","displayName","isGeneratorFunction","mark","setPrototypeOf","awrap","prev","rval","handle","finish","delegateYield","asyncGeneratorStep","_asyncToGenerator","_next","_throw","m_suggestions","controller","AbortController","m_index","m_fields","m_size","m_maximumResponses","m_filterByService","m_filterByProjection","m_filterByLayerPriority","m_filterWMTSPriority","m_filterByTMS","m_url","EventTarget","suggest","_ref","_callee","results","_loop","_i","_context2","clear","fields","append","status","_context","findIndex","layer_name","score","inventory","unique","srs","keywords","metadata_urls","tech","tags","theme","producer","dispatchEvent","CustomEvent","bubbles","detail","getSuggestions","_x","abort","getNames","getTitles","setIndex","setFields","setSize","setUrl","eval","setMaximumResponses","setFiltersByService","setFiltersByProjection","setFiltersByLayerPriority","setFilterWMTSPriority","setFiltersByTMS","updateFilterByTMS","_ref2","_callee2","lstName","_context3","_x2","_WMTSSource","_callSuper","tilePixelRatio","tileCoord","getTileCoordForCoordAndResolution","tileExtent","getTileCoordExtent","transformedTileCoord","tmpTileCoord","tmpExtent","olCreateEmpty","olGetWidth","olIntersects","getTransformedTileCoord","tileResolution","getResolution","tileMatrix","getMatrixIds","baseParams","REQUEST","LAYER","TILECOL","TILEROW","TILEMATRIX","TILEMATRIXSET","getMatrixSet","STYLE","WMTSSource","detectSupport","isDesktop","userAgent","navigator","LoggerByDefault","process","VERBOSE","env","Log","logname","disableAll","loggers","enableAll","module","objectOrFunction","vertxNext","customSchedulerFn","asap","queue","flush","scheduleFlush","setScheduler","scheduleFn","setAsap","asapFn","browserWindow","browserGlobal","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","isNode","isWorker","Uint8ClampedArray","importScripts","MessageChannel","useNextTick","nextTick","useVertxTimer","useSetTimeout","useMutationObserver","iterations","observer","observe","characterData","useMessageChannel","channel","port1","onmessage","port2","globalSetTimeout","setTimeout","attemptVertx","vertx","Function","require","runOnLoop","runOnContext","onFulfillment","onRejection","noop","PROMISE_ID","makePromise","_state","invokeCallback","_result","subscribe","resolve$1","Constructor","PENDING","FULFILLED","REJECTED","selfFulfillment","cannotReturnOwn","tryThen","then$$1","fulfillmentHandler","rejectionHandler","handleForeignThenable","thenable","sealed","fulfill","reason","_label","handleOwnThenable","handleMaybeThenable","maybeThenable","publishRejection","_onerror","publish","_subscribers","subscribers","settled","hasCallback","succeeded","initializePromise","resolver","nextId","validationError","Enumerator","_instanceConstructor","_remaining","_enumerate","_eachEntry","entry","resolve$$1","_then","didError","_settledAt","Promise$1","_willSettleAt","enumerator","all","reject$1","needsResolver","needsNew","finally","polyfill","local","P","promiseToString","cast","_setScheduler","_setAsap","_asap","ErrorService","TYPE_UNKERR","TYPE_SRVERR","TYPE_USEERR","WPS","logger","trace","DataObject","paramservice","paramversion","paramidentifier","identifier","paramrawdataoutput","rawdataoutput","paramrequest","requestString","template","post","namespaceByDefault","schemaLocationByDefault","processRequestString","__addDataInputs","tmpl","sep","that","getData","__addDataInput","tmp","setMethod","getMethod","xmlString","xmlDoc","reader","__getXMLDOC","setReader","errorMsg","ActiveXObject","loadXML","parseError","errorCode","linepos","parsererror","__readDefault","dataAttributes","nodeAttributes","attribute","__getAttributes","childData","children","getXMLString","setXMLString","getReader","read","getXMLDoc","setXMLDoc","parserOutput","__getRootNode","servicesVersion","servicesDate","Protocols","XHR","Services","DefaultUrl","AltiResponse","A","Alti","Elevation","AutoCompleteResponse","AutoComplete","SuggestedLocation","IsoCurveResponse","RouteResponse","Route","RouteInstruction","uuid","Date","now","timeOut","info","onResponse","callbackId","callbackSuffix","urlHasCallbackKey","urlHasCallbackName","idx","callbackName","HasCallbackName","onTimeOut","onTimeOutTrigger","_deleteScript","clearTimeout","_createScript","scriptu","scripto","send","nocache","getTime","proxy","referer","__call","onFailure","__callJSON","__callXML","corps","hXHR","nodefetch","opts","Referer","body","statusText","XMLHttpRequest","overrideMimeType","setRequestHeader","onerror","ontimeout","onreadystatechange","readyState","responseURL","data4xhr","XDomainRequest","timeout","responseText","data4xdr","getMessage","CLASSNAME","positions","outputFormat","resource","sampling","api","httpMethod","zonly","measures","serverUrl","lstUrlByDefault","newUrl","urlFound","wps","buildRequest","onSuccess","build","analyzeResponse","rawResponse","AltiResponseReader","READERS","elevations","altiResponse","elevation","textNode","lon","elevationObject","source_name","measure","source_measure","measureChildren","exceptionreport","exceptionReport","exception","exceptionCode","delimiter","indent","bOnError","bOnSuccess","myReq","AltiRequestREST","profil","getLon","getLat","myTemplate","rqstWPS","AltiElevationRequest","_zonly","AltiProfilRequest","_sampling","AltiRequest","setPositions","lstPosition","getPositions","addPositions","lstLon","lstLat","JSONResponse","errorMess","Measure","options_","patchOptionConvertor","territory","terr","maximumResponses","filterOptions","normalyzeParameters","encodeURIComponent","suggestedLocation","country","street","poi","poiType","commune","city","fullText","fulltext","postalCode","zipcode","classification","suggestedLocations","CommonService","proxyURL","onBuildRequest","callService","onCallService","onAnalyzeResponse","strUrlProxified","strData","bUrlProxified","requestMetaOptions","http","onBeforeParse","newResponse","customConfigFile","sync","listConfigUrls","__callServiceSync","__callService","listConfigResults","Fetch","fetchFactory","promises","ConfigJSON","objects","allLayersConfig","allKeysConfig","allTMSConfig","generalOptions","apiKeys","tileMatrixSets","mergeConfig","IConfig","ConfigInterface","defaultGMLGFIStyle","wgs84Resolutions","isKeyConfLoaded","getLayersId","layerName","servicePartsLayer","getLayersConf","layersIdArray","lyrId","layerConf","serviceParams","formats","defaultProjection","globalConstraint","wmtsOptions","tileMatrixSetLimits","tileMatrixSetLink","tmsConf","getTMSConf","layerKey","resourcesByKey","arrayLayerId","getTileMatrixSets","tmsID","getGlobalConstraints","DefaultUrlService","new_key","ProcessIsoCurve","_key","ReverseGeocode","Geocode","GeocodeResponseParser","_parseFeature","geocodeResponse","accuracy","placeAttributes","_type","matchType","locations","mess","query","returnFreeForm","geocodeMethod","returnTrueGeometry","maxResp","GeocodeRequestREST","GeocodeParamREST","searchGeometry","getFilters","getSearchGeometry","GeocodeResponse","GeocodedLocation","bbox2Json","circle","circle2Json","polygon2Json","jsonGeom","geoEPSG","time","distance","exclusions","distanceUnit","timeUnit","smoothing","holes","graph","constraintTunnel","constraintPont","constraintAutoroute","constraintType","oIsoCurve","ProcessIsoCurveRequest","mode","postRequest","costType","costValue","profile","direction","ProcessIsoCurveParam","getLocation","getDistanceUnit","getConstraints","constraintArray","getDirection","coords","ProcessIsoCurveResponse","RouteRequestREST","RouteParamREST","startPoint","endPoint","intermediates","viaPoints","optimization","routePreference","getSteps","waysAttributes","getIntermediates","getWaysAttributes","getProfile","getOptimization","legs","legSteps","steps","totalTime","duration","totalDistance","geometryInInstructions","routeGeometry","legList","portions","step","routeInstructions","instruction","modifier","exit","nom_1_droite","toponyme","provideBbox","expectedStartTime","UrlByDefault","getConfig","getAltitude","geocode","reverseGeocode","autoComplete","route","isoCurve","myParams","tabParams","encode","myUrl","firstOccuranceIndex","msg","PARAM_MISSING","PARAM_EMPTY","PARAM_TYPE","PARAM_FORMAT","PARAM_NOT_SUPPORT","PARAM_NOT_SUPPORT_NODEJS","PARAM_UNKNOWN","SERVICE_REQUEST_BUILD","SERVICE_REQUEST_EMPTY","SERVICE_RESPONSE_EXCEPTION","SERVICE_RESPONSE_EXCEPTION_2","SERVICE_RESPONSE_ANALYSE","SERVICE_RESPONSE_ANALYSE_2","SERVICE_RESPONSE_EMPTY","SERVICE_RESPONSE_EMPTY_2","SERVICE_RESPONSE_FORMAT","SERVICE_RESPONSE_FORMAT_2","SERVICE_RESPONSE_FORMAT_3","CLASS_CONSTRUCTOR","clef","parametres","undefinedType","isIE","logMethods","_loggersByName","defaultLogger","bindMethod","methodName","traceForIE","realMethod","replaceLoggingMethods","getLevel","methodFactory","debug","levels","SILENT","enableLoggingWhenConsoleArrives","defaultMethodFactory","_level","_loggerName","inheritedLevel","defaultLevel","userLevel","storageKey","persistLevelIfPossible","levelNum","levelName","localStorage","ignore","cookie","getPersistedLevel","storedLevel","cookieName","clearPersistedLevel","removeItem","normalizeLevel","setLevel","persist","setDefaultLevel","resetLevel","TRACE","rebuild","childName","initialLevel","_log","noConflict","getLoggers","globalObject","getGlobal","Headers","Response","GeoJSON","Tile","Vector","loadingstrategy","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","globalThis","control","Control","getComputedStyle","getPropertyValue","_Control","ControlExtended","listable","_createClass","getMap","PositionFactory","update","ANCHORS","_PositionFactory_brand","WeakSet","caller","_classPrivateMethodInitSpec","_assertClassBrand","_createContainer","_setAnchor","prepend","_existContainer","getOverlayContainerStopEvent","sizeW","offsetWidth","sizeH","offsetHeight","panels","panel","checkDsfr","exceptions","openedPanelID","openedPanel","exceptionPanel","controlPanels","bottomLeft","topLeft","_toConsumableArray","bottomRight","topRight","panelID","isException","getSameSideOpenedPanel","click","onPanelOpen","PanelManager","Overlay","lightOrange","darkOrange","turquoiseBlue","defaultOffset","interaction","_extensions","_options","clean","unset","interactions","getInteractions","getArray","getActive","DrawInteraction","SelectInteraction","ModifyInteraction","setActive","timestamp","generate","MathUtils","modulo","decimalToDMS","hemispheres","numDigits","normalizedDegrees","dflPrecision","precision","sec","dmsToDecimal","minutes","seconds","coordinateToDecimal","olCoordinate","toFixed","lng","coordinateToDMS","coordinateToRad","coordinateToGon","coordinateToMeter","coordinateToKMeter","toInteger","isInteger","toFloat","advancedSearchFiltersByDefault","PositionOfInterest","StreetAddress","CadastralParcel","zoomToResultsByDefault","importance","getGeocodedLocationFreeform","geocodedLocation","resultToReturn","toponym","category","postcode","housenumber","getSuggestedLocationFreeform","to_meter","testkey","lkey","defData","paramName","paramVal","paramOutname","paramObj","datum","rf","lat_0","lat0","lat_1","lat1","lat_2","lat2","lat_ts","lon_0","long0","lon_1","long1","lon_2","long2","rectified_grid_angle","lonc","longc","x_0","x0","y_0","y0","k_0","k0","r_a","R_A","zone","south","utmSouth","towgs84","datum_params","from_greenwich","nadgrids","datumCode","axis","legalAxis","txt","place","currentObject","thing","newObj","convert","readCharicter","neutral","keyword","quoted","afterquote","afterItem","newObjects","wkt","AUTHORITY","authority","projName","PROJECTION","AXIS","axisOrder","UNIT","DATUM","SPHEROID","geogcs","GEOGCS","toMeter","sphere","ellps","TOWGS84","outName","inName","lisp","def","EPSG","ESRI","IAU2000","defs","WGS84","GOOGLE","auth","maybeProjStr","ext","eccent","sinphi","cosphi","con","com","ts","dphi","eccnth","init","es","inverse","names","ellipseName","wgs84","ellipse","datumName","ch1903","ggrs87","nad83","nad27","potsdam","carthage","hermannskogel","mgi","osni52","ire65","rassadiran","nzgd49","osgb36","s_jtsk","beduaram","gunung_segara","rnb72","ep2","datum_type","grids","optional","mandatory","grid","isNull","view","Uint8Array","nodes","longitudeShift","latitudeShift","isLittleEndian","lowerLatitude","getFloat64","upperLatitude","lowerLongitude","upperLongitude","latitudeInterval","longitudeInterval","gridNodeCount","getInt32","gridHeader","nodesOffset","gridShiftRecords","record","getFloat32","latitudeAccuracy","longitudeAccuracy","srsCode","ourProj","datumDef","a2","b2","sphere_","ecc","datumObj","Rn","Sin_Lat","Sin2_Lat","Cos_Lat","Longitude","Latitude","Height","RR","CT","ST","RX","RK","RN","CPHI0","SPHI0","CPHI","SPHI","SDPHI","iter","genau","X","Y","Z","source_a","source_es","dest_a","dest_b","dest_es","Dx_BF","Dy_BF","Dz_BF","Rx_BF","Ry_BF","Rz_BF","M_BF","x_tmp","y_tmp","z_tmp","attemptedGrids","outer","subgrids","subgrid","del","lim","pin","ct","tb","dif","inx","indx","frct","f00","cvs","f10","f11","f01","m11","m10","m00","m01","denorm","xin","yin","zin","enforceAxis","hasZ","transformedArray","oProj","fromProj","toProj","single","mgrs","toPoint","utm","seasting","easting","snorthing","northing","zoneNumber","zoneLetter","setParm","setColumn","setRow","column","row","parm","colOrigin","rowOrigin","colInt","rowInt","rollover","eccPrimeSquared","T","C","M","LongOriginRad","ZoneNumber","Lat","Long","eccSquared","LatRad","LongRad","UTMEasting","UTMNorthing","rad","N1","T1","C1","R1","D","LongOrigin","phi1Rad","e1","LetterDesignator","mgrsString","testChar","hunK","sb","east100k","curCol","eastingValue","rewindMarker","north100k","curRow","northingValue","remainder","accuracyBonus","sepEastingString","sepNorthingString","sepEasting","sepNorthing","fromMGRS","mgrsStr","toMGRS","en","sphi","cphi","ml0","delta_lon","sin_phi","cos_phi","al","als","cs","tq","ml","tan_phi","ds","temp","pp","B","cos_2B","h1","h2","arg_r","arg_i","hr2","hi2","sin_arg_r","cos_arg_r","sinh_arg_i","cosh_arg_i","hi1","hr1","hi","cgb","cbg","utg","gtu","np","Qn","Zb","Ce","Cn","sin_Cn","cos_Cn","sin_Ce","cos_Ce","dependsOn","esinp","rc","phic0","ratexp","K","sinc0","cosc0","R2","sinc","cosc","cosl","coslat0","sinlat0","cons","ms1","X0","ssfn_","cosX0","sinX0","sinX","cosX","rh","sinlat","coslat","dlon","ce","phit","eccen","phy0","lambda0","sinPhy0","semiMajorAxis","flattening","e2","R","b0","k1","k2","k3","Sa1","Sa2","I","rotI","rotB","phy","prevPhy","iteration","cosph0","F","H","L","sinph0","J","gamma0","projectionName","lamc","lam1","lam2","phi1","phi2","alpha_c","no_off","no_rot","alp","gam","one_es","lam0","singam","cosgam","sinrot","cosrot","rB","ArB","BrA","u_0","v_pole_n","v_pole_s","U","V","W","Qp","Sp","Tp","Vp","Up","sin1","cos1","ts1","sin2","cos2","ms2","ts2","ts0","f0","rh1","s45","s90","fi0","alfa","uq","u0","n0","s0","ro0","ad","gfi","deltav","eps","ro","czech","fi1","e0","e3","lam","nl","tl","asq","cl","nl1","rl1","tl1","dl","dsq","S_POLE","N_POLE","EQUIT","OBLIQ","qp","mmf","apa","APA","rq","xmf","ymf","sinb1","cosb1","coslam","sinlam","q","sinb","cosb","cCe","sCe","ab","cosz","sinz","sin_po","cos_po","qs1","qs2","qs0","ns0","qs","phi1z","eccnts","sin_p14","cos_p14","infinity_dist","coslon","dlat","bl","tanphi","mln","mlnp","ma","B_re","B_im","C_re","C_im","delta_lat","d_phi","d_lambda","d_phi_n","d_psi","th_n_im1","th_re","th_im","th_n_re","th_n_im","z_re","z_im","z_n_im1","delta_x","z_n_re","z_n_im","num_re","num_im","den_re","den_im","den2","d_psi_n","C_y","C_x","delta_theta","ml1","ml2","sinth","costh","gsq","msq","xx","yy","xys","c1","c2","c3","a1","th1","sin_p12","cos_p12","Mlp","Ml","Nl1","Nl","Az","G","GH","Hs","kp","cos_c","s2","s3","s4","cosAz","Ee","sinpsi","slon","face","one_minus_f","one_minus_f_squared","xy","sinlon","cosmu","tannu","tantheta","invert_sign","xa","lp","coefs","f_df","max_err","iters","upd","azi","tilt","pn1","rp","pfact","cg","sg","cw","sw","yt","ba","bm","bq","flip_axis","sweep","radius_g_1","radius_g","rone_es","radius_p","radius_p2","radius_p_inv2","shape","v_x","v_y","v_z","det","v_zp","paramLat","paramLatSq","paramLatPow6","am1","cphi1","proj4","defaultDatum","Proj","Point","nadgrid","DataView","nFields","header","nSubgridFields","nSubgrids","shiftType","fromSemiMajorAxis","fromSemiMinorAxis","toSemiMajorAxis","toSemiMinorAxis","gridOffset","subHeader","lngColumnCount","latColumnCount","Projection","projCodes","code1","proj1","code2","proj2","getTransform","addCoordinateTransforms","Register","isLoaded","_register","_code","load","Proj4","registers","codes","loadByDefault","CRS","IGNF","LAMB93","LAMBE","LAMB1","LAMB2","LAMB3","LAMB4","RGF93G","WGS84G","loadByName","AMST63","CROZ63","CSG67","ED50","ETRS89","GUAD48","GUADFM49","IGN63","IGN72","KERG62CAR","MART38","MAYO50","MOOREA87","NTF","NUKU72","REUN47","RGF93","RGFG95","RGM04","RGNC","RGPF","RGR92","RGSPM06","RGTAAF07","RRAF91","STPL69","STPM50","TAHAA","TAHI79","TERA50","WALL78","WGS72","AMST63GEO","CROZ63GEO","CSG67GEO","ED50G","GUAD48GEO","GUADFM49GEO","IGN63GEO","IGN72GEO","KERG62GEO","MART38GEO","MAYO50GEO","MOOREA87GEO","NTFG","NTFP","NUKU72GEO","REUN47GEO","RGFG95GEO","RGM04GEO","RGNCGEO","RGPFGEO","RGR92GEO","RGSPM06GEO","RGTAAF07G","STPL69GEO","STPM50GEO","TAHAAGEO","TAHI79GEO","TERA50G","WALL78GEO","WGS72G","WGS84RRAFGEO","XGEO","AMST63UTM43S","CROZ63UTM39S","CSG67UTM21","CSG67UTM22","GEOPORTALANF","GEOPORTALASP","GEOPORTALCRZ","GEOPORTALFXX","GEOPORTALGUF","GEOPORTALKER","GEOPORTALMYT","GEOPORTALNCL","GEOPORTALPYF","GEOPORTALREU","GEOPORTALSPM","GEOPORTALWLF","GUAD48UTM20","GUADFM49U20","IGN63UTM7S","IGN72UTM58S","KERG62UTM42S","LAMB1C","LAMB2C","LAMB3C","LAMB4C","RGF93CC42","RGF93CC43","RGF93CC44","RGF93CC45","RGF93CC46","RGF93CC47","RGF93CC48","RGF93CC49","RGF93CC50","MART38UTM20","MAYO50UTM38S","MILLER","MOOREA87U6S","NUKU72U7S","RGM04UTM38S","RGNCUTM57S","RGNCUTM58S","RGNCUTM59S","RGPFUTM5S","RGPFUTM6S","RGPFUTM7S","RGR92UTM40S","RGSPM06U21","STPL69UTM43S","STPM50UTM21","TAHAAUTM05S","TAHI51UTM06S","TAHI79UTM6S","TERA50STEREO","UTM01SW84","UTM20W84GUAD","UTM20W84MART","UTM22RGFG95","UTM39SW84","UTM42SW84","UTM43SW84","WALL78UTM1S","ETRS89GEO","ETRS89LAEA","ETRS89LCC","UTM26ETRS89","UTM27ETRS89","UTM28ETRS89","UTM29ETRS89","UTM30ETRS89","UTM31ETRS89","UTM32ETRS89","UTM33ETRS89","UTM34ETRS89","UTM35ETRS89","UTM36ETRS89","UTM37ETRS89","UTM38ETRS89","projectionsExtent","overload","_extent","_addUID","_uid","_createMainContainerElement","_createSearchDivElement","searchDiv","_createShowSearchEnginePictoElement","collapsible","button","curr","ariaPressed","classList","showAdvancedSearch","display","showGeolocate","showCoordinate","onShowSearchEngineClick","_createSearchInputElement","placeholder","form","preventDefault","onGeocodingSearchSubmit","autocomplete","charCode","which","keyCode","onAutoCompleteSearchText","ID","scrollIntoView","focus","_createSearchResetElement","buttonReset","onSearchResetClick","_createButtonsElement","_createFirstLineWrapper","_createRadioContainer","_createRadioElements","choiceLocations","inputLocations","labelLocations","htmlFor","attachEvent","choiceData","inputData","labelData","_createShowAdvancedSearchElement","span","innerText","_createShowGeolocateElement","onShowSearchGeolocateClick","_createShowSearchByCoordinateElement","_createAdvancedSearchPanelElement","_createAdvancedSearchPanelDivElement","_createGeocodeResultsElement","_createGeocodeResultsHeaderElement","_createGeocodeResultsDivElement","_createAutoCompleteElement","_createCoordinateSearchPanelElement","_createCoordinateSearchPanelDivElement","_createAutoCompleteListElement","_createAutoCompletedLocationContainer","_createAutoCompletedLocationTitleElement","_createAutoCompletedLocationElement","GeocodeUtils","onAutoCompletedResultsItemClick","_createSearchedSuggestContainer","_createSearchedSuggestTitleElement","_createSearchedSuggestElement","dataset","onSearchedResultsItemClick","_createAdvancedSearchPanelHeaderElement","divTitle","divClose","_createAdvancedSearchPanelFormElement","advancedSearchCodes","matchesFilters","querySelectorAll","onGeocodingAdvancedSearchSubmit","select","_createAdvancedSearchFormCodeElement","onGeocodingAdvancedSearchCodeChange","option","_createAdvancedSearchFormInputElement","_createAdvancedSearchFormFiltersElement","_createAdvancedSearchFiltersTableElement","_createAdvancedSearchFiltersAttributElement","filterAttributes","listId","_createGeocodeResultsListElement","ctrlKey","onGeocodedResultsItemClick","_createGeocodedLocationElement","_createCoordinateSearchPanelHeaderElement","onCoordinateSearchClose","_createCoordinateSearchPanelFormElement","onShowSearchByCoordinateClick","__createCoordinateSearchDivElement","_createCoordinateSearchSystemsLabelElement","_setCoordinateSearchSystemsSelectElement","systems","selectSystem","onCoordinateSearchSystemChange","_createCoordinateSearchUnitsLabelElement","_setCoordinateSearchUnitsSelectElement","selectUnits","onCoordinateSearchUnitsChange","_setCoordinateSearchLngLabelElement","labelLng","_setCoordinateSearchLngInputElement","_setCoordinateSearchLngDMSElement","_setCoordinateSearchLatLabelElement","labelLat","_setCoordinateSearchLatInputElement","_setCoordinateSearchLatDMSElement","_createCoordinateSearchSubmitElement","SearchEngine","initialize","_initContainer","_clearResults","_showSearchEngineButton","setPosition","gutter","getContainer","_geocodedLocations","_checkInputOptions","zoomTo","resources","displayButtonClose","displayButtonAdvancedSearch","displayButtonGeolocate","displayButtonCoordinateSearch","advancedSearch","coordinateSearch","searchOptions","addToMap","serviceOptions","geocodeOptions","autocompleteOptions","triggerGeocode","triggerDelay","prettifyResults","displayMarker","markerStyle","markerUrl","splitResults","Search","filterServices","filterLayersPriority","filterWMTSPriority","filterVectortiles","updateVectortiles","_fillSearchedSuggestListContainer","SelectorID","_inputSearchContainer","_autocompleteContainer","_containerResultsLocation","_containerResultsSuggest","_radioButtonLocation","_radioButtonSuggest","_suggestedLocations","_geocodedContainer","_filterContainer","_currentGeocodingCode","_currentGeocodingLocation","_advancedSearchFilters","_initAdvancedSearchFilters","_advancedSearchCodes","_initAdvancedSearchCodes","_coordinateSearchSystems","_initCoordinateSearchSystems","_currentCoordinateSearchSystems","_currentCoordinateSearchType","_coordinateSearchUnits","_initCoordinateSearchUnits","_currentCoordinateSearchUnits","_coordinateSearchLngInput","_coordinateSearchLatInput","_marker","_markerStyle","_markerUrl","Markers","_displayMarker","_popupContent","_popupDiv","_initPopupDiv","_popupOverlay","_triggerHandler","geocodeResources","geocodeResourcesList","autocompleteResources","autocompleteResourcesList","SearchEngineUtils","advancedSearchFiltersCustom","projectionSystemsByDefault","sys","_setSystem","projectionUnitsByDefault","Geographical","Metric","closer","onclick","picto","onAutoCompleteInputClick","buttonsContainer","firstLineWrapper","radioContainer","radioElements","_this$_createRadioEle2","_slicedToArray","advancedShow","advancedPanel","advancedPanelDiv","advancedHeader","advancedForm","advancedFormFilters","_setFilter","advancedFormInput","geolocateShow","searchByCoordinateShow","coordinatePanel","coordinatePanelDiv","coordinateHeader","coordinateForm","_containerSystems","labelSystems","_containerUnits","labelUnits","_containerCoordinateLng","coordinateLng","coordinateInputLng","_containerCoordinateLat","coordinateLat","coordinateInputLat","submit","autocompleteList","containerResultsLocation","containerResultsSuggest","geocodeDiv","geocodeList","codeFound","lstAttributs","divTable","divFilter","childElementCount","_displaySuggestedLocation","suggests","bOnFailure","_clearGeocodedLocation","getView","setCenter","setZoom","removeOverlay","markerDiv","_onResultMarkerSelect","positioning","stopEvent","addOverlay","getZoom","information","popupContent","getPosition","system","olProjGet","Interactions","opened","updatePosition","_this3","geolocation","getCurrentPosition","viewProj","coordinates_4326","longitude","latitude","olProjTransform","_setMarker","_setPosition","markerInfo","_getCoordinateSearchDMS","selectedIndex","inputSearchTextContainer","_clearSuggestedLocation","_triggerGeocode","_triggerDelay","_maximumEntries","maximumEntries","_prettifyResults","_requestAutoComplete","_locationsToBeDisplayed","ilocation","_getGeocodeCoordinatesFromFullText","_prettifyAutocompleteResults","_fillAutoCompletedLocationListContainer","_requestGeocoding","_hideSuggestedLocation","_setLabel","mapProj","_getZoom","addLayer","_fillGeocodedLocationListContainer","_location","_filterOptions","dep","department","insee","absorbedCity","_updateCoordinateSearchElements","lbl","autocompleteResults","autocompleteResult","SearchEngineDOM","Widget"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"GpfExtOlSearchEngine.js","mappings":"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CACJ,EACA,IACA,IACA,GAEJ,SAAY,CACR,EACA,EACA,IACA,GAEJ,SAAY,CACR,EACA,IACA,IACA,GAEJ,cAAiB,CACb,IACA,IACA,GACA,GAEJ,SAAY,CACR,IACA,IACA,IACA,GAEJ,UAAa,CACT,EACA,IACA,EACA,GAEJ,SAAY,CACR,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,YAAe,CACX,IACA,EACA,IACA,GAEJ,eAAkB,CACd,GACA,IACA,GACA,GAEJ,WAAc,CACV,IACA,IACA,EACA,GAEJ,WAAc,CACV,IACA,GACA,IACA,GAEJ,QAAW,CACP,IACA,EACA,EACA,GAEJ,WAAc,CACV,IACA,IACA,IACA,GAEJ,aAAgB,CACZ,IACA,IACA,IACA,GAEJ,cAAiB,CACb,GACA,GACA,IACA,GAEJ,cAAiB,CACb,GACA,GACA,GACA,GAEJ,cAAiB,CACb,GACA,GACA,GACA,GAEJ,cAAiB,CACb,EACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,EACA,IACA,GAEJ,SAAY,CACR,IACA,GACA,IACA,GAEJ,YAAe,CACX,EACA,IACA,IACA,GAEJ,QAAW,CACP,IACA,IACA,IACA,GAEJ,QAAW,CACP,IACA,IACA,IACA,GAEJ,WAAc,CACV,GACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,GACA,GACA,GAEJ,YAAe,CACX,IACA,IACA,IACA,GAEJ,YAAe,CACX,GACA,IACA,GACA,GAEJ,QAAW,CACP,IACA,EACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,IACA,IACA,GAEJ,KAAQ,CACJ,IACA,IACA,EACA,GAEJ,UAAa,CACT,IACA,IACA,GACA,GAEJ,KAAQ,CACJ,IACA,IACA,IACA,GAEJ,MAAS,CACL,EACA,IACA,EACA,GAEJ,YAAe,CACX,IACA,IACA,GACA,GAEJ,KAAQ,CACJ,IACA,IACA,IACA,GAEJ,SAAY,CACR,IACA,IACA,IACA,GAEJ,QAAW,CACP,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,GACA,GACA,GAEJ,OAAU,CACN,GACA,EACA,IACA,GAEJ,MAAS,CACL,IACA,IACA,IACA,GAEJ,MAAS,CACL,IACA,IACA,IACA,GAEJ,SAAY,CACR,IACA,IACA,IACA,GAEJ,cAAiB,CACb,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,EACA,GAEJ,aAAgB,CACZ,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,qBAAwB,CACpB,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,YAAe,CACX,IACA,IACA,IACA,GAEJ,cAAiB,CACb,GACA,IACA,IACA,GAEJ,aAAgB,CACZ,IACA,IACA,IACA,GAEJ,eAAkB,CACd,IACA,IACA,IACA,GAEJ,eAAkB,CACd,IACA,IACA,IACA,GAEJ,eAAkB,CACd,IACA,IACA,IACA,GAEJ,YAAe,CACX,IACA,IACA,IACA,GAEJ,KAAQ,CACJ,EACA,IACA,EACA,GAEJ,UAAa,CACT,GACA,IACA,GACA,GAEJ,MAAS,CACL,IACA,IACA,IACA,GAEJ,QAAW,CACP,IACA,EACA,IACA,GAEJ,OAAU,CACN,IACA,EACA,EACA,GAEJ,iBAAoB,CAChB,IACA,IACA,IACA,GAEJ,WAAc,CACV,EACA,EACA,IACA,GAEJ,aAAgB,CACZ,IACA,GACA,IACA,GAEJ,aAAgB,CACZ,IACA,IACA,IACA,GAEJ,eAAkB,CACd,GACA,IACA,IACA,GAEJ,gBAAmB,CACf,IACA,IACA,IACA,GAEJ,kBAAqB,CACjB,EACA,IACA,IACA,GAEJ,gBAAmB,CACf,GACA,IACA,IACA,GAEJ,gBAAmB,CACf,IACA,GACA,IACA,GAEJ,aAAgB,CACZ,GACA,GACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,SA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","sources":["webpack://geopf-extensions-openlayers/./node_modules/@xmldom/xmldom/lib/conventions.js","webpack://geopf-extensions-openlayers/./node_modules/@xmldom/xmldom/lib/dom-parser.js","webpack://geopf-extensions-openlayers/./node_modules/@xmldom/xmldom/lib/dom.js","webpack://geopf-extensions-openlayers/./node_modules/@xmldom/xmldom/lib/entities.js","webpack://geopf-extensions-openlayers/./node_modules/@xmldom/xmldom/lib/errors.js","webpack://geopf-extensions-openlayers/./node_modules/@xmldom/xmldom/lib/grammar.js","webpack://geopf-extensions-openlayers/./node_modules/@xmldom/xmldom/lib/index.js","webpack://geopf-extensions-openlayers/./node_modules/@xmldom/xmldom/lib/sax.js","webpack://geopf-extensions-openlayers/external assign \"ol.layer.VectorTile\"","webpack://geopf-extensions-openlayers/external assign \"ol.source.VectorTile\"","webpack://geopf-extensions-openlayers/external assign \"ol.source.TileJSON\"","webpack://geopf-extensions-openlayers/external assign \"ol.format.MVT\"","webpack://geopf-extensions-openlayers/external assign \"ol.Observable\"","webpack://geopf-extensions-openlayers/external assign \"ol.style.Circle\"","webpack://geopf-extensions-openlayers/external assign \"ol.style.Fill\"","webpack://geopf-extensions-openlayers/external assign \"ol.style.Icon\"","webpack://geopf-extensions-openlayers/./node_modules/ol/transform.js","webpack://geopf-extensions-openlayers/./node_modules/ol/extent.js","webpack://geopf-extensions-openlayers/./node_modules/ol/math.js","webpack://geopf-extensions-openlayers/./node_modules/ol/geom/flat/simplify.js","webpack://geopf-extensions-openlayers/./node_modules/ol/array.js","webpack://geopf-extensions-openlayers/./node_modules/ol/geom/flat/contains.js","webpack://geopf-extensions-openlayers/./node_modules/ol/geom/flat/interiorpoint.js","webpack://geopf-extensions-openlayers/./node_modules/ol/proj/Units.js","webpack://geopf-extensions-openlayers/./node_modules/ol/proj/Projection.js","webpack://geopf-extensions-openlayers/./node_modules/ol/proj/epsg3857.js","webpack://geopf-extensions-openlayers/./node_modules/ol/proj/epsg4326.js","webpack://geopf-extensions-openlayers/./node_modules/ol/proj/projections.js","webpack://geopf-extensions-openlayers/./node_modules/ol/proj/transforms.js","webpack://geopf-extensions-openlayers/./node_modules/ol/proj/utm.js","webpack://geopf-extensions-openlayers/./node_modules/ol/proj.js","webpack://geopf-extensions-openlayers/./node_modules/ol/geom/flat/orient.js","webpack://geopf-extensions-openlayers/./node_modules/ol/geom/flat/interpolate.js","webpack://geopf-extensions-openlayers/./node_modules/ol/render/Feature.js","webpack://geopf-extensions-openlayers/./node_modules/ol/geom/flat/center.js","webpack://geopf-extensions-openlayers/./node_modules/ol/geom/flat/transform.js","webpack://geopf-extensions-openlayers/./node_modules/ol/functions.js","webpack://geopf-extensions-openlayers/external assign \"ol.style.Stroke\"","webpack://geopf-extensions-openlayers/external assign \"ol.style.Style\"","webpack://geopf-extensions-openlayers/external assign \"ol.style.Text\"","webpack://geopf-extensions-openlayers/external assign \"ol.functions\"","webpack://geopf-extensions-openlayers/external assign \"ol.render.canvas\"","webpack://geopf-extensions-openlayers/external assign \"ol.TileState\"","webpack://geopf-extensions-openlayers/external assign \"ol.util\"","webpack://geopf-extensions-openlayers/external assign \"ol.layer.Image\"","webpack://geopf-extensions-openlayers/external assign \"ol.layer.Layer\"","webpack://geopf-extensions-openlayers/external assign \"ol.layer.Group\"","webpack://geopf-extensions-openlayers/external assign \"ol.Map\"","webpack://geopf-extensions-openlayers/external assign \"ol.source.Raster\"","webpack://geopf-extensions-openlayers/external assign \"ol.source.Source\"","webpack://geopf-extensions-openlayers/external assign \"ol.tilegrid.TileGrid\"","webpack://geopf-extensions-openlayers/external assign \"ol.View\"","webpack://geopf-extensions-openlayers/external assign \"ol.proj.Units\"","webpack://geopf-extensions-openlayers/external assign \"ol.events.Event\"","webpack://geopf-extensions-openlayers/./node_modules/ol-mapbox-style/dist/index.js","webpack://geopf-extensions-openlayers/external assign {\"commonjs\":\"ol\",\"commonjs2\":\"ol\",\"amd\":\"ol\",\"root\":\"ol\"}","webpack://geopf-extensions-openlayers/./src/packages/Layers/LayerMapBox.js","webpack://geopf-extensions-openlayers/./src/packages/Layers/LayerWMS.js","webpack://geopf-extensions-openlayers/./src/packages/Layers/LayerWMTS.js","webpack://geopf-extensions-openlayers/external assign \"ol.source.TileWMS\"","webpack://geopf-extensions-openlayers/./src/packages/Layers/SourceWMS.js","webpack://geopf-extensions-openlayers/external assign \"ol.tilegrid.WMTS\"","webpack://geopf-extensions-openlayers/./src/packages/Utils/LayerUtils.js","webpack://geopf-extensions-openlayers/./src/packages/Layers/SourceWMTS.js","webpack://geopf-extensions-openlayers/./src/packages/Services/Search.js","webpack://geopf-extensions-openlayers/external assign \"ol.source.WMTS\"","webpack://geopf-extensions-openlayers/./src/packages/Sources/WMTS.js","webpack://geopf-extensions-openlayers/./src/packages/Utils/Config.js","webpack://geopf-extensions-openlayers/./src/packages/Utils/Helper.js","webpack://geopf-extensions-openlayers/./src/packages/Utils/LoggerByDefault.js","webpack://geopf-extensions-openlayers/./node_modules/es6-promise/dist/es6-promise.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Exceptions/ErrorService.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Formats/WPS.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Formats/XML.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Gp.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Protocols/JSONP.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Protocols/Protocol.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Protocols/XHR.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Alti.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Formats/AltiResponseReader.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Request/AltiRequestFactory.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Request/AltiRequestREST.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Request/AltiRequestWPS.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Request/model/AltiElevationRequest.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Request/model/AltiProfilRequest.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Request/model/AltiRequest.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Response/AltiResponseFactory.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Response/model/AltiResponse.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Response/model/Elevation.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Alti/Response/model/Measure.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/AutoComplete/AutoComplete.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/AutoComplete/Response/AutoCompleteResponseFactory.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/AutoComplete/Response/model/AutoCompleteResponse.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/AutoComplete/Response/model/SuggestedLocation.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/CommonService.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Config/Config.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Config/ConfigInterface.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/DefaultUrlService.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Geocode/Formats/GeocodeResponseParser.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Geocode/Geocode.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Geocode/Request/GeocodeRequestFactory.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Geocode/Request/GeocodeRequestREST.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Geocode/Request/model/GeocodeParamREST.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Geocode/Response/GeocodeResponseFactory.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Geocode/Response/model/GeocodeResponse.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Geocode/Response/model/GeocodedLocation.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Geocode/ReverseGeocode.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/ProcessIsoCurve/ProcessIsoCurve.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/ProcessIsoCurve/Request/ProcessIsoCurveRequest.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/ProcessIsoCurve/Request/model/ProcessIsoCurveParam.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/ProcessIsoCurve/Response/ProcessIsoCurveResponseFactory.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/ProcessIsoCurve/Response/model/ProcessIsoCurveResponse.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Route/Request/RouteRequestFactory.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Route/Request/RouteRequestREST.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Route/Request/model/RouteParamREST.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Route/Response/RouteResponseFactory.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Route/Response/model/RouteInstruction.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Route/Response/model/RouteResponse.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Route/Route.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Services/Services.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Utils/Helper.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Utils/LoggerByDefault.js","webpack://geopf-extensions-openlayers/./node_modules/geoportal-access-lib/src/Utils/MessagesResources.js","webpack://geopf-extensions-openlayers/./node_modules/loglevel/lib/loglevel.js","webpack://geopf-extensions-openlayers/./node_modules/node-fetch/browser.js","webpack://geopf-extensions-openlayers/external assign \"ol.extent\"","webpack://geopf-extensions-openlayers/external assign \"ol.format.GeoJSON\"","webpack://geopf-extensions-openlayers/external assign \"ol.layer.Tile\"","webpack://geopf-extensions-openlayers/external assign \"ol.layer.Vector\"","webpack://geopf-extensions-openlayers/external assign \"ol.loadingstrategy\"","webpack://geopf-extensions-openlayers/external assign \"ol.proj\"","webpack://geopf-extensions-openlayers/external assign \"ol.source.Vector\"","webpack://geopf-extensions-openlayers/external assign \"ol.tilegrid\"","webpack://geopf-extensions-openlayers/webpack/bootstrap","webpack://geopf-extensions-openlayers/webpack/runtime/compat get default export","webpack://geopf-extensions-openlayers/webpack/runtime/define property getters","webpack://geopf-extensions-openlayers/webpack/runtime/global","webpack://geopf-extensions-openlayers/webpack/runtime/hasOwnProperty shorthand","webpack://geopf-extensions-openlayers/external assign \"ol.control.Control\"","webpack://geopf-extensions-openlayers/./src/packages/Controls/Utils/CheckDsfr.js","webpack://geopf-extensions-openlayers/./src/packages/Controls/Control.js","webpack://geopf-extensions-openlayers/./src/packages/Utils/PanelManager.js","webpack://geopf-extensions-openlayers/./src/packages/Controls/Widget.js","webpack://geopf-extensions-openlayers/external assign \"ol.Overlay\"","webpack://geopf-extensions-openlayers/./src/packages/Controls/Utils/Markers.js","webpack://geopf-extensions-openlayers/external assign \"ol.interaction\"","webpack://geopf-extensions-openlayers/./src/packages/Controls/Utils/Interactions.js","webpack://geopf-extensions-openlayers/./src/packages/Utils/SelectorID.js","webpack://geopf-extensions-openlayers/./src/packages/Utils/MathUtils.js","webpack://geopf-extensions-openlayers/./src/packages/Utils/SearchEngineUtils.js","webpack://geopf-extensions-openlayers/./src/packages/Utils/GeocodeUtils.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/constants/values.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/constants/PrimeMeridian.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/constants/units.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/match.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projString.js","webpack://geopf-extensions-openlayers/./node_modules/wkt-parser/parser.js","webpack://geopf-extensions-openlayers/./node_modules/wkt-parser/process.js","webpack://geopf-extensions-openlayers/./node_modules/wkt-parser/index.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/defs.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/global.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/parseCode.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/extend.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/msfnz.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/sign.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/adjust_lon.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/tsfnz.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/phi2z.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/longlat.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/merc.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/constants/Ellipsoid.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/constants/Datum.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/datum.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/nadgrid.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/Proj.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/deriveConstants.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/datumUtils.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/datum_transform.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/adjust_axis.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/toPoint.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/checkSanity.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/transform.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/core.js","webpack://geopf-extensions-openlayers/./node_modules/mgrs/mgrs.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/Point.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/pj_enfn.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/pj_mlfn.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/pj_inv_mlfn.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/tmerc.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/sinh.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/hypot.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/asinhy.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/log1py.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/gatg.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/clens_cmplx.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/cosh.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/etmerc.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/clens.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/utm.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/adjust_zone.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/srat.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/gauss.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/sterea.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/stere.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/somerc.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/omerc.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/lcc.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/krovak.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/mlfn.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/e0fn.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/e1fn.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/e2fn.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/e3fn.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/gN.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/adjust_lat.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/imlfn.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/cass.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/qsfnz.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/laea.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/asinz.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/aea.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/gnom.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/cea.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/common/iqsfnz.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/eqc.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/poly.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/nzmg.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/mill.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/sinu.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/moll.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/eqdc.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/vandg.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/aeqd.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/ortho.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/qsc.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/robin.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/geocent.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/tpers.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/geos.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/eqearth.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/projections/bonne.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/projs.js","webpack://geopf-extensions-openlayers/./node_modules/proj4/lib/index.js","webpack://geopf-extensions-openlayers/external assign \"ol.proj.transforms\"","webpack://geopf-extensions-openlayers/external assign \"ol.proj.Projection\"","webpack://geopf-extensions-openlayers/./src/packages/CRS/Proj4.js","webpack://geopf-extensions-openlayers/./src/packages/Utils/Register.js","webpack://geopf-extensions-openlayers/./src/packages/CRS/CRS.js","webpack://geopf-extensions-openlayers/./src/packages/Controls/SearchEngine/SearchEngineDOM.js","webpack://geopf-extensions-openlayers/./src/packages/Controls/SearchEngine/SearchEngine.js"],"sourcesContent":["'use strict';\n\n/**\n * Ponyfill for `Array.prototype.find` which is only available in ES6 runtimes.\n *\n * Works with anything that has a `length` property and index access properties,\n * including NodeList.\n *\n * @param {T[] | { length: number; [number]: T }} list\n * @param {function (item: T, index: number, list:T[]):boolean} predicate\n * @param {Partial>?} ac\n * Allows injecting a custom implementation in tests (`Array.prototype` by default).\n * @returns {T | undefined}\n * @template {unknown} T\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n * @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find\n */\nfunction find(list, predicate, ac) {\n\tif (ac === undefined) {\n\t\tac = Array.prototype;\n\t}\n\tif (list && typeof ac.find === 'function') {\n\t\treturn ac.find.call(list, predicate);\n\t}\n\tfor (var i = 0; i < list.length; i++) {\n\t\tif (hasOwn(list, i)) {\n\t\t\tvar item = list[i];\n\t\t\tif (predicate.call(undefined, item, i, list)) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * \"Shallow freezes\" an object to render it immutable.\n * Uses `Object.freeze` if available,\n * otherwise the immutability is only in the type.\n *\n * Is used to create \"enum like\" objects.\n *\n * If `Object.getOwnPropertyDescriptors` is available,\n * a new object with all properties of object but without any prototype is created and returned\n * after freezing it.\n *\n * @param {T} object\n * The object to freeze.\n * @param {Pick} [oc=Object]\n * `Object` by default,\n * allows to inject custom object constructor for tests.\n * @returns {Readonly}\n * @template {Object} T\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n * @prettierignore\n */\nfunction freeze(object, oc) {\n\tif (oc === undefined) {\n\t\toc = Object;\n\t}\n\tif (oc && typeof oc.getOwnPropertyDescriptors === 'function') {\n\t\tobject = oc.create(null, oc.getOwnPropertyDescriptors(object));\n\t}\n\treturn oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object;\n}\n\n/**\n * Implementation for `Object.hasOwn` but ES5 compatible.\n *\n * @param {any} object\n * @param {string | number} key\n * @returns {boolean}\n */\nfunction hasOwn(object, key) {\n\treturn Object.prototype.hasOwnProperty.call(object, key);\n}\n\n/**\n * Since xmldom can not rely on `Object.assign`,\n * it uses/provides a simplified version that is sufficient for its needs.\n *\n * @param {Object} target\n * @param {Object | null | undefined} source\n * @returns {Object}\n * The target with the merged/overridden properties.\n * @throws {TypeError}\n * If target is not an object.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign\n */\nfunction assign(target, source) {\n\tif (target === null || typeof target !== 'object') {\n\t\tthrow new TypeError('target is not an object');\n\t}\n\tfor (var key in source) {\n\t\tif (hasOwn(source, key)) {\n\t\t\ttarget[key] = source[key];\n\t\t}\n\t}\n\treturn target;\n}\n\n/**\n * A number of attributes are boolean attributes.\n * The presence of a boolean attribute on an element represents the `true` value,\n * and the absence of the attribute represents the `false` value.\n *\n * If the attribute is present, its value must either be the empty string, or a value that is\n * an ASCII case-insensitive match for the attribute's canonical name,\n * with no leading or trailing whitespace.\n *\n * Note: The values `\"true\"` and `\"false\"` are not allowed on boolean attributes.\n * To represent a `false` value, the attribute has to be omitted altogether.\n *\n * @see https://html.spec.whatwg.org/#boolean-attributes\n * @see https://html.spec.whatwg.org/#attributes-3\n */\nvar HTML_BOOLEAN_ATTRIBUTES = freeze({\n\tallowfullscreen: true,\n\tasync: true,\n\tautofocus: true,\n\tautoplay: true,\n\tchecked: true,\n\tcontrols: true,\n\tdefault: true,\n\tdefer: true,\n\tdisabled: true,\n\tformnovalidate: true,\n\thidden: true,\n\tismap: true,\n\titemscope: true,\n\tloop: true,\n\tmultiple: true,\n\tmuted: true,\n\tnomodule: true,\n\tnovalidate: true,\n\topen: true,\n\tplaysinline: true,\n\treadonly: true,\n\trequired: true,\n\treversed: true,\n\tselected: true,\n});\n\n/**\n * Check if `name` is matching one of the HTML boolean attribute names.\n * This method doesn't check if such attributes are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} name\n * @returns {boolean}\n * @see {@link HTML_BOOLEAN_ATTRIBUTES}\n * @see https://html.spec.whatwg.org/#boolean-attributes\n * @see https://html.spec.whatwg.org/#attributes-3\n */\nfunction isHTMLBooleanAttribute(name) {\n\treturn hasOwn(HTML_BOOLEAN_ATTRIBUTES, name.toLowerCase());\n}\n\n/**\n * Void elements only have a start tag; end tags must not be specified for void elements.\n * These elements should be written as self-closing like this: ``.\n * This should not be confused with optional tags that HTML allows to omit the end tag for\n * (like `li`, `tr` and others), which can have content after them,\n * so they can not be written as self-closing.\n * xmldom does not have any logic for optional end tags cases,\n * and will report them as a warning.\n * Content that would go into the unopened element,\n * will instead be added as a sibling text node.\n *\n * @type {Readonly<{\n * \tarea: boolean;\n * \tcol: boolean;\n * \timg: boolean;\n * \twbr: boolean;\n * \tlink: boolean;\n * \thr: boolean;\n * \tsource: boolean;\n * \tbr: boolean;\n * \tinput: boolean;\n * \tparam: boolean;\n * \tmeta: boolean;\n * \tembed: boolean;\n * \ttrack: boolean;\n * \tbase: boolean;\n * }>}\n * @see https://html.spec.whatwg.org/#void-elements\n * @see https://html.spec.whatwg.org/#optional-tags\n */\nvar HTML_VOID_ELEMENTS = freeze({\n\tarea: true,\n\tbase: true,\n\tbr: true,\n\tcol: true,\n\tembed: true,\n\thr: true,\n\timg: true,\n\tinput: true,\n\tlink: true,\n\tmeta: true,\n\tparam: true,\n\tsource: true,\n\ttrack: true,\n\twbr: true,\n});\n\n/**\n * Check if `tagName` is matching one of the HTML void element names.\n * This method doesn't check if such tags are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} tagName\n * @returns {boolean}\n * @see {@link HTML_VOID_ELEMENTS}\n * @see https://html.spec.whatwg.org/#void-elements\n */\nfunction isHTMLVoidElement(tagName) {\n\treturn hasOwn(HTML_VOID_ELEMENTS, tagName.toLowerCase());\n}\n\n/**\n * Tag names that are raw text elements according to HTML spec.\n * The value denotes whether they are escapable or not.\n *\n * @see {@link isHTMLEscapableRawTextElement}\n * @see {@link isHTMLRawTextElement}\n * @see https://html.spec.whatwg.org/#raw-text-elements\n * @see https://html.spec.whatwg.org/#escapable-raw-text-elements\n */\nvar HTML_RAW_TEXT_ELEMENTS = freeze({\n\tscript: false,\n\tstyle: false,\n\ttextarea: true,\n\ttitle: true,\n});\n\n/**\n * Check if `tagName` is matching one of the HTML raw text element names.\n * This method doesn't check if such tags are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} tagName\n * @returns {boolean}\n * @see {@link isHTMLEscapableRawTextElement}\n * @see {@link HTML_RAW_TEXT_ELEMENTS}\n * @see https://html.spec.whatwg.org/#raw-text-elements\n * @see https://html.spec.whatwg.org/#escapable-raw-text-elements\n */\nfunction isHTMLRawTextElement(tagName) {\n\tvar key = tagName.toLowerCase();\n\treturn hasOwn(HTML_RAW_TEXT_ELEMENTS, key) && !HTML_RAW_TEXT_ELEMENTS[key];\n}\n/**\n * Check if `tagName` is matching one of the HTML escapable raw text element names.\n * This method doesn't check if such tags are allowed in the context of the current\n * document/parsing.\n *\n * @param {string} tagName\n * @returns {boolean}\n * @see {@link isHTMLRawTextElement}\n * @see {@link HTML_RAW_TEXT_ELEMENTS}\n * @see https://html.spec.whatwg.org/#raw-text-elements\n * @see https://html.spec.whatwg.org/#escapable-raw-text-elements\n */\nfunction isHTMLEscapableRawTextElement(tagName) {\n\tvar key = tagName.toLowerCase();\n\treturn hasOwn(HTML_RAW_TEXT_ELEMENTS, key) && HTML_RAW_TEXT_ELEMENTS[key];\n}\n/**\n * Only returns true if `value` matches MIME_TYPE.HTML, which indicates an HTML document.\n *\n * @param {string} mimeType\n * @returns {mimeType is 'text/html'}\n * @see https://www.iana.org/assignments/media-types/text/html\n * @see https://en.wikipedia.org/wiki/HTML\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring\n */\nfunction isHTMLMimeType(mimeType) {\n\treturn mimeType === MIME_TYPE.HTML;\n}\n/**\n * For both the `text/html` and the `application/xhtml+xml` namespace the spec defines that the\n * HTML namespace is provided as the default.\n *\n * @param {string} mimeType\n * @returns {boolean}\n * @see https://dom.spec.whatwg.org/#dom-document-createelement\n * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument\n * @see https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument\n */\nfunction hasDefaultHTMLNamespace(mimeType) {\n\treturn isHTMLMimeType(mimeType) || mimeType === MIME_TYPE.XML_XHTML_APPLICATION;\n}\n\n/**\n * All mime types that are allowed as input to `DOMParser.parseFromString`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02\n * MDN\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype\n * WHATWG HTML Spec\n * @see {@link DOMParser.prototype.parseFromString}\n */\nvar MIME_TYPE = freeze({\n\t/**\n\t * `text/html`, the only mime type that triggers treating an XML document as HTML.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring\n\t * WHATWG HTML Spec\n\t */\n\tHTML: 'text/html',\n\n\t/**\n\t * `application/xml`, the standard mime type for XML documents.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType\n\t * registration\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_APPLICATION: 'application/xml',\n\n\t/**\n\t * `text/html`, an alias for `application/xml`.\n\t *\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303\n\t * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_TEXT: 'text/xml',\n\n\t/**\n\t * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,\n\t * but is parsed as an XML document.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType\n\t * registration\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec\n\t * @see https://en.wikipedia.org/wiki/XHTML Wikipedia\n\t */\n\tXML_XHTML_APPLICATION: 'application/xhtml+xml',\n\n\t/**\n\t * `image/svg+xml`,\n\t *\n\t * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration\n\t * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1\n\t * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia\n\t */\n\tXML_SVG_IMAGE: 'image/svg+xml',\n});\n/**\n * @typedef {'application/xhtml+xml' | 'application/xml' | 'image/svg+xml' | 'text/html' | 'text/xml'}\n * MimeType\n */\n/**\n * @type {MimeType[]}\n * @private\n * Basically `Object.values`, which is not available in ES5.\n */\nvar _MIME_TYPES = Object.keys(MIME_TYPE).map(function (key) {\n\treturn MIME_TYPE[key];\n});\n\n/**\n * Only returns true if `mimeType` is one of the allowed values for\n * `DOMParser.parseFromString`.\n *\n * @param {string} mimeType\n * @returns {mimeType is 'application/xhtml+xml' | 'application/xml' | 'image/svg+xml' | 'text/html' | 'text/xml'}\n *\n */\nfunction isValidMimeType(mimeType) {\n\treturn _MIME_TYPES.indexOf(mimeType) > -1;\n}\n/**\n * Namespaces that are used in this code base.\n *\n * @see http://www.w3.org/TR/REC-xml-names\n */\nvar NAMESPACE = freeze({\n\t/**\n\t * The XHTML namespace.\n\t *\n\t * @see http://www.w3.org/1999/xhtml\n\t */\n\tHTML: 'http://www.w3.org/1999/xhtml',\n\n\t/**\n\t * The SVG namespace.\n\t *\n\t * @see http://www.w3.org/2000/svg\n\t */\n\tSVG: 'http://www.w3.org/2000/svg',\n\n\t/**\n\t * The `xml:` namespace.\n\t *\n\t * @see http://www.w3.org/XML/1998/namespace\n\t */\n\tXML: 'http://www.w3.org/XML/1998/namespace',\n\n\t/**\n\t * The `xmlns:` namespace.\n\t *\n\t * @see https://www.w3.org/2000/xmlns/\n\t */\n\tXMLNS: 'http://www.w3.org/2000/xmlns/',\n});\n\nexports.assign = assign;\nexports.find = find;\nexports.freeze = freeze;\nexports.HTML_BOOLEAN_ATTRIBUTES = HTML_BOOLEAN_ATTRIBUTES;\nexports.HTML_RAW_TEXT_ELEMENTS = HTML_RAW_TEXT_ELEMENTS;\nexports.HTML_VOID_ELEMENTS = HTML_VOID_ELEMENTS;\nexports.hasDefaultHTMLNamespace = hasDefaultHTMLNamespace;\nexports.hasOwn = hasOwn;\nexports.isHTMLBooleanAttribute = isHTMLBooleanAttribute;\nexports.isHTMLRawTextElement = isHTMLRawTextElement;\nexports.isHTMLEscapableRawTextElement = isHTMLEscapableRawTextElement;\nexports.isHTMLMimeType = isHTMLMimeType;\nexports.isHTMLVoidElement = isHTMLVoidElement;\nexports.isValidMimeType = isValidMimeType;\nexports.MIME_TYPE = MIME_TYPE;\nexports.NAMESPACE = NAMESPACE;\n","'use strict';\n\nvar conventions = require('./conventions');\nvar dom = require('./dom');\nvar errors = require('./errors');\nvar entities = require('./entities');\nvar sax = require('./sax');\n\nvar DOMImplementation = dom.DOMImplementation;\n\nvar hasDefaultHTMLNamespace = conventions.hasDefaultHTMLNamespace;\nvar isHTMLMimeType = conventions.isHTMLMimeType;\nvar isValidMimeType = conventions.isValidMimeType;\nvar MIME_TYPE = conventions.MIME_TYPE;\nvar NAMESPACE = conventions.NAMESPACE;\nvar ParseError = errors.ParseError;\n\nvar XMLReader = sax.XMLReader;\n\n/**\n * Normalizes line ending according to :\n *\n * > XML parsed entities are often stored in computer files which,\n * > for editing convenience, are organized into lines.\n * > These lines are typically separated by some combination\n * > of the characters CARRIAGE RETURN (#xD) and LINE FEED (#xA).\n * >\n * > To simplify the tasks of applications, the XML processor must behave\n * > as if it normalized all line breaks in external parsed entities (including the document entity)\n * > on input, before parsing, by translating all of the following to a single #xA character:\n * >\n * > 1. the two-character sequence #xD #xA,\n * > 2. the two-character sequence #xD #x85,\n * > 3. the single character #x85,\n * > 4. the single character #x2028,\n * > 5. any #xD character that is not immediately followed by #xA or #x85.\n *\n * @param {string} input\n * @returns {string}\n * @prettierignore\n */\nfunction normalizeLineEndings(input) {\n\treturn input.replace(/\\r[\\n\\u0085]/g, '\\n').replace(/[\\r\\u0085\\u2028]/g, '\\n');\n}\n\n/**\n * @typedef Locator\n * @property {number} [columnNumber]\n * @property {number} [lineNumber]\n */\n\n/**\n * @typedef DOMParserOptions\n * @property {typeof assign} [assign]\n * The method to use instead of `conventions.assign`, which is used to copy values from\n * `options` before they are used for parsing.\n * @property {typeof DOMHandler} [domHandler]\n * For internal testing: The class for creating an instance for handling events from the SAX\n * parser.\n * *****Warning: By configuring a faulty implementation, the specified behavior can completely\n * be broken.*****.\n * @property {Function} [errorHandler]\n * DEPRECATED! use `onError` instead.\n * @property {function(level:ErrorLevel, message:string, context: DOMHandler):void}\n * [onError]\n * A function that is invoked for every error that occurs during parsing.\n *\n * If it is not provided, all errors are reported to `console.error`\n * and only `fatalError`s are thrown as a `ParseError`,\n * which prevents any further processing.\n * If the provided method throws, a `ParserError` is thrown,\n * which prevents any further processing.\n *\n * Be aware that many `warning`s are considered an error that prevents further processing in\n * most implementations.\n * @property {boolean} [locator=true]\n * Configures if the nodes created during parsing will have a `lineNumber` and a `columnNumber`\n * attribute describing their location in the XML string.\n * Default is true.\n * @property {(string) => string} [normalizeLineEndings]\n * used to replace line endings before parsing, defaults to `normalizeLineEndings`\n * @property {Object} [xmlns]\n * The XML namespaces that should be assumed when parsing.\n * The default namespace can be provided by the key that is the empty string.\n * When the `mimeType` for HTML, XHTML or SVG are passed to `parseFromString`,\n * the default namespace that will be used,\n * will be overridden according to the specification.\n * @see {@link normalizeLineEndings}\n */\n\n/**\n * The DOMParser interface provides the ability to parse XML or HTML source code from a string\n * into a DOM `Document`.\n *\n * ***xmldom is different from the spec in that it allows an `options` parameter,\n * to control the behavior***.\n *\n * @class\n * @param {DOMParserOptions} [options]\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization\n */\nfunction DOMParser(options) {\n\toptions = options || { locator: true };\n\n\t/**\n\t * The method to use instead of `conventions.assign`, which is used to copy values from\n\t * `options`\n\t * before they are used for parsing.\n\t *\n\t * @type {conventions.assign}\n\t * @private\n\t * @see {@link conventions.assign}\n\t * @readonly\n\t */\n\tthis.assign = options.assign || conventions.assign;\n\n\t/**\n\t * For internal testing: The class for creating an instance for handling events from the SAX\n\t * parser.\n\t * *****Warning: By configuring a faulty implementation, the specified behavior can completely\n\t * be broken*****.\n\t *\n\t * @type {typeof DOMHandler}\n\t * @private\n\t * @readonly\n\t */\n\tthis.domHandler = options.domHandler || DOMHandler;\n\n\t/**\n\t * A function that is invoked for every error that occurs during parsing.\n\t *\n\t * If it is not provided, all errors are reported to `console.error`\n\t * and only `fatalError`s are thrown as a `ParseError`,\n\t * which prevents any further processing.\n\t * If the provided method throws, a `ParserError` is thrown,\n\t * which prevents any further processing.\n\t *\n\t * Be aware that many `warning`s are considered an error that prevents further processing in\n\t * most implementations.\n\t *\n\t * @type {function(level:ErrorLevel, message:string, context: DOMHandler):void}\n\t * @see {@link onErrorStopParsing}\n\t * @see {@link onWarningStopParsing}\n\t */\n\tthis.onError = options.onError || options.errorHandler;\n\tif (options.errorHandler && typeof options.errorHandler !== 'function') {\n\t\tthrow new TypeError('errorHandler object is no longer supported, switch to onError!');\n\t} else if (options.errorHandler) {\n\t\toptions.errorHandler('warning', 'The `errorHandler` option has been deprecated, use `onError` instead!', this);\n\t}\n\n\t/**\n\t * used to replace line endings before parsing, defaults to `normalizeLineEndings`\n\t *\n\t * @type {(string) => string}\n\t * @readonly\n\t */\n\tthis.normalizeLineEndings = options.normalizeLineEndings || normalizeLineEndings;\n\n\t/**\n\t * Configures if the nodes created during parsing will have a `lineNumber` and a\n\t * `columnNumber`\n\t * attribute describing their location in the XML string.\n\t * Default is true.\n\t *\n\t * @type {boolean}\n\t * @readonly\n\t */\n\tthis.locator = !!options.locator;\n\n\t/**\n\t * The default namespace can be provided by the key that is the empty string.\n\t * When the `mimeType` for HTML, XHTML or SVG are passed to `parseFromString`,\n\t * the default namespace that will be used,\n\t * will be overridden according to the specification.\n\t *\n\t * @type {Readonly}\n\t * @readonly\n\t */\n\tthis.xmlns = this.assign(Object.create(null), options.xmlns);\n}\n\n/**\n * Parses `source` using the options in the way configured by the `DOMParserOptions` of `this`\n * `DOMParser`. If `mimeType` is `text/html` an HTML `Document` is created,\n * otherwise an XML `Document` is created.\n *\n * __It behaves different from the description in the living standard__:\n * - Uses the `options` passed to the `DOMParser` constructor to modify the behavior.\n * - Any unexpected input is reported to `onError` with either a `warning`,\n * `error` or `fatalError` level.\n * - Any `fatalError` throws a `ParseError` which prevents further processing.\n * - Any error thrown by `onError` is converted to a `ParseError` which prevents further\n * processing - If no `Document` was created during parsing it is reported as a `fatalError`.\n * *****Warning: By configuring a faulty DOMHandler implementation,\n * the specified behavior can completely be broken*****.\n *\n * @param {string} source\n * The XML mime type only allows string input!\n * @param {string} [mimeType='application/xml']\n * the mimeType or contentType of the document to be created determines the `type` of document\n * created (XML or HTML)\n * @returns {Document}\n * The `Document` node.\n * @throws {ParseError}\n * for any `fatalError` or anything that is thrown by `onError`\n * @throws {TypeError}\n * for any invalid `mimeType`\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString\n * @see https://html.spec.whatwg.org/#dom-domparser-parsefromstring-dev\n */\nDOMParser.prototype.parseFromString = function (source, mimeType) {\n\tif (!isValidMimeType(mimeType)) {\n\t\tthrow new TypeError('DOMParser.parseFromString: the provided mimeType \"' + mimeType + '\" is not valid.');\n\t}\n\tvar defaultNSMap = this.assign(Object.create(null), this.xmlns);\n\tvar entityMap = entities.XML_ENTITIES;\n\tvar defaultNamespace = defaultNSMap[''] || null;\n\tif (hasDefaultHTMLNamespace(mimeType)) {\n\t\tentityMap = entities.HTML_ENTITIES;\n\t\tdefaultNamespace = NAMESPACE.HTML;\n\t} else if (mimeType === MIME_TYPE.XML_SVG_IMAGE) {\n\t\tdefaultNamespace = NAMESPACE.SVG;\n\t}\n\tdefaultNSMap[''] = defaultNamespace;\n\tdefaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML;\n\n\tvar domBuilder = new this.domHandler({\n\t\tmimeType: mimeType,\n\t\tdefaultNamespace: defaultNamespace,\n\t\tonError: this.onError,\n\t});\n\tvar locator = this.locator ? {} : undefined;\n\tif (this.locator) {\n\t\tdomBuilder.setDocumentLocator(locator);\n\t}\n\n\tvar sax = new XMLReader();\n\tsax.errorHandler = domBuilder;\n\tsax.domBuilder = domBuilder;\n\tvar isXml = !conventions.isHTMLMimeType(mimeType);\n\tif (isXml && typeof source !== 'string') {\n\t\tsax.errorHandler.fatalError('source is not a string');\n\t}\n\tsax.parse(this.normalizeLineEndings(String(source)), defaultNSMap, entityMap);\n\tif (!domBuilder.doc.documentElement) {\n\t\tsax.errorHandler.fatalError('missing root element');\n\t}\n\treturn domBuilder.doc;\n};\n\n/**\n * @typedef DOMHandlerOptions\n * @property {string} [mimeType=MIME_TYPE.XML_APPLICATION]\n * @property {string | null} [defaultNamespace=null]\n */\n/**\n * The class that is used to handle events from the SAX parser to create the related DOM\n * elements.\n *\n * Some methods are only implemented as an empty function,\n * since they are (at least currently) not relevant for xmldom.\n *\n * @class\n * @param {DOMHandlerOptions} [options]\n * @see http://www.saxproject.org/apidoc/org/xml/sax/ext/DefaultHandler2.html\n */\nfunction DOMHandler(options) {\n\tvar opt = options || {};\n\t/**\n\t * The mime type is used to determine if the DOM handler will create an XML or HTML document.\n\t * Only if it is set to `text/html` it will create an HTML document.\n\t * It defaults to MIME_TYPE.XML_APPLICATION.\n\t *\n\t * @type {string}\n\t * @see {@link MIME_TYPE}\n\t * @readonly\n\t */\n\tthis.mimeType = opt.mimeType || MIME_TYPE.XML_APPLICATION;\n\n\t/**\n\t * The namespace to use to create an XML document.\n\t * For the following reasons this is required:\n\t * - The SAX API for `startDocument` doesn't offer any way to pass a namespace,\n\t * since at that point there is no way for the parser to know what the default namespace from\n\t * the document will be.\n\t * - When creating using `DOMImplementation.createDocument` it is required to pass a\n\t * namespace,\n\t * to determine the correct `Document.contentType`, which should match `this.mimeType`.\n\t * - When parsing an XML document with the `application/xhtml+xml` mimeType,\n\t * the HTML namespace needs to be the default namespace.\n\t *\n\t * @type {string | null}\n\t * @private\n\t * @readonly\n\t */\n\tthis.defaultNamespace = opt.defaultNamespace || null;\n\n\t/**\n\t * @type {boolean}\n\t * @private\n\t */\n\tthis.cdata = false;\n\n\t/**\n\t * The last `Element` that was created by `startElement`.\n\t * `endElement` sets it to the `currentElement.parentNode`.\n\t *\n\t * Note: The sax parser currently sets it to white space text nodes between tags.\n\t *\n\t * @type {Element | Node | undefined}\n\t * @private\n\t */\n\tthis.currentElement = undefined;\n\n\t/**\n\t * The Document that is created as part of `startDocument`,\n\t * and returned by `DOMParser.parseFromString`.\n\t *\n\t * @type {Document | undefined}\n\t * @readonly\n\t */\n\tthis.doc = undefined;\n\n\t/**\n\t * The locator is stored as part of setDocumentLocator.\n\t * It is controlled and mutated by the SAX parser to store the current parsing position.\n\t * It is used by DOMHandler to set `columnNumber` and `lineNumber`\n\t * on the DOM nodes.\n\t *\n\t * @type {Readonly | undefined}\n\t * @private\n\t * @readonly (the\n\t * sax parser currently sometimes set's it)\n\t */\n\tthis.locator = undefined;\n\t/**\n\t * @type {function (level:ErrorLevel ,message:string, context:DOMHandler):void}\n\t * @readonly\n\t */\n\tthis.onError = opt.onError;\n}\n\nfunction position(locator, node) {\n\tnode.lineNumber = locator.lineNumber;\n\tnode.columnNumber = locator.columnNumber;\n}\n\nDOMHandler.prototype = {\n\t/**\n\t * Either creates an XML or an HTML document and stores it under `this.doc`.\n\t * If it is an XML document, `this.defaultNamespace` is used to create it,\n\t * and it will not contain any `childNodes`.\n\t * If it is an HTML document, it will be created without any `childNodes`.\n\t *\n\t * @see http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html\n\t */\n\tstartDocument: function () {\n\t\tvar impl = new DOMImplementation();\n\t\tthis.doc = isHTMLMimeType(this.mimeType) ? impl.createHTMLDocument(false) : impl.createDocument(this.defaultNamespace, '');\n\t},\n\tstartElement: function (namespaceURI, localName, qName, attrs) {\n\t\tvar doc = this.doc;\n\t\tvar el = doc.createElementNS(namespaceURI, qName || localName);\n\t\tvar len = attrs.length;\n\t\tappendElement(this, el);\n\t\tthis.currentElement = el;\n\n\t\tthis.locator && position(this.locator, el);\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tvar namespaceURI = attrs.getURI(i);\n\t\t\tvar value = attrs.getValue(i);\n\t\t\tvar qName = attrs.getQName(i);\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\n\t\t\tthis.locator && position(attrs.getLocator(i), attr);\n\t\t\tattr.value = attr.nodeValue = value;\n\t\t\tel.setAttributeNode(attr);\n\t\t}\n\t},\n\tendElement: function (namespaceURI, localName, qName) {\n\t\tthis.currentElement = this.currentElement.parentNode;\n\t},\n\tstartPrefixMapping: function (prefix, uri) {},\n\tendPrefixMapping: function (prefix) {},\n\tprocessingInstruction: function (target, data) {\n\t\tvar ins = this.doc.createProcessingInstruction(target, data);\n\t\tthis.locator && position(this.locator, ins);\n\t\tappendElement(this, ins);\n\t},\n\tignorableWhitespace: function (ch, start, length) {},\n\tcharacters: function (chars, start, length) {\n\t\tchars = _toString.apply(this, arguments);\n\t\t//console.log(chars)\n\t\tif (chars) {\n\t\t\tif (this.cdata) {\n\t\t\t\tvar charNode = this.doc.createCDATASection(chars);\n\t\t\t} else {\n\t\t\t\tvar charNode = this.doc.createTextNode(chars);\n\t\t\t}\n\t\t\tif (this.currentElement) {\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t} else if (/^\\s*$/.test(chars)) {\n\t\t\t\tthis.doc.appendChild(charNode);\n\t\t\t\t//process xml\n\t\t\t}\n\t\t\tthis.locator && position(this.locator, charNode);\n\t\t}\n\t},\n\tskippedEntity: function (name) {},\n\tendDocument: function () {\n\t\tthis.doc.normalize();\n\t},\n\t/**\n\t * Stores the locator to be able to set the `columnNumber` and `lineNumber`\n\t * on the created DOM nodes.\n\t *\n\t * @param {Locator} locator\n\t */\n\tsetDocumentLocator: function (locator) {\n\t\tif (locator) {\n\t\t\tlocator.lineNumber = 0;\n\t\t}\n\t\tthis.locator = locator;\n\t},\n\t//LexicalHandler\n\tcomment: function (chars, start, length) {\n\t\tchars = _toString.apply(this, arguments);\n\t\tvar comm = this.doc.createComment(chars);\n\t\tthis.locator && position(this.locator, comm);\n\t\tappendElement(this, comm);\n\t},\n\n\tstartCDATA: function () {\n\t\t//used in characters() methods\n\t\tthis.cdata = true;\n\t},\n\tendCDATA: function () {\n\t\tthis.cdata = false;\n\t},\n\n\tstartDTD: function (name, publicId, systemId, internalSubset) {\n\t\tvar impl = this.doc.implementation;\n\t\tif (impl && impl.createDocumentType) {\n\t\t\tvar dt = impl.createDocumentType(name, publicId, systemId, internalSubset);\n\t\t\tthis.locator && position(this.locator, dt);\n\t\t\tappendElement(this, dt);\n\t\t\tthis.doc.doctype = dt;\n\t\t}\n\t},\n\treportError: function (level, message) {\n\t\tif (typeof this.onError === 'function') {\n\t\t\ttry {\n\t\t\t\tthis.onError(level, message, this);\n\t\t\t} catch (e) {\n\t\t\t\tthrow new ParseError('Reporting ' + level + ' \"' + message + '\" caused ' + e, this.locator);\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.error('[xmldom ' + level + ']\\t' + message, _locator(this.locator));\n\t\t}\n\t},\n\t/**\n\t * @see http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html\n\t */\n\twarning: function (message) {\n\t\tthis.reportError('warning', message);\n\t},\n\terror: function (message) {\n\t\tthis.reportError('error', message);\n\t},\n\t/**\n\t * This function reports a fatal error and throws a ParseError.\n\t *\n\t * @param {string} message\n\t * - The message to be used for reporting and throwing the error.\n\t * @returns {never}\n\t * This function always throws an error and never returns a value.\n\t * @throws {ParseError}\n\t * Always throws a ParseError with the provided message.\n\t */\n\tfatalError: function (message) {\n\t\tthis.reportError('fatalError', message);\n\t\tthrow new ParseError(message, this.locator);\n\t},\n};\n\nfunction _locator(l) {\n\tif (l) {\n\t\treturn '\\n@#[line:' + l.lineNumber + ',col:' + l.columnNumber + ']';\n\t}\n}\n\nfunction _toString(chars, start, length) {\n\tif (typeof chars == 'string') {\n\t\treturn chars.substr(start, length);\n\t} else {\n\t\t//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\n\t\tif (chars.length >= start + length || start) {\n\t\t\treturn new java.lang.String(chars, start, length) + '';\n\t\t}\n\t\treturn chars;\n\t}\n}\n\n/*\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html\n * used method of org.xml.sax.ext.LexicalHandler:\n * #comment(chars, start, length)\n * #startCDATA()\n * #endCDATA()\n * #startDTD(name, publicId, systemId)\n *\n *\n * IGNORED method of org.xml.sax.ext.LexicalHandler:\n * #endDTD()\n * #startEntity(name)\n * #endEntity(name)\n *\n *\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html\n * IGNORED method of org.xml.sax.ext.DeclHandler\n * \t#attributeDecl(eName, aName, type, mode, value)\n * #elementDecl(name, model)\n * #externalEntityDecl(name, publicId, systemId)\n * #internalEntityDecl(name, value)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html\n * IGNORED method of org.xml.sax.EntityResolver2\n * #resolveEntity(String name,String publicId,String baseURI,String systemId)\n * #resolveEntity(publicId, systemId)\n * #getExternalSubset(name, baseURI)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html\n * IGNORED method of org.xml.sax.DTDHandler\n * #notationDecl(name, publicId, systemId) {};\n * #unparsedEntityDecl(name, publicId, systemId, notationName) {};\n */\n'endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl'.replace(\n\t/\\w+/g,\n\tfunction (key) {\n\t\tDOMHandler.prototype[key] = function () {\n\t\t\treturn null;\n\t\t};\n\t}\n);\n\n/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */\nfunction appendElement(handler, node) {\n\tif (!handler.currentElement) {\n\t\thandler.doc.appendChild(node);\n\t} else {\n\t\thandler.currentElement.appendChild(node);\n\t}\n}\n\n/**\n * A method that prevents any further parsing when an `error`\n * with level `error` is reported during parsing.\n *\n * @see {@link DOMParserOptions.onError}\n * @see {@link onWarningStopParsing}\n */\nfunction onErrorStopParsing(level) {\n\tif (level === 'error') throw 'onErrorStopParsing';\n}\n\n/**\n * A method that prevents any further parsing when any `error` is reported during parsing.\n *\n * @see {@link DOMParserOptions.onError}\n * @see {@link onErrorStopParsing}\n */\nfunction onWarningStopParsing() {\n\tthrow 'onWarningStopParsing';\n}\n\nexports.__DOMHandler = DOMHandler;\nexports.DOMParser = DOMParser;\nexports.normalizeLineEndings = normalizeLineEndings;\nexports.onErrorStopParsing = onErrorStopParsing;\nexports.onWarningStopParsing = onWarningStopParsing;\n","'use strict';\n\nvar conventions = require('./conventions');\nvar find = conventions.find;\nvar hasDefaultHTMLNamespace = conventions.hasDefaultHTMLNamespace;\nvar hasOwn = conventions.hasOwn;\nvar isHTMLMimeType = conventions.isHTMLMimeType;\nvar isHTMLRawTextElement = conventions.isHTMLRawTextElement;\nvar isHTMLVoidElement = conventions.isHTMLVoidElement;\nvar MIME_TYPE = conventions.MIME_TYPE;\nvar NAMESPACE = conventions.NAMESPACE;\n\n/**\n * Private DOM Constructor symbol\n *\n * Internal symbol used for construction of all classes whose constructors should be private.\n * Currently used for checks in `Node`, `Document`, `Element`, `Attr`, `CharacterData`, `Text`, `Comment`,\n * `CDATASection`, `DocumentType`, `Notation`, `Entity`, `EntityReference`, `DocumentFragment`, `ProcessingInstruction`\n * so the constructor can't be used from outside the module.\n */\nvar PDC = Symbol();\n\nvar errors = require('./errors');\nvar DOMException = errors.DOMException;\nvar DOMExceptionName = errors.DOMExceptionName;\n\nvar g = require('./grammar');\n\n/**\n * Checks if the given symbol equals the Private DOM Constructor symbol (PDC)\n * and throws an Illegal constructor exception when the symbols don't match.\n * This ensures that the constructor remains private and can't be used outside this module.\n */\nfunction checkSymbol(symbol) {\n\tif (symbol !== PDC) {\n\t\tthrow new TypeError('Illegal constructor');\n\t}\n}\n\n/**\n * A prerequisite for `[].filter`, to drop elements that are empty.\n *\n * @param {string} input\n * The string to be checked.\n * @returns {boolean}\n * Returns `true` if the input string is not empty, `false` otherwise.\n */\nfunction notEmptyString(input) {\n\treturn input !== '';\n}\n/**\n * Splits a string on ASCII whitespace characters (U+0009 TAB, U+000A LF, U+000C FF, U+000D CR,\n * U+0020 SPACE).\n * It follows the definition from the infra specification from WHATWG.\n *\n * @param {string} input\n * The string to be split.\n * @returns {string[]}\n * An array of the split strings. The array can be empty if the input string is empty or only\n * contains whitespace characters.\n * @see {@link https://infra.spec.whatwg.org/#split-on-ascii-whitespace}\n * @see {@link https://infra.spec.whatwg.org/#ascii-whitespace}\n */\nfunction splitOnASCIIWhitespace(input) {\n\t// U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE\n\treturn input ? input.split(/[\\t\\n\\f\\r ]+/).filter(notEmptyString) : [];\n}\n\n/**\n * Adds element as a key to current if it is not already present.\n *\n * @param {Record} current\n * The current record object to which the element will be added as a key.\n * The object's keys are string types and values are either boolean or undefined.\n * @param {string} element\n * The string to be added as a key to the current record.\n * @returns {Record}\n * The updated record object after the addition of the new element.\n */\nfunction orderedSetReducer(current, element) {\n\tif (!hasOwn(current, element)) {\n\t\tcurrent[element] = true;\n\t}\n\treturn current;\n}\n\n/**\n * Converts a string into an ordered set by splitting the input on ASCII whitespace and\n * ensuring uniqueness of elements.\n * This follows the definition of an ordered set from the infra specification by WHATWG.\n *\n * @param {string} input\n * The input string to be transformed into an ordered set.\n * @returns {string[]}\n * An array of unique strings obtained from the input, preserving the original order.\n * The array can be empty if the input string is empty or only contains whitespace characters.\n * @see {@link https://infra.spec.whatwg.org/#ordered-set}\n */\nfunction toOrderedSet(input) {\n\tif (!input) return [];\n\tvar list = splitOnASCIIWhitespace(input);\n\treturn Object.keys(list.reduce(orderedSetReducer, {}));\n}\n\n/**\n * Uses `list.indexOf` to implement a function that behaves like `Array.prototype.includes`.\n * This function is used in environments where `Array.prototype.includes` may not be available.\n *\n * @param {any[]} list\n * The array in which to search for the element.\n * @returns {function(any): boolean}\n * A function that accepts an element and returns a boolean indicating whether the element is\n * included in the provided list.\n */\nfunction arrayIncludes(list) {\n\treturn function (element) {\n\t\treturn list && list.indexOf(element) !== -1;\n\t};\n}\n\n/**\n * Validates a qualified name based on the criteria provided in the DOM specification by\n * WHATWG.\n *\n * @param {string} qualifiedName\n * The qualified name to be validated.\n * @throws {DOMException}\n * With code {@link DOMException.INVALID_CHARACTER_ERR} if the qualified name contains an\n * invalid character.\n * @see {@link https://dom.spec.whatwg.org/#validate}\n */\nfunction validateQualifiedName(qualifiedName) {\n\tif (!g.QName_exact.test(qualifiedName)) {\n\t\tthrow new DOMException(DOMException.INVALID_CHARACTER_ERR, 'invalid character in qualified name \"' + qualifiedName + '\"');\n\t}\n}\n\n/**\n * Validates a qualified name and the namespace associated with it,\n * based on the criteria provided in the DOM specification by WHATWG.\n *\n * @param {string | null} namespace\n * The namespace to be validated. It can be a string or null.\n * @param {string} qualifiedName\n * The qualified name to be validated.\n * @returns {[namespace: string | null, prefix: string | null, localName: string]}\n * Returns a tuple with the namespace,\n * prefix and local name of the qualified name.\n * @throws {DOMException}\n * Throws a DOMException if the qualified name or the namespace is not valid.\n * @see {@link https://dom.spec.whatwg.org/#validate-and-extract}\n */\nfunction validateAndExtract(namespace, qualifiedName) {\n\tvalidateQualifiedName(qualifiedName);\n\tnamespace = namespace || null;\n\t/**\n\t * @type {string | null}\n\t */\n\tvar prefix = null;\n\tvar localName = qualifiedName;\n\tif (qualifiedName.indexOf(':') >= 0) {\n\t\tvar splitResult = qualifiedName.split(':');\n\t\tprefix = splitResult[0];\n\t\tlocalName = splitResult[1];\n\t}\n\tif (prefix !== null && namespace === null) {\n\t\tthrow new DOMException(DOMException.NAMESPACE_ERR, 'prefix is non-null and namespace is null');\n\t}\n\tif (prefix === 'xml' && namespace !== conventions.NAMESPACE.XML) {\n\t\tthrow new DOMException(DOMException.NAMESPACE_ERR, 'prefix is \"xml\" and namespace is not the XML namespace');\n\t}\n\tif ((prefix === 'xmlns' || qualifiedName === 'xmlns') && namespace !== conventions.NAMESPACE.XMLNS) {\n\t\tthrow new DOMException(\n\t\t\tDOMException.NAMESPACE_ERR,\n\t\t\t'either qualifiedName or prefix is \"xmlns\" and namespace is not the XMLNS namespace'\n\t\t);\n\t}\n\tif (namespace === conventions.NAMESPACE.XMLNS && prefix !== 'xmlns' && qualifiedName !== 'xmlns') {\n\t\tthrow new DOMException(\n\t\t\tDOMException.NAMESPACE_ERR,\n\t\t\t'namespace is the XMLNS namespace and neither qualifiedName nor prefix is \"xmlns\"'\n\t\t);\n\t}\n\treturn [namespace, prefix, localName];\n}\n\n/**\n * Copies properties from one object to another.\n * It only copies the object's own (not inherited) properties.\n *\n * @param {Object} src\n * The source object from which properties are copied.\n * @param {Object} dest\n * The destination object to which properties are copied.\n */\nfunction copy(src, dest) {\n\tfor (var p in src) {\n\t\tif (hasOwn(src, p)) {\n\t\t\tdest[p] = src[p];\n\t\t}\n\t}\n}\n\n/**\n * Extends a class with the properties and methods of a super class.\n * It uses a form of prototypal inheritance, and establishes the `constructor` property\n * correctly(?).\n *\n * It is not clear to the current maintainers if this implementation is making sense,\n * since it creates an intermediate prototype function,\n * which all properties of `Super` are copied onto using `_copy`.\n *\n * @param {Object} Class\n * The class that is to be extended.\n * @param {Object} Super\n * The super class from which properties and methods are inherited.\n * @private\n */\nfunction _extends(Class, Super) {\n\tvar pt = Class.prototype;\n\tif (!(pt instanceof Super)) {\n\t\tfunction t() {}\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt, t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif (pt.constructor != Class) {\n\t\tif (typeof Class != 'function') {\n\t\t\tconsole.error('unknown Class:' + Class);\n\t\t}\n\t\tpt.constructor = Class;\n\t}\n}\n\nvar NodeType = {};\nvar ELEMENT_NODE = (NodeType.ELEMENT_NODE = 1);\nvar ATTRIBUTE_NODE = (NodeType.ATTRIBUTE_NODE = 2);\nvar TEXT_NODE = (NodeType.TEXT_NODE = 3);\nvar CDATA_SECTION_NODE = (NodeType.CDATA_SECTION_NODE = 4);\nvar ENTITY_REFERENCE_NODE = (NodeType.ENTITY_REFERENCE_NODE = 5);\nvar ENTITY_NODE = (NodeType.ENTITY_NODE = 6);\nvar PROCESSING_INSTRUCTION_NODE = (NodeType.PROCESSING_INSTRUCTION_NODE = 7);\nvar COMMENT_NODE = (NodeType.COMMENT_NODE = 8);\nvar DOCUMENT_NODE = (NodeType.DOCUMENT_NODE = 9);\nvar DOCUMENT_TYPE_NODE = (NodeType.DOCUMENT_TYPE_NODE = 10);\nvar DOCUMENT_FRAGMENT_NODE = (NodeType.DOCUMENT_FRAGMENT_NODE = 11);\nvar NOTATION_NODE = (NodeType.NOTATION_NODE = 12);\n\nvar DocumentPosition = conventions.freeze({\n\tDOCUMENT_POSITION_DISCONNECTED: 1,\n\tDOCUMENT_POSITION_PRECEDING: 2,\n\tDOCUMENT_POSITION_FOLLOWING: 4,\n\tDOCUMENT_POSITION_CONTAINS: 8,\n\tDOCUMENT_POSITION_CONTAINED_BY: 16,\n\tDOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 32,\n});\n\n//helper functions for compareDocumentPosition\n/**\n * Constructs a parent chain for a node.\n *\n * @param {Node} node\n * The start node from which the parent chain will be constructed.\n * @returns {Node[]}\n * The array of nodes representing the parent chain from the root to the specified node.\n */\nfunction parentChain(node) {\n\tvar chain = [];\n\twhile (node.parentNode || node.ownerElement) {\n\t\tnode = node.parentNode || node.ownerElement;\n\t\tchain.unshift(node);\n\t}\n\treturn chain;\n}\n\n/**\n * Finds the common ancestor in two parent chains.\n *\n * @param {Node[]} a\n * The first parent chain.\n * @param {Node[]} b\n * The second parent chain.\n * @returns {Node}\n * The common ancestor node if it exists. If there is no common ancestor, the function will\n * return `null`.\n */\nfunction commonAncestor(a, b) {\n\tif (b.length < a.length) return commonAncestor(b, a);\n\tvar c = null;\n\tfor (var n in a) {\n\t\tif (a[n] !== b[n]) return c;\n\t\tc = a[n];\n\t}\n\treturn c;\n}\n\n/**\n * Assigns a unique identifier to a document to ensure consistency while comparing unrelated\n * nodes.\n *\n * @param {Document} doc\n * The document to which a unique identifier is to be assigned.\n * @returns {string}\n * The unique identifier of the document. If the document already had a unique identifier, the\n * function will return the existing one.\n */\nfunction docGUID(doc) {\n\tif (!doc.guid) doc.guid = Math.random();\n\treturn doc.guid;\n}\n//-- end of helper functions\n\n/**\n * The NodeList interface provides the abstraction of an ordered collection of nodes,\n * without defining or constraining how this collection is implemented.\n * NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n * You can also access the items of the NodeList with a `for...of` loop.\n *\n * @class NodeList\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * @constructs NodeList\n */\nfunction NodeList() {}\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1\n\t * inclusive.\n\t *\n\t * @type {number}\n\t */\n\tlength: 0,\n\t/**\n\t * Returns the item at `index`. If index is greater than or equal to the number of nodes in\n\t * the list, this returns null.\n\t *\n\t * @param index\n\t * Unsigned long Index into the collection.\n\t * @returns {Node | null}\n\t * The node at position `index` in the NodeList,\n\t * or null if that is not a valid index.\n\t */\n\titem: function (index) {\n\t\treturn index >= 0 && index < this.length ? this[index] : null;\n\t},\n\t/**\n\t * Returns a string representation of the NodeList.\n\t *\n\t * @param {unknown} nodeFilter\n\t * __A filter function? Not implemented according to the spec?__.\n\t * @returns {string}\n\t * A string representation of the NodeList.\n\t */\n\ttoString: function (nodeFilter) {\n\t\tfor (var buf = [], i = 0; i < this.length; i++) {\n\t\t\tserializeToString(this[i], buf, nodeFilter);\n\t\t}\n\t\treturn buf.join('');\n\t},\n\t/**\n\t * Filters the NodeList based on a predicate.\n\t *\n\t * @param {function(Node): boolean} predicate\n\t * - A predicate function to filter the NodeList.\n\t * @returns {Node[]}\n\t * An array of nodes that satisfy the predicate.\n\t * @private\n\t */\n\tfilter: function (predicate) {\n\t\treturn Array.prototype.filter.call(this, predicate);\n\t},\n\t/**\n\t * Returns the first index at which a given node can be found in the NodeList, or -1 if it is\n\t * not present.\n\t *\n\t * @param {Node} item\n\t * - The Node item to locate in the NodeList.\n\t * @returns {number}\n\t * The first index of the node in the NodeList; -1 if not found.\n\t * @private\n\t */\n\tindexOf: function (item) {\n\t\treturn Array.prototype.indexOf.call(this, item);\n\t},\n};\nNodeList.prototype[Symbol.iterator] = function () {\n\tvar me = this;\n\tvar index = 0;\n\n\treturn {\n\t\tnext: function () {\n\t\t\tif (index < me.length) {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: me[index++],\n\t\t\t\t\tdone: false,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tdone: true,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\treturn: function () {\n\t\t\treturn {\n\t\t\t\tdone: true,\n\t\t\t};\n\t\t},\n\t};\n};\n\n/**\n * Represents a live collection of nodes that is automatically updated when its associated\n * document changes.\n *\n * @class LiveNodeList\n * @param {Node} node\n * The associated node.\n * @param {function} refresh\n * The function to refresh the live node list.\n * @augments NodeList\n * @constructs LiveNodeList\n */\nfunction LiveNodeList(node, refresh) {\n\tthis._node = node;\n\tthis._refresh = refresh;\n\t_updateLiveList(this);\n}\n/**\n * Updates the live node list.\n *\n * @param {LiveNodeList} list\n * The live node list to update.\n * @private\n */\nfunction _updateLiveList(list) {\n\tvar inc = list._node._inc || list._node.ownerDocument._inc;\n\tif (list._inc !== inc) {\n\t\tvar ls = list._refresh(list._node);\n\t\t__set__(list, 'length', ls.length);\n\t\tif (!list.$$length || ls.length < list.$$length) {\n\t\t\tfor (var i = ls.length; i in list; i++) {\n\t\t\t\tif (hasOwn(list, i)) {\n\t\t\t\t\tdelete list[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcopy(ls, list);\n\t\tlist._inc = inc;\n\t}\n}\n/**\n * Returns the node at position `index` in the LiveNodeList, or null if that is not a valid\n * index.\n *\n * @param {number} i\n * Index into the collection.\n * @returns {Node | null}\n * The node at position `index` in the LiveNodeList, or null if that is not a valid index.\n */\nLiveNodeList.prototype.item = function (i) {\n\t_updateLiveList(this);\n\treturn this[i] || null;\n};\n\n_extends(LiveNodeList, NodeList);\n\n/**\n * Objects implementing the NamedNodeMap interface are used to represent collections of nodes\n * that can be accessed by name.\n * Note that NamedNodeMap does not inherit from NodeList;\n * NamedNodeMaps are not maintained in any particular order.\n * Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal\n * index,\n * but this is simply to allow convenient enumeration of the contents of a NamedNodeMap,\n * and does not imply that the DOM specifies an order to these Nodes.\n * NamedNodeMap objects in the DOM are live.\n * used for attributes or DocumentType entities\n *\n * This implementation only supports property indices, but does not support named properties,\n * as specified in the living standard.\n *\n * @class NamedNodeMap\n * @see https://dom.spec.whatwg.org/#interface-namednodemap\n * @see https://webidl.spec.whatwg.org/#dfn-supported-property-names\n * @constructs NamedNodeMap\n */\nfunction NamedNodeMap() {}\n/**\n * Returns the index of a node within the list.\n *\n * @param {Array} list\n * The list of nodes.\n * @param {Node} node\n * The node to find.\n * @returns {number}\n * The index of the node within the list, or -1 if not found.\n * @private\n */\nfunction _findNodeIndex(list, node) {\n\tvar i = 0;\n\twhile (i < list.length) {\n\t\tif (list[i] === node) {\n\t\t\treturn i;\n\t\t}\n\t\ti++;\n\t}\n}\n/**\n * Adds a new attribute to the list and updates the owner element of the attribute.\n *\n * @param {Element} el\n * The element which will become the owner of the new attribute.\n * @param {NamedNodeMap} list\n * The list to which the new attribute will be added.\n * @param {Attr} newAttr\n * The new attribute to be added.\n * @param {Attr} oldAttr\n * The old attribute to be replaced, or null if no attribute is to be replaced.\n * @returns {void}\n * @private\n */\nfunction _addNamedNode(el, list, newAttr, oldAttr) {\n\tif (oldAttr) {\n\t\tlist[_findNodeIndex(list, oldAttr)] = newAttr;\n\t} else {\n\t\tlist[list.length] = newAttr;\n\t\tlist.length++;\n\t}\n\tif (el) {\n\t\tnewAttr.ownerElement = el;\n\t\tvar doc = el.ownerDocument;\n\t\tif (doc) {\n\t\t\toldAttr && _onRemoveAttribute(doc, el, oldAttr);\n\t\t\t_onAddAttribute(doc, el, newAttr);\n\t\t}\n\t}\n}\n/**\n * Removes an attribute from the list and updates the owner element of the attribute.\n *\n * @param {Element} el\n * The element which is the current owner of the attribute.\n * @param {NamedNodeMap} list\n * The list from which the attribute will be removed.\n * @param {Attr} attr\n * The attribute to be removed.\n * @returns {void}\n * @private\n */\nfunction _removeNamedNode(el, list, attr) {\n\t//console.log('remove attr:'+attr)\n\tvar i = _findNodeIndex(list, attr);\n\tif (i >= 0) {\n\t\tvar lastIndex = list.length - 1;\n\t\twhile (i <= lastIndex) {\n\t\t\tlist[i] = list[++i];\n\t\t}\n\t\tlist.length = lastIndex;\n\t\tif (el) {\n\t\t\tvar doc = el.ownerDocument;\n\t\t\tif (doc) {\n\t\t\t\t_onRemoveAttribute(doc, el, attr);\n\t\t\t}\n\t\t\tattr.ownerElement = null;\n\t\t}\n\t}\n}\nNamedNodeMap.prototype = {\n\tlength: 0,\n\titem: NodeList.prototype.item,\n\n\t/**\n\t * Get an attribute by name. Note: Name is in lower case in case of HTML namespace and\n\t * document.\n\t *\n\t * @param {string} localName\n\t * The local name of the attribute.\n\t * @returns {Attr | null}\n\t * The attribute with the given local name, or null if no such attribute exists.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-get-by-name\n\t */\n\tgetNamedItem: function (localName) {\n\t\tif (this._ownerElement && this._ownerElement._isInHTMLDocumentAndNamespace()) {\n\t\t\tlocalName = localName.toLowerCase();\n\t\t}\n\t\tvar i = 0;\n\t\twhile (i < this.length) {\n\t\t\tvar attr = this[i];\n\t\t\tif (attr.nodeName === localName) {\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\treturn null;\n\t},\n\n\t/**\n\t * Set an attribute.\n\t *\n\t * @param {Attr} attr\n\t * The attribute to set.\n\t * @returns {Attr | null}\n\t * The old attribute with the same local name and namespace URI as the new one, or null if no\n\t * such attribute exists.\n\t * @throws {DOMException}\n\t * With code:\n\t * - {@link INUSE_ATTRIBUTE_ERR} - If the attribute is already an attribute of another\n\t * element.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-set\n\t */\n\tsetNamedItem: function (attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif (el && el !== this._ownerElement) {\n\t\t\tthrow new DOMException(DOMException.INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItemNS(attr.namespaceURI, attr.localName);\n\t\tif (oldAttr === attr) {\n\t\t\treturn attr;\n\t\t}\n\t\t_addNamedNode(this._ownerElement, this, attr, oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/**\n\t * Set an attribute, replacing an existing attribute with the same local name and namespace\n\t * URI if one exists.\n\t *\n\t * @param {Attr} attr\n\t * The attribute to set.\n\t * @returns {Attr | null}\n\t * The old attribute with the same local name and namespace URI as the new one, or null if no\n\t * such attribute exists.\n\t * @throws {DOMException}\n\t * Throws a DOMException with the name \"InUseAttributeError\" if the attribute is already an\n\t * attribute of another element.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-set\n\t */\n\tsetNamedItemNS: function (attr) {\n\t\treturn this.setNamedItem(attr);\n\t},\n\n\t/**\n\t * Removes an attribute specified by the local name.\n\t *\n\t * @param {string} localName\n\t * The local name of the attribute to be removed.\n\t * @returns {Attr}\n\t * The attribute node that was removed.\n\t * @throws {DOMException}\n\t * With code:\n\t * - {@link DOMException.NOT_FOUND_ERR} if no attribute with the given name is found.\n\t * @see https://dom.spec.whatwg.org/#dom-namednodemap-removenameditem\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-remove-by-name\n\t */\n\tremoveNamedItem: function (localName) {\n\t\tvar attr = this.getNamedItem(localName);\n\t\tif (!attr) {\n\t\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, localName);\n\t\t}\n\t\t_removeNamedNode(this._ownerElement, this, attr);\n\t\treturn attr;\n\t},\n\n\t/**\n\t * Removes an attribute specified by the namespace and local name.\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI of the attribute to be removed.\n\t * @param {string} localName\n\t * The local name of the attribute to be removed.\n\t * @returns {Attr}\n\t * The attribute node that was removed.\n\t * @throws {DOMException}\n\t * With code:\n\t * - {@link DOMException.NOT_FOUND_ERR} if no attribute with the given namespace URI and local\n\t * name is found.\n\t * @see https://dom.spec.whatwg.org/#dom-namednodemap-removenameditemns\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-remove-by-namespace\n\t */\n\tremoveNamedItemNS: function (namespaceURI, localName) {\n\t\tvar attr = this.getNamedItemNS(namespaceURI, localName);\n\t\tif (!attr) {\n\t\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, namespaceURI ? namespaceURI + ' : ' + localName : localName);\n\t\t}\n\t\t_removeNamedNode(this._ownerElement, this, attr);\n\t\treturn attr;\n\t},\n\n\t/**\n\t * Get an attribute by namespace and local name.\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI of the attribute.\n\t * @param {string} localName\n\t * The local name of the attribute.\n\t * @returns {Attr | null}\n\t * The attribute with the given namespace URI and local name, or null if no such attribute\n\t * exists.\n\t * @see https://dom.spec.whatwg.org/#concept-element-attributes-get-by-namespace\n\t */\n\tgetNamedItemNS: function (namespaceURI, localName) {\n\t\tif (!namespaceURI) {\n\t\t\tnamespaceURI = null;\n\t\t}\n\t\tvar i = 0;\n\t\twhile (i < this.length) {\n\t\t\tvar node = this[i];\n\t\t\tif (node.localName === localName && node.namespaceURI === namespaceURI) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\treturn null;\n\t},\n};\nNamedNodeMap.prototype[Symbol.iterator] = function () {\n\tvar me = this;\n\tvar index = 0;\n\n\treturn {\n\t\tnext: function () {\n\t\t\tif (index < me.length) {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: me[index++],\n\t\t\t\t\tdone: false,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tdone: true,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\treturn: function () {\n\t\t\treturn {\n\t\t\t\tdone: true,\n\t\t\t};\n\t\t},\n\t};\n};\n\n/**\n * The DOMImplementation interface provides a number of methods for performing operations that\n * are independent of any particular instance of the document object model.\n *\n * The DOMImplementation interface represents an object providing methods which are not\n * dependent on any particular document.\n * Such an object is returned by the `Document.implementation` property.\n *\n * **The individual methods describe the differences compared to the specs**.\n *\n * @class DOMImplementation\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN\n * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core\n * (Initial)\n * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core\n * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard\n * @constructs DOMImplementation\n */\nfunction DOMImplementation() {}\n\nDOMImplementation.prototype = {\n\t/**\n\t * Test if the DOM implementation implements a specific feature and version, as specified in\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMFeatures DOM Features}.\n\t *\n\t * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given\n\t * feature is supported. The different implementations fairly diverged in what kind of\n\t * features were reported. The latest version of the spec settled to force this method to\n\t * always return true, where the functionality was accurate and in use.\n\t *\n\t * @deprecated\n\t * It is deprecated and modern browsers return true in all cases.\n\t * @function DOMImplementation#hasFeature\n\t * @param {string} feature\n\t * The name of the feature to test.\n\t * @param {string} [version]\n\t * This is the version number of the feature to test.\n\t * @returns {boolean}\n\t * Always returns true.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN\n\t * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-5CED94D7 DOM Level 3 Core\n\t */\n\thasFeature: function (feature, version) {\n\t\treturn true;\n\t},\n\t/**\n\t * Creates a DOM Document object of the specified type with its document element. Note that\n\t * based on the {@link DocumentType}\n\t * given to create the document, the implementation may instantiate specialized\n\t * {@link Document} objects that support additional features than the \"Core\", such as \"HTML\"\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#DOM2HTML DOM Level 2 HTML}.\n\t * On the other hand, setting the {@link DocumentType} after the document was created makes\n\t * this very unlikely to happen. Alternatively, specialized {@link Document} creation methods,\n\t * such as createHTMLDocument\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#DOM2HTML DOM Level 2 HTML},\n\t * can be used to obtain specific types of {@link Document} objects.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - There is no interface/class `XMLDocument`, it returns a `Document`\n\t * instance (with it's `type` set to `'xml'`).\n\t * - `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t *\n\t * @function DOMImplementation.createDocument\n\t * @param {string | null} namespaceURI\n\t * The\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-namespaceURI namespace URI}\n\t * of the document element to create or null.\n\t * @param {string | null} qualifiedName\n\t * The\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-qualifiedname qualified name}\n\t * of the document element to be created or null.\n\t * @param {DocumentType | null} [doctype=null]\n\t * The type of document to be created or null. When doctype is not null, its\n\t * {@link Node#ownerDocument} attribute is set to the document being created. Default is\n\t * `null`\n\t * @returns {Document}\n\t * A new {@link Document} object with its document element. If the NamespaceURI,\n\t * qualifiedName, and doctype are null, the returned {@link Document} is empty with no\n\t * document element.\n\t * @throws {DOMException}\n\t * With code:\n\t *\n\t * - `INVALID_CHARACTER_ERR`: Raised if the specified qualified name is not an XML name\n\t * according to {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#XML XML 1.0}.\n\t * - `NAMESPACE_ERR`: Raised if the qualifiedName is malformed, if the qualifiedName has a\n\t * prefix and the namespaceURI is null, or if the qualifiedName is null and the namespaceURI\n\t * is different from null, or if the qualifiedName has a prefix that is \"xml\" and the\n\t * namespaceURI is different from \"{@link http://www.w3.org/XML/1998/namespace}\"\n\t * {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#Namespaces XML Namespaces},\n\t * or if the DOM implementation does not support the \"XML\" feature but a non-null namespace\n\t * URI was provided, since namespaces were defined by XML.\n\t * - `WRONG_DOCUMENT_ERR`: Raised if doctype has already been used with a different document\n\t * or was created from a different implementation.\n\t * - `NOT_SUPPORTED_ERR`: May be raised if the implementation does not support the feature\n\t * \"XML\" and the language exposed through the Document does not support XML Namespaces (such\n\t * as {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#HTML40 HTML 4.01}).\n\t * @since DOM Level 2.\n\t * @see {@link #createHTMLDocument}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument DOM Living Standard\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocument DOM\n\t * Level 3 Core\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM\n\t * Level 2 Core (initial)\n\t */\n\tcreateDocument: function (namespaceURI, qualifiedName, doctype) {\n\t\tvar contentType = MIME_TYPE.XML_APPLICATION;\n\t\tif (namespaceURI === NAMESPACE.HTML) {\n\t\t\tcontentType = MIME_TYPE.XML_XHTML_APPLICATION;\n\t\t} else if (namespaceURI === NAMESPACE.SVG) {\n\t\t\tcontentType = MIME_TYPE.XML_SVG_IMAGE;\n\t\t}\n\t\tvar doc = new Document(PDC, { contentType: contentType });\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype || null;\n\t\tif (doctype) {\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif (qualifiedName) {\n\t\t\tvar root = doc.createElementNS(namespaceURI, qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t/**\n\t * Creates an empty DocumentType node. Entity declarations and notations are not made\n\t * available. Entity reference expansions and default attribute additions do not occur.\n\t *\n\t * **This behavior is slightly different from the one in the specs**:\n\t * - `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t * - `publicId` and `systemId` contain the raw data including any possible quotes,\n\t * so they can always be serialized back to the original value\n\t * - `internalSubset` contains the raw string between `[` and `]` if present,\n\t * but is not parsed or validated in any form.\n\t *\n\t * @function DOMImplementation#createDocumentType\n\t * @param {string} qualifiedName\n\t * The {@link https://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-qualifiedname qualified\n\t * name} of the document type to be created.\n\t * @param {string} [publicId]\n\t * The external subset public identifier.\n\t * @param {string} [systemId]\n\t * The external subset system identifier.\n\t * @param {string} [internalSubset]\n\t * the internal subset or an empty string if it is not present\n\t * @returns {DocumentType}\n\t * A new {@link DocumentType} node with {@link Node#ownerDocument} set to null.\n\t * @throws {DOMException}\n\t * With code:\n\t *\n\t * - `INVALID_CHARACTER_ERR`: Raised if the specified qualified name is not an XML name\n\t * according to {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#XML XML 1.0}.\n\t * - `NAMESPACE_ERR`: Raised if the qualifiedName is malformed.\n\t * - `NOT_SUPPORTED_ERR`: May be raised if the implementation does not support the feature\n\t * \"XML\" and the language exposed through the Document does not support XML Namespaces (such\n\t * as {@link https://www.w3.org/TR/DOM-Level-3-Core/references.html#HTML40 HTML 4.01}).\n\t * @since DOM Level 2.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType\n\t * MDN\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living\n\t * Standard\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-3-Core-DOM-createDocType DOM\n\t * Level 3 Core\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM\n\t * Level 2 Core\n\t * @see https://github.com/xmldom/xmldom/blob/master/CHANGELOG.md#050\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/#core-ID-Core-DocType-internalSubset\n\t * @prettierignore\n\t */\n\tcreateDocumentType: function (qualifiedName, publicId, systemId, internalSubset) {\n\t\tvalidateQualifiedName(qualifiedName);\n\t\tvar node = new DocumentType(PDC);\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId || '';\n\t\tnode.systemId = systemId || '';\n\t\tnode.internalSubset = internalSubset || '';\n\t\tnode.childNodes = new NodeList();\n\n\t\treturn node;\n\t},\n\t/**\n\t * Returns an HTML document, that might already have a basic DOM structure.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - If the first argument is `false` no initial nodes are added (steps 3-7 in the specs are\n\t * omitted)\n\t * - `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t *\n\t * @param {string | false} [title]\n\t * A string containing the title to give the new HTML document.\n\t * @returns {Document}\n\t * The HTML document.\n\t * @since WHATWG Living Standard.\n\t * @see {@link #createDocument}\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument\n\t * @see https://dom.spec.whatwg.org/#html-document\n\t */\n\tcreateHTMLDocument: function (title) {\n\t\tvar doc = new Document(PDC, { contentType: MIME_TYPE.HTML });\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tif (title !== false) {\n\t\t\tdoc.doctype = this.createDocumentType('html');\n\t\t\tdoc.doctype.ownerDocument = doc;\n\t\t\tdoc.appendChild(doc.doctype);\n\t\t\tvar htmlNode = doc.createElement('html');\n\t\t\tdoc.appendChild(htmlNode);\n\t\t\tvar headNode = doc.createElement('head');\n\t\t\thtmlNode.appendChild(headNode);\n\t\t\tif (typeof title === 'string') {\n\t\t\t\tvar titleNode = doc.createElement('title');\n\t\t\t\ttitleNode.appendChild(doc.createTextNode(title));\n\t\t\t\theadNode.appendChild(titleNode);\n\t\t\t}\n\t\t\thtmlNode.appendChild(doc.createElement('body'));\n\t\t}\n\t\treturn doc;\n\t},\n};\n\n/**\n * The DOM Node interface is an abstract base class upon which many other DOM API objects are\n * based, thus letting those object types to be used similarly and often interchangeably. As an\n * abstract class, there is no such thing as a plain Node object. All objects that implement\n * Node functionality are based on one of its subclasses. Most notable are Document, Element,\n * and DocumentFragment.\n *\n * In addition, every kind of DOM node is represented by an interface based on Node. These\n * include Attr, CharacterData (which Text, Comment, CDATASection and ProcessingInstruction are\n * all based on), and DocumentType.\n *\n * In some cases, a particular feature of the base Node interface may not apply to one of its\n * child interfaces; in that case, the inheriting node may return null or throw an exception,\n * depending on circumstances. For example, attempting to add children to a node type that\n * cannot have children will throw an exception.\n *\n * **This behavior is slightly different from the in the specs**:\n * - unimplemented interfaces: `EventTarget`\n *\n * @class\n * @abstract\n * @param {Symbol} symbol\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n * @see https://dom.spec.whatwg.org/#node\n * @prettierignore\n */\nfunction Node(symbol) {\n\tcheckSymbol(symbol);\n}\n\nNode.prototype = {\n\t/**\n\t * The first child of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tfirstChild: null,\n\t/**\n\t * The last child of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tlastChild: null,\n\t/**\n\t * The previous sibling of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tpreviousSibling: null,\n\t/**\n\t * The next sibling of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tnextSibling: null,\n\t/**\n\t * The parent node of this node.\n\t *\n\t * @type {Node | null}\n\t */\n\tparentNode: null,\n\t/**\n\t * The parent element of this node.\n\t *\n\t * @type {Element | null}\n\t */\n\tget parentElement() {\n\t\treturn this.parentNode && this.parentNode.nodeType === this.ELEMENT_NODE ? this.parentNode : null;\n\t},\n\t/**\n\t * The child nodes of this node.\n\t *\n\t * @type {NodeList}\n\t */\n\tchildNodes: null,\n\t/**\n\t * The document object associated with this node.\n\t *\n\t * @type {Document | null}\n\t */\n\townerDocument: null,\n\t/**\n\t * The value of this node.\n\t *\n\t * @type {string | null}\n\t */\n\tnodeValue: null,\n\t/**\n\t * The namespace URI of this node.\n\t *\n\t * @type {string | null}\n\t */\n\tnamespaceURI: null,\n\t/**\n\t * The prefix of the namespace for this node.\n\t *\n\t * @type {string | null}\n\t */\n\tprefix: null,\n\t/**\n\t * The local part of the qualified name of this node.\n\t *\n\t * @type {string | null}\n\t */\n\tlocalName: null,\n\t/**\n\t * The baseURI is currently always `about:blank`,\n\t * since that's what happens when you create a document from scratch.\n\t *\n\t * @type {'about:blank'}\n\t */\n\tbaseURI: 'about:blank',\n\t/**\n\t * Is true if this node is part of a document.\n\t *\n\t * @type {boolean}\n\t */\n\tget isConnected() {\n\t\tvar rootNode = this.getRootNode();\n\t\treturn rootNode && rootNode.nodeType === rootNode.DOCUMENT_NODE;\n\t},\n\t/**\n\t * Checks whether `other` is an inclusive descendant of this node.\n\t *\n\t * @param {Node | null | undefined} other\n\t * The node to check.\n\t * @returns {boolean}\n\t * True if `other` is an inclusive descendant of this node; false otherwise.\n\t * @see https://dom.spec.whatwg.org/#dom-node-contains\n\t */\n\tcontains: function (other) {\n\t\tif (!other) return false;\n\t\tvar parent = other;\n\t\tdo {\n\t\t\tif (this === parent) return true;\n\t\t\tparent = other.parentNode;\n\t\t} while (parent);\n\t\treturn false;\n\t},\n\t/**\n\t * @typedef GetRootNodeOptions\n\t * @property {boolean} [composed=false]\n\t */\n\t/**\n\t * Searches for the root node of this node.\n\t *\n\t * **This behavior is slightly different from the in the specs**:\n\t * - ignores `options.composed`, since `ShadowRoot`s are unsupported, always returns root.\n\t *\n\t * @param {GetRootNodeOptions} [options]\n\t * @returns {Node}\n\t * Root node.\n\t * @see https://dom.spec.whatwg.org/#dom-node-getrootnode\n\t * @see https://dom.spec.whatwg.org/#concept-shadow-including-root\n\t */\n\tgetRootNode: function (options) {\n\t\tvar parent = this;\n\t\tdo {\n\t\t\tif (!parent.parentNode) {\n\t\t\t\treturn parent;\n\t\t\t}\n\t\t\tparent = parent.parentNode;\n\t\t} while (parent);\n\t},\n\t/**\n\t * Checks whether the given node is equal to this node.\n\t *\n\t * @param {Node} [otherNode]\n\t * @see https://dom.spec.whatwg.org/#concept-node-equals\n\t */\n\tisEqualNode: function (otherNode) {\n\t\tif (!otherNode) return false;\n\n\t\tif (this.nodeType !== otherNode.nodeType) return false;\n\n\t\tswitch (this.nodeType) {\n\t\t\tcase this.DOCUMENT_TYPE_NODE:\n\t\t\t\tif (this.name !== otherNode.name) return false;\n\t\t\t\tif (this.publicId !== otherNode.publicId) return false;\n\t\t\t\tif (this.systemId !== otherNode.systemId) return false;\n\t\t\t\tbreak;\n\t\t\tcase this.ELEMENT_NODE:\n\t\t\t\tif (this.namespaceURI !== otherNode.namespaceURI) return false;\n\t\t\t\tif (this.prefix !== otherNode.prefix) return false;\n\t\t\t\tif (this.localName !== otherNode.localName) return false;\n\t\t\t\tif (this.attributes.length !== otherNode.attributes.length) return false;\n\t\t\t\tfor (var i = 0; i < this.attributes.length; i++) {\n\t\t\t\t\tvar attr = this.attributes.item(i);\n\t\t\t\t\tif (!attr.isEqualNode(otherNode.getAttributeNodeNS(attr.namespaceURI, attr.localName))) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase this.ATTRIBUTE_NODE:\n\t\t\t\tif (this.namespaceURI !== otherNode.namespaceURI) return false;\n\t\t\t\tif (this.localName !== otherNode.localName) return false;\n\t\t\t\tif (this.value !== otherNode.value) return false;\n\n\t\t\t\tbreak;\n\t\t\tcase this.PROCESSING_INSTRUCTION_NODE:\n\t\t\t\tif (this.target !== otherNode.target || this.data !== otherNode.data) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase this.TEXT_NODE:\n\t\t\tcase this.COMMENT_NODE:\n\t\t\t\tif (this.data !== otherNode.data) return false;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (this.childNodes.length !== otherNode.childNodes.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (var i = 0; i < this.childNodes.length; i++) {\n\t\t\tif (!this.childNodes[i].isEqualNode(otherNode.childNodes[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t},\n\t/**\n\t * Checks whether or not the given node is this node.\n\t *\n\t * @param {Node} [otherNode]\n\t */\n\tisSameNode: function (otherNode) {\n\t\treturn this === otherNode;\n\t},\n\t/**\n\t * Inserts a node before a reference node as a child of this node.\n\t *\n\t * @param {Node} newChild\n\t * The new child node to be inserted.\n\t * @param {Node | null} refChild\n\t * The reference node before which newChild will be inserted.\n\t * @returns {Node}\n\t * The new child node successfully inserted.\n\t * @throws {DOMException}\n\t * Throws a DOMException if inserting the node would result in a DOM tree that is not\n\t * well-formed, or if `child` is provided but is not a child of `parent`.\n\t * See {@link _insertBefore} for more details.\n\t * @since Modified in DOM L2\n\t */\n\tinsertBefore: function (newChild, refChild) {\n\t\treturn _insertBefore(this, newChild, refChild);\n\t},\n\t/**\n\t * Replaces an old child node with a new child node within this node.\n\t *\n\t * @param {Node} newChild\n\t * The new node that is to replace the old node.\n\t * If it already exists in the DOM, it is removed from its original position.\n\t * @param {Node} oldChild\n\t * The existing child node to be replaced.\n\t * @returns {Node}\n\t * Returns the replaced child node.\n\t * @throws {DOMException}\n\t * Throws a DOMException if replacing the node would result in a DOM tree that is not\n\t * well-formed, or if `oldChild` is not a child of `this`.\n\t * This can also occur if the pre-replacement validity assertion fails.\n\t * See {@link _insertBefore}, {@link Node.removeChild}, and\n\t * {@link assertPreReplacementValidityInDocument} for more details.\n\t * @see https://dom.spec.whatwg.org/#concept-node-replace\n\t */\n\treplaceChild: function (newChild, oldChild) {\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\t/**\n\t * Removes an existing child node from this node.\n\t *\n\t * @param {Node} oldChild\n\t * The child node to be removed.\n\t * @returns {Node}\n\t * Returns the removed child node.\n\t * @throws {DOMException}\n\t * Throws a DOMException if `oldChild` is not a child of `this`.\n\t * See {@link _removeChild} for more details.\n\t */\n\tremoveChild: function (oldChild) {\n\t\treturn _removeChild(this, oldChild);\n\t},\n\t/**\n\t * Appends a child node to this node.\n\t *\n\t * @param {Node} newChild\n\t * The child node to be appended to this node.\n\t * If it already exists in the DOM, it is removed from its original position.\n\t * @returns {Node}\n\t * Returns the appended child node.\n\t * @throws {DOMException}\n\t * Throws a DOMException if appending the node would result in a DOM tree that is not\n\t * well-formed, or if `newChild` is not a valid Node.\n\t * See {@link insertBefore} for more details.\n\t */\n\tappendChild: function (newChild) {\n\t\treturn this.insertBefore(newChild, null);\n\t},\n\t/**\n\t * Determines whether this node has any child nodes.\n\t *\n\t * @returns {boolean}\n\t * Returns true if this node has any child nodes, and false otherwise.\n\t */\n\thasChildNodes: function () {\n\t\treturn this.firstChild != null;\n\t},\n\t/**\n\t * Creates a copy of the calling node.\n\t *\n\t * @param {boolean} deep\n\t * If true, the contents of the node are recursively copied.\n\t * If false, only the node itself (and its attributes, if it is an element) are copied.\n\t * @returns {Node}\n\t * Returns the newly created copy of the node.\n\t * @throws {DOMException}\n\t * May throw a DOMException if operations within {@link Element#setAttributeNode} or\n\t * {@link Node#appendChild} (which are potentially invoked in this method) do not meet their\n\t * specific constraints.\n\t * @see {@link cloneNode}\n\t */\n\tcloneNode: function (deep) {\n\t\treturn cloneNode(this.ownerDocument || this, this, deep);\n\t},\n\t/**\n\t * Puts the specified node and all of its subtree into a \"normalized\" form. In a normalized\n\t * subtree, no text nodes in the subtree are empty and there are no adjacent text nodes.\n\t *\n\t * Specifically, this method merges any adjacent text nodes (i.e., nodes for which `nodeType`\n\t * is `TEXT_NODE`) into a single node with the combined data. It also removes any empty text\n\t * nodes.\n\t *\n\t * This method operates recursively, so it also normalizes any and all descendent nodes within\n\t * the subtree.\n\t *\n\t * @throws {DOMException}\n\t * May throw a DOMException if operations within removeChild or appendData (which are\n\t * potentially invoked in this method) do not meet their specific constraints.\n\t * @since Modified in DOM Level 2\n\t * @see {@link Node.removeChild}\n\t * @see {@link CharacterData.appendData}\n\t */\n\tnormalize: function () {\n\t\tvar child = this.firstChild;\n\t\twhile (child) {\n\t\t\tvar next = child.nextSibling;\n\t\t\tif (next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE) {\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t} else {\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Checks whether the DOM implementation implements a specific feature and its version.\n\t *\n\t * @deprecated\n\t * Since `DOMImplementation.hasFeature` is deprecated and always returns true.\n\t * @param {string} feature\n\t * The package name of the feature to test. This is the same name that can be passed to the\n\t * method `hasFeature` on `DOMImplementation`.\n\t * @param {string} version\n\t * This is the version number of the package name to test.\n\t * @returns {boolean}\n\t * Returns true in all cases in the current implementation.\n\t * @since Introduced in DOM Level 2\n\t * @see {@link DOMImplementation.hasFeature}\n\t */\n\tisSupported: function (feature, version) {\n\t\treturn this.ownerDocument.implementation.hasFeature(feature, version);\n\t},\n\t/**\n\t * Look up the prefix associated to the given namespace URI, starting from this node.\n\t * **The default namespace declarations are ignored by this method.**\n\t * See Namespace Prefix Lookup for details on the algorithm used by this method.\n\t *\n\t * **This behavior is different from the in the specs**:\n\t * - no node type specific handling\n\t * - uses the internal attribute _nsMap for resolving namespaces that is updated when changing attributes\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI for which to find the associated prefix.\n\t * @returns {string | null}\n\t * The associated prefix, if found; otherwise, null.\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix\n\t * @see https://github.com/xmldom/xmldom/issues/322\n\t * @prettierignore\n\t */\n\tlookupPrefix: function (namespaceURI) {\n\t\tvar el = this;\n\t\twhile (el) {\n\t\t\tvar map = el._nsMap;\n\t\t\t//console.dir(map)\n\t\t\tif (map) {\n\t\t\t\tfor (var n in map) {\n\t\t\t\t\tif (hasOwn(map, n) && map[n] === namespaceURI) {\n\t\t\t\t\t\treturn n;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tel = el.nodeType == ATTRIBUTE_NODE ? el.ownerDocument : el.parentNode;\n\t\t}\n\t\treturn null;\n\t},\n\t/**\n\t * This function is used to look up the namespace URI associated with the given prefix,\n\t * starting from this node.\n\t *\n\t * **This behavior is different from the in the specs**:\n\t * - no node type specific handling\n\t * - uses the internal attribute _nsMap for resolving namespaces that is updated when changing attributes\n\t *\n\t * @param {string | null} prefix\n\t * The prefix for which to find the associated namespace URI.\n\t * @returns {string | null}\n\t * The associated namespace URI, if found; otherwise, null.\n\t * @since DOM Level 3\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupnamespaceuri\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI\n\t * @prettierignore\n\t */\n\tlookupNamespaceURI: function (prefix) {\n\t\tvar el = this;\n\t\twhile (el) {\n\t\t\tvar map = el._nsMap;\n\t\t\t//console.dir(map)\n\t\t\tif (map) {\n\t\t\t\tif (hasOwn(map, prefix)) {\n\t\t\t\t\treturn map[prefix];\n\t\t\t\t}\n\t\t\t}\n\t\t\tel = el.nodeType == ATTRIBUTE_NODE ? el.ownerDocument : el.parentNode;\n\t\t}\n\t\treturn null;\n\t},\n\t/**\n\t * Determines whether the given namespace URI is the default namespace.\n\t *\n\t * The function works by looking up the prefix associated with the given namespace URI. If no\n\t * prefix is found (i.e., the namespace URI is not registered in the namespace map of this\n\t * node or any of its ancestors), it returns `true`, implying the namespace URI is considered\n\t * the default.\n\t *\n\t * **This behavior is different from the in the specs**:\n\t * - no node type specific handling\n\t * - uses the internal attribute _nsMap for resolving namespaces that is updated when changing attributes\n\t *\n\t * @param {string | null} namespaceURI\n\t * The namespace URI to be checked.\n\t * @returns {boolean}\n\t * Returns true if the given namespace URI is the default namespace, false otherwise.\n\t * @since DOM Level 3\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace\n\t * @see https://dom.spec.whatwg.org/#dom-node-isdefaultnamespace\n\t * @prettierignore\n\t */\n\tisDefaultNamespace: function (namespaceURI) {\n\t\tvar prefix = this.lookupPrefix(namespaceURI);\n\t\treturn prefix == null;\n\t},\n\t/**\n\t * Compares the reference node with a node with regard to their position in the document and\n\t * according to the document order.\n\t *\n\t * @param {Node} other\n\t * The node to compare the reference node to.\n\t * @returns {number}\n\t * Returns how the node is positioned relatively to the reference node according to the\n\t * bitmask. 0 if reference node and given node are the same.\n\t * @since DOM Level 3\n\t * @see https://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#Node3-compare\n\t * @see https://dom.spec.whatwg.org/#dom-node-comparedocumentposition\n\t */\n\tcompareDocumentPosition: function (other) {\n\t\tif (this === other) return 0;\n\t\tvar node1 = other;\n\t\tvar node2 = this;\n\t\tvar attr1 = null;\n\t\tvar attr2 = null;\n\t\tif (node1 instanceof Attr) {\n\t\t\tattr1 = node1;\n\t\t\tnode1 = attr1.ownerElement;\n\t\t}\n\t\tif (node2 instanceof Attr) {\n\t\t\tattr2 = node2;\n\t\t\tnode2 = attr2.ownerElement;\n\t\t\tif (attr1 && node1 && node2 === node1) {\n\t\t\t\tfor (var i = 0, attr; (attr = node2.attributes[i]); i++) {\n\t\t\t\t\tif (attr === attr1)\n\t\t\t\t\t\treturn DocumentPosition.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC + DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t\t\t\tif (attr === attr2)\n\t\t\t\t\t\treturn DocumentPosition.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC + DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!node1 || !node2 || node2.ownerDocument !== node1.ownerDocument) {\n\t\t\treturn (\n\t\t\t\tDocumentPosition.DOCUMENT_POSITION_DISCONNECTED +\n\t\t\t\tDocumentPosition.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC +\n\t\t\t\t(docGUID(node2.ownerDocument) > docGUID(node1.ownerDocument)\n\t\t\t\t\t? DocumentPosition.DOCUMENT_POSITION_FOLLOWING\n\t\t\t\t\t: DocumentPosition.DOCUMENT_POSITION_PRECEDING)\n\t\t\t);\n\t\t}\n\t\tvar chain1 = parentChain(node1);\n\t\tvar chain2 = parentChain(node2);\n\t\tif ((!attr1 && chain2.indexOf(node1) >= 0) || (attr2 && node1 === node2)) {\n\t\t\treturn DocumentPosition.DOCUMENT_POSITION_CONTAINS + DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t}\n\t\tif ((!attr2 && chain1.indexOf(node2) >= 0) || (attr1 && node1 === node2)) {\n\t\t\treturn DocumentPosition.DOCUMENT_POSITION_CONTAINED_BY + DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t}\n\t\tvar ca = commonAncestor(chain2, chain1);\n\t\tfor (var n in ca.childNodes) {\n\t\t\tvar child = ca.childNodes[n];\n\t\t\tif (child === node2) return DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t\tif (child === node1) return DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t\tif (chain2.indexOf(child) >= 0) return DocumentPosition.DOCUMENT_POSITION_FOLLOWING;\n\t\t\tif (chain1.indexOf(child) >= 0) return DocumentPosition.DOCUMENT_POSITION_PRECEDING;\n\t\t}\n\t\treturn 0;\n\t},\n};\n\n/**\n * Encodes special XML characters to their corresponding entities.\n *\n * @param {string} c\n * The character to be encoded.\n * @returns {string}\n * The encoded character.\n * @private\n */\nfunction _xmlEncoder(c) {\n\treturn (\n\t\t(c == '<' && '<') || (c == '>' && '>') || (c == '&' && '&') || (c == '\"' && '"') || '&#' + c.charCodeAt() + ';'\n\t);\n}\n\ncopy(NodeType, Node);\ncopy(NodeType, Node.prototype);\ncopy(DocumentPosition, Node);\ncopy(DocumentPosition, Node.prototype);\n\n/**\n * @param callback\n * Return true for continue,false for break.\n * @returns\n * boolean true: break visit;\n */\nfunction _visitNode(node, callback) {\n\tif (callback(node)) {\n\t\treturn true;\n\t}\n\tif ((node = node.firstChild)) {\n\t\tdo {\n\t\t\tif (_visitNode(node, callback)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} while ((node = node.nextSibling));\n\t}\n}\n\n/**\n * @typedef DocumentOptions\n * @property {string} [contentType=MIME_TYPE.XML_APPLICATION]\n */\n/**\n * The Document interface describes the common properties and methods for any kind of document.\n *\n * It should usually be created using `new DOMImplementation().createDocument(...)`\n * or `new DOMImplementation().createHTMLDocument(...)`.\n *\n * The constructor is considered a private API and offers to initially set the `contentType`\n * property via it's options parameter.\n *\n * @class\n * @param {Symbol} symbol\n * @param {DocumentOptions} [options]\n * @augments Node\n * @private\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document\n * @see https://dom.spec.whatwg.org/#interface-document\n */\nfunction Document(symbol, options) {\n\tcheckSymbol(symbol);\n\n\tvar opt = options || {};\n\tthis.ownerDocument = this;\n\t/**\n\t * The mime type of the document is determined at creation time and can not be modified.\n\t *\n\t * @type {string}\n\t * @see https://dom.spec.whatwg.org/#concept-document-content-type\n\t * @see {@link DOMImplementation}\n\t * @see {@link MIME_TYPE}\n\t * @readonly\n\t */\n\tthis.contentType = opt.contentType || MIME_TYPE.XML_APPLICATION;\n\t/**\n\t * @type {'html' | 'xml'}\n\t * @see https://dom.spec.whatwg.org/#concept-document-type\n\t * @see {@link DOMImplementation}\n\t * @readonly\n\t */\n\tthis.type = isHTMLMimeType(this.contentType) ? 'html' : 'xml';\n}\n\n/**\n * Updates the namespace mapping of an element when a new attribute is added.\n *\n * @param {Document} doc\n * The document that the element belongs to.\n * @param {Element} el\n * The element to which the attribute is being added.\n * @param {Attr} newAttr\n * The new attribute being added.\n * @private\n */\nfunction _onAddAttribute(doc, el, newAttr) {\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI;\n\tif (ns === NAMESPACE.XMLNS) {\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix ? newAttr.localName : ''] = newAttr.value;\n\t}\n}\n\n/**\n * Updates the namespace mapping of an element when an attribute is removed.\n *\n * @param {Document} doc\n * The document that the element belongs to.\n * @param {Element} el\n * The element from which the attribute is being removed.\n * @param {Attr} newAttr\n * The attribute being removed.\n * @param {boolean} remove\n * Indicates whether the attribute is to be removed.\n * @private\n */\nfunction _onRemoveAttribute(doc, el, newAttr, remove) {\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI;\n\tif (ns === NAMESPACE.XMLNS) {\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix ? newAttr.localName : ''];\n\t}\n}\n\n/**\n * Updates `parent.childNodes`, adjusting the indexed items and its `length`.\n * If `newChild` is provided and has no nextSibling, it will be appended.\n * Otherwise, it's assumed that an item has been removed or inserted,\n * and `parent.firstNode` and its `.nextSibling` to re-indexing all child nodes of `parent`.\n *\n * @param {Document} doc\n * The parent document of `el`.\n * @param {Node} parent\n * The parent node whose childNodes list needs to be updated.\n * @param {Node} [newChild]\n * The new child node to be appended. If not provided, the function assumes a node has been\n * removed.\n * @private\n */\nfunction _onUpdateChild(doc, parent, newChild) {\n\tif (doc && doc._inc) {\n\t\tdoc._inc++;\n\t\tvar childNodes = parent.childNodes;\n\t\t// assumes nextSibling and previousSibling were already configured upfront\n\t\tif (newChild && !newChild.nextSibling) {\n\t\t\t// if an item has been appended, we only need to update the last index and the length\n\t\t\tchildNodes[childNodes.length++] = newChild;\n\t\t} else {\n\t\t\t// otherwise we need to reindex all items,\n\t\t\t// which can take a while when processing nodes with a lot of children\n\t\t\tvar child = parent.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile (child) {\n\t\t\t\tchildNodes[i++] = child;\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\tchildNodes.length = i;\n\t\t\tdelete childNodes[childNodes.length];\n\t\t}\n\t}\n}\n\n/**\n * Removes the connections between `parentNode` and `child`\n * and any existing `child.previousSibling` or `child.nextSibling`.\n *\n * @param {Node} parentNode\n * The parent node from which the child node is to be removed.\n * @param {Node} child\n * The child node to be removed from the parentNode.\n * @returns {Node}\n * Returns the child node that was removed.\n * @throws {DOMException}\n * With code:\n * - {@link DOMException.NOT_FOUND_ERR} If the parentNode is not the parent of the child node.\n * @private\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n */\nfunction _removeChild(parentNode, child) {\n\tif (parentNode !== child.parentNode) {\n\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, \"child's parent is not parent\");\n\t}\n\tvar oldPreviousSibling = child.previousSibling;\n\tvar oldNextSibling = child.nextSibling;\n\tif (oldPreviousSibling) {\n\t\toldPreviousSibling.nextSibling = oldNextSibling;\n\t} else {\n\t\tparentNode.firstChild = oldNextSibling;\n\t}\n\tif (oldNextSibling) {\n\t\toldNextSibling.previousSibling = oldPreviousSibling;\n\t} else {\n\t\tparentNode.lastChild = oldPreviousSibling;\n\t}\n\t_onUpdateChild(parentNode.ownerDocument, parentNode);\n\tchild.parentNode = null;\n\tchild.previousSibling = null;\n\tchild.nextSibling = null;\n\treturn child;\n}\n\n/**\n * Returns `true` if `node` can be a parent for insertion.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasValidParentNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE)\n\t);\n}\n\n/**\n * Returns `true` if `node` can be inserted according to it's `nodeType`.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasInsertableNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.CDATA_SECTION_NODE ||\n\t\t\tnode.nodeType === Node.COMMENT_NODE ||\n\t\t\tnode.nodeType === Node.DOCUMENT_FRAGMENT_NODE ||\n\t\t\tnode.nodeType === Node.DOCUMENT_TYPE_NODE ||\n\t\t\tnode.nodeType === Node.ELEMENT_NODE ||\n\t\t\tnode.nodeType === Node.PROCESSING_INSTRUCTION_NODE ||\n\t\t\tnode.nodeType === Node.TEXT_NODE)\n\t);\n}\n\n/**\n * Returns true if `node` is a DOCTYPE node.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isDocTypeNode(node) {\n\treturn node && node.nodeType === Node.DOCUMENT_TYPE_NODE;\n}\n\n/**\n * Returns true if the node is an element.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isElementNode(node) {\n\treturn node && node.nodeType === Node.ELEMENT_NODE;\n}\n/**\n * Returns true if `node` is a text node.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isTextNode(node) {\n\treturn node && node.nodeType === Node.TEXT_NODE;\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Document} doc\n * The document node.\n * @param {Node} child\n * The node that would become the nextSibling if the element would be inserted.\n * @returns {boolean}\n * `true` if an element can be inserted before child.\n * @private\n */\nfunction isElementInsertionPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\tif (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Node} doc\n * The document node.\n * @param {Node} child\n * The node that would become the nextSibling if the element would be inserted.\n * @returns {boolean}\n * `true` if an element can be inserted before child.\n * @private\n */\nfunction isElementReplacementPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\n\tfunction hasElementChildThatIsNotChild(node) {\n\t\treturn isElementNode(node) && node !== child;\n\t}\n\n\tif (find(parentChildNodes, hasElementChildThatIsNotChild)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Asserts pre-insertion validity of a node into a parent before a child.\n * Throws errors for invalid node combinations that would result in an ill-formed DOM.\n *\n * @param {Node} parent\n * The parent node to insert `node` into.\n * @param {Node} node\n * The node to insert.\n * @param {Node | null} child\n * The node that should become the `nextSibling` of `node`. If null, no sibling is considered.\n * @throws {DOMException}\n * With code:\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `parent` is not a Document,\n * DocumentFragment, or Element node.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a host-including inclusive\n * ancestor of `parent`. (Currently not implemented)\n * - {@link DOMException.NOT_FOUND_ERR} If `child` is non-null and its `parent` is not\n * `parent`.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is not a DocumentFragment,\n * DocumentType, Element, or CharacterData node.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If either `node` is a Text node and `parent` is\n * a document, or if `node` is a doctype and `parent` is not a document.\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidity1to5(parent, node, child) {\n\t// 1. If `parent` is not a Document, DocumentFragment, or Element node, then throw a \"HierarchyRequestError\" DOMException.\n\tif (!hasValidParentNodeType(parent)) {\n\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Unexpected parent node type ' + parent.nodeType);\n\t}\n\t// 2. If `node` is a host-including inclusive ancestor of `parent`, then throw a \"HierarchyRequestError\" DOMException.\n\t// not implemented!\n\t// 3. If `child` is non-null and its parent is not `parent`, then throw a \"NotFoundError\" DOMException.\n\tif (child && child.parentNode !== parent) {\n\t\tthrow new DOMException(DOMException.NOT_FOUND_ERR, 'child not in parent');\n\t}\n\tif (\n\t\t// 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a \"HierarchyRequestError\" DOMException.\n\t\t!hasInsertableNodeType(node) ||\n\t\t// 5. If either `node` is a Text node and `parent` is a document,\n\t\t// the sax parser currently adds top level text nodes, this will be fixed in 0.9.0\n\t\t// || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)\n\t\t// or `node` is a doctype and `parent` is not a document, then throw a \"HierarchyRequestError\" DOMException.\n\t\t(isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE)\n\t) {\n\t\tthrow new DOMException(\n\t\t\tDOMException.HIERARCHY_REQUEST_ERR,\n\t\t\t'Unexpected node type ' + node.nodeType + ' for parent node type ' + parent.nodeType\n\t\t);\n\t}\n}\n\n/**\n * Asserts pre-insertion validity of a node into a document before a child.\n * Throws errors for invalid node combinations that would result in an ill-formed DOM.\n *\n * @param {Document} parent\n * The parent node to insert `node` into.\n * @param {Node} node\n * The node to insert.\n * @param {Node | undefined} child\n * The node that should become the `nextSibling` of `node`. If undefined, no sibling is\n * considered.\n * @returns {Node}\n * @throws {DOMException}\n * With code:\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a DocumentFragment with more than\n * one element child or has a Text node child.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a DocumentFragment with one\n * element child and either `parent` has an element child, `child` is a doctype, or `child` is\n * non-null and a doctype is following `child`.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is an Element and `parent` has an\n * element child, `child` is a doctype, or `child` is non-null and a doctype is following\n * `child`.\n * - {@link DOMException.HIERARCHY_REQUEST_ERR} If `node` is a DocumentType and `parent` has a\n * doctype child, `child` is non-null and an element is preceding `child`, or `child` is null\n * and `parent` has an element child.\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If node has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child,\n\t\t// `child` is a doctype, or `child` is non-null and a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child, `child` is a doctype,\n\t\t// or `child` is non-null and a doctype is following `child`.\n\t\tif (!isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\t// `parent` has a doctype child,\n\t\tif (find(parentChildNodes, isDocTypeNode)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// `child` is non-null and an element is preceding `child`,\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t\t// or `child` is null and `parent` has an element child.\n\t\tif (!child && parentElementChild) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Doctype can not be appended since element is present');\n\t\t}\n\t}\n}\n\n/**\n * @param {Document} parent\n * The parent node to insert `node` into.\n * @param {Node} node\n * The node to insert.\n * @param {Node | undefined} child\n * the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws {DOMException}\n * For several node combinations that would create a DOM that is not well-formed.\n * @throws {DOMException}\n * If `child` is provided but is not a child of `parent`.\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreReplacementValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If `node` has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (!isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\tfunction hasDoctypeChildThatIsNotChild(node) {\n\t\t\treturn isDocTypeNode(node) && node !== child;\n\t\t}\n\n\t\t// `parent` has a doctype child that is not `child`,\n\t\tif (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// or an element is preceding `child`.\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(DOMException.HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t}\n}\n\n/**\n * Inserts a node into a parent node before a child node.\n *\n * @param {Node} parent\n * The parent node to insert the node into.\n * @param {Node} node\n * The node to insert into the parent.\n * @param {Node | null} child\n * The node that should become the next sibling of the node.\n * If null, the function inserts the node at the end of the children of the parent node.\n * @param {Function} [_inDocumentAssertion]\n * An optional function to check pre-insertion validity if parent is a document node.\n * Defaults to {@link assertPreInsertionValidityInDocument}\n * @returns {Node}\n * Returns the inserted node.\n * @throws {DOMException}\n * Throws a DOMException if inserting the node would result in a DOM tree that is not\n * well-formed. See {@link assertPreInsertionValidity1to5},\n * {@link assertPreInsertionValidityInDocument}.\n * @throws {DOMException}\n * Throws a DOMException if child is provided but is not a child of the parent. See\n * {@link Node.removeChild}\n * @private\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction _insertBefore(parent, node, child, _inDocumentAssertion) {\n\t// To ensure pre-insertion validity of a node into a parent before a child, run these steps:\n\tassertPreInsertionValidity1to5(parent, node, child);\n\n\t// If parent is a document, and any of the statements below, switched on the interface node implements,\n\t// are true, then throw a \"HierarchyRequestError\" DOMException.\n\tif (parent.nodeType === Node.DOCUMENT_NODE) {\n\t\t(_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child);\n\t}\n\n\tvar cp = node.parentNode;\n\tif (cp) {\n\t\tcp.removeChild(node); //remove and update\n\t}\n\tif (node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n\t\tvar newFirst = node.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn node;\n\t\t}\n\t\tvar newLast = node.lastChild;\n\t} else {\n\t\tnewFirst = newLast = node;\n\t}\n\tvar pre = child ? child.previousSibling : parent.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = child;\n\n\tif (pre) {\n\t\tpre.nextSibling = newFirst;\n\t} else {\n\t\tparent.firstChild = newFirst;\n\t}\n\tif (child == null) {\n\t\tparent.lastChild = newLast;\n\t} else {\n\t\tchild.previousSibling = newLast;\n\t}\n\tdo {\n\t\tnewFirst.parentNode = parent;\n\t} while (newFirst !== newLast && (newFirst = newFirst.nextSibling));\n\t_onUpdateChild(parent.ownerDocument || parent, parent, node);\n\tif (node.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnode.firstChild = node.lastChild = null;\n\t}\n\n\treturn node;\n}\n\nDocument.prototype = {\n\t/**\n\t * The implementation that created this document.\n\t *\n\t * @type DOMImplementation\n\t * @readonly\n\t */\n\timplementation: null,\n\tnodeName: '#document',\n\tnodeType: DOCUMENT_NODE,\n\t/**\n\t * The DocumentType node of the document.\n\t *\n\t * @type DocumentType\n\t * @readonly\n\t */\n\tdoctype: null,\n\tdocumentElement: null,\n\t_inc: 1,\n\n\tinsertBefore: function (newChild, refChild) {\n\t\t//raises\n\t\tif (newChild.nodeType === DOCUMENT_FRAGMENT_NODE) {\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile (child) {\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child, refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\t_insertBefore(this, newChild, refChild);\n\t\tnewChild.ownerDocument = this;\n\t\tif (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn newChild;\n\t},\n\tremoveChild: function (oldChild) {\n\t\tvar removed = _removeChild(this, oldChild);\n\t\tif (removed === this.documentElement) {\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn removed;\n\t},\n\treplaceChild: function (newChild, oldChild) {\n\t\t//raises\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\tnewChild.ownerDocument = this;\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t\tif (isElementNode(newChild)) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t},\n\t// Introduced in DOM Level 2:\n\timportNode: function (importedNode, deep) {\n\t\treturn importNode(this, importedNode, deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById: function (id) {\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement, function (node) {\n\t\t\tif (node.nodeType == ELEMENT_NODE) {\n\t\t\t\tif (node.getAttribute('id') == id) {\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn rtv;\n\t},\n\n\t/**\n\t * Creates a new `Element` that is owned by this `Document`.\n\t * In HTML Documents `localName` is the lower cased `tagName`,\n\t * otherwise no transformation is being applied.\n\t * When `contentType` implies the HTML namespace, it will be set as `namespaceURI`.\n\t *\n\t * __This implementation differs from the specification:__ - The provided name is not checked\n\t * against the `Name` production,\n\t * so no related error will be thrown.\n\t * - There is no interface `HTMLElement`, it is always an `Element`.\n\t * - There is no support for a second argument to indicate using custom elements.\n\t *\n\t * @param {string} tagName\n\t * @returns {Element}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement\n\t * @see https://dom.spec.whatwg.org/#dom-document-createelement\n\t * @see https://dom.spec.whatwg.org/#concept-create-element\n\t */\n\tcreateElement: function (tagName) {\n\t\tvar node = new Element(PDC);\n\t\tnode.ownerDocument = this;\n\t\tif (this.type === 'html') {\n\t\t\ttagName = tagName.toLowerCase();\n\t\t}\n\t\tif (hasDefaultHTMLNamespace(this.contentType)) {\n\t\t\tnode.namespaceURI = NAMESPACE.HTML;\n\t\t}\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.localName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs = (node.attributes = new NamedNodeMap());\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t/**\n\t * @returns {DocumentFragment}\n\t */\n\tcreateDocumentFragment: function () {\n\t\tvar node = new DocumentFragment(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\t/**\n\t * @param {string} data\n\t * @returns {Text}\n\t */\n\tcreateTextNode: function (data) {\n\t\tvar node = new Text(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\t/**\n\t * @param {string} data\n\t * @returns {Comment}\n\t */\n\tcreateComment: function (data) {\n\t\tvar node = new Comment(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\t/**\n\t * @param {string} data\n\t * @returns {CDATASection}\n\t */\n\tcreateCDATASection: function (data) {\n\t\tvar node = new CDATASection(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\t/**\n\t * @param {string} target\n\t * @param {string} data\n\t * @returns {ProcessingInstruction}\n\t */\n\tcreateProcessingInstruction: function (target, data) {\n\t\tvar node = new ProcessingInstruction(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.nodeName = node.target = target;\n\t\tnode.nodeValue = node.data = data;\n\t\treturn node;\n\t},\n\t/**\n\t * Creates an `Attr` node that is owned by this document.\n\t * In HTML Documents `localName` is the lower cased `name`,\n\t * otherwise no transformation is being applied.\n\t *\n\t * __This implementation differs from the specification:__ - The provided name is not checked\n\t * against the `Name` production,\n\t * so no related error will be thrown.\n\t *\n\t * @param {string} name\n\t * @returns {Attr}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/createAttribute\n\t * @see https://dom.spec.whatwg.org/#dom-document-createattribute\n\t */\n\tcreateAttribute: function (name) {\n\t\tif (!g.QName_exact.test(name)) {\n\t\t\tthrow new DOMException(DOMException.INVALID_CHARACTER_ERR, 'invalid character in name \"' + name + '\"');\n\t\t}\n\t\tif (this.type === 'html') {\n\t\t\tname = name.toLowerCase();\n\t\t}\n\t\treturn this._createAttribute(name);\n\t},\n\t_createAttribute: function (name) {\n\t\tvar node = new Attr(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.name = name;\n\t\tnode.nodeName = name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\t/**\n\t * Creates an EntityReference object.\n\t * The current implementation does not fill the `childNodes` with those of the corresponding\n\t * `Entity`\n\t *\n\t * @deprecated\n\t * In DOM Level 4.\n\t * @param {string} name\n\t * The name of the entity to reference. No namespace well-formedness checks are performed.\n\t * @returns {EntityReference}\n\t * @throws {DOMException}\n\t * With code `INVALID_CHARACTER_ERR` when `name` is not valid.\n\t * @throws {DOMException}\n\t * with code `NOT_SUPPORTED_ERR` when the document is of type `html`\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-392B75AE\n\t */\n\tcreateEntityReference: function (name) {\n\t\tif (!g.Name.test(name)) {\n\t\t\tthrow new DOMException(DOMException.INVALID_CHARACTER_ERR, 'not a valid xml name \"' + name + '\"');\n\t\t}\n\t\tif (this.type === 'html') {\n\t\t\tthrow new DOMException('document is an html document', DOMExceptionName.NotSupportedError);\n\t\t}\n\n\t\tvar node = new EntityReference(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.nodeName = name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\t/**\n\t * @param {string} namespaceURI\n\t * @param {string} qualifiedName\n\t * @returns {Element}\n\t */\n\tcreateElementNS: function (namespaceURI, qualifiedName) {\n\t\tvar validated = validateAndExtract(namespaceURI, qualifiedName);\n\t\tvar node = new Element(PDC);\n\t\tvar attrs = (node.attributes = new NamedNodeMap());\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = validated[0];\n\t\tnode.prefix = validated[1];\n\t\tnode.localName = validated[2];\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\t/**\n\t * @param {string} namespaceURI\n\t * @param {string} qualifiedName\n\t * @returns {Attr}\n\t */\n\tcreateAttributeNS: function (namespaceURI, qualifiedName) {\n\t\tvar validated = validateAndExtract(namespaceURI, qualifiedName);\n\t\tvar node = new Attr(PDC);\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.specified = true;\n\t\tnode.namespaceURI = validated[0];\n\t\tnode.prefix = validated[1];\n\t\tnode.localName = validated[2];\n\t\treturn node;\n\t},\n};\n_extends(Document, Node);\n\nfunction Element(symbol) {\n\tcheckSymbol(symbol);\n\n\tthis._nsMap = Object.create(null);\n}\nElement.prototype = {\n\tnodeType: ELEMENT_NODE,\n\t/**\n\t * The attributes of this element.\n\t *\n\t * @type {NamedNodeMap | null}\n\t */\n\tattributes: null,\n\tgetQualifiedName: function () {\n\t\treturn this.prefix ? this.prefix + ':' + this.localName : this.localName;\n\t},\n\t_isInHTMLDocumentAndNamespace: function () {\n\t\treturn this.ownerDocument.type === 'html' && this.namespaceURI === NAMESPACE.HTML;\n\t},\n\thasAttribute: function (name) {\n\t\treturn !!this.getAttributeNode(name);\n\t},\n\t/**\n\t * Returns element’s first attribute whose qualified name is `name`, and `null`\n\t * if there is no such attribute.\n\t *\n\t * @param {string} name\n\t * @returns {string | null}\n\t */\n\tgetAttribute: function (name) {\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr ? attr.value : null;\n\t},\n\tgetAttributeNode: function (name) {\n\t\tif (this._isInHTMLDocumentAndNamespace()) {\n\t\t\tname = name.toLowerCase();\n\t\t}\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\t/**\n\t * Sets the value of element’s first attribute whose qualified name is qualifiedName to value.\n\t *\n\t * @param {string} name\n\t * @param {string} value\n\t */\n\tsetAttribute: function (name, value) {\n\t\tif (this._isInHTMLDocumentAndNamespace()) {\n\t\t\tname = name.toLowerCase();\n\t\t}\n\t\tvar attr = this.getAttributeNode(name);\n\t\tif (attr) {\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t} else {\n\t\t\tattr = this.ownerDocument._createAttribute(name);\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t\tthis.setAttributeNode(attr);\n\t\t}\n\t},\n\tremoveAttribute: function (name) {\n\t\tvar attr = this.getAttributeNode(name);\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\tsetAttributeNode: function (newAttr) {\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS: function (newAttr) {\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode: function (oldAttr) {\n\t\t//console.log(this == oldAttr.ownerElement)\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS: function (namespaceURI, localName) {\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS: function (namespaceURI, localName) {\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName) != null;\n\t},\n\t/**\n\t * Returns element’s attribute whose namespace is `namespaceURI` and local name is\n\t * `localName`,\n\t * or `null` if there is no such attribute.\n\t *\n\t * @param {string} namespaceURI\n\t * @param {string} localName\n\t * @returns {string | null}\n\t */\n\tgetAttributeNS: function (namespaceURI, localName) {\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr ? attr.value : null;\n\t},\n\t/**\n\t * Sets the value of element’s attribute whose namespace is `namespaceURI` and local name is\n\t * `localName` to value.\n\t *\n\t * @param {string} namespaceURI\n\t * @param {string} qualifiedName\n\t * @param {string} value\n\t * @see https://dom.spec.whatwg.org/#dom-element-setattributens\n\t */\n\tsetAttributeNS: function (namespaceURI, qualifiedName, value) {\n\t\tvar validated = validateAndExtract(namespaceURI, qualifiedName);\n\t\tvar localName = validated[2];\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\tif (attr) {\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t} else {\n\t\t\tattr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\t\tattr.value = attr.nodeValue = '' + value;\n\t\t\tthis.setAttributeNode(attr);\n\t\t}\n\t},\n\tgetAttributeNodeNS: function (namespaceURI, localName) {\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\t/**\n\t * Returns a LiveNodeList of all child elements which have **all** of the given class name(s).\n\t *\n\t * Returns an empty list if `classNames` is an empty string or only contains HTML white space\n\t * characters.\n\t *\n\t * Warning: This returns a live LiveNodeList.\n\t * Changes in the DOM will reflect in the array as the changes occur.\n\t * If an element selected by this array no longer qualifies for the selector,\n\t * it will automatically be removed. Be aware of this for iteration purposes.\n\t *\n\t * @param {string} classNames\n\t * Is a string representing the class name(s) to match; multiple class names are separated by\n\t * (ASCII-)whitespace.\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByClassName\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname\n\t */\n\tgetElementsByClassName: function (classNames) {\n\t\tvar classNamesSet = toOrderedSet(classNames);\n\t\treturn new LiveNodeList(this, function (base) {\n\t\t\tvar ls = [];\n\t\t\tif (classNamesSet.length > 0) {\n\t\t\t\t_visitNode(base, function (node) {\n\t\t\t\t\tif (node !== base && node.nodeType === ELEMENT_NODE) {\n\t\t\t\t\t\tvar nodeClassNames = node.getAttribute('class');\n\t\t\t\t\t\t// can be null if the attribute does not exist\n\t\t\t\t\t\tif (nodeClassNames) {\n\t\t\t\t\t\t\t// before splitting and iterating just compare them for the most common case\n\t\t\t\t\t\t\tvar matches = classNames === nodeClassNames;\n\t\t\t\t\t\t\tif (!matches) {\n\t\t\t\t\t\t\t\tvar nodeClassNamesSet = toOrderedSet(nodeClassNames);\n\t\t\t\t\t\t\t\tmatches = classNamesSet.every(arrayIncludes(nodeClassNamesSet));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matches) {\n\t\t\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn ls;\n\t\t});\n\t},\n\n\t/**\n\t * Returns a LiveNodeList of elements with the given qualifiedName.\n\t * Searching for all descendants can be done by passing `*` as `qualifiedName`.\n\t *\n\t * All descendants of the specified element are searched, but not the element itself.\n\t * The returned list is live, which means it updates itself with the DOM tree automatically.\n\t * Therefore, there is no need to call `Element.getElementsByTagName()`\n\t * with the same element and arguments repeatedly if the DOM changes in between calls.\n\t *\n\t * When called on an HTML element in an HTML document,\n\t * `getElementsByTagName` lower-cases the argument before searching for it.\n\t * This is undesirable when trying to match camel-cased SVG elements (such as\n\t * ``) in an HTML document.\n\t * Instead, use `Element.getElementsByTagNameNS()`,\n\t * which preserves the capitalization of the tag name.\n\t *\n\t * `Element.getElementsByTagName` is similar to `Document.getElementsByTagName()`,\n\t * except that it only searches for elements that are descendants of the specified element.\n\t *\n\t * @param {string} qualifiedName\n\t * @returns {LiveNodeList}\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByTagName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbytagname\n\t */\n\tgetElementsByTagName: function (qualifiedName) {\n\t\tvar isHTMLDocument = (this.nodeType === DOCUMENT_NODE ? this : this.ownerDocument).type === 'html';\n\t\tvar lowerQualifiedName = qualifiedName.toLowerCase();\n\t\treturn new LiveNodeList(this, function (base) {\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base, function (node) {\n\t\t\t\tif (node === base || node.nodeType !== ELEMENT_NODE) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (qualifiedName === '*') {\n\t\t\t\t\tls.push(node);\n\t\t\t\t} else {\n\t\t\t\t\tvar nodeQualifiedName = node.getQualifiedName();\n\t\t\t\t\tvar matchingQName = isHTMLDocument && node.namespaceURI === NAMESPACE.HTML ? lowerQualifiedName : qualifiedName;\n\t\t\t\t\tif (nodeQualifiedName === matchingQName) {\n\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS: function (namespaceURI, localName) {\n\t\treturn new LiveNodeList(this, function (base) {\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base, function (node) {\n\t\t\t\tif (\n\t\t\t\t\tnode !== base &&\n\t\t\t\t\tnode.nodeType === ELEMENT_NODE &&\n\t\t\t\t\t(namespaceURI === '*' || node.namespaceURI === namespaceURI) &&\n\t\t\t\t\t(localName === '*' || node.localName == localName)\n\t\t\t\t) {\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n};\nDocument.prototype.getElementsByClassName = Element.prototype.getElementsByClassName;\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n_extends(Element, Node);\nfunction Attr(symbol) {\n\tcheckSymbol(symbol);\n\n\tthis.namespaceURI = null;\n\tthis.prefix = null;\n\tthis.ownerElement = null;\n}\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr, Node);\n\nfunction CharacterData(symbol) {\n\tcheckSymbol(symbol);\n}\nCharacterData.prototype = {\n\tdata: '',\n\tsubstringData: function (offset, count) {\n\t\treturn this.data.substring(offset, offset + count);\n\t},\n\tappendData: function (text) {\n\t\ttext = this.data + text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function (offset, text) {\n\t\tthis.replaceData(offset, 0, text);\n\t},\n\tdeleteData: function (offset, count) {\n\t\tthis.replaceData(offset, count, '');\n\t},\n\treplaceData: function (offset, count, text) {\n\t\tvar start = this.data.substring(0, offset);\n\t\tvar end = this.data.substring(offset + count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n};\n_extends(CharacterData, Node);\nfunction Text(symbol) {\n\tcheckSymbol(symbol);\n}\nText.prototype = {\n\tnodeName: '#text',\n\tnodeType: TEXT_NODE,\n\tsplitText: function (offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif (this.parentNode) {\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t},\n};\n_extends(Text, CharacterData);\nfunction Comment(symbol) {\n\tcheckSymbol(symbol);\n}\nComment.prototype = {\n\tnodeName: '#comment',\n\tnodeType: COMMENT_NODE,\n};\n_extends(Comment, CharacterData);\n\nfunction CDATASection(symbol) {\n\tcheckSymbol(symbol);\n}\nCDATASection.prototype = {\n\tnodeName: '#cdata-section',\n\tnodeType: CDATA_SECTION_NODE,\n};\n_extends(CDATASection, Text);\n\nfunction DocumentType(symbol) {\n\tcheckSymbol(symbol);\n}\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType, Node);\n\nfunction Notation(symbol) {\n\tcheckSymbol(symbol);\n}\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation, Node);\n\nfunction Entity(symbol) {\n\tcheckSymbol(symbol);\n}\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity, Node);\n\nfunction EntityReference(symbol) {\n\tcheckSymbol(symbol);\n}\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference, Node);\n\nfunction DocumentFragment(symbol) {\n\tcheckSymbol(symbol);\n}\nDocumentFragment.prototype.nodeName = '#document-fragment';\nDocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment, Node);\n\nfunction ProcessingInstruction(symbol) {\n\tcheckSymbol(symbol);\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction, CharacterData);\nfunction XMLSerializer() {}\nXMLSerializer.prototype.serializeToString = function (node, nodeFilter) {\n\treturn nodeSerializeToString.call(node, nodeFilter);\n};\nNode.prototype.toString = nodeSerializeToString;\nfunction nodeSerializeToString(nodeFilter) {\n\tvar buf = [];\n\tvar refNode = (this.nodeType === DOCUMENT_NODE && this.documentElement) || this;\n\tvar prefix = refNode.prefix;\n\tvar uri = refNode.namespaceURI;\n\n\tif (uri && prefix == null) {\n\t\tvar prefix = refNode.lookupPrefix(uri);\n\t\tif (prefix == null) {\n\t\t\tvar visibleNamespaces = [\n\t\t\t\t{ namespace: uri, prefix: null },\n\t\t\t\t//{namespace:uri,prefix:''}\n\t\t\t];\n\t\t}\n\t}\n\tserializeToString(this, buf, nodeFilter, visibleNamespaces);\n\treturn buf.join('');\n}\n\nfunction needNamespaceDefine(node, isHTML, visibleNamespaces) {\n\tvar prefix = node.prefix || '';\n\tvar uri = node.namespaceURI;\n\t// According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) ,\n\t// and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl :\n\t// > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty.\n\t// in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using)\n\t// and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared :\n\t// > [...] Furthermore, the attribute value [...] must not be an empty string.\n\t// so serializing empty namespace value like xmlns:ds=\"\" would produce an invalid XML document.\n\tif (!uri) {\n\t\treturn false;\n\t}\n\tif ((prefix === 'xml' && uri === NAMESPACE.XML) || uri === NAMESPACE.XMLNS) {\n\t\treturn false;\n\t}\n\n\tvar i = visibleNamespaces.length;\n\twhile (i--) {\n\t\tvar ns = visibleNamespaces[i];\n\t\t// get namespace prefix\n\t\tif (ns.prefix === prefix) {\n\t\t\treturn ns.namespace !== uri;\n\t\t}\n\t}\n\treturn true;\n}\n/**\n * Literal whitespace other than space that appear in attribute values are serialized as\n * their entity references, so they will be preserved.\n * (In contrast to whitespace literals in the input which are normalized to spaces).\n *\n * Well-formed constraint: No < in Attribute Values:\n * > The replacement text of any entity referred to directly or indirectly\n * > in an attribute value must not contain a <.\n *\n * @see https://www.w3.org/TR/xml11/#CleanAttrVals\n * @see https://www.w3.org/TR/xml11/#NT-AttValue\n * @see https://www.w3.org/TR/xml11/#AVNormalize\n * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes\n * @prettierignore\n */\nfunction addSerializedAttribute(buf, qualifiedName, value) {\n\tbuf.push(' ', qualifiedName, '=\"', value.replace(/[<>&\"\\t\\n\\r]/g, _xmlEncoder), '\"');\n}\n\nfunction serializeToString(node, buf, nodeFilter, visibleNamespaces) {\n\tif (!visibleNamespaces) {\n\t\tvisibleNamespaces = [];\n\t}\n\tvar doc = node.nodeType === DOCUMENT_NODE ? node : node.ownerDocument;\n\tvar isHTML = doc.type === 'html';\n\n\tif (nodeFilter) {\n\t\tnode = nodeFilter(node);\n\t\tif (node) {\n\t\t\tif (typeof node == 'string') {\n\t\t\t\tbuf.push(node);\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t\t//buf.sort.apply(attrs, attributeSorter);\n\t}\n\n\tswitch (node.nodeType) {\n\t\tcase ELEMENT_NODE:\n\t\t\tvar attrs = node.attributes;\n\t\t\tvar len = attrs.length;\n\t\t\tvar child = node.firstChild;\n\t\t\tvar nodeName = node.tagName;\n\n\t\t\tvar prefixedNodeName = nodeName;\n\t\t\tif (!isHTML && !node.prefix && node.namespaceURI) {\n\t\t\t\tvar defaultNS;\n\t\t\t\t// lookup current default ns from `xmlns` attribute\n\t\t\t\tfor (var ai = 0; ai < attrs.length; ai++) {\n\t\t\t\t\tif (attrs.item(ai).name === 'xmlns') {\n\t\t\t\t\t\tdefaultNS = attrs.item(ai).value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!defaultNS) {\n\t\t\t\t\t// lookup current default ns in visibleNamespaces\n\t\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\t\tvar namespace = visibleNamespaces[nsi];\n\t\t\t\t\t\tif (namespace.prefix === '' && namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\t\tdefaultNS = namespace.namespace;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (defaultNS !== node.namespaceURI) {\n\t\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\t\tvar namespace = visibleNamespaces[nsi];\n\t\t\t\t\t\tif (namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\t\tif (namespace.prefix) {\n\t\t\t\t\t\t\t\tprefixedNodeName = namespace.prefix + ':' + nodeName;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbuf.push('<', prefixedNodeName);\n\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\t// add namespaces for attributes\n\t\t\t\tvar attr = attrs.item(i);\n\t\t\t\tif (attr.prefix == 'xmlns') {\n\t\t\t\t\tvisibleNamespaces.push({\n\t\t\t\t\t\tprefix: attr.localName,\n\t\t\t\t\t\tnamespace: attr.value,\n\t\t\t\t\t});\n\t\t\t\t} else if (attr.nodeName == 'xmlns') {\n\t\t\t\t\tvisibleNamespaces.push({ prefix: '', namespace: attr.value });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\tvar attr = attrs.item(i);\n\t\t\t\tif (needNamespaceDefine(attr, isHTML, visibleNamespaces)) {\n\t\t\t\t\tvar prefix = attr.prefix || '';\n\t\t\t\t\tvar uri = attr.namespaceURI;\n\t\t\t\t\taddSerializedAttribute(buf, prefix ? 'xmlns:' + prefix : 'xmlns', uri);\n\t\t\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace: uri });\n\t\t\t\t}\n\t\t\t\tserializeToString(attr, buf, nodeFilter, visibleNamespaces);\n\t\t\t}\n\n\t\t\t// add namespace for current node\n\t\t\tif (nodeName === prefixedNodeName && needNamespaceDefine(node, isHTML, visibleNamespaces)) {\n\t\t\t\tvar prefix = node.prefix || '';\n\t\t\t\tvar uri = node.namespaceURI;\n\t\t\t\taddSerializedAttribute(buf, prefix ? 'xmlns:' + prefix : 'xmlns', uri);\n\t\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace: uri });\n\t\t\t}\n\t\t\t// in XML elements can be closed when they have no children\n\t\t\tvar canCloseTag = !child;\n\t\t\tif (canCloseTag && (isHTML || node.namespaceURI === NAMESPACE.HTML)) {\n\t\t\t\t// in HTML (doc or ns) only void elements can be closed right away\n\t\t\t\tcanCloseTag = isHTMLVoidElement(nodeName);\n\t\t\t}\n\t\t\tif (canCloseTag) {\n\t\t\t\tbuf.push('/>');\n\t\t\t} else {\n\t\t\t\tbuf.push('>');\n\t\t\t\t//if is cdata child node\n\t\t\t\tif (isHTML && isHTMLRawTextElement(nodeName)) {\n\t\t\t\t\twhile (child) {\n\t\t\t\t\t\tif (child.data) {\n\t\t\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tserializeToString(child, buf, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\twhile (child) {\n\t\t\t\t\t\tserializeToString(child, buf, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbuf.push('');\n\t\t\t}\n\t\t\t// remove added visible namespaces\n\t\t\t//visibleNamespaces.length = startVisibleNamespaces;\n\t\t\treturn;\n\t\tcase DOCUMENT_NODE:\n\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\tvar child = node.firstChild;\n\t\t\twhile (child) {\n\t\t\t\tserializeToString(child, buf, nodeFilter, visibleNamespaces.slice());\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\treturn;\n\t\tcase ATTRIBUTE_NODE:\n\t\t\treturn addSerializedAttribute(buf, node.name, node.value);\n\t\tcase TEXT_NODE:\n\t\t\t/*\n\t\t\t * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form,\n\t\t\t * except when used as markup delimiters, or within a comment, a processing instruction,\n\t\t\t * or a CDATA section.\n\t\t\t * If they are needed elsewhere, they must be escaped using either numeric character\n\t\t\t * references or the strings `&` and `<` respectively.\n\t\t\t * The right angle bracket (>) may be represented using the string \" > \",\n\t\t\t * and must, for compatibility, be escaped using either `>`,\n\t\t\t * or a character reference when it appears in the string `]]>` in content,\n\t\t\t * when that string is not marking the end of a CDATA section.\n\t\t\t *\n\t\t\t * In the content of elements, character data is any string of characters which does not\n\t\t\t * contain the start-delimiter of any markup and does not include the CDATA-section-close\n\t\t\t * delimiter, `]]>`.\n\t\t\t *\n\t\t\t * @see https://www.w3.org/TR/xml/#NT-CharData\n\t\t\t * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node\n\t\t\t */\n\t\t\treturn buf.push(node.data.replace(/[<&>]/g, _xmlEncoder));\n\t\tcase CDATA_SECTION_NODE:\n\t\t\treturn buf.push(g.CDATA_START, node.data, g.CDATA_END);\n\t\tcase COMMENT_NODE:\n\t\t\treturn buf.push(g.COMMENT_START, node.data, g.COMMENT_END);\n\t\tcase DOCUMENT_TYPE_NODE:\n\t\t\tvar pubid = node.publicId;\n\t\t\tvar sysid = node.systemId;\n\t\t\tbuf.push(g.DOCTYPE_DECL_START, ' ', node.name);\n\t\t\tif (pubid) {\n\t\t\t\tbuf.push(' ', g.PUBLIC, ' ', pubid);\n\t\t\t\tif (sysid && sysid !== '.') {\n\t\t\t\t\tbuf.push(' ', sysid);\n\t\t\t\t}\n\t\t\t} else if (sysid && sysid !== '.') {\n\t\t\t\tbuf.push(' ', g.SYSTEM, ' ', sysid);\n\t\t\t}\n\t\t\tif (node.internalSubset) {\n\t\t\t\tbuf.push(' [', node.internalSubset, ']');\n\t\t\t}\n\t\t\tbuf.push('>');\n\t\t\treturn;\n\t\tcase PROCESSING_INSTRUCTION_NODE:\n\t\t\treturn buf.push('');\n\t\tcase ENTITY_REFERENCE_NODE:\n\t\t\treturn buf.push('&', node.nodeName, ';');\n\t\t//case ENTITY_NODE:\n\t\t//case NOTATION_NODE:\n\t\tdefault:\n\t\t\tbuf.push('??', node.nodeName);\n\t}\n}\nfunction importNode(doc, node, deep) {\n\tvar node2;\n\tswitch (node.nodeType) {\n\t\tcase ELEMENT_NODE:\n\t\t\tnode2 = node.cloneNode(false);\n\t\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i',\n\tlt: '<',\n\tquot: '\"',\n});\n\n/**\n * A map of all entities that are detected in an HTML document.\n * They contain all entries from `XML_ENTITIES`.\n *\n * @see {@link XML_ENTITIES}\n * @see {@link DOMParser.parseFromString}\n * @see {@link DOMImplementation.prototype.createHTMLDocument}\n * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5)\n * Spec\n * @see https://html.spec.whatwg.org/entities.json JSON\n * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names\n * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML\n * Wikipedia (HTML)\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML\n * Wikpedia (XHTML)\n */\nexports.HTML_ENTITIES = freeze({\n\tAacute: '\\u00C1',\n\taacute: '\\u00E1',\n\tAbreve: '\\u0102',\n\tabreve: '\\u0103',\n\tac: '\\u223E',\n\tacd: '\\u223F',\n\tacE: '\\u223E\\u0333',\n\tAcirc: '\\u00C2',\n\tacirc: '\\u00E2',\n\tacute: '\\u00B4',\n\tAcy: '\\u0410',\n\tacy: '\\u0430',\n\tAElig: '\\u00C6',\n\taelig: '\\u00E6',\n\taf: '\\u2061',\n\tAfr: '\\uD835\\uDD04',\n\tafr: '\\uD835\\uDD1E',\n\tAgrave: '\\u00C0',\n\tagrave: '\\u00E0',\n\talefsym: '\\u2135',\n\taleph: '\\u2135',\n\tAlpha: '\\u0391',\n\talpha: '\\u03B1',\n\tAmacr: '\\u0100',\n\tamacr: '\\u0101',\n\tamalg: '\\u2A3F',\n\tAMP: '\\u0026',\n\tamp: '\\u0026',\n\tAnd: '\\u2A53',\n\tand: '\\u2227',\n\tandand: '\\u2A55',\n\tandd: '\\u2A5C',\n\tandslope: '\\u2A58',\n\tandv: '\\u2A5A',\n\tang: '\\u2220',\n\tange: '\\u29A4',\n\tangle: '\\u2220',\n\tangmsd: '\\u2221',\n\tangmsdaa: '\\u29A8',\n\tangmsdab: '\\u29A9',\n\tangmsdac: '\\u29AA',\n\tangmsdad: '\\u29AB',\n\tangmsdae: '\\u29AC',\n\tangmsdaf: '\\u29AD',\n\tangmsdag: '\\u29AE',\n\tangmsdah: '\\u29AF',\n\tangrt: '\\u221F',\n\tangrtvb: '\\u22BE',\n\tangrtvbd: '\\u299D',\n\tangsph: '\\u2222',\n\tangst: '\\u00C5',\n\tangzarr: '\\u237C',\n\tAogon: '\\u0104',\n\taogon: '\\u0105',\n\tAopf: '\\uD835\\uDD38',\n\taopf: '\\uD835\\uDD52',\n\tap: '\\u2248',\n\tapacir: '\\u2A6F',\n\tapE: '\\u2A70',\n\tape: '\\u224A',\n\tapid: '\\u224B',\n\tapos: '\\u0027',\n\tApplyFunction: '\\u2061',\n\tapprox: '\\u2248',\n\tapproxeq: '\\u224A',\n\tAring: '\\u00C5',\n\taring: '\\u00E5',\n\tAscr: '\\uD835\\uDC9C',\n\tascr: '\\uD835\\uDCB6',\n\tAssign: '\\u2254',\n\tast: '\\u002A',\n\tasymp: '\\u2248',\n\tasympeq: '\\u224D',\n\tAtilde: '\\u00C3',\n\tatilde: '\\u00E3',\n\tAuml: '\\u00C4',\n\tauml: '\\u00E4',\n\tawconint: '\\u2233',\n\tawint: '\\u2A11',\n\tbackcong: '\\u224C',\n\tbackepsilon: '\\u03F6',\n\tbackprime: '\\u2035',\n\tbacksim: '\\u223D',\n\tbacksimeq: '\\u22CD',\n\tBackslash: '\\u2216',\n\tBarv: '\\u2AE7',\n\tbarvee: '\\u22BD',\n\tBarwed: '\\u2306',\n\tbarwed: '\\u2305',\n\tbarwedge: '\\u2305',\n\tbbrk: '\\u23B5',\n\tbbrktbrk: '\\u23B6',\n\tbcong: '\\u224C',\n\tBcy: '\\u0411',\n\tbcy: '\\u0431',\n\tbdquo: '\\u201E',\n\tbecaus: '\\u2235',\n\tBecause: '\\u2235',\n\tbecause: '\\u2235',\n\tbemptyv: '\\u29B0',\n\tbepsi: '\\u03F6',\n\tbernou: '\\u212C',\n\tBernoullis: '\\u212C',\n\tBeta: '\\u0392',\n\tbeta: '\\u03B2',\n\tbeth: '\\u2136',\n\tbetween: '\\u226C',\n\tBfr: '\\uD835\\uDD05',\n\tbfr: '\\uD835\\uDD1F',\n\tbigcap: '\\u22C2',\n\tbigcirc: '\\u25EF',\n\tbigcup: '\\u22C3',\n\tbigodot: '\\u2A00',\n\tbigoplus: '\\u2A01',\n\tbigotimes: '\\u2A02',\n\tbigsqcup: '\\u2A06',\n\tbigstar: '\\u2605',\n\tbigtriangledown: '\\u25BD',\n\tbigtriangleup: '\\u25B3',\n\tbiguplus: '\\u2A04',\n\tbigvee: '\\u22C1',\n\tbigwedge: '\\u22C0',\n\tbkarow: '\\u290D',\n\tblacklozenge: '\\u29EB',\n\tblacksquare: '\\u25AA',\n\tblacktriangle: '\\u25B4',\n\tblacktriangledown: '\\u25BE',\n\tblacktriangleleft: '\\u25C2',\n\tblacktriangleright: '\\u25B8',\n\tblank: '\\u2423',\n\tblk12: '\\u2592',\n\tblk14: '\\u2591',\n\tblk34: '\\u2593',\n\tblock: '\\u2588',\n\tbne: '\\u003D\\u20E5',\n\tbnequiv: '\\u2261\\u20E5',\n\tbNot: '\\u2AED',\n\tbnot: '\\u2310',\n\tBopf: '\\uD835\\uDD39',\n\tbopf: '\\uD835\\uDD53',\n\tbot: '\\u22A5',\n\tbottom: '\\u22A5',\n\tbowtie: '\\u22C8',\n\tboxbox: '\\u29C9',\n\tboxDL: '\\u2557',\n\tboxDl: '\\u2556',\n\tboxdL: '\\u2555',\n\tboxdl: '\\u2510',\n\tboxDR: '\\u2554',\n\tboxDr: '\\u2553',\n\tboxdR: '\\u2552',\n\tboxdr: '\\u250C',\n\tboxH: '\\u2550',\n\tboxh: '\\u2500',\n\tboxHD: '\\u2566',\n\tboxHd: '\\u2564',\n\tboxhD: '\\u2565',\n\tboxhd: '\\u252C',\n\tboxHU: '\\u2569',\n\tboxHu: '\\u2567',\n\tboxhU: '\\u2568',\n\tboxhu: '\\u2534',\n\tboxminus: '\\u229F',\n\tboxplus: '\\u229E',\n\tboxtimes: '\\u22A0',\n\tboxUL: '\\u255D',\n\tboxUl: '\\u255C',\n\tboxuL: '\\u255B',\n\tboxul: '\\u2518',\n\tboxUR: '\\u255A',\n\tboxUr: '\\u2559',\n\tboxuR: '\\u2558',\n\tboxur: '\\u2514',\n\tboxV: '\\u2551',\n\tboxv: '\\u2502',\n\tboxVH: '\\u256C',\n\tboxVh: '\\u256B',\n\tboxvH: '\\u256A',\n\tboxvh: '\\u253C',\n\tboxVL: '\\u2563',\n\tboxVl: '\\u2562',\n\tboxvL: '\\u2561',\n\tboxvl: '\\u2524',\n\tboxVR: '\\u2560',\n\tboxVr: '\\u255F',\n\tboxvR: '\\u255E',\n\tboxvr: '\\u251C',\n\tbprime: '\\u2035',\n\tBreve: '\\u02D8',\n\tbreve: '\\u02D8',\n\tbrvbar: '\\u00A6',\n\tBscr: '\\u212C',\n\tbscr: '\\uD835\\uDCB7',\n\tbsemi: '\\u204F',\n\tbsim: '\\u223D',\n\tbsime: '\\u22CD',\n\tbsol: '\\u005C',\n\tbsolb: '\\u29C5',\n\tbsolhsub: '\\u27C8',\n\tbull: '\\u2022',\n\tbullet: '\\u2022',\n\tbump: '\\u224E',\n\tbumpE: '\\u2AAE',\n\tbumpe: '\\u224F',\n\tBumpeq: '\\u224E',\n\tbumpeq: '\\u224F',\n\tCacute: '\\u0106',\n\tcacute: '\\u0107',\n\tCap: '\\u22D2',\n\tcap: '\\u2229',\n\tcapand: '\\u2A44',\n\tcapbrcup: '\\u2A49',\n\tcapcap: '\\u2A4B',\n\tcapcup: '\\u2A47',\n\tcapdot: '\\u2A40',\n\tCapitalDifferentialD: '\\u2145',\n\tcaps: '\\u2229\\uFE00',\n\tcaret: '\\u2041',\n\tcaron: '\\u02C7',\n\tCayleys: '\\u212D',\n\tccaps: '\\u2A4D',\n\tCcaron: '\\u010C',\n\tccaron: '\\u010D',\n\tCcedil: '\\u00C7',\n\tccedil: '\\u00E7',\n\tCcirc: '\\u0108',\n\tccirc: '\\u0109',\n\tCconint: '\\u2230',\n\tccups: '\\u2A4C',\n\tccupssm: '\\u2A50',\n\tCdot: '\\u010A',\n\tcdot: '\\u010B',\n\tcedil: '\\u00B8',\n\tCedilla: '\\u00B8',\n\tcemptyv: '\\u29B2',\n\tcent: '\\u00A2',\n\tCenterDot: '\\u00B7',\n\tcenterdot: '\\u00B7',\n\tCfr: '\\u212D',\n\tcfr: '\\uD835\\uDD20',\n\tCHcy: '\\u0427',\n\tchcy: '\\u0447',\n\tcheck: '\\u2713',\n\tcheckmark: '\\u2713',\n\tChi: '\\u03A7',\n\tchi: '\\u03C7',\n\tcir: '\\u25CB',\n\tcirc: '\\u02C6',\n\tcirceq: '\\u2257',\n\tcirclearrowleft: '\\u21BA',\n\tcirclearrowright: '\\u21BB',\n\tcircledast: '\\u229B',\n\tcircledcirc: '\\u229A',\n\tcircleddash: '\\u229D',\n\tCircleDot: '\\u2299',\n\tcircledR: '\\u00AE',\n\tcircledS: '\\u24C8',\n\tCircleMinus: '\\u2296',\n\tCirclePlus: '\\u2295',\n\tCircleTimes: '\\u2297',\n\tcirE: '\\u29C3',\n\tcire: '\\u2257',\n\tcirfnint: '\\u2A10',\n\tcirmid: '\\u2AEF',\n\tcirscir: '\\u29C2',\n\tClockwiseContourIntegral: '\\u2232',\n\tCloseCurlyDoubleQuote: '\\u201D',\n\tCloseCurlyQuote: '\\u2019',\n\tclubs: '\\u2663',\n\tclubsuit: '\\u2663',\n\tColon: '\\u2237',\n\tcolon: '\\u003A',\n\tColone: '\\u2A74',\n\tcolone: '\\u2254',\n\tcoloneq: '\\u2254',\n\tcomma: '\\u002C',\n\tcommat: '\\u0040',\n\tcomp: '\\u2201',\n\tcompfn: '\\u2218',\n\tcomplement: '\\u2201',\n\tcomplexes: '\\u2102',\n\tcong: '\\u2245',\n\tcongdot: '\\u2A6D',\n\tCongruent: '\\u2261',\n\tConint: '\\u222F',\n\tconint: '\\u222E',\n\tContourIntegral: '\\u222E',\n\tCopf: '\\u2102',\n\tcopf: '\\uD835\\uDD54',\n\tcoprod: '\\u2210',\n\tCoproduct: '\\u2210',\n\tCOPY: '\\u00A9',\n\tcopy: '\\u00A9',\n\tcopysr: '\\u2117',\n\tCounterClockwiseContourIntegral: '\\u2233',\n\tcrarr: '\\u21B5',\n\tCross: '\\u2A2F',\n\tcross: '\\u2717',\n\tCscr: '\\uD835\\uDC9E',\n\tcscr: '\\uD835\\uDCB8',\n\tcsub: '\\u2ACF',\n\tcsube: '\\u2AD1',\n\tcsup: '\\u2AD0',\n\tcsupe: '\\u2AD2',\n\tctdot: '\\u22EF',\n\tcudarrl: '\\u2938',\n\tcudarrr: '\\u2935',\n\tcuepr: '\\u22DE',\n\tcuesc: '\\u22DF',\n\tcularr: '\\u21B6',\n\tcularrp: '\\u293D',\n\tCup: '\\u22D3',\n\tcup: '\\u222A',\n\tcupbrcap: '\\u2A48',\n\tCupCap: '\\u224D',\n\tcupcap: '\\u2A46',\n\tcupcup: '\\u2A4A',\n\tcupdot: '\\u228D',\n\tcupor: '\\u2A45',\n\tcups: '\\u222A\\uFE00',\n\tcurarr: '\\u21B7',\n\tcurarrm: '\\u293C',\n\tcurlyeqprec: '\\u22DE',\n\tcurlyeqsucc: '\\u22DF',\n\tcurlyvee: '\\u22CE',\n\tcurlywedge: '\\u22CF',\n\tcurren: '\\u00A4',\n\tcurvearrowleft: '\\u21B6',\n\tcurvearrowright: '\\u21B7',\n\tcuvee: '\\u22CE',\n\tcuwed: '\\u22CF',\n\tcwconint: '\\u2232',\n\tcwint: '\\u2231',\n\tcylcty: '\\u232D',\n\tDagger: '\\u2021',\n\tdagger: '\\u2020',\n\tdaleth: '\\u2138',\n\tDarr: '\\u21A1',\n\tdArr: '\\u21D3',\n\tdarr: '\\u2193',\n\tdash: '\\u2010',\n\tDashv: '\\u2AE4',\n\tdashv: '\\u22A3',\n\tdbkarow: '\\u290F',\n\tdblac: '\\u02DD',\n\tDcaron: '\\u010E',\n\tdcaron: '\\u010F',\n\tDcy: '\\u0414',\n\tdcy: '\\u0434',\n\tDD: '\\u2145',\n\tdd: '\\u2146',\n\tddagger: '\\u2021',\n\tddarr: '\\u21CA',\n\tDDotrahd: '\\u2911',\n\tddotseq: '\\u2A77',\n\tdeg: '\\u00B0',\n\tDel: '\\u2207',\n\tDelta: '\\u0394',\n\tdelta: '\\u03B4',\n\tdemptyv: '\\u29B1',\n\tdfisht: '\\u297F',\n\tDfr: '\\uD835\\uDD07',\n\tdfr: '\\uD835\\uDD21',\n\tdHar: '\\u2965',\n\tdharl: '\\u21C3',\n\tdharr: '\\u21C2',\n\tDiacriticalAcute: '\\u00B4',\n\tDiacriticalDot: '\\u02D9',\n\tDiacriticalDoubleAcute: '\\u02DD',\n\tDiacriticalGrave: '\\u0060',\n\tDiacriticalTilde: '\\u02DC',\n\tdiam: '\\u22C4',\n\tDiamond: '\\u22C4',\n\tdiamond: '\\u22C4',\n\tdiamondsuit: '\\u2666',\n\tdiams: '\\u2666',\n\tdie: '\\u00A8',\n\tDifferentialD: '\\u2146',\n\tdigamma: '\\u03DD',\n\tdisin: '\\u22F2',\n\tdiv: '\\u00F7',\n\tdivide: '\\u00F7',\n\tdivideontimes: '\\u22C7',\n\tdivonx: '\\u22C7',\n\tDJcy: '\\u0402',\n\tdjcy: '\\u0452',\n\tdlcorn: '\\u231E',\n\tdlcrop: '\\u230D',\n\tdollar: '\\u0024',\n\tDopf: '\\uD835\\uDD3B',\n\tdopf: '\\uD835\\uDD55',\n\tDot: '\\u00A8',\n\tdot: '\\u02D9',\n\tDotDot: '\\u20DC',\n\tdoteq: '\\u2250',\n\tdoteqdot: '\\u2251',\n\tDotEqual: '\\u2250',\n\tdotminus: '\\u2238',\n\tdotplus: '\\u2214',\n\tdotsquare: '\\u22A1',\n\tdoublebarwedge: '\\u2306',\n\tDoubleContourIntegral: '\\u222F',\n\tDoubleDot: '\\u00A8',\n\tDoubleDownArrow: '\\u21D3',\n\tDoubleLeftArrow: '\\u21D0',\n\tDoubleLeftRightArrow: '\\u21D4',\n\tDoubleLeftTee: '\\u2AE4',\n\tDoubleLongLeftArrow: '\\u27F8',\n\tDoubleLongLeftRightArrow: '\\u27FA',\n\tDoubleLongRightArrow: '\\u27F9',\n\tDoubleRightArrow: '\\u21D2',\n\tDoubleRightTee: '\\u22A8',\n\tDoubleUpArrow: '\\u21D1',\n\tDoubleUpDownArrow: '\\u21D5',\n\tDoubleVerticalBar: '\\u2225',\n\tDownArrow: '\\u2193',\n\tDownarrow: '\\u21D3',\n\tdownarrow: '\\u2193',\n\tDownArrowBar: '\\u2913',\n\tDownArrowUpArrow: '\\u21F5',\n\tDownBreve: '\\u0311',\n\tdowndownarrows: '\\u21CA',\n\tdownharpoonleft: '\\u21C3',\n\tdownharpoonright: '\\u21C2',\n\tDownLeftRightVector: '\\u2950',\n\tDownLeftTeeVector: '\\u295E',\n\tDownLeftVector: '\\u21BD',\n\tDownLeftVectorBar: '\\u2956',\n\tDownRightTeeVector: '\\u295F',\n\tDownRightVector: '\\u21C1',\n\tDownRightVectorBar: '\\u2957',\n\tDownTee: '\\u22A4',\n\tDownTeeArrow: '\\u21A7',\n\tdrbkarow: '\\u2910',\n\tdrcorn: '\\u231F',\n\tdrcrop: '\\u230C',\n\tDscr: '\\uD835\\uDC9F',\n\tdscr: '\\uD835\\uDCB9',\n\tDScy: '\\u0405',\n\tdscy: '\\u0455',\n\tdsol: '\\u29F6',\n\tDstrok: '\\u0110',\n\tdstrok: '\\u0111',\n\tdtdot: '\\u22F1',\n\tdtri: '\\u25BF',\n\tdtrif: '\\u25BE',\n\tduarr: '\\u21F5',\n\tduhar: '\\u296F',\n\tdwangle: '\\u29A6',\n\tDZcy: '\\u040F',\n\tdzcy: '\\u045F',\n\tdzigrarr: '\\u27FF',\n\tEacute: '\\u00C9',\n\teacute: '\\u00E9',\n\teaster: '\\u2A6E',\n\tEcaron: '\\u011A',\n\tecaron: '\\u011B',\n\tecir: '\\u2256',\n\tEcirc: '\\u00CA',\n\tecirc: '\\u00EA',\n\tecolon: '\\u2255',\n\tEcy: '\\u042D',\n\tecy: '\\u044D',\n\teDDot: '\\u2A77',\n\tEdot: '\\u0116',\n\teDot: '\\u2251',\n\tedot: '\\u0117',\n\tee: '\\u2147',\n\tefDot: '\\u2252',\n\tEfr: '\\uD835\\uDD08',\n\tefr: '\\uD835\\uDD22',\n\teg: '\\u2A9A',\n\tEgrave: '\\u00C8',\n\tegrave: '\\u00E8',\n\tegs: '\\u2A96',\n\tegsdot: '\\u2A98',\n\tel: '\\u2A99',\n\tElement: '\\u2208',\n\telinters: '\\u23E7',\n\tell: '\\u2113',\n\tels: '\\u2A95',\n\telsdot: '\\u2A97',\n\tEmacr: '\\u0112',\n\temacr: '\\u0113',\n\tempty: '\\u2205',\n\temptyset: '\\u2205',\n\tEmptySmallSquare: '\\u25FB',\n\temptyv: '\\u2205',\n\tEmptyVerySmallSquare: '\\u25AB',\n\temsp: '\\u2003',\n\temsp13: '\\u2004',\n\temsp14: '\\u2005',\n\tENG: '\\u014A',\n\teng: '\\u014B',\n\tensp: '\\u2002',\n\tEogon: '\\u0118',\n\teogon: '\\u0119',\n\tEopf: '\\uD835\\uDD3C',\n\teopf: '\\uD835\\uDD56',\n\tepar: '\\u22D5',\n\teparsl: '\\u29E3',\n\teplus: '\\u2A71',\n\tepsi: '\\u03B5',\n\tEpsilon: '\\u0395',\n\tepsilon: '\\u03B5',\n\tepsiv: '\\u03F5',\n\teqcirc: '\\u2256',\n\teqcolon: '\\u2255',\n\teqsim: '\\u2242',\n\teqslantgtr: '\\u2A96',\n\teqslantless: '\\u2A95',\n\tEqual: '\\u2A75',\n\tequals: '\\u003D',\n\tEqualTilde: '\\u2242',\n\tequest: '\\u225F',\n\tEquilibrium: '\\u21CC',\n\tequiv: '\\u2261',\n\tequivDD: '\\u2A78',\n\teqvparsl: '\\u29E5',\n\terarr: '\\u2971',\n\terDot: '\\u2253',\n\tEscr: '\\u2130',\n\tescr: '\\u212F',\n\tesdot: '\\u2250',\n\tEsim: '\\u2A73',\n\tesim: '\\u2242',\n\tEta: '\\u0397',\n\teta: '\\u03B7',\n\tETH: '\\u00D0',\n\teth: '\\u00F0',\n\tEuml: '\\u00CB',\n\teuml: '\\u00EB',\n\teuro: '\\u20AC',\n\texcl: '\\u0021',\n\texist: '\\u2203',\n\tExists: '\\u2203',\n\texpectation: '\\u2130',\n\tExponentialE: '\\u2147',\n\texponentiale: '\\u2147',\n\tfallingdotseq: '\\u2252',\n\tFcy: '\\u0424',\n\tfcy: '\\u0444',\n\tfemale: '\\u2640',\n\tffilig: '\\uFB03',\n\tfflig: '\\uFB00',\n\tffllig: '\\uFB04',\n\tFfr: '\\uD835\\uDD09',\n\tffr: '\\uD835\\uDD23',\n\tfilig: '\\uFB01',\n\tFilledSmallSquare: '\\u25FC',\n\tFilledVerySmallSquare: '\\u25AA',\n\tfjlig: '\\u0066\\u006A',\n\tflat: '\\u266D',\n\tfllig: '\\uFB02',\n\tfltns: '\\u25B1',\n\tfnof: '\\u0192',\n\tFopf: '\\uD835\\uDD3D',\n\tfopf: '\\uD835\\uDD57',\n\tForAll: '\\u2200',\n\tforall: '\\u2200',\n\tfork: '\\u22D4',\n\tforkv: '\\u2AD9',\n\tFouriertrf: '\\u2131',\n\tfpartint: '\\u2A0D',\n\tfrac12: '\\u00BD',\n\tfrac13: '\\u2153',\n\tfrac14: '\\u00BC',\n\tfrac15: '\\u2155',\n\tfrac16: '\\u2159',\n\tfrac18: '\\u215B',\n\tfrac23: '\\u2154',\n\tfrac25: '\\u2156',\n\tfrac34: '\\u00BE',\n\tfrac35: '\\u2157',\n\tfrac38: '\\u215C',\n\tfrac45: '\\u2158',\n\tfrac56: '\\u215A',\n\tfrac58: '\\u215D',\n\tfrac78: '\\u215E',\n\tfrasl: '\\u2044',\n\tfrown: '\\u2322',\n\tFscr: '\\u2131',\n\tfscr: '\\uD835\\uDCBB',\n\tgacute: '\\u01F5',\n\tGamma: '\\u0393',\n\tgamma: '\\u03B3',\n\tGammad: '\\u03DC',\n\tgammad: '\\u03DD',\n\tgap: '\\u2A86',\n\tGbreve: '\\u011E',\n\tgbreve: '\\u011F',\n\tGcedil: '\\u0122',\n\tGcirc: '\\u011C',\n\tgcirc: '\\u011D',\n\tGcy: '\\u0413',\n\tgcy: '\\u0433',\n\tGdot: '\\u0120',\n\tgdot: '\\u0121',\n\tgE: '\\u2267',\n\tge: '\\u2265',\n\tgEl: '\\u2A8C',\n\tgel: '\\u22DB',\n\tgeq: '\\u2265',\n\tgeqq: '\\u2267',\n\tgeqslant: '\\u2A7E',\n\tges: '\\u2A7E',\n\tgescc: '\\u2AA9',\n\tgesdot: '\\u2A80',\n\tgesdoto: '\\u2A82',\n\tgesdotol: '\\u2A84',\n\tgesl: '\\u22DB\\uFE00',\n\tgesles: '\\u2A94',\n\tGfr: '\\uD835\\uDD0A',\n\tgfr: '\\uD835\\uDD24',\n\tGg: '\\u22D9',\n\tgg: '\\u226B',\n\tggg: '\\u22D9',\n\tgimel: '\\u2137',\n\tGJcy: '\\u0403',\n\tgjcy: '\\u0453',\n\tgl: '\\u2277',\n\tgla: '\\u2AA5',\n\tglE: '\\u2A92',\n\tglj: '\\u2AA4',\n\tgnap: '\\u2A8A',\n\tgnapprox: '\\u2A8A',\n\tgnE: '\\u2269',\n\tgne: '\\u2A88',\n\tgneq: '\\u2A88',\n\tgneqq: '\\u2269',\n\tgnsim: '\\u22E7',\n\tGopf: '\\uD835\\uDD3E',\n\tgopf: '\\uD835\\uDD58',\n\tgrave: '\\u0060',\n\tGreaterEqual: '\\u2265',\n\tGreaterEqualLess: '\\u22DB',\n\tGreaterFullEqual: '\\u2267',\n\tGreaterGreater: '\\u2AA2',\n\tGreaterLess: '\\u2277',\n\tGreaterSlantEqual: '\\u2A7E',\n\tGreaterTilde: '\\u2273',\n\tGscr: '\\uD835\\uDCA2',\n\tgscr: '\\u210A',\n\tgsim: '\\u2273',\n\tgsime: '\\u2A8E',\n\tgsiml: '\\u2A90',\n\tGt: '\\u226B',\n\tGT: '\\u003E',\n\tgt: '\\u003E',\n\tgtcc: '\\u2AA7',\n\tgtcir: '\\u2A7A',\n\tgtdot: '\\u22D7',\n\tgtlPar: '\\u2995',\n\tgtquest: '\\u2A7C',\n\tgtrapprox: '\\u2A86',\n\tgtrarr: '\\u2978',\n\tgtrdot: '\\u22D7',\n\tgtreqless: '\\u22DB',\n\tgtreqqless: '\\u2A8C',\n\tgtrless: '\\u2277',\n\tgtrsim: '\\u2273',\n\tgvertneqq: '\\u2269\\uFE00',\n\tgvnE: '\\u2269\\uFE00',\n\tHacek: '\\u02C7',\n\thairsp: '\\u200A',\n\thalf: '\\u00BD',\n\thamilt: '\\u210B',\n\tHARDcy: '\\u042A',\n\thardcy: '\\u044A',\n\thArr: '\\u21D4',\n\tharr: '\\u2194',\n\tharrcir: '\\u2948',\n\tharrw: '\\u21AD',\n\tHat: '\\u005E',\n\thbar: '\\u210F',\n\tHcirc: '\\u0124',\n\thcirc: '\\u0125',\n\thearts: '\\u2665',\n\theartsuit: '\\u2665',\n\thellip: '\\u2026',\n\thercon: '\\u22B9',\n\tHfr: '\\u210C',\n\thfr: '\\uD835\\uDD25',\n\tHilbertSpace: '\\u210B',\n\thksearow: '\\u2925',\n\thkswarow: '\\u2926',\n\thoarr: '\\u21FF',\n\thomtht: '\\u223B',\n\thookleftarrow: '\\u21A9',\n\thookrightarrow: '\\u21AA',\n\tHopf: '\\u210D',\n\thopf: '\\uD835\\uDD59',\n\thorbar: '\\u2015',\n\tHorizontalLine: '\\u2500',\n\tHscr: '\\u210B',\n\thscr: '\\uD835\\uDCBD',\n\thslash: '\\u210F',\n\tHstrok: '\\u0126',\n\thstrok: '\\u0127',\n\tHumpDownHump: '\\u224E',\n\tHumpEqual: '\\u224F',\n\thybull: '\\u2043',\n\thyphen: '\\u2010',\n\tIacute: '\\u00CD',\n\tiacute: '\\u00ED',\n\tic: '\\u2063',\n\tIcirc: '\\u00CE',\n\ticirc: '\\u00EE',\n\tIcy: '\\u0418',\n\ticy: '\\u0438',\n\tIdot: '\\u0130',\n\tIEcy: '\\u0415',\n\tiecy: '\\u0435',\n\tiexcl: '\\u00A1',\n\tiff: '\\u21D4',\n\tIfr: '\\u2111',\n\tifr: '\\uD835\\uDD26',\n\tIgrave: '\\u00CC',\n\tigrave: '\\u00EC',\n\tii: '\\u2148',\n\tiiiint: '\\u2A0C',\n\tiiint: '\\u222D',\n\tiinfin: '\\u29DC',\n\tiiota: '\\u2129',\n\tIJlig: '\\u0132',\n\tijlig: '\\u0133',\n\tIm: '\\u2111',\n\tImacr: '\\u012A',\n\timacr: '\\u012B',\n\timage: '\\u2111',\n\tImaginaryI: '\\u2148',\n\timagline: '\\u2110',\n\timagpart: '\\u2111',\n\timath: '\\u0131',\n\timof: '\\u22B7',\n\timped: '\\u01B5',\n\tImplies: '\\u21D2',\n\tin: '\\u2208',\n\tincare: '\\u2105',\n\tinfin: '\\u221E',\n\tinfintie: '\\u29DD',\n\tinodot: '\\u0131',\n\tInt: '\\u222C',\n\tint: '\\u222B',\n\tintcal: '\\u22BA',\n\tintegers: '\\u2124',\n\tIntegral: '\\u222B',\n\tintercal: '\\u22BA',\n\tIntersection: '\\u22C2',\n\tintlarhk: '\\u2A17',\n\tintprod: '\\u2A3C',\n\tInvisibleComma: '\\u2063',\n\tInvisibleTimes: '\\u2062',\n\tIOcy: '\\u0401',\n\tiocy: '\\u0451',\n\tIogon: '\\u012E',\n\tiogon: '\\u012F',\n\tIopf: '\\uD835\\uDD40',\n\tiopf: '\\uD835\\uDD5A',\n\tIota: '\\u0399',\n\tiota: '\\u03B9',\n\tiprod: '\\u2A3C',\n\tiquest: '\\u00BF',\n\tIscr: '\\u2110',\n\tiscr: '\\uD835\\uDCBE',\n\tisin: '\\u2208',\n\tisindot: '\\u22F5',\n\tisinE: '\\u22F9',\n\tisins: '\\u22F4',\n\tisinsv: '\\u22F3',\n\tisinv: '\\u2208',\n\tit: '\\u2062',\n\tItilde: '\\u0128',\n\titilde: '\\u0129',\n\tIukcy: '\\u0406',\n\tiukcy: '\\u0456',\n\tIuml: '\\u00CF',\n\tiuml: '\\u00EF',\n\tJcirc: '\\u0134',\n\tjcirc: '\\u0135',\n\tJcy: '\\u0419',\n\tjcy: '\\u0439',\n\tJfr: '\\uD835\\uDD0D',\n\tjfr: '\\uD835\\uDD27',\n\tjmath: '\\u0237',\n\tJopf: '\\uD835\\uDD41',\n\tjopf: '\\uD835\\uDD5B',\n\tJscr: '\\uD835\\uDCA5',\n\tjscr: '\\uD835\\uDCBF',\n\tJsercy: '\\u0408',\n\tjsercy: '\\u0458',\n\tJukcy: '\\u0404',\n\tjukcy: '\\u0454',\n\tKappa: '\\u039A',\n\tkappa: '\\u03BA',\n\tkappav: '\\u03F0',\n\tKcedil: '\\u0136',\n\tkcedil: '\\u0137',\n\tKcy: '\\u041A',\n\tkcy: '\\u043A',\n\tKfr: '\\uD835\\uDD0E',\n\tkfr: '\\uD835\\uDD28',\n\tkgreen: '\\u0138',\n\tKHcy: '\\u0425',\n\tkhcy: '\\u0445',\n\tKJcy: '\\u040C',\n\tkjcy: '\\u045C',\n\tKopf: '\\uD835\\uDD42',\n\tkopf: '\\uD835\\uDD5C',\n\tKscr: '\\uD835\\uDCA6',\n\tkscr: '\\uD835\\uDCC0',\n\tlAarr: '\\u21DA',\n\tLacute: '\\u0139',\n\tlacute: '\\u013A',\n\tlaemptyv: '\\u29B4',\n\tlagran: '\\u2112',\n\tLambda: '\\u039B',\n\tlambda: '\\u03BB',\n\tLang: '\\u27EA',\n\tlang: '\\u27E8',\n\tlangd: '\\u2991',\n\tlangle: '\\u27E8',\n\tlap: '\\u2A85',\n\tLaplacetrf: '\\u2112',\n\tlaquo: '\\u00AB',\n\tLarr: '\\u219E',\n\tlArr: '\\u21D0',\n\tlarr: '\\u2190',\n\tlarrb: '\\u21E4',\n\tlarrbfs: '\\u291F',\n\tlarrfs: '\\u291D',\n\tlarrhk: '\\u21A9',\n\tlarrlp: '\\u21AB',\n\tlarrpl: '\\u2939',\n\tlarrsim: '\\u2973',\n\tlarrtl: '\\u21A2',\n\tlat: '\\u2AAB',\n\tlAtail: '\\u291B',\n\tlatail: '\\u2919',\n\tlate: '\\u2AAD',\n\tlates: '\\u2AAD\\uFE00',\n\tlBarr: '\\u290E',\n\tlbarr: '\\u290C',\n\tlbbrk: '\\u2772',\n\tlbrace: '\\u007B',\n\tlbrack: '\\u005B',\n\tlbrke: '\\u298B',\n\tlbrksld: '\\u298F',\n\tlbrkslu: '\\u298D',\n\tLcaron: '\\u013D',\n\tlcaron: '\\u013E',\n\tLcedil: '\\u013B',\n\tlcedil: '\\u013C',\n\tlceil: '\\u2308',\n\tlcub: '\\u007B',\n\tLcy: '\\u041B',\n\tlcy: '\\u043B',\n\tldca: '\\u2936',\n\tldquo: '\\u201C',\n\tldquor: '\\u201E',\n\tldrdhar: '\\u2967',\n\tldrushar: '\\u294B',\n\tldsh: '\\u21B2',\n\tlE: '\\u2266',\n\tle: '\\u2264',\n\tLeftAngleBracket: '\\u27E8',\n\tLeftArrow: '\\u2190',\n\tLeftarrow: '\\u21D0',\n\tleftarrow: '\\u2190',\n\tLeftArrowBar: '\\u21E4',\n\tLeftArrowRightArrow: '\\u21C6',\n\tleftarrowtail: '\\u21A2',\n\tLeftCeiling: '\\u2308',\n\tLeftDoubleBracket: '\\u27E6',\n\tLeftDownTeeVector: '\\u2961',\n\tLeftDownVector: '\\u21C3',\n\tLeftDownVectorBar: '\\u2959',\n\tLeftFloor: '\\u230A',\n\tleftharpoondown: '\\u21BD',\n\tleftharpoonup: '\\u21BC',\n\tleftleftarrows: '\\u21C7',\n\tLeftRightArrow: '\\u2194',\n\tLeftrightarrow: '\\u21D4',\n\tleftrightarrow: '\\u2194',\n\tleftrightarrows: '\\u21C6',\n\tleftrightharpoons: '\\u21CB',\n\tleftrightsquigarrow: '\\u21AD',\n\tLeftRightVector: '\\u294E',\n\tLeftTee: '\\u22A3',\n\tLeftTeeArrow: '\\u21A4',\n\tLeftTeeVector: '\\u295A',\n\tleftthreetimes: '\\u22CB',\n\tLeftTriangle: '\\u22B2',\n\tLeftTriangleBar: '\\u29CF',\n\tLeftTriangleEqual: '\\u22B4',\n\tLeftUpDownVector: '\\u2951',\n\tLeftUpTeeVector: '\\u2960',\n\tLeftUpVector: '\\u21BF',\n\tLeftUpVectorBar: '\\u2958',\n\tLeftVector: '\\u21BC',\n\tLeftVectorBar: '\\u2952',\n\tlEg: '\\u2A8B',\n\tleg: '\\u22DA',\n\tleq: '\\u2264',\n\tleqq: '\\u2266',\n\tleqslant: '\\u2A7D',\n\tles: '\\u2A7D',\n\tlescc: '\\u2AA8',\n\tlesdot: '\\u2A7F',\n\tlesdoto: '\\u2A81',\n\tlesdotor: '\\u2A83',\n\tlesg: '\\u22DA\\uFE00',\n\tlesges: '\\u2A93',\n\tlessapprox: '\\u2A85',\n\tlessdot: '\\u22D6',\n\tlesseqgtr: '\\u22DA',\n\tlesseqqgtr: '\\u2A8B',\n\tLessEqualGreater: '\\u22DA',\n\tLessFullEqual: '\\u2266',\n\tLessGreater: '\\u2276',\n\tlessgtr: '\\u2276',\n\tLessLess: '\\u2AA1',\n\tlesssim: '\\u2272',\n\tLessSlantEqual: '\\u2A7D',\n\tLessTilde: '\\u2272',\n\tlfisht: '\\u297C',\n\tlfloor: '\\u230A',\n\tLfr: '\\uD835\\uDD0F',\n\tlfr: '\\uD835\\uDD29',\n\tlg: '\\u2276',\n\tlgE: '\\u2A91',\n\tlHar: '\\u2962',\n\tlhard: '\\u21BD',\n\tlharu: '\\u21BC',\n\tlharul: '\\u296A',\n\tlhblk: '\\u2584',\n\tLJcy: '\\u0409',\n\tljcy: '\\u0459',\n\tLl: '\\u22D8',\n\tll: '\\u226A',\n\tllarr: '\\u21C7',\n\tllcorner: '\\u231E',\n\tLleftarrow: '\\u21DA',\n\tllhard: '\\u296B',\n\tlltri: '\\u25FA',\n\tLmidot: '\\u013F',\n\tlmidot: '\\u0140',\n\tlmoust: '\\u23B0',\n\tlmoustache: '\\u23B0',\n\tlnap: '\\u2A89',\n\tlnapprox: '\\u2A89',\n\tlnE: '\\u2268',\n\tlne: '\\u2A87',\n\tlneq: '\\u2A87',\n\tlneqq: '\\u2268',\n\tlnsim: '\\u22E6',\n\tloang: '\\u27EC',\n\tloarr: '\\u21FD',\n\tlobrk: '\\u27E6',\n\tLongLeftArrow: '\\u27F5',\n\tLongleftarrow: '\\u27F8',\n\tlongleftarrow: '\\u27F5',\n\tLongLeftRightArrow: '\\u27F7',\n\tLongleftrightarrow: '\\u27FA',\n\tlongleftrightarrow: '\\u27F7',\n\tlongmapsto: '\\u27FC',\n\tLongRightArrow: '\\u27F6',\n\tLongrightarrow: '\\u27F9',\n\tlongrightarrow: '\\u27F6',\n\tlooparrowleft: '\\u21AB',\n\tlooparrowright: '\\u21AC',\n\tlopar: '\\u2985',\n\tLopf: '\\uD835\\uDD43',\n\tlopf: '\\uD835\\uDD5D',\n\tloplus: '\\u2A2D',\n\tlotimes: '\\u2A34',\n\tlowast: '\\u2217',\n\tlowbar: '\\u005F',\n\tLowerLeftArrow: '\\u2199',\n\tLowerRightArrow: '\\u2198',\n\tloz: '\\u25CA',\n\tlozenge: '\\u25CA',\n\tlozf: '\\u29EB',\n\tlpar: '\\u0028',\n\tlparlt: '\\u2993',\n\tlrarr: '\\u21C6',\n\tlrcorner: '\\u231F',\n\tlrhar: '\\u21CB',\n\tlrhard: '\\u296D',\n\tlrm: '\\u200E',\n\tlrtri: '\\u22BF',\n\tlsaquo: '\\u2039',\n\tLscr: '\\u2112',\n\tlscr: '\\uD835\\uDCC1',\n\tLsh: '\\u21B0',\n\tlsh: '\\u21B0',\n\tlsim: '\\u2272',\n\tlsime: '\\u2A8D',\n\tlsimg: '\\u2A8F',\n\tlsqb: '\\u005B',\n\tlsquo: '\\u2018',\n\tlsquor: '\\u201A',\n\tLstrok: '\\u0141',\n\tlstrok: '\\u0142',\n\tLt: '\\u226A',\n\tLT: '\\u003C',\n\tlt: '\\u003C',\n\tltcc: '\\u2AA6',\n\tltcir: '\\u2A79',\n\tltdot: '\\u22D6',\n\tlthree: '\\u22CB',\n\tltimes: '\\u22C9',\n\tltlarr: '\\u2976',\n\tltquest: '\\u2A7B',\n\tltri: '\\u25C3',\n\tltrie: '\\u22B4',\n\tltrif: '\\u25C2',\n\tltrPar: '\\u2996',\n\tlurdshar: '\\u294A',\n\tluruhar: '\\u2966',\n\tlvertneqq: '\\u2268\\uFE00',\n\tlvnE: '\\u2268\\uFE00',\n\tmacr: '\\u00AF',\n\tmale: '\\u2642',\n\tmalt: '\\u2720',\n\tmaltese: '\\u2720',\n\tMap: '\\u2905',\n\tmap: '\\u21A6',\n\tmapsto: '\\u21A6',\n\tmapstodown: '\\u21A7',\n\tmapstoleft: '\\u21A4',\n\tmapstoup: '\\u21A5',\n\tmarker: '\\u25AE',\n\tmcomma: '\\u2A29',\n\tMcy: '\\u041C',\n\tmcy: '\\u043C',\n\tmdash: '\\u2014',\n\tmDDot: '\\u223A',\n\tmeasuredangle: '\\u2221',\n\tMediumSpace: '\\u205F',\n\tMellintrf: '\\u2133',\n\tMfr: '\\uD835\\uDD10',\n\tmfr: '\\uD835\\uDD2A',\n\tmho: '\\u2127',\n\tmicro: '\\u00B5',\n\tmid: '\\u2223',\n\tmidast: '\\u002A',\n\tmidcir: '\\u2AF0',\n\tmiddot: '\\u00B7',\n\tminus: '\\u2212',\n\tminusb: '\\u229F',\n\tminusd: '\\u2238',\n\tminusdu: '\\u2A2A',\n\tMinusPlus: '\\u2213',\n\tmlcp: '\\u2ADB',\n\tmldr: '\\u2026',\n\tmnplus: '\\u2213',\n\tmodels: '\\u22A7',\n\tMopf: '\\uD835\\uDD44',\n\tmopf: '\\uD835\\uDD5E',\n\tmp: '\\u2213',\n\tMscr: '\\u2133',\n\tmscr: '\\uD835\\uDCC2',\n\tmstpos: '\\u223E',\n\tMu: '\\u039C',\n\tmu: '\\u03BC',\n\tmultimap: '\\u22B8',\n\tmumap: '\\u22B8',\n\tnabla: '\\u2207',\n\tNacute: '\\u0143',\n\tnacute: '\\u0144',\n\tnang: '\\u2220\\u20D2',\n\tnap: '\\u2249',\n\tnapE: '\\u2A70\\u0338',\n\tnapid: '\\u224B\\u0338',\n\tnapos: '\\u0149',\n\tnapprox: '\\u2249',\n\tnatur: '\\u266E',\n\tnatural: '\\u266E',\n\tnaturals: '\\u2115',\n\tnbsp: '\\u00A0',\n\tnbump: '\\u224E\\u0338',\n\tnbumpe: '\\u224F\\u0338',\n\tncap: '\\u2A43',\n\tNcaron: '\\u0147',\n\tncaron: '\\u0148',\n\tNcedil: '\\u0145',\n\tncedil: '\\u0146',\n\tncong: '\\u2247',\n\tncongdot: '\\u2A6D\\u0338',\n\tncup: '\\u2A42',\n\tNcy: '\\u041D',\n\tncy: '\\u043D',\n\tndash: '\\u2013',\n\tne: '\\u2260',\n\tnearhk: '\\u2924',\n\tneArr: '\\u21D7',\n\tnearr: '\\u2197',\n\tnearrow: '\\u2197',\n\tnedot: '\\u2250\\u0338',\n\tNegativeMediumSpace: '\\u200B',\n\tNegativeThickSpace: '\\u200B',\n\tNegativeThinSpace: '\\u200B',\n\tNegativeVeryThinSpace: '\\u200B',\n\tnequiv: '\\u2262',\n\tnesear: '\\u2928',\n\tnesim: '\\u2242\\u0338',\n\tNestedGreaterGreater: '\\u226B',\n\tNestedLessLess: '\\u226A',\n\tNewLine: '\\u000A',\n\tnexist: '\\u2204',\n\tnexists: '\\u2204',\n\tNfr: '\\uD835\\uDD11',\n\tnfr: '\\uD835\\uDD2B',\n\tngE: '\\u2267\\u0338',\n\tnge: '\\u2271',\n\tngeq: '\\u2271',\n\tngeqq: '\\u2267\\u0338',\n\tngeqslant: '\\u2A7E\\u0338',\n\tnges: '\\u2A7E\\u0338',\n\tnGg: '\\u22D9\\u0338',\n\tngsim: '\\u2275',\n\tnGt: '\\u226B\\u20D2',\n\tngt: '\\u226F',\n\tngtr: '\\u226F',\n\tnGtv: '\\u226B\\u0338',\n\tnhArr: '\\u21CE',\n\tnharr: '\\u21AE',\n\tnhpar: '\\u2AF2',\n\tni: '\\u220B',\n\tnis: '\\u22FC',\n\tnisd: '\\u22FA',\n\tniv: '\\u220B',\n\tNJcy: '\\u040A',\n\tnjcy: '\\u045A',\n\tnlArr: '\\u21CD',\n\tnlarr: '\\u219A',\n\tnldr: '\\u2025',\n\tnlE: '\\u2266\\u0338',\n\tnle: '\\u2270',\n\tnLeftarrow: '\\u21CD',\n\tnleftarrow: '\\u219A',\n\tnLeftrightarrow: '\\u21CE',\n\tnleftrightarrow: '\\u21AE',\n\tnleq: '\\u2270',\n\tnleqq: '\\u2266\\u0338',\n\tnleqslant: '\\u2A7D\\u0338',\n\tnles: '\\u2A7D\\u0338',\n\tnless: '\\u226E',\n\tnLl: '\\u22D8\\u0338',\n\tnlsim: '\\u2274',\n\tnLt: '\\u226A\\u20D2',\n\tnlt: '\\u226E',\n\tnltri: '\\u22EA',\n\tnltrie: '\\u22EC',\n\tnLtv: '\\u226A\\u0338',\n\tnmid: '\\u2224',\n\tNoBreak: '\\u2060',\n\tNonBreakingSpace: '\\u00A0',\n\tNopf: '\\u2115',\n\tnopf: '\\uD835\\uDD5F',\n\tNot: '\\u2AEC',\n\tnot: '\\u00AC',\n\tNotCongruent: '\\u2262',\n\tNotCupCap: '\\u226D',\n\tNotDoubleVerticalBar: '\\u2226',\n\tNotElement: '\\u2209',\n\tNotEqual: '\\u2260',\n\tNotEqualTilde: '\\u2242\\u0338',\n\tNotExists: '\\u2204',\n\tNotGreater: '\\u226F',\n\tNotGreaterEqual: '\\u2271',\n\tNotGreaterFullEqual: '\\u2267\\u0338',\n\tNotGreaterGreater: '\\u226B\\u0338',\n\tNotGreaterLess: '\\u2279',\n\tNotGreaterSlantEqual: '\\u2A7E\\u0338',\n\tNotGreaterTilde: '\\u2275',\n\tNotHumpDownHump: '\\u224E\\u0338',\n\tNotHumpEqual: '\\u224F\\u0338',\n\tnotin: '\\u2209',\n\tnotindot: '\\u22F5\\u0338',\n\tnotinE: '\\u22F9\\u0338',\n\tnotinva: '\\u2209',\n\tnotinvb: '\\u22F7',\n\tnotinvc: '\\u22F6',\n\tNotLeftTriangle: '\\u22EA',\n\tNotLeftTriangleBar: '\\u29CF\\u0338',\n\tNotLeftTriangleEqual: '\\u22EC',\n\tNotLess: '\\u226E',\n\tNotLessEqual: '\\u2270',\n\tNotLessGreater: '\\u2278',\n\tNotLessLess: '\\u226A\\u0338',\n\tNotLessSlantEqual: '\\u2A7D\\u0338',\n\tNotLessTilde: '\\u2274',\n\tNotNestedGreaterGreater: '\\u2AA2\\u0338',\n\tNotNestedLessLess: '\\u2AA1\\u0338',\n\tnotni: '\\u220C',\n\tnotniva: '\\u220C',\n\tnotnivb: '\\u22FE',\n\tnotnivc: '\\u22FD',\n\tNotPrecedes: '\\u2280',\n\tNotPrecedesEqual: '\\u2AAF\\u0338',\n\tNotPrecedesSlantEqual: '\\u22E0',\n\tNotReverseElement: '\\u220C',\n\tNotRightTriangle: '\\u22EB',\n\tNotRightTriangleBar: '\\u29D0\\u0338',\n\tNotRightTriangleEqual: '\\u22ED',\n\tNotSquareSubset: '\\u228F\\u0338',\n\tNotSquareSubsetEqual: '\\u22E2',\n\tNotSquareSuperset: '\\u2290\\u0338',\n\tNotSquareSupersetEqual: '\\u22E3',\n\tNotSubset: '\\u2282\\u20D2',\n\tNotSubsetEqual: '\\u2288',\n\tNotSucceeds: '\\u2281',\n\tNotSucceedsEqual: '\\u2AB0\\u0338',\n\tNotSucceedsSlantEqual: '\\u22E1',\n\tNotSucceedsTilde: '\\u227F\\u0338',\n\tNotSuperset: '\\u2283\\u20D2',\n\tNotSupersetEqual: '\\u2289',\n\tNotTilde: '\\u2241',\n\tNotTildeEqual: '\\u2244',\n\tNotTildeFullEqual: '\\u2247',\n\tNotTildeTilde: '\\u2249',\n\tNotVerticalBar: '\\u2224',\n\tnpar: '\\u2226',\n\tnparallel: '\\u2226',\n\tnparsl: '\\u2AFD\\u20E5',\n\tnpart: '\\u2202\\u0338',\n\tnpolint: '\\u2A14',\n\tnpr: '\\u2280',\n\tnprcue: '\\u22E0',\n\tnpre: '\\u2AAF\\u0338',\n\tnprec: '\\u2280',\n\tnpreceq: '\\u2AAF\\u0338',\n\tnrArr: '\\u21CF',\n\tnrarr: '\\u219B',\n\tnrarrc: '\\u2933\\u0338',\n\tnrarrw: '\\u219D\\u0338',\n\tnRightarrow: '\\u21CF',\n\tnrightarrow: '\\u219B',\n\tnrtri: '\\u22EB',\n\tnrtrie: '\\u22ED',\n\tnsc: '\\u2281',\n\tnsccue: '\\u22E1',\n\tnsce: '\\u2AB0\\u0338',\n\tNscr: '\\uD835\\uDCA9',\n\tnscr: '\\uD835\\uDCC3',\n\tnshortmid: '\\u2224',\n\tnshortparallel: '\\u2226',\n\tnsim: '\\u2241',\n\tnsime: '\\u2244',\n\tnsimeq: '\\u2244',\n\tnsmid: '\\u2224',\n\tnspar: '\\u2226',\n\tnsqsube: '\\u22E2',\n\tnsqsupe: '\\u22E3',\n\tnsub: '\\u2284',\n\tnsubE: '\\u2AC5\\u0338',\n\tnsube: '\\u2288',\n\tnsubset: '\\u2282\\u20D2',\n\tnsubseteq: '\\u2288',\n\tnsubseteqq: '\\u2AC5\\u0338',\n\tnsucc: '\\u2281',\n\tnsucceq: '\\u2AB0\\u0338',\n\tnsup: '\\u2285',\n\tnsupE: '\\u2AC6\\u0338',\n\tnsupe: '\\u2289',\n\tnsupset: '\\u2283\\u20D2',\n\tnsupseteq: '\\u2289',\n\tnsupseteqq: '\\u2AC6\\u0338',\n\tntgl: '\\u2279',\n\tNtilde: '\\u00D1',\n\tntilde: '\\u00F1',\n\tntlg: '\\u2278',\n\tntriangleleft: '\\u22EA',\n\tntrianglelefteq: '\\u22EC',\n\tntriangleright: '\\u22EB',\n\tntrianglerighteq: '\\u22ED',\n\tNu: '\\u039D',\n\tnu: '\\u03BD',\n\tnum: '\\u0023',\n\tnumero: '\\u2116',\n\tnumsp: '\\u2007',\n\tnvap: '\\u224D\\u20D2',\n\tnVDash: '\\u22AF',\n\tnVdash: '\\u22AE',\n\tnvDash: '\\u22AD',\n\tnvdash: '\\u22AC',\n\tnvge: '\\u2265\\u20D2',\n\tnvgt: '\\u003E\\u20D2',\n\tnvHarr: '\\u2904',\n\tnvinfin: '\\u29DE',\n\tnvlArr: '\\u2902',\n\tnvle: '\\u2264\\u20D2',\n\tnvlt: '\\u003C\\u20D2',\n\tnvltrie: '\\u22B4\\u20D2',\n\tnvrArr: '\\u2903',\n\tnvrtrie: '\\u22B5\\u20D2',\n\tnvsim: '\\u223C\\u20D2',\n\tnwarhk: '\\u2923',\n\tnwArr: '\\u21D6',\n\tnwarr: '\\u2196',\n\tnwarrow: '\\u2196',\n\tnwnear: '\\u2927',\n\tOacute: '\\u00D3',\n\toacute: '\\u00F3',\n\toast: '\\u229B',\n\tocir: '\\u229A',\n\tOcirc: '\\u00D4',\n\tocirc: '\\u00F4',\n\tOcy: '\\u041E',\n\tocy: '\\u043E',\n\todash: '\\u229D',\n\tOdblac: '\\u0150',\n\todblac: '\\u0151',\n\todiv: '\\u2A38',\n\todot: '\\u2299',\n\todsold: '\\u29BC',\n\tOElig: '\\u0152',\n\toelig: '\\u0153',\n\tofcir: '\\u29BF',\n\tOfr: '\\uD835\\uDD12',\n\tofr: '\\uD835\\uDD2C',\n\togon: '\\u02DB',\n\tOgrave: '\\u00D2',\n\tograve: '\\u00F2',\n\togt: '\\u29C1',\n\tohbar: '\\u29B5',\n\tohm: '\\u03A9',\n\toint: '\\u222E',\n\tolarr: '\\u21BA',\n\tolcir: '\\u29BE',\n\tolcross: '\\u29BB',\n\toline: '\\u203E',\n\tolt: '\\u29C0',\n\tOmacr: '\\u014C',\n\tomacr: '\\u014D',\n\tOmega: '\\u03A9',\n\tomega: '\\u03C9',\n\tOmicron: '\\u039F',\n\tomicron: '\\u03BF',\n\tomid: '\\u29B6',\n\tominus: '\\u2296',\n\tOopf: '\\uD835\\uDD46',\n\toopf: '\\uD835\\uDD60',\n\topar: '\\u29B7',\n\tOpenCurlyDoubleQuote: '\\u201C',\n\tOpenCurlyQuote: '\\u2018',\n\toperp: '\\u29B9',\n\toplus: '\\u2295',\n\tOr: '\\u2A54',\n\tor: '\\u2228',\n\torarr: '\\u21BB',\n\tord: '\\u2A5D',\n\torder: '\\u2134',\n\torderof: '\\u2134',\n\tordf: '\\u00AA',\n\tordm: '\\u00BA',\n\torigof: '\\u22B6',\n\toror: '\\u2A56',\n\torslope: '\\u2A57',\n\torv: '\\u2A5B',\n\toS: '\\u24C8',\n\tOscr: '\\uD835\\uDCAA',\n\toscr: '\\u2134',\n\tOslash: '\\u00D8',\n\toslash: '\\u00F8',\n\tosol: '\\u2298',\n\tOtilde: '\\u00D5',\n\totilde: '\\u00F5',\n\tOtimes: '\\u2A37',\n\totimes: '\\u2297',\n\totimesas: '\\u2A36',\n\tOuml: '\\u00D6',\n\touml: '\\u00F6',\n\tovbar: '\\u233D',\n\tOverBar: '\\u203E',\n\tOverBrace: '\\u23DE',\n\tOverBracket: '\\u23B4',\n\tOverParenthesis: '\\u23DC',\n\tpar: '\\u2225',\n\tpara: '\\u00B6',\n\tparallel: '\\u2225',\n\tparsim: '\\u2AF3',\n\tparsl: '\\u2AFD',\n\tpart: '\\u2202',\n\tPartialD: '\\u2202',\n\tPcy: '\\u041F',\n\tpcy: '\\u043F',\n\tpercnt: '\\u0025',\n\tperiod: '\\u002E',\n\tpermil: '\\u2030',\n\tperp: '\\u22A5',\n\tpertenk: '\\u2031',\n\tPfr: '\\uD835\\uDD13',\n\tpfr: '\\uD835\\uDD2D',\n\tPhi: '\\u03A6',\n\tphi: '\\u03C6',\n\tphiv: '\\u03D5',\n\tphmmat: '\\u2133',\n\tphone: '\\u260E',\n\tPi: '\\u03A0',\n\tpi: '\\u03C0',\n\tpitchfork: '\\u22D4',\n\tpiv: '\\u03D6',\n\tplanck: '\\u210F',\n\tplanckh: '\\u210E',\n\tplankv: '\\u210F',\n\tplus: '\\u002B',\n\tplusacir: '\\u2A23',\n\tplusb: '\\u229E',\n\tpluscir: '\\u2A22',\n\tplusdo: '\\u2214',\n\tplusdu: '\\u2A25',\n\tpluse: '\\u2A72',\n\tPlusMinus: '\\u00B1',\n\tplusmn: '\\u00B1',\n\tplussim: '\\u2A26',\n\tplustwo: '\\u2A27',\n\tpm: '\\u00B1',\n\tPoincareplane: '\\u210C',\n\tpointint: '\\u2A15',\n\tPopf: '\\u2119',\n\tpopf: '\\uD835\\uDD61',\n\tpound: '\\u00A3',\n\tPr: '\\u2ABB',\n\tpr: '\\u227A',\n\tprap: '\\u2AB7',\n\tprcue: '\\u227C',\n\tprE: '\\u2AB3',\n\tpre: '\\u2AAF',\n\tprec: '\\u227A',\n\tprecapprox: '\\u2AB7',\n\tpreccurlyeq: '\\u227C',\n\tPrecedes: '\\u227A',\n\tPrecedesEqual: '\\u2AAF',\n\tPrecedesSlantEqual: '\\u227C',\n\tPrecedesTilde: '\\u227E',\n\tpreceq: '\\u2AAF',\n\tprecnapprox: '\\u2AB9',\n\tprecneqq: '\\u2AB5',\n\tprecnsim: '\\u22E8',\n\tprecsim: '\\u227E',\n\tPrime: '\\u2033',\n\tprime: '\\u2032',\n\tprimes: '\\u2119',\n\tprnap: '\\u2AB9',\n\tprnE: '\\u2AB5',\n\tprnsim: '\\u22E8',\n\tprod: '\\u220F',\n\tProduct: '\\u220F',\n\tprofalar: '\\u232E',\n\tprofline: '\\u2312',\n\tprofsurf: '\\u2313',\n\tprop: '\\u221D',\n\tProportion: '\\u2237',\n\tProportional: '\\u221D',\n\tpropto: '\\u221D',\n\tprsim: '\\u227E',\n\tprurel: '\\u22B0',\n\tPscr: '\\uD835\\uDCAB',\n\tpscr: '\\uD835\\uDCC5',\n\tPsi: '\\u03A8',\n\tpsi: '\\u03C8',\n\tpuncsp: '\\u2008',\n\tQfr: '\\uD835\\uDD14',\n\tqfr: '\\uD835\\uDD2E',\n\tqint: '\\u2A0C',\n\tQopf: '\\u211A',\n\tqopf: '\\uD835\\uDD62',\n\tqprime: '\\u2057',\n\tQscr: '\\uD835\\uDCAC',\n\tqscr: '\\uD835\\uDCC6',\n\tquaternions: '\\u210D',\n\tquatint: '\\u2A16',\n\tquest: '\\u003F',\n\tquesteq: '\\u225F',\n\tQUOT: '\\u0022',\n\tquot: '\\u0022',\n\trAarr: '\\u21DB',\n\trace: '\\u223D\\u0331',\n\tRacute: '\\u0154',\n\tracute: '\\u0155',\n\tradic: '\\u221A',\n\traemptyv: '\\u29B3',\n\tRang: '\\u27EB',\n\trang: '\\u27E9',\n\trangd: '\\u2992',\n\trange: '\\u29A5',\n\trangle: '\\u27E9',\n\traquo: '\\u00BB',\n\tRarr: '\\u21A0',\n\trArr: '\\u21D2',\n\trarr: '\\u2192',\n\trarrap: '\\u2975',\n\trarrb: '\\u21E5',\n\trarrbfs: '\\u2920',\n\trarrc: '\\u2933',\n\trarrfs: '\\u291E',\n\trarrhk: '\\u21AA',\n\trarrlp: '\\u21AC',\n\trarrpl: '\\u2945',\n\trarrsim: '\\u2974',\n\tRarrtl: '\\u2916',\n\trarrtl: '\\u21A3',\n\trarrw: '\\u219D',\n\trAtail: '\\u291C',\n\tratail: '\\u291A',\n\tratio: '\\u2236',\n\trationals: '\\u211A',\n\tRBarr: '\\u2910',\n\trBarr: '\\u290F',\n\trbarr: '\\u290D',\n\trbbrk: '\\u2773',\n\trbrace: '\\u007D',\n\trbrack: '\\u005D',\n\trbrke: '\\u298C',\n\trbrksld: '\\u298E',\n\trbrkslu: '\\u2990',\n\tRcaron: '\\u0158',\n\trcaron: '\\u0159',\n\tRcedil: '\\u0156',\n\trcedil: '\\u0157',\n\trceil: '\\u2309',\n\trcub: '\\u007D',\n\tRcy: '\\u0420',\n\trcy: '\\u0440',\n\trdca: '\\u2937',\n\trdldhar: '\\u2969',\n\trdquo: '\\u201D',\n\trdquor: '\\u201D',\n\trdsh: '\\u21B3',\n\tRe: '\\u211C',\n\treal: '\\u211C',\n\trealine: '\\u211B',\n\trealpart: '\\u211C',\n\treals: '\\u211D',\n\trect: '\\u25AD',\n\tREG: '\\u00AE',\n\treg: '\\u00AE',\n\tReverseElement: '\\u220B',\n\tReverseEquilibrium: '\\u21CB',\n\tReverseUpEquilibrium: '\\u296F',\n\trfisht: '\\u297D',\n\trfloor: '\\u230B',\n\tRfr: '\\u211C',\n\trfr: '\\uD835\\uDD2F',\n\trHar: '\\u2964',\n\trhard: '\\u21C1',\n\trharu: '\\u21C0',\n\trharul: '\\u296C',\n\tRho: '\\u03A1',\n\trho: '\\u03C1',\n\trhov: '\\u03F1',\n\tRightAngleBracket: '\\u27E9',\n\tRightArrow: '\\u2192',\n\tRightarrow: '\\u21D2',\n\trightarrow: '\\u2192',\n\tRightArrowBar: '\\u21E5',\n\tRightArrowLeftArrow: '\\u21C4',\n\trightarrowtail: '\\u21A3',\n\tRightCeiling: '\\u2309',\n\tRightDoubleBracket: '\\u27E7',\n\tRightDownTeeVector: '\\u295D',\n\tRightDownVector: '\\u21C2',\n\tRightDownVectorBar: '\\u2955',\n\tRightFloor: '\\u230B',\n\trightharpoondown: '\\u21C1',\n\trightharpoonup: '\\u21C0',\n\trightleftarrows: '\\u21C4',\n\trightleftharpoons: '\\u21CC',\n\trightrightarrows: '\\u21C9',\n\trightsquigarrow: '\\u219D',\n\tRightTee: '\\u22A2',\n\tRightTeeArrow: '\\u21A6',\n\tRightTeeVector: '\\u295B',\n\trightthreetimes: '\\u22CC',\n\tRightTriangle: '\\u22B3',\n\tRightTriangleBar: '\\u29D0',\n\tRightTriangleEqual: '\\u22B5',\n\tRightUpDownVector: '\\u294F',\n\tRightUpTeeVector: '\\u295C',\n\tRightUpVector: '\\u21BE',\n\tRightUpVectorBar: '\\u2954',\n\tRightVector: '\\u21C0',\n\tRightVectorBar: '\\u2953',\n\tring: '\\u02DA',\n\trisingdotseq: '\\u2253',\n\trlarr: '\\u21C4',\n\trlhar: '\\u21CC',\n\trlm: '\\u200F',\n\trmoust: '\\u23B1',\n\trmoustache: '\\u23B1',\n\trnmid: '\\u2AEE',\n\troang: '\\u27ED',\n\troarr: '\\u21FE',\n\trobrk: '\\u27E7',\n\tropar: '\\u2986',\n\tRopf: '\\u211D',\n\tropf: '\\uD835\\uDD63',\n\troplus: '\\u2A2E',\n\trotimes: '\\u2A35',\n\tRoundImplies: '\\u2970',\n\trpar: '\\u0029',\n\trpargt: '\\u2994',\n\trppolint: '\\u2A12',\n\trrarr: '\\u21C9',\n\tRrightarrow: '\\u21DB',\n\trsaquo: '\\u203A',\n\tRscr: '\\u211B',\n\trscr: '\\uD835\\uDCC7',\n\tRsh: '\\u21B1',\n\trsh: '\\u21B1',\n\trsqb: '\\u005D',\n\trsquo: '\\u2019',\n\trsquor: '\\u2019',\n\trthree: '\\u22CC',\n\trtimes: '\\u22CA',\n\trtri: '\\u25B9',\n\trtrie: '\\u22B5',\n\trtrif: '\\u25B8',\n\trtriltri: '\\u29CE',\n\tRuleDelayed: '\\u29F4',\n\truluhar: '\\u2968',\n\trx: '\\u211E',\n\tSacute: '\\u015A',\n\tsacute: '\\u015B',\n\tsbquo: '\\u201A',\n\tSc: '\\u2ABC',\n\tsc: '\\u227B',\n\tscap: '\\u2AB8',\n\tScaron: '\\u0160',\n\tscaron: '\\u0161',\n\tsccue: '\\u227D',\n\tscE: '\\u2AB4',\n\tsce: '\\u2AB0',\n\tScedil: '\\u015E',\n\tscedil: '\\u015F',\n\tScirc: '\\u015C',\n\tscirc: '\\u015D',\n\tscnap: '\\u2ABA',\n\tscnE: '\\u2AB6',\n\tscnsim: '\\u22E9',\n\tscpolint: '\\u2A13',\n\tscsim: '\\u227F',\n\tScy: '\\u0421',\n\tscy: '\\u0441',\n\tsdot: '\\u22C5',\n\tsdotb: '\\u22A1',\n\tsdote: '\\u2A66',\n\tsearhk: '\\u2925',\n\tseArr: '\\u21D8',\n\tsearr: '\\u2198',\n\tsearrow: '\\u2198',\n\tsect: '\\u00A7',\n\tsemi: '\\u003B',\n\tseswar: '\\u2929',\n\tsetminus: '\\u2216',\n\tsetmn: '\\u2216',\n\tsext: '\\u2736',\n\tSfr: '\\uD835\\uDD16',\n\tsfr: '\\uD835\\uDD30',\n\tsfrown: '\\u2322',\n\tsharp: '\\u266F',\n\tSHCHcy: '\\u0429',\n\tshchcy: '\\u0449',\n\tSHcy: '\\u0428',\n\tshcy: '\\u0448',\n\tShortDownArrow: '\\u2193',\n\tShortLeftArrow: '\\u2190',\n\tshortmid: '\\u2223',\n\tshortparallel: '\\u2225',\n\tShortRightArrow: '\\u2192',\n\tShortUpArrow: '\\u2191',\n\tshy: '\\u00AD',\n\tSigma: '\\u03A3',\n\tsigma: '\\u03C3',\n\tsigmaf: '\\u03C2',\n\tsigmav: '\\u03C2',\n\tsim: '\\u223C',\n\tsimdot: '\\u2A6A',\n\tsime: '\\u2243',\n\tsimeq: '\\u2243',\n\tsimg: '\\u2A9E',\n\tsimgE: '\\u2AA0',\n\tsiml: '\\u2A9D',\n\tsimlE: '\\u2A9F',\n\tsimne: '\\u2246',\n\tsimplus: '\\u2A24',\n\tsimrarr: '\\u2972',\n\tslarr: '\\u2190',\n\tSmallCircle: '\\u2218',\n\tsmallsetminus: '\\u2216',\n\tsmashp: '\\u2A33',\n\tsmeparsl: '\\u29E4',\n\tsmid: '\\u2223',\n\tsmile: '\\u2323',\n\tsmt: '\\u2AAA',\n\tsmte: '\\u2AAC',\n\tsmtes: '\\u2AAC\\uFE00',\n\tSOFTcy: '\\u042C',\n\tsoftcy: '\\u044C',\n\tsol: '\\u002F',\n\tsolb: '\\u29C4',\n\tsolbar: '\\u233F',\n\tSopf: '\\uD835\\uDD4A',\n\tsopf: '\\uD835\\uDD64',\n\tspades: '\\u2660',\n\tspadesuit: '\\u2660',\n\tspar: '\\u2225',\n\tsqcap: '\\u2293',\n\tsqcaps: '\\u2293\\uFE00',\n\tsqcup: '\\u2294',\n\tsqcups: '\\u2294\\uFE00',\n\tSqrt: '\\u221A',\n\tsqsub: '\\u228F',\n\tsqsube: '\\u2291',\n\tsqsubset: '\\u228F',\n\tsqsubseteq: '\\u2291',\n\tsqsup: '\\u2290',\n\tsqsupe: '\\u2292',\n\tsqsupset: '\\u2290',\n\tsqsupseteq: '\\u2292',\n\tsqu: '\\u25A1',\n\tSquare: '\\u25A1',\n\tsquare: '\\u25A1',\n\tSquareIntersection: '\\u2293',\n\tSquareSubset: '\\u228F',\n\tSquareSubsetEqual: '\\u2291',\n\tSquareSuperset: '\\u2290',\n\tSquareSupersetEqual: '\\u2292',\n\tSquareUnion: '\\u2294',\n\tsquarf: '\\u25AA',\n\tsquf: '\\u25AA',\n\tsrarr: '\\u2192',\n\tSscr: '\\uD835\\uDCAE',\n\tsscr: '\\uD835\\uDCC8',\n\tssetmn: '\\u2216',\n\tssmile: '\\u2323',\n\tsstarf: '\\u22C6',\n\tStar: '\\u22C6',\n\tstar: '\\u2606',\n\tstarf: '\\u2605',\n\tstraightepsilon: '\\u03F5',\n\tstraightphi: '\\u03D5',\n\tstrns: '\\u00AF',\n\tSub: '\\u22D0',\n\tsub: '\\u2282',\n\tsubdot: '\\u2ABD',\n\tsubE: '\\u2AC5',\n\tsube: '\\u2286',\n\tsubedot: '\\u2AC3',\n\tsubmult: '\\u2AC1',\n\tsubnE: '\\u2ACB',\n\tsubne: '\\u228A',\n\tsubplus: '\\u2ABF',\n\tsubrarr: '\\u2979',\n\tSubset: '\\u22D0',\n\tsubset: '\\u2282',\n\tsubseteq: '\\u2286',\n\tsubseteqq: '\\u2AC5',\n\tSubsetEqual: '\\u2286',\n\tsubsetneq: '\\u228A',\n\tsubsetneqq: '\\u2ACB',\n\tsubsim: '\\u2AC7',\n\tsubsub: '\\u2AD5',\n\tsubsup: '\\u2AD3',\n\tsucc: '\\u227B',\n\tsuccapprox: '\\u2AB8',\n\tsucccurlyeq: '\\u227D',\n\tSucceeds: '\\u227B',\n\tSucceedsEqual: '\\u2AB0',\n\tSucceedsSlantEqual: '\\u227D',\n\tSucceedsTilde: '\\u227F',\n\tsucceq: '\\u2AB0',\n\tsuccnapprox: '\\u2ABA',\n\tsuccneqq: '\\u2AB6',\n\tsuccnsim: '\\u22E9',\n\tsuccsim: '\\u227F',\n\tSuchThat: '\\u220B',\n\tSum: '\\u2211',\n\tsum: '\\u2211',\n\tsung: '\\u266A',\n\tSup: '\\u22D1',\n\tsup: '\\u2283',\n\tsup1: '\\u00B9',\n\tsup2: '\\u00B2',\n\tsup3: '\\u00B3',\n\tsupdot: '\\u2ABE',\n\tsupdsub: '\\u2AD8',\n\tsupE: '\\u2AC6',\n\tsupe: '\\u2287',\n\tsupedot: '\\u2AC4',\n\tSuperset: '\\u2283',\n\tSupersetEqual: '\\u2287',\n\tsuphsol: '\\u27C9',\n\tsuphsub: '\\u2AD7',\n\tsuplarr: '\\u297B',\n\tsupmult: '\\u2AC2',\n\tsupnE: '\\u2ACC',\n\tsupne: '\\u228B',\n\tsupplus: '\\u2AC0',\n\tSupset: '\\u22D1',\n\tsupset: '\\u2283',\n\tsupseteq: '\\u2287',\n\tsupseteqq: '\\u2AC6',\n\tsupsetneq: '\\u228B',\n\tsupsetneqq: '\\u2ACC',\n\tsupsim: '\\u2AC8',\n\tsupsub: '\\u2AD4',\n\tsupsup: '\\u2AD6',\n\tswarhk: '\\u2926',\n\tswArr: '\\u21D9',\n\tswarr: '\\u2199',\n\tswarrow: '\\u2199',\n\tswnwar: '\\u292A',\n\tszlig: '\\u00DF',\n\tTab: '\\u0009',\n\ttarget: '\\u2316',\n\tTau: '\\u03A4',\n\ttau: '\\u03C4',\n\ttbrk: '\\u23B4',\n\tTcaron: '\\u0164',\n\ttcaron: '\\u0165',\n\tTcedil: '\\u0162',\n\ttcedil: '\\u0163',\n\tTcy: '\\u0422',\n\ttcy: '\\u0442',\n\ttdot: '\\u20DB',\n\ttelrec: '\\u2315',\n\tTfr: '\\uD835\\uDD17',\n\ttfr: '\\uD835\\uDD31',\n\tthere4: '\\u2234',\n\tTherefore: '\\u2234',\n\ttherefore: '\\u2234',\n\tTheta: '\\u0398',\n\ttheta: '\\u03B8',\n\tthetasym: '\\u03D1',\n\tthetav: '\\u03D1',\n\tthickapprox: '\\u2248',\n\tthicksim: '\\u223C',\n\tThickSpace: '\\u205F\\u200A',\n\tthinsp: '\\u2009',\n\tThinSpace: '\\u2009',\n\tthkap: '\\u2248',\n\tthksim: '\\u223C',\n\tTHORN: '\\u00DE',\n\tthorn: '\\u00FE',\n\tTilde: '\\u223C',\n\ttilde: '\\u02DC',\n\tTildeEqual: '\\u2243',\n\tTildeFullEqual: '\\u2245',\n\tTildeTilde: '\\u2248',\n\ttimes: '\\u00D7',\n\ttimesb: '\\u22A0',\n\ttimesbar: '\\u2A31',\n\ttimesd: '\\u2A30',\n\ttint: '\\u222D',\n\ttoea: '\\u2928',\n\ttop: '\\u22A4',\n\ttopbot: '\\u2336',\n\ttopcir: '\\u2AF1',\n\tTopf: '\\uD835\\uDD4B',\n\ttopf: '\\uD835\\uDD65',\n\ttopfork: '\\u2ADA',\n\ttosa: '\\u2929',\n\ttprime: '\\u2034',\n\tTRADE: '\\u2122',\n\ttrade: '\\u2122',\n\ttriangle: '\\u25B5',\n\ttriangledown: '\\u25BF',\n\ttriangleleft: '\\u25C3',\n\ttrianglelefteq: '\\u22B4',\n\ttriangleq: '\\u225C',\n\ttriangleright: '\\u25B9',\n\ttrianglerighteq: '\\u22B5',\n\ttridot: '\\u25EC',\n\ttrie: '\\u225C',\n\ttriminus: '\\u2A3A',\n\tTripleDot: '\\u20DB',\n\ttriplus: '\\u2A39',\n\ttrisb: '\\u29CD',\n\ttritime: '\\u2A3B',\n\ttrpezium: '\\u23E2',\n\tTscr: '\\uD835\\uDCAF',\n\ttscr: '\\uD835\\uDCC9',\n\tTScy: '\\u0426',\n\ttscy: '\\u0446',\n\tTSHcy: '\\u040B',\n\ttshcy: '\\u045B',\n\tTstrok: '\\u0166',\n\ttstrok: '\\u0167',\n\ttwixt: '\\u226C',\n\ttwoheadleftarrow: '\\u219E',\n\ttwoheadrightarrow: '\\u21A0',\n\tUacute: '\\u00DA',\n\tuacute: '\\u00FA',\n\tUarr: '\\u219F',\n\tuArr: '\\u21D1',\n\tuarr: '\\u2191',\n\tUarrocir: '\\u2949',\n\tUbrcy: '\\u040E',\n\tubrcy: '\\u045E',\n\tUbreve: '\\u016C',\n\tubreve: '\\u016D',\n\tUcirc: '\\u00DB',\n\tucirc: '\\u00FB',\n\tUcy: '\\u0423',\n\tucy: '\\u0443',\n\tudarr: '\\u21C5',\n\tUdblac: '\\u0170',\n\tudblac: '\\u0171',\n\tudhar: '\\u296E',\n\tufisht: '\\u297E',\n\tUfr: '\\uD835\\uDD18',\n\tufr: '\\uD835\\uDD32',\n\tUgrave: '\\u00D9',\n\tugrave: '\\u00F9',\n\tuHar: '\\u2963',\n\tuharl: '\\u21BF',\n\tuharr: '\\u21BE',\n\tuhblk: '\\u2580',\n\tulcorn: '\\u231C',\n\tulcorner: '\\u231C',\n\tulcrop: '\\u230F',\n\tultri: '\\u25F8',\n\tUmacr: '\\u016A',\n\tumacr: '\\u016B',\n\tuml: '\\u00A8',\n\tUnderBar: '\\u005F',\n\tUnderBrace: '\\u23DF',\n\tUnderBracket: '\\u23B5',\n\tUnderParenthesis: '\\u23DD',\n\tUnion: '\\u22C3',\n\tUnionPlus: '\\u228E',\n\tUogon: '\\u0172',\n\tuogon: '\\u0173',\n\tUopf: '\\uD835\\uDD4C',\n\tuopf: '\\uD835\\uDD66',\n\tUpArrow: '\\u2191',\n\tUparrow: '\\u21D1',\n\tuparrow: '\\u2191',\n\tUpArrowBar: '\\u2912',\n\tUpArrowDownArrow: '\\u21C5',\n\tUpDownArrow: '\\u2195',\n\tUpdownarrow: '\\u21D5',\n\tupdownarrow: '\\u2195',\n\tUpEquilibrium: '\\u296E',\n\tupharpoonleft: '\\u21BF',\n\tupharpoonright: '\\u21BE',\n\tuplus: '\\u228E',\n\tUpperLeftArrow: '\\u2196',\n\tUpperRightArrow: '\\u2197',\n\tUpsi: '\\u03D2',\n\tupsi: '\\u03C5',\n\tupsih: '\\u03D2',\n\tUpsilon: '\\u03A5',\n\tupsilon: '\\u03C5',\n\tUpTee: '\\u22A5',\n\tUpTeeArrow: '\\u21A5',\n\tupuparrows: '\\u21C8',\n\turcorn: '\\u231D',\n\turcorner: '\\u231D',\n\turcrop: '\\u230E',\n\tUring: '\\u016E',\n\turing: '\\u016F',\n\turtri: '\\u25F9',\n\tUscr: '\\uD835\\uDCB0',\n\tuscr: '\\uD835\\uDCCA',\n\tutdot: '\\u22F0',\n\tUtilde: '\\u0168',\n\tutilde: '\\u0169',\n\tutri: '\\u25B5',\n\tutrif: '\\u25B4',\n\tuuarr: '\\u21C8',\n\tUuml: '\\u00DC',\n\tuuml: '\\u00FC',\n\tuwangle: '\\u29A7',\n\tvangrt: '\\u299C',\n\tvarepsilon: '\\u03F5',\n\tvarkappa: '\\u03F0',\n\tvarnothing: '\\u2205',\n\tvarphi: '\\u03D5',\n\tvarpi: '\\u03D6',\n\tvarpropto: '\\u221D',\n\tvArr: '\\u21D5',\n\tvarr: '\\u2195',\n\tvarrho: '\\u03F1',\n\tvarsigma: '\\u03C2',\n\tvarsubsetneq: '\\u228A\\uFE00',\n\tvarsubsetneqq: '\\u2ACB\\uFE00',\n\tvarsupsetneq: '\\u228B\\uFE00',\n\tvarsupsetneqq: '\\u2ACC\\uFE00',\n\tvartheta: '\\u03D1',\n\tvartriangleleft: '\\u22B2',\n\tvartriangleright: '\\u22B3',\n\tVbar: '\\u2AEB',\n\tvBar: '\\u2AE8',\n\tvBarv: '\\u2AE9',\n\tVcy: '\\u0412',\n\tvcy: '\\u0432',\n\tVDash: '\\u22AB',\n\tVdash: '\\u22A9',\n\tvDash: '\\u22A8',\n\tvdash: '\\u22A2',\n\tVdashl: '\\u2AE6',\n\tVee: '\\u22C1',\n\tvee: '\\u2228',\n\tveebar: '\\u22BB',\n\tveeeq: '\\u225A',\n\tvellip: '\\u22EE',\n\tVerbar: '\\u2016',\n\tverbar: '\\u007C',\n\tVert: '\\u2016',\n\tvert: '\\u007C',\n\tVerticalBar: '\\u2223',\n\tVerticalLine: '\\u007C',\n\tVerticalSeparator: '\\u2758',\n\tVerticalTilde: '\\u2240',\n\tVeryThinSpace: '\\u200A',\n\tVfr: '\\uD835\\uDD19',\n\tvfr: '\\uD835\\uDD33',\n\tvltri: '\\u22B2',\n\tvnsub: '\\u2282\\u20D2',\n\tvnsup: '\\u2283\\u20D2',\n\tVopf: '\\uD835\\uDD4D',\n\tvopf: '\\uD835\\uDD67',\n\tvprop: '\\u221D',\n\tvrtri: '\\u22B3',\n\tVscr: '\\uD835\\uDCB1',\n\tvscr: '\\uD835\\uDCCB',\n\tvsubnE: '\\u2ACB\\uFE00',\n\tvsubne: '\\u228A\\uFE00',\n\tvsupnE: '\\u2ACC\\uFE00',\n\tvsupne: '\\u228B\\uFE00',\n\tVvdash: '\\u22AA',\n\tvzigzag: '\\u299A',\n\tWcirc: '\\u0174',\n\twcirc: '\\u0175',\n\twedbar: '\\u2A5F',\n\tWedge: '\\u22C0',\n\twedge: '\\u2227',\n\twedgeq: '\\u2259',\n\tweierp: '\\u2118',\n\tWfr: '\\uD835\\uDD1A',\n\twfr: '\\uD835\\uDD34',\n\tWopf: '\\uD835\\uDD4E',\n\twopf: '\\uD835\\uDD68',\n\twp: '\\u2118',\n\twr: '\\u2240',\n\twreath: '\\u2240',\n\tWscr: '\\uD835\\uDCB2',\n\twscr: '\\uD835\\uDCCC',\n\txcap: '\\u22C2',\n\txcirc: '\\u25EF',\n\txcup: '\\u22C3',\n\txdtri: '\\u25BD',\n\tXfr: '\\uD835\\uDD1B',\n\txfr: '\\uD835\\uDD35',\n\txhArr: '\\u27FA',\n\txharr: '\\u27F7',\n\tXi: '\\u039E',\n\txi: '\\u03BE',\n\txlArr: '\\u27F8',\n\txlarr: '\\u27F5',\n\txmap: '\\u27FC',\n\txnis: '\\u22FB',\n\txodot: '\\u2A00',\n\tXopf: '\\uD835\\uDD4F',\n\txopf: '\\uD835\\uDD69',\n\txoplus: '\\u2A01',\n\txotime: '\\u2A02',\n\txrArr: '\\u27F9',\n\txrarr: '\\u27F6',\n\tXscr: '\\uD835\\uDCB3',\n\txscr: '\\uD835\\uDCCD',\n\txsqcup: '\\u2A06',\n\txuplus: '\\u2A04',\n\txutri: '\\u25B3',\n\txvee: '\\u22C1',\n\txwedge: '\\u22C0',\n\tYacute: '\\u00DD',\n\tyacute: '\\u00FD',\n\tYAcy: '\\u042F',\n\tyacy: '\\u044F',\n\tYcirc: '\\u0176',\n\tycirc: '\\u0177',\n\tYcy: '\\u042B',\n\tycy: '\\u044B',\n\tyen: '\\u00A5',\n\tYfr: '\\uD835\\uDD1C',\n\tyfr: '\\uD835\\uDD36',\n\tYIcy: '\\u0407',\n\tyicy: '\\u0457',\n\tYopf: '\\uD835\\uDD50',\n\tyopf: '\\uD835\\uDD6A',\n\tYscr: '\\uD835\\uDCB4',\n\tyscr: '\\uD835\\uDCCE',\n\tYUcy: '\\u042E',\n\tyucy: '\\u044E',\n\tYuml: '\\u0178',\n\tyuml: '\\u00FF',\n\tZacute: '\\u0179',\n\tzacute: '\\u017A',\n\tZcaron: '\\u017D',\n\tzcaron: '\\u017E',\n\tZcy: '\\u0417',\n\tzcy: '\\u0437',\n\tZdot: '\\u017B',\n\tzdot: '\\u017C',\n\tzeetrf: '\\u2128',\n\tZeroWidthSpace: '\\u200B',\n\tZeta: '\\u0396',\n\tzeta: '\\u03B6',\n\tZfr: '\\u2128',\n\tzfr: '\\uD835\\uDD37',\n\tZHcy: '\\u0416',\n\tzhcy: '\\u0436',\n\tzigrarr: '\\u21DD',\n\tZopf: '\\u2124',\n\tzopf: '\\uD835\\uDD6B',\n\tZscr: '\\uD835\\uDCB5',\n\tzscr: '\\uD835\\uDCCF',\n\tzwj: '\\u200D',\n\tzwnj: '\\u200C',\n});\n\n/**\n * @deprecated\n * Use `HTML_ENTITIES` instead.\n * @see {@link HTML_ENTITIES}\n */\nexports.entityMap = exports.HTML_ENTITIES;\n","'use strict';\n\nvar conventions = require('./conventions');\n\nfunction extendError(constructor, writableName) {\n\tconstructor.prototype = Object.create(Error.prototype, {\n\t\tconstructor: { value: constructor },\n\t\tname: { value: constructor.name, enumerable: true, writable: writableName },\n\t});\n}\n\nvar DOMExceptionName = conventions.freeze({\n\t/**\n\t * the default value as defined by the spec\n\t */\n\tError: 'Error',\n\t/**\n\t * @deprecated\n\t * Use RangeError instead.\n\t */\n\tIndexSizeError: 'IndexSizeError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tDomstringSizeError: 'DomstringSizeError',\n\tHierarchyRequestError: 'HierarchyRequestError',\n\tWrongDocumentError: 'WrongDocumentError',\n\tInvalidCharacterError: 'InvalidCharacterError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tNoDataAllowedError: 'NoDataAllowedError',\n\tNoModificationAllowedError: 'NoModificationAllowedError',\n\tNotFoundError: 'NotFoundError',\n\tNotSupportedError: 'NotSupportedError',\n\tInUseAttributeError: 'InUseAttributeError',\n\tInvalidStateError: 'InvalidStateError',\n\tSyntaxError: 'SyntaxError',\n\tInvalidModificationError: 'InvalidModificationError',\n\tNamespaceError: 'NamespaceError',\n\t/**\n\t * @deprecated\n\t * Use TypeError for invalid arguments,\n\t * \"NotSupportedError\" DOMException for unsupported operations,\n\t * and \"NotAllowedError\" DOMException for denied requests instead.\n\t */\n\tInvalidAccessError: 'InvalidAccessError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tValidationError: 'ValidationError',\n\t/**\n\t * @deprecated\n\t * Use TypeError instead.\n\t */\n\tTypeMismatchError: 'TypeMismatchError',\n\tSecurityError: 'SecurityError',\n\tNetworkError: 'NetworkError',\n\tAbortError: 'AbortError',\n\t/**\n\t * @deprecated\n\t * Just to match the related static code, not part of the spec.\n\t */\n\tURLMismatchError: 'URLMismatchError',\n\tQuotaExceededError: 'QuotaExceededError',\n\tTimeoutError: 'TimeoutError',\n\tInvalidNodeTypeError: 'InvalidNodeTypeError',\n\tDataCloneError: 'DataCloneError',\n\tEncodingError: 'EncodingError',\n\tNotReadableError: 'NotReadableError',\n\tUnknownError: 'UnknownError',\n\tConstraintError: 'ConstraintError',\n\tDataError: 'DataError',\n\tTransactionInactiveError: 'TransactionInactiveError',\n\tReadOnlyError: 'ReadOnlyError',\n\tVersionError: 'VersionError',\n\tOperationError: 'OperationError',\n\tNotAllowedError: 'NotAllowedError',\n\tOptOutError: 'OptOutError',\n});\nvar DOMExceptionNames = Object.keys(DOMExceptionName);\n\nfunction isValidDomExceptionCode(value) {\n\treturn typeof value === 'number' && value >= 1 && value <= 25;\n}\nfunction endsWithError(value) {\n\treturn typeof value === 'string' && value.substring(value.length - DOMExceptionName.Error.length) === DOMExceptionName.Error;\n}\n/**\n * DOM operations only raise exceptions in \"exceptional\" circumstances, i.e., when an operation\n * is impossible to perform (either for logical reasons, because data is lost, or because the\n * implementation has become unstable). In general, DOM methods return specific error values in\n * ordinary processing situations, such as out-of-bound errors when using NodeList.\n *\n * Implementations should raise other exceptions under other circumstances. For example,\n * implementations should raise an implementation-dependent exception if a null argument is\n * passed when null was not expected.\n *\n * This implementation supports the following usages:\n * 1. according to the living standard (both arguments are optional):\n * ```\n * new DOMException(\"message (can be empty)\", DOMExceptionNames.HierarchyRequestError)\n * ```\n * 2. according to previous xmldom implementation (only the first argument is required):\n * ```\n * new DOMException(DOMException.HIERARCHY_REQUEST_ERR, \"optional message\")\n * ```\n * both result in the proper name being set.\n *\n * @class DOMException\n * @param {number | string} messageOrCode\n * The reason why an operation is not acceptable.\n * If it is a number, it is used to determine the `name`, see\n * {@link https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF ExceptionCode}\n * @param {string | keyof typeof DOMExceptionName | Error} [nameOrMessage]\n * The `name` to use for the error.\n * If `messageOrCode` is a number, this arguments is used as the `message` instead.\n * @augments Error\n * @see https://webidl.spec.whatwg.org/#idl-DOMException\n * @see https://webidl.spec.whatwg.org/#dfn-error-names-table\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-17189187\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n */\nfunction DOMException(messageOrCode, nameOrMessage) {\n\t// support old way of passing arguments: first argument is a valid number\n\tif (isValidDomExceptionCode(messageOrCode)) {\n\t\tthis.name = DOMExceptionNames[messageOrCode];\n\t\tthis.message = nameOrMessage || '';\n\t} else {\n\t\tthis.message = messageOrCode;\n\t\tthis.name = endsWithError(nameOrMessage) ? nameOrMessage : DOMExceptionName.Error;\n\t}\n\tif (Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n}\nextendError(DOMException, true);\nObject.defineProperties(DOMException.prototype, {\n\tcode: {\n\t\tenumerable: true,\n\t\tget: function () {\n\t\t\tvar code = DOMExceptionNames.indexOf(this.name);\n\t\t\tif (isValidDomExceptionCode(code)) return code;\n\t\t\treturn 0;\n\t\t},\n\t},\n});\n\nvar ExceptionCode = {\n\tINDEX_SIZE_ERR: 1,\n\tDOMSTRING_SIZE_ERR: 2,\n\tHIERARCHY_REQUEST_ERR: 3,\n\tWRONG_DOCUMENT_ERR: 4,\n\tINVALID_CHARACTER_ERR: 5,\n\tNO_DATA_ALLOWED_ERR: 6,\n\tNO_MODIFICATION_ALLOWED_ERR: 7,\n\tNOT_FOUND_ERR: 8,\n\tNOT_SUPPORTED_ERR: 9,\n\tINUSE_ATTRIBUTE_ERR: 10,\n\tINVALID_STATE_ERR: 11,\n\tSYNTAX_ERR: 12,\n\tINVALID_MODIFICATION_ERR: 13,\n\tNAMESPACE_ERR: 14,\n\tINVALID_ACCESS_ERR: 15,\n\tVALIDATION_ERR: 16,\n\tTYPE_MISMATCH_ERR: 17,\n\tSECURITY_ERR: 18,\n\tNETWORK_ERR: 19,\n\tABORT_ERR: 20,\n\tURL_MISMATCH_ERR: 21,\n\tQUOTA_EXCEEDED_ERR: 22,\n\tTIMEOUT_ERR: 23,\n\tINVALID_NODE_TYPE_ERR: 24,\n\tDATA_CLONE_ERR: 25,\n};\n\nvar entries = Object.entries(ExceptionCode);\nfor (var i = 0; i < entries.length; i++) {\n\tvar key = entries[i][0];\n\tDOMException[key] = entries[i][1];\n}\n\n/**\n * Creates an error that will not be caught by XMLReader aka the SAX parser.\n *\n * @class\n * @param {string} message\n * @param {any} [locator]\n */\nfunction ParseError(message, locator) {\n\tthis.message = message;\n\tthis.locator = locator;\n\tif (Error.captureStackTrace) Error.captureStackTrace(this, ParseError);\n}\nextendError(ParseError);\n\nexports.DOMException = DOMException;\nexports.DOMExceptionName = DOMExceptionName;\nexports.ExceptionCode = ExceptionCode;\nexports.ParseError = ParseError;\n","'use strict';\n\n/**\n * Detects relevant unicode support for regular expressions in the runtime.\n * Should the runtime not accepts the flag `u` or unicode ranges,\n * character classes without unicode handling will be used.\n *\n * @param {typeof RegExp} [RegExpImpl=RegExp]\n * For testing: the RegExp class.\n * @returns {boolean}\n * @see https://node.green/#ES2015-syntax-RegExp--y--and--u--flags\n */\nfunction detectUnicodeSupport(RegExpImpl) {\n\ttry {\n\t\tif (typeof RegExpImpl !== 'function') {\n\t\t\tRegExpImpl = RegExp;\n\t\t}\n\t\t// eslint-disable-next-line es5/no-unicode-regex,es5/no-unicode-code-point-escape\n\t\tvar match = new RegExpImpl('\\u{1d306}', 'u').exec('𝌆');\n\t\treturn !!match && match[0].length === 2;\n\t} catch (error) {}\n\treturn false;\n}\nvar UNICODE_SUPPORT = detectUnicodeSupport();\n\n/**\n * Removes `[`, `]` and any trailing quantifiers from the source of a RegExp.\n *\n * @param {RegExp} regexp\n */\nfunction chars(regexp) {\n\tif (regexp.source[0] !== '[') {\n\t\tthrow new Error(regexp + ' can not be used with chars');\n\t}\n\treturn regexp.source.slice(1, regexp.source.lastIndexOf(']'));\n}\n\n/**\n * Creates a new character list regular expression,\n * by removing `search` from the source of `regexp`.\n *\n * @param {RegExp} regexp\n * @param {string} search\n * The character(s) to remove.\n * @returns {RegExp}\n */\nfunction chars_without(regexp, search) {\n\tif (regexp.source[0] !== '[') {\n\t\tthrow new Error('/' + regexp.source + '/ can not be used with chars_without');\n\t}\n\tif (!search || typeof search !== 'string') {\n\t\tthrow new Error(JSON.stringify(search) + ' is not a valid search');\n\t}\n\tif (regexp.source.indexOf(search) === -1) {\n\t\tthrow new Error('\"' + search + '\" is not is /' + regexp.source + '/');\n\t}\n\tif (search === '-' && regexp.source.indexOf(search) !== 1) {\n\t\tthrow new Error('\"' + search + '\" is not at the first postion of /' + regexp.source + '/');\n\t}\n\treturn new RegExp(regexp.source.replace(search, ''), UNICODE_SUPPORT ? 'u' : '');\n}\n\n/**\n * Combines and Regular expressions correctly by using `RegExp.source`.\n *\n * @param {...(RegExp | string)[]} args\n * @returns {RegExp}\n */\nfunction reg(args) {\n\tvar self = this;\n\treturn new RegExp(\n\t\tArray.prototype.slice\n\t\t\t.call(arguments)\n\t\t\t.map(function (part) {\n\t\t\t\tvar isStr = typeof part === 'string';\n\t\t\t\tif (isStr && self === undefined && part === '|') {\n\t\t\t\t\tthrow new Error('use regg instead of reg to wrap expressions with `|`!');\n\t\t\t\t}\n\t\t\t\treturn isStr ? part : part.source;\n\t\t\t})\n\t\t\t.join(''),\n\t\tUNICODE_SUPPORT ? 'mu' : 'm'\n\t);\n}\n\n/**\n * Like `reg` but wraps the expression in `(?:`,`)` to create a non tracking group.\n *\n * @param {...(RegExp | string)[]} args\n * @returns {RegExp}\n */\nfunction regg(args) {\n\tif (arguments.length === 0) {\n\t\tthrow new Error('no parameters provided');\n\t}\n\treturn reg.apply(regg, ['(?:'].concat(Array.prototype.slice.call(arguments), [')']));\n}\n\n// /**\n// * Append ^ to the beginning of the expression.\n// * @param {...(RegExp | string)[]} args\n// * @returns {RegExp}\n// */\n// function reg_start(args) {\n// \tif (arguments.length === 0) {\n// \t\tthrow new Error('no parameters provided');\n// \t}\n// \treturn reg.apply(reg_start, ['^'].concat(Array.prototype.slice.call(arguments)));\n// }\n\n// https://www.w3.org/TR/xml/#document\n// `[1] document ::= prolog element Misc*`\n// https://www.w3.org/TR/xml11/#NT-document\n// `[1] document ::= ( prolog element Misc* ) - ( Char* RestrictedChar Char* )`\n\n/**\n * A character usually appearing in wrongly converted strings.\n *\n * @type {string}\n * @see https://en.wikipedia.org/wiki/Specials_(Unicode_block)#Replacement_character\n * @see https://nodejs.dev/en/api/v18/buffer/#buffers-and-character-encodings\n * @see https://www.unicode.org/faq/utf_bom.html#BOM\n * @readonly\n */\nvar UNICODE_REPLACEMENT_CHARACTER = '\\uFFFD';\n// https://www.w3.org/TR/xml/#NT-Char\n// any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.\n// `[2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]`\n// https://www.w3.org/TR/xml11/#NT-Char\n// `[2] Char ::= [#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]`\n// https://www.w3.org/TR/xml11/#NT-RestrictedChar\n// `[2a] RestrictedChar ::= [#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]`\n// https://www.w3.org/TR/xml11/#charsets\nvar Char = /[-\\x09\\x0A\\x0D\\x20-\\x2C\\x2E-\\uD7FF\\uE000-\\uFFFD]/; // without \\u10000-\\uEFFFF\nif (UNICODE_SUPPORT) {\n\t// eslint-disable-next-line es5/no-unicode-code-point-escape\n\tChar = reg('[', chars(Char), '\\\\u{10000}-\\\\u{10FFFF}', ']');\n}\n\nvar _SChar = /[\\x20\\x09\\x0D\\x0A]/;\nvar SChar_s = chars(_SChar);\n// https://www.w3.org/TR/xml11/#NT-S\n// `[3] S ::= (#x20 | #x9 | #xD | #xA)+`\nvar S = reg(_SChar, '+');\n// optional whitespace described as `S?` in the grammar,\n// simplified to 0-n occurrences of the character class\n// instead of 0-1 occurrences of a non-capturing group around S\nvar S_OPT = reg(_SChar, '*');\n\n// https://www.w3.org/TR/xml11/#NT-NameStartChar\n// `[4] NameStartChar ::= \":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]`\nvar NameStartChar =\n\t/[:_a-zA-Z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02FF\\u0370-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/; // without \\u10000-\\uEFFFF\nif (UNICODE_SUPPORT) {\n\t// eslint-disable-next-line es5/no-unicode-code-point-escape\n\tNameStartChar = reg('[', chars(NameStartChar), '\\\\u{10000}-\\\\u{10FFFF}', ']');\n}\nvar NameStartChar_s = chars(NameStartChar);\n\n// https://www.w3.org/TR/xml11/#NT-NameChar\n// `[4a] NameChar ::= NameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]`\nvar NameChar = reg('[', NameStartChar_s, chars(/[-.0-9\\xB7]/), chars(/[\\u0300-\\u036F\\u203F-\\u2040]/), ']');\n// https://www.w3.org/TR/xml11/#NT-Name\n// `[5] Name ::= NameStartChar (NameChar)*`\nvar Name = reg(NameStartChar, NameChar, '*');\n/*\nhttps://www.w3.org/TR/xml11/#NT-Names\n`[6] Names ::= Name (#x20 Name)*`\n*/\n\n// https://www.w3.org/TR/xml11/#NT-Nmtoken\n// `[7] Nmtoken ::= (NameChar)+`\nvar Nmtoken = reg(NameChar, '+');\n/*\nhttps://www.w3.org/TR/xml11/#NT-Nmtokens\n`[8] Nmtokens ::= Nmtoken (#x20 Nmtoken)*`\nvar Nmtokens = reg(Nmtoken, regg(/\\x20/, Nmtoken), '*');\n*/\n\n// https://www.w3.org/TR/xml11/#NT-EntityRef\n// `[68] EntityRef ::= '&' Name ';'` [WFC: Entity Declared] [VC: Entity Declared] [WFC: Parsed Entity] [WFC: No Recursion]\nvar EntityRef = reg('&', Name, ';');\n// https://www.w3.org/TR/xml11/#NT-CharRef\n// `[66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'` [WFC: Legal Character]\nvar CharRef = regg(/&#[0-9]+;|&#x[0-9a-fA-F]+;/);\n\n/*\nhttps://www.w3.org/TR/xml11/#NT-Reference\n- `[67] Reference ::= EntityRef | CharRef`\n- `[66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'` [WFC: Legal Character]\n- `[68] EntityRef ::= '&' Name ';'` [WFC: Entity Declared] [VC: Entity Declared] [WFC: Parsed Entity] [WFC: No Recursion]\n*/\nvar Reference = regg(EntityRef, '|', CharRef);\n\n// https://www.w3.org/TR/xml11/#NT-PEReference\n// `[69] PEReference ::= '%' Name ';'`\n// [VC: Entity Declared] [WFC: No Recursion] [WFC: In DTD]\nvar PEReference = reg('%', Name, ';');\n\n// https://www.w3.org/TR/xml11/#NT-EntityValue\n// `[9] EntityValue ::= '\"' ([^%&\"] | PEReference | Reference)* '\"' | \"'\" ([^%&'] | PEReference | Reference)* \"'\"`\nvar EntityValue = regg(\n\treg('\"', regg(/[^%&\"]/, '|', PEReference, '|', Reference), '*', '\"'),\n\t'|',\n\treg(\"'\", regg(/[^%&']/, '|', PEReference, '|', Reference), '*', \"'\")\n);\n\n// https://www.w3.org/TR/xml11/#NT-AttValue\n// `[10] AttValue ::= '\"' ([^<&\"] | Reference)* '\"' | \"'\" ([^<&'] | Reference)* \"'\"`\nvar AttValue = regg('\"', regg(/[^<&\"]/, '|', Reference), '*', '\"', '|', \"'\", regg(/[^<&']/, '|', Reference), '*', \"'\");\n\n// https://www.w3.org/TR/xml-names/#ns-decl\n// https://www.w3.org/TR/xml-names/#ns-qualnames\n// NameStartChar without \":\"\nvar NCNameStartChar = chars_without(NameStartChar, ':');\n// https://www.w3.org/TR/xml-names/#orphans\n// `[5] NCNameChar ::= NameChar - ':'`\n// An XML NameChar, minus the \":\"\nvar NCNameChar = chars_without(NameChar, ':');\n// https://www.w3.org/TR/xml-names/#NT-NCName\n// `[4] NCName ::= Name - (Char* ':' Char*)`\n// An XML Name, minus the \":\"\nvar NCName = reg(NCNameStartChar, NCNameChar, '*');\n\n/**\nhttps://www.w3.org/TR/xml-names/#ns-qualnames\n\n```\n[7] QName ::= PrefixedName | UnprefixedName\n\t\t\t\t === (NCName ':' NCName) | NCName\n\t\t\t\t === NCName (':' NCName)?\n[8] PrefixedName ::= Prefix ':' LocalPart\n\t\t\t\t\t\t\t\t === NCName ':' NCName\n[9] UnprefixedName ::= LocalPart\n\t\t\t\t\t\t\t\t\t === NCName\n[10] Prefix ::= NCName\n[11] LocalPart ::= NCName\n```\n*/\nvar QName = reg(NCName, regg(':', NCName), '?');\nvar QName_exact = reg('^', QName, '$');\nvar QName_group = reg('(', QName, ')');\n\n// https://www.w3.org/TR/xml11/#NT-SystemLiteral\n// `[11] SystemLiteral ::= ('\"' [^\"]* '\"') | (\"'\" [^']* \"'\")`\nvar SystemLiteral = regg(/\"[^\"]*\"|'[^']*'/);\n\n/*\n https://www.w3.org/TR/xml11/#NT-PI\n ```\n [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))\n [16] PI ::= '' Char*)))? '?>'\n ```\n target /xml/i is not excluded!\n*/\nvar PI = reg(/^<\\?/, '(', Name, ')', regg(S, '(', Char, '*?)'), '?', /\\?>/);\n\n// https://www.w3.org/TR/xml11/#NT-PubidChar\n// `[13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]`\nvar PubidChar = /[\\x20\\x0D\\x0Aa-zA-Z0-9-'()+,./:=?;!*#@$_%]/;\n\n// https://www.w3.org/TR/xml11/#NT-PubidLiteral\n// `[12] PubidLiteral ::= '\"' PubidChar* '\"' | \"'\" (PubidChar - \"'\")* \"'\"`\nvar PubidLiteral = regg('\"', PubidChar, '*\"', '|', \"'\", chars_without(PubidChar, \"'\"), \"*'\");\n\n// https://www.w3.org/TR/xml11/#NT-CharData\n// `[14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)`\n\nvar COMMENT_START = '';\n// https://www.w3.org/TR/xml11/#NT-Comment\n// `[15] Comment ::= ''`\nvar Comment = reg(COMMENT_START, regg(chars_without(Char, '-'), '|', reg('-', chars_without(Char, '-'))), '*', COMMENT_END);\n\nvar PCDATA = '#PCDATA';\n// https://www.w3.org/TR/xml11/#NT-Mixed\n// `[51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' | '(' S? '#PCDATA' S? ')'`\n// https://www.w3.org/TR/xml-names/#NT-Mixed\n// `[51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? QName)* S? ')*' | '(' S? '#PCDATA' S? ')'`\n// [VC: Proper Group/PE Nesting] [VC: No Duplicate Types]\nvar Mixed = regg(\n\treg(/\\(/, S_OPT, PCDATA, regg(S_OPT, /\\|/, S_OPT, QName), '*', S_OPT, /\\)\\*/),\n\t'|',\n\treg(/\\(/, S_OPT, PCDATA, S_OPT, /\\)/)\n);\n\nvar _children_quantity = /[?*+]?/;\n/*\n `[49] choice ::= '(' S? cp ( S? '|' S? cp )+ S? ')'` [VC: Proper Group/PE Nesting]\n `[50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')'` [VC: Proper Group/PE Nesting]\n simplification to solve circular referencing, but doesn't check validity constraint \"Proper Group/PE Nesting\"\n var _choice_or_seq = reg('[', NameChar_s, SChar_s, chars(_children_quantity), '()|,]*');\n ```\n [48] cp ::= (Name | choice | seq) ('?' | '*' | '+')?\n === (Name | '(' S? cp ( S? '|' S? cp )+ S? ')' | '(' S? cp ( S? ',' S? cp )* S? ')') ('?' | '*' | '+')?\n !== (Name | [_choice_or_seq]*) ('?' | '*' | '+')?\n ```\n simplification to solve circular referencing, but doesn't check validity constraint \"Proper Group/PE Nesting\"\n var cp = reg(regg(Name, '|', _choice_or_seq), _children_quantity);\n*/\n/*\nInefficient regular expression (High)\nThis part of the regular expression may cause exponential backtracking on strings starting with '(|' and containing many repetitions of '|'.\nhttps://github.com/xmldom/xmldom/security/code-scanning/91\nvar choice = regg(/\\(/, S_OPT, cp, regg(S_OPT, /\\|/, S_OPT, cp), '+', S_OPT, /\\)/);\n*/\n/*\nInefficient regular expression (High)\nThis part of the regular expression may cause exponential backtracking on strings starting with '(,' and containing many repetitions of ','.\nhttps://github.com/xmldom/xmldom/security/code-scanning/92\nvar seq = regg(/\\(/, S_OPT, cp, regg(S_OPT, /,/, S_OPT, cp), '*', S_OPT, /\\)/);\n*/\n\n// `[47] children ::= (choice | seq) ('?' | '*' | '+')?`\n// simplification to solve circular referencing, but doesn't check validity constraint \"Proper Group/PE Nesting\"\nvar children = reg(/\\([^>]+\\)/, _children_quantity /*regg(choice, '|', seq), _children_quantity*/);\n\n// https://www.w3.org/TR/xml11/#NT-contentspec\n// `[46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children`\nvar contentspec = regg('EMPTY', '|', 'ANY', '|', Mixed, '|', children);\n\nvar ELEMENTDECL_START = ''`\n// https://www.w3.org/TR/xml-names/#NT-elementdecl\n// `[17] elementdecl ::= ''`\n// because of https://www.w3.org/TR/xml11/#NT-PEReference\n// since xmldom is not supporting replacements of PEReferences in the DTD\n// this also supports PEReference in the possible places\nvar elementdecl = reg(ELEMENTDECL_START, S, regg(QName, '|', PEReference), S, regg(contentspec, '|', PEReference), S_OPT, '>');\n\n// https://www.w3.org/TR/xml11/#NT-NotationType\n// `[58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')'`\n// [VC: Notation Attributes] [VC: One Notation Per Element Type] [VC: No Notation on Empty Element] [VC: No Duplicate Tokens]\nvar NotationType = reg('NOTATION', S, /\\(/, S_OPT, Name, regg(S_OPT, /\\|/, S_OPT, Name), '*', S_OPT, /\\)/);\n// https://www.w3.org/TR/xml11/#NT-Enumeration\n// `[59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'`\n// [VC: Enumeration] [VC: No Duplicate Tokens]\nvar Enumeration = reg(/\\(/, S_OPT, Nmtoken, regg(S_OPT, /\\|/, S_OPT, Nmtoken), '*', S_OPT, /\\)/);\n\n// https://www.w3.org/TR/xml11/#NT-EnumeratedType\n// `[57] EnumeratedType ::= NotationType | Enumeration`\nvar EnumeratedType = regg(NotationType, '|', Enumeration);\n\n/*\n```\n[55] StringType ::= 'CDATA'\n[56] TokenizedType ::= 'ID' [VC: ID] [VC: One ID per Element Type] [VC: ID Attribute Default]\n | 'IDREF' [VC: IDREF]\n | 'IDREFS' [VC: IDREF]\n\t | 'ENTITY' [VC: Entity Name]\n\t | 'ENTITIES' [VC: Entity Name]\n\t | 'NMTOKEN' [VC: Name Token]\n\t | 'NMTOKENS' [VC: Name Token]\n [54] AttType ::= StringType | TokenizedType | EnumeratedType\n```*/\nvar AttType = regg(/CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS/, '|', EnumeratedType);\n\n// `[60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue)`\n// [WFC: No < in Attribute Values] [WFC: No External Entity References]\n// [VC: Fixed Attribute Default] [VC: Required Attribute] [VC: Attribute Default Value Syntactically Correct]\nvar DefaultDecl = regg(/#REQUIRED|#IMPLIED/, '|', regg(regg('#FIXED', S), '?', AttValue));\n\n// https://www.w3.org/TR/xml11/#NT-AttDef\n// [53] AttDef ::= S Name S AttType S DefaultDecl\n// https://www.w3.org/TR/xml-names/#NT-AttDef\n// [1] NSAttName ::= PrefixedAttName | DefaultAttName\n// [2] PrefixedAttName ::= 'xmlns:' NCName [NSC: Reserved Prefixes and Namespace Names]\n// [3] DefaultAttName ::= 'xmlns'\n// [21] AttDef ::= S (QName | NSAttName) S AttType S DefaultDecl\n// \t\t\t\t\t\t === S Name S AttType S DefaultDecl\n// xmldom is not distinguishing between QName and NSAttName on this level\n// to support XML without namespaces in DTD we can not restrict it to QName\nvar AttDef = regg(S, Name, S, AttType, S, DefaultDecl);\n\nvar ATTLIST_DECL_START = ''`\n// https://www.w3.org/TR/xml-names/#NT-AttlistDecl\n// `[20] AttlistDecl ::= ''`\n// to support XML without namespaces in DTD we can not restrict it to QName\nvar AttlistDecl = reg(ATTLIST_DECL_START, S, Name, AttDef, '*', S_OPT, '>');\n\nvar SYSTEM = 'SYSTEM';\nvar PUBLIC = 'PUBLIC';\n// https://www.w3.org/TR/xml11/#NT-ExternalID\n// `[75] ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral`\nvar ExternalID = regg(regg(SYSTEM, S, SystemLiteral), '|', regg(PUBLIC, S, PubidLiteral, S, SystemLiteral));\nvar ExternalID_match = reg(\n\t'^',\n\tregg(\n\t\tregg(SYSTEM, S, '(?', SystemLiteral, ')'),\n\t\t'|',\n\t\tregg(PUBLIC, S, '(?', PubidLiteral, ')', S, '(?', SystemLiteral, ')')\n\t)\n);\n\n// https://www.w3.org/TR/xml11/#NT-NDataDecl\n// `[76] NDataDecl ::= S 'NDATA' S Name` [VC: Notation Declared]\nvar NDataDecl = regg(S, 'NDATA', S, Name);\n\n// https://www.w3.org/TR/xml11/#NT-EntityDef\n// `[73] EntityDef ::= EntityValue | (ExternalID NDataDecl?)`\nvar EntityDef = regg(EntityValue, '|', regg(ExternalID, NDataDecl, '?'));\n\nvar ENTITY_DECL_START = ''`\nvar GEDecl = reg(ENTITY_DECL_START, S, Name, S, EntityDef, S_OPT, '>');\n// https://www.w3.org/TR/xml11/#NT-PEDef\n// `[74] PEDef ::= EntityValue | ExternalID`\nvar PEDef = regg(EntityValue, '|', ExternalID);\n// https://www.w3.org/TR/xml11/#NT-PEDecl\n// `[72] PEDecl ::= ''`\nvar PEDecl = reg(ENTITY_DECL_START, S, '%', S, Name, S, PEDef, S_OPT, '>');\n// https://www.w3.org/TR/xml11/#NT-EntityDecl\n// `[70] EntityDecl ::= GEDecl | PEDecl`\nvar EntityDecl = regg(GEDecl, '|', PEDecl);\n\n// https://www.w3.org/TR/xml11/#NT-PublicID\n// `[83] PublicID ::= 'PUBLIC' S PubidLiteral`\nvar PublicID = reg(PUBLIC, S, PubidLiteral);\n// https://www.w3.org/TR/xml11/#NT-NotationDecl\n// `[82] NotationDecl ::= ''` [VC: Unique Notation Name]\nvar NotationDecl = reg('');\n\n// https://www.w3.org/TR/xml11/#NT-Eq\n// `[25] Eq ::= S? '=' S?`\nvar Eq = reg(S_OPT, '=', S_OPT);\n// https://www.w3.org/TR/xml/#NT-VersionNum\n// `[26] VersionNum ::= '1.' [0-9]+`\n// https://www.w3.org/TR/xml11/#NT-VersionNum\n// `[26] VersionNum ::= '1.1'`\nvar VersionNum = /1[.]\\d+/;\n// https://www.w3.org/TR/xml11/#NT-VersionInfo\n// `[24] VersionInfo ::= S 'version' Eq (\"'\" VersionNum \"'\" | '\"' VersionNum '\"')`\nvar VersionInfo = reg(S, 'version', Eq, regg(\"'\", VersionNum, \"'\", '|', '\"', VersionNum, '\"'));\n// https://www.w3.org/TR/xml11/#NT-EncName\n// `[81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*`\nvar EncName = /[A-Za-z][-A-Za-z0-9._]*/;\n// https://www.w3.org/TR/xml11/#NT-EncDecl\n// `[80] EncodingDecl ::= S 'encoding' Eq ('\"' EncName '\"' | \"'\" EncName \"'\" )`\nvar EncodingDecl = regg(S, 'encoding', Eq, regg('\"', EncName, '\"', '|', \"'\", EncName, \"'\"));\n// https://www.w3.org/TR/xml11/#NT-SDDecl\n// `[32] SDDecl ::= S 'standalone' Eq ((\"'\" ('yes' | 'no') \"'\") | ('\"' ('yes' | 'no') '\"'))`\nvar SDDecl = regg(S, 'standalone', Eq, regg(\"'\", regg('yes', '|', 'no'), \"'\", '|', '\"', regg('yes', '|', 'no'), '\"'));\n// https://www.w3.org/TR/xml11/#NT-XMLDecl\n// [23] XMLDecl ::= ''\nvar XMLDecl = reg(/^<\\?xml/, VersionInfo, EncodingDecl, '?', SDDecl, '?', S_OPT, /\\?>/);\n\n/*\n https://www.w3.org/TR/xml/#NT-markupdecl\n https://www.w3.org/TR/xml11/#NT-markupdecl\n `[29] markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment`\n var markupdecl = regg(elementdecl, '|', AttlistDecl, '|', EntityDecl, '|', NotationDecl, '|', PI_unsafe, '|', Comment);\n*/\n/*\n https://www.w3.org/TR/xml-names/#NT-doctypedecl\n`[28a] DeclSep ::= PEReference | S`\n https://www.w3.org/TR/xml11/#NT-intSubset\n```\n [28b] intSubset ::= (markupdecl | DeclSep)*\n === (markupdecl | PEReference | S)*\n```\n [WFC: PE Between Declarations]\n var intSubset = reg(regg(markupdecl, '|', PEReference, '|', S), '*');\n*/\nvar DOCTYPE_DECL_START = ''`\n https://www.afterwardsw3.org/TR/xml-names/#NT-doctypedecl\n `[16] doctypedecl ::= ''`\n var doctypedecl = reg('');\n*/\n\nvar CDATA_START = '';\nvar CDStart = //;\nvar CData = reg(Char, '*?', CDEnd);\n/*\n https://www.w3.org/TR/xml/#dt-cdsection\n `[18] \tCDSect\t ::= \tCDStart CData CDEnd`\n `[19] \tCDStart\t ::= \t'' Char*))`\n `[21] \tCDEnd\t ::= \t']]>'`\n*/\nvar CDSect = reg(CDStart, CData);\n\n// unit tested\nexports.chars = chars;\nexports.chars_without = chars_without;\nexports.detectUnicodeSupport = detectUnicodeSupport;\nexports.reg = reg;\nexports.regg = regg;\nexports.AttlistDecl = AttlistDecl;\nexports.CDATA_START = CDATA_START;\nexports.CDATA_END = CDATA_END;\nexports.CDSect = CDSect;\nexports.Char = Char;\nexports.Comment = Comment;\nexports.COMMENT_START = COMMENT_START;\nexports.COMMENT_END = COMMENT_END;\nexports.DOCTYPE_DECL_START = DOCTYPE_DECL_START;\nexports.elementdecl = elementdecl;\nexports.EntityDecl = EntityDecl;\nexports.EntityValue = EntityValue;\nexports.ExternalID = ExternalID;\nexports.ExternalID_match = ExternalID_match;\nexports.Name = Name;\nexports.NotationDecl = NotationDecl;\nexports.Reference = Reference;\nexports.PEReference = PEReference;\nexports.PI = PI;\nexports.PUBLIC = PUBLIC;\nexports.PubidLiteral = PubidLiteral;\nexports.QName = QName;\nexports.QName_exact = QName_exact;\nexports.QName_group = QName_group;\nexports.S = S;\nexports.SChar_s = SChar_s;\nexports.S_OPT = S_OPT;\nexports.SYSTEM = SYSTEM;\nexports.SystemLiteral = SystemLiteral;\nexports.UNICODE_REPLACEMENT_CHARACTER = UNICODE_REPLACEMENT_CHARACTER;\nexports.UNICODE_SUPPORT = UNICODE_SUPPORT;\nexports.XMLDecl = XMLDecl;\n","'use strict';\nvar conventions = require('./conventions');\nexports.assign = conventions.assign;\nexports.hasDefaultHTMLNamespace = conventions.hasDefaultHTMLNamespace;\nexports.isHTMLMimeType = conventions.isHTMLMimeType;\nexports.isValidMimeType = conventions.isValidMimeType;\nexports.MIME_TYPE = conventions.MIME_TYPE;\nexports.NAMESPACE = conventions.NAMESPACE;\n\nvar errors = require('./errors');\nexports.DOMException = errors.DOMException;\nexports.DOMExceptionName = errors.DOMExceptionName;\nexports.ExceptionCode = errors.ExceptionCode;\nexports.ParseError = errors.ParseError;\n\nvar dom = require('./dom');\nexports.Attr = dom.Attr;\nexports.CDATASection = dom.CDATASection;\nexports.CharacterData = dom.CharacterData;\nexports.Comment = dom.Comment;\nexports.Document = dom.Document;\nexports.DocumentFragment = dom.DocumentFragment;\nexports.DocumentType = dom.DocumentType;\nexports.DOMImplementation = dom.DOMImplementation;\nexports.Element = dom.Element;\nexports.Entity = dom.Entity;\nexports.EntityReference = dom.EntityReference;\nexports.LiveNodeList = dom.LiveNodeList;\nexports.NamedNodeMap = dom.NamedNodeMap;\nexports.Node = dom.Node;\nexports.NodeList = dom.NodeList;\nexports.Notation = dom.Notation;\nexports.ProcessingInstruction = dom.ProcessingInstruction;\nexports.Text = dom.Text;\nexports.XMLSerializer = dom.XMLSerializer;\n\nvar domParser = require('./dom-parser');\nexports.DOMParser = domParser.DOMParser;\nexports.onErrorStopParsing = domParser.onErrorStopParsing;\nexports.onWarningStopParsing = domParser.onWarningStopParsing;\n","'use strict';\n\nvar conventions = require('./conventions');\nvar g = require('./grammar');\nvar errors = require('./errors');\n\nvar isHTMLEscapableRawTextElement = conventions.isHTMLEscapableRawTextElement;\nvar isHTMLMimeType = conventions.isHTMLMimeType;\nvar isHTMLRawTextElement = conventions.isHTMLRawTextElement;\nvar hasOwn = conventions.hasOwn;\nvar NAMESPACE = conventions.NAMESPACE;\nvar ParseError = errors.ParseError;\nvar DOMException = errors.DOMException;\n\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\nvar S_TAG = 0; //tag name offerring\nvar S_ATTR = 1; //attr name offerring\nvar S_ATTR_SPACE = 2; //attr name end and space offer\nvar S_EQ = 3; //=space?\nvar S_ATTR_NOQUOT_VALUE = 4; //attr value(no quot value only)\nvar S_ATTR_END = 5; //attr value end and no space(quot end)\nvar S_TAG_SPACE = 6; //(attr value end || tag end ) && (space offer)\nvar S_TAG_CLOSE = 7; //closed el\n\nfunction XMLReader() {}\n\nXMLReader.prototype = {\n\tparse: function (source, defaultNSMap, entityMap) {\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap, (defaultNSMap = Object.create(null)));\n\t\tparse(source, defaultNSMap, entityMap, domBuilder, this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t},\n};\n\n/**\n * Detecting everything that might be a reference,\n * including those without ending `;`, since those are allowed in HTML.\n * The entityReplacer takes care of verifying and transforming each occurrence,\n * and reports to the errorHandler on those that are not OK,\n * depending on the context.\n */\nvar ENTITY_REG = /&#?\\w+;?/g;\n\nfunction parse(source, defaultNSMapCopy, entityMap, domBuilder, errorHandler) {\n\tvar isHTML = isHTMLMimeType(domBuilder.mimeType);\n\tif (source.indexOf(g.UNICODE_REPLACEMENT_CHARACTER) >= 0) {\n\t\terrorHandler.warning('Unicode replacement character detected, source encoding issues?');\n\t}\n\n\tfunction fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10),\n\t\t\t\tsurrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\n\tfunction entityReplacer(a) {\n\t\tvar complete = a[a.length - 1] === ';' ? a : a + ';';\n\t\tif (!isHTML && complete !== a) {\n\t\t\terrorHandler.error('EntityRef: expecting ;');\n\t\t\treturn a;\n\t\t}\n\t\tvar match = g.Reference.exec(complete);\n\t\tif (!match || match[0].length !== complete.length) {\n\t\t\terrorHandler.error('entity not matching Reference production: ' + a);\n\t\t\treturn a;\n\t\t}\n\t\tvar k = complete.slice(1, -1);\n\t\tif (hasOwn(entityMap, k)) {\n\t\t\treturn entityMap[k];\n\t\t} else if (k.charAt(0) === '#') {\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x', '0x')));\n\t\t} else {\n\t\t\terrorHandler.error('entity not found:' + a);\n\t\t\treturn a;\n\t\t}\n\t}\n\n\tfunction appendText(end) {\n\t\t//has some bugs\n\t\tif (end > start) {\n\t\t\tvar xt = source.substring(start, end).replace(ENTITY_REG, entityReplacer);\n\t\t\tlocator && position(start);\n\t\t\tdomBuilder.characters(xt, 0, end - start);\n\t\t\tstart = end;\n\t\t}\n\t}\n\n\tfunction position(p, m) {\n\t\twhile (p >= lineEnd && (m = linePattern.exec(source))) {\n\t\t\tlineStart = m.index;\n\t\t\tlineEnd = lineStart + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t}\n\t\tlocator.columnNumber = p - lineStart + 1;\n\t}\n\n\tvar lineStart = 0;\n\tvar lineEnd = 0;\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g;\n\tvar locator = domBuilder.locator;\n\n\tvar parseStack = [{ currentNSMap: defaultNSMapCopy }];\n\tvar unclosedTags = [];\n\tvar start = 0;\n\twhile (true) {\n\t\ttry {\n\t\t\tvar tagStart = source.indexOf('<', start);\n\t\t\tif (tagStart < 0) {\n\t\t\t\tif (!isHTML && unclosedTags.length > 0) {\n\t\t\t\t\treturn errorHandler.fatalError('unclosed xml tag(s): ' + unclosedTags.join(', '));\n\t\t\t\t}\n\t\t\t\tif (!source.substring(start).match(/^\\s*$/)) {\n\t\t\t\t\tvar doc = domBuilder.doc;\n\t\t\t\t\tvar text = doc.createTextNode(source.substr(start));\n\t\t\t\t\tif (doc.documentElement) {\n\t\t\t\t\t\treturn errorHandler.error('Extra content at the end of the document');\n\t\t\t\t\t}\n\t\t\t\t\tdoc.appendChild(text);\n\t\t\t\t\tdomBuilder.currentElement = text;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (tagStart > start) {\n\t\t\t\tvar fromSource = source.substring(start, tagStart);\n\t\t\t\tif (!isHTML && unclosedTags.length === 0) {\n\t\t\t\t\tfromSource = fromSource.replace(new RegExp(g.S_OPT.source, 'g'), '');\n\t\t\t\t\tfromSource && errorHandler.error(\"Unexpected content outside root element: '\" + fromSource + \"'\");\n\t\t\t\t}\n\t\t\t\tappendText(tagStart);\n\t\t\t}\n\t\t\tswitch (source.charAt(tagStart + 1)) {\n\t\t\t\tcase '/':\n\t\t\t\t\tvar end = source.indexOf('>', tagStart + 2);\n\t\t\t\t\tvar tagNameRaw = source.substring(tagStart + 2, end > 0 ? end : undefined);\n\t\t\t\t\tif (!tagNameRaw) {\n\t\t\t\t\t\treturn errorHandler.fatalError('end tag name missing');\n\t\t\t\t\t}\n\t\t\t\t\tvar tagNameMatch = end > 0 && g.reg('^', g.QName_group, g.S_OPT, '$').exec(tagNameRaw);\n\t\t\t\t\tif (!tagNameMatch) {\n\t\t\t\t\t\treturn errorHandler.fatalError('end tag name contains invalid characters: \"' + tagNameRaw + '\"');\n\t\t\t\t\t}\n\t\t\t\t\tif (!domBuilder.currentElement && !domBuilder.doc.documentElement) {\n\t\t\t\t\t\t// not enough information to provide a helpful error message,\n\t\t\t\t\t\t// but parsing will throw since there is no root element\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar currentTagName =\n\t\t\t\t\t\tunclosedTags[unclosedTags.length - 1] ||\n\t\t\t\t\t\tdomBuilder.currentElement.tagName ||\n\t\t\t\t\t\tdomBuilder.doc.documentElement.tagName ||\n\t\t\t\t\t\t'';\n\t\t\t\t\tif (currentTagName !== tagNameMatch[1]) {\n\t\t\t\t\t\tvar tagNameLower = tagNameMatch[1].toLowerCase();\n\t\t\t\t\t\tif (!isHTML || currentTagName.toLowerCase() !== tagNameLower) {\n\t\t\t\t\t\t\treturn errorHandler.fatalError('Opening and ending tag mismatch: \"' + currentTagName + '\" != \"' + tagNameRaw + '\"');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar config = parseStack.pop();\n\t\t\t\t\tunclosedTags.pop();\n\t\t\t\t\tvar localNSMap = config.localNSMap;\n\t\t\t\t\tdomBuilder.endElement(config.uri, config.localName, currentTagName);\n\t\t\t\t\tif (localNSMap) {\n\t\t\t\t\t\tfor (var prefix in localNSMap) {\n\t\t\t\t\t\t\tif (hasOwn(localNSMap, prefix)) {\n\t\t\t\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tend++;\n\t\t\t\t\tbreak;\n\t\t\t\t// end element\n\t\t\t\tcase '?': // \n\t\t\t\t\tlocator && position(tagStart);\n\t\t\t\t\tend = parseProcessingInstruction(source, tagStart, domBuilder, errorHandler);\n\t\t\t\t\tbreak;\n\t\t\t\tcase '!': // start) {\n\t\t\tstart = end;\n\t\t} else {\n\t\t\t//Possible sax fallback here, risk of positional error\n\t\t\tappendText(Math.max(tagStart, start) + 1);\n\t\t}\n\t}\n}\n\nfunction copyLocator(f, t) {\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n}\n\n/**\n * @returns\n * end of the elementStartPart(end of elementEndPart for selfClosed el)\n * @see {@link #appendElement}\n */\nfunction parseElementStartPart(source, start, el, currentNSMap, entityReplacer, errorHandler, isHTML) {\n\t/**\n\t * @param {string} qname\n\t * @param {string} value\n\t * @param {number} startIndex\n\t */\n\tfunction addAttribute(qname, value, startIndex) {\n\t\tif (hasOwn(el.attributeNames, qname)) {\n\t\t\treturn errorHandler.fatalError('Attribute ' + qname + ' redefined');\n\t\t}\n\t\tif (!isHTML && value.indexOf('<') >= 0) {\n\t\t\treturn errorHandler.fatalError(\"Unescaped '<' not allowed in attributes values\");\n\t\t}\n\t\tel.addValue(\n\t\t\tqname,\n\t\t\t// @see https://www.w3.org/TR/xml/#AVNormalize\n\t\t\t// since the xmldom sax parser does not \"interpret\" DTD the following is not implemented:\n\t\t\t// - recursive replacement of (DTD) entity references\n\t\t\t// - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA\n\t\t\tvalue.replace(/[\\t\\n\\r]/g, ' ').replace(ENTITY_REG, entityReplacer),\n\t\t\tstartIndex\n\t\t);\n\t}\n\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG; //status\n\twhile (true) {\n\t\tvar c = source.charAt(p);\n\t\tswitch (c) {\n\t\t\tcase '=':\n\t\t\t\tif (s === S_ATTR) {\n\t\t\t\t\t//attrName\n\t\t\t\t\tattrName = source.slice(start, p);\n\t\t\t\t\ts = S_EQ;\n\t\t\t\t} else if (s === S_ATTR_SPACE) {\n\t\t\t\t\ts = S_EQ;\n\t\t\t\t} else {\n\t\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\t\tthrow new Error('attribute equal must after attrName'); // No known test case\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"'\":\n\t\t\tcase '\"':\n\t\t\t\tif (\n\t\t\t\t\ts === S_EQ ||\n\t\t\t\t\ts === S_ATTR //|| s == S_ATTR_SPACE\n\t\t\t\t) {\n\t\t\t\t\t//equal\n\t\t\t\t\tif (s === S_ATTR) {\n\t\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"');\n\t\t\t\t\t\tattrName = source.slice(start, p);\n\t\t\t\t\t}\n\t\t\t\t\tstart = p + 1;\n\t\t\t\t\tp = source.indexOf(c, start);\n\t\t\t\t\tif (p > 0) {\n\t\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\t\taddAttribute(attrName, value, start - 1);\n\t\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\t\tthrow new Error(\"attribute value no end '\" + c + \"' match\");\n\t\t\t\t\t}\n\t\t\t\t} else if (s == S_ATTR_NOQUOT_VALUE) {\n\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\t\terrorHandler.warning('attribute \"' + attrName + '\" missed start quot(' + c + ')!!');\n\t\t\t\t\tstart = p + 1;\n\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t} else {\n\t\t\t\t\t//fatalError: no equal before\n\t\t\t\t\tthrow new Error('attribute value must after \"=\"'); // No known test case\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '/':\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase S_TAG:\n\t\t\t\t\t\tel.setTagName(source.slice(start, p));\n\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\t\ts = S_TAG_CLOSE;\n\t\t\t\t\t\tel.closed = true;\n\t\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\tcase S_ATTR:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\t\tel.closed = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t//case S_EQ:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error(\"attribute invalid close char('/')\"); // No known test case\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase '': //end document\n\t\t\t\terrorHandler.error('unexpected end of input');\n\t\t\t\tif (s == S_TAG) {\n\t\t\t\t\tel.setTagName(source.slice(start, p));\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\tcase '>':\n\t\t\t\tswitch (s) {\n\t\t\t\t\tcase S_TAG:\n\t\t\t\t\t\tel.setTagName(source.slice(start, p));\n\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\t\tbreak; //normal\n\t\t\t\t\tcase S_ATTR_NOQUOT_VALUE: //Compatible state\n\t\t\t\t\tcase S_ATTR:\n\t\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\t\tif (value.slice(-1) === '/') {\n\t\t\t\t\t\t\tel.closed = true;\n\t\t\t\t\t\t\tvalue = value.slice(0, -1);\n\t\t\t\t\t\t}\n\t\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\t\tif (s === S_ATTR_SPACE) {\n\t\t\t\t\t\t\tvalue = attrName;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (s == S_ATTR_NOQUOT_VALUE) {\n\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + value + '\" missed quot(\")!');\n\t\t\t\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!isHTML) {\n\t\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + value + '\" missed value!! \"' + value + '\" instead!!');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\taddAttribute(value, value, start);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase S_EQ:\n\t\t\t\t\t\tif (!isHTML) {\n\t\t\t\t\t\t\treturn errorHandler.fatalError('AttValue: \\' or \" expected');\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\t\tcase '\\u0080':\n\t\t\t\tc = ' ';\n\t\t\tdefault:\n\t\t\t\tif (c <= ' ') {\n\t\t\t\t\t//space\n\t\t\t\t\tswitch (s) {\n\t\t\t\t\t\tcase S_TAG:\n\t\t\t\t\t\t\tel.setTagName(source.slice(start, p)); //tagName\n\t\t\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_ATTR:\n\t\t\t\t\t\t\tattrName = source.slice(start, p);\n\t\t\t\t\t\t\ts = S_ATTR_SPACE;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\t\t\tvar value = source.slice(start, p);\n\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + value + '\" missed quot(\")!!');\n\t\t\t\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t//case S_TAG_SPACE:\n\t\t\t\t\t\t//case S_EQ:\n\t\t\t\t\t\t//case S_ATTR_SPACE:\n\t\t\t\t\t\t//\tvoid();break;\n\t\t\t\t\t\t//case S_TAG_CLOSE:\n\t\t\t\t\t\t//ignore warning\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t//not space\n\t\t\t\t\t//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n\t\t\t\t\t//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\n\t\t\t\t\tswitch (s) {\n\t\t\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\n\t\t\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\t\t\tif (!isHTML) {\n\t\t\t\t\t\t\t\terrorHandler.warning('attribute \"' + attrName + '\" missed value!! \"' + attrName + '\" instead2!!');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\taddAttribute(attrName, attrName, start);\n\t\t\t\t\t\t\tstart = p;\n\t\t\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\t\t\terrorHandler.warning('attribute space is required\"' + attrName + '\"!!');\n\t\t\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\t\t\tstart = p;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_EQ:\n\t\t\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\n\t\t\t\t\t\t\tstart = p;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t} //end outer switch\n\t\tp++;\n\t}\n}\n\n/**\n * @returns\n * `true` if a new namespace has been defined.\n */\nfunction appendElement(el, domBuilder, currentNSMap) {\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\tvar i = el.length;\n\twhile (i--) {\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif (nsp > 0) {\n\t\t\tvar prefix = (a.prefix = qName.slice(0, nsp));\n\t\t\tvar localName = qName.slice(nsp + 1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName;\n\t\t} else {\n\t\t\tlocalName = qName;\n\t\t\tprefix = null;\n\t\t\tnsPrefix = qName === 'xmlns' && '';\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName;\n\t\t//prefix == null for no ns prefix attribute\n\t\tif (nsPrefix !== false) {\n\t\t\t//hack!!\n\t\t\tif (localNSMap == null) {\n\t\t\t\tlocalNSMap = Object.create(null);\n\t\t\t\t_copy(currentNSMap, (currentNSMap = Object.create(null)));\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = NAMESPACE.XMLNS;\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value);\n\t\t}\n\t}\n\tvar i = el.length;\n\twhile (i--) {\n\t\ta = el[i];\n\t\tif (a.prefix) {\n\t\t\t//no prefix attribute has no namespace\n\t\t\tif (a.prefix === 'xml') {\n\t\t\t\ta.uri = NAMESPACE.XML;\n\t\t\t}\n\t\t\tif (a.prefix !== 'xmlns') {\n\t\t\t\ta.uri = currentNSMap[a.prefix];\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif (nsp > 0) {\n\t\tprefix = el.prefix = tagName.slice(0, nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp + 1);\n\t} else {\n\t\tprefix = null; //important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = (el.uri = currentNSMap[prefix || '']);\n\tdomBuilder.startElement(ns, localName, tagName, el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif (el.closed) {\n\t\tdomBuilder.endElement(ns, localName, tagName);\n\t\tif (localNSMap) {\n\t\t\tfor (prefix in localNSMap) {\n\t\t\t\tif (hasOwn(localNSMap, prefix)) {\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\t//parseStack.push(el);\n\t\treturn true;\n\t}\n}\n\nfunction parseHtmlSpecialContent(source, elStartEnd, tagName, entityReplacer, domBuilder) {\n\t// https://html.spec.whatwg.org/#raw-text-elements\n\t// https://html.spec.whatwg.org/#escapable-raw-text-elements\n\t// https://html.spec.whatwg.org/#cdata-rcdata-restrictions:raw-text-elements\n\t// TODO: https://html.spec.whatwg.org/#cdata-rcdata-restrictions\n\tvar isEscapableRaw = isHTMLEscapableRawTextElement(tagName);\n\tif (isEscapableRaw || isHTMLRawTextElement(tagName)) {\n\t\tvar elEndStart = source.indexOf('', elStartEnd);\n\t\tvar text = source.substring(elStartEnd + 1, elEndStart);\n\n\t\tif (isEscapableRaw) {\n\t\t\ttext = text.replace(ENTITY_REG, entityReplacer);\n\t\t}\n\t\tdomBuilder.characters(text, 0, text.length);\n\t\treturn elEndStart;\n\t}\n\treturn elStartEnd + 1;\n}\n\nfunction _copy(source, target) {\n\tfor (var n in source) {\n\t\tif (hasOwn(source, n)) {\n\t\t\ttarget[n] = source[n];\n\t\t}\n\t}\n}\n\n/**\n * @typedef ParseUtils\n * @property {function(relativeIndex: number?): string | undefined} char\n * Provides look ahead access to a singe character relative to the current index.\n * @property {function(): number} getIndex\n * Provides read-only access to the current index.\n * @property {function(reg: RegExp): string | null} getMatch\n * Applies the provided regular expression enforcing that it starts at the current index and\n * returns the complete matching string,\n * and moves the current index by the length of the matching string.\n * @property {function(): string} getSource\n * Provides read-only access to the complete source.\n * @property {function(places: number?): void} skip\n * moves the current index by places (defaults to 1)\n * @property {function(): number} skipBlanks\n * Moves the current index by the amount of white space that directly follows the current index\n * and returns the amount of whitespace chars skipped (0..n),\n * or -1 if the end of the source was reached.\n * @property {function(): string} substringFromIndex\n * creates a substring from the current index to the end of `source`\n * @property {function(compareWith: string): boolean} substringStartsWith\n * Checks if source contains `compareWith`,\n * starting from the current index.\n * @see {@link parseUtils}\n */\n\n/**\n * A temporary scope for parsing and look ahead operations in `source`,\n * starting from index `start`.\n *\n * Some operations move the current index by a number of positions,\n * after which `getIndex` returns the new index.\n *\n * @param {string} source\n * @param {number} start\n * @returns {ParseUtils}\n */\nfunction parseUtils(source, start) {\n\tvar index = start;\n\n\tfunction char(n) {\n\t\tn = n || 0;\n\t\treturn source.charAt(index + n);\n\t}\n\n\tfunction skip(n) {\n\t\tn = n || 1;\n\t\tindex += n;\n\t}\n\n\tfunction skipBlanks() {\n\t\tvar blanks = 0;\n\t\twhile (index < source.length) {\n\t\t\tvar c = char();\n\t\t\tif (c !== ' ' && c !== '\\n' && c !== '\\t' && c !== '\\r') {\n\t\t\t\treturn blanks;\n\t\t\t}\n\t\t\tblanks++;\n\t\t\tskip();\n\t\t}\n\t\treturn -1;\n\t}\n\tfunction substringFromIndex() {\n\t\treturn source.substring(index);\n\t}\n\tfunction substringStartsWith(text) {\n\t\treturn source.substring(index, index + text.length) === text;\n\t}\n\n\tfunction getMatch(args) {\n\t\tvar expr = g.reg('^', args);\n\t\tvar match = expr.exec(substringFromIndex());\n\t\tif (match) {\n\t\t\tskip(match[0].length);\n\t\t\treturn match[0];\n\t\t}\n\t\treturn null;\n\t}\n\treturn {\n\t\tchar: char,\n\t\tgetIndex: function () {\n\t\t\treturn index;\n\t\t},\n\t\tgetMatch: getMatch,\n\t\tgetSource: function () {\n\t\t\treturn source;\n\t\t},\n\t\tskip: skip,\n\t\tskipBlanks: skipBlanks,\n\t\tsubstringFromIndex: substringFromIndex,\n\t\tsubstringStartsWith: substringStartsWith,\n\t};\n}\n\n/**\n * @param {ParseUtils} p\n * @param {DOMHandler} errorHandler\n * @returns {string}\n */\nfunction parseDoctypeInternalSubset(p, errorHandler) {\n\t/**\n\t * @param {ParseUtils} p\n\t * @param {DOMHandler} errorHandler\n\t * @returns {string}\n\t */\n\tfunction parsePI(p, errorHandler) {\n\t\tvar match = g.PI.exec(p.substringFromIndex());\n\t\tif (!match) {\n\t\t\treturn errorHandler.fatalError('processing instruction is not well-formed at position ' + p.getIndex());\n\t\t}\n\t\tif (match[1].toLowerCase() === 'xml') {\n\t\t\treturn errorHandler.fatalError(\n\t\t\t\t'xml declaration is only allowed at the start of the document, but found at position ' + p.getIndex()\n\t\t\t);\n\t\t}\n\t\tp.skip(match[0].length);\n\t\treturn match[0];\n\t}\n\t// Parse internal subset\n\tvar source = p.getSource();\n\tif (p.char() === '[') {\n\t\tp.skip(1);\n\t\tvar intSubsetStart = p.getIndex();\n\t\twhile (p.getIndex() < source.length) {\n\t\t\tp.skipBlanks();\n\t\t\tif (p.char() === ']') {\n\t\t\t\tvar internalSubset = source.substring(intSubsetStart, p.getIndex());\n\t\t\t\tp.skip(1);\n\t\t\t\treturn internalSubset;\n\t\t\t}\n\t\t\tvar current = null;\n\t\t\t// Only in external subset\n\t\t\t// if (char() === '<' && char(1) === '!' && char(2) === '[') {\n\t\t\t// \tparseConditionalSections(p, errorHandler);\n\t\t\t// } else\n\t\t\tif (p.char() === '<' && p.char(1) === '!') {\n\t\t\t\tswitch (p.char(2)) {\n\t\t\t\t\tcase 'E': // ELEMENT | ENTITY\n\t\t\t\t\t\tif (p.char(3) === 'L') {\n\t\t\t\t\t\t\tcurrent = p.getMatch(g.elementdecl);\n\t\t\t\t\t\t} else if (p.char(3) === 'N') {\n\t\t\t\t\t\t\tcurrent = p.getMatch(g.EntityDecl);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'A': // ATTRIBUTE\n\t\t\t\t\t\tcurrent = p.getMatch(g.AttlistDecl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'N': // NOTATION\n\t\t\t\t\t\tcurrent = p.getMatch(g.NotationDecl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '-': // COMMENT\n\t\t\t\t\t\tcurrent = p.getMatch(g.Comment);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if (p.char() === '<' && p.char(1) === '?') {\n\t\t\t\tcurrent = parsePI(p, errorHandler);\n\t\t\t} else if (p.char() === '%') {\n\t\t\t\tcurrent = p.getMatch(g.PEReference);\n\t\t\t} else {\n\t\t\t\treturn errorHandler.fatalError('Error detected in Markup declaration');\n\t\t\t}\n\t\t\tif (!current) {\n\t\t\t\treturn errorHandler.fatalError('Error in internal subset at position ' + p.getIndex());\n\t\t\t}\n\t\t}\n\t\treturn errorHandler.fatalError('doctype internal subset is not well-formed, missing ]');\n\t}\n}\n\n/**\n * Called when the parser encounters an element starting with '') {\n\t\t\t\treturn errorHandler.fatalError('doctype not terminated with > at position ' + p.getIndex());\n\t\t\t}\n\t\t\tp.skip(1);\n\t\t\tdomBuilder.startDTD(doctype.name, doctype.publicId, doctype.systemId, doctype.internalSubset);\n\t\t\tdomBuilder.endDTD();\n\t\t\treturn p.getIndex();\n\t\t}\n\t\tdefault:\n\t\t\treturn errorHandler.fatalError('Not well-formed XML starting with \" 0) {\n\t\t\treturn errorHandler.fatalError(\n\t\t\t\t'processing instruction at position ' + start + ' is an xml declaration which is only at the start of the document'\n\t\t\t);\n\t\t}\n\t\tif (!g.XMLDecl.test(source.substring(start))) {\n\t\t\treturn errorHandler.fatalError('xml declaration is not well-formed');\n\t\t}\n\t}\n\tdomBuilder.processingInstruction(match[1], match[2]);\n\treturn start + match[0].length;\n}\n\nfunction ElementAttributes() {\n\tthis.attributeNames = Object.create(null);\n}\n\nElementAttributes.prototype = {\n\tsetTagName: function (tagName) {\n\t\tif (!g.QName_exact.test(tagName)) {\n\t\t\tthrow new Error('invalid tagName:' + tagName);\n\t\t}\n\t\tthis.tagName = tagName;\n\t},\n\taddValue: function (qName, value, offset) {\n\t\tif (!g.QName_exact.test(qName)) {\n\t\t\tthrow new Error('invalid attribute:' + qName);\n\t\t}\n\t\tthis.attributeNames[qName] = this.length;\n\t\tthis[this.length++] = { qName: qName, value: value, offset: offset };\n\t},\n\tlength: 0,\n\tgetLocalName: function (i) {\n\t\treturn this[i].localName;\n\t},\n\tgetLocator: function (i) {\n\t\treturn this[i].locator;\n\t},\n\tgetQName: function (i) {\n\t\treturn this[i].qName;\n\t},\n\tgetURI: function (i) {\n\t\treturn this[i].uri;\n\t},\n\tgetValue: function (i) {\n\t\treturn this[i].value;\n\t},\n\t//\t,getIndex:function(uri, localName)){\n\t//\t\tif(localName){\n\t//\n\t//\t\t}else{\n\t//\t\t\tvar qName = uri\n\t//\t\t}\n\t//\t},\n\t//\tgetValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},\n\t//\tgetType:function(uri,localName){}\n\t//\tgetType:function(i){},\n};\n\nexports.XMLReader = XMLReader;\nexports.parseUtils = parseUtils;\nexports.parseDoctypeCommentOrCData = parseDoctypeCommentOrCData;\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.VectorTile;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.VectorTile;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.TileJSON;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.format.MVT;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.Observable;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Circle;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Fill;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Icon;","/**\n * @module ol/transform\n */\nimport {assert} from './asserts.js';\n\n/**\n * An array representing an affine 2d transformation for use with\n * {@link module:ol/transform} functions. The array has 6 elements.\n * @typedef {!Array} Transform\n * @api\n */\n\n/**\n * Collection of affine 2d transformation functions. The functions work on an\n * array of 6 elements. The element order is compatible with the [SVGMatrix\n * interface](https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix) and is\n * a subset (elements a to f) of a 3×3 matrix:\n * ```\n * [ a c e ]\n * [ b d f ]\n * [ 0 0 1 ]\n * ```\n */\n\n/**\n * @private\n * @type {Transform}\n */\nconst tmp_ = new Array(6);\n\n/**\n * Create an identity transform.\n * @return {!Transform} Identity transform.\n */\nexport function create() {\n return [1, 0, 0, 1, 0, 0];\n}\n\n/**\n * Resets the given transform to an identity transform.\n * @param {!Transform} transform Transform.\n * @return {!Transform} Transform.\n */\nexport function reset(transform) {\n return set(transform, 1, 0, 0, 1, 0, 0);\n}\n\n/**\n * Multiply the underlying matrices of two transforms and return the result in\n * the first transform.\n * @param {!Transform} transform1 Transform parameters of matrix 1.\n * @param {!Transform} transform2 Transform parameters of matrix 2.\n * @return {!Transform} transform1 multiplied with transform2.\n */\nexport function multiply(transform1, transform2) {\n const a1 = transform1[0];\n const b1 = transform1[1];\n const c1 = transform1[2];\n const d1 = transform1[3];\n const e1 = transform1[4];\n const f1 = transform1[5];\n const a2 = transform2[0];\n const b2 = transform2[1];\n const c2 = transform2[2];\n const d2 = transform2[3];\n const e2 = transform2[4];\n const f2 = transform2[5];\n\n transform1[0] = a1 * a2 + c1 * b2;\n transform1[1] = b1 * a2 + d1 * b2;\n transform1[2] = a1 * c2 + c1 * d2;\n transform1[3] = b1 * c2 + d1 * d2;\n transform1[4] = a1 * e2 + c1 * f2 + e1;\n transform1[5] = b1 * e2 + d1 * f2 + f1;\n\n return transform1;\n}\n\n/**\n * Set the transform components a-f on a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} a The a component of the transform.\n * @param {number} b The b component of the transform.\n * @param {number} c The c component of the transform.\n * @param {number} d The d component of the transform.\n * @param {number} e The e component of the transform.\n * @param {number} f The f component of the transform.\n * @return {!Transform} Matrix with transform applied.\n */\nexport function set(transform, a, b, c, d, e, f) {\n transform[0] = a;\n transform[1] = b;\n transform[2] = c;\n transform[3] = d;\n transform[4] = e;\n transform[5] = f;\n return transform;\n}\n\n/**\n * Set transform on one matrix from another matrix.\n * @param {!Transform} transform1 Matrix to set transform to.\n * @param {!Transform} transform2 Matrix to set transform from.\n * @return {!Transform} transform1 with transform from transform2 applied.\n */\nexport function setFromArray(transform1, transform2) {\n transform1[0] = transform2[0];\n transform1[1] = transform2[1];\n transform1[2] = transform2[2];\n transform1[3] = transform2[3];\n transform1[4] = transform2[4];\n transform1[5] = transform2[5];\n return transform1;\n}\n\n/**\n * Transforms the given coordinate with the given transform returning the\n * resulting, transformed coordinate. The coordinate will be modified in-place.\n *\n * @param {Transform} transform The transformation.\n * @param {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} coordinate The coordinate to transform.\n * @return {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} return coordinate so that operations can be\n * chained together.\n */\nexport function apply(transform, coordinate) {\n const x = coordinate[0];\n const y = coordinate[1];\n coordinate[0] = transform[0] * x + transform[2] * y + transform[4];\n coordinate[1] = transform[1] * x + transform[3] * y + transform[5];\n return coordinate;\n}\n\n/**\n * Applies rotation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} angle Angle in radians.\n * @return {!Transform} The rotated transform.\n */\nexport function rotate(transform, angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n return multiply(transform, set(tmp_, cos, sin, -sin, cos, 0, 0));\n}\n\n/**\n * Applies scale to a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scaled transform.\n */\nexport function scale(transform, x, y) {\n return multiply(transform, set(tmp_, x, 0, 0, y, 0, 0));\n}\n\n/**\n * Creates a scale transform.\n * @param {!Transform} target Transform to overwrite.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scale transform.\n */\nexport function makeScale(target, x, y) {\n return set(target, x, 0, 0, y, 0, 0);\n}\n\n/**\n * Applies translation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} dx Translation x.\n * @param {number} dy Translation y.\n * @return {!Transform} The translated transform.\n */\nexport function translate(transform, dx, dy) {\n return multiply(transform, set(tmp_, 1, 0, 0, 1, dx, dy));\n}\n\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative).\n * @param {!Transform} transform The transform (will be modified in place).\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {!Transform} The composite transform.\n */\nexport function compose(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {\n const sin = Math.sin(angle);\n const cos = Math.cos(angle);\n transform[0] = sx * cos;\n transform[1] = sy * sin;\n transform[2] = -sx * sin;\n transform[3] = sy * cos;\n transform[4] = dx2 * sx * cos - dy2 * sx * sin + dx1;\n transform[5] = dx2 * sy * sin + dy2 * sy * cos + dy1;\n return transform;\n}\n\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative). The resulting transform\n * string can be applied as `transform` property of an HTMLElement's style.\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {string} The composite css transform.\n * @api\n */\nexport function composeCssTransform(dx1, dy1, sx, sy, angle, dx2, dy2) {\n return toString(compose(create(), dx1, dy1, sx, sy, angle, dx2, dy2));\n}\n\n/**\n * Invert the given transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (source) transform.\n */\nexport function invert(source) {\n return makeInverse(source, source);\n}\n\n/**\n * Invert the given transform.\n * @param {!Transform} target Transform to be set as the inverse of\n * the source transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (target) transform.\n */\nexport function makeInverse(target, source) {\n const det = determinant(source);\n assert(det !== 0, 'Transformation matrix cannot be inverted');\n\n const a = source[0];\n const b = source[1];\n const c = source[2];\n const d = source[3];\n const e = source[4];\n const f = source[5];\n\n target[0] = d / det;\n target[1] = -b / det;\n target[2] = -c / det;\n target[3] = a / det;\n target[4] = (c * f - d * e) / det;\n target[5] = -(a * f - b * e) / det;\n\n return target;\n}\n\n/**\n * Returns the determinant of the given matrix.\n * @param {!Transform} mat Matrix.\n * @return {number} Determinant.\n */\nexport function determinant(mat) {\n return mat[0] * mat[3] - mat[1] * mat[2];\n}\n\n/**\n * @type {Array}\n */\nconst matrixPrecision = [1e6, 1e6, 1e6, 1e6, 2, 2];\n\n/**\n * A rounded string version of the transform. This can be used\n * for CSS transforms.\n * @param {!Transform} mat Matrix.\n * @return {string} The transform as a string.\n */\nexport function toString(mat) {\n const transformString =\n 'matrix(' +\n mat\n .map(\n (value, i) =>\n Math.round(value * matrixPrecision[i]) / matrixPrecision[i],\n )\n .join(', ') +\n ')';\n return transformString;\n}\n","/**\n * @module ol/extent\n */\nimport Relationship from './extent/Relationship.js';\n\n/**\n * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`.\n * @typedef {Array} Extent\n * @api\n */\n\n/**\n * Extent corner.\n * @typedef {'bottom-left' | 'bottom-right' | 'top-left' | 'top-right'} Corner\n */\n\n/**\n * Build an extent that includes all given coordinates.\n *\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Bounding extent.\n * @api\n */\nexport function boundingExtent(coordinates) {\n const extent = createEmpty();\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Array} xs Xs.\n * @param {Array} ys Ys.\n * @param {Extent} [dest] Destination extent.\n * @private\n * @return {Extent} Extent.\n */\nfunction _boundingExtentXYs(xs, ys, dest) {\n const minX = Math.min.apply(null, xs);\n const minY = Math.min.apply(null, ys);\n const maxX = Math.max.apply(null, xs);\n const maxY = Math.max.apply(null, ys);\n return createOrUpdate(minX, minY, maxX, maxY, dest);\n}\n\n/**\n * Return extent increased by the provided value.\n * @param {Extent} extent Extent.\n * @param {number} value The amount by which the extent should be buffered.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n * @api\n */\nexport function buffer(extent, value, dest) {\n if (dest) {\n dest[0] = extent[0] - value;\n dest[1] = extent[1] - value;\n dest[2] = extent[2] + value;\n dest[3] = extent[3] + value;\n return dest;\n }\n return [\n extent[0] - value,\n extent[1] - value,\n extent[2] + value,\n extent[3] + value,\n ];\n}\n\n/**\n * Creates a clone of an extent.\n *\n * @param {Extent} extent Extent to clone.\n * @param {Extent} [dest] Extent.\n * @return {Extent} The clone.\n */\nexport function clone(extent, dest) {\n if (dest) {\n dest[0] = extent[0];\n dest[1] = extent[1];\n dest[2] = extent[2];\n dest[3] = extent[3];\n return dest;\n }\n return extent.slice();\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {number} Closest squared distance.\n */\nexport function closestSquaredDistanceXY(extent, x, y) {\n let dx, dy;\n if (x < extent[0]) {\n dx = extent[0] - x;\n } else if (extent[2] < x) {\n dx = x - extent[2];\n } else {\n dx = 0;\n }\n if (y < extent[1]) {\n dy = extent[1] - y;\n } else if (extent[3] < y) {\n dy = y - extent[3];\n } else {\n dy = 0;\n }\n return dx * dx + dy * dy;\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n * @api\n */\nexport function containsCoordinate(extent, coordinate) {\n return containsXY(extent, coordinate[0], coordinate[1]);\n}\n\n/**\n * Check if one extent contains another.\n *\n * An extent is deemed contained if it lies completely within the other extent,\n * including if they share one or more edges.\n *\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The second extent is contained by or on the edge of the\n * first.\n * @api\n */\nexport function containsExtent(extent1, extent2) {\n return (\n extent1[0] <= extent2[0] &&\n extent2[2] <= extent1[2] &&\n extent1[1] <= extent2[1] &&\n extent2[3] <= extent1[3]\n );\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @return {boolean} The x, y values are contained in the extent.\n * @api\n */\nexport function containsXY(extent, x, y) {\n return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];\n}\n\n/**\n * Get the relationship between a coordinate and extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate The coordinate.\n * @return {import(\"./extent/Relationship.js\").default} The relationship (bitwise compare with\n * import(\"./extent/Relationship.js\").Relationship).\n */\nexport function coordinateRelationship(extent, coordinate) {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const x = coordinate[0];\n const y = coordinate[1];\n let relationship = Relationship.UNKNOWN;\n if (x < minX) {\n relationship = relationship | Relationship.LEFT;\n } else if (x > maxX) {\n relationship = relationship | Relationship.RIGHT;\n }\n if (y < minY) {\n relationship = relationship | Relationship.BELOW;\n } else if (y > maxY) {\n relationship = relationship | Relationship.ABOVE;\n }\n if (relationship === Relationship.UNKNOWN) {\n relationship = Relationship.INTERSECTING;\n }\n return relationship;\n}\n\n/**\n * Create an empty extent.\n * @return {Extent} Empty extent.\n * @api\n */\nexport function createEmpty() {\n return [Infinity, Infinity, -Infinity, -Infinity];\n}\n\n/**\n * Create a new extent or update the provided extent.\n * @param {number} minX Minimum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxX Maximum X.\n * @param {number} maxY Maximum Y.\n * @param {Extent} [dest] Destination extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdate(minX, minY, maxX, maxY, dest) {\n if (dest) {\n dest[0] = minX;\n dest[1] = minY;\n dest[2] = maxX;\n dest[3] = maxY;\n return dest;\n }\n return [minX, minY, maxX, maxY];\n}\n\n/**\n * Create a new empty extent or make the provided one empty.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateEmpty(dest) {\n return createOrUpdate(Infinity, Infinity, -Infinity, -Infinity, dest);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinate(coordinate, dest) {\n const x = coordinate[0];\n const y = coordinate[1];\n return createOrUpdate(x, y, x, y, dest);\n}\n\n/**\n * @param {Array} coordinates Coordinates.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinates(coordinates, dest) {\n const extent = createOrUpdateEmpty(dest);\n return extendCoordinates(extent, coordinates);\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromFlatCoordinates(\n flatCoordinates,\n offset,\n end,\n stride,\n dest,\n) {\n const extent = createOrUpdateEmpty(dest);\n return extendFlatCoordinates(extent, flatCoordinates, offset, end, stride);\n}\n\n/**\n * @param {Array>} rings Rings.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromRings(rings, dest) {\n const extent = createOrUpdateEmpty(dest);\n return extendRings(extent, rings);\n}\n\n/**\n * Determine if two extents are equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The two extents are equivalent.\n * @api\n */\nexport function equals(extent1, extent2) {\n return (\n extent1[0] == extent2[0] &&\n extent1[2] == extent2[2] &&\n extent1[1] == extent2[1] &&\n extent1[3] == extent2[3]\n );\n}\n\n/**\n * Determine if two extents are approximately equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {number} tolerance Tolerance in extent coordinate units.\n * @return {boolean} The two extents differ by less than the tolerance.\n */\nexport function approximatelyEquals(extent1, extent2, tolerance) {\n return (\n Math.abs(extent1[0] - extent2[0]) < tolerance &&\n Math.abs(extent1[2] - extent2[2]) < tolerance &&\n Math.abs(extent1[1] - extent2[1]) < tolerance &&\n Math.abs(extent1[3] - extent2[3]) < tolerance\n );\n}\n\n/**\n * Modify an extent to include another extent.\n * @param {Extent} extent1 The extent to be modified.\n * @param {Extent} extent2 The extent that will be included in the first.\n * @return {Extent} A reference to the first (extended) extent.\n * @api\n */\nexport function extend(extent1, extent2) {\n if (extent2[0] < extent1[0]) {\n extent1[0] = extent2[0];\n }\n if (extent2[2] > extent1[2]) {\n extent1[2] = extent2[2];\n }\n if (extent2[1] < extent1[1]) {\n extent1[1] = extent2[1];\n }\n if (extent2[3] > extent1[3]) {\n extent1[3] = extent2[3];\n }\n return extent1;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n */\nexport function extendCoordinate(extent, coordinate) {\n if (coordinate[0] < extent[0]) {\n extent[0] = coordinate[0];\n }\n if (coordinate[0] > extent[2]) {\n extent[2] = coordinate[0];\n }\n if (coordinate[1] < extent[1]) {\n extent[1] = coordinate[1];\n }\n if (coordinate[1] > extent[3]) {\n extent[3] = coordinate[1];\n }\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Extent.\n */\nexport function extendCoordinates(extent, coordinates) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Extent} Extent.\n */\nexport function extendFlatCoordinates(\n extent,\n flatCoordinates,\n offset,\n end,\n stride,\n) {\n for (; offset < end; offset += stride) {\n extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array>} rings Rings.\n * @return {Extent} Extent.\n */\nexport function extendRings(extent, rings) {\n for (let i = 0, ii = rings.length; i < ii; ++i) {\n extendCoordinates(extent, rings[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n */\nexport function extendXY(extent, x, y) {\n extent[0] = Math.min(extent[0], x);\n extent[1] = Math.min(extent[1], y);\n extent[2] = Math.max(extent[2], x);\n extent[3] = Math.max(extent[3], y);\n}\n\n/**\n * This function calls `callback` for each corner of the extent. If the\n * callback returns a truthy value the function returns that value\n * immediately. Otherwise the function returns `false`.\n * @param {Extent} extent Extent.\n * @param {function(import(\"./coordinate.js\").Coordinate): S} callback Callback.\n * @return {S|boolean} Value.\n * @template S\n */\nexport function forEachCorner(extent, callback) {\n let val;\n val = callback(getBottomLeft(extent));\n if (val) {\n return val;\n }\n val = callback(getBottomRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopLeft(extent));\n if (val) {\n return val;\n }\n return false;\n}\n\n/**\n * Get the size of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Area.\n * @api\n */\nexport function getArea(extent) {\n let area = 0;\n if (!isEmpty(extent)) {\n area = getWidth(extent) * getHeight(extent);\n }\n return area;\n}\n\n/**\n * Get the bottom left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom left coordinate.\n * @api\n */\nexport function getBottomLeft(extent) {\n return [extent[0], extent[1]];\n}\n\n/**\n * Get the bottom right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom right coordinate.\n * @api\n */\nexport function getBottomRight(extent) {\n return [extent[2], extent[1]];\n}\n\n/**\n * Get the center coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Center.\n * @api\n */\nexport function getCenter(extent) {\n return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];\n}\n\n/**\n * Get a corner coordinate of an extent.\n * @param {Extent} extent Extent.\n * @param {Corner} corner Corner.\n * @return {import(\"./coordinate.js\").Coordinate} Corner coordinate.\n */\nexport function getCorner(extent, corner) {\n let coordinate;\n if (corner === 'bottom-left') {\n coordinate = getBottomLeft(extent);\n } else if (corner === 'bottom-right') {\n coordinate = getBottomRight(extent);\n } else if (corner === 'top-left') {\n coordinate = getTopLeft(extent);\n } else if (corner === 'top-right') {\n coordinate = getTopRight(extent);\n } else {\n throw new Error('Invalid corner');\n }\n return coordinate;\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Enlarged area.\n */\nexport function getEnlargedArea(extent1, extent2) {\n const minX = Math.min(extent1[0], extent2[0]);\n const minY = Math.min(extent1[1], extent2[1]);\n const maxX = Math.max(extent1[2], extent2[2]);\n const maxY = Math.max(extent1[3], extent2[3]);\n return (maxX - minX) * (maxY - minY);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @param {Extent} [dest] Destination extent.\n * @return {Extent} Extent.\n */\nexport function getForViewAndSize(center, resolution, rotation, size, dest) {\n const [x0, y0, x1, y1, x2, y2, x3, y3] = getRotatedViewport(\n center,\n resolution,\n rotation,\n size,\n );\n return createOrUpdate(\n Math.min(x0, x1, x2, x3),\n Math.min(y0, y1, y2, y3),\n Math.max(x0, x1, x2, x3),\n Math.max(y0, y1, y2, y3),\n dest,\n );\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array} Linear ring representing the viewport.\n */\nexport function getRotatedViewport(center, resolution, rotation, size) {\n const dx = (resolution * size[0]) / 2;\n const dy = (resolution * size[1]) / 2;\n const cosRotation = Math.cos(rotation);\n const sinRotation = Math.sin(rotation);\n const xCos = dx * cosRotation;\n const xSin = dx * sinRotation;\n const yCos = dy * cosRotation;\n const ySin = dy * sinRotation;\n const x = center[0];\n const y = center[1];\n return [\n x - xCos + ySin,\n y - xSin - yCos,\n x - xCos - ySin,\n y - xSin + yCos,\n x + xCos - ySin,\n y + xSin + yCos,\n x + xCos + ySin,\n y + xSin - yCos,\n x - xCos + ySin,\n y - xSin - yCos,\n ];\n}\n\n/**\n * Get the height of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Height.\n * @api\n */\nexport function getHeight(extent) {\n return extent[3] - extent[1];\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Intersection area.\n */\nexport function getIntersectionArea(extent1, extent2) {\n const intersection = getIntersection(extent1, extent2);\n return getArea(intersection);\n}\n\n/**\n * Get the intersection of two extents.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {Extent} [dest] Optional extent to populate with intersection.\n * @return {Extent} Intersecting extent.\n * @api\n */\nexport function getIntersection(extent1, extent2, dest) {\n const intersection = dest ? dest : createEmpty();\n if (intersects(extent1, extent2)) {\n if (extent1[0] > extent2[0]) {\n intersection[0] = extent1[0];\n } else {\n intersection[0] = extent2[0];\n }\n if (extent1[1] > extent2[1]) {\n intersection[1] = extent1[1];\n } else {\n intersection[1] = extent2[1];\n }\n if (extent1[2] < extent2[2]) {\n intersection[2] = extent1[2];\n } else {\n intersection[2] = extent2[2];\n }\n if (extent1[3] < extent2[3]) {\n intersection[3] = extent1[3];\n } else {\n intersection[3] = extent2[3];\n }\n } else {\n createOrUpdateEmpty(intersection);\n }\n return intersection;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @return {number} Margin.\n */\nexport function getMargin(extent) {\n return getWidth(extent) + getHeight(extent);\n}\n\n/**\n * Get the size (width, height) of an extent.\n * @param {Extent} extent The extent.\n * @return {import(\"./size.js\").Size} The extent size.\n * @api\n */\nexport function getSize(extent) {\n return [extent[2] - extent[0], extent[3] - extent[1]];\n}\n\n/**\n * Get the top left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top left coordinate.\n * @api\n */\nexport function getTopLeft(extent) {\n return [extent[0], extent[3]];\n}\n\n/**\n * Get the top right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top right coordinate.\n * @api\n */\nexport function getTopRight(extent) {\n return [extent[2], extent[3]];\n}\n\n/**\n * Get the width of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Width.\n * @api\n */\nexport function getWidth(extent) {\n return extent[2] - extent[0];\n}\n\n/**\n * Determine if one extent intersects another.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent.\n * @return {boolean} The two extents intersect.\n * @api\n */\nexport function intersects(extent1, extent2) {\n return (\n extent1[0] <= extent2[2] &&\n extent1[2] >= extent2[0] &&\n extent1[1] <= extent2[3] &&\n extent1[3] >= extent2[1]\n );\n}\n\n/**\n * Determine if an extent is empty.\n * @param {Extent} extent Extent.\n * @return {boolean} Is empty.\n * @api\n */\nexport function isEmpty(extent) {\n return extent[2] < extent[0] || extent[3] < extent[1];\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function returnOrUpdate(extent, dest) {\n if (dest) {\n dest[0] = extent[0];\n dest[1] = extent[1];\n dest[2] = extent[2];\n dest[3] = extent[3];\n return dest;\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} value Value.\n */\nexport function scaleFromCenter(extent, value) {\n const deltaX = ((extent[2] - extent[0]) / 2) * (value - 1);\n const deltaY = ((extent[3] - extent[1]) / 2) * (value - 1);\n extent[0] -= deltaX;\n extent[2] += deltaX;\n extent[1] -= deltaY;\n extent[3] += deltaY;\n}\n\n/**\n * Determine if the segment between two coordinates intersects (crosses,\n * touches, or is contained by) the provided extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} start Segment start coordinate.\n * @param {import(\"./coordinate.js\").Coordinate} end Segment end coordinate.\n * @return {boolean} The segment intersects the extent.\n */\nexport function intersectsSegment(extent, start, end) {\n let intersects = false;\n const startRel = coordinateRelationship(extent, start);\n const endRel = coordinateRelationship(extent, end);\n if (\n startRel === Relationship.INTERSECTING ||\n endRel === Relationship.INTERSECTING\n ) {\n intersects = true;\n } else {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const startX = start[0];\n const startY = start[1];\n const endX = end[0];\n const endY = end[1];\n const slope = (endY - startY) / (endX - startX);\n let x, y;\n if (!!(endRel & Relationship.ABOVE) && !(startRel & Relationship.ABOVE)) {\n // potentially intersects top\n x = endX - (endY - maxY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.RIGHT) &&\n !(startRel & Relationship.RIGHT)\n ) {\n // potentially intersects right\n y = endY - (endX - maxX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.BELOW) &&\n !(startRel & Relationship.BELOW)\n ) {\n // potentially intersects bottom\n x = endX - (endY - minY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.LEFT) &&\n !(startRel & Relationship.LEFT)\n ) {\n // potentially intersects left\n y = endY - (endX - minX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n }\n return intersects;\n}\n\n/**\n * Apply a transform function to the extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./proj.js\").TransformFunction} transformFn Transform function.\n * Called with `[minX, minY, maxX, maxY]` extent coordinates.\n * @param {Extent} [dest] Destination extent.\n * @param {number} [stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {Extent} Extent.\n * @api\n */\nexport function applyTransform(extent, transformFn, dest, stops) {\n if (isEmpty(extent)) {\n return createOrUpdateEmpty(dest);\n }\n let coordinates = [];\n if (stops > 1) {\n const width = extent[2] - extent[0];\n const height = extent[3] - extent[1];\n for (let i = 0; i < stops; ++i) {\n coordinates.push(\n extent[0] + (width * i) / stops,\n extent[1],\n extent[2],\n extent[1] + (height * i) / stops,\n extent[2] - (width * i) / stops,\n extent[3],\n extent[0],\n extent[3] - (height * i) / stops,\n );\n }\n } else {\n coordinates = [\n extent[0],\n extent[1],\n extent[2],\n extent[1],\n extent[2],\n extent[3],\n extent[0],\n extent[3],\n ];\n }\n transformFn(coordinates, coordinates, 2);\n const xs = [];\n const ys = [];\n for (let i = 0, l = coordinates.length; i < l; i += 2) {\n xs.push(coordinates[i]);\n ys.push(coordinates[i + 1]);\n }\n return _boundingExtentXYs(xs, ys, dest);\n}\n\n/**\n * Modifies the provided extent in-place to be within the real world\n * extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @return {Extent} The extent within the real world extent.\n */\nexport function wrapX(extent, projection) {\n const projectionExtent = projection.getExtent();\n const center = getCenter(extent);\n if (\n projection.canWrapX() &&\n (center[0] < projectionExtent[0] || center[0] >= projectionExtent[2])\n ) {\n const worldWidth = getWidth(projectionExtent);\n const worldsAway = Math.floor(\n (center[0] - projectionExtent[0]) / worldWidth,\n );\n const offset = worldsAway * worldWidth;\n extent[0] -= offset;\n extent[2] -= offset;\n }\n return extent;\n}\n\n/**\n * Fits the extent to the real world\n *\n * If the extent does not cross the anti meridian, this will return the extent in an array\n * If the extent crosses the anti meridian, the extent will be sliced, so each part fits within the\n * real world\n *\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @param {boolean} [multiWorld] Return all worlds\n * @return {Array} The extent within the real world extent.\n */\nexport function wrapAndSliceX(extent, projection, multiWorld) {\n if (projection.canWrapX()) {\n const projectionExtent = projection.getExtent();\n\n if (!isFinite(extent[0]) || !isFinite(extent[2])) {\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n }\n\n wrapX(extent, projection);\n const worldWidth = getWidth(projectionExtent);\n\n if (getWidth(extent) > worldWidth && !multiWorld) {\n // the extent wraps around on itself\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n }\n if (extent[0] < projectionExtent[0]) {\n // the extent crosses the anti meridian, so it needs to be sliced\n return [\n [extent[0] + worldWidth, extent[1], projectionExtent[2], extent[3]],\n [projectionExtent[0], extent[1], extent[2], extent[3]],\n ];\n }\n if (extent[2] > projectionExtent[2]) {\n // the extent crosses the anti meridian, so it needs to be sliced\n return [\n [extent[0], extent[1], projectionExtent[2], extent[3]],\n [projectionExtent[0], extent[1], extent[2] - worldWidth, extent[3]],\n ];\n }\n }\n\n return [extent];\n}\n","/**\n * @module ol/math\n */\n\n/**\n * Takes a number and clamps it to within the provided bounds.\n * @param {number} value The input number.\n * @param {number} min The minimum value to return.\n * @param {number} max The maximum value to return.\n * @return {number} The input number if it is within bounds, or the nearest\n * number within the bounds.\n */\nexport function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Returns the square of the closest distance between the point (x, y) and the\n * line segment (x1, y1) to (x2, y2).\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredSegmentDistance(x, y, x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n if (dx !== 0 || dy !== 0) {\n const t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n x1 = x2;\n y1 = y2;\n } else if (t > 0) {\n x1 += dx * t;\n y1 += dy * t;\n }\n }\n return squaredDistance(x, y, x1, y1);\n}\n\n/**\n * Returns the square of the distance between the points (x1, y1) and (x2, y2).\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredDistance(x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n return dx * dx + dy * dy;\n}\n\n/**\n * Solves system of linear equations using Gaussian elimination method.\n *\n * @param {Array>} mat Augmented matrix (n x n + 1 column)\n * in row-major order.\n * @return {Array|null} The resulting vector.\n */\nexport function solveLinearSystem(mat) {\n const n = mat.length;\n\n for (let i = 0; i < n; i++) {\n // Find max in the i-th column (ignoring i - 1 first rows)\n let maxRow = i;\n let maxEl = Math.abs(mat[i][i]);\n for (let r = i + 1; r < n; r++) {\n const absValue = Math.abs(mat[r][i]);\n if (absValue > maxEl) {\n maxEl = absValue;\n maxRow = r;\n }\n }\n\n if (maxEl === 0) {\n return null; // matrix is singular\n }\n\n // Swap max row with i-th (current) row\n const tmp = mat[maxRow];\n mat[maxRow] = mat[i];\n mat[i] = tmp;\n\n // Subtract the i-th row to make all the remaining rows 0 in the i-th column\n for (let j = i + 1; j < n; j++) {\n const coef = -mat[j][i] / mat[i][i];\n for (let k = i; k < n + 1; k++) {\n if (i == k) {\n mat[j][k] = 0;\n } else {\n mat[j][k] += coef * mat[i][k];\n }\n }\n }\n }\n\n // Solve Ax=b for upper triangular matrix A (mat)\n const x = new Array(n);\n for (let l = n - 1; l >= 0; l--) {\n x[l] = mat[l][n] / mat[l][l];\n for (let m = l - 1; m >= 0; m--) {\n mat[m][n] -= mat[m][l] * x[l];\n }\n }\n return x;\n}\n\n/**\n * Converts radians to to degrees.\n *\n * @param {number} angleInRadians Angle in radians.\n * @return {number} Angle in degrees.\n */\nexport function toDegrees(angleInRadians) {\n return (angleInRadians * 180) / Math.PI;\n}\n\n/**\n * Converts degrees to radians.\n *\n * @param {number} angleInDegrees Angle in degrees.\n * @return {number} Angle in radians.\n */\nexport function toRadians(angleInDegrees) {\n return (angleInDegrees * Math.PI) / 180;\n}\n\n/**\n * Returns the modulo of a / b, depending on the sign of b.\n *\n * @param {number} a Dividend.\n * @param {number} b Divisor.\n * @return {number} Modulo.\n */\nexport function modulo(a, b) {\n const r = a % b;\n return r * b < 0 ? r + b : r;\n}\n\n/**\n * Calculates the linearly interpolated value of x between a and b.\n *\n * @param {number} a Number\n * @param {number} b Number\n * @param {number} x Value to be interpolated.\n * @return {number} Interpolated value.\n */\nexport function lerp(a, b, x) {\n return a + x * (b - a);\n}\n\n/**\n * Returns a number with a limited number of decimal digits.\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The input number with a limited number of decimal digits.\n */\nexport function toFixed(n, decimals) {\n const factor = Math.pow(10, decimals);\n return Math.round(n * factor) / factor;\n}\n\n/**\n * Rounds a number to the nearest integer value considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The nearest integer.\n */\nexport function round(n, decimals) {\n return Math.round(toFixed(n, decimals));\n}\n\n/**\n * Rounds a number to the next smaller integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next smaller integer.\n */\nexport function floor(n, decimals) {\n return Math.floor(toFixed(n, decimals));\n}\n\n/**\n * Rounds a number to the next bigger integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next bigger integer.\n */\nexport function ceil(n, decimals) {\n return Math.ceil(toFixed(n, decimals));\n}\n\n/**\n * Wraps a number between some minimum and maximum values.\n * @param {number} n The number to wrap.\n * @param {number} min The minimum of the range (inclusive).\n * @param {number} max The maximum of the range (exclusive).\n * @return {number} The wrapped number.\n */\nexport function wrap(n, min, max) {\n if (n >= min && n < max) {\n return n;\n }\n const range = max - min;\n return ((((n - min) % range) + range) % range) + min;\n}\n","/**\n * @module ol/geom/flat/simplify\n */\n// Based on simplify-js https://github.com/mourner/simplify-js\n// Copyright (c) 2012, Vladimir Agafonkin\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//\n// 1. Redistributions of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n\nimport {squaredDistance, squaredSegmentDistance} from '../../math.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {boolean} highQuality Highest quality.\n * @param {Array} [simplifiedFlatCoordinates] Simplified flat\n * coordinates.\n * @return {Array} Simplified line string.\n */\nexport function simplifyLineString(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n highQuality,\n simplifiedFlatCoordinates,\n) {\n simplifiedFlatCoordinates =\n simplifiedFlatCoordinates !== undefined ? simplifiedFlatCoordinates : [];\n if (!highQuality) {\n end = radialDistance(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n );\n flatCoordinates = simplifiedFlatCoordinates;\n offset = 0;\n stride = 2;\n }\n simplifiedFlatCoordinates.length = douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n );\n return simplifiedFlatCoordinates;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n) {\n const n = (end - offset) / stride;\n if (n < 3) {\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n /** @type {Array} */\n const markers = new Array(n);\n markers[0] = 1;\n markers[n - 1] = 1;\n /** @type {Array} */\n const stack = [offset, end - stride];\n let index = 0;\n while (stack.length > 0) {\n const last = stack.pop();\n const first = stack.pop();\n let maxSquaredDistance = 0;\n const x1 = flatCoordinates[first];\n const y1 = flatCoordinates[first + 1];\n const x2 = flatCoordinates[last];\n const y2 = flatCoordinates[last + 1];\n for (let i = first + stride; i < last; i += stride) {\n const x = flatCoordinates[i];\n const y = flatCoordinates[i + 1];\n const squaredDistance = squaredSegmentDistance(x, y, x1, y1, x2, y2);\n if (squaredDistance > maxSquaredDistance) {\n index = i;\n maxSquaredDistance = squaredDistance;\n }\n }\n if (maxSquaredDistance > squaredTolerance) {\n markers[(index - offset) / stride] = 1;\n if (first + stride < index) {\n stack.push(first, index);\n }\n if (index + stride < last) {\n stack.push(index, last);\n }\n }\n }\n for (let i = 0; i < n; ++i) {\n if (markers[i]) {\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride + 1];\n }\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n simplifiedOffset = douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n );\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEndss,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n /** @type {Array} */\n const simplifiedEnds = [];\n simplifiedOffset = douglasPeuckerArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n );\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function radialDistance(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n) {\n if (end <= offset + stride) {\n // zero or one point, no simplification possible, so copy and return\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n // copy first point\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n let x2 = x1;\n let y2 = y1;\n for (offset += stride; offset < end; offset += stride) {\n x2 = flatCoordinates[offset];\n y2 = flatCoordinates[offset + 1];\n if (squaredDistance(x1, y1, x2, y2) > squaredTolerance) {\n // copy point at offset\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n }\n }\n if (x2 != x1 || y2 != y1) {\n // copy last point\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {number} value Value.\n * @param {number} tolerance Tolerance.\n * @return {number} Rounded value.\n */\nexport function snap(value, tolerance) {\n return tolerance * Math.round(value / tolerance);\n}\n\n/**\n * Simplifies a line string using an algorithm designed by Tim Schaub.\n * Coordinates are snapped to the nearest value in a virtual grid and\n * consecutive duplicate coordinates are discarded. This effectively preserves\n * topology as the simplification of any subsection of a line string is\n * independent of the rest of the line string. This means that, for examples,\n * the common edge between two polygons will be simplified to the same line\n * string independently in both polygons. This implementation uses a single\n * pass over the coordinates and eliminates intermediate collinear points.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function quantize(\n flatCoordinates,\n offset,\n end,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n) {\n // do nothing if the line is empty\n if (offset == end) {\n return simplifiedOffset;\n }\n // snap the first coordinate (P1)\n let x1 = snap(flatCoordinates[offset], tolerance);\n let y1 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // add the first coordinate to the output\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n // find the next coordinate that does not snap to the same value as the first\n // coordinate (P2)\n let x2, y2;\n do {\n x2 = snap(flatCoordinates[offset], tolerance);\n y2 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n if (offset == end) {\n // all coordinates snap to the same value, the line collapses to a point\n // push the last snapped value anyway to ensure that the output contains\n // at least two points\n // FIXME should we really return at least two points anyway?\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n }\n } while (x2 == x1 && y2 == y1);\n while (offset < end) {\n // snap the next coordinate (P3)\n const x3 = snap(flatCoordinates[offset], tolerance);\n const y3 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // skip P3 if it is equal to P2\n if (x3 == x2 && y3 == y2) {\n continue;\n }\n // calculate the delta between P1 and P2\n const dx1 = x2 - x1;\n const dy1 = y2 - y1;\n // calculate the delta between P3 and P1\n const dx2 = x3 - x1;\n const dy2 = y3 - y1;\n // if P1, P2, and P3 are colinear and P3 is further from P1 than P2 is from\n // P1 in the same direction then P2 is on the straight line between P1 and\n // P3\n if (\n dx1 * dy2 == dy1 * dx2 &&\n ((dx1 < 0 && dx2 < dx1) || dx1 == dx2 || (dx1 > 0 && dx2 > dx1)) &&\n ((dy1 < 0 && dy2 < dy1) || dy1 == dy2 || (dy1 > 0 && dy2 > dy1))\n ) {\n // discard P2 and set P2 = P3\n x2 = x3;\n y2 = y3;\n continue;\n }\n // either P1, P2, and P3 are not colinear, or they are colinear but P3 is\n // between P3 and P1 or on the opposite half of the line to P2. add P2,\n // and continue with P1 = P2 and P2 = P3\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n x2 = x3;\n y2 = y3;\n }\n // add the last point (P2)\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function quantizeArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n simplifiedOffset = quantize(\n flatCoordinates,\n offset,\n end,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n );\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function quantizeMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEndss,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n /** @type {Array} */\n const simplifiedEnds = [];\n simplifiedOffset = quantizeArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n );\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n","/**\n * @module ol/array\n */\n\n/**\n * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1.\n * https://github.com/darkskyapp/binary-search\n *\n * @param {Array<*>} haystack Items to search through.\n * @param {*} needle The item to look for.\n * @param {Function} [comparator] Comparator function.\n * @return {number} The index of the item if found, -1 if not.\n */\nexport function binarySearch(haystack, needle, comparator) {\n let mid, cmp;\n comparator = comparator || ascending;\n let low = 0;\n let high = haystack.length;\n let found = false;\n\n while (low < high) {\n /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n * to double (which gives the wrong results). */\n mid = low + ((high - low) >> 1);\n cmp = +comparator(haystack[mid], needle);\n\n if (cmp < 0.0) {\n /* Too low. */\n low = mid + 1;\n } else {\n /* Key found or too high */\n high = mid;\n found = !cmp;\n }\n }\n\n /* Key not found. */\n return found ? low : ~low;\n}\n\n/**\n * Compare function sorting arrays in ascending order. Safe to use for numeric values.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is less than, equal to, or greater than the second.\n */\nexport function ascending(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n}\n\n/**\n * Compare function sorting arrays in descending order. Safe to use for numeric values.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is greater than, equal to, or less than the second.\n */\nexport function descending(a, b) {\n return a < b ? 1 : a > b ? -1 : 0;\n}\n\n/**\n * {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution} can use a function\n * of this type to determine which nearest resolution to use.\n *\n * This function takes a `{number}` representing a value between two array entries,\n * a `{number}` representing the value of the nearest higher entry and\n * a `{number}` representing the value of the nearest lower entry\n * as arguments and returns a `{number}`. If a negative number or zero is returned\n * the lower value will be used, if a positive number is returned the higher value\n * will be used.\n * @typedef {function(number, number, number): number} NearestDirectionFunction\n * @api\n */\n\n/**\n * @param {Array} arr Array in descending order.\n * @param {number} target Target.\n * @param {number|NearestDirectionFunction} direction\n * 0 means return the nearest,\n * > 0 means return the largest nearest,\n * < 0 means return the smallest nearest.\n * @return {number} Index.\n */\nexport function linearFindNearest(arr, target, direction) {\n if (arr[0] <= target) {\n return 0;\n }\n\n const n = arr.length;\n if (target <= arr[n - 1]) {\n return n - 1;\n }\n\n if (typeof direction === 'function') {\n for (let i = 1; i < n; ++i) {\n const candidate = arr[i];\n if (candidate === target) {\n return i;\n }\n if (candidate < target) {\n if (direction(target, arr[i - 1], candidate) > 0) {\n return i - 1;\n }\n return i;\n }\n }\n return n - 1;\n }\n\n if (direction > 0) {\n for (let i = 1; i < n; ++i) {\n if (arr[i] < target) {\n return i - 1;\n }\n }\n return n - 1;\n }\n\n if (direction < 0) {\n for (let i = 1; i < n; ++i) {\n if (arr[i] <= target) {\n return i;\n }\n }\n return n - 1;\n }\n\n for (let i = 1; i < n; ++i) {\n if (arr[i] == target) {\n return i;\n }\n if (arr[i] < target) {\n if (arr[i - 1] - target < target - arr[i]) {\n return i - 1;\n }\n return i;\n }\n }\n return n - 1;\n}\n\n/**\n * @param {Array<*>} arr Array.\n * @param {number} begin Begin index.\n * @param {number} end End index.\n */\nexport function reverseSubArray(arr, begin, end) {\n while (begin < end) {\n const tmp = arr[begin];\n arr[begin] = arr[end];\n arr[end] = tmp;\n ++begin;\n --end;\n }\n}\n\n/**\n * @param {Array} arr The array to modify.\n * @param {!Array|VALUE} data The elements or arrays of elements to add to arr.\n * @template VALUE\n */\nexport function extend(arr, data) {\n const extension = Array.isArray(data) ? data : [data];\n const length = extension.length;\n for (let i = 0; i < length; i++) {\n arr[arr.length] = extension[i];\n }\n}\n\n/**\n * @param {Array} arr The array to modify.\n * @param {VALUE} obj The element to remove.\n * @template VALUE\n * @return {boolean} If the element was removed.\n */\nexport function remove(arr, obj) {\n const i = arr.indexOf(obj);\n const found = i > -1;\n if (found) {\n arr.splice(i, 1);\n }\n return found;\n}\n\n/**\n * @param {Array|Uint8ClampedArray} arr1 The first array to compare.\n * @param {Array|Uint8ClampedArray} arr2 The second array to compare.\n * @return {boolean} Whether the two arrays are equal.\n */\nexport function equals(arr1, arr2) {\n const len1 = arr1.length;\n if (len1 !== arr2.length) {\n return false;\n }\n for (let i = 0; i < len1; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Sort the passed array such that the relative order of equal elements is preserved.\n * See https://en.wikipedia.org/wiki/Sorting_algorithm#Stability for details.\n * @param {Array<*>} arr The array to sort (modifies original).\n * @param {!function(*, *): number} compareFnc Comparison function.\n * @api\n */\nexport function stableSort(arr, compareFnc) {\n const length = arr.length;\n const tmp = Array(arr.length);\n let i;\n for (i = 0; i < length; i++) {\n tmp[i] = {index: i, value: arr[i]};\n }\n tmp.sort(function (a, b) {\n return compareFnc(a.value, b.value) || a.index - b.index;\n });\n for (i = 0; i < arr.length; i++) {\n arr[i] = tmp[i].value;\n }\n}\n\n/**\n * @param {Array<*>} arr The array to test.\n * @param {Function} [func] Comparison function.\n * @param {boolean} [strict] Strictly sorted (default false).\n * @return {boolean} Return index.\n */\nexport function isSorted(arr, func, strict) {\n const compare = func || ascending;\n return arr.every(function (currentVal, index) {\n if (index === 0) {\n return true;\n }\n const res = compare(arr[index - 1], currentVal);\n return !(res > 0 || (strict && res === 0));\n });\n}\n","/**\n * @module ol/geom/flat/contains\n */\nimport {forEachCorner} from '../../extent.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} Contains extent.\n */\nexport function linearRingContainsExtent(\n flatCoordinates,\n offset,\n end,\n stride,\n extent,\n) {\n const outside = forEachCorner(\n extent,\n /**\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} Contains (x, y).\n */\n function (coordinate) {\n return !linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n coordinate[0],\n coordinate[1],\n );\n },\n );\n return !outside;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n x,\n y,\n) {\n // https://geomalgorithms.com/a03-_inclusion.html\n // Copyright 2000 softSurfer, 2012 Dan Sunday\n // This code may be freely used and modified for any purpose\n // providing that this copyright notice is included with it.\n // SoftSurfer makes no warranty for this code, and cannot be held\n // liable for any real or imagined damage resulting from its use.\n // Users of this code must verify correctness for their application.\n let wn = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n if (y1 <= y) {\n if (y2 > y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) > 0) {\n wn++;\n }\n } else if (y2 <= y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) < 0) {\n wn--;\n }\n x1 = x2;\n y1 = y2;\n }\n return wn !== 0;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingsContainsXY(\n flatCoordinates,\n offset,\n ends,\n stride,\n x,\n y,\n) {\n if (ends.length === 0) {\n return false;\n }\n if (!linearRingContainsXY(flatCoordinates, offset, ends[0], stride, x, y)) {\n return false;\n }\n for (let i = 1, ii = ends.length; i < ii; ++i) {\n if (\n linearRingContainsXY(flatCoordinates, ends[i - 1], ends[i], stride, x, y)\n ) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingssContainsXY(\n flatCoordinates,\n offset,\n endss,\n stride,\n x,\n y,\n) {\n if (endss.length === 0) {\n return false;\n }\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n return true;\n }\n offset = ends[ends.length - 1];\n }\n return false;\n}\n","/**\n * @module ol/geom/flat/interiorpoint\n */\nimport {ascending} from '../../array.js';\nimport {linearRingsContainsXY} from './contains.js';\n\n/**\n * Calculates a point that is likely to lie in the interior of the linear rings.\n * Inspired by JTS's com.vividsolutions.jts.geom.Geometry#getInteriorPoint.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Array} flatCenters Flat centers.\n * @param {number} flatCentersOffset Flat center offset.\n * @param {Array} [dest] Destination.\n * @return {Array} Destination point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointOfArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n flatCenters,\n flatCentersOffset,\n dest,\n) {\n let i, ii, x, x1, x2, y1, y2;\n const y = flatCenters[flatCentersOffset + 1];\n /** @type {Array} */\n const intersections = [];\n // Calculate intersections with the horizontal line\n for (let r = 0, rr = ends.length; r < rr; ++r) {\n const end = ends[r];\n x1 = flatCoordinates[end - stride];\n y1 = flatCoordinates[end - stride + 1];\n for (i = offset; i < end; i += stride) {\n x2 = flatCoordinates[i];\n y2 = flatCoordinates[i + 1];\n if ((y <= y1 && y2 <= y) || (y1 <= y && y <= y2)) {\n x = ((y - y1) / (y2 - y1)) * (x2 - x1) + x1;\n intersections.push(x);\n }\n x1 = x2;\n y1 = y2;\n }\n }\n // Find the longest segment of the horizontal line that has its center point\n // inside the linear ring.\n let pointX = NaN;\n let maxSegmentLength = -Infinity;\n intersections.sort(ascending);\n x1 = intersections[0];\n for (i = 1, ii = intersections.length; i < ii; ++i) {\n x2 = intersections[i];\n const segmentLength = Math.abs(x2 - x1);\n if (segmentLength > maxSegmentLength) {\n x = (x1 + x2) / 2;\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n pointX = x;\n maxSegmentLength = segmentLength;\n }\n }\n x1 = x2;\n }\n if (isNaN(pointX)) {\n // There is no horizontal line that has its center point inside the linear\n // ring. Use the center of the the linear ring's extent.\n pointX = flatCenters[flatCentersOffset];\n }\n if (dest) {\n dest.push(pointX, y, maxSegmentLength);\n return dest;\n }\n return [pointX, y, maxSegmentLength];\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array} flatCenters Flat centers.\n * @return {Array} Interior points as XYM coordinates, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointsOfMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n flatCenters,\n) {\n /** @type {Array} */\n let interiorPoints = [];\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n interiorPoints = getInteriorPointOfArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n flatCenters,\n 2 * i,\n interiorPoints,\n );\n offset = ends[ends.length - 1];\n }\n return interiorPoints;\n}\n","/**\n * @module ol/proj/Units\n */\n\n/**\n * @typedef {'radians' | 'degrees' | 'ft' | 'm' | 'pixels' | 'tile-pixels' | 'us-ft'} Units\n * Projection units.\n */\n\n/**\n * See http://duff.ess.washington.edu/data/raster/drg/docs/geotiff.txt\n * @type {Object}\n */\nconst unitByCode = {\n '9001': 'm',\n '9002': 'ft',\n '9003': 'us-ft',\n '9101': 'radians',\n '9102': 'degrees',\n};\n\n/**\n * @param {number} code Unit code.\n * @return {Units} Units.\n */\nexport function fromCode(code) {\n return unitByCode[code];\n}\n\n/**\n * @typedef {Object} MetersPerUnitLookup\n * @property {number} radians Radians\n * @property {number} degrees Degrees\n * @property {number} ft Feet\n * @property {number} m Meters\n * @property {number} us-ft US feet\n */\n\n/**\n * Meters per unit lookup table.\n * @const\n * @type {MetersPerUnitLookup}\n * @api\n */\nexport const METERS_PER_UNIT = {\n // use the radius of the Normal sphere\n 'radians': 6370997 / (2 * Math.PI),\n 'degrees': (2 * Math.PI * 6370997) / 360,\n 'ft': 0.3048,\n 'm': 1,\n 'us-ft': 1200 / 3937,\n};\n","/**\n * @module ol/proj/Projection\n */\nimport {METERS_PER_UNIT} from './Units.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} code The SRS identifier code, e.g. `EPSG:4326`.\n * @property {import(\"./Units.js\").Units} [units] Units. Required unless a\n * proj4 projection is defined for `code`.\n * @property {import(\"../extent.js\").Extent} [extent] The validity extent for the SRS.\n * @property {string} [axisOrientation='enu'] The axis orientation as specified in Proj4.\n * @property {boolean} [global=false] Whether the projection is valid for the whole globe.\n * @property {number} [metersPerUnit] The meters per unit for the SRS.\n * If not provided, the `units` are used to get the meters per unit from the {@link METERS_PER_UNIT}\n * lookup table.\n * @property {import(\"../extent.js\").Extent} [worldExtent] The world extent for the SRS.\n * @property {function(number, import(\"../coordinate.js\").Coordinate):number} [getPointResolution]\n * Function to determine resolution at a point. The function is called with a\n * `number` view resolution and a {@link module:ol/coordinate~Coordinate} as arguments, and returns\n * the `number` resolution in projection units at the passed coordinate. If this is `undefined`,\n * the default {@link module:ol/proj.getPointResolution} function will be used.\n */\n\n/**\n * @classdesc\n * In most cases, you should not need to create instances of this class.\n * Instead, where projection information is required, you can use a string\n * projection code or identifier (e.g. `EPSG:4326`) instead of a projection\n * instance.\n *\n * The library includes support for transforming coordinates between the following\n * projections:\n *\n * * WGS 84 / Geographic - Using codes `EPSG:4326`, `CRS:84`, `urn:ogc:def:crs:EPSG:6.6:4326`,\n * `urn:ogc:def:crs:OGC:1.3:CRS84`, `urn:ogc:def:crs:OGC:2:84`, `http://www.opengis.net/gml/srs/epsg.xml#4326`,\n * or `urn:x-ogc:def:crs:EPSG:4326`\n * * WGS 84 / Spherical Mercator - Using codes `EPSG:3857`, `EPSG:102100`, `EPSG:102113`, `EPSG:900913`,\n * `urn:ogc:def:crs:EPSG:6.18:3:3857`, or `http://www.opengis.net/gml/srs/epsg.xml#3857`\n * * WGS 84 / UTM zones - Using codes `EPSG:32601` through `EPSG:32660` for northern zones\n * and `EPSG:32701` through `EPSG:32760` for southern zones. Note that the built-in UTM transforms\n * are lower accuracy (with errors on the order of 0.1 m) than those that you might get in a\n * library like [proj4js](https://github.com/proj4js/proj4js).\n *\n * For additional projection support, or to use higher accuracy transforms than the built-in ones, you can use\n * the [proj4js](https://github.com/proj4js/proj4js) library. With `proj4js`, after adding any new projection\n * definitions, call the {@link module:ol/proj/proj4.register} function.\n *\n * You can use the {@link module:ol/proj.get} function to retrieve a projection instance\n * for one of the registered projections.\n *\n * @api\n */\nclass Projection {\n /**\n * @param {Options} options Projection options.\n */\n constructor(options) {\n /**\n * @private\n * @type {string}\n */\n this.code_ = options.code;\n\n /**\n * Units of projected coordinates. When set to `TILE_PIXELS`, a\n * `this.extent_` and `this.worldExtent_` must be configured properly for each\n * tile.\n * @private\n * @type {import(\"./Units.js\").Units}\n */\n this.units_ = /** @type {import(\"./Units.js\").Units} */ (options.units);\n\n /**\n * Validity extent of the projection in projected coordinates. For projections\n * with `TILE_PIXELS` units, this is the extent of the tile in\n * tile pixel space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.extent_ = options.extent !== undefined ? options.extent : null;\n\n /**\n * Extent of the world in EPSG:4326. For projections with\n * `TILE_PIXELS` units, this is the extent of the tile in\n * projected coordinate space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.worldExtent_ =\n options.worldExtent !== undefined ? options.worldExtent : null;\n\n /**\n * @private\n * @type {string}\n */\n this.axisOrientation_ =\n options.axisOrientation !== undefined ? options.axisOrientation : 'enu';\n\n /**\n * @private\n * @type {boolean}\n */\n this.global_ = options.global !== undefined ? options.global : false;\n\n /**\n * @private\n * @type {boolean}\n */\n this.canWrapX_ = !!(this.global_ && this.extent_);\n\n /**\n * @private\n * @type {function(number, import(\"../coordinate.js\").Coordinate):number|undefined}\n */\n this.getPointResolutionFunc_ = options.getPointResolution;\n\n /**\n * @private\n * @type {import(\"../tilegrid/TileGrid.js\").default}\n */\n this.defaultTileGrid_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.metersPerUnit_ = options.metersPerUnit;\n }\n\n /**\n * @return {boolean} The projection is suitable for wrapping the x-axis\n */\n canWrapX() {\n return this.canWrapX_;\n }\n\n /**\n * Get the code for this projection, e.g. 'EPSG:4326'.\n * @return {string} Code.\n * @api\n */\n getCode() {\n return this.code_;\n }\n\n /**\n * Get the validity extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getExtent() {\n return this.extent_;\n }\n\n /**\n * Get the units of this projection.\n * @return {import(\"./Units.js\").Units} Units.\n * @api\n */\n getUnits() {\n return this.units_;\n }\n\n /**\n * Get the amount of meters per unit of this projection. If the projection is\n * not configured with `metersPerUnit` or a units identifier, the return is\n * `undefined`.\n * @return {number|undefined} Meters.\n * @api\n */\n getMetersPerUnit() {\n return this.metersPerUnit_ || METERS_PER_UNIT[this.units_];\n }\n\n /**\n * Get the world extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getWorldExtent() {\n return this.worldExtent_;\n }\n\n /**\n * Get the axis orientation of this projection.\n * Example values are:\n * enu - the default easting, northing, elevation.\n * neu - northing, easting, up - useful for \"lat/long\" geographic coordinates,\n * or south orientated transverse mercator.\n * wnu - westing, northing, up - some planetary coordinate systems have\n * \"west positive\" coordinate systems\n * @return {string} Axis orientation.\n * @api\n */\n getAxisOrientation() {\n return this.axisOrientation_;\n }\n\n /**\n * Is this projection a global projection which spans the whole world?\n * @return {boolean} Whether the projection is global.\n * @api\n */\n isGlobal() {\n return this.global_;\n }\n\n /**\n * Set if the projection is a global projection which spans the whole world\n * @param {boolean} global Whether the projection is global.\n * @api\n */\n setGlobal(global) {\n this.global_ = global;\n this.canWrapX_ = !!(global && this.extent_);\n }\n\n /**\n * @return {import(\"../tilegrid/TileGrid.js\").default} The default tile grid.\n */\n getDefaultTileGrid() {\n return this.defaultTileGrid_;\n }\n\n /**\n * @param {import(\"../tilegrid/TileGrid.js\").default} tileGrid The default tile grid.\n */\n setDefaultTileGrid(tileGrid) {\n this.defaultTileGrid_ = tileGrid;\n }\n\n /**\n * Set the validity extent for this projection.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n setExtent(extent) {\n this.extent_ = extent;\n this.canWrapX_ = !!(this.global_ && extent);\n }\n\n /**\n * Set the world extent for this projection.\n * @param {import(\"../extent.js\").Extent} worldExtent World extent\n * [minlon, minlat, maxlon, maxlat].\n * @api\n */\n setWorldExtent(worldExtent) {\n this.worldExtent_ = worldExtent;\n }\n\n /**\n * Set the getPointResolution function (see {@link module:ol/proj.getPointResolution}\n * for this projection.\n * @param {function(number, import(\"../coordinate.js\").Coordinate):number} func Function\n * @api\n */\n setGetPointResolution(func) {\n this.getPointResolutionFunc_ = func;\n }\n\n /**\n * Get the custom point resolution function for this projection (if set).\n * @return {function(number, import(\"../coordinate.js\").Coordinate):number|undefined} The custom point\n * resolution function (if set).\n */\n getPointResolutionFunc() {\n return this.getPointResolutionFunc_;\n }\n}\n\nexport default Projection;\n","/**\n * @module ol/proj/epsg3857\n */\nimport Projection from './Projection.js';\n\n/**\n * Radius of WGS84 sphere\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n/**\n * @const\n * @type {number}\n */\nexport const HALF_SIZE = Math.PI * RADIUS;\n\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const EXTENT = [-HALF_SIZE, -HALF_SIZE, HALF_SIZE, HALF_SIZE];\n\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const WORLD_EXTENT = [-180, -85, 180, 85];\n\n/**\n * Maximum safe value in y direction\n * @const\n * @type {number}\n */\nexport const MAX_SAFE_Y = RADIUS * Math.log(Math.tan(Math.PI / 2));\n\n/**\n * @classdesc\n * Projection object for web/spherical Mercator (EPSG:3857).\n */\nclass EPSG3857Projection extends Projection {\n /**\n * @param {string} code Code.\n */\n constructor(code) {\n super({\n code: code,\n units: 'm',\n extent: EXTENT,\n global: true,\n worldExtent: WORLD_EXTENT,\n getPointResolution: function (resolution, point) {\n return resolution / Math.cosh(point[1] / RADIUS);\n },\n });\n }\n}\n\n/**\n * Projections equal to EPSG:3857.\n *\n * @const\n * @type {Array}\n */\nexport const PROJECTIONS = [\n new EPSG3857Projection('EPSG:3857'),\n new EPSG3857Projection('EPSG:102100'),\n new EPSG3857Projection('EPSG:102113'),\n new EPSG3857Projection('EPSG:900913'),\n new EPSG3857Projection('http://www.opengis.net/def/crs/EPSG/0/3857'),\n new EPSG3857Projection('http://www.opengis.net/gml/srs/epsg.xml#3857'),\n];\n\n/**\n * Transformation from EPSG:4326 to EPSG:3857.\n *\n * @param {Array} input Input array of coordinate values.\n * @param {Array} [output] Output array of coordinate values.\n * @param {number} [dimension] Dimension (default is `2`).\n * @param {number} [stride] Stride (default is `dimension`).\n * @return {Array} Output array of coordinate values.\n */\nexport function fromEPSG4326(input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n stride = stride ?? dimension;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += stride) {\n output[i] = (HALF_SIZE * input[i]) / 180;\n let y = RADIUS * Math.log(Math.tan((Math.PI * (+input[i + 1] + 90)) / 360));\n if (y > MAX_SAFE_Y) {\n y = MAX_SAFE_Y;\n } else if (y < -MAX_SAFE_Y) {\n y = -MAX_SAFE_Y;\n }\n output[i + 1] = y;\n }\n return output;\n}\n\n/**\n * Transformation from EPSG:3857 to EPSG:4326.\n *\n * @param {Array} input Input array of coordinate values.\n * @param {Array} [output] Output array of coordinate values.\n * @param {number} [dimension] Dimension (default is `2`).\n * @param {number} [stride] Stride (default is `dimension`).\n * @return {Array} Output array of coordinate values.\n */\nexport function toEPSG4326(input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n stride = stride ?? dimension;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += stride) {\n output[i] = (180 * input[i]) / HALF_SIZE;\n output[i + 1] =\n (360 * Math.atan(Math.exp(input[i + 1] / RADIUS))) / Math.PI - 90;\n }\n return output;\n}\n","/**\n * @module ol/proj/epsg4326\n */\nimport Projection from './Projection.js';\n\n/**\n * Semi-major radius of the WGS84 ellipsoid.\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n/**\n * Extent of the EPSG:4326 projection which is the whole world.\n *\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const EXTENT = [-180, -90, 180, 90];\n\n/**\n * @const\n * @type {number}\n */\nexport const METERS_PER_UNIT = (Math.PI * RADIUS) / 180;\n\n/**\n * @classdesc\n * Projection object for WGS84 geographic coordinates (EPSG:4326).\n *\n * Note that OpenLayers does not strictly comply with the EPSG definition.\n * The EPSG registry defines 4326 as a CRS for Latitude,Longitude (y,x).\n * OpenLayers treats EPSG:4326 as a pseudo-projection, with x,y coordinates.\n */\nclass EPSG4326Projection extends Projection {\n /**\n * @param {string} code Code.\n * @param {string} [axisOrientation] Axis orientation.\n */\n constructor(code, axisOrientation) {\n super({\n code: code,\n units: 'degrees',\n extent: EXTENT,\n axisOrientation: axisOrientation,\n global: true,\n metersPerUnit: METERS_PER_UNIT,\n worldExtent: EXTENT,\n });\n }\n}\n\n/**\n * Projections equal to EPSG:4326.\n *\n * @const\n * @type {Array}\n */\nexport const PROJECTIONS = [\n new EPSG4326Projection('CRS:84'),\n new EPSG4326Projection('EPSG:4326', 'neu'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:1.3:CRS84'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:2:84'),\n new EPSG4326Projection('http://www.opengis.net/def/crs/OGC/1.3/CRS84'),\n new EPSG4326Projection('http://www.opengis.net/gml/srs/epsg.xml#4326', 'neu'),\n new EPSG4326Projection('http://www.opengis.net/def/crs/EPSG/0/4326', 'neu'),\n];\n","/**\n * @module ol/proj/projections\n */\n\n/**\n * @type {Object}\n */\nlet cache = {};\n\n/**\n * Clear the projections cache.\n */\nexport function clear() {\n cache = {};\n}\n\n/**\n * Get a cached projection by code.\n * @param {string} code The code for the projection.\n * @return {import(\"./Projection.js\").default|null} The projection (if cached).\n */\nexport function get(code) {\n return (\n cache[code] ||\n cache[code.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\\w+)$/, 'EPSG:$3')] ||\n null\n );\n}\n\n/**\n * Add a projection to the cache.\n * @param {string} code The projection code.\n * @param {import(\"./Projection.js\").default} projection The projection to cache.\n */\nexport function add(code, projection) {\n cache[code] = projection;\n}\n","/**\n * @module ol/proj/transforms\n */\nimport {isEmpty} from '../obj.js';\n\n/**\n * @private\n * @type {!Object>}\n */\nlet transforms = {};\n\n/**\n * Clear the transform cache.\n */\nexport function clear() {\n transforms = {};\n}\n\n/**\n * Registers a conversion function to convert coordinates from the source\n * projection to the destination projection.\n *\n * @param {import(\"./Projection.js\").default} source Source.\n * @param {import(\"./Projection.js\").default} destination Destination.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform.\n */\nexport function add(source, destination, transformFn) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n if (!(sourceCode in transforms)) {\n transforms[sourceCode] = {};\n }\n transforms[sourceCode][destinationCode] = transformFn;\n}\n\n/**\n * Unregisters the conversion function to convert coordinates from the source\n * projection to the destination projection. This method is used to clean up\n * cached transforms during testing.\n *\n * @param {import(\"./Projection.js\").default} source Source projection.\n * @param {import(\"./Projection.js\").default} destination Destination projection.\n * @return {import(\"../proj.js\").TransformFunction} transformFn The unregistered transform.\n */\nexport function remove(source, destination) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n const transform = transforms[sourceCode][destinationCode];\n delete transforms[sourceCode][destinationCode];\n if (isEmpty(transforms[sourceCode])) {\n delete transforms[sourceCode];\n }\n return transform;\n}\n\n/**\n * Get a transform given a source code and a destination code.\n * @param {string} sourceCode The code for the source projection.\n * @param {string} destinationCode The code for the destination projection.\n * @return {import(\"../proj.js\").TransformFunction|null} The transform function (if found).\n */\nexport function get(sourceCode, destinationCode) {\n if (sourceCode in transforms && destinationCode in transforms[sourceCode]) {\n return transforms[sourceCode][destinationCode];\n }\n return null;\n}\n","/**\n * @module ol/proj/utm\n */\n\n/**\n * Adapted from https://github.com/Turbo87/utm\n * Copyright (c) 2012-2017 Tobias Bieniek\n *\n * The functions here provide approximate transforms to and from UTM.\n * They are not appropriate for use beyond the validity extend of a UTM\n * zone, and the accuracy of the transform decreases toward the zone\n * edges.\n */\n\nimport Projection from './Projection.js';\nimport {toDegrees, toRadians, wrap} from '../math.js';\n\n/**\n * @typedef {Object} UTMZone\n * @property {number} number The zone number (1 - 60).\n * @property {boolean} north The northern hemisphere.\n */\n\nconst K0 = 0.9996;\n\nconst E = 0.00669438;\nconst E2 = E * E;\nconst E3 = E2 * E;\nconst E_P2 = E / (1 - E);\n\nconst SQRT_E = Math.sqrt(1 - E);\nconst _E = (1 - SQRT_E) / (1 + SQRT_E);\nconst _E2 = _E * _E;\nconst _E3 = _E2 * _E;\nconst _E4 = _E3 * _E;\nconst _E5 = _E4 * _E;\n\nconst M1 = 1 - E / 4 - (3 * E2) / 64 - (5 * E3) / 256;\nconst M2 = (3 * E) / 8 + (3 * E2) / 32 + (45 * E3) / 1024;\nconst M3 = (15 * E2) / 256 + (45 * E3) / 1024;\nconst M4 = (35 * E3) / 3072;\n\nconst P2 = (3 / 2) * _E - (27 / 32) * _E3 + (269 / 512) * _E5;\nconst P3 = (21 / 16) * _E2 - (55 / 32) * _E4;\nconst P4 = (151 / 96) * _E3 - (417 / 128) * _E5;\nconst P5 = (1097 / 512) * _E4;\n\nconst R = 6378137;\n\n/**\n * @param {number} easting Easting value of coordinate.\n * @param {number} northing Northing value of coordinate.\n * @param {UTMZone} zone The UTM zone.\n * @return {import(\"../coordinate.js\").Coordinate} The transformed coordinate.\n */\nfunction toLonLat(easting, northing, zone) {\n const x = easting - 500000;\n const y = zone.north ? northing : northing - 10000000;\n\n const m = y / K0;\n const mu = m / (R * M1);\n\n const pRad =\n mu +\n P2 * Math.sin(2 * mu) +\n P3 * Math.sin(4 * mu) +\n P4 * Math.sin(6 * mu) +\n P5 * Math.sin(8 * mu);\n\n const pSin = Math.sin(pRad);\n const pSin2 = pSin * pSin;\n\n const pCos = Math.cos(pRad);\n\n const pTan = pSin / pCos;\n const pTan2 = pTan * pTan;\n const pTan4 = pTan2 * pTan2;\n\n const epSin = 1 - E * pSin2;\n const epSinSqrt = Math.sqrt(1 - E * pSin2);\n\n const n = R / epSinSqrt;\n const r = (1 - E) / epSin;\n\n const c = E_P2 * pCos ** 2;\n const c2 = c * c;\n\n const d = x / (n * K0);\n const d2 = d * d;\n const d3 = d2 * d;\n const d4 = d3 * d;\n const d5 = d4 * d;\n const d6 = d5 * d;\n\n const latitude =\n pRad -\n (pTan / r) *\n (d2 / 2 - (d4 / 24) * (5 + 3 * pTan2 + 10 * c - 4 * c2 - 9 * E_P2)) +\n (d6 / 720) * (61 + 90 * pTan2 + 298 * c + 45 * pTan4 - 252 * E_P2 - 3 * c2);\n\n let longitude =\n (d -\n (d3 / 6) * (1 + 2 * pTan2 + c) +\n (d5 / 120) * (5 - 2 * c + 28 * pTan2 - 3 * c2 + 8 * E_P2 + 24 * pTan4)) /\n pCos;\n\n longitude = wrap(\n longitude + toRadians(zoneToCentralLongitude(zone.number)),\n -Math.PI,\n Math.PI,\n );\n\n return [toDegrees(longitude), toDegrees(latitude)];\n}\n\nconst MIN_LATITUDE = -80;\nconst MAX_LATITUDE = 84;\nconst MIN_LONGITUDE = -180;\nconst MAX_LONGITUDE = 180;\n\n/**\n * @param {number} longitude The longitude.\n * @param {number} latitude The latitude.\n * @param {UTMZone} zone The UTM zone.\n * @return {import('../coordinate.js').Coordinate} The UTM coordinate.\n */\nfunction fromLonLat(longitude, latitude, zone) {\n longitude = wrap(longitude, MIN_LONGITUDE, MAX_LONGITUDE);\n\n if (latitude < MIN_LATITUDE) {\n latitude = MIN_LATITUDE;\n } else if (latitude > MAX_LATITUDE) {\n latitude = MAX_LATITUDE;\n }\n\n const latRad = toRadians(latitude);\n const latSin = Math.sin(latRad);\n const latCos = Math.cos(latRad);\n\n const latTan = latSin / latCos;\n const latTan2 = latTan * latTan;\n const latTan4 = latTan2 * latTan2;\n\n const lonRad = toRadians(longitude);\n const centralLon = zoneToCentralLongitude(zone.number);\n const centralLonRad = toRadians(centralLon);\n\n const n = R / Math.sqrt(1 - E * latSin ** 2);\n const c = E_P2 * latCos ** 2;\n\n const a = latCos * wrap(lonRad - centralLonRad, -Math.PI, Math.PI);\n const a2 = a * a;\n const a3 = a2 * a;\n const a4 = a3 * a;\n const a5 = a4 * a;\n const a6 = a5 * a;\n\n const m =\n R *\n (M1 * latRad -\n M2 * Math.sin(2 * latRad) +\n M3 * Math.sin(4 * latRad) -\n M4 * Math.sin(6 * latRad));\n\n const easting =\n K0 *\n n *\n (a +\n (a3 / 6) * (1 - latTan2 + c) +\n (a5 / 120) * (5 - 18 * latTan2 + latTan4 + 72 * c - 58 * E_P2)) +\n 500000;\n\n let northing =\n K0 *\n (m +\n n *\n latTan *\n (a2 / 2 +\n (a4 / 24) * (5 - latTan2 + 9 * c + 4 * c ** 2) +\n (a6 / 720) * (61 - 58 * latTan2 + latTan4 + 600 * c - 330 * E_P2)));\n\n if (!zone.north) {\n northing += 10000000;\n }\n\n return [easting, northing];\n}\n\n/**\n * @param {number} zone The zone number.\n * @return {number} The central longitude in degrees.\n */\nfunction zoneToCentralLongitude(zone) {\n return (zone - 1) * 6 - 180 + 3;\n}\n\n/**\n * @type {Array}\n */\nconst epsgRegExes = [\n /^EPSG:(\\d+)$/,\n /^urn:ogc:def:crs:EPSG::(\\d+)$/,\n /^http:\\/\\/www\\.opengis\\.net\\/def\\/crs\\/EPSG\\/0\\/(\\d+)$/,\n];\n\n/**\n * @param {string} code The projection code.\n * @return {UTMZone|null} The UTM zone info (or null if not UTM).\n */\nexport function zoneFromCode(code) {\n let epsgId = 0;\n for (const re of epsgRegExes) {\n const match = code.match(re);\n if (match) {\n epsgId = parseInt(match[1]);\n break;\n }\n }\n if (!epsgId) {\n return null;\n }\n\n let number = 0;\n let north = false;\n if (epsgId > 32700 && epsgId < 32761) {\n number = epsgId - 32700;\n } else if (epsgId > 32600 && epsgId < 32661) {\n north = true;\n number = epsgId - 32600;\n }\n if (!number) {\n return null;\n }\n\n return {number, north};\n}\n\n/**\n * @param {function(number, number, UTMZone): import('../coordinate.js').Coordinate} transformer The transformer.\n * @param {UTMZone} zone The UTM zone.\n * @return {import('../proj.js').TransformFunction} The transform function.\n */\nfunction makeTransformFunction(transformer, zone) {\n return function (input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n stride = stride ?? dimension;\n if (!output) {\n if (dimension > 2) {\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += stride) {\n const x = input[i];\n const y = input[i + 1];\n const coord = transformer(x, y, zone);\n output[i] = coord[0];\n output[i + 1] = coord[1];\n }\n return output;\n };\n}\n\n/**\n * @param {string} code The projection code.\n * @return {import('./Projection.js').default|null} A projection or null if unable to create one.\n */\nexport function makeProjection(code) {\n const zone = zoneFromCode(code);\n if (!zone) {\n return null;\n }\n return new Projection({code, units: 'm'});\n}\n\n/**\n * @param {import('./Projection.js').default} projection The projection.\n * @return {import('../proj.js').Transforms|null} The transforms lookup or null if unable to handle projection.\n */\nexport function makeTransforms(projection) {\n const zone = zoneFromCode(projection.getCode());\n if (!zone) {\n return null;\n }\n\n return {\n forward: makeTransformFunction(fromLonLat, zone),\n inverse: makeTransformFunction(toLonLat, zone),\n };\n}\n","/**\n * @module ol/proj\n */\n\n/**\n * The ol/proj module stores:\n * * a list of {@link module:ol/proj/Projection~Projection}\n * objects, one for each projection supported by the application\n * * a list of transform functions needed to convert coordinates in one projection\n * into another.\n *\n * The static functions are the methods used to maintain these.\n * Each transform function can handle not only simple coordinate pairs, but also\n * large arrays of coordinates such as vector geometries.\n *\n * When loaded, the library adds projection objects for EPSG:4326 (WGS84\n * geographic coordinates) and EPSG:3857 (Web or Spherical Mercator, as used\n * for example by Bing Maps or OpenStreetMap), together with the relevant\n * transform functions.\n *\n * Additional transforms may be added by using the http://proj4js.org/\n * library (version 2.2 or later). You can use the full build supplied by\n * Proj4js, or create a custom build to support those projections you need; see\n * the Proj4js website for how to do this. You also need the Proj4js definitions\n * for the required projections. These definitions can be obtained from\n * https://epsg.io/, and are a JS function, so can be loaded in a script\n * tag (as in the examples) or pasted into your application.\n *\n * After all required projection definitions are added to proj4's registry (by\n * using `proj4.defs()`), simply call `register(proj4)` from the `ol/proj/proj4`\n * package. Existing transforms are not changed by this function. See\n * examples/wms-image-custom-proj for an example of this.\n *\n * Additional projection definitions can be registered with `proj4.defs()` any\n * time. Just make sure to call `register(proj4)` again; for example, with user-supplied data where you don't\n * know in advance what projections are needed, you can initially load minimal\n * support and then load whichever are requested.\n *\n * Note that Proj4js does not support projection extents. If you want to add\n * one for creating default tile grids, you can add it after the Projection\n * object has been created with `setExtent`, for example,\n * `get('EPSG:1234').setExtent(extent)`.\n *\n * In addition to Proj4js support, any transform functions can be added with\n * {@link module:ol/proj.addCoordinateTransforms}. To use this, you must first create\n * a {@link module:ol/proj/Projection~Projection} object for the new projection and add it with\n * {@link module:ol/proj.addProjection}. You can then add the forward and inverse\n * functions with {@link module:ol/proj.addCoordinateTransforms}. See\n * examples/wms-custom-proj for an example of this.\n *\n * Note that if no transforms are needed and you only need to define the\n * projection, just add a {@link module:ol/proj/Projection~Projection} with\n * {@link module:ol/proj.addProjection}. See examples/wms-no-proj for an example of\n * this.\n */\nimport Projection from './proj/Projection.js';\nimport {\n PROJECTIONS as EPSG3857_PROJECTIONS,\n fromEPSG4326,\n toEPSG4326,\n} from './proj/epsg3857.js';\nimport {PROJECTIONS as EPSG4326_PROJECTIONS} from './proj/epsg4326.js';\nimport {METERS_PER_UNIT} from './proj/Units.js';\nimport {\n add as addProj,\n clear as clearProj,\n get as getProj,\n} from './proj/projections.js';\nimport {\n add as addTransformFunc,\n clear as clearTransformFuncs,\n get as getTransformFunc,\n} from './proj/transforms.js';\nimport {applyTransform, getWidth} from './extent.js';\nimport {clamp, modulo} from './math.js';\nimport {equals, getWorldsAway} from './coordinate.js';\nimport {getDistance} from './sphere.js';\nimport {\n makeProjection as makeUTMProjection,\n makeTransforms as makeUTMTransforms,\n} from './proj/utm.js';\nimport {warn} from './console.js';\n\n/**\n * A projection as {@link module:ol/proj/Projection~Projection}, SRS identifier\n * string or undefined.\n * @typedef {Projection|string|undefined} ProjectionLike\n * @api\n */\n\n/**\n * @typedef {Object} Transforms\n * @property {TransformFunction} forward The forward transform (from geographic).\n * @property {TransformFunction} inverse The inverse transform (to geographic).\n */\n\n/**\n * @type {Array}\n */\nconst transformFactories = [makeUTMTransforms];\n\n/**\n * @type {Array}\n */\nconst projectionFactories = [makeUTMProjection];\n\n/**\n * A transform function accepts an array of input coordinate values, an optional\n * output array, and an optional dimension (default should be 2). The function\n * transforms the input coordinate values, populates the output array, and\n * returns the output array.\n *\n * @callback TransformFunction\n * @param {Array} input\n * @param {Array} [output]\n * @param {number} [dimension]\n * @param {number} [stride]\n * @return {Array}\n *\n * @api\n */\n\nexport {METERS_PER_UNIT};\n\nexport {Projection};\n\nlet showCoordinateWarning = true;\n\n/**\n * @param {boolean} [disable = true] Disable console info about `useGeographic()`\n */\nexport function disableCoordinateWarning(disable) {\n const hide = disable === undefined ? true : disable;\n showCoordinateWarning = !hide;\n}\n\n/**\n * @param {Array} input Input coordinate array.\n * @param {Array} [output] Output array of coordinate values.\n * @return {Array} Output coordinate array (new array, same coordinate\n * values).\n */\nexport function cloneTransform(input, output) {\n if (output !== undefined) {\n for (let i = 0, ii = input.length; i < ii; ++i) {\n output[i] = input[i];\n }\n output = output;\n } else {\n output = input.slice();\n }\n return output;\n}\n\n/**\n * @param {Array} input Input coordinate array.\n * @param {Array} [output] Output array of coordinate values.\n * @return {Array} Input coordinate array (same array as input).\n */\nexport function identityTransform(input, output) {\n if (output !== undefined && input !== output) {\n for (let i = 0, ii = input.length; i < ii; ++i) {\n output[i] = input[i];\n }\n input = output;\n }\n return input;\n}\n\n/**\n * Add a Projection object to the list of supported projections that can be\n * looked up by their code.\n *\n * @param {Projection} projection Projection instance.\n * @api\n */\nexport function addProjection(projection) {\n addProj(projection.getCode(), projection);\n addTransformFunc(projection, projection, cloneTransform);\n}\n\n/**\n * @param {Array} projections Projections.\n */\nexport function addProjections(projections) {\n projections.forEach(addProjection);\n}\n\n/**\n * Fetches a Projection object for the code specified.\n *\n * @param {ProjectionLike} projectionLike Either a code string which is\n * a combination of authority and identifier such as \"EPSG:4326\", or an\n * existing projection object, or undefined.\n * @return {Projection|null} Projection object, or null if not in list.\n * @api\n */\nexport function get(projectionLike) {\n if (!(typeof projectionLike === 'string')) {\n return projectionLike;\n }\n const projection = getProj(projectionLike);\n if (projection) {\n return projection;\n }\n for (const makeProjection of projectionFactories) {\n const projection = makeProjection(projectionLike);\n if (projection) {\n return projection;\n }\n }\n return null;\n}\n\n/**\n * Get the resolution of the point in degrees or distance units.\n * For projections with degrees as the unit this will simply return the\n * provided resolution. For other projections the point resolution is\n * by default estimated by transforming the `point` pixel to EPSG:4326,\n * measuring its width and height on the normal sphere,\n * and taking the average of the width and height.\n * A custom function can be provided for a specific projection, either\n * by setting the `getPointResolution` option in the\n * {@link module:ol/proj/Projection~Projection} constructor or by using\n * {@link module:ol/proj/Projection~Projection#setGetPointResolution} to change an existing\n * projection object.\n * @param {ProjectionLike} projection The projection.\n * @param {number} resolution Nominal resolution in projection units.\n * @param {import(\"./coordinate.js\").Coordinate} point Point to find adjusted resolution at.\n * @param {import(\"./proj/Units.js\").Units} [units] Units to get the point resolution in.\n * Default is the projection's units.\n * @return {number} Point resolution.\n * @api\n */\nexport function getPointResolution(projection, resolution, point, units) {\n projection = get(projection);\n let pointResolution;\n const getter = projection.getPointResolutionFunc();\n if (getter) {\n pointResolution = getter(resolution, point);\n if (units && units !== projection.getUnits()) {\n const metersPerUnit = projection.getMetersPerUnit();\n if (metersPerUnit) {\n pointResolution =\n (pointResolution * metersPerUnit) / METERS_PER_UNIT[units];\n }\n }\n } else {\n const projUnits = projection.getUnits();\n if ((projUnits == 'degrees' && !units) || units == 'degrees') {\n pointResolution = resolution;\n } else {\n // Estimate point resolution by transforming the center pixel to EPSG:4326,\n // measuring its width and height on the normal sphere, and taking the\n // average of the width and height.\n const toEPSG4326 = getTransformFromProjections(\n projection,\n get('EPSG:4326'),\n );\n if (!toEPSG4326 && projUnits !== 'degrees') {\n // no transform is available\n pointResolution = resolution * projection.getMetersPerUnit();\n } else {\n let vertices = [\n point[0] - resolution / 2,\n point[1],\n point[0] + resolution / 2,\n point[1],\n point[0],\n point[1] - resolution / 2,\n point[0],\n point[1] + resolution / 2,\n ];\n vertices = toEPSG4326(vertices, vertices, 2);\n const width = getDistance(vertices.slice(0, 2), vertices.slice(2, 4));\n const height = getDistance(vertices.slice(4, 6), vertices.slice(6, 8));\n pointResolution = (width + height) / 2;\n }\n const metersPerUnit = units\n ? METERS_PER_UNIT[units]\n : projection.getMetersPerUnit();\n if (metersPerUnit !== undefined) {\n pointResolution /= metersPerUnit;\n }\n }\n }\n return pointResolution;\n}\n\n/**\n * Registers transformation functions that don't alter coordinates. Those allow\n * to transform between projections with equal meaning.\n *\n * @param {Array} projections Projections.\n * @api\n */\nexport function addEquivalentProjections(projections) {\n addProjections(projections);\n projections.forEach(function (source) {\n projections.forEach(function (destination) {\n if (source !== destination) {\n addTransformFunc(source, destination, cloneTransform);\n }\n });\n });\n}\n\n/**\n * Registers transformation functions to convert coordinates in any projection\n * in projection1 to any projection in projection2.\n *\n * @param {Array} projections1 Projections with equal\n * meaning.\n * @param {Array} projections2 Projections with equal\n * meaning.\n * @param {TransformFunction} forwardTransform Transformation from any\n * projection in projection1 to any projection in projection2.\n * @param {TransformFunction} inverseTransform Transform from any projection\n * in projection2 to any projection in projection1..\n */\nexport function addEquivalentTransforms(\n projections1,\n projections2,\n forwardTransform,\n inverseTransform,\n) {\n projections1.forEach(function (projection1) {\n projections2.forEach(function (projection2) {\n addTransformFunc(projection1, projection2, forwardTransform);\n addTransformFunc(projection2, projection1, inverseTransform);\n });\n });\n}\n\n/**\n * Clear all cached projections and transforms.\n */\nexport function clearAllProjections() {\n clearProj();\n clearTransformFuncs();\n}\n\n/**\n * @param {Projection|string|undefined} projection Projection.\n * @param {string} defaultCode Default code.\n * @return {Projection} Projection.\n */\nexport function createProjection(projection, defaultCode) {\n if (!projection) {\n return get(defaultCode);\n }\n if (typeof projection === 'string') {\n return get(projection);\n }\n return /** @type {Projection} */ (projection);\n}\n\n/**\n * Creates a {@link module:ol/proj~TransformFunction} from a simple 2D coordinate transform\n * function.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} coordTransform Coordinate\n * transform.\n * @return {TransformFunction} Transform function.\n */\nexport function createTransformFromCoordinateTransform(coordTransform) {\n return (\n /**\n * @param {Array} input Input.\n * @param {Array} [output] Output.\n * @param {number} [dimension] Dimensions that should be transformed.\n * @param {number} [stride] Stride.\n * @return {Array} Output.\n */\n function (input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension !== undefined ? dimension : 2;\n stride = stride ?? dimension;\n output = output !== undefined ? output : new Array(length);\n for (let i = 0; i < length; i += stride) {\n const point = coordTransform(input.slice(i, i + dimension));\n const pointLength = point.length;\n for (let j = 0, jj = stride; j < jj; ++j) {\n output[i + j] = j >= pointLength ? input[i + j] : point[j];\n }\n }\n return output;\n }\n );\n}\n\n/**\n * Registers coordinate transform functions to convert coordinates between the\n * source projection and the destination projection.\n * The forward and inverse functions convert coordinate pairs; this function\n * converts these into the functions used internally which also handle\n * extents and coordinate arrays.\n *\n * @param {ProjectionLike} source Source projection.\n * @param {ProjectionLike} destination Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} forward The forward transform\n * function (that is, from the source projection to the destination\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} inverse The inverse transform\n * function (that is, from the destination projection to the source\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}. If the transform function can only\n * transform less dimensions than the input coordinate, it is supposeed to return a coordinate\n * with only the length it can transform. The other dimensions will be taken unchanged from the\n * source.\n * @api\n */\nexport function addCoordinateTransforms(source, destination, forward, inverse) {\n const sourceProj = get(source);\n const destProj = get(destination);\n addTransformFunc(\n sourceProj,\n destProj,\n createTransformFromCoordinateTransform(forward),\n );\n addTransformFunc(\n destProj,\n sourceProj,\n createTransformFromCoordinateTransform(inverse),\n );\n}\n\n/**\n * Transforms a coordinate from longitude/latitude to a different projection.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate as longitude and latitude, i.e.\n * an array with longitude as 1st and latitude as 2nd element.\n * @param {ProjectionLike} [projection] Target projection. The\n * default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate projected to the target projection.\n * @api\n */\nexport function fromLonLat(coordinate, projection) {\n disableCoordinateWarning();\n return transform(\n coordinate,\n 'EPSG:4326',\n projection !== undefined ? projection : 'EPSG:3857',\n );\n}\n\n/**\n * Transforms a coordinate to longitude/latitude.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Projected coordinate.\n * @param {ProjectionLike} [projection] Projection of the coordinate.\n * The default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate as longitude and latitude, i.e. an array\n * with longitude as 1st and latitude as 2nd element.\n * @api\n */\nexport function toLonLat(coordinate, projection) {\n const lonLat = transform(\n coordinate,\n projection !== undefined ? projection : 'EPSG:3857',\n 'EPSG:4326',\n );\n const lon = lonLat[0];\n if (lon < -180 || lon > 180) {\n lonLat[0] = modulo(lon + 180, 360) - 180;\n }\n return lonLat;\n}\n\n/**\n * Checks if two projections are the same, that is every coordinate in one\n * projection does represent the same geographic point as the same coordinate in\n * the other projection.\n *\n * @param {Projection} projection1 Projection 1.\n * @param {Projection} projection2 Projection 2.\n * @return {boolean} Equivalent.\n * @api\n */\nexport function equivalent(projection1, projection2) {\n if (projection1 === projection2) {\n return true;\n }\n const equalUnits = projection1.getUnits() === projection2.getUnits();\n if (projection1.getCode() === projection2.getCode()) {\n return equalUnits;\n }\n const transformFunc = getTransformFromProjections(projection1, projection2);\n return transformFunc === cloneTransform && equalUnits;\n}\n\n/**\n * Searches in the list of transform functions for the function for converting\n * coordinates from the source projection to the destination projection.\n *\n * @param {Projection} source Source Projection object.\n * @param {Projection} destination Destination Projection\n * object.\n * @return {TransformFunction|null} Transform function.\n */\nexport function getTransformFromProjections(source, destination) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n let transformFunc = getTransformFunc(sourceCode, destinationCode);\n if (transformFunc) {\n return transformFunc;\n }\n\n /**\n * @type {Transforms|null}\n */\n let sourceTransforms = null;\n\n /**\n * @type {Transforms|null}\n */\n let destinationTransforms = null;\n\n // lazily add projections if we have supported transforms\n for (const makeTransforms of transformFactories) {\n if (!sourceTransforms) {\n sourceTransforms = makeTransforms(source);\n }\n if (!destinationTransforms) {\n destinationTransforms = makeTransforms(destination);\n }\n }\n\n if (!sourceTransforms && !destinationTransforms) {\n return null;\n }\n\n const intermediateCode = 'EPSG:4326';\n if (!destinationTransforms) {\n const toDestination = getTransformFunc(intermediateCode, destinationCode);\n if (toDestination) {\n transformFunc = composeTransformFuncs(\n sourceTransforms.inverse,\n toDestination,\n );\n }\n } else if (!sourceTransforms) {\n const fromSource = getTransformFunc(sourceCode, intermediateCode);\n if (fromSource) {\n transformFunc = composeTransformFuncs(\n fromSource,\n destinationTransforms.forward,\n );\n }\n } else {\n transformFunc = composeTransformFuncs(\n sourceTransforms.inverse,\n destinationTransforms.forward,\n );\n }\n\n if (transformFunc) {\n addProjection(source);\n addProjection(destination);\n addTransformFunc(source, destination, transformFunc);\n }\n\n return transformFunc;\n}\n\n/**\n * @param {TransformFunction} t1 The first transform function.\n * @param {TransformFunction} t2 The second transform function.\n * @return {TransformFunction} The composed transform function.\n */\nfunction composeTransformFuncs(t1, t2) {\n return function (input, output, dimensions, stride) {\n output = t1(input, output, dimensions, stride);\n return t2(output, output, dimensions, stride);\n };\n}\n\n/**\n * Given the projection-like objects, searches for a transformation\n * function to convert a coordinates array from the source projection to the\n * destination projection.\n *\n * @param {ProjectionLike} source Source.\n * @param {ProjectionLike} destination Destination.\n * @return {TransformFunction} Transform function.\n * @api\n */\nexport function getTransform(source, destination) {\n const sourceProjection = get(source);\n const destinationProjection = get(destination);\n return getTransformFromProjections(sourceProjection, destinationProjection);\n}\n\n/**\n * Transforms a coordinate from source projection to destination projection.\n * This returns a new coordinate (and does not modify the original). If there\n * is no available transform between the two projection, the function will throw\n * an error.\n *\n * See {@link module:ol/proj.transformExtent} for extent transformation.\n * See the transform method of {@link module:ol/geom/Geometry~Geometry} and its\n * subclasses for geometry transforms.\n *\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\nexport function transform(coordinate, source, destination) {\n const transformFunc = getTransform(source, destination);\n if (!transformFunc) {\n const sourceCode = get(source).getCode();\n const destinationCode = get(destination).getCode();\n throw new Error(\n `No transform available between ${sourceCode} and ${destinationCode}`,\n );\n }\n return transformFunc(coordinate, undefined, coordinate.length);\n}\n\n/**\n * Transforms an extent from source projection to destination projection. This\n * returns a new extent (and does not modify the original).\n *\n * @param {import(\"./extent.js\").Extent} extent The extent to transform.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @param {number} [stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {import(\"./extent.js\").Extent} The transformed extent.\n * @api\n */\nexport function transformExtent(extent, source, destination, stops) {\n const transformFunc = getTransform(source, destination);\n return applyTransform(extent, transformFunc, undefined, stops);\n}\n\n/**\n * Transforms the given point to the destination projection.\n *\n * @param {import(\"./coordinate.js\").Coordinate} point Point.\n * @param {Projection} sourceProjection Source projection.\n * @param {Projection} destinationProjection Destination projection.\n * @return {import(\"./coordinate.js\").Coordinate} Point.\n */\nexport function transformWithProjections(\n point,\n sourceProjection,\n destinationProjection,\n) {\n const transformFunc = getTransformFromProjections(\n sourceProjection,\n destinationProjection,\n );\n return transformFunc(point);\n}\n\n/**\n * @type {Projection|null}\n */\nlet userProjection = null;\n\n/**\n * Set the projection for coordinates supplied from and returned by API methods.\n * This includes all API methods except for those interacting with tile grids,\n * plus {@link import(\"./Map.js\").FrameState} and {@link import(\"./View.js\").State}.\n * @param {ProjectionLike} projection The user projection.\n * @api\n */\nexport function setUserProjection(projection) {\n userProjection = get(projection);\n}\n\n/**\n * Clear the user projection if set.\n * @api\n */\nexport function clearUserProjection() {\n userProjection = null;\n}\n\n/**\n * Get the projection for coordinates supplied from and returned by API methods.\n * @return {Projection|null} The user projection (or null if not set).\n * @api\n */\nexport function getUserProjection() {\n return userProjection;\n}\n\n/**\n * Use geographic coordinates (WGS-84 datum) in API methods.\n * This includes all API methods except for those interacting with tile grids,\n * plus {@link import(\"./Map.js\").FrameState} and {@link import(\"./View.js\").State}.\n * @api\n */\nexport function useGeographic() {\n setUserProjection('EPSG:4326');\n}\n\n/**\n * Return a coordinate transformed into the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array} coordinate Input coordinate.\n * @param {ProjectionLike} sourceProjection The input coordinate projection.\n * @return {Array} The input coordinate in the user projection.\n */\nexport function toUserCoordinate(coordinate, sourceProjection) {\n if (!userProjection) {\n return coordinate;\n }\n return transform(coordinate, sourceProjection, userProjection);\n}\n\n/**\n * Return a coordinate transformed from the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array} coordinate Input coordinate.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {Array} The input coordinate transformed.\n */\nexport function fromUserCoordinate(coordinate, destProjection) {\n if (!userProjection) {\n if (\n showCoordinateWarning &&\n !equals(coordinate, [0, 0]) &&\n coordinate[0] >= -180 &&\n coordinate[0] <= 180 &&\n coordinate[1] >= -90 &&\n coordinate[1] <= 90\n ) {\n showCoordinateWarning = false;\n warn(\n 'Call useGeographic() from ol/proj once to work with [longitude, latitude] coordinates.',\n );\n }\n return coordinate;\n }\n return transform(coordinate, userProjection, destProjection);\n}\n\n/**\n * Return an extent transformed into the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} sourceProjection The input extent projection.\n * @return {import(\"./extent.js\").Extent} The input extent in the user projection.\n */\nexport function toUserExtent(extent, sourceProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, sourceProjection, userProjection);\n}\n\n/**\n * Return an extent transformed from the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {import(\"./extent.js\").Extent} The input extent transformed.\n */\nexport function fromUserExtent(extent, destProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, userProjection, destProjection);\n}\n\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in input projection units per pixel.\n * @param {ProjectionLike} sourceProjection The input projection.\n * @return {number} Resolution in user projection units per pixel.\n */\nexport function toUserResolution(resolution, sourceProjection) {\n if (!userProjection) {\n return resolution;\n }\n const sourceMetersPerUnit = get(sourceProjection).getMetersPerUnit();\n const userMetersPerUnit = userProjection.getMetersPerUnit();\n return sourceMetersPerUnit && userMetersPerUnit\n ? (resolution * sourceMetersPerUnit) / userMetersPerUnit\n : resolution;\n}\n\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in user projection units per pixel.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {number} Resolution in destination projection units per pixel.\n */\nexport function fromUserResolution(resolution, destProjection) {\n if (!userProjection) {\n return resolution;\n }\n const destMetersPerUnit = get(destProjection).getMetersPerUnit();\n const userMetersPerUnit = userProjection.getMetersPerUnit();\n return destMetersPerUnit && userMetersPerUnit\n ? (resolution * userMetersPerUnit) / destMetersPerUnit\n : resolution;\n}\n\n/**\n * Creates a safe coordinate transform function from a coordinate transform function.\n * \"Safe\" means that it can handle wrapping of x-coordinates for global projections,\n * and that coordinates exceeding the source projection validity extent's range will be\n * clamped to the validity range.\n * @param {Projection} sourceProj Source projection.\n * @param {Projection} destProj Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} transform Transform function (source to destination).\n * @return {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} Safe transform function (source to destination).\n */\nexport function createSafeCoordinateTransform(sourceProj, destProj, transform) {\n return function (coord) {\n let transformed, worldsAway;\n if (sourceProj.canWrapX()) {\n const sourceExtent = sourceProj.getExtent();\n const sourceExtentWidth = getWidth(sourceExtent);\n coord = coord.slice(0);\n worldsAway = getWorldsAway(coord, sourceProj, sourceExtentWidth);\n if (worldsAway) {\n // Move x to the real world\n coord[0] = coord[0] - worldsAway * sourceExtentWidth;\n }\n coord[0] = clamp(coord[0], sourceExtent[0], sourceExtent[2]);\n coord[1] = clamp(coord[1], sourceExtent[1], sourceExtent[3]);\n transformed = transform(coord);\n } else {\n transformed = transform(coord);\n }\n if (worldsAway && destProj.canWrapX()) {\n // Move transformed coordinate back to the offset world\n transformed[0] += worldsAway * getWidth(destProj.getExtent());\n }\n return transformed;\n };\n}\n\n/**\n * Add transforms to and from EPSG:4326 and EPSG:3857. This function is called\n * by when this module is executed and should only need to be called again after\n * `clearAllProjections()` is called (e.g. in tests).\n */\nexport function addCommon() {\n // Add transformations that don't alter coordinates to convert within set of\n // projections with equal meaning.\n addEquivalentProjections(EPSG3857_PROJECTIONS);\n addEquivalentProjections(EPSG4326_PROJECTIONS);\n // Add transformations to convert EPSG:4326 like coordinates to EPSG:3857 like\n // coordinates and back.\n addEquivalentTransforms(\n EPSG4326_PROJECTIONS,\n EPSG3857_PROJECTIONS,\n fromEPSG4326,\n toEPSG4326,\n );\n}\n\naddCommon();\n","/**\n * @module ol/geom/flat/orient\n */\nimport {coordinates as reverseCoordinates} from './reverse.js';\n\n/**\n * Is the linear ring oriented clockwise in a coordinate system with a bottom-left\n * coordinate origin? For a coordinate system with a top-left coordinate origin,\n * the ring's orientation is clockwise when this function returns false.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {boolean|undefined} Is clockwise.\n */\nexport function linearRingIsClockwise(flatCoordinates, offset, end, stride) {\n // https://stackoverflow.com/q/1165647/clockwise-method#1165943\n // https://github.com/OSGeo/gdal/blob/master/gdal/ogr/ogrlinearring.cpp\n let edge = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n edge += (x2 - x1) * (y2 + y1);\n x1 = x2;\n y1 = y2;\n }\n return edge === 0 ? undefined : edge > 0;\n}\n\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingsAreOriented(\n flatCoordinates,\n offset,\n ends,\n stride,\n right,\n) {\n right = right !== undefined ? right : false;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const isClockwise = linearRingIsClockwise(\n flatCoordinates,\n offset,\n end,\n stride,\n );\n if (i === 0) {\n if ((right && isClockwise) || (!right && !isClockwise)) {\n return false;\n }\n } else {\n if ((right && !isClockwise) || (!right && isClockwise)) {\n return false;\n }\n }\n offset = end;\n }\n return true;\n}\n\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingssAreOriented(\n flatCoordinates,\n offset,\n endss,\n stride,\n right,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (!linearRingsAreOriented(flatCoordinates, offset, ends, stride, right)) {\n return false;\n }\n if (ends.length) {\n offset = ends[ends.length - 1];\n }\n }\n return true;\n}\n\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {boolean} [right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRings(\n flatCoordinates,\n offset,\n ends,\n stride,\n right,\n) {\n right = right !== undefined ? right : false;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const isClockwise = linearRingIsClockwise(\n flatCoordinates,\n offset,\n end,\n stride,\n );\n const reverse =\n i === 0\n ? (right && isClockwise) || (!right && !isClockwise)\n : (right && !isClockwise) || (!right && isClockwise);\n if (reverse) {\n reverseCoordinates(flatCoordinates, offset, end, stride);\n }\n offset = end;\n }\n return offset;\n}\n\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRingsArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n right,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n offset = orientLinearRings(\n flatCoordinates,\n offset,\n endss[i],\n stride,\n right,\n );\n }\n return offset;\n}\n\n/**\n * Return a two-dimensional endss\n * @param {Array} flatCoordinates Flat coordinates\n * @param {Array} ends Linear ring end indexes\n * @return {Array>} Two dimensional endss array that can\n * be used to construct a MultiPolygon\n */\nexport function inflateEnds(flatCoordinates, ends) {\n const endss = [];\n let offset = 0;\n let prevEndIndex = 0;\n let startOrientation;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n // classifies an array of rings into polygons with outer rings and holes\n const orientation = linearRingIsClockwise(flatCoordinates, offset, end, 2);\n if (startOrientation === undefined) {\n startOrientation = orientation;\n }\n if (orientation === startOrientation) {\n endss.push(ends.slice(prevEndIndex, i + 1));\n } else {\n if (endss.length === 0) {\n continue;\n }\n endss[endss.length - 1].push(ends[prevEndIndex]);\n }\n prevEndIndex = i + 1;\n offset = end;\n }\n return endss;\n}\n","/**\n * @module ol/geom/flat/interpolate\n */\nimport {binarySearch} from '../../array.js';\nimport {lerp} from '../../math.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} fraction Fraction.\n * @param {Array} [dest] Destination.\n * @param {number} [dimension] Destination dimension (default is `2`)\n * @return {Array} Destination.\n */\nexport function interpolatePoint(\n flatCoordinates,\n offset,\n end,\n stride,\n fraction,\n dest,\n dimension,\n) {\n let o, t;\n const n = (end - offset) / stride;\n if (n === 1) {\n o = offset;\n } else if (n === 2) {\n o = offset;\n t = fraction;\n } else if (n !== 0) {\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n let length = 0;\n const cumulativeLengths = [0];\n for (let i = offset + stride; i < end; i += stride) {\n const x2 = flatCoordinates[i];\n const y2 = flatCoordinates[i + 1];\n length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n cumulativeLengths.push(length);\n x1 = x2;\n y1 = y2;\n }\n const target = fraction * length;\n const index = binarySearch(cumulativeLengths, target);\n if (index < 0) {\n t =\n (target - cumulativeLengths[-index - 2]) /\n (cumulativeLengths[-index - 1] - cumulativeLengths[-index - 2]);\n o = offset + (-index - 2) * stride;\n } else {\n o = offset + index * stride;\n }\n }\n dimension = dimension > 1 ? dimension : 2;\n dest = dest ? dest : new Array(dimension);\n for (let i = 0; i < dimension; ++i) {\n dest[i] =\n o === undefined\n ? NaN\n : t === undefined\n ? flatCoordinates[o + i]\n : lerp(flatCoordinates[o + i], flatCoordinates[o + stride + i], t);\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} m M.\n * @param {boolean} extrapolate Extrapolate.\n * @return {import(\"../../coordinate.js\").Coordinate|null} Coordinate.\n */\nexport function lineStringCoordinateAtM(\n flatCoordinates,\n offset,\n end,\n stride,\n m,\n extrapolate,\n) {\n if (end == offset) {\n return null;\n }\n let coordinate;\n if (m < flatCoordinates[offset + stride - 1]) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(offset, offset + stride);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n return null;\n }\n if (flatCoordinates[end - 1] < m) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(end - stride, end);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n return null;\n }\n // FIXME use O(1) search\n if (m == flatCoordinates[offset + stride - 1]) {\n return flatCoordinates.slice(offset, offset + stride);\n }\n let lo = offset / stride;\n let hi = end / stride;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (m < flatCoordinates[(mid + 1) * stride - 1]) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n const m0 = flatCoordinates[lo * stride - 1];\n if (m == m0) {\n return flatCoordinates.slice((lo - 1) * stride, (lo - 1) * stride + stride);\n }\n const m1 = flatCoordinates[(lo + 1) * stride - 1];\n const t = (m - m0) / (m1 - m0);\n coordinate = [];\n for (let i = 0; i < stride - 1; ++i) {\n coordinate.push(\n lerp(\n flatCoordinates[(lo - 1) * stride + i],\n flatCoordinates[lo * stride + i],\n t,\n ),\n );\n }\n coordinate.push(m);\n return coordinate;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} m M.\n * @param {boolean} extrapolate Extrapolate.\n * @param {boolean} interpolate Interpolate.\n * @return {import(\"../../coordinate.js\").Coordinate|null} Coordinate.\n */\nexport function lineStringsCoordinateAtM(\n flatCoordinates,\n offset,\n ends,\n stride,\n m,\n extrapolate,\n interpolate,\n) {\n if (interpolate) {\n return lineStringCoordinateAtM(\n flatCoordinates,\n offset,\n ends[ends.length - 1],\n stride,\n m,\n extrapolate,\n );\n }\n let coordinate;\n if (m < flatCoordinates[stride - 1]) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(0, stride);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n return null;\n }\n if (flatCoordinates[flatCoordinates.length - 1] < m) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(flatCoordinates.length - stride);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n return null;\n }\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n if (offset == end) {\n continue;\n }\n if (m < flatCoordinates[offset + stride - 1]) {\n return null;\n }\n if (m <= flatCoordinates[end - 1]) {\n return lineStringCoordinateAtM(\n flatCoordinates,\n offset,\n end,\n stride,\n m,\n false,\n );\n }\n offset = end;\n }\n return null;\n}\n","/**\n * @module ol/render/Feature\n */\nimport Feature from '../Feature.js';\nimport {\n LineString,\n MultiLineString,\n MultiPoint,\n MultiPolygon,\n Point,\n Polygon,\n} from '../geom.js';\nimport {\n compose as composeTransform,\n create as createTransform,\n} from '../transform.js';\nimport {\n createOrUpdateFromCoordinate,\n createOrUpdateFromFlatCoordinates,\n getCenter,\n getHeight,\n} from '../extent.js';\nimport {\n douglasPeucker,\n douglasPeuckerArray,\n quantizeArray,\n} from '../geom/flat/simplify.js';\nimport {extend} from '../array.js';\nimport {\n getInteriorPointOfArray,\n getInteriorPointsOfMultiArray,\n} from '../geom/flat/interiorpoint.js';\nimport {get as getProjection} from '../proj.js';\nimport {inflateEnds} from '../geom/flat/orient.js';\nimport {interpolatePoint} from '../geom/flat/interpolate.js';\nimport {linearRingss as linearRingssCenter} from '../geom/flat/center.js';\nimport {memoizeOne} from '../functions.js';\nimport {transform2D} from '../geom/flat/transform.js';\n\n/**\n * @typedef {'Point' | 'LineString' | 'LinearRing' | 'Polygon' | 'MultiPoint' | 'MultiLineString'} Type\n * The geometry type. One of `'Point'`, `'LineString'`, `'LinearRing'`,\n * `'Polygon'`, `'MultiPoint'` or 'MultiLineString'`.\n */\n\n/**\n * @type {import(\"../transform.js\").Transform}\n */\nconst tmpTransform = createTransform();\n\n/**\n * Lightweight, read-only, {@link module:ol/Feature~Feature} and {@link module:ol/geom/Geometry~Geometry} like\n * structure, optimized for vector tile rendering and styling. Geometry access\n * through the API is limited to getting the type and extent of the geometry.\n */\nclass RenderFeature {\n /**\n * @param {Type} type Geometry type.\n * @param {Array} flatCoordinates Flat coordinates. These always need\n * to be right-handed for polygons.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Object} properties Properties.\n * @param {number|string|undefined} id Feature id.\n */\n constructor(type, flatCoordinates, ends, stride, properties, id) {\n /**\n * @type {import(\"../style/Style.js\").StyleFunction|undefined}\n */\n this.styleFunction;\n\n /**\n * @private\n * @type {import(\"../extent.js\").Extent|undefined}\n */\n this.extent_;\n\n /**\n * @private\n * @type {number|string|undefined}\n */\n this.id_ = id;\n\n /**\n * @private\n * @type {Type}\n */\n this.type_ = type;\n\n /**\n * @private\n * @type {Array}\n */\n this.flatCoordinates_ = flatCoordinates;\n\n /**\n * @private\n * @type {Array}\n */\n this.flatInteriorPoints_ = null;\n\n /**\n * @private\n * @type {Array}\n */\n this.flatMidpoints_ = null;\n\n /**\n * @private\n * @type {Array|null}\n */\n this.ends_ = ends || null;\n\n /**\n * @private\n * @type {Object}\n */\n this.properties_ = properties;\n\n /**\n * @private\n * @type {number}\n */\n this.squaredTolerance_;\n\n /**\n * @private\n * @type {number}\n */\n this.stride_ = stride;\n\n /**\n * @private\n * @type {RenderFeature}\n */\n this.simplifiedGeometry_;\n }\n\n /**\n * Get a feature property by its key.\n * @param {string} key Key\n * @return {*} Value for the requested key.\n * @api\n */\n get(key) {\n return this.properties_[key];\n }\n\n /**\n * Get the extent of this feature's geometry.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getExtent() {\n if (!this.extent_) {\n this.extent_ =\n this.type_ === 'Point'\n ? createOrUpdateFromCoordinate(this.flatCoordinates_)\n : createOrUpdateFromFlatCoordinates(\n this.flatCoordinates_,\n 0,\n this.flatCoordinates_.length,\n 2,\n );\n }\n return this.extent_;\n }\n\n /**\n * @return {Array} Flat interior points.\n */\n getFlatInteriorPoint() {\n if (!this.flatInteriorPoints_) {\n const flatCenter = getCenter(this.getExtent());\n this.flatInteriorPoints_ = getInteriorPointOfArray(\n this.flatCoordinates_,\n 0,\n this.ends_,\n 2,\n flatCenter,\n 0,\n );\n }\n return this.flatInteriorPoints_;\n }\n\n /**\n * @return {Array} Flat interior points.\n */\n getFlatInteriorPoints() {\n if (!this.flatInteriorPoints_) {\n const ends = inflateEnds(this.flatCoordinates_, this.ends_);\n const flatCenters = linearRingssCenter(this.flatCoordinates_, 0, ends, 2);\n this.flatInteriorPoints_ = getInteriorPointsOfMultiArray(\n this.flatCoordinates_,\n 0,\n ends,\n 2,\n flatCenters,\n );\n }\n return this.flatInteriorPoints_;\n }\n\n /**\n * @return {Array} Flat midpoint.\n */\n getFlatMidpoint() {\n if (!this.flatMidpoints_) {\n this.flatMidpoints_ = interpolatePoint(\n this.flatCoordinates_,\n 0,\n this.flatCoordinates_.length,\n 2,\n 0.5,\n );\n }\n return this.flatMidpoints_;\n }\n\n /**\n * @return {Array} Flat midpoints.\n */\n getFlatMidpoints() {\n if (!this.flatMidpoints_) {\n this.flatMidpoints_ = [];\n const flatCoordinates = this.flatCoordinates_;\n let offset = 0;\n const ends = /** @type {Array} */ (this.ends_);\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const midpoint = interpolatePoint(flatCoordinates, offset, end, 2, 0.5);\n extend(this.flatMidpoints_, midpoint);\n offset = end;\n }\n }\n return this.flatMidpoints_;\n }\n\n /**\n * Get the feature identifier. This is a stable identifier for the feature and\n * is set when reading data from a remote source.\n * @return {number|string|undefined} Id.\n * @api\n */\n getId() {\n return this.id_;\n }\n\n /**\n * @return {Array} Flat coordinates.\n */\n getOrientedFlatCoordinates() {\n return this.flatCoordinates_;\n }\n\n /**\n * For API compatibility with {@link module:ol/Feature~Feature}, this method is useful when\n * determining the geometry type in style function (see {@link #getType}).\n * @return {RenderFeature} Feature.\n * @api\n */\n getGeometry() {\n return this;\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {RenderFeature} Simplified geometry.\n */\n getSimplifiedGeometry(squaredTolerance) {\n return this;\n }\n\n /**\n * Get a transformed and simplified version of the geometry.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [transform] Optional transform function.\n * @return {RenderFeature} Simplified geometry.\n */\n simplifyTransformed(squaredTolerance, transform) {\n return this;\n }\n\n /**\n * Get the feature properties.\n * @return {Object} Feature properties.\n * @api\n */\n getProperties() {\n return this.properties_;\n }\n\n /**\n * Get an object of all property names and values. This has the same behavior as getProperties,\n * but is here to conform with the {@link module:ol/Feature~Feature} interface.\n * @return {Object?} Object.\n */\n getPropertiesInternal() {\n return this.properties_;\n }\n\n /**\n * @return {number} Stride.\n */\n getStride() {\n return this.stride_;\n }\n\n /**\n * @return {import('../style/Style.js').StyleFunction|undefined} Style\n */\n getStyleFunction() {\n return this.styleFunction;\n }\n\n /**\n * Get the type of this feature's geometry.\n * @return {Type} Geometry type.\n * @api\n */\n getType() {\n return this.type_;\n }\n\n /**\n * Transform geometry coordinates from tile pixel space to projected.\n *\n * @param {import(\"../proj.js\").ProjectionLike} projection The data projection\n */\n transform(projection) {\n projection = getProjection(projection);\n const pixelExtent = projection.getExtent();\n const projectedExtent = projection.getWorldExtent();\n if (pixelExtent && projectedExtent) {\n const scale = getHeight(projectedExtent) / getHeight(pixelExtent);\n composeTransform(\n tmpTransform,\n projectedExtent[0],\n projectedExtent[3],\n scale,\n -scale,\n 0,\n 0,\n 0,\n );\n transform2D(\n this.flatCoordinates_,\n 0,\n this.flatCoordinates_.length,\n 2,\n tmpTransform,\n this.flatCoordinates_,\n );\n }\n }\n\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n */\n applyTransform(transformFn) {\n transformFn(this.flatCoordinates_, this.flatCoordinates_, this.stride_);\n }\n\n /**\n * @return {RenderFeature} A cloned render feature.\n */\n clone() {\n return new RenderFeature(\n this.type_,\n this.flatCoordinates_.slice(),\n this.ends_?.slice(),\n this.stride_,\n Object.assign({}, this.properties_),\n this.id_,\n );\n }\n\n /**\n * @return {Array|null} Ends.\n */\n getEnds() {\n return this.ends_;\n }\n\n /**\n * Add transform and resolution based geometry simplification to this instance.\n * @return {RenderFeature} This render feature.\n */\n enableSimplifyTransformed() {\n this.simplifyTransformed = memoizeOne((squaredTolerance, transform) => {\n if (squaredTolerance === this.squaredTolerance_) {\n return this.simplifiedGeometry_;\n }\n this.simplifiedGeometry_ = this.clone();\n if (transform) {\n this.simplifiedGeometry_.applyTransform(transform);\n }\n const simplifiedFlatCoordinates =\n this.simplifiedGeometry_.getFlatCoordinates();\n let simplifiedEnds;\n switch (this.type_) {\n case 'LineString':\n simplifiedFlatCoordinates.length = douglasPeucker(\n simplifiedFlatCoordinates,\n 0,\n this.simplifiedGeometry_.flatCoordinates_.length,\n this.simplifiedGeometry_.stride_,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n );\n simplifiedEnds = [simplifiedFlatCoordinates.length];\n break;\n case 'MultiLineString':\n simplifiedEnds = [];\n simplifiedFlatCoordinates.length = douglasPeuckerArray(\n simplifiedFlatCoordinates,\n 0,\n this.simplifiedGeometry_.ends_,\n this.simplifiedGeometry_.stride_,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n simplifiedEnds,\n );\n break;\n case 'Polygon':\n simplifiedEnds = [];\n simplifiedFlatCoordinates.length = quantizeArray(\n simplifiedFlatCoordinates,\n 0,\n this.simplifiedGeometry_.ends_,\n this.simplifiedGeometry_.stride_,\n Math.sqrt(squaredTolerance),\n simplifiedFlatCoordinates,\n 0,\n simplifiedEnds,\n );\n break;\n default:\n }\n if (simplifiedEnds) {\n this.simplifiedGeometry_ = new RenderFeature(\n this.type_,\n simplifiedFlatCoordinates,\n simplifiedEnds,\n 2,\n this.properties_,\n this.id_,\n );\n }\n this.squaredTolerance_ = squaredTolerance;\n return this.simplifiedGeometry_;\n });\n return this;\n }\n}\n\n/**\n * @return {Array} Flat coordinates.\n */\nRenderFeature.prototype.getFlatCoordinates =\n RenderFeature.prototype.getOrientedFlatCoordinates;\n\n/**\n * Create a geometry from an `ol/render/Feature`\n * @param {RenderFeature} renderFeature\n * Render Feature\n * @return {Point|MultiPoint|LineString|MultiLineString|Polygon|MultiPolygon}\n * New geometry instance.\n * @api\n */\nexport function toGeometry(renderFeature) {\n const geometryType = renderFeature.getType();\n switch (geometryType) {\n case 'Point':\n return new Point(renderFeature.getFlatCoordinates());\n case 'MultiPoint':\n return new MultiPoint(renderFeature.getFlatCoordinates(), 'XY');\n case 'LineString':\n return new LineString(renderFeature.getFlatCoordinates(), 'XY');\n case 'MultiLineString':\n return new MultiLineString(\n renderFeature.getFlatCoordinates(),\n 'XY',\n /** @type {Array} */ (renderFeature.getEnds()),\n );\n case 'Polygon':\n const flatCoordinates = renderFeature.getFlatCoordinates();\n const ends = renderFeature.getEnds();\n const endss = inflateEnds(flatCoordinates, ends);\n return endss.length > 1\n ? new MultiPolygon(flatCoordinates, 'XY', endss)\n : new Polygon(flatCoordinates, 'XY', ends);\n default:\n throw new Error('Invalid geometry type:' + geometryType);\n }\n}\n\n/**\n * Create an `ol/Feature` from an `ol/render/Feature`\n * @param {RenderFeature} renderFeature RenderFeature\n * @param {string} [geometryName='geometry'] Geometry name to use\n * when creating the Feature.\n * @return {Feature} Newly constructed `ol/Feature` with properties,\n * geometry, and id copied over.\n * @api\n */\nexport function toFeature(renderFeature, geometryName) {\n const id = renderFeature.getId();\n const geometry = toGeometry(renderFeature);\n const properties = renderFeature.getProperties();\n const feature = new Feature();\n if (geometryName !== undefined) {\n feature.setGeometryName(geometryName);\n }\n feature.setGeometry(geometry);\n if (id !== undefined) {\n feature.setId(id);\n }\n feature.setProperties(properties, true);\n return feature;\n}\n\nexport default RenderFeature;\n","/**\n * @module ol/geom/flat/center\n */\nimport {createEmpty, createOrUpdateFromFlatCoordinates} from '../../extent.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @return {Array} Flat centers.\n */\nexport function linearRingss(flatCoordinates, offset, endss, stride) {\n const flatCenters = [];\n let extent = createEmpty();\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n extent = createOrUpdateFromFlatCoordinates(\n flatCoordinates,\n offset,\n ends[0],\n stride,\n );\n flatCenters.push((extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2);\n offset = ends[ends.length - 1];\n }\n return flatCenters;\n}\n","/**\n * @module ol/geom/flat/transform\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {Array} [dest] Destination.\n * @param {number} [destinationStride] Stride of destination coordinates; if unspecified, assumed to be 2.\n * @return {Array} Transformed coordinates.\n */\nexport function transform2D(\n flatCoordinates,\n offset,\n end,\n stride,\n transform,\n dest,\n destinationStride,\n) {\n dest = dest ? dest : [];\n destinationStride = destinationStride ? destinationStride : 2;\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const x = flatCoordinates[j];\n const y = flatCoordinates[j + 1];\n dest[i++] = transform[0] * x + transform[2] * y + transform[4];\n dest[i++] = transform[1] * x + transform[3] * y + transform[5];\n\n for (let k = 2; k < destinationStride; k++) {\n dest[i++] = flatCoordinates[j + k];\n }\n }\n\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} angle Angle.\n * @param {Array} anchor Rotation anchor point.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function rotate(\n flatCoordinates,\n offset,\n end,\n stride,\n angle,\n anchor,\n dest,\n) {\n dest = dest ? dest : [];\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const anchorX = anchor[0];\n const anchorY = anchor[1];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const deltaX = flatCoordinates[j] - anchorX;\n const deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + deltaX * cos - deltaY * sin;\n dest[i++] = anchorY + deltaX * sin + deltaY * cos;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * Scale the coordinates.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} sx Scale factor in the x-direction.\n * @param {number} sy Scale factor in the y-direction.\n * @param {Array} anchor Scale anchor point.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function scale(\n flatCoordinates,\n offset,\n end,\n stride,\n sx,\n sy,\n anchor,\n dest,\n) {\n dest = dest ? dest : [];\n const anchorX = anchor[0];\n const anchorY = anchor[1];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const deltaX = flatCoordinates[j] - anchorX;\n const deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + sx * deltaX;\n dest[i++] = anchorY + sy * deltaY;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function translate(\n flatCoordinates,\n offset,\n end,\n stride,\n deltaX,\n deltaY,\n dest,\n) {\n dest = dest ? dest : [];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n dest[i++] = flatCoordinates[j] + deltaX;\n dest[i++] = flatCoordinates[j + 1] + deltaY;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n","/**\n * @module ol/functions\n */\n\nimport {equals as arrayEquals} from './array.js';\n\n/**\n * Always returns true.\n * @return {boolean} true.\n */\nexport function TRUE() {\n return true;\n}\n\n/**\n * Always returns false.\n * @return {boolean} false.\n */\nexport function FALSE() {\n return false;\n}\n\n/**\n * A reusable function, used e.g. as a default for callbacks.\n *\n * @return {void} Nothing.\n */\nexport function VOID() {}\n\n/**\n * Wrap a function in another function that remembers the last return. If the\n * returned function is called twice in a row with the same arguments and the same\n * this object, it will return the value from the first call in the second call.\n *\n * @param {function(...any): ReturnType} fn The function to memoize.\n * @return {function(...any): ReturnType} The memoized function.\n * @template ReturnType\n */\nexport function memoizeOne(fn) {\n /** @type {ReturnType} */\n let lastResult;\n\n /** @type {Array|undefined} */\n let lastArgs;\n\n let lastThis;\n\n /**\n * @this {*} Only need to know if `this` changed, don't care what type\n * @return {ReturnType} Memoized value\n */\n return function () {\n const nextArgs = Array.prototype.slice.call(arguments);\n if (!lastArgs || this !== lastThis || !arrayEquals(nextArgs, lastArgs)) {\n lastThis = this;\n lastArgs = nextArgs;\n lastResult = fn.apply(this, arguments);\n }\n return lastResult;\n };\n}\n\n/**\n * @template T\n * @param {function(): (T | Promise)} getter A function that returns a value or a promise for a value.\n * @return {Promise} A promise for the value.\n */\nexport function toPromise(getter) {\n function promiseGetter() {\n let value;\n try {\n value = getter();\n } catch (err) {\n return Promise.reject(err);\n }\n if (value instanceof Promise) {\n return value;\n }\n return Promise.resolve(value);\n }\n return promiseGetter();\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Stroke;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Style;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.style.Text;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.functions;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.render.canvas;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.TileState;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.util;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.Image;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.Layer;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.layer.Group;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.Map;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.Raster;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.Source;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.tilegrid.TileGrid;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.View;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.proj.Units;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.events.Event;","import Circle from 'ol/style/Circle.js';\nimport Fill from 'ol/style/Fill.js';\nimport Icon from 'ol/style/Icon.js';\nimport RenderFeature from 'ol/render/Feature.js';\nimport Stroke from 'ol/style/Stroke.js';\nimport Style from 'ol/style/Style.js';\nimport Text from 'ol/style/Text.js';\nimport { toPromise } from 'ol/functions.js';\nimport { registerFont, checkedFonts } from 'ol/render/canvas.js';\nimport TileState from 'ol/TileState.js';\nimport { VectorTile } from 'ol';\nimport { getUid } from 'ol/util.js';\nimport GeoJSON from 'ol/format/GeoJSON.js';\nimport ImageLayer from 'ol/layer/Image.js';\nimport Layer from 'ol/layer/Layer.js';\nimport LayerGroup from 'ol/layer/Group.js';\nimport MVT from 'ol/format/MVT.js';\nimport Map from 'ol/Map.js';\nimport Raster from 'ol/source/Raster.js';\nimport Source from 'ol/source/Source.js';\nimport TileGrid from 'ol/tilegrid/TileGrid.js';\nimport TileJSON from 'ol/source/TileJSON.js';\nimport TileLayer from 'ol/layer/Tile.js';\nimport VectorLayer from 'ol/layer/Vector.js';\nimport VectorSource from 'ol/source/Vector.js';\nimport VectorTileLayer from 'ol/layer/VectorTile.js';\nimport VectorTileSource, { defaultLoadFunction } from 'ol/source/VectorTile.js';\nimport View from 'ol/View.js';\nimport { METERS_PER_UNIT } from 'ol/proj/Units.js';\nimport { bbox } from 'ol/loadingstrategy.js';\nimport { createXYZ } from 'ol/tilegrid.js';\nimport { get as get$1, getUserProjection, getPointResolution, fromLonLat, equivalent } from 'ol/proj.js';\nimport { getCenter, getTopLeft } from 'ol/extent.js';\nimport BaseEvent from 'ol/events/Event.js';\nimport EventType from 'ol/events/EventType.js';\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nvar csscolorparser = {};\n\nvar parseCSSColor_1;\n// (c) Dean McNamee , 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n 'transparent': [\n 0,\n 0,\n 0,\n 0\n ],\n 'aliceblue': [\n 240,\n 248,\n 255,\n 1\n ],\n 'antiquewhite': [\n 250,\n 235,\n 215,\n 1\n ],\n 'aqua': [\n 0,\n 255,\n 255,\n 1\n ],\n 'aquamarine': [\n 127,\n 255,\n 212,\n 1\n ],\n 'azure': [\n 240,\n 255,\n 255,\n 1\n ],\n 'beige': [\n 245,\n 245,\n 220,\n 1\n ],\n 'bisque': [\n 255,\n 228,\n 196,\n 1\n ],\n 'black': [\n 0,\n 0,\n 0,\n 1\n ],\n 'blanchedalmond': [\n 255,\n 235,\n 205,\n 1\n ],\n 'blue': [\n 0,\n 0,\n 255,\n 1\n ],\n 'blueviolet': [\n 138,\n 43,\n 226,\n 1\n ],\n 'brown': [\n 165,\n 42,\n 42,\n 1\n ],\n 'burlywood': [\n 222,\n 184,\n 135,\n 1\n ],\n 'cadetblue': [\n 95,\n 158,\n 160,\n 1\n ],\n 'chartreuse': [\n 127,\n 255,\n 0,\n 1\n ],\n 'chocolate': [\n 210,\n 105,\n 30,\n 1\n ],\n 'coral': [\n 255,\n 127,\n 80,\n 1\n ],\n 'cornflowerblue': [\n 100,\n 149,\n 237,\n 1\n ],\n 'cornsilk': [\n 255,\n 248,\n 220,\n 1\n ],\n 'crimson': [\n 220,\n 20,\n 60,\n 1\n ],\n 'cyan': [\n 0,\n 255,\n 255,\n 1\n ],\n 'darkblue': [\n 0,\n 0,\n 139,\n 1\n ],\n 'darkcyan': [\n 0,\n 139,\n 139,\n 1\n ],\n 'darkgoldenrod': [\n 184,\n 134,\n 11,\n 1\n ],\n 'darkgray': [\n 169,\n 169,\n 169,\n 1\n ],\n 'darkgreen': [\n 0,\n 100,\n 0,\n 1\n ],\n 'darkgrey': [\n 169,\n 169,\n 169,\n 1\n ],\n 'darkkhaki': [\n 189,\n 183,\n 107,\n 1\n ],\n 'darkmagenta': [\n 139,\n 0,\n 139,\n 1\n ],\n 'darkolivegreen': [\n 85,\n 107,\n 47,\n 1\n ],\n 'darkorange': [\n 255,\n 140,\n 0,\n 1\n ],\n 'darkorchid': [\n 153,\n 50,\n 204,\n 1\n ],\n 'darkred': [\n 139,\n 0,\n 0,\n 1\n ],\n 'darksalmon': [\n 233,\n 150,\n 122,\n 1\n ],\n 'darkseagreen': [\n 143,\n 188,\n 143,\n 1\n ],\n 'darkslateblue': [\n 72,\n 61,\n 139,\n 1\n ],\n 'darkslategray': [\n 47,\n 79,\n 79,\n 1\n ],\n 'darkslategrey': [\n 47,\n 79,\n 79,\n 1\n ],\n 'darkturquoise': [\n 0,\n 206,\n 209,\n 1\n ],\n 'darkviolet': [\n 148,\n 0,\n 211,\n 1\n ],\n 'deeppink': [\n 255,\n 20,\n 147,\n 1\n ],\n 'deepskyblue': [\n 0,\n 191,\n 255,\n 1\n ],\n 'dimgray': [\n 105,\n 105,\n 105,\n 1\n ],\n 'dimgrey': [\n 105,\n 105,\n 105,\n 1\n ],\n 'dodgerblue': [\n 30,\n 144,\n 255,\n 1\n ],\n 'firebrick': [\n 178,\n 34,\n 34,\n 1\n ],\n 'floralwhite': [\n 255,\n 250,\n 240,\n 1\n ],\n 'forestgreen': [\n 34,\n 139,\n 34,\n 1\n ],\n 'fuchsia': [\n 255,\n 0,\n 255,\n 1\n ],\n 'gainsboro': [\n 220,\n 220,\n 220,\n 1\n ],\n 'ghostwhite': [\n 248,\n 248,\n 255,\n 1\n ],\n 'gold': [\n 255,\n 215,\n 0,\n 1\n ],\n 'goldenrod': [\n 218,\n 165,\n 32,\n 1\n ],\n 'gray': [\n 128,\n 128,\n 128,\n 1\n ],\n 'green': [\n 0,\n 128,\n 0,\n 1\n ],\n 'greenyellow': [\n 173,\n 255,\n 47,\n 1\n ],\n 'grey': [\n 128,\n 128,\n 128,\n 1\n ],\n 'honeydew': [\n 240,\n 255,\n 240,\n 1\n ],\n 'hotpink': [\n 255,\n 105,\n 180,\n 1\n ],\n 'indianred': [\n 205,\n 92,\n 92,\n 1\n ],\n 'indigo': [\n 75,\n 0,\n 130,\n 1\n ],\n 'ivory': [\n 255,\n 255,\n 240,\n 1\n ],\n 'khaki': [\n 240,\n 230,\n 140,\n 1\n ],\n 'lavender': [\n 230,\n 230,\n 250,\n 1\n ],\n 'lavenderblush': [\n 255,\n 240,\n 245,\n 1\n ],\n 'lawngreen': [\n 124,\n 252,\n 0,\n 1\n ],\n 'lemonchiffon': [\n 255,\n 250,\n 205,\n 1\n ],\n 'lightblue': [\n 173,\n 216,\n 230,\n 1\n ],\n 'lightcoral': [\n 240,\n 128,\n 128,\n 1\n ],\n 'lightcyan': [\n 224,\n 255,\n 255,\n 1\n ],\n 'lightgoldenrodyellow': [\n 250,\n 250,\n 210,\n 1\n ],\n 'lightgray': [\n 211,\n 211,\n 211,\n 1\n ],\n 'lightgreen': [\n 144,\n 238,\n 144,\n 1\n ],\n 'lightgrey': [\n 211,\n 211,\n 211,\n 1\n ],\n 'lightpink': [\n 255,\n 182,\n 193,\n 1\n ],\n 'lightsalmon': [\n 255,\n 160,\n 122,\n 1\n ],\n 'lightseagreen': [\n 32,\n 178,\n 170,\n 1\n ],\n 'lightskyblue': [\n 135,\n 206,\n 250,\n 1\n ],\n 'lightslategray': [\n 119,\n 136,\n 153,\n 1\n ],\n 'lightslategrey': [\n 119,\n 136,\n 153,\n 1\n ],\n 'lightsteelblue': [\n 176,\n 196,\n 222,\n 1\n ],\n 'lightyellow': [\n 255,\n 255,\n 224,\n 1\n ],\n 'lime': [\n 0,\n 255,\n 0,\n 1\n ],\n 'limegreen': [\n 50,\n 205,\n 50,\n 1\n ],\n 'linen': [\n 250,\n 240,\n 230,\n 1\n ],\n 'magenta': [\n 255,\n 0,\n 255,\n 1\n ],\n 'maroon': [\n 128,\n 0,\n 0,\n 1\n ],\n 'mediumaquamarine': [\n 102,\n 205,\n 170,\n 1\n ],\n 'mediumblue': [\n 0,\n 0,\n 205,\n 1\n ],\n 'mediumorchid': [\n 186,\n 85,\n 211,\n 1\n ],\n 'mediumpurple': [\n 147,\n 112,\n 219,\n 1\n ],\n 'mediumseagreen': [\n 60,\n 179,\n 113,\n 1\n ],\n 'mediumslateblue': [\n 123,\n 104,\n 238,\n 1\n ],\n 'mediumspringgreen': [\n 0,\n 250,\n 154,\n 1\n ],\n 'mediumturquoise': [\n 72,\n 209,\n 204,\n 1\n ],\n 'mediumvioletred': [\n 199,\n 21,\n 133,\n 1\n ],\n 'midnightblue': [\n 25,\n 25,\n 112,\n 1\n ],\n 'mintcream': [\n 245,\n 255,\n 250,\n 1\n ],\n 'mistyrose': [\n 255,\n 228,\n 225,\n 1\n ],\n 'moccasin': [\n 255,\n 228,\n 181,\n 1\n ],\n 'navajowhite': [\n 255,\n 222,\n 173,\n 1\n ],\n 'navy': [\n 0,\n 0,\n 128,\n 1\n ],\n 'oldlace': [\n 253,\n 245,\n 230,\n 1\n ],\n 'olive': [\n 128,\n 128,\n 0,\n 1\n ],\n 'olivedrab': [\n 107,\n 142,\n 35,\n 1\n ],\n 'orange': [\n 255,\n 165,\n 0,\n 1\n ],\n 'orangered': [\n 255,\n 69,\n 0,\n 1\n ],\n 'orchid': [\n 218,\n 112,\n 214,\n 1\n ],\n 'palegoldenrod': [\n 238,\n 232,\n 170,\n 1\n ],\n 'palegreen': [\n 152,\n 251,\n 152,\n 1\n ],\n 'paleturquoise': [\n 175,\n 238,\n 238,\n 1\n ],\n 'palevioletred': [\n 219,\n 112,\n 147,\n 1\n ],\n 'papayawhip': [\n 255,\n 239,\n 213,\n 1\n ],\n 'peachpuff': [\n 255,\n 218,\n 185,\n 1\n ],\n 'peru': [\n 205,\n 133,\n 63,\n 1\n ],\n 'pink': [\n 255,\n 192,\n 203,\n 1\n ],\n 'plum': [\n 221,\n 160,\n 221,\n 1\n ],\n 'powderblue': [\n 176,\n 224,\n 230,\n 1\n ],\n 'purple': [\n 128,\n 0,\n 128,\n 1\n ],\n 'rebeccapurple': [\n 102,\n 51,\n 153,\n 1\n ],\n 'red': [\n 255,\n 0,\n 0,\n 1\n ],\n 'rosybrown': [\n 188,\n 143,\n 143,\n 1\n ],\n 'royalblue': [\n 65,\n 105,\n 225,\n 1\n ],\n 'saddlebrown': [\n 139,\n 69,\n 19,\n 1\n ],\n 'salmon': [\n 250,\n 128,\n 114,\n 1\n ],\n 'sandybrown': [\n 244,\n 164,\n 96,\n 1\n ],\n 'seagreen': [\n 46,\n 139,\n 87,\n 1\n ],\n 'seashell': [\n 255,\n 245,\n 238,\n 1\n ],\n 'sienna': [\n 160,\n 82,\n 45,\n 1\n ],\n 'silver': [\n 192,\n 192,\n 192,\n 1\n ],\n 'skyblue': [\n 135,\n 206,\n 235,\n 1\n ],\n 'slateblue': [\n 106,\n 90,\n 205,\n 1\n ],\n 'slategray': [\n 112,\n 128,\n 144,\n 1\n ],\n 'slategrey': [\n 112,\n 128,\n 144,\n 1\n ],\n 'snow': [\n 255,\n 250,\n 250,\n 1\n ],\n 'springgreen': [\n 0,\n 255,\n 127,\n 1\n ],\n 'steelblue': [\n 70,\n 130,\n 180,\n 1\n ],\n 'tan': [\n 210,\n 180,\n 140,\n 1\n ],\n 'teal': [\n 0,\n 128,\n 128,\n 1\n ],\n 'thistle': [\n 216,\n 191,\n 216,\n 1\n ],\n 'tomato': [\n 255,\n 99,\n 71,\n 1\n ],\n 'turquoise': [\n 64,\n 224,\n 208,\n 1\n ],\n 'violet': [\n 238,\n 130,\n 238,\n 1\n ],\n 'wheat': [\n 245,\n 222,\n 179,\n 1\n ],\n 'white': [\n 255,\n 255,\n 255,\n 1\n ],\n 'whitesmoke': [\n 245,\n 245,\n 245,\n 1\n ],\n 'yellow': [\n 255,\n 255,\n 0,\n 1\n ],\n 'yellowgreen': [\n 154,\n 205,\n 50,\n 1\n ]\n};\nfunction clamp_css_byte(i) {\n // Clamp to integer 0 .. 255.\n i = Math.round(i);\n // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\nfunction clamp_css_float(f) {\n // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\nfunction parse_css_int(str) {\n // int or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_byte(parseFloat(str) / 100 * 255);\n return clamp_css_byte(parseInt(str));\n}\nfunction parse_css_float(str) {\n // float or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_float(parseFloat(str) / 100);\n return clamp_css_float(parseFloat(str));\n}\nfunction css_hue_to_rgb(m1, m2, h) {\n if (h < 0)\n h += 1;\n else if (h > 1)\n h -= 1;\n if (h * 6 < 1)\n return m1 + (m2 - m1) * h * 6;\n if (h * 2 < 1)\n return m2;\n if (h * 3 < 2)\n return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n return m1;\n}\nfunction parseCSSColor(css_str) {\n // Remove all whitespace, not compliant, but should just be more accepting.\n var str = css_str.replace(/ /g, '').toLowerCase();\n // Color keywords (and transparent) lookup.\n if (str in kCSSColorTable)\n return kCSSColorTable[str].slice();\n // dup.\n // #abc and #abc123 syntax.\n if (str[0] === '#') {\n if (str.length === 4) {\n var iv = parseInt(str.substr(1), 16);\n // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 4095))\n return null;\n // Covers NaN.\n return [\n (iv & 3840) >> 4 | (iv & 3840) >> 8,\n iv & 240 | (iv & 240) >> 4,\n iv & 15 | (iv & 15) << 4,\n 1\n ];\n } else if (str.length === 7) {\n var iv = parseInt(str.substr(1), 16);\n // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 16777215))\n return null;\n // Covers NaN.\n return [\n (iv & 16711680) >> 16,\n (iv & 65280) >> 8,\n iv & 255,\n 1\n ];\n }\n return null;\n }\n var op = str.indexOf('('), ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === str.length) {\n var fname = str.substr(0, op);\n var params = str.substr(op + 1, ep - (op + 1)).split(',');\n var alpha = 1;\n // To allow case fallthrough.\n switch (fname) {\n case 'rgba':\n if (params.length !== 4)\n return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'rgb':\n if (params.length !== 3)\n return null;\n return [\n parse_css_int(params[0]),\n parse_css_int(params[1]),\n parse_css_int(params[2]),\n alpha\n ];\n case 'hsla':\n if (params.length !== 4)\n return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'hsl':\n if (params.length !== 3)\n return null;\n var h = (parseFloat(params[0]) % 360 + 360) % 360 / 360;\n // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n var s = parse_css_float(params[1]);\n var l = parse_css_float(params[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n return [\n clamp_css_byte(css_hue_to_rgb(m1, m2, h + 1 / 3) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h - 1 / 3) * 255),\n alpha\n ];\n default:\n return null;\n }\n }\n return null;\n}\ntry {\n parseCSSColor_1 = csscolorparser.parseCSSColor = parseCSSColor;\n} catch (e) {\n}\n\n// \n/**\n * An RGBA color value. Create instances from color strings using the static\n * method `Color.parse`. The constructor accepts RGB channel values in the range\n * `[0, 1]`, premultiplied by A.\n *\n * @param {number} r The red channel.\n * @param {number} g The green channel.\n * @param {number} b The blue channel.\n * @param {number} a The alpha channel.\n * @private\n */\nclass Color {\n constructor(r, g, b, a = 1) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n }\n /**\n * Parses valid CSS color strings and returns a `Color` instance.\n * @returns A `Color` instance, or `undefined` if the input is not a valid color string.\n */\n static parse(input) {\n if (!input) {\n return undefined;\n }\n if (input instanceof Color) {\n return input;\n }\n if (typeof input !== 'string') {\n return undefined;\n }\n const rgba = parseCSSColor_1(input);\n if (!rgba) {\n return undefined;\n }\n return new Color(rgba[0] / 255 * rgba[3], rgba[1] / 255 * rgba[3], rgba[2] / 255 * rgba[3], rgba[3]);\n }\n /**\n * Returns an RGBA string representing the color value.\n *\n * @returns An RGBA string.\n * @example\n * var purple = new Color.parse('purple');\n * purple.toString; // = \"rgba(128,0,128,1)\"\n * var translucentGreen = new Color.parse('rgba(26, 207, 26, .73)');\n * translucentGreen.toString(); // = \"rgba(26,207,26,0.73)\"\n */\n toString() {\n const [r, g, b, a] = this.toArray();\n return `rgba(${ Math.round(r) },${ Math.round(g) },${ Math.round(b) },${ a })`;\n }\n /**\n * Returns an RGBA array of values representing the color, unpremultiplied by A.\n *\n * @returns An array of RGBA color values in the range [0, 255].\n */\n toArray() {\n const {r, g, b, a} = this;\n return a === 0 ? [\n 0,\n 0,\n 0,\n 0\n ] : [\n r * 255 / a,\n g * 255 / a,\n b * 255 / a,\n a\n ];\n }\n /**\n * Returns a RGBA array of float values representing the color, unpremultiplied by A.\n *\n * @returns An array of RGBA color values in the range [0, 1].\n */\n toArray01() {\n const {r, g, b, a} = this;\n return a === 0 ? [\n 0,\n 0,\n 0,\n 0\n ] : [\n r / a,\n g / a,\n b / a,\n a\n ];\n }\n /**\n * Returns an RGBA array of values representing the color, premultiplied by A.\n *\n * @returns An array of RGBA color values in the range [0, 1].\n */\n toArray01PremultipliedAlpha() {\n const {r, g, b, a} = this;\n return [\n r,\n g,\n b,\n a\n ];\n }\n}\nColor.black = new Color(0, 0, 0, 1);\nColor.white = new Color(1, 1, 1, 1);\nColor.transparent = new Color(0, 0, 0, 0);\nColor.red = new Color(1, 0, 0, 1);\nColor.blue = new Color(0, 0, 1, 1);\nvar Color$1 = Color;\n\nfunction convertLiteral(value) {\n return typeof value === 'object' ? [\n 'literal',\n value\n ] : value;\n}\nfunction convertFunction(parameters, propertySpec) {\n let stops = parameters.stops;\n if (!stops) {\n // identity function\n return convertIdentityFunction(parameters, propertySpec);\n }\n const zoomAndFeatureDependent = stops && typeof stops[0][0] === 'object';\n const featureDependent = zoomAndFeatureDependent || parameters.property !== undefined;\n const zoomDependent = zoomAndFeatureDependent || !featureDependent;\n stops = stops.map(stop => {\n if (!featureDependent && propertySpec.tokens && typeof stop[1] === 'string') {\n return [\n stop[0],\n convertTokenString(stop[1])\n ];\n }\n return [\n stop[0],\n convertLiteral(stop[1])\n ];\n });\n if (zoomAndFeatureDependent) {\n return convertZoomAndPropertyFunction(parameters, propertySpec, stops);\n } else if (zoomDependent) {\n return convertZoomFunction(parameters, propertySpec, stops);\n } else {\n return convertPropertyFunction(parameters, propertySpec, stops);\n }\n}\nfunction convertIdentityFunction(parameters, propertySpec) {\n const get = [\n 'get',\n parameters.property\n ];\n if (parameters.default === undefined) {\n // By default, expressions for string-valued properties get coerced. To preserve\n // legacy function semantics, insert an explicit assertion instead.\n return propertySpec.type === 'string' ? [\n 'string',\n get\n ] : get;\n } else if (propertySpec.type === 'enum') {\n return [\n 'match',\n get,\n Object.keys(propertySpec.values),\n get,\n parameters.default\n ];\n } else {\n const expression = [\n propertySpec.type === 'color' ? 'to-color' : propertySpec.type,\n get,\n convertLiteral(parameters.default)\n ];\n if (propertySpec.type === 'array') {\n expression.splice(1, 0, propertySpec.value, propertySpec.length || null);\n }\n return expression;\n }\n}\nfunction getInterpolateOperator(parameters) {\n switch (parameters.colorSpace) {\n case 'hcl':\n return 'interpolate-hcl';\n case 'lab':\n return 'interpolate-lab';\n default:\n return 'interpolate';\n }\n}\nfunction convertZoomAndPropertyFunction(parameters, propertySpec, stops) {\n const featureFunctionParameters = {};\n const featureFunctionStops = {};\n const zoomStops = [];\n for (let s = 0; s < stops.length; s++) {\n const stop = stops[s];\n const zoom = stop[0].zoom;\n if (featureFunctionParameters[zoom] === undefined) {\n featureFunctionParameters[zoom] = {\n zoom,\n type: parameters.type,\n property: parameters.property,\n default: parameters.default\n };\n featureFunctionStops[zoom] = [];\n zoomStops.push(zoom);\n }\n featureFunctionStops[zoom].push([\n stop[0].value,\n stop[1]\n ]);\n }\n // the interpolation type for the zoom dimension of a zoom-and-property\n // function is determined directly from the style property specification\n // for which it's being used: linear for interpolatable properties, step\n // otherwise.\n const functionType = getFunctionType({}, propertySpec);\n if (functionType === 'exponential') {\n const expression = [\n getInterpolateOperator(parameters),\n ['linear'],\n ['zoom']\n ];\n for (const z of zoomStops) {\n const output = convertPropertyFunction(featureFunctionParameters[z], propertySpec, featureFunctionStops[z]);\n appendStopPair(expression, z, output, false);\n }\n return expression;\n } else {\n const expression = [\n 'step',\n ['zoom']\n ];\n for (const z of zoomStops) {\n const output = convertPropertyFunction(featureFunctionParameters[z], propertySpec, featureFunctionStops[z]);\n appendStopPair(expression, z, output, true);\n }\n fixupDegenerateStepCurve(expression);\n return expression;\n }\n}\nfunction coalesce(a, b) {\n if (a !== undefined)\n return a;\n if (b !== undefined)\n return b;\n}\nfunction getFallback(parameters, propertySpec) {\n const defaultValue = convertLiteral(coalesce(parameters.default, propertySpec.default));\n /*\n * Some fields with type: resolvedImage have an undefined default.\n * Because undefined is an invalid value for resolvedImage, set fallback to\n * an empty string instead of undefined to ensure output\n * passes validation.\n */\n if (defaultValue === undefined && propertySpec.type === 'resolvedImage') {\n return '';\n }\n return defaultValue;\n}\nfunction convertPropertyFunction(parameters, propertySpec, stops) {\n const type = getFunctionType(parameters, propertySpec);\n const get = [\n 'get',\n parameters.property\n ];\n if (type === 'categorical' && typeof stops[0][0] === 'boolean') {\n const expression = ['case'];\n for (const stop of stops) {\n expression.push([\n '==',\n get,\n stop[0]\n ], stop[1]);\n }\n expression.push(getFallback(parameters, propertySpec));\n return expression;\n } else if (type === 'categorical') {\n const expression = [\n 'match',\n get\n ];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], false);\n }\n expression.push(getFallback(parameters, propertySpec));\n return expression;\n } else if (type === 'interval') {\n const expression = [\n 'step',\n [\n 'number',\n get\n ]\n ];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], true);\n }\n fixupDegenerateStepCurve(expression);\n return parameters.default === undefined ? expression : [\n 'case',\n [\n '==',\n [\n 'typeof',\n get\n ],\n 'number'\n ],\n expression,\n convertLiteral(parameters.default)\n ];\n } else if (type === 'exponential') {\n const base = parameters.base !== undefined ? parameters.base : 1;\n const expression = [\n getInterpolateOperator(parameters),\n base === 1 ? ['linear'] : [\n 'exponential',\n base\n ],\n [\n 'number',\n get\n ]\n ];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], false);\n }\n return parameters.default === undefined ? expression : [\n 'case',\n [\n '==',\n [\n 'typeof',\n get\n ],\n 'number'\n ],\n expression,\n convertLiteral(parameters.default)\n ];\n } else {\n throw new Error(`Unknown property function type ${ type }`);\n }\n}\nfunction convertZoomFunction(parameters, propertySpec, stops, input = ['zoom']) {\n const type = getFunctionType(parameters, propertySpec);\n let expression;\n let isStep = false;\n if (type === 'interval') {\n expression = [\n 'step',\n input\n ];\n isStep = true;\n } else if (type === 'exponential') {\n const base = parameters.base !== undefined ? parameters.base : 1;\n expression = [\n getInterpolateOperator(parameters),\n base === 1 ? ['linear'] : [\n 'exponential',\n base\n ],\n input\n ];\n } else {\n throw new Error(`Unknown zoom function type \"${ type }\"`);\n }\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], isStep);\n }\n fixupDegenerateStepCurve(expression);\n return expression;\n}\nfunction fixupDegenerateStepCurve(expression) {\n // degenerate step curve (i.e. a constant function): add a noop stop\n if (expression[0] === 'step' && expression.length === 3) {\n expression.push(0);\n expression.push(expression[3]);\n }\n}\nfunction appendStopPair(curve, input, output, isStep) {\n // Skip duplicate stop values. They were not validated for functions, but they are for expressions.\n // https://github.com/mapbox/mapbox-gl-js/issues/4107\n if (curve.length > 3 && input === curve[curve.length - 2]) {\n return;\n }\n // step curves don't get the first input value, as it is redundant.\n if (!(isStep && curve.length === 2)) {\n curve.push(input);\n }\n curve.push(output);\n}\nfunction getFunctionType(parameters, propertySpec) {\n if (parameters.type) {\n return parameters.type;\n } else {\n return propertySpec.expression.interpolated ? 'exponential' : 'interval';\n }\n}\n// \"String with {name} token\" => [\"concat\", \"String with \", [\"get\", \"name\"], \" token\"]\nfunction convertTokenString(s) {\n const result = ['concat'];\n const re = /{([^{}]+)}/g;\n let pos = 0;\n for (let match = re.exec(s); match !== null; match = re.exec(s)) {\n const literal = s.slice(pos, re.lastIndex - match[0].length);\n pos = re.lastIndex;\n if (literal.length > 0)\n result.push(literal);\n result.push([\n 'get',\n match[1]\n ]);\n }\n if (result.length === 1) {\n return s;\n }\n if (pos < s.length) {\n result.push(s.slice(pos));\n } else if (result.length === 2) {\n return [\n 'to-string',\n result[1]\n ];\n }\n return result;\n}\n\n// \nclass ParsingError extends Error {\n constructor(key, message) {\n super(message);\n this.message = message;\n this.key = key;\n }\n}\nvar ParsingError$1 = ParsingError;\n\n// \n/**\n * Tracks `let` bindings during expression parsing.\n * @private\n */\nclass Scope {\n constructor(parent, bindings = []) {\n this.parent = parent;\n this.bindings = {};\n for (const [name, expression] of bindings) {\n this.bindings[name] = expression;\n }\n }\n concat(bindings) {\n return new Scope(this, bindings);\n }\n get(name) {\n if (this.bindings[name]) {\n return this.bindings[name];\n }\n if (this.parent) {\n return this.parent.get(name);\n }\n throw new Error(`${ name } not found in scope.`);\n }\n has(name) {\n if (this.bindings[name])\n return true;\n return this.parent ? this.parent.has(name) : false;\n }\n}\nvar Scope$1 = Scope;\n\n// \nconst NullType = { kind: 'null' };\nconst NumberType = { kind: 'number' };\nconst StringType = { kind: 'string' };\nconst BooleanType = { kind: 'boolean' };\nconst ColorType = { kind: 'color' };\nconst ObjectType = { kind: 'object' };\nconst ValueType = { kind: 'value' };\nconst ErrorType = { kind: 'error' };\nconst CollatorType = { kind: 'collator' };\nconst FormattedType = { kind: 'formatted' };\nconst ResolvedImageType = { kind: 'resolvedImage' };\nfunction array$1(itemType, N) {\n return {\n kind: 'array',\n itemType,\n N\n };\n}\nfunction toString$1(type) {\n if (type.kind === 'array') {\n const itemType = toString$1(type.itemType);\n return typeof type.N === 'number' ? `array<${ itemType }, ${ type.N }>` : type.itemType.kind === 'value' ? 'array' : `array<${ itemType }>`;\n } else {\n return type.kind;\n }\n}\nconst valueMemberTypes = [\n NullType,\n NumberType,\n StringType,\n BooleanType,\n ColorType,\n FormattedType,\n ObjectType,\n array$1(ValueType),\n ResolvedImageType\n];\n/**\n * Returns null if `t` is a subtype of `expected`; otherwise returns an\n * error message.\n * @private\n */\nfunction checkSubtype(expected, t) {\n if (t.kind === 'error') {\n // Error is a subtype of every type\n return null;\n } else if (expected.kind === 'array') {\n if (t.kind === 'array' && (t.N === 0 && t.itemType.kind === 'value' || !checkSubtype(expected.itemType, t.itemType)) && (typeof expected.N !== 'number' || expected.N === t.N)) {\n return null;\n }\n } else if (expected.kind === t.kind) {\n return null;\n } else if (expected.kind === 'value') {\n for (const memberType of valueMemberTypes) {\n if (!checkSubtype(memberType, t)) {\n return null;\n }\n }\n }\n return `Expected ${ toString$1(expected) } but found ${ toString$1(t) } instead.`;\n}\nfunction isValidType(provided, allowedTypes) {\n return allowedTypes.some(t => t.kind === provided.kind);\n}\nfunction isValidNativeType(provided, allowedTypes) {\n return allowedTypes.some(t => {\n if (t === 'null') {\n return provided === null;\n } else if (t === 'array') {\n return Array.isArray(provided);\n } else if (t === 'object') {\n return provided && !Array.isArray(provided) && typeof provided === 'object';\n } else {\n return t === typeof provided;\n }\n });\n}\n\n// \n// Flow type declarations for Intl cribbed from\n// https://github.com/facebook/flow/issues/1270\nclass Collator {\n constructor(caseSensitive, diacriticSensitive, locale) {\n if (caseSensitive)\n this.sensitivity = diacriticSensitive ? 'variant' : 'case';\n else\n this.sensitivity = diacriticSensitive ? 'accent' : 'base';\n this.locale = locale;\n this.collator = new Intl.Collator(this.locale ? this.locale : [], {\n sensitivity: this.sensitivity,\n usage: 'search'\n });\n }\n compare(lhs, rhs) {\n return this.collator.compare(lhs, rhs);\n }\n resolvedLocale() {\n // We create a Collator without \"usage: search\" because we don't want\n // the search options encoded in our result (e.g. \"en-u-co-search\")\n return new Intl.Collator(this.locale ? this.locale : []).resolvedOptions().locale;\n }\n}\n\n// \nclass FormattedSection {\n constructor(text, image, scale, fontStack, textColor) {\n // combine characters so that diacritic marks are not separate code points\n this.text = text.normalize ? text.normalize() : text;\n this.image = image;\n this.scale = scale;\n this.fontStack = fontStack;\n this.textColor = textColor;\n }\n}\nclass Formatted {\n constructor(sections) {\n this.sections = sections;\n }\n static fromString(unformatted) {\n return new Formatted([new FormattedSection(unformatted, null, null, null, null)]);\n }\n isEmpty() {\n if (this.sections.length === 0)\n return true;\n return !this.sections.some(section => section.text.length !== 0 || section.image && section.image.name.length !== 0);\n }\n static factory(text) {\n if (text instanceof Formatted) {\n return text;\n } else {\n return Formatted.fromString(text);\n }\n }\n toString() {\n if (this.sections.length === 0)\n return '';\n return this.sections.map(section => section.text).join('');\n }\n serialize() {\n const serialized = ['format'];\n for (const section of this.sections) {\n if (section.image) {\n serialized.push([\n 'image',\n section.image.name\n ]);\n continue;\n }\n serialized.push(section.text);\n const options = {};\n if (section.fontStack) {\n options['text-font'] = [\n 'literal',\n section.fontStack.split(',')\n ];\n }\n if (section.scale) {\n options['font-scale'] = section.scale;\n }\n if (section.textColor) {\n options['text-color'] = ['rgba'].concat(section.textColor.toArray());\n }\n serialized.push(options);\n }\n return serialized;\n }\n}\n\n// \nclass ResolvedImage {\n constructor(options) {\n this.name = options.name;\n this.available = options.available;\n }\n toString() {\n return this.name;\n }\n static fromString(name) {\n if (!name)\n return null;\n // treat empty values as no image\n return new ResolvedImage({\n name,\n available: false\n });\n }\n serialize() {\n return [\n 'image',\n this.name\n ];\n }\n}\n\nfunction validateRGBA(r, g, b, a) {\n if (!(typeof r === 'number' && r >= 0 && r <= 255 && typeof g === 'number' && g >= 0 && g <= 255 && typeof b === 'number' && b >= 0 && b <= 255)) {\n const value = typeof a === 'number' ? [\n r,\n g,\n b,\n a\n ] : [\n r,\n g,\n b\n ];\n return `Invalid rgba value [${ value.join(', ') }]: 'r', 'g', and 'b' must be between 0 and 255.`;\n }\n if (!(typeof a === 'undefined' || typeof a === 'number' && a >= 0 && a <= 1)) {\n return `Invalid rgba value [${ [\n r,\n g,\n b,\n a\n ].join(', ') }]: 'a' must be between 0 and 1.`;\n }\n return null;\n}\nfunction isValue(mixed) {\n if (mixed === null) {\n return true;\n } else if (typeof mixed === 'string') {\n return true;\n } else if (typeof mixed === 'boolean') {\n return true;\n } else if (typeof mixed === 'number') {\n return true;\n } else if (mixed instanceof Color$1) {\n return true;\n } else if (mixed instanceof Collator) {\n return true;\n } else if (mixed instanceof Formatted) {\n return true;\n } else if (mixed instanceof ResolvedImage) {\n return true;\n } else if (Array.isArray(mixed)) {\n for (const item of mixed) {\n if (!isValue(item)) {\n return false;\n }\n }\n return true;\n } else if (typeof mixed === 'object') {\n for (const key in mixed) {\n if (!isValue(mixed[key])) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n}\nfunction typeOf(value) {\n if (value === null) {\n return NullType;\n } else if (typeof value === 'string') {\n return StringType;\n } else if (typeof value === 'boolean') {\n return BooleanType;\n } else if (typeof value === 'number') {\n return NumberType;\n } else if (value instanceof Color$1) {\n return ColorType;\n } else if (value instanceof Collator) {\n return CollatorType;\n } else if (value instanceof Formatted) {\n return FormattedType;\n } else if (value instanceof ResolvedImage) {\n return ResolvedImageType;\n } else if (Array.isArray(value)) {\n const length = value.length;\n let itemType;\n for (const item of value) {\n const t = typeOf(item);\n if (!itemType) {\n itemType = t;\n } else if (itemType === t) {\n continue;\n } else {\n itemType = ValueType;\n break;\n }\n }\n return array$1(itemType || ValueType, length);\n } else {\n return ObjectType;\n }\n}\nfunction toString(value) {\n const type = typeof value;\n if (value === null) {\n return '';\n } else if (type === 'string' || type === 'number' || type === 'boolean') {\n return String(value);\n } else if (value instanceof Color$1 || value instanceof Formatted || value instanceof ResolvedImage) {\n return value.toString();\n } else {\n return JSON.stringify(value);\n }\n}\n\nclass Literal {\n constructor(type, value) {\n this.type = type;\n this.value = value;\n }\n static parse(args, context) {\n if (args.length !== 2)\n return context.error(`'literal' expression requires exactly one argument, but found ${ args.length - 1 } instead.`);\n if (!isValue(args[1]))\n return context.error(`invalid value`);\n const value = args[1];\n let type = typeOf(value);\n // special case: infer the item type if possible for zero-length arrays\n const expected = context.expectedType;\n if (type.kind === 'array' && type.N === 0 && expected && expected.kind === 'array' && (typeof expected.N !== 'number' || expected.N === 0)) {\n type = expected;\n }\n return new Literal(type, value);\n }\n evaluate() {\n return this.value;\n }\n eachChild() {\n }\n outputDefined() {\n return true;\n }\n serialize() {\n if (this.type.kind === 'array' || this.type.kind === 'object') {\n return [\n 'literal',\n this.value\n ];\n } else if (this.value instanceof Color$1) {\n // Constant-folding can generate Literal expressions that you\n // couldn't actually generate with a \"literal\" expression,\n // so we have to implement an equivalent serialization here\n return ['rgba'].concat(this.value.toArray());\n } else if (this.value instanceof Formatted) {\n // Same as Color\n return this.value.serialize();\n } else {\n return this.value;\n }\n }\n}\nvar Literal$1 = Literal;\n\n// \nclass RuntimeError {\n constructor(message) {\n this.name = 'ExpressionEvaluationError';\n this.message = message;\n }\n toJSON() {\n return this.message;\n }\n}\nvar RuntimeError$1 = RuntimeError;\n\nconst types$2 = {\n string: StringType,\n number: NumberType,\n boolean: BooleanType,\n object: ObjectType\n};\nclass Assertion {\n constructor(type, args) {\n this.type = type;\n this.args = args;\n }\n static parse(args, context) {\n if (args.length < 2)\n return context.error(`Expected at least one argument.`);\n let i = 1;\n let type;\n const name = args[0];\n if (name === 'array') {\n let itemType;\n if (args.length > 2) {\n const type = args[1];\n if (typeof type !== 'string' || !(type in types$2) || type === 'object')\n return context.error('The item type argument of \"array\" must be one of string, number, boolean', 1);\n itemType = types$2[type];\n i++;\n } else {\n itemType = ValueType;\n }\n let N;\n if (args.length > 3) {\n if (args[2] !== null && (typeof args[2] !== 'number' || args[2] < 0 || args[2] !== Math.floor(args[2]))) {\n return context.error('The length argument to \"array\" must be a positive integer literal', 2);\n }\n N = args[2];\n i++;\n }\n type = array$1(itemType, N);\n } else {\n type = types$2[name];\n }\n const parsed = [];\n for (; i < args.length; i++) {\n const input = context.parse(args[i], i, ValueType);\n if (!input)\n return null;\n parsed.push(input);\n }\n return new Assertion(type, parsed);\n }\n evaluate(ctx) {\n for (let i = 0; i < this.args.length; i++) {\n const value = this.args[i].evaluate(ctx);\n const error = checkSubtype(this.type, typeOf(value));\n if (!error) {\n return value;\n } else if (i === this.args.length - 1) {\n throw new RuntimeError$1(`Expected value to be of type ${ toString$1(this.type) }, but found ${ toString$1(typeOf(value)) } instead.`);\n }\n }\n return null;\n }\n eachChild(fn) {\n this.args.forEach(fn);\n }\n outputDefined() {\n return this.args.every(arg => arg.outputDefined());\n }\n serialize() {\n const type = this.type;\n const serialized = [type.kind];\n if (type.kind === 'array') {\n const itemType = type.itemType;\n if (itemType.kind === 'string' || itemType.kind === 'number' || itemType.kind === 'boolean') {\n serialized.push(itemType.kind);\n const N = type.N;\n if (typeof N === 'number' || this.args.length > 1) {\n serialized.push(N);\n }\n }\n }\n return serialized.concat(this.args.map(arg => arg.serialize()));\n }\n}\nvar Assertion$1 = Assertion;\n\n// \nclass FormatExpression {\n constructor(sections) {\n this.type = FormattedType;\n this.sections = sections;\n }\n static parse(args, context) {\n if (args.length < 2) {\n return context.error(`Expected at least one argument.`);\n }\n const firstArg = args[1];\n if (!Array.isArray(firstArg) && typeof firstArg === 'object') {\n return context.error(`First argument must be an image or text section.`);\n }\n const sections = [];\n let nextTokenMayBeObject = false;\n for (let i = 1; i <= args.length - 1; ++i) {\n const arg = args[i];\n if (nextTokenMayBeObject && typeof arg === 'object' && !Array.isArray(arg)) {\n nextTokenMayBeObject = false;\n let scale = null;\n if (arg['font-scale']) {\n scale = context.parse(arg['font-scale'], 1, NumberType);\n if (!scale)\n return null;\n }\n let font = null;\n if (arg['text-font']) {\n font = context.parse(arg['text-font'], 1, array$1(StringType));\n if (!font)\n return null;\n }\n let textColor = null;\n if (arg['text-color']) {\n textColor = context.parse(arg['text-color'], 1, ColorType);\n if (!textColor)\n return null;\n }\n const lastExpression = sections[sections.length - 1];\n lastExpression.scale = scale;\n lastExpression.font = font;\n lastExpression.textColor = textColor;\n } else {\n const content = context.parse(args[i], 1, ValueType);\n if (!content)\n return null;\n const kind = content.type.kind;\n if (kind !== 'string' && kind !== 'value' && kind !== 'null' && kind !== 'resolvedImage')\n return context.error(`Formatted text type must be 'string', 'value', 'image' or 'null'.`);\n nextTokenMayBeObject = true;\n sections.push({\n content,\n scale: null,\n font: null,\n textColor: null\n });\n }\n }\n return new FormatExpression(sections);\n }\n evaluate(ctx) {\n const evaluateSection = section => {\n const evaluatedContent = section.content.evaluate(ctx);\n if (typeOf(evaluatedContent) === ResolvedImageType) {\n return new FormattedSection('', evaluatedContent, null, null, null);\n }\n return new FormattedSection(toString(evaluatedContent), null, section.scale ? section.scale.evaluate(ctx) : null, section.font ? section.font.evaluate(ctx).join(',') : null, section.textColor ? section.textColor.evaluate(ctx) : null);\n };\n return new Formatted(this.sections.map(evaluateSection));\n }\n eachChild(fn) {\n for (const section of this.sections) {\n fn(section.content);\n if (section.scale) {\n fn(section.scale);\n }\n if (section.font) {\n fn(section.font);\n }\n if (section.textColor) {\n fn(section.textColor);\n }\n }\n }\n outputDefined() {\n // Technically the combinatoric set of all children\n // Usually, this.text will be undefined anyway\n return false;\n }\n serialize() {\n const serialized = ['format'];\n for (const section of this.sections) {\n serialized.push(section.content.serialize());\n const options = {};\n if (section.scale) {\n options['font-scale'] = section.scale.serialize();\n }\n if (section.font) {\n options['text-font'] = section.font.serialize();\n }\n if (section.textColor) {\n options['text-color'] = section.textColor.serialize();\n }\n serialized.push(options);\n }\n return serialized;\n }\n}\n\n// \nclass ImageExpression {\n constructor(input) {\n this.type = ResolvedImageType;\n this.input = input;\n }\n static parse(args, context) {\n if (args.length !== 2) {\n return context.error(`Expected two arguments.`);\n }\n const name = context.parse(args[1], 1, StringType);\n if (!name)\n return context.error(`No image name provided.`);\n return new ImageExpression(name);\n }\n evaluate(ctx) {\n const evaluatedImageName = this.input.evaluate(ctx);\n const value = ResolvedImage.fromString(evaluatedImageName);\n if (value && ctx.availableImages)\n value.available = ctx.availableImages.indexOf(evaluatedImageName) > -1;\n return value;\n }\n eachChild(fn) {\n fn(this.input);\n }\n outputDefined() {\n // The output of image is determined by the list of available images in the evaluation context\n return false;\n }\n serialize() {\n return [\n 'image',\n this.input.serialize()\n ];\n }\n}\n\nconst types$1 = {\n 'to-boolean': BooleanType,\n 'to-color': ColorType,\n 'to-number': NumberType,\n 'to-string': StringType\n};\n/**\n * Special form for error-coalescing coercion expressions \"to-number\",\n * \"to-color\". Since these coercions can fail at runtime, they accept multiple\n * arguments, only evaluating one at a time until one succeeds.\n *\n * @private\n */\nclass Coercion {\n constructor(type, args) {\n this.type = type;\n this.args = args;\n }\n static parse(args, context) {\n if (args.length < 2)\n return context.error(`Expected at least one argument.`);\n const name = args[0];\n if ((name === 'to-boolean' || name === 'to-string') && args.length !== 2)\n return context.error(`Expected one argument.`);\n const type = types$1[name];\n const parsed = [];\n for (let i = 1; i < args.length; i++) {\n const input = context.parse(args[i], i, ValueType);\n if (!input)\n return null;\n parsed.push(input);\n }\n return new Coercion(type, parsed);\n }\n evaluate(ctx) {\n if (this.type.kind === 'boolean') {\n return Boolean(this.args[0].evaluate(ctx));\n } else if (this.type.kind === 'color') {\n let input;\n let error;\n for (const arg of this.args) {\n input = arg.evaluate(ctx);\n error = null;\n if (input instanceof Color$1) {\n return input;\n } else if (typeof input === 'string') {\n const c = ctx.parseColor(input);\n if (c)\n return c;\n } else if (Array.isArray(input)) {\n if (input.length < 3 || input.length > 4) {\n error = `Invalid rbga value ${ JSON.stringify(input) }: expected an array containing either three or four numeric values.`;\n } else {\n error = validateRGBA(input[0], input[1], input[2], input[3]);\n }\n if (!error) {\n return new Color$1(input[0] / 255, input[1] / 255, input[2] / 255, input[3]);\n }\n }\n }\n throw new RuntimeError$1(error || `Could not parse color from value '${ typeof input === 'string' ? input : String(JSON.stringify(input)) }'`);\n } else if (this.type.kind === 'number') {\n let value = null;\n for (const arg of this.args) {\n value = arg.evaluate(ctx);\n if (value === null)\n return 0;\n const num = Number(value);\n if (isNaN(num))\n continue;\n return num;\n }\n throw new RuntimeError$1(`Could not convert ${ JSON.stringify(value) } to number.`);\n } else if (this.type.kind === 'formatted') {\n // There is no explicit 'to-formatted' but this coercion can be implicitly\n // created by properties that expect the 'formatted' type.\n return Formatted.fromString(toString(this.args[0].evaluate(ctx)));\n } else if (this.type.kind === 'resolvedImage') {\n return ResolvedImage.fromString(toString(this.args[0].evaluate(ctx)));\n } else {\n return toString(this.args[0].evaluate(ctx));\n }\n }\n eachChild(fn) {\n this.args.forEach(fn);\n }\n outputDefined() {\n return this.args.every(arg => arg.outputDefined());\n }\n serialize() {\n if (this.type.kind === 'formatted') {\n return new FormatExpression([{\n content: this.args[0],\n scale: null,\n font: null,\n textColor: null\n }]).serialize();\n }\n if (this.type.kind === 'resolvedImage') {\n return new ImageExpression(this.args[0]).serialize();\n }\n const serialized = [`to-${ this.type.kind }`];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n}\nvar Coercion$1 = Coercion;\n\n// \nconst geometryTypes = [\n 'Unknown',\n 'Point',\n 'LineString',\n 'Polygon'\n];\nclass EvaluationContext {\n constructor() {\n this.globals = null;\n this.feature = null;\n this.featureState = null;\n this.formattedSection = null;\n this._parseColorCache = {};\n this.availableImages = null;\n this.canonical = null;\n this.featureTileCoord = null;\n this.featureDistanceData = null;\n }\n id() {\n return this.feature && this.feature.id !== undefined ? this.feature.id : null;\n }\n geometryType() {\n return this.feature ? typeof this.feature.type === 'number' ? geometryTypes[this.feature.type] : this.feature.type : null;\n }\n geometry() {\n return this.feature && 'geometry' in this.feature ? this.feature.geometry : null;\n }\n canonicalID() {\n return this.canonical;\n }\n properties() {\n return this.feature && this.feature.properties || {};\n }\n distanceFromCenter() {\n if (this.featureTileCoord && this.featureDistanceData) {\n const c = this.featureDistanceData.center;\n const scale = this.featureDistanceData.scale;\n const {x, y} = this.featureTileCoord;\n // Calculate the distance vector `d` (left handed)\n const dX = x * scale - c[0];\n const dY = y * scale - c[1];\n // The bearing vector `b` (left handed)\n const bX = this.featureDistanceData.bearing[0];\n const bY = this.featureDistanceData.bearing[1];\n // Distance is calculated as `dot(d, v)`\n const dist = bX * dX + bY * dY;\n return dist;\n }\n return 0;\n }\n parseColor(input) {\n let cached = this._parseColorCache[input];\n if (!cached) {\n cached = this._parseColorCache[input] = Color$1.parse(input);\n }\n return cached;\n }\n}\nvar EvaluationContext$1 = EvaluationContext;\n\n// \nclass CompoundExpression {\n constructor(name, type, evaluate, args) {\n this.name = name;\n this.type = type;\n this._evaluate = evaluate;\n this.args = args;\n }\n evaluate(ctx) {\n return this._evaluate(ctx, this.args);\n }\n eachChild(fn) {\n this.args.forEach(fn);\n }\n outputDefined() {\n return false;\n }\n serialize() {\n return [this.name].concat(this.args.map(arg => arg.serialize()));\n }\n static parse(args, context) {\n const op = args[0];\n const definition = CompoundExpression.definitions[op];\n if (!definition) {\n return context.error(`Unknown expression \"${ op }\". If you wanted a literal array, use [\"literal\", [...]].`, 0);\n }\n // Now check argument types against each signature\n const type = Array.isArray(definition) ? definition[0] : definition.type;\n const availableOverloads = Array.isArray(definition) ? [[\n definition[1],\n definition[2]\n ]] : definition.overloads;\n const overloads = availableOverloads.filter(([signature]) => !Array.isArray(signature) || // varags\n signature.length === args.length - 1 // correct param count\n);\n let signatureContext = null;\n for (const [params, evaluate] of overloads) {\n // Use a fresh context for each attempted signature so that, if\n // we eventually succeed, we haven't polluted `context.errors`.\n signatureContext = new ParsingContext$1(context.registry, context.path, null, context.scope);\n // First parse all the args, potentially coercing to the\n // types expected by this overload.\n const parsedArgs = [];\n let argParseFailed = false;\n for (let i = 1; i < args.length; i++) {\n const arg = args[i];\n const expectedType = Array.isArray(params) ? params[i - 1] : params.type;\n const parsed = signatureContext.parse(arg, 1 + parsedArgs.length, expectedType);\n if (!parsed) {\n argParseFailed = true;\n break;\n }\n parsedArgs.push(parsed);\n }\n if (argParseFailed) {\n // Couldn't coerce args of this overload to expected type, move\n // on to next one.\n continue;\n }\n if (Array.isArray(params)) {\n if (params.length !== parsedArgs.length) {\n signatureContext.error(`Expected ${ params.length } arguments, but found ${ parsedArgs.length } instead.`);\n continue;\n }\n }\n for (let i = 0; i < parsedArgs.length; i++) {\n const expected = Array.isArray(params) ? params[i] : params.type;\n const arg = parsedArgs[i];\n signatureContext.concat(i + 1).checkSubtype(expected, arg.type);\n }\n if (signatureContext.errors.length === 0) {\n return new CompoundExpression(op, type, evaluate, parsedArgs);\n }\n }\n if (overloads.length === 1) {\n context.errors.push(...signatureContext.errors);\n } else {\n const expected = overloads.length ? overloads : availableOverloads;\n const signatures = expected.map(([params]) => stringifySignature(params)).join(' | ');\n const actualTypes = [];\n // For error message, re-parse arguments without trying to\n // apply any coercions\n for (let i = 1; i < args.length; i++) {\n const parsed = context.parse(args[i], 1 + actualTypes.length);\n if (!parsed)\n return null;\n actualTypes.push(toString$1(parsed.type));\n }\n context.error(`Expected arguments of type ${ signatures }, but found (${ actualTypes.join(', ') }) instead.`);\n }\n return null;\n }\n static register(registry, definitions) {\n CompoundExpression.definitions = definitions;\n for (const name in definitions) {\n registry[name] = CompoundExpression;\n }\n }\n}\nfunction stringifySignature(signature) {\n if (Array.isArray(signature)) {\n return `(${ signature.map(toString$1).join(', ') })`;\n } else {\n return `(${ toString$1(signature.type) }...)`;\n }\n}\nvar CompoundExpression$1 = CompoundExpression;\n\n// \nclass CollatorExpression {\n constructor(caseSensitive, diacriticSensitive, locale) {\n this.type = CollatorType;\n this.locale = locale;\n this.caseSensitive = caseSensitive;\n this.diacriticSensitive = diacriticSensitive;\n }\n static parse(args, context) {\n if (args.length !== 2)\n return context.error(`Expected one argument.`);\n const options = args[1];\n if (typeof options !== 'object' || Array.isArray(options))\n return context.error(`Collator options argument must be an object.`);\n const caseSensitive = context.parse(options['case-sensitive'] === undefined ? false : options['case-sensitive'], 1, BooleanType);\n if (!caseSensitive)\n return null;\n const diacriticSensitive = context.parse(options['diacritic-sensitive'] === undefined ? false : options['diacritic-sensitive'], 1, BooleanType);\n if (!diacriticSensitive)\n return null;\n let locale = null;\n if (options['locale']) {\n locale = context.parse(options['locale'], 1, StringType);\n if (!locale)\n return null;\n }\n return new CollatorExpression(caseSensitive, diacriticSensitive, locale);\n }\n evaluate(ctx) {\n return new Collator(this.caseSensitive.evaluate(ctx), this.diacriticSensitive.evaluate(ctx), this.locale ? this.locale.evaluate(ctx) : null);\n }\n eachChild(fn) {\n fn(this.caseSensitive);\n fn(this.diacriticSensitive);\n if (this.locale) {\n fn(this.locale);\n }\n }\n outputDefined() {\n // Technically the set of possible outputs is the combinatoric set of Collators produced\n // by all possible outputs of locale/caseSensitive/diacriticSensitive\n // But for the primary use of Collators in comparison operators, we ignore the Collator's\n // possible outputs anyway, so we can get away with leaving this false for now.\n return false;\n }\n serialize() {\n const options = {};\n options['case-sensitive'] = this.caseSensitive.serialize();\n options['diacritic-sensitive'] = this.diacriticSensitive.serialize();\n if (this.locale) {\n options['locale'] = this.locale.serialize();\n }\n return [\n 'collator',\n options\n ];\n }\n}\n\n// \n// minX, minY, maxX, maxY\nconst EXTENT = 8192;\nfunction updateBBox(bbox, coord) {\n bbox[0] = Math.min(bbox[0], coord[0]);\n bbox[1] = Math.min(bbox[1], coord[1]);\n bbox[2] = Math.max(bbox[2], coord[0]);\n bbox[3] = Math.max(bbox[3], coord[1]);\n}\nfunction mercatorXfromLng(lng) {\n return (180 + lng) / 360;\n}\nfunction mercatorYfromLat(lat) {\n return (180 - 180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + lat * Math.PI / 360))) / 360;\n}\nfunction boxWithinBox(bbox1, bbox2) {\n if (bbox1[0] <= bbox2[0])\n return false;\n if (bbox1[2] >= bbox2[2])\n return false;\n if (bbox1[1] <= bbox2[1])\n return false;\n if (bbox1[3] >= bbox2[3])\n return false;\n return true;\n}\nfunction getTileCoordinates(p, canonical) {\n const x = mercatorXfromLng(p[0]);\n const y = mercatorYfromLat(p[1]);\n const tilesAtZoom = Math.pow(2, canonical.z);\n return [\n Math.round(x * tilesAtZoom * EXTENT),\n Math.round(y * tilesAtZoom * EXTENT)\n ];\n}\nfunction onBoundary(p, p1, p2) {\n const x1 = p[0] - p1[0];\n const y1 = p[1] - p1[1];\n const x2 = p[0] - p2[0];\n const y2 = p[1] - p2[1];\n return x1 * y2 - x2 * y1 === 0 && x1 * x2 <= 0 && y1 * y2 <= 0;\n}\nfunction rayIntersect(p, p1, p2) {\n return p1[1] > p[1] !== p2[1] > p[1] && p[0] < (p2[0] - p1[0]) * (p[1] - p1[1]) / (p2[1] - p1[1]) + p1[0];\n}\n// ray casting algorithm for detecting if point is in polygon\nfunction pointWithinPolygon(point, rings) {\n let inside = false;\n for (let i = 0, len = rings.length; i < len; i++) {\n const ring = rings[i];\n for (let j = 0, len2 = ring.length; j < len2 - 1; j++) {\n if (onBoundary(point, ring[j], ring[j + 1]))\n return false;\n if (rayIntersect(point, ring[j], ring[j + 1]))\n inside = !inside;\n }\n }\n return inside;\n}\nfunction pointWithinPolygons(point, polygons) {\n for (let i = 0; i < polygons.length; i++) {\n if (pointWithinPolygon(point, polygons[i]))\n return true;\n }\n return false;\n}\nfunction perp(v1, v2) {\n return v1[0] * v2[1] - v1[1] * v2[0];\n}\n// check if p1 and p2 are in different sides of line segment q1->q2\nfunction twoSided(p1, p2, q1, q2) {\n // q1->p1 (x1, y1), q1->p2 (x2, y2), q1->q2 (x3, y3)\n const x1 = p1[0] - q1[0];\n const y1 = p1[1] - q1[1];\n const x2 = p2[0] - q1[0];\n const y2 = p2[1] - q1[1];\n const x3 = q2[0] - q1[0];\n const y3 = q2[1] - q1[1];\n const det1 = x1 * y3 - x3 * y1;\n const det2 = x2 * y3 - x3 * y2;\n if (det1 > 0 && det2 < 0 || det1 < 0 && det2 > 0)\n return true;\n return false;\n}\n// a, b are end points for line segment1, c and d are end points for line segment2\nfunction lineIntersectLine(a, b, c, d) {\n // check if two segments are parallel or not\n // precondition is end point a, b is inside polygon, if line a->b is\n // parallel to polygon edge c->d, then a->b won't intersect with c->d\n const vectorP = [\n b[0] - a[0],\n b[1] - a[1]\n ];\n const vectorQ = [\n d[0] - c[0],\n d[1] - c[1]\n ];\n if (perp(vectorQ, vectorP) === 0)\n return false;\n // If lines are intersecting with each other, the relative location should be:\n // a and b lie in different sides of segment c->d\n // c and d lie in different sides of segment a->b\n if (twoSided(a, b, c, d) && twoSided(c, d, a, b))\n return true;\n return false;\n}\nfunction lineIntersectPolygon(p1, p2, polygon) {\n for (const ring of polygon) {\n // loop through every edge of the ring\n for (let j = 0; j < ring.length - 1; ++j) {\n if (lineIntersectLine(p1, p2, ring[j], ring[j + 1])) {\n return true;\n }\n }\n }\n return false;\n}\nfunction lineStringWithinPolygon(line, polygon) {\n // First, check if geometry points of line segments are all inside polygon\n for (let i = 0; i < line.length; ++i) {\n if (!pointWithinPolygon(line[i], polygon)) {\n return false;\n }\n }\n // Second, check if there is line segment intersecting polygon edge\n for (let i = 0; i < line.length - 1; ++i) {\n if (lineIntersectPolygon(line[i], line[i + 1], polygon)) {\n return false;\n }\n }\n return true;\n}\nfunction lineStringWithinPolygons(line, polygons) {\n for (let i = 0; i < polygons.length; i++) {\n if (lineStringWithinPolygon(line, polygons[i]))\n return true;\n }\n return false;\n}\nfunction getTilePolygon(coordinates, bbox, canonical) {\n const polygon = [];\n for (let i = 0; i < coordinates.length; i++) {\n const ring = [];\n for (let j = 0; j < coordinates[i].length; j++) {\n const coord = getTileCoordinates(coordinates[i][j], canonical);\n updateBBox(bbox, coord);\n ring.push(coord);\n }\n polygon.push(ring);\n }\n return polygon;\n}\nfunction getTilePolygons(coordinates, bbox, canonical) {\n const polygons = [];\n for (let i = 0; i < coordinates.length; i++) {\n const polygon = getTilePolygon(coordinates[i], bbox, canonical);\n polygons.push(polygon);\n }\n return polygons;\n}\nfunction updatePoint(p, bbox, polyBBox, worldSize) {\n if (p[0] < polyBBox[0] || p[0] > polyBBox[2]) {\n const halfWorldSize = worldSize * 0.5;\n let shift = p[0] - polyBBox[0] > halfWorldSize ? -worldSize : polyBBox[0] - p[0] > halfWorldSize ? worldSize : 0;\n if (shift === 0) {\n shift = p[0] - polyBBox[2] > halfWorldSize ? -worldSize : polyBBox[2] - p[0] > halfWorldSize ? worldSize : 0;\n }\n p[0] += shift;\n }\n updateBBox(bbox, p);\n}\nfunction resetBBox(bbox) {\n bbox[0] = bbox[1] = Infinity;\n bbox[2] = bbox[3] = -Infinity;\n}\nfunction getTilePoints(geometry, pointBBox, polyBBox, canonical) {\n const worldSize = Math.pow(2, canonical.z) * EXTENT;\n const shifts = [\n canonical.x * EXTENT,\n canonical.y * EXTENT\n ];\n const tilePoints = [];\n if (!geometry)\n return tilePoints;\n for (const points of geometry) {\n for (const point of points) {\n const p = [\n point.x + shifts[0],\n point.y + shifts[1]\n ];\n updatePoint(p, pointBBox, polyBBox, worldSize);\n tilePoints.push(p);\n }\n }\n return tilePoints;\n}\nfunction getTileLines(geometry, lineBBox, polyBBox, canonical) {\n const worldSize = Math.pow(2, canonical.z) * EXTENT;\n const shifts = [\n canonical.x * EXTENT,\n canonical.y * EXTENT\n ];\n const tileLines = [];\n if (!geometry)\n return tileLines;\n for (const line of geometry) {\n const tileLine = [];\n for (const point of line) {\n const p = [\n point.x + shifts[0],\n point.y + shifts[1]\n ];\n updateBBox(lineBBox, p);\n tileLine.push(p);\n }\n tileLines.push(tileLine);\n }\n if (lineBBox[2] - lineBBox[0] <= worldSize / 2) {\n resetBBox(lineBBox);\n for (const line of tileLines) {\n for (const p of line) {\n updatePoint(p, lineBBox, polyBBox, worldSize);\n }\n }\n }\n return tileLines;\n}\nfunction pointsWithinPolygons(ctx, polygonGeometry) {\n const pointBBox = [\n Infinity,\n Infinity,\n -Infinity,\n -Infinity\n ];\n const polyBBox = [\n Infinity,\n Infinity,\n -Infinity,\n -Infinity\n ];\n const canonical = ctx.canonicalID();\n if (!canonical) {\n return false;\n }\n if (polygonGeometry.type === 'Polygon') {\n const tilePolygon = getTilePolygon(polygonGeometry.coordinates, polyBBox, canonical);\n const tilePoints = getTilePoints(ctx.geometry(), pointBBox, polyBBox, canonical);\n if (!boxWithinBox(pointBBox, polyBBox))\n return false;\n for (const point of tilePoints) {\n if (!pointWithinPolygon(point, tilePolygon))\n return false;\n }\n }\n if (polygonGeometry.type === 'MultiPolygon') {\n const tilePolygons = getTilePolygons(polygonGeometry.coordinates, polyBBox, canonical);\n const tilePoints = getTilePoints(ctx.geometry(), pointBBox, polyBBox, canonical);\n if (!boxWithinBox(pointBBox, polyBBox))\n return false;\n for (const point of tilePoints) {\n if (!pointWithinPolygons(point, tilePolygons))\n return false;\n }\n }\n return true;\n}\nfunction linesWithinPolygons(ctx, polygonGeometry) {\n const lineBBox = [\n Infinity,\n Infinity,\n -Infinity,\n -Infinity\n ];\n const polyBBox = [\n Infinity,\n Infinity,\n -Infinity,\n -Infinity\n ];\n const canonical = ctx.canonicalID();\n if (!canonical) {\n return false;\n }\n if (polygonGeometry.type === 'Polygon') {\n const tilePolygon = getTilePolygon(polygonGeometry.coordinates, polyBBox, canonical);\n const tileLines = getTileLines(ctx.geometry(), lineBBox, polyBBox, canonical);\n if (!boxWithinBox(lineBBox, polyBBox))\n return false;\n for (const line of tileLines) {\n if (!lineStringWithinPolygon(line, tilePolygon))\n return false;\n }\n }\n if (polygonGeometry.type === 'MultiPolygon') {\n const tilePolygons = getTilePolygons(polygonGeometry.coordinates, polyBBox, canonical);\n const tileLines = getTileLines(ctx.geometry(), lineBBox, polyBBox, canonical);\n if (!boxWithinBox(lineBBox, polyBBox))\n return false;\n for (const line of tileLines) {\n if (!lineStringWithinPolygons(line, tilePolygons))\n return false;\n }\n }\n return true;\n}\nclass Within {\n constructor(geojson, geometries) {\n this.type = BooleanType;\n this.geojson = geojson;\n this.geometries = geometries;\n }\n static parse(args, context) {\n if (args.length !== 2)\n return context.error(`'within' expression requires exactly one argument, but found ${ args.length - 1 } instead.`);\n if (isValue(args[1])) {\n const geojson = args[1];\n if (geojson.type === 'FeatureCollection') {\n for (let i = 0; i < geojson.features.length; ++i) {\n const type = geojson.features[i].geometry.type;\n if (type === 'Polygon' || type === 'MultiPolygon') {\n return new Within(geojson, geojson.features[i].geometry);\n }\n }\n } else if (geojson.type === 'Feature') {\n const type = geojson.geometry.type;\n if (type === 'Polygon' || type === 'MultiPolygon') {\n return new Within(geojson, geojson.geometry);\n }\n } else if (geojson.type === 'Polygon' || geojson.type === 'MultiPolygon') {\n return new Within(geojson, geojson);\n }\n }\n return context.error(`'within' expression requires valid geojson object that contains polygon geometry type.`);\n }\n evaluate(ctx) {\n if (ctx.geometry() != null && ctx.canonicalID() != null) {\n if (ctx.geometryType() === 'Point') {\n return pointsWithinPolygons(ctx, this.geometries);\n } else if (ctx.geometryType() === 'LineString') {\n return linesWithinPolygons(ctx, this.geometries);\n }\n }\n return false;\n }\n eachChild() {\n }\n outputDefined() {\n return true;\n }\n serialize() {\n return [\n 'within',\n this.geojson\n ];\n }\n}\nvar Within$1 = Within;\n\n// \nfunction isFeatureConstant(e) {\n if (e instanceof CompoundExpression$1) {\n if (e.name === 'get' && e.args.length === 1) {\n return false;\n } else if (e.name === 'feature-state') {\n return false;\n } else if (e.name === 'has' && e.args.length === 1) {\n return false;\n } else if (e.name === 'properties' || e.name === 'geometry-type' || e.name === 'id') {\n return false;\n } else if (/^filter-/.test(e.name)) {\n return false;\n }\n }\n if (e instanceof Within$1) {\n return false;\n }\n let result = true;\n e.eachChild(arg => {\n if (result && !isFeatureConstant(arg)) {\n result = false;\n }\n });\n return result;\n}\nfunction isStateConstant(e) {\n if (e instanceof CompoundExpression$1) {\n if (e.name === 'feature-state') {\n return false;\n }\n }\n let result = true;\n e.eachChild(arg => {\n if (result && !isStateConstant(arg)) {\n result = false;\n }\n });\n return result;\n}\nfunction isGlobalPropertyConstant(e, properties) {\n if (e instanceof CompoundExpression$1 && properties.indexOf(e.name) >= 0) {\n return false;\n }\n let result = true;\n e.eachChild(arg => {\n if (result && !isGlobalPropertyConstant(arg, properties)) {\n result = false;\n }\n });\n return result;\n}\n\n// \nclass Var {\n constructor(name, boundExpression) {\n this.type = boundExpression.type;\n this.name = name;\n this.boundExpression = boundExpression;\n }\n static parse(args, context) {\n if (args.length !== 2 || typeof args[1] !== 'string')\n return context.error(`'var' expression requires exactly one string literal argument.`);\n const name = args[1];\n if (!context.scope.has(name)) {\n return context.error(`Unknown variable \"${ name }\". Make sure \"${ name }\" has been bound in an enclosing \"let\" expression before using it.`, 1);\n }\n return new Var(name, context.scope.get(name));\n }\n evaluate(ctx) {\n return this.boundExpression.evaluate(ctx);\n }\n eachChild() {\n }\n outputDefined() {\n return false;\n }\n serialize() {\n return [\n 'var',\n this.name\n ];\n }\n}\nvar Var$1 = Var;\n\n// \n/**\n * State associated parsing at a given point in an expression tree.\n * @private\n */\nclass ParsingContext {\n // The expected type of this expression. Provided only to allow Expression\n // implementations to infer argument types: Expression#parse() need not\n // check that the output type of the parsed expression matches\n // `expectedType`.\n constructor(registry, path = [], expectedType, scope = new Scope$1(), errors = []) {\n this.registry = registry;\n this.path = path;\n this.key = path.map(part => `[${ part }]`).join('');\n this.scope = scope;\n this.errors = errors;\n this.expectedType = expectedType;\n }\n /**\n * @param expr the JSON expression to parse\n * @param index the optional argument index if this expression is an argument of a parent expression that's being parsed\n * @param options\n * @param options.omitTypeAnnotations set true to omit inferred type annotations. Caller beware: with this option set, the parsed expression's type will NOT satisfy `expectedType` if it would normally be wrapped in an inferred annotation.\n * @private\n */\n parse(expr, index, expectedType, bindings, options = {}) {\n if (index) {\n return this.concat(index, expectedType, bindings)._parse(expr, options);\n }\n return this._parse(expr, options);\n }\n _parse(expr, options) {\n if (expr === null || typeof expr === 'string' || typeof expr === 'boolean' || typeof expr === 'number') {\n expr = [\n 'literal',\n expr\n ];\n }\n function annotate(parsed, type, typeAnnotation) {\n if (typeAnnotation === 'assert') {\n return new Assertion$1(type, [parsed]);\n } else if (typeAnnotation === 'coerce') {\n return new Coercion$1(type, [parsed]);\n } else {\n return parsed;\n }\n }\n if (Array.isArray(expr)) {\n if (expr.length === 0) {\n return this.error(`Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []].`);\n }\n const op = expr[0];\n if (typeof op !== 'string') {\n this.error(`Expression name must be a string, but found ${ typeof op } instead. If you wanted a literal array, use [\"literal\", [...]].`, 0);\n return null;\n }\n const Expr = this.registry[op];\n if (Expr) {\n let parsed = Expr.parse(expr, this);\n if (!parsed)\n return null;\n if (this.expectedType) {\n const expected = this.expectedType;\n const actual = parsed.type;\n // When we expect a number, string, boolean, or array but have a value, wrap it in an assertion.\n // When we expect a color or formatted string, but have a string or value, wrap it in a coercion.\n // Otherwise, we do static type-checking.\n //\n // These behaviors are overridable for:\n // * The \"coalesce\" operator, which needs to omit type annotations.\n // * String-valued properties (e.g. `text-field`), where coercion is more convenient than assertion.\n //\n if ((expected.kind === 'string' || expected.kind === 'number' || expected.kind === 'boolean' || expected.kind === 'object' || expected.kind === 'array') && actual.kind === 'value') {\n parsed = annotate(parsed, expected, options.typeAnnotation || 'assert');\n } else if ((expected.kind === 'color' || expected.kind === 'formatted' || expected.kind === 'resolvedImage') && (actual.kind === 'value' || actual.kind === 'string')) {\n parsed = annotate(parsed, expected, options.typeAnnotation || 'coerce');\n } else if (this.checkSubtype(expected, actual)) {\n return null;\n }\n }\n // If an expression's arguments are all literals, we can evaluate\n // it immediately and replace it with a literal value in the\n // parsed/compiled result. Expressions that expect an image should\n // not be resolved here so we can later get the available images.\n if (!(parsed instanceof Literal$1) && parsed.type.kind !== 'resolvedImage' && isConstant(parsed)) {\n const ec = new EvaluationContext$1();\n try {\n parsed = new Literal$1(parsed.type, parsed.evaluate(ec));\n } catch (e) {\n this.error(e.message);\n return null;\n }\n }\n return parsed;\n }\n return this.error(`Unknown expression \"${ op }\". If you wanted a literal array, use [\"literal\", [...]].`, 0);\n } else if (typeof expr === 'undefined') {\n return this.error(`'undefined' value invalid. Use null instead.`);\n } else if (typeof expr === 'object') {\n return this.error(`Bare objects invalid. Use [\"literal\", {...}] instead.`);\n } else {\n return this.error(`Expected an array, but found ${ typeof expr } instead.`);\n }\n }\n /**\n * Returns a copy of this context suitable for parsing the subexpression at\n * index `index`, optionally appending to 'let' binding map.\n *\n * Note that `errors` property, intended for collecting errors while\n * parsing, is copied by reference rather than cloned.\n * @private\n */\n concat(index, expectedType, bindings) {\n const path = typeof index === 'number' ? this.path.concat(index) : this.path;\n const scope = bindings ? this.scope.concat(bindings) : this.scope;\n return new ParsingContext(this.registry, path, expectedType || null, scope, this.errors);\n }\n /**\n * Push a parsing (or type checking) error into the `this.errors`\n * @param error The message\n * @param keys Optionally specify the source of the error at a child\n * of the current expression at `this.key`.\n * @private\n */\n error(error, ...keys) {\n const key = `${ this.key }${ keys.map(k => `[${ k }]`).join('') }`;\n this.errors.push(new ParsingError$1(key, error));\n }\n /**\n * Returns null if `t` is a subtype of `expected`; otherwise returns an\n * error message and also pushes it to `this.errors`.\n */\n checkSubtype(expected, t) {\n const error = checkSubtype(expected, t);\n if (error)\n this.error(error);\n return error;\n }\n}\nvar ParsingContext$1 = ParsingContext;\nfunction isConstant(expression) {\n if (expression instanceof Var$1) {\n return isConstant(expression.boundExpression);\n } else if (expression instanceof CompoundExpression$1 && expression.name === 'error') {\n return false;\n } else if (expression instanceof CollatorExpression) {\n // Although the results of a Collator expression with fixed arguments\n // generally shouldn't change between executions, we can't serialize them\n // as constant expressions because results change based on environment.\n return false;\n } else if (expression instanceof Within$1) {\n return false;\n }\n const isTypeAnnotation = expression instanceof Coercion$1 || expression instanceof Assertion$1;\n let childrenConstant = true;\n expression.eachChild(child => {\n // We can _almost_ assume that if `expressions` children are constant,\n // they would already have been evaluated to Literal values when they\n // were parsed. Type annotations are the exception, because they might\n // have been inferred and added after a child was parsed.\n // So we recurse into isConstant() for the children of type annotations,\n // but otherwise simply check whether they are Literals.\n if (isTypeAnnotation) {\n childrenConstant = childrenConstant && isConstant(child);\n } else {\n childrenConstant = childrenConstant && child instanceof Literal$1;\n }\n });\n if (!childrenConstant) {\n return false;\n }\n return isFeatureConstant(expression) && isGlobalPropertyConstant(expression, [\n 'zoom',\n 'heatmap-density',\n 'line-progress',\n 'sky-radial-progress',\n 'accumulated',\n 'is-supported-script',\n 'pitch',\n 'distance-from-center'\n ]);\n}\n\n// \n/**\n * Returns the index of the last stop <= input, or 0 if it doesn't exist.\n * @private\n */\nfunction findStopLessThanOrEqualTo(stops, input) {\n const lastIndex = stops.length - 1;\n let lowerIndex = 0;\n let upperIndex = lastIndex;\n let currentIndex = 0;\n let currentValue, nextValue;\n while (lowerIndex <= upperIndex) {\n currentIndex = Math.floor((lowerIndex + upperIndex) / 2);\n currentValue = stops[currentIndex];\n nextValue = stops[currentIndex + 1];\n if (currentValue <= input) {\n if (currentIndex === lastIndex || input < nextValue) {\n // Search complete\n return currentIndex;\n }\n lowerIndex = currentIndex + 1;\n } else if (currentValue > input) {\n upperIndex = currentIndex - 1;\n } else {\n throw new RuntimeError$1('Input is not a number.');\n }\n }\n return 0;\n}\n\n// \nclass Step {\n constructor(type, input, stops) {\n this.type = type;\n this.input = input;\n this.labels = [];\n this.outputs = [];\n for (const [label, expression] of stops) {\n this.labels.push(label);\n this.outputs.push(expression);\n }\n }\n static parse(args, context) {\n if (args.length - 1 < 4) {\n return context.error(`Expected at least 4 arguments, but found only ${ args.length - 1 }.`);\n }\n if ((args.length - 1) % 2 !== 0) {\n return context.error(`Expected an even number of arguments.`);\n }\n const input = context.parse(args[1], 1, NumberType);\n if (!input)\n return null;\n const stops = [];\n let outputType = null;\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n for (let i = 1; i < args.length; i += 2) {\n const label = i === 1 ? -Infinity : args[i];\n const value = args[i + 1];\n const labelKey = i;\n const valueKey = i + 1;\n if (typeof label !== 'number') {\n return context.error('Input/output pairs for \"step\" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey);\n }\n if (stops.length && stops[stops.length - 1][0] >= label) {\n return context.error('Input/output pairs for \"step\" expressions must be arranged with input values in strictly ascending order.', labelKey);\n }\n const parsed = context.parse(value, valueKey, outputType);\n if (!parsed)\n return null;\n outputType = outputType || parsed.type;\n stops.push([\n label,\n parsed\n ]);\n }\n return new Step(outputType, input, stops);\n }\n evaluate(ctx) {\n const labels = this.labels;\n const outputs = this.outputs;\n if (labels.length === 1) {\n return outputs[0].evaluate(ctx);\n }\n const value = this.input.evaluate(ctx);\n if (value <= labels[0]) {\n return outputs[0].evaluate(ctx);\n }\n const stopCount = labels.length;\n if (value >= labels[stopCount - 1]) {\n return outputs[stopCount - 1].evaluate(ctx);\n }\n const index = findStopLessThanOrEqualTo(labels, value);\n return outputs[index].evaluate(ctx);\n }\n eachChild(fn) {\n fn(this.input);\n for (const expression of this.outputs) {\n fn(expression);\n }\n }\n outputDefined() {\n return this.outputs.every(out => out.outputDefined());\n }\n serialize() {\n const serialized = [\n 'step',\n this.input.serialize()\n ];\n for (let i = 0; i < this.labels.length; i++) {\n if (i > 0) {\n serialized.push(this.labels[i]);\n }\n serialized.push(this.outputs[i].serialize());\n }\n return serialized;\n }\n}\nvar Step$1 = Step;\n\n/*\n * Copyright (C) 2008 Apple Inc. All Rights Reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Ported from Webkit\n * http://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/UnitBezier.h\n */\n\nvar unitbezier = UnitBezier;\nfunction UnitBezier(p1x, p1y, p2x, p2y) {\n // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1).\n this.cx = 3 * p1x;\n this.bx = 3 * (p2x - p1x) - this.cx;\n this.ax = 1 - this.cx - this.bx;\n this.cy = 3 * p1y;\n this.by = 3 * (p2y - p1y) - this.cy;\n this.ay = 1 - this.cy - this.by;\n this.p1x = p1x;\n this.p1y = p2y;\n this.p2x = p2x;\n this.p2y = p2y;\n}\nUnitBezier.prototype.sampleCurveX = function (t) {\n // `ax t^3 + bx t^2 + cx t' expanded using Horner's rule.\n return ((this.ax * t + this.bx) * t + this.cx) * t;\n};\nUnitBezier.prototype.sampleCurveY = function (t) {\n return ((this.ay * t + this.by) * t + this.cy) * t;\n};\nUnitBezier.prototype.sampleCurveDerivativeX = function (t) {\n return (3 * this.ax * t + 2 * this.bx) * t + this.cx;\n};\nUnitBezier.prototype.solveCurveX = function (x, epsilon) {\n if (typeof epsilon === 'undefined')\n epsilon = 0.000001;\n var t0, t1, t2, x2, i;\n // First try a few iterations of Newton's method -- normally very fast.\n for (t2 = x, i = 0; i < 8; i++) {\n x2 = this.sampleCurveX(t2) - x;\n if (Math.abs(x2) < epsilon)\n return t2;\n var d2 = this.sampleCurveDerivativeX(t2);\n if (Math.abs(d2) < 0.000001)\n break;\n t2 = t2 - x2 / d2;\n }\n // Fall back to the bisection method for reliability.\n t0 = 0;\n t1 = 1;\n t2 = x;\n if (t2 < t0)\n return t0;\n if (t2 > t1)\n return t1;\n while (t0 < t1) {\n x2 = this.sampleCurveX(t2);\n if (Math.abs(x2 - x) < epsilon)\n return t2;\n if (x > x2) {\n t0 = t2;\n } else {\n t1 = t2;\n }\n t2 = (t1 - t0) * 0.5 + t0;\n }\n // Failure.\n return t2;\n};\nUnitBezier.prototype.solve = function (x, epsilon) {\n return this.sampleCurveY(this.solveCurveX(x, epsilon));\n};\n\nvar UnitBezier$1 = /*@__PURE__*/getDefaultExportFromCjs(unitbezier);\n\n// \nfunction number(a, b, t) {\n return a * (1 - t) + b * t;\n}\nfunction color(from, to, t) {\n return new Color$1(number(from.r, to.r, t), number(from.g, to.g, t), number(from.b, to.b, t), number(from.a, to.a, t));\n}\nfunction array(from, to, t) {\n return from.map((d, i) => {\n return number(d, to[i], t);\n });\n}\n\nvar interpolate = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tnumber: number,\n\tcolor: color,\n\tarray: array\n});\n\n// \n// Constants\nconst Xn = 0.95047,\n // D65 standard referent\n Yn = 1, Zn = 1.08883, t0 = 4 / 29, t1 = 6 / 29, t2 = 3 * t1 * t1, t3 = t1 * t1 * t1, deg2rad$1 = Math.PI / 180, rad2deg = 180 / Math.PI;\n// Utilities\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\nfunction xyz2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\nfunction rgb2xyz(x) {\n x /= 255;\n return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n// LAB\nfunction rgbToLab(rgbColor) {\n const b = rgb2xyz(rgbColor.r), a = rgb2xyz(rgbColor.g), l = rgb2xyz(rgbColor.b), x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn), y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.072175 * l) / Yn), z = xyz2lab((0.0193339 * b + 0.119192 * a + 0.9503041 * l) / Zn);\n return {\n l: 116 * y - 16,\n a: 500 * (x - y),\n b: 200 * (y - z),\n alpha: rgbColor.a\n };\n}\nfunction labToRgb(labColor) {\n let y = (labColor.l + 16) / 116, x = isNaN(labColor.a) ? y : y + labColor.a / 500, z = isNaN(labColor.b) ? y : y - labColor.b / 200;\n y = Yn * lab2xyz(y);\n x = Xn * lab2xyz(x);\n z = Zn * lab2xyz(z);\n return new Color$1(xyz2rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n xyz2rgb(-0.969266 * x + 1.8760108 * y + 0.041556 * z), xyz2rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z), labColor.alpha);\n}\nfunction interpolateLab(from, to, t) {\n return {\n l: number(from.l, to.l, t),\n a: number(from.a, to.a, t),\n b: number(from.b, to.b, t),\n alpha: number(from.alpha, to.alpha, t)\n };\n}\n// HCL\nfunction rgbToHcl(rgbColor) {\n const {l, a, b} = rgbToLab(rgbColor);\n const h = Math.atan2(b, a) * rad2deg;\n return {\n h: h < 0 ? h + 360 : h,\n c: Math.sqrt(a * a + b * b),\n l,\n alpha: rgbColor.a\n };\n}\nfunction hclToRgb(hclColor) {\n const h = hclColor.h * deg2rad$1, c = hclColor.c, l = hclColor.l;\n return labToRgb({\n l,\n a: Math.cos(h) * c,\n b: Math.sin(h) * c,\n alpha: hclColor.alpha\n });\n}\nfunction interpolateHue(a, b, t) {\n const d = b - a;\n return a + t * (d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d);\n}\nfunction interpolateHcl(from, to, t) {\n return {\n h: interpolateHue(from.h, to.h, t),\n c: number(from.c, to.c, t),\n l: number(from.l, to.l, t),\n alpha: number(from.alpha, to.alpha, t)\n };\n}\nconst lab = {\n forward: rgbToLab,\n reverse: labToRgb,\n interpolate: interpolateLab\n};\nconst hcl = {\n forward: rgbToHcl,\n reverse: hclToRgb,\n interpolate: interpolateHcl\n};\n\n// \nclass Interpolate {\n constructor(type, operator, interpolation, input, stops) {\n this.type = type;\n this.operator = operator;\n this.interpolation = interpolation;\n this.input = input;\n this.labels = [];\n this.outputs = [];\n for (const [label, expression] of stops) {\n this.labels.push(label);\n this.outputs.push(expression);\n }\n }\n static interpolationFactor(interpolation, input, lower, upper) {\n let t = 0;\n if (interpolation.name === 'exponential') {\n t = exponentialInterpolation(input, interpolation.base, lower, upper);\n } else if (interpolation.name === 'linear') {\n t = exponentialInterpolation(input, 1, lower, upper);\n } else if (interpolation.name === 'cubic-bezier') {\n const c = interpolation.controlPoints;\n const ub = new UnitBezier$1(c[0], c[1], c[2], c[3]);\n t = ub.solve(exponentialInterpolation(input, 1, lower, upper));\n }\n return t;\n }\n static parse(args, context) {\n let [operator, interpolation, input, ...rest] = args;\n if (!Array.isArray(interpolation) || interpolation.length === 0) {\n return context.error(`Expected an interpolation type expression.`, 1);\n }\n if (interpolation[0] === 'linear') {\n interpolation = { name: 'linear' };\n } else if (interpolation[0] === 'exponential') {\n const base = interpolation[1];\n if (typeof base !== 'number')\n return context.error(`Exponential interpolation requires a numeric base.`, 1, 1);\n interpolation = {\n name: 'exponential',\n base\n };\n } else if (interpolation[0] === 'cubic-bezier') {\n const controlPoints = interpolation.slice(1);\n if (controlPoints.length !== 4 || controlPoints.some(t => typeof t !== 'number' || t < 0 || t > 1)) {\n return context.error('Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.', 1);\n }\n interpolation = {\n name: 'cubic-bezier',\n controlPoints: controlPoints\n };\n } else {\n return context.error(`Unknown interpolation type ${ String(interpolation[0]) }`, 1, 0);\n }\n if (args.length - 1 < 4) {\n return context.error(`Expected at least 4 arguments, but found only ${ args.length - 1 }.`);\n }\n if ((args.length - 1) % 2 !== 0) {\n return context.error(`Expected an even number of arguments.`);\n }\n input = context.parse(input, 2, NumberType);\n if (!input)\n return null;\n const stops = [];\n let outputType = null;\n if (operator === 'interpolate-hcl' || operator === 'interpolate-lab') {\n outputType = ColorType;\n } else if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n for (let i = 0; i < rest.length; i += 2) {\n const label = rest[i];\n const value = rest[i + 1];\n const labelKey = i + 3;\n const valueKey = i + 4;\n if (typeof label !== 'number') {\n return context.error('Input/output pairs for \"interpolate\" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey);\n }\n if (stops.length && stops[stops.length - 1][0] >= label) {\n return context.error('Input/output pairs for \"interpolate\" expressions must be arranged with input values in strictly ascending order.', labelKey);\n }\n const parsed = context.parse(value, valueKey, outputType);\n if (!parsed)\n return null;\n outputType = outputType || parsed.type;\n stops.push([\n label,\n parsed\n ]);\n }\n if (outputType.kind !== 'number' && outputType.kind !== 'color' && !(outputType.kind === 'array' && outputType.itemType.kind === 'number' && typeof outputType.N === 'number')) {\n return context.error(`Type ${ toString$1(outputType) } is not interpolatable.`);\n }\n return new Interpolate(outputType, operator, interpolation, input, stops);\n }\n evaluate(ctx) {\n const labels = this.labels;\n const outputs = this.outputs;\n if (labels.length === 1) {\n return outputs[0].evaluate(ctx);\n }\n const value = this.input.evaluate(ctx);\n if (value <= labels[0]) {\n return outputs[0].evaluate(ctx);\n }\n const stopCount = labels.length;\n if (value >= labels[stopCount - 1]) {\n return outputs[stopCount - 1].evaluate(ctx);\n }\n const index = findStopLessThanOrEqualTo(labels, value);\n const lower = labels[index];\n const upper = labels[index + 1];\n const t = Interpolate.interpolationFactor(this.interpolation, value, lower, upper);\n const outputLower = outputs[index].evaluate(ctx);\n const outputUpper = outputs[index + 1].evaluate(ctx);\n if (this.operator === 'interpolate') {\n return interpolate[this.type.kind.toLowerCase()](outputLower, outputUpper, t); // eslint-disable-line import/namespace\n } else if (this.operator === 'interpolate-hcl') {\n return hcl.reverse(hcl.interpolate(hcl.forward(outputLower), hcl.forward(outputUpper), t));\n } else {\n return lab.reverse(lab.interpolate(lab.forward(outputLower), lab.forward(outputUpper), t));\n }\n }\n eachChild(fn) {\n fn(this.input);\n for (const expression of this.outputs) {\n fn(expression);\n }\n }\n outputDefined() {\n return this.outputs.every(out => out.outputDefined());\n }\n serialize() {\n let interpolation;\n if (this.interpolation.name === 'linear') {\n interpolation = ['linear'];\n } else if (this.interpolation.name === 'exponential') {\n if (this.interpolation.base === 1) {\n interpolation = ['linear'];\n } else {\n interpolation = [\n 'exponential',\n this.interpolation.base\n ];\n }\n } else {\n interpolation = ['cubic-bezier'].concat(this.interpolation.controlPoints);\n }\n const serialized = [\n this.operator,\n interpolation,\n this.input.serialize()\n ];\n for (let i = 0; i < this.labels.length; i++) {\n serialized.push(this.labels[i], this.outputs[i].serialize());\n }\n return serialized;\n }\n}\n/**\n * Returns a ratio that can be used to interpolate between exponential function\n * stops.\n * How it works: Two consecutive stop values define a (scaled and shifted) exponential function `f(x) = a * base^x + b`, where `base` is the user-specified base,\n * and `a` and `b` are constants affording sufficient degrees of freedom to fit\n * the function to the given stops.\n *\n * Here's a bit of algebra that lets us compute `f(x)` directly from the stop\n * values without explicitly solving for `a` and `b`:\n *\n * First stop value: `f(x0) = y0 = a * base^x0 + b`\n * Second stop value: `f(x1) = y1 = a * base^x1 + b`\n * => `y1 - y0 = a(base^x1 - base^x0)`\n * => `a = (y1 - y0)/(base^x1 - base^x0)`\n *\n * Desired value: `f(x) = y = a * base^x + b`\n * => `f(x) = y0 + a * (base^x - base^x0)`\n *\n * From the above, we can replace the `a` in `a * (base^x - base^x0)` and do a\n * little algebra:\n * ```\n * a * (base^x - base^x0) = (y1 - y0)/(base^x1 - base^x0) * (base^x - base^x0)\n * = (y1 - y0) * (base^x - base^x0) / (base^x1 - base^x0)\n * ```\n *\n * If we let `(base^x - base^x0) / (base^x1 base^x0)`, then we have\n * `f(x) = y0 + (y1 - y0) * ratio`. In other words, `ratio` may be treated as\n * an interpolation factor between the two stops' output values.\n *\n * (Note: a slightly different form for `ratio`,\n * `(base^(x-x0) - 1) / (base^(x1-x0) - 1) `, is equivalent, but requires fewer\n * expensive `Math.pow()` operations.)\n *\n * @private\n*/\nfunction exponentialInterpolation(input, base, lowerValue, upperValue) {\n const difference = upperValue - lowerValue;\n const progress = input - lowerValue;\n if (difference === 0) {\n return 0;\n } else if (base === 1) {\n return progress / difference;\n } else {\n return (Math.pow(base, progress) - 1) / (Math.pow(base, difference) - 1);\n }\n}\nvar Interpolate$1 = Interpolate;\n\nclass Coalesce {\n constructor(type, args) {\n this.type = type;\n this.args = args;\n }\n static parse(args, context) {\n if (args.length < 2) {\n return context.error('Expectected at least one argument.');\n }\n let outputType = null;\n const expectedType = context.expectedType;\n if (expectedType && expectedType.kind !== 'value') {\n outputType = expectedType;\n }\n const parsedArgs = [];\n for (const arg of args.slice(1)) {\n const parsed = context.parse(arg, 1 + parsedArgs.length, outputType, undefined, { typeAnnotation: 'omit' });\n if (!parsed)\n return null;\n outputType = outputType || parsed.type;\n parsedArgs.push(parsed);\n }\n // Above, we parse arguments without inferred type annotation so that\n // they don't produce a runtime error for `null` input, which would\n // preempt the desired null-coalescing behavior.\n // Thus, if any of our arguments would have needed an annotation, we\n // need to wrap the enclosing coalesce expression with it instead.\n const needsAnnotation = expectedType && parsedArgs.some(arg => checkSubtype(expectedType, arg.type));\n return needsAnnotation ? new Coalesce(ValueType, parsedArgs) : new Coalesce(outputType, parsedArgs);\n }\n evaluate(ctx) {\n let result = null;\n let argCount = 0;\n let firstImage;\n for (const arg of this.args) {\n argCount++;\n result = arg.evaluate(ctx);\n // we need to keep track of the first requested image in a coalesce statement\n // if coalesce can't find a valid image, we return the first image so styleimagemissing can fire\n if (result && result instanceof ResolvedImage && !result.available) {\n // set to first image\n if (!firstImage) {\n firstImage = result;\n }\n result = null;\n // if we reach the end, return the first image\n if (argCount === this.args.length) {\n return firstImage;\n }\n }\n if (result !== null)\n break;\n }\n return result;\n }\n eachChild(fn) {\n this.args.forEach(fn);\n }\n outputDefined() {\n return this.args.every(arg => arg.outputDefined());\n }\n serialize() {\n const serialized = ['coalesce'];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n}\nvar Coalesce$1 = Coalesce;\n\n// \nclass Let {\n constructor(bindings, result) {\n this.type = result.type;\n this.bindings = [].concat(bindings);\n this.result = result;\n }\n evaluate(ctx) {\n return this.result.evaluate(ctx);\n }\n eachChild(fn) {\n for (const binding of this.bindings) {\n fn(binding[1]);\n }\n fn(this.result);\n }\n static parse(args, context) {\n if (args.length < 4)\n return context.error(`Expected at least 3 arguments, but found ${ args.length - 1 } instead.`);\n const bindings = [];\n for (let i = 1; i < args.length - 1; i += 2) {\n const name = args[i];\n if (typeof name !== 'string') {\n return context.error(`Expected string, but found ${ typeof name } instead.`, i);\n }\n if (/[^a-zA-Z0-9_]/.test(name)) {\n return context.error(`Variable names must contain only alphanumeric characters or '_'.`, i);\n }\n const value = context.parse(args[i + 1], i + 1);\n if (!value)\n return null;\n bindings.push([\n name,\n value\n ]);\n }\n const result = context.parse(args[args.length - 1], args.length - 1, context.expectedType, bindings);\n if (!result)\n return null;\n return new Let(bindings, result);\n }\n outputDefined() {\n return this.result.outputDefined();\n }\n serialize() {\n const serialized = ['let'];\n for (const [name, expr] of this.bindings) {\n serialized.push(name, expr.serialize());\n }\n serialized.push(this.result.serialize());\n return serialized;\n }\n}\nvar Let$1 = Let;\n\n// \nclass At {\n constructor(type, index, input) {\n this.type = type;\n this.index = index;\n this.input = input;\n }\n static parse(args, context) {\n if (args.length !== 3)\n return context.error(`Expected 2 arguments, but found ${ args.length - 1 } instead.`);\n const index = context.parse(args[1], 1, NumberType);\n const input = context.parse(args[2], 2, array$1(context.expectedType || ValueType));\n if (!index || !input)\n return null;\n const t = input.type;\n return new At(t.itemType, index, input);\n }\n evaluate(ctx) {\n const index = this.index.evaluate(ctx);\n const array = this.input.evaluate(ctx);\n if (index < 0) {\n throw new RuntimeError$1(`Array index out of bounds: ${ index } < 0.`);\n }\n if (index >= array.length) {\n throw new RuntimeError$1(`Array index out of bounds: ${ index } > ${ array.length - 1 }.`);\n }\n if (index !== Math.floor(index)) {\n throw new RuntimeError$1(`Array index must be an integer, but found ${ index } instead.`);\n }\n return array[index];\n }\n eachChild(fn) {\n fn(this.index);\n fn(this.input);\n }\n outputDefined() {\n return false;\n }\n serialize() {\n return [\n 'at',\n this.index.serialize(),\n this.input.serialize()\n ];\n }\n}\nvar At$1 = At;\n\n// \nclass In {\n constructor(needle, haystack) {\n this.type = BooleanType;\n this.needle = needle;\n this.haystack = haystack;\n }\n static parse(args, context) {\n if (args.length !== 3) {\n return context.error(`Expected 2 arguments, but found ${ args.length - 1 } instead.`);\n }\n const needle = context.parse(args[1], 1, ValueType);\n const haystack = context.parse(args[2], 2, ValueType);\n if (!needle || !haystack)\n return null;\n if (!isValidType(needle.type, [\n BooleanType,\n StringType,\n NumberType,\n NullType,\n ValueType\n ])) {\n return context.error(`Expected first argument to be of type boolean, string, number or null, but found ${ toString$1(needle.type) } instead`);\n }\n return new In(needle, haystack);\n }\n evaluate(ctx) {\n const needle = this.needle.evaluate(ctx);\n const haystack = this.haystack.evaluate(ctx);\n if (haystack == null)\n return false;\n if (!isValidNativeType(needle, [\n 'boolean',\n 'string',\n 'number',\n 'null'\n ])) {\n throw new RuntimeError$1(`Expected first argument to be of type boolean, string, number or null, but found ${ toString$1(typeOf(needle)) } instead.`);\n }\n if (!isValidNativeType(haystack, [\n 'string',\n 'array'\n ])) {\n throw new RuntimeError$1(`Expected second argument to be of type array or string, but found ${ toString$1(typeOf(haystack)) } instead.`);\n }\n return haystack.indexOf(needle) >= 0;\n }\n eachChild(fn) {\n fn(this.needle);\n fn(this.haystack);\n }\n outputDefined() {\n return true;\n }\n serialize() {\n return [\n 'in',\n this.needle.serialize(),\n this.haystack.serialize()\n ];\n }\n}\nvar In$1 = In;\n\n// \nclass IndexOf {\n constructor(needle, haystack, fromIndex) {\n this.type = NumberType;\n this.needle = needle;\n this.haystack = haystack;\n this.fromIndex = fromIndex;\n }\n static parse(args, context) {\n if (args.length <= 2 || args.length >= 5) {\n return context.error(`Expected 3 or 4 arguments, but found ${ args.length - 1 } instead.`);\n }\n const needle = context.parse(args[1], 1, ValueType);\n const haystack = context.parse(args[2], 2, ValueType);\n if (!needle || !haystack)\n return null;\n if (!isValidType(needle.type, [\n BooleanType,\n StringType,\n NumberType,\n NullType,\n ValueType\n ])) {\n return context.error(`Expected first argument to be of type boolean, string, number or null, but found ${ toString$1(needle.type) } instead`);\n }\n if (args.length === 4) {\n const fromIndex = context.parse(args[3], 3, NumberType);\n if (!fromIndex)\n return null;\n return new IndexOf(needle, haystack, fromIndex);\n } else {\n return new IndexOf(needle, haystack);\n }\n }\n evaluate(ctx) {\n const needle = this.needle.evaluate(ctx);\n const haystack = this.haystack.evaluate(ctx);\n if (!isValidNativeType(needle, [\n 'boolean',\n 'string',\n 'number',\n 'null'\n ])) {\n throw new RuntimeError$1(`Expected first argument to be of type boolean, string, number or null, but found ${ toString$1(typeOf(needle)) } instead.`);\n }\n if (!isValidNativeType(haystack, [\n 'string',\n 'array'\n ])) {\n throw new RuntimeError$1(`Expected second argument to be of type array or string, but found ${ toString$1(typeOf(haystack)) } instead.`);\n }\n if (this.fromIndex) {\n const fromIndex = this.fromIndex.evaluate(ctx);\n return haystack.indexOf(needle, fromIndex);\n }\n return haystack.indexOf(needle);\n }\n eachChild(fn) {\n fn(this.needle);\n fn(this.haystack);\n if (this.fromIndex) {\n fn(this.fromIndex);\n }\n }\n outputDefined() {\n return false;\n }\n serialize() {\n if (this.fromIndex != null && this.fromIndex !== undefined) {\n const fromIndex = this.fromIndex.serialize();\n return [\n 'index-of',\n this.needle.serialize(),\n this.haystack.serialize(),\n fromIndex\n ];\n }\n return [\n 'index-of',\n this.needle.serialize(),\n this.haystack.serialize()\n ];\n }\n}\nvar IndexOf$1 = IndexOf;\n\n// Map input label values to output expression index\nclass Match {\n constructor(inputType, outputType, input, cases, outputs, otherwise) {\n this.inputType = inputType;\n this.type = outputType;\n this.input = input;\n this.cases = cases;\n this.outputs = outputs;\n this.otherwise = otherwise;\n }\n static parse(args, context) {\n if (args.length < 5)\n return context.error(`Expected at least 4 arguments, but found only ${ args.length - 1 }.`);\n if (args.length % 2 !== 1)\n return context.error(`Expected an even number of arguments.`);\n let inputType;\n let outputType;\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n const cases = {};\n const outputs = [];\n for (let i = 2; i < args.length - 1; i += 2) {\n let labels = args[i];\n const value = args[i + 1];\n if (!Array.isArray(labels)) {\n labels = [labels];\n }\n const labelContext = context.concat(i);\n if (labels.length === 0) {\n return labelContext.error('Expected at least one branch label.');\n }\n for (const label of labels) {\n if (typeof label !== 'number' && typeof label !== 'string') {\n return labelContext.error(`Branch labels must be numbers or strings.`);\n } else if (typeof label === 'number' && Math.abs(label) > Number.MAX_SAFE_INTEGER) {\n return labelContext.error(`Branch labels must be integers no larger than ${ Number.MAX_SAFE_INTEGER }.`);\n } else if (typeof label === 'number' && Math.floor(label) !== label) {\n return labelContext.error(`Numeric branch labels must be integer values.`);\n } else if (!inputType) {\n inputType = typeOf(label);\n } else if (labelContext.checkSubtype(inputType, typeOf(label))) {\n return null;\n }\n if (typeof cases[String(label)] !== 'undefined') {\n return labelContext.error('Branch labels must be unique.');\n }\n cases[String(label)] = outputs.length;\n }\n const result = context.parse(value, i, outputType);\n if (!result)\n return null;\n outputType = outputType || result.type;\n outputs.push(result);\n }\n const input = context.parse(args[1], 1, ValueType);\n if (!input)\n return null;\n const otherwise = context.parse(args[args.length - 1], args.length - 1, outputType);\n if (!otherwise)\n return null;\n if (input.type.kind !== 'value' && context.concat(1).checkSubtype(inputType, input.type)) {\n return null;\n }\n return new Match(inputType, outputType, input, cases, outputs, otherwise);\n }\n evaluate(ctx) {\n const input = this.input.evaluate(ctx);\n const output = typeOf(input) === this.inputType && this.outputs[this.cases[input]] || this.otherwise;\n return output.evaluate(ctx);\n }\n eachChild(fn) {\n fn(this.input);\n this.outputs.forEach(fn);\n fn(this.otherwise);\n }\n outputDefined() {\n return this.outputs.every(out => out.outputDefined()) && this.otherwise.outputDefined();\n }\n serialize() {\n const serialized = [\n 'match',\n this.input.serialize()\n ];\n // Sort so serialization has an arbitrary defined order, even though\n // branch order doesn't affect evaluation\n const sortedLabels = Object.keys(this.cases).sort();\n // Group branches by unique match expression to support condensed\n // serializations of the form [case1, case2, ...] -> matchExpression\n const groupedByOutput = [];\n const outputLookup = {};\n // lookup index into groupedByOutput for a given output expression\n for (const label of sortedLabels) {\n const outputIndex = outputLookup[this.cases[label]];\n if (outputIndex === undefined) {\n // First time seeing this output, add it to the end of the grouped list\n outputLookup[this.cases[label]] = groupedByOutput.length;\n groupedByOutput.push([\n this.cases[label],\n [label]\n ]);\n } else {\n // We've seen this expression before, add the label to that output's group\n groupedByOutput[outputIndex][1].push(label);\n }\n }\n const coerceLabel = label => this.inputType.kind === 'number' ? Number(label) : label;\n for (const [outputIndex, labels] of groupedByOutput) {\n if (labels.length === 1) {\n // Only a single label matches this output expression\n serialized.push(coerceLabel(labels[0]));\n } else {\n // Array of literal labels pointing to this output expression\n serialized.push(labels.map(coerceLabel));\n }\n serialized.push(this.outputs[outputIndex].serialize());\n }\n serialized.push(this.otherwise.serialize());\n return serialized;\n }\n}\nvar Match$1 = Match;\n\nclass Case {\n constructor(type, branches, otherwise) {\n this.type = type;\n this.branches = branches;\n this.otherwise = otherwise;\n }\n static parse(args, context) {\n if (args.length < 4)\n return context.error(`Expected at least 3 arguments, but found only ${ args.length - 1 }.`);\n if (args.length % 2 !== 0)\n return context.error(`Expected an odd number of arguments.`);\n let outputType;\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n const branches = [];\n for (let i = 1; i < args.length - 1; i += 2) {\n const test = context.parse(args[i], i, BooleanType);\n if (!test)\n return null;\n const result = context.parse(args[i + 1], i + 1, outputType);\n if (!result)\n return null;\n branches.push([\n test,\n result\n ]);\n outputType = outputType || result.type;\n }\n const otherwise = context.parse(args[args.length - 1], args.length - 1, outputType);\n if (!otherwise)\n return null;\n return new Case(outputType, branches, otherwise);\n }\n evaluate(ctx) {\n for (const [test, expression] of this.branches) {\n if (test.evaluate(ctx)) {\n return expression.evaluate(ctx);\n }\n }\n return this.otherwise.evaluate(ctx);\n }\n eachChild(fn) {\n for (const [test, expression] of this.branches) {\n fn(test);\n fn(expression);\n }\n fn(this.otherwise);\n }\n outputDefined() {\n return this.branches.every(([_, out]) => out.outputDefined()) && this.otherwise.outputDefined();\n }\n serialize() {\n const serialized = ['case'];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n}\nvar Case$1 = Case;\n\n// \nclass Slice {\n constructor(type, input, beginIndex, endIndex) {\n this.type = type;\n this.input = input;\n this.beginIndex = beginIndex;\n this.endIndex = endIndex;\n }\n static parse(args, context) {\n if (args.length <= 2 || args.length >= 5) {\n return context.error(`Expected 3 or 4 arguments, but found ${ args.length - 1 } instead.`);\n }\n const input = context.parse(args[1], 1, ValueType);\n const beginIndex = context.parse(args[2], 2, NumberType);\n if (!input || !beginIndex)\n return null;\n if (!isValidType(input.type, [\n array$1(ValueType),\n StringType,\n ValueType\n ])) {\n return context.error(`Expected first argument to be of type array or string, but found ${ toString$1(input.type) } instead`);\n }\n if (args.length === 4) {\n const endIndex = context.parse(args[3], 3, NumberType);\n if (!endIndex)\n return null;\n return new Slice(input.type, input, beginIndex, endIndex);\n } else {\n return new Slice(input.type, input, beginIndex);\n }\n }\n evaluate(ctx) {\n const input = this.input.evaluate(ctx);\n const beginIndex = this.beginIndex.evaluate(ctx);\n if (!isValidNativeType(input, [\n 'string',\n 'array'\n ])) {\n throw new RuntimeError$1(`Expected first argument to be of type array or string, but found ${ toString$1(typeOf(input)) } instead.`);\n }\n if (this.endIndex) {\n const endIndex = this.endIndex.evaluate(ctx);\n return input.slice(beginIndex, endIndex);\n }\n return input.slice(beginIndex);\n }\n eachChild(fn) {\n fn(this.input);\n fn(this.beginIndex);\n if (this.endIndex) {\n fn(this.endIndex);\n }\n }\n outputDefined() {\n return false;\n }\n serialize() {\n if (this.endIndex != null && this.endIndex !== undefined) {\n const endIndex = this.endIndex.serialize();\n return [\n 'slice',\n this.input.serialize(),\n this.beginIndex.serialize(),\n endIndex\n ];\n }\n return [\n 'slice',\n this.input.serialize(),\n this.beginIndex.serialize()\n ];\n }\n}\nvar Slice$1 = Slice;\n\n// \nfunction isComparableType(op, type) {\n if (op === '==' || op === '!=') {\n // equality operator\n return type.kind === 'boolean' || type.kind === 'string' || type.kind === 'number' || type.kind === 'null' || type.kind === 'value';\n } else {\n // ordering operator\n return type.kind === 'string' || type.kind === 'number' || type.kind === 'value';\n }\n}\nfunction eq(ctx, a, b) {\n return a === b;\n}\nfunction neq(ctx, a, b) {\n return a !== b;\n}\nfunction lt(ctx, a, b) {\n return a < b;\n}\nfunction gt(ctx, a, b) {\n return a > b;\n}\nfunction lteq(ctx, a, b) {\n return a <= b;\n}\nfunction gteq(ctx, a, b) {\n return a >= b;\n}\nfunction eqCollate(ctx, a, b, c) {\n return c.compare(a, b) === 0;\n}\nfunction neqCollate(ctx, a, b, c) {\n return !eqCollate(ctx, a, b, c);\n}\nfunction ltCollate(ctx, a, b, c) {\n return c.compare(a, b) < 0;\n}\nfunction gtCollate(ctx, a, b, c) {\n return c.compare(a, b) > 0;\n}\nfunction lteqCollate(ctx, a, b, c) {\n return c.compare(a, b) <= 0;\n}\nfunction gteqCollate(ctx, a, b, c) {\n return c.compare(a, b) >= 0;\n}\n/**\n * Special form for comparison operators, implementing the signatures:\n * - (T, T, ?Collator) => boolean\n * - (T, value, ?Collator) => boolean\n * - (value, T, ?Collator) => boolean\n *\n * For inequalities, T must be either value, string, or number. For ==/!=, it\n * can also be boolean or null.\n *\n * Equality semantics are equivalent to Javascript's strict equality (===/!==)\n * -- i.e., when the arguments' types don't match, == evaluates to false, != to\n * true.\n *\n * When types don't match in an ordering comparison, a runtime error is thrown.\n *\n * @private\n */\nfunction makeComparison(op, compareBasic, compareWithCollator) {\n const isOrderComparison = op !== '==' && op !== '!=';\n return class Comparison {\n constructor(lhs, rhs, collator) {\n this.type = BooleanType;\n this.lhs = lhs;\n this.rhs = rhs;\n this.collator = collator;\n this.hasUntypedArgument = lhs.type.kind === 'value' || rhs.type.kind === 'value';\n }\n static parse(args, context) {\n if (args.length !== 3 && args.length !== 4)\n return context.error(`Expected two or three arguments.`);\n const op = args[0];\n let lhs = context.parse(args[1], 1, ValueType);\n if (!lhs)\n return null;\n if (!isComparableType(op, lhs.type)) {\n return context.concat(1).error(`\"${ op }\" comparisons are not supported for type '${ toString$1(lhs.type) }'.`);\n }\n let rhs = context.parse(args[2], 2, ValueType);\n if (!rhs)\n return null;\n if (!isComparableType(op, rhs.type)) {\n return context.concat(2).error(`\"${ op }\" comparisons are not supported for type '${ toString$1(rhs.type) }'.`);\n }\n if (lhs.type.kind !== rhs.type.kind && lhs.type.kind !== 'value' && rhs.type.kind !== 'value') {\n return context.error(`Cannot compare types '${ toString$1(lhs.type) }' and '${ toString$1(rhs.type) }'.`);\n }\n if (isOrderComparison) {\n // typing rules specific to less/greater than operators\n if (lhs.type.kind === 'value' && rhs.type.kind !== 'value') {\n // (value, T)\n lhs = new Assertion$1(rhs.type, [lhs]);\n } else if (lhs.type.kind !== 'value' && rhs.type.kind === 'value') {\n // (T, value)\n rhs = new Assertion$1(lhs.type, [rhs]);\n }\n }\n let collator = null;\n if (args.length === 4) {\n if (lhs.type.kind !== 'string' && rhs.type.kind !== 'string' && lhs.type.kind !== 'value' && rhs.type.kind !== 'value') {\n return context.error(`Cannot use collator to compare non-string types.`);\n }\n collator = context.parse(args[3], 3, CollatorType);\n if (!collator)\n return null;\n }\n return new Comparison(lhs, rhs, collator);\n }\n evaluate(ctx) {\n const lhs = this.lhs.evaluate(ctx);\n const rhs = this.rhs.evaluate(ctx);\n if (isOrderComparison && this.hasUntypedArgument) {\n const lt = typeOf(lhs);\n const rt = typeOf(rhs);\n // check that type is string or number, and equal\n if (lt.kind !== rt.kind || !(lt.kind === 'string' || lt.kind === 'number')) {\n throw new RuntimeError$1(`Expected arguments for \"${ op }\" to be (string, string) or (number, number), but found (${ lt.kind }, ${ rt.kind }) instead.`);\n }\n }\n if (this.collator && !isOrderComparison && this.hasUntypedArgument) {\n const lt = typeOf(lhs);\n const rt = typeOf(rhs);\n if (lt.kind !== 'string' || rt.kind !== 'string') {\n return compareBasic(ctx, lhs, rhs);\n }\n }\n return this.collator ? compareWithCollator(ctx, lhs, rhs, this.collator.evaluate(ctx)) : compareBasic(ctx, lhs, rhs);\n }\n eachChild(fn) {\n fn(this.lhs);\n fn(this.rhs);\n if (this.collator) {\n fn(this.collator);\n }\n }\n outputDefined() {\n return true;\n }\n serialize() {\n const serialized = [op];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n };\n}\nconst Equals = makeComparison('==', eq, eqCollate);\nconst NotEquals = makeComparison('!=', neq, neqCollate);\nconst LessThan = makeComparison('<', lt, ltCollate);\nconst GreaterThan = makeComparison('>', gt, gtCollate);\nconst LessThanOrEqual = makeComparison('<=', lteq, lteqCollate);\nconst GreaterThanOrEqual = makeComparison('>=', gteq, gteqCollate);\n\n// \nclass NumberFormat {\n // BCP 47 language tag\n // ISO 4217 currency code, required if style=currency\n // Simple units sanctioned for use in ECMAScript, required if style=unit. https://tc39.es/proposal-unified-intl-numberformat/section6/locales-currencies-tz_proposed_out.html#sec-issanctionedsimpleunitidentifier\n // Default 0\n // Default 3\n constructor(number, locale, currency, unit, minFractionDigits, maxFractionDigits) {\n this.type = StringType;\n this.number = number;\n this.locale = locale;\n this.currency = currency;\n this.unit = unit;\n this.minFractionDigits = minFractionDigits;\n this.maxFractionDigits = maxFractionDigits;\n }\n static parse(args, context) {\n if (args.length !== 3)\n return context.error(`Expected two arguments.`);\n const number = context.parse(args[1], 1, NumberType);\n if (!number)\n return null;\n const options = args[2];\n if (typeof options !== 'object' || Array.isArray(options))\n return context.error(`NumberFormat options argument must be an object.`);\n let locale = null;\n if (options['locale']) {\n locale = context.parse(options['locale'], 1, StringType);\n if (!locale)\n return null;\n }\n let currency = null;\n if (options['currency']) {\n currency = context.parse(options['currency'], 1, StringType);\n if (!currency)\n return null;\n }\n let unit = null;\n if (options['unit']) {\n unit = context.parse(options['unit'], 1, StringType);\n if (!unit)\n return null;\n }\n let minFractionDigits = null;\n if (options['min-fraction-digits']) {\n minFractionDigits = context.parse(options['min-fraction-digits'], 1, NumberType);\n if (!minFractionDigits)\n return null;\n }\n let maxFractionDigits = null;\n if (options['max-fraction-digits']) {\n maxFractionDigits = context.parse(options['max-fraction-digits'], 1, NumberType);\n if (!maxFractionDigits)\n return null;\n }\n return new NumberFormat(number, locale, currency, unit, minFractionDigits, maxFractionDigits);\n }\n evaluate(ctx) {\n return new Intl.NumberFormat(this.locale ? this.locale.evaluate(ctx) : [], {\n style: this.currency && 'currency' || this.unit && 'unit' || 'decimal',\n currency: this.currency ? this.currency.evaluate(ctx) : undefined,\n unit: this.unit ? this.unit.evaluate(ctx) : undefined,\n minimumFractionDigits: this.minFractionDigits ? this.minFractionDigits.evaluate(ctx) : undefined,\n maximumFractionDigits: this.maxFractionDigits ? this.maxFractionDigits.evaluate(ctx) : undefined\n }).format(this.number.evaluate(ctx));\n }\n eachChild(fn) {\n fn(this.number);\n if (this.locale) {\n fn(this.locale);\n }\n if (this.currency) {\n fn(this.currency);\n }\n if (this.unit) {\n fn(this.unit);\n }\n if (this.minFractionDigits) {\n fn(this.minFractionDigits);\n }\n if (this.maxFractionDigits) {\n fn(this.maxFractionDigits);\n }\n }\n outputDefined() {\n return false;\n }\n serialize() {\n const options = {};\n if (this.locale) {\n options['locale'] = this.locale.serialize();\n }\n if (this.currency) {\n options['currency'] = this.currency.serialize();\n }\n if (this.unit) {\n options['unit'] = this.unit.serialize();\n }\n if (this.minFractionDigits) {\n options['min-fraction-digits'] = this.minFractionDigits.serialize();\n }\n if (this.maxFractionDigits) {\n options['max-fraction-digits'] = this.maxFractionDigits.serialize();\n }\n return [\n 'number-format',\n this.number.serialize(),\n options\n ];\n }\n}\n\n// \nclass Length {\n constructor(input) {\n this.type = NumberType;\n this.input = input;\n }\n static parse(args, context) {\n if (args.length !== 2)\n return context.error(`Expected 1 argument, but found ${ args.length - 1 } instead.`);\n const input = context.parse(args[1], 1);\n if (!input)\n return null;\n if (input.type.kind !== 'array' && input.type.kind !== 'string' && input.type.kind !== 'value')\n return context.error(`Expected argument of type string or array, but found ${ toString$1(input.type) } instead.`);\n return new Length(input);\n }\n evaluate(ctx) {\n const input = this.input.evaluate(ctx);\n if (typeof input === 'string') {\n return input.length;\n } else if (Array.isArray(input)) {\n return input.length;\n } else {\n throw new RuntimeError$1(`Expected value to be of type string or array, but found ${ toString$1(typeOf(input)) } instead.`);\n }\n }\n eachChild(fn) {\n fn(this.input);\n }\n outputDefined() {\n return false;\n }\n serialize() {\n const serialized = ['length'];\n this.eachChild(child => {\n serialized.push(child.serialize());\n });\n return serialized;\n }\n}\nvar Length$1 = Length;\n\n// \nconst expressions = {\n // special forms\n '==': Equals,\n '!=': NotEquals,\n '>': GreaterThan,\n '<': LessThan,\n '>=': GreaterThanOrEqual,\n '<=': LessThanOrEqual,\n 'array': Assertion$1,\n 'at': At$1,\n 'boolean': Assertion$1,\n 'case': Case$1,\n 'coalesce': Coalesce$1,\n 'collator': CollatorExpression,\n 'format': FormatExpression,\n 'image': ImageExpression,\n 'in': In$1,\n 'index-of': IndexOf$1,\n 'interpolate': Interpolate$1,\n 'interpolate-hcl': Interpolate$1,\n 'interpolate-lab': Interpolate$1,\n 'length': Length$1,\n 'let': Let$1,\n 'literal': Literal$1,\n 'match': Match$1,\n 'number': Assertion$1,\n 'number-format': NumberFormat,\n 'object': Assertion$1,\n 'slice': Slice$1,\n 'step': Step$1,\n 'string': Assertion$1,\n 'to-boolean': Coercion$1,\n 'to-color': Coercion$1,\n 'to-number': Coercion$1,\n 'to-string': Coercion$1,\n 'var': Var$1,\n 'within': Within$1\n};\nfunction rgba(ctx, [r, g, b, a]) {\n r = r.evaluate(ctx);\n g = g.evaluate(ctx);\n b = b.evaluate(ctx);\n const alpha = a ? a.evaluate(ctx) : 1;\n const error = validateRGBA(r, g, b, alpha);\n if (error)\n throw new RuntimeError$1(error);\n return new Color$1(r / 255 * alpha, g / 255 * alpha, b / 255 * alpha, alpha);\n}\nfunction has(key, obj) {\n return key in obj;\n}\nfunction get(key, obj) {\n const v = obj[key];\n return typeof v === 'undefined' ? null : v;\n}\nfunction binarySearch(v, a, i, j) {\n while (i <= j) {\n const m = i + j >> 1;\n if (a[m] === v)\n return true;\n if (a[m] > v)\n j = m - 1;\n else\n i = m + 1;\n }\n return false;\n}\nfunction varargs(type) {\n return { type };\n}\nCompoundExpression$1.register(expressions, {\n 'error': [\n ErrorType,\n [StringType],\n (ctx, [v]) => {\n throw new RuntimeError$1(v.evaluate(ctx));\n }\n ],\n 'typeof': [\n StringType,\n [ValueType],\n (ctx, [v]) => toString$1(typeOf(v.evaluate(ctx)))\n ],\n 'to-rgba': [\n array$1(NumberType, 4),\n [ColorType],\n (ctx, [v]) => {\n return v.evaluate(ctx).toArray();\n }\n ],\n 'rgb': [\n ColorType,\n [\n NumberType,\n NumberType,\n NumberType\n ],\n rgba\n ],\n 'rgba': [\n ColorType,\n [\n NumberType,\n NumberType,\n NumberType,\n NumberType\n ],\n rgba\n ],\n 'has': {\n type: BooleanType,\n overloads: [\n [\n [StringType],\n (ctx, [key]) => has(key.evaluate(ctx), ctx.properties())\n ],\n [\n [\n StringType,\n ObjectType\n ],\n (ctx, [key, obj]) => has(key.evaluate(ctx), obj.evaluate(ctx))\n ]\n ]\n },\n 'get': {\n type: ValueType,\n overloads: [\n [\n [StringType],\n (ctx, [key]) => get(key.evaluate(ctx), ctx.properties())\n ],\n [\n [\n StringType,\n ObjectType\n ],\n (ctx, [key, obj]) => get(key.evaluate(ctx), obj.evaluate(ctx))\n ]\n ]\n },\n 'feature-state': [\n ValueType,\n [StringType],\n (ctx, [key]) => get(key.evaluate(ctx), ctx.featureState || {})\n ],\n 'properties': [\n ObjectType,\n [],\n ctx => ctx.properties()\n ],\n 'geometry-type': [\n StringType,\n [],\n ctx => ctx.geometryType()\n ],\n 'id': [\n ValueType,\n [],\n ctx => ctx.id()\n ],\n 'zoom': [\n NumberType,\n [],\n ctx => ctx.globals.zoom\n ],\n 'pitch': [\n NumberType,\n [],\n ctx => ctx.globals.pitch || 0\n ],\n 'distance-from-center': [\n NumberType,\n [],\n ctx => ctx.distanceFromCenter()\n ],\n 'heatmap-density': [\n NumberType,\n [],\n ctx => ctx.globals.heatmapDensity || 0\n ],\n 'line-progress': [\n NumberType,\n [],\n ctx => ctx.globals.lineProgress || 0\n ],\n 'sky-radial-progress': [\n NumberType,\n [],\n ctx => ctx.globals.skyRadialProgress || 0\n ],\n 'accumulated': [\n ValueType,\n [],\n ctx => ctx.globals.accumulated === undefined ? null : ctx.globals.accumulated\n ],\n '+': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => {\n let result = 0;\n for (const arg of args) {\n result += arg.evaluate(ctx);\n }\n return result;\n }\n ],\n '*': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => {\n let result = 1;\n for (const arg of args) {\n result *= arg.evaluate(ctx);\n }\n return result;\n }\n ],\n '-': {\n type: NumberType,\n overloads: [\n [\n [\n NumberType,\n NumberType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) - b.evaluate(ctx)\n ],\n [\n [NumberType],\n (ctx, [a]) => -a.evaluate(ctx)\n ]\n ]\n },\n '/': [\n NumberType,\n [\n NumberType,\n NumberType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) / b.evaluate(ctx)\n ],\n '%': [\n NumberType,\n [\n NumberType,\n NumberType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) % b.evaluate(ctx)\n ],\n 'ln2': [\n NumberType,\n [],\n () => Math.LN2\n ],\n 'pi': [\n NumberType,\n [],\n () => Math.PI\n ],\n 'e': [\n NumberType,\n [],\n () => Math.E\n ],\n '^': [\n NumberType,\n [\n NumberType,\n NumberType\n ],\n (ctx, [b, e]) => Math.pow(b.evaluate(ctx), e.evaluate(ctx))\n ],\n 'sqrt': [\n NumberType,\n [NumberType],\n (ctx, [x]) => Math.sqrt(x.evaluate(ctx))\n ],\n 'log10': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx)) / Math.LN10\n ],\n 'ln': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx))\n ],\n 'log2': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx)) / Math.LN2\n ],\n 'sin': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.sin(n.evaluate(ctx))\n ],\n 'cos': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.cos(n.evaluate(ctx))\n ],\n 'tan': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.tan(n.evaluate(ctx))\n ],\n 'asin': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.asin(n.evaluate(ctx))\n ],\n 'acos': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.acos(n.evaluate(ctx))\n ],\n 'atan': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.atan(n.evaluate(ctx))\n ],\n 'min': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => Math.min(...args.map(arg => arg.evaluate(ctx)))\n ],\n 'max': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => Math.max(...args.map(arg => arg.evaluate(ctx)))\n ],\n 'abs': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.abs(n.evaluate(ctx))\n ],\n 'round': [\n NumberType,\n [NumberType],\n (ctx, [n]) => {\n const v = n.evaluate(ctx);\n // Javascript's Math.round() rounds towards +Infinity for halfway\n // values, even when they're negative. It's more common to round\n // away from 0 (e.g., this is what python and C++ do)\n return v < 0 ? -Math.round(-v) : Math.round(v);\n }\n ],\n 'floor': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.floor(n.evaluate(ctx))\n ],\n 'ceil': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.ceil(n.evaluate(ctx))\n ],\n 'filter-==': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => ctx.properties()[k.value] === v.value\n ],\n 'filter-id-==': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => ctx.id() === v.value\n ],\n 'filter-type-==': [\n BooleanType,\n [StringType],\n (ctx, [v]) => ctx.geometryType() === v.value\n ],\n 'filter-<': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => {\n const a = ctx.properties()[k.value];\n const b = v.value;\n return typeof a === typeof b && a < b;\n }\n ],\n 'filter-id-<': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = v.value;\n return typeof a === typeof b && a < b;\n }\n ],\n 'filter->': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => {\n const a = ctx.properties()[k.value];\n const b = v.value;\n return typeof a === typeof b && a > b;\n }\n ],\n 'filter-id->': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = v.value;\n return typeof a === typeof b && a > b;\n }\n ],\n 'filter-<=': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => {\n const a = ctx.properties()[k.value];\n const b = v.value;\n return typeof a === typeof b && a <= b;\n }\n ],\n 'filter-id-<=': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = v.value;\n return typeof a === typeof b && a <= b;\n }\n ],\n 'filter->=': [\n BooleanType,\n [\n StringType,\n ValueType\n ],\n (ctx, [k, v]) => {\n const a = ctx.properties()[k.value];\n const b = v.value;\n return typeof a === typeof b && a >= b;\n }\n ],\n 'filter-id->=': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = v.value;\n return typeof a === typeof b && a >= b;\n }\n ],\n 'filter-has': [\n BooleanType,\n [ValueType],\n (ctx, [k]) => k.value in ctx.properties()\n ],\n 'filter-has-id': [\n BooleanType,\n [],\n ctx => ctx.id() !== null && ctx.id() !== undefined\n ],\n 'filter-type-in': [\n BooleanType,\n [array$1(StringType)],\n (ctx, [v]) => v.value.indexOf(ctx.geometryType()) >= 0\n ],\n 'filter-id-in': [\n BooleanType,\n [array$1(ValueType)],\n (ctx, [v]) => v.value.indexOf(ctx.id()) >= 0\n ],\n 'filter-in-small': [\n BooleanType,\n [\n StringType,\n array$1(ValueType)\n ],\n // assumes v is an array literal\n (ctx, [k, v]) => v.value.indexOf(ctx.properties()[k.value]) >= 0\n ],\n 'filter-in-large': [\n BooleanType,\n [\n StringType,\n array$1(ValueType)\n ],\n // assumes v is a array literal with values sorted in ascending order and of a single type\n (ctx, [k, v]) => binarySearch(ctx.properties()[k.value], v.value, 0, v.value.length - 1)\n ],\n 'all': {\n type: BooleanType,\n overloads: [\n [\n [\n BooleanType,\n BooleanType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) && b.evaluate(ctx)\n ],\n [\n varargs(BooleanType),\n (ctx, args) => {\n for (const arg of args) {\n if (!arg.evaluate(ctx))\n return false;\n }\n return true;\n }\n ]\n ]\n },\n 'any': {\n type: BooleanType,\n overloads: [\n [\n [\n BooleanType,\n BooleanType\n ],\n (ctx, [a, b]) => a.evaluate(ctx) || b.evaluate(ctx)\n ],\n [\n varargs(BooleanType),\n (ctx, args) => {\n for (const arg of args) {\n if (arg.evaluate(ctx))\n return true;\n }\n return false;\n }\n ]\n ]\n },\n '!': [\n BooleanType,\n [BooleanType],\n (ctx, [b]) => !b.evaluate(ctx)\n ],\n 'is-supported-script': [\n BooleanType,\n [StringType],\n // At parse time this will always return true, so we need to exclude this expression with isGlobalPropertyConstant\n (ctx, [s]) => {\n const isSupportedScript = ctx.globals && ctx.globals.isSupportedScript;\n if (isSupportedScript) {\n return isSupportedScript(s.evaluate(ctx));\n }\n return true;\n }\n ],\n 'upcase': [\n StringType,\n [StringType],\n (ctx, [s]) => s.evaluate(ctx).toUpperCase()\n ],\n 'downcase': [\n StringType,\n [StringType],\n (ctx, [s]) => s.evaluate(ctx).toLowerCase()\n ],\n 'concat': [\n StringType,\n varargs(ValueType),\n (ctx, args) => args.map(arg => toString(arg.evaluate(ctx))).join('')\n ],\n 'resolved-locale': [\n StringType,\n [CollatorType],\n (ctx, [collator]) => collator.evaluate(ctx).resolvedLocale()\n ]\n});\nvar definitions = expressions;\n\n// \n/**\n * A type used for returning and propagating errors. The first element of the union\n * represents success and contains a value, and the second represents an error and\n * contains an error value.\n * @private\n */\nfunction success(value) {\n return {\n result: 'success',\n value\n };\n}\nfunction error(value) {\n return {\n result: 'error',\n value\n };\n}\n\n// \nfunction supportsPropertyExpression(spec) {\n return spec['property-type'] === 'data-driven';\n}\nfunction supportsZoomExpression(spec) {\n return !!spec.expression && spec.expression.parameters.indexOf('zoom') > -1;\n}\nfunction supportsInterpolation(spec) {\n return !!spec.expression && spec.expression.interpolated;\n}\n\nfunction isFunction(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nclass StyleExpression {\n constructor(expression, propertySpec) {\n this.expression = expression;\n this._warningHistory = {};\n this._evaluator = new EvaluationContext$1();\n this._defaultValue = propertySpec ? getDefaultValue(propertySpec) : null;\n this._enumValues = propertySpec && propertySpec.type === 'enum' ? propertySpec.values : null;\n }\n evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection, featureTileCoord, featureDistanceData) {\n this._evaluator.globals = globals;\n this._evaluator.feature = feature;\n this._evaluator.featureState = featureState;\n this._evaluator.canonical = canonical || null;\n this._evaluator.availableImages = availableImages || null;\n this._evaluator.formattedSection = formattedSection;\n this._evaluator.featureTileCoord = featureTileCoord || null;\n this._evaluator.featureDistanceData = featureDistanceData || null;\n return this.expression.evaluate(this._evaluator);\n }\n evaluate(globals, feature, featureState, canonical, availableImages, formattedSection, featureTileCoord, featureDistanceData) {\n this._evaluator.globals = globals;\n this._evaluator.feature = feature || null;\n this._evaluator.featureState = featureState || null;\n this._evaluator.canonical = canonical || null;\n this._evaluator.availableImages = availableImages || null;\n this._evaluator.formattedSection = formattedSection || null;\n this._evaluator.featureTileCoord = featureTileCoord || null;\n this._evaluator.featureDistanceData = featureDistanceData || null;\n try {\n const val = this.expression.evaluate(this._evaluator);\n // eslint-disable-next-line no-self-compare\n if (val === null || val === undefined || typeof val === 'number' && val !== val) {\n return this._defaultValue;\n }\n if (this._enumValues && !(val in this._enumValues)) {\n throw new RuntimeError$1(`Expected value to be one of ${ Object.keys(this._enumValues).map(v => JSON.stringify(v)).join(', ') }, but found ${ JSON.stringify(val) } instead.`);\n }\n return val;\n } catch (e) {\n if (!this._warningHistory[e.message]) {\n this._warningHistory[e.message] = true;\n if (typeof console !== 'undefined') {\n console.warn(e.message);\n }\n }\n return this._defaultValue;\n }\n }\n}\nfunction isExpression(expression) {\n return Array.isArray(expression) && expression.length > 0 && typeof expression[0] === 'string' && expression[0] in definitions;\n}\n/**\n * Parse and typecheck the given style spec JSON expression. If\n * options.defaultValue is provided, then the resulting StyleExpression's\n * `evaluate()` method will handle errors by logging a warning (once per\n * message) and returning the default value. Otherwise, it will throw\n * evaluation errors.\n *\n * @private\n */\nfunction createExpression(expression, propertySpec) {\n const parser = new ParsingContext$1(definitions, [], propertySpec ? getExpectedType(propertySpec) : undefined);\n // For string-valued properties, coerce to string at the top level rather than asserting.\n const parsed = parser.parse(expression, undefined, undefined, undefined, propertySpec && propertySpec.type === 'string' ? { typeAnnotation: 'coerce' } : undefined);\n if (!parsed) {\n return error(parser.errors);\n }\n return success(new StyleExpression(parsed, propertySpec));\n}\nclass ZoomConstantExpression {\n constructor(kind, expression) {\n this.kind = kind;\n this._styleExpression = expression;\n this.isStateDependent = kind !== 'constant' && !isStateConstant(expression.expression);\n }\n evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection) {\n return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n evaluate(globals, feature, featureState, canonical, availableImages, formattedSection) {\n return this._styleExpression.evaluate(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n}\nclass ZoomDependentExpression {\n constructor(kind, expression, zoomStops, interpolationType) {\n this.kind = kind;\n this.zoomStops = zoomStops;\n this._styleExpression = expression;\n this.isStateDependent = kind !== 'camera' && !isStateConstant(expression.expression);\n this.interpolationType = interpolationType;\n }\n evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection) {\n return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n evaluate(globals, feature, featureState, canonical, availableImages, formattedSection) {\n return this._styleExpression.evaluate(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n interpolationFactor(input, lower, upper) {\n if (this.interpolationType) {\n return Interpolate$1.interpolationFactor(this.interpolationType, input, lower, upper);\n } else {\n return 0;\n }\n }\n}\nfunction createPropertyExpression(expression, propertySpec) {\n expression = createExpression(expression, propertySpec);\n if (expression.result === 'error') {\n return expression;\n }\n const parsed = expression.value.expression;\n const isFeatureConstant$1 = isFeatureConstant(parsed);\n if (!isFeatureConstant$1 && !supportsPropertyExpression(propertySpec)) {\n return error([new ParsingError$1('', 'data expressions not supported')]);\n }\n const isZoomConstant = isGlobalPropertyConstant(parsed, [\n 'zoom',\n 'pitch',\n 'distance-from-center'\n ]);\n if (!isZoomConstant && !supportsZoomExpression(propertySpec)) {\n return error([new ParsingError$1('', 'zoom expressions not supported')]);\n }\n const zoomCurve = findZoomCurve(parsed);\n if (!zoomCurve && !isZoomConstant) {\n return error([new ParsingError$1('', '\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.')]);\n } else if (zoomCurve instanceof ParsingError$1) {\n return error([zoomCurve]);\n } else if (zoomCurve instanceof Interpolate$1 && !supportsInterpolation(propertySpec)) {\n return error([new ParsingError$1('', '\"interpolate\" expressions cannot be used with this property')]);\n }\n if (!zoomCurve) {\n return success(isFeatureConstant$1 ? new ZoomConstantExpression('constant', expression.value) : new ZoomConstantExpression('source', expression.value));\n }\n const interpolationType = zoomCurve instanceof Interpolate$1 ? zoomCurve.interpolation : undefined;\n return success(isFeatureConstant$1 ? new ZoomDependentExpression('camera', expression.value, zoomCurve.labels, interpolationType) : new ZoomDependentExpression('composite', expression.value, zoomCurve.labels, interpolationType));\n}\n// Zoom-dependent expressions may only use [\"zoom\"] as the input to a top-level \"step\" or \"interpolate\"\n// expression (collectively referred to as a \"curve\"). The curve may be wrapped in one or more \"let\" or\n// \"coalesce\" expressions.\nfunction findZoomCurve(expression) {\n let result = null;\n if (expression instanceof Let$1) {\n result = findZoomCurve(expression.result);\n } else if (expression instanceof Coalesce$1) {\n for (const arg of expression.args) {\n result = findZoomCurve(arg);\n if (result) {\n break;\n }\n }\n } else if ((expression instanceof Step$1 || expression instanceof Interpolate$1) && expression.input instanceof CompoundExpression$1 && expression.input.name === 'zoom') {\n result = expression;\n }\n if (result instanceof ParsingError$1) {\n return result;\n }\n expression.eachChild(child => {\n const childResult = findZoomCurve(child);\n if (childResult instanceof ParsingError$1) {\n result = childResult;\n } else if (!result && childResult) {\n result = new ParsingError$1('', '\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.');\n } else if (result && childResult && result !== childResult) {\n result = new ParsingError$1('', 'Only one zoom-based \"step\" or \"interpolate\" subexpression may be used in an expression.');\n }\n });\n return result;\n}\nfunction getExpectedType(spec) {\n const types = {\n color: ColorType,\n string: StringType,\n number: NumberType,\n enum: StringType,\n boolean: BooleanType,\n formatted: FormattedType,\n resolvedImage: ResolvedImageType\n };\n if (spec.type === 'array') {\n return array$1(types[spec.value] || ValueType, spec.length);\n }\n return types[spec.type];\n}\nfunction getDefaultValue(spec) {\n if (spec.type === 'color' && (isFunction(spec.default) || Array.isArray(spec.default))) {\n // Special case for heatmap-color: it uses the 'default:' to define a\n // default color ramp, but createExpression expects a simple value to fall\n // back to in case of runtime errors\n return new Color$1(0, 0, 0, 0);\n } else if (spec.type === 'color') {\n return Color$1.parse(spec.default) || null;\n } else if (spec.default === undefined) {\n return null;\n } else {\n return spec.default;\n }\n}\n\n// \n// Turn jsonlint-lines-primitives objects into primitive objects\nfunction unbundle(value) {\n if (value instanceof Number || value instanceof String || value instanceof Boolean) {\n return value.valueOf();\n } else {\n return value;\n }\n}\nfunction deepUnbundle(value) {\n if (Array.isArray(value)) {\n return value.map(deepUnbundle);\n } else if (value instanceof Object && !(value instanceof Number || value instanceof String || value instanceof Boolean)) {\n const unbundledValue = {};\n for (const key in value) {\n unbundledValue[key] = deepUnbundle(value[key]);\n }\n return unbundledValue;\n }\n return unbundle(value);\n}\n\nvar spec = {\"$version\":8,\"$root\":{\"version\":{\"required\":true,\"type\":\"enum\",\"values\":[8]},\"name\":{\"type\":\"string\"},\"metadata\":{\"type\":\"*\"},\"center\":{\"type\":\"array\",\"value\":\"number\"},\"zoom\":{\"type\":\"number\"},\"bearing\":{\"type\":\"number\",\"default\":0,\"period\":360,\"units\":\"degrees\"},\"pitch\":{\"type\":\"number\",\"default\":0,\"units\":\"degrees\"},\"light\":{\"type\":\"light\"},\"terrain\":{\"type\":\"terrain\"},\"fog\":{\"type\":\"fog\"},\"sources\":{\"required\":true,\"type\":\"sources\"},\"sprite\":{\"type\":\"string\"},\"glyphs\":{\"type\":\"string\"},\"transition\":{\"type\":\"transition\"},\"projection\":{\"type\":\"projection\"},\"layers\":{\"required\":true,\"type\":\"array\",\"value\":\"layer\"}},\"sources\":{\"*\":{\"type\":\"source\"}},\"source\":[\"source_vector\",\"source_raster\",\"source_raster_dem\",\"source_geojson\",\"source_video\",\"source_image\"],\"source_vector\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"vector\":{}}},\"url\":{\"type\":\"string\"},\"tiles\":{\"type\":\"array\",\"value\":\"string\"},\"bounds\":{\"type\":\"array\",\"value\":\"number\",\"length\":4,\"default\":[-180,-85.051129,180,85.051129]},\"scheme\":{\"type\":\"enum\",\"values\":{\"xyz\":{},\"tms\":{}},\"default\":\"xyz\"},\"minzoom\":{\"type\":\"number\",\"default\":0},\"maxzoom\":{\"type\":\"number\",\"default\":22},\"attribution\":{\"type\":\"string\"},\"promoteId\":{\"type\":\"promoteId\"},\"volatile\":{\"type\":\"boolean\",\"default\":false},\"*\":{\"type\":\"*\"}},\"source_raster\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"raster\":{}}},\"url\":{\"type\":\"string\"},\"tiles\":{\"type\":\"array\",\"value\":\"string\"},\"bounds\":{\"type\":\"array\",\"value\":\"number\",\"length\":4,\"default\":[-180,-85.051129,180,85.051129]},\"minzoom\":{\"type\":\"number\",\"default\":0},\"maxzoom\":{\"type\":\"number\",\"default\":22},\"tileSize\":{\"type\":\"number\",\"default\":512,\"units\":\"pixels\"},\"scheme\":{\"type\":\"enum\",\"values\":{\"xyz\":{},\"tms\":{}},\"default\":\"xyz\"},\"attribution\":{\"type\":\"string\"},\"volatile\":{\"type\":\"boolean\",\"default\":false},\"*\":{\"type\":\"*\"}},\"source_raster_dem\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"raster-dem\":{}}},\"url\":{\"type\":\"string\"},\"tiles\":{\"type\":\"array\",\"value\":\"string\"},\"bounds\":{\"type\":\"array\",\"value\":\"number\",\"length\":4,\"default\":[-180,-85.051129,180,85.051129]},\"minzoom\":{\"type\":\"number\",\"default\":0},\"maxzoom\":{\"type\":\"number\",\"default\":22},\"tileSize\":{\"type\":\"number\",\"default\":512,\"units\":\"pixels\"},\"attribution\":{\"type\":\"string\"},\"encoding\":{\"type\":\"enum\",\"values\":{\"terrarium\":{},\"mapbox\":{}},\"default\":\"mapbox\"},\"volatile\":{\"type\":\"boolean\",\"default\":false},\"*\":{\"type\":\"*\"}},\"source_geojson\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"geojson\":{}}},\"data\":{\"type\":\"*\"},\"maxzoom\":{\"type\":\"number\",\"default\":18},\"attribution\":{\"type\":\"string\"},\"buffer\":{\"type\":\"number\",\"default\":128,\"maximum\":512,\"minimum\":0},\"filter\":{\"type\":\"*\"},\"tolerance\":{\"type\":\"number\",\"default\":0.375},\"cluster\":{\"type\":\"boolean\",\"default\":false},\"clusterRadius\":{\"type\":\"number\",\"default\":50,\"minimum\":0},\"clusterMaxZoom\":{\"type\":\"number\"},\"clusterMinPoints\":{\"type\":\"number\"},\"clusterProperties\":{\"type\":\"*\"},\"lineMetrics\":{\"type\":\"boolean\",\"default\":false},\"generateId\":{\"type\":\"boolean\",\"default\":false},\"promoteId\":{\"type\":\"promoteId\"}},\"source_video\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"video\":{}}},\"urls\":{\"required\":true,\"type\":\"array\",\"value\":\"string\"},\"coordinates\":{\"required\":true,\"type\":\"array\",\"length\":4,\"value\":{\"type\":\"array\",\"length\":2,\"value\":\"number\"}}},\"source_image\":{\"type\":{\"required\":true,\"type\":\"enum\",\"values\":{\"image\":{}}},\"url\":{\"required\":true,\"type\":\"string\"},\"coordinates\":{\"required\":true,\"type\":\"array\",\"length\":4,\"value\":{\"type\":\"array\",\"length\":2,\"value\":\"number\"}}},\"layer\":{\"id\":{\"type\":\"string\",\"required\":true},\"type\":{\"type\":\"enum\",\"values\":{\"fill\":{},\"line\":{},\"symbol\":{},\"circle\":{},\"heatmap\":{},\"fill-extrusion\":{},\"raster\":{},\"hillshade\":{},\"background\":{},\"sky\":{}},\"required\":true},\"metadata\":{\"type\":\"*\"},\"source\":{\"type\":\"string\"},\"source-layer\":{\"type\":\"string\"},\"minzoom\":{\"type\":\"number\",\"minimum\":0,\"maximum\":24},\"maxzoom\":{\"type\":\"number\",\"minimum\":0,\"maximum\":24},\"filter\":{\"type\":\"filter\"},\"layout\":{\"type\":\"layout\"},\"paint\":{\"type\":\"paint\"}},\"layout\":[\"layout_fill\",\"layout_line\",\"layout_circle\",\"layout_heatmap\",\"layout_fill-extrusion\",\"layout_symbol\",\"layout_raster\",\"layout_hillshade\",\"layout_background\",\"layout_sky\"],\"layout_background\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_sky\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_fill\":{\"fill-sort-key\":{\"type\":\"number\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_circle\":{\"circle-sort-key\":{\"type\":\"number\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_heatmap\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_fill-extrusion\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"},\"fill-extrusion-edge-radius\":{\"type\":\"number\",\"private\":true,\"default\":0,\"minimum\":0,\"maximum\":1,\"property-type\":\"constant\"}},\"layout_line\":{\"line-cap\":{\"type\":\"enum\",\"values\":{\"butt\":{},\"round\":{},\"square\":{}},\"default\":\"butt\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-join\":{\"type\":\"enum\",\"values\":{\"bevel\":{},\"round\":{},\"miter\":{}},\"default\":\"miter\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-miter-limit\":{\"type\":\"number\",\"default\":2,\"requires\":[{\"line-join\":\"miter\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-round-limit\":{\"type\":\"number\",\"default\":1.05,\"requires\":[{\"line-join\":\"round\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-sort-key\":{\"type\":\"number\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_symbol\":{\"symbol-placement\":{\"type\":\"enum\",\"values\":{\"point\":{},\"line\":{},\"line-center\":{}},\"default\":\"point\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-spacing\":{\"type\":\"number\",\"default\":250,\"minimum\":1,\"units\":\"pixels\",\"requires\":[{\"symbol-placement\":\"line\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-avoid-edges\":{\"type\":\"boolean\",\"default\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-sort-key\":{\"type\":\"number\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"symbol-z-order\":{\"type\":\"enum\",\"values\":{\"auto\":{},\"viewport-y\":{},\"source\":{}},\"default\":\"auto\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-allow-overlap\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-ignore-placement\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-optional\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"icon-image\",\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-rotation-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{},\"auto\":{}},\"default\":\"auto\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-size\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"units\":\"factor of the original icon size\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-text-fit\":{\"type\":\"enum\",\"values\":{\"none\":{},\"width\":{},\"height\":{},\"both\":{}},\"default\":\"none\",\"requires\":[\"icon-image\",\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-text-fit-padding\":{\"type\":\"array\",\"value\":\"number\",\"length\":4,\"default\":[0,0,0,0],\"units\":\"pixels\",\"requires\":[\"icon-image\",\"text-field\",{\"icon-text-fit\":[\"both\",\"width\",\"height\"]}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-image\":{\"type\":\"resolvedImage\",\"tokens\":true,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-rotate\":{\"type\":\"number\",\"default\":0,\"period\":360,\"units\":\"degrees\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-padding\":{\"type\":\"number\",\"default\":2,\"minimum\":0,\"units\":\"pixels\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-keep-upright\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"icon-image\",{\"icon-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-offset\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-anchor\":{\"type\":\"enum\",\"values\":{\"center\":{},\"left\":{},\"right\":{},\"top\":{},\"bottom\":{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},\"default\":\"center\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-pitch-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{},\"auto\":{}},\"default\":\"auto\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-pitch-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{},\"auto\":{}},\"default\":\"auto\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotation-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{},\"auto\":{}},\"default\":\"auto\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-field\":{\"type\":\"formatted\",\"default\":\"\",\"tokens\":true,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-font\":{\"type\":\"array\",\"value\":\"string\",\"default\":[\"Open Sans Regular\",\"Arial Unicode MS Regular\"],\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-size\":{\"type\":\"number\",\"default\":16,\"minimum\":0,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-width\":{\"type\":\"number\",\"default\":10,\"minimum\":0,\"units\":\"ems\",\"requires\":[\"text-field\",{\"symbol-placement\":[\"point\"]}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-line-height\":{\"type\":\"number\",\"default\":1.2,\"units\":\"ems\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-letter-spacing\":{\"type\":\"number\",\"default\":0,\"units\":\"ems\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-justify\":{\"type\":\"enum\",\"values\":{\"auto\":{},\"left\":{},\"center\":{},\"right\":{}},\"default\":\"center\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-radial-offset\":{\"type\":\"number\",\"units\":\"ems\",\"default\":0,\"requires\":[\"text-field\"],\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]}},\"text-variable-anchor\":{\"type\":\"array\",\"value\":\"enum\",\"values\":{\"center\":{},\"left\":{},\"right\":{},\"top\":{},\"bottom\":{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},\"requires\":[\"text-field\",{\"symbol-placement\":[\"point\"]}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-anchor\":{\"type\":\"enum\",\"values\":{\"center\":{},\"left\":{},\"right\":{},\"top\":{},\"bottom\":{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},\"default\":\"center\",\"requires\":[\"text-field\",{\"!\":\"text-variable-anchor\"}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-angle\":{\"type\":\"number\",\"default\":45,\"units\":\"degrees\",\"requires\":[\"text-field\",{\"symbol-placement\":[\"line\",\"line-center\"]}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-writing-mode\":{\"type\":\"array\",\"value\":\"enum\",\"values\":{\"horizontal\":{},\"vertical\":{}},\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotate\":{\"type\":\"number\",\"default\":0,\"period\":360,\"units\":\"degrees\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-padding\":{\"type\":\"number\",\"default\":2,\"minimum\":0,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-keep-upright\":{\"type\":\"boolean\",\"default\":true,\"requires\":[\"text-field\",{\"text-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-transform\":{\"type\":\"enum\",\"values\":{\"none\":{},\"uppercase\":{},\"lowercase\":{}},\"default\":\"none\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-offset\":{\"type\":\"array\",\"value\":\"number\",\"units\":\"ems\",\"length\":2,\"default\":[0,0],\"requires\":[\"text-field\",{\"!\":\"text-radial-offset\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-allow-overlap\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-ignore-placement\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-optional\":{\"type\":\"boolean\",\"default\":false,\"requires\":[\"text-field\",\"icon-image\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_raster\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"layout_hillshade\":{\"visibility\":{\"type\":\"enum\",\"values\":{\"visible\":{},\"none\":{}},\"default\":\"visible\",\"property-type\":\"constant\"}},\"filter\":{\"type\":\"array\",\"value\":\"*\"},\"filter_symbol\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\",\"pitch\",\"distance-from-center\"]}},\"filter_fill\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_line\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_circle\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_fill-extrusion\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_heatmap\":{\"type\":\"boolean\",\"default\":false,\"transition\":false,\"property-type\":\"data-driven\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]}},\"filter_operator\":{\"type\":\"enum\",\"values\":{\"==\":{},\"!=\":{},\">\":{},\">=\":{},\"<\":{},\"<=\":{},\"in\":{},\"!in\":{},\"all\":{},\"any\":{},\"none\":{},\"has\":{},\"!has\":{},\"within\":{}}},\"geometry_type\":{\"type\":\"enum\",\"values\":{\"Point\":{},\"LineString\":{},\"Polygon\":{}}},\"function\":{\"expression\":{\"type\":\"expression\"},\"stops\":{\"type\":\"array\",\"value\":\"function_stop\"},\"base\":{\"type\":\"number\",\"default\":1,\"minimum\":0},\"property\":{\"type\":\"string\",\"default\":\"$zoom\"},\"type\":{\"type\":\"enum\",\"values\":{\"identity\":{},\"exponential\":{},\"interval\":{},\"categorical\":{}},\"default\":\"exponential\"},\"colorSpace\":{\"type\":\"enum\",\"values\":{\"rgb\":{},\"lab\":{},\"hcl\":{}},\"default\":\"rgb\"},\"default\":{\"type\":\"*\",\"required\":false}},\"function_stop\":{\"type\":\"array\",\"minimum\":0,\"maximum\":24,\"value\":[\"number\",\"color\"],\"length\":2},\"expression\":{\"type\":\"array\",\"value\":\"*\",\"minimum\":1},\"expression_name\":{\"type\":\"enum\",\"values\":{\"let\":{\"group\":\"Variable binding\"},\"var\":{\"group\":\"Variable binding\"},\"literal\":{\"group\":\"Types\"},\"array\":{\"group\":\"Types\"},\"at\":{\"group\":\"Lookup\"},\"in\":{\"group\":\"Lookup\"},\"index-of\":{\"group\":\"Lookup\"},\"slice\":{\"group\":\"Lookup\"},\"case\":{\"group\":\"Decision\"},\"match\":{\"group\":\"Decision\"},\"coalesce\":{\"group\":\"Decision\"},\"step\":{\"group\":\"Ramps, scales, curves\"},\"interpolate\":{\"group\":\"Ramps, scales, curves\"},\"interpolate-hcl\":{\"group\":\"Ramps, scales, curves\"},\"interpolate-lab\":{\"group\":\"Ramps, scales, curves\"},\"ln2\":{\"group\":\"Math\"},\"pi\":{\"group\":\"Math\"},\"e\":{\"group\":\"Math\"},\"typeof\":{\"group\":\"Types\"},\"string\":{\"group\":\"Types\"},\"number\":{\"group\":\"Types\"},\"boolean\":{\"group\":\"Types\"},\"object\":{\"group\":\"Types\"},\"collator\":{\"group\":\"Types\"},\"format\":{\"group\":\"Types\"},\"image\":{\"group\":\"Types\"},\"number-format\":{\"group\":\"Types\"},\"to-string\":{\"group\":\"Types\"},\"to-number\":{\"group\":\"Types\"},\"to-boolean\":{\"group\":\"Types\"},\"to-rgba\":{\"group\":\"Color\"},\"to-color\":{\"group\":\"Types\"},\"rgb\":{\"group\":\"Color\"},\"rgba\":{\"group\":\"Color\"},\"get\":{\"group\":\"Lookup\"},\"has\":{\"group\":\"Lookup\"},\"length\":{\"group\":\"Lookup\"},\"properties\":{\"group\":\"Feature data\"},\"feature-state\":{\"group\":\"Feature data\"},\"geometry-type\":{\"group\":\"Feature data\"},\"id\":{\"group\":\"Feature data\"},\"zoom\":{\"group\":\"Camera\"},\"pitch\":{\"group\":\"Camera\"},\"distance-from-center\":{\"group\":\"Camera\"},\"heatmap-density\":{\"group\":\"Heatmap\"},\"line-progress\":{\"group\":\"Feature data\"},\"sky-radial-progress\":{\"group\":\"sky\"},\"accumulated\":{\"group\":\"Feature data\"},\"+\":{\"group\":\"Math\"},\"*\":{\"group\":\"Math\"},\"-\":{\"group\":\"Math\"},\"/\":{\"group\":\"Math\"},\"%\":{\"group\":\"Math\"},\"^\":{\"group\":\"Math\"},\"sqrt\":{\"group\":\"Math\"},\"log10\":{\"group\":\"Math\"},\"ln\":{\"group\":\"Math\"},\"log2\":{\"group\":\"Math\"},\"sin\":{\"group\":\"Math\"},\"cos\":{\"group\":\"Math\"},\"tan\":{\"group\":\"Math\"},\"asin\":{\"group\":\"Math\"},\"acos\":{\"group\":\"Math\"},\"atan\":{\"group\":\"Math\"},\"min\":{\"group\":\"Math\"},\"max\":{\"group\":\"Math\"},\"round\":{\"group\":\"Math\"},\"abs\":{\"group\":\"Math\"},\"ceil\":{\"group\":\"Math\"},\"floor\":{\"group\":\"Math\"},\"distance\":{\"group\":\"Math\"},\"==\":{\"group\":\"Decision\"},\"!=\":{\"group\":\"Decision\"},\">\":{\"group\":\"Decision\"},\"<\":{\"group\":\"Decision\"},\">=\":{\"group\":\"Decision\"},\"<=\":{\"group\":\"Decision\"},\"all\":{\"group\":\"Decision\"},\"any\":{\"group\":\"Decision\"},\"!\":{\"group\":\"Decision\"},\"within\":{\"group\":\"Decision\"},\"is-supported-script\":{\"group\":\"String\"},\"upcase\":{\"group\":\"String\"},\"downcase\":{\"group\":\"String\"},\"concat\":{\"group\":\"String\"},\"resolved-locale\":{\"group\":\"String\"}}},\"fog\":{\"range\":{\"type\":\"array\",\"default\":[0.5,10],\"minimum\":-20,\"maximum\":20,\"length\":2,\"value\":\"number\",\"property-type\":\"data-constant\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]}},\"color\":{\"type\":\"color\",\"property-type\":\"data-constant\",\"default\":\"#ffffff\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"high-color\":{\"type\":\"color\",\"property-type\":\"data-constant\",\"default\":\"#245cdf\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"space-color\":{\"type\":\"color\",\"property-type\":\"data-constant\",\"default\":[\"interpolate\",[\"linear\"],[\"zoom\"],4,\"#010b19\",7,\"#367ab9\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"horizon-blend\":{\"type\":\"number\",\"property-type\":\"data-constant\",\"default\":[\"interpolate\",[\"linear\"],[\"zoom\"],4,0.2,7,0.1],\"minimum\":0,\"maximum\":1,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"star-intensity\":{\"type\":\"number\",\"property-type\":\"data-constant\",\"default\":[\"interpolate\",[\"linear\"],[\"zoom\"],5,0.35,6,0],\"minimum\":0,\"maximum\":1,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true}},\"light\":{\"anchor\":{\"type\":\"enum\",\"default\":\"viewport\",\"values\":{\"map\":{},\"viewport\":{}},\"property-type\":\"data-constant\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]}},\"position\":{\"type\":\"array\",\"default\":[1.15,210,30],\"length\":3,\"value\":\"number\",\"property-type\":\"data-constant\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]}},\"color\":{\"type\":\"color\",\"property-type\":\"data-constant\",\"default\":\"#ffffff\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"intensity\":{\"type\":\"number\",\"property-type\":\"data-constant\",\"default\":0.5,\"minimum\":0,\"maximum\":1,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true}},\"projection\":{\"name\":{\"type\":\"enum\",\"values\":{\"albers\":{},\"equalEarth\":{},\"equirectangular\":{},\"lambertConformalConic\":{},\"mercator\":{},\"naturalEarth\":{},\"winkelTripel\":{},\"globe\":{}},\"default\":\"mercator\",\"required\":true},\"center\":{\"type\":\"array\",\"length\":2,\"value\":\"number\",\"property-type\":\"data-constant\",\"minimum\":[-180,-90],\"maximum\":[180,90],\"transition\":false,\"requires\":[{\"name\":[\"albers\",\"lambertConformalConic\"]}]},\"parallels\":{\"type\":\"array\",\"length\":2,\"value\":\"number\",\"property-type\":\"data-constant\",\"minimum\":[-90,-90],\"maximum\":[90,90],\"transition\":false,\"requires\":[{\"name\":[\"albers\",\"lambertConformalConic\"]}]}},\"terrain\":{\"source\":{\"type\":\"string\",\"required\":true},\"exaggeration\":{\"type\":\"number\",\"property-type\":\"data-constant\",\"default\":1,\"minimum\":0,\"maximum\":1000,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true,\"requires\":[\"source\"]}},\"paint\":[\"paint_fill\",\"paint_line\",\"paint_circle\",\"paint_heatmap\",\"paint_fill-extrusion\",\"paint_symbol\",\"paint_raster\",\"paint_hillshade\",\"paint_background\",\"paint_sky\"],\"paint_fill\":{\"fill-antialias\":{\"type\":\"boolean\",\"default\":true,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[{\"!\":\"fill-pattern\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-outline-color\":{\"type\":\"color\",\"transition\":true,\"requires\":[{\"!\":\"fill-pattern\"},{\"fill-antialias\":true}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"fill-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-pattern\":{\"type\":\"resolvedImage\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"}},\"paint_fill-extrusion\":{\"fill-extrusion-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[{\"!\":\"fill-extrusion-pattern\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"fill-extrusion-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-pattern\":{\"type\":\"resolvedImage\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-height\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"units\":\"meters\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-base\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"units\":\"meters\",\"transition\":true,\"requires\":[\"fill-extrusion-height\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-vertical-gradient\":{\"type\":\"boolean\",\"default\":true,\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-ambient-occlusion-intensity\":{\"property-type\":\"data-constant\",\"type\":\"number\",\"private\":true,\"default\":0,\"minimum\":0,\"maximum\":1,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true},\"fill-extrusion-ambient-occlusion-radius\":{\"property-type\":\"data-constant\",\"type\":\"number\",\"private\":true,\"default\":3,\"minimum\":0,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"transition\":true,\"requires\":[\"fill-extrusion-edge-radius\"]}},\"paint_line\":{\"line-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[{\"!\":\"line-pattern\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"line-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-width\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-gap-width\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-offset\":{\"type\":\"number\",\"default\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-blur\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-dasharray\":{\"type\":\"array\",\"value\":\"number\",\"minimum\":0,\"transition\":false,\"units\":\"line widths\",\"requires\":[{\"!\":\"line-pattern\"}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-pattern\":{\"type\":\"resolvedImage\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-gradient\":{\"type\":\"color\",\"transition\":false,\"requires\":[{\"!\":\"line-pattern\"},{\"source\":\"geojson\",\"has\":{\"lineMetrics\":true}}],\"expression\":{\"interpolated\":true,\"parameters\":[\"line-progress\"]},\"property-type\":\"color-ramp\"},\"line-trim-offset\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"minimum\":[0,0],\"maximum\":[1,1],\"transition\":false,\"requires\":[{\"source\":\"geojson\",\"has\":{\"lineMetrics\":true}}],\"property-type\":\"constant\"}},\"paint_circle\":{\"circle-radius\":{\"type\":\"number\",\"default\":5,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-blur\":{\"type\":\"number\",\"default\":0,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"circle-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-scale\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-alignment\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"viewport\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-stroke-width\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"}},\"paint_heatmap\":{\"heatmap-radius\":{\"type\":\"number\",\"default\":30,\"minimum\":1,\"transition\":true,\"units\":\"pixels\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-weight\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"transition\":false,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-intensity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"heatmap-color\":{\"type\":\"color\",\"default\":[\"interpolate\",[\"linear\"],[\"heatmap-density\"],0,\"rgba(0, 0, 255, 0)\",0.1,\"royalblue\",0.3,\"cyan\",0.5,\"lime\",0.7,\"yellow\",1,\"red\"],\"transition\":false,\"expression\":{\"interpolated\":true,\"parameters\":[\"heatmap-density\"]},\"property-type\":\"color-ramp\"},\"heatmap-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_symbol\":{\"icon-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-color\":{\"type\":\"color\",\"default\":\"rgba(0, 0, 0, 0)\",\"transition\":true,\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-width\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-blur\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"requires\":[\"icon-image\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"icon-image\",\"icon-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"overridable\":true,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-color\":{\"type\":\"color\",\"default\":\"rgba(0, 0, 0, 0)\",\"transition\":true,\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-width\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-blur\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"transition\":true,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-translate\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"default\":[0,0],\"transition\":true,\"units\":\"pixels\",\"requires\":[\"text-field\"],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-translate-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"map\",\"requires\":[\"text-field\",\"text-translate\"],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_raster\":{\"raster-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-hue-rotate\":{\"type\":\"number\",\"default\":0,\"period\":360,\"transition\":true,\"units\":\"degrees\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-min\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-max\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-saturation\":{\"type\":\"number\",\"default\":0,\"minimum\":-1,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-contrast\":{\"type\":\"number\",\"default\":0,\"minimum\":-1,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-resampling\":{\"type\":\"enum\",\"values\":{\"linear\":{},\"nearest\":{}},\"default\":\"linear\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-fade-duration\":{\"type\":\"number\",\"default\":300,\"minimum\":0,\"transition\":false,\"units\":\"milliseconds\",\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_hillshade\":{\"hillshade-illumination-direction\":{\"type\":\"number\",\"default\":335,\"minimum\":0,\"maximum\":359,\"transition\":false,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-illumination-anchor\":{\"type\":\"enum\",\"values\":{\"map\":{},\"viewport\":{}},\"default\":\"viewport\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-exaggeration\":{\"type\":\"number\",\"default\":0.5,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-shadow-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-highlight-color\":{\"type\":\"color\",\"default\":\"#FFFFFF\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-accent-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_background\":{\"background-color\":{\"type\":\"color\",\"default\":\"#000000\",\"transition\":true,\"requires\":[{\"!\":\"background-pattern\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"background-pattern\":{\"type\":\"resolvedImage\",\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"background-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"paint_sky\":{\"sky-type\":{\"type\":\"enum\",\"values\":{\"gradient\":{},\"atmosphere\":{}},\"default\":\"atmosphere\",\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"sky-atmosphere-sun\":{\"type\":\"array\",\"value\":\"number\",\"length\":2,\"units\":\"degrees\",\"minimum\":[0,0],\"maximum\":[360,180],\"transition\":false,\"requires\":[{\"sky-type\":\"atmosphere\"}],\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"sky-atmosphere-sun-intensity\":{\"type\":\"number\",\"requires\":[{\"sky-type\":\"atmosphere\"}],\"default\":10,\"minimum\":0,\"maximum\":100,\"transition\":false,\"property-type\":\"data-constant\"},\"sky-gradient-center\":{\"type\":\"array\",\"requires\":[{\"sky-type\":\"gradient\"}],\"value\":\"number\",\"default\":[0,0],\"length\":2,\"units\":\"degrees\",\"minimum\":[0,0],\"maximum\":[360,180],\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"sky-gradient-radius\":{\"type\":\"number\",\"requires\":[{\"sky-type\":\"gradient\"}],\"default\":90,\"minimum\":0,\"maximum\":180,\"transition\":false,\"expression\":{\"interpolated\":false,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"},\"sky-gradient\":{\"type\":\"color\",\"default\":[\"interpolate\",[\"linear\"],[\"sky-radial-progress\"],0.8,\"#87ceeb\",1,\"white\"],\"transition\":false,\"requires\":[{\"sky-type\":\"gradient\"}],\"expression\":{\"interpolated\":true,\"parameters\":[\"sky-radial-progress\"]},\"property-type\":\"color-ramp\"},\"sky-atmosphere-halo-color\":{\"type\":\"color\",\"default\":\"white\",\"transition\":false,\"requires\":[{\"sky-type\":\"atmosphere\"}],\"property-type\":\"data-constant\"},\"sky-atmosphere-color\":{\"type\":\"color\",\"default\":\"white\",\"transition\":false,\"requires\":[{\"sky-type\":\"atmosphere\"}],\"property-type\":\"data-constant\"},\"sky-opacity\":{\"type\":\"number\",\"default\":1,\"minimum\":0,\"maximum\":1,\"transition\":true,\"expression\":{\"interpolated\":true,\"parameters\":[\"zoom\"]},\"property-type\":\"data-constant\"}},\"transition\":{\"duration\":{\"type\":\"number\",\"default\":300,\"minimum\":0,\"units\":\"milliseconds\"},\"delay\":{\"type\":\"number\",\"default\":0,\"minimum\":0,\"units\":\"milliseconds\"}},\"property-type\":{\"data-driven\":{\"type\":\"property-type\"},\"color-ramp\":{\"type\":\"property-type\"},\"data-constant\":{\"type\":\"property-type\"},\"constant\":{\"type\":\"property-type\"}},\"promoteId\":{\"*\":{\"type\":\"string\"}}};\n\n// \nfunction isExpressionFilter(filter) {\n if (filter === true || filter === false) {\n return true;\n }\n if (!Array.isArray(filter) || filter.length === 0) {\n return false;\n }\n switch (filter[0]) {\n case 'has':\n return filter.length >= 2 && filter[1] !== '$id' && filter[1] !== '$type';\n case 'in':\n return filter.length >= 3 && (typeof filter[1] !== 'string' || Array.isArray(filter[2]));\n case '!in':\n case '!has':\n case 'none':\n return false;\n case '==':\n case '!=':\n case '>':\n case '>=':\n case '<':\n case '<=':\n return filter.length !== 3 || (Array.isArray(filter[1]) || Array.isArray(filter[2]));\n case 'any':\n case 'all':\n for (const f of filter.slice(1)) {\n if (!isExpressionFilter(f) && typeof f !== 'boolean') {\n return false;\n }\n }\n return true;\n default:\n return true;\n }\n}\n/**\n * Given a filter expressed as nested arrays, return a new function\n * that evaluates whether a given feature (with a .properties or .tags property)\n * passes its test.\n *\n * @private\n * @param {Array} filter mapbox gl filter\n * @param {string} layerType the type of the layer this filter will be applied to.\n * @returns {Function} filter-evaluating function\n */\nfunction createFilter(filter, layerType = 'fill') {\n if (filter === null || filter === undefined) {\n return {\n filter: () => true,\n needGeometry: false,\n needFeature: false\n };\n }\n if (!isExpressionFilter(filter)) {\n filter = convertFilter(filter);\n }\n const filterExp = filter;\n let staticFilter = true;\n try {\n staticFilter = extractStaticFilter(filterExp);\n } catch (e) {\n console.warn(`Failed to extract static filter. Filter will continue working, but at higher memory usage and slower framerate.\nThis is most likely a bug, please report this via https://github.com/mapbox/mapbox-gl-js/issues/new?assignees=&labels=&template=Bug_report.md\nand paste the contents of this message in the report.\nThank you!\nFilter Expression:\n${ JSON.stringify(filterExp, null, 2) }\n `);\n }\n // Compile the static component of the filter\n const filterSpec = spec[`filter_${ layerType }`];\n const compiledStaticFilter = createExpression(staticFilter, filterSpec);\n let filterFunc = null;\n if (compiledStaticFilter.result === 'error') {\n throw new Error(compiledStaticFilter.value.map(err => `${ err.key }: ${ err.message }`).join(', '));\n } else {\n filterFunc = (globalProperties, feature, canonical) => compiledStaticFilter.value.evaluate(globalProperties, feature, {}, canonical);\n }\n // If the static component is not equal to the entire filter then we have a dynamic component\n // Compile the dynamic component separately\n let dynamicFilterFunc = null;\n let needFeature = null;\n if (staticFilter !== filterExp) {\n const compiledDynamicFilter = createExpression(filterExp, filterSpec);\n if (compiledDynamicFilter.result === 'error') {\n throw new Error(compiledDynamicFilter.value.map(err => `${ err.key }: ${ err.message }`).join(', '));\n } else {\n dynamicFilterFunc = (globalProperties, feature, canonical, featureTileCoord, featureDistanceData) => compiledDynamicFilter.value.evaluate(globalProperties, feature, {}, canonical, undefined, undefined, featureTileCoord, featureDistanceData);\n needFeature = !isFeatureConstant(compiledDynamicFilter.value.expression);\n }\n }\n filterFunc = filterFunc;\n const needGeometry = geometryNeeded(staticFilter);\n return {\n filter: filterFunc,\n dynamicFilter: dynamicFilterFunc ? dynamicFilterFunc : undefined,\n needGeometry,\n needFeature: !!needFeature\n };\n}\nfunction extractStaticFilter(filter) {\n if (!isDynamicFilter(filter)) {\n return filter;\n }\n // Shallow copy so we can replace expressions in-place\n let result = deepUnbundle(filter);\n // 1. Union branches\n unionDynamicBranches(result);\n // 2. Collapse dynamic conditions to `true`\n result = collapseDynamicBooleanExpressions(result);\n return result;\n}\nfunction collapseDynamicBooleanExpressions(expression) {\n if (!Array.isArray(expression)) {\n return expression;\n }\n const collapsed = collapsedExpression(expression);\n if (collapsed === true) {\n return collapsed;\n } else {\n return collapsed.map(subExpression => collapseDynamicBooleanExpressions(subExpression));\n }\n}\n/**\n * Traverses the expression and replaces all instances of branching on a\n * `dynamic` conditional (such as `['pitch']` or `['distance-from-center']`)\n * into an `any` expression.\n * This ensures that all possible outcomes of a `dynamic` branch are considered\n * when evaluating the expression upfront during filtering.\n *\n * @param {Array} filter the filter expression mutated in-place.\n */\nfunction unionDynamicBranches(filter) {\n let isBranchingDynamically = false;\n const branches = [];\n if (filter[0] === 'case') {\n for (let i = 1; i < filter.length - 1; i += 2) {\n isBranchingDynamically = isBranchingDynamically || isDynamicFilter(filter[i]);\n branches.push(filter[i + 1]);\n }\n branches.push(filter[filter.length - 1]);\n } else if (filter[0] === 'match') {\n isBranchingDynamically = isBranchingDynamically || isDynamicFilter(filter[1]);\n for (let i = 2; i < filter.length - 1; i += 2) {\n branches.push(filter[i + 1]);\n }\n branches.push(filter[filter.length - 1]);\n } else if (filter[0] === 'step') {\n isBranchingDynamically = isBranchingDynamically || isDynamicFilter(filter[1]);\n for (let i = 1; i < filter.length - 1; i += 2) {\n branches.push(filter[i + 1]);\n }\n }\n if (isBranchingDynamically) {\n filter.length = 0;\n filter.push('any', ...branches);\n }\n // traverse and recurse into children\n for (let i = 1; i < filter.length; i++) {\n unionDynamicBranches(filter[i]);\n }\n}\nfunction isDynamicFilter(filter) {\n // Base Cases\n if (!Array.isArray(filter)) {\n return false;\n }\n if (isRootExpressionDynamic(filter[0])) {\n return true;\n }\n for (let i = 1; i < filter.length; i++) {\n const child = filter[i];\n if (isDynamicFilter(child)) {\n return true;\n }\n }\n return false;\n}\nfunction isRootExpressionDynamic(expression) {\n return expression === 'pitch' || expression === 'distance-from-center';\n}\nconst dynamicConditionExpressions = new Set([\n 'in',\n '==',\n '!=',\n '>',\n '>=',\n '<',\n '<=',\n 'to-boolean'\n]);\nfunction collapsedExpression(expression) {\n if (dynamicConditionExpressions.has(expression[0])) {\n for (let i = 1; i < expression.length; i++) {\n const param = expression[i];\n if (isDynamicFilter(param)) {\n return true;\n }\n }\n }\n return expression;\n}\n// Comparison function to sort numbers and strings\nfunction compare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\nfunction geometryNeeded(filter) {\n if (!Array.isArray(filter))\n return false;\n if (filter[0] === 'within')\n return true;\n for (let index = 1; index < filter.length; index++) {\n if (geometryNeeded(filter[index]))\n return true;\n }\n return false;\n}\nfunction convertFilter(filter) {\n if (!filter)\n return true;\n const op = filter[0];\n if (filter.length <= 1)\n return op !== 'any';\n const converted = op === '==' ? convertComparisonOp(filter[1], filter[2], '==') : op === '!=' ? convertNegation(convertComparisonOp(filter[1], filter[2], '==')) : op === '<' || op === '>' || op === '<=' || op === '>=' ? convertComparisonOp(filter[1], filter[2], op) : op === 'any' ? convertDisjunctionOp(filter.slice(1)) : op === 'all' ? ['all'].concat(filter.slice(1).map(convertFilter)) : op === 'none' ? ['all'].concat(filter.slice(1).map(convertFilter).map(convertNegation)) : op === 'in' ? convertInOp(filter[1], filter.slice(2)) : op === '!in' ? convertNegation(convertInOp(filter[1], filter.slice(2))) : op === 'has' ? convertHasOp(filter[1]) : op === '!has' ? convertNegation(convertHasOp(filter[1])) : op === 'within' ? filter : true;\n return converted;\n}\nfunction convertComparisonOp(property, value, op) {\n switch (property) {\n case '$type':\n return [\n `filter-type-${ op }`,\n value\n ];\n case '$id':\n return [\n `filter-id-${ op }`,\n value\n ];\n default:\n return [\n `filter-${ op }`,\n property,\n value\n ];\n }\n}\nfunction convertDisjunctionOp(filters) {\n return ['any'].concat(filters.map(convertFilter));\n}\nfunction convertInOp(property, values) {\n if (values.length === 0) {\n return false;\n }\n switch (property) {\n case '$type':\n return [\n `filter-type-in`,\n [\n 'literal',\n values\n ]\n ];\n case '$id':\n return [\n `filter-id-in`,\n [\n 'literal',\n values\n ]\n ];\n default:\n if (values.length > 200 && !values.some(v => typeof v !== typeof values[0])) {\n return [\n 'filter-in-large',\n property,\n [\n 'literal',\n values.sort(compare)\n ]\n ];\n } else {\n return [\n 'filter-in-small',\n property,\n [\n 'literal',\n values\n ]\n ];\n }\n }\n}\nfunction convertHasOp(property) {\n switch (property) {\n case '$type':\n return true;\n case '$id':\n return [`filter-has-id`];\n default:\n return [\n `filter-has`,\n property\n ];\n }\n}\nfunction convertNegation(filter) {\n return [\n '!',\n filter\n ];\n}\n\n// \nvar refProperties = [\n 'type',\n 'source',\n 'source-layer',\n 'minzoom',\n 'maxzoom',\n 'filter',\n 'layout'\n];\n\n// \nfunction deref(layer, parent) {\n const result = {};\n for (const k in layer) {\n if (k !== 'ref') {\n result[k] = layer[k];\n }\n }\n refProperties.forEach(k => {\n if (k in parent) {\n result[k] = parent[k];\n }\n });\n return result;\n}\n/**\n * Given an array of layers, some of which may contain `ref` properties\n * whose value is the `id` of another property, return a new array where\n * such layers have been augmented with the 'type', 'source', etc. properties\n * from the parent layer, and the `ref` property has been removed.\n *\n * The input is not modified. The output may contain references to portions\n * of the input.\n *\n * @private\n * @param {Array} layers\n * @returns {Array}\n */\nfunction derefLayers(layers) {\n layers = layers.slice();\n const map = Object.create(null);\n for (let i = 0; i < layers.length; i++) {\n map[layers[i].id] = layers[i];\n }\n for (let i = 0; i < layers.length; i++) {\n if ('ref' in layers[i]) {\n layers[i] = deref(layers[i], map[layers[i].ref]);\n }\n }\n return layers;\n}\n\nvar fontWeights = {\n thin: 100,\n hairline: 100,\n 'ultra-light': 200,\n 'extra-light': 200,\n light: 300,\n book: 300,\n regular: 400,\n normal: 400,\n plain: 400,\n roman: 400,\n standard: 400,\n medium: 500,\n 'semi-bold': 600,\n 'demi-bold': 600,\n bold: 700,\n 'extra-bold': 800,\n 'ultra-bold': 800,\n heavy: 900,\n black: 900,\n 'heavy-black': 900,\n fat: 900,\n poster: 900,\n 'ultra-black': 950,\n 'extra-black': 950\n};\nvar sp = ' ';\nvar italicRE = /(italic|oblique)$/i;\nvar fontCache = {};\nvar mapboxToCssFont = function (fonts, size, lineHeight) {\n var cssData = fontCache[fonts];\n if (!cssData) {\n if (!Array.isArray(fonts)) {\n fonts = [fonts];\n }\n var weight = 400;\n var style = 'normal';\n var fontFamilies = [];\n var haveWeight, haveStyle;\n for (var i = 0, ii = fonts.length; i < ii; ++i) {\n var font = fonts[i];\n var parts = font.split(' ');\n var maybeWeight = parts[parts.length - 1].toLowerCase();\n if (maybeWeight == 'normal' || maybeWeight == 'italic' || maybeWeight == 'oblique') {\n style = haveStyle ? style : maybeWeight;\n haveStyle = true;\n parts.pop();\n maybeWeight = parts[parts.length - 1].toLowerCase();\n } else if (italicRE.test(maybeWeight)) {\n maybeWeight = maybeWeight.replace(italicRE, '');\n style = haveStyle ? style : parts[parts.length - 1].replace(maybeWeight, '');\n haveStyle = true;\n }\n for (var w in fontWeights) {\n var previousPart = parts.length > 1 ? parts[parts.length - 2].toLowerCase() : '';\n if (maybeWeight == w || maybeWeight == w.replace('-', '') || previousPart + '-' + maybeWeight == w) {\n weight = haveWeight ? weight : fontWeights[w];\n parts.pop();\n if (previousPart && w.startsWith(previousPart)) {\n parts.pop();\n }\n break;\n }\n }\n if (!haveWeight && typeof maybeWeight == 'number') {\n weight = maybeWeight;\n haveWeight = true;\n }\n var fontFamily = parts.join(sp).replace('Klokantech Noto Sans', 'Noto Sans');\n if (fontFamily.indexOf(sp) !== -1) {\n fontFamily = '\"' + fontFamily + '\"';\n }\n fontFamilies.push(fontFamily);\n }\n // CSS font property: font-style font-weight font-size/line-height font-family\n cssData = fontCache[fonts] = [\n style,\n weight,\n fontFamilies\n ];\n }\n return cssData[0] + sp + cssData[1] + sp + size + 'px' + (lineHeight ? '/' + lineHeight : '') + sp + cssData[2];\n};\n\nvar mb2css = /*@__PURE__*/getDefaultExportFromCjs(mapboxToCssFont);\n\nconst mapboxBaseUrl = 'https://api.mapbox.com';\n/**\n * Gets the path from a mapbox:// URL.\n * @param {string} url The Mapbox URL.\n * @return {string} The path.\n * @private\n */\nfunction getMapboxPath(url) {\n const startsWith = 'mapbox://';\n if (url.indexOf(startsWith) !== 0) {\n return '';\n }\n return url.slice(startsWith.length);\n}\n/**\n * Turns mapbox:// sprite URLs into resolvable URLs.\n * @param {string} url The sprite URL.\n * @param {string} token The access token.\n * @param {string} styleUrl The style URL.\n * @return {string} A resolvable URL.\n * @private\n */\nfunction normalizeSpriteUrl(url, token, styleUrl) {\n const mapboxPath = getMapboxPath(url);\n if (!mapboxPath) {\n return decodeURI(new URL(url, styleUrl).href);\n }\n const startsWith = 'sprites/';\n if (mapboxPath.indexOf(startsWith) !== 0) {\n throw new Error(`unexpected sprites url: ${ url }`);\n }\n const sprite = mapboxPath.slice(startsWith.length);\n return `${ mapboxBaseUrl }/styles/v1/${ sprite }/sprite?access_token=${ token }`;\n}\n/**\n * Turns mapbox:// style URLs into resolvable URLs.\n * @param {string} url The style URL.\n * @param {string} token The access token.\n * @return {string} A resolvable URL.\n * @private\n */\nfunction normalizeStyleUrl(url, token) {\n const mapboxPath = getMapboxPath(url);\n if (!mapboxPath) {\n return decodeURI(new URL(url, location.href).href);\n }\n const startsWith = 'styles/';\n if (mapboxPath.indexOf(startsWith) !== 0) {\n throw new Error(`unexpected style url: ${ url }`);\n }\n const style = mapboxPath.slice(startsWith.length);\n return `${ mapboxBaseUrl }/styles/v1/${ style }?&access_token=${ token }`;\n}\nconst mapboxSubdomains = [\n 'a',\n 'b',\n 'c',\n 'd'\n];\n/**\n * Turns mapbox:// source URLs into vector tile URL templates.\n * @param {string} url The source URL.\n * @param {string} token The access token.\n * @param {string} tokenParam The access token key.\n * @param {string} styleUrl The style URL.\n * @return {Array} A vector tile template.\n * @private\n */\nfunction normalizeSourceUrl(url, token, tokenParam, styleUrl) {\n const urlObject = new URL(url, styleUrl);\n const mapboxPath = getMapboxPath(url);\n if (!mapboxPath) {\n if (!token) {\n return [decodeURI(urlObject.href)];\n }\n if (!urlObject.searchParams.has(tokenParam)) {\n urlObject.searchParams.set(tokenParam, token);\n }\n return [decodeURI(urlObject.href)];\n }\n if (mapboxPath === 'mapbox.satellite') {\n const sizeFactor = window.devicePixelRatio >= 1.5 ? '@2x' : '';\n return [`https://api.mapbox.com/v4/${ mapboxPath }/{z}/{x}/{y}${ sizeFactor }.webp?access_token=${ token }`];\n }\n return mapboxSubdomains.map(sub => `https://${ sub }.tiles.mapbox.com/v4/${ mapboxPath }/{z}/{x}/{y}.vector.pbf?access_token=${ token }`);\n}\n\n/** @typedef {'Style'|'Source'|'Sprite'|'SpriteImage'|'Tiles'|'GeoJSON'} ResourceType */\n/** @typedef {import(\"ol\").Map} Map */\n/** @typedef {import(\"ol/layer\").Layer} Layer */\n/** @typedef {import(\"ol/layer\").Group} LayerGroup */\n/** @typedef {import(\"ol/layer\").Vector} VectorLayer */\n/** @typedef {import(\"ol/layer\").VectorTile} VectorTileLayer */\n/** @typedef {import(\"ol/source\").Source} Source */\nconst functionCacheByStyleId = {};\nconst filterCacheByStyleId = {};\nlet styleId = 0;\nfunction getStyleId(glStyle) {\n if (!glStyle.id) {\n glStyle.id = styleId++;\n }\n return glStyle.id;\n}\nfunction getStyleFunctionKey(glStyle, olLayer) {\n return getStyleId(glStyle) + '.' + getUid(olLayer);\n}\n/**\n * @param {Object} glStyle Mapboox style object.\n * @return {Object} Function cache.\n */\nfunction getFunctionCache(glStyle) {\n let functionCache = functionCacheByStyleId[glStyle.id];\n if (!functionCache) {\n functionCache = {};\n functionCacheByStyleId[getStyleId(glStyle)] = functionCache;\n }\n return functionCache;\n}\nfunction clearFunctionCache() {\n for (const key in functionCacheByStyleId) {\n delete functionCacheByStyleId[key];\n }\n}\n/**\n * @param {Object} glStyle Mapboox style object.\n * @return {Object} Filter cache.\n */\nfunction getFilterCache(glStyle) {\n let filterCache = filterCacheByStyleId[glStyle.id];\n if (!filterCache) {\n filterCache = {};\n filterCacheByStyleId[getStyleId(glStyle)] = filterCache;\n }\n return filterCache;\n}\nfunction deg2rad(degrees) {\n return degrees * Math.PI / 180;\n}\nconst defaultResolutions = (function () {\n const resolutions = [];\n for (let res = 78271.51696402048; resolutions.length <= 24; res /= 2) {\n resolutions.push(res);\n }\n return resolutions;\n}());\n/**\n * @param {number} width Width of the canvas.\n * @param {number} height Height of the canvas.\n * @return {HTMLCanvasElement} Canvas.\n */\nfunction createCanvas(width, height) {\n if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope && typeof OffscreenCanvas !== 'undefined') {\n // eslint-disable-line\n return new OffscreenCanvas(width, height);\n }\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\nfunction getZoomForResolution(resolution, resolutions) {\n let i = 0;\n const ii = resolutions.length;\n for (; i < ii; ++i) {\n const candidate = resolutions[i];\n if (candidate < resolution && i + 1 < ii) {\n const zoomFactor = resolutions[i] / resolutions[i + 1];\n return i + Math.log(resolutions[i] / resolution) / Math.log(zoomFactor);\n }\n }\n return ii - 1;\n}\nfunction getResolutionForZoom(zoom, resolutions) {\n const base = Math.floor(zoom);\n const factor = Math.pow(2, zoom - base);\n return resolutions[base] / factor;\n}\nconst pendingRequests = {};\n/**\n * @param {ResourceType} resourceType Type of resource to load.\n * @param {string} url Url of the resource.\n * @param {Options} [options={}] Options.\n * @param {{request?: Request}} [metadata] Object to be filled with the request.\n * @return {Promise} Promise that resolves with the loaded resource\n * or rejects with the Response object.\n * @private\n */\nfunction fetchResource(resourceType, url, options = {}, metadata) {\n if (url in pendingRequests) {\n if (metadata) {\n metadata.request = pendingRequests[url][0];\n }\n return pendingRequests[url][1];\n }\n const transformedRequest = options.transformRequest ? options.transformRequest(url, resourceType) || url : url;\n const pendingRequest = toPromise(() => transformedRequest).then(transformedRequest => {\n if (!(transformedRequest instanceof Request)) {\n transformedRequest = new Request(transformedRequest);\n }\n if (!transformedRequest.headers.get('Accept')) {\n transformedRequest.headers.set('Accept', 'application/json');\n }\n if (metadata) {\n metadata.request = transformedRequest;\n }\n return fetch(transformedRequest).then(function (response) {\n delete pendingRequests[url];\n return response.ok ? response.json() : Promise.reject(new Error('Error fetching source ' + url));\n }).catch(function (error) {\n delete pendingRequests[url];\n return Promise.reject(new Error('Error fetching source ' + url));\n });\n });\n pendingRequests[url] = [\n transformedRequest,\n pendingRequest\n ];\n return pendingRequest;\n}\nfunction getGlStyle(glStyleOrUrl, options) {\n if (typeof glStyleOrUrl === 'string') {\n if (glStyleOrUrl.trim().startsWith('{')) {\n try {\n const glStyle = JSON.parse(glStyleOrUrl);\n return Promise.resolve(glStyle);\n } catch (error) {\n return Promise.reject(error);\n }\n } else {\n glStyleOrUrl = normalizeStyleUrl(glStyleOrUrl, options.accessToken);\n return fetchResource('Style', glStyleOrUrl, options);\n }\n } else {\n return Promise.resolve(glStyleOrUrl);\n }\n}\nconst tilejsonCache = {};\n/**\n * @param {Object} glSource glStyle source object.\n * @param {string} styleUrl Style URL.\n * @param {Options} options Options.\n * @return {Promise<{tileJson: Object, tileLoadFunction: import('ol/Tile.js').LoadFunction}?>} TileJson and load function\n */\nfunction getTileJson(glSource, styleUrl, options = {}) {\n const cacheKey = [\n styleUrl,\n JSON.stringify(glSource)\n ].toString();\n let promise = tilejsonCache[cacheKey];\n if (!promise || options.transformRequest) {\n let tileLoadFunction;\n if (options.transformRequest) {\n tileLoadFunction = (tile, src) => {\n const transformedRequest = options.transformRequest ? options.transformRequest(src, 'Tiles') || src : src;\n if (tile instanceof VectorTile) {\n tile.setLoader((extent, resolution, projection) => {\n toPromise(() => transformedRequest).then(transformedRequest => {\n fetch(transformedRequest).then(response => response.arrayBuffer()).then(data => {\n const format = tile.getFormat();\n const features = format.readFeatures(data, {\n extent: extent,\n featureProjection: projection\n });\n // @ts-ignore\n tile.setFeatures(features);\n }).catch(e => tile.setState(TileState.ERROR));\n });\n });\n } else {\n const img = tile.getImage();\n toPromise(() => transformedRequest).then(transformedRequest => {\n if (transformedRequest instanceof Request) {\n fetch(transformedRequest).then(response => response.blob()).then(blob => {\n const url = URL.createObjectURL(blob);\n img.addEventListener('load', () => URL.revokeObjectURL(url));\n img.addEventListener('error', () => URL.revokeObjectURL(url));\n img.src = url;\n }).catch(e => tile.setState(TileState.ERROR));\n } else {\n img.src = transformedRequest;\n }\n });\n }\n };\n }\n const url = glSource.url;\n if (url && !glSource.tiles) {\n const normalizedSourceUrl = normalizeSourceUrl(url, options.accessToken, options.accessTokenParam || 'access_token', styleUrl || location.href);\n if (url.startsWith('mapbox://')) {\n promise = Promise.resolve({\n tileJson: Object.assign({}, glSource, {\n url: undefined,\n tiles: normalizedSourceUrl\n }),\n tileLoadFunction\n });\n } else {\n const metadata = {};\n promise = fetchResource('Source', normalizedSourceUrl[0], options, metadata).then(function (tileJson) {\n tileJson.tiles = tileJson.tiles.map(function (tileUrl) {\n if (tileJson.scheme === 'tms') {\n tileUrl = tileUrl.replace('{y}', '{-y}');\n }\n return normalizeSourceUrl(tileUrl, options.accessToken, options.accessTokenParam || 'access_token', metadata.request.url)[0];\n });\n return Promise.resolve({\n tileJson,\n tileLoadFunction\n });\n });\n }\n } else {\n glSource = Object.assign({}, glSource, {\n tiles: glSource.tiles.map(function (tileUrl) {\n if (glSource.scheme === 'tms') {\n tileUrl = tileUrl.replace('{y}', '{-y}');\n }\n return normalizeSourceUrl(tileUrl, options.accessToken, options.accessTokenParam || 'access_token', styleUrl || location.href)[0];\n })\n });\n promise = Promise.resolve({\n tileJson: Object.assign({}, glSource),\n tileLoadFunction\n });\n }\n tilejsonCache[cacheKey] = promise;\n }\n return promise;\n}\n/**\n * @param {HTMLImageElement|HTMLCanvasElement} spriteImage Sprite image id.\n * @param {{x: number, y: number, width: number, height: number, pixelRatio: number}} spriteImageData Sprite image data.\n * @param {number} haloWidth Halo width.\n * @param {{r: number, g: number, b: number, a: number}} haloColor Halo color.\n * @return {HTMLCanvasElement} Canvas element with the halo.\n */\nfunction drawIconHalo(spriteImage, spriteImageData, haloWidth, haloColor) {\n const imgSize = [\n 2 * haloWidth * spriteImageData.pixelRatio + spriteImageData.width,\n 2 * haloWidth * spriteImageData.pixelRatio + spriteImageData.height\n ];\n const imageCanvas = createCanvas(imgSize[0], imgSize[1]);\n const imageContext = imageCanvas.getContext('2d');\n imageContext.drawImage(spriteImage, spriteImageData.x, spriteImageData.y, spriteImageData.width, spriteImageData.height, haloWidth * spriteImageData.pixelRatio, haloWidth * spriteImageData.pixelRatio, spriteImageData.width, spriteImageData.height);\n const imageData = imageContext.getImageData(0, 0, imgSize[0], imgSize[1]);\n imageContext.globalCompositeOperation = 'destination-over';\n imageContext.fillStyle = `rgba(${ haloColor.r * 255 },${ haloColor.g * 255 },${ haloColor.b * 255 },${ haloColor.a })`;\n const data = imageData.data;\n for (let i = 0, ii = imageData.width; i < ii; ++i) {\n for (let j = 0, jj = imageData.height; j < jj; ++j) {\n const index = (j * ii + i) * 4;\n const alpha = data[index + 3];\n if (alpha > 0) {\n imageContext.arc(i, j, haloWidth * spriteImageData.pixelRatio, 0, 2 * Math.PI);\n }\n }\n }\n imageContext.fill();\n return imageCanvas;\n}\nfunction smoothstep(min, max, value) {\n const x = Math.max(0, Math.min(1, (value - min) / (max - min)));\n return x * x * (3 - 2 * x);\n}\n/**\n * @param {HTMLImageElement} image SDF image\n * @param {{x: number, y: number, width: number, height: number}} area Area to unSDF\n * @param {{r: number, g: number, b: number, a: number}} color Color to use\n * @return {HTMLCanvasElement} Regular image\n */\nfunction drawSDF(image, area, color) {\n const imageCanvas = createCanvas(area.width, area.height);\n const imageContext = imageCanvas.getContext('2d');\n imageContext.drawImage(image, area.x, area.y, area.width, area.height, 0, 0, area.width, area.height);\n const imageData = imageContext.getImageData(0, 0, area.width, area.height);\n const data = imageData.data;\n for (let i = 0, ii = imageData.width; i < ii; ++i) {\n for (let j = 0, jj = imageData.height; j < jj; ++j) {\n const index = (j * ii + i) * 4;\n const dist = data[index + 3] / 255;\n const buffer = 0.75;\n const gamma = 0.1;\n const alpha = smoothstep(buffer - gamma, buffer + gamma, dist);\n if (alpha > 0) {\n data[index + 0] = Math.round(255 * color.r * alpha);\n data[index + 1] = Math.round(255 * color.g * alpha);\n data[index + 2] = Math.round(255 * color.b * alpha);\n data[index + 3] = Math.round(255 * alpha);\n } else {\n data[index + 3] = 0;\n }\n }\n }\n imageContext.putImageData(imageData, 0, 0);\n return imageCanvas;\n} /**\n * @typedef {import(\"./apply.js\").Options} Options\n * @private\n */\n\nconst hairSpacePool = Array(256).join('\\u200A');\nfunction applyLetterSpacing(text, letterSpacing) {\n if (letterSpacing >= 0.05) {\n let textWithLetterSpacing = '';\n const lines = text.split('\\n');\n const joinSpaceString = hairSpacePool.slice(0, Math.round(letterSpacing / 0.1));\n for (let l = 0, ll = lines.length; l < ll; ++l) {\n if (l > 0) {\n textWithLetterSpacing += '\\n';\n }\n textWithLetterSpacing += lines[l].split('').join(joinSpaceString);\n }\n return textWithLetterSpacing;\n }\n return text;\n}\nlet measureContext;\nfunction getMeasureContext() {\n if (!measureContext) {\n measureContext = createCanvas(1, 1).getContext('2d');\n }\n return measureContext;\n}\nfunction measureText(text, letterSpacing) {\n return getMeasureContext().measureText(text).width + (text.length - 1) * letterSpacing;\n}\nconst measureCache = {};\nfunction wrapText(text, font, em, letterSpacing) {\n if (text.indexOf('\\n') !== -1) {\n const hardLines = text.split('\\n');\n const lines = [];\n for (let i = 0, ii = hardLines.length; i < ii; ++i) {\n lines.push(wrapText(hardLines[i], font, em, letterSpacing));\n }\n return lines.join('\\n');\n }\n const key = em + ',' + font + ',' + text + ',' + letterSpacing;\n let wrappedText = measureCache[key];\n if (!wrappedText) {\n const words = text.split(' ');\n if (words.length > 1) {\n const ctx = getMeasureContext();\n ctx.font = font;\n const oneEm = ctx.measureText('M').width;\n const maxWidth = oneEm * em;\n let line = '';\n const lines = [];\n // Pass 1 - wrap lines to not exceed maxWidth\n for (let i = 0, ii = words.length; i < ii; ++i) {\n const word = words[i];\n const testLine = line + (line ? ' ' : '') + word;\n if (measureText(testLine, letterSpacing) <= maxWidth) {\n line = testLine;\n } else {\n if (line) {\n lines.push(line);\n }\n line = word;\n }\n }\n if (line) {\n lines.push(line);\n }\n // Pass 2 - add lines with a width of less than 30% of maxWidth to the previous or next line\n for (let i = 0, ii = lines.length; i < ii && ii > 1; ++i) {\n const line = lines[i];\n if (measureText(line, letterSpacing) < maxWidth * 0.35) {\n const prevWidth = i > 0 ? measureText(lines[i - 1], letterSpacing) : Infinity;\n const nextWidth = i < ii - 1 ? measureText(lines[i + 1], letterSpacing) : Infinity;\n lines.splice(i, 1);\n ii -= 1;\n if (prevWidth < nextWidth) {\n lines[i - 1] += ' ' + line;\n i -= 1;\n } else {\n lines[i] = line + ' ' + lines[i];\n }\n }\n }\n // Pass 3 - try to fill 80% of maxWidth for each line\n for (let i = 0, ii = lines.length - 1; i < ii; ++i) {\n const line = lines[i];\n const next = lines[i + 1];\n if (measureText(line, letterSpacing) > maxWidth * 0.7 && measureText(next, letterSpacing) < maxWidth * 0.6) {\n const lineWords = line.split(' ');\n const lastWord = lineWords.pop();\n if (measureText(lastWord, letterSpacing) < maxWidth * 0.2) {\n lines[i] = lineWords.join(' ');\n lines[i + 1] = lastWord + ' ' + next;\n }\n ii -= 1;\n }\n }\n wrappedText = lines.join('\\n');\n } else {\n wrappedText = text;\n }\n wrappedText = applyLetterSpacing(wrappedText, letterSpacing);\n measureCache[key] = wrappedText;\n }\n return wrappedText;\n}\nconst fontFamilyRegEx = /font-family: ?([^;]*);/;\nconst stripQuotesRegEx = /(\"|')/g;\nlet loadedFontFamilies;\nfunction hasFontFamily(family) {\n if (!loadedFontFamilies) {\n loadedFontFamilies = {};\n const styleSheets = document.styleSheets;\n for (let i = 0, ii = styleSheets.length; i < ii; ++i) {\n const styleSheet = styleSheets[i];\n try {\n const cssRules = styleSheet.rules || styleSheet.cssRules;\n if (cssRules) {\n for (let j = 0, jj = cssRules.length; j < jj; ++j) {\n const cssRule = cssRules[j];\n if (cssRule.type == 5) {\n const match = cssRule.cssText.match(fontFamilyRegEx);\n loadedFontFamilies[match[1].replace(stripQuotesRegEx, '')] = true;\n }\n }\n }\n } catch (e) {\n }\n }\n }\n return family in loadedFontFamilies;\n}\nconst processedFontFamilies = {};\n/**\n * @param {Array} fonts Fonts.\n * @param {string} [templateUrl] Template URL.\n * @return {Array} Processed fonts.\n * @private\n */\nfunction getFonts(fonts, templateUrl = 'https://cdn.jsdelivr.net/npm/@fontsource/{font-family}/{fontweight}{-fontstyle}.css') {\n const fontsKey = fonts.toString();\n if (fontsKey in processedFontFamilies) {\n return processedFontFamilies[fontsKey];\n }\n const fontDescriptions = [];\n for (let i = 0, ii = fonts.length; i < ii; ++i) {\n fonts[i] = fonts[i].replace('Arial Unicode MS', 'Arial');\n const font = fonts[i];\n const cssFont = mb2css(font, 1);\n registerFont(cssFont);\n const parts = cssFont.split(' ');\n fontDescriptions.push([\n parts.slice(3).join(' ').replace(/\"/g, ''),\n parts[1],\n parts[0]\n ]);\n }\n for (let i = 0, ii = fontDescriptions.length; i < ii; ++i) {\n const fontDescription = fontDescriptions[i];\n const family = fontDescription[0];\n if (!hasFontFamily(family)) {\n if (checkedFonts.get(`${ fontDescription[2] }\\n${ fontDescription[1] } \\n${ family }`) !== 100) {\n const fontUrl = templateUrl.replace('{font-family}', family.replace(/ /g, '-').toLowerCase()).replace('{Font+Family}', family.replace(/ /g, '+')).replace('{fontweight}', fontDescription[1]).replace('{-fontstyle}', fontDescription[2].replace('normal', '').replace(/(.+)/, '-$1')).replace('{fontstyle}', fontDescription[2]);\n if (!document.querySelector('link[href=\"' + fontUrl + '\"]')) {\n const markup = document.createElement('link');\n markup.href = fontUrl;\n markup.rel = 'stylesheet';\n document.head.appendChild(markup);\n }\n }\n }\n }\n processedFontFamilies[fontsKey] = fonts;\n return fonts;\n}\n\n/*\nol-mapbox-style - Use Mapbox/MapLibre Style objects with OpenLayers\nCopyright 2016-present ol-mapbox-style contributors\nLicense: https://raw.githubusercontent.com/openlayers/ol-mapbox-style/master/LICENSE\n*/\n/**\n * @typedef {import(\"ol/layer/Vector\").default} VectorLayer\n * @typedef {import(\"ol/layer/VectorTile\").default} VectorTileLayer\n * @typedef {import(\"ol/style/Style\").StyleFunction} StyleFunction\n * @typedef {import('./util.js').ResourceType} ResourceType\n */\nconst types = {\n 'Point': 1,\n 'MultiPoint': 1,\n 'LineString': 2,\n 'MultiLineString': 2,\n 'Polygon': 3,\n 'MultiPolygon': 3\n};\nconst anchor = {\n 'center': [\n 0.5,\n 0.5\n ],\n 'left': [\n 0,\n 0.5\n ],\n 'right': [\n 1,\n 0.5\n ],\n 'top': [\n 0.5,\n 0\n ],\n 'bottom': [\n 0.5,\n 1\n ],\n 'top-left': [\n 0,\n 0\n ],\n 'top-right': [\n 1,\n 0\n ],\n 'bottom-left': [\n 0,\n 1\n ],\n 'bottom-right': [\n 1,\n 1\n ]\n};\nconst expressionData = function (rawExpression, propertySpec) {\n const compiledExpression = createPropertyExpression(rawExpression, propertySpec);\n if (compiledExpression.result === 'error') {\n throw new Error(compiledExpression.value.map(err => `${ err.key }: ${ err.message }`).join(', '));\n }\n return compiledExpression.value;\n};\nconst emptyObj$1 = {};\nconst zoomObj = { zoom: 0 };\nlet renderFeatureCoordinates, renderFeature;\n/**\n * @private\n * @param {Object} layer Gl object layer.\n * @param {string} layoutOrPaint 'layout' or 'paint'.\n * @param {string} property Feature property.\n * @param {number} zoom Zoom.\n * @param {Object} feature Gl feature.\n * @param {Object} [functionCache] Function cache.\n * @param {Object} [featureState] Feature state.\n * @return {?} Value.\n */\nfunction getValue(layer, layoutOrPaint, property, zoom, feature, functionCache, featureState) {\n const layerId = layer.id;\n if (!functionCache) {\n functionCache = {};\n console.warn('No functionCache provided to getValue()'); //eslint-disable-line no-console\n }\n if (!functionCache[layerId]) {\n functionCache[layerId] = {};\n }\n const functions = functionCache[layerId];\n if (!functions[property]) {\n let value = (layer[layoutOrPaint] || emptyObj$1)[property];\n const propertySpec = spec[`${ layoutOrPaint }_${ layer.type }`][property];\n if (value === undefined) {\n value = propertySpec.default;\n }\n let isExpr = isExpression(value);\n if (!isExpr && isFunction(value)) {\n value = convertFunction(value, propertySpec);\n isExpr = true;\n }\n if (isExpr) {\n const compiledExpression = expressionData(value, propertySpec);\n functions[property] = compiledExpression.evaluate.bind(compiledExpression);\n } else {\n if (propertySpec.type == 'color') {\n value = Color$1.parse(value);\n }\n functions[property] = function () {\n return value;\n };\n }\n }\n zoomObj.zoom = zoom;\n return functions[property](zoomObj, feature, featureState);\n}\n/**\n * @private\n * @param {Object} layer Gl object layer.\n * @param {number} zoom Zoom.\n * @param {Object} feature Gl feature.\n * @param {\"icon\"|\"text\"} prefix Style property prefix.\n * @param {Object} [functionCache] Function cache.\n * @return {\"declutter\"|\"obstacle\"|\"none\"} Value.\n */\nfunction getDeclutterMode(layer, zoom, feature, prefix, functionCache) {\n const allowOverlap = getValue(layer, 'layout', `${ prefix }-allow-overlap`, zoom, feature, functionCache);\n if (!allowOverlap) {\n return 'declutter';\n }\n const ignorePlacement = getValue(layer, 'layout', `${ prefix }-ignore-placement`, zoom, feature, functionCache);\n if (!ignorePlacement) {\n return 'obstacle';\n }\n return 'none';\n}\n/**\n * @private\n * @param {string} layerId Layer id.\n * @param {?} filter Filter.\n * @param {Object} feature Feature.\n * @param {number} zoom Zoom.\n * @param {Object} [filterCache] Filter cache.\n * @return {boolean} Filter result.\n */\nfunction evaluateFilter(layerId, filter, feature, zoom, filterCache) {\n if (!filterCache) {\n console.warn('No filterCache provided to evaluateFilter()'); //eslint-disable-line no-console\n }\n if (!(layerId in filterCache)) {\n filterCache[layerId] = createFilter(filter).filter;\n }\n zoomObj.zoom = zoom;\n return filterCache[layerId](zoomObj, feature);\n}\nlet renderTransparentEnabled = false;\n/**\n * Configure whether features with a transparent style should be rendered. When\n * set to `true`, it will be possible to hit detect content that is not visible,\n * like transparent fills of polygons, using `ol/layer/Layer#getFeatures()` or\n * `ol/Map#getFeaturesAtPixel()`\n * @param {boolean} enabled Rendering of transparent elements is enabled.\n * Default is `false`.\n */\nfunction renderTransparent(enabled) {\n if (enabled !== renderTransparentEnabled) {\n clearFunctionCache();\n renderTransparentEnabled = enabled;\n }\n}\n/**\n * @private\n * @param {?} color Color.\n * @param {number} [opacity] Opacity.\n * @return {string} Color.\n */\nfunction colorWithOpacity(color, opacity) {\n if (color) {\n if (!renderTransparentEnabled && (color.a === 0 || opacity === 0)) {\n return undefined;\n }\n const a = color.a;\n opacity = opacity === undefined ? 1 : opacity;\n return a === 0 ? 'transparent' : 'rgba(' + Math.round(color.r * 255 / a) + ',' + Math.round(color.g * 255 / a) + ',' + Math.round(color.b * 255 / a) + ',' + a * opacity + ')';\n }\n return color;\n}\nconst templateRegEx = /\\{[^{}}]*\\}/g;\n/**\n * @private\n * @param {string} text Text.\n * @param {Object} properties Properties.\n * @return {string} Text.\n */\nfunction fromTemplate(text, properties) {\n return text.replace(templateRegEx, function (match) {\n return properties[match.slice(1, -1)] || '';\n });\n}\nlet recordLayer = false;\n/**\n * Turns recording of the Mapbox/MapLibre Style's `layer` on and off. When turned on,\n * the layer that a rendered feature belongs to will be set as the feature's\n * `mapbox-layer` property.\n * @param {boolean} record Recording of the style layer is on.\n */\nfunction recordStyleLayer(record = false) {\n recordLayer = record;\n}\nconst styleFunctionArgs = {};\n/**\n * Creates a style function from the `glStyle` object for all layers that use\n * the specified `source`, which needs to be a `\"type\": \"vector\"` or\n * `\"type\": \"geojson\"` source and applies it to the specified OpenLayers layer.\n *\n * Two additional properties will be set on the provided layer:\n *\n * * `mapbox-source`: The `id` of the Mapbox/MapLibre Style document's source that the\n * OpenLayers layer was created from. Usually `apply()` creates one\n * OpenLayers layer per Mapbox/MapLibre Style source, unless the layer stack has\n * layers from different sources in between.\n * * `mapbox-layers`: The `id`s of the Mapbox/MapLibre Style document's layers that are\n * included in the OpenLayers layer.\n *\n * This function also works in a web worker. In worker mode, the main thread needs\n * to listen to messages from the worker and respond with another message to make\n * sure that sprite image loading works:\n *\n * ```js\n * worker.addEventListener('message', event => {\n * if (event.data.action === 'loadImage') {\n * const image = new Image();\n * image.crossOrigin = 'anonymous';\n * image.addEventListener('load', function() {\n * createImageBitmap(image, 0, 0, image.width, image.height).then(imageBitmap => {\n * worker.postMessage({\n * action: 'imageLoaded',\n * image: imageBitmap,\n * src: event.data.src\n * }, [imageBitmap]);\n * });\n * });\n * image.src = event.data.src;\n * }\n * });\n * ```\n *\n * @param {VectorLayer|VectorTileLayer} olLayer OpenLayers layer to\n * apply the style to. In addition to the style, the layer will get two\n * properties: `mapbox-source` will be the `id` of the `glStyle`'s source used\n * for the layer, and `mapbox-layers` will be an array of the `id`s of the\n * `glStyle`'s layers.\n * @param {string|Object} glStyle Mapbox/MapLibre Style object.\n * @param {string|Array} sourceOrLayers `source` key or an array of layer `id`s\n * from the Mapbox/MapLibre Style object. When a `source` key is provided, all layers for\n * the specified source will be included in the style function. When layer `id`s\n * are provided, they must be from layers that use the same source.\n * @param {Array} resolutions\n * Resolutions for mapping resolution to zoom level.\n * @param {Object} spriteData Sprite data from the url specified in\n * the Mapbox/MapLibre Style object's `sprite` property. Only required if a `sprite`\n * property is specified in the Mapbox/MapLibre Style object.\n * @param {string|Request|Promise} spriteImageUrl Sprite image url for the sprite\n * specified in the Mapbox/MapLibre Style object's `sprite` property. Only required if a\n * `sprite` property is specified in the Mapbox/MapLibre Style object.\n * @param {function(Array, string=):Array} getFonts Function that\n * receives a font stack and the url template from the GL style's `metadata['ol:webfonts']`\n * property (if set) as arguments, and returns a (modified) font stack that\n * is available. Font names are the names used in the Mapbox/MapLibre Style object. If\n * not provided, the font stack will be used as-is. This function can also be\n * used for loading web fonts.\n * @param {function(VectorLayer|VectorTileLayer, string):HTMLImageElement|HTMLCanvasElement|string|undefined} [getImage=undefined]\n * Function that returns an image or a URL for an image name. If the result is an HTMLImageElement, it must already be\n * loaded. The layer can be used to call layer.changed() when the loading and processing of the image has finished.\n * This function can be used for icons not in the sprite or to override sprite icons.\n * @return {StyleFunction} Style function for use in\n * `ol.layer.Vector` or `ol.layer.VectorTile`.\n */\nfunction stylefunction(olLayer, glStyle, sourceOrLayers, resolutions = defaultResolutions, spriteData = undefined, spriteImageUrl = undefined, getFonts = undefined, getImage = undefined) {\n if (typeof glStyle == 'string') {\n glStyle = JSON.parse(glStyle);\n }\n if (glStyle.version != 8) {\n throw new Error('glStyle version 8 required.');\n }\n styleFunctionArgs[getStyleFunctionKey(glStyle, olLayer)] = Array.from(arguments);\n let spriteImage, spriteImageSize;\n let spriteImageUnSDFed;\n if (spriteImageUrl) {\n if (typeof Image !== 'undefined') {\n const img = new Image();\n let blobUrl;\n toPromise(() => spriteImageUrl).then(spriteImageUrl => {\n if (spriteImageUrl instanceof Request) {\n fetch(spriteImageUrl).then(response => response.blob()).then(blob => {\n blobUrl = URL.createObjectURL(blob);\n img.src = blobUrl;\n }).catch(() => {\n });\n } else {\n img.crossOrigin = 'anonymous';\n img.src = spriteImageUrl;\n if (blobUrl) {\n URL.revokeObjectURL(blobUrl);\n }\n }\n });\n img.onload = function () {\n spriteImage = img;\n spriteImageSize = [\n img.width,\n img.height\n ];\n olLayer.changed();\n img.onload = null;\n };\n } else if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {\n //eslint-disable-line\n const worker = self;\n // Main thread needs to handle 'loadImage' and dispatch 'imageLoaded'\n worker.postMessage({\n action: 'loadImage',\n src: spriteImageUrl\n });\n worker.addEventListener('message', function handler(event) {\n if (event.data.action === 'imageLoaded' && event.data.src === spriteImageUrl) {\n spriteImage = event.data.image;\n spriteImageSize = [\n spriteImage.width,\n spriteImage.height\n ];\n }\n });\n }\n }\n const allLayers = derefLayers(glStyle.layers);\n const layersBySourceLayer = {};\n const mapboxLayers = [];\n const iconImageCache = {};\n const patternCache = {};\n const functionCache = getFunctionCache(glStyle);\n const filterCache = getFilterCache(glStyle);\n let mapboxSource;\n for (let i = 0, ii = allLayers.length; i < ii; ++i) {\n const layer = allLayers[i];\n const layerId = layer.id;\n if (typeof sourceOrLayers == 'string' && layer.source == sourceOrLayers || Array.isArray(sourceOrLayers) && sourceOrLayers.indexOf(layerId) !== -1) {\n const sourceLayer = layer['source-layer'];\n if (!mapboxSource) {\n mapboxSource = layer.source;\n const source = glStyle.sources[mapboxSource];\n if (!source) {\n throw new Error(`Source \"${ mapboxSource }\" is not defined`);\n }\n const type = source.type;\n if (type !== 'vector' && type !== 'geojson') {\n throw new Error(`Source \"${ mapboxSource }\" is not of type \"vector\" or \"geojson\", but \"${ type }\"`);\n }\n } else if (layer.source !== mapboxSource) {\n throw new Error(`Layer \"${ layerId }\" does not use source \"${ mapboxSource }`);\n }\n let layers = layersBySourceLayer[sourceLayer];\n if (!layers) {\n layers = [];\n layersBySourceLayer[sourceLayer] = layers;\n }\n layers.push({\n layer: layer,\n index: i\n });\n mapboxLayers.push(layerId);\n }\n }\n const textHalo = new Stroke();\n const textColor = new Fill();\n const styles = [];\n /**\n * @param {import(\"ol/Feature\").default|import(\"ol/render/Feature\").default} feature Feature.\n * @param {number} resolution Resolution.\n * @param {string} [onlyLayer] Calculate style for this layer only.\n * @return {Array} Style.\n */\n const styleFunction = function (feature, resolution, onlyLayer) {\n const properties = feature.getProperties();\n const layers = layersBySourceLayer[properties.layer];\n if (!layers) {\n return undefined;\n }\n let zoom = resolutions.indexOf(resolution);\n if (zoom == -1) {\n zoom = getZoomForResolution(resolution, resolutions);\n }\n const type = types[feature.getGeometry().getType()];\n const f = {\n id: feature.getId(),\n properties: properties,\n type: type\n };\n const featureState = olLayer.get('mapbox-featurestate')[feature.getId()];\n let stylesLength = -1;\n let featureBelongsToLayer;\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const layerData = layers[i];\n const layer = layerData.layer;\n const layerId = layer.id;\n if (onlyLayer !== undefined && onlyLayer !== layerId) {\n continue;\n }\n const layout = layer.layout || emptyObj$1;\n const paint = layer.paint || emptyObj$1;\n if (layout.visibility === 'none' || 'minzoom' in layer && zoom < layer.minzoom || 'maxzoom' in layer && zoom >= layer.maxzoom) {\n continue;\n }\n const filter = layer.filter;\n if (!filter || evaluateFilter(layerId, filter, f, zoom, filterCache)) {\n featureBelongsToLayer = layer;\n let color, opacity, fill, stroke, strokeColor, style;\n const index = layerData.index;\n if (type == 3 && (layer.type == 'fill' || layer.type == 'fill-extrusion')) {\n opacity = getValue(layer, 'paint', layer.type + '-opacity', zoom, f, functionCache, featureState);\n if (layer.type + '-pattern' in paint) {\n const fillIcon = getValue(layer, 'paint', layer.type + '-pattern', zoom, f, functionCache, featureState);\n if (fillIcon) {\n const icon = typeof fillIcon === 'string' ? fromTemplate(fillIcon, properties) : fillIcon.toString();\n if (spriteImage && spriteData && spriteData[icon]) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getFill() || style.getStroke() || style.getText()) {\n style = new Style({ fill: new Fill() });\n styles[stylesLength] = style;\n }\n fill = style.getFill();\n style.setZIndex(index);\n const icon_cache_key = icon + '.' + opacity;\n let pattern = patternCache[icon_cache_key];\n if (!pattern) {\n const spriteImageData = spriteData[icon];\n const canvas = createCanvas(spriteImageData.width, spriteImageData.height);\n const ctx = canvas.getContext('2d');\n ctx.globalAlpha = opacity;\n ctx.drawImage(spriteImage, spriteImageData.x, spriteImageData.y, spriteImageData.width, spriteImageData.height, 0, 0, spriteImageData.width, spriteImageData.height);\n pattern = ctx.createPattern(canvas, 'repeat');\n patternCache[icon_cache_key] = pattern;\n }\n fill.setColor(pattern);\n }\n }\n } else {\n color = colorWithOpacity(getValue(layer, 'paint', layer.type + '-color', zoom, f, functionCache, featureState), opacity);\n if (layer.type + '-outline-color' in paint) {\n strokeColor = colorWithOpacity(getValue(layer, 'paint', layer.type + '-outline-color', zoom, f, functionCache, featureState), opacity);\n }\n if (!strokeColor) {\n strokeColor = color;\n }\n if (color || strokeColor) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || color && !style.getFill() || !color && style.getFill() || strokeColor && !style.getStroke() || !strokeColor && style.getStroke() || style.getText()) {\n style = new Style({\n fill: color ? new Fill() : undefined,\n stroke: strokeColor ? new Stroke() : undefined\n });\n styles[stylesLength] = style;\n }\n if (color) {\n fill = style.getFill();\n fill.setColor(color);\n }\n if (strokeColor) {\n stroke = style.getStroke();\n stroke.setColor(strokeColor);\n stroke.setWidth(0.5);\n }\n style.setZIndex(index);\n }\n }\n }\n if (type != 1 && layer.type == 'line') {\n if (!('line-pattern' in paint)) {\n color = colorWithOpacity(getValue(layer, 'paint', 'line-color', zoom, f, functionCache, featureState), getValue(layer, 'paint', 'line-opacity', zoom, f, functionCache, featureState));\n } else {\n color = undefined;\n }\n const width = getValue(layer, 'paint', 'line-width', zoom, f, functionCache, featureState);\n if (color && width > 0) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getStroke() || style.getFill() || style.getText()) {\n style = new Style({ stroke: new Stroke() });\n styles[stylesLength] = style;\n }\n stroke = style.getStroke();\n stroke.setLineCap(getValue(layer, 'layout', 'line-cap', zoom, f, functionCache, featureState));\n stroke.setLineJoin(getValue(layer, 'layout', 'line-join', zoom, f, functionCache, featureState));\n stroke.setMiterLimit(getValue(layer, 'layout', 'line-miter-limit', zoom, f, functionCache, featureState));\n stroke.setColor(color);\n stroke.setWidth(width);\n stroke.setLineDash(paint['line-dasharray'] ? getValue(layer, 'paint', 'line-dasharray', zoom, f, functionCache, featureState).map(function (x) {\n return x * width;\n }) : null);\n style.setZIndex(index);\n }\n }\n let hasImage = false;\n let text = null;\n let placementAngle = 0;\n let icon, iconImg, skipLabel;\n if ((type == 1 || type == 2) && 'icon-image' in layout) {\n const iconImage = getValue(layer, 'layout', 'icon-image', zoom, f, functionCache, featureState);\n if (iconImage) {\n icon = typeof iconImage === 'string' ? fromTemplate(iconImage, properties) : iconImage.toString();\n let styleGeom = undefined;\n const imageElement = getImage ? getImage(olLayer, icon) : undefined;\n if (spriteImage && spriteData && spriteData[icon] || imageElement) {\n const iconRotationAlignment = getValue(layer, 'layout', 'icon-rotation-alignment', zoom, f, functionCache, featureState);\n if (type == 2) {\n const geom = feature.getGeometry();\n // ol package and ol-debug.js only\n if (geom.getFlatMidpoint || geom.getFlatMidpoints) {\n const extent = geom.getExtent();\n const size = Math.sqrt(Math.max(Math.pow((extent[2] - extent[0]) / resolution, 2), Math.pow((extent[3] - extent[1]) / resolution, 2)));\n if (size > 150) {\n //FIXME Do not hard-code a size of 150\n const midpoint = geom.getType() === 'MultiLineString' ? geom.getFlatMidpoints() : geom.getFlatMidpoint();\n if (!renderFeature) {\n renderFeatureCoordinates = [\n NaN,\n NaN\n ];\n renderFeature = new RenderFeature('Point', renderFeatureCoordinates, [], 2, {}, undefined);\n }\n styleGeom = renderFeature;\n renderFeatureCoordinates[0] = midpoint[0];\n renderFeatureCoordinates[1] = midpoint[1];\n const placement = getValue(layer, 'layout', 'symbol-placement', zoom, f, functionCache, featureState);\n if (placement === 'line' && iconRotationAlignment === 'map') {\n const stride = geom.getStride();\n const coordinates = geom.getFlatCoordinates();\n for (let i = 0, ii = coordinates.length - stride; i < ii; i += stride) {\n const x1 = coordinates[i];\n const y1 = coordinates[i + 1];\n const x2 = coordinates[i + stride];\n const y2 = coordinates[i + stride + 1];\n const minX = Math.min(x1, x2);\n const maxX = Math.max(x1, x2);\n const xM = midpoint[0];\n const yM = midpoint[1];\n const dotProduct = (y2 - y1) * (xM - x1) - (x2 - x1) * (yM - y1);\n if (Math.abs(dotProduct) < 0.001 && //midpoint is aligned with the segment\n xM <= maxX && xM >= minX //midpoint is on the segment and not outside it\n) {\n placementAngle = Math.atan2(y1 - y2, x2 - x1);\n break;\n }\n }\n }\n }\n }\n }\n if (type !== 2 || styleGeom) {\n const iconSize = getValue(layer, 'layout', 'icon-size', zoom, f, functionCache, featureState);\n const iconColor = paint['icon-color'] !== undefined ? getValue(layer, 'paint', 'icon-color', zoom, f, functionCache, featureState) : null;\n if (!iconColor || iconColor.a !== 0) {\n const haloColor = getValue(layer, 'paint', 'icon-halo-color', zoom, f, functionCache, featureState);\n const haloWidth = getValue(layer, 'paint', 'icon-halo-width', zoom, f, functionCache, featureState);\n let iconCacheKey = `${ icon }.${ iconSize }.${ haloWidth }.${ haloColor }`;\n if (iconColor !== null) {\n iconCacheKey += `.${ iconColor }`;\n }\n iconImg = iconImageCache[iconCacheKey];\n if (!iconImg) {\n const declutterMode = getDeclutterMode(layer, zoom, f, 'icon', functionCache);\n let displacement;\n if ('icon-offset' in layout) {\n displacement = getValue(layer, 'layout', 'icon-offset', zoom, f, functionCache, featureState).slice(0);\n displacement[0] *= iconSize;\n displacement[1] *= -iconSize;\n }\n let color = iconColor ? [\n iconColor.r * 255,\n iconColor.g * 255,\n iconColor.b * 255,\n iconColor.a\n ] : undefined;\n if (imageElement) {\n const iconOptions = {\n color: color,\n rotateWithView: iconRotationAlignment === 'map',\n displacement: displacement,\n declutterMode: declutterMode,\n scale: iconSize\n };\n if (typeof imageElement === 'string') {\n // it is a src URL\n iconOptions.src = imageElement;\n } else {\n iconOptions.img = imageElement;\n iconOptions.imgSize = [\n imageElement.width,\n imageElement.height\n ];\n }\n iconImg = new Icon(iconOptions);\n } else {\n const spriteImageData = spriteData[icon];\n let img, size, offset;\n if (haloWidth) {\n if (spriteImageData.sdf) {\n img = drawIconHalo(drawSDF(spriteImage, spriteImageData, iconColor || [\n 0,\n 0,\n 0,\n 1\n ]), {\n x: 0,\n y: 0,\n width: spriteImageData.width,\n height: spriteImageData.height,\n pixelRatio: spriteImageData.pixelRatio\n }, haloWidth, haloColor);\n color = undefined; // do not tint haloed icons\n } else {\n img = drawIconHalo(spriteImage, spriteImageData, haloWidth, haloColor);\n }\n } else {\n if (spriteImageData.sdf) {\n if (!spriteImageUnSDFed) {\n spriteImageUnSDFed = drawSDF(spriteImage, {\n x: 0,\n y: 0,\n width: spriteImageSize[0],\n height: spriteImageSize[1]\n }, {\n r: 1,\n g: 1,\n b: 1,\n a: 1\n });\n }\n img = spriteImageUnSDFed;\n } else {\n img = spriteImage;\n }\n size = [\n spriteImageData.width,\n spriteImageData.height\n ];\n offset = [\n spriteImageData.x,\n spriteImageData.y\n ];\n }\n iconImg = new Icon({\n color: color,\n img: img,\n // @ts-ignore\n imgSize: spriteImageSize,\n size: size,\n offset: offset,\n rotateWithView: iconRotationAlignment === 'map',\n scale: iconSize / spriteImageData.pixelRatio,\n displacement: displacement,\n declutterMode: declutterMode\n });\n }\n iconImageCache[iconCacheKey] = iconImg;\n }\n }\n if (iconImg) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getImage() || style.getFill() || style.getStroke()) {\n style = new Style();\n styles[stylesLength] = style;\n }\n style.setGeometry(styleGeom);\n iconImg.setRotation(placementAngle + deg2rad(getValue(layer, 'layout', 'icon-rotate', zoom, f, functionCache, featureState)));\n iconImg.setOpacity(getValue(layer, 'paint', 'icon-opacity', zoom, f, functionCache, featureState));\n iconImg.setAnchor(anchor[getValue(layer, 'layout', 'icon-anchor', zoom, f, functionCache, featureState)]);\n style.setImage(iconImg);\n text = style.getText();\n style.setText(undefined);\n style.setZIndex(index);\n hasImage = true;\n skipLabel = false;\n }\n } else {\n skipLabel = true;\n }\n }\n }\n }\n if (type == 1 && layer.type === 'circle') {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getImage() || style.getFill() || style.getStroke()) {\n style = new Style();\n styles[stylesLength] = style;\n }\n const circleRadius = 'circle-radius' in paint ? getValue(layer, 'paint', 'circle-radius', zoom, f, functionCache, featureState) : 5;\n const circleStrokeColor = colorWithOpacity(getValue(layer, 'paint', 'circle-stroke-color', zoom, f, functionCache, featureState), getValue(layer, 'paint', 'circle-stroke-opacity', zoom, f, functionCache, featureState));\n const circleTranslate = getValue(layer, 'paint', 'circle-translate', zoom, f, functionCache, featureState);\n const circleColor = colorWithOpacity(getValue(layer, 'paint', 'circle-color', zoom, f, functionCache, featureState), getValue(layer, 'paint', 'circle-opacity', zoom, f, functionCache, featureState));\n const circleStrokeWidth = getValue(layer, 'paint', 'circle-stroke-width', zoom, f, functionCache, featureState);\n const cache_key = circleRadius + '.' + circleStrokeColor + '.' + circleColor + '.' + circleStrokeWidth + '.' + circleTranslate[0] + '.' + circleTranslate[1];\n iconImg = iconImageCache[cache_key];\n if (!iconImg) {\n iconImg = new Circle({\n radius: circleRadius,\n displacement: [\n circleTranslate[0],\n -circleTranslate[1]\n ],\n stroke: circleStrokeColor && circleStrokeWidth > 0 ? new Stroke({\n width: circleStrokeWidth,\n color: circleStrokeColor\n }) : undefined,\n fill: circleColor ? new Fill({ color: circleColor }) : undefined,\n declutterMode: 'none'\n });\n iconImageCache[cache_key] = iconImg;\n }\n style.setImage(iconImg);\n text = style.getText();\n style.setText(undefined);\n style.setGeometry(undefined);\n style.setZIndex(index);\n hasImage = true;\n }\n let label, font, textLineHeight, textSize, letterSpacing, maxTextWidth;\n if ('text-field' in layout) {\n textSize = Math.round(getValue(layer, 'layout', 'text-size', zoom, f, functionCache, featureState));\n const fontArray = getValue(layer, 'layout', 'text-font', zoom, f, functionCache, featureState);\n textLineHeight = getValue(layer, 'layout', 'text-line-height', zoom, f, functionCache, featureState);\n font = mb2css(getFonts ? getFonts(fontArray, glStyle.metadata ? glStyle.metadata['ol:webfonts'] : undefined) : fontArray, textSize, textLineHeight);\n if (!font.includes('sans-serif')) {\n font += ',sans-serif';\n }\n letterSpacing = getValue(layer, 'layout', 'text-letter-spacing', zoom, f, functionCache, featureState);\n maxTextWidth = getValue(layer, 'layout', 'text-max-width', zoom, f, functionCache, featureState);\n const textField = getValue(layer, 'layout', 'text-field', zoom, f, functionCache, featureState);\n if (typeof textField === 'object' && textField.sections) {\n if (textField.sections.length === 1) {\n label = textField.toString();\n } else {\n label = textField.sections.reduce((acc, chunk, i) => {\n const fonts = chunk.fontStack ? chunk.fontStack.split(',') : fontArray;\n const chunkFont = mb2css(getFonts ? getFonts(fonts) : fonts, textSize * (chunk.scale || 1), textLineHeight);\n let text = chunk.text;\n if (text === '\\n') {\n acc.push('\\n', '');\n return acc;\n }\n if (type == 2) {\n acc.push(applyLetterSpacing(text, letterSpacing), chunkFont);\n return acc;\n }\n text = wrapText(text, chunkFont, maxTextWidth, letterSpacing).split('\\n');\n for (let i = 0, ii = text.length; i < ii; ++i) {\n if (i > 0) {\n acc.push('\\n', '');\n }\n acc.push(text[i], chunkFont);\n }\n return acc;\n }, []);\n }\n } else {\n label = fromTemplate(textField, properties).trim();\n }\n opacity = getValue(layer, 'paint', 'text-opacity', zoom, f, functionCache, featureState);\n }\n if (label && opacity && !skipLabel) {\n if (!hasImage) {\n ++stylesLength;\n style = styles[stylesLength];\n if (!style || !style.getText() || style.getFill() || style.getStroke()) {\n style = new Style();\n styles[stylesLength] = style;\n }\n style.setImage(undefined);\n style.setGeometry(undefined);\n }\n const declutterMode = getDeclutterMode(layer, zoom, f, 'text', functionCache);\n if (!style.getText()) {\n style.setText(text);\n }\n text = style.getText();\n if (!text || 'getDeclutterMode' in text && text.getDeclutterMode() !== declutterMode) {\n text = new Text({\n padding: [\n 2,\n 2,\n 2,\n 2\n ],\n // @ts-ignore\n declutterMode: declutterMode\n });\n style.setText(text);\n }\n const textTransform = getValue(layer, 'layout', 'text-transform', zoom, f, functionCache, featureState);\n if (textTransform == 'uppercase') {\n label = Array.isArray(label) ? label.map((t, i) => i % 2 ? t : t.toUpperCase()) : label.toUpperCase();\n } else if (textTransform == 'lowercase') {\n label = Array.isArray(label) ? label.map((t, i) => i % 2 ? t : t.toLowerCase()) : label.toLowerCase();\n }\n const wrappedLabel = Array.isArray(label) ? label : type == 2 ? applyLetterSpacing(label, letterSpacing) : wrapText(label, font, maxTextWidth, letterSpacing);\n text.setText(wrappedLabel);\n text.setFont(font);\n text.setRotation(deg2rad(getValue(layer, 'layout', 'text-rotate', zoom, f, functionCache, featureState)));\n if (typeof text.setKeepUpright === 'function') {\n const keepUpright = getValue(layer, 'layout', 'text-keep-upright', zoom, f, functionCache, featureState);\n text.setKeepUpright(keepUpright);\n }\n const textAnchor = getValue(layer, 'layout', 'text-anchor', zoom, f, functionCache, featureState);\n const placement = hasImage || type == 1 ? 'point' : getValue(layer, 'layout', 'symbol-placement', zoom, f, functionCache, featureState);\n let textAlign;\n if (placement === 'line-center') {\n text.setPlacement('line');\n textAlign = 'center';\n } else {\n text.setPlacement(placement);\n }\n if (placement === 'line' && typeof text.setRepeat === 'function') {\n const symbolSpacing = getValue(layer, 'layout', 'symbol-spacing', zoom, f, functionCache, featureState);\n text.setRepeat(symbolSpacing * 2);\n }\n text.setOverflow(placement === 'point');\n let textHaloWidth = getValue(layer, 'paint', 'text-halo-width', zoom, f, functionCache, featureState);\n const textOffset = getValue(layer, 'layout', 'text-offset', zoom, f, functionCache, featureState);\n const textTranslate = getValue(layer, 'paint', 'text-translate', zoom, f, functionCache, featureState);\n // Text offset has to take halo width and line height into account\n let vOffset = 0;\n let hOffset = 0;\n if (placement == 'point') {\n textAlign = 'center';\n if (textAnchor.indexOf('left') !== -1) {\n textAlign = 'left';\n hOffset = textHaloWidth;\n } else if (textAnchor.indexOf('right') !== -1) {\n textAlign = 'right';\n hOffset = -textHaloWidth;\n }\n const textRotationAlignment = getValue(layer, 'layout', 'text-rotation-alignment', zoom, f, functionCache, featureState);\n text.setRotateWithView(textRotationAlignment == 'map');\n } else {\n text.setMaxAngle(deg2rad(getValue(layer, 'layout', 'text-max-angle', zoom, f, functionCache, featureState)) * label.length / wrappedLabel.length);\n text.setRotateWithView(false);\n }\n text.setTextAlign(textAlign);\n let textBaseline = 'middle';\n if (textAnchor.indexOf('bottom') == 0) {\n textBaseline = 'bottom';\n vOffset = -textHaloWidth - 0.5 * (textLineHeight - 1) * textSize;\n } else if (textAnchor.indexOf('top') == 0) {\n textBaseline = 'top';\n vOffset = textHaloWidth + 0.5 * (textLineHeight - 1) * textSize;\n }\n text.setTextBaseline(textBaseline);\n const textJustify = getValue(layer, 'layout', 'text-justify', zoom, f, functionCache, featureState);\n text.setJustify(textJustify === 'auto' ? undefined : textJustify);\n text.setOffsetX(textOffset[0] * textSize + hOffset + textTranslate[0]);\n text.setOffsetY(textOffset[1] * textSize + vOffset + textTranslate[1]);\n textColor.setColor(colorWithOpacity(getValue(layer, 'paint', 'text-color', zoom, f, functionCache, featureState), opacity));\n text.setFill(textColor);\n const haloColor = colorWithOpacity(getValue(layer, 'paint', 'text-halo-color', zoom, f, functionCache, featureState), opacity);\n if (haloColor && textHaloWidth > 0) {\n textHalo.setColor(haloColor);\n // spec here : https://docs.mapbox.com/mapbox-gl-js/style-spec/#paint-symbol-text-halo-width\n // Halo width must be doubled because it is applied around the center of the text outline\n textHaloWidth *= 2;\n // 1/4 of text size (spec) x 2\n const halfTextSize = 0.5 * textSize;\n textHalo.setWidth(textHaloWidth <= halfTextSize ? textHaloWidth : halfTextSize);\n text.setStroke(textHalo);\n } else {\n text.setStroke(undefined);\n }\n const textPadding = getValue(layer, 'layout', 'text-padding', zoom, f, functionCache, featureState);\n const padding = text.getPadding();\n if (textPadding !== padding[0]) {\n padding[0] = textPadding;\n padding[1] = textPadding;\n padding[2] = textPadding;\n padding[3] = textPadding;\n }\n style.setZIndex(index);\n }\n }\n }\n if (stylesLength > -1) {\n styles.length = stylesLength + 1;\n if (recordLayer) {\n if ('set' in feature) {\n // ol/Feature\n feature.set('mapbox-layer', featureBelongsToLayer);\n } else {\n // ol/render/Feature\n feature.getProperties()['mapbox-layer'] = featureBelongsToLayer;\n }\n }\n return styles;\n }\n return undefined;\n };\n olLayer.setStyle(styleFunction);\n olLayer.set('mapbox-source', mapboxSource);\n olLayer.set('mapbox-layers', mapboxLayers);\n olLayer.set('mapbox-featurestate', olLayer.get('mapbox-featurestate') || {});\n return styleFunction;\n}\n/**\n * Get the the style for a specific Mapbox layer only. This can be useful for creating a legend.\n * @param {import(\"ol/Feature\").default|import(\"ol/render/Feature\").default} feature OpenLayers feature.\n * @param {number} resolution View resolution.\n * @param {import(\"ol/layer\").Vector|import(\"ol/layer\").VectorTile} olLayer OpenLayers layer.\n * @param {string} layerId Id of the Mapbox layer to get the style for\n * @return {Array} Styles for the provided Mapbox layer.\n */\nfunction getStyleForLayer(feature, resolution, olLayer, layerId) {\n const evaluateStyle = olLayer.getStyleFunction();\n if (evaluateStyle.length === 3) {\n // @ts-ignore\n return evaluateStyle(feature, resolution, layerId);\n }\n return undefined;\n}\n\n/**\n * Generates a shaded relief image given elevation data. Uses a 3x3\n * neighborhood for determining slope and aspect.\n * @param {Array} inputs Array of input images.\n * @param {Object} data Data added in the \"beforeoperations\" event.\n * @return {ImageData} Output image.\n */\nfunction hillshade(inputs, data) {\n const elevationImage = inputs[0];\n const width = elevationImage.width;\n const height = elevationImage.height;\n const elevationData = elevationImage.data;\n const shadeData = new Uint8ClampedArray(elevationData.length);\n const dp = data.resolution * 2;\n const maxX = width - 1;\n const maxY = height - 1;\n const pixel = [\n 0,\n 0,\n 0,\n 0\n ];\n const twoPi = 2 * Math.PI;\n const halfPi = Math.PI / 2;\n const sunEl = Math.PI * data.sunEl / 180;\n const sunAz = Math.PI * data.sunAz / 180;\n const cosSunEl = Math.cos(sunEl);\n const sinSunEl = Math.sin(sunEl);\n const highlightColor = data.highlightColor;\n const shadowColor = data.shadowColor;\n const accentColor = data.accentColor;\n const encoding = data.encoding;\n let pixelX, pixelY, x0, x1, y0, y1, offset, z0, z1, dzdx, dzdy, slope, aspect, accent, scaled, shade, scaledAccentColor, compositeShadeColor, clamp, slopeScaleBase, scaledSlope, cosIncidence;\n function calculateElevation(pixel, encoding = 'mapbox') {\n // The method used to extract elevations from the DEM.\n //\n // The supported methods are the Mapbox format\n // (red * 256 * 256 + green * 256 + blue) * 0.1 - 10000\n // and the Terrarium format\n // (red * 256 + green + blue / 256) - 32768\n //\n if (encoding === 'mapbox') {\n return (pixel[0] * 256 * 256 + pixel[1] * 256 + pixel[2]) * 0.1 - 10000;\n }\n if (encoding === 'terrarium') {\n return pixel[0] * 256 + pixel[1] + pixel[2] / 256 - 32768;\n }\n }\n for (pixelY = 0; pixelY <= maxY; ++pixelY) {\n y0 = pixelY === 0 ? 0 : pixelY - 1;\n y1 = pixelY === maxY ? maxY : pixelY + 1;\n for (pixelX = 0; pixelX <= maxX; ++pixelX) {\n x0 = pixelX === 0 ? 0 : pixelX - 1;\n x1 = pixelX === maxX ? maxX : pixelX + 1;\n // determine elevation for (x0, pixelY)\n offset = (pixelY * width + x0) * 4;\n pixel[0] = elevationData[offset];\n pixel[1] = elevationData[offset + 1];\n pixel[2] = elevationData[offset + 2];\n pixel[3] = elevationData[offset + 3];\n z0 = data.vert * calculateElevation(pixel, encoding);\n // determine elevation for (x1, pixelY)\n offset = (pixelY * width + x1) * 4;\n pixel[0] = elevationData[offset];\n pixel[1] = elevationData[offset + 1];\n pixel[2] = elevationData[offset + 2];\n pixel[3] = elevationData[offset + 3];\n z1 = data.vert * calculateElevation(pixel, encoding);\n dzdx = (z1 - z0) / dp;\n // determine elevation for (pixelX, y0)\n offset = (y0 * width + pixelX) * 4;\n pixel[0] = elevationData[offset];\n pixel[1] = elevationData[offset + 1];\n pixel[2] = elevationData[offset + 2];\n pixel[3] = elevationData[offset + 3];\n z0 = data.vert * calculateElevation(pixel, encoding);\n // determine elevation for (pixelX, y1)\n offset = (y1 * width + pixelX) * 4;\n pixel[0] = elevationData[offset];\n pixel[1] = elevationData[offset + 1];\n pixel[2] = elevationData[offset + 2];\n pixel[3] = elevationData[offset + 3];\n z1 = data.vert * calculateElevation(pixel, encoding);\n dzdy = (z1 - z0) / dp;\n aspect = Math.atan2(dzdy, -dzdx);\n if (aspect < 0) {\n aspect = halfPi - aspect;\n } else if (aspect > halfPi) {\n aspect = twoPi - aspect + halfPi;\n } else {\n aspect = halfPi - aspect;\n }\n // Bootstrap slope and corresponding incident values\n slope = Math.atan(Math.sqrt(dzdx * dzdx + dzdy * dzdy));\n cosIncidence = sinSunEl * Math.cos(slope) + cosSunEl * Math.sin(slope) * Math.cos(sunAz - aspect);\n accent = Math.cos(slope);\n // 255 for Hex colors\n scaled = 255 * cosIncidence;\n /*\n * The following is heavily inspired\n * by [Maplibre's equivalent WebGL shader](https://github.com/maplibre/maplibre-gl-js/blob/main/src/shaders/hillshade.fragment.glsl)\n */\n // Forces given value to stay between two given extremes\n clamp = Math.min(Math.max(2 * data.sunEl, 0), 1);\n // Intensity basis for hillshade opacity\n slopeScaleBase = 1.875 - data.opacity * 1.75;\n // Intensity interpolation so that higher intensity values create more opaque hillshading\n scaledSlope = data.opacity !== 0.5 ? halfPi * ((Math.pow(slopeScaleBase, slope) - 1) / (Math.pow(slopeScaleBase, halfPi) - 1)) : slope;\n // Accent hillshade color with given accentColor to emphasize rougher terrain\n scaledAccentColor = {\n r: (1 - accent) * accentColor.r * clamp * 255,\n g: (1 - accent) * accentColor.g * clamp * 255,\n b: (1 - accent) * accentColor.b * clamp * 255,\n a: (1 - accent) * accentColor.a * clamp * 255\n };\n // Allows highlight vs shadow discrimination\n shade = Math.abs(((aspect + sunAz) / Math.PI + 0.5) % 2 - 1);\n // Creates a composite color mix between highlight & shadow colors to emphasize slopes\n compositeShadeColor = {\n r: (highlightColor.r * (1 - shade) + shadowColor.r * shade) * scaled,\n g: (highlightColor.g * (1 - shade) + shadowColor.g * shade) * scaled,\n b: (highlightColor.b * (1 - shade) + shadowColor.b * shade) * scaled,\n a: (highlightColor.a * (1 - shade) + shadowColor.a * shade) * scaled\n };\n // Fill in result color value\n offset = (pixelY * width + pixelX) * 4;\n shadeData[offset] = scaledAccentColor.r * (1 - shade) + compositeShadeColor.r;\n shadeData[offset + 1] = scaledAccentColor.g * (1 - shade) + compositeShadeColor.g;\n shadeData[offset + 2] = scaledAccentColor.b * (1 - shade) + compositeShadeColor.b;\n // Key opacity on the scaledSlope to improve legibility by increasing higher elevation rates' contrast\n shadeData[offset + 3] = elevationData[offset + 3] * data.opacity * clamp * Math.sin(scaledSlope);\n }\n }\n return new ImageData(shadeData, width, height);\n}\n\n/*\nol-mapbox-style - Use Mapbox/MapLibre Style objects with OpenLayers\nCopyright 2016-present ol-mapbox-style contributors\nLicense: https://raw.githubusercontent.com/openlayers/ol-mapbox-style/master/LICENSE\n*/\n/**\n * @typedef {Object} FeatureIdentifier\n * @property {string|number} id The feature id.\n * @property {string} source The source id.\n */\n/**\n * @typedef {Object} Options\n * @property {string} [accessToken] Access token for 'mapbox://' urls.\n * @property {function(string, import(\"./util.js\").ResourceType): (Request|string|Promise|void)} [transformRequest]\n * Function for controlling how `ol-mapbox-style` fetches resources. Can be used for modifying\n * the url, adding headers or setting credentials options. Called with the url and the resource\n * type as arguments, this function is supposed to return a `Request` or a url `string`, or a promise tehereof.\n * Without a return value the original request will not be modified.\n * @property {string} [projection='EPSG:3857'] Only useful when working with non-standard projections.\n * Code of a projection registered with OpenLayers. All sources of the style must be provided in this\n * projection. The projection must also have a valid extent defined, which will be used to determine the\n * origin and resolutions of the tile grid for all tiled sources of the style. When provided, the bbox\n * placeholder in tile and geojson urls changes: the default is `{bbox-epsg-3857}`, when projection is e.g.\n * set to `EPSG:4326`, the bbox placeholder will be `{bbox-epsg-4326}`.\n * @property {Array} [resolutions] Only useful when working with non-standard projections.\n * Resolutions for mapping resolution to the `zoom` used in the Mapbox/MapLibre style.\n * @property {string} [styleUrl] URL of the Mapbox GL style. Required for styles that were provided\n * as object, when they contain a relative sprite url, or sources referencing data by relative url.\n * @property {string} [webfonts] Template for resolving webfonts. Can be used to specify where to fetch\n * web fonts when no `ol:webfonts` metadata is set in the style object. See `getFonts()` and the\n * \"Font handling\" section in `README.md` for details.\n * @property {function(VectorLayer|VectorTileLayer, string):HTMLImageElement|HTMLCanvasElement|string|undefined} [getImage=undefined]\n * Function that returns an image for an icon name. If the result is an HTMLImageElement, it must already be\n * loaded. The layer can be used to call layer.changed() when the loading and processing of the image has finished.\n * This function be used for icons not in the sprite or to override sprite icons.\n * @property {string} [accessTokenParam='access_token'] Access token param. For internal use.\n */\n/**\n * @typedef {Object} ApplyStyleOptions\n * @property {string} [source=''] Source. Default is `''`, which causes the first source in the\n * style to be used.\n * @property {Array} [layers] Layers. If no source is provided, the layers with the\n * provided ids will be used from the style's `layers` array. All layers need to use the same source.\n * @property {boolean} [updateSource=true] Update or create vector (tile) layer source with parameters\n * specified for the source in the mapbox style definition.\n */\n/**\n * @param {import(\"ol/proj/Projection.js\").default} projection Projection.\n * @param {number} [tileSize=512] Tile size.\n * @return {Array} Resolutions.\n */\nfunction getTileResolutions(projection, tileSize = 512) {\n return projection.getExtent() ? createXYZ({\n extent: projection.getExtent(),\n tileSize: tileSize,\n maxZoom: 22\n }).getResolutions() : defaultResolutions;\n}\n/**\n * @param {string} styleUrl Style URL.\n * @param {Options} options Options.\n * @return {Options} Completed options with accessToken and accessTokenParam.\n */\nfunction completeOptions(styleUrl, options) {\n if (!options.accessToken) {\n options = Object.assign({}, options);\n const searchParams = new URL(styleUrl).searchParams;\n // The last search parameter is the access token\n searchParams.forEach((value, key) => {\n options.accessToken = value;\n options.accessTokenParam = key;\n });\n }\n return options;\n}\n/**\n * Applies a style function to an `ol/layer/VectorTile` or `ol/layer/Vector`\n * with an `ol/source/VectorTile` or an `ol/source/Vector`. If the layer does not have a source\n * yet, it will be created and populated from the information in the `glStyle` (unless `updateSource` is\n * set to `false`).\n *\n * **Example:**\n * ```js\n * import {applyStyle} from 'ol-mapbox-style';\n * import {VectorTile} from 'ol/layer.js';\n *\n * const layer = new VectorTile({declutter: true});\n * applyStyle(layer, 'https://api.maptiler.com/maps/basic/style.json?key=YOUR_OPENMAPTILES_TOKEN');\n * ```\n *\n * The style function will render all layers from the `glStyle` object that use the source\n * of the first layer, the specified `source`, or a subset of layers from the same source. The\n * source needs to be a `\"type\": \"vector\"` or `\"type\": \"geojson\"` source.\n *\n * Two additional properties will be set on the provided layer:\n *\n * * `mapbox-source`: The `id` of the Mapbox/MapLibre Style document's source that the\n * OpenLayers layer was created from. Usually `apply()` creates one\n * OpenLayers layer per Mapbox/MapLibre Style source, unless the layer stack has\n * layers from different sources in between.\n * * `mapbox-layers`: The `id`s of the Mapbox/MapLibre Style document's layers that are\n * included in the OpenLayers layer.\n *\n * @param {VectorTileLayer|VectorLayer} layer OpenLayers layer. When the layer has a source configured,\n * it will be modified to use the configuration from the glStyle's `source`. Options specified on the\n * layer's source will override those from the glStyle's `source`, except for `url` and\n * `tileUrlFunction`. When the source projection is the default (`EPSG:3857`), the `tileGrid` will\n * also be overridden. If you'd rather not have ol-mapbox-style modify the source, configure `applyStyle()`\n * with the `updateSource: false` option.\n * @param {string|Object} glStyle Mapbox/MapLibre Style object.\n * @param {string|Array|Options&ApplyStyleOptions} [sourceOrLayersOrOptions] Options or\n * `source` key or an array of layer `id`s from the Mapbox/MapLibre Style object. When a `source` key is\n * provided, all layers for the specified source will be included in the style function. When layer\n * `id`s are provided, they must be from layers that use the same source. When not provided or a falsey\n * value, all layers using the first source specified in the glStyle will be rendered.\n * @param {Options&ApplyStyleOptions|string} [optionsOrPath] **Deprecated**. Options. Alternatively the path of the style file\n * (only required when a relative path is used for the `\"sprite\"` property of the style).\n * @param {Array} [resolutions] **Deprecated**. Resolutions for mapping resolution to zoom level.\n * Only needed when working with non-standard tile grids or projections, can also be supplied with\n * options.\n * @return {Promise} Promise which will be resolved when the style can be used\n * for rendering.\n */\nfunction applyStyle(layer, glStyle, sourceOrLayersOrOptions = '', optionsOrPath = {}, resolutions = undefined) {\n let styleUrl, sourceId;\n /** @type {Options&ApplyStyleOptions} */\n let options;\n let sourceOrLayers;\n let updateSource = true;\n if (typeof sourceOrLayersOrOptions !== 'string' && !Array.isArray(sourceOrLayersOrOptions)) {\n options = sourceOrLayersOrOptions;\n sourceOrLayers = options.source || options.layers;\n optionsOrPath = options;\n } else {\n sourceOrLayers = sourceOrLayersOrOptions;\n }\n if (typeof optionsOrPath === 'string') {\n styleUrl = optionsOrPath;\n options = {};\n } else {\n styleUrl = optionsOrPath.styleUrl;\n options = optionsOrPath;\n }\n if (options.updateSource === false) {\n updateSource = false;\n }\n if (!resolutions) {\n resolutions = options.resolutions;\n }\n if (!styleUrl && typeof glStyle === 'string' && !glStyle.trim().startsWith('{')) {\n styleUrl = glStyle;\n }\n if (styleUrl) {\n styleUrl = styleUrl.startsWith('data:') ? location.href : normalizeStyleUrl(styleUrl, options.accessToken);\n options = completeOptions(styleUrl, options);\n }\n return new Promise(function (resolve, reject) {\n // TODO: figure out where best place to check source type is\n // Note that the source arg is an array of gl layer ids and each must be\n // dereferenced to get source type to validate\n getGlStyle(glStyle, options).then(function (glStyle) {\n if (glStyle.version != 8) {\n return reject(new Error('glStyle version 8 required.'));\n }\n if (!(layer instanceof VectorLayer || layer instanceof VectorTileLayer)) {\n return reject(new Error('Can only apply to VectorLayer or VectorTileLayer'));\n }\n const type = layer instanceof VectorTileLayer ? 'vector' : 'geojson';\n if (!sourceOrLayers) {\n sourceId = Object.keys(glStyle.sources).find(function (key) {\n return glStyle.sources[key].type === type;\n });\n sourceOrLayers = sourceId;\n } else if (Array.isArray(sourceOrLayers)) {\n sourceId = glStyle.layers.find(function (layer) {\n return layer.id === sourceOrLayers[0];\n }).source;\n } else {\n sourceId = sourceOrLayers;\n }\n if (!sourceId) {\n return reject(new Error(`No ${ type } source found in the glStyle.`));\n }\n function assignSource() {\n if (!updateSource) {\n return Promise.resolve();\n }\n if (layer instanceof VectorTileLayer) {\n return setupVectorSource(glStyle.sources[sourceId], styleUrl, options).then(function (source) {\n const targetSource = layer.getSource();\n if (!targetSource) {\n layer.setSource(source);\n } else if (source !== targetSource) {\n targetSource.setTileUrlFunction(source.getTileUrlFunction());\n if (typeof targetSource.setUrls === 'function' && typeof source.getUrls === 'function') {\n // to get correct keys for tile cache and queue\n targetSource.setUrls(source.getUrls());\n }\n //@ts-ignore\n if (!targetSource.format_) {\n //@ts-ignore\n targetSource.format_ = source.format_;\n }\n if (!targetSource.getAttributions()) {\n targetSource.setAttributions(source.getAttributions());\n }\n if (targetSource.getTileLoadFunction() === defaultLoadFunction) {\n targetSource.setTileLoadFunction(source.getTileLoadFunction());\n }\n if (equivalent(targetSource.getProjection(), source.getProjection())) {\n targetSource.tileGrid = source.getTileGrid();\n }\n }\n const tileGrid = layer.getSource().getTileGrid();\n if (!isFinite(layer.getMaxResolution()) && !isFinite(layer.getMinZoom()) && tileGrid.getMinZoom() > 0) {\n layer.setMaxResolution(getResolutionForZoom(Math.max(0, tileGrid.getMinZoom() - 1e-12), tileGrid.getResolutions()));\n }\n });\n }\n const glSource = glStyle.sources[sourceId];\n let source = layer.getSource();\n if (!source || source.get('mapbox-source') !== glSource) {\n source = setupGeoJSONSource(glSource, styleUrl, options);\n }\n const targetSource = layer.getSource();\n if (!targetSource) {\n layer.setSource(source);\n } else if (source !== targetSource) {\n if (!targetSource.getAttributions()) {\n targetSource.setAttributions(source.getAttributions());\n }\n //@ts-ignore\n if (!targetSource.format_) {\n //@ts-ignore\n targetSource.format_ = source.getFormat();\n }\n //@ts-ignore\n targetSource.url_ = source.getUrl();\n }\n return Promise.resolve();\n }\n let spriteScale, spriteData, spriteImageUrl, style;\n function onChange() {\n if (!style && (!glStyle.sprite || spriteData)) {\n if (options.projection && !resolutions) {\n const projection = get$1(options.projection);\n const units = projection.getUnits();\n if (units !== 'm') {\n resolutions = defaultResolutions.map(resolution => resolution / METERS_PER_UNIT[units]);\n }\n }\n style = stylefunction(layer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, (fonts, templateUrl = options.webfonts) => getFonts(fonts, templateUrl), options.getImage);\n if (!layer.getStyle()) {\n reject(new Error(`Nothing to show for source [${ sourceId }]`));\n } else {\n assignSource().then(resolve).catch(reject);\n }\n } else if (style) {\n layer.setStyle(style);\n assignSource().then(resolve).catch(reject);\n } else {\n reject(new Error('Something went wrong trying to apply style.'));\n }\n }\n if (glStyle.sprite) {\n const sprite = new URL(normalizeSpriteUrl(glStyle.sprite, options.accessToken, styleUrl || location.href));\n spriteScale = window.devicePixelRatio >= 1.5 ? 0.5 : 1;\n const sizeFactor = spriteScale == 0.5 ? '@2x' : '';\n let spriteUrl = sprite.origin + sprite.pathname + sizeFactor + '.json' + sprite.search;\n new Promise(function (resolve, reject) {\n fetchResource('Sprite', spriteUrl, options).then(resolve).catch(function (error) {\n spriteUrl = sprite.origin + sprite.pathname + '.json' + sprite.search;\n fetchResource('Sprite', spriteUrl, options).then(resolve).catch(reject);\n });\n }).then(function (spritesJson) {\n if (spritesJson === undefined) {\n reject(new Error('No sprites found.'));\n }\n spriteData = spritesJson;\n spriteImageUrl = sprite.origin + sprite.pathname + sizeFactor + '.png' + sprite.search;\n if (options.transformRequest) {\n const transformed = options.transformRequest(spriteImageUrl, 'SpriteImage') || spriteImageUrl;\n if (transformed instanceof Request || transformed instanceof Promise) {\n spriteImageUrl = transformed;\n }\n }\n onChange();\n }).catch(function (err) {\n reject(new Error(`Sprites cannot be loaded: ${ spriteUrl }: ${ err.message }`));\n });\n } else {\n onChange();\n }\n }).catch(reject);\n });\n}\nconst emptyObj = {};\nfunction setFirstBackground(mapOrLayer, glStyle, options) {\n glStyle.layers.some(function (layer) {\n if (layer.type === 'background') {\n if (mapOrLayer instanceof Layer) {\n mapOrLayer.setBackground(function (resolution) {\n return getBackgroundColor(layer, resolution, options, {});\n });\n return true;\n }\n if (mapOrLayer instanceof Map || mapOrLayer instanceof LayerGroup) {\n mapOrLayer.getLayers().insertAt(0, setupBackgroundLayer(layer, options, {}));\n return true;\n }\n }\n });\n}\n/**\n * Applies properties of the Mapbox/MapLibre Style's first `background` layer to the\n * provided map or layer (group).\n *\n * **Example:**\n * ```js\n * import {applyBackground} from 'ol-mapbox-style';\n * import {Map} from 'ol';\n *\n * const map = new Map({target: 'map'});\n * applyBackground(map, 'https://api.maptiler.com/maps/basic/style.json?key=YOUR_OPENMAPTILES_TOKEN');\n * ```\n * @param {Map|import(\"ol/layer/Base.js\").default} mapOrLayer OpenLayers Map or layer (group).\n * @param {Object|string} glStyle Mapbox/MapLibre Style object or url.\n * @param {Options} options Options.\n * @return {Promise} Promise that resolves when the background is applied.\n */\nfunction applyBackground(mapOrLayer, glStyle, options = {}) {\n return getGlStyle(glStyle, options).then(function (glStyle) {\n setFirstBackground(mapOrLayer, glStyle, options);\n });\n}\nfunction getSourceIdByRef(layers, ref) {\n let sourceId;\n layers.some(function (layer) {\n if (layer.id == ref) {\n sourceId = layer.source;\n return true;\n }\n });\n return sourceId;\n}\nfunction extentFromTileJSON(tileJSON, projection) {\n const bounds = tileJSON.bounds;\n if (bounds) {\n const ll = fromLonLat([\n bounds[0],\n bounds[1]\n ], projection);\n const tr = fromLonLat([\n bounds[2],\n bounds[3]\n ], projection);\n return [\n ll[0],\n ll[1],\n tr[0],\n tr[1]\n ];\n }\n return get$1(projection).getExtent();\n}\nfunction sourceOptionsFromTileJSON(glSource, tileJSON, options) {\n const tileJSONSource = new TileJSON({\n tileJSON: tileJSON,\n tileSize: glSource.tileSize || tileJSON.tileSize || 512\n });\n const tileJSONDoc = tileJSONSource.getTileJSON();\n const tileGrid = tileJSONSource.getTileGrid();\n const projection = get$1(options.projection || 'EPSG:3857');\n const extent = extentFromTileJSON(tileJSONDoc, projection);\n const projectionExtent = projection.getExtent();\n const minZoom = tileJSONDoc.minzoom || 0;\n const maxZoom = tileJSONDoc.maxzoom || 22;\n /** @type {import(\"ol/source/VectorTile.js\").Options} */\n const sourceOptions = {\n attributions: tileJSONSource.getAttributions(),\n projection: projection,\n tileGrid: new TileGrid({\n origin: projectionExtent ? getTopLeft(projectionExtent) : tileGrid.getOrigin(0),\n extent: extent || tileGrid.getExtent(),\n minZoom: minZoom,\n resolutions: getTileResolutions(projection, tileJSON.tileSize).slice(0, maxZoom + 1),\n tileSize: tileGrid.getTileSize(0)\n })\n };\n if (Array.isArray(tileJSONDoc.tiles)) {\n sourceOptions.urls = tileJSONDoc.tiles;\n } else {\n sourceOptions.url = tileJSONDoc.tiles;\n }\n return sourceOptions;\n}\nfunction getBackgroundColor(glLayer, resolution, options, functionCache) {\n const background = {\n id: glLayer.id,\n type: glLayer.type\n };\n const layout = glLayer.layout || {};\n const paint = glLayer.paint || {};\n background['paint'] = paint;\n const zoom = getZoomForResolution(resolution, options.resolutions || defaultResolutions);\n let opacity;\n const bg = getValue(background, 'paint', 'background-color', zoom, emptyObj, functionCache);\n if (paint['background-opacity'] !== undefined) {\n opacity = getValue(background, 'paint', 'background-opacity', zoom, emptyObj, functionCache);\n }\n return layout.visibility == 'none' ? undefined : colorWithOpacity(bg, opacity);\n}\n/**\n * @param {Object} glLayer Mapbox/MapLibre Style layer object.\n * @param {Options} options Options.\n * @param {Object} functionCache Cache for functions.\n * @return {Layer} OpenLayers layer.\n */\nfunction setupBackgroundLayer(glLayer, options, functionCache) {\n const div = document.createElement('div');\n div.className = 'ol-mapbox-style-background';\n div.style.position = 'absolute';\n div.style.width = '100%';\n div.style.height = '100%';\n return new Layer({\n source: new Source({}),\n render(frameState) {\n const color = getBackgroundColor(glLayer, frameState.viewState.resolution, options, functionCache);\n div.style.backgroundColor = color;\n return div;\n }\n });\n}\n/**\n * Creates an OpenLayers VectorTile source for a gl source entry.\n * @param {Object} glSource \"source\" entry from a Mapbox/MapLibre Style object.\n * @param {string|undefined} styleUrl URL to use for the source. This is expected to be the complete http(s) url,\n * with access key applied.\n * @param {Options} options Options.\n * @return {Promise} Promise resolving to a VectorTile source.\n * @private\n */\nfunction setupVectorSource(glSource, styleUrl, options) {\n return new Promise(function (resolve, reject) {\n getTileJson(glSource, styleUrl, options).then(function ({tileJson, tileLoadFunction}) {\n const sourceOptions = sourceOptionsFromTileJSON(glSource, tileJson, options);\n sourceOptions.tileLoadFunction = tileLoadFunction;\n sourceOptions.format = new MVT();\n resolve(new VectorTileSource(sourceOptions));\n }).catch(reject);\n });\n}\nfunction setupVectorLayer(glSource, styleUrl, options) {\n const layer = new VectorTileLayer({\n declutter: true,\n visible: false\n });\n setupVectorSource(glSource, styleUrl, options).then(function (source) {\n source.set('mapbox-source', glSource);\n layer.setSource(source);\n }).catch(function (error) {\n layer.setSource(undefined);\n });\n return layer;\n}\nfunction getBboxTemplate(projection) {\n const projCode = projection ? projection.getCode() : 'EPSG:3857';\n return `{bbox-${ projCode.toLowerCase().replace(/[^a-z0-9]/g, '-') }}`;\n}\nfunction setupRasterSource(glSource, styleUrl, options) {\n return new Promise(function (resolve, reject) {\n getTileJson(glSource, styleUrl, options).then(function ({tileJson, tileLoadFunction}) {\n const source = new TileJSON({\n interpolate: options.interpolate === undefined ? true : options.interpolate,\n transition: 0,\n crossOrigin: 'anonymous',\n tileJSON: tileJson\n });\n source.tileGrid = sourceOptionsFromTileJSON(glSource, tileJson, options).tileGrid;\n if (options.projection) {\n //@ts-ignore\n source.projection = get$1(options.projection);\n }\n const getTileUrl = source.getTileUrlFunction();\n if (tileLoadFunction) {\n source.setTileLoadFunction(tileLoadFunction);\n }\n source.setTileUrlFunction(function (tileCoord, pixelRatio, projection) {\n const bboxTemplate = getBboxTemplate(projection);\n let src = getTileUrl(tileCoord, pixelRatio, projection);\n if (src.indexOf(bboxTemplate) != -1) {\n const bbox = source.getTileGrid().getTileCoordExtent(tileCoord);\n src = src.replace(bboxTemplate, bbox.toString());\n }\n return src;\n });\n source.set('mapbox-source', glSource);\n resolve(source);\n }).catch(function (error) {\n reject(error);\n });\n });\n}\nfunction setupRasterLayer(glSource, styleUrl, options) {\n const layer = new TileLayer();\n setupRasterSource(glSource, styleUrl, options).then(function (source) {\n layer.setSource(source);\n }).catch(function () {\n layer.setSource(undefined);\n });\n return layer;\n}\n/**\n *\n * @param {Object} glSource \"source\" entry from a Mapbox/MapLibre Style object.\n * @param {string} styleUrl Style url\n * @param {Options} options ol-mapbox-style options.\n * @return {ImageLayer} The raster layer\n */\nfunction setupHillshadeLayer(glSource, styleUrl, options) {\n const tileLayer = setupRasterLayer(glSource, styleUrl, options);\n /** @type {ImageLayer} */\n const layer = new ImageLayer({\n source: new Raster({\n operationType: 'image',\n operation: hillshade,\n sources: [tileLayer]\n })\n });\n return layer;\n}\n/**\n * @param {Object} glSource glStyle source.\n * @param {string} styleUrl Style URL.\n * @param {Options} options Options.\n * @return {VectorSource} Configured vector source.\n */\nfunction setupGeoJSONSource(glSource, styleUrl, options) {\n const geoJsonFormat = options.projection ? new GeoJSON({ dataProjection: options.projection }) : new GeoJSON();\n const data = glSource.data;\n const sourceOptions = {};\n if (typeof data == 'string') {\n const [geoJsonUrl] = normalizeSourceUrl(data, options.accessToken, options.accessTokenParam || 'access_token', styleUrl || location.href);\n if (/\\{bbox-[0-9a-z-]+\\}/.test(geoJsonUrl)) {\n const extentUrl = (extent, resolution, projection) => {\n const bboxTemplate = getBboxTemplate(projection);\n return geoJsonUrl.replace(bboxTemplate, `${ extent.join(',') }`);\n };\n const source = new VectorSource({\n attributions: glSource.attribution,\n format: geoJsonFormat,\n loader: (extent, resolution, projection, success, failure) => {\n const url = typeof extentUrl === 'function' ? extentUrl(extent, resolution, projection) : extentUrl;\n fetchResource('GeoJSON', url, options).then(json => {\n const features = source.getFormat().readFeatures(json, { featureProjection: projection });\n source.addFeatures(features);\n success(features);\n }).catch(response => {\n source.removeLoadedExtent(extent);\n failure();\n });\n },\n strategy: bbox\n });\n source.set('mapbox-source', glSource);\n return source;\n }\n const source = new VectorSource({\n attributions: glSource.attribution,\n format: geoJsonFormat,\n url: geoJsonUrl,\n loader: (extent, resolution, projection, success, failure) => {\n fetchResource('GeoJSON', geoJsonUrl, options).then(json => {\n const features = source.getFormat().readFeatures(json, { featureProjection: projection });\n source.addFeatures(features);\n success(features);\n }).catch(response => {\n source.removeLoadedExtent(extent);\n failure();\n });\n }\n });\n return source;\n }\n sourceOptions.features = geoJsonFormat.readFeatures(data, { featureProjection: getUserProjection() || 'EPSG:3857' });\n const source = new VectorSource(Object.assign({\n attributions: glSource.attribution,\n format: geoJsonFormat\n }, sourceOptions));\n source.set('mapbox-source', glSource);\n return source;\n}\nfunction setupGeoJSONLayer(glSource, styleUrl, options) {\n return new VectorLayer({\n declutter: true,\n source: setupGeoJSONSource(glSource, styleUrl, options),\n visible: false\n });\n}\nfunction prerenderRasterLayer(glLayer, layer, functionCache) {\n let zoom = null;\n return function (event) {\n if (glLayer.paint && 'raster-opacity' in glLayer.paint && event.frameState.viewState.zoom !== zoom) {\n zoom = event.frameState.viewState.zoom;\n delete functionCache[glLayer.id];\n updateRasterLayerProperties(glLayer, layer, zoom, functionCache);\n }\n };\n}\nfunction updateRasterLayerProperties(glLayer, layer, zoom, functionCache) {\n const opacity = getValue(glLayer, 'paint', 'raster-opacity', zoom, emptyObj, functionCache);\n layer.setOpacity(opacity);\n}\nfunction manageVisibility(layer, mapOrGroup) {\n function onChange() {\n const glStyle = mapOrGroup.get('mapbox-style');\n if (!glStyle) {\n return;\n }\n const mapboxLayers = derefLayers(glStyle.layers);\n const layerMapboxLayerids = layer.get('mapbox-layers');\n const visible = mapboxLayers.filter(function (mapboxLayer) {\n return layerMapboxLayerids.includes(mapboxLayer.id);\n }).some(function (mapboxLayer) {\n return !mapboxLayer.layout || !mapboxLayer.layout.visibility || mapboxLayer.layout.visibility === 'visible';\n });\n if (layer.get('visible') !== visible) {\n layer.setVisible(visible);\n }\n }\n layer.on('change', onChange);\n onChange();\n}\nfunction setupLayer(glStyle, styleUrl, glLayer, options) {\n const functionCache = getFunctionCache(glStyle);\n const glLayers = glStyle.layers;\n const type = glLayer.type;\n const id = glLayer.source || getSourceIdByRef(glLayers, glLayer.ref);\n const glSource = glStyle.sources[id];\n let layer;\n if (type == 'background') {\n layer = setupBackgroundLayer(glLayer, options, functionCache);\n } else if (glSource.type == 'vector') {\n layer = setupVectorLayer(glSource, styleUrl, options);\n } else if (glSource.type == 'raster') {\n layer = setupRasterLayer(glSource, styleUrl, options);\n layer.setVisible(glLayer.layout ? glLayer.layout.visibility !== 'none' : true);\n layer.on('prerender', prerenderRasterLayer(glLayer, layer, functionCache));\n } else if (glSource.type == 'geojson') {\n layer = setupGeoJSONLayer(glSource, styleUrl, options);\n } else if (glSource.type == 'raster-dem' && glLayer.type == 'hillshade') {\n const hillshadeLayer = setupHillshadeLayer(glSource, styleUrl, options);\n layer = hillshadeLayer;\n hillshadeLayer.getSource().on('beforeoperations', function (event) {\n const data = event.data;\n data.resolution = getPointResolution(options.projection || 'EPSG:3857', event.resolution, getCenter(event.extent), 'm');\n const zoom = getZoomForResolution(event.resolution, options.resolutions || defaultResolutions);\n data.encoding = glSource.encoding;\n data.vert = 5 * getValue(glLayer, 'paint', 'hillshade-exaggeration', zoom, emptyObj, functionCache);\n data.sunAz = getValue(glLayer, 'paint', 'hillshade-illumination-direction', zoom, emptyObj, functionCache);\n data.sunEl = 35;\n data.opacity = 0.3;\n data.highlightColor = getValue(glLayer, 'paint', 'hillshade-highlight-color', zoom, emptyObj, functionCache);\n data.shadowColor = getValue(glLayer, 'paint', 'hillshade-shadow-color', zoom, emptyObj, functionCache);\n data.accentColor = getValue(glLayer, 'paint', 'hillshade-accent-color', zoom, emptyObj, functionCache);\n });\n layer.setVisible(glLayer.layout ? glLayer.layout.visibility !== 'none' : true);\n }\n const glSourceId = id;\n if (layer) {\n layer.set('mapbox-source', glSourceId);\n }\n return layer;\n}\n/**\n * @param {*} glStyle Mapbox/MapLibre Style.\n * @param {Map|LayerGroup} mapOrGroup Map or layer group.\n * @param {string} styleUrl Style URL.\n * @param {Options} options Options.\n * @return {Promise} Promise that resolves when the style is loaded.\n */\nfunction processStyle(glStyle, mapOrGroup, styleUrl, options) {\n const promises = [];\n let view = null;\n if (mapOrGroup instanceof Map) {\n view = mapOrGroup.getView();\n if (!view.isDef() && !view.getRotation() && !view.getResolutions()) {\n const projection = options.projection ? get$1(options.projection) : view.getProjection();\n view = new View(Object.assign(view.getProperties(), {\n maxResolution: defaultResolutions[0] / METERS_PER_UNIT[projection.getUnits()],\n projection: options.projection || view.getProjection()\n }));\n mapOrGroup.setView(view);\n }\n if ('center' in glStyle && !view.getCenter()) {\n view.setCenter(fromLonLat(glStyle.center, view.getProjection()));\n }\n if ('zoom' in glStyle && view.getZoom() === undefined) {\n view.setResolution(defaultResolutions[0] / METERS_PER_UNIT[view.getProjection().getUnits()] / Math.pow(2, glStyle.zoom));\n }\n if (!view.getCenter() || view.getZoom() === undefined) {\n view.fit(view.getProjection().getExtent(), {\n nearest: true,\n size: mapOrGroup.getSize()\n });\n }\n }\n mapOrGroup.set('mapbox-style', glStyle);\n mapOrGroup.set('mapbox-metadata', {\n styleUrl,\n options\n });\n const glLayers = glStyle.layers;\n let layerIds = [];\n let layer, glSourceId, id;\n for (let i = 0, ii = glLayers.length; i < ii; ++i) {\n const glLayer = glLayers[i];\n const type = glLayer.type;\n if (type == 'heatmap') {\n //FIXME Unsupported layer type\n // eslint-disable-next-line no-console\n console.debug(`layers[${ i }].type \"${ type }\" not supported`);\n continue;\n } else {\n id = glLayer.source || getSourceIdByRef(glLayers, glLayer.ref);\n // this technique assumes gl layers will be in a particular order\n if (!id || id != glSourceId) {\n if (layerIds.length) {\n promises.push(finalizeLayer(layer, layerIds, glStyle, styleUrl, mapOrGroup, options));\n layerIds = [];\n }\n layer = setupLayer(glStyle, styleUrl, glLayer, options);\n if (!(layer instanceof VectorLayer || layer instanceof VectorTileLayer)) {\n layerIds = [];\n }\n glSourceId = layer.get('mapbox-source');\n }\n layerIds.push(glLayer.id);\n }\n }\n promises.push(finalizeLayer(layer, layerIds, glStyle, styleUrl, mapOrGroup, options));\n return Promise.all(promises);\n}\n/**\n * Loads and applies a Mapbox/MapLibre Style object into an OpenLayers Map or LayerGroup.\n * This includes the map background, the layers, and for Map instances that did not\n * have a View defined yet also the center and the zoom.\n *\n * **Example:**\n * ```js\n * import apply from 'ol-mapbox-style';\n *\n * apply('map', 'mapbox://styles/mapbox/bright-v9', {accessToken: 'YOUR_MAPBOX_TOKEN'});\n * ```\n *\n * The center and zoom will only be set if present in the Mapbox/MapLibre Style document,\n * and if not already set on the OpenLayers map.\n *\n * Layers will be added to the OpenLayers map, without affecting any layers that\n * might already be set on the map.\n *\n * Layers added by `apply()` will have two additional properties:\n *\n * * `mapbox-source`: The `id` of the Mapbox/MapLibre Style document's source that the\n * OpenLayers layer was created from. Usually `apply()` creates one\n * OpenLayers layer per Mapbox/MapLibre Style source, unless the layer stack has\n * layers from different sources in between.\n * * `mapbox-layers`: The `id`s of the Mapbox/MapLibre Style document's layers that are\n * included in the OpenLayers layer.\n *\n * This function sets an additional `mapbox-style` property on the OpenLayers\n * Map or LayerGroup instance, which holds the Mapbox/MapLibre Style object.\n *\n * @param {Map|HTMLElement|string|LayerGroup} mapOrGroupOrElement Either an existing\n * OpenLayers Map instance, or a HTML element, or the id of a HTML element that will be\n * the target of a new OpenLayers Map, or a layer group. If layer group, styles\n * releated to the map and view will be ignored.\n * @param {string|Object} style JSON style object or style url pointing to a\n * Mapbox/MapLibre Style object. When using Mapbox APIs, the url is the `styleUrl`\n * shown in Mapbox Studio's \"share\" panel. In addition, the `accessToken` option\n * (see below) must be set.\n * When passed as JSON style object, all OpenLayers layers created by `apply()`\n * will be immediately available, but they may not have a source yet (i.e. when\n * they are defined by a TileJSON url in the Mapbox/MapLibre Style document). When passed\n * as style url, layers will be added to the map when the Mapbox/MapLibre Style document\n * is loaded and parsed.\n * @param {Options} options Options.\n * @return {Promise} A promise that resolves after all layers have been added to\n * the OpenLayers Map instance or LayerGroup, their sources set, and their styles applied. The\n * `resolve` callback will be called with the OpenLayers Map instance or LayerGroup as\n * argument.\n */\nfunction apply(mapOrGroupOrElement, style, options = {}) {\n let promise;\n /** @type {Map|LayerGroup} */\n let mapOrGroup;\n if (typeof mapOrGroupOrElement === 'string' || mapOrGroupOrElement instanceof HTMLElement) {\n mapOrGroup = new Map({ target: mapOrGroupOrElement });\n } else {\n mapOrGroup = mapOrGroupOrElement;\n }\n if (typeof style === 'string') {\n const styleUrl = style.startsWith('data:') ? location.href : normalizeStyleUrl(style, options.accessToken);\n options = completeOptions(styleUrl, options);\n promise = new Promise(function (resolve, reject) {\n getGlStyle(style, options).then(function (glStyle) {\n processStyle(glStyle, mapOrGroup, styleUrl, options).then(function () {\n resolve(mapOrGroup);\n }).catch(reject);\n }).catch(function (err) {\n reject(new Error(`Could not load ${ style }: ${ err.message }`));\n });\n });\n } else {\n promise = new Promise(function (resolve, reject) {\n processStyle(style, mapOrGroup, !options.styleUrl || options.styleUrl.startsWith('data:') ? location.href : normalizeStyleUrl(options.styleUrl, options.accessToken), options).then(function () {\n resolve(mapOrGroup);\n }).catch(reject);\n });\n }\n return promise;\n}\n/**\n * If layerIds is not empty, applies the style specified in glStyle to the layer,\n * and adds the layer to the map.\n *\n * The layer may not yet have a source when the function is called. If so, the style\n * is applied to the layer via a once listener on the 'change:source' event.\n *\n * @param {Layer} layer An OpenLayers layer instance.\n * @param {Array} layerIds Array containing layer ids of already-processed layers.\n * @param {Object} glStyle Style as a JSON object.\n * @param {string|undefined} styleUrl The original style URL. Only required\n * when a relative path is used with the `\"sprite\"` property of the style.\n * @param {Map|LayerGroup} mapOrGroup OpenLayers Map.\n * @param {Options} options Options.\n * @return {Promise} Returns a promise that resolves after the source has\n * been set on the specified layer, and the style has been applied.\n */\nfunction finalizeLayer(layer, layerIds, glStyle, styleUrl, mapOrGroup, options = {}) {\n let minZoom = 24;\n let maxZoom = 0;\n const glLayers = glStyle.layers;\n for (let i = 0, ii = glLayers.length; i < ii; ++i) {\n const glLayer = glLayers[i];\n if (layerIds.indexOf(glLayer.id) !== -1) {\n minZoom = Math.min('minzoom' in glLayer ? glLayer.minzoom : 0, minZoom);\n maxZoom = Math.max('maxzoom' in glLayer ? glLayer.maxzoom : 24, maxZoom);\n }\n }\n return new Promise(function (resolve, reject) {\n const setStyle = function () {\n const source = layer.getSource();\n if (!source || source.getState() === 'error') {\n reject(new Error('Error accessing data for source ' + layer.get('mapbox-source')));\n return;\n }\n if ('getTileGrid' in source) {\n const tileGrid = /** @type {import(\"ol/source/Tile.js\").default|import(\"ol/source/VectorTile.js\").default} */\n source.getTileGrid();\n if (tileGrid) {\n const sourceMinZoom = tileGrid.getMinZoom();\n if (minZoom > 0 || sourceMinZoom > 0) {\n layer.setMaxResolution(Math.min(getResolutionForZoom(Math.max(0, minZoom - 1e-12), defaultResolutions), getResolutionForZoom(Math.max(0, sourceMinZoom - 1e-12), tileGrid.getResolutions())));\n }\n if (maxZoom < 24) {\n layer.setMinResolution(getResolutionForZoom(maxZoom, defaultResolutions));\n }\n }\n } else {\n if (minZoom > 0) {\n layer.setMaxResolution(getResolutionForZoom(Math.max(0, minZoom - 1e-12), defaultResolutions));\n }\n }\n if (source instanceof VectorSource || source instanceof VectorTileSource) {\n applyStyle(layer, glStyle, layerIds, Object.assign({ styleUrl: styleUrl }, options)).then(function () {\n manageVisibility(layer, mapOrGroup);\n resolve();\n }).catch(reject);\n } else {\n resolve();\n }\n };\n layer.set('mapbox-layers', layerIds);\n const layers = mapOrGroup.getLayers();\n if (layers.getArray().indexOf(layer) === -1) {\n layers.push(layer);\n }\n if (layer.getSource()) {\n setStyle();\n } else {\n layer.once('change:source', setStyle);\n }\n });\n}\n/**\n * Get the Mapbox Layer object for the provided `layerId`.\n * @param {Map|LayerGroup} mapOrGroup Map or LayerGroup.\n * @param {string} layerId Mapbox Layer id.\n * @return {Object} Mapbox Layer object.\n */\nfunction getMapboxLayer(mapOrGroup, layerId) {\n const style = mapOrGroup.get('mapbox-style');\n const layerStyle = style.layers.find(function (layer) {\n return layer.id === layerId;\n });\n return layerStyle;\n}\n/**\n * Add a new Mapbox Layer object to the style. The map will be re-rendered.\n * @param {Map|LayerGroup} mapOrGroup The Map or LayerGroup `apply` was called on.\n * @param {Object} mapboxLayer Mapbox Layer object.\n * @param {string} [beforeLayerId] Optional id of the Mapbox Layer before the new layer that will be added.\n * @return {Promise} Resolves when the added layer is available.\n */\nfunction addMapboxLayer(mapOrGroup, mapboxLayer, beforeLayerId) {\n const glStyle = mapOrGroup.get('mapbox-style');\n const mapboxLayers = glStyle.layers;\n let spliceIndex;\n let sourceIndex = -1;\n if (beforeLayerId !== undefined) {\n const beforeMapboxLayer = getMapboxLayer(mapOrGroup, beforeLayerId);\n if (beforeMapboxLayer === undefined) {\n throw new Error(`Layer with id \"${ beforeLayerId }\" not found.`);\n }\n spliceIndex = mapboxLayers.indexOf(beforeMapboxLayer);\n } else {\n spliceIndex = mapboxLayers.length;\n }\n let sourceOffset;\n if (spliceIndex > 0 && mapboxLayers[spliceIndex - 1].source === mapboxLayer.source) {\n sourceIndex = spliceIndex - 1;\n sourceOffset = -1;\n } else if (spliceIndex < mapboxLayers.length && mapboxLayers[spliceIndex].source === mapboxLayer.source) {\n sourceIndex = spliceIndex;\n sourceOffset = 0;\n }\n if (sourceIndex === -1) {\n const {options, styleUrl} = mapOrGroup.get('mapbox-metadata');\n const layer = setupLayer(glStyle, styleUrl, mapboxLayer, options);\n if (beforeLayerId) {\n const beforeLayer = getLayer(mapOrGroup, beforeLayerId);\n const beforeLayerIndex = mapOrGroup.getLayers().getArray().indexOf(beforeLayer);\n mapOrGroup.getLayers().insertAt(beforeLayerIndex, layer);\n }\n mapboxLayers.splice(spliceIndex, 0, mapboxLayer);\n return finalizeLayer(layer, [mapboxLayer.id], glStyle, styleUrl, mapOrGroup, options);\n }\n if (mapboxLayers.some(layer => layer.id === mapboxLayer.id)) {\n throw new Error(`Layer with id \"${ mapboxLayer.id }\" already exists.`);\n }\n const sourceLayerId = mapboxLayers[sourceIndex].id;\n const args = styleFunctionArgs[getStyleFunctionKey(mapOrGroup.get('mapbox-style'), getLayer(mapOrGroup, sourceLayerId))];\n mapboxLayers.splice(spliceIndex, 0, mapboxLayer);\n if (args) {\n const [olLayer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, getFonts, getImage] = args;\n if (Array.isArray(sourceOrLayers)) {\n const layerIndex = sourceOrLayers.indexOf(sourceLayerId) + sourceOffset;\n sourceOrLayers.splice(layerIndex, 0, mapboxLayer.id);\n }\n stylefunction(olLayer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, getFonts, getImage);\n } else {\n getLayer(mapOrGroup, mapboxLayers[sourceIndex].id).changed();\n }\n return Promise.resolve();\n}\n/**\n * Update a Mapbox Layer object in the style. The map will be re-rendered with the new style.\n * @param {Map|LayerGroup} mapOrGroup The Map or LayerGroup `apply` was called on.\n * @param {Object} mapboxLayer Updated Mapbox Layer object.\n */\nfunction updateMapboxLayer(mapOrGroup, mapboxLayer) {\n const glStyle = mapOrGroup.get('mapbox-style');\n const mapboxLayers = glStyle.layers;\n const index = mapboxLayers.findIndex(function (layer) {\n return layer.id === mapboxLayer.id;\n });\n if (index === -1) {\n throw new Error(`Layer with id \"${ mapboxLayer.id }\" not found.`);\n }\n const oldLayer = mapboxLayers[index];\n if (oldLayer.source !== mapboxLayer.source) {\n throw new Error('Updated layer and previous version must use the same source.');\n }\n delete getFunctionCache(glStyle)[mapboxLayer.id];\n delete getFilterCache(glStyle)[mapboxLayer.id];\n mapboxLayers[index] = mapboxLayer;\n const args = styleFunctionArgs[getStyleFunctionKey(mapOrGroup.get('mapbox-style'), getLayer(mapOrGroup, mapboxLayer.id))];\n if (args) {\n stylefunction.apply(undefined, args);\n } else {\n getLayer(mapOrGroup, mapboxLayer.id).changed();\n }\n}\n/**\n * Updates a Mapbox source object in the style. The according OpenLayers source will be replaced\n * and the map will be re-rendered.\n * @param {Map|LayerGroup} mapOrGroup The Map or LayerGroup `apply` was called on.\n * @param {string} id Key of the source in the `sources` object literal.\n * @param {Object} mapboxSource Mapbox source object.\n * @return {Promise} Promise that resolves when the source has been updated.\n */\nfunction updateMapboxSource(mapOrGroup, id, mapboxSource) {\n const currentSource = getSource(mapOrGroup, id);\n const layers = mapOrGroup.getLayers().getArray().filter(function (layer) {\n return (layer instanceof VectorLayer || layer instanceof TileLayer || layer instanceof VectorTileLayer) && layer.getSource() === currentSource;\n });\n const metadata = mapOrGroup.get('mapbox-metadata');\n let newSourcePromise;\n switch (mapboxSource.type) {\n case 'vector':\n newSourcePromise = setupVectorSource(mapboxSource, metadata.styleUrl, metadata.options);\n break;\n case 'geojson':\n newSourcePromise = Promise.resolve(setupGeoJSONSource(mapboxSource, metadata.styleUrl, metadata.options));\n break;\n case 'raster':\n case 'raster-dem':\n newSourcePromise = setupRasterSource(mapboxSource, metadata.styleUrl, metadata.options);\n break;\n default:\n return Promise.reject(new Error('Unsupported source type ' + mapboxSource.type));\n }\n newSourcePromise.then(function (newSource) {\n layers.forEach(function (layer) {\n layer.setSource(newSource);\n });\n });\n return newSourcePromise;\n}\n/**\n * Remove a Mapbox Layer object from the style. The map will be re-rendered.\n * @param {Map|LayerGroup} mapOrGroup The Map or LayerGroup `apply` was called on.\n * @param {string|Object} mapboxLayerIdOrLayer Mapbox Layer id or Mapbox Layer object.\n */\nfunction removeMapboxLayer(mapOrGroup, mapboxLayerIdOrLayer) {\n const mapboxLayerId = typeof mapboxLayerIdOrLayer === 'string' ? mapboxLayerIdOrLayer : mapboxLayerIdOrLayer.id;\n const layer = getLayer(mapOrGroup, mapboxLayerId);\n /** @type {Array} */\n const layerMapboxLayers = layer.get('mapbox-layers');\n if (layerMapboxLayers.length === 1) {\n throw new Error('Cannot remove last Mapbox layer from an OpenLayers layer.');\n }\n layerMapboxLayers.splice(layerMapboxLayers.indexOf(mapboxLayerId), 1);\n const glStyle = mapOrGroup.get('mapbox-style');\n const layers = glStyle.layers;\n layers.splice(layers.findIndex(layer => layer.id === mapboxLayerId), 1);\n const args = styleFunctionArgs[getStyleFunctionKey(glStyle, layer)];\n if (args) {\n const [olLayer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, getFonts, getImage] = args;\n if (Array.isArray(sourceOrLayers)) {\n sourceOrLayers.splice(sourceOrLayers.findIndex(layer => layer === mapboxLayerId), 1);\n }\n stylefunction(olLayer, glStyle, sourceOrLayers, resolutions, spriteData, spriteImageUrl, getFonts, getImage);\n } else {\n getLayer(mapOrGroup, mapboxLayerId).changed();\n }\n}\n/**\n * Get the OpenLayers layer instance that contains the provided Mapbox/MapLibre Style\n * `layer`. Note that multiple Mapbox/MapLibre Style layers are combined in a single\n * OpenLayers layer instance when they use the same Mapbox/MapLibre Style `source`.\n * @param {Map|LayerGroup} map OpenLayers Map or LayerGroup.\n * @param {string} layerId Mapbox/MapLibre Style layer id.\n * @return {Layer} OpenLayers layer instance.\n */\nfunction getLayer(map, layerId) {\n const layers = map.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const mapboxLayers = layers[i].get('mapbox-layers');\n if (mapboxLayers && mapboxLayers.indexOf(layerId) !== -1) {\n return layers[i];\n }\n }\n return undefined;\n}\n/**\n * Get the OpenLayers layer instances for the provided Mapbox/MapLibre Style `source`.\n * @param {Map|LayerGroup} map OpenLayers Map or LayerGroup.\n * @param {string} sourceId Mapbox/MapLibre Style source id.\n * @return {Array} OpenLayers layer instances.\n */\nfunction getLayers(map, sourceId) {\n const result = [];\n const layers = map.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n if (layers[i].get('mapbox-source') === sourceId) {\n result.push(layers[i]);\n }\n }\n return result;\n}\n/**\n * Get the OpenLayers source instance for the provided Mapbox/MapLibre Style `source`.\n * @param {Map|LayerGroup} map OpenLayers Map or LayerGroup.\n * @param {string} sourceId Mapbox/MapLibre Style source id.\n * @return {Source} OpenLayers source instance.\n */\nfunction getSource(map, sourceId) {\n const layers = map.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const source = /** @type {Layer} */\n layers[i].getSource();\n if (layers[i].get('mapbox-source') === sourceId) {\n return source;\n }\n }\n return undefined;\n}\n/**\n * Sets or removes a feature state. The feature state is taken into account for styling,\n * just like the feature's properties, and can be used e.g. to conditionally render selected\n * features differently.\n *\n * The feature state will be stored on the OpenLayers layer matching the feature identifier, in the\n * `mapbox-featurestate` property.\n * @param {Map|VectorLayer|VectorTileLayer} mapOrLayer OpenLayers Map or layer to set the feature\n * state on.\n * @param {FeatureIdentifier} feature Feature identifier.\n * @param {Object|null} state Feature state. Set to `null` to remove the feature state.\n */\nfunction setFeatureState(mapOrLayer, feature, state) {\n const layers = 'getLayers' in mapOrLayer ? getLayers(mapOrLayer, feature.source) : [mapOrLayer];\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const featureState = layers[i].get('mapbox-featurestate');\n if (featureState) {\n if (state) {\n featureState[feature.id] = state;\n } else {\n delete featureState[feature.id];\n }\n layers[i].changed();\n } else {\n throw new Error(`Map or layer for source \"${ feature.source }\" not found.`);\n }\n }\n}\n/**\n * Sets or removes a feature state. The feature state is taken into account for styling,\n * just like the feature's properties, and can be used e.g. to conditionally render selected\n * features differently.\n * @param {Map|VectorLayer|VectorTileLayer} mapOrLayer Map or layer to set the feature state on.\n * @param {FeatureIdentifier} feature Feature identifier.\n * @return {Object|null} Feature state or `null` when no feature state is set for the given\n * feature identifier.\n */\nfunction getFeatureState(mapOrLayer, feature) {\n const layers = 'getLayers' in mapOrLayer ? getLayers(mapOrLayer, feature.source) : [mapOrLayer];\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const featureState = layers[i].get('mapbox-featurestate');\n if (featureState && featureState[feature.id]) {\n return featureState[feature.id];\n }\n }\n return undefined;\n}\n\n/** @typedef {import(\"ol/Map.js\").default} Map */\n/**\n * @classdesc\n * Event emitted on configuration or loading error.\n */\nclass ErrorEvent extends BaseEvent {\n /**\n * @param {Error} error error object.\n */\n constructor(error) {\n super(EventType.ERROR);\n /**\n * @type {Error}\n */\n this.error = error;\n }\n}\n/**\n * @typedef {Object} Options\n * @property {string} styleUrl The URL of the Mapbox/MapLibre Style object to use for this layer. For a\n * style created with Mapbox Studio and hosted on Mapbox, this will look like\n * 'mapbox://styles/you/your-style'.\n * @property {string} [accessToken] The access token for your Mapbox/MapLibre style. This has to be provided\n * for `mapbox://` style urls. For `https://` and other urls, any access key must be the last query\n * parameter of the style url.\n * @property {string} [source] If your style uses more than one source, you need to use either the\n * `source` property or the `layers` property to limit rendering to a single vector source. The\n * `source` property corresponds to the id of a vector source in your Mapbox/MapLibre style.\n * @property {Array} [layers] Limit rendering to the list of included layers. All layers\n * must share the same vector source. If your style uses more than one source, you need to use\n * either the `source` property or the `layers` property to limit rendering to a single vector\n * source.\n * @property {boolean} [declutter=true] Declutter images and text. Decluttering is applied to all\n * image and text styles of all Vector and VectorTile layers that have set this to `true`. The priority\n * is defined by the z-index of the layer, the `zIndex` of the style and the render order of features.\n * Higher z-index means higher priority. Within the same z-index, a feature rendered before another has\n * higher priority.\n *\n * As an optimization decluttered features from layers with the same `className` are rendered above\n * the fill and stroke styles of all of those layers regardless of z-index. To opt out of this\n * behavior and place declutterd features with their own layer configure the layer with a `className`\n * other than `ol-layer`.\n * @property {import(\"ol/layer/Base.js\").BackgroundColor|false} [background] Background color for the layer.\n * If not specified, the background from the Mapbox/MapLibre Style object will be used. Set to `false` to prevent\n * the Mapbox/MapLibre style's background from being used.\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"ol/extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible. If neither `maxResolution` nor `minZoom` are defined, the layer's `maxResolution` will\n * match the style source's `minzoom`.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will\n * be visible. If neither `maxResolution` nor `minZoom` are defined, the layer's `minZoom` will match\n * the style source's `minzoom`.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {import(\"ol/render.js\").OrderFunction} [renderOrder] Render order. Function to be used when sorting\n * features before rendering. By default features are drawn in the order that they are created. Use\n * `null` to avoid the sort, but get an undefined draw order.\n * @property {number} [renderBuffer=100] The buffer in pixels around the tile extent used by the\n * renderer when getting features from the vector tile for the rendering or hit-detection.\n * Recommended value: Vector tiles are usually generated with a buffer, so this value should match\n * the largest possible buffer of the used tiles. It should be at least the size of the largest\n * point symbol or line width.\n * @property {import(\"ol/layer/VectorTile.js\").VectorTileRenderType} [renderMode='hybrid'] Render mode for vector tiles:\n * * `'hybrid'`: Polygon and line elements are rendered as images, so pixels are scaled during zoom\n * animations. Point symbols and texts are accurately rendered as vectors and can stay upright on\n * rotated views.\n * * `'vector'`: Everything is rendered as vectors. Use this mode for improved performance on vector\n * tile layers with only a few rendered features (e.g. for highlighting a subset of features of\n * another layer with the same source).\n * @property {import(\"ol/Map.js\").default} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use `map.addLayer()`.\n * @property {boolean} [updateWhileAnimating=false] When set to `true`, feature batches will be\n * recreated during animations. This means that no vectors will be shown clipped, but the setting\n * will have a performance impact for large amounts of vector data. When set to `false`, batches\n * will be recreated when no animation is active.\n * @property {boolean} [updateWhileInteracting=false] When set to `true`, feature batches will be\n * recreated during interactions. See also `updateWhileAnimating`.\n * @property {number} [preload=0] Preload. Load low-resolution tiles up to `preload` levels. `0`\n * means no preloading.\n * @property {boolean} [useInterimTilesOnError=true] Use interim tiles on error.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n/**\n * @classdesc\n * ```js\n * import {MapboxVectorLayer} from 'ol-mapbox-style';\n * ```\n * A vector tile layer based on a Mapbox/MapLibre style that uses a single vector source. Configure\n * the layer with the `styleUrl` and `accessToken` shown in Mapbox Studio's share panel.\n * If the style uses more than one source, use the `source` property to choose a single\n * vector source. If you want to render a subset of the layers in the style, use the `layers`\n * property (all layers must share the same vector source). See the constructor options for\n * more detail.\n *\n * const map = new Map({\n * view: new View({\n * center: [0, 0],\n * zoom: 1,\n * }),\n * layers: [\n * new MapboxVectorLayer({\n * styleUrl: 'mapbox://styles/mapbox/bright-v9',\n * accessToken: 'your-mapbox-access-token-here',\n * }),\n * ],\n * target: 'map',\n * });\n *\n * On configuration or loading error, the layer will trigger an `'error'` event. Listeners\n * will receive an object with an `error` property that can be used to diagnose the problem.\n *\n * **Note for users of the full build**: The `MapboxVectorLayer` requires the\n * [ol-mapbox-style](https://github.com/openlayers/ol-mapbox-style) library to be loaded as well.\n *\n * @param {Options} options Options.\n * @extends {VectorTileLayer}\n * @fires module:ol/events/Event~BaseEvent#event:error\n * @api\n */\nclass MapboxVectorLayer extends VectorTileLayer {\n /**\n * @param {Options} options Layer options. At a minimum, `styleUrl` and `accessToken`\n * must be provided.\n */\n constructor(options) {\n const declutter = 'declutter' in options ? options.declutter : true;\n const source = new VectorTileSource({\n state: 'loading',\n format: new MVT()\n });\n super({\n source: source,\n background: options.background === false ? null : options.background,\n declutter: declutter,\n className: options.className,\n opacity: options.opacity,\n visible: options.visible,\n zIndex: options.zIndex,\n minResolution: options.minResolution,\n maxResolution: options.maxResolution,\n minZoom: options.minZoom,\n maxZoom: options.maxZoom,\n renderOrder: options.renderOrder,\n renderBuffer: options.renderBuffer,\n renderMode: options.renderMode,\n map: options.map,\n updateWhileAnimating: options.updateWhileAnimating,\n updateWhileInteracting: options.updateWhileInteracting,\n preload: options.preload,\n useInterimTilesOnError: options.useInterimTilesOnError,\n properties: options.properties\n });\n if (options.accessToken) {\n this.accessToken = options.accessToken;\n }\n const url = options.styleUrl;\n const promises = [applyStyle(this, url, options.layers || options.source, { accessToken: this.accessToken })];\n if (this.getBackground() === undefined) {\n promises.push(applyBackground(this, options.styleUrl, { accessToken: this.accessToken }));\n }\n Promise.all(promises).then(() => {\n source.setState('ready');\n }).catch(error => {\n this.dispatchEvent(new ErrorEvent(error));\n const source = this.getSource();\n source.setState('error');\n });\n }\n}\n\nexport { MapboxVectorLayer, addMapboxLayer, apply, applyBackground, applyStyle, apply as default, getFeatureState, getLayer, getLayers, getMapboxLayer, getSource, getStyleForLayer, recordStyleLayer, removeMapboxLayer, renderTransparent, setFeatureState, stylefunction, updateMapboxLayer, updateMapboxSource };\n//# sourceMappingURL=index.js.map\n","const __WEBPACK_NAMESPACE_OBJECT__ = undefined;","// import openlayers\nimport VectorTileLayer from \"ol/layer/VectorTile\";\nimport VectorTileSource from \"ol/source/VectorTile\";\nimport TileJSONSource from \"ol/source/TileJSON\";\nimport MVT from \"ol/format/MVT\";\nimport { unByKey as observableUnByKey } from \"ol/Observable\";\n// import olms : module ES6\nimport { applyStyle } from \"ol-mapbox-style\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Config from \"../Utils/Config\";\n\n/**\n* @classdesc\n* Geoportal Layer Mapbox creation\n*\n* @constructor\n* @extends {ol.layer.VectorTile}\n* @alias ol.layer.GeoportalMapBox\n* @type {ol.layer.GeoportalMapBox}\n* @param {Object} options - options for function call.\n* @param {String} options.layer - Layer name (e.g. \"PLAN.IGN\")\n* @param {Object} [options.configuration] - configuration (cf. example) \n* @param {String} [options.style] - Style name (e.g. \"classique\")\n* @param {String} [options.source] - Source name (e.g. \"plan_ign\")\n* @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n* @param {Object} [settings] - other options for ol.layer.VectorTile function (see {@link https://openlayers.org/en/latest/apidoc/module-ol_layer_VectorTile-VectorTileLayer.html ol.layer.VectorTile})\n* @example\n* var LayerMapBox = new ol.layer.GeoportalMapBox({\n* layer : \"PLAN.IGN\",\n* [style : \"classique\",]\n* [source : \"plan_ign\",]\n* [ssl: true]\n* }, {\n* opacity\n* visible\n* extent\n* declutter\n* ...\n* });\n* \n* // Ex. configuration object for TMS Layer\n* \"PLAN.IGN$GEOPORTAIL:GPP:TMS\": {\n* \"hidden\": true,\n* \"queryable\": false,\n* \"serviceParams\": {\n* \"id\": \"GPP:TMS\",\n* \"version\": \"1.0.0\",\n* \"serverUrl\": {\n* \"cartes\": \"https://wxs.ign.fr/cartes/geoportail/tms/1.0.0/\"\n* }\n* },\n* \"name\": \"PLAN.IGN\",\n* \"title\": \"Plan IGN\",\n* \"description\": \"BDUni tuilée\",\n* \"formats\": [\n* {\n* \"current\": true,\n* \"name\": \"application/x-protobuf\"\n* }\n* ],\n* \"styles\": [\n* {\n* \"name\": \"standard\",\n* \"title\": \"Style standard\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/standard.json\"\n* },\n* {\n* \"name\": \"classique\",\n* \"title\": \"Style classique\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/classique.json\"\n* },\n* {\n* \"name\": \"transparent\",\n* \"title\": \"Style transparent\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/transparent.json\"\n* },\n* {\n* \"name\": \"accentue\",\n* \"title\": \"Style accentue\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/accentue.json\"\n* },\n* {\n* \"name\": \"attenue\",\n* \"title\": \"Style attenue\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/attenue.json\"\n* },\n* {\n* \"name\": \"gris\",\n* \"title\": \"Style en noir et blanc\",\n* \"current\": false,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/gris.json\"\n* },\n* {\n* \"name\": \"epure\",\n* \"title\": \"Style epure\",\n* \"current\": true,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/epure.json\"\n* },\n* {\n* \"name\": \"sans_toponymes\",\n* \"title\": \"Style sans toponymes\",\n* \"current\": false,\n* \"url\": \"https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/essentiels/sans_toponymes.json\"\n* }\n* ],\n* \"globalConstraint\": {\n* \"crs\": null,\n* \"bbox\": {\n* \"left\": -724011.531917197,\n* \"right\": 1095801.237496279,\n* \"top\": 6672646.821182753,\n* \"bottom\": 5009377.0856973175\n* },\n* \"minScaleDenominator\": null,\n* \"maxScaleDenominator\": null\n* },\n* \"quicklookUrl\": \"https://wxs.ign.fr/static/pictures/ign_carte2.jpg\",\n* \"layerId\": \"PLAN.IGN$GEOPORTAIL:GPP:TMS\",\n* \"defaultProjection\": \"EPSG:3857\"\n* }\n*\n*/\nvar LayerMapBox = class LayerMapBox extends VectorTileLayer {\n \n /**\n * See {@link ol.layer.GeoportalMapBox}\n * @module LayerMapBox\n * @alias module:~layers/GeoportalMapBox\n * @param {*} options - options\n * @param {*} [settings] - other settings\n * @example\n * import LayerMapBox from \"gpf-ext-ol/layers/LayerMapBox\"\n * ou \n * import { LayerMapBox } from \"gpf-ext-ol\"\n */\n constructor (options, settings) {\n // if (!(this instanceof LayerMapBox)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n \n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n \n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n \n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n \n // si ssl = false on fait du http\n // par défaut, ssl = true, on fait du https\n var protocol = options.ssl === false ? \"http://\" : \"https://\";\n \n // WARNING :\n // on fait le choix de ne pas utiliser la clef apiKey pour checker \n // les droits sur la ressource\n // car le service n'est pas securisé...\n \n // configuration de la ressource\n var layerCfg = options.configuration;\n\n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config chargée\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n\n // id de la ressource\n var layerId = options.layer + \"$GEOPORTAIL:GPP:TMS\";\n \n // récupération des ressources utiles depuis la configuration\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : Layer ID not found into the catalogue !?\");\n }\n }\n\n var styleUrl = null;\n var styleTitle = \"\";\n var styleName = options.style;\n for (var i = 0; i < layerCfg.styles.length; i++) {\n var style = layerCfg.styles[i];\n // si le nom du style est en option, on le recherche...\n // sinon, on recherche le style par defaut !\n if (styleName && style.name === styleName) {\n styleUrl = style.url;\n styleTitle = style.title;\n break;\n } else {\n if (!styleName && style.current) {\n styleName = style.name;\n styleUrl = style.url;\n styleTitle = style.title;\n break;\n }\n }\n }\n \n if (!styleUrl) {\n throw new Error(\"ERROR : Style URL not found !?\");\n }\n \n styleUrl.replace(/(http|https):\\/\\//, protocol);\n \n // création de la source\n var source = new VectorTileSource({\n state : \"loading\", // statut\n format : new MVT()\n });\n \n source._originators = layerCfg.originators;\n source._legends = layerCfg.legends;\n source._metadata = layerCfg.metadata;\n source._description = layerCfg.description;\n source._title = layerCfg.title + \" (\" + styleTitle + \")\";\n source._quicklookUrl = layerCfg.quicklookUrl;\n \n // options definies sur ol.layer.VectorTile\n var layerVectorTileOptions = {\n source : source\n };\n \n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(layerVectorTileOptions, settings);\n \n // on surcharge les originators (non récupérés depuis configuration de la couche)\n if (options.olParams && !layerCfg.originators) {\n source._originators = options.olParams.attributions;\n }\n \n // création d'une ol.layer.VectorTile avec les options récupérées ci-dessus.\n super(layerVectorTileOptions);\n \n this.name = options.layer;\n this.service = \"TMS\";\n this.protocol = protocol;\n this.sourceId = options.source;\n this.styleUrl = styleUrl;\n this.config = layerCfg;\n \n // récuperation du style\n this.setStyleMapBox();\n \n return this;\n }\n \n /**\n * Get Style MapBox\n * @private\n */\n setStyleMapBox () {\n var self = this;\n fetch(this.styleUrl, {\n credentials : \"same-origin\"\n }).then(function (response) {\n if (response.ok) {\n response.json().then(function (style) {\n self.onStyleMapBoxLoad(style);\n });\n }\n }).catch(function (e) {\n self.onStyleMapBoxError(e);\n });\n };\n \n /**\n * Add Style\n * @param {*} style - json style\n */\n onStyleMapBoxLoad (style) {\n // si on a plusieurs sources, on ne peut en prendre qu'une seule...\n if (!this.sourceId) {\n this.sourceId = Object.keys(style.sources)[0];\n }\n \n var styleSource = style.sources[this.sourceId];\n if (!styleSource) {\n this.onStyleMapBoxError({\n message : \"ERROR : Source ID not found !? !\"\n });\n return;\n }\n \n if (styleSource.type !== \"vector\") {\n this.onStyleMapBoxError({\n message : \"ERROR : Source TYPE not permitted !\"\n });\n return;\n }\n \n var source = this.getSource();\n \n // WARNING :\n // la clef renseignée dans les urls n'est pas forcement la bonne\n // car la substitution avec la clef utilisateur n'est pas faite par le service...\n if (styleSource.url) {\n // protocole : http ou https\n styleSource.url.replace(/(http|https):\\/\\//, this.protocol);\n \n var vectorTileJson = new TileJSONSource({\n url : styleSource.url\n });\n var self = this;\n var key = vectorTileJson.on(\"change\", function () {\n if (vectorTileJson.getState() === \"ready\") {\n var doc = vectorTileJson.getTileJSON();\n if (!doc) {\n return;\n }\n self.set(\"mapbox-extensions\", doc);\n var tiles = Array.isArray(doc.tiles) ? doc.tiles : [doc.tiles];\n // protocole : http ou https\n for (var i = 0; i < styleSource.tiles.length; i++) {\n tiles[i].replace(/(http|https):\\/\\//, this.protocol);\n }\n source.setUrls(tiles);\n observableUnByKey(key);\n }\n });\n }\n \n if (styleSource.tiles) {\n // protocole : http ou https\n for (var j = 0; j < styleSource.tiles.length; j++) {\n styleSource.tiles[j].replace(/(http|https):\\/\\//, this.protocol);\n }\n source.setUrls(styleSource.tiles);\n }\n \n applyStyle(this, style, this.sourceId).then(() => {\n source.setState(\"ready\");\n this.set(\"mapbox-styles\", style);\n }).catch((error) => {\n this.onStyleMapBoxError(error);\n });\n };\n \n /**\n * Error\n * @param {*} error - message\n */\n onStyleMapBoxError (error) {\n var source = this.getSource();\n source.setState(\"error\");\n // eslint-disable-next-line no-console\n console.error(error.message);\n };\n\n /**\n * Get configuration\n * @returns {Object} - configuration\n */\n getConfiguration () {\n return this.config;\n }\n\n /**\n * Get legends\n * @returns {Array} - legends\n */\n getLegends () {\n return this.getSource()._legends;\n }\n\n /**\n * Get metadata\n * @returns {Array} - metadata\n */\n getMetadata () {\n return this.getSource()._metadata;\n }\n\n /**\n * Get description\n * @returns {String} - description\n */\n getDescription () {\n return this.getSource()._description;\n }\n\n /**\n * Get title\n * @returns {String} - title\n */\n getTitle () {\n return this.getSource()._title;\n }\n\n /**\n * Get quicklook url\n * @returns {String} - quicklook\n */\n getQuicklookUrl () {\n return this.getSource()._quicklookUrl;\n }\n\n /**\n * Get originators\n * @returns {Array} - originators\n */\n getOriginators () {\n return this.getSource()._originators;\n }\n \n};\n\nexport default LayerMapBox;\n\n// Expose LayerMapBox as ol.layer.GeoportalMapBox. (for a build bundle)\nif (window.ol && window.ol.layer) {\n window.ol.layer.GeoportalMapBox = LayerMapBox;\n}\n","// import openlayers\nimport {\n get as olGetProj,\n transformExtent as olTransformExtentProj\n} from \"ol/proj\";\nimport TileLayer from \"ol/layer/Tile\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Config from \"../Utils/Config\";\n// import local with ol dependencies\nimport SourceWMS from \"./SourceWMS\";\n\n/**\n * @classdesc\n * Geoportal LayerWMS source creation (inherit from ol.layer.Tile)\n *\n * @constructor\n * @extends {ol.layer.Tile}\n * @alias ol.layer.GeoportalWMS\n * @type {ol.layer.GeoportalWMS}\n * @param {Object} options - options for function call.\n * @param {String} options.layer - Layer name (e.g. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {Object} [options.configuration] - configuration (cf. example) \n * @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n * @param {String} [options.apiKey] - Access key to Geoportal platform\n * @param {Object} [options.olParams] - other options for ol.layer.Tile function (see {@link http://openlayers.org/en/latest/apidoc/ol.layer.Tile.html ol.layer.Tile})\n * @param {Object} [options.olParams.sourceParams] - other options for ol.source.TileWMS function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.TileWMS.html ol.source.TileWMS})\n * @example\n * var layerWMS = new ol.layer.GeoportalWMS({\n * layer : \"ORTHOIMAGERY.ORTHOPHOTOS\"\n * });\n * \n * layerWMS.getLegends();\n * layerWMS.getMetadata();\n * layerWMS.getTitle();\n * layerWMS.getDescription();\n * layerWMS.getQuicklookUrl();\n * layerWMS.getOriginators();\n */\nvar LayerWMS = class LayerWMS extends TileLayer {\n\n /**\n * See {@link ol.layer.GeoportalWMS}\n * @module LayerWMS\n * @alias module:~layers/GeoportalWMS\n * @param {*} options - options\n * @example\n * import LayerWMS from \"gpf-ext-ol/layers/LayerWMS\"\n * ou \n * import { LayerWMS } from \"gpf-ext-ol\"\n */\n constructor (options) {\n // if (!(this instanceof LayerWMS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n\n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n\n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n\n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n\n // configuration de la ressource\n var layerCfg = options.configuration;\n\n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config chargée\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n // récupération des autres paramètres nécessaires à la création de la layer\n var layerId = Config.configuration.getLayerId(options.layer, \"WMS\");\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : Layer ID not found into the catalogue !?\");\n }\n }\n\n // création de la source WMS\n var olSourceParams;\n if (options.olParams && options.olParams.sourceParams) {\n olSourceParams = options.olParams.sourceParams;\n }\n var wmsSource = new SourceWMS({\n layer : options.layer,\n configuration : options.configuration,\n ssl : options.ssl,\n apiKey : options.apiKey,\n olParams : olSourceParams\n });\n\n var layerTileOptions = {\n source : wmsSource\n };\n\n // si le param LAYERS n'a pas été renseigné lors de la création de la source,\n // c'est que l'identifiant de la couche n'a pas été trouvé. on passe donc la recherche des paramètres.\n if (wmsSource.getParams().LAYERS !== undefined) {\n /* INFO : on ne récupère l'emprise de la couche que lorsque que l'utilisateur spécifie la projection.\n Si aucune projection n'est spécifiée, il faudrait spécifier l'emprise dans la projection de la carte (car OpenLayers reprojette),\n mais on ne peut pas la récupérer à ce niveau. On ne spécifie donc aucune emprise.\n Idem pour les résolutions : il faut connaitre l'unité de la projection (metres ou degrés) pour pouvoir calculer la résolution.\n */\n if (olSourceParams && olSourceParams.projection) {\n // récupération de l'étendue (en EPSG:4326), et reprojection dans la proj spécifiée\n var geobbox = [\n layerCfg.globalConstraints.extent.left,\n layerCfg.globalConstraints.extent.bottom,\n layerCfg.globalConstraints.extent.right,\n layerCfg.globalConstraints.extent.top\n ];\n layerTileOptions.extent = olTransformExtentProj(geobbox, \"EPSG:4326\", olSourceParams.projection);\n\n // récupération des résolutions min et max\n var p;\n // on récupère tout d'abord la projection\n if (typeof olSourceParams.projection === \"string\") {\n p = olGetProj(olSourceParams.projection);\n } else if (typeof olSourceParams.projection === \"object\" && olSourceParams.projection.getCode()) {\n p = olGetProj(olSourceParams.projection.getCode());\n }\n // puis, selon l'unité de la projection, on calcule la résolution correspondante\n if (p && p.getUnits()) {\n if (p.getUnits() === \"m\") {\n /* fixme : fix temporaire pour gérer les min/max scaledenominator qui sont arrondis dans la configuration !\n * on les arrondit respectivement à l'unité inférieure et supérieure\n * pour que les couches soient bien disponibles aux niveaux de zoom correspondants */\n // info : 1 pixel = 0.00028 m\n layerTileOptions.minResolution = (layerCfg.globalConstraints.minScale - 1) * 0.00028;\n layerTileOptions.maxResolution = (layerCfg.globalConstraints.maxScale + 1) * 0.00028;\n } else if (p.getUnits() === \"degrees\") {\n /* fixme : fix temporaire pour gérer les min/max scaledenominator qui sont arrondis dans la configuration !\n * on les arrondit respectivement à l'unité inférieure et supérieure\n * pour que les couches soient bien disponibles aux niveaux de zoom correspondants */\n // info : 6378137 * 2 * pi / 360 = rayon de la terre (ellipsoide WGS84)\n layerTileOptions.minResolution = (layerCfg.globalConstraints.minScale - 1) * 0.00028 * 180 / (Math.PI * 6378137);\n layerTileOptions.maxResolution = (layerCfg.globalConstraints.maxScale + 1) * 0.00028 * 180 / (Math.PI * 6378137);\n }\n }\n }\n }\n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(layerTileOptions, options.olParams);\n\n // création d'une ol.layer.Tile avec les options récupérées ci-dessus.\n super(layerTileOptions);\n\n this.name = options.layer;\n this.service = \"WMS\";\n this.config = layerCfg;\n\n return this;\n }\n\n /**\n * Get configuration\n * @returns {Object} - configuration\n */\n getConfiguration () {\n return this.config;\n }\n \n /**\n * Get legends\n * @returns {Array} - legends\n */\n getLegends () {\n return this.getSource()._legends;\n }\n\n /**\n * Get metadata\n * @returns {Array} - metadata\n */\n getMetadata () {\n return this.getSource()._metadata;\n }\n\n /**\n * Get description\n * @returns {String} - description\n */\n getDescription () {\n return this.getSource()._description;\n }\n\n /**\n * Get title\n * @returns {String} - title\n */\n getTitle () {\n return this.getSource()._title;\n }\n\n /**\n * Get quicklook url\n * @returns {String} - quicklook\n */\n getQuicklookUrl () {\n return this.getSource()._quicklookUrl;\n }\n\n /**\n * Get originators\n * @returns {Array} - originators\n */\n getOriginators () {\n return this.getSource()._originators;\n }\n\n};\n\nexport default LayerWMS;\n\n// Expose LayerWMS as ol.layerGeoportalWMS. (for a build bundle)\nif (window.ol && window.ol.layer) {\n window.ol.layer.GeoportalWMS = LayerWMS;\n}\n","// import openlayers\nimport { get as olGetProj } from \"ol/proj\";\nimport TileLayer from \"ol/layer/Tile\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Config from \"../Utils/Config\";\n// import local with ol dependencies\nimport SourceWMTS from \"./SourceWMTS\";\n\n/**\n* @classdesc\n* Geoportal LayerWMTS source creation (inherit from ol.layer.Tile)\n*\n* @constructor\n* @extends {ol.layer.Tile}\n* @alias ol.layer.GeoportalWMTS\n* @type {ol.layer.GeoportalWMTS}\n* @param {Object} options - options for function call.\n* @param {String} options.layer - Layer name (e.g. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n* @param {Object} [options.configuration] - configuration (cf. example) \n* @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n* @param {String} [options.apiKey] - Access key to Geoportal platform\n* @param {Object} [options.olParams] - other options for ol.layer.Tile function (see {@link http://openlayers.org/en/latest/apidoc/ol.layer.Tile.html ol.layer.Tile})\n* @param {Object} [options.olParams.sourceParams] - other options for ol.source.WMTS function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.WMTS.html ol.source.WMTS})\n* @example\n* var layerWMTS = new ol.layer.GeoportalWMTS({\n* layer : \"ORTHOIMAGERY.ORTHOPHOTOS\"\n* });\n* layerWMTS.getLegends();\n* layerWMTS.getMetadata();\n* layerWMTS.getTitle();\n* layerWMTS.getDescription();\n* layerWMTS.getQuicklookUrl();\n* layerWMTS.getOriginators();\n* \n* // Ex. configuration object for WMTS Layer\n* {\n* \"name\" : \"GEOGRAPHICALGRIDSYSTEMS.MAPS.OVERVIEW\",\n* \"globalConstraint\" : {\n* \"maxScaleDenominator\" : 279541132.01435894,\n* \"minScaleDenominator\" : 2183915.0938621787,\n* \"bbox\" : {\n* \"left\" : -179.5,\n* \"right\" : 179.5,\n* \"top\" : 75,\n* \"bottom\" : -75\n* }\n* },\n* \"params\" : {\n* \"url\" : \"https:*data.geopf.fr/wmts\",\n* \"styles\" : \"normal\",\n* \"version\" : \"1.0.0\",\n* \"format\" : \"image/jpeg\",\n* \"projection\" : \"EPSG:3857\",\n* \"minScale\" : 2183915.0938621787,\n* \"maxScale\" : 279541132.01435894,\n* \"extent\" : {\n* \"left\" : -179.5,\n* \"right\" : 179.5,\n* \"top\" : 75,\n* \"bottom\" : -75\n* },\n* \"legends\" : [\n* {\n* \"format\" : \"image/jpeg\",\n* \"url\" : \"https:*data.geopf.fr/annexes/ressources/legendes/LEGEND.jpg\",\n* \"minScaleDenominator\" : \"200\"\n* }\n* ],\n* \"title\" : \"Carte Mondiale pour la mini-vue\",\n* \"description\" : \"Carte Mondiale pour la mini-vue\",\n* \"tileMatrixSetLimits\" : {\n* \"1\" : {\n* \"minTileRow\" : \"0\",\n* \"maxTileRow\" : \"1\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"1\"\n* },\n* \"2\" : {\n* \"minTileRow\" : \"0\",\n* \"maxTileRow\" : \"3\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"3\"\n* },\n* \"3\" : {\n* \"minTileRow\" : \"1\",\n* \"maxTileRow\" : \"6\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"7\"\n* },\n* \"4\" : {\n* \"minTileRow\" : \"2\",\n* \"maxTileRow\" : \"13\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"15\"\n* },\n* \"5\" : {\n* \"minTileRow\" : \"5\",\n* \"maxTileRow\" : \"26\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"31\"\n* },\n* \"6\" : {\n* \"minTileRow\" : \"11\",\n* \"maxTileRow\" : \"52\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"63\"\n* },\n* \"7\" : {\n* \"minTileRow\" : \"22\",\n* \"maxTileRow\" : \"105\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"127\"\n* },\n* \"8\" : {\n* \"minTileRow\" : \"45\",\n* \"maxTileRow\" : \"210\",\n* \"minTileCol\" : \"0\",\n* \"maxTileCol\" : \"255\"\n* }\n* },\n* \"TMSLink\" : \"PM_1_8\",\n* \"matrixIds\" : [\n* \"1\",\n* \"2\",\n* \"3\",\n* \"4\",\n* \"5\",\n* \"6\",\n* \"7\",\n* \"8\"\n* ],\n* \"tileMatrices\" : {\n* \"1\" : {\n* \"matrixId\" : \"1\",\n* \"matrixHeight\" : 2,\n* \"matrixWidth\" : 2,\n* \"scaleDenominator\" : 279541132.01435894,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"2\" : {\n* \"matrixId\" : \"2\",\n* \"matrixHeight\" : 4,\n* \"matrixWidth\" : 4,\n* \"scaleDenominator\" : 139770566.0071793,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"3\" : {\n* \"matrixId\" : \"3\",\n* \"matrixHeight\" : 8,\n* \"matrixWidth\" : 8,\n* \"scaleDenominator\" : 69885283.00358965,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"4\" : {\n* \"matrixId\" : \"4\",\n* \"matrixHeight\" : 16,\n* \"matrixWidth\" : 16,\n* \"scaleDenominator\" : 34942641.50179486,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"5\" : {\n* \"matrixId\" : \"5\",\n* \"matrixHeight\" : 32,\n* \"matrixWidth\" : 32,\n* \"scaleDenominator\" : 17471320.75089743,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"6\" : {\n* \"matrixId\" : \"6\",\n* \"matrixHeight\" : 64,\n* \"matrixWidth\" : 64,\n* \"scaleDenominator\" : 8735660.375448715,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"7\" : {\n* \"matrixId\" : \"7\",\n* \"matrixHeight\" : 128,\n* \"matrixWidth\" : 128,\n* \"scaleDenominator\" : 4367830.1877243575,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* },\n* \"8\" : {\n* \"matrixId\" : \"8\",\n* \"matrixHeight\" : 256,\n* \"matrixWidth\" : 256,\n* \"scaleDenominator\" : 2183915.0938621787,\n* \"tileHeight\" : 256,\n* \"tileWidth\" : 256,\n* \"topLeftCorner\" : {\n* \"x\" : -20037508.3427892,\n* \"y\" : 20037508.3427892\n* }\n* }\n* },\n* \"nativeResolutions\" : [\n* \"78271.51696402048\",\n* \"39135.75848201023\",\n* \"19567.87924100512\",\n* \"9783.939620502561\",\n* \"4891.969810251280\",\n* \"2445.984905125640\",\n* \"1222.992452562820\",\n* \"611.4962262814100\"\n* ]\n* }\n*/\nvar LayerWMTS = class LayerWMTS extends TileLayer {\n \n /**\n * See {@link ol.layer.GeoportalWMTS}\n * @module LayerWMTS\n * @alias module:~layers/GeoportalWMTS\n * @param {*} options - options\n * @example\n * import LayerWMTS from \"gpf-ext-ol/layers/LayerWMTS\n * ou \n * import { LayerWMTS } from \"gpf-ext-ol\"\n */\n constructor (options) {\n // if (!(this instanceof LayerWMTS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n \n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n \n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n \n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n \n // configuration de la ressource\n var layerCfg = options.configuration;\n \n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config chargée\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n // récupération des autres paramètres nécessaires à la création de la layer\n var layerId = Config.configuration.getLayerId(options.layer, \"WMTS\");\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : Layer ID not found into the catalogue !?\");\n }\n }\n \n // création de la source WMTS\n var olSourceParams;\n if (options.olParams && options.olParams.sourceParams) {\n olSourceParams = options.olParams.sourceParams;\n }\n var wmtsSource = new SourceWMTS({\n layer : options.layer,\n configuration : options.configuration,\n ssl : options.ssl,\n apiKey : options.apiKey,\n olParams : olSourceParams\n });\n \n var layerTileOptions = {\n source : wmtsSource\n };\n \n // si le param layer n'a pas été renseigné lors de la création de la source,\n // c'est que l'identifiant de la couche n'a pas été trouvé. on passe donc la recherche des paramètres.\n if (wmtsSource.getLayer() !== undefined) {\n if (layerCfg.globalConstrainWFSts && layerCfg.globalConstraints.projection) {\n /* INFO : désactivation temporaire de l'étendue, car certaines étendues (trop grandes ?)\n provoquent quelques bugs d'affichage (zoom > 16 par exemple) */\n // récupération de l'étendue (en EPSG:4326), et reprojection dans la proj de la couche\n // var geobbox = [\n // layerCfg.globalConstraints.extent.left,\n // layerCfg.globalConstraints.extent.bottom,\n // layerCfg.globalConstraints.extent.right,\n // layerCfg.globalConstraints.extent.top\n // ];\n // layerTileOptions.extent = ol.proj.transformExtent(geobbox, \"EPSG:4326\", layerCfg.globalConstraints.projection);\n \n // récupération des résolutions min et max\n var p;\n // on récupère tout d'abord la projection\n if (typeof layerCfg.globalConstraints.projection === \"string\") {\n p = olGetProj(layerCfg.globalConstraints.projection);\n }\n // puis, selon l'unité de la projection, on calcule la résolution correspondante\n if (p && p.getUnits()) {\n if (p.getUnits() === \"m\") {\n /* fixme : fix temporaire pour gérer les min/max scaledenominator qui sont arrondis dans la configuration !\n * on les arrondit respectivement à l'unité inférieure et supérieure\n * pour que les couches soient bien disponibles aux niveaux de zoom correspondants */\n // info : 1 pixel = 0.00028 m\n layerTileOptions.minResolution = (layerCfg.globalConstraints.minScale - 1) * 0.00028;\n layerTileOptions.maxResolution = (layerCfg.globalConstraints.maxScale + 1) * 0.00028;\n } else if (p.getUnits() === \"degrees\") {\n /* fixme : fix temporaire pour gérer les min/max scaledenominator qui sont arrondis dans la configuration !\n * on les arrondit respectivement à l'unité inférieure et supérieure\n * pour que les couches soient bien disponibles aux niveaux de zoom correspondants */\n // info : 6378137 * 2 * pi / 360 = rayon de la terre (ellipsoide WGS84)\n layerTileOptions.minResolution = (layerCfg.globalConstraints.minScale - 1) * 0.00028 * 180 / (Math.PI * 6378137);\n layerTileOptions.maxResolution = (layerCfg.globalConstraints.maxScale + 1) * 0.00028 * 180 / (Math.PI * 6378137);\n }\n }\n }\n }\n \n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(layerTileOptions, options.olParams);\n \n // création d'une ol.layer.Tile avec les options récupérées ci-dessus.\n super(layerTileOptions);\n \n this.name = options.layer;\n this.service = \"WMTS\";\n this.config = layerCfg;\n\n return this;\n }\n \n /**\n * Get configuration\n * @returns {Object} - configuration\n */\n getConfiguration () {\n return this.config;\n }\n \n /**\n * Get legends\n * @returns {Array} - legends\n */\n getLegends () {\n return this.getSource()._legends;\n }\n\n /**\n * Get metadata\n * @returns {Array} - metadata\n */\n getMetadata () {\n return this.getSource()._metadata;\n }\n\n /**\n * Get description\n * @returns {String} - description\n */\n getDescription () {\n return this.getSource()._description;\n }\n\n /**\n * Get title\n * @returns {String} - title\n */\n getTitle () {\n return this.getSource()._title;\n }\n\n /**\n * Get quicklook url\n * @returns {String} - quicklook\n */\n getQuicklookUrl () {\n return this.getSource()._quicklookUrl;\n }\n\n /**\n * Get originators\n * @returns {Array} - originators\n */\n getOriginators () {\n return this.getSource()._originators;\n }\n \n};\n\nexport default LayerWMTS;\n\n// Expose LayerWMTS as ol.layerGeoportalWMTS. (for a build bundle)\nif (window.ol && window.ol.layer) {\n window.ol.layer.GeoportalWMTS = LayerWMTS;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.TileWMS;","import Gp from \"geoportal-access-lib\";\n// import OpenLayers\nimport TileWMSSource from \"ol/source/TileWMS\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport Logger from \"../Utils/LoggerByDefault\";\nimport Config from \"../Utils/Config\";\n// package.json (extract version)\nimport Pkg from \"../../../package.json\";\n\nvar logger = Logger.getLogger(\"sourcewms\");\n\n/**\n * @classdesc\n * Geoportal tile WMS source creation (inherit from ol.source.TileWMS)\n *\n * @constructor\n * @alias ol.source.GeoportalWMS\n * @type {ol.source.GeoportalWMS}\n * @extends {ol.source.TileWMS}\n * @param {Object} options - options for function call.\n * @param {String} options.layer - Layer name (e.g. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {Object} [options.configuration] - configuration (cf. example) \n * @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n * @param {String} [options.apiKey] - Access key to Geoportal platform\n * @param {Array} [options.legends] - Legends objects associated to the layer\n * @param {Array} [options.metadata] - Metadata objects associated to the layer\n * @param {String} [options.title] - title of the layer\n * @param {String} [options.description] - description of the layer\n * @param {String} [options.quicklookUrl] - quicklookUrl of the layer\n * @param {Object} [options.olParams] - other options for ol.source.TileWMS function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.TileWMS.html ol.source.TileWMS})\n * @example\n * var sourceWMS = new ol.source.GeoportalWMS({\n * layer : \"ORTHOIMAGERY.ORTHOPHOTOS\"\n * });\n */\nvar SourceWMS = class SourceWMS extends TileWMSSource {\n\n constructor (options) {\n // if (!(this instanceof SourceWMS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n\n // check layer params\n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n\n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n\n // configuration de la ressource\n var layerCfg = options.configuration;\n var wmsParams = (layerCfg) ? layerCfg.params : null;\n var apiKey = options.apiKey;\n\n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n\n var layerId = Config.configuration.getLayerId(options.layer, \"WMS\");\n if (!layerId) {\n throw new Error(`ERROR : WMS Layer ID ${options.layer} cannot be found in Geoportal Configuration. Make sure that this resource is included in your contract key.`);\n }\n\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : WMS Layer configuration cannot be found in Geoportal.\");\n }\n\n apiKey = Config.configuration.getLayerKey(layerId)[0];\n wmsParams = Config.configuration.getLayerParams(options.layer, \"WMS\");\n }\n\n // si ssl = false on fait du http\n // par défaut, ssl = true, on fait du https\n var protocol = options.ssl === false ? \"http://\" : \"https://\";\n\n var urlParams = {\n \"gp-ol-ext\" : Pkg.olExtVersion || Pkg.version\n };\n if (wmsParams.url.includes(\"/private/\")) {\n // si l'url est privée\n // Ajout de la clef d'API fournie par l'utilisateur en prioritée\n // ou récupérée depuis la configuration\n var key = options.apiKey || apiKey;\n if (!key) {\n throw new Error(\"ERROR : WMS Layer apiKey cannot be found in Geoportal Configuration.\");\n }\n urlParams[\"apikey\"] = key;\n }\n\n var wmsSourceOptions = {\n // tracker extension openlayers\n url : Gp.Helper.normalyzeUrl(wmsParams.url.replace(/(http|https):\\/\\//, protocol), urlParams, false),\n params : {\n SERVICE : \"WMS\",\n LAYERS : options.layer,\n VERSION : wmsParams.version,\n STYLES : wmsParams.styles,\n FORMAT : wmsParams.format\n },\n crossOrigin : \"anonymous\"\n // ,\n // attributions : [\n // new ol.Attribution({\n // html : \"\"\n // })\n // ]\n };\n\n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(wmsSourceOptions, options.olParams);\n\n // on surcharge les originators (non récupérés depuis configuration de la couche)\n if (options.olParams && !wmsParams.originators) {\n wmsParams.originators = options.olParams.attributions;\n }\n\n // returns a WMS object, that inherits from ol.source.TileWMS.\n super(wmsSourceOptions);\n\n // save originators (to be updated by Originators control)\n this._originators = wmsParams.originators;\n\n // save legends and metadata (to be added to LayerSwitcher control)\n this._legends = options.legends || wmsParams.legends;\n this._metadata = options.metadata || wmsParams.metadata;\n this._title = options.title || wmsParams.title;\n this._description = options.description || wmsParams.description;\n this._quicklookUrl = options.quicklookUrl || wmsParams.quicklookUrl;\n\n this.name = options.layer;\n this.service = \"WMS\";\n\n return this;\n }\n\n};\n\nexport default SourceWMS;\n\n// Expose SourceWMS as ol.source.GeoportalWMTS. (for a build bundle)\nif (window.ol && window.ol.source) {\n window.ol.source.GeoportalWMS = SourceWMS;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.tilegrid.WMTS;","/**\n* @module LayerUtils\n* @alias module:~utils/LayerUtils\n* @description\n* ...\n*\n* @example\n* import LayerUtils from \"gpf-ext-ol/utils/LayerUtils\"\n* ou \n* import {LayerUtils} from \"gpf-ext-ol\n\n* LayerUtils.getZoomLevelFromScaleDenominator();\n* LayerUtils.getAttributions();\n* LayerUtils.intersects();\n*/\nvar LayerUtils = {\n\n /**\n * Obtenir le ZoomLevel à partir du ScaleDenominator\n * @function getZoomLevelFromScaleDenominator\n * @param {Number} scaleDenominator - the scale denominator\n * @param {String} crs - the crs\n *\n * @returns {Integer} zoom level\n */\n getZoomLevelFromScaleDenominator : function (scaleDenominator, crs) {\n // ------------------------------------------------- //\n // Code issu de l'API Geoportal/Catalogue/Config.js //\n // ------------------------------------------------- //\n // var configuration = Gp.Config;\n // var general = configuration.generalOptions;\n // var layers = configuration.layersContext;\n //\n // for (var tms in general.tileMatrixSets) {\n // var tileMatrixSet = general.tileMatrixSets[tms];\n // // IGN's WMTS bug : epsg:nnnn instead of EPSG:nnnn\n // var crs = tileMatrixSet.supportedCRS = tileMatrixSet.supportedCRS.replace(/epsg/,\"EPSG\");\n //\n // if (!Geoportal.Catalogue.CRSRESOLUTIONS.hasOwnProperty(crs)) {\n // var p= new OpenLayers.Projection(crs);\n // Geoportal.Catalogue.CRSRESOLUTIONS[crs]= [];\n // var matrixIds= tileMatrixSet.matrixIds;\n // for (var i= 0, li= matrixIds.length; i} params.extent - map current geographical extent (EPSG:4326) : [top, left, bottom, right] = [maxy, minx, miny, maxx]\n * @param {Number} params.zoom - map current zoom\n * @param {String} params.crs - map current projection code (ex \"EPSG:2154\")\n * @param {Boolean} params.visibility - layer visibility\n * @param {Gp.Services.Config.Originator} params.originators - resource originators (from Gp.Config.layers[].originators)\n * @returns {Object} attributions - associative array, mapping originators url (keys) with their properties : html attributions elements\n */\n getAttributions : function (params) {\n var zoom = params.zoom;\n\n var attributions = [];\n\n if (params.originators != null && params.visibility) {\n // drawLogo = boolean, true if attribution should be displayed (zoom, extent), false otherwise\n var drawLogo;\n for (var j = 0, jl = params.originators.length; j < jl; j++) {\n drawLogo = true;\n var originator = params.originators[j];\n\n var constraints = params.originators[j].constraints || [];\n for (var k = 0, kl = constraints.length; k < kl; k++) {\n var constraint = constraints[k];\n drawLogo = true;\n\n var minZoomLevel = this.getZoomLevelFromScaleDenominator(constraint.maxScaleDenominator, params.crs);\n var maxZoomLevel = this.getZoomLevelFromScaleDenominator(constraint.minScaleDenominator, params.crs) || 21;\n\n // min zoom constraints\n if (minZoomLevel && (minZoomLevel > zoom)) {\n drawLogo = false;\n }\n\n // max zoom constraints\n if (drawLogo && maxZoomLevel && (maxZoomLevel < zoom)) {\n drawLogo = false;\n }\n\n // bbox constraints\n var bbox = constraint.bbox;\n if (drawLogo && bbox) {\n drawLogo = false;\n var viewExtent = params.extent;\n if (viewExtent) {\n var bounds = [bbox.top, bbox.left, bbox.bottom, bbox.right];\n if (this.intersects(viewExtent, bounds)) {\n // at least one constraint matches the map ones\n drawLogo = true;\n break;\n }\n }\n }\n }\n\n if (drawLogo) {\n // on a un originator qui correspond au zoom et à l'étendue.\n\n var logo = originator.logo;\n var url = originator.url;\n var name = originator.name ? originator.name : \"\";\n var text = originator.attribution;\n\n var container = document.createElement(\"div\");\n container.className = \"gp-control-attribution\";\n\n // on crée un lien dans tous les cas (même s'il ne pointe pas vers une référence), pour avoir accès à la class CSS (pour surcharge)\n var link = null;\n link = document.createElement(\"a\");\n link.className = \"gp-control-attribution-link\";\n link.target = \"_blank\";\n container.appendChild(link);\n if (url) {\n link.href = url;\n }\n\n var bImage = !!(logo);\n var image = null;\n // si on a un logo, on l'affiche à l'interieur du lien\n if (bImage) {\n image = document.createElement(\"img\");\n if (link) {\n image.className = \"gp-control-attribution-image\";\n link.appendChild(image);\n } else {\n image.className = \"\";\n container.appendChild(image);\n }\n image.src = logo;\n image.title = text || name;\n image.style.height = \"30px\";\n image.style.width = \"30px\";\n } else {\n // sinon, on affiche le nom de l'originator, ou sa description ou l'url.\n if (name) {\n link.textContent = name;\n } else if (text) {\n link.textContent = text;\n } else if (url) {\n link.textContent = url;\n } else {\n link.textContent = \"\";\n }\n }\n\n attributions.push(container.innerHTML + \" \");\n }\n }\n }\n\n return attributions;\n },\n\n /**\n * Determines if one extent (extent1) intersects another (extent2)\n *\n * @function intersects\n * @param {Array.} extent1 - First extent : [top, left, bottom, right] = [maxy, minx, miny, maxx]\n * @param {Array.} extent2 - Second extent : [top, left, bottom, right] = [maxy, minx, miny, maxx]\n * @return {Boolean} intersects - True if the two extents intersect, false otherwise.\n */\n intersects : function (extent1, extent2) {\n var intersectsX = (extent1[1] <= extent2[3]) && (extent2[1] <= extent1[3]);\n var intersectsY = (extent1[2] <= extent2[0]) && (extent2[2] <= extent1[0]);\n return intersectsX && intersectsY;\n }\n};\n\nexport default LayerUtils;\n","import Gp from \"geoportal-access-lib\";\n// import OpenLayers\nimport WMTSTileGrid from \"ol/tilegrid/WMTS\";\n// import local with ol dependencies\nimport WMTSExtended from \"../Sources/WMTS\";\n// import local\nimport Utils from \"../Utils/Helper\";\nimport LayerUtils from \"../Utils/LayerUtils\";\nimport Logger from \"../Utils/LoggerByDefault\";\nimport Config from \"../Utils/Config\";\n// package.json (extract version)\nimport Pkg from \"../../../package.json\";\n\nvar logger = Logger.getLogger(\"sourcewmts\");\n\n/**\n * @classdesc\n * Geoportal WMTS source creation (inherit from ol.source.WMTS)\n *\n * @constructor\n * @alias ol.source.GeoportalWMTS\n * @type {ol.source.GeoportalWMTS}\n * @extends {WMTSExtended}\n * @param {Object} options - options for function call.\n * @param {String} options.layer - Layer name (e.g. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {Object} [options.configuration] - configuration (cf. example) \n * @param {Boolean} [options.ssl] - if set true, enforce protocol https (only for nodejs)\n * @param {String} [options.apiKey] - Access key to Geoportal platform\n * @param {Array} [options.legends] - Legends objects associated to the layer\n * @param {Array} [options.metadata] - Metadata objects associated to the layer\n * @param {String} [options.title] - title of the layer\n * @param {String} [options.description] - description of the layer\n * @param {String} [options.quicklookUrl] - quicklookUrl of the layer\n * @param {Object} [options.olParams] - other options for ol.source.WMTS function (see {@link http://openlayers.org/en/latest/apidoc/ol.source.WMTS.html ol.source.WMTS})\n * @example\n * var sourceWMTS = new ol.source.GeoportalWMTS({\n * layer : \"ORTHOIMAGERY.ORTHOPHOTOS\"\n * });\n */\nvar SourceWMTS = class SourceWMTS extends WMTSExtended {\n\n constructor (options) {\n // if (!(this instanceof SourceWMTS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n\n // check layer params\n if (!options.layer) {\n throw new Error(\"ERROR PARAM_MISSING : layer\");\n }\n if (typeof options.layer !== \"string\") {\n throw new Error(\"ERROR WRONG TYPE : layer\");\n }\n\n // par defaut\n if (typeof options.ssl === \"undefined\") {\n options.ssl = true;\n }\n\n // configuration de la ressource\n var layerCfg = options.configuration;\n var wmtsParams = (layerCfg) ? layerCfg.params : null;\n var apiKey = options.apiKey;\n \n // 2 solutions pour la récupération des ressources utiles \n // * soit depuis la configuration en option\n // * soit via la variable globale Gp.Config\n if (!layerCfg) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw new Error(\"ERROR : contract key configuration has to be loaded to load Geoportal layers.\");\n }\n\n var layerId = Config.configuration.getLayerId(options.layer, \"WMTS\");\n if (!layerId) {\n throw new Error(`ERROR : WMTS Layer ID ${options.layer} cannot be found in Geoportal Configuration. Make sure that this resource is included in your contract key.`);\n }\n\n layerCfg = Config.configuration.getLayerConf(layerId);\n if (!layerCfg) {\n throw new Error(\"ERROR : WMTS Layer configuration cannot be found in Geoportal.\");\n }\n\n apiKey = Config.configuration.getLayerKey(layerId)[0];\n wmtsParams = Config.configuration.getLayerParams(options.layer, \"WMTS\");\n }\n\n // si ssl = false on fait du http\n // par défaut, ssl = true, on fait du https\n var protocol = options.ssl === false ? \"http://\" : \"https://\";\n\n var urlParams = {\n \"gp-ol-ext\" : Pkg.olExtVersion || Pkg.version\n };\n if (wmtsParams.url.includes(\"/private/\")) {\n // si l'url est privée\n // Ajout de la clef d'API fournie par l'utilisateur en prioritée\n // ou récupérée depuis la configuration\n var key = options.apiKey || apiKey;\n if (!key) {\n throw new Error(\"ERROR : WMS Layer apiKey cannot be found in Geoportal Configuration.\");\n }\n urlParams[\"apikey\"] = key;\n }\n\n var wmtsSourceOptions = {\n // tracker extension openlayers\n // FIXME : gp-ext version en mode AMD\n url : Gp.Helper.normalyzeUrl(wmtsParams.url.replace(/(http|https):\\/\\//, protocol), urlParams, false),\n version : wmtsParams.version,\n style : wmtsParams.styles,\n format : wmtsParams.format,\n projection : wmtsParams.projection,\n maxZoom : LayerUtils.getZoomLevelFromScaleDenominator(wmtsParams.minScale),\n layer : options.layer,\n matrixSet : wmtsParams.TMSLink,\n tileGrid : new WMTSTileGrid({\n resolutions : wmtsParams.nativeResolutions,\n matrixIds : wmtsParams.matrixIds,\n origin : [Object.values(wmtsParams.tileMatrices)[0].topLeftCorner.x, Object.values(wmtsParams.tileMatrices)[0].topLeftCorner.y]\n }),\n crossOrigin : \"anonymous\"\n };\n\n // récupération des autres paramètres passés par l'utilisateur\n Utils.mergeParams(wmtsSourceOptions, options.olParams);\n\n // on surcharge les originators (non récupérés depuis configuration de la couche)\n if (options.olParams && !wmtsParams.originators) {\n wmtsParams.originators = options.olParams.attributions;\n }\n \n // returns a WMTS object, that inherits from WMTSExtended.\n super(wmtsSourceOptions);\n\n // add originators to layer source (to be updated by Originators control)\n this._originators = wmtsParams.originators;\n\n // add legends and metadata (to be added to LayerSwitcher control)\n this._legends = options.legends || wmtsParams.legends;\n this._metadata = options.metadata || wmtsParams.metadata;\n this._description = options.description || wmtsParams.description;\n this._title = options.title || wmtsParams.title;\n this._quicklookUrl = options.quicklookUrl || wmtsParams.quicklookUrl;\n\n this.name = options.layer;\n this.service = \"WMTS\";\n \n return this;\n }\n\n};\n\nexport default SourceWMTS;\n\n// Expose SourceWMTS as ol.source.GeoportalWMTS. (for a build bundle)\nif (window.ol && window.ol.source) {\n window.ol.source.GeoportalWMTS = SourceWMTS;\n}\n","/**\n * @classdesc\n * \n * Gestion du service de recherche de couches\n * \n * @module Search\n * @alias module:~services/Search\n * @fixme en attente d'evolution du service pour le filtrage sur le type \n * afin d'écarter des reponses de la recherche (ex. DOWNLOAD)\n * @see https://geoservices.ign.fr/documentation/services/services-geoplateforme/service-geoplateforme-de-recherche\n */\n\n/** resultats du service */\nlet m_suggestions = [];\n\n/** gestion annulation du fetch */\nlet controller = new AbortController();\n\n/** index de recherche */\nlet m_index = \"geoplateforme\";\n\n/** \n * liste des champs de recherche\n * valeurs : \"title, description, theme, keywords, layer_name\"\n */\nlet m_fields = \"title,layer_name\";\n\n/** nombre de suggestions du service */\nlet m_size = \"1000\";\n\n/** nombre maximum de réponses */\nlet m_maximumResponses = 10;\n\n/** \n * liste des filtres sur les services\n * @type {Array}\n * @example\n * valeurs : [\"WMTS\", \"TMS\", \"WMS\", \"WFS\", ...]\n */\nlet m_filterByService = [\"WMTS\", \"TMS\"];\n\n/** \n * liste des couches à exclure avec ces projections \n * @type {Array}\n * @example\n * [\"EPSG:4326\",...]\n */\nlet m_filterByProjection = [];\n\n/** \n * liste des couches priortaires dans la recherche\n * sous la forme : [name]\n * > mettre un poids au score des couches que l'on souhaite \n * > mettre en avant dans la recherche\n * \n * @type {Array}\n * @example\n * \"PLAN.IGN$GEOPORTAIL:GPP:TMS\" ou \"PLAN.IGN:TMS\" ou \"PLAN.IGN\"\n * \n */\nlet m_filterByLayerPriority = [];\n\n/** Prioriser les couches de type WMTS sur le service WMS */\nlet m_filterWMTSPriority = false;\n\n/** \n * filtres les services uniquement en TMS\n * @fixme en attente d'evolution du service pour determiner les \"real\" couches vecteurs\n * @type {Array}\n */\nlet m_filterByTMS = [\n \"ADMIN_EXPRESS\",\n \"ISOHYPSE\",\n \"PLAN.IGN\",\n \"OCSGE_2016\",\n \"OCSGE_2019\",\n \"PCI\",\n \"BDTOPO\"\n];\n\n/** url du service (template avec ${m_index}) */\nlet m_url = `https://data.geopf.fr/recherche/api/indexes/${m_index}/suggest`;\n\n/**\n * Interface pour les evenements\n * @example\n * target.dispatchEvent(new CustomEvent(\"myEvent\", { detail : {} }));\n * target.addEventListener(\"myEvent\", handler);\n */\nconst target = new EventTarget();\n\n/**\n * Appel du service de recherche\n * @param {*} text - recherche\n * @returns {Object} json\n * @fire suggest\n * @example\n * {\n * \"attribution\": {},\n * \"srs\": [\n * \"EPSG:3857\"\n * ],\n * \"keywords\": [],\n * \"extent\": {\n * \"type\": \"Polygon\",\n * \"coordinates\": [\n * [\n * [\n * 55.9423828,\n * -21.5354858\n * ],\n * [\n * 55.9423828,\n * 51.1237818\n * ],\n * [\n * -63.28125,\n * 51.1237818\n * ],\n * [\n * -63.28125,\n * -21.5354858\n * ],\n * [\n * 55.9423828,\n * -21.5354858\n * ]\n * ]\n * ]\n * },\n * \"metadata\": [],\n * \"name\": \"PLAN.IGN\",\n * \"title\": \"Plan IGN\",\n * \"description\": \"Plan IGN personnalisable\",\n * \"service\": \"TMS\",\n * \"url\": \"https://data.geopf.fr/tms/1.0.0/PLAN.IGN\"\n * }\n * @fire suggest\n */\nconst suggest = async (text) => {\n // ex. request\n // https://data.geopf.fr/recherche/api/indexes/geoplateforme/suggest?text=ORTHO&fields=title\n clear();\n\n controller = new AbortController();\n\n let url = new URL(m_url);\n let params = {\n text : text,\n fields : m_fields,\n size : m_size\n };\n\n Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));\n\n var response = await fetch(url, {\n // FIXME\n // signal : controller.signal\n });\n\n var results = await response.json();\n\n if (response.status !== 200) {\n throw new Error(response.message);\n }\n\n // ex. response\n // [\n // {\n // \"index\": \"geoplateforme\",\n // \"score\": 3.4832718,\n // \"source\": {\n // \"id\": \"fc2af911-d9c2-4fc8-aee7-46034eebf821\",\n // \"offering_id\": \"faa4c69c-d03b-4502-af87-7f3667411321\",\n // \"index_name\": \"geoplateforme\",\n // \"layer_name\": \"nl_bdtopo_allauch\",\n // \"title\": \"NL - BD Topo : Allauch\",\n // \"description\": \"Extrait de BD TOPo sur Allauch\",\n // \"type\": \"WMS\",\n // \"url\": \"https://data.geopf.fr/wms-v?service=WMS&version=1.3.0&request=GetMap&layers=nl_bdtopo_allauch&bbox={xmin},{ymin},{xmax},{ymax}&styles={styles}&width={width}&height={height}&srs={srs}&format={format}\",\n // \"open\": true,\n // \"publication_date\": \"2023-11-27\",\n // \"keywords\": [\n // \"BDTOPO\",\n // \"Recette\"\n // ],\n // \"extent\": {},\n // \"metadata_urls\": [],\n // \"srs\": [\n // \"EPSG:2154\"\n // ],\n // \"attribution\": {\n // \"title\": \"Ministère de la Transition écologique et de la Cohésion des territoires\",\n // \"url\": \"https://www.ecologie.gouv.fr/\",\n // \"logo\": {\n // \"format\": \"image/png\",\n // \"url\": \"https://data.geopf.fr/annexes/ressources/logos/mtect.png\",\n // \"width\": 294,\n // \"height\": 171\n // }\n // }\n // }\n // }\n // ]\n if (!results || results.length === 0) {\n return;\n }\n\n // INFO\n // Attribution d'un score bonus aux couches priortaires,\n // puis retriage des résultats en fonction du score\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n const found = m_filterByLayerPriority.findIndex((element) => { return element.includes(result.source.layer_name); });\n if (found >= 0) {\n results[i].score += 100;\n // console.log(\"found\", result);\n }\n }\n results.sort((a, b) => b.score - a.score);\n\n var filter = null;\n if (m_filterWMTSPriority) {\n filter = inventory(results);\n }\n\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n var services = (m_filterByService.length === 0 || m_filterByService.includes(result.source.type));\n // FIXME \n // utilisation le champ : result.source.open ?\n if (services) {\n if (unique().length >= m_maximumResponses) {\n break;\n }\n // INFO\n // champs possibles mais pas toujours remplis :\n // srs[], attributions{}, extent{}, metada_url[]\n var o = {\n attribution : result.source.attribution || {},\n srs : result.source.srs || [],\n keywords : result.source.keywords || [],\n extent : result.source.extent || {},\n metadata : result.source.metadata_urls || [], // mapping ?\n name : result.source.layer_name || \"\",\n title : result.source.title || \"\",\n description : result.source.description,\n service : result.source.type || \"\", // mapping\n url : result.source.url || \"\",\n tech : result.source.tech || {},\n tags : result.source.tags || {},\n theme : result.source.theme || \"\",\n producer : result.source.producer || \"\"\n };\n if (m_filterByTMS.length) {\n if ((o.service === \"WMTS\" && m_filterByTMS.includes(o.name)) ||\n (o.service === \"TMS\" && !m_filterByTMS.includes(o.name))) {\n continue;\n }\n }\n if (m_filterByProjection.length) {\n // FIXME Array !?\n if (m_filterByProjection.includes(o.srs[0])) {\n continue;\n }\n }\n if (filter && filter[o.name] && o.service === \"WMS\") {\n continue;\n }\n m_suggestions.push(o);\n // console.log(\"suggestion\", result);\n }\n }\n\n target.dispatchEvent(\n new CustomEvent(\"suggest\", {\n bubbles : true,\n detail : getSuggestions()\n })\n );\n\n return getSuggestions();\n};\n\n/**\n * Retourne la liste des suggestions sans doublons\n * @returns {Object} liste des suggestions sans doublons\n */\nconst unique = () => {\n return m_suggestions.filter((value, index, self) =>\n index === self.findIndex((t) => (\n t.service === value.service &&\n t.name === value.name &&\n t.title === value.title &&\n t.description === value.description\n ))\n );\n // INFO\n // soit on trie, \n // soit on laisse le trie natif en fonction du score\n // .sort((a, b) => {\n // // INFO\n // // titleA (WMTS)\n // // titleA (WMS)\n // // titleA (WFS)\n // // titleA (TMS)\n // // titleB (WMTS)\n // return a.title.localeCompare(b.title) || b.service - a.service;\n // });\n};\n\n/**\n * Clear\n */\nconst clear = () => {\n controller.abort();\n m_suggestions = [];\n};\n\n/** \n * Determine si une couche est associé avec des services WMS et/ou WMTS\n * \n * true : WMTS only ou WMTS avec des WMS associés ou pas\n * false : WMS only\n * @param {Array} results - réponse de la recherche\n * @returns {Object} - ...\n * @example\n * {\n * PLAN.IGN: true, // WMTS et des WMS\n * BDTOPO:batiments: false // uniquements des WMS\n * }\n */\nconst inventory = (results) => {\n var inventory = {};\n for (let i = 0; i < results.length; i++) {\n const type = results[i].source.type;\n const name = results[i].source.layer_name;\n if (type === \"WMTS\" || type === \"WMS\") {\n if (inventory[name] === undefined) {\n inventory[name] = type === \"WMTS\";\n }\n inventory[name] ||= type === \"WMTS\";\n }\n }\n // console.log(inventory);\n return inventory;\n};\n\n// getter (reponse)\n\n/**\n * Liste des suggestions (unique)\n * @returns {Array} Liste des suggestions (unique)\n */\nconst getSuggestions = () => {\n return unique();\n};\n/**\n * Liste des noms (unique)\n * @returns {Array} Liste des noms (unique)\n */\nconst getNames = () => {\n return unique().map((o) => { return o.name; });\n};\n/**\n * Liste des titres (unique)\n * @returns {Array} Liste des titres (unique)\n */\nconst getTitles = () => {\n return unique().map((o) => { return o.title; });\n};\n\n// setter (conf)\n\n/**\n * Renseigne le nom de l'indexe\n * @param {String} value - nom de l'indexe\n * @see m_index\n */\nconst setIndex = (value) => {\n m_index = value;\n};\n/**\n * Renseigne la liste des champs de recherche\n * @param {Array} value - liste des champs de recherche\n * @see m_fields\n */\nconst setFields = (value) => {\n m_fields = value;\n};\n/**\n * Renseigne le nombre de suggestions du service\n * @param {Number} value - le nombre de suggestions du service\n * @see m_size\n */\nconst setSize = (value) => {\n m_size = parseInt(value);\n};\n/**\n * Renseigne l'url du service\n * @param {String} value - url du service\n * @see m_url\n */\nconst setUrl = (value) => {\n m_url = eval(\"`\" + value + \"`\"); // insecure !\n};\n/**\n * Renseigne le nombre de réponse souhaitée\n * @param {Number} value - nombre de réponse\n * @see m_maximumResponses\n */\nconst setMaximumResponses = (value) => {\n m_maximumResponses = parseInt(value);\n};\n/**\n * Filtre sur la liste des services à selectionner\n * @param {String} value - liste de service\n * @see m_filterByService\n */\nconst setFiltersByService = (value) => {\n m_filterByService = value === \"\" ? [] : value.split(\",\");\n};\n/**\n * Filtre sur les couches à exclure\n * @param {String} value - liste des projections\n * @see m_filterByProjection\n */\nconst setFiltersByProjection = (value) => {\n m_filterByProjection = value === \"\" ? [] : value.split(\",\");\n};\n/**\n * Filtre sur les couches prioritaires dans la recherche\n * @param {String} value - liste des couches prioritaires\n * @see m_filterByLayerPriority\n */\nconst setFiltersByLayerPriority = (value) => {\n m_filterByLayerPriority = value === \"\" ? [] : value.split(\",\");\n};\n/** \n * Active ou non le filtre 'strange' \n * @param {Boolean} value - active le filtre\n */\nconst setFilterWMTSPriority = (value) => {\n m_filterWMTSPriority = value;\n};\n/**\n * Filtre sur les \"purs\" couches vecteurs tuilés\n * @param {String} value - liste des couches\n * @see m_filterByTMS\n */\nconst setFiltersByTMS = (value) => {\n m_filterByTMS = value === \"\" ? [] : value.split(\",\");\n};\n/**\n * Mise à jour de la liste des \"purs\" couches vecteurs tuilés\n * @param {String} value - url\n */\nconst updateFilterByTMS = async (value) => {\n var url = value;\n if (!url) {\n url = \"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/vectorTileConfig/fullVectorTileConfig.json\";\n }\n const response = await fetch(url);\n const results = await response.json();\n\n if (response.status !== 200) {\n throw new Error(response.message);\n }\n\n if (!results) {\n throw new Error(\"Liste vide !\");\n }\n\n var lstName = Object.keys(results.layers).map((k) => { return k.split(\"$\")[0]; });\n if (lstName) {\n setFiltersByTMS(lstName.toString());\n }\n\n return m_filterByTMS;\n};\n\nexport default {\n target,\n suggest,\n clear,\n getSuggestions,\n getNames,\n getTitles,\n setIndex,\n setFields,\n setSize,\n setUrl,\n setMaximumResponses,\n setFiltersByService,\n setFiltersByTMS,\n updateFilterByTMS,\n setFiltersByProjection,\n setFiltersByLayerPriority,\n setFilterWMTSPriority\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.source.WMTS;","// import OpenLayers\nimport WMTSSource from \"ol/source/WMTS\";\nimport {\n extend,\n createEmpty as olCreateEmpty,\n getWidth as olGetWidth,\n intersects as olIntersects\n} from \"ol/extent\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Utils from \"../Utils/Helper\";\n\n/**\n * @classdesc\n *\n * Extended ol.source.WMTS.\n *\n * @constructor\n * @alias ol.source.WMTSExtended\n * @type {ol.source.WMTS}\n * @extends {ol.source.WMTS}\n * @param {Object} options - Options\n */\nvar WMTS = class WMTS extends WMTSSource {\n\n constructor (options) {\n // if (!(this instanceof WMTS)) {\n // throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n // }\n\n // call constructor\n super(options);\n }\n\n /**\n * Return the GetFeatureInfo URL for the passed coordinate, resolution, and\n * projection. Return `undefined` if the GetFeatureInfo URL cannot be\n * constructed.\n * @param {ol.Coordinate} coordinate - Coordinate.\n * @param {Number} resolution - Resolution.\n * @param {ol.proj.Projection} projection - Projection.\n * @param {!Object} params - GetFeatureInfo params. `INFOFORMAT` at least should\n * be provided.\n * @return {String|undefined} GetFeatureInfo URL.\n */\n getFeatureInfoUrl (coordinate, resolution, projection, params) {\n // INFO\n // en fonction de la version d'openlayers, la méthode est differente :\n // - getGetFeatureInfoUrl en v5\n // - getFeatureInfoUrl en v6\n var pixelRatio = (this.options && this.options.tilePixelRatio) ? this.options.tilePixelRatio : 1;\n\n var tileGrid = this.tileGrid;\n var tileCoord = this.tileGrid.getTileCoordForCoordAndResolution(coordinate, resolution);\n\n // this code is duplicated from createFromWMTSTemplate function\n var getTransformedTileCoord = function (tileCoord, tileGrid, projection) {\n var tmpTileCoord = [0, 0, 0]; /* Note : [z(zoomLevel),x,y] */\n var tmpExtent = olCreateEmpty();\n var x = tileCoord[1];\n var y = tileCoord[2];\n var tileExtent = tileGrid.getTileCoordExtent(tileCoord);\n var extent = projection.getExtent();\n\n if (extent != null && projection.isGlobal()) {\n var numCols = Math.ceil(olGetWidth(extent) / olGetWidth(tileExtent));\n x = x % numCols;\n tmpTileCoord[0] = tileCoord[0];\n tmpTileCoord[1] = x;\n tmpTileCoord[2] = tileCoord[2];\n tileExtent = tileGrid.getTileCoordExtent(tmpTileCoord, tmpExtent);\n }\n if (!olIntersects(tileExtent, extent) /* || ol.extent.touches(tileExtent, extent) */) {\n return null;\n }\n return [tileCoord[0], x, y];\n };\n\n var tileExtent = tileGrid.getTileCoordExtent(tileCoord);\n var transformedTileCoord = getTransformedTileCoord(tileCoord, tileGrid, projection);\n\n if (tileGrid.getResolutions().length <= tileCoord[0]) {\n return undefined;\n }\n\n var tileResolution = tileGrid.getResolution(tileCoord[0]);\n var tileMatrix = tileGrid.getMatrixIds()[tileCoord[0]];\n\n var baseParams = {\n SERVICE : \"WMTS\",\n VERSION : \"1.0.0\",\n REQUEST : \"GetFeatureInfo\",\n LAYER : this.getLayer(),\n TILECOL : transformedTileCoord[1],\n TILEROW : transformedTileCoord[2],\n TILEMATRIX : tileMatrix,\n TILEMATRIXSET : this.getMatrixSet(),\n FORMAT : this.getFormat() || \"image/png\",\n STYLE : this.getStyle() || \"normal\"\n };\n\n Utils.assign(baseParams, params);\n\n /* var tileSize = tileGrid.getTileSize();\n var x = Math.floor(tileSize*((coordinate[0]-tileExtent[0])/(tileExtent[2]-tileExtent[0])));\n var y = Math.floor(tileSize*((tileExtent[3]-coordinate[1])/(tileExtent[3]-tileExtent[1]))); */\n\n var x = Math.floor((coordinate[0] - tileExtent[0]) / (tileResolution / pixelRatio));\n var y = Math.floor((tileExtent[3] - coordinate[1]) / (tileResolution / pixelRatio));\n\n /* patch parce que la fonction getTileCoordForCoordAndResolution(coords,res) d'Openlayers peut renvoyer\n une tuile dont l'étendue (getTileCoordExtent) ne contient pas le point passé en paramètre (coords) */\n var tileSize = tileGrid.getTileSize(tileCoord[0]);\n x = Math.min(x, (tileSize[0] | tileSize) - 1);\n y = Math.max(y, 0);\n\n baseParams[\"I\"] = x;\n baseParams[\"J\"] = y;\n\n var url = this.urls[0];\n\n var featureInfoUrl = Gp.Helper.normalyzeUrl(url, baseParams);\n\n return featureInfoUrl;\n };\n\n};\n\nexport default WMTS;\n\n// Expose WMTS as ol.source.WMTSExtended. (for a build bundle)\nif (window.ol && window.ol.source) {\n window.ol.source.WMTSExtended = WMTS;\n}\n","/**\n * @module Config\n * @alias module:~utils/Config\n * @private\n * @description\n * ...\n *\n * @example\n * isConfigLoaded();\n */\nvar Config = {\n\n /**\n * Config\n *\n * @public\n * @type {Object}\n */\n configuration : {},\n\n /**\n * Check if the configuration is loaded\n *\n * @returns {Boolean} True if Config is loaded, false otherwise\n */\n isConfigLoaded : function () {\n // config already loaded !\n if (this.configuration && Object.keys(this.configuration).length !== 0) {\n return true;\n }\n var scope = typeof window !== \"undefined\" ? window : typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : {};\n if (scope.Gp && scope.Gp.Config && scope.Gp.Config.layers && Object.keys(scope.Gp.Config.layers).length !== 0) {\n /** ts-syntax */ (this.configuration) = scope.Gp.Config;\n return true;\n }\n return false;\n }\n\n};\n\nexport default Config;\n","/**\n* @module Helper\n* @alias module:~utils/HelperUtils\n* @description\n* ...\n*\n* @example\n* import HelperUtils from \"gpf-ext-ol/utils/HelperUtils\"\n* ou \n* import {HelperUtils} from \"gpf-ext-ol\n* \n* HelperUtils.detectSupport();\n* HelperUtils.assign();\n* HelperUtils.mergeParams();\n*/\nvar Helper = {\n\n /**\n * this method is called by the constructor.\n * this information is useful to switch to touch mode.\n * Detection : test for desktop or tactile\n *\n * @function detectSupport\n * @returns {Boolean} isDesktop - true for desktop userAgent, false for mobile\n */\n detectSupport : function () {\n var isDesktop = true;\n var userAgent = window.navigator.userAgent.toLowerCase();\n\n if (userAgent.indexOf(\"iphone\") !== -1 ||\n userAgent.indexOf(\"ipod\") !== -1 ||\n userAgent.indexOf(\"ipad\") !== -1 ||\n userAgent.indexOf(\"android\") !== -1 ||\n userAgent.indexOf(\"mobile\") !== -1 ||\n userAgent.indexOf(\"blackberry\") !== -1 ||\n userAgent.indexOf(\"tablet\") !== -1 ||\n userAgent.indexOf(\"phone\") !== -1 ||\n userAgent.indexOf(\"touch\") !== -1) {\n isDesktop = false;\n }\n\n if (userAgent.indexOf(\"msie\") !== -1 ||\n userAgent.indexOf(\"trident\") !== -1) {\n isDesktop = true;\n }\n\n return isDesktop;\n },\n\n /**\n * Copies all source object members to dest\n *\n * @function assign\n * @param {Object} dest - destination object where properties and method will be copied\n * @param {Object} source - source object from which properties and method will be copied\n * @returns {Object} dest\n */\n assign : function (dest, source) {\n dest = dest || {};\n for (var prop in source) {\n if (source.hasOwnProperty(prop)) {\n dest[prop] = source[prop];\n }\n }\n return dest;\n },\n\n /**\n * Merge two objects parameters (deeper than assign)\n *\n * @function mergeParams\n * @param {Object} dest - destination object where properties and method will be merge\n * @param {Object} source - source object from which properties and method will be merge\n * @param {Boolean} replace - replace destination value by source if exists or not (true by default)\n */\n mergeParams : function (dest, source, replace) {\n if (typeof dest === \"undefined\" || typeof source === \"undefined\") {\n return;\n }\n if (typeof replace === \"undefined\") {\n replace = true;\n }\n for (var param in source) {\n if (source.hasOwnProperty(param)) {\n if (typeof source[param] === \"object\") {\n if (dest.hasOwnProperty(param)) {\n this.mergeParams(dest[param], source[param], replace);\n } else {\n dest[param] = source[param];\n }\n } else {\n if (dest.hasOwnProperty(param)) {\n if (replace) {\n dest[param] = source[param];\n }\n } else {\n dest[param] = source[param];\n }\n }\n }\n }\n }\n};\n\nexport default Helper;\n","import * as Log from \"loglevel\";\n\n/**\n * @module LoggerByDefault\n * @alias module:~utils/Logger\n * @description\n * ...\n *\n * @example\n * import Logger from \"gpf-ext-ol/utils/LoggerByDefault\"\n * ou \n * import {Logger} from \"gpf-ext-ol\n * \n * Logger.getLogger();\n * Logger.disableAll();\n * Logger.enableAll();\n */\nvar LoggerByDefault = {\n /**\n * creation d'un logger statique\n *\n * @function getLogger\n * @param {String} [name=\"default\"] - the logger name\n * @returns {Object} logger\n */\n getLogger : function (name) {\n // on définit process si non défini dans l'environnement\n if (typeof process === \"undefined\") {\n var process = {};\n process.env = {\n VERBOSE : false\n };\n }\n (process.env.VERBOSE) ? Log.enableAll() : Log.disableAll();\n var logname = name || \"default\";\n return Log.getLogger(logname);\n },\n /**\n * desactive tous les loggers\n * @function disableAll\n */\n disableAll : function () {\n var loggers = Log.getLoggers();\n for (const key in loggers) {\n if (Object.hasOwnProperty.call(loggers, key)) {\n const logger = loggers[key];\n logger.disableAll();\n }\n }\n },\n /**\n * active tous les loggers\n * @function enableAll\n */\n enableAll : function () {\n var loggers = Log.getLoggers();\n for (const key in loggers) {\n if (Object.hasOwnProperty.call(loggers, key)) {\n const logger = loggers[key];\n logger.enableAll();\n }\n }\n }\n};\n\nexport default LoggerByDefault;\n\n// Expose Export as ol.control.Catalog (for a build bundle)\nif (window.Gp) {\n window.Gp.Logger = LoggerByDefault;\n}\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version v4.2.8+1e68dce6\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\n\n\nvar _isArray = void 0;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var vertx = Function('return this')().require('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n\n if (_state) {\n var callback = arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve$1(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n try {\n then$$1.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then$$1, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$1 === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$1)) {\n handleForeignThenable(promise, maybeThenable, then$$1);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n var then$$1 = void 0;\n try {\n then$$1 = value.then;\n } catch (error) {\n reject(promise, error);\n return;\n }\n handleMaybeThenable(promise, value, then$$1);\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = void 0,\n callback = void 0,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = void 0,\n error = void 0,\n succeeded = true;\n\n if (hasCallback) {\n try {\n value = callback(detail);\n } catch (e) {\n succeeded = false;\n error = e;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (succeeded === false) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n}\n\nvar Enumerator = function () {\n function Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n }\n\n Enumerator.prototype._enumerate = function _enumerate(input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n var c = this._instanceConstructor;\n var resolve$$1 = c.resolve;\n\n\n if (resolve$$1 === resolve$1) {\n var _then = void 0;\n var error = void 0;\n var didError = false;\n try {\n _then = entry.then;\n } catch (e) {\n didError = true;\n error = e;\n }\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise$1) {\n var promise = new c(noop);\n if (didError) {\n reject(promise, error);\n } else {\n handleMaybeThenable(promise, entry, _then);\n }\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$1) {\n return resolve$$1(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$1(entry), i);\n }\n };\n\n Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n var promise = this.promise;\n\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n };\n\n Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n };\n\n return Enumerator;\n}();\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all(entries) {\n return new Enumerator(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {Function} resolver\n Useful for tooling.\n @constructor\n*/\n\nvar Promise$1 = function () {\n function Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n }\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n Chaining\n --------\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n Assimilation\n ------------\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n If the assimliated promise rejects, then the downstream promise will also reject.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n Simple Example\n --------------\n Synchronous Example\n ```javascript\n let result;\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n Advanced Example\n --------------\n Synchronous Example\n ```javascript\n let author, books;\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n function foundBooks(books) {\n }\n function failure(reason) {\n }\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n\n\n Promise.prototype.catch = function _catch(onRejection) {\n return this.then(null, onRejection);\n };\n\n /**\n `finally` will be invoked regardless of the promise's fate just as native\n try/catch/finally behaves\n \n Synchronous example:\n \n ```js\n findAuthor() {\n if (Math.random() > 0.5) {\n throw new Error();\n }\n return new Author();\n }\n \n try {\n return findAuthor(); // succeed or fail\n } catch(error) {\n return findOtherAuther();\n } finally {\n // always runs\n // doesn't affect the return value\n }\n ```\n \n Asynchronous example:\n \n ```js\n findAuthor().catch(function(reason){\n return findOtherAuther();\n }).finally(function(){\n // author was either found, or not\n });\n ```\n \n @method finally\n @param {Function} callback\n @return {Promise}\n */\n\n\n Promise.prototype.finally = function _finally(callback) {\n var promise = this;\n var constructor = promise.constructor;\n\n if (isFunction(callback)) {\n return promise.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n throw reason;\n });\n });\n }\n\n return promise.then(callback, callback);\n };\n\n return Promise;\n}();\n\nPromise$1.prototype.then = then;\nPromise$1.all = all;\nPromise$1.race = race;\nPromise$1.resolve = resolve$1;\nPromise$1.reject = reject$1;\nPromise$1._setScheduler = setScheduler;\nPromise$1._setAsap = setAsap;\nPromise$1._asap = asap;\n\n/*global self*/\nfunction polyfill() {\n var local = void 0;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$1;\n}\n\n// Strange compat..\nPromise$1.polyfill = polyfill;\nPromise$1.Promise = Promise$1;\n\nreturn Promise$1;\n\n})));\n\n\n\n//# sourceMappingURL=es6-promise.map\n","/**\n * Errors raised by API for one among three reasons : wrong API usage, underlying service error or unknown reason.\n *\n * @property {String} message - Error message\n * @property {Number} status - Error status : when {@link Gp.Error.TYPE_SRVERR}, gives the [HTTP status of the underlying web service response]{@link https://en.wikipedia.org/wiki/List_of_HTTP_status_codes} ; -1 otherwise.\n * @property {String} type - Error type ({@link Gp.Error.TYPE_SRVERR}, {@link Gp.Error.TYPE_USEERR} or {@link Gp.Error.TYPE_UNKERR}).\n *\n * @namespace\n * @alias Gp.Error\n * @param {Object|String} error - Options for creating error object. Can be a String (message) or an Object.\n * @param {String} error.message - Error message to return to user.\n * @param {enum} [error.type=TYPE_UNKERR] - Error type\n * @param {status} [error.status=-1] - Error status : when {@link Gp.Error.TYPE_SRVERR}, gives the [HTTP status of the underlying web service response]{@link https://en.wikipedia.org/wiki/List_of_HTTP_status_codes}.\n *\n */\nfunction ErrorService (error) {\n if (!(this instanceof ErrorService)) {\n throw new TypeError(\"ErrorService constructor cannot be called as a function.\");\n }\n\n var e = error;\n if (typeof error === \"string\" || error instanceof String) {\n this.message = error;\n this.status = -1;\n this.type = ErrorService.TYPE_UNKERR;\n } else {\n this.message = e.message || \"undefined!?\";\n this.type = e.type;\n this.status = e.status || -1;\n }\n\n this.name = \"ErrorService\";\n this.stack = (new Error()).stack;\n}\n\n/**\n * Error raised when underlying geoportal service answers on error.\n *\n * @type {String}\n * @constant\n * @static\n */\nErrorService.TYPE_SRVERR = \"SERVICE_ERROR\";\n/**\n * Error raised when funcion use is inappropriate\n *\n * @type {String}\n * @constant\n * @static\n */\nErrorService.TYPE_USEERR = \"USAGE_ERROR\";\n/**\n * Error raised when API can't perform the job for a reason other than the two other ones.\n *\n * @type {String}\n * @constant\n * @static\n */\nErrorService.TYPE_UNKERR = \"UNKNOWN_ERROR\";\n\n/**\n * @lends module:ErrorService\n */\nErrorService.prototype = Object.create(Error.prototype, {\n constructor : {\n value : ErrorService,\n writable : true,\n configurable : true\n }\n});\n\nexport default ErrorService;\n","import Logger from \"../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n * Standard WPS\n *\n * @constructor\n * @alias Gp.Formats.WPS\n * @param {Object} options - options\n * @param {Object} options.data - objet\n * @param {String} options.method - POST|GET\n * @param {String} options.param.service - \"WPS\"\n * @param {String} options.param.version - \"1.0.0\"\n * @param {String} options.param.identifier - \"gs:WPSElevation|gs:WPSLineElevation\"\n * @param {String} options.param.rawdataoutput - \"result\"\n * @param {String} options.param.request - \"Execute\"\n * @param {Function} options.onsuccess - function callback success (TODO)\n * @param {Function} options.onerror - function callback error (TODO)\n * @private\n */\nfunction WPS (options) {\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur WPS()]\");\n\n if (!(this instanceof WPS)) {\n throw new TypeError(\"WPS constructor cannot be called as a function.\");\n }\n\n this.options = options || {};\n\n /**\n * Objet DATA\n */\n this.DataObject = this.options.data;\n\n if (!this.DataObject) {\n throw new TypeError(\"This data object is not defined !\");\n }\n\n /**\n * param service.\n * Par defaut, \"WPS\".\n */\n this.paramservice = this.options.param.service || \"WPS\";\n\n /**\n * param version.\n * Par defaut, \"1.0.0\".\n */\n this.paramversion = this.options.param.version || \"1.0.0\";\n\n /**\n * param identifier\n * Par defaut, \"gs:WPS\"\n */\n this.paramidentifier = this.options.param.identifier || \"gs:WPS\";\n\n /**\n * param rawdataoutput\n * Par defaut, \"result\".\n */\n this.paramrawdataoutput = this.options.param.rawdataoutput || \"result\";\n\n /**\n * param request\n * Par defaut, \"Execute\".\n */\n this.paramrequest = this.options.param.request || \"Execute\";\n\n /**\n * methode.\n * Par defaut, \"GET\".\n */\n this.method = this.options.method || \"GET\";\n}\n\nWPS.prototype = {\n\n /**\n * @lends module:WPS#\n */\n\n /**\n * request\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : WPS,\n\n /**\n * Template de la requête.\n */\n template : {\n get : {\n value : \"service=__SERVICE__\" +\n \"&version=__VERSION__\" +\n \"&rawdataoutput=__RAWDATAOUTPUT__\" +\n \"&identifier=__IDENTIFIER__\" +\n \"&request=__REQUEST__\" +\n \"&datainputs=\",\n\n input : \"__KEY__=__DATA__\"\n\n },\n post : {\n\n value : \"\" +\n \"\" +\n \"__IDENTIFIER__\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"__RAWDATAOUTPUT__\" +\n \"\" +\n \"\" +\n \"\",\n\n input : \"\" +\n \"__KEY__\" +\n \"\" +\n \"__DATA__\" +\n \"\" +\n \"\"\n }\n },\n\n /**\n * Namespace par defaut de la requete POST.\n *\n * @returns {String} namespace\n */\n namespaceByDefault : function () {\n var ns = [\n \"xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\"\",\n \"xmlns=\\\"http://www.opengis.net/wps/1.0.0\\\"\",\n \"xmlns:wfs=\\\"http://www.opengis.net/wfs\\\"\",\n \"xmlns:wps=\\\"http://www.opengis.net/wps/1.0.0\\\"\",\n \"xmlns:ows=\\\"http://www.opengis.net/ows/1.1\\\"\",\n \"xmlns:gml=\\\"http://www.opengis.net/gml\\\"\",\n \"xmlns:ogc=\\\"http://www.opengis.net/ogc\\\"\",\n \"xmlns:wcs=\\\"http://www.opengis.net/wcs/1.1.1\\\"\",\n \"xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\"\n ];\n\n return ns.join(\" \");\n },\n\n /**\n * Schemalocation par defaut.\n *\n * @returns {String} schemaLocation\n */\n schemaLocationByDefault : function () {\n return \"xsi:schemaLocation=\\\"http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd\\\"\";\n },\n\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out :\n * // service=__SERVICE__\n * // &version=__VERSION__\n * // &rawdataoutput=__RAWDATAOUTPUT__\n * // &identifier=__IDENTIFIER__\n * // &request=__REQUEST__\n * // &datainputs=\"__DATAINPUTS__\"\n * // avec __DATAINPUTS__ = __KEY__=__DATA__;...\n *\n * // POST out :\n * // \n * // \n * // __IDENTIFIER__\n * // \n * // \n * // \n * // \n * // \n * // __RAWDATAOUTPUT__\n * // \n * // \n * // \",\n * // avec __DATAINPUTS__\n * // \n * // __KEY__\n * // \n * // __DATA__\n * // \n * // \n *\n * @returns {Boolean} validation de la construction de la requete\n */\n processRequestString : function () {\n this.logger.trace(\"WPS::processRequestString ()\");\n\n var template = \"\";\n if (this.method === \"POST\") {\n template = this.template.post.value;\n } else if (this.method === \"GET\") {\n template = this.template.get.value;\n } else {\n this.logger.error(\"No other method supported by the service !\");\n return false;\n }\n\n template = template.replace(/__SERVICE__/g, this.paramservice);\n template = template.replace(/__VERSION__/g, this.paramversion);\n template = template.replace(/__RAWDATAOUTPUT__/g, this.paramrawdataoutput);\n template = template.replace(/__IDENTIFIER__/g, this.paramidentifier);\n template = template.replace(/__REQUEST__/g, this.paramrequest);\n\n // ajout +\n if (this.method === \"POST\") {\n template = template.replace(/__NAMESPACE__/g, this.namespaceByDefault);\n template = template.replace(/__SCHEMALOCATION__/g, this.schemaLocationByDefault);\n }\n\n // ajout des datainputs\n template = template.replace(//g, this.__addDataInputs());\n\n if (!template) {\n this.logger.warn(\"traduction tmpl : empty request !?\");\n return false;\n }\n\n this.requestString = template;\n this.logger.trace(\"traduction tmpl\", template);\n\n return true;\n },\n\n /**\n * Ajout des données\n *\n * @returns {String} Données concaténées dans une chaine\n */\n __addDataInputs : function () {\n this.logger.trace(\"WPS::__addDataInputs ()\");\n\n // c'est un peu grossier...\n var tmpl = this.method === \"GET\" ? this.template.get.input : this.template.post.input;\n var sep = this.method === \"GET\" ? \";\" : \"\";\n\n var result = \"\";\n var that = this;\n var map = this.DataObject.getData();\n for (var i = 0; i < map.length; i++) {\n // FIXME closure ?\n (function (j) {\n if (sep) {\n sep = (j === map.length - 1) ? \"\" : \";\";\n }\n result = result.concat(that.__addDataInput(tmpl, map[j].k, map[j].v), sep);\n })(i);\n }\n\n return result;\n },\n\n /**\n * Ajout d'une donnée.\n *\n * @param {String} tmpl - template\n * @param {String} key - clef\n * @param {String} data - valeur\n * @returns {String} chaine avec les substitutions clef/valeur\n */\n __addDataInput : function (tmpl, key, data) {\n var tmp = tmpl;\n tmp = tmp.replace(/__KEY__/g, key);\n tmp = tmp.replace(/__DATA__/g, data);\n return tmp;\n },\n\n /**\n * Definir le mode de requête\n *\n * @param {String} method - GET|POST\n */\n setMethod : function (method) {\n if (method === \"GET\" || method === \"POST\") {\n this.method = method;\n } else {\n this.logger.warn(\"support only GET and POST method !\");\n }\n },\n\n /**\n * Retourne le mode de requete (GET|POST).\n *\n * @returns {AltiRequest.options.mode|String} methode (GET|POST)\n */\n getMethod : function () {\n return this.method;\n }\n};\n\nexport default WPS;\n","/* global require */\n\nimport Logger from \"../Utils/LoggerByDefault\";\n// import __xmldom from \"xmldom\";\n\n/**\n * @classdesc\n *\n * Classe permettant d'écrire ou de lire du XML, sous forme de document DOM,\n * éventuellement selon des clés de lecture (readers) ou d'écriture (writers) spécifiques.\n *\n * @constructor\n * @alias Gp.Formats.XML\n *\n * @param {Object} [options] - options du format XML\n *\n * @param {Object} [options.reader] - Instance d'un Reader de service (AltiResponseReader, GeocodeRequestReader, etc.)\n * utile pour interpréter le XML lorsque sa structure est connue.\n * Ce reader doit comporter au moins une fonction statique read (root) permettant d'initialiser la lecture.\n *\n * @param {Object} [options.writers] - writers\n *\n * @param {String} [options.xmlString] - chaîne de caractère contenant du XML à interpréter.\n *\n * @private\n */\nfunction XML (options) {\n if (!(this instanceof XML)) {\n throw new TypeError(\"XML constructor cannot be called as a function.\");\n }\n\n // FIXME : notion de singleton\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur XML ()]\");\n\n /**\n * Chaîne de caractères contenant le texte XML\n * @type {String}\n */\n this.xmlString = null;\n\n /**\n * DOM Element correspondant à la structure du XML.\n * @type {DOMElement}\n */\n this.xmlDoc = null;\n\n /**\n * Objet contenant des fonctions de lecture des différentes balises XML.\n * @type {Object}\n */\n this.reader = null;\n\n // traitement des paramètres d'options s'il y en a\n if (options) {\n if (options.xmlString && typeof options.xmlString === \"string\") {\n this.xmlString = options.xmlString;\n // Si une chaine de caractère a été passée en entrée : on la transforme aussi en XML document\n this.xmlDoc = __getXMLDOC(options.xmlString);\n }\n if (options.reader) {\n this.setReader(options.reader);\n }\n }\n}\n\nXML.prototype = {\n\n /**\n * @lends module:XML\n */\n\n /*\n * Constructeur (alias)\n */\n constructor : XML,\n\n /**\n * Méthode permettant de récupérer la chaîne de caractères associée au format XML\n *\n * @returns {String} xmlString - la chaîne de caractères correspondant au format XML\n */\n getXMLString : function () {\n return this.xmlString;\n },\n\n /**\n * Méthode permettant d'attribuer une chaîne de caractères au format XML (attribut xmlString).\n * La méthode va aussi transformer cette chaîne de caractères en document XML,\n * afin de remplir l'attribut xmlDoc.\n *\n * @param {String} xmlString - la chaîne de caractères correspondant au format XML\n */\n setXMLString : function (xmlString) {\n if (xmlString && typeof xmlString === \"string\") {\n this.xmlString = xmlString;\n this.xmlDoc = __getXMLDOC(xmlString);\n }\n },\n\n /**\n * Méthode permettant de récupérer les readers associés au format XML, s'ils ont été définis\n *\n * @return {Object} readers - les readers associés au format XML, s'ils existent,\n * sous forme d'une collection de fonctions\n */\n getReader : function () {\n return this.reader;\n },\n\n /**\n * Méthode permettant d'attribuer des readers, sous la forme d'un objet de fonctions (node, data),\n * lorsqu'ils n'ont pas été définis lors de l'instanciation par exemple (new XML (options)).\n *\n * @param {Object} reader - Instance d'un Reader de service (AltiResponseReader, GeocodeRequestReader, etc.)\n * utile pour interpréter le XML lorsque sa structure est connue.\n * Ce reader doit comporter au moins une fonction statique read (root) permettant d'initialiser la lecture.\n */\n setReader : function (reader) {\n if (reader && reader.read && typeof reader.read === \"function\") {\n this.reader = reader;\n }\n },\n\n /**\n * Méthode permettant de récupérer le document XML associé au format, s'il existe.\n *\n * @return {DOMElement} xmlDoc - le document XML (DOM document node) s'il existe\n */\n getXMLDoc : function () {\n return this.xmlDoc;\n },\n\n /**\n * Setter\n */\n setXMLDoc : function (doc) {\n this.xmlDoc = doc;\n },\n /**\n * Méthode initialisant la lecture du XML, à partir d'un XML Document :\n * création d'un objet JavaScript contenant les informations du XML,\n * sauf dans le cas où il n'existe pas de XML Document à interpréter (retourne un objet vide).\n *\n * @return {Object} [parserOutput] - un objet JavaScript contenant les informations du XML :\n * - soit toutes les informations si aucun reader n'a été spécifié à la création du format\n * - soit les informations spécifiées dans le reader.\n */\n parse : function () {\n // build xml document from xmlString\n if (!this.xmlDoc && this.xmlString) {\n this.xmlDoc = __getXMLDOC(this.xmlString);\n }\n if (this.xmlDoc) {\n var root = __getRootNode(this.xmlDoc);\n if (root) {\n var parserOutput;\n // call reader if exists\n if (this.reader && this.reader.read) {\n parserOutput = this.reader.read(root);\n } else {\n parserOutput = {};\n parserOutput[root.nodeName] = __readDefault(root);\n }\n return parserOutput;\n } else {\n return {};\n }\n }\n }\n\n};\n\n/**\n * Méthode de la classe (privée) permettant de créer un XML Document à partir d'une chaîne de caractères XML,\n * en utilisant DOMParser () lorsque c'est possible.\n * For more information, see: https://dvcs.w3.org/hg/innerhtml/raw-file/tip/index.html#the-domparser-interface\n *\n * @private\n * @memberof XML\n * @method __getXMLDOC\n * @param {String} xmlString - xml string to be converted into DOM element\n * @return {DOMElement} - the corresponding XML Document\n */\nfunction __getXMLDOC (xmlString) {\n if (typeof window === \"undefined\") {\n // env. nodejs\n var DOMParser = require(\"@xmldom/xmldom\").DOMParser; // __xmldom.DOMParser;\n return new DOMParser().parseFromString(xmlString, \"text/xml\");\n } else {\n // env. browser\n\n var parser;\n var xmlDoc;\n var errorMsg = \"Erreur lors du parsing de la réponse du service : XML non conforme\";\n\n if (window.ActiveXObject) {\n // Internet Explorer < 9\n xmlDoc = new window.ActiveXObject(\"Microsoft.XMLDOM\");\n xmlDoc.async = false;\n xmlDoc.loadXML(xmlString);\n var parseError = xmlDoc.parseError;\n if (parseError.errorCode) {\n if (parseError.line && parseError.linepos) {\n errorMsg += \"( ligne \" + parseError.line + \", colonne \" + parseError.linepos;\n }\n if (parseError.reason) {\n errorMsg += \": \" + parseError.reason + \")\";\n }\n throw new Error(errorMsg);\n }\n return xmlDoc;\n } else if (window.DOMParser) {\n // les autres (Chrome, Mozilla, IE >= 9)\n parser = new window.DOMParser();\n try {\n xmlDoc = parser.parseFromString(xmlString, \"text/xml\");\n } catch (e) {\n // Internet Explorer browser raises exception if xmlString is not valid XML\n if (e.message === \"SyntaxError\") {\n throw new Error(errorMsg);\n } else {\n throw new Error(\"Erreur lors du parsing de la réponse du service : \" + e.message);\n }\n }\n // look for parsing error in case no exception was raised\n if (xmlDoc.getElementsByTagName(\"parsererror\").length > 0) {\n var parsererror = xmlDoc.getElementsByTagName(\"parsererror\");\n for (var i = 0; i < parsererror.length; i++) {\n var content = parsererror[i].innerHTML;\n // except in case parsererror is just because of huge xml, but parsing is done.\n if (content.indexOf(\"Huge input lookup\") === -1) {\n errorMsg += \"(\" + content + \")\";\n throw new Error(errorMsg);\n }\n }\n } else if (!xmlDoc.documentElement) { // may happen in chrome browser\n throw new Error(errorMsg);\n }\n return xmlDoc;\n } else {\n // FIXME\n throw new Error(\"Incompatible DOM Parser pour ce navigateur !\");\n }\n }\n}\n\n/**\n * Méthode de la classe (privée) permettant de récupérer le noeud racine du document,\n * à partir d'un document node (nodeType=9), puis lecture de ce noeud (readNode)\n *\n * @private\n * @memberof XML\n * @method __getRootNode\n * @param {DOMElement} [xmlDoc] - a Document Node\n * @return {DOMElement} root - the document root node\n */\nfunction __getRootNode (xmlDoc) {\n var root;\n if (xmlDoc.nodeType === 9) {\n // INFO : nodeType 9 represents the entire document (the root-node of the DOM tree)\n root = xmlDoc.documentElement;\n } else if (xmlDoc.nodeType === 1) {\n root = xmlDoc;\n }\n return root;\n}\n\n/**\n * Méthode de la classe (privée) permettant de lire automatiquement un noeud XML,\n * lorsqu'aucun reader spécifique n'a été spécifié (parser brut)\n *\n * @private\n * @memberof XML\n * @method readDefault\n * @param {DOMElement} node - a DOM element node\n * @example final data object looks like :\n * data = {\n * attributeName: attributeValue,\n * childName: {\n * attributeName: attributeValue,\n * attributeName: attributeValue,\n * childName: {\n * \"textContent\": textContent\n * },\n * childName: {\n * childName: {\n * attributeName:attributeValue\n * }\n * }\n * }\n * }\n */\nfunction __readDefault (node) {\n var data = {};\n\n // if element node has attributes, set their values to data\n if (node.attributes.length > 0) {\n var dataAttributes = __getAttributes(node);\n data[\"attributes\"] = dataAttributes;\n }\n\n // if element node has childNodes, read them and set them to data\n if (node.hasChildNodes()) {\n var childData = {};\n var child;\n var children = node.childNodes;\n\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n\n if (child.nodeType === 3) { // TEXT_NODE\n data[\"textContent\"] = child.nodeValue;\n } else if (child.nodeType === 1) {\n childData = __readDefault(child);\n\n if (!data[child.nodeName]) {\n // store childData in an object\n data[child.nodeName] = childData;\n } else {\n // in case several childNodes has the same name : store them in an array.\n // if data[nodeName] already exists but is not an array\n if (!Array.isArray(data[child.nodeName])) {\n var old = data[child.nodeName];\n data[child.nodeName] = [];\n data[child.nodeName].push(old);\n }\n data[child.nodeName].push(childData);\n }\n }\n // TODO : manage other node types (4=CDATA, etc)\n }\n }\n\n return data;\n}\n\n/**\n * Méthode de la classe (privée) permettant de récupérer les attributs d'un noeud élément\n *\n * @private\n * @memberof XML\n * @method __getAttributes\n * @param {DOMElement} node - noeud contenant l'attribut recherché\n * @return {Object} nodeAttributes - objet contenant les noms et valeurs des différents attributs\n */\nfunction __getAttributes (node) {\n if (node.attributes.length > 0) {\n var nodeAttributes = {};\n var attributes = node.attributes;\n for (var i = 0; i < attributes.length; i++) {\n var attribute = attributes[i];\n nodeAttributes[attribute.nodeName] = attribute.nodeValue;\n }\n return nodeAttributes;\n }\n}\n\nexport default XML;\n","/**\n* Global variable Gp.\n*\n* @module Gp\n* @alias Gp\n* @description\n*\n* This is the global variable that is exposed in the browser environment.\n* Content is composed of constructor, functions and properties...\n*\n* > {@link Gp.Error Error()}\n* - .TYPE_SRVERR : \"SERVICE_ERROR\"\n* - .TYPE_UNKERR : \"UNKNOWN_ERROR\"\n* - .TYPE_USEERR : \"USAGE_ERROR\"\n*\n* > {@link module:Helper Helper}\n* - .indent()\n* - .normalyzeParameters()\n* - .normalyzeUrl()\n*\n* > {@link module:XHR Protocols.XHR}\n* - .call()\n*\n* > {@link module:Services Services (objects)}\n* - .Alti\n* - {@link Gp.Services.Alti.Elevation .Elevation()}\n* - {@link Gp.Services.AltiResponse .AltiResponse()}\n* - .AutoComplete\n* - {@link Gp.Services.AutoComplete.SuggestedLocation .SuggestedLocation()}\n* - {@link Gp.Services.AutoCompleteResponse .AutoCompleteResponse()}\n* - {@link Gp.Services.Config .Config()}\n* - {@link Gp.Services.DefaultUrl .DefaultUrl()}\n* - {@link Gp.Services.GeocodeResponse .GeocodeResponse()}\n* - {@link Gp.Services.GetConfigResponse .GetConfigResponse()}\n* - {@link Gp.Services.IsoCurveResponse .IsoCurveResponse()}\n* - .Route\n* - {@link Gp.Services.Route.RouteInstruction .RouteInstruction()}\n* - {@link Gp.Services.RouteResponse .RouteResponse()}\n*\n* > Services (factory)\n* - {@link module:Services~autoComplete .autoComplete()}\n* - {@link module:Services~geocode .geocode()}\n* - {@link module:Services~getAltitude .getAltitude()}\n* - {@link module:Services~getConfig .getConfig()}\n* - {@link module:Services~isoCurve .isoCurve()}\n* - {@link module:Services~reverseGeocode .reverseGeocode()}\n* - {@link module:Services~route .route()}\n*\n* > servicesDate : \"YYYY-MM-DD\"\n*\n* > servicesVersion : \"X.X.X\"\n*\n*/\n\nimport Services from \"./Services/Services\";\nimport DefaultUrl from \"./Services/DefaultUrlService\";\nimport AltiResponse from \"./Services/Alti/Response/model/AltiResponse\";\nimport Elevation from \"./Services/Alti/Response/model/Elevation\";\nimport AutoCompleteResponse from \"./Services/AutoComplete/Response/model/AutoCompleteResponse\";\nimport SuggestedLocation from \"./Services/AutoComplete/Response/model/SuggestedLocation\";\nimport IsoCurveResponse from \"./Services/ProcessIsoCurve/Response/model/ProcessIsoCurveResponse\";\nimport RouteResponse from \"./Services/Route/Response/model/RouteResponse\";\nimport RouteInstruction from \"./Services/Route/Response/model/RouteInstruction\";\nimport Config from \"./Services/Config/Config\";\nimport XHR from \"./Protocols/XHR\";\nimport Error from \"./Exceptions/ErrorService\";\nimport Helper from \"./Utils/Helper\";\n\nimport Pkg from \"../package.json\";\n\n/** Version */\nexport const servicesVersion = Pkg.version;\n/** Publication date */\nexport const servicesDate = Pkg.date;\n\n// on declare les ns dans root global\nvar Gp = {};\n\nGp.servicesVersion = servicesVersion;\nGp.servicesDate = servicesDate;\n\n// Export Protocols\nGp.Protocols = {};\nGp.Protocols.XHR = XHR;\n// Export services\nGp.Services = Services;\n// Export DefaultUrls\nGp.Services.DefaultUrl = DefaultUrl;\n// Export Alti\nGp.Services.AltiResponse = AltiResponse;\nGp.Services.Alti = {};\nGp.Services.Alti.Elevation = Elevation;\n// Export Autocomplete\nGp.Services.AutoCompleteResponse = AutoCompleteResponse;\nGp.Services.AutoComplete = {};\nGp.Services.AutoComplete.SuggestedLocation = SuggestedLocation;\n// Export Config\nGp.Services.Config = Config;\n// Export IsoCurve\nGp.Services.IsoCurveResponse = IsoCurveResponse;\n// Export Route\nGp.Services.RouteResponse = RouteResponse;\nGp.Services.Route = {};\nGp.Services.Route.RouteInstruction = RouteInstruction;\n// Export Erreurs et Outils\nGp.Error = Error;\nGp.Helper = Helper;\n\nexport default Gp;\n","/**\n * JSONP : Implémentation du protocole JSONP de la plateforme Géoportail\n *\n * @module JSONP\n * @private\n * @alias Gp.Protocols.JSONP\n */\nimport Logger from \"../Utils/LoggerByDefault\";\n\n// cf. https://github.com/sobstel/jsonp.js\nvar JSONP = {\n\n /**\n * Construction d'un identifiant statique basé sur le timestamp,\n * et qui s'incremente de +1 à chaque appel\n */\n uuid : (function () {\n var id = Math.floor(Date.now());\n return function () {\n return id++;\n };\n })(),\n\n /**\n * Cette fonction réalise l'appel du service fourni via le paramètre \"options.url\"\n * en mettant en œuvre le protocole JSONP.\n *\n * @method call\n * @static\n * @param {Object} options - parametres d'invocation du service en JSONP\n * @param {String} options.url - URL du service à invoquer (indépendamment du protocole JSONP).\n * Cette URL contient déjà les paramètres du service.\n * Si le paramètre dédié à la mise en oeuvre du protocole JSONP (callback=xxx) n'est pas présent, il est rajouté par la fonction ;\n * sa valeur est déterminée en fonction du paramètre callbackName.\n * @param {Number} [options.timeOut = 0] - Nombre de ms au bout duquel on considère que le service n'a pas répondu.\n * Une valeur de 0 pour ce paramètre permet de désactiver la gestion du timeOut.\n * @param {String} [options.callbackSuffix = null] - Suffixe de la fonction de callback à rajouter sur l'URL.\n * Si aucun suffixe n'est spécifié (cas par défaut), on utilisera l'identifiant this.uuid () comme suffixe. Ex: \"callback1458574396582 ()\"\n * @param {String} [options.callbackName = gp.protocol.jsonp] - Valeur du paramètre callback à rajouter sur l'URL.\n * Si l'URL fournie contient déjà le paramètre callback, le paramètre callbackName ne sera pas pris en compte.\n * La fonction de callback est créée dynamiquement par la fonction JSONP ;\n * elle a deux fonctions :\n * elle annule la condition de timeOut\n * puis appelle la fonction fournie par l'utilisateur via le paramètre onResponse.\n * @param {Function} options.onResponse - Nom de la fonction qui sera appelée lors de la réception des résultats du service.\n * Ce paramètre sera ignoré si l'URL contient déjà le paramètre callback.\n * La fonction de rappel appelée sera alors celle ayant pour nom la valeur de ce paramètre.\n * @param {Function} [options.onTimeOut] - Nom de la fonction qui sera appelée en cas de non réponse du service.\n * Le temps au bout duquel on considère que le service n'a pas répondu est déterminé par le paramètre timeOut.\n * @example\n * var options = {\n * url : 'http://localhost/some/test.json&callback=myResults',\n * timeOut : 100,\n * callbackName : 'myResults',\n * callbackSuffix : \"\",\n * onResponse : function (response) {\n * console.log('results : ', response);\n * },\n *\n * };\n * JSONP.call(options);\n */\n call : function (options) {\n // logger\n var logger = Logger.getLogger(\"JSONP\");\n logger.trace(\"[JSONP::call ()]\");\n\n // analyse parametres\n\n if (!options) {\n logger.error(\"missing parameter : options !\");\n throw new Error(\"missing parameter : options !\");\n }\n\n if (!options.url) {\n logger.error(\"missing parameter : options.url !\");\n throw new Error(\"missing parameter : options.url !\");\n }\n\n if (!options.timeOut) {\n logger.info(\"setting 'options.timeOut' default value\");\n options.timeOut = 0;\n }\n\n // FIXME si un callback coté client a été mis en place,\n // cette condition sur cette methode n'a pas de sens !?\n if (!options.onResponse) {\n logger.error(\"missing parameter : options.onResponse !\");\n throw new Error(\"missing parameter : options.onResponse !\");\n // FIXME doit on definir un callback interne par defaut !?\n // options.onResponse = function (data) {\n // console.log(\"response callback (inner) : \", data);\n // };\n }\n\n // ID du callback à utiliser : null ou string.\n // si l'utilisateur a spécifié un suffixe pour le callback, on le récupère comme un ID (ex: options.callbackSuffix = \"\")\n // sinon, on utilise un timestamp : this.uuid ()\n var callbackId = (typeof options.callbackSuffix === \"string\") ? options.callbackSuffix : this.uuid();\n\n // on recherche le parametre callback et son nom de fonction dans l'url\n var urlHasCallbackKey = false;\n var urlHasCallbackName = false;\n\n var idx = options.url.indexOf(\"callback=\");\n\n if (idx !== -1) {\n urlHasCallbackKey = true;\n // extraction callbackName de l'url : entre \"callback=\" et \"&\" ou fin de ligne\n var j = options.url.indexOf(\"&\", idx);\n if (j === -1) {\n j = options.url.length;\n }\n\n // on ecrase le parametre options.callbackName s'il avait été défini\n var callbackName = options.url.substring(idx + 9, j);\n\n if (callbackName) {\n urlHasCallbackName = true;\n options.callbackName = callbackName;\n logger.info(\"setting 'options.callbackName' value (\" + options.callbackName + \") from 'options.url' parameter\");\n }\n }\n\n // on ajoute le parametre callback dans l'URL s'il n'existe pas\n if (!urlHasCallbackKey) {\n // gestion des autres param. et \"?\"\n var k = options.url.indexOf(\"?\");\n if (k === -1) {\n // aucun param., ni de '?'\n options.url = options.url + \"?\" + \"callback=\";\n } else if (k === options.url.length) {\n // uniquement le '?'\n options.url = options.url + \"callback=\";\n } else {\n // le '?' et les param. existent\n options.url = options.url + \"&\" + \"callback=\";\n }\n logger.info(\"setting callback default key in 'options.url' : \" + options.url);\n }\n\n // utilisation de la fonction callback coté client ?\n var HasCallbackName = options.callbackName ? true : urlHasCallbackName;\n\n // on ajoute le nom de la fonction callback dans l'URL si elle n'existe pas\n if (!urlHasCallbackName) {\n // fonction callback par defaut\n if (!options.callbackName) {\n logger.info(\"setting 'options.callbackName' default value\");\n options.callbackName = \"callback\"; // ou \"gp.protocol.jsonp\" ?\n // info : si on ne veut pas gerer d'ID dans le callback,\n // options.callbackSuffix = \"\"\n if (callbackId || callbackId === \"\") {\n options.callbackName += callbackId;\n }\n }\n options.url = options.url.replace(\"callback=\", \"callback=\" + options.callbackName);\n logger.info(\"setting callback function name in 'options.url' : \" + options.url);\n }\n\n // timeOut par defaut\n if (!options.onTimeOut) {\n logger.info(\"setting 'options.onTimeOut' default value\");\n /** callback timeout par defaut */\n options.onTimeOut = function (/* error */) {\n console.log(\"TimeOut while invoking url : \" + options.url);\n };\n }\n\n if (!HasCallbackName) {\n var self = this;\n\n // event du timeout\n var onTimeOutTrigger = null;\n\n // declenche le timeout si > à 0 !\n if (options.timeOut > 0) {\n onTimeOutTrigger = window.setTimeout(\n function () {\n /** fonction de reponse du service */\n window[options.callbackName] = function () {};\n options.onTimeOut();\n self._deleteScript(callbackId);\n }, options.timeOut);\n }\n\n // FIXME le nom de la fonction n'accepte pas de namespace !\n // ex. Gp.Function.callback\n /**\n * fonction de reponse du service\n * @param {Object} data - data\n * @private\n */\n window[options.callbackName] = function (data) {\n window.clearTimeout(onTimeOutTrigger);\n options.onResponse(data);\n self._deleteScript(callbackId);\n };\n }\n\n this._createScript(callbackId, options.url);\n },\n\n /**\n * create Script\n * @param {String} callbackId - callback Id\n * @param {String} url - url\n * @private\n */\n _createScript : function (callbackId, url) {\n var scriptu;\n var scripto = document.getElementById(\"results\" + callbackId);\n\n scriptu = document.createElement(\"script\");\n scriptu.setAttribute(\"type\", \"text/javascript\");\n scriptu.setAttribute(\"src\", url);\n scriptu.setAttribute(\"charset\", \"UTF-8\");\n scriptu.setAttribute(\"id\", \"results\" + callbackId);\n scriptu.setAttribute(\"async\", \"true\"); // FIXME async ?\n // head ou body ou autres ?\n var node = document.documentElement || document.getElementsByTagName(\"head\")[0];\n if (scripto === null) {\n node.appendChild(scriptu);\n } else {\n // s'il existe déjà, on le remplace !\n node.replaceChild(scriptu, scripto);\n }\n },\n\n /**\n * delete Script\n * @param {String} callbackId - callback Id\n * @private\n */\n _deleteScript : function (callbackId) {\n var script = document.getElementById(\"results\" + callbackId);\n if (script) {\n var node = script.parentNode || document.documentElement;\n if (!node) {\n return;\n }\n node.removeChild(script);\n }\n }\n};\n\nexport default JSONP;\n","/**\n * Interface de dialogue avec les webservices\n *\n * @module Protocols\n * @private\n * @alias Gp.Protocols\n */\nimport Helper from \"../Utils/Helper\";\nimport XHR from \"./XHR\";\nimport JSONP from \"./JSONP\";\n\nvar Protocol = {\n\n /**\n * Interface unique d\"envoi d\"une requête.\n *\n * @method send\n * @static\n * @param {Object} options - options generales\n * @param {String} options.url - url du service\n * @param {String} options.method - GET, POST, PUT, DELETE\n * @param {String} options.protocol - XHR | JSONP\n * @param {String} options.format - format de la reponse du service : json, xml ou null (brute)...\n * @param {String} options.wrap - encapsuler la reponse du service dans du JSON : true|false (true par defaut sur le protocole JSONP)\n * @param {String} options.callbackSuffix - suffixe de la fonction de callback (JSONP uniquement) (ex: si callbackSuffix=\"\", la fonction s'appellera \"callback\")\n * @param {String} options.timeOut - 0 ms\n * @param {Boolean} options.nocache - true|false\n * @param {Object|String} options.data - content (post) ou param (get)\n * @param {Object|String} options.headers - (post) ex. referer\n * @param {Object|String} options.content - (post) ex. \"application/json\"\n * @param {String} options.scope - this (TODO)\n * @param {Function} options.onResponse - callback\n * @param {Function} options.onFailure - callback\n * @param {Function} options.onTimeOut - callback\n * @param {String} options.proxyUrl - (TODO)\n */\n send : function (options) {\n // INFO\n // \"output\" - param est interne à la classe \"Protocol\" (parametrable via \"wrap\"), et à ajouter à l\"url\n // ce param est independant du service car il est géré par le filtre LUA :\n // ex. json|xml (json par defaut).\n // Ce param. permet d\"encapsuler du XML dans du JSON :\n // {http : {status:200, error:null},xml :\"réponse du service\"}\n // Utile pour les services qui ne repondent que du XML (ex. Geocodage)\n //\n // |-------------------------------------------------|\n // | \\service | | | |\n // | output\\ format| json | xml | remarques |\n // |--------\\------|------|-----|--------------------|\n // | json | json | json| json/xml encapsulé |\n // | xml | json | xml | param inactif |\n // |-------------------------------------------------|\n // ex. le service demande une reponse native au \"format\" json et avec un \"output\" json.\n // on a donc une reponse json encapsulé dans un json : ce qu'on ne souhaite pas !\n // dans ce cas on ne renseigne pas output=json\n\n // INFO\n // \"wrap\" - choix d\"encapsuler ou non les reponses dans du JSON.\n // Par defaut, on encapsule uniquement les reponses sur le protocole JSONP (et qui sont en xml) !\n\n // INFO\n // \"callback\" - param est interne à la classe \"Protocol\" (non parametrable), et à ajouter à l\"url\n // ce param est independant du service car il est géré aussi par le filtre LUA :\n // ex. callback|null\n // Ce param. permet de renvoyer une reponse javascript :\n // callback ({http : {status:200, error:null},xml :\"réponse du service\"})\n // Ce param. est non renseigné par defaut car pour du JSONP, on utilise le\n // le protocol JSONP, et ce dernier implemente déjà le callback !\n\n // settings par defaut\n var settings = options || {\n method : \"GET\",\n // protocol : \"JSONP\",\n protocol : \"XHR\",\n timeOut : 0,\n format : null,\n wrap : true,\n nocache : true,\n output : \"json\",\n callback : null,\n callbackSuffix : null\n };\n\n // on determine l'environnement d'execution : browser ou non ?\n // et on stoppe pour nodeJS... sur un protocole JSONP !\n if (typeof window === \"undefined\" && options.protocol === \"JSONP\") {\n console.log(\"Value (s) for parameter (s) 'protocol=JSONP (instead use XHR)' not supported to NodeJS\");\n return;\n }\n\n if (options.protocol === \"XHR\" || options.format === \"json\") {\n settings.wrap = false;\n } else if (options.protocol === \"JSONP\" && options.format === \"xml\") {\n settings.wrap = true;\n }\n\n settings.callback = null; // FIXME non géré !?\n settings.output = settings.wrap ? \"json\" : null;\n\n // on encapsule les reponses dans un objet JSON\n if (settings.wrap) {\n var params = {};\n params.output = settings.output;\n params.callback = settings.callback;\n delete params.callback; // FIXME non géré !?\n settings.url = Helper.normalyzeUrl(options.url, params);\n }\n\n // choix de l\"implementation :\n // XHR ou JSONP\n switch (settings.protocol) {\n case \"XHR\":\n // on normalise l'url (gestion du cache)\n if (options.method === \"GET\" && options.nocache) {\n settings.url = Helper.normalyzeUrl(settings.url, {\n t : new Date().getTime()\n });\n }\n // appel du service en XHR\n XHR.call(settings);\n break;\n case \"JSONP\":\n\n // on normalise l'url si les params. sont renseignés dans la string|object \"data\"\n if (settings.data) {\n settings.url = Helper.normalyzeUrl(settings.url, settings.data);\n }\n\n // appel du service en JSONP\n JSONP.call(settings);\n break;\n default:\n throw new Error(\"protocol not supported (XHR|JSONP) !\");\n }\n }\n\n};\n\nexport default Protocol;\n","/* global Promise, require, XDomainRequest */\n\nimport Logger from \"../Utils/LoggerByDefault\";\nimport Helper from \"../Utils/Helper\";\nimport ES6Promise from \"es6-promise\";\n// import __request from \"request\";\n// import __xmldom from \"xmldom\";\n\n/**\n * Ajax Request (use of Promises)\n *\n * @module XHR\n * @alias Gp.Protocols.XHR\n * @see dependance 'es6-promise'\n */\n\n// cf. https://xhr.spec.whatwg.org/\n// cf. https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest\n\nvar XHR = {\n\n /**\n * Interface unique d'envoi d'une requête.\n *\n * @method call\n * @static\n * @param {Object} settings - options generales\n * @param {String} settings.url - url du service\n * @param {String} settings.method - GET, POST, PUT, DELETE\n * @param {String} settings.format - format de la reponse du service : json, xml ou null (brute)\n * @param {String} settings.data - content (post) ou param (get)\n * @param {String} settings.proxy - proxy url\n * @param {Object|String} settings.headers - (post) ex. referer\n * @param {Object|String} settings.content - (post) ex. 'application/json'\n * @param {String} settings.timeOut - timeout = 0 par defaut\n * @param {String} settings.scope - this\n * @param {Function} settings.onResponse - callback\n * @param {Function} settings.onFailure - callback\n */\n call : function (settings) {\n // logger\n var logger = Logger.getLogger(\"XHR\");\n logger.trace(\"[XHR::call()]\");\n\n // FIXME\n // To polyfill the global environment\n ES6Promise.polyfill();\n\n // test sur les settings obligatoires\n if (!settings.url) {\n throw new Error(\"missing parameter : url is not defined !\");\n }\n\n if (!settings.method) {\n throw new Error(\"missing parameter : method is not defined !\");\n }\n\n if (!settings.format) {\n settings.format = \"text\"; // reponse brute !\n }\n\n var options = {};\n options.url = settings.url;\n options.data = settings.data ? settings.data : null;\n options.method = settings.method;\n options.timeOut = settings.timeOut || 0;\n options.scope = settings.scope || this;\n options.proxy = settings.proxy || null;\n options.content = settings.content || null;\n options.headers = settings.headers || {\n referer : \"http://localhost\"\n };\n\n // test sur les valeurs de 'settings.method'\n switch (settings.method) {\n case \"DELETE\":\n case \"GET\":\n break;\n case \"PUT\":\n case \"POST\":\n // on force sur ces params spécifiques au mode POST\n options.content = settings.content ? settings.content : \"application/x-www-form-urlencoded\"; // FIXME en attente des services : bascule en \"application/xml\" ou \"application/json\"\n options.headers = settings.headers ? settings.headers : { referer : \"http://localhost\" }; // FIXME parametrable...\n break;\n case \"HEAD\":\n case \"OPTIONS\":\n throw new Error(\"HTTP method not yet supported !\");\n default:\n throw new Error(\"HTTP method unknown !\");\n }\n\n // test sur les valeurs de 'settings.format'\n switch (settings.format) {\n case \"text\":\n this.__call(options)\n .then(function (response) {\n logger.trace(response);\n settings.onResponse.call(this, response);\n })\n .catch(function (error) {\n settings.onFailure.call(this, error);\n });\n break;\n case \"json\":\n this.__callJSON(options)\n .then(function (response) {\n logger.trace(response);\n settings.onResponse.call(this, response);\n })\n .catch(function (error) {\n settings.onFailure.call(this, error);\n });\n break;\n case \"xml\":\n this.__callXML(options)\n .then(function (response) {\n logger.trace(response);\n settings.onResponse.call(this, response);\n })\n .catch(function (error) {\n settings.onFailure.call(this, error);\n });\n break;\n default:\n throw new Error(\"This output Format is not yet supported !\");\n }\n },\n\n /**\n * Requete\n *\n * @method __call\n * @private\n * @param {Object} options - options\n * @return {Object} promise\n */\n __call : function (options) {\n var logger = Logger.getLogger(\"XHR\");\n logger.trace(\"[XHR::__call()]\");\n\n var promise = new Promise(\n function (resolve, reject) {\n // traitement du corps de la requête\n var corps = (options.method === \"POST\" || options.method === \"PUT\") ? 1 : 0;\n\n // seulement si options.data n'est pas vide (peut être un objet ou une chaine de caractères)\n if (options.data && ((typeof options.data === \"object\" && Object.keys(options.data).length) || (typeof options.data === \"string\" && options.data.length)) && !corps) {\n options.url = Helper.normalyzeUrl(options.url, options.data);\n }\n\n logger.trace(\"URL = \", options.url);\n\n var hXHR = null;\n\n // test on env. nodejs or browser\n if (typeof window === \"undefined\") {\n var nodefetch = require(\"node-fetch\");\n\n var opts = {\n headers : {\n Referer : \"https://localhost\"\n }\n };\n\n if (options.data && typeof options.data === \"string\" && corps) {\n opts = {\n method : options.method,\n body : options.data,\n headers : {\n \"Content-Type\" : options.content,\n Referer : \"https://localhost\"\n }\n };\n }\n\n return nodefetch(options.url, opts)\n .then(function (response) {\n if (response.ok) { // res.status >= 200 && res.status < 300\n resolve(response.text());\n } else {\n var message = \"Errors Occured on Http Request (status : '\" + response.statusText + \"' | url : '\" + response.url + \"')\";\n var status = response.status;\n reject({\n message : message,\n status : status\n });\n }\n })\n .catch(function (e) {\n reject({\n message : e,\n status : -1\n });\n });\n } else {\n if (window.XMLHttpRequest) {\n logger.trace(\"XMLHttpRequest\");\n\n hXHR = new XMLHttpRequest();\n hXHR.open(options.method, options.url, true); // async\n hXHR.overrideMimeType = options.content;\n\n // gestion du timeout\n var onTimeOutTrigger = null;\n if (options.timeOut > 0) {\n // FIXME le timeout interne ne me permet pas de declencher le bon message...\n // hXHR.timeout = options.timeOut;\n logger.trace(\"XHR - TimeOut actif !\");\n /**\n * Description\n *\n * @method onTimeOutTrigger\n * @private\n */\n onTimeOutTrigger = window.setTimeout(\n function () {\n var message = \"TimeOut Occured on Http Request with XMLHttpRequest !\";\n reject({\n message : message,\n status : -1\n });\n }, options.timeOut);\n }\n\n if (corps) {\n // headers, data, content of data\n // cf. https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-setrequestheader\n logger.trace(\"data = \", options.data);\n hXHR.setRequestHeader(\"Content-type\", options.content);\n // FIXME refused to set unsafe header content-length javascript\n // hXHR.setRequestHeader (\"Content-length\", options.data.length);\n // hXHR.setRequestHeader (\"Referer\", options.headers.referer);\n }\n\n /**\n * On Error\n * FIXME ne se declenche pas !?\n *\n * @param {Object} e - Event\n * @method onerror\n * @private\n */\n hXHR.onerror = function (e) {\n console.log(e);\n reject(new Error(\"Errors Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * On Timeout\n * FIXME ne se declenche pas !?\n *\n * @param {Object} e - Event\n * @method ontimeout\n * @private\n */\n hXHR.ontimeout = function (e) {\n console.log(e);\n reject(new Error(\"TimeOut Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * Description\n *\n * @method onreadystatechange\n * @private\n */\n hXHR.onreadystatechange = function (e) {\n if (hXHR.readyState === 4) { // DONE\n if (hXHR.status === 200) {\n window.clearTimeout(onTimeOutTrigger);\n resolve(hXHR.response);\n } else {\n var message = \"Errors Occured on Http Request (status : '\" + e.target.statusText + \"' | url : '\" + e.target.responseURL + \"' | response : '\" + e.target.response + \"')\";\n var status = e.target.status;\n reject({\n message : message,\n status : status\n });\n }\n }\n };\n\n // gestion du content data\n var data4xhr = (options.data && corps) ? options.data : null;\n\n hXHR.send(data4xhr);\n } else if (window.XDomainRequest) {\n // worked in Internet Explorer 8–10 only !\n logger.trace(\"XDomainRequest\");\n\n hXHR = new XDomainRequest();\n hXHR.open(options.method, options.url);\n\n hXHR.overrideMimeType = options.content;\n\n if (options.timeOut > 0) {\n hXHR.timeout = options.timeout;\n logger.trace(\"XHR - TimeOut actif !\");\n }\n\n if (corps) {\n // headers, data, content of data\n // cf. https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-setrequestheader\n hXHR.setRequestHeader(\"Content-type\", options.content);\n // FIXME refused to set unsafe header content-length javascript\n // hXHR.setRequestHeader (\"Content-length\", options.data.length);\n // hXHR.setRequestHeader (\"Referer\", options.headers.referer);\n }\n\n /**\n * Description\n *\n * @method onerror\n * @private\n */\n hXHR.onerror = function () {\n reject(new Error(\"Errors Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * Description\n *\n * @method ontimeout\n * @private\n */\n hXHR.ontimeout = function () {\n reject(new Error(\"TimeOut Occured on Http Request with XMLHttpRequest !\"));\n };\n\n /**\n * On Load\n *\n * @method onload\n * @private\n */\n hXHR.onload = function (e) {\n if (hXHR.status === 200) {\n resolve(hXHR.responseText);\n } else {\n var message = \"Errors Occured on Http Request (status : '\" + e.target.statusText + \"' | url : '\" + e.target.responseURL + \"')\";\n var status = e.target.status;\n reject({\n message : message,\n status : status\n });\n }\n };\n\n var data4xdr = (options.data && corps) ? options.data : null;\n\n hXHR.send(data4xdr);\n } else {\n throw new Error(\"CORS not supported\");\n }\n }\n }\n );\n\n return promise;\n },\n\n /**\n * Requete avec parser JSON\n *\n * @method __callJSON\n * @private\n * @param {Object} options - options\n * @return {Object} promise\n */\n __callJSON : function (options) {\n return this.__call(options)\n .then(JSON.parse)\n .catch(function (error) {\n console.log(\"_callJSON failed on : \", options.url, error);\n // FIXME pas d'exception, laissons le fil se derouler...\n // throw error;\n });\n },\n\n /**\n * Requete avec parser XML\n *\n * @method __callXML\n * @private\n * @param {Object} options - options\n * @return {Object} promise\n */\n __callXML : function (options) {\n return this.__call(options)\n .then(function (response) {\n var xmlDoc;\n\n // test on env. nodejs or browser\n if (typeof window === \"undefined\") {\n var DOMParser = require(\"@xmldom/xmldom\").DOMParser; // __xmldom.DOMParser\n xmlDoc = new DOMParser().parseFromString(response, \"text/xml\");\n } else {\n if (window.DOMParser) {\n var parser = new window.DOMParser();\n xmlDoc = parser.parseFromString(response, \"text/xml\");\n } else { // IE\n xmlDoc = new window.ActiveXObject(\"Microsoft.XMLDOM\");\n xmlDoc.async = false;\n xmlDoc.loadXML(response);\n }\n }\n\n return xmlDoc;\n })\n .catch(function (error) {\n console.log(\"__callXML failed on : \", options.url, error);\n // FIXME pas d'exception, laissons le fil se derouler...\n // throw error;\n });\n }\n\n};\n\nexport default XHR;\n","\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport AltiRequestFactory from \"./Request/AltiRequestFactory\";\nimport AltiResponseFactory from \"./Response/AltiResponseFactory\";\n\n/**\n * @classdesc\n *\n * Appel du service d'altimétrie du Géoportail\n *\n * @todo gestion du parma. output et callback\n * @todo outputFormat (REST) et format (WPS)\n * @todo La reponse JSON peut encapsuler un XML !\n *\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.Alti\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {Array.} options.positions - Tableau ({lon:float,lat:float}) contenant les coordonnées des points (CRS:84)\n * dont on veut connaître les altitudes (ou à partir desquelles on va calculer le profil).\n * Chaque élément du tableau est un objet JavaScript avec deux attributs : lon et lat, qui sont des flottants.\n * Minimum 2 éléments si on souhaite calculer un profil altimétrique (ElevationLine).\n * Maximum 50 éléments.\n *\n * @param {String} options.outputFormat - Le format de la réponse du service alti : 'xml' ou 'json'.\n * Ce paramètre déterminera l'extension '.xml' ou '.json' du service dans le cas de l'API REST,\n * ou la valeur du paramètre 'format' dans le cas de la norme WPS.\n * Nécessaire si serverUrl est renseigné, et qu'on souhaite passer par l'API REST,\n * pour connaître le format dans lequel sera fournie la réponse (pour son traitement).\n * Non nécessaire pour la norme WPS. Par défaut, ce paramètre vaut 'json'.\n *\n * @param {Number} [options.sampling] - Nombre de points à utiliser pour déterminer le tracé d'un profil altimétrique, compris entre 2 et 5000.\n * A spécifier lorsqu'on souhaite accéder à cette fonctionnalité.\n * Dans ce cas, les points fournis en entrée (au minimum de deux) servent à déterminer l'axe planimétrique\n * le long duquel le profil doit être calculé.\n * Si le paramètre sampling n'est pas spécifié ou moins de deux points sont fournis,\n * c'est le service Elevation qui sera interrogé (altitudes simples calculées pour les points fournis).\n * Une valeur de sampling strictement inférieure à 2 déclenchera un échantillonnage avec la valeur par défaut du service (3 points).\n *\n * @param {String} [options.api] - Manière d'accéder au service : 'REST' (via l'API REST) ou 'WPS' (via la norme WPS).\n * Par défaut, on utilise l'API REST.\n *\n * @param {Boolean} [options.zonly] - Permet de ne récupérer que les altitudes en sortie s'il vaut 'true'.\n * Vaut 'false' par défaut.\n *\n * @param {String} [options.resource] - Resource utilisée pour réaliser le calcul.\n *\n * @example\n * var options = {\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * positions : [{lon:, lat:}, {lon:, lat:}],\n * outputFormat : 'json' // json|xml\n * sampling : 3,\n * api : 'REST', // REST|WPS\n * zonly : false // false|true,\n * resource : \"resource-par-defaut\"\n * };\n *\n */\nfunction Alti (options) {\n if (!(this instanceof Alti)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"Alti\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"Alti\";\n\n // appel du constructeur par heritage\n CommonService.apply(this, arguments);\n\n this.logger = Logger.getLogger(\"Gp.Services.Alti\");\n this.logger.trace(\"[Constructeur Alti (options)]\");\n\n // #####################\n // analyse des options\n // #####################\n\n if (!options.positions) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"positions\"));\n }\n\n if (options.positions.length === 0) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"positions\"));\n }\n\n // ajout des options spécifiques au service\n this.options.positions = options.positions;\n\n // format de réponse du service : \"json\" ou \"xml\" (valeur par défaut), en minuscule !\n this.options.outputFormat = (typeof options.outputFormat === \"string\") ? options.outputFormat.toLowerCase() : \"xml\";\n\n // ressource utilisée pour le calcul altimétrique\n this.options.resource = options.resource || \"ign_rge_alti_wld\";\n\n // sampling\n this.options.sampling = options.sampling || null;\n\n // type d'api utilisé pour requeter le service, en majuscule !\n this.options.api = (typeof options.api === \"string\") ? options.api.toUpperCase() : \"REST\";\n\n // l'api ne peut être interrogée qu'en GET.\n if (this.options.api === \"REST\") {\n this.options.httpMethod = \"GET\";\n }\n\n // param. zonly\n this.options.zonly = options.zonly || false;\n\n // param. measures\n this.options.measures = options.measures || false;\n\n // gestion de l'url du service par defaut\n // si l'url n'est pas renseignée, il faut utiliser les urls par defaut\n // en fonction du type d'api, REST ou WPS, du format de reponse demandé (outputFormat)\n // ainsi que sur le type de service (profil ou elevation)\n if (!this.options.serverUrl) {\n var lstUrlByDefault = DefaultUrlService.Alti.newUrl();\n var urlFound = null;\n switch (this.options.api) {\n case \"WPS\":\n urlFound = lstUrlByDefault.wps;\n break;\n case \"REST\":\n var key = (options.sampling ? \"profil\" : \"elevation\") + \"-\" + this.options.outputFormat;\n urlFound = lstUrlByDefault[key];\n break;\n default:\n throw new Error(_.getMessage(\"PARAM_UNKNOWN\", \"api\"));\n }\n\n if (!urlFound) {\n throw new Error(\"Url by default not found !\");\n }\n this.options.serverUrl = urlFound;\n this.logger.trace(\"Server URL by default : \" + this.options.serverUrl);\n }\n\n // gestion du type de service\n // si l'extension de l'url est .json ou .xml, on surcharge le format de sortie (outputFormat)\n var idx = this.options.serverUrl.lastIndexOf(\".\");\n if (idx !== -1) {\n var extension = this.options.serverUrl.substring(idx + 1);\n if (extension && extension.length < 5) { // FIXME extension de moins de 4 car. ...\n this.logger.trace(\"Server Extension URL : \" + extension);\n switch (extension.toLowerCase()) {\n case \"json\":\n case \"xml\":\n this.options.outputFormat = extension.toLowerCase();\n break;\n default:\n throw new Error(\"type of service : unknown or unsupported (json or xml) !\");\n }\n }\n }\n}\n\n/**\n * @lends module:Alti#\n */\nAlti.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/**\n * Constructeur (alias)\n */\nAlti.prototype.constructor = Alti;\n\n/**\n * Création de la requête (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nAlti.prototype.buildRequest = function (error, success) {\n // utilisation en mode callback\n var options = {\n httpMethod : this.options.httpMethod,\n // callback\n onSuccess : function (result) {\n // sauvegarde de la requete !\n this.request = result;\n success.call(this, this.request);\n },\n onError : error,\n scope : this,\n // spécifique au service :\n resource : this.options.resource,\n positions : this.options.positions,\n outputFormat : this.options.outputFormat,\n sampling : this.options.sampling,\n api : this.options.api,\n zonly : this.options.zonly,\n measures : this.options.measures\n };\n\n AltiRequestFactory.build(options);\n};\n\n/**\n * Analyse de la reponse (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nAlti.prototype.analyzeResponse = function (error, success) {\n // INFO\n // Factory pour masquer la complexité du retour du service qui renvoie soit\n // - une 'string' qui contient du XML ou JSON natif en mode XHR\n // - un objet JSON qui est natif ou encapsulé\n\n if (this.response) {\n var options = {\n response : this.response,\n outputFormat : this.options.outputFormat, // utile pour parser la string en mode XHR : JSON ou XML !\n rawResponse : this.options.rawResponse,\n onError : error,\n onSuccess : success,\n scope : this\n };\n\n AltiResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default Alti;\n","\n/**\n * Fonction retournant un objet contenant des clés de lecture (readers)\n * qui permettent de parser des réponses XML du service Altimétrique du Géoportail\n * (calcul altimétrique simple ou profil altimétrique d'une courbe),\n * lorsque le paramètre output = xml,\n * afin de récupérer les élévations retournées.\n *\n * @module AltiResponseReader\n * @alias Gp.Services.Alti.Formats.AltiResponseReader\n * @private\n */\n\n// import Logger from \"../../../Utils/LoggerByDefault\";\nimport AltiResponse from \"../Response/model/AltiResponse\";\nimport Elevation from \"../Response/model/Elevation\";\nimport Measure from \"../Response/model/Measure\";\n\n/**\n *\n * Objet AltiResponseReader\n *\n * @member {Object} AltiResponseReader\n *\n * @property {Object} AltiResponseReader.READERS - Objet contenant des fonctions de lecture, appelées \"readers\"\n * dont chaque clé correspond au nom d'un tag du XML que l'on souhaite lire\n * et la valeur associée est une fonction (node, data)\n * où node est un noeud du document DOM\n * et data est un objet où l'on stocke les informations lues dans le XML.\n *\n * @property {Method} AltiResponseReader.READERS.elevations - Lecture d'un noeud \"elevations\" de la réponse XML\n * du service alti, correspondant logiquement à la racine du document\n * (contient un ou plusieurs childNodes correspondant chacun à une élévation retournée)\n *\n * @property {Method} AltiResponseReader.READERS.elevation - Lecture d'un noeud \"elevation\" de la réponse xml du service alti.\n * (contient un ou 4 childNode (s) correspondant à l'altitude (z) et éventuellement lat, lon, et acc)\n *\n * @property {Method} AltiResponseReader.READERS.lat - Lecture d'un noeud \"lat\" de la réponse xml du service alti.\n * (contient une valeur de latitude, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.lon - Lecture d'un noeud \"lon\" de la réponse xml du service alti.\n * (contient une valeur de longitude, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.z - Lecture d'un noeud \"z\" de la réponse xml du service alti.\n * (contient une valeur d'altitude, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.acc - Lecture d'un noeud \"acc\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.measures - Lecture d'un noeud \"measures\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @property {Method} AltiResponseReader.READERS.source_name - Lecture d'un noeud \"source_name\" de la réponse xml du service alti.\n * (pour remplir l'éventuel objet measure)\n *\n * @property {Method} AltiResponseReader.READERS.source_mesure - Lecture d'un noeud \"source_mesure\" de la réponse xml du service alti.\n * (pour remplir l'éventuel objet measure)\n *\n * @property {Method} AltiResponseReader.READERS.exceptionreport - Lecture d'un noeud \"ExceptionReport\" de la réponse xml du service alti.\n *\n * @property {Method} AltiResponseReader.READERS.exception - Lecture d'un noeud \"Exception\" de la réponse xml du service alti.\n *\n * @property {Method} AltiResponseReader.read - Méthode permettant de lancer la lecture d'une réponse XML du service altimétrique,\n * à l'aide des readers de la classe.\n *\n */\nvar AltiResponseReader = {};\n\nAltiResponseReader.READERS = {\n\n /**\n * Lecture d'un noeud \"elevations\" de la réponse XML du service alti, correspondant logiquement à la racine du document\n * (contient un ou plusieurs childNodes correspondant chacun à une élévation retournée)\n *\n * @param {DOMElement} root - racine de la réponse XML\n * @static\n * @memberof AltiResponseReader\n * @returns {Object} Retourne un objet de type AltiResponse\n */\n elevations : function (root) {\n // INFO : on passe en paramètre l'objet en entrée elevations, vide, à remplir.\n var altiResponse = new AltiResponse();\n\n if (root.hasChildNodes()) {\n var children = root.childNodes;\n var child;\n var elevation;\n\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n\n if (AltiResponseReader.READERS[child.nodeName]) {\n elevation = AltiResponseReader.READERS[child.nodeName](child);\n altiResponse.elevations.push(elevation);\n }\n }\n }\n\n return altiResponse;\n },\n\n /**\n * Lecture d'un noeud \"elevation\" de la réponse xml du service alti.\n * (contient un ou 5 childNode (s) correspondant à l'altitude (z) et éventuellement lat, lon, acc et measures)\n *\n * @param {DOMElement} node - noeud elevation à lire pour récupérer les informations de l'élévation retournée (z [, lon, lat, acc, measures])\n * @return {Array} elevationResponse - format de la réponse en sortie, instance de AltiResponse\n * @static\n * @memberof AltiResponseReader\n */\n elevation : function (node) {\n var elevation = new Elevation();\n\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (AltiResponseReader.READERS[child.nodeName]) {\n // INFO : on passe en paramètre l'objet en entrée elevation, vide, à remplir.\n AltiResponseReader.READERS[child.nodeName](child, elevation);\n }\n }\n }\n return elevation;\n },\n\n /**\n * Lecture d'un noeud \"lat\" de la réponse xml du service alti.\n * (contient une valeur de latitude, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la latitude\n * @param {Object} elevation - objet dans lequel stocker la latitude retournée\n * @static\n * @memberof AltiResponseReader\n */\n lat : function (node, elevation) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n elevation.lat = parseFloat(textNode.nodeValue);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : latitude attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"lon\" de la réponse xml du service alti.\n * (contient une valeur de longitude, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la longitude\n * @param {Object} elevation - objet dans lequel stocker la longitude retournée\n * @static\n * @memberof AltiResponseReader\n */\n lon : function (node, elevation) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n elevation.lon = parseFloat(textNode.nodeValue);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : longitude attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"z\" de la réponse xml du service alti.\n * (contient une valeur d'altitude, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'altitude\n * @param {Object} elevationObject - objet dans lequel stocker l'altitude retournée : elevation ou measure\n * @static\n * @memberof AltiResponseReader\n */\n z : function (node, elevationObject) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n if (elevationObject) {\n elevationObject.z = parseFloat(textNode.nodeValue);\n } else {\n elevationObject = new Elevation();\n elevationObject.z = parseFloat(textNode.nodeValue);\n return elevationObject;\n }\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : altitude attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"acc\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} elevationObject - objet dans lequel stocker la précision retournée : elevation ou measure\n * @static\n * @memberof AltiResponseReader\n */\n acc : function (node, elevationObject) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n elevationObject.acc = parseFloat(textNode.nodeValue);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : précision (acc) attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"source_name\" de la réponse xml du service alti.\n * (contient le nom de la source, qui est un string)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} measure - objet dans lequel stocker le nom de la source retourné\n * @static\n * @memberof AltiResponseReader\n */\n source_name : function (node, measure) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n measure.source_name = textNode.nodeValue;\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : source_name attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"source_measure\" de la réponse xml du service alti.\n * (contient le nom de la mesure, qui est un string)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} measure - objet dans lequel stocker le nom de la source retourné\n * @static\n * @memberof AltiResponseReader\n */\n source_measure : function (node, measure) {\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n measure.source_measure = textNode.nodeValue;\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : source_measure attendue mais absente\");\n }\n },\n\n /**\n * Lecture d'un noeud \"measures\" et de ses enfants \"measure\" de la réponse xml du service alti.\n * (contient une valeur de précision, qui est un flottant)\n *\n * @param {DOMElement} node - noeud à lire pour récupérer la précision\n * @param {Object} elevation - objet dans lequel stocker la précision retournée\n * @static\n * @memberof AltiResponseReader\n */\n measures : function (node, elevation) {\n elevation.measures = [];\n var measure;\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var measureNode;\n var measureChildren;\n for (var i = 0; i < children.length; i++) {\n measure = new Measure();\n measureNode = children[i];\n measureChildren = measureNode.childNodes;\n for (var j = 0; j < measureChildren.length; j++) {\n if (AltiResponseReader.READERS[measureChildren[j].nodeName]) {\n // INFO : on passe en paramètre l'objet en entrée elevation, vide, à remplir.\n AltiResponseReader.READERS[measureChildren[j].nodeName](measureChildren[j], measure);\n } else {\n throw new Error(\"Erreur dans la lecture de la réponse du service : measures attendues mais absentes\");\n }\n }\n elevation.measures.push(measure);\n }\n }\n },\n\n /**\n * Lecture d'un noeud \"ExceptionReport\" de la réponse xml du service alti.\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'exception\n * @return {Object} exceptionReport - objet contenant l'exception\n * @static\n * @memberof AltiResponseReader\n */\n exceptionreport : function (node) {\n var response = {};\n\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (child.nodeName === \"Exception\") {\n response.exceptionReport = AltiResponseReader.READERS.exception(child);\n }\n }\n }\n\n return response;\n },\n\n /**\n * Lecture d'un noeud \"Exception\" de la réponse xml du service alti.\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'exception\n * @return {Object} exceptionReport - objet contenant l'exception, avec deux attributs :\n * {String} exceptionReport.exceptionCode - qui contient l'identifiant du code de l'exception\n * {String} exceptionReport.exception - qui contient le message de l'exception\n * @static\n * @memberof AltiResponseReader\n */\n exception : function (node) {\n var exceptionReport = {};\n\n // get exception code\n var exceptionCode = node.getAttribute(\"exceptionCode\");\n if (exceptionCode) {\n exceptionReport.exceptionCode = exceptionCode;\n }\n\n // get exception message\n var textNode = node.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n exceptionReport.exception = textNode.nodeValue;\n }\n\n return exceptionReport;\n },\n\n /**\n * Lecture d'un noeud \"Error\" de la réponse xml du service alti.\n *\n * @param {DOMElement} node - noeud à lire pour récupérer l'exception\n * @return {Object} error - objet contenant l'exception\n * @static\n */\n error : function (node) {\n var response = {\n error : {}\n };\n // get error code and description\n if (node.hasChildNodes()) {\n var children = node.childNodes;\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n var textNode;\n // get error code\n if (child.nodeType === 1 && child.nodeName === \"code\") { // 1 === node.ELEMENT_NODE\n textNode = child.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n response.error.code = textNode.nodeValue;\n }\n }\n // get error description\n if (child.nodeType === 1 && child.nodeName === \"description\") { // 1 === node.ELEMENT_NODE\n textNode = child.firstChild;\n if (textNode && textNode.nodeType === 3) { // 3 === node.TEXT_NODE\n response.error.description = textNode.nodeValue;\n }\n }\n }\n }\n return response;\n }\n\n};\n\n/**\n * Méthode permettant de lancer la lecture d'une réponse XML du service altimétrique,\n * à l'aide des readers de la classe.\n *\n * @method AltiResponseReader.read\n * @param {DOMElement} root - racine de la réponse XML à lire\n * @static\n * @memberof AltiResponseReader\n */\nAltiResponseReader.read = function (root) {\n if (root.nodeName === \"elevations\") {\n var altiResponse = AltiResponseReader.READERS.elevations(root);\n return altiResponse;\n } else if (root.nodeName === \"ExceptionReport\") {\n var exceptionReport = AltiResponseReader.READERS.exceptionreport(root);\n return exceptionReport;\n } else if (root.nodeName === \"error\") {\n var error = AltiResponseReader.READERS.error(root);\n return error;\n } else {\n throw new Error(\"Erreur lors de la lecture de la réponse : elle n'est pas au format attendu.\");\n }\n};\n\nexport default AltiResponseReader;\n","/**\n * Creation d'une requête en REST ou WPS\n * (Factory)\n *\n * @module AltiRequestFactory\n * @alias Gp.Services.Alti.Request.AltiRequestFactory\n * @private\n */\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport AltiRequestREST from \"./AltiRequestREST\";\nimport AltiRequestWPS from \"./AltiRequestWPS\";\n\nvar AltiRequestFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Alti\n *\n * @example\n * var options = {\n * httpMethod : 'GET', // GET|POST\n * onSuccess : function (response) {},\n * onError : function (error) {},\n * scope : this,\n * positions : [{lon:, lat:}, {lon:, lat:}],\n * outputFormat : 'json' // json|xml\n * sampling : 3,\n * api : 'REST', // REST|WPS\n * zonly : false // false|true\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"AltiRequestFactory\");\n logger.trace([\"AltiRequestFactory::build()\"]);\n\n var request = null;\n\n // on factorise les options par groupe;\n // - global,\n // - param, les params pour les data inputs\n // - wps, les param du service\n // - callback\n\n var settings = {\n // ajout des valeurs par defaut spécifiques au service\n type : options.sampling ? \"Profil\" : \"Elevation\",\n method : options.httpMethod,\n param : {\n positions : null,\n delimiter : null, // FIXME par defaut, on ne le met pas en place car ça fait planter la requête !?\n indent : null, // par defaut\n crs : null, // par defaut\n format : null, // (only to POST)\n sampling : null, // (only use by Profil)\n zonly : null, // (only use by Elevation)\n measures : null // (only use by Elevation)\n }\n };\n\n // surcharge des valeurs obligatoires\n settings.param.positions = options.positions;\n settings.param.format = options.outputFormat;\n settings.param.sampling = options.sampling;\n settings.param.zonly = options.zonly;\n settings.param.measures = options.measures;\n settings.param.resource = options.resource;\n\n // gestion des callback\n var bOnError = !!(options.onError !== null && typeof options.onError === \"function\"); // cast variable to boolean\n var bOnSuccess = !!(options.onSuccess !== null && typeof options.onSuccess === \"function\");\n\n var message = null;\n switch (options.api) {\n case \"REST\":\n // FIXME les exceptions ne sont pas 'catchées' sur le constructeur !\n var myReq = new AltiRequestREST(settings);\n if (!myReq.processRequestString()) {\n message = \"Error in process request (rest) !\";\n if (bOnError) {\n options.onError.call(options.scope, new ErrorService(message));\n return;\n }\n throw new Error(message);\n }\n request = myReq.requestString;\n break;\n case \"WPS\":\n // ajout des valeurs par defaut spécifiques au service WPS\n settings.wps = {\n service : null, // par defaut\n version : null, // par defaut\n identifier : null, // par defaut\n rawdataoutput : null, // par defaut\n request : null // par defaut\n };\n\n request = AltiRequestWPS.build(settings);\n if (!request) {\n message = \"Error in process request (wps) !\";\n if (bOnError) {\n options.onError.call(options.scope, new ErrorService(message));\n return;\n }\n throw new Error(message);\n }\n break;\n default:\n message = \"Type of API is not supported by service (REST or WPS) !\";\n if (bOnError) {\n options.onError.call(options.scope, new ErrorService(message));\n return;\n }\n throw new Error(message);\n }\n\n if (bOnSuccess) {\n options.onSuccess.call(options.scope, request);\n }\n\n return request;\n }\n};\n\nexport default AltiRequestFactory;\n","/* jshint multistr : true */\n\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport AltiElevationRequest from \"./model/AltiElevationRequest\";\nimport AltiProfilRequest from \"./model/AltiProfilRequest\";\n\n/**\n * @classdesc\n * Classe de gestion des requêtes de type REST sur le service altimetrique.\n *\n * @todo Le service Alti n'implemente pas le POST !?\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiRequestREST\n * @param {Object} options - options\n * @param {Object} options.param.positions - tableau de coordonnées lon/lat\n * @param {String} options.param.delimiter - '|'\n * @param {Boolean} options.param.indent - false|true\n * @param {String} options.param.crs - 'CRS:84'\n * @param {String} options.param.sampling - 3\n * @param {String} options.param.resource - 'rge_alti_corse2a_float32_zip_lamb93'\n * @param {Boolean} options.param.zonly - false|true\n * @param {Boolean} options.param.measures - false|true\n * @param {String} options.param.format - \"JSON|XML\"\n * @param {String} options.type - \"Profil|Elevation\"\n * @param {String} options.method - GET|POST\n *\n * @example\n * var options = {\n * type : 'Profil', // Elevation\n * method : 'GET', // par defaut\n * param : {\n * positions : [\n * {lon:'1.11', lat:'1.11'},\n * {lon:'1.10', lat:'1.10'},\n * {lon:'1.12', lat:'1.12'}\n * ],\n * delimiter : \";\", // par defaut\n * indent : true, // par defaut\n * crs : 'EPSG:4326', // par defaut\n * format : 'json', // par defaut (only to POST)\n * sampling : 3 , // par defaut (only use by Profil)\n * zonly : false // par defaut (only use by Elevation)\n * measures : false // par defaut (only use by Elevation)\n * }\n * };\n *\n * var result;\n * try {\n * var obj = new AltiRequestREST (options);\n * if (! obj.processRequestString ()) {\n * throw new Error(\"Request empty !?\")\n * }\n * result = obj.requestString;\n * } catch (e) {\n * // exceptions...\n * }\n * @private\n */\nfunction AltiRequestREST (options) {\n this.logger = Logger.getLogger(\"AltiRequestREST\");\n this.logger.trace(\"[Constructeur AltiRequestREST ()]\");\n\n if (!(this instanceof AltiRequestREST)) {\n throw new TypeError(\"AltiRequestREST constructor cannot be called as a function.\");\n }\n\n this.options = options || {};\n\n // existance des options\n if (!this.options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n // type de requete : Altitude ou Profil\n // (param. à determiner en fonction des parametres d'entrée)\n if (!this.options.type) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"type (Elevation or Profil)\"));\n }\n\n // construction du modele de requête\n // (test du type d'objet candidat)\n this.DataObject = null;\n switch (this.options.type) {\n case \"Elevation\":\n this.DataObject = new AltiElevationRequest(this.options.param);\n break;\n case \"Profil\":\n this.DataObject = new AltiProfilRequest(this.options.param);\n break;\n default:\n throw new Error(_.getMessage(\"PARAM_TYPE\", \"type (Elevation or Profil)\"));\n }\n\n /**\n * methode.\n * Par defaut, \"GET\".\n */\n this.method = this.options.method || \"GET\";\n}\n\nAltiRequestREST.prototype = {\n\n /**\n * request\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : AltiRequestREST,\n\n /**\n * Template de la requête.\n */\n template : {\n get : {\n // FIXME on retire le param 'delimiter' : &delimiter='__DELIMITER__'\n value : \"lon=__LON__&lat=__LAT__&indent=__INDENT__&crs='__CRS__'&resource=__RESOURCE__&measures=__MEASURES__\",\n input : {\n point : \"&zonly=__ZONLY__\",\n profil : \"&sampling=__SAMPLING__\"\n }\n },\n post : {\n // FIXME on retire le param 'delimiter' : delimiter='__DELIMITER__'\\n\\\n value : \"lon=__LON__\\n\" +\n \"lat=__LAT__\\n\" +\n \"indent=__INDENT__\\n\" +\n \"crs='__CRS__'\\n\" +\n \"resource='__RESOURCE__'\\n\" +\n \"measures='__MEASURES__'\\n\",\n input : {\n point : \"zonly=__ZONLY__\\n\",\n profil : \"sampling=__SAMPLING__\"\n }\n }\n },\n\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out : lon=0.2367,2.1570&lat=48.0551,46.6077&delimiter=,&indent=true&zonly=true&crs='CRS:84'\n * // POST out : Not yet supported method POST !\n * @returns {String}\n */\n processRequestString : function () {\n this.logger.trace(\"AltiRequestREST::processRequestString ()\");\n\n var template = \"\";\n if (this.method === \"POST\") {\n template = this.template.post.value;\n } else if (this.method === \"GET\") {\n template = this.template.get.value;\n }\n\n template = template.replace(/__LON__/g, this.DataObject.getLon());\n template = template.replace(/__LAT__/g, this.DataObject.getLat());\n // FIXME on retire le param 'delimiter'\n // template = template.replace(/__DELIMITER__/g, this.DataObject.delimiter);\n template = template.replace(/__INDENT__/g, this.DataObject.indent);\n template = template.replace(/__CRS__/g, this.DataObject.crs);\n template = template.replace(/__RESOURCE__/g, this.DataObject.resource);\n template = template.replace(/__MEASURES__/g, this.DataObject.measures);\n\n // ajout +\n template = template + this.__addDataInputs();\n this.logger.trace(\"traduction tmpl\", template);\n\n // sauvegarde\n this.requestString = template;\n\n return this.requestString;\n },\n\n /**\n * Ajout de parametres spécifiques (ex. zonly)\n *\n * @returns {String}\n */\n __addDataInputs : function () {\n this.logger.trace(\"AltiRequestREST::addDataInput ()\");\n\n var myTemplate;\n if (this.method === \"POST\") {\n myTemplate = this.template.post;\n } else if (this.method === \"GET\") {\n myTemplate = this.template.get;\n } else {\n throw new Error(\"No other HTTP method supported by the service !\");\n }\n\n var tmpl = null;\n if (this.DataObject.CLASSNAME === \"AltiElevationRequest\") {\n tmpl = myTemplate.input.point;\n return tmpl.replace(/__ZONLY__/g, this.DataObject.zonly.toString());\n } else if (this.DataObject.CLASSNAME === \"AltiProfilRequest\") {\n tmpl = myTemplate.input.profil;\n return tmpl.replace(/__SAMPLING__/g, this.DataObject.sampling);\n } else {\n throw new Error(\"No other object supported than elevation or profil !?\");\n }\n }\n};\n\nexport default AltiRequestREST;\n","/**\n * Classe d'interface des requêtes de type WPS sur le service altimetrique.\n * (Factory)\n *\n * @module Gp.Services.Alti.Request.AltiRequestWPS\n * @alias Gp.Services.Alti.Request.AltiRequestWPS\n * @private\n */\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport WPS from \"../../../Formats/WPS\";\nimport AltiElevationRequest from \"./model/AltiElevationRequest\";\nimport AltiProfilRequest from \"./model/AltiProfilRequest\";\n\nvar AltiRequestWPS = {\n\n /**\n * Interface unique de construction de la requête.\n *\n * @method build\n * @param {Object} options - options\n * @param {Object} options.param.positions - tableau de coordonnées lon/lat\n * @param {String} options.param.delimiter - '|'\n * @param {Boolean} options.param.indent - false|true\n * @param {String} options.param.crs - 'CRS:84'\n * @param {String} options.param.sampling - 3\n * @param {Boolean} options.param.zonly - false|true\n * @param {String} options.param.format - \"JSON|XML\" (only to POST)\n * @param {String} options.wps.service - \"WPS\"\n * @param {String} options.wps.version - \"1.0.0\"\n * @param {String} options.wps.identifier - \"gs:WPSElevation|gs:WPSLineElevation\"\n * @param {String} options.wps.rawdataoutput - \"result\"\n * @param {String} options.wps.request - \"Execute\"\n * @param {String} options.type - \"Profil|Elevation\"\n * @param {String} options.method - GET|POST\n * @example\n * var options = {\n * type : 'Profil', // Elevation\n * method : 'GET', // par defaut\n * param : {\n * positions : [\n * {lon:'1.11', lat:'1.11'},\n * {lon:'1.10', lat:'1.10'},\n * {lon:'1.12', lat:'1.12'}\n * ],\n * delimiter : \";\", // par defaut\n * indent : true, // par defaut\n * crs : 'EPSG:4326', // par defaut\n * format : 'json', // par defaut (only to POST)\n * sampling : 3 , // par defaut (only use by Profil)\n * zonly : false, // par defaut (only use by Elevation)\n * },\n * wps : {\n * service : 'WPS', // par defaut\n * version : '1.0.0', // par defaut\n * identifier : 'gs:WPS', // par defaut, Elevation = gs:WPSElevation, Profil = gs:WPSLineElevation\n * rawdataoutput : 'result',// par defaut\n * request : 'Execute' // par defaut\n * }\n * };\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"AltiRequestWPS\");\n logger.trace([\"AltiRequestWPS::build()\"]);\n\n // existance des options\n if (!options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n // type de requete : Altitude ou Profil\n // (param. à determiner en fonction des parametres d'entrée)\n if (!options.type) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"type (Elevation or Profil)\"));\n }\n\n // construction du modele de requête\n // (test du type d'objet candidat)\n var DataObject = null;\n switch (options.type) {\n case \"Elevation\":\n // surcharge\n options.wps.identifier = \"gs:WPSElevation\";\n DataObject = new AltiElevationRequest(options.param);\n break;\n case \"Profil\":\n // surcharge\n options.wps.identifier = \"gs:WPSLineElevation\";\n DataObject = new AltiProfilRequest(options.param);\n break;\n default:\n throw new Error(_.getMessage(\"PARAM_TYPE\", \"type (Elevation or Profil)\"));\n }\n\n // construction de la requête WPS\n var settings = {\n data : DataObject,\n method : options.method,\n param : options.wps\n };\n\n var rqstWPS = new WPS(settings);\n\n if (!rqstWPS.processRequestString()) {\n throw new Error(\"Enable to process request !\");\n }\n\n return rqstWPS.requestString;\n }\n};\n\nexport default AltiRequestWPS;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\nimport AltiRequest from \"./AltiRequest\";\n\n/**\n * @classdesc\n *\n * Classe de gestion des param. des requêtes de type POINT du service altimetrique.\n *\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiElevationRequest\n * @param {Object} options - options\n * @param {Boolean} options.zonly - false|true\n *\n * @private\n */\nfunction AltiElevationRequest (options) {\n if (!(this instanceof AltiElevationRequest)) {\n throw new TypeError(\"AltiElevationRequest constructor cannot be called as a function.\");\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"AltiElevationRequest\";\n\n // appel du constructeur par heritage\n AltiRequest.apply(this, arguments);\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur AltiElevationRequest ()]\");\n\n /**\n * Z uniquement.\n * true|false\n */\n this.zonly = this.options.zonly || false; // test des options héritées !\n}\n\n/**\n * @lends module:AltiElevationRequest#\n */\n\nAltiElevationRequest.prototype = Object.create(AltiRequest.prototype, {\n\n /**\n * Setter/getter pour \"zonly\"\n */\n zonly : {\n /** getter */\n get : function () {\n return this._zonly;\n },\n /** setter */\n set : function (z) {\n this._zonly = z;\n }\n }\n\n});\n\n/**\n * Constructeur (alias)\n */\nAltiElevationRequest.prototype.constructor = AltiElevationRequest;\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Array}\n */\nAltiElevationRequest.prototype.getData = function () {\n // par glop..., appel de AltiRequest::getData () !\n var map = [];\n map.push({\n k : \"lon\",\n v : this.getLon()\n });\n map.push({\n k : \"lat\",\n v : this.getLat()\n });\n // map.push({k : \"delimiter\", v : this.delimiter}); // FIXME on retire le param \"delimiter\"\n map.push({\n k : \"indent\",\n v : this.indent\n });\n map.push({\n k : \"crs\",\n v : this.crs\n });\n map.push({\n k : \"zonly\",\n v : this.zonly\n });\n map.push({\n k : \"format\",\n v : this.format\n });\n map.push({\n k : \"resource\",\n v : this.resource\n });\n\n return map;\n};\n\nexport default AltiElevationRequest;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\nimport AltiRequest from \"./AltiRequest\";\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes de type PROFIL du service altimetrique.\n *\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiProfilRequest\n * @param {Object} options - options\n * @param {String} options.sampling - 3\n *\n * @private\n */\nfunction AltiProfilRequest (options) {\n if (!(this instanceof AltiProfilRequest)) {\n throw new TypeError(\"AltiProfilRequest constructor cannot be called as a function.\");\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"AltiProfilRequest\";\n\n // appel du constructeur par heritage\n AltiRequest.apply(this, arguments);\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur AltiProfilRequest ()]\");\n\n /**\n * Sampling\n * Par defaut, 3\n */\n this.sampling = this.options.sampling || 3; // test des options héritées !\n}\n\n/**\n * @lends module:AltiProfilRequest#\n */\n\nAltiProfilRequest.prototype = Object.create(AltiRequest.prototype, {\n\n /**\n * Setter/getter pour \"sampling\"\n */\n sampling : {\n /** getter */\n get : function () {\n return this._sampling;\n },\n /** setter */\n set : function (value) {\n this._sampling = value;\n }\n }\n});\n\n/**\n * Constructeur (alias)\n */\nAltiProfilRequest.prototype.constructor = AltiProfilRequest;\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Object[]}\n */\nAltiProfilRequest.prototype.getData = function () {\n // par glop..., appel de AltiRequest::getData () !\n var map = [];\n map.push({\n k : \"lon\",\n v : this.getLon()\n });\n map.push({\n k : \"lat\",\n v : this.getLat()\n });\n // map.push({k : \"delimiter\", v : this.delimiter}); // FIXME on retire le param \"delimiter\"\n map.push({\n k : \"indent\",\n v : this.indent\n });\n map.push({\n k : \"crs\",\n v : this.crs\n });\n map.push({\n k : \"sampling\",\n v : this.sampling\n });\n map.push({\n k : \"format\",\n v : this.format\n });\n map.push({\n k : \"resource\",\n v : this.resource\n });\n\n return map;\n};\n\nexport default AltiProfilRequest;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes du service altimetrique.\n *\n * @constructor\n * @alias Gp.Services.Alti.Request.AltiRequest\n * @param {Object} options - options\n * @param {Object} options.positions - tableau de coordonnées lon/lat\n * @param {String} options.delimiter - \"|\"\n * @param {Boolean} options.indent - false|true\n * @param {String} options.crs - \"CRS:84\"\n * @param {String} options.format - \"JSON|XML\"\n *\n * @private\n */\nfunction AltiRequest (options) {\n if (!(this instanceof AltiRequest)) {\n throw new TypeError(\"AltiRequest constructor cannot be called as a function.\");\n }\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur AltiRequest ()]\");\n\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n /**\n * Liste des coordonnées.\n * @example\n * var c = [{lon : \"\", lat : \"\"}, {lon : \"\", lat : \"\"}];\n */\n this.positions = this.options.positions || [];\n\n /**\n * Caractère de séparation.\n * Par defaut, \"|\".\n */\n this.delimiter = this.options.delimiter || \"|\";\n\n /**\n * Indentation.\n * true|false\n */\n this.indent = this.options.indent || false;\n\n /**\n * Projection.\n * Par defaut, CRS:84.\n */\n this.crs = this.options.crs || \"CRS:84\";\n\n /**\n * format de sortie.\n * Par defaut, \"json\".\n */\n this.format = this.options.format || \"json\";\n\n /*\n * Ressource utilisée\n */\n this.resource = this.options.resource;\n\n /**\n * Réponse détaillée (source & accuracy)\n * true|false\n */\n this.measures = this.options.measures || false;\n}\n\n/**\n * CLASSNAME\n */\nAltiRequest.CLASSNAME = \"AltiRequest\";\n\nAltiRequest.prototype = {\n\n /**\n * @lends module:AltiRequest#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor : AltiRequest,\n\n /**\n * Ajout d\"une liste de coordonnées.\n *\n * @param {Object[]} lstPosition - liste de positions\n * @example\n * obj.setPositions ([{lon : \"0.15\", lat : \"0.15\"}, {lon : \"1.15\", lat : \"1.15\"}]);\n */\n setPositions : function (lstPosition) {\n var positions = [];\n for (var i = 0; i < lstPosition.length; i++) {\n var o = lstPosition[i];\n if (o.lon && o.lat) {\n positions.push(o);\n }\n }\n\n this.positions = positions;\n },\n\n /**\n * Liste des coordonnées.\n *\n * @param {Int} pos - position\n * @returns {positions}\n * @example\n * obj.getPositions (); // [{lon : \"\", lat : \"\"}, {lon : \"\", lat : \"\"}]\n * obj.getPositions (0); // [{lon : \"\", lat : \"\"}]\n */\n getPositions : function (pos) {\n // FIXME test if not a number !?\n if (!pos) {\n return this.positions;\n }\n\n var index = this.positions.length - 1;\n if (pos > index || pos < index) {\n this.logger.warn(\"index out of range !\");\n return this.positions;\n }\n\n return this.positions[pos];\n },\n\n /**\n * Ajout d\"une liste de coordonnées.\n *\n * @param {Object[]} lstPosition - liste de positions\n * @example\n * obj.addPositions ([{lon : \"0.15\", lat : \"0.15\"}, {lon : \"1.15\", lat : \"1.15\"}]);\n */\n addPositions : function (lstPosition) {\n for (var i = 0; i < lstPosition.length; i++) {\n var o = lstPosition[i];\n if (o.lon && o.lat) {\n this.positions.push(lstPosition[i]);\n }\n }\n },\n\n /**\n * Retourne la liste des longitudes avec un caractère de séparation.\n *\n * @returns {String} - une liste de longitudes\n * @example\n * // out : 0.2367|2.1570|43.789|...\n */\n getLon : function () {\n var lstLon = [];\n for (var i = 0; i < this.positions.length; i++) {\n lstLon.push(this.positions[i].lon);\n }\n this.logger.trace(lstLon);\n return lstLon.join(this.delimiter);\n },\n\n /**\n * Retourne la liste des lattitudes avec un caractère de séparation.\n *\n * @returns {String} - une liste de lattitudes\n * @example\n * // out : 0.2367|2.1570|43.789|...\n */\n getLat : function () {\n var lstLat = [];\n for (var i = 0; i < this.positions.length; i++) {\n lstLat.push(this.positions[i].lat);\n }\n this.logger.trace(lstLat);\n return lstLat.join(this.delimiter);\n }\n\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Object[]}\n */\nAltiRequest.prototype.getData = function () {\n var map = [];\n\n map.push({\n k : \"lon\",\n v : this.getLon()\n });\n map.push({\n k : \"lat\",\n v : this.getLat()\n });\n map.push({\n k : \"delimiter\",\n v : this.delimiter\n });\n map.push({\n k : \"indent\",\n v : this.indent\n });\n map.push({\n k : \"crs\",\n v : this.crs\n });\n map.push({\n k : \"format\",\n v : this.format\n });\n\n return map;\n};\n\nexport default AltiRequest;\n","/**\n * Factory pour générer une reponse JSON à partir d'un XML ou d'un JSON\n * (Factory)\n *\n * @module AltiResponseFactory\n * @private\n * @alias Gp.Services.Alti.Response.AltiResponseFactory\n */\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport XML from \"../../../Formats/XML\";\nimport AltiResponseReader from \"../Formats/AltiResponseReader\";\nimport AltiResponse from \"./model/AltiResponse\";\nimport Elevation from \"./model/Elevation\";\n\nvar AltiResponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Alti\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"AltiResponseFactory\");\n logger.trace([\"AltiResponseFactory::build()\"]);\n\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n switch (options.outputFormat) {\n case \"xml\":\n logger.trace(\"analyze response : xml\");\n\n try {\n var p = new XML({\n reader : AltiResponseReader\n });\n\n if (typeof options.response === \"string\") {\n p.setXMLString(options.response);\n } else {\n p.setXMLDoc(options.response);\n }\n\n data = p.parse();\n\n if (!data) {\n throw new Error(MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION_2\"));\n }\n } catch (e) {\n var message = e.message;\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", message),\n status : 200,\n type : ErrorService.TYPE_SRVERR\n }));\n return;\n }\n\n break;\n\n case \"json\":\n logger.trace(\"analyze response : json\");\n logger.trace(\"analyze response : \", typeof options.response);\n\n var JSONResponse = null;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // le service renvoie t il une erreur ?\n if (JSONResponse && JSONResponse.error) {\n // ex. {\"error\": {\"code\": \"BAD_PARAMETER\",\"description\": \"The values () cannot be parsed as a valid longitude (double value such as -180 < lat < 180).\"}}\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", JSONResponse.error.description),\n status : 200,\n type : ErrorService.TYPE_SRVERR\n }));\n return;\n }\n\n // analyse de la reponse\n if (JSONResponse) {\n var elevations = JSONResponse.elevations;\n var altiResponse = new AltiResponse();\n var elevation;\n if (Array.isArray(elevations) && elevations.length) {\n for (var i = 0; i < elevations.length; i++) {\n elevation = new Elevation();\n\n if (typeof elevations[i] === \"object\") {\n // elevations[i] est un objet elevation\n if (elevations[i].lon) {\n elevation.lon = elevations[i].lon;\n }\n if (elevations[i].lat) {\n elevation.lat = elevations[i].lat;\n }\n if (elevations[i].z) {\n elevation.z = elevations[i].z;\n }\n if (elevations[i].acc) {\n elevation.acc = elevations[i].acc;\n }\n if (elevations[i].measures) {\n elevation.measures = elevations[i].measures;\n }\n } else if (typeof elevations[i] === \"number\") {\n // elevations[i] est un nombre, dans le cas de zonly=true notamment\n elevation.z = elevations[i];\n }\n\n if (Array.isArray(altiResponse.elevations)) {\n altiResponse.elevations.push(elevation);\n }\n }\n }\n data = altiResponse;\n }\n\n if (!data) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE_2\"),\n type : ErrorService.TYPE_UNKERR,\n status : -1\n }));\n return;\n }\n break;\n\n default:\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_FORMAT_2\"),\n type : ErrorService.TYPE_UNKERR,\n status : -1\n }));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type : ErrorService.TYPE_SRVERR,\n status : 200\n }));\n return;\n } else if (data.error) {\n var errorMess = data.error.description;\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", errorMess),\n type : ErrorService.TYPE_SRVERR,\n status : 200\n }));\n return;\n }\n }\n } else {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default AltiResponseFactory;\n","/**\n * Response object for {@link module:Services~getAltitude Gp.Services.getAltitude ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Array.} elevations - Elevations array.\n *\n * @namespace\n * @alias Gp.Services.AltiResponse\n */\nfunction AltiResponse () {\n if (!(this instanceof AltiResponse)) {\n throw new TypeError(\"AltiResponse constructor cannot be called as a function.\");\n }\n\n this.elevations = [];\n}\n\nAltiResponse.prototype = {\n\n constructor : AltiResponse\n\n};\n\nexport default AltiResponse;\n","\n/**\n * Single elevation object returned by underlying web service. Contains at least, one elevation (z). May also contain point coordinates and elevation accuracy if \"zonly\" parameter wasn't set to true.\n *\n * @property {Float} lat - Point latitude. (only if zonly=false)\n * @property {Float} lon - Point longitude. (only if zonly=false)\n * @property {Float} z - Point elevation.\n * @property {Float} acc - Accuracy of elevation for this point. (only if zonly=false)\n *\n * @namespace\n * @alias Gp.Services.Alti.Elevation\n */\nfunction Elevation () {\n if (!(this instanceof Elevation)) {\n throw new TypeError(\"Elevation constructor cannot be called as a function.\");\n }\n\n this.z = null;\n}\n\nElevation.prototype = {\n\n constructor : Elevation\n\n};\n\nexport default Elevation;\n","\n/**\n * Single measure object returned by underlying web service if measures = true and zonly = false\n *\n * @property {String} source_name - Name of the source\n * @property {String} source_measure - Name of the measure\n * @property {Float} z - Point elevation.\n * @property {Float} acc - Accuracy of elevation for this point. (only if zonly=false)\n *\n * @namespace\n * @alias Gp.Services.Alti.Measure\n */\nfunction Measure () {\n if (!(this instanceof Measure)) {\n throw new TypeError(\"Measure constructor cannot be called as a function.\");\n }\n\n this.source_name = null;\n this.source_measure = null;\n this.z = null;\n this.acc = null;\n}\n\nMeasure.prototype = {\n\n constructor : Measure\n\n};\n\nexport default Measure;\n","import CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport AutoCompleteResponseFactory from \"./Response/AutoCompleteResponseFactory\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport MR from \"../../Utils/MessagesResources\";\nimport Helper from \"../../Utils/Helper\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\n\n/**\n * @classdesc\n * Appel du service d'autocomplétion du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.AutoComplete\n *\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String} options.text - La chaîne de caractère à compléter.\n * Cette chaîne n'est pas \"URL encodée\".\n * C'est l'API qui s'occupe de l'encoder pour l'inclure dans la requête.\n *\n * @param {Array.} [options.type = [\"StreetAddress\"]] - Type de l'objet recherché.\n * Le service d'autocomplétion du Géoportail permet de rechercher des toponymes 'PositionOfInterest' et/ou des adresses postales 'StreetAddress'.\n * D'autres types pourront être rajoutés selon l'évolution du service.\n * Par défaut, type = ['StreetAddress'].\n *\n * @param {String} [options.territory] - Limitation de la zone de recherche de localisants.\n * Le service d'autocomplétion du Géoportail permet de limiter la recherche à la métropole et la Corse : options.territory = 'METROPOLE',\n * DOMS TOMS : options.territory = 'DOMTOM', ou à un département : options.territory = '31'\n * Pas de valeur par défaut.\n * La valeur par défaut est donc celle du service.\n * Le service d'autocomplétion du Géoportail renvoie toutes les informations quand aucun territoire n'est spécifié.\n *\n * @param {Number} [options.maximumResponses = 10] - Nombre de réponses maximal que l'on souhaite recevoir.\n * Pas de valeur par défaut.\n * La valeur par défaut sera donc celle du service : 10.\n *\n * @example\n * var options = {\n * // options communes aux services\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * text : \"\",\n * type : \"StreetAddress\",\n * territory : 'METROPOLE',\n * maximumResponses : 10\n * };\n */\nfunction AutoComplete (options_) {\n if (!(this instanceof AutoComplete)) {\n throw new TypeError(MR.getMessage(\"CLASS_CONSTRUCTOR\", \"AutoComplete\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"AutoComplete\";\n\n this.logger = Logger.getLogger(\"Gp.Services.AutoComplete\");\n this.logger.trace(\"[Constructeur AutoComplete (options)]\");\n\n var options = this.patchOptionConvertor(options_);\n\n if (!options.serverUrl) {\n options.serverUrl = DefaultUrlService.AutoComplete.newUrl();\n }\n\n // appel du constructeur par heritage\n CommonService.apply(this, arguments);\n\n if (!options.text) {\n throw new Error(MR.getMessage(\"PARAM_MISSING\", \"text\"));\n }\n\n // ajout des options spécifiques au service\n this.options.text = options.text;\n\n // on definit des parametres par defaut\n if (!options.type) {\n options.type = [\"StreetAddress,PositionOfInterest\"];\n }\n\n this.options.type = options.type;\n this.options.territory = options.terr || \"\";\n this.options.maximumResponses = options.maximumResponses || 10;\n\n // INFO\n // le service ne repond pas en mode POST (405 Method Not Allowed)\n if (this.options.protocol === \"XHR\" && this.options.httpMethod === \"POST\") {\n this.logger.warn(\"Le service ne gére pas le mode d'interrogation en POST, on bascule sur du GET !\");\n this.options.httpMethod = \"GET\"; // on surcharge !\n }\n\n // attributs d'instances\n\n /**\n * Format forcé de la réponse du service : \"json\"\n * sauf si l'on souhaite une reponse brute (options.rawResponse)\n */\n this.options.outputFormat = (this.options.rawResponse) ? \"\" : \"json\";\n}\n\n/**\n * @lends module:AutoComplete#\n */\n\nAutoComplete.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nAutoComplete.prototype.constructor = AutoComplete;\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} options_ - options du service\n * @return {Object} - options\n */\nAutoComplete.prototype.patchOptionConvertor = function (options_) {\n const options = options_;\n\n if (options.filterOptions) {\n this.logger.warn(\"The parameter 'filterOptions' is deprecated\");\n\n if (options.filterOptions.type) {\n this.logger.warn(\"The parameter 'filterOptions.type' is deprecated\");\n if (!options.type) {\n options.type = options.filterOptions.type;\n }\n }\n\n if (options.filterOptions.territory) {\n this.logger.warn(\"The parameter 'filterOptions.territory' is deprecated\");\n if (!options.terr) {\n options.terr = options.filterOptions.territory;\n }\n }\n\n delete options.filterOptions;\n }\n\n return options;\n};\n\n/**\n * (overwrite)\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nAutoComplete.prototype.buildRequest = function (error, success) {\n // ex.\n // http://wxs.ign.fr/CLEF/ols/apis/completion?\n // text=Brie-Comt&\n // type=StreetAddress,PositionOfInterest&\n // territory=METROPOLE&\n // maximumResponses=10\n\n // traitement des param KPV sous forme de tableau\n var territory = \"\";\n if (this.options.territory) {\n territory = this.options.territory;\n }\n\n var type = \"\";\n if (this.options.type) {\n type = this.options.type.join(\",\");\n }\n\n // normalisation de la requete avec param KPV\n this.request = Helper.normalyzeParameters({\n text : encodeURIComponent(this.options.text),\n type : type,\n terr : territory,\n maximumResponses : this.options.maximumResponses\n });\n\n (!this.request)\n ? error.call(this, new ErrorService(MR.getMessage(\"SERVICE_REQUEST_BUILD\")))\n : success.call(this, this.request);\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback de succès de l'analyse de la réponse\n */\nAutoComplete.prototype.analyzeResponse = function (error, success) {\n if (this.response) {\n var options = {\n response : this.response,\n rawResponse : this.options.rawResponse,\n onSuccess : success,\n onError : error,\n scope : this\n };\n\n AutoCompleteResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(MR.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default AutoComplete;\n","/**\n * Factory pour générer une reponse JSON à partir d'un XML ou d'un JSON\n * (Factory)\n *\n * @module AutoCompleteResponseFactory\n * @private\n * @alias Gp.Services.AutoComplete.Response.AutoCompleteResponseFactory\n */\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport AutoCompleteResponse from \"./model/AutoCompleteResponse\";\nimport SuggestedLocation from \"./model/SuggestedLocation\";\n\nvar AutoCompleteResponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Alti\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"AutoCompleteResponseFactory\");\n logger.trace([\"AutoCompleteResponseFactory::build()\"]);\n\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n var JSONResponse = null;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // analyse de la réponse\n if (JSONResponse) {\n // le service renvoie t il une erreur ?\n if (JSONResponse.error) {\n // ex. ?\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", JSONResponse.error.description),\n status : JSONResponse.error.code,\n type : ErrorService.TYPE_SRVERR\n }));\n return;\n }\n\n // création de l'objet réponse\n data = new AutoCompleteResponse();\n\n // boucle sur les résultats de l'autocomplétion\n if (JSONResponse.results && Array.isArray(JSONResponse.results)) {\n var suggestedLocation = null;\n\n for (var i = 0; i < JSONResponse.results.length; i++) {\n var result = JSONResponse.results[i];\n suggestedLocation = new SuggestedLocation();\n\n if (result) {\n if (result.country === \"StreetAddress\") {\n suggestedLocation.street = result.street;\n suggestedLocation.type = \"StreetAddress\";\n } else if (result.country === \"PositionOfInterest\") {\n suggestedLocation.poi = result.street;\n suggestedLocation.type = \"PositionOfInterest\";\n suggestedLocation.poiType = result.poiType;\n }\n\n if (suggestedLocation.position) {\n suggestedLocation.position.x = result.x;\n suggestedLocation.position.y = result.y;\n }\n\n suggestedLocation.kind = result.kind;\n suggestedLocation.commune = result.city;\n suggestedLocation.fullText = result.fulltext;\n suggestedLocation.postalCode = result.zipcode;\n suggestedLocation.classification = result.classification;\n }\n // Ajout du résultat au tableau reverseGeocodedLocations de geocodedLocation\n data.suggestedLocations.push(suggestedLocation);\n }\n } else {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_FORMAT_3\")));\n return;\n }\n\n if (!data.suggestedLocations.length) {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_FORMAT_3\")));\n return;\n }\n }\n\n if (!data) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE_2\"),\n type : ErrorService.TYPE_UNKERR,\n status : -1\n }));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type : ErrorService.TYPE_SRVERR,\n status : 200\n }));\n return;\n }\n }\n } else {\n // si la réponse (xmlString) est vide, on appelle le callback d'erreur\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n\n // si tout s'est bien passé, on appelle le callback de succès\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default AutoCompleteResponseFactory;\n","/**\n * Response object for {@link module:Services~autoComplete Gp.Services.autoComplete ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Array.} suggestedLocations - SuggestedLocations array.\n *\n * @namespace\n * @alias Gp.Services.AutoCompleteResponse\n */\nfunction AutoCompleteResponse () {\n if (!(this instanceof AutoCompleteResponse)) {\n throw new TypeError(\"AutoCompleteResponse constructor cannot be called as a function.\");\n }\n\n this.suggestedLocations = [];\n}\n\nAutoCompleteResponse.prototype = {\n\n constructor : AutoCompleteResponse\n\n};\n\nexport default AutoCompleteResponse;\n","\n/**\n * Single SuggestedLocation Object returned by underlying web service.\n * Each suggested location represents a street address (\"StreetAddress\") or a place name (\"PositionOfInterest\").\n *\n * @property {String} type - Suggested location type : \"StreetAddress\" ou \"PositionOfInterest\"\n * @property {Gp.Point} position - Position of the suggested location given in requested coordinates system.\n * @property {String} commune - Suggested municipality\n * @property {String} fullText - Full text representation of the suggested location.\n * @property {String} postalCode - Suggested location postcode\n * @property {Integer} classification - Number used to classify the importance of the place where is the suggested location from 1 (most important) to 7 (less important).\n * @property {String} street - Street name of the suggested location (\"StreetAddress\" only).\n * @property {String} kind - Nature of the suggested location : \"prefecture\", \"monument\", \"commune\", ... for instance (\"PositionOfInterest\" only).\n *\n * @namespace\n * @alias Gp.Services.AutoComplete.SuggestedLocation\n */\nfunction SuggestedLocation () {\n if (!(this instanceof SuggestedLocation)) {\n throw new TypeError(\"SuggestedLocation constructor cannot be called as a function.\");\n }\n\n /* REPONSE :\n {\n \"status\" : \"OK\",\n \"results\" : [\n {\n \"country\":\"PositionOfInterest\",\n \"x\":-1.559185,\n \"y\":47.952603,\n \"city\":\"Brie\",\n \"zipcode\":\"35150\",\n \"street\":\"corbe\",\n \"kind\":\"Lieu-dit habité\",\n \"fulltext\":\"corbe, 35150 Brie\",\n \"classification\":6\n },\n {\n \"country\":\"StreetAddress\",\n \"x\":1.538295,\n \"y\":43.19646,\n \"city\":\"Brie\",\n \"zipcode\":\"09700\",\n \"street\":\"courreste\",\n \"kind\":\"\",\n \"fulltext\":\"courreste, 09700 Brie\",\n \"classification\":7\n }\n ]\n }\n */\n\n /* REPONSE EN ERREUR\n {\n status : \"ERROR\",\n results : [ ]\n }\n */\n\n /**\n * Suggested location type : \"StreetAddress\" ou \"PositionOfInterest\"\n * @type {String}\n */\n this.type = null;\n\n /**\n * Position of the suggested location given in requested coordinates system.\n * @type {Gp.Point}\n */\n this.position = {\n x : null,\n y : null\n };\n\n /**\n * Suggested municipality\n * @type {String}\n */\n this.commune = null;\n\n /**\n * Full text representation of the suggested location.\n * @type {String}\n */\n this.fullText = null;\n\n /**\n * Suggested location postcode\n * @type {Number}\n */\n this.postalCode = null;\n\n /**\n * Number used to classify the importance of the place where is the suggested location from 1 (most important) to 7 (less important).\n * @type {Integer}\n */\n this.classification = null;\n\n /**\n * Street name of the suggested location (\"StreetAddress\" only).\n * @type {String}\n */\n this.street = null;\n\n /**\n * Place name of the suggested location (\"PositionOfInterest\" only).\n * @type {String}\n */\n this.poi = null;\n\n /**\n * Nature of the suggested location : \"prefecture\", \"monument\", \"commune\", ... for instance (\"PositionOfInterest\" only).\n * @type {String}\n */\n this.kind = null;\n}\n\nSuggestedLocation.prototype = {\n\n constructor : SuggestedLocation\n};\n\nexport default SuggestedLocation;\n","import Logger from \"../Utils/LoggerByDefault\";\nimport Helper from \"../Utils/Helper\";\nimport _ from \"../Utils/MessagesResources\";\nimport Protocol from \"../Protocols/Protocol\";\nimport ErrorService from \"../Exceptions/ErrorService\";\n// import DefaultUrlService from \"./DefaultUrlService\";\n// package.json (extract version)\nimport Pkg from \"../../package.json\";\n\n/**\n * @classdesc\n * Composant Service\n *\n * @constructor\n * @alias Gp.Services.CommonService\n * @param {Object} options - options communes à tous les services\n *\n * @param {String} [options.serverUrl] - URL d'accès au service. Par défaut \"https://data.geopf.fr/SERVICE/\".\n * Permet de forcer l'utilisation d'un service équivalent déployé derrière une éventuelle autre URL d'accès.\n * Si ce paramètre est renseigné alors, le paramètre par défaut est ignoré.\n *\n * @param {String} [options.protocol] - Le protocole à utiliser pour récupérer les informations du service :\n * peut valoir 'JSONP' ou 'XHR'.\n * Par défaut, c'est le protocole XHR qui sera utilisé.\n * Attention, le protocole JSONP n'est pas valide dans un environnement NodeJS (Utilisation du mode XHR).\n *\n * @param {Boolean} [options.ssl] - Indique si l'on souhaite intérroger les services en https.\n * Ce paramètre ne fonctionne que pour une utilisation hors navigateur (ex. NodeJS).\n * Sur un navigateur, le protocole est automatiquement extrait de l'url du site...\n * Par défaut, on utilise le protocole http (ssl=false).\n *\n * @param {String} [options.proxyURL] - Le proxy à utiliser pour pallier au problème de cross-domain dans le cas d'une requête XHR.\n * Utile si le paramètre 'protocol' vaut 'XHR', il ne sera pas pris en compte si protocol vaut JSONP.\n *\n * @param {String} [options.callbackSuffix] - Suffixe de la fonction de callback à utiliser, dans le cas du protocole JSONP.\n * Par défaut, la fonction de callback portera un nom du type \"callback\"+ID, où ID est soit un identifiant unique généré à chaque requête,\n * soit le paramètre callbackSuffix s'il est spécifié. Par exemple, si callbackSuffix=\"_2\", la fonction sera \"callback_2 ()\".\n * Utile pour utiliser une réponse déjà encapsulée dans une fonction de callback, dont le nom est connu\n * Utile seulement si le paramètre 'protocol' vaut 'JSONP', il ne sera pas pris en compte si protocol vaut 'XHR'.\n *\n * @param {String} [options.httpMethod] - La méthode HTTP\n * à utiliser dans le cas d'une requête XHR : peut valoir 'GET' ou 'POST'.\n * Non pris en compte si 'protocol' vaut JSONP qui fonctionne obligatoirement en GET.\n * Par défaut, c'est la méthode GET qui est utilisée.\n *\n * @param {String} [options.contentType] - Content-Type de la requete\n * à utiliser dans le cas d'une requête XHR en mode POST.\n * Non pris en compte si 'protocol' vaut JSONP et/ou la méthode HTTP vaut GET.\n * Par défaut, c'est la méthode GET qui est utilisée donc on n'utilise pas de Content-Type.\n *\n * @param {Number} [options.timeOut] - Délai d'attente maximal (en ms) de la réponse du service (à partir de l'envoi de la requête).\n * Par défaut, aucun timeOut n'est pris en compte (timeoutDelay= 0).\n *\n * @param {Boolean} [options.rawResponse] - Indique si l'on souhaite que la réponse du service ne soit pas parsée par l'API avant d'être restituée.\n * (Cf. paramètre « onSuccess » pour plus de détails).\n *\n * @param {Function} [options.onSuccess] - Fonction appelée lorsque le service répond correctement à la requête\n * (code HTTP 200, sans message d'erreur).\n * Cette fonction prend en paramètre la réponse du service,\n * soit sous la forme d'un Object Javascript formaté par le parseur dédié à la syntaxe du service (comportement par défaut) ;\n * soit brute au format String non prétraité si le paramètre « rawResponse » a été précisé avec la valeur « true ».\n *\n * @param {Function} [options.onFailure] - Fonction appelée lorsque le service ne répond pas correctement\n * (code HTTP de retour différent de 200 ou pas de réponse).\n *\n * @param {Function} [options.onBeforeParse] - Fonction appelée avant le parsing de la réponse\n * Permet de modifier la réponse avant parsing et la fonction doit retourner une String.\n * Cette fonction prend en paramètre la réponse telle que renvoyée par le service\n * (cad au format json ou xml).\n * Pour le JSONP, si le paramètre \"rawResponse\" a été précisé avec la valeur \"true\",\n * la fonction prend en paramètre un Object JavaScript contenant la réponse XML.\n *\n * @example\n * var options = {\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * ssl : false,\n * proxyURL : null,\n * callbackName : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * onBeforeParse : function (rawResponse) {}\n * };\n */\nfunction CommonService (options) {\n if (!(this instanceof CommonService)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\"));\n }\n\n this.logger = Logger.getLogger(\"CommonService\");\n this.logger.trace(\"[Constructeur CommonService (options)]\");\n\n // #####################\n // récupération des options par défaut pour les paramètres optionnels\n // #####################\n\n /**\n * Options du service\n * @type {Object}\n */\n this.options = {\n // protocol : \"JSONP\",\n protocol : \"XHR\",\n ssl : true,\n proxyURL : \"\",\n // callbackName : \"\",\n callbackSuffix : null,\n httpMethod : \"GET\",\n timeOut : 0,\n rawResponse : false,\n scope : this,\n /**\n * callback par defaut pour la reponse\n * @param {Object} response - response\n * @private\n */\n onSuccess : function (response) {\n console.log(\"onSuccess - la reponse est la suivante : \", response);\n },\n /**\n * callback par defaut pour les erreurs\n * @param {Object} error - error\n * @private\n */\n onFailure : function (error) {\n if (error.status === 200 || !error.status) {\n console.log(\"onFailure : \", error.message);\n } else {\n console.log(\"onFailure - Erreur (\", error.status, \") : \", error.message);\n }\n }\n };\n\n // et on ajoute les options en paramètre aux options par défaut\n for (var opt in options) {\n if (options.hasOwnProperty(opt)) {\n this.options[opt] = options[opt];\n }\n }\n\n // #####################\n // analyse des options\n // #####################\n\n // modification de la fonction de callback onSuccess dans le cas où la réponse brute est demandée\n if (this.options.rawResponse && !this.options.onSuccess) {\n /**\n * callback par defaut pour la reponse\n * @param {Object} response - response\n * @private\n */\n this.options.onSuccess = function (response) {\n console.log(\"onSuccess - la réponse brute du service est la suivante : \", response);\n };\n }\n\n // gestion du callback onSuccess\n var bOnSuccess = !!(this.options.onSuccess !== null && typeof this.options.onSuccess === \"function\");\n if (!bOnSuccess) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"onSuccess()\"));\n }\n\n // gestion de la methode HTTP\n this.options.httpMethod = (typeof options.httpMethod === \"string\") ? options.httpMethod.toUpperCase() : \"GET\";\n\n switch (this.options.httpMethod) {\n case \"POST\":\n case \"GET\":\n break;\n case \"PUT\":\n case \"DELETE\":\n case \"HEAD\":\n case \"OPTIONS\":\n throw new Error(_.getMessage(\"PARAM_NOT_SUPPORT\", \"httpMethod\"));\n default:\n throw new Error(_.getMessage(\"PARAM_UNKNOWN\", \"httpMethod\"));\n }\n\n // gestion du protocole\n // this.options.protocol = (typeof options.protocol === \"string\" ) ? options.protocol.toUpperCase() : \"JSONP\";\n this.options.protocol = (typeof options.protocol === \"string\") ? options.protocol.toUpperCase() : \"XHR\";\n\n switch (this.options.protocol) {\n case \"JSONP\":\n case \"XHR\":\n break;\n default:\n throw new Error(_.getMessage(\"PARAM_UNKNOWN\", \"protocol\"));\n }\n\n // on determine l'environnement d'execution : browser ou non ?\n // et on lance une exception sur l'utilisation du protocole JSONP pour nodeJS...\n if (typeof window === \"undefined\" && this.options.protocol === \"JSONP\") {\n throw new Error(_.getMessage(\"PARAM_NOT_SUPPORT_NODEJS\", \"protocol=JSONP (instead use XHR)\"));\n }\n\n // le protocole JSONP ne fonctionne qu'en GET.\n if (this.options.protocol === \"JSONP\") {\n this.options.httpMethod = \"GET\";\n }\n\n // gestion du cache\n this.options.nocache = options.nocache || false;\n\n // #####################\n // attributs d'instances\n // #####################\n\n /**\n * Format de réponse du service\n */\n this.options.outputFormat = null;\n /**\n * Requête envoyée au service\n */\n this.request = null;\n /**\n * Reponse du service\n */\n this.response = null;\n}\n\n/**\n * @lends module:CommonService\n */\nCommonService.prototype = {\n\n /*\n * Constructeur (alias)\n */\n constructor : CommonService,\n\n /**\n * Appel du service Géoportail\n */\n call : function () {\n /* jshint validthis : true */\n this.logger.trace(\"CommonService::call ()\");\n\n var context = this;\n /** fonction d'execution */\n function run () {\n this.logger.trace(\"CommonService::run ()\");\n this.buildRequest.call(context, onError, onBuildRequest);\n }\n\n run.call(context);\n\n // callback de fin de construction de la requête\n function onBuildRequest (result) {\n this.logger.trace(\"CommonService::onBuildRequest : \", result);\n this.callService.call(context, onError, onCallService);\n }\n\n // callback de fin d'appel au service\n function onCallService (result) {\n this.logger.trace(\"CommonService::onCallService : \", result);\n this.analyzeResponse.call(context, onError, onAnalyzeResponse);\n }\n\n // callback de fin de lecture de la reponse\n function onAnalyzeResponse (result) {\n this.logger.trace(\"CommonService::onAnalyzeResponse : \", result);\n if (result) {\n this.options.onSuccess.call(this, result);\n } else {\n return onError.call(this, new ErrorService(\"Analyse de la reponse en échec !?\"));\n }\n }\n\n // callback de gestion des erreurs : renvoit un objet de type ErrorService\n function onError (error) {\n this.logger.trace(\"CommonService::onError()\");\n // error : l'objet est du type ErrorService ou Error\n var e = error;\n if (!(e instanceof ErrorService)) {\n e = new ErrorService(error.message);\n }\n this.options.onFailure.call(this, e);\n }\n },\n\n /**\n * Création de la requête\n * @param {Function} error - callback\n * @param {Function} success - callback\n */\n buildRequest : function (error, success) {\n // INFO\n this.logger.error(\"overwritten method !\");\n // retourne l'objet 'this.request'\n if (error) {\n error.call(this, \"This method must be overwritten !\");\n }\n success.call(this, \"This method must be overwritten !\");\n },\n\n /**\n * Appel du service\n * @param {Function} error - callback\n * @param {Function} success - callback\n */\n callService : function (error, success) {\n // INFO\n // retourne l'objet 'this.response'\n\n // NOTES\n // Pour le mode XHR, on recupère une reponse sous forme d'un json ou xml (#document).\n // Pour le mode JSONP, on a toujours un objet JSON mais sous 2 formes :\n // - natif\n // - XML encapsulé :\n // {http : {status:200, error:null},xml :'réponse du service'}\n // {http : {status:400, error:'reponse du service'},xml :null}\n // En XHR, la reponse est directement sauvegardée dans 'this.response'.\n // Par contre, en JSONP, on doit analyser la reponse (status ou non vide),\n // et ne renvoyer que le contenu (xml ou l'objet)\n\n // gestion de la proxification du service\n var strUrlProxified = null;\n var strData = this.request;\n\n // a t on mis en place un proxy ?\n // la proxyfication est valable uniquement en mode XHR !\n var bUrlProxified = !!(this.options.proxyURL && this.options.protocol === \"XHR\");\n\n // rajout de l'option gpbibaccess\n // INFO : acces au numero de version de package.conf aprés compilation !\n var requestMetaOptions = {\n \"gp-access-lib\" : Pkg.version\n };\n\n if (this.options.apiKey) {\n requestMetaOptions.apiKey = this.options.apiKey;\n }\n\n this.options.serverUrl = Helper.normalyzeUrl(this.options.serverUrl, requestMetaOptions, false);\n\n // si le proxy est renseigné, on proxifie l'url du service\n if (bUrlProxified) {\n if (this.options.httpMethod === \"GET\") {\n strUrlProxified = this.options.proxyURL + Helper.normalyzeUrl(this.options.serverUrl, this.request, true);\n strData = null;\n }\n\n if (this.options.httpMethod === \"POST\") {\n strUrlProxified = this.options.proxyURL + Helper.normalyzeUrl(this.options.serverUrl, null, true);\n strData = this.request;\n }\n }\n\n // contexte du composant spécifique !\n var self = this;\n\n var options = {\n url : strUrlProxified || this.options.serverUrl,\n method : this.options.httpMethod,\n protocol : this.options.protocol,\n timeOut : this.options.timeOut || 0,\n format : this.options.outputFormat, // ceci declenche le parsing de la reponse du service, mais on souhaite toujours une reponse brute (string) !\n nocache : this.options.nocache || false, // ceci permet d'ajouter un timestamp dans la requête\n wrap : this.options.protocol !== \"XHR\", // ceci declenche l'encapsulation de la reponse XML du service dans du JSON, mais pas en mode XHR !\n callbackSuffix : this.options.callbackSuffix,\n // callbackName : this.options.callbackName || null,\n data : strData,\n headers : null, // TODO...\n content : this.options.contentType || \"application/xml\",\n scope : this.options.scope || this,\n // callback de reponse\n onResponse : function (response) {\n self.logger.trace(\"callService::onResponse()\");\n\n // le contenu de la reponse à renvoyer !\n var content = null;\n\n // XHR : on renvoie toujours la reponse brute du service (json ou xml)\n // au parser du composant...\n if (self.options.protocol === \"XHR\") {\n self.logger.trace(\"Response XHR\", response);\n content = response; // par defaut, la reponse du service !\n }\n\n // JSONP : on pre-analyse la reponse brute du service (encapsuler ou pas)\n // avant de l'envoyer au parser du composant...\n if (self.options.protocol === \"JSONP\") {\n self.logger.trace(\"Response JSON\", response);\n if (response) {\n if (response.http) {\n // reponse encapsulée :\n // ex. reponse du service en xml\n // > {http : {status:200, error:null},xml :'réponse du service'}\n if (response.http.status !== 200) {\n error.call(self, new ErrorService({\n status : response.http.status,\n message : response.http.error,\n type : ErrorService.TYPE_SRVERR\n }));\n return;\n } else {\n content = response.xml; // par defaut !\n if (self.options.rawResponse) {\n content = response;\n }\n }\n } else {\n // reponse non encapsulée :\n // ex. reponse du service en json ou xml\n content = response;\n }\n } else {\n error.call(self, new ErrorService(\"Le contenu de la reponse est vide !?\"));\n return;\n }\n }\n\n // si on souhaite parser la reponse du service\n if (typeof self.options.onBeforeParse === \"function\") {\n var newResponse = self.options.onBeforeParse(content);\n if (typeof newResponse === \"string\") {\n // la reponse parsée par l'utilisateur est retournée sous\n // forme de string !\n content = newResponse;\n }\n }\n // sauvegarde de la reponse dans l'objet parent (CommonService)\n self.response = content;\n // on renvoie la reponse...\n success.call(self, content);\n },\n // callback des erreurs\n onFailure : function (e) {\n self.logger.trace(\"callService::onFailure()\");\n // on est forcement sur une erreur levée par un service !\n e.type = ErrorService.TYPE_SRVERR;\n error.call(self, new ErrorService(e));\n },\n // callback de timeOut\n onTimeOut : function () {\n self.logger.trace(\"callService::onTimeOut()\");\n error.call(self, new ErrorService(\"TimeOut!\"));\n }\n };\n\n Protocol.send(options);\n },\n\n /**\n * Analyse de la réponse\n * @param {Function} error - callback\n * @param {Function} success - callback\n */\n analyzeResponse : function (error, success) {\n // INFO\n this.logger.error(\"overwritten method !\");\n // retourne l'objet spécifique au type de composant (json)\n if (error) {\n error.call(this, \"This method must be overwritten !\");\n }\n success.call(this, \"This method must be overwritten !\");\n }\n\n};\n\nexport default CommonService;\n","import Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport ConfigInterface from \"./ConfigInterface\";\n\n/**\n * @classdesc\n *\n * Recupération de la configuration de clés Géoportail sous forme de JSON\n *\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.Config\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n * @param {Sting} options.apiKey - clé(s) dont on veut obtenir la configuration. Si plusieurs clés, séparer chacune par une virgule\n * @param {Boolean} [options.sync=false] - force le mode synchrone\n * @param {String} options.customConfigFile - chemin vers un fichier de configuration personnalisé. Surcharge le paramètre apiKey.\n * @see Gp.Services.GetConfigInterface\n *\n * @example\n * var options = {\n * apiKey : \"cartes,ortho\",\n * sync : false,\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * };\n *\n */\nfunction Config (options) {\n if (!(this instanceof Config)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"Config\"));\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"Config\";\n\n this.logger = Logger.getLogger(\"Gp.Config\");\n this.logger.trace(\"[Constructeur Config (options)]\");\n\n // #####################\n // analyse des options\n // #####################\n\n // gestion du callback onSuccess\n var bOnSuccess = !!(options.onSuccess !== null && typeof options.onSuccess === \"function\");\n if (!bOnSuccess) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"onSuccess()\"));\n }\n if (!options.apiKey && !options.customConfigFile) {\n // si pas de thème spécifié, on récupère toutes les ressources possibles dans l'objet Config\n options.apiKey = \"full\";\n }\n this.options = {};\n this.options.onSuccess = options.onSuccess;\n this.options.onFailure = options.onFailure;\n\n // mode sync\n this.options.sync = options.sync || false;\n\n // gestion d'un tableau d'url des fichiers de configuration\n this.options.listConfigUrls = (options.customConfigFile)\n ? [options.customConfigFile]\n : !Array.isArray(options.apiKey)\n ? DefaultUrlService.Config.url(options.apiKey.split(\",\"))\n : DefaultUrlService.Config.url(options.apiKey);\n}\n\n/**\n * @lends module:Config#\n */\nConfig.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/**\n * Constructeur (alias)\n */\nConfig.prototype.constructor = Config;\n\n/**\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n * @overload\n */\nConfig.prototype.buildRequest = function (error, success) {\n // liste des urls des fichiers de configuration en JSON\n this.listConfigUrls = this.options.listConfigUrls;\n\n if (!this.listConfigUrls) {\n error.call(this, new Error(\"url by default not found !\"));\n return;\n }\n\n // INFO :\n // il n'y a pas de construction de requête,\n // on passe directement à l'appel des requêtes\n success.call(this, this.listConfigUrls);\n};\n\n/**\n * Récupération des configuration\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n * @overload\n */\nConfig.prototype.callService = function (error, success) {\n if (this.options.sync) {\n __callServiceSync.call(this, error, success);\n } else {\n __callService.call(this, error, success);\n }\n};\n\n/**\n * Requêtes en mode asynchrone\n *\n * @param {*} error\n * @param {*} success\n * @private\n */\nvar __callService = function (error, success) {\n // liste des resultats au format JSON\n this.listConfigResults = [];\n\n // test on env. nodejs or browser\n let Fetch = null;\n if (typeof window === \"undefined\") {\n var nodefetch = require(\"node-fetch\");\n Fetch = nodefetch;\n } else {\n Fetch = window.fetch;\n }\n\n // the factory of fetch !\n var fetchFactory = (url) => {\n return Fetch(url, { credentials : \"same-origin\" })\n .then((response) => {\n if (response.ok) {\n return response.json()\n .then((json) => {\n // TODO :\n // tester le contenu !\n return json;\n })\n .catch((error) => {\n throw new Error(\"Exception Json : \" + error);\n });\n } else {\n throw new Error(\"Exception HTTP : \" + response.status + \" (status code) !\");\n }\n })\n .catch((error) => {\n return new Promise((resolve, reject) => {\n // eslint-disable-line no-unused-vars\n reject(error);\n });\n });\n };\n\n // construction des promises fetch\n var promises = [];\n for (let index = 0; index < this.listConfigUrls.length; index++) {\n const url = this.listConfigUrls[index];\n promises.push(fetchFactory(url));\n }\n\n Promise.all(promises)\n .then((results) => {\n if (!results) {\n throw new Error(\"results config empty !?\");\n }\n results.forEach((result) => {\n // TODO :\n // verification des resultats\n this.listConfigResults.push(result);\n });\n })\n .then(() => {\n success.call(this, this.listConfigResults);\n })\n .catch((e) => {\n // TODO :\n // construction d'un message\n error.call(this, e);\n });\n};\n\n/**\n * Requêtes en mode synchrone\n *\n * @param {*} error\n * @param {*} success\n * @private\n */\nvar __callServiceSync = function (error, success) {\n // liste des resultats au format JSON\n this.listConfigResults = [];\n\n // FIXME :\n // boucle synchrone !\n for (var i = 0; i < this.listConfigUrls.length; i++) {\n const url = this.listConfigUrls[i];\n // TODO :\n // prévoir le CORS, headers, ...\n const request = new XMLHttpRequest();\n request.open(\"GET\", url, false);\n request.send(null);\n if (request.status === 200) {\n // TODO :\n // tester la reponse !\n var response = JSON.parse(request.responseText);\n this.listConfigResults.push(response);\n }\n }\n // callback\n if (this.listConfigResults.length !== 0) {\n success.call(this, this.listConfigResults);\n } else {\n error.call(this, new Error(\"...\"));\n }\n};\n\n/**\n * Analyse et mise en forme de la réponse en fusionnant les configurations\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n * @overload\n */\nConfig.prototype.analyzeResponse = function (error, success) {\n // fonction de merge des objects JSON\n var mergeConfig = function (objects) {\n // objet fusion des couches\n var allLayersConfig = {};\n // objet fusion des clés\n var allKeysConfig = {};\n // objet fusion des TMS\n var allTMSConfig = {};\n\n // on fusionne les résultat\n for (var i = 0; i < objects.length; i++) {\n if (!objects[i].generalOptions || !objects[i].layers) {\n return;\n }\n allKeysConfig = {\n ...allKeysConfig,\n ...objects[i].generalOptions.apiKeys\n };\n allLayersConfig = {\n ...allLayersConfig,\n ...objects[i].layers\n };\n allTMSConfig = {\n ...allTMSConfig,\n ...objects[i].tileMatrixSets\n };\n }\n\n var mergedConfig = {\n generalOptions : {\n apiKeys : allKeysConfig\n },\n layers : allLayersConfig,\n tileMatrixSets : allTMSConfig\n };\n return mergedConfig;\n };\n\n // fusion des configurations JSON\n var ConfigJSON = mergeConfig(this.listConfigResults);\n if (!ConfigJSON) {\n error.call(this, new Error(\"configuration structure not conforme !\"));\n return;\n }\n\n // creation des interfaces\n var IConfig = new ConfigInterface();\n // ajout des interfaces avec la configuration JSON\n Object.assign(IConfig, ConfigJSON);\n\n // définition de la variable globale Gp.Config\n var scope = typeof window !== \"undefined\" ? window : {};\n if (!scope.Gp) {\n scope.Gp = {};\n }\n\n // enregistrement\n if (scope.Gp.Config) {\n Object.assign(scope.Gp.Config, IConfig);\n // dans le doute..., ceinture et bretelles !\n for (var property in IConfig) {\n scope.Gp.Config[property] = IConfig[property];\n }\n } else {\n scope.Gp.Config = IConfig;\n }\n\n // INFO :\n // il n'y a pas d'analyse des résultats,\n // on passe directement à l'appel de la callback utilisateur\n success.call(this, scope.Gp.Config);\n};\n\nexport default Config;\n","\n/**\n * Response object for {@link module:Services~getConfig Gp.Services.getConfig ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Object} generalOptions - General properties for default map configuration resources.\n * @property {Object} generalOptions.apiKeys - Object that associates apiKey (s) with an array of resources IDs availables with that key.\n * @property {String} generalOptions.title - Underlying web service Title.\n * @property {String} generalOptions.defaultGMLGFIStyle - XSL URL used by default to translate an XML GetFeatureInfo response into an HTML array.\n * @property {String} generalOptions.theme - default theme (FIXME : for what ?)\n * @property {Array.} generalOptions.wgs84Resolutions - geographical resolutions Array for each [zoom level of the Geoportal platform]{@link http://api.ign.fr/tech-docs-js/webmaster/layers.html#Geoportal_resolutions} from 0 to 21. Expressed in degrees/pixel.\n * @property {Object} layers - Associative array mapping resources availables IDs (keys) with their properties (values given as {@link Gp.Services.Config.Layer}).\n * @property {Object} tileMatrixSets - Associative Array mapping TileMatrixSets IDs (keys) availables with their properties (values given as {@link Gp.Services.Config.TileMatrixSet}).\n *\n * @namespace\n * @alias Gp.Services.GetConfigInterface\n */\nfunction ConfigInterface () {\n if (!(this instanceof ConfigInterface)) {\n throw new TypeError(\"ConfigInterface constructor cannot be called as a function.\");\n }\n\n this.generalOptions = {\n apiKeys : {},\n title : null,\n defaultGMLGFIStyle : null,\n theme : null,\n wgs84Resolutions : []\n };\n\n this.layers = {};\n\n this.tileMatrixSets = {};\n}\n\nConfigInterface.prototype = {\n\n /*\n * Constructor (alias)\n */\n constructor : ConfigInterface,\n\n /**\n * Check if config is loaded for a given key\n *\n * @param {String} apiKey - Access key to Geoportal platform\n * @returns {Boolean} isKeyConfLoaded - true if config of the key is already loaded, false otherwise\n */\n isKeyConfLoaded : function (apiKey) {\n if (!apiKey) {\n return;\n }\n if (this.generalOptions.apiKeys[apiKey]) {\n return true;\n }\n return false;\n },\n\n /**\n * Returns an array of Geoportal layers identifiers, corresponding to an API contract key.\n *\n * @param {String} apiKey - Access key to Geoportal platform\n * @returns {Array} apiKeys - Array of geoportal layers identifiers\n */\n getLayersId : function (apiKey) {\n return this.generalOptions.apiKeys[apiKey];\n },\n\n /**\n * Returns the id of a Geoportal layer with its name and its service.\n *\n * @param {String} layerName - name of the layer (ex. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {String} service - name of the service (ex. \"WMS\" ou \"WMTS\")\n * @returns {String} Id of the layer (ex. \"ORTHOIMAGERY.ORTHOPHOTOS$GEOPORTAIL:OGC:WMTS\")\n */\n getLayerId : function (layerName, service) {\n if (!layerName || !service) {\n return;\n }\n var layerId = null;\n\n // layer\n // key : [layerName]$[contexte]:OGC:[service]\n // ex : \"ORTHOIMAGERY.ORTHOPHOTOS$GEOPORTAIL:OGC:WMTS\"\n\n // service\n // key : [layerName]$[contexte];[service]\n // ex : PositionOfInterest$OGC:OPENLS;ReverseGeocode\n\n if (this.layers) {\n var layers = this.layers;\n for (var key in layers) {\n if (layers.hasOwnProperty(key)) {\n var parts = key.split(\"$\");\n if (layerName === parts[0]) {\n if (parts[1]) {\n var servicePartsLayer = parts[1].split(\":\");\n var servicePartsService = parts[1].split(\";\");\n\n if (servicePartsService[1] === service.toUpperCase()) {\n layerId = key;\n break;\n }\n if (servicePartsLayer[2] === service.toUpperCase()) {\n layerId = key;\n break;\n }\n }\n }\n }\n }\n }\n if (!layerId) {\n return;\n }\n return layerId;\n },\n\n /**\n * Returns an associative array of Geoportal layers configurations, corresponding to an API contract key.\n * If no key is specified, all layers from configuration are returned.\n *\n * @param {String} apiKey - Access key to Geoportal platform\n * @returns {Object} layers - Object which properties are layers identifiers.\n */\n getLayersConf : function (apiKey) {\n var layers = {};\n var layersIdArray = this.getLayersId(apiKey);\n if (layersIdArray) {\n for (var i = 0; i < layersIdArray.length; i++) {\n var lyrId = layersIdArray[i];\n layers[lyrId] = this.layers[lyrId];\n }\n }\n return layers;\n },\n\n /**\n * Returns a geoportal layer configuration, given its identifier\n *\n * @param {String} layerId - Geoportal layer identifier (e.g. \"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\")\n * @return {Object} layer - Layer configuration\n * @see Gp.Services.Config.Layer\n */\n getLayerConf : function (layerId) {\n if (!this.layers) {\n return;\n }\n return this.layers[layerId];\n },\n\n /**\n * Get all parameters needed to display a WFS, WMS or WMTS layer given its name, its service and its key\n *\n * @param {String} layerName - name of the layer (ex. \"ORTHOIMAGERY.ORTHOPHOTOS\")\n * @param {String} service - name of the service (ex. \"WMS\" ou \"WMTS\")\n * @param {String} [apiKey] - Contract API key\n * @returns {Object} params - params of the service (WFS, WMS or WMTS) for the given layer\n * @returns {String} params.url - Url of the service to reach to display the layer\n * @returns {String} params.version - Version of the service\n * @returns {String} params.styles - Default style of the layer\n * @returns {String} params.format - Default format of the layer\n * @returns {String} params.projection - Default projection of the layer\n * @returns {Number} params.minScale - Min scale denominator of the layer\n * @returns {Number} params.maxScale - Max scale denominator of the layer\n * @returns {Gp.BBox} params.extent - Extent of the layer, in the projection of the layer\n * @returns {Array} params.legends - Array of legends associated to the layer\n * @returns {Array} params.title - Name of the layer, readable by a human\n * @returns {Array} params.description - Description of the layer\n * @returns {String} params.[TMSLink] - Id of the Tile Matrix Set (TMS), in the case of WMTS layer\n * @returns {Gp.Point} params.[matrixOrigin] - Originof the tile matrix (top left corner), in the case of WMTS layer\n * @returns {Array} params.[nativeResolutions] - Array with the resolution of each level of the tile matrix set, in the case of WMTS layer\n * @returns {Array} params.[matrixIds] - Array with the ID of each level of the tile matrix set, in the case of WMTS layer\n */\n getLayerParams : function (layerName, service) {\n var params = {};\n\n if ((service === \"WMS\" || Object.keys(this.tileMatrixSets).length !== 0) && Object.keys(this.layers).length !== 0) {\n // get the layerId of the layer\n var layerId = this.getLayerId(layerName, service);\n\n if (layerId) {\n // get the layer Conf Object\n var layerConf = this.getLayerConf(layerId);\n\n var keys = this.getLayerKey(layerId);\n if (keys.length === 0) {\n return;\n }\n\n // get services params\n for (var i = 0; i < keys.length; i++) {\n // only one serverUrl is saved in Gp.Config : with multiKeys, we have to retrieve the key used in the serverUrl property\n if (layerConf.serviceParams.serverUrl[keys[i]]) {\n params.url = layerConf.serviceParams.serverUrl[keys[i]];\n }\n }\n\n if (service !== \"WFS\") {\n const wmsTypeRegex = /\\/v\\//;\n // WMS vector style always empty (not in getCap)\n if (wmsTypeRegex.test(params.url)) {\n params.styles = \" \";\n } else {\n // WMS raster style is defined in getCap\n params.styles = layerConf.styles[0].name;\n }\n }\n\n params.version = layerConf.serviceParams.version;\n params.format = (layerConf.formats && layerConf.formats.length) ? layerConf.formats[0].name : \"\";\n params.projection = layerConf.defaultProjection;\n\n // get layer info and constraints\n params.minScale = layerConf.globalConstraint.minScaleDenominator;\n params.maxScale = layerConf.globalConstraint.maxScaleDenominator;\n params.extent = layerConf.globalConstraint.bbox;\n params.legends = layerConf.legends;\n params.title = layerConf.title;\n params.description = layerConf.description;\n\n if (service === \"WMS\") {\n params.metadata = layerConf.metadata;\n }\n\n // Informations non disponibles avec les getCap\n // params.metadata = layerConf.getMetadata();\n // params.originators = layerConf.getOriginators();\n // params.quicklookUrl = layerConf.getQuicklookUrl();\n\n // WMTS : get the tileMatrixSetLimits\n if (layerConf.wmtsOptions) {\n params.tileMatrixSetLimits = layerConf.wmtsOptions.tileMatrixSetLimits;\n var TMSLink = layerConf.wmtsOptions.tileMatrixSetLink;\n if (TMSLink) {\n params.TMSLink = TMSLink;\n var tmsConf = this.getTMSConf(TMSLink);\n // Get matrix origin : Gp.Point = Object{x:Float, y:Float}\n // params.matrixOrigin = tmsConf.getTopLeftCorner();\n params.matrixIds = Object.keys(tmsConf.tileMatrices);\n params.tileMatrices = tmsConf.tileMatrices;\n // by default, pseudo mercator resolutions\n params.nativeResolutions = tmsConf.nativeResolutions || this.getTMSConf(\"PM\").nativeResolutions;\n }\n }\n }\n }\n return params;\n },\n\n /**\n * Get the contract key(s) associated to a given layer.\n *\n * @param {String} layerId - Geoportal layer identifier (e.g. \"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\")\n * @return {Array} layerKey - array of key(s) associated to the given layer\n */\n getLayerKey : function (layerId) {\n var layerKey = [];\n if (this.generalOptions && this.generalOptions.apiKeys && Object.keys(this.generalOptions.apiKeys).length !== 0) {\n var resourcesByKey = this.generalOptions.apiKeys;\n for (var key in resourcesByKey) {\n var resourcesArray = resourcesByKey[key];\n resourcesArray.forEach(function (arrayLayerId) {\n if (arrayLayerId === layerId) {\n layerKey.push(key);\n }\n });\n }\n }\n return layerKey;\n },\n\n /**\n * Returns an associative array of Tile Matrix Sets configurations.\n *\n * @return {Object} tileMatrixSets - Object which properties are TMS identifiers\n *\n */\n getTileMatrixSets : function () {\n return this.tileMatrixSets;\n },\n\n /**\n * Returns a Tile Matrix Sets configuration, given its identifier.\n *\n * @param {String} tmsID - Tile Matrix Set identifier (e.g. : \"PM\")\n * @return {Object} tileMatrixSet - Tile Matrix Set configuration\n * @see Gp.Services.Config.TileMatrixSet\n */\n getTMSConf : function (tmsID) {\n if (!this.tileMatrixSets) {\n return;\n }\n return this.tileMatrixSets[tmsID];\n },\n\n /**\n * Get global constraints for a given Layer : extent, minScale, maxScale, projection\n *\n * @param {String} layerId - Geoportal layer identifier (e.g. \"GEOGRAPHICALGRIDSYSTEMS.MAPS$GEOPORTAIL:OGC:WMTS\")\n * @returns {Object} params - layer constraints\n * @returns {String} params.projection - default layer projection\n * @returns {Number} params.minScale - layer min scale denominator\n * @returns {Number} params.maxScale - layer max scale denominator\n * @returns {Gp.BBox} params.extent - layer extent expressed in the layer projection\n */\n getGlobalConstraints : function (layerId) {\n var params = {};\n\n if (layerId) {\n // get layer configuration object\n var layerConf = this.getLayerConf(layerId);\n params.projection = layerConf.defaultProjection;\n params.minScale = layerConf.globalConstraint.minScaleDenominator;\n params.maxScale = layerConf.globalConstraint.maxScaleDenominator;\n params.extent = layerConf.globalConstraint.bbox;\n }\n\n return params;\n }\n\n};\n\nexport default ConfigInterface;\n","// cette classe contient les URLs par defaut des services.\n// DefaultUrlService.Alti.url(key)[elevation-json]\n// DefaultUrlService.Alti.url(key)[elevation-xml]\n// DefaultUrlService.Alti.url(key)[profil-json]\n// DefaultUrlService.Alti.url(key)[profil-xml]\n// DefaultUrlService.ProcessIsoCurve.url(key)\n// DefaultUrlService.AutoComplete.url(key)\n// DefaultUrlService.ReverseGeocode.url(key)\n// DefaultUrlService.Geocode.url(key)\n// DefaultUrlService.Route.url(key)\n\n// Example :\n//\n// DefaultUrlService.Alti.url('alti')[elevation-json]\n// output {String} -> http://wxs.ign.fr/calcul/alti/rest/elevation.json\n//\n// DefaultUrlService.Alti.url('calcul')\n// output {Object|String}\n// -> http://wxs.ign.fr/calcul/alti/rest/elevation.json\n// -> http://wxs.ign.fr/calcul/alti/rest/elevation.xml\n// -> http://wxs.ign.fr/calcul/alti/rest/elevationLine.json\n// -> http://wxs.ign.fr/calcul/alti/rest/elevationLine.xml\n//\n// ssl by default.\n//\n// Force to not do ssl :\n// DefaultUrlService.ssl = false;\n//\n// DefaultUrlService.AutoComplete.url('calcul')\n// output {Object|String}\n// -> https://wxs.ign.fr/calcul/ols/apis/completion\n\n/**\n * Default Geoportal web services URLs access.\n *\n * @namespace\n * @alias Gp.Services.DefaultUrl\n */\nvar DefaultUrlService = {\n\n /** if set true, require the use of https protocol */\n ssl : true,\n\n /**\n * base new-url of geoplateforme services (ssl protocol management)\n * @param {String} path - path\n * @returns {String} url\n */\n newUrl : function (path) {\n var NEW_GPF_HOSTNAME = \"data.geopf.fr\";\n\n // comportement par défaut => https\n // sinon, il est fixé par l'option 'ssl' (false => http)\n var _protocol;\n if (DefaultUrlService.ssl === false) {\n _protocol = \"http://\";\n } else {\n _protocol = \"https://\";\n }\n\n return _protocol + NEW_GPF_HOSTNAME + path;\n },\n\n /**\n * Elevation web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns elevation service default urls with or without geoportal access key given as a parameter. The result is a javascript object with different urls given used protocols (\"elevation-json\", \"elevation-xml\", \"profil-json\" or \"profil-xml\").\n */\n Alti : {\n new_key : {\n // rest\n \"elevation-json\" : \"/altimetrie/1.0/calcul/alti/rest/elevation.json\",\n \"elevation-xml\" : \"/altimetrie/1.0/calcul/alti/rest/elevation.xml\",\n \"profil-json\" : \"/altimetrie/1.0/calcul/alti/rest/elevationLine.json\",\n \"profil-xml\" : \"/altimetrie/1.0/calcul/alti/rest/elevationLine.xml\"\n },\n\n /**\n * newurl from geoplateforme service\n * @param {String} key - key\n * @returns {String} url\n */\n newUrl : function () {\n return {\n // rest\n \"elevation-json\" : DefaultUrlService.newUrl(this.new_key[\"elevation-json\"]),\n \"elevation-xml\" : DefaultUrlService.newUrl(this.new_key[\"elevation-xml\"]),\n \"profil-json\" : DefaultUrlService.newUrl(this.new_key[\"profil-json\"]),\n \"profil-xml\" : DefaultUrlService.newUrl(this.new_key[\"profil-xml\"])\n };\n }\n },\n /**\n * IsoCurve web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns isocurve service default urls with or without geoportal access key given as a parameter. The result is a javascript object with different urls given used protocols (\"iso-json\" or \"iso-xml\").\n */\n ProcessIsoCurve : {\n\n new_key : \"/navigation/isochrone\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Config web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns config service default urls with or without geoportal access key given as a parameter.\n */\n Config : {\n _key : \"https://raw.githubusercontent.com/IGNF/geoportal-configuration/new-url/dist/\",\n /**\n * url\n * @param {String} key - key\n * @returns {String} url\n */\n url : function (key) {\n // key must be an array of one or several keys\n if (!Array.isArray(key)) {\n key = key.split(\",\");\n }\n // not homogeneous with others geoportal services URLs\n var url = [];\n for (var i = 0; i < key.length; i++) {\n url[i] = this._key + key[i] + \"Config.json\";\n }\n return url;\n }\n },\n /**\n * Autocompletion web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns autocomplete service default urls with or without geoportal access key given as a parameter. The result is a String.\n */\n AutoComplete : {\n new_key : \"/geocodage/completion\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Reverse geocoding web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns reverse geocoding service default urls with or without geoportal access key given as a parameter. The result is a String.\n */\n ReverseGeocode : {\n new_key : \"/geocodage/reverse\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Geocoding web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns geocoding service default urls with or without geoportal access key given as a parameter. The result is a String.\n */\n Geocode : {\n new_key : \"/geocodage/search\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n },\n /**\n * Routing web service access\n *\n * @member {Object}\n * @property {Function} url (key) - Returns routing service default urls with or without geoportal access key given as a parameter. The result is a javascript object with different urls given used protocols.\n */\n Route : {\n new_key : \"/navigation/itineraire\",\n\n /**\n * url from geoplateforme service\n * @returns {String} url\n */\n newUrl : function () {\n return DefaultUrlService.newUrl(this.new_key);\n }\n }\n};\n\nexport default DefaultUrlService;\n","// import Logger from \"../../../Utils/LoggerByDefault\";\nimport MR from \"../../../Utils/MessagesResources\";\nimport ErrSrv from \"../../../Exceptions/ErrorService\";\nimport GeocodeResponse from \"../Response/model/GeocodeResponse\";\nimport GeocodedLocation from \"../Response/model/GeocodedLocation\";\n\n/**\n * Fonction retournant un objet contenant des clés de lecture (readers)\n * qui permettent de parser des réponses XML du service de géocodage direct du Géoportail\n * afin de récupérer les résultats retournés.\n * @module GeocodeResponseParser\n * @alias Gp.Services.Geocode.Formats.GeocodeResponseParser\n * @private\n */\n\n/**\n * @classdesc\n *\n * Classe permettant de parser une réponse GeoJSON\n *\n * @constructor\n * @alias Gp.Formats.GeocodeResponseParser\n *\n * @private\n */\nfunction GeocodeResponseParser () {\n if (!(this instanceof GeocodeResponseParser)) {\n throw new TypeError(\"GeocodeResponseParser constructor cannot be called as a function.\");\n }\n}\n\nGeocodeResponseParser.prototype = {\n\n /**\n * @lends module:GeocodeResponseParser\n */\n\n /*\n * Constructeur (alias)\n */\n constructor : GeocodeResponseParser,\n\n /**\n * Méthode permettant de lancer la lecture d'une réponse GeoJSON,\n *\n * @param {String} json - réponse au format GeoJSON\n * @return {Object} geocodeResponse|exceptionReport : l'objet contenant les informations de la réponse GeoJSON,\n * sous la forme d'un objet GeocodeResponse, ou un objet littéral exceptionReport si le service a renvoyé une exception.\n */\n parse : function (json) {\n var geocodeResponse = new GeocodeResponse();\n\n const obj = JSON.parse(json);\n\n if (obj.type === \"FeatureCollection\") {\n for (var i = 0; i < obj.features.length; ++i) {\n _parseFeature(obj.features[i], geocodeResponse);\n }\n } else if (obj.type === \"Feature\") {\n _parseFeature(obj, geocodeResponse);\n } else if (obj.type === \"SERVICE_ERROR\") {\n return _parseError(obj);\n } else {\n var mess = MR.getMessage(\"SERVICE_RESPONSE_ANALYSE\", obj.type);\n throw new ErrSrv({\n message : mess,\n type : ErrSrv.TYPE_UNKERR,\n status : 200\n });\n }\n\n return geocodeResponse;\n }\n};\n\n/**\n * Méthode permettant de parser un feature\n *\n * @private\n *\n * @param {Object} feature\n * @param {Object} geocodeResponse\n *\n * @memberof GeocodeResponseParser\n * @return {Object} objet GeocodedLocation\n */\nfunction _parseFeature (feature, geocodeResponse) {\n var location = new GeocodedLocation();\n if (feature.geometry && feature.geometry.type === \"Point\") {\n location.position = {\n lon : feature.geometry.coordinates[0],\n lat : feature.geometry.coordinates[1]\n };\n }\n if (feature.properties) {\n for (var prop in feature.properties) {\n if (prop === \"score\") {\n location.accuracy = feature.properties[prop];\n } else if (prop === \"_type\") {\n if (feature.properties[prop] === \"address\") {\n location.type = \"StreetAddress\";\n } else if (feature.properties[prop] === \"poi\") {\n location.type = \"PositionOfInterest\";\n } else if (feature.properties[prop] === \"parcel\" || feature.properties[prop] === \"cadastral\") {\n location.type = \"CadastralParcel\";\n }\n } else {\n location.placeAttributes[prop] = feature.properties[prop];\n }\n }\n if (feature.properties._type === \"address\") {\n location.matchType = feature.properties.number !== undefined && feature.properties.number !== null ? \"street number\" : \"street\";\n }\n }\n geocodeResponse.locations.push(location);\n}\n\n/**\n * Méthode permettant de parser une erreur\n *\n * @private\n *\n * @param {Object} error\n *\n * @memberof GeocodeResponseParser\n * @return {Object}\n */\nfunction _parseError (error) {\n return {\n exceptionReport : error\n };\n}\n\nexport default GeocodeResponseParser;\n","import Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport GeocodeRequestFactory from \"./Request/GeocodeRequestFactory\";\nimport GeocodeResponseFactory from \"./Response/GeocodeResponseFactory\";\n\n/**\n * @classdesc\n * Appel du service de géocodage direct du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n *\n *\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.Geocode\n *\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String|Object} options.query - Nom de l'adresse, du toponyme, de l'unité administrative ou de la parcelle cadastrale recherchée.\n *\n * @param {Object} [options.filters] - Les propriétés possibles de cet objet sont décrites ci-après.\n * @param {String} [options.filters.[prop]] - Critère supplémentaire pour filtrer la recherche sous la forme\n * d'un couple clé/valeur à définir selon les possibilités du serveur ajouté à la requête.\n * Le service de géocodage du Géoportail permet de filtrer les adresses postales avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"city\".\n * Il permet également de filtrer les toponymes avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"type\".\n * Enfin, il permet de filtrer les parcelles cadastrales avec les propriétés :\n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n *\n * @param {String} [options.index = \"StreetAddress\"] - Type de l'objet recherché.\n * Le service de géocodage du Géoportail permet de rechercher des 'PositionOfInterest' pour des toponymes, des 'StreetAddress'\n * pour des adresses postales ou des 'CadastralParcel' pour des parcelles cadastrales.\n * L'index 'location' regroupe les indexes 'StreetAddress' et 'PositionOfInterest'.\n * D'autres types pourront être rajoutés selon l'évolution du service.\n * Par défaut, index = 'StreetAddress'.\n *\n * @param {Object} options.position - Position du point de référence pour le calcul de proximité exprimée dans le système de référence spécifié par le srs.\n * @param {Float} options.position.lon - Longitude du point de référence pour le calcul de proximité.\n * @param {Float} options.position.lat - Latitude du point de référence pour le calcul de proximité.\n *\n * @param {Number} [options.maximumResponses] - Nombre de réponses maximal que l'on souhaite recevoir.\n * Pas de valeur par défaut.\n * Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 20.\n *\n * @param {Boolean} [options.returnTrueGeometry = false] - Booléen indiquant si l'on souhaite récupérer la géométrie vraie des objects géolocalisés.\n * false par défaut.\n *\n *\n * @example\n * var options = {\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * proxyURL : null,\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * position : {lon:, lat:},\n * index : 'StreetAddress',\n * query : '10 rue du pont Machin-ville'\n * (...)\n * };\n */\nfunction Geocode (options_) {\n if (!(this instanceof Geocode)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"Geocode\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"Geocode\";\n\n this.logger = Logger.getLogger(\"Gp.Services.Geocode\");\n this.logger.trace(\"[Constructeur Geocode (options)]\");\n\n var options = this.patchOptionConvertor(options_);\n if (!options.serverUrl) {\n options.serverUrl = DefaultUrlService.Geocode.newUrl();\n }\n\n // appel du constructeur par heritage\n CommonService.apply(this, [options]);\n\n if (!options.hasOwnProperty(\"query\")) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"query\"));\n }\n\n // ajout des options spécifiques au service\n this.options.query = options.query;\n\n // on definit l'index par defaut\n if (!options.index) {\n this.options.index = options.index = \"StreetAddress\";\n }\n\n if (options.filters) {\n var filter = Object.keys(options.filters);\n for (var i = 0; i < filter.length; i++) {\n var key = filter[i];\n // on supprime les filtres vides\n if (typeof options.filters[key] === \"undefined\" ||\n (typeof options.filters[key] === \"object\" && Object.keys(options.filters[key]).length === 0) ||\n (typeof options.filters[key] === \"string\" && options.filters[key].length === 0) ||\n (Array.isArray(options.filters[key]) && options.filters[key].length === 0)\n ) {\n delete this.options.filters[key];\n }\n }\n }\n\n this.options.index = options.index || \"StreetAddress\";\n this.options.maximumResponses = options.maximumResponses || 20;\n}\n\n/**\n * @lends module:Geocode#\n */\nGeocode.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nGeocode.prototype.constructor = Geocode;\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} options_ - options du service\n * @return {Object} - options\n */\nGeocode.prototype.patchOptionConvertor = function (options_) {\n const options = options_;\n\n if (options.hasOwnProperty(\"location\")) {\n this.logger.warn(\"The parameter 'location' is deprecated\");\n\n if (!options.query) {\n options.query = options.location;\n }\n delete options.location;\n }\n\n if (options.filterOptions) {\n this.logger.warn(\"The parameter 'filterOptions' is deprecated\");\n\n if (!options.filters) {\n options.filters = options.filterOptions;\n\n if (options.filters.type) {\n this.logger.warn(\"The parameter 'filterOptions.type' is deprecated\");\n if (!options.index) {\n if (Array.isArray(options.filters.type) && options.filters.type.length > 0) {\n options.index = options.filters.type[0];\n } else {\n options.index = options.filters.type;\n }\n }\n delete options.filters.type;\n }\n\n if (options.filters.bbox) {\n this.logger.warn(\"The parameter 'filterOptions.bbox' is deprecated\");\n delete options.filters.bbox;\n }\n }\n delete options.filterOptions;\n }\n\n if (options.position) {\n if (options.position.x) {\n this.logger.warn(\"The parameter 'position.x' is deprecated\");\n\n if (!options.position.lon) {\n options.position.lon = options.position.x;\n }\n delete options.position.x;\n }\n\n if (options.position.y) {\n this.logger.warn(\"The parameter 'position.y' is deprecated\");\n\n if (!options.position.lat) {\n options.position.lat = options.position.y;\n }\n delete options.position.y;\n }\n }\n\n if (options.returnFreeForm) {\n this.logger.warn(\"The parameter 'returnFreeForm' is deprecated\");\n delete options.returnFreeForm;\n }\n\n if (options.srs) {\n this.logger.warn(\"The parameter 'srs' is deprecated\");\n delete options.srs;\n }\n\n return options;\n};\n\n/**\n * Création de la requête (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nGeocode.prototype.buildRequest = function (error, success) {\n var options = {\n httpMethod : this.options.httpMethod,\n // options specifiques du service\n geocodeMethod : \"search\",\n query : this.options.query,\n index : this.options.index,\n returnTrueGeometry : this.options.returnTrueGeometry,\n position : this.options.position,\n maxResp : this.options.maximumResponses,\n filters : this.options.filters\n };\n\n this.request = GeocodeRequestFactory.build(options);\n\n // on teste si la requete a bien été construite !\n (!this.request)\n ? error.call(this, new ErrorService(_.getMessage(\"SERVICE_REQUEST_BUILD\")))\n : success.call(this, this.request);\n};\n\n/**\n * Analyse de la reponse (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nGeocode.prototype.analyzeResponse = function (error, success) {\n /* INFO :\n Etape 1 : Création de la requête (URL)\n -> stockage de la requête dans this.request\n Etape 2 : Envoi de la requête\n -> appel du protocol XHR, et envoi (par ex send ())\n -> récupération de la réponse JSON dans la fonction onSuccess () (this.response)\n -> si code HTTP 200 et pas de message d'erreur : etape 3\n -> si code HTTP != 200 : lancement de la fonction de callback onFailure avec le message d'erreur\n Etape 3 : Analyse de la réponse JSON (si rawResponse === false )\n -> appel du parser pour récupérer le document\n Etape 4 : Lancement de la fonction de callback onSuccess avec la réponse :\n -> JSON (si rawResponse === true)\n -> ou geocodedLocations\n */\n\n if (this.response) {\n var options = {\n response : this.response,\n rawResponse : this.options.rawResponse,\n onError : error,\n onSuccess : success,\n scope : this\n };\n\n GeocodeResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default Geocode;\n","import Logger from \"../../../Utils/LoggerByDefault\";\nimport GeocodeRequestREST from \"./GeocodeRequestREST\";\n\n/**\n * Creation d'une requête\n * (Factory)\n *\n * @module GeocodeRequestFactory\n * @alias Gp.Services.Geocode.Request.GeocodeRequestFactory\n * @private\n */\nvar GeocodeRequestFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Geocode\n *\n * @example\n * var options = {\n * // options specifiques du service\n * geocodeMethod:\n * query:\n * filters:\n * maximumResponses:\n * };\n * var result = GeocodeRequestFactory.build(options);\n * if (!result) {\n * // error...\n * }\n * @returns {String} request\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"GeocodeRequestFactory\");\n logger.trace([\"GeocodeRequestFactory::build()\"]);\n\n var settings = options || {};\n\n var myReq = new GeocodeRequestREST(settings);\n if (!myReq.processRequestString()) {\n throw new Error(\"Error process request (rest) !\");\n }\n var request = myReq.requestString;\n\n logger.trace(request);\n\n return request;\n }\n};\n\nexport default GeocodeRequestFactory;\n","\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport GeocodeParamREST from \"./model/GeocodeParamREST\";\n\n/**\n * @classdesc\n * Classe de gestion des requêtes de type REST sur le service de calcul d'itineraire\n * (uniquement en GET)\n *\n * @constructor\n * @alias Gp.Services.Geocode.Request.GeocodeRequestREST\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * var options = {\n * (...)\n * };\n *\n * @private\n */\nfunction GeocodeRequestREST (options) {\n this.logger = Logger.getLogger(\"GeocodeRequestREST\");\n this.logger.trace(\"[Constructeur GeocodeRequestREST ()]\");\n\n if (!(this instanceof GeocodeRequestREST)) {\n throw new TypeError(\"GeocodeRequestREST constructor cannot be called as a function.\");\n }\n\n // existance des options\n if (!options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n /** liste des options */\n this.settings = options;\n}\n\nGeocodeRequestREST.prototype = {\n\n /**\n * @lends module:GeocodeRequestREST#\n */\n\n /**\n * request\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : GeocodeRequestREST,\n\n /**\n * Construction de la requête.\n *\n * @returns {String} request\n */\n processRequestString : function () {\n var request = \"\";\n\n // Mapping des options avec le service de l'API REST\n const oParams = new GeocodeParamREST(this.settings);\n\n const params = oParams.getParams();\n for (var i = 0; i < params.length; i++) {\n var o = params[i];\n if (request) {\n request += \"&\";\n }\n request += o.k + \"=\" + o.v;\n }\n\n if (!this.settings.geocodeMethod || (this.settings.geocodeMethod !== \"search\" && this.settings.geocodeMethod !== \"reverse\")) {\n throw new Error(\"Error geocodeMethod not valid\");\n }\n\n this.requestString = \"?\" + request;\n this.logger.trace(this.requestString);\n\n return this.requestString;\n }\n};\n\nexport default GeocodeRequestREST;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes du service de calcul d'itineraire (REST).\n * Permet le mapping avec les options du service.\n * @constructor\n * @alias Gp.Services.Route.Request.RouteParamREST\n * @param {Object} options - options\n *\n * @private\n */\nfunction GeocodeParamREST (options) {\n if (!(this instanceof GeocodeParamREST)) {\n throw new TypeError(\"GeocodeParamREST constructor cannot be called as a function.\");\n }\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur GeocodeParamREST ()]\");\n\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n // methode de geocodage\n if (!this.options.geocodeMethod || (this.options.geocodeMethod !== \"search\" && this.options.geocodeMethod !== \"reverse\")) {\n throw new Error(\"Error geocodeMethod not valid\");\n }\n this.geocodeMethod = this.options.geocodeMethod;\n\n // mapping des options avec l'API REST\n this.query = (typeof this.options !== \"undefined\") ? this.options.query : null;\n\n this.searchGeometry = this.options.searchGeometry || null;\n\n this.index = this.options.index || null;\n\n this.lon = this.options.position && this.options.position.lon ? this.options.position.lon : null;\n\n this.lat = this.options.position && this.options.position.lat ? this.options.position.lat : null;\n\n this.maxResp = this.options.maxResp || null;\n\n this.returnTrueGeometry = this.options.returnTrueGeometry || null;\n\n this.filters = this.options.filters || {};\n}\n\n/**\n * CLASSNAME\n */\nGeocodeParamREST.CLASSNAME = \"GeocodeParamREST\";\n\nGeocodeParamREST.prototype = {\n\n /**\n * @lends module:GeocodeParamREST#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor : GeocodeParamREST,\n\n /**\n * Retourne les filtres\n * @returns {String} les filtres\n */\n getFilters : function () {\n var filters = {};\n for (var prop in this.filters) {\n if (this.filters.hasOwnProperty(prop)) {\n filters[prop] = this.filters[prop];\n }\n }\n return filters;\n },\n\n /**\n * Retourne l'index\n * @returns {String} l'index\n */\n getIndex : function () {\n if (this.index === undefined) {\n return null;\n }\n if (this.index === \"StreetAddress\") {\n return \"address\";\n } else if (this.index === \"CadastralParcel\") {\n return \"parcel\";\n } else if (this.index === \"PositionOfInterest\") {\n return \"poi\";\n } else if (this.index === \"location\") {\n return \"location\";\n }\n return this.index;\n },\n\n /**\n * Retourne la géométrie de recherche\n * @returns {String} la géométrie de recherche au format json\n */\n getSearchGeometry : function () {\n return JSON.stringify(this.searchGeometry);\n }\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Array} liste de paramêtres\n */\nGeocodeParamREST.prototype.getParams = function () {\n var map = [];\n\n if (this.geocodeMethod === \"search\") {\n map.push({\n k : \"q\",\n v : this.query\n });\n }\n\n if (this.index) {\n map.push({\n k : \"index\",\n v : this.getIndex()\n });\n }\n\n if (this.geocodeMethod === \"reverse\" && this.searchGeometry) {\n map.push({\n k : \"searchgeom\",\n v : this.getSearchGeometry()\n });\n }\n\n if (this.lon && this.lat) {\n map.push({\n k : \"lon\",\n v : this.lon\n });\n map.push({\n k : \"lat\",\n v : this.lat\n });\n }\n\n if (this.maxResp) {\n map.push({\n k : \"limit\",\n v : this.maxResp\n });\n }\n\n if (this.returnTrueGeometry) {\n map.push({\n k : \"returntruegeometry\",\n v : this.returnTrueGeometry\n });\n }\n\n const filters = this.getFilters();\n for (var key in filters) {\n map.push({\n k : key,\n v : filters[key]\n });\n }\n\n return map;\n};\n\nexport default GeocodeParamREST;\n","/**\n * Factory pour générer une reponse JSON à partir d'un XML\n * (Factory)\n *\n * @module GeocodeResponseFactory\n * @alias Gp.Services.Geocode.Response.GeocodeResponseFactory\n * @private\n */\n// import Logger from \"../../../Utils/LoggerByDefault\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport GeocodeResponseParser from \"../Formats/GeocodeResponseParser\";\n\nvar GeocodeReponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Geocode\n *\n * @example\n * var options = {\n * response :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // data de type GeocodeResponse\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n data = options.response;\n } else {\n try {\n const parser = new GeocodeResponseParser();\n data = parser.parse(options.response);\n\n if (!data) {\n throw new Error(\"L'analyse de la réponse du service !?\");\n }\n } catch (e) {\n var message = e.message;\n if (typeof options.response === \"string\") {\n message += \"('\" + options.response + \"')\";\n } else {\n message += \"('\" + options.response.documentElement.innerHTML + \"')\";\n }\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE\", message),\n type : ErrorService.TYPE_UNKERR,\n status : -1\n }));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type : ErrorService.TYPE_SRVERR,\n status : 200 // FIXME : 200 ?\n }));\n return;\n }\n }\n } else {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\"),\n type : ErrorService.TYPE_SRVERR,\n status : -1 // FIXME : status response\n }));\n return;\n }\n\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default GeocodeReponseFactory;\n","\n/**\n * Response object for {@link module:Services~geocode Gp.Services.geocode ()} or {@link module:Services~reverseGeocode Gp.Services.reverseGeocode ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Array.} locations - locations array.\n *\n * @namespace\n * @alias Gp.Services.GeocodeResponse\n */\nfunction GeocodeResponse () {\n if (!(this instanceof GeocodeResponse)) {\n throw new TypeError(\"GeocodeResponse constructor cannot be called as a function.\");\n }\n\n this.locations = [];\n}\n\nGeocodeResponse.prototype = {\n\n constructor : GeocodeResponse\n\n};\n\nexport default GeocodeResponse;\n","\n/**\n * Single location object returned by the underlying geocoding web service.\n *\n * @property {Gp.Point} position - Position of the location given in the requested coordinates system.\n * @property {String} type - location type \"StreetAddress\" (for an address), \"PositionOfInterest\" (for a place name) or \"CadastralParcel\" (for cadastral parcel).\n * @property {String} matchType - how geocoding is performed : \"street number\" (exact address), \"street enhanced\" (street number calculated by interpolation), \"street\" (only the street), \"city\" (only the city).\n * @property {Float} accuracy - Accuracy of the response towards the requested location between 0 (unaccurate) and 1 (exact match).\n * @property {Object} placeAttributes - Associative array matching the following attributes with their values given by the underlying web service :\n *\n * *Common attributes : *\n *\n * - **trueGeometry** - the 'real life' geometry if different from 'Point' type.\n *\n * *if type === \"StreetAddress\" :*\n *\n * - **number** - Street number.\n * - **postalCode** - PostCode\n * - **street** - Street name\n * - **city** - City\n * - **houseNumberInfos** - additional street number information\n * - **inseeCode** - INSEE Code\n *\n *\n * *if type === \"PositionOfInterest\" :*\n *\n * - **type** - Place name type\n * - **postalCode** - PostCode\n * - **toponyme** - Toponyme\n * - **extraFields** - additional place name properties\n * - **inseeCode** - INSEE Code\n *\n *\n * *si type = \"CadastralParcel\" :*\n *\n * - **codeCommuneAbs** - when a parcel comes from a city that was absorbed by another, code of that old city. \"000\" otherwise.\n * - **codeArrondissement** - arrondissement\n * - **identifiant** - cadastral parcel code\n * - **feuille** - Parcel Sheet (eg. \"1\").\n * - **numero** - Parcel Number (eg. \"0041\")\n * - **section** - Parcel Section (eg. \"0D\").\n * - **nomCommune** - Parcel municipality name.\n * - **codeCommune** - Parcel municipality.\n * - **codeDepartement** - Parcel Department.\n *\n * @namespace\n * @alias Gp.Services.Geocode.GeocodedLocation\n */\nfunction GeocodedLocation () {\n if (!(this instanceof GeocodedLocation)) {\n throw new TypeError(\"GeocodedLocation constructor cannot be called as a function.\");\n }\n\n this.position = null;\n\n this.matchType = null;\n\n this.placeAttributes = {};\n\n this.type = null;\n\n this.accuracy = null;\n\n /**\n * Nom de la classe : \"GeocodedLocation\"\n * @type {String}\n */\n this.CLASSNAME = \"GeocodedLocation\";\n}\n\nGeocodedLocation.prototype = {\n\n constructor : GeocodedLocation\n\n};\n\nexport default GeocodedLocation;\n","import Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport GeocodeRequestFactory from \"./Request/GeocodeRequestFactory\";\nimport GeocodeResponseFactory from \"./Response/GeocodeResponseFactory\";\n\n/**\n * @classdesc\n * Appel du service de géocodage inverse du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.ReverseGeocode\n *\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {Object} options.position - Position du point de référence pour le calcul de proximité exprimée dans le système de référence spécifié par le srs.\n * @param {Float} options.position.lon - Longitude du point de référence pour le calcul de proximité.\n * @param {Float} options.position.lat - Latitude du point de référence pour le calcul de proximité.\n *\n * @param {Object} [options.filters] - Les propriétés possibles de cet objet.\n * @param {String} [options.filters.[proprietes du filtre]] - Critère supplémentaire pour filtrer la recherche sous la forme\n * d'un couple clé/valeur à définir selon les possibilités du serveur ajouté à la requête.\n * Le service de géocodage du Géoportail permet de filtrer les adresses postales avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"city\".\n * Il permet également de filtrer les toponymes avec les propriétés :\n * \"postalCode\", \"inseeCode\", \"type\".\n * Enfin, il permet de filtrer les parcelles cadastrales avec les propriétés :\n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n *\n * @param {Object} [options.searchGeometry] - Emprise dans laquelle on souhaite effectuer la recherche.\n * Les propriétés possibles de cet objet sont décrites ci-après.\n * @param {String} options.searchGeometry.type - Type de géometrie (Point|Circle|Linestring|Polygon)\n * @param {Array.|Array.Array.} options.searchGeometry.coordinates - Coordonnées des points constituant la géométrie.\n * @param {Float} options.searchGeometry.radius - Rayon. Paramètre applicable uniquement pour le type 'Circle'.\n *\n * @param {String} [options.index = \"StreetAddress\"] - Type de l'objet recherché.\n * Le service de géocodage du Géoportail permet de rechercher des 'PositionOfInterest' pour des toponymes, des 'StreetAddress'\n * pour des adresses postales ou des 'CadastralParcel' pour des parcelles cadastrales. L'index 'location' permet une recherche\n * multi-indexes en regroupant les indexes 'PositionOfInterest' et 'StreetAddress'.\n * D'autres types pourront être rajoutés selon l'évolution du service.\n * Par défaut, index = 'StreetAddress'.\n *\n * @param {Number} [options.maximumResponses] - Nombre de réponses maximal que l'on souhaite recevoir.\n * Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 20s.\n *\n * @param {Boolean} [options.returnTrueGeometry] - Booléen indiquant si l'on souhaite récupérer la géométrie vraie des objects géolocalisés.\n * false par défaut.\n *\n * @example\n * var options = {\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * proxyURL : null,\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * index : 'StreetAddress',\n * searchGeometry : {\n * type : Circle,\n * coordinates : [48, 2],\n * radius : 100\n * },\n * position : {lon:2 , lat:48.5},\n * maximumResponses : 25,\n * };\n *\n */\nfunction ReverseGeocode (options_) {\n if (!(this instanceof ReverseGeocode)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"ReverseGeocode\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"ReverseGeocode\";\n\n this.logger = Logger.getLogger(\"Gp.Services.ReverseGeocode\");\n this.logger.trace(\"[Constructeur ReverseGeocode (options)]\");\n\n var options = this.patchOptionConvertor(options_);\n if (!options.serverUrl) {\n options.serverUrl = DefaultUrlService.ReverseGeocode.newUrl();\n }\n\n // appel du constructeur par heritage\n CommonService.apply(this, [options]);\n\n if (!options.searchGeometry) {\n if (!options.position) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"searchGeometry\"));\n }\n } else {\n this.options.searchGeometry = options.searchGeometry;\n }\n\n // on definit l'index par defaut\n if (!options.index) {\n this.options.index = options.index = \"StreetAddress\";\n }\n\n if (options.filters) {\n var filter = Object.keys(options.filters);\n for (var i = 0; i < filter.length; i++) {\n var key = filter[i];\n // on supprime les filtres vides\n if (typeof options.filters[key] === \"undefined\" ||\n (typeof options.filters[key] === \"object\" && Object.keys(options.filters[key]).length === 0) ||\n (typeof options.filters[key] === \"string\" && options.filters[key].length === 0) ||\n (Array.isArray(options.filters[key]) && options.filters[key].length === 0)\n ) {\n delete this.options.filters[key];\n }\n }\n }\n\n this.options.position = options.position;\n this.options.index = options.index || \"StreetAddress\";\n this.options.maximumResponses = options.maximumResponses || 20;\n}\n\n/**\n * @lends module:ReverseGeocode#\n */\nReverseGeocode.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nReverseGeocode.prototype.constructor = ReverseGeocode;\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} options_ - options du service\n * @return {Object} - options\n */\nReverseGeocode.prototype.patchOptionConvertor = function (options_) {\n var options = options_;\n\n if (options.filterOptions) {\n this.logger.warn(\"The parameter 'filterOptions' is deprecated\");\n\n if (options.filterOptions.type) {\n this.logger.warn(\"The parameter 'filterOptions.type' is deprecated\");\n if (!options.index) {\n if (Array.isArray(options.filterOptions.type) && options.filterOptions.type.length > 0) {\n options.index = options.filterOptions.type[0];\n } else {\n options.index = options.filterOptions.type;\n }\n }\n delete options.filterOptions.type;\n }\n\n if (options.filterOptions.bbox) {\n this.logger.warn(\"The parameter 'filterOptions.bbox' is deprecated\");\n if (!options.searchGeometry) {\n // convertir la geometrie\n options.searchGeometry = this.bbox2Json(options.filterOptions.bbox);\n }\n delete options.filterOptions.bbox;\n }\n\n if (options.filterOptions.circle) {\n this.logger.warn(\"The parameter 'filterOptions.circle' is deprecated\");\n if (!options.searchGeometry) {\n // convertir la geometrie\n options.searchGeometry = this.circle2Json(options.filterOptions.circle);\n }\n delete options.filterOptions.circle;\n }\n\n if (options.filterOptions.polygon) {\n this.logger.warn(\"The parameter 'filterOptions.polygon' is deprecated\");\n if (!options.searchGeometry) {\n // convertir la geometrie\n options.searchGeometry = this.polygon2Json(options.filterOptions.polygon);\n }\n delete options.filterOptions.polygon;\n }\n\n if (!options.filters && Object.keys(options.filterOptions).length > 0) {\n options.filters = options.filterOptions;\n }\n\n delete options.filterOptions;\n }\n\n if (options.position) {\n if (options.position.x) {\n this.logger.warn(\"The parameter 'position.x' is deprecated\");\n\n if (!options.position.lon) {\n options.position.lon = options.position.x;\n }\n delete options.position.x;\n }\n\n if (options.position.y) {\n this.logger.warn(\"The parameter 'position.y' is deprecated\");\n\n if (!options.position.lat) {\n options.position.lat = options.position.y;\n }\n delete options.position.y;\n }\n }\n\n if (options.srs) {\n this.logger.warn(\"The parameter 'srs' is deprecated\");\n delete options.srs;\n }\n\n return options;\n};\n\n/**\n * (overwrite)\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nReverseGeocode.prototype.buildRequest = function (error, success) {\n var options = {\n httpMethod : this.options.httpMethod,\n // options specifiques du service\n geocodeMethod : \"reverse\",\n searchGeometry : this.options.searchGeometry,\n index : this.options.index,\n position : this.options.position,\n returnTrueGeometry : this.options.returnTrueGeometry,\n maxResp : this.options.maximumResponses,\n filters : this.options.filters\n };\n\n this.request = GeocodeRequestFactory.build(options);\n\n // on teste si la requete a bien été construite !\n (!this.request)\n ? error.call(this, new ErrorService(_.getMessage(\"SERVICE_REQUEST_BUILD\")))\n : success.call(this, this.request);\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nReverseGeocode.prototype.analyzeResponse = function (error, success) {\n if (this.response) {\n var options = {\n response : this.response,\n rawResponse : this.options.rawResponse,\n onError : error,\n onSuccess : success,\n scope : this\n };\n\n GeocodeResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Array} bbox - bbox\n * @return {Object} - geometrie au format json\n */\nReverseGeocode.prototype.bbox2Json = function (bbox) {\n return {\n type : \"Polygon\",\n coordinates : [[\n [bbox.left, bbox.top],\n [bbox.right, bbox.top],\n [bbox.right, bbox.bottom],\n [bbox.left, bbox.bottom],\n [bbox.left, bbox.top]\n ]]\n };\n};\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Object} circle - circle\n * @return {Object} - geometrie au format json\n */\nReverseGeocode.prototype.circle2Json = function (circle) {\n return {\n type : \"Circle\",\n radius : circle.radius,\n coordinates : [circle.x, circle.y]\n };\n};\n\n/**\n * Patch pour la convertion des options vers le nouveau formalisme.\n *\n * @param {Array} polygon - polygon\n * @return {Object} - geometrie au format json\n */\nReverseGeocode.prototype.polygon2Json = function (polygon) {\n var jsonGeom = {\n type : \"Polygon\",\n coordinates : [[]]\n };\n\n for (var i = 0; i < polygon.length; ++i) {\n jsonGeom.coordinates[0].push([polygon[i].x, polygon[i].y]);\n }\n\n return jsonGeom;\n};\n\n/**\n * Codes EPSG géographiques (lat/lon). Utiles car les coordonnées doivent être inversées.\n */\nReverseGeocode.geoEPSG = [\"EPSG:4326\"];\n\nexport default ReverseGeocode;\n","\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport ProcessIsoCurveRequest from \"./Request/ProcessIsoCurveRequest\";\nimport ProcessIsoCurveResponseFactory from \"./Response/ProcessIsoCurveResponseFactory\";\n\n/**\n * @classdesc\n * Appel du service d'isochrone/distance du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @alias Gp.Services.ProcessIsoCurve\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String} options.resource - La ressource utilisée pour le calcul : bdtopo-valhalla (par défaut) ou bdtopo-pgr.\n *\n * @param {String} options.outputFormat - Le format de la réponse du service iso : 'json' uniquement et par défaut.\n *\n * @param {Object} options.position - Point de départ du calcul.\n * Coordonnées exprimées en longitudes, latitudes (EPSG:4326)\n * @param {Float} options.position.x - Abcisse du point de départ du calcul d'isochrone/distance.\n * @param {Float} options.position.y - Ordonnée du point de départ du calcul d'isochrone/distance.\n *\n * @param {String} options.srs - Projection.\n * Système de coordonnées dans lequel les coordonnées du point « location » sont exprimées et\n * dans lequel la géométrie de la courbe résultante sera exprimée.\n * Par défaut, le système de coordonnées utilisé sera « EPSG:4326 ».\n *\n * @param {String} [options.graph = \"voiture\"] - Nom du graphe à utiliser pour le calcul (« Pieton » ou « Voiture »).\n * La valeur par défaut est : «voiture»\n *\n * @param {Array.} [options.exclusions] - DEPRECATED: Ce paramètre est conservé pour une rétrocompatibilité de l'api. Le nouveau paramètre à utiliser est options.constraints.\n * Critères d'exclusions à appliquer pour le calcul.\n * On précise ici le type de tronçons que l'on ne veut pas que l'isochrone/distance emprunte\n * (valeurs possibles : « toll » (éviter les péages), « bridge », « tunnel »).\n *\n * @param {Object[]} [options.constraints] - Critères de contraintes à appliquer sur un itinéraire. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities.\n * @param {String} [options.constraints.constraintType] - Type de la contrainte. Généralement \"banned\".\n * @param {String} [options.constraints.key] - Clé de la contrainte. Généralement \"wayType\".\n * @param {String} [options.constraints.operator] - Opérateur de la contrainte. Généralement \"=\".\n * @param {String} [options.constraints.value] - Valeur de la contrainte. Généralement \"autoroute\".\n *\n * @param {String} [options.method = \"time\"] - Méthode utilisée pour le calcul de la courbe iso.\n * Les valeurs possible sont \"time\" pour un calcul d'isochrone, \"distance\" pour un calcul d'isodistance.\n * Pas de valeur spécifié équivaut à un calcul d'isochrone.\n *\n * @param {String} [options.distanceUnit = \"m\"] - Indique si la distance doit être exprimée en km ou m dans la réponse (\"m\" or \"km\").\n *\n * @param {String} [options.timeUnit = \"second\"] - Indique si la durée doit être exprimée en seconde, minute ou heure dans la réponse (\"standard\", \"second\", \"minute\", \"hour\"). Il peut-être formatté hh:mm::ss avec la valeur standard.\n *\n * @param {Float} options.time - Durée maximum (exprimée en secondes) à utiliser pour le calcul de la courbe à partir du ou jusqu'au point « location ».\n * Ce paramètre doit être renseigné si l'option \"méthod\" a la valeur \"time\".\n * Si l'option method n'est pas renseignée, ce paramètre doit être renseigné.\n *\n * @param {Float} options.distance - Distance maximum (exprimée en metres) à utiliser pour le calcul de la courbe à partir du ou j'usqu'au point « location ».\n * Ce paramètre doit être renseigné si l'option \"méthod\" a la valeur \"DISTANCE\".\n * Si l'option \"method\" n'est pas renseignée, ce paramètre sera ignoré.\n *\n * @param {Boolean} [options.reverse = false] - Indique si la géométrie résultante doit être lissée (« true ») pour ne pas avoir d'effet d'escalier.\n * Par défaut, la valeur « false » est appliquée.\n *\n * @param {Boolean} [options.smoothing = false] - Indique si la géométrie résultante doit être lissée (« true ») pour ne pas avoir d'effet d'escalier.\n * Par défaut, la valeur « false » est appliquée.\n *\n * @param {Boolean} [options.holes = false] - Indique si la géométrie résultante (surface) doit être retournée avec des trous (« true »).\n * Par défaut, la valeur « false » est appliquée.\n *\n * @example\n * var options = {\n * // options communes aux services\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'JSONP', // JSONP|XHR\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * position : {\n * x : 2.3242664298058053,\n * y : 48.86118017324745\n * },\n * resource : bdtopo-valhalla,\n * distance : 200,\n * [time : ]\n * method : \"distance\",\n * graph : \"voiture\",\n * reverse : false\n * };\n */\n\nfunction ProcessIsoCurve (options) {\n if (!(this instanceof ProcessIsoCurve)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"ProcessIsoCurve\"));\n }\n\n /**\n * Nom de la classe (heritage)\n * FIXME instance ou classe ?\n */\n this.CLASSNAME = \"ProcessIsoCurve\";\n\n // appel du constructeur par heritage\n CommonService.apply(this, arguments);\n\n this.logger = Logger.getLogger(\"Gp.Services.ProcessIsoCurve\");\n this.logger.trace(\"[Constructeur ProcessIsoCurve (options)]\");\n\n if (!options.position) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"position\"));\n }\n\n // on lance une exception afin d'eviter au service de le faire...\n if (options.position.x === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"position.x\"));\n }\n\n if (options.position.y === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"position.y\"));\n }\n\n if (!options.time && !options.distance) {\n throw new Error(\"Parameter (s) 'distance' missing. Parameter time to calculate an isochrone, parameter distance for an isodistance\");\n }\n\n // si on a que le paramètre \"distance\" en entrée, on calcule une isodistance.\n // Le paramètre \"méthode\" doit pour avoir une réponse du service, être passé à \"distance\"\n if (!options.time && options.distance) {\n this.options.method = \"distance\";\n // on supprime l'éventuel attribut time, résidu d'un appel antérieur\n if (this.options.time) {\n delete this.options.time;\n }\n }\n\n // si on a que le paramètre \"time\" en entrée, on calcule une isochrone.\n // Le paramètre \"méthode\" doit pour avoir une réponse du service, être passé à \"time\"\n if (options.time && !options.distance) {\n this.options.method = \"time\";\n // on supprime l'éventuel attribut time, résidu d'un appel antérieur\n if (this.options.distance) {\n delete this.options.distance;\n }\n }\n\n // au cas où on a ni l'un, ni l'autre...\n this.options.method = this.options.method || \"time\";\n\n // options par defaut du service\n // TODO: modifier la ressource lors de la mise en production du service\n this.options.resource = options.resource || \"bdtopo-valhalla\";\n this.options.exclusions = options.exclusions || [];\n this.options.reverse = options.reverse || false;\n this.options.srs = options.srs || \"EPSG:4326\";\n this.options.distanceUnit = options.distanceUnit || \"m\";\n this.options.timeUnit = options.timeUnit || \"second\";\n\n // options depreciees\n if (options.smoothing) {\n this.logger.warn(\"options.smoothing is DEPRECATED\");\n }\n this.options.smoothing = false;\n if (options.holes) {\n this.logger.warn(\"options.holes is DEPRECATED\");\n }\n this.options.holes = false;\n\n // Gestion du graphe\n if (options.graph) {\n if (options.graph === \"Voiture\") {\n this.options.graph = \"car\";\n }\n if (options.graph === \"Pieton\") {\n this.options.graph = \"pedestrian\";\n }\n } else {\n this.options.graph = \"car\";\n }\n\n // Gestions des contraintes\n this.options.constraints = [];\n if (options.constraints) {\n if (Array.isArray(options.constraints)) {\n for (var k = 0; k < options.constraints.length; k++) {\n this.options.constraints.push(options.constraints[k]);\n }\n } else {\n throw new Error(_.getMessage(\"PARAM_TYPE\", \"constraints\"));\n }\n }\n\n // Gestion de l'ancien paramètre exclusions\n var constraintTunnel = {};\n var constraintPont = {};\n var constraintAutoroute = {};\n if (options.exclusions) {\n if (options.exclusions.length !== 0) {\n this.logger.warn(\"options.exclusions is DEPRECATED !!\");\n for (var c = 0; c < options.exclusions.length; c++) {\n if (typeof options.exclusions[c] === \"string\") {\n options.exclusions[c] = options.exclusions[c].toLowerCase();\n } else {\n // on ne crée pas une erreur pour rétro-compatibilité avec les anciennes versions\n continue;\n }\n if (options.exclusions[c] === \"toll\") {\n constraintAutoroute.constraintType = \"banned\";\n constraintAutoroute.key = \"wayType\";\n constraintAutoroute.operator = \"=\";\n constraintAutoroute.value = \"autoroute\";\n this.options.constraints.push(constraintAutoroute);\n }\n if (options.exclusions[c] === \"tunnel\") {\n constraintTunnel.constraintType = \"banned\";\n constraintTunnel.key = \"wayType\";\n constraintTunnel.operator = \"=\";\n constraintTunnel.value = \"tunnel\";\n this.options.constraints.push(constraintTunnel);\n }\n if (options.exclusions[c] === \"bridge\") {\n constraintPont.constraintType = \"banned\";\n constraintPont.key = \"wayType\";\n constraintPont.operator = \"=\";\n constraintPont.value = \"pont\";\n this.options.constraints.push(constraintPont);\n }\n }\n }\n }\n\n // on passe l'option outputFormat en minuscules afin d'éviter des exceptions.\n this.options.outputFormat = (typeof options.outputFormat === \"string\") ? options.outputFormat.toLowerCase() : \"json\";\n if (options.outputFormat && options.outputFormat !== \"json\") {\n throw new Error(_.getMessage(\"PARAM_NOT_SUPPORT\", \"outputFormat\"));\n }\n this.options.outputFormat = \"json\";\n\n // gestion de l'url du service par defaut\n // si l'url n'est pas renseignée, il faut utiliser les urls par defaut\n if (!this.options.serverUrl) {\n var urlFound = DefaultUrlService.ProcessIsoCurve.newUrl();\n if (!urlFound) {\n throw new Error(\"Url by default not found !\");\n }\n this.options.serverUrl = urlFound;\n this.logger.trace(\"Serveur URL par defaut : \" + this.options.serverUrl);\n }\n}\n\n/**\n * @lends module:ProcessIsoCurve#\n */\nProcessIsoCurve.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nProcessIsoCurve.prototype.constructor = ProcessIsoCurve;\n\n/**\n * Création de la requête (overwrite)\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nProcessIsoCurve.prototype.buildRequest = function (error, success) {\n try {\n var oIsoCurve = new ProcessIsoCurveRequest(this.options);\n if (!oIsoCurve.processRequestString()) {\n throw new Error(_.getMessage(\"SERVICE_REQUEST_BUILD\"));\n }\n\n this.request = oIsoCurve.requestString;\n } catch (e) {\n error.call(this, new ErrorService(e.message));\n return;\n }\n\n success.call(this, this.request);\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} onError - callback des erreurs\n * @param {Function} onSuccess - callback de succès de l'analyse de la réponse\n */\nProcessIsoCurve.prototype.analyzeResponse = function (onError, onSuccess) {\n if (this.response) {\n var options = {\n response : this.response,\n outputFormat : this.options.outputFormat,\n rawResponse : this.options.rawResponse,\n onSuccess : onSuccess,\n onError : onError,\n scope : this\n };\n\n ProcessIsoCurveResponseFactory.build(options);\n } else {\n onError.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default ProcessIsoCurve;\n","\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport ProcessIsoCurveParam from \"./model/ProcessIsoCurveParam\";\n\n/**\n * @classdesc\n * Classe de gestion des requêtes sur le service de calcul d'isoschrone/isodistance.\n * Les requêtes peuvent être en mode GET ou POST,\n * et le format de sorti est en JSON.\n *\n * @constructor\n * @alias Gp.Services.ProcessIsoCurve.Request.ProcessIsoCurveRequest\n * @param {Object} options - options\n *\n * @example\n * var options = {\n * httpMethod : 'GET', // GET|POST\n * // spécifique au service\n * position : {\n * x : 2.3242664298058053,\n * y : 48.86118017324745\n * },\n * graph : \"car\",\n * method : 'time',\n * time : 1000, //distance : 200\n * reverse : false,\n * srs : 'EPSG:4326'\n * };\n *\n * try {\n *\n * var oIsoCurve = new ProcessIsoCurveRequest (options);\n * if (!oIsoCurve.processRequestString ()) {\n * // error\n * }\n *\n * var request = oIsoCurve.requestString;\n *\n * } catch (e) {\n * // error\n * }\n * @private\n */\nfunction ProcessIsoCurveRequest (options) {\n this.logger = Logger.getLogger(\"ProcessIsoCurveRequest\");\n this.logger.trace(\"[Constructeur ProcessIsoCurveRequest ()]\");\n\n if (!(this instanceof ProcessIsoCurveRequest)) {\n throw new TypeError(\"ProcessIsoCurveRequest constructor cannot be called as a function.\");\n }\n\n // existance des options\n if (!options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n /**\n * Liste des options\n */\n this.settings = options;\n\n /**\n * Mode HTPP.\n * Par defaut, \"GET\".\n * @type {String}\n */\n this.mode = this.settings.httpMethod || \"GET\";\n}\n\nProcessIsoCurveRequest.prototype = {\n\n /**\n * @lends module:ProcessIsoCurveRequest#\n */\n\n /**\n * Requête\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : ProcessIsoCurveRequest,\n\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out :\n * // (http://wxs.ign.fr/KEY/isochrone?)\n * // resource=&\n * // point=&\n * // costValue=&\n * // costType=&\n * // profile=&\n * // constraints=&\n * // direction=&\n * // crs=\n *\n * // POST out :\n * {\n * resource: \"bduni-idf-pgr\",\n * point: \"2.337306,48.849319\",\n * costValue: 100,\n * costType: \"time\",\n * profile: \"car\",\n * constraints: [{\n * constraintType: \"banned\",\n * key: \"ways_type\",\n * operator: \"=\",\n * value: \"autoroute\"\n * }]\n * }\n *\n * @returns {String} request\n */\n processRequestString : function () {\n var request = \"\";\n var i = 0;\n\n switch (this.mode) {\n case \"GET\":\n this.logger.trace(\"Process GET Request\");\n\n // Mapping des options avec le service de l'API REST\n var oParams = new ProcessIsoCurveParam(this.settings);\n var params = oParams.getParams();\n\n for (i = 0; i < params.length; i++) {\n var o = params[i];\n if (request) {\n request += \"&\";\n }\n request += o.k + \"=\" + o.v;\n }\n\n break;\n\n case \"POST\":\n this.logger.trace(\"Process POST Request\");\n // creation du JSON\n var postRequest = {};\n\n postRequest.resource = this.settings.resource;\n\n postRequest.point = this.settings.position.x + \",\" + this.settings.position.y;\n\n if (this.settings.method === \"distance\") {\n postRequest.costType = \"distance\";\n postRequest.costValue = this.settings.distance;\n } else {\n postRequest.costType = \"time\";\n postRequest.costValue = this.settings.time;\n }\n\n postRequest.profile = this.settings.graph;\n\n if (this.settings.reverse) {\n postRequest.direction = \"arrival\";\n } else {\n postRequest.direction = \"departure\";\n }\n\n postRequest.constraints = this.settings.constraints;\n\n postRequest.distanceUnit = this.settings.distanceUnit;\n\n postRequest.timeUnit = this.settings.timeUnit;\n\n postRequest.crs = this.settings.srs;\n\n // conversion en chaîne de caractères\n request = JSON.stringify(postRequest);\n break;\n\n default:\n this.logger.error(\"No other HTTP method supported by the service !\");\n }\n\n this.logger.trace(request);\n this.requestString = request;\n\n return this.requestString;\n }\n};\n\nexport default ProcessIsoCurveRequest;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n *\n * Classe de gestion des param. des requêtes du service de calcul des iso.\n * Permet le mapping avec les options du service.\n *\n * @constructor\n * @alias Gp.Services.ProcessIsoCurve.Request.ProcessIsoCurveParam\n * @param {Object} options - options\n * @private\n *\n */\nfunction ProcessIsoCurveParam (options) {\n if (!(this instanceof ProcessIsoCurveParam)) {\n throw new TypeError(\"ProcessIsoCurveParam constructor cannot be called as a function.\");\n }\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur ProcessIsoCurveParam ()]\");\n\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n // mapping des options avec l'API REST\n\n /** Identifiant de l’isochrone */\n this.id = this.options.id;\n\n /** Resource */\n this.resource = this.options.resource;\n\n /** Coordonnées de départ (ou arrivée si le reverse est à true). */\n this.point = this.options.position;\n\n /** projection (code EPSG comme epsg:4326 ou wgs84) */\n this.crs = this.options.srs;\n\n /**\n * Profil de véhicule à utiliser pour le calcul.\n * Voiture ou Pieton\n */\n this.profile = this.options.graph;\n\n /** Liste des règles de restrictions à utiliser */\n this.constraints = this.options.constraints;\n\n this.reverse = this.options.reverse;\n\n this.timeUnit = this.options.timeUnit;\n\n this.distanceUnit = this.options.distanceUnit;\n\n /**\n * \"time\" pour isochrone ou \"distance\" for isodistance.\n * Par defaut, time...\n */\n if (this.options.method === \"distance\") {\n this.costType = \"distance\";\n this.costValue = this.options.distance;\n if (this.distanceUnit === \"m\" && this.costValue >= 50000) {\n this.distanceUnit = \"km\";\n this.costValue /= 1000;\n }\n } else {\n this.costType = \"time\";\n this.costValue = this.options.time;\n }\n}\n\n/**\n * CLASSNAME\n */\nProcessIsoCurveParam.CLASSNAME = \"ProcessIsoCurveParam\";\n\nProcessIsoCurveParam.prototype = {\n\n /**\n * @lends module:ProcessIsoCurveParam#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor : ProcessIsoCurveParam,\n\n /**\n * Retourne le point\n * @returns {String} x,y\n */\n getLocation : function () {\n return this.point.x + \",\" + this.point.y;\n },\n\n /**\n * Retourne l'unité de la distance\n * @returns {String}\n */\n getDistanceUnit : function () {\n if (this.distanceUnit === \"m\") {\n return \"meter\";\n }\n if (this.distanceUnit === \"km\") {\n return \"kilometer\";\n }\n return \"\";\n },\n\n /**\n * Retourne la liste des contraintes\n * @returns {String}\n */\n getConstraints : function () {\n var constraintArray = [];\n\n if (this.constraints.length !== 0) {\n for (var k = 0; k < this.constraints.length; k++) {\n constraintArray.push(JSON.stringify(this.constraints[k]));\n }\n }\n return constraintArray.join(\"|\");\n },\n\n /**\n * Retourne la direction\n * @returns {String}\n */\n getDirection : function () {\n if (this.reverse) {\n return \"arrival\";\n } else {\n return \"departure\";\n }\n }\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Object[]} KVP\n */\nProcessIsoCurveParam.prototype.getParams = function () {\n var map = [];\n\n map.push({\n k : \"resource\",\n v : this.resource\n });\n\n map.push({\n k : \"point\",\n v : this.getLocation()\n });\n\n map.push({\n k : \"direction\",\n v : this.getDirection()\n });\n\n map.push({\n k : \"costType\",\n v : this.costType\n });\n\n map.push({\n k : \"costValue\",\n v : this.costValue\n });\n\n map.push({\n k : \"profile\",\n v : this.profile\n });\n\n map.push({\n k : \"timeUnit\",\n v : this.timeUnit\n });\n\n map.push({\n k : \"distanceUnit\",\n v : this.getDistanceUnit()\n });\n\n if (this.crs) {\n map.push({\n k : \"crs\",\n v : this.crs\n });\n }\n\n if (this.constraints) {\n map.push({\n k : \"constraints\",\n v : this.getConstraints()\n });\n }\n\n return map;\n};\n\nexport default ProcessIsoCurveParam;\n","import Logger from \"../../../Utils/LoggerByDefault\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport ProcessIsoCurveResponse from \"./model/ProcessIsoCurveResponse\";\n\n/**\n * Factory pour générer une reponse JSON à partir d'un JSON\n * (Factory)\n *\n * @module ProcessIsoCurveResponseFactory\n * @alias Gp.Services.ProcessIsoCurve.Response.ProcessIsoCurveResponseFactory\n * @private\n */\nvar ProcessIsoCurveResponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant ProcessIsoCurve\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"ProcessIsoCurveResponseFactory\");\n logger.trace([\"ProcessIsoCurveResponseFactory::build()\"]);\n\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n logger.trace(\"analyze response : json\");\n\n var JSONResponse;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // analyse de la reponse\n // création de l'objet de réponse\n data = new ProcessIsoCurveResponse();\n\n // remplissage de l'objet créé avec les attribtuts de la réponse du service\n if (JSONResponse) {\n if (JSONResponse.costType === \"distance\") {\n data.time = \"\";\n data.distance = JSONResponse.costValue;\n } else {\n data.time = JSONResponse.costValue;\n data.distance = \"\";\n }\n\n data.message = \"\";\n data.id = \"\";\n data.srs = JSONResponse.crs;\n data.geometry = JSONResponse.geometry;\n var coords = JSONResponse.point.split(\",\");\n if (data.location) {\n data.location.x = coords[0];\n data.location.y = coords[1];\n }\n } else {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE\", options.response)));\n return;\n }\n\n // info : en cas de problèmes de droits (clé invalide ou autre), la réponse est au format XML !!\n // ex. Key does not exist or has expired\n // mais le statut est 403, l'erreur est donc remontée plus tôt.\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService({\n message : MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", data.exceptionReport),\n type : ErrorService.TYPE_SRVERR,\n status : 200\n }));\n return;\n }\n }\n } else {\n // si la réponse est vide, on appelle le callback d'erreur\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n\n // si tout s'est bien passé, on appelle le callback de succès\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default ProcessIsoCurveResponseFactory;\n","\n/**\n * Response object for {@link module:Services~isoCurve Gp.Services.isoCurve ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Float} distance - distance (expressed in meters) used for the request.\n * @property {Float} time - time (expressed in seconds) used for the request.\n * @property {Object} geometry - Geometry (expressed in [GeoJSON]{@link http://geojson.org/}) of the isocurve.\n * @property {String} id - request id (used by underlying webservice).\n * @property {Gp.Point} location - Position of the start or end point used for the request (expressed in \"srs\" coordinates system).\n * @property {String} message - message\n * @property {String} srs - Identifier of the coordinates system used for the isocurve.\n *\n * @namespace\n * @alias Gp.Services.IsoCurveResponse\n *\n */\nfunction ProcessIsoCurveResponse () {\n if (!(this instanceof ProcessIsoCurveResponse)) {\n throw new TypeError(\"ProcessIsoCurveResponse constructor cannot be called as a function.\");\n }\n\n this.message = null;\n\n this.id = null;\n\n this.location = {};\n this.location.x = null;\n this.location.y = null;\n\n this.srs = null;\n\n this.geometry = null;\n\n this.time = null;\n\n this.distance = null;\n}\n\nProcessIsoCurveResponse.prototype = {\n\n constructor : ProcessIsoCurveResponse\n\n};\n\nexport default ProcessIsoCurveResponse;\n","import Logger from \"../../../Utils/LoggerByDefault\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport RouteRequestREST from \"./RouteRequestREST\";\n\n/**\n * Creation d'une requête REST en mode POST ou GET\n * (Factory)\n *\n * @module RouteRequestFactory\n * @alias Gp.Services.Route.Request.RouteRequestFactory\n * @private\n */\nvar RouteRequestFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * // utilisation avec les callback\n * var options = {\n * (...)\n * onSuccess : function (response) {},\n * onError : function (error) {},\n * // spécifique au service\n * startPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * endPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * provideBbox : false,\n * exclusions : [\"bridge\", \"tunnel\", \"toll\"],\n * distanceUnit : \"km\",\n * graph : \"Voiture\",\n * geometryInInstructions : false,\n * routePreference : \"fastest\"\n * };\n * RouteRequestFactory.build(options);\n *\n * // utilisation sans callback\n * var options = {...};\n * try {\n * var result = RouteRequestFactory.build(options);\n * if (! result) { throw new Error(\"...\"):}\n * } catch (e) {\n * // todo\n * }\n * @returns {String} request\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"RouteRequestFactory\");\n logger.trace([\"RouteRequestFactory::build()\"]);\n\n var request = null;\n\n var settings = options || {};\n\n // gestion des callback\n var bOnError = !!(options.onError !== null && typeof options.onError === \"function\");\n\n var message = null;\n\n // FIXME les exceptions ne sont pas 'catchées' sur le constructeur !\n var myReq = new RouteRequestREST(settings);\n if (!myReq.processRequestString()) {\n message = \"Error process request (rest) !\";\n if (bOnError) {\n options.onError.call(options.scope, new ErrorService(message));\n return;\n }\n throw new Error(message);\n }\n request = myReq.requestString;\n\n return request;\n }\n};\n\nexport default RouteRequestFactory;\n","\nimport Logger from \"../../../Utils/LoggerByDefault\";\nimport _ from \"../../../Utils/MessagesResources\";\nimport RouteParamREST from \"./model/RouteParamREST\";\n\n/**\n * @classdesc\n * Classe de gestion des requêtes de type REST sur le service de calcul d'itineraire\n * (uniquement en GET)\n *\n * @constructor\n * @alias Gp.Services.Route.Request.RouteRequestREST\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * var options = {\n * (...)\n * };\n *\n * @private\n */\nfunction RouteRequestREST (options) {\n this.logger = Logger.getLogger(\"RouteRequestREST\");\n this.logger.trace(\"[Constructeur RouteRequestREST ()]\");\n\n if (!(this instanceof RouteRequestREST)) {\n throw new TypeError(\"RouteRequestREST constructor cannot be called as a function.\");\n }\n\n // existance des options\n if (!options) {\n throw new Error(_.getMessage(\"PARAM_EMPTY\", \"options\"));\n }\n\n /** liste des options */\n this.settings = options;\n}\n\nRouteRequestREST.prototype = {\n\n /**\n * @lends module:RouteRequestREST#\n */\n\n /**\n * request\n * @type {String}\n */\n requestString : null,\n\n /**\n * Constructeur (alias)\n */\n constructor : RouteRequestREST,\n\n /**\n * Construction de la requête.\n *\n * @example\n * // GET out : origin=2.416907353809513,48.8465772142297&destination=2.4248037771493673,48.84591353161838\n * // POST out : Not yet supported method POST !\n * @returns {String} request\n */\n processRequestString : function () {\n // INFO\n // construction simple sans template...,\n // mais en attendant que les services soient fixés, on taggue ce composant en mode PROTOTYPE !\n this.logger.warn(\" PROTOTYPE !\");\n\n // Mapping des options avec le service de l'API REST\n var oParams = new RouteParamREST(this.settings);\n var params = oParams.getParams();\n\n var request = \"\";\n for (var i = 0; i < params.length; i++) {\n var o = params[i];\n if (request) {\n request += \"&\";\n }\n request += o.k + \"=\" + o.v;\n }\n\n // Exemple :\n // http://wxs.ign.fr/KEY/itineraire/rest/route.json?\n // origin=&\n // destination=&\n // waypoints=&\n // method=DISTANCE&\n // graph=Pieton&\n // graphName=Pieton&\n // exclusions=&\n // tolerance=10&\n // srs=\n\n this.logger.trace(request);\n this.requestString = request;\n\n return this.requestString;\n }\n};\n\nexport default RouteRequestREST;\n","\nimport Logger from \"../../../../Utils/LoggerByDefault\";\n\n/**\n * @classdesc\n * Classe de gestion des param. des requêtes du service de calcul d'itineraire (REST).\n * Permet le mapping avec les options du service.\n * @constructor\n * @alias Gp.Services.Route.Request.RouteParamREST\n * @param {Object} options - options\n *\n * @private\n */\nfunction RouteParamREST (options) {\n if (!(this instanceof RouteParamREST)) {\n throw new TypeError(\"RouteParamREST constructor cannot be called as a function.\");\n }\n\n this.logger = Logger.getLogger();\n this.logger.trace(\"[Constructeur RouteParamREST ()]\");\n /**\n * Options en paramêtres du constructeur.\n */\n this.options = options || {};\n\n // mapping des options avec l'API REST\n\n /** Ressource utilisée */\n this.resource = this.options.resource;\n\n /** Coordonnées du point de départ. */\n this.start = this.options.startPoint.x + \",\" + this.options.startPoint.y;\n\n /** Coordonnées du point d’arrivée. */\n this.end = this.options.endPoint.x + \",\" + this.options.endPoint.y;\n\n /** Coordonnées des étapes point de départ. */\n this.intermediates = this.options.viaPoints;\n\n /** Nom du profile à utiliser */\n this.profile = this.options.graph;\n\n /** projection (code EPSG comme epsg:4326 ou wgs84) */\n this.crs = this.options.srs;\n\n /** Liste des contraintes */\n this.constraints = this.options.constraints;\n\n /** Nom de l'optimisation à utiliser */\n this.optimization = this.options.routePreference;\n\n /** Format de sortie (résumé de l’itinéraire) */\n this.getSteps = (this.options.geometryInInstructions) ? \"true\" : \"false\";\n\n /** Unité des distances */\n this.distanceUnit = this.options.distanceUnit;\n\n /** Unité des durées */\n this.timeUnit = this.options.timeUnit;\n\n /** Attributs des voies */\n this.waysAttributes = this.options.waysAttributes;\n}\n\n/**\n * CLASSNAME\n */\nRouteParamREST.CLASSNAME = \"RouteParamREST\";\n\nRouteParamREST.prototype = {\n\n /**\n * @lends module:RouteParamREST#\n */\n\n /**\n * Constructeur (alias)\n */\n constructor : RouteParamREST,\n\n /**\n * Retourne une liste de points\n * @returns {String} une liste de points (sep '|')\n */\n getIntermediates : function () {\n var array = [];\n if (this.intermediates.length !== 0) {\n for (var i = 0; i < this.intermediates.length; i++) {\n var obj = this.intermediates[i];\n array.push(obj.x + \",\" + obj.y);\n }\n }\n\n return array.join(\"|\");\n },\n\n /**\n * Retourne une liste d'attributs\n * @returns {String} une liste d'attributs (sep '|')\n */\n getWaysAttributes : function () {\n return this.waysAttributes.join(\"|\");\n },\n\n /**\n * Retourne un profile\n * @returns {String} profile\n */\n getProfile : function () {\n return this.profile;\n },\n\n /**\n * Retourne un distanceUnit\n * @returns {String} distanceUnit\n */\n getDistanceUnit : function () {\n if (this.distanceUnit === \"m\") {\n return \"meter\";\n }\n if (this.distanceUnit === \"km\") {\n return \"kilometer\";\n }\n return \"\";\n },\n\n /**\n * Retourne une optimisation\n * @returns {String} optimization\n */\n getOptimization : function () {\n if (this.optimization) {\n return this.optimization;\n } else {\n return \"\";\n }\n },\n\n /**\n * Retourne la liste des constraints\n * @returns {String} une liste des constraints (sep '|')\n */\n getConstraints : function () {\n var constraintArray = [];\n\n if (this.constraints.length !== 0) {\n for (var k = 0; k < this.constraints.length; k++) {\n constraintArray.push(JSON.stringify(this.constraints[k]));\n }\n }\n return constraintArray.join(\"|\");\n }\n};\n\n/**\n * Tableau de clefs/valeurs pour param.\n *\n * @returns {Array} liste de paramêtres\n */\nRouteParamREST.prototype.getParams = function () {\n var map = [];\n\n map.push({\n k : \"resource\",\n v : this.resource\n });\n\n map.push({\n k : \"start\",\n v : this.start\n });\n\n map.push({\n k : \"end\",\n v : this.end\n });\n\n map.push({\n k : \"geometryFormat\",\n v : \"geojson\"\n });\n\n if (this.optimization) {\n map.push({\n k : \"optimization\",\n v : this.getOptimization()\n });\n }\n\n if (this.intermediates) {\n map.push({\n k : \"intermediates\",\n v : this.getIntermediates()\n });\n }\n\n if (this.profile) {\n map.push({\n k : \"profile\",\n v : this.getProfile()\n });\n }\n\n if (this.constraints) {\n map.push({\n k : \"constraints\",\n v : this.getConstraints()\n });\n }\n\n if (this.crs) {\n map.push({\n k : \"crs\",\n v : this.crs\n });\n }\n\n if (this.distanceUnit) {\n map.push({\n k : \"distanceUnit\",\n v : this.getDistanceUnit()\n });\n }\n\n if (this.timeUnit) {\n map.push({\n k : \"timeUnit\",\n v : this.timeUnit\n });\n }\n\n if (this.waysAttributes) {\n map.push({\n k : \"waysAttributes\",\n v : this.getWaysAttributes()\n });\n }\n\n return map;\n};\n\nexport default RouteParamREST;\n","import Logger from \"../../../Utils/LoggerByDefault\";\nimport MRes from \"../../../Utils/MessagesResources\";\nimport ErrorService from \"../../../Exceptions/ErrorService\";\nimport RouteResponse from \"./model/RouteResponse\";\nimport RouteInstruction from \"./model/RouteInstruction\";\n\n/**\n * Factory pour générer une reponse JSON à partir d'un XML ou d'un JSON\n * (Factory)\n *\n * @module RouteResponseFactory\n * @alias Gp.Services.Route.Response.RouteResponseFactory\n * @private\n */\nvar RouteResponseFactory = {\n\n /**\n * interface unique\n *\n * @method build\n * @static\n * @param {Object} options - options definies dans le composant Route\n *\n * @example\n * var options = {\n * response :\n * outputFormat :\n * rawResponse :\n * scope :\n * onSuccess :\n * onError :\n * };\n *\n */\n build : function (options) {\n // logger\n var logger = Logger.getLogger(\"RouteResponseFactory\");\n logger.trace(\"RouteResponseFactory::build()\");\n\n var data = null;\n\n if (options.response) {\n if (options.rawResponse) {\n logger.trace(\"analyze response : raw\");\n data = options.response;\n } else {\n logger.trace(\"analyze response : json\");\n\n var JSONResponse;\n if (typeof options.response === \"string\") {\n JSONResponse = JSON.parse(options.response);\n } else {\n JSONResponse = options.response;\n }\n\n // construction de l'objet réponse JSON\n if (JSONResponse) {\n // le service renvoie t il une erreur ?\n if (JSONResponse.message) {\n // ex. {\"message\":\"message not null\", \"status\":\"ERROR\"}\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION\", JSONResponse.message)));\n return;\n }\n var legs = [];\n var legSteps = [];\n var steps = [];\n\n data = new RouteResponse();\n\n if (data.hasOwnProperty(\"totalTime\")) {\n data.totalTime = parseFloat(JSONResponse.duration);\n }\n if (data.hasOwnProperty(\"totalDistance\")) {\n data.totalDistance = parseFloat(JSONResponse.distance);\n }\n\n if (data.hasOwnProperty(\"bbox\")) {\n data.bbox.left = parseFloat(JSONResponse.bbox[0]);\n data.bbox.bottom = parseFloat(JSONResponse.bbox[1]);\n data.bbox.right = parseFloat(JSONResponse.bbox[2]);\n data.bbox.top = parseFloat(JSONResponse.bbox[3]);\n }\n\n if (data.hasOwnProperty(\"routeGeometry\") && !options.geometryInInstructions) {\n data.routeGeometry = JSONResponse.geometry;\n }\n\n if (data.hasOwnProperty(\"routeInstructions\") && options.geometryInInstructions) {\n var legList = JSONResponse.portions;\n var i;\n if (Array.isArray(legList) && legList.length) {\n for (i = 0; i < legList.length; i++) {\n legs.push(legList[i]);\n }\n }\n if (legs.length) {\n for (i = 0; i < legs.length; i++) {\n legSteps.push(legs[i].steps);\n }\n }\n if (legSteps.length) {\n for (i = 0; i < legSteps.length; i++) {\n steps = steps.concat(legSteps[i]);\n }\n }\n\n steps.forEach(function (step) {\n data.routeInstructions.push(new RouteInstruction());\n data.routeInstructions[data.routeInstructions.length - 1].duration = step.duration;\n data.routeInstructions[data.routeInstructions.length - 1].distance = step.distance;\n data.routeInstructions[data.routeInstructions.length - 1].code = \"\";\n data.routeInstructions[data.routeInstructions.length - 1].instruction = \"\";\n data.routeInstructions[data.routeInstructions.length - 1].geometry = step.geometry;\n\n // on ne souhaite pas de ce type de valeur...\n if (step.name === \"Valeur non renseignée\") {\n step.name = \"\";\n }\n\n switch (step.instruction.type) {\n case \"turn\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Tourner\";\n break;\n case \"new name\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Continuer tout droit\";\n break;\n case \"depart\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Départ\";\n break;\n case \"arrive\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Arrivée\";\n break;\n case \"merge\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Rejoindre\";\n break;\n case \"ramp\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Prendre la bretelle\";\n break;\n case \"on ramp\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Prendre la bretelle\";\n break;\n case \"off ramp\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Prendre la sortie\";\n break;\n case \"fork\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Sur la bifurcation, prendre\";\n break;\n case \"end of road\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"À la fin de la route, prendre\";\n break;\n case \"use lane\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Utiliser la file\";\n break;\n case \"continue\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Continuer\";\n break;\n case \"roundabout\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Au rond-point\";\n break;\n case \"rotary\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Au rond-point\";\n break;\n case \"roundabout turn\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"Au rond point, tourner\";\n break;\n case \"notification\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"\";\n break;\n default:\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \"?\" + step.instruction.type + \"?\";\n break;\n }\n\n if (step.instruction.modifier) {\n switch (step.instruction.modifier) {\n case \"uturn\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction = \"Faire demi-tour\";\n break;\n case \"sharp right\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" complètement à droite\";\n break;\n case \"right\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" à droite\";\n break;\n case \"slight right\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" légèrement à droite\";\n break;\n case \"straight\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction = \"Continuer tout droit\";\n break;\n case \"slight left\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" lègèrement à gauche\";\n break;\n case \"left\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" à gauche\";\n break;\n case \"sharp left\":\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" complètement à gauche\";\n break;\n default:\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" ?\" + step.instruction.modifier + \"?\";\n break;\n }\n }\n\n if (step.instruction.exit) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += `${step.instruction.exit}e sortie`;\n }\n\n if (step.attributes.name) {\n if (step.attributes.name.nom_1_droite || step.attributes.name.toponyme) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += \" sur\";\n }\n\n if (step.attributes.name.nom_1_droite) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += ` ${step.attributes.name.nom_1_droite}`;\n }\n\n if (step.attributes.name.toponyme) {\n data.routeInstructions[data.routeInstructions.length - 1].instruction += ` ${step.attributes.name.toponyme}`;\n }\n }\n });\n }\n }\n\n if (!data) {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_ANALYSE\", \"json\")));\n return;\n }\n\n // Si la réponse contenait une exception renvoyée par le service\n if (data.exceptionReport) {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EXCEPTION_2\")));\n return;\n }\n }\n } else {\n options.onError.call(options.scope, new ErrorService(MRes.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n return;\n }\n\n options.onSuccess.call(options.scope, data);\n }\n};\n\nexport default RouteResponseFactory;\n","\n/**\n * Single Route Instruction object.\n *\n * @property {String} code - Instruction code :\n *\n * - \"F\" : Straight forward\n * - \"B\" : U-turn\n * - \"L\" : turn left\n * - \"R\" : turn right\n * - \"BL\" : turn left strongly\n * - \"BR\" : turn right strongly\n * - \"FL\" : turn lightly to the left\n * - \"FR\" : turn lightly to the right\n * - \"round_about_entry\" : round about entry\n * - \"round_about_exit\" : round about exit\n *\n * @property {String} instruction - Instruction text : translated code + street name\n * @property {Object} geometry - Geometry (expressed in [GeoJSON]{@link http://geojson.org/}) of the street.\n * @property {Float} distance - Length of the instruction. Expressed in km or m, depending on distanceUnit parameter.\n * @property {Float} duration - Instruction duration in seconds.\n *\n * @namespace\n * @alias Gp.Services.Route.RouteInstruction\n */\nfunction RouteInstruction () {\n if (!(this instanceof RouteInstruction)) {\n throw new TypeError(\"RouteInstruction constructor cannot be called as a function.\");\n }\n\n this.duration = null;\n\n this.distance = null;\n\n this.code = null;\n\n this.instruction = null;\n\n this.geometry = null; // FIXME can be null if option 'geometryInInstructions' is false !\n}\n\nRouteInstruction.prototype = {\n\n constructor : RouteInstruction\n\n};\n\nexport default RouteInstruction;\n","/**\n * Response object for {@link module:Services~route Gp.Services.route ()} invocation when successful. Received as the argument of onSuccess callback function.\n *\n * @property {Gp.BBox} bbox - Bounding Box of the route. Given when provideBBox parameter is used in function call.\n * @property {Object} routeGeometry - Geometry (expressed in [GeoJSON]{@link http://geojson.org/}) of the route.\n * @property {Array.} routeInstructions - Instructions of the route.\n * @property {String} totalDistance - Length of the route. If distanceUnit parameter was set to \"km\" (default), totalDistance is a string containing the total distance expressed in kilometers, followed by \" Km\" (e.g. : \"19.6 Km\"). If distanceUnit parameter was set to \"m\", totalDistance is a string containing the total distance expressed in meters (e.g. : \"19599.14\").\n * @property {Float} totalTime - Route duration in seconds.\n *\n * @namespace\n * @alias Gp.Services.RouteResponse\n */\nfunction RouteResponse () {\n if (!(this instanceof RouteResponse)) {\n throw new TypeError(\"RouteResponse constructor cannot be called as a function.\");\n }\n\n this.totalTime = null;\n\n this.totalDistance = null;\n\n this.bbox = {\n left : null,\n right : null,\n top : null,\n bottom : null\n };\n\n this.routeGeometry = null; // FIXME can be null if option 'geometryInInstructions' is true !\n\n this.routeInstructions = [];\n}\n\nRouteResponse.prototype = {\n\n constructor : RouteResponse\n\n};\n\nexport default RouteResponse;\n","\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport _ from \"../../Utils/MessagesResources\";\nimport ErrorService from \"../../Exceptions/ErrorService\";\nimport CommonService from \"../CommonService\";\nimport DefaultUrlService from \"../DefaultUrlService\";\nimport RouteRequestFactory from \"./Request/RouteRequestFactory\";\nimport RouteResponseFactory from \"./Response/RouteResponseFactory\";\n\n/**\n * @classdesc\n * Appel du service d'itinéraire du Géoportail :\n * envoi de la requête construite selon les paramètres en options,\n * éventuellement parsing et analyse de la réponse,\n * retour d'une réponse en paramètre de la fonction onSuccess.\n *\n * @alias Gp.Services.Route\n * @constructor\n * @extends {Gp.Services.CommonService}\n * @param {Object} options - options spécifiques au service (+ les options heritées)\n *\n * @param {String} options.resource - La ressource utilisée pour le calcul. Ce paramètre devrait être obligatoire car il l'est dans l'appel au service. Mais il ne l'est pas pour des raisons de rétrocompatibilité.\n *\n * @param {String} options.outputFormat - Le format de la réponse du service itineraire : 'json' uniquement et par défaut.\n *\n * @param {String} [options.routePreference = \"fastest\"] - Mode de calcul à utiliser :\n * - le plus rapide « fastest »\n * - le plus court « shortest »\n * Par défaut : « fastest ».\n *\n * @param {Object} options.startPoint - Point de départ du calcul. Coordonnées exprimées en longitudes, latitudes (EPSG:4326)\n * @param {Float} options.startPoint.x - Abcisse du point de départ du calcul d'itinéraire.\n * @param {Float} options.startPoint.y - Ordonnée du point de départ du calcul d'itinéraire.\n *\n * @param {Object} options.endPoint - Point d'arrivée du calcul. Coordonnées exprimées en longitudes, latitudes (EPSG:4326)\n * @param {Float} options.endPoint.x - Abcisse du point d'arrivée du calcul d'itinéraire.\n * @param {Float} options.endPoint.y - Ordonnée du point d'arrivée du calcul d'itinéraire.\n *\n * @param {Object[]} [options.viaPoints] - Liste de point ({x:Float,y:Float}) intermédaires que l'itinéraire doit emprunter dans l'ordre du tableau.\n * Coordonnées exprimées en longitudes, latitudes (EPSG:4326) :{x:float, y:float}\n *\n * @param {String} [options.graph = \"voiture\"] - Type de graphe utilisé : \"Voiture\" ou \"Pieton\".\n * Détermine le profil de vitesses utilisé pour le calcul ainsi que les tronçons autorisés ou non.\n * Par défaut, c'est la valeur \"Voiture\" qui sera utilisée.\n *\n * @param {String[]} [options.exclusions] - DEPRECATED: Critères d'exclusions à appliquer pour le calcul. (correspond au paramètre \"avoidFeature\" d'OpenLS)\n * On précise ici le type de tronçons que l'on ne veut pas que l'itinéraire emprunte\n * (valeurs possibles : « toll » (éviter les péages), « bridge », « tunnel »).\n * Ce paramètre est conservé pour une rétrocompatibilité de l'api. Le nouveau paramètre à utiliser est options.constraints\n *\n * @param {Object[]} [options.constraints] - Critères de contraintes à appliquer sur un itinéraire. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities.\n * @param {String} [options.constraints.constraintType] - Type de la contrainte. Généralement \"banned\".\n * @param {String} [options.constraints.key] - Clé de la contrainte. Généralement \"wayType\".\n * @param {String} [options.constraints.operator] - Opérateur de la contrainte. Généralement \"=\".\n * @param {String} [options.constraints.value] - Valeur de la contrainte. Généralement \"autoroute\".\n *\n * @param {Boolean} [options.geometryInInstructions = false] - Indique si la géométrie de l'itinéraire doit être reprise morceau par morceau dans les instructions.\n * (correspond au paramètre \"provideGeometry\" d'OpenLS) Par défaut : false.\n *\n * @param {Boolean} [options.provideBbox = true] - Indique si les instructions doivent être localisées par une bbox dans la réponse.\n * Par défaut : true.\n *\n * @param {String} [options.distanceUnit = \"m\"] - Indique si la distance doit être exprimée en km ou m dans la réponse.\n * Par défaut : m.\n * @param {String} [options.timeUnit = \"second\"] - Indique si la durée doit être exprimée en seconde, minute ou heure dans la réponse. Il peut-être formatté hh:mm::ss avec la valeur standard.\n * Les valeurs possibles sont \"standard\", \"second\", \"minute\" ou \"hour\".\n * Par défaut : \"standard\".\n *\n * @param {String} [options.srs] - Système de coordonnées dans lequel les paramètres géographiques en entrée et la réponse du service sont exprimés.\n * Pas de valeur par défaut. Si le serveur consulté est celui du Géoportail, la valeur par défaut sera donc celle du service : 'EPSG:4326'.\n *\n * @param {String[]} [options.waysAttributes] - Nom des attributs des voies. Les valeurs disponibles dépendent de la ressource utilisée. Il est donc utile de regarder le getCapabilities.\n *\n * @example\n * var options = {\n * // options communes aux services\n * apiKey : null,\n * serverUrl : 'http://localhost/service/',\n * protocol : 'XHR',\n * proxyURL : null,\n * httpMethod : 'GET', // GET|POST\n * timeOut : 10000, // ms\n * rawResponse : false, // true|false\n * scope : null, // this\n * onSuccess : function (response) {},\n * onFailure : function (error) {},\n * // spécifique au service\n * resource : 'bdtopo'\n * outputFormat : 'json',\n * startPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * endPoint : {\n * x : 42.1121,\n * y : 1.5557\n * },\n * provideBbox : true,\n * exclusions : [\"Bridge\", \"Tunnel\", \"Toll\"],\n * distanceUnit : \"km\",\n * graph : \"Voiture\",\n * geometryInInstructions : true,\n * routePreference : \"fastest\"\n * };\n *\n */\nfunction Route (options) {\n if (!(this instanceof Route)) {\n throw new TypeError(_.getMessage(\"CLASS_CONSTRUCTOR\", \"Route\"));\n }\n\n /**\n * Nom de la classe (heritage)\n */\n this.CLASSNAME = \"Route\";\n\n // appel du constructeur par heritage\n CommonService.apply(this, arguments);\n\n this.logger = Logger.getLogger(\"Gp.Services.Route\");\n this.logger.trace(\"[Constructeur Route (options)]\");\n\n if (!options.startPoint) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"startPoint\"));\n }\n\n // on lance une exception afin d'eviter au service de le faire...\n if (options.startPoint.x === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"startPoint.x\"));\n }\n\n if (options.startPoint.y === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"startPoint.y\"));\n }\n\n if (!options.endPoint) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"endPoint\"));\n }\n\n // on lance une exception afin d'eviter au service de le faire...\n if (options.endPoint.x === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"endPoint.x\"));\n }\n\n if (options.endPoint.y === null) {\n throw new Error(_.getMessage(\"PARAM_MISSING\", \"endPoint.y\"));\n }\n\n // options par defaut\n\n // on passe l'option outputFormat en minuscules afin d'éviter des exceptions.\n if (options.outputFormat && options.outputFormat !== \"json\") {\n this.logger.warn(\"options.outputFormat could only be json\");\n }\n this.options.outputFormat = \"json\";\n\n this.options.resource = options.resource || \"bdtopo-osrm\";\n this.options.startPoint = options.startPoint;\n this.options.endPoint = options.endPoint;\n this.options.viaPoints = options.viaPoints || [];\n this.options.routePreference = options.routePreference || \"fastest\";\n /** Gestion des anciennes valeurs de graph */\n if (options.graph) {\n if (options.graph === \"Voiture\") {\n this.options.graph = \"car\";\n }\n if (options.graph === \"Pieton\") {\n this.options.graph = \"pedestrian\";\n }\n } else {\n this.options.graph = \"car\";\n }\n this.options.constraints = [];\n if (options.constraints) {\n if (Array.isArray(options.constraints)) {\n for (var k = 0; k < options.constraints.length; k++) {\n this.options.constraints.push(options.constraints[k]);\n }\n } else {\n throw new Error(_.getMessage(\"PARAM_TYPE\", \"constraints\"));\n }\n }\n\n /** Gestion de l'ancien paramètre exclusion */\n var constraintTunnel = {};\n var constraintPont = {};\n var constraintAutoroute = {};\n if (options.exclusions) {\n if (options.exclusions.length !== 0) {\n this.logger.warn(\"options.exclusions is DEPRECATED !!\");\n for (var c = 0; c < options.exclusions.length; c++) {\n if (typeof options.exclusions[c] === \"string\") {\n options.exclusions[c] = options.exclusions[c].toLowerCase();\n } else {\n // on ne crée pas une erreur pour rétro-compatibilité avec les anciennes versions\n continue;\n }\n if (options.exclusions[c] === \"toll\") {\n constraintAutoroute.constraintType = \"banned\";\n constraintAutoroute.key = \"wayType\";\n constraintAutoroute.operator = \"=\";\n constraintAutoroute.value = \"autoroute\";\n this.options.constraints.push(constraintAutoroute);\n }\n if (options.exclusions[c] === \"tunnel\") {\n constraintTunnel.constraintType = \"banned\";\n constraintTunnel.key = \"wayType\";\n constraintTunnel.operator = \"=\";\n constraintTunnel.value = \"tunnel\";\n this.options.constraints.push(constraintTunnel);\n }\n if (options.exclusions[c] === \"bridge\") {\n constraintPont.constraintType = \"banned\";\n constraintPont.key = \"wayType\";\n constraintPont.operator = \"=\";\n constraintPont.value = \"pont\";\n this.options.constraints.push(constraintPont);\n }\n }\n }\n }\n\n this.options.geometryInInstructions = options.geometryInInstructions || false;\n this.options.provideBbox = options.provideBbox || true;\n this.options.distanceUnit = options.distanceUnit || \"m\";\n this.options.timeUnit = options.timeUnit || \"second\";\n this.options.expectedStartTime = null; // FIXME not yet implemented !\n this.options.srs = options.srs || \"EPSG:4326\";\n this.options.waysAttributes = options.waysAttributes || [];\n\n // gestion de l'url du service par defaut\n // si l'url n'est pas renseignée, il faut utiliser les urls par defaut\n if (!this.options.serverUrl) {\n var UrlByDefault = DefaultUrlService.Route.newUrl();\n\n if (!UrlByDefault) {\n throw new Error(\"Url by default not found !\");\n }\n this.options.serverUrl = UrlByDefault;\n this.logger.trace(\"Serveur URL par defaut : \" + this.options.serverUrl);\n }\n}\n\n/**\n * @lends module:Route#\n */\nRoute.prototype = Object.create(CommonService.prototype, {\n // todo\n // getter/setter\n});\n\n/*\n * Constructeur (alias)\n */\nRoute.prototype.constructor = Route;\n\n/**\n * (overwrite)\n * Création de la requête\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nRoute.prototype.buildRequest = function (error, success) {\n var options = {\n // spécifique au service\n resource : this.options.resource,\n startPoint : this.options.startPoint,\n endPoint : this.options.endPoint,\n viaPoints : this.options.viaPoints,\n provideBbox : this.options.provideBbox,\n constraints : this.options.constraints,\n distanceUnit : this.options.distanceUnit,\n timeUnit : this.options.timeUnit,\n graph : this.options.graph,\n geometryInInstructions : this.options.geometryInInstructions,\n routePreference : this.options.routePreference,\n srs : this.options.srs,\n waysAttributes : this.options.waysAttributes\n };\n\n this.request = RouteRequestFactory.build(options);\n\n // on teste si la requete a bien été construite !\n if (!this.request) {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_REQUEST_BUILD\")));\n } else {\n success.call(this, this.request);\n }\n};\n\n/**\n * (overwrite)\n * Analyse de la reponse\n *\n * @param {Function} error - callback des erreurs\n * @param {Function} success - callback\n */\nRoute.prototype.analyzeResponse = function (error, success) {\n // INFO\n // Factory pour masquer la complexité du retour du service\n\n if (this.response) {\n var options = {\n distanceUnit : this.options.distanceUnit,\n timeUnit : this.options.timeUnit,\n response : this.response,\n outputFormat : this.options.outputFormat, // utile pour parser la string en mode XHR : JSON ou XML !\n rawResponse : this.options.rawResponse,\n onError : error,\n onSuccess : success,\n scope : this,\n geometryInInstructions : this.options.geometryInInstructions\n };\n\n RouteResponseFactory.build(options);\n } else {\n error.call(this, new ErrorService(_.getMessage(\"SERVICE_RESPONSE_EMPTY\")));\n }\n};\n\nexport default Route;\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"point|circle|bbox\" }] */\n\n/**\n* Geoportal web services invocation namespace.\n*\n* @module Services\n* @alias Gp.Services\n*/\nimport Config from \"./Config/Config\";\nimport Alti from \"./Alti/Alti\";\nimport Geocode from \"./Geocode/Geocode\";\nimport ReverseGeocode from \"./Geocode/ReverseGeocode\";\nimport AutoComplete from \"./AutoComplete/AutoComplete\";\nimport Route from \"./Route/Route\";\nimport ProcessIsoCurve from \"./ProcessIsoCurve/ProcessIsoCurve\";\n\nvar Services = {\n /**\n * Access to Geoportal resources metadata availables with one ore several keys\n *\n * @method getConfig\n * @param {Object} options - Options for function call.\n * @param {String} [options.apiKey] - Access key(s) (\",\" as separator, no spaces) to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}\n * @param {String} [options.customConfigFile] - path to a local config file. Overload the apiKey parameter\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.GetConfigResponse} object as a parameter except if \"rawResponse\" parameter is set to true : a String will be returned.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n */\n getConfig : function (options) {\n var configService = new Config(options);\n configService.call();\n },\n /**\n * Getting elevations in or along of one or several points on french territories using the [elevation services of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/alti.html}.
    \n * Two use cases are availables :
    \n * 1. getting elevations of the given points : don't use the options.sampling parameter ;
    \n * 2. getting a regular set of elevations along the given points : use the options.sampling parameter.\n *\n * @method getAltitude\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {Array.} options.positions - Array of positions ({lon:float, lat:float}) expressed in CRS:84 coordinates system, where to get elevations. 50 positions maximum may be given. 2 positions minimum are required if you use the options.sampling parameter.\n * @param {Number} [options.sampling] - Number of points to use (between 2 and 5000) in order to compute an elevation path. The points given with the options.positions parameter are used to fix the planimetric path along which the elevations will be computed.
    \n * If not used, only elevations of these positions will be returned.\n * @param {Boolean} [options.zonly=false] - Set this parameter to true if you only want to have elevations returned without corresponding coordinates.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.AltiResponse} object as a parameter, except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n * @param {String} [options.api='REST'] - What API to use for interacting with underlying web service : 'REST'. Only use if you know what you are doing.\n * @param {String} [options.outputFormat='xml'] - Output format for underlying web service response : 'xml' or 'json'. Only use if you know what you are doing.\n */\n getAltitude : function (options) {\n var altiService = new Alti(options);\n altiService.call();\n },\n /**\n * Getting positon of a geographic identifier (places names, address, cadastral parcel, other...) using the [geocoding web service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/geocodage.html}.\n *\n * @example\n * Gp.Services.geocode ({\n * apiKey : \"carte\",\n * location : \"73 avenue de Paris, Saint-Mandé\",\n * // traitement des resultats\n * onSuccess : function (result) {\n * console.log(\"found (x:\"+result.position.x+\", y:\"+result.position.y+\")\") ;\n * }\n * }) ;\n *\n *\n * @method geocode\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} [options.index=\"StreetAddress\"] - Geographical identifier type to search. Values currently availables are : \"PositionOfInterest\" for place names, \"StreetAddress\" for address search, \"CadastralParcel\" for Cadastral parcels search, \"location\" for a multi-index search on \"StreetAddress\" and \"PositionOfInterest\". Default is \"StreetAddress\".\n * @param {String} options.query - Geographic identifier to locate.\n * @param {Object} [options.filters] - Additional filters to apply to search. The following properties may be given.\n * @param {String} [options.filters.[prop]] - Additionnal properties to filter search. Properties depends on options.index, and values type should be \"String\".\n *

    \n * Properties availables for address search :
    \n * \"postalCode\", \"inseeCode\" and \"city\".\n *

    \n * Properties availables for place names search :
    \n * \"postalCode\", \"inseeCode\" and \"type\".\n *

    \n * Properties availables for cadastral parcels search :
    \n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n * @param {Number} [options.maximumResponses=20] - Maximum number of responses. Default underlying service value applies (20) if not provided.\n * @param {Boolean} [options.returnTrueGeometry=false] - Set this parameter to true if you wish to have the true geometrie returned.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.GeocodeResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=http (s)://data.geopf.fr/geocodage/search] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n geocode : function (options) {\n var geocodeService = new Geocode(options);\n geocodeService.call();\n },\n /**\n * Retrieving geographical identifiers (place names, address, cadastral parcels, ...) near a given position, using the [reverse geocoding web service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/geocodage-inverse.html}.\n *\n * @method reverseGeocode\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} [options.index=\"StreetAddress\"] - Geographical identifier type to search. Values currently availables are : \"PositionOfInterest\" for place names, \"StreetAddress\" for address search, \"CadastralParcel\" for Cadastral parcels search, \"location\" for a multi-index search on \"StreetAddress\" and \"PositionOfInterest\". Default is \"StreetAddress\".\n * @param {Object} options.position - Reference position where to search geographical identifiers.\n * @param {Float} options.position.lon - Longitude\n * @param {Float} options.position.lat - Latitude\n * @param {Object} [options.filters] - Additional filters to apply to search. The following properties may be given.\n * @param {String} [options.filters.[prop]] - Additionnal properties to filter search. Properties depends on options.index, and values type should be \"String\".\n *

    \n * Properties availables for address search :
    \n * \"postalCode\", \"inseeCode\" and \"city\".\n *

    \n * Properties availables for place names search :
    \n * \"postalCode\", \"inseeCode\" and \"type\".\n *

    \n * Properties availables for cadastral parcels search :
    \n * \"codeDepartement\", \"codeCommune\", \"nomCommune\", \"codeCommuneAbs\", \"codeArrondissement\", \"section\", \"numero\", \"feuille\".\n * @param {Object} [options.searchGeometry] - Location where to perform the search.\n * @param {String} options.searchGeometry.type - Geometry type (Point|Circle|Linestring|Polygon)\n * @param {Array.|Array.Array.} options.searchGeometry.coordinates - Coordinates\n * @param {Float} [options.searchGeometry.radius] - Radius (only for type 'Circle')\n * @param {Number} [options.maximumResponses=20] - Maximum number of responses. Default underlying service value applies (20) if not provided.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.GeocodeResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=https://data.geopf.fr/geocodage/reverse] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n reverseGeocode : function (options) {\n var reverseGeocodeService = new ReverseGeocode(options);\n reverseGeocodeService.call();\n },\n /**\n * Getting suggestions of probable places names or address based on uncomplete texts, using the [autocompletion service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/autocompletion.html}\n *\n * @method autoComplete\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} options.text - Text input to complete.\n * @param {Array.} [options.filterOptions.type = \"StreetAddress\"] - Suggestion types to provide : address (\"StreetAddress\") and/or place name (\"PositionOfInterest\").\n * @param {Array.} [options.filterOptions.territory] - Places where to limit the search of suggestions : \"METROPOLE\" (Corsica and metropolitan France), \"DOMTOM\" (French overseas departments and territories), or an INSEE code of a department. No limitation by default. For instance : ['METROPOLE', '31']\n * @param {Number} [options.maximumResponses = 10] - Maximum number of responses.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.AutoCompleteResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.serverUrl=https://data.geopf.fr/geocodage/completion] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n autoComplete : function (options) {\n var autoCompleteService = new AutoComplete(options);\n autoCompleteService.call();\n },\n /**\n * Getting a route from one point to another using the [route service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/itineraires.html}.\n *\n * @method route\n * @param {Object} options - Options for function call.\n * @param {String} options.resource - Resource used to compute the route. Available values are in the GetCapabilities.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} [options.routePreference = \"fastest\"] - Indicates the way to compute the route : \"fastest\" (time optimisation) or \"shortest\" (distance optimisation). Available values are in the GetCapabilities.\n * @param {Gp.Point} options.startPoint - Start point of the route. Expressed in CRS:84 coordinates system (startPoint.x corresponds to longitude, startPoint.y corresponds to latitude). Available bbox are in the GetCapabilities.\n * @param {Gp.Point} options.endPoint - End point of the route. Expressed in CRS:84 coordinates system (endPoint.x corresponds to longitude, endPoint.y corresponds to latitude). Available bbox are in the GetCapabilities.\n * @param {Array.} [options.viaPoints] - Ordered via Points of the route. Expressed in CRS:84 coordinates system (viaPoints[i].x corresponds to longitude, viaPoints[i].y corresponds to latitude). Available bbox are in the GetCapabilities.\n * @param {String} [options.graph = \"Voiture\"] - User profile to use to compute the route : \"Voiture\" (using a vehicule) or \"Pieton\" (pedestrian). Has an influence on the kind of roads the route may use and the average speed. Available bbox are in the GetCapabilities.\n * @param {Array.} [options.exclusions] - DEPRECATED: use options.constraints. Indicates if route has to avoid some features (\"toll\", \"bridge\" or \"tunnel\").\n * @param {Boolean} [options.geometryInInstructions = false] - Indicates if route geometry has to be also returned with route instructions.\n * @param {Boolean} [options.provideBoundingBox = true] - Indicates if route instructions has to be localised with a BBOX in the response.\n * @param {String} [options.distanceUnit = \"m\"] - The unit used to provide distances in the response (\"meter\" or \"kilometer\").\n * @param {String} [options.timeUnit = \"second\"] - The unit used to provide duration in the response (\"standard\", \"second\", \"minute\", \"hour\").\n * @param {Array.} [options.waysAttributes] - Way Attributes to add in the response. Available values are in the GetCapabilities.\n * @param {Array.} [options.constraints] - Constraints used ({'constraintType':'banned','key':'ways_type','operator':'=','value':'autoroute'}). Available values are in the GetCapabilities.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.RouteResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.outputFormat='json'] - Output format (\"json\" or \"xml\") to use for underlying webService. Only use if you know what you are doing.\n * @param {String} [options.serverUrl=https://data.geopf.fr/navigation/itineraire] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n route : function (options) {\n var routeService = new Route(options);\n routeService.call();\n },\n /**\n * Computing a set of places (curve) reachable from a given point (or from where to start to reach a given point) within a time or distance constraint using the [isochrone service of the Geoportal Platform]{@link https://geoservices.ign.fr/documentation/geoservices/isochrones.html}.\n *\n * @method isoCurve\n * @param {Object} options - Options for function call.\n * @param {String} options.apiKey - Access key to Geoportal platform, obtained [here]{@link https://geoservices.ign.fr/services-web}.\n * @param {String} options.resource - Resource used to compute the route. Available values are in the GetCapabilities.\n * @param {Gp.Point} options.position - Start or Arrival (options.reverse===true) Point for the computing. Expressed in CRS:84 coordinates system (position.x corresponds to longitude, position.y corresponds to latitude).\n * @param {String} [options.graph = \"Voiture\"] - User profile to use to compute the isoCurve : \"Voiture\" (using a vehicule) or \"Pieton\" (pedestrian). Has an influence on the kind of roads to use and the average speed. Available values are in the GetCapabilities.\n * @param {Array.} [options.exclusions] - DEPRECATED: use options.constraints. Indicates if route has to avoid some features (\"toll\", \"bridge\" or \"tunnel\").\n * @param {Array.} [options.constraints] - Constraints used ({'constraintType':'banned','key':'ways_type','operator':'=','value':'autoroute'}). Available values are in the GetCapabilities.\n * @param {String} [options.method = \"time\"] - Computing method to use : \"time\" (using a duration as a constraint) or \"distance\" (using a distance as a constraint). Available values are in the GetCapabilities.\n * @param {Float} options.time - Maximum duration (expressed in seconds) to use when options.method is set to \"time\".\n * @param {Float} options.distance - Maximum distance (expressed in meters) to use when options.method is set to \"distance\".\n * @param {Boolean} [options.reverse = false] - Set this parameter to true if you want options.position to be the destination (instead of departure) for the computing.\n * @param {String} [options.distanceUnit = \"km\"] - The unit used to provide distances in the response (\"m\" or \"km\").\n * @param {String} [options.timeUnit = \"second\"] - The unit used to provide duration in the response (\"standard\", \"second\", \"minute\", \"hour\").\n * @param {Boolean} [options.smoothing = false] - DEPRECATED: Set this parameter to true if you want the resulting geometry to be smoothed.\n * @param {Boolean} [options.holes = false] - DEPRECATED: Set this parameter to true if you want the resulting geometry (polygon) to have holes if pertinent.\n * @param {Function} options.onSuccess - Callback function for getting successful service response. Takes a {@link Gp.Services.IsoCurveResponse} object as a parameter except if \"rawResponse\" is set to true.\n * @param {Function} [options.onFailure] - Callback function for handling unsuccessful service responses (timeOut, missing rights, ...). Takes a {@link Gp.Error} object as parameter.\n * @param {Number} [options.timeOut=0] - Number of milliseconds above which a timeOut response will be returned with onFailure callback (see above). Default value is 0 which means timeOut will not be handled.\n * @param {String} [options.outputFormat='json'] - Output format (\"json\") to use for underlying webService. Only use if you know what you are doing.\n * @param {String} [options.serverUrl=https://data.geopf.fr/navigation/isochrone] - Web service URL. If used, options.apiKey parameter is ignored. Only use if you know what you're doing.\n * @param {Boolean} [options.ssl = true] - Use of HTTPS or HTTP protocol to request the services. HTTPS by default (ssl=true).\n * @param {String} [options.protocol=XHR] - Protocol used to handle dialog with web service. Possible values are 'JSONP' ({@link https://en.wikipedia.org/wiki/JSONP}) and 'XHR' ({@link https://en.wikipedia.org/wiki/XMLHttpRequest}). Only XHR protocol is supported in a NodeJS environment. Only use if you know what you're doing.\n * @param {String} [options.proxyURL] - Proxy URL to use when requesting underlying web service. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you're doing.\n * @param {String} [options.callbackSuffix] - Callback function name suffix to use in case of a JSONP protocol use (see above), to set your own suffix instead of auto-increment. Ignored when options.protocol is set to 'XHR' value. Only use if you know what you're doing.\n * @param {String} [options.httpMethod=GET] - HTTP method to use when requesting underlying web service in case of a XHR protocol use (see above). Possible values are 'GET' and 'POST'. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {String} [options.contentType=\"application/xml\"] - Content-Type to use when requesting underlying web service in case of a XHR protocol use (see above) and if method HTTP is POST. Ignored when options.protocol is set to 'JSONP' value. Only use if you know what you are doing.\n * @param {Boolean} [options.rawResponse=false] - Setting this parameter to true implies you want to handle the service response by yourself : it will be returned as an unparsed String in onSuccess callback parameter. Only use if you know what you are doing.\n * @param {Function} [options.onBeforeParse] - Callback function for handling service response before parsing (as an unparsed String). Takes a String as a parameter (the raw service response). Returns a String that will be parsed as the service response. Only use if you know what you are doing.\n */\n isoCurve : function (options) {\n var processIsoCurveService = new ProcessIsoCurve(options);\n processIsoCurveService.call();\n }\n};\n\n/**\n * Point object.\n *\n * @namespace\n * @alias Gp.Point\n *\n * @property {Float} x - Point abscissa\n * @property {Float} y - Point ordinate\n */\nvar point = {};\n\n/**\n * Circle object.\n *\n * @namespace\n * @alias Gp.Circle\n *\n * @property {Float} x - Circle center abscissa.\n * @property {Float} y - Circle center ordinate.\n * @property {Float} radius - Circle radius.\n */\nvar circle = {};\n\n/**\n * Bounding box object, expressed with four coordinates.\n *\n * @namespace\n * @alias Gp.BBox\n *\n * @property {Float} left - minimum abscissa\n * @property {Float} right - maximum abscissa\n * @property {Float} bottom - minimum ordinate\n * @property {Float} top - maximum ordinate\n */\nvar bbox = {};\n\nexport default Services;\n","/**\n * Classe utilitaire\n *\n * @module Helper\n * @alias Gp.Helper\n */\nvar Helper = {\n\n /**\n * concatenation des parametres key/value dans les urls\n *\n * @method normalyzeParameters\n * @static\n * @param {Object} params - tableau de clef/valeur\n *\n * @example\n * Gp.Utils.Helper.normalyzeParameters ({\n * key1:value1,\n * key2:value2,\n * key3:value3\n * });\n * // out : \"key1=value1&key2=value2&key3=value3\"\n *\n * @returns {String} retourne les paramètres concaténés\n */\n normalyzeParameters : function (params) {\n var myParams = null;\n\n if (params) {\n var tabParams = [];\n for (var key in params) {\n if (params.hasOwnProperty(key)) {\n var value = params[key];\n if (!value) {\n value = \"\";\n }\n tabParams.push(key + \"=\" + value);\n }\n }\n\n myParams = tabParams.join(\"&\");\n }\n\n return myParams;\n },\n\n /**\n * Concaténation et encodage des urls.\n *\n * @method normalyzeUrl\n * @static\n * @param {String} url - url\n * @param {Object|String} params - tableau de clef/valeur ou string\n * @param {Boolean} encode - true|false, false par defaut\n *\n * @example\n * Gp.Utils.Helper.normalyzeUrl (url, {\n * key1:value1,\n * key2=:value2,\n * key3:value3\n * });\n * // out : \"url?key1=value1&key2=value2&key3=value3\"\n *\n * @returns {String} retourne une url normalisée\n */\n normalyzeUrl : function (url, params, encode) {\n var myUrl = url;\n\n if (url) {\n if (url.split(\"?\").length - 1 >= 2) {\n // S'il y a plusieurs \"?\" dans l'URL, on garde le premier et on remplace les autres par des &\n var firstOccuranceIndex = url.search(/\\?/) + 1;\n myUrl = url.substring(0, firstOccuranceIndex) + url.slice(firstOccuranceIndex).replace(/\\?/g, \"&\");\n }\n\n var k = url.indexOf(\"?\");\n if (k === -1) { // pas de ? et KVP\n myUrl += \"?\";\n }\n\n if (k !== -1 && k !== url.length - 1) { // KVP\n myUrl += \"&\";\n }\n }\n\n if (params) {\n if (typeof params === \"string\") {\n params = params.replace(\"?\", \"\");\n myUrl += params;\n } else {\n myUrl += this.normalyzeParameters(params);\n }\n }\n\n if (encode) {\n // FIXME bonne idée ?\n myUrl = encodeURIComponent(myUrl);\n }\n\n return myUrl;\n },\n\n /**\n * Indentation d'une chaine\n *\n * @method indent\n * @static\n * @param {Number} n - nombre de tabulation\n * @param {String} msg - chaine\n *\n * @example\n * Gp.Utils.Helper.indent (2, \"message à indenter\")\n * // out\n * // ........message à indenter\n *\n * @returns {String} retourne une chaine indentée\n */\n indent : function (n, msg) {\n var num = n || 0;\n return new Array(num + 1).join(\"\\t\") + msg;\n }\n};\n\nexport default Helper;\n","import * as Log from \"loglevel\";\n\nvar LoggerByDefault = {\n /**\n * logger statique\n *\n * @static\n * @param {String} name - nom du logger\n * @returns {Object} retourne un logger\n */\n getLogger : function (name) {\n // Substitute global constants configured at compile time\n // cf. webpack.config.js\n // on définit process si non défini dans l'environnement\n // eslint-disable-next-line no-use-before-define\n if (typeof process === \"undefined\") {\n var process = {};\n process.env = {\n VERBOSE : false\n };\n }\n (process.env.VERBOSE) ? Log.enableAll() : Log.disableAll();\n var logname = name || \"default\";\n return Log.getLogger(logname);\n }\n};\n\nexport default LoggerByDefault;\n","/**\n * Classe de gestion des erreurs qui permer d'associer un message d'erreur à l'exception lancée.\n *\n * @example\n * MessagesResources.getMessage(\"ERROR_PARAM_MISSING\", \"x\", \"y\", \"z\")));\n * // --> output : Parameter(s) 'x - y - z' missing\n *\n * @module MessagesResources\n * @alias Gp.Utils.MessagesResources\n * @private\n */\nvar MessagesResources = {\n\n // Paramètres\n PARAM_MISSING : \"Parameter(s) '%var%' missing\",\n PARAM_EMPTY : \"Parameter(s) '%var%' empty\",\n PARAM_TYPE : \"Wrong type(s) for parameter(s) '%var%'\",\n PARAM_FORMAT : \"Parameter(s) '%var%' not correctly formatted\",\n PARAM_NOT_SUPPORT : \"Value(s) for parameter(s) '%var%' not supported\",\n PARAM_NOT_SUPPORT_NODEJS : \"Value(s) for parameter(s) '%var%' not supported to NodeJS\",\n PARAM_UNKNOWN : \"Value(s) for parameter(s) '%var%' unknown\",\n\n // Services\n // Requête\n SERVICE_REQUEST_BUILD : \"An error occurred during the request building of the service\",\n SERVICE_REQUEST_EMPTY : \"The request sent to the service is empty\",\n\n // Réponse\n SERVICE_RESPONSE_EXCEPTION : \"The service returned an exception : '%var%'\",\n SERVICE_RESPONSE_EXCEPTION_2 : \"The service returned an exception\",\n SERVICE_RESPONSE_ANALYSE : \"An error occurred while parsing the response '%var%' of the service\",\n SERVICE_RESPONSE_ANALYSE_2 : \"An unknown error occurred while parsing the response\",\n SERVICE_RESPONSE_EMPTY : \"The response of the service is empty\",\n SERVICE_RESPONSE_EMPTY_2 : \"The response from the service could not be analyzed or is empty\",\n SERVICE_RESPONSE_FORMAT : \"The format of the service response is not supported (handled format(s) : '%var%')\",\n SERVICE_RESPONSE_FORMAT_2 : \"The format of the service response is not supported\",\n SERVICE_RESPONSE_FORMAT_3 : \"No suggestion matching the search\",\n\n // Classes\n CLASS_CONSTRUCTOR : \"'%var%' constructor cannot be called as a function.\",\n\n /**\n * Fonction qui va retourner le message d'erreur associé à la clé donnée\n *\n * @method getMessage\n * @param {String} clef - Clef de l'erreur (ex : ERROR_PARAM)\n * @param {String[]} parametres - Paramètres/variables concernés par le message d'erreur associé à la clef donnée\n * @return {String} message - String contenant le message de l'exception\n */\n getMessage : function (clef, parametres) {\n // param de la fonction uniquement pour la documentation...\n\n if (Object.keys(arguments).length === 0) {\n return \"Message indefined !\";\n }\n\n var params = Array.prototype.slice.call(arguments);\n var key = params.shift();\n var args = params;\n\n var message = this[key];\n\n try {\n if (Array.isArray(args) && args.length > 0) {\n message = message.replace(\"%var%\", args.join(\" - \"));\n } else {\n message = message.replace(\"%var%\", \"%var% (not specified)\");\n }\n } catch (e) {\n // error de string.replace()\n\n }\n\n return message;\n }\n};\n\nexport default MessagesResources;\n","/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(definition);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = definition();\n } else {\n root.log = definition();\n }\n}(this, function () {\n \"use strict\";\n\n // Slightly dubious tricks to cut down minimized file size\n var noop = function() {};\n var undefinedType = \"undefined\";\n var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (\n /Trident\\/|MSIE /.test(window.navigator.userAgent)\n );\n\n var logMethods = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n ];\n\n var _loggersByName = {};\n var defaultLogger = null;\n\n // Cross-browser bind equivalent that works at least back to IE6\n function bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function() {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n }\n\n // Trace() doesn't print the message in IE, so for that case we need to wrap it\n function traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n // In old IE, native console methods themselves don't have apply().\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace) console.trace();\n }\n\n // Build the best logging method possible for this env\n // Wherever possible we want to bind, not wrap, to preserve stack traces\n function realMethod(methodName) {\n if (methodName === 'debug') {\n methodName = 'log';\n }\n\n if (typeof console === undefinedType) {\n return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n } else if (methodName === 'trace' && isIE) {\n return traceForIE;\n } else if (console[methodName] !== undefined) {\n return bindMethod(console, methodName);\n } else if (console.log !== undefined) {\n return bindMethod(console, 'log');\n } else {\n return noop;\n }\n }\n\n // These private functions always need `this` to be set properly\n\n function replaceLoggingMethods() {\n /*jshint validthis:true */\n var level = this.getLevel();\n\n // Replace the actual methods.\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = (i < level) ?\n noop :\n this.methodFactory(methodName, level, this.name);\n }\n\n // Define log.log as an alias for log.debug\n this.log = this.debug;\n\n // Return any important warnings.\n if (typeof console === undefinedType && level < this.levels.SILENT) {\n return \"No console available for logging\";\n }\n }\n\n // In old IE versions, the console isn't present until you first open it.\n // We build realMethod() replacements here that regenerate logging methods\n function enableLoggingWhenConsoleArrives(methodName) {\n return function () {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this);\n this[methodName].apply(this, arguments);\n }\n };\n }\n\n // By default, we use closely bound real methods wherever possible, and\n // otherwise we wait for a console to appear, and then try again.\n function defaultMethodFactory(methodName, _level, _loggerName) {\n /*jshint validthis:true */\n return realMethod(methodName) ||\n enableLoggingWhenConsoleArrives.apply(this, arguments);\n }\n\n function Logger(name, factory) {\n // Private instance variables.\n var self = this;\n /**\n * The level inherited from a parent logger (or a global default). We\n * cache this here rather than delegating to the parent so that it stays\n * in sync with the actual logging methods that we have installed (the\n * parent could change levels but we might not have rebuilt the loggers\n * in this child yet).\n * @type {number}\n */\n var inheritedLevel;\n /**\n * The default level for this logger, if any. If set, this overrides\n * `inheritedLevel`.\n * @type {number|null}\n */\n var defaultLevel;\n /**\n * A user-specific level for this logger. If set, this overrides\n * `defaultLevel`.\n * @type {number|null}\n */\n var userLevel;\n\n var storageKey = \"loglevel\";\n if (typeof name === \"string\") {\n storageKey += \":\" + name;\n } else if (typeof name === \"symbol\") {\n storageKey = undefined;\n }\n\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {}\n }\n\n function getPersistedLevel() {\n var storedLevel;\n\n if (typeof window === undefinedType || !storageKey) return;\n\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {}\n\n // Fallback to cookies if local storage gives us nothing\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var cookieName = encodeURIComponent(storageKey);\n var location = cookie.indexOf(cookieName + \"=\");\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(\n cookie.slice(location + cookieName.length + 1)\n )[1];\n }\n } catch (ignore) {}\n }\n\n // If the stored level is not valid, treat it as if nothing was stored.\n if (self.levels[storedLevel] === undefined) {\n storedLevel = undefined;\n }\n\n return storedLevel;\n }\n\n function clearPersistedLevel() {\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage.removeItem(storageKey);\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n } catch (ignore) {}\n }\n\n function normalizeLevel(input) {\n var level = input;\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n return level;\n } else {\n throw new TypeError(\"log.setLevel() called with invalid level: \" + input);\n }\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n if (userLevel != null) {\n return userLevel;\n } else if (defaultLevel != null) {\n return defaultLevel;\n } else {\n return inheritedLevel;\n }\n };\n\n self.setLevel = function (level, persist) {\n userLevel = normalizeLevel(level);\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(userLevel);\n }\n\n // NOTE: in v2, this should call rebuild(), which updates children.\n return replaceLoggingMethods.call(self);\n };\n\n self.setDefaultLevel = function (level) {\n defaultLevel = normalizeLevel(level);\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.resetLevel = function () {\n userLevel = null;\n clearPersistedLevel();\n replaceLoggingMethods.call(self);\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n self.rebuild = function () {\n if (defaultLogger !== self) {\n inheritedLevel = normalizeLevel(defaultLogger.getLevel());\n }\n replaceLoggingMethods.call(self);\n\n if (defaultLogger === self) {\n for (var childName in _loggersByName) {\n _loggersByName[childName].rebuild();\n }\n }\n };\n\n // Initialize all the internal levels.\n inheritedLevel = normalizeLevel(\n defaultLogger ? defaultLogger.getLevel() : \"WARN\"\n );\n var initialLevel = getPersistedLevel();\n if (initialLevel != null) {\n userLevel = normalizeLevel(initialLevel);\n }\n replaceLoggingMethods.call(self);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n defaultLogger = new Logger();\n\n defaultLogger.getLogger = function getLogger(name) {\n if ((typeof name !== \"symbol\" && typeof name !== \"string\") || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name,\n defaultLogger.methodFactory\n );\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = (typeof window !== undefinedType) ? window.log : undefined;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n };\n\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n // ES6 default export, for compatibility\n defaultLogger['default'] = defaultLogger;\n\n return defaultLogger;\n}));\n","\"use strict\";\n\n// ref: https://github.com/tc39/proposal-global\nvar getGlobal = function () {\n\t// the only reliable means to get the global object is\n\t// `Function('return this')()`\n\t// However, this causes CSP violations in Chrome apps.\n\tif (typeof self !== 'undefined') { return self; }\n\tif (typeof window !== 'undefined') { return window; }\n\tif (typeof global !== 'undefined') { return global; }\n\tthrow new Error('unable to locate global object');\n}\n\nvar globalObject = getGlobal();\n\nmodule.exports = exports = globalObject.fetch;\n\n// Needed for TypeScript and Webpack.\nif (globalObject.fetch) {\n\texports.default = globalObject.fetch.bind(globalObject);\n}\n\nexports.Headers = globalObject.Headers;\nexports.Request = globalObject.Request;\nexports.Response = globalObject.Response;\n","module.exports = ol.extent;","module.exports = ol.format.GeoJSON;","module.exports = ol.layer.Tile;","module.exports = ol.layer.Vector;","module.exports = ol.loadingstrategy;","module.exports = ol.proj;","module.exports = ol.source.Vector;","module.exports = ol.tilegrid;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","const __WEBPACK_NAMESPACE_OBJECT__ = ol.control.Control;","var checkDsfr = function () {\n // HACK: check si le styl dsfr est chargé via la variable blue-france-sun-113-625\n var style = getComputedStyle(document.documentElement);\n var color = style.getPropertyValue(\"--blue-france-sun-113-625\");\n if (color === \"\") {\n return false;\n }\n return true;\n};\n\nexport default checkDsfr;\n\n","import Control from \"ol/control/Control\";\nimport checkDsfr from \"./Utils/CheckDsfr\";\n\nvar ControlExtended = class ControlExtended extends Control {\n\n constructor (options) {\n options = options || {};\n super({\n element : options.element,\n target : options.target,\n render : options.render\n });\n // Can the control appear in the ControlList control\n if (options && options.listable) {\n this.listable = true;\n } else {\n this.listable = false;\n }\n // Set the control desctiption\n if (options && options.description) {\n this.description = options.description;\n } else {\n this.description = \"\";\n }\n }\n\n setPosition (pos) {\n if (this.getMap()) {\n var instance = new PositionFactory(this);\n instance.set(pos);\n }\n }\n\n updatePosition (pos) {\n if (this.getMap()) {\n var instance = new PositionFactory(this);\n instance.update(pos);\n }\n }\n\n};\n\nexport default ControlExtended;\n\n/**\n * gestion des anchors\n */\nconst ANCHORS = [\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\"\n];\n\n/**\n * Position\n * @private\n */\nclass PositionFactory {\n\n /**\n * constructor\n * @param {*} caller - ...\n */\n constructor (caller) {\n this.caller = caller;\n this.container = null;\n\n this.#createContainer(\"top-left\");\n this.#createContainer(\"top-right\");\n this.#createContainer(\"bottom-left\");\n this.#createContainer(\"bottom-right\");\n\n return this;\n }\n\n /**\n * ...\n * @param {*} name - ...\n * @returns {Boolean} ...\n */\n #existContainer (name) {\n var div = this.container.children[\"position-container-\" + name];\n if (div) {\n return true;\n }\n return false;\n }\n\n /**\n * ...\n * @param {*} name - ...\n * @private\n */\n #createContainer (name) {\n this.container = this.caller.getMap().getOverlayContainerStopEvent();\n\n if (this.#existContainer(name)) {\n return;\n }\n // INFO\n // positionner les classes position-container-[left|right|top|bottom]\n // ex. { position:relative; height:50px; width:100%; }\n var div = document.createElement(\"div\");\n div.id = \"position-container-\" + name;\n div.className = \"position position-container-\" + name ;\n\n this.container.appendChild(div);\n }\n\n /**\n * ...\n * @param {*} pos - ...\n * @param {*} update - ...\n * @todo fonctionnement à tester !\n */\n #setAnchor (pos, update) {\n var self = this;\n const position = (pos) => {\n var element = self.container.children[\"position-container-\" + pos];\n return element.children.length;\n };\n const sizeW = (pos) => {\n var element = self.container.children[\"position-container-\" + pos];\n var width = element.offsetWidth;\n return width;\n };\n const sizeH = (pos) => {\n var element = self.container.children[\"position-container-\" + pos];\n var height = element.offsetHeight;\n if (update) {\n if (pos.includes(\"top\")) {\n height = 0;\n }\n // on recalcule la position en hauteur\n for (let index = 0; index < element.children.length; index++) {\n const id = element.children[index].id;\n if (id === self.caller.element.id) {\n height = (pos.includes(\"bottom\")) ? height - self.caller.element.offsetHeight : height * (-1);\n break;\n }\n height -= element.children[index].offsetHeight;\n }\n }\n return height;\n };\n const clear = (element) => {\n element.style.top = \"unset\";\n element.style.bottom = \"unset\";\n element.style.left = \"unset\";\n element.style.right = \"unset\";\n };\n\n // on supprime le style de positionnement (top, left...)\n // car on souhaite une nouvelle position\n clear(this.caller.element);\n this.caller.element.style.position = \"unset\"; // div.GPwidget\n\n // on recherche les panneaux (panel) :\n // * panel de formulaire\n // * panel de resultats (?)\n var panels = Array.from(this.caller.element.getElementsByClassName(\"GPpanel\"));\n if (panels.length === 0) {\n return;\n }\n var offset = 0;\n panels.forEach((panel) => {\n // INFO\n // on va eviter de modifier les panneaux de resultats\n // car leurs positions sont souvent relative aux panneaux\n // des formulaires\n if (panel.nodeName.toLowerCase() !== \"dialog\") {\n return;\n }\n clear(panel);\n // on modifie le positionnement du menu (dialog ou div : panel)\n // en fonction du bouton\n // ex. bouton : bottom-left, menu : bottom:0px; left:50px\n switch (pos.toLowerCase()) {\n case \"top-left\":\n if (checkDsfr()) {\n panel.style.top = \"0px\";\n } else {\n panel.style.top = position(pos) ? sizeH(pos) + \"px\" : \"0px\";\n }\n panel.style.left = sizeW(pos) + offset + \"px\";\n break;\n case \"bottom-left\":\n if (checkDsfr()) {\n panel.style.top = \"0px\";\n } else {\n panel.style.bottom = position(pos) ? sizeH(pos) + \"px\" : \"0px\";\n }\n panel.style.left = sizeW(pos) + offset + \"px\";\n break;\n case \"top-right\":\n if (checkDsfr()) {\n panel.style.top = \"0px\";\n } else {\n panel.style.top = position(pos) ? sizeH(pos) + \"px\" : \"0px\";\n }\n panel.style.right = sizeW(pos) + offset + \"px\";\n break;\n case \"bottom-right\":\n if (checkDsfr()) {\n panel.style.top = \"0px\";\n } else {\n panel.style.bottom = position(pos) ? sizeH(pos) + \"px\" : \"0px\";\n }\n panel.style.right = sizeW(pos) + offset + \"px\";\n break;\n default:\n break;\n }\n offset += panel.offsetWidth;\n });\n }\n\n /**\n * ...\n * @param {*} pos - ...\n * @public\n */\n set (pos) {\n if (!ANCHORS.includes(pos.toLowerCase())) {\n return;\n }\n // positionnement de l'element\n this.#setAnchor(pos, false);\n\n if (pos.includes(\"bottom\")) {\n this.container.children[\"position-container-\" + pos].prepend(this.caller.element);\n } else {\n this.container.children[\"position-container-\" + pos].appendChild(this.caller.element);\n }\n }\n\n /**\n * ...\n * @param {*} pos - ...\n * @public\n */\n update (pos) {\n if (!ANCHORS.includes(pos.toLowerCase())) {\n return;\n }\n // positionnement de l'element\n // mais, il faut prendre en compte la position !\n this.#setAnchor(pos, true);\n }\n\n};\n","const exceptions = [\"GPoverviewMap\", \"GPfullScreen\"];\n\nfunction getSameSideOpenedPanel (position, openedPanelID) {\n // on ajoute aux exceptions le panel qui vient d'être ouvert\n var exceptionPanel = [...exceptions, openedPanelID];\n var controlPanels = [];\n if (position && position.includes(\"left\")) {\n var bottomLeft = document.getElementById(\"position-container-bottom-left\");\n var topLeft = document.getElementById(\"position-container-top-left\");\n controlPanels = [...bottomLeft.children, ...topLeft.children];\n }\n if (position && position.includes(\"right\")) {\n var bottomRight = document.getElementById(\"position-container-bottom-right\");\n var topRight = document.getElementById(\"position-container-top-right\");\n controlPanels = [...bottomRight.children, ...topRight.children];\n }\n // on ne ferme que les panles déjà ouverts qui ne sont pas exceptions\n return controlPanels.filter(p => {\n var panelID = p.id.match(/(\\w+)-[0-9]+/)[1];\n var isException = exceptionPanel.includes(panelID);\n var isOpened = p.getElementsByTagName(\"button\")[0].getAttribute(\"aria-pressed\");\n if (isOpened === \"true\" && !isException) {\n return p;\n }\n });\n}\n\nvar PanelManager = function (position, openedPanelID) {\n var openedPanel = getSameSideOpenedPanel(position, openedPanelID);\n if (openedPanel.length > 0) {\n openedPanel[0].getElementsByTagName(\"button\")[0].click();\n }\n};\n\nexport default PanelManager;\n","import PanelManager from \"../Utils/PanelManager\";\n// Mixin pour ajouter des méthodes communes à tous les widgets.\n\n// voir fichiers DOM et assign\n// modifier snippets.\nvar Widget = {\n /**\n * This method is called when a widget opens a panel\n * It calls the panelManager to automatically close other panels\n */\n onPanelOpen : function () {\n // On récupère l'id du widget à partir de l'id du DOM de la forme GPwidgetName-1876465465\n PanelManager(this.options.position, this.element.id.match(/(\\w+)-[0-9]+/)[1]);\n }\n};\n\nexport default Widget;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.Overlay;","var Marker = {\n lightOrange : \"data:image/png;base64,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IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjkyYWVkNjM2LWY3MDMtNDAzOC1hNzM4LWZiYzYxYzZlMTljNCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5NWMzZWI3NC0zYWRmLTRkYzUtOWZjZS1iODQ4NTc3Nzg4ODQiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0NjI3ZDg3NC1lZDIyLTRiZTUtYTlkNS00NDlmMzVhZDIxYzgiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5Mjc4OTUzMDYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphM2U3ZWQ1MS0xNTI4LTRhYjAtODVjOS0zNzNkNzgxZGM2ZmMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjI3KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PofUkY4AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGRuA4VZTAAAFcElEQVRYw82YW2xbVRaGv7XP8bHjXByHQkNhWigdVX1AikRBMBoQ8wASl4fRqPDAAxIPKAVxeRqQRohHBEVCaoGKUBCl4qHcNKCZVKMRRQxtgTaACLRKqlwB14NzM2ni2D2XvXjgBFXQOnFiA1uy/HB89u9/7bX+vf4l1HnpK57hTNCE0AzqAS5gAAuEID5KiWSiLPf4tp7YUjcSu4yLZzdi2IJyNXANcBlwAdAKzAHTwDhwDKEPywC+GZWHbPi7IKOvZIWguAnlr8BtwJ+AxDJeDYCPgF6Ed0hkh+Weov5mZLTHJMDeBjwYk0itYJtKTOpZML3SbYNfnYz2SBr0buARYENcFytdFvga2AGyT7p14Vcjoz3ShOgdKDuAi+pUewpMIDyCypvSreWGk9HdroOEV2F4A1hfTxGJCX2D5U7U/UzuD6NaXq49NRJhBsOjwMVLEtE4gaL4W5cV3IsxPEoizDT0ZLTHcSH6M/BWLLlVwpQKuPzhb+i8sRkv04Y/e5rvPigxtnM9trKU2k0D28A5LN3RsmXbrbFOU8DtQLpqfJqu97nh6TydmzvwWpOI8VDbxqbrkmz62yk+/Ps6yoe8KkeV/hHHfgrMNyrNEkBX1SAktgRs3T7ApV1rSWayiEkDLmLSJDNZLu1ay9btAyS2BEsEuWuZ99WKyRhgHeCcn8wGw/qbOnAS3jmfOwmP9Td1kNhQDduJcUwjyciS0RJXMMkWkPPUo/z4XFxZRhZII8mEwFCsT+f5xXTE7FAOteduItVaZodyhNPVZDeKccJGkxmsChIMOvTt6aRSzIP+7A9rRKWYp29PJ8GgsyqcVauZSADaj+IDTecWvBlD4e01HKjM07XtOOuuy+A2X0BYmib/8SxfvLWRYm8LdqZaCvkI/SDBci6nld0ze7KCLa4F3gSurR4MB5x1FnMhiCeor9hJiPKmWpbGp3EU2IbJFuTe5XfStbczLxgP7K0IPcCFDWhnJoFuMAek2/oNbWdku/WxHATejT1JPZcPvINysFYiK+gAFkXTK6H+MyhXADeseJ9fmrVDM6X080/+p1M2/yFsD1zjEIauEeMAqNpQE16oaKiqwfjYeLk+fuYl10HDq7DsBTavxs8o6FzFKez/dM3rLx9LjUyVxcb7yVkfzmpXFbACJURHIxgyxkyu1ml6qL0Z4YX4xl7Jfrrgm9Ov9bX/e++x1tHCgkQ11lgELGA4sBp3iHRbH5GDwJPAFLXo6KJnDmTh/aG2w2/3t47VSGQxs1zAE9U2s9pEjx3hXuBloCa7G1rxv8o3f/7SkUz/UFFWMqGRWMpHAqsDbl00KGotIXM7MawF7gKSS5oJJRospI7v+rD96Ikp8aV2EgrkVPW4OnIy6SVL9ZubvZgyaOVyYDfwl2oNqVWiXNEb231oTe+/BrzvK9Gy01MFyoiOKzIEmqsEfjGf/39U1yHgosJFUXhlFMl+z9E/nkvhVNHZsjux+9Caf77RnyzMBaJLmW4RrWAlB3Y4Uh13HLOA4wQjo6O2IRPNxVV4JuG5Et2SSelzjtFLzsZQ0NIZ8/2rx7K9+/paxqbKvyh4Bc4AFQxzau23Dow7FS+nHmfEUz05OqINH8+evXJPJVOuE93XkY4eSziaXcQpB2b+vZNt7+/8IPPl2OxPRMJ4dDsLzIho3hpzamJ6aqJ0ei6qtZAasmZ2OS1RyOMd6egBIzSFVoKj4y1Hnvhv+8cD02ZOkEmgIKITVnXKWDs1ksvNrgbTbRSZ46cypY50aWcllIsyKXvr8GTyi9f6WvePFGVQhO8EPW2NzI+OfV2pF2bDTgbg8D/aJeVUspd1BK3/G24u7/skO3+iYP3h3LdhI/B+AGodUpo8WKwoAAAAAElFTkSuQmCC\",\n darkOrange : \"data:image/png;base64,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czpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjIxNDZjMzUzLWIxZjItNGVjOC04NzQ3LTIwMGEyYWExM2ViMyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2NGViNmI2Ni03Y2I2LTRkZGUtYTI3OS01MGY0ZWFiZGFhODAiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1ODRhM2VjZC1kNGFmLTQ3NjItYjA1ZS04ODk2MGQ4ZTk0Y2MiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE5MDM3ODI2MTQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxYzNjOGRkZi1kMjVkLTQ4YzQtYTAwYS0yMmU3ZDYwMzg1YjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI1OjAzKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PuhCAHgAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGQOTjc4FAAAFdklEQVRYw82YW2gcZRTHf+eb2dlkc9lsrFYr2notfSgWxKKiog8VvIFI9UFQEaWtYPFJfREfRRSEeqlttViLD/WGisYXrShWpfWC1WpSN5eN3cZumkuTzWY3c/mOD9lI0WSTTXbVA8M8zMz3n//5zvl/5xyhxqb3ewYvaERpAvUAFzCABUIQH6GAHyvKa76tJbbUjMRW4+LbC7GsQbgCWA+sAs4AWoA8MAxkgEMo32LoxDO98oIN/xdk9IGUYEYvRrgduAW4Gogt4NMA+BroQHkfm+qW3aP6n5HRTSYG9hZga5lEwyKWKZVJvQCmQ3bZ4F8no5skAXov8BiwspwXizUL9APPgOyVXTr5r5HRzdKI1TsRngHOqlHuKTCI8hhG3padWqw7GX3IddDwcixvAefXUkTKhH7HcBfifi8vh1E1H1cfGkGYxPI4cM68RGw5zf3y3S7IuedgeZwgTNZ1Z3Sz46LRNcA7Zcmd25yGgPWP/M7q65toTLZSHBvn6OcFDm07n6g0n9oNAxsR54DsjBYs2251QWAbgFuBREX/tF3rc9+zA6xa3U5jSxwxHmpbueyqOOvvOM7rj67g1JfedFTNagngVtR+B0zUK8xiwLqKTmhcE3Dblk4uXbecRDKFmATgIiZBIpni0nXLuW1LJ41rgnmcvG6B59WiyRhgBeDM+UZipWHthnbcmDf7b8Y81m5oJ7GyErZTxjH1JCPzesu4ghtvBpkjH2X6uXFlAVEg9SMjhEAamFsyp4Yjcuks1s6uXdZacuksU8OVZDcC0mW8OpFRQqBruvqdwwpdDh+9cjaF0QHQv/2wRhRGB6afdzkVkKZxtDoyVaqZBKCHEXygcXafjhi63l3G9tIEGzYe4ZKrksSbzmCqMEz6mzE+eedC+juaiUYqhZCPchgkqKB4SzxntqQEO7oceBu4srIzHIitsMTOBOMJ1leCkxAMmEpRWt6Vg8BGTConOxZeSVdfzmwxHmpvRtkJnFmHcuYksBkxH8tO69e1nJEd1sdhP/BBuUippfnA+3jsr5ZI9TnzV33mFcB/DuEi4LpFr/PPZu3LkanES08fOltWnxe2Ba5xCEPXiHEAVG2oMS9UNFTVINOXKdamn3nQdSC8HMMeYPVS+hkFzQdObl9m2Zu7+xt6hkKx5fXktGumdNXyZQUKiPZGkDbGnFxqp+kh9kaUHeUTezHr6WRkxt/oa/toT39Lby6QqMoci4BJDB8vpTtEdlkflf3A08AQ1ejoTM8cyeRnudYD72Zb+qokMhNZLuCJaqtZaqDLLi0i7EHYDVTV7oZW/J9PNf3wanfycLoki5nQSFnKewKrnW5NNMhtKRDlt6EsB+4G4vM2/UrUNd5w5Pl028FfiuJL9SQUyKrqEXXkaNyLF2o3N9vUYKB0AbAduKFSQWqVKFv0+rYfXdbx4aB3qqQLDk8VKCKaUSQNmi0F/ujAwB9RTYeAMwoXabg2QvZ5jl4ym8Ip6FjgDm7/bdl7bw3Ec/lItEJyWyAS0RJWsmC7I9WM45hJHCfo6e21dZlozlju3pjnSnRT0tMXHdFzT8dQ0EJoTr2eSXXs7W/uG/pnwiswBZQw5NXaYw5knJKXVY8p8VSP9vZo3cezp1v2nniDK9FD7V70RMxoaganGJmJT0+0frbtt+RPfVN/EQnLo9sxYEREB6wxxweHhwYL4/mo2kSqi43c5zRH8GS7Fz1shMZQJTg41PzVU7+2fdNZNHlBTgI5ER20qkPG2qGebHZsSTpULzJH8slCe6ywrWTlrGTM3tw9Ef/xjUzLvp6idIlwQtBxa2Sit6+/VCvMuu0MwIE726RBSqlViaDli6Gm4t6e1MQveet3Z4+F9cD7Ewo4WRJBbaaSAAAAAElFTkSuQmCC\",\n red : \"data:image/png;base64,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293bv2fa/f0ASM5yljz/NiUAAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmI5YjA2YTAwLWZkOTQtNDc5MC1hNzIzLTlkMGUwNGRiNTRlNyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1MTQ3ZGU5Yi1kOTA0LTRlNWYtYjIyYy0wZmMzOGRmMWI3ZGEiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YzBjNTI2YS1lYTkyLTQxYWItODM5Yy05OWFhYTM0YjdlYzciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE2NDAxNTU0MjYiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowMjQ4MDc5ZS1kMTYyLTQxZmItOGViYS1lMzY2NTRiNGRjMjYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjIwOjQwKzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PkaovgIAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPFCiKn0kIAAAFfUlEQVRYw82YTWxc1RXHf+e+N2/GH+Px2IEEV02AgqIsIkwgoYS2ahepVGCBUOiCRRdsAAnECthErBBCICGFj4gqRQqBRSABUrVm1URtCSATJ5ASZCPHH0kGgx1/xJl5nvH7uIcFY4iIM/GzZyhHenqL994993/u+f/fOUeos+nNnkHCJoQWRD0UFzCARYhQCVB8NFWWTwNbT99SNxC3GZfIXg9sADYDWxCuRekEskARYQplFPgEOAr045ph6bXRzwKM3pEX5mduQLkHuAvYCqSW8GkIfAT0IBwknT8lH87o/w2M3mpSqL0LeLQKIrOMZSpVUC8hpkf6bPiTg9FbpBn0L8ATwLoqL5ZrFjgNPAeyV47p3E8GRjdLE6r3oTwHXF0n7ikwgfAEIvvlqJYbDkY3uw4a3YLyNrC2niJSBXQG4c+Ie0yORnGSj5OnRhzlUJ4ErrkikBAoAjPVe7ik4F6D8iRxlGvoyegmx4X4NwgHgM6a8fUyIfc8doZbf99Ca66N0uwF+v7tc3DnWoJK6gqep1C2g3NEjsdLlm03GXSbAe4GmmvGZ91vA3Y8P8aN6ztoyaYxxsPaNrbcnmbbvV/x9ONdnPnA+w71otaMcDfYPqDUmDQTUgjdNYPQsSHkgYf62di9mmwujzHNgIsxzWRzeTZ2r+aBh/rp2BDWDLLQjSzpf7VMMIpB6QKcy77Tuc6wdVsHbspbfJspj63bOuhcV8u3g9KFJtufWQbHakfLdQUv3YrI4qwQ+e65616Jr6mknE4KJgIGgctLZnEq5vRgAWsXLyKttZweLFCcqiW7cdVP1DgwQoQwUNPJxIDDG7vXMDszBvqjDWvM7MwYb+xew8SAUzNowgCSDEwyNVMJQU8AAdC06DvBtOG/76xirlLi3u0nufn2HJmWTir+FJ9+PMu7B66nr6eVYLpWCgUoJ0DCGoq3wv/MbXkhmlkN7Ad+XTMY4kBTl6XlKnA8IQ4U/xyUx8wlB3ZpKvcC23Hz49K79Ep6GeWM8VB7J8pfgasaUM6cAx5EzPvSZ4OGljNy1AYIh4C/L6lASWYBcBCHQ0mBJOfM94rk+WjwAsKvgN8te51LK7kPpm3zK89OrZH1v4zaQ9c4RJFrxDgAqjbSlBcpGqlqODoyWq5TP1OtnoU9wPqV9DMKWlRnfJ+/6q3XKpmhSRVbXU8uuhb6Hq1eVsBHdDiGQWPMuZV1mpuMB/aPCK8CXcsMjs6pufCm3/7PPZXs8LhKnJBjMTCH4f2VdIfIcRsgcgh4FpgkiY4u9Mwqc4fn2468M58dSQhkIbNcwBPVNrPSRJdjWgb2AK8BidrdSCX4PGw5/re53IlBK8uZ0EhVyodCq/1uXTTIzfrExZ0oq4H7gfQSmv54IMqcfNFv7/0ilkCSg1CgoKon1ZEv017ar9/cbEvGEFeuQ9mF8IdaBamFuBB7I7tKq3r+EXjnK0tPTxUoIzqqyCBooRIGM2NjX8d1HQIuKFys0cYY2eeJ3riYwinorHUndvmr3nt7Pj1eVNEa5LZALKIVrBTAnopVRx3HzOE44dDwsG3IRHPBxrtTnkv8p5yjLzvoLy72oaC+mvOvz+V79pZbRyYvJbwC80AFQ1GtPevAqFPxCuoxL57ql8ND2vDx7MVW2JTOuMQPdxDvSInmF/yU1ZT+Nd92eGcp97+RH4BE1XHHLDAtomPWmK8mpiYn/AvFOCmRGmLTm53WOOKpDhM/YqApQsLe+dYPnym1f9xvTVGQc8C4iE5Y1Ulj7eRQoTC7Ih1qFJiTQc7vwN9ZUbk6Z+ydp6L0Z2+Ws/uGrAyI8I2gF6yR0vDI6Uq9fDbsZACO3NQuGa3kr3XC7H+ClvJeP1/6IrbBqbNno0b4+xbMlmARngcRbAAAAABJRU5ErkJggg==\",\n turquoiseBlue : \"data:image/png;base64,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/MUi8H5G35QHBm+BvjV3bu1znD4AWZpV+gY4OARGS5S97vHu3u65/XunPb8fN2tyj8UDOK0AAA0aaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjEwNGNlNWFhLTE1YzctNGI4Yi1iOGU1LTFmYWQyNWFiYzBhZCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpkNDMyZTY1Zi0xOThhLTQxM2EtYWYyMy1jNzhlNzczNGRlN2QiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyNzExODVkMi03MWZiLTRhZDMtYTJmMi1iNjM3OWU3MDc1OTEiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2ODQ5NDE4NjYyMzgzMjQiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NGFiYzNkYS1lZWJiLTRlZjctYjdjNS04ZDRjODY5OGVjODMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTI0VDE3OjI0OjI2KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pj0tlUwAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfnBRgPGBru/VeEAAAABmJLR0QA/wD/AP+gvaeTAAAFO0lEQVRYw9WYe2xTVRzHTx97dYS5B1UHa+/tY12dDoOKWyIGlfgHkCkSNTHGwHxA3NiAP/A5x4CMKEzdYL29YyAyBxKQZbI+NvYIaowaH9Ogi2GRbGjcFrbBNrq2a2/9nq5LCFnbbfSOeZJPTs/t6Tm/7/39zu+cU0IiXc7WSImNX0BsZiVYAhigmah5tHklsZrjSYtJSuZtaeSiiJU3gHUwfC9oARfBIHBP1DzaPH1eRuzmp0E6aTgSNX9EWMwSvOkMGPgG+CpguG8a0H7nA78zkMYqye0V0lYXDSHrYUw7cE5TxM04/b+38+vJ+RPRt0eIjVeAAhhyCQizFDKJEBjndaCY49Di4+CRlzFxfwSE3Ciol9i4DSBujoRUy7HIszFxdwSF3CioBy8qm1g5ufhirHwyJqwHrrDGWTlg8hFL1URN2+EF0XFPkyYuSWwhUVgnT2CygXBG3dFcM7bz1/au1u7OK9/93eWidUlHe1dCc810EsUAsXOPQZCI3rGZ6Wb4EXAEM0SCUFnZduz6T/09l4bHXYOCz+f0+XxeWg+7XYM/4vnKtlqHJHSIOrAHlYMFYmawRNCKycaDGZLVfMRdf/nPDpfXM+abotDnpy93dtzXfNgdZg+im2uimJ6h66UTeIMZsrat1jvkdPRRb/imLt4hl6N3DfqFEIPvOMzDJYspJsWfbUKEyFNttcKoyzkKo4UgYoRRt3OE9guT1br984nsmQ7gCWbIipaj4xeu9v/hFQTPlG7B89+u9v9O+4UQQ8f/BSlaVM8kgBOhji4p9mpvwQ+Wfwddjp6bQw2u8g44HT3535/tTUa/0Eccvg4sFDE1m2PBZkx2LVRqVcLQvG/PDDX1/tVxze38x+UZH6O1He28b764qgwtxOcf327eBGLFE9NikiD3qzDZhVBJgCJH3KubDnkfbD4s5Jw74qM1bcvDnxq8/vHt1SrS9InIJ2m7OQ4UYsKhCB9lJqHj0gPsHJzPvsS9w8rRRPDptI40M8PlH9fOJ5M5K008rsZmIwi5gc4QN9Zja8zn+5epch9PTFepU1iGuVunVqeyS9g0iv8zy96l0WiSjIsXx28iJEJhaONkMGB5YP14bkmI1SzIz1T0pRa9VKnNzCjUMcwWUAS2BtgWYLJN+xTo1OyrOhW7xsAwqnSGkd3i+uGjkT5Xw6DLt3AdEKQNB4YXbdtwQpuVuRtG7pwhxWA7vJgRib0nDuSDvtkIkjYcHE3aVWjRLL9/zyyETPK2Vq3OidAaOhiPDLcbxo3MRIik0eReWPnO15pHHiqbpYhS6hkNw7wAz0To6GM5hAzH3wkDa6b7x4bEwnkUfMnP6idX7Nex7GxElIDNerV6hU6jSdbp9RHck2w0w/FaGGoJm7KtnCfmWNlF1fOrK3Q6bekMRFABO7QM8yxewFLUi+5JSxPpAmcxy0gjt1Rytir4NcHKCfJTH/al5j1j1hr0pWEML55YD+x2GP6cVqNZZjQYEvUsG4vP4v8jKju5L1p6qnytxGKa6qogyOorBpVbXvxMe69xdxABb9I0DAGvIIRWp7NsBsJIoWVZKfaXuf+jMKp2b6z8+Adb4aErNwpCCh5J2pnfoH0ga08g7invBfaQjXjjuQifhyEgLdNolJP5UqR17y+QnSwvk1i565OZK6F8RzubvWwvDH8LvKZnmHXY8HKws+sNLJtI5muJ/7hYElOzJ1V+fN9R7CVDClPJOVXuqo06vS4HQjTwgDKDZRXk/1JiD7wrieFLk6T1lczCXUVK7aPZinS9XrTw+Q+Tql7SUmvGuQAAAABJRU5ErkJggg==\",\n defaultOffset : [-25.5, -32]\n};\n\nexport default Marker;\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.interaction;","// import OpenLayers\nimport Control from \"ol/control/Control\";\nimport {\n Select as SelectInteraction,\n Modify as ModifyInteraction,\n Draw as DrawInteraction\n} from \"ol/interaction\";\n// import local\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Utils from \"../../Utils/Helper\";\n\nvar logger = Logger.getLogger(\"interactions\");\n\n/**\n * @private\n * @description\n * Pourquoi et comment l'utiliser ?\n * Cette classe permet de gérer les interactions entre chaque extension.\n * Une extension qui active une interaction avec la carte, doit desactiver\n * les autres interactions issues d'autre extensions.\n * La désactivation d'une interaction s'accompagne d'actions telles que\n * le nettoyage des dessins, l'état du composant graphique, ...\n *\n * Ex\n * // desactive toutes les interactions avec l'opération par defaut : clean\n * Interactions.unset(map);\n * // desactive les interactions sauf celles de Drawing. On execute des\n * // operations particulieres : status, collapse et message\n * Interactions.unset(map, {\n * current : \"Drawing\",\n * status : false,\n * collapse : true,\n * messsage : [\"WARNING\", \"Ceci est un avertissement !\"]\n * });\n *\n * Dans le code de l'extension, il faut placer des informations dans l'interaction :\n * interaction.setProperties({\n * name : \"Drawing\",\n * source : this\n * });\n */\nvar Interactions = {\n\n /**\n * Liste des extensions qui utilisent le mécanisme des interactions\n */\n _extensions : [\n \"Measures\",\n \"ElevationPath\",\n \"Drawing\"\n ],\n\n /**\n * Options par defaut\n * - current : ex. \"Drawing\"\n * c'est l'extension qui demande la desactivation des autres interactions.\n * Par defaut, toutes les interactions sont desactivées.\n * - clean :\n * c'est la suppression des interactions, des dessins de la carte,\n * ainsi que la reinitialisation de l'état graphique.\n * Les extensions doivent implementer la méthode 'clean()'.\n * Par defaut, tous les dessins sont supprimés\n */\n _options : {\n current : null,\n clean : null\n },\n\n /**\n * Permet de desactive les interactions (Draw) de la carte pour les extensions,\n * sauf l'interaction courrante (si elle est renseignée avec l'option 'current').\n * Il est possible d'ajouter des fonctionnalités via les options.\n * Par defaut, l'option 'clean' est renseignée...\n *\n * @param {Object} map - the map\n * @param {Object} options - options\n */\n unset : function (map, options) {\n logger.trace(\"unset()\");\n\n var opts = {};\n Utils.mergeParams(opts, this._options);\n Utils.mergeParams(opts, options);\n\n var interactions = map.getInteractions().getArray();\n for (var i = 0; i < interactions.length; i++) {\n if (interactions[i].getActive() &&\n (interactions[i] instanceof DrawInteraction ||\n interactions[i] instanceof SelectInteraction ||\n interactions[i] instanceof ModifyInteraction)) {\n var prop = interactions[i].getProperties();\n var name = prop.name;\n if (typeof name !== \"undefined\" && this._extensions.indexOf(name) > -1) {\n // doit on desactiver l'interaction courrante ?\n if (opts.current && opts.current === name) {\n continue;\n }\n interactions[i].setActive(false);\n // instance de l'extension\n var source = prop.source;\n if (typeof source !== \"undefined\" && source instanceof Control) {\n // opérations sur le composant graphique\n for (var action in opts) {\n if (opts.hasOwnProperty(action)) {\n if (action === \"current\") {\n continue;\n }\n if (typeof source[action] === \"function\") {\n var args = Array.isArray(opts[action]) ? opts[action] : [opts[action]];\n source[action].apply(source, args);\n }\n }\n }\n }\n } else {\n interactions[i].setActive(false);\n }\n }\n }\n }\n};\n\nexport default Interactions;\n","/**\n * @module SelectorID\n * @alias module:~utils/SelectorID\n * @private\n * @description\n * formalisme d'un tag ID :\n * -> NAME(_ORDER)-1460636385836\n *\n * @example\n * Ex.\n * GProutePoints-1460636385836\n * GProutePoint_10-1460636385836\n */\nvar SelectorID = {\n\n /**\n * Construction d'un identifiant statique basé sur le timestamp,\n * et qui s'incremente de +1 à chaque appel\n * @function generate\n */\n generate : (function () {\n var timestamp = Math.floor(Date.now());\n return function () {\n return timestamp++;\n };\n })(),\n\n /**\n * nom du tag\n * @function name\n * @param {String} id - the id\n * @returns {String} index\n */\n name : function (id) {\n var name = null;\n\n var i = id.lastIndexOf(\"-\");\n if (i === -1) {\n name = id;\n } else {\n name = id.substring(0, i);\n }\n\n return name;\n },\n\n /**\n * numero d'identifiant du tag\n *\n * @function index\n * @param {String} id - the id\n * @returns {String} index\n */\n index : function (id) {\n var index = null;\n\n var name = this.name(id);\n // if (name !== id) {\n var i = name.lastIndexOf(\"_\");\n if (i !== -1) {\n index = name.substring(i + 1);\n }\n // }\n\n return index;\n },\n\n /**\n * uuid du tag\n *\n * @function uuid\n * @param {String} id - the id\n * @returns {String} uuid\n */\n uuid : function (id) {\n var uuid = null;\n\n var i = id.lastIndexOf(\"-\");\n if (i !== -1) {\n uuid = parseInt(id.substring(i + 1), 10);\n }\n\n return uuid;\n }\n\n};\n\nexport default SelectorID;\n","/**\n* @module MathUtils\n* @alias module:~utils/MathUtils\n* @description\n* ...\n*\n* @example\n* modulo();\n* decimalToDMS();\n* coordinateTo();\n* toInteger();\n* isInteger();\n* toFloat();\n*/\nvar MathUtils = {\n /**\n * Reste de la division euclidienne\n * \n * @function modulo\n * @param {Number} a - divisor\n * @param {Number} b - quotient\n * @returns {Number} Modulo\n */\n modulo : function (a, b) {\n var r = a % b;\n return r * b < 0 ? r + b : r;\n },\n\n /**\n * Transform degrees, minutes, seconds form decimal degrees -\n * Largely inspired by the private function degreesToStringHDMS from ol/coordinate.js\n *\n * @function decimalToDMS\n * @param {Number} degrees - decimal degrees\n * @param {Array} hemispheres - \"NS\" ou \"EO\"\n * @param {Number} numDigits - number of digits for seconds\n * @returns {Object} DMS coordinate\n */\n decimalToDMS : function (degrees, hemispheres, numDigits) {\n var normalizedDegrees = this.modulo(degrees + 180, 360) - 180;\n var x = Math.abs(3600 * normalizedDegrees);\n var dflPrecision = numDigits || 0;\n var precision = Math.pow(10, dflPrecision);\n\n var deg = Math.floor(x / 3600);\n var min = Math.floor((x - deg * 3600) / 60);\n var sec = x - (deg * 3600) - (min * 60);\n sec = Math.ceil(sec * precision) / precision;\n\n if (sec >= 60) {\n sec = 0;\n min += 1;\n }\n\n if (min >= 60) {\n min = 0;\n deg += 1;\n }\n\n var direction = hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0);\n return {\n d : deg,\n m : min,\n s : sec,\n direction : direction\n };\n },\n\n /**\n * Transform decimal degrees form degrees, minutes, seconds\n * \n * @function dmsToDecimal\n * @param {*} degrees - degrees\n * @param {*} minutes - minutes\n * @param {*} seconds - seconds\n * @param {*} hemispheres - \"NS\" ou \"EO\"\n * @returns {Number} decimal coordinate\n */\n dmsToDecimal (degrees, minutes, seconds, hemispheres) {\n var dd = degrees + minutes/60 + seconds/(60*60);\n \n if (hemispheres == \"S\" || hemispheres == \"O\") {\n dd = dd * -1;\n }\n return dd;\n },\n /**\n * ol coordinate to decimal\n * \n * @function coordinateToDecimal\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {lat, lng, unit:°}\n */\n coordinateToDecimal (olCoordinate) {\n var coordinate = {};\n coordinate.lat = olCoordinate[1].toFixed(6);\n coordinate.lng = olCoordinate[0].toFixed(6);\n coordinate.unit = \"°\";\n return coordinate;\n },\n\n /**\n * ol coordinate to dms\n * \n * @function coordinateToDMS\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {lat, lng, unit:dms}\n */\n coordinateToDMS (olCoordinate) {\n return {\n lng : MathUtils.decimalToDMS(olCoordinate[0], \"EO\", 2),\n lat : MathUtils.decimalToDMS(olCoordinate[1], \"NS\", 2),\n unit : \"DMS\"\n };\n },\n\n /**\n * ol coordinate to rad\n * \n * @function coordinateToRad\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {lat, lng, unit:rad}\n */\n coordinateToRad (olCoordinate) {\n var coordinate = {};\n var d = 0.01745329251994329577;\n coordinate.lng = olCoordinate[0] * d;\n coordinate.lng = coordinate.lng.toFixed(8);\n coordinate.lat = olCoordinate[1] * d;\n coordinate.lat = coordinate.lat.toFixed(8);\n coordinate.unit = \"rad\";\n return coordinate;\n },\n\n /**\n * ol coordinate to gon\n * \n * @function coordinateToGon\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {lat, lng, unit:gon}\n */\n coordinateToGon (olCoordinate) {\n var coordinate = {};\n var d = 1.11111111111111111111;\n coordinate.lng = olCoordinate[0] * d;\n coordinate.lng = coordinate.lng.toFixed(8);\n coordinate.lat = olCoordinate[1] * d;\n coordinate.lat = coordinate.lat.toFixed(8);\n coordinate.unit = \"gon\";\n return coordinate;\n },\n\n /**\n * ol coordinate to meter\n * \n * @function coordinateToMeter\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {x, y, unit:m}\n */\n coordinateToMeter (olCoordinate) {\n // on recoit toujours des coordonnées metriques\n var coordinate = {};\n coordinate.x = olCoordinate[0].toFixed(2);\n coordinate.y = olCoordinate[1].toFixed(2);\n coordinate.unit = \"m\";\n return coordinate;\n },\n\n /**\n * ol coordinate to kilometer\n * \n * @function coordinateToKMeter\n * @param {*} olCoordinate - see ol/coordinate.js\n * @returns {Object} - {x, lyng, unit:km}\n */\n coordinateToKMeter (olCoordinate) {\n // on recoit toujours des coordonnées metriques\n var coordinate = {};\n coordinate.x = (olCoordinate[0] / 1000).toFixed(2);\n coordinate.y = (olCoordinate[1] / 1000).toFixed(2);\n coordinate.unit = \"km\";\n return coordinate;\n },\n\n /**\n * Converts string to Integer\n *\n * @function toInteger\n * @param {String} s - string number\n * @param {Numeric} base - between 2 and 36\n * @returns {null|Numeric} result\n */\n toInteger : function (s, base) {\n var _base = base || 10;\n var n = parseInt(s, _base);\n if (!isNaN(n) && isFinite(n)) {\n return n;\n }\n return null;\n },\n\n /**\n * check if s represents an integer\n *\n * @function isInteger\n * @param {String} s - string number\n * @returns {Boolean} is integer\n */\n isInteger : function (s) {\n if (isNaN(s)) {\n return false;\n }\n\n var v = parseFloat(s);\n return ((v | 0) === v);\n },\n\n /**\n * Converts s to float\n *\n * @function toFloat\n * @param {String} s - string number\n * @returns {null|Numeric} result\n */\n toFloat : function (s) {\n var n = parseFloat(s);\n if (!isNaN(n) && isFinite(n)) {\n return n;\n }\n return null;\n }\n};\n\nexport default MathUtils;\n","/**\n * @module SearchEngineUtils\n * @alias module:~utils/SearchEngineUtils\n * @private\n * @description\n * ...\n *\n * @example\n * advancedSearchFiltersByDefault();\n * zoomToResultsByDefault();\n */\nvar SearchEngineUtils = {\n /**\n * Advanced Search Filters by default\n * @function advancedSearchFiltersByDefault\n */\n advancedSearchFiltersByDefault : {\n PositionOfInterest : [\n {\n name : \"category\",\n title : \"Type\",\n value : [\n \"cimetière\",\n \"aérodrome\",\n \"réservoir\",\n \"administratif\",\n \"construction linéaire\",\n \"construction ponctuelle\",\n \"construction surfacique\",\n \"cours d'eau\",\n \"détail hydrographique\",\n \"détail orographique\",\n \"équipement de transport\",\n \"plan d'eau\",\n \"poste de transformation\",\n \"terrain de sport\",\n \"transport par câble\",\n \"zone d'activité ou d'intérêt\",\n \"zone d'habitation\",\n \"lieu-dit non habité\"\n ]\n }, {\n name : \"postcode\",\n title : \"Code postal\"\n }, {\n name : \"citycode\",\n title : \"Code INSEE\"\n }\n ],\n StreetAddress : [\n {\n name : \"city\",\n title : \"Ville\"\n }, {\n name : \"postcode\",\n title : \"Code postal\"\n }, {\n name : \"citycode\",\n title : \"Code INSEE\"\n }\n ],\n CadastralParcel : [\n {\n name : \"departmentcode\",\n title : \"Code département (INSEE)\",\n description : \"Code INSEE du département (ex: 01, 94)\"\n }, {\n name : \"municipalitycode\",\n title : \"Code commune (INSEE)\",\n description : \"Code INSEE de la commune : 3 chiffres (ex: 067)\"\n }, {\n name : \"oldmunicipalitycode\",\n title : \"Commune absorbée\",\n description : \"Commune absorbée : 3 chiffres (ex: 000, 001)\"\n }, {\n name : \"districtcode\",\n title : \"Arrondissement\",\n description : \"Arrondissement : 3 chiffres (ex: 004, 012)\"\n }, {\n name : \"section\",\n title : \"Section\",\n description : \"Section Cadastrale : 2 caractères (chiffre et/ou lettre)\"\n }, {\n name : \"number\",\n title : \"Numéro\",\n description : \"Numéro de la parcelle : 4 chiffres (ex: 0041, 0250)\"\n }, {\n name : \"sheet\",\n title : \"Feuille\",\n description : \"Numéro de la feuille cadastrale\"\n }\n ]\n },\n\n /**\n * Provides default zoom based on results.\n *\n * @function zoomToResultsByDefault\n * @param {Object} info - location information\n * @returns {Integer} zoom level\n */\n zoomToResultsByDefault : function (info) {\n // FIXME\n // la classification du geocodage est differente de l'importance de l'autocompletion !\n\n var zoom = 15;\n\n var service = info.service;\n var fields = info.fields;\n var type = info.type;\n\n var importance = {\n 1 : 11,\n 2 : 12,\n 3 : 13,\n 4 : 14,\n 5 : 15,\n 6 : 16,\n 7 : 17,\n 8 : 17\n };\n\n // AutoCompletion POI\n if (service === \"SuggestedLocation\") {\n if (type === \"PositionOfInterest\") {\n zoom = importance[fields.classification];\n }\n }\n\n // Geocodage POI\n if (service === \"GeocodedLocation\") {\n if (type === \"PositionOfInterest\") {\n zoom = importance[fields.importance] || 14; // au cas où la recherche est en freeform !\n }\n }\n\n if (type === \"StreetAddress\") {\n zoom = 17;\n }\n\n if (type === \"CadastralParcel\") {\n zoom = 17;\n }\n\n return zoom;\n }\n};\n\nexport default SearchEngineUtils;\n","/**\n * @module GeocodeUtils\n * @alias module:~utils/GeocodeUtils\n * @private\n * @description\n * ...\n *\n * @example\n * getGeocodedLocationFreeform();\n * getSuggestedLocationFreeform();\n */\nvar GeocodeUtils = {\n /**\n * Return the freeform of a structured geocoded item\n *\n * @param {Object} geocodedLocation - Geocoded location\n * @returns {String} freeform string\n */\n getGeocodedLocationFreeform : function (geocodedLocation) {\n var attributes = geocodedLocation.placeAttributes;\n if (attributes.label) {\n return attributes.label;\n } else if (geocodedLocation.type === \"PositionOfInterest\") {\n var resultToReturn = attributes.toponym;\n if (attributes.category && Array.isArray(attributes.category) && attributes.category.length >= 2 && attributes.category[0] === \"administratif\") {\n // gestion particulière des territoires administratifs\n resultToReturn = resultToReturn + \", \" + attributes.category[1];\n } else {\n // gestion standard des POI non adminsitratifs\n if (attributes.postcode) {\n resultToReturn = resultToReturn + \", \" + attributes.postcode[0];\n if (attributes.city) {\n resultToReturn = resultToReturn + \" \" + attributes.city[0];\n }\n }\n }\n return resultToReturn;\n } else if (geocodedLocation.type === \"StreetAddress\") {\n return (attributes.housenumber ? attributes.housenumber + \" \" : \"\") + attributes.street + \" \" + (attributes.postcode ? attributes.postcode + \", \" : \"\") + attributes.city;\n } else if (geocodedLocation.type === \"CadastralParcel\") {\n return attributes.id;\n } else {\n return \"...\";\n }\n },\n\n /**\n * Return the freeform of a structured suggested item\n *\n * @param {Object} suggestedLocation - Suggested location\n * @returns {String} freeform string\n */\n getSuggestedLocationFreeform : function (suggestedLocation) {\n if (suggestedLocation.fullText) {\n return suggestedLocation.fullText;\n } else {\n var values = [];\n values.push(suggestedLocation.street || \"\");\n values.push(suggestedLocation.postalCode || \"\");\n values.push(suggestedLocation.commune || \"\");\n\n if (suggestedLocation.type === \"PositionOfInterest\") {\n values.push(suggestedLocation.poi || \"\");\n values.push(suggestedLocation.kind || \"\");\n }\n return values.join(\" - \");\n }\n }\n};\n\nexport default GeocodeUtils;\n","export var PJD_3PARAM = 1;\nexport var PJD_7PARAM = 2;\nexport var PJD_GRIDSHIFT = 3;\nexport var PJD_WGS84 = 4; // WGS84 or equivalent\nexport var PJD_NODATUM = 5; // WGS84 or equivalent\nexport var SRS_WGS84_SEMIMAJOR = 6378137.0; // only used in grid shift transforms\nexport var SRS_WGS84_SEMIMINOR = 6356752.314; // only used in grid shift transforms\nexport var SRS_WGS84_ESQUARED = 0.0066943799901413165; // only used in grid shift transforms\nexport var SEC_TO_RAD = 4.84813681109535993589914102357e-6;\nexport var HALF_PI = Math.PI/2;\n// ellipoid pj_set_ell.c\nexport var SIXTH = 0.1666666666666666667;\n/* 1/6 */\nexport var RA4 = 0.04722222222222222222;\n/* 17/360 */\nexport var RA6 = 0.02215608465608465608;\nexport var EPSLN = 1.0e-10;\n// you'd think you could use Number.EPSILON above but that makes\n// Mollweide get into an infinate loop.\n\nexport var D2R = 0.01745329251994329577;\nexport var R2D = 57.29577951308232088;\nexport var FORTPI = Math.PI/4;\nexport var TWO_PI = Math.PI * 2;\n// SPI is slightly greater than Math.PI, so values that exceed the -180..180\n// degree range by a tiny amount don't get wrapped. This prevents points that\n// have drifted from their original location along the 180th meridian (due to\n// floating point error) from changing their sign.\nexport var SPI = 3.14159265359;\n","var exports = {};\nexport {exports as default};\n\nexports.greenwich = 0.0; //\"0dE\",\nexports.lisbon = -9.131906111111; //\"9d07'54.862\\\"W\",\nexports.paris = 2.337229166667; //\"2d20'14.025\\\"E\",\nexports.bogota = -74.080916666667; //\"74d04'51.3\\\"W\",\nexports.madrid = -3.687938888889; //\"3d41'16.58\\\"W\",\nexports.rome = 12.452333333333; //\"12d27'8.4\\\"E\",\nexports.bern = 7.439583333333; //\"7d26'22.5\\\"E\",\nexports.jakarta = 106.807719444444; //\"106d48'27.79\\\"E\",\nexports.ferro = -17.666666666667; //\"17d40'W\",\nexports.brussels = 4.367975; //\"4d22'4.71\\\"E\",\nexports.stockholm = 18.058277777778; //\"18d3'29.8\\\"E\",\nexports.athens = 23.7163375; //\"23d42'58.815\\\"E\",\nexports.oslo = 10.722916666667; //\"10d43'22.5\\\"E\"\n","export default {\n 'mm': {to_meter: 0.001},\n 'cm': {to_meter: 0.01},\n 'ft': {to_meter: 0.3048},\n 'us-ft': {to_meter: 1200 / 3937},\n 'fath': {to_meter: 1.8288},\n 'kmi': {to_meter: 1852},\n 'us-ch': {to_meter: 20.1168402336805},\n 'us-mi': {to_meter: 1609.34721869444},\n 'km': {to_meter: 1000},\n 'ind-ft': {to_meter: 0.30479841},\n 'ind-yd': {to_meter: 0.91439523},\n 'mi': {to_meter: 1609.344},\n 'yd': {to_meter: 0.9144},\n 'ch': {to_meter: 20.1168},\n 'link': {to_meter: 0.201168},\n 'dm': {to_meter: 0.01},\n 'in': {to_meter: 0.0254},\n 'ind-ch': {to_meter: 20.11669506},\n 'us-in': {to_meter: 0.025400050800101},\n 'us-yd': {to_meter: 0.914401828803658}\n};\n","var ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nexport default function match(obj, key) {\n if (obj[key]) {\n return obj[key];\n }\n var keys = Object.keys(obj);\n var lkey = key.toLowerCase().replace(ignoredChar, '');\n var i = -1;\n var testkey, processedKey;\n while (++i < keys.length) {\n testkey = keys[i];\n processedKey = testkey.toLowerCase().replace(ignoredChar, '');\n if (processedKey === lkey) {\n return obj[testkey];\n }\n }\n}\n","import {D2R} from './constants/values';\nimport PrimeMeridian from './constants/PrimeMeridian';\nimport units from './constants/units';\nimport match from './match';\n\nexport default function(defData) {\n var self = {};\n var paramObj = defData.split('+').map(function(v) {\n return v.trim();\n }).filter(function(a) {\n return a;\n }).reduce(function(p, a) {\n var split = a.split('=');\n split.push(true);\n p[split[0].toLowerCase()] = split[1];\n return p;\n }, {});\n var paramName, paramVal, paramOutname;\n var params = {\n proj: 'projName',\n datum: 'datumCode',\n rf: function(v) {\n self.rf = parseFloat(v);\n },\n lat_0: function(v) {\n self.lat0 = v * D2R;\n },\n lat_1: function(v) {\n self.lat1 = v * D2R;\n },\n lat_2: function(v) {\n self.lat2 = v * D2R;\n },\n lat_ts: function(v) {\n self.lat_ts = v * D2R;\n },\n lon_0: function(v) {\n self.long0 = v * D2R;\n },\n lon_1: function(v) {\n self.long1 = v * D2R;\n },\n lon_2: function(v) {\n self.long2 = v * D2R;\n },\n alpha: function(v) {\n self.alpha = parseFloat(v) * D2R;\n },\n gamma: function(v) {\n self.rectified_grid_angle = parseFloat(v);\n },\n lonc: function(v) {\n self.longc = v * D2R;\n },\n x_0: function(v) {\n self.x0 = parseFloat(v);\n },\n y_0: function(v) {\n self.y0 = parseFloat(v);\n },\n k_0: function(v) {\n self.k0 = parseFloat(v);\n },\n k: function(v) {\n self.k0 = parseFloat(v);\n },\n a: function(v) {\n self.a = parseFloat(v);\n },\n b: function(v) {\n self.b = parseFloat(v);\n },\n r: function(v) {\n self.a = self.b = parseFloat(v);\n },\n r_a: function() {\n self.R_A = true;\n },\n zone: function(v) {\n self.zone = parseInt(v, 10);\n },\n south: function() {\n self.utmSouth = true;\n },\n towgs84: function(v) {\n self.datum_params = v.split(\",\").map(function(a) {\n return parseFloat(a);\n });\n },\n to_meter: function(v) {\n self.to_meter = parseFloat(v);\n },\n units: function(v) {\n self.units = v;\n var unit = match(units, v);\n if (unit) {\n self.to_meter = unit.to_meter;\n }\n },\n from_greenwich: function(v) {\n self.from_greenwich = v * D2R;\n },\n pm: function(v) {\n var pm = match(PrimeMeridian, v);\n self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;\n },\n nadgrids: function(v) {\n if (v === '@null') {\n self.datumCode = 'none';\n }\n else {\n self.nadgrids = v;\n }\n },\n axis: function(v) {\n var legalAxis = \"ewnsud\";\n if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {\n self.axis = v;\n }\n },\n approx: function() {\n self.approx = true;\n }\n };\n for (paramName in paramObj) {\n paramVal = paramObj[paramName];\n if (paramName in params) {\n paramOutname = params[paramName];\n if (typeof paramOutname === 'function') {\n paramOutname(paramVal);\n }\n else {\n self[paramOutname] = paramVal;\n }\n }\n else {\n self[paramName] = paramVal;\n }\n }\n if(typeof self.datumCode === 'string' && self.datumCode !== \"WGS84\"){\n self.datumCode = self.datumCode.toLowerCase();\n }\n return self;\n}\n","export default parseString;\n\nvar NEUTRAL = 1;\nvar KEYWORD = 2;\nvar NUMBER = 3;\nvar QUOTED = 4;\nvar AFTERQUOTE = 5;\nvar ENDED = -1;\nvar whitespace = /\\s/;\nvar latin = /[A-Za-z]/;\nvar keyword = /[A-Za-z84_]/;\nvar endThings = /[,\\]]/;\nvar digets = /[\\d\\.E\\-\\+]/;\n// const ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nfunction Parser(text) {\n if (typeof text !== 'string') {\n throw new Error('not a string');\n }\n this.text = text.trim();\n this.level = 0;\n this.place = 0;\n this.root = null;\n this.stack = [];\n this.currentObject = null;\n this.state = NEUTRAL;\n}\nParser.prototype.readCharicter = function() {\n var char = this.text[this.place++];\n if (this.state !== QUOTED) {\n while (whitespace.test(char)) {\n if (this.place >= this.text.length) {\n return;\n }\n char = this.text[this.place++];\n }\n }\n switch (this.state) {\n case NEUTRAL:\n return this.neutral(char);\n case KEYWORD:\n return this.keyword(char)\n case QUOTED:\n return this.quoted(char);\n case AFTERQUOTE:\n return this.afterquote(char);\n case NUMBER:\n return this.number(char);\n case ENDED:\n return;\n }\n};\nParser.prototype.afterquote = function(char) {\n if (char === '\"') {\n this.word += '\"';\n this.state = QUOTED;\n return;\n }\n if (endThings.test(char)) {\n this.word = this.word.trim();\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in afterquote yet, index ' + this.place);\n};\nParser.prototype.afterItem = function(char) {\n if (char === ',') {\n if (this.word !== null) {\n this.currentObject.push(this.word);\n }\n this.word = null;\n this.state = NEUTRAL;\n return;\n }\n if (char === ']') {\n this.level--;\n if (this.word !== null) {\n this.currentObject.push(this.word);\n this.word = null;\n }\n this.state = NEUTRAL;\n this.currentObject = this.stack.pop();\n if (!this.currentObject) {\n this.state = ENDED;\n }\n\n return;\n }\n};\nParser.prototype.number = function(char) {\n if (digets.test(char)) {\n this.word += char;\n return;\n }\n if (endThings.test(char)) {\n this.word = parseFloat(this.word);\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in number yet, index ' + this.place);\n};\nParser.prototype.quoted = function(char) {\n if (char === '\"') {\n this.state = AFTERQUOTE;\n return;\n }\n this.word += char;\n return;\n};\nParser.prototype.keyword = function(char) {\n if (keyword.test(char)) {\n this.word += char;\n return;\n }\n if (char === '[') {\n var newObjects = [];\n newObjects.push(this.word);\n this.level++;\n if (this.root === null) {\n this.root = newObjects;\n } else {\n this.currentObject.push(newObjects);\n }\n this.stack.push(this.currentObject);\n this.currentObject = newObjects;\n this.state = NEUTRAL;\n return;\n }\n if (endThings.test(char)) {\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in keyword yet, index ' + this.place);\n};\nParser.prototype.neutral = function(char) {\n if (latin.test(char)) {\n this.word = char;\n this.state = KEYWORD;\n return;\n }\n if (char === '\"') {\n this.word = '';\n this.state = QUOTED;\n return;\n }\n if (digets.test(char)) {\n this.word = char;\n this.state = NUMBER;\n return;\n }\n if (endThings.test(char)) {\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in neutral yet, index ' + this.place);\n};\nParser.prototype.output = function() {\n while (this.place < this.text.length) {\n this.readCharicter();\n }\n if (this.state === ENDED) {\n return this.root;\n }\n throw new Error('unable to parse string \"' +this.text + '\". State is ' + this.state);\n};\n\nfunction parseString(txt) {\n var parser = new Parser(txt);\n return parser.output();\n}\n","\n\nfunction mapit(obj, key, value) {\n if (Array.isArray(key)) {\n value.unshift(key);\n key = null;\n }\n var thing = key ? {} : obj;\n\n var out = value.reduce(function(newObj, item) {\n sExpr(item, newObj);\n return newObj\n }, thing);\n if (key) {\n obj[key] = out;\n }\n}\n\nexport function sExpr(v, obj) {\n if (!Array.isArray(v)) {\n obj[v] = true;\n return;\n }\n var key = v.shift();\n if (key === 'PARAMETER') {\n key = v.shift();\n }\n if (v.length === 1) {\n if (Array.isArray(v[0])) {\n obj[key] = {};\n sExpr(v[0], obj[key]);\n return;\n }\n obj[key] = v[0];\n return;\n }\n if (!v.length) {\n obj[key] = true;\n return;\n }\n if (key === 'TOWGS84') {\n obj[key] = v;\n return;\n }\n if (key === 'AXIS') {\n if (!(key in obj)) {\n obj[key] = [];\n }\n obj[key].push(v);\n return;\n }\n if (!Array.isArray(key)) {\n obj[key] = {};\n }\n\n var i;\n switch (key) {\n case 'UNIT':\n case 'PRIMEM':\n case 'VERT_DATUM':\n obj[key] = {\n name: v[0].toLowerCase(),\n convert: v[1]\n };\n if (v.length === 3) {\n sExpr(v[2], obj[key]);\n }\n return;\n case 'SPHEROID':\n case 'ELLIPSOID':\n obj[key] = {\n name: v[0],\n a: v[1],\n rf: v[2]\n };\n if (v.length === 4) {\n sExpr(v[3], obj[key]);\n }\n return;\n case 'EDATUM':\n case 'ENGINEERINGDATUM':\n case 'LOCAL_DATUM':\n case 'DATUM':\n case 'VERT_CS':\n case 'VERTCRS':\n case 'VERTICALCRS':\n v[0] = ['name', v[0]];\n mapit(obj, key, v);\n return;\n case 'COMPD_CS':\n case 'COMPOUNDCRS':\n case 'FITTED_CS':\n // the followings are the crs defined in\n // https://github.com/proj4js/proj4js/blob/1da4ed0b865d0fcb51c136090569210cdcc9019e/lib/parseCode.js#L11\n case 'PROJECTEDCRS':\n case 'PROJCRS':\n case 'GEOGCS':\n case 'GEOCCS':\n case 'PROJCS':\n case 'LOCAL_CS':\n case 'GEODCRS':\n case 'GEODETICCRS':\n case 'GEODETICDATUM':\n case 'ENGCRS':\n case 'ENGINEERINGCRS':\n v[0] = ['name', v[0]];\n mapit(obj, key, v);\n obj[key].type = key;\n return;\n default:\n i = -1;\n while (++i < v.length) {\n if (!Array.isArray(v[i])) {\n return sExpr(v, obj[key]);\n }\n }\n return mapit(obj, key, v);\n }\n}\n","var D2R = 0.01745329251994329577;\nimport parser from './parser';\nimport {sExpr} from './process';\n\nvar knownTypes = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS', 'GEOCCS', 'PROJCS', 'LOCAL_CS', 'GEODCRS',\n 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\n\nfunction rename(obj, params) {\n var outName = params[0];\n var inName = params[1];\n if (!(outName in obj) && (inName in obj)) {\n obj[outName] = obj[inName];\n if (params.length === 3) {\n obj[outName] = params[2](obj[outName]);\n }\n }\n}\n\nfunction d2r(input) {\n return input * D2R;\n}\n\nfunction cleanWKT(wkt) {\n var keys = Object.keys(wkt);\n for (var i = 0, ii = keys.length; i 0 ? 90 : -90);\n wkt.lat_ts = wkt.lat1;\n } else if (!wkt.lat_ts && wkt.lat0 && wkt.projName === 'Polar_Stereographic') {\n wkt.lat_ts = wkt.lat0;\n wkt.lat0 = d2r(wkt.lat0 > 0 ? 90 : -90);\n }\n}\nexport default function(wkt) {\n var lisp = parser(wkt);\n var type = lisp[0];\n var obj = {};\n sExpr(lisp, obj);\n cleanWKT(obj);\n return obj[type];\n}\n","import globals from './global';\nimport parseProj from './projString';\nimport wkt from 'wkt-parser';\n\nfunction defs(name) {\n /*global console*/\n var that = this;\n if (arguments.length === 2) {\n var def = arguments[1];\n if (typeof def === 'string') {\n if (def.charAt(0) === '+') {\n defs[name] = parseProj(arguments[1]);\n }\n else {\n defs[name] = wkt(arguments[1]);\n }\n } else {\n defs[name] = def;\n }\n }\n else if (arguments.length === 1) {\n if (Array.isArray(name)) {\n return name.map(function(v) {\n if (Array.isArray(v)) {\n defs.apply(that, v);\n }\n else {\n defs(v);\n }\n });\n }\n else if (typeof name === 'string') {\n if (name in defs) {\n return defs[name];\n }\n }\n else if ('EPSG' in name) {\n defs['EPSG:' + name.EPSG] = name;\n }\n else if ('ESRI' in name) {\n defs['ESRI:' + name.ESRI] = name;\n }\n else if ('IAU2000' in name) {\n defs['IAU2000:' + name.IAU2000] = name;\n }\n else {\n console.log(name);\n }\n return;\n }\n\n\n}\nglobals(defs);\nexport default defs;\n","export default function(defs) {\n defs('EPSG:4326', \"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\");\n defs('EPSG:4269', \"+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\");\n defs('EPSG:3857', \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs\");\n // UTM WGS84\n for (var i = 1; i <= 60; ++i) {\n defs('EPSG:' + (32600 + i), \"+proj=utm +zone=\" + i + \" +datum=WGS84 +units=m\");\n defs('EPSG:' + (32700 + i), \"+proj=utm +zone=\" + i + \" +south +datum=WGS84 +units=m\");\n }\n\n defs.WGS84 = defs['EPSG:4326'];\n defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857\n defs.GOOGLE = defs['EPSG:3857'];\n defs['EPSG:900913'] = defs['EPSG:3857'];\n defs['EPSG:102113'] = defs['EPSG:3857'];\n}\n","import defs from './defs';\nimport wkt from 'wkt-parser';\nimport projStr from './projString';\nimport match from './match';\nfunction testObj(code){\n return typeof code === 'string';\n}\nfunction testDef(code){\n return code in defs;\n}\nvar codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\nfunction testWKT(code){\n return codeWords.some(function (word) {\n return code.indexOf(word) > -1;\n });\n}\nvar codes = ['3857', '900913', '3785', '102113'];\nfunction checkMercator(item) {\n var auth = match(item, 'authority');\n if (!auth) {\n return;\n }\n var code = match(auth, 'epsg');\n return code && codes.indexOf(code) > -1;\n}\nfunction checkProjStr(item) {\n var ext = match(item, 'extension');\n if (!ext) {\n return;\n }\n return match(ext, 'proj4');\n}\nfunction testProj(code){\n return code[0] === '+';\n}\nfunction parse(code){\n if (testObj(code)) {\n //check to see if this is a WKT string\n if (testDef(code)) {\n return defs[code];\n }\n if (testWKT(code)) {\n var out = wkt(code);\n // test of spetial case, due to this being a very common and often malformed\n if (checkMercator(out)) {\n return defs['EPSG:3857'];\n }\n var maybeProjStr = checkProjStr(out);\n if (maybeProjStr) {\n return projStr(maybeProjStr);\n }\n return out;\n }\n if (testProj(code)) {\n return projStr(code);\n }\n }else{\n return code;\n }\n}\n\nexport default parse;\n","export default function(destination, source) {\n destination = destination || {};\n var value, property;\n if (!source) {\n return destination;\n }\n for (property in source) {\n value = source[property];\n if (value !== undefined) {\n destination[property] = value;\n }\n }\n return destination;\n}\n","export default function(eccent, sinphi, cosphi) {\n var con = eccent * sinphi;\n return cosphi / (Math.sqrt(1 - con * con));\n}","export default function(x) {\n return x<0 ? -1 : 1;\n}","\nimport {TWO_PI, SPI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, phi, sinphi) {\n var con = eccent * sinphi;\n var com = 0.5 * eccent;\n con = Math.pow(((1 - con) / (1 + con)), com);\n return (Math.tan(0.5 * (HALF_PI - phi)) / con);\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, ts) {\n var eccnth = 0.5 * eccent;\n var con, dphi;\n var phi = HALF_PI - 2 * Math.atan(ts);\n for (var i = 0; i <= 15; i++) {\n con = eccent * Math.sin(phi);\n dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n //console.log(\"phi2z has NoConvergence\");\n return -9999;\n}\n","export function init() {\n //no-op for longlat\n}\n\nfunction identity(pt) {\n return pt;\n}\nexport {identity as forward};\nexport {identity as inverse};\nexport var names = [\"longlat\", \"identity\"];\nexport default {\n init: init,\n forward: identity,\n inverse: identity,\n names: names\n};\n","import merc from \"./projections/merc\";\nimport longlat from \"./projections/longlat\";\nvar projs = [merc, longlat];\nvar names = {};\nvar projStore = [];\n\nfunction add(proj, i) {\n var len = projStore.length;\n if (!proj.names) {\n console.log(i);\n return true;\n }\n projStore[len] = proj;\n proj.names.forEach(function(n) {\n names[n.toLowerCase()] = len;\n });\n return this;\n}\n\nexport {add};\n\nexport function get(name) {\n if (!name) {\n return false;\n }\n var n = name.toLowerCase();\n if (typeof names[n] !== 'undefined' && projStore[names[n]]) {\n return projStore[names[n]];\n }\n}\n\nexport function start() {\n projs.forEach(add);\n}\nexport default {\n start: start,\n add: add,\n get: get\n};\n","import msfnz from '../common/msfnz';\n\nimport adjust_lon from '../common/adjust_lon';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport {FORTPI, R2D, EPSLN, HALF_PI} from '../constants/values';\nexport function init() {\n var con = this.b / this.a;\n this.es = 1 - con * con;\n if(!('x0' in this)){\n this.x0 = 0;\n }\n if(!('y0' in this)){\n this.y0 = 0;\n }\n this.e = Math.sqrt(this.es);\n if (this.lat_ts) {\n if (this.sphere) {\n this.k0 = Math.cos(this.lat_ts);\n }\n else {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n }\n else {\n if (!this.k0) {\n if (this.k) {\n this.k0 = this.k;\n }\n else {\n this.k0 = 1;\n }\n }\n }\n}\n\n/* Mercator forward equations--mapping lat,long to x,y\n --------------------------------------------------*/\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n // convert to radians\n if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {\n return null;\n }\n\n var x, y;\n if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n return null;\n }\n else {\n if (this.sphere) {\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\n }\n else {\n var sinphi = Math.sin(lat);\n var ts = tsfnz(this.e, lat, sinphi);\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 - this.a * this.k0 * Math.log(ts);\n }\n p.x = x;\n p.y = y;\n return p;\n }\n}\n\n/* Mercator inverse equations--mapping x,y to lat/long\n --------------------------------------------------*/\nexport function inverse(p) {\n\n var x = p.x - this.x0;\n var y = p.y - this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));\n }\n else {\n var ts = Math.exp(-y / (this.a * this.k0));\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n lon = adjust_lon(this.long0 + x / (this.a * this.k0));\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Mercator\", \"Popular Visualisation Pseudo Mercator\", \"Mercator_1SP\", \"Mercator_Auxiliary_Sphere\", \"merc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","var exports = {};\nexport {exports as default};\nexports.MERIT = {\n a: 6378137.0,\n rf: 298.257,\n ellipseName: \"MERIT 1983\"\n};\n\nexports.SGS85 = {\n a: 6378136.0,\n rf: 298.257,\n ellipseName: \"Soviet Geodetic System 85\"\n};\n\nexports.GRS80 = {\n a: 6378137.0,\n rf: 298.257222101,\n ellipseName: \"GRS 1980(IUGG, 1980)\"\n};\n\nexports.IAU76 = {\n a: 6378140.0,\n rf: 298.257,\n ellipseName: \"IAU 1976\"\n};\n\nexports.airy = {\n a: 6377563.396,\n b: 6356256.910,\n ellipseName: \"Airy 1830\"\n};\n\nexports.APL4 = {\n a: 6378137,\n rf: 298.25,\n ellipseName: \"Appl. Physics. 1965\"\n};\n\nexports.NWL9D = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"Naval Weapons Lab., 1965\"\n};\n\nexports.mod_airy = {\n a: 6377340.189,\n b: 6356034.446,\n ellipseName: \"Modified Airy\"\n};\n\nexports.andrae = {\n a: 6377104.43,\n rf: 300.0,\n ellipseName: \"Andrae 1876 (Den., Iclnd.)\"\n};\n\nexports.aust_SA = {\n a: 6378160.0,\n rf: 298.25,\n ellipseName: \"Australian Natl & S. Amer. 1969\"\n};\n\nexports.GRS67 = {\n a: 6378160.0,\n rf: 298.2471674270,\n ellipseName: \"GRS 67(IUGG 1967)\"\n};\n\nexports.bessel = {\n a: 6377397.155,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841\"\n};\n\nexports.bess_nam = {\n a: 6377483.865,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841 (Namibia)\"\n};\n\nexports.clrk66 = {\n a: 6378206.4,\n b: 6356583.8,\n ellipseName: \"Clarke 1866\"\n};\n\nexports.clrk80 = {\n a: 6378249.145,\n rf: 293.4663,\n ellipseName: \"Clarke 1880 mod.\"\n};\n\nexports.clrk80ign = {\n a: 6378249.2,\n b: 6356515,\n rf: 293.4660213,\n ellipseName: \"Clarke 1880 (IGN)\"\n};\n\nexports.clrk58 = {\n a: 6378293.645208759,\n rf: 294.2606763692654,\n ellipseName: \"Clarke 1858\"\n};\n\nexports.CPM = {\n a: 6375738.7,\n rf: 334.29,\n ellipseName: \"Comm. des Poids et Mesures 1799\"\n};\n\nexports.delmbr = {\n a: 6376428.0,\n rf: 311.5,\n ellipseName: \"Delambre 1810 (Belgium)\"\n};\n\nexports.engelis = {\n a: 6378136.05,\n rf: 298.2566,\n ellipseName: \"Engelis 1985\"\n};\n\nexports.evrst30 = {\n a: 6377276.345,\n rf: 300.8017,\n ellipseName: \"Everest 1830\"\n};\n\nexports.evrst48 = {\n a: 6377304.063,\n rf: 300.8017,\n ellipseName: \"Everest 1948\"\n};\n\nexports.evrst56 = {\n a: 6377301.243,\n rf: 300.8017,\n ellipseName: \"Everest 1956\"\n};\n\nexports.evrst69 = {\n a: 6377295.664,\n rf: 300.8017,\n ellipseName: \"Everest 1969\"\n};\n\nexports.evrstSS = {\n a: 6377298.556,\n rf: 300.8017,\n ellipseName: \"Everest (Sabah & Sarawak)\"\n};\n\nexports.fschr60 = {\n a: 6378166.0,\n rf: 298.3,\n ellipseName: \"Fischer (Mercury Datum) 1960\"\n};\n\nexports.fschr60m = {\n a: 6378155.0,\n rf: 298.3,\n ellipseName: \"Fischer 1960\"\n};\n\nexports.fschr68 = {\n a: 6378150.0,\n rf: 298.3,\n ellipseName: \"Fischer 1968\"\n};\n\nexports.helmert = {\n a: 6378200.0,\n rf: 298.3,\n ellipseName: \"Helmert 1906\"\n};\n\nexports.hough = {\n a: 6378270.0,\n rf: 297.0,\n ellipseName: \"Hough\"\n};\n\nexports.intl = {\n a: 6378388.0,\n rf: 297.0,\n ellipseName: \"International 1909 (Hayford)\"\n};\n\nexports.kaula = {\n a: 6378163.0,\n rf: 298.24,\n ellipseName: \"Kaula 1961\"\n};\n\nexports.lerch = {\n a: 6378139.0,\n rf: 298.257,\n ellipseName: \"Lerch 1979\"\n};\n\nexports.mprts = {\n a: 6397300.0,\n rf: 191.0,\n ellipseName: \"Maupertius 1738\"\n};\n\nexports.new_intl = {\n a: 6378157.5,\n b: 6356772.2,\n ellipseName: \"New International 1967\"\n};\n\nexports.plessis = {\n a: 6376523.0,\n rf: 6355863.0,\n ellipseName: \"Plessis 1817 (France)\"\n};\n\nexports.krass = {\n a: 6378245.0,\n rf: 298.3,\n ellipseName: \"Krassovsky, 1942\"\n};\n\nexports.SEasia = {\n a: 6378155.0,\n b: 6356773.3205,\n ellipseName: \"Southeast Asia\"\n};\n\nexports.walbeck = {\n a: 6376896.0,\n b: 6355834.8467,\n ellipseName: \"Walbeck\"\n};\n\nexports.WGS60 = {\n a: 6378165.0,\n rf: 298.3,\n ellipseName: \"WGS 60\"\n};\n\nexports.WGS66 = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"WGS 66\"\n};\n\nexports.WGS7 = {\n a: 6378135.0,\n rf: 298.26,\n ellipseName: \"WGS 72\"\n};\n\nexport var WGS84 = exports.WGS84 = {\n a: 6378137.0,\n rf: 298.257223563,\n ellipseName: \"WGS 84\"\n};\n\nexports.sphere = {\n a: 6370997.0,\n b: 6370997.0,\n ellipseName: \"Normal Sphere (r=6370997)\"\n};\n","var datums = {\n wgs84: {\n towgs84: \"0,0,0\",\n ellipse: \"WGS84\",\n datumName: \"WGS84\"\n },\n ch1903: {\n towgs84: \"674.374,15.056,405.346\",\n ellipse: \"bessel\",\n datumName: \"swiss\"\n },\n ggrs87: {\n towgs84: \"-199.87,74.79,246.62\",\n ellipse: \"GRS80\",\n datumName: \"Greek_Geodetic_Reference_System_1987\"\n },\n nad83: {\n towgs84: \"0,0,0\",\n ellipse: \"GRS80\",\n datumName: \"North_American_Datum_1983\"\n },\n nad27: {\n nadgrids: \"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",\n ellipse: \"clrk66\",\n datumName: \"North_American_Datum_1927\"\n },\n potsdam: {\n towgs84: \"598.1,73.7,418.2,0.202,0.045,-2.455,6.7\",\n ellipse: \"bessel\",\n datumName: \"Potsdam Rauenberg 1950 DHDN\"\n },\n carthage: {\n towgs84: \"-263.0,6.0,431.0\",\n ellipse: \"clark80\",\n datumName: \"Carthage 1934 Tunisia\"\n },\n hermannskogel: {\n towgs84: \"577.326,90.129,463.919,5.137,1.474,5.297,2.4232\",\n ellipse: \"bessel\",\n datumName: \"Hermannskogel\"\n },\n mgi: {\n towgs84: \"577.326,90.129,463.919,5.137,1.474,5.297,2.4232\",\n ellipse: \"bessel\",\n datumName: \"Militar-Geographische Institut\",\n },\n osni52: {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"airy\",\n datumName: \"Irish National\"\n },\n ire65: {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"mod_airy\",\n datumName: \"Ireland 1965\"\n },\n rassadiran: {\n towgs84: \"-133.63,-157.5,-158.62\",\n ellipse: \"intl\",\n datumName: \"Rassadiran\"\n },\n nzgd49: {\n towgs84: \"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",\n ellipse: \"intl\",\n datumName: \"New Zealand Geodetic Datum 1949\"\n },\n osgb36: {\n towgs84: \"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",\n ellipse: \"airy\",\n datumName: \"Ordnance Survey of Great Britain 1936\"\n },\n s_jtsk: {\n towgs84: \"589,76,480\",\n ellipse: 'bessel',\n datumName: 'S-JTSK (Ferro)'\n },\n beduaram: {\n towgs84: '-106,-87,188',\n ellipse: 'clrk80',\n datumName: 'Beduaram'\n },\n gunung_segara: {\n towgs84: '-403,684,41',\n ellipse: 'bessel',\n datumName: 'Gunung Segara Jakarta'\n },\n rnb72: {\n towgs84: \"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1\",\n ellipse: \"intl\",\n datumName: \"Reseau National Belge 1972\"\n }\n};\n\nfor (var key in datums) {\n var datum = datums[key];\n datums[datum.datumName] = datum;\n}\n\nexport default datums;\n","import {PJD_3PARAM, PJD_7PARAM, PJD_GRIDSHIFT, PJD_WGS84, PJD_NODATUM, SEC_TO_RAD} from './constants/values';\n\nfunction datum(datumCode, datum_params, a, b, es, ep2, nadgrids) {\n var out = {};\n\n if (datumCode === undefined || datumCode === 'none') {\n out.datum_type = PJD_NODATUM;\n } else {\n out.datum_type = PJD_WGS84;\n }\n\n if (datum_params) {\n out.datum_params = datum_params.map(parseFloat);\n if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {\n out.datum_type = PJD_3PARAM;\n }\n if (out.datum_params.length > 3) {\n if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {\n out.datum_type = PJD_7PARAM;\n out.datum_params[3] *= SEC_TO_RAD;\n out.datum_params[4] *= SEC_TO_RAD;\n out.datum_params[5] *= SEC_TO_RAD;\n out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;\n }\n }\n }\n\n if (nadgrids) {\n out.datum_type = PJD_GRIDSHIFT;\n out.grids = nadgrids;\n }\n out.a = a; //datum object also uses these values\n out.b = b;\n out.es = es;\n out.ep2 = ep2;\n return out;\n}\n\nexport default datum;\n","/**\n * Resources for details of NTv2 file formats:\n * - https://web.archive.org/web/20140127204822if_/http://www.mgs.gov.on.ca:80/stdprodconsume/groups/content/@mgs/@iandit/documents/resourcelist/stel02_047447.pdf\n * - http://mimaka.com/help/gs/html/004_NTV2%20Data%20Format.htm\n */\n\nvar loadedNadgrids = {};\n\n/**\n * Load a binary NTv2 file (.gsb) to a key that can be used in a proj string like +nadgrids=. Pass the NTv2 file\n * as an ArrayBuffer.\n */\nexport default function nadgrid(key, data) {\n var view = new DataView(data);\n var isLittleEndian = detectLittleEndian(view);\n var header = readHeader(view, isLittleEndian);\n var subgrids = readSubgrids(view, header, isLittleEndian);\n var nadgrid = {header: header, subgrids: subgrids};\n loadedNadgrids[key] = nadgrid;\n return nadgrid;\n}\n\n/**\n * Given a proj4 value for nadgrids, return an array of loaded grids\n */\nexport function getNadgrids(nadgrids) {\n // Format details: http://proj.maptools.org/gen_parms.html\n if (nadgrids === undefined) { return null; }\n var grids = nadgrids.split(',');\n return grids.map(parseNadgridString);\n}\n\nfunction parseNadgridString(value) {\n if (value.length === 0) {\n return null;\n }\n var optional = value[0] === '@';\n if (optional) {\n value = value.slice(1);\n }\n if (value === 'null') {\n return {name: 'null', mandatory: !optional, grid: null, isNull: true};\n }\n return {\n name: value,\n mandatory: !optional,\n grid: loadedNadgrids[value] || null,\n isNull: false\n };\n}\n\nfunction secondsToRadians(seconds) {\n return (seconds / 3600) * Math.PI / 180;\n}\n\nfunction detectLittleEndian(view) {\n var nFields = view.getInt32(8, false);\n if (nFields === 11) {\n return false;\n }\n nFields = view.getInt32(8, true);\n if (nFields !== 11) {\n console.warn('Failed to detect nadgrid endian-ness, defaulting to little-endian');\n }\n return true;\n}\n\nfunction readHeader(view, isLittleEndian) {\n return {\n nFields: view.getInt32(8, isLittleEndian),\n nSubgridFields: view.getInt32(24, isLittleEndian),\n nSubgrids: view.getInt32(40, isLittleEndian),\n shiftType: decodeString(view, 56, 56 + 8).trim(),\n fromSemiMajorAxis: view.getFloat64(120, isLittleEndian),\n fromSemiMinorAxis: view.getFloat64(136, isLittleEndian),\n toSemiMajorAxis: view.getFloat64(152, isLittleEndian),\n toSemiMinorAxis: view.getFloat64(168, isLittleEndian),\n };\n}\n\nfunction decodeString(view, start, end) {\n return String.fromCharCode.apply(null, new Uint8Array(view.buffer.slice(start, end)));\n}\n\nfunction readSubgrids(view, header, isLittleEndian) {\n var gridOffset = 176;\n var grids = [];\n for (var i = 0; i < header.nSubgrids; i++) {\n var subHeader = readGridHeader(view, gridOffset, isLittleEndian);\n var nodes = readGridNodes(view, gridOffset, subHeader, isLittleEndian);\n var lngColumnCount = Math.round(\n 1 + (subHeader.upperLongitude - subHeader.lowerLongitude) / subHeader.longitudeInterval);\n var latColumnCount = Math.round(\n 1 + (subHeader.upperLatitude - subHeader.lowerLatitude) / subHeader.latitudeInterval);\n // Proj4 operates on radians whereas the coordinates are in seconds in the grid\n grids.push({\n ll: [secondsToRadians(subHeader.lowerLongitude), secondsToRadians(subHeader.lowerLatitude)],\n del: [secondsToRadians(subHeader.longitudeInterval), secondsToRadians(subHeader.latitudeInterval)],\n lim: [lngColumnCount, latColumnCount],\n count: subHeader.gridNodeCount,\n cvs: mapNodes(nodes)\n });\n gridOffset += 176 + subHeader.gridNodeCount * 16;\n }\n return grids;\n}\n\nfunction mapNodes(nodes) {\n return nodes.map(function (r) {return [secondsToRadians(r.longitudeShift), secondsToRadians(r.latitudeShift)];});\n}\n\nfunction readGridHeader(view, offset, isLittleEndian) {\n return {\n name: decodeString(view, offset + 8, offset + 16).trim(),\n parent: decodeString(view, offset + 24, offset + 24 + 8).trim(),\n lowerLatitude: view.getFloat64(offset + 72, isLittleEndian),\n upperLatitude: view.getFloat64(offset + 88, isLittleEndian),\n lowerLongitude: view.getFloat64(offset + 104, isLittleEndian),\n upperLongitude: view.getFloat64(offset + 120, isLittleEndian),\n latitudeInterval: view.getFloat64(offset + 136, isLittleEndian),\n longitudeInterval: view.getFloat64(offset + 152, isLittleEndian),\n gridNodeCount: view.getInt32(offset + 168, isLittleEndian)\n };\n}\n\nfunction readGridNodes(view, offset, gridHeader, isLittleEndian) {\n var nodesOffset = offset + 176;\n var gridRecordLength = 16;\n var gridShiftRecords = [];\n for (var i = 0; i < gridHeader.gridNodeCount; i++) {\n var record = {\n latitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength, isLittleEndian),\n longitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength + 4, isLittleEndian),\n latitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 8, isLittleEndian),\n longitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 12, isLittleEndian),\n };\n gridShiftRecords.push(record);\n }\n return gridShiftRecords;\n}\n","import parseCode from './parseCode';\nimport extend from './extend';\nimport projections from './projections';\nimport {sphere as dc_sphere, eccentricity as dc_eccentricity} from './deriveConstants';\nimport Datum from './constants/Datum';\nimport datum from './datum';\nimport match from './match';\nimport {getNadgrids} from \"./nadgrid\";\n\nfunction Projection(srsCode,callback) {\n if (!(this instanceof Projection)) {\n return new Projection(srsCode);\n }\n callback = callback || function(error){\n if(error){\n throw error;\n }\n };\n var json = parseCode(srsCode);\n if(typeof json !== 'object'){\n callback('Could not parse to valid json: ' + srsCode);\n return;\n }\n var ourProj = Projection.projections.get(json.projName);\n if(!ourProj){\n callback('Could not get projection name from: ' + srsCode);\n return;\n }\n if (json.datumCode && json.datumCode !== 'none') {\n var datumDef = match(Datum, json.datumCode);\n if (datumDef) {\n json.datum_params = json.datum_params || (datumDef.towgs84 ? datumDef.towgs84.split(',') : null);\n json.ellps = datumDef.ellipse;\n json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;\n }\n }\n json.k0 = json.k0 || 1.0;\n json.axis = json.axis || 'enu';\n json.ellps = json.ellps || 'wgs84';\n json.lat1 = json.lat1 || json.lat0; // Lambert_Conformal_Conic_1SP, for example, needs this\n\n var sphere_ = dc_sphere(json.a, json.b, json.rf, json.ellps, json.sphere);\n var ecc = dc_eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);\n var nadgrids = getNadgrids(json.nadgrids);\n var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2,\n nadgrids);\n\n extend(this, json); // transfer everything over from the projection because we don't know what we'll need\n extend(this, ourProj); // transfer all the methods from the projection\n\n // copy the 4 things over we calculated in deriveConstants.sphere\n this.a = sphere_.a;\n this.b = sphere_.b;\n this.rf = sphere_.rf;\n this.sphere = sphere_.sphere;\n\n // copy the 3 things we calculated in deriveConstants.eccentricity\n this.es = ecc.es;\n this.e = ecc.e;\n this.ep2 = ecc.ep2;\n\n // add in the datum object\n this.datum = datumObj;\n\n // init the projection\n this.init();\n\n // legecy callback from back in the day when it went to spatialreference.org\n callback(null, this);\n\n}\nProjection.projections = projections;\nProjection.projections.start();\nexport default Projection;\n","import {SIXTH, RA4, RA6, EPSLN} from './constants/values';\nimport {default as Ellipsoid, WGS84} from './constants/Ellipsoid';\nimport match from './match';\n\nexport function eccentricity(a, b, rf, R_A) {\n var a2 = a * a; // used in geocentric\n var b2 = b * b; // used in geocentric\n var es = (a2 - b2) / a2; // e ^ 2\n var e = 0;\n if (R_A) {\n a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));\n a2 = a * a;\n es = 0;\n } else {\n e = Math.sqrt(es); // eccentricity\n }\n var ep2 = (a2 - b2) / b2; // used in geocentric\n return {\n es: es,\n e: e,\n ep2: ep2\n };\n}\nexport function sphere(a, b, rf, ellps, sphere) {\n if (!a) { // do we have an ellipsoid?\n var ellipse = match(Ellipsoid, ellps);\n if (!ellipse) {\n ellipse = WGS84;\n }\n a = ellipse.a;\n b = ellipse.b;\n rf = ellipse.rf;\n }\n\n if (rf && !b) {\n b = (1.0 - 1.0 / rf) * a;\n }\n if (rf === 0 || Math.abs(a - b) < EPSLN) {\n sphere = true;\n b = a;\n }\n return {\n a: a,\n b: b,\n rf: rf,\n sphere: sphere\n };\n}\n","'use strict';\nimport {PJD_3PARAM, PJD_7PARAM, HALF_PI} from './constants/values';\nexport function compareDatums(source, dest) {\n if (source.datum_type !== dest.datum_type) {\n return false; // false, datums are not equal\n } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {\n // the tolerance for es is to ensure that GRS80 and WGS84\n // are considered identical\n return false;\n } else if (source.datum_type === PJD_3PARAM) {\n return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);\n } else if (source.datum_type === PJD_7PARAM) {\n return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);\n } else {\n return true; // datums are equal\n }\n} // cs_compare_datums()\n\n/*\n * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates\n * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),\n * according to the current ellipsoid parameters.\n *\n * Latitude : Geodetic latitude in radians (input)\n * Longitude : Geodetic longitude in radians (input)\n * Height : Geodetic height, in meters (input)\n * X : Calculated Geocentric X coordinate, in meters (output)\n * Y : Calculated Geocentric Y coordinate, in meters (output)\n * Z : Calculated Geocentric Z coordinate, in meters (output)\n *\n */\nexport function geodeticToGeocentric(p, es, a) {\n var Longitude = p.x;\n var Latitude = p.y;\n var Height = p.z ? p.z : 0; //Z value not always supplied\n\n var Rn; /* Earth radius at location */\n var Sin_Lat; /* Math.sin(Latitude) */\n var Sin2_Lat; /* Square of Math.sin(Latitude) */\n var Cos_Lat; /* Math.cos(Latitude) */\n\n /*\n ** Don't blow up if Latitude is just a little out of the value\n ** range as it may just be a rounding issue. Also removed longitude\n ** test, it should be wrapped by Math.cos() and Math.sin(). NFW for PROJ.4, Sep/2001.\n */\n if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {\n Latitude = -HALF_PI;\n } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n Latitude = HALF_PI;\n } else if (Latitude < -HALF_PI) {\n /* Latitude out of range */\n //..reportError('geocent:lat out of range:' + Latitude);\n return { x: -Infinity, y: -Infinity, z: p.z };\n } else if (Latitude > HALF_PI) {\n /* Latitude out of range */\n return { x: Infinity, y: Infinity, z: p.z };\n }\n\n if (Longitude > Math.PI) {\n Longitude -= (2 * Math.PI);\n }\n Sin_Lat = Math.sin(Latitude);\n Cos_Lat = Math.cos(Latitude);\n Sin2_Lat = Sin_Lat * Sin_Lat;\n Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));\n return {\n x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),\n y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),\n z: ((Rn * (1 - es)) + Height) * Sin_Lat\n };\n} // cs_geodetic_to_geocentric()\n\nexport function geocentricToGeodetic(p, es, a, b) {\n /* local defintions and variables */\n /* end-criterium of loop, accuracy of sin(Latitude) */\n var genau = 1e-12;\n var genau2 = (genau * genau);\n var maxiter = 30;\n\n var P; /* distance between semi-minor axis and location */\n var RR; /* distance between center and location */\n var CT; /* sin of geocentric latitude */\n var ST; /* cos of geocentric latitude */\n var RX;\n var RK;\n var RN; /* Earth radius at location */\n var CPHI0; /* cos of start or old geodetic latitude in iterations */\n var SPHI0; /* sin of start or old geodetic latitude in iterations */\n var CPHI; /* cos of searched geodetic latitude */\n var SPHI; /* sin of searched geodetic latitude */\n var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */\n var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */\n\n var X = p.x;\n var Y = p.y;\n var Z = p.z ? p.z : 0.0; //Z value not always supplied\n var Longitude;\n var Latitude;\n var Height;\n\n P = Math.sqrt(X * X + Y * Y);\n RR = Math.sqrt(X * X + Y * Y + Z * Z);\n\n /* special cases for latitude and longitude */\n if (P / a < genau) {\n\n /* special case, if P=0. (X=0., Y=0.) */\n Longitude = 0.0;\n\n /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis\n * of ellipsoid (=center of mass), Latitude becomes PI/2 */\n if (RR / a < genau) {\n Latitude = HALF_PI;\n Height = -b;\n return {\n x: p.x,\n y: p.y,\n z: p.z\n };\n }\n } else {\n /* ellipsoidal (geodetic) longitude\n * interval: -PI < Longitude <= +PI */\n Longitude = Math.atan2(Y, X);\n }\n\n /* --------------------------------------------------------------\n * Following iterative algorithm was developped by\n * \"Institut for Erdmessung\", University of Hannover, July 1988.\n * Internet: www.ife.uni-hannover.de\n * Iterative computation of CPHI,SPHI and Height.\n * Iteration of CPHI and SPHI to 10**-12 radian resp.\n * 2*10**-7 arcsec.\n * --------------------------------------------------------------\n */\n CT = Z / RR;\n ST = P / RR;\n RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);\n CPHI0 = ST * (1.0 - es) * RX;\n SPHI0 = CT * RX;\n iter = 0;\n\n /* loop to find sin(Latitude) resp. Latitude\n * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */\n do {\n iter++;\n RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);\n\n /* ellipsoidal (geodetic) height */\n Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);\n\n RK = es * RN / (RN + Height);\n RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);\n CPHI = ST * (1.0 - RK) * RX;\n SPHI = CT * RX;\n SDPHI = SPHI * CPHI0 - CPHI * SPHI0;\n CPHI0 = CPHI;\n SPHI0 = SPHI;\n }\n while (SDPHI * SDPHI > genau2 && iter < maxiter);\n\n /* ellipsoidal (geodetic) latitude */\n Latitude = Math.atan(SPHI / Math.abs(CPHI));\n return {\n x: Longitude,\n y: Latitude,\n z: Height\n };\n} // cs_geocentric_to_geodetic()\n\n/****************************************************************/\n// pj_geocentic_to_wgs84( p )\n// p = point to transform in geocentric coordinates (x,y,z)\n\n\n/** point object, nothing fancy, just allows values to be\n passed back and forth by reference rather than by value.\n Other point classes may be used as long as they have\n x and y properties, which will get modified in the transform method.\n*/\nexport function geocentricToWgs84(p, datum_type, datum_params) {\n\n if (datum_type === PJD_3PARAM) {\n // if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: p.x + datum_params[0],\n y: p.y + datum_params[1],\n z: p.z + datum_params[2],\n };\n } else if (datum_type === PJD_7PARAM) {\n var Dx_BF = datum_params[0];\n var Dy_BF = datum_params[1];\n var Dz_BF = datum_params[2];\n var Rx_BF = datum_params[3];\n var Ry_BF = datum_params[4];\n var Rz_BF = datum_params[5];\n var M_BF = datum_params[6];\n // if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,\n y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,\n z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF\n };\n }\n} // cs_geocentric_to_wgs84\n\n/****************************************************************/\n// pj_geocentic_from_wgs84()\n// coordinate system definition,\n// point to transform in geocentric coordinates (x,y,z)\nexport function geocentricFromWgs84(p, datum_type, datum_params) {\n\n if (datum_type === PJD_3PARAM) {\n //if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: p.x - datum_params[0],\n y: p.y - datum_params[1],\n z: p.z - datum_params[2],\n };\n\n } else if (datum_type === PJD_7PARAM) {\n var Dx_BF = datum_params[0];\n var Dy_BF = datum_params[1];\n var Dz_BF = datum_params[2];\n var Rx_BF = datum_params[3];\n var Ry_BF = datum_params[4];\n var Rz_BF = datum_params[5];\n var M_BF = datum_params[6];\n var x_tmp = (p.x - Dx_BF) / M_BF;\n var y_tmp = (p.y - Dy_BF) / M_BF;\n var z_tmp = (p.z - Dz_BF) / M_BF;\n //if( x[io] === HUGE_VAL )\n // continue;\n\n return {\n x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,\n y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,\n z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp\n };\n } //cs_geocentric_from_wgs84()\n}\n","import {\n PJD_3PARAM,\n PJD_7PARAM,\n PJD_GRIDSHIFT,\n PJD_NODATUM,\n R2D,\n SRS_WGS84_ESQUARED,\n SRS_WGS84_SEMIMAJOR, SRS_WGS84_SEMIMINOR\n} from './constants/values';\n\nimport {geodeticToGeocentric, geocentricToGeodetic, geocentricToWgs84, geocentricFromWgs84, compareDatums} from './datumUtils';\nimport adjust_lon from \"./common/adjust_lon\";\nfunction checkParams(type) {\n return (type === PJD_3PARAM || type === PJD_7PARAM);\n}\n\nexport default function(source, dest, point) {\n // Short cut if the datums are identical.\n if (compareDatums(source, dest)) {\n return point; // in this case, zero is sucess,\n // whereas cs_compare_datums returns 1 to indicate TRUE\n // confusing, should fix this\n }\n\n // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest\n if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {\n return point;\n }\n\n // If this datum requires grid shifts, then apply it to geodetic coordinates.\n var source_a = source.a;\n var source_es = source.es;\n if (source.datum_type === PJD_GRIDSHIFT) {\n var gridShiftCode = applyGridShift(source, false, point);\n if (gridShiftCode !== 0) {\n return undefined;\n }\n source_a = SRS_WGS84_SEMIMAJOR;\n source_es = SRS_WGS84_ESQUARED;\n }\n\n var dest_a = dest.a;\n var dest_b = dest.b;\n var dest_es = dest.es;\n if (dest.datum_type === PJD_GRIDSHIFT) {\n dest_a = SRS_WGS84_SEMIMAJOR;\n dest_b = SRS_WGS84_SEMIMINOR;\n dest_es = SRS_WGS84_ESQUARED;\n }\n\n // Do we need to go through geocentric coordinates?\n if (source_es === dest_es && source_a === dest_a && !checkParams(source.datum_type) && !checkParams(dest.datum_type)) {\n return point;\n }\n\n // Convert to geocentric coordinates.\n point = geodeticToGeocentric(point, source_es, source_a);\n // Convert between datums\n if (checkParams(source.datum_type)) {\n point = geocentricToWgs84(point, source.datum_type, source.datum_params);\n }\n if (checkParams(dest.datum_type)) {\n point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);\n }\n point = geocentricToGeodetic(point, dest_es, dest_a, dest_b);\n\n if (dest.datum_type === PJD_GRIDSHIFT) {\n var destGridShiftResult = applyGridShift(dest, true, point);\n if (destGridShiftResult !== 0) {\n return undefined;\n }\n }\n\n return point;\n}\n\nexport function applyGridShift(source, inverse, point) {\n if (source.grids === null || source.grids.length === 0) {\n console.log('Grid shift grids not found');\n return -1;\n }\n var input = {x: -point.x, y: point.y};\n var output = {x: Number.NaN, y: Number.NaN};\n var onlyMandatoryGrids = false;\n var attemptedGrids = [];\n outer:\n for (var i = 0; i < source.grids.length; i++) {\n var grid = source.grids[i];\n attemptedGrids.push(grid.name);\n if (grid.isNull) {\n output = input;\n break;\n }\n onlyMandatoryGrids = grid.mandatory;\n if (grid.grid === null) {\n if (grid.mandatory) {\n console.log(\"Unable to find mandatory grid '\" + grid.name + \"'\");\n return -1;\n }\n continue;\n }\n var subgrids = grid.grid.subgrids;\n for (var j = 0, jj = subgrids.length; j < jj; j++) {\n var subgrid = subgrids[j];\n // skip tables that don't match our point at all\n var epsilon = (Math.abs(subgrid.del[1]) + Math.abs(subgrid.del[0])) / 10000.0;\n var minX = subgrid.ll[0] - epsilon;\n var minY = subgrid.ll[1] - epsilon;\n var maxX = subgrid.ll[0] + (subgrid.lim[0] - 1) * subgrid.del[0] + epsilon;\n var maxY = subgrid.ll[1] + (subgrid.lim[1] - 1) * subgrid.del[1] + epsilon;\n if (minY > input.y || minX > input.x || maxY < input.y || maxX < input.x ) {\n continue;\n }\n output = applySubgridShift(input, inverse, subgrid);\n if (!isNaN(output.x)) {\n break outer;\n }\n }\n }\n if (isNaN(output.x)) {\n console.log(\"Failed to find a grid shift table for location '\"+\n -input.x * R2D + \" \" + input.y * R2D + \" tried: '\" + attemptedGrids + \"'\");\n return -1;\n }\n point.x = -output.x;\n point.y = output.y;\n return 0;\n}\n\nfunction applySubgridShift(pin, inverse, ct) {\n var val = {x: Number.NaN, y: Number.NaN};\n if (isNaN(pin.x)) { return val; }\n var tb = {x: pin.x, y: pin.y};\n tb.x -= ct.ll[0];\n tb.y -= ct.ll[1];\n tb.x = adjust_lon(tb.x - Math.PI) + Math.PI;\n var t = nadInterpolate(tb, ct);\n if (inverse) {\n if (isNaN(t.x)) {\n return val;\n }\n t.x = tb.x - t.x;\n t.y = tb.y - t.y;\n var i = 9, tol = 1e-12;\n var dif, del;\n do {\n del = nadInterpolate(t, ct);\n if (isNaN(del.x)) {\n console.log(\"Inverse grid shift iteration failed, presumably at grid edge. Using first approximation.\");\n break;\n }\n dif = {x: tb.x - (del.x + t.x), y: tb.y - (del.y + t.y)};\n t.x += dif.x;\n t.y += dif.y;\n } while (i-- && Math.abs(dif.x) > tol && Math.abs(dif.y) > tol);\n if (i < 0) {\n console.log(\"Inverse grid shift iterator failed to converge.\");\n return val;\n }\n val.x = adjust_lon(t.x + ct.ll[0]);\n val.y = t.y + ct.ll[1];\n } else {\n if (!isNaN(t.x)) {\n val.x = pin.x + t.x;\n val.y = pin.y + t.y;\n }\n }\n return val;\n}\n\nfunction nadInterpolate(pin, ct) {\n var t = {x: pin.x / ct.del[0], y: pin.y / ct.del[1]};\n var indx = {x: Math.floor(t.x), y: Math.floor(t.y)};\n var frct = {x: t.x - 1.0 * indx.x, y: t.y - 1.0 * indx.y};\n var val= {x: Number.NaN, y: Number.NaN};\n var inx;\n if (indx.x < 0 || indx.x >= ct.lim[0]) {\n return val;\n }\n if (indx.y < 0 || indx.y >= ct.lim[1]) {\n return val;\n }\n inx = (indx.y * ct.lim[0]) + indx.x;\n var f00 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx++;\n var f10= {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx += ct.lim[0];\n var f11 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx--;\n var f01 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n var m11 = frct.x * frct.y, m10 = frct.x * (1.0 - frct.y),\n m00 = (1.0 - frct.x) * (1.0 - frct.y), m01 = (1.0 - frct.x) * frct.y;\n val.x = (m00 * f00.x + m10 * f10.x + m01 * f01.x + m11 * f11.x);\n val.y = (m00 * f00.y + m10 * f10.y + m01 * f01.y + m11 * f11.y);\n return val;\n}\n","export default function(crs, denorm, point) {\n var xin = point.x,\n yin = point.y,\n zin = point.z || 0.0;\n var v, t, i;\n var out = {};\n for (i = 0; i < 3; i++) {\n if (denorm && i === 2 && point.z === undefined) {\n continue;\n }\n if (i === 0) {\n v = xin;\n if (\"ew\".indexOf(crs.axis[i]) !== -1) {\n t = 'x';\n } else {\n t = 'y';\n }\n\n }\n else if (i === 1) {\n v = yin;\n if (\"ns\".indexOf(crs.axis[i]) !== -1) {\n t = 'y';\n } else {\n t = 'x';\n }\n }\n else {\n v = zin;\n t = 'z';\n }\n switch (crs.axis[i]) {\n case 'e':\n out[t] = v;\n break;\n case 'w':\n out[t] = -v;\n break;\n case 'n':\n out[t] = v;\n break;\n case 's':\n out[t] = -v;\n break;\n case 'u':\n if (point[t] !== undefined) {\n out.z = v;\n }\n break;\n case 'd':\n if (point[t] !== undefined) {\n out.z = -v;\n }\n break;\n default:\n //console.log(\"ERROR: unknow axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n return null;\n }\n }\n return out;\n}\n","export default function (array){\n var out = {\n x: array[0],\n y: array[1]\n };\n if (array.length>2) {\n out.z = array[2];\n }\n if (array.length>3) {\n out.m = array[3];\n }\n return out;\n}","export default function (point) {\n checkCoord(point.x);\n checkCoord(point.y);\n}\nfunction checkCoord(num) {\n if (typeof Number.isFinite === 'function') {\n if (Number.isFinite(num)) {\n return;\n }\n throw new TypeError('coordinates must be finite numbers');\n }\n if (typeof num !== 'number' || num !== num || !isFinite(num)) {\n throw new TypeError('coordinates must be finite numbers');\n }\n}\n","import {D2R, R2D, PJD_3PARAM, PJD_7PARAM, PJD_GRIDSHIFT} from './constants/values';\nimport datum_transform from './datum_transform';\nimport adjust_axis from './adjust_axis';\nimport proj from './Proj';\nimport toPoint from './common/toPoint';\nimport checkSanity from './checkSanity';\n\nfunction checkNotWGS(source, dest) {\n return (\n (source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM || source.datum.datum_type === PJD_GRIDSHIFT) && dest.datumCode !== 'WGS84') ||\n ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM || dest.datum.datum_type === PJD_GRIDSHIFT) && source.datumCode !== 'WGS84');\n}\n\nexport default function transform(source, dest, point, enforceAxis) {\n var wgs84;\n if (Array.isArray(point)) {\n point = toPoint(point);\n } else {\n // Clone the point object so inputs don't get modified\n point = {\n x: point.x,\n y: point.y,\n z: point.z,\n m: point.m\n };\n }\n var hasZ = point.z !== undefined;\n checkSanity(point);\n // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n if (source.datum && dest.datum && checkNotWGS(source, dest)) {\n wgs84 = new proj('WGS84');\n point = transform(source, wgs84, point, enforceAxis);\n source = wgs84;\n }\n // DGR, 2010/11/12\n if (enforceAxis && source.axis !== 'enu') {\n point = adjust_axis(source, false, point);\n }\n // Transform source points to long/lat, if they aren't already.\n if (source.projName === 'longlat') {\n point = {\n x: point.x * D2R,\n y: point.y * D2R,\n z: point.z || 0\n };\n } else {\n if (source.to_meter) {\n point = {\n x: point.x * source.to_meter,\n y: point.y * source.to_meter,\n z: point.z || 0\n };\n }\n point = source.inverse(point); // Convert Cartesian to longlat\n if (!point) {\n return;\n }\n }\n // Adjust for the prime meridian if necessary\n if (source.from_greenwich) {\n point.x += source.from_greenwich;\n }\n\n // Convert datums if needed, and if possible.\n point = datum_transform(source.datum, dest.datum, point);\n if (!point) {\n return;\n }\n\n // Adjust for the prime meridian if necessary\n if (dest.from_greenwich) {\n point = {\n x: point.x - dest.from_greenwich,\n y: point.y,\n z: point.z || 0\n };\n }\n\n if (dest.projName === 'longlat') {\n // convert radians to decimal degrees\n point = {\n x: point.x * R2D,\n y: point.y * R2D,\n z: point.z || 0\n };\n } else { // else project\n point = dest.forward(point);\n if (dest.to_meter) {\n point = {\n x: point.x / dest.to_meter,\n y: point.y / dest.to_meter,\n z: point.z || 0\n };\n }\n }\n\n // DGR, 2010/11/12\n if (enforceAxis && dest.axis !== 'enu') {\n return adjust_axis(dest, true, point);\n }\n\n if (point && !hasZ) {\n delete point.z;\n }\n return point;\n}\n","import proj from './Proj';\nimport transform from './transform';\nvar wgs84 = proj('WGS84');\n\nfunction transformer(from, to, coords, enforceAxis) {\n var transformedArray, out, keys;\n if (Array.isArray(coords)) {\n transformedArray = transform(from, to, coords, enforceAxis) || {x: NaN, y: NaN};\n if (coords.length > 2) {\n if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n if (typeof transformedArray.z === 'number') {\n return [transformedArray.x, transformedArray.y, transformedArray.z].concat(coords.slice(3));\n } else {\n return [transformedArray.x, transformedArray.y, coords[2]].concat(coords.slice(3));\n }\n } else {\n return [transformedArray.x, transformedArray.y].concat(coords.slice(2));\n }\n } else {\n return [transformedArray.x, transformedArray.y];\n }\n } else {\n out = transform(from, to, coords, enforceAxis);\n keys = Object.keys(coords);\n if (keys.length === 2) {\n return out;\n }\n keys.forEach(function (key) {\n if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n if (key === 'x' || key === 'y' || key === 'z') {\n return;\n }\n } else {\n if (key === 'x' || key === 'y') {\n return;\n }\n }\n out[key] = coords[key];\n });\n return out;\n }\n}\n\nfunction checkProj(item) {\n if (item instanceof proj) {\n return item;\n }\n if (item.oProj) {\n return item.oProj;\n }\n return proj(item);\n}\n\nfunction proj4(fromProj, toProj, coord) {\n fromProj = checkProj(fromProj);\n var single = false;\n var obj;\n if (typeof toProj === 'undefined') {\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n } else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {\n coord = toProj;\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n }\n toProj = checkProj(toProj);\n if (coord) {\n return transformer(fromProj, toProj, coord);\n } else {\n obj = {\n forward: function (coords, enforceAxis) {\n return transformer(fromProj, toProj, coords, enforceAxis);\n },\n inverse: function (coords, enforceAxis) {\n return transformer(toProj, fromProj, coords, enforceAxis);\n }\n };\n if (single) {\n obj.oProj = toProj;\n }\n return obj;\n }\n}\nexport default proj4;","\n\n\n/**\n * UTM zones are grouped, and assigned to one of a group of 6\n * sets.\n *\n * {int} @private\n */\nvar NUM_100K_SETS = 6;\n\n/**\n * The column letters (for easting) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n/**\n * The row letters (for northing) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\nvar A = 65; // A\nvar I = 73; // I\nvar O = 79; // O\nvar V = 86; // V\nvar Z = 90; // Z\nexport default {\n forward: forward,\n inverse: inverse,\n toPoint: toPoint\n};\n/**\n * Conversion of lat/lon to MGRS.\n *\n * @param {object} ll Object literal with lat and lon properties on a\n * WGS84 ellipsoid.\n * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n * 100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.\n * @return {string} the MGRS string for the given location and accuracy.\n */\nexport function forward(ll, accuracy) {\n accuracy = accuracy || 5; // default accuracy 1m\n return encode(LLtoUTM({\n lat: ll[1],\n lon: ll[0]\n }), accuracy);\n};\n\n/**\n * Conversion of MGRS to lat/lon.\n *\n * @param {string} mgrs MGRS string.\n * @return {array} An array with left (longitude), bottom (latitude), right\n * (longitude) and top (latitude) values in WGS84, representing the\n * bounding box for the provided MGRS reference.\n */\nexport function inverse(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n if (bbox.lat && bbox.lon) {\n return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];\n }\n return [bbox.left, bbox.bottom, bbox.right, bbox.top];\n};\n\nexport function toPoint(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n if (bbox.lat && bbox.lon) {\n return [bbox.lon, bbox.lat];\n }\n return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];\n};\n/**\n * Conversion from degrees to radians.\n *\n * @private\n * @param {number} deg the angle in degrees.\n * @return {number} the angle in radians.\n */\nfunction degToRad(deg) {\n return (deg * (Math.PI / 180.0));\n}\n\n/**\n * Conversion from radians to degrees.\n *\n * @private\n * @param {number} rad the angle in radians.\n * @return {number} the angle in degrees.\n */\nfunction radToDeg(rad) {\n return (180.0 * (rad / Math.PI));\n}\n\n/**\n * Converts a set of Longitude and Latitude co-ordinates to UTM\n * using the WGS84 ellipsoid.\n *\n * @private\n * @param {object} ll Object literal with lat and lon properties\n * representing the WGS84 coordinate to be converted.\n * @return {object} Object literal containing the UTM value with easting,\n * northing, zoneNumber and zoneLetter properties, and an optional\n * accuracy property in digits. Returns null if the conversion failed.\n */\nfunction LLtoUTM(ll) {\n var Lat = ll.lat;\n var Long = ll.lon;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var k0 = 0.9996;\n var LongOrigin;\n var eccPrimeSquared;\n var N, T, C, A, M;\n var LatRad = degToRad(Lat);\n var LongRad = degToRad(Long);\n var LongOriginRad;\n var ZoneNumber;\n // (int)\n ZoneNumber = Math.floor((Long + 180) / 6) + 1;\n\n //Make sure the longitude 180.00 is in Zone 60\n if (Long === 180) {\n ZoneNumber = 60;\n }\n\n // Special zone for Norway\n if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {\n ZoneNumber = 32;\n }\n\n // Special zones for Svalbard\n if (Lat >= 72.0 && Lat < 84.0) {\n if (Long >= 0.0 && Long < 9.0) {\n ZoneNumber = 31;\n }\n else if (Long >= 9.0 && Long < 21.0) {\n ZoneNumber = 33;\n }\n else if (Long >= 21.0 && Long < 33.0) {\n ZoneNumber = 35;\n }\n else if (Long >= 33.0 && Long < 42.0) {\n ZoneNumber = 37;\n }\n }\n\n LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin\n // in middle of\n // zone\n LongOriginRad = degToRad(LongOrigin);\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));\n T = Math.tan(LatRad) * Math.tan(LatRad);\n C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);\n A = Math.cos(LatRad) * (LongRad - LongOriginRad);\n\n M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));\n\n var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);\n\n var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));\n if (Lat < 0.0) {\n UTMNorthing += 10000000.0; //10000000 meter offset for\n // southern hemisphere\n }\n\n return {\n northing: Math.round(UTMNorthing),\n easting: Math.round(UTMEasting),\n zoneNumber: ZoneNumber,\n zoneLetter: getLetterDesignator(Lat)\n };\n}\n\n/**\n * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience\n * class where the Zone can be specified as a single string eg.\"60N\" which\n * is then broken down into the ZoneNumber and ZoneLetter.\n *\n * @private\n * @param {object} utm An object literal with northing, easting, zoneNumber\n * and zoneLetter properties. If an optional accuracy property is\n * provided (in meters), a bounding box will be returned instead of\n * latitude and longitude.\n * @return {object} An object literal containing either lat and lon values\n * (if no accuracy was provided), or top, right, bottom and left values\n * for the bounding box calculated according to the provided accuracy.\n * Returns null if the conversion failed.\n */\nfunction UTMtoLL(utm) {\n\n var UTMNorthing = utm.northing;\n var UTMEasting = utm.easting;\n var zoneLetter = utm.zoneLetter;\n var zoneNumber = utm.zoneNumber;\n // check the ZoneNummber is valid\n if (zoneNumber < 0 || zoneNumber > 60) {\n return null;\n }\n\n var k0 = 0.9996;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var eccPrimeSquared;\n var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));\n var N1, T1, C1, R1, D, M;\n var LongOrigin;\n var mu, phi1Rad;\n\n // remove 500,000 meter offset for longitude\n var x = UTMEasting - 500000.0;\n var y = UTMNorthing;\n\n // We must know somehow if we are in the Northern or Southern\n // hemisphere, this is the only time we use the letter So even\n // if the Zone letter isn't exactly correct it should indicate\n // the hemisphere correctly\n if (zoneLetter < 'N') {\n y -= 10000000.0; // remove 10,000,000 meter offset used\n // for southern hemisphere\n }\n\n // There are 60 zones with zone 1 being at West -180 to -174\n LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin\n // in middle of\n // zone\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n M = y / k0;\n mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));\n\n phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);\n // double phi1 = ProjMath.radToDeg(phi1Rad);\n\n N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));\n T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);\n C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);\n R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);\n D = x / (N1 * k0);\n\n var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);\n lat = radToDeg(lat);\n\n var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);\n lon = LongOrigin + radToDeg(lon);\n\n var result;\n if (utm.accuracy) {\n var topRight = UTMtoLL({\n northing: utm.northing + utm.accuracy,\n easting: utm.easting + utm.accuracy,\n zoneLetter: utm.zoneLetter,\n zoneNumber: utm.zoneNumber\n });\n result = {\n top: topRight.lat,\n right: topRight.lon,\n bottom: lat,\n left: lon\n };\n }\n else {\n result = {\n lat: lat,\n lon: lon\n };\n }\n return result;\n}\n\n/**\n * Calculates the MGRS letter designator for the given latitude.\n *\n * @private\n * @param {number} lat The latitude in WGS84 to get the letter designator\n * for.\n * @return {char} The letter designator.\n */\nfunction getLetterDesignator(lat) {\n //This is here as an error flag to show that the Latitude is\n //outside MGRS limits\n var LetterDesignator = 'Z';\n\n if ((84 >= lat) && (lat >= 72)) {\n LetterDesignator = 'X';\n }\n else if ((72 > lat) && (lat >= 64)) {\n LetterDesignator = 'W';\n }\n else if ((64 > lat) && (lat >= 56)) {\n LetterDesignator = 'V';\n }\n else if ((56 > lat) && (lat >= 48)) {\n LetterDesignator = 'U';\n }\n else if ((48 > lat) && (lat >= 40)) {\n LetterDesignator = 'T';\n }\n else if ((40 > lat) && (lat >= 32)) {\n LetterDesignator = 'S';\n }\n else if ((32 > lat) && (lat >= 24)) {\n LetterDesignator = 'R';\n }\n else if ((24 > lat) && (lat >= 16)) {\n LetterDesignator = 'Q';\n }\n else if ((16 > lat) && (lat >= 8)) {\n LetterDesignator = 'P';\n }\n else if ((8 > lat) && (lat >= 0)) {\n LetterDesignator = 'N';\n }\n else if ((0 > lat) && (lat >= -8)) {\n LetterDesignator = 'M';\n }\n else if ((-8 > lat) && (lat >= -16)) {\n LetterDesignator = 'L';\n }\n else if ((-16 > lat) && (lat >= -24)) {\n LetterDesignator = 'K';\n }\n else if ((-24 > lat) && (lat >= -32)) {\n LetterDesignator = 'J';\n }\n else if ((-32 > lat) && (lat >= -40)) {\n LetterDesignator = 'H';\n }\n else if ((-40 > lat) && (lat >= -48)) {\n LetterDesignator = 'G';\n }\n else if ((-48 > lat) && (lat >= -56)) {\n LetterDesignator = 'F';\n }\n else if ((-56 > lat) && (lat >= -64)) {\n LetterDesignator = 'E';\n }\n else if ((-64 > lat) && (lat >= -72)) {\n LetterDesignator = 'D';\n }\n else if ((-72 > lat) && (lat >= -80)) {\n LetterDesignator = 'C';\n }\n return LetterDesignator;\n}\n\n/**\n * Encodes a UTM location as MGRS string.\n *\n * @private\n * @param {object} utm An object literal with easting, northing,\n * zoneLetter, zoneNumber\n * @param {number} accuracy Accuracy in digits (1-5).\n * @return {string} MGRS string for the given UTM location.\n */\nfunction encode(utm, accuracy) {\n // prepend with leading zeroes\n var seasting = \"00000\" + utm.easting,\n snorthing = \"00000\" + utm.northing;\n\n return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);\n}\n\n/**\n * Get the two letter 100k designator for a given UTM easting,\n * northing and zone number value.\n *\n * @private\n * @param {number} easting\n * @param {number} northing\n * @param {number} zoneNumber\n * @return the two letter 100k designator for the given UTM location.\n */\nfunction get100kID(easting, northing, zoneNumber) {\n var setParm = get100kSetForZone(zoneNumber);\n var setColumn = Math.floor(easting / 100000);\n var setRow = Math.floor(northing / 100000) % 20;\n return getLetter100kID(setColumn, setRow, setParm);\n}\n\n/**\n * Given a UTM zone number, figure out the MGRS 100K set it is in.\n *\n * @private\n * @param {number} i An UTM zone number.\n * @return {number} the 100k set the UTM zone is in.\n */\nfunction get100kSetForZone(i) {\n var setParm = i % NUM_100K_SETS;\n if (setParm === 0) {\n setParm = NUM_100K_SETS;\n }\n\n return setParm;\n}\n\n/**\n * Get the two-letter MGRS 100k designator given information\n * translated from the UTM northing, easting and zone number.\n *\n * @private\n * @param {number} column the column index as it relates to the MGRS\n * 100k set spreadsheet, created from the UTM easting.\n * Values are 1-8.\n * @param {number} row the row index as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM northing value. Values\n * are from 0-19.\n * @param {number} parm the set block, as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM zone. Values are from\n * 1-60.\n * @return two letter MGRS 100k code.\n */\nfunction getLetter100kID(column, row, parm) {\n // colOrigin and rowOrigin are the letters at the origin of the set\n var index = parm - 1;\n var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);\n var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);\n\n // colInt and rowInt are the letters to build to return\n var colInt = colOrigin + column - 1;\n var rowInt = rowOrigin + row;\n var rollover = false;\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n rollover = true;\n }\n\n if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {\n colInt++;\n }\n\n if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {\n colInt++;\n\n if (colInt === I) {\n colInt++;\n }\n }\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n rollover = true;\n }\n else {\n rollover = false;\n }\n\n if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {\n rowInt++;\n }\n\n if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {\n rowInt++;\n\n if (rowInt === I) {\n rowInt++;\n }\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n }\n\n var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);\n return twoLetter;\n}\n\n/**\n * Decode the UTM parameters from a MGRS string.\n *\n * @private\n * @param {string} mgrsString an UPPERCASE coordinate string is expected.\n * @return {object} An object literal with easting, northing, zoneLetter,\n * zoneNumber and accuracy (in meters) properties.\n */\nfunction decode(mgrsString) {\n\n if (mgrsString && mgrsString.length === 0) {\n throw (\"MGRSPoint coverting from nothing\");\n }\n\n var length = mgrsString.length;\n\n var hunK = null;\n var sb = \"\";\n var testChar;\n var i = 0;\n\n // get Zone number\n while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {\n if (i >= 2) {\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n sb += testChar;\n i++;\n }\n\n var zoneNumber = parseInt(sb, 10);\n\n if (i === 0 || i + 3 > length) {\n // A good MGRS string has to be 4-5 digits long,\n // ##AAA/#AAA at least.\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n\n var zoneLetter = mgrsString.charAt(i++);\n\n // Should we check the zone letter here? Why not.\n if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {\n throw (\"MGRSPoint zone letter \" + zoneLetter + \" not handled: \" + mgrsString);\n }\n\n hunK = mgrsString.substring(i, i += 2);\n\n var set = get100kSetForZone(zoneNumber);\n\n var east100k = getEastingFromChar(hunK.charAt(0), set);\n var north100k = getNorthingFromChar(hunK.charAt(1), set);\n\n // We have a bug where the northing may be 2000000 too low.\n // How\n // do we know when to roll over?\n\n while (north100k < getMinNorthing(zoneLetter)) {\n north100k += 2000000;\n }\n\n // calculate the char index for easting/northing separator\n var remainder = length - i;\n\n if (remainder % 2 !== 0) {\n throw (\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\" + mgrsString);\n }\n\n var sep = remainder / 2;\n\n var sepEasting = 0.0;\n var sepNorthing = 0.0;\n var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;\n if (sep > 0) {\n accuracyBonus = 100000.0 / Math.pow(10, sep);\n sepEastingString = mgrsString.substring(i, i + sep);\n sepEasting = parseFloat(sepEastingString) * accuracyBonus;\n sepNorthingString = mgrsString.substring(i + sep);\n sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;\n }\n\n easting = sepEasting + east100k;\n northing = sepNorthing + north100k;\n\n return {\n easting: easting,\n northing: northing,\n zoneLetter: zoneLetter,\n zoneNumber: zoneNumber,\n accuracy: accuracyBonus\n };\n}\n\n/**\n * Given the first letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the easting value that\n * should be added to the other, secondary easting value.\n *\n * @private\n * @param {char} e The first letter from a two-letter MGRS 100´k zone.\n * @param {number} set The MGRS table set for the zone number.\n * @return {number} The easting value for the given letter and set.\n */\nfunction getEastingFromChar(e, set) {\n // colOrigin is the letter at the origin of the set for the\n // column\n var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);\n var eastingValue = 100000.0;\n var rewindMarker = false;\n\n while (curCol !== e.charCodeAt(0)) {\n curCol++;\n if (curCol === I) {\n curCol++;\n }\n if (curCol === O) {\n curCol++;\n }\n if (curCol > Z) {\n if (rewindMarker) {\n throw (\"Bad character: \" + e);\n }\n curCol = A;\n rewindMarker = true;\n }\n eastingValue += 100000.0;\n }\n\n return eastingValue;\n}\n\n/**\n * Given the second letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the northing value that\n * should be added to the other, secondary northing value. You have to\n * remember that Northings are determined from the equator, and the vertical\n * cycle of letters mean a 2000000 additional northing meters. This happens\n * approx. every 18 degrees of latitude. This method does *NOT* count any\n * additional northings. You have to figure out how many 2000000 meters need\n * to be added for the zone letter of the MGRS coordinate.\n *\n * @private\n * @param {char} n Second letter of the MGRS 100k zone\n * @param {number} set The MGRS table set number, which is dependent on the\n * UTM zone number.\n * @return {number} The northing value for the given letter and set.\n */\nfunction getNorthingFromChar(n, set) {\n\n if (n > 'V') {\n throw (\"MGRSPoint given invalid Northing \" + n);\n }\n\n // rowOrigin is the letter at the origin of the set for the\n // column\n var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);\n var northingValue = 0.0;\n var rewindMarker = false;\n\n while (curRow !== n.charCodeAt(0)) {\n curRow++;\n if (curRow === I) {\n curRow++;\n }\n if (curRow === O) {\n curRow++;\n }\n // fixing a bug making whole application hang in this loop\n // when 'n' is a wrong character\n if (curRow > V) {\n if (rewindMarker) { // making sure that this loop ends\n throw (\"Bad character: \" + n);\n }\n curRow = A;\n rewindMarker = true;\n }\n northingValue += 100000.0;\n }\n\n return northingValue;\n}\n\n/**\n * The function getMinNorthing returns the minimum northing value of a MGRS\n * zone.\n *\n * Ported from Geotrans' c Lattitude_Band_Value structure table.\n *\n * @private\n * @param {char} zoneLetter The MGRS zone to get the min northing for.\n * @return {number}\n */\nfunction getMinNorthing(zoneLetter) {\n var northing;\n switch (zoneLetter) {\n case 'C':\n northing = 1100000.0;\n break;\n case 'D':\n northing = 2000000.0;\n break;\n case 'E':\n northing = 2800000.0;\n break;\n case 'F':\n northing = 3700000.0;\n break;\n case 'G':\n northing = 4600000.0;\n break;\n case 'H':\n northing = 5500000.0;\n break;\n case 'J':\n northing = 6400000.0;\n break;\n case 'K':\n northing = 7300000.0;\n break;\n case 'L':\n northing = 8200000.0;\n break;\n case 'M':\n northing = 9100000.0;\n break;\n case 'N':\n northing = 0.0;\n break;\n case 'P':\n northing = 800000.0;\n break;\n case 'Q':\n northing = 1700000.0;\n break;\n case 'R':\n northing = 2600000.0;\n break;\n case 'S':\n northing = 3500000.0;\n break;\n case 'T':\n northing = 4400000.0;\n break;\n case 'U':\n northing = 5300000.0;\n break;\n case 'V':\n northing = 6200000.0;\n break;\n case 'W':\n northing = 7000000.0;\n break;\n case 'X':\n northing = 7900000.0;\n break;\n default:\n northing = -1.0;\n }\n if (northing >= 0.0) {\n return northing;\n }\n else {\n throw (\"Invalid zone letter: \" + zoneLetter);\n }\n\n}\n","import {toPoint, forward} from 'mgrs';\n\nfunction Point(x, y, z) {\n if (!(this instanceof Point)) {\n return new Point(x, y, z);\n }\n if (Array.isArray(x)) {\n this.x = x[0];\n this.y = x[1];\n this.z = x[2] || 0.0;\n } else if(typeof x === 'object') {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z || 0.0;\n } else if (typeof x === 'string' && typeof y === 'undefined') {\n var coords = x.split(',');\n this.x = parseFloat(coords[0], 10);\n this.y = parseFloat(coords[1], 10);\n this.z = parseFloat(coords[2], 10) || 0.0;\n } else {\n this.x = x;\n this.y = y;\n this.z = z || 0.0;\n }\n console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');\n}\n\nPoint.fromMGRS = function(mgrsStr) {\n return new Point(toPoint(mgrsStr));\n};\nPoint.prototype.toMGRS = function(accuracy) {\n return forward([this.x, this.y], accuracy);\n};\nexport default Point;\n","var C00 = 1;\nvar C02 = 0.25;\nvar C04 = 0.046875;\nvar C06 = 0.01953125;\nvar C08 = 0.01068115234375;\nvar C22 = 0.75;\nvar C44 = 0.46875;\nvar C46 = 0.01302083333333333333;\nvar C48 = 0.00712076822916666666;\nvar C66 = 0.36458333333333333333;\nvar C68 = 0.00569661458333333333;\nvar C88 = 0.3076171875;\n\nexport default function(es) {\n var en = [];\n en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));\n en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));\n var t = es * es;\n en[2] = t * (C44 - es * (C46 + es * C48));\n t *= es;\n en[3] = t * (C66 - es * C68);\n en[4] = t * es * C88;\n return en;\n}","export default function(phi, sphi, cphi, en) {\n cphi *= sphi;\n sphi *= sphi;\n return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));\n}","import pj_mlfn from \"./pj_mlfn\";\nimport {EPSLN} from '../constants/values';\n\nvar MAX_ITER = 20;\n\nexport default function(arg, es, en) {\n var k = 1 / (1 - es);\n var phi = arg;\n for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */\n var s = Math.sin(phi);\n var t = 1 - es * s * s;\n //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;\n //phi -= t * (t * Math.sqrt(t)) * k;\n t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;\n phi -= t;\n if (Math.abs(t) < EPSLN) {\n return phi;\n }\n }\n //..reportError(\"cass:pj_inv_mlfn: Convergence error\");\n return phi;\n}\n","// Heavily based on this tmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js\n\nimport pj_enfn from '../common/pj_enfn';\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport adjust_lon from '../common/adjust_lon';\n\nimport {EPSLN, HALF_PI} from '../constants/values';\nimport sign from '../common/sign';\n\nexport function init() {\n this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n if (this.es) {\n this.en = pj_enfn(this.es);\n this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);\n }\n}\n\n/**\n Transverse Mercator Forward - long/lat to x/y\n long/lat in radians\n */\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var con;\n var x, y;\n var sin_phi = Math.sin(lat);\n var cos_phi = Math.cos(lat);\n\n if (!this.es) {\n var b = cos_phi * Math.sin(delta_lon);\n\n if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {\n return (93);\n }\n else {\n x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;\n y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));\n b = Math.abs(y);\n\n if (b >= 1) {\n if ((b - 1) > EPSLN) {\n return (93);\n }\n else {\n y = 0;\n }\n }\n else {\n y = Math.acos(y);\n }\n\n if (lat < 0) {\n y = -y;\n }\n\n y = this.a * this.k0 * (y - this.lat0) + this.y0;\n }\n }\n else {\n var al = cos_phi * delta_lon;\n var als = Math.pow(al, 2);\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var cs = Math.pow(c, 2);\n var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;\n var t = Math.pow(tq, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n al = al / Math.sqrt(con);\n var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);\n\n x = this.a * (this.k0 * al * (1 +\n als / 6 * (1 - t + c +\n als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +\n als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +\n this.x0;\n\n y = this.a * (this.k0 * (ml - this.ml0 +\n sin_phi * delta_lon * al / 2 * (1 +\n als / 12 * (5 - t + 9 * c + 4 * cs +\n als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +\n als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +\n this.y0;\n }\n\n p.x = x;\n p.y = y;\n\n return p;\n}\n\n/**\n Transverse Mercator Inverse - x/y to long/lat\n */\nexport function inverse(p) {\n var con, phi;\n var lat, lon;\n var x = (p.x - this.x0) * (1 / this.a);\n var y = (p.y - this.y0) * (1 / this.a);\n\n if (!this.es) {\n var f = Math.exp(x / this.k0);\n var g = 0.5 * (f - 1 / f);\n var temp = this.lat0 + y / this.k0;\n var h = Math.cos(temp);\n con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));\n lat = Math.asin(con);\n\n if (y < 0) {\n lat = -lat;\n }\n\n if ((g === 0) && (h === 0)) {\n lon = 0;\n }\n else {\n lon = adjust_lon(Math.atan2(g, h) + this.long0);\n }\n }\n else { // ellipsoidal form\n con = this.ml0 + y / this.k0;\n phi = pj_inv_mlfn(con, this.es, this.en);\n\n if (Math.abs(phi) < HALF_PI) {\n var sin_phi = Math.sin(phi);\n var cos_phi = Math.cos(phi);\n var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var cs = Math.pow(c, 2);\n var t = Math.pow(tan_phi, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n var d = x * Math.sqrt(con) / this.k0;\n var ds = Math.pow(d, 2);\n con = con * tan_phi;\n\n lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -\n ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -\n ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -\n ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));\n\n lon = adjust_lon(this.long0 + (d * (1 -\n ds / 6 * (1 + 2 * t + c -\n ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -\n ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));\n }\n else {\n lat = HALF_PI * sign(y);\n lon = 0;\n }\n }\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"Fast_Transverse_Mercator\", \"Fast Transverse Mercator\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(x) {\n var r = Math.exp(x);\n r = (r - 1 / r) / 2;\n return r;\n}","export default function(x, y) {\n x = Math.abs(x);\n y = Math.abs(y);\n var a = Math.max(x, y);\n var b = Math.min(x, y) / (a ? a : 1);\n\n return a * Math.sqrt(1 + Math.pow(b, 2));\n}\n","import hypot from './hypot';\nimport log1py from './log1py';\n\nexport default function(x) {\n var y = Math.abs(x);\n y = log1py(y * (1 + y / (hypot(1, y) + 1)));\n\n return x < 0 ? -y : y;\n}\n","export default function(x) {\n var y = 1 + x;\n var z = y - 1;\n\n return z === 0 ? x : x * Math.log(y) / z;\n}\n","export default function(pp, B) {\n var cos_2B = 2 * Math.cos(2 * B);\n var i = pp.length - 1;\n var h1 = pp[i];\n var h2 = 0;\n var h;\n\n while (--i >= 0) {\n h = -h2 + cos_2B * h1 + pp[i];\n h2 = h1;\n h1 = h;\n }\n\n return (B + h * Math.sin(2 * B));\n}\n","import sinh from './sinh';\nimport cosh from './cosh';\n\nexport default function(pp, arg_r, arg_i) {\n var sin_arg_r = Math.sin(arg_r);\n var cos_arg_r = Math.cos(arg_r);\n var sinh_arg_i = sinh(arg_i);\n var cosh_arg_i = cosh(arg_i);\n var r = 2 * cos_arg_r * cosh_arg_i;\n var i = -2 * sin_arg_r * sinh_arg_i;\n var j = pp.length - 1;\n var hr = pp[j];\n var hi1 = 0;\n var hr1 = 0;\n var hi = 0;\n var hr2;\n var hi2;\n\n while (--j >= 0) {\n hr2 = hr1;\n hi2 = hi1;\n hr1 = hr;\n hi1 = hi;\n hr = -hr2 + r * hr1 - i * hi1 + pp[j];\n hi = -hi2 + i * hr1 + r * hi1;\n }\n\n r = sin_arg_r * cosh_arg_i;\n i = cos_arg_r * sinh_arg_i;\n\n return [r * hr - i * hi, r * hi + i * hr];\n}\n","export default function(x) {\n var r = Math.exp(x);\n r = (r + 1 / r) / 2;\n return r;\n}","// Heavily based on this etmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js\n\nimport tmerc from '../projections/tmerc';\nimport sinh from '../common/sinh';\nimport hypot from '../common/hypot';\nimport asinhy from '../common/asinhy';\nimport gatg from '../common/gatg';\nimport clens from '../common/clens';\nimport clens_cmplx from '../common/clens_cmplx';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n if (!this.approx && (isNaN(this.es) || this.es <= 0)) {\n throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION[\"Fast_Transverse_Mercator\"] in the WKT.');\n }\n if (this.approx) {\n // When '+approx' is set, use tmerc instead\n tmerc.init.apply(this);\n this.forward = tmerc.forward;\n this.inverse = tmerc.inverse;\n }\n\n this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n this.cgb = [];\n this.cbg = [];\n this.utg = [];\n this.gtu = [];\n\n var f = this.es / (1 + Math.sqrt(1 - this.es));\n var n = f / (2 - f);\n var np = n;\n\n this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));\n this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));\n\n np = np * n;\n this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));\n this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));\n\n np = np * n;\n this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));\n this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));\n\n np = np * n;\n this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));\n this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));\n\n np = np * n;\n this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));\n this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));\n\n np = np * n;\n this.cgb[5] = np * (601676 / 22275);\n this.cbg[5] = np * (444337 / 155925);\n\n np = Math.pow(n, 2);\n this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));\n\n this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));\n this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));\n\n this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));\n this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));\n\n np = np * n;\n this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));\n this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));\n\n np = np * n;\n this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));\n this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));\n\n np = np * n;\n this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));\n this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));\n\n np = np * n;\n this.utg[5] = np * (-20648693 / 638668800);\n this.gtu[5] = np * (212378941 / 319334400);\n\n var Z = gatg(this.cbg, this.lat0);\n this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));\n}\n\nexport function forward(p) {\n var Ce = adjust_lon(p.x - this.long0);\n var Cn = p.y;\n\n Cn = gatg(this.cbg, Cn);\n var sin_Cn = Math.sin(Cn);\n var cos_Cn = Math.cos(Cn);\n var sin_Ce = Math.sin(Ce);\n var cos_Ce = Math.cos(Ce);\n\n Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);\n Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));\n Ce = asinhy(Math.tan(Ce));\n\n var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);\n\n Cn = Cn + tmp[0];\n Ce = Ce + tmp[1];\n\n var x;\n var y;\n\n if (Math.abs(Ce) <= 2.623395162778) {\n x = this.a * (this.Qn * Ce) + this.x0;\n y = this.a * (this.Qn * Cn + this.Zb) + this.y0;\n }\n else {\n x = Infinity;\n y = Infinity;\n }\n\n p.x = x;\n p.y = y;\n\n return p;\n}\n\nexport function inverse(p) {\n var Ce = (p.x - this.x0) * (1 / this.a);\n var Cn = (p.y - this.y0) * (1 / this.a);\n\n Cn = (Cn - this.Zb) / this.Qn;\n Ce = Ce / this.Qn;\n\n var lon;\n var lat;\n\n if (Math.abs(Ce) <= 2.623395162778) {\n var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);\n\n Cn = Cn + tmp[0];\n Ce = Ce + tmp[1];\n Ce = Math.atan(sinh(Ce));\n\n var sin_Cn = Math.sin(Cn);\n var cos_Cn = Math.cos(Cn);\n var sin_Ce = Math.sin(Ce);\n var cos_Ce = Math.cos(Ce);\n\n Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));\n Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);\n\n lon = adjust_lon(Ce + this.long0);\n lat = gatg(this.cgb, Cn);\n }\n else {\n lon = Infinity;\n lat = Infinity;\n }\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"Extended_Transverse_Mercator\", \"Extended Transverse Mercator\", \"etmerc\", \"Transverse_Mercator\", \"Transverse Mercator\", \"Gauss Kruger\", \"Gauss_Kruger\", \"tmerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(pp, arg_r) {\n var r = 2 * Math.cos(arg_r);\n var i = pp.length - 1;\n var hr1 = pp[i];\n var hr2 = 0;\n var hr;\n\n while (--i >= 0) {\n hr = -hr2 + r * hr1 + pp[i];\n hr2 = hr1;\n hr1 = hr;\n }\n\n return Math.sin(arg_r) * hr;\n}\n","import adjust_zone from '../common/adjust_zone';\nimport etmerc from './etmerc';\nexport var dependsOn = 'etmerc';\nimport {D2R} from '../constants/values';\n\n\nexport function init() {\n var zone = adjust_zone(this.zone, this.long0);\n if (zone === undefined) {\n throw new Error('unknown utm zone');\n }\n this.lat0 = 0;\n this.long0 = ((6 * Math.abs(zone)) - 183) * D2R;\n this.x0 = 500000;\n this.y0 = this.utmSouth ? 10000000 : 0;\n this.k0 = 0.9996;\n\n etmerc.init.apply(this);\n this.forward = etmerc.forward;\n this.inverse = etmerc.inverse;\n}\n\nexport var names = [\"Universal Transverse Mercator System\", \"utm\"];\nexport default {\n init: init,\n names: names,\n dependsOn: dependsOn\n};\n","import adjust_lon from './adjust_lon';\n\nexport default function(zone, lon) {\n if (zone === undefined) {\n zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;\n\n if (zone < 0) {\n return 0;\n } else if (zone > 60) {\n return 60;\n }\n }\n return zone;\n}\n","export default function(esinp, exp) {\n return (Math.pow((1 - esinp) / (1 + esinp), exp));\n}","import srat from '../common/srat';\nvar MAX_ITER = 20;\nimport {HALF_PI, FORTPI} from '../constants/values';\n\nexport function init() {\n var sphi = Math.sin(this.lat0);\n var cphi = Math.cos(this.lat0);\n cphi *= cphi;\n this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);\n this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));\n this.phic0 = Math.asin(sphi / this.C);\n this.ratexp = 0.5 * this.C * this.e;\n this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));\n}\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n\n p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;\n p.x = this.C * lon;\n return p;\n}\n\nexport function inverse(p) {\n var DEL_TOL = 1e-14;\n var lon = p.x / this.C;\n var lat = p.y;\n var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);\n for (var i = MAX_ITER; i > 0; --i) {\n lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;\n if (Math.abs(lat - p.y) < DEL_TOL) {\n break;\n }\n p.y = lat;\n }\n /* convergence failed */\n if (!i) {\n return null;\n }\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"gauss\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import gauss from './gauss';\nimport adjust_lon from '../common/adjust_lon';\nimport hypot from '../common/hypot';\n\nexport function init() {\n gauss.init.apply(this);\n if (!this.rc) {\n return;\n }\n this.sinc0 = Math.sin(this.phic0);\n this.cosc0 = Math.cos(this.phic0);\n this.R2 = 2 * this.rc;\n if (!this.title) {\n this.title = \"Oblique Stereographic Alternative\";\n }\n}\n\nexport function forward(p) {\n var sinc, cosc, cosl, k;\n p.x = adjust_lon(p.x - this.long0);\n gauss.forward.apply(this, [p]);\n sinc = Math.sin(p.y);\n cosc = Math.cos(p.y);\n cosl = Math.cos(p.x);\n k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);\n p.x = k * cosc * Math.sin(p.x);\n p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);\n p.x = this.a * p.x + this.x0;\n p.y = this.a * p.y + this.y0;\n return p;\n}\n\nexport function inverse(p) {\n var sinc, cosc, lon, lat, rho;\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n if ((rho = hypot(p.x, p.y))) {\n var c = 2 * Math.atan2(rho, this.R2);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);\n lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n gauss.inverse.apply(this, [p]);\n p.x = adjust_lon(p.x + this.long0);\n return p;\n}\n\nexport var names = [\"Stereographic_North_Pole\", \"Oblique_Stereographic\", \"sterea\",\"Oblique Stereographic Alternative\",\"Double_Stereographic\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {EPSLN, HALF_PI} from '../constants/values';\n\nimport sign from '../common/sign';\nimport msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function ssfn_(phit, sinphi, eccen) {\n sinphi *= eccen;\n return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));\n}\n\nexport function init() {\n\n // setting default parameters\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n\n this.coslat0 = Math.cos(this.lat0);\n this.sinlat0 = Math.sin(this.lat0);\n if (this.sphere) {\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));\n }\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (this.lat0 > 0) {\n //North pole\n //trace('stere:north pole');\n this.con = 1;\n }\n else {\n //South pole\n //trace('stere:south pole');\n this.con = -1;\n }\n }\n this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN && Math.abs(Math.cos(this.lat_ts)) > EPSLN) {\n // When k0 is 1 (default value) and lat_ts is a vaild number and lat0 is at a pole and lat_ts is not at a pole\n // Recalculate k0 using formula 21-35 from p161 of Snyder, 1987\n this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));\n }\n this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);\n this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;\n this.cosX0 = Math.cos(this.X0);\n this.sinX0 = Math.sin(this.X0);\n }\n}\n\n// Stereographic forward equations--mapping lat,long to x,y\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var sinlat = Math.sin(lat);\n var coslat = Math.cos(lat);\n var A, X, sinX, cosX, ts, rh;\n var dlon = adjust_lon(lon - this.long0);\n\n if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {\n //case of the origine point\n //trace('stere:this is the origin point');\n p.x = NaN;\n p.y = NaN;\n return p;\n }\n if (this.sphere) {\n //trace('stere:sphere case');\n A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));\n p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;\n p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;\n return p;\n }\n else {\n X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;\n cosX = Math.cos(X);\n sinX = Math.sin(X);\n if (Math.abs(this.coslat0) <= EPSLN) {\n ts = tsfnz(this.e, lat * this.con, this.con * sinlat);\n rh = 2 * this.a * this.k0 * ts / this.cons;\n p.x = this.x0 + rh * Math.sin(lon - this.long0);\n p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);\n //trace(p.toString());\n return p;\n }\n else if (Math.abs(this.sinlat0) < EPSLN) {\n //Eq\n //trace('stere:equateur');\n A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));\n p.y = A * sinX;\n }\n else {\n //other case\n //trace('stere:normal case');\n A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));\n p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;\n }\n p.x = A * cosX * Math.sin(dlon) + this.x0;\n }\n //trace(p.toString());\n return p;\n}\n\n//* Stereographic inverse equations--mapping x,y to lat/long\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat, ts, ce, Chi;\n var rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (this.sphere) {\n var c = 2 * Math.atan(rh / (2 * this.a * this.k0));\n lon = this.long0;\n lat = this.lat0;\n if (rh <= EPSLN) {\n p.x = lon;\n p.y = lat;\n return p;\n }\n lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);\n if (Math.abs(this.coslat0) < EPSLN) {\n if (this.lat0 > 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n }\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));\n }\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (rh <= EPSLN) {\n lat = this.lat0;\n lon = this.long0;\n p.x = lon;\n p.y = lat;\n //trace(p.toString());\n return p;\n }\n p.x *= this.con;\n p.y *= this.con;\n ts = rh * this.cons / (2 * this.a * this.k0);\n lat = this.con * phi2z(this.e, ts);\n lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));\n lon = this.long0;\n if (rh <= EPSLN) {\n Chi = this.X0;\n }\n else {\n Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));\n }\n lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));\n }\n }\n p.x = lon;\n p.y = lat;\n\n //trace(p.toString());\n return p;\n\n}\n\nexport var names = [\"stere\", \"Stereographic_South_Pole\", \"Polar Stereographic (variant B)\", \"Polar_Stereographic\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n ssfn_: ssfn_\n};\n","/*\n references:\n Formules et constantes pour le Calcul pour la\n projection cylindrique conforme à axe oblique et pour la transformation entre\n des systèmes de référence.\n http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf\n */\n\nexport function init() {\n var phy0 = this.lat0;\n this.lambda0 = this.long0;\n var sinPhy0 = Math.sin(phy0);\n var semiMajorAxis = this.a;\n var invF = this.rf;\n var flattening = 1 / invF;\n var e2 = 2 * flattening - Math.pow(flattening, 2);\n var e = this.e = Math.sqrt(e2);\n this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));\n this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));\n this.b0 = Math.asin(sinPhy0 / this.alpha);\n var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));\n var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));\n var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));\n this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;\n}\n\nexport function forward(p) {\n var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));\n var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));\n var S = -this.alpha * (Sa1 + Sa2) + this.K;\n\n // spheric latitude\n var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);\n\n // spheric longitude\n var I = this.alpha * (p.x - this.lambda0);\n\n // psoeudo equatorial rotation\n var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));\n\n var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));\n\n p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;\n p.x = this.R * rotI + this.x0;\n return p;\n}\n\nexport function inverse(p) {\n var Y = p.x - this.x0;\n var X = p.y - this.y0;\n\n var rotI = Y / this.R;\n var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);\n\n var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));\n var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));\n\n var lambda = this.lambda0 + I / this.alpha;\n\n var S = 0;\n var phy = b;\n var prevPhy = -1000;\n var iteration = 0;\n while (Math.abs(phy - prevPhy) > 0.0000001) {\n if (++iteration > 20) {\n //...reportError(\"omercFwdInfinity\");\n return;\n }\n //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));\n S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));\n prevPhy = phy;\n phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;\n }\n\n p.x = lambda;\n p.y = phy;\n return p;\n}\n\nexport var names = [\"somerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import tsfnz from '../common/tsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport { D2R, EPSLN, HALF_PI, TWO_PI, FORTPI } from '../constants/values';\n\nvar TOL = 1e-7;\n\nfunction isTypeA(P) {\n var typeAProjections = ['Hotine_Oblique_Mercator','Hotine_Oblique_Mercator_Azimuth_Natural_Origin'];\n var projectionName = typeof P.PROJECTION === \"object\" ? Object.keys(P.PROJECTION)[0] : P.PROJECTION;\n \n return 'no_uoff' in P || 'no_off' in P || typeAProjections.indexOf(projectionName) !== -1;\n}\n\n\n/* Initialize the Oblique Mercator projection\n ------------------------------------------*/\nexport function init() { \n var con, com, cosph0, D, F, H, L, sinph0, p, J, gamma = 0,\n gamma0, lamc = 0, lam1 = 0, lam2 = 0, phi1 = 0, phi2 = 0, alpha_c = 0, AB;\n \n // only Type A uses the no_off or no_uoff property\n // https://github.com/OSGeo/proj.4/issues/104\n this.no_off = isTypeA(this);\n this.no_rot = 'no_rot' in this;\n \n var alp = false;\n if (\"alpha\" in this) {\n alp = true;\n }\n\n var gam = false;\n if (\"rectified_grid_angle\" in this) {\n gam = true;\n }\n\n if (alp) {\n alpha_c = this.alpha;\n }\n \n if (gam) {\n gamma = (this.rectified_grid_angle * D2R);\n }\n \n if (alp || gam) {\n lamc = this.longc;\n } else {\n lam1 = this.long1;\n phi1 = this.lat1;\n lam2 = this.long2;\n phi2 = this.lat2;\n \n if (Math.abs(phi1 - phi2) <= TOL || (con = Math.abs(phi1)) <= TOL ||\n Math.abs(con - HALF_PI) <= TOL || Math.abs(Math.abs(this.lat0) - HALF_PI) <= TOL ||\n Math.abs(Math.abs(phi2) - HALF_PI) <= TOL) {\n throw new Error();\n }\n }\n \n var one_es = 1.0 - this.es;\n com = Math.sqrt(one_es);\n \n if (Math.abs(this.lat0) > EPSLN) {\n sinph0 = Math.sin(this.lat0);\n cosph0 = Math.cos(this.lat0);\n con = 1 - this.es * sinph0 * sinph0;\n this.B = cosph0 * cosph0;\n this.B = Math.sqrt(1 + this.es * this.B * this.B / one_es);\n this.A = this.B * this.k0 * com / con;\n D = this.B * com / (cosph0 * Math.sqrt(con));\n F = D * D -1;\n \n if (F <= 0) {\n F = 0;\n } else {\n F = Math.sqrt(F);\n if (this.lat0 < 0) {\n F = -F;\n }\n }\n \n this.E = F += D;\n this.E *= Math.pow(tsfnz(this.e, this.lat0, sinph0), this.B);\n } else {\n this.B = 1 / com;\n this.A = this.k0;\n this.E = D = F = 1;\n }\n \n if (alp || gam) {\n if (alp) {\n gamma0 = Math.asin(Math.sin(alpha_c) / D);\n if (!gam) {\n gamma = alpha_c;\n }\n } else {\n gamma0 = gamma;\n alpha_c = Math.asin(D * Math.sin(gamma0));\n }\n this.lam0 = lamc - Math.asin(0.5 * (F - 1 / F) * Math.tan(gamma0)) / this.B;\n } else {\n H = Math.pow(tsfnz(this.e, phi1, Math.sin(phi1)), this.B);\n L = Math.pow(tsfnz(this.e, phi2, Math.sin(phi2)), this.B);\n F = this.E / H;\n p = (L - H) / (L + H);\n J = this.E * this.E;\n J = (J - L * H) / (J + L * H);\n con = lam1 - lam2;\n \n if (con < -Math.pi) {\n lam2 -=TWO_PI;\n } else if (con > Math.pi) {\n lam2 += TWO_PI;\n }\n \n this.lam0 = adjust_lon(0.5 * (lam1 + lam2) - Math.atan(J * Math.tan(0.5 * this.B * (lam1 - lam2)) / p) / this.B);\n gamma0 = Math.atan(2 * Math.sin(this.B * adjust_lon(lam1 - this.lam0)) / (F - 1 / F));\n gamma = alpha_c = Math.asin(D * Math.sin(gamma0));\n }\n \n this.singam = Math.sin(gamma0);\n this.cosgam = Math.cos(gamma0);\n this.sinrot = Math.sin(gamma);\n this.cosrot = Math.cos(gamma);\n \n this.rB = 1 / this.B;\n this.ArB = this.A * this.rB;\n this.BrA = 1 / this.ArB;\n AB = this.A * this.B;\n \n if (this.no_off) {\n this.u_0 = 0;\n } else {\n this.u_0 = Math.abs(this.ArB * Math.atan(Math.sqrt(D * D - 1) / Math.cos(alpha_c)));\n \n if (this.lat0 < 0) {\n this.u_0 = - this.u_0;\n } \n }\n \n F = 0.5 * gamma0;\n this.v_pole_n = this.ArB * Math.log(Math.tan(FORTPI - F));\n this.v_pole_s = this.ArB * Math.log(Math.tan(FORTPI + F));\n}\n\n\n/* Oblique Mercator forward equations--mapping lat,long to x,y\n ----------------------------------------------------------*/\nexport function forward(p) {\n var coords = {};\n var S, T, U, V, W, temp, u, v;\n p.x = p.x - this.lam0;\n \n if (Math.abs(Math.abs(p.y) - HALF_PI) > EPSLN) {\n W = this.E / Math.pow(tsfnz(this.e, p.y, Math.sin(p.y)), this.B);\n \n temp = 1 / W;\n S = 0.5 * (W - temp);\n T = 0.5 * (W + temp);\n V = Math.sin(this.B * p.x);\n U = (S * this.singam - V * this.cosgam) / T;\n \n if (Math.abs(Math.abs(U) - 1.0) < EPSLN) {\n throw new Error();\n }\n \n v = 0.5 * this.ArB * Math.log((1 - U)/(1 + U));\n temp = Math.cos(this.B * p.x);\n \n if (Math.abs(temp) < TOL) {\n u = this.A * p.x;\n } else {\n u = this.ArB * Math.atan2((S * this.cosgam + V * this.singam), temp);\n } \n } else {\n v = p.y > 0 ? this.v_pole_n : this.v_pole_s;\n u = this.ArB * p.y;\n }\n \n if (this.no_rot) {\n coords.x = u;\n coords.y = v;\n } else {\n u -= this.u_0;\n coords.x = v * this.cosrot + u * this.sinrot;\n coords.y = u * this.cosrot - v * this.sinrot;\n }\n \n coords.x = (this.a * coords.x + this.x0);\n coords.y = (this.a * coords.y + this.y0);\n \n return coords;\n}\n\nexport function inverse(p) {\n var u, v, Qp, Sp, Tp, Vp, Up;\n var coords = {};\n \n p.x = (p.x - this.x0) * (1.0 / this.a);\n p.y = (p.y - this.y0) * (1.0 / this.a);\n\n if (this.no_rot) {\n v = p.y;\n u = p.x;\n } else {\n v = p.x * this.cosrot - p.y * this.sinrot;\n u = p.y * this.cosrot + p.x * this.sinrot + this.u_0;\n }\n \n Qp = Math.exp(-this.BrA * v);\n Sp = 0.5 * (Qp - 1 / Qp);\n Tp = 0.5 * (Qp + 1 / Qp);\n Vp = Math.sin(this.BrA * u);\n Up = (Vp * this.cosgam + Sp * this.singam) / Tp;\n \n if (Math.abs(Math.abs(Up) - 1) < EPSLN) {\n coords.x = 0;\n coords.y = Up < 0 ? -HALF_PI : HALF_PI;\n } else {\n coords.y = this.E / Math.sqrt((1 + Up) / (1 - Up));\n coords.y = phi2z(this.e, Math.pow(coords.y, 1 / this.B));\n \n if (coords.y === Infinity) {\n throw new Error();\n }\n \n coords.x = -this.rB * Math.atan2((Sp * this.cosgam - Vp * this.singam), Math.cos(this.BrA * u));\n }\n \n coords.x += this.lam0;\n \n return coords;\n}\n\nexport var names = [\"Hotine_Oblique_Mercator\", \"Hotine Oblique Mercator\", \"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\", \"Hotine_Oblique_Mercator_Two_Point_Natural_Origin\", \"Hotine_Oblique_Mercator_Azimuth_Center\", \"Oblique_Mercator\", \"omerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport sign from '../common/sign';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport {HALF_PI, EPSLN} from '../constants/values';\nexport function init() {\n \n //double lat0; /* the reference latitude */\n //double long0; /* the reference longitude */\n //double lat1; /* first standard parallel */\n //double lat2; /* second standard parallel */\n //double r_maj; /* major axis */\n //double r_min; /* minor axis */\n //double false_east; /* x offset in meters */\n //double false_north; /* y offset in meters */\n \n //the above value can be set with proj4.defs\n //example: proj4.defs(\"EPSG:2154\",\"+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs\");\n\n if (!this.lat2) {\n this.lat2 = this.lat1;\n } //if lat2 is not defined\n if (!this.k0) {\n this.k0 = 1;\n }\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n\n var temp = this.b / this.a;\n this.e = Math.sqrt(1 - temp * temp);\n\n var sin1 = Math.sin(this.lat1);\n var cos1 = Math.cos(this.lat1);\n var ms1 = msfnz(this.e, sin1, cos1);\n var ts1 = tsfnz(this.e, this.lat1, sin1);\n\n var sin2 = Math.sin(this.lat2);\n var cos2 = Math.cos(this.lat2);\n var ms2 = msfnz(this.e, sin2, cos2);\n var ts2 = tsfnz(this.e, this.lat2, sin2);\n\n var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);\n }\n else {\n this.ns = sin1;\n }\n if (isNaN(this.ns)) {\n this.ns = sin1;\n }\n this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));\n this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);\n if (!this.title) {\n this.title = \"Lambert Conformal Conic\";\n }\n}\n\n// Lambert Conformal conic forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n // singular cases :\n if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {\n lat = sign(lat) * (HALF_PI - 2 * EPSLN);\n }\n\n var con = Math.abs(Math.abs(lat) - HALF_PI);\n var ts, rh1;\n if (con > EPSLN) {\n ts = tsfnz(this.e, lat, Math.sin(lat));\n rh1 = this.a * this.f0 * Math.pow(ts, this.ns);\n }\n else {\n con = lat * this.ns;\n if (con <= 0) {\n return null;\n }\n rh1 = 0;\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;\n p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;\n\n return p;\n}\n\n// Lambert Conformal Conic inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n var rh1, con, ts;\n var lat, lon;\n var x = (p.x - this.x0) / this.k0;\n var y = (this.rh - (p.y - this.y0) / this.k0);\n if (this.ns > 0) {\n rh1 = Math.sqrt(x * x + y * y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(x * x + y * y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2((con * x), (con * y));\n }\n if ((rh1 !== 0) || (this.ns > 0)) {\n con = 1 / this.ns;\n ts = Math.pow((rh1 / (this.a * this.f0)), con);\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n else {\n lat = -HALF_PI;\n }\n lon = adjust_lon(theta / this.ns + this.long0);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\n \"Lambert Tangential Conformal Conic Projection\",\n \"Lambert_Conformal_Conic\",\n \"Lambert_Conformal_Conic_1SP\",\n \"Lambert_Conformal_Conic_2SP\",\n \"lcc\",\n \"Lambert Conic Conformal (1SP)\",\n \"Lambert Conic Conformal (2SP)\"\n];\n\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n this.a = 6377397.155;\n this.es = 0.006674372230614;\n this.e = Math.sqrt(this.es);\n if (!this.lat0) {\n this.lat0 = 0.863937979737193;\n }\n if (!this.long0) {\n this.long0 = 0.7417649320975901 - 0.308341501185665;\n }\n /* if scale not set default to 0.9999 */\n if (!this.k0) {\n this.k0 = 0.9999;\n }\n this.s45 = 0.785398163397448; /* 45 */\n this.s90 = 2 * this.s45;\n this.fi0 = this.lat0;\n this.e2 = this.es;\n this.e = Math.sqrt(this.e2);\n this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));\n this.uq = 1.04216856380474;\n this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);\n this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);\n this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;\n this.k1 = this.k0;\n this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));\n this.s0 = 1.37008346281555;\n this.n = Math.sin(this.s0);\n this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);\n this.ad = this.s90 - this.uq;\n}\n\n/* ellipsoid */\n/* calculate xy from lat/lon */\n/* Constants, identical to inverse transform function */\nexport function forward(p) {\n var gfi, u, deltav, s, d, eps, ro;\n var lon = p.x;\n var lat = p.y;\n var delta_lon = adjust_lon(lon - this.long0);\n /* Transformation */\n gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));\n u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);\n deltav = -delta_lon * this.alfa;\n s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));\n d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));\n eps = this.n * d;\n ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);\n p.y = ro * Math.cos(eps) / 1;\n p.x = ro * Math.sin(eps) / 1;\n\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n return (p);\n}\n\n/* calculate lat/lon from xy */\nexport function inverse(p) {\n var u, deltav, s, d, eps, ro, fi1;\n var ok;\n\n /* Transformation */\n /* revert y, x*/\n var tmp = p.x;\n p.x = p.y;\n p.y = tmp;\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n ro = Math.sqrt(p.x * p.x + p.y * p.y);\n eps = Math.atan2(p.y, p.x);\n d = eps / Math.sin(this.s0);\n s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);\n u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));\n deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));\n p.x = this.long0 - deltav / this.alfa;\n fi1 = u;\n ok = 0;\n var iter = 0;\n do {\n p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);\n if (Math.abs(fi1 - p.y) < 0.0000000001) {\n ok = 1;\n }\n fi1 = p.y;\n iter += 1;\n } while (ok === 0 && iter < 15);\n if (iter >= 15) {\n return null;\n }\n\n return (p);\n}\n\nexport var names = [\"Krovak\", \"krovak\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(e0, e1, e2, e3, phi) {\n return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));\n}","export default function(x) {\n return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n}","export default function(x) {\n return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n}","export default function(x) {\n return (0.05859375 * x * x * (1 + 0.75 * x));\n}","export default function(x) {\n return (x * x * x * (35 / 3072));\n}","export default function(a, e, sinphi) {\n var temp = e * sinphi;\n return a / Math.sqrt(1 - temp * temp);\n}","import {HALF_PI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n}\n","export default function(ml, e0, e1, e2, e3) {\n var phi;\n var dphi;\n\n phi = ml / e0;\n for (var i = 0; i < 15; i++) {\n dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //..reportError(\"IMLFN-CONV:Latitude failed to converge after 15 iterations\");\n return NaN;\n}","import mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nexport function init() {\n if (!this.sphere) {\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n }\n}\n\n/* Cassini forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var x, y;\n var lam = p.x;\n var phi = p.y;\n lam = adjust_lon(lam - this.long0);\n\n if (this.sphere) {\n x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));\n y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);\n }\n else {\n //ellipsoid\n var sinphi = Math.sin(phi);\n var cosphi = Math.cos(phi);\n var nl = gN(this.a, this.e, sinphi);\n var tl = Math.tan(phi) * Math.tan(phi);\n var al = lam * Math.cos(phi);\n var asq = al * al;\n var cl = this.es * cosphi * cosphi / (1 - this.es);\n var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\n x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));\n y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);\n\n\n }\n\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var phi, lam;\n\n if (this.sphere) {\n var dd = y + this.lat0;\n phi = Math.asin(Math.sin(dd) * Math.cos(x));\n lam = Math.atan2(Math.tan(x), Math.cos(dd));\n }\n else {\n /* ellipsoid */\n var ml1 = this.ml0 / this.a + y;\n var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);\n if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {\n p.x = this.long0;\n p.y = HALF_PI;\n if (y < 0) {\n p.y *= -1;\n }\n return p;\n }\n var nl1 = gN(this.a, this.e, Math.sin(phi1));\n\n var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);\n var tl1 = Math.pow(Math.tan(phi1), 2);\n var dl = x * this.a / nl1;\n var dsq = dl * dl;\n phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);\n lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);\n\n }\n\n p.x = adjust_lon(lam + this.long0);\n p.y = adjust_lat(phi);\n return p;\n\n}\n\nexport var names = [\"Cassini\", \"Cassini_Soldner\", \"cass\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(eccent, sinphi) {\n var con;\n if (eccent > 1.0e-7) {\n con = eccent * sinphi;\n return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));\n }\n else {\n return (2 * sinphi);\n }\n}","\nimport {HALF_PI, EPSLN, FORTPI} from '../constants/values';\n\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\n\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\nexport var S_POLE = 1;\n\nexport var N_POLE = 2;\nexport var EQUIT = 3;\nexport var OBLIQ = 4;\n\n/* Initialize the Lambert Azimuthal Equal Area projection\n ------------------------------------------------------*/\nexport function init() {\n var t = Math.abs(this.lat0);\n if (Math.abs(t - HALF_PI) < EPSLN) {\n this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;\n }\n else if (Math.abs(t) < EPSLN) {\n this.mode = this.EQUIT;\n }\n else {\n this.mode = this.OBLIQ;\n }\n if (this.es > 0) {\n var sinphi;\n\n this.qp = qsfnz(this.e, 1);\n this.mmf = 0.5 / (1 - this.es);\n this.apa = authset(this.es);\n switch (this.mode) {\n case this.N_POLE:\n this.dd = 1;\n break;\n case this.S_POLE:\n this.dd = 1;\n break;\n case this.EQUIT:\n this.rq = Math.sqrt(0.5 * this.qp);\n this.dd = 1 / this.rq;\n this.xmf = 1;\n this.ymf = 0.5 * this.qp;\n break;\n case this.OBLIQ:\n this.rq = Math.sqrt(0.5 * this.qp);\n sinphi = Math.sin(this.lat0);\n this.sinb1 = qsfnz(this.e, sinphi) / this.qp;\n this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);\n this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);\n this.ymf = (this.xmf = this.rq) / this.dd;\n this.xmf *= this.dd;\n break;\n }\n }\n else {\n if (this.mode === this.OBLIQ) {\n this.sinph0 = Math.sin(this.lat0);\n this.cosph0 = Math.cos(this.lat0);\n }\n }\n}\n\n/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;\n var lam = p.x;\n var phi = p.y;\n\n lam = adjust_lon(lam - this.long0);\n if (this.sphere) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n coslam = Math.cos(lam);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n if (y <= EPSLN) {\n return null;\n }\n y = Math.sqrt(2 / y);\n x = y * cosphi * Math.sin(lam);\n y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n coslam = -coslam;\n }\n if (Math.abs(phi + this.lat0) < EPSLN) {\n return null;\n }\n y = FORTPI - phi * 0.5;\n y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));\n x = y * Math.sin(lam);\n y *= coslam;\n }\n }\n else {\n sinb = 0;\n cosb = 0;\n b = 0;\n coslam = Math.cos(lam);\n sinlam = Math.sin(lam);\n sinphi = Math.sin(phi);\n q = qsfnz(this.e, sinphi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinb = q / this.qp;\n cosb = Math.sqrt(1 - sinb * sinb);\n }\n switch (this.mode) {\n case this.OBLIQ:\n b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;\n break;\n case this.EQUIT:\n b = 1 + cosb * coslam;\n break;\n case this.N_POLE:\n b = HALF_PI + phi;\n q = this.qp - q;\n break;\n case this.S_POLE:\n b = phi - HALF_PI;\n q = this.qp + q;\n break;\n }\n if (Math.abs(b) < EPSLN) {\n return null;\n }\n switch (this.mode) {\n case this.OBLIQ:\n case this.EQUIT:\n b = Math.sqrt(2 / b);\n if (this.mode === this.OBLIQ) {\n y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);\n }\n else {\n y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;\n }\n x = this.xmf * b * cosb * sinlam;\n break;\n case this.N_POLE:\n case this.S_POLE:\n if (q >= 0) {\n x = (b = Math.sqrt(q)) * sinlam;\n y = coslam * ((this.mode === this.S_POLE) ? b : -b);\n }\n else {\n x = y = 0;\n }\n break;\n }\n }\n\n p.x = this.a * x + this.x0;\n p.y = this.a * y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var lam, phi, cCe, sCe, q, rho, ab;\n if (this.sphere) {\n var cosz = 0,\n rh, sinz = 0;\n\n rh = Math.sqrt(x * x + y * y);\n phi = rh * 0.5;\n if (phi > 1) {\n return null;\n }\n phi = 2 * Math.asin(phi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinz = Math.sin(phi);\n cosz = Math.cos(phi);\n }\n switch (this.mode) {\n case this.EQUIT:\n phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);\n x *= sinz;\n y = cosz * rh;\n break;\n case this.OBLIQ:\n phi = (Math.abs(rh) <= EPSLN) ? this.lat0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);\n x *= sinz * this.cosph0;\n y = (cosz - Math.sin(phi) * this.sinph0) * rh;\n break;\n case this.N_POLE:\n y = -y;\n phi = HALF_PI - phi;\n break;\n case this.S_POLE:\n phi -= HALF_PI;\n break;\n }\n lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);\n }\n else {\n ab = 0;\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n x /= this.dd;\n y *= this.dd;\n rho = Math.sqrt(x * x + y * y);\n if (rho < EPSLN) {\n p.x = this.long0;\n p.y = this.lat0;\n return p;\n }\n sCe = 2 * Math.asin(0.5 * rho / this.rq);\n cCe = Math.cos(sCe);\n x *= (sCe = Math.sin(sCe));\n if (this.mode === this.OBLIQ) {\n ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;\n q = this.qp * ab;\n y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;\n }\n else {\n ab = y * sCe / rho;\n q = this.qp * ab;\n y = rho * cCe;\n }\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n y = -y;\n }\n q = (x * x + y * y);\n if (!q) {\n p.x = this.long0;\n p.y = this.lat0;\n return p;\n }\n ab = 1 - q / this.qp;\n if (this.mode === this.S_POLE) {\n ab = -ab;\n }\n }\n lam = Math.atan2(x, y);\n phi = authlat(Math.asin(ab), this.apa);\n }\n\n p.x = adjust_lon(this.long0 + lam);\n p.y = phi;\n return p;\n}\n\n/* determine latitude from authalic latitude */\nvar P00 = 0.33333333333333333333;\n\nvar P01 = 0.17222222222222222222;\nvar P02 = 0.10257936507936507936;\nvar P10 = 0.06388888888888888888;\nvar P11 = 0.06640211640211640211;\nvar P20 = 0.01641501294219154443;\n\nfunction authset(es) {\n var t;\n var APA = [];\n APA[0] = es * P00;\n t = es * es;\n APA[0] += t * P01;\n APA[1] = t * P10;\n t *= es;\n APA[0] += t * P02;\n APA[1] += t * P11;\n APA[2] = t * P20;\n return APA;\n}\n\nfunction authlat(beta, APA) {\n var t = beta + beta;\n return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));\n}\n\nexport var names = [\"Lambert Azimuthal Equal Area\", \"Lambert_Azimuthal_Equal_Area\", \"laea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n S_POLE: S_POLE,\n N_POLE: N_POLE,\n EQUIT: EQUIT,\n OBLIQ: OBLIQ\n};\n","export default function(x) {\n if (Math.abs(x) > 1) {\n x = (x > 1) ? 1 : -1;\n }\n return Math.asin(x);\n}","import msfnz from '../common/msfnz';\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e3 = Math.sqrt(this.es);\n\n this.sin_po = Math.sin(this.lat1);\n this.cos_po = Math.cos(this.lat1);\n this.t1 = this.sin_po;\n this.con = this.sin_po;\n this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs1 = qsfnz(this.e3, this.sin_po);\n\n this.sin_po = Math.sin(this.lat2);\n this.cos_po = Math.cos(this.lat2);\n this.t2 = this.sin_po;\n this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs2 = qsfnz(this.e3, this.sin_po);\n\n this.sin_po = Math.sin(this.lat0);\n this.cos_po = Math.cos(this.lat0);\n this.t3 = this.sin_po;\n this.qs0 = qsfnz(this.e3, this.sin_po);\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);\n }\n else {\n this.ns0 = this.con;\n }\n this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;\n this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;\n}\n\n/* Albers Conical Equal Area forward equations--mapping lat,long to x,y\n -------------------------------------------------------------------*/\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n this.sin_phi = Math.sin(lat);\n this.cos_phi = Math.cos(lat);\n\n var qs = qsfnz(this.e3, this.sin_phi);\n var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;\n var theta = this.ns0 * adjust_lon(lon - this.long0);\n var x = rh1 * Math.sin(theta) + this.x0;\n var y = this.rh - rh1 * Math.cos(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh1, qs, con, theta, lon, lat;\n\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n if (this.ns0 >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n con = rh1 * this.ns0 / this.a;\n if (this.sphere) {\n lat = Math.asin((this.c - con * con) / (2 * this.ns0));\n }\n else {\n qs = (this.c - con * con) / this.ns0;\n lat = this.phi1z(this.e3, qs);\n }\n\n lon = adjust_lon(theta / this.ns0 + this.long0);\n p.x = lon;\n p.y = lat;\n return p;\n}\n\n/* Function to compute phi1, the latitude for the inverse of the\n Albers Conical Equal-Area projection.\n-------------------------------------------*/\nexport function phi1z(eccent, qs) {\n var sinphi, cosphi, con, com, dphi;\n var phi = asinz(0.5 * qs);\n if (eccent < EPSLN) {\n return phi;\n }\n\n var eccnts = eccent * eccent;\n for (var i = 1; i <= 25; i++) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n con = eccent * sinphi;\n com = 1 - con * con;\n dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi = phi + dphi;\n if (Math.abs(dphi) <= 1e-7) {\n return phi;\n }\n }\n return null;\n}\n\nexport var names = [\"Albers_Conic_Equal_Area\", \"Albers\", \"aea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n phi1z: phi1z\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\n/*\n reference:\n Wolfram Mathworld \"Gnomonic Projection\"\n http://mathworld.wolfram.com/GnomonicProjection.html\n Accessed: 12th November 2009\n */\nexport function init() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.sin_p14 = Math.sin(this.lat0);\n this.cos_p14 = Math.cos(this.lat0);\n // Approximation for projecting points to the horizon (infinity)\n this.infinity_dist = 1000 * this.a;\n this.rc = 1;\n}\n\n/* Gnomonic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var sinphi, cosphi; /* sin and cos value */\n var dlon; /* delta longitude value */\n var coslon; /* cos of longitude */\n var ksp; /* scale factor */\n var g;\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n dlon = adjust_lon(lon - this.long0);\n\n sinphi = Math.sin(lat);\n cosphi = Math.cos(lat);\n\n coslon = Math.cos(dlon);\n g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n ksp = 1;\n if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;\n }\n else {\n\n // Point is in the opposing hemisphere and is unprojectable\n // We still need to return a reasonable point, so we project\n // to infinity, on a bearing\n // equivalent to the northern hemisphere equivalent\n // This is a reasonable approximation for short shapes and lines that\n // straddle the horizon.\n\n x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);\n y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh; /* Rho */\n var sinc, cosc;\n var c;\n var lon, lat;\n\n /* Inverse equations\n -----------------*/\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n\n if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {\n c = Math.atan2(rh, this.rc);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n\n lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);\n lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);\n lon = adjust_lon(this.long0 + lon);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"gnom\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport qsfnz from '../common/qsfnz';\nimport msfnz from '../common/msfnz';\nimport iqsfnz from '../common/iqsfnz';\n\n/*\n reference:\n \"Cartographic Projection Procedures for the UNIX Environment-\n A User's Manual\" by Gerald I. Evenden,\n USGS Open File Report 90-284and Release 4 Interim Reports (2003)\n*/\nexport function init() {\n //no-op\n if (!this.sphere) {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n}\n\n/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n if (this.sphere) {\n x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);\n y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);\n }\n else {\n var qs = qsfnz(this.e, Math.sin(lat));\n x = this.x0 + this.a * this.k0 * dlon;\n y = this.y0 + this.a * qs * 0.5 / this.k0;\n }\n\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));\n lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\n }\n else {\n lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);\n lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"cea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, q) {\n var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));\n if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {\n if (q < 0) {\n return (-1 * HALF_PI);\n }\n else {\n return HALF_PI;\n }\n }\n //var phi = 0.5* q/(1-eccent*eccent);\n var phi = Math.asin(0.5 * q);\n var dphi;\n var sin_phi;\n var cos_phi;\n var con;\n for (var i = 0; i < 30; i++) {\n sin_phi = Math.sin(phi);\n cos_phi = Math.cos(phi);\n con = eccent * sin_phi;\n dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //console.log(\"IQSFN-CONV:Latitude failed to converge after 30 iterations\");\n return NaN;\n}\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\n\nexport function init() {\n\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n this.lat_ts = this.lat_ts || 0;\n this.title = this.title || \"Equidistant Cylindrical (Plate Carre)\";\n\n this.rc = Math.cos(this.lat_ts);\n}\n\n// forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n var dlon = adjust_lon(lon - this.long0);\n var dlat = adjust_lat(lat - this.lat0);\n p.x = this.x0 + (this.a * dlon * this.rc);\n p.y = this.y0 + (this.a * dlat);\n return p;\n}\n\n// inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n var x = p.x;\n var y = p.y;\n\n p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));\n p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n return p;\n}\n\nexport var names = [\"Equirectangular\", \"Equidistant_Cylindrical\", \"eqc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport mlfn from '../common/mlfn';\nimport {EPSLN} from '../constants/values';\n\nimport gN from '../common/gN';\nvar MAX_ITER = 20;\n\nexport function init() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas\n}\n\n/* Polyconic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y, el;\n var dlon = adjust_lon(lon - this.long0);\n el = dlon * Math.sin(lat);\n if (this.sphere) {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.a * this.lat0;\n }\n else {\n x = this.a * Math.sin(el) / Math.tan(lat);\n y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));\n }\n }\n else {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.ml0;\n }\n else {\n var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);\n x = nl * Math.sin(el);\n y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));\n }\n\n }\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n var lon, lat, x, y, i;\n var al, bl;\n var phi, dphi;\n x = p.x - this.x0;\n y = p.y - this.y0;\n\n if (this.sphere) {\n if (Math.abs(y + this.a * this.lat0) <= EPSLN) {\n lon = adjust_lon(x / this.a + this.long0);\n lat = 0;\n }\n else {\n al = this.lat0 + y / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var tanphi;\n for (i = MAX_ITER; i; --i) {\n tanphi = Math.tan(phi);\n dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);\n phi += dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));\n }\n }\n else {\n if (Math.abs(y + this.ml0) <= EPSLN) {\n lat = 0;\n lon = adjust_lon(this.long0 + x / this.a);\n }\n else {\n\n al = (this.ml0 + y) / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var cl, mln, mlnp, ma;\n var con;\n for (i = MAX_ITER; i; --i) {\n con = this.e * Math.sin(phi);\n cl = Math.sqrt(1 - con * con) * Math.tan(phi);\n mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);\n ma = mln / this.a;\n dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);\n phi -= dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n\n //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);\n cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);\n lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Polyconic\", \"poly\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {SEC_TO_RAD} from '../constants/values';\n\n/*\n reference\n Department of Land and Survey Technical Circular 1973/32\n http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf\n OSG Technical Report 4.1\n http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf\n */\n\n/**\n * iterations: Number of iterations to refine inverse transform.\n * 0 -> km accuracy\n * 1 -> m accuracy -- suitable for most mapping applications\n * 2 -> mm accuracy\n */\nexport var iterations = 1;\n\nexport function init() {\n this.A = [];\n this.A[1] = 0.6399175073;\n this.A[2] = -0.1358797613;\n this.A[3] = 0.063294409;\n this.A[4] = -0.02526853;\n this.A[5] = 0.0117879;\n this.A[6] = -0.0055161;\n this.A[7] = 0.0026906;\n this.A[8] = -0.001333;\n this.A[9] = 0.00067;\n this.A[10] = -0.00034;\n\n this.B_re = [];\n this.B_im = [];\n this.B_re[1] = 0.7557853228;\n this.B_im[1] = 0;\n this.B_re[2] = 0.249204646;\n this.B_im[2] = 0.003371507;\n this.B_re[3] = -0.001541739;\n this.B_im[3] = 0.041058560;\n this.B_re[4] = -0.10162907;\n this.B_im[4] = 0.01727609;\n this.B_re[5] = -0.26623489;\n this.B_im[5] = -0.36249218;\n this.B_re[6] = -0.6870983;\n this.B_im[6] = -1.1651967;\n\n this.C_re = [];\n this.C_im = [];\n this.C_re[1] = 1.3231270439;\n this.C_im[1] = 0;\n this.C_re[2] = -0.577245789;\n this.C_im[2] = -0.007809598;\n this.C_re[3] = 0.508307513;\n this.C_im[3] = -0.112208952;\n this.C_re[4] = -0.15094762;\n this.C_im[4] = 0.18200602;\n this.C_re[5] = 1.01418179;\n this.C_im[5] = 1.64497696;\n this.C_re[6] = 1.9660549;\n this.C_im[6] = 2.5127645;\n\n this.D = [];\n this.D[1] = 1.5627014243;\n this.D[2] = 0.5185406398;\n this.D[3] = -0.03333098;\n this.D[4] = -0.1052906;\n this.D[5] = -0.0368594;\n this.D[6] = 0.007317;\n this.D[7] = 0.01220;\n this.D[8] = 0.00394;\n this.D[9] = -0.0013;\n}\n\n/**\n New Zealand Map Grid Forward - long/lat to x/y\n long/lat in radians\n */\nexport function forward(p) {\n var n;\n var lon = p.x;\n var lat = p.y;\n\n var delta_lat = lat - this.lat0;\n var delta_lon = lon - this.long0;\n\n // 1. Calculate d_phi and d_psi ... // and d_lambda\n // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.\n var d_phi = delta_lat / SEC_TO_RAD * 1E-5;\n var d_lambda = delta_lon;\n var d_phi_n = 1; // d_phi^0\n\n var d_psi = 0;\n for (n = 1; n <= 10; n++) {\n d_phi_n = d_phi_n * d_phi;\n d_psi = d_psi + this.A[n] * d_phi_n;\n }\n\n // 2. Calculate theta\n var th_re = d_psi;\n var th_im = d_lambda;\n\n // 3. Calculate z\n var th_n_re = 1;\n var th_n_im = 0; // theta^0\n var th_n_re1;\n var th_n_im1;\n\n var z_re = 0;\n var z_im = 0;\n for (n = 1; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;\n z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;\n }\n\n // 4. Calculate easting and northing\n p.x = (z_im * this.a) + this.x0;\n p.y = (z_re * this.a) + this.y0;\n\n return p;\n}\n\n/**\n New Zealand Map Grid Inverse - x/y to long/lat\n */\nexport function inverse(p) {\n var n;\n var x = p.x;\n var y = p.y;\n\n var delta_x = x - this.x0;\n var delta_y = y - this.y0;\n\n // 1. Calculate z\n var z_re = delta_y / this.a;\n var z_im = delta_x / this.a;\n\n // 2a. Calculate theta - first approximation gives km accuracy\n var z_n_re = 1;\n var z_n_im = 0; // z^0\n var z_n_re1;\n var z_n_im1;\n\n var th_re = 0;\n var th_im = 0;\n for (n = 1; n <= 6; n++) {\n z_n_re1 = z_n_re * z_re - z_n_im * z_im;\n z_n_im1 = z_n_im * z_re + z_n_re * z_im;\n z_n_re = z_n_re1;\n z_n_im = z_n_im1;\n th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;\n th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;\n }\n\n // 2b. Iterate to refine the accuracy of the calculation\n // 0 iterations gives km accuracy\n // 1 iteration gives m accuracy -- good enough for most mapping applications\n // 2 iterations bives mm accuracy\n for (var i = 0; i < this.iterations; i++) {\n var th_n_re = th_re;\n var th_n_im = th_im;\n var th_n_re1;\n var th_n_im1;\n\n var num_re = z_re;\n var num_im = z_im;\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n th_n_re = 1;\n th_n_im = 0;\n var den_re = this.B_re[1];\n var den_im = this.B_im[1];\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n // Complex division\n var den2 = den_re * den_re + den_im * den_im;\n th_re = (num_re * den_re + num_im * den_im) / den2;\n th_im = (num_im * den_re - num_re * den_im) / den2;\n }\n\n // 3. Calculate d_phi ... // and d_lambda\n var d_psi = th_re;\n var d_lambda = th_im;\n var d_psi_n = 1; // d_psi^0\n\n var d_phi = 0;\n for (n = 1; n <= 9; n++) {\n d_psi_n = d_psi_n * d_psi;\n d_phi = d_phi + this.D[n] * d_psi_n;\n }\n\n // 4. Calculate latitude and longitude\n // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.\n var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);\n var lon = this.long0 + d_lambda;\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"New_Zealand_Map_Grid\", \"nzmg\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\n\n/* Initialize the Miller Cylindrical projection\n -------------------------------------------*/\nexport function init() {\n //no-op\n}\n\n/* Miller Cylindrical forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x = this.x0 + this.a * dlon;\n var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Miller Cylindrical inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n\n var lon = adjust_lon(this.long0 + p.x / this.a);\n var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Miller_Cylindrical\", \"mill\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport pj_enfn from '../common/pj_enfn';\nvar MAX_ITER = 20;\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n\nexport function init() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n\n\n if (!this.sphere) {\n this.en = pj_enfn(this.es);\n }\n else {\n this.n = 1;\n this.m = 0;\n this.es = 0;\n this.C_y = Math.sqrt((this.m + 1) / this.n);\n this.C_x = this.C_y / (this.m + 1);\n }\n\n}\n\n/* Sinusoidal forward equations--mapping lat,long to x,y\n -----------------------------------------------------*/\nexport function forward(p) {\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n lon = adjust_lon(lon - this.long0);\n\n if (this.sphere) {\n if (!this.m) {\n lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\n }\n else {\n var k = this.n * Math.sin(lat);\n for (var i = MAX_ITER; i; --i) {\n var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));\n lat -= V;\n if (Math.abs(V) < EPSLN) {\n break;\n }\n }\n }\n x = this.a * this.C_x * lon * (this.m + Math.cos(lat));\n y = this.a * this.C_y * lat;\n\n }\n else {\n\n var s = Math.sin(lat);\n var c = Math.cos(lat);\n y = this.a * pj_mlfn(lat, s, c, this.en);\n x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);\n }\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var lat, temp, lon, s;\n\n p.x -= this.x0;\n lon = p.x / this.a;\n p.y -= this.y0;\n lat = p.y / this.a;\n\n if (this.sphere) {\n lat /= this.C_y;\n lon = lon / (this.C_x * (this.m + Math.cos(lat)));\n if (this.m) {\n lat = asinz((this.m * lat + Math.sin(lat)) / this.n);\n }\n else if (this.n !== 1) {\n lat = asinz(Math.sin(lat) / this.n);\n }\n lon = adjust_lon(lon + this.long0);\n lat = adjust_lat(lat);\n }\n else {\n lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);\n s = Math.abs(lat);\n if (s < HALF_PI) {\n s = Math.sin(lat);\n temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));\n //temp = this.long0 + p.x / (this.a * Math.cos(lat));\n lon = adjust_lon(temp);\n }\n else if ((s - EPSLN) < HALF_PI) {\n lon = this.long0;\n }\n }\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Sinusoidal\", \"sinu\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nexport function init() {}\nimport {EPSLN} from '../constants/values';\n/* Mollweide forward equations--mapping lat,long to x,y\n ----------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var theta = lat;\n var con = Math.PI * Math.sin(lat);\n\n /* Iterate using the Newton-Raphson method to find theta\n -----------------------------------------------------*/\n while (true) {\n var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));\n theta += delta_theta;\n if (Math.abs(delta_theta) < EPSLN) {\n break;\n }\n }\n theta /= 2;\n\n /* If the latitude is 90 deg, force the x coordinate to be \"0 + false easting\"\n this is done here because of precision problems with \"cos(theta)\"\n --------------------------------------------------------------------------*/\n if (Math.PI / 2 - Math.abs(lat) < EPSLN) {\n delta_lon = 0;\n }\n var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;\n var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var theta;\n var arg;\n\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n arg = p.y / (1.4142135623731 * this.a);\n\n /* Because of division by zero problems, 'arg' can not be 1. Therefore\n a number very close to one is used instead.\n -------------------------------------------------------------------*/\n if (Math.abs(arg) > 0.999999999999) {\n arg = 0.999999999999;\n }\n theta = Math.asin(arg);\n var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));\n if (lon < (-Math.PI)) {\n lon = -Math.PI;\n }\n if (lon > Math.PI) {\n lon = Math.PI;\n }\n arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;\n if (Math.abs(arg) > 1) {\n arg = 1;\n }\n var lat = Math.asin(arg);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Mollweide\", \"moll\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport msfnz from '../common/msfnz';\nimport mlfn from '../common/mlfn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.lat2 = this.lat2 || this.lat1;\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n\n this.sinphi = Math.sin(this.lat1);\n this.cosphi = Math.cos(this.lat1);\n\n this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);\n\n if (Math.abs(this.lat1 - this.lat2) < EPSLN) {\n this.ns = this.sinphi;\n }\n else {\n this.sinphi = Math.sin(this.lat2);\n this.cosphi = Math.cos(this.lat2);\n this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);\n this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);\n }\n this.g = this.ml1 + this.ms1 / this.ns;\n this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n this.rh = this.a * (this.g - this.ml0);\n}\n\n/* Equidistant Conic forward equations--mapping lat,long to x,y\n -----------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var rh1;\n\n /* Forward equations\n -----------------*/\n if (this.sphere) {\n rh1 = this.a * (this.g - lat);\n }\n else {\n var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n rh1 = this.a * (this.g - ml);\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n var x = this.x0 + rh1 * Math.sin(theta);\n var y = this.y0 + this.rh - rh1 * Math.cos(theta);\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n var con, rh1, lat, lon;\n if (this.ns >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + theta / this.ns);\n lat = adjust_lat(this.g - rh1 / this.a);\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n var ml = this.g - rh1 / this.a;\n lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);\n lon = adjust_lon(this.long0 + theta / this.ns);\n p.x = lon;\n p.y = lat;\n return p;\n }\n\n}\n\nexport var names = [\"Equidistant_Conic\", \"eqdc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n/* Initialize the Van Der Grinten projection\n ----------------------------------------*/\nexport function init() {\n //this.R = 6370997; //Radius of earth\n this.R = this.a;\n}\n\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x, y;\n\n if (Math.abs(lat) <= EPSLN) {\n x = this.x0 + this.R * dlon;\n y = this.y0;\n }\n var theta = asinz(2 * Math.abs(lat / Math.PI));\n if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {\n x = this.x0;\n if (lat >= 0) {\n y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);\n }\n else {\n y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);\n }\n // return(OK);\n }\n var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));\n var asq = al * al;\n var sinth = Math.sin(theta);\n var costh = Math.cos(theta);\n\n var g = costh / (sinth + costh - 1);\n var gsq = g * g;\n var m = g * (2 / sinth - 1);\n var msq = m * m;\n var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);\n if (dlon < 0) {\n con = -con;\n }\n x = this.x0 + con;\n //con = Math.abs(con / (Math.PI * this.R));\n var q = asq + g;\n con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);\n if (lat >= 0) {\n //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 + con;\n }\n else {\n //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 - con;\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Van Der Grinten inverse equations--mapping x,y to lat/long\n ---------------------------------------------------------*/\nexport function inverse(p) {\n var lon, lat;\n var xx, yy, xys, c1, c2, c3;\n var a1;\n var m1;\n var con;\n var th1;\n var d;\n\n /* inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n con = Math.PI * this.R;\n xx = p.x / con;\n yy = p.y / con;\n xys = xx * xx + yy * yy;\n c1 = -Math.abs(yy) * (1 + xys);\n c2 = c1 - 2 * yy * yy + xx * xx;\n c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;\n d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;\n a1 = (c1 - c2 * c2 / 3 / c3) / c3;\n m1 = 2 * Math.sqrt(-a1 / 3);\n con = ((3 * d) / a1) / m1;\n if (Math.abs(con) > 1) {\n if (con >= 0) {\n con = 1;\n }\n else {\n con = -1;\n }\n }\n th1 = Math.acos(con) / 3;\n if (p.y >= 0) {\n lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n else {\n lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n\n if (Math.abs(xx) < EPSLN) {\n lon = this.long0;\n }\n else {\n lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Van_der_Grinten_I\", \"VanDerGrinten\", \"vandg\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport asinz from '../common/asinz';\nimport imlfn from '../common/imlfn';\n\n\n\nexport function init() {\n this.sin_p12 = Math.sin(this.lat0);\n this.cos_p12 = Math.cos(this.lat0);\n}\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var sinphi = Math.sin(p.y);\n var cosphi = Math.cos(p.y);\n var dlon = adjust_lon(lon - this.long0);\n var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;\n if (this.sphere) {\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);\n p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);\n p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);\n return p;\n }\n else {\n //default case\n cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);\n c = Math.acos(cos_c);\n kp = c ? c / Math.sin(c) : 1;\n p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);\n p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));\n return p;\n }\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);\n p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);\n p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);\n return p;\n }\n else {\n //Default case\n tanphi = sinphi / cosphi;\n Nl1 = gN(this.a, this.e, this.sin_p12);\n Nl = gN(this.a, this.e, sinphi);\n psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));\n Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));\n if (Az === 0) {\n s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {\n s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else {\n s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));\n }\n G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);\n H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);\n GH = G * H;\n Hs = H * H;\n s2 = s * s;\n s3 = s2 * s;\n s4 = s3 * s;\n s5 = s4 * s;\n c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);\n p.x = this.x0 + c * Math.sin(Az);\n p.y = this.y0 + c * Math.cos(Az);\n return p;\n }\n }\n\n\n}\n\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F, sinpsi;\n if (this.sphere) {\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (rh > (2 * HALF_PI * this.a)) {\n return;\n }\n z = rh / this.a;\n\n sinz = Math.sin(z);\n cosz = Math.cos(z);\n\n lon = this.long0;\n if (Math.abs(rh) <= EPSLN) {\n lat = this.lat0;\n }\n else {\n lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);\n con = Math.abs(this.lat0) - HALF_PI;\n if (Math.abs(con) <= EPSLN) {\n if (this.lat0 >= 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n }\n else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n }\n }\n else {\n /*con = cosz - this.sin_p12 * Math.sin(lat);\n if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {\n //no-op, just keep the lon value as is\n } else {\n var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));\n }*/\n lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = Mlp - rh;\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = rh - Mlp;\n\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n //default case\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n Az = Math.atan2(p.x, p.y);\n N1 = gN(this.a, this.e, this.sin_p12);\n cosAz = Math.cos(Az);\n tmp = this.e * this.cos_p12 * cosAz;\n A = -tmp * tmp / (1 - this.es);\n B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);\n D = rh / N1;\n Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;\n F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;\n psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);\n lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));\n sinpsi = Math.sin(psi);\n lat = Math.atan2((sinpsi - this.es * F * this.sin_p12) * Math.tan(psi), sinpsi * (1 - this.es));\n p.x = lon;\n p.y = lat;\n return p;\n }\n }\n\n}\n\nexport var names = [\"Azimuthal_Equidistant\", \"aeqd\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nexport function init() {\n //double temp; /* temporary variable */\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.sin_p14 = Math.sin(this.lat0);\n this.cos_p14 = Math.cos(this.lat0);\n}\n\n/* Orthographic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var sinphi, cosphi; /* sin and cos value */\n var dlon; /* delta longitude value */\n var coslon; /* cos of longitude */\n var ksp; /* scale factor */\n var g, x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n dlon = adjust_lon(lon - this.long0);\n\n sinphi = Math.sin(lat);\n cosphi = Math.cos(lat);\n\n coslon = Math.cos(dlon);\n g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n ksp = 1;\n if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n x = this.a * ksp * cosphi * Math.sin(dlon);\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh; /* height above ellipsoid */\n var z; /* angle */\n var sinz, cosz; /* sin of z and cos of z */\n var con;\n var lon, lat;\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n z = asinz(rh / this.a);\n\n sinz = Math.sin(z);\n cosz = Math.cos(z);\n\n lon = this.long0;\n if (Math.abs(rh) <= EPSLN) {\n lat = this.lat0;\n p.x = lon;\n p.y = lat;\n return p;\n }\n lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);\n con = Math.abs(this.lat0) - HALF_PI;\n if (Math.abs(con) <= EPSLN) {\n if (this.lat0 >= 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n }\n else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n }\n p.x = lon;\n p.y = lat;\n return p;\n }\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"ortho\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","// QSC projection rewritten from the original PROJ4\n// https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c\n\nimport {EPSLN, TWO_PI, SPI, HALF_PI, FORTPI} from '../constants/values';\n\n/* constants */\nvar FACE_ENUM = {\n FRONT: 1,\n RIGHT: 2,\n BACK: 3,\n LEFT: 4,\n TOP: 5,\n BOTTOM: 6\n};\n\nvar AREA_ENUM = {\n AREA_0: 1,\n AREA_1: 2,\n AREA_2: 3,\n AREA_3: 4\n};\n\nexport function init() {\n\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n this.lat_ts = this.lat_ts || 0;\n this.title = this.title || \"Quadrilateralized Spherical Cube\";\n\n /* Determine the cube face from the center of projection. */\n if (this.lat0 >= HALF_PI - FORTPI / 2.0) {\n this.face = FACE_ENUM.TOP;\n } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {\n this.face = FACE_ENUM.BOTTOM;\n } else if (Math.abs(this.long0) <= FORTPI) {\n this.face = FACE_ENUM.FRONT;\n } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {\n this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;\n } else {\n this.face = FACE_ENUM.BACK;\n }\n\n /* Fill in useful values for the ellipsoid <-> sphere shift\n * described in [LK12]. */\n if (this.es !== 0) {\n this.one_minus_f = 1 - (this.a - this.b) / this.a;\n this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;\n }\n}\n\n// QSC forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n var xy = {x: 0, y: 0};\n var lat, lon;\n var theta, phi;\n var t, mu;\n /* nu; */\n var area = {value: 0};\n\n // move lon according to projection's lon\n p.x -= this.long0;\n\n /* Convert the geodetic latitude to a geocentric latitude.\n * This corresponds to the shift from the ellipsoid to the sphere\n * described in [LK12]. */\n if (this.es !== 0) {//if (P->es != 0) {\n lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));\n } else {\n lat = p.y;\n }\n\n /* Convert the input lat, lon into theta, phi as used by QSC.\n * This depends on the cube face and the area on it.\n * For the top and bottom face, we can compute theta and phi\n * directly from phi, lam. For the other faces, we must use\n * unit sphere cartesian coordinates as an intermediate step. */\n lon = p.x; //lon = lp.lam;\n if (this.face === FACE_ENUM.TOP) {\n phi = HALF_PI - lat;\n if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n theta = lon - HALF_PI;\n } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_1;\n theta = (lon > 0.0 ? lon - SPI : lon + SPI);\n } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {\n area.value = AREA_ENUM.AREA_2;\n theta = lon + HALF_PI;\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta = lon;\n }\n } else if (this.face === FACE_ENUM.BOTTOM) {\n phi = HALF_PI + lat;\n if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n theta = -lon + HALF_PI;\n } else if (lon < FORTPI && lon >= -FORTPI) {\n area.value = AREA_ENUM.AREA_1;\n theta = -lon;\n } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_2;\n theta = -lon - HALF_PI;\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);\n }\n } else {\n var q, r, s;\n var sinlat, coslat;\n var sinlon, coslon;\n\n if (this.face === FACE_ENUM.RIGHT) {\n lon = qsc_shift_lon_origin(lon, +HALF_PI);\n } else if (this.face === FACE_ENUM.BACK) {\n lon = qsc_shift_lon_origin(lon, +SPI);\n } else if (this.face === FACE_ENUM.LEFT) {\n lon = qsc_shift_lon_origin(lon, -HALF_PI);\n }\n sinlat = Math.sin(lat);\n coslat = Math.cos(lat);\n sinlon = Math.sin(lon);\n coslon = Math.cos(lon);\n q = coslat * coslon;\n r = coslat * sinlon;\n s = sinlat;\n\n if (this.face === FACE_ENUM.FRONT) {\n phi = Math.acos(q);\n theta = qsc_fwd_equat_face_theta(phi, s, r, area);\n } else if (this.face === FACE_ENUM.RIGHT) {\n phi = Math.acos(r);\n theta = qsc_fwd_equat_face_theta(phi, s, -q, area);\n } else if (this.face === FACE_ENUM.BACK) {\n phi = Math.acos(-q);\n theta = qsc_fwd_equat_face_theta(phi, s, -r, area);\n } else if (this.face === FACE_ENUM.LEFT) {\n phi = Math.acos(-r);\n theta = qsc_fwd_equat_face_theta(phi, s, q, area);\n } else {\n /* Impossible */\n phi = theta = 0;\n area.value = AREA_ENUM.AREA_0;\n }\n }\n\n /* Compute mu and nu for the area of definition.\n * For mu, see Eq. (3-21) in [OL76], but note the typos:\n * compare with Eq. (3-14). For nu, see Eq. (3-38). */\n mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));\n t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));\n\n /* Apply the result to the real area. */\n if (area.value === AREA_ENUM.AREA_1) {\n mu += HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_2) {\n mu += SPI;\n } else if (area.value === AREA_ENUM.AREA_3) {\n mu += 1.5 * SPI;\n }\n\n /* Now compute x, y from mu and nu */\n xy.x = t * Math.cos(mu);\n xy.y = t * Math.sin(mu);\n xy.x = xy.x * this.a + this.x0;\n xy.y = xy.y * this.a + this.y0;\n\n p.x = xy.x;\n p.y = xy.y;\n return p;\n}\n\n// QSC inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n var lp = {lam: 0, phi: 0};\n var mu, nu, cosmu, tannu;\n var tantheta, theta, cosphi, phi;\n var t;\n var area = {value: 0};\n\n /* de-offset */\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n /* Convert the input x, y to the mu and nu angles as used by QSC.\n * This depends on the area of the cube face. */\n nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));\n mu = Math.atan2(p.y, p.x);\n if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {\n area.value = AREA_ENUM.AREA_0;\n } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {\n area.value = AREA_ENUM.AREA_1;\n mu -= HALF_PI;\n } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {\n area.value = AREA_ENUM.AREA_2;\n mu = (mu < 0.0 ? mu + SPI : mu - SPI);\n } else {\n area.value = AREA_ENUM.AREA_3;\n mu += HALF_PI;\n }\n\n /* Compute phi and theta for the area of definition.\n * The inverse projection is not described in the original paper, but some\n * good hints can be found here (as of 2011-12-14):\n * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302\n * (search for \"Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>\") */\n t = (SPI / 12) * Math.tan(mu);\n tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));\n theta = Math.atan(tantheta);\n cosmu = Math.cos(mu);\n tannu = Math.tan(nu);\n cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));\n if (cosphi < -1) {\n cosphi = -1;\n } else if (cosphi > +1) {\n cosphi = +1;\n }\n\n /* Apply the result to the real area on the cube face.\n * For the top and bottom face, we can compute phi and lam directly.\n * For the other faces, we must use unit sphere cartesian coordinates\n * as an intermediate step. */\n if (this.face === FACE_ENUM.TOP) {\n phi = Math.acos(cosphi);\n lp.phi = HALF_PI - phi;\n if (area.value === AREA_ENUM.AREA_0) {\n lp.lam = theta + HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_1) {\n lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);\n } else if (area.value === AREA_ENUM.AREA_2) {\n lp.lam = theta - HALF_PI;\n } else /* area.value == AREA_ENUM.AREA_3 */ {\n lp.lam = theta;\n }\n } else if (this.face === FACE_ENUM.BOTTOM) {\n phi = Math.acos(cosphi);\n lp.phi = phi - HALF_PI;\n if (area.value === AREA_ENUM.AREA_0) {\n lp.lam = -theta + HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_1) {\n lp.lam = -theta;\n } else if (area.value === AREA_ENUM.AREA_2) {\n lp.lam = -theta - HALF_PI;\n } else /* area.value == AREA_ENUM.AREA_3 */ {\n lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);\n }\n } else {\n /* Compute phi and lam via cartesian unit sphere coordinates. */\n var q, r, s;\n q = cosphi;\n t = q * q;\n if (t >= 1) {\n s = 0;\n } else {\n s = Math.sqrt(1 - t) * Math.sin(theta);\n }\n t += s * s;\n if (t >= 1) {\n r = 0;\n } else {\n r = Math.sqrt(1 - t);\n }\n /* Rotate q,r,s into the correct area. */\n if (area.value === AREA_ENUM.AREA_1) {\n t = r;\n r = -s;\n s = t;\n } else if (area.value === AREA_ENUM.AREA_2) {\n r = -r;\n s = -s;\n } else if (area.value === AREA_ENUM.AREA_3) {\n t = r;\n r = s;\n s = -t;\n }\n /* Rotate q,r,s into the correct cube face. */\n if (this.face === FACE_ENUM.RIGHT) {\n t = q;\n q = -r;\n r = t;\n } else if (this.face === FACE_ENUM.BACK) {\n q = -q;\n r = -r;\n } else if (this.face === FACE_ENUM.LEFT) {\n t = q;\n q = r;\n r = -t;\n }\n /* Now compute phi and lam from the unit sphere coordinates. */\n lp.phi = Math.acos(-s) - HALF_PI;\n lp.lam = Math.atan2(r, q);\n if (this.face === FACE_ENUM.RIGHT) {\n lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);\n } else if (this.face === FACE_ENUM.BACK) {\n lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);\n } else if (this.face === FACE_ENUM.LEFT) {\n lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);\n }\n }\n\n /* Apply the shift from the sphere to the ellipsoid as described\n * in [LK12]. */\n if (this.es !== 0) {\n var invert_sign;\n var tanphi, xa;\n invert_sign = (lp.phi < 0 ? 1 : 0);\n tanphi = Math.tan(lp.phi);\n xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);\n lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));\n if (invert_sign) {\n lp.phi = -lp.phi;\n }\n }\n\n lp.lam += this.long0;\n p.x = lp.lam;\n p.y = lp.phi;\n return p;\n}\n\n/* Helper function for forward projection: compute the theta angle\n * and determine the area number. */\nfunction qsc_fwd_equat_face_theta(phi, y, x, area) {\n var theta;\n if (phi < EPSLN) {\n area.value = AREA_ENUM.AREA_0;\n theta = 0.0;\n } else {\n theta = Math.atan2(y, x);\n if (Math.abs(theta) <= FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_1;\n theta -= HALF_PI;\n } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_2;\n theta = (theta >= 0.0 ? theta - SPI : theta + SPI);\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta += HALF_PI;\n }\n }\n return theta;\n}\n\n/* Helper function: shift the longitude. */\nfunction qsc_shift_lon_origin(lon, offset) {\n var slon = lon + offset;\n if (slon < -SPI) {\n slon += TWO_PI;\n } else if (slon > +SPI) {\n slon -= TWO_PI;\n }\n return slon;\n}\n\nexport var names = [\"Quadrilateralized Spherical Cube\", \"Quadrilateralized_Spherical_Cube\", \"qsc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n\n","// Robinson projection\n// Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c\n// Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039\n\nimport {HALF_PI, D2R, R2D, EPSLN} from '../constants/values';\nimport adjust_lon from '../common/adjust_lon';\n\nvar COEFS_X = [\n [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],\n [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],\n [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],\n [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],\n [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],\n [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],\n [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],\n [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],\n [0.9216, -0.00467746, -0.00010457, 4.81243e-06],\n [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],\n [0.8679, -0.00609363, -0.000113898, 3.32484e-06],\n [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],\n [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],\n [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],\n [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],\n [0.6732, -0.00986209, -0.000199569, 1.91974e-05],\n [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],\n [0.5722, -0.00906601, 0.000182, 6.24051e-06],\n [0.5322, -0.00677797, 0.000275608, 6.24051e-06]\n];\n\nvar COEFS_Y = [\n [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],\n [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],\n [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],\n [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],\n [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],\n [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],\n [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],\n [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],\n [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],\n [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],\n [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],\n [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],\n [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],\n [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],\n [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],\n [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],\n [0.9394, 0.00840947, -0.000192841, -4.2106e-06],\n [0.9761, 0.00616527, -0.000256, -4.2106e-06],\n [1.0000, 0.00328947, -0.000319159, -4.2106e-06]\n];\n\nvar FXC = 0.8487;\nvar FYC = 1.3523;\nvar C1 = R2D/5; // rad to 5-degree interval\nvar RC1 = 1/C1;\nvar NODES = 18;\n\nvar poly3_val = function(coefs, x) {\n return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));\n};\n\nvar poly3_der = function(coefs, x) {\n return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);\n};\n\nfunction newton_rapshon(f_df, start, max_err, iters) {\n var x = start;\n for (; iters; --iters) {\n var upd = f_df(x);\n x -= upd;\n if (Math.abs(upd) < max_err) {\n break;\n }\n }\n return x;\n}\n\nexport function init() {\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.long0 = this.long0 || 0;\n this.es = 0;\n this.title = this.title || \"Robinson\";\n}\n\nexport function forward(ll) {\n var lon = adjust_lon(ll.x - this.long0);\n\n var dphi = Math.abs(ll.y);\n var i = Math.floor(dphi * C1);\n if (i < 0) {\n i = 0;\n } else if (i >= NODES) {\n i = NODES - 1;\n }\n dphi = R2D * (dphi - RC1 * i);\n var xy = {\n x: poly3_val(COEFS_X[i], dphi) * lon,\n y: poly3_val(COEFS_Y[i], dphi)\n };\n if (ll.y < 0) {\n xy.y = -xy.y;\n }\n\n xy.x = xy.x * this.a * FXC + this.x0;\n xy.y = xy.y * this.a * FYC + this.y0;\n return xy;\n}\n\nexport function inverse(xy) {\n var ll = {\n x: (xy.x - this.x0) / (this.a * FXC),\n y: Math.abs(xy.y - this.y0) / (this.a * FYC)\n };\n\n if (ll.y >= 1) { // pathologic case\n ll.x /= COEFS_X[NODES][0];\n ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;\n } else {\n // find table interval\n var i = Math.floor(ll.y * NODES);\n if (i < 0) {\n i = 0;\n } else if (i >= NODES) {\n i = NODES - 1;\n }\n for (;;) {\n if (COEFS_Y[i][0] > ll.y) {\n --i;\n } else if (COEFS_Y[i+1][0] <= ll.y) {\n ++i;\n } else {\n break;\n }\n }\n // linear interpolation in 5 degree interval\n var coefs = COEFS_Y[i];\n var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]);\n // find t so that poly3_val(coefs, t) = ll.y\n t = newton_rapshon(function(x) {\n return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);\n }, t, EPSLN, 100);\n\n ll.x /= poly3_val(COEFS_X[i], t);\n ll.y = (5 * i + t) * D2R;\n if (xy.y < 0) {\n ll.y = -ll.y;\n }\n }\n\n ll.x = adjust_lon(ll.x + this.long0);\n return ll;\n}\n\nexport var names = [\"Robinson\", \"robin\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {\n geodeticToGeocentric,\n geocentricToGeodetic\n} from '../datumUtils';\n\nexport function init() {\n this.name = 'geocent';\n\n}\n\nexport function forward(p) {\n var point = geodeticToGeocentric(p, this.es, this.a);\n return point;\n}\n\nexport function inverse(p) {\n var point = geocentricToGeodetic(p, this.es, this.a, this.b);\n return point;\n}\n\nexport var names = [\"Geocentric\", 'geocentric', \"geocent\", \"Geocent\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};","\nvar mode = {\n N_POLE: 0,\n S_POLE: 1,\n EQUIT: 2,\n OBLIQ: 3\n};\n\nimport { D2R, HALF_PI, EPSLN } from \"../constants/values\";\nimport hypot from \"../common/hypot\";\n\nvar params = {\n h: { def: 100000, num: true }, // default is Karman line, no default in PROJ.7\n azi: { def: 0, num: true, degrees: true }, // default is North\n tilt: { def: 0, num: true, degrees: true }, // default is Nadir\n long0: { def: 0, num: true }, // default is Greenwich, conversion to rad is automatic\n lat0: { def: 0, num: true } // default is Equator, conversion to rad is automatic\n};\n\nexport function init() {\n Object.keys(params).forEach(function (p) {\n if (typeof this[p] === \"undefined\") {\n this[p] = params[p].def;\n } else if (params[p].num && isNaN(this[p])) {\n throw new Error(\"Invalid parameter value, must be numeric \" + p + \" = \" + this[p]);\n } else if (params[p].num) {\n this[p] = parseFloat(this[p]);\n }\n if (params[p].degrees) {\n this[p] = this[p] * D2R;\n }\n }.bind(this));\n\n if (Math.abs((Math.abs(this.lat0) - HALF_PI)) < EPSLN) {\n this.mode = this.lat0 < 0 ? mode.S_POLE : mode.N_POLE;\n } else if (Math.abs(this.lat0) < EPSLN) {\n this.mode = mode.EQUIT;\n } else {\n this.mode = mode.OBLIQ;\n this.sinph0 = Math.sin(this.lat0);\n this.cosph0 = Math.cos(this.lat0);\n }\n\n this.pn1 = this.h / this.a; // Normalize relative to the Earth's radius\n\n if (this.pn1 <= 0 || this.pn1 > 1e10) {\n throw new Error(\"Invalid height\");\n }\n \n this.p = 1 + this.pn1;\n this.rp = 1 / this.p;\n this.h1 = 1 / this.pn1;\n this.pfact = (this.p + 1) * this.h1;\n this.es = 0;\n\n var omega = this.tilt;\n var gamma = this.azi;\n this.cg = Math.cos(gamma);\n this.sg = Math.sin(gamma);\n this.cw = Math.cos(omega);\n this.sw = Math.sin(omega);\n}\n\nexport function forward(p) {\n p.x -= this.long0;\n var sinphi = Math.sin(p.y);\n var cosphi = Math.cos(p.y);\n var coslam = Math.cos(p.x);\n var x, y;\n switch (this.mode) {\n case mode.OBLIQ:\n y = this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n break;\n case mode.EQUIT:\n y = cosphi * coslam;\n break;\n case mode.S_POLE:\n y = -sinphi;\n break;\n case mode.N_POLE:\n y = sinphi;\n break;\n }\n y = this.pn1 / (this.p - y);\n x = y * cosphi * Math.sin(p.x);\n\n switch (this.mode) {\n case mode.OBLIQ:\n y *= this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n break;\n case mode.EQUIT:\n y *= sinphi;\n break;\n case mode.N_POLE:\n y *= -(cosphi * coslam);\n break;\n case mode.S_POLE:\n y *= cosphi * coslam;\n break;\n }\n\n // Tilt \n var yt, ba;\n yt = y * this.cg + x * this.sg;\n ba = 1 / (yt * this.sw * this.h1 + this.cw);\n x = (x * this.cg - y * this.sg) * this.cw * ba;\n y = yt * ba;\n\n p.x = x * this.a;\n p.y = y * this.a;\n return p;\n}\n\nexport function inverse(p) {\n p.x /= this.a;\n p.y /= this.a;\n var r = { x: p.x, y: p.y };\n\n // Un-Tilt\n var bm, bq, yt;\n yt = 1 / (this.pn1 - p.y * this.sw);\n bm = this.pn1 * p.x * yt;\n bq = this.pn1 * p.y * this.cw * yt;\n p.x = bm * this.cg + bq * this.sg;\n p.y = bq * this.cg - bm * this.sg;\n\n var rh = hypot(p.x, p.y);\n if (Math.abs(rh) < EPSLN) {\n r.x = 0;\n r.y = p.y;\n } else {\n var cosz, sinz;\n sinz = 1 - rh * rh * this.pfact;\n sinz = (this.p - Math.sqrt(sinz)) / (this.pn1 / rh + rh / this.pn1);\n cosz = Math.sqrt(1 - sinz * sinz);\n switch (this.mode) {\n case mode.OBLIQ:\n r.y = Math.asin(cosz * this.sinph0 + p.y * sinz * this.cosph0 / rh);\n p.y = (cosz - this.sinph0 * Math.sin(r.y)) * rh;\n p.x *= sinz * this.cosph0;\n break;\n case mode.EQUIT:\n r.y = Math.asin(p.y * sinz / rh);\n p.y = cosz * rh;\n p.x *= sinz;\n break;\n case mode.N_POLE:\n r.y = Math.asin(cosz);\n p.y = -p.y;\n break;\n case mode.S_POLE:\n r.y = -Math.asin(cosz);\n break;\n }\n r.x = Math.atan2(p.x, p.y);\n }\n\n p.x = r.x + this.long0;\n p.y = r.y;\n return p;\n}\n\nexport var names = [\"Tilted_Perspective\", \"tpers\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import hypot from '../common/hypot';\n\nexport function init() {\n this.flip_axis = (this.sweep === 'x' ? 1 : 0);\n this.h = Number(this.h);\n this.radius_g_1 = this.h / this.a;\n\n if (this.radius_g_1 <= 0 || this.radius_g_1 > 1e10) {\n throw new Error();\n }\n\n this.radius_g = 1.0 + this.radius_g_1;\n this.C = this.radius_g * this.radius_g - 1.0;\n\n if (this.es !== 0.0) {\n var one_es = 1.0 - this.es;\n var rone_es = 1 / one_es;\n\n this.radius_p = Math.sqrt(one_es);\n this.radius_p2 = one_es;\n this.radius_p_inv2 = rone_es;\n\n this.shape = 'ellipse'; // Use as a condition in the forward and inverse functions.\n } else {\n this.radius_p = 1.0;\n this.radius_p2 = 1.0;\n this.radius_p_inv2 = 1.0;\n\n this.shape = 'sphere'; // Use as a condition in the forward and inverse functions.\n }\n\n if (!this.title) {\n this.title = \"Geostationary Satellite View\";\n }\n}\n\nfunction forward(p) {\n var lon = p.x;\n var lat = p.y;\n var tmp, v_x, v_y, v_z;\n lon = lon - this.long0;\n\n if (this.shape === 'ellipse') {\n lat = Math.atan(this.radius_p2 * Math.tan(lat));\n var r = this.radius_p / hypot(this.radius_p * Math.cos(lat), Math.sin(lat));\n\n v_x = r * Math.cos(lon) * Math.cos(lat);\n v_y = r * Math.sin(lon) * Math.cos(lat);\n v_z = r * Math.sin(lat);\n\n if (((this.radius_g - v_x) * v_x - v_y * v_y - v_z * v_z * this.radius_p_inv2) < 0.0) {\n p.x = Number.NaN;\n p.y = Number.NaN;\n return p;\n }\n\n tmp = this.radius_g - v_x;\n if (this.flip_axis) {\n p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp));\n p.y = this.radius_g_1 * Math.atan(v_z / tmp);\n } else {\n p.x = this.radius_g_1 * Math.atan(v_y / tmp);\n p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp));\n }\n } else if (this.shape === 'sphere') {\n tmp = Math.cos(lat);\n v_x = Math.cos(lon) * tmp;\n v_y = Math.sin(lon) * tmp;\n v_z = Math.sin(lat);\n tmp = this.radius_g - v_x;\n\n if (this.flip_axis) {\n p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp));\n p.y = this.radius_g_1 * Math.atan(v_z / tmp);\n } else {\n p.x = this.radius_g_1 * Math.atan(v_y / tmp);\n p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp));\n }\n }\n p.x = p.x * this.a;\n p.y = p.y * this.a;\n return p;\n}\n\nfunction inverse(p) {\n var v_x = -1.0;\n var v_y = 0.0;\n var v_z = 0.0;\n var a, b, det, k;\n\n p.x = p.x / this.a;\n p.y = p.y / this.a;\n\n if (this.shape === 'ellipse') {\n if (this.flip_axis) {\n v_z = Math.tan(p.y / this.radius_g_1);\n v_y = Math.tan(p.x / this.radius_g_1) * hypot(1.0, v_z);\n } else {\n v_y = Math.tan(p.x / this.radius_g_1);\n v_z = Math.tan(p.y / this.radius_g_1) * hypot(1.0, v_y);\n }\n\n var v_zp = v_z / this.radius_p;\n a = v_y * v_y + v_zp * v_zp + v_x * v_x;\n b = 2 * this.radius_g * v_x;\n det = (b * b) - 4 * a * this.C;\n\n if (det < 0.0) {\n p.x = Number.NaN;\n p.y = Number.NaN;\n return p;\n }\n\n k = (-b - Math.sqrt(det)) / (2.0 * a);\n v_x = this.radius_g + k * v_x;\n v_y *= k;\n v_z *= k;\n\n p.x = Math.atan2(v_y, v_x);\n p.y = Math.atan(v_z * Math.cos(p.x) / v_x);\n p.y = Math.atan(this.radius_p_inv2 * Math.tan(p.y));\n } else if (this.shape === 'sphere') {\n if (this.flip_axis) {\n v_z = Math.tan(p.y / this.radius_g_1);\n v_y = Math.tan(p.x / this.radius_g_1) * Math.sqrt(1.0 + v_z * v_z);\n } else {\n v_y = Math.tan(p.x / this.radius_g_1);\n v_z = Math.tan(p.y / this.radius_g_1) * Math.sqrt(1.0 + v_y * v_y);\n }\n\n a = v_y * v_y + v_z * v_z + v_x * v_x;\n b = 2 * this.radius_g * v_x;\n det = (b * b) - 4 * a * this.C;\n if (det < 0.0) {\n p.x = Number.NaN;\n p.y = Number.NaN;\n return p;\n }\n\n k = (-b - Math.sqrt(det)) / (2.0 * a);\n v_x = this.radius_g + k * v_x;\n v_y *= k;\n v_z *= k;\n\n p.x = Math.atan2(v_y, v_x);\n p.y = Math.atan(v_z * Math.cos(p.x) / v_x);\n }\n p.x = p.x + this.long0;\n return p;\n}\n\nexport var names = [\"Geostationary Satellite View\", \"Geostationary_Satellite\", \"geos\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n};\n\n","/**\n * Copyright 2018 Bernie Jenny, Monash University, Melbourne, Australia.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Equal Earth is a projection inspired by the Robinson projection, but unlike\n * the Robinson projection retains the relative size of areas. The projection\n * was designed in 2018 by Bojan Savric, Tom Patterson and Bernhard Jenny.\n *\n * Publication:\n * Bojan Savric, Tom Patterson & Bernhard Jenny (2018). The Equal Earth map\n * projection, International Journal of Geographical Information Science,\n * DOI: 10.1080/13658816.2018.1504949\n *\n * Code released August 2018\n * Ported to JavaScript and adapted for mapshaper-proj by Matthew Bloch August 2018\n * Modified for proj4js by Andreas Hocevar by Andreas Hocevar March 2024\n */\n\nimport adjust_lon from \"../common/adjust_lon\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = Math.sqrt(3) / 2.0;\n\nexport function init() {\n this.es = 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n}\n\nexport function forward(p) {\n var lam = adjust_lon(p.x - this.long0);\n var phi = p.y;\n var paramLat = Math.asin(M * Math.sin(phi)),\n paramLatSq = paramLat * paramLat,\n paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n p.x = lam * Math.cos(paramLat) /\n (M * (A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq)));\n p.y = paramLat * (A1 + A2 * paramLatSq + paramLatPow6 * (A3 + A4 * paramLatSq));\n\n p.x = this.a * p.x + this.x0;\n p.y = this.a * p.y + this.y0;\n return p;\n}\n\nexport function inverse(p) {\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n var EPS = 1e-9,\n NITER = 12,\n paramLat = p.y,\n paramLatSq, paramLatPow6, fy, fpy, dlat, i;\n\n for (i = 0; i < NITER; ++i) {\n paramLatSq = paramLat * paramLat;\n paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n fy = paramLat * (A1 + A2 * paramLatSq + paramLatPow6 * (A3 + A4 * paramLatSq)) - p.y;\n fpy = A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq);\n paramLat -= dlat = fy / fpy;\n if (Math.abs(dlat) < EPS) {\n break;\n }\n }\n paramLatSq = paramLat * paramLat;\n paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n p.x = M * p.x * (A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq)) /\n Math.cos(paramLat);\n p.y = Math.asin(Math.sin(paramLat) / M);\n\n p.x = adjust_lon(p.x + this.long0);\n return p;\n}\n\nexport var names = [\"eqearth\", \"Equal Earth\", \"Equal_Earth\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};","import adjust_lat from \"../common/adjust_lat\";\nimport adjust_lon from \"../common/adjust_lon\";\nimport hypot from \"../common/hypot\";\nimport pj_enfn from \"../common/pj_enfn\";\nimport pj_inv_mlfn from \"../common/pj_inv_mlfn\";\nimport pj_mlfn from \"../common/pj_mlfn\";\nimport { HALF_PI } from \"../constants/values\";\n\nvar EPS10 = 1e-10;\n\nexport function init() {\n var c;\n\n this.phi1 = this.lat1;\n if (Math.abs(this.phi1) < EPS10) {\n throw new Error();\n }\n if (this.es) {\n this.en = pj_enfn(this.es);\n this.m1 = pj_mlfn(this.phi1, this.am1 = Math.sin(this.phi1),\n c = Math.cos(this.phi1), this.en);\n this.am1 = c / (Math.sqrt(1 - this.es * this.am1 * this.am1) * this.am1);\n this.inverse = e_inv;\n this.forward = e_fwd;\n } else {\n if (Math.abs(this.phi1) + EPS10 >= HALF_PI) {\n this.cphi1 = 0;\n }\n else {\n this.cphi1 = 1 / Math.tan(this.phi1);\n }\n this.inverse = s_inv;\n this.forward = s_fwd;\n }\n}\n\nfunction e_fwd(p) {\n var lam = adjust_lon(p.x - (this.long0 || 0));\n var phi = p.y;\n var rh, E, c;\n rh = this.am1 + this.m1 - pj_mlfn(phi, E = Math.sin(phi), c = Math.cos(phi), this.en);\n E = c * lam / (rh * Math.sqrt(1 - this.es * E * E));\n p.x = rh * Math.sin(E);\n p.y = this.am1 - rh * Math.cos(E);\n\n p.x = this.a * p.x + (this.x0 || 0);\n p.y = this.a * p.y + (this.y0 || 0);\n return p;\n}\n\nfunction e_inv(p) {\n p.x = (p.x - (this.x0 || 0)) / this.a;\n p.y = (p.y - (this.y0 || 0)) / this.a;\n\n var s, rh, lam, phi;\n rh = hypot(p.x, p.y = this.am1 - p.y);\n phi = pj_inv_mlfn(this.am1 + this.m1 - rh, this.es, this.en);\n if ((s = Math.abs(phi)) < HALF_PI) {\n s = Math.sin(phi);\n lam = rh * Math.atan2(p.x, p.y) * Math.sqrt(1 - this.es * s * s) / Math.cos(phi);\n } else if (Math.abs(s - HALF_PI) <= EPS10) {\n lam = 0;\n }\n else {\n throw new Error();\n }\n p.x = adjust_lon(lam + (this.long0 || 0));\n p.y = adjust_lat(phi);\n return p;\n}\n\nfunction s_fwd(p) {\n var lam = adjust_lon(p.x - (this.long0 || 0));\n var phi = p.y;\n var E, rh;\n rh = this.cphi1 + this.phi1 - phi;\n if (Math.abs(rh) > EPS10) {\n p.x = rh * Math.sin(E = lam * Math.cos(phi) / rh);\n p.y = this.cphi1 - rh * Math.cos(E);\n } else {\n p.x = p.y = 0;\n }\n\n p.x = this.a * p.x + (this.x0 || 0);\n p.y = this.a * p.y + (this.y0 || 0);\n return p;\n}\n\nfunction s_inv(p) {\n p.x = (p.x - (this.x0 || 0)) / this.a;\n p.y = (p.y - (this.y0 || 0)) / this.a;\n\n var lam, phi;\n var rh = hypot(p.x, p.y = this.cphi1 - p.y);\n phi = this.cphi1 + this.phi1 - rh;\n if (Math.abs(phi) > HALF_PI) {\n throw new Error();\n }\n if (Math.abs(Math.abs(phi) - HALF_PI) <= EPS10) {\n lam = 0;\n } else {\n lam = rh * Math.atan2(p.x, p.y) / Math.cos(phi);\n }\n p.x = adjust_lon(lam + (this.long0 || 0));\n p.y = adjust_lat(phi);\n return p;\n}\n\nexport var names = [\"bonne\", \"Bonne (Werner lat_1=90)\"];\nexport default {\n init: init,\n names: names\n};","import tmerc from './lib/projections/tmerc';\nimport etmerc from './lib/projections/etmerc';\nimport utm from './lib/projections/utm';\nimport sterea from './lib/projections/sterea';\nimport stere from './lib/projections/stere';\nimport somerc from './lib/projections/somerc';\nimport omerc from './lib/projections/omerc';\nimport lcc from './lib/projections/lcc';\nimport krovak from './lib/projections/krovak';\nimport cass from './lib/projections/cass';\nimport laea from './lib/projections/laea';\nimport aea from './lib/projections/aea';\nimport gnom from './lib/projections/gnom';\nimport cea from './lib/projections/cea';\nimport eqc from './lib/projections/eqc';\nimport poly from './lib/projections/poly';\nimport nzmg from './lib/projections/nzmg';\nimport mill from './lib/projections/mill';\nimport sinu from './lib/projections/sinu';\nimport moll from './lib/projections/moll';\nimport eqdc from './lib/projections/eqdc';\nimport vandg from './lib/projections/vandg';\nimport aeqd from './lib/projections/aeqd';\nimport ortho from './lib/projections/ortho';\nimport qsc from './lib/projections/qsc';\nimport robin from './lib/projections/robin';\nimport geocent from './lib/projections/geocent';\nimport tpers from './lib/projections/tpers';\nimport geos from './lib/projections/geos';\nimport eqearth from './lib/projections/eqearth';\nimport bonne from './lib/projections/bonne';\nexport default function(proj4){\n proj4.Proj.projections.add(tmerc);\n proj4.Proj.projections.add(etmerc);\n proj4.Proj.projections.add(utm);\n proj4.Proj.projections.add(sterea);\n proj4.Proj.projections.add(stere);\n proj4.Proj.projections.add(somerc);\n proj4.Proj.projections.add(omerc);\n proj4.Proj.projections.add(lcc);\n proj4.Proj.projections.add(krovak);\n proj4.Proj.projections.add(cass);\n proj4.Proj.projections.add(laea);\n proj4.Proj.projections.add(aea);\n proj4.Proj.projections.add(gnom);\n proj4.Proj.projections.add(cea);\n proj4.Proj.projections.add(eqc);\n proj4.Proj.projections.add(poly);\n proj4.Proj.projections.add(nzmg);\n proj4.Proj.projections.add(mill);\n proj4.Proj.projections.add(sinu);\n proj4.Proj.projections.add(moll);\n proj4.Proj.projections.add(eqdc);\n proj4.Proj.projections.add(vandg);\n proj4.Proj.projections.add(aeqd);\n proj4.Proj.projections.add(ortho);\n proj4.Proj.projections.add(qsc);\n proj4.Proj.projections.add(robin);\n proj4.Proj.projections.add(geocent);\n proj4.Proj.projections.add(tpers);\n proj4.Proj.projections.add(geos);\n proj4.Proj.projections.add(eqearth);\n proj4.Proj.projections.add(bonne);\n}","import proj4 from './core';\nimport Proj from \"./Proj\";\nimport Point from \"./Point\";\nimport common from \"./common/toPoint\";\nimport defs from \"./defs\";\nimport nadgrid from \"./nadgrid\";\nimport transform from \"./transform\";\nimport mgrs from \"mgrs\";\nimport includedProjections from \"../projs\";\n\nproj4.defaultDatum = 'WGS84'; //default datum\nproj4.Proj = Proj;\nproj4.WGS84 = new proj4.Proj('WGS84');\nproj4.Point = Point;\nproj4.toPoint = common;\nproj4.defs = defs;\nproj4.nadgrid = nadgrid;\nproj4.transform = transform;\nproj4.mgrs = mgrs;\nproj4.version = '__VERSION__';\nincludedProjections(proj4);\nexport default proj4;\n","const __WEBPACK_NAMESPACE_OBJECT__ = ol.proj.transforms;","const __WEBPACK_NAMESPACE_OBJECT__ = ol.proj.Projection;","import {\n addCoordinateTransforms,\n addProjection,\n addEquivalentProjections,\n get\n} from \"ol/proj\";\nimport { get as getTransform } from \"ol/proj/transforms\";\nimport Projection from \"ol/proj/Projection\";\n\nimport Logger from \"../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"CRS\");\n\nexport function register (proj4) {\n const projCodes = Object.keys(proj4.defs);\n logger.trace(\"proj. codes :\", projCodes);\n\n const len = projCodes.length;\n let i, j;\n for (i = 0; i < len; ++i) {\n const code = projCodes[i];\n if (!get(code)) {\n const def = proj4.defs(code);\n addProjection(new Projection({\n code : code,\n axisOrientation : def.axis,\n metersPerUnit : def.to_meter,\n units : def.units\n }));\n }\n }\n for (i = 0; i < len; ++i) {\n const code1 = projCodes[i];\n const proj1 = get(code1);\n\n for (j = 0; j < len; ++j) {\n const code2 = projCodes[j];\n const proj2 = get(code2);\n\n if (!getTransform(code1, code2)) {\n if (proj4.defs[code1] === proj4.defs[code2]) {\n addEquivalentProjections([proj1, proj2]);\n } else {\n const transform = proj4(code1, code2);\n addCoordinateTransforms(proj1, proj2, transform.forward, transform.inverse);\n }\n }\n }\n }\n}\n","/**\n * @module Register\n * @alias module:~utils/Register\n * @description\n * Register definition for IGNF, and EPSG CRS.\n *\n * @example\n * Gp.Register.IGNF.AMST63\n * // return : \"+title=Amsterdam 1963 +proj=geocent +towgs84=109.753,-528.133,-362.244,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\"\n * Gp.Register.get(\"IGNF:AMST63\")\n * // same as Gp.Register.IGNF.AMST63\n */\nvar Register = {\n\n /**\n * instance already loaded into proj4\n */\n isLoaded : false,\n\n /**\n * get the definition for a code\n *\n * @function get\n * @param {String} name - ie. EPSG:2154 (Lambert)\n * @returns {Object} definition\n * @example\n * Register.get(\"EPSG:2154\");\n * // \"+title=RGF93 / Lambert-93 +proj=lcc +lat_1=49 ...\"\n */\n get : function (name) {\n if (name === \"\" || name === null || typeof name === \"undefined\") {\n return;\n }\n\n var s = name.split(\":\");\n if (s.length !== 2) {\n return;\n }\n\n var _register = s[0];\n var _code = s[1];\n\n if (!this.hasOwnProperty(_register)) {\n return;\n }\n\n if (!this[_register].hasOwnProperty(_code)) {\n return;\n }\n\n return this[_register][_code];\n },\n\n /**\n * does projection code exist ?\n *\n * @function exist\n * @param {String} name - ie. EPSG:2154 (Lambert)\n * @returns {Boolean} true/false\n * @example\n * Register.exist(\"EPSG:2154\"); // true\n */\n exist : function (name) {\n if (name === \"\" || name === null || typeof name === \"undefined\") {\n return false;\n }\n\n var s = name.split(\":\");\n if (s.length !== 2) {\n return false;\n }\n\n var _register = s[0];\n var _code = s[1];\n\n if (!this.hasOwnProperty(_register)) {\n return false;\n }\n\n if (!this[_register].hasOwnProperty(_code)) {\n return false;\n }\n\n return true;\n },\n\n /**\n * load all defs to proj4\n * @function load\n * @param {Object} Proj4 - proj4 instance\n */\n load : function (Proj4) {\n // un flag pour savoir si le chargement est déjà realisé\n // (car ceci peut être couteux !)\n if (!this.isLoaded) {\n var registers = [\n \"IGNF\", // exception lors du register IGNF ?\n \"EPSG\",\n \"CRS\"\n ];\n for (var i = 0; i < registers.length; i++) {\n var _register = registers[i];\n var codes = this[_register];\n for (var _code in codes) {\n if (codes.hasOwnProperty(_code)) {\n var name = _register + \":\" + _code;\n Proj4.defs(name, this.get(name));\n // on enlève la dependance à OpenLayers...\n // la fonction register est donc à appeller afin d'enregistrer\n // les definitions dans OpenLayers :\n // import { get } from \"ol/proj\";\n // import proj4 from \"proj4\";\n // import { register } from \"ol/proj/proj4\";\n // Register.load();\n // // Make projections defined in proj4 (with proj4.defs()) available in OpenLayers.\n // // see ol/proj/proj4.register (https://openlayers.org/en/latest/apidoc/module-ol_proj_proj4.html)\n // register(proj4);\n // console.log(get(\"CRS:84\").getCode()); // \"CRS:84\"\n }\n }\n }\n /** ts-syntax */ (this.isLoaded) = true;\n }\n },\n\n /**\n * load defs by default to proj4\n *\n * include into proj4 :\n * - WGS84\n * - ['EPSG:4326']\n * - ['EPSG:3785'], ['EPSG:3857'], GOOGLE, ['EPSG:900913'], ['EPSG:102113']\n * +\n * - [\"EPSG:2154\"], [\"EPSG:27571\"], [\"EPSG:27572\"], [\"EPSG:27573\"], [\"EPSG:2757\"],\n * - [\"CRS:84\"],\n * - [\"IGNF:LAMB93\"],\n * - [\"IGNF:LAMBE\"], [\"IGNF:LAMB1\"], [\"IGNF:LAMB2\"], [\"IGNF:LAMB3\"], [\"IGNF:LAMB4\"],\n * - [\"IGNF:RGF93G\"],\n * - [\"IGNF:WGS84G\"]\n *\n * @function loadByDefault\n * @param {Object} Proj4 - proj4 instance\n */\n loadByDefault : function (Proj4) {\n // la liste de projections par defaut...\n var registers = {\n EPSG : {\n 2154 : Register[\"EPSG\"][\"2154\"],\n 27571 : Register[\"EPSG\"][\"27571\"],\n 27572 : Register[\"EPSG\"][\"27572\"],\n 27573 : Register[\"EPSG\"][\"27573\"],\n 27574 : Register[\"EPSG\"][\"27574\"]\n },\n CRS : {\n 84 : Register[\"CRS\"][\"84\"]\n },\n IGNF : {\n LAMB93 : Register[\"IGNF\"][\"LAMB93\"],\n LAMBE : Register[\"IGNF\"][\"LAMBE\"],\n LAMB1 : Register[\"IGNF\"][\"LAMB1\"],\n LAMB2 : Register[\"IGNF\"][\"LAMB2\"],\n LAMB3 : Register[\"IGNF\"][\"LAMB3\"],\n LAMB4 : Register[\"IGNF\"][\"LAMB4\"],\n RGF93G : Register[\"IGNF\"][\"RGF93G\"],\n WGS84G : Register[\"IGNF\"][\"WGS84G\"]\n }\n };\n\n for (var register in registers) {\n if (registers.hasOwnProperty(register)) {\n var codes = registers[register];\n for (var code in codes) {\n if (codes.hasOwnProperty(code)) {\n var name = register + \":\" + code;\n Proj4.defs(name, codes[code]);\n }\n }\n }\n }\n },\n\n /**\n * load only a def to proj4\n *\n * @function loadByName\n * @param {Object} Proj4 - proj4 instance\n * @param {String} name - ie. EPSG:2154 (Lambert)\n * @returns {Boolean} true/false\n */\n loadByName : function (Proj4, name) {\n if (!this.exist(name)) {\n return false;\n }\n\n try {\n Proj4.defs(name, this.get(name));\n } catch (e) {\n // FIXME message !?\n return false;\n }\n\n return true;\n },\n\n /**\n * definitions EPSG\n * @enum\n */\n EPSG : {\n 4978 : \"+proj=geocent +datum=WGS84 +units=m +no_defs \",\n 3857 : \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs\",\n 3785 : \"+title=WGS 84 / Pseudo-Mercator (deprecated) +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs\",\n 4149 : \"+title=CH1903 +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs \",\n 4150 : \"+title=CH1903plus +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs \",\n 4151 : \"+title=CHTRF95 +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4171 : \"+title=RGF93 +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4230 : \"+title=ED50 +proj=longlat +ellps=intl +no_defs \",\n 4235 : \"+title=Guyane Francaise +proj=longlat +ellps=intl +no_defs \",\n 4258 : \"+title=ETRS89 +proj=longlat +ellps=GRS80 +no_defs \",\n 4275 : \"+title=NTF +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs \",\n 4322 : \"+title=WGS 72 +proj=longlat +ellps=WGS72 +no_defs \",\n 4326 : \"+title=WGS 84 +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs \",\n 4467 : \"+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 4470 : \"+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4471 : \"+proj=utm +zone=38 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 4474 : \"+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs \",\n 4558 : \"+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4559 : \"+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 4621 : \"+title=Fort Marigot +proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs \",\n 4622 : \"+title=Guadeloupe 1948 +proj=longlat +ellps=intl +no_defs \",\n 4623 : \"+title=CSG67 +proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 +no_defs \",\n 4624 : \"+title=RGFG95 +proj=longlat +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +no_defs \",\n 4625 : \"+title=Martinique 1938 +proj=longlat +ellps=intl +no_defs \",\n 4626 : \"+title=Reunion 1947 +proj=longlat +ellps=intl +no_defs \",\n 4627 : \"+title=RGR92 +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4628 : \"+title=Tahiti 52 +proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +no_defs \",\n 4629 : \"+title=Tahaa 54 +proj=longlat +ellps=intl +no_defs \",\n 4630 : \"+title=IGN72 Nuku Hiva +proj=longlat +ellps=intl +no_defs \",\n 4632 : \"+title=Combani 1950 +proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +no_defs \",\n 4633 : \"+title=IGN56 Lifou +proj=longlat +ellps=intl +no_defs \",\n 4634 : \"+title=IGN72 Grand Terre +proj=longlat +ellps=intl +no_defs \",\n 4637 : \"+title=Perroud 1950 +proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +no_defs \",\n 4638 : \"+title=Saint Pierre et Miquelon 1950 +proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +no_defs \",\n 4640 : \"+title=RRAF 1991 +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4641 : \"+title=IGN53 Mare +proj=longlat +ellps=intl +no_defs \",\n 4645 : \"+title=RGNC 1991 +proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4687 : \"+proj=longlat +ellps=GRS80 +no_defs \",\n 4662 : \"+title=IGN72 Grande Terre +proj=longlat +ellps=intl +no_defs \",\n 4689 : \"+title=IGN63 Hiva Oa +proj=longlat +ellps=intl +no_defs \",\n 4690 : \"+title=Tahiti 79 +proj=longlat +ellps=intl +no_defs \",\n 4691 : \"+title=Moorea 87 +proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +no_defs \",\n 4692 : \"+title=Maupiti 83 +proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +no_defs \",\n 4698 : \"+title=IGN 1962 Kerguelen +proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs \",\n 4749 : \"+title=RGNC91-93 +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs \",\n 4750 : \"+title=ST87 Ouvea +proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +no_defs \",\n 4807 : \"+title=NTF (Paris) +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs \",\n 2056 : \"+title=CH1903+ / LV95 +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs \",\n 2154 : \"+title=RGF93 / Lambert-93 +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 2213 : \"+title=ETRS89 / TM 30 NE +proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs \",\n 2969 : \"+title=Fort Marigot / UTM zone 20N +proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m +no_defs \",\n 2970 : \"+title=Guadeloupe 1948 / UTM zone 20N +proj=utm +zone=20 +ellps=intl +units=m +no_defs \",\n 2971 : \"+title=CSG67 / UTM zone 22N +proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs \",\n 2972 : \"+title=RGFG95 / UTM zone 22N +proj=utm +zone=22 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs \",\n 2973 : \"+title=Martinique 1938 / UTM zone 20N +proj=utm +zone=20 +ellps=intl +units=m +no_defs \",\n 2975 : \"+title=RGR92 / UTM zone 40S +proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 2976 : \"+title=Tahiti 52 / UTM zone 6S +proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m +no_defs \",\n 2977 : \"+title=Tahaa 54 / UTM zone 5S +proj=utm +zone=5 +south +ellps=intl +units=m +no_defs \",\n 2978 : \"+title=IGN72 Nuku Hiva / UTM zone 7S +proj=utm +zone=7 +south +ellps=intl +units=m +no_defs \",\n 2980 : \"+title=Combani 1950 / UTM zone 38S +proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs \",\n 2981 : \"+title=IGN56 Lifou / UTM zone 58S +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs \",\n 2982 : \"+title=IGN72 Grand Terre / UTM zone 58S (deprecated) +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs \",\n 2984 : \"+title=RGNC 1991 / Lambert New Caledonia (deprecated) +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=intl +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 2986 : \"+title=Terre Adelie 1950 +proj=stere +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-90.000000000 +lon_0=140.000000000 +lat_ts=-67.000000000 +k=0.96027295 +x_0=300000.000 +y_0=-2299363.482 +units=m +no_defs\",\n 2987 : \"+title=Saint Pierre et Miquelon 1950 / UTM zone 21N +proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m +no_defs \",\n 2989 : \"+title=RRAF 1991 / UTM zone 20N +proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 2990 : \"+title=Reunion 1947 / TM Reunion (deprecated) +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +units=m +no_defs \",\n 2995 : \"+title=IGN53 Mare / UTM zone 58S +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs \",\n 3038 : \"+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3039 : \"+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3040 : \"+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3041 : \"+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 3042 : \"+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 3043 : \"+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 3044 : \"+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3045 : \"+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3046 : \"+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3047 : \"+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3048 : \"+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3049 : \"+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3050 : \"+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3051 : \"+proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3034 : \"+title=ETRS89 / ETRS-LCC +proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +units=m +no_defs \",\n 3035 : \"+title=ETRS89 / ETRS-LAEA +proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs \",\n 3042 : \"+title=ETRS89 / ETRS-TM30 +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs \",\n 3043 : \"+title=ETRS89 / ETRS-TM31 +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs \",\n 3044 : \"+title=ETRS89 / ETRS-TM32 +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs \",\n 25828 : \"+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25829 : \"+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 25830 : \"+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 25831 : \"+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n // 25832 : \"+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25833 : \"+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25834 : \"+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25835 : \"+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25836 : \"+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25837 : \"+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 25838 : \"+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3060 : \"+title=IGN72 Grande Terre / UTM zone 58S +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs \",\n 3163 : \"+title=RGNC91-93 / Lambert New Caledonia +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3164 : \"+title=ST87 Ouvea / UTM zone 58S +proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m +no_defs \",\n 3165 : \"+title=NEA74 Noumea / Noumea Lambert +proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +units=m +no_defs \",\n 3166 : \"+title=NEA74 Noumea / Noumea Lambert 2 +proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +units=m +no_defs \",\n 3169 : \"+title=RGNC91-93 / UTM zone 57S +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3170 : \"+title=RGNC91-93 / UTM zone 58S +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3171 : \"+title=RGNC91-93 / UTM zone 59S +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs \",\n 3172 : \"+title=IGN53 Mare / UTM zone 59S +proj=utm +zone=59 +south +ellps=intl +units=m +no_defs \",\n 3296 : \"+title=RGPF / UTM zone 5S +proj=utm +zone=5 +south +ellps=GRS80 +units=m +no_defs \",\n 3297 : \"+title=RGPF / UTM zone 6S +proj=utm +zone=6 +south +ellps=GRS80 +units=m +no_defs \",\n 3298 : \"+title=RGPF / UTM zone 7S +proj=utm +zone=7 +south +ellps=GRS80 +units=m +no_defs \",\n 3299 : \"+title=RGPF / UTM zone 8S +proj=utm +zone=8 +south +ellps=GRS80 +units=m +no_defs \",\n 3302 : \"+title=IGN63 Hiva Oa / UTM zone 7S +proj=utm +zone=7 +south +ellps=intl +units=m +no_defs \",\n 3303 : \"+title=Fatu Iva 72 / UTM zone 7S +proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m +no_defs \",\n 3304 : \"+title=Tahiti 79 / UTM zone 6S +proj=utm +zone=6 +south +ellps=intl +units=m +no_defs \",\n 3305 : \"+title=Moorea 87 / UTM zone 6S +proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m +no_defs \",\n 3306 : \"+title=Maupiti 83 / UTM zone 5S +proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m +no_defs \",\n 3312 : \"+title=CSG67 / UTM zone 21N +proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs \",\n 3313 : \"+title=RGFG95 / UTM zone 21N +proj=utm +zone=21 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs \",\n 3336 : \"+title=IGN 1962 Kerguelen / UTM zone 42S +proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs \",\n 3395 : \"+title=WGS 84 / World Mercator +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 3727 : \"+title=Reunion 1947 / TM Reunion +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +units=m +no_defs \",\n 21781 : \"+title=CH1903 / LV03 +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs \",\n 25830 : \"+title=ETRS89 / UTM zone 30N +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs \",\n 25831 : \"+title=ETRS89 / UTM zone 31N +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs \",\n 25832 : \"+title=ETRS89 / UTM zone 32N +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs \",\n 27561 : \"+title=NTF (Paris) / Lambert Nord France +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27562 : \"+title=NTF (Paris) / Lambert Centre France +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27563 : \"+title=NTF (Paris) / Lambert Sud France +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.9998774990000001 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27564 : \"+title=NTF (Paris) / Lambert Corse +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.9999447100000001 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27571 : \"+title=NTF (Paris) / Lambert zone I +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27572 : \"+title=NTF (Paris) / Lambert zone II +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27573 : \"+title=NTF (Paris) / Lambert zone III +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.9998774990000001 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27574 : \"+title=NTF (Paris) / Lambert zone IV +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.9999447100000001 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27581 : \"+title=NTF (Paris) / France I (deprecated) +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27582 : \"+title=NTF (Paris) / France II (deprecated) +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27583 : \"+title=NTF (Paris) / France III (deprecated) +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.9998774990000001 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27584 : \"+title=NTF (Paris) / France IV (deprecated) +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.9999447100000001 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27591 : \"+title=NTF (Paris) / Nord France (deprecated) +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27592 : \"+title=NTF (Paris) / Centre France (deprecated) +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27593 : \"+title=NTF (Paris) / Sud France (deprecated) +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.9998774990000001 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 27594 : \"+title=NTF (Paris) / Corse (deprecated) +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.9999447100000001 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs \",\n 32601 : \"+proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32602 : \"+proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32603 : \"+proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32604 : \"+proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32605 : \"+proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32606 : \"+proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32607 : \"+proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32608 : \"+proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32609 : \"+proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32610 : \"+proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32611 : \"+proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32612 : \"+proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32613 : \"+proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32614 : \"+proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32615 : \"+proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32616 : \"+proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32617 : \"+proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32618 : \"+proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32619 : \"+proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32620 : \"+proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32621 : \"+proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32622 : \"+proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32623 : \"+proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32624 : \"+proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32625 : \"+proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32626 : \"+proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32627 : \"+proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32628 : \"+proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32629 : \"+proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32630 : \"+proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32631 : \"+proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32632 : \"+proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32633 : \"+proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32634 : \"+proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32635 : \"+proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32636 : \"+proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32637 : \"+proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32638 : \"+proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32639 : \"+proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32640 : \"+proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32641 : \"+proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32642 : \"+proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32643 : \"+proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32644 : \"+proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32645 : \"+proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32646 : \"+proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32647 : \"+proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32648 : \"+proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32649 : \"+proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32650 : \"+proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32651 : \"+proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32652 : \"+proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32653 : \"+proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32654 : \"+proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32655 : \"+proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32656 : \"+proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32657 : \"+proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32658 : \"+proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32659 : \"+proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32660 : \"+proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32661 : \"+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32662 : \"+title=WGS 84 / Plate Carree +proj=eqc +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32701 : \"+proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32702 : \"+proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32703 : \"+proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32704 : \"+proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32705 : \"+proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32706 : \"+proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32707 : \"+proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32708 : \"+proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32709 : \"+proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32710 : \"+proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32711 : \"+proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32712 : \"+proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32713 : \"+proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32714 : \"+proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32715 : \"+proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32716 : \"+proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32717 : \"+proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32718 : \"+proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32719 : \"+proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32720 : \"+proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32721 : \"+proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32722 : \"+proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32723 : \"+proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32724 : \"+proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32725 : \"+proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32726 : \"+proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32727 : \"+proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32728 : \"+proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32729 : \"+proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32730 : \"+proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32731 : \"+proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32732 : \"+proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32733 : \"+proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32734 : \"+proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32735 : \"+proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32736 : \"+proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32737 : \"+proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32738 : \"+proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32739 : \"+proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32740 : \"+proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32741 : \"+proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32742 : \"+proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32743 : \"+proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32744 : \"+proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32745 : \"+proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32746 : \"+proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32747 : \"+proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32748 : \"+proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32749 : \"+proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32750 : \"+proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32751 : \"+proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32752 : \"+proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32753 : \"+proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32754 : \"+proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32755 : \"+proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32756 : \"+proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32757 : \"+proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32758 : \"+proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32759 : \"+proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32760 : \"+proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 32761 : \"+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs \",\n 310024802 : \"+title=Geoportail - France metropolitaine +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=46.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310915814 : \"+title=Geoportail - Antilles francaises +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310486805 : \"+title=Geoportail - Guyane +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=4.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310700806 : \"+title=Geoportail - Reunion et dependances +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-21.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310702807 : \"+title=Geoportail - Mayotte +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-12.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310706808 : \"+title=Geoportail - Saint-Pierre et Miquelon +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=47.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310547809 : \"+title=Geoportail - Nouvelle-Caledonie +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-22.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642810 : \"+title=Geoportail - Wallis et Futuna +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-14.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310032811 : \"+title=Geoportail - Polynesie francaise +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642812 : \"+title=Geoportail - Kerguelen +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-49.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642801 : \"+title=Geoportail - Crozet +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-46.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642813 : \"+title=Geoportail - Amsterdam et Saint-Paul +proj=eqc +nadgrids=null +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-38.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 310642901 : \"+title=Geoportail - Monde +proj=mill +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lon_0=0.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n 5489 : \"+title=RGAF09 geographiques (dms) +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137 +rf=298.257222101 +units=m +no_defs\",\n 5490 : \"+title=RGAF09 UTM Nord Fuseau 20 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137 +rf=298.257222101 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\"\n },\n /**\n * definitions CRS\n * @enum\n */\n CRS : {\n 84 : \"+title=WGS 84 longitude-latitude +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs \"\n },\n /**\n * definitions IGNF\n * @enum\n */\n IGNF : {\n AMST63 : \"+title=Amsterdam 1963 +proj=geocent +towgs84=109.753,-528.133,-362.244,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n CROZ63 : \"+title=Crozet 1963 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n CSG67 : \"+title=Guyane CSG67 +proj=geocent +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n ED50 : \"+title=ED50 +proj=geocent +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n ETRS89 : \"+title=Systeme de reference terrestre Europeen (1989) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n GUAD48 : \"+title=Guadeloupe Ste Anne +proj=geocent +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n GUADFM49 : \"+title=Guadeloupe Fort Marigot +proj=geocent +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n IGN63 : \"+title=IGN 1963 (Hiva Oa, Tahuata, Mohotani) +proj=geocent +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n IGN72 : \"+title=IGN 1972 Grande-Terre / Ile des Pins +proj=geocent +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n KERG62CAR : \"+title=Kerguelen - K0 +proj=geocent +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MART38 : \"+title=Martinique Fort-Desaix +proj=geocent +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MAYO50 : \"+title=Mayotte Combani +proj=geocent +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MOOREA87 : \"+title=Moorea 1987 +proj=geocent +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n NTF : \"+title=Nouvelle Triangulation Francaise +proj=geocent +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +units=m +no_defs\",\n NUKU72 : \"+title=IGN 1972 Nuku Hiva +proj=geocent +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n REUN47 : \"+title=Reunion 1947 +proj=geocent +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n RGF93 : \"+title=Reseau geodesique francais 1993 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGFG95 : \"+title=Reseau geodesique francais de Guyane 1995 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGM04 : \"+title=RGM04 (Reseau Geodesique de Mayotte 2004) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGNC : \"+title=Reseau Geodesique de Nouvelle-Caledonie +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGPF : \"+title=RGPF (Reseau Geodesique de Polynesie Francaise) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGR92 : \"+title=Reseau geodesique Reunion 1992 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGSPM06 : \"+title=Reseau Geodesique Saint-Pierre-et-Miquelon (2006) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGTAAF07 : \"+title=Reseau Geodesique des TAAF (2007) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RRAF91 : \"+title=RRAF 1991 (Reseau de Reference des Antilles Francaises) +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n STPL69 : \"+title=Saint-Paul 1969 +proj=geocent +towgs84=225.571,-346.608,-46.567,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n STPM50 : \"+title=St Pierre et Miquelon 1950 +proj=geocent +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +units=m +no_defs\",\n TAHAA : \"+title=Raiatea - Tahaa 51-54 (Tahaa, Base Terme Est) +proj=geocent +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n TAHI79 : \"+title=IGN79 (Tahiti) Iles de la Societe +proj=geocent +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n TERA50 : \"+title=Pointe Geologie - Perroud 1950 +proj=geocent +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n WALL78 : \"+title=Wallis-Uvea 1978 (MOP78) +proj=geocent +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n WGS72 : \"+title=World Geodetic System 1972 +proj=geocent +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +units=m +no_defs\",\n WGS84 : \"+title=World Geodetic System 1984 +proj=geocent +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n AMST63GEO : \"+title=Amsterdam 1963 +proj=longlat +towgs84=109.753,-528.133,-362.244,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n CROZ63GEO : \"+title=Crozet 1963 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n CSG67GEO : \"+title=Guyane CSG67 +proj=longlat +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n ED50G : \"+title=ED50 +proj=longlat +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n GUAD48GEO : \"+title=Guadeloupe Ste Anne +proj=longlat +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n GUADFM49GEO : \"+title=Guadeloupe Fort Marigot +proj=longlat +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n IGN63GEO : \"+title=IGN 1963 (Hiva Oa, Tahuata, Mohotani) +proj=longlat +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n IGN72GEO : \"+title=IGN 1972 Grande-Terre / Ile des Pins +proj=longlat +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n KERG62GEO : \"+title=Kerguelen - K0 +proj=longlat +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MART38GEO : \"+title=Martinique Fort-Desaix +proj=longlat +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MAYO50GEO : \"+title=Mayotte Combani +proj=longlat +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n MOOREA87GEO : \"+title=Moorea 1987 +proj=longlat +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n NTFG : \"+title=Nouvelle Triangulation Francaise Greenwich degres sexagesimaux +proj=longlat +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +units=m +no_defs\",\n NTFP : \"+title=Nouvelle Triangulation Francaise Paris grades +proj=longlat +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +units=m +no_defs\",\n NUKU72GEO : \"+title=IGN 1972 Nuku Hiva +proj=longlat +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n REUN47GEO : \"+title=Reunion 1947 +proj=longlat +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n RGF93G : \"+title=Reseau geodesique francais 1993 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGFG95GEO : \"+title=Reseau geodesique francais de Guyane 1995 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGM04GEO : \"+title=RGM04 (Reseau Geodesique de Mayotte 2004) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGNCGEO : \"+title=Reseau Geodesique de Nouvelle-Caledonie +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGPFGEO : \"+title=RGPF (Reseau Geodesique de Polynesie Francaise) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGR92GEO : \"+title=Reseau geodesique de la Reunion 1992 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGSPM06GEO : \"+title=Saint-Pierre-et-Miquelon (2006) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n RGTAAF07G : \"+title=Reseau Geodesique des TAAF (2007) (dms) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n STPL69GEO : \"+title=Saint-Paul 1969 +proj=longlat +towgs84=225.571,-346.608,-46.567,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n STPM50GEO : \"+title=St Pierre et Miquelon 1950 +proj=longlat +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +units=m +no_defs\",\n TAHAAGEO : \"+title=Raiatea - Tahaa 51-54 (Tahaa, Base Terme Est) +proj=longlat +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n TAHI79GEO : \"+title=IGN79 (Tahiti) Iles de la Societe +proj=longlat +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n TERA50G : \"+title=Pointe Geologie - Perroud 1950 +proj=longlat +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n WALL78GEO : \"+title=Wallis - Uvea 1978 (MOP78) +proj=longlat +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs\",\n WGS72G : \"+title=WGS72 +proj=longlat +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +units=m +no_defs\",\n WGS84G : \"+title=World Geodetic System 1984 +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n WGS84RRAFGEO : \"+title=Reseau de reference des Antilles francaises (1988-1991) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n XGEO : \"+title=Systeme CIO-BIH +proj=longlat +towgs84=0.0000,0.0000,0.5000,0.0000,0.0000,0.0140,-0.100000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n AMST63UTM43S : \"+title=Amsterdam 1963 UTM fuseau 43 Sud +proj=tmerc +towgs84=109.753,-528.133,-362.244,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n CROZ63UTM39S : \"+title=Crozet 1963 +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n CSG67UTM21 : \"+title=Guyane CSG67 UTM fuseau 21 +proj=tmerc +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n CSG67UTM22 : \"+title=Guyane CSG67 UTM fuseau 22 +proj=tmerc +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALANF : \"+title=Geoportail - Antilles francaises +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALASP : \"+title=Geoportail - Amsterdam et Saint-Paul +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-38.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALCRZ : \"+title=Geoportail - Crozet +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-46.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALFXX : \"+title=Geoportail - France metropolitaine +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=46.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALGUF : \"+title=Geoportail - Guyane +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=4.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALKER : \"+title=Geoportail - Kerguelen +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-49.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALMYT : \"+title=Geoportail - Mayotte +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-12.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALNCL : \"+title=Geoportail - Nouvelle-Caledonie +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-22.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALPYF : \"+title=Geoportail - Polynesie francaise +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALREU : \"+title=Geoportail - Reunion et dependances +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-21.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALSPM : \"+title=Geoportail - Saint-Pierre et Miquelon +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=47.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GEOPORTALWLF : \"+title=Geoportail - Wallis et Futuna +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-14.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n GUAD48UTM20 : \"+title=Guadeloupe Ste Anne +proj=tmerc +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n GUADFM49U20 : \"+title=Guadeloupe Fort Marigot +proj=tmerc +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n IGN63UTM7S : \"+title=IGN 1963 - Hiva Oa, Tahuata, Mohotani - UTM fuseau 7 Sud +proj=tmerc +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n IGN72UTM58S : \"+title=IGN 1972 - UTM fuseau 58 Sud +proj=tmerc +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n KERG62UTM42S : \"+title=Kerguelen 1962 +proj=tmerc +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n LAMB1 : \"+title=Lambert I +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=49.500000000 +lon_0=0.000000000 +k_0=0.99987734 +lat_1=49.500000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs\",\n LAMB1C : \"+title=Lambert I Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=49.500000000 +lon_0=0.000000000 +k_0=0.99987734 +lat_1=49.500000000 +x_0=600000.000 +y_0=1200000.000 +units=m +no_defs\",\n LAMB2 : \"+title=Lambert II +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs\",\n LAMB2C : \"+title=Lambert II Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=2200000.000 +units=m +no_defs\",\n LAMB3 : \"+title=Lambert III +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=44.100000000 +lon_0=0.000000000 +k_0=0.99987750 +lat_1=44.100000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs\",\n LAMB3C : \"+title=Lambert III Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=44.100000000 +lon_0=0.000000000 +k_0=0.99987750 +lat_1=44.100000000 +x_0=600000.000 +y_0=3200000.000 +units=m +no_defs\",\n LAMB4 : \"+title=Lambert IV +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=42.165000000 +lon_0=0.000000000 +k_0=0.99994471 +lat_1=42.165000000 +x_0=234.358 +y_0=185861.369 +units=m +no_defs\",\n LAMB4C : \"+title=Lambert IV Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=42.165000000 +lon_0=0.000000000 +k_0=0.99994471 +lat_1=42.165000000 +x_0=234.358 +y_0=4185861.369 +units=m +no_defs\",\n LAMB93 : \"+title=Lambert 93 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=46.500000000 +lon_0=3.000000000 +lat_1=44.000000000 +lat_2=49.000000000 +x_0=700000.000 +y_0=6600000.000 +units=m +no_defs\",\n RGF93CC42 : \"+title=Lambert conique conforme Zone 1 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=42.000000000 +lon_0=3.000000000 +lat_1=41.200000000 +lat_2=42.800000000 +x_0=1700000.000 +y_0=1200000.000 +units=m +no_defs\",\n RGF93CC43 : \"+title=Lambert conique conforme Zone 2 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=43.000000000 +lon_0=3.000000000 +lat_1=42.200000000 +lat_2=43.800000000 +x_0=1700000.000 +y_0=2200000.000 +units=m +no_defs\",\n RGF93CC44 : \"+title=Lambert conique conforme Zone 3 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=44.000000000 +lon_0=3.000000000 +lat_1=43.200000000 +lat_2=44.800000000 +x_0=1700000.000 +y_0=3200000.000 +units=m +no_defs\",\n RGF93CC45 : \"+title=Lambert conique conforme Zone 4 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=45.000000000 +lon_0=3.000000000 +lat_1=44.200000000 +lat_2=45.800000000 +x_0=1700000.000 +y_0=4200000.000 +units=m +no_defs\",\n RGF93CC46 : \"+title=Lambert conique conforme Zone 5 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=46.000000000 +lon_0=3.000000000 +lat_1=45.200000000 +lat_2=46.800000000 +x_0=1700000.000 +y_0=5200000.000 +units=m +no_defs\",\n RGF93CC47 : \"+title=Lambert conique conforme Zone 6 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=47.000000000 +lon_0=3.000000000 +lat_1=46.200000000 +lat_2=47.800000000 +x_0=1700000.000 +y_0=6200000.000 +units=m +no_defs\",\n RGF93CC48 : \"+title=Lambert conique conforme Zone 7 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=48.000000000 +lon_0=3.000000000 +lat_1=47.200000000 +lat_2=48.800000000 +x_0=1700000.000 +y_0=7200000.000 +units=m +no_defs\",\n RGF93CC49 : \"+title=Lambert conique conforme Zone 8 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=49.000000000 +lon_0=3.000000000 +lat_1=48.200000000 +lat_2=49.800000000 +x_0=1700000.000 +y_0=8200000.000 +units=m +no_defs\",\n RGF93CC50 : \"+title=Lambert conique conforme Zone 9 +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=50.000000000 +lon_0=3.000000000 +lat_1=49.200000000 +lat_2=50.800000000 +x_0=1700000.000 +y_0=9200000.000 +units=m +no_defs\",\n LAMBE : \"+title=Lambert II etendu +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=2200000.000 +units=m +no_defs\",\n MART38UTM20 : \"+title=Martinique Fort-Desaix +proj=tmerc +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n MAYO50UTM38S : \"+title=Mayotte Combani +proj=tmerc +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n MILLER : \"+title=Geoportail - Monde +proj=mill +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lon_0=0.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs\",\n MOOREA87U6S : \"+title=Moorea 1987 - UTM fuseau 6 Sud +proj=tmerc +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n NUKU72U7S : \"+title=IGN 1972 Nuku Hiva - UTM fuseau 7 Sud +proj=tmerc +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n // REUN47GAUSSL : \"+title=Reunion Gauss Laborde +proj=gstmerc +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-21.116666667 +lon_0=55.533333333 +k_0=1.00000000 +x_0=160000.000 +y_0=50000.000 +units=m +no_defs\",\n RGM04UTM38S : \"+title=UTM fuseau 38 Sud (Reseau Geodesique de Mayotte 2004) +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGNCUTM57S : \"+title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 57 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGNCUTM58S : \"+title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 58 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGNCUTM59S : \"+title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 59 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGPFUTM5S : \"+title=RGPF - UTM fuseau 5 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGPFUTM6S : \"+title=RGPF - UTM fuseau 6 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGPFUTM7S : \"+title=RGPF - UTM fuseau 7 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGR92UTM40S : \"+title=RGR92 UTM fuseau 40 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n RGSPM06U21 : \"+title=Saint-Pierre-et-Miquelon (2006) UTM Fuseau 21 Nord +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n STPL69UTM43S : \"+title=Saint-Paul 1969 UTM fuseau 43 Sud +proj=tmerc +towgs84=225.571,-346.608,-46.567,0,0,0,0 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n STPM50UTM21 : \"+title=St Pierre et Miquelon 1950 +proj=tmerc +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n TAHAAUTM05S : \"+title=Tahaa 1951 +proj=tmerc +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n TAHI51UTM06S : \"+title=Tahiti-Terme Nord UTM fuseau 6 Sud +proj=tmerc +towgs84=162.0000,117.0000,154.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n TAHI79UTM6S : \"+title=Tahiti 1979 +proj=tmerc +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n TERA50STEREO : \"+title=Terre Adelie 1950 +proj=stere +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-90.000000000 +lon_0=140.000000000 +lat_ts=-67 +k=0.96027295 +x_0=300000.000 +y_0=-2299363.482 +units=m +no_defs\",\n UTM01SW84 : \"+title=World Geodetic System 1984 UTM fuseau 01 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n UTM20W84GUAD : \"+title=World Geodetic System 1984 UTM fuseau 20 Nord-Guadeloupe +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM20W84MART : \"+title=World Geodetic System 1984 UTM fuseau 20 Nord-Martinique +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM22RGFG95 : \"+title=RGFG95 UTM fuseau 22 Nord-Guyane +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM39SW84 : \"+title=World Geodetic System 1984 UTM fuseau 39 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n UTM42SW84 : \"+title=World Geodetic System 1984 UTM fuseau 42 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n UTM43SW84 : \"+title=World Geodetic System 1984 UTM fuseau 43 Sud +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n WALL78UTM1S : \"+title=Wallis-Uvea 1978 (MOP78) UTM 1 SUD +proj=tmerc +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs\",\n ETRS89GEO : \"+title=ETRS89 geographiques (dms) +proj=longlat +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs\",\n ETRS89LAEA : \"+title=ETRS89 Lambert Azimutal Equal Area +proj=laea +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=52.000000000 +lon_0=10.000000000 +x_0=4321000.000 +y_0=3210000.000 +units=m +no_defs\",\n ETRS89LCC : \"+title=ETRS89 Lambert Conformal Conic +proj=lcc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=52.000000000 +lon_0=9.999999995 +lat_1=35.000000000 +lat_2=65.000000000 +x_0=4000000.000 +y_0=2800000.000 +units=m +no_defs\",\n UTM26ETRS89 : \"+title=Europe - de 30d a 24d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM27ETRS89 : \"+title=Europe - de 24d a 18d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM28ETRS89 : \"+title=Europe - de 18d a 12d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM29ETRS89 : \"+title=Europe - de 12d a 6d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM30ETRS89 : \"+title=Europe - de -6d a 0d Ouest +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM31ETRS89 : \"+title=Europe - de 0d a 6d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM32ETRS89 : \"+title=Europe - de 6d a 12d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM33ETRS89 : \"+title=Europe - de 12d a 18d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM34ETRS89 : \"+title=Europe - de 18d a 24d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM35ETRS89 : \"+title=Europe - de 24d a 30d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM36ETRS89 : \"+title=Europe - de 30d a 36d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM37ETRS89 : \"+title=Europe - de 36d a 42d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\",\n UTM38ETRS89 : \"+title=Europe - de 42d a 48d Est +proj=tmerc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs\"\n }\n};\n\nexport default Register;\n","/*\n * FIXME\n * en mode bundle, l'action register des methodes de chargement est executée 2 fois.\n * mais aucun impact sur performance, car le register teste si la projection a été déjà\n * chargé...\n */\n\n// import external\nimport Proj4 from \"proj4\";\n// import OpenLayers\n// import { register } from \"ol/proj/proj4\";\nimport { register } from \"./Proj4\";\nimport {\n getTransform,\n addProjection,\n get as getProjection\n} from \"ol/proj\";\n// import { clear as clearProj } from \"ol/proj/transforms\";\nimport { applyTransform } from \"ol/extent\";\n// import local\nimport Register from \"../Utils/Register\";\nimport Logger from \"../Utils/LoggerByDefault\";\n\nvar logger = Logger.getLogger(\"CRS\");\n\nvar CRS = {\n\n /**\n * List of extent projections\n */\n projectionsExtent : {\n \"EPSG:2154\" : {\n left : -9.62,\n bottom : 41.18,\n right : 10.3,\n top : 51.54\n },\n \"EPSG:27572\" : {\n left : -4.87,\n bottom : 42.33,\n right : 8.23,\n top : 51.14\n }\n },\n\n /**\n * Load all custom definition projection\n */\n load : function () {\n logger.trace(\"Loading custom definitions projections\");\n // loading except if it's already loaded...\n if (!Register.isLoaded) {\n // load all defs into proj4\n Register.load(Proj4);\n try {\n // register all defs\n register(Proj4);\n // Expose proj4 with custom defs into OpenLayers global variable\n if (window.ol && window.ol.proj && window.ol.proj.proj4) {\n window.ol.proj.proj4.register = register;\n window.ol.proj.proj4.register(Proj4);\n }\n } catch (e) {\n // FIXME ?\n logger.error(e);\n // clearProj();\n }\n }\n },\n\n /**\n * Load definition projection by default\n *\n * include into proj4 :\n * - WGS84\n * - ['EPSG:4326']\n * - ['EPSG:3785'], ['EPSG:3857'], GOOGLE, ['EPSG:900913'], ['EPSG:102113']\n * +\n * - [\"EPSG:2154\"], [\"EPSG:27571\"], [\"EPSG:27572\"], [\"EPSG:27573\"], [\"EPSG:2757\"],\n * - [\"CRS:84\"],\n * - [\"IGNF:LAMB93\"],\n * - [\"IGNF:LAMBE\"], [\"IGNF:LAMB1\"], [\"IGNF:LAMB2\"], [\"IGNF:LAMB3\"], [\"IGNF:LAMB4\"],\n * - [\"IGNF:RGF93G\"],\n * - [\"IGNF:WGS84G\"]\n */\n loadByDefault : function () {\n logger.trace(\"Loading custom definitions projections by default\");\n // loading except if it's already loaded...\n if (!Register.isLoaded) {\n // load defs by default into proj4\n Register.loadByDefault(Proj4);\n try {\n // register all defs\n register(Proj4);\n // Expose proj4 with custom defs into OpenLayers global variable\n if (window.ol && window.ol.proj && window.ol.proj.proj4) {\n window.ol.proj.proj4.register = register;\n window.ol.proj.proj4.register(Proj4);\n }\n } catch (e) {\n // FIXME une projection ne passe pas avec ol.proj/proj4.register()...\n // on fait quoi ?\n logger.error(e);\n // clearProj();\n }\n }\n },\n\n /**\n * Load a custom definition projection\n * @param {String} name - ie. EPSG:2154 (Lambert)\n */\n loadByName : function (name) {\n logger.trace(\"Loading a custom definition projection : \", name);\n // loading except if it's already loaded...\n if (!Register.isLoaded) {\n // load defs by default into proj4\n Register.loadByName(Proj4, name);\n try {\n // register all defs\n register(Proj4);\n // Expose proj4 with custom defs into OpenLayers global variable\n if (window.ol && window.ol.proj && window.ol.proj.proj4) {\n window.ol.proj.proj4.register = register;\n window.ol.proj.proj4.register(Proj4);\n }\n } catch (e) {\n // FIXME ?\n logger.error(e);\n // clearProj();\n }\n }\n },\n\n /**\n * Overload OpenLayers ol.proj parameters,\n * to manage EPSG:2154 extent restriction\n */\n overload : function () {\n logger.trace(\"Loading projections aera (extent)\");\n for (var code in this.projectionsExtent) {\n if (this.projectionsExtent.hasOwnProperty(code)) {\n var extent = this.projectionsExtent[code];\n var proj = getProjection(code);\n var fromLonLat = getTransform(\"EPSG:4326\", proj);\n\n // very approximate calculation of projection extent\n var _extent = applyTransform([extent.bottom, extent.right, extent.top, extent.left], fromLonLat);\n proj.setExtent(_extent);\n addProjection(proj);\n\n // Expose projection extent with custom defs into OpenLayers global variable\n if (window.ol && window.ol.proj && window.ol.proj.addProjection) {\n window.ol.proj.addProjection(proj);\n }\n }\n }\n }\n};\n\nexport default CRS;\n\n// Expose proj4 with custom defs into OpenLayers global variable\nif (window.ol && window.ol.proj && window.ol.proj.proj4) {\n window.ol.proj.proj4.register = register;\n}\n","import ID from \"../../Utils/SelectorID\";\nimport GeocodeUtils from \"../../Utils/GeocodeUtils\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar SearchEngineDOM = {\n\n /**\n * Add uuid to the tag ID\n * @param {String} id - id selector\n * @returns {String} uid - id selector with an unique id\n */\n _addUID : function (id) {\n var uid = (this._uid) ? id + \"-\" + this._uid : id;\n return uid;\n },\n\n /**\n * Main container (DOM)\n *\n * @returns {DOMElement} DOM element\n */\n _createMainContainerElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPsearchEngine\");\n container.className = \"GPwidget gpf-widget\";\n return container;\n },\n\n // ################################################################### //\n // ################### Methods of main container ##################### //\n // ################################################################### //\n\n /**\n * SElement with picto and search input\n * @returns {DOMElement} DOM element\n */\n _createSearchDivElement : function () {\n var searchDiv = document.createElement(\"div\");\n searchDiv.id = this._addUID(\"GPshowSearchDiv\");\n return searchDiv;\n },\n\n /**\n * Show search engine\n * @param {Boolean} collapsible - ...\n * @returns {DOMElement} DOM element\n */\n _createShowSearchEnginePictoElement : function (collapsible) {\n // contexte d'execution\n var self = this;\n if (checkDsfr()) {\n // Jamais collapsible en DSFR\n collapsible = true;\n }\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowSearchEnginePicto\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowSearchEnginePicto gpf-btn gpf-btn-icon-search fr-btn\";\n button.title = \"Afficher/masquer la recherche par lieux\";\n if (checkDsfr()) {\n // Pas la même du bouton fonction en DSFR\n button.title = \"Rechercher\";\n }\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", !collapsible);\n button.disabled = !collapsible;\n button.setAttribute(\"type\", \"button\");\n\n // Close all results and panels when minimizing the widget\n button.addEventListener(\"click\", function (e) {\n if (checkDsfr()) {\n // En DSFR, le bouton fait la même chose que la touche Entrée\n var container = document.getElementById(self._addUID(\"GPautocompleteResults\"));\n var curr = container.getElementsByClassName(\"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\");\n var list = container.getElementsByClassName(\"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\");\n\n // si aucune suggestion, on ne va pas plus loin !\n var length = list.length;\n if (!length) {\n return;\n }\n\n var current = null;\n\n // si aucun item courant, on prend le 1er !\n if (!curr.length) {\n current = list[0];\n current.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\";\n current.style.color = \"#000000\";\n current.style[\"background-color\"] = \"#CEDBEF\";\n } else {\n current = curr[0];\n }\n current.click();\n return;\n }\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n if (status) {}\n\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n var showAdvancedSearch = document.getElementById(self._addUID(\"GPshowAdvancedSearch\"));\n if (showAdvancedSearch) {\n showAdvancedSearch.style.display = null;\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n var showGeolocate = document.getElementById(self._addUID(\"GPshowGeolocate\"));\n if (showGeolocate) {\n showGeolocate.style.display = null;\n }\n var showCoordinate = document.getElementById(self._addUID(\"GPshowSearchByCoordinate\"));\n if (showCoordinate) {\n showCoordinate.style.display = null;\n }\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false; // FIXME form[id^=GPsearchInput] = #GPsearchInput ?\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n self.onShowSearchEngineClick(e);\n });\n\n return button;\n },\n\n /**\n * Simple search input\n * @param {String} placeholder - placeholder\n *\n * @returns {DOMElement} DOM element\n */\n _createSearchInputElement : function (placeholder) {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GPsearchInput\");\n form.className = \"gpf-panel__content fr-modal__content\";\n // Open geocode results panel when submitting the input\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n if (document.getElementById(self._addUID(\"GPsearchInputText\")).value === \"\") {\n return false;\n }\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n // cf. FIXME\n // document.querySelector(\"#GPsearchInput input\").blur ();\n\n // gestionnaire d'evenement :\n // on récupère la valeur de saisie pour requête sur le service de geocodage\n self.onGeocodingSearchSubmit(e);\n return false;\n });\n\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPsearchInputText\");\n input.className = \"GPsearchInputText gpf-input fr-input\";\n input.type = \"text\";\n input.placeholder = placeholder;\n input.autocomplete = \"off\";\n // Manage autocomplete list appearance when filling the address input\n input.addEventListener(\"keyup\", function (e) {\n var charCode = e.which || e.keyCode;\n if (charCode === 13 || charCode === 10 || charCode === 38 || charCode === 40) {\n return;\n }\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n if (input.value.length > 2) {\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n } else {\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n // gestionnaire d'evenement :\n // on récupère la valeur de saisie pour requête sur le service d'autocompletion\n self.onAutoCompleteSearchText(e);\n });\n\n // FIXME ce code interfere avec le click sur la liste des suggested locations !\n // input.addEventListener(\"blur\", function (e) {\n // document.getElementById(self._addUID(\"GPautoCompleteList\")).style.display = \"none\";\n // });\n\n input.addEventListener(\"keydown\", function (e) {\n // FIXME\n // l'action clavier 'enter (13)' lance le submit de la form !\n // Ce comportement n'est pas souhaité car le submit execute un geocodage !\n // Il faut donc trouver le moyen d'eviter le submit sur un return venant\n // seulement d'une selection de suggestion...\n\n var charCode = e.which || e.keyCode;\n if (charCode === 13) {\n e.preventDefault();\n }\n var container = document.getElementById(self._addUID(\"GPautocompleteResults\"));\n\n // si aucun container !?\n if (!container) {\n return;\n }\n\n var curr = container.getElementsByClassName(\"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\");\n var list = container.getElementsByClassName(\"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\");\n\n // si aucune suggestion, on ne va pas plus loin !\n var length = list.length;\n if (!length) {\n return;\n }\n\n var current = null;\n\n // si aucun item courant, on prend le 1er !\n if (!curr.length) {\n current = list[0];\n current.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\";\n current.style.color = \"#000000\";\n current.style[\"background-color\"] = \"#CEDBEF\";\n if (charCode !== 13) {\n return;\n }\n } else {\n current = curr[0];\n }\n\n var index = parseInt(ID.index(current.id), 10);\n var next = (index === length - 1) ? list[0] : list[index + 1];\n var prev = (index === 0) ? list[length - 1] : list[index - 1];\n\n current.style[\"background-color\"] = \"\";\n current.style.color = \"\";\n prev.style[\"background-color\"] = \"\";\n prev.style.color = \"\";\n next.style[\"background-color\"] = \"\";\n next.style.color = \"\";\n\n switch (charCode) {\n case 38: // arrow up\n current.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n prev.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\";\n prev.style.color = \"#000000\";\n prev.style[\"background-color\"] = \"#CEDBEF\";\n current.scrollIntoView();\n break;\n case 40: // arrow down\n current.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n next.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine current\";\n next.style.color = \"#000000\";\n next.style[\"background-color\"] = \"#CEDBEF\";\n current.scrollIntoView();\n break;\n case 13: // enter\n // cf. FIXME\n e.preventDefault();\n current.click(e);\n break;\n }\n\n current.focus();\n });\n\n form.appendChild(input);\n\n return form;\n },\n\n _createSearchResetElement : function () {\n // contexte d'execution\n var self = this;\n\n var buttonReset = document.createElement(\"button\");\n buttonReset.id = this._addUID(\"GPsearchInputReset\");\n buttonReset.className = \"GPshowOpen GPsearchInputReset gpf-btn gpf-btn-icon-reset gpf-btn-icon-search-reset fr-btn fr-btn--secondary gpf-btn--secondary\"; /* not use : fr-btn--close */\n buttonReset.setAttribute(\"aria-label\", \"Supprimer la recherche\");\n // Reset input\n buttonReset.addEventListener(\"click\", function (e) {\n // FIXME event déclenché sur la frappe \"return\" dans la zone de saisie !?\n document.getElementById(self._addUID(\"GPsearchInputText\")).value = \"\";\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n self.onSearchResetClick();\n });\n\n return buttonReset;\n },\n\n\n _createButtonsElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPbuttonsContainer\";\n return div;\n },\n\n _createFirstLineWrapper : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPsearchFirstLineWrapper\";\n return div;\n },\n\n _createRadioContainer : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPsearchRadioContainer\";\n return div;\n },\n\n _createRadioElements : function () {\n var div = document.createElement(\"div\");\n div.className = \"GPsearchRadioElements\";\n var choiceLocations = document.createElement(\"div\");\n choiceLocations.className = \"GPsearchSplitChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w\";\n var inputLocations = document.createElement(\"input\");\n inputLocations.id = this._addUID(\"GPsearchSplitLocations\");\n inputLocations.type = \"radio\";\n inputLocations.name = \"GPsearchSplit\";\n inputLocations.value = \"address\";\n inputLocations.checked = true;\n\n choiceLocations.appendChild(inputLocations);\n\n var labelLocations = document.createElement(\"label\");\n labelLocations.className = \"gpf-label fr-label\";\n labelLocations.htmlFor = this._addUID(\"GPsearchSplitLocations\");\n labelLocations.title = \"Adresses\";\n labelLocations.innerHTML = \"Adresses\";\n choiceLocations.appendChild(labelLocations);\n if (inputLocations.addEventListener) {\n inputLocations.addEventListener(\"change\", function () {\n if (inputLocations.checked) {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n } else {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n }\n });\n } else if (inputLocations.attachEvent) {\n inputLocations.attachEvent(\"onchange\", function () {\n if (inputLocations.checked) {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n } else {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n }\n });\n }\n\n var choiceData = document.createElement(\"div\");\n choiceData.className = \"GPsearchSplitChoice gpf-flex gpf-radio-group fr-radio-group fr-my-1w\";\n var inputData = document.createElement(\"input\");\n inputData.id = this._addUID(\"GPsearchSplitData\");\n inputData.type = \"radio\";\n inputData.name = \"GPsearchSplit\";\n inputData.value = \"data\";\n\n choiceData.appendChild(inputData);\n\n var labelData = document.createElement(\"label\");\n labelData.className = \"gpf-label fr-label\";\n labelData.htmlFor = this._addUID(\"GPsearchSplitData\");\n labelData.title = \"Cartes et données\";\n labelData.innerHTML = \"Cartes et données\";\n choiceData.appendChild(labelData);\n if (inputData.addEventListener) {\n inputData.addEventListener(\"change\", function () {\n if (inputData.checked) {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n } else {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n }\n });\n } else if (inputData.attachEvent) {\n inputData.attachEvent(\"onchange\", function () {\n if (inputData.checked) {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n } else {\n document.querySelector(\"[id^='GPautocompleteResultsSuggest']\").classList.remove(\"gpf-hidden\", \"GPelementHidden\");\n document.querySelector(\"[id^='GPautocompleteResultsLocation']\").classList.add(\"gpf-hidden\", \"GPelementHidden\");\n }\n });\n }\n\n div.appendChild(choiceLocations);\n div.appendChild(choiceData);\n\n return [div, inputLocations, inputData];\n },\n\n /**\n * Show advanced search panel\n *\n * @returns {DOMElement} DOM element\n */\n _createShowAdvancedSearchElement : function () {\n // contexte d'execution\n var self = this;\n\n var span = document.createElement(\"span\");\n span.id = this._addUID(\"GPshowAdvancedSearch\");\n span.className = \"GPshowOpen GPshowAdvancedSearch\";\n span.innerText = \"Recherche avancée\";\n span.setAttribute(\"tabindex\", \"0\");\n span.setAttribute(\"aria-pressed\", false);\n\n // Open advanced search\n span.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n\n var id = \"#GPsearchInput-\" + self._uid;\n if (status) {\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n } else {\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n document.querySelector(id + \" input\").disabled = true;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = true;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = true;\n }\n }\n\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.getElementById(self._addUID(\"GPshowSearchByCoordinate\")).setAttribute(\"aria-pressed\", false);\n });\n\n return span;\n },\n\n /**\n * Show geolocate button\n *\n * @returns {DOMElement} DOM element\n */\n _createShowGeolocateElement : function () {\n // contexte d'execution\n var self = this;\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowGeolocate\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowGeolocate gpf-btn gpf-btn-icon-search-geolocate fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w\";\n button.title = \"Activer la géolocalisation\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n\n // Open advanced search\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n if (status) {\n // somme stuff...\n }\n self.onShowSearchGeolocateClick(e);\n });\n\n return button;\n },\n\n /**\n * Show search by coordinate button\n *\n * @returns {DOMElement} DOM element\n */\n _createShowSearchByCoordinateElement : function () {\n // contexte d'execution\n var self = this;\n\n var button = document.createElement(\"button\");\n button.id = this._addUID(\"GPshowSearchByCoordinate\");\n button.className = \"GPshowOpen GPshowAdvancedToolPicto GPshowSearchByCoordinate gpf-btn gpf-btn-icon-search-coordinate fr-btn fr-btn--secondary gpf-btn--secondary fr-m-1w\";\n button.title = \"Ouvrir la recherche par coordonnées\";\n button.setAttribute(\"tabindex\", \"0\");\n button.setAttribute(\"aria-pressed\", false);\n\n // Open advanced search\n button.addEventListener(\"click\", function (e) {\n var status = (e.target.ariaPressed === \"true\");\n e.target.setAttribute(\"aria-pressed\", !status);\n var id = \"#GPsearchInput-\" + self._uid;\n if (status) {\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.querySelector(id + \" input\").disabled = false;\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n } else {\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n document.querySelector(id + \" input\").disabled = true;\n document.querySelector(id + \" .GPsearchInputReset\").disabled = true;\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = true;\n }\n }\n\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).setAttribute(\"aria-pressed\", false);\n });\n\n return button;\n },\n\n\n\n // ################################################################### //\n // ################### Methods of advanced search #################### //\n // ################################################################### //\n\n /**\n * Advanced search panel\n *\n * FIXME\n * don't call this._createAdvancedSearchPanelHeaderElement\n * don't call this._createAdvancedSearchPanelFormElement\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchPanelElement : function () {\n var div = document.createElement(\"dialog\");\n div.id = this._addUID(\"GPadvancedSearchPanel\");\n div.className = \"GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal\";\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n // div.appendChild(this._createAdvancedSearchPanelHeaderElement ());\n // div.appendChild(this._createAdvancedSearchPanelFormElement ());\n\n return div;\n },\n\n _createAdvancedSearchPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Geocoding results\n *\n * FIXME\n * don't call this._createGeocodeResultsListElement\n *\n * @returns {DOMElement} DOM element\n */\n _createGeocodeResultsElement : function () {\n var div = document.createElement(\"dialog\");\n div.id = this._addUID(\"GPgeocodeResultsList\");\n div.className = \"GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal\";\n\n div.appendChild(this._createGeocodeResultsHeaderElement());\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n // div.appendChild(this._createGeocodeResultsListElement ());\n\n return div;\n },\n\n _createGeocodeResultsDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n /**\n * Autocompletion results\n *\n * FIXME\n * don't call this._createAutoCompleteListElement\n *\n * @returns {DOMElement} DOM element\n */\n _createAutoCompleteElement : function () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPautoCompleteList\");\n div.className = \"GPautoCompleteList GPelementHidden gpf-panel fr-modal gpf-hidden \"; // GPpanel ?\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n // div.appendChild(this._createAutoCompleteListElement ());\n\n return div;\n },\n\n /**\n * Coordinate search panel\n *\n * FIXME\n * don't call this._createCoordinateSearchPanelHeaderElement\n * don't call this._createCoordinateSearchPanelFormElement\n *\n * @returns {DOMElement} DOM element\n */\n _createCoordinateSearchPanelElement : function () {\n var div = document.createElement(\"dialog\");\n div.id = this._addUID(\"GPcoordinateSearchPanel\");\n div.className = \"GPpanel GPelementHidden gpf-panel gpf-hidden fr-modal\";\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n // div.appendChild(this._createCoordinateSearchPanelHeaderElement ());\n // div.appendChild(this._createCoordinateSearchPanelFormElement ());\n\n return div;\n },\n\n _createCoordinateSearchPanelDivElement : function () {\n var div = document.createElement(\"div\");\n div.className = \"gpf-panel__body fr-modal__body\";\n return div;\n },\n\n // ################################################################### //\n // ################### Autocompletion container ###################### //\n // ################################################################### //\n\n /**\n * Autocompletion results list.\n *\n * @returns {DOMElement} DOM element\n */\n _createAutoCompleteListElement : function () {\n // contexte d'execution\n var self = this;\n\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPautocompleteResults\");\n container.className = \"\";\n\n if (container.addEventListener) {\n container.addEventListener(\"click\", function (e) {\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }, false);\n } else if (container.attachEvent) {\n container.attachEvent(\"onclick\", function (e) {\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPautoCompleteList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n });\n }\n\n // Proposals are dynamically filled in Javascript by autocomplete or search service\n //
    ...
    \n\n return container;\n },\n\n _createAutoCompletedLocationContainer () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPautocompleteResultsLocation\");\n container.className = \"GPelementHidden gpf-hidden gpf-select\";\n container.size = 20;\n container.autofocus = true;\n return container;\n },\n _createAutoCompletedLocationTitleElement () {\n var container = document.getElementById(this._addUID(\"GPautocompleteResultsLocation\"));\n var label = document.createElement(\"p\");\n label.className = \"GPlabel GPlabelTitle gpf-label fr-label\";\n label.innerHTML = \"Lieux et adresses\";\n container.appendChild(label);\n },\n\n /**\n * Autocompletion result.\n * Proposals are dynamically filled in Javascript by autocomplete service\n *\n * TODO formaliser le contenu des reponse\n *\n * @param {Object} location - suggested or geocoded location results\n * @param {Number} id - ID\n */\n _createAutoCompletedLocationElement : function (location, id) {\n // contexte d'execution\n var self = this;\n\n var container = document.getElementById(this._addUID(\"GPautocompleteResultsLocation\"));\n\n var div = document.createElement(\"p\");\n div.id = this._addUID(\"AutoCompletedLocation_\" + id);\n div.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n var value = GeocodeUtils.getSuggestedLocationFreeform(location);\n div.innerHTML = value;\n div.title = value;\n if (div.addEventListener) {\n div.addEventListener(\"click\", function (e) {\n self.onAutoCompletedResultsItemClick(e);\n }, false);\n } else if (div.attachEvent) {\n div.attachEvent(\"onclick\", function (e) {\n self.onAutoCompletedResultsItemClick(e);\n });\n }\n\n container.appendChild(div);\n },\n\n _createSearchedSuggestContainer () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPautocompleteResultsSuggest\");\n container.className = \"GPelementHidden gpf-hidden gpf-select\";\n container.size = 6;\n container.autofocus = true;\n return container;\n },\n _createSearchedSuggestTitleElement () {\n var container = document.getElementById(this._addUID(\"GPautocompleteResultsSuggest\"));\n var label = document.createElement(\"p\");\n label.className = \"GPlabel GPlabelTitle gpf-label fr-label\";\n label.innerHTML = \"Cartes et données\";\n container.appendChild(label);\n },\n\n /**\n * Autocompletion result of search service.\n * Proposals are dynamically filled in Javascript by autocomplete service\n *\n *\n * @param {Object} suggest - suggested results\n * @param {Number} id - ID\n */\n _createSearchedSuggestElement : function (suggest, id) {\n // contexte d'execution\n var self = this;\n\n var container = document.getElementById(this._addUID(\"GPautocompleteResultsSuggest\"));\n\n var div = document.createElement(\"p\");\n div.id = this._addUID(\"AutoCompletedSuggest_\" + id);\n div.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n div.innerHTML = suggest.title + \" (\" + suggest.service + \")\";\n div.dataset.layer = suggest.name;\n div.title = `${suggest.description} (nom technique : ${suggest.name})`;\n if (div.addEventListener) {\n div.addEventListener(\"click\", function (e) {\n self.onSearchedResultsItemClick(e);\n }, false);\n } else if (div.attachEvent) {\n div.attachEvent(\"onclick\", function (e) {\n self.onSearchedResultsItemClick(e);\n });\n }\n\n container.appendChild(div);\n },\n\n // ################################################################### //\n // ############### Geocoding with advanced container ################# //\n // ################################################################### //\n\n /**\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchPanelHeaderElement : function () {\n // contexte d'execution\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = \"Recherche avancée\";\n container.appendChild(divTitle);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPadvancedSearchClose\");\n divClose.className = \"GPpanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer la recherche avancée\";\n\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n // document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).style.display = \"inline-block\";\n document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).setAttribute(\"aria-pressed\", false);\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n // document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).style.display = \"inline-block\";\n document.getElementById(self._addUID(\"GPshowAdvancedSearch\")).setAttribute(\"aria-pressed\", false);\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPadvancedSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n\n /**\n * @param {Object[]} advancedSearchCodes - codes\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchPanelFormElement : function (advancedSearchCodes) {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GPadvancedSearchForm\");\n form.className = \"gpf-panel__content fr-modal__content\";\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n // data\n var data = [];\n // liste des attributs de la ressource de geocodage\n var id = \"#GPadvancedSearchFilters-\" + self._uid;\n var matchesFilters = document.querySelectorAll(id + \" > div > div > input,select#category\");\n for (var i = 0; i < matchesFilters.length; i++) {\n var element = matchesFilters[i];\n data.push({\n key : element.name,\n value : element.value\n });\n }\n\n // gestionnaire d'evenement :\n // on récupère les valeurs de saisies pour requête sur le service de geocodage\n self.onGeocodingAdvancedSearchSubmit(e, data);\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-hidden\", \"gpf-visible\");\n\n return false;\n });\n\n var div = document.createElement(\"div\");\n div.className = \"GPflexInput gpf-flex-column \";\n\n var label = document.createElement(\"label\");\n label.className = \"GPadvancedSearchCodeLabel gpf-label fr-label\";\n label.innerHTML = \"Recherche par\";\n div.appendChild(label);\n\n var select = this._createAdvancedSearchFormCodeElement(advancedSearchCodes);\n div.appendChild(select);\n\n // FIXME on decompose la fonction pour les besoins du controle,\n // on ajoutera ces childs à la main...\n\n // var filters = this._createAdvancedSearchFormFiltersElement ();\n // form.appendChild(filters);\n\n // var input = this._createAdvancedSearchFormInputElement ();\n // form.appendChild(input);\n\n form.appendChild(div);\n\n return form;\n },\n\n /**\n * @param {Object[]} codes - codes\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFormCodeElement : function (codes) {\n // contexte d'execution\n var self = this;\n\n var select = document.createElement(\"select\");\n select.id = this._addUID(\"GPadvancedSearchCode\");\n select.title = \"Choisir un type de recherche\";\n select.className = \"GPadvancedSearchCode gpf-select fr-select\";\n select.addEventListener(\"change\", function (e) {\n // var idx = e.target.selectedIndex;\n // var value = e.target.options[idx].value;\n // gestionnaire d'evenement :\n // permet de recuperer des informations diverses...\n self.onGeocodingAdvancedSearchCodeChange(e);\n }, false);\n\n // liste statique au cas où des codes n'ont pas été passés en entrée\n if (!codes) {\n codes = [{\n id : \"PositionOfInterest\",\n title : \"Lieux/toponymes\"\n }, {\n id : \"StreetAddress\",\n title : \"Adresses\"\n }, {\n id : \"CadastralParcel\",\n title : \"Parcelles cadastrales\"\n }];\n }\n\n for (var i = 0; i < codes.length; i++) {\n var option = document.createElement(\"option\");\n option.value = codes[i].id;\n option.text = codes[i].title;\n select.appendChild(option);\n }\n\n return select;\n },\n\n /**\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFormInputElement : function () {\n var input = document.createElement(\"input\");\n input.type = \"submit\";\n input.id = this._addUID(\"GPadvancedSearchSubmit\");\n input.className = \"GPsubmit gpf-btn gpf-btn-icon-submit fr-btn fr-btn--secondary gpf-btn--secondary\";\n input.value = \"Chercher\";\n\n return input;\n },\n\n /**\n * Filters geocoding.\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFormFiltersElement : function () {\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPadvancedSearchFilters\");\n return container;\n },\n\n /**\n * Create filter container for resources :\n * \"PositionOfInterest\", \"StreetAddress\", ...\n *\n * @param {String} code - code of geocoding resource\n * @param {Boolean} display - display\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFiltersTableElement : function (code, display) {\n var container = document.createElement(\"div\");\n container.id = this._addUID(code);\n if (!display) {\n container.style.display = \"none\";\n }\n\n return container;\n },\n\n /**\n * Create filter attribut for a resource :\n * \"PositionOfInterest\", \"StreetAddress\", ...\n * Research filters are filled in Javascript depending on developer choice\n *\n * @param {Object} filterAttributes - filter attributes :\n * @param {String} filterAttributes.code - code of geocoding resource\n * @param {String} filterAttributes.name - ID\n * @param {String} filterAttributes.title - label\n * @param {String} filterAttributes.description - description\n * @param {String} filterAttributes.value - value\n *\n * @returns {DOMElement} DOM element\n */\n _createAdvancedSearchFiltersAttributElement : function (filterAttributes) {\n // INFORMATION\n // cette methode peut être appelée si le document n'existe pas, elle\n // permet ainsi de creer une div sans insertion dans le container...\n\n var container = null;\n var name = filterAttributes.name;\n var title = filterAttributes.title;\n var description = filterAttributes.description;\n var code = filterAttributes.code;\n var value = filterAttributes.value;\n\n var div = document.createElement(\"div\");\n div.className = \"GPflexInput gpf-flex-column \";\n\n var label = document.createElement(\"label\");\n label.className = \"GPadvancedSearchFilterLabel gpf-label fr-label\";\n label.htmlFor = name;\n label.title = description || title;\n label.innerHTML = title;\n div.appendChild(label);\n\n if (name === \"category\") {\n var select = document.createElement(\"select\");\n select.id = name;\n select.name = name;\n select.title = title;\n select.className = \"GPadvancedSearchFilterInput gpf-select fr-select\";\n if (value) {\n if (Array.isArray(value)) {\n for (var i = 0; i < value.length; i++) {\n var option = document.createElement(\"option\");\n option.value = value[i];\n option.text = value[i];\n select.appendChild(option);\n }\n }\n }\n div.appendChild(select);\n } else {\n var input = document.createElement(\"input\");\n input.id = name;\n input.className = \"GPadvancedSearchFilterInput gpf-input fr-input\";\n input.type = \"text\";\n input.name = name;\n if (value) {\n if (Array.isArray(value)) {\n var listId = name + \"_list\";\n input.setAttribute(\"list\", listId);\n var dl = document.createElement(\"datalist\");\n dl.id = listId;\n for (var i = 0; i < value.length; ++i) {\n var option = document.createElement(\"option\");\n option.value = value[i];\n dl.appendChild(option);\n }\n div.appendChild(dl);\n } else {\n input.value = value;\n }\n }\n div.appendChild(input);\n }\n\n container = document.getElementById(this._addUID(code));\n\n if (container) {\n container.appendChild(div);\n } else {\n // le container, c'est la div !\n container = div;\n }\n\n return container;\n },\n\n // ################################################################### //\n // ################## Geocoding results container #################### //\n // ################################################################### //\n\n /**\n * @returns {DOMElement} DOM element\n */\n _createGeocodeResultsHeaderElement : function () {\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = \"Résultats de la recherche\";\n container.appendChild(divTitle);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPgeocodeResultsClose\");\n divClose.className = \"GPpanelClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer la fenêtre de résultats\";\n\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n\n /**\n * Geocoding results list.\n *\n * @returns {DOMElement} DOM element\n */\n _createGeocodeResultsListElement : function () {\n // contexte d'execution\n var self = this;\n\n var container = document.createElement(\"div\");\n container.id = this._addUID(\"GPgeocodeResults\");\n container.className = \"gpf-panel__list\";\n container.setAttribute(\"tabindex\", \"0\");\n\n if (container.addEventListener) {\n container.addEventListener(\"click\", function (e) {\n if (!e.ctrlKey) {\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n self.onGeocodedResultsItemClick(e);\n }, false);\n } else if (container.attachEvent) {\n container.attachEvent(\"onclick\", function (e) {\n if (!e.ctrlKey) {\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPgeocodeResultsList\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n self.onGeocodedResultsItemClick(e);\n });\n }\n // Results are dynamically filled in Javascript by geocoding service\n //
    ...
    \n\n return container;\n },\n\n /**\n * Geocoding result.\n * Results are dynamically filled in Javascript by geocoding service\n *\n * TODO formaliser le contenu des reponses\n * FIXME formater la reponse en amont !\n *\n * @param {Object} location - suggested or geocoded location results\n * @param {Number} id - ID\n */\n _createGeocodedLocationElement : function (location, id) {\n var container = document.getElementById(this._addUID(\"GPgeocodeResults\"));\n\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GeocodedLocation_\" + id);\n div.className = \"GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine\";\n\n if (typeof location === \"string\") {\n div.innerHTML = location;\n } else {\n div.innerHTML = GeocodeUtils.getGeocodedLocationFreeform(location);\n }\n\n container.appendChild(div);\n },\n\n // ################################################################### //\n // ################## Coordinate search container #################### //\n // ################################################################### //\n\n _createCoordinateSearchPanelHeaderElement () {\n // contexte d'execution\n var self = this;\n\n var container = document.createElement(\"div\");\n container.className = \"GPpanelHeader gpf-panel__header fr-modal__header\";\n\n var divTitle = document.createElement(\"div\");\n divTitle.className = \"GPpanelTitle gpf-panel__title fr-modal__title fr-pt-4w\";\n divTitle.innerHTML = \"Recherche par coordonnées\";\n container.appendChild(divTitle);\n\n var divClose = document.createElement(\"button\");\n divClose.id = this._addUID(\"GPcoordinateSearchClose\");\n divClose.className = \"GPpanelClose GPcoordinateSearchClose gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w\";\n divClose.title = \"Fermer la recherche par coordonnées\";\n\n if (divClose.addEventListener) {\n divClose.addEventListener(\"click\", function () {\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n document.getElementById(self._addUID(\"GPshowSearchByCoordinate\")).setAttribute(\"aria-pressed\", false);\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n self.onCoordinateSearchClose();\n }, false);\n } else if (divClose.attachEvent) {\n divClose.attachEvent(\"onclick\", function () {\n var id = \"#GPsearchInput-\" + self._uid;\n document.querySelector(id + \" input\").disabled = false;\n // only if displayButtonClose option is set to true\n if (document.querySelector(id + \" .GPsearchInputReset\")) {\n document.querySelector(id + \" .GPsearchInputReset\").disabled = false;\n }\n if (checkDsfr()) {\n document.querySelector(\"#GPshowSearchEnginePicto-\" + self._uid).disabled = false;\n }\n document.getElementById(self._addUID(\"GPshowSearchByCoordinate\")).setAttribute(\"aria-pressed\", false);\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n document.getElementById(self._addUID(\"GPcoordinateSearchPanel\")).classList.replace(\"gpf-visible\", \"gpf-hidden\");\n self.onCoordinateSearchClose();\n });\n }\n\n var span = document.createElement(\"span\");\n span.className = \"GPelementHidden gpf-visible\"; // afficher en dsfr\n span.innerText = \"Fermer\";\n\n divClose.appendChild(span);\n\n container.appendChild(divClose);\n\n return container;\n },\n _createCoordinateSearchPanelFormElement () {\n // contexte d'execution\n var self = this;\n\n var form = document.createElement(\"form\");\n form.id = this._addUID(\"GPcoordinateSearchForm\");\n form.className = \"gpf-panel__content fr-modal__content\";\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n self.onShowSearchByCoordinateClick();\n return false;\n });\n\n return form;\n },\n\n __createCoordinateSearchDivElement () {\n var div = document.createElement(\"div\");\n div.className = \"GPflexInput gpf-flex-column \";\n return div;\n },\n\n _createCoordinateSearchSystemsLabelElement () {\n var label = document.createElement(\"label\");\n label.className = \"GPcoordinateSearchSystemsLabel gpf-label fr-label\";\n label.innerHTML = \"Système de référence\";\n return label;\n },\n _setCoordinateSearchSystemsSelectElement (systems) {\n if (document.getElementById(this._addUID(\"GPcoordinateSearchSystem\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchSystem\")).remove();\n }\n // contexte d'execution\n var context = this;\n\n var selectSystem = document.createElement(\"select\");\n selectSystem.id = this._addUID(\"GPcoordinateSearchSystem\");\n selectSystem.title = \"Choisir un système de réference\";\n selectSystem.className = \"GPselect GPcoordinateSearchSystemsSelect gpf-select fr-select\";\n selectSystem.addEventListener(\"change\", function (e) {\n context.onCoordinateSearchSystemChange(e);\n });\n\n for (var i = 0; i < systems.length; i++) {\n var obj = systems[i];\n var option = document.createElement(\"option\");\n option.value = obj.code;\n option.text = obj.label || i;\n // option.label = obj.label;\n selectSystem.appendChild(option);\n }\n\n return selectSystem;\n },\n\n _createCoordinateSearchUnitsLabelElement () {\n var label = document.createElement(\"label\");\n label.className = \"GPcoordinateSearchUnitsLabel gpf-label fr-label\";\n label.innerHTML = \"Unités\";\n return label;\n },\n _setCoordinateSearchUnitsSelectElement (units) {\n if (document.getElementById(this._addUID(\"GPcoordinateSearchUnits\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchUnits\")).remove();\n }\n // contexte d'execution\n var context = this;\n\n var selectUnits = document.createElement(\"select\");\n selectUnits.id = this._addUID(\"GPcoordinateSearchUnits\");\n selectUnits.title = \"Choisir un type d'unité\";\n selectUnits.className = \"GPselect GPcoordinateSearchUnitsSelect gpf-select fr-select\";\n selectUnits.addEventListener(\"change\", function (e) {\n context.onCoordinateSearchUnitsChange(e);\n });\n\n for (var j = 0; j < units.length; j++) {\n var obj = units[j];\n var option = document.createElement(\"option\");\n option.value = (obj.code) ? obj.code : j;\n option.text = obj.label || j;\n // option.label = obj.label;\n selectUnits.appendChild(option);\n }\n\n return selectUnits;\n },\n\n /**\n * update Label\n * @param {String} type - Geographical or Metric\n * @returns {DOMElement} label\n */\n _setCoordinateSearchLngLabelElement (type) {\n // type geographical ou metric\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLngLabel\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLngLabel\")).remove();\n }\n var labelLng = document.createElement(\"label\");\n labelLng.className = \"GPcoordinateSearchLabel gpf-label fr-label\";\n labelLng.id = this._addUID(\"GPcoordinateSearchLngLabel\");\n labelLng.htmlFor = \"coordinate-lng\";\n labelLng.innerHTML = (type === \"Geographical\") ? \"Longitude :\" : \"Y :\";\n\n return labelLng;\n },\n /**\n * update Input coordinate\n * @param {String} code - ex. DMS : degrés sexadecimaux\n * @returns {DOMElement} input\n */\n _setCoordinateSearchLngInputElement (code) {\n // code DMS ou other\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLngInput\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLngInput\")).remove();\n }\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLngDMS\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLngDMS\")).remove();\n }\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPcoordinateSearchLngInput\");\n input.className = \"GPcoordinateSearchInput gpf-input fr-input\";\n input.title = \"Saisir des coordonnées\";\n input.name = \"coordinate-lng\";\n input.type = \"number\";\n input.step = \"any\";\n input.required = \"\";\n switch (code) {\n case \"DMS\":\n input.title += \" géographiques (en sexa)\";\n input.className = \"GPelementHidden gpf-hidden\";\n return this._setCoordinateSearchLngDMSElement();\n break;\n case \"DEC\":\n input.title += \" géographiques (en decimal)\";\n input.min = \"-180\";\n input.max = \"180\";\n break;\n case \"M\":\n input.title += \" cartésiennes (en mètre)\";\n break;\n case \"KM\":\n input.title += \" cartésiennes (en kilomètre)\";\n break;\n default:\n break;\n }\n return input;\n },\n _setCoordinateSearchLngDMSElement () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPcoordinateSearchLngDMS\");\n div.innerHTML = `\n
    \n \n \n \n \n \n \n \n \n \n \n
    \n `;\n return div;\n },\n /**\n * update Label\n * @param {String} type - Geographical or Metric\n * @returns {DOMElement} label\n */\n _setCoordinateSearchLatLabelElement (type) {\n // type geographical ou metric\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLatLabel\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLatLabel\")).remove();\n }\n var labelLat = document.createElement(\"label\");\n labelLat.className = \"GPcoordinateSearchLabel gpf-label fr-label\";\n labelLat.id = this._addUID(\"GPcoordinateSearchLatLabel\");\n labelLat.htmlFor = \"coordinate-lat\";\n labelLat.innerHTML = (type === \"Geographical\") ? \"Latitude :\" : \"X :\";\n\n return labelLat;\n },\n /**\n * update Input coordinate\n * @param {String} code - ex. DMS : degrés sexadecimaux\n * @returns {DOMElement} input\n */\n _setCoordinateSearchLatInputElement (code) {\n // code DMS ou other\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLatInput\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLatInput\")).remove();\n }\n if (document.getElementById(this._addUID(\"GPcoordinateSearchLatDMS\"))) {\n document.getElementById(this._addUID(\"GPcoordinateSearchLatDMS\")).remove();\n }\n var input = document.createElement(\"input\");\n input.id = this._addUID(\"GPcoordinateSearchLatInput\");\n input.className = \"GPcoordinateSearchInput gpf-input fr-input\";\n input.title =\"Saisir des coordonnées\";\n input.name = \"coordinate-lat\";\n input.type = \"number\";\n input.step = \"any\";\n input.required = \"\";\n switch (code) {\n case \"DMS\":\n input.title += \" géographiques (en sexa)\";\n input.className = \"GPelementHidden gpf-hidden\";\n return this._setCoordinateSearchLatDMSElement();\n break;\n case \"DEC\":\n input.title += \" géographiques (en decimal)\";\n input.min = \"-180\";\n input.max = \"180\";\n break;\n case \"M\":\n input.title += \" cartésiennes (en mètre)\";\n break;\n case \"KM\":\n input.title += \" cartésiennes (en kilomètre)\";\n break;\n default:\n break;\n }\n return input;\n },\n _setCoordinateSearchLatDMSElement () {\n var div = document.createElement(\"div\");\n div.id = this._addUID(\"GPcoordinateSearchLatDMS\");\n div.innerHTML = `\n
    \n \n \n \n \n \n \n \n \n \n \n
    \n `;\n return div;\n },\n\n /**\n * submit\n * @returns {DOMElement} input\n */\n _createCoordinateSearchSubmitElement () {\n var input = document.createElement(\"input\");\n input.type = \"submit\";\n input.id = this._addUID(\"GPcoordinateSearchSubmit\");\n input.className = \"GPsubmit gpf-btn gpf-btn-icon-submit fr-btn fr-btn--secondary gpf-btn--secondary\";\n input.value = \"Chercher\";\n return input;\n },\n};\n\nexport default SearchEngineDOM;\n","// import CSS\nimport \"../../CSS/Controls/SearchEngine/GPFsearchEngine.css\";\n// import \"../../CSS/Controls/SearchEngine/GPFsearchEngineStyle.css\";\n// import OpenLayers\n// import Control from \"ol/control/Control\";\nimport Control from \"../Control\";\nimport Widget from \"../Widget\";\nimport Overlay from \"ol/Overlay\";\nimport {\n transform as olProjTransform,\n get as olProjGet,\n transformExtent as olProjTransformExtent\n} from \"ol/proj\";\n// import geoportal library access\nimport Gp from \"geoportal-access-lib\";\n// import local\nimport Config from \"../../Utils/Config\";\nimport Logger from \"../../Utils/LoggerByDefault\";\nimport Utils from \"../../Utils/Helper\";\nimport Markers from \"../Utils/Markers\";\nimport Interactions from \"../Utils/Interactions\";\nimport SelectorID from \"../../Utils/SelectorID\";\nimport MathUtils from \"../../Utils/MathUtils\";\nimport SearchEngineUtils from \"../../Utils/SearchEngineUtils\";\nimport GeocodeUtils from \"../../Utils/GeocodeUtils\";\nimport CRS from \"../../CRS/CRS\";\n// import local des layers\nimport GeoportalWMS from \"../../Layers/LayerWMS\";\nimport GeoportalWMTS from \"../../Layers/LayerWMTS\";\nimport GeoportalMapBox from \"../../Layers/LayerMapBox\";\n// Service\nimport Search from \"../../Services/Search\";\n// DOM\nimport SearchEngineDOM from \"./SearchEngineDOM\";\nimport checkDsfr from \"../Utils/CheckDsfr\";\n\nvar logger = Logger.getLogger(\"searchengine\");\n\n/**\n * @classdesc\n * SearchEngine control\n *\n * @constructor\n * @extends {ol.control.Control}\n * @type {ol.control.SearchEngine}\n * @alias ol.control.SearchEngine\n * @param {Object} options - control options\n * @param {Number} [options.id] - Ability to add an identifier on the widget (advanced option)\n * @param {String} [options.apiKey] - API key. The key \"calcul\" is used by default.\n * @param {Boolean} [options.ssl = true] - use of ssl or not (default true, service requested using https protocol)\n * @param {Boolean} [options.collapsed = true] - collapse mode, true by default\n * @param {Boolean} [options.collapsible = true] - force control to be collapsed or not, true by default.\n * @param {String} [options.direction = \"start\"] - TODO : position of picto, by default : \"start\"\n * @param {String} [options.placeholder] - Placeholder in search bar. Default is \"Rechercher un lieu, une adresse\".\n * @param {Boolean} [options.displayMarker = true] - set a marker on search result, defaults to true.\n * @param {String} [options.markerStyle = \"lightOrange\"] - Marker style. Currently possible values are \"lightOrange\" (default value), \"darkOrange\", \"red\" and \"turquoiseBlue\".\n * @param {String} [options.markerUrl = \"\"] - Marker url. By default, if not specified, use option markerStyle. Otherwise, you can added a http url or a base64 image.\n * @param {Boolean} [options.splitResults = true] - False to disable layers search\n * @param {Boolean} [options.displayButtonAdvancedSearch = false] - False to disable advanced search tools (it will not be displayed). Default is false (not displayed)\n * @param {Boolean} [options.displayButtonGeolocate = false] - False to disable advanced search tools (it will not be displayed). Default is false (not displayed)\n * @param {Boolean} [options.displayButtonCoordinateSearch = false] - False to disable advanced search tools (it will not be displayed). Default is false (not displayed)\n * @param {Boolean} [options.displayButtonClose = true] - False to disable advanced search tools (it will not be displayed). Default is true (displayed)\n * @param {Object} [options.coordinateSearch] - coordinates search options.\n * @param {DOMElement} [options.coordinateSearch.target = null] - TODO : target location of results window. By default under the search bar.\n * @param {Array} [options.coordinateSearch.units] - list of coordinates units, to be displayed in control units list.\n * Values may be \"DEC\" (decimal degrees), \"DMS\" (sexagecimal) for geographical coordinates,\n * and \"M\" or \"KM\" for metric coordinates\n * @param {Array} [options.coordinateSearch.systems] - list of projection systems, default are Geographical (\"EPSG:4326\"), Web Mercator (\"EPSG:3857\") and Lambert 93 (\"EPSG:2154\").\n * Each array element (=system) is an object with following properties :\n * @param {String} [options.coordinateSearch.systems.crs] - Proj4 crs alias (from proj4 defs). e.g. : \"EPSG:4326\". Required\n * @param {String} [options.coordinateSearch.systems.label] - CRS label to be displayed in control. Default is crs code (e.g. \"EPSG:4326\")\n * @param {String} [options.coordinateSearch.systems.type] - CRS units type for coordinates conversion : \"Geographical\" or \"Metric\". Default: \"Geographical\"\n * @param {Object} [options.advancedSearch] - advanced search options for geocoding (filters). Properties can be found among geocode options.filterOptions (see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~geocode Gp.Services.geocode})\n * @param {DOMElement} [options.advancedSearch.target = null] - TODO : target location of results window. By default under the search bar.\n * @param {Object} [options.resources] - resources to be used by geocode and autocompletion services :\n * @param {String} [options.resources.geocode = \"location\"] - resources geocoding, by default : \"location\"\n * @param {Array} [options.resources.autocomplete] - resources autocompletion, by default : [\"PositionOfInterest\", \"StreetAddress\"]\n * @param {Boolean} [options.resources.search = false] - false to disable search service, by default : \"false\"\n * @param {Object} [options.searchOptions = {}] - options of search service\n * @param {Boolean} [options.searchOptions.addToMap = true] - add layer automatically to map, defaults to true.\n * @param {String} [options.searchOptions.filterServices] - filter on a list of search services, each field is separated by a comma. \"WMTS,TMS\" by default\n * @param {String} [options.searchOptions.filterWMTSPriority] - filter on priority WMTS layer in search, each field is separated by a comma. \"PLAN.IGN,ORTHOIMAGERY.ORTHOPHOTOS\" by default\n * @param {Boolean} [options.searchOptions.filterLayersPriority = false] - filter on priority layers in search, false by default\n * @param {String} [options.searchOptions.filterVectortiles] - filter on list of search layers only on service TMS, each field is separated by a comma. \"PLAN.IGN, ...\" by default\n * @param {Boolean} [options.searchOptions.updateVectortiles = false] - updating the list of search layers only on service TMS\n * @param {Object} [options.searchOptions.serviceOptions] - options of search service\n * @param {Sring} [options.searchOptions.serviceOptions.url] - url of service\n * @param {String} [options.searchOptions.serviceOptions.index] - index of search, \"standard\" by default\n * @param {String} [options.searchOptions.serviceOptions.fields] - list of search fields, each field is separated by a comma. \"title,layer_name\" by default\n * @param {Number} [options.searchOptions.serviceOptions.size] - number of response in the service. 1000 by default\n * @param {Number} [options.searchOptions.serviceOptions.maximumResponses] - number of results in the response. 10 by default\n * @param {Object} [options.geocodeOptions = {}] - options of geocode service (see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~geocode Gp.Services.geocode})\n * @param {Object} [options.geocodeOptions.serviceOptions] - options of geocode service\n * @param {Object} [options.autocompleteOptions = {}] - options of autocomplete service (see {@link http://ignf.github.io/geoportal-access-lib/latest/jsdoc/module-Services.html#~autoComplete Gp.Services.autoComplete})\n * @param {Object} [options.autocompleteOptions.serviceOptions] - options of autocomplete service\n * @param {Boolean} [options.autocompleteOptions.triggerGeocode = false] - trigger a geocoding request if the autocompletion does not return any suggestions, false by default\n * @param {Number} [options.autocompleteOptions.triggerDelay = 1000] - waiting time before sending the geocoding request, 1000ms by default\n * @param {Number} [options.autocompleteOptions.maximumEntries] - maximum autocompletion results we want to display\n * @param {Boolean} [options.autocompleteOptions.prettifyResults = false] - apply a filter/prettifier function to clean or prettify autocomplete entries\n * @param {Sting|Numeric|Function} [options.zoomTo] - zoom to results, by default, current zoom.\n * Value possible : auto or zoom level.\n * Possible to overload it with a function :\n * zoomTo : function (info) {\n * // do some stuff...\n * return zoom;\n * }\n * @fires searchengine:autocomplete:click\n * @fires searchengine:geocode:click\n * @fires searchengine:search:click\n * @fires searchengine:geolocation:click\n * @fires searchengine:coordinates:click\n * @todo option : direction (start|end) de la position du picto (loupe)\n * @todo option : choix du target pour les fenetres geocodage ou recherche par coordonnées\n * @example\n * var SearchEngine = ol.control.SearchEngine({\n * apiKey : \"CLEAPI\",\n * collapsed : true,\n * collapsible : true,\n * displayButtonAdvancedSearch : true,\n * displayButtonGeolocate : true,\n * displayButtonCoordinateSearch : true,\n * markerStyle : \"lightOrange\" // \"http://...\" or \"data/base64...\"\n * resources : {\n * geocode : [\"StreetAddress\", \"PositionOfInterest\"],\n * autocomplete : [\"StreetAddress\"],\n * search : false\n * },\n * advancedSearch : {\n * target : document.getElementById(\"dialog\"),\n * PositionOfInterest : [{name : \"municipality\", title : \"Ville\"}],\n * StreetAddress : [{...}]\n * },\n * coordinateSearch : {\n * target : null\n * systems : [\n * {\n * \"crs\" : \"EPSG:3857\",\n * \"label\" : \"Web Mercator\",\n * \"type\" : \"Metric\"\n * },\n * {\n * \"crs\" : \"EPSG:4326\",\n * \"label\" : \"Géographiques\",\n * \"type\" : \"Geographical\"\n * }\n * ],\n * units : [\"DEC\", \"DMS\"]\n * },\n * geocodeOptions : {},\n * autocompleteOptions : {},\n * searchOptions : {}\n * });\n *\n * SearchEngine.on(\"searchengine:autocomplete:click\", function (e) {\n * console.warn(\"autocomplete\", e.location);\n * });\n * SearchEngine.on(\"searchengine:search:click\", function (e) {\n * console.warn(\"search\", e.suggest);\n * });\n * SearchEngine.on(\"searchengine:geocode:click\", function (e) {\n * console.warn(\"geocode\", e.location);\n * });\n * SearchEngine.on(\"searchengine:geolocation:click\", function (e) {\n * console.warn(\"geolocation\", e.);\n * });\n * SearchEngine.on(\"searchengine:coordinate:click\", function (e) {\n * console.warn(\"coordinate\", e.);\n * });\n */\nvar SearchEngine = class SearchEngine extends Control {\n\n /**\n * See {@link ol.control.SearchEngine}\n * @module SearchEngine\n * @alias module:~controls/SearchEngine\n * @param {*} options - options\n * @example\n * import SearchEngine from \"gpf-ext-ol/controls/SearchEngine\"\n * ou\n * import { SearchEngine } from \"gpf-ext-ol\"\n */\n constructor (options) {\n options = options || {};\n\n // call ol.control.Control constructor\n super(options);\n\n if (!(this instanceof SearchEngine)) {\n throw new TypeError(\"ERROR CLASS_CONSTRUCTOR\");\n }\n /**\n * Nom de la classe (heritage)\n * @private\n */\n this.CLASSNAME = \"SearchEngine\";\n // initialisation du composant\n this.initialize(options);\n\n // // Widget main DOM container\n this.container = this._initContainer();\n\n // ajout du container\n (this.element) ? this.element.appendChild(this.container) : this.element = this.container;\n\n return this;\n }\n\n // ################################################################### //\n // ##################### public methods ############################## //\n // ################################################################### //\n\n /**\n * Overwrite OpenLayers setMap method\n *\n * @param {ol.Map} map - Map.\n */\n setMap (map) {\n if (!map) {\n this._clearResults();\n }\n\n // mode \"collapsed\"\n if (!this.collapsed) {\n this._showSearchEngineButton.setAttribute(\"aria-pressed\", true);\n }\n\n // on appelle la méthode setMap originale d'OpenLayers\n super.setMap(map);\n\n // position\n if (this.options.position) {\n this.setPosition(this.options.position);\n }\n\n // reunion du bouton avec le précédent\n if (this.options.gutter === false) {\n this.getContainer().classList.add(\"gpf-button-no-gutter\");\n }\n }\n\n /**\n * Returns true if widget is collapsed (minimized), false otherwise\n *\n * @returns {Boolean} collapsed - true if widget is collapsed\n */\n getCollapsed () {\n return this.collapsed;\n }\n\n /**\n * Collapse or display widget main container\n *\n * @param {Boolean} collapsed - True to collapse widget, False to display it\n */\n setCollapsed (collapsed) {\n if (collapsed === undefined) {\n logger.log(\"[ERROR] SearchEngine:setCollapsed - missing collapsed parameter\");\n return;\n }\n\n if (!this.options.collapsible) {\n return; // on interdit le mode pliable !\n }\n\n if ((collapsed && this.collapsed) || (!collapsed && !this.collapsed)) {\n return;\n }\n\n this._showSearchEngineButton.click();\n this.collapsed = collapsed;\n }\n\n /**\n * Get locations data from geocode service\n *\n * @returns {Object} data - locations\n */\n getData () {\n return this._geocodedLocations;\n }\n\n /**\n * Get container\n *\n * @returns {DOMElement} container\n */\n getContainer () {\n return this.container;\n }\n // ################################################################### //\n // ##################### init component ############################## //\n // ################################################################### //\n\n /**\n * Initialize SearchEngine control (called by SearchEngine constructor)\n *\n * @param {Object} options - constructor options\n * @private\n */\n initialize (options) {\n this._checkInputOptions(options);\n\n // define default options\n this.options = {\n collapsed : true,\n collapsible : true,\n zoomTo : \"\",\n resources : {\n geocode : [],\n autocomplete : [],\n search : false\n },\n displayButtonClose : true,\n displayButtonAdvancedSearch : false,\n displayButtonGeolocate : false,\n displayButtonCoordinateSearch : false,\n advancedSearch : {},\n coordinateSearch : {},\n searchOptions : {\n addToMap : true,\n serviceOptions : {\n maximumResponses : 5,\n }\n },\n geocodeOptions : {\n serviceOptions : {}\n },\n autocompleteOptions : {\n serviceOptions : {\n maximumResponses : 5,\n },\n triggerGeocode : false,\n triggerDelay : 1000,\n prettifyResults : false\n },\n displayMarker : true,\n markerStyle : \"lightOrange\",\n markerUrl : \"\",\n placeholder : \"Rechercher un lieu, une adresse\",\n splitResults : true,\n };\n\n // merge with user options\n Utils.mergeParams(this.options, options);\n if (this.options.resources.geocode === \"\") {\n this.options.resources.geocode = [\"PositionOfInterest\", \"StreetAddress\"];\n }\n if (this.options.resources.autocomplete.length === 0) {\n this.options.resources.autocomplete = [\"PositionOfInterest\", \"StreetAddress\"];\n }\n if (this.options.resources.search) {\n // configuration avec gestion des options surchargées du service\n if (this.options.searchOptions) {\n if (this.options.searchOptions.serviceOptions) {\n if (this.options.searchOptions.serviceOptions.url) {\n Search.setUrl(this.options.searchOptions.serviceOptions.url);\n }\n if (this.options.searchOptions.serviceOptions.fields) {\n Search.setFields(this.options.searchOptions.serviceOptions.fields);\n }\n if (this.options.searchOptions.serviceOptions.index) {\n Search.setIndex(this.options.searchOptions.serviceOptions.index);\n }\n if (this.options.searchOptions.serviceOptions.size) {\n Search.setSize(this.options.searchOptions.serviceOptions.size);\n }\n if (this.options.searchOptions.serviceOptions.maximumResponses) {\n Search.setMaximumResponses(this.options.searchOptions.serviceOptions.maximumResponses);\n }\n }\n if (this.options.searchOptions.filterServices) {\n Search.setFiltersByService(this.options.searchOptions.filterServices);\n }\n if (this.options.searchOptions.filterLayersPriority) {\n Search.setFiltersByLayerPriority(this.options.searchOptions.filterLayersPriority);\n }\n if (this.options.searchOptions.filterWMTSPriority) {\n Search.setFilterWMTSPriority(this.options.searchOptions.filterWMTSPriority);\n }\n if (this.options.searchOptions.filterVectortiles) {\n Search.setFiltersByTMS(this.options.searchOptions.filterVectortiles);\n }\n if (this.options.searchOptions.updateVectortiles) {\n Search.updateFilterByTMS(); // url par defaut\n }\n }\n // abonnement au service\n Search.target.addEventListener(\"suggest\", (e) => {\n logger.debug(e);\n this._fillSearchedSuggestListContainer(e.detail);\n });\n }\n\n if (!this.options.collapsible) {\n this.options.collapsed = false; // on interdit le mode pliable !\n }\n /** {Boolean} specify if searchEngine control is collapsed (true) or not (false) */\n this.collapsed = this.options.collapsed;\n\n // identifiant du contrôle : utile pour suffixer les identifiants CSS (pour gérer le cas où il y en a plusieurs dans la même page)\n this._uid = this.options.id || SelectorID.generate();\n\n this._showSearchEngineButton = null;\n\n // container de l'input de recherche\n this._inputSearchContainer = null;\n\n // container des reponses de l'autocompletion / du service de recherche\n this._autocompleteContainer = null;\n this._containerResultsLocation = null;\n this._containerResultsSuggest = null;\n // Radio buttons correspondants\n this._radioButtonLocation = null;\n this._radioButtonSuggest = null;\n\n // listes des reponses de l'autocompletion\n this._suggestedLocations = [];\n\n // container des reponses du geocodage\n this._geocodedContainer = null;\n\n // liste des reponses du geocodage\n this._geocodedLocations = [];\n\n // container des filtres du geocodage\n this._filterContainer = null;\n\n // ressource de geocodage selectionnée pour le geocodage avancé\n this._currentGeocodingCode = null;\n\n // localisant\n this._currentGeocodingLocation = null;\n\n // liste des filtres du geocodage pour le geocodage avancé\n this._advancedSearchFilters = {};\n this._initAdvancedSearchFilters();\n\n // liste des ressources du geocodage pour le geocodage avancé\n this._advancedSearchCodes = [];\n this._initAdvancedSearchCodes();\n\n // recherche par coordonnées : systemes de projections\n this._coordinateSearchSystems = [];\n if (this.options.displayButtonCoordinateSearch) {\n this._initCoordinateSearchSystems();\n this._currentCoordinateSearchSystems = this._coordinateSearchSystems[0]; // epsg:4326\n this._currentCoordinateSearchType = this._coordinateSearchSystems[0].type; // geographical ou metric\n }\n\n // recherche par coordonnées : unités\n this._coordinateSearchUnits = [];\n if (this.options.displayButtonCoordinateSearch) {\n this._initCoordinateSearchUnits();\n this._currentCoordinateSearchUnits = this._coordinateSearchUnits[this._currentCoordinateSearchType][0].code; // decimal\n }\n\n\n this._coordinateSearchLngInput = null;\n this._coordinateSearchLatInput = null;\n\n // marker\n this._marker = null;\n\n // marker style or url\n var _markerStyle = this.options.markerStyle;\n var _markerUrl = this.options.markerUrl;\n if (_markerUrl) {\n this._markerUrl = _markerUrl;\n } else {\n this._markerUrl = (Object.keys(Markers).indexOf(_markerStyle) === -1) ? Markers[\"lightOrange\"] : Markers[_markerStyle];\n }\n\n // marker display\n this._displayMarker = this.options.displayMarker;\n\n // popup\n this._popupContent = null;\n this._popupDiv = this._initPopupDiv();\n this._popupOverlay = null;\n\n // trigger geocode\n this._triggerHandler = null;\n }\n\n /**\n * this method is called by this.initialize()\n * and makes sure input options are correctly formated\n *\n * @param {Object} options - options\n *\n * @private\n */\n _checkInputOptions (options) {\n var i;\n\n if (options.resources) {\n // on vérifie que resources est bien un objet\n if (typeof options.resources === \"object\") {\n // ressources de geocodage\n var geocodeResources = options.resources.geocode;\n if (geocodeResources) {\n // on vérifie que la liste des ressources de geocodage est bien un tableau\n if (Array.isArray(geocodeResources)) {\n var geocodeResourcesList = [\"StreetAddress\", \"PositionOfInterest\", \"CadastralParcel\", \"Administratif\"];\n for (i = 0; i < geocodeResources.length; i++) {\n if (geocodeResourcesList.indexOf(geocodeResources[i]) === -1) {\n // si la resource n'est pas référencée, on l'enlève\n // geocodeResources.splice(i, 1);\n logger.log(\"[SearchEngine] options.resources.geocode : \" + geocodeResources[i] + \" is not a resource for geocode\");\n }\n }\n } else {\n logger.log(\"[SearchEngine] 'options.resources.geocode' parameter should be an array\");\n geocodeResources = null;\n }\n }\n\n // ressources d'autocompletion\n var autocompleteResources = options.resources.autocomplete;\n if (autocompleteResources) {\n // on vérifie que la liste des ressources d'autocompletion est bien un tableau\n if (Array.isArray(autocompleteResources)) {\n var autocompleteResourcesList = [\"StreetAddress\", \"PositionOfInterest\"];\n for (i = 0; i < autocompleteResources.length; i++) {\n if (autocompleteResourcesList.indexOf(autocompleteResources[i]) === -1) {\n // si la resource n'est pas référencée, on l'enlève\n // autocompleteResources.splice(i, 1);\n logger.log(\"[SearchEngine] options.resources.autocomplete : \" + autocompleteResources[i] + \" is not a resource for autocomplete\");\n }\n }\n } else {\n logger.log(\"[SearchEngine] 'options.resources.autocomplete' parameter should be an array\");\n autocompleteResources = null;\n }\n }\n } else {\n logger.log(\"[SearchEngine] 'resources' parameter should be an object\");\n options.resources = null;\n }\n }\n }\n\n /**\n * this method is called by this.initialize()\n * and initialize the geocoding resources titles.\n *\n * @private\n */\n _initAdvancedSearchCodes () {\n // INFORMATION\n // on y ajoute les filtres attributaires pour une table de ressources\n // selectionnée via un evenement (onchange) de la liste deroulante du\n // menu avancé du geocodage.\n // cf. onGeocodingAdvancedSearchCodeChange() pour la selection de la\n // ressource de geocodage à afficher\n\n var geocodeResources = this.options.resources.geocode;\n if (geocodeResources === \"location\") {\n geocodeResources = [\"PositionOfInterest\", \"StreetAddress\", \"CadastralParcel\"];\n }\n if (!Array.isArray(geocodeResources)) {\n geocodeResources = [geocodeResources];\n }\n for (var i = 0; i < geocodeResources.length; i++) {\n switch (geocodeResources[i]) {\n case \"PositionOfInterest\":\n this._advancedSearchCodes.push({\n id : \"PositionOfInterest\",\n title : \"Lieux/toponymes\"\n });\n break;\n case \"StreetAddress\":\n this._advancedSearchCodes.push({\n id : \"StreetAddress\",\n title : \"Adresses\"\n });\n break;\n case \"CadastralParcel\":\n this._advancedSearchCodes.push({\n id : \"CadastralParcel\",\n title : \"Parcelles cadastrales\"\n });\n break;\n default:\n break;\n }\n }\n // par défaut, au cas où aucune ressource passée en option ne correspond à celles attendues\n if (this._advancedSearchCodes.length === 0) {\n this._advancedSearchCodes = [{\n id : \"StreetAddress\",\n title : \"Adresses\"\n }, {\n id : \"PositionOfInterest\",\n title : \"Lieux/toponymes\"\n }, {\n id : \"CadastralParcel\",\n title : \"Cadastre\"\n }];\n }\n\n logger.log(\"advancedSearchCodes\", this._advancedSearchCodes);\n }\n\n /**\n * this method is called by this.onAdd()\n * and initialize the advanced geocoding filters.\n *\n * @private\n */\n _initAdvancedSearchFilters () {\n // liste des filtres par defauts pour toutes les ressources\n this._advancedSearchFilters = SearchEngineUtils.advancedSearchFiltersByDefault;\n\n // on merge les options avancées avec celles par defaut\n var advancedSearchFiltersCustom = this.options.advancedSearch;\n Utils.assign(this._advancedSearchFilters, advancedSearchFiltersCustom);\n\n logger.log(\"advancedSearchFilters\", this._advancedSearchFilters);\n }\n\n /**\n * this method is called by the constructor and initialize the projection\n * systems.\n * getting coordinates in the requested projection :\n * see this.onCoordinateSearchSystemChange()\n *\n * @private\n */\n _initCoordinateSearchSystems () {\n // on donne la possibilité à l'utilisateur de modifier\n // la liste des systèmes à afficher\n // Ex. this.options.coordinateSearch.systems\n\n // systemes de projection disponible par defaut\n var projectionSystemsByDefault = [{\n label : \"G\\u00e9ographique\",\n crs : \"EPSG:4326\",\n type : \"Geographical\"\n }, {\n label : \"Web Mercator\",\n crs : \"EPSG:3857\",\n type : \"Metric\"\n }, {\n label : \"Lambert 93\",\n crs : \"EPSG:2154\",\n type : \"Metric\"\n }];\n\n var systems = this.options.coordinateSearch.systems;\n if (systems) {\n // on ajoute les definitions d'un systeme de reference fournies par l'utilisateur\n for (var i = 0; i < systems.length; i++) {\n var sys = systems[i];\n this._setSystem(sys);\n }\n }\n\n // on ajoute les systèmes de projections par défaut\n if (this._coordinateSearchSystems.length === 0) {\n for (var j = 0; j < projectionSystemsByDefault.length; j++) {\n this._setSystem(projectionSystemsByDefault[j]);\n }\n }\n }\n\n /**\n * this method is called by the constructor and initialize the units.\n * getting coordinates in the requested units :\n * see this.onCoordinateSearchUnitsChange()\n *\n * @private\n */\n _initCoordinateSearchUnits () {\n // on donne la possibilité à l'utilisateur de modifier\n // la liste des unités à afficher\n // Ex.\n // this.options.units : [\"DEC\", \"DMS\"]\n\n // unités disponible par defaut\n var projectionUnitsByDefault = {\n Geographical : [{\n code : \"DEC\",\n label : \"degrés décimaux\",\n format : MathUtils.coordinateToDecimal\n }, {\n code : \"DMS\",\n label : \"degrés sexagésimaux\",\n format : MathUtils.coordinateToDMS\n }],\n Metric : [{\n code : \"M\",\n label : \"mètres\",\n format : MathUtils.coordinateToMeter\n }, {\n code : \"KM\",\n label : \"kilomètres\",\n format : MathUtils.coordinateToKMeter\n }]\n };\n\n var units = this.options.coordinateSearch.units;\n if (units) {\n for (var type in projectionUnitsByDefault) {\n if (projectionUnitsByDefault.hasOwnProperty(type)) {\n var found = false;\n for (var j = 0; j < projectionUnitsByDefault[type].length; j++) {\n var obj = projectionUnitsByDefault[type][j];\n for (var i = 0; i < units.length; i++) {\n var unit = units[i];\n if (obj.code === unit) {\n found = true;\n if (!this._coordinateSearchUnits[type]) {\n this._coordinateSearchUnits[type] = [];\n }\n this._coordinateSearchUnits[type].push(obj);\n }\n }\n }\n if (!found) {\n this._coordinateSearchUnits[type] = projectionUnitsByDefault[type];\n }\n }\n }\n }\n\n // au cas où...\n if (typeof this._coordinateSearchUnits === \"object\" && Object.keys(this._coordinateSearchUnits).length === 0) {\n this._coordinateSearchUnits = projectionUnitsByDefault;\n }\n }\n\n /**\n * this method is called by this.initialize() and initialize popup div\n * (to display results information on marker click)\n *\n * @return {Object} element - DOM element for popup\n * @private\n */\n _initPopupDiv () {\n var context = this;\n var element = document.createElement(\"div\");\n element.className = \"gp-feature-info-div gpf-widget-color\";\n // bouton de fermeture de la pop-up\n var closer = document.createElement(\"button\");\n closer.title = \"Fermer la pop-up\";\n closer.className = \"gp-styling-button closer gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-mt-1v fr-mr-2v\";\n\n // on closer click : remove popup\n closer.onclick = function () {\n if (context._popupOverlay != null) {\n context._popupOverlay.setPosition(undefined);\n }\n return false;\n };\n this._popupContent = document.createElement(\"div\");\n this._popupContent.className = \"gp-features-content-div\";\n this._popupContent.style[\"min-width\"] = \"200px\";\n element.appendChild(this._popupContent);\n element.appendChild(closer);\n\n return element;\n }\n\n // ################################################################### //\n // ######################## DOM initialize ########################### //\n // ################################################################### //\n\n /**\n * Create control main container\n *\n * @returns {DOMElement} DOM element\n *\n * @private\n */\n _initContainer () {\n // create main container\n var container = this._createMainContainerElement();\n\n var searchDiv = this._createSearchDivElement();\n // create search engine picto\n var picto = this._showSearchEngineButton = this._createShowSearchEnginePictoElement(this.options.collapsible);\n searchDiv.appendChild(picto);\n\n // only dsfr : on applique un fond blanc sur une barre de recherche fixe\n if (!this.options.collapsible) {\n container.classList.add(\"gpf-widget-color\", \"gpf-widget-padding\");\n }\n\n var search = this._inputSearchContainer = this._createSearchInputElement(this.options.placeholder);\n if (this.options.displayButtonClose) {\n search.appendChild(this._createSearchResetElement());\n }\n\n var context = this;\n if (search.addEventListener) {\n search.addEventListener(\"click\", function () {\n context.onAutoCompleteInputClick();\n });\n } else if (search.attachEvent) {\n search.attachEvent(\"onclick\", function () {\n context.onAutoCompleteInputClick();\n });\n }\n searchDiv.appendChild(search);\n\n var buttonsContainer = this._createButtonsElement();\n var firstLineWrapper = this._createFirstLineWrapper();\n firstLineWrapper.appendChild(searchDiv);\n firstLineWrapper.appendChild(buttonsContainer);\n container.appendChild(firstLineWrapper);\n\n if (checkDsfr() && this.options.splitResults || this.options.displayButtonAdvancedSearch) {\n var radioContainer = this._createRadioContainer();\n container.appendChild(radioContainer);\n }\n\n if (checkDsfr() && this.options.splitResults) {\n var radioElements;\n [radioElements, this._radioButtonLocation, this._radioButtonSuggest] = this._createRadioElements();\n radioContainer.appendChild(radioElements);\n }\n\n if (this.options.displayButtonAdvancedSearch) {\n var advancedShow = this._createShowAdvancedSearchElement();\n radioContainer.appendChild(advancedShow);\n\n // INFO je decompose les appels car j'ai besoin de recuperer le container\n // des filtres\n var advancedPanel = this._createAdvancedSearchPanelElement();\n var advancedPanelDiv = this._createAdvancedSearchPanelDivElement();\n var advancedHeader = this._createAdvancedSearchPanelHeaderElement();\n var advancedForm = this._createAdvancedSearchPanelFormElement(this._advancedSearchCodes);\n var advancedFormFilters = this._filterContainer = this._createAdvancedSearchFormFiltersElement();\n this._setFilter(this._advancedSearchCodes[0].id); // ex \"PositionOfInterest\"\n var advancedFormInput = this._createAdvancedSearchFormInputElement();\n\n advancedForm.appendChild(advancedFormFilters);\n advancedForm.appendChild(advancedFormInput);\n advancedPanelDiv.appendChild(advancedHeader);\n advancedPanelDiv.appendChild(advancedForm);\n advancedPanel.appendChild(advancedPanelDiv);\n container.appendChild(advancedPanel);\n }\n\n if (this.options.displayButtonGeolocate) {\n var geolocateShow = this._createShowGeolocateElement();\n buttonsContainer.appendChild(geolocateShow);\n }\n\n if (this.options.displayButtonCoordinateSearch) {\n var searchByCoordinateShow = this._createShowSearchByCoordinateElement();\n buttonsContainer.appendChild(searchByCoordinateShow);\n\n var coordinatePanel = this._createCoordinateSearchPanelElement();\n var coordinatePanelDiv = this._createCoordinateSearchPanelDivElement();\n var coordinateHeader = this._createCoordinateSearchPanelHeaderElement();\n var coordinateForm = this._createCoordinateSearchPanelFormElement();\n\n var div = null;\n div = this._containerSystems = this.__createCoordinateSearchDivElement();\n coordinateForm.appendChild(div);\n var labelSystems = this._createCoordinateSearchSystemsLabelElement();\n var systems = this._setCoordinateSearchSystemsSelectElement(this._coordinateSearchSystems);\n div.appendChild(labelSystems);\n div.appendChild(systems);\n\n div = this._containerUnits = this.__createCoordinateSearchDivElement();\n coordinateForm.appendChild(div);\n var labelUnits = this._createCoordinateSearchUnitsLabelElement();\n var units = this._setCoordinateSearchUnitsSelectElement(this._coordinateSearchUnits[this._currentCoordinateSearchType]);\n div.appendChild(labelUnits);\n div.appendChild(units);\n\n div = this._containerCoordinateLng = this.__createCoordinateSearchDivElement();\n coordinateForm.appendChild(div);\n var coordinateLng = this._setCoordinateSearchLngLabelElement(this._currentCoordinateSearchType);\n var coordinateInputLng = this._coordinateSearchLngInput = this._setCoordinateSearchLngInputElement(this._currentCoordinateSearchUnits);\n div.appendChild(coordinateLng);\n div.appendChild(coordinateInputLng);\n\n div = this._containerCoordinateLat = this.__createCoordinateSearchDivElement();\n coordinateForm.appendChild(div);\n var coordinateLat = this._setCoordinateSearchLatLabelElement(this._currentCoordinateSearchType);\n var coordinateInputLat = this._coordinateSearchLatInput = this._setCoordinateSearchLatInputElement(this._currentCoordinateSearchUnits);\n div.appendChild(coordinateLat);\n div.appendChild(coordinateInputLat);\n\n var submit = this._createCoordinateSearchSubmitElement();\n coordinateForm.appendChild(submit);\n\n coordinatePanelDiv.appendChild(coordinateHeader);\n coordinatePanelDiv.appendChild(coordinateForm);\n\n coordinatePanel.appendChild(coordinatePanelDiv);\n container.appendChild(coordinatePanel);\n }\n\n // INFO je decompose les appels car j'ai besoin de recuperer le container\n // des resultats de l'autocompletion\n var autocomplete = this._autocompleteContainer = this._createAutoCompleteElement();\n var autocompleteList = this._createAutoCompleteListElement();\n var containerResultsLocation = this._containerResultsLocation = this._createAutoCompletedLocationContainer();\n var containerResultsSuggest = this._containerResultsSuggest = this._createSearchedSuggestContainer();\n autocompleteList.appendChild(containerResultsLocation);\n autocompleteList.appendChild(containerResultsSuggest);\n autocomplete.appendChild(autocompleteList);\n container.appendChild(autocomplete);\n\n // INFO je decompose les appels car j'ai besoin de recuperer le container\n // des resultats du geocodage\n var geocode = this._createGeocodeResultsElement();\n var geocodeDiv = this._createGeocodeResultsDivElement();\n geocode.appendChild(geocodeDiv);\n var geocodeList = this._geocodedContainer = this._createGeocodeResultsListElement();\n geocodeDiv.appendChild(geocodeList);\n container.appendChild(geocode);\n\n return container;\n }\n\n /**\n * this method is called by :\n * - this._initContainer() : ...\n * - this.onGeocodingAdvancedSearchCodeChoice() : ...\n * and initialize or create the filters container HTMLElement\n * to the geocoding advanced menu.\n *\n * @param {String} code - resource geocoding name\n *\n * @returns {DOMElement} DOM element\n * @private\n */\n _setFilter (code) {\n // INFORMATION\n // Nous avons 2 solutions possibles pour la mise en place des filtres.\n // 1. Soit on decide de creer tous les filtres pour chaque ressource\n // de geocodage à l'initialisation du composant, et on joue sur le\n // mode 'hidden' pour n'afficher que la ressource selectionnée.\n // 2. Soit on decide de creer à chaque fois les filtres pour la\n // ressource selectionnée.\n // Chaque solution a ses inconvenients/avantages.\n // Implementation du choix 2 car elle offre plus de souplesse pour\n // recuperer les 'form-data'...\n\n var container = this._filterContainer;\n\n var codeFound = false;\n for (var i = 0; i < this._advancedSearchCodes.length; i++) {\n if (this._advancedSearchCodes[i].id === code) {\n codeFound = true;\n break;\n }\n }\n\n if (!codeFound) {\n // cette ressource n'est pas disponible,\n // on supprime les anciens enfants...\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n return;\n }\n\n // on sauvegarde la ressource de geocodage sélectionnée\n this._currentGeocodingCode = code;\n\n // on supprime les enfants...\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n\n var lstAttributs = this._advancedSearchFilters[code];\n if (!lstAttributs || lstAttributs.length === 0) {\n // cette ressource n'est pas parametrable\n return;\n }\n\n var divTable = this._createAdvancedSearchFiltersTableElement(code, true);\n\n for (var j = 0; j < lstAttributs.length; j++) {\n var divFilter = this._createAdvancedSearchFiltersAttributElement(lstAttributs[j]);\n divTable.appendChild(divFilter);\n }\n\n container.appendChild(divTable);\n\n return container;\n }\n\n // ################################################################### //\n // ################ methods to request and results ################### //\n // ################################################################### //\n\n /**\n * this method is called by this.onAutoCompleteSearch()\n * and executes a request to the service.\n *\n * @param {Object} settings - service settings\n * @param {String} settings.text - text\n * @param {Function} settings.onSuccess - callback\n * @param {Function} settings.onFailure - callback\n * @private\n */\n _requestAutoComplete (settings) {\n // on ne fait pas de requête si on n'a pas renseigné de parametres !\n if (!settings || (typeof settings === \"object\" && Object.keys(settings).length === 0)) {\n return;\n }\n\n // on ne fait pas de requête si la parametre 'text' est vide !\n if (!settings.text) {\n return;\n }\n\n logger.log(settings);\n\n var options = {};\n // on recupere les options du service\n Utils.assign(options, this.options.autocompleteOptions.serviceOptions);\n // ainsi que la recherche et les callbacks\n Utils.assign(options, settings);\n\n // on ajoute le paramètre filterOptions.type spécifiant les ressources.\n var resources = this.options.resources.autocomplete;\n if (resources && Array.isArray(resources)) {\n // il se peut que l'utilisateur ait surchargé ce paramètre dans geocodeOptions,\n if (!options.type) {\n options.type = resources;\n }\n }\n\n // cas où la clef API n'est pas renseignée dans les options du service,\n // on utilise celle renseignée au niveau du controle ou la clé \"calcul\" par défaut.\n options.apiKey = options.apiKey || this.options.apiKey;\n\n // si l'utilisateur a spécifié le paramètre ssl au niveau du control, on s'en sert\n // true par défaut (https)\n if (typeof options.ssl !== \"boolean\") {\n if (typeof this.options.ssl === \"boolean\") {\n options.ssl = this.options.ssl;\n } else {\n options.ssl = true;\n }\n }\n logger.log(options);\n\n Gp.Services.autoComplete(options);\n }\n\n /**\n * this method is called by this.onAutoCompleteSearchText() (case of success)\n * and fills the container of the location list.\n * it creates a HTML Element per location\n *\n * @param {Array} locations - Array of Gp.Services.AutoComplete.SuggestedLocation corresponding to autocomplete results list\n * @private\n */\n _fillAutoCompletedLocationListContainer (locations) {\n if (!locations || locations.length === 0) {\n return;\n }\n\n // on vide la liste avant de la construire\n var element = this._containerResultsLocation;\n if (element.childElementCount) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n element.classList.add(\"GPelementHidden\", \"gpf-hidden\");\n if (locations.length) {\n if (!this._radioButtonLocation || (this._radioButtonLocation && this._radioButtonLocation.checked)) {\n element.classList.remove(\"GPelementHidden\", \"gpf-hidden\");\n }\n this._displaySuggestedLocation();\n if (!checkDsfr() || !this.options.splitResults) {\n this._createAutoCompletedLocationTitleElement();\n }\n for (var i = 0; i < locations.length; i++) {\n // Proposals are dynamically filled in Javascript by autocomplete service\n this._createAutoCompletedLocationElement(locations[i], i);\n }\n }\n }\n\n /**\n * this method is called by this.() (case of success)\n * and fills the container of the suggest list.\n * it creates a HTML Element per suggest\n *\n * @param {Array} suggests - Array of suggested corresponding to search results list\n * @private\n */\n _fillSearchedSuggestListContainer (suggests) {\n // on vide la liste avant de la construire\n var element = this._containerResultsSuggest;\n if (element.childElementCount) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n element.classList.add(\"GPelementHidden\", \"gpf-hidden\");\n if (suggests.length) {\n if (!this._radioButtonSuggest || (this._radioButtonSuggest && this._radioButtonSuggest.checked)) {\n element.classList.remove(\"GPelementHidden\", \"gpf-hidden\");\n }\n if (!checkDsfr() || !this.options.splitResults) {\n this._createSearchedSuggestTitleElement();\n }\n for (let i = 0; i < suggests.length; i++) {\n const suggest = suggests[i];\n this._createSearchedSuggestElement(suggest, i);\n }\n }\n }\n\n /**\n * this method is called by this.onAutoCompleteSearch()\n * and executes a request to the service.\n *\n * @param {Object} settings - service settings\n * @param {String} settings.location - text\n * @param {Function} settings.onSuccess - callback\n * @param {Function} settings.onFailure - callback\n * @private\n */\n _requestGeocoding (settings) {\n // on ne fait pas de requête si on n'a pas renseigné de parametres !\n if (!settings || (typeof settings === \"object\" && Object.keys(settings).length === 0)) {\n return;\n }\n\n // on ne fait pas de requête si la parametre 'text' est vide !\n if (settings.query === null) {\n return;\n }\n\n logger.log(settings);\n\n var options = {};\n // on recupere les options du service\n Utils.assign(options, this.options.geocodeOptions.serviceOptions);\n // ainsi que la recherche et les callbacks\n Utils.assign(options, settings);\n // on redefinie les callbacks si les callbacks de service existent\n var self = this;\n var bOnFailure = !!(this.options.geocodeOptions.serviceOptions.onFailure !== null && typeof this.options.geocodeOptions.serviceOptions.onFailure === \"function\"); // cast variable to boolean\n var bOnSuccess = !!(this.options.geocodeOptions.serviceOptions.onSuccess !== null && typeof this.options.geocodeOptions.serviceOptions.onSuccess === \"function\");\n if (bOnSuccess) {\n var cbOnSuccess = function (e) {\n settings.onSuccess.call(self, e);\n self.options.geocodeOptions.serviceOptions.onSuccess.call(self, e);\n };\n options.onSuccess = cbOnSuccess;\n }\n if (bOnFailure) {\n var cbOnFailure = function (e) {\n settings.onFailure.call(self, e);\n self.options.geocodeOptions.serviceOptions.onFailure.call(self, e);\n };\n options.onFailure = cbOnFailure;\n }\n\n // on ajoute le paramètre index spécifiant les ressources.\n var resources = this.options.resources.geocode;\n if (resources) {\n // il se peut que l'utilisateur ait surchargé ce paramètre dans geocodeOptions,\n // ou qu'il ait déjà été rempli (cas de la recherche avancée)\n if (!options.index) {\n options.index = resources;\n }\n }\n\n // cas où la clef API n'est pas renseignée dans les options du service,\n // on utilise celle renseignée au niveau du controle ou la clé \"calcul\" par défaut\n options.apiKey = options.apiKey || this.options.apiKey;\n\n // si l'utilisateur a spécifié le paramètre ssl au niveau du control, on s'en sert\n // true par défaut (https)\n if (typeof options.ssl !== \"boolean\") {\n if (typeof this.options.ssl === \"boolean\") {\n options.ssl = this.options.ssl;\n } else {\n options.ssl = true;\n }\n }\n\n logger.log(options);\n\n Gp.Services.geocode(options);\n }\n\n /**\n * this method is called by this.onGeocodingSearch()\n * and fills the container of the location results.\n * it creates a HTML Element per location\n * (cf. this. ...)\n *\n * @param {Object[]} locations - locations\n *\n * @private\n */\n _fillGeocodedLocationListContainer (locations) {\n if (!locations || locations.length === 0) {\n this._clearGeocodedLocation();\n return;\n }\n\n // on vide la liste avant de la construire\n var element = this._geocodedContainer;\n if (element.childElementCount) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n\n for (var i = 0; i < locations.length; i++) {\n logger.log(locations[i]);\n // Proposals are dynamically filled in Javascript by autocomplete service\n this._createGeocodedLocationElement(locations[i], i);\n }\n\n // sauvegarde de l'etat des locations\n this._geocodedLocations = locations;\n }\n\n // ################################################################### //\n // ######################### other methods ########################### //\n // ################################################################### //\n\n /**\n * this sends the label to the panel.\n *\n * @param {String} label - label suggested location\n * @private\n */\n _setLabel (label) {\n document.getElementById(\"GPsearchInputText-\" + this._uid).value = label;\n }\n\n /**\n * this method is called by this.on*ResultsItemClick()\n * and move/zoom on a position.\n *\n * @param {Array} position - ol.Coordinate object [lon, lat] (en lat/lon : \"EPSG:4326\")\n * @param {Number} zoom - zoom level\n * @private\n */\n _setPosition (position, zoom) {\n var view = this.getMap().getView();\n view.setCenter(position);\n view.setZoom(zoom);\n }\n\n /**\n * this method is called by this.on*ResultsItemClick()\n * and displays a marker.\n * FIXME\n *\n * @param {Array} position - ol.Coordinate object [lon, lat] ou [x, y]\n * @param {Object} info - location information\n * @private\n */\n _setMarker (position, info) {\n var map = this.getMap();\n var context = this;\n\n // remove previous markers\n if (this._marker != null) {\n map.removeOverlay(this._marker);\n this._marker = null;\n }\n\n if (position) {\n // création de l'élément DOM\n var markerDiv = document.createElement(\"img\");\n markerDiv.src = this._markerUrl;\n\n // ajout de l'évènement onclick (pour afficher une popup)\n if (markerDiv.addEventListener) {\n markerDiv.addEventListener(\n \"click\",\n function () {\n context._onResultMarkerSelect(info);\n }\n );\n } else if (markerDiv.attachEvent) {\n // Internet Explorer\n markerDiv.attachEvent(\n \"onclick\",\n function () {\n context._onResultMarkerSelect(info);\n }\n );\n }\n\n // création du marker (overlay)\n this._marker = new Overlay({\n position : position,\n // offset : [-25.5, -38], // FIXME mauvais rendu !?\n positioning : \"center-center\",\n element : markerDiv,\n stopEvent : false\n });\n map.addOverlay(this._marker);\n }\n }\n\n /**\n * this method is called by this.on*ResultsItemClick()\n * and get zoom to results.\n *\n * @param {Object} info - info\n *\n * @returns {Integer} zoom\n * @private\n */\n _getZoom (info) {\n var map = this.getMap();\n var key = this.options.zoomTo;\n var zoom = null;\n\n // les valeurs du zooms sont determinées\n // soit par les mots clefs suivants : max, min ou auto\n // soit par un niveau de zoom\n // soit defini par l'utilisateur via une fonction\n\n if (typeof key === \"function\") {\n logger.trace(\"zoom function\");\n zoom = key.call(this, info);\n }\n\n if (typeof key === \"number\") {\n logger.trace(\"zoom level\");\n zoom = key;\n }\n\n if (typeof key === \"string\") {\n // if (key === \"max\") {\n // zoom = map.getMaxZoom();\n // } else if (key === \"min\") {\n // zoom = map.getMinZoom();\n // } else\n\n if (key === \"auto\") {\n logger.trace(\"zoom auto\");\n zoom = SearchEngineUtils.zoomToResultsByDefault(info);\n } else {\n logger.trace(\"zoom level parsing\");\n var value = parseInt(key, 10);\n if (!isNaN(value)) {\n logger.trace(\"zoom parsing\");\n zoom = value;\n }\n }\n }\n\n // polyfill IE\n Number.isInteger = Number.isInteger || function (value) {\n return typeof value === \"number\" &&\n isFinite(value) &&\n Math.floor(value) === value;\n };\n\n // test de validité du zoom,\n // on prend le zoom courant par defaut ...\n if (!zoom || zoom === \"\" || !Number.isInteger(zoom)) {\n logger.trace(\"zoom not found, current zoom...\");\n zoom = map.getView().getZoom();\n }\n\n // FIXME test si le zoom est dans l'espace de la carte\n var min = map.minZoom; // .getMinZoom();\n var max = map.maxZoom; // .getMaxZoom();\n if (zoom < min) {\n logger.trace(\"zoom level min...\");\n zoom = min;\n }\n if (zoom > max) {\n logger.trace(\"zoom level max...\");\n zoom = max;\n }\n\n logger.trace(\"zoom\", zoom);\n return zoom;\n }\n\n /**\n * this method is called on 'click' on this._marker\n * (cf. this._setMarker() )\n * and sets a popup with marker information\n *\n * @param {Object} information - location information\n * @private\n */\n _onResultMarkerSelect (information) {\n var map = this.getMap();\n\n var popupContent = \"\";\n if (typeof information !== \"string\") {\n if (information.service === \"GeocodedLocation\") {\n popupContent = \"
      \";\n var attributes = information.location.placeAttributes;\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr)) {\n if (attr !== \"trueGeometry\" && attr !== \"extraFields\" && attr !== \"houseNumberInfos\" && attr !== \"_count\") {\n popupContent += \"
    • \";\n popupContent += \"\" + attr.toUpperCase() + \" : \";\n popupContent += attributes[attr];\n popupContent += \"
    • \";\n }\n }\n }\n popupContent += \"
    \";\n } else if (information.service === \"SuggestedLocation\") {\n popupContent = GeocodeUtils.getSuggestedLocationFreeform(information.location);\n } else {\n popupContent = \"sans informations.\";\n }\n } else {\n popupContent = information;\n }\n\n this._popupContent.innerHTML = popupContent;\n if (!this._popupOverlay) {\n // ajout de la popup a la carte comme un overlay\n this._popupOverlay = new Overlay({\n element : this._popupDiv,\n positioning : \"bottom-center\",\n position : this._marker.getPosition(),\n offset : [0, -42]\n });\n map.addOverlay(this._popupOverlay);\n } else {\n // si l'overlay est déjà créé, on modifie juste sa position\n this._popupOverlay.setPosition(this._marker.getPosition());\n }\n }\n\n /**\n * Set additional projection system\n *\n * @param {Object} system - projection system\n * @param {String} system.crs - Proj4 crs alias (from proj4 defs) e.g. \"EPSG:4326\"\n * @param {String} [system.label] - CRS label to be displayed in control. Default is system.crs alias\n * @param {String} [system.type] - CRS units type for coordinates conversion (one of control options.units). Default is \"Metric\"\n */\n _setSystem (system) {\n if (typeof system !== \"object\") {\n logger.log(\"[ERROR] MousePosition:addSystem - system parameter should be an object\");\n return;\n }\n if (!system.crs) {\n logger.error(\"crs not defined !\");\n return;\n }\n if (!system.label) {\n logger.warn(\"crs label not defined, use crs code by default.\");\n system.label = system.crs;\n }\n if (!system.type) {\n logger.warn(\"type srs not defined, use 'Metric' by default.\");\n system.type = \"Metric\";\n }\n\n // chargement de la definition de la projection\n // même si déjà chargé...\n CRS.loadByName(system.crs);\n\n if (!olProjGet(system.crs)) {\n logger.error(\"crs '{}' not available into proj4 definitions !\", system.crs);\n return;\n }\n\n // add system to control systems\n for (var j = 0; j < this._coordinateSearchSystems.length; j++) {\n var obj = this._coordinateSearchSystems[j];\n if (system.crs === obj.crs) {\n // warn user\n logger.info(\"crs '{}' already configured\", obj.crs);\n }\n }\n system.code = this._coordinateSearchSystems.length;\n this._coordinateSearchSystems.push(system);\n }\n\n // ################################################################### //\n // ###################### other handlers events ###################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on 'GPshowSearchEnginePicto' tag label\n * (cf. this._createShowSearchEnginePictoElement), and it cleans the component\n * when it's closed.\n *\n * @param { event } e évènement associé au clic\n * @private\n */\n onShowSearchEngineClick (e) {\n if (e.target.ariaPressed === \"true\") {\n this.onPanelOpen();\n }\n var map = this.getMap();\n // on supprime toutes les interactions\n Interactions.unset(map);\n var opened = this._showSearchEngineButton.ariaPressed;\n this.collapsed = !(opened === \"true\");\n // on génère nous même l'evenement OpenLayers de changement de propriété\n // (utiliser ol.control.SearchEngine.on(\"change:collapsed\", function ) pour s'abonner à cet évènement)\n this.dispatchEvent(\"change:collapsed\");\n\n // on recalcule la position\n if (this.options.position && !this.collapsed) {\n this.updatePosition(this.options.position);\n }\n\n // on nettoie si on ferme le composant\n if (this.collapsed) {\n this._clearResults();\n }\n }\n\n /**\n * this method is called by event 'click' on 'GPsearchInputReset' tag div\n * (cf. this._createSearchInputElement), and it cleans the value of input.\n *\n * @private\n */\n onSearchResetClick () {\n this._clearResults();\n }\n\n /**\n * this method is called by event 'click' on 'GPshowGeolocate' tag div\n * (cf. this._createShowGeolocateElement)\n *\n * @private\n */\n onShowSearchGeolocateClick () {\n if (\"geolocation\" in navigator) {\n /* geolocation is available */\n navigator.geolocation.getCurrentPosition((position) => {\n var view = this.getMap().getView();\n var viewProj = view.getProjection().getCode();\n var coordinates_4326 = [position.coords.longitude, position.coords.latitude];\n var coordinates;\n if (viewProj !== \"EPSG:4326\") {\n // on retransforme les coordonnées de la position dans la projection de la carte\n coordinates = olProjTransform(coordinates_4326, \"EPSG:4326\", viewProj);\n } else {\n coordinates = coordinates_4326;\n }\n if (isNaN(coordinates[0]) || isNaN(coordinates[1])) {\n this._setMarker();\n return;\n }\n this._setPosition(coordinates, 15); // FIXME zoom fixe !\n if (this._displayMarker) {\n var markerInfo = \"
    Ma position
    longitude : \" + coordinates_4326[0] + \"
    latitude : \" + coordinates_4326[1];\n this._setMarker(coordinates, markerInfo);\n }\n /**\n * event triggered when i want a geolocation\n *\n * @event searchengine:geolocation:click\n * @property {Object} type - event\n * @property {Object} coordinates - coordinates\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:geolocation:click\", function (e) {\n * console.log(e.coordinates);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:geolocation:click\",\n coordinates : coordinates\n });\n });\n } else {\n /* geolocation IS NOT available */\n }\n }\n\n /**\n * this method is called by event 'click' on 'GPshowSearchByCoordinate' tag div\n * (cf. this._createShowSearchByCoordinateElement)\n *\n * @private\n */\n onShowSearchByCoordinateClick () {\n var lng = null;\n var lat = null;\n if (this._coordinateSearchLngInput && this._coordinateSearchLngInput.nodeName === \"DIV\" &&\n this._coordinateSearchLatInput && this._coordinateSearchLatInput.nodeName === \"DIV\"\n ) {\n lng = this._getCoordinateSearchDMS(this._coordinateSearchLngInput);\n lat = this._getCoordinateSearchDMS(this._coordinateSearchLatInput);\n } else {\n lng = this._coordinateSearchLngInput.value;\n lat = this._coordinateSearchLatInput.value;\n }\n\n if (!lng || !lat) {\n return;\n }\n\n var coordinates = [lng, lat];\n\n var view = this.getMap().getView();\n var viewProj = view.getProjection().getCode();\n if (viewProj !== \"EPSG:4326\") {\n coordinates = olProjTransform(coordinates, \"EPSG:4326\", viewProj);\n }\n if (isNaN(coordinates[0]) || isNaN(coordinates[1])) {\n this._setMarker();\n return;\n }\n this._setPosition(coordinates, 10); // FIXME zoom fixe !\n if (this._displayMarker) {\n this._setMarker(coordinates, \"sans information\");\n }\n\n /**\n * event triggered when we are positioned\n *\n * @event searchengine:coordinates:click\n * @property {Object} type - event\n * @property {Object} coordinates - coordinates\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:coordinates:click\", function (e) {\n * console.log(e.coordinates);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:coordinates:click\",\n coordinates : coordinates\n });\n }\n\n _getCoordinateSearchDMS (dom) {\n if (dom && dom.nodeName === \"DIV\") {\n var nodes = dom.querySelectorAll(\"[name]\");\n if (nodes) {\n var degrees = MathUtils.toInteger(nodes[0].value);\n var minutes = MathUtils.toInteger(nodes[1].value);\n var seconds = MathUtils.toInteger(nodes[2].value);\n var hemispheres = nodes[3].options[nodes[3].selectedIndex].text;\n if (!degrees || !minutes || !seconds || !hemispheres) {\n return;\n }\n return MathUtils.dmsToDecimal(degrees, minutes, seconds, hemispheres);\n }\n }\n }\n // ################################################################### //\n // ################## handlers events AutoComplete ################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'click' on 'GPlocationOrigin' input\n *\n * @private\n */\n onAutoCompleteInputClick () {\n var inputSearchTextContainer = document.getElementById(\"GPsearchInputText-\" + this._uid);\n if (inputSearchTextContainer && !inputSearchTextContainer.disabled && inputSearchTextContainer.value.length > 2) {\n this._displaySuggestedLocation();\n }\n }\n\n /**\n * this method is called by event 'keyup' on 'GPsearchInputText' tag input\n * (cf. this._createSearchInputElement), and it gets the value of input.\n * this value is passed as a parameter for the service autocomplete (text).\n * the results of the request are displayed into a drop down menu.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onAutoCompleteSearchText (e) {\n var value = e.target.value;\n if (!value) {\n return;\n }\n\n // on sauvegarde le localisant\n this._currentGeocodingLocation = value;\n\n // on limite les requêtes à partir de 3 car. saisie !\n if (value.length < 3) {\n this._clearSuggestedLocation();\n return;\n }\n\n var _triggerGeocode = this.options.autocompleteOptions.triggerGeocode;\n var _triggerDelay = this.options.autocompleteOptions.triggerDelay;\n var _maximumEntries = this.options.autocompleteOptions.maximumEntries;\n var _prettifyResults = this.options.autocompleteOptions.prettifyResults;\n\n // INFORMATION\n // on effectue la requête au service d'autocompletion.\n // on met en place des callbacks afin de recuperer les resultats ou\n // les messages d'erreurs du service.\n // les resultats sont affichés dans une liste deroulante.\n var context = this;\n this._requestAutoComplete({\n text : value,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(\"request from AutoComplete\", results);\n if (results) {\n // on sauvegarde l'etat des résultats\n context._suggestedLocations = results.suggestedLocations;\n context._locationsToBeDisplayed = [];\n // on vérifie qu'on n'a pas récupéré des coordonnées nulles (par ex recherche par code postal)\n for (var i = 0; i < context._suggestedLocations.length; i++) {\n var ilocation = context._suggestedLocations[i];\n if (ilocation.position && ilocation.position.x === 0 && ilocation.position.y === 0 && ilocation.fullText) {\n // si les coordonnées sont nulles, il faut relancer une requête de géocodage avec l'attribut \"fullText\" récupéré\n context._getGeocodeCoordinatesFromFullText(ilocation, i);\n } else {\n // sinon on peut afficher normalement le résultat dans la liste\n context._locationsToBeDisplayed.push(ilocation);\n }\n };\n // on filtre et enjolive éventuellement les résultats\n if (_prettifyResults === true) {\n context._prettifyAutocompleteResults(context._locationsToBeDisplayed);\n }\n // on ne garde que le nombre de résultats que l'on veut afficher\n if (_maximumEntries) {\n context._locationsToBeDisplayed = context._locationsToBeDisplayed.slice(0, _maximumEntries);\n }\n\n // on affiche les résultats qui n'ont pas des coordonnées nulles\n context._fillAutoCompletedLocationListContainer(context._locationsToBeDisplayed);\n // on annule eventuellement une requete de geocodage en cours car on obtient des\n // de nouveau des resultats d'autocompletion...\n if (context._triggerHandler) {\n clearTimeout(context._triggerHandler);\n context._triggerHandler = null;\n logger.warn(\"Cancel a geocode request !\");\n }\n }\n },\n // callback onFailure\n onFailure : function (error) {\n // FIXME\n // où affiche t on les messages : ex. 'No suggestion matching the search' ?\n context._clearSuggestedLocation();\n logger.log(error.message);\n // on envoie une requete de geocodage si aucun resultat d'autocompletion\n // n'a été trouvé ! Et on n'oublie pas d'annuler celle qui est en cours !\n if (error.message === \"No suggestion matching the search\" && _triggerGeocode /* && value.length === 5 */) {\n if (context._triggerHandler) {\n clearTimeout(context._triggerHandler);\n logger.warn(\"Cancel the last geocode request !\");\n }\n context._triggerHandler = setTimeout(\n function () {\n logger.warn(\"Launch a geocode request !\");\n context._requestGeocoding({\n location : value,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(\"request from Geocoding\", results);\n if (results) {\n context._locationsToBeDisplayed = [];\n // on modifie la structure des reponses pour être\n // compatible avec l'autocompletion !\n var locations = results.locations;\n for (var i = 0; i < locations.length; i++) {\n var location = locations[i];\n location.fullText = GeocodeUtils.getGeocodedLocationFreeform(location);\n location.position = {\n x : location.position.lon,\n y : location.position.lat\n };\n context._locationsToBeDisplayed.push(location);\n }\n context._fillAutoCompletedLocationListContainer(locations);\n }\n },\n // callback onFailure\n onFailure : function (error) {\n logger.log(error.message);\n }\n });\n }, _triggerDelay\n );\n }\n }\n });\n\n // INFORMATION\n // on effectue une requête au service de recherche.\n // les resultats sont ajoutées à la suite de l'autocompletion,\n // et un abonnement est mis en place pour les récuperer.\n if (this.options.resources.search) {\n // appel du service (cf. abonnement : Search.target.addEventListener(\"suggest\"))\n Search.suggest(value);\n }\n\n var map = this.getMap();\n map.on(\n \"click\",\n this._hideSuggestedLocation,\n this\n );\n map.on(\n \"pointerdrag\",\n this._hideSuggestedLocation,\n this\n );\n }\n\n /**\n * this method is called by Gp.Services.autoComplete callback in case of success\n * (cf. this.onAutoCompleteSearchText), for suggested locations with null coordinates\n * (case of postalCode research for instance).\n * Send a geocode request with suggested location 'fullText' attribute, to get its coordinates and display it in autocomplete results list container.\n *\n * @param {Gp.Services.AutoCompleteResponse.SuggestedLocation} suggestedLocation - autocompletion result (with null coordinates) to be geocoded\n * @param {Number} i - suggestedLocation position in Gp.Services.AutoCompleteResponse.suggestedLocations autocomplete results list\n * @private\n */\n _getGeocodeCoordinatesFromFullText (suggestedLocation, i) {\n var context = this;\n Gp.Services.geocode({\n apiKey : this.options.apiKey,\n ssl : this.options.ssl,\n q : GeocodeUtils.getSuggestedLocationFreeform(suggestedLocation),\n index : suggestedLocation.type,\n // callback onSuccess\n onSuccess : function (response) {\n logger.log(\"request from Geocoding (coordinates null)\", response);\n if (response.locations && response.locations.length !== 0 && response.locations[0].position) {\n // on modifie les coordonnées du résultat en EPSG:4326 donc lat,lon\n /// \\TODO verifier si l'inversion des coordonnees est necessaire\n if (context._suggestedLocations && context._suggestedLocations[i]) {\n context._suggestedLocations[i].position = {\n lon : response.locations[0].position.y,\n lat : response.locations[0].position.x\n };\n // et on l'affiche dans la liste\n context._locationsToBeDisplayed.unshift(context._suggestedLocations[i]);\n context._fillAutoCompletedLocationListContainer(context._locationsToBeDisplayed);\n }\n }\n },\n // callback onFailure\n onFailure : function () {\n // si on n'a pas réussi à récupérer les coordonnées, on affiche quand même le résultat\n if (context._suggestedLocations && context._suggestedLocations[i]) {\n context._createAutoCompletedLocationElement(context._suggestedLocations[i], i);\n }\n }\n });\n }\n\n /**\n * this method is called by event 'click' on 'GPautoCompleteResultsList' tag div\n * (cf. this._createAutoCompleteListElement), and it selects the location.\n * this location displays a marker on the map.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onAutoCompletedResultsItemClick (e) {\n // TODO on souhaite un comportement different pour la selection des reponses\n // de l'autocompletion :\n // - liste deroulante des reponses,\n // - puis possibilité de cliquer sur une suggestion\n // - mais aussi de la choisir avec le clavier (arrow up/down), puis valider\n // par un return\n // cette selection avec les fleches doit mettre à jour le input !\n // (comme un moteur de recherche de navigateur)\n\n var idx = SelectorID.index(e.target.id);\n logger.log(idx);\n logger.log(this._locationsToBeDisplayed[idx]);\n\n if (!idx) {\n return;\n }\n\n var position = [\n this._locationsToBeDisplayed[idx].position.x,\n this._locationsToBeDisplayed[idx].position.y\n ];\n var info = {\n service : \"SuggestedLocation\",\n location : this._locationsToBeDisplayed[idx]\n };\n\n // on ajoute le texte de l'autocomplétion dans l'input\n var label = GeocodeUtils.getSuggestedLocationFreeform(this._locationsToBeDisplayed[idx]);\n this._setLabel(label);\n\n // on sauvegarde le localisant\n this._currentGeocodingLocation = label;\n\n // Info : la position est en EPSG:4326, à transformer dans la projection de la carte\n var view = this.getMap().getView();\n var mapProj = view.getProjection().getCode();\n if (mapProj !== \"EPSG:4326\") {\n // on retransforme les coordonnées de la position dans la projection de la carte\n position = olProjTransform(position, \"EPSG:4326\", mapProj);\n }\n // on centre la vue et positionne le marker, à la position reprojetée dans la projection de la carte\n var zoom = this._getZoom(info);\n this._setPosition(position, zoom);\n if (this._displayMarker) {\n this._setMarker(position, info);\n }\n /**\n * event triggered when an element of the results is clicked for autocompletion\n *\n * @event searchengine:autocomplete:click\n * @property {Object} type - event\n * @property {Object} location - location\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:autocomplete:click\", function (e) {\n * console.log(e.location);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:autocomplete:click\",\n location : this._locationsToBeDisplayed[idx]\n });\n }\n\n /**\n * this method is called by event 'click' on '' tag div\n * (cf. this.), and it selects the suggest.\n * this suggest call an event to added layer on the map.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onSearchedResultsItemClick (e) {\n var idx = SelectorID.index(e.target.id);\n\n var error = null;\n try {\n var suggest = Search.getSuggestions()[idx];\n if (!suggest) {\n throw \"No suggestions found !\";\n }\n\n // Ajout de la couche sur la carte si l'option le permet\n if (this.options.searchOptions.addToMap) {\n // Check if configuration is loaded\n if (!Config.isConfigLoaded()) {\n throw \"ERROR : contract key configuration has to be loaded to load Geoportal layers.\";\n }\n var service = suggest.service;\n var name = suggest.name;\n var layer = null;\n switch (service) {\n case \"WMS\":\n layer = new GeoportalWMS({\n layer : name\n });\n break;\n case \"WMTS\":\n layer = new GeoportalWMTS({\n layer : name\n });\n break;\n case \"TMS\":\n layer = new GeoportalMapBox({\n layer : name\n });\n default:\n break;\n }\n if (layer) {\n var map = this.getMap();\n map.addLayer(layer);\n }\n }\n } catch (e) {\n error = e;\n }\n\n /**\n * event triggered when an element of the results is clicked for search service\n *\n * @event searchengine:search:click\n * @property {Object} type - event\n * @property {Object} suggest - suggest\n * @property {Object} error - error\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:search:click\", function (e) {\n * console.log(e.suggest);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:search:click\",\n suggest : suggest,\n error : error\n });\n }\n\n // ################################################################### //\n // ################### handlers events Geocode ####################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'submit' on 'GPsearchInput' tag form\n * (cf. this._createSearchInputElement), and it gets the value of input.\n * this value is passed as a parameter for the service geocoding.\n * the results of the request are displayed into a window.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onGeocodingSearchSubmit (e) {\n var value = e.target[0].value;\n if (!value) {\n return;\n }\n\n // on sauvegarde le localisant\n this._currentGeocodingLocation = value;\n\n // on met en place l'affichage des resultats dans une fenetre de recherche.\n var context = this;\n this._requestGeocoding({\n query : value,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(\"request from Geocoding\", results);\n if (results) {\n var locations = results.locations;\n context._fillGeocodedLocationListContainer(locations);\n }\n },\n // callback onFailure\n onFailure : function (error) {\n // FIXME cf. this.onAutoCompleteSearch()\n context._clearGeocodedLocation();\n logger.log(error.message);\n }\n });\n }\n\n /**\n * this method is called by event 'submit' on 'GPgeocodeResultsList' tag div\n * (cf. this._createGeocodeResultsListElement), and it selects the location.\n * this location displays a marker on the map.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onGeocodedResultsItemClick (e) {\n var idx = SelectorID.index(e.target.id);\n\n if (!idx) {\n return;\n }\n\n var position = [\n this._geocodedLocations[idx].position.lon,\n this._geocodedLocations[idx].position.lat\n ];\n var info = {\n service : \"GeocodedLocation\",\n location : this._geocodedLocations[idx]\n };\n\n // on ajoute le texte du géocodage dans l'input\n var label = GeocodeUtils.getGeocodedLocationFreeform(this._geocodedLocations[idx]);\n this._setLabel(label);\n\n // Info : la position est en EPSG:4326, à transformer dans la projection de la carte\n var view = this.getMap().getView();\n var mapProj = view.getProjection().getCode();\n if (mapProj !== \"EPSG:4326\") {\n // on retransforme les coordonnées de la position dans la projection de la carte\n position = olProjTransform(position, \"EPSG:4326\", mapProj);\n }\n // on centre la vue et positionne le marker, à la position reprojetée dans la projection de la carte\n var zoom = this._getZoom(this.options.zoomTo);\n this._setPosition(position, zoom);\n if (this._displayMarker) {\n this._setMarker(position, info);\n }\n /**\n * event triggered when an element of the results is clicked for geocoding\n *\n * @event searchengine:geocode:click\n * @property {Object} type - event\n * @property {Object} location - location\n * @property {Object} target - instance SearchEngine\n * @example\n * SearchEngine.on(\"searchengine:geocode:click\", function (e) {\n * console.log(e.location);\n * })\n */\n this.dispatchEvent({\n type : \"searchengine:geocode:click\",\n location : this._geocodedLocations[idx]\n });\n }\n\n // ################################################################### //\n // ############## handlers events Geocode Advanced ################### //\n // ################################################################### //\n\n /**\n * this method is called by event 'change' on 'GPadvancedSearchCode' tag select\n * (cf. this._createAdvancedSearchFormCodeElement), and it gets the value of\n * option selected.\n * this value is passed as a parameter to create the attributs container.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onGeocodingAdvancedSearchCodeChange (e) {\n logger.log(e);\n var idx = e.target.selectedIndex;\n var value = e.target.options[idx].value;\n\n if (!value) {\n return;\n }\n\n // INFORMATION\n // le declenchement de l'evenement va creer un container de filtre à la volée...\n // l'insertion des containers d'attributs dans le DOM sont :\n // - soit GPadvancedSearchFilters > PositionOfInterest\n // - soit GPadvancedSearchFilters > StreetAddress\n // - soit GPadvancedSearchFilters > CadastralParcel\n // cf. _setFilter() pour la creation du container\n\n this._setFilter(value);\n }\n\n /**\n * this method is called by event 'submit' on 'GPadvancedSearchForm' tag form\n * (cf. this._createAdvancedSearchPanelFormElement), and it gets the value of all input.\n * this value is passed as a parameter for the service geocoding.\n * the results of the request are displayed into a window.\n *\n * @param {Object} e - HTMLElement\n * @param {Array} data - [{key: ..., value: ...}]\n * @private\n */\n onGeocodingAdvancedSearchSubmit (e, data) {\n logger.log(data);\n if (!data || data.length === 0) {\n return;\n }\n\n var _location;\n var _filterOptions = {};\n\n for (var i = 0; i < data.length; i++) {\n var filter = data[i];\n if (filter.value) {\n if (filter.key === \"section\") {\n filter.value = filter.value.toUpperCase();\n }\n _filterOptions[filter.key] = filter.value;\n }\n }\n\n var inputSearchTextContainer = document.getElementById(\"GPsearchInputText-\" + this._uid);\n _location = inputSearchTextContainer.value;\n\n // On ne prend pas en compte ce qu'il y a dans l'input de recherche simple pour la recherche avance de PC\n if (this._currentGeocodingCode === \"CadastralParcel\") {\n _location = \"\";\n }\n\n // on met en place l'affichage des resultats dans une fenetre de recherche.\n var context = this;\n this._requestGeocoding({\n query : _location,\n index : this._currentGeocodingCode,\n filters : _filterOptions,\n // callback onSuccess\n onSuccess : function (results) {\n logger.log(results);\n if (results) {\n var locations = results.locations;\n context._fillGeocodedLocationListContainer(locations);\n }\n },\n // callback onFailure\n onFailure : function (error) {\n // FIXME cf. this.onAutoCompleteSearch()\n context._clearGeocodedLocation();\n logger.log(error.message);\n }\n });\n }\n\n /**\n * this method is called by 'onGeocodingAdvancedSearchSubmit' method,\n * in case geocoding type is 'CadastralParcel',\n * and gets request parameters from inputs\n *\n * @param {Object} filterOptions - object with inputs value (department, insee, ...)\n * @returns {String} location - cadastral parcel number : concatenation of inputs values (e.g. : 940670000D0041 or 94067_____0041)\n * @private\n */\n _getCadastralParcelRequestParams (filterOptions) {\n /* info:\n la parcelle cadastrale se compose de 14 chiffres ou lettres, indiquant, de gauche à droite :\n - le code du département (2 caractères)\n - le code commune (3 caractères). (Remarque : code département + code commune = code INSEE)\n - OU le code INSEE de la commune (5 chiffres) (remplace les 2 précédents)\n - le code commune absorbée INSEE, ou '000' (3 caractères),\n - la section (2 caractères),\n - le numéro de parcelle (4 caractères).\n Exemple de parcelle : '940670000D0041'. Si l'identifiant est incomplet (par exemple '940670000D'), le service renverra uniquement les 25 premiers résultats pouvant correspondre.\n */\n\n var _location = \"\";\n\n var l;\n // code département (2 caractères)\n var dep = filterOptions.department;\n if (dep) {\n l = dep.length;\n if (l === 2) {\n _location = dep;\n } else if (l === 1) {\n // si un seul numéro a été saisi, on présume que c'est un numéro < 10\n _location = \"0\" + dep;\n } else {\n _location = dep.substring(0, 2);\n }\n } else {\n _location = \"__\";\n }\n\n // code commune insee (3 caractères)\n var commune = filterOptions.commune;\n if (commune) {\n l = commune.length;\n if (l === 3) {\n _location += commune;\n } else if (l === 2) {\n _location += \"_\" + commune;\n } else if (l === 1) {\n _location += \"__\" + commune;\n } else { // l > 3\n _location += commune.substring(0, 3);\n }\n } else {\n _location += \"___\";\n }\n\n // code insee (5 caractères) : surcharge les 2 autres si renseigné\n var insee = filterOptions.insee;\n if (insee) {\n if (insee.length === 5) {\n _location = insee;\n }\n }\n\n // code commune absorbee INSEE (3 caractères)\n var absorbedCity = filterOptions.absorbedCity;\n if (absorbedCity) {\n l = absorbedCity.length;\n if (l === 3) {\n _location += absorbedCity;\n } else if (l < 3) {\n if (l === 2) {\n _location += \"_\" + absorbedCity;\n } else if (l === 1) {\n _location += \"__\" + absorbedCity;\n }\n } else { // l > 3\n _location += absorbedCity.substring(0, 3);\n }\n } else {\n _location += \"___\";\n }\n\n // section (2 caractères)\n var section = filterOptions.section;\n if (section) {\n l = section.length;\n if (l === 2) {\n _location += section;\n } else if (l === 1) {\n _location += \"_\" + section;\n } else {\n _location += section.substring(0, 2);\n }\n } else {\n _location += \"__\";\n }\n\n // numéro de parcelle (4 caractères)\n var number = filterOptions.number;\n if (number) {\n l = number.length;\n if (l === 4) {\n _location += number;\n } else if (l === 3) {\n _location += \"_\" + number;\n } else if (l === 2) {\n _location += \"__\" + number;\n } else if (l === 1) {\n _location += \"___\" + number;\n } else { // l > 4\n _location += number.substring(0, 4);\n }\n } else {\n _location += \"___\";\n }\n\n logger.log(\"location : \" + _location);\n\n return _location;\n }\n\n // ################################################################### //\n // ############### handlers events Coordinate Search ################# //\n // ################################################################### //\n\n /**\n * this method is called by event 'change' on ''\n * tag select (cf. this.),\n * and selects the system projection.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onCoordinateSearchSystemChange (e) {\n var idx = e.target.selectedIndex; // index\n var value = e.target.options[idx].value; // crs\n\n // on nettoie les coordonnées saisies\n this._coordinateSearchLngInput.value = \"\";\n this._coordinateSearchLatInput.value = \"\";\n\n // INFO\n // si on change de type de systeme, on doit aussi changer le type d'unités !\n var type = null;\n for (var i = 0; i < this._coordinateSearchSystems.length; ++i) {\n if (this._coordinateSearchSystems[i].code === Number(value)) {\n type = this._coordinateSearchSystems[i].type;\n break;\n }\n }\n\n if (!type) {\n logger.log(\"system not found in projection systems container\");\n return;\n }\n\n // on enregistre le systeme courant\n this._currentCoordinateSearchSystems = this._coordinateSearchSystems[Number(value)];\n\n if (type !== this._currentCoordinateSearchType) {\n // on met à jour les unités du menu deroulant : Geographique ou Métrique\n this._currentCoordinateSearchType = type;\n this._currentCoordinateSearchUnits = this._coordinateSearchUnits[type][0].code;\n this._containerUnits.appendChild(this._setCoordinateSearchUnitsSelectElement(this._coordinateSearchUnits[type]));\n // et on modifie la zone de saisie des coordonnées (label + input)\n this._updateCoordinateSearchElements();\n }\n }\n\n /**\n * this method is called by event 'change' on ''\n * tag select (cf. this.),\n * and selects the units projection.\n *\n * @param {Object} e - HTMLElement\n * @private\n */\n onCoordinateSearchUnitsChange (e) {\n var idx = e.target.selectedIndex;\n var value = e.target.options[idx].value;\n\n // on nettoie les coordonnées saisies\n this._coordinateSearchLngInput.value = \"\";\n this._coordinateSearchLatInput.value = \"\";\n\n // et on modifie la zone de saisie des coordonnées (label + input)\n this._currentCoordinateSearchUnits = value;\n this._updateCoordinateSearchElements();\n }\n\n /**\n * this method is called by event 'click' on ''\n * tag select (cf. this.),\n * and clear app.\n *\n * @private\n */\n onCoordinateSearchClose () {\n this._setMarker();\n this._coordinateSearchLngInput.value = \"\";\n this._coordinateSearchLatInput.value = \"\";\n }\n\n _updateCoordinateSearchElements () {\n var lbl = this._setCoordinateSearchLngLabelElement(this._currentCoordinateSearchType);\n var input = this._coordinateSearchLngInput = this._setCoordinateSearchLngInputElement(this._currentCoordinateSearchUnits);\n this._containerCoordinateLng.appendChild(lbl);\n this._containerCoordinateLng.appendChild(input);\n lbl = this._setCoordinateSearchLatLabelElement(this._currentCoordinateSearchType);\n input = this._coordinateSearchLatInput = this._setCoordinateSearchLatInputElement(this._currentCoordinateSearchUnits);\n this._containerCoordinateLat.appendChild(lbl);\n this._containerCoordinateLat.appendChild(input);\n }\n\n // ################################################################### //\n // ############################## clean ############################## //\n // ################################################################### //\n\n /**\n * this method is called by this.onSearchReset()\n * and it clears all results and the marker.\n *\n * @private\n */\n _clearResults () {\n var map = this.getMap();\n\n this._currentGeocodingLocation = null;\n\n this._clearSuggestedLocation();\n this._clearGeocodedLocation();\n\n this._setMarker();\n // on retire l'overlay de la popup de la carte\n if (this._popupOverlay != null) {\n map.removeOverlay(this._popupOverlay);\n this._popupOverlay = null;\n }\n }\n\n /**\n * this method is called by this.onAutoCompleteSearchText()\n * and it clears all suggested location.\n *\n * @private\n */\n _clearSuggestedLocation () {\n this._suggestedLocations = [];\n if (this._containerResultsLocation) {\n while (this._containerResultsLocation.firstChild) {\n this._containerResultsLocation.removeChild(this._containerResultsLocation.firstChild);\n }\n }\n if (this.options.resources.search) {\n Search.clear();\n if (this._containerResultsSuggest) {\n while (this._containerResultsSuggest.firstChild) {\n this._containerResultsSuggest.removeChild(this._containerResultsSuggest.firstChild);\n }\n }\n }\n }\n\n /**\n * this method is called by this.onAutoCompleteSearchText()\n * and it clears suggested location from duplicate entries and improve unprecise fulltext entries.\n *\n * @param {Array} autocompleteResults - Array of autocompleteResults to display\n * @private\n */\n _prettifyAutocompleteResults (autocompleteResults) {\n for (var i = autocompleteResults.length - 1; i >= 0; i--) {\n var autocompleteResult = autocompleteResults[i];\n if ((autocompleteResult.type === \"StreetAddress\" && autocompleteResult.kind === \"municipality\") ||\n autocompleteResult.type === \"PositionOfInterest\" && autocompleteResult.poiType[0] === \"lieu-dit habité\" && autocompleteResult.poiType[1] === \"zone d'habitation\") {\n // on retire les éléments streetAdress - municipality car déjà pris en compte par POI\n autocompleteResults.splice(i, 1);\n }\n // on précise le type dans le fulltext au POI des types département et région\n if ((autocompleteResult.type === \"PositionOfInterest\" && autocompleteResult.poiType[0] === \"administratif\" &&\n (autocompleteResult.poiType[1] === \"département\" || autocompleteResult.poiType[1] === \"région\"))) {\n autocompleteResult.fullText = autocompleteResult.fullText + \", \" + autocompleteResult.poiType[1];\n }\n };\n }\n\n /**\n * this method is called to hide suggested locations\n *\n * @private\n */\n _hideSuggestedLocation () {\n if (this._autocompleteContainer) {\n this._autocompleteContainer.classList.replace(\"GPelementVisible\", \"GPelementHidden\");\n this._autocompleteContainer.classList.replace(\"gpf-visible\", \"gpf-hidden\");\n }\n }\n\n /**\n * this method is called to display suggested location.\n *\n * @private\n */\n _displaySuggestedLocation () {\n if (this._autocompleteContainer) {\n this._autocompleteContainer.classList.replace(\"GPelementHidden\", \"GPelementVisible\");\n this._autocompleteContainer.classList.replace(\"gpf-hidden\", \"gpf-visible\");\n }\n }\n\n /**\n * this method is called by this.onGeocodingAdvancedSearchSubmit()\n * and it clears all geocoded location.\n *\n * @private\n */\n _clearGeocodedLocation () {\n this._geocodedLocations = [];\n if (this._geocodedContainer) {\n while (this._geocodedContainer.firstChild) {\n this._geocodedContainer.removeChild(this._geocodedContainer.firstChild);\n }\n }\n }\n\n};\n\n// on récupère les méthodes de la classe commune ReverseGeocoding\nObject.assign(SearchEngine.prototype, SearchEngineDOM);\nObject.assign(SearchEngine.prototype, Widget);\n\nexport default SearchEngine;\n\n// Expose SearchEngine as ol.control.SearchEngine (for a build bundle)\nif (window.ol && window.ol.control) {\n window.ol.control.SearchEngine = SearchEngine;\n}\n"],"names":["freeze","object","oc","undefined","Object","getOwnPropertyDescriptors","create","hasOwn","key","prototype","hasOwnProperty","call","HTML_BOOLEAN_ATTRIBUTES","allowfullscreen","async","autofocus","autoplay","checked","controls","default","defer","disabled","formnovalidate","hidden","ismap","itemscope","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected","HTML_VOID_ELEMENTS","area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr","HTML_RAW_TEXT_ELEMENTS","script","style","textarea","title","isHTMLMimeType","mimeType","MIME_TYPE","HTML","XML_APPLICATION","XML_TEXT","XML_XHTML_APPLICATION","XML_SVG_IMAGE","_MIME_TYPES","keys","map","NAMESPACE","SVG","XML","XMLNS","exports","assign","target","TypeError","find","list","predicate","ac","Array","i","length","item","hasDefaultHTMLNamespace","isHTMLBooleanAttribute","name","toLowerCase","isHTMLRawTextElement","tagName","isHTMLEscapableRawTextElement","isHTMLVoidElement","isValidMimeType","indexOf","conventions","dom","errors","entities","sax","DOMImplementation","ParseError","XMLReader","normalizeLineEndings","replace","DOMParser","options","locator","this","domHandler","DOMHandler","onError","errorHandler","xmlns","opt","defaultNamespace","cdata","currentElement","doc","position","node","lineNumber","columnNumber","_toString","chars","start","substr","java","lang","String","appendElement","handler","appendChild","parseFromString","defaultNSMap","entityMap","XML_ENTITIES","HTML_ENTITIES","xml","domBuilder","setDocumentLocator","fatalError","parse","documentElement","startDocument","impl","createHTMLDocument","createDocument","startElement","namespaceURI","localName","qName","attrs","el","createElementNS","len","getURI","value","getValue","attr","getQName","createAttributeNS","getLocator","nodeValue","setAttributeNode","endElement","parentNode","startPrefixMapping","prefix","uri","endPrefixMapping","processingInstruction","data","ins","createProcessingInstruction","ignorableWhitespace","ch","characters","apply","arguments","charNode","createCDATASection","createTextNode","test","skippedEntity","endDocument","normalize","comment","comm","createComment","startCDATA","endCDATA","startDTD","publicId","systemId","internalSubset","implementation","createDocumentType","dt","doctype","reportError","level","message","e","console","error","l","_locator","warning","__DOMHandler","onErrorStopParsing","onWarningStopParsing","PDC","Symbol","DOMException","DOMExceptionName","g","checkSymbol","symbol","notEmptyString","orderedSetReducer","current","element","toOrderedSet","split","filter","splitOnASCIIWhitespace","reduce","validateQualifiedName","qualifiedName","QName_exact","INVALID_CHARACTER_ERR","validateAndExtract","namespace","splitResult","NAMESPACE_ERR","copy","src","dest","p","_extends","Class","Super","pt","t","constructor","NodeType","ELEMENT_NODE","ATTRIBUTE_NODE","TEXT_NODE","CDATA_SECTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","PROCESSING_INSTRUCTION_NODE","COMMENT_NODE","DOCUMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","NOTATION_NODE","DocumentPosition","DOCUMENT_POSITION_DISCONNECTED","DOCUMENT_POSITION_PRECEDING","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_CONTAINS","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC","parentChain","chain","ownerElement","unshift","commonAncestor","a","b","c","n","docGUID","guid","Math","random","NodeList","LiveNodeList","refresh","_node","_refresh","_updateLiveList","inc","_inc","ownerDocument","ls","__set__","$$length","NamedNodeMap","_findNodeIndex","_addNamedNode","newAttr","oldAttr","_onRemoveAttribute","ns","_nsMap","_onAddAttribute","_removeNamedNode","lastIndex","Node","_xmlEncoder","charCodeAt","_visitNode","callback","firstChild","nextSibling","Document","contentType","type","remove","_onUpdateChild","parent","newChild","childNodes","child","_removeChild","NOT_FOUND_ERR","oldPreviousSibling","previousSibling","oldNextSibling","lastChild","isDocTypeNode","nodeType","isElementNode","isTextNode","isElementInsertionPossible","parentChildNodes","docTypeNode","isElementReplacementPossible","assertPreInsertionValidity1to5","hasValidParentNodeType","HIERARCHY_REQUEST_ERR","hasInsertableNodeType","assertPreInsertionValidityInDocument","nodeChildNodes","nodeChildElements","parentElementChild","assertPreReplacementValidityInDocument","hasDoctypeChildThatIsNotChild","_insertBefore","_inDocumentAssertion","cp","removeChild","newFirst","newLast","pre","Element","Attr","CharacterData","Text","Comment","CDATASection","DocumentType","Notation","Entity","EntityReference","DocumentFragment","ProcessingInstruction","XMLSerializer","nodeSerializeToString","nodeFilter","buf","refNode","lookupPrefix","visibleNamespaces","serializeToString","join","needNamespaceDefine","isHTML","addSerializedAttribute","push","attributes","nodeName","prefixedNodeName","defaultNS","ai","nsi","canCloseTag","slice","CDATA_START","CDATA_END","COMMENT_START","COMMENT_END","pubid","sysid","DOCTYPE_DECL_START","PUBLIC","SYSTEM","importNode","deep","node2","cloneNode","v","attrs2","_ownerElement","index","toString","iterator","me","next","done","return","getNamedItem","_isInHTMLDocumentAndNamespace","setNamedItem","INUSE_ATTRIBUTE_ERR","getNamedItemNS","setNamedItemNS","removeNamedItem","removeNamedItemNS","hasFeature","feature","version","root","htmlNode","createElement","headNode","titleNode","parentElement","baseURI","isConnected","rootNode","getRootNode","contains","other","isEqualNode","otherNode","getAttributeNodeNS","isSameNode","insertBefore","refChild","replaceChild","oldChild","hasChildNodes","appendData","isSupported","lookupNamespaceURI","isDefaultNamespace","compareDocumentPosition","node1","attr1","attr2","chain1","chain2","ca","removed","importedNode","getElementById","id","rtv","getAttribute","createDocumentFragment","createAttribute","_createAttribute","specified","createEntityReference","Name","NotSupportedError","validated","getQualifiedName","hasAttribute","getAttributeNode","setAttribute","removeAttribute","removeAttributeNode","setAttributeNodeNS","removeAttributeNS","old","hasAttributeNS","getAttributeNS","setAttributeNS","getElementsByClassName","classNames","classNamesSet","nodeClassNames","matches","nodeClassNamesSet","every","getElementsByTagName","isHTMLDocument","lowerQualifiedName","getElementsByTagNameNS","substringData","offset","count","substring","text","insertData","replaceData","deleteData","splitText","newText","newNode","defineProperty","getTextContent","get","set","amp","apos","gt","lt","quot","Aacute","aacute","Abreve","abreve","acd","acE","Acirc","acirc","acute","Acy","acy","AElig","aelig","af","Afr","afr","Agrave","agrave","alefsym","aleph","Alpha","alpha","Amacr","amacr","amalg","AMP","And","and","andand","andd","andslope","andv","ang","ange","angle","angmsd","angmsdaa","angmsdab","angmsdac","angmsdad","angmsdae","angmsdaf","angmsdag","angmsdah","angrt","angrtvb","angrtvbd","angsph","angst","angzarr","Aogon","aogon","Aopf","aopf","ap","apacir","apE","ape","apid","ApplyFunction","approx","approxeq","Aring","aring","Ascr","ascr","Assign","ast","asymp","asympeq","Atilde","atilde","Auml","auml","awconint","awint","backcong","backepsilon","backprime","backsim","backsimeq","Backslash","Barv","barvee","Barwed","barwed","barwedge","bbrk","bbrktbrk","bcong","Bcy","bcy","bdquo","becaus","Because","because","bemptyv","bepsi","bernou","Bernoullis","Beta","beta","beth","between","Bfr","bfr","bigcap","bigcirc","bigcup","bigodot","bigoplus","bigotimes","bigsqcup","bigstar","bigtriangledown","bigtriangleup","biguplus","bigvee","bigwedge","bkarow","blacklozenge","blacksquare","blacktriangle","blacktriangledown","blacktriangleleft","blacktriangleright","blank","blk12","blk14","blk34","block","bne","bnequiv","bNot","bnot","Bopf","bopf","bot","bottom","bowtie","boxbox","boxDL","boxDl","boxdL","boxdl","boxDR","boxDr","boxdR","boxdr","boxH","boxh","boxHD","boxHd","boxhD","boxhd","boxHU","boxHu","boxhU","boxhu","boxminus","boxplus","boxtimes","boxUL","boxUl","boxuL","boxul","boxUR","boxUr","boxuR","boxur","boxV","boxv","boxVH","boxVh","boxvH","boxvh","boxVL","boxVl","boxvL","boxvl","boxVR","boxVr","boxvR","boxvr","bprime","Breve","breve","brvbar","Bscr","bscr","bsemi","bsim","bsime","bsol","bsolb","bsolhsub","bull","bullet","bump","bumpE","bumpe","Bumpeq","bumpeq","Cacute","cacute","Cap","cap","capand","capbrcup","capcap","capcup","capdot","CapitalDifferentialD","caps","caret","caron","Cayleys","ccaps","Ccaron","ccaron","Ccedil","ccedil","Ccirc","ccirc","Cconint","ccups","ccupssm","Cdot","cdot","cedil","Cedilla","cemptyv","cent","CenterDot","centerdot","Cfr","cfr","CHcy","chcy","check","checkmark","Chi","chi","cir","circ","circeq","circlearrowleft","circlearrowright","circledast","circledcirc","circleddash","CircleDot","circledR","circledS","CircleMinus","CirclePlus","CircleTimes","cirE","cire","cirfnint","cirmid","cirscir","ClockwiseContourIntegral","CloseCurlyDoubleQuote","CloseCurlyQuote","clubs","clubsuit","Colon","colon","Colone","colone","coloneq","comma","commat","comp","compfn","complement","complexes","cong","congdot","Congruent","Conint","conint","ContourIntegral","Copf","copf","coprod","Coproduct","COPY","copysr","CounterClockwiseContourIntegral","crarr","Cross","cross","Cscr","cscr","csub","csube","csup","csupe","ctdot","cudarrl","cudarrr","cuepr","cuesc","cularr","cularrp","Cup","cup","cupbrcap","CupCap","cupcap","cupcup","cupdot","cupor","cups","curarr","curarrm","curlyeqprec","curlyeqsucc","curlyvee","curlywedge","curren","curvearrowleft","curvearrowright","cuvee","cuwed","cwconint","cwint","cylcty","Dagger","dagger","daleth","Darr","dArr","darr","dash","Dashv","dashv","dbkarow","dblac","Dcaron","dcaron","Dcy","dcy","DD","dd","ddagger","ddarr","DDotrahd","ddotseq","deg","Del","Delta","delta","demptyv","dfisht","Dfr","dfr","dHar","dharl","dharr","DiacriticalAcute","DiacriticalDot","DiacriticalDoubleAcute","DiacriticalGrave","DiacriticalTilde","diam","Diamond","diamond","diamondsuit","diams","die","DifferentialD","digamma","disin","div","divide","divideontimes","divonx","DJcy","djcy","dlcorn","dlcrop","dollar","Dopf","dopf","Dot","dot","DotDot","doteq","doteqdot","DotEqual","dotminus","dotplus","dotsquare","doublebarwedge","DoubleContourIntegral","DoubleDot","DoubleDownArrow","DoubleLeftArrow","DoubleLeftRightArrow","DoubleLeftTee","DoubleLongLeftArrow","DoubleLongLeftRightArrow","DoubleLongRightArrow","DoubleRightArrow","DoubleRightTee","DoubleUpArrow","DoubleUpDownArrow","DoubleVerticalBar","DownArrow","Downarrow","downarrow","DownArrowBar","DownArrowUpArrow","DownBreve","downdownarrows","downharpoonleft","downharpoonright","DownLeftRightVector","DownLeftTeeVector","DownLeftVector","DownLeftVectorBar","DownRightTeeVector","DownRightVector","DownRightVectorBar","DownTee","DownTeeArrow","drbkarow","drcorn","drcrop","Dscr","dscr","DScy","dscy","dsol","Dstrok","dstrok","dtdot","dtri","dtrif","duarr","duhar","dwangle","DZcy","dzcy","dzigrarr","Eacute","eacute","easter","Ecaron","ecaron","ecir","Ecirc","ecirc","ecolon","Ecy","ecy","eDDot","Edot","eDot","edot","ee","efDot","Efr","efr","eg","Egrave","egrave","egs","egsdot","elinters","ell","els","elsdot","Emacr","emacr","empty","emptyset","EmptySmallSquare","emptyv","EmptyVerySmallSquare","emsp","emsp13","emsp14","ENG","eng","ensp","Eogon","eogon","Eopf","eopf","epar","eparsl","eplus","epsi","Epsilon","epsilon","epsiv","eqcirc","eqcolon","eqsim","eqslantgtr","eqslantless","Equal","equals","EqualTilde","equest","Equilibrium","equiv","equivDD","eqvparsl","erarr","erDot","Escr","escr","esdot","Esim","esim","Eta","eta","ETH","eth","Euml","euml","euro","excl","exist","Exists","expectation","ExponentialE","exponentiale","fallingdotseq","Fcy","fcy","female","ffilig","fflig","ffllig","Ffr","ffr","filig","FilledSmallSquare","FilledVerySmallSquare","fjlig","flat","fllig","fltns","fnof","Fopf","fopf","ForAll","forall","fork","forkv","Fouriertrf","fpartint","frac12","frac13","frac14","frac15","frac16","frac18","frac23","frac25","frac34","frac35","frac38","frac45","frac56","frac58","frac78","frasl","frown","Fscr","fscr","gacute","Gamma","gamma","Gammad","gammad","gap","Gbreve","gbreve","Gcedil","Gcirc","gcirc","Gcy","gcy","Gdot","gdot","gE","ge","gEl","gel","geq","geqq","geqslant","ges","gescc","gesdot","gesdoto","gesdotol","gesl","gesles","Gfr","gfr","Gg","gg","ggg","gimel","GJcy","gjcy","gl","gla","glE","glj","gnap","gnapprox","gnE","gne","gneq","gneqq","gnsim","Gopf","gopf","grave","GreaterEqual","GreaterEqualLess","GreaterFullEqual","GreaterGreater","GreaterLess","GreaterSlantEqual","GreaterTilde","Gscr","gscr","gsim","gsime","gsiml","Gt","GT","gtcc","gtcir","gtdot","gtlPar","gtquest","gtrapprox","gtrarr","gtrdot","gtreqless","gtreqqless","gtrless","gtrsim","gvertneqq","gvnE","Hacek","hairsp","half","hamilt","HARDcy","hardcy","hArr","harr","harrcir","harrw","Hat","hbar","Hcirc","hcirc","hearts","heartsuit","hellip","hercon","Hfr","hfr","HilbertSpace","hksearow","hkswarow","hoarr","homtht","hookleftarrow","hookrightarrow","Hopf","hopf","horbar","HorizontalLine","Hscr","hscr","hslash","Hstrok","hstrok","HumpDownHump","HumpEqual","hybull","hyphen","Iacute","iacute","ic","Icirc","icirc","Icy","icy","Idot","IEcy","iecy","iexcl","iff","Ifr","ifr","Igrave","igrave","ii","iiiint","iiint","iinfin","iiota","IJlig","ijlig","Im","Imacr","imacr","image","ImaginaryI","imagline","imagpart","imath","imof","imped","Implies","in","incare","infin","infintie","inodot","Int","int","intcal","integers","Integral","intercal","Intersection","intlarhk","intprod","InvisibleComma","InvisibleTimes","IOcy","iocy","Iogon","iogon","Iopf","iopf","Iota","iota","iprod","iquest","Iscr","iscr","isin","isindot","isinE","isins","isinsv","isinv","it","Itilde","itilde","Iukcy","iukcy","Iuml","iuml","Jcirc","jcirc","Jcy","jcy","Jfr","jfr","jmath","Jopf","jopf","Jscr","jscr","Jsercy","jsercy","Jukcy","jukcy","Kappa","kappa","kappav","Kcedil","kcedil","Kcy","kcy","Kfr","kfr","kgreen","KHcy","khcy","KJcy","kjcy","Kopf","kopf","Kscr","kscr","lAarr","Lacute","lacute","laemptyv","lagran","Lambda","lambda","Lang","langd","langle","lap","Laplacetrf","laquo","Larr","lArr","larr","larrb","larrbfs","larrfs","larrhk","larrlp","larrpl","larrsim","larrtl","lat","lAtail","latail","late","lates","lBarr","lbarr","lbbrk","lbrace","lbrack","lbrke","lbrksld","lbrkslu","Lcaron","lcaron","Lcedil","lcedil","lceil","lcub","Lcy","lcy","ldca","ldquo","ldquor","ldrdhar","ldrushar","ldsh","lE","le","LeftAngleBracket","LeftArrow","Leftarrow","leftarrow","LeftArrowBar","LeftArrowRightArrow","leftarrowtail","LeftCeiling","LeftDoubleBracket","LeftDownTeeVector","LeftDownVector","LeftDownVectorBar","LeftFloor","leftharpoondown","leftharpoonup","leftleftarrows","LeftRightArrow","Leftrightarrow","leftrightarrow","leftrightarrows","leftrightharpoons","leftrightsquigarrow","LeftRightVector","LeftTee","LeftTeeArrow","LeftTeeVector","leftthreetimes","LeftTriangle","LeftTriangleBar","LeftTriangleEqual","LeftUpDownVector","LeftUpTeeVector","LeftUpVector","LeftUpVectorBar","LeftVector","LeftVectorBar","lEg","leg","leq","leqq","leqslant","les","lescc","lesdot","lesdoto","lesdotor","lesg","lesges","lessapprox","lessdot","lesseqgtr","lesseqqgtr","LessEqualGreater","LessFullEqual","LessGreater","lessgtr","LessLess","lesssim","LessSlantEqual","LessTilde","lfisht","lfloor","Lfr","lfr","lg","lgE","lHar","lhard","lharu","lharul","lhblk","LJcy","ljcy","Ll","ll","llarr","llcorner","Lleftarrow","llhard","lltri","Lmidot","lmidot","lmoust","lmoustache","lnap","lnapprox","lnE","lne","lneq","lneqq","lnsim","loang","loarr","lobrk","LongLeftArrow","Longleftarrow","longleftarrow","LongLeftRightArrow","Longleftrightarrow","longleftrightarrow","longmapsto","LongRightArrow","Longrightarrow","longrightarrow","looparrowleft","looparrowright","lopar","Lopf","lopf","loplus","lotimes","lowast","lowbar","LowerLeftArrow","LowerRightArrow","loz","lozenge","lozf","lpar","lparlt","lrarr","lrcorner","lrhar","lrhard","lrm","lrtri","lsaquo","Lscr","lscr","Lsh","lsh","lsim","lsime","lsimg","lsqb","lsquo","lsquor","Lstrok","lstrok","Lt","LT","ltcc","ltcir","ltdot","lthree","ltimes","ltlarr","ltquest","ltri","ltrie","ltrif","ltrPar","lurdshar","luruhar","lvertneqq","lvnE","macr","male","malt","maltese","Map","mapsto","mapstodown","mapstoleft","mapstoup","marker","mcomma","Mcy","mcy","mdash","mDDot","measuredangle","MediumSpace","Mellintrf","Mfr","mfr","mho","micro","mid","midast","midcir","middot","minus","minusb","minusd","minusdu","MinusPlus","mlcp","mldr","mnplus","models","Mopf","mopf","mp","Mscr","mscr","mstpos","Mu","mu","multimap","mumap","nabla","Nacute","nacute","nang","nap","napE","napid","napos","napprox","natur","natural","naturals","nbsp","nbump","nbumpe","ncap","Ncaron","ncaron","Ncedil","ncedil","ncong","ncongdot","ncup","Ncy","ncy","ndash","ne","nearhk","neArr","nearr","nearrow","nedot","NegativeMediumSpace","NegativeThickSpace","NegativeThinSpace","NegativeVeryThinSpace","nequiv","nesear","nesim","NestedGreaterGreater","NestedLessLess","NewLine","nexist","nexists","Nfr","nfr","ngE","nge","ngeq","ngeqq","ngeqslant","nges","nGg","ngsim","nGt","ngt","ngtr","nGtv","nhArr","nharr","nhpar","ni","nis","nisd","niv","NJcy","njcy","nlArr","nlarr","nldr","nlE","nle","nLeftarrow","nleftarrow","nLeftrightarrow","nleftrightarrow","nleq","nleqq","nleqslant","nles","nless","nLl","nlsim","nLt","nlt","nltri","nltrie","nLtv","nmid","NoBreak","NonBreakingSpace","Nopf","nopf","Not","not","NotCongruent","NotCupCap","NotDoubleVerticalBar","NotElement","NotEqual","NotEqualTilde","NotExists","NotGreater","NotGreaterEqual","NotGreaterFullEqual","NotGreaterGreater","NotGreaterLess","NotGreaterSlantEqual","NotGreaterTilde","NotHumpDownHump","NotHumpEqual","notin","notindot","notinE","notinva","notinvb","notinvc","NotLeftTriangle","NotLeftTriangleBar","NotLeftTriangleEqual","NotLess","NotLessEqual","NotLessGreater","NotLessLess","NotLessSlantEqual","NotLessTilde","NotNestedGreaterGreater","NotNestedLessLess","notni","notniva","notnivb","notnivc","NotPrecedes","NotPrecedesEqual","NotPrecedesSlantEqual","NotReverseElement","NotRightTriangle","NotRightTriangleBar","NotRightTriangleEqual","NotSquareSubset","NotSquareSubsetEqual","NotSquareSuperset","NotSquareSupersetEqual","NotSubset","NotSubsetEqual","NotSucceeds","NotSucceedsEqual","NotSucceedsSlantEqual","NotSucceedsTilde","NotSuperset","NotSupersetEqual","NotTilde","NotTildeEqual","NotTildeFullEqual","NotTildeTilde","NotVerticalBar","npar","nparallel","nparsl","npart","npolint","npr","nprcue","npre","nprec","npreceq","nrArr","nrarr","nrarrc","nrarrw","nRightarrow","nrightarrow","nrtri","nrtrie","nsc","nsccue","nsce","Nscr","nscr","nshortmid","nshortparallel","nsim","nsime","nsimeq","nsmid","nspar","nsqsube","nsqsupe","nsub","nsubE","nsube","nsubset","nsubseteq","nsubseteqq","nsucc","nsucceq","nsup","nsupE","nsupe","nsupset","nsupseteq","nsupseteqq","ntgl","Ntilde","ntilde","ntlg","ntriangleleft","ntrianglelefteq","ntriangleright","ntrianglerighteq","Nu","nu","num","numero","numsp","nvap","nVDash","nVdash","nvDash","nvdash","nvge","nvgt","nvHarr","nvinfin","nvlArr","nvle","nvlt","nvltrie","nvrArr","nvrtrie","nvsim","nwarhk","nwArr","nwarr","nwarrow","nwnear","Oacute","oacute","oast","ocir","Ocirc","ocirc","Ocy","ocy","odash","Odblac","odblac","odiv","odot","odsold","OElig","oelig","ofcir","Ofr","ofr","ogon","Ograve","ograve","ogt","ohbar","ohm","oint","olarr","olcir","olcross","oline","olt","Omacr","omacr","Omega","omega","Omicron","omicron","omid","ominus","Oopf","oopf","opar","OpenCurlyDoubleQuote","OpenCurlyQuote","operp","oplus","Or","or","orarr","ord","order","orderof","ordf","ordm","origof","oror","orslope","orv","oS","Oscr","oscr","Oslash","oslash","osol","Otilde","otilde","Otimes","otimes","otimesas","Ouml","ouml","ovbar","OverBar","OverBrace","OverBracket","OverParenthesis","par","para","parallel","parsim","parsl","part","PartialD","Pcy","pcy","percnt","period","permil","perp","pertenk","Pfr","pfr","Phi","phi","phiv","phmmat","phone","Pi","pi","pitchfork","piv","planck","planckh","plankv","plus","plusacir","plusb","pluscir","plusdo","plusdu","pluse","PlusMinus","plusmn","plussim","plustwo","pm","Poincareplane","pointint","Popf","popf","pound","Pr","pr","prap","prcue","prE","prec","precapprox","preccurlyeq","Precedes","PrecedesEqual","PrecedesSlantEqual","PrecedesTilde","preceq","precnapprox","precneqq","precnsim","precsim","Prime","prime","primes","prnap","prnE","prnsim","prod","Product","profalar","profline","profsurf","prop","Proportion","Proportional","propto","prsim","prurel","Pscr","pscr","Psi","psi","puncsp","Qfr","qfr","qint","Qopf","qopf","qprime","Qscr","qscr","quaternions","quatint","quest","questeq","QUOT","rAarr","race","Racute","racute","radic","raemptyv","Rang","rang","rangd","range","rangle","raquo","Rarr","rArr","rarr","rarrap","rarrb","rarrbfs","rarrc","rarrfs","rarrhk","rarrlp","rarrpl","rarrsim","Rarrtl","rarrtl","rarrw","rAtail","ratail","ratio","rationals","RBarr","rBarr","rbarr","rbbrk","rbrace","rbrack","rbrke","rbrksld","rbrkslu","Rcaron","rcaron","Rcedil","rcedil","rceil","rcub","Rcy","rcy","rdca","rdldhar","rdquo","rdquor","rdsh","Re","real","realine","realpart","reals","rect","REG","reg","ReverseElement","ReverseEquilibrium","ReverseUpEquilibrium","rfisht","rfloor","Rfr","rfr","rHar","rhard","rharu","rharul","Rho","rho","rhov","RightAngleBracket","RightArrow","Rightarrow","rightarrow","RightArrowBar","RightArrowLeftArrow","rightarrowtail","RightCeiling","RightDoubleBracket","RightDownTeeVector","RightDownVector","RightDownVectorBar","RightFloor","rightharpoondown","rightharpoonup","rightleftarrows","rightleftharpoons","rightrightarrows","rightsquigarrow","RightTee","RightTeeArrow","RightTeeVector","rightthreetimes","RightTriangle","RightTriangleBar","RightTriangleEqual","RightUpDownVector","RightUpTeeVector","RightUpVector","RightUpVectorBar","RightVector","RightVectorBar","ring","risingdotseq","rlarr","rlhar","rlm","rmoust","rmoustache","rnmid","roang","roarr","robrk","ropar","Ropf","ropf","roplus","rotimes","RoundImplies","rpar","rpargt","rppolint","rrarr","Rrightarrow","rsaquo","Rscr","rscr","Rsh","rsh","rsqb","rsquo","rsquor","rthree","rtimes","rtri","rtrie","rtrif","rtriltri","RuleDelayed","ruluhar","rx","Sacute","sacute","sbquo","Sc","sc","scap","Scaron","scaron","sccue","scE","sce","Scedil","scedil","Scirc","scirc","scnap","scnE","scnsim","scpolint","scsim","Scy","scy","sdot","sdotb","sdote","searhk","seArr","searr","searrow","sect","semi","seswar","setminus","setmn","sext","Sfr","sfr","sfrown","sharp","SHCHcy","shchcy","SHcy","shcy","ShortDownArrow","ShortLeftArrow","shortmid","shortparallel","ShortRightArrow","ShortUpArrow","shy","Sigma","sigma","sigmaf","sigmav","sim","simdot","sime","simeq","simg","simgE","siml","simlE","simne","simplus","simrarr","slarr","SmallCircle","smallsetminus","smashp","smeparsl","smid","smile","smt","smte","smtes","SOFTcy","softcy","sol","solb","solbar","Sopf","sopf","spades","spadesuit","spar","sqcap","sqcaps","sqcup","sqcups","Sqrt","sqsub","sqsube","sqsubset","sqsubseteq","sqsup","sqsupe","sqsupset","sqsupseteq","squ","Square","square","SquareIntersection","SquareSubset","SquareSubsetEqual","SquareSuperset","SquareSupersetEqual","SquareUnion","squarf","squf","srarr","Sscr","sscr","ssetmn","ssmile","sstarf","Star","star","starf","straightepsilon","straightphi","strns","Sub","sub","subdot","subE","sube","subedot","submult","subnE","subne","subplus","subrarr","Subset","subset","subseteq","subseteqq","SubsetEqual","subsetneq","subsetneqq","subsim","subsub","subsup","succ","succapprox","succcurlyeq","Succeeds","SucceedsEqual","SucceedsSlantEqual","SucceedsTilde","succeq","succnapprox","succneqq","succnsim","succsim","SuchThat","Sum","sum","sung","Sup","sup","sup1","sup2","sup3","supdot","supdsub","supE","supe","supedot","Superset","SupersetEqual","suphsol","suphsub","suplarr","supmult","supnE","supne","supplus","Supset","supset","supseteq","supseteqq","supsetneq","supsetneqq","supsim","supsub","supsup","swarhk","swArr","swarr","swarrow","swnwar","szlig","Tab","Tau","tau","tbrk","Tcaron","tcaron","Tcedil","tcedil","Tcy","tcy","tdot","telrec","Tfr","tfr","there4","Therefore","therefore","Theta","theta","thetasym","thetav","thickapprox","thicksim","ThickSpace","thinsp","ThinSpace","thkap","thksim","THORN","thorn","Tilde","tilde","TildeEqual","TildeFullEqual","TildeTilde","times","timesb","timesbar","timesd","tint","toea","top","topbot","topcir","Topf","topf","topfork","tosa","tprime","TRADE","trade","triangle","triangledown","triangleleft","trianglelefteq","triangleq","triangleright","trianglerighteq","tridot","trie","triminus","TripleDot","triplus","trisb","tritime","trpezium","Tscr","tscr","TScy","tscy","TSHcy","tshcy","Tstrok","tstrok","twixt","twoheadleftarrow","twoheadrightarrow","Uacute","uacute","Uarr","uArr","uarr","Uarrocir","Ubrcy","ubrcy","Ubreve","ubreve","Ucirc","ucirc","Ucy","ucy","udarr","Udblac","udblac","udhar","ufisht","Ufr","ufr","Ugrave","ugrave","uHar","uharl","uharr","uhblk","ulcorn","ulcorner","ulcrop","ultri","Umacr","umacr","uml","UnderBar","UnderBrace","UnderBracket","UnderParenthesis","Union","UnionPlus","Uogon","uogon","Uopf","uopf","UpArrow","Uparrow","uparrow","UpArrowBar","UpArrowDownArrow","UpDownArrow","Updownarrow","updownarrow","UpEquilibrium","upharpoonleft","upharpoonright","uplus","UpperLeftArrow","UpperRightArrow","Upsi","upsi","upsih","Upsilon","upsilon","UpTee","UpTeeArrow","upuparrows","urcorn","urcorner","urcrop","Uring","uring","urtri","Uscr","uscr","utdot","Utilde","utilde","utri","utrif","uuarr","Uuml","uuml","uwangle","vangrt","varepsilon","varkappa","varnothing","varphi","varpi","varpropto","vArr","varr","varrho","varsigma","varsubsetneq","varsubsetneqq","varsupsetneq","varsupsetneqq","vartheta","vartriangleleft","vartriangleright","Vbar","vBar","vBarv","Vcy","vcy","VDash","Vdash","vDash","vdash","Vdashl","Vee","vee","veebar","veeeq","vellip","Verbar","verbar","Vert","vert","VerticalBar","VerticalLine","VerticalSeparator","VerticalTilde","VeryThinSpace","Vfr","vfr","vltri","vnsub","vnsup","Vopf","vopf","vprop","vrtri","Vscr","vscr","vsubnE","vsubne","vsupnE","vsupne","Vvdash","vzigzag","Wcirc","wcirc","wedbar","Wedge","wedge","wedgeq","weierp","Wfr","wfr","Wopf","wopf","wp","wr","wreath","Wscr","wscr","xcap","xcirc","xcup","xdtri","Xfr","xfr","xhArr","xharr","Xi","xi","xlArr","xlarr","xmap","xnis","xodot","Xopf","xopf","xoplus","xotime","xrArr","xrarr","Xscr","xscr","xsqcup","xuplus","xutri","xvee","xwedge","Yacute","yacute","YAcy","yacy","Ycirc","ycirc","Ycy","ycy","yen","Yfr","yfr","YIcy","yicy","Yopf","yopf","Yscr","yscr","YUcy","yucy","Yuml","yuml","Zacute","zacute","Zcaron","zcaron","Zcy","zcy","Zdot","zdot","zeetrf","ZeroWidthSpace","Zeta","zeta","Zfr","zfr","ZHcy","zhcy","zigrarr","Zopf","zopf","Zscr","zscr","zwj","zwnj","extendError","writableName","Error","enumerable","writable","IndexSizeError","DomstringSizeError","HierarchyRequestError","WrongDocumentError","InvalidCharacterError","NoDataAllowedError","NoModificationAllowedError","NotFoundError","InUseAttributeError","InvalidStateError","SyntaxError","InvalidModificationError","NamespaceError","InvalidAccessError","ValidationError","TypeMismatchError","SecurityError","NetworkError","AbortError","URLMismatchError","QuotaExceededError","TimeoutError","InvalidNodeTypeError","DataCloneError","EncodingError","NotReadableError","UnknownError","ConstraintError","DataError","TransactionInactiveError","ReadOnlyError","VersionError","OperationError","NotAllowedError","OptOutError","DOMExceptionNames","isValidDomExceptionCode","messageOrCode","nameOrMessage","captureStackTrace","defineProperties","code","ExceptionCode","INDEX_SIZE_ERR","DOMSTRING_SIZE_ERR","WRONG_DOCUMENT_ERR","NO_DATA_ALLOWED_ERR","NO_MODIFICATION_ALLOWED_ERR","NOT_SUPPORTED_ERR","INVALID_STATE_ERR","SYNTAX_ERR","INVALID_MODIFICATION_ERR","INVALID_ACCESS_ERR","VALIDATION_ERR","TYPE_MISMATCH_ERR","SECURITY_ERR","NETWORK_ERR","ABORT_ERR","URL_MISMATCH_ERR","QUOTA_EXCEEDED_ERR","TIMEOUT_ERR","INVALID_NODE_TYPE_ERR","DATA_CLONE_ERR","entries","detectUnicodeSupport","RegExpImpl","RegExp","match","exec","UNICODE_SUPPORT","regexp","lastIndexOf","chars_without","search","JSON","stringify","args","self","isStr","regg","concat","Char","_SChar","SChar_s","S","S_OPT","NameStartChar","NameChar","Nmtoken","EntityRef","CharRef","Reference","PEReference","EntityValue","AttValue","NCName","QName","QName_group","SystemLiteral","PI","PubidChar","PubidLiteral","PCDATA","Mixed","contentspec","elementdecl","NotationType","Enumeration","EnumeratedType","AttType","DefaultDecl","AttlistDecl","ExternalID","ExternalID_match","NDataDecl","ENTITY_DECL_START","GEDecl","PEDef","EntityDecl","PublicID","NotationDecl","Eq","VersionNum","VersionInfo","EncName","XMLDecl","CData","CDSect","UNICODE_REPLACEMENT_CHARACTER","domParser","_copy","defaultNSMapCopy","fixedFromCharCode","surrogate1","surrogate2","fromCharCode","entityReplacer","complete","k","charAt","parseInt","appendText","end","xt","ENTITY_REG","m","lineEnd","linePattern","lineStart","parseStack","currentNSMap","unclosedTags","tagStart","fromSource","tagNameRaw","tagNameMatch","currentTagName","tagNameLower","config","pop","localNSMap","parseProcessingInstruction","parseDoctypeCommentOrCData","ElementAttributes","parseElementStartPart","closed","locator2","copyLocator","parseHtmlSpecialContent","max","f","addAttribute","qname","startIndex","attributeNames","addValue","attrName","s","setTagName","nsp","nsPrefix","elStartEnd","isEscapableRaw","elEndStart","parseUtils","char","skip","substringFromIndex","getIndex","getMatch","getSource","skipBlanks","blanks","substringStartsWith","groups","SystemLiteralOnly","parsePI","intSubsetStart","parseDoctypeInternalSubset","endDTD","getLocalName","ol","layer","VectorTile","TileJSON","format","MVT","Observable","Circle","Fill","Icon","compose","transform","dx1","dy1","sx","sy","dx2","dy2","sin","cos","createOrUpdate","minX","minY","maxX","maxY","createOrUpdateEmpty","Infinity","createOrUpdateFromFlatCoordinates","flatCoordinates","stride","extent","extendXY","extendFlatCoordinates","x","y","min","getHeight","squaredSegmentDistance","x1","y1","x2","y2","dx","dy","douglasPeucker","squaredTolerance","simplifiedFlatCoordinates","simplifiedOffset","markers","stack","last","first","maxSquaredDistance","squaredDistance","douglasPeuckerArray","ends","simplifiedEnds","snap","tolerance","round","quantize","x3","y3","quantizeArray","ascending","arr","extension","isArray","linearRingContainsXY","wn","linearRingsContainsXY","getInteriorPointOfArray","flatCenters","flatCentersOffset","intersections","r","rr","pointX","NaN","maxSegmentLength","sort","segmentLength","abs","isNaN","code_","units_","extent_","worldExtent_","worldExtent","axisOrientation_","axisOrientation","global_","global","canWrapX_","getPointResolutionFunc_","getPointResolution","defaultTileGrid_","metersPerUnit_","metersPerUnit","canWrapX","getCode","getExtent","getUnits","getMetersPerUnit","getWorldExtent","getAxisOrientation","isGlobal","setGlobal","getDefaultTileGrid","setDefaultTileGrid","tileGrid","setExtent","setWorldExtent","setGetPointResolution","func","getPointResolutionFunc","RADIUS","HALF_SIZE","EXTENT","WORLD_EXTENT","MAX_SAFE_Y","log","tan","EPSG3857Projection","super","units","resolution","point","cosh","PROJECTIONS","fromEPSG4326","output","dimension","toEPSG4326","atan","exp","EPSG4326Projection","cache","transforms","destination","transformFn","sourceCode","destinationCode","E","sqrt","epsgRegExes","zoneFromCode","epsgId","re","number","north","projectionFactories","cloneTransform","addProjection","projection","add","projectionLike","makeProjection","addEquivalentProjections","projections","forEach","addProjections","projections2","forwardTransform","inverseTransform","linearRingIsClockwise","edge","interpolatePoint","fraction","o","cumulativeLengths","haystack","needle","comparator","cmp","low","high","found","binarySearch","projection1","projection2","tmpTransform","RenderFeature","properties","styleFunction","id_","type_","flatCoordinates_","flatInteriorPoints_","flatMidpoints_","ends_","properties_","squaredTolerance_","stride_","simplifiedGeometry_","coordinate","createOrUpdateFromCoordinate","getFlatInteriorPoint","flatCenter","getFlatInteriorPoints","endss","startOrientation","prevEndIndex","orientation","linearRingss","interiorPoints","getInteriorPointsOfMultiArray","getFlatMidpoint","getFlatMidpoints","midpoint","getId","getOrientedFlatCoordinates","getGeometry","getSimplifiedGeometry","simplifyTransformed","getProperties","getPropertiesInternal","getStride","getStyleFunction","getType","pixelExtent","projectedExtent","scale","destinationStride","j","transform2D","applyTransform","clone","getEnds","enableSimplifyTransformed","fn","lastResult","lastArgs","lastThis","nextArgs","arr1","arr2","len1","memoizeOne","getFlatCoordinates","Stroke","Style","functions","render","canvas","TileState","util","Image","Layer","Group","Raster","Source","tilegrid","TileGrid","View","proj","Units","events","Event","getDefaultExportFromCjs","__esModule","parseCSSColor_1","kCSSColorTable","clamp_css_byte","clamp_css_float","parse_css_int","str","parseFloat","parse_css_float","css_hue_to_rgb","m1","m2","h","parseCSSColor","css_str","iv","op","ep","fname","params","Color","rgba","toArray","toArray01","toArray01PremultipliedAlpha","black","white","transparent","red","blue","Color$1","convertLiteral","convertFunction","parameters","propertySpec","stops","property","values","expression","splice","convertIdentityFunction","zoomAndFeatureDependent","featureDependent","zoomDependent","stop","tokens","convertTokenString","featureFunctionParameters","featureFunctionStops","zoomStops","zoom","functionType","getFunctionType","getInterpolateOperator","z","appendStopPair","convertPropertyFunction","fixupDegenerateStepCurve","convertZoomAndPropertyFunction","isStep","convertZoomFunction","colorSpace","getFallback","defaultValue","curve","interpolated","result","pos","literal","ParsingError","ParsingError$1","Scope","bindings","has","Scope$1","NullType","kind","NumberType","StringType","BooleanType","ColorType","ObjectType","ValueType","CollatorType","FormattedType","ResolvedImageType","array$1","itemType","N","toString$1","valueMemberTypes","checkSubtype","expected","memberType","isValidType","provided","allowedTypes","some","isValidNativeType","Collator","caseSensitive","diacriticSensitive","locale","sensitivity","collator","Intl","usage","compare","lhs","rhs","resolvedLocale","resolvedOptions","FormattedSection","fontStack","textColor","Formatted","sections","fromString","unformatted","isEmpty","section","factory","serialize","serialized","ResolvedImage","available","validateRGBA","isValue","mixed","typeOf","Literal","context","expectedType","evaluate","eachChild","outputDefined","Literal$1","RuntimeError$1","toJSON","types$2","string","boolean","Assertion","floor","parsed","ctx","arg","Assertion$1","FormatExpression","firstArg","nextTokenMayBeObject","font","lastExpression","content","evaluatedContent","ImageExpression","evaluatedImageName","availableImages","types$1","Coercion","Boolean","parseColor","Number","Coercion$1","geometryTypes","EvaluationContext$1","globals","featureState","formattedSection","_parseColorCache","canonical","featureTileCoord","featureDistanceData","geometryType","geometry","canonicalID","distanceFromCenter","center","dX","dY","bearing","cached","CompoundExpression","_evaluate","definition","definitions","availableOverloads","overloads","signature","signatureContext","ParsingContext$1","registry","path","scope","parsedArgs","argParseFailed","signatures","stringifySignature","actualTypes","register","CompoundExpression$1","CollatorExpression","updateBBox","bbox","coord","boxWithinBox","bbox1","bbox2","getTileCoordinates","tilesAtZoom","pow","onBoundary","p1","p2","pointWithinPolygon","rings","inside","len2","pointWithinPolygons","polygons","twoSided","q1","q2","det1","det2","lineIntersectLine","d","vectorP","vectorQ","v1","v2","lineIntersectPolygon","polygon","lineStringWithinPolygon","line","lineStringWithinPolygons","getTilePolygon","coordinates","getTilePolygons","updatePoint","polyBBox","worldSize","halfWorldSize","shift","getTilePoints","pointBBox","shifts","tilePoints","points","getTileLines","lineBBox","tileLines","tileLine","Within","geojson","geometries","features","polygonGeometry","tilePolygon","tilePolygons","pointsWithinPolygons","linesWithinPolygons","Within$1","isFeatureConstant","isStateConstant","isGlobalPropertyConstant","Var","boundExpression","Var$1","ParsingContext","expr","_parse","annotate","typeAnnotation","Expr","actual","isConstant","ec","isTypeAnnotation","childrenConstant","findStopLessThanOrEqualTo","currentValue","nextValue","lowerIndex","upperIndex","currentIndex","Step","labels","outputs","label","outputType","labelKey","valueKey","stopCount","out","Step$1","unitbezier","UnitBezier","p1x","p1y","p2x","p2y","cx","bx","ax","cy","by","ay","sampleCurveX","sampleCurveY","sampleCurveDerivativeX","solveCurveX","t0","t1","t2","d2","solve","UnitBezier$1","interpolate","__proto__","color","from","to","array","Xn","Zn","t3","deg2rad$1","rad2deg","xyz2lab","lab2xyz","xyz2rgb","rgb2xyz","rgbToLab","rgbColor","labToRgb","labColor","interpolateHue","lab","forward","reverse","hcl","atan2","hclColor","Interpolate","operator","interpolation","interpolationFactor","lower","upper","exponentialInterpolation","controlPoints","rest","outputLower","outputUpper","lowerValue","upperValue","difference","progress","Interpolate$1","Coalesce","needsAnnotation","firstImage","argCount","Coalesce$1","Let","binding","Let$1","At","At$1","In","In$1","IndexOf","fromIndex","IndexOf$1","Match","inputType","cases","otherwise","labelContext","MAX_SAFE_INTEGER","sortedLabels","groupedByOutput","outputLookup","outputIndex","coerceLabel","Match$1","Case","branches","_","Case$1","Slice","beginIndex","endIndex","Slice$1","isComparableType","eqCollate","makeComparison","compareBasic","compareWithCollator","isOrderComparison","Comparison","hasUntypedArgument","rt","Equals","NotEquals","LessThan","GreaterThan","LessThanOrEqual","GreaterThanOrEqual","NumberFormat","currency","unit","minFractionDigits","maxFractionDigits","minimumFractionDigits","maximumFractionDigits","Length","expressions","obj","varargs","pitch","heatmapDensity","lineProgress","skyRadialProgress","accumulated","LN2","LN10","asin","acos","ceil","isSupportedScript","toUpperCase","success","isFunction","StyleExpression","_warningHistory","_evaluator","_defaultValue","spec","getDefaultValue","_enumValues","evaluateWithoutErrorHandling","val","warn","createExpression","parser","types","enum","formatted","resolvedImage","getExpectedType","ZoomConstantExpression","_styleExpression","isStateDependent","ZoomDependentExpression","interpolationType","createPropertyExpression","isFeatureConstant$1","supportsPropertyExpression","isZoomConstant","supportsZoomExpression","zoomCurve","findZoomCurve","supportsInterpolation","childResult","deepUnbundle","unbundledValue","valueOf","unbundle","isExpressionFilter","createFilter","layerType","needGeometry","needFeature","convertFilter","filterExp","staticFilter","isDynamicFilter","unionDynamicBranches","collapseDynamicBooleanExpressions","extractStaticFilter","filterSpec","compiledStaticFilter","filterFunc","err","globalProperties","dynamicFilterFunc","compiledDynamicFilter","dynamicFilter","geometryNeeded","collapsed","dynamicConditionExpressions","collapsedExpression","subExpression","isBranchingDynamically","Set","filters","convertComparisonOp","convertNegation","convertInOp","convertHasOp","refProperties","deref","derefLayers","layers","ref","fontWeights","thin","hairline","light","book","regular","normal","plain","roman","standard","medium","bold","heavy","fat","poster","sp","italicRE","fontCache","mb2css","fonts","size","lineHeight","cssData","haveWeight","haveStyle","weight","fontFamilies","parts","maybeWeight","w","previousPart","startsWith","fontFamily","mapboxBaseUrl","getMapboxPath","url","normalizeStyleUrl","token","mapboxPath","decodeURI","URL","location","href","mapboxSubdomains","normalizeSourceUrl","tokenParam","styleUrl","urlObject","searchParams","sizeFactor","window","devicePixelRatio","functionCacheByStyleId","filterCacheByStyleId","styleId","getStyleId","glStyle","getStyleFunctionKey","olLayer","getUid","getFunctionCache","functionCache","getFilterCache","filterCache","deg2rad","degrees","defaultResolutions","resolutions","res","createCanvas","width","height","WorkerGlobalScope","OffscreenCanvas","document","getZoomForResolution","zoomFactor","getResolutionForZoom","factor","pendingRequests","fetchResource","resourceType","metadata","request","transformedRequest","transformRequest","pendingRequest","toPromise","then","Request","headers","fetch","response","ok","json","Promise","reject","catch","getGlStyle","glStyleOrUrl","resolve","trim","accessToken","tilejsonCache","getTileJson","glSource","cacheKey","promise","tileLoadFunction","tile","setLoader","arrayBuffer","getFormat","readFeatures","featureProjection","setFeatures","setState","getImage","blob","createObjectURL","addEventListener","revokeObjectURL","tiles","normalizedSourceUrl","accessTokenParam","tileJson","tileUrl","scheme","drawIconHalo","spriteImage","spriteImageData","haloWidth","haloColor","imgSize","pixelRatio","imageCanvas","imageContext","getContext","drawImage","imageData","getImageData","globalCompositeOperation","fillStyle","jj","arc","fill","smoothstep","drawSDF","buffer","putImageData","hairSpacePool","applyLetterSpacing","letterSpacing","textWithLetterSpacing","lines","joinSpaceString","measureContext","getMeasureContext","measureText","measureCache","wrapText","em","hardLines","wrappedText","words","maxWidth","word","testLine","prevWidth","nextWidth","lineWords","lastWord","fontFamilyRegEx","stripQuotesRegEx","loadedFontFamilies","hasFontFamily","family","styleSheets","styleSheet","cssRules","rules","cssRule","cssText","processedFontFamilies","emptyObj$1","zoomObj","renderFeatureCoordinates","renderFeature","layoutOrPaint","layerId","isExpr","compiledExpression","rawExpression","expressionData","bind","getDeclutterMode","evaluateFilter","renderTransparentEnabled","colorWithOpacity","opacity","templateRegEx","fromTemplate","recordLayer","styleFunctionArgs","stylefunction","sourceOrLayers","spriteData","spriteImageUrl","getFonts","spriteImageSize","spriteImageUnSDFed","blobUrl","crossOrigin","onload","changed","worker","postMessage","action","event","allLayers","layersBySourceLayer","mapboxLayers","iconImageCache","patternCache","mapboxSource","sourceLayer","sources","textHalo","styles","onlyLayer","featureBelongsToLayer","stylesLength","layerData","layout","paint","visibility","minzoom","maxzoom","stroke","strokeColor","fillIcon","icon","getFill","getStroke","getText","setZIndex","icon_cache_key","pattern","globalAlpha","createPattern","setColor","setWidth","setLineCap","setLineJoin","setMiterLimit","setLineDash","iconImg","skipLabel","textLineHeight","textSize","maxTextWidth","hasImage","placementAngle","iconImage","styleGeom","imageElement","iconRotationAlignment","geom","xM","dotProduct","iconSize","iconColor","iconCacheKey","declutterMode","displacement","iconOptions","rotateWithView","sdf","setGeometry","setRotation","setOpacity","setAnchor","setImage","setText","circleRadius","circleStrokeColor","circleTranslate","circleColor","circleStrokeWidth","cache_key","radius","fontArray","includes","textField","acc","chunk","chunkFont","padding","textTransform","wrappedLabel","setFont","setKeepUpright","keepUpright","textAnchor","placement","textAlign","setPlacement","setRepeat","symbolSpacing","setOverflow","textHaloWidth","textOffset","textTranslate","vOffset","hOffset","textRotationAlignment","setRotateWithView","setMaxAngle","setTextAlign","textBaseline","setTextBaseline","textJustify","setJustify","setOffsetX","setOffsetY","setFill","halfTextSize","setStroke","textPadding","getPadding","setStyle","getTileResolutions","tileSize","createXYZ","maxZoom","getResolutions","completeOptions","applyStyle","sourceOrLayersOrOptions","optionsOrPath","sourceId","updateSource","assignSource","setupVectorSource","targetSource","setTileUrlFunction","getTileUrlFunction","setUrls","getUrls","format_","getAttributions","setAttributions","getTileLoadFunction","defaultLoadFunction","setTileLoadFunction","equivalent","getProjection","getTileGrid","setSource","isFinite","getMaxResolution","getMinZoom","setMaxResolution","setupGeoJSONSource","url_","getUrl","spriteScale","onChange","sprite","METERS_PER_UNIT","templateUrl","webfonts","fontsKey","fontDescriptions","cssFont","registerFont","fontDescription","checkedFonts","fontUrl","querySelector","markup","rel","head","getStyle","normalizeSpriteUrl","spriteUrl","origin","pathname","spritesJson","transformed","sourceOptionsFromTileJSON","tileJSON","tileJSONSource","tileJSONDoc","getTileJSON","bounds","fromLonLat","tr","extentFromTileJSON","projectionExtent","minZoom","sourceOptions","attributions","getTopLeft","getOrigin","getTileSize","urls","getBboxTemplate","geoJsonFormat","dataProjection","geoJsonUrl","extentUrl","bboxTemplate","attribution","loader","failure","addFeatures","removeLoadedExtent","strategy","getUserProjection","LayerMapBox","_VectorTileLayer","settings","_this","_classCallCheck","ssl","protocol","layerCfg","configuration","Config","isConfigLoaded","getLayerConf","styleTitle","styleName","VectorTileSource","state","_originators","originators","_legends","legends","_metadata","_description","description","_title","_quicklookUrl","quicklookUrl","layerVectorTileOptions","Utils","mergeParams","olParams","service","setStyleMapBox","_possibleConstructorReturn","_inherits","credentials","onStyleMapBoxLoad","onStyleMapBoxError","_this2","styleSource","vectorTileJson","TileJSONSource","on","getState","observableUnByKey","VectorTileLayer","GeoportalMapBox","LayerWMS","_TileLayer","olSourceParams","getLayerId","sourceParams","wmsSource","SourceWMS","apiKey","layerTileOptions","getParams","LAYERS","geobbox","globalConstraints","left","right","olTransformExtentProj","olGetProj","_typeof","minResolution","minScale","maxResolution","maxScale","TileLayer","GeoportalWMS","LayerWMTS","wmtsSource","SourceWMTS","getLayer","globalConstrainWFSts","GeoportalWMTS","TileWMS","Logger","getLogger","_TileWMSSource","wmsParams","getLayerKey","getLayerParams","urlParams","Pkg","olExtVersion","wmsSourceOptions","Gp","Helper","normalyzeUrl","SERVICE","VERSION","STYLES","FORMAT","TileWMSSource","WMTS","getZoomLevelFromScaleDenominator","scaleDenominator","crs","resolutionsNatives","drawLogo","jl","originator","constraints","kl","constraint","minZoomLevel","maxScaleDenominator","maxZoomLevel","minScaleDenominator","viewExtent","intersects","logo","container","className","textContent","innerHTML","extent1","extent2","intersectsX","intersectsY","_WMTSExtended","wmtsParams","wmtsSourceOptions","LayerUtils","matrixSet","TMSLink","WMTSTileGrid","nativeResolutions","matrixIds","tileMatrices","topLeftCorner","WMTSExtended","_regeneratorRuntime","asyncIterator","u","toStringTag","define","configurable","wrap","Generator","Context","makeInvokeMethod","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","defineIteratorMethods","_invoke","AsyncIterator","invoke","__await","callInvokeWithMethodAndArg","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","resultName","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","displayName","isGeneratorFunction","mark","setPrototypeOf","awrap","prev","rval","handle","finish","delegateYield","asyncGeneratorStep","_asyncToGenerator","_next","_throw","m_suggestions","controller","AbortController","m_index","m_fields","m_size","m_maximumResponses","m_filterByService","m_filterByProjection","m_filterByLayerPriority","m_filterWMTSPriority","m_filterByTMS","m_url","EventTarget","suggest","_ref","_callee","results","_loop","_i","_context2","clear","fields","append","status","_context","findIndex","layer_name","score","inventory","unique","srs","keywords","metadata_urls","tech","tags","theme","producer","dispatchEvent","CustomEvent","bubbles","detail","getSuggestions","_x","abort","getNames","getTitles","setIndex","setFields","setSize","setUrl","eval","setMaximumResponses","setFiltersByService","setFiltersByProjection","setFiltersByLayerPriority","setFilterWMTSPriority","setFiltersByTMS","updateFilterByTMS","_ref2","_callee2","lstName","_context3","_x2","_WMTSSource","_callSuper","tilePixelRatio","tileCoord","getTileCoordForCoordAndResolution","tileExtent","getTileCoordExtent","transformedTileCoord","tmpTileCoord","tmpExtent","olCreateEmpty","olGetWidth","olIntersects","getTransformedTileCoord","tileResolution","getResolution","tileMatrix","getMatrixIds","baseParams","REQUEST","LAYER","TILECOL","TILEROW","TILEMATRIX","TILEMATRIXSET","getMatrixSet","STYLE","WMTSSource","detectSupport","isDesktop","userAgent","navigator","LoggerByDefault","process","VERBOSE","env","Log","logname","disableAll","loggers","enableAll","module","objectOrFunction","vertxNext","customSchedulerFn","asap","queue","flush","scheduleFlush","setScheduler","scheduleFn","setAsap","asapFn","browserWindow","browserGlobal","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","isNode","isWorker","Uint8ClampedArray","importScripts","MessageChannel","useNextTick","nextTick","useVertxTimer","useSetTimeout","useMutationObserver","iterations","observer","observe","characterData","useMessageChannel","channel","port1","onmessage","port2","globalSetTimeout","setTimeout","attemptVertx","vertx","Function","require","runOnLoop","runOnContext","onFulfillment","onRejection","noop","PROMISE_ID","makePromise","_state","invokeCallback","_result","subscribe","resolve$1","Constructor","PENDING","FULFILLED","REJECTED","selfFulfillment","cannotReturnOwn","tryThen","then$$1","fulfillmentHandler","rejectionHandler","handleForeignThenable","thenable","sealed","fulfill","reason","_label","handleOwnThenable","handleMaybeThenable","maybeThenable","publishRejection","_onerror","publish","_subscribers","subscribers","settled","hasCallback","succeeded","initializePromise","resolver","nextId","validationError","Enumerator","_instanceConstructor","_remaining","_enumerate","_eachEntry","entry","resolve$$1","_then","didError","_settledAt","Promise$1","_willSettleAt","enumerator","all","reject$1","needsResolver","needsNew","finally","polyfill","local","P","promiseToString","cast","_setScheduler","_setAsap","_asap","ErrorService","TYPE_UNKERR","TYPE_SRVERR","TYPE_USEERR","WPS","logger","trace","DataObject","paramservice","paramversion","paramidentifier","identifier","paramrawdataoutput","rawdataoutput","paramrequest","requestString","template","post","namespaceByDefault","schemaLocationByDefault","processRequestString","__addDataInputs","tmpl","sep","that","getData","__addDataInput","tmp","setMethod","getMethod","xmlString","xmlDoc","reader","__getXMLDOC","setReader","errorMsg","ActiveXObject","loadXML","parseError","errorCode","linepos","parsererror","__readDefault","dataAttributes","nodeAttributes","attribute","__getAttributes","childData","children","getXMLString","setXMLString","getReader","read","getXMLDoc","setXMLDoc","parserOutput","__getRootNode","servicesVersion","servicesDate","Protocols","XHR","Services","DefaultUrl","AltiResponse","A","Alti","Elevation","AutoCompleteResponse","AutoComplete","SuggestedLocation","IsoCurveResponse","RouteResponse","Route","RouteInstruction","uuid","Date","now","timeOut","info","onResponse","callbackId","callbackSuffix","urlHasCallbackKey","urlHasCallbackName","idx","callbackName","HasCallbackName","onTimeOut","onTimeOutTrigger","_deleteScript","clearTimeout","_createScript","scriptu","scripto","send","nocache","getTime","proxy","referer","__call","onFailure","__callJSON","__callXML","corps","hXHR","nodefetch","opts","Referer","body","statusText","XMLHttpRequest","overrideMimeType","setRequestHeader","onerror","ontimeout","onreadystatechange","readyState","responseURL","data4xhr","XDomainRequest","timeout","responseText","data4xdr","getMessage","CLASSNAME","positions","outputFormat","resource","sampling","api","httpMethod","zonly","measures","serverUrl","lstUrlByDefault","newUrl","urlFound","wps","buildRequest","onSuccess","build","analyzeResponse","rawResponse","AltiResponseReader","READERS","elevations","altiResponse","elevation","textNode","lon","elevationObject","source_name","measure","source_measure","measureChildren","exceptionreport","exceptionReport","exception","exceptionCode","delimiter","indent","bOnError","bOnSuccess","myReq","AltiRequestREST","profil","getLon","getLat","myTemplate","rqstWPS","AltiElevationRequest","_zonly","AltiProfilRequest","_sampling","AltiRequest","setPositions","lstPosition","getPositions","addPositions","lstLon","lstLat","JSONResponse","errorMess","Measure","options_","patchOptionConvertor","territory","terr","maximumResponses","filterOptions","normalyzeParameters","encodeURIComponent","suggestedLocation","country","street","poi","poiType","commune","city","fullText","fulltext","postalCode","zipcode","classification","suggestedLocations","CommonService","proxyURL","onBuildRequest","callService","onCallService","onAnalyzeResponse","strUrlProxified","strData","bUrlProxified","requestMetaOptions","http","onBeforeParse","newResponse","customConfigFile","sync","listConfigUrls","__callServiceSync","__callService","listConfigResults","Fetch","fetchFactory","promises","ConfigJSON","objects","allLayersConfig","allKeysConfig","allTMSConfig","generalOptions","apiKeys","tileMatrixSets","mergeConfig","IConfig","ConfigInterface","defaultGMLGFIStyle","wgs84Resolutions","isKeyConfLoaded","getLayersId","layerName","servicePartsLayer","getLayersConf","layersIdArray","lyrId","layerConf","serviceParams","formats","defaultProjection","globalConstraint","wmtsOptions","tileMatrixSetLimits","tileMatrixSetLink","tmsConf","getTMSConf","layerKey","resourcesByKey","arrayLayerId","getTileMatrixSets","tmsID","getGlobalConstraints","DefaultUrlService","new_key","ProcessIsoCurve","_key","ReverseGeocode","Geocode","GeocodeResponseParser","_parseFeature","geocodeResponse","accuracy","placeAttributes","_type","matchType","locations","mess","query","returnFreeForm","geocodeMethod","returnTrueGeometry","maxResp","GeocodeRequestREST","GeocodeParamREST","searchGeometry","getFilters","getSearchGeometry","GeocodeResponse","GeocodedLocation","bbox2Json","circle","circle2Json","polygon2Json","jsonGeom","geoEPSG","time","distance","exclusions","distanceUnit","timeUnit","smoothing","holes","graph","constraintTunnel","constraintPont","constraintAutoroute","constraintType","oIsoCurve","ProcessIsoCurveRequest","mode","postRequest","costType","costValue","profile","direction","ProcessIsoCurveParam","getLocation","getDistanceUnit","getConstraints","constraintArray","getDirection","coords","ProcessIsoCurveResponse","RouteRequestREST","RouteParamREST","startPoint","endPoint","intermediates","viaPoints","optimization","routePreference","getSteps","waysAttributes","getIntermediates","getWaysAttributes","getProfile","getOptimization","legs","legSteps","steps","totalTime","duration","totalDistance","geometryInInstructions","routeGeometry","legList","portions","step","routeInstructions","instruction","modifier","exit","nom_1_droite","toponyme","provideBbox","expectedStartTime","UrlByDefault","getConfig","getAltitude","geocode","reverseGeocode","autoComplete","route","isoCurve","myParams","tabParams","encode","myUrl","firstOccuranceIndex","msg","PARAM_MISSING","PARAM_EMPTY","PARAM_TYPE","PARAM_FORMAT","PARAM_NOT_SUPPORT","PARAM_NOT_SUPPORT_NODEJS","PARAM_UNKNOWN","SERVICE_REQUEST_BUILD","SERVICE_REQUEST_EMPTY","SERVICE_RESPONSE_EXCEPTION","SERVICE_RESPONSE_EXCEPTION_2","SERVICE_RESPONSE_ANALYSE","SERVICE_RESPONSE_ANALYSE_2","SERVICE_RESPONSE_EMPTY","SERVICE_RESPONSE_EMPTY_2","SERVICE_RESPONSE_FORMAT","SERVICE_RESPONSE_FORMAT_2","SERVICE_RESPONSE_FORMAT_3","CLASS_CONSTRUCTOR","clef","parametres","undefinedType","isIE","logMethods","_loggersByName","defaultLogger","bindMethod","methodName","traceForIE","realMethod","replaceLoggingMethods","getLevel","methodFactory","debug","levels","SILENT","enableLoggingWhenConsoleArrives","defaultMethodFactory","_level","_loggerName","inheritedLevel","defaultLevel","userLevel","storageKey","persistLevelIfPossible","levelNum","levelName","localStorage","ignore","cookie","getPersistedLevel","storedLevel","cookieName","clearPersistedLevel","removeItem","normalizeLevel","setLevel","persist","setDefaultLevel","resetLevel","TRACE","rebuild","childName","initialLevel","_log","noConflict","getLoggers","globalObject","getGlobal","Headers","Response","GeoJSON","Tile","Vector","loadingstrategy","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","globalThis","control","Control","getComputedStyle","getPropertyValue","_Control","ControlExtended","listable","_createClass","getMap","PositionFactory","update","ANCHORS","_PositionFactory_brand","WeakSet","caller","_classPrivateMethodInitSpec","_assertClassBrand","_createContainer","_setAnchor","prepend","_existContainer","getOverlayContainerStopEvent","sizeW","offsetWidth","sizeH","offsetHeight","panels","panel","checkDsfr","exceptions","openedPanelID","openedPanel","exceptionPanel","controlPanels","bottomLeft","topLeft","_toConsumableArray","bottomRight","topRight","panelID","isException","getSameSideOpenedPanel","click","onPanelOpen","PanelManager","Overlay","lightOrange","darkOrange","turquoiseBlue","defaultOffset","interaction","_extensions","_options","clean","unset","interactions","getInteractions","getArray","getActive","DrawInteraction","SelectInteraction","ModifyInteraction","setActive","timestamp","generate","MathUtils","modulo","decimalToDMS","hemispheres","numDigits","normalizedDegrees","dflPrecision","precision","sec","dmsToDecimal","minutes","seconds","coordinateToDecimal","olCoordinate","toFixed","lng","coordinateToDMS","coordinateToRad","coordinateToGon","coordinateToMeter","coordinateToKMeter","toInteger","isInteger","toFloat","advancedSearchFiltersByDefault","PositionOfInterest","StreetAddress","CadastralParcel","zoomToResultsByDefault","importance","getGeocodedLocationFreeform","geocodedLocation","resultToReturn","toponym","category","postcode","housenumber","getSuggestedLocationFreeform","to_meter","testkey","lkey","defData","paramName","paramVal","paramOutname","paramObj","datum","rf","lat_0","lat0","lat_1","lat1","lat_2","lat2","lat_ts","lon_0","long0","lon_1","long1","lon_2","long2","rectified_grid_angle","lonc","longc","x_0","x0","y_0","y0","k_0","k0","r_a","R_A","zone","south","utmSouth","towgs84","datum_params","from_greenwich","nadgrids","datumCode","axis","legalAxis","txt","place","currentObject","thing","newObj","convert","readCharicter","neutral","keyword","quoted","afterquote","afterItem","newObjects","wkt","AUTHORITY","authority","projName","PROJECTION","AXIS","axisOrder","UNIT","DATUM","SPHEROID","geogcs","GEOGCS","toMeter","sphere","ellps","TOWGS84","outName","inName","lisp","def","EPSG","ESRI","IAU2000","defs","WGS84","GOOGLE","auth","maybeProjStr","ext","eccent","sinphi","cosphi","con","com","ts","dphi","eccnth","init","es","inverse","names","ellipseName","wgs84","ellipse","datumName","ch1903","ggrs87","nad83","nad27","potsdam","carthage","hermannskogel","mgi","osni52","ire65","rassadiran","nzgd49","osgb36","s_jtsk","beduaram","gunung_segara","rnb72","ep2","datum_type","grids","optional","mandatory","grid","isNull","view","Uint8Array","nodes","longitudeShift","latitudeShift","isLittleEndian","lowerLatitude","getFloat64","upperLatitude","lowerLongitude","upperLongitude","latitudeInterval","longitudeInterval","gridNodeCount","getInt32","gridHeader","nodesOffset","gridShiftRecords","record","getFloat32","latitudeAccuracy","longitudeAccuracy","srsCode","ourProj","datumDef","a2","b2","sphere_","ecc","datumObj","Rn","Sin_Lat","Sin2_Lat","Cos_Lat","Longitude","Latitude","Height","RR","CT","ST","RX","RK","RN","CPHI0","SPHI0","CPHI","SPHI","SDPHI","iter","genau","X","Y","Z","source_a","source_es","dest_a","dest_b","dest_es","Dx_BF","Dy_BF","Dz_BF","Rx_BF","Ry_BF","Rz_BF","M_BF","x_tmp","y_tmp","z_tmp","attemptedGrids","outer","subgrids","subgrid","del","lim","pin","ct","tb","dif","inx","indx","frct","f00","cvs","f10","f11","f01","m11","m10","m00","m01","denorm","xin","yin","zin","enforceAxis","hasZ","transformedArray","oProj","fromProj","toProj","single","mgrs","toPoint","utm","seasting","easting","snorthing","northing","zoneNumber","zoneLetter","setParm","setColumn","setRow","column","row","parm","colOrigin","rowOrigin","colInt","rowInt","rollover","eccPrimeSquared","T","C","M","LongOriginRad","ZoneNumber","Lat","Long","eccSquared","LatRad","LongRad","UTMEasting","UTMNorthing","rad","N1","T1","C1","R1","D","LongOrigin","phi1Rad","e1","LetterDesignator","mgrsString","testChar","hunK","sb","east100k","curCol","eastingValue","rewindMarker","north100k","curRow","northingValue","remainder","accuracyBonus","sepEastingString","sepNorthingString","sepEasting","sepNorthing","fromMGRS","mgrsStr","toMGRS","en","sphi","cphi","ml0","delta_lon","sin_phi","cos_phi","al","als","cs","tq","ml","tan_phi","ds","temp","pp","B","cos_2B","h1","h2","arg_r","arg_i","hr2","hi2","sin_arg_r","cos_arg_r","sinh_arg_i","cosh_arg_i","hi1","hr1","hi","cgb","cbg","utg","gtu","np","Qn","Zb","Ce","Cn","sin_Cn","cos_Cn","sin_Ce","cos_Ce","dependsOn","esinp","rc","phic0","ratexp","K","sinc0","cosc0","R2","sinc","cosc","cosl","coslat0","sinlat0","cons","ms1","X0","ssfn_","cosX0","sinX0","sinX","cosX","rh","sinlat","coslat","dlon","ce","phit","eccen","phy0","lambda0","sinPhy0","semiMajorAxis","flattening","e2","R","b0","k1","k2","k3","Sa1","Sa2","I","rotI","rotB","phy","prevPhy","iteration","cosph0","F","H","L","sinph0","J","gamma0","projectionName","lamc","lam1","lam2","phi1","phi2","alpha_c","no_off","no_rot","alp","gam","one_es","lam0","singam","cosgam","sinrot","cosrot","rB","ArB","BrA","u_0","v_pole_n","v_pole_s","U","V","W","Qp","Sp","Tp","Vp","Up","sin1","cos1","ts1","sin2","cos2","ms2","ts2","ts0","f0","rh1","s45","s90","fi0","alfa","uq","u0","n0","s0","ro0","ad","gfi","deltav","eps","ro","czech","fi1","e0","e3","lam","nl","tl","asq","cl","nl1","rl1","tl1","dl","dsq","S_POLE","N_POLE","EQUIT","OBLIQ","qp","mmf","apa","APA","rq","xmf","ymf","sinb1","cosb1","coslam","sinlam","q","sinb","cosb","cCe","sCe","ab","cosz","sinz","sin_po","cos_po","qs1","qs2","qs0","ns0","qs","phi1z","eccnts","sin_p14","cos_p14","infinity_dist","coslon","dlat","bl","tanphi","mln","mlnp","ma","B_re","B_im","C_re","C_im","delta_lat","d_phi","d_lambda","d_phi_n","d_psi","th_n_im1","th_re","th_im","th_n_re","th_n_im","z_re","z_im","z_n_im1","delta_x","z_n_re","z_n_im","num_re","num_im","den_re","den_im","den2","d_psi_n","C_y","C_x","delta_theta","ml1","ml2","sinth","costh","gsq","msq","xx","yy","xys","c1","c2","c3","a1","th1","sin_p12","cos_p12","Mlp","Ml","Nl1","Nl","Az","G","GH","Hs","kp","cos_c","s2","s3","s4","cosAz","Ee","sinpsi","slon","face","one_minus_f","one_minus_f_squared","xy","sinlon","cosmu","tannu","tantheta","invert_sign","xa","lp","coefs","f_df","max_err","iters","upd","azi","tilt","pn1","rp","pfact","cg","sg","cw","sw","yt","ba","bm","bq","flip_axis","sweep","radius_g_1","radius_g","rone_es","radius_p","radius_p2","radius_p_inv2","shape","v_x","v_y","v_z","det","v_zp","paramLat","paramLatSq","paramLatPow6","am1","cphi1","proj4","defaultDatum","Proj","Point","nadgrid","DataView","nFields","header","nSubgridFields","nSubgrids","shiftType","fromSemiMajorAxis","fromSemiMinorAxis","toSemiMajorAxis","toSemiMinorAxis","gridOffset","subHeader","lngColumnCount","latColumnCount","Projection","projCodes","code1","proj1","code2","proj2","getTransform","addCoordinateTransforms","Register","isLoaded","_register","_code","load","Proj4","registers","codes","loadByDefault","CRS","IGNF","LAMB93","LAMBE","LAMB1","LAMB2","LAMB3","LAMB4","RGF93G","WGS84G","loadByName","AMST63","CROZ63","CSG67","ED50","ETRS89","GUAD48","GUADFM49","IGN63","IGN72","KERG62CAR","MART38","MAYO50","MOOREA87","NTF","NUKU72","REUN47","RGF93","RGFG95","RGM04","RGNC","RGPF","RGR92","RGSPM06","RGTAAF07","RRAF91","STPL69","STPM50","TAHAA","TAHI79","TERA50","WALL78","WGS72","AMST63GEO","CROZ63GEO","CSG67GEO","ED50G","GUAD48GEO","GUADFM49GEO","IGN63GEO","IGN72GEO","KERG62GEO","MART38GEO","MAYO50GEO","MOOREA87GEO","NTFG","NTFP","NUKU72GEO","REUN47GEO","RGFG95GEO","RGM04GEO","RGNCGEO","RGPFGEO","RGR92GEO","RGSPM06GEO","RGTAAF07G","STPL69GEO","STPM50GEO","TAHAAGEO","TAHI79GEO","TERA50G","WALL78GEO","WGS72G","WGS84RRAFGEO","XGEO","AMST63UTM43S","CROZ63UTM39S","CSG67UTM21","CSG67UTM22","GEOPORTALANF","GEOPORTALASP","GEOPORTALCRZ","GEOPORTALFXX","GEOPORTALGUF","GEOPORTALKER","GEOPORTALMYT","GEOPORTALNCL","GEOPORTALPYF","GEOPORTALREU","GEOPORTALSPM","GEOPORTALWLF","GUAD48UTM20","GUADFM49U20","IGN63UTM7S","IGN72UTM58S","KERG62UTM42S","LAMB1C","LAMB2C","LAMB3C","LAMB4C","RGF93CC42","RGF93CC43","RGF93CC44","RGF93CC45","RGF93CC46","RGF93CC47","RGF93CC48","RGF93CC49","RGF93CC50","MART38UTM20","MAYO50UTM38S","MILLER","MOOREA87U6S","NUKU72U7S","RGM04UTM38S","RGNCUTM57S","RGNCUTM58S","RGNCUTM59S","RGPFUTM5S","RGPFUTM6S","RGPFUTM7S","RGR92UTM40S","RGSPM06U21","STPL69UTM43S","STPM50UTM21","TAHAAUTM05S","TAHI51UTM06S","TAHI79UTM6S","TERA50STEREO","UTM01SW84","UTM20W84GUAD","UTM20W84MART","UTM22RGFG95","UTM39SW84","UTM42SW84","UTM43SW84","WALL78UTM1S","ETRS89GEO","ETRS89LAEA","ETRS89LCC","UTM26ETRS89","UTM27ETRS89","UTM28ETRS89","UTM29ETRS89","UTM30ETRS89","UTM31ETRS89","UTM32ETRS89","UTM33ETRS89","UTM34ETRS89","UTM35ETRS89","UTM36ETRS89","UTM37ETRS89","UTM38ETRS89","projectionsExtent","overload","_extent","_addUID","_uid","_createMainContainerElement","_createSearchDivElement","searchDiv","_createShowSearchEnginePictoElement","collapsible","button","curr","ariaPressed","classList","showAdvancedSearch","display","showGeolocate","showCoordinate","onShowSearchEngineClick","_createSearchInputElement","placeholder","form","preventDefault","onGeocodingSearchSubmit","autocomplete","charCode","which","keyCode","onAutoCompleteSearchText","ID","scrollIntoView","focus","_createSearchResetElement","buttonReset","onSearchResetClick","_createButtonsElement","_createFirstLineWrapper","_createRadioContainer","_createRadioElements","choiceLocations","inputLocations","labelLocations","htmlFor","attachEvent","choiceData","inputData","labelData","_createShowAdvancedSearchElement","span","innerText","_createShowGeolocateElement","onShowSearchGeolocateClick","_createShowSearchByCoordinateElement","_createAdvancedSearchPanelElement","_createAdvancedSearchPanelDivElement","_createGeocodeResultsElement","_createGeocodeResultsHeaderElement","_createGeocodeResultsDivElement","_createAutoCompleteElement","_createCoordinateSearchPanelElement","_createCoordinateSearchPanelDivElement","_createAutoCompleteListElement","_createAutoCompletedLocationContainer","_createAutoCompletedLocationTitleElement","_createAutoCompletedLocationElement","GeocodeUtils","onAutoCompletedResultsItemClick","_createSearchedSuggestContainer","_createSearchedSuggestTitleElement","_createSearchedSuggestElement","dataset","onSearchedResultsItemClick","_createAdvancedSearchPanelHeaderElement","divTitle","divClose","_createAdvancedSearchPanelFormElement","advancedSearchCodes","matchesFilters","querySelectorAll","onGeocodingAdvancedSearchSubmit","select","_createAdvancedSearchFormCodeElement","onGeocodingAdvancedSearchCodeChange","option","_createAdvancedSearchFormInputElement","_createAdvancedSearchFormFiltersElement","_createAdvancedSearchFiltersTableElement","_createAdvancedSearchFiltersAttributElement","filterAttributes","listId","_createGeocodeResultsListElement","ctrlKey","onGeocodedResultsItemClick","_createGeocodedLocationElement","_createCoordinateSearchPanelHeaderElement","onCoordinateSearchClose","_createCoordinateSearchPanelFormElement","onShowSearchByCoordinateClick","__createCoordinateSearchDivElement","_createCoordinateSearchSystemsLabelElement","_setCoordinateSearchSystemsSelectElement","systems","selectSystem","onCoordinateSearchSystemChange","_createCoordinateSearchUnitsLabelElement","_setCoordinateSearchUnitsSelectElement","selectUnits","onCoordinateSearchUnitsChange","_setCoordinateSearchLngLabelElement","labelLng","_setCoordinateSearchLngInputElement","_setCoordinateSearchLngDMSElement","_setCoordinateSearchLatLabelElement","labelLat","_setCoordinateSearchLatInputElement","_setCoordinateSearchLatDMSElement","_createCoordinateSearchSubmitElement","SearchEngine","initialize","_initContainer","_clearResults","_showSearchEngineButton","setPosition","gutter","getContainer","_geocodedLocations","_checkInputOptions","zoomTo","resources","displayButtonClose","displayButtonAdvancedSearch","displayButtonGeolocate","displayButtonCoordinateSearch","advancedSearch","coordinateSearch","searchOptions","addToMap","serviceOptions","geocodeOptions","autocompleteOptions","triggerGeocode","triggerDelay","prettifyResults","displayMarker","markerStyle","markerUrl","splitResults","Search","filterServices","filterLayersPriority","filterWMTSPriority","filterVectortiles","updateVectortiles","_fillSearchedSuggestListContainer","SelectorID","_inputSearchContainer","_autocompleteContainer","_containerResultsLocation","_containerResultsSuggest","_radioButtonLocation","_radioButtonSuggest","_suggestedLocations","_geocodedContainer","_filterContainer","_currentGeocodingCode","_currentGeocodingLocation","_advancedSearchFilters","_initAdvancedSearchFilters","_advancedSearchCodes","_initAdvancedSearchCodes","_coordinateSearchSystems","_initCoordinateSearchSystems","_currentCoordinateSearchSystems","_currentCoordinateSearchType","_coordinateSearchUnits","_initCoordinateSearchUnits","_currentCoordinateSearchUnits","_coordinateSearchLngInput","_coordinateSearchLatInput","_marker","_markerStyle","_markerUrl","Markers","_displayMarker","_popupContent","_popupDiv","_initPopupDiv","_popupOverlay","_triggerHandler","geocodeResources","geocodeResourcesList","autocompleteResources","autocompleteResourcesList","SearchEngineUtils","advancedSearchFiltersCustom","projectionSystemsByDefault","sys","_setSystem","projectionUnitsByDefault","Geographical","Metric","closer","onclick","picto","onAutoCompleteInputClick","buttonsContainer","firstLineWrapper","radioContainer","radioElements","_this$_createRadioEle2","_slicedToArray","advancedShow","advancedPanel","advancedPanelDiv","advancedHeader","advancedForm","advancedFormFilters","_setFilter","advancedFormInput","geolocateShow","searchByCoordinateShow","coordinatePanel","coordinatePanelDiv","coordinateHeader","coordinateForm","_containerSystems","labelSystems","_containerUnits","labelUnits","_containerCoordinateLng","coordinateLng","coordinateInputLng","_containerCoordinateLat","coordinateLat","coordinateInputLat","submit","autocompleteList","containerResultsLocation","containerResultsSuggest","geocodeDiv","geocodeList","codeFound","lstAttributs","divTable","divFilter","childElementCount","_displaySuggestedLocation","suggests","bOnFailure","_clearGeocodedLocation","getView","setCenter","setZoom","removeOverlay","markerDiv","_onResultMarkerSelect","positioning","stopEvent","addOverlay","getZoom","information","popupContent","getPosition","system","olProjGet","Interactions","opened","updatePosition","_this3","geolocation","getCurrentPosition","viewProj","coordinates_4326","longitude","latitude","olProjTransform","_setMarker","_setPosition","markerInfo","_getCoordinateSearchDMS","selectedIndex","inputSearchTextContainer","_clearSuggestedLocation","_triggerGeocode","_triggerDelay","_maximumEntries","maximumEntries","_prettifyResults","_requestAutoComplete","_locationsToBeDisplayed","ilocation","_getGeocodeCoordinatesFromFullText","_prettifyAutocompleteResults","_fillAutoCompletedLocationListContainer","_requestGeocoding","_hideSuggestedLocation","_setLabel","mapProj","_getZoom","addLayer","_fillGeocodedLocationListContainer","_location","_filterOptions","dep","department","insee","absorbedCity","_updateCoordinateSearchElements","lbl","autocompleteResults","autocompleteResult","SearchEngineDOM","Widget"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/modules/GpfExtOlTerritories.css b/dist/modules/GpfExtOlTerritories.css index dfa4af65..629c49c6 100644 --- a/dist/modules/GpfExtOlTerritories.css +++ b/dist/modules/GpfExtOlTerritories.css @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */div[id^=GPterritories-]{right:0;top:0}button[id^=GPshowTerritoriesPicto][aria-pressed=false]+dialog{display:none;opacity:0;visibility:hidden}button[id^=GPshowTerritoriesPicto-][aria-pressed=true]+dialog{display:flex;flex-direction:column;height:auto;max-height:inherit;max-width:470px;opacity:100%;visibility:visible}dialog[id^=GPterritoriesPanel-]{position:absolute} /*# sourceMappingURL=GpfExtOlTerritories.css.map*/ \ No newline at end of file diff --git a/dist/modules/GpfExtOlTerritories.js b/dist/modules/GpfExtOlTerritories.js index 92fe87fa..f7b277d0 100644 --- a/dist/modules/GpfExtOlTerritories.js +++ b/dist/modules/GpfExtOlTerritories.js @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */(()=>{var e={3065:function(e,t,r){var n,i;!function(){"use strict";n=function(){var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"],i={},o=null;function a(e,t){var r=e[t];if("function"==typeof r.bind)return r.bind(e);try{return Function.prototype.bind.call(r,e)}catch(t){return function(){return Function.prototype.apply.apply(r,[e,arguments])}}}function s(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function l(n){return"debug"===n&&(n="log"),typeof console!==t&&("trace"===n&&r?s:void 0!==console[n]?a(console,n):void 0!==console.log?a(console,"log"):e)}function c(){for(var r=this.getLevel(),i=0;i=0&&t<=u.levels.SILENT)return t;throw new TypeError("log.setLevel() called with invalid level: "+e)}"string"==typeof e?p+=":"+e:"symbol"==typeof e&&(p=void 0),u.name=e,u.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},u.methodFactory=r||f,u.getLevel=function(){return null!=l?l:null!=s?s:a},u.setLevel=function(e,t){return l=m(e),!1!==t&&d(l),c.call(u)},u.setDefaultLevel=function(e){s=m(e),h()||u.setLevel(e,!1)},u.resetLevel=function(){l=null,g(),c.call(u)},u.enableAll=function(e){u.setLevel(u.levels.TRACE,e)},u.disableAll=function(e){u.setLevel(u.levels.SILENT,e)},u.rebuild=function(){if(o!==u&&(a=m(o.getLevel())),c.call(u),o===u)for(var e in i)i[e].rebuild()},a=m(o?o.getLevel():"WARN");var v=h();null!=v&&(l=m(v)),c.call(u)}(o=new p).getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=i[e];return t||(t=i[e]=new p(e,o.methodFactory)),t};var d=typeof window!==t?window.log:void 0;return o.noConflict=function(){return typeof window!==t&&window.log===o&&(window.log=d),o},o.getLoggers=function(){return i},o.default=o,o},void 0===(i="function"==typeof n?n.call(t,r,t,e):n)||(e.exports=i)}()}},t={};function r(n){var i=t[n];if(void 0!==i)return i.exports;var o=t[n]={exports:{}};return e[n].call(o.exports,o,o.exports,r),o.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var n={};(()=>{"use strict";r.d(n,{default:()=>Q});const e=ol.control.Control;const t=function(){return""!==getComputedStyle(document.documentElement).getPropertyValue("--blue-france-sun-113-625")};function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function o(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function a(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=Array(t);r0&&r[0].getElementsByTagName("button")[0].click()};const O={onPanelOpen:function(){x(this.options.position,this.element.id.match(/(\w+)-[0-9]+/)[1])}},_=ol.proj;function S(e){return S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},S(e)}const L={detectSupport:function(){var e=!0,t=window.navigator.userAgent.toLowerCase();return-1===t.indexOf("iphone")&&-1===t.indexOf("ipod")&&-1===t.indexOf("ipad")&&-1===t.indexOf("android")&&-1===t.indexOf("mobile")&&-1===t.indexOf("blackberry")&&-1===t.indexOf("tablet")&&-1===t.indexOf("phone")&&-1===t.indexOf("touch")||(e=!1),-1===t.indexOf("msie")&&-1===t.indexOf("trident")||(e=!0),e},assign:function(e,t){for(var r in e=e||{},t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e},mergeParams:function(e,t,r){if(void 0!==e&&void 0!==t)for(var n in void 0===r&&(r=!0),t)t.hasOwnProperty(n)&&("object"===S(t[n])?e.hasOwnProperty(n)?this.mergeParams(e[n],t[n],r):e[n]=t[n]:e.hasOwnProperty(n)?r&&(e[n]=t[n]):e[n]=t[n])}};var M;const A={generate:(M=Math.floor(Date.now()),function(){return M++}),name:function(e){var t=null,r=e.lastIndexOf("-");return t=-1===r?e:e.substring(0,r),t},index:function(e){var t=null,r=this.name(e),n=r.lastIndexOf("_");return-1!==n&&(t=r.substring(n+1)),t},uuid:function(e){var t=null,r=e.lastIndexOf("-");return-1!==r&&(t=parseInt(e.substring(r+1),10)),t}};var I=r(3065),j={getLogger:function(e){if(void 0===t)var t={env:{VERBOSE:!1}};t.env.VERBOSE?I.enableAll():I.disableAll();var r=e||"default";return I.getLogger(r)},disableAll:function(){var e=I.getLoggers();for(var t in e){if(Object.hasOwnProperty.call(e,t))e[t].disableAll()}},enableAll:function(){var e=I.getLoggers();for(var t in e){if(Object.hasOwnProperty.call(e,t))e[t].enableAll()}}};const k=j;window.Gp&&(window.Gp.Logger=j);k.getLogger("draggable");const D={dragElement:function(e,t,r){var n,i=0,o=0,a=0,s=0,l=0,c=0;t?t.addEventListener("mousedown",f,!0):e.addEventListener("mousedown",f,!0);var u={bottom:0,left:0,right:0,top:0};function f(t){(t=t||window.event).preventDefault(),i=t.clientX,o=t.clientY,n=e.getBoundingClientRect();var a=r.getBoundingClientRect();u={bottom:a.bottom,left:a.left,right:a.right,top:a.top},document.addEventListener("mouseup",p,!0),document.addEventListener("mousemove",d,!0)}function p(){l-=a,c-=s,document.removeEventListener("mouseup",p,!0),document.removeEventListener("mousemove",d,!0)}function d(t){var r=(t=t||window.event).clientX,f=t.clientY,p=a,d=s;a=i-r,s=o-f;var h=n.left-a,g=n.top-s;if(hu.right||g+n.height>u.bottom)a=p,s=d;else{var m=l-a,v=c-s;e.style.transform="translate("+m+"px,"+v+"px)"}}}},R=JSON.parse('[{"id":"FXX","title":"France métropolitaine","description":"","zoom":null,"bbox":[-9.86,41.15,10.38,51.56],"thumbnail":"https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/resources/territories/thumbnails/fxx.png","icon":"https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/resources/territories/fxx.svg"},{"id":"GLP","title":"Guadeloupe","description":"","zoom":null,"bbox":[-61.97,15.72,-60.93,16.66],"thumbnail":"https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/resources/territories/thumbnails/glp.png","icon":"https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/resources/territories/glp.svg"},{"id":"GUF","title":"Guyane","description":"","zoom":null,"bbox":[-55.65,1.49,-51.2,6.21],"thumbnail":"https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/resources/territories/thumbnails/guf.png","icon":"https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/resources/territories/guf.svg"},{"id":"MTQ","title":"Martinique","description":"","zoom":null,"bbox":[-61.4,14.25,-60.67,15.04],"thumbnail":"https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/resources/territories/thumbnails/mtq.png","icon":"https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/resources/territories/mtq.svg"},{"id":"REU","title":"Réunion","description":"","zoom":10,"bbox":[55.07,-21.46,55.86,-20.79],"thumbnail":"https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/resources/territories/thumbnails/reu.png","icon":"https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/resources/territories/reu.svg"},{"id":"SPM","title":"Saint-Pierre-et-Miquelon","description":"","zoom":null,"bbox":[-56.48,46.69,-56.07,47.19],"thumbnail":"https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/resources/territories/thumbnails/spm.png","icon":"https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/resources/territories/spm.svg"},{"id":"IDF","title":"Paris petite couronne","description":"","zoom":12,"bbox":[2.18,48.77,2.52,48.95],"thumbnail":"https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/resources/territories/thumbnails/idf.png","icon":"https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/resources/territories/idf.svg"},{"id":"MYT","title":"Mayotte","description":"","zoom":null,"bbox":[44.95,-13.049,45.32,-12.57],"thumbnail":"https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/resources/territories/thumbnails/myt.png","icon":"https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/resources/territories/myt.svg"},{"id":"NCL","title":"Nouvelle Calédonie","description":"","zoom":null,"bbox":[163.02,-23.08,167.86,-19.5],"thumbnail":"https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/resources/territories/thumbnails/ncl.png","icon":"https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/resources/territories/ncl.svg"}]');const N={_addUID:function(e){return this.uid?e+"-"+this.uid:e},_createMainContainerElement:function(){var e=document.createElement("div");return e.id=this._addUID("GPterritories"),e.className="GPwidget gpf-widget gpf-widget-button gpf-mobile-fullscreen",e},_createShowTerritoriesPictoElement:function(){var e=this,t=document.createElement("button"),r=document.createElement("span");return t.appendChild(r),t.id=this._addUID("GPshowTerritoriesPicto"),t.className="GPshowOpen GPshowAdvancedToolPicto GPshowTerritoriesPicto gpf-btn gpf-btn--tertiary gpf-btn-icon gpf-btn-icon-territories fr-btn fr-btn--tertiary",t.setAttribute("aria-label","Sélecteur de territoire"),t.setAttribute("tabindex","0"),t.setAttribute("aria-pressed",!1),t.setAttribute("type","button"),t.addEventListener?t.addEventListener("click",(function(t){var r="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!r),e.onShowTerritoriesClick(t)})):t.attachEvent&&t.attachEvent("onclick",(function(t){var r="true"===t.target.ariaPressed;t.target.setAttribute("aria-pressed",!r),e.onShowTerritoriesClick(t)})),t},_createTerritoriesPanelElement:function(){var e=document.createElement("dialog");return e.id=this._addUID("GPterritoriesPanel"),e.className="GPpanel gpf-panel fr-modal",e},_createTerritoriesPanelDivElement:function(){var e=document.createElement("div");return e.className="gpf-panel__territories",e},_createTerritoriesPanelHeaderElement:function(){var e=document.createElement("div");return e.className="gpf-panel__header_territories",e},_createTerritoriesPanelIconElement:function(){var e=document.createElement("label");return e.className="gpf-btn-header-territories gpf-btn-icon-header-territories",e.title="Selecteur de territoires",e},_createTerritoriesPanelTitleElement:function(e){var t=document.createElement("div");return t.className="gpf-panel__title_territories",t.innerHTML=e,t},_createTerritoriesPanelCloseElement:function(){var e=this,t=document.createElement("button");t.id="GPterritoriesPanelClose",t.className="gpf-btn gpf-btn-icon-close fr-btn--close fr-btn fr-btn--tertiary-no-outline fr-m-1w",t.title="Fermer le panneau";var r=document.createElement("span");return r.className="GPelementHidden gpf-visible",r.innerText="Fermer",t.appendChild(r),t.addEventListener?t.addEventListener("click",(function(){document.getElementById(e._addUID("GPshowTerritoriesPicto")).click(),e.onCloseTerritoriesClick()}),!1):t.attachEvent&&t.attachEvent("onclick",(function(){document.getElementById(e._addUID("GPshowTerritoriesPicto")).click(),e.onCloseTerritoriesClick()})),t},_createTerritoriesElement:function(){var e=document.createElement("div");return e.className="territories-entries gpf-panel__body_territories fr-modal__body",e},_createTerritoryEntry:function(e){var t=this;if(e){var r="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiB3aWR0aD0iNTgxLjAwMDAwMHB0IiBoZWlnaHQ9IjM1Ni4wMDAwMDBwdCIgdmlld0JveD0iMCAwIDU4MS4wMDAwMDAgMzU2LjAwMDAwMCIKIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgoKPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsMzU2LjAwMDAwMCkgc2NhbGUoMC4xMDAwMDAsLTAuMTAwMDAwKSIKZmlsbD0iI2I0YjNiMyIgc3Ryb2tlPSJub25lIj4KPHBhdGggZD0iTTAgMTc4MCBsMCAtMTc4MCAyOTA1IDAgMjkwNSAwIDAgMTc4MCAwIDE3ODAgLTI5MDUgMCAtMjkwNSAwIDAKLTE3ODB6Ii8+CjwvZz4KPC9zdmc+Cg==",n=e.thumbnail||r,i=e.icon||r,o=e.id.toLowerCase(),a=function(e){if(function(){if(!window.DOMParser)return!1;var e=new DOMParser;try{e.parseFromString("x","text/html")}catch(e){return!1}return!0}())return(new DOMParser).parseFromString(e,"text/html").body;var t=document.createElement("div");return t.innerHTML=e,t}('\n
    \n
    \n
    \n

    \n \n

    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n \n \n
    \n
    \n
    \n ')),s=a.firstChild;return s&&s.addEventListener("click",(function(r){t.onImageTerritoriesClick(r,e.id)})),a.firstChild}}};function G(e){return G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},G(e)}function U(e,t){for(var r=0;r*{border:1px solid #999;border-radius:0;display:block;height:28px;line-height:26px}.GPflexInput :not(:last-child){border-right:none}.GPflexInput :first-child{border-radius:3px 0 0 3px}.GPflexInput :last-child{border-radius:0 3px 3px 0}.GPflexInput>:not(input){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.GPflexInput>input{min-width:0;padding:0 5px}.GPflexInput>input,.GPflexInput>select{-webkit-flex:1;-webkit-box-flex:1;-ms-flex:1;flex:1}.GPflexInput>select{padding-right:7px}.GPflexInput>label{background-color:#f2f2f2;color:#666;cursor:pointer;padding-left:7px;padding-right:9px}input.GPsubmit{background:none;background-color:#366291;border:none;border-radius:3px;color:#fff;cursor:pointer;display:block;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-weight:700;height:28px;line-height:26px;margin:auto;opacity:.8;padding:0;transition:opacity .2s ease-out;width:80px}input.GPsubmit:hover{opacity:1}.GPselect{border:1px solid #999;color:#333;cursor:pointer;display:block;height:28px;line-height:26px;margin:auto}.GPform{padding:15px}.GPelementHidden,.GPelementInvisible{display:none;opacity:0;visibility:hidden}.GPelementShow,.GPelementVisible{display:block;opacity:100%;visibility:visible}.GPadvancedAutoCompleteList,.GPautoCompleteList{z-index:2}.GPadvancedAutoCompleteList{border-top:none;font-size:.9em;width:calc(100% - 28px)}.GPautoCompleteProposal{color:#5e5e5e;cursor:pointer;font-size:1em;height:28px;line-height:16px;overflow:hidden;padding:6px 10px;text-overflow:ellipsis;white-space:nowrap;width:100%}.GPautoCompleteProposal:hover{background-color:#cedbef;color:#000}.GPshowMoreOptionsImage{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAA7ElEQVRIx+3UvUoDQRSG4ffMLhbaLIEFvQSxtN1ALiGymkswpZVoupS6Vt6BYBMWf+s0Kaa1FG9BEBYbDQRnj4UKqTRgtjtPeWaYb4YPBowxpmmyyKbs6PpJVCfVan3wOOzN5te2huVK692dq0jHn+abf53lFrqWMlKRfjKNxu1Bmf6M24MyTabRWEX6KKOlvRAgO77ZQ/UCqBDXdSqzmnAPbKDs+yK/XGrgV+jtNlrfAcn36BVxXX+y89BYh+kbrQ+JrgBiDbsva1SNdhhigi/yzBd5FmKCdfivQIDOYbk+3+HkrPds35kx5lef+y50/JHC/FoAAAAASUVORK5CYII=)}.GPshowMoreOptions{cursor:pointer;display:block;height:28px;position:absolute;transition:all .5s ease-out 0s;width:28px}button[aria-pressed=true].GPshowMoreOptions,input[type=checkbox]:checked+.GPshowMoreOptions{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.gp-feature-info-div{background-color:#fff;border-radius:10px;bottom:17px;box-shadow:0 0 5px #000;color:#002a50;font-family:Open Sans,sans-serif;font-size:.75em;max-width:calc(100vw - 80px);padding:10px;position:relative}.gp-feature-info-div:before{border-left:14px solid transparent;border-right:14px solid transparent;border-top:15px solid #fff;bottom:-15px;content:"";left:50%;margin-left:-14px;position:absolute}.gp-feature-info-div .closer{background-color:#fff;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwYjc5OCIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:14px 14px;border:none;border-bottom-right-radius:10px;border-top-right-radius:10px;cursor:pointer;display:block;height:30px;position:absolute;right:0;top:0;width:30px}.gp-features-content-div{max-height:340px;max-width:420px;min-width:260px;overflow:auto}.gp-features-content-div h5,.gp-features-content-div h6,.gp-features-content-div p,.gp-features-content-div ul{margin:0}.gp-features-content-div ul{list-style-type:none;padding:0}.geoportail-popup-content h5,.geoportail-popup-content h6,.geoportail-popup-content p,.gp-att-description-div,.gp-att-name-div,.gp-att-others-div{padding:0 10px}.geoportail-popup-content h5:not(:last-child),.geoportail-popup-content h6:not(:last-child),.geoportail-popup-content p:not(:last-child),.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){margin-bottom:15px}.geoportail-popup-content h5:last-child,.geoportail-popup-content h6:last-child,.geoportail-popup-content p:last-child,.gp-att-description-div:last-child,.gp-att-name-div,.gp-att-others-div:last-child{margin-bottom:10px}.geoportail-popup-content h5:first-child,.geoportail-popup-content h6:first-child,.geoportail-popup-content p:first-child,.gp-att-description-div:first-child,.gp-att-name-div:first-child,.gp-att-others-div:first-child{margin-top:10px}.gp-att-name-div,.gp-features-content-div h5{color:#0b6ba7;font-size:1.2em;font-weight:700;padding-right:35px;text-transform:uppercase}.gp-features-content-div h6{font-size:1.1em}.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){border-bottom:1px dotted #666;padding-bottom:10px}.gpf-radio-btn-group{display:flex;gap:1em}.gpf-btn-icon{caret-color:transparent}[id^=GPdrawingPanel-]{width:240px}.GPshowDrawingPicto{background-position:1px;background-repeat:no-repeat}.GPdrawingPanelClose,.GPshowDrawingPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGCSURBVFiF7da/Sh1BFMfxuXZa2AuWgkoa0SqP4StoUoi2PklyBZXUNlpZWGmq5AmiYghpAv5pAoKW+rFwFq/D3NXdu5fb7K9ahjPnd757Zs9OCK1atWrVlDCHvzjB5KjrGVg49aKfdaHwGdsYK4np4As26lf8diF7XqsyVIR5iPt3c1AR5muMeWwUCrM4wwEmcZhAHVfM1032b6GTwGwlMd0mYS57Eh9loP5UzFkcpV7tYizpTKGdXBebgEmh9vALczVy94NKuzd0mEL7DXjkoEYCA+cDG4VSqOywyKk0CLMhhO8hhKmSsOsQwvL7y35TnXeuVRMm8Bu3JZ25UuOb6eOXGwC1utTPYBXfsIT/GYMbfBgizE5mrT6U5+vMYnz+mHTqCvNDhinGdnakVzWZxj1metYKqMZgYt7h/1ixGTf+wwwWPB+/iyZhotcnL1ef7GhOOvWI9aomP3rexl08fisYb4zktd9a7FTfaRahulirY3AZoTYxPVC1rVq1ajVKPQEmCKhvk/LblAAAAABJRU5ErkJggg==)}.GPdrawingCoords,.GPdrawingLabel{display:inline-block;line-height:20px}.GPdrawingLabel{font-weight:700;width:80px}.GPdrawingCoords{width:110px}.marker-input-radio{display:none}input.marker-input-radio:checked+label{border:1px solid red}.drawing-tool{background-color:#e9edf0;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MjAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA3MjAgNDAiPjxkZWZzPjxjbGlwUGF0aCBpZD0iYiI+PHBhdGggZD0iTTAgODk2aDg5NlYwSDBaIi8+PC9jbGlwUGF0aD48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGQ9Ik0wIDg5Nmg4OTZWMEgwWiIvPjwvY2xpcFBhdGg+PC9kZWZzPjxwYXRoIGQ9Im04Ny40MyAzMi41MjYgNS0xNSAxNSAxMCA1LTIwIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDBiNzk4O3N0cm9rZS13aWR0aDoyIi8+PHBhdGggZD0iTTg1Ljk0MiAzMC4wNjJ2NGg0di00em00LjgyMy0xNC4xMTZ2NGg0di00em0xNC41MjUgOS4xNzJ2NGg0di00em00Ljc3LTE5LjE4djRoNHYtNHoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNlOWVkZjA7c3Ryb2tlLXdpZHRoOjEuNSIvPjxwYXRoIGQ9Im0xMjcuNDMgMzIuNTI2IDUtMTUgMTUgMTAgNS0yMCIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZmZjtzdHJva2Utd2lkdGg6MiIvPjxwYXRoIGQ9Ik0xMjUuOTQgMzAuMDYydjRoNHYtNHptNC44My0xNC4xMTZ2NGg0di00em0xNC41MiA5LjE3MnY0aDR2LTR6bTQuNzctMTkuMTh2NGg0di00eiIgc3R5bGU9ImZpbGw6I2ZmZjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMmE1MDtzdHJva2Utd2lkdGg6MS41Ii8+PGcgc3R5bGU9ImZpbGw6IzAwYjc5ODtmaWxsLXJ1bGU6ZXZlbm9kZCI+PHBhdGggZD0ibTE2OC4zMSAyOS45MzggMy0xOS44NzUgMTQuNzUtMyA1IDI1Ljg3NXoiIHN0eWxlPSJmaWxsLW9wYWNpdHk6LjQ7c3Ryb2tlOiMwMGI3OTg7c3Ryb2tlLXdpZHRoOjIiLz48cGF0aCBkPSJNMTgzLjk0IDUuMDYzdjRoNHYtNHptLTE0Ljc1IDMuMjV2NGg0di00em0tMi44OCAxOS42MjV2NGg0di00em0yMy4zOCAzdjRoNHYtNHoiIHN0eWxlPSJzdHJva2U6I2U5ZWRmMDtzdHJva2Utd2lkdGg6MS41Ii8+PC9nPjxnIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQiPjxwYXRoIGQ9Im0yMDguMzEgMjkuOTM4IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbC1vcGFjaXR5Oi40O3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDoyIi8+PHBhdGggZD0iTTIyMy45NCA1LjA2M3Y0aDR2LTR6bS0xNC43NSAzLjI1djRoNHYtNHptLTIuODggMTkuNjI1djRoNHYtNHptMjMuMzggM3Y0aDR2LTR6IiBzdHlsZT0ic3Ryb2tlOiMwMDJhNTA7c3Ryb2tlLXdpZHRoOjEuNSIvPjwvZz48cGF0aCBkPSJtMjYxLjgxIDMwLjc0LTEuNTUzLTUuMDk4aC03LjgwN2wtMS41NTMgNS4wOThoLTQuODkzbDcuNTYtMjEuNTA0aDUuNTVsNy41OSAyMS41MDR6bS0yLjYzNy04LjkwNnEtMi4xNTMtNi45My0yLjQzLTcuODM3LS4yNjUtLjkwOC0uMzgyLTEuNDM2LS40ODMgMS44NzYtMi43NjggOS4yNzR6IiBzdHlsZT0iZmlsbDojMDBiNzk4Ii8+PGcgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwYjc5OCI+PHBhdGggZD0iTTI3MS41IDMxLjA0di0yMiIvPjxwYXRoIGQ9Ik0yNjkgOC41Nmg1bS01IDIyLjg4aDUiIHN0eWxlPSJzdHJva2Utd2lkdGg6MS4xMTgwMDAwMyIvPjwvZz48dGV4dCB4PSIyODYiIHk9IjMwLjc1MiIgZm9udC1zaXplPSIxMi41IiBsZXR0ZXItc3BhY2luZz0iMCIgc3R5bGU9ImZvbnQtc2l6ZToxMi41cHg7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowO3dvcmQtc3BhY2luZzowO2ZpbGw6I2ZmZiIgd29yZC1zcGFjaW5nPSIwIj4KICAgIDx0c3BhbiB4PSIyODYiIHk9IjMwLjc1MiIgZm9udC1zaXplPSIzMCIgZm9udC13ZWlnaHQ9ImJvbGQiIHN0eWxlPSJmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjMwcHg7Zm9udC1mYW1pbHk6JnF1b3Q7T3BlbiBTYW5zJnF1b3Q7Ij5BPC90c3Bhbj4KICA8L3RleHQ+PGcgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZmZiI+PHBhdGggZD0iTTMxMS41IDMxLjA0di0yMiIvPjxwYXRoIGQ9Ik0zMDkgOC41Nmg1bS01IDIyLjg4aDUiIHN0eWxlPSJzdHJva2Utd2lkdGg6MS4xMTgwMDAwMyIvPjwvZz48cGF0aCBkPSJtMzU2LjY0IDIxLjc4Mi0zLjQxNi0zLjQxNGExLjIxIDEuMjEgMCAwIDAtMS43MDggMGwtLjg1NC44NTRjLS40Ny40Ny0uNDcgMS4yMzUgMCAxLjcwNmwzLjQxNiAzLjQxNGExLjIxIDEuMjEgMCAwIDAgMS43MDggMGwuODU0LS44NTNhMS4yMDcgMS4yMDcgMCAwIDAgMC0xLjcwOG0tMTAuNzE0IDEwLjkzYy0uMDA1IDAtLjAxMi4wMS0uMDIuMDEzLS4wMDQgMC0uMDEuMDEtLjAxNC4wMS0uMDA1IDAtLjAxLjAxLS4wMTYuMDEtLjAwNSAwLS4wMS4wMS0uMDE3LjAxLS4yLjEyLS43ODMuNDI1LTIuMi45MzdxLS4yNDkuMDktLjUzNC4xOWwtMi4wMTQtMi4wMTNjLjA2Ni0uMTkuMTMtLjM3My4xOS0uNTQuNTEtMS40Mi44MTgtMi4wMDQuOTM2LTIuMjAyLjAwMyAwIC4wMDYtLjAxLjAwOC0uMDEzLjAwNC0uMDEuMDA4LS4wMTMuMDEyLS4wMi4wMDMgMCAuMDA2LS4wMS4wMDgtLjAxMnEuMDA4LS4wMTMuMDEzLS4wMmwuMTQ2LS4xNDcgMy42NSAzLjY0Ny0uMTUuMTV6bTMuODgyLTEwLjkzYTEuMjEgMS4yMSAwIDAgMC0xLjcwOCAwbC0uNDI3LjQyNy01Ljk3NyA1Ljk3M2guMDAybC0uMTkuMTg4cy0uNi42MDUtMS45NTYgNC45NzZxLS4wMTUuMDQ0LS4wMjguMDkyLS4wMzcuMTE3LS4wNzQuMjQtLjAzLjEwNi0uMDY2LjIxNmwtLjA1Ni4xODYtLjEzLjQ0Yy0uMDk4LjMzLS4zMzYgMS4wNzQtLjA2NyAxLjM0My4yNi4yNiAxLjAxNC4wMyAxLjM0My0uMDY2bC40MzctLjEzLjE5NC0uMDZxLjEwNC0uMDMuMjA1LS4wNjJsLjI1LS4wNzdxLjAzOC0uMDEzLjA3My0uMDIzYzQuMTY2LTEuMjk1IDQuOTE0LTEuOTAzIDQuOTc2LTEuOTZoLjAwNGwuMTkzLS4xOTIuMDEyLjAxMyA1Ljk3Ny01Ljk3NC40MjctLjQyN2ExLjIwNiAxLjIwNiAwIDAgMCAwLTEuNzA3bC0zLjQxNi0zLjQxNHoiIHN0eWxlPSJmaWxsOiMwMGI3OTgiLz48cGF0aCBkPSJtMzI5IDgtMiAydjE2bDIgMmgxMGw4LThWMTBsLTItMnoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQiLz48ZyBzdHlsZT0iZmlsbDojZmZmIj48cGF0aCBkPSJtMzk2LjY0IDIxLjc4Mi0zLjQxNi0zLjQxNGExLjIxIDEuMjEgMCAwIDAtMS43MDggMGwtLjg1NC44NTRjLS40Ny40Ny0uNDcgMS4yMzUgMCAxLjcwNmwzLjQxNiAzLjQxNGExLjIxIDEuMjEgMCAwIDAgMS43MDggMGwuODU0LS44NTNhMS4yMDcgMS4yMDcgMCAwIDAgMC0xLjcwOG0tMTAuNzE0IDEwLjkzYy0uMDA1IDAtLjAxMi4wMS0uMDIuMDEzLS4wMDQgMC0uMDEuMDEtLjAxNC4wMS0uMDA1IDAtLjAxLjAxLS4wMTYuMDEtLjAwNSAwLS4wMS4wMS0uMDE3LjAxLS4yLjEyLS43ODMuNDI1LTIuMi45MzdxLS4yNDkuMDktLjUzNC4xOWwtMi4wMTQtMi4wMTNjLjA2Ni0uMTkuMTMtLjM3My4xOS0uNTQuNTEtMS40Mi44MTgtMi4wMDQuOTM2LTIuMjAyLjAwMyAwIC4wMDYtLjAxLjAwOC0uMDEzLjAwNC0uMDEuMDA4LS4wMTMuMDEyLS4wMi4wMDMgMCAuMDA2LS4wMS4wMDgtLjAxMnEuMDA4LS4wMTMuMDEzLS4wMmwuMTQ2LS4xNDcgMy42NSAzLjY0Ny0uMTUuMTV6bTMuODgyLTEwLjkzYTEuMjEgMS4yMSAwIDAgMC0xLjcwOCAwbC0uNDI3LjQyNy01Ljk3NyA1Ljk3M2guMDAybC0uMTkuMTg4cy0uNi42MDUtMS45NTYgNC45NzZxLS4wMTUuMDQ0LS4wMjguMDkyLS4wMzcuMTE3LS4wNzQuMjQtLjAzLjEwNi0uMDY2LjIxNmwtLjA1Ni4xODYtLjEzLjQ0Yy0uMDk4LjMzLS4zMzYgMS4wNzQtLjA2NyAxLjM0My4yNi4yNiAxLjAxNC4wMyAxLjM0My0uMDY2bC40MzctLjEzLjE5NC0uMDZxLjEwNC0uMDMuMjA1LS4wNjJsLjI1LS4wNzdxLjAzOC0uMDEzLjA3My0uMDIzYzQuMTY2LTEuMjk1IDQuOTE0LTEuOTAzIDQuOTc2LTEuOTZoLjAwNGwuMTkzLS4xOTIuMDEyLjAxMyA1Ljk3Ny01Ljk3NC40MjctLjQyN2ExLjIwNiAxLjIwNiAwIDAgMCAwLTEuNzA3bC0zLjQxNi0zLjQxNHoiIHN0eWxlPSJzdHJva2U6I2VmZjtzdHJva2Utd2lkdGg6LjAzIi8+PHBhdGggZD0ibTM2OSA4LTIgMnYxNmwyIDJoMTBsOC04VjEwbC0yLTJ6bTkxLjUzIDE1Ljk3Yy0zLjE2IDEuNjMtMS4xNTcgNS41MzQtNC43NCA2LjgwMy0zLjc2MyAxLjMzNC02Ljg5Mi0zLjQ5Mi03LjY3Ni02Ljk2My0uMy0xLjMzMy0uOTItMTIuMzE0IDExLjEzOC0xNC41OTMgOS40MDctMS43NzggMTIuNjU3IDcuODU0IDEyLjcyIDEwLjg5LjA1OCAyLjg5LjM3IDkuMDQtNC40NCA4Ljk2Mi00LjA2LS4wNjYtMy4yMDMtNC4wNjQtNi44OC01LjAzOC0xLjk1Ni0uNTE4LS4xMjItLjA2Mi0uMTIyLS4wNjJ6IiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQiLz48L2c+PGVsbGlwc2UgY3g9IjQ1NC4xOSIgY3k9IjI0LjgxMiIgcng9IjIuNDM4IiByeT0iMi41IiBzdHlsZT0iZmlsbDojMDAyYTUwIi8+PGcgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMmE1MDtzdHJva2Utd2lkdGg6MS43MzU5OTk5NDtzdHJva2UtbGluZWNhcDpyb3VuZCI+PHBhdGggZD0ibTQ1Mi43OCAxOC41NCA0LjM0LTIuNjA0bS0zLjQ4Ljg3NCAyLjYwNC0xLjczNm0tMS43MzQgMy40NjYgMS43MzYtLjg2OE00NjEuNDcgMTcuMTNsNC4zNC0yLjYwNG0tMy40Ny44NjQgMi42MDQtMS43MzZtLTEuNzM0IDMuNDc2IDEuNzM2LS44NjhNNDY0LjkxIDIzLjIybDQuMzQtMi42MDRtLTMuNDguODY0IDIuNjA0LTEuNzM2bS0xLjczNCAzLjQ3NiAxLjczNi0uODY4Ii8+PC9nPjxwYXRoIGQ9Ik00MjAuNTMgMjMuOTdjLTMuMTYgMS42My0xLjE1NyA1LjUzNC00Ljc0IDYuODAzLTMuNzYzIDEuMzM0LTYuODkyLTMuNDkyLTcuNjc2LTYuOTYzLS4zLTEuMzMzLS45Mi0xMi4zMTQgMTEuMTM4LTE0LjU5MyA5LjQwNy0xLjc3OCAxMi42NTcgNy44NTQgMTIuNzIgMTAuODkuMDU4IDIuODkuMzcgOS4wNC00LjQ0IDguOTYyLTQuMDYtLjA2Ni0zLjIwMy00LjA2NC02Ljg4LTUuMDM4LTEuOTU2LS41MTgtLjEyMi0uMDYyLS4xMjItLjA2MnoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQiLz48ZWxsaXBzZSBjeD0iNDE0LjE5IiBjeT0iMjQuODEyIiByeD0iMi40MzgiIHJ5PSIyLjUiIHN0eWxlPSJmaWxsOiNlOWVkZjAiLz48ZyBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZWRlZmYwO3N0cm9rZS13aWR0aDoxLjczNTk5OTk0O3N0cm9rZS1saW5lY2FwOnJvdW5kIj48cGF0aCBkPSJtNDEyLjc4IDE4LjU0IDQuMzQtMi42MDRtLTMuNDguODc0IDIuNjA0LTEuNzM2bS0xLjczNCAzLjQ2NiAxLjczNi0uODY4TTQyMS40NyAxNy4xM2w0LjM0LTIuNjA0bS0zLjQ3Ljg2NCAyLjYwNC0xLjczNm0tMS43MzQgMy40NzYgMS43MzYtLjg2OE00MjQuOTEgMjMuMjJsNC4zNC0yLjYwNG0tMy40OC44NjQgMi42MDQtMS43MzZtLTEuNzM0IDMuNDc2IDEuNzM2LS44NjgiLz48L2c+PGcgY2xpcC1wYXRoPSJ1cmwoI2EpIiBzdHlsZT0iZmlsbDojMDBiNzk4IiB0cmFuc2Zvcm09Im1hdHJpeCguMDI5NzYgMCAwIC0uMDI5MDIgNi42NjcgMzMpIj48cGF0aCBkPSJNNDQ4IDQ0OGMtNjEuNzcyIDAtMTEyIDUwLjIzLTExMiAxMTJzNTAuMjI4IDExMiAxMTIgMTEyYzYxLjc3IDAgMTEyLTUwLjIzIDExMi0xMTJzLTUwLjIzLTExMi0xMTItMTEybTAgNDQ4Yy0xODUuMjggMC0zMzYtMTUwLjcyLTMzNi0zMzYgMC03MC41ODcgMjEuOTU4LTEzOC4zIDYzLjQyNC0xOTUuODlsOC44MTgtMTIuMzYgMjQxLjM2LTM0MC41NEM0MzAuODk4IDQuMTYgNDM5LjIxMiAwIDQ0OC4wMDIgMGEyOC4wMyAyOC4wMyAwIDAgMSAyMi4zOTQgMTEuMjFsMjM4LjM2IDMzNi40OSAxMS43NiAxNi4zYzQxLjUzIDU3LjY5NyA2My40OSAxMjUuNDEgNjMuNDkgMTk2IDAgMTg1LjI4LTE1MC43MiAzMzYtMzM2IDMzNiIvPjwvZz48ZyBjbGlwLXBhdGg9InVybCgjYikiIHN0eWxlPSJmaWxsOiNmZmYiIHRyYW5zZm9ybT0ibWF0cml4KC4wMjk3NiAwIDAgLS4wMjkwMiA0Ni42NjcgMzMpIj48cGF0aCBkPSJNNDQ4IDQ0OGMtNjEuNzcyIDAtMTEyIDUwLjIzLTExMiAxMTJzNTAuMjI4IDExMiAxMTIgMTEyYzYxLjc3IDAgMTEyLTUwLjIzIDExMi0xMTJzLTUwLjIzLTExMi0xMTItMTEybTAgNDQ4Yy0xODUuMjggMC0zMzYtMTUwLjcyLTMzNi0zMzYgMC03MC41ODcgMjEuOTU4LTEzOC4zIDYzLjQyNC0xOTUuODlsOC44MTgtMTIuMzYgMjQxLjM2LTM0MC41NEM0MzAuODk4IDQuMTYgNDM5LjIxMiAwIDQ0OC4wMDIgMGEyOC4wMyAyOC4wMyAwIDAgMSAyMi4zOTQgMTEuMjFsMjM4LjM2IDMzNi40OSAxMS43NiAxNi4zYzQxLjUzIDU3LjY5NyA2My40OSAxMjUuNDEgNjMuNDkgMTk2IDAgMTg1LjI4LTE1MC43MiAzMzYtMzM2IDMzNiIvPjwvZz48cGF0aCBkPSJtNjExLjkzIDExLjkzIDE2LjE0OCAxNi4xNDhtLS4wMDgtMTYuMTQ4LTE2LjE0OCAxNi4xNDgiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZmY7c3Ryb2tlLXdpZHRoOjMuODEzOTk5ODk7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIi8+PHBhdGggZD0ibTU3MS45MyAxMS45MyAxNi4xNDggMTYuMTQ4bS0uMDA4LTE2LjE0OC0xNi4xNDggMTYuMTQ4IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDBiNzk4O3N0cm9rZS13aWR0aDozLjgxMzk5OTg5O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZCIvPjxwYXRoIGQ9Im00ODcgMzAuMDQgMS4wMDQtNkw0OTMgMjkuMDN6IiBzdHlsZT0iZmlsbDojMDBiNzk4O2ZpbGwtcnVsZTpldmVub2RkIi8+PGcgc3R5bGU9ImZpbGw6IzAwYjc5OCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQ4IC05NzIuMzYpIj48Y2lyY2xlIGN4PSI1NDEiIGN5PSI5ODcuMzYiIHI9IjUiLz48Y2lyY2xlIGN4PSI1NTUiIGN5PSI5ODcuMzYiIHI9IjUiLz48Y2lyY2xlIGN4PSI1NTUiIGN5PSI5OTYuMzYiIHI9IjUiLz48cmVjdCB3aWR0aD0iMTQiIGhlaWdodD0iMTEiIHg9IjU0MSIgeT0iOTgyLjM2IiByeD0iMCIgcnk9IjAiLz48cGF0aCBkPSJNNTUwIDk4Ny4zNmgxMHY5aC0xMHoiLz48cGF0aCBkPSJNNTQ0IDk5My4zNmgxMXY4aC0xMXptLTgtNmg3djZoLTd6Ii8+PHBhdGggZD0ibTUzNiA5OTMuMzYgOCA4di04eiIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkIi8+PC9nPjxwYXRoIGQ9Ik00OTMgMTRoMTV2MWgtMTV6bTAgNGgxNXYxaC0xNXptMyA0aDEydjFoLTEyeiIgc3R5bGU9ImZpbGw6I2VkZWZmMCIvPjxwYXRoIGQ9Im01MjcgMzAgMS4wMDQtNkw1MzMgMjguOTl6IiBzdHlsZT0iZmlsbDojZmZmO2ZpbGwtcnVsZTpldmVub2RkIi8+PGcgc3R5bGU9ImZpbGw6I2ZmZiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTggLTk3Mi4zNikiPjxjaXJjbGUgY3g9IjU0MSIgY3k9Ijk4Ny4zNiIgcj0iNSIvPjxjaXJjbGUgY3g9IjU1NSIgY3k9Ijk4Ny4zNiIgcj0iNSIvPjxjaXJjbGUgY3g9IjU1NSIgY3k9Ijk5Ni4zNiIgcj0iNSIvPjxyZWN0IHdpZHRoPSIxNCIgaGVpZ2h0PSIxMSIgeD0iNTQxIiB5PSI5ODIuMzYiIHJ4PSIwIiByeT0iMCIvPjxwYXRoIGQ9Ik01NTAgOTg3LjM2aDEwdjloLTEweiIvPjxwYXRoIGQ9Ik01NDQgOTkzLjM2aDExdjhoLTExem0tOC02aDd2NmgtN3oiLz48cGF0aCBkPSJtNTM2IDk5My4zNiA4IDh2LTh6IiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQiLz48L2c+PHBhdGggZD0iTTUzMyAxNGgxNXYxaC0xNXptMCA0aDE1djFoLTE1em0zIDRoMTJ2MWgtMTJ6IiBzdHlsZT0iZmlsbDojMDAyYTUwIi8+PHBhdGggZD0ibTY0OC45MjggMjkuNjM1IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbDojMDBiNzk4O2ZpbGwtb3BhY2l0eTouNDtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwYjc5ODtzdHJva2Utd2lkdGg6MiIvPjxnIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQiPjxwYXRoIGQ9Im0yMDguMzEgMjkuOTM4IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbC1vcGFjaXR5Oi40O3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDoyIiB0cmFuc2Zvcm09Im1hdHJpeCguNDg0NzYgMCAwIC40NTk4OSA1NTMuMjgzIDEwLjkzKSIvPjxwYXRoIGQ9Ik0yMjMuOTQgNS4wNjN2NGg0di00em0tMTQuNzUgMy4yNXY0aDR2LTR6bS0yLjg4IDE5LjYyNXY0aDR2LTR6bTIzLjM4IDN2NGg0di00eiIgc3R5bGU9InN0cm9rZTojMDAyYTUwO3N0cm9rZS13aWR0aDoxLjUiIHRyYW5zZm9ybT0ibWF0cml4KC40ODQ3NiAwIDAgLjQ1OTg5IDU1My4yODMgMTAuOTMpIi8+PC9nPjxwYXRoIGQ9Ik02NjEuODU1IDEzLjIxOHYxLjg0NmgxLjk0MXYtMS44NDZ6bS03LjE2IDEuNXYxLjg0N2gxLjk0MnYtMS44NDd6bS0xLjM5OCA5LjA1OXYxLjg0NmgxLjk0MnYtMS44NDZ6bTExLjM0OSAxLjM4NHYxLjg0N2gxLjk0MVYyNS4xNnoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNlOWVkZjA7c3Ryb2tlLXdpZHRoOi43MDk5OTU5MyIvPjxnIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQiPjxwYXRoIGQ9Im0yMDguMzEgMjkuOTM4IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbC1vcGFjaXR5Oi40O3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDoyIiB0cmFuc2Zvcm09Im1hdHJpeCguNDg0NzYgMCAwIC40NTk4OSA1OTEuMjgyIDEwLjk0NCkiLz48cGF0aCBkPSJNMjIzLjk0IDUuMDYzdjRoNHYtNHptLTE0Ljc1IDMuMjV2NGg0di00em0tMi44OCAxOS42MjV2NGg0di00em0yMy4zOCAzdjRoNHYtNHoiIHN0eWxlPSJzdHJva2U6IzAwMmE1MDtzdHJva2Utd2lkdGg6MS41IiB0cmFuc2Zvcm09Im1hdHJpeCguNDg0NzYgMCAwIC40NTk4OSA1OTEuMjgyIDEwLjk0NCkiLz48L2c+PC9zdmc+);background-size:720px 40px;border:unset;border-radius:10px;cursor:pointer;display:block;height:40px;width:40px}.drawing-tool-active{background-color:#002a50}button[id^=drawing-tool-point-]{background-position:0 0}button[id^=drawing-tool-point-].drawing-tool-active{background-position:-40px 0}button[id^=drawing-tool-line-].drawing-tool-active{background-position:-120px 0}button[id^=drawing-tool-line-]{background-position:-80px 0}button[id^=drawing-tool-holes-]{background-position:-640px 0}button[id^=drawing-tool-holes-].drawing-tool-active{background-position:-680px 0}button[id^=drawing-tool-polygon-]{background-position:-160px 0}button[id^=drawing-tool-polygon-].drawing-tool-active{background-position:-200px 0}button[id^=drawing-tool-text-]{background-position:-240px 0}button[id^=drawing-tool-text-].drawing-tool-active{background-position:-280px 0}button[id^=drawing-tool-edit-]{background-position:-320px 0}button[id^=drawing-tool-edit-].drawing-tool-active{background-position:-360px 0}button[id^=drawing-tool-display]{background-position:-400px 0}button[id^=drawing-tool-display-].drawing-tool-active{background-position:-440px 0}button[id^=drawing-tool-tooltip]{background-position:-480px 0}button[id^=drawing-tool-tooltip-].drawing-tool-active{background-position:-520px 0}button[id^=drawing-tool-remove]{background-position:-560px 0}button[id^=drawing-tool-remove-].drawing-tool-active{background-position:-600px 0}div.drawing-tools-flex-display{justify-content:space-between}button[id^=drawing-export-]{background-position:2px 0}.drawing-button{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMCAxMjAiPjxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwYjc5OCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjMiPjxwYXRoIGQ9Ik02ODggMzI2LjR2OGgyMHYtOG0tMTAtMTR2MTQiIHRyYW5zZm9ybT0ibWF0cml4KC42MDg2IDAgMCAuNTU5NSAtNDA5LjggLTEzNikiLz48cGF0aCBkPSJtNjkzIDMyMS40IDUgNSA1LTUiIHRyYW5zZm9ybT0ibWF0cml4KC42MDg2IDAgMCAuNTU5NSAtNDA5LjggLTEzNikiLz48L2c+PGcgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUwNSAtODU3LjQpIj48cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxNCIgeD0iNTEzIiB5PSI5MjUuNCIgcng9IjAiIHJ5PSIwIi8+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iOCIgeD0iNTE0IiB5PSI5MjUuNCIgcng9IjAiIHJ5PSIwIi8+PHBhdGggZD0iTTUxNSA5MzAuNGgxdjNoLTF6bTEgMWg4djJoLTh6Ii8+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTQiIHg9IjUyNiIgeT0iOTI1LjQiIHJ4PSIwIiByeT0iMCIvPjxwYXRoIGQ9Ik01MjUgOTI1LjRoMXY4aC0xem0tMSA1aDF2M2gtMXptLTkgNGgxMHYyaC0xMHptNSAyaDV2M2gtNXptLTMgMWgydjJoLTJ6bS0yLTFoMXYzaC0xem00LTExaDV2NWgtNXptLTMgM2gzdjJoLTN6bTAtM2gxdjNoLTF6bTEgMGgydjFoLTJ6Ii8+PC9nPjxnIGZpbGw9IiMwMGI3OTgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01NDAgLTgyNy40KSI+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTQiIHg9IjU0OCIgeT0iOTI1LjQiIHJ4PSIwIiByeT0iMCIvPjxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjgiIHg9IjU0OSIgeT0iOTI1LjQiIHJ4PSIwIiByeT0iMCIvPjxwYXRoIGQ9Ik01NTAgOTMwLjRoMXYzaC0xem0xIDFoOHYyaC04eiIvPjxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjE0IiB4PSI1NjEiIHk9IjkyNS40IiByeD0iMCIgcnk9IjAiLz48cGF0aCBkPSJNNTYwIDkyNS40aDF2OGgtMXptLTEgNWgxdjNoLTF6bS05IDRoMTB2MmgtMTB6bTUgMmg1djNoLTV6bS0zIDFoMnYyaC0yem0tMi0xaDF2M2gtMXptNC0xMWg1djVoLTV6bS0zIDNoM3YyaC0zem0wLTNoMXYzaC0xem0xIDBoMnYxaC0yeiIvPjwvZz48ZyBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIzIj48cGF0aCBkPSJNNjg4IDMyNi40djhoMjB2LThtLTEwLTE0djE0IiB0cmFuc2Zvcm09Im1hdHJpeCguNjA4NiAwIDAgLjU1OTUgLTQwOS44IC0xNjYpIi8+PHBhdGggZD0ibTY5MyAzMjEuNCA1IDUgNS01IiB0cmFuc2Zvcm09Im1hdHJpeCguNjA4NiAwIDAgLjU1OTUgLTQwOS44IC0xNjYpIi8+PC9nPjwvc3ZnPg==);background-size:30px 120px;font-size:.7em;height:30px;line-height:30px;margin:auto;padding-left:30px;padding-right:15px}.tool-form-submit{background-color:#00b798;border:none;border-radius:20px;color:#fff;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:.9em;text-align:center;text-transform:uppercase}.gp-label-div,.gp-styling-div{background-color:#fff;border:unset;border-radius:10px;box-shadow:0 0 5px #000;box-sizing:border-box;font-size:.75em;position:relative;top:17px}.gp-label-div:before,.gp-styling-div:before{border-bottom:15px solid #fff;border-left:10px solid transparent;border-right:9px solid transparent;content:"";left:50%;margin-left:-10px;position:absolute;top:-15px}.gp-input-label-style,.gp-textarea-att-label-style{border:none}.gp-textarea-att-label-style{height:80px;resize:none;width:240px}.gp-input-measure-style{background-color:#fff;border-radius:10px;font-size:.75em;text-align:center;width:240px}.gp-textarea-att-label-style{display:block}.gp-label-div .closer{background-color:#fff;border-top-right-radius:10px}.gp-input-label-style{width:180px}.gp-label-div{padding:10px}.gp-styling-div{padding:50px 20px 20px;width:340px}.gp-styling-div:after{border-bottom:1px solid #bbb;content:"Modifier le style";display:block;font-size:1.2em;font-variant:small-caps;font-weight:700;height:30px;left:30px;line-height:30px;position:absolute;text-align:center;top:0;width:280px}.gp-label-div .gp-styling-button:not([class*=closer]){display:block;margin:10px auto auto}.gp-styling-button:not([class*=closer]){background-color:#00b798;border:none;border-radius:12px;color:#fff;display:inline-block;font-size:.9em;font-weight:700;height:24px;line-height:24px;margin-top:20px;text-align:center;text-transform:uppercase;width:140px}.gp-styling-button:not([class*=closer]):hover{background-color:#eef2f5;color:#00b798}.gp-styling-button:not([class*=closer])+.gp-styling-button:not([class*=closer]){margin-left:20px}.gp-label-div .closer,.gp-styling-div .closer{background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwYjc5OCIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:14px 14px;border:none;cursor:pointer;display:block;height:30px;position:absolute;right:0;top:0;width:30px}.gp-styling-option{font-size:11px;line-height:30px;padding:0 20px;position:relative}.gp-styling-option input{cursor:pointer;display:block;height:20px;padding:0;position:absolute;top:6px}.gp-styling-option input[type=checkbox]{background:none;border:none;height:10px;padding:0;right:70px}.gp-styling-option input[type=color]{background:none;border:none;padding:0;right:70px;width:30px}.gp-styling-option input[type=text]{background:none;border:1px solid grey;color:#0b6ba7;margin:none;padding:0 5px;right:40px;width:80px}.gp-styling-option input[type=range]{margin:0;right:40px;width:80px}.gp-styling-option input[type=range]:focus{box-shadow:none;outline:none}.gp-styling-option input[type=range]::-webkit-slider-runnable-track{-webkit-appearance:none;background-color:grey;height:1px}.gp-styling-option input[type=range]::-webkit-slider-thumb:before{height:1px;left:-200px;pointer-events:none;position:absolute;right:50%;top:0}.gp-styling-option input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background-color:#0b6ba7;border:none;border-radius:50%;height:13px;position:relative;top:-6px;width:13px}.gp-styling-option input[type=range]::-moz-range-track{background-color:grey;height:1px;width:70px}.gp-styling-option input[type=range]::-moz-range-thumb{background-color:#0b6ba7;border:none;border-radius:50%;box-shadow:0;height:13px;position:relative;width:13px}.gp-styling-option input[type=range]::-ms-track{background-color:grey;border:0;border-color:transparent;border-radius:0;border-width:0;color:transparent;height:1px;width:70px}.gp-styling-option input[type=range]::-ms-fill-lower,.gp-styling-option input[type=range]::-ms-fill-upper{background:transparent;border-radius:0}.gp-styling-option input[type=range]::-ms-thumb{background-color:#0b6ba7;border:none;border-radius:50%;height:13px;width:13px}.gp-styling-option input[type=range]::-ms-tooltip{display:none}.gp-styling-option .marker-input-radio{display:none}.gp-styling-option .marker-label{cursor:pointer;display:inline-block;height:32px;margin-bottom:5px;margin-right:5px;padding:3px}.gp-styling-option .marker-input-radio:checked+.marker-label{background-color:rgba(0,183,152,.5);border:1px solid #002a50;padding:2px}.gp-styling-option .marker-label img{height:24px}.ol-attribution .gp-control-attribution-image{max-height:30px;max-width:inherit;vertical-align:middle}.GPpanelHeader{padding:unset}[id^=GPelevationPathPanelClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAAAaCAYAAABb9hlrAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH4gEQEjITjE0MtwAABGJJREFUaN7tmU1oHGUYx//PZEvSLjHVBLVaerCXSgo5tAqxiqBSxcSLWqknFaNdaYjiwUMOVVGi2EORJg0xtgbx0FKVgmirRU17SUpjPsCVUhQtVOr6ES8mmpqdnwffhekw2dndbMK23T8MzMzzzsz7PP/3+ZjnlaqooooqrlhY7gSol3Rr7tLMTlfNs3gAJqnGncvMJMk3M7+Q5xOB8zsl9Ui6XtI/ktZXzVs6MpmMNTU1rZa0SdJNknLkSNI0MCrpTzPLFkSQmR0FspIGJb1UNXHpHjM3N9dUW1t7u6QHJW2V9KukPyQhqcEt/i8lHctms8Oe5/0WR5SAW4AfgWGgC1ixjEo9AwwAXj7Fgb1AZ6WSMzk56QGbgQPA98AUsBvYAKwCVgJrgV3AKeAccAi4f3x8vCbOSA8AB91xGEguIzlZ/sdgFEmOnF43xq9UkoBrgD7gZ+B13/c3u/uPAG8AbwEdkpTNZjcCLwJngE+AtYV8YEW+VbxESvVxKfa5xBokZ19oTF+lkTMzM+MB9wJngT0hHT8KzP2bkGwHcB54Ktb2wNtAb5EGbgAaFhOzXegKYhDwQp6TwzvLvYgK1CPpwtkZYEtI9iowCowBAyHZeuCEi1pr4j4yBBwscmK7gZ7FJtYFSOq7TMgx4A7gB6AvnU5bSF4H1LtjVVCWSqUMeN550eN59SuWIMf+HDAL3LwEJC0bOSPdCRvpTljwOiT3RroTdQvM3QPanYfcFiHvAj4GjgCvLWDHT4EX8hZnUQQBCRf6tkWMD8bW/WVaiVEkDZZKDmWCI6kmD0FtwNfAugXsetG96qsIeSPwfhRBXoxy10n6XFKXpEPAy7kEDtwl6eHA8CeA5nJ2N2LuxXrEEjiaX2a9YpHvv2ODpFOS7gl84BVHVFLSntAjNZLeXGRLZK+knRHipyUNFONFrT3zlDsExhjZJNVLuqGE16+W1BjX6rmk3JY06v56w9gmaUuufRFCO3C3mZ0oAzmDki4G7nXkytJC+lgj3Qlr7ZnHzIK5JW4V09ozz0h3Yo0zdJOk3yVlHOELkY6kaUnXSnoynU6PNTc3F7RAUqmUSWqX1CLpA0nZ2Bzkqo5ScbKEvBNZSucrwS+zMnsI+DcqB8WV2Uuh6Loix/eGPKdf0g4z880Ml//6A/IO520VhdnZ2b8lHXM2fTQkrg1Eq3AleJ/rzX0mKVNQiFtmTLjk67mw1umIyTVxAXY61+904eS7SiMomUz6wGlJxyU9BswARzzPG5P0oaSfXJ4+m2v1eJ63VdKzzgbHo0J3Ik9MPVfiXM8XVdqYvety3sYwOSGSuhyJ35pZfyX24qampv5qaWl5T9JKSdvN7CHgC0n7JR11dm0Edklqk3Sjy/UHJiYmLsSWfsCQpDoz264qSq5Gi9lu8H0/73ZDmKCTrpq4UI65SnrOzIavRqJyG3ae522KqHinnefEbtiFCWpzJXSmTD91h83sl6vdo7SILe8qqqiiiisY/wFFCbN/sRPwgwAAAABJRU5ErkJggg==);background-position:-27px;background-repeat:no-repeat}[id^=GPelevationPathProfil]{height:150px;width:inherit}[id^=GPelevationPathProfil]>#profileElevationByDefault>svg{left:10px;position:absolute}div[id^=GPelevationPathInformationsContainer]{background-color:hsla(0,0%,100%,.9);border-radius:4px;bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:32px}#profileElevationRaw{padding:unset;resize:none}#profileElevationByDefault{display:-webkit-flex;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%}.altiPathValue{font-weight:700;fill:#5e5e5e}.altiPathCoords{font-style:italic;fill:#5e5e5e}.axis-d3>text{fill:#5e5e5e;font-family:Verdana;font-size:10px;opacity:1;text-anchor:end}.axis-d3{fill:none;stroke:#5e5e5e;stroke-width:1;shape-rendering:crispEdges}.area-d3{fill:#c77a04;stroke:#5e5e5e;stroke-width:0;fill-opacity:.4}.line-d3{fill:none;stroke:#c77a04;stroke-width:1px}.grid-d3 .tick{stroke:#d3d3d3;opacity:.7}.grid-d3 path{stroke-width:0}.overlay-d3{fill:none;pointer-events:all}.focusLine-d3{fill:none;stroke:#c77a04;stroke-width:.5px}.focusCircle-d3{fill:#c77a04}div.tooltip-d3{background:#fff;border:0;border-radius:8px;font:8px sans-serif;height:45px;padding:5px;pointer-events:none;position:inherit;text-align:left;width:80px}[id^=GPelevationPathPanel-]{width:280px}[id^=GPelevationPathPanelInfo]{background-position:-75px}[id^=GPelevationPathPanelInfo],button[id^=GPshowElevationPathPicto-]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAAAaCAYAAABb9hlrAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH4gEQEjITjE0MtwAABGJJREFUaN7tmU1oHGUYx//PZEvSLjHVBLVaerCXSgo5tAqxiqBSxcSLWqknFaNdaYjiwUMOVVGi2EORJg0xtgbx0FKVgmirRU17SUpjPsCVUhQtVOr6ES8mmpqdnwffhekw2dndbMK23T8MzMzzzsz7PP/3+ZjnlaqooooqrlhY7gSol3Rr7tLMTlfNs3gAJqnGncvMJMk3M7+Q5xOB8zsl9Ui6XtI/ktZXzVs6MpmMNTU1rZa0SdJNknLkSNI0MCrpTzPLFkSQmR0FspIGJb1UNXHpHjM3N9dUW1t7u6QHJW2V9KukPyQhqcEt/i8lHctms8Oe5/0WR5SAW4AfgWGgC1ixjEo9AwwAXj7Fgb1AZ6WSMzk56QGbgQPA98AUsBvYAKwCVgJrgV3AKeAccAi4f3x8vCbOSA8AB91xGEguIzlZ/sdgFEmOnF43xq9UkoBrgD7gZ+B13/c3u/uPAG8AbwEdkpTNZjcCLwJngE+AtYV8YEW+VbxESvVxKfa5xBokZ19oTF+lkTMzM+MB9wJngT0hHT8KzP2bkGwHcB54Ktb2wNtAb5EGbgAaFhOzXegKYhDwQp6TwzvLvYgK1CPpwtkZYEtI9iowCowBAyHZeuCEi1pr4j4yBBwscmK7gZ7FJtYFSOq7TMgx4A7gB6AvnU5bSF4H1LtjVVCWSqUMeN550eN59SuWIMf+HDAL3LwEJC0bOSPdCRvpTljwOiT3RroTdQvM3QPanYfcFiHvAj4GjgCvLWDHT4EX8hZnUQQBCRf6tkWMD8bW/WVaiVEkDZZKDmWCI6kmD0FtwNfAugXsetG96qsIeSPwfhRBXoxy10n6XFKXpEPAy7kEDtwl6eHA8CeA5nJ2N2LuxXrEEjiaX2a9YpHvv2ODpFOS7gl84BVHVFLSntAjNZLeXGRLZK+knRHipyUNFONFrT3zlDsExhjZJNVLuqGE16+W1BjX6rmk3JY06v56w9gmaUuufRFCO3C3mZ0oAzmDki4G7nXkytJC+lgj3Qlr7ZnHzIK5JW4V09ozz0h3Yo0zdJOk3yVlHOELkY6kaUnXSnoynU6PNTc3F7RAUqmUSWqX1CLpA0nZ2Bzkqo5ScbKEvBNZSucrwS+zMnsI+DcqB8WV2Uuh6Loix/eGPKdf0g4z880Ml//6A/IO520VhdnZ2b8lHXM2fTQkrg1Eq3AleJ/rzX0mKVNQiFtmTLjk67mw1umIyTVxAXY61+904eS7SiMomUz6wGlJxyU9BswARzzPG5P0oaSfXJ4+m2v1eJ63VdKzzgbHo0J3Ik9MPVfiXM8XVdqYvety3sYwOSGSuhyJ35pZfyX24qampv5qaWl5T9JKSdvN7CHgC0n7JR11dm0Edklqk3Sjy/UHJiYmLsSWfsCQpDoz264qSq5Gi9lu8H0/73ZDmKCTrpq4UI65SnrOzIavRqJyG3ae522KqHinnefEbtiFCWpzJXSmTD91h83sl6vdo7SILe8qqqiiiisY/wFFCbN/sRPwgwAAAABJRU5ErkJggg==);background-repeat:no-repeat}button[id^=GPshowElevationPathPicto-]{background-position:1px}div[id^=GPexportContainer-]{padding:5px}div[id^=GPexportContainer-]>input.GPsubmit{color:#fff}input[id^=GPexportButton-]{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxMy45OTkiIGhlaWdodD0iMTMuOTg4IiB2aWV3Qm94PSItMSAtMSA1LjcwNSA1LjciPjxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjMiPjxwYXRoIGQ9Ik02ODggMzI2LjR2OGgyMHYtOG0tMTAtMTR2MTQiIHRyYW5zZm9ybT0ibWF0cml4KC4xNjEwMyAwIDAgLjE0ODAzIC0xMTAuNTQ0IC00Ni4wMjQpIi8+PHBhdGggZD0ibTY5MyAzMjEuNCA1IDUgNS01IiB0cmFuc2Zvcm09Im1hdHJpeCguMTYxMDMgMCAwIC4xNDgwMyAtMTEwLjU0NCAtNDYuMDI0KSIvPjwvZz48L3N2Zz4=);background-repeat:no-repeat;background-size:25px 25px;min-width:fit-content;padding-left:25px;padding-right:5px}.GPexportMenuHidden{visibility:hidden}.GPexportMenuContainer{display:inline-block;position:relative}.GPexportMenuContent{border-radius:10px;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);display:none;min-width:80px;padding:8px;position:absolute;z-index:1}.GPexportMenuContent,.GPexportMenuContent a:hover{background-color:#f1f1f1}.GPexportMenuContainer:hover .GPexportMenuContent{display:block}.GPexportMenuContent .container{cursor:pointer;display:block;font-size:14px;margin-bottom:5px;padding-left:15px;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.GPexportMenuContent .container input{cursor:pointer;height:0;opacity:0;position:absolute;width:0}.GPexportMenuContent .checkmark{background-color:#eee;border-radius:50%;height:12px;left:0;position:absolute;top:0;width:12px}.GPexportMenuContent .container:hover input~.checkmark{background-color:#ccc}.GPexportMenuContent .container input:checked~.checkmark{background-color:#366291}.GPexportMenuContent .checkmark:after{content:"";display:none;position:absolute}.GPexportMenuContent .container input:checked~.checkmark:after{display:block}.GPexportMenuContent .container .checkmark:after{background:#fff;border-radius:50%;height:4px;left:4px;top:4px;width:4px}button[id^=GPgetFeatureInfoPicto][aria-pressed=true]{background-position:1px;background-repeat:no-repeat}button[id^=GPgetFeatureInfoPicto]{background-image:url(data:image/png;base64,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cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjliYzYwZTdiLTQ2YTQtNDBmYi1iNTdlLWM2MGY5ZWYzNTc2YSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMDE5ZDJjNS02YmZkLTQ5YzQtYTczYS0zMGQ3OGE0Y2MyZDUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpkN2U0OWVjNi0wZjQyLTQ5YTEtODQ3NS0zN2Y5N2Y3MGJjZWIiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE3MTAwODA3MjUxNDU4NjUiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxNTAxZWQwNS0xMmQ3LTQzNGMtODY3YS0yYjMyMzIxYTYwYjgiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTAzLTEwVDE1OjI1OjI1KzAxOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PnuaV+YAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAHdElNRQfoAwoOGRnrK4UpAAAB+UlEQVRYw+3YsWoUURTG8TNrikAECYJYiVjFLBhS2GktpPEV8gg+gr2IhbWQRhMQG0stIxaCaNKIjQTExqgBUYOJyc/mLkxmZ3d2dmciSA4sy+58c/73u+fMvXc34iROorXAPFaHCdY1F+vHxIG1Xu6sANLkDGZZlg0wpOFiLWRZtlkKmhSGLKU5HKIZm4M57Oaqc4TTGSPhNO7iHmZafD76OJiLiDcRMR0Re6MkqZw5XMZn7OB6WxUqcgqV+Y2FKs7IrYALuNh2y/U4JWauDOJM1WiB0xFxLiJm0/v3iNgqWwt6t4zZakXObEQ8yLXZ1SzLNtGp5AybOdzHFvZwiNsDdJ2U5qAhzn6+MnU4la2AG/iBDzjThqEc51cy1GemSUPPk+TJEE0Thl7mluU+M40Ywnl8xFcsYqqllruWq8weFsflVIHupMuvcAmfcKtEdyrp/tTlpNWs98wcYmkSTpWhF+nyBrbxCFlThkpOAO8n5VQZuonHeIilITlqGyqY2cezJjhNneXO1jFUtmlOwukMA+ZiA90SXRev88KI+FLDvIh4lzbNSBv1QWOcit8pP7Gc0y6n74qxg294+q85g+AzWMklWin5PFMzZ9nZrHFO1SCKM3VkJicx0wZn1MF08Ta9umPmWEsD3cV8W5zj/nNjdZCZk/jf4y94DaUx429cawAAAABJRU5ErkJggg==);background-position:-25px;border-top-left-radius:0;border-top-right-radius:0}.GPcloseGetFeatureInfo{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAAgCAYAAABO6BuSAAANsHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHja1ZlZdhy7DYbfuYosgRMIcjkcwHOygyw/H6pbsi3buce5L4na6mpVV3EA8A8oB/vXP2/4Bz9FUwxVtLfRWuSnjjry5EOPr5/5vKdYn/fnp+z3d+nH8yG/z8fMqeJXvv7s7X39x/n0OcDrMPkk3w3U3zOk9eMXo77H718Ges9cfEX++bwHGu+BSn59kd4DzNe2Yhtdv9/CstfxfOykv36Dv9X+47J/+luJ3hHmKTlbSSXyXsp7AcV/ayiTD5X3VAYXpqKfZ0rR92AE5Fdx+vwZrOj6UusvL/ohK5+fvmSrv1cfvmar5vcl5UuQ2+fxl+dDki9flM/58/cz1/7+lH88X95xD/FL9P333tPvs2d2MWsj1O29qY8tPp+4bjGFT90DS2tR+RWG0Oc1eHWqelMKJ+64eO00UiZdN9V00kw32XPcabPEmi1k5UPOO5fnZC+aR97F81f9lW7WMsopnSTvJ+215M+1pGfaEXd4ZuvMfBKX5sRgiVv++BX+9IZ7HQopeSz7KwGsK2cPNsvwzPk7l5GRdN9BlSfAH6+vP57XQgbFo+wQGQR2vYZYkr4xQXkSXbhQOL4wmPS8ByBETC0sJhUyQNZSkdRS1Jw1JQLZSdBk6QAoLzKQRPJhkbmW0shNzz41t2h6Ls2SOR04D5mRCSkNnHUyNElWrUL9aO3U0JQiVUSaqHQZMltptUlrTZuT4tSiNahoU9WuQ2cvvXbprWvvffQ58iiQpow2dPQxxpzMORl5cvfkgjlXXmXVJWG1pauvseamfHbdstvW3ffY8+RTDvxx2tHTzzjTklFKVk2smVq3YfNSareEW6/cdvX2O+78zNo7rT+9/iBr6Z21/GTKL9TPrHFW9WOI5HQinjMSlkNNZFw9BRR09pzFnmrNnjnPWRwZVEhmkeI5O8kzRgarpSw3feQu5FdGPXN/K29B6w95y/9t5oKn7g8z93PefpW14zK0n4y9UOhBjQX08b31mft0sfvpGH73xZ8e/98Gct6kEE7VXXXumma1UdolYq0vG1dJdWpX6glnSV3JBLYrPdab21rIQxevtui3WBfz4x5nKeJShhhAiHXtVJAA/67XQOnlm+Tepo6S55aTyz15bWa/prOOdM8+DGOmiWq48+hy66K7gOJ642phMWg6tZUVj+Z9bQ+VDEaa1As06p4pg7lRM6Ur5Q5pxUtKb0JWYkGa+oCP2qH82+onN9Z62jy37iF5n4mrENYxRA4uoUpjfl9ZiQjU1iI310aFV+MtFNn5LKPS9ZzTt+2eDuubXSY4XGD2YWhNI9bmxR2jlGm9+LbicNj2rRaOoM9pKopXbK9Vtl0WpckYl/Be7m1awBHIkqYG2lJbiZWPdQ8AFwEbFzkapd/CIKPZzbY3AQVREU3tHgxCdwBH6uTpdtVNntoklvGQiq38cYZpULukpWg7285dfJP6E4jTKAhrf1kKmyyy4bAba/VbuaSqEV2Ze96491hEa9qsvcFc20mOzekxdlIoFZ3vNVbyf0OmuKY2Fk/wVc+c/S6+MijNIwTzsNI8GiyUdyS+7r5Z1HzK//MYvp5ADusqzVc/F9UPCRclTRiUTcBr2xabxbKaLjK9kdoIdcZAGLbKZkNObqOdpuJ5OQsD624pXi5gG5BYozqZBk4sV4fBdYsozNTZTKhzX2JN3orZPK2hd1190Hogclg8W00biuYk9ZqmrWFkrBEBJr7Nzsx6Qh3zcVKZBGOVutzBfQooligA6RvD7gth5tSng9oS9Zya2apyqnSWaydIgZDHxCXMC71H0FG5E7LQlh2jOmD5zW0lz75Jdo0giRjUDrQrEWOgMsK8GBC2uhj/nAqupVpZt1KebCZTDsPWusO5SPea+ex9bwbzZtdmHr2ilD0wg7Qujtt+RBDSxHJ8ToqLENUJCtAjO+thnnrwRHOoNkTuyfTCf0oMX7L/cSyIjBNWlmmGV3YPNw3ucq5aEIES60/uotUJJwIUvdNGWmaulOdAZlqtrYPTekC2tA+0i6ktY2KcuHLpua65BFylrBKyRDO0uUA5gJTbiN2zGmfR1/1yjC1Rl3vdbrFTJwZ3HRsxY8lL29NCh2tG9t3arRGuFKrQIC3qaEZkswgdG+wuGZBlKKXPQykeoXbxB5JnGmPloOpW3WQjtsDqPuphBRO8LseKBOujGtdZGFk3/rEY6m1cpB7MNBbXQT+5unaHFywS3yVVaD2J4ZVXdVGZEIWygbOqrcJSqKp8Z/Qkb1v4EWg/WO0OpjxXM8HaFu+DtDifQQmp6W6LbPd4d8ZszIkrifD0KXvphAw5VAo1zFQnUK7sWKB0mPHaetH6oX7OZM7i7AK3M2Y5dnZFFWlfWuwSIXk0MY2QqWMwV1+c/uui+iwu5kxpcHtePbNxZeJbqtd2oIVuDiLMYJ81Gu18hmYX38HuBKM1L6WGMOKMiPOC16mWdKAY5GM0TcLugonn8R6A0wpMhSds6A/2/iIazIVMwcKHauA7CAGp4vNmOrbXydfDwylguNg5Fu6A2nIm0tCwnmQCfqftgwDwamsauMf1alqYU9jcNDsveI7byQMTkTtVBfQaqaev6A2ErO5sB5lk/lorVYSVpTsAYRc4jdDTTMqGk1beflvoJDd3Ur0REaH5cy12l4l9hMEuYaHZrBQfV1zkY1B5u5VEfKguYKea8M9hQy/OrhG+cVaNSGl+dP2Obq3YyVQ8lntQZWjAwSdz5VQc56CtrULt5gTWom/Tn4j8dNSK+MAVvmJLD5BXpLoAC9Q1y2OPoJhescABS1tm1Ef5XX5RAVBnoiBRHUf3OhwLoe+2iNjLZJENBDtRvlRlt54C+Lho1BkKgz4ciCETA5fcfc/Ba6MkTMYkLtlf3eHtHla94UJIOLX1IJzScquN1YANHvNwvRF+qMA5ckXMDFU32XDrSH6BEDAqA8OOwb/egZAyFn+grnMpHipqEfmDsruLq5gIFJ0BBtXhTseMhoE7kTXnSEBrXvHuYTagcwdS7K/M8NRVHkZ33iayQ+j7CTumk2JjpIuUy2X5o68NQfXHwrjzxLgZvRp0mGlUsE84k4VeDdoZHAzcG2yR0N2gTG1CjbI3w5eWR2gMmWc33r5g34ARsOdEfGK3lynRe9bWGltrbMXIe12ONI0cjIFt6KKVssQBG8ewFGXLL1cN5ogPqbYNQeF+WrC7V3InxA4yzpiSGii8O4azUOCR3M6VNHBaOAziiEJhnjKSUopiRVBXrg0QYSbpmKmS00s58c71d4G+k63HgTZPd20QHOooVHBA9RNm4tkp9P2I8oVXdByCNatctIwM02JS2AU/IhHPBzCejhb/6470xLDgg+trfo3GWOSAusm41Io8umVHgmnu3W2ZUvQvIL7Vjzmpbjykyx9hFjpOyTAkfuUQYcFzFfrfOGUgGwrwoRFA0K5bs9tx5qlcVg+kgOANHZuKIyHMDHegYhydZVQfLI6x0YNEZ4CDzGmo67pRcOgZln08QgO/kmkNCaWayb1DmZOGg8qbrQ3pcNPYMaM9VL6bei1IOipwe1K8hHsUOl57gH5GKN49R/DHJN4A4NPpt4m3FwU8RoOF/8dw08ZNqKfUDQCl0xHyJSqO8l48b0Dg1FW8YkE7HdkDOqeQ7iBxZbAX8jMcoThEy85eyDl87pb20idSmAEqwkBipr08S1pCq8KYmKrlnV17mQAYBBvgxXP6fWyAJFQ3Ay4CjWJJeHzAQDsO/R1FDHHj1+lB0F8aPugbFUZW/Lp0E+X4hId3guq9o7dQMLxT7cAaQE30NgNbyRTkKzPrRE8RL5RwoJhP43B/K+rhm6oXh83zQPxR9Y1o+BMWXxiYRtBxGUu8fST/eH0qzDsOvK9HIqyUquXJ+jC+BAr/hKJhiRmwVRQVCkix+cO5Jv5gj2oTeACDfxXlZAv0REZPG31Gf+wiXlL4BmS0Yg3ws3SK++Yzap044IJwOAfAw1SWuMgZf+SNr7kzjOKsUZKvpAEI+m06BJpIjAXGb/ppgoiPp0Vwl46NObGj/lBKWggqm2XbQSQKiukKwtQ6PazoJ/gb6D/GT9uV7aiYpdOkeEu8hjYPBr7nJK5k8bQQbtISTbMluiynJaN26UeWO5Dm4ja8o1meTEQfBGc3IFinXfIYWBcSukY483nKXK1iqA+mbdJoT2qe3k+zP1Ro3lMLDg+3isnv4s/K6I9Of6slxqWs8J8fsJAjKoEw+gOW1ShYYIt+9OKPV/BusCwSQ8MSsAFIC+2A5vx+vMLmP3rqll49dX711NAabhzo4IM7rY+3qHAbeOmQP7EkyzQVTJ5YudxNZ339AWUmB2j2Ib9wY7/f2RT0MNGiIICv5wDBHwTU8u1BgNLZlO+eA8xvzwGQ+AcFJ7oRIZu7Qs7UPKvN9LTnaaIgeI0YGoV8JnWNH1BXUjgGCyp0ZcfZKnKebggng6ktwNxVGmGM4S8fe+F6M2v1/6mYFboBTrS5/uQQ/XbvOdngpDlGbbTQmyVnHAoBD7nonw1IUjnXC9pHhPnzqP78EdOIAUve+xawZu5OSwmH+sZxTcAsTeus3vPRaQg1tfz/NIZ1700plkszOuNsTlyAhSlGpe2gh8eO0K7jla40UiTr5R9lxP3Hz/3C339w+D86EGb0Im7/BttRpspwKv7mAAABg2lDQ1BJQ0MgcHJvZmlsZQAAeJx9kT1Iw0AcxV/TSkUqHdpBxCFDdbIgVcRRq1CECqFWaNXB5PoJTRqSFBdHwbXg4Mdi1cHFWVcHV0EQ/ABxdnBSdJES/5cUWsR4cNyPd/ced+8AoVVjqhmYAFTNMjKppJjLr4rBVwQQQRhAQmamPidJaXiOr3v4+HoX51ne5/4cg4WiyQCfSDzLdMMi3iCe3rR0zvvEUVaRC8TnxOMGXZD4keuKy2+cyw4LPDNqZDPzxFFisdzDSg+ziqESTxHHCqpG+ULO5QLnLc5qrcE69+QvDBW1lWWu0xxBCotYggQRChqoogYLcVo1UkxkaD/p4R92/BK5FHJVwcixgDpUyI4f/A9+d2uWJhNuUigJ9L3Y9scoENwF2k3b/j627fYJ4H8GrrSuv94CZj5Jb3a12BEQ3gYurruasgdc7gBDT7psyI7kpymUSsD7GX1THojcAgNrbm+dfZw+AFnqKn0DHBwCY2XKXvd4d39vb/+e6fT3A1ABcpnPawB+AAANGmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=);background-position:0}.GPgfiLayerButton{background:unset;border:unset;font-weight:700;text-align:left}button[aria-expanded=true].GPgfiLayerButton span.GPshowGfiLayerFeature{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.GPshowGfiLayerFeature{background-image:url(data:image/png;base64,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ICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmM1NWM2ODRkLWY2OGQtNDExNy04ZGYzLTAwYWMzMjQ4YTY5YSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjNmYWM4YTllLWJkMTUtNGJiOC04ZGQyLTkwZDUyMjE0YmFmOCIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1QOlRpbWVTdGFtcD0iMTcyOTI0NTAwMjg0NjU2OCIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjMwIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjcwMTNhZTFjLTcyMjktNDJmZS1iMzAzLTU3NGFmMWE3ZmQxMyIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMTAtMThUMTE6NTA6MDIrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+UnHxogAAAAZiS0dEAPIA8gDyLkSMzAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+gKEgkyAorMuigAAAIkSURBVFjD7Zc/aBRBFMa/t39EFEMQTrQ2CiIi+K+Q3ZA+CLJ7nqWQwlRJGs3ddUnlZdUiXJEqINjE9e5UjFWag9sEbNRGhGB6MXKgQQPxZp5FLhLCXXbXXSQH8ytnhuF9771v3yygUCgUCkVXKOrB6/dqJzQD42A5DNAZAGBglYA3UlB55ZHztWcFWoXaLTDPAzjW5cgGMUYanlvpOYFtcc8inGVi5A6aSAptS50/761co+QAAOxCba/GH6TJgcaD3HqSoKx89RMx15tH5MTHqdzW7r3zU/6h47+0WSYaCmbcc2F3aftuGhjfpy075asPrI8lTjtjgYlG+zf1JbvoZ3aW7aKf6d/Ul5hoFIyFxBW08tUPAC7Giw3vl2fcS0k1tq3xBEATpN3UmLYkxCsAp8C4G3ju0yj3aCH7pzstNkrO3zbtkLGBNLwTlJznIG1wO2uyLiFWAJggzYoqDgCM8ILE7i9OXL0dDx7+PZH5iast0isAYLDIrh8VTXuyMpeKBwFei28fWkvTg8KACDzXCjzXEgZEXA+GCKTFf/gwv07cnp47DaLbBFxhqb+zCi8uD+ZfXmCpvyXgGhh3As+dTixQCioD2IgR23ezZZYPkgdDB709Wc0ywY8y6Jkpu+w5tTQH9dB9/+RuD9Yf5r6k/lTbFsnzAPV1qxwzjaQt7r8+tu2inwHrY8wYBnC2vbzKoEWzZZbrj298U/8uCoVCoegx/gAQwd9vpqyHDwAAAABJRU5ErkJggg==);background-position:-26px 0;display:inline-block;height:28px;vertical-align:middle;width:28px}[id^=GPisochronPanel-]{width:280px}.GPshowIsochronPicto{background-position:1px;background-repeat:no-repeat}.GPisochronPanelClose,.GPshowIsochronPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIRSURBVFiF7ZbRS1RBFMbPbLq9ldjaY88Zkv1JQRqt+Wf0aCrYBuY/UkRQRFQvQQax+JipEUIoQdHq/nrYb3K8zl33zl20h/vBwnLOmfPNN+fMmWtWoUKFMwPwjiO8Pu/9xOAGDQRqZnYYmLrOuQvD31I51AYJAqbNbNnMfgXm38AyMFV2E8AssKpDy4txwAowX4booogO1WYdYEu/jmwHIqqXEOPzr8VEScwjxXSTREnMSyXZBGaAscA/DtyTOIDnKaKAFsfxGHCB38kWopUiaNVffmC8T9wE8FaxKwk8vpVCrAG1TGU8nsSqeBrJLbXBl5gY4C7wOSNqW+13Y4iistUrLkYE/lTu5PhfAR8ytjmteViYMF9UeTFK3qZ36S9HfJeAP8CDjL2hqq4nkVpfUdFhEcNIjv2ame045/aA22Z2PeMbNbOn4QLn3C6wK38ZxN7Ggd/LKICfwKb+tyMntgGcOAzgO/AjkTM2AJKqFEvuW27s9Oh/aybUch8T+PKmWdaWJiro49kCa+a1ZmFIYvzYjo70ooJu6rS/Ao0B4q8C31TVyYJcZ/aw+iRv+omSmPeKXUrgmeHo0yc6mjOV6gL3i/IYUAdeKMkW0ASuBP6G2mxHMc+A0cJEvVxNVSp3mklUC2imcPgkdSU5CE5nWyK6snXofXUniTkXAFPAIvAJ2Af2gHVgoeidqVChwv+NvxOT737B3Fc7AAAAAElFTkSuQmCC)}button[id^=GPisochronReset]{opacity:.8;transition:opacity .2s ease-out}button[id^=GPisochronReset]:hover{opacity:1}.GPisochronReset{background-color:#366291;background-image:url(data:image/png;base64,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);background-position:-281px}form[id^=GPisochronForm]{padding:15px}div[id^=GPisochronChoice]{-webkit-justify-content:space-between;margin:10px auto 5px;width:160px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}p[id^=GPisochronPointLabelP],p[id^=GPisochronValueChronLabelP]{margin:2px 0 5px}.GPisochronChoiceAlt input:checked+label+span{color:#366291}input[id^=GPisochronChoiceAltChron]+.GPisochronChoiceAltImg{background-position:-56px 0}input[id^=GPisochronChoiceAltChron]:checked+.GPisochronChoiceAltImg{background-position:-84px 0}input[id^=GPisochronChoiceAltDist]+.GPisochronChoiceAltImg{background-position:-112px 0}input[id^=GPisochronChoiceAltDist]:checked+.GPisochronChoiceAltImg{background-position:-140px 0}.GPisochronChoiceAltImg,.GPisochronOriginPointerImg,.GPisochronTransportImg,input[id^=GPisochronChoiceAltChron]{background-image:url(data:image/png;base64,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)}.GPisochronChoiceAltImg,.GPisochronOriginPointerImg,.GPisochronTransportImg{font-size:0}.GPisoExclusionsOption{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAA4CAYAAADuMJi0AAAE60lEQVRYw+2YWWxUZRTHz/fd7y4zzAzTbaAdpgtQWsBiYVxYGpcEMCwRQkx48KHGhKg0WhESNYglwSUgWCKGTaMRBF4MwShpECUshlJqay2U0LCUwrRAp+0Ms997v8UnEl8Gp9Ppg2Z+bzfnn+/knHvud865AFmy/GfZVVZW/vvb9eduNn7Wc+ixGQ3/pm+UcO735VP3/rpsyc39TudHyXQ4maF61cqfZi97ocbjmVi6YGHNxoOeor3JtDskae606uqzFfPmvRqLxFg4EetIpiXJDJqqOHBwEEjIDyXjiVw4t/S1XD34TKs/MX+z4EEAgK0SwhPtjh+qq6tXBjGOtTY11a31D371qEygRxn3F3vWPVE1deN0G82T+m5BbCAIF+8lBttifLoFQeV0Wf7R7XbndsXird19/TUfAhgZeZ8H7eoXHYVWwzdBFTedsmhScfg0wfQPTRF7FfLdmBRRo4Q9RzTS8aeKRaeERAsC8TmRto30HJKqMCrhIcMUMuMcmADQJAQ5GJ4fqUMpFdE2mXgqOe+ewXhJFCHoJNJxu4omz7bhScVMyj/BeFPGUrlZIROOYRT4C0C0S0h8qUhHAAC2yGTFpUka7Skfx9/DZFZGnH2gEHxYwnc6EIguBYnDqtTzT3uDTFb3VdrEcZfWk5GUrgZxaI4QCyyaBAME04sUzTvL+dBD+xnOu8qiwrIgV1leEuf9JxhvTzu6Bgm5ThXkmNcciriaS8R2lXySTHvUqXb/lqsNp3Ju0qstx2Z7sfTZGuKsLAFkV4RK0J5k2s4wXYqYsO6WyYq0HUYN06c9XgX5SxcBuIt4gvJ40sJi7MaVONtVhGHmqIrmyLPzm29tqqf7ilwHUtHvVAjO9tksWbJkyQzehd7xo5ppUqW2tlbzLp380rhxitdB8q/4fD6acnsaKfX19c7Ji+QNJU/at7mmWaaZpklHNSY+irq6urzSxbBBy1PqEoJZfFdYoK2tjY2Jw4aGBpurJvKOmme8xWTTmgjq1DApAwAxoo6fIkieEnoF2+NvUDVqCekRiNIY4ip1eb1ekvEI39/65nOyO7hWtyWc0biOogkDooYOBhhujLEDAIZG4xADAH/4sH796y42ZWBNxBGrCEZMlNBNER1k8fBtdixwwzzY2toaTCtCr9drLXzKthgSiv7ztycfjvQo4O5fpWqR5eGojg2DCX1IBHUf3n2nSey5cOpCXzrfIXp6WZXXMtdYh8pi74JTL3WTijO913tDq2qXVxplA5vijgdTIvE4RO6zYOwO3t5/GhpbTrYMjnh78nq9VlwRfRmVRdewArM6rgJBTLbxErYEAL4J5vetwFJ4jghQxMNSSAyoO42Ttl0Xz58PpzXqS5JE7G5tqrAbM6lMiyljkimoQg1m8VhK7xrFwTpdixcbAaGz2/I+ekba0dzc/iDt3SIUCtH+Lv+lArWwjWPOOeMVJjI1imgRsyXKDas+mxoc83vKUfOC/dO2lst3M7LM3L816LdLBedlTIKU05lUNfJM2ZzEBZORXzuHrtk+vnSu63JGF9LhvmH9/uVAu8s9MUQFnWUSIweHFJ90z7qlq+n6L2OyAQMA918NdLrcrqgwoQrHyAHWqX49PDzMxsohAIAUuZ0YsHJHSO+G5t7eXj+k8ZsEjfCmsQGABgAmAMQBIJEdN7L8//gb3FshBGMt81oAAAAASUVORK5CYII=)}.GPisochronOriginPointerImg{background-color:#f2f2f2;cursor:pointer;width:28px}.GPisochronChoiceAlt input{display:none}.GPisochronChoiceAltImg{cursor:pointer;display:block;height:28px;margin:auto;width:28px}.GPisochronChoiceAlt span{color:#999;cursor:pointer;display:block}.GPisochronModeLabel{display:block;margin-bottom:5px;text-align:center}input[id^=GPisochronTransportCar]+.GPisochronTransportImg{background-position:-168px 0}input[id^=GPisochronTransportCar]+.GPisochronTransportImg,input[id^=GPisochronTransportCar]:checked+.GPisochronTransportImg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATQAAAAcCAYAAADvCUNwAAAV4UlEQVR42u2de1hU1frHv++eC+JwTRHwWoLpgRBKBbVDKmSZlRw5wvHYyeQiM9oJyvSU52dlVy/108BTzEwKXZ58HvGGHnuOZVrk+WVA/cqU0ASfNEsMmJFLYjCz398fswcGGGBmGDzlb97n4WFYa898Zq+91ne977vW3gAe85jHPOYxj3nMYx77dRl5mqDDtFrtCiJ6DoBKKvoZwFNqtXrzQPBi03NXAOjMY36qrPDRzf+J82dmLwBLAEwEUAPgDSKquV54Hrv+Te5pAht17yxmkF4/B2CgBKY7z/IdNv+HmmA7gPkAygFEAlAzcxQRGa8T3nVj+fn5IwRBeJ2ZfURRXL58+fLTA8mbtnjTCJNc/jpB9BGB5Z8XPHr619gugqdrdDKVnTKf64jXm7c0BMB9APREFAdgGYARABKuB971ZoIg6ADMI6IEmUy2Z6B5ZrlMR+B5ACUIoD2/1nZxyUPT6XQMAGq1+pqErLHpuQwAZQU5A8IrKipSGgyG+cxsIqKubWLS6/WpAQEBxampqa3u4EWmrFUO9gmYTwQTc9drwKYp6bmpV5qMxRU717Zeq45ARPXMPAiAl1Q0RPpdez3wrkObYfM64rfOY+YNALIAzCaizz0hp4um1WoXGI3GjUR0U09txMw7jEZjtVar/ZtGo+nX7BSXlreAiTcCuInZ7lCXE7BD5RdYPSUz72/lW7Md4lknGXumVqvJkXq9Xg8AKC4uRltbGxoaGrB3794S2Mm1WicZe1ZWkEOO1Mdl5AEAMl8qQssvbThXY0Ta8zvs8jzWTQDiiOiA5NEnD/iExxTHxAcA+JCbeZKY/c3atQAMvKDl5+cPEwQhG8C9NoPoSyI6IJfL89LT0906s05/MH+YSdlq4UlDIzYj90sS+UArhLwvC7P7xVu7dq0QEhKygYhWOviWMCLardVqX6mpqXli7dq1opNAYcq5wA1M7BiPEUbMu6ek5b5SPsb4BJzluWjBwcGYO3curl69ig8++ADMPKC8ieGhyH0sCZebWvDEa+9BHGDeb910Ol0UgLeJqApAclZW1lcDyZu2ZEuUWSa+zcxVLIrJ5W8+9pWbxex5GzFDfyczuYONmAJgGwDfLlUxzBzT1taWrdVqMzQazS63hJgZr6aYuHUbuAuPEcNEMQpwdlxaXkZpYbbLvNDQ0I0AHrcJgerCw8NPRkZGht5www0jAaC+vv77kydP1lRXV0dZQyIiWhkaGspdLkLfntn5GzYycQdPQN1dseNPpiRMDA0fOXQkAFR9X/d90Udf13xY+m2UaMkxgQgrY88HcJmTPFds6NChmDt3LlpaWnDgwAE0NzcPKG/86CDkPpYEQ2MLHn5lD2rqm/r1eZs2bfJWqVRfAwjv5bDtgYGBi1NTU839Huwpm7zNvvKvAQ7vZWLaPqY5dPHOna7ztFrtNCJ6GsAcGyGIAbBAq9XepdFoDrk3xbN5GiA8DWCOGSIkhyKGBGFBXOard5VuffSQm8TsGQBr3PndBQfFbAcAX2bey8wzbERgJhHtA+BHREVarXaBO8QMTDsk8dzL1MFjppkg7APgx8RFcWl5C1zsIAtsxczPz+/YkiVLBs2aNWvmsGHDxsvlcpVcLlcFBwdPSExMnLlkyRIvPz+/z2w+YpVer5/vVJiJDjEbOSzg2JEtmkHPLb17ZlRY6HhvL4XK20uhigoPnfD80rtnHtqi9hoR5G/Do1Wx6bkO84gIY8eOha+vr10PLDw8HEOHDu3cEQQBiYmJUCgUqKurQ0REBGJjYxEUFNR3JxIICZPDMXyoX7e6qLBQzJk6HhPGDOtULhMEvKi5B4MHKXH6/E/446yJeHjB7Yi4KdilflNUVKRUqVR7+hAzAFhkNBrn9LefRqasVZp9ZXt6FTOLv7HonF9Nv3hE9KmtmHW5bqvcP9UIPfJEM61yk5itBrDWTtU8Zn6CmVcx8xJm/j0zD3WLoOXn5w+TPDMC8IRGo0nWaDSfWOuzsrJKsrKy/gBgtaXdaVtBQUGQqyc5/cH8YWCy8BhPlBXkJJdve7SdV16YXVK2LecPLPGYeNutaXlBznZ8Itpg/dvf3/+zhQsXTlUoFD2uLiqVSp8//elPcX5+fqU2F+TloqIipSMdn4k3dIiZ/2e7Xlo8dfAgZY88H2+lz651i+NGBnXwQHg5MmWt0pFzjI6Oxp133okRI0Z0Ko+Pj0dSUhLuuOMOJCcnIzY2tr1u+PDh8Pf3BwCMHTsWMTExiImJwZAhQ/rkPThnEtYtm4vJvxvVqfzJxQnY+vcUrH4oEW89vRDLk6e3103+3UiMCg4AACROHofF90zC4nsmIXzkUJf6jtFoLOxpENoZTBn9HZAqn0CHeXADD8CLAN6zcy6z8/PzY92fNLPPI8LsyRl5sf0Us8cBvNRD9V0A1gPYCKAQwFEAPzHzJ8z8EDPLXBY0KWfmy8x71Wr1Rmu5Wq0m2xVOtVq9HsB+AH4mkynb1ROVcma+APaWFea088oKcsh2hbO8IGc9g/YD8FNCdIpnMBjmAxhrDTOTk5NvsRe3MzP27duH/fv3W2dJSk5OjgBQb82pGY3GpL54g30COngC6t555s+3EHXniSIj86WdyFpviaIFInrrmUURAlG9Naem8gvolTd48GAkJCR0EiqrKRQKTJgwAadOnUJBQQGqq6txyy23gMjyVS5cuAC9Xt/t59SpUz2HqP4qPLv0biyzESqreXspkHRHJPYfrcDM5a/jUNm3WDg7BoJg4ZVWnEdcRl63n/1HK1zJK70OYJETHs+9/Zl4YzNyXwc5zgNwr7MTbxczq9XqNbb56y7jdKub5cxcti2nRx4xb+2HmGUDeMVpeQXiAbwJoISZb3A15Lxf+v2qA51kk/SF73Ndui08Jn7VgWMtPIGc4gmC0C4KYWFhFT15ZmfOnMGlS5dw9epVW0/NNzw8/KTNxUnqu13QfsxdsRMqevLMDn52CieqL6KhucXWU/O9c/K4kx3nTL3yRo8ejREjRuD48ePde6jZjNbWVigUCiiVSigUCvzyyy/9SvpPn3gjYiNG4d33/7f75GQW0XzlF3h7KaAapIS3lwINP1+FKLo36S+t3i5z8m3Ktra2o67ll3IZ7DxPQXy0H6fZUzKzyhrZ63Q6fzc2aw88qpLUJWpSlsu88f38brcD2N2TpybvpZPYilWJTqdr33fWdR+aTqdjm4ER4+w+ta5L/MRUEpue277vrOs+NMvfbBW2GGf2qTHzpPb8TlRUSA/H4KuvLIs5MTExnUPIyMjgqqoqa7tMdmByaectvHOiXZ4oMt58z7JS/dDczh+Zemd08Afl37ZHar2Rzp8/j6qqKgwbNgzR0dFdGCJKSkowe/ZshIWFgZlx8ODBfvWsT098h/dLTyMqLAR/mXNbp7o2kxnPF36IDQ/fi9mxN0MUGSty9/dHuH7PzM8Skbs23o636efNRHSwubl58YoVK1oAIC499/cMfhZwH8+mnzcDOChrMi8+tnNFiyOBhT3BEkXxAYVCYTCbzYUALut0OgQGBsrdsOBhmJSl84fpamce4QEFzAYzywplpquXY9NzMaYpVO7kgsdfASgBZPbj+80E8KDksTnloV2PNtz6IiAgYGRP3tnly5fh5+eH8PDOOV/rCqhkI5zh3TR8yMievLNzNUaMHBaAu6d2nsDCRw11mHflyhWYTCa7dXK5HNOnT0ddXR2OHDmC+vp6xMfHQ6FQtB8jk8kwYcIETJ8+HZGRkRCE3rtH3eWf8UurfZ63lwKPL5qB0+dq8bT+fZz5vharH0rA4EFKG7dFhqQ7IvH4ohlISYiGQm4/PaLVaqcB+MCNYtYtbcnMC1Qq1auWCXPzNAY+cKOYdeMBWGDylfUZiUh5WoO9sFAUxW8yMzOr1Gp1PAA9AEN/xUzK09rl+XjJvjm2bUVVWUFOPEs8Z1dviYgBqO2JkWSHAGyQfjZJebQSAL90OS7LYQ/NxvP6CkA0M8+wXQzo6nmp1WrKz8+fKQjCRwC+VKvVtzlzkjael4VHPMN2MaCr51VWkENTMzfPFEULr6wg5zYXrx/v378fNTX274e+7bbbug1q7hyjObs3jLPW78LxMz/arcy4fwpkXXhmsV+8dgsJCYGPjw9KS0tRXV0NAEhISEBISIfTOGPGDISFhaG2thaRkZEYNWqUy15c9LjhCLnBF//Y+T84VPYtGIzns+YgOjwUH0vH/NeSO3FX7M345rtLWDBrIqbeMhqP5/3T3iBYB8D7Gkx28y2DTbgmPGrn9WzS3SmT7XhohqCgoBabMaju67McMenulMl2QkpDUG0Hr7wgx2UeEYnMnAlAAeCBLtX7iOg1O1GTP4A8AIulojhmHkFEPzjsoRHRP6W80woHclPWYw64fIGZ/2m50NQnTzRbeOQ8r11NjEbjDz0dFBwcjHHjxnX3xQ0G2/dcdIZX/UN9jzzL9oYJ3crPdn7PRVfb9sqVKwCA0NDQ9vMD0L7XTBAEKJVKlJeXo7i4GFVVVRg9ejTkctduJqm9bPncW28eASIgOtziqF4yWMplggDfwV7I3/MpMl4swvulp3H7xJswSGmXF9VD/zwUGBjoBSCAme8B4Mimz/sCAwPl0qQc39PlsJ+KwKGfm4xeZvmgACbcA3KAR3TfmKZQeVlBDlHPvD5NJpN1dV+DDAbDfw+U2CrNP3fjfedz0W08IjIDeAhAkYPHN8DyZJb3bLTrLoc8NJtE8hZBELKZOUmn0z0prWZ2y6Hp9frVzHw/gAaFQrHF5Ytm8tpiUrRmg5E0JT33yfKCnPX2cmhxabmrmXA/gIZWpi1ONuQXzHwzAJw4ceLivHnznEpSVlRU1ACwKk+5A07ZFwDdDAA7Dh+/qH9ygVO8og+Pt/OIHOH1kBQxGFBZWYmIiAhMmDABgiCgsrISRqOxPcdm9cZGjhyJkJAQXLx4sccQti+rvlCPvSUn8cdZUUi6IxJymYDikpM4+2O9NV5qz6lNvWUMoscNx1dnfsBV+yHsvwHM61K2o7m5OY2ZzwFoJSK9yWSKl8vlve3OLWHm8UajcZ1Op5PB8rSPEnTcp9hsScvSvy03YnfqNztkTaY0lW/gObRdbQWgH+wtj79y1dQrD8zjv/O9uC42PVfGjO2g7jxHTBTFf9npyzmvvfbamocfftjtO6BFltnhIWfm8tfWfPy6e3hEZGbmByQdSnbgeGZmDYBqKQ833ilBW7Zs2U9arTaDiIoArNPr9VMBbLZGXVKYuUISM5GI0vpzC9Sn7yz7KS4tL4OJiwhYF5uRO5VF2mxdAJiauXmmaBZWSGImAkhz4RaoYgB/BoDq6uqo+Pj4ZqVS6dATLlpbWxvPnj070cYN3tennIGKSeJ9WPpt1BN/mdXs4+0Yr+lKa+Phz89MtMnK7nPkfUajER9++CFqazs3zdGjR1FZWYmAgAA0NDR0q7fm2ubOnQtmRnm5Y/pZ/UM9/p7/L1R+d6lT+fq3j2DvxycwJjQQ31+6jMrvfur2Xi+lHK8+mgRmRv6eT3tCrIHlHr8QG49ljY+PzxZmtpa9IJfL+7qZfw0R2a42viAIQqIoioelAVMFAHKR1pgF7sQTYFpj9pVtARAibbp54cpVc2sfIeUaBo5SR8ELYCERZOExt69S9mpvvPHGJFEUrXtxDsLyRBKldL1yYNmj5jaLy8ydxCLs8q60mNzKIyITMy8EsFOatL7t4/gLzPw2LIsK3UKoPhcFNBrNLiJKAdDIzEnM/LFNmPkRLFs7Gpg5JSsra29/T7C0MHsXgVMANIKRRNTBE0XhI0ieGQuUUlaQ4zQvICCgGMBZ6c8he/bsqWAH9i4wM+/evbvSZg9MlXSXRO+hXpOxnScyD3no2e0VogM8kZkXP7e9UmznUZVJ4eWQoLW0tODs2bNoauruPNTV1aGqqsqumFk9tcLCQhw/frxbjq1HAW1sweHPz+DHusZudafP1+KD0m/tihkAmEwiZj2cj3cOfoHnls5B9Ljh9nK6J2QyWTyAd6wOZ2ZmZhUzL3IkUWy1wMDAY13L/P39SwDUMPMRQRCWA8CxNx85ISNzJ96xbSuq0H2vW6+80U2h3XhjmoNLANQAfEQumJc7cj3NZvNfba7PMwDSbKpzNm3a5N58n8gdPKJnQDY8Qs60FPfyiKhN8tBGEJEjt1XlSb/HOuWhtV+1rKzdBQUFn5hMpmxmvhfArVLVl1LOLE+j0dS56wRLCx7dfWta3idKiNlM1IlHwAGTvC3vC/1Kl3ipqamtWq12FRHtBoDGxsa4HTt2lCYnJ0colUrfnjyz3bt3VzY1NcXZCNxKjUbT5kiSdUpm3ioSeTcAXKhtjEtZ/VbpW88sivDxts9rutLauPi57ZU/1jbG2eQXV36hV7dhgEypVOLGG2+EwWBAXV0dLly44PCdAq6YyluJGbeGofpCHU6fr0XZN+fx0NzJuHmU/f2nmZmZVVJCeLHNQNjeZdf/NmtapCfT6XRd+4MZQGjX4yQB68STQtSMDu+bt1nTIvaszJIu6VQmrQqGOjngl0gORKJarS6TPnq7Vqs9TEQJKpVqq53kusvGsPDAQuLnBY+082LTXz0MUILZR+ZWnnWhwNEcMRGdYObPbD1opwQNAKRQ8ikAT9nk0G4bqAEmhZJPAXjKJofmFp5Go9mj1WpfsT5po7GxMe6tt94yjB079uPIyMiQIUOGjAIsN6dXVFTUnD17diIzx9k06Aa1Wr3PUV751uw9U9JyXyHCSquozX5EZ0icMu7j1MTokHGjho4CgDPna78vOvx1zeHPz0wUbXgAbygtfHQfBtBEUcTtt9+OhoYGlJWVISoqCsyMS5cuDRCPseqBGfj+0mX8Y9enWHT3rRCZ8XW14+sezc3Nj6hUqnkAWgG8GRgY+LIDb1sjJZetOTTHc7xN5kfMvjILj/DmjY2hL5f3rQ5rQLQEYBnIOR4AFBUVyax5zqVLlx7pmteTwsEZ7rouKSlFsnOSrpQVPtKZB9rBQALIfbx+2Buwc/uUS4/quB4e8OjC44OstvHixYurXX18kFXUHJ+6sLFslHH1tXh8EDPPBVAAIFhKWK8kIt31wvstmk6nOwDLLUglarV6Zpc6fwCX3TkWY9Nz23llBTmdeJOydP4y09XL7h6LLvYdFYBTRDSq34J2PZler5/PzC8DCOvj0CoAq9RqdXE/O8x8EF4G98WjKpB5Vdm2x4qvcUcRpJDoEhGZrjfeb8m2bt0abjabTwGQCYKQ2NVDc7dzMS1jU7iZZacAyMBCYlcPbaCci370nS1E9Iht2f/7/ymQlZW1NzAwMAJAKjO/C+CU5C00A6hk5neZOQVARH/FTOoIe39uNEaAOBXAu9SFB+BdYkoxy70irrWYWXMZRPTDtRKXa837LZnJZAoCYBAEYaw9MZOslYjc8hxCM1MQAAMEYaw9MbPyAOz6lTRRoaeXeMxjHvOYxzzmMY95zGMe85jHrpH9H5upQtqJtSKfAAAAAElFTkSuQmCC)}input[id^=GPisochronTransportCar]:checked+.GPisochronTransportImg{background-position:-196px 0}input[id^=GPisochronTransportPedestrian]+.GPisochronTransportImg{background-position:-224px 0}input[id^=GPisochronTransportPedestrian]+.GPisochronTransportImg,input[id^=GPisochronTransportPedestrian]:checked+.GPisochronTransportImg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATQAAAAcCAYAAADvCUNwAAAV4UlEQVR42u2de1hU1frHv++eC+JwTRHwWoLpgRBKBbVDKmSZlRw5wvHYyeQiM9oJyvSU52dlVy/108BTzEwKXZ58HvGGHnuOZVrk+WVA/cqU0ASfNEsMmJFLYjCz398fswcGGGBmGDzlb97n4WFYa898Zq+91ne977vW3gAe85jHPOYxj3nMYx77dRl5mqDDtFrtCiJ6DoBKKvoZwFNqtXrzQPBi03NXAOjMY36qrPDRzf+J82dmLwBLAEwEUAPgDSKquV54Hrv+Te5pAht17yxmkF4/B2CgBKY7z/IdNv+HmmA7gPkAygFEAlAzcxQRGa8T3nVj+fn5IwRBeJ2ZfURRXL58+fLTA8mbtnjTCJNc/jpB9BGB5Z8XPHr619gugqdrdDKVnTKf64jXm7c0BMB9APREFAdgGYARABKuB971ZoIg6ADMI6IEmUy2Z6B5ZrlMR+B5ACUIoD2/1nZxyUPT6XQMAGq1+pqErLHpuQwAZQU5A8IrKipSGgyG+cxsIqKubWLS6/WpAQEBxampqa3u4EWmrFUO9gmYTwQTc9drwKYp6bmpV5qMxRU717Zeq45ARPXMPAiAl1Q0RPpdez3wrkObYfM64rfOY+YNALIAzCaizz0hp4um1WoXGI3GjUR0U09txMw7jEZjtVar/ZtGo+nX7BSXlreAiTcCuInZ7lCXE7BD5RdYPSUz72/lW7Md4lknGXumVqvJkXq9Xg8AKC4uRltbGxoaGrB3794S2Mm1WicZe1ZWkEOO1Mdl5AEAMl8qQssvbThXY0Ta8zvs8jzWTQDiiOiA5NEnD/iExxTHxAcA+JCbeZKY/c3atQAMvKDl5+cPEwQhG8C9NoPoSyI6IJfL89LT0906s05/MH+YSdlq4UlDIzYj90sS+UArhLwvC7P7xVu7dq0QEhKygYhWOviWMCLardVqX6mpqXli7dq1opNAYcq5wA1M7BiPEUbMu6ek5b5SPsb4BJzluWjBwcGYO3curl69ig8++ADMPKC8ieGhyH0sCZebWvDEa+9BHGDeb910Ol0UgLeJqApAclZW1lcDyZu2ZEuUWSa+zcxVLIrJ5W8+9pWbxex5GzFDfyczuYONmAJgGwDfLlUxzBzT1taWrdVqMzQazS63hJgZr6aYuHUbuAuPEcNEMQpwdlxaXkZpYbbLvNDQ0I0AHrcJgerCw8NPRkZGht5www0jAaC+vv77kydP1lRXV0dZQyIiWhkaGspdLkLfntn5GzYycQdPQN1dseNPpiRMDA0fOXQkAFR9X/d90Udf13xY+m2UaMkxgQgrY88HcJmTPFds6NChmDt3LlpaWnDgwAE0NzcPKG/86CDkPpYEQ2MLHn5lD2rqm/r1eZs2bfJWqVRfAwjv5bDtgYGBi1NTU839Huwpm7zNvvKvAQ7vZWLaPqY5dPHOna7ztFrtNCJ6GsAcGyGIAbBAq9XepdFoDrk3xbN5GiA8DWCOGSIkhyKGBGFBXOard5VuffSQm8TsGQBr3PndBQfFbAcAX2bey8wzbERgJhHtA+BHREVarXaBO8QMTDsk8dzL1MFjppkg7APgx8RFcWl5C1zsIAtsxczPz+/YkiVLBs2aNWvmsGHDxsvlcpVcLlcFBwdPSExMnLlkyRIvPz+/z2w+YpVer5/vVJiJDjEbOSzg2JEtmkHPLb17ZlRY6HhvL4XK20uhigoPnfD80rtnHtqi9hoR5G/Do1Wx6bkO84gIY8eOha+vr10PLDw8HEOHDu3cEQQBiYmJUCgUqKurQ0REBGJjYxEUFNR3JxIICZPDMXyoX7e6qLBQzJk6HhPGDOtULhMEvKi5B4MHKXH6/E/446yJeHjB7Yi4KdilflNUVKRUqVR7+hAzAFhkNBrn9LefRqasVZp9ZXt6FTOLv7HonF9Nv3hE9KmtmHW5bqvcP9UIPfJEM61yk5itBrDWTtU8Zn6CmVcx8xJm/j0zD3WLoOXn5w+TPDMC8IRGo0nWaDSfWOuzsrJKsrKy/gBgtaXdaVtBQUGQqyc5/cH8YWCy8BhPlBXkJJdve7SdV16YXVK2LecPLPGYeNutaXlBznZ8Itpg/dvf3/+zhQsXTlUoFD2uLiqVSp8//elPcX5+fqU2F+TloqIipSMdn4k3dIiZ/2e7Xlo8dfAgZY88H2+lz651i+NGBnXwQHg5MmWt0pFzjI6Oxp133okRI0Z0Ko+Pj0dSUhLuuOMOJCcnIzY2tr1u+PDh8Pf3BwCMHTsWMTExiImJwZAhQ/rkPThnEtYtm4vJvxvVqfzJxQnY+vcUrH4oEW89vRDLk6e3103+3UiMCg4AACROHofF90zC4nsmIXzkUJf6jtFoLOxpENoZTBn9HZAqn0CHeXADD8CLAN6zcy6z8/PzY92fNLPPI8LsyRl5sf0Us8cBvNRD9V0A1gPYCKAQwFEAPzHzJ8z8EDPLXBY0KWfmy8x71Wr1Rmu5Wq0m2xVOtVq9HsB+AH4mkynb1ROVcma+APaWFea088oKcsh2hbO8IGc9g/YD8FNCdIpnMBjmAxhrDTOTk5NvsRe3MzP27duH/fv3W2dJSk5OjgBQb82pGY3GpL54g30COngC6t555s+3EHXniSIj86WdyFpviaIFInrrmUURAlG9Naem8gvolTd48GAkJCR0EiqrKRQKTJgwAadOnUJBQQGqq6txyy23gMjyVS5cuAC9Xt/t59SpUz2HqP4qPLv0biyzESqreXspkHRHJPYfrcDM5a/jUNm3WDg7BoJg4ZVWnEdcRl63n/1HK1zJK70OYJETHs+9/Zl4YzNyXwc5zgNwr7MTbxczq9XqNbb56y7jdKub5cxcti2nRx4xb+2HmGUDeMVpeQXiAbwJoISZb3A15Lxf+v2qA51kk/SF73Ndui08Jn7VgWMtPIGc4gmC0C4KYWFhFT15ZmfOnMGlS5dw9epVW0/NNzw8/KTNxUnqu13QfsxdsRMqevLMDn52CieqL6KhucXWU/O9c/K4kx3nTL3yRo8ejREjRuD48ePde6jZjNbWVigUCiiVSigUCvzyyy/9SvpPn3gjYiNG4d33/7f75GQW0XzlF3h7KaAapIS3lwINP1+FKLo36S+t3i5z8m3Ktra2o67ll3IZ7DxPQXy0H6fZUzKzyhrZ63Q6fzc2aw88qpLUJWpSlsu88f38brcD2N2TpybvpZPYilWJTqdr33fWdR+aTqdjm4ER4+w+ta5L/MRUEpue277vrOs+NMvfbBW2GGf2qTHzpPb8TlRUSA/H4KuvLIs5MTExnUPIyMjgqqoqa7tMdmByaectvHOiXZ4oMt58z7JS/dDczh+Zemd08Afl37ZHar2Rzp8/j6qqKgwbNgzR0dFdGCJKSkowe/ZshIWFgZlx8ODBfvWsT098h/dLTyMqLAR/mXNbp7o2kxnPF36IDQ/fi9mxN0MUGSty9/dHuH7PzM8Skbs23o636efNRHSwubl58YoVK1oAIC499/cMfhZwH8+mnzcDOChrMi8+tnNFiyOBhT3BEkXxAYVCYTCbzYUALut0OgQGBsrdsOBhmJSl84fpamce4QEFzAYzywplpquXY9NzMaYpVO7kgsdfASgBZPbj+80E8KDksTnloV2PNtz6IiAgYGRP3tnly5fh5+eH8PDOOV/rCqhkI5zh3TR8yMievLNzNUaMHBaAu6d2nsDCRw11mHflyhWYTCa7dXK5HNOnT0ddXR2OHDmC+vp6xMfHQ6FQtB8jk8kwYcIETJ8+HZGRkRCE3rtH3eWf8UurfZ63lwKPL5qB0+dq8bT+fZz5vharH0rA4EFKG7dFhqQ7IvH4ohlISYiGQm4/PaLVaqcB+MCNYtYtbcnMC1Qq1auWCXPzNAY+cKOYdeMBWGDylfUZiUh5WoO9sFAUxW8yMzOr1Gp1PAA9AEN/xUzK09rl+XjJvjm2bUVVWUFOPEs8Z1dviYgBqO2JkWSHAGyQfjZJebQSAL90OS7LYQ/NxvP6CkA0M8+wXQzo6nmp1WrKz8+fKQjCRwC+VKvVtzlzkjael4VHPMN2MaCr51VWkENTMzfPFEULr6wg5zYXrx/v378fNTX274e+7bbbug1q7hyjObs3jLPW78LxMz/arcy4fwpkXXhmsV+8dgsJCYGPjw9KS0tRXV0NAEhISEBISIfTOGPGDISFhaG2thaRkZEYNWqUy15c9LjhCLnBF//Y+T84VPYtGIzns+YgOjwUH0vH/NeSO3FX7M345rtLWDBrIqbeMhqP5/3T3iBYB8D7Gkx28y2DTbgmPGrn9WzS3SmT7XhohqCgoBabMaju67McMenulMl2QkpDUG0Hr7wgx2UeEYnMnAlAAeCBLtX7iOg1O1GTP4A8AIulojhmHkFEPzjsoRHRP6W80woHclPWYw64fIGZ/2m50NQnTzRbeOQ8r11NjEbjDz0dFBwcjHHjxnX3xQ0G2/dcdIZX/UN9jzzL9oYJ3crPdn7PRVfb9sqVKwCA0NDQ9vMD0L7XTBAEKJVKlJeXo7i4GFVVVRg9ejTkctduJqm9bPncW28eASIgOtziqF4yWMplggDfwV7I3/MpMl4swvulp3H7xJswSGmXF9VD/zwUGBjoBSCAme8B4Mimz/sCAwPl0qQc39PlsJ+KwKGfm4xeZvmgACbcA3KAR3TfmKZQeVlBDlHPvD5NJpN1dV+DDAbDfw+U2CrNP3fjfedz0W08IjIDeAhAkYPHN8DyZJb3bLTrLoc8NJtE8hZBELKZOUmn0z0prWZ2y6Hp9frVzHw/gAaFQrHF5Ytm8tpiUrRmg5E0JT33yfKCnPX2cmhxabmrmXA/gIZWpi1ONuQXzHwzAJw4ceLivHnznEpSVlRU1ACwKk+5A07ZFwDdDAA7Dh+/qH9ygVO8og+Pt/OIHOH1kBQxGFBZWYmIiAhMmDABgiCgsrISRqOxPcdm9cZGjhyJkJAQXLx4sccQti+rvlCPvSUn8cdZUUi6IxJymYDikpM4+2O9NV5qz6lNvWUMoscNx1dnfsBV+yHsvwHM61K2o7m5OY2ZzwFoJSK9yWSKl8vlve3OLWHm8UajcZ1Op5PB8rSPEnTcp9hsScvSvy03YnfqNztkTaY0lW/gObRdbQWgH+wtj79y1dQrD8zjv/O9uC42PVfGjO2g7jxHTBTFf9npyzmvvfbamocfftjtO6BFltnhIWfm8tfWfPy6e3hEZGbmByQdSnbgeGZmDYBqKQ833ilBW7Zs2U9arTaDiIoArNPr9VMBbLZGXVKYuUISM5GI0vpzC9Sn7yz7KS4tL4OJiwhYF5uRO5VF2mxdAJiauXmmaBZWSGImAkhz4RaoYgB/BoDq6uqo+Pj4ZqVS6dATLlpbWxvPnj070cYN3tennIGKSeJ9WPpt1BN/mdXs4+0Yr+lKa+Phz89MtMnK7nPkfUajER9++CFqazs3zdGjR1FZWYmAgAA0NDR0q7fm2ubOnQtmRnm5Y/pZ/UM9/p7/L1R+d6lT+fq3j2DvxycwJjQQ31+6jMrvfur2Xi+lHK8+mgRmRv6eT3tCrIHlHr8QG49ljY+PzxZmtpa9IJfL+7qZfw0R2a42viAIQqIoioelAVMFAHKR1pgF7sQTYFpj9pVtARAibbp54cpVc2sfIeUaBo5SR8ELYCERZOExt69S9mpvvPHGJFEUrXtxDsLyRBKldL1yYNmj5jaLy8ydxCLs8q60mNzKIyITMy8EsFOatL7t4/gLzPw2LIsK3UKoPhcFNBrNLiJKAdDIzEnM/LFNmPkRLFs7Gpg5JSsra29/T7C0MHsXgVMANIKRRNTBE0XhI0ieGQuUUlaQ4zQvICCgGMBZ6c8he/bsqWAH9i4wM+/evbvSZg9MlXSXRO+hXpOxnScyD3no2e0VogM8kZkXP7e9UmznUZVJ4eWQoLW0tODs2bNoauruPNTV1aGqqsqumFk9tcLCQhw/frxbjq1HAW1sweHPz+DHusZudafP1+KD0m/tihkAmEwiZj2cj3cOfoHnls5B9Ljh9nK6J2QyWTyAd6wOZ2ZmZhUzL3IkUWy1wMDAY13L/P39SwDUMPMRQRCWA8CxNx85ISNzJ96xbSuq0H2vW6+80U2h3XhjmoNLANQAfEQumJc7cj3NZvNfba7PMwDSbKpzNm3a5N58n8gdPKJnQDY8Qs60FPfyiKhN8tBGEJEjt1XlSb/HOuWhtV+1rKzdBQUFn5hMpmxmvhfArVLVl1LOLE+j0dS56wRLCx7dfWta3idKiNlM1IlHwAGTvC3vC/1Kl3ipqamtWq12FRHtBoDGxsa4HTt2lCYnJ0colUrfnjyz3bt3VzY1NcXZCNxKjUbT5kiSdUpm3ioSeTcAXKhtjEtZ/VbpW88sivDxts9rutLauPi57ZU/1jbG2eQXV36hV7dhgEypVOLGG2+EwWBAXV0dLly44PCdAq6YyluJGbeGofpCHU6fr0XZN+fx0NzJuHmU/f2nmZmZVVJCeLHNQNjeZdf/NmtapCfT6XRd+4MZQGjX4yQB68STQtSMDu+bt1nTIvaszJIu6VQmrQqGOjngl0gORKJarS6TPnq7Vqs9TEQJKpVqq53kusvGsPDAQuLnBY+082LTXz0MUILZR+ZWnnWhwNEcMRGdYObPbD1opwQNAKRQ8ikAT9nk0G4bqAEmhZJPAXjKJofmFp5Go9mj1WpfsT5po7GxMe6tt94yjB079uPIyMiQIUOGjAIsN6dXVFTUnD17diIzx9k06Aa1Wr3PUV751uw9U9JyXyHCSquozX5EZ0icMu7j1MTokHGjho4CgDPna78vOvx1zeHPz0wUbXgAbygtfHQfBtBEUcTtt9+OhoYGlJWVISoqCsyMS5cuDRCPseqBGfj+0mX8Y9enWHT3rRCZ8XW14+sezc3Nj6hUqnkAWgG8GRgY+LIDb1sjJZetOTTHc7xN5kfMvjILj/DmjY2hL5f3rQ5rQLQEYBnIOR4AFBUVyax5zqVLlx7pmteTwsEZ7rouKSlFsnOSrpQVPtKZB9rBQALIfbx+2Buwc/uUS4/quB4e8OjC44OstvHixYurXX18kFXUHJ+6sLFslHH1tXh8EDPPBVAAIFhKWK8kIt31wvstmk6nOwDLLUglarV6Zpc6fwCX3TkWY9Nz23llBTmdeJOydP4y09XL7h6LLvYdFYBTRDSq34J2PZler5/PzC8DCOvj0CoAq9RqdXE/O8x8EF4G98WjKpB5Vdm2x4qvcUcRpJDoEhGZrjfeb8m2bt0abjabTwGQCYKQ2NVDc7dzMS1jU7iZZacAyMBCYlcPbaCci370nS1E9Iht2f/7/ymQlZW1NzAwMAJAKjO/C+CU5C00A6hk5neZOQVARH/FTOoIe39uNEaAOBXAu9SFB+BdYkoxy70irrWYWXMZRPTDtRKXa837LZnJZAoCYBAEYaw9MZOslYjc8hxCM1MQAAMEYaw9MbPyAOz6lTRRoaeXeMxjHvOYxzzmMY95zGMe85jHrpH9H5upQtqJtSKfAAAAAElFTkSuQmCC)}input[id^=GPisochronTransportPedestrian]:checked+.GPisochronTransportImg{background-position:-252px 0}.GPisochronTransportChoice input{display:none}div[id^=GPisochronTransportChoice]>div{justify-content:center;width:100%}div[id^=GPisochronValueChron],div[id^=GPisochronValueDist]{margin:5px auto;width:220px}.GPisochronTransportImg{cursor:pointer;display:inline-block;height:28px;width:28px}.GPisochronTransportImg:first-of-type{margin-left:18px;margin-right:10px}select[id^=GPisochronDirectionSelect]{margin:5px auto;width:80px}.GPshowIsoExclusionsPicto{right:0;top:unset;transition:all .5s ease-out 0s}.GPisoExclusionsLabel{display:block;font-weight:700;line-height:16px;margin-bottom:10px;text-align:center}.GPisoExclusionsOptions{display:-webkit-flex;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.GPisoExclusionsOption{background-color:#fee;border:1px solid #a77;border-radius:3px;color:#a77;cursor:pointer;display:block;height:28px;line-height:26px;padding-left:28px;padding-right:5px}input:checked+.GPisoExclusionsOption{background-color:#efe;background-position:0 -28px;border:1px solid #797;color:#797}input[id^=GPisochronSubmit-]{padding:0 10px;width:fit-content}[id^=GPimportGetCapPanel-],[id^=GPimportMapBoxPanel-],[id^=GPimportPanel-]{width:340px}div[id^=GPimportTypeLine-]{border-bottom:1px solid #999;margin-bottom:15px;padding-bottom:15px}div[id^=GPimportChoice-]{margin-bottom:5px;margin-top:5px}.GPshowImportPicto{background-position:1px;background-repeat:no-repeat}.GPimportGetCapPanelClose,.GPimportMapBoxPanelClose,.GPimportPanelClose,.GPshowImportPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH7SURBVFiF7dY/aBRhEAXwvcN/sRBBkUNsA8JhoZ1gJaIIamV91SUSFCxtU1oJQS9i0lnZWShYpE5pIYFUNoJIsLGIYhC9n8XOcZt175Ldu2CzD7bYmfne+97O7nybJDVq1KhRFZjFWlyz/3s/lYFDeIjvhviJRRyZAv8cXqA5pqaBp3gwqdglvA8TW+jgNj5HbAOXJ+Cfw5/gWi0yFWaeRU2/kikcx2P8DpKXOJXJn8RSbKYfT/hEBZ2e3VhGI2dmOVfTKytyC59i8Udcy+RA5v4KNiP8BXdLag1epSxW0cx1ZoCVoi6OIm9FJ+BXdOhYrmaXoYgdxiPsRPoNzk3BVL57pcx08C0WrqM9ou4fQ5lcO9YKrs6EpqqZCcLtWPgkv3CMSFG3msEB2/vewHhThcOiCNmi50mSSJLkXpIk3TIbyaEbHIKzLBr7jO0N3JB+2PAapwtqCl856dR7FemvuFNSu2gAVOpSnvgM3gbJFm7uZQhXDc+lNZydgpmVglhlUw3M44f0jFnC0bwh6XRblJ5FO9JJV0pwjJnB2C4c6aVNhVgbH4JoAxcyufOGfxCbuFhR4+AP1pzgTIj2o2Pzue71MDMBf9fw16dwNOc61cf9yoYypNcNBwYVPvwx3AvxYEZOszDVw8I0NAekLbyLqzU14ho1atQ4KPwF7C8m4Xa+2v4AAAAASUVORK5CYII=)}.GPimportPanelReturnPicto{background-color:#366291;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4AUXDwQyeFmCzQAAATJJREFUSMftliFLBFEURs/dVUQURJvYLCaLGESz1T9gUJsoWARBEBRM/obFIFgMKxtsNhG2aTUIBqOCySLsHssuTNiVGZ47aU8aZr5537vz3TfvwZAhg0K9UL/U5bLMuuyljFXJYXYOHGVuxcAM1VPg5D+/1sgfZsfAWY9HG+ok0AY+gFfgJSI+UzI7tBht9UHdUqtFzQ5M41GdKZLhQmJMa0A9d6VqqDXT2e41fvQxrQCXQK+X7oGnzvUoMA3MAyvAWEbXjIjVIllW1eseM9/vo59SrzK6ljpXtIGq6k0ew0wcdxntTqGFHxEtYBO4zTPBiBDYBX6SGlAdVRud9baeQ99tunrKz6CizubULnYMn8vczprqW+HdIoEaMF5mhRPqe2kVRsQ30Cj7WLI0PJwNnF82zKAINyZs+wAAAABJRU5ErkJggg==)}.GPimportChoiceAlt input[type=radio]{display:none}.GPimportChoiceAltTxt{color:#bbb;cursor:pointer;display:block;font-weight:700;line-height:28px}input[type=radio]:checked+.GPimportChoiceAltTxt{color:#366291}.GPimportInputLine{display:-ms-flexbox;display:-webkit-box;display:flex;margin-bottom:10px}.GPimportInputLine>*{border:1px solid #999;border-radius:0;display:block;height:28px;line-height:26px}.GPimportInputLine :not(:last-child){border-right:none}.GPimportInputLine :first-child{border-radius:3px 0 0 3px}.GPimportInputLine :last-child{border-radius:0 3px 3px 0}.GPimportInputLine>:not(input){overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.GPimportInputLine>input{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0;padding:0 5px}.GPimportInputLine>select{-webkit-box-flex:1;-ms-flex:1;flex:1;padding-right:7px}.GPimportInputLine>label{background-color:#f2f2f2;color:#666;cursor:pointer;padding-left:7px;padding-right:9px}.GPimportGetCapProposal{color:#5e5e5e;cursor:pointer;font-size:1em;height:28px;line-height:16px;list-style-type:none;overflow:hidden;padding:6px 10px;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap;width:100%}.GPimportGetCapRubriqueTitle,.GPimportMapBoxListSourceTitle,.GPimportMapBoxSourceTitle{color:#5e5e5e}.GPimportGetCapListRubrique,.GPimportGetCapRubrique,.GPimportMapBoxListSource,.GPimportMapBoxSource{list-style-type:none}li.GPimportGetCapListRubrique:before,li.GPimportGetCapRubrique:before,li.GPimportMapBoxListSource:before,li.GPimportMapBoxSource:before{content:"» "}.GPimportGetCapProposal:hover,.GPimportGetCapRubriqueTitle:hover,.GPimportMapBoxSourceTitle:hover{color:#000}.GPimportMapBoxSourceFilter,.GPimportMapBoxSourceScale,.GPimportMapBoxSourceStyle,.GPimportMapBoxSourceVisibility{display:inline-block;margin-left:15px}.GPimportMapBoxJsonEdit{margin:5px;outline:1px solid #ccc;padding:5px}.GPimportMapBoxJsonEdithidden{display:none}.gp-json-string{color:green}.gp-json-number{color:#ff8c00}.gp-json-boolean{color:blue}.gp-json-null{color:#f0f}.gp-json-key{color:red}.GPimportMapBoxSourceVisibilityInput{display:block!important}[id^=GPimportPanelReturnPicto-]{background-position:0 0;border-radius:3px;cursor:pointer;height:26px;opacity:1;position:absolute;width:26px}.GPlayerSwitcher_layer{background-color:#fff}div[id^=GPlayerSwitcher-]{height:32px}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{width:190px}button[id^=GPshowLayersListPicto]{background-image:url(data:image/png;base64,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ZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDoyYjNmZWFlMS1hNzM0LTQ0NjItOTM3ZS1jYmEzM2JiMTY1NGQiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NGQ1NTRhMTgtNjk3NC00NDMyLTk5OTEtMjk5YzU1OTY4NWQ2IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NTA1ZjQ3ZGEtMzNjMy00YjRkLWE3ZWQtODEyMDVkOWRjNTk2IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEwOTM3NTE5MDA3NTY1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6N2Y1MGZlNjEtODdkYS00OWM2LWI5MjQtYTJlMmFmNjM0MmQyIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wMy0yMFQxMzoyNToxOSswMTowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5OxzFdAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AMUDBkTuLyY9QAAAhxJREFUaN7t2bFrFEEUx/GYxiBIYneFNmKZ2uJOCDHY6V8g5m9IZ6UGK1trsbawEQJiISHgYSFKwMrCQpGgNiYYFAOSj4VzYV02d7N3M3dR98GxMDcz7/t+7+3u8HZqqrHGGvvXDPNo/a/BT2MTu2jndjaHuQkH/AcDlv22d5jJ5fQkruMLvuIOTo058CqGFt4HAa7mdlq2sQgxgOFHuL7GdG6nXVxEG2u5hYhgeFIY/5aEoZ/TirlZhIhlwN3w3+eRGeoEnkuImuKfDeX/M7wCh2fACnYKi9+iM0TmOmFtz3awErm2FgMehnn3RmYYJfupqqBm9s9jH99xJlklDiNE6udADAOehfHbSRlwvAZEX6e9vYYQYBDDzcKD71IShnDfrFVsMItb2C44eRp+PdsOc2YrwLtYysAAb5Ix4EIpqDJEVTZi5nRxJVKAGIZH/Q5iozLEQPSycZja9Z3GM5zGxzD2ICfDQCGyOB3MsBeuL3AsKUMhs4+xUBhfxEbFvVa+JzewWFi3EPY6yNKIDM8LvnaTM1QcQtZLEOVsVKodnK4nOggdMOB+GPuUjaFPOS1VVERZ7U7Go/CrcNzdw7ncDFFCJHcax7A1ToZe12W1qiwPKbPV1J0iXA7770+KYWINkdDnexn83Jh0U2bsLTFcCwF+wImj0pYbS1MUM6HBCctHsTGbW+R2eN9vJu3z/WUitDDffPJprLHk9gs8Px9eX9iakAAAAABJRU5ErkJggg==);background-position:-2px;background-repeat:no-repeat}button[id^=GPshowLayersListPicto][aria-pressed=true]{background-position:-35px;border-top-left-radius:0;border-top-right-radius:0}.GPpanelBody{max-height:200px;overflow:auto}button[id^=GPlayerInfoClose]{background-color:unset;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAgCAYAAAAFQMh/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGUSURBVEiJ7ZQxT8JQEMf/hxOsDg6GOGtiYgyy0I4Ormj8BBqpZW9HFhNxRKom8AU0tHFRRx1KYlwcQIkrzM4mGnoOtlJKsa/q2N/4ernfu97dAxISEhJ+CYkEyZq1y8w5O9NRUKk44VFMsm7VHIdf2kdb9aicM0JS8BkIuezH3PxgfekKd3cclEqaeQxQmYg2soXt10H74uGnvKkoMROveHFE2JHelusAkz9C0iwDINU9IErRYlTeyIr79vnNgtybBZB3j9ayhZ5b+S3cSvd9F2nY6a46+VfGEeqx1z9mlL9PmJqE4TsoFZSWps9BbHG4PPBdWBpT7Mkva8zOmJzZabYzT3uiUkBguCbUPAy5LMUsQGC4fEpvZdTgFyJanb5qfxKHSbkB4B6g/JccseQC4nCpne6W+gfKtX/V4sgjeyPppgGGb2VwaleLKkA8uphlAFB8WU/sw82JlviJHC4CHgG408oNO90pj6QAQGxXiyoRvPeZwfQclVcIWWspkm4a409lECZJNw1ZaynTYxISEhL+gU/lu7XSwAzyjAAAAABJRU5ErkJggg==);background-position:-2px;background-repeat:no-repeat}button[id^=GPlayersPanelClose]{background-image:url(data:image/png;base64,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TUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDplZWM2OTBlMi05NGExLTRkOGItYTM4Yy02MjI3ZWFhNmVlMjQiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6YmQ3ZTNjMTUtMzcwNy00MDZjLTgxNTYtZjUxZGM0NDFlYjMxIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MTVhNTdhOTYtMDdjYi00NTVjLTgwODUtY2IzMjFlZTdhNDc2IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzE2MjkwMzk5OTk1NTI1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NGM2Y2U2YjItNDVmYS00Y2U0LWExODItMzNhZmUxNmZhNDc3IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNS0yMVQxMzoxOTo1OSswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4dtuOqAAAABmJLR0QA8gDyAPIuRIzMAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH6AUVCxM7RVVcxQAAAPJJREFUSMftlUEKwjAQAJPiE3yH+Ii81IvgG/IFBRPRWkwLib10exQVhawHLRRbU8QEPGSOmyXDJrsJIZFIJBISsS9nuYEtXy5Hn3I4x+SgYS2zcuFNaq1FRMTc1Gmf/CmtBL7wIlcaJLZQGjacY9KWKg2btxz5s7g5wvbGTeXvlT7XYOe6Ei9ypSsZTOqSB5cOyXMD6bfS5Hs90m6M0mCz3NdIfQ0XXJob2HVjHuWukXGN2t8+IIPNdbrcVohICCGkONZpAXrKGLXNOmPUFtl4okwtmtj5et/6ea+zcq40yHalfVeiNEiRlfP4rUYikaA8AMekzozLtupbAAAAAElFTkSuQmCC);background-position:-2px;background-repeat:no-repeat}.GPpanelIcon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48ZyBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMiIgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBkPSJNMTUuMTkzIDUuNDQ4IDguMSA5LjQ0IDEuMDA5IDUuNDQ4IDguMSAxLjQ1NHpNMS42NTUgMTAuMDc1bC0uODQ3LjQ3OCA3LjA5MSAzLjk5MyA3LjA5Mi0zLjk5My0uODQ4LS40NzgiLz48cGF0aCBkPSJNMS42NTUgNy41MjIuODA4IDhsNy4wOTEgMy45OTRMMTQuOTkxIDhsLS44NDgtLjQ3OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTZ2MTZIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:auto auto}[id^=GPlayerInfoPanel]{right:190px}div[id^=GPlayerInfoTitle]{border-bottom:1px solid #366291;color:#366291}.GPlayerAdvancedTools,.GPlayerBasicTools{height:28px;position:relative;width:100%}.GPlayerExtent,.GPlayerInfo,.GPlayerInfoOpened,.GPlayerRemove,.GPlayerVisibility{cursor:pointer;height:28px;width:28px}.GPlayerExtent,.GPlayerInfo,.GPlayerInfoOpened,.GPlayerName,.GPlayerOpacity,.GPlayerOpacityValue,.GPlayerRemove,.GPlayerVisibility{position:absolute;top:0}.GPghostLayer{opacity:0}.GPlayerBasicTools{background-color:#fff}.GPlayerExtent,.GPlayerInfo,.GPlayerInfoOpened,.GPlayerRemove,.GPlayerVisibility,.GPshowLayerAdvancedTools{background-image:url(data:image/png;base64,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)}.GPlayerOpacity input[type=range]::-webkit-slider-runnable-track{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAECAYAAAAZDrhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAwSURBVDiNY/z379//v3//Mvz9+5fh379/DITYxKobKWYxMYwCisBoAFIIRgOQQgAADrTuhXfc36kAAAAASUVORK5CYII=)}.GPlayerOpacity input[type=range]::-moz-range-track{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAECAYAAAAZDrhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAwSURBVDiNY/z379//v3//Mvz9+5fh379/DITYxKobKWYxMYwCisBoAFIIRgOQQgAADrTuhXfc36kAAAAASUVORK5CYII=)}.GPlayerOpacity input[type=range]::-ms-track{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAECAYAAAAZDrhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAwSURBVDiNY/z379//v3//Mvz9+5fh379/DITYxKobKWYxMYwCisBoAFIIRgOQQgAADrTuhXfc36kAAAAASUVORK5CYII=)}div[id^=GPlayerInfoQuicklook]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJTSURBVEiJ7ZZdSJNRGMd/59Vo9m6jQYKWRV/MQYGBXSStC2/S27YmXYfQZRexZiBhdNE2ke68qq5rY3rRjRFE1Du0KKIcwQYtaGpCH+r01ZrsPV2lc853c0IE+r87z3P+Px7OOc85B7adROFgcHDQAbRWYtR1fdTv9+vF8do1dCFanE7nU6vVagpbWFgglUq1A89NgQB2ux2Hw2EKVBRl45ypswqtq7BYM/oyD8emSE7rgMTVaKPTtac64E99mZtDKRZzeZobVABef55lPDPH6b2W+k0DH72aYjGX51rnEU4csAGQmJhnYCTNmx/qFSBa7DFdw+RXneYGdQUGcLLJxvF6C78M5VQpT5lNkebpzQJdjTaS0zqJifmVWGJynk/fflNXa7wr5Vm3htlsFsMwADjvtDCeEQyMpDm2bzcA6e85LLWwvy434vNFaqLRrnyhf03r9ff3q6qqthXGJhct9W9nrN1LeaUFoK7GeH/YujScmLWGhRCRl5YPl+nrM0oCNyN3INYL3AbxQAtd6AYhAWqqBX6JR14cOndpF8irB90f7Zl45AlssfW0oKdXIu8qQslshbOjba+SneIOxFavGSG6tKAn6u4ZCiBlsHCeFvKu85sd7AkgKg2ZAdCCnpCU3CtXodmNPaqFvF0rVfcMtyINbzlgRa139nrsDDL/DHCAzAL3twQE2kHYQWalFB1ayNuN4FbVwHjYewfkDSlFRzzsHXP3xI6C8rjU3LLv8l9poYurOywJguGjxCn5pz+HNncgFtkoVw2wCfBVUtWO/nP9AYuuwXn+Xm/WAAAAAElFTkSuQmCC)}div[id^=GPlayerInfoClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAgCAYAAAAFQMh/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGUSURBVEiJ7ZQxT8JQEMf/hxOsDg6GOGtiYgyy0I4Ormj8BBqpZW9HFhNxRKom8AU0tHFRRx1KYlwcQIkrzM4mGnoOtlJKsa/q2N/4ernfu97dAxISEhJ+CYkEyZq1y8w5O9NRUKk44VFMsm7VHIdf2kdb9aicM0JS8BkIuezH3PxgfekKd3cclEqaeQxQmYg2soXt10H74uGnvKkoMROveHFE2JHelusAkz9C0iwDINU9IErRYlTeyIr79vnNgtybBZB3j9ayhZ5b+S3cSvd9F2nY6a46+VfGEeqx1z9mlL9PmJqE4TsoFZSWps9BbHG4PPBdWBpT7Mkva8zOmJzZabYzT3uiUkBguCbUPAy5LMUsQGC4fEpvZdTgFyJanb5qfxKHSbkB4B6g/JccseQC4nCpne6W+gfKtX/V4sgjeyPppgGGb2VwaleLKkA8uphlAFB8WU/sw82JlviJHC4CHgG408oNO90pj6QAQGxXiyoRvPeZwfQclVcIWWspkm4a409lECZJNw1ZaynTYxISEhL+gU/lu7XSwAzyjAAAAABJRU5ErkJggg==)}.GPlayerInfoLink,.GPlayerInfoPopup{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJTSURBVEiJ7ZZdSJNRGMd/59Vo9m6jQYKWRV/MQYGBXSStC2/S27YmXYfQZRexZiBhdNE2ke68qq5rY3rRjRFE1Du0KKIcwQYtaGpCH+r01ZrsPV2lc853c0IE+r87z3P+Px7OOc85B7adROFgcHDQAbRWYtR1fdTv9+vF8do1dCFanE7nU6vVagpbWFgglUq1A89NgQB2ux2Hw2EKVBRl45ypswqtq7BYM/oyD8emSE7rgMTVaKPTtac64E99mZtDKRZzeZobVABef55lPDPH6b2W+k0DH72aYjGX51rnEU4csAGQmJhnYCTNmx/qFSBa7DFdw+RXneYGdQUGcLLJxvF6C78M5VQpT5lNkebpzQJdjTaS0zqJifmVWGJynk/fflNXa7wr5Vm3htlsFsMwADjvtDCeEQyMpDm2bzcA6e85LLWwvy434vNFaqLRrnyhf03r9ff3q6qqthXGJhct9W9nrN1LeaUFoK7GeH/YujScmLWGhRCRl5YPl+nrM0oCNyN3INYL3AbxQAtd6AYhAWqqBX6JR14cOndpF8irB90f7Zl45AlssfW0oKdXIu8qQslshbOjba+SneIOxFavGSG6tKAn6u4ZCiBlsHCeFvKu85sd7AkgKg2ZAdCCnpCU3CtXodmNPaqFvF0rVfcMtyINbzlgRa139nrsDDL/DHCAzAL3twQE2kHYQWalFB1ayNuN4FbVwHjYewfkDSlFRzzsHXP3xI6C8rjU3LLv8l9poYurOywJguGjxCn5pz+HNncgFtkoVw2wCfBVUtWO/nP9AYuuwXn+Xm/WAAAAAElFTkSuQmCC)}button[id^=GPinfo_ID_],button[id^=GPremove_ID_],button[id^=GPvisibilityPicto_ID_]{background-color:transparent;border:none}button[id^=GPvisibilityPicto_ID_][aria-pressed=false]{background-position:-28px 0;left:0}button[id^=GPvisibilityPicto_ID_][aria-pressed=true]{background-position:0 0}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{max-height:28px}.GPshowLayerAdvancedTools{background-position:-112px 0;right:0;top:0}.GPlayerInfo{background-position:-55px 0;left:0}.GPlayerInfoOpened{background-position:-83px 0;left:0}.GPlayerOpacity{height:28px;left:28px;padding-left:8px;width:calc(100% - 100px)}.GPlayerOpacityValue{cursor:default;font-size:10px;font-style:italic;left:calc(100% - 60px);line-height:28px;width:32px}.GPlayerRemove{background-position:-140px 0;right:0}.GPlayerOpacity input{-webkit-appearance:none;-moz-appearance:none;background:none;cursor:pointer;display:block;height:100%;margin:0;overflow:hidden;padding:0;width:100%}.GPlayerOpacity input[type=range]:focus{box-shadow:none;outline:none}.GPlayerOpacity input[type=range]::-webkit-slider-runnable-track{-webkit-appearance:none;height:3px}.GPlayerOpacity input[type=range]::-webkit-slider-thumb:before{height:3px;left:-200px;pointer-events:none;position:absolute;right:50%;top:0}.GPlayerOpacity input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background-color:#505050;border:2px solid #fff;height:17px;position:relative;top:-7px;width:9px}.GPlayerOpacity input[type=range]::-moz-range-track{height:3px;width:80px}.GPlayerOpacity input[type=range]::-moz-range-thumb{background-color:#505050;border:2px solid #fff;border-radius:0;box-shadow:0;height:13px;position:relative;width:5px}.GPlayerOpacity input[type=range]::-ms-track{border:0;border-color:transparent;border-radius:0;border-width:0;color:transparent;height:3px;width:80px}.GPlayerOpacity input[type=range]::-ms-fill-lower,.GPlayerOpacity input[type=range]::-ms-fill-upper{background:transparent;border-radius:0}.GPlayerOpacity input[type=range]::-ms-thumb{background-color:#505050;border:2px solid #fff;height:13px;width:5px}.GPlayerOpacity input[type=range]::-ms-tooltip{display:none}[id^=GPlayerInfoPanel]{overflow-y:hidden;padding-bottom:10px;padding-top:10px;position:absolute;top:0}.GPlayerInfoPanelOpened{display:block}.GPlayerInfoPanelClosed{display:none}div[id^=GPlayerInfoTitle]{font-size:1.1em;font-weight:700;margin:auto auto 10px;padding-bottom:5px;text-align:center;width:calc(100% - 52px)}div[id^=GPlayerInfoQuicklook]{cursor:pointer;height:20px;left:10px;position:absolute;top:-2px;width:20px}div[id^=GPlayerInfoClose]{cursor:pointer;height:28px;position:absolute;right:10px;top:-8px;width:28px}div[id^=GPlayerInfoDescription]{font-size:.9em}.GPlayerInfoSubtitle{font-weight:700;margin-bottom:4px;margin-top:10px;padding-left:35px}.GPlayerInfoLink,.GPlayerInfoPopup{background-repeat:no-repeat;color:#999;cursor:pointer;line-height:20px;overflow-x:hidden;padding-left:23px;text-overflow:ellipsis;white-space:nowrap}.GPlayerInfoLink{background-position:0 -20px}.GPlayerInfoLink:hover,.GPlayerInfoPopup:hover{color:#333}.GPlayerInfoLink a,.GPlayerInfoLink a:visited + */#GPmapLoading{display:none;height:50px;left:50%;margin-left:-25px;margin-top:-25px;position:absolute;top:50%;width:50px;z-index:50}#GPmapLoading.GPmapLoadingVisible{display:block}#GPmapLoading{background-image:url(data:image/gif;base64,R0lGODlhNAA0AIQSAAFkpSZ5sAGV3k2Ruiao3kOj1/GUBk225pe/B4S83XrK75HH3qrS5szMzNbW1sHe797e3ubm5v///////////////////////////////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAQAfACwAAAAANAA0AAAF5uAnjmRpnmiqrmzrvnAsz3T9FXhh72Ke8zWfDzgT/ogxIw55cjgiJ6XOhKjaII1sNio8Vb8ImnbMXVLBVhl2vI2hvzIHOwt9veGxyLwhu4dlcw59bzVjgjNoPHU2f0yOj5CRkpMocg2HjwaaBitzmZuaKWuGTKCgKHt8SKabqHulrJwno1qYQLGyJ56OrCuWtrChlMPExcbHH4s1ymK1NJZtM4Fxu3mvMXvMLdBj2ip60zG0WoBzENLVJL+66TDj7GQmbOc1EE9N4SURDvSRqcgj/gH8wC0LsGPtAK7pN7Chw4cQSYQAACH5BAUBAB8ALBYABAAaACcAAAVw4PdBTQOJaKquX+k2bJw6b+nIcu3isV7yLFrttioYczWWcVmICYkq5hKolB6pKOsUm9Vyu9JvKiyOls/otHqNQ7gR6ff7LJeX63Mx3n3f0+txeWyDhIVlBmsGiopoi45njo9fkZKTlIhil42RaYsxIQAh+QQFAQAfACwWAAkAGgAnAAAFdOAnjmQZOVCprmTjuikrf289y/Ub32SUuw6e6teICEuO31GVfC1Zxqd0Sq1arYVsAavNUrvdKVgrHm+l5jMazPVe3/C4/IN4I+73Kn5P3fOffn+AgXUqBocGK4QriIiKfoaNjip4LJKTT5eHU5qJnJJWjVUhACH5BAUBAB8ALAkAFgAnABoAAAV04CeOZGmepdM0Duq+5yo3cO2qcwPZPJnLveBvFezhZrsi76cM4lrNqHRKrVpPhmoBZuh2o4VwGOUtK8VoU9lcRKdJazbP/R7Fv236tnQ/If4IJ3pYa36Af4JuLl6Gh4gmYlKOgFclk4+VIpeBmSOTnZaUTSEAIfkEBQEAHwAsBAAWACcAGgAABXfg9xmkIZ5oqq5rWbJwnLqubLP0e+9nTvJAnwnIyxGJtaNyyWw6n1Ao4hmRIa7XpaPBbbCw4OO2y1WBw0Ryt4o6o3cRNdeRcmfTcojZvSr4CytyXntvKH9/gWR6X3cph4crEQ6LSo+IUYaWgJgnmpucIpagjpc3IQAh+QQFAQAfACwEAAkAGgAnAAAFb+AnjqJhkmiamqyhvmjLwrA806p946Tu8isbMNca1ozIpHLJTCKeiCYUupxOlVaqMxvdZqtWqbZJLpvPyEK5wGYz23AlPJ6c0412t9yucjQaDi98KX+FDTBtfYZ/gUmLhUqPf0p+i42Oi00QfxAiIQAh+QQFAQAfACwEAAQAGgAnAAAFc+AnjmRZGqhhrmyasrDounE7o/V64yvi6zuTb4gA0oTEn+lYSg5zSGcROpJOqVUntknc9rzgsHhMLhXOhTEaHV6vwW62N36G09tutbzM7/v/JhFlDYQNDmKFhYdeEYmFYA6OhIJbEJINYZdhlolkEA6UUCEAIfkEAQEAHwAsBAAEACcAGgAABXXgJ45kWSIoYq5sS6apK8swPN9mHeP8p6O9UmG4+qlMhmRryCwUa6uk1LBqMp9A5FQptBKDW2nX6+SFxSRyuXemjpvBz5lljYu2srX9vu/7/4CBgh8NhQ6DK4WKDYgkEIuGjSKQipKElIySj5CHlpSWIw6RoCEAOw==)}.GPwidget{color:#333;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:13px;pointer-events:auto;position:absolute}.GPwidget input[type=button],.GPwidget input[type=text]{-webkit-appearance:none;appearance:none;color:#333}.GPwidget input[type=checkbox]{display:none}.GPwidget select{border-radius:3px;padding-left:3px}.GPwidget form{margin-bottom:0}.GPwidget *{background-repeat:no-repeat;box-sizing:border-box}:root{--size-per-row:32px}#position-container-bottom-left,#position-container-bottom-right,#position-container-top-left,#position-container-top-right{border-style:solid;display:flex;flex-direction:column;justify-content:center;min-height:var(--size-per-row);position:absolute;width:var(--size-per-row)}#position-container-top-left,#position-container-top-right{top:0}#position-container-top-left{float:left;left:0}#position-container-top-right{float:right;right:0}#position-container-bottom-left,#position-container-bottom-right{bottom:0}#position-container-bottom-right{float:right;right:0}#position-container-bottom-left{float:left;left:0}.GPpanel{background-color:#fff;border:unset;border-radius:4px;box-shadow:0 0 6px #000;padding:unset}.GPpanelHeader{background-color:#9db1bd;border-top-left-radius:4px;border-top-right-radius:4px;height:32px;padding:3px;position:relative;width:100%}.GPpanelTitle{background-color:#366291;border-top-left-radius:2px;border-top-right-radius:2px;color:#fff;font-weight:700;height:100%;line-height:26px;text-align:center;width:100%}.GPpanelClose,.GPpanelIcon,.GPpanelInfo,.GPpanelReduce,.GPresetPicto,.GPreturnPicto{background-color:#366291;border:none;cursor:pointer;height:26px;position:absolute;width:26px}.GPpanelClose{background-position:-27px 0;right:3px;top:3px}.GPpanelInfo,.GPreturnPicto{left:3px;top:3px}.GPpanelReduce{right:32px;top:3px}.GPresetPicto,.GPreturnPicto{border-radius:3px;opacity:1}.GPshowAdvancedToolPicto{background-color:hsla(0,0%,100%,.4);border:2px solid hsla(0,0%,100%,.4);border-radius:4px;box-sizing:border-box;cursor:pointer;height:32px;padding:2px;position:relative;width:32px}.GPshowAdvancedToolPicto:hover{background-color:hsla(0,0%,100%,.6)}.GPshowAdvancedToolOpen{background-color:rgba(0,60,136,.5);border-radius:2px;box-sizing:border-box;display:block;height:26px;position:absolute;width:26px}.GPshowAdvancedToolPicto:hover .GPshowAdvancedToolOpen{background-color:rgba(0,60,136,.7)}.GPshowOpen{background-color:rgba(0,60,136,.5)}.GPshowOpen:hover{background-color:rgba(0,60,136,.7)}.GPwaitingContainer{background-color:hsla(0,0%,100%,.9);border-radius:4px;bottom:0;font-size:1.5em;font-weight:700;left:0;overflow:hidden;position:absolute;right:0;top:32px}.GPwaitingContainerVisible{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex}.GPwaitingContainerHidden{display:none}.GPwaitingContainerInfo{margin:auto}.GPflexInput{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;transition:max-height .3s ease-out,opacity .3s ease-out}.GPflexInput>*{border:1px solid #999;border-radius:0;display:block;height:28px;line-height:26px}.GPflexInput :not(:last-child){border-right:none}.GPflexInput :first-child{border-radius:3px 0 0 3px}.GPflexInput :last-child{border-radius:0 3px 3px 0}.GPflexInput>:not(input){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.GPflexInput>input{min-width:0;padding:0 5px}.GPflexInput>input,.GPflexInput>select{-webkit-flex:1;-webkit-box-flex:1;-ms-flex:1;flex:1}.GPflexInput>select{padding-right:7px}.GPflexInput>label{background-color:#f2f2f2;color:#666;cursor:pointer;padding-left:7px;padding-right:9px}input.GPsubmit{background:none;background-color:#366291;border:none;border-radius:3px;color:#fff;cursor:pointer;display:block;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-weight:700;height:28px;line-height:26px;margin:auto;opacity:.8;padding:0;transition:opacity .2s ease-out;width:80px}input.GPsubmit:hover{opacity:1}.GPselect{border:1px solid #999;color:#333;cursor:pointer;display:block;height:28px;line-height:26px;margin:auto}.GPform{padding:15px}.GPelementHidden,.GPelementInvisible{display:none;opacity:0;visibility:hidden}.GPelementShow,.GPelementVisible{display:block;opacity:100%;visibility:visible}.GPadvancedAutoCompleteList,.GPautoCompleteList{z-index:2}.GPadvancedAutoCompleteList{border-top:none;font-size:.9em;width:calc(100% - 28px)}.GPautoCompleteProposal{color:#5e5e5e;cursor:pointer;font-size:1em;height:28px;line-height:16px;margin-bottom:0;overflow:hidden;padding:6px 10px;text-overflow:ellipsis;white-space:nowrap;width:100%}.GPautoCompleteProposal:hover{background-color:#cedbef;color:#000}.GPshowMoreOptionsImage{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAA7ElEQVRIx+3UvUoDQRSG4ffMLhbaLIEFvQSxtN1ALiGymkswpZVoupS6Vt6BYBMWf+s0Kaa1FG9BEBYbDQRnj4UKqTRgtjtPeWaYb4YPBowxpmmyyKbs6PpJVCfVan3wOOzN5te2huVK692dq0jHn+abf53lFrqWMlKRfjKNxu1Bmf6M24MyTabRWEX6KKOlvRAgO77ZQ/UCqBDXdSqzmnAPbKDs+yK/XGrgV+jtNlrfAcn36BVxXX+y89BYh+kbrQ+JrgBiDbsva1SNdhhigi/yzBd5FmKCdfivQIDOYbk+3+HkrPds35kx5lef+y50/JHC/FoAAAAASUVORK5CYII=)}.GPshowMoreOptions{cursor:pointer;display:block;height:28px;position:absolute;transition:all .5s ease-out 0s;width:28px}button[aria-pressed=true].GPshowMoreOptions,input[type=checkbox]:checked+.GPshowMoreOptions{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.gp-feature-info-div{background-color:#fff;border-radius:10px;bottom:17px;box-shadow:0 0 5px #000;color:#002a50;font-family:Open Sans,sans-serif;font-size:.75em;max-width:calc(100vw - 80px);padding:10px;position:relative}.gp-feature-info-div:before{border-left:14px solid transparent;border-right:14px solid transparent;border-top:15px solid #fff;bottom:-15px;content:"";left:50%;margin-left:-14px;position:absolute}.gp-feature-info-div .closer{background-color:#fff;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwYjc5OCIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:14px 14px;border:none;border-bottom-right-radius:10px;border-top-right-radius:10px;cursor:pointer;display:block;height:30px;position:absolute;right:0;top:0;width:30px}.gp-features-content-div{max-height:340px;max-width:420px;min-width:260px;overflow:auto}.gp-features-content-div h5,.gp-features-content-div h6,.gp-features-content-div p,.gp-features-content-div ul{margin:0}.gp-features-content-div ul{list-style-type:none;padding:0}.geoportail-popup-content h5,.geoportail-popup-content h6,.geoportail-popup-content p,.gp-att-description-div,.gp-att-name-div,.gp-att-others-div{padding:0 10px}.geoportail-popup-content h5:not(:last-child),.geoportail-popup-content h6:not(:last-child),.geoportail-popup-content p:not(:last-child),.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){margin-bottom:15px}.geoportail-popup-content h5:last-child,.geoportail-popup-content h6:last-child,.geoportail-popup-content p:last-child,.gp-att-description-div:last-child,.gp-att-name-div,.gp-att-others-div:last-child{margin-bottom:10px}.geoportail-popup-content h5:first-child,.geoportail-popup-content h6:first-child,.geoportail-popup-content p:first-child,.gp-att-description-div:first-child,.gp-att-name-div:first-child,.gp-att-others-div:first-child{margin-top:10px}.gp-att-name-div,.gp-features-content-div h5{color:#0b6ba7;font-size:1.2em;font-weight:700;padding-right:35px;text-transform:uppercase}.gp-features-content-div h6{font-size:1.1em}.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){border-bottom:1px dotted #666;padding-bottom:10px}.gpf-radio-btn-group{display:flex;gap:1em}.gpf-btn-icon{caret-color:transparent}[id^=GPdrawingPanel-]{width:240px}.GPshowDrawingPicto{background-position:1px;background-repeat:no-repeat}.GPdrawingPanelClose,.GPshowDrawingPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGCSURBVFiF7da/Sh1BFMfxuXZa2AuWgkoa0SqP4StoUoi2PklyBZXUNlpZWGmq5AmiYghpAv5pAoKW+rFwFq/D3NXdu5fb7K9ahjPnd757Zs9OCK1atWrVlDCHvzjB5KjrGVg49aKfdaHwGdsYK4np4As26lf8diF7XqsyVIR5iPt3c1AR5muMeWwUCrM4wwEmcZhAHVfM1032b6GTwGwlMd0mYS57Eh9loP5UzFkcpV7tYizpTKGdXBebgEmh9vALczVy94NKuzd0mEL7DXjkoEYCA+cDG4VSqOywyKk0CLMhhO8hhKmSsOsQwvL7y35TnXeuVRMm8Bu3JZ25UuOb6eOXGwC1utTPYBXfsIT/GYMbfBgizE5mrT6U5+vMYnz+mHTqCvNDhinGdnakVzWZxj1metYKqMZgYt7h/1ixGTf+wwwWPB+/iyZhotcnL1ef7GhOOvWI9aomP3rexl08fisYb4zktd9a7FTfaRahulirY3AZoTYxPVC1rVq1ajVKPQEmCKhvk/LblAAAAABJRU5ErkJggg==)}.GPdrawingCoords,.GPdrawingLabel{display:inline-block;line-height:20px}.GPdrawingLabel{font-weight:700;width:80px}.GPdrawingCoords{width:110px}.marker-input-radio{display:none}input.marker-input-radio:checked+label{border:1px solid red}.drawing-tool{background-color:#e9edf0;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MjAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA3MjAgNDAiPjxkZWZzPjxjbGlwUGF0aCBpZD0iYiI+PHBhdGggZD0iTTAgODk2aDg5NlYwSDBaIi8+PC9jbGlwUGF0aD48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGQ9Ik0wIDg5Nmg4OTZWMEgwWiIvPjwvY2xpcFBhdGg+PC9kZWZzPjxwYXRoIGQ9Im04Ny40MyAzMi41MjYgNS0xNSAxNSAxMCA1LTIwIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDBiNzk4O3N0cm9rZS13aWR0aDoyIi8+PHBhdGggZD0iTTg1Ljk0MiAzMC4wNjJ2NGg0di00em00LjgyMy0xNC4xMTZ2NGg0di00em0xNC41MjUgOS4xNzJ2NGg0di00em00Ljc3LTE5LjE4djRoNHYtNHoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNlOWVkZjA7c3Ryb2tlLXdpZHRoOjEuNSIvPjxwYXRoIGQ9Im0xMjcuNDMgMzIuNTI2IDUtMTUgMTUgMTAgNS0yMCIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZmZjtzdHJva2Utd2lkdGg6MiIvPjxwYXRoIGQ9Ik0xMjUuOTQgMzAuMDYydjRoNHYtNHptNC44My0xNC4xMTZ2NGg0di00em0xNC41MiA5LjE3MnY0aDR2LTR6bTQuNzctMTkuMTh2NGg0di00eiIgc3R5bGU9ImZpbGw6I2ZmZjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMmE1MDtzdHJva2Utd2lkdGg6MS41Ii8+PGcgc3R5bGU9ImZpbGw6IzAwYjc5ODtmaWxsLXJ1bGU6ZXZlbm9kZCI+PHBhdGggZD0ibTE2OC4zMSAyOS45MzggMy0xOS44NzUgMTQuNzUtMyA1IDI1Ljg3NXoiIHN0eWxlPSJmaWxsLW9wYWNpdHk6LjQ7c3Ryb2tlOiMwMGI3OTg7c3Ryb2tlLXdpZHRoOjIiLz48cGF0aCBkPSJNMTgzLjk0IDUuMDYzdjRoNHYtNHptLTE0Ljc1IDMuMjV2NGg0di00em0tMi44OCAxOS42MjV2NGg0di00em0yMy4zOCAzdjRoNHYtNHoiIHN0eWxlPSJzdHJva2U6I2U5ZWRmMDtzdHJva2Utd2lkdGg6MS41Ii8+PC9nPjxnIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQiPjxwYXRoIGQ9Im0yMDguMzEgMjkuOTM4IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbC1vcGFjaXR5Oi40O3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDoyIi8+PHBhdGggZD0iTTIyMy45NCA1LjA2M3Y0aDR2LTR6bS0xNC43NSAzLjI1djRoNHYtNHptLTIuODggMTkuNjI1djRoNHYtNHptMjMuMzggM3Y0aDR2LTR6IiBzdHlsZT0ic3Ryb2tlOiMwMDJhNTA7c3Ryb2tlLXdpZHRoOjEuNSIvPjwvZz48cGF0aCBkPSJtMjYxLjgxIDMwLjc0LTEuNTUzLTUuMDk4aC03LjgwN2wtMS41NTMgNS4wOThoLTQuODkzbDcuNTYtMjEuNTA0aDUuNTVsNy41OSAyMS41MDR6bS0yLjYzNy04LjkwNnEtMi4xNTMtNi45My0yLjQzLTcuODM3LS4yNjUtLjkwOC0uMzgyLTEuNDM2LS40ODMgMS44NzYtMi43NjggOS4yNzR6IiBzdHlsZT0iZmlsbDojMDBiNzk4Ii8+PGcgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwYjc5OCI+PHBhdGggZD0iTTI3MS41IDMxLjA0di0yMiIvPjxwYXRoIGQ9Ik0yNjkgOC41Nmg1bS01IDIyLjg4aDUiIHN0eWxlPSJzdHJva2Utd2lkdGg6MS4xMTgwMDAwMyIvPjwvZz48dGV4dCB4PSIyODYiIHk9IjMwLjc1MiIgZm9udC1zaXplPSIxMi41IiBsZXR0ZXItc3BhY2luZz0iMCIgc3R5bGU9ImZvbnQtc2l6ZToxMi41cHg7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzowO3dvcmQtc3BhY2luZzowO2ZpbGw6I2ZmZiIgd29yZC1zcGFjaW5nPSIwIj4KICAgIDx0c3BhbiB4PSIyODYiIHk9IjMwLjc1MiIgZm9udC1zaXplPSIzMCIgZm9udC13ZWlnaHQ9ImJvbGQiIHN0eWxlPSJmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjMwcHg7Zm9udC1mYW1pbHk6JnF1b3Q7T3BlbiBTYW5zJnF1b3Q7Ij5BPC90c3Bhbj4KICA8L3RleHQ+PGcgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZmZiI+PHBhdGggZD0iTTMxMS41IDMxLjA0di0yMiIvPjxwYXRoIGQ9Ik0zMDkgOC41Nmg1bS01IDIyLjg4aDUiIHN0eWxlPSJzdHJva2Utd2lkdGg6MS4xMTgwMDAwMyIvPjwvZz48cGF0aCBkPSJtMzU2LjY0IDIxLjc4Mi0zLjQxNi0zLjQxNGExLjIxIDEuMjEgMCAwIDAtMS43MDggMGwtLjg1NC44NTRjLS40Ny40Ny0uNDcgMS4yMzUgMCAxLjcwNmwzLjQxNiAzLjQxNGExLjIxIDEuMjEgMCAwIDAgMS43MDggMGwuODU0LS44NTNhMS4yMDcgMS4yMDcgMCAwIDAgMC0xLjcwOG0tMTAuNzE0IDEwLjkzYy0uMDA1IDAtLjAxMi4wMS0uMDIuMDEzLS4wMDQgMC0uMDEuMDEtLjAxNC4wMS0uMDA1IDAtLjAxLjAxLS4wMTYuMDEtLjAwNSAwLS4wMS4wMS0uMDE3LjAxLS4yLjEyLS43ODMuNDI1LTIuMi45MzdxLS4yNDkuMDktLjUzNC4xOWwtMi4wMTQtMi4wMTNjLjA2Ni0uMTkuMTMtLjM3My4xOS0uNTQuNTEtMS40Mi44MTgtMi4wMDQuOTM2LTIuMjAyLjAwMyAwIC4wMDYtLjAxLjAwOC0uMDEzLjAwNC0uMDEuMDA4LS4wMTMuMDEyLS4wMi4wMDMgMCAuMDA2LS4wMS4wMDgtLjAxMnEuMDA4LS4wMTMuMDEzLS4wMmwuMTQ2LS4xNDcgMy42NSAzLjY0Ny0uMTUuMTV6bTMuODgyLTEwLjkzYTEuMjEgMS4yMSAwIDAgMC0xLjcwOCAwbC0uNDI3LjQyNy01Ljk3NyA1Ljk3M2guMDAybC0uMTkuMTg4cy0uNi42MDUtMS45NTYgNC45NzZxLS4wMTUuMDQ0LS4wMjguMDkyLS4wMzcuMTE3LS4wNzQuMjQtLjAzLjEwNi0uMDY2LjIxNmwtLjA1Ni4xODYtLjEzLjQ0Yy0uMDk4LjMzLS4zMzYgMS4wNzQtLjA2NyAxLjM0My4yNi4yNiAxLjAxNC4wMyAxLjM0My0uMDY2bC40MzctLjEzLjE5NC0uMDZxLjEwNC0uMDMuMjA1LS4wNjJsLjI1LS4wNzdxLjAzOC0uMDEzLjA3My0uMDIzYzQuMTY2LTEuMjk1IDQuOTE0LTEuOTAzIDQuOTc2LTEuOTZoLjAwNGwuMTkzLS4xOTIuMDEyLjAxMyA1Ljk3Ny01Ljk3NC40MjctLjQyN2ExLjIwNiAxLjIwNiAwIDAgMCAwLTEuNzA3bC0zLjQxNi0zLjQxNHoiIHN0eWxlPSJmaWxsOiMwMGI3OTgiLz48cGF0aCBkPSJtMzI5IDgtMiAydjE2bDIgMmgxMGw4LThWMTBsLTItMnoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQiLz48ZyBzdHlsZT0iZmlsbDojZmZmIj48cGF0aCBkPSJtMzk2LjY0IDIxLjc4Mi0zLjQxNi0zLjQxNGExLjIxIDEuMjEgMCAwIDAtMS43MDggMGwtLjg1NC44NTRjLS40Ny40Ny0uNDcgMS4yMzUgMCAxLjcwNmwzLjQxNiAzLjQxNGExLjIxIDEuMjEgMCAwIDAgMS43MDggMGwuODU0LS44NTNhMS4yMDcgMS4yMDcgMCAwIDAgMC0xLjcwOG0tMTAuNzE0IDEwLjkzYy0uMDA1IDAtLjAxMi4wMS0uMDIuMDEzLS4wMDQgMC0uMDEuMDEtLjAxNC4wMS0uMDA1IDAtLjAxLjAxLS4wMTYuMDEtLjAwNSAwLS4wMS4wMS0uMDE3LjAxLS4yLjEyLS43ODMuNDI1LTIuMi45MzdxLS4yNDkuMDktLjUzNC4xOWwtMi4wMTQtMi4wMTNjLjA2Ni0uMTkuMTMtLjM3My4xOS0uNTQuNTEtMS40Mi44MTgtMi4wMDQuOTM2LTIuMjAyLjAwMyAwIC4wMDYtLjAxLjAwOC0uMDEzLjAwNC0uMDEuMDA4LS4wMTMuMDEyLS4wMi4wMDMgMCAuMDA2LS4wMS4wMDgtLjAxMnEuMDA4LS4wMTMuMDEzLS4wMmwuMTQ2LS4xNDcgMy42NSAzLjY0Ny0uMTUuMTV6bTMuODgyLTEwLjkzYTEuMjEgMS4yMSAwIDAgMC0xLjcwOCAwbC0uNDI3LjQyNy01Ljk3NyA1Ljk3M2guMDAybC0uMTkuMTg4cy0uNi42MDUtMS45NTYgNC45NzZxLS4wMTUuMDQ0LS4wMjguMDkyLS4wMzcuMTE3LS4wNzQuMjQtLjAzLjEwNi0uMDY2LjIxNmwtLjA1Ni4xODYtLjEzLjQ0Yy0uMDk4LjMzLS4zMzYgMS4wNzQtLjA2NyAxLjM0My4yNi4yNiAxLjAxNC4wMyAxLjM0My0uMDY2bC40MzctLjEzLjE5NC0uMDZxLjEwNC0uMDMuMjA1LS4wNjJsLjI1LS4wNzdxLjAzOC0uMDEzLjA3My0uMDIzYzQuMTY2LTEuMjk1IDQuOTE0LTEuOTAzIDQuOTc2LTEuOTZoLjAwNGwuMTkzLS4xOTIuMDEyLjAxMyA1Ljk3Ny01Ljk3NC40MjctLjQyN2ExLjIwNiAxLjIwNiAwIDAgMCAwLTEuNzA3bC0zLjQxNi0zLjQxNHoiIHN0eWxlPSJzdHJva2U6I2VmZjtzdHJva2Utd2lkdGg6LjAzIi8+PHBhdGggZD0ibTM2OSA4LTIgMnYxNmwyIDJoMTBsOC04VjEwbC0yLTJ6bTkxLjUzIDE1Ljk3Yy0zLjE2IDEuNjMtMS4xNTcgNS41MzQtNC43NCA2LjgwMy0zLjc2MyAxLjMzNC02Ljg5Mi0zLjQ5Mi03LjY3Ni02Ljk2My0uMy0xLjMzMy0uOTItMTIuMzE0IDExLjEzOC0xNC41OTMgOS40MDctMS43NzggMTIuNjU3IDcuODU0IDEyLjcyIDEwLjg5LjA1OCAyLjg5LjM3IDkuMDQtNC40NCA4Ljk2Mi00LjA2LS4wNjYtMy4yMDMtNC4wNjQtNi44OC01LjAzOC0xLjk1Ni0uNTE4LS4xMjItLjA2Mi0uMTIyLS4wNjJ6IiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQiLz48L2c+PGVsbGlwc2UgY3g9IjQ1NC4xOSIgY3k9IjI0LjgxMiIgcng9IjIuNDM4IiByeT0iMi41IiBzdHlsZT0iZmlsbDojMDAyYTUwIi8+PGcgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMmE1MDtzdHJva2Utd2lkdGg6MS43MzU5OTk5NDtzdHJva2UtbGluZWNhcDpyb3VuZCI+PHBhdGggZD0ibTQ1Mi43OCAxOC41NCA0LjM0LTIuNjA0bS0zLjQ4Ljg3NCAyLjYwNC0xLjczNm0tMS43MzQgMy40NjYgMS43MzYtLjg2OE00NjEuNDcgMTcuMTNsNC4zNC0yLjYwNG0tMy40Ny44NjQgMi42MDQtMS43MzZtLTEuNzM0IDMuNDc2IDEuNzM2LS44NjhNNDY0LjkxIDIzLjIybDQuMzQtMi42MDRtLTMuNDguODY0IDIuNjA0LTEuNzM2bS0xLjczNCAzLjQ3NiAxLjczNi0uODY4Ii8+PC9nPjxwYXRoIGQ9Ik00MjAuNTMgMjMuOTdjLTMuMTYgMS42My0xLjE1NyA1LjUzNC00Ljc0IDYuODAzLTMuNzYzIDEuMzM0LTYuODkyLTMuNDkyLTcuNjc2LTYuOTYzLS4zLTEuMzMzLS45Mi0xMi4zMTQgMTEuMTM4LTE0LjU5MyA5LjQwNy0xLjc3OCAxMi42NTcgNy44NTQgMTIuNzIgMTAuODkuMDU4IDIuODkuMzcgOS4wNC00LjQ0IDguOTYyLTQuMDYtLjA2Ni0zLjIwMy00LjA2NC02Ljg4LTUuMDM4LTEuOTU2LS41MTgtLjEyMi0uMDYyLS4xMjItLjA2MnoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQiLz48ZWxsaXBzZSBjeD0iNDE0LjE5IiBjeT0iMjQuODEyIiByeD0iMi40MzgiIHJ5PSIyLjUiIHN0eWxlPSJmaWxsOiNlOWVkZjAiLz48ZyBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZWRlZmYwO3N0cm9rZS13aWR0aDoxLjczNTk5OTk0O3N0cm9rZS1saW5lY2FwOnJvdW5kIj48cGF0aCBkPSJtNDEyLjc4IDE4LjU0IDQuMzQtMi42MDRtLTMuNDguODc0IDIuNjA0LTEuNzM2bS0xLjczNCAzLjQ2NiAxLjczNi0uODY4TTQyMS40NyAxNy4xM2w0LjM0LTIuNjA0bS0zLjQ3Ljg2NCAyLjYwNC0xLjczNm0tMS43MzQgMy40NzYgMS43MzYtLjg2OE00MjQuOTEgMjMuMjJsNC4zNC0yLjYwNG0tMy40OC44NjQgMi42MDQtMS43MzZtLTEuNzM0IDMuNDc2IDEuNzM2LS44NjgiLz48L2c+PGcgY2xpcC1wYXRoPSJ1cmwoI2EpIiBzdHlsZT0iZmlsbDojMDBiNzk4IiB0cmFuc2Zvcm09Im1hdHJpeCguMDI5NzYgMCAwIC0uMDI5MDIgNi42NjcgMzMpIj48cGF0aCBkPSJNNDQ4IDQ0OGMtNjEuNzcyIDAtMTEyIDUwLjIzLTExMiAxMTJzNTAuMjI4IDExMiAxMTIgMTEyYzYxLjc3IDAgMTEyLTUwLjIzIDExMi0xMTJzLTUwLjIzLTExMi0xMTItMTEybTAgNDQ4Yy0xODUuMjggMC0zMzYtMTUwLjcyLTMzNi0zMzYgMC03MC41ODcgMjEuOTU4LTEzOC4zIDYzLjQyNC0xOTUuODlsOC44MTgtMTIuMzYgMjQxLjM2LTM0MC41NEM0MzAuODk4IDQuMTYgNDM5LjIxMiAwIDQ0OC4wMDIgMGEyOC4wMyAyOC4wMyAwIDAgMSAyMi4zOTQgMTEuMjFsMjM4LjM2IDMzNi40OSAxMS43NiAxNi4zYzQxLjUzIDU3LjY5NyA2My40OSAxMjUuNDEgNjMuNDkgMTk2IDAgMTg1LjI4LTE1MC43MiAzMzYtMzM2IDMzNiIvPjwvZz48ZyBjbGlwLXBhdGg9InVybCgjYikiIHN0eWxlPSJmaWxsOiNmZmYiIHRyYW5zZm9ybT0ibWF0cml4KC4wMjk3NiAwIDAgLS4wMjkwMiA0Ni42NjcgMzMpIj48cGF0aCBkPSJNNDQ4IDQ0OGMtNjEuNzcyIDAtMTEyIDUwLjIzLTExMiAxMTJzNTAuMjI4IDExMiAxMTIgMTEyYzYxLjc3IDAgMTEyLTUwLjIzIDExMi0xMTJzLTUwLjIzLTExMi0xMTItMTEybTAgNDQ4Yy0xODUuMjggMC0zMzYtMTUwLjcyLTMzNi0zMzYgMC03MC41ODcgMjEuOTU4LTEzOC4zIDYzLjQyNC0xOTUuODlsOC44MTgtMTIuMzYgMjQxLjM2LTM0MC41NEM0MzAuODk4IDQuMTYgNDM5LjIxMiAwIDQ0OC4wMDIgMGEyOC4wMyAyOC4wMyAwIDAgMSAyMi4zOTQgMTEuMjFsMjM4LjM2IDMzNi40OSAxMS43NiAxNi4zYzQxLjUzIDU3LjY5NyA2My40OSAxMjUuNDEgNjMuNDkgMTk2IDAgMTg1LjI4LTE1MC43MiAzMzYtMzM2IDMzNiIvPjwvZz48cGF0aCBkPSJtNjExLjkzIDExLjkzIDE2LjE0OCAxNi4xNDhtLS4wMDgtMTYuMTQ4LTE2LjE0OCAxNi4xNDgiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZmY7c3Ryb2tlLXdpZHRoOjMuODEzOTk5ODk7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIi8+PHBhdGggZD0ibTU3MS45MyAxMS45MyAxNi4xNDggMTYuMTQ4bS0uMDA4LTE2LjE0OC0xNi4xNDggMTYuMTQ4IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDBiNzk4O3N0cm9rZS13aWR0aDozLjgxMzk5OTg5O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZCIvPjxwYXRoIGQ9Im00ODcgMzAuMDQgMS4wMDQtNkw0OTMgMjkuMDN6IiBzdHlsZT0iZmlsbDojMDBiNzk4O2ZpbGwtcnVsZTpldmVub2RkIi8+PGcgc3R5bGU9ImZpbGw6IzAwYjc5OCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQ4IC05NzIuMzYpIj48Y2lyY2xlIGN4PSI1NDEiIGN5PSI5ODcuMzYiIHI9IjUiLz48Y2lyY2xlIGN4PSI1NTUiIGN5PSI5ODcuMzYiIHI9IjUiLz48Y2lyY2xlIGN4PSI1NTUiIGN5PSI5OTYuMzYiIHI9IjUiLz48cmVjdCB3aWR0aD0iMTQiIGhlaWdodD0iMTEiIHg9IjU0MSIgeT0iOTgyLjM2IiByeD0iMCIgcnk9IjAiLz48cGF0aCBkPSJNNTUwIDk4Ny4zNmgxMHY5aC0xMHoiLz48cGF0aCBkPSJNNTQ0IDk5My4zNmgxMXY4aC0xMXptLTgtNmg3djZoLTd6Ii8+PHBhdGggZD0ibTUzNiA5OTMuMzYgOCA4di04eiIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkIi8+PC9nPjxwYXRoIGQ9Ik00OTMgMTRoMTV2MWgtMTV6bTAgNGgxNXYxaC0xNXptMyA0aDEydjFoLTEyeiIgc3R5bGU9ImZpbGw6I2VkZWZmMCIvPjxwYXRoIGQ9Im01MjcgMzAgMS4wMDQtNkw1MzMgMjguOTl6IiBzdHlsZT0iZmlsbDojZmZmO2ZpbGwtcnVsZTpldmVub2RkIi8+PGcgc3R5bGU9ImZpbGw6I2ZmZiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTggLTk3Mi4zNikiPjxjaXJjbGUgY3g9IjU0MSIgY3k9Ijk4Ny4zNiIgcj0iNSIvPjxjaXJjbGUgY3g9IjU1NSIgY3k9Ijk4Ny4zNiIgcj0iNSIvPjxjaXJjbGUgY3g9IjU1NSIgY3k9Ijk5Ni4zNiIgcj0iNSIvPjxyZWN0IHdpZHRoPSIxNCIgaGVpZ2h0PSIxMSIgeD0iNTQxIiB5PSI5ODIuMzYiIHJ4PSIwIiByeT0iMCIvPjxwYXRoIGQ9Ik01NTAgOTg3LjM2aDEwdjloLTEweiIvPjxwYXRoIGQ9Ik01NDQgOTkzLjM2aDExdjhoLTExem0tOC02aDd2NmgtN3oiLz48cGF0aCBkPSJtNTM2IDk5My4zNiA4IDh2LTh6IiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQiLz48L2c+PHBhdGggZD0iTTUzMyAxNGgxNXYxaC0xNXptMCA0aDE1djFoLTE1em0zIDRoMTJ2MWgtMTJ6IiBzdHlsZT0iZmlsbDojMDAyYTUwIi8+PHBhdGggZD0ibTY0OC45MjggMjkuNjM1IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbDojMDBiNzk4O2ZpbGwtb3BhY2l0eTouNDtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwYjc5ODtzdHJva2Utd2lkdGg6MiIvPjxnIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQiPjxwYXRoIGQ9Im0yMDguMzEgMjkuOTM4IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbC1vcGFjaXR5Oi40O3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDoyIiB0cmFuc2Zvcm09Im1hdHJpeCguNDg0NzYgMCAwIC40NTk4OSA1NTMuMjgzIDEwLjkzKSIvPjxwYXRoIGQ9Ik0yMjMuOTQgNS4wNjN2NGg0di00em0tMTQuNzUgMy4yNXY0aDR2LTR6bS0yLjg4IDE5LjYyNXY0aDR2LTR6bTIzLjM4IDN2NGg0di00eiIgc3R5bGU9InN0cm9rZTojMDAyYTUwO3N0cm9rZS13aWR0aDoxLjUiIHRyYW5zZm9ybT0ibWF0cml4KC40ODQ3NiAwIDAgLjQ1OTg5IDU1My4yODMgMTAuOTMpIi8+PC9nPjxwYXRoIGQ9Ik02NjEuODU1IDEzLjIxOHYxLjg0NmgxLjk0MXYtMS44NDZ6bS03LjE2IDEuNXYxLjg0N2gxLjk0MnYtMS44NDd6bS0xLjM5OCA5LjA1OXYxLjg0NmgxLjk0MnYtMS44NDZ6bTExLjM0OSAxLjM4NHYxLjg0N2gxLjk0MVYyNS4xNnoiIHN0eWxlPSJmaWxsOiMwMGI3OTg7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNlOWVkZjA7c3Ryb2tlLXdpZHRoOi43MDk5OTU5MyIvPjxnIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQiPjxwYXRoIGQ9Im0yMDguMzEgMjkuOTM4IDMtMTkuODc1IDE0Ljc1LTMgNSAyNS44NzV6IiBzdHlsZT0iZmlsbC1vcGFjaXR5Oi40O3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDoyIiB0cmFuc2Zvcm09Im1hdHJpeCguNDg0NzYgMCAwIC40NTk4OSA1OTEuMjgyIDEwLjk0NCkiLz48cGF0aCBkPSJNMjIzLjk0IDUuMDYzdjRoNHYtNHptLTE0Ljc1IDMuMjV2NGg0di00em0tMi44OCAxOS42MjV2NGg0di00em0yMy4zOCAzdjRoNHYtNHoiIHN0eWxlPSJzdHJva2U6IzAwMmE1MDtzdHJva2Utd2lkdGg6MS41IiB0cmFuc2Zvcm09Im1hdHJpeCguNDg0NzYgMCAwIC40NTk4OSA1OTEuMjgyIDEwLjk0NCkiLz48L2c+PC9zdmc+);background-size:720px 40px;border:unset;border-radius:10px;cursor:pointer;display:block;height:40px;width:40px}.drawing-tool-active{background-color:#002a50}button[id^=drawing-tool-point-]{background-position:0 0}button[id^=drawing-tool-point-].drawing-tool-active{background-position:-40px 0}button[id^=drawing-tool-line-].drawing-tool-active{background-position:-120px 0}button[id^=drawing-tool-line-]{background-position:-80px 0}button[id^=drawing-tool-holes-]{background-position:-640px 0}button[id^=drawing-tool-holes-].drawing-tool-active{background-position:-680px 0}button[id^=drawing-tool-polygon-]{background-position:-160px 0}button[id^=drawing-tool-polygon-].drawing-tool-active{background-position:-200px 0}button[id^=drawing-tool-text-]{background-position:-240px 0}button[id^=drawing-tool-text-].drawing-tool-active{background-position:-280px 0}button[id^=drawing-tool-edit-]{background-position:-320px 0}button[id^=drawing-tool-edit-].drawing-tool-active{background-position:-360px 0}button[id^=drawing-tool-display]{background-position:-400px 0}button[id^=drawing-tool-display-].drawing-tool-active{background-position:-440px 0}button[id^=drawing-tool-tooltip]{background-position:-480px 0}button[id^=drawing-tool-tooltip-].drawing-tool-active{background-position:-520px 0}button[id^=drawing-tool-remove]{background-position:-560px 0}button[id^=drawing-tool-remove-].drawing-tool-active{background-position:-600px 0}div.drawing-tools-flex-display{justify-content:space-between}button[id^=drawing-export-]{background-position:2px 0}.drawing-button{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMCAxMjAiPjxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwYjc5OCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjMiPjxwYXRoIGQ9Ik02ODggMzI2LjR2OGgyMHYtOG0tMTAtMTR2MTQiIHRyYW5zZm9ybT0ibWF0cml4KC42MDg2IDAgMCAuNTU5NSAtNDA5LjggLTEzNikiLz48cGF0aCBkPSJtNjkzIDMyMS40IDUgNSA1LTUiIHRyYW5zZm9ybT0ibWF0cml4KC42MDg2IDAgMCAuNTU5NSAtNDA5LjggLTEzNikiLz48L2c+PGcgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUwNSAtODU3LjQpIj48cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxNCIgeD0iNTEzIiB5PSI5MjUuNCIgcng9IjAiIHJ5PSIwIi8+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iOCIgeD0iNTE0IiB5PSI5MjUuNCIgcng9IjAiIHJ5PSIwIi8+PHBhdGggZD0iTTUxNSA5MzAuNGgxdjNoLTF6bTEgMWg4djJoLTh6Ii8+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTQiIHg9IjUyNiIgeT0iOTI1LjQiIHJ4PSIwIiByeT0iMCIvPjxwYXRoIGQ9Ik01MjUgOTI1LjRoMXY4aC0xem0tMSA1aDF2M2gtMXptLTkgNGgxMHYyaC0xMHptNSAyaDV2M2gtNXptLTMgMWgydjJoLTJ6bS0yLTFoMXYzaC0xem00LTExaDV2NWgtNXptLTMgM2gzdjJoLTN6bTAtM2gxdjNoLTF6bTEgMGgydjFoLTJ6Ii8+PC9nPjxnIGZpbGw9IiMwMGI3OTgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01NDAgLTgyNy40KSI+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTQiIHg9IjU0OCIgeT0iOTI1LjQiIHJ4PSIwIiByeT0iMCIvPjxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjgiIHg9IjU0OSIgeT0iOTI1LjQiIHJ4PSIwIiByeT0iMCIvPjxwYXRoIGQ9Ik01NTAgOTMwLjRoMXYzaC0xem0xIDFoOHYyaC04eiIvPjxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjE0IiB4PSI1NjEiIHk9IjkyNS40IiByeD0iMCIgcnk9IjAiLz48cGF0aCBkPSJNNTYwIDkyNS40aDF2OGgtMXptLTEgNWgxdjNoLTF6bS05IDRoMTB2MmgtMTB6bTUgMmg1djNoLTV6bS0zIDFoMnYyaC0yem0tMi0xaDF2M2gtMXptNC0xMWg1djVoLTV6bS0zIDNoM3YyaC0zem0wLTNoMXYzaC0xem0xIDBoMnYxaC0yeiIvPjwvZz48ZyBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIzIj48cGF0aCBkPSJNNjg4IDMyNi40djhoMjB2LThtLTEwLTE0djE0IiB0cmFuc2Zvcm09Im1hdHJpeCguNjA4NiAwIDAgLjU1OTUgLTQwOS44IC0xNjYpIi8+PHBhdGggZD0ibTY5MyAzMjEuNCA1IDUgNS01IiB0cmFuc2Zvcm09Im1hdHJpeCguNjA4NiAwIDAgLjU1OTUgLTQwOS44IC0xNjYpIi8+PC9nPjwvc3ZnPg==);background-size:30px 120px;font-size:.7em;height:30px;line-height:30px;margin:auto;padding-left:30px;padding-right:15px}.tool-form-submit{background-color:#00b798;border:none;border-radius:20px;color:#fff;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:.9em;text-align:center;text-transform:uppercase}.gp-label-div,.gp-styling-div{background-color:#fff;border:unset;border-radius:10px;box-shadow:0 0 5px #000;box-sizing:border-box;font-size:.75em;position:relative;top:17px}.gp-label-div:before,.gp-styling-div:before{border-bottom:15px solid #fff;border-left:10px solid transparent;border-right:9px solid transparent;content:"";left:50%;margin-left:-10px;position:absolute;top:-15px}.gp-input-label-style,.gp-textarea-att-label-style{border:none}.gp-textarea-att-label-style{height:80px;resize:none;width:240px}.gp-input-measure-style{background-color:#fff;border-radius:10px;font-size:.75em;text-align:center;width:240px}.gp-textarea-att-label-style{display:block}.gp-label-div .closer{background-color:#fff;border-top-right-radius:10px}.gp-input-label-style{width:180px}.gp-label-div{padding:10px}.gp-styling-div{padding:50px 20px 20px;width:340px}.gp-styling-div:after{border-bottom:1px solid #bbb;content:"Modifier le style";display:block;font-size:1.2em;font-variant:small-caps;font-weight:700;height:30px;left:30px;line-height:30px;position:absolute;text-align:center;top:0;width:280px}.gp-label-div .gp-styling-button:not([class*=closer]){display:block;margin:10px auto auto}.gp-styling-button:not([class*=closer]){background-color:#00b798;border:none;border-radius:12px;color:#fff;display:inline-block;font-size:.9em;font-weight:700;height:24px;line-height:24px;margin-top:20px;text-align:center;text-transform:uppercase;width:140px}.gp-styling-button:not([class*=closer]):hover{background-color:#eef2f5;color:#00b798}.gp-styling-button:not([class*=closer])+.gp-styling-button:not([class*=closer]){margin-left:20px}.gp-label-div .closer,.gp-styling-div .closer{background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwYjc5OCIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:14px 14px;border:none;cursor:pointer;display:block;height:30px;position:absolute;right:0;top:0;width:30px}.gp-styling-option{font-size:11px;line-height:30px;padding:0 20px;position:relative}.gp-styling-option input{cursor:pointer;display:block;height:20px;padding:0;position:absolute;top:6px}.gp-styling-option input[type=checkbox]{background:none;border:none;height:10px;padding:0;right:70px}.gp-styling-option input[type=color]{background:none;border:none;padding:0;right:70px;width:30px}.gp-styling-option input[type=text]{background:none;border:1px solid grey;color:#0b6ba7;margin:none;padding:0 5px;right:40px;width:80px}.gp-styling-option input[type=range]{margin:0;right:40px;width:80px}.gp-styling-option input[type=range]:focus{box-shadow:none;outline:none}.gp-styling-option input[type=range]::-webkit-slider-runnable-track{-webkit-appearance:none;background-color:grey;height:1px}.gp-styling-option input[type=range]::-webkit-slider-thumb:before{height:1px;left:-200px;pointer-events:none;position:absolute;right:50%;top:0}.gp-styling-option input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background-color:#0b6ba7;border:none;border-radius:50%;height:13px;position:relative;top:-6px;width:13px}.gp-styling-option input[type=range]::-moz-range-track{background-color:grey;height:1px;width:70px}.gp-styling-option input[type=range]::-moz-range-thumb{background-color:#0b6ba7;border:none;border-radius:50%;box-shadow:0;height:13px;position:relative;width:13px}.gp-styling-option input[type=range]::-ms-track{background-color:grey;border:0;border-color:transparent;border-radius:0;border-width:0;color:transparent;height:1px;width:70px}.gp-styling-option input[type=range]::-ms-fill-lower,.gp-styling-option input[type=range]::-ms-fill-upper{background:transparent;border-radius:0}.gp-styling-option input[type=range]::-ms-thumb{background-color:#0b6ba7;border:none;border-radius:50%;height:13px;width:13px}.gp-styling-option input[type=range]::-ms-tooltip{display:none}.gp-styling-option .marker-input-radio{display:none}.gp-styling-option .marker-label{cursor:pointer;display:inline-block;height:32px;margin-bottom:5px;margin-right:5px;padding:3px}.gp-styling-option .marker-input-radio:checked+.marker-label{background-color:rgba(0,183,152,.5);border:1px solid #002a50;padding:2px}.gp-styling-option .marker-label img{height:24px}.ol-attribution .gp-control-attribution-image{max-height:30px;max-width:inherit;vertical-align:middle}.GPpanelHeader{padding:unset}[id^=GPelevationPathPanelClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAAAaCAYAAABb9hlrAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH4gEQEjITjE0MtwAABGJJREFUaN7tmU1oHGUYx//PZEvSLjHVBLVaerCXSgo5tAqxiqBSxcSLWqknFaNdaYjiwUMOVVGi2EORJg0xtgbx0FKVgmirRU17SUpjPsCVUhQtVOr6ES8mmpqdnwffhekw2dndbMK23T8MzMzzzsz7PP/3+ZjnlaqooooqrlhY7gSol3Rr7tLMTlfNs3gAJqnGncvMJMk3M7+Q5xOB8zsl9Ui6XtI/ktZXzVs6MpmMNTU1rZa0SdJNknLkSNI0MCrpTzPLFkSQmR0FspIGJb1UNXHpHjM3N9dUW1t7u6QHJW2V9KukPyQhqcEt/i8lHctms8Oe5/0WR5SAW4AfgWGgC1ixjEo9AwwAXj7Fgb1AZ6WSMzk56QGbgQPA98AUsBvYAKwCVgJrgV3AKeAccAi4f3x8vCbOSA8AB91xGEguIzlZ/sdgFEmOnF43xq9UkoBrgD7gZ+B13/c3u/uPAG8AbwEdkpTNZjcCLwJngE+AtYV8YEW+VbxESvVxKfa5xBokZ19oTF+lkTMzM+MB9wJngT0hHT8KzP2bkGwHcB54Ktb2wNtAb5EGbgAaFhOzXegKYhDwQp6TwzvLvYgK1CPpwtkZYEtI9iowCowBAyHZeuCEi1pr4j4yBBwscmK7gZ7FJtYFSOq7TMgx4A7gB6AvnU5bSF4H1LtjVVCWSqUMeN550eN59SuWIMf+HDAL3LwEJC0bOSPdCRvpTljwOiT3RroTdQvM3QPanYfcFiHvAj4GjgCvLWDHT4EX8hZnUQQBCRf6tkWMD8bW/WVaiVEkDZZKDmWCI6kmD0FtwNfAugXsetG96qsIeSPwfhRBXoxy10n6XFKXpEPAy7kEDtwl6eHA8CeA5nJ2N2LuxXrEEjiaX2a9YpHvv2ODpFOS7gl84BVHVFLSntAjNZLeXGRLZK+knRHipyUNFONFrT3zlDsExhjZJNVLuqGE16+W1BjX6rmk3JY06v56w9gmaUuufRFCO3C3mZ0oAzmDki4G7nXkytJC+lgj3Qlr7ZnHzIK5JW4V09ozz0h3Yo0zdJOk3yVlHOELkY6kaUnXSnoynU6PNTc3F7RAUqmUSWqX1CLpA0nZ2Bzkqo5ScbKEvBNZSucrwS+zMnsI+DcqB8WV2Uuh6Loix/eGPKdf0g4z880Ml//6A/IO520VhdnZ2b8lHXM2fTQkrg1Eq3AleJ/rzX0mKVNQiFtmTLjk67mw1umIyTVxAXY61+904eS7SiMomUz6wGlJxyU9BswARzzPG5P0oaSfXJ4+m2v1eJ63VdKzzgbHo0J3Ik9MPVfiXM8XVdqYvety3sYwOSGSuhyJ35pZfyX24qampv5qaWl5T9JKSdvN7CHgC0n7JR11dm0Edklqk3Sjy/UHJiYmLsSWfsCQpDoz264qSq5Gi9lu8H0/73ZDmKCTrpq4UI65SnrOzIavRqJyG3ae522KqHinnefEbtiFCWpzJXSmTD91h83sl6vdo7SILe8qqqiiiisY/wFFCbN/sRPwgwAAAABJRU5ErkJggg==);background-position:-27px;background-repeat:no-repeat}[id^=GPelevationPathProfil]{height:150px;width:inherit}[id^=GPelevationPathProfil]>#profileElevationByDefault>svg{left:10px;position:absolute}div[id^=GPelevationPathInformationsContainer]{background-color:hsla(0,0%,100%,.9);border-radius:4px;bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:32px}#profileElevationRaw{padding:unset;resize:none}#profileElevationByDefault{display:-webkit-flex;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%}.altiPathValue{font-weight:700;fill:#5e5e5e}.altiPathCoords{font-style:italic;fill:#5e5e5e}.axis-d3>text{fill:#5e5e5e;font-family:Verdana;font-size:10px;opacity:1;text-anchor:end}.axis-d3{fill:none;stroke:#5e5e5e;stroke-width:1;shape-rendering:crispEdges}.area-d3{fill:#c77a04;stroke:#5e5e5e;stroke-width:0;fill-opacity:.4}.line-d3{fill:none;stroke:#c77a04;stroke-width:1px}.grid-d3 .tick{stroke:#d3d3d3;opacity:.7}.grid-d3 path{stroke-width:0}.overlay-d3{fill:none;pointer-events:all}.focusLine-d3{fill:none;stroke:#c77a04;stroke-width:.5px}.focusCircle-d3{fill:#c77a04}div.tooltip-d3{background:#fff;border:0;border-radius:8px;font:8px sans-serif;height:45px;padding:5px;pointer-events:none;position:inherit;text-align:left;width:80px}[id^=GPelevationPathPanel-]{width:280px}[id^=GPelevationPathPanelInfo]{background-position:-75px}[id^=GPelevationPathPanelInfo],button[id^=GPshowElevationPathPicto-]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAAAaCAYAAABb9hlrAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH4gEQEjITjE0MtwAABGJJREFUaN7tmU1oHGUYx//PZEvSLjHVBLVaerCXSgo5tAqxiqBSxcSLWqknFaNdaYjiwUMOVVGi2EORJg0xtgbx0FKVgmirRU17SUpjPsCVUhQtVOr6ES8mmpqdnwffhekw2dndbMK23T8MzMzzzsz7PP/3+ZjnlaqooooqrlhY7gSol3Rr7tLMTlfNs3gAJqnGncvMJMk3M7+Q5xOB8zsl9Ui6XtI/ktZXzVs6MpmMNTU1rZa0SdJNknLkSNI0MCrpTzPLFkSQmR0FspIGJb1UNXHpHjM3N9dUW1t7u6QHJW2V9KukPyQhqcEt/i8lHctms8Oe5/0WR5SAW4AfgWGgC1ixjEo9AwwAXj7Fgb1AZ6WSMzk56QGbgQPA98AUsBvYAKwCVgJrgV3AKeAccAi4f3x8vCbOSA8AB91xGEguIzlZ/sdgFEmOnF43xq9UkoBrgD7gZ+B13/c3u/uPAG8AbwEdkpTNZjcCLwJngE+AtYV8YEW+VbxESvVxKfa5xBokZ19oTF+lkTMzM+MB9wJngT0hHT8KzP2bkGwHcB54Ktb2wNtAb5EGbgAaFhOzXegKYhDwQp6TwzvLvYgK1CPpwtkZYEtI9iowCowBAyHZeuCEi1pr4j4yBBwscmK7gZ7FJtYFSOq7TMgx4A7gB6AvnU5bSF4H1LtjVVCWSqUMeN550eN59SuWIMf+HDAL3LwEJC0bOSPdCRvpTljwOiT3RroTdQvM3QPanYfcFiHvAj4GjgCvLWDHT4EX8hZnUQQBCRf6tkWMD8bW/WVaiVEkDZZKDmWCI6kmD0FtwNfAugXsetG96qsIeSPwfhRBXoxy10n6XFKXpEPAy7kEDtwl6eHA8CeA5nJ2N2LuxXrEEjiaX2a9YpHvv2ODpFOS7gl84BVHVFLSntAjNZLeXGRLZK+knRHipyUNFONFrT3zlDsExhjZJNVLuqGE16+W1BjX6rmk3JY06v56w9gmaUuufRFCO3C3mZ0oAzmDki4G7nXkytJC+lgj3Qlr7ZnHzIK5JW4V09ozz0h3Yo0zdJOk3yVlHOELkY6kaUnXSnoynU6PNTc3F7RAUqmUSWqX1CLpA0nZ2Bzkqo5ScbKEvBNZSucrwS+zMnsI+DcqB8WV2Uuh6Loix/eGPKdf0g4z880Ml//6A/IO520VhdnZ2b8lHXM2fTQkrg1Eq3AleJ/rzX0mKVNQiFtmTLjk67mw1umIyTVxAXY61+904eS7SiMomUz6wGlJxyU9BswARzzPG5P0oaSfXJ4+m2v1eJ63VdKzzgbHo0J3Ik9MPVfiXM8XVdqYvety3sYwOSGSuhyJ35pZfyX24qampv5qaWl5T9JKSdvN7CHgC0n7JR11dm0Edklqk3Sjy/UHJiYmLsSWfsCQpDoz264qSq5Gi9lu8H0/73ZDmKCTrpq4UI65SnrOzIavRqJyG3ae522KqHinnefEbtiFCWpzJXSmTD91h83sl6vdo7SILe8qqqiiiisY/wFFCbN/sRPwgwAAAABJRU5ErkJggg==);background-repeat:no-repeat}button[id^=GPshowElevationPathPicto-]{background-position:1px}div[id^=GPexportContainer-]{padding:5px}div[id^=GPexportContainer-]>input.GPsubmit{color:#fff}input[id^=GPexportButton-]{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxMy45OTkiIGhlaWdodD0iMTMuOTg4IiB2aWV3Qm94PSItMSAtMSA1LjcwNSA1LjciPjxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjMiPjxwYXRoIGQ9Ik02ODggMzI2LjR2OGgyMHYtOG0tMTAtMTR2MTQiIHRyYW5zZm9ybT0ibWF0cml4KC4xNjEwMyAwIDAgLjE0ODAzIC0xMTAuNTQ0IC00Ni4wMjQpIi8+PHBhdGggZD0ibTY5MyAzMjEuNCA1IDUgNS01IiB0cmFuc2Zvcm09Im1hdHJpeCguMTYxMDMgMCAwIC4xNDgwMyAtMTEwLjU0NCAtNDYuMDI0KSIvPjwvZz48L3N2Zz4=);background-repeat:no-repeat;background-size:25px 25px;min-width:fit-content;padding-left:25px;padding-right:5px}.GPexportMenuHidden{visibility:hidden}.GPexportMenuContainer{display:inline-block;position:relative}.GPexportMenuContent{border-radius:10px;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);display:none;min-width:80px;padding:8px;position:absolute;z-index:1}.GPexportMenuContent,.GPexportMenuContent a:hover{background-color:#f1f1f1}.GPexportMenuContainer:hover .GPexportMenuContent{display:block}.GPexportMenuContent .container{cursor:pointer;display:block;font-size:14px;margin-bottom:5px;padding-left:15px;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.GPexportMenuContent .container input{cursor:pointer;height:0;opacity:0;position:absolute;width:0}.GPexportMenuContent .checkmark{background-color:#eee;border-radius:50%;height:12px;left:0;position:absolute;top:0;width:12px}.GPexportMenuContent .container:hover input~.checkmark{background-color:#ccc}.GPexportMenuContent .container input:checked~.checkmark{background-color:#366291}.GPexportMenuContent .checkmark:after{content:"";display:none;position:absolute}.GPexportMenuContent .container input:checked~.checkmark:after{display:block}.GPexportMenuContent .container .checkmark:after{background:#fff;border-radius:50%;height:4px;left:4px;top:4px;width:4px}button[id^=GPgetFeatureInfoPicto][aria-pressed=true]{background-position:1px;background-repeat:no-repeat}button[id^=GPgetFeatureInfoPicto]{background-image:url(data:image/png;base64,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cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjliYzYwZTdiLTQ2YTQtNDBmYi1iNTdlLWM2MGY5ZWYzNTc2YSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMDE5ZDJjNS02YmZkLTQ5YzQtYTczYS0zMGQ3OGE0Y2MyZDUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpkN2U0OWVjNi0wZjQyLTQ5YTEtODQ3NS0zN2Y5N2Y3MGJjZWIiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE3MTAwODA3MjUxNDU4NjUiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxNTAxZWQwNS0xMmQ3LTQzNGMtODY3YS0yYjMyMzIxYTYwYjgiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTAzLTEwVDE1OjI1OjI1KzAxOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PnuaV+YAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAHdElNRQfoAwoOGRnrK4UpAAAB+UlEQVRYw+3YsWoUURTG8TNrikAECYJYiVjFLBhS2GktpPEV8gg+gr2IhbWQRhMQG0stIxaCaNKIjQTExqgBUYOJyc/mLkxmZ3d2dmciSA4sy+58c/73u+fMvXc34iROorXAPFaHCdY1F+vHxIG1Xu6sANLkDGZZlg0wpOFiLWRZtlkKmhSGLKU5HKIZm4M57Oaqc4TTGSPhNO7iHmZafD76OJiLiDcRMR0Re6MkqZw5XMZn7OB6WxUqcgqV+Y2FKs7IrYALuNh2y/U4JWauDOJM1WiB0xFxLiJm0/v3iNgqWwt6t4zZakXObEQ8yLXZ1SzLNtGp5AybOdzHFvZwiNsDdJ2U5qAhzn6+MnU4la2AG/iBDzjThqEc51cy1GemSUPPk+TJEE0Thl7mluU+M40Ywnl8xFcsYqqllruWq8weFsflVIHupMuvcAmfcKtEdyrp/tTlpNWs98wcYmkSTpWhF+nyBrbxCFlThkpOAO8n5VQZuonHeIilITlqGyqY2cezJjhNneXO1jFUtmlOwukMA+ZiA90SXRev88KI+FLDvIh4lzbNSBv1QWOcit8pP7Gc0y6n74qxg294+q85g+AzWMklWin5PFMzZ9nZrHFO1SCKM3VkJicx0wZn1MF08Ta9umPmWEsD3cV8W5zj/nNjdZCZk/jf4y94DaUx429cawAAAABJRU5ErkJggg==);background-position:-25px;border-top-left-radius:0;border-top-right-radius:0}.GPcloseGetFeatureInfo{background-image:url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=);background-position:0}.GPgfiLayerButton{background:unset;border:unset;font-weight:700;text-align:left}button[aria-expanded=true].GPgfiLayerButton span.GPshowGfiLayerFeature{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.GPshowGfiLayerFeature{background-image:url(data:image/png;base64,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ICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmM1NWM2ODRkLWY2OGQtNDExNy04ZGYzLTAwYWMzMjQ4YTY5YSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjNmYWM4YTllLWJkMTUtNGJiOC04ZGQyLTkwZDUyMjE0YmFmOCIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1QOlRpbWVTdGFtcD0iMTcyOTI0NTAwMjg0NjU2OCIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjMwIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjcwMTNhZTFjLTcyMjktNDJmZS1iMzAzLTU3NGFmMWE3ZmQxMyIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMTAtMThUMTE6NTA6MDIrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+UnHxogAAAAZiS0dEAPIA8gDyLkSMzAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+gKEgkyAorMuigAAAIkSURBVFjD7Zc/aBRBFMa/t39EFEMQTrQ2CiIi+K+Q3ZA+CLJ7nqWQwlRJGs3ddUnlZdUiXJEqINjE9e5UjFWag9sEbNRGhGB6MXKgQQPxZp5FLhLCXXbXXSQH8ytnhuF9771v3yygUCgUCkVXKOrB6/dqJzQD42A5DNAZAGBglYA3UlB55ZHztWcFWoXaLTDPAzjW5cgGMUYanlvpOYFtcc8inGVi5A6aSAptS50/761co+QAAOxCba/GH6TJgcaD3HqSoKx89RMx15tH5MTHqdzW7r3zU/6h47+0WSYaCmbcc2F3aftuGhjfpy075asPrI8lTjtjgYlG+zf1JbvoZ3aW7aKf6d/Ul5hoFIyFxBW08tUPAC7Giw3vl2fcS0k1tq3xBEATpN3UmLYkxCsAp8C4G3ju0yj3aCH7pzstNkrO3zbtkLGBNLwTlJznIG1wO2uyLiFWAJggzYoqDgCM8ILE7i9OXL0dDx7+PZH5iast0isAYLDIrh8VTXuyMpeKBwFei28fWkvTg8KACDzXCjzXEgZEXA+GCKTFf/gwv07cnp47DaLbBFxhqb+zCi8uD+ZfXmCpvyXgGhh3As+dTixQCioD2IgR23ezZZYPkgdDB709Wc0ywY8y6Jkpu+w5tTQH9dB9/+RuD9Yf5r6k/lTbFsnzAPV1qxwzjaQt7r8+tu2inwHrY8wYBnC2vbzKoEWzZZbrj298U/8uCoVCoegx/gAQwd9vpqyHDwAAAABJRU5ErkJggg==);background-position:-26px 0;display:inline-block;height:28px;vertical-align:middle;width:28px}[id^=GPisochronPanel-]{width:280px}.GPshowIsochronPicto{background-position:1px;background-repeat:no-repeat}.GPisochronPanelClose,.GPshowIsochronPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIRSURBVFiF7ZbRS1RBFMbPbLq9ldjaY88Zkv1JQRqt+Wf0aCrYBuY/UkRQRFQvQQax+JipEUIoQdHq/nrYb3K8zl33zl20h/vBwnLOmfPNN+fMmWtWoUKFMwPwjiO8Pu/9xOAGDQRqZnYYmLrOuQvD31I51AYJAqbNbNnMfgXm38AyMFV2E8AssKpDy4txwAowX4booogO1WYdYEu/jmwHIqqXEOPzr8VEScwjxXSTREnMSyXZBGaAscA/DtyTOIDnKaKAFsfxGHCB38kWopUiaNVffmC8T9wE8FaxKwk8vpVCrAG1TGU8nsSqeBrJLbXBl5gY4C7wOSNqW+13Y4iistUrLkYE/lTu5PhfAR8ytjmteViYMF9UeTFK3qZ36S9HfJeAP8CDjL2hqq4nkVpfUdFhEcNIjv2ame045/aA22Z2PeMbNbOn4QLn3C6wK38ZxN7Ggd/LKICfwKb+tyMntgGcOAzgO/AjkTM2AJKqFEvuW27s9Oh/aybUch8T+PKmWdaWJiro49kCa+a1ZmFIYvzYjo70ooJu6rS/Ao0B4q8C31TVyYJcZ/aw+iRv+omSmPeKXUrgmeHo0yc6mjOV6gL3i/IYUAdeKMkW0ASuBP6G2mxHMc+A0cJEvVxNVSp3mklUC2imcPgkdSU5CE5nWyK6snXofXUniTkXAFPAIvAJ2Af2gHVgoeidqVChwv+NvxOT737B3Fc7AAAAAElFTkSuQmCC)}button[id^=GPisochronReset]{opacity:.8;transition:opacity .2s ease-out}button[id^=GPisochronReset]:hover{opacity:1}.GPisochronReset{background-color:#366291;background-image:url(data:image/png;base64,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);background-position:-281px}form[id^=GPisochronForm]{padding:15px}div[id^=GPisochronChoice]{-webkit-justify-content:space-between;margin:10px auto 5px;width:160px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}p[id^=GPisochronPointLabelP],p[id^=GPisochronValueChronLabelP]{margin:2px 0 5px}.GPisochronChoiceAlt input:checked+label+span{color:#366291}input[id^=GPisochronChoiceAltChron]+.GPisochronChoiceAltImg{background-position:-56px 0}input[id^=GPisochronChoiceAltChron]:checked+.GPisochronChoiceAltImg{background-position:-84px 0}input[id^=GPisochronChoiceAltDist]+.GPisochronChoiceAltImg{background-position:-112px 0}input[id^=GPisochronChoiceAltDist]:checked+.GPisochronChoiceAltImg{background-position:-140px 0}.GPisochronChoiceAltImg,.GPisochronOriginPointerImg,.GPisochronTransportImg,input[id^=GPisochronChoiceAltChron]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATQAAAAcCAYAAADvCUNwAAAV4UlEQVR42u2de1hU1frHv++eC+JwTRHwWoLpgRBKBbVDKmSZlRw5wvHYyeQiM9oJyvSU52dlVy/108BTzEwKXZ58HvGGHnuOZVrk+WVA/cqU0ASfNEsMmJFLYjCz398fswcGGGBmGDzlb97n4WFYa898Zq+91ne977vW3gAe85jHPOYxj3nMYx77dRl5mqDDtFrtCiJ6DoBKKvoZwFNqtXrzQPBi03NXAOjMY36qrPDRzf+J82dmLwBLAEwEUAPgDSKquV54Hrv+Te5pAht17yxmkF4/B2CgBKY7z/IdNv+HmmA7gPkAygFEAlAzcxQRGa8T3nVj+fn5IwRBeJ2ZfURRXL58+fLTA8mbtnjTCJNc/jpB9BGB5Z8XPHr619gugqdrdDKVnTKf64jXm7c0BMB9APREFAdgGYARABKuB971ZoIg6ADMI6IEmUy2Z6B5ZrlMR+B5ACUIoD2/1nZxyUPT6XQMAGq1+pqErLHpuQwAZQU5A8IrKipSGgyG+cxsIqKubWLS6/WpAQEBxampqa3u4EWmrFUO9gmYTwQTc9drwKYp6bmpV5qMxRU717Zeq45ARPXMPAiAl1Q0RPpdez3wrkObYfM64rfOY+YNALIAzCaizz0hp4um1WoXGI3GjUR0U09txMw7jEZjtVar/ZtGo+nX7BSXlreAiTcCuInZ7lCXE7BD5RdYPSUz72/lW7Md4lknGXumVqvJkXq9Xg8AKC4uRltbGxoaGrB3794S2Mm1WicZe1ZWkEOO1Mdl5AEAMl8qQssvbThXY0Ta8zvs8jzWTQDiiOiA5NEnD/iExxTHxAcA+JCbeZKY/c3atQAMvKDl5+cPEwQhG8C9NoPoSyI6IJfL89LT0906s05/MH+YSdlq4UlDIzYj90sS+UArhLwvC7P7xVu7dq0QEhKygYhWOviWMCLardVqX6mpqXli7dq1opNAYcq5wA1M7BiPEUbMu6ek5b5SPsb4BJzluWjBwcGYO3curl69ig8++ADMPKC8ieGhyH0sCZebWvDEa+9BHGDeb910Ol0UgLeJqApAclZW1lcDyZu2ZEuUWSa+zcxVLIrJ5W8+9pWbxex5GzFDfyczuYONmAJgGwDfLlUxzBzT1taWrdVqMzQazS63hJgZr6aYuHUbuAuPEcNEMQpwdlxaXkZpYbbLvNDQ0I0AHrcJgerCw8NPRkZGht5www0jAaC+vv77kydP1lRXV0dZQyIiWhkaGspdLkLfntn5GzYycQdPQN1dseNPpiRMDA0fOXQkAFR9X/d90Udf13xY+m2UaMkxgQgrY88HcJmTPFds6NChmDt3LlpaWnDgwAE0NzcPKG/86CDkPpYEQ2MLHn5lD2rqm/r1eZs2bfJWqVRfAwjv5bDtgYGBi1NTU839Huwpm7zNvvKvAQ7vZWLaPqY5dPHOna7ztFrtNCJ6GsAcGyGIAbBAq9XepdFoDrk3xbN5GiA8DWCOGSIkhyKGBGFBXOard5VuffSQm8TsGQBr3PndBQfFbAcAX2bey8wzbERgJhHtA+BHREVarXaBO8QMTDsk8dzL1MFjppkg7APgx8RFcWl5C1zsIAtsxczPz+/YkiVLBs2aNWvmsGHDxsvlcpVcLlcFBwdPSExMnLlkyRIvPz+/z2w+YpVer5/vVJiJDjEbOSzg2JEtmkHPLb17ZlRY6HhvL4XK20uhigoPnfD80rtnHtqi9hoR5G/Do1Wx6bkO84gIY8eOha+vr10PLDw8HEOHDu3cEQQBiYmJUCgUqKurQ0REBGJjYxEUFNR3JxIICZPDMXyoX7e6qLBQzJk6HhPGDOtULhMEvKi5B4MHKXH6/E/446yJeHjB7Yi4KdilflNUVKRUqVR7+hAzAFhkNBrn9LefRqasVZp9ZXt6FTOLv7HonF9Nv3hE9KmtmHW5bqvcP9UIPfJEM61yk5itBrDWTtU8Zn6CmVcx8xJm/j0zD3WLoOXn5w+TPDMC8IRGo0nWaDSfWOuzsrJKsrKy/gBgtaXdaVtBQUGQqyc5/cH8YWCy8BhPlBXkJJdve7SdV16YXVK2LecPLPGYeNutaXlBznZ8Itpg/dvf3/+zhQsXTlUoFD2uLiqVSp8//elPcX5+fqU2F+TloqIipSMdn4k3dIiZ/2e7Xlo8dfAgZY88H2+lz651i+NGBnXwQHg5MmWt0pFzjI6Oxp133okRI0Z0Ko+Pj0dSUhLuuOMOJCcnIzY2tr1u+PDh8Pf3BwCMHTsWMTExiImJwZAhQ/rkPThnEtYtm4vJvxvVqfzJxQnY+vcUrH4oEW89vRDLk6e3103+3UiMCg4AACROHofF90zC4nsmIXzkUJf6jtFoLOxpENoZTBn9HZAqn0CHeXADD8CLAN6zcy6z8/PzY92fNLPPI8LsyRl5sf0Us8cBvNRD9V0A1gPYCKAQwFEAPzHzJ8z8EDPLXBY0KWfmy8x71Wr1Rmu5Wq0m2xVOtVq9HsB+AH4mkynb1ROVcma+APaWFea088oKcsh2hbO8IGc9g/YD8FNCdIpnMBjmAxhrDTOTk5NvsRe3MzP27duH/fv3W2dJSk5OjgBQb82pGY3GpL54g30COngC6t555s+3EHXniSIj86WdyFpviaIFInrrmUURAlG9Naem8gvolTd48GAkJCR0EiqrKRQKTJgwAadOnUJBQQGqq6txyy23gMjyVS5cuAC9Xt/t59SpUz2HqP4qPLv0biyzESqreXspkHRHJPYfrcDM5a/jUNm3WDg7BoJg4ZVWnEdcRl63n/1HK1zJK70OYJETHs+9/Zl4YzNyXwc5zgNwr7MTbxczq9XqNbb56y7jdKub5cxcti2nRx4xb+2HmGUDeMVpeQXiAbwJoISZb3A15Lxf+v2qA51kk/SF73Ndui08Jn7VgWMtPIGc4gmC0C4KYWFhFT15ZmfOnMGlS5dw9epVW0/NNzw8/KTNxUnqu13QfsxdsRMqevLMDn52CieqL6KhucXWU/O9c/K4kx3nTL3yRo8ejREjRuD48ePde6jZjNbWVigUCiiVSigUCvzyyy/9SvpPn3gjYiNG4d33/7f75GQW0XzlF3h7KaAapIS3lwINP1+FKLo36S+t3i5z8m3Ktra2o67ll3IZ7DxPQXy0H6fZUzKzyhrZ63Q6fzc2aw88qpLUJWpSlsu88f38brcD2N2TpybvpZPYilWJTqdr33fWdR+aTqdjm4ER4+w+ta5L/MRUEpue277vrOs+NMvfbBW2GGf2qTHzpPb8TlRUSA/H4KuvLIs5MTExnUPIyMjgqqoqa7tMdmByaectvHOiXZ4oMt58z7JS/dDczh+Zemd08Afl37ZHar2Rzp8/j6qqKgwbNgzR0dFdGCJKSkowe/ZshIWFgZlx8ODBfvWsT098h/dLTyMqLAR/mXNbp7o2kxnPF36IDQ/fi9mxN0MUGSty9/dHuH7PzM8Skbs23o636efNRHSwubl58YoVK1oAIC499/cMfhZwH8+mnzcDOChrMi8+tnNFiyOBhT3BEkXxAYVCYTCbzYUALut0OgQGBsrdsOBhmJSl84fpamce4QEFzAYzywplpquXY9NzMaYpVO7kgsdfASgBZPbj+80E8KDksTnloV2PNtz6IiAgYGRP3tnly5fh5+eH8PDOOV/rCqhkI5zh3TR8yMievLNzNUaMHBaAu6d2nsDCRw11mHflyhWYTCa7dXK5HNOnT0ddXR2OHDmC+vp6xMfHQ6FQtB8jk8kwYcIETJ8+HZGRkRCE3rtH3eWf8UurfZ63lwKPL5qB0+dq8bT+fZz5vharH0rA4EFKG7dFhqQ7IvH4ohlISYiGQm4/PaLVaqcB+MCNYtYtbcnMC1Qq1auWCXPzNAY+cKOYdeMBWGDylfUZiUh5WoO9sFAUxW8yMzOr1Gp1PAA9AEN/xUzK09rl+XjJvjm2bUVVWUFOPEs8Z1dviYgBqO2JkWSHAGyQfjZJebQSAL90OS7LYQ/NxvP6CkA0M8+wXQzo6nmp1WrKz8+fKQjCRwC+VKvVtzlzkjael4VHPMN2MaCr51VWkENTMzfPFEULr6wg5zYXrx/v378fNTX274e+7bbbug1q7hyjObs3jLPW78LxMz/arcy4fwpkXXhmsV+8dgsJCYGPjw9KS0tRXV0NAEhISEBISIfTOGPGDISFhaG2thaRkZEYNWqUy15c9LjhCLnBF//Y+T84VPYtGIzns+YgOjwUH0vH/NeSO3FX7M345rtLWDBrIqbeMhqP5/3T3iBYB8D7Gkx28y2DTbgmPGrn9WzS3SmT7XhohqCgoBabMaju67McMenulMl2QkpDUG0Hr7wgx2UeEYnMnAlAAeCBLtX7iOg1O1GTP4A8AIulojhmHkFEPzjsoRHRP6W80woHclPWYw64fIGZ/2m50NQnTzRbeOQ8r11NjEbjDz0dFBwcjHHjxnX3xQ0G2/dcdIZX/UN9jzzL9oYJ3crPdn7PRVfb9sqVKwCA0NDQ9vMD0L7XTBAEKJVKlJeXo7i4GFVVVRg9ejTkctduJqm9bPncW28eASIgOtziqF4yWMplggDfwV7I3/MpMl4swvulp3H7xJswSGmXF9VD/zwUGBjoBSCAme8B4Mimz/sCAwPl0qQc39PlsJ+KwKGfm4xeZvmgACbcA3KAR3TfmKZQeVlBDlHPvD5NJpN1dV+DDAbDfw+U2CrNP3fjfedz0W08IjIDeAhAkYPHN8DyZJb3bLTrLoc8NJtE8hZBELKZOUmn0z0prWZ2y6Hp9frVzHw/gAaFQrHF5Ytm8tpiUrRmg5E0JT33yfKCnPX2cmhxabmrmXA/gIZWpi1ONuQXzHwzAJw4ceLivHnznEpSVlRU1ACwKk+5A07ZFwDdDAA7Dh+/qH9ygVO8og+Pt/OIHOH1kBQxGFBZWYmIiAhMmDABgiCgsrISRqOxPcdm9cZGjhyJkJAQXLx4sccQti+rvlCPvSUn8cdZUUi6IxJymYDikpM4+2O9NV5qz6lNvWUMoscNx1dnfsBV+yHsvwHM61K2o7m5OY2ZzwFoJSK9yWSKl8vlve3OLWHm8UajcZ1Op5PB8rSPEnTcp9hsScvSvy03YnfqNztkTaY0lW/gObRdbQWgH+wtj79y1dQrD8zjv/O9uC42PVfGjO2g7jxHTBTFf9npyzmvvfbamocfftjtO6BFltnhIWfm8tfWfPy6e3hEZGbmByQdSnbgeGZmDYBqKQ833ilBW7Zs2U9arTaDiIoArNPr9VMBbLZGXVKYuUISM5GI0vpzC9Sn7yz7KS4tL4OJiwhYF5uRO5VF2mxdAJiauXmmaBZWSGImAkhz4RaoYgB/BoDq6uqo+Pj4ZqVS6dATLlpbWxvPnj070cYN3tennIGKSeJ9WPpt1BN/mdXs4+0Yr+lKa+Phz89MtMnK7nPkfUajER9++CFqazs3zdGjR1FZWYmAgAA0NDR0q7fm2ubOnQtmRnm5Y/pZ/UM9/p7/L1R+d6lT+fq3j2DvxycwJjQQ31+6jMrvfur2Xi+lHK8+mgRmRv6eT3tCrIHlHr8QG49ljY+PzxZmtpa9IJfL+7qZfw0R2a42viAIQqIoioelAVMFAHKR1pgF7sQTYFpj9pVtARAibbp54cpVc2sfIeUaBo5SR8ELYCERZOExt69S9mpvvPHGJFEUrXtxDsLyRBKldL1yYNmj5jaLy8ydxCLs8q60mNzKIyITMy8EsFOatL7t4/gLzPw2LIsK3UKoPhcFNBrNLiJKAdDIzEnM/LFNmPkRLFs7Gpg5JSsra29/T7C0MHsXgVMANIKRRNTBE0XhI0ieGQuUUlaQ4zQvICCgGMBZ6c8he/bsqWAH9i4wM+/evbvSZg9MlXSXRO+hXpOxnScyD3no2e0VogM8kZkXP7e9UmznUZVJ4eWQoLW0tODs2bNoauruPNTV1aGqqsqumFk9tcLCQhw/frxbjq1HAW1sweHPz+DHusZudafP1+KD0m/tihkAmEwiZj2cj3cOfoHnls5B9Ljh9nK6J2QyWTyAd6wOZ2ZmZhUzL3IkUWy1wMDAY13L/P39SwDUMPMRQRCWA8CxNx85ISNzJ96xbSuq0H2vW6+80U2h3XhjmoNLANQAfEQumJc7cj3NZvNfba7PMwDSbKpzNm3a5N58n8gdPKJnQDY8Qs60FPfyiKhN8tBGEJEjt1XlSb/HOuWhtV+1rKzdBQUFn5hMpmxmvhfArVLVl1LOLE+j0dS56wRLCx7dfWta3idKiNlM1IlHwAGTvC3vC/1Kl3ipqamtWq12FRHtBoDGxsa4HTt2lCYnJ0colUrfnjyz3bt3VzY1NcXZCNxKjUbT5kiSdUpm3ioSeTcAXKhtjEtZ/VbpW88sivDxts9rutLauPi57ZU/1jbG2eQXV36hV7dhgEypVOLGG2+EwWBAXV0dLly44PCdAq6YyluJGbeGofpCHU6fr0XZN+fx0NzJuHmU/f2nmZmZVVJCeLHNQNjeZdf/NmtapCfT6XRd+4MZQGjX4yQB68STQtSMDu+bt1nTIvaszJIu6VQmrQqGOjngl0gORKJarS6TPnq7Vqs9TEQJKpVqq53kusvGsPDAQuLnBY+082LTXz0MUILZR+ZWnnWhwNEcMRGdYObPbD1opwQNAKRQ8ikAT9nk0G4bqAEmhZJPAXjKJofmFp5Go9mj1WpfsT5po7GxMe6tt94yjB079uPIyMiQIUOGjAIsN6dXVFTUnD17diIzx9k06Aa1Wr3PUV751uw9U9JyXyHCSquozX5EZ0icMu7j1MTokHGjho4CgDPna78vOvx1zeHPz0wUbXgAbygtfHQfBtBEUcTtt9+OhoYGlJWVISoqCsyMS5cuDRCPseqBGfj+0mX8Y9enWHT3rRCZ8XW14+sezc3Nj6hUqnkAWgG8GRgY+LIDb1sjJZetOTTHc7xN5kfMvjILj/DmjY2hL5f3rQ5rQLQEYBnIOR4AFBUVyax5zqVLlx7pmteTwsEZ7rouKSlFsnOSrpQVPtKZB9rBQALIfbx+2Buwc/uUS4/quB4e8OjC44OstvHixYurXX18kFXUHJ+6sLFslHH1tXh8EDPPBVAAIFhKWK8kIt31wvstmk6nOwDLLUglarV6Zpc6fwCX3TkWY9Nz23llBTmdeJOydP4y09XL7h6LLvYdFYBTRDSq34J2PZler5/PzC8DCOvj0CoAq9RqdXE/O8x8EF4G98WjKpB5Vdm2x4qvcUcRpJDoEhGZrjfeb8m2bt0abjabTwGQCYKQ2NVDc7dzMS1jU7iZZacAyMBCYlcPbaCci370nS1E9Iht2f/7/ymQlZW1NzAwMAJAKjO/C+CU5C00A6hk5neZOQVARH/FTOoIe39uNEaAOBXAu9SFB+BdYkoxy70irrWYWXMZRPTDtRKXa837LZnJZAoCYBAEYaw9MZOslYjc8hxCM1MQAAMEYaw9MbPyAOz6lTRRoaeXeMxjHvOYxzzmMY95zGMe85jHrpH9H5upQtqJtSKfAAAAAElFTkSuQmCC)}.GPisochronChoiceAltImg,.GPisochronOriginPointerImg,.GPisochronTransportImg{font-size:0}.GPisoExclusionsOption{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAA4CAYAAADuMJi0AAAE60lEQVRYw+2YWWxUZRTHz/fd7y4zzAzTbaAdpgtQWsBiYVxYGpcEMCwRQkx48KHGhKg0WhESNYglwSUgWCKGTaMRBF4MwShpECUshlJqay2U0LCUwrRAp+0Ms997v8UnEl8Gp9Ppg2Z+bzfnn+/knHvud865AFmy/GfZVVZW/vvb9eduNn7Wc+ixGQ3/pm+UcO735VP3/rpsyc39TudHyXQ4maF61cqfZi97ocbjmVi6YGHNxoOeor3JtDskae606uqzFfPmvRqLxFg4EetIpiXJDJqqOHBwEEjIDyXjiVw4t/S1XD34TKs/MX+z4EEAgK0SwhPtjh+qq6tXBjGOtTY11a31D371qEygRxn3F3vWPVE1deN0G82T+m5BbCAIF+8lBttifLoFQeV0Wf7R7XbndsXird19/TUfAhgZeZ8H7eoXHYVWwzdBFTedsmhScfg0wfQPTRF7FfLdmBRRo4Q9RzTS8aeKRaeERAsC8TmRto30HJKqMCrhIcMUMuMcmADQJAQ5GJ4fqUMpFdE2mXgqOe+ewXhJFCHoJNJxu4omz7bhScVMyj/BeFPGUrlZIROOYRT4C0C0S0h8qUhHAAC2yGTFpUka7Skfx9/DZFZGnH2gEHxYwnc6EIguBYnDqtTzT3uDTFb3VdrEcZfWk5GUrgZxaI4QCyyaBAME04sUzTvL+dBD+xnOu8qiwrIgV1leEuf9JxhvTzu6Bgm5ThXkmNcciriaS8R2lXySTHvUqXb/lqsNp3Ju0qstx2Z7sfTZGuKsLAFkV4RK0J5k2s4wXYqYsO6WyYq0HUYN06c9XgX5SxcBuIt4gvJ40sJi7MaVONtVhGHmqIrmyLPzm29tqqf7ilwHUtHvVAjO9tksWbJkyQzehd7xo5ppUqW2tlbzLp380rhxitdB8q/4fD6acnsaKfX19c7Ji+QNJU/at7mmWaaZpklHNSY+irq6urzSxbBBy1PqEoJZfFdYoK2tjY2Jw4aGBpurJvKOmme8xWTTmgjq1DApAwAxoo6fIkieEnoF2+NvUDVqCekRiNIY4ip1eb1ekvEI39/65nOyO7hWtyWc0biOogkDooYOBhhujLEDAIZG4xADAH/4sH796y42ZWBNxBGrCEZMlNBNER1k8fBtdixwwzzY2toaTCtCr9drLXzKthgSiv7ztycfjvQo4O5fpWqR5eGojg2DCX1IBHUf3n2nSey5cOpCXzrfIXp6WZXXMtdYh8pi74JTL3WTijO913tDq2qXVxplA5vijgdTIvE4RO6zYOwO3t5/GhpbTrYMjnh78nq9VlwRfRmVRdewArM6rgJBTLbxErYEAL4J5vetwFJ4jghQxMNSSAyoO42Ttl0Xz58PpzXqS5JE7G5tqrAbM6lMiyljkimoQg1m8VhK7xrFwTpdixcbAaGz2/I+ekba0dzc/iDt3SIUCtH+Lv+lArWwjWPOOeMVJjI1imgRsyXKDas+mxoc83vKUfOC/dO2lst3M7LM3L816LdLBedlTIKU05lUNfJM2ZzEBZORXzuHrtk+vnSu63JGF9LhvmH9/uVAu8s9MUQFnWUSIweHFJ90z7qlq+n6L2OyAQMA918NdLrcrqgwoQrHyAHWqX49PDzMxsohAIAUuZ0YsHJHSO+G5t7eXj+k8ZsEjfCmsQGABgAmAMQBIJEdN7L8//gb3FshBGMt81oAAAAASUVORK5CYII=)}.GPisochronOriginPointerImg{background-color:#f2f2f2;cursor:pointer;width:28px}.GPisochronChoiceAlt input{display:none}.GPisochronChoiceAltImg{cursor:pointer;display:block;height:28px;margin:auto;width:28px}.GPisochronChoiceAlt span{color:#999;cursor:pointer;display:block}.GPisochronModeLabel{display:block;margin-bottom:5px;text-align:center}input[id^=GPisochronTransportCar]+.GPisochronTransportImg{background-position:-168px 0}input[id^=GPisochronTransportCar]+.GPisochronTransportImg,input[id^=GPisochronTransportCar]:checked+.GPisochronTransportImg{background-image:url(data:image/png;base64,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)}input[id^=GPisochronTransportCar]:checked+.GPisochronTransportImg{background-position:-196px 0}input[id^=GPisochronTransportPedestrian]+.GPisochronTransportImg{background-position:-224px 0}input[id^=GPisochronTransportPedestrian]+.GPisochronTransportImg,input[id^=GPisochronTransportPedestrian]:checked+.GPisochronTransportImg{background-image:url(data:image/png;base64,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)}input[id^=GPisochronTransportPedestrian]:checked+.GPisochronTransportImg{background-position:-252px 0}.GPisochronTransportChoice input{display:none}div[id^=GPisochronTransportChoice]>div{justify-content:center;width:100%}div[id^=GPisochronValueChron],div[id^=GPisochronValueDist]{margin:5px auto;width:220px}.GPisochronTransportImg{cursor:pointer;display:inline-block;height:28px;width:28px}.GPisochronTransportImg:first-of-type{margin-left:18px;margin-right:10px}select[id^=GPisochronDirectionSelect]{margin:5px auto;width:80px}.GPshowIsoExclusionsPicto{right:0;top:unset;transition:all .5s ease-out 0s}.GPisoExclusionsLabel{display:block;font-weight:700;line-height:16px;margin-bottom:10px;text-align:center}.GPisoExclusionsOptions{display:-webkit-flex;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.GPisoExclusionsOption{background-color:#fee;border:1px solid #a77;border-radius:3px;color:#a77;cursor:pointer;display:block;height:28px;line-height:26px;padding-left:28px;padding-right:5px}input:checked+.GPisoExclusionsOption{background-color:#efe;background-position:0 -28px;border:1px solid #797;color:#797}input[id^=GPisochronSubmit-]{padding:0 10px;width:fit-content}[id^=GPimportGetCapPanel-],[id^=GPimportMapBoxPanel-],[id^=GPimportPanel-]{width:340px}div[id^=GPimportTypeLine-]{border-bottom:1px solid #999;margin-bottom:15px;padding-bottom:15px}div[id^=GPimportChoice-]{margin-bottom:5px;margin-top:5px}.GPshowImportPicto{background-position:1px;background-repeat:no-repeat}.GPimportGetCapPanelClose,.GPimportMapBoxPanelClose,.GPimportPanelClose,.GPshowImportPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH7SURBVFiF7dY/aBRhEAXwvcN/sRBBkUNsA8JhoZ1gJaIIamV91SUSFCxtU1oJQS9i0lnZWShYpE5pIYFUNoJIsLGIYhC9n8XOcZt175Ldu2CzD7bYmfne+97O7nybJDVq1KhRFZjFWlyz/3s/lYFDeIjvhviJRRyZAv8cXqA5pqaBp3gwqdglvA8TW+jgNj5HbAOXJ+Cfw5/gWi0yFWaeRU2/kikcx2P8DpKXOJXJn8RSbKYfT/hEBZ2e3VhGI2dmOVfTKytyC59i8Udcy+RA5v4KNiP8BXdLag1epSxW0cx1ZoCVoi6OIm9FJ+BXdOhYrmaXoYgdxiPsRPoNzk3BVL57pcx08C0WrqM9ou4fQ5lcO9YKrs6EpqqZCcLtWPgkv3CMSFG3msEB2/vewHhThcOiCNmi50mSSJLkXpIk3TIbyaEbHIKzLBr7jO0N3JB+2PAapwtqCl856dR7FemvuFNSu2gAVOpSnvgM3gbJFm7uZQhXDc+lNZydgpmVglhlUw3M44f0jFnC0bwh6XRblJ5FO9JJV0pwjJnB2C4c6aVNhVgbH4JoAxcyufOGfxCbuFhR4+AP1pzgTIj2o2Pzue71MDMBf9fw16dwNOc61cf9yoYypNcNBwYVPvwx3AvxYEZOszDVw8I0NAekLbyLqzU14ho1atQ4KPwF7C8m4Xa+2v4AAAAASUVORK5CYII=)}.GPimportPanelReturnPicto{background-color:#366291;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4AUXDwQyeFmCzQAAATJJREFUSMftliFLBFEURs/dVUQURJvYLCaLGESz1T9gUJsoWARBEBRM/obFIFgMKxtsNhG2aTUIBqOCySLsHssuTNiVGZ47aU8aZr5537vz3TfvwZAhg0K9UL/U5bLMuuyljFXJYXYOHGVuxcAM1VPg5D+/1sgfZsfAWY9HG+ok0AY+gFfgJSI+UzI7tBht9UHdUqtFzQ5M41GdKZLhQmJMa0A9d6VqqDXT2e41fvQxrQCXQK+X7oGnzvUoMA3MAyvAWEbXjIjVIllW1eseM9/vo59SrzK6ljpXtIGq6k0ew0wcdxntTqGFHxEtYBO4zTPBiBDYBX6SGlAdVRud9baeQ99tunrKz6CizubULnYMn8vczprqW+HdIoEaMF5mhRPqe2kVRsQ30Cj7WLI0PJwNnF82zKAINyZs+wAAAABJRU5ErkJggg==)}.GPimportChoiceAlt input[type=radio]{display:none}.GPimportChoiceAltTxt{color:#bbb;cursor:pointer;display:block;font-weight:700;line-height:28px}input[type=radio]:checked+.GPimportChoiceAltTxt{color:#366291}.GPimportInputLine{display:-ms-flexbox;display:-webkit-box;display:flex;margin-bottom:10px}.GPimportInputLine>*{border:1px solid #999;border-radius:0;display:block;height:28px;line-height:26px}.GPimportInputLine :not(:last-child){border-right:none}.GPimportInputLine :first-child{border-radius:3px 0 0 3px}.GPimportInputLine :last-child{border-radius:0 3px 3px 0}.GPimportInputLine>:not(input){overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.GPimportInputLine>input{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0;padding:0 5px}.GPimportInputLine>select{-webkit-box-flex:1;-ms-flex:1;flex:1;padding-right:7px}.GPimportInputLine>label{background-color:#f2f2f2;color:#666;cursor:pointer;padding-left:7px;padding-right:9px}.GPimportGetCapProposal{color:#5e5e5e;cursor:pointer;font-size:1em;height:28px;line-height:16px;list-style-type:none;overflow:hidden;padding:6px 10px;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap;width:100%}.GPimportGetCapRubriqueTitle,.GPimportMapBoxListSourceTitle,.GPimportMapBoxSourceTitle{color:#5e5e5e}.GPimportGetCapListRubrique,.GPimportGetCapRubrique,.GPimportMapBoxListSource,.GPimportMapBoxSource{list-style-type:none}li.GPimportGetCapListRubrique:before,li.GPimportGetCapRubrique:before,li.GPimportMapBoxListSource:before,li.GPimportMapBoxSource:before{content:"» "}.GPimportGetCapProposal:hover,.GPimportGetCapRubriqueTitle:hover,.GPimportMapBoxSourceTitle:hover{color:#000}.GPimportMapBoxSourceFilter,.GPimportMapBoxSourceScale,.GPimportMapBoxSourceStyle,.GPimportMapBoxSourceVisibility{display:inline-block;margin-left:15px}.GPimportMapBoxJsonEdit{margin:5px;outline:1px solid #ccc;padding:5px}.GPimportMapBoxJsonEdithidden{display:none}.gp-json-string{color:green}.gp-json-number{color:#ff8c00}.gp-json-boolean{color:blue}.gp-json-null{color:#f0f}.gp-json-key{color:red}.GPimportMapBoxSourceVisibilityInput{display:block!important}[id^=GPimportPanelReturnPicto-]{background-position:0 0;border-radius:3px;cursor:pointer;height:26px;opacity:1;position:absolute;width:26px}.GPlayerSwitcher_layer{background-color:#fff}div[id^=GPlayerSwitcher-]{height:32px}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{width:190px}button[id^=GPshowLayersListPicto]{background-image:url(data:image/png;base64,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ZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDoyYjNmZWFlMS1hNzM0LTQ0NjItOTM3ZS1jYmEzM2JiMTY1NGQiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NGQ1NTRhMTgtNjk3NC00NDMyLTk5OTEtMjk5YzU1OTY4NWQ2IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NTA1ZjQ3ZGEtMzNjMy00YjRkLWE3ZWQtODEyMDVkOWRjNTk2IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEwOTM3NTE5MDA3NTY1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6N2Y1MGZlNjEtODdkYS00OWM2LWI5MjQtYTJlMmFmNjM0MmQyIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wMy0yMFQxMzoyNToxOSswMTowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5OxzFdAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AMUDBkTuLyY9QAAAhxJREFUaN7t2bFrFEEUx/GYxiBIYneFNmKZ2uJOCDHY6V8g5m9IZ6UGK1trsbawEQJiISHgYSFKwMrCQpGgNiYYFAOSj4VzYV02d7N3M3dR98GxMDcz7/t+7+3u8HZqqrHGGvvXDPNo/a/BT2MTu2jndjaHuQkH/AcDlv22d5jJ5fQkruMLvuIOTo058CqGFt4HAa7mdlq2sQgxgOFHuL7GdG6nXVxEG2u5hYhgeFIY/5aEoZ/TirlZhIhlwN3w3+eRGeoEnkuImuKfDeX/M7wCh2fACnYKi9+iM0TmOmFtz3awErm2FgMehnn3RmYYJfupqqBm9s9jH99xJlklDiNE6udADAOehfHbSRlwvAZEX6e9vYYQYBDDzcKD71IShnDfrFVsMItb2C44eRp+PdsOc2YrwLtYysAAb5Ix4EIpqDJEVTZi5nRxJVKAGIZH/Q5iozLEQPSycZja9Z3GM5zGxzD2ICfDQCGyOB3MsBeuL3AsKUMhs4+xUBhfxEbFvVa+JzewWFi3EPY6yNKIDM8LvnaTM1QcQtZLEOVsVKodnK4nOggdMOB+GPuUjaFPOS1VVERZ7U7Go/CrcNzdw7ncDFFCJHcax7A1ToZe12W1qiwPKbPV1J0iXA7770+KYWINkdDnexn83Jh0U2bsLTFcCwF+wImj0pYbS1MUM6HBCctHsTGbW+R2eN9vJu3z/WUitDDffPJprLHk9gs8Px9eX9iakAAAAABJRU5ErkJggg==);background-position:-2px;background-repeat:no-repeat}button[id^=GPshowLayersListPicto][aria-pressed=true]{background-position:-35px;border-top-left-radius:0;border-top-right-radius:0}.GPpanelBody{max-height:200px;overflow:auto}button[id^=GPlayerInfoClose]{background-color:unset;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAgCAYAAAAFQMh/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGUSURBVEiJ7ZQxT8JQEMf/hxOsDg6GOGtiYgyy0I4Ormj8BBqpZW9HFhNxRKom8AU0tHFRRx1KYlwcQIkrzM4mGnoOtlJKsa/q2N/4ernfu97dAxISEhJ+CYkEyZq1y8w5O9NRUKk44VFMsm7VHIdf2kdb9aicM0JS8BkIuezH3PxgfekKd3cclEqaeQxQmYg2soXt10H74uGnvKkoMROveHFE2JHelusAkz9C0iwDINU9IErRYlTeyIr79vnNgtybBZB3j9ayhZ5b+S3cSvd9F2nY6a46+VfGEeqx1z9mlL9PmJqE4TsoFZSWps9BbHG4PPBdWBpT7Mkva8zOmJzZabYzT3uiUkBguCbUPAy5LMUsQGC4fEpvZdTgFyJanb5qfxKHSbkB4B6g/JccseQC4nCpne6W+gfKtX/V4sgjeyPppgGGb2VwaleLKkA8uphlAFB8WU/sw82JlviJHC4CHgG408oNO90pj6QAQGxXiyoRvPeZwfQclVcIWWspkm4a409lECZJNw1ZaynTYxISEhL+gU/lu7XSwAzyjAAAAABJRU5ErkJggg==);background-position:-2px;background-repeat:no-repeat}button[id^=GPlayersPanelClose]{background-image:url(data:image/png;base64,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TUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDplZWM2OTBlMi05NGExLTRkOGItYTM4Yy02MjI3ZWFhNmVlMjQiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6YmQ3ZTNjMTUtMzcwNy00MDZjLTgxNTYtZjUxZGM0NDFlYjMxIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MTVhNTdhOTYtMDdjYi00NTVjLTgwODUtY2IzMjFlZTdhNDc2IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzE2MjkwMzk5OTk1NTI1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NGM2Y2U2YjItNDVmYS00Y2U0LWExODItMzNhZmUxNmZhNDc3IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNS0yMVQxMzoxOTo1OSswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4dtuOqAAAABmJLR0QA8gDyAPIuRIzMAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH6AUVCxM7RVVcxQAAAPJJREFUSMftlUEKwjAQAJPiE3yH+Ii81IvgG/IFBRPRWkwLib10exQVhawHLRRbU8QEPGSOmyXDJrsJIZFIJBISsS9nuYEtXy5Hn3I4x+SgYS2zcuFNaq1FRMTc1Gmf/CmtBL7wIlcaJLZQGjacY9KWKg2btxz5s7g5wvbGTeXvlT7XYOe6Ei9ypSsZTOqSB5cOyXMD6bfS5Hs90m6M0mCz3NdIfQ0XXJob2HVjHuWukXGN2t8+IIPNdbrcVohICCGkONZpAXrKGLXNOmPUFtl4okwtmtj5et/6ea+zcq40yHalfVeiNEiRlfP4rUYikaA8AMekzozLtupbAAAAAElFTkSuQmCC);background-position:-2px;background-repeat:no-repeat}.GPpanelIcon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48ZyBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMiIgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBkPSJNMTUuMTkzIDUuNDQ4IDguMSA5LjQ0IDEuMDA5IDUuNDQ4IDguMSAxLjQ1NHpNMS42NTUgMTAuMDc1bC0uODQ3LjQ3OCA3LjA5MSAzLjk5MyA3LjA5Mi0zLjk5My0uODQ4LS40NzgiLz48cGF0aCBkPSJNMS42NTUgNy41MjIuODA4IDhsNy4wOTEgMy45OTRMMTQuOTkxIDhsLS44NDgtLjQ3OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTZ2MTZIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:auto auto}[id^=GPlayerInfoPanel]{right:190px}div[id^=GPlayerInfoTitle]{border-bottom:1px solid #366291;color:#366291}.GPlayerAdvancedTools,.GPlayerBasicTools{height:28px;position:relative;width:100%}.GPlayerExtent,.GPlayerInfo,.GPlayerInfoOpened,.GPlayerRemove,.GPlayerVisibility{cursor:pointer;height:28px;width:28px}.GPlayerExtent,.GPlayerInfo,.GPlayerInfoOpened,.GPlayerName,.GPlayerOpacity,.GPlayerOpacityValue,.GPlayerRemove,.GPlayerVisibility{position:absolute;top:0}.GPghostLayer{opacity:0}.GPlayerBasicTools{background-color:#fff}.GPlayerExtent,.GPlayerInfo,.GPlayerInfoOpened,.GPlayerRemove,.GPlayerVisibility,.GPshowLayerAdvancedTools{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKgAAAAcCAYAAAD1EPTXAAAIgElEQVR42u2abWxT1xnHf8dOINhQXqpbRUEkiBECd0IghseLYhKhIAZkCIibfUFFQmpRPoAT8f62lQ8wSBaFJB/8CSEYIJoZglRKhFpFycgaJnspGZ1ZwoJITS23Fw2lyM40x/fsA7HLS4D4ha6p7u+Tfc699/Fzzv885znPNRgYGBgYGBgYGBgYGBgYGIwNhDEEBm+KnTt3zjWbzSuebotGo3+ura3952ifkTHWnL527Zr85ptvmDVrFkVFRWlbYDU1Ne+MGzduh5RyHZA/3NwLfBKJRBp37979bTr9WL7r8jumDHYg9XUg8gEk9Ar4RI+Kxs//sOnbsS5Qs9m8QkppF0LcAJBS2s1mM8CoBTrmIui2bdvkvXv3OHToUNoEevLkyXeBU8Ckl1zyWEq5taqqyp0Oe4X7Lr+LlK+0JyRbb1SXucfS3NTV1c0ymUwlUsoS4Fev8O8/QogOKeVnQojPnE7n39IWQc+dOyfb29vRNC3epigKRUVFbN68Oa2C9/v9MhAIcP/+fcLhMAAXLlwAICsrC7/fL2fMmCHSIM6PXrNYJwkhmurq6spTFemwOF9rTwqa7HsulY8lkQoh+qSUo7k0a1jEJcPXi5QjaF1dnfR6vaxZs4aioiK2b98e71NVFVVVcbvdOByOtAi1tbVVBgIB8vPzycvLo6WlhWAwSGtrK7m5uXzwwQf4fD5UVWXJkiVJ2aupqXknMzPzX8+vdKfTCUB9ff3zt3xnMplm79ixQ0t6WzfLF+zdOL4JAPu+y8/dIb8TJn32jd+Xayktir2X7ggp2/5t0Z3/+LD8v0/3/fzDpnHTwqZ6KURxx4myeT820WeMJoq5XC40TeP48ePEIlYsenV1dcmzZ88CcOLECVwuFwcOHJDHjh1LSjTBYFB6vV7C4TAlJSVkZ2eLWHtLSwsAb7/9NgAlJSV4vV6uXr0qS0tLE7Y3nHNOSuCWt6LR6Hbgt8n49iTnJAF74i2kOWl73+uci1KI300ZNKv2/U2OmODt+5sUfdDslgI7kiNpSpcGgLdGGXEHnE7nlFeO2esecvbsWcLhMMeOHRNPb6der5cNGzZIt9tNRUUF7e3tWCwWdu7ciaZpHD16VCbjYHd3N5FIhNLSUhETJ0AgEKC1tRWApUuXcv/+fTIzM1m2bBmhUIjr168nbE/X9dKR2uvr60eKnrFBLU1eKHLEe+37Lo8QPYd/o6Q0VdF0VJcdQYjfCFgsdXNX4b7mX6zYe2W+1M1/FfBLJFs6qsuOpCnoPQAoLi6ON+Tm5pGbmxf/HuuTUj547aJ+VWdzc7P0eDxUVFTEo2lPT48E2Lhxo7Barfh8Pq5du4bNZqO/v58ZM2aILVu24PF4EhZNV1eXDAQCLF68OB5N/X6/BFi0aJEIBoPx/HP69OkMDAyQnZ0tFi5cSCAQ4Pbt2wnZE0L8bKR2p9MZ3+ZHYHYKkzeivRvHN8W3+RFysNnpUE3H8U1/QpielHyk3qYT/RzIRJgKO6rL/piuLTkmOrPZzPjx4+PzlZWVFf88fJKPizlpgXo8HlRVpaCgQAD4fD48Hg+VlZXy3LlzMiYkn8+Hoijxg1NhYaFQFIX29vaEnAsEAiiKEk8jNE0jEAjQ3NwsL1y4IAGmTZvG48ePsVgshEIhAAoKCoTFYqG/vz/xzS+ZDTOVzTaJKU+5arD30h37HrfrUVbkdoYetSHpRtKdoUdtj7Iit+173K7CvZfupEOgJpPpAcDg4CAWi+WFfovFEj/wpixQm82Gz+ejq6vrmUFSFAW32x0XoKqqaJqGoihPVmtHh9Q0jaKiooScy8nJQdM07t27J5936osvvgAgOzsbRVEIh8NYrVYAenp6ZDgcJi8vL9Hx7EtiDvpS0Gdf4ooWfamHNS5KIbZNGTR/Gs0g2lFdVthRXVYYzSA6ZdD8qRRiG5KL6YygoVDotQJNeYvfuHGjsNlsuFwu/H6/VFUVn8+Hw+Fg5syZcXGuXbsWn89HXl4efr9fnjlzBpvNxurVqxM6uCxatEjk5OTg8XgIBoMyFpVVVeXhw4cAzJw5k/z8fDRNY/LkyQSDQXnr1i1ycnKYP39+ogelq0nMwccpFGKSsCc+TlU0P2QOKoT4GngmgDzNhAkTGBwcfObalA5J7733HoqiUFtbSzgcRlVVzpw5Q0VFBVeuXBEOhwOXy4WqqgDU1taiKAoHDx5M6hS/YMECrFYrnZ2dRCIRFEWhu7ubR48eAbBq1Sq8Xm88Wnd2dmK1WhNeDACRSKQReJzA4A8MDQ01Jjt5elQkZA8YyBzKbEyHcH6oHFTX9a9jW/yECRNe6LdarfHUbDQCTagO2t7ejsPhQNO0Z/LLWB20paWFNWvWpK0O2t/fj6qq9PX1cfr0aSZOnMj69etRFAVFUbh79y75+flJ10GH/XIIIZpGMRZSSumoqqq6nIpf9j2XHFIwSnvC8ZfqTZdJI8W7m7KHhNkNkCGjjraa8mA6n9/Q0LBA1/VbU6dOZe7cuXR2djJnTgEAvb09LF++nDt37sQCzoLKysq/p1QHjVFVVSUAHA6H9Pl8z/TFDkfnz58X58+fT4ujK1euFLE3SV9++WU8/4zlN7G3V6m+SaqqqnLX1dWVCyFOvax+J4QY0HV9a6riBLhRXea277lULoU8BeJl9cIBKcXWdIsTYFiQhbwhTCbTA13XR3VI0nX9Qdoi6P+Tw4cPy5s3b/L+++9TXl7+Rn5zQ0ODEo1Gtwsh1gFzhpt7gatDQ0ONu3btephOe/b9TQrSvF1KnrEnEVczhzIb22p//ZAxysmTJ0OApbi4mLa2tngN9Kuv+om1AeHKykrrT0KgGzZskKFQiIaGBubNm2f8RfDHL9Bevv9H2Mvy+V6n01lgjJaBgYGBgYGBgYGBgYGBwU+F/wFeHcFLHB+SVgAAAABJRU5ErkJggg==)}.GPlayerOpacity input[type=range]::-webkit-slider-runnable-track{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAECAYAAAAZDrhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAwSURBVDiNY/z379//v3//Mvz9+5fh379/DITYxKobKWYxMYwCisBoAFIIRgOQQgAADrTuhXfc36kAAAAASUVORK5CYII=)}.GPlayerOpacity input[type=range]::-moz-range-track{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAECAYAAAAZDrhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAwSURBVDiNY/z379//v3//Mvz9+5fh379/DITYxKobKWYxMYwCisBoAFIIRgOQQgAADrTuhXfc36kAAAAASUVORK5CYII=)}.GPlayerOpacity input[type=range]::-ms-track{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAECAYAAAAZDrhMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAwSURBVDiNY/z379//v3//Mvz9+5fh379/DITYxKobKWYxMYwCisBoAFIIRgOQQgAADrTuhXfc36kAAAAASUVORK5CYII=)}div[id^=GPlayerInfoQuicklook]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJTSURBVEiJ7ZZdSJNRGMd/59Vo9m6jQYKWRV/MQYGBXSStC2/S27YmXYfQZRexZiBhdNE2ke68qq5rY3rRjRFE1Du0KKIcwQYtaGpCH+r01ZrsPV2lc853c0IE+r87z3P+Px7OOc85B7adROFgcHDQAbRWYtR1fdTv9+vF8do1dCFanE7nU6vVagpbWFgglUq1A89NgQB2ux2Hw2EKVBRl45ypswqtq7BYM/oyD8emSE7rgMTVaKPTtac64E99mZtDKRZzeZobVABef55lPDPH6b2W+k0DH72aYjGX51rnEU4csAGQmJhnYCTNmx/qFSBa7DFdw+RXneYGdQUGcLLJxvF6C78M5VQpT5lNkebpzQJdjTaS0zqJifmVWGJynk/fflNXa7wr5Vm3htlsFsMwADjvtDCeEQyMpDm2bzcA6e85LLWwvy434vNFaqLRrnyhf03r9ff3q6qqthXGJhct9W9nrN1LeaUFoK7GeH/YujScmLWGhRCRl5YPl+nrM0oCNyN3INYL3AbxQAtd6AYhAWqqBX6JR14cOndpF8irB90f7Zl45AlssfW0oKdXIu8qQslshbOjba+SneIOxFavGSG6tKAn6u4ZCiBlsHCeFvKu85sd7AkgKg2ZAdCCnpCU3CtXodmNPaqFvF0rVfcMtyINbzlgRa139nrsDDL/DHCAzAL3twQE2kHYQWalFB1ayNuN4FbVwHjYewfkDSlFRzzsHXP3xI6C8rjU3LLv8l9poYurOywJguGjxCn5pz+HNncgFtkoVw2wCfBVUtWO/nP9AYuuwXn+Xm/WAAAAAElFTkSuQmCC)}div[id^=GPlayerInfoClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAgCAYAAAAFQMh/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGUSURBVEiJ7ZQxT8JQEMf/hxOsDg6GOGtiYgyy0I4Ormj8BBqpZW9HFhNxRKom8AU0tHFRRx1KYlwcQIkrzM4mGnoOtlJKsa/q2N/4ernfu97dAxISEhJ+CYkEyZq1y8w5O9NRUKk44VFMsm7VHIdf2kdb9aicM0JS8BkIuezH3PxgfekKd3cclEqaeQxQmYg2soXt10H74uGnvKkoMROveHFE2JHelusAkz9C0iwDINU9IErRYlTeyIr79vnNgtybBZB3j9ayhZ5b+S3cSvd9F2nY6a46+VfGEeqx1z9mlL9PmJqE4TsoFZSWps9BbHG4PPBdWBpT7Mkva8zOmJzZabYzT3uiUkBguCbUPAy5LMUsQGC4fEpvZdTgFyJanb5qfxKHSbkB4B6g/JccseQC4nCpne6W+gfKtX/V4sgjeyPppgGGb2VwaleLKkA8uphlAFB8WU/sw82JlviJHC4CHgG408oNO90pj6QAQGxXiyoRvPeZwfQclVcIWWspkm4a409lECZJNw1ZaynTYxISEhL+gU/lu7XSwAzyjAAAAABJRU5ErkJggg==)}.GPlayerInfoLink,.GPlayerInfoPopup{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJTSURBVEiJ7ZZdSJNRGMd/59Vo9m6jQYKWRV/MQYGBXSStC2/S27YmXYfQZRexZiBhdNE2ke68qq5rY3rRjRFE1Du0KKIcwQYtaGpCH+r01ZrsPV2lc853c0IE+r87z3P+Px7OOc85B7adROFgcHDQAbRWYtR1fdTv9+vF8do1dCFanE7nU6vVagpbWFgglUq1A89NgQB2ux2Hw2EKVBRl45ypswqtq7BYM/oyD8emSE7rgMTVaKPTtac64E99mZtDKRZzeZobVABef55lPDPH6b2W+k0DH72aYjGX51rnEU4csAGQmJhnYCTNmx/qFSBa7DFdw+RXneYGdQUGcLLJxvF6C78M5VQpT5lNkebpzQJdjTaS0zqJifmVWGJynk/fflNXa7wr5Vm3htlsFsMwADjvtDCeEQyMpDm2bzcA6e85LLWwvy434vNFaqLRrnyhf03r9ff3q6qqthXGJhct9W9nrN1LeaUFoK7GeH/YujScmLWGhRCRl5YPl+nrM0oCNyN3INYL3AbxQAtd6AYhAWqqBX6JR14cOndpF8irB90f7Zl45AlssfW0oKdXIu8qQslshbOjba+SneIOxFavGSG6tKAn6u4ZCiBlsHCeFvKu85sd7AkgKg2ZAdCCnpCU3CtXodmNPaqFvF0rVfcMtyINbzlgRa139nrsDDL/DHCAzAL3twQE2kHYQWalFB1ayNuN4FbVwHjYewfkDSlFRzzsHXP3xI6C8rjU3LLv8l9poYurOywJguGjxCn5pz+HNncgFtkoVw2wCfBVUtWO/nP9AYuuwXn+Xm/WAAAAAElFTkSuQmCC)}button[id^=GPinfo_ID_],button[id^=GPremove_ID_],button[id^=GPvisibilityPicto_ID_]{background-color:transparent;border:none}button[id^=GPvisibilityPicto_ID_][aria-pressed=false]{background-position:-28px 0;left:0}button[id^=GPvisibilityPicto_ID_][aria-pressed=true]{background-position:0 0}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{max-height:28px}.GPshowLayerAdvancedTools{background-position:-112px 0;right:0;top:0}.GPlayerInfo{background-position:-55px 0;left:0}.GPlayerInfoOpened{background-position:-83px 0;left:0}.GPlayerOpacity{height:28px;left:28px;padding-left:8px;width:calc(100% - 100px)}.GPlayerOpacityValue{cursor:default;font-size:10px;font-style:italic;left:calc(100% - 60px);line-height:28px;width:32px}.GPlayerRemove{background-position:-140px 0;right:0}.GPlayerOpacity input{-webkit-appearance:none;-moz-appearance:none;background:none;cursor:pointer;display:block;height:100%;margin:0;overflow:hidden;padding:0;width:100%}.GPlayerOpacity input[type=range]:focus{box-shadow:none;outline:none}.GPlayerOpacity input[type=range]::-webkit-slider-runnable-track{-webkit-appearance:none;height:3px}.GPlayerOpacity input[type=range]::-webkit-slider-thumb:before{height:3px;left:-200px;pointer-events:none;position:absolute;right:50%;top:0}.GPlayerOpacity input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background-color:#505050;border:2px solid #fff;height:17px;position:relative;top:-7px;width:9px}.GPlayerOpacity input[type=range]::-moz-range-track{height:3px;width:80px}.GPlayerOpacity input[type=range]::-moz-range-thumb{background-color:#505050;border:2px solid #fff;border-radius:0;box-shadow:0;height:13px;position:relative;width:5px}.GPlayerOpacity input[type=range]::-ms-track{border:0;border-color:transparent;border-radius:0;border-width:0;color:transparent;height:3px;width:80px}.GPlayerOpacity input[type=range]::-ms-fill-lower,.GPlayerOpacity input[type=range]::-ms-fill-upper{background:transparent;border-radius:0}.GPlayerOpacity input[type=range]::-ms-thumb{background-color:#505050;border:2px solid #fff;height:13px;width:5px}.GPlayerOpacity input[type=range]::-ms-tooltip{display:none}[id^=GPlayerInfoPanel]{overflow-y:hidden;padding-bottom:10px;padding-top:10px;position:absolute;top:0}.GPlayerInfoPanelOpened{display:block}.GPlayerInfoPanelClosed{display:none}div[id^=GPlayerInfoTitle]{font-size:1.1em;font-weight:700;margin:auto auto 10px;padding-bottom:5px;text-align:center;width:calc(100% - 52px)}div[id^=GPlayerInfoQuicklook]{cursor:pointer;height:20px;left:10px;position:absolute;top:-2px;width:20px}div[id^=GPlayerInfoClose]{cursor:pointer;height:28px;position:absolute;right:10px;top:-8px;width:28px}div[id^=GPlayerInfoDescription]{font-size:.9em}.GPlayerInfoSubtitle{font-weight:700;margin-bottom:4px;margin-top:10px;padding-left:35px}.GPlayerInfoLink,.GPlayerInfoPopup{background-repeat:no-repeat;color:#999;cursor:pointer;line-height:20px;overflow-x:hidden;padding-left:23px;text-overflow:ellipsis;white-space:nowrap}.GPlayerInfoLink{background-position:0 -20px}.GPlayerInfoLink:hover,.GPlayerInfoPopup:hover{color:#333}.GPlayerInfoLink a,.GPlayerInfoLink a:visited .GPlayerInfoLink a:focus -.GPlayerInfoLink a:hover{color:inherit;text-decoration:none}.GPlayerName{cursor:move;left:28px;line-height:28px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 56px)}.outOfRange .GPlayerName{color:#aaa}div[id^=GPlayerInfoContent]{width:280px}[id*=GPlocationOriginPointer]{background-repeat:no-repeat}[id*=GPlocationOriginPointer],[id^=GPlocationStageAdd],[id^=GPlocationStageRemove]{background-image:url(data:image/png;base64,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)}[id^=GPlocationStageAdd],[id^=GPlocationStageRemove]{border:none;cursor:pointer;height:28px;width:28px}.GPlocationOpen{background-color:unset}.GPlocationStageRemove{background-position:-84px}.GPlocationStageAdd{background-position:-56px}[id*=GPlocationOriginPointer]+.GPlocationOriginPointerImg{background-position:-1px}[id*=GPlocationOriginPointer]:checked+.GPlocationOriginPointerImg{background-position:-29px}.GPlocationStageFlexInput{max-height:28px;opacity:1}button.GPlocationOriginPointerImg[id*=GPlocationOriginPointerImg]{border-bottom-right-radius:3px;border-right:1px solid #999;border-top-right-radius:3px;width:28px}.GPlocationStageFlexInput{margin-bottom:5px}button[id^=GPshowMeasureAreaPicto-]{background-image:url(data:image/png;base64,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);background-position:-78px;background-repeat:no-repeat}button[id^=GPshowMeasureAreaPicto-][aria-pressed=false]{background-color:rgba(0,60,136,.5)}button[id^=GPshowMeasureAreaPicto-][aria-pressed=true]{background-color:rgba(0,60,136,.7)}button[id^=GPshowMeasureLengthPicto-]{background-image:url(data:image/png;base64,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);background-position:-24px;background-repeat:no-repeat}button[id^=GPshowMeasureLengthPicto-][aria-pressed=false]{background-color:rgba(0,60,136,.5)}button[id^=GPshowMeasureLengthPicto-][aria-pressed=true]{background-color:rgba(0,60,136,.7)}button[id^=GPshowMeasureAzimuthPicto-]{background-image:url(data:image/png;base64,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);background-position:2px;background-repeat:no-repeat}button[id^=GPshowMeasureAzimuthPicto-][aria-pressed=false]{background-color:rgba(0,60,136,.5)}button[id^=GPshowMeasureAzimuthPicto-][aria-pressed=true]{background-color:rgba(0,60,136,.7)}.GPmeasureTooltip{background:rgba(0,0,0,.5);border-radius:4px;color:#fff;padding:4px 8px;position:relative;white-space:nowrap}.GPmeasureTooltip-measure{font-weight:700}.GPmeasureTooltip-info{font-size:.75em;text-align:center}.GPmeasureTooltip-static{background-color:#fc3;border:1px solid #fff;color:#000}.GPmeasureTooltip-hidden{display:none}.GPmeasureTooltip-info:before,.GPmeasureTooltip-measure:before,.GPmeasureTooltip-static:before{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid rgba(0,0,0,.5);bottom:-6px;content:"";left:50%;margin-left:-7px;position:absolute}.GPmeasureTooltip-static:before{border-top-color:#fc3}[id^=GPmousePositionPanel-]{width:280px}button[id^=GPshowMousePositionPicto-]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD2SURBVFiF7ZbRDoIwDEUZ36oPRP9GMVF+k1c5vpQ4l24CFkfITsIDY2l70+6yqirsDITcdcSocxdQKHxhjTMEHIE7ED0CgAMuwNkyt7kgEfOUsJ0mSsRcZc9gLsoSoOWTG+C8707WfNqcNSfxRsmnA+qgMyOP1GjOSaxioCklKuyejRhJOtLLYyZI4muilosJC4y89957P2H/LMEJUapZaGzxpuAmrv3Gn0YuNIBFXZqaUMUodszNwjVbUWuQEDPatmrpueuOQu4fq+WoSbwD76uPas1BpwbgZJV/rctpI52KupmIaoHGMndh86wxcpZs1/4KO+UFLQ+rEigj9BAAAAAASUVORK5CYII=);background-position:1px;background-repeat:no-repeat}.GPmousePositionEditTool{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAYAAAAzI3woAAAB40lEQVR42tWWy07CQBSGi8+gPoJLE4SitqC+AioLF9qLuDC6bKuuSNS4QTo1ConWF4AWgz6IlzdB94A9pVNunZluiDjJJA3MdD7+/z9n4DjGyKh3PZjcrIyZAFrOlxfTKrrmVesDA/nPknmVLNwssPbnNPdI0JxHrlSaoyxL5Az3fl1rnFJflpIrhYxi/WCQ8ckr6Hv1AO3SYETD6WTPmj1Bd2wCVELUnQdYIxpulwgFMLxidfsHWy9J6XYjBNk3N3kVtYLvuiQowXCqcBCeou7WAGAUxq0Nr4E9kTZhZdISMkgZSsnmOVaKYJ9vxciBA6VCZQbAjadIFSEzWBlWRtKy9eqDepmi5WMUqmkLWr0aC8ZXQrG+4BCwiQUE9uGgs0I7DBALhhRekmWs9ZNQzQkoQa/bZGWmDDSeGZheVT0zWoJng4I+41q2Vixv+ZbJ6J1mWRRMRNAJHdkLaD8XqMXMkIzeAqDLuDCQmfHPqFBQ9lDKcBCUNskyXkIXQdm3SWVPKW1aS5gc0OzCxugphasJJtgUKqNYHV4x81NtjGGPkSo7WCnC1dFeOUTbpP2eOkV8dVD6TKgUXB1Z3T2hZgSsgExBaEMQ7xkys7RXmmdfro3j4FcnaKGHNbD2//39+EugX0KgD3FX5kMVAAAAAElFTkSuQmCC)}button[id^=GPmousePositionPanelClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD2SURBVFiF7ZbRDoIwDEUZ36oPRP9GMVF+k1c5vpQ4l24CFkfITsIDY2l70+6yqirsDITcdcSocxdQKHxhjTMEHIE7ED0CgAMuwNkyt7kgEfOUsJ0mSsRcZc9gLsoSoOWTG+C8707WfNqcNSfxRsmnA+qgMyOP1GjOSaxioCklKuyejRhJOtLLYyZI4muilosJC4y89957P2H/LMEJUapZaGzxpuAmrv3Gn0YuNIBFXZqaUMUodszNwjVbUWuQEDPatmrpueuOQu4fq+WoSbwD76uPas1BpwbgZJV/rctpI52KupmIaoHGMndh86wxcpZs1/4KO+UFLQ+rEigj9BAAAAAASUVORK5CYII=)}.GPmousePositionCoords,.GPmousePositionLabel{display:inline-block;line-height:20px}.GPmousePositionLabel{font-weight:700;width:100px}.GPmousePositionCoords{width:110px}.GPshowMousePositionSettingsPicto{bottom:5px;right:0;transition:all .5s ease-out 0s}.GPmousePositionSettingsLabel{display:block;font-weight:700;line-height:16px;margin:auto;text-align:center}.GPmousePositionSettingsSelect{margin-top:5px;margin-inline:auto;width:180px}.GPSexagesimal,.GPSexagesimalsec{border:1px solid #ccc;border-radius:4px;margin:0}input:read-only.GPSexagesimal,input:read-only.GPSexagesimalsec{text-align:right}.GPmousePositionSexagesimalLabel{font-size:1.2em;padding:0;vertical-align:middle}select.GPmousePositionDirection{border:1px solid #999;margin-left:2px}select.GPmousePositionDirection:disabled{-webkit-appearance:none;-moz-appearance:none;background:transparent;border:none;color:#000}select.GPmousePositionDirection:disabled::-ms-expand{display:none}select.GPmousePositionDirection:disabled::-ms-value{color:#000}.GPmousePositionAltitudeUnits,.GPmousePositionUnits{margin-left:5px}.GPmousePositionPanelEditTools{position:absolute;right:5px;top:20px}.GPmousePositionEditTool{cursor:pointer;display:inline-block;height:18px;width:18px}[id^=GPreverseGeocodingPanel-]{width:280px}.GPshowReverseGeocodingPicto{background-position:1px;background-repeat:no-repeat}.GPreverseGeocodingPanelClose,.GPshowReverseGeocodingPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH0SURBVFiF7dY/bE1xFAfwvlZMhFSim0i6mdnNnUWiOqGShqlsSPyJ0VQV+jqUDsQgNrFIECxi0MmmibRTWRph0I/hncfPde9z7/Uakdzv9ju/c77nfN/33vPuwECDBg0a9AsYwUW8wTo+4QUO/evZfgGOYQlfsYpbGM7Je6sY4xX6TUaPwR45LczgdBUhLdyNgdbxEstxXsFoJv8sNvAYV3ENnyP/dQUx36KmnScq5roeORulReF4FD3B7oRsOuLP0Eryd2BfhmOm+4OU7DmbcfZGpkcrYilmywpaCmdGcu7uB9n+P3A8jLzlkj27j1KKNgYzznQxl+diEfkXvCq4mwzCoz3qzyeNr5Rq2ltU1r3yYoJ4Fe9Ty5O7y0E6VlB7IWn8CFtLNy4WVV9MkN6M4ulMfK/OSl7D9py6gzovKzyoKqaEqNxlUYZwWGeb0XlnTuJSiIHxAve6z/m7umISQdl3BuZrCQrSUTzPEK7hCM7gHrZkaubxEe1NEPN3LiXkBzCBMWyL2GKQL2Ko7vAlxczlxOqLKmg8hNtB/sMp7MJh7OmjmO7azl3p/RbVdWohYk/jvFLVOZv5x1pR1AIm4vwhabazItcJPz99cldzxqkNnOqXlqKhzul8YdypWT8VTv22QZOcVuRM1Z+0QYMGDf53fAdKmTphX0Bz5wAAAABJRU5ErkJggg==)}.GPreverseGeocodingReturnPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4AUXDwQyeFmCzQAAATJJREFUSMftliFLBFEURs/dVUQURJvYLCaLGESz1T9gUJsoWARBEBRM/obFIFgMKxtsNhG2aTUIBqOCySLsHssuTNiVGZ47aU8aZr5537vz3TfvwZAhg0K9UL/U5bLMuuyljFXJYXYOHGVuxcAM1VPg5D+/1sgfZsfAWY9HG+ok0AY+gFfgJSI+UzI7tBht9UHdUqtFzQ5M41GdKZLhQmJMa0A9d6VqqDXT2e41fvQxrQCXQK+X7oGnzvUoMA3MAyvAWEbXjIjVIllW1eseM9/vo59SrzK6ljpXtIGq6k0ew0wcdxntTqGFHxEtYBO4zTPBiBDYBX6SGlAdVRud9baeQ99tunrKz6CizubULnYMn8vczprqW+HdIoEaMF5mhRPqe2kVRsQ30Cj7WLI0PJwNnF82zKAINyZs+wAAAABJRU5ErkJggg==);background-position:0;background-repeat:no-repeat}.GPlocationHighlight{background-color:rgba(255,200,0,.25);color:#222}[id^=GProutePanel-]{width:320px}.GPshowRoutePicto{background-position:1px;background-repeat:no-repeat}.GProutePanelClose,.GPshowRoutePicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE3SURBVFiF7ZZBTkJBDEDnE125MhyHHV5FF0RvI58EOIYuTIw79S5wB3lu+vU7tp8Z6IiLectJp+1L/xRCqFQqfwawATan7sMNhFP3McQoPgAugEcilDiLJXCe0wRwI/d+9dOLaYB74C4n8Rh417rsS+wRAngGLjNkPuTeWpMSmbnE7JKlgCerw0whgIfEmm10bwE0kcwiimlThcbAm4NQzoS6T6nPGhjxczIdKwY+Ta2A+YYShQ55Q5ZUPL08mYTCX0LeGFLlZKSoNaFXYOqQ35JSl4WGl/EkhPDilKtJPDuePRO6OjK3tgAOmlJO0SJvyJBZKWe+UiWEBmS6ta2udK/iJYTK/bAmFC8hdM33Xx91NUeT2gG3XsXdhSTvTCZlbjORaoGZZ+EiQp6cZcZvi3RRqVT+DZ/jc6+cH/zb+QAAAABJRU5ErkJggg==)}form[id^=GProuteForm]{padding:15px}.GProuteStageFlexInput{max-height:28px;opacity:1}.GProuteStageFlexInputHidden{max-height:0;opacity:0;overflow:hidden}.GProutePointLabelP{margin:2px 0 5px}.GProuteComputationLabel{margin-bottom:5px}.GProuteOriginPointerImg,.GProuteStageRemove,.GProuteTransportImg,div[id^=GProuteStageAdd]{background-image:url(data:image/png;base64,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);font-size:0}.GProuteFormMini{max-height:58px}.GProuteExclusionsOption{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAA4CAYAAADuMJi0AAAE60lEQVRYw+2YWWxUZRTHz/fd7y4zzAzTbaAdpgtQWsBiYVxYGpcEMCwRQkx48KHGhKg0WhESNYglwSUgWCKGTaMRBF4MwShpECUshlJqay2U0LCUwrRAp+0Ms997v8UnEl8Gp9Ppg2Z+bzfnn+/knHvud865AFmy/GfZVVZW/vvb9eduNn7Wc+ixGQ3/pm+UcO735VP3/rpsyc39TudHyXQ4maF61cqfZi97ocbjmVi6YGHNxoOeor3JtDskae606uqzFfPmvRqLxFg4EetIpiXJDJqqOHBwEEjIDyXjiVw4t/S1XD34TKs/MX+z4EEAgK0SwhPtjh+qq6tXBjGOtTY11a31D371qEygRxn3F3vWPVE1deN0G82T+m5BbCAIF+8lBttifLoFQeV0Wf7R7XbndsXird19/TUfAhgZeZ8H7eoXHYVWwzdBFTedsmhScfg0wfQPTRF7FfLdmBRRo4Q9RzTS8aeKRaeERAsC8TmRto30HJKqMCrhIcMUMuMcmADQJAQ5GJ4fqUMpFdE2mXgqOe+ewXhJFCHoJNJxu4omz7bhScVMyj/BeFPGUrlZIROOYRT4C0C0S0h8qUhHAAC2yGTFpUka7Skfx9/DZFZGnH2gEHxYwnc6EIguBYnDqtTzT3uDTFb3VdrEcZfWk5GUrgZxaI4QCyyaBAME04sUzTvL+dBD+xnOu8qiwrIgV1leEuf9JxhvTzu6Bgm5ThXkmNcciriaS8R2lXySTHvUqXb/lqsNp3Ju0qstx2Z7sfTZGuKsLAFkV4RK0J5k2s4wXYqYsO6WyYq0HUYN06c9XgX5SxcBuIt4gvJ40sJi7MaVONtVhGHmqIrmyLPzm29tqqf7ilwHUtHvVAjO9tksWbJkyQzehd7xo5ppUqW2tlbzLp380rhxitdB8q/4fD6acnsaKfX19c7Ji+QNJU/at7mmWaaZpklHNSY+irq6urzSxbBBy1PqEoJZfFdYoK2tjY2Jw4aGBpurJvKOmme8xWTTmgjq1DApAwAxoo6fIkieEnoF2+NvUDVqCekRiNIY4ip1eb1ekvEI39/65nOyO7hWtyWc0biOogkDooYOBhhujLEDAIZG4xADAH/4sH796y42ZWBNxBGrCEZMlNBNER1k8fBtdixwwzzY2toaTCtCr9drLXzKthgSiv7ztycfjvQo4O5fpWqR5eGojg2DCX1IBHUf3n2nSey5cOpCXzrfIXp6WZXXMtdYh8pi74JTL3WTijO913tDq2qXVxplA5vijgdTIvE4RO6zYOwO3t5/GhpbTrYMjnh78nq9VlwRfRmVRdewArM6rgJBTLbxErYEAL4J5vetwFJ4jghQxMNSSAyoO42Ttl0Xz58PpzXqS5JE7G5tqrAbM6lMiyljkimoQg1m8VhK7xrFwTpdixcbAaGz2/I+ekba0dzc/iDt3SIUCtH+Lv+lArWwjWPOOeMVJjI1imgRsyXKDas+mxoc83vKUfOC/dO2lst3M7LM3L816LdLBedlTIKU05lUNfJM2ZzEBZORXzuHrtk+vnSu63JGF9LhvmH9/uVAu8s9MUQFnWUSIweHFJ90z7qlq+n6L2OyAQMA918NdLrcrqgwoQrHyAHWqX49PDzMxsohAIAUuZ0YsHJHSO+G5t7eXj+k8ZsEjfCmsQGABgAmAMQBIJEdN7L8//gb3FshBGMt81oAAAAASUVORK5CYII=)}.GProuteModeLabel{display:block;margin-bottom:5px;text-align:center}.GProuteTransportImg{content-visibility:hidden;cursor:pointer;display:inline-block;height:28px;width:28px}.GProuteTransportImg:first-of-type{margin-left:18px;margin-right:10px}input[id^=GProuteTransportCar]+.GProuteTransportImg{background-position:-112px 0}input[id^=GProuteTransportCar]:checked+.GProuteTransportImg{background-position:-140px 0}input[id^=GProuteTransportPedestrian]+.GProuteTransportImg{background-position:-168px 0}input[id^=GProuteTransportPedestrian]:checked+.GProuteTransportImg{background-position:-196px 0}div[id^=GProuteTransportChoice] input{display:none}div[id^=GProuteTransportChoice] .gpf-radio-btn-group{justify-content:center}select[id^=GProuteComputationSelect]{width:100px}.GProuteResultsDetailsInstructionHighlight{background-color:rgba(255,200,0,.25);color:#222}.GProuteResultStage{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex}.GProuteResultStageLabel,.GProuteResultStageValue,.GProuteResultsValueLabel{display:inline-block;line-height:18px}.GProuteResultStageLabel,.GProuteResultsValueLabel{color:#666}.GProuteResultStageLabel{width:60px}.GProuteResultsValueLabel{width:65px}.GProuteResultStageValue{-webkit-flex:1;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.GPshowRouteExclusionsPicto{right:0;top:unset;transform:translateY(-100%);transition:all .3s ease-out 0s}.GProuteExclusionsLabel{display:block;font-weight:700;line-height:16px;margin-bottom:8px;margin-top:8px;text-align:center}.GProuteExclusionsOptions{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.GProuteExclusionsOption{background-color:#fee;border:1px solid #a77;border-radius:3px;color:#a77;cursor:pointer;display:block;height:28px;line-height:26px;padding-left:28px;padding-right:5px}input:checked+.GProuteExclusionsOption{background-color:#efe;background-position:0 -28px;border:1px solid #797;color:#797}button[id^=GProuteReset]{background-image:url(data:image/png;base64,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);background-position:-224px;opacity:.8;transition:opacity .2s ease-out}div[id^=GProuteResultsValueDist],div[id^=GProuteResultsValueTime],input[id^=GProuteResultsShowDetails]+label+label:hover,input[id^=GProuteResultsShowDetails]+label:hover{color:#366291}div[id^=GProuteResultsStages]{margin-bottom:15px}div[id^=GProuteResultsValueDist],div[id^=GProuteResultsValueTime]{display:inline-block;font-weight:700;line-height:18px;width:80px}select[id^=GProuteResultsComputationSelect]{width:100px}div[id^=GProuteResultsNew]{background-color:#366291;background-image:url(data:image/png;base64,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);background-position:-224px 0;border-radius:3px;cursor:pointer;height:28px;opacity:.8;position:static;transition:opacity .2s ease-out;width:28px}.GPfakeBorder{border-bottom:1px solid #999;display:inline-block;height:14px;width:60px}.GPfakeBorderLeft{margin-left:15px}input[id^=GProuteResultsShowDetails]+label,input[id^=GProuteResultsShowDetails]+label+label{cursor:pointer;font-weight:700;line-height:28px;text-align:center;transition:color .2s ease-out;vertical-align:top;width:130px}input[id^=GProuteResultsShowDetails]+label,input[id^=GProuteResultsShowDetails]:checked+label+label{display:inline-block}input[id^=GProuteResultsShowDetails]+label+label,input[id^=GProuteResultsShowDetails]:checked+label{display:none}div:has(input[id^=GProuteResultsShowDetails])+div[id^=GProuteResultsDetails]{max-height:0;opacity:0}div:has(input[id^=GProuteResultsShowDetails]:checked)+div[id^=GProuteResultsDetails]{max-height:200px;opacity:1}div[id^=GProuteResultsDetails]{overflow-y:auto;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s}.GProuteResultsDetailsInstruction,.GProuteResultsDetailsNumber{color:#666;display:inline-block;line-height:16px;margin-top:4px}.GProuteResultsDetailsNumber{font-weight:700;text-align:right;vertical-align:top;width:22px}.GProuteResultsDetailsInstruction{padding-left:5px;width:calc(100% - 30px)}input[id^=GProuteSubmit-]{padding:0 10px;width:fit-content}[id^=GPsearchEngine-]{align-items:center;flex-direction:row}.GPshowSearchEnginePicto{background-position:0}.GPsearchRadioContainer,.GPshowSearchEnginePicto{background-image:url(data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWa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);background-repeat:no-repeat}.GPsearchRadioContainer{background-color:rgba(0,60,136,.5);background-position:-26px;border:2px solid hsla(0,0%,100%,.4);border-radius:4px;box-sizing:border-box;color:transparent;cursor:pointer;height:32px;overflow:hidden;padding:2px;position:relative;transition:border-radius .5s ease-out 0s;width:32px}.GPbuttonsContainer{padding-left:5px;padding-right:5px}.GPsearchRadioContainer:hover{background-color:rgba(0,60,136,.7)}.GPshowAdvancedSearch,.GPshowAdvancedSearch:hover{background-color:#fff0}.GPshowGeolocate{background-position:-102px;margin-right:5px}.GPshowGeolocate,.GPshowSearchByCoordinate{background-image:url(data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWaM/yOfV8DXAx0Ab8B2kTklRSVfBdwRERuSvGaYlHAKmf4hH3PcMbuA24WkTJCO78kAwdeJ6mSvws4At5NKV4zltzAKyq3YknyGsfz5IAHQETeNGt9PDI/rgJsVNVuYI8DnmeBRhGZIiKTgflACM4LgRdUtVtVb4vB52pV3QK0OuA5bOHUWuBnwBzgjFmfacCtqrpFVdMK5aqG8/gJyVWC9UCNiNSJSJ0ZnvV2bpXNTapwjcADkcG3gL7I2IPgX5HyPY6J3MCrCz7x5FYMQGGBYEcUPA6ITgE7IvPj0g3ALEdAz1qYts/hsxdYDOx2vOYs4Csx+FwRuP9BPoeBex0Ps9XO3QUcdPhMBz5eodXCZY4SzBORrSLS78itX0S2Ws4CsMpCvTjA2Qh+QQMH3hTwChq4YI1/GxVJfo7cwNsKXv/Qea8/GBuSm4V6sQAUVsG6R/g3oQLWJbybLwA9zvH6QkUCG/u2M9QDfD4Gn20Ra9kRFj5U9UvAAuDfBiA37u2ztWnQu0Ca1bFbHZkdLBqjB+dCi7ohDQMHnhNCe2kYuLMiN/AOFp/mlSS3YgAKlXr2CH/mffZ9PMmdiMjRwO0D0DtCbrPPwgaAB0Tk5Rh8TpgVBTgdeh5VnQDcbuObzNu+4uRFz9vaigpFrNoWJr5tJSwJ51xuaxMbuMJFAq9cAzdGIZyfWG62tmQA/cG+l6vq1CIPcRqwPDI/qYUBEEuKSyl6SEp8WoB64CXgJ3GqlGcpbGu2Hk+oxCfcsM3mnFLVUxED0u8kyQPWKiqhaejlGLhczzO8gQPv5cqRnN9sPZ6BoYKB1x+Zcyr45Nx/jtysV9RcCoDCsOV8oMOqblHwdDih27aEClFLUAYFmDxCvtHoVORWqurFMfjU2HqAamC2qk4GvmtjrU7PZI7NAWhS1RkpKP5UgvL/rDR3N4wRvTtkTPzRNHCFFH9QbuBXpNyG6wNtB1Y7IdojlhPNNs8zCB4R+UZCxdpjSWhIzwGLo3mQqk4EngE+4Qz/RUQaSuTTSlCiDumIFQg2WGj3SRFRC+nWAXOdua+LyOYywPNp4H7gXDMSe4Gvikh3Gdd0G381US9UYP55Tg4Yo8Hq1wKHGOrzNBb3Qv58J0zuCQo33tEywFNQbuB1l3HNHLnle6G8+TlyK9RgHQ7Va4HtTpFgLXAPcEvE89yuqp2q2pDgjg5EjhcAv7e+EKoqqjo/Ah41ID8cg89rkePLLGbXMFE0j+aCR4E3LDRJouRTVPV+4HfASTMUnwIuAA6p6orEVi8AwH47XF3CknDO/pi7E550wGPVSn9iAUWbaJVMtwj164RKPgX8onIDf0VyAHmJ5VZsd4KUoAgLCPo8Cw04xy3n2SYiu1W1E1hk44tF5FAMJas2RV0IPAS8N1IBE+C8CBCuE5E/xlTmCfbzEqAZWAp8APgb8Fvj4yrGSaA9TiPVQrNLRaRLVT9K0BiebUZonYi8Y/MmWeFiHfA4sEpEemyHRFepzU4rSYcVw3nFKnGq+mHHUH053q4Ev438rVy7A+Pj7bWQrtHA4xq4vwPt4N1RAo8q4FLwusDPkxt4VtDx8+QWbCfy64Gu4ZqdEX45citeifNz5FZsV0LZsaqqftA8xAVJQORcp5RO9yIReabM/7sU+JU96F8Chfpc3xeRl2JedznwU3vI3yMoi39dRHYWmf9FS9Dftvn3AC0i8nAMnj8mtyHYFoZzFrattusC3CciLTG9QSIDB14MA+cXlBt4O4vMLyg38GJEJH6e3IbCOT9PbuC1xM6BxhpEqnouEMakxwj2WkkQ96a6mXQn8FmL7Z+y2Dq0pGGxZE3cDbKq+menRPogwSbb3hHWvB94wrwhwAsi0hSDZ6Vt5VkEXkwD5+fJbeT9bn6e3MBrisFz1LfyxI3Ju4CrgH9amJckJ1K7qeeBBhFpFZHvAA2WnLaXC3hVvcrA029hwGYReVxEHgM2A0dJUJJX1Y+QuyGxr5TNoiJyOMJvfpyX+EREzassc2L7GY4S7AeWiUhLeeAZDN1wDNxdwN0EG0sLzSlFkfPkVtpmUS9PbhbKlZoLqXmVYeUWzBk+NJyQWjkviP0/A3QaiO4l6FCXuv50ocRORHoi1bek4KmyBw5B0/TuCJ8+4M6El2+yvKnL8qo/xVj7V4K9eBeZgWgCXowp+w6CdsMovs4waOAuI3id4aSB4E7zBgcTGLizKjfwOoCOcl5nSJ1UtcGqcnVUEKlqvb2m/WoaL+ZVKo2vF+rGkpK9UDch7b9huc/iShOPiLyoqnOBuebtxit9LQNDJreMMsooo4zGO/0fA38ddpBWgIQAAAAASUVORK5CYII=);background-repeat:no-repeat;transition:border-radius .5s ease-out 0s}.GPshowSearchByCoordinate{background-position:-76px}.GPsearchInputReset{background-image:url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=);background-position:0}button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]{border:none;max-width:0}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]{border-top-right-radius:0}button[id^=GPsearchInputReset]{border-bottom-right-radius:5px;border-top-right-radius:5px;height:32px;width:32px}button[id^=GPadvancedSearchClose],button[id^=GPcoordinateSearchClose],button[id^=GPgeocodeResultsClose]{height:32px;right:0;top:0;width:30px}button[id^=GPcoordinateSearchClose],button[id^=GPgeocodeResultsClose]{background-position:0 0}button[id^=GPadvancedSearchClose]{background-repeat:no-repeat}button[id^=GPcoordinateSearchClose],button[id^=GPgeocodeResultsClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAAgCAYAAABO6BuSAAANsHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHja1ZlZdhy7DYbfuYosgRMIcjkcwHOygyw/H6pbsi3buce5L4na6mpVV3EA8A8oB/vXP2/4Bz9FUwxVtLfRWuSnjjry5EOPr5/5vKdYn/fnp+z3d+nH8yG/z8fMqeJXvv7s7X39x/n0OcDrMPkk3w3U3zOk9eMXo77H718Ges9cfEX++bwHGu+BSn59kd4DzNe2Yhtdv9/CstfxfOykv36Dv9X+47J/+luJ3hHmKTlbSSXyXsp7AcV/ayiTD5X3VAYXpqKfZ0rR92AE5Fdx+vwZrOj6UusvL/ohK5+fvmSrv1cfvmar5vcl5UuQ2+fxl+dDki9flM/58/cz1/7+lH88X95xD/FL9P333tPvs2d2MWsj1O29qY8tPp+4bjGFT90DS2tR+RWG0Oc1eHWqelMKJ+64eO00UiZdN9V00kw32XPcabPEmi1k5UPOO5fnZC+aR97F81f9lW7WMsopnSTvJ+215M+1pGfaEXd4ZuvMfBKX5sRgiVv++BX+9IZ7HQopeSz7KwGsK2cPNsvwzPk7l5GRdN9BlSfAH6+vP57XQgbFo+wQGQR2vYZYkr4xQXkSXbhQOL4wmPS8ByBETC0sJhUyQNZSkdRS1Jw1JQLZSdBk6QAoLzKQRPJhkbmW0shNzz41t2h6Ls2SOR04D5mRCSkNnHUyNElWrUL9aO3U0JQiVUSaqHQZMltptUlrTZuT4tSiNahoU9WuQ2cvvXbprWvvffQ58iiQpow2dPQxxpzMORl5cvfkgjlXXmXVJWG1pauvseamfHbdstvW3ffY8+RTDvxx2tHTzzjTklFKVk2smVq3YfNSareEW6/cdvX2O+78zNo7rT+9/iBr6Z21/GTKL9TPrHFW9WOI5HQinjMSlkNNZFw9BRR09pzFnmrNnjnPWRwZVEhmkeI5O8kzRgarpSw3feQu5FdGPXN/K29B6w95y/9t5oKn7g8z93PefpW14zK0n4y9UOhBjQX08b31mft0sfvpGH73xZ8e/98Gct6kEE7VXXXumma1UdolYq0vG1dJdWpX6glnSV3JBLYrPdab21rIQxevtui3WBfz4x5nKeJShhhAiHXtVJAA/67XQOnlm+Tepo6S55aTyz15bWa/prOOdM8+DGOmiWq48+hy66K7gOJ642phMWg6tZUVj+Z9bQ+VDEaa1As06p4pg7lRM6Ur5Q5pxUtKb0JWYkGa+oCP2qH82+onN9Z62jy37iF5n4mrENYxRA4uoUpjfl9ZiQjU1iI310aFV+MtFNn5LKPS9ZzTt+2eDuubXSY4XGD2YWhNI9bmxR2jlGm9+LbicNj2rRaOoM9pKopXbK9Vtl0WpckYl/Be7m1awBHIkqYG2lJbiZWPdQ8AFwEbFzkapd/CIKPZzbY3AQVREU3tHgxCdwBH6uTpdtVNntoklvGQiq38cYZpULukpWg7285dfJP6E4jTKAhrf1kKmyyy4bAba/VbuaSqEV2Ze96491hEa9qsvcFc20mOzekxdlIoFZ3vNVbyf0OmuKY2Fk/wVc+c/S6+MijNIwTzsNI8GiyUdyS+7r5Z1HzK//MYvp5ADusqzVc/F9UPCRclTRiUTcBr2xabxbKaLjK9kdoIdcZAGLbKZkNObqOdpuJ5OQsD624pXi5gG5BYozqZBk4sV4fBdYsozNTZTKhzX2JN3orZPK2hd1190Hogclg8W00biuYk9ZqmrWFkrBEBJr7Nzsx6Qh3zcVKZBGOVutzBfQooligA6RvD7gth5tSng9oS9Zya2apyqnSWaydIgZDHxCXMC71H0FG5E7LQlh2jOmD5zW0lz75Jdo0giRjUDrQrEWOgMsK8GBC2uhj/nAqupVpZt1KebCZTDsPWusO5SPea+ex9bwbzZtdmHr2ilD0wg7Qujtt+RBDSxHJ8ToqLENUJCtAjO+thnnrwRHOoNkTuyfTCf0oMX7L/cSyIjBNWlmmGV3YPNw3ucq5aEIES60/uotUJJwIUvdNGWmaulOdAZlqtrYPTekC2tA+0i6ktY2KcuHLpua65BFylrBKyRDO0uUA5gJTbiN2zGmfR1/1yjC1Rl3vdbrFTJwZ3HRsxY8lL29NCh2tG9t3arRGuFKrQIC3qaEZkswgdG+wuGZBlKKXPQykeoXbxB5JnGmPloOpW3WQjtsDqPuphBRO8LseKBOujGtdZGFk3/rEY6m1cpB7MNBbXQT+5unaHFywS3yVVaD2J4ZVXdVGZEIWygbOqrcJSqKp8Z/Qkb1v4EWg/WO0OpjxXM8HaFu+DtDifQQmp6W6LbPd4d8ZszIkrifD0KXvphAw5VAo1zFQnUK7sWKB0mPHaetH6oX7OZM7i7AK3M2Y5dnZFFWlfWuwSIXk0MY2QqWMwV1+c/uui+iwu5kxpcHtePbNxZeJbqtd2oIVuDiLMYJ81Gu18hmYX38HuBKM1L6WGMOKMiPOC16mWdKAY5GM0TcLugonn8R6A0wpMhSds6A/2/iIazIVMwcKHauA7CAGp4vNmOrbXydfDwylguNg5Fu6A2nIm0tCwnmQCfqftgwDwamsauMf1alqYU9jcNDsveI7byQMTkTtVBfQaqaev6A2ErO5sB5lk/lorVYSVpTsAYRc4jdDTTMqGk1beflvoJDd3Ur0REaH5cy12l4l9hMEuYaHZrBQfV1zkY1B5u5VEfKguYKea8M9hQy/OrhG+cVaNSGl+dP2Obq3YyVQ8lntQZWjAwSdz5VQc56CtrULt5gTWom/Tn4j8dNSK+MAVvmJLD5BXpLoAC9Q1y2OPoJhescABS1tm1Ef5XX5RAVBnoiBRHUf3OhwLoe+2iNjLZJENBDtRvlRlt54C+Lho1BkKgz4ciCETA5fcfc/Ba6MkTMYkLtlf3eHtHla94UJIOLX1IJzScquN1YANHvNwvRF+qMA5ckXMDFU32XDrSH6BEDAqA8OOwb/egZAyFn+grnMpHipqEfmDsruLq5gIFJ0BBtXhTseMhoE7kTXnSEBrXvHuYTagcwdS7K/M8NRVHkZ33iayQ+j7CTumk2JjpIuUy2X5o68NQfXHwrjzxLgZvRp0mGlUsE84k4VeDdoZHAzcG2yR0N2gTG1CjbI3w5eWR2gMmWc33r5g34ARsOdEfGK3lynRe9bWGltrbMXIe12ONI0cjIFt6KKVssQBG8ewFGXLL1cN5ogPqbYNQeF+WrC7V3InxA4yzpiSGii8O4azUOCR3M6VNHBaOAziiEJhnjKSUopiRVBXrg0QYSbpmKmS00s58c71d4G+k63HgTZPd20QHOooVHBA9RNm4tkp9P2I8oVXdByCNatctIwM02JS2AU/IhHPBzCejhb/6470xLDgg+trfo3GWOSAusm41Io8umVHgmnu3W2ZUvQvIL7Vjzmpbjykyx9hFjpOyTAkfuUQYcFzFfrfOGUgGwrwoRFA0K5bs9tx5qlcVg+kgOANHZuKIyHMDHegYhydZVQfLI6x0YNEZ4CDzGmo67pRcOgZln08QgO/kmkNCaWayb1DmZOGg8qbrQ3pcNPYMaM9VL6bei1IOipwe1K8hHsUOl57gH5GKN49R/DHJN4A4NPpt4m3FwU8RoOF/8dw08ZNqKfUDQCl0xHyJSqO8l48b0Dg1FW8YkE7HdkDOqeQ7iBxZbAX8jMcoThEy85eyDl87pb20idSmAEqwkBipr08S1pCq8KYmKrlnV17mQAYBBvgxXP6fWyAJFQ3Ay4CjWJJeHzAQDsO/R1FDHHj1+lB0F8aPugbFUZW/Lp0E+X4hId3guq9o7dQMLxT7cAaQE30NgNbyRTkKzPrRE8RL5RwoJhP43B/K+rhm6oXh83zQPxR9Y1o+BMWXxiYRtBxGUu8fST/eH0qzDsOvK9HIqyUquXJ+jC+BAr/hKJhiRmwVRQVCkix+cO5Jv5gj2oTeACDfxXlZAv0REZPG31Gf+wiXlL4BmS0Yg3ws3SK++Yzap044IJwOAfAw1SWuMgZf+SNr7kzjOKsUZKvpAEI+m06BJpIjAXGb/ppgoiPp0Vwl46NObGj/lBKWggqm2XbQSQKiukKwtQ6PazoJ/gb6D/GT9uV7aiYpdOkeEu8hjYPBr7nJK5k8bQQbtISTbMluiynJaN26UeWO5Dm4ja8o1meTEQfBGc3IFinXfIYWBcSukY483nKXK1iqA+mbdJoT2qe3k+zP1Ro3lMLDg+3isnv4s/K6I9Of6slxqWs8J8fsJAjKoEw+gOW1ShYYIt+9OKPV/BusCwSQ8MSsAFIC+2A5vx+vMLmP3rqll49dX711NAabhzo4IM7rY+3qHAbeOmQP7EkyzQVTJ5YudxNZ339AWUmB2j2Ib9wY7/f2RT0MNGiIICv5wDBHwTU8u1BgNLZlO+eA8xvzwGQ+AcFJ7oRIZu7Qs7UPKvN9LTnaaIgeI0YGoV8JnWNH1BXUjgGCyp0ZcfZKnKebggng6ktwNxVGmGM4S8fe+F6M2v1/6mYFboBTrS5/uQQ/XbvOdngpDlGbbTQmyVnHAoBD7nonw1IUjnXC9pHhPnzqP78EdOIAUve+xawZu5OSwmH+sZxTcAsTeus3vPRaQg1tfz/NIZ1700plkszOuNsTlyAhSlGpe2gh8eO0K7jla40UiTr5R9lxP3Hz/3C339w+D86EGb0Im7/BttRpspwKv7mAAABg2lDQ1BJQ0MgcHJvZmlsZQAAeJx9kT1Iw0AcxV/TSkUqHdpBxCFDdbIgVcRRq1CECqFWaNXB5PoJTRqSFBdHwbXg4Mdi1cHFWVcHV0EQ/ABxdnBSdJES/5cUWsR4cNyPd/ced+8AoVVjqhmYAFTNMjKppJjLr4rBVwQQQRhAQmamPidJaXiOr3v4+HoX51ne5/4cg4WiyQCfSDzLdMMi3iCe3rR0zvvEUVaRC8TnxOMGXZD4keuKy2+cyw4LPDNqZDPzxFFisdzDSg+ziqESTxHHCqpG+ULO5QLnLc5qrcE69+QvDBW1lWWu0xxBCotYggQRChqoogYLcVo1UkxkaD/p4R92/BK5FHJVwcixgDpUyI4f/A9+d2uWJhNuUigJ9L3Y9scoENwF2k3b/j627fYJ4H8GrrSuv94CZj5Jb3a12BEQ3gYurruasgdc7gBDT7psyI7kpymUSsD7GX1THojcAgNrbm+dfZw+AFnqKn0DHBwCY2XKXvd4d39vb/+e6fT3A1ABcpnPawB+AAANGmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=)}button[id^=GPadvancedSearchClose]{background-image:url(data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWa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);background-position:-50px 3px}form[id^=GPsearchInput-]{width:280px}form[id^=GPsearchInput-] input{border:1px solid #999;border-bottom-right-radius:5px;border-top-right-radius:5px;color:#333;display:block;font-size:1em;padding:0 30px 0 5px;width:100%}form[id^=GPsearchInput-] input:disabled{background-color:#ddd;color:#999}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]{max-width:280px}.GPsearchInputText{height:32px}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{margin-left:33px;position:absolute;top:35px;width:310px}[id^=GPautocompleteResults-]{box-shadow:0 0 6px #000}dialog[id^=GPgeocodeResultsList],div[id^=GPautoCompleteList]{background-color:var(--background-default-grey);max-height:140px;position:absolute;width:280px}div[id^=GPautoCompleteList]{top:35px}dialog[id^=GPgeocodeResultsList]{border-radius:4px;overflow:hidden;position:absolute;top:35px}div[id^=GPgeocodeResults-]{background-color:#fff;max-height:140px;overflow-y:auto;position:relative;width:100%}.GPadvancedSearchCodeLabel,.GPadvancedSearchFilterLabel,.GPcoordinateSearchLabel{max-width:105px}.GPadvancedSearchCode,.GPadvancedSearchCodeLabel,.GPcoordinateSearchSystemsLabel,.GPcoordinateSearchSystemsSelect,div[id^=GPadvancedSearchFilters]{margin-top:15px}.GPadvancedSearchFilterInput,.GPadvancedSearchFilterLabel,.GPcoordinateSearchInput,.GPcoordinateSearchLabel,.GPcoordinateSearchSystemsLabel,.GPcoordinateSearchSystemsSelect,.GPcoordinateSearchUnitsLabel,.GPcoordinateSearchUnitsSelect{margin-bottom:5px}.GPshowToolBoxPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAlqAAAJagFGUcfpAAAAB3RJTUUH4AsKDCgkqrnTSAAAAw1JREFUSMe9ll2IlVUUhp9vnEintH+FulAyI+uihClKjSZtQJAJrRnDoKt+oCIIjSIrDCokKXQiCqkuTMFAJtQLCwItMsQbURmjiRIK+pmSoSjJ/JmnC98je6ZzjmVMCzbnO/vstd691nrf9R0YA1NRn2SsTX1E/UM9vVc1OdwC3A7cBLQD1wE/Al8AA0BfVVXf1vFbAmwCjgPjq+oUREsDkBuA3UBfwL4EXgS2AgJLgIPqw2pV+HUCG4B9/yTtF9Rj6pvqBeo4db7apU5N/VGXqofVHeo09Ub1N3Wdeo/6Z1m60SAL1KPqrQnWqR5Qt6pvqYfU1WqbWqnvqt+p89Sf1T61pSmQOkH9Wl2ZLDaru9T2gLapH6mvB6RXHVRvU79Rd6rnqteoH6vHGwEtV7/K4ZXq+qJME9VP1JfzfZU6lMwPqnvVSfltkvpMyl8X6L3ccmIyayuAdqjP5flZ9deA7M7lpqjjC5+eZkAH1AfT5LVxaFUfV39JoGXq72qHul39Qb0ypX5fvaIRUEnv6dHIZGAwe28Ac4DngQeAl4DFeZ4NLAAOAb3ZP1nEG6HREmgAmAEcBmYCTwFTgaXAEPAK0AMsBO4G7gT2A08Aj9YKM+qzbul61Q0hQ7+6L43tCVW71RXqCXVRUaJhdaOnbHIY2d2Mdd3q96F5e0TYFV3dl/4Nq/cHZE7m2avqLQXQeTlzohFQm/q5+k4C3ZFAD6mL4/h0frs6U2FzMpgdoEujq371ZCMg1GvDqjXqkTCuI1mtyZnLQv9dYWItO9VLwsC7GgIVYPfGaYU6K5rZmJtPUPeoAwla85lbALWcEagA61Svyoj5QD0nAbaoP0U71AJFvKoX50J/A2odDVRVFWo/8Fk00p13y2tAJzAv+6cvVmjGYo3QUWudjC4EPgSORjNHgGXAY3kfzcoqbcaZ9NM6eoID24CLMhGGgA5geabFzVn1bBAYBs4HLm/Wm3HqttB2ZtHof7va1U/Ts7oZvQ10AWuB67PO1vYAc+tls9qxsZETtinf/6PV/gX9b/YXjLd1o+WqCcMAAAAASUVORK5CYII=);background-repeat:no-repeat}.GPzoomIn{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHlsZT0ic3Ryb2tlOiMwYjZiYTc7c3Ryb2tlLW9wYWNpdHk6MSIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTcgMTJoMTBNMTIgN3YxMCIgc3R5bGU9InN0cm9rZTojMGI2YmE3O3N0cm9rZS1vcGFjaXR5OjEiLz48L3N2Zz4=);border-bottom:unset;border-bottom-left-radius:0;border-bottom-right-radius:0}.GPzoomIn,.GPzoomOut{background-position:50%;background-repeat:no-repeat;background-size:auto auto;height:32px;width:32px}.GPzoomOut{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHlsZT0iZmlsbDojZmZmO3N0cm9rZTojMGI2YmE3O3N0cm9rZS1vcGFjaXR5OjE7ZmlsbC1vcGFjaXR5OjEiLz48cGF0aCBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwIiBzdHlsZT0iZmlsbDojMGI2YmE3O3N0cm9rZTojMGI2YmE3O3N0cm9rZS1vcGFjaXR5OjE7b3BhY2l0eToxO2ZpbGwtb3BhY2l0eToxIi8+PC9zdmc+);border-top:unset;border-top-left-radius:0;border-top-right-radius:0}.GPzoomIn:hover,.GPzoomOut:hover{cursor:pointer}.ol-custom-full-screen button{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAA8CAYAAABxVAqfAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAxRJREFUWIXtmD9PVEEUxX/XXRaDWlvb8gUsBEMICpKowYbY2Vr4J5JQWWxtZyxsaFEE5Z8xWIDRIAklUT+Bn4FFwSXH4s2D9TEzb9ZEE3FP9+bde8/M27Nz7gx0cNxhxQFJfcCFQPwO8NTMmoWcKnAb6AnkbZjZx+hMJNXlx56kgUjegIvxoV6MPxGdxSEawIiZvQ8FuHeDwHZKwRTifeCGmb0rC3Sf8yrQLIstI94HKsA9Sd1lxSR1AXeBqsv9LeIGMAIsAqPAfIzckb4AxoAV4IqrkQYnrgMhSapJWnIimYnkPXcxS5JqbiwXXD2FeFLSYGGsJmlO0lYkb0vSy5y0ZbxP0kQKca00qE38iZod/IP4W+LybSD3PX+nLkkzkjYjxTddTFdhvB+4k0LcA7xt2UC6gFlgHPgaInbvxoHZnNzVWAPORPIOZpjbYkPSkKQF9/ymbMssxF5yNby2GCOWpGYKaYC82VLnCHGZO1XIXOaxme2WEZvZD+AJh64WRIofV4CFouB8cEJaLiNNJYaC4AKkA2RCOpVS0NfsDQFDgfgd4JGZfS/knAQmCTd7q2a2mjKhDjro4BjDZxYpBlKEd8uU9FnSYrGgpIt4TJ3siDNUiO12zf2XZGLgE3AdeJWTu8JrwGlPfA+wkpO7nHngGhA8BByBpIqkaeelK5JGY6ZeaB5GJC2757liK9QuedTUA81DlDRoi2a2D0yRnXVL/bUFefMw5RqD9oidkF6TnXXbRYXsWBuy16CqcyElmXoAvwiuiCOrcb9LL/AwUHDDM7YKfAvE90r6EPvsHRxP+LrMGlnH6NsawdMxlnSm22Sd6V7pbCT1S9qVH3VPfOgacldZk38E3v+xma3TxvVgAA1g2NVKI3bkG2TXg9EbugD2gbHY3Wdsy6wBD8i2v9K7yRbke/uEshNGOrEjnSNb8SvgMmnXgw0ykT0DhskOe0FyH/F8i7VV3VguuLonvt4qJElVlytJ8z6OkPOcBaaBW/ltvJmtKzuqng+s9EBIZtaUdBPYBc4lrzgGn7m33WV08F/gJ/JO7y3zOGA+AAAAAElFTkSuQmCC);background-repeat:no-repeat}.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=false]{background-position:0 0}.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=true]{background-position:0 -30px}.GPshowOverviewMap{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyA1LjcgOS4zIDNsNS40IDIuNyA1LjY3My0yLjQzMWEuNDUuNDUgMCAwIDEgLjYyNy40MTNWMTguM0wxNC43IDIxbC01LjQtMi43LTUuNjczIDIuNDMxQS40NS40NSAwIDAgMSAzIDIwLjMxN3ptMTIuNiAxMi45NTYgMy42LTEuNTQzVjUuNzNsLTMuNiAxLjU0M3ptLTEuOC0uMTE4VjcuMjYybC0zLjYtMS44djExLjI3NnptLTUuNC0xLjgxVjUuMzQzTDQuOCA2Ljg4N1YxOC4yN3oiLz48L3N2Zz4=);background-position:2px;background-repeat:no-repeat;background-size:auto auto}div[id^=GPlegends-]{display:none}div[id^=GPcatalog-]{display:block}.GPshowCatalogPicto{background-image:url(data:image/png;base64,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bS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDpjMmUxMjdjOC0xOTM1LTQ0OGEtYjYxYy0xY2RkNjI3NWZkYzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTFkYjFmNjktN2M0MC00MDgxLWJkZWEtN2YxMzFjODQ3OTg4IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NzdiZmRhYWMtNmEyNi00MTY5LWEzMWItYmZlN2Q5NThlOGU3IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzI5MTg5ODYxNDQxMDI1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZGI2YWQ2MTUtZWQwYS00MTEyLTljYjQtYTIyZDkwMDkwMGNkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0xMC0xN1QyMDozMTowMSswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5TF0SEAAAABmJLR0QA8gDyAPIuRIzMAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH6AoREh8BMSlSAgAAAXpJREFUWMPtl0FugzAQRf+Peo9ygC57AI7Col1EzR1ortBAKiWLpCdJcoduugoXaX43RnIpYEPdQCW+xMYaBj9G8z0GJk26qvjbBJJiABGAWwAnAAXJYlRAkhKzQVsnkkcrJgKwAxDXpHgG8DYkWBXorJ9KbBi5tRti7zcN68eaNftv+2w2kVSQXHr8wEcA9wDmJC8NMQTwAuCDZBayej7VKXXwgZH0aeK3kmZ1MJIyE3ORtAgJFKubIke+vBK/NtWwYdaVmDwkUNIRKHbko6RV5Z2tpFmlMqU2dVW8WoU8czZB5cFgTK98exwu2KuHHFDBYFy2nXoCJR2/2wS19YXpRWyseO8RmrpMwfOwJ64h00+HSkV3xjjKtbMPVIMB9KpSsPOppgfPPr3U4mbZoFANxtIXZtZm6aMd9wc/WP8A6MEafTYto8/KGn2eul4fUnPHCaGl6xohaQ7gDsCCpFqG0wzAO8nXEOdQX8VjuD7sA36jwKRJk/6NvgB/JgixGmzy6AAAAABJRU5ErkJggg==);background-position:0;background-repeat:no-repeat}dialog[id^=GPcatalogPanel-]{width:280px}.GPcatalogPanelClose{background-image:url(data:image/png;base64,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bS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDpjMmUxMjdjOC0xOTM1LTQ0OGEtYjYxYy0xY2RkNjI3NWZkYzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTFkYjFmNjktN2M0MC00MDgxLWJkZWEtN2YxMzFjODQ3OTg4IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NzdiZmRhYWMtNmEyNi00MTY5LWEzMWItYmZlN2Q5NThlOGU3IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzI5MTg5ODYxNDQxMDI1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZGI2YWQ2MTUtZWQwYS00MTEyLTljYjQtYTIyZDkwMDkwMGNkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0xMC0xN1QyMDozMTowMSswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5TF0SEAAAABmJLR0QA8gDyAPIuRIzMAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH6AoREh8BMSlSAgAAAXpJREFUWMPtl0FugzAQRf+Peo9ygC57AI7Col1EzR1ortBAKiWLpCdJcoduugoXaX43RnIpYEPdQCW+xMYaBj9G8z0GJk26qvjbBJJiABGAWwAnAAXJYlRAkhKzQVsnkkcrJgKwAxDXpHgG8DYkWBXorJ9KbBi5tRti7zcN68eaNftv+2w2kVSQXHr8wEcA9wDmJC8NMQTwAuCDZBayej7VKXXwgZH0aeK3kmZ1MJIyE3ORtAgJFKubIke+vBK/NtWwYdaVmDwkUNIRKHbko6RV5Z2tpFmlMqU2dVW8WoU8czZB5cFgTK98exwu2KuHHFDBYFy2nXoCJR2/2wS19YXpRWyseO8RmrpMwfOwJ64h00+HSkV3xjjKtbMPVIMB9KpSsPOppgfPPr3U4mbZoFANxtIXZtZm6aMd9wc/WP8A6MEafTYto8/KGn2eul4fUnPHCaGl6xohaQ7gDsCCpFqG0wzAO8nXEOdQX8VjuD7sA36jwKRJk/6NvgB/JgixGmzy6AAAAABJRU5ErkJggg==)}.GPtabsList{background-color:#f1f1f1;border:1px solid #ccc;display:flex;list-style-type:none;margin:0;overflow:hidden;padding:0}.GPtabList{flex:1 1 0px}.GPtabButton{background-color:inherit;border:none;cursor:pointer;float:left;outline:none;padding:14px 16px;transition:.3s}.GPtabButtonActive{background-color:#ccc}.GPtabContent{border:1px solid #ccc;border-top:none;display:none;padding:6px 12px}.GPtabContentSelected{display:block}.GPlabelActive:hover{background-color:#ccc}.GPcatalogButtonSection{background:unset;border:unset}button[aria-expanded=true].GPcatalogButtonSection span.GPshowCatalogAdvancedTools{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.GPshowCatalogAdvancedTools{background-image:url(data:image/png;base64,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ICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmM1NWM2ODRkLWY2OGQtNDExNy04ZGYzLTAwYWMzMjQ4YTY5YSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjNmYWM4YTllLWJkMTUtNGJiOC04ZGQyLTkwZDUyMjE0YmFmOCIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1QOlRpbWVTdGFtcD0iMTcyOTI0NTAwMjg0NjU2OCIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjMwIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjcwMTNhZTFjLTcyMjktNDJmZS1iMzAzLTU3NGFmMWE3ZmQxMyIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMTAtMThUMTE6NTA6MDIrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+UnHxogAAAAZiS0dEAPIA8gDyLkSMzAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+gKEgkyAorMuigAAAIkSURBVFjD7Zc/aBRBFMa/t39EFEMQTrQ2CiIi+K+Q3ZA+CLJ7nqWQwlRJGs3ddUnlZdUiXJEqINjE9e5UjFWag9sEbNRGhGB6MXKgQQPxZp5FLhLCXXbXXSQH8ytnhuF9771v3yygUCgUCkVXKOrB6/dqJzQD42A5DNAZAGBglYA3UlB55ZHztWcFWoXaLTDPAzjW5cgGMUYanlvpOYFtcc8inGVi5A6aSAptS50/761co+QAAOxCba/GH6TJgcaD3HqSoKx89RMx15tH5MTHqdzW7r3zU/6h47+0WSYaCmbcc2F3aftuGhjfpy075asPrI8lTjtjgYlG+zf1JbvoZ3aW7aKf6d/Ul5hoFIyFxBW08tUPAC7Giw3vl2fcS0k1tq3xBEATpN3UmLYkxCsAp8C4G3ju0yj3aCH7pzstNkrO3zbtkLGBNLwTlJznIG1wO2uyLiFWAJggzYoqDgCM8ILE7i9OXL0dDx7+PZH5iast0isAYLDIrh8VTXuyMpeKBwFei28fWkvTg8KACDzXCjzXEgZEXA+GCKTFf/gwv07cnp47DaLbBFxhqb+zCi8uD+ZfXmCpvyXgGhh3As+dTixQCioD2IgR23ezZZYPkgdDB709Wc0ywY8y6Jkpu+w5tTQH9dB9/+RuD9Yf5r6k/lTbFsnzAPV1qxwzjaQt7r8+tu2inwHrY8wYBnC2vbzKoEWzZZbrj298U/8uCoVCoegx/gAQwd9vpqyHDwAAAABJRU5ErkJggg==);background-position:-26px 0;display:inline-block;height:28px;vertical-align:middle;width:28px}#header-search>label,div[id^=GPterritories-]{display:none}div[id^=GPcontrolList-] .GPshowOpen>span{color:#fff;display:block;font-size:24px;height:24px;line-height:24px;pointer-events:none}button[id^=GPshowControlListPicto-][aria-pressed=true]+dialog{width:200px}.GPcontrolListPanelClose{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIRSURBVFiF7ZbRS1RBFMbPbLq9ldjaY88Zkv1JQRqt+Wf0aCrYBuY/UkRQRFQvQQax+JipEUIoQdHq/nrYb3K8zl33zl20h/vBwnLOmfPNN+fMmWtWoUKFMwPwjiO8Pu/9xOAGDQRqZnYYmLrOuQvD31I51AYJAqbNbNnMfgXm38AyMFV2E8AssKpDy4txwAowX4booogO1WYdYEu/jmwHIqqXEOPzr8VEScwjxXSTREnMSyXZBGaAscA/DtyTOIDnKaKAFsfxGHCB38kWopUiaNVffmC8T9wE8FaxKwk8vpVCrAG1TGU8nsSqeBrJLbXBl5gY4C7wOSNqW+13Y4iistUrLkYE/lTu5PhfAR8ytjmteViYMF9UeTFK3qZ36S9HfJeAP8CDjL2hqq4nkVpfUdFhEcNIjv2ame045/aA22Z2PeMbNbOn4QLn3C6wK38ZxN7Ggd/LKICfwKb+tyMntgGcOAzgO/AjkTM2AJKqFEvuW27s9Oh/aybUch8T+PKmWdaWJiro49kCa+a1ZmFIYvzYjo70ooJu6rS/Ao0B4q8C31TVyYJcZ/aw+iRv+omSmPeKXUrgmeHo0yc6mjOV6gL3i/IYUAdeKMkW0ASuBP6G2mxHMc+A0cJEvVxNVSp3mklUC2imcPgkdSU5CE5nWyK6snXofXUniTkXAFPAIvAJ2Af2gHVgoeidqVChwv+NvxOT737B3Fc7AAAAAElFTkSuQmCC)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div{align-items:center;column-gap:1rem;display:flex;flex-direction:row;padding:.5rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div:hover{background-color:#eee;cursor:pointer}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button{flex-shrink:0}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button:hover{background-color:rgba(0,60,136,.5)} +.GPlayerInfoLink a:hover{color:inherit;text-decoration:none}.GPlayerName{cursor:move;left:28px;line-height:28px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 56px)}.outOfRange .GPlayerName{color:#aaa}div[id^=GPlayerInfoContent]{width:280px}[id*=GPlocationOriginPointer]{background-repeat:no-repeat}[id*=GPlocationOriginPointer],[id^=GPlocationStageAdd],[id^=GPlocationStageRemove]{background-image:url(data:image/png;base64,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)}[id^=GPlocationStageAdd],[id^=GPlocationStageRemove]{border:none;cursor:pointer;height:28px;width:28px}.GPlocationOpen{background-color:unset}.GPlocationStageRemove{background-position:-84px}.GPlocationStageAdd{background-position:-56px}[id*=GPlocationOriginPointer]+.GPlocationOriginPointerImg{background-position:-1px}[id*=GPlocationOriginPointer]:checked+.GPlocationOriginPointerImg{background-position:-29px}.GPlocationStageFlexInput{max-height:28px;opacity:1}button.GPlocationOriginPointerImg[id*=GPlocationOriginPointerImg]{border-bottom-right-radius:3px;border-right:1px solid #999;border-top-right-radius:3px;width:28px}.GPlocationStageFlexInput{margin-bottom:5px}button[id^=GPshowMeasureAreaPicto-]{background-image:url(data:image/png;base64,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);background-position:-78px;background-repeat:no-repeat}button[id^=GPshowMeasureAreaPicto-][aria-pressed=false]{background-color:rgba(0,60,136,.5)}button[id^=GPshowMeasureAreaPicto-][aria-pressed=true]{background-color:rgba(0,60,136,.7)}button[id^=GPshowMeasureLengthPicto-]{background-image:url(data:image/png;base64,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);background-position:-24px;background-repeat:no-repeat}button[id^=GPshowMeasureLengthPicto-][aria-pressed=false]{background-color:rgba(0,60,136,.5)}button[id^=GPshowMeasureLengthPicto-][aria-pressed=true]{background-color:rgba(0,60,136,.7)}button[id^=GPshowMeasureAzimuthPicto-]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAAAaCAYAAABb9hlrAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4AsJDhwxbX+/1AAABhFJREFUaN7tmn2wVlUVxn+HLyHU4k4KaApCQuXtYxQtU/zAmCBjqGaKKUljajJMKkcyE8mKorCyD83RgoaQLCuxUQNNtMAyHWFEKbIcFSNSRstKlCi8v/557nS6c997z/sBVxrWzJ7zvmevs87e69n7WeuscwqVfVK/FEWxR+7Tb5+rd7+oqBPU+9Xp/88AHQIcuLeBA7weuBV4CFiqTq4X3a7tKPUm9Xj1WvWUGnp7sp2lPq8+ph5WQf8A9bi0Y1s9njp8e6L6V/UM9VB1Rv6f0AxAp6r/VH+mblJn9TE4Hwg4y9SN6h/UEb1cM1W9T92qPrynAYreKer2gDJOfShjP0v9i3p0MxT3FDAceEkfs8Q5wNXA+cCZwGTgGeA2oK2H61YBnwB2ARf0Aa29CfgpcCfwrlDzs0AHcAewBLi5GYAGAJcHpL6Sj2YMH85xDfAIsAwwvF4rJo0JsI8ChwID9yA4U4GbsoiGA1uADwFnB6ydwFuB6xuluMHq+Pwerw7tRudidbW6PPzaalr7eGhtm/ryZEGb1OnqXerBoa61av9urp+i/iDtRzXm0FKKS9+00Noa9Zfq+9WXqkenf2TmcVkzMQi1TZ2nDuumb7S6Qx2r7gq/thKceQFnS4B6RB2VST+bSZOYpLp/DTsD1X67Iy7W8OM71KfVdeq31IvUtlL/yxKDFjWbxaFekMl/pJu+w+KoN6gdyU5aNfnPBPSH1flJCs5NwEcdkuOcgHhuD7a+rl5R5/1fnFYZoJybkUV7r3qJukAdUOoflTkt6AGHofUAdGEAurBG/2fVe9Qr1fNaBM4X4vQH1c9nx0xI35ElvfOjd3Yv9paG4uoZw5fUhVUByv+ZWVS3qN9W7+7M0NI/Rt2szi+da1NPC0N8X/19FvtBjQD0OfXxTHZ2Ddprtn0lTn8gK//W7NCuep+MXpXUv16Axqo71ed6Y4WS72ZlPD9U71A/ph6iTiwtrC3x48XqioC1S/2tek2umaj+Tp3SCEAjQikrShw7pEXAFOrlmeSv1avUn5QmWG6XZGIzK9ruDqABWQDv7Eb/ev8rSyrY/2DGc0Oo7d3q4JJfX6n+OQwzKhQ4R31jjaTlu+q8ZinucPWJBqijFjhX5T5r1MUBZ3I3ugvVf4fraRCgNvX23K8jgBfpm+j/yq5UVHqyvy7jvlY9U92/5NP2+KkzRp6uru/F3hz1hmZrcX8E3pbWWfg7Drgrzyj71VEHXJJng9XAtpzfnmeEsnwZmAvMAK5r8BHlFcA9wKTOgjTw6dgbCny1i35/4Iu92DwDGJ8Hz+8VRbE99Pe6nPtUURRXRLcd2NiLvfXAMa1KEsZk2y7LalTdoO5XYWX3D/eq3hyK+KZ6cijoVSXdbyQuTGtgh3buoIHq36wtW3voO7mXGPQa9Un1PaWq9ZPqrC4+vkad28t4X5Sde3CzAA1JwNsenb8nLR9UwWn94jQT025TF6kn1aC/HXnopAmABtu4rK2QxR2bAuiS1NhmdrMJNlScx0Z1ajMUNwN4EFgADAEWA+OAS4F/Vbh+RGysAg4C7gZWAmu70N9i4L3ANOCWPiw3HV7hxd29oftJwOyiKJZ3Kf30D8VurHC/dWWaG1DHQI8BvgacmP9rgPOA++qc8BPAjcDxcf7g2Cpz/1Lg7cDpwC/2krerdwJH1FA5EtgBbK1gbn0KrZUBOgD4DvC+BNZHUx3+cYPz6UjB8EZgBXBSlwLtcuAtwJuBX7Wqhgk81uC1f2rB/duB31TUXZ8qfK8Adb50nwsMSna1ELgs1dhmZGd2yCrgdmBidtZ1oYnJybhaJTuB0X24ydor0hvABmCkOrwoim09ATQ+x4GhnIuAx1s46OeSTq8Ohz8FjAROyypqhYwBXpuY2YpdOLtBym1P2l1FdgCbElJW9gTQpcBYYP5ujAPPAFOAn+edzSTg/hbaXwScUHrGakY6mgD61Vl844DNCROdx3/0kCisLF4gn10Vydye31s+Bqn62VX8OyWJwuhSOwIYBjzdBbDNwARgWFEU018oAO110ux3cfH7gV0AKwM4qCiKo/YB1EcAVZX/AEA6wl77lvn1AAAAAElFTkSuQmCC);background-position:2px;background-repeat:no-repeat}button[id^=GPshowMeasureAzimuthPicto-][aria-pressed=false]{background-color:rgba(0,60,136,.5)}button[id^=GPshowMeasureAzimuthPicto-][aria-pressed=true]{background-color:rgba(0,60,136,.7)}.GPmeasureTooltip{background:rgba(0,0,0,.5);border-radius:4px;color:#fff;padding:4px 8px;position:relative;white-space:nowrap}.GPmeasureTooltip-measure{font-weight:700}.GPmeasureTooltip-info{font-size:.75em;text-align:center}.GPmeasureTooltip-static{background-color:#fc3;border:1px solid #fff;color:#000}.GPmeasureTooltip-hidden{display:none}.GPmeasureTooltip-info:before,.GPmeasureTooltip-measure:before,.GPmeasureTooltip-static:before{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid rgba(0,0,0,.5);bottom:-6px;content:"";left:50%;margin-left:-7px;position:absolute}.GPmeasureTooltip-static:before{border-top-color:#fc3}[id^=GPmousePositionPanel-]{width:280px}button[id^=GPshowMousePositionPicto-]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD2SURBVFiF7ZbRDoIwDEUZ36oPRP9GMVF+k1c5vpQ4l24CFkfITsIDY2l70+6yqirsDITcdcSocxdQKHxhjTMEHIE7ED0CgAMuwNkyt7kgEfOUsJ0mSsRcZc9gLsoSoOWTG+C8707WfNqcNSfxRsmnA+qgMyOP1GjOSaxioCklKuyejRhJOtLLYyZI4muilosJC4y89957P2H/LMEJUapZaGzxpuAmrv3Gn0YuNIBFXZqaUMUodszNwjVbUWuQEDPatmrpueuOQu4fq+WoSbwD76uPas1BpwbgZJV/rctpI52KupmIaoHGMndh86wxcpZs1/4KO+UFLQ+rEigj9BAAAAAASUVORK5CYII=);background-position:1px;background-repeat:no-repeat}.GPmousePositionEditTool{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAYAAAAzI3woAAAB40lEQVR42tWWy07CQBSGi8+gPoJLE4SitqC+AioLF9qLuDC6bKuuSNS4QTo1ConWF4AWgz6IlzdB94A9pVNunZluiDjJJA3MdD7+/z9n4DjGyKh3PZjcrIyZAFrOlxfTKrrmVesDA/nPknmVLNwssPbnNPdI0JxHrlSaoyxL5Az3fl1rnFJflpIrhYxi/WCQ8ckr6Hv1AO3SYETD6WTPmj1Bd2wCVELUnQdYIxpulwgFMLxidfsHWy9J6XYjBNk3N3kVtYLvuiQowXCqcBCeou7WAGAUxq0Nr4E9kTZhZdISMkgZSsnmOVaKYJ9vxciBA6VCZQbAjadIFSEzWBlWRtKy9eqDepmi5WMUqmkLWr0aC8ZXQrG+4BCwiQUE9uGgs0I7DBALhhRekmWs9ZNQzQkoQa/bZGWmDDSeGZheVT0zWoJng4I+41q2Vixv+ZbJ6J1mWRRMRNAJHdkLaD8XqMXMkIzeAqDLuDCQmfHPqFBQ9lDKcBCUNskyXkIXQdm3SWVPKW1aS5gc0OzCxugphasJJtgUKqNYHV4x81NtjGGPkSo7WCnC1dFeOUTbpP2eOkV8dVD6TKgUXB1Z3T2hZgSsgExBaEMQ7xkys7RXmmdfro3j4FcnaKGHNbD2//39+EugX0KgD3FX5kMVAAAAAElFTkSuQmCC)}button[id^=GPmousePositionPanelClose]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD2SURBVFiF7ZbRDoIwDEUZ36oPRP9GMVF+k1c5vpQ4l24CFkfITsIDY2l70+6yqirsDITcdcSocxdQKHxhjTMEHIE7ED0CgAMuwNkyt7kgEfOUsJ0mSsRcZc9gLsoSoOWTG+C8707WfNqcNSfxRsmnA+qgMyOP1GjOSaxioCklKuyejRhJOtLLYyZI4muilosJC4y89957P2H/LMEJUapZaGzxpuAmrv3Gn0YuNIBFXZqaUMUodszNwjVbUWuQEDPatmrpueuOQu4fq+WoSbwD76uPas1BpwbgZJV/rctpI52KupmIaoHGMndh86wxcpZs1/4KO+UFLQ+rEigj9BAAAAAASUVORK5CYII=)}.GPmousePositionCoords,.GPmousePositionLabel{display:inline-block;line-height:20px}.GPmousePositionLabel{font-weight:700;width:100px}.GPmousePositionCoords{width:110px}.GPshowMousePositionSettingsPicto{bottom:5px;right:0;transition:all .5s ease-out 0s}.GPmousePositionSettingsLabel{display:block;font-weight:700;line-height:16px;margin:auto;text-align:center}.GPmousePositionSettingsSelect{margin-top:5px;margin-inline:auto;width:180px}.GPSexagesimal,.GPSexagesimalsec{border:1px solid #ccc;border-radius:4px;margin:0}input:read-only.GPSexagesimal,input:read-only.GPSexagesimalsec{text-align:right}.GPmousePositionSexagesimalLabel{font-size:1.2em;padding:0;vertical-align:middle}select.GPmousePositionDirection{border:1px solid #999;margin-left:2px}select.GPmousePositionDirection:disabled{-webkit-appearance:none;-moz-appearance:none;background:transparent;border:none;color:#000}select.GPmousePositionDirection:disabled::-ms-expand{display:none}select.GPmousePositionDirection:disabled::-ms-value{color:#000}.GPmousePositionAltitudeUnits,.GPmousePositionUnits{margin-left:5px}.GPmousePositionPanelEditTools{position:absolute;right:5px;top:20px}.GPmousePositionEditTool{cursor:pointer;display:inline-block;height:18px;width:18px}[id^=GPreverseGeocodingPanel-]{width:280px}.GPshowReverseGeocodingPicto{background-position:1px;background-repeat:no-repeat}.GPreverseGeocodingPanelClose,.GPshowReverseGeocodingPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH0SURBVFiF7dY/bE1xFAfwvlZMhFSim0i6mdnNnUWiOqGShqlsSPyJ0VQV+jqUDsQgNrFIECxi0MmmibRTWRph0I/hncfPde9z7/Uakdzv9ju/c77nfN/33vPuwECDBg0a9AsYwUW8wTo+4QUO/evZfgGOYQlfsYpbGM7Je6sY4xX6TUaPwR45LczgdBUhLdyNgdbxEstxXsFoJv8sNvAYV3ENnyP/dQUx36KmnScq5roeORulReF4FD3B7oRsOuLP0Eryd2BfhmOm+4OU7DmbcfZGpkcrYilmywpaCmdGcu7uB9n+P3A8jLzlkj27j1KKNgYzznQxl+diEfkXvCq4mwzCoz3qzyeNr5Rq2ltU1r3yYoJ4Fe9Ty5O7y0E6VlB7IWn8CFtLNy4WVV9MkN6M4ulMfK/OSl7D9py6gzovKzyoKqaEqNxlUYZwWGeb0XlnTuJSiIHxAve6z/m7umISQdl3BuZrCQrSUTzPEK7hCM7gHrZkaubxEe1NEPN3LiXkBzCBMWyL2GKQL2Ko7vAlxczlxOqLKmg8hNtB/sMp7MJh7OmjmO7azl3p/RbVdWohYk/jvFLVOZv5x1pR1AIm4vwhabazItcJPz99cldzxqkNnOqXlqKhzul8YdypWT8VTv22QZOcVuRM1Z+0QYMGDf53fAdKmTphX0Bz5wAAAABJRU5ErkJggg==)}.GPreverseGeocodingReturnPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4AUXDwQyeFmCzQAAATJJREFUSMftliFLBFEURs/dVUQURJvYLCaLGESz1T9gUJsoWARBEBRM/obFIFgMKxtsNhG2aTUIBqOCySLsHssuTNiVGZ47aU8aZr5537vz3TfvwZAhg0K9UL/U5bLMuuyljFXJYXYOHGVuxcAM1VPg5D+/1sgfZsfAWY9HG+ok0AY+gFfgJSI+UzI7tBht9UHdUqtFzQ5M41GdKZLhQmJMa0A9d6VqqDXT2e41fvQxrQCXQK+X7oGnzvUoMA3MAyvAWEbXjIjVIllW1eseM9/vo59SrzK6ljpXtIGq6k0ew0wcdxntTqGFHxEtYBO4zTPBiBDYBX6SGlAdVRud9baeQ99tunrKz6CizubULnYMn8vczprqW+HdIoEaMF5mhRPqe2kVRsQ30Cj7WLI0PJwNnF82zKAINyZs+wAAAABJRU5ErkJggg==);background-position:0;background-repeat:no-repeat}.GPlocationHighlight{background-color:rgba(255,200,0,.25);color:#222}[id^=GProutePanel-]{width:320px}.GPshowRoutePicto{background-position:1px;background-repeat:no-repeat}.GProutePanelClose,.GPshowRoutePicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE3SURBVFiF7ZZBTkJBDEDnE125MhyHHV5FF0RvI58EOIYuTIw79S5wB3lu+vU7tp8Z6IiLectJp+1L/xRCqFQqfwawATan7sMNhFP3McQoPgAugEcilDiLJXCe0wRwI/d+9dOLaYB74C4n8Rh417rsS+wRAngGLjNkPuTeWpMSmbnE7JKlgCerw0whgIfEmm10bwE0kcwiimlThcbAm4NQzoS6T6nPGhjxczIdKwY+Ta2A+YYShQ55Q5ZUPL08mYTCX0LeGFLlZKSoNaFXYOqQ35JSl4WGl/EkhPDilKtJPDuePRO6OjK3tgAOmlJO0SJvyJBZKWe+UiWEBmS6ta2udK/iJYTK/bAmFC8hdM33Xx91NUeT2gG3XsXdhSTvTCZlbjORaoGZZ+EiQp6cZcZvi3RRqVT+DZ/jc6+cH/zb+QAAAABJRU5ErkJggg==)}form[id^=GProuteForm]{padding:15px}.GProuteStageFlexInput{max-height:28px;opacity:1}.GProuteStageFlexInputHidden{max-height:0;opacity:0;overflow:hidden}.GProutePointLabelP{margin:2px 0 5px}.GProuteComputationLabel{margin-bottom:5px}.GProuteOriginPointerImg,.GProuteStageRemove,.GProuteTransportImg,div[id^=GProuteStageAdd]{background-image:url(data:image/png;base64,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);font-size:0}.GProuteFormMini{max-height:58px}.GProuteExclusionsOption{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAA4CAYAAADuMJi0AAAE60lEQVRYw+2YWWxUZRTHz/fd7y4zzAzTbaAdpgtQWsBiYVxYGpcEMCwRQkx48KHGhKg0WhESNYglwSUgWCKGTaMRBF4MwShpECUshlJqay2U0LCUwrRAp+0Ms997v8UnEl8Gp9Ppg2Z+bzfnn+/knHvud865AFmy/GfZVVZW/vvb9eduNn7Wc+ixGQ3/pm+UcO735VP3/rpsyc39TudHyXQ4maF61cqfZi97ocbjmVi6YGHNxoOeor3JtDskae606uqzFfPmvRqLxFg4EetIpiXJDJqqOHBwEEjIDyXjiVw4t/S1XD34TKs/MX+z4EEAgK0SwhPtjh+qq6tXBjGOtTY11a31D371qEygRxn3F3vWPVE1deN0G82T+m5BbCAIF+8lBttifLoFQeV0Wf7R7XbndsXird19/TUfAhgZeZ8H7eoXHYVWwzdBFTedsmhScfg0wfQPTRF7FfLdmBRRo4Q9RzTS8aeKRaeERAsC8TmRto30HJKqMCrhIcMUMuMcmADQJAQ5GJ4fqUMpFdE2mXgqOe+ewXhJFCHoJNJxu4omz7bhScVMyj/BeFPGUrlZIROOYRT4C0C0S0h8qUhHAAC2yGTFpUka7Skfx9/DZFZGnH2gEHxYwnc6EIguBYnDqtTzT3uDTFb3VdrEcZfWk5GUrgZxaI4QCyyaBAME04sUzTvL+dBD+xnOu8qiwrIgV1leEuf9JxhvTzu6Bgm5ThXkmNcciriaS8R2lXySTHvUqXb/lqsNp3Ju0qstx2Z7sfTZGuKsLAFkV4RK0J5k2s4wXYqYsO6WyYq0HUYN06c9XgX5SxcBuIt4gvJ40sJi7MaVONtVhGHmqIrmyLPzm29tqqf7ilwHUtHvVAjO9tksWbJkyQzehd7xo5ppUqW2tlbzLp380rhxitdB8q/4fD6acnsaKfX19c7Ji+QNJU/at7mmWaaZpklHNSY+irq6urzSxbBBy1PqEoJZfFdYoK2tjY2Jw4aGBpurJvKOmme8xWTTmgjq1DApAwAxoo6fIkieEnoF2+NvUDVqCekRiNIY4ip1eb1ekvEI39/65nOyO7hWtyWc0biOogkDooYOBhhujLEDAIZG4xADAH/4sH796y42ZWBNxBGrCEZMlNBNER1k8fBtdixwwzzY2toaTCtCr9drLXzKthgSiv7ztycfjvQo4O5fpWqR5eGojg2DCX1IBHUf3n2nSey5cOpCXzrfIXp6WZXXMtdYh8pi74JTL3WTijO913tDq2qXVxplA5vijgdTIvE4RO6zYOwO3t5/GhpbTrYMjnh78nq9VlwRfRmVRdewArM6rgJBTLbxErYEAL4J5vetwFJ4jghQxMNSSAyoO42Ttl0Xz58PpzXqS5JE7G5tqrAbM6lMiyljkimoQg1m8VhK7xrFwTpdixcbAaGz2/I+ekba0dzc/iDt3SIUCtH+Lv+lArWwjWPOOeMVJjI1imgRsyXKDas+mxoc83vKUfOC/dO2lst3M7LM3L816LdLBedlTIKU05lUNfJM2ZzEBZORXzuHrtk+vnSu63JGF9LhvmH9/uVAu8s9MUQFnWUSIweHFJ90z7qlq+n6L2OyAQMA918NdLrcrqgwoQrHyAHWqX49PDzMxsohAIAUuZ0YsHJHSO+G5t7eXj+k8ZsEjfCmsQGABgAmAMQBIJEdN7L8//gb3FshBGMt81oAAAAASUVORK5CYII=)}.GProuteModeLabel{display:block;margin-bottom:5px;text-align:center}.GProuteTransportImg{content-visibility:hidden;cursor:pointer;display:inline-block;height:28px;width:28px}.GProuteTransportImg:first-of-type{margin-left:18px;margin-right:10px}input[id^=GProuteTransportCar]+.GProuteTransportImg{background-position:-112px 0}input[id^=GProuteTransportCar]:checked+.GProuteTransportImg{background-position:-140px 0}input[id^=GProuteTransportPedestrian]+.GProuteTransportImg{background-position:-168px 0}input[id^=GProuteTransportPedestrian]:checked+.GProuteTransportImg{background-position:-196px 0}div[id^=GProuteTransportChoice] input{display:none}div[id^=GProuteTransportChoice] .gpf-radio-btn-group{justify-content:center}select[id^=GProuteComputationSelect]{width:100px}.GProuteResultsDetailsInstructionHighlight{background-color:rgba(255,200,0,.25);color:#222}.GProuteResultStage{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex}.GProuteResultStageLabel,.GProuteResultStageValue,.GProuteResultsValueLabel{display:inline-block;line-height:18px}.GProuteResultStageLabel,.GProuteResultsValueLabel{color:#666}.GProuteResultStageLabel{width:60px}.GProuteResultsValueLabel{width:65px}.GProuteResultStageValue{-webkit-flex:1;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.GPshowRouteExclusionsPicto{right:0;top:unset;transform:translateY(-100%);transition:all .3s ease-out 0s}.GProuteExclusionsLabel{display:block;font-weight:700;line-height:16px;margin-bottom:8px;margin-top:8px;text-align:center}.GProuteExclusionsOptions{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.GProuteExclusionsOption{background-color:#fee;border:1px solid #a77;border-radius:3px;color:#a77;cursor:pointer;display:block;height:28px;line-height:26px;padding-left:28px;padding-right:5px}input:checked+.GProuteExclusionsOption{background-color:#efe;background-position:0 -28px;border:1px solid #797;color:#797}button[id^=GProuteReset]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPwAAAAcCAYAAABF79LlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAyySURBVHic7Zx/bFXXfcA/33ufHZjtkKcNhkVVtqpVtGUszUhs3BEFJWo0KYRUCKMqUynY5t2HAZuxdRkqLM5Gl3bVTJ4JPN/nXyyVkDBpGCvTUKOkodmKYtpRJWukTKgr0jY7yeS3wGuKzLv3uz/uffbz8/v9nkFE7yMhP5977vkcR/7e7z3nexyoUaNGjRo1atSoUaPGHYzc7gnUqLEYRKPRVYZhHFfVRtd1u7u7u99bTF/btv5VyUDguOA2utD949F9i+orl8DtnkCNGouBYRg28ISIYJrmK8B9i+lzAqYt6BMgGLDovnIxyrnJtm21bVurPZlctHREtKUjcst8NT4RPJL2+XfvdJ+qfktV46r6YCXj1DJ8BukPskAgsKqzs/N/bud8apSHqraKyDmgEdi82D5RaVXRc0CjVNmnqt8C/tz/tgX4cbljFR3w0Wh0hWEYPcATqTbbti+LyLlAIDDQ0dHxYbmTyMYXvhJdkayf8Xx+CLZ0Ri6Lq+dmMAYuj/VU1XeriMViO1X1wcnJyV19fX1utj6qKrFYbAB4z7KsF2/xFO9obNteA7wkIleAzaFQ6KeL6WvbfnSNY7ovqeoVdd3Nl078SVV9qvrXzAU7VLjvVtTNtm23AyNAU44u11S1MxwOv1zJZFK0dL7Qjkpen6h0vjXWUxVfOouZ4f1gH8RbSg1PTk5amUHvB/tRYDegQE+1gr6/v39pQ0PD28Bn83Q7GQwGt23dutWp1NfW3r/UaQq8DZrbp5xcnWjedvp0+b7BwcE2EflL4I8WDK/6eDgcfrXcsbPR0nGkDYysPjH08beG91XFp6rPAn0ZzXtE5Fi5YxZcw/vBfgpoUtUzqjq7VhGRDSJyFrhbRMYHBwe3lDuRFH6wn8IL9jMqcz5V2YBwFrhbRcdbdwxU7LuVuK77eeb+m3c1Nze/qKqzD10/2I/hBTuAqOrvVMM9Pj5e39DQ8Ar5gx3g6Xg8vuAXuVTua++rd5rMV/IGO4Dw9NW7pyryiciPyBJ8AIZhfK2SsbNj5PS5jlTFp6oHWBjsAJtU9RlV/ZqqblfV9ar6G8WOmzfgo9HoCrzMLsAz4XB4czgc/mHqeigUuhAKhb4EHABEREZGR0eXFyvP5Atfia7wM7ugPDMx2rv50si+Wd+lsZ4LEyO9X1Lfp6IjD+wYKNt3q7Esaw+Qnq13xWKxWF9fn5GW2XelLqrq0NTU1N5quOPx+Bg5fkkzUdXOSn0NjcGifVTBB3wD+KeFQ+sXo9FoSxXGn49k94nwxQc7ByryqeqfAn+T4/LjwDeBvwXGgDeBD1T1h6r6VVU18087D7ZtHwa+rqpnwuFw3o0I27bPAptE5HAoFDqUr28uWjojh1G+DpyZGO3N63uoY+CsoJtE9fBbY/tK9h07dqxxyZIlC37+ZDJ5LfVZRO41TXMys09nZ+f1Un0p0tbne1JthmEMO44zIyLdaf2GpqamwrnW+aVg2/Zx0h4kRTBTV1f3qXL3ZVo6I8fR0nw3VT5V7r6MbdtJy7ICeSpH71iW9fvljJ2Nlo5IcmK0N5CrcqTwzqXR3rJ8qtoDRCqY3r/ixeF0touFXumf9L++UMgiIv0AqrqxpOmlo55PRQv6UDyfIWX5AoHAZDKZvJb5b55C9b1sfUZGRnLtLRRERDQUCvWQluld1+1axGBXSgt2gPqbN2++WY6vpSOiJQY7QH2daFk+n0SO9iv+1zW2bS+rYPwifXIFQGDN2lDZvnvLvC/FHwLfzZXps2b4XE9Ky7Ik/Xrm97n6FyLXk3JitFfSr2d+n6t/Mdi2fR2vZFMygUDg7kqyPHiZfmhoaEBV96S3u647/P777y/YzCuEbdvrVfU5EXm0knnlICEi5xOJxLb9+/f/CqC1I7Je0edgcXzAefO6s+3iac+XD9u2fw48APxfervruq11dXXTjuOMAesBgsFgoNINyZaOyM+dwJIHzOSN+T6R1jqS046as77V15sDpWxI+ns6MaCrkjkCO0TkRGZjrQ5/G0nfsEshIiWXXQYHB9uA74vI0qpMbCGNqrqloaFhGrBaOo60KXwfFs8HbEk2mdOAla/j+Ph4fTwez/b66riu+25XV1cCeNi2bRvYUmmw39feVw9k9TXeZb77xvGeBPDwQx0RW2BLqdUHEVFVtfBic3uWLq8C/+Z/rgOCwGeAdcBdaf1CwIkF4+eT27b9U+B+VX0kfbMuG9FodINhGD8ALluW9Qf5+uaipSPi+UQfSd+sy8a6riMbXNfzTYz2luy7XWt4WFB6y0bWkl0ubNt+g/knvRaLDy3LWtHSEbllvonR3hXFdPRf2dMz7ofBYLC5GuXFbKwN2csyMvyHq683N1dSXkzHfyX/e+CPMy5lLcup6jJgANjmN7nAp0Xkv9P75c3wIvI9Vb3fMIz9QN4A9PsAnMvXL69P9Xsqcr8gBX2uY+xHQMr07d69O+s6zEsEHqZpJioN7kyyBbuqDgEzIpJq62pubqavr6/YoF+TrVFEXr3nnns2xuPxparaJiLPA58vMNbGYDB4fuvWrY5t2+vxdoGL8qny6seJ+MYlwealhnOjTeB5tIBPZOPqayvPnz691fGWCVl9BTFN03ScebG2fHp6+u+AfeWMV4h655emw7xl8vJfNE5WzScijqp+FS+Lby2i/0equh34dbzDcQbejv5Yer+8m3aO4xzFO1TzlG3bf5FqzzxLH4vFDuBt8H1UV1d3tOifKgMzeddR4BrKUw91RGZ9mWfpW3dEDiCeb0albN+tJlewT01NhS3L2sv8kl1Xc3Oz3dfXV8zfO/xLlrZTiUTiqXg8fhV4W0TWJpPJhwuMc0FV743H45dt2/4ZXha/kHY9AaDIAp+InAoknKcamoJXzZs33haXtb92V6CgD9V7f9E0ebmlI/Iz1ey+YnBd95+zzKn32LFjZe3TFPSpmcVH74bu6vlExMHL8K8U2V+BMDDjNy3YAMyb4Xft2vXB4OBgp4iMA8/HYrF1wBFVL/b81/j9qvok4IrIjkqO2P7oO7s+aN0x0Kmi4wLPt3RG1qkrR/DP1q7rOrLBdYz96gW7C+y4k47Y2rb9YvpuPBC1LGu3iGhfXx+q2hOLxUzmdtW7Vq5cOUPuV/8UB/HOWK9MNZimebCxsfGoqqbaDgcCgZmsd6eNIyLpGfawYRiPua77GoB/XJWAKwcdQ+f5DJIHnSbzKLDSXyge/viGk9cncFDhTZlrOIwajyGeT3V2lz0vQ0NDa13XTdW+zwOPAvUAgUCgF69GXzVauyJr1SWr7+NfJavqE5Gkqn4ZOA1sAv6jQP//UtWX8Db9Ppd5vWD2CIfDL4tIO36mV9U3Zm/21uxPAh+pansoFDpT0k+ThbfGel4WtB0/04vM+VzX+EEqs6sh7ROjvRX7biUichnvQYWqDk1OTu7xn8qp6xoKhXYzl+lVRN4tNK5lWe+Ypvkw8B2/abqrq+uKqj6d0TWUb5xgMHgxs23ZsmUXgClVfd0wjG6Aiyf2vmOKM893cWT/FaAk36evNy/wrU785gVgCvT1gOF0Z7ltAY7jzFY6XNd9FtiRdrm3v7+/upuL7lxlxRV5FknzCb1t7dX1ichNvD/IWSUixRzbHfC/fmbBWMVKR0dHlyeTyR5VfQKvBAJwGW8NPWBZ1v8WO1YxPLBjYHk9bo+KzPMJnEsGbg78JPZnVfWlWOy/lrNte5eq/p5lWfOCPR1VFf9t4N8ty4qW64rFYsMZp+YOWJb1zQLzmzenYkurAC0dkWFg1qdw4NJob15fZom1lNJqitScDcN4bOfOna+n2gcHB1/zy5QnLcvK3Pwqm9k5q/HYxNje1+faX3gN5FGUkxNjvVXzlYOqXgRWishvp7cXXZbzX9UPAYfS6vBl7cYXg/+qfgg4lFaHXzRfilJ+wcscPwoQDodz9vEfBIVe4wuSSCT2NjQ0bMJb050IBoPfLuK2g3jlIBM4WYrPvO7sdZpMzyec+K1rzd++VOgm5SAi20FNpDQfwPj4uBmPxwFID3bw9hXwXrerVlFobx83r+IVbtKDHUCQUwqPIrekglGIIbIcz63V4T/B+IdkiiprpbAs6xuUuQb1D8nM+iaKuGdirLdsH0A8Hj/rf7yQ5fIpwAZWlTt+JlebJnP6koElp8zkjar6KuAU8FxmY1n/xxvLsmSxM2E6E6O9Us6rXo1PNsPDw5/F/wMdwzD+KvO6ZVkfVdPX1tk/60MX+n4Sq66vEkTkl8A/ZLbXMnyNO5ZkMrlcRKYNw2jduXPnf+boNiMi/1gNn6OyHJjGMFonhvfm9AFV8VWBscJdatSoUaNGjRo1atSocQfx/wldqBUwtlSMAAAAAElFTkSuQmCC);background-position:-224px;opacity:.8;transition:opacity .2s ease-out}div[id^=GProuteResultsValueDist],div[id^=GProuteResultsValueTime],input[id^=GProuteResultsShowDetails]+label+label:hover,input[id^=GProuteResultsShowDetails]+label:hover{color:#366291}div[id^=GProuteResultsStages]{margin-bottom:15px}div[id^=GProuteResultsValueDist],div[id^=GProuteResultsValueTime]{display:inline-block;font-weight:700;line-height:18px;width:80px}select[id^=GProuteResultsComputationSelect]{width:100px}div[id^=GProuteResultsNew]{background-color:#366291;background-image:url(data:image/png;base64,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);background-position:-224px 0;border-radius:3px;cursor:pointer;height:28px;opacity:.8;position:static;transition:opacity .2s ease-out;width:28px}.GPfakeBorder{border-bottom:1px solid #999;display:inline-block;height:14px;width:60px}.GPfakeBorderLeft{margin-left:15px}input[id^=GProuteResultsShowDetails]+label,input[id^=GProuteResultsShowDetails]+label+label{cursor:pointer;font-weight:700;line-height:28px;text-align:center;transition:color .2s ease-out;vertical-align:top;width:130px}input[id^=GProuteResultsShowDetails]+label,input[id^=GProuteResultsShowDetails]:checked+label+label{display:inline-block}input[id^=GProuteResultsShowDetails]+label+label,input[id^=GProuteResultsShowDetails]:checked+label{display:none}div:has(input[id^=GProuteResultsShowDetails])+div[id^=GProuteResultsDetails]{max-height:0;opacity:0}div:has(input[id^=GProuteResultsShowDetails]:checked)+div[id^=GProuteResultsDetails]{max-height:200px;opacity:1}div[id^=GProuteResultsDetails]{overflow-y:auto;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s}.GProuteResultsDetailsInstruction,.GProuteResultsDetailsNumber{color:#666;display:inline-block;line-height:16px;margin-top:4px}.GProuteResultsDetailsNumber{font-weight:700;text-align:right;vertical-align:top;width:22px}.GProuteResultsDetailsInstruction{padding-left:5px;width:calc(100% - 30px)}input[id^=GProuteSubmit-]{padding:0 10px;width:fit-content}[id^=GPsearchEngine-]{align-items:center;flex-direction:row}.position-container-bottom-left [id^=GPsearchEngine-],.position-container-bottom-right [id^=GPsearchEngine-],.position-container-top-left [id^=GPsearchEngine-],.position-container-top-right [id^=GPsearchEngine-]{align-items:flex-start;flex-direction:column;height:32px}.position-container-bottom-left [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-bottom-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-left [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList]{position:relative;top:unset;width:340px}.GPshowSearchEnginePicto{background-position:0}.GPsearchRadioContainer,.GPshowSearchEnginePicto{background-image:url(data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWa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);background-repeat:no-repeat}.GPsearchRadioContainer{background-color:rgba(0,60,136,.5);background-position:-26px;border:2px solid hsla(0,0%,100%,.4);border-radius:4px;box-sizing:border-box;color:transparent;cursor:pointer;height:32px;overflow:hidden;padding:2px;position:relative;transition:border-radius .5s ease-out 0s;width:32px}.GPbuttonsContainer{padding-left:5px;padding-right:5px}.GPsearchRadioContainer:hover{background-color:rgba(0,60,136,.7)}.GPshowAdvancedSearch,.GPshowAdvancedSearch:hover{background-color:#fff0}.GPshowGeolocate{background-position:-102px;margin-right:5px}.GPshowGeolocate,.GPshowSearchByCoordinate{background-image:url(data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWa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);background-repeat:no-repeat;transition:border-radius .5s ease-out 0s}.GPshowSearchByCoordinate{background-position:-76px}.GPsearchInputReset{background-image:url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=);background-position:0}.gpf-select{background-color:#fff}button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]{border:none;max-width:0}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]{border-top-right-radius:0}button[id^=GPsearchInputReset]{border-bottom-right-radius:5px;border-top-right-radius:5px;height:32px;width:32px}button[id^=GPadvancedSearchClose],button[id^=GPcoordinateSearchClose],button[id^=GPgeocodeResultsClose]{height:32px;right:0;top:0;width:30px}button[id^=GPcoordinateSearchClose],button[id^=GPgeocodeResultsClose]{background-position:0 0}button[id^=GPadvancedSearchClose]{background-repeat:no-repeat}button[id^=GPcoordinateSearchClose],button[id^=GPgeocodeResultsClose]{background-image:url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=)}button[id^=GPadvancedSearchClose]{background-image:url(data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWa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);background-position:-50px 3px}form[id^=GPsearchInput-]{width:280px}form[id^=GPsearchInput-] input{border:1px solid #999;border-bottom-right-radius:5px;border-top-right-radius:5px;color:#333;display:block;font-size:1em;padding:0 30px 0 5px;width:100%}form[id^=GPsearchInput-] input:disabled{background-color:#ddd;color:#999}button[id^=GPshowSearchEnginePicto-][aria-pressed=true]+form[id^=GPsearchInput-]{max-width:280px}.GPsearchInputText{height:32px}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{margin-left:33px;position:absolute;top:35px;width:310px}[id^=GPautocompleteResults-]{box-shadow:0 0 6px #000}dialog[id^=GPgeocodeResultsList],div[id^=GPautoCompleteList]{background-color:var(--background-default-grey);max-height:140px;position:absolute;width:280px}div[id^=GPautoCompleteList]{top:35px}dialog[id^=GPgeocodeResultsList]{border-radius:4px;overflow:hidden;position:absolute;top:35px}div[id^=GPgeocodeResults-]{background-color:#fff;max-height:140px;overflow-y:auto;position:relative;width:100%}.GPadvancedSearchCodeLabel,.GPadvancedSearchFilterLabel,.GPcoordinateSearchLabel{max-width:105px}.GPadvancedSearchCode,.GPadvancedSearchCodeLabel,.GPcoordinateSearchSystemsLabel,.GPcoordinateSearchSystemsSelect,div[id^=GPadvancedSearchFilters]{margin-top:15px}.GPadvancedSearchFilterInput,.GPadvancedSearchFilterLabel,.GPcoordinateSearchInput,.GPcoordinateSearchLabel,.GPcoordinateSearchSystemsLabel,.GPcoordinateSearchSystemsSelect,.GPcoordinateSearchUnitsLabel,.GPcoordinateSearchUnitsSelect{margin-bottom:5px}.GPshowToolBoxPicto{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAlqAAAJagFGUcfpAAAAB3RJTUUH4AsKDCgkqrnTSAAAAw1JREFUSMe9ll2IlVUUhp9vnEintH+FulAyI+uihClKjSZtQJAJrRnDoKt+oCIIjSIrDCokKXQiCqkuTMFAJtQLCwItMsQbURmjiRIK+pmSoSjJ/JmnC98je6ZzjmVMCzbnO/vstd691nrf9R0YA1NRn2SsTX1E/UM9vVc1OdwC3A7cBLQD1wE/Al8AA0BfVVXf1vFbAmwCjgPjq+oUREsDkBuA3UBfwL4EXgS2AgJLgIPqw2pV+HUCG4B9/yTtF9Rj6pvqBeo4db7apU5N/VGXqofVHeo09Ub1N3Wdeo/6Z1m60SAL1KPqrQnWqR5Qt6pvqYfU1WqbWqnvqt+p89Sf1T61pSmQOkH9Wl2ZLDaru9T2gLapH6mvB6RXHVRvU79Rd6rnqteoH6vHGwEtV7/K4ZXq+qJME9VP1JfzfZU6lMwPqnvVSfltkvpMyl8X6L3ccmIyayuAdqjP5flZ9deA7M7lpqjjC5+eZkAH1AfT5LVxaFUfV39JoGXq72qHul39Qb0ypX5fvaIRUEnv6dHIZGAwe28Ac4DngQeAl4DFeZ4NLAAOAb3ZP1nEG6HREmgAmAEcBmYCTwFTgaXAEPAK0AMsBO4G7gT2A08Aj9YKM+qzbul61Q0hQ7+6L43tCVW71RXqCXVRUaJhdaOnbHIY2d2Mdd3q96F5e0TYFV3dl/4Nq/cHZE7m2avqLQXQeTlzohFQm/q5+k4C3ZFAD6mL4/h0frs6U2FzMpgdoEujq371ZCMg1GvDqjXqkTCuI1mtyZnLQv9dYWItO9VLwsC7GgIVYPfGaYU6K5rZmJtPUPeoAwla85lbALWcEagA61Svyoj5QD0nAbaoP0U71AJFvKoX50J/A2odDVRVFWo/8Fk00p13y2tAJzAv+6cvVmjGYo3QUWudjC4EPgSORjNHgGXAY3kfzcoqbcaZ9NM6eoID24CLMhGGgA5geabFzVn1bBAYBs4HLm/Wm3HqttB2ZtHof7va1U/Ts7oZvQ10AWuB67PO1vYAc+tls9qxsZETtinf/6PV/gX9b/YXjLd1o+WqCcMAAAAASUVORK5CYII=);background-repeat:no-repeat}.GPzoomIn{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHlsZT0ic3Ryb2tlOiMwYjZiYTc7c3Ryb2tlLW9wYWNpdHk6MSIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTcgMTJoMTBNMTIgN3YxMCIgc3R5bGU9InN0cm9rZTojMGI2YmE3O3N0cm9rZS1vcGFjaXR5OjEiLz48L3N2Zz4=);border-bottom:unset;border-bottom-left-radius:0;border-bottom-right-radius:0}.GPzoomIn,.GPzoomOut{background-position:50%;background-repeat:no-repeat;background-size:auto auto;height:32px;width:32px}.GPzoomOut{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41IiBzdHlsZT0iZmlsbDojZmZmO3N0cm9rZTojMGI2YmE3O3N0cm9rZS1vcGFjaXR5OjE7ZmlsbC1vcGFjaXR5OjEiLz48cGF0aCBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwIiBzdHlsZT0iZmlsbDojMGI2YmE3O3N0cm9rZTojMGI2YmE3O3N0cm9rZS1vcGFjaXR5OjE7b3BhY2l0eToxO2ZpbGwtb3BhY2l0eToxIi8+PC9zdmc+);border-top:unset;border-top-left-radius:0;border-top-right-radius:0}.GPzoomIn:hover,.GPzoomOut:hover{cursor:pointer}.ol-custom-full-screen button{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAA8CAYAAABxVAqfAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAxRJREFUWIXtmD9PVEEUxX/XXRaDWlvb8gUsBEMICpKowYbY2Vr4J5JQWWxtZyxsaFEE5Z8xWIDRIAklUT+Bn4FFwSXH4s2D9TEzb9ZEE3FP9+bde8/M27Nz7gx0cNxhxQFJfcCFQPwO8NTMmoWcKnAb6AnkbZjZx+hMJNXlx56kgUjegIvxoV6MPxGdxSEawIiZvQ8FuHeDwHZKwRTifeCGmb0rC3Sf8yrQLIstI94HKsA9Sd1lxSR1AXeBqsv9LeIGMAIsAqPAfIzckb4AxoAV4IqrkQYnrgMhSapJWnIimYnkPXcxS5JqbiwXXD2FeFLSYGGsJmlO0lYkb0vSy5y0ZbxP0kQKca00qE38iZod/IP4W+LybSD3PX+nLkkzkjYjxTddTFdhvB+4k0LcA7xt2UC6gFlgHPgaInbvxoHZnNzVWAPORPIOZpjbYkPSkKQF9/ymbMssxF5yNby2GCOWpGYKaYC82VLnCHGZO1XIXOaxme2WEZvZD+AJh64WRIofV4CFouB8cEJaLiNNJYaC4AKkA2RCOpVS0NfsDQFDgfgd4JGZfS/knAQmCTd7q2a2mjKhDjro4BjDZxYpBlKEd8uU9FnSYrGgpIt4TJ3siDNUiO12zf2XZGLgE3AdeJWTu8JrwGlPfA+wkpO7nHngGhA8BByBpIqkaeelK5JGY6ZeaB5GJC2757liK9QuedTUA81DlDRoi2a2D0yRnXVL/bUFefMw5RqD9oidkF6TnXXbRYXsWBuy16CqcyElmXoAvwiuiCOrcb9LL/AwUHDDM7YKfAvE90r6EPvsHRxP+LrMGlnH6NsawdMxlnSm22Sd6V7pbCT1S9qVH3VPfOgacldZk38E3v+xma3TxvVgAA1g2NVKI3bkG2TXg9EbugD2gbHY3Wdsy6wBD8i2v9K7yRbke/uEshNGOrEjnSNb8SvgMmnXgw0ykT0DhskOe0FyH/F8i7VV3VguuLonvt4qJElVlytJ8z6OkPOcBaaBW/ltvJmtKzuqng+s9EBIZtaUdBPYBc4lrzgGn7m33WV08F/gJ/JO7y3zOGA+AAAAAElFTkSuQmCC);background-repeat:no-repeat}.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=false]{background-position:0 0}.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=true]{background-position:0 -30px}.GPshowOverviewMap{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyA1LjcgOS4zIDNsNS40IDIuNyA1LjY3My0yLjQzMWEuNDUuNDUgMCAwIDEgLjYyNy40MTNWMTguM0wxNC43IDIxbC01LjQtMi43LTUuNjczIDIuNDMxQS40NS40NSAwIDAgMSAzIDIwLjMxN3ptMTIuNiAxMi45NTYgMy42LTEuNTQzVjUuNzNsLTMuNiAxLjU0M3ptLTEuOC0uMTE4VjcuMjYybC0zLjYtMS44djExLjI3NnptLTUuNC0xLjgxVjUuMzQzTDQuOCA2Ljg4N1YxOC4yN3oiLz48L3N2Zz4=);background-position:2px;background-repeat:no-repeat;background-size:auto auto}div[id^=GPlegends-]{display:none}div[id^=GPcatalog-]{display:block}.GPshowCatalogPicto{background-image:url(data:image/png;base64,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bS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDpjMmUxMjdjOC0xOTM1LTQ0OGEtYjYxYy0xY2RkNjI3NWZkYzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTFkYjFmNjktN2M0MC00MDgxLWJkZWEtN2YxMzFjODQ3OTg4IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NzdiZmRhYWMtNmEyNi00MTY5LWEzMWItYmZlN2Q5NThlOGU3IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzI5MTg5ODYxNDQxMDI1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZGI2YWQ2MTUtZWQwYS00MTEyLTljYjQtYTIyZDkwMDkwMGNkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0xMC0xN1QyMDozMTowMSswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5TF0SEAAAABmJLR0QA8gDyAPIuRIzMAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH6AoREh8BMSlSAgAAAXpJREFUWMPtl0FugzAQRf+Peo9ygC57AI7Col1EzR1ortBAKiWLpCdJcoduugoXaX43RnIpYEPdQCW+xMYaBj9G8z0GJk26qvjbBJJiABGAWwAnAAXJYlRAkhKzQVsnkkcrJgKwAxDXpHgG8DYkWBXorJ9KbBi5tRti7zcN68eaNftv+2w2kVSQXHr8wEcA9wDmJC8NMQTwAuCDZBayej7VKXXwgZH0aeK3kmZ1MJIyE3ORtAgJFKubIke+vBK/NtWwYdaVmDwkUNIRKHbko6RV5Z2tpFmlMqU2dVW8WoU8czZB5cFgTK98exwu2KuHHFDBYFy2nXoCJR2/2wS19YXpRWyseO8RmrpMwfOwJ64h00+HSkV3xjjKtbMPVIMB9KpSsPOppgfPPr3U4mbZoFANxtIXZtZm6aMd9wc/WP8A6MEafTYto8/KGn2eul4fUnPHCaGl6xohaQ7gDsCCpFqG0wzAO8nXEOdQX8VjuD7sA36jwKRJk/6NvgB/JgixGmzy6AAAAABJRU5ErkJggg==);background-position:0;background-repeat:no-repeat}dialog[id^=GPcatalogPanel-]{width:280px}.GPcatalogPanelClose{background-image:url(data:image/png;base64,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bS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDpjMmUxMjdjOC0xOTM1LTQ0OGEtYjYxYy0xY2RkNjI3NWZkYzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTFkYjFmNjktN2M0MC00MDgxLWJkZWEtN2YxMzFjODQ3OTg4IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NzdiZmRhYWMtNmEyNi00MTY5LWEzMWItYmZlN2Q5NThlOGU3IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzI5MTg5ODYxNDQxMDI1IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZGI2YWQ2MTUtZWQwYS00MTEyLTljYjQtYTIyZDkwMDkwMGNkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0xMC0xN1QyMDozMTowMSswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5TF0SEAAAABmJLR0QA8gDyAPIuRIzMAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH6AoREh8BMSlSAgAAAXpJREFUWMPtl0FugzAQRf+Peo9ygC57AI7Col1EzR1ortBAKiWLpCdJcoduugoXaX43RnIpYEPdQCW+xMYaBj9G8z0GJk26qvjbBJJiABGAWwAnAAXJYlRAkhKzQVsnkkcrJgKwAxDXpHgG8DYkWBXorJ9KbBi5tRti7zcN68eaNftv+2w2kVSQXHr8wEcA9wDmJC8NMQTwAuCDZBayej7VKXXwgZH0aeK3kmZ1MJIyE3ORtAgJFKubIke+vBK/NtWwYdaVmDwkUNIRKHbko6RV5Z2tpFmlMqU2dVW8WoU8czZB5cFgTK98exwu2KuHHFDBYFy2nXoCJR2/2wS19YXpRWyseO8RmrpMwfOwJ64h00+HSkV3xjjKtbMPVIMB9KpSsPOppgfPPr3U4mbZoFANxtIXZtZm6aMd9wc/WP8A6MEafTYto8/KGn2eul4fUnPHCaGl6xohaQ7gDsCCpFqG0wzAO8nXEOdQX8VjuD7sA36jwKRJk/6NvgB/JgixGmzy6AAAAABJRU5ErkJggg==)}.GPtabsList{background-color:#f1f1f1;border:1px solid #ccc;display:flex;list-style-type:none;margin:0;overflow:hidden;padding:0}.GPtabList{flex:1 1 0px}.GPtabButton{background-color:inherit;border:none;cursor:pointer;float:left;outline:none;padding:14px 16px;transition:.3s}.GPtabButtonActive{background-color:#ccc}.GPtabContent{border:1px solid #ccc;border-top:none;display:none;padding:6px 12px}.GPtabContentSelected{display:block}.GPlabelActive:hover{background-color:#ccc}.GPcatalogButtonSection{background:unset;border:unset}button[aria-expanded=true].GPcatalogButtonSection span.GPshowCatalogAdvancedTools{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.GPshowCatalogAdvancedTools{background-image:url(data:image/png;base64,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ICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmM1NWM2ODRkLWY2OGQtNDExNy04ZGYzLTAwYWMzMjQ4YTY5YSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjNmYWM4YTllLWJkMTUtNGJiOC04ZGQyLTkwZDUyMjE0YmFmOCIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1QOlRpbWVTdGFtcD0iMTcyOTI0NTAwMjg0NjU2OCIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjMwIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjcwMTNhZTFjLTcyMjktNDJmZS1iMzAzLTU3NGFmMWE3ZmQxMyIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMTAtMThUMTE6NTA6MDIrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+UnHxogAAAAZiS0dEAPIA8gDyLkSMzAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+gKEgkyAorMuigAAAIkSURBVFjD7Zc/aBRBFMa/t39EFEMQTrQ2CiIi+K+Q3ZA+CLJ7nqWQwlRJGs3ddUnlZdUiXJEqINjE9e5UjFWag9sEbNRGhGB6MXKgQQPxZp5FLhLCXXbXXSQH8ytnhuF9771v3yygUCgUCkVXKOrB6/dqJzQD42A5DNAZAGBglYA3UlB55ZHztWcFWoXaLTDPAzjW5cgGMUYanlvpOYFtcc8inGVi5A6aSAptS50/761co+QAAOxCba/GH6TJgcaD3HqSoKx89RMx15tH5MTHqdzW7r3zU/6h47+0WSYaCmbcc2F3aftuGhjfpy075asPrI8lTjtjgYlG+zf1JbvoZ3aW7aKf6d/Ul5hoFIyFxBW08tUPAC7Giw3vl2fcS0k1tq3xBEATpN3UmLYkxCsAp8C4G3ju0yj3aCH7pzstNkrO3zbtkLGBNLwTlJznIG1wO2uyLiFWAJggzYoqDgCM8ILE7i9OXL0dDx7+PZH5iast0isAYLDIrh8VTXuyMpeKBwFei28fWkvTg8KACDzXCjzXEgZEXA+GCKTFf/gwv07cnp47DaLbBFxhqb+zCi8uD+ZfXmCpvyXgGhh3As+dTixQCioD2IgR23ezZZYPkgdDB709Wc0ywY8y6Jkpu+w5tTQH9dB9/+RuD9Yf5r6k/lTbFsnzAPV1qxwzjaQt7r8+tu2inwHrY8wYBnC2vbzKoEWzZZbrj298U/8uCoVCoegx/gAQwd9vpqyHDwAAAABJRU5ErkJggg==);background-position:-26px 0;display:inline-block;height:28px;vertical-align:middle;width:28px}#header-search>label,div[id^=GPterritories-]{display:none}div[id^=GPcontrolList-] .GPshowOpen>span{color:#fff;display:block;font-size:24px;height:24px;line-height:24px;pointer-events:none}button[id^=GPshowControlListPicto-][aria-pressed=true]+dialog{width:200px}.GPcontrolListPanelClose{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAaCAYAAAD43n+tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIRSURBVFiF7ZbRS1RBFMbPbLq9ldjaY88Zkv1JQRqt+Wf0aCrYBuY/UkRQRFQvQQax+JipEUIoQdHq/nrYb3K8zl33zl20h/vBwnLOmfPNN+fMmWtWoUKFMwPwjiO8Pu/9xOAGDQRqZnYYmLrOuQvD31I51AYJAqbNbNnMfgXm38AyMFV2E8AssKpDy4txwAowX4booogO1WYdYEu/jmwHIqqXEOPzr8VEScwjxXSTREnMSyXZBGaAscA/DtyTOIDnKaKAFsfxGHCB38kWopUiaNVffmC8T9wE8FaxKwk8vpVCrAG1TGU8nsSqeBrJLbXBl5gY4C7wOSNqW+13Y4iistUrLkYE/lTu5PhfAR8ytjmteViYMF9UeTFK3qZ36S9HfJeAP8CDjL2hqq4nkVpfUdFhEcNIjv2ame045/aA22Z2PeMbNbOn4QLn3C6wK38ZxN7Ggd/LKICfwKb+tyMntgGcOAzgO/AjkTM2AJKqFEvuW27s9Oh/aybUch8T+PKmWdaWJiro49kCa+a1ZmFIYvzYjo70ooJu6rS/Ao0B4q8C31TVyYJcZ/aw+iRv+omSmPeKXUrgmeHo0yc6mjOV6gL3i/IYUAdeKMkW0ASuBP6G2mxHMc+A0cJEvVxNVSp3mklUC2imcPgkdSU5CE5nWyK6snXofXUniTkXAFPAIvAJ2Af2gHVgoeidqVChwv+NvxOT737B3Fc7AAAAAElFTkSuQmCC)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div{align-items:center;column-gap:1rem;display:flex;flex-direction:row;padding:.5rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div:hover{background-color:#eee;cursor:pointer}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button{flex-shrink:0}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button:hover{background-color:rgba(0,60,136,.5)} /*# sourceMappingURL=Classic.css.map*/ \ No newline at end of file diff --git a/dist/package/css/Classic.css.map b/dist/package/css/Classic.css.map index df2684fa..e516a933 100644 --- a/dist/package/css/Classic.css.map +++ b/dist/package/css/Classic.css.map @@ -1 +1 @@ -{"version":3,"file":"Classic.css","mappings":"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","sources":["webpack://Gp/./src/packages/CSS/GPFwaiting.css","webpack://Gp/./src/packages/CSS/GPFgeneralWidget.css","webpack://Gp/./src/packages/CSS/Controls/Drawing/GPFdrawingStyle.css","webpack://Gp/./src/packages/CSS/Controls/Attribution/GPFattributionStyle.css","webpack://Gp/./src/packages/CSS/Controls/ElevationPath/GPFelevationPathStyle.css","webpack://Gp/./src/packages/CSS/Controls/Export/GPFexportStyle.css","webpack://Gp/./src/packages/CSS/Controls/GetFeatureInfo/GPFgetFeatureInfoStyle.css","webpack://Gp/./src/packages/CSS/Controls/Isochron/GPFisochronStyle.css","webpack://Gp/./src/packages/CSS/Controls/LayerImport/GPFlayerImportStyle.css","webpack://Gp/./src/packages/CSS/Controls/LayerSwitcher/GPFlayerSwitcherStyle.css","webpack://Gp/./src/packages/CSS/Controls/LocationSelector/GPFlocationStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureAreaStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureLengthStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureAzimuthStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureToolTip.css","webpack://Gp/./src/packages/CSS/Controls/MousePosition/GPFmousePositionStyle.css","webpack://Gp/./src/packages/CSS/Controls/ReverseGeocoding/GPFreverseGeocodingStyle.css","webpack://Gp/./src/packages/CSS/Controls/Route/GPFrouteStyle.css","webpack://Gp/./src/packages/CSS/Controls/SearchEngine/GPFsearchEngineStyle.css","webpack://Gp/./src/packages/CSS/Controls/ToolBoxMeasure/GPFtoolBoxMeasureStyle.css","webpack://Gp/./src/packages/CSS/Controls/Zoom/GPFzoomStyle.css","webpack://Gp/./src/packages/CSS/Controls/FullScreen/GPFfullScreenStyle.css","webpack://Gp/./src/packages/CSS/Controls/OverviewMap/GPFoverviewMapStyle.css","webpack://Gp/./src/packages/CSS/Controls/Legends/GPFlegendsStyle.css","webpack://Gp/./src/packages/CSS/Controls/Catalog/GPFcatalogStyle.css","webpack://Gp/./src/packages/CSS/Controls/Territories/GPFterritoriesStyle.css","webpack://Gp/./src/packages/CSS/Controls/ControlList/GPFcontrolListStyle.css"],"sourcesContent":["/**\n* Map loading\n* @sample\n* function setMap(map) {\n* var center = this._createLoadingElement();\n* map.getViewport().appendChild(center);\n* center.className = \"\"; // invisible !\n* center.className = \"GPmapLoadingVisible\"; // visible !\n* }\n*\n* function _createLoadingElement() {\n* var div = document.createElement(\"div\");\n* div.id = \"GPmapLoading\";\n* div.className = \"\";\n* return div;\n* }\n*/\n\n#GPmapLoading {\n display: none;\n position: absolute;\n z-index: 50;\n top: 50%;\n left: 50%;\n width: 50px;\n height: 50px;\n margin-top: -25px;\n margin-left: -25px;\n}\n\n#GPmapLoading.GPmapLoadingVisible {\n display: block;\n}\n\n#GPmapLoading {\n background-image: url(\"img/waiting.gif\");\n}\n","/*********************/\r\n/* Widgets : general */\r\n/*********************/\r\n\r\n.GPwidget {\r\n position: absolute;\r\n pointer-events: auto;\r\n font-family: \"Helvetica Neue\",Arial,Helvetica,sans-serif;\r\n font-size: 13px;\r\n color: #333;\r\n}\r\n\r\n.GPwidget input[type='text'],\r\n.GPwidget input[type='button'] {\r\n -webkit-appearance: none;\r\n appearance: none;\r\n color: #333333;\r\n}\r\n\r\n.GPwidget input[type=\"checkbox\"] {\r\n display: none;\r\n}\r\n\r\n.GPwidget select {\r\n padding-left: 3px;\r\n border-radius: 3px;\r\n}\r\n\r\n.GPwidget form {\r\n margin-bottom: 0;\r\n}\r\n\r\n.GPwidget * {\r\n box-sizing: border-box;\r\n background-repeat: no-repeat;\r\n}\r\n\r\n/************/\r\n/* position */\r\n/************/\r\n:root {\r\n --size-per-row: 32px;\r\n}\r\n#position-container-top-left,\r\n#position-container-top-right,\r\n#position-container-bottom-left,\r\n#position-container-bottom-right {\r\n border-style: solid;\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n /* crée un décalage sur le searchEngine */\r\n /* align-items: center; */\r\n width: var(--size-per-row);\r\n min-height: var(--size-per-row);\r\n /* padding: 5px; */\r\n}\r\n\r\n#position-container-top-left,\r\n#position-container-top-right {\r\n top: 0;\r\n}\r\n\r\n#position-container-top-left {\r\n float: left;\r\n left: 0;\r\n}\r\n#position-container-top-right {\r\n float: right;\r\n right: 0;\r\n}\r\n\r\n#position-container-bottom-left,\r\n#position-container-bottom-right {\r\n bottom: 0px;\r\n}\r\n\r\n#position-container-bottom-right {\r\n float: right;\r\n right: 0px;\r\n}\r\n#position-container-bottom-left {\r\n float: left;\r\n left: 0px;\r\n}\r\n\r\n/******************/\r\n/* General panels */\r\n/******************/\r\n\r\n.GPpanel {\r\n box-shadow: 0 0 6px #000;\r\n border-radius: 4px;\r\n padding: unset;\r\n border: unset;\r\n background-color: #FFF;\r\n}\r\n\r\n.GPpanel {\r\n}\r\n\r\n.GPpanelHeader {\r\n position: relative;\r\n width: 100%;\r\n height: 32px;\r\n padding: 3px;\r\n background-color: #9DB1BD;\r\n border-top-left-radius: 4px;\r\n border-top-right-radius: 4px;\r\n}\r\n\r\n.GPpanelTitle {\r\n width: 100%;\r\n height: 100%;\r\n text-align: center;\r\n font-weight: bold;\r\n line-height: 26px;\r\n border-top-left-radius: 2px;\r\n border-top-right-radius: 2px;\r\n background-color: #366291;\r\n color: #FFF;\r\n}\r\n\r\n.GPpanelFooter {}\r\n\r\n.GPpanelIcon,\r\n.GPresetPicto,\r\n.GPreturnPicto,\r\n.GPpanelClose,\r\n.GPpanelReduce,\r\n.GPpanelInfo {\r\n position: absolute;\r\n width: 26px;\r\n height: 26px;\r\n cursor: pointer;\r\n border: none;\r\n background-color: #366291;\r\n}\r\n\r\n.GPpanelClose {\r\n top: 3px;\r\n right: 3px;\r\n background-position: -27px 0;\r\n}\r\n\r\n.GPreturnPicto {\r\n top: 3px;\r\n left: 3px;\r\n}\r\n\r\n.GPpanelInfo {\r\n top: 3px;\r\n left: 3px;\r\n}\r\n\r\n.GPpanelReduce {\r\n top: 3px;\r\n right: 32px;\r\n}\r\n\r\n.GPresetPicto,\r\n.GPreturnPicto {\r\n border-radius: 3px;\r\n opacity: 1;\r\n}\r\n\r\n/**********************************/\r\n/* Showing/hiding advanced panels */\r\n/**********************************/\r\n\r\n.GPshowAdvancedToolPicto {\r\n position: relative;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n width: 32px;\r\n height: 32px;\r\n padding: 2px;\r\n background-color: rgba(255, 255, 255, 0.4);\r\n border-radius: 4px;\r\n border: 2px solid rgba(255, 255, 255, 0.4) ;\r\n}\r\n\r\n.GPshowAdvancedToolPicto:hover {\r\n background-color: rgba(255, 255, 255, 0.6);\r\n}\r\n\r\n.GPshowAdvancedToolOpen {\r\n position: absolute;\r\n display: block;\r\n box-sizing: border-box;\r\n width: 26px;\r\n height: 26px;\r\n background-color: rgba(0,60,136,0.5);\r\n border-radius: 2px;\r\n}\r\n\r\n.GPshowAdvancedToolPicto:hover .GPshowAdvancedToolOpen {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n\r\n.GPshowOpen {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n\r\n.GPshowOpen:hover {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n\r\n/****************/\r\n/* Calc waiting */\r\n/****************/\r\n\r\n.GPwaitingContainer {\r\n position: absolute;\r\n top: 32px;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n background-color: rgba(255,255,255,0.9);\r\n font-size: 1.5em;\r\n font-weight: bold;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n}\r\n\r\n.GPwaitingContainerVisible {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n}\r\n\r\n.GPwaitingContainerHidden {\r\n display: none;\r\n}\r\n\r\n.GPwaitingContainerInfo {\r\n margin: auto;\r\n}\r\n\r\n.GPwaitingContainerVisible,\r\n.GPwaitingContainerHidden {}\r\n\r\n/***************/\r\n/* Flex inputs */\r\n/***************/\r\n\r\n.GPflexInput {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n transition: max-height 0.3s ease-out, opacity 0.3s ease-out;\r\n}\r\n\r\n/* FIXME tempory hack with :not(.GPlocationOriginHidden) !\r\n.GPflexInput > *:not(.GPlocationOriginHidden) */\r\n.GPflexInput > * {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n border: 1px solid #999;\r\n border-radius: 0;\r\n}\r\n\r\n.GPflexInput *:not(:last-child) {\r\n border-right:none;\r\n}\r\n\r\n.GPflexInput *:first-child {\r\n border-radius: 3px 0 0 3px;\r\n}\r\n\r\n.GPflexInput *:last-child {\r\n border-radius: 0 3px 3px 0;\r\n}\r\n\r\n.GPflexInput > *:not(input) {\r\n /* width: 28px; */\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n.GPflexInput > input {\r\n -webkit-flex: 1;\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding: 0 5px;\r\n min-width: 0;\r\n}\r\n\r\n.GPflexInput > select {\r\n -webkit-flex: 1;\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding-right: 7px;\r\n}\r\n\r\n.GPflexInput > label {\r\n background-color: #F2F2F2;\r\n color: #666;\r\n padding-left: 7px;\r\n padding-right: 9px;\r\n cursor: pointer;\r\n}\r\n\r\n/****************/\r\n/* Submit input */\r\n/****************/\r\n\r\ninput.GPsubmit {\r\n display: block;\r\n width: 80px;\r\n margin: auto;\r\n height: 28px;\r\n line-height: 26px;\r\n padding: 0;\r\n background: none;\r\n border: none;\r\n border-radius: 3px;\r\n font-family: \"Helvetica Neue\",Arial,Helvetica,sans-serif;\r\n color: #FFF;\r\n background-color: #366291;\r\n font-weight: bold;\r\n opacity: 0.8;\r\n transition: opacity 0.2s ease-out;\r\n cursor: pointer;\r\n}\r\n\r\ninput.GPsubmit:hover {\r\n opacity: 1;\r\n}\r\n\r\n/************/\r\n/* elements */\r\n/************/\r\n\r\n.GPselect {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n margin: auto;\r\n border: 1px solid #999;\r\n color: #333;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlabel {\r\n\r\n}\r\n\r\n.GPinput {\r\n\r\n}\r\n\r\n.GPform {\r\n padding: 15px;\r\n}\r\n\r\n.GPelementInvisible,\r\n.GPelementHidden {\r\n display: none;\r\n visibility: hidden;\r\n opacity: 0%;\r\n}\r\n\r\n.GPelementVisible,\r\n.GPelementShow {\r\n display: block;\r\n visibility: visible;\r\n opacity: 100%;\r\n}\r\n\r\n/********************************/\r\n/* Autocomplete/geocode results */\r\n/********************************/\r\n\r\n.GPautoCompleteList,\r\n.GPadvancedAutoCompleteList {\r\n z-index: 2;\r\n /* display: none; */\r\n /* position: absolute;\r\n max-height: 140px;\r\n background-color: #FFF;\r\n border: 1px solid #999;\r\n overflow-y: hidden; */\r\n}\r\n\r\n.GPadvancedAutoCompleteList {\r\n width: calc(100% - 28px);\r\n border-top: none;\r\n font-size: 0.9em;\r\n}\r\n\r\n.GPautoCompleteProposal {\r\n width: 100%;\r\n height: 28px;\r\n line-height: 16px;\r\n padding: 6px 10px;\r\n color: #5E5E5E;\r\n font-size: 1.0em;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow:ellipsis;\r\n cursor: pointer;\r\n}\r\n\r\n.GPautoCompleteProposal:hover {\r\n color: #000000;\r\n background-color: #CEDBEF\r\n}\r\n\r\n/*************************************/\r\n/* Showing additional hidden options */\r\n/*************************************/\r\n\r\n.GPshowMoreOptionsImage {\r\n background-image: url(\"img/GPshowMoreOptions.png\");\r\n}\r\n\r\n.GPshowMoreOptions {\r\n display: block;\r\n position: absolute;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n transition: all 0.5s ease-out 0s;\r\n}\r\n\r\nbutton[aria-pressed=\"true\"].GPshowMoreOptions,\r\ninput[type=\"checkbox\"]:checked + .GPshowMoreOptions {\r\n -webkit-transform: rotateX(180deg);\r\n transform: rotateX(180deg);\r\n /* bottom: 90px; */\r\n}\r\n\r\n/**********************/\r\n/* Feature info popup */\r\n/**********************/\r\n\r\n.gp-feature-info-div {\r\n bottom: 17px ;\r\n position: relative;\r\n max-width: calc(100vw - 80px);\r\n padding: 10px;\r\n border-radius: 10px;\r\n font-size: 0.75em;\r\n font-family: \"Open Sans\", sans-serif;\r\n color: #002A50;\r\n background-color: #FFF;\r\n box-shadow: 0 0 5px #000;\r\n}\r\n\r\n.gp-feature-info-div::before {\r\n content: \"\";\r\n position: absolute;\r\n border-top: 15px solid #FFF;\r\n border-right: 14px solid transparent;\r\n border-left: 14px solid transparent;\r\n bottom: -15px;\r\n margin-left: -14px;\r\n left: 50%;\r\n}\r\n\r\n.gp-feature-info-div .closer {\r\n position: absolute;\r\n display: block;\r\n width: 30px;\r\n height: 30px;\r\n top: 0;\r\n right: 0;\r\n border: none;\r\n cursor: pointer;\r\n border-top-right-radius: 10px;\r\n border-bottom-right-radius: 10px;\r\n background-color: #FFF;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/close-emeraud.svg\");\r\n background-size: 14px 14px;\r\n background-position: center;\r\n}\r\n\r\n.gp-features-content-div {\r\n max-width: 420px;\r\n min-width: 260px;\r\n max-height: 340px;\r\n overflow: auto;\r\n}\r\n\r\n.gp-features-content-div h5,\r\n.gp-features-content-div h6,\r\n.gp-features-content-div p,\r\n.gp-features-content-div ul {\r\n margin: 0;\r\n}\r\n\r\n.gp-features-content-div ul {\r\n padding: 0;\r\n list-style-type: none;\r\n}\r\n\r\n.geoportail-popup-content h5,\r\n.geoportail-popup-content h6,\r\n.geoportail-popup-content p,\r\n.gp-att-name-div,\r\n.gp-att-description-div,\r\n.gp-att-others-div {\r\n padding: 0 10px;\r\n}\r\n\r\n.geoportail-popup-content h5:not(:last-child),\r\n.geoportail-popup-content h6:not(:last-child),\r\n.geoportail-popup-content p:not(:last-child),\r\n.gp-att-description-div:not(:last-child),\r\n.gp-att-others-div:not(:last-child) {\r\n margin-bottom: 15px;\r\n}\r\n\r\n.geoportail-popup-content h5:last-child,\r\n.geoportail-popup-content h6:last-child,\r\n.geoportail-popup-content p:last-child,\r\n.gp-att-description-div:last-child,\r\n.gp-att-others-div:last-child,\r\n.gp-att-name-div {\r\n margin-bottom: 10px;\r\n}\r\n\r\n.geoportail-popup-content h5:first-child,\r\n.geoportail-popup-content h6:first-child,\r\n.geoportail-popup-content p:first-child,\r\n.gp-att-name-div:first-child,\r\n.gp-att-description-div:first-child,\r\n.gp-att-others-div:first-child {\r\n margin-top: 10px;\r\n}\r\n\r\n.gp-att-name-div,\r\n.gp-features-content-div h5 {\r\n padding-right: 35px;\r\n font-weight: bold;\r\n font-size: 1.2em;\r\n text-transform: uppercase;\r\n color: #0B6BA7;\r\n}\r\n\r\n.gp-features-content-div h6 {\r\n font-size: 1.1em;\r\n}\r\n\r\n.gp-att-description-div:not(:last-child),\r\n.gp-att-others-div:not(:last-child) {\r\n padding-bottom: 10px;\r\n border-bottom: 1px dotted #666;\r\n}\r\n\r\n.gpf-radio-btn-group {\r\n display: flex;\r\n gap: 1em;\r\n}\r\n\r\n.gpf-btn-icon {\r\n caret-color: transparent;\r\n}\r\n","[id^=GPdrawingPanel-] {\r\n width: 240px;\r\n}\r\n\r\n.GPshowDrawingPicto {\r\n background-image: url(\"img/GPdrawingOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n.GPdrawingPanelClose {\r\n background-image: url(\"img/GPdrawingOpen.png\");\r\n}\r\n\r\n.GPdrawingLabel,\r\n.GPdrawingCoords {\r\n display: inline-block;\r\n line-height: 20px;\r\n}\r\n\r\n.GPdrawingLabel {\r\n width: 80px;\r\n font-weight: bold;\r\n}\r\n\r\n.GPdrawingCoords {\r\n width: 110px;\r\n}\r\n\r\n/* markers selector */\r\n.marker-input-radio {\r\n display : none ;\r\n}\r\n\r\ninput.marker-input-radio:checked + label {\r\n border: 1px solid red;\r\n}\r\n\r\n/* drawing tools */\r\n.drawing-tool {\r\n border-radius: 10px;\r\n cursor: pointer;\r\n display: block;\r\n height: 40px;\r\n width: 40px;\r\n background-image: url(\"img/drawing-tools.svg\");\r\n background-size: 720px 40px;\r\n background-color: #e9edf0;\r\n border: unset;\r\n}\r\n\r\n.drawing-tool-active {\r\n background-color: #002a50;\r\n}\r\n\r\n\r\n/*\r\n* Drawing tools\r\n*/\r\nbutton[id^=drawing-tool-point-] {\r\n background-position: 0 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-point-].drawing-tool-active {\r\n background-position: -40px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-line-].drawing-tool-active {\r\n background-position: -120px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-line-] {\r\n background-position: -80px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-holes-] {\r\n background-position: -640px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-holes-].drawing-tool-active {\r\n background-position: -680px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-polygon-] {\r\n background-position: -160px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-polygon-].drawing-tool-active {\r\n background-position: -200px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-text-] {\r\n background-position: -240px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-text-].drawing-tool-active {\r\n background-position: -280px 0;\r\n}\r\n\r\n/*\r\n* Editing tools\r\n*/\r\nbutton[id^=drawing-tool-edit-] {\r\n background-position: -320px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-edit-].drawing-tool-active {\r\n background-position: -360px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-display] {\r\n background-position: -400px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-display-].drawing-tool-active {\r\n background-position: -440px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-tooltip] {\r\n background-position: -480px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-tooltip-].drawing-tool-active {\r\n background-position: -520px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-remove] {\r\n background-position: -560px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-remove-].drawing-tool-active {\r\n background-position: -600px 0;\r\n}\r\n\r\n/* section d'export */\r\n\r\ndiv.drawing-tools-flex-display {\r\n justify-content: space-between;\r\n}\r\n\r\nbutton[id^=drawing-export-] {\r\n background-position: 2px 0;\r\n}\r\n\r\n.drawing-button {\r\n margin: auto;\r\n font-size: 0.7em;\r\n height: 30px;\r\n line-height: 30px;\r\n padding-left: 30px;\r\n padding-right: 15px;\r\n /* from site colors-chart */\r\n background-image: url(\"img/drawing-save.svg\");\r\n background-size: 30px 120px;\r\n}\r\n\r\n.tool-form-submit {\r\n border: medium none;\r\n border-radius: 20px;\r\n font-family: \"Helvetica Neue\",Arial,Helvetica,sans-serif;\r\n font-size: 0.9em;\r\n text-align: center;\r\n text-transform: uppercase;\r\n /* from site colors-chart */\r\n background-color: #00b798;\r\n color: #fff;\r\n}\r\n\r\n/*\r\n * popups\r\n */\r\n.gp-label-div,\r\n.gp-styling-div {\r\n position: relative;\r\n top: 17px;\r\n border-radius: 10px;\r\n font-size: 0.75em;\r\n background-color: #FFF;\r\n box-shadow: 0 0 5px #000;\r\n box-sizing: border-box;\r\n border: unset;\r\n}\r\n\r\n.gp-label-div::before,\r\n.gp-styling-div::before {\r\n content: \"\";\r\n position: absolute;\r\n border-bottom: 15px solid #FFF;\r\n border-right: 9px solid transparent;\r\n border-left: 10px solid transparent;\r\n top: -15px;\r\n margin-left: -10px;\r\n left: 50%;\r\n}\r\n\r\n.gp-textarea-att-label-style,\r\n.gp-input-label-style {\r\n border: none;\r\n}\r\n\r\n.gp-textarea-att-label-style {\r\n width: 240px;\r\n height: 80px;\r\n resize: none;\r\n}\r\n\r\n.gp-input-measure-style {\r\n width: 240px;\r\n font-size: 0.75em;\r\n background-color: #FFF;\r\n text-align: center;\r\n border-radius: 10px;\r\n}\r\n\r\n.gp-textarea-att-label-style {\r\n display: block;\r\n}\r\n\r\n.gp-label-div .closer {\r\n border-top-right-radius: 10px;\r\n background-color: #FFF;\r\n}\r\n\r\n.gp-input-label-style {\r\n width: 180px;\r\n}\r\n\r\n/* Label popups */\r\n\r\n.gp-label-div {\r\n padding: 10px;\r\n}\r\n\r\n/* Styling popup */\r\n\r\n.gp-styling-div {\r\n width: 340px;\r\n padding: 20px;\r\n padding-top: 50px;\r\n}\r\n\r\n.gp-styling-div::after {\r\n content: \"Modifier le style\";\r\n position: absolute;\r\n display: block;\r\n width: 280px;\r\n height: 30px;\r\n line-height: 30px;\r\n text-align: center;\r\n left: 30px;\r\n top: 0;\r\n border-bottom: 1px solid #BBB;\r\n font-variant: small-caps;\r\n font-size: 1.2em;\r\n font-weight: bold;\r\n}\r\n\r\n.gp-label-div .gp-styling-button:not([class*=\"closer\"]) {\r\n display: block;\r\n margin: auto;\r\n margin-top: 10px;\r\n}\r\n\r\n.gp-styling-button:not([class*=\"closer\"]) {\r\n display: inline-block;\r\n width: 140px;\r\n height: 24px;\r\n line-height: 24px;\r\n margin-top: 20px;\r\n border-radius: 12px;\r\n text-align: center;\r\n color: #FFF;\r\n background-color: #00B798;\r\n font-weight: bold;\r\n font-size: 0.9em;\r\n text-transform: uppercase;\r\n border: none;\r\n}\r\n\r\n.gp-styling-button:not([class*=\"closer\"]):hover {\r\n color: #00B798;\r\n background-color: #EEF2F5;\r\n}\r\n\r\n.gp-styling-button:not([class*=\"closer\"]) + .gp-styling-button:not([class*=\"closer\"]) {\r\n margin-left: 20px;\r\n}\r\n\r\n.gp-label-div .closer,\r\n.gp-styling-div .closer {\r\n cursor: pointer;\r\n position: absolute;\r\n display: block;\r\n width: 30px;\r\n height: 30px;\r\n top: 0;\r\n right: 0;\r\n border: none;\r\n background-color: transparent;\r\n background-repeat: no-repeat;\r\n background-image: url(\"../../img/close-emeraud.svg\");\r\n background-size: 14px 14px;\r\n background-position: center;\r\n}\r\n\r\n.gp-styling-option {\r\n font-size: 11px;\r\n position: relative;\r\n line-height: 30px;\r\n padding: 0 20px;\r\n}\r\n\r\n.gp-styling-option input {\r\n display: block;\r\n position: absolute;\r\n height: 20px;\r\n top: 6px;\r\n cursor: pointer;\r\n padding: 0;\r\n}\r\n\r\n.gp-styling-option input[type=\"checkbox\"] {\r\n height: 10px;\r\n right: 70px;\r\n padding: 0;\r\n border: none;\r\n background: none;\r\n}\r\n\r\n.gp-styling-option input[type=\"color\"] {\r\n width: 30px;\r\n right: 70px;\r\n padding: 0;\r\n border: none;\r\n background: none;\r\n}\r\n\r\n.gp-styling-option input[type=\"text\"] {\r\n width: 80px;\r\n right: 40px;\r\n padding: 0 5px;\r\n margin: none;\r\n background: none;\r\n border: 1px solid #808080;\r\n color: #0B6BA7;\r\n}\r\n\r\n\r\n/* Styling slider : general */\r\n.gp-styling-option input[type=\"range\"] {\r\n margin: 0;\r\n width: 80px;\r\n right: 40px;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]:focus {\r\n box-shadow: none;\r\n outline: none;\r\n}\r\n\r\n/* Styling slider : Chrome, Safari, Opera */\r\n\r\n.gp-styling-option input[type=\"range\"]::-webkit-slider-runnable-track {\r\n -webkit-appearance: none;\r\n height: 1px;\r\n background-color: #808080;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-webkit-slider-thumb:before {\r\n position: absolute;\r\n top: 0;\r\n right: 50%;\r\n left: -200px;\r\n height: 1px;\r\n pointer-events: none;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-webkit-slider-thumb {\r\n width: 13px;\r\n height: 13px;\r\n -webkit-appearance: none;\r\n background-color: #0B6BA7;\r\n border: none;\r\n border-radius: 50%;\r\n position: relative;\r\n top: -6px;\r\n}\r\n\r\n/* Styling slider : Firefox */\r\n\r\n.gp-styling-option input[type=\"range\"]::-moz-range-track {\r\n width: 70px;\r\n height: 1px;\r\n background-color: #808080;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-moz-range-thumb {\r\n width: 13px;\r\n height: 13px;\r\n background-color: #0B6BA7;\r\n border: none;\r\n border-radius: 50%;\r\n box-shadow: 0;\r\n position: relative;\r\n}\r\n\r\n/* Styling slider : IE */\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-track {\r\n border: 0;\r\n border-color: transparent;\r\n border-radius: 0;\r\n border-width: 0;\r\n color: transparent;\r\n height: 1px;\r\n width: 70px;\r\n background-color: #808080;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-fill-lower,\r\n.gp-styling-option input[type=\"range\"]::-ms-fill-upper {\r\n background: transparent;\r\n border-radius: 0;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-thumb {\r\n width: 13px;\r\n height: 13px;\r\n background-color: #0B6BA7;\r\n border: none;\r\n border-radius: 50%;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-tooltip {\r\n display: none;\r\n}\r\n\r\n\r\n.gp-styling-option .marker-input-radio {\r\n display: none;\r\n}\r\n\r\n.gp-styling-option .marker-label {\r\n display: inline-block;\r\n height: 32px;\r\n padding: 3px;\r\n margin-right: 5px;\r\n margin-bottom: 5px;\r\n cursor: pointer;\r\n}\r\n\r\n.gp-styling-option .marker-input-radio:checked + .marker-label {\r\n padding: 2px;\r\n background-color: rgba(0,183,152,0.5);\r\n border: 1px solid #002A50;\r\n}\r\n\r\n.gp-styling-option .marker-label img {\r\n height: 24px;\r\n}\r\n","/* Geoportal Attribution */\n\n.ol-attribution .gp-control-attribution-image {\n max-height: 30px;\n max-width: inherit;\n vertical-align: middle;\n}\n",".GPpanelHeader {\n padding: unset;\n}\n\n\n[id^=GPelevationPathPanelClose] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: -27px center;\n}\n\n[id^=GPelevationPathProfil] {\n height: 150px;\n width: inherit;\n}\n\n[id^=GPelevationPathProfil] > #profileElevationByDefault > svg {\n position: absolute;\n left: 10px;\n}\n\ndiv[id^=GPelevationPathInformationsContainer] {\n position: absolute;\n top: 32px;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(255, 255, 255, 0.9);\n border-radius: 4px;\n overflow: hidden;\n}\n\n/* CSS : Raw */\n\n#profileElevationRaw {\n resize: none;\n padding: unset;\n}\n\n/* CSS : default */\n\n#profileElevationByDefault {\n display:-webkit-flex;\n display:-webkit-box;\n display:-ms-flexbox;\n display:flex;\n -webkit-box-orient:vertical;\n -webkit-box-direction:normal;\n -webkit-flex-direction:column;\n -ms-flex-direction:column;\n flex-direction:column;\n height:100%;\n}\n\n.altiPathValue {\n font-weight: 700;\n fill: #5E5E5E;\n}\n\n.altiPathCoords {\n font-style: italic;\n fill: #5E5E5E;\n}\n\n\n/* CSS : D3 */\n\n.axis-d3 > text {\n fill: rgb(94, 94, 94);\n font-family: Verdana;\n font-size: 10px;\n opacity: 1;\n text-anchor: end;\n}\n\n.axis-d3 {\n fill: none;\n stroke: #5E5E5E;\n stroke-width: 1;\n shape-rendering: crispEdges;\n}\n\n.area-d3 {\n fill: #C77A04;\n stroke: #5E5E5E;\n stroke-width: 0;\n fill-opacity: 0.4;\n}\n\n.line-d3 {\n fill: none;\n stroke: #C77A04;\n stroke-width: 1px;\n}\n\n.grid-d3 .tick {\n stroke: lightgrey;\n opacity: 0.7;\n}\n\n.grid-d3 path {\n stroke-width: 0;\n}\n\n.grid-d3 .tick {\n stroke: lightgrey;\n opacity: 0.7;\n}\n\n.grid-d3 path {\n stroke-width: 0;\n}\n\n.overlay-d3 {\n fill: none;\n pointer-events: all;\n}\n\n.focusLine-d3 {\n fill: none;\n stroke: #C77A04;\n stroke-width: 0.5px;\n}\n\n.focusCircle-d3 {\n fill: #C77A04;\n}\n\ndiv.tooltip-d3 {\n position: inherit;;\n text-align: left;\n width: 80px;\n height: 45px;\n padding: 5px;\n font: 8px sans-serif;\n background: white;\n border: 0px;\n border-radius: 8px;\n pointer-events: none;\n}\n\n[id^=GPelevationPathPanel-] {\n width: 280px;\n}\n\n[id^=GPelevationPathPanelInfo] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: -75px center;\n}\n\nbutton[id^=\"GPshowElevationPathPicto-\"] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: 1px center;\n}\n/*\n@media (min-width:720px) and (min-height:720px) {\n\n[id^=GPelevationPathPanel] {\ntop: 15px;\nleft: 15px;\n}\n\n}\n\n@media (min-width:720px) and (min-height:520px) {\n\n[id^=GPelevationPathPanel] {\nwidth: 460px;\n}\n\n[id^=GPelevationPathProfil] {\nheight: 220px;\n}\n\n}\n\n@media (max-width:560px), (max-height:340px) {\n\n[id^=GPelevationPathPanel] {\ndisplay: none !important;\n}\n\n}\n*/\n","/* main container */\ndiv[id^=GPexportContainer-] {\n padding: 5px;\n}\n\ndiv[id^=GPexportContainer-] > input.GPsubmit {\n color: white;\n}\n\n/* bouton */\ninput[id^=GPexportButton-] {\n min-width: fit-content;\n padding-left: 25px;\n padding-right: 5px;\n background-image: url(\"img/GPexportSave.svg\");\n background-size: 25px 25px;\n background-repeat: no-repeat;\n}\n\n/* menu */\n.GPexportMenuHidden {\n visibility: hidden;\n}\n\n.GPexportMenuContainer {\n position: relative;\n display: inline-block;\n}\n\n.GPexportMenuContent {\n display: none;\n position: absolute;\n background-color: #f1f1f1;\n min-width: 80px;\n padding: 8px;\n border-radius: 10px;\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n z-index: 1;\n}\n\n.GPexportMenuContent a:hover { background-color: #f1f1f1; }\n\n.GPexportMenuContainer:hover .GPexportMenuContent { display: block; }\n\n/* menu des formats */\n.GPexportMenuContent .container {\n display: block;\n position: relative;\n padding-left: 15px;\n margin-bottom: 5px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n \n.GPexportMenuContent .container input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n}\n \n.GPexportMenuContent .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 12px;\n width: 12px;\n background-color: #eee;\n border-radius: 50%;\n}\n \n.GPexportMenuContent .container:hover input ~ .checkmark {\n background-color: #ccc;\n}\n\n.GPexportMenuContent .container input:checked ~ .checkmark {\n background-color: #366291;\n}\n \n.GPexportMenuContent .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n}\n\n.GPexportMenuContent .container input:checked ~ .checkmark:after {\n display: block;\n}\n \n.GPexportMenuContent .container .checkmark:after {\n top: 4px;\n left: 4px;\n width: 4px;\n height: 4px;\n border-radius: 50%;\n background: white;\n}","/* GET FEATURE INFO */\nbutton[id^=GPgetFeatureInfoPicto][aria-pressed=\"true\"] {\n background-repeat: no-repeat;\n background-position: 1px center;\n}\n\nbutton[id^=GPgetFeatureInfoPicto] {\n background-image: url(\"img/GPactivateGfi.png\");\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n background-position: -25px center;\n /* transition: border-radius 0.5s ease-out 0s, opacity 0.5s ease-out 0s; */\n}\n\n.GPcloseGetFeatureInfo {\n background-image: url(\"../../img/GPclose.png\");\n background-position: 0px center;\n}\n\n.GPgfiLayerButton {\n border: unset;\n background: unset;\n text-align: left;\n font-weight: bold;\n}\n\nbutton[aria-expanded=\"true\"].GPgfiLayerButton span.GPshowGfiLayerFeature {\n -webkit-transform: rotateX(180deg);\n transform: rotateX(180deg);\n}\n\n.GPshowGfiLayerFeature {\n display: inline-block;\n width: 28px;\n height: 28px;\n vertical-align: middle;\n background-image: url(\"img/GPgfiDetails.png\");\n background-position: -26px 0;\n}","/* ISOCHRON */\r\n[id^=GPisochronPanel-] {\r\n width: 280px;\r\n}\r\n\r\n.GPshowIsochronPicto {\r\n background-image: url(\"img/GPisochronOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GPisochronPanelClose {\r\n background-image: url(\"img/GPisochronOpen.png\");\r\n}\r\n\r\n/* Reset picto */\r\n\r\nbutton[id^=GPisochronReset] {\r\n opacity: 0.8;\r\n transition: opacity 0.2s ease-out;\r\n}\r\n\r\nbutton[id^=GPisochronReset]:hover {\r\n opacity: 1;\r\n}\r\n\r\n.GPisochronReset {\r\n background-color: #366291;\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -281px center;\r\n}\r\n\r\n/* Isochron form */\r\nform[id^=GPisochronForm] {\r\n padding: 15px;\r\n}\r\n\r\ndiv[id^=GPisochronChoice] {\r\n margin: auto;\r\n margin-top: 10px;\r\n margin-bottom: 5px;\r\n width: 160px;\r\n -webkit-justify-content: space-between;\r\n -webkit-box-pack: justify;\r\n -ms-flex-pack: justify;\r\n justify-content: space-between;\r\n}\r\n\r\np[id^=GPisochronPointLabelP], p[id^=GPisochronValueChronLabelP] {\r\n margin: 2px 0 5px 0;\r\n}\r\n\r\n.GProuteComputationLabel {\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GPisochronChoiceAlt input:checked + label + span {\r\n color: #366291;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron] + .GPisochronChoiceAltImg {\r\n background-position: -56px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron]:checked + .GPisochronChoiceAltImg {\r\n background-position: -84px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltDist] + .GPisochronChoiceAltImg {\r\n background-position: -112px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltDist]:checked + .GPisochronChoiceAltImg {\r\n background-position: -140px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron] {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n}\r\n\r\n.GPisochronOriginPointerImg,\r\n.GPisochronChoiceAltImg,\r\n.GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n font-size: 0;\r\n}\r\n\r\n.GPisoExclusionsOption {\r\n background-image: url(\"img/GPisochronCheck.png\");\r\n}\r\n\r\n.GPisochronOriginPointerImg {\r\n width: 28px;\r\n background-color: #F2F2F2;\r\n cursor: pointer;\r\n}\r\n\r\n.GPisochronChoiceAlt input {\r\n display: none;\r\n}\r\n\r\n.GPisochronChoiceAltImg {\r\n display: block;\r\n width: 28px;\r\n height: 28px;\r\n margin: auto;\r\n cursor: pointer;\r\n}\r\n\r\n.GPisochronChoiceAlt span {\r\n cursor: pointer;\r\n display:block;\r\n color: #999;\r\n}\r\n\r\n.GPisochronModeLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 5px;\r\n}\r\n\r\ninput[id^=GPisochronTransportCar] + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -168px 0;\r\n}\r\n\r\ninput[id^=GPisochronTransportCar]:checked + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -196px 0;\r\n}\r\n\r\ninput[id^=GPisochronTransportPedestrian] + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -224px 0;\r\n}\r\n\r\ninput[id^=GPisochronTransportPedestrian]:checked + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -252px 0;\r\n}\r\n\r\n.GPisochronTransportChoice input {\r\n display: none;\r\n}\r\n\r\ndiv[id^=GPisochronTransportChoice] > div {\r\n width: 100%;\r\n justify-content: center;\r\n}\r\n\r\ndiv[id^=GPisochronValueChron],\r\ndiv[id^=GPisochronValueDist] {\r\n width: 220px;\r\n margin: 5px auto;\r\n}\r\n\r\n.GPisochronTransportImg {\r\n display: inline-block;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n}\r\n\r\n.GPisochronTransportImg:first-of-type {\r\n margin-left: 18px;\r\n margin-right: 10px;\r\n}\r\n\r\nselect[id^=GPisochronDirectionSelect] {\r\n width: 80px;\r\n margin: 5px auto;\r\n}\r\n\r\n.GPshowIsoExclusionsPicto {\r\n top: unset;\r\n right: 0;\r\n transition: all 0.5s ease-out 0s;\r\n}\r\n\r\n.GPisoExclusionsLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 10px;\r\n font-weight: bold;\r\n line-height: 16px;\r\n}\r\n\r\n.GPisoExclusionsOptions {\r\n display: -webkit-flex;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-justify-content: space-around;\r\n -ms-flex-pack: distribute;\r\n justify-content: space-around;\r\n}\r\n\r\n.GPisoExclusionsOption {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n color: #A77;\r\n background-color: #FEE;\r\n padding-left: 28px;\r\n padding-right: 5px;\r\n border: 1px solid #A77;\r\n border-radius: 3px;\r\n cursor: pointer;\r\n}\r\n\r\ninput:checked + .GPisoExclusionsOption {\r\n background-color: #EFE;\r\n background-position: 0 -28px;\r\n color: #797;\r\n border: 1px solid #797;\r\n}\r\n\r\ninput[id^=GPisochronSubmit-] {\r\n width: fit-content;\r\n padding: 0 10px;\r\n}","\r\n/* Import form */\r\n[id^=\"GPimportPanel-\"] {\r\n width: 340px;\r\n}\r\n\r\n[id^=\"GPimportGetCapPanel-\"],\r\n[id^=\"GPimportMapBoxPanel-\"] {\r\n width: 340px;\r\n}\r\n\r\ndiv[id^=\"GPimportTypeLine-\"] {\r\n border-bottom: 1px solid #999;\r\n padding-bottom: 15px;\r\n margin-bottom: 15px;\r\n}\r\n\r\ndiv[id^=\"GPimportChoice-\"] {\r\n margin-top: 5px;\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GPshowImportPicto {\r\n background-image: url(\"img/GPimportOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GPimportPanelClose,\r\n.GPimportGetCapPanelClose,\r\n.GPimportMapBoxPanelClose {\r\n background-image: url(\"img/GPimportOpen.png\");\r\n}\r\n\r\n.GPimportPanelReturnPicto {\r\n background-color: #366291;\r\n background-image: url(\"../../img/GPreturn.png\");\r\n /* background-position: 3px center; */\r\n}\r\n\r\n.GPimportChoiceAlt input[type=\"radio\"] {\r\n display: none;\r\n}\r\n\r\n.GPimportChoiceAltTxt {\r\n display: block;\r\n line-height: 28px;\r\n color: #BBB;\r\n font-weight: bold;\r\n cursor: pointer;\r\n}\r\n\r\ninput[type=\"radio\"]:checked + .GPimportChoiceAltTxt {\r\n color: #366291;\r\n}\r\n\r\n/* Line inputs */\r\n\r\n.GPimportInputLine {\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n margin-bottom: 10px;\r\n}\r\n\r\n.GPimportInputLine > * {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n border: 1px solid #999;\r\n border-radius: 0;\r\n}\r\n\r\n.GPimportInputLine *:not(:last-child) {\r\n border-right:none;\r\n}\r\n\r\n.GPimportInputLine *:first-child {\r\n border-radius: 3px 0 0 3px;\r\n}\r\n\r\n.GPimportInputLine *:last-child {\r\n border-radius: 0 3px 3px 0;\r\n}\r\n\r\n.GPimportInputLine > *:not(input) {\r\n overflow: hidden;\r\n white-space: nowrap;\r\n -o-text-overflow: ellipsis;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n.GPimportInputLine > input {\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding: 0 5px;\r\n min-width: 0;\r\n}\r\n\r\n.GPimportInputLine > select {\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding-right: 7px;\r\n}\r\n\r\n.GPimportInputLine > label {\r\n background-color: #F2F2F2;\r\n color: #666;\r\n padding-left: 7px;\r\n padding-right: 9px;\r\n cursor: pointer;\r\n}\r\n\r\n\r\n\r\n.GPimportGetCapProposal {\r\n width: 100%;\r\n height: 28px;\r\n line-height: 16px;\r\n padding: 6px 10px;\r\n color: #5E5E5E;\r\n font-size: 1.0em;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n -o-text-overflow:ellipsis;\r\n text-overflow:ellipsis;\r\n cursor: pointer;\r\n list-style-type: none;\r\n}\r\n\r\n.GPimportGetCapRubriqueTitle,\r\n.GPimportMapBoxSourceTitle,\r\n.GPimportMapBoxListSourceTitle {\r\n color: #5E5E5E;\r\n}\r\n\r\n.GPimportGetCapRubrique,\r\n.GPimportGetCapListRubrique,\r\n.GPimportMapBoxSource,\r\n.GPimportMapBoxListSource {\r\n list-style-type: none;\r\n}\r\n\r\nli.GPimportGetCapRubrique:before,\r\nli.GPimportGetCapListRubrique:before,\r\nli.GPimportMapBoxSource:before,\r\nli.GPimportMapBoxListSource:before {\r\n\t/* content: \"→ \"; caractère UTF-8 */\r\n content: \"» \";\r\n}\r\n\r\n.GPimportGetCapProposal:hover,\r\n.GPimportGetCapRubrique:hover,\r\n.GPimportMapBoxSource {\r\n\r\n}\r\n\r\n.GPimportGetCapRubriqueTitle:hover,\r\n.GPimportMapBoxSourceTitle:hover {\r\n color: #000000;\r\n}\r\n\r\n.GPimportGetCapProposal:hover {\r\n color: #000000;\r\n}\r\n\r\n.GPimportMapBoxSourceVisibility,\r\n.GPimportMapBoxSourceStyle,\r\n.GPimportMapBoxSourceFilter,\r\n.GPimportMapBoxSourceScale {\r\n display: inline-block;\r\n margin-left: 15px;\r\n}\r\n\r\n.GPimportMapBoxJsonEdit {\r\n outline: 1px solid #ccc;\r\n padding: 5px;\r\n margin: 5px;\r\n}\r\n.GPimportMapBoxJsonEdithidden {\r\n display: none;\r\n}\r\n\r\n.gp-json-string { color: green; }\r\n.gp-json-number { color: darkorange; }\r\n.gp-json-boolean { color: blue; }\r\n.gp-json-null { color: magenta; }\r\n.gp-json-key { color: red; }\r\n\r\n.GPimportMapBoxSourceVisibilityInput {\r\n display: block !important;\r\n}\r\n\r\n.GPimportMapBoxSourceVisibilityLabel {\r\n\r\n}\r\n\r\n.GPimportMapBoxSourceScale {\r\n}\r\n\r\n[id^=\"GPimportPanelReturnPicto-\"] {\r\n position: absolute;\r\n width: 26px;\r\n height: 26px;\r\n border-radius: 3px;\r\n opacity: 1;\r\n background-position: 0 0;\r\n cursor: pointer;\r\n}","/* LAYER SWITCHER */\r\n\r\n.GPlayerSwitcher_layer {\r\n background-color: #FFF;\r\n}\r\n\r\ndiv[id^=GPlayerSwitcher-] {\r\n height: 32px;\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] + dialog[id^=GPlayersList] {\r\n width: 190px;\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto] {\r\n /* transition: opacity 0.5s ease-out 0s, box-shadow 0.5s ease-out 0s, border 0.5s ease-out 0s, border-radius 0.5s ease-out 0s; */\r\n background-position: -2px center;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/GPshowLayersList.png\");\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] {\r\n border-top-right-radius: 0;\r\n border-top-left-radius: 0;\r\n background-position: -35px center;\r\n /* transition: border-radius 0.5s ease-out 0s, opacity 0.5s ease-out 0s; */\r\n}\r\n\r\n/* Layers list */\r\n.GPpanelBody {\r\n overflow: auto;\r\n max-height: 200px;\r\n}\r\n\r\nbutton[id^=GPlayerInfoClose] {\r\n background-position: -2px center;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/GPlayerInfoClose.png\");\r\n background-color: unset;\r\n}\r\nbutton[id^=GPlayersPanelClose] {\r\n background-position: -2px center;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/GPlayerClose.png\");\r\n}\r\n\r\n.GPpanelIcon {\r\n background-image: url(\"img/layers.svg\");\r\n background-repeat: no-repeat;\r\n background-size: auto auto;\r\n background-position: center center;\r\n}\r\n/* Layer info panel */\r\n\r\n[id^=GPlayerInfoPanel] {\r\n right: 190px;\r\n}\r\n\r\ndiv[id^=GPlayerInfoTitle] {\r\n color: #366291;\r\n border-bottom: 1px solid #366291;\r\n}\r\n\r\n\r\n.GPlayerBasicTools,\r\n.GPlayerAdvancedTools {\r\n position: relative;\r\n width: 100%;\r\n height: 28px;\r\n}\r\n\r\n.GPlayerExtent,\r\n.GPlayerVisibility,\r\n.GPlayerInfo,\r\n.GPlayerInfoOpened,\r\n.GPlayerRemove {\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlayerExtent,\r\n.GPlayerVisibility,\r\n.GPlayerName,\r\n.GPlayerInfo,\r\n.GPlayerInfoOpened,\r\n.GPlayerRemove,\r\n.GPlayerOpacity,\r\n.GPlayerOpacityValue {\r\n position: absolute;\r\n top: 0;\r\n}\r\n\r\n.GPghostLayer {\r\n opacity: 0;\r\n}\r\n\r\n/* Layer basic tools */\r\n\r\n.GPlayerBasicTools {\r\n background-color: #FFF;\r\n}\r\n\r\n\r\n/* Layer advanced tools */\r\n\r\n.GPlayerExtent,\r\n.GPlayerVisibility,\r\n.GPshowLayerAdvancedTools,\r\n.GPlayerInfo,\r\n.GPlayerInfoOpened,\r\n.GPlayerRemove {\r\n background-image: url(\"img/GPlayerTools.png\");\r\n}\r\n\r\n/* Opacity slider : Chrome, Safari, Opera */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-runnable-track {\r\n background: url(\"img/GPopacitySlider.png\");\r\n}\r\n\r\n/* Opacity slider : Firefox */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-moz-range-track {\r\n background: url(\"img/GPopacitySlider.png\");\r\n}\r\n\r\n/* Opacity slider : IE */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-track {\r\n background: url(\"img/GPopacitySlider.png\");\r\n}\r\n\r\n\r\ndiv[id^=GPlayerInfoQuicklook] {\r\n background-image: url(\"img/GPlayerInfo.png\");\r\n}\r\n\r\ndiv[id^=GPlayerInfoClose] {\r\n background-image: url(\"img/GPlayerInfoClose.png\");\r\n}\r\n\r\n.GPlayerInfoLink,\r\n.GPlayerInfoPopup {\r\n background-image: url(\"img/GPlayerInfo.png\");\r\n}\r\n\r\nbutton[id^=GPinfo_ID_],\r\nbutton[id^=GPremove_ID_],\r\nbutton[id^=GPvisibilityPicto_ID_] {\r\n border: none;\r\n background-color: transparent;\r\n}\r\n\r\nbutton[id^=GPvisibilityPicto_ID_][aria-pressed=\"false\"] {\r\n left: 0;\r\n background-position: -28px 0;\r\n}\r\n\r\nbutton[id^=GPvisibilityPicto_ID_][aria-pressed=\"true\"] {\r\n background-position: 0 0;\r\n}\r\n\r\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools {\r\n max-height: 28px;\r\n}\r\n\r\n.GPshowLayerAdvancedTools {\r\n top: 0;\r\n right: 0;\r\n background-position: -112px 0;\r\n}\r\n\r\n.GPlayerInfo {\r\n left: 0;\r\n background-position: -55px 0;\r\n}\r\n\r\n.GPlayerInfoOpened {\r\n left: 0;\r\n background-position: -83px 0;\r\n}\r\n\r\n.GPlayerOpacity {\r\n left: 28px;\r\n width: calc(100% - 100px);\r\n height: 28px;\r\n padding-left: 8px;\r\n}\r\n\r\n.GPlayerOpacityValue {\r\n width: 32px;\r\n left: calc(100% - 60px);\r\n line-height: 28px;\r\n font-size: 10px;\r\n font-style: italic;\r\n cursor: default;\r\n}\r\n\r\n.GPlayerRemove {\r\n right: 0;\r\n background-position: -140px 0;\r\n}\r\n\r\n/* Opacity slider : general */\r\n\r\n.GPlayerOpacity input {\r\n -webkit-appearance: none;\r\n -moz-appearance: none;\r\n background: none;\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n margin: 0;\r\n padding: 0;\r\n overflow: hidden;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]:focus {\r\n box-shadow: none;\r\n outline: none;\r\n}\r\n\r\n/* Opacity slider : Chrome, Safari, Opera */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-runnable-track {\r\n -webkit-appearance: none;\r\n height: 3px;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-thumb:before {\r\n position: absolute;\r\n top: 0;\r\n right: 50%;\r\n left: -200px;\r\n height: 3px;\r\n pointer-events: none;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-thumb {\r\n width: 9px;\r\n height: 17px;\r\n -webkit-appearance: none;\r\n border: 2px solid #FFF;\r\n background-color: #505050;\r\n position: relative;\r\n top: -7px;\r\n}\r\n\r\n/* Opacity slider : Firefox */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-moz-range-track {\r\n width: 80px;\r\n height: 3px;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-moz-range-thumb {\r\n width: 5px;\r\n height: 13px;\r\n border: 2px solid #FFF;\r\n border-radius: 0;\r\n box-shadow: 0;\r\n background-color: #505050;\r\n position: relative;\r\n}\r\n\r\n/* Opacity slider : IE */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-track {\r\n border: 0;\r\n border-color: transparent;\r\n border-radius: 0;\r\n border-width: 0;\r\n color: transparent;\r\n height: 3px;\r\n width: 80px;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-fill-lower,\r\n.GPlayerOpacity input[type=\"range\"]::-ms-fill-upper {\r\n background: transparent;\r\n border-radius: 0;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-thumb {\r\n width: 5px;\r\n height: 13px;\r\n border: 2px solid #FFF;\r\n background-color: #505050;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-tooltip {\r\n display: none;\r\n}\r\n\r\n/* Layer info panel */\r\n\r\n[id^=GPlayerInfoPanel] {\r\n position: absolute;\r\n top: 0;\r\n overflow-y: hidden;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n}\r\n\r\n.GPlayerInfoPanelOpened {\r\n display: block;\r\n}\r\n\r\n.GPlayerInfoPanelClosed {\r\n display: none;\r\n}\r\n\r\n/* div[id^=GPlayerInfoContent] {\r\n position: relative;\r\n width: 280px;\r\n max-height: 200px;\r\n overflow-y: auto;\r\n padding-left: 10px;\r\n padding-right: 10px;\r\n} */\r\n\r\ndiv[id^=GPlayerInfoTitle] {\r\n width: calc(100% - 52px);\r\n margin: auto;\r\n margin-bottom: 10px;\r\n padding-bottom: 5px;\r\n text-align: center;\r\n font-size: 1.1em;\r\n font-weight: bold;\r\n}\r\n\r\ndiv[id^=GPlayerInfoQuicklook] {\r\n position: absolute;\r\n top: -2px;\r\n left: 10px;\r\n width: 20px;\r\n height: 20px;\r\n cursor: pointer;\r\n}\r\n\r\ndiv[id^=GPlayerInfoClose] {\r\n position: absolute;\r\n top: -8px;\r\n right: 10px;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n}\r\n\r\ndiv[id^=GPlayerInfoDescription] {\r\n font-size: 0.9em;\r\n}\r\n\r\ndiv[id^=GPlayerInfoLegend] {\r\n\r\n}\r\n\r\ndiv[id^=GPlayerInfoMetadata] {\r\n\r\n}\r\n\r\n.GPlayerInfoSubtitle {\r\n padding-left: 35px;\r\n font-weight: bold;\r\n margin-top: 10px;\r\n margin-bottom: 4px;\r\n}\r\n\r\n.GPlayerInfoLink,\r\n.GPlayerInfoPopup {\r\n line-height: 20px;\r\n padding-left: 23px;\r\n white-space: nowrap;\r\n overflow-x: hidden;\r\n text-overflow: ellipsis;\r\n color: #999999;\r\n background-repeat: no-repeat;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlayerInfoLink {\r\n background-position: 0 -20px;\r\n}\r\n\r\n.GPlayerInfoLink:hover,\r\n.GPlayerInfoPopup:hover {\r\n color: #333;\r\n}\r\n\r\n.GPlayerInfoLink a,\r\n.GPlayerInfoLink a:visited\r\n.GPlayerInfoLink a:focus\r\n.GPlayerInfoLink a:hover {\r\n text-decoration: none;\r\n color: inherit;\r\n}\r\n\r\n\r\n.GPlayerName {\r\n left: 28px;\r\n width: calc(100% - 56px);\r\n line-height: 28px;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n padding-left: 4px;\r\n cursor: move;\r\n}\r\n\r\n.outOfRange .GPlayerName {\r\n color: #AAA;\r\n}\r\n\r\ndiv[id^=GPlayerInfoContent] {\r\n width: 280px;\r\n}","/* Location */\n[id*=\"GPlocationOriginPointer\"] {\n background-image: url(\"img/GPlocationOptions.png\");\n background-repeat: no-repeat;\n}\n\n[id^=GPlocationStageRemove],\n[id^=GPlocationStageAdd] {\n background-image: url(\"img/GPlocationOptions.png\");\n}\n\n[id^=GPlocationStageRemove],\n[id^=GPlocationStageAdd] {\n width: 28px;\n height: 28px;\n border: none;\n cursor: pointer;\n}\n\n.GPlocationOpen {\n background-color: unset;\n}\n.GPlocationOriginLabel {}\n.GPlocationStageRemove {\n background-position: -84px center;\n}\n.GPlocationStageAdd {\n background-position: -56px center;\n}\n\n[id*=\"GPlocationOriginPointer\"] + .GPlocationOriginPointerImg {\n background-position: -1px center;\n}\n\n[id*=\"GPlocationOriginPointer\"]:checked + .GPlocationOriginPointerImg {\n background-position: -29px center;\n}\n\n.GPlocationStageFlexInput {\n max-height: 28px;\n opacity: 1;\n}\n\nbutton.GPlocationOriginPointerImg[id*=\"GPlocationOriginPointerImg\"] {\n width: 28px;\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n border-right: 1px solid #999;\n}\n\n.GPlocationStageFlexInput {\n margin-bottom: 5px;\n}\n\ndiv[id^=GPlocationAutoCompleteList] {\n\n}\n","/* MEASURELENGTH POSITION */\r\n\r\n\r\n/* Showing/hiding measureLength position panel */\r\n\r\nbutton[id^=\"GPshowMeasureAreaPicto-\"] {\r\n background-image: url(\"img/GPmeasuresOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: -78px center;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAreaPicto-\"][aria-pressed=\"false\"] {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAreaPicto-\"][aria-pressed=\"true\"] {\r\n background-color: rgba(0,60,136,0.7);\r\n}","/* MEASURELENGTH POSITION */\r\n\r\n/* Showing/hiding drawing panel */\r\n\r\nbutton[id^=\"GPshowMeasureLengthPicto-\"] {\r\n background-image: url(\"img/GPmeasuresOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: -24px center;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureLengthPicto-\"][aria-pressed=\"false\"] {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureLengthPicto-\"][aria-pressed=\"true\"] {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n","/* MEASURELENGTH POSITION */\r\n\r\n/* Showing/hiding measureLength position panel */\r\n\r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"] {\r\n background-image: url(\"img/GPmeasuresOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 2px center;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"][aria-pressed=\"false\"] {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"][aria-pressed=\"true\"] {\r\n background-color: rgba(0,60,136,0.7);\r\n}","/* MEASURE TOOL */\n\n.GPmeasureTooltip {\n position: relative;\n background: rgba(0, 0, 0, 0.5);\n border-radius: 4px;\n color: white;\n padding: 4px 8px;\n white-space: nowrap;\n}\n\n.GPmeasureTooltip-measure {\n font-weight: bold;\n}\n\n.GPmeasureTooltip-info {\n font-size: 0.75em;\n text-align: center;\n}\n\n.GPmeasureTooltip-static {\n background-color: #ffcc33;\n color: black;\n border: 1px solid white;\n}\n\n.GPmeasureTooltip-hidden {\n display: none;\n}\n\n.GPmeasureTooltip-measure::before,\n.GPmeasureTooltip-info::before,\n.GPmeasureTooltip-static::before {\n border-top: 6px solid rgba(0, 0, 0, 0.5);\n border-right: 6px solid transparent;\n border-left: 6px solid transparent;\n content: \"\";\n position: absolute;\n bottom: -6px;\n margin-left: -7px;\n left: 50%;\n}\n\n.GPmeasureTooltip-static::before {\n border-top-color: #ffcc33;\n}\n","\n/* General panels */\n[id^=GPmousePositionPanel-] {\n width: 280px;\n}\n\nbutton[id^=\"GPshowMousePositionPicto-\"] {\n background-image: url(\"img/GPmousePositionOpen.png\");\n background-repeat: no-repeat;\n background-position: 1px center;\n}\n\n.GPmousePositionEditTool {\n background-image: url(\"img/GPmousePositionEditCoordinates.png\");\n}\n\nbutton[id^=GPmousePositionPanelClose] {\n background-image: url(\"img/GPmousePositionOpen.png\");\n}\n\n/* Map center localisation */\n\n.GPmousePositionLabel,\n.GPmousePositionCoords {\n display: inline-block;\n line-height: 20px;\n}\n\n.GPmousePositionLabel {\n width: 100px;\n font-weight: bold;\n}\n\n.GPmousePositionCoords {\n width: 110px;\n}\n\n/* Showing settings */\n\n.GPshowMousePositionSettingsPicto {\n bottom: 5px;\n right: 0;\n transition: all 0.5s ease-out 0s;\n}\n\n.GPmousePositionSettingsLabel {\n display: block;\n margin: auto;\n text-align: center;\n font-weight: bold;\n line-height: 16px;\n}\n\n.GPmousePositionSettingsSelect {\n width: 180px;\n margin-top: 5px;\n margin-inline: auto;\n}\n\n/* sexagesimal coordinates */\n\n.GPSexagesimal, .GPSexagesimalsec {\n margin:0;\n border: 1px solid rgb(204, 204, 204);\n border-radius: 4px;\n}\n\ninput:read-only.GPSexagesimal, input:read-only.GPSexagesimalsec {\n text-align: right;\n}\n\n\n.GPmousePositionSexagesimalLabel {\n font-size: 1.2em;\n vertical-align: middle;\n padding: 0;\n}\n\n/* direction N/S ou E/O */\nselect.GPmousePositionDirection {\n border: 1px solid #999;\n margin-left: 2px;\n}\n\nselect.GPmousePositionDirection:disabled{\n border: none;\n background: transparent;\n color: black;\n /*For FireFox*/\n -webkit-appearance: none;\n /*For Chrome*/\n -moz-appearance: none;\n}\n\n/*For IE10+*/\nselect.GPmousePositionDirection:disabled::-ms-expand {\n display: none;\n}\nselect.GPmousePositionDirection:disabled::-ms-value {\n color: black;\n}\n\n.GPmousePositionUnits,\n.GPmousePositionAltitudeUnits {\n margin-left: 5px;\n}\n\n/* EDIT COORDINATES TOOLS */\n.GPmousePositionPanelEditTools {\n position: absolute;\n top: 20px;\n right: 5px;\n}\n\n.GPmousePositionEditTool {\n width: 18px;\n height: 18px;\n display: inline-block;\n cursor: pointer;\n}\n","/* REVERSE GEOCODING */\r\n[id^=\"GPreverseGeocodingPanel-\"] {\r\n width: 280px;\r\n}\r\n\r\n.GPshowReverseGeocodingPicto {\r\n background-image: url(\"img/GPreverseGeocodingOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GPreverseGeocodingPanelClose {\r\n background-image: url(\"img/GPreverseGeocodingOpen.png\");\r\n}\r\n\r\n.GPreverseGeocodingReturnPicto {\r\n background-image: url(\"../../img/GPreturn.png\");\r\n background-repeat: no-repeat;\r\n background-position: 0 center;\r\n}\r\n\r\n/* Results panel */\r\n\r\n.GPlocationHighlight {\r\n background-color: rgba(255,200,0,0.25);\r\n color: #222;\r\n}","/* ROUTE */\r\n[id^=GProutePanel-] {\r\n width: 320px;\r\n}\r\n\r\n.GPshowRoutePicto {\r\n background-image: url(\"img/GProuteOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GProutePanelClose {\r\n background-image: url(\"img/GProuteOpen.png\");\r\n}\r\n\r\n/* Route form */\r\nform[id^=GProuteForm] {\r\n padding: 15px;\r\n}\r\n\r\n.GProuteStageFlexInput {\r\n max-height: 28px;\r\n opacity: 1;\r\n}\r\n\r\n.GProuteStageFlexInputHidden {\r\n max-height: 0;\r\n opacity: 0;\r\n overflow: hidden;\r\n}\r\n\r\n.GProutePointLabelP {\r\n margin: 2px 0 5px 0;\r\n}\r\n\r\n.GProuteComputationLabel {\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GProuteOriginPointerImg,\r\n.GProuteStageRemove,\r\ndiv[id^=GProuteStageAdd],\r\n.GProuteTransportImg {\r\n background-image: url(\"img/GProuteOptions.png\");\r\n font-size: 0;\r\n}\r\n\r\n.GProuteFormMini {\r\n max-height: 58px;\r\n}\r\n\r\n.GProuteExclusionsOption {\r\n background-image: url(\"img/GProuteCheck.png\");\r\n}\r\n\r\n.GProuteModeLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GProuteTransportImg {\r\n display: inline-block;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n content-visibility: hidden;\r\n}\r\n\r\n.GProuteTransportImg:first-of-type {\r\n margin-left: 18px;\r\n margin-right: 10px;\r\n}\r\n\r\ninput[id^=GProuteTransportCar] + .GProuteTransportImg {\r\n background-position: -112px 0;\r\n}\r\n\r\ninput[id^=GProuteTransportCar]:checked + .GProuteTransportImg {\r\n background-position: -140px 0;\r\n}\r\n\r\ninput[id^=GProuteTransportPedestrian] + .GProuteTransportImg {\r\n background-position: -168px 0;\r\n}\r\n\r\ninput[id^=GProuteTransportPedestrian]:checked + .GProuteTransportImg {\r\n background-position: -196px 0;\r\n}\r\n\r\ndiv[id^=GProuteTransportChoice] input {\r\n display: none;\r\n}\r\n\r\ndiv[id^=GProuteTransportChoice] .gpf-radio-btn-group {\r\n justify-content: center;\r\n}\r\n\r\nselect[id^=GProuteComputationSelect] {\r\n width: 100px;\r\n}\r\n/* Result panel */\r\n\r\n.GProuteResultsDetailsInstructionHighlight {\r\n background-color: rgba(255,200,0,0.25);\r\n color: #222;\r\n}\r\n\r\n.GProuteResultStage {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n}\r\n\r\n\r\n.GProuteResultStageLabel,\r\n.GProuteResultStageValue,\r\n.GProuteResultsValueLabel {\r\n display: inline-block;\r\n line-height: 18px;\r\n}\r\n\r\n.GProuteResultStageLabel,\r\n.GProuteResultsValueLabel {\r\n color: #666;\r\n}\r\n\r\n.GProuteResultStageLabel {\r\n width: 60px;\r\n}\r\n\r\n.GProuteResultsValueLabel {\r\n width: 65px;\r\n}\r\n\r\n.GProuteResultStageValue {\r\n -webkit-flex: 1;\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n overflow-x: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n/* Exclusions */\r\n\r\n\r\n.GPshowRouteExclusionsPicto {\r\n top: unset;\r\n right: 0;\r\n transition: all 0.3s ease-out 0s;\r\n transform: translateY(-100%);\r\n}\r\n\r\n.GProuteExclusionsLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 8px;\r\n margin-top: 8px;\r\n font-weight: bold;\r\n line-height: 16px;\r\n}\r\n\r\n.GProuteExclusionsOptions {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n -webkit-justify-content: space-around;\r\n -ms-flex-pack: distribute;\r\n justify-content: space-around;\r\n}\r\n\r\n.GProuteExclusionsOption {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n color: #A77;\r\n background-color: #FEE;\r\n padding-left: 28px;\r\n padding-right: 5px;\r\n border: 1px solid #A77;\r\n border-radius: 3px;\r\n cursor: pointer;\r\n}\r\n\r\ninput:checked + .GProuteExclusionsOption {\r\n background-color: #EFE;\r\n background-position: 0 -28px;\r\n color: #797;\r\n border: 1px solid #797;\r\n}\r\n\r\n/* Reset picto */\r\n\r\nbutton[id^=GProuteReset] {\r\n /* background-color: #366291; */\r\n background-image: url(\"img/GProuteOptions.png\");\r\n background-position: -224px center;\r\n opacity: 0.8;\r\n transition: opacity 0.2s ease-out;\r\n}\r\n\r\n/* Results popup */\r\n\r\n.gp-features-content-div {\r\n /* min-width: 240px; */\r\n}\r\n\r\n/* Results details header */\r\ndiv[id^=GProuteResultsValueDist],\r\ndiv[id^=GProuteResultsValueTime] {\r\n color: #366291;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails] + label:hover,\r\ninput[id^=GProuteResultsShowDetails] + label + label:hover {\r\n color: #366291;\r\n}\r\n\r\ndiv[id^=GProuteResultsStages] {\r\n margin-bottom: 15px;\r\n}\r\n\r\ndiv[id^=GProuteResultsValueDist],\r\ndiv[id^=GProuteResultsValueTime] {\r\n display: inline-block;\r\n line-height: 18px;\r\n}\r\n\r\ndiv[id^=GProuteResultsValueDist],\r\ndiv[id^=GProuteResultsValueTime] {\r\n width: 80px;\r\n font-weight: bold;\r\n}\r\n\r\nselect[id^=GProuteResultsComputationSelect] {\r\n width: 100px;\r\n}\r\n\r\ndiv[id^=GProuteResultsNew] {\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 3px;\r\n opacity: 0.8;\r\n background-position: -224px 0;\r\n transition: opacity 0.2s ease-out;\r\n cursor: pointer;\r\n background-color: #366291;\r\n background-image: url(\"img/GProuteOptions.png\");\r\n position: initial;\r\n}\r\n\r\n.GPfakeBorder {\r\n display: inline-block;\r\n height: 14px;\r\n width: 60px;\r\n border-bottom: 1px solid #999;\r\n}\r\n\r\n.GPfakeBorderLeft {\r\n margin-left:15px;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails] + label,\r\ninput[id^=GProuteResultsShowDetails] + label + label {\r\n width: 130px;\r\n line-height: 28px;\r\n vertical-align: top;\r\n text-align: center;\r\n font-weight: bold;\r\n cursor: pointer;\r\n transition: color 0.2s ease-out;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails] + label,\r\ninput[id^=GProuteResultsShowDetails]:checked + label + label {\r\n display: inline-block;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails]:checked + label,\r\ninput[id^=GProuteResultsShowDetails] + label + label {\r\n display: none;\r\n}\r\n\r\ndiv:has(input[id^=GProuteResultsShowDetails]) + div[id^=GProuteResultsDetails] {\r\n max-height: 0;\r\n opacity: 0;\r\n}\r\n\r\ndiv:has(input[id^=GProuteResultsShowDetails]:checked) + div[id^=GProuteResultsDetails] {\r\n max-height: 200px;\r\n opacity: 1;\r\n}\r\n\r\ndiv[id^=GProuteResultsDetails] {\r\n overflow-y: auto;\r\n transition: max-height 0.5s ease-in-out 0.25s, opacity 0.5s ease-in-out 0.25s;\r\n}\r\n\r\n.GProuteResultsDetailsNumber,\r\n.GProuteResultsDetailsInstruction {\r\n display: inline-block;\r\n margin-top: 4px;\r\n line-height: 16px;\r\n color: #666;\r\n}\r\n\r\n.GProuteResultsDetailsNumber {\r\n font-weight: bold;\r\n width: 22px;\r\n text-align: right;\r\n vertical-align: top;\r\n}\r\n\r\n.GProuteResultsDetailsInstruction {\r\n width: calc(100% - 30px);\r\n padding-left: 5px;\r\n}\r\n\r\ninput[id^=GProuteSubmit-] {\r\n width: fit-content;\r\n padding: 0 10px;\r\n}","/* SEARCH ENGINE */\r\n\r\n[id^=\"GPsearchEngine-\"] {\r\n flex-direction: row;\r\n align-items: center;\r\n}\r\n\r\n.GPshowSearchEnginePicto {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 0 center;\r\n}\r\n\r\n.GPsearchRadioContainer {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -26px center;\r\n background-repeat: no-repeat;\r\n transition: border-radius 0.5s ease-out 0s;\r\n color: transparent;\r\n overflow: hidden;\r\n position: relative;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n width: 32px;\r\n height: 32px;\r\n padding: 2px;\r\n background-color: rgba(0,60,136,0.5);\r\n border-radius: 4px;\r\n border: 2px solid rgba(255, 255, 255, 0.4);\r\n}\r\n\r\n.GPbuttonsContainer {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.GPsearchRadioContainer:hover {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n\r\n.GPshowAdvancedSearch {\r\n background-color: #fff0;\r\n}\r\n\r\n.GPshowAdvancedSearch:hover {\r\n background-color: #fff0;\r\n}\r\n\r\n.GPshowGeolocate {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -102px center;\r\n background-repeat: no-repeat;\r\n transition: border-radius 0.5s ease-out 0s;\r\n margin-right: 5px;\r\n}\r\n\r\n.GPshowSearchByCoordinate {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -76px center;\r\n background-repeat: no-repeat;\r\n transition: border-radius 0.5s ease-out 0s;\r\n}\r\n\r\n.GPsearchInputReset {\r\n background-image: url(\"img/GPsearchEngineClose.png\");\r\n background-position: 0 center;\r\n}\r\n\r\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] {\r\n max-width: 0px;\r\n border: none;\r\n}\r\n\r\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] {\r\n border-top-right-radius: 0;\r\n}\r\n\r\nbutton[id^=GPsearchInputReset] {\r\n border-top-right-radius: 5px;\r\n border-bottom-right-radius: 5px;\r\n width: 32px;\r\n height: 32px;\r\n}\r\n\r\nbutton[id^=GPcoordinateSearchClose],\r\nbutton[id^=GPgeocodeResultsClose],\r\nbutton[id^=GPadvancedSearchClose] {\r\n top: 0;\r\n right: 0;\r\n width: 30px;\r\n height: 32px;\r\n}\r\n\r\nbutton[id^=GPcoordinateSearchClose],\r\nbutton[id^=GPgeocodeResultsClose] {\r\n background-position: 0 0;\r\n}\r\n\r\nbutton[id^=GPadvancedSearchClose] {\r\n background-repeat: no-repeat;\r\n}\r\n\r\nbutton[id^=GPcoordinateSearchClose],\r\nbutton[id^=\"GPgeocodeResultsClose\"] {\r\n background-image: url(\"img/GPsearchEngineClose.png\");\r\n}\r\n\r\nbutton[id^=\"GPadvancedSearchClose\"] {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -50px 3px;\r\n}\r\n\r\nform[id^=GPsearchInput-] {\r\n width: 280px;\r\n}\r\n\r\nform[id^=GPsearchInput-] input {\r\n display: block;\r\n width: 100%;\r\n /* height: 100%; */\r\n border: 1px solid #999;\r\n border-top-right-radius: 5px;\r\n border-bottom-right-radius: 5px;\r\n padding: 0;\r\n padding-right: 30px;\r\n padding-left: 5px;\r\n color: #333;\r\n font-size: 1.0em;\r\n}\r\n\r\nform[id^=GPsearchInput-] input:disabled {\r\n background-color: #DDD;\r\n color: #999;\r\n}\r\n\r\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] {\r\n max-width: 280px;\r\n}\r\n\r\n.GPsearchInputText {\r\n height: 32px;\r\n}\r\n\r\ndialog[id^=GPcoordinateSearchPanel],\r\ndialog[id^=GPadvancedSearchPanel] {\r\n width: 310px;\r\n position: absolute;\r\n top: 35px;\r\n margin-left: 33px;\r\n}\r\n\r\n/* Autocomplete list / geocode results */\r\n\r\n[id^=\"GPautocompleteResults-\"] {\r\n box-shadow: 0 0 6px #000;\r\n}\r\n\r\ndiv[id^=GPautoCompleteList],\r\ndialog[id^=GPgeocodeResultsList] {\r\n width: 280px;\r\n position: absolute;\r\n max-height: 140px;\r\n background-color: var(--background-default-grey);\r\n}\r\n\r\ndiv[id^=GPautoCompleteList] {\r\n top: 35px;\r\n}\r\n\r\ndialog[id^=GPgeocodeResultsList] {\r\n position: absolute;\r\n top: 35px;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n}\r\n\r\ndiv[id^=GPgeocodeResults-] {\r\n width: 100%;\r\n position: relative;\r\n background-color: #FFF;\r\n max-height: 140px;\r\n overflow-y: auto;\r\n}\r\n\r\n.GPcoordinateSearchLabel,\r\n.GPadvancedSearchCodeLabel,\r\n.GPadvancedSearchFilterLabel {\r\n max-width: 105px;\r\n}\r\n\r\n.GPcoordinateSearchSystemsSelect,\r\n.GPcoordinateSearchSystemsLabel,\r\n.GPadvancedSearchCodeLabel,\r\n.GPadvancedSearchCode,\r\n div[id^=GPadvancedSearchFilters] {\r\n margin-top: 15px;\r\n}\r\n\r\n.GPcoordinateSearchSystemsLabel,\r\n.GPcoordinateSearchSystemsSelect,\r\n.GPcoordinateSearchUnitsLabel,\r\n.GPcoordinateSearchUnitsSelect,\r\n.GPcoordinateSearchLabel,\r\n.GPcoordinateSearchInput,\r\n.GPadvancedSearchFilterLabel,\r\n.GPadvancedSearchFilterInput {\r\n margin-bottom: 5px;\r\n}\r\n",".GPshowToolBoxPicto {\n background-repeat: no-repeat;\n background-image: url(\"img/GPtoolBoxMeasureOpen.png\");\n}",".GPzoomIn {\n background-image: url(\"img/zoom-in.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center;\n height: 32px;\n width: 32px;\n border-bottom: unset;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.GPzoomOut {\n background-image: url(\"img/zoom-out.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center;\n height: 32px;\n width: 32px;\n border-top: unset;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.GPzoomIn:hover, .GPzoomOut:hover {\n cursor: pointer;\n}",".ol-custom-full-screen button {\n background-image: url(\"img/full-screen-buttons.png\");\n background-repeat: no-repeat;\n}\n.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=\"false\"] {\n background-position: 0 0;\n}\n.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=\"true\"] {\n background-position: 0 -30px;\n}\n",".GPshowOverviewMap {\n background-image: url(\"img/overviewmap.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: 2px center;\n}","div[id^=GPlegends-] {\n display: none;\n}","div[id^=GPcatalog-] {\n display: block;\n}\n\n.GPshowCatalogPicto {\n background-image: url(\"img/GPcatalogOpen.png\");\n background-repeat: no-repeat;\n background-position: 0px center;\n}\n\ndialog[id^=GPcatalogPanel-] {\n width: 280px;\n}\n\n.GPcatalogPanelClose {\n background-image: url(\"img/GPcatalogOpen.png\");\n}\n\n.GPtabs {}\n.GPtabsList {\n overflow: hidden;\n border: 1px solid #ccc;\n background-color: #f1f1f1;\n list-style-type: none;\n margin: 0;\n padding: 0;\n display: flex;\n}\n.GPtabList {\n flex: 1 1 0px;\n}\n.GPtabButton {\n background-color: inherit;\n float: left;\n border: none;\n outline: none;\n cursor: pointer;\n padding: 14px 16px;\n transition: 0.3s;\n}\n.GPtabButtonActive {\n background-color: #ccc;\n}\n.GPtabContent {\n display: none;\n padding: 6px 12px;\n border: 1px solid #ccc;\n border-top: none;\n}\n.GPtabContentSelected {\n display: block;\n}\n.GPlabelActive:hover {\n background-color: #ccc;\n}\n.GPcatalogButtonSection {\n border: unset;\n background: unset;\n}\nbutton[aria-expanded=\"true\"].GPcatalogButtonSection span.GPshowCatalogAdvancedTools {\n -webkit-transform: rotateX(180deg);\n transform: rotateX(180deg);\n}\n\n.GPshowCatalogAdvancedTools {\n display: inline-block;\n width: 28px;\n height: 28px;\n vertical-align: middle;\n background-image: url(\"img/GPcatalogTools.png\");\n background-position: -26px 0;\n}\n\n#header-search > label {\n display: none;\n}","div[id^=GPterritories-] {\n display: none\n}","div[id^=\"GPcontrolList-\"] .GPshowOpen > span {\n font-size: 24px;\n color: white;\n display: block;\n height: 24px;\n line-height: 24px;\n pointer-events: none;\n}\n\nbutton[id^=\"GPshowControlListPicto-\"][aria-pressed=\"true\"] + dialog {\n width: 200px;\n}\n\n.GPcontrolListPanelClose {\n background-image: url(\"img/close.png\");\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div {\n display: flex;\n flex-direction: row;\n column-gap: 1rem;\n align-items: center;\n padding: 0.5rem 0.5rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div:hover {\n background-color: #EEE;\n cursor: pointer;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button {\n flex-shrink: 0;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button:hover {\n background-color: rgba(0,60,136,0.5);\n}"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"Classic.css","mappings":"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","sources":["webpack://Gp/./src/packages/CSS/GPFwaiting.css","webpack://Gp/./src/packages/CSS/GPFgeneralWidget.css","webpack://Gp/./src/packages/CSS/Controls/Drawing/GPFdrawingStyle.css","webpack://Gp/./src/packages/CSS/Controls/Attribution/GPFattributionStyle.css","webpack://Gp/./src/packages/CSS/Controls/ElevationPath/GPFelevationPathStyle.css","webpack://Gp/./src/packages/CSS/Controls/Export/GPFexportStyle.css","webpack://Gp/./src/packages/CSS/Controls/GetFeatureInfo/GPFgetFeatureInfoStyle.css","webpack://Gp/./src/packages/CSS/Controls/Isochron/GPFisochronStyle.css","webpack://Gp/./src/packages/CSS/Controls/LayerImport/GPFlayerImportStyle.css","webpack://Gp/./src/packages/CSS/Controls/LayerSwitcher/GPFlayerSwitcherStyle.css","webpack://Gp/./src/packages/CSS/Controls/LocationSelector/GPFlocationStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureAreaStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureLengthStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureAzimuthStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/GPFmeasureToolTip.css","webpack://Gp/./src/packages/CSS/Controls/MousePosition/GPFmousePositionStyle.css","webpack://Gp/./src/packages/CSS/Controls/ReverseGeocoding/GPFreverseGeocodingStyle.css","webpack://Gp/./src/packages/CSS/Controls/Route/GPFrouteStyle.css","webpack://Gp/./src/packages/CSS/Controls/SearchEngine/GPFsearchEngineStyle.css","webpack://Gp/./src/packages/CSS/Controls/ToolBoxMeasure/GPFtoolBoxMeasureStyle.css","webpack://Gp/./src/packages/CSS/Controls/Zoom/GPFzoomStyle.css","webpack://Gp/./src/packages/CSS/Controls/FullScreen/GPFfullScreenStyle.css","webpack://Gp/./src/packages/CSS/Controls/OverviewMap/GPFoverviewMapStyle.css","webpack://Gp/./src/packages/CSS/Controls/Legends/GPFlegendsStyle.css","webpack://Gp/./src/packages/CSS/Controls/Catalog/GPFcatalogStyle.css","webpack://Gp/./src/packages/CSS/Controls/Territories/GPFterritoriesStyle.css","webpack://Gp/./src/packages/CSS/Controls/ControlList/GPFcontrolListStyle.css"],"sourcesContent":["/**\n* Map loading\n* @sample\n* function setMap(map) {\n* var center = this._createLoadingElement();\n* map.getViewport().appendChild(center);\n* center.className = \"\"; // invisible !\n* center.className = \"GPmapLoadingVisible\"; // visible !\n* }\n*\n* function _createLoadingElement() {\n* var div = document.createElement(\"div\");\n* div.id = \"GPmapLoading\";\n* div.className = \"\";\n* return div;\n* }\n*/\n\n#GPmapLoading {\n display: none;\n position: absolute;\n z-index: 50;\n top: 50%;\n left: 50%;\n width: 50px;\n height: 50px;\n margin-top: -25px;\n margin-left: -25px;\n}\n\n#GPmapLoading.GPmapLoadingVisible {\n display: block;\n}\n\n#GPmapLoading {\n background-image: url(\"img/waiting.gif\");\n}\n","/*********************/\r\n/* Widgets : general */\r\n/*********************/\r\n\r\n.GPwidget {\r\n position: absolute;\r\n pointer-events: auto;\r\n font-family: \"Helvetica Neue\",Arial,Helvetica,sans-serif;\r\n font-size: 13px;\r\n color: #333;\r\n}\r\n\r\n.GPwidget input[type='text'],\r\n.GPwidget input[type='button'] {\r\n -webkit-appearance: none;\r\n appearance: none;\r\n color: #333333;\r\n}\r\n\r\n.GPwidget input[type=\"checkbox\"] {\r\n display: none;\r\n}\r\n\r\n.GPwidget select {\r\n padding-left: 3px;\r\n border-radius: 3px;\r\n}\r\n\r\n.GPwidget form {\r\n margin-bottom: 0;\r\n}\r\n\r\n.GPwidget * {\r\n box-sizing: border-box;\r\n background-repeat: no-repeat;\r\n}\r\n\r\n/************/\r\n/* position */\r\n/************/\r\n:root {\r\n --size-per-row: 32px;\r\n}\r\n#position-container-top-left,\r\n#position-container-top-right,\r\n#position-container-bottom-left,\r\n#position-container-bottom-right {\r\n border-style: solid;\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n /* crée un décalage sur le searchEngine */\r\n /* align-items: center; */\r\n width: var(--size-per-row);\r\n min-height: var(--size-per-row);\r\n /* padding: 5px; */\r\n}\r\n\r\n#position-container-top-left,\r\n#position-container-top-right {\r\n top: 0;\r\n}\r\n\r\n#position-container-top-left {\r\n float: left;\r\n left: 0;\r\n}\r\n#position-container-top-right {\r\n float: right;\r\n right: 0;\r\n}\r\n\r\n#position-container-bottom-left,\r\n#position-container-bottom-right {\r\n bottom: 0px;\r\n}\r\n\r\n#position-container-bottom-right {\r\n float: right;\r\n right: 0px;\r\n}\r\n#position-container-bottom-left {\r\n float: left;\r\n left: 0px;\r\n}\r\n\r\n/******************/\r\n/* General panels */\r\n/******************/\r\n\r\n.GPpanel {\r\n box-shadow: 0 0 6px #000;\r\n border-radius: 4px;\r\n padding: unset;\r\n border: unset;\r\n background-color: #FFF;\r\n}\r\n\r\n.GPpanel {\r\n}\r\n\r\n.GPpanelHeader {\r\n position: relative;\r\n width: 100%;\r\n height: 32px;\r\n padding: 3px;\r\n background-color: #9DB1BD;\r\n border-top-left-radius: 4px;\r\n border-top-right-radius: 4px;\r\n}\r\n\r\n.GPpanelTitle {\r\n width: 100%;\r\n height: 100%;\r\n text-align: center;\r\n font-weight: bold;\r\n line-height: 26px;\r\n border-top-left-radius: 2px;\r\n border-top-right-radius: 2px;\r\n background-color: #366291;\r\n color: #FFF;\r\n}\r\n\r\n.GPpanelFooter {}\r\n\r\n.GPpanelIcon,\r\n.GPresetPicto,\r\n.GPreturnPicto,\r\n.GPpanelClose,\r\n.GPpanelReduce,\r\n.GPpanelInfo {\r\n position: absolute;\r\n width: 26px;\r\n height: 26px;\r\n cursor: pointer;\r\n border: none;\r\n background-color: #366291;\r\n}\r\n\r\n.GPpanelClose {\r\n top: 3px;\r\n right: 3px;\r\n background-position: -27px 0;\r\n}\r\n\r\n.GPreturnPicto {\r\n top: 3px;\r\n left: 3px;\r\n}\r\n\r\n.GPpanelInfo {\r\n top: 3px;\r\n left: 3px;\r\n}\r\n\r\n.GPpanelReduce {\r\n top: 3px;\r\n right: 32px;\r\n}\r\n\r\n.GPresetPicto,\r\n.GPreturnPicto {\r\n border-radius: 3px;\r\n opacity: 1;\r\n}\r\n\r\n/**********************************/\r\n/* Showing/hiding advanced panels */\r\n/**********************************/\r\n\r\n.GPshowAdvancedToolPicto {\r\n position: relative;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n width: 32px;\r\n height: 32px;\r\n padding: 2px;\r\n background-color: rgba(255, 255, 255, 0.4);\r\n border-radius: 4px;\r\n border: 2px solid rgba(255, 255, 255, 0.4) ;\r\n}\r\n\r\n.GPshowAdvancedToolPicto:hover {\r\n background-color: rgba(255, 255, 255, 0.6);\r\n}\r\n\r\n.GPshowAdvancedToolOpen {\r\n position: absolute;\r\n display: block;\r\n box-sizing: border-box;\r\n width: 26px;\r\n height: 26px;\r\n background-color: rgba(0,60,136,0.5);\r\n border-radius: 2px;\r\n}\r\n\r\n.GPshowAdvancedToolPicto:hover .GPshowAdvancedToolOpen {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n\r\n.GPshowOpen {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n\r\n.GPshowOpen:hover {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n\r\n/****************/\r\n/* Calc waiting */\r\n/****************/\r\n\r\n.GPwaitingContainer {\r\n position: absolute;\r\n top: 32px;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n background-color: rgba(255,255,255,0.9);\r\n font-size: 1.5em;\r\n font-weight: bold;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n}\r\n\r\n.GPwaitingContainerVisible {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n}\r\n\r\n.GPwaitingContainerHidden {\r\n display: none;\r\n}\r\n\r\n.GPwaitingContainerInfo {\r\n margin: auto;\r\n}\r\n\r\n.GPwaitingContainerVisible,\r\n.GPwaitingContainerHidden {}\r\n\r\n/***************/\r\n/* Flex inputs */\r\n/***************/\r\n\r\n.GPflexInput {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n transition: max-height 0.3s ease-out, opacity 0.3s ease-out;\r\n}\r\n\r\n/* FIXME tempory hack with :not(.GPlocationOriginHidden) !\r\n.GPflexInput > *:not(.GPlocationOriginHidden) */\r\n.GPflexInput > * {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n border: 1px solid #999;\r\n border-radius: 0;\r\n}\r\n\r\n.GPflexInput *:not(:last-child) {\r\n border-right:none;\r\n}\r\n\r\n.GPflexInput *:first-child {\r\n border-radius: 3px 0 0 3px;\r\n}\r\n\r\n.GPflexInput *:last-child {\r\n border-radius: 0 3px 3px 0;\r\n}\r\n\r\n.GPflexInput > *:not(input) {\r\n /* width: 28px; */\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n.GPflexInput > input {\r\n -webkit-flex: 1;\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding: 0 5px;\r\n min-width: 0;\r\n}\r\n\r\n.GPflexInput > select {\r\n -webkit-flex: 1;\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding-right: 7px;\r\n}\r\n\r\n.GPflexInput > label {\r\n background-color: #F2F2F2;\r\n color: #666;\r\n padding-left: 7px;\r\n padding-right: 9px;\r\n cursor: pointer;\r\n}\r\n\r\n/****************/\r\n/* Submit input */\r\n/****************/\r\n\r\ninput.GPsubmit {\r\n display: block;\r\n width: 80px;\r\n margin: auto;\r\n height: 28px;\r\n line-height: 26px;\r\n padding: 0;\r\n background: none;\r\n border: none;\r\n border-radius: 3px;\r\n font-family: \"Helvetica Neue\",Arial,Helvetica,sans-serif;\r\n color: #FFF;\r\n background-color: #366291;\r\n font-weight: bold;\r\n opacity: 0.8;\r\n transition: opacity 0.2s ease-out;\r\n cursor: pointer;\r\n}\r\n\r\ninput.GPsubmit:hover {\r\n opacity: 1;\r\n}\r\n\r\n/************/\r\n/* elements */\r\n/************/\r\n\r\n.GPselect {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n margin: auto;\r\n border: 1px solid #999;\r\n color: #333;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlabel {\r\n\r\n}\r\n\r\n.GPinput {\r\n\r\n}\r\n\r\n.GPform {\r\n padding: 15px;\r\n}\r\n\r\n.GPelementInvisible,\r\n.GPelementHidden {\r\n display: none;\r\n visibility: hidden;\r\n opacity: 0%;\r\n}\r\n\r\n.GPelementVisible,\r\n.GPelementShow {\r\n display: block;\r\n visibility: visible;\r\n opacity: 100%;\r\n}\r\n\r\n/********************************/\r\n/* Autocomplete/geocode results */\r\n/********************************/\r\n\r\n.GPautoCompleteList,\r\n.GPadvancedAutoCompleteList {\r\n z-index: 2;\r\n /* display: none; */\r\n /* position: absolute;\r\n max-height: 140px;\r\n background-color: #FFF;\r\n border: 1px solid #999;\r\n overflow-y: hidden; */\r\n}\r\n\r\n.GPadvancedAutoCompleteList {\r\n width: calc(100% - 28px);\r\n border-top: none;\r\n font-size: 0.9em;\r\n}\r\n\r\n.GPautoCompleteProposal {\r\n width: 100%;\r\n height: 28px;\r\n line-height: 16px;\r\n padding: 6px 10px;\r\n color: #5E5E5E;\r\n font-size: 1.0em;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow:ellipsis;\r\n cursor: pointer;\r\n margin-bottom: 0;\r\n}\r\n\r\n.GPautoCompleteProposal:hover {\r\n color: #000000;\r\n background-color: #CEDBEF\r\n}\r\n\r\n/*************************************/\r\n/* Showing additional hidden options */\r\n/*************************************/\r\n\r\n.GPshowMoreOptionsImage {\r\n background-image: url(\"img/GPshowMoreOptions.png\");\r\n}\r\n\r\n.GPshowMoreOptions {\r\n display: block;\r\n position: absolute;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n transition: all 0.5s ease-out 0s;\r\n}\r\n\r\nbutton[aria-pressed=\"true\"].GPshowMoreOptions,\r\ninput[type=\"checkbox\"]:checked + .GPshowMoreOptions {\r\n -webkit-transform: rotateX(180deg);\r\n transform: rotateX(180deg);\r\n /* bottom: 90px; */\r\n}\r\n\r\n/**********************/\r\n/* Feature info popup */\r\n/**********************/\r\n\r\n.gp-feature-info-div {\r\n bottom: 17px ;\r\n position: relative;\r\n max-width: calc(100vw - 80px);\r\n padding: 10px;\r\n border-radius: 10px;\r\n font-size: 0.75em;\r\n font-family: \"Open Sans\", sans-serif;\r\n color: #002A50;\r\n background-color: #FFF;\r\n box-shadow: 0 0 5px #000;\r\n}\r\n\r\n.gp-feature-info-div::before {\r\n content: \"\";\r\n position: absolute;\r\n border-top: 15px solid #FFF;\r\n border-right: 14px solid transparent;\r\n border-left: 14px solid transparent;\r\n bottom: -15px;\r\n margin-left: -14px;\r\n left: 50%;\r\n}\r\n\r\n.gp-feature-info-div .closer {\r\n position: absolute;\r\n display: block;\r\n width: 30px;\r\n height: 30px;\r\n top: 0;\r\n right: 0;\r\n border: none;\r\n cursor: pointer;\r\n border-top-right-radius: 10px;\r\n border-bottom-right-radius: 10px;\r\n background-color: #FFF;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/close-emeraud.svg\");\r\n background-size: 14px 14px;\r\n background-position: center;\r\n}\r\n\r\n.gp-features-content-div {\r\n max-width: 420px;\r\n min-width: 260px;\r\n max-height: 340px;\r\n overflow: auto;\r\n}\r\n\r\n.gp-features-content-div h5,\r\n.gp-features-content-div h6,\r\n.gp-features-content-div p,\r\n.gp-features-content-div ul {\r\n margin: 0;\r\n}\r\n\r\n.gp-features-content-div ul {\r\n padding: 0;\r\n list-style-type: none;\r\n}\r\n\r\n.geoportail-popup-content h5,\r\n.geoportail-popup-content h6,\r\n.geoportail-popup-content p,\r\n.gp-att-name-div,\r\n.gp-att-description-div,\r\n.gp-att-others-div {\r\n padding: 0 10px;\r\n}\r\n\r\n.geoportail-popup-content h5:not(:last-child),\r\n.geoportail-popup-content h6:not(:last-child),\r\n.geoportail-popup-content p:not(:last-child),\r\n.gp-att-description-div:not(:last-child),\r\n.gp-att-others-div:not(:last-child) {\r\n margin-bottom: 15px;\r\n}\r\n\r\n.geoportail-popup-content h5:last-child,\r\n.geoportail-popup-content h6:last-child,\r\n.geoportail-popup-content p:last-child,\r\n.gp-att-description-div:last-child,\r\n.gp-att-others-div:last-child,\r\n.gp-att-name-div {\r\n margin-bottom: 10px;\r\n}\r\n\r\n.geoportail-popup-content h5:first-child,\r\n.geoportail-popup-content h6:first-child,\r\n.geoportail-popup-content p:first-child,\r\n.gp-att-name-div:first-child,\r\n.gp-att-description-div:first-child,\r\n.gp-att-others-div:first-child {\r\n margin-top: 10px;\r\n}\r\n\r\n.gp-att-name-div,\r\n.gp-features-content-div h5 {\r\n padding-right: 35px;\r\n font-weight: bold;\r\n font-size: 1.2em;\r\n text-transform: uppercase;\r\n color: #0B6BA7;\r\n}\r\n\r\n.gp-features-content-div h6 {\r\n font-size: 1.1em;\r\n}\r\n\r\n.gp-att-description-div:not(:last-child),\r\n.gp-att-others-div:not(:last-child) {\r\n padding-bottom: 10px;\r\n border-bottom: 1px dotted #666;\r\n}\r\n\r\n.gpf-radio-btn-group {\r\n display: flex;\r\n gap: 1em;\r\n}\r\n\r\n.gpf-btn-icon {\r\n caret-color: transparent;\r\n}\r\n","[id^=GPdrawingPanel-] {\r\n width: 240px;\r\n}\r\n\r\n.GPshowDrawingPicto {\r\n background-image: url(\"img/GPdrawingOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n.GPdrawingPanelClose {\r\n background-image: url(\"img/GPdrawingOpen.png\");\r\n}\r\n\r\n.GPdrawingLabel,\r\n.GPdrawingCoords {\r\n display: inline-block;\r\n line-height: 20px;\r\n}\r\n\r\n.GPdrawingLabel {\r\n width: 80px;\r\n font-weight: bold;\r\n}\r\n\r\n.GPdrawingCoords {\r\n width: 110px;\r\n}\r\n\r\n/* markers selector */\r\n.marker-input-radio {\r\n display : none ;\r\n}\r\n\r\ninput.marker-input-radio:checked + label {\r\n border: 1px solid red;\r\n}\r\n\r\n/* drawing tools */\r\n.drawing-tool {\r\n border-radius: 10px;\r\n cursor: pointer;\r\n display: block;\r\n height: 40px;\r\n width: 40px;\r\n background-image: url(\"img/drawing-tools.svg\");\r\n background-size: 720px 40px;\r\n background-color: #e9edf0;\r\n border: unset;\r\n}\r\n\r\n.drawing-tool-active {\r\n background-color: #002a50;\r\n}\r\n\r\n\r\n/*\r\n* Drawing tools\r\n*/\r\nbutton[id^=drawing-tool-point-] {\r\n background-position: 0 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-point-].drawing-tool-active {\r\n background-position: -40px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-line-].drawing-tool-active {\r\n background-position: -120px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-line-] {\r\n background-position: -80px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-holes-] {\r\n background-position: -640px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-holes-].drawing-tool-active {\r\n background-position: -680px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-polygon-] {\r\n background-position: -160px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-polygon-].drawing-tool-active {\r\n background-position: -200px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-text-] {\r\n background-position: -240px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-text-].drawing-tool-active {\r\n background-position: -280px 0;\r\n}\r\n\r\n/*\r\n* Editing tools\r\n*/\r\nbutton[id^=drawing-tool-edit-] {\r\n background-position: -320px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-edit-].drawing-tool-active {\r\n background-position: -360px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-display] {\r\n background-position: -400px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-display-].drawing-tool-active {\r\n background-position: -440px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-tooltip] {\r\n background-position: -480px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-tooltip-].drawing-tool-active {\r\n background-position: -520px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-remove] {\r\n background-position: -560px 0;\r\n}\r\n\r\nbutton[id^=drawing-tool-remove-].drawing-tool-active {\r\n background-position: -600px 0;\r\n}\r\n\r\n/* section d'export */\r\n\r\ndiv.drawing-tools-flex-display {\r\n justify-content: space-between;\r\n}\r\n\r\nbutton[id^=drawing-export-] {\r\n background-position: 2px 0;\r\n}\r\n\r\n.drawing-button {\r\n margin: auto;\r\n font-size: 0.7em;\r\n height: 30px;\r\n line-height: 30px;\r\n padding-left: 30px;\r\n padding-right: 15px;\r\n /* from site colors-chart */\r\n background-image: url(\"img/drawing-save.svg\");\r\n background-size: 30px 120px;\r\n}\r\n\r\n.tool-form-submit {\r\n border: medium none;\r\n border-radius: 20px;\r\n font-family: \"Helvetica Neue\",Arial,Helvetica,sans-serif;\r\n font-size: 0.9em;\r\n text-align: center;\r\n text-transform: uppercase;\r\n /* from site colors-chart */\r\n background-color: #00b798;\r\n color: #fff;\r\n}\r\n\r\n/*\r\n * popups\r\n */\r\n.gp-label-div,\r\n.gp-styling-div {\r\n position: relative;\r\n top: 17px;\r\n border-radius: 10px;\r\n font-size: 0.75em;\r\n background-color: #FFF;\r\n box-shadow: 0 0 5px #000;\r\n box-sizing: border-box;\r\n border: unset;\r\n}\r\n\r\n.gp-label-div::before,\r\n.gp-styling-div::before {\r\n content: \"\";\r\n position: absolute;\r\n border-bottom: 15px solid #FFF;\r\n border-right: 9px solid transparent;\r\n border-left: 10px solid transparent;\r\n top: -15px;\r\n margin-left: -10px;\r\n left: 50%;\r\n}\r\n\r\n.gp-textarea-att-label-style,\r\n.gp-input-label-style {\r\n border: none;\r\n}\r\n\r\n.gp-textarea-att-label-style {\r\n width: 240px;\r\n height: 80px;\r\n resize: none;\r\n}\r\n\r\n.gp-input-measure-style {\r\n width: 240px;\r\n font-size: 0.75em;\r\n background-color: #FFF;\r\n text-align: center;\r\n border-radius: 10px;\r\n}\r\n\r\n.gp-textarea-att-label-style {\r\n display: block;\r\n}\r\n\r\n.gp-label-div .closer {\r\n border-top-right-radius: 10px;\r\n background-color: #FFF;\r\n}\r\n\r\n.gp-input-label-style {\r\n width: 180px;\r\n}\r\n\r\n/* Label popups */\r\n\r\n.gp-label-div {\r\n padding: 10px;\r\n}\r\n\r\n/* Styling popup */\r\n\r\n.gp-styling-div {\r\n width: 340px;\r\n padding: 20px;\r\n padding-top: 50px;\r\n}\r\n\r\n.gp-styling-div::after {\r\n content: \"Modifier le style\";\r\n position: absolute;\r\n display: block;\r\n width: 280px;\r\n height: 30px;\r\n line-height: 30px;\r\n text-align: center;\r\n left: 30px;\r\n top: 0;\r\n border-bottom: 1px solid #BBB;\r\n font-variant: small-caps;\r\n font-size: 1.2em;\r\n font-weight: bold;\r\n}\r\n\r\n.gp-label-div .gp-styling-button:not([class*=\"closer\"]) {\r\n display: block;\r\n margin: auto;\r\n margin-top: 10px;\r\n}\r\n\r\n.gp-styling-button:not([class*=\"closer\"]) {\r\n display: inline-block;\r\n width: 140px;\r\n height: 24px;\r\n line-height: 24px;\r\n margin-top: 20px;\r\n border-radius: 12px;\r\n text-align: center;\r\n color: #FFF;\r\n background-color: #00B798;\r\n font-weight: bold;\r\n font-size: 0.9em;\r\n text-transform: uppercase;\r\n border: none;\r\n}\r\n\r\n.gp-styling-button:not([class*=\"closer\"]):hover {\r\n color: #00B798;\r\n background-color: #EEF2F5;\r\n}\r\n\r\n.gp-styling-button:not([class*=\"closer\"]) + .gp-styling-button:not([class*=\"closer\"]) {\r\n margin-left: 20px;\r\n}\r\n\r\n.gp-label-div .closer,\r\n.gp-styling-div .closer {\r\n cursor: pointer;\r\n position: absolute;\r\n display: block;\r\n width: 30px;\r\n height: 30px;\r\n top: 0;\r\n right: 0;\r\n border: none;\r\n background-color: transparent;\r\n background-repeat: no-repeat;\r\n background-image: url(\"../../img/close-emeraud.svg\");\r\n background-size: 14px 14px;\r\n background-position: center;\r\n}\r\n\r\n.gp-styling-option {\r\n font-size: 11px;\r\n position: relative;\r\n line-height: 30px;\r\n padding: 0 20px;\r\n}\r\n\r\n.gp-styling-option input {\r\n display: block;\r\n position: absolute;\r\n height: 20px;\r\n top: 6px;\r\n cursor: pointer;\r\n padding: 0;\r\n}\r\n\r\n.gp-styling-option input[type=\"checkbox\"] {\r\n height: 10px;\r\n right: 70px;\r\n padding: 0;\r\n border: none;\r\n background: none;\r\n}\r\n\r\n.gp-styling-option input[type=\"color\"] {\r\n width: 30px;\r\n right: 70px;\r\n padding: 0;\r\n border: none;\r\n background: none;\r\n}\r\n\r\n.gp-styling-option input[type=\"text\"] {\r\n width: 80px;\r\n right: 40px;\r\n padding: 0 5px;\r\n margin: none;\r\n background: none;\r\n border: 1px solid #808080;\r\n color: #0B6BA7;\r\n}\r\n\r\n\r\n/* Styling slider : general */\r\n.gp-styling-option input[type=\"range\"] {\r\n margin: 0;\r\n width: 80px;\r\n right: 40px;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]:focus {\r\n box-shadow: none;\r\n outline: none;\r\n}\r\n\r\n/* Styling slider : Chrome, Safari, Opera */\r\n\r\n.gp-styling-option input[type=\"range\"]::-webkit-slider-runnable-track {\r\n -webkit-appearance: none;\r\n height: 1px;\r\n background-color: #808080;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-webkit-slider-thumb:before {\r\n position: absolute;\r\n top: 0;\r\n right: 50%;\r\n left: -200px;\r\n height: 1px;\r\n pointer-events: none;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-webkit-slider-thumb {\r\n width: 13px;\r\n height: 13px;\r\n -webkit-appearance: none;\r\n background-color: #0B6BA7;\r\n border: none;\r\n border-radius: 50%;\r\n position: relative;\r\n top: -6px;\r\n}\r\n\r\n/* Styling slider : Firefox */\r\n\r\n.gp-styling-option input[type=\"range\"]::-moz-range-track {\r\n width: 70px;\r\n height: 1px;\r\n background-color: #808080;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-moz-range-thumb {\r\n width: 13px;\r\n height: 13px;\r\n background-color: #0B6BA7;\r\n border: none;\r\n border-radius: 50%;\r\n box-shadow: 0;\r\n position: relative;\r\n}\r\n\r\n/* Styling slider : IE */\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-track {\r\n border: 0;\r\n border-color: transparent;\r\n border-radius: 0;\r\n border-width: 0;\r\n color: transparent;\r\n height: 1px;\r\n width: 70px;\r\n background-color: #808080;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-fill-lower,\r\n.gp-styling-option input[type=\"range\"]::-ms-fill-upper {\r\n background: transparent;\r\n border-radius: 0;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-thumb {\r\n width: 13px;\r\n height: 13px;\r\n background-color: #0B6BA7;\r\n border: none;\r\n border-radius: 50%;\r\n}\r\n\r\n.gp-styling-option input[type=\"range\"]::-ms-tooltip {\r\n display: none;\r\n}\r\n\r\n\r\n.gp-styling-option .marker-input-radio {\r\n display: none;\r\n}\r\n\r\n.gp-styling-option .marker-label {\r\n display: inline-block;\r\n height: 32px;\r\n padding: 3px;\r\n margin-right: 5px;\r\n margin-bottom: 5px;\r\n cursor: pointer;\r\n}\r\n\r\n.gp-styling-option .marker-input-radio:checked + .marker-label {\r\n padding: 2px;\r\n background-color: rgba(0,183,152,0.5);\r\n border: 1px solid #002A50;\r\n}\r\n\r\n.gp-styling-option .marker-label img {\r\n height: 24px;\r\n}\r\n","/* Geoportal Attribution */\n\n.ol-attribution .gp-control-attribution-image {\n max-height: 30px;\n max-width: inherit;\n vertical-align: middle;\n}\n",".GPpanelHeader {\n padding: unset;\n}\n\n\n[id^=GPelevationPathPanelClose] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: -27px center;\n}\n\n[id^=GPelevationPathProfil] {\n height: 150px;\n width: inherit;\n}\n\n[id^=GPelevationPathProfil] > #profileElevationByDefault > svg {\n position: absolute;\n left: 10px;\n}\n\ndiv[id^=GPelevationPathInformationsContainer] {\n position: absolute;\n top: 32px;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(255, 255, 255, 0.9);\n border-radius: 4px;\n overflow: hidden;\n}\n\n/* CSS : Raw */\n\n#profileElevationRaw {\n resize: none;\n padding: unset;\n}\n\n/* CSS : default */\n\n#profileElevationByDefault {\n display:-webkit-flex;\n display:-webkit-box;\n display:-ms-flexbox;\n display:flex;\n -webkit-box-orient:vertical;\n -webkit-box-direction:normal;\n -webkit-flex-direction:column;\n -ms-flex-direction:column;\n flex-direction:column;\n height:100%;\n}\n\n.altiPathValue {\n font-weight: 700;\n fill: #5E5E5E;\n}\n\n.altiPathCoords {\n font-style: italic;\n fill: #5E5E5E;\n}\n\n\n/* CSS : D3 */\n\n.axis-d3 > text {\n fill: rgb(94, 94, 94);\n font-family: Verdana;\n font-size: 10px;\n opacity: 1;\n text-anchor: end;\n}\n\n.axis-d3 {\n fill: none;\n stroke: #5E5E5E;\n stroke-width: 1;\n shape-rendering: crispEdges;\n}\n\n.area-d3 {\n fill: #C77A04;\n stroke: #5E5E5E;\n stroke-width: 0;\n fill-opacity: 0.4;\n}\n\n.line-d3 {\n fill: none;\n stroke: #C77A04;\n stroke-width: 1px;\n}\n\n.grid-d3 .tick {\n stroke: lightgrey;\n opacity: 0.7;\n}\n\n.grid-d3 path {\n stroke-width: 0;\n}\n\n.grid-d3 .tick {\n stroke: lightgrey;\n opacity: 0.7;\n}\n\n.grid-d3 path {\n stroke-width: 0;\n}\n\n.overlay-d3 {\n fill: none;\n pointer-events: all;\n}\n\n.focusLine-d3 {\n fill: none;\n stroke: #C77A04;\n stroke-width: 0.5px;\n}\n\n.focusCircle-d3 {\n fill: #C77A04;\n}\n\ndiv.tooltip-d3 {\n position: inherit;;\n text-align: left;\n width: 80px;\n height: 45px;\n padding: 5px;\n font: 8px sans-serif;\n background: white;\n border: 0px;\n border-radius: 8px;\n pointer-events: none;\n}\n\n[id^=GPelevationPathPanel-] {\n width: 280px;\n}\n\n[id^=GPelevationPathPanelInfo] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: -75px center;\n}\n\nbutton[id^=\"GPshowElevationPathPicto-\"] {\n background-image: url(\"img/GPshowElevationPath.png\");\n background-repeat: no-repeat;\n background-position: 1px center;\n}\n/*\n@media (min-width:720px) and (min-height:720px) {\n\n[id^=GPelevationPathPanel] {\ntop: 15px;\nleft: 15px;\n}\n\n}\n\n@media (min-width:720px) and (min-height:520px) {\n\n[id^=GPelevationPathPanel] {\nwidth: 460px;\n}\n\n[id^=GPelevationPathProfil] {\nheight: 220px;\n}\n\n}\n\n@media (max-width:560px), (max-height:340px) {\n\n[id^=GPelevationPathPanel] {\ndisplay: none !important;\n}\n\n}\n*/\n","/* main container */\ndiv[id^=GPexportContainer-] {\n padding: 5px;\n}\n\ndiv[id^=GPexportContainer-] > input.GPsubmit {\n color: white;\n}\n\n/* bouton */\ninput[id^=GPexportButton-] {\n min-width: fit-content;\n padding-left: 25px;\n padding-right: 5px;\n background-image: url(\"img/GPexportSave.svg\");\n background-size: 25px 25px;\n background-repeat: no-repeat;\n}\n\n/* menu */\n.GPexportMenuHidden {\n visibility: hidden;\n}\n\n.GPexportMenuContainer {\n position: relative;\n display: inline-block;\n}\n\n.GPexportMenuContent {\n display: none;\n position: absolute;\n background-color: #f1f1f1;\n min-width: 80px;\n padding: 8px;\n border-radius: 10px;\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n z-index: 1;\n}\n\n.GPexportMenuContent a:hover { background-color: #f1f1f1; }\n\n.GPexportMenuContainer:hover .GPexportMenuContent { display: block; }\n\n/* menu des formats */\n.GPexportMenuContent .container {\n display: block;\n position: relative;\n padding-left: 15px;\n margin-bottom: 5px;\n cursor: pointer;\n font-size: 14px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n \n.GPexportMenuContent .container input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n}\n \n.GPexportMenuContent .checkmark {\n position: absolute;\n top: 0;\n left: 0;\n height: 12px;\n width: 12px;\n background-color: #eee;\n border-radius: 50%;\n}\n \n.GPexportMenuContent .container:hover input ~ .checkmark {\n background-color: #ccc;\n}\n\n.GPexportMenuContent .container input:checked ~ .checkmark {\n background-color: #366291;\n}\n \n.GPexportMenuContent .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n}\n\n.GPexportMenuContent .container input:checked ~ .checkmark:after {\n display: block;\n}\n \n.GPexportMenuContent .container .checkmark:after {\n top: 4px;\n left: 4px;\n width: 4px;\n height: 4px;\n border-radius: 50%;\n background: white;\n}","/* GET FEATURE INFO */\nbutton[id^=GPgetFeatureInfoPicto][aria-pressed=\"true\"] {\n background-repeat: no-repeat;\n background-position: 1px center;\n}\n\nbutton[id^=GPgetFeatureInfoPicto] {\n background-image: url(\"img/GPactivateGfi.png\");\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n background-position: -25px center;\n /* transition: border-radius 0.5s ease-out 0s, opacity 0.5s ease-out 0s; */\n}\n\n.GPcloseGetFeatureInfo {\n background-image: url(\"../../img/GPclose.png\");\n background-position: 0px center;\n}\n\n.GPgfiLayerButton {\n border: unset;\n background: unset;\n text-align: left;\n font-weight: bold;\n}\n\nbutton[aria-expanded=\"true\"].GPgfiLayerButton span.GPshowGfiLayerFeature {\n -webkit-transform: rotateX(180deg);\n transform: rotateX(180deg);\n}\n\n.GPshowGfiLayerFeature {\n display: inline-block;\n width: 28px;\n height: 28px;\n vertical-align: middle;\n background-image: url(\"img/GPgfiDetails.png\");\n background-position: -26px 0;\n}","/* ISOCHRON */\r\n[id^=GPisochronPanel-] {\r\n width: 280px;\r\n}\r\n\r\n.GPshowIsochronPicto {\r\n background-image: url(\"img/GPisochronOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GPisochronPanelClose {\r\n background-image: url(\"img/GPisochronOpen.png\");\r\n}\r\n\r\n/* Reset picto */\r\n\r\nbutton[id^=GPisochronReset] {\r\n opacity: 0.8;\r\n transition: opacity 0.2s ease-out;\r\n}\r\n\r\nbutton[id^=GPisochronReset]:hover {\r\n opacity: 1;\r\n}\r\n\r\n.GPisochronReset {\r\n background-color: #366291;\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -281px center;\r\n}\r\n\r\n/* Isochron form */\r\nform[id^=GPisochronForm] {\r\n padding: 15px;\r\n}\r\n\r\ndiv[id^=GPisochronChoice] {\r\n margin: auto;\r\n margin-top: 10px;\r\n margin-bottom: 5px;\r\n width: 160px;\r\n -webkit-justify-content: space-between;\r\n -webkit-box-pack: justify;\r\n -ms-flex-pack: justify;\r\n justify-content: space-between;\r\n}\r\n\r\np[id^=GPisochronPointLabelP], p[id^=GPisochronValueChronLabelP] {\r\n margin: 2px 0 5px 0;\r\n}\r\n\r\n.GProuteComputationLabel {\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GPisochronChoiceAlt input:checked + label + span {\r\n color: #366291;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron] + .GPisochronChoiceAltImg {\r\n background-position: -56px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron]:checked + .GPisochronChoiceAltImg {\r\n background-position: -84px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltDist] + .GPisochronChoiceAltImg {\r\n background-position: -112px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltDist]:checked + .GPisochronChoiceAltImg {\r\n background-position: -140px 0;\r\n}\r\n\r\ninput[id^=GPisochronChoiceAltChron] {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n}\r\n\r\n.GPisochronOriginPointerImg,\r\n.GPisochronChoiceAltImg,\r\n.GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n font-size: 0;\r\n}\r\n\r\n.GPisoExclusionsOption {\r\n background-image: url(\"img/GPisochronCheck.png\");\r\n}\r\n\r\n.GPisochronOriginPointerImg {\r\n width: 28px;\r\n background-color: #F2F2F2;\r\n cursor: pointer;\r\n}\r\n\r\n.GPisochronChoiceAlt input {\r\n display: none;\r\n}\r\n\r\n.GPisochronChoiceAltImg {\r\n display: block;\r\n width: 28px;\r\n height: 28px;\r\n margin: auto;\r\n cursor: pointer;\r\n}\r\n\r\n.GPisochronChoiceAlt span {\r\n cursor: pointer;\r\n display:block;\r\n color: #999;\r\n}\r\n\r\n.GPisochronModeLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 5px;\r\n}\r\n\r\ninput[id^=GPisochronTransportCar] + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -168px 0;\r\n}\r\n\r\ninput[id^=GPisochronTransportCar]:checked + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -196px 0;\r\n}\r\n\r\ninput[id^=GPisochronTransportPedestrian] + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -224px 0;\r\n}\r\n\r\ninput[id^=GPisochronTransportPedestrian]:checked + .GPisochronTransportImg {\r\n background-image: url(\"img/GPisochronOptions.png\");\r\n background-position: -252px 0;\r\n}\r\n\r\n.GPisochronTransportChoice input {\r\n display: none;\r\n}\r\n\r\ndiv[id^=GPisochronTransportChoice] > div {\r\n width: 100%;\r\n justify-content: center;\r\n}\r\n\r\ndiv[id^=GPisochronValueChron],\r\ndiv[id^=GPisochronValueDist] {\r\n width: 220px;\r\n margin: 5px auto;\r\n}\r\n\r\n.GPisochronTransportImg {\r\n display: inline-block;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n}\r\n\r\n.GPisochronTransportImg:first-of-type {\r\n margin-left: 18px;\r\n margin-right: 10px;\r\n}\r\n\r\nselect[id^=GPisochronDirectionSelect] {\r\n width: 80px;\r\n margin: 5px auto;\r\n}\r\n\r\n.GPshowIsoExclusionsPicto {\r\n top: unset;\r\n right: 0;\r\n transition: all 0.5s ease-out 0s;\r\n}\r\n\r\n.GPisoExclusionsLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 10px;\r\n font-weight: bold;\r\n line-height: 16px;\r\n}\r\n\r\n.GPisoExclusionsOptions {\r\n display: -webkit-flex;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-justify-content: space-around;\r\n -ms-flex-pack: distribute;\r\n justify-content: space-around;\r\n}\r\n\r\n.GPisoExclusionsOption {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n color: #A77;\r\n background-color: #FEE;\r\n padding-left: 28px;\r\n padding-right: 5px;\r\n border: 1px solid #A77;\r\n border-radius: 3px;\r\n cursor: pointer;\r\n}\r\n\r\ninput:checked + .GPisoExclusionsOption {\r\n background-color: #EFE;\r\n background-position: 0 -28px;\r\n color: #797;\r\n border: 1px solid #797;\r\n}\r\n\r\ninput[id^=GPisochronSubmit-] {\r\n width: fit-content;\r\n padding: 0 10px;\r\n}","\r\n/* Import form */\r\n[id^=\"GPimportPanel-\"] {\r\n width: 340px;\r\n}\r\n\r\n[id^=\"GPimportGetCapPanel-\"],\r\n[id^=\"GPimportMapBoxPanel-\"] {\r\n width: 340px;\r\n}\r\n\r\ndiv[id^=\"GPimportTypeLine-\"] {\r\n border-bottom: 1px solid #999;\r\n padding-bottom: 15px;\r\n margin-bottom: 15px;\r\n}\r\n\r\ndiv[id^=\"GPimportChoice-\"] {\r\n margin-top: 5px;\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GPshowImportPicto {\r\n background-image: url(\"img/GPimportOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GPimportPanelClose,\r\n.GPimportGetCapPanelClose,\r\n.GPimportMapBoxPanelClose {\r\n background-image: url(\"img/GPimportOpen.png\");\r\n}\r\n\r\n.GPimportPanelReturnPicto {\r\n background-color: #366291;\r\n background-image: url(\"../../img/GPreturn.png\");\r\n /* background-position: 3px center; */\r\n}\r\n\r\n.GPimportChoiceAlt input[type=\"radio\"] {\r\n display: none;\r\n}\r\n\r\n.GPimportChoiceAltTxt {\r\n display: block;\r\n line-height: 28px;\r\n color: #BBB;\r\n font-weight: bold;\r\n cursor: pointer;\r\n}\r\n\r\ninput[type=\"radio\"]:checked + .GPimportChoiceAltTxt {\r\n color: #366291;\r\n}\r\n\r\n/* Line inputs */\r\n\r\n.GPimportInputLine {\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n margin-bottom: 10px;\r\n}\r\n\r\n.GPimportInputLine > * {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n border: 1px solid #999;\r\n border-radius: 0;\r\n}\r\n\r\n.GPimportInputLine *:not(:last-child) {\r\n border-right:none;\r\n}\r\n\r\n.GPimportInputLine *:first-child {\r\n border-radius: 3px 0 0 3px;\r\n}\r\n\r\n.GPimportInputLine *:last-child {\r\n border-radius: 0 3px 3px 0;\r\n}\r\n\r\n.GPimportInputLine > *:not(input) {\r\n overflow: hidden;\r\n white-space: nowrap;\r\n -o-text-overflow: ellipsis;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n.GPimportInputLine > input {\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding: 0 5px;\r\n min-width: 0;\r\n}\r\n\r\n.GPimportInputLine > select {\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n padding-right: 7px;\r\n}\r\n\r\n.GPimportInputLine > label {\r\n background-color: #F2F2F2;\r\n color: #666;\r\n padding-left: 7px;\r\n padding-right: 9px;\r\n cursor: pointer;\r\n}\r\n\r\n\r\n\r\n.GPimportGetCapProposal {\r\n width: 100%;\r\n height: 28px;\r\n line-height: 16px;\r\n padding: 6px 10px;\r\n color: #5E5E5E;\r\n font-size: 1.0em;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n -o-text-overflow:ellipsis;\r\n text-overflow:ellipsis;\r\n cursor: pointer;\r\n list-style-type: none;\r\n}\r\n\r\n.GPimportGetCapRubriqueTitle,\r\n.GPimportMapBoxSourceTitle,\r\n.GPimportMapBoxListSourceTitle {\r\n color: #5E5E5E;\r\n}\r\n\r\n.GPimportGetCapRubrique,\r\n.GPimportGetCapListRubrique,\r\n.GPimportMapBoxSource,\r\n.GPimportMapBoxListSource {\r\n list-style-type: none;\r\n}\r\n\r\nli.GPimportGetCapRubrique:before,\r\nli.GPimportGetCapListRubrique:before,\r\nli.GPimportMapBoxSource:before,\r\nli.GPimportMapBoxListSource:before {\r\n\t/* content: \"→ \"; caractère UTF-8 */\r\n content: \"» \";\r\n}\r\n\r\n.GPimportGetCapProposal:hover,\r\n.GPimportGetCapRubrique:hover,\r\n.GPimportMapBoxSource {\r\n\r\n}\r\n\r\n.GPimportGetCapRubriqueTitle:hover,\r\n.GPimportMapBoxSourceTitle:hover {\r\n color: #000000;\r\n}\r\n\r\n.GPimportGetCapProposal:hover {\r\n color: #000000;\r\n}\r\n\r\n.GPimportMapBoxSourceVisibility,\r\n.GPimportMapBoxSourceStyle,\r\n.GPimportMapBoxSourceFilter,\r\n.GPimportMapBoxSourceScale {\r\n display: inline-block;\r\n margin-left: 15px;\r\n}\r\n\r\n.GPimportMapBoxJsonEdit {\r\n outline: 1px solid #ccc;\r\n padding: 5px;\r\n margin: 5px;\r\n}\r\n.GPimportMapBoxJsonEdithidden {\r\n display: none;\r\n}\r\n\r\n.gp-json-string { color: green; }\r\n.gp-json-number { color: darkorange; }\r\n.gp-json-boolean { color: blue; }\r\n.gp-json-null { color: magenta; }\r\n.gp-json-key { color: red; }\r\n\r\n.GPimportMapBoxSourceVisibilityInput {\r\n display: block !important;\r\n}\r\n\r\n.GPimportMapBoxSourceVisibilityLabel {\r\n\r\n}\r\n\r\n.GPimportMapBoxSourceScale {\r\n}\r\n\r\n[id^=\"GPimportPanelReturnPicto-\"] {\r\n position: absolute;\r\n width: 26px;\r\n height: 26px;\r\n border-radius: 3px;\r\n opacity: 1;\r\n background-position: 0 0;\r\n cursor: pointer;\r\n}","/* LAYER SWITCHER */\r\n\r\n.GPlayerSwitcher_layer {\r\n background-color: #FFF;\r\n}\r\n\r\ndiv[id^=GPlayerSwitcher-] {\r\n height: 32px;\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] + dialog[id^=GPlayersList] {\r\n width: 190px;\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto] {\r\n /* transition: opacity 0.5s ease-out 0s, box-shadow 0.5s ease-out 0s, border 0.5s ease-out 0s, border-radius 0.5s ease-out 0s; */\r\n background-position: -2px center;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/GPshowLayersList.png\");\r\n}\r\n\r\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] {\r\n border-top-right-radius: 0;\r\n border-top-left-radius: 0;\r\n background-position: -35px center;\r\n /* transition: border-radius 0.5s ease-out 0s, opacity 0.5s ease-out 0s; */\r\n}\r\n\r\n/* Layers list */\r\n.GPpanelBody {\r\n overflow: auto;\r\n max-height: 200px;\r\n}\r\n\r\nbutton[id^=GPlayerInfoClose] {\r\n background-position: -2px center;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/GPlayerInfoClose.png\");\r\n background-color: unset;\r\n}\r\nbutton[id^=GPlayersPanelClose] {\r\n background-position: -2px center;\r\n background-repeat: no-repeat;\r\n background-image: url(\"img/GPlayerClose.png\");\r\n}\r\n\r\n.GPpanelIcon {\r\n background-image: url(\"img/layers.svg\");\r\n background-repeat: no-repeat;\r\n background-size: auto auto;\r\n background-position: center center;\r\n}\r\n/* Layer info panel */\r\n\r\n[id^=GPlayerInfoPanel] {\r\n right: 190px;\r\n}\r\n\r\ndiv[id^=GPlayerInfoTitle] {\r\n color: #366291;\r\n border-bottom: 1px solid #366291;\r\n}\r\n\r\n\r\n.GPlayerBasicTools,\r\n.GPlayerAdvancedTools {\r\n position: relative;\r\n width: 100%;\r\n height: 28px;\r\n}\r\n\r\n.GPlayerExtent,\r\n.GPlayerVisibility,\r\n.GPlayerInfo,\r\n.GPlayerInfoOpened,\r\n.GPlayerRemove {\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlayerExtent,\r\n.GPlayerVisibility,\r\n.GPlayerName,\r\n.GPlayerInfo,\r\n.GPlayerInfoOpened,\r\n.GPlayerRemove,\r\n.GPlayerOpacity,\r\n.GPlayerOpacityValue {\r\n position: absolute;\r\n top: 0;\r\n}\r\n\r\n.GPghostLayer {\r\n opacity: 0;\r\n}\r\n\r\n/* Layer basic tools */\r\n\r\n.GPlayerBasicTools {\r\n background-color: #FFF;\r\n}\r\n\r\n\r\n/* Layer advanced tools */\r\n\r\n.GPlayerExtent,\r\n.GPlayerVisibility,\r\n.GPshowLayerAdvancedTools,\r\n.GPlayerInfo,\r\n.GPlayerInfoOpened,\r\n.GPlayerRemove {\r\n background-image: url(\"img/GPlayerTools.png\");\r\n}\r\n\r\n/* Opacity slider : Chrome, Safari, Opera */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-runnable-track {\r\n background: url(\"img/GPopacitySlider.png\");\r\n}\r\n\r\n/* Opacity slider : Firefox */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-moz-range-track {\r\n background: url(\"img/GPopacitySlider.png\");\r\n}\r\n\r\n/* Opacity slider : IE */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-track {\r\n background: url(\"img/GPopacitySlider.png\");\r\n}\r\n\r\n\r\ndiv[id^=GPlayerInfoQuicklook] {\r\n background-image: url(\"img/GPlayerInfo.png\");\r\n}\r\n\r\ndiv[id^=GPlayerInfoClose] {\r\n background-image: url(\"img/GPlayerInfoClose.png\");\r\n}\r\n\r\n.GPlayerInfoLink,\r\n.GPlayerInfoPopup {\r\n background-image: url(\"img/GPlayerInfo.png\");\r\n}\r\n\r\nbutton[id^=GPinfo_ID_],\r\nbutton[id^=GPremove_ID_],\r\nbutton[id^=GPvisibilityPicto_ID_] {\r\n border: none;\r\n background-color: transparent;\r\n}\r\n\r\nbutton[id^=GPvisibilityPicto_ID_][aria-pressed=\"false\"] {\r\n left: 0;\r\n background-position: -28px 0;\r\n}\r\n\r\nbutton[id^=GPvisibilityPicto_ID_][aria-pressed=\"true\"] {\r\n background-position: 0 0;\r\n}\r\n\r\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools {\r\n max-height: 28px;\r\n}\r\n\r\n.GPshowLayerAdvancedTools {\r\n top: 0;\r\n right: 0;\r\n background-position: -112px 0;\r\n}\r\n\r\n.GPlayerInfo {\r\n left: 0;\r\n background-position: -55px 0;\r\n}\r\n\r\n.GPlayerInfoOpened {\r\n left: 0;\r\n background-position: -83px 0;\r\n}\r\n\r\n.GPlayerOpacity {\r\n left: 28px;\r\n width: calc(100% - 100px);\r\n height: 28px;\r\n padding-left: 8px;\r\n}\r\n\r\n.GPlayerOpacityValue {\r\n width: 32px;\r\n left: calc(100% - 60px);\r\n line-height: 28px;\r\n font-size: 10px;\r\n font-style: italic;\r\n cursor: default;\r\n}\r\n\r\n.GPlayerRemove {\r\n right: 0;\r\n background-position: -140px 0;\r\n}\r\n\r\n/* Opacity slider : general */\r\n\r\n.GPlayerOpacity input {\r\n -webkit-appearance: none;\r\n -moz-appearance: none;\r\n background: none;\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n margin: 0;\r\n padding: 0;\r\n overflow: hidden;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]:focus {\r\n box-shadow: none;\r\n outline: none;\r\n}\r\n\r\n/* Opacity slider : Chrome, Safari, Opera */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-runnable-track {\r\n -webkit-appearance: none;\r\n height: 3px;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-thumb:before {\r\n position: absolute;\r\n top: 0;\r\n right: 50%;\r\n left: -200px;\r\n height: 3px;\r\n pointer-events: none;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-webkit-slider-thumb {\r\n width: 9px;\r\n height: 17px;\r\n -webkit-appearance: none;\r\n border: 2px solid #FFF;\r\n background-color: #505050;\r\n position: relative;\r\n top: -7px;\r\n}\r\n\r\n/* Opacity slider : Firefox */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-moz-range-track {\r\n width: 80px;\r\n height: 3px;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-moz-range-thumb {\r\n width: 5px;\r\n height: 13px;\r\n border: 2px solid #FFF;\r\n border-radius: 0;\r\n box-shadow: 0;\r\n background-color: #505050;\r\n position: relative;\r\n}\r\n\r\n/* Opacity slider : IE */\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-track {\r\n border: 0;\r\n border-color: transparent;\r\n border-radius: 0;\r\n border-width: 0;\r\n color: transparent;\r\n height: 3px;\r\n width: 80px;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-fill-lower,\r\n.GPlayerOpacity input[type=\"range\"]::-ms-fill-upper {\r\n background: transparent;\r\n border-radius: 0;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-thumb {\r\n width: 5px;\r\n height: 13px;\r\n border: 2px solid #FFF;\r\n background-color: #505050;\r\n}\r\n\r\n.GPlayerOpacity input[type=\"range\"]::-ms-tooltip {\r\n display: none;\r\n}\r\n\r\n/* Layer info panel */\r\n\r\n[id^=GPlayerInfoPanel] {\r\n position: absolute;\r\n top: 0;\r\n overflow-y: hidden;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n}\r\n\r\n.GPlayerInfoPanelOpened {\r\n display: block;\r\n}\r\n\r\n.GPlayerInfoPanelClosed {\r\n display: none;\r\n}\r\n\r\n/* div[id^=GPlayerInfoContent] {\r\n position: relative;\r\n width: 280px;\r\n max-height: 200px;\r\n overflow-y: auto;\r\n padding-left: 10px;\r\n padding-right: 10px;\r\n} */\r\n\r\ndiv[id^=GPlayerInfoTitle] {\r\n width: calc(100% - 52px);\r\n margin: auto;\r\n margin-bottom: 10px;\r\n padding-bottom: 5px;\r\n text-align: center;\r\n font-size: 1.1em;\r\n font-weight: bold;\r\n}\r\n\r\ndiv[id^=GPlayerInfoQuicklook] {\r\n position: absolute;\r\n top: -2px;\r\n left: 10px;\r\n width: 20px;\r\n height: 20px;\r\n cursor: pointer;\r\n}\r\n\r\ndiv[id^=GPlayerInfoClose] {\r\n position: absolute;\r\n top: -8px;\r\n right: 10px;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n}\r\n\r\ndiv[id^=GPlayerInfoDescription] {\r\n font-size: 0.9em;\r\n}\r\n\r\ndiv[id^=GPlayerInfoLegend] {\r\n\r\n}\r\n\r\ndiv[id^=GPlayerInfoMetadata] {\r\n\r\n}\r\n\r\n.GPlayerInfoSubtitle {\r\n padding-left: 35px;\r\n font-weight: bold;\r\n margin-top: 10px;\r\n margin-bottom: 4px;\r\n}\r\n\r\n.GPlayerInfoLink,\r\n.GPlayerInfoPopup {\r\n line-height: 20px;\r\n padding-left: 23px;\r\n white-space: nowrap;\r\n overflow-x: hidden;\r\n text-overflow: ellipsis;\r\n color: #999999;\r\n background-repeat: no-repeat;\r\n cursor: pointer;\r\n}\r\n\r\n.GPlayerInfoLink {\r\n background-position: 0 -20px;\r\n}\r\n\r\n.GPlayerInfoLink:hover,\r\n.GPlayerInfoPopup:hover {\r\n color: #333;\r\n}\r\n\r\n.GPlayerInfoLink a,\r\n.GPlayerInfoLink a:visited\r\n.GPlayerInfoLink a:focus\r\n.GPlayerInfoLink a:hover {\r\n text-decoration: none;\r\n color: inherit;\r\n}\r\n\r\n\r\n.GPlayerName {\r\n left: 28px;\r\n width: calc(100% - 56px);\r\n line-height: 28px;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n padding-left: 4px;\r\n cursor: move;\r\n}\r\n\r\n.outOfRange .GPlayerName {\r\n color: #AAA;\r\n}\r\n\r\ndiv[id^=GPlayerInfoContent] {\r\n width: 280px;\r\n}","/* Location */\n[id*=\"GPlocationOriginPointer\"] {\n background-image: url(\"img/GPlocationOptions.png\");\n background-repeat: no-repeat;\n}\n\n[id^=GPlocationStageRemove],\n[id^=GPlocationStageAdd] {\n background-image: url(\"img/GPlocationOptions.png\");\n}\n\n[id^=GPlocationStageRemove],\n[id^=GPlocationStageAdd] {\n width: 28px;\n height: 28px;\n border: none;\n cursor: pointer;\n}\n\n.GPlocationOpen {\n background-color: unset;\n}\n.GPlocationOriginLabel {}\n.GPlocationStageRemove {\n background-position: -84px center;\n}\n.GPlocationStageAdd {\n background-position: -56px center;\n}\n\n[id*=\"GPlocationOriginPointer\"] + .GPlocationOriginPointerImg {\n background-position: -1px center;\n}\n\n[id*=\"GPlocationOriginPointer\"]:checked + .GPlocationOriginPointerImg {\n background-position: -29px center;\n}\n\n.GPlocationStageFlexInput {\n max-height: 28px;\n opacity: 1;\n}\n\nbutton.GPlocationOriginPointerImg[id*=\"GPlocationOriginPointerImg\"] {\n width: 28px;\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n border-right: 1px solid #999;\n}\n\n.GPlocationStageFlexInput {\n margin-bottom: 5px;\n}\n\ndiv[id^=GPlocationAutoCompleteList] {\n\n}\n","/* MEASURELENGTH POSITION */\r\n\r\n\r\n/* Showing/hiding measureLength position panel */\r\n\r\nbutton[id^=\"GPshowMeasureAreaPicto-\"] {\r\n background-image: url(\"img/GPmeasuresOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: -78px center;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAreaPicto-\"][aria-pressed=\"false\"] {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAreaPicto-\"][aria-pressed=\"true\"] {\r\n background-color: rgba(0,60,136,0.7);\r\n}","/* MEASURELENGTH POSITION */\r\n\r\n/* Showing/hiding drawing panel */\r\n\r\nbutton[id^=\"GPshowMeasureLengthPicto-\"] {\r\n background-image: url(\"img/GPmeasuresOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: -24px center;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureLengthPicto-\"][aria-pressed=\"false\"] {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureLengthPicto-\"][aria-pressed=\"true\"] {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n","/* MEASURELENGTH POSITION */\r\n\r\n/* Showing/hiding measureLength position panel */\r\n\r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"] {\r\n background-image: url(\"img/GPmeasuresOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 2px center;\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"][aria-pressed=\"false\"] {\r\n background-color: rgba(0,60,136,0.5);\r\n}\r\n \r\nbutton[id^=\"GPshowMeasureAzimuthPicto-\"][aria-pressed=\"true\"] {\r\n background-color: rgba(0,60,136,0.7);\r\n}","/* MEASURE TOOL */\n\n.GPmeasureTooltip {\n position: relative;\n background: rgba(0, 0, 0, 0.5);\n border-radius: 4px;\n color: white;\n padding: 4px 8px;\n white-space: nowrap;\n}\n\n.GPmeasureTooltip-measure {\n font-weight: bold;\n}\n\n.GPmeasureTooltip-info {\n font-size: 0.75em;\n text-align: center;\n}\n\n.GPmeasureTooltip-static {\n background-color: #ffcc33;\n color: black;\n border: 1px solid white;\n}\n\n.GPmeasureTooltip-hidden {\n display: none;\n}\n\n.GPmeasureTooltip-measure::before,\n.GPmeasureTooltip-info::before,\n.GPmeasureTooltip-static::before {\n border-top: 6px solid rgba(0, 0, 0, 0.5);\n border-right: 6px solid transparent;\n border-left: 6px solid transparent;\n content: \"\";\n position: absolute;\n bottom: -6px;\n margin-left: -7px;\n left: 50%;\n}\n\n.GPmeasureTooltip-static::before {\n border-top-color: #ffcc33;\n}\n","\n/* General panels */\n[id^=GPmousePositionPanel-] {\n width: 280px;\n}\n\nbutton[id^=\"GPshowMousePositionPicto-\"] {\n background-image: url(\"img/GPmousePositionOpen.png\");\n background-repeat: no-repeat;\n background-position: 1px center;\n}\n\n.GPmousePositionEditTool {\n background-image: url(\"img/GPmousePositionEditCoordinates.png\");\n}\n\nbutton[id^=GPmousePositionPanelClose] {\n background-image: url(\"img/GPmousePositionOpen.png\");\n}\n\n/* Map center localisation */\n\n.GPmousePositionLabel,\n.GPmousePositionCoords {\n display: inline-block;\n line-height: 20px;\n}\n\n.GPmousePositionLabel {\n width: 100px;\n font-weight: bold;\n}\n\n.GPmousePositionCoords {\n width: 110px;\n}\n\n/* Showing settings */\n\n.GPshowMousePositionSettingsPicto {\n bottom: 5px;\n right: 0;\n transition: all 0.5s ease-out 0s;\n}\n\n.GPmousePositionSettingsLabel {\n display: block;\n margin: auto;\n text-align: center;\n font-weight: bold;\n line-height: 16px;\n}\n\n.GPmousePositionSettingsSelect {\n width: 180px;\n margin-top: 5px;\n margin-inline: auto;\n}\n\n/* sexagesimal coordinates */\n\n.GPSexagesimal, .GPSexagesimalsec {\n margin:0;\n border: 1px solid rgb(204, 204, 204);\n border-radius: 4px;\n}\n\ninput:read-only.GPSexagesimal, input:read-only.GPSexagesimalsec {\n text-align: right;\n}\n\n\n.GPmousePositionSexagesimalLabel {\n font-size: 1.2em;\n vertical-align: middle;\n padding: 0;\n}\n\n/* direction N/S ou E/O */\nselect.GPmousePositionDirection {\n border: 1px solid #999;\n margin-left: 2px;\n}\n\nselect.GPmousePositionDirection:disabled{\n border: none;\n background: transparent;\n color: black;\n /*For FireFox*/\n -webkit-appearance: none;\n /*For Chrome*/\n -moz-appearance: none;\n}\n\n/*For IE10+*/\nselect.GPmousePositionDirection:disabled::-ms-expand {\n display: none;\n}\nselect.GPmousePositionDirection:disabled::-ms-value {\n color: black;\n}\n\n.GPmousePositionUnits,\n.GPmousePositionAltitudeUnits {\n margin-left: 5px;\n}\n\n/* EDIT COORDINATES TOOLS */\n.GPmousePositionPanelEditTools {\n position: absolute;\n top: 20px;\n right: 5px;\n}\n\n.GPmousePositionEditTool {\n width: 18px;\n height: 18px;\n display: inline-block;\n cursor: pointer;\n}\n","/* REVERSE GEOCODING */\r\n[id^=\"GPreverseGeocodingPanel-\"] {\r\n width: 280px;\r\n}\r\n\r\n.GPshowReverseGeocodingPicto {\r\n background-image: url(\"img/GPreverseGeocodingOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GPreverseGeocodingPanelClose {\r\n background-image: url(\"img/GPreverseGeocodingOpen.png\");\r\n}\r\n\r\n.GPreverseGeocodingReturnPicto {\r\n background-image: url(\"../../img/GPreturn.png\");\r\n background-repeat: no-repeat;\r\n background-position: 0 center;\r\n}\r\n\r\n/* Results panel */\r\n\r\n.GPlocationHighlight {\r\n background-color: rgba(255,200,0,0.25);\r\n color: #222;\r\n}","/* ROUTE */\r\n[id^=GProutePanel-] {\r\n width: 320px;\r\n}\r\n\r\n.GPshowRoutePicto {\r\n background-image: url(\"img/GProuteOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 1px center;\r\n}\r\n\r\n.GProutePanelClose {\r\n background-image: url(\"img/GProuteOpen.png\");\r\n}\r\n\r\n/* Route form */\r\nform[id^=GProuteForm] {\r\n padding: 15px;\r\n}\r\n\r\n.GProuteStageFlexInput {\r\n max-height: 28px;\r\n opacity: 1;\r\n}\r\n\r\n.GProuteStageFlexInputHidden {\r\n max-height: 0;\r\n opacity: 0;\r\n overflow: hidden;\r\n}\r\n\r\n.GProutePointLabelP {\r\n margin: 2px 0 5px 0;\r\n}\r\n\r\n.GProuteComputationLabel {\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GProuteOriginPointerImg,\r\n.GProuteStageRemove,\r\ndiv[id^=GProuteStageAdd],\r\n.GProuteTransportImg {\r\n background-image: url(\"img/GProuteOptions.png\");\r\n font-size: 0;\r\n}\r\n\r\n.GProuteFormMini {\r\n max-height: 58px;\r\n}\r\n\r\n.GProuteExclusionsOption {\r\n background-image: url(\"img/GProuteCheck.png\");\r\n}\r\n\r\n.GProuteModeLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 5px;\r\n}\r\n\r\n.GProuteTransportImg {\r\n display: inline-block;\r\n width: 28px;\r\n height: 28px;\r\n cursor: pointer;\r\n content-visibility: hidden;\r\n}\r\n\r\n.GProuteTransportImg:first-of-type {\r\n margin-left: 18px;\r\n margin-right: 10px;\r\n}\r\n\r\ninput[id^=GProuteTransportCar] + .GProuteTransportImg {\r\n background-position: -112px 0;\r\n}\r\n\r\ninput[id^=GProuteTransportCar]:checked + .GProuteTransportImg {\r\n background-position: -140px 0;\r\n}\r\n\r\ninput[id^=GProuteTransportPedestrian] + .GProuteTransportImg {\r\n background-position: -168px 0;\r\n}\r\n\r\ninput[id^=GProuteTransportPedestrian]:checked + .GProuteTransportImg {\r\n background-position: -196px 0;\r\n}\r\n\r\ndiv[id^=GProuteTransportChoice] input {\r\n display: none;\r\n}\r\n\r\ndiv[id^=GProuteTransportChoice] .gpf-radio-btn-group {\r\n justify-content: center;\r\n}\r\n\r\nselect[id^=GProuteComputationSelect] {\r\n width: 100px;\r\n}\r\n/* Result panel */\r\n\r\n.GProuteResultsDetailsInstructionHighlight {\r\n background-color: rgba(255,200,0,0.25);\r\n color: #222;\r\n}\r\n\r\n.GProuteResultStage {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n}\r\n\r\n\r\n.GProuteResultStageLabel,\r\n.GProuteResultStageValue,\r\n.GProuteResultsValueLabel {\r\n display: inline-block;\r\n line-height: 18px;\r\n}\r\n\r\n.GProuteResultStageLabel,\r\n.GProuteResultsValueLabel {\r\n color: #666;\r\n}\r\n\r\n.GProuteResultStageLabel {\r\n width: 60px;\r\n}\r\n\r\n.GProuteResultsValueLabel {\r\n width: 65px;\r\n}\r\n\r\n.GProuteResultStageValue {\r\n -webkit-flex: 1;\r\n -webkit-box-flex: 1;\r\n -ms-flex: 1;\r\n flex: 1;\r\n overflow-x: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n/* Exclusions */\r\n\r\n\r\n.GPshowRouteExclusionsPicto {\r\n top: unset;\r\n right: 0;\r\n transition: all 0.3s ease-out 0s;\r\n transform: translateY(-100%);\r\n}\r\n\r\n.GProuteExclusionsLabel {\r\n display: block;\r\n text-align: center;\r\n margin-bottom: 8px;\r\n margin-top: 8px;\r\n font-weight: bold;\r\n line-height: 16px;\r\n}\r\n\r\n.GProuteExclusionsOptions {\r\n display: -webkit-flex;\r\n display: -ms-flexbox;\r\n display: -webkit-box;\r\n display: flex;\r\n -webkit-justify-content: space-around;\r\n -ms-flex-pack: distribute;\r\n justify-content: space-around;\r\n}\r\n\r\n.GProuteExclusionsOption {\r\n display: block;\r\n height: 28px;\r\n line-height: 26px;\r\n color: #A77;\r\n background-color: #FEE;\r\n padding-left: 28px;\r\n padding-right: 5px;\r\n border: 1px solid #A77;\r\n border-radius: 3px;\r\n cursor: pointer;\r\n}\r\n\r\ninput:checked + .GProuteExclusionsOption {\r\n background-color: #EFE;\r\n background-position: 0 -28px;\r\n color: #797;\r\n border: 1px solid #797;\r\n}\r\n\r\n/* Reset picto */\r\n\r\nbutton[id^=GProuteReset] {\r\n /* background-color: #366291; */\r\n background-image: url(\"img/GProuteOptions.png\");\r\n background-position: -224px center;\r\n opacity: 0.8;\r\n transition: opacity 0.2s ease-out;\r\n}\r\n\r\n/* Results popup */\r\n\r\n.gp-features-content-div {\r\n /* min-width: 240px; */\r\n}\r\n\r\n/* Results details header */\r\ndiv[id^=GProuteResultsValueDist],\r\ndiv[id^=GProuteResultsValueTime] {\r\n color: #366291;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails] + label:hover,\r\ninput[id^=GProuteResultsShowDetails] + label + label:hover {\r\n color: #366291;\r\n}\r\n\r\ndiv[id^=GProuteResultsStages] {\r\n margin-bottom: 15px;\r\n}\r\n\r\ndiv[id^=GProuteResultsValueDist],\r\ndiv[id^=GProuteResultsValueTime] {\r\n display: inline-block;\r\n line-height: 18px;\r\n}\r\n\r\ndiv[id^=GProuteResultsValueDist],\r\ndiv[id^=GProuteResultsValueTime] {\r\n width: 80px;\r\n font-weight: bold;\r\n}\r\n\r\nselect[id^=GProuteResultsComputationSelect] {\r\n width: 100px;\r\n}\r\n\r\ndiv[id^=GProuteResultsNew] {\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 3px;\r\n opacity: 0.8;\r\n background-position: -224px 0;\r\n transition: opacity 0.2s ease-out;\r\n cursor: pointer;\r\n background-color: #366291;\r\n background-image: url(\"img/GProuteOptions.png\");\r\n position: initial;\r\n}\r\n\r\n.GPfakeBorder {\r\n display: inline-block;\r\n height: 14px;\r\n width: 60px;\r\n border-bottom: 1px solid #999;\r\n}\r\n\r\n.GPfakeBorderLeft {\r\n margin-left:15px;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails] + label,\r\ninput[id^=GProuteResultsShowDetails] + label + label {\r\n width: 130px;\r\n line-height: 28px;\r\n vertical-align: top;\r\n text-align: center;\r\n font-weight: bold;\r\n cursor: pointer;\r\n transition: color 0.2s ease-out;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails] + label,\r\ninput[id^=GProuteResultsShowDetails]:checked + label + label {\r\n display: inline-block;\r\n}\r\n\r\ninput[id^=GProuteResultsShowDetails]:checked + label,\r\ninput[id^=GProuteResultsShowDetails] + label + label {\r\n display: none;\r\n}\r\n\r\ndiv:has(input[id^=GProuteResultsShowDetails]) + div[id^=GProuteResultsDetails] {\r\n max-height: 0;\r\n opacity: 0;\r\n}\r\n\r\ndiv:has(input[id^=GProuteResultsShowDetails]:checked) + div[id^=GProuteResultsDetails] {\r\n max-height: 200px;\r\n opacity: 1;\r\n}\r\n\r\ndiv[id^=GProuteResultsDetails] {\r\n overflow-y: auto;\r\n transition: max-height 0.5s ease-in-out 0.25s, opacity 0.5s ease-in-out 0.25s;\r\n}\r\n\r\n.GProuteResultsDetailsNumber,\r\n.GProuteResultsDetailsInstruction {\r\n display: inline-block;\r\n margin-top: 4px;\r\n line-height: 16px;\r\n color: #666;\r\n}\r\n\r\n.GProuteResultsDetailsNumber {\r\n font-weight: bold;\r\n width: 22px;\r\n text-align: right;\r\n vertical-align: top;\r\n}\r\n\r\n.GProuteResultsDetailsInstruction {\r\n width: calc(100% - 30px);\r\n padding-left: 5px;\r\n}\r\n\r\ninput[id^=GProuteSubmit-] {\r\n width: fit-content;\r\n padding: 0 10px;\r\n}","/* SEARCH ENGINE */\r\n\r\n[id^=\"GPsearchEngine-\"] {\r\n flex-direction: row;\r\n align-items: center;\r\n}\r\n\r\n.position-container-top-left [id^=\"GPsearchEngine-\"],\r\n.position-container-bottom-left [id^=\"GPsearchEngine-\"],\r\n.position-container-top-right [id^=\"GPsearchEngine-\"],\r\n.position-container-bottom-right [id^=\"GPsearchEngine-\"] {\r\n flex-direction: column;\r\n align-items: flex-start;\r\n height: 32px;\r\n}\r\n\r\n.position-container-top-left [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\r\n.position-container-bottom-left [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\r\n.position-container-top-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\r\n.position-container-bottom-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList] {\r\n width: 340px;\r\n position: relative;\r\n top: unset;\r\n}\r\n\r\n.GPshowSearchEnginePicto {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-repeat: no-repeat;\r\n background-position: 0 center;\r\n}\r\n\r\n.GPsearchRadioContainer {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -26px center;\r\n background-repeat: no-repeat;\r\n transition: border-radius 0.5s ease-out 0s;\r\n color: transparent;\r\n overflow: hidden;\r\n position: relative;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n width: 32px;\r\n height: 32px;\r\n padding: 2px;\r\n background-color: rgba(0,60,136,0.5);\r\n border-radius: 4px;\r\n border: 2px solid rgba(255, 255, 255, 0.4);\r\n}\r\n\r\n.GPbuttonsContainer {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.GPsearchRadioContainer:hover {\r\n background-color: rgba(0,60,136,0.7);\r\n}\r\n\r\n.GPshowAdvancedSearch {\r\n background-color: #fff0;\r\n}\r\n\r\n.GPshowAdvancedSearch:hover {\r\n background-color: #fff0;\r\n}\r\n\r\n.GPshowGeolocate {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -102px center;\r\n background-repeat: no-repeat;\r\n transition: border-radius 0.5s ease-out 0s;\r\n margin-right: 5px;\r\n}\r\n\r\n.GPshowSearchByCoordinate {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -76px center;\r\n background-repeat: no-repeat;\r\n transition: border-radius 0.5s ease-out 0s;\r\n}\r\n\r\n.GPsearchInputReset {\r\n background-image: url(\"img/GPsearchEngineClose.png\");\r\n background-position: 0 center;\r\n}\r\n\r\n.gpf-select {\r\n background-color: #FFF;\r\n}\r\n\r\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] {\r\n max-width: 0px;\r\n border: none;\r\n}\r\n\r\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] {\r\n border-top-right-radius: 0;\r\n}\r\n\r\nbutton[id^=GPsearchInputReset] {\r\n border-top-right-radius: 5px;\r\n border-bottom-right-radius: 5px;\r\n width: 32px;\r\n height: 32px;\r\n}\r\n\r\nbutton[id^=GPcoordinateSearchClose],\r\nbutton[id^=GPgeocodeResultsClose],\r\nbutton[id^=GPadvancedSearchClose] {\r\n top: 0;\r\n right: 0;\r\n width: 30px;\r\n height: 32px;\r\n}\r\n\r\nbutton[id^=GPcoordinateSearchClose],\r\nbutton[id^=GPgeocodeResultsClose] {\r\n background-position: 0 0;\r\n}\r\n\r\nbutton[id^=GPadvancedSearchClose] {\r\n background-repeat: no-repeat;\r\n}\r\n\r\nbutton[id^=GPcoordinateSearchClose],\r\nbutton[id^=\"GPgeocodeResultsClose\"] {\r\n background-image: url(\"img/GPsearchEngineClose.png\");\r\n}\r\n\r\nbutton[id^=\"GPadvancedSearchClose\"] {\r\n background-image: url(\"img/GPsearchEngineOpen.png\");\r\n background-position: -50px 3px;\r\n}\r\n\r\nform[id^=GPsearchInput-] {\r\n width: 280px;\r\n}\r\n\r\nform[id^=GPsearchInput-] input {\r\n display: block;\r\n width: 100%;\r\n /* height: 100%; */\r\n border: 1px solid #999;\r\n border-top-right-radius: 5px;\r\n border-bottom-right-radius: 5px;\r\n padding: 0;\r\n padding-right: 30px;\r\n padding-left: 5px;\r\n color: #333;\r\n font-size: 1.0em;\r\n}\r\n\r\nform[id^=GPsearchInput-] input:disabled {\r\n background-color: #DDD;\r\n color: #999;\r\n}\r\n\r\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"true\"] + form[id^=GPsearchInput-] {\r\n max-width: 280px;\r\n}\r\n\r\n.GPsearchInputText {\r\n height: 32px;\r\n}\r\n\r\ndialog[id^=GPcoordinateSearchPanel],\r\ndialog[id^=GPadvancedSearchPanel] {\r\n width: 310px;\r\n position: absolute;\r\n top: 35px;\r\n margin-left: 33px;\r\n}\r\n\r\n/* Autocomplete list / geocode results */\r\n\r\n[id^=\"GPautocompleteResults-\"] {\r\n box-shadow: 0 0 6px #000;\r\n}\r\n\r\ndiv[id^=GPautoCompleteList],\r\ndialog[id^=GPgeocodeResultsList] {\r\n width: 280px;\r\n position: absolute;\r\n max-height: 140px;\r\n background-color: var(--background-default-grey);\r\n}\r\n\r\ndiv[id^=GPautoCompleteList] {\r\n top: 35px;\r\n}\r\n\r\ndialog[id^=GPgeocodeResultsList] {\r\n position: absolute;\r\n top: 35px;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n}\r\n\r\ndiv[id^=GPgeocodeResults-] {\r\n width: 100%;\r\n position: relative;\r\n background-color: #FFF;\r\n max-height: 140px;\r\n overflow-y: auto;\r\n}\r\n\r\n.GPcoordinateSearchLabel,\r\n.GPadvancedSearchCodeLabel,\r\n.GPadvancedSearchFilterLabel {\r\n max-width: 105px;\r\n}\r\n\r\n.GPcoordinateSearchSystemsSelect,\r\n.GPcoordinateSearchSystemsLabel,\r\n.GPadvancedSearchCodeLabel,\r\n.GPadvancedSearchCode,\r\n div[id^=GPadvancedSearchFilters] {\r\n margin-top: 15px;\r\n}\r\n\r\n.GPcoordinateSearchSystemsLabel,\r\n.GPcoordinateSearchSystemsSelect,\r\n.GPcoordinateSearchUnitsLabel,\r\n.GPcoordinateSearchUnitsSelect,\r\n.GPcoordinateSearchLabel,\r\n.GPcoordinateSearchInput,\r\n.GPadvancedSearchFilterLabel,\r\n.GPadvancedSearchFilterInput {\r\n margin-bottom: 5px;\r\n}\r\n",".GPshowToolBoxPicto {\n background-repeat: no-repeat;\n background-image: url(\"img/GPtoolBoxMeasureOpen.png\");\n}",".GPzoomIn {\n background-image: url(\"img/zoom-in.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center;\n height: 32px;\n width: 32px;\n border-bottom: unset;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.GPzoomOut {\n background-image: url(\"img/zoom-out.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center;\n height: 32px;\n width: 32px;\n border-top: unset;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.GPzoomIn:hover, .GPzoomOut:hover {\n cursor: pointer;\n}",".ol-custom-full-screen button {\n background-image: url(\"img/full-screen-buttons.png\");\n background-repeat: no-repeat;\n}\n.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=\"false\"] {\n background-position: 0 0;\n}\n.ol-custom-full-screen button.GPfullScreenPicto[aria-pressed=\"true\"] {\n background-position: 0 -30px;\n}\n",".GPshowOverviewMap {\n background-image: url(\"img/overviewmap.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: 2px center;\n}","div[id^=GPlegends-] {\n display: none;\n}","div[id^=GPcatalog-] {\n display: block;\n}\n\n.GPshowCatalogPicto {\n background-image: url(\"img/GPcatalogOpen.png\");\n background-repeat: no-repeat;\n background-position: 0px center;\n}\n\ndialog[id^=GPcatalogPanel-] {\n width: 280px;\n}\n\n.GPcatalogPanelClose {\n background-image: url(\"img/GPcatalogOpen.png\");\n}\n\n.GPtabs {}\n.GPtabsList {\n overflow: hidden;\n border: 1px solid #ccc;\n background-color: #f1f1f1;\n list-style-type: none;\n margin: 0;\n padding: 0;\n display: flex;\n}\n.GPtabList {\n flex: 1 1 0px;\n}\n.GPtabButton {\n background-color: inherit;\n float: left;\n border: none;\n outline: none;\n cursor: pointer;\n padding: 14px 16px;\n transition: 0.3s;\n}\n.GPtabButtonActive {\n background-color: #ccc;\n}\n.GPtabContent {\n display: none;\n padding: 6px 12px;\n border: 1px solid #ccc;\n border-top: none;\n}\n.GPtabContentSelected {\n display: block;\n}\n.GPlabelActive:hover {\n background-color: #ccc;\n}\n.GPcatalogButtonSection {\n border: unset;\n background: unset;\n}\nbutton[aria-expanded=\"true\"].GPcatalogButtonSection span.GPshowCatalogAdvancedTools {\n -webkit-transform: rotateX(180deg);\n transform: rotateX(180deg);\n}\n\n.GPshowCatalogAdvancedTools {\n display: inline-block;\n width: 28px;\n height: 28px;\n vertical-align: middle;\n background-image: url(\"img/GPcatalogTools.png\");\n background-position: -26px 0;\n}\n\n#header-search > label {\n display: none;\n}","div[id^=GPterritories-] {\n display: none\n}","div[id^=\"GPcontrolList-\"] .GPshowOpen > span {\n font-size: 24px;\n color: white;\n display: block;\n height: 24px;\n line-height: 24px;\n pointer-events: none;\n}\n\nbutton[id^=\"GPshowControlListPicto-\"][aria-pressed=\"true\"] + dialog {\n width: 200px;\n}\n\n.GPcontrolListPanelClose {\n background-image: url(\"img/close.png\");\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div {\n display: flex;\n flex-direction: row;\n column-gap: 1rem;\n align-items: center;\n padding: 0.5rem 0.5rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div:hover {\n background-color: #EEE;\n cursor: pointer;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button {\n flex-shrink: 0;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button:hover {\n background-color: rgba(0,60,136,0.5);\n}"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/package/css/Dsfr.css b/dist/package/css/Dsfr.css index 01f2fa64..49dfc988 100644 --- a/dist/package/css/Dsfr.css +++ b/dist/package/css/Dsfr.css @@ -8,8 +8,8 @@ * @copyright copyright (c) IGN * @license AGPL-3.0 * @author IGN - * @version 1.0.0-beta.1-317 - * @date 03/01/2025 + * @version 1.0.0-beta.1-318 + * @date 06/01/2025 * */ @@ -55,5 +55,5 @@ * @license Licensed under MIT license * See https://raw.githubusercontent.com/proj4js/proj4js/master/LICENSE.md * @version 2.15.0 - */:root{--size-per-row:44px}.gpf-widget{padding:2px;pointer-events:auto;position:absolute}.gpf-widget-button{width:40px}.gpf-panel{background-color:unset;max-height:100%;position:relative;width:max-content}.gpf-panel form{overflow:auto;padding:0 2rem 2rem}.gpf-panel--hidden{display:none}.gpf-panel__body{display:flex;flex:1 1 auto;flex-direction:column;max-height:100%!important;min-height:0;overflow:unset;position:relative}.gpf-panel__title{text-align:left}.gpf-panel__footer{background-color:transparent;justify-content:center;margin-top:0;padding:0}.gpf-panel__footer>input[type=submit]{width:100%}.gpf-panel__content{margin-bottom:unset;padding:unset}.gpf-panel--close,.gpf-panel--info,.gpf-panel--reduce{cursor:pointer;position:relative}.gpf-flex{align-items:center;flex-direction:row}.gpf-flex,.gpf-flex-column{display:flex;justify-content:space-evenly}.gpf-flex-column{flex-direction:column}.gpf-flex-padding{padding:5px}.gpf-hidden{display:none;opacity:0;visibility:hidden}.gpf-visible{display:block;opacity:100%;visibility:visible}.gpf-waiting{background-color:hsla(0,0%,100%,.9);border-radius:4px;bottom:0;font-size:1.5em;font-weight:700;height:inherit;left:0;overflow:hidden;position:absolute;right:0;top:80px}.gpf-waiting--hidden{display:none}.gpf-waiting--visible{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;z-index:4000}.gpf-waiting_info{margin:auto}.gpf-btn-icon.gpf-btn--secondary,.gpf-btn-icon.gpf-btn--tertiary{background-color:var(--background-default-grey)}.gpf-widget>.gpf-btn-icon[aria-pressed=true]{background-color:var(--hover-tint);position:relative}.gpf-widget:has(>.gpf-btn-icon[aria-pressed=true]):after{background-color:var(--background-action-high-blue-france);content:"";height:40px;left:44px;position:absolute;transform:translateY(-40px);width:3px}@supports(-moz-appearance:none){.gpf-widget:has(.gpf-btn-icon[aria-pressed=true]):after{transform:unset}}.gpf-widget>.gpf-btn-icon[aria-label]:hover:before{background-image:conic-gradient(from 56.31deg at 0 50%,transparent 0deg,var(--background-overlap-grey) 0deg,var(--background-overlap-grey) 67.38deg,transparent 67.38deg),conic-gradient(from 56.31deg at 0 50%,transparent 0deg,var(--border-default-grey) 0deg,var(--border-default-grey) 67.38deg,transparent 67.38deg),linear-gradient(90deg,var(--border-default-grey),var(--border-default-grey)),linear-gradient(90deg,var(--background-overlap-grey),var(--background-overlap-grey));background-position:.125rem 50%,0 50%,.375rem 100%,.375rem 100%;background-repeat:no-repeat;background-size:.375rem .5rem,.375rem .5rem,1px,100%,calc(100% - .5rem) 100%;color:var(--text-default-grey);content:attr(aria-label);filter:drop-shadow(0 2px 6px rgba(0,0,18,.16));filter:drop-shadow(var(--overlap-shadow));font-size:.75rem;padding:.5rem .5rem .5rem 1.25rem;position:absolute;top:0;white-space:nowrap;width:fit-content}.position-container-bottom-left .gpf-widget>.gpf-btn-icon[aria-label]:hover:before,.position-container-top-left .gpf-widget>.gpf-btn-icon[aria-label]:hover:before{transform:translateX(24px)}.position-container-bottom-right .gpf-widget>.gpf-btn-icon[aria-label]:hover:before,.position-container-top-right .gpf-widget>.gpf-btn-icon[aria-label]:hover:before{background-image:conic-gradient(from 236.31deg at 100% 50%,transparent 0deg,var(--background-overlap-grey) 0deg,var(--background-overlap-grey) 67.38deg,transparent 67.38deg),conic-gradient(from 236.31deg at 100% 50%,transparent 0deg,var(--border-default-grey) 0deg,var(--border-default-grey) 67.38deg,transparent 67.38deg),linear-gradient(90deg,var(--border-default-grey),var(--border-default-grey)),linear-gradient(90deg,var(--background-overlap-grey),var(--background-overlap-grey));background-position:calc(100% - .125rem) 50%,100% 50%,calc(100% - .375rem) 0,calc(100% - .375rem) 0;background-size:.375rem .5rem,.375rem .5rem,1px 100%,100%;padding:.5rem 1.25rem .5rem .5rem;transform:translateX(calc(-100% - 16px))}.gpf-btn--secondary,.gpf-btn--tertiary{position:relative}.gpf-btn--secondary:after,.gpf-btn--tertiary:after{background-color:var(--text-action-high-blue-france);content:"";height:100%;left:0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask:linear-gradient(#0000,#0000);mask:linear-gradient(#0000,#0000);position:absolute;top:0;width:100%}.gpf-btn--secondary:disabled:after,.gpf-btn--tertiary:disabled:after{background-color:var(--text-disabled-grey)}.position-container-top-left .gpf-button-no-gutter,.position-container-top-right .gpf-button-no-gutter{margin-bottom:-5px}.position-container-bottom-left .gpf-button-no-gutter,.position-container-bottom-right .gpf-button-no-gutter{margin-top:-5px}.gpf-btn-icon-close{float:right;position:absolute;right:.5rem;top:.5rem}.gpf-btn-icon-return{float:left;left:.5rem;position:absolute;top:.5rem}.gpf-btn-icon-return:after{-webkit-mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAANVJREFUKJGd07EuREEYxfGzK0hsQSOhkKxoZButR9B5FJ3Gc2gUKPU6CkGx0XgGuhsaDVH5aSxjc+9u9p7kK74z8/9OJjPTQdqq25qcAPeTDKbSGK8BhjitWftX48nbSU6S7CZZSbKaZDnJ3LTkLdz50xsecYsz7GGxTC7hY3xp1ieO0K2D13FTbH7BPR5Q/QyusFMHBxvFgAvMYwE9HOIDB01wsFmcs/SXcInzSXCwhn6Nv4/rpqsaqUryVOMPkzyPmlmf52uSq1HTMfvH6CV5bwv/6htI1GwnhVkfqAAAAABJRU5ErkJggg==) center no-repeat;mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAANVJREFUKJGd07EuREEYxfGzK0hsQSOhkKxoZButR9B5FJ3Gc2gUKPU6CkGx0XgGuhsaDVH5aSxjc+9u9p7kK74z8/9OJjPTQdqq25qcAPeTDKbSGK8BhjitWftX48nbSU6S7CZZSbKaZDnJ3LTkLdz50xsecYsz7GGxTC7hY3xp1ieO0K2D13FTbH7BPR5Q/QyusFMHBxvFgAvMYwE9HOIDB01wsFmcs/SXcInzSXCwhn6Nv4/rpqsaqUryVOMPkzyPmlmf52uSq1HTMfvH6CV5bwv/6htI1GwnhVkfqAAAAABJRU5ErkJggg==) center no-repeat}.gpf-btn-icon{caret-color:transparent;width:inherit}.gpf-btn-icon-reset:after{background-color:var(--text-action-high-blue-france);-webkit-mask:linear-gradient(#fff 0 0) top /100% 1px,linear-gradient(#fff 0 0) bottom/100% 1px,linear-gradient(#fff 0 0) left /1px 100%,linear-gradient(#fff 0 0) right /1px 100%,url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=) -25px center;mask:linear-gradient(#fff 0 0) top /100% 1px,linear-gradient(#fff 0 0) bottom/100% 1px,linear-gradient(#fff 0 0) left /1px 100%,linear-gradient(#fff 0 0) right /1px 100%,url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=) -25px center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.gpf-btn-icon-info{height:40px;width:40px}.gpf-input{padding-left:5px}.gpf-radio-btn-group{display:flex;gap:1em}.gpf-panel__advancedlist,.gpf-panel__list{background-color:#fff;border:1px solid #999;max-height:140px;overflow-y:hidden;position:absolute;width:inherit;z-index:2}.gpf-panel__advancedlist{border-top:none;font-size:.9em;width:calc(100% - 28px)}.gpf-panel__items:hover{background-color:#cedbef;color:#000}.gpf-panel__items{color:#5e5e5e;cursor:pointer;font-size:1em;height:28px;line-height:16px;overflow:hidden;padding:6px 10px;text-overflow:ellipsis;white-space:nowrap;width:100%}.gpf-panel:after,.gpf-panel:before{flex:0;height:unset}:root{--size-per-row:50px}.position-container-bottom-left,.position-container-bottom-right,.position-container-top-left,.position-container-top-right{display:flex;flex-direction:column;height:calc(100% - 8px);justify-content:flex-start;min-height:var(--size-per-row);position:absolute;width:calc(var(--size-per-row) + 4px)}.position-container-top-left,.position-container-top-right{top:4px}.position-container-top-left{float:left;left:8px}.position-container-top-right{float:right;right:4px}.position-container-bottom-left,.position-container-bottom-right{bottom:4px;justify-content:flex-end}.position-container-bottom-right{float:right;right:4px}.position-container-bottom-left{float:left;left:8px}.gp-feature-info-div{background-color:var(--background-default-grey);bottom:17px;box-shadow:0 0 5px var(--text-default-grey);font-size:.75em;max-width:calc(100vw - 80px);padding:10px;position:relative}.gp-feature-info-div:before{border-left:14px solid transparent;border-right:14px solid transparent;border-top:15px solid var(--background-default-grey);bottom:-15px;content:"";left:50%;margin-left:-14px;position:absolute}.gp-feature-info-div .closer{background-color:var(--background-default-grey);border:none;border-bottom-right-radius:10px;border-top-right-radius:10px;cursor:pointer;display:block;height:30px;position:absolute;right:0;top:0;width:30px}.gp-feature-info-div .closer:after{background-color:var(--text-action-high-blue-france);content:"";height:100%;left:0;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwMDA5MSIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwMDA5MSIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=) center no-repeat;-webkit-mask-size:14px 14px;mask-size:14px 14px;position:absolute;top:0;width:100%}.gp-features-content-div{max-height:340px;max-width:420px;min-width:260px;overflow:auto}.gp-features-content-div h5,.gp-features-content-div h6,.gp-features-content-div p,.gp-features-content-div ul{margin:0}.gp-features-content-div ul{list-style-type:none;padding:0}.geoportail-popup-content h5,.geoportail-popup-content h6,.geoportail-popup-content p,.gp-att-description-div,.gp-att-name-div,.gp-att-others-div{padding:0 10px}.geoportail-popup-content h5:not(:last-child),.geoportail-popup-content h6:not(:last-child),.geoportail-popup-content p:not(:last-child),.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){margin-bottom:15px}.geoportail-popup-content h5:last-child,.geoportail-popup-content h6:last-child,.geoportail-popup-content p:last-child,.gp-att-description-div:last-child,.gp-att-name-div,.gp-att-others-div:last-child{margin-bottom:10px}.geoportail-popup-content h5:first-child,.geoportail-popup-content h6:first-child,.geoportail-popup-content p:first-child,.gp-att-description-div:first-child,.gp-att-name-div:first-child,.gp-att-others-div:first-child{margin-top:10px}.gp-att-name-div,.gp-features-content-div h5{color:#0b6ba7;font-size:1.2em;font-weight:700;padding-right:35px;text-transform:uppercase}.gp-features-content-div h6{font-size:1.1em}.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){border-bottom:1px dotted #666;padding-bottom:10px}.ol-disabled{--idle:transparent;--hover:var(--background-disabled-grey-hover);--active:var(--background-disabled-grey-active);background-color:var(--background-disabled-grey);color:var(--text-disabled-grey);cursor:not-allowed;display:block}.ol-scale-bar,.ol-scale-line{z-index:-1}.fr-collapse{--collapse-max-height:none}.fr-collapse:not(.fr-collapse--expanded):not(.fr-collapsing){--collapse-max-height:0}@media (max-width:576px){.gpf-mobile-fullscreen>button[aria-pressed=true]~dialog{width:100vw!important}.gpf-mobile-fullscreen form div,.gpf-mobile-fullscreen form p{margin:auto;text-align:center}.gpf-mobile-fullscreen .gpf-mobile-form{height:100vh;max-height:unset}.position-container-bottom-left .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-bottom-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-top-left .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-top-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog{left:-8px!important;right:unset!important;top:-4px!important}.position-container-bottom-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-top-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog{left:unset!important;right:-4px!important}}.gpf-btn-icon-drawing:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI1Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTUuMDQgOS40MzcgMTMuNzA0IDguMWwtOC44MTEgOC44MXYxLjMzOUg2LjIzek0xNi4zNzggOC4xbDEuMzM4LTEuMzM4LTEuMzM4LTEuMzM3TDE1LjA0IDYuNzZ6TTcuMDE0IDIwLjE0SDN2LTQuMDEzbDEyLjcxLTEyLjcxYS45NDYuOTQ2IDAgMCAxIDEuMzM3IDBsMi42NzYgMi42NzZjLjM3LjM3LjM3Ljk2OSAwIDEuMzM4eiIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI1Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTUuMDQgOS40MzcgMTMuNzA0IDguMWwtOC44MTEgOC44MXYxLjMzOUg2LjIzek0xNi4zNzggOC4xbDEuMzM4LTEuMzM4LTEuMzM4LTEuMzM3TDE1LjA0IDYuNzZ6TTcuMDE0IDIwLjE0SDN2LTQuMDEzbDEyLjcxLTEyLjcxYS45NDYuOTQ2IDAgMCAxIDEuMzM3IDBsMi42NzYgMi42NzZjLjM3LjM3LjM3Ljk2OSAwIDEuMzM4eiIvPjwvc3ZnPg==) center no-repeat}.gp-label-div,.gp-styling-div{transform:translateY(20px);width:370px}.gp-label-div textarea{margin-bottom:1rem;max-width:100%}.gp-label-div input{width:100%}.gp-styling-option.fr-range--sm[data-fr-js-range]:after,.gp-styling-option.fr-range--sm[data-fr-js-range]:before{top:1.74rem}.drawing-tool{width:40px}.drawing-tool-active{background-color:var(--hover-tint)}button[id^=drawing-tool-point-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOCAxNi40ODUgNC4yNDMtNC4yNDJhNiA2IDAgMSAwLTguNDg2IDB6bTUuNjU3LTIuODI4TDggMTkuMzE0bC01LjY1Ny01LjY1N2E4IDggMCAxIDEgMTEuMzE0IDBNMSAyMGgxNHYySDF6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOCAxNi40ODUgNC4yNDMtNC4yNDJhNiA2IDAgMSAwLTguNDg2IDB6bTUuNjU3LTIuODI4TDggMTkuMzE0bC01LjY1Ny01LjY1N2E4IDggMCAxIDEgMTEuMzE0IDBNMSAyMGgxNHYySDF6Ii8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-line-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zLjQxNCAxNCAxMy41NTYgMy44NThsLTEuNDE0LTEuNDE0TDIgMTIuNTg2VjE0em0uODI5IDJIMHYtNC4yNDNMMTEuNDM1LjMyMmExIDEgMCAwIDEgMS40MTQgMGwyLjgyOSAyLjgyOWExIDEgMCAwIDEgMCAxLjQxNHpNMCAxOGgxOHYySDB6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zLjQxNCAxNCAxMy41NTYgMy44NThsLTEuNDE0LTEuNDE0TDIgMTIuNTg2VjE0em0uODI5IDJIMHYtNC4yNDNMMTEuNDM1LjMyMmExIDEgMCAwIDEgMS40MTQgMGwyLjgyOSAyLjgyOWExIDEgMCAwIDEgMCAxLjQxNHpNMCAxOGgxOHYySDB6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat}button[id^=drawing-tool-polygon-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtMTEgMy4wMyA4LjUzIDYuMTk4LTMuMjU4IDEwLjAyOEg1LjcyOUwyLjQ3IDkuMjI4em0xMC43NDcgNS40NzhMMTEgLjcuMjUzIDguNTA4bDQuMTA1IDEyLjYzNGgxMy4yODR6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtMTEgMy4wMyA4LjUzIDYuMTk4LTMuMjU4IDEwLjAyOEg1LjcyOUwyLjQ3IDkuMjI4em0xMC43NDcgNS40NzhMMTEgLjcuMjUzIDguNTA4bDQuMTA1IDEyLjYzNGgxMy4yODR6Ii8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-text-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNyAwYTEgMSAwIDAgMSAxIDF2My43NTdsLTIgMlYySDJ2MTZoMTR2LTIuNzU4bDItMlYxOWExIDEgMCAwIDEtMSAxSDFhMSAxIDAgMCAxLTEtMVYxYTEgMSAwIDAgMSAxLTF6bTEuNzc4IDYuODA4IDEuNDE0IDEuNDE0TDEyLjQxNCAxNmwtMS40MTYtLjAwMi4wMDItMS40MTJ6TTEwIDEwdjJINXYtMnptMy00djJINVY2eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNyAwYTEgMSAwIDAgMSAxIDF2My43NTdsLTIgMlYySDJ2MTZoMTR2LTIuNzU4bDItMlYxOWExIDEgMCAwIDEtMSAxSDFhMSAxIDAgMCAxLTEtMVYxYTEgMSAwIDAgMSAxLTF6bTEuNzc4IDYuODA4IDEuNDE0IDEuNDE0TDEyLjQxNCAxNmwtMS40MTYtLjAwMi4wMDItMS40MTJ6TTEwIDEwdjJINXYtMnptMy00djJINVY2eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-edit-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0xMi4xMjEgNC4yMjIgNS42NTcgNS42NTctLjcwNyA2LjM2NGMtNi4xMjggMS40MTQtOS43ODIgMi40NzUtMTMuMDggNS4zMDNMMi41OTQgMjAuMTVjMy43MjItMy4zMzEgNy45OTUtNC4zMjggMTIuNjQzLTUuNTJsLjQ0Ni00LjAxOC00LjI5Ny00LjI5Ny00LjAxOC40NDZjLTEuMTkyIDQuNjQ4LTIuMTg5IDguOTItNS41MiAxMi42NDNMLjQ1NCAxOC4wMWMyLjgyOC0zLjMgMy44OS02Ljk1MyA1LjMwMy0xMy4wODF6bS0xLjQxNCA3LjA3QTIgMiAwIDAgMSA3Ljg4IDE0LjEyYTIgMiAwIDEgMSAyLjgyNy0yLjgyOG0zLjg5LTEwLjI1MiA2LjM0NiA2LjM0NmEuNS41IDAgMCAxLS4yNzcuODQ4bC0xLjQ3NC4yMy01LjY1Ni01LjY1Ni4yMTItMS40ODVhLjUuNSAwIDAgMSAuODQ4LS4yODMiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0xMi4xMjEgNC4yMjIgNS42NTcgNS42NTctLjcwNyA2LjM2NGMtNi4xMjggMS40MTQtOS43ODIgMi40NzUtMTMuMDggNS4zMDNMMi41OTQgMjAuMTVjMy43MjItMy4zMzEgNy45OTUtNC4zMjggMTIuNjQzLTUuNTJsLjQ0Ni00LjAxOC00LjI5Ny00LjI5Ny00LjAxOC40NDZjLTEuMTkyIDQuNjQ4LTIuMTg5IDguOTItNS41MiAxMi42NDNMLjQ1NCAxOC4wMWMyLjgyOC0zLjMgMy44OS02Ljk1MyA1LjMwMy0xMy4wODF6bS0xLjQxNCA3LjA3QTIgMiAwIDAgMSA3Ljg4IDE0LjEyYTIgMiAwIDEgMSAyLjgyNy0yLjgyOG0zLjg5LTEwLjI1MiA2LjM0NiA2LjM0NmEuNS41IDAgMCAxLS4yNzcuODQ4bC0xLjQ3NC4yMy01LjY1Ni01LjY1Ni4yMTItMS40ODVhLjUuNSAwIDAgMSAuODQ4LS4yODMiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}button[id^=drawing-tool-display]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNNS44MyAxOEEzLjAwMSAzLjAwMSAwIDEgMSAyIDE0LjE3VjUuODNBMy4wMDEgMy4wMDEgMCAxIDEgNS44MyAyaDguMzRBMy4wMDEgMy4wMDEgMCAxIDEgMTggNS44M3Y4LjM0QTMuMDAxIDMuMDAxIDAgMSAxIDE0LjE3IDE4em0wLTJoOC4zNEEzIDMgMCAwIDEgMTYgMTQuMTdWNS44M0EzIDMgMCAwIDEgMTQuMTcgNEg1LjgzQTMgMyAwIDAgMSA0IDUuODN2OC4zNEEzIDMgMCAwIDEgNS44MyAxNk0zIDRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTE0IDBhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTAgMTRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyTTMgMThhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNNS44MyAxOEEzLjAwMSAzLjAwMSAwIDEgMSAyIDE0LjE3VjUuODNBMy4wMDEgMy4wMDEgMCAxIDEgNS44MyAyaDguMzRBMy4wMDEgMy4wMDEgMCAxIDEgMTggNS44M3Y4LjM0QTMuMDAxIDMuMDAxIDAgMSAxIDE0LjE3IDE4em0wLTJoOC4zNEEzIDMgMCAwIDEgMTYgMTQuMTdWNS44M0EzIDMgMCAwIDEgMTQuMTcgNEg1LjgzQTMgMyAwIDAgMSA0IDUuODN2OC4zNEEzIDMgMCAwIDEgNS44MyAxNk0zIDRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTE0IDBhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTAgMTRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyTTMgMThhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyIi8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-tooltip]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTEuMjQ2IDExSDQuNzU0bC0yIDVILjZMNyAwaDJsNi40IDE2aC0yLjE1NHptLS44LTJMOCAyLjg4NSA1LjU1NCA5ek0yMSA4LjUzNVY4aDJ2OGgtMnYtLjUzNWE0IDQgMCAxIDEgMC02LjkzTTE5IDE0YTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTEuMjQ2IDExSDQuNzU0bC0yIDVILjZMNyAwaDJsNi40IDE2aC0yLjE1NHptLS44LTJMOCAyLjg4NSA1LjU1NCA5ek0yMSA4LjUzNVY4aDJ2OGgtMnYtLjUzNWE0IDQgMCAxIDEgMC02LjkzTTE5IDE0YTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNCIvPjwvc3ZnPg==) center no-repeat}button[id^=drawing-tool-remove]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01IDJWMGgxMHYyaDV2MmgtMnYxNWExIDEgMCAwIDEtMSAxSDNhMSAxIDAgMCAxLTEtMVY0SDBWMnpNNCA0djE0aDEyVjR6bTMgM2gydjhIN3ptNCAwaDJ2OGgtMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01IDJWMGgxMHYyaDV2MmgtMnYxNWExIDEgMCAwIDEtMSAxSDNhMSAxIDAgMCAxLTEtMVY0SDBWMnpNNCA0djE0aDEyVjR6bTMgM2gydjhIN3ptNCAwaDJ2OGgtMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-icon-elevation:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIyIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xMy43NCAxOS44M0gyLjUzTDcuODMgOC42bDMuODUgNy4wNyAxLjcyLS45NC0zLjE2LTUuODEgMi43NC01LjczIDQuMzYgOC41OWMuNTgtLjMgMS4yMS0uNTEgMS44OC0uNjRMMTMuODMuNTRjLS4xNy0uMzMtLjUyLS41Mi0uODktLjU0LS4zNyAwLS43MS4yMi0uODcuNTZMOS4wOSA2LjhsLS40NS0uODNjLS4xOC0uMzItLjUzLS41MS0uODktLjUxLS4zNy4wMS0uNy4yMy0uODYuNTZMLjA5IDIwLjM5YS45ODIuOTgyIDAgMCAwIC44OSAxLjRIMTQuNmE3LjIgNy4yIDAgMCAxLS44Ni0xLjk2Ii8+PHBhdGggZD0iTTE2LjQ4IDEzLjY5djEuNTRoNC45MWwtNS41NiA1LjU1LS4wNy4wNyAxLjA4IDEuMDkgNS42My01LjYzdjQuOTFIMjR2LTcuNTN6Ii8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyNHYyMS45NEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIyIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xMy43NCAxOS44M0gyLjUzTDcuODMgOC42bDMuODUgNy4wNyAxLjcyLS45NC0zLjE2LTUuODEgMi43NC01LjczIDQuMzYgOC41OWMuNTgtLjMgMS4yMS0uNTEgMS44OC0uNjRMMTMuODMuNTRjLS4xNy0uMzMtLjUyLS41Mi0uODktLjU0LS4zNyAwLS43MS4yMi0uODcuNTZMOS4wOSA2LjhsLS40NS0uODNjLS4xOC0uMzItLjUzLS41MS0uODktLjUxLS4zNy4wMS0uNy4yMy0uODYuNTZMLjA5IDIwLjM5YS45ODIuOTgyIDAgMCAwIC44OSAxLjRIMTQuNmE3LjIgNy4yIDAgMCAxLS44Ni0xLjk2Ii8+PHBhdGggZD0iTTE2LjQ4IDEzLjY5djEuNTRoNC45MWwtNS41NiA1LjU1LS4wNy4wNyAxLjA4IDEuMDkgNS42My01LjYzdjQuOTFIMjR2LTcuNTN6Ii8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyNHYyMS45NEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==) center no-repeat}[id^=GPelevationPathPanelInfo]{float:left;left:0;position:absolute;top:0}[id^=GPelevationPathPanel]{height:unset}[id^=GPelevationPathPanelInfo]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDUuMjkyIDUuMjkyIj48ZyBzdHlsZT0ic3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSI+PGNpcmNsZSBjeD0iMTA0LjQ3MSIgY3k9IjQyLjY2NyIgcj0iMi40NDciIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9Ii4zOTciIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIvPjwvZz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTA0Ljk3NiA0My45OWgtMS4wMzR2LS4xNzZoLjA1NWEuMzMuMzMgMCAwIDAgLjE2MS0uMDMuMTMuMTMgMCAwIDAgLjA2Mi0uMDg2IDEgMSAwIDAgMCAuMDEyLS4xNjJ2LS41NjVhLjcuNyAwIDAgMC0uMDE1LS4xNjhxLS4wMTQtLjA1LS4wNzQtLjA3M2EuNy43IDAgMCAwLS4yMDEtLjAyNXYtLjE3NWwuNzgtLjE2NHYxLjE3cTAgLjE2LjA0LjIyLjA0MS4wNTkuMjE0LjA1OXptLS4yMTUtMi4zNjlhLjI3LjI3IDAgMCAxLS4wOC4xOTYuMjcuMjcgMCAwIDEtLjE5Ni4wOC4yNy4yNyAwIDAgMS0uMTk1LS4wODIuMjcyLjI3MiAwIDAgMS0uMDAxLS4zOS4yNy4yNyAwIDAgMSAuMTk2LS4wODFxLjExNiAwIC4xOTcuMDguMDguMDguMDguMTk4eiIgc3R5bGU9ImZpbGw6IzAwMDE5MTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6LjI2NDU4MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDUuMjkyIDUuMjkyIj48ZyBzdHlsZT0ic3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSI+PGNpcmNsZSBjeD0iMTA0LjQ3MSIgY3k9IjQyLjY2NyIgcj0iMi40NDciIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9Ii4zOTciIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIvPjwvZz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTA0Ljk3NiA0My45OWgtMS4wMzR2LS4xNzZoLjA1NWEuMzMuMzMgMCAwIDAgLjE2MS0uMDMuMTMuMTMgMCAwIDAgLjA2Mi0uMDg2IDEgMSAwIDAgMCAuMDEyLS4xNjJ2LS41NjVhLjcuNyAwIDAgMC0uMDE1LS4xNjhxLS4wMTQtLjA1LS4wNzQtLjA3M2EuNy43IDAgMCAwLS4yMDEtLjAyNXYtLjE3NWwuNzgtLjE2NHYxLjE3cTAgLjE2LjA0LjIyLjA0MS4wNTkuMjE0LjA1OXptLS4yMTUtMi4zNjlhLjI3LjI3IDAgMCAxLS4wOC4xOTYuMjcuMjcgMCAwIDEtLjE5Ni4wOC4yNy4yNyAwIDAgMS0uMTk1LS4wODIuMjcyLjI3MiAwIDAgMS0uMDAxLS4zOS4yNy4yNyAwIDAgMSAuMTk2LS4wODFxLjExNiAwIC4xOTcuMDguMDguMDguMDguMTk4eiIgc3R5bGU9ImZpbGw6IzAwMDE5MTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6LjI2NDU4MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSIvPjwvc3ZnPg==) center no-repeat}[id^=GPelevationPathProfil]>#profileElevationByDefault>svg{transform:translateY(1rem)}[id^=GPelevationPathProfil]{height:150px;width:300px}.GPelevationPathProfilWrapper{padding:0 2rem}div[id^=GPelevationPathInformationsContainer]{display:grid;grid-template-columns:50% 50%;padding:0 2rem 1rem;width:calc(300px + 4rem)}.GPelevationPathInformations{display:flex;flex-wrap:wrap;font-size:13px;gap:0 .25rem;margin:0}.GPelevationPathInformations>span{white-space:nowrap}@media (max-width:576px){#GPelevationPathProfil,div[id^=GPelevationPathInformationsContainer]{margin:auto}}.gpf-btn-icon-getfeatureinfo:after,button[id^=GPgetFeatureInfoPicto-][aria-pressed=true]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIyMyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDIzIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik05Ljg2IDE3LjRjMC0uMjguMDItLjU1LjA0LS44MmwtMi41LTEuMjVWMi40M2w0LjY5IDIuMzV2Ni43YTkuMiA5LjIgMCAwIDEgMS45OS0xLjdWNC43MkwxOCAzLjA0di4xOWgtLjAxdjUuMjJhOC43NjggOC43NjggMCAwIDEgMi4wMS4wNFYuNzZjMC0uMDgtLjAyLS4xNi0uMDUtLjI0YS41LjUgMCAwIDAtLjE3LS4xOC42LjYgMCAwIDAtLjIzLS4wOGMtLjA4IDAtLjE3IDAtLjI0LjA0TDEzLjAxIDNsLTYtMy03IDN2MTYuNjFjLS4wMS4wOCAwIC4xNi4wNS4yNC4wNC4wNy4xLjE0LjE2LjE4cy4xNS4wNy4yMy4wOGMuMDggMCAuMTcgMCAuMjQtLjA0bDYuMy0yLjcgMi45OSAxLjVjLS4wOC0uNDgtLjEzLS45Ni0uMTMtMS40NnptLTQuNDUtMS41M0wyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTkuODMgMjAuNHYyaC0ydi0yem0tLjU0LTcuOTdjMS44My4yNCAzLjE1IDEuODYgMy4wMyAzLjdhMy41IDMuNSAwIDAgMS0zLjQ5IDMuMjdoLTF2LTJoMWMuNzkgMCAxLjQ0LS42MSAxLjUtMS40LjA1LS43OS0uNTItMS40OC0xLjMtMS41OS0uNzgtLjEtMS41MS40Mi0xLjY3IDEuMTlsLTEuOTYtLjM5YTMuNDg2IDMuNDg2IDAgMCAxIDMuODktMi43OCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyMi4zM3YyMi40SDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIyMyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDIzIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik05Ljg2IDE3LjRjMC0uMjguMDItLjU1LjA0LS44MmwtMi41LTEuMjVWMi40M2w0LjY5IDIuMzV2Ni43YTkuMiA5LjIgMCAwIDEgMS45OS0xLjdWNC43MkwxOCAzLjA0di4xOWgtLjAxdjUuMjJhOC43NjggOC43NjggMCAwIDEgMi4wMS4wNFYuNzZjMC0uMDgtLjAyLS4xNi0uMDUtLjI0YS41LjUgMCAwIDAtLjE3LS4xOC42LjYgMCAwIDAtLjIzLS4wOGMtLjA4IDAtLjE3IDAtLjI0LjA0TDEzLjAxIDNsLTYtMy03IDN2MTYuNjFjLS4wMS4wOCAwIC4xNi4wNS4yNC4wNC4wNy4xLjE0LjE2LjE4cy4xNS4wNy4yMy4wOGMuMDggMCAuMTcgMCAuMjQtLjA0bDYuMy0yLjcgMi45OSAxLjVjLS4wOC0uNDgtLjEzLS45Ni0uMTMtMS40NnptLTQuNDUtMS41M0wyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTkuODMgMjAuNHYyaC0ydi0yem0tLjU0LTcuOTdjMS44My4yNCAzLjE1IDEuODYgMy4wMyAzLjdhMy41IDMuNSAwIDAgMS0zLjQ5IDMuMjdoLTF2LTJoMWMuNzkgMCAxLjQ0LS42MSAxLjUtMS40LjA1LS43OS0uNTItMS40OC0xLjMtMS41OS0uNzgtLjEtMS41MS40Mi0xLjY3IDEuMTlsLTEuOTYtLjM5YTMuNDg2IDMuNDg2IDAgMCAxIDMuODktMi43OCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyMi4zM3YyMi40SDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+) center no-repeat}.gpf-btn-icon-isocurve:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGNUY1RjUiIGQ9Ik04IDkuOVYxNWMwIC41NS40NSAxIDEgMXMxLS40NSAxLTFWOS45QTQuOTk3IDQuOTk3IDAgMCAwIDEzLjkgNCA1LjAwNCA1LjAwNCAwIDAgMCA4IC4xIDQuOTk3IDQuOTk3IDAgMCAwIDQuMSA2IDUuMDEgNS4wMSAwIDAgMCA4IDkuOU05IDJjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zbTQuMjEgMTAuNDJjLS41NS0uMTItMS4wOS4yNC0xLjIxLjc5cy4yNCAxLjA5Ljc5IDEuMjFDMTUuMDYgMTQuODcgMTYgMTUuNjggMTYgMTZjMCAuNTgtMi40NSAyLTcgMnMtNy0xLjQyLTctMmMwLS4zMi45NC0xLjEzIDMuMjEtMS42Mi41NS0uMTIuOTEtLjY2Ljc5LTEuMjFzLS42Ni0uOTEtMS4yMS0uNzlDMS43NSAxMy4wOCAwIDE0LjM5IDAgMTZjMCAyLjYzIDQuNTMgNCA5IDRzOS0xLjM3IDktNGMwLTEuNjEtMS43NS0yLjkyLTQuNzktMy41OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTh2MjBIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGNUY1RjUiIGQ9Ik04IDkuOVYxNWMwIC41NS40NSAxIDEgMXMxLS40NSAxLTFWOS45QTQuOTk3IDQuOTk3IDAgMCAwIDEzLjkgNCA1LjAwNCA1LjAwNCAwIDAgMCA4IC4xIDQuOTk3IDQuOTk3IDAgMCAwIDQuMSA2IDUuMDEgNS4wMSAwIDAgMCA4IDkuOU05IDJjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zbTQuMjEgMTAuNDJjLS41NS0uMTItMS4wOS4yNC0xLjIxLjc5cy4yNCAxLjA5Ljc5IDEuMjFDMTUuMDYgMTQuODcgMTYgMTUuNjggMTYgMTZjMCAuNTgtMi40NSAyLTcgMnMtNy0xLjQyLTctMmMwLS4zMi45NC0xLjEzIDMuMjEtMS42Mi41NS0uMTIuOTEtLjY2Ljc5LTEuMjFzLS42Ni0uOTEtMS4yMS0uNzlDMS43NSAxMy4wOCAwIDE0LjM5IDAgMTZjMCAyLjYzIDQuNTMgNCA5IDRzOS0xLjM3IDktNGMwLTEuNjEtMS43NS0yLjkyLTQuNzktMy41OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTh2MjBIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat}.gpf-flex-isocurve{justify-content:unset}.gpf-btn-icon-isocurve-reset{background-position:-29px}[id^=GPisochronPanel-] p.gpf-label{margin-bottom:.2rem;margin-top:1rem}[id^=GPisochronPanel-] p.gpf-label:first-child{margin-top:0}div[id^=GPisochronChoice]{gap:1em;justify-content:left}div[id^=GPisochronTransportChoice]>div{margin-top:.5rem}div[id^=GPisochronValueChron],div[id^=GPisochronValueDist]{width:281px}.GPflexInput>input[id^=GPisochronValueChronInput2]{margin-top:0}.GPisoExclusionsOptions{gap:1rem}[id^=GPisochronForm-]>.GPpanelFooter{position:unset}[id^=GPisochronReset-]{min-width:2.5rem}[id^=GPisochronSubmit-]{width:80%}.gpf-btn-icon-import:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDQuNzYyIDUuMjkyIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTA1LjI2NSAzMDUuMTMzaC0yLjY0NnY0LjIzNGgzLjcwNHYtMy4xNzVoLTEuMDU4em0tMy4xNzUtLjI2N2MwLS4xNDUuMTE4LS4yNjIuMjY0LS4yNjJoMy4xNzVsMS4zMjMgMS4zMjN2My43MDJhLjI2NS4yNjUgMCAwIDEtLjI2My4yNjdoLTQuMjM3YS4yNjUuMjY1IDAgMCAxLS4yNjItLjI2MnptMi42NDUgMi4zODR2MS4wNThoLS41Mjl2LTEuMDU4aC0uNzkzbDEuMDU4LTEuMDU4IDEuMDU4IDEuMDU4eiIgc3R5bGU9InN0cm9rZS13aWR0aDouMjY0NTgzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAyLjA5IC0zMDQuNjA0KSIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDQuNzYyIDUuMjkyIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTA1LjI2NSAzMDUuMTMzaC0yLjY0NnY0LjIzNGgzLjcwNHYtMy4xNzVoLTEuMDU4em0tMy4xNzUtLjI2N2MwLS4xNDUuMTE4LS4yNjIuMjY0LS4yNjJoMy4xNzVsMS4zMjMgMS4zMjN2My43MDJhLjI2NS4yNjUgMCAwIDEtLjI2My4yNjdoLTQuMjM3YS4yNjUuMjY1IDAgMCAxLS4yNjItLjI2MnptMi42NDUgMi4zODR2MS4wNThoLS41Mjl2LTEuMDU4aC0uNzkzbDEuMDU4LTEuMDU4IDEuMDU4IDEuMDU4eiIgc3R5bGU9InN0cm9rZS13aWR0aDouMjY0NTgzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAyLjA5IC0zMDQuNjA0KSIvPjwvc3ZnPg==) center no-repeat}.gpf-panel__items_layerimport{border-bottom:1px solid var(--grey-900-175);color:var(--text-action-high-blue-france);height:auto;list-style-type:none}div[id^=GPlayerSwitcher-]{height:44px}button[id^=GPshowLayersListPicto]{width:40px}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{width:350px}.GPlayerSwitcher_layer{background-color:var(--background-overlap-grey);padding-right:40px}.gpf-btn-icon-layerswitcher:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMyIgZD0ibTIyIDguNTUzLTkuODYgNS41NTItOS44Ni01LjU1MkwxMi4xNCAzek0zLjE3OCAxNC45ODYgMiAxNS42NWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4zIiBkPSJNMy4xNzggMTEuNDM3IDIgMTIuMWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMyIgZD0ibTIyIDguNTUzLTkuODYgNS41NTItOS44Ni01LjU1MkwxMi4xNCAzek0zLjE3OCAxNC45ODYgMiAxNS42NWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4zIiBkPSJNMy4xNzggMTEuNDM3IDIgMTIuMWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-icon-ls-visibility{box-shadow:none}.gpf-btn-icon-ls-visibility:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTIuMjE4IDRjNS4wOTIgMCA5LjMyOSAzLjY2NCAxMC4yMTcgOC41LS44ODggNC44MzYtNS4xMjUgOC41LTEwLjIxNyA4LjVTMi44ODggMTcuMzM2IDIgMTIuNUMyLjg4OCA3LjY2NCA3LjEyNSA0IDEyLjIxOCA0bTAgMTUuMTExYzQgMCA3LjQyMy0yLjc4NCA4LjI5LTYuNjExYTguNTA0IDguNTA0IDAgMCAwLTE2LjU4IDAgOC41MDQgOC41MDQgMCAwIDAgOC4yOSA2LjYxMW0wLTIuMzYxYTQuMjUgNC4yNSAwIDEgMSAwLTguNSA0LjI1IDQuMjUgMCAwIDEgMCA4LjVtMC0xLjg4OWEyLjM2MSAyLjM2MSAwIDEgMCAwLTQuNzIyIDIuMzYxIDIuMzYxIDAgMCAwIDAgNC43MjIiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTIuMjE4IDRjNS4wOTIgMCA5LjMyOSAzLjY2NCAxMC4yMTcgOC41LS44ODggNC44MzYtNS4xMjUgOC41LTEwLjIxNyA4LjVTMi44ODggMTcuMzM2IDIgMTIuNUMyLjg4OCA3LjY2NCA3LjEyNSA0IDEyLjIxOCA0bTAgMTUuMTExYzQgMCA3LjQyMy0yLjc4NCA4LjI5LTYuNjExYTguNTA0IDguNTA0IDAgMCAwLTE2LjU4IDAgOC41MDQgOC41MDQgMCAwIDAgOC4yOSA2LjYxMW0wLTIuMzYxYTQuMjUgNC4yNSAwIDEgMSAwLTguNSA0LjI1IDQuMjUgMCAwIDEgMCA4LjVtMC0xLjg4OWEyLjM2MSAyLjM2MSAwIDEgMCAwLTQuNzIyIDIuMzYxIDIuMzYxIDAgMCAwIDAgNC43MjIiLz48L3N2Zz4=) center no-repeat}button[id^=GPvisibilityPicto_ID_][aria-pressed=false]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjQ0FDREMxIiBkPSJNMTcuODgzIDE5LjI5N0ExMC45NSAxMC45NSAwIDAgMSAxMiAyMWMtNS4zOTIgMC05Ljg3OC0zLjg4LTEwLjgxOC05QTExIDExIDAgMCAxIDQuNTIgNS45MzVMMS4zOTQgMi44MDhsMS40MTQtMS40MTQgMTkuNzk5IDE5Ljc5OS0xLjQxNCAxLjQxNHpNNS45MzYgNy4zNUE4Ljk3IDguOTcgMCAwIDAgMy4yMjMgMTJhOS4wMDUgOS4wMDUgMCAwIDAgMTMuMjAxIDUuODM5bC0yLjAyOC0yLjAyOUE0LjUgNC41IDAgMCAxIDguMTkgOS42MDR6bTYuOTc4IDYuOTc4LTMuMjQyLTMuMjQxYTIuNSAyLjUgMCAwIDAgMy4yNDEgMy4yNDFtNy44OTMgMi4yNjUtMS40MzEtMS40MzFBOC45IDguOSAwIDAgMCAyMC43NzggMTIgOS4wMDUgOS4wMDUgMCAwIDAgOS41NTIgNS4zMzhMNy45NzQgMy43NkM5LjIyMSAzLjI3IDEwLjU4IDMgMTIgM2M1LjM5MiAwIDkuODc4IDMuODggMTAuODE5IDlhMTAuOTUgMTAuOTUgMCAwIDEtMi4wMTIgNC41OTNtLTkuMDg0LTkuMDg0UTExLjg2IDcuNSAxMiA3LjVhNC41IDQuNSAwIDAgMSA0LjQ5MiA0Ljc3OHoiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjQ0FDREMxIiBkPSJNMTcuODgzIDE5LjI5N0ExMC45NSAxMC45NSAwIDAgMSAxMiAyMWMtNS4zOTIgMC05Ljg3OC0zLjg4LTEwLjgxOC05QTExIDExIDAgMCAxIDQuNTIgNS45MzVMMS4zOTQgMi44MDhsMS40MTQtMS40MTQgMTkuNzk5IDE5Ljc5OS0xLjQxNCAxLjQxNHpNNS45MzYgNy4zNUE4Ljk3IDguOTcgMCAwIDAgMy4yMjMgMTJhOS4wMDUgOS4wMDUgMCAwIDAgMTMuMjAxIDUuODM5bC0yLjAyOC0yLjAyOUE0LjUgNC41IDAgMCAxIDguMTkgOS42MDR6bTYuOTc4IDYuOTc4LTMuMjQyLTMuMjQxYTIuNSAyLjUgMCAwIDAgMy4yNDEgMy4yNDFtNy44OTMgMi4yNjUtMS40MzEtMS40MzFBOC45IDguOSAwIDAgMCAyMC43NzggMTIgOS4wMDUgOS4wMDUgMCAwIDAgOS41NTIgNS4zMzhMNy45NzQgMy43NkM5LjIyMSAzLjI3IDEwLjU4IDMgMTIgM2M1LjM5MiAwIDkuODc4IDMuODggMTAuODE5IDlhMTAuOTUgMTAuOTUgMCAwIDEtMi4wMTIgNC41OTNtLTkuMDg0LTkuMDg0UTExLjg2IDcuNSAxMiA3LjVhNC41IDQuNSAwIDAgMSA0LjQ5MiA0Ljc3OHoiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-ls-remove{box-shadow:none}.gpf-btn-icon-ls-remove:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNNyA5aDEwbC0xLjQyOCAxMC44ODlIOC40Mjh6Ii8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNiA2aDEyIi8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTEwLjUgNC41aDMiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNNyA5aDEwbC0xLjQyOCAxMC44ODlIOC40Mjh6Ii8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNiA2aDEyIi8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTEwLjUgNC41aDMiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-ls-collapse{box-shadow:none}.gpf-btn-icon-ls-collapse:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;transition:transform .2s ease-out 0s}.gpf-btn-icon-ls-collapse[aria-pressed=true]:after{box-shadow:none;transform:rotate(180deg)}.gpf-btn-icon-ls-dragndrop{box-shadow:none}.gpf-btn-icon-ls-dragndrop:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAxMVY4bDQgNC00IDR2LTNoLTV2NWgzbC00IDQtNC00aDN2LTVINnYzbC00LTQgNC00djNoNVY2SDhsNC00IDQgNGgtM3Y1eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAxMVY4bDQgNC00IDR2LTNoLTV2NWgzbC00IDQtNC00aDN2LTVINnYzbC00LTQgNC00djNoNVY2SDhsNC00IDQgNGgtM3Y1eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{height:56px;max-height:56px}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools>.GPlayerInfo{visibility:visible}button[id^=GPshowAdvancedTools_ID_][aria-pressed=false]{box-shadow:none}button[id^=GPshowAdvancedTools_ID_][aria-pressed="false "]+.GPlayerAdvancedTools>.GPlayerInfo{visibility:hidden}button[id^=GPshowAdvancedTools_ID_]{position:absolute;right:16px;top:12px}div[id^=GPbasicTools_ID_]{align-items:center;display:flex;flex-direction:row-reverse;flex-wrap:nowrap;justify-content:flex-end}div[id^=GPadvancedTools_ID_]{align-content:center;align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;height:inherit;justify-content:space-around}.gpf-btn-header{height:26px;position:absolute;width:26px;z-index:2}.gpf-btn-icon-layers{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48ZyBzdHJva2U9IiMxNTE1OTYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMiIgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBkPSJNMTUuMTkzIDUuNDQ4IDguMSA5LjQ0IDEuMDA5IDUuNDQ4IDguMSAxLjQ1NHpNMS42NTUgMTAuMDc1bC0uODQ3LjQ3OCA3LjA5MSAzLjk5MyA3LjA5Mi0zLjk5My0uODQ4LS40NzgiLz48cGF0aCBkPSJNMS42NTUgNy41MjIuODA4IDhsNy4wOTEgMy45OTRMMTQuOTkxIDhsLS44NDgtLjQ3OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTZ2MTZIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:auto auto}.gpf-panel__body_ls{max-height:300px!important;overflow:auto}.gpf-panel__title_ls{color:#101092;font-size:1rem;font-weight:400;margin:0;padding:12px 15px;position:relative;right:-16px}.gpf-panel__header_ls{align-content:center;align-items:center;background:#e3e3fd;display:flex;flex-direction:row;height:48px}.gpf-btn-icon-ls-info{box-shadow:none}.gpf-btn-icon-ls-info:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI5LjI1IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTMuOTEgMTYuOTk4aC0zLjkwOHYtLjY2MmguMjA4cS40MTggMCAuNjEtLjExNGEuNDguNDggMCAwIDAgLjIzMy0uMzI1cS4wNDQtLjIxLjA0My0uNjExdi0yLjEzN3EwLS40NDYtLjA1NS0uNjM0LS4wNTQtLjE4Ni0uMjgxLS4yNzUtLjIyNy0uMDg2LS43Ni0uMDk0di0uNjZsMi45NTItLjYyMXY0LjQyMXEwIC42MDUuMTUxLjgyOC4xNTEuMjI1LjgwNi4yMjVWMTd6bS0uODEyLTguOTVxMCAuNDMtLjMwNi43NC0uMzA3LjMwNS0uNzM3LjMwNi0uNDI3IDAtLjczNy0uMzE0YTEgMSAwIDAgMS0uMzEzLS43M2MwLS4yNzcuMTAzLS41MzUuMzA4LS43NDFxLjMxLS4zMDkuNzQyLS4zMDljLjI4OCAwIC41NC4xLjc0MS4zMDJxLjMwMi4zMDEuMzAyLjc0OHoiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI5LjI1IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTMuOTEgMTYuOTk4aC0zLjkwOHYtLjY2MmguMjA4cS40MTggMCAuNjEtLjExNGEuNDguNDggMCAwIDAgLjIzMy0uMzI1cS4wNDQtLjIxLjA0My0uNjExdi0yLjEzN3EwLS40NDYtLjA1NS0uNjM0LS4wNTQtLjE4Ni0uMjgxLS4yNzUtLjIyNy0uMDg2LS43Ni0uMDk0di0uNjZsMi45NTItLjYyMXY0LjQyMXEwIC42MDUuMTUxLjgyOC4xNTEuMjI1LjgwNi4yMjVWMTd6bS0uODEyLTguOTVxMCAuNDMtLjMwNi43NC0uMzA3LjMwNS0uNzM3LjMwNi0uNDI3IDAtLjczNy0uMzE0YTEgMSAwIDAgMS0uMzEzLS43M2MwLS4yNzcuMTAzLS41MzUuMzA4LS43NDFxLjMxLS4zMDkuNzQyLS4zMDljLjI4OCAwIC41NC4xLjc0MS4zMDJxLjMwMi4zMDEuMzAyLjc0OHoiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-ls-extent{box-shadow:none}.gpf-btn-icon-ls-extent:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTQuNjA3IDE2LjAyIDYgNy40MTUgNy40MTQgNmw4LjYwNyA4LjYwN1Y3LjAyaDJ2MTFoLTExdi0yeiIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTQuNjA3IDE2LjAyIDYgNy40MTUgNy40MTQgNmw4LjYwNyA4LjYwN1Y3LjAyaDJ2MTFoLTExdi0yeiIvPjwvc3ZnPg==) center no-repeat}[id^=GPlayerInfoPanel]{height:auto;position:absolute}.gpf-label-name{line-height:28px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 96px)}.GPlayerDragNDrop{cursor:move}.gpf-range__output{width:35px}.GPlayerOpacity.fr-range--sm[data-fr-js-range]:after,.GPlayerOpacity.fr-range--sm[data-fr-js-range]:before{top:25%}div[id^=GPlayerInfoContent]{width:350px}.gpf-btn-icon-close.GPlayersPanelClose{right:0;top:0}.gpf-btn-icon-close.GPlayersPanelClose:after{margin-left:-.125rem}.GPlayerAdvancedToolsContextual{display:none}.GPlayerAdvancedToolsContextual:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSI0IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMTggNCI+PHBhdGggZmlsbD0iIzAwMDA5MSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41ODMuMTY3QTEuODQgMS44NCAwIDAgMCAuNzUgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzMyAxLjgzM0ExLjg0IDEuODQgMCAwIDAgNC40MTcgMiAxLjg0IDEuODQgMCAwIDAgMi41ODMuMTY3bTEyLjgzNCAwQTEuODQgMS44NCAwIDAgMCAxMy41ODMgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzNCAxLjgzM0ExLjg0IDEuODQgMCAwIDAgMTcuMjUgMiAxLjg0IDEuODQgMCAwIDAgMTUuNDE3LjE2N005IC4xNjdBMS44NCAxLjg0IDAgMCAwIDcuMTY3IDJjMCAxLjAwOC44MjUgMS44MzMgMS44MzMgMS44MzNBMS44NCAxLjg0IDAgMCAwIDEwLjgzMyAyIDEuODQgMS44NCAwIDAgMCA5IC4xNjciIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSI0IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMTggNCI+PHBhdGggZmlsbD0iIzAwMDA5MSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41ODMuMTY3QTEuODQgMS44NCAwIDAgMCAuNzUgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzMyAxLjgzM0ExLjg0IDEuODQgMCAwIDAgNC40MTcgMiAxLjg0IDEuODQgMCAwIDAgMi41ODMuMTY3bTEyLjgzNCAwQTEuODQgMS44NCAwIDAgMCAxMy41ODMgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzNCAxLjgzM0ExLjg0IDEuODQgMCAwIDAgMTcuMjUgMiAxLjg0IDEuODQgMCAwIDAgMTUuNDE3LjE2N005IC4xNjdBMS44NCAxLjg0IDAgMCAwIDcuMTY3IDJjMCAxLjAwOC44MjUgMS44MzMgMS44MzMgMS44MzNBMS44NCAxLjg0IDAgMCAwIDEwLjgzMyAyIDEuODQgMS44NCAwIDAgMCA5IC4xNjciIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}.GPlayerAdvancedToolsContextual[aria-pressed=true]{background-color:var(--hover-tint);overflow:visible}.GPlayerSwitcher_layer:has(.GPlayerAdvancedToolsContextual[aria-pressed=true]){overflow:visible}[id^=GPlayersList-] .GPpanelBody:has(.GPlayerAdvancedToolsContextual[aria-pressed=true]){overflow:visible}.GPlayerAdvancedTools:has(.GPlayerAdvancedToolsContextual[aria-pressed=true]){position:relative}.GPlayerAdvancedToolsContextual+div{background-color:var(--background-overlap-grey);border-radius:6px;box-shadow:0 0 10px 0 rgba(0,0,0,.15);display:none;flex-direction:column;flex-wrap:wrap;font-size:13px;gap:6px;padding:14px 6px;z-index:12}.GPlayerAdvancedToolsContextual+div>button{padding-left:2rem}.GPlayerAdvancedToolsContextual+div>button[visibility=hidden]{display:none}.GPlayerAdvancedToolsContextual+div>button:after{mask-position:left}.GPlayerAdvancedToolsContextual[aria-pressed=true]+div{display:flex;position:absolute;right:0;top:calc(2.5rem + 8px)}@media (max-width:576px){.GPlayerAdvancedTools{width:calc(100% + 40px)}.GPlayerAdvancedTools>.GPlayerExtent,.GPlayerAdvancedTools>.GPlayerInfo,.GPlayerAdvancedTools>.GPlayerRemove{display:none}.GPlayerAdvancedToolsContextual{display:inline-flex}[id^=GPopacity_ID_]{flex-grow:0.6}}.gpf-btn-icon-pointer:after{background-color:var(--text-inverted-blue-france);content:"";height:100%;left:0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjAzIDE2LjAzMmE3LjM2IDcuMzYgMCAwIDEtNi42NjItNi42NjNILjY3YS42Ny42NyAwIDEgMSAwLTEuMzM4aC43QTcuMzY0IDcuMzY0IDAgMCAxIDguMDMgMS4zNjhWLjY3YS42Ny42NyAwIDEgMSAxLjMzOCAwdi43YTcuMzYgNy4zNiAwIDAgMSA2LjY2MyA2LjY2MmguNjk5YS42Ny42NyAwIDAgMSAwIDEuMzM4aC0uN2E3LjM2IDcuMzYgMCAwIDEtNi42NjIgNi42NjN2LjY5OWEuNjcuNjcgMCAwIDEtMS4zMzggMHpNOS4zNyA0LjY4NVYyLjcxNGE2LjAyNSA2LjAyNSAwIDAgMSA1LjMxNiA1LjMxN2gtMS45N2EuNjcuNjcgMCAwIDAgMCAxLjMzOGgxLjk3YTYuMDI1IDYuMDI1IDAgMCAxLTUuMzE3IDUuMzE3di0xLjk3YS42Ny42NyAwIDAgMC0xLjMzOCAwdjEuOTdBNi4wMjUgNi4wMjUgMCAwIDEgMi43MTQgOS4zN2gxLjk3YS42Ny42NyAwIDAgMCAwLTEuMzM4aC0xLjk3QTYuMDI2IDYuMDI2IDAgMCAxIDguMDMgMi43MTR2MS45N2EuNjcuNjcgMCAwIDAgMS4zMzggMCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjAzIDE2LjAzMmE3LjM2IDcuMzYgMCAwIDEtNi42NjItNi42NjNILjY3YS42Ny42NyAwIDEgMSAwLTEuMzM4aC43QTcuMzY0IDcuMzY0IDAgMCAxIDguMDMgMS4zNjhWLjY3YS42Ny42NyAwIDEgMSAxLjMzOCAwdi43YTcuMzYgNy4zNiAwIDAgMSA2LjY2MyA2LjY2MmguNjk5YS42Ny42NyAwIDAgMSAwIDEuMzM4aC0uN2E3LjM2IDcuMzYgMCAwIDEtNi42NjIgNi42NjN2LjY5OWEuNjcuNjcgMCAwIDEtMS4zMzggMHpNOS4zNyA0LjY4NVYyLjcxNGE2LjAyNSA2LjAyNSAwIDAgMSA1LjMxNiA1LjMxN2gtMS45N2EuNjcuNjcgMCAwIDAgMCAxLjMzOGgxLjk3YTYuMDI1IDYuMDI1IDAgMCAxLTUuMzE3IDUuMzE3di0xLjk3YS42Ny42NyAwIDAgMC0xLjMzOCAwdjEuOTdBNi4wMjUgNi4wMjUgMCAwIDEgMi43MTQgOS4zN2gxLjk3YS42Ny42NyAwIDAgMCAwLTEuMzM4aC0xLjk3QTYuMDI2IDYuMDI2IDAgMCAxIDguMDMgMi43MTR2MS45N2EuNjcuNjcgMCAwIDAgMS4zMzggMCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;position:absolute;top:0;width:100%}.gpf-btn-icon-pointer{border-top-right-radius:4px;min-width:2.5rem;position:relative}.GPlocationStageFlexInput:has(.GPlocationStageRemove)>.gpf-btn-icon-pointer{border-top-right-radius:0}.gpf-btn-icon-remove{height:2.5rem;width:2.5rem}.gpf-btn-icon-remove:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJtMTIgMTAuNiA0Ljk1LTQuOTYgMS40IDEuNEwxMy40MiAxMmw0Ljk2IDQuOTUtMS40IDEuNEwxMiAxMy40MmwtNC45NSA0Ljk2LTEuNC0xLjRMMTAuNTggMTIgNS42MyA3LjA1bDEuNC0xLjR6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJtMTIgMTAuNiA0Ljk1LTQuOTYgMS40IDEuNEwxMy40MiAxMmw0Ljk2IDQuOTUtMS40IDEuNEwxMiAxMy40MmwtNC45NSA0Ljk2LTEuNC0xLjRMMTAuNTggMTIgNS42MyA3LjA1bDEuNC0xLjR6Ii8+PC9zdmc+) center no-repeat}.gpf-btn-icon-add:after{height:2.5rem;-webkit-mask:url(data:image/png;base64,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) -51px center no-repeat;mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPwAAAAcCAYAAABF79LlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAyySURBVHic7Zx/bFXXfcA/33ufHZjtkKcNhkVVtqpVtGUszUhs3BEFJWo0KYRUCKMqUynY5t2HAZuxdRkqLM5Gl3bVTJ4JPN/nXyyVkDBpGCvTUKOkodmKYtpRJWukTKgr0jY7yeS3wGuKzLv3uz/uffbz8/v9nkFE7yMhP5977vkcR/7e7z3nexyoUaNGjRo1atSoUaPGHYzc7gnUqLEYRKPRVYZhHFfVRtd1u7u7u99bTF/btv5VyUDguOA2utD949F9i+orl8DtnkCNGouBYRg28ISIYJrmK8B9i+lzAqYt6BMgGLDovnIxyrnJtm21bVurPZlctHREtKUjcst8NT4RPJL2+XfvdJ+qfktV46r6YCXj1DJ8BukPskAgsKqzs/N/bud8apSHqraKyDmgEdi82D5RaVXRc0CjVNmnqt8C/tz/tgX4cbljFR3w0Wh0hWEYPcATqTbbti+LyLlAIDDQ0dHxYbmTyMYXvhJdkayf8Xx+CLZ0Ri6Lq+dmMAYuj/VU1XeriMViO1X1wcnJyV19fX1utj6qKrFYbAB4z7KsF2/xFO9obNteA7wkIleAzaFQ6KeL6WvbfnSNY7ovqeoVdd3Nl078SVV9qvrXzAU7VLjvVtTNtm23AyNAU44u11S1MxwOv1zJZFK0dL7Qjkpen6h0vjXWUxVfOouZ4f1gH8RbSg1PTk5amUHvB/tRYDegQE+1gr6/v39pQ0PD28Bn83Q7GQwGt23dutWp1NfW3r/UaQq8DZrbp5xcnWjedvp0+b7BwcE2EflL4I8WDK/6eDgcfrXcsbPR0nGkDYysPjH08beG91XFp6rPAn0ZzXtE5Fi5YxZcw/vBfgpoUtUzqjq7VhGRDSJyFrhbRMYHBwe3lDuRFH6wn8IL9jMqcz5V2YBwFrhbRcdbdwxU7LuVuK77eeb+m3c1Nze/qKqzD10/2I/hBTuAqOrvVMM9Pj5e39DQ8Ar5gx3g6Xg8vuAXuVTua++rd5rMV/IGO4Dw9NW7pyryiciPyBJ8AIZhfK2SsbNj5PS5jlTFp6oHWBjsAJtU9RlV/ZqqblfV9ar6G8WOmzfgo9HoCrzMLsAz4XB4czgc/mHqeigUuhAKhb4EHABEREZGR0eXFyvP5Atfia7wM7ugPDMx2rv50si+Wd+lsZ4LEyO9X1Lfp6IjD+wYKNt3q7Esaw+Qnq13xWKxWF9fn5GW2XelLqrq0NTU1N5quOPx+Bg5fkkzUdXOSn0NjcGifVTBB3wD+KeFQ+sXo9FoSxXGn49k94nwxQc7ByryqeqfAn+T4/LjwDeBvwXGgDeBD1T1h6r6VVU18087D7ZtHwa+rqpnwuFw3o0I27bPAptE5HAoFDqUr28uWjojh1G+DpyZGO3N63uoY+CsoJtE9fBbY/tK9h07dqxxyZIlC37+ZDJ5LfVZRO41TXMys09nZ+f1Un0p0tbne1JthmEMO44zIyLdaf2GpqamwrnW+aVg2/Zx0h4kRTBTV1f3qXL3ZVo6I8fR0nw3VT5V7r6MbdtJy7ICeSpH71iW9fvljJ2Nlo5IcmK0N5CrcqTwzqXR3rJ8qtoDRCqY3r/ixeF0touFXumf9L++UMgiIv0AqrqxpOmlo55PRQv6UDyfIWX5AoHAZDKZvJb5b55C9b1sfUZGRnLtLRRERDQUCvWQluld1+1axGBXSgt2gPqbN2++WY6vpSOiJQY7QH2daFk+n0SO9iv+1zW2bS+rYPwifXIFQGDN2lDZvnvLvC/FHwLfzZXps2b4XE9Ky7Ik/Xrm97n6FyLXk3JitFfSr2d+n6t/Mdi2fR2vZFMygUDg7kqyPHiZfmhoaEBV96S3u647/P777y/YzCuEbdvrVfU5EXm0knnlICEi5xOJxLb9+/f/CqC1I7Je0edgcXzAefO6s+3iac+XD9u2fw48APxfervruq11dXXTjuOMAesBgsFgoNINyZaOyM+dwJIHzOSN+T6R1jqS046as77V15sDpWxI+ns6MaCrkjkCO0TkRGZjrQ5/G0nfsEshIiWXXQYHB9uA74vI0qpMbCGNqrqloaFhGrBaOo60KXwfFs8HbEk2mdOAla/j+Ph4fTwez/b66riu+25XV1cCeNi2bRvYUmmw39feVw9k9TXeZb77xvGeBPDwQx0RW2BLqdUHEVFVtfBic3uWLq8C/+Z/rgOCwGeAdcBdaf1CwIkF4+eT27b9U+B+VX0kfbMuG9FodINhGD8ALluW9Qf5+uaipSPi+UQfSd+sy8a6riMbXNfzTYz2luy7XWt4WFB6y0bWkl0ubNt+g/knvRaLDy3LWtHSEbllvonR3hXFdPRf2dMz7ofBYLC5GuXFbKwN2csyMvyHq683N1dSXkzHfyX/e+CPMy5lLcup6jJgANjmN7nAp0Xkv9P75c3wIvI9Vb3fMIz9QN4A9PsAnMvXL69P9Xsqcr8gBX2uY+xHQMr07d69O+s6zEsEHqZpJioN7kyyBbuqDgEzIpJq62pubqavr6/YoF+TrVFEXr3nnns2xuPxparaJiLPA58vMNbGYDB4fuvWrY5t2+vxdoGL8qny6seJ+MYlwealhnOjTeB5tIBPZOPqayvPnz691fGWCVl9BTFN03ScebG2fHp6+u+AfeWMV4h655emw7xl8vJfNE5WzScijqp+FS+Lby2i/0equh34dbzDcQbejv5Yer+8m3aO4xzFO1TzlG3bf5FqzzxLH4vFDuBt8H1UV1d3tOifKgMzeddR4BrKUw91RGZ9mWfpW3dEDiCeb0albN+tJlewT01NhS3L2sv8kl1Xc3Oz3dfXV8zfO/xLlrZTiUTiqXg8fhV4W0TWJpPJhwuMc0FV743H45dt2/4ZXha/kHY9AaDIAp+InAoknKcamoJXzZs33haXtb92V6CgD9V7f9E0ebmlI/Iz1ey+YnBd95+zzKn32LFjZe3TFPSpmcVH74bu6vlExMHL8K8U2V+BMDDjNy3YAMyb4Xft2vXB4OBgp4iMA8/HYrF1wBFVL/b81/j9qvok4IrIjkqO2P7oO7s+aN0x0Kmi4wLPt3RG1qkrR/DP1q7rOrLBdYz96gW7C+y4k47Y2rb9YvpuPBC1LGu3iGhfXx+q2hOLxUzmdtW7Vq5cOUPuV/8UB/HOWK9MNZimebCxsfGoqqbaDgcCgZmsd6eNIyLpGfawYRiPua77GoB/XJWAKwcdQ+f5DJIHnSbzKLDSXyge/viGk9cncFDhTZlrOIwajyGeT3V2lz0vQ0NDa13XTdW+zwOPAvUAgUCgF69GXzVauyJr1SWr7+NfJavqE5Gkqn4ZOA1sAv6jQP//UtWX8Db9Ppd5vWD2CIfDL4tIO36mV9U3Zm/21uxPAh+pansoFDpT0k+ThbfGel4WtB0/04vM+VzX+EEqs6sh7ROjvRX7biUichnvQYWqDk1OTu7xn8qp6xoKhXYzl+lVRN4tNK5lWe+Ypvkw8B2/abqrq+uKqj6d0TWUb5xgMHgxs23ZsmUXgClVfd0wjG6Aiyf2vmOKM893cWT/FaAk36evNy/wrU785gVgCvT1gOF0Z7ltAY7jzFY6XNd9FtiRdrm3v7+/upuL7lxlxRV5FknzCb1t7dX1ichNvD/IWSUixRzbHfC/fmbBWMVKR0dHlyeTyR5VfQKvBAJwGW8NPWBZ1v8WO1YxPLBjYHk9bo+KzPMJnEsGbg78JPZnVfWlWOy/lrNte5eq/p5lWfOCPR1VFf9t4N8ty4qW64rFYsMZp+YOWJb1zQLzmzenYkurAC0dkWFg1qdw4NJob15fZom1lNJqitScDcN4bOfOna+n2gcHB1/zy5QnLcvK3Pwqm9k5q/HYxNje1+faX3gN5FGUkxNjvVXzlYOqXgRWishvp7cXXZbzX9UPAYfS6vBl7cYXg/+qfgg4lFaHXzRfilJ+wcscPwoQDodz9vEfBIVe4wuSSCT2NjQ0bMJb050IBoPfLuK2g3jlIBM4WYrPvO7sdZpMzyec+K1rzd++VOgm5SAi20FNpDQfwPj4uBmPxwFID3bw9hXwXrerVlFobx83r+IVbtKDHUCQUwqPIrekglGIIbIcz63V4T/B+IdkiiprpbAs6xuUuQb1D8nM+iaKuGdirLdsH0A8Hj/rf7yQ5fIpwAZWlTt+JlebJnP6koElp8zkjar6KuAU8FxmY1n/xxvLsmSxM2E6E6O9Us6rXo1PNsPDw5/F/wMdwzD+KvO6ZVkfVdPX1tk/60MX+n4Sq66vEkTkl8A/ZLbXMnyNO5ZkMrlcRKYNw2jduXPnf+boNiMi/1gNn6OyHJjGMFonhvfm9AFV8VWBscJdatSoUaNGjRo1atSocQfx/wldqBUwtlSMAAAAAElFTkSuQmCC) -51px center no-repeat;width:2.5rem}.GPlocationOriginLabel{display:none;pointer-events:none}[class^=GPlocationPoint-]{padding:0}[id^=GPlocationPoint_]{justify-content:left}.GPlocationStageFlexInput{flex-wrap:wrap;width:281px}.GPlocationStageAdd{flex-basis:65%;min-height:40px;padding:.25rem .75rem .25rem 2.5rem;text-align:left;width:0}.GPlocationOriginLabel{flex-basis:fit-content}.GPlocationOriginPointerImg{flex-basis:2.5em}.GPlocationStageFlexInput input{flex-basis:33%;flex-grow:1}.GPmeasureTooltip{background-color:var(--background-contrast-grey);opacity:.8;padding:.2rem .4rem}.gpf-btn-icon-area:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTcuOTkyIDE2LjM5MmEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2em0xLjQ3NyAzLjU5OC41My41MyAxLjA2Mi0xLjA2LS41My0uNTN6bS0yLjUzNy0yLjUzOCAyLjUzOCAyLjUzOCAxLjA2LTEuMDYtMi41MzgtMi41Mzh6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIwLjUzIDE5Ljk5LjUzLS41M0wyMCAxOC40bC0uNTMuNTN6bS0zLjU5OCAxLjQ3N2EuNzUuNzUgMCAwIDAgMS4wNiAxLjA2MXptMi41MzgtMi41MzctMi41MzggMi41MzcgMS4wNiAxLjA2MSAyLjUzOC0yLjUzOHpNMS40NyA1LjY3OGEuNzUuNzUgMCAwIDAgMS4wNiAxLjA2ek00LjczOSA0LjUzbC41My0uNTMtMS4wNi0xLjA2LS41MzEuNTN6TTIuNTMgNi43NCA0Ljc0IDQuNTMgMy42NzggMy40NyAxLjQ3IDUuNjc4eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im00LjczOSAzLjQ3LS41My0uNTNMMy4xNDggNGwuNTMuNTMxem0xLjE0NyAzLjI3YS43NS43NSAwIDAgMCAxLjA2MS0xLjA2MXpNMy42NzggNC41MyA1Ljg4NiA2Ljc0bDEuMDYxLTEuMDYxTDQuNzQgMy40N3oiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTQuMjA5IDUuMTA1djExLjg4YzAgMS4zOTMuOTQ2IDIuNDc3IDIuMTYxIDIuNDc3SDE5LjEyIi8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTE5LjY3IDEyLjgzNlY2LjA2NWMwLTEuMTYyLS43ODctMi4wNjUtMS44LTIuMDY1aC03LjAzNSIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBkPSJtMTYuMzU3IDExLjk4NC00LjEyMyA0LjA4Nk0xNi4yNzcgNy4zOTMgNy41MjIgMTYuMDdNMTEuNjQ1IDcuMzE0IDcuNTIyIDExLjQiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTcuOTkyIDE2LjM5MmEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2em0xLjQ3NyAzLjU5OC41My41MyAxLjA2Mi0xLjA2LS41My0uNTN6bS0yLjUzNy0yLjUzOCAyLjUzOCAyLjUzOCAxLjA2LTEuMDYtMi41MzgtMi41Mzh6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIwLjUzIDE5Ljk5LjUzLS41M0wyMCAxOC40bC0uNTMuNTN6bS0zLjU5OCAxLjQ3N2EuNzUuNzUgMCAwIDAgMS4wNiAxLjA2MXptMi41MzgtMi41MzctMi41MzggMi41MzcgMS4wNiAxLjA2MSAyLjUzOC0yLjUzOHpNMS40NyA1LjY3OGEuNzUuNzUgMCAwIDAgMS4wNiAxLjA2ek00LjczOSA0LjUzbC41My0uNTMtMS4wNi0xLjA2LS41MzEuNTN6TTIuNTMgNi43NCA0Ljc0IDQuNTMgMy42NzggMy40NyAxLjQ3IDUuNjc4eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im00LjczOSAzLjQ3LS41My0uNTNMMy4xNDggNGwuNTMuNTMxem0xLjE0NyAzLjI3YS43NS43NSAwIDAgMCAxLjA2MS0xLjA2MXpNMy42NzggNC41MyA1Ljg4NiA2Ljc0bDEuMDYxLTEuMDYxTDQuNzQgMy40N3oiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTQuMjA5IDUuMTA1djExLjg4YzAgMS4zOTMuOTQ2IDIuNDc3IDIuMTYxIDIuNDc3SDE5LjEyIi8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTE5LjY3IDEyLjgzNlY2LjA2NWMwLTEuMTYyLS43ODctMi4wNjUtMS44LTIuMDY1aC03LjAzNSIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBkPSJtMTYuMzU3IDExLjk4NC00LjEyMyA0LjA4Nk0xNi4yNzcgNy4zOTMgNy41MjIgMTYuMDdNMTEuNjQ1IDcuMzE0IDcuNTIyIDExLjQiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-length:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIxIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi44OTQgNi4xODdhLjUuNSAwIDAgMCAuNzA3LjcwN3ptMS40MTQtMS40MTRMNi44OTQgNi4xODdsLjcwNy43MDdMOS4wMTUgNS40OHpNOC45NzQgOC4yNjZhLjUuNSAwIDEgMCAuNzA3LjcwOHptMS40MTQtMS40MTRMOC45NzQgOC4yNjZsLjcwNy43MDggMS40MTQtMS40MTV6TTExLjA1MyAxMC4zNDZhLjUuNSAwIDEgMCAuNzA3LjcwN3ptMS40MTQtMS40MTQtMS40MTQgMS40MTQuNzA3LjcwNyAxLjQxNS0xLjQxNHpNMTMuMTMzIDEyLjQyNmEuNS41IDAgMSAwIC43MDcuNzA3em0xLjQxNC0xLjQxNC0xLjQxNCAxLjQxNC43MDcuNzA3IDEuNDE0LTEuNDE0eiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Im0xNi45OCAxMy40NDUtMS40MTQgMS40MTQiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im01LjUzNiAyIDE0LjE0MiAxNC4xNDItMy41MzYgMy41MzZMMiA1LjUzNnoiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIxIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi44OTQgNi4xODdhLjUuNSAwIDAgMCAuNzA3LjcwN3ptMS40MTQtMS40MTRMNi44OTQgNi4xODdsLjcwNy43MDdMOS4wMTUgNS40OHpNOC45NzQgOC4yNjZhLjUuNSAwIDEgMCAuNzA3LjcwOHptMS40MTQtMS40MTRMOC45NzQgOC4yNjZsLjcwNy43MDggMS40MTQtMS40MTV6TTExLjA1MyAxMC4zNDZhLjUuNSAwIDEgMCAuNzA3LjcwN3ptMS40MTQtMS40MTQtMS40MTQgMS40MTQuNzA3LjcwNyAxLjQxNS0xLjQxNHpNMTMuMTMzIDEyLjQyNmEuNS41IDAgMSAwIC43MDcuNzA3em0xLjQxNC0xLjQxNC0xLjQxNCAxLjQxNC43MDcuNzA3IDEuNDE0LTEuNDE0eiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Im0xNi45OCAxMy40NDUtMS40MTQgMS40MTQiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im01LjUzNiAyIDE0LjE0MiAxNC4xNDItMy41MzYgMy41MzZMMiA1LjUzNnoiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-azimuth:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIxIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xOC45NyAxMC4xOGMtLjM2IDAtLjY0LS4xNS0uODYtLjQ0cy0uMzMtLjcyLS4zMy0xLjI3YzAtLjYuMS0xLjE2LjMxLTEuNy4yLS41My40OC0xLjAxLjgzLTEuNDJhMy45IDMuOSAwIDAgMSAxLjE2LS45N2MuNDMtLjIzLjg3LS4zNSAxLjMyLS4zNS4yMyAwIC40NC4wMy42NC4wOC4yLjA2LjM4LjEzLjUzLjIzbC41OC0uMjZoLjI5bC0uNzggNC4zN2MtLjA3LjQzIDAgLjY1LjIyLjY1LjEzIDAgLjI3LS4wNy40My0uMjJzLjMxLS4zOS40Ny0uNzNsLjIxLjA4Yy0uNDkgMS4zMS0xLjEgMS45Ni0xLjg2IDEuOTZxLS41NTUgMC0uODEtLjM5Yy0uMTctLjI2LS4yMi0uNjMtLjE1LTEuMTJoLS4wM2MtLjM2LjUtLjcxLjg4LTEuMDUgMS4xM3MtLjcxLjM4LTEuMTEuMzh6bS4zMS0yLjM3YzAgLjQzLjA0Ljc1LjEzLjk2cy4yNS4zMS40OS4zMS40OC0uMTEuNzEtLjMzLjQ1LS40Ny42NC0uNzVsLjUzLTNjLS4xMS0uMTQtLjIzLS4yNS0uMzYtLjMyYTEgMSAwIDAgMC0uNDctLjExYy0uMzQgMC0uNjMuMTUtLjg4LjQ2cy0uNDUuNzEtLjU4IDEuMmMtLjE0LjQ5LS4yMSAxLjAyLS4yMSAxLjU3eiIvPjxwYXRoIGQ9Ik0yMC45IDE1LjcyaC01LjUyYy0uMDctMy4yNC0xLjUxLTYuMTUtMy43Ny04LjE3bDUuNDUtNi4yM0wxNS41NSAwIDEwIDYuMzVhMTEuMiAxMS4yIDAgMCAwLTUuOTItMS42OWgtMXYyaDFjMS42NyAwIDMuMjMuNDUgNC41OSAxLjIybC0zLjYxIDQuMTNjLS4zMS0uMDgtLjY0LS4xMy0uOTgtLjEzLTIuMjUgMC00LjA5IDEuODMtNC4wOSA0LjA5czEuODMgNC4wOSA0LjA5IDQuMDljMS42MiAwIDMuMDItLjk2IDMuNjgtMi4zM0gyMC45di0yLjAxTTEwLjMgOS4wNWE5LjI1IDkuMjUgMCAwIDEgMy4wOCA2LjY2SDguMTVhNC4wNyA0LjA3IDAgMCAwLTEuMjgtMi43M2wzLjQ0LTMuOTN6bS02LjIxIDljLTEuMTUgMC0yLjA5LS45NC0yLjA5LTIuMDlzLjk0LTIuMDkgMi4wOS0yLjA5IDIuMDkuOTQgMi4wOSAyLjA5LS45NCAyLjA5LTIuMDkgMi4wOSIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMjMuOTh2MjAuMDVIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIxIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xOC45NyAxMC4xOGMtLjM2IDAtLjY0LS4xNS0uODYtLjQ0cy0uMzMtLjcyLS4zMy0xLjI3YzAtLjYuMS0xLjE2LjMxLTEuNy4yLS41My40OC0xLjAxLjgzLTEuNDJhMy45IDMuOSAwIDAgMSAxLjE2LS45N2MuNDMtLjIzLjg3LS4zNSAxLjMyLS4zNS4yMyAwIC40NC4wMy42NC4wOC4yLjA2LjM4LjEzLjUzLjIzbC41OC0uMjZoLjI5bC0uNzggNC4zN2MtLjA3LjQzIDAgLjY1LjIyLjY1LjEzIDAgLjI3LS4wNy40My0uMjJzLjMxLS4zOS40Ny0uNzNsLjIxLjA4Yy0uNDkgMS4zMS0xLjEgMS45Ni0xLjg2IDEuOTZxLS41NTUgMC0uODEtLjM5Yy0uMTctLjI2LS4yMi0uNjMtLjE1LTEuMTJoLS4wM2MtLjM2LjUtLjcxLjg4LTEuMDUgMS4xM3MtLjcxLjM4LTEuMTEuMzh6bS4zMS0yLjM3YzAgLjQzLjA0Ljc1LjEzLjk2cy4yNS4zMS40OS4zMS40OC0uMTEuNzEtLjMzLjQ1LS40Ny42NC0uNzVsLjUzLTNjLS4xMS0uMTQtLjIzLS4yNS0uMzYtLjMyYTEgMSAwIDAgMC0uNDctLjExYy0uMzQgMC0uNjMuMTUtLjg4LjQ2cy0uNDUuNzEtLjU4IDEuMmMtLjE0LjQ5LS4yMSAxLjAyLS4yMSAxLjU3eiIvPjxwYXRoIGQ9Ik0yMC45IDE1LjcyaC01LjUyYy0uMDctMy4yNC0xLjUxLTYuMTUtMy43Ny04LjE3bDUuNDUtNi4yM0wxNS41NSAwIDEwIDYuMzVhMTEuMiAxMS4yIDAgMCAwLTUuOTItMS42OWgtMXYyaDFjMS42NyAwIDMuMjMuNDUgNC41OSAxLjIybC0zLjYxIDQuMTNjLS4zMS0uMDgtLjY0LS4xMy0uOTgtLjEzLTIuMjUgMC00LjA5IDEuODMtNC4wOSA0LjA5czEuODMgNC4wOSA0LjA5IDQuMDljMS42MiAwIDMuMDItLjk2IDMuNjgtMi4zM0gyMC45di0yLjAxTTEwLjMgOS4wNWE5LjI1IDkuMjUgMCAwIDEgMy4wOCA2LjY2SDguMTVhNC4wNyA0LjA3IDAgMCAwLTEuMjgtMi43M2wzLjQ0LTMuOTN6bS02LjIxIDljLTEuMTUgMC0yLjA5LS45NC0yLjA5LTIuMDlzLjk0LTIuMDkgMi4wOS0yLjA5IDIuMDkuOTQgMi4wOSAyLjA5LS45NCAyLjA5LTIuMDkgMi4wOSIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMjMuOTh2MjAuMDVIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-position:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNy40IDE1LjMzVjIuNDNsNC42OSAyLjM1djcuMDVoMS45OVY0LjcyTDE4IDMuMDR2LjE5aC0uMDF2OC42aDJWLjc2YzAtLjA4LS4wMS0uMTYtLjA1LS4yNGEuNS41IDAgMCAwLS4xNy0uMTguNi42IDAgMCAwLS4yMy0uMDhjLS4wOCAwLS4xNyAwLS4yNC4wNEwxMyAzIDcuMDEgMGwtNyAzdjE2LjYxYy0uMDEuMDggMCAuMTYuMDUuMjQuMDQuMDcuMS4xNC4xNi4xOHMuMTUuMDcuMjMuMDhjLjA4IDAgLjE3IDAgLjI0LS4wNGw2LjMtMi43LjQtLjE4di0xLjg2em0tMS45OS41NEwyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIxLjQyMiAxOC41OTUtNy43ODgtNS41MjRjLS4yNzItLjE4MS0uNjM0IDAtLjYzNC4zNjJsLjkwNiA5LjUxYzAgLjM2MS41NDMuNDUyLjcyNC4xOGwxLjQ1LTIuNTM1IDEuNDQ4IDIuNTM1Yy4xODEuMzYyLjYzNC41NDQuOTk2LjU0NC4xODEgMCAuMzYzLS4wOS41NDQtLjE4Mi41NDMtLjM2Mi43MjQtLjk5Ni40NTItMS41MzlsLTEuNDQ5LTIuNTM2aDIuOTg5Yy40NTMtLjA5LjYzNC0uNTQzLjM2Mi0uODE1Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNy40IDE1LjMzVjIuNDNsNC42OSAyLjM1djcuMDVoMS45OVY0LjcyTDE4IDMuMDR2LjE5aC0uMDF2OC42aDJWLjc2YzAtLjA4LS4wMS0uMTYtLjA1LS4yNGEuNS41IDAgMCAwLS4xNy0uMTguNi42IDAgMCAwLS4yMy0uMDhjLS4wOCAwLS4xNyAwLS4yNC4wNEwxMyAzIDcuMDEgMGwtNyAzdjE2LjYxYy0uMDEuMDggMCAuMTYuMDUuMjQuMDQuMDcuMS4xNC4xNi4xOHMuMTUuMDcuMjMuMDhjLjA4IDAgLjE3IDAgLjI0LS4wNGw2LjMtMi43LjQtLjE4di0xLjg2em0tMS45OS41NEwyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIxLjQyMiAxOC41OTUtNy43ODgtNS41MjRjLS4yNzItLjE4MS0uNjM0IDAtLjYzNC4zNjJsLjkwNiA5LjUxYzAgLjM2MS41NDMuNDUyLjcyNC4xOGwxLjQ1LTIuNTM1IDEuNDQ4IDIuNTM1Yy4xODEuMzYyLjYzNC41NDQuOTk2LjU0NC4xODEgMCAuMzYzLS4wOS41NDQtLjE4Mi41NDMtLjM2Mi43MjQtLjk5Ni40NTItMS41MzlsLTEuNDQ5LTIuNTM2aDIuOTg5Yy40NTMtLjA5LjYzNC0uNTQzLjM2Mi0uODE1Ii8+PC9zdmc+) center no-repeat}div[id^=GPmousePositionCoordinate-] input{color:inherit}div[id^=GPmousePositionAltitude-],div[id^=GPmousePositionCoordinate-]>div{display:flex;justify-content:space-between}div[id^=GPmousePositionCoordinate-] input[readonly]{font-size:1rem}.gpf-btn-icon-reverse:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI4Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi43NSAxLjAxSDQuODFMMy40MyAzLjA2IDIuMDUgMS4wMUguMTNsMi4yMyAzLjI1TDAgNy42OWgxLjkzbDEuNS0yLjI0IDEuNTIgMi4yNGgxLjkyTDQuNTEgNC4yNnpNMTIuNzQgMS4wMWwtMS44NCA0LjUtMS44My00LjVINy4ybDIuODEgNi42Ny0uMzcuODljLS4yOC42OC0uNjkuOS0xLjM1LjktLjI5IDAtLjYxLS4wNy0uODItLjE2djEuNDhjLjMyLjEzLjY4LjIxIDEuMTkuMjEgMS4yNyAwIDIuMDMtLjY5IDIuNDktMS43OUwxNC41MiAxaC0xLjc4ek00LjA4OCAxMS4wMThsLTItLjAxOGMtLjA0NSA0Ljk2IDMuNTk4IDkuMDkzIDguMzYyIDkuODE2YTguNCA4LjQgMCAwIDEtLjUxMS0yLjE0NWMtMy4zOTItLjg5LTUuODg0LTMuOTkzLTUuODUxLTcuNjUzTTIzLjg4IDIwLjAyYy4yMy0xLjE0LjExLTIuMzItLjM0LTMuMzlhNS45IDUuOSAwIDAgMC0yLjIxLTIuNjRjLS45OS0uNjUtMi4xNS0uOTktMy4zMy0uOTlzLTIuMzUuMzQtMy4zMy45OWMtLjk5LjY1LTEuNzYgMS41Ni0yLjIxIDIuNjRhNS42MyA1LjYzIDAgMCAwLS4zNCAzLjM5Yy4yMyAxLjE0LjggMi4xOSAxLjY0IDMuMDFMMTggMjcuMThsNC4yNC00LjE1Yy44NC0uODIgMS40MS0xLjg3IDEuNjQtMy4wMW0tMS45Ni0uMzhjLS4xNS43Ni0uNTQgMS40Ni0xLjA5IDIuMDFMMTggMjQuNDJsLTIuODMtMi43N2MtLjU2LS41NS0uOTQtMS4yNS0xLjEtMi4wMS0uMTUtLjc2LS4wOC0xLjU1LjIzLTIuMjYuMy0uNzIuODItMS4zMyAxLjQ3LTEuNzZhNC4wNjQgNC4wNjQgMCAwIDEgNC40NCAwIDMuODkzIDMuODkzIDAgMCAxIDEuNyA0LjAyeiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xOCAxNy4yOGMtLjY1IDAtMS4xNy41My0xLjE3IDEuMTdzLjUzIDEuMTcgMS4xNyAxLjE3IDEuMTctLjUzIDEuMTctMS4xNy0uNTMtMS4xNy0xLjE3LTEuMTciLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI4Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi43NSAxLjAxSDQuODFMMy40MyAzLjA2IDIuMDUgMS4wMUguMTNsMi4yMyAzLjI1TDAgNy42OWgxLjkzbDEuNS0yLjI0IDEuNTIgMi4yNGgxLjkyTDQuNTEgNC4yNnpNMTIuNzQgMS4wMWwtMS44NCA0LjUtMS44My00LjVINy4ybDIuODEgNi42Ny0uMzcuODljLS4yOC42OC0uNjkuOS0xLjM1LjktLjI5IDAtLjYxLS4wNy0uODItLjE2djEuNDhjLjMyLjEzLjY4LjIxIDEuMTkuMjEgMS4yNyAwIDIuMDMtLjY5IDIuNDktMS43OUwxNC41MiAxaC0xLjc4ek00LjA4OCAxMS4wMThsLTItLjAxOGMtLjA0NSA0Ljk2IDMuNTk4IDkuMDkzIDguMzYyIDkuODE2YTguNCA4LjQgMCAwIDEtLjUxMS0yLjE0NWMtMy4zOTItLjg5LTUuODg0LTMuOTkzLTUuODUxLTcuNjUzTTIzLjg4IDIwLjAyYy4yMy0xLjE0LjExLTIuMzItLjM0LTMuMzlhNS45IDUuOSAwIDAgMC0yLjIxLTIuNjRjLS45OS0uNjUtMi4xNS0uOTktMy4zMy0uOTlzLTIuMzUuMzQtMy4zMy45OWMtLjk5LjY1LTEuNzYgMS41Ni0yLjIxIDIuNjRhNS42MyA1LjYzIDAgMCAwLS4zNCAzLjM5Yy4yMyAxLjE0LjggMi4xOSAxLjY0IDMuMDFMMTggMjcuMThsNC4yNC00LjE1Yy44NC0uODIgMS40MS0xLjg3IDEuNjQtMy4wMW0tMS45Ni0uMzhjLS4xNS43Ni0uNTQgMS40Ni0xLjA5IDIuMDFMMTggMjQuNDJsLTIuODMtMi43N2MtLjU2LS41NS0uOTQtMS4yNS0xLjEtMi4wMS0uMTUtLjc2LS4wOC0xLjU1LjIzLTIuMjYuMy0uNzIuODItMS4zMyAxLjQ3LTEuNzZhNC4wNjQgNC4wNjQgMCAwIDEgNC40NCAwIDMuODkzIDMuODkzIDAgMCAxIDEuNyA0LjAyeiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xOCAxNy4yOGMtLjY1IDAtMS4xNy41My0xLjE3IDEuMTdzLjUzIDEuMTcgMS4xNyAxLjE3IDEuMTctLjUzIDEuMTctMS4xNy0uNTMtMS4xNy0xLjE3LTEuMTciLz48L3N2Zz4=) center no-repeat}.gpf-flex-reverse{align-items:flex-start;display:flex;flex-direction:column;justify-content:space-evenly}.gpf-panel-reverse{width:100%}.gpf-btn-icon-route:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE1Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMi43IDQuMzk5QTEuNyAxLjcgMCAxIDEgMi43IDFhMS43IDEuNyAwIDAgMSAwIDMuMzk5WiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTIuNyA0Ljk2djUuNjY4YTIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0IDIuOTc0IDIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0LTIuOTc0VjQuODA3YTIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0LTIuOTc0IDIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0IDIuOTc0djUuMzk2Ii8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im0xMi4xOTIgOC45NDggMi40MDQgMi40MDNNMTQuNTk3IDExLjM1MSAxNyA4Ljk0OCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE1Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMi43IDQuMzk5QTEuNyAxLjcgMCAxIDEgMi43IDFhMS43IDEuNyAwIDAgMSAwIDMuMzk5WiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTIuNyA0Ljk2djUuNjY4YTIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0IDIuOTc0IDIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0LTIuOTc0VjQuODA3YTIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0LTIuOTc0IDIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0IDIuOTc0djUuMzk2Ii8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im0xMi4xOTIgOC45NDggMi40MDQgMi40MDNNMTQuNTk3IDExLjM1MSAxNyA4Ljk0OCIvPjwvc3ZnPg==) center no-repeat}.GProuteFormMini{max-height:78px}.GProuteFormMini .GPelementShow{color:var(--grey-200-850)}.GProuteModeLabel{margin-bottom:.5rem}[id^=GProuteForm-] p.gpf-label{margin-bottom:.2rem;margin-top:0}[id^=GProuteForm-]>.GPpanelFooter{position:unset}[id^=GProuteSubmit-]{width:80%}[id^=GProuteForm-]>[class^=GPlocationPoint-]{margin-top:0}[id^=GProuteForm-]>p.gpf-label{margin-top:1rem}[id^=GProuteForm-].GProuteFormMini>p.gpf-label{margin-top:0}[id^=GProuteForm-]>p.gpf-label~p.gpf-label{margin-top:.5rem}button[id^=GProuteReset-],div[id^=GProuteResultsNew-]{min-width:2.5em}div[id^=GProuteResultsValueDist],div[id^=GProuteResultsValueTime]{color:var(--text-action-high-blue-france);font-weight:700}.GProuteResultsShowDetailsDiv{justify-content:left}div:has(input[id^=GProuteResultsShowDetails])+div[id^=GProuteResultsDetails-]{max-height:0;opacity:0;overflow:hidden}div:has(input[id^=GProuteResultsShowDetails]:checked)+div[id^=GProuteResultsDetails-]{max-height:200px;opacity:1;overflow-y:scroll}div[id^=GProuteResultsDetails-]{display:grid;gap:.5rem 5px;grid-template-columns:30px 1fr;max-width:350px;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s}.GProuteResultsDetailsInstruction,.GProuteResultsDetailsNumber{display:inline-block}.GProuteResultsDetailsNumber{font-weight:700;text-align:right;vertical-align:top}.GProuteExclusionsOptions{color:var(--text-label-grey);gap:.5rem}@media (max-width:576px){.gpf-mobile-fullscreen div[id^=GProuteResultsDetails-]{max-width:unset}}.gpf-widget-padding{padding-bottom:5px;padding-top:5px}.gpf-widget-color{background-color:var(--background-default-grey)}.GPlabelTitle,.gpf-panel__items_searchengine{border-bottom:1px solid var(--grey-900-175);color:var(--text-action-high-blue-france);padding:12px}.gpf-panel__items.GPautoCompleteProposal{box-sizing:border-box;height:45px}.GPlabelTitle{background-color:var(--background-open-blue-france);font-size:1em}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{max-height:unset}input[name^=inputSex].gpf-input,select[name^=inputSex].gpf-select{padding:unset}button[id^=GPsearchInputReset]{height:40px;width:40px}[id^=GPshowSearchDiv]{flex-direction:row-reverse}[id^=GPsearchEngine-]{flex-direction:column}[id^=GPsearchEngine-].gpf-widget-padding{align-items:center}div.GPbuttonsContainer>button{width:40px}.GPsearchFirstLineWrapper{height:40px}.gpf-widget-padding>.GPsearchFirstLineWrapper{margin:.5rem 0}.GPbuttonsContainer{height:56px;padding-left:10px}.GPsearchRadioContainer{background-color:var(--background-default-grey);display:flex;flex-direction:row;gap:1rem;max-height:0;overflow:clip;transition:max-height .3s;white-space:nowrap}[id^=GPsearchEngine-]:focus-within>.GPsearchRadioContainer,[id^=GPsearchEngine-]:has([id^=GPshowSearchByCoordinate-][aria-pressed=true])>.GPsearchRadioContainer,[id^=GPsearchEngine-]:hover>.GPsearchRadioContainer{max-height:3rem}.GPsearchRadioElements{display:flex;flex-direction:row;gap:1rem}.GPshowAdvancedSearch{align-items:center;color:var(--text-action-high-blue-france);cursor:pointer;display:flex;text-decoration:underline}.gpf-btn-icon-search{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZjVmNWZlIiBkPSJtMTguMDMxIDE2LjYxNyA0LjI4MyA0LjI4Mi0xLjQxNSAxLjQxNS00LjI4Mi00LjI4M0E4Ljk2IDguOTYgMCAwIDEgMTEgMjBjLTQuOTY4IDAtOS00LjAzMi05LTlzNC4wMzItOSA5LTkgOSA0LjAzMiA5IDlhOC45NiA4Ljk2IDAgMCAxLTEuOTY5IDUuNjE3bS0yLjAwNi0uNzQyQTYuOTggNi45OCAwIDAgMCAxOCAxMWMwLTMuODY4LTMuMTMzLTctNy03cy03IDMuMTMyLTcgNyAzLjEzMiA3IDcgN2E2Ljk4IDYuOTggMCAwIDAgNC44NzUtMS45NzV6Ii8+PC9zdmc+);background-position:50%;background-repeat:no-repeat;width:40px}form[id^=GPsearchInput-]{margin-left:8px;width:300px}button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]{border:none;max-width:300px}button[id^=GPshowSearchEnginePicto-]{border-radius:0 .25rem 0 0}.gpf-btn-icon-search-advanced:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLjIyNyAxMS4zMzNhNi43IDYuNyAwIDAgMS0uNjUyLTEuNTUgMiAyIDAgMCAwIC4wMDEtMy41NjUgNi42NiA2LjY2IDAgMCAxIDEuNjY3LTIuODkxIDIgMiAwIDAgMCAzLjA4OC0xLjc4MyA2LjY2IDYuNjYgMCAwIDEgMy4zMzguMDAxIDIgMiAwIDAgMCAzLjA4OCAxLjc4MmMuMzg2LjM5My43MjguODQgMS4wMTYgMS4zNC4yODkuNDk5LjUwNSAxLjAyLjY1MiAxLjU1YTIgMiAwIDAgMC0uMDAxIDMuNTY1IDYuNjYgNi42NiAwIDAgMS0xLjY2NyAyLjg5MSAyIDIgMCAwIDAtMy4wODggMS43ODMgNi42NiA2LjY2IDAgMCAxLTMuMzM4LS4wMDEgMiAyIDAgMCAwLTMuMDg4LTEuNzgyIDYuNyA2LjcgMCAwIDEtMS4wMTYtMS4zNE02IDExLjQ2NGEzLjMzIDMuMzMgMCAwIDEgMS41IDEuODQ3cS41LjA0NyAxIDBjLjI1NS0uNzguNzktMS40MzcgMS41LTEuODQ2YTMuMzMgMy4zMyAwIDAgMSAyLjM1LS4zNzdxLjI5LS40MS40OTktLjg2NUEzLjMzIDMuMzMgMCAwIDEgMTIgOGMwLS44NC4zMTMtMS42MjUuODQ5LTIuMjIzYTUuNCA1LjQgMCAwIDAtLjUtLjg2NUEzLjMzIDMuMzMgMCAwIDEgOC41IDIuNjg5YTUuMyA1LjMgMCAwIDAtMSAwQTMuMzMgMy4zMyAwIDAgMSA2IDQuNTM1Yy0uNzEuNDExLTEuNTQ3LjU0NS0yLjM1LjM3N3EtLjI5LjQxLS40OTkuODY1QzMuNjk4IDYuMzg4IDQuMDAxIDcuMTggNCA4YzAgLjg0LS4zMTMgMS42MjUtLjg0OSAyLjIyM3EuMjEuNDU2LjUuODY1QTMuMzMgMy4zMyAwIDAgMSA2IDExLjQ2NE04IDEwYTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNG0wLTEuMzMzYS42NjcuNjY3IDAgMSAwIDAtMS4zMzQuNjY3LjY2NyAwIDAgMCAwIDEuMzM0IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLjIyNyAxMS4zMzNhNi43IDYuNyAwIDAgMS0uNjUyLTEuNTUgMiAyIDAgMCAwIC4wMDEtMy41NjUgNi42NiA2LjY2IDAgMCAxIDEuNjY3LTIuODkxIDIgMiAwIDAgMCAzLjA4OC0xLjc4MyA2LjY2IDYuNjYgMCAwIDEgMy4zMzguMDAxIDIgMiAwIDAgMCAzLjA4OCAxLjc4MmMuMzg2LjM5My43MjguODQgMS4wMTYgMS4zNC4yODkuNDk5LjUwNSAxLjAyLjY1MiAxLjU1YTIgMiAwIDAgMC0uMDAxIDMuNTY1IDYuNjYgNi42NiAwIDAgMS0xLjY2NyAyLjg5MSAyIDIgMCAwIDAtMy4wODggMS43ODMgNi42NiA2LjY2IDAgMCAxLTMuMzM4LS4wMDEgMiAyIDAgMCAwLTMuMDg4LTEuNzgyIDYuNyA2LjcgMCAwIDEtMS4wMTYtMS4zNE02IDExLjQ2NGEzLjMzIDMuMzMgMCAwIDEgMS41IDEuODQ3cS41LjA0NyAxIDBjLjI1NS0uNzguNzktMS40MzcgMS41LTEuODQ2YTMuMzMgMy4zMyAwIDAgMSAyLjM1LS4zNzdxLjI5LS40MS40OTktLjg2NUEzLjMzIDMuMzMgMCAwIDEgMTIgOGMwLS44NC4zMTMtMS42MjUuODQ5LTIuMjIzYTUuNCA1LjQgMCAwIDAtLjUtLjg2NUEzLjMzIDMuMzMgMCAwIDEgOC41IDIuNjg5YTUuMyA1LjMgMCAwIDAtMSAwQTMuMzMgMy4zMyAwIDAgMSA2IDQuNTM1Yy0uNzEuNDExLTEuNTQ3LjU0NS0yLjM1LjM3N3EtLjI5LjQxLS40OTkuODY1QzMuNjk4IDYuMzg4IDQuMDAxIDcuMTggNCA4YzAgLjg0LS4zMTMgMS42MjUtLjg0OSAyLjIyM3EuMjEuNDU2LjUuODY1QTMuMzMgMy4zMyAwIDAgMSA2IDExLjQ2NE04IDEwYTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNG0wLTEuMzMzYS42NjcuNjY3IDAgMSAwIDAtMS4zMzQuNjY3LjY2NyAwIDAgMCAwIDEuMzM0IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-search-geolocate:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE5IDIwIj48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOS41IDE2LjI5MmE2LjI5MiA2LjI5MiAwIDEgMCAwLTEyLjU4NCA2LjI5MiA2LjI5MiAwIDAgMCAwIDEyLjU4NFoiLz48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xIDEwaDIuMjA4TTE1Ljc5MiAxMEgxOE05LjUgMS41djIuMjA4TTkuNSAxNi4yOTJWMTguNSIvPjxwYXRoIGZpbGw9IiMxMDEwOTIiIGQ9Ik05LjUgMTEuMTA0YTEuMTA0IDEuMTA0IDAgMSAwIDAtMi4yMDggMS4xMDQgMS4xMDQgMCAwIDAgMCAyLjIwOCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE5IDIwIj48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOS41IDE2LjI5MmE2LjI5MiA2LjI5MiAwIDEgMCAwLTEyLjU4NCA2LjI5MiA2LjI5MiAwIDAgMCAwIDEyLjU4NFoiLz48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xIDEwaDIuMjA4TTE1Ljc5MiAxMEgxOE05LjUgMS41djIuMjA4TTkuNSAxNi4yOTJWMTguNSIvPjxwYXRoIGZpbGw9IiMxMDEwOTIiIGQ9Ik05LjUgMTEuMTA0YTEuMTA0IDEuMTA0IDAgMSAwIDAtMi4yMDggMS4xMDQgMS4xMDQgMCAwIDAgMCAyLjIwOCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-icon-search-coordinate:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMTAxMDkyIiBkPSJNOS43MDIgNC44NjhIOC42NWMtLjQ5MSAwLS42OS0uMzUtLjQ1Ni0uNzcxQTI3MyAyNzMgMCAwIDEgMTAuMDA2Ljk2NGMuMjM0LS4zOTcuNjMxLS4zOTcuODY1LjAxMmE0MDkgNDA5IDAgMCAxIDEuNzY1IDMuMDVjLjI5Mi41MTUuMDkzLjgzLS41MDMuODQyaC0uOTdjMCAuMTQtLjAxMi4yMzQtLjAxMi4zNHY2LjEzNmMwIC4xNC4wODIuMzM5LjE4Ny40MiAyLjAxIDEuNDI3IDQuMDMzIDIuODQxIDYuMDU1IDQuMjU2LjAyNC4wMTEuMDU5LjAyMy4xMDUuMDQ2LjIxLS4yOC40MjEtLjU2LjYzMi0uODMuMzI3LS40Mi43MTMtLjM4NS45MTEuMTA2LjQ2OCAxLjA3NS45MjQgMi4xNjIgMS4zOCAzLjIzNy4yMS40OTEtLjAxMi43OTUtLjU1LjczN2EzNDcgMzQ3IDAgMCAxLTMuNDcxLS4zOTdjLS41ODUtLjA3LS43MjUtLjQzMy0uMzYzLS45bC40OTEtLjY2N2MuMDEyLS4wMTIuMDEyLS4wMzUuMDQ3LS4xMDVhMjI1IDIyNSAwIDAgMS0xLjExLS43OTVjLTEuNTktMS4xMjItMy4xOTEtMi4yMzMtNC43ODEtMy4zNTUtLjE5OS0uMTQtLjM0LS4xNjMtLjU1IDBhMTY3MiAxNjcyIDAgMCAxLTUuNjU3IDMuOTg2Yy0uMDQ3LjAzNS0uMDgyLjA1OS0uMTQuMTA2LjIyMi4zMDMuNDU1LjU4NC42NjYuODg4LjI5Mi40MDkuMTUyLjc3MS0uMzYyLjgzLTEuMTkzLjE1Mi0yLjM5Ny4yOTItMy41ODkuNDItLjQ0NC4wNDctLjY2Ni0uMjY4LS40OTEtLjcuMzg2LS45MjQuNzgzLTEuODQ4IDEuMTgtMi43NzEuMDgyLS4xODcuMTUzLS4zNzQuMjM0LS41NS4yLS40Mi41NzMtLjQ2Ny44NzctLjEwNWwuNTYxLjczN2MuMDEyLjAxMS4wMzUuMDIzLjA4Mi4wNDcuNjY2LS40NjggMS4zMzMtLjkzNiAyLjAxLTEuNDE1IDEuMjk4LS45MTIgMi41OTUtMS44MzUgMy45MDUtMi43MzUuMjIyLS4xNTIuMjkyLS4zMTYuMjkyLS41NzNWNC44NTd6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMTAxMDkyIiBkPSJNOS43MDIgNC44NjhIOC42NWMtLjQ5MSAwLS42OS0uMzUtLjQ1Ni0uNzcxQTI3MyAyNzMgMCAwIDEgMTAuMDA2Ljk2NGMuMjM0LS4zOTcuNjMxLS4zOTcuODY1LjAxMmE0MDkgNDA5IDAgMCAxIDEuNzY1IDMuMDVjLjI5Mi41MTUuMDkzLjgzLS41MDMuODQyaC0uOTdjMCAuMTQtLjAxMi4yMzQtLjAxMi4zNHY2LjEzNmMwIC4xNC4wODIuMzM5LjE4Ny40MiAyLjAxIDEuNDI3IDQuMDMzIDIuODQxIDYuMDU1IDQuMjU2LjAyNC4wMTEuMDU5LjAyMy4xMDUuMDQ2LjIxLS4yOC40MjEtLjU2LjYzMi0uODMuMzI3LS40Mi43MTMtLjM4NS45MTEuMTA2LjQ2OCAxLjA3NS45MjQgMi4xNjIgMS4zOCAzLjIzNy4yMS40OTEtLjAxMi43OTUtLjU1LjczN2EzNDcgMzQ3IDAgMCAxLTMuNDcxLS4zOTdjLS41ODUtLjA3LS43MjUtLjQzMy0uMzYzLS45bC40OTEtLjY2N2MuMDEyLS4wMTIuMDEyLS4wMzUuMDQ3LS4xMDVhMjI1IDIyNSAwIDAgMS0xLjExLS43OTVjLTEuNTktMS4xMjItMy4xOTEtMi4yMzMtNC43ODEtMy4zNTUtLjE5OS0uMTQtLjM0LS4xNjMtLjU1IDBhMTY3MiAxNjcyIDAgMCAxLTUuNjU3IDMuOTg2Yy0uMDQ3LjAzNS0uMDgyLjA1OS0uMTQuMTA2LjIyMi4zMDMuNDU1LjU4NC42NjYuODg4LjI5Mi40MDkuMTUyLjc3MS0uMzYyLjgzLTEuMTkzLjE1Mi0yLjM5Ny4yOTItMy41ODkuNDItLjQ0NC4wNDctLjY2Ni0uMjY4LS40OTEtLjcuMzg2LS45MjQuNzgzLTEuODQ4IDEuMTgtMi43NzEuMDgyLS4xODcuMTUzLS4zNzQuMjM0LS41NS4yLS40Mi41NzMtLjQ2Ny44NzctLjEwNWwuNTYxLjczN2MuMDEyLjAxMS4wMzUuMDIzLjA4Mi4wNDcuNjY2LS40NjggMS4zMzMtLjkzNiAyLjAxLTEuNDE1IDEuMjk4LS45MTIgMi41OTUtMS44MzUgMy45MDUtMi43MzUuMjIyLS4xNTIuMjkyLS4zMTYuMjkyLS41NzNWNC44NTd6Ii8+PC9zdmc+) center no-repeat}.gpf-btn-icon-search-reset{background-position:-25px}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{position:absolute;top:66px;width:inherit}[id^=GPautocompleteResults-]{border:1px solid var(--background-open-blue-france)}dialog[id^=GPgeocodeResultsList],div[id^=GPautoCompleteList]{background-color:var(--background-default-grey);height:fit-content;max-height:unset;position:absolute;width:320px}div[id^=GPautoCompleteList]{margin-left:2px;top:42px}.position-container-bottom-left [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-bottom-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-left [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList]{margin-left:8px;position:relative;top:unset;width:340px}.position-container-bottom-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList]{margin-right:10px}.gpf-widget-padding>div[id^=GPautoCompleteList]{margin:0;top:100%;width:100%}dialog[id^=GPgeocodeResultsList]{border-radius:4px;overflow:hidden;position:absolute;top:55px}div[id^=GPgeocodeResults-]{background-color:var(--background-default-grey);max-height:240px;overflow-y:auto;position:relative;width:100%}[id^=GPautocompleteResultsLocation],[id^=GPautocompleteResultsSuggest]{height:225px}@media (max-width:576px){.gpf-widget-padding>.GPsearchFirstLineWrapper{flex-direction:column;height:fit-content}.GPsearchRadioContainer{align-items:center;flex-direction:column}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{margin-left:unset;position:relative;top:unset}.GPsearchRadioContainer{gap:0;margin:0 8px}form[id^=GPsearchInput-]{margin-left:0}[id^=GPsearchEngine-]:focus-within>.GPsearchRadioContainer,[id^=GPsearchEngine-]:has([id^=GPshowSearchByCoordinate-][aria-pressed=true])>.GPsearchRadioContainer,[id^=GPsearchEngine-]:hover>.GPsearchRadioContainer{max-height:4rem}}.gpf-btn-icon-toolbox{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAlqAAAJagFGUcfpAAAAB3RJTUUH4AsKDCgkqrnTSAAAAw1JREFUSMe9ll2IlVUUhp9vnEintH+FulAyI+uihClKjSZtQJAJrRnDoKt+oCIIjSIrDCokKXQiCqkuTMFAJtQLCwItMsQbURmjiRIK+pmSoSjJ/JmnC98je6ZzjmVMCzbnO/vstd691nrf9R0YA1NRn2SsTX1E/UM9vVc1OdwC3A7cBLQD1wE/Al8AA0BfVVXf1vFbAmwCjgPjq+oUREsDkBuA3UBfwL4EXgS2AgJLgIPqw2pV+HUCG4B9/yTtF9Rj6pvqBeo4db7apU5N/VGXqofVHeo09Ub1N3Wdeo/6Z1m60SAL1KPqrQnWqR5Qt6pvqYfU1WqbWqnvqt+p89Sf1T61pSmQOkH9Wl2ZLDaru9T2gLapH6mvB6RXHVRvU79Rd6rnqteoH6vHGwEtV7/K4ZXq+qJME9VP1JfzfZU6lMwPqnvVSfltkvpMyl8X6L3ccmIyayuAdqjP5flZ9deA7M7lpqjjC5+eZkAH1AfT5LVxaFUfV39JoGXq72qHul39Qb0ypX5fvaIRUEnv6dHIZGAwe28Ac4DngQeAl4DFeZ4NLAAOAb3ZP1nEG6HREmgAmAEcBmYCTwFTgaXAEPAK0AMsBO4G7gT2A08Aj9YKM+qzbul61Q0hQ7+6L43tCVW71RXqCXVRUaJhdaOnbHIY2d2Mdd3q96F5e0TYFV3dl/4Nq/cHZE7m2avqLQXQeTlzohFQm/q5+k4C3ZFAD6mL4/h0frs6U2FzMpgdoEujq371ZCMg1GvDqjXqkTCuI1mtyZnLQv9dYWItO9VLwsC7GgIVYPfGaYU6K5rZmJtPUPeoAwla85lbALWcEagA61Svyoj5QD0nAbaoP0U71AJFvKoX50J/A2odDVRVFWo/8Fk00p13y2tAJzAv+6cvVmjGYo3QUWudjC4EPgSORjNHgGXAY3kfzcoqbcaZ9NM6eoID24CLMhGGgA5geabFzVn1bBAYBs4HLm/Wm3HqttB2ZtHof7va1U/Ts7oZvQ10AWuB67PO1vYAc+tls9qxsZETtinf/6PV/gX9b/YXjLd1o+WqCcMAAAAASUVORK5CYII=);background-position:3px;background-repeat:no-repeat}.gpf-btn-icon-zoom-in{height:inherit;width:inherit}.gpf-btn-icon-zoom-in:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwTTEyIDd2MTAiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwTTEyIDd2MTAiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41Ii8+PC9zdmc+) center no-repeat}.gpf-btn-icon-zoom-out{height:inherit;width:inherit}.gpf-btn-icon-zoom-out:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwIi8+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAuNzUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwIi8+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAuNzUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIvPjwvc3ZnPg==) center no-repeat}.ol-custom-full-screen button{background-position:50%;background-repeat:no-repeat;height:40px;width:40px}.ol-custom-full-screen button.ol-custom-full-screen-false:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuMTI1IDIuMjVhLjc1Ljc1IDAgMCAwIDAgMS41em00LjM3NSAxLjVoLjc1di0xLjVoLS43NXptLTQuMzc1IDBIMjAuNXYtMS41aC00LjM3NXoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjEuMjUgM3YtLjc1aC0xLjVWM3ptLTEuNSA0LjM3NWEuNzUuNzUgMCAwIDAgMS41IDB6bTAtNC4zNzV2NC4zNzVoMS41VjN6TTcuMzc1IDIxLjI1YS43NS43NSAwIDAgMCAwLTEuNXpNMyAxOS43NWgtLjc1djEuNUgzem00LjM3NSAwSDN2MS41aDQuMzc1eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0yLjI1IDIwLjV2Ljc1aDEuNXYtLjc1em0xLjUtNC4zNzVhLjc1Ljc1IDAgMCAwLTEuNSAwem0wIDQuMzc1di00LjM3NWgtMS41VjIwLjV6TTIwLjIxMiA0LjM0OWwuNTMtLjUzLTEuMDYtMS4wNjEtLjUzMS41M3ptLTYuNzE4IDQuNTk2YS43NS43NSAwIDEgMCAxLjA2IDEuMDZ6bTUuNjU3LTUuNjU3LTUuNjU3IDUuNjU3IDEuMDYgMS4wNiA1LjY1OC01LjY1NnoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNOS45OTkgMTQuNTYyYS43NS43NSAwIDEgMC0xLjA2LTEuMDZ6bS02LjcxOCA0LjU5Ni0uNTMuNTMgMS4wNiAxLjA2MS41MzEtLjUzem01LjY1Ny01LjY1Ny01LjY1NyA1LjY1NyAxLjA2MSAxLjA2TDEwIDE0LjU2M3oiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuMTI1IDIuMjVhLjc1Ljc1IDAgMCAwIDAgMS41em00LjM3NSAxLjVoLjc1di0xLjVoLS43NXptLTQuMzc1IDBIMjAuNXYtMS41aC00LjM3NXoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjEuMjUgM3YtLjc1aC0xLjVWM3ptLTEuNSA0LjM3NWEuNzUuNzUgMCAwIDAgMS41IDB6bTAtNC4zNzV2NC4zNzVoMS41VjN6TTcuMzc1IDIxLjI1YS43NS43NSAwIDAgMCAwLTEuNXpNMyAxOS43NWgtLjc1djEuNUgzem00LjM3NSAwSDN2MS41aDQuMzc1eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0yLjI1IDIwLjV2Ljc1aDEuNXYtLjc1em0xLjUtNC4zNzVhLjc1Ljc1IDAgMCAwLTEuNSAwem0wIDQuMzc1di00LjM3NWgtMS41VjIwLjV6TTIwLjIxMiA0LjM0OWwuNTMtLjUzLTEuMDYtMS4wNjEtLjUzMS41M3ptLTYuNzE4IDQuNTk2YS43NS43NSAwIDEgMCAxLjA2IDEuMDZ6bTUuNjU3LTUuNjU3LTUuNjU3IDUuNjU3IDEuMDYgMS4wNiA1LjY1OC01LjY1NnoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNOS45OTkgMTQuNTYyYS43NS43NSAwIDEgMC0xLjA2LTEuMDZ6bS02LjcxOCA0LjU5Ni0uNTMuNTMgMS4wNiAxLjA2MS41MzEtLjUzem01LjY1Ny01LjY1Ny01LjY1NyA1LjY1NyAxLjA2MSAxLjA2TDEwIDE0LjU2M3oiLz48L3N2Zz4=) center no-repeat}.ol-custom-full-screen button.ol-custom-full-screen-true:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTMuNzczIDEwLjk2OGg0LjM4Yy40MSAwIC43NS0uMzQuNzUtLjc1cy0uMzQtLjc1LS43NS0uNzVoLTIuNTZsNS4xOS01LjE5Yy4yOS0uMjkuMjktLjc3IDAtMS4wNmEuNzU0Ljc1NCAwIDAgMC0xLjA2IDBsLTUuMiA1LjJ2LTIuNTZjMC0uNDEtLjM0LS43NS0uNzUtLjc1cy0uNzUuMzQtLjc1Ljc1djUuMTF6TTQuMjc4IDIwLjc4M2w1LjE5LTUuMTl2Mi41NmMwIC40MS4zNC43NS43NS43NXMuNzUtLjM0Ljc1LS43NXYtNS4xMmgtNS4xMmMtLjQxIDAtLjc1LjM0LS43NS43NXMuMzQuNzUuNzUuNzVoMi41NmwtNS4xOSA1LjE5Yy0uMjkuMjktLjI5Ljc3IDAgMS4wNnMuNzcuMjkgMS4wNiAwIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTMuNzczIDEwLjk2OGg0LjM4Yy40MSAwIC43NS0uMzQuNzUtLjc1cy0uMzQtLjc1LS43NS0uNzVoLTIuNTZsNS4xOS01LjE5Yy4yOS0uMjkuMjktLjc3IDAtMS4wNmEuNzU0Ljc1NCAwIDAgMC0xLjA2IDBsLTUuMiA1LjJ2LTIuNTZjMC0uNDEtLjM0LS43NS0uNzUtLjc1cy0uNzUuMzQtLjc1Ljc1djUuMTF6TTQuMjc4IDIwLjc4M2w1LjE5LTUuMTl2Mi41NmMwIC40MS4zNC43NS43NS43NXMuNzUtLjM0Ljc1LS43NXYtNS4xMmgtNS4xMmMtLjQxIDAtLjc1LjM0LS43NS43NXMuMzQuNzUuNzUuNzVoMi41NmwtNS4xOSA1LjE5Yy0uMjkuMjktLjI5Ljc3IDAgMS4wNnMuNzcuMjkgMS4wNiAwIi8+PC9zdmc+) center no-repeat}.gpf-btn-icon-overviewmap:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyA1LjcgOS4zIDNsNS40IDIuNyA1LjY3My0yLjQzMWEuNDUuNDUgMCAwIDEgLjYyNy40MTNWMTguM0wxNC43IDIxbC01LjQtMi43LTUuNjczIDIuNDMxQS40NS40NSAwIDAgMSAzIDIwLjMxN3ptMTIuNiAxMi45NTYgMy42LTEuNTQzVjUuNzNsLTMuNiAxLjU0M3ptLTEuOC0uMTE4VjcuMjYybC0zLjYtMS44djExLjI3NnptLTUuNC0xLjgxVjUuMzQzTDQuOCA2Ljg4N1YxOC4yN3oiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyA1LjcgOS4zIDNsNS40IDIuNyA1LjY3My0yLjQzMWEuNDUuNDUgMCAwIDEgLjYyNy40MTNWMTguM0wxNC43IDIxbC01LjQtMi43LTUuNjczIDIuNDMxQS40NS40NSAwIDAgMSAzIDIwLjMxN3ptMTIuNiAxMi45NTYgMy42LTEuNTQzVjUuNzNsLTMuNiAxLjU0M3ptLTEuOC0uMTE4VjcuMjYybC0zLjYtMS44djExLjI3NnptLTUuNC0xLjgxVjUuMzQzTDQuOCA2Ljg4N1YxOC4yN3oiLz48L3N2Zz4=) center no-repeat}.ol-overviewmap:has(>.gpf-btn-icon[aria-pressed=true]):after{transform:translateY(-100%)}.ol-overviewmap:not(.ol-collapsed){background:unset}.gpf-btn-icon-legends:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDQwIDQwIj48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Ik0yNC4xMjggMjYuMTExVjI4SDEyLjdjLS45NDQgMC0xLjctLjc1Ni0xLjctMS43VjExaDEzLjAzM3YxNC45MjJjMCAxLjA0Ljc1NiAxLjk4MyAxLjc5NSAyLjA3OCAxLjEzMy4wOTQgMi4xNzItLjg1IDIuMTcyLTEuOTgzdi0zLjAyM2gtMy44NzIiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTE0LjcwMyAxNS43MjJoNS42NjdNMTQuNzAzIDE5LjVoNS42NjdNMTQuNzAzIDIzLjI3OGg1LjY2NyIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTI2LjExMSAyOGgtMS45ODMiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDQwIDQwIj48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Ik0yNC4xMjggMjYuMTExVjI4SDEyLjdjLS45NDQgMC0xLjctLjc1Ni0xLjctMS43VjExaDEzLjAzM3YxNC45MjJjMCAxLjA0Ljc1NiAxLjk4MyAxLjc5NSAyLjA3OCAxLjEzMy4wOTQgMi4xNzItLjg1IDIuMTcyLTEuOTgzdi0zLjAyM2gtMy44NzIiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTE0LjcwMyAxNS43MjJoNS42NjdNMTQuNzAzIDE5LjVoNS42NjdNMTQuNzAzIDIzLjI3OGg1LjY2NyIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTI2LjExMSAyOGgtMS45ODMiLz48L3N2Zz4=) center no-repeat}.gpf-btn-header-legends{height:26px;position:absolute;width:26px;z-index:2}.gpf-btn-icon-header-legends{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjIiIGQ9Ik0xMi42IDEyLjY2NHYxLjMzNEg0LjUzM2MtLjY2NiAwLTEuMi0uNTM0LTEuMi0xLjJ2LTEwLjhoOS4yVjEyLjUzYzAgLjczMy41MzQgMS40IDEuMjY3IDEuNDY3LjguMDY2IDEuNTMzLS42IDEuNTMzLTEuNHYtMi4xMzRIMTIuNiIvPjxwYXRoIHN0cm9rZT0iIzEwMTA5MiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4yIiBkPSJNNS45NDcgNS4zMzFoNE01Ljk0NyA3Ljk5OGg0TTUuOTQ3IDEwLjY2NGg0Ii8+PHBhdGggc3Ryb2tlPSIjMTAxMDkyIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4yIiBkPSJNMTQgMTMuOTk4aC0xLjQiLz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:auto auto}.gpf-panel__body_legends{max-height:300px!important;overflow:auto}.gpf-panel__title_legends{color:#101092;font-size:1rem;font-weight:400;margin:0;padding:12px 15px;position:relative;right:-16px}.gpf-panel__header_legends{align-content:center;align-items:center;background:#e3e3fd;display:flex;flex-direction:row;height:48px}button[id^=GPcollapseLegend_ID_]{position:absolute;right:0;top:8px}.gpf-btn-icon-legends-collapse{box-shadow:none}.gpf-btn-icon-legends-collapse:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;transition:transform .2s ease-out 0s}.gpf-btn-icon-legends-collapse[aria-pressed=true]:after{box-shadow:none;transform:rotate(180deg)}.legend-entry-container{background-color:var(--background-overlap-grey);border-bottom:1px solid var(--border-default-grey);overflow:hidden;position:relative;top:0}.gpf-label-legends-name{line-height:56px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 40px)}button[id^=GPcollapseLegend_ID_][aria-pressed=true]+.legend-entry-image{border-top:1px solid var(--border-default-grey);max-height:300px;opacity:1;overflow:auto;padding:10px 0}.legend-entry-image{display:block;max-height:0;opacity:0;transition:max-height .5s ease-out 0s,opacity .5s ease-out 0s}.legends-entries{padding:0 16px}.gpf-btn-icon-catalog:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNCIgaGVpZ2h0PSIzNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuNzEzIDEyLjc3NGE0LjEyNSA0LjEyNSAwIDEgMSAxLjA2LTEuMDZsMi4wMDcgMi4wMDYtMS4wNiAxLjA2ek01IDZoMy43NXYxLjVINXptMCA1LjI1aDMuNzV2MS41SDV6bTAgNS4yNWgxMy41VjE4SDV6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNCIgaGVpZ2h0PSIzNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuNzEzIDEyLjc3NGE0LjEyNSA0LjEyNSAwIDEgMSAxLjA2LTEuMDZsMi4wMDcgMi4wMDYtMS4wNiAxLjA2ek01IDZoMy43NXYxLjVINXptMCA1LjI1aDMuNzV2MS41SDV6bTAgNS4yNWgxMy41VjE4SDV6Ii8+PC9zdmc+) center no-repeat}@media (max-width:576px){.gpf-mobile-fullscreen .GPtabContent{height:100vh;max-height:unset!important}}.gpf-btn-icon-territories:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi42NDggMS45ODZhLjczLjczIDAgMCAxIC43Ny4yODRsLjIxNy4zMWguMTEzYy4zMTcgMCAuNTkyLjIuNjg0LjQ5OWwuMDM5LjEyNmEuNzIuNzIgMCAwIDEgLjQxLjI1My43LjcgMCAwIDEgLjE4Ny4wNjNsLjI4Ny4xNGEuNy43IDAgMCAxIC4yOTQuMjY3bC4yMzYtLjA1NWEuNzIuNzIgMCAwIDEgLjYwOS4xMy43LjcgMCAwIDEgLjI3My41NTJ2LjI1bC40ODQuMzIzYS43LjcgMCAwIDEgLjMyOC4wNThsLjA3OC4wMzMuMDk5LS4wNGEuNzQuNzQgMCAwIDEgLjQ3NS0uMDIzbC4zODkuMTE0Yy4xMzYuMDQuMjU2LjExOC4zNDYuMjI2bC4yOC4zMzYuMzc0LS4wMzdhLjc0Ljc0IDAgMCAxIC40MS4wNzlsLjIyNi4xMi4zMzEuMDA2Yy4xMzMuMDAzLjI2LjA0LjM3MS4xMWwuMjg5LjE3OWMuMzEyLjE5Ni40MjIuNi4yNS45MmwtLjMxMi41NzgtLjAxNi4xNzRhLjcuNyAwIDAgMS0uMDM0LjE2bC0uMjIyLjYzLjAxNyAxLjA0NWEuNjkuNjkgMCAwIDEtLjI1Ni41NDlsLS40MDcuMzMzYS43LjcgMCAwIDEtLjI0My4xM2wtLjcuODg1Yy4yNC4wNi40NC4yMzguNTEyLjQ4MmwuMDc3LjI1Ni4wOTcuMTIuMjI4LjMzNGEuNjkuNjkgMCAwIDEtLjAxNS44MDFsLjI3LjMxN2EuNy43IDAgMCAxIC4xNjUuNDgzbC0uMDIuMzY0YS43LjcgMCAwIDEtLjI4LjUybC4wNS4wNDhhLjY5LjY5IDAgMCAxIC4wNjEuOTVsLjA4NS4wNTguMDktLjAzMWEuNzIuNzIgMCAwIDEgLjg4OC4zNjVsLjExNy4yNWEuNjkuNjkgMCAwIDEtLjA3OS43MTJsLS4wMzkuMDU1YS42OS42OSAwIDAgMS0uMjQ4LjY0MmwtLjcyLjU4Ny0uMzEyLjE5NmEuNy43IDAgMCAxLS4wNjMuMzE3LjcuNyAwIDAgMS0uNDAyLjM2OWwtLjYzMS4yMjhhMSAxIDAgMCAxLS4xNDkuMDM3bC0uNDcyLjA2NmEuNy43IDAgMCAxLS4yNzQtLjAxM2wtLjk3LS4yMjItLjY0NS0uMTg1LS4wNS0uMDE2YS43My43MyAwIDAgMS0uNDI5LS4wNzhsLS4yMjItLjEyYS43My43MyAwIDAgMS0uNTI4LS4wOTZsLS42MDguMzYtLjE5Mi4zOC4xODcuNjQzYS43LjcgMCAwIDEtLjA2OC41NC43MS43MSAwIDAgMS0uNDMzLjMyOGwtLjc2OC4yYS43LjcgMCAwIDEtLjE4NC4wMjRsLS4xMDItLjAwOC0uNjQ0LS4xMTItLjI5Mi4wNThhLjc0Ljc0IDAgMCAxLS40NS0uMDUzbC0uMzQ0LS4xNjRhLjcuNyAwIDAgMS0uMzcyLS40MjhsLS4yODItLjExMy0uMTE4LS4wMjVhLjcyLjcyIDAgMCAxLS42NTIuMjVsLTEuMjE1LS4xNjFhLjcuNyAwIDAgMS0uMjcyLS4wOTNsLS4yMDUtLjEyaC0uMzFhLjcyLjcyIDAgMCAxLS41Mi0uMjJsLS4yMDgtLjIxNy0uNjk2LS4yOTRhLjcuNyAwIDAgMS0uMzQtLjI5OGwtLjE0MS0uMjQ1LS4yOTgtLjE2MWEuNjkzLjY5MyAwIDAgMS0uMjA4LTEuMDU5bC40NjQtLjU1My4yNTctMS4zOGExIDEgMCAwIDEgLjAyNC0uMDkyLjcuNyAwIDAgMS0uMDQtLjMyOWwuMjEzLTEuODIyYTEgMSAwIDAgMSAuMDE5LS4xLjY5LjY5IDAgMCAxIC4xMzgtLjg1Ny43LjcgMCAwIDEtLjA3NS0uMjE2bC0uMzI4LS4xNjVhLjcuNyAwIDAgMS0uMjQ3LS4yMDZsLS41NTktLjcyOGEuNy43IDAgMCAxLS4xMjYtLjI2NWwtLjE2NS0uNzM3LS4wMDItLjAwOC0uMDc0LS4wNWEuNy43IDAgMCAxLS4xNjItLjE1MWwtLjI0LS4zMTMtMS4zNDMtLjUyNGgtLjM4NmEuNzIuNzIgMCAwIDEtLjYxNy0uMzQ3bC0uMTY0LS4yNzVhLjcuNyAwIDAgMS0uMDgzLS40OTUuNy43IDAgMCAxLS4yNzYtLjM1TDEuNzU0IDguMWEuNjk1LjY5NSAwIDAgMSAuMzczLS44NjVsMS4wMTctLjQ2NmEuNy43IDAgMCAxIC4yNDEtLjA2M2wxLjQwMS0uMTI0YS43NC43NCAwIDAgMSAuNTc0LjIwN2wuMjU5LjI1OS4wNTQtLjAyMWEuNzMuNzMgMCAwIDEgLjM5NC0uMDM2bC4xODcuMDMzLS4yNTMtLjU5Ni0uMTktLjc1N2EuNy43IDAgMCAxIC4xMi0uNTgzLjcxLjcxIDAgMCAxIC41MzUtLjI4NGwuNTc0LS4wMjlhLjcuNyAwIDAgMSAuNTU4LjIyMmwuNDkzLjUxOS42MzkuMTIzLjAwNy0uMDc5YS43LjcgMCAwIDEgLjQ4Mi0uNjA1bDEuMjEzLS40MDkuMzI1LS4yOTItLjA0Ni0uNzFhLjcuNyAwIDAgMSAuMDYtLjMzMWwuMjU0LS41NDVhLjcuNyAwIDAgMSAuNDctLjM4OHptLS4xODggMS45NzgtLjMzLjA4MS0uMDM2LjA3My4wNTUuODE2Yy4wMTMuMi0uMDcuMzkyLS4yMjcuNTI3bC0uNjczLjU3OGEuNy43IDAgMCAxLS4yNDkuMTM4bC0uNzM3LjIzOC4yMjguMTU3LS4yODMuMTM1YS42OC42OCAwIDAgMS0uMzQ3LjM3OGwtLjQ4My4yM2EuNzYuNzYgMCAwIDEtLjQ1LjA2bC0xLjE5LS4yMnYuMDA2bC4wNTcuNzk5Yy4wMjQuMzQyLS4yMy42NC0uNTkuNjk0bC0uMzA0LjA0NGEuNy43IDAgMCAxLS4yMzYtLjAwM2wtLjU4OS0uMS0uMjk5LjExYS43My43MyAwIDAgMS0uNzU1LS4xNTJsLS4zNDYtLjMzLS45MjMuMDc4LS4wMzkuMDE3Yy4xNS4xMy4yMy4zMTYuMjIyLjUwNWwuMDEuMDAzIDEuNjI2LjYwOHEuMTg1LjA3Mi4zLjIxNWwuMjA3LjI1N2EuNzUuNzUgMCAwIDEgLjM5Ni4wNzlsLjM5OC4yMDRjLjE2LjA4My4yOC4yMjMuMzMzLjM4NWwuNTUzLjI4NS0uNTk1LjE5N2EuNy43IDAgMCAxLS4zMTYuMjk5bC4zNS40MzYuNjE2LjI5NmEuNjQ1LjY0NSAwIDAgMSAuMzYyLjczNWwtLjAwNy4wMjguMTM0LjIzNmMuMTA3LjE5LjEwNy40MTEuMDEuNTk2bC4wNTcuMDQ0YS42Ny42NyAwIDAgMSAuMjE4LjMwNGwuMzg3IDEuMWEuNjIuNjIgMCAwIDEtLjAzNi40OTVsLjI2Mi43NDYtLjcyMi0uMzk4YS43LjcgMCAwIDEtLjI3Mi4wMTIuNi42IDAgMCAxLS4wODUuMTc3bC0uMzA1LjQ1MS0uMjYgMS4zMzVhLjY0LjY0IDAgMCAxLS4xNS4zMDFsLS4wNzUuMDg3YTEgMSAwIDAgMSAuMDQyLjA2M2wuMTIuMTk3LjYuMjQyYy4wOTMuMDQuMTY4LjA5LjIzMy4xNTRsLjA5Ny4wOTZoLjE5YS43NC43NCAwIDAgMSAuMzUzLjA5bC4yNTEuMTM5LjM4NC4wNDhhLjcuNyAwIDAgMSAuMTM2LS4xMzkuNzQuNzQgMCAwIDEgLjU4LS4xMzRsLjk4MS4yMDkuNjkuMjYzYS43LjcgMCAwIDEgLjM3LjMyOGwuMDMzLS4wMDdhMSAxIDAgMCAxIC4xNC0uMDEzbC4xMDMuMDA4LjUwNi4wODQtLjA1LS4xNjRhLjYyLjYyIDAgMCAxIC4wNDgtLjQ3NWwuMzk3LS43NTNhLjY3LjY3IDAgMCAxIC4yNjgtLjI3M2wxLjE2NS0uNjU4YS43My43MyAwIDAgMSAuNjcyLS4wMjYuNzQuNzQgMCAwIDEgLjU0LS4wNmwuMjU1LjA3NC4wMzQuMDFhLjc0Ljc0IDAgMCAxIC42NzQuMDc3bC4zOC4yNThjLjEuMDY5LjE4LjE2LjIzLjI2NmwuNTI4LjExNS4yNjItLjAzNS4wNTItLjAxOGEuNy43IDAgMCAxIC4xMDQtLjE3bC4yMjgtLjI2OGEuNy43IDAgMCAxIC4xNy0uMTQzbC40NDEtLjI2NS4xNzUtLjEzOC0uNTcyLS4zNzRhLjY1LjY1IDAgMCAxLS4zLS41MzFsLS4wMS0uNjM3LS4yMzgtLjIxNGEuNjQuNjQgMCAwIDEtLjIxNy0uNDc1di0uMjMyYzAtLjI2NS4xNjctLjUwMi40MjctLjYwNWwtLjA5My0uMTA1YS42NC42NCAwIDAgMS0uMTYyLS4zODVsLS4wMi0uMjlhMSAxIDAgMCAxIC4wMDEtLjA4Mi43NDMuNzQzIDAgMCAxLS44MjQtLjAxM2wtLjIwMS0uMTQ0YS42NC42NCAwIDAgMS0uMjMtLjc2bC4xMDctLjI1OS4wMy0uMzM0YS42My42MyAwIDAgMSAuMTEtLjMwM2wuNDQ3LS42NC40NjEtLjU2MWEuNi42IDAgMCAxIC4wMS0uMjMyLjY2LjY2IDAgMCAxIC4zNi0uNDRsLjIzOC0uMTE2YS43LjcgMCAwIDEgLjI1Mi0uMDcxbC0uMDEyLS42ODlhLjYuNiAwIDAgMSAuMDQtLjIzbC4yMjctLjYxNS4wMi0uMjE0YS42LjYgMCAwIDEgLjAzOS0uMTY0IDEgMSAwIDAgMS0uMDgzLS4wMzZsLS4xNzktLjA5LS41MjYuMDVhLjczLjczIDAgMCAxLS42MTQtLjIzOWwtLjM0OC0uNC0uMTA2LjA0MWEuNzQuNzQgMCAwIDEtLjU0My0uMDA1bC0uMTktLjA3Ny0uMDUzLjAwNGEuNzUuNzUgMCAwIDEtLjQ0My0uMTA2bC0uODYtLjU0OGEuNy43IDAgMCAxLS4xMzYtLjExMy43LjcgMCAwIDEtLjItLjAwOGwtLjQ2MS0uMDhhLjY4LjY4IDAgMCAxLS41Ny0uNThsLS4wMTEtLjEwNWEuNy43IDAgMCAxLS40NzUtLjMxNGwtLjAxLS4wMTZhLjcuNyAwIDAgMS0uMjk2LS4xNDZsLS4xNzItLjE0M2EuNy43IDAgMCAxLS4xMTMtLjEyLjcuNyAwIDAgMS0uNTItLjI4NHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi42NDggMS45ODZhLjczLjczIDAgMCAxIC43Ny4yODRsLjIxNy4zMWguMTEzYy4zMTcgMCAuNTkyLjIuNjg0LjQ5OWwuMDM5LjEyNmEuNzIuNzIgMCAwIDEgLjQxLjI1My43LjcgMCAwIDEgLjE4Ny4wNjNsLjI4Ny4xNGEuNy43IDAgMCAxIC4yOTQuMjY3bC4yMzYtLjA1NWEuNzIuNzIgMCAwIDEgLjYwOS4xMy43LjcgMCAwIDEgLjI3My41NTJ2LjI1bC40ODQuMzIzYS43LjcgMCAwIDEgLjMyOC4wNThsLjA3OC4wMzMuMDk5LS4wNGEuNzQuNzQgMCAwIDEgLjQ3NS0uMDIzbC4zODkuMTE0Yy4xMzYuMDQuMjU2LjExOC4zNDYuMjI2bC4yOC4zMzYuMzc0LS4wMzdhLjc0Ljc0IDAgMCAxIC40MS4wNzlsLjIyNi4xMi4zMzEuMDA2Yy4xMzMuMDAzLjI2LjA0LjM3MS4xMWwuMjg5LjE3OWMuMzEyLjE5Ni40MjIuNi4yNS45MmwtLjMxMi41NzgtLjAxNi4xNzRhLjcuNyAwIDAgMS0uMDM0LjE2bC0uMjIyLjYzLjAxNyAxLjA0NWEuNjkuNjkgMCAwIDEtLjI1Ni41NDlsLS40MDcuMzMzYS43LjcgMCAwIDEtLjI0My4xM2wtLjcuODg1Yy4yNC4wNi40NC4yMzguNTEyLjQ4MmwuMDc3LjI1Ni4wOTcuMTIuMjI4LjMzNGEuNjkuNjkgMCAwIDEtLjAxNS44MDFsLjI3LjMxN2EuNy43IDAgMCAxIC4xNjUuNDgzbC0uMDIuMzY0YS43LjcgMCAwIDEtLjI4LjUybC4wNS4wNDhhLjY5LjY5IDAgMCAxIC4wNjEuOTVsLjA4NS4wNTguMDktLjAzMWEuNzIuNzIgMCAwIDEgLjg4OC4zNjVsLjExNy4yNWEuNjkuNjkgMCAwIDEtLjA3OS43MTJsLS4wMzkuMDU1YS42OS42OSAwIDAgMS0uMjQ4LjY0MmwtLjcyLjU4Ny0uMzEyLjE5NmEuNy43IDAgMCAxLS4wNjMuMzE3LjcuNyAwIDAgMS0uNDAyLjM2OWwtLjYzMS4yMjhhMSAxIDAgMCAxLS4xNDkuMDM3bC0uNDcyLjA2NmEuNy43IDAgMCAxLS4yNzQtLjAxM2wtLjk3LS4yMjItLjY0NS0uMTg1LS4wNS0uMDE2YS43My43MyAwIDAgMS0uNDI5LS4wNzhsLS4yMjItLjEyYS43My43MyAwIDAgMS0uNTI4LS4wOTZsLS42MDguMzYtLjE5Mi4zOC4xODcuNjQzYS43LjcgMCAwIDEtLjA2OC41NC43MS43MSAwIDAgMS0uNDMzLjMyOGwtLjc2OC4yYS43LjcgMCAwIDEtLjE4NC4wMjRsLS4xMDItLjAwOC0uNjQ0LS4xMTItLjI5Mi4wNThhLjc0Ljc0IDAgMCAxLS40NS0uMDUzbC0uMzQ0LS4xNjRhLjcuNyAwIDAgMS0uMzcyLS40MjhsLS4yODItLjExMy0uMTE4LS4wMjVhLjcyLjcyIDAgMCAxLS42NTIuMjVsLTEuMjE1LS4xNjFhLjcuNyAwIDAgMS0uMjcyLS4wOTNsLS4yMDUtLjEyaC0uMzFhLjcyLjcyIDAgMCAxLS41Mi0uMjJsLS4yMDgtLjIxNy0uNjk2LS4yOTRhLjcuNyAwIDAgMS0uMzQtLjI5OGwtLjE0MS0uMjQ1LS4yOTgtLjE2MWEuNjkzLjY5MyAwIDAgMS0uMjA4LTEuMDU5bC40NjQtLjU1My4yNTctMS4zOGExIDEgMCAwIDEgLjAyNC0uMDkyLjcuNyAwIDAgMS0uMDQtLjMyOWwuMjEzLTEuODIyYTEgMSAwIDAgMSAuMDE5LS4xLjY5LjY5IDAgMCAxIC4xMzgtLjg1Ny43LjcgMCAwIDEtLjA3NS0uMjE2bC0uMzI4LS4xNjVhLjcuNyAwIDAgMS0uMjQ3LS4yMDZsLS41NTktLjcyOGEuNy43IDAgMCAxLS4xMjYtLjI2NWwtLjE2NS0uNzM3LS4wMDItLjAwOC0uMDc0LS4wNWEuNy43IDAgMCAxLS4xNjItLjE1MWwtLjI0LS4zMTMtMS4zNDMtLjUyNGgtLjM4NmEuNzIuNzIgMCAwIDEtLjYxNy0uMzQ3bC0uMTY0LS4yNzVhLjcuNyAwIDAgMS0uMDgzLS40OTUuNy43IDAgMCAxLS4yNzYtLjM1TDEuNzU0IDguMWEuNjk1LjY5NSAwIDAgMSAuMzczLS44NjVsMS4wMTctLjQ2NmEuNy43IDAgMCAxIC4yNDEtLjA2M2wxLjQwMS0uMTI0YS43NC43NCAwIDAgMSAuNTc0LjIwN2wuMjU5LjI1OS4wNTQtLjAyMWEuNzMuNzMgMCAwIDEgLjM5NC0uMDM2bC4xODcuMDMzLS4yNTMtLjU5Ni0uMTktLjc1N2EuNy43IDAgMCAxIC4xMi0uNTgzLjcxLjcxIDAgMCAxIC41MzUtLjI4NGwuNTc0LS4wMjlhLjcuNyAwIDAgMSAuNTU4LjIyMmwuNDkzLjUxOS42MzkuMTIzLjAwNy0uMDc5YS43LjcgMCAwIDEgLjQ4Mi0uNjA1bDEuMjEzLS40MDkuMzI1LS4yOTItLjA0Ni0uNzFhLjcuNyAwIDAgMSAuMDYtLjMzMWwuMjU0LS41NDVhLjcuNyAwIDAgMSAuNDctLjM4OHptLS4xODggMS45NzgtLjMzLjA4MS0uMDM2LjA3My4wNTUuODE2Yy4wMTMuMi0uMDcuMzkyLS4yMjcuNTI3bC0uNjczLjU3OGEuNy43IDAgMCAxLS4yNDkuMTM4bC0uNzM3LjIzOC4yMjguMTU3LS4yODMuMTM1YS42OC42OCAwIDAgMS0uMzQ3LjM3OGwtLjQ4My4yM2EuNzYuNzYgMCAwIDEtLjQ1LjA2bC0xLjE5LS4yMnYuMDA2bC4wNTcuNzk5Yy4wMjQuMzQyLS4yMy42NC0uNTkuNjk0bC0uMzA0LjA0NGEuNy43IDAgMCAxLS4yMzYtLjAwM2wtLjU4OS0uMS0uMjk5LjExYS43My43MyAwIDAgMS0uNzU1LS4xNTJsLS4zNDYtLjMzLS45MjMuMDc4LS4wMzkuMDE3Yy4xNS4xMy4yMy4zMTYuMjIyLjUwNWwuMDEuMDAzIDEuNjI2LjYwOHEuMTg1LjA3Mi4zLjIxNWwuMjA3LjI1N2EuNzUuNzUgMCAwIDEgLjM5Ni4wNzlsLjM5OC4yMDRjLjE2LjA4My4yOC4yMjMuMzMzLjM4NWwuNTUzLjI4NS0uNTk1LjE5N2EuNy43IDAgMCAxLS4zMTYuMjk5bC4zNS40MzYuNjE2LjI5NmEuNjQ1LjY0NSAwIDAgMSAuMzYyLjczNWwtLjAwNy4wMjguMTM0LjIzNmMuMTA3LjE5LjEwNy40MTEuMDEuNTk2bC4wNTcuMDQ0YS42Ny42NyAwIDAgMSAuMjE4LjMwNGwuMzg3IDEuMWEuNjIuNjIgMCAwIDEtLjAzNi40OTVsLjI2Mi43NDYtLjcyMi0uMzk4YS43LjcgMCAwIDEtLjI3Mi4wMTIuNi42IDAgMCAxLS4wODUuMTc3bC0uMzA1LjQ1MS0uMjYgMS4zMzVhLjY0LjY0IDAgMCAxLS4xNS4zMDFsLS4wNzUuMDg3YTEgMSAwIDAgMSAuMDQyLjA2M2wuMTIuMTk3LjYuMjQyYy4wOTMuMDQuMTY4LjA5LjIzMy4xNTRsLjA5Ny4wOTZoLjE5YS43NC43NCAwIDAgMSAuMzUzLjA5bC4yNTEuMTM5LjM4NC4wNDhhLjcuNyAwIDAgMSAuMTM2LS4xMzkuNzQuNzQgMCAwIDEgLjU4LS4xMzRsLjk4MS4yMDkuNjkuMjYzYS43LjcgMCAwIDEgLjM3LjMyOGwuMDMzLS4wMDdhMSAxIDAgMCAxIC4xNC0uMDEzbC4xMDMuMDA4LjUwNi4wODQtLjA1LS4xNjRhLjYyLjYyIDAgMCAxIC4wNDgtLjQ3NWwuMzk3LS43NTNhLjY3LjY3IDAgMCAxIC4yNjgtLjI3M2wxLjE2NS0uNjU4YS43My43MyAwIDAgMSAuNjcyLS4wMjYuNzQuNzQgMCAwIDEgLjU0LS4wNmwuMjU1LjA3NC4wMzQuMDFhLjc0Ljc0IDAgMCAxIC42NzQuMDc3bC4zOC4yNThjLjEuMDY5LjE4LjE2LjIzLjI2NmwuNTI4LjExNS4yNjItLjAzNS4wNTItLjAxOGEuNy43IDAgMCAxIC4xMDQtLjE3bC4yMjgtLjI2OGEuNy43IDAgMCAxIC4xNy0uMTQzbC40NDEtLjI2NS4xNzUtLjEzOC0uNTcyLS4zNzRhLjY1LjY1IDAgMCAxLS4zLS41MzFsLS4wMS0uNjM3LS4yMzgtLjIxNGEuNjQuNjQgMCAwIDEtLjIxNy0uNDc1di0uMjMyYzAtLjI2NS4xNjctLjUwMi40MjctLjYwNWwtLjA5My0uMTA1YS42NC42NCAwIDAgMS0uMTYyLS4zODVsLS4wMi0uMjlhMSAxIDAgMCAxIC4wMDEtLjA4Mi43NDMuNzQzIDAgMCAxLS44MjQtLjAxM2wtLjIwMS0uMTQ0YS42NC42NCAwIDAgMS0uMjMtLjc2bC4xMDctLjI1OS4wMy0uMzM0YS42My42MyAwIDAgMSAuMTEtLjMwM2wuNDQ3LS42NC40NjEtLjU2MWEuNi42IDAgMCAxIC4wMS0uMjMyLjY2LjY2IDAgMCAxIC4zNi0uNDRsLjIzOC0uMTE2YS43LjcgMCAwIDEgLjI1Mi0uMDcxbC0uMDEyLS42ODlhLjYuNiAwIDAgMSAuMDQtLjIzbC4yMjctLjYxNS4wMi0uMjE0YS42LjYgMCAwIDEgLjAzOS0uMTY0IDEgMSAwIDAgMS0uMDgzLS4wMzZsLS4xNzktLjA5LS41MjYuMDVhLjczLjczIDAgMCAxLS42MTQtLjIzOWwtLjM0OC0uNC0uMTA2LjA0MWEuNzQuNzQgMCAwIDEtLjU0My0uMDA1bC0uMTktLjA3Ny0uMDUzLjAwNGEuNzUuNzUgMCAwIDEtLjQ0My0uMTA2bC0uODYtLjU0OGEuNy43IDAgMCAxLS4xMzYtLjExMy43LjcgMCAwIDEtLjItLjAwOGwtLjQ2MS0uMDhhLjY4LjY4IDAgMCAxLS41Ny0uNThsLS4wMTEtLjEwNWEuNy43IDAgMCAxLS40NzUtLjMxNGwtLjAxLS4wMTZhLjcuNyAwIDAgMS0uMjk2LS4xNDZsLS4xNzItLjE0M2EuNy43IDAgMCAxLS4xMTMtLjEyLjcuNyAwIDAgMS0uNTItLjI4NHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-header-territories{height:26px;position:absolute;width:26px;z-index:2}.gpf-btn-icon-header-territories{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNOC42NjcgMTUuMzMzIDYgMTIuNjY3aDUuMzMzek04LjY2NyAybDIuNjY2IDIuNjY3SDZ6bTAgOGExLjMzMyAxLjMzMyAwIDEgMSAwLTIuNjY3IDEuMzMzIDEuMzMzIDAgMCAxIDAgMi42NjdNMiA4LjY2NyA0LjY2NyA2djUuMzMzem0xMy4zMzMgMC0yLjY2NiAyLjY2NlY2eiIvPjwvc3ZnPg==);background-position:50%;background-repeat:no-repeat;background-size:auto auto}.gpf-panel__body_territories{max-height:300px;overflow:auto}.gpf-panel__title_territories{color:#101092;font-size:1rem;font-weight:400;margin:0;padding:12px 15px;position:relative;right:-16px}.gpf-panel__header_territories{align-content:center;align-items:center;background:#e3e3fd;display:flex;flex-direction:row;height:48px}#GPterritoriesPanelClose{right:0;top:0}.gpf-tile{height:150px;width:150px}.tiles-reduce div.fr-tile{height:unset;padding:unset;width:unset}.fr-tile:hover{background-color:var(--background-contrast-grey)}.fr-tile__title:before{background-image:unset}.gpf-tile__header{align-items:center;display:flex;flex-direction:column}.territories-entries{display:grid}.tiles-direction.tiles-0{grid-template-columns:repeat(3,1fr);max-height:none!important}.tiles-direction.tiles-1{grid-template-columns:repeat(1,1fr)}.tiles-direction.tiles-2{grid-template-columns:repeat(2,1fr)}.tiles-direction.tiles-3{grid-template-columns:repeat(3,1fr)}.tiles-direction.tiles-4{grid-template-columns:repeat(4,1fr)}div.fr-tile div.fr-tile__header div.fr-tile__icon,div.fr-tile div.fr-tile__header div.fr-tile__thumbnail{display:block}.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__icon,.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__thumbnail{display:none}.fr-tile__icon{background-position:50%;background-repeat:no-repeat;background-size:auto auto;height:50px;width:50px}.tiles-icon div.fr-tile div.fr-tile__header div.fr-tile__thumbnail,.tiles-thumbnail div.fr-tile div.fr-tile__header div.fr-tile__icon{display:none}@media (max-width:576px){.tiles-direction.tiles-4{grid-template-columns:repeat(3,1fr)}}@media (max-width:382px){.tiles-direction.tiles-0,.tiles-direction.tiles-3,.tiles-direction.tiles-4{grid-template-columns:repeat(2,1fr)}}button[id^=GPshowControlListPicto-][aria-pressed=true]+dialog{width:370px}div[id^=GPcontrolList-] .GPshowOpen>span{font-size:32px;position:absolute;transform:translate(-5px,-2px)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content{display:flex;flex-direction:column;overflow:auto;padding:0 1.5rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content:not(:has(~.gpf-panel__footer)){padding-bottom:2rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div{align-items:center;column-gap:1rem;display:flex;flex-direction:row;padding:.5rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div:hover,dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div:hover>button{background-color:var(--hover)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button{height:40px;width:40px}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button:after{background-color:var(--text-default-grey)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>div{display:flex;flex-direction:column}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>div>span:nth-child(2){color:var(--text-mention-grey);font-size:.75rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__footer{background-color:var(--background-lifted-grey);padding:1rem 2rem 2rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__footer>button{justify-content:center;width:100%} + */:root{--size-per-row:44px}.gpf-widget{padding:2px;pointer-events:auto;position:absolute}.gpf-widget-button{width:40px}.gpf-panel{background-color:unset;max-height:100%;position:relative;width:max-content}.gpf-panel form{overflow:auto;padding:0 2rem 2rem}.gpf-panel--hidden{display:none}.gpf-panel__body{display:flex;flex:1 1 auto;flex-direction:column;max-height:100%!important;min-height:0;overflow:unset;position:relative}.gpf-panel__title{text-align:left}.gpf-panel__footer{background-color:transparent;justify-content:center;margin-top:0;padding:0}.gpf-panel__footer>input[type=submit]{width:100%}.gpf-panel__content{margin-bottom:unset;padding:unset}.gpf-panel--close,.gpf-panel--info,.gpf-panel--reduce{cursor:pointer;position:relative}.gpf-flex{align-items:center;flex-direction:row}.gpf-flex,.gpf-flex-column{display:flex;justify-content:space-evenly}.gpf-flex-column{flex-direction:column}.gpf-flex-padding{padding:5px}.gpf-hidden{display:none;opacity:0;visibility:hidden}.gpf-visible{display:block;opacity:100%;visibility:visible}.gpf-waiting{background-color:hsla(0,0%,100%,.9);border-radius:4px;bottom:0;font-size:1.5em;font-weight:700;height:inherit;left:0;overflow:hidden;position:absolute;right:0;top:80px}.gpf-waiting--hidden{display:none}.gpf-waiting--visible{display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;z-index:4000}.gpf-waiting_info{margin:auto}.gpf-btn-icon.gpf-btn--secondary,.gpf-btn-icon.gpf-btn--tertiary{background-color:var(--background-default-grey)}.gpf-widget>.gpf-btn-icon[aria-pressed=true]{background-color:var(--hover-tint);position:relative}.gpf-widget:has(>.gpf-btn-icon[aria-pressed=true]):after{background-color:var(--background-action-high-blue-france);content:"";height:40px;left:44px;position:absolute;transform:translateY(-40px);width:3px}@supports(-moz-appearance:none){.gpf-widget:has(.gpf-btn-icon[aria-pressed=true]):after{transform:unset}}.gpf-widget>.gpf-btn-icon[aria-label]:hover:before{background-image:conic-gradient(from 56.31deg at 0 50%,transparent 0deg,var(--background-overlap-grey) 0deg,var(--background-overlap-grey) 67.38deg,transparent 67.38deg),conic-gradient(from 56.31deg at 0 50%,transparent 0deg,var(--border-default-grey) 0deg,var(--border-default-grey) 67.38deg,transparent 67.38deg),linear-gradient(90deg,var(--border-default-grey),var(--border-default-grey)),linear-gradient(90deg,var(--background-overlap-grey),var(--background-overlap-grey));background-position:.125rem 50%,0 50%,.375rem 100%,.375rem 100%;background-repeat:no-repeat;background-size:.375rem .5rem,.375rem .5rem,1px,100%,calc(100% - .5rem) 100%;color:var(--text-default-grey);content:attr(aria-label);filter:drop-shadow(0 2px 6px rgba(0,0,18,.16));filter:drop-shadow(var(--overlap-shadow));font-size:.75rem;padding:.5rem .5rem .5rem 1.25rem;position:absolute;top:0;white-space:nowrap;width:fit-content}.position-container-bottom-left .gpf-widget>.gpf-btn-icon[aria-label]:hover:before,.position-container-top-left .gpf-widget>.gpf-btn-icon[aria-label]:hover:before{transform:translateX(24px)}.position-container-bottom-right .gpf-widget>.gpf-btn-icon[aria-label]:hover:before,.position-container-top-right .gpf-widget>.gpf-btn-icon[aria-label]:hover:before{background-image:conic-gradient(from 236.31deg at 100% 50%,transparent 0deg,var(--background-overlap-grey) 0deg,var(--background-overlap-grey) 67.38deg,transparent 67.38deg),conic-gradient(from 236.31deg at 100% 50%,transparent 0deg,var(--border-default-grey) 0deg,var(--border-default-grey) 67.38deg,transparent 67.38deg),linear-gradient(90deg,var(--border-default-grey),var(--border-default-grey)),linear-gradient(90deg,var(--background-overlap-grey),var(--background-overlap-grey));background-position:calc(100% - .125rem) 50%,100% 50%,calc(100% - .375rem) 0,calc(100% - .375rem) 0;background-size:.375rem .5rem,.375rem .5rem,1px 100%,100%;padding:.5rem 1.25rem .5rem .5rem;transform:translateX(calc(-100% - 16px))}.gpf-btn--secondary,.gpf-btn--tertiary{position:relative}.gpf-btn--secondary:after,.gpf-btn--tertiary:after{background-color:var(--text-action-high-blue-france);content:"";height:100%;left:0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask:linear-gradient(#0000,#0000);mask:linear-gradient(#0000,#0000);position:absolute;top:0;width:100%}.gpf-btn--secondary:disabled:after,.gpf-btn--tertiary:disabled:after{background-color:var(--text-disabled-grey)}.position-container-top-left .gpf-button-no-gutter,.position-container-top-right .gpf-button-no-gutter{margin-bottom:-5px}.position-container-bottom-left .gpf-button-no-gutter,.position-container-bottom-right .gpf-button-no-gutter{margin-top:-5px}.gpf-btn-icon-close{float:right;position:absolute;right:.5rem;top:.5rem}.gpf-btn-icon-return{float:left;left:.5rem;position:absolute;top:.5rem}.gpf-btn-icon-return:after{-webkit-mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAANVJREFUKJGd07EuREEYxfGzK0hsQSOhkKxoZButR9B5FJ3Gc2gUKPU6CkGx0XgGuhsaDVH5aSxjc+9u9p7kK74z8/9OJjPTQdqq25qcAPeTDKbSGK8BhjitWftX48nbSU6S7CZZSbKaZDnJ3LTkLdz50xsecYsz7GGxTC7hY3xp1ieO0K2D13FTbH7BPR5Q/QyusFMHBxvFgAvMYwE9HOIDB01wsFmcs/SXcInzSXCwhn6Nv4/rpqsaqUryVOMPkzyPmlmf52uSq1HTMfvH6CV5bwv/6htI1GwnhVkfqAAAAABJRU5ErkJggg==) center no-repeat;mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAANVJREFUKJGd07EuREEYxfGzK0hsQSOhkKxoZButR9B5FJ3Gc2gUKPU6CkGx0XgGuhsaDVH5aSxjc+9u9p7kK74z8/9OJjPTQdqq25qcAPeTDKbSGK8BhjitWftX48nbSU6S7CZZSbKaZDnJ3LTkLdz50xsecYsz7GGxTC7hY3xp1ieO0K2D13FTbH7BPR5Q/QyusFMHBxvFgAvMYwE9HOIDB01wsFmcs/SXcInzSXCwhn6Nv4/rpqsaqUryVOMPkzyPmlmf52uSq1HTMfvH6CV5bwv/6htI1GwnhVkfqAAAAABJRU5ErkJggg==) center no-repeat}.gpf-btn-icon{caret-color:transparent;width:inherit}.gpf-btn-icon-reset:after{background-color:var(--text-action-high-blue-france);-webkit-mask:linear-gradient(#fff 0 0) top /100% 1px,linear-gradient(#fff 0 0) bottom/100% 1px,linear-gradient(#fff 0 0) left /1px 100%,linear-gradient(#fff 0 0) right /1px 100%,url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=) -25px center;mask:linear-gradient(#fff 0 0) top /100% 1px,linear-gradient(#fff 0 0) bottom/100% 1px,linear-gradient(#fff 0 0) left /1px 100%,linear-gradient(#fff 0 0) right /1px 100%,url(data:image/png;base64,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IHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo4ZDc5MTIyYy0xNDNiLTQwMDItOGExOS02ODEyYTA4ZmRiMzgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2FlNWZmMzEtNzVlYS00NWQ0LWI5MzktOWVkYmE3N2M0YjQ3IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NDU3NDBkYTQtYmZlMS00YWFlLThjMDEtZDliZDVhOWY0ZTBiIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5MDc3OTM4NDkxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjJmYTMwMGMtZWRlMy00YWNhLTkyODQtYmRiMTI4NDFiMWIxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xOVQxNzowNDozNyswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz69OJaNAAAABmJLR0QAAAAAAJF+SxitAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AQTDwQlpds7gAAAAYdJREFUWMPtl11OwkAURs8tK2AZvrknNVJB3EK3wE/9gz355jZ4N6GfDxSc1DJMaUs0mfPU0Ena03uZ7w5EIpFIJBKJ/CUk3Ul6k5R41pikhaRJd0+eCWYiyxLP29lhXQAWIgu8AgmwBu7NrKjKAgtgDAiYmtmyvaxDthmQZcVv2XnltyevUxLw5Gtn3S2wLAVd2byU3X/Eq87bLBtud4I+2dOECE8At1op8C4pcSqbOvdXwGN7w2nNu82LXXsfkc02g9Yt7VRxXsrvWQNfwENFdlRt+Ra7R3gVa1v+TGGPNP3JNpAOlG0kfEK6djO7iHQD2dD/cMhHMv4JScPqLpzd2OUG8OZ0by2dDbf+nD5D+IjsqowjnMjqWDpw02ognbSQHZXxs+xH2hc9NZEVKB0yaeWV6HkBxmamyuDhZvGzmY07nbQO2WzyV7/9pPUBFE5lJ3tZgPJ67FRawGf3k9Zm8CMLu+tp0svOJimVlLsj5ZHDQy4p7fzwgKyrw0MkEolEIpHIxfgGwh3Z0ws3xlMAAAAASUVORK5CYII=) -25px center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.gpf-btn-icon-info{height:40px;width:40px}.gpf-input{padding-left:5px}.gpf-radio-btn-group{display:flex;gap:1em}.gpf-panel__advancedlist,.gpf-panel__list{background-color:#fff;border:1px solid #999;max-height:140px;overflow-y:hidden;position:absolute;width:inherit;z-index:2}.gpf-panel__advancedlist{border-top:none;font-size:.9em;width:calc(100% - 28px)}.gpf-panel__items:hover{background-color:#cedbef;color:#000}.gpf-panel__items{color:#5e5e5e;cursor:pointer;font-size:1em;height:28px;line-height:16px;overflow:hidden;padding:6px 10px;text-overflow:ellipsis;white-space:nowrap;width:100%}.gpf-panel:after,.gpf-panel:before{flex:0;height:unset}:root{--size-per-row:50px}.position-container-bottom-left,.position-container-bottom-right,.position-container-top-left,.position-container-top-right{display:flex;flex-direction:column;height:calc(100% - 8px);justify-content:flex-start;min-height:var(--size-per-row);position:absolute;width:calc(var(--size-per-row) + 4px)}.position-container-top-left,.position-container-top-right{top:4px}.position-container-top-left{float:left;left:8px}.position-container-top-right{float:right;right:4px}.position-container-bottom-left,.position-container-bottom-right{bottom:4px;justify-content:flex-end}.position-container-bottom-right{float:right;right:4px}.position-container-bottom-left{float:left;left:8px}.gp-feature-info-div{background-color:var(--background-default-grey);bottom:17px;box-shadow:0 0 5px var(--text-default-grey);font-size:.75em;max-width:calc(100vw - 80px);padding:10px;position:relative}.gp-feature-info-div:before{border-left:14px solid transparent;border-right:14px solid transparent;border-top:15px solid var(--background-default-grey);bottom:-15px;content:"";left:50%;margin-left:-14px;position:absolute}.gp-feature-info-div .closer{background-color:var(--background-default-grey);border:none;border-bottom-right-radius:10px;border-top-right-radius:10px;cursor:pointer;display:block;height:30px;position:absolute;right:0;top:0;width:30px}.gp-feature-info-div .closer:after{background-color:var(--text-action-high-blue-france);content:"";height:100%;left:0;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwMDA5MSIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBkPSJNMCA4NDEuOWg1OTUuM1YwSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PGcgZmlsbD0iIzAwMDA5MSIgY2xpcC1wYXRoPSJ1cmwoI2EpIiB0cmFuc2Zvcm09Im1hdHJpeCguMDIzNTIgMCAwIC0uMDIzNTIgMSAxOCkiPjxwYXRoIGQ9Im0zNjguNCA0MjAuOSAyMTIuMiAyMTIuMmMxOS41NCAxOS41NCAxOS41NCA1MS4yMSAwIDcwLjc1cy01MS4yMSAxOS41NC03MC43NSAwbC0yMTIuMi0yMTIuMy0yMTIuMiAyMTIuM2MtMTkuNTQgMTkuNTQtNTEuMjEgMTkuNTQtNzAuNzUgMC0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1TDIyNyA0MjAuOSAxNC44IDIwOC43Yy0xOS41My0xOS41NC0xOS41My01MS4yMSAwLTcwLjc1IDE5LjU0LTE5LjU0IDUxLjIxLTE5LjU0IDcwLjc1IDBsMjEyLjIgMjEyLjIgMjEyLjItMjEyLjJjMTkuNTMtMTkuNTQgNTEuMjEtMTkuNTQgNzAuNzUgMHMxOS41NCA1MS4yMSAwIDcwLjc1TDM2OC41IDQyMC45eiIvPjwvZz48L3N2Zz4=) center no-repeat;-webkit-mask-size:14px 14px;mask-size:14px 14px;position:absolute;top:0;width:100%}.gp-features-content-div{max-height:340px;max-width:420px;min-width:260px;overflow:auto}.gp-features-content-div h5,.gp-features-content-div h6,.gp-features-content-div p,.gp-features-content-div ul{margin:0}.gp-features-content-div ul{list-style-type:none;padding:0}.geoportail-popup-content h5,.geoportail-popup-content h6,.geoportail-popup-content p,.gp-att-description-div,.gp-att-name-div,.gp-att-others-div{padding:0 10px}.geoportail-popup-content h5:not(:last-child),.geoportail-popup-content h6:not(:last-child),.geoportail-popup-content p:not(:last-child),.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){margin-bottom:15px}.geoportail-popup-content h5:last-child,.geoportail-popup-content h6:last-child,.geoportail-popup-content p:last-child,.gp-att-description-div:last-child,.gp-att-name-div,.gp-att-others-div:last-child{margin-bottom:10px}.geoportail-popup-content h5:first-child,.geoportail-popup-content h6:first-child,.geoportail-popup-content p:first-child,.gp-att-description-div:first-child,.gp-att-name-div:first-child,.gp-att-others-div:first-child{margin-top:10px}.gp-att-name-div,.gp-features-content-div h5{color:#0b6ba7;font-size:1.2em;font-weight:700;padding-right:35px;text-transform:uppercase}.gp-features-content-div h6{font-size:1.1em}.gp-att-description-div:not(:last-child),.gp-att-others-div:not(:last-child){border-bottom:1px dotted #666;padding-bottom:10px}.ol-disabled{--idle:transparent;--hover:var(--background-disabled-grey-hover);--active:var(--background-disabled-grey-active);background-color:var(--background-disabled-grey);color:var(--text-disabled-grey);cursor:not-allowed;display:block}.ol-scale-bar,.ol-scale-line{z-index:-1}.fr-collapse{--collapse-max-height:none}.fr-collapse:not(.fr-collapse--expanded):not(.fr-collapsing){--collapse-max-height:0}@media (max-width:576px){.gpf-mobile-fullscreen>button[aria-pressed=true]~dialog{width:100vw!important}.gpf-mobile-fullscreen form div,.gpf-mobile-fullscreen form p{margin:auto;text-align:center}.gpf-mobile-fullscreen .gpf-mobile-form{height:100vh;max-height:unset}.position-container-bottom-left .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-bottom-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-top-left .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-top-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog{left:-8px!important;right:unset!important;top:-4px!important}.position-container-bottom-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog,.position-container-top-right .gpf-mobile-fullscreen>button[aria-pressed=true]~dialog{left:unset!important;right:-4px!important}}.gpf-btn-icon-drawing:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI1Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTUuMDQgOS40MzcgMTMuNzA0IDguMWwtOC44MTEgOC44MXYxLjMzOUg2LjIzek0xNi4zNzggOC4xbDEuMzM4LTEuMzM4LTEuMzM4LTEuMzM3TDE1LjA0IDYuNzZ6TTcuMDE0IDIwLjE0SDN2LTQuMDEzbDEyLjcxLTEyLjcxYS45NDYuOTQ2IDAgMCAxIDEuMzM3IDBsMi42NzYgMi42NzZjLjM3LjM3LjM3Ljk2OSAwIDEuMzM4eiIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI1Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTUuMDQgOS40MzcgMTMuNzA0IDguMWwtOC44MTEgOC44MXYxLjMzOUg2LjIzek0xNi4zNzggOC4xbDEuMzM4LTEuMzM4LTEuMzM4LTEuMzM3TDE1LjA0IDYuNzZ6TTcuMDE0IDIwLjE0SDN2LTQuMDEzbDEyLjcxLTEyLjcxYS45NDYuOTQ2IDAgMCAxIDEuMzM3IDBsMi42NzYgMi42NzZjLjM3LjM3LjM3Ljk2OSAwIDEuMzM4eiIvPjwvc3ZnPg==) center no-repeat}.gp-label-div,.gp-styling-div{transform:translateY(20px);width:370px}.gp-label-div textarea{margin-bottom:1rem;max-width:100%}.gp-label-div input{width:100%}.gp-styling-option.fr-range--sm[data-fr-js-range]:after,.gp-styling-option.fr-range--sm[data-fr-js-range]:before{top:1.74rem}.drawing-tool{width:40px}.drawing-tool-active{background-color:var(--hover-tint)}button[id^=drawing-tool-point-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOCAxNi40ODUgNC4yNDMtNC4yNDJhNiA2IDAgMSAwLTguNDg2IDB6bTUuNjU3LTIuODI4TDggMTkuMzE0bC01LjY1Ny01LjY1N2E4IDggMCAxIDEgMTEuMzE0IDBNMSAyMGgxNHYySDF6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOCAxNi40ODUgNC4yNDMtNC4yNDJhNiA2IDAgMSAwLTguNDg2IDB6bTUuNjU3LTIuODI4TDggMTkuMzE0bC01LjY1Ny01LjY1N2E4IDggMCAxIDEgMTEuMzE0IDBNMSAyMGgxNHYySDF6Ii8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-line-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zLjQxNCAxNCAxMy41NTYgMy44NThsLTEuNDE0LTEuNDE0TDIgMTIuNTg2VjE0em0uODI5IDJIMHYtNC4yNDNMMTEuNDM1LjMyMmExIDEgMCAwIDEgMS40MTQgMGwyLjgyOSAyLjgyOWExIDEgMCAwIDEgMCAxLjQxNHpNMCAxOGgxOHYySDB6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zLjQxNCAxNCAxMy41NTYgMy44NThsLTEuNDE0LTEuNDE0TDIgMTIuNTg2VjE0em0uODI5IDJIMHYtNC4yNDNMMTEuNDM1LjMyMmExIDEgMCAwIDEgMS40MTQgMGwyLjgyOSAyLjgyOWExIDEgMCAwIDEgMCAxLjQxNHpNMCAxOGgxOHYySDB6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat}button[id^=drawing-tool-polygon-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtMTEgMy4wMyA4LjUzIDYuMTk4LTMuMjU4IDEwLjAyOEg1LjcyOUwyLjQ3IDkuMjI4em0xMC43NDcgNS40NzhMMTEgLjcuMjUzIDguNTA4bDQuMTA1IDEyLjYzNGgxMy4yODR6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtMTEgMy4wMyA4LjUzIDYuMTk4LTMuMjU4IDEwLjAyOEg1LjcyOUwyLjQ3IDkuMjI4em0xMC43NDcgNS40NzhMMTEgLjcuMjUzIDguNTA4bDQuMTA1IDEyLjYzNGgxMy4yODR6Ii8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-text-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNyAwYTEgMSAwIDAgMSAxIDF2My43NTdsLTIgMlYySDJ2MTZoMTR2LTIuNzU4bDItMlYxOWExIDEgMCAwIDEtMSAxSDFhMSAxIDAgMCAxLTEtMVYxYTEgMSAwIDAgMSAxLTF6bTEuNzc4IDYuODA4IDEuNDE0IDEuNDE0TDEyLjQxNCAxNmwtMS40MTYtLjAwMi4wMDItMS40MTJ6TTEwIDEwdjJINXYtMnptMy00djJINVY2eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNyAwYTEgMSAwIDAgMSAxIDF2My43NTdsLTIgMlYySDJ2MTZoMTR2LTIuNzU4bDItMlYxOWExIDEgMCAwIDEtMSAxSDFhMSAxIDAgMCAxLTEtMVYxYTEgMSAwIDAgMSAxLTF6bTEuNzc4IDYuODA4IDEuNDE0IDEuNDE0TDEyLjQxNCAxNmwtMS40MTYtLjAwMi4wMDItMS40MTJ6TTEwIDEwdjJINXYtMnptMy00djJINVY2eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-edit-]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0xMi4xMjEgNC4yMjIgNS42NTcgNS42NTctLjcwNyA2LjM2NGMtNi4xMjggMS40MTQtOS43ODIgMi40NzUtMTMuMDggNS4zMDNMMi41OTQgMjAuMTVjMy43MjItMy4zMzEgNy45OTUtNC4zMjggMTIuNjQzLTUuNTJsLjQ0Ni00LjAxOC00LjI5Ny00LjI5Ny00LjAxOC40NDZjLTEuMTkyIDQuNjQ4LTIuMTg5IDguOTItNS41MiAxMi42NDNMLjQ1NCAxOC4wMWMyLjgyOC0zLjMgMy44OS02Ljk1MyA1LjMwMy0xMy4wODF6bS0xLjQxNCA3LjA3QTIgMiAwIDAgMSA3Ljg4IDE0LjEyYTIgMiAwIDEgMSAyLjgyNy0yLjgyOG0zLjg5LTEwLjI1MiA2LjM0NiA2LjM0NmEuNS41IDAgMCAxLS4yNzcuODQ4bC0xLjQ3NC4yMy01LjY1Ni01LjY1Ni4yMTItMS40ODVhLjUuNSAwIDAgMSAuODQ4LS4yODMiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDIyIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0xMi4xMjEgNC4yMjIgNS42NTcgNS42NTctLjcwNyA2LjM2NGMtNi4xMjggMS40MTQtOS43ODIgMi40NzUtMTMuMDggNS4zMDNMMi41OTQgMjAuMTVjMy43MjItMy4zMzEgNy45OTUtNC4zMjggMTIuNjQzLTUuNTJsLjQ0Ni00LjAxOC00LjI5Ny00LjI5Ny00LjAxOC40NDZjLTEuMTkyIDQuNjQ4LTIuMTg5IDguOTItNS41MiAxMi42NDNMLjQ1NCAxOC4wMWMyLjgyOC0zLjMgMy44OS02Ljk1MyA1LjMwMy0xMy4wODF6bS0xLjQxNCA3LjA3QTIgMiAwIDAgMSA3Ljg4IDE0LjEyYTIgMiAwIDEgMSAyLjgyNy0yLjgyOG0zLjg5LTEwLjI1MiA2LjM0NiA2LjM0NmEuNS41IDAgMCAxLS4yNzcuODQ4bC0xLjQ3NC4yMy01LjY1Ni01LjY1Ni4yMTItMS40ODVhLjUuNSAwIDAgMSAuODQ4LS4yODMiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}button[id^=drawing-tool-display]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNNS44MyAxOEEzLjAwMSAzLjAwMSAwIDEgMSAyIDE0LjE3VjUuODNBMy4wMDEgMy4wMDEgMCAxIDEgNS44MyAyaDguMzRBMy4wMDEgMy4wMDEgMCAxIDEgMTggNS44M3Y4LjM0QTMuMDAxIDMuMDAxIDAgMSAxIDE0LjE3IDE4em0wLTJoOC4zNEEzIDMgMCAwIDEgMTYgMTQuMTdWNS44M0EzIDMgMCAwIDEgMTQuMTcgNEg1LjgzQTMgMyAwIDAgMSA0IDUuODN2OC4zNEEzIDMgMCAwIDEgNS44MyAxNk0zIDRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTE0IDBhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTAgMTRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyTTMgMThhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNNS44MyAxOEEzLjAwMSAzLjAwMSAwIDEgMSAyIDE0LjE3VjUuODNBMy4wMDEgMy4wMDEgMCAxIDEgNS44MyAyaDguMzRBMy4wMDEgMy4wMDEgMCAxIDEgMTggNS44M3Y4LjM0QTMuMDAxIDMuMDAxIDAgMSAxIDE0LjE3IDE4em0wLTJoOC4zNEEzIDMgMCAwIDEgMTYgMTQuMTdWNS44M0EzIDMgMCAwIDEgMTQuMTcgNEg1LjgzQTMgMyAwIDAgMSA0IDUuODN2OC4zNEEzIDMgMCAwIDEgNS44MyAxNk0zIDRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTE0IDBhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAybTAgMTRhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyTTMgMThhMSAxIDAgMSAwIDAtMiAxIDEgMCAwIDAgMCAyIi8+PC9zdmc+) center no-repeat}button[id^=drawing-tool-tooltip]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTEuMjQ2IDExSDQuNzU0bC0yIDVILjZMNyAwaDJsNi40IDE2aC0yLjE1NHptLS44LTJMOCAyLjg4NSA1LjU1NCA5ek0yMSA4LjUzNVY4aDJ2OGgtMnYtLjUzNWE0IDQgMCAxIDEgMC02LjkzTTE5IDE0YTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTEuMjQ2IDExSDQuNzU0bC0yIDVILjZMNyAwaDJsNi40IDE2aC0yLjE1NHptLS44LTJMOCAyLjg4NSA1LjU1NCA5ek0yMSA4LjUzNVY4aDJ2OGgtMnYtLjUzNWE0IDQgMCAxIDEgMC02LjkzTTE5IDE0YTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNCIvPjwvc3ZnPg==) center no-repeat}button[id^=drawing-tool-remove]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01IDJWMGgxMHYyaDV2MmgtMnYxNWExIDEgMCAwIDEtMSAxSDNhMSAxIDAgMCAxLTEtMVY0SDBWMnpNNCA0djE0aDEyVjR6bTMgM2gydjhIN3ptNCAwaDJ2OGgtMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01IDJWMGgxMHYyaDV2MmgtMnYxNWExIDEgMCAwIDEtMSAxSDNhMSAxIDAgMCAxLTEtMVY0SDBWMnpNNCA0djE0aDEyVjR6bTMgM2gydjhIN3ptNCAwaDJ2OGgtMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-icon-elevation:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIyIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xMy43NCAxOS44M0gyLjUzTDcuODMgOC42bDMuODUgNy4wNyAxLjcyLS45NC0zLjE2LTUuODEgMi43NC01LjczIDQuMzYgOC41OWMuNTgtLjMgMS4yMS0uNTEgMS44OC0uNjRMMTMuODMuNTRjLS4xNy0uMzMtLjUyLS41Mi0uODktLjU0LS4zNyAwLS43MS4yMi0uODcuNTZMOS4wOSA2LjhsLS40NS0uODNjLS4xOC0uMzItLjUzLS41MS0uODktLjUxLS4zNy4wMS0uNy4yMy0uODYuNTZMLjA5IDIwLjM5YS45ODIuOTgyIDAgMCAwIC44OSAxLjRIMTQuNmE3LjIgNy4yIDAgMCAxLS44Ni0xLjk2Ii8+PHBhdGggZD0iTTE2LjQ4IDEzLjY5djEuNTRoNC45MWwtNS41NiA1LjU1LS4wNy4wNyAxLjA4IDEuMDkgNS42My01LjYzdjQuOTFIMjR2LTcuNTN6Ii8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyNHYyMS45NEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIyIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xMy43NCAxOS44M0gyLjUzTDcuODMgOC42bDMuODUgNy4wNyAxLjcyLS45NC0zLjE2LTUuODEgMi43NC01LjczIDQuMzYgOC41OWMuNTgtLjMgMS4yMS0uNTEgMS44OC0uNjRMMTMuODMuNTRjLS4xNy0uMzMtLjUyLS41Mi0uODktLjU0LS4zNyAwLS43MS4yMi0uODcuNTZMOS4wOSA2LjhsLS40NS0uODNjLS4xOC0uMzItLjUzLS41MS0uODktLjUxLS4zNy4wMS0uNy4yMy0uODYuNTZMLjA5IDIwLjM5YS45ODIuOTgyIDAgMCAwIC44OSAxLjRIMTQuNmE3LjIgNy4yIDAgMCAxLS44Ni0xLjk2Ii8+PHBhdGggZD0iTTE2LjQ4IDEzLjY5djEuNTRoNC45MWwtNS41NiA1LjU1LS4wNy4wNyAxLjA4IDEuMDkgNS42My01LjYzdjQuOTFIMjR2LTcuNTN6Ii8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyNHYyMS45NEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==) center no-repeat}[id^=GPelevationPathPanelInfo]{float:left;left:0;position:absolute;top:0}[id^=GPelevationPathPanel]{height:unset}[id^=GPelevationPathPanelInfo]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDUuMjkyIDUuMjkyIj48ZyBzdHlsZT0ic3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSI+PGNpcmNsZSBjeD0iMTA0LjQ3MSIgY3k9IjQyLjY2NyIgcj0iMi40NDciIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9Ii4zOTciIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIvPjwvZz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTA0Ljk3NiA0My45OWgtMS4wMzR2LS4xNzZoLjA1NWEuMzMuMzMgMCAwIDAgLjE2MS0uMDMuMTMuMTMgMCAwIDAgLjA2Mi0uMDg2IDEgMSAwIDAgMCAuMDEyLS4xNjJ2LS41NjVhLjcuNyAwIDAgMC0uMDE1LS4xNjhxLS4wMTQtLjA1LS4wNzQtLjA3M2EuNy43IDAgMCAwLS4yMDEtLjAyNXYtLjE3NWwuNzgtLjE2NHYxLjE3cTAgLjE2LjA0LjIyLjA0MS4wNTkuMjE0LjA1OXptLS4yMTUtMi4zNjlhLjI3LjI3IDAgMCAxLS4wOC4xOTYuMjcuMjcgMCAwIDEtLjE5Ni4wOC4yNy4yNyAwIDAgMS0uMTk1LS4wODIuMjcyLjI3MiAwIDAgMS0uMDAxLS4zOS4yNy4yNyAwIDAgMSAuMTk2LS4wODFxLjExNiAwIC4xOTcuMDguMDguMDguMDguMTk4eiIgc3R5bGU9ImZpbGw6IzAwMDE5MTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6LjI2NDU4MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDUuMjkyIDUuMjkyIj48ZyBzdHlsZT0ic3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSI+PGNpcmNsZSBjeD0iMTA0LjQ3MSIgY3k9IjQyLjY2NyIgcj0iMi40NDciIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9Ii4zOTciIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAxOTE7c3Ryb2tlLW9wYWNpdHk6MSIvPjwvZz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTA0Ljk3NiA0My45OWgtMS4wMzR2LS4xNzZoLjA1NWEuMzMuMzMgMCAwIDAgLjE2MS0uMDMuMTMuMTMgMCAwIDAgLjA2Mi0uMDg2IDEgMSAwIDAgMCAuMDEyLS4xNjJ2LS41NjVhLjcuNyAwIDAgMC0uMDE1LS4xNjhxLS4wMTQtLjA1LS4wNzQtLjA3M2EuNy43IDAgMCAwLS4yMDEtLjAyNXYtLjE3NWwuNzgtLjE2NHYxLjE3cTAgLjE2LjA0LjIyLjA0MS4wNTkuMjE0LjA1OXptLS4yMTUtMi4zNjlhLjI3LjI3IDAgMCAxLS4wOC4xOTYuMjcuMjcgMCAwIDEtLjE5Ni4wOC4yNy4yNyAwIDAgMS0uMTk1LS4wODIuMjcyLjI3MiAwIDAgMS0uMDAxLS4zOS4yNy4yNyAwIDAgMSAuMTk2LS4wODFxLjExNiAwIC4xOTcuMDguMDguMDguMDguMTk4eiIgc3R5bGU9ImZpbGw6IzAwMDE5MTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6LjI2NDU4MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMS44MjUgLTQwLjAyKSIvPjwvc3ZnPg==) center no-repeat}[id^=GPelevationPathProfil]>#profileElevationByDefault>svg{transform:translateY(1rem)}[id^=GPelevationPathProfil]{height:150px;width:300px}.GPelevationPathProfilWrapper{padding:0 2rem}div[id^=GPelevationPathInformationsContainer]{display:grid;grid-template-columns:50% 50%;padding:0 2rem 1rem;width:calc(300px + 4rem)}.GPelevationPathInformations{display:flex;flex-wrap:wrap;font-size:13px;gap:0 .25rem;margin:0}.GPelevationPathInformations>span{white-space:nowrap}@media (max-width:576px){#GPelevationPathProfil,div[id^=GPelevationPathInformationsContainer]{margin:auto}}.gpf-btn-icon-getfeatureinfo:after,button[id^=GPgetFeatureInfoPicto-][aria-pressed=true]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIyMyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDIzIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik05Ljg2IDE3LjRjMC0uMjguMDItLjU1LjA0LS44MmwtMi41LTEuMjVWMi40M2w0LjY5IDIuMzV2Ni43YTkuMiA5LjIgMCAwIDEgMS45OS0xLjdWNC43MkwxOCAzLjA0di4xOWgtLjAxdjUuMjJhOC43NjggOC43NjggMCAwIDEgMi4wMS4wNFYuNzZjMC0uMDgtLjAyLS4xNi0uMDUtLjI0YS41LjUgMCAwIDAtLjE3LS4xOC42LjYgMCAwIDAtLjIzLS4wOGMtLjA4IDAtLjE3IDAtLjI0LjA0TDEzLjAxIDNsLTYtMy03IDN2MTYuNjFjLS4wMS4wOCAwIC4xNi4wNS4yNC4wNC4wNy4xLjE0LjE2LjE4cy4xNS4wNy4yMy4wOGMuMDggMCAuMTcgMCAuMjQtLjA0bDYuMy0yLjcgMi45OSAxLjVjLS4wOC0uNDgtLjEzLS45Ni0uMTMtMS40NnptLTQuNDUtMS41M0wyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTkuODMgMjAuNHYyaC0ydi0yem0tLjU0LTcuOTdjMS44My4yNCAzLjE1IDEuODYgMy4wMyAzLjdhMy41IDMuNSAwIDAgMS0zLjQ5IDMuMjdoLTF2LTJoMWMuNzkgMCAxLjQ0LS42MSAxLjUtMS40LjA1LS43OS0uNTItMS40OC0xLjMtMS41OS0uNzgtLjEtMS41MS40Mi0xLjY3IDEuMTlsLTEuOTYtLjM5YTMuNDg2IDMuNDg2IDAgMCAxIDMuODktMi43OCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyMi4zM3YyMi40SDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMyIgaGVpZ2h0PSIyMyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIzIDIzIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik05Ljg2IDE3LjRjMC0uMjguMDItLjU1LjA0LS44MmwtMi41LTEuMjVWMi40M2w0LjY5IDIuMzV2Ni43YTkuMiA5LjIgMCAwIDEgMS45OS0xLjdWNC43MkwxOCAzLjA0di4xOWgtLjAxdjUuMjJhOC43NjggOC43NjggMCAwIDEgMi4wMS4wNFYuNzZjMC0uMDgtLjAyLS4xNi0uMDUtLjI0YS41LjUgMCAwIDAtLjE3LS4xOC42LjYgMCAwIDAtLjIzLS4wOGMtLjA4IDAtLjE3IDAtLjI0LjA0TDEzLjAxIDNsLTYtMy03IDN2MTYuNjFjLS4wMS4wOCAwIC4xNi4wNS4yNC4wNC4wNy4xLjE0LjE2LjE4cy4xNS4wNy4yMy4wOGMuMDggMCAuMTcgMCAuMjQtLjA0bDYuMy0yLjcgMi45OSAxLjVjLS4wOC0uNDgtLjEzLS45Ni0uMTMtMS40NnptLTQuNDUtMS41M0wyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTkuODMgMjAuNHYyaC0ydi0yem0tLjU0LTcuOTdjMS44My4yNCAzLjE1IDEuODYgMy4wMyAzLjdhMy41IDMuNSAwIDAgMS0zLjQ5IDMuMjdoLTF2LTJoMWMuNzkgMCAxLjQ0LS42MSAxLjUtMS40LjA1LS43OS0uNTItMS40OC0xLjMtMS41OS0uNzgtLjEtMS41MS40Mi0xLjY3IDEuMTlsLTEuOTYtLjM5YTMuNDg2IDMuNDg2IDAgMCAxIDMuODktMi43OCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyMi4zM3YyMi40SDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+) center no-repeat}.gpf-btn-icon-isocurve:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGNUY1RjUiIGQ9Ik04IDkuOVYxNWMwIC41NS40NSAxIDEgMXMxLS40NSAxLTFWOS45QTQuOTk3IDQuOTk3IDAgMCAwIDEzLjkgNCA1LjAwNCA1LjAwNCAwIDAgMCA4IC4xIDQuOTk3IDQuOTk3IDAgMCAwIDQuMSA2IDUuMDEgNS4wMSAwIDAgMCA4IDkuOU05IDJjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zbTQuMjEgMTAuNDJjLS41NS0uMTItMS4wOS4yNC0xLjIxLjc5cy4yNCAxLjA5Ljc5IDEuMjFDMTUuMDYgMTQuODcgMTYgMTUuNjggMTYgMTZjMCAuNTgtMi40NSAyLTcgMnMtNy0xLjQyLTctMmMwLS4zMi45NC0xLjEzIDMuMjEtMS42Mi41NS0uMTIuOTEtLjY2Ljc5LTEuMjFzLS42Ni0uOTEtMS4yMS0uNzlDMS43NSAxMy4wOCAwIDE0LjM5IDAgMTZjMCAyLjYzIDQuNTMgNCA5IDRzOS0xLjM3IDktNGMwLTEuNjEtMS43NS0yLjkyLTQuNzktMy41OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTh2MjBIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDIwIj48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGNUY1RjUiIGQ9Ik04IDkuOVYxNWMwIC41NS40NSAxIDEgMXMxLS40NSAxLTFWOS45QTQuOTk3IDQuOTk3IDAgMCAwIDEzLjkgNCA1LjAwNCA1LjAwNCAwIDAgMCA4IC4xIDQuOTk3IDQuOTk3IDAgMCAwIDQuMSA2IDUuMDEgNS4wMSAwIDAgMCA4IDkuOU05IDJjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zbTQuMjEgMTAuNDJjLS41NS0uMTItMS4wOS4yNC0xLjIxLjc5cy4yNCAxLjA5Ljc5IDEuMjFDMTUuMDYgMTQuODcgMTYgMTUuNjggMTYgMTZjMCAuNTgtMi40NSAyLTcgMnMtNy0xLjQyLTctMmMwLS4zMi45NC0xLjEzIDMuMjEtMS42Mi41NS0uMTIuOTEtLjY2Ljc5LTEuMjFzLS42Ni0uOTEtMS4yMS0uNzlDMS43NSAxMy4wOCAwIDE0LjM5IDAgMTZjMCAyLjYzIDQuNTMgNCA5IDRzOS0xLjM3IDktNGMwLTEuNjEtMS43NS0yLjkyLTQuNzktMy41OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTh2MjBIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat}.gpf-flex-isocurve{justify-content:unset}.gpf-btn-icon-isocurve-reset{background-position:-29px}[id^=GPisochronPanel-] p.gpf-label{margin-bottom:.2rem;margin-top:1rem}[id^=GPisochronPanel-] p.gpf-label:first-child{margin-top:0}div[id^=GPisochronChoice]{gap:1em;justify-content:left}div[id^=GPisochronTransportChoice]>div{margin-top:.5rem}div[id^=GPisochronValueChron],div[id^=GPisochronValueDist]{width:281px}.GPflexInput>input[id^=GPisochronValueChronInput2]{margin-top:0}.GPisoExclusionsOptions{gap:1rem}[id^=GPisochronForm-]>.GPpanelFooter{position:unset}[id^=GPisochronReset-]{min-width:2.5rem}[id^=GPisochronSubmit-]{width:80%}.gpf-btn-icon-import:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDQuNzYyIDUuMjkyIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTA1LjI2NSAzMDUuMTMzaC0yLjY0NnY0LjIzNGgzLjcwNHYtMy4xNzVoLTEuMDU4em0tMy4xNzUtLjI2N2MwLS4xNDUuMTE4LS4yNjIuMjY0LS4yNjJoMy4xNzVsMS4zMjMgMS4zMjN2My43MDJhLjI2NS4yNjUgMCAwIDEtLjI2My4yNjdoLTQuMjM3YS4yNjUuMjY1IDAgMCAxLS4yNjItLjI2MnptMi42NDUgMi4zODR2MS4wNThoLS41Mjl2LTEuMDU4aC0uNzkzbDEuMDU4LTEuMDU4IDEuMDU4IDEuMDU4eiIgc3R5bGU9InN0cm9rZS13aWR0aDouMjY0NTgzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAyLjA5IC0zMDQuNjA0KSIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxOCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDQuNzYyIDUuMjkyIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTA1LjI2NSAzMDUuMTMzaC0yLjY0NnY0LjIzNGgzLjcwNHYtMy4xNzVoLTEuMDU4em0tMy4xNzUtLjI2N2MwLS4xNDUuMTE4LS4yNjIuMjY0LS4yNjJoMy4xNzVsMS4zMjMgMS4zMjN2My43MDJhLjI2NS4yNjUgMCAwIDEtLjI2My4yNjdoLTQuMjM3YS4yNjUuMjY1IDAgMCAxLS4yNjItLjI2MnptMi42NDUgMi4zODR2MS4wNThoLS41Mjl2LTEuMDU4aC0uNzkzbDEuMDU4LTEuMDU4IDEuMDU4IDEuMDU4eiIgc3R5bGU9InN0cm9rZS13aWR0aDouMjY0NTgzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAyLjA5IC0zMDQuNjA0KSIvPjwvc3ZnPg==) center no-repeat}.gpf-panel__items_layerimport{border-bottom:1px solid var(--grey-900-175);color:var(--text-action-high-blue-france);height:auto;list-style-type:none}div[id^=GPlayerSwitcher-]{height:44px}button[id^=GPshowLayersListPicto]{width:40px}button[id^=GPshowLayersListPicto][aria-pressed=true]+dialog[id^=GPlayersList]{width:350px}.GPlayerSwitcher_layer{background-color:var(--background-overlap-grey);padding-right:40px}.gpf-btn-icon-layerswitcher:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMyIgZD0ibTIyIDguNTUzLTkuODYgNS41NTItOS44Ni01LjU1MkwxMi4xNCAzek0zLjE3OCAxNC45ODYgMiAxNS42NWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4zIiBkPSJNMy4xNzggMTEuNDM3IDIgMTIuMWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMyIgZD0ibTIyIDguNTUzLTkuODYgNS41NTItOS44Ni01LjU1MkwxMi4xNCAzek0zLjE3OCAxNC45ODYgMiAxNS42NWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4zIiBkPSJNMy4xNzggMTEuNDM3IDIgMTIuMWw5Ljg2IDUuNTUzIDkuODYtNS41NTMtMS4xNzktLjY2NCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-icon-ls-visibility{box-shadow:none}.gpf-btn-icon-ls-visibility:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTIuMjE4IDRjNS4wOTIgMCA5LjMyOSAzLjY2NCAxMC4yMTcgOC41LS44ODggNC44MzYtNS4xMjUgOC41LTEwLjIxNyA4LjVTMi44ODggMTcuMzM2IDIgMTIuNUMyLjg4OCA3LjY2NCA3LjEyNSA0IDEyLjIxOCA0bTAgMTUuMTExYzQgMCA3LjQyMy0yLjc4NCA4LjI5LTYuNjExYTguNTA0IDguNTA0IDAgMCAwLTE2LjU4IDAgOC41MDQgOC41MDQgMCAwIDAgOC4yOSA2LjYxMW0wLTIuMzYxYTQuMjUgNC4yNSAwIDEgMSAwLTguNSA0LjI1IDQuMjUgMCAwIDEgMCA4LjVtMC0xLjg4OWEyLjM2MSAyLjM2MSAwIDEgMCAwLTQuNzIyIDIuMzYxIDIuMzYxIDAgMCAwIDAgNC43MjIiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTIuMjE4IDRjNS4wOTIgMCA5LjMyOSAzLjY2NCAxMC4yMTcgOC41LS44ODggNC44MzYtNS4xMjUgOC41LTEwLjIxNyA4LjVTMi44ODggMTcuMzM2IDIgMTIuNUMyLjg4OCA3LjY2NCA3LjEyNSA0IDEyLjIxOCA0bTAgMTUuMTExYzQgMCA3LjQyMy0yLjc4NCA4LjI5LTYuNjExYTguNTA0IDguNTA0IDAgMCAwLTE2LjU4IDAgOC41MDQgOC41MDQgMCAwIDAgOC4yOSA2LjYxMW0wLTIuMzYxYTQuMjUgNC4yNSAwIDEgMSAwLTguNSA0LjI1IDQuMjUgMCAwIDEgMCA4LjVtMC0xLjg4OWEyLjM2MSAyLjM2MSAwIDEgMCAwLTQuNzIyIDIuMzYxIDIuMzYxIDAgMCAwIDAgNC43MjIiLz48L3N2Zz4=) center no-repeat}button[id^=GPvisibilityPicto_ID_][aria-pressed=false]:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjQ0FDREMxIiBkPSJNMTcuODgzIDE5LjI5N0ExMC45NSAxMC45NSAwIDAgMSAxMiAyMWMtNS4zOTIgMC05Ljg3OC0zLjg4LTEwLjgxOC05QTExIDExIDAgMCAxIDQuNTIgNS45MzVMMS4zOTQgMi44MDhsMS40MTQtMS40MTQgMTkuNzk5IDE5Ljc5OS0xLjQxNCAxLjQxNHpNNS45MzYgNy4zNUE4Ljk3IDguOTcgMCAwIDAgMy4yMjMgMTJhOS4wMDUgOS4wMDUgMCAwIDAgMTMuMjAxIDUuODM5bC0yLjAyOC0yLjAyOUE0LjUgNC41IDAgMCAxIDguMTkgOS42MDR6bTYuOTc4IDYuOTc4LTMuMjQyLTMuMjQxYTIuNSAyLjUgMCAwIDAgMy4yNDEgMy4yNDFtNy44OTMgMi4yNjUtMS40MzEtMS40MzFBOC45IDguOSAwIDAgMCAyMC43NzggMTIgOS4wMDUgOS4wMDUgMCAwIDAgOS41NTIgNS4zMzhMNy45NzQgMy43NkM5LjIyMSAzLjI3IDEwLjU4IDMgMTIgM2M1LjM5MiAwIDkuODc4IDMuODggMTAuODE5IDlhMTAuOTUgMTAuOTUgMCAwIDEtMi4wMTIgNC41OTNtLTkuMDg0LTkuMDg0UTExLjg2IDcuNSAxMiA3LjVhNC41IDQuNSAwIDAgMSA0LjQ5MiA0Ljc3OHoiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjQ0FDREMxIiBkPSJNMTcuODgzIDE5LjI5N0ExMC45NSAxMC45NSAwIDAgMSAxMiAyMWMtNS4zOTIgMC05Ljg3OC0zLjg4LTEwLjgxOC05QTExIDExIDAgMCAxIDQuNTIgNS45MzVMMS4zOTQgMi44MDhsMS40MTQtMS40MTQgMTkuNzk5IDE5Ljc5OS0xLjQxNCAxLjQxNHpNNS45MzYgNy4zNUE4Ljk3IDguOTcgMCAwIDAgMy4yMjMgMTJhOS4wMDUgOS4wMDUgMCAwIDAgMTMuMjAxIDUuODM5bC0yLjAyOC0yLjAyOUE0LjUgNC41IDAgMCAxIDguMTkgOS42MDR6bTYuOTc4IDYuOTc4LTMuMjQyLTMuMjQxYTIuNSAyLjUgMCAwIDAgMy4yNDEgMy4yNDFtNy44OTMgMi4yNjUtMS40MzEtMS40MzFBOC45IDguOSAwIDAgMCAyMC43NzggMTIgOS4wMDUgOS4wMDUgMCAwIDAgOS41NTIgNS4zMzhMNy45NzQgMy43NkM5LjIyMSAzLjI3IDEwLjU4IDMgMTIgM2M1LjM5MiAwIDkuODc4IDMuODggMTAuODE5IDlhMTAuOTUgMTAuOTUgMCAwIDEtMi4wMTIgNC41OTNtLTkuMDg0LTkuMDg0UTExLjg2IDcuNSAxMiA3LjVhNC41IDQuNSAwIDAgMSA0LjQ5MiA0Ljc3OHoiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-ls-remove{box-shadow:none}.gpf-btn-icon-ls-remove:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNNyA5aDEwbC0xLjQyOCAxMC44ODlIOC40Mjh6Ii8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNiA2aDEyIi8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTEwLjUgNC41aDMiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNNyA5aDEwbC0xLjQyOCAxMC44ODlIOC40Mjh6Ii8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNiA2aDEyIi8+PHBhdGggc3Ryb2tlPSIjMDAwMDkxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTEwLjUgNC41aDMiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-ls-collapse{box-shadow:none}.gpf-btn-icon-ls-collapse:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;transition:transform .2s ease-out 0s}.gpf-btn-icon-ls-collapse[aria-pressed=true]:after{box-shadow:none;transform:rotate(180deg)}.gpf-btn-icon-ls-dragndrop{box-shadow:none}.gpf-btn-icon-ls-dragndrop:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAxMVY4bDQgNC00IDR2LTNoLTV2NWgzbC00IDQtNC00aDN2LTVINnYzbC00LTQgNC00djNoNVY2SDhsNC00IDQgNGgtM3Y1eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAxMVY4bDQgNC00IDR2LTNoLTV2NWgzbC00IDQtNC00aDN2LTVINnYzbC00LTQgNC00djNoNVY2SDhsNC00IDQgNGgtM3Y1eiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools{height:56px;max-height:56px}button[id^=GPshowAdvancedTools_ID_][aria-pressed=true]+.GPlayerAdvancedTools>.GPlayerInfo{visibility:visible}button[id^=GPshowAdvancedTools_ID_][aria-pressed=false]{box-shadow:none}button[id^=GPshowAdvancedTools_ID_][aria-pressed="false "]+.GPlayerAdvancedTools>.GPlayerInfo{visibility:hidden}button[id^=GPshowAdvancedTools_ID_]{position:absolute;right:16px;top:12px}div[id^=GPbasicTools_ID_]{align-items:center;display:flex;flex-direction:row-reverse;flex-wrap:nowrap;justify-content:flex-end}div[id^=GPadvancedTools_ID_]{align-content:center;align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;height:inherit;justify-content:space-around}.gpf-btn-header{height:26px;position:absolute;width:26px;z-index:2}.gpf-btn-icon-layers{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48ZyBzdHJva2U9IiMxNTE1OTYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuMiIgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBkPSJNMTUuMTkzIDUuNDQ4IDguMSA5LjQ0IDEuMDA5IDUuNDQ4IDguMSAxLjQ1NHpNMS42NTUgMTAuMDc1bC0uODQ3LjQ3OCA3LjA5MSAzLjk5MyA3LjA5Mi0zLjk5My0uODQ4LS40NzgiLz48cGF0aCBkPSJNMS42NTUgNy41MjIuODA4IDhsNy4wOTEgMy45OTRMMTQuOTkxIDhsLS44NDgtLjQ3OCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTZ2MTZIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:auto auto}.gpf-panel__body_ls{max-height:300px!important;overflow:auto}.gpf-panel__title_ls{color:#101092;font-size:1rem;font-weight:400;margin:0;padding:12px 15px;position:relative;right:-16px}.gpf-panel__header_ls{align-content:center;align-items:center;background:#e3e3fd;display:flex;flex-direction:row;height:48px}.gpf-btn-icon-ls-info{box-shadow:none}.gpf-btn-icon-ls-info:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI5LjI1IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTMuOTEgMTYuOTk4aC0zLjkwOHYtLjY2MmguMjA4cS40MTggMCAuNjEtLjExNGEuNDguNDggMCAwIDAgLjIzMy0uMzI1cS4wNDQtLjIxLjA0My0uNjExdi0yLjEzN3EwLS40NDYtLjA1NS0uNjM0LS4wNTQtLjE4Ni0uMjgxLS4yNzUtLjIyNy0uMDg2LS43Ni0uMDk0di0uNjZsMi45NTItLjYyMXY0LjQyMXEwIC42MDUuMTUxLjgyOC4xNTEuMjI1LjgwNi4yMjVWMTd6bS0uODEyLTguOTVxMCAuNDMtLjMwNi43NC0uMzA3LjMwNS0uNzM3LjMwNi0uNDI3IDAtLjczNy0uMzE0YTEgMSAwIDAgMS0uMzEzLS43M2MwLS4yNzcuMTAzLS41MzUuMzA4LS43NDFxLjMxLS4zMDkuNzQyLS4zMDljLjI4OCAwIC41NC4xLjc0MS4zMDJxLjMwMi4zMDEuMzAyLjc0OHoiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI5LjI1IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwOTEiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTMuOTEgMTYuOTk4aC0zLjkwOHYtLjY2MmguMjA4cS40MTggMCAuNjEtLjExNGEuNDguNDggMCAwIDAgLjIzMy0uMzI1cS4wNDQtLjIxLjA0My0uNjExdi0yLjEzN3EwLS40NDYtLjA1NS0uNjM0LS4wNTQtLjE4Ni0uMjgxLS4yNzUtLjIyNy0uMDg2LS43Ni0uMDk0di0uNjZsMi45NTItLjYyMXY0LjQyMXEwIC42MDUuMTUxLjgyOC4xNTEuMjI1LjgwNi4yMjVWMTd6bS0uODEyLTguOTVxMCAuNDMtLjMwNi43NC0uMzA3LjMwNS0uNzM3LjMwNi0uNDI3IDAtLjczNy0uMzE0YTEgMSAwIDAgMS0uMzEzLS43M2MwLS4yNzcuMTAzLS41MzUuMzA4LS43NDFxLjMxLS4zMDkuNzQyLS4zMDljLjI4OCAwIC41NC4xLjc0MS4zMDJxLjMwMi4zMDEuMzAyLjc0OHoiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-ls-extent{box-shadow:none}.gpf-btn-icon-ls-extent:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTQuNjA3IDE2LjAyIDYgNy40MTUgNy40MTQgNmw4LjYwNyA4LjYwN1Y3LjAyaDJ2MTFoLTExdi0yeiIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNMTQuNjA3IDE2LjAyIDYgNy40MTUgNy40MTQgNmw4LjYwNyA4LjYwN1Y3LjAyaDJ2MTFoLTExdi0yeiIvPjwvc3ZnPg==) center no-repeat}[id^=GPlayerInfoPanel]{height:auto;position:absolute}.gpf-label-name{line-height:28px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 96px)}.GPlayerDragNDrop{cursor:move}.gpf-range__output{width:35px}.GPlayerOpacity.fr-range--sm[data-fr-js-range]:after,.GPlayerOpacity.fr-range--sm[data-fr-js-range]:before{top:25%}div[id^=GPlayerInfoContent]{width:350px}.gpf-btn-icon-close.GPlayersPanelClose{right:0;top:0}.gpf-btn-icon-close.GPlayersPanelClose:after{margin-left:-.125rem}.GPlayerAdvancedToolsContextual{display:none}.GPlayerAdvancedToolsContextual:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSI0IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMTggNCI+PHBhdGggZmlsbD0iIzAwMDA5MSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41ODMuMTY3QTEuODQgMS44NCAwIDAgMCAuNzUgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzMyAxLjgzM0ExLjg0IDEuODQgMCAwIDAgNC40MTcgMiAxLjg0IDEuODQgMCAwIDAgMi41ODMuMTY3bTEyLjgzNCAwQTEuODQgMS44NCAwIDAgMCAxMy41ODMgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzNCAxLjgzM0ExLjg0IDEuODQgMCAwIDAgMTcuMjUgMiAxLjg0IDEuODQgMCAwIDAgMTUuNDE3LjE2N005IC4xNjdBMS44NCAxLjg0IDAgMCAwIDcuMTY3IDJjMCAxLjAwOC44MjUgMS44MzMgMS44MzMgMS44MzNBMS44NCAxLjg0IDAgMCAwIDEwLjgzMyAyIDEuODQgMS44NCAwIDAgMCA5IC4xNjciIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSI0IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMTggNCI+PHBhdGggZmlsbD0iIzAwMDA5MSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi41ODMuMTY3QTEuODQgMS44NCAwIDAgMCAuNzUgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzMyAxLjgzM0ExLjg0IDEuODQgMCAwIDAgNC40MTcgMiAxLjg0IDEuODQgMCAwIDAgMi41ODMuMTY3bTEyLjgzNCAwQTEuODQgMS44NCAwIDAgMCAxMy41ODMgMmMwIDEuMDA4LjgyNSAxLjgzMyAxLjgzNCAxLjgzM0ExLjg0IDEuODQgMCAwIDAgMTcuMjUgMiAxLjg0IDEuODQgMCAwIDAgMTUuNDE3LjE2N005IC4xNjdBMS44NCAxLjg0IDAgMCAwIDcuMTY3IDJjMCAxLjAwOC44MjUgMS44MzMgMS44MzMgMS44MzNBMS44NCAxLjg0IDAgMCAwIDEwLjgzMyAyIDEuODQgMS44NCAwIDAgMCA5IC4xNjciIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}.GPlayerAdvancedToolsContextual[aria-pressed=true]{background-color:var(--hover-tint);overflow:visible}.GPlayerSwitcher_layer:has(.GPlayerAdvancedToolsContextual[aria-pressed=true]){overflow:visible}[id^=GPlayersList-] .GPpanelBody:has(.GPlayerAdvancedToolsContextual[aria-pressed=true]){overflow:visible}.GPlayerAdvancedTools:has(.GPlayerAdvancedToolsContextual[aria-pressed=true]){position:relative}.GPlayerAdvancedToolsContextual+div{background-color:var(--background-overlap-grey);border-radius:6px;box-shadow:0 0 10px 0 rgba(0,0,0,.15);display:none;flex-direction:column;flex-wrap:wrap;font-size:13px;gap:6px;padding:14px 6px;z-index:12}.GPlayerAdvancedToolsContextual+div>button{padding-left:2rem}.GPlayerAdvancedToolsContextual+div>button[visibility=hidden]{display:none}.GPlayerAdvancedToolsContextual+div>button:after{mask-position:left}.GPlayerAdvancedToolsContextual[aria-pressed=true]+div{display:flex;position:absolute;right:0;top:calc(2.5rem + 8px)}@media (max-width:576px){.GPlayerAdvancedTools{width:calc(100% + 40px)}.GPlayerAdvancedTools>.GPlayerExtent,.GPlayerAdvancedTools>.GPlayerInfo,.GPlayerAdvancedTools>.GPlayerRemove{display:none}.GPlayerAdvancedToolsContextual{display:inline-flex}[id^=GPopacity_ID_]{flex-grow:0.6}}.gpf-btn-icon-pointer:after{background-color:var(--text-inverted-blue-france);content:"";height:100%;left:0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjAzIDE2LjAzMmE3LjM2IDcuMzYgMCAwIDEtNi42NjItNi42NjNILjY3YS42Ny42NyAwIDEgMSAwLTEuMzM4aC43QTcuMzY0IDcuMzY0IDAgMCAxIDguMDMgMS4zNjhWLjY3YS42Ny42NyAwIDEgMSAxLjMzOCAwdi43YTcuMzYgNy4zNiAwIDAgMSA2LjY2MyA2LjY2MmguNjk5YS42Ny42NyAwIDAgMSAwIDEuMzM4aC0uN2E3LjM2IDcuMzYgMCAwIDEtNi42NjIgNi42NjN2LjY5OWEuNjcuNjcgMCAwIDEtMS4zMzggMHpNOS4zNyA0LjY4NVYyLjcxNGE2LjAyNSA2LjAyNSAwIDAgMSA1LjMxNiA1LjMxN2gtMS45N2EuNjcuNjcgMCAwIDAgMCAxLjMzOGgxLjk3YTYuMDI1IDYuMDI1IDAgMCAxLTUuMzE3IDUuMzE3di0xLjk3YS42Ny42NyAwIDAgMC0xLjMzOCAwdjEuOTdBNi4wMjUgNi4wMjUgMCAwIDEgMi43MTQgOS4zN2gxLjk3YS42Ny42NyAwIDAgMCAwLTEuMzM4aC0xLjk3QTYuMDI2IDYuMDI2IDAgMCAxIDguMDMgMi43MTR2MS45N2EuNjcuNjcgMCAwIDAgMS4zMzggMCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjAzIDE2LjAzMmE3LjM2IDcuMzYgMCAwIDEtNi42NjItNi42NjNILjY3YS42Ny42NyAwIDEgMSAwLTEuMzM4aC43QTcuMzY0IDcuMzY0IDAgMCAxIDguMDMgMS4zNjhWLjY3YS42Ny42NyAwIDEgMSAxLjMzOCAwdi43YTcuMzYgNy4zNiAwIDAgMSA2LjY2MyA2LjY2MmguNjk5YS42Ny42NyAwIDAgMSAwIDEuMzM4aC0uN2E3LjM2IDcuMzYgMCAwIDEtNi42NjIgNi42NjN2LjY5OWEuNjcuNjcgMCAwIDEtMS4zMzggMHpNOS4zNyA0LjY4NVYyLjcxNGE2LjAyNSA2LjAyNSAwIDAgMSA1LjMxNiA1LjMxN2gtMS45N2EuNjcuNjcgMCAwIDAgMCAxLjMzOGgxLjk3YTYuMDI1IDYuMDI1IDAgMCAxLTUuMzE3IDUuMzE3di0xLjk3YS42Ny42NyAwIDAgMC0xLjMzOCAwdjEuOTdBNi4wMjUgNi4wMjUgMCAwIDEgMi43MTQgOS4zN2gxLjk3YS42Ny42NyAwIDAgMCAwLTEuMzM4aC0xLjk3QTYuMDI2IDYuMDI2IDAgMCAxIDguMDMgMi43MTR2MS45N2EuNjcuNjcgMCAwIDAgMS4zMzggMCIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;position:absolute;top:0;width:100%}.gpf-btn-icon-pointer{border-top-right-radius:4px;min-width:2.5rem;position:relative}.GPlocationStageFlexInput:has(.GPlocationStageRemove)>.gpf-btn-icon-pointer{border-top-right-radius:0}.gpf-btn-icon-remove{height:2.5rem;width:2.5rem}.gpf-btn-icon-remove:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJtMTIgMTAuNiA0Ljk1LTQuOTYgMS40IDEuNEwxMy40MiAxMmw0Ljk2IDQuOTUtMS40IDEuNEwxMiAxMy40MmwtNC45NSA0Ljk2LTEuNC0xLjRMMTAuNTggMTIgNS42MyA3LjA1bDEuNC0xLjR6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJtMTIgMTAuNiA0Ljk1LTQuOTYgMS40IDEuNEwxMy40MiAxMmw0Ljk2IDQuOTUtMS40IDEuNEwxMiAxMy40MmwtNC45NSA0Ljk2LTEuNC0xLjRMMTAuNTggMTIgNS42MyA3LjA1bDEuNC0xLjR6Ii8+PC9zdmc+) center no-repeat}.gpf-btn-icon-add:after{height:2.5rem;-webkit-mask:url(data:image/png;base64,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) -51px center no-repeat;mask:url(data:image/png;base64,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) -51px center no-repeat;width:2.5rem}.GPlocationOriginLabel{display:none;pointer-events:none}[class^=GPlocationPoint-]{padding:0}[id^=GPlocationPoint_]{justify-content:left}.GPlocationStageFlexInput{flex-wrap:wrap;width:281px}.GPlocationStageAdd{flex-basis:65%;min-height:40px;padding:.25rem .75rem .25rem 2.5rem;text-align:left;width:0}.GPlocationOriginLabel{flex-basis:fit-content}.GPlocationOriginPointerImg{flex-basis:2.5em}.GPlocationStageFlexInput input{flex-basis:33%;flex-grow:1}.GPmeasureTooltip{background-color:var(--background-contrast-grey);opacity:.8;padding:.2rem .4rem}.gpf-btn-icon-area:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTcuOTkyIDE2LjM5MmEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2em0xLjQ3NyAzLjU5OC41My41MyAxLjA2Mi0xLjA2LS41My0uNTN6bS0yLjUzNy0yLjUzOCAyLjUzOCAyLjUzOCAxLjA2LTEuMDYtMi41MzgtMi41Mzh6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIwLjUzIDE5Ljk5LjUzLS41M0wyMCAxOC40bC0uNTMuNTN6bS0zLjU5OCAxLjQ3N2EuNzUuNzUgMCAwIDAgMS4wNiAxLjA2MXptMi41MzgtMi41MzctMi41MzggMi41MzcgMS4wNiAxLjA2MSAyLjUzOC0yLjUzOHpNMS40NyA1LjY3OGEuNzUuNzUgMCAwIDAgMS4wNiAxLjA2ek00LjczOSA0LjUzbC41My0uNTMtMS4wNi0xLjA2LS41MzEuNTN6TTIuNTMgNi43NCA0Ljc0IDQuNTMgMy42NzggMy40NyAxLjQ3IDUuNjc4eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im00LjczOSAzLjQ3LS41My0uNTNMMy4xNDggNGwuNTMuNTMxem0xLjE0NyAzLjI3YS43NS43NSAwIDAgMCAxLjA2MS0xLjA2MXpNMy42NzggNC41MyA1Ljg4NiA2Ljc0bDEuMDYxLTEuMDYxTDQuNzQgMy40N3oiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTQuMjA5IDUuMTA1djExLjg4YzAgMS4zOTMuOTQ2IDIuNDc3IDIuMTYxIDIuNDc3SDE5LjEyIi8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTE5LjY3IDEyLjgzNlY2LjA2NWMwLTEuMTYyLS43ODctMi4wNjUtMS44LTIuMDY1aC03LjAzNSIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBkPSJtMTYuMzU3IDExLjk4NC00LjEyMyA0LjA4Nk0xNi4yNzcgNy4zOTMgNy41MjIgMTYuMDdNMTEuNjQ1IDcuMzE0IDcuNTIyIDExLjQiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTcuOTkyIDE2LjM5MmEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2em0xLjQ3NyAzLjU5OC41My41MyAxLjA2Mi0xLjA2LS41My0uNTN6bS0yLjUzNy0yLjUzOCAyLjUzOCAyLjUzOCAxLjA2LTEuMDYtMi41MzgtMi41Mzh6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIwLjUzIDE5Ljk5LjUzLS41M0wyMCAxOC40bC0uNTMuNTN6bS0zLjU5OCAxLjQ3N2EuNzUuNzUgMCAwIDAgMS4wNiAxLjA2MXptMi41MzgtMi41MzctMi41MzggMi41MzcgMS4wNiAxLjA2MSAyLjUzOC0yLjUzOHpNMS40NyA1LjY3OGEuNzUuNzUgMCAwIDAgMS4wNiAxLjA2ek00LjczOSA0LjUzbC41My0uNTMtMS4wNi0xLjA2LS41MzEuNTN6TTIuNTMgNi43NCA0Ljc0IDQuNTMgMy42NzggMy40NyAxLjQ3IDUuNjc4eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im00LjczOSAzLjQ3LS41My0uNTNMMy4xNDggNGwuNTMuNTMxem0xLjE0NyAzLjI3YS43NS43NSAwIDAgMCAxLjA2MS0xLjA2MXpNMy42NzggNC41MyA1Ljg4NiA2Ljc0bDEuMDYxLTEuMDYxTDQuNzQgMy40N3oiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTQuMjA5IDUuMTA1djExLjg4YzAgMS4zOTMuOTQ2IDIuNDc3IDIuMTYxIDIuNDc3SDE5LjEyIi8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTE5LjY3IDEyLjgzNlY2LjA2NWMwLTEuMTYyLS43ODctMi4wNjUtMS44LTIuMDY1aC03LjAzNSIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBkPSJtMTYuMzU3IDExLjk4NC00LjEyMyA0LjA4Nk0xNi4yNzcgNy4zOTMgNy41MjIgMTYuMDdNMTEuNjQ1IDcuMzE0IDcuNTIyIDExLjQiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-length:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIxIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi44OTQgNi4xODdhLjUuNSAwIDAgMCAuNzA3LjcwN3ptMS40MTQtMS40MTRMNi44OTQgNi4xODdsLjcwNy43MDdMOS4wMTUgNS40OHpNOC45NzQgOC4yNjZhLjUuNSAwIDEgMCAuNzA3LjcwOHptMS40MTQtMS40MTRMOC45NzQgOC4yNjZsLjcwNy43MDggMS40MTQtMS40MTV6TTExLjA1MyAxMC4zNDZhLjUuNSAwIDEgMCAuNzA3LjcwN3ptMS40MTQtMS40MTQtMS40MTQgMS40MTQuNzA3LjcwNyAxLjQxNS0xLjQxNHpNMTMuMTMzIDEyLjQyNmEuNS41IDAgMSAwIC43MDcuNzA3em0xLjQxNC0xLjQxNC0xLjQxNCAxLjQxNC43MDcuNzA3IDEuNDE0LTEuNDE0eiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Im0xNi45OCAxMy40NDUtMS40MTQgMS40MTQiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im01LjUzNiAyIDE0LjE0MiAxNC4xNDItMy41MzYgMy41MzZMMiA1LjUzNnoiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIxIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi44OTQgNi4xODdhLjUuNSAwIDAgMCAuNzA3LjcwN3ptMS40MTQtMS40MTRMNi44OTQgNi4xODdsLjcwNy43MDdMOS4wMTUgNS40OHpNOC45NzQgOC4yNjZhLjUuNSAwIDEgMCAuNzA3LjcwOHptMS40MTQtMS40MTRMOC45NzQgOC4yNjZsLjcwNy43MDggMS40MTQtMS40MTV6TTExLjA1MyAxMC4zNDZhLjUuNSAwIDEgMCAuNzA3LjcwN3ptMS40MTQtMS40MTQtMS40MTQgMS40MTQuNzA3LjcwNyAxLjQxNS0xLjQxNHpNMTMuMTMzIDEyLjQyNmEuNS41IDAgMSAwIC43MDcuNzA3em0xLjQxNC0xLjQxNC0xLjQxNCAxLjQxNC43MDcuNzA3IDEuNDE0LTEuNDE0eiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Im0xNi45OCAxMy40NDUtMS40MTQgMS40MTQiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im01LjUzNiAyIDE0LjE0MiAxNC4xNDItMy41MzYgMy41MzZMMiA1LjUzNnoiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-azimuth:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIxIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xOC45NyAxMC4xOGMtLjM2IDAtLjY0LS4xNS0uODYtLjQ0cy0uMzMtLjcyLS4zMy0xLjI3YzAtLjYuMS0xLjE2LjMxLTEuNy4yLS41My40OC0xLjAxLjgzLTEuNDJhMy45IDMuOSAwIDAgMSAxLjE2LS45N2MuNDMtLjIzLjg3LS4zNSAxLjMyLS4zNS4yMyAwIC40NC4wMy42NC4wOC4yLjA2LjM4LjEzLjUzLjIzbC41OC0uMjZoLjI5bC0uNzggNC4zN2MtLjA3LjQzIDAgLjY1LjIyLjY1LjEzIDAgLjI3LS4wNy40My0uMjJzLjMxLS4zOS40Ny0uNzNsLjIxLjA4Yy0uNDkgMS4zMS0xLjEgMS45Ni0xLjg2IDEuOTZxLS41NTUgMC0uODEtLjM5Yy0uMTctLjI2LS4yMi0uNjMtLjE1LTEuMTJoLS4wM2MtLjM2LjUtLjcxLjg4LTEuMDUgMS4xM3MtLjcxLjM4LTEuMTEuMzh6bS4zMS0yLjM3YzAgLjQzLjA0Ljc1LjEzLjk2cy4yNS4zMS40OS4zMS40OC0uMTEuNzEtLjMzLjQ1LS40Ny42NC0uNzVsLjUzLTNjLS4xMS0uMTQtLjIzLS4yNS0uMzYtLjMyYTEgMSAwIDAgMC0uNDctLjExYy0uMzQgMC0uNjMuMTUtLjg4LjQ2cy0uNDUuNzEtLjU4IDEuMmMtLjE0LjQ5LS4yMSAxLjAyLS4yMSAxLjU3eiIvPjxwYXRoIGQ9Ik0yMC45IDE1LjcyaC01LjUyYy0uMDctMy4yNC0xLjUxLTYuMTUtMy43Ny04LjE3bDUuNDUtNi4yM0wxNS41NSAwIDEwIDYuMzVhMTEuMiAxMS4yIDAgMCAwLTUuOTItMS42OWgtMXYyaDFjMS42NyAwIDMuMjMuNDUgNC41OSAxLjIybC0zLjYxIDQuMTNjLS4zMS0uMDgtLjY0LS4xMy0uOTgtLjEzLTIuMjUgMC00LjA5IDEuODMtNC4wOSA0LjA5czEuODMgNC4wOSA0LjA5IDQuMDljMS42MiAwIDMuMDItLjk2IDMuNjgtMi4zM0gyMC45di0yLjAxTTEwLjMgOS4wNWE5LjI1IDkuMjUgMCAwIDEgMy4wOCA2LjY2SDguMTVhNC4wNyA0LjA3IDAgMCAwLTEuMjgtMi43M2wzLjQ0LTMuOTN6bS02LjIxIDljLTEuMTUgMC0yLjA5LS45NC0yLjA5LTIuMDlzLjk0LTIuMDkgMi4wOS0yLjA5IDIuMDkuOTQgMi4wOSAyLjA5LS45NCAyLjA5LTIuMDkgMi4wOSIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMjMuOTh2MjAuMDVIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyMSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDIxIj48ZyBmaWxsPSIjZmZmIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik0xOC45NyAxMC4xOGMtLjM2IDAtLjY0LS4xNS0uODYtLjQ0cy0uMzMtLjcyLS4zMy0xLjI3YzAtLjYuMS0xLjE2LjMxLTEuNy4yLS41My40OC0xLjAxLjgzLTEuNDJhMy45IDMuOSAwIDAgMSAxLjE2LS45N2MuNDMtLjIzLjg3LS4zNSAxLjMyLS4zNS4yMyAwIC40NC4wMy42NC4wOC4yLjA2LjM4LjEzLjUzLjIzbC41OC0uMjZoLjI5bC0uNzggNC4zN2MtLjA3LjQzIDAgLjY1LjIyLjY1LjEzIDAgLjI3LS4wNy40My0uMjJzLjMxLS4zOS40Ny0uNzNsLjIxLjA4Yy0uNDkgMS4zMS0xLjEgMS45Ni0xLjg2IDEuOTZxLS41NTUgMC0uODEtLjM5Yy0uMTctLjI2LS4yMi0uNjMtLjE1LTEuMTJoLS4wM2MtLjM2LjUtLjcxLjg4LTEuMDUgMS4xM3MtLjcxLjM4LTEuMTEuMzh6bS4zMS0yLjM3YzAgLjQzLjA0Ljc1LjEzLjk2cy4yNS4zMS40OS4zMS40OC0uMTEuNzEtLjMzLjQ1LS40Ny42NC0uNzVsLjUzLTNjLS4xMS0uMTQtLjIzLS4yNS0uMzYtLjMyYTEgMSAwIDAgMC0uNDctLjExYy0uMzQgMC0uNjMuMTUtLjg4LjQ2cy0uNDUuNzEtLjU4IDEuMmMtLjE0LjQ5LS4yMSAxLjAyLS4yMSAxLjU3eiIvPjxwYXRoIGQ9Ik0yMC45IDE1LjcyaC01LjUyYy0uMDctMy4yNC0xLjUxLTYuMTUtMy43Ny04LjE3bDUuNDUtNi4yM0wxNS41NSAwIDEwIDYuMzVhMTEuMiAxMS4yIDAgMCAwLTUuOTItMS42OWgtMXYyaDFjMS42NyAwIDMuMjMuNDUgNC41OSAxLjIybC0zLjYxIDQuMTNjLS4zMS0uMDgtLjY0LS4xMy0uOTgtLjEzLTIuMjUgMC00LjA5IDEuODMtNC4wOSA0LjA5czEuODMgNC4wOSA0LjA5IDQuMDljMS42MiAwIDMuMDItLjk2IDMuNjgtMi4zM0gyMC45di0yLjAxTTEwLjMgOS4wNWE5LjI1IDkuMjUgMCAwIDEgMy4wOCA2LjY2SDguMTVhNC4wNyA0LjA3IDAgMCAwLTEuMjgtMi43M2wzLjQ0LTMuOTN6bS02LjIxIDljLTEuMTUgMC0yLjA5LS45NC0yLjA5LTIuMDlzLjk0LTIuMDkgMi4wOS0yLjA5IDIuMDkuOTQgMi4wOSAyLjA5LS45NCAyLjA5LTIuMDkgMi4wOSIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMjMuOTh2MjAuMDVIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-position:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNy40IDE1LjMzVjIuNDNsNC42OSAyLjM1djcuMDVoMS45OVY0LjcyTDE4IDMuMDR2LjE5aC0uMDF2OC42aDJWLjc2YzAtLjA4LS4wMS0uMTYtLjA1LS4yNGEuNS41IDAgMCAwLS4xNy0uMTguNi42IDAgMCAwLS4yMy0uMDhjLS4wOCAwLS4xNyAwLS4yNC4wNEwxMyAzIDcuMDEgMGwtNyAzdjE2LjYxYy0uMDEuMDggMCAuMTYuMDUuMjQuMDQuMDcuMS4xNC4xNi4xOHMuMTUuMDcuMjMuMDhjLjA4IDAgLjE3IDAgLjI0LS4wNGw2LjMtMi43LjQtLjE4di0xLjg2em0tMS45OS41NEwyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIxLjQyMiAxOC41OTUtNy43ODgtNS41MjRjLS4yNzItLjE4MS0uNjM0IDAtLjYzNC4zNjJsLjkwNiA5LjUxYzAgLjM2MS41NDMuNDUyLjcyNC4xOGwxLjQ1LTIuNTM1IDEuNDQ4IDIuNTM1Yy4xODEuMzYyLjYzNC41NDQuOTk2LjU0NC4xODEgMCAuMzYzLS4wOS41NDQtLjE4Mi41NDMtLjM2Mi43MjQtLjk5Ni40NTItMS41MzlsLTEuNDQ5LTIuNTM2aDIuOTg5Yy40NTMtLjA5LjYzNC0uNTQzLjM2Mi0uODE1Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIyIDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNy40IDE1LjMzVjIuNDNsNC42OSAyLjM1djcuMDVoMS45OVY0LjcyTDE4IDMuMDR2LjE5aC0uMDF2OC42aDJWLjc2YzAtLjA4LS4wMS0uMTYtLjA1LS4yNGEuNS41IDAgMCAwLS4xNy0uMTguNi42IDAgMCAwLS4yMy0uMDhjLS4wOCAwLS4xNyAwLS4yNC4wNEwxMyAzIDcuMDEgMGwtNyAzdjE2LjYxYy0uMDEuMDggMCAuMTYuMDUuMjQuMDQuMDcuMS4xNC4xNi4xOHMuMTUuMDcuMjMuMDhjLjA4IDAgLjE3IDAgLjI0LS4wNGw2LjMtMi43LjQtLjE4di0xLjg2em0tMS45OS41NEwyIDE3LjMzdi0uMTloLjAxVjQuMzJsMy40LTEuNDZ6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTIxLjQyMiAxOC41OTUtNy43ODgtNS41MjRjLS4yNzItLjE4MS0uNjM0IDAtLjYzNC4zNjJsLjkwNiA5LjUxYzAgLjM2MS41NDMuNDUyLjcyNC4xOGwxLjQ1LTIuNTM1IDEuNDQ4IDIuNTM1Yy4xODEuMzYyLjYzNC41NDQuOTk2LjU0NC4xODEgMCAuMzYzLS4wOS41NDQtLjE4Mi41NDMtLjM2Mi43MjQtLjk5Ni40NTItMS41MzlsLTEuNDQ5LTIuNTM2aDIuOTg5Yy40NTMtLjA5LjYzNC0uNTQzLjM2Mi0uODE1Ii8+PC9zdmc+) center no-repeat}div[id^=GPmousePositionCoordinate-] input{color:inherit}div[id^=GPmousePositionAltitude-],div[id^=GPmousePositionCoordinate-]>div{display:flex;justify-content:space-between}div[id^=GPmousePositionCoordinate-] input[readonly]{font-size:1rem}.gpf-btn-icon-reverse:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI4Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi43NSAxLjAxSDQuODFMMy40MyAzLjA2IDIuMDUgMS4wMUguMTNsMi4yMyAzLjI1TDAgNy42OWgxLjkzbDEuNS0yLjI0IDEuNTIgMi4yNGgxLjkyTDQuNTEgNC4yNnpNMTIuNzQgMS4wMWwtMS44NCA0LjUtMS44My00LjVINy4ybDIuODEgNi42Ny0uMzcuODljLS4yOC42OC0uNjkuOS0xLjM1LjktLjI5IDAtLjYxLS4wNy0uODItLjE2djEuNDhjLjMyLjEzLjY4LjIxIDEuMTkuMjEgMS4yNyAwIDIuMDMtLjY5IDIuNDktMS43OUwxNC41MiAxaC0xLjc4ek00LjA4OCAxMS4wMThsLTItLjAxOGMtLjA0NSA0Ljk2IDMuNTk4IDkuMDkzIDguMzYyIDkuODE2YTguNCA4LjQgMCAwIDEtLjUxMS0yLjE0NWMtMy4zOTItLjg5LTUuODg0LTMuOTkzLTUuODUxLTcuNjUzTTIzLjg4IDIwLjAyYy4yMy0xLjE0LjExLTIuMzItLjM0LTMuMzlhNS45IDUuOSAwIDAgMC0yLjIxLTIuNjRjLS45OS0uNjUtMi4xNS0uOTktMy4zMy0uOTlzLTIuMzUuMzQtMy4zMy45OWMtLjk5LjY1LTEuNzYgMS41Ni0yLjIxIDIuNjRhNS42MyA1LjYzIDAgMCAwLS4zNCAzLjM5Yy4yMyAxLjE0LjggMi4xOSAxLjY0IDMuMDFMMTggMjcuMThsNC4yNC00LjE1Yy44NC0uODIgMS40MS0xLjg3IDEuNjQtMy4wMW0tMS45Ni0uMzhjLS4xNS43Ni0uNTQgMS40Ni0xLjA5IDIuMDFMMTggMjQuNDJsLTIuODMtMi43N2MtLjU2LS41NS0uOTQtMS4yNS0xLjEtMi4wMS0uMTUtLjc2LS4wOC0xLjU1LjIzLTIuMjYuMy0uNzIuODItMS4zMyAxLjQ3LTEuNzZhNC4wNjQgNC4wNjQgMCAwIDEgNC40NCAwIDMuODkzIDMuODkzIDAgMCAxIDEuNyA0LjAyeiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xOCAxNy4yOGMtLjY1IDAtMS4xNy41My0xLjE3IDEuMTdzLjUzIDEuMTcgMS4xNyAxLjE3IDEuMTctLjUzIDEuMTctMS4xNy0uNTMtMS4xNy0xLjE3LTEuMTciLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyOCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI4Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNi43NSAxLjAxSDQuODFMMy40MyAzLjA2IDIuMDUgMS4wMUguMTNsMi4yMyAzLjI1TDAgNy42OWgxLjkzbDEuNS0yLjI0IDEuNTIgMi4yNGgxLjkyTDQuNTEgNC4yNnpNMTIuNzQgMS4wMWwtMS44NCA0LjUtMS44My00LjVINy4ybDIuODEgNi42Ny0uMzcuODljLS4yOC42OC0uNjkuOS0xLjM1LjktLjI5IDAtLjYxLS4wNy0uODItLjE2djEuNDhjLjMyLjEzLjY4LjIxIDEuMTkuMjEgMS4yNyAwIDIuMDMtLjY5IDIuNDktMS43OUwxNC41MiAxaC0xLjc4ek00LjA4OCAxMS4wMThsLTItLjAxOGMtLjA0NSA0Ljk2IDMuNTk4IDkuMDkzIDguMzYyIDkuODE2YTguNCA4LjQgMCAwIDEtLjUxMS0yLjE0NWMtMy4zOTItLjg5LTUuODg0LTMuOTkzLTUuODUxLTcuNjUzTTIzLjg4IDIwLjAyYy4yMy0xLjE0LjExLTIuMzItLjM0LTMuMzlhNS45IDUuOSAwIDAgMC0yLjIxLTIuNjRjLS45OS0uNjUtMi4xNS0uOTktMy4zMy0uOTlzLTIuMzUuMzQtMy4zMy45OWMtLjk5LjY1LTEuNzYgMS41Ni0yLjIxIDIuNjRhNS42MyA1LjYzIDAgMCAwLS4zNCAzLjM5Yy4yMyAxLjE0LjggMi4xOSAxLjY0IDMuMDFMMTggMjcuMThsNC4yNC00LjE1Yy44NC0uODIgMS40MS0xLjg3IDEuNjQtMy4wMW0tMS45Ni0uMzhjLS4xNS43Ni0uNTQgMS40Ni0xLjA5IDIuMDFMMTggMjQuNDJsLTIuODMtMi43N2MtLjU2LS41NS0uOTQtMS4yNS0xLjEtMi4wMS0uMTUtLjc2LS4wOC0xLjU1LjIzLTIuMjYuMy0uNzIuODItMS4zMyAxLjQ3LTEuNzZhNC4wNjQgNC4wNjQgMCAwIDEgNC40NCAwIDMuODkzIDMuODkzIDAgMCAxIDEuNyA0LjAyeiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xOCAxNy4yOGMtLjY1IDAtMS4xNy41My0xLjE3IDEuMTdzLjUzIDEuMTcgMS4xNyAxLjE3IDEuMTctLjUzIDEuMTctMS4xNy0uNTMtMS4xNy0xLjE3LTEuMTciLz48L3N2Zz4=) center no-repeat}.gpf-flex-reverse{align-items:flex-start;display:flex;flex-direction:column;justify-content:space-evenly}.gpf-panel-reverse{width:100%}.gpf-btn-icon-route:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE1Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMi43IDQuMzk5QTEuNyAxLjcgMCAxIDEgMi43IDFhMS43IDEuNyAwIDAgMSAwIDMuMzk5WiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTIuNyA0Ljk2djUuNjY4YTIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0IDIuOTc0IDIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0LTIuOTc0VjQuODA3YTIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0LTIuOTc0IDIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0IDIuOTc0djUuMzk2Ii8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im0xMi4xOTIgOC45NDggMi40MDQgMi40MDNNMTQuNTk3IDExLjM1MSAxNyA4Ljk0OCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE4IDE1Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMi43IDQuMzk5QTEuNyAxLjcgMCAxIDEgMi43IDFhMS43IDEuNyAwIDAgMSAwIDMuMzk5WiIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTIuNyA0Ljk2djUuNjY4YTIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0IDIuOTc0IDIuOTc3IDIuOTc3IDAgMCAwIDIuOTc0LTIuOTc0VjQuODA3YTIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0LTIuOTc0IDIuOTc3IDIuOTc3IDAgMCAxIDIuOTc0IDIuOTc0djUuMzk2Ii8+PHBhdGggc3Ryb2tlPSIjZmZmIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Im0xMi4xOTIgOC45NDggMi40MDQgMi40MDNNMTQuNTk3IDExLjM1MSAxNyA4Ljk0OCIvPjwvc3ZnPg==) center no-repeat}.GProuteFormMini{max-height:78px}.GProuteFormMini .GPelementShow{color:var(--grey-200-850)}.GProuteModeLabel{margin-bottom:.5rem}[id^=GProuteForm-] p.gpf-label{margin-bottom:.2rem;margin-top:0}[id^=GProuteForm-]>.GPpanelFooter{position:unset}[id^=GProuteSubmit-]{width:80%}[id^=GProuteForm-]>[class^=GPlocationPoint-]{margin-top:0}[id^=GProuteForm-]>p.gpf-label{margin-top:1rem}[id^=GProuteForm-].GProuteFormMini>p.gpf-label{margin-top:0}[id^=GProuteForm-]>p.gpf-label~p.gpf-label{margin-top:.5rem}button[id^=GProuteReset-],div[id^=GProuteResultsNew-]{min-width:2.5em}div[id^=GProuteResultsValueDist],div[id^=GProuteResultsValueTime]{color:var(--text-action-high-blue-france);font-weight:700}.GProuteResultsShowDetailsDiv{justify-content:left}div:has(input[id^=GProuteResultsShowDetails])+div[id^=GProuteResultsDetails-]{max-height:0;opacity:0;overflow:hidden}div:has(input[id^=GProuteResultsShowDetails]:checked)+div[id^=GProuteResultsDetails-]{max-height:200px;opacity:1;overflow-y:scroll}div[id^=GProuteResultsDetails-]{display:grid;gap:.5rem 5px;grid-template-columns:30px 1fr;max-width:350px;transition:max-height .5s ease-in-out .25s,opacity .5s ease-in-out .25s}.GProuteResultsDetailsInstruction,.GProuteResultsDetailsNumber{display:inline-block}.GProuteResultsDetailsNumber{font-weight:700;text-align:right;vertical-align:top}.GProuteExclusionsOptions{color:var(--text-label-grey);gap:.5rem}@media (max-width:576px){.gpf-mobile-fullscreen div[id^=GProuteResultsDetails-]{max-width:unset}}.gpf-widget-padding{padding-bottom:5px;padding-top:5px}.gpf-widget-color{background-color:var(--background-default-grey)}.GPlabelTitle,.gpf-panel__items_searchengine{border-bottom:1px solid var(--grey-900-175);color:var(--text-action-high-blue-france);padding:12px}.gpf-panel__items.GPautoCompleteProposal{box-sizing:border-box;height:45px;margin-bottom:0}.GPlabelTitle{background-color:var(--background-open-blue-france);font-size:1em;margin-bottom:0}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{max-height:unset}input[name^=inputSex].gpf-input,select[name^=inputSex].gpf-select{padding:unset}button[id^=GPsearchInputReset]{height:40px;width:40px}[id^=GPshowSearchDiv]{flex-direction:row-reverse}[id^=GPsearchEngine-]{flex-direction:column}[id^=GPsearchEngine-].gpf-widget-padding{align-items:center}div.GPbuttonsContainer>button{width:40px}.GPsearchFirstLineWrapper{height:40px}.gpf-widget-padding>.GPsearchFirstLineWrapper{margin:.5rem 0}.GPbuttonsContainer{height:56px;padding-left:10px}.GPsearchRadioContainer{background-color:var(--background-default-grey);display:flex;flex-direction:row;gap:1rem;max-height:0;overflow:clip;transition:max-height .3s;white-space:nowrap}[id^=GPsearchEngine-]:focus-within>.GPsearchRadioContainer,[id^=GPsearchEngine-]:has([id^=GPshowSearchByCoordinate-][aria-pressed=true])>.GPsearchRadioContainer,[id^=GPsearchEngine-]:hover>.GPsearchRadioContainer{max-height:3rem}.GPsearchRadioElements{display:flex;flex-direction:row;gap:1rem}.GPshowAdvancedSearch{align-items:center;color:var(--text-action-high-blue-france);cursor:pointer;display:flex;text-decoration:underline}.gpf-btn-icon-search{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZjVmNWZlIiBkPSJtMTguMDMxIDE2LjYxNyA0LjI4MyA0LjI4Mi0xLjQxNSAxLjQxNS00LjI4Mi00LjI4M0E4Ljk2IDguOTYgMCAwIDEgMTEgMjBjLTQuOTY4IDAtOS00LjAzMi05LTlzNC4wMzItOSA5LTkgOSA0LjAzMiA5IDlhOC45NiA4Ljk2IDAgMCAxLTEuOTY5IDUuNjE3bS0yLjAwNi0uNzQyQTYuOTggNi45OCAwIDAgMCAxOCAxMWMwLTMuODY4LTMuMTMzLTctNy03cy03IDMuMTMyLTcgNyAzLjEzMiA3IDcgN2E2Ljk4IDYuOTggMCAwIDAgNC44NzUtMS45NzV6Ii8+PC9zdmc+);background-position:50%;background-repeat:no-repeat;width:40px}form[id^=GPsearchInput-]{margin-left:8px;width:300px}button[id^=GPshowSearchEnginePicto-][aria-pressed=false]+form[id^=GPsearchInput-]{border:none;max-width:300px}button[id^=GPshowSearchEnginePicto-]{border-radius:0 .25rem 0 0}.gpf-btn-icon-search-advanced:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLjIyNyAxMS4zMzNhNi43IDYuNyAwIDAgMS0uNjUyLTEuNTUgMiAyIDAgMCAwIC4wMDEtMy41NjUgNi42NiA2LjY2IDAgMCAxIDEuNjY3LTIuODkxIDIgMiAwIDAgMCAzLjA4OC0xLjc4MyA2LjY2IDYuNjYgMCAwIDEgMy4zMzguMDAxIDIgMiAwIDAgMCAzLjA4OCAxLjc4MmMuMzg2LjM5My43MjguODQgMS4wMTYgMS4zNC4yODkuNDk5LjUwNSAxLjAyLjY1MiAxLjU1YTIgMiAwIDAgMC0uMDAxIDMuNTY1IDYuNjYgNi42NiAwIDAgMS0xLjY2NyAyLjg5MSAyIDIgMCAwIDAtMy4wODggMS43ODMgNi42NiA2LjY2IDAgMCAxLTMuMzM4LS4wMDEgMiAyIDAgMCAwLTMuMDg4LTEuNzgyIDYuNyA2LjcgMCAwIDEtMS4wMTYtMS4zNE02IDExLjQ2NGEzLjMzIDMuMzMgMCAwIDEgMS41IDEuODQ3cS41LjA0NyAxIDBjLjI1NS0uNzguNzktMS40MzcgMS41LTEuODQ2YTMuMzMgMy4zMyAwIDAgMSAyLjM1LS4zNzdxLjI5LS40MS40OTktLjg2NUEzLjMzIDMuMzMgMCAwIDEgMTIgOGMwLS44NC4zMTMtMS42MjUuODQ5LTIuMjIzYTUuNCA1LjQgMCAwIDAtLjUtLjg2NUEzLjMzIDMuMzMgMCAwIDEgOC41IDIuNjg5YTUuMyA1LjMgMCAwIDAtMSAwQTMuMzMgMy4zMyAwIDAgMSA2IDQuNTM1Yy0uNzEuNDExLTEuNTQ3LjU0NS0yLjM1LjM3N3EtLjI5LjQxLS40OTkuODY1QzMuNjk4IDYuMzg4IDQuMDAxIDcuMTggNCA4YzAgLjg0LS4zMTMgMS42MjUtLjg0OSAyLjIyM3EuMjEuNDU2LjUuODY1QTMuMzMgMy4zMyAwIDAgMSA2IDExLjQ2NE04IDEwYTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNG0wLTEuMzMzYS42NjcuNjY3IDAgMSAwIDAtMS4zMzQuNjY3LjY2NyAwIDAgMCAwIDEuMzM0IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLjIyNyAxMS4zMzNhNi43IDYuNyAwIDAgMS0uNjUyLTEuNTUgMiAyIDAgMCAwIC4wMDEtMy41NjUgNi42NiA2LjY2IDAgMCAxIDEuNjY3LTIuODkxIDIgMiAwIDAgMCAzLjA4OC0xLjc4MyA2LjY2IDYuNjYgMCAwIDEgMy4zMzguMDAxIDIgMiAwIDAgMCAzLjA4OCAxLjc4MmMuMzg2LjM5My43MjguODQgMS4wMTYgMS4zNC4yODkuNDk5LjUwNSAxLjAyLjY1MiAxLjU1YTIgMiAwIDAgMC0uMDAxIDMuNTY1IDYuNjYgNi42NiAwIDAgMS0xLjY2NyAyLjg5MSAyIDIgMCAwIDAtMy4wODggMS43ODMgNi42NiA2LjY2IDAgMCAxLTMuMzM4LS4wMDEgMiAyIDAgMCAwLTMuMDg4LTEuNzgyIDYuNyA2LjcgMCAwIDEtMS4wMTYtMS4zNE02IDExLjQ2NGEzLjMzIDMuMzMgMCAwIDEgMS41IDEuODQ3cS41LjA0NyAxIDBjLjI1NS0uNzguNzktMS40MzcgMS41LTEuODQ2YTMuMzMgMy4zMyAwIDAgMSAyLjM1LS4zNzdxLjI5LS40MS40OTktLjg2NUEzLjMzIDMuMzMgMCAwIDEgMTIgOGMwLS44NC4zMTMtMS42MjUuODQ5LTIuMjIzYTUuNCA1LjQgMCAwIDAtLjUtLjg2NUEzLjMzIDMuMzMgMCAwIDEgOC41IDIuNjg5YTUuMyA1LjMgMCAwIDAtMSAwQTMuMzMgMy4zMyAwIDAgMSA2IDQuNTM1Yy0uNzEuNDExLTEuNTQ3LjU0NS0yLjM1LjM3N3EtLjI5LjQxLS40OTkuODY1QzMuNjk4IDYuMzg4IDQuMDAxIDcuMTggNCA4YzAgLjg0LS4zMTMgMS42MjUtLjg0OSAyLjIyM3EuMjEuNDU2LjUuODY1QTMuMzMgMy4zMyAwIDAgMSA2IDExLjQ2NE04IDEwYTIgMiAwIDEgMSAwLTQgMiAyIDAgMCAxIDAgNG0wLTEuMzMzYS42NjcuNjY3IDAgMSAwIDAtMS4zMzQuNjY3LjY2NyAwIDAgMCAwIDEuMzM0IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat}.gpf-btn-icon-search-geolocate:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE5IDIwIj48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOS41IDE2LjI5MmE2LjI5MiA2LjI5MiAwIDEgMCAwLTEyLjU4NCA2LjI5MiA2LjI5MiAwIDAgMCAwIDEyLjU4NFoiLz48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xIDEwaDIuMjA4TTE1Ljc5MiAxMEgxOE05LjUgMS41djIuMjA4TTkuNSAxNi4yOTJWMTguNSIvPjxwYXRoIGZpbGw9IiMxMDEwOTIiIGQ9Ik05LjUgMTEuMTA0YTEuMTA0IDEuMTA0IDAgMSAwIDAtMi4yMDggMS4xMDQgMS4xMDQgMCAwIDAgMCAyLjIwOCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE5IDIwIj48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOS41IDE2LjI5MmE2LjI5MiA2LjI5MiAwIDEgMCAwLTEyLjU4NCA2LjI5MiA2LjI5MiAwIDAgMCAwIDEyLjU4NFoiLz48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xIDEwaDIuMjA4TTE1Ljc5MiAxMEgxOE05LjUgMS41djIuMjA4TTkuNSAxNi4yOTJWMTguNSIvPjxwYXRoIGZpbGw9IiMxMDEwOTIiIGQ9Ik05LjUgMTEuMTA0YTEuMTA0IDEuMTA0IDAgMSAwIDAtMi4yMDggMS4xMDQgMS4xMDQgMCAwIDAgMCAyLjIwOCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-icon-search-coordinate:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMTAxMDkyIiBkPSJNOS43MDIgNC44NjhIOC42NWMtLjQ5MSAwLS42OS0uMzUtLjQ1Ni0uNzcxQTI3MyAyNzMgMCAwIDEgMTAuMDA2Ljk2NGMuMjM0LS4zOTcuNjMxLS4zOTcuODY1LjAxMmE0MDkgNDA5IDAgMCAxIDEuNzY1IDMuMDVjLjI5Mi41MTUuMDkzLjgzLS41MDMuODQyaC0uOTdjMCAuMTQtLjAxMi4yMzQtLjAxMi4zNHY2LjEzNmMwIC4xNC4wODIuMzM5LjE4Ny40MiAyLjAxIDEuNDI3IDQuMDMzIDIuODQxIDYuMDU1IDQuMjU2LjAyNC4wMTEuMDU5LjAyMy4xMDUuMDQ2LjIxLS4yOC40MjEtLjU2LjYzMi0uODMuMzI3LS40Mi43MTMtLjM4NS45MTEuMTA2LjQ2OCAxLjA3NS45MjQgMi4xNjIgMS4zOCAzLjIzNy4yMS40OTEtLjAxMi43OTUtLjU1LjczN2EzNDcgMzQ3IDAgMCAxLTMuNDcxLS4zOTdjLS41ODUtLjA3LS43MjUtLjQzMy0uMzYzLS45bC40OTEtLjY2N2MuMDEyLS4wMTIuMDEyLS4wMzUuMDQ3LS4xMDVhMjI1IDIyNSAwIDAgMS0xLjExLS43OTVjLTEuNTktMS4xMjItMy4xOTEtMi4yMzMtNC43ODEtMy4zNTUtLjE5OS0uMTQtLjM0LS4xNjMtLjU1IDBhMTY3MiAxNjcyIDAgMCAxLTUuNjU3IDMuOTg2Yy0uMDQ3LjAzNS0uMDgyLjA1OS0uMTQuMTA2LjIyMi4zMDMuNDU1LjU4NC42NjYuODg4LjI5Mi40MDkuMTUyLjc3MS0uMzYyLjgzLTEuMTkzLjE1Mi0yLjM5Ny4yOTItMy41ODkuNDItLjQ0NC4wNDctLjY2Ni0uMjY4LS40OTEtLjcuMzg2LS45MjQuNzgzLTEuODQ4IDEuMTgtMi43NzEuMDgyLS4xODcuMTUzLS4zNzQuMjM0LS41NS4yLS40Mi41NzMtLjQ2Ny44NzctLjEwNWwuNTYxLjczN2MuMDEyLjAxMS4wMzUuMDIzLjA4Mi4wNDcuNjY2LS40NjggMS4zMzMtLjkzNiAyLjAxLTEuNDE1IDEuMjk4LS45MTIgMi41OTUtMS44MzUgMy45MDUtMi43MzUuMjIyLS4xNTIuMjkyLS4zMTYuMjkyLS41NzNWNC44NTd6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDIxIDIwIj48cGF0aCBmaWxsPSIjMTAxMDkyIiBkPSJNOS43MDIgNC44NjhIOC42NWMtLjQ5MSAwLS42OS0uMzUtLjQ1Ni0uNzcxQTI3MyAyNzMgMCAwIDEgMTAuMDA2Ljk2NGMuMjM0LS4zOTcuNjMxLS4zOTcuODY1LjAxMmE0MDkgNDA5IDAgMCAxIDEuNzY1IDMuMDVjLjI5Mi41MTUuMDkzLjgzLS41MDMuODQyaC0uOTdjMCAuMTQtLjAxMi4yMzQtLjAxMi4zNHY2LjEzNmMwIC4xNC4wODIuMzM5LjE4Ny40MiAyLjAxIDEuNDI3IDQuMDMzIDIuODQxIDYuMDU1IDQuMjU2LjAyNC4wMTEuMDU5LjAyMy4xMDUuMDQ2LjIxLS4yOC40MjEtLjU2LjYzMi0uODMuMzI3LS40Mi43MTMtLjM4NS45MTEuMTA2LjQ2OCAxLjA3NS45MjQgMi4xNjIgMS4zOCAzLjIzNy4yMS40OTEtLjAxMi43OTUtLjU1LjczN2EzNDcgMzQ3IDAgMCAxLTMuNDcxLS4zOTdjLS41ODUtLjA3LS43MjUtLjQzMy0uMzYzLS45bC40OTEtLjY2N2MuMDEyLS4wMTIuMDEyLS4wMzUuMDQ3LS4xMDVhMjI1IDIyNSAwIDAgMS0xLjExLS43OTVjLTEuNTktMS4xMjItMy4xOTEtMi4yMzMtNC43ODEtMy4zNTUtLjE5OS0uMTQtLjM0LS4xNjMtLjU1IDBhMTY3MiAxNjcyIDAgMCAxLTUuNjU3IDMuOTg2Yy0uMDQ3LjAzNS0uMDgyLjA1OS0uMTQuMTA2LjIyMi4zMDMuNDU1LjU4NC42NjYuODg4LjI5Mi40MDkuMTUyLjc3MS0uMzYyLjgzLTEuMTkzLjE1Mi0yLjM5Ny4yOTItMy41ODkuNDItLjQ0NC4wNDctLjY2Ni0uMjY4LS40OTEtLjcuMzg2LS45MjQuNzgzLTEuODQ4IDEuMTgtMi43NzEuMDgyLS4xODcuMTUzLS4zNzQuMjM0LS41NS4yLS40Mi41NzMtLjQ2Ny44NzctLjEwNWwuNTYxLjczN2MuMDEyLjAxMS4wMzUuMDIzLjA4Mi4wNDcuNjY2LS40NjggMS4zMzMtLjkzNiAyLjAxLTEuNDE1IDEuMjk4LS45MTIgMi41OTUtMS44MzUgMy45MDUtMi43MzUuMjIyLS4xNTIuMjkyLS4zMTYuMjkyLS41NzNWNC44NTd6Ii8+PC9zdmc+) center no-repeat}.gpf-btn-icon-search-reset{background-position:-25px}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{position:absolute;top:66px;width:inherit}[id^=GPautocompleteResults-]{border:1px solid var(--background-open-blue-france)}dialog[id^=GPgeocodeResultsList],div[id^=GPautoCompleteList]{background-color:var(--background-default-grey);height:fit-content;max-height:unset;position:absolute;width:320px}div[id^=GPautoCompleteList]{margin-left:2px;top:42px}.position-container-bottom-left [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-bottom-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-left [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList]{margin-left:8px;position:relative;top:unset;width:340px}.position-container-bottom-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList],.position-container-top-right [id^=GPsearchEngine-]>div[id^=GPautoCompleteList]{margin-right:10px}.gpf-widget-padding>div[id^=GPautoCompleteList]{margin:0;top:100%;width:100%}dialog[id^=GPgeocodeResultsList]{border-radius:4px;overflow:hidden;position:absolute;top:55px}div[id^=GPgeocodeResults-]{background-color:var(--background-default-grey);max-height:240px;overflow-y:auto;position:relative;width:100%}[id^=GPautocompleteResultsLocation],[id^=GPautocompleteResultsSuggest]{height:225px}@media (max-width:576px){.gpf-widget-padding>.GPsearchFirstLineWrapper{flex-direction:column;height:fit-content}.GPsearchRadioContainer{align-items:center;flex-direction:column}dialog[id^=GPadvancedSearchPanel],dialog[id^=GPcoordinateSearchPanel]{margin-left:unset;position:relative;top:unset}.GPsearchRadioContainer{gap:0;margin:0 8px}form[id^=GPsearchInput-]{margin-left:0}[id^=GPsearchEngine-]:focus-within>.GPsearchRadioContainer,[id^=GPsearchEngine-]:has([id^=GPshowSearchByCoordinate-][aria-pressed=true])>.GPsearchRadioContainer,[id^=GPsearchEngine-]:hover>.GPsearchRadioContainer{max-height:4rem}}.gpf-btn-icon-toolbox{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAlqAAAJagFGUcfpAAAAB3RJTUUH4AsKDCgkqrnTSAAAAw1JREFUSMe9ll2IlVUUhp9vnEintH+FulAyI+uihClKjSZtQJAJrRnDoKt+oCIIjSIrDCokKXQiCqkuTMFAJtQLCwItMsQbURmjiRIK+pmSoSjJ/JmnC98je6ZzjmVMCzbnO/vstd691nrf9R0YA1NRn2SsTX1E/UM9vVc1OdwC3A7cBLQD1wE/Al8AA0BfVVXf1vFbAmwCjgPjq+oUREsDkBuA3UBfwL4EXgS2AgJLgIPqw2pV+HUCG4B9/yTtF9Rj6pvqBeo4db7apU5N/VGXqofVHeo09Ub1N3Wdeo/6Z1m60SAL1KPqrQnWqR5Qt6pvqYfU1WqbWqnvqt+p89Sf1T61pSmQOkH9Wl2ZLDaru9T2gLapH6mvB6RXHVRvU79Rd6rnqteoH6vHGwEtV7/K4ZXq+qJME9VP1JfzfZU6lMwPqnvVSfltkvpMyl8X6L3ccmIyayuAdqjP5flZ9deA7M7lpqjjC5+eZkAH1AfT5LVxaFUfV39JoGXq72qHul39Qb0ypX5fvaIRUEnv6dHIZGAwe28Ac4DngQeAl4DFeZ4NLAAOAb3ZP1nEG6HREmgAmAEcBmYCTwFTgaXAEPAK0AMsBO4G7gT2A08Aj9YKM+qzbul61Q0hQ7+6L43tCVW71RXqCXVRUaJhdaOnbHIY2d2Mdd3q96F5e0TYFV3dl/4Nq/cHZE7m2avqLQXQeTlzohFQm/q5+k4C3ZFAD6mL4/h0frs6U2FzMpgdoEujq371ZCMg1GvDqjXqkTCuI1mtyZnLQv9dYWItO9VLwsC7GgIVYPfGaYU6K5rZmJtPUPeoAwla85lbALWcEagA61Svyoj5QD0nAbaoP0U71AJFvKoX50J/A2odDVRVFWo/8Fk00p13y2tAJzAv+6cvVmjGYo3QUWudjC4EPgSORjNHgGXAY3kfzcoqbcaZ9NM6eoID24CLMhGGgA5geabFzVn1bBAYBs4HLm/Wm3HqttB2ZtHof7va1U/Ts7oZvQ10AWuB67PO1vYAc+tls9qxsZETtinf/6PV/gX9b/YXjLd1o+WqCcMAAAAASUVORK5CYII=);background-position:3px;background-repeat:no-repeat}.gpf-btn-icon-zoom-in{height:inherit;width:inherit}.gpf-btn-icon-zoom-in:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwTTEyIDd2MTAiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwTTEyIDd2MTAiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMC43NSIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS41Ii8+PC9zdmc+) center no-repeat}.gpf-btn-icon-zoom-out{height:inherit;width:inherit}.gpf-btn-icon-zoom-out:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwIi8+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAuNzUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik03IDEyaDEwIi8+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAuNzUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIvPjwvc3ZnPg==) center no-repeat}.ol-custom-full-screen button{background-position:50%;background-repeat:no-repeat;height:40px;width:40px}.ol-custom-full-screen button.ol-custom-full-screen-false:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuMTI1IDIuMjVhLjc1Ljc1IDAgMCAwIDAgMS41em00LjM3NSAxLjVoLjc1di0xLjVoLS43NXptLTQuMzc1IDBIMjAuNXYtMS41aC00LjM3NXoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjEuMjUgM3YtLjc1aC0xLjVWM3ptLTEuNSA0LjM3NWEuNzUuNzUgMCAwIDAgMS41IDB6bTAtNC4zNzV2NC4zNzVoMS41VjN6TTcuMzc1IDIxLjI1YS43NS43NSAwIDAgMCAwLTEuNXpNMyAxOS43NWgtLjc1djEuNUgzem00LjM3NSAwSDN2MS41aDQuMzc1eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0yLjI1IDIwLjV2Ljc1aDEuNXYtLjc1em0xLjUtNC4zNzVhLjc1Ljc1IDAgMCAwLTEuNSAwem0wIDQuMzc1di00LjM3NWgtMS41VjIwLjV6TTIwLjIxMiA0LjM0OWwuNTMtLjUzLTEuMDYtMS4wNjEtLjUzMS41M3ptLTYuNzE4IDQuNTk2YS43NS43NSAwIDEgMCAxLjA2IDEuMDZ6bTUuNjU3LTUuNjU3LTUuNjU3IDUuNjU3IDEuMDYgMS4wNiA1LjY1OC01LjY1NnoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNOS45OTkgMTQuNTYyYS43NS43NSAwIDEgMC0xLjA2LTEuMDZ6bS02LjcxOCA0LjU5Ni0uNTMuNTMgMS4wNiAxLjA2MS41MzEtLjUzem01LjY1Ny01LjY1Ny01LjY1NyA1LjY1NyAxLjA2MSAxLjA2TDEwIDE0LjU2M3oiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuMTI1IDIuMjVhLjc1Ljc1IDAgMCAwIDAgMS41em00LjM3NSAxLjVoLjc1di0xLjVoLS43NXptLTQuMzc1IDBIMjAuNXYtMS41aC00LjM3NXoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjEuMjUgM3YtLjc1aC0xLjVWM3ptLTEuNSA0LjM3NWEuNzUuNzUgMCAwIDAgMS41IDB6bTAtNC4zNzV2NC4zNzVoMS41VjN6TTcuMzc1IDIxLjI1YS43NS43NSAwIDAgMCAwLTEuNXpNMyAxOS43NWgtLjc1djEuNUgzem00LjM3NSAwSDN2MS41aDQuMzc1eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0yLjI1IDIwLjV2Ljc1aDEuNXYtLjc1em0xLjUtNC4zNzVhLjc1Ljc1IDAgMCAwLTEuNSAwem0wIDQuMzc1di00LjM3NWgtMS41VjIwLjV6TTIwLjIxMiA0LjM0OWwuNTMtLjUzLTEuMDYtMS4wNjEtLjUzMS41M3ptLTYuNzE4IDQuNTk2YS43NS43NSAwIDEgMCAxLjA2IDEuMDZ6bTUuNjU3LTUuNjU3LTUuNjU3IDUuNjU3IDEuMDYgMS4wNiA1LjY1OC01LjY1NnoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNOS45OTkgMTQuNTYyYS43NS43NSAwIDEgMC0xLjA2LTEuMDZ6bS02LjcxOCA0LjU5Ni0uNTMuNTMgMS4wNiAxLjA2MS41MzEtLjUzem01LjY1Ny01LjY1Ny01LjY1NyA1LjY1NyAxLjA2MSAxLjA2TDEwIDE0LjU2M3oiLz48L3N2Zz4=) center no-repeat}.ol-custom-full-screen button.ol-custom-full-screen-true:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTMuNzczIDEwLjk2OGg0LjM4Yy40MSAwIC43NS0uMzQuNzUtLjc1cy0uMzQtLjc1LS43NS0uNzVoLTIuNTZsNS4xOS01LjE5Yy4yOS0uMjkuMjktLjc3IDAtMS4wNmEuNzU0Ljc1NCAwIDAgMC0xLjA2IDBsLTUuMiA1LjJ2LTIuNTZjMC0uNDEtLjM0LS43NS0uNzUtLjc1cy0uNzUuMzQtLjc1Ljc1djUuMTF6TTQuMjc4IDIwLjc4M2w1LjE5LTUuMTl2Mi41NmMwIC40MS4zNC43NS43NS43NXMuNzUtLjM0Ljc1LS43NXYtNS4xMmgtNS4xMmMtLjQxIDAtLjc1LjM0LS43NS43NXMuMzQuNzUuNzUuNzVoMi41NmwtNS4xOSA1LjE5Yy0uMjkuMjktLjI5Ljc3IDAgMS4wNnMuNzcuMjkgMS4wNiAwIi8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTMuNzczIDEwLjk2OGg0LjM4Yy40MSAwIC43NS0uMzQuNzUtLjc1cy0uMzQtLjc1LS43NS0uNzVoLTIuNTZsNS4xOS01LjE5Yy4yOS0uMjkuMjktLjc3IDAtMS4wNmEuNzU0Ljc1NCAwIDAgMC0xLjA2IDBsLTUuMiA1LjJ2LTIuNTZjMC0uNDEtLjM0LS43NS0uNzUtLjc1cy0uNzUuMzQtLjc1Ljc1djUuMTF6TTQuMjc4IDIwLjc4M2w1LjE5LTUuMTl2Mi41NmMwIC40MS4zNC43NS43NS43NXMuNzUtLjM0Ljc1LS43NXYtNS4xMmgtNS4xMmMtLjQxIDAtLjc1LjM0LS43NS43NXMuMzQuNzUuNzUuNzVoMi41NmwtNS4xOSA1LjE5Yy0uMjkuMjktLjI5Ljc3IDAgMS4wNnMuNzcuMjkgMS4wNiAwIi8+PC9zdmc+) center no-repeat}.gpf-btn-icon-overviewmap:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyA1LjcgOS4zIDNsNS40IDIuNyA1LjY3My0yLjQzMWEuNDUuNDUgMCAwIDEgLjYyNy40MTNWMTguM0wxNC43IDIxbC01LjQtMi43LTUuNjczIDIuNDMxQS40NS40NSAwIDAgMSAzIDIwLjMxN3ptMTIuNiAxMi45NTYgMy42LTEuNTQzVjUuNzNsLTMuNiAxLjU0M3ptLTEuOC0uMTE4VjcuMjYybC0zLjYtMS44djExLjI3NnptLTUuNC0xLjgxVjUuMzQzTDQuOCA2Ljg4N1YxOC4yN3oiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMyA1LjcgOS4zIDNsNS40IDIuNyA1LjY3My0yLjQzMWEuNDUuNDUgMCAwIDEgLjYyNy40MTNWMTguM0wxNC43IDIxbC01LjQtMi43LTUuNjczIDIuNDMxQS40NS40NSAwIDAgMSAzIDIwLjMxN3ptMTIuNiAxMi45NTYgMy42LTEuNTQzVjUuNzNsLTMuNiAxLjU0M3ptLTEuOC0uMTE4VjcuMjYybC0zLjYtMS44djExLjI3NnptLTUuNC0xLjgxVjUuMzQzTDQuOCA2Ljg4N1YxOC4yN3oiLz48L3N2Zz4=) center no-repeat}.ol-overviewmap:has(>.gpf-btn-icon[aria-pressed=true]):after{transform:translateY(-100%)}.ol-overviewmap:not(.ol-collapsed){background:unset}.gpf-btn-icon-legends:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDQwIDQwIj48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Ik0yNC4xMjggMjYuMTExVjI4SDEyLjdjLS45NDQgMC0xLjctLjc1Ni0xLjctMS43VjExaDEzLjAzM3YxNC45MjJjMCAxLjA0Ljc1NiAxLjk4MyAxLjc5NSAyLjA3OCAxLjEzMy4wOTQgMi4xNzItLjg1IDIuMTcyLTEuOTgzdi0zLjAyM2gtMy44NzIiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTE0LjcwMyAxNS43MjJoNS42NjdNMTQuNzAzIDE5LjVoNS42NjdNMTQuNzAzIDIzLjI3OGg1LjY2NyIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTI2LjExMSAyOGgtMS45ODMiLz48L3N2Zz4=) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDQwIDQwIj48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGQ9Ik0yNC4xMjggMjYuMTExVjI4SDEyLjdjLS45NDQgMC0xLjctLjc1Ni0xLjctMS43VjExaDEzLjAzM3YxNC45MjJjMCAxLjA0Ljc1NiAxLjk4MyAxLjc5NSAyLjA3OCAxLjEzMy4wOTQgMi4xNzItLjg1IDIuMTcyLTEuOTgzdi0zLjAyM2gtMy44NzIiLz48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTE0LjcwMyAxNS43MjJoNS42NjdNMTQuNzAzIDE5LjVoNS42NjdNMTQuNzAzIDIzLjI3OGg1LjY2NyIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjEuNSIgZD0iTTI2LjExMSAyOGgtMS45ODMiLz48L3N2Zz4=) center no-repeat}.gpf-btn-header-legends{height:26px;position:absolute;width:26px;z-index:2}.gpf-btn-icon-header-legends{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBzdHJva2U9IiMxMDEwOTIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjIiIGQ9Ik0xMi42IDEyLjY2NHYxLjMzNEg0LjUzM2MtLjY2NiAwLTEuMi0uNTM0LTEuMi0xLjJ2LTEwLjhoOS4yVjEyLjUzYzAgLjczMy41MzQgMS40IDEuMjY3IDEuNDY3LjguMDY2IDEuNTMzLS42IDEuNTMzLTEuNHYtMi4xMzRIMTIuNiIvPjxwYXRoIHN0cm9rZT0iIzEwMTA5MiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4yIiBkPSJNNS45NDcgNS4zMzFoNE01Ljk0NyA3Ljk5OGg0TTUuOTQ3IDEwLjY2NGg0Ii8+PHBhdGggc3Ryb2tlPSIjMTAxMDkyIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMS4yIiBkPSJNMTQgMTMuOTk4aC0xLjQiLz48L3N2Zz4=);background-position:50%;background-repeat:no-repeat;background-size:auto auto}.gpf-panel__body_legends{max-height:300px!important;overflow:auto}.gpf-panel__title_legends{color:#101092;font-size:1rem;font-weight:400;margin:0;padding:12px 15px;position:relative;right:-16px}.gpf-panel__header_legends{align-content:center;align-items:center;background:#e3e3fd;display:flex;flex-direction:row;height:48px}button[id^=GPcollapseLegend_ID_]{position:absolute;right:0;top:8px}.gpf-btn-icon-legends-collapse{box-shadow:none}.gpf-btn-icon-legends-collapse:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJtOSA5Ljc4MSAzLjMtMy4zLjk0My45NDNMOSAxMS42NjcgNC43NTcgNy40MjQgNS43IDYuNDh6Ii8+PC9zdmc+) center no-repeat;transition:transform .2s ease-out 0s}.gpf-btn-icon-legends-collapse[aria-pressed=true]:after{box-shadow:none;transform:rotate(180deg)}.legend-entry-container{background-color:var(--background-overlap-grey);border-bottom:1px solid var(--border-default-grey);overflow:hidden;position:relative;top:0}.gpf-label-legends-name{line-height:56px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 40px)}button[id^=GPcollapseLegend_ID_][aria-pressed=true]+.legend-entry-image{border-top:1px solid var(--border-default-grey);max-height:300px;opacity:1;overflow:auto;padding:10px 0}.legend-entry-image{display:block;max-height:0;opacity:0;transition:max-height .5s ease-out 0s,opacity .5s ease-out 0s}.legends-entries{padding:0 16px}.gpf-btn-icon-catalog:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNCIgaGVpZ2h0PSIzNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuNzEzIDEyLjc3NGE0LjEyNSA0LjEyNSAwIDEgMSAxLjA2LTEuMDZsMi4wMDcgMi4wMDYtMS4wNiAxLjA2ek01IDZoMy43NXYxLjVINXptMCA1LjI1aDMuNzV2MS41SDV6bTAgNS4yNWgxMy41VjE4SDV6Ii8+PC9zdmc+) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNCIgaGVpZ2h0PSIzNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYuNzEzIDEyLjc3NGE0LjEyNSA0LjEyNSAwIDEgMSAxLjA2LTEuMDZsMi4wMDcgMi4wMDYtMS4wNiAxLjA2ek01IDZoMy43NXYxLjVINXptMCA1LjI1aDMuNzV2MS41SDV6bTAgNS4yNWgxMy41VjE4SDV6Ii8+PC9zdmc+) center no-repeat}@media (max-width:576px){.gpf-mobile-fullscreen .GPtabContent{height:100vh;max-height:unset!important}}.gpf-btn-icon-territories:after{-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi42NDggMS45ODZhLjczLjczIDAgMCAxIC43Ny4yODRsLjIxNy4zMWguMTEzYy4zMTcgMCAuNTkyLjIuNjg0LjQ5OWwuMDM5LjEyNmEuNzIuNzIgMCAwIDEgLjQxLjI1My43LjcgMCAwIDEgLjE4Ny4wNjNsLjI4Ny4xNGEuNy43IDAgMCAxIC4yOTQuMjY3bC4yMzYtLjA1NWEuNzIuNzIgMCAwIDEgLjYwOS4xMy43LjcgMCAwIDEgLjI3My41NTJ2LjI1bC40ODQuMzIzYS43LjcgMCAwIDEgLjMyOC4wNThsLjA3OC4wMzMuMDk5LS4wNGEuNzQuNzQgMCAwIDEgLjQ3NS0uMDIzbC4zODkuMTE0Yy4xMzYuMDQuMjU2LjExOC4zNDYuMjI2bC4yOC4zMzYuMzc0LS4wMzdhLjc0Ljc0IDAgMCAxIC40MS4wNzlsLjIyNi4xMi4zMzEuMDA2Yy4xMzMuMDAzLjI2LjA0LjM3MS4xMWwuMjg5LjE3OWMuMzEyLjE5Ni40MjIuNi4yNS45MmwtLjMxMi41NzgtLjAxNi4xNzRhLjcuNyAwIDAgMS0uMDM0LjE2bC0uMjIyLjYzLjAxNyAxLjA0NWEuNjkuNjkgMCAwIDEtLjI1Ni41NDlsLS40MDcuMzMzYS43LjcgMCAwIDEtLjI0My4xM2wtLjcuODg1Yy4yNC4wNi40NC4yMzguNTEyLjQ4MmwuMDc3LjI1Ni4wOTcuMTIuMjI4LjMzNGEuNjkuNjkgMCAwIDEtLjAxNS44MDFsLjI3LjMxN2EuNy43IDAgMCAxIC4xNjUuNDgzbC0uMDIuMzY0YS43LjcgMCAwIDEtLjI4LjUybC4wNS4wNDhhLjY5LjY5IDAgMCAxIC4wNjEuOTVsLjA4NS4wNTguMDktLjAzMWEuNzIuNzIgMCAwIDEgLjg4OC4zNjVsLjExNy4yNWEuNjkuNjkgMCAwIDEtLjA3OS43MTJsLS4wMzkuMDU1YS42OS42OSAwIDAgMS0uMjQ4LjY0MmwtLjcyLjU4Ny0uMzEyLjE5NmEuNy43IDAgMCAxLS4wNjMuMzE3LjcuNyAwIDAgMS0uNDAyLjM2OWwtLjYzMS4yMjhhMSAxIDAgMCAxLS4xNDkuMDM3bC0uNDcyLjA2NmEuNy43IDAgMCAxLS4yNzQtLjAxM2wtLjk3LS4yMjItLjY0NS0uMTg1LS4wNS0uMDE2YS43My43MyAwIDAgMS0uNDI5LS4wNzhsLS4yMjItLjEyYS43My43MyAwIDAgMS0uNTI4LS4wOTZsLS42MDguMzYtLjE5Mi4zOC4xODcuNjQzYS43LjcgMCAwIDEtLjA2OC41NC43MS43MSAwIDAgMS0uNDMzLjMyOGwtLjc2OC4yYS43LjcgMCAwIDEtLjE4NC4wMjRsLS4xMDItLjAwOC0uNjQ0LS4xMTItLjI5Mi4wNThhLjc0Ljc0IDAgMCAxLS40NS0uMDUzbC0uMzQ0LS4xNjRhLjcuNyAwIDAgMS0uMzcyLS40MjhsLS4yODItLjExMy0uMTE4LS4wMjVhLjcyLjcyIDAgMCAxLS42NTIuMjVsLTEuMjE1LS4xNjFhLjcuNyAwIDAgMS0uMjcyLS4wOTNsLS4yMDUtLjEyaC0uMzFhLjcyLjcyIDAgMCAxLS41Mi0uMjJsLS4yMDgtLjIxNy0uNjk2LS4yOTRhLjcuNyAwIDAgMS0uMzQtLjI5OGwtLjE0MS0uMjQ1LS4yOTgtLjE2MWEuNjkzLjY5MyAwIDAgMS0uMjA4LTEuMDU5bC40NjQtLjU1My4yNTctMS4zOGExIDEgMCAwIDEgLjAyNC0uMDkyLjcuNyAwIDAgMS0uMDQtLjMyOWwuMjEzLTEuODIyYTEgMSAwIDAgMSAuMDE5LS4xLjY5LjY5IDAgMCAxIC4xMzgtLjg1Ny43LjcgMCAwIDEtLjA3NS0uMjE2bC0uMzI4LS4xNjVhLjcuNyAwIDAgMS0uMjQ3LS4yMDZsLS41NTktLjcyOGEuNy43IDAgMCAxLS4xMjYtLjI2NWwtLjE2NS0uNzM3LS4wMDItLjAwOC0uMDc0LS4wNWEuNy43IDAgMCAxLS4xNjItLjE1MWwtLjI0LS4zMTMtMS4zNDMtLjUyNGgtLjM4NmEuNzIuNzIgMCAwIDEtLjYxNy0uMzQ3bC0uMTY0LS4yNzVhLjcuNyAwIDAgMS0uMDgzLS40OTUuNy43IDAgMCAxLS4yNzYtLjM1TDEuNzU0IDguMWEuNjk1LjY5NSAwIDAgMSAuMzczLS44NjVsMS4wMTctLjQ2NmEuNy43IDAgMCAxIC4yNDEtLjA2M2wxLjQwMS0uMTI0YS43NC43NCAwIDAgMSAuNTc0LjIwN2wuMjU5LjI1OS4wNTQtLjAyMWEuNzMuNzMgMCAwIDEgLjM5NC0uMDM2bC4xODcuMDMzLS4yNTMtLjU5Ni0uMTktLjc1N2EuNy43IDAgMCAxIC4xMi0uNTgzLjcxLjcxIDAgMCAxIC41MzUtLjI4NGwuNTc0LS4wMjlhLjcuNyAwIDAgMSAuNTU4LjIyMmwuNDkzLjUxOS42MzkuMTIzLjAwNy0uMDc5YS43LjcgMCAwIDEgLjQ4Mi0uNjA1bDEuMjEzLS40MDkuMzI1LS4yOTItLjA0Ni0uNzFhLjcuNyAwIDAgMSAuMDYtLjMzMWwuMjU0LS41NDVhLjcuNyAwIDAgMSAuNDctLjM4OHptLS4xODggMS45NzgtLjMzLjA4MS0uMDM2LjA3My4wNTUuODE2Yy4wMTMuMi0uMDcuMzkyLS4yMjcuNTI3bC0uNjczLjU3OGEuNy43IDAgMCAxLS4yNDkuMTM4bC0uNzM3LjIzOC4yMjguMTU3LS4yODMuMTM1YS42OC42OCAwIDAgMS0uMzQ3LjM3OGwtLjQ4My4yM2EuNzYuNzYgMCAwIDEtLjQ1LjA2bC0xLjE5LS4yMnYuMDA2bC4wNTcuNzk5Yy4wMjQuMzQyLS4yMy42NC0uNTkuNjk0bC0uMzA0LjA0NGEuNy43IDAgMCAxLS4yMzYtLjAwM2wtLjU4OS0uMS0uMjk5LjExYS43My43MyAwIDAgMS0uNzU1LS4xNTJsLS4zNDYtLjMzLS45MjMuMDc4LS4wMzkuMDE3Yy4xNS4xMy4yMy4zMTYuMjIyLjUwNWwuMDEuMDAzIDEuNjI2LjYwOHEuMTg1LjA3Mi4zLjIxNWwuMjA3LjI1N2EuNzUuNzUgMCAwIDEgLjM5Ni4wNzlsLjM5OC4yMDRjLjE2LjA4My4yOC4yMjMuMzMzLjM4NWwuNTUzLjI4NS0uNTk1LjE5N2EuNy43IDAgMCAxLS4zMTYuMjk5bC4zNS40MzYuNjE2LjI5NmEuNjQ1LjY0NSAwIDAgMSAuMzYyLjczNWwtLjAwNy4wMjguMTM0LjIzNmMuMTA3LjE5LjEwNy40MTEuMDEuNTk2bC4wNTcuMDQ0YS42Ny42NyAwIDAgMSAuMjE4LjMwNGwuMzg3IDEuMWEuNjIuNjIgMCAwIDEtLjAzNi40OTVsLjI2Mi43NDYtLjcyMi0uMzk4YS43LjcgMCAwIDEtLjI3Mi4wMTIuNi42IDAgMCAxLS4wODUuMTc3bC0uMzA1LjQ1MS0uMjYgMS4zMzVhLjY0LjY0IDAgMCAxLS4xNS4zMDFsLS4wNzUuMDg3YTEgMSAwIDAgMSAuMDQyLjA2M2wuMTIuMTk3LjYuMjQyYy4wOTMuMDQuMTY4LjA5LjIzMy4xNTRsLjA5Ny4wOTZoLjE5YS43NC43NCAwIDAgMSAuMzUzLjA5bC4yNTEuMTM5LjM4NC4wNDhhLjcuNyAwIDAgMSAuMTM2LS4xMzkuNzQuNzQgMCAwIDEgLjU4LS4xMzRsLjk4MS4yMDkuNjkuMjYzYS43LjcgMCAwIDEgLjM3LjMyOGwuMDMzLS4wMDdhMSAxIDAgMCAxIC4xNC0uMDEzbC4xMDMuMDA4LjUwNi4wODQtLjA1LS4xNjRhLjYyLjYyIDAgMCAxIC4wNDgtLjQ3NWwuMzk3LS43NTNhLjY3LjY3IDAgMCAxIC4yNjgtLjI3M2wxLjE2NS0uNjU4YS43My43MyAwIDAgMSAuNjcyLS4wMjYuNzQuNzQgMCAwIDEgLjU0LS4wNmwuMjU1LjA3NC4wMzQuMDFhLjc0Ljc0IDAgMCAxIC42NzQuMDc3bC4zOC4yNThjLjEuMDY5LjE4LjE2LjIzLjI2NmwuNTI4LjExNS4yNjItLjAzNS4wNTItLjAxOGEuNy43IDAgMCAxIC4xMDQtLjE3bC4yMjgtLjI2OGEuNy43IDAgMCAxIC4xNy0uMTQzbC40NDEtLjI2NS4xNzUtLjEzOC0uNTcyLS4zNzRhLjY1LjY1IDAgMCAxLS4zLS41MzFsLS4wMS0uNjM3LS4yMzgtLjIxNGEuNjQuNjQgMCAwIDEtLjIxNy0uNDc1di0uMjMyYzAtLjI2NS4xNjctLjUwMi40MjctLjYwNWwtLjA5My0uMTA1YS42NC42NCAwIDAgMS0uMTYyLS4zODVsLS4wMi0uMjlhMSAxIDAgMCAxIC4wMDEtLjA4Mi43NDMuNzQzIDAgMCAxLS44MjQtLjAxM2wtLjIwMS0uMTQ0YS42NC42NCAwIDAgMS0uMjMtLjc2bC4xMDctLjI1OS4wMy0uMzM0YS42My42MyAwIDAgMSAuMTEtLjMwM2wuNDQ3LS42NC40NjEtLjU2MWEuNi42IDAgMCAxIC4wMS0uMjMyLjY2LjY2IDAgMCAxIC4zNi0uNDRsLjIzOC0uMTE2YS43LjcgMCAwIDEgLjI1Mi0uMDcxbC0uMDEyLS42ODlhLjYuNiAwIDAgMSAuMDQtLjIzbC4yMjctLjYxNS4wMi0uMjE0YS42LjYgMCAwIDEgLjAzOS0uMTY0IDEgMSAwIDAgMS0uMDgzLS4wMzZsLS4xNzktLjA5LS41MjYuMDVhLjczLjczIDAgMCAxLS42MTQtLjIzOWwtLjM0OC0uNC0uMTA2LjA0MWEuNzQuNzQgMCAwIDEtLjU0My0uMDA1bC0uMTktLjA3Ny0uMDUzLjAwNGEuNzUuNzUgMCAwIDEtLjQ0My0uMTA2bC0uODYtLjU0OGEuNy43IDAgMCAxLS4xMzYtLjExMy43LjcgMCAwIDEtLjItLjAwOGwtLjQ2MS0uMDhhLjY4LjY4IDAgMCAxLS41Ny0uNThsLS4wMTEtLjEwNWEuNy43IDAgMCAxLS40NzUtLjMxNGwtLjAxLS4wMTZhLjcuNyAwIDAgMS0uMjk2LS4xNDZsLS4xNzItLjE0M2EuNy43IDAgMCAxLS4xMTMtLjEyLjcuNyAwIDAgMS0uNTItLjI4NHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi42NDggMS45ODZhLjczLjczIDAgMCAxIC43Ny4yODRsLjIxNy4zMWguMTEzYy4zMTcgMCAuNTkyLjIuNjg0LjQ5OWwuMDM5LjEyNmEuNzIuNzIgMCAwIDEgLjQxLjI1My43LjcgMCAwIDEgLjE4Ny4wNjNsLjI4Ny4xNGEuNy43IDAgMCAxIC4yOTQuMjY3bC4yMzYtLjA1NWEuNzIuNzIgMCAwIDEgLjYwOS4xMy43LjcgMCAwIDEgLjI3My41NTJ2LjI1bC40ODQuMzIzYS43LjcgMCAwIDEgLjMyOC4wNThsLjA3OC4wMzMuMDk5LS4wNGEuNzQuNzQgMCAwIDEgLjQ3NS0uMDIzbC4zODkuMTE0Yy4xMzYuMDQuMjU2LjExOC4zNDYuMjI2bC4yOC4zMzYuMzc0LS4wMzdhLjc0Ljc0IDAgMCAxIC40MS4wNzlsLjIyNi4xMi4zMzEuMDA2Yy4xMzMuMDAzLjI2LjA0LjM3MS4xMWwuMjg5LjE3OWMuMzEyLjE5Ni40MjIuNi4yNS45MmwtLjMxMi41NzgtLjAxNi4xNzRhLjcuNyAwIDAgMS0uMDM0LjE2bC0uMjIyLjYzLjAxNyAxLjA0NWEuNjkuNjkgMCAwIDEtLjI1Ni41NDlsLS40MDcuMzMzYS43LjcgMCAwIDEtLjI0My4xM2wtLjcuODg1Yy4yNC4wNi40NC4yMzguNTEyLjQ4MmwuMDc3LjI1Ni4wOTcuMTIuMjI4LjMzNGEuNjkuNjkgMCAwIDEtLjAxNS44MDFsLjI3LjMxN2EuNy43IDAgMCAxIC4xNjUuNDgzbC0uMDIuMzY0YS43LjcgMCAwIDEtLjI4LjUybC4wNS4wNDhhLjY5LjY5IDAgMCAxIC4wNjEuOTVsLjA4NS4wNTguMDktLjAzMWEuNzIuNzIgMCAwIDEgLjg4OC4zNjVsLjExNy4yNWEuNjkuNjkgMCAwIDEtLjA3OS43MTJsLS4wMzkuMDU1YS42OS42OSAwIDAgMS0uMjQ4LjY0MmwtLjcyLjU4Ny0uMzEyLjE5NmEuNy43IDAgMCAxLS4wNjMuMzE3LjcuNyAwIDAgMS0uNDAyLjM2OWwtLjYzMS4yMjhhMSAxIDAgMCAxLS4xNDkuMDM3bC0uNDcyLjA2NmEuNy43IDAgMCAxLS4yNzQtLjAxM2wtLjk3LS4yMjItLjY0NS0uMTg1LS4wNS0uMDE2YS43My43MyAwIDAgMS0uNDI5LS4wNzhsLS4yMjItLjEyYS43My43MyAwIDAgMS0uNTI4LS4wOTZsLS42MDguMzYtLjE5Mi4zOC4xODcuNjQzYS43LjcgMCAwIDEtLjA2OC41NC43MS43MSAwIDAgMS0uNDMzLjMyOGwtLjc2OC4yYS43LjcgMCAwIDEtLjE4NC4wMjRsLS4xMDItLjAwOC0uNjQ0LS4xMTItLjI5Mi4wNThhLjc0Ljc0IDAgMCAxLS40NS0uMDUzbC0uMzQ0LS4xNjRhLjcuNyAwIDAgMS0uMzcyLS40MjhsLS4yODItLjExMy0uMTE4LS4wMjVhLjcyLjcyIDAgMCAxLS42NTIuMjVsLTEuMjE1LS4xNjFhLjcuNyAwIDAgMS0uMjcyLS4wOTNsLS4yMDUtLjEyaC0uMzFhLjcyLjcyIDAgMCAxLS41Mi0uMjJsLS4yMDgtLjIxNy0uNjk2LS4yOTRhLjcuNyAwIDAgMS0uMzQtLjI5OGwtLjE0MS0uMjQ1LS4yOTgtLjE2MWEuNjkzLjY5MyAwIDAgMS0uMjA4LTEuMDU5bC40NjQtLjU1My4yNTctMS4zOGExIDEgMCAwIDEgLjAyNC0uMDkyLjcuNyAwIDAgMS0uMDQtLjMyOWwuMjEzLTEuODIyYTEgMSAwIDAgMSAuMDE5LS4xLjY5LjY5IDAgMCAxIC4xMzgtLjg1Ny43LjcgMCAwIDEtLjA3NS0uMjE2bC0uMzI4LS4xNjVhLjcuNyAwIDAgMS0uMjQ3LS4yMDZsLS41NTktLjcyOGEuNy43IDAgMCAxLS4xMjYtLjI2NWwtLjE2NS0uNzM3LS4wMDItLjAwOC0uMDc0LS4wNWEuNy43IDAgMCAxLS4xNjItLjE1MWwtLjI0LS4zMTMtMS4zNDMtLjUyNGgtLjM4NmEuNzIuNzIgMCAwIDEtLjYxNy0uMzQ3bC0uMTY0LS4yNzVhLjcuNyAwIDAgMS0uMDgzLS40OTUuNy43IDAgMCAxLS4yNzYtLjM1TDEuNzU0IDguMWEuNjk1LjY5NSAwIDAgMSAuMzczLS44NjVsMS4wMTctLjQ2NmEuNy43IDAgMCAxIC4yNDEtLjA2M2wxLjQwMS0uMTI0YS43NC43NCAwIDAgMSAuNTc0LjIwN2wuMjU5LjI1OS4wNTQtLjAyMWEuNzMuNzMgMCAwIDEgLjM5NC0uMDM2bC4xODcuMDMzLS4yNTMtLjU5Ni0uMTktLjc1N2EuNy43IDAgMCAxIC4xMi0uNTgzLjcxLjcxIDAgMCAxIC41MzUtLjI4NGwuNTc0LS4wMjlhLjcuNyAwIDAgMSAuNTU4LjIyMmwuNDkzLjUxOS42MzkuMTIzLjAwNy0uMDc5YS43LjcgMCAwIDEgLjQ4Mi0uNjA1bDEuMjEzLS40MDkuMzI1LS4yOTItLjA0Ni0uNzFhLjcuNyAwIDAgMSAuMDYtLjMzMWwuMjU0LS41NDVhLjcuNyAwIDAgMSAuNDctLjM4OHptLS4xODggMS45NzgtLjMzLjA4MS0uMDM2LjA3My4wNTUuODE2Yy4wMTMuMi0uMDcuMzkyLS4yMjcuNTI3bC0uNjczLjU3OGEuNy43IDAgMCAxLS4yNDkuMTM4bC0uNzM3LjIzOC4yMjguMTU3LS4yODMuMTM1YS42OC42OCAwIDAgMS0uMzQ3LjM3OGwtLjQ4My4yM2EuNzYuNzYgMCAwIDEtLjQ1LjA2bC0xLjE5LS4yMnYuMDA2bC4wNTcuNzk5Yy4wMjQuMzQyLS4yMy42NC0uNTkuNjk0bC0uMzA0LjA0NGEuNy43IDAgMCAxLS4yMzYtLjAwM2wtLjU4OS0uMS0uMjk5LjExYS43My43MyAwIDAgMS0uNzU1LS4xNTJsLS4zNDYtLjMzLS45MjMuMDc4LS4wMzkuMDE3Yy4xNS4xMy4yMy4zMTYuMjIyLjUwNWwuMDEuMDAzIDEuNjI2LjYwOHEuMTg1LjA3Mi4zLjIxNWwuMjA3LjI1N2EuNzUuNzUgMCAwIDEgLjM5Ni4wNzlsLjM5OC4yMDRjLjE2LjA4My4yOC4yMjMuMzMzLjM4NWwuNTUzLjI4NS0uNTk1LjE5N2EuNy43IDAgMCAxLS4zMTYuMjk5bC4zNS40MzYuNjE2LjI5NmEuNjQ1LjY0NSAwIDAgMSAuMzYyLjczNWwtLjAwNy4wMjguMTM0LjIzNmMuMTA3LjE5LjEwNy40MTEuMDEuNTk2bC4wNTcuMDQ0YS42Ny42NyAwIDAgMSAuMjE4LjMwNGwuMzg3IDEuMWEuNjIuNjIgMCAwIDEtLjAzNi40OTVsLjI2Mi43NDYtLjcyMi0uMzk4YS43LjcgMCAwIDEtLjI3Mi4wMTIuNi42IDAgMCAxLS4wODUuMTc3bC0uMzA1LjQ1MS0uMjYgMS4zMzVhLjY0LjY0IDAgMCAxLS4xNS4zMDFsLS4wNzUuMDg3YTEgMSAwIDAgMSAuMDQyLjA2M2wuMTIuMTk3LjYuMjQyYy4wOTMuMDQuMTY4LjA5LjIzMy4xNTRsLjA5Ny4wOTZoLjE5YS43NC43NCAwIDAgMSAuMzUzLjA5bC4yNTEuMTM5LjM4NC4wNDhhLjcuNyAwIDAgMSAuMTM2LS4xMzkuNzQuNzQgMCAwIDEgLjU4LS4xMzRsLjk4MS4yMDkuNjkuMjYzYS43LjcgMCAwIDEgLjM3LjMyOGwuMDMzLS4wMDdhMSAxIDAgMCAxIC4xNC0uMDEzbC4xMDMuMDA4LjUwNi4wODQtLjA1LS4xNjRhLjYyLjYyIDAgMCAxIC4wNDgtLjQ3NWwuMzk3LS43NTNhLjY3LjY3IDAgMCAxIC4yNjgtLjI3M2wxLjE2NS0uNjU4YS43My43MyAwIDAgMSAuNjcyLS4wMjYuNzQuNzQgMCAwIDEgLjU0LS4wNmwuMjU1LjA3NC4wMzQuMDFhLjc0Ljc0IDAgMCAxIC42NzQuMDc3bC4zOC4yNThjLjEuMDY5LjE4LjE2LjIzLjI2NmwuNTI4LjExNS4yNjItLjAzNS4wNTItLjAxOGEuNy43IDAgMCAxIC4xMDQtLjE3bC4yMjgtLjI2OGEuNy43IDAgMCAxIC4xNy0uMTQzbC40NDEtLjI2NS4xNzUtLjEzOC0uNTcyLS4zNzRhLjY1LjY1IDAgMCAxLS4zLS41MzFsLS4wMS0uNjM3LS4yMzgtLjIxNGEuNjQuNjQgMCAwIDEtLjIxNy0uNDc1di0uMjMyYzAtLjI2NS4xNjctLjUwMi40MjctLjYwNWwtLjA5My0uMTA1YS42NC42NCAwIDAgMS0uMTYyLS4zODVsLS4wMi0uMjlhMSAxIDAgMCAxIC4wMDEtLjA4Mi43NDMuNzQzIDAgMCAxLS44MjQtLjAxM2wtLjIwMS0uMTQ0YS42NC42NCAwIDAgMS0uMjMtLjc2bC4xMDctLjI1OS4wMy0uMzM0YS42My42MyAwIDAgMSAuMTEtLjMwM2wuNDQ3LS42NC40NjEtLjU2MWEuNi42IDAgMCAxIC4wMS0uMjMyLjY2LjY2IDAgMCAxIC4zNi0uNDRsLjIzOC0uMTE2YS43LjcgMCAwIDEgLjI1Mi0uMDcxbC0uMDEyLS42ODlhLjYuNiAwIDAgMSAuMDQtLjIzbC4yMjctLjYxNS4wMi0uMjE0YS42LjYgMCAwIDEgLjAzOS0uMTY0IDEgMSAwIDAgMS0uMDgzLS4wMzZsLS4xNzktLjA5LS41MjYuMDVhLjczLjczIDAgMCAxLS42MTQtLjIzOWwtLjM0OC0uNC0uMTA2LjA0MWEuNzQuNzQgMCAwIDEtLjU0My0uMDA1bC0uMTktLjA3Ny0uMDUzLjAwNGEuNzUuNzUgMCAwIDEtLjQ0My0uMTA2bC0uODYtLjU0OGEuNy43IDAgMCAxLS4xMzYtLjExMy43LjcgMCAwIDEtLjItLjAwOGwtLjQ2MS0uMDhhLjY4LjY4IDAgMCAxLS41Ny0uNThsLS4wMTEtLjEwNWEuNy43IDAgMCAxLS40NzUtLjMxNGwtLjAxLS4wMTZhLjcuNyAwIDAgMS0uMjk2LS4xNDZsLS4xNzItLjE0M2EuNy43IDAgMCAxLS4xMTMtLjEyLjcuNyAwIDAgMS0uNTItLjI4NHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat}.gpf-btn-header-territories{height:26px;position:absolute;width:26px;z-index:2}.gpf-btn-icon-header-territories{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDE3IDE3Ij48cGF0aCBmaWxsPSIjMDAwMDkxIiBkPSJNOC42NjcgMTUuMzMzIDYgMTIuNjY3aDUuMzMzek04LjY2NyAybDIuNjY2IDIuNjY3SDZ6bTAgOGExLjMzMyAxLjMzMyAwIDEgMSAwLTIuNjY3IDEuMzMzIDEuMzMzIDAgMCAxIDAgMi42NjdNMiA4LjY2NyA0LjY2NyA2djUuMzMzem0xMy4zMzMgMC0yLjY2NiAyLjY2NlY2eiIvPjwvc3ZnPg==);background-position:50%;background-repeat:no-repeat;background-size:auto auto}.gpf-panel__body_territories{max-height:300px;overflow:auto}.gpf-panel__title_territories{color:#101092;font-size:1rem;font-weight:400;margin:0;padding:12px 15px;position:relative;right:-16px}.gpf-panel__header_territories{align-content:center;align-items:center;background:#e3e3fd;display:flex;flex-direction:row;height:48px}#GPterritoriesPanelClose{right:0;top:0}.gpf-tile{height:150px;width:150px}.tiles-reduce div.fr-tile{height:unset;padding:unset;width:unset}.fr-tile:hover{background-color:var(--background-contrast-grey)}.fr-tile__title:before{background-image:unset}.gpf-tile__header{align-items:center;display:flex;flex-direction:column}.territories-entries{display:grid}.tiles-direction.tiles-0{grid-template-columns:repeat(3,1fr);max-height:none!important}.tiles-direction.tiles-1{grid-template-columns:repeat(1,1fr)}.tiles-direction.tiles-2{grid-template-columns:repeat(2,1fr)}.tiles-direction.tiles-3{grid-template-columns:repeat(3,1fr)}.tiles-direction.tiles-4{grid-template-columns:repeat(4,1fr)}div.fr-tile div.fr-tile__header div.fr-tile__icon,div.fr-tile div.fr-tile__header div.fr-tile__thumbnail{display:block}.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__icon,.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__thumbnail{display:none}.fr-tile__icon{background-position:50%;background-repeat:no-repeat;background-size:auto auto;height:50px;width:50px}.tiles-icon div.fr-tile div.fr-tile__header div.fr-tile__thumbnail,.tiles-thumbnail div.fr-tile div.fr-tile__header div.fr-tile__icon{display:none}@media (max-width:576px){.tiles-direction.tiles-4{grid-template-columns:repeat(3,1fr)}}@media (max-width:382px){.tiles-direction.tiles-0,.tiles-direction.tiles-3,.tiles-direction.tiles-4{grid-template-columns:repeat(2,1fr)}}button[id^=GPshowControlListPicto-][aria-pressed=true]+dialog{width:370px}div[id^=GPcontrolList-] .GPshowOpen>span{font-size:32px;position:absolute;transform:translate(-5px,-2px)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content{display:flex;flex-direction:column;overflow:auto;padding:0 1.5rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content:not(:has(~.gpf-panel__footer)){padding-bottom:2rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div{align-items:center;column-gap:1rem;display:flex;flex-direction:row;padding:.5rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div:hover,dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div:hover>button{background-color:var(--hover)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button{height:40px;width:40px}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>button:after{background-color:var(--text-default-grey)}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>div{display:flex;flex-direction:column}dialog[id^=GPcontrolListPanel-] .gpf-panel__content>div>div>span:nth-child(2){color:var(--text-mention-grey);font-size:.75rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__footer{background-color:var(--background-lifted-grey);padding:1rem 2rem 2rem}dialog[id^=GPcontrolListPanel-] .gpf-panel__footer>button{justify-content:center;width:100%} /*# sourceMappingURL=Dsfr.css.map*/ \ No newline at end of file diff --git a/dist/package/css/Dsfr.css.map b/dist/package/css/Dsfr.css.map index 362412b1..c3f37df7 100644 --- a/dist/package/css/Dsfr.css.map +++ b/dist/package/css/Dsfr.css.map @@ -1 +1 @@ -{"version":3,"file":"Dsfr.css","mappings":"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","sources":["webpack://Gp/./src/packages/CSS/DSFRgeneralWidget.css","webpack://Gp/./src/packages/CSS/Controls/Drawing/DSFRdrawingStyle.css","webpack://Gp/./src/packages/CSS/Controls/ElevationPath/DSFRelevationPathStyle.css","webpack://Gp/./src/packages/CSS/Controls/GetFeatureInfo/DSFRgetFeatureInfoStyle.css","webpack://Gp/./src/packages/CSS/Controls/Isochron/DSFRisochronStyle.css","webpack://Gp/./src/packages/CSS/Controls/LayerImport/DSFRlayerImportStyle.css","webpack://Gp/./src/packages/CSS/Controls/LayerSwitcher/DSFRlayerSwitcherStyle.css","webpack://Gp/./src/packages/CSS/Controls/LocationSelector/DSFRlocationStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/DSFRmeasureToolTipStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/DSFRmeasureAreaStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/DSFRmeasureLengthStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/DSFRmeasureAzimuthStyle.css","webpack://Gp/./src/packages/CSS/Controls/MousePosition/DSFRmousePositionStyle.css","webpack://Gp/./src/packages/CSS/Controls/ReverseGeocoding/DSFRreverseGeocodingStyle.css","webpack://Gp/./src/packages/CSS/Controls/Route/DSFRrouteStyle.css","webpack://Gp/./src/packages/CSS/Controls/SearchEngine/DSFRsearchEngineStyle.css","webpack://Gp/./src/packages/CSS/Controls/ToolBoxMeasure/DSFRtoolBoxMeasureStyle.css","webpack://Gp/./src/packages/CSS/Controls/Zoom/DSFRzoomStyle.css","webpack://Gp/./src/packages/CSS/Controls/FullScreen/DSFRfullScreenStyle.css","webpack://Gp/./src/packages/CSS/Controls/OverviewMap/DSFRoverviewMapStyle.css","webpack://Gp/./src/packages/CSS/Controls/Legends/DSFRlegendsStyle.css","webpack://Gp/./src/packages/CSS/Controls/Catalog/DSFRcatalogStyle.css","webpack://Gp/./src/packages/CSS/Controls/Territories/DSFRterritoriesStyle.css","webpack://Gp/./src/packages/CSS/Controls/ControlList/DSFRcontrolListStyle.css"],"sourcesContent":["/*\n * Liste des surcharges du mode DSFR\n */\n:root {\n --size-per-row: 44px;\n}\n\n.gpf-widget {\n position: absolute;\n pointer-events: auto;\n /* display: flex;*/\n padding: 2px;\n}\n\n.gpf-widget-button {\n width: 40px;\n}\n\n.gpf-panel {\n position: relative;\n background-color: unset;\n width: max-content;\n max-height: 100%;\n}\n\n.gpf-panel form {\n overflow: auto;\n padding: 0 2rem 2rem 2rem;\n}\n\n.gpf-panel--hidden {\n display: none;\n}\n\n.gpf-panel__body {\n overflow: unset;\n position: relative;\n max-height: 100% !important;\n flex: 1 1 auto;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.gpf-panel__header {}\n\n.gpf-panel__title {\n text-align: left;\n}\n\n.gpf-panel__footer {\n background-color: transparent;\n padding: 0;\n margin-top: 0;\n justify-content: center;\n}\n\n.gpf-panel__footer > input[type=\"submit\"] {\n width: 100%;\n}\n\n.gpf-panel__content {\n padding: unset;\n margin-bottom: unset;\n}\n\n.gpf-panel--close,\n.gpf-panel--reduce,\n.gpf-panel--info {\n position: relative;\n cursor: pointer;\n}\n\n/********/\n/* flex */\n/********/\n\n.gpf-flex {\n display: flex;\n align-items: center;\n flex-direction: row;\n justify-content: space-evenly;\n}\n\n.gpf-flex-column {\n display: flex;\n flex-direction: column;\n justify-content: space-evenly;\n}\n\n.gpf-flex-padding {\n padding: 5px;\n}\n\n.gpf-hidden {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\n.gpf-visible {\n display: block;\n visibility: visible;\n opacity: 100%;\n}\n\n/***********/\n/* waiting */\n/***********/\n\n.gpf-waiting {\n position: absolute;\n height: inherit;\n top: 80px;\n bottom: 0;\n left: 0;\n right: 0;\n border-radius: 4px;\n background-color: rgba(255, 255, 255, 0.9);\n font-size: 1.5em;\n font-weight: bold;\n overflow: hidden;\n}\n\n.gpf-waiting--hidden {\n display: none;\n}\n\n.gpf-waiting--visible {\n display: -webkit-flex;\n display: -ms-flexbox;\n display: -webkit-box;\n display: flex;\n z-index: 4000;\n}\n\n.gpf-waiting_info {\n margin: auto;\n}\n\n/***********/\n/* button */\n/***********/\n\n.gpf-btn-icon.gpf-btn--secondary,\n.gpf-btn-icon.gpf-btn--tertiary {\n background-color: var(--background-default-grey);\n}\n\n.gpf-widget > .gpf-btn-icon[aria-pressed=\"true\"] {\n background-color: var(--hover-tint);\n position: relative;\n}\n\n.gpf-widget:has(> .gpf-btn-icon[aria-pressed=\"true\"])::after {\n background-color: var(--background-action-high-blue-france);\n content: \"\";\n width: 3px;\n height: 40px;\n left: 44px;\n position: absolute;\n transform: translateY(-40px);\n}\n\n@supports(-moz-appearance:none) {\n .gpf-widget:has(.gpf-btn-icon[aria-pressed=\"true\"])::after {\n transform: unset;\n }\n}\n\n.gpf-widget > .gpf-btn-icon[aria-label]:hover::before {\n content: attr(aria-label);\n position: absolute;\n top: 0;\n color: var(--text-default-grey);\n font-size: .75rem;\n width: fit-content;\n white-space: nowrap;\n padding: .5rem .5rem 0.5rem 1.25rem;\n background-size: .375rem .5rem,.375rem .5rem,1px, 100%,calc(100% - 0.5rem) 100%;\n background-repeat: no-repeat;\n background-position: 0.125rem 50%, 0% 50%,0.375rem 100%,0.375rem 100%;\n filter: drop-shadow(0 2px 6px rgba(0,0,18,.16));\n filter: drop-shadow(var(--overlap-shadow));\n background-image: conic-gradient(from 56.31deg at 0% 50%,transparent 0deg,var(--background-overlap-grey) 0deg,var(--background-overlap-grey) 67.38deg,transparent 67.38deg),conic-gradient(from 56.31deg at 0% 50%,transparent 0deg,var(--border-default-grey) 0deg,var(--border-default-grey) 67.38deg,transparent 67.38deg),linear-gradient(90deg,var(--border-default-grey),var(--border-default-grey)),linear-gradient(90deg,var(--background-overlap-grey),var(--background-overlap-grey));\n}\n\n.position-container-top-left .gpf-widget > .gpf-btn-icon[aria-label]:hover::before,\n.position-container-bottom-left .gpf-widget > .gpf-btn-icon[aria-label]:hover::before {\n transform: translateX(24px);\n}\n\n.position-container-top-right .gpf-widget > .gpf-btn-icon[aria-label]:hover::before,\n.position-container-bottom-right .gpf-widget > .gpf-btn-icon[aria-label]:hover::before {\n transform: translateX(calc(-100% - 16px));\n padding: .5rem 1.25rem .5rem .5rem;\n background-size: .375rem .5rem, .375rem .5rem, 1px 100%, 100%;\n background-position: calc(100% - 0.125rem) 50%, 100% 50%, calc(100% - 0.375rem) 0, calc(100% - 0.375rem) 0;\n background-image: conic-gradient(from 236.31deg at 100% 50%, transparent 0deg, var(--background-overlap-grey) 0deg, var(--background-overlap-grey) 67.38deg, transparent 67.38deg), conic-gradient(from 236.31deg at 100% 50%, transparent 0deg, var(--border-default-grey) 0deg, var(--border-default-grey) 67.38deg, transparent 67.38deg), linear-gradient(90deg, var(--border-default-grey), var(--border-default-grey)), linear-gradient(90deg, var(--background-overlap-grey), var(--background-overlap-grey));\n}\n\n\n.gpf-btn--secondary,\n.gpf-btn--tertiary {\n position: relative;\n}\n\n.gpf-btn--tertiary::after,\n.gpf-btn--secondary::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n background-color: var(--text-action-high-blue-france);\n -webkit-mask: linear-gradient(#0000, #0000);\n mask: linear-gradient(#0000, #0000);\n}\n\n.gpf-btn--tertiary:disabled:after,\n.gpf-btn--secondary:disabled::after {\n background-color: var(--text-disabled-grey);\n}\n\n.position-container-top-left .gpf-button-no-gutter,\n.position-container-top-right .gpf-button-no-gutter {\n margin-bottom: -5px;\n}\n\n.position-container-bottom-left .gpf-button-no-gutter,\n.position-container-bottom-right .gpf-button-no-gutter {\n margin-top: -5px;\n}\n\n.gpf-btn--hidden {}\n\n.gpf-btn-icon-return {}\n\n.gpf-btn-icon-submit {}\n\n.gpf-btn-icon-reverse {}\n\n/* positionnement absolu en haut à droite du bouton \"fermer\" */\n.gpf-btn-icon-close {\n float: right;\n position: absolute;\n top: 0.5rem;\n right: 0.5rem;\n}\n\n.gpf-btn-icon-return {\n float: left;\n position: absolute;\n top: 0.5rem;\n left: 0.5rem;\n}\n\n.gpf-btn-icon-return::after {\n /* INFO : utiliser l'icone DSFR \"fr-icon-arrow-go-back-fill fr-btn--sm fr-btn--icon\" */\n -webkit-mask: url(\"img/GPreturnDSFR.png\") center no-repeat;\n mask: url(\"img/GPreturnDSFR.png\") center no-repeat;\n}\n\n.gpf-btn-icon {\n width: inherit;\n caret-color: transparent;\n}\n\n.gpf-btn-icon-reset::after {\n -webkit-mask:\n linear-gradient(#fff 0 0) top /100% 1px,\n linear-gradient(#fff 0 0) bottom/100% 1px,\n linear-gradient(#fff 0 0) left /1px 100%,\n linear-gradient(#fff 0 0) right /1px 100%,\n url(\"img/GPclose.png\") -25px center;\n mask:\n linear-gradient(#fff 0 0) top /100% 1px,\n linear-gradient(#fff 0 0) bottom/100% 1px,\n linear-gradient(#fff 0 0) left /1px 100%,\n linear-gradient(#fff 0 0) right /1px 100%,\n url(\"img/GPclose.png\") -25px center;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n background-color: var(--text-action-high-blue-france);\n}\n\n.gpf-btn-icon-info {\n width: 40px;\n height: 40px;\n}\n\n/*************/\n/* elements */\n/*************/\n\n.gpf-label {}\n\n.gpf-select {}\n\n.gpf-input {\n padding-left: 5px;\n}\n\n.gpf-radio-group {}\n\n.gpf-radio-btn-group {\n display: flex;\n gap: 1em;\n}\n\n.gpf-upload {}\n\n/*************/\n/* panel */\n/*************/\n\n.gpf-panel__list,\n.gpf-panel__advancedlist {\n z-index: 2;\n width: inherit;\n /* display: none; */\n position: absolute;\n max-height: 140px;\n background-color: #FFF;\n border: 1px solid #999;\n overflow-y: hidden;\n}\n\n.gpf-panel__advancedlist {\n width: calc(100% - 28px);\n border-top: none;\n font-size: 0.9em;\n}\n\n.gpf-panel__items:hover {\n color: #000000;\n background-color: #CEDBEF\n}\n\n.gpf-panel__items {\n width: 100%;\n height: 28px;\n line-height: 16px;\n padding: 6px 10px;\n color: #5E5E5E;\n font-size: 1.0em;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n}\n\n.gpf-panel::after {\n height: unset;\n flex: 0;\n}\n\n.gpf-panel::before {\n height: unset;\n flex: 0;\n}\n\n/***********/\n/* position*/\n/***********/\n:root {\n --size-per-row: 50px;\n}\n\n.position-container-top-left,\n.position-container-top-right,\n.position-container-bottom-left,\n.position-container-bottom-right {\n position: absolute;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n /* crée un décalage sur le searchEngine */\n /* align-items: center; */\n /* + 5px pour l'indicateur \"bouton actif\" */\n width: calc(var(--size-per-row) + 4px);\n min-height: var(--size-per-row);\n /* padding: 5px; */\n height: calc(100% - 8px);\n}\n\n.position-container-top-left,\n.position-container-top-right {\n top: 4px;\n}\n\n.position-container-top-left {\n float: left;\n left: 8px;\n}\n\n.position-container-top-right {\n float: right;\n right: 4px;\n}\n\n.position-container-bottom-left,\n.position-container-bottom-right {\n bottom: 4px;\n justify-content: flex-end;\n}\n\n.position-container-bottom-right {\n float: right;\n right: 4px;\n}\n\n.position-container-bottom-left {\n float: left;\n left: 8px;\n}\n\n/**********************/\n/* Feature info popup */\n/**********************/\n\n.gp-feature-info-div {\n bottom: 17px;\n position: relative;\n max-width: calc(100vw - 80px);\n padding: 10px;\n /* border-radius: 10px; */\n font-size: 0.75em;\n /* font-family: \"Open Sans\", sans-serif;\n color: #002A50; */\n background-color: var(--background-default-grey);\n box-shadow: 0 0 5px var(--text-default-grey);\n}\n\n.gp-feature-info-div::before {\n content: \"\";\n position: absolute;\n border-top: 15px solid var(--background-default-grey);\n border-right: 14px solid transparent;\n border-left: 14px solid transparent;\n bottom: -15px;\n margin-left: -14px;\n left: 50%;\n}\n\n.gp-feature-info-div .closer {\n position: absolute;\n display: block;\n width: 30px;\n height: 30px;\n top: 0;\n right: 0;\n border: none;\n cursor: pointer;\n border-top-right-radius: 10px;\n border-bottom-right-radius: 10px;\n background-color: var(--background-default-grey);\n}\n\n.gp-feature-info-div .closer::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n background-color: var(--text-action-high-blue-france);\n -webkit-mask: url(\"img/close-blue.svg\") center no-repeat;\n mask: url(\"img/close-blue.svg\") center no-repeat;\n -webkit-mask-size: 14px 14px;\n mask-size: 14px 14px;\n}\n\n.gp-features-content-div {\n max-width: 420px;\n min-width: 260px;\n max-height: 340px;\n overflow: auto;\n}\n\n.gp-features-content-div h5,\n.gp-features-content-div h6,\n.gp-features-content-div p,\n.gp-features-content-div ul {\n margin: 0;\n}\n\n.gp-features-content-div ul {\n padding: 0;\n list-style-type: none;\n}\n\n.geoportail-popup-content h5,\n.geoportail-popup-content h6,\n.geoportail-popup-content p,\n.gp-att-name-div,\n.gp-att-description-div,\n.gp-att-others-div {\n padding: 0 10px;\n}\n\n.geoportail-popup-content h5:not(:last-child),\n.geoportail-popup-content h6:not(:last-child),\n.geoportail-popup-content p:not(:last-child),\n.gp-att-description-div:not(:last-child),\n.gp-att-others-div:not(:last-child) {\n margin-bottom: 15px;\n}\n\n.geoportail-popup-content h5:last-child,\n.geoportail-popup-content h6:last-child,\n.geoportail-popup-content p:last-child,\n.gp-att-description-div:last-child,\n.gp-att-others-div:last-child,\n.gp-att-name-div {\n margin-bottom: 10px;\n}\n\n.geoportail-popup-content h5:first-child,\n.geoportail-popup-content h6:first-child,\n.geoportail-popup-content p:first-child,\n.gp-att-name-div:first-child,\n.gp-att-description-div:first-child,\n.gp-att-others-div:first-child {\n margin-top: 10px;\n}\n\n.gp-att-name-div,\n.gp-features-content-div h5 {\n padding-right: 35px;\n font-weight: bold;\n font-size: 1.2em;\n text-transform: uppercase;\n color: #0B6BA7;\n}\n\n.gp-features-content-div h6 {\n font-size: 1.1em;\n}\n\n.gp-att-description-div:not(:last-child),\n.gp-att-others-div:not(:last-child) {\n padding-bottom: 10px;\n border-bottom: 1px dotted #666;\n}\n\n/* surcharge css OpenLayers */\n.ol-disabled {\n --idle: transparent;\n --hover: var(--background-disabled-grey-hover);\n --active: var(--background-disabled-grey-active);\n background-color: var(--background-disabled-grey);\n color: var(--text-disabled-grey);\n cursor: not-allowed;\n /* instead of display: none */\n display: block;\n}\n\n.ol-scale-bar, .ol-scale-line {\n z-index: -1;\n}\n\n/* surcharge DSFR pour coller aux règles et au rendu de https://www.systeme-de-design.gouv.fr/composants-et-modeles/composants/accordeon/ */\n/* FIXME: pourquoi on a besoin de faire ça ?? normalement ces règles devraient être importées avec le reste... */\n.fr-collapse {\n --collapse-max-height: none;\n}\n\n.fr-collapse:not(.fr-collapse--expanded):not(.fr-collapsing) {\n --collapse-max-height: 0;\n}\n\n@media (max-width: 576px) {\n .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog {\n width: 100vw !important;\n }\n\n .gpf-mobile-fullscreen form div, .gpf-mobile-fullscreen form p {\n margin: auto;\n text-align: center;\n }\n\n .gpf-mobile-fullscreen .gpf-mobile-form {\n max-height: unset;\n height: 100vh;\n }\n\n .position-container-top-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-bottom-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-top-left .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-bottom-left .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog {\n top: -4px !important;\n left: -8px !important;\n right: unset !important;\n }\n\n .position-container-top-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-bottom-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog {\n right: -4px !important;\n left: unset !important;\n }\n}\n",".gpf-btn-icon-drawing::after {\n -webkit-mask: url(\"img/modifier.svg\") center no-repeat;\n mask: url(\"img/modifier.svg\") center no-repeat;\n}\n\n.gp-label-div,\n.gp-styling-div {\n width: 370px;\n transform: translateY(20px);\n}\n\n.gp-label-div textarea {\n max-width: 100%;\n margin-bottom: 1rem;\n}\n\n.gp-label-div input {\n width: 100%;\n}\n\n.gp-styling-option.fr-range--sm[data-fr-js-range]::before,\n.gp-styling-option.fr-range--sm[data-fr-js-range]::after {\n top: 1.74rem;\n}\n\n.drawing-tool {\n width: 40px;\n}\n\n.drawing-tool-active {\n background-color: var(--hover-tint);\n}\n\n/*\n* Drawing tools\n*/\nbutton[id^=drawing-tool-point-]::after {\n -webkit-mask: url(\"img/dsfr/create-point.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-point.svg\") center no-repeat;\n}\n\n\nbutton[id^=drawing-tool-line-]::after {\n -webkit-mask: url(\"img/dsfr/create-line.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-line.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-polygon-]::after {\n -webkit-mask: url(\"img/dsfr/create-polygon.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-polygon.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-text-]::after {\n -webkit-mask: url(\"img/dsfr/create-label.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-label.svg\") center no-repeat;\n}\n\n/*\n* Editing tools\n*/\nbutton[id^=drawing-tool-edit-]::after {\n -webkit-mask: url(\"img/dsfr/edit-geom.svg\") center no-repeat;\n mask: url(\"img/dsfr/edit-geom.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-display]::after {\n -webkit-mask: url(\"img/dsfr/edit-style.svg\") center no-repeat;\n mask: url(\"img/dsfr/edit-style.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-tooltip]::after {\n -webkit-mask: url(\"img/dsfr/edit-text.svg\") center no-repeat;\n mask: url(\"img/dsfr/edit-text.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-remove]::after {\n -webkit-mask: url(\"img/dsfr/delete.svg\") center no-repeat;\n mask: url(\"img/dsfr/delete.svg\") center no-repeat;\n}\n",".gpf-btn-icon-elevation::after {\n -webkit-mask: url(\"img/altipath.svg\") center no-repeat;\n mask: url(\"img/altipath.svg\") center no-repeat;\n}\n\n[id^=GPelevationPathPanelInfo] {\n position: absolute;\n float: left;\n top: 0;\n left: 0;\n}\n\n/* surcharge de fr-panel pour permettre la saisie sous la fenêtre de résultat */\n[id^=GPelevationPathPanel] {\n height: unset;\n}\n\n[id^=GPelevationPathPanelInfo]::after {\n -webkit-mask: url(\"../../img/GPinfo_secondary.svg\") center no-repeat;\n mask: url(\"../../img/GPinfo_secondary.svg\") center no-repeat;\n}\n\n[id^=GPelevationPathProfil] > #profileElevationByDefault > svg {\n transform: translateY(1rem);\n}\n\n[id^=GPelevationPathProfil] {\n height: 150px;\n width: 300px;\n}\n\n.GPelevationPathProfilWrapper {\n padding: 0 2rem;\n}\n\ndiv[id^=GPelevationPathInformationsContainer] {\n display: grid;\n width: calc(300px + 4rem);\n padding: 0 2rem 1rem 2rem;\n grid-template-columns: 50% 50%;\n}\n\n.GPelevationPathInformations {\n font-size: 13px;\n margin: 0;\n display: flex;\n flex-wrap: wrap;\n gap: 0 0.25rem;\n}\n\n.GPelevationPathInformations > span {\n white-space: nowrap;\n}\n\n/* Mode Mobile */\n\n@media (max-width: 576px) {\n div[id^=GPelevationPathInformationsContainer], #GPelevationPathProfil {\n margin: auto;\n }\n}","/* GET FEATURE INFO */\n.gpf-btn-icon-getfeatureinfo::after {\n -webkit-mask: url(\"img/NoGFI.svg\") center no-repeat;\n mask: url(\"img/NoGFI.svg\") center no-repeat;\n}\n\nbutton[id^=\"GPgetFeatureInfoPicto-\"][aria-pressed=\"true\"]::after {\n -webkit-mask: url(\"img/GFI.svg\") center no-repeat;\n mask: url(\"img/GFI.svg\") center no-repeat;\n}",".gpf-btn-icon-isocurve::after {\n -webkit-mask: url(\"img/isochrone.svg\") center no-repeat;\n mask: url(\"img/isochrone.svg\") center no-repeat;\n}\n\n.gpf-flex-isocurve {\n justify-content: unset;\n}\n\n.gpf-btn-icon-isocurve-reset {\n background-position: -29px center;\n}\n\n[id^=GPisochronPanel-] p.gpf-label {\n margin-top: 1rem;\n margin-bottom: 0.2rem;\n}\n\n[id^=\"GPisochronPanel-\"] p.gpf-label:first-child {\n margin-top: 0;\n}\n\ndiv[id^=\"GPisochronChoice\"] {\n justify-content: left;\n gap: 1em;\n}\n\ndiv[id^=GPisochronTransportChoice] > div {\n margin-top: 0.5rem;\n}\n\ndiv[id^=GPisochronValueChron],\ndiv[id^=GPisochronValueDist] {\n width: 281px;\n}\n\n.GPflexInput > input[id^=\"GPisochronValueChronInput2\"] {\n margin-top: 0;\n}\n\n.GPisoExclusionsOptions {\n gap: 1rem;\n}\n\n[id^=GPisochronForm-] > .GPpanelFooter {\n position: unset;\n}\n\n[id^=GPisochronReset-] {\n min-width: 2.5rem;\n}\n\n[id^=GPisochronSubmit-] {\n width: 80%;\n}\n\n",".gpf-btn-icon-import::after {\n -webkit-mask: url(\"img/layerimport.svg\") center no-repeat;\n mask: url(\"img/layerimport.svg\") center no-repeat;\n}\n\n.gpf-panel__items_layerimport {\n color: var(--text-action-high-blue-france);\n border-bottom: 1px solid var(--grey-900-175);\n list-style-type: none;\n height: auto;\n}\n","div[id^=GPlayerSwitcher-] {\n height: 44px;\n}\n\nbutton[id^=GPshowLayersListPicto] {\n width: 40px;\n}\n\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] + dialog[id^=GPlayersList] {\n width: 350px;\n}\n\n.GPlayerSwitcher_layer {\n background-color: var(--background-overlap-grey);\n padding-right: 40px;\n}\n\n.gpf-btn-icon-layerswitcher::after {\n -webkit-mask: url(\"img/dsfr/layerswitcher.svg\") center no-repeat;\n mask: url(\"img/dsfr/layerswitcher.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-ls-visibility {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-visibility::after {\n -webkit-mask: url(\"img/dsfr/visible-open.svg\") center no-repeat;\n mask: url(\"img/dsfr/visible-open.svg\") center no-repeat;\n}\n\nbutton[id^=GPvisibilityPicto_ID_][aria-pressed=\"false\"]::after {\n -webkit-mask: url(\"img/dsfr/visible-close-blanc.svg\") center no-repeat;\n mask: url(\"img/dsfr/visible-close-blanc.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-ls-remove {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-remove::after {\n -webkit-mask: url(\"img/dsfr/remove.svg\") center no-repeat;\n mask: url(\"img/dsfr/remove.svg\") center no-repeat;\n}\n\n\n.gpf-btn-icon-ls-collapse {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-collapse::after {\n -webkit-mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n transition: transform 0.2s ease-out 0s;\n}\n\n.gpf-btn-icon-ls-collapse[aria-pressed=\"true\"]::after {\n box-shadow: none;\n transform: rotate(180deg);\n}\n\n.gpf-btn-icon-ls-dragndrop {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-dragndrop::after {\n -webkit-mask: url(\"img/dsfr/dragndrop.svg\") center no-repeat;\n mask: url(\"img/dsfr/dragndrop.svg\") center no-repeat;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools {\n height: 56px;\n max-height: 56px;\n}\n\n/* Surchargé en inline avec \"hidden\" pour les couches n'ayant pas de description ou de titre */\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools > .GPlayerInfo {\n visibility: visible;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"false\"] {\n box-shadow: none;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"false \"] + .GPlayerAdvancedTools > .GPlayerInfo {\n visibility: hidden;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_] {\n position: absolute;\n top: 12px;\n right: 16px;\n}\n\ndiv[id^=GPbasicTools_ID_] {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n flex-wrap: nowrap;\n flex-direction: row-reverse;\n}\n\ndiv[id^=GPadvancedTools_ID_] {\n display: flex;\n align-content: center;\n align-items: center;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n height: inherit;\n}\n\n.gpf-btn-header {\n z-index: 2;\n position: absolute;\n width: 26px;\n height: 26px;\n}\n\n.gpf-btn-icon-layers {\n background-image: url(\"img/dsfr/layers.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n}\n\n.gpf-panel__body_ls {\n overflow: auto;\n max-height: 300px !important;\n}\n\n.gpf-panel__title_ls {\n color: #101092;\n padding: 12px 15px;\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n margin: 0;\n right: -16px;\n}\n.gpf-panel__header_ls {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-content: center;\n background: #E3E3FD;\n height: 48px;\n}\n\n.gpf-btn-icon-ls-info {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-info::after {\n -webkit-mask: url(\"img/dsfr/info.svg\") center no-repeat;\n mask: url(\"img/dsfr/info.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-ls-extent {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-extent::after {\n -webkit-mask: url(\"img/dsfr/extent.svg\") center no-repeat;\n mask: url(\"img/dsfr/extent.svg\") center no-repeat;\n}\n\n[id^=GPlayerInfoPanel] {\n position: absolute;\n height: initial;\n}\n\n.gpf-label-name {\n width: calc(100% - 96px);\n line-height: 28px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding-left: 4px;\n}\n\n.GPlayerDragNDrop {\n cursor: move;\n}\n\n.gpf-range__output {\n width: 35px;\n}\n\n.GPlayerOpacity.fr-range--sm[data-fr-js-range]::after,\n.GPlayerOpacity.fr-range--sm[data-fr-js-range]::before {\n top: 25%;\n}\n\ndiv[id^=GPlayerInfoContent] {\n width: 350px;\n}\n\n.gpf-btn-icon-close.GPlayersPanelClose {\n top: 0;\n right: 0;\n}\n\n.gpf-btn-icon-close.GPlayersPanelClose::after {\n margin-left: -0.125rem;\n}\n\n/* menu contextuel (mobile) */\n.GPlayerAdvancedToolsContextual {\n display: none;\n}\n\n.GPlayerAdvancedToolsContextual::after {\n -webkit-mask: url(\"./img/dsfr/context.svg\") center no-repeat;\n mask: url(\"./img/dsfr/context.svg\") center no-repeat;\n}\n\n.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"] {\n background-color: var(--hover-tint);\n overflow: visible;\n}\n\n.GPlayerSwitcher_layer:has(.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"]) {\n overflow: visible;\n}\n\n[id^=GPlayersList-] .GPpanelBody:has(.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"]) {\n overflow: visible;\n}\n\n.GPlayerAdvancedTools:has(.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"]) {\n position: relative;\n}\n\n.GPlayerAdvancedToolsContextual + div {\n display: none;\n flex-direction: column;\n flex-wrap: wrap;\n font-size: 13px;\n z-index: 12;\n background-color: var(--background-overlap-grey);\n border-radius: 6px;\n box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.15);\n padding: 14px 6px;\n gap: 6px;\n}\n\n.GPlayerAdvancedToolsContextual + div > button {\n padding-left: 2rem;\n}\n\n.GPlayerAdvancedToolsContextual + div > button[visibility=\"hidden\"] {\n display: none;\n}\n\n.GPlayerAdvancedToolsContextual + div > button::after {\n mask-position: left;\n}\n\n.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"] + div {\n display: flex;\n position: absolute;\n right: 0;\n top: calc(2.5rem + 8px);\n}\n\n@media (max-width: 576px) {\n .GPlayerAdvancedTools {\n width: calc(100% + 40px);\n }\n\n .GPlayerAdvancedTools > .GPlayerRemove, .GPlayerAdvancedTools > .GPlayerInfo, .GPlayerAdvancedTools > .GPlayerExtent {\n display: none;\n }\n\n .GPlayerAdvancedToolsContextual {\n display: inline-flex;\n }\n\n [id^=GPopacity_ID_] {\n flex-grow: 0.6;\n }\n}\n",".gpf-btn-icon-pointer::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask: url(\"img/reticle.svg\") center no-repeat;\n mask: url(\"img/reticle.svg\") center no-repeat;\n background-color: var(--text-inverted-blue-france);\n}\n\n.gpf-btn-icon-pointer {\n min-width: 2.5rem;\n position: relative;\n border-top-right-radius: 4px;\n}\n\n.GPlocationStageFlexInput:has(.GPlocationStageRemove) > .gpf-btn-icon-pointer {\n border-top-right-radius: 0px;\n}\n\n.gpf-btn-icon-remove {\n height: 2.5rem;\n width: 2.5rem;\n}\n\n.gpf-btn-icon-label {}\n.gpf-btn-icon-remove::after {\n -webkit-mask: url(\"img/dsfr/close-line.svg\") center no-repeat;\n mask: url(\"img/dsfr/close-line.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-add::after {\n -webkit-mask: url(\"img/GPlocationOptions.png\") -51px center no-repeat;\n mask: url(\"img/GPlocationOptions.png\") -51px center no-repeat;\n width: 2.5rem;\n height: 2.5rem;\n}\n\n.GPlocationOriginLabel {\n display: none;\n pointer-events: none;\n}\n\n[class^=\"GPlocationPoint-\"] {\n padding: 0;\n}\n\n[id^=\"GPlocationPoint_\"] {\n justify-content: left;\n}\n\n.GPlocationStageFlexInput {\n flex-wrap: wrap;\n width: 281px;\n}\n\n.GPlocationStageAdd {\n flex-basis: 65%;\n width: 0px;\n min-height: 40px;\n padding: 0.25rem 0.75rem 0.25rem 2.5rem;\n text-align: left;\n}\n\n.GPlocationOriginLabel {\n flex-basis: fit-content;\n}\n\n.GPlocationOriginPointerImg {\n flex-basis: 2.5em;\n}\n\n.GPlocationStageFlexInput input {\n flex-basis: 33%;\n flex-grow: 1;\n}\n","/* MEASURE TOOL */\n\n.GPmeasureTooltip {\n background-color: var(--background-contrast-grey);\n padding: 0.2rem 0.4rem;\n opacity: 0.8;\n}\n\n",".gpf-btn-icon-area::after {\n -webkit-mask: url(\"img/mesurer-surface.svg\") center no-repeat;\n mask: url(\"img/mesurer-surface.svg\") center no-repeat;\n}",".gpf-btn-icon-length::after {\n -webkit-mask: url(\"./img/mesurer-distance.svg\") center no-repeat;\n mask: url(\"./img/mesurer-distance.svg\") center no-repeat;\n}",".gpf-btn-icon-azimuth::after {\n -webkit-mask: url(\"img/mesurer-azimuth.svg\") center no-repeat;\n mask: url(\"img/mesurer-azimuth.svg\") center no-repeat;\n}",".gpf-btn-icon-position::after {\n -webkit-mask: url(\"img/position.svg\") center no-repeat;\n mask: url(\"img/position.svg\") center no-repeat;\n}\n\ndiv[id^=GPmousePositionCoordinate-] input {\n color: inherit;\n}\n\ndiv[id^=GPmousePositionAltitude-],\ndiv[id^=GPmousePositionCoordinate-] > div {\n display: flex;\n justify-content: space-between;\n}\n\ndiv[id^=GPmousePositionCoordinate-] input[readonly] {\n font-size: 1rem\n}",".gpf-btn-icon-reverse::after {\n -webkit-mask: url(\"img/reversegeocode.svg\") center no-repeat;\n mask: url(\"img/reversegeocode.svg\") center no-repeat;\n}\n\n.gpf-flex-reverse {\n /* INFO : surcharge de .gpf-flex par defaut */\n display: flex;\n align-items: flex-start;\n flex-direction: column;\n justify-content: space-evenly;\n}\n\n.gpf-panel-reverse {\n /* INFO : surcharge de .gpf-panel par defaut */\n width: 100%;\n}\n",".gpf-btn-icon-route::after {\n -webkit-mask: url(\"img/route.svg\") center no-repeat;\n mask: url(\"img/route.svg\") center no-repeat;\n}\n\n.GProuteFormMini {\n max-height: 78px;\n}\n\n.GProuteFormMini .GPelementShow {\n color: var(--grey-200-850);\n}\n\n.GProuteModeLabel {\n margin-bottom: 0.5rem;\n}\n\n[id^=GProuteForm-] p.gpf-label {\n margin-top: 0;\n margin-bottom: 0.2rem;\n}\n\n[id^=\"GProuteForm-\"] > .GPpanelFooter {\n position: unset;\n}\n\n[id^=\"GProuteSubmit-\"] {\n width: 80%;\n}\n\n[id^=\"GProuteForm-\"] > [class^=\"GPlocationPoint-\"] {\n margin-top: 0;\n}\n\n[id^=\"GProuteForm-\"] > p.gpf-label {\n margin-top: 1rem;\n}\n\n[id^=\"GProuteForm-\"].GProuteFormMini > p.gpf-label {\n margin-top: 0;\n}\n\n[id^=\"GProuteForm-\"] > p.gpf-label ~ p.gpf-label {\n margin-top: 0.5rem;\n}\n\n/* Reset picto */\nbutton[id^=GProuteReset-], div[id^=GProuteResultsNew-] {\n min-width: 2.5em;\n}\n\ndiv[id^=GProuteResultsValueDist],\ndiv[id^=GProuteResultsValueTime] {\n color: var(--text-action-high-blue-france);\n font-weight: bold;\n}\n\n.GProuteResultsShowDetailsDiv {\n justify-content: left;\n}\n\ndiv:has(input[id^=GProuteResultsShowDetails]) + div[id^=GProuteResultsDetails-] {\n max-height: 0;\n opacity: 0;\n overflow: hidden;\n}\n\ndiv:has(input[id^=GProuteResultsShowDetails]:checked) + div[id^=GProuteResultsDetails-] {\n max-height: 200px;\n opacity: 1;\n overflow-y: scroll;\n}\n\ndiv[id^=GProuteResultsDetails-] {\n max-width: 350px;\n transition: max-height 0.5s ease-in-out 0.25s, opacity 0.5s ease-in-out 0.25s;\n display: grid;\n grid-template-columns: 30px 1fr;\n gap: 0.5rem 5px;\n}\n\n.GProuteResultsDetailsNumber,\n.GProuteResultsDetailsInstruction {\n display: inline-block;\n}\n\n.GProuteResultsDetailsNumber {\n font-weight: bold;\n text-align: right;\n vertical-align: top;\n}\n\n.GProuteExclusionsOptions {\n gap: 0.5rem;\n color: var(--text-label-grey);\n}\n\n/* Mode Mobile */\n\n@media (max-width: 576px) {\n .gpf-mobile-fullscreen div[id^=\"GProuteResultsDetails-\"] {\n max-width: unset;\n }\n}",".gpf-widget-padding {\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.gpf-widget-color {\n background-color: var(--background-default-grey);\n}\n\n.gpf-panel__items_searchengine,\n.GPlabelTitle {\n color: var(--text-action-high-blue-france);\n border-bottom: 1px solid var(--grey-900-175);\n padding: 12px;\n}\n\n\n.gpf-panel__items.GPautoCompleteProposal {\n height: 45px;\n box-sizing: border-box;\n}\n\n.GPlabelTitle {\n background-color: var(--background-open-blue-france);\n font-size: 1.0em;\n}\n\ndialog[id^=GPcoordinateSearchPanel],\ndialog[id^=GPadvancedSearchPanel] {\n max-height: unset;\n}\n\nselect[name^=\"inputSex\"].gpf-select {\n padding: unset;\n}\n\ninput[name^=\"inputSex\"].gpf-input {\n padding: unset;\n}\n\nbutton[id^=GPsearchInputReset] {\n width: 40px;\n height: 40px;\n}\n\n[id^=\"GPshowSearchDiv\"] {\n flex-direction: row-reverse;\n}\n\n[id^=\"GPsearchEngine-\"] {\n flex-direction: column;\n}\n\n[id^=\"GPsearchEngine-\"].gpf-widget-padding {\n align-items: center;\n}\n\ndiv.GPbuttonsContainer > button {\n width: 40px;\n}\n\n.GPsearchFirstLineWrapper {\n height: 40px;\n}\n\n.gpf-widget-padding > .GPsearchFirstLineWrapper {\n margin: 0.5rem 0;\n}\n\n.GPbuttonsContainer {\n height: 56px;\n padding-left: 10px;\n}\n\n.GPsearchRadioContainer {\n display: flex;\n flex-direction: row;\n background-color: var(--background-default-grey);\n white-space: nowrap;\n max-height: 0;\n overflow: clip;\n transition: max-height 0.3s;\n gap: 1rem;\n}\n\n[id^=\"GPsearchEngine-\"]:has([id^=\"GPshowSearchByCoordinate-\"][aria-pressed=\"true\"]) > .GPsearchRadioContainer,\n[id^=\"GPsearchEngine-\"]:focus-within > .GPsearchRadioContainer,\n[id^=\"GPsearchEngine-\"]:hover > .GPsearchRadioContainer {\n max-height: 3rem;\n}\n\n.GPsearchRadioElements {\n display: flex;\n flex-direction: row;\n gap: 1rem;\n}\n\n.GPshowAdvancedSearch {\n color: var(--text-action-high-blue-france);\n text-decoration: underline;\n cursor: pointer;\n display: flex;\n align-items: center;\n}\n\n.gpf-btn-icon-search {\n background-image: url(\"img/dsfr/search-line.svg\");\n background-repeat: no-repeat;\n background-position: center center;\n /* cas particulier ou on n'utilise pas la class gpf-icon-button pour la largeur à cause du DOM du control*/\n width: 40px;\n}\n\nform[id^=GPsearchInput-] {\n margin-left: 8px;\n width: 300px;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] {\n max-width: 300px;\n border: none;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"] {\n border-radius: 0 0.25rem 0 0;\n}\n\n.gpf-btn-icon-search-advanced::after {\n -webkit-mask: url(\"img/dsfr/recherche-avancee.svg\") center no-repeat;\n mask: url(\"img/dsfr/recherche-avancee.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-search-geolocate::after {\n -webkit-mask: url(\"img/dsfr/localiser.svg\") center no-repeat;\n mask: url(\"img/dsfr/localiser.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-search-coordinate::after {\n -webkit-mask: url(\"img/dsfr/coordonnees.svg\") center no-repeat;\n mask: url(\"img/dsfr/coordonnees.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-search-reset {\n background-position: -25px center;\n}\n\ndialog[id^=GPcoordinateSearchPanel],\ndialog[id^=\"GPadvancedSearchPanel\"] {\n position: absolute;\n top: 66px;\n width: inherit;\n}\n\n/* Autocomplete list / geocode results */\n\n[id^=\"GPautocompleteResults-\"] {\n border: 1px solid var(--background-open-blue-france);\n}\n\ndiv[id^=GPautoCompleteList],\ndialog[id^=GPgeocodeResultsList] {\n width: 320px;\n position: absolute;\n height: fit-content;\n background-color: var(--background-default-grey);\n max-height: unset;\n}\n\ndiv[id^=GPautoCompleteList] {\n top: 42px;\n margin-left: 2px;\n}\n\n.position-container-top-left [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-bottom-left [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-top-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-bottom-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList] {\n width: 340px;\n position: relative;\n top: unset;\n margin-left: 8px;\n}\n\n.position-container-top-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-bottom-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList] {\n margin-right: 10px;\n}\n\n.gpf-widget-padding > div[id^=GPautoCompleteList] {\n top: 100%;\n width: 100%;\n margin: 0;\n}\n\ndialog[id^=GPgeocodeResultsList] {\n position: absolute;\n top: 55px;\n border-radius: 4px;\n overflow: hidden;\n}\n\ndiv[id^=GPgeocodeResults-] {\n width: 100%;\n position: relative;\n background-color: var(--background-default-grey);\n max-height: 240px;\n overflow-y: auto;\n}\n\n[id^=\"GPautocompleteResultsSuggest\"],\n[id^=\"GPautocompleteResultsLocation\"] {\n height: 225px;\n}\n\n/* Mode Mobile */\n@media (max-width: 576px) {\n\n .gpf-widget-padding > .GPsearchFirstLineWrapper {\n flex-direction: column;\n height: fit-content;\n }\n\n .GPsearchRadioContainer {\n flex-direction: column;\n align-items: center;\n }\n\n dialog[id^=GPcoordinateSearchPanel],\n dialog[id^=\"GPadvancedSearchPanel\"] {\n position: relative;\n top: unset;\n margin-left: unset;\n }\n\n .GPsearchRadioContainer {\n gap: 0;\n margin: 0 8px;\n }\n\n form[id^=GPsearchInput-] {\n margin-left: 0;\n }\n\n [id^=\"GPsearchEngine-\"]:has([id^=\"GPshowSearchByCoordinate-\"][aria-pressed=\"true\"]) > .GPsearchRadioContainer,\n [id^=\"GPsearchEngine-\"]:focus-within > .GPsearchRadioContainer,\n [id^=\"GPsearchEngine-\"]:hover > .GPsearchRadioContainer {\n max-height: 4rem;\n }\n}\n",".gpf-btn-icon-toolbox {\n background-repeat: no-repeat;\n background-image: url(\"img/GPtoolBoxMeasureOpen.png\");\n background-position: 3px center;\n}",".gpf-btn-icon-zoom-in {\n height: inherit;\n width: inherit;\n}\n\n.gpf-btn-icon-zoom-in::after {\n -webkit-mask: url(\"img/dsfr/zoom-in.svg\") center no-repeat;\n mask: url(\"img/dsfr/zoom-in.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-zoom-out {\n height: inherit;\n width: inherit;\n}\n\n.gpf-btn-icon-zoom-out::after {\n -webkit-mask: url(\"img/dsfr/zoom-out.svg\") center no-repeat;\n mask: url(\"img/dsfr/zoom-out.svg\") center no-repeat;\n}\n","/* surcharge en mode dsfr */\n.ol-custom-full-screen button {\n height: 40px;\n width: 40px;\n background-position: center center;\n background-repeat: no-repeat;\n}\n.ol-custom-full-screen button.ol-custom-full-screen-false::after {\n -webkit-mask: url(\"img/dsfr/fullscreen.svg\") center no-repeat;\n mask: url(\"img/dsfr/fullscreen.svg\") center no-repeat;\n}\n.ol-custom-full-screen button.ol-custom-full-screen-true::after {\n -webkit-mask: url(\"img/dsfr/fullscreen-off.svg\") center no-repeat;\n mask: url(\"img/dsfr/fullscreen-off.svg\") center no-repeat;\n}",".gpf-btn-icon-overviewmap::after {\n -webkit-mask: url(\"img/overviewmap.svg\") center no-repeat;\n mask: url(\"img/overviewmap.svg\") center no-repeat;\n}\n\n.ol-overviewmap:has(> .gpf-btn-icon[aria-pressed=\"true\"])::after {\n transform: translateY(-100%);\n}\n\n.ol-overviewmap:not(.ol-collapsed) {\n background: unset;\n}",".gpf-btn-icon-legends::after {\n -webkit-mask: url(\"img/dsfr/legends.svg\") center no-repeat;\n mask: url(\"img/dsfr/legends.svg\") center no-repeat;\n}\n\n.gpf-btn-header-legends {\n z-index: 2;\n position: absolute;\n width: 26px;\n height: 26px;\n}\n\n.gpf-btn-icon-header-legends {\n background-image: url(\"img/dsfr/header-legends.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n}\n\n.gpf-panel__body_legends {\n overflow: auto;\n max-height: 300px !important;\n}\n\n.gpf-panel__title_legends {\n color: #101092;\n padding: 12px 15px;\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n margin: 0;\n right: -16px;\n}\n.gpf-panel__header_legends {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-content: center;\n background: #E3E3FD;\n height: 48px;\n}\n\nbutton[id^=GPcollapseLegend_ID_] {\n position: absolute;\n top: 8px;\n right: 0;\n}\n\n.gpf-btn-icon-legends-collapse {\n box-shadow: none;\n}\n\n.gpf-btn-icon-legends-collapse::after {\n -webkit-mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n transition: transform 0.2s ease-out 0s;\n}\n\n.gpf-btn-icon-legends-collapse[aria-pressed=\"true\"]::after {\n box-shadow: none;\n transform: rotate(180deg);\n}\n\n.legend-entry-container {\n position: relative;\n top: 0;\n border-bottom: 1px solid var(--border-default-grey);\n overflow: hidden;\n}\n\n.legend-entry-container {\n background-color: var(--background-overlap-grey);\n}\n\n.gpf-label-legends-name {\n width: calc(100% - 40px);\n line-height: 56px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding-left: 4px;\n}\n\nbutton[id^=GPcollapseLegend_ID_][aria-pressed=\"true\"] + .legend-entry-image {\n opacity: 1;\n}\n\nbutton[id^=GPcollapseLegend_ID_][aria-pressed=\"true\"] + .legend-entry-image {\n max-height: 300px;\n overflow: auto;\n border-top: 1px solid var(--border-default-grey);\n padding: 10px 0;\n}\n\n.legend-entry-image {\n display: block;\n max-height: 0;\n opacity: 0;\n transition: max-height 0.5s ease-out 0s, opacity 0.5s ease-out 0s;\n}\n\n.legends-entries {\n padding: 0 16px;\n}\n",".gpf-btn-icon-catalog::after {\n -webkit-mask: url(\"img/dsfr/catalog.svg\") center no-repeat;\n mask: url(\"img/dsfr/catalog.svg\") center no-repeat;\n}\n\n/* Mode mobile doit prendre le dessus */\n\n@media (max-width: 576px) {\n .gpf-mobile-fullscreen .GPtabContent {\n max-height: unset !important;\n height: 100vh;\n }\n}",".gpf-btn-icon-territories::after {\n -webkit-mask: url(\"img/dsfr/territories.svg\") center no-repeat;\n mask: url(\"img/dsfr/territories.svg\") center no-repeat;\n}\n\n.gpf-btn-header-territories {\n z-index: 2;\n position: absolute;\n width: 26px;\n height: 26px;\n}\n\n.gpf-btn-icon-header-territories {\n background-image: url(\"img/dsfr/header-territories.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n}\n\n.gpf-panel__body_territories {\n overflow: auto;\n max-height: 300px;\n}\n\n.gpf-panel__title_territories {\n color: #101092;\n padding: 12px 15px;\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n margin: 0;\n right: -16px;\n}\n.gpf-panel__header_territories {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-content: center;\n background: #E3E3FD;\n height: 48px;\n}\n\n#GPterritoriesPanelClose {\n top: 0;\n right: 0;\n}\n\n/* surchage tile */\n.gpf-tile {\n height: 150px;\n width: 150px;\n}\n.tiles-reduce div.fr-tile {\n height: unset;\n width: unset;\n padding: unset;\n}\n.fr-tile:hover {\n background-color: var(--background-contrast-grey);\n}\n.fr-tile__title::before {\n background-image: unset;\n}\n.gpf-tile__header {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.territories-entries {\n display: grid;\n}\n/* direction */\ndialog.tiles-direction { }\n.territories-entries.tiles-direction {}\n\n/* nombre de tuiles */\n.tiles-direction.tiles-0 {\n max-height: none !important;\n grid-template-columns: repeat(3, 1fr);\n}\n.tiles-direction.tiles-1 {\n grid-template-columns: repeat(1, 1fr);\n}\n.tiles-direction.tiles-2 {\n grid-template-columns: repeat(2, 1fr);\n}\n.tiles-direction.tiles-3 {\n grid-template-columns: repeat(3, 1fr);\n}\n.tiles-direction.tiles-4 {\n grid-template-columns: repeat(4, 1fr);\n}\n\ndiv.fr-tile div.fr-tile__header div.fr-tile__icon,\ndiv.fr-tile div.fr-tile__header div.fr-tile__thumbnail {\n display: block;\n}\n\n/* reduce */\n.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__icon,\n.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__thumbnail {\n display: none;\n}\n\n.fr-tile__icon {\n /* background-image: url(\"img/dsfr/territories-small.svg\"); */\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n height: 50px;\n width: 50px;\n}\n\n.tiles-thumbnail div.fr-tile div.fr-tile__header div.fr-tile__icon {\n display: none;\n}\n.tiles-icon div.fr-tile div.fr-tile__header div.fr-tile__thumbnail {\n display: none;\n}\n\n/* affichage plein écran sur petit écran */\n@media (max-width: 576px) {\n /* si 4 tuiles de large, on force 3 tuiles de large */\n .tiles-direction.tiles-4 {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n\n/* sur tout petit écran, on force 2 colonnes max */\n@media (max-width: 382px) {\n .tiles-direction.tiles-0 {\n grid-template-columns: repeat(2, 1fr);\n }\n .tiles-direction.tiles-3 {\n grid-template-columns: repeat(2, 1fr);\n }\n .tiles-direction.tiles-4 {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n","button[id^=\"GPshowControlListPicto-\"][aria-pressed=\"true\"] + dialog {\n width: 370px;\n}\n\ndiv[id^=\"GPcontrolList-\"] .GPshowOpen > span {\n font-size: 32px;\n position: absolute;\n transform: translate(-5px, -2px);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content {\n display: flex;\n flex-direction: column;\n padding: 0 1.5rem;\n overflow: auto;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content:not(:has(~ .gpf-panel__footer)) {\n padding-bottom: 2rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div {\n display: flex;\n flex-direction: row;\n column-gap: 1rem;\n align-items: center;\n padding: 0.5rem 0.5rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div:hover {\n background-color: var(--hover);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div:hover > button {\n background-color: var(--hover);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button {\n height: 40px;\n width: 40px;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button::after {\n background-color: var(--text-default-grey);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > div {\n display: flex;\n flex-direction: column;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > div > span:nth-child(2) {\n color: var(--text-mention-grey);\n font-size: 0.75rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__footer {\n padding: 1rem 2rem 2rem 2rem;\n background-color: var(--background-lifted-grey);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__footer > button {\n width: 100%;\n justify-content: center;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"Dsfr.css","mappings":"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","sources":["webpack://Gp/./src/packages/CSS/DSFRgeneralWidget.css","webpack://Gp/./src/packages/CSS/Controls/Drawing/DSFRdrawingStyle.css","webpack://Gp/./src/packages/CSS/Controls/ElevationPath/DSFRelevationPathStyle.css","webpack://Gp/./src/packages/CSS/Controls/GetFeatureInfo/DSFRgetFeatureInfoStyle.css","webpack://Gp/./src/packages/CSS/Controls/Isochron/DSFRisochronStyle.css","webpack://Gp/./src/packages/CSS/Controls/LayerImport/DSFRlayerImportStyle.css","webpack://Gp/./src/packages/CSS/Controls/LayerSwitcher/DSFRlayerSwitcherStyle.css","webpack://Gp/./src/packages/CSS/Controls/LocationSelector/DSFRlocationStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/DSFRmeasureToolTipStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/DSFRmeasureAreaStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/DSFRmeasureLengthStyle.css","webpack://Gp/./src/packages/CSS/Controls/Measures/DSFRmeasureAzimuthStyle.css","webpack://Gp/./src/packages/CSS/Controls/MousePosition/DSFRmousePositionStyle.css","webpack://Gp/./src/packages/CSS/Controls/ReverseGeocoding/DSFRreverseGeocodingStyle.css","webpack://Gp/./src/packages/CSS/Controls/Route/DSFRrouteStyle.css","webpack://Gp/./src/packages/CSS/Controls/SearchEngine/DSFRsearchEngineStyle.css","webpack://Gp/./src/packages/CSS/Controls/ToolBoxMeasure/DSFRtoolBoxMeasureStyle.css","webpack://Gp/./src/packages/CSS/Controls/Zoom/DSFRzoomStyle.css","webpack://Gp/./src/packages/CSS/Controls/FullScreen/DSFRfullScreenStyle.css","webpack://Gp/./src/packages/CSS/Controls/OverviewMap/DSFRoverviewMapStyle.css","webpack://Gp/./src/packages/CSS/Controls/Legends/DSFRlegendsStyle.css","webpack://Gp/./src/packages/CSS/Controls/Catalog/DSFRcatalogStyle.css","webpack://Gp/./src/packages/CSS/Controls/Territories/DSFRterritoriesStyle.css","webpack://Gp/./src/packages/CSS/Controls/ControlList/DSFRcontrolListStyle.css"],"sourcesContent":["/*\n * Liste des surcharges du mode DSFR\n */\n:root {\n --size-per-row: 44px;\n}\n\n.gpf-widget {\n position: absolute;\n pointer-events: auto;\n /* display: flex;*/\n padding: 2px;\n}\n\n.gpf-widget-button {\n width: 40px;\n}\n\n.gpf-panel {\n position: relative;\n background-color: unset;\n width: max-content;\n max-height: 100%;\n}\n\n.gpf-panel form {\n overflow: auto;\n padding: 0 2rem 2rem 2rem;\n}\n\n.gpf-panel--hidden {\n display: none;\n}\n\n.gpf-panel__body {\n overflow: unset;\n position: relative;\n max-height: 100% !important;\n flex: 1 1 auto;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.gpf-panel__header {}\n\n.gpf-panel__title {\n text-align: left;\n}\n\n.gpf-panel__footer {\n background-color: transparent;\n padding: 0;\n margin-top: 0;\n justify-content: center;\n}\n\n.gpf-panel__footer > input[type=\"submit\"] {\n width: 100%;\n}\n\n.gpf-panel__content {\n padding: unset;\n margin-bottom: unset;\n}\n\n.gpf-panel--close,\n.gpf-panel--reduce,\n.gpf-panel--info {\n position: relative;\n cursor: pointer;\n}\n\n/********/\n/* flex */\n/********/\n\n.gpf-flex {\n display: flex;\n align-items: center;\n flex-direction: row;\n justify-content: space-evenly;\n}\n\n.gpf-flex-column {\n display: flex;\n flex-direction: column;\n justify-content: space-evenly;\n}\n\n.gpf-flex-padding {\n padding: 5px;\n}\n\n.gpf-hidden {\n display: none;\n visibility: hidden;\n opacity: 0%;\n}\n\n.gpf-visible {\n display: block;\n visibility: visible;\n opacity: 100%;\n}\n\n/***********/\n/* waiting */\n/***********/\n\n.gpf-waiting {\n position: absolute;\n height: inherit;\n top: 80px;\n bottom: 0;\n left: 0;\n right: 0;\n border-radius: 4px;\n background-color: rgba(255, 255, 255, 0.9);\n font-size: 1.5em;\n font-weight: bold;\n overflow: hidden;\n}\n\n.gpf-waiting--hidden {\n display: none;\n}\n\n.gpf-waiting--visible {\n display: -webkit-flex;\n display: -ms-flexbox;\n display: -webkit-box;\n display: flex;\n z-index: 4000;\n}\n\n.gpf-waiting_info {\n margin: auto;\n}\n\n/***********/\n/* button */\n/***********/\n\n.gpf-btn-icon.gpf-btn--secondary,\n.gpf-btn-icon.gpf-btn--tertiary {\n background-color: var(--background-default-grey);\n}\n\n.gpf-widget > .gpf-btn-icon[aria-pressed=\"true\"] {\n background-color: var(--hover-tint);\n position: relative;\n}\n\n.gpf-widget:has(> .gpf-btn-icon[aria-pressed=\"true\"])::after {\n background-color: var(--background-action-high-blue-france);\n content: \"\";\n width: 3px;\n height: 40px;\n left: 44px;\n position: absolute;\n transform: translateY(-40px);\n}\n\n@supports(-moz-appearance:none) {\n .gpf-widget:has(.gpf-btn-icon[aria-pressed=\"true\"])::after {\n transform: unset;\n }\n}\n\n.gpf-widget > .gpf-btn-icon[aria-label]:hover::before {\n content: attr(aria-label);\n position: absolute;\n top: 0;\n color: var(--text-default-grey);\n font-size: .75rem;\n width: fit-content;\n white-space: nowrap;\n padding: .5rem .5rem 0.5rem 1.25rem;\n background-size: .375rem .5rem,.375rem .5rem,1px, 100%,calc(100% - 0.5rem) 100%;\n background-repeat: no-repeat;\n background-position: 0.125rem 50%, 0% 50%,0.375rem 100%,0.375rem 100%;\n filter: drop-shadow(0 2px 6px rgba(0,0,18,.16));\n filter: drop-shadow(var(--overlap-shadow));\n background-image: conic-gradient(from 56.31deg at 0% 50%,transparent 0deg,var(--background-overlap-grey) 0deg,var(--background-overlap-grey) 67.38deg,transparent 67.38deg),conic-gradient(from 56.31deg at 0% 50%,transparent 0deg,var(--border-default-grey) 0deg,var(--border-default-grey) 67.38deg,transparent 67.38deg),linear-gradient(90deg,var(--border-default-grey),var(--border-default-grey)),linear-gradient(90deg,var(--background-overlap-grey),var(--background-overlap-grey));\n}\n\n.position-container-top-left .gpf-widget > .gpf-btn-icon[aria-label]:hover::before,\n.position-container-bottom-left .gpf-widget > .gpf-btn-icon[aria-label]:hover::before {\n transform: translateX(24px);\n}\n\n.position-container-top-right .gpf-widget > .gpf-btn-icon[aria-label]:hover::before,\n.position-container-bottom-right .gpf-widget > .gpf-btn-icon[aria-label]:hover::before {\n transform: translateX(calc(-100% - 16px));\n padding: .5rem 1.25rem .5rem .5rem;\n background-size: .375rem .5rem, .375rem .5rem, 1px 100%, 100%;\n background-position: calc(100% - 0.125rem) 50%, 100% 50%, calc(100% - 0.375rem) 0, calc(100% - 0.375rem) 0;\n background-image: conic-gradient(from 236.31deg at 100% 50%, transparent 0deg, var(--background-overlap-grey) 0deg, var(--background-overlap-grey) 67.38deg, transparent 67.38deg), conic-gradient(from 236.31deg at 100% 50%, transparent 0deg, var(--border-default-grey) 0deg, var(--border-default-grey) 67.38deg, transparent 67.38deg), linear-gradient(90deg, var(--border-default-grey), var(--border-default-grey)), linear-gradient(90deg, var(--background-overlap-grey), var(--background-overlap-grey));\n}\n\n\n.gpf-btn--secondary,\n.gpf-btn--tertiary {\n position: relative;\n}\n\n.gpf-btn--tertiary::after,\n.gpf-btn--secondary::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n background-color: var(--text-action-high-blue-france);\n -webkit-mask: linear-gradient(#0000, #0000);\n mask: linear-gradient(#0000, #0000);\n}\n\n.gpf-btn--tertiary:disabled:after,\n.gpf-btn--secondary:disabled::after {\n background-color: var(--text-disabled-grey);\n}\n\n.position-container-top-left .gpf-button-no-gutter,\n.position-container-top-right .gpf-button-no-gutter {\n margin-bottom: -5px;\n}\n\n.position-container-bottom-left .gpf-button-no-gutter,\n.position-container-bottom-right .gpf-button-no-gutter {\n margin-top: -5px;\n}\n\n.gpf-btn--hidden {}\n\n.gpf-btn-icon-return {}\n\n.gpf-btn-icon-submit {}\n\n.gpf-btn-icon-reverse {}\n\n/* positionnement absolu en haut à droite du bouton \"fermer\" */\n.gpf-btn-icon-close {\n float: right;\n position: absolute;\n top: 0.5rem;\n right: 0.5rem;\n}\n\n.gpf-btn-icon-return {\n float: left;\n position: absolute;\n top: 0.5rem;\n left: 0.5rem;\n}\n\n.gpf-btn-icon-return::after {\n /* INFO : utiliser l'icone DSFR \"fr-icon-arrow-go-back-fill fr-btn--sm fr-btn--icon\" */\n -webkit-mask: url(\"img/GPreturnDSFR.png\") center no-repeat;\n mask: url(\"img/GPreturnDSFR.png\") center no-repeat;\n}\n\n.gpf-btn-icon {\n width: inherit;\n caret-color: transparent;\n}\n\n.gpf-btn-icon-reset::after {\n -webkit-mask:\n linear-gradient(#fff 0 0) top /100% 1px,\n linear-gradient(#fff 0 0) bottom/100% 1px,\n linear-gradient(#fff 0 0) left /1px 100%,\n linear-gradient(#fff 0 0) right /1px 100%,\n url(\"img/GPclose.png\") -25px center;\n mask:\n linear-gradient(#fff 0 0) top /100% 1px,\n linear-gradient(#fff 0 0) bottom/100% 1px,\n linear-gradient(#fff 0 0) left /1px 100%,\n linear-gradient(#fff 0 0) right /1px 100%,\n url(\"img/GPclose.png\") -25px center;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n background-color: var(--text-action-high-blue-france);\n}\n\n.gpf-btn-icon-info {\n width: 40px;\n height: 40px;\n}\n\n/*************/\n/* elements */\n/*************/\n\n.gpf-label {}\n\n.gpf-select {}\n\n.gpf-input {\n padding-left: 5px;\n}\n\n.gpf-radio-group {}\n\n.gpf-radio-btn-group {\n display: flex;\n gap: 1em;\n}\n\n.gpf-upload {}\n\n/*************/\n/* panel */\n/*************/\n\n.gpf-panel__list,\n.gpf-panel__advancedlist {\n z-index: 2;\n width: inherit;\n /* display: none; */\n position: absolute;\n max-height: 140px;\n background-color: #FFF;\n border: 1px solid #999;\n overflow-y: hidden;\n}\n\n.gpf-panel__advancedlist {\n width: calc(100% - 28px);\n border-top: none;\n font-size: 0.9em;\n}\n\n.gpf-panel__items:hover {\n color: #000000;\n background-color: #CEDBEF\n}\n\n.gpf-panel__items {\n width: 100%;\n height: 28px;\n line-height: 16px;\n padding: 6px 10px;\n color: #5E5E5E;\n font-size: 1.0em;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n}\n\n.gpf-panel::after {\n height: unset;\n flex: 0;\n}\n\n.gpf-panel::before {\n height: unset;\n flex: 0;\n}\n\n/***********/\n/* position*/\n/***********/\n:root {\n --size-per-row: 50px;\n}\n\n.position-container-top-left,\n.position-container-top-right,\n.position-container-bottom-left,\n.position-container-bottom-right {\n position: absolute;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n /* crée un décalage sur le searchEngine */\n /* align-items: center; */\n /* + 5px pour l'indicateur \"bouton actif\" */\n width: calc(var(--size-per-row) + 4px);\n min-height: var(--size-per-row);\n /* padding: 5px; */\n height: calc(100% - 8px);\n}\n\n.position-container-top-left,\n.position-container-top-right {\n top: 4px;\n}\n\n.position-container-top-left {\n float: left;\n left: 8px;\n}\n\n.position-container-top-right {\n float: right;\n right: 4px;\n}\n\n.position-container-bottom-left,\n.position-container-bottom-right {\n bottom: 4px;\n justify-content: flex-end;\n}\n\n.position-container-bottom-right {\n float: right;\n right: 4px;\n}\n\n.position-container-bottom-left {\n float: left;\n left: 8px;\n}\n\n/**********************/\n/* Feature info popup */\n/**********************/\n\n.gp-feature-info-div {\n bottom: 17px;\n position: relative;\n max-width: calc(100vw - 80px);\n padding: 10px;\n /* border-radius: 10px; */\n font-size: 0.75em;\n /* font-family: \"Open Sans\", sans-serif;\n color: #002A50; */\n background-color: var(--background-default-grey);\n box-shadow: 0 0 5px var(--text-default-grey);\n}\n\n.gp-feature-info-div::before {\n content: \"\";\n position: absolute;\n border-top: 15px solid var(--background-default-grey);\n border-right: 14px solid transparent;\n border-left: 14px solid transparent;\n bottom: -15px;\n margin-left: -14px;\n left: 50%;\n}\n\n.gp-feature-info-div .closer {\n position: absolute;\n display: block;\n width: 30px;\n height: 30px;\n top: 0;\n right: 0;\n border: none;\n cursor: pointer;\n border-top-right-radius: 10px;\n border-bottom-right-radius: 10px;\n background-color: var(--background-default-grey);\n}\n\n.gp-feature-info-div .closer::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n background-color: var(--text-action-high-blue-france);\n -webkit-mask: url(\"img/close-blue.svg\") center no-repeat;\n mask: url(\"img/close-blue.svg\") center no-repeat;\n -webkit-mask-size: 14px 14px;\n mask-size: 14px 14px;\n}\n\n.gp-features-content-div {\n max-width: 420px;\n min-width: 260px;\n max-height: 340px;\n overflow: auto;\n}\n\n.gp-features-content-div h5,\n.gp-features-content-div h6,\n.gp-features-content-div p,\n.gp-features-content-div ul {\n margin: 0;\n}\n\n.gp-features-content-div ul {\n padding: 0;\n list-style-type: none;\n}\n\n.geoportail-popup-content h5,\n.geoportail-popup-content h6,\n.geoportail-popup-content p,\n.gp-att-name-div,\n.gp-att-description-div,\n.gp-att-others-div {\n padding: 0 10px;\n}\n\n.geoportail-popup-content h5:not(:last-child),\n.geoportail-popup-content h6:not(:last-child),\n.geoportail-popup-content p:not(:last-child),\n.gp-att-description-div:not(:last-child),\n.gp-att-others-div:not(:last-child) {\n margin-bottom: 15px;\n}\n\n.geoportail-popup-content h5:last-child,\n.geoportail-popup-content h6:last-child,\n.geoportail-popup-content p:last-child,\n.gp-att-description-div:last-child,\n.gp-att-others-div:last-child,\n.gp-att-name-div {\n margin-bottom: 10px;\n}\n\n.geoportail-popup-content h5:first-child,\n.geoportail-popup-content h6:first-child,\n.geoportail-popup-content p:first-child,\n.gp-att-name-div:first-child,\n.gp-att-description-div:first-child,\n.gp-att-others-div:first-child {\n margin-top: 10px;\n}\n\n.gp-att-name-div,\n.gp-features-content-div h5 {\n padding-right: 35px;\n font-weight: bold;\n font-size: 1.2em;\n text-transform: uppercase;\n color: #0B6BA7;\n}\n\n.gp-features-content-div h6 {\n font-size: 1.1em;\n}\n\n.gp-att-description-div:not(:last-child),\n.gp-att-others-div:not(:last-child) {\n padding-bottom: 10px;\n border-bottom: 1px dotted #666;\n}\n\n/* surcharge css OpenLayers */\n.ol-disabled {\n --idle: transparent;\n --hover: var(--background-disabled-grey-hover);\n --active: var(--background-disabled-grey-active);\n background-color: var(--background-disabled-grey);\n color: var(--text-disabled-grey);\n cursor: not-allowed;\n /* instead of display: none */\n display: block;\n}\n\n.ol-scale-bar, .ol-scale-line {\n z-index: -1;\n}\n\n/* surcharge DSFR pour coller aux règles et au rendu de https://www.systeme-de-design.gouv.fr/composants-et-modeles/composants/accordeon/ */\n/* FIXME: pourquoi on a besoin de faire ça ?? normalement ces règles devraient être importées avec le reste... */\n.fr-collapse {\n --collapse-max-height: none;\n}\n\n.fr-collapse:not(.fr-collapse--expanded):not(.fr-collapsing) {\n --collapse-max-height: 0;\n}\n\n@media (max-width: 576px) {\n .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog {\n width: 100vw !important;\n }\n\n .gpf-mobile-fullscreen form div, .gpf-mobile-fullscreen form p {\n margin: auto;\n text-align: center;\n }\n\n .gpf-mobile-fullscreen .gpf-mobile-form {\n max-height: unset;\n height: 100vh;\n }\n\n .position-container-top-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-bottom-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-top-left .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-bottom-left .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog {\n top: -4px !important;\n left: -8px !important;\n right: unset !important;\n }\n\n .position-container-top-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog,\n .position-container-bottom-right .gpf-mobile-fullscreen > button[aria-pressed=\"true\"] ~ dialog {\n right: -4px !important;\n left: unset !important;\n }\n}\n",".gpf-btn-icon-drawing::after {\n -webkit-mask: url(\"img/modifier.svg\") center no-repeat;\n mask: url(\"img/modifier.svg\") center no-repeat;\n}\n\n.gp-label-div,\n.gp-styling-div {\n width: 370px;\n transform: translateY(20px);\n}\n\n.gp-label-div textarea {\n max-width: 100%;\n margin-bottom: 1rem;\n}\n\n.gp-label-div input {\n width: 100%;\n}\n\n.gp-styling-option.fr-range--sm[data-fr-js-range]::before,\n.gp-styling-option.fr-range--sm[data-fr-js-range]::after {\n top: 1.74rem;\n}\n\n.drawing-tool {\n width: 40px;\n}\n\n.drawing-tool-active {\n background-color: var(--hover-tint);\n}\n\n/*\n* Drawing tools\n*/\nbutton[id^=drawing-tool-point-]::after {\n -webkit-mask: url(\"img/dsfr/create-point.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-point.svg\") center no-repeat;\n}\n\n\nbutton[id^=drawing-tool-line-]::after {\n -webkit-mask: url(\"img/dsfr/create-line.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-line.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-polygon-]::after {\n -webkit-mask: url(\"img/dsfr/create-polygon.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-polygon.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-text-]::after {\n -webkit-mask: url(\"img/dsfr/create-label.svg\") center no-repeat;\n mask: url(\"img/dsfr/create-label.svg\") center no-repeat;\n}\n\n/*\n* Editing tools\n*/\nbutton[id^=drawing-tool-edit-]::after {\n -webkit-mask: url(\"img/dsfr/edit-geom.svg\") center no-repeat;\n mask: url(\"img/dsfr/edit-geom.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-display]::after {\n -webkit-mask: url(\"img/dsfr/edit-style.svg\") center no-repeat;\n mask: url(\"img/dsfr/edit-style.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-tooltip]::after {\n -webkit-mask: url(\"img/dsfr/edit-text.svg\") center no-repeat;\n mask: url(\"img/dsfr/edit-text.svg\") center no-repeat;\n}\n\nbutton[id^=drawing-tool-remove]::after {\n -webkit-mask: url(\"img/dsfr/delete.svg\") center no-repeat;\n mask: url(\"img/dsfr/delete.svg\") center no-repeat;\n}\n",".gpf-btn-icon-elevation::after {\n -webkit-mask: url(\"img/altipath.svg\") center no-repeat;\n mask: url(\"img/altipath.svg\") center no-repeat;\n}\n\n[id^=GPelevationPathPanelInfo] {\n position: absolute;\n float: left;\n top: 0;\n left: 0;\n}\n\n/* surcharge de fr-panel pour permettre la saisie sous la fenêtre de résultat */\n[id^=GPelevationPathPanel] {\n height: unset;\n}\n\n[id^=GPelevationPathPanelInfo]::after {\n -webkit-mask: url(\"../../img/GPinfo_secondary.svg\") center no-repeat;\n mask: url(\"../../img/GPinfo_secondary.svg\") center no-repeat;\n}\n\n[id^=GPelevationPathProfil] > #profileElevationByDefault > svg {\n transform: translateY(1rem);\n}\n\n[id^=GPelevationPathProfil] {\n height: 150px;\n width: 300px;\n}\n\n.GPelevationPathProfilWrapper {\n padding: 0 2rem;\n}\n\ndiv[id^=GPelevationPathInformationsContainer] {\n display: grid;\n width: calc(300px + 4rem);\n padding: 0 2rem 1rem 2rem;\n grid-template-columns: 50% 50%;\n}\n\n.GPelevationPathInformations {\n font-size: 13px;\n margin: 0;\n display: flex;\n flex-wrap: wrap;\n gap: 0 0.25rem;\n}\n\n.GPelevationPathInformations > span {\n white-space: nowrap;\n}\n\n/* Mode Mobile */\n\n@media (max-width: 576px) {\n div[id^=GPelevationPathInformationsContainer], #GPelevationPathProfil {\n margin: auto;\n }\n}","/* GET FEATURE INFO */\n.gpf-btn-icon-getfeatureinfo::after {\n -webkit-mask: url(\"img/NoGFI.svg\") center no-repeat;\n mask: url(\"img/NoGFI.svg\") center no-repeat;\n}\n\nbutton[id^=\"GPgetFeatureInfoPicto-\"][aria-pressed=\"true\"]::after {\n -webkit-mask: url(\"img/GFI.svg\") center no-repeat;\n mask: url(\"img/GFI.svg\") center no-repeat;\n}",".gpf-btn-icon-isocurve::after {\n -webkit-mask: url(\"img/isochrone.svg\") center no-repeat;\n mask: url(\"img/isochrone.svg\") center no-repeat;\n}\n\n.gpf-flex-isocurve {\n justify-content: unset;\n}\n\n.gpf-btn-icon-isocurve-reset {\n background-position: -29px center;\n}\n\n[id^=GPisochronPanel-] p.gpf-label {\n margin-top: 1rem;\n margin-bottom: 0.2rem;\n}\n\n[id^=\"GPisochronPanel-\"] p.gpf-label:first-child {\n margin-top: 0;\n}\n\ndiv[id^=\"GPisochronChoice\"] {\n justify-content: left;\n gap: 1em;\n}\n\ndiv[id^=GPisochronTransportChoice] > div {\n margin-top: 0.5rem;\n}\n\ndiv[id^=GPisochronValueChron],\ndiv[id^=GPisochronValueDist] {\n width: 281px;\n}\n\n.GPflexInput > input[id^=\"GPisochronValueChronInput2\"] {\n margin-top: 0;\n}\n\n.GPisoExclusionsOptions {\n gap: 1rem;\n}\n\n[id^=GPisochronForm-] > .GPpanelFooter {\n position: unset;\n}\n\n[id^=GPisochronReset-] {\n min-width: 2.5rem;\n}\n\n[id^=GPisochronSubmit-] {\n width: 80%;\n}\n\n",".gpf-btn-icon-import::after {\n -webkit-mask: url(\"img/layerimport.svg\") center no-repeat;\n mask: url(\"img/layerimport.svg\") center no-repeat;\n}\n\n.gpf-panel__items_layerimport {\n color: var(--text-action-high-blue-france);\n border-bottom: 1px solid var(--grey-900-175);\n list-style-type: none;\n height: auto;\n}\n","div[id^=GPlayerSwitcher-] {\n height: 44px;\n}\n\nbutton[id^=GPshowLayersListPicto] {\n width: 40px;\n}\n\nbutton[id^=GPshowLayersListPicto][aria-pressed=\"true\"] + dialog[id^=GPlayersList] {\n width: 350px;\n}\n\n.GPlayerSwitcher_layer {\n background-color: var(--background-overlap-grey);\n padding-right: 40px;\n}\n\n.gpf-btn-icon-layerswitcher::after {\n -webkit-mask: url(\"img/dsfr/layerswitcher.svg\") center no-repeat;\n mask: url(\"img/dsfr/layerswitcher.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-ls-visibility {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-visibility::after {\n -webkit-mask: url(\"img/dsfr/visible-open.svg\") center no-repeat;\n mask: url(\"img/dsfr/visible-open.svg\") center no-repeat;\n}\n\nbutton[id^=GPvisibilityPicto_ID_][aria-pressed=\"false\"]::after {\n -webkit-mask: url(\"img/dsfr/visible-close-blanc.svg\") center no-repeat;\n mask: url(\"img/dsfr/visible-close-blanc.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-ls-remove {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-remove::after {\n -webkit-mask: url(\"img/dsfr/remove.svg\") center no-repeat;\n mask: url(\"img/dsfr/remove.svg\") center no-repeat;\n}\n\n\n.gpf-btn-icon-ls-collapse {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-collapse::after {\n -webkit-mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n transition: transform 0.2s ease-out 0s;\n}\n\n.gpf-btn-icon-ls-collapse[aria-pressed=\"true\"]::after {\n box-shadow: none;\n transform: rotate(180deg);\n}\n\n.gpf-btn-icon-ls-dragndrop {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-dragndrop::after {\n -webkit-mask: url(\"img/dsfr/dragndrop.svg\") center no-repeat;\n mask: url(\"img/dsfr/dragndrop.svg\") center no-repeat;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools {\n height: 56px;\n max-height: 56px;\n}\n\n/* Surchargé en inline avec \"hidden\" pour les couches n'ayant pas de description ou de titre */\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"true\"] + .GPlayerAdvancedTools > .GPlayerInfo {\n visibility: visible;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"false\"] {\n box-shadow: none;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_][aria-pressed=\"false \"] + .GPlayerAdvancedTools > .GPlayerInfo {\n visibility: hidden;\n}\n\nbutton[id^=GPshowAdvancedTools_ID_] {\n position: absolute;\n top: 12px;\n right: 16px;\n}\n\ndiv[id^=GPbasicTools_ID_] {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n flex-wrap: nowrap;\n flex-direction: row-reverse;\n}\n\ndiv[id^=GPadvancedTools_ID_] {\n display: flex;\n align-content: center;\n align-items: center;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n height: inherit;\n}\n\n.gpf-btn-header {\n z-index: 2;\n position: absolute;\n width: 26px;\n height: 26px;\n}\n\n.gpf-btn-icon-layers {\n background-image: url(\"img/dsfr/layers.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n}\n\n.gpf-panel__body_ls {\n overflow: auto;\n max-height: 300px !important;\n}\n\n.gpf-panel__title_ls {\n color: #101092;\n padding: 12px 15px;\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n margin: 0;\n right: -16px;\n}\n.gpf-panel__header_ls {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-content: center;\n background: #E3E3FD;\n height: 48px;\n}\n\n.gpf-btn-icon-ls-info {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-info::after {\n -webkit-mask: url(\"img/dsfr/info.svg\") center no-repeat;\n mask: url(\"img/dsfr/info.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-ls-extent {\n box-shadow: none;\n}\n\n.gpf-btn-icon-ls-extent::after {\n -webkit-mask: url(\"img/dsfr/extent.svg\") center no-repeat;\n mask: url(\"img/dsfr/extent.svg\") center no-repeat;\n}\n\n[id^=GPlayerInfoPanel] {\n position: absolute;\n height: initial;\n}\n\n.gpf-label-name {\n width: calc(100% - 96px);\n line-height: 28px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding-left: 4px;\n}\n\n.GPlayerDragNDrop {\n cursor: move;\n}\n\n.gpf-range__output {\n width: 35px;\n}\n\n.GPlayerOpacity.fr-range--sm[data-fr-js-range]::after,\n.GPlayerOpacity.fr-range--sm[data-fr-js-range]::before {\n top: 25%;\n}\n\ndiv[id^=GPlayerInfoContent] {\n width: 350px;\n}\n\n.gpf-btn-icon-close.GPlayersPanelClose {\n top: 0;\n right: 0;\n}\n\n.gpf-btn-icon-close.GPlayersPanelClose::after {\n margin-left: -0.125rem;\n}\n\n/* menu contextuel (mobile) */\n.GPlayerAdvancedToolsContextual {\n display: none;\n}\n\n.GPlayerAdvancedToolsContextual::after {\n -webkit-mask: url(\"./img/dsfr/context.svg\") center no-repeat;\n mask: url(\"./img/dsfr/context.svg\") center no-repeat;\n}\n\n.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"] {\n background-color: var(--hover-tint);\n overflow: visible;\n}\n\n.GPlayerSwitcher_layer:has(.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"]) {\n overflow: visible;\n}\n\n[id^=GPlayersList-] .GPpanelBody:has(.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"]) {\n overflow: visible;\n}\n\n.GPlayerAdvancedTools:has(.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"]) {\n position: relative;\n}\n\n.GPlayerAdvancedToolsContextual + div {\n display: none;\n flex-direction: column;\n flex-wrap: wrap;\n font-size: 13px;\n z-index: 12;\n background-color: var(--background-overlap-grey);\n border-radius: 6px;\n box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.15);\n padding: 14px 6px;\n gap: 6px;\n}\n\n.GPlayerAdvancedToolsContextual + div > button {\n padding-left: 2rem;\n}\n\n.GPlayerAdvancedToolsContextual + div > button[visibility=\"hidden\"] {\n display: none;\n}\n\n.GPlayerAdvancedToolsContextual + div > button::after {\n mask-position: left;\n}\n\n.GPlayerAdvancedToolsContextual[aria-pressed=\"true\"] + div {\n display: flex;\n position: absolute;\n right: 0;\n top: calc(2.5rem + 8px);\n}\n\n@media (max-width: 576px) {\n .GPlayerAdvancedTools {\n width: calc(100% + 40px);\n }\n\n .GPlayerAdvancedTools > .GPlayerRemove, .GPlayerAdvancedTools > .GPlayerInfo, .GPlayerAdvancedTools > .GPlayerExtent {\n display: none;\n }\n\n .GPlayerAdvancedToolsContextual {\n display: inline-flex;\n }\n\n [id^=GPopacity_ID_] {\n flex-grow: 0.6;\n }\n}\n",".gpf-btn-icon-pointer::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask: url(\"img/reticle.svg\") center no-repeat;\n mask: url(\"img/reticle.svg\") center no-repeat;\n background-color: var(--text-inverted-blue-france);\n}\n\n.gpf-btn-icon-pointer {\n min-width: 2.5rem;\n position: relative;\n border-top-right-radius: 4px;\n}\n\n.GPlocationStageFlexInput:has(.GPlocationStageRemove) > .gpf-btn-icon-pointer {\n border-top-right-radius: 0px;\n}\n\n.gpf-btn-icon-remove {\n height: 2.5rem;\n width: 2.5rem;\n}\n\n.gpf-btn-icon-label {}\n.gpf-btn-icon-remove::after {\n -webkit-mask: url(\"img/dsfr/close-line.svg\") center no-repeat;\n mask: url(\"img/dsfr/close-line.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-add::after {\n -webkit-mask: url(\"img/GPlocationOptions.png\") -51px center no-repeat;\n mask: url(\"img/GPlocationOptions.png\") -51px center no-repeat;\n width: 2.5rem;\n height: 2.5rem;\n}\n\n.GPlocationOriginLabel {\n display: none;\n pointer-events: none;\n}\n\n[class^=\"GPlocationPoint-\"] {\n padding: 0;\n}\n\n[id^=\"GPlocationPoint_\"] {\n justify-content: left;\n}\n\n.GPlocationStageFlexInput {\n flex-wrap: wrap;\n width: 281px;\n}\n\n.GPlocationStageAdd {\n flex-basis: 65%;\n width: 0px;\n min-height: 40px;\n padding: 0.25rem 0.75rem 0.25rem 2.5rem;\n text-align: left;\n}\n\n.GPlocationOriginLabel {\n flex-basis: fit-content;\n}\n\n.GPlocationOriginPointerImg {\n flex-basis: 2.5em;\n}\n\n.GPlocationStageFlexInput input {\n flex-basis: 33%;\n flex-grow: 1;\n}\n","/* MEASURE TOOL */\n\n.GPmeasureTooltip {\n background-color: var(--background-contrast-grey);\n padding: 0.2rem 0.4rem;\n opacity: 0.8;\n}\n\n",".gpf-btn-icon-area::after {\n -webkit-mask: url(\"img/mesurer-surface.svg\") center no-repeat;\n mask: url(\"img/mesurer-surface.svg\") center no-repeat;\n}",".gpf-btn-icon-length::after {\n -webkit-mask: url(\"./img/mesurer-distance.svg\") center no-repeat;\n mask: url(\"./img/mesurer-distance.svg\") center no-repeat;\n}",".gpf-btn-icon-azimuth::after {\n -webkit-mask: url(\"img/mesurer-azimuth.svg\") center no-repeat;\n mask: url(\"img/mesurer-azimuth.svg\") center no-repeat;\n}",".gpf-btn-icon-position::after {\n -webkit-mask: url(\"img/position.svg\") center no-repeat;\n mask: url(\"img/position.svg\") center no-repeat;\n}\n\ndiv[id^=GPmousePositionCoordinate-] input {\n color: inherit;\n}\n\ndiv[id^=GPmousePositionAltitude-],\ndiv[id^=GPmousePositionCoordinate-] > div {\n display: flex;\n justify-content: space-between;\n}\n\ndiv[id^=GPmousePositionCoordinate-] input[readonly] {\n font-size: 1rem\n}",".gpf-btn-icon-reverse::after {\n -webkit-mask: url(\"img/reversegeocode.svg\") center no-repeat;\n mask: url(\"img/reversegeocode.svg\") center no-repeat;\n}\n\n.gpf-flex-reverse {\n /* INFO : surcharge de .gpf-flex par defaut */\n display: flex;\n align-items: flex-start;\n flex-direction: column;\n justify-content: space-evenly;\n}\n\n.gpf-panel-reverse {\n /* INFO : surcharge de .gpf-panel par defaut */\n width: 100%;\n}\n",".gpf-btn-icon-route::after {\n -webkit-mask: url(\"img/route.svg\") center no-repeat;\n mask: url(\"img/route.svg\") center no-repeat;\n}\n\n.GProuteFormMini {\n max-height: 78px;\n}\n\n.GProuteFormMini .GPelementShow {\n color: var(--grey-200-850);\n}\n\n.GProuteModeLabel {\n margin-bottom: 0.5rem;\n}\n\n[id^=GProuteForm-] p.gpf-label {\n margin-top: 0;\n margin-bottom: 0.2rem;\n}\n\n[id^=\"GProuteForm-\"] > .GPpanelFooter {\n position: unset;\n}\n\n[id^=\"GProuteSubmit-\"] {\n width: 80%;\n}\n\n[id^=\"GProuteForm-\"] > [class^=\"GPlocationPoint-\"] {\n margin-top: 0;\n}\n\n[id^=\"GProuteForm-\"] > p.gpf-label {\n margin-top: 1rem;\n}\n\n[id^=\"GProuteForm-\"].GProuteFormMini > p.gpf-label {\n margin-top: 0;\n}\n\n[id^=\"GProuteForm-\"] > p.gpf-label ~ p.gpf-label {\n margin-top: 0.5rem;\n}\n\n/* Reset picto */\nbutton[id^=GProuteReset-], div[id^=GProuteResultsNew-] {\n min-width: 2.5em;\n}\n\ndiv[id^=GProuteResultsValueDist],\ndiv[id^=GProuteResultsValueTime] {\n color: var(--text-action-high-blue-france);\n font-weight: bold;\n}\n\n.GProuteResultsShowDetailsDiv {\n justify-content: left;\n}\n\ndiv:has(input[id^=GProuteResultsShowDetails]) + div[id^=GProuteResultsDetails-] {\n max-height: 0;\n opacity: 0;\n overflow: hidden;\n}\n\ndiv:has(input[id^=GProuteResultsShowDetails]:checked) + div[id^=GProuteResultsDetails-] {\n max-height: 200px;\n opacity: 1;\n overflow-y: scroll;\n}\n\ndiv[id^=GProuteResultsDetails-] {\n max-width: 350px;\n transition: max-height 0.5s ease-in-out 0.25s, opacity 0.5s ease-in-out 0.25s;\n display: grid;\n grid-template-columns: 30px 1fr;\n gap: 0.5rem 5px;\n}\n\n.GProuteResultsDetailsNumber,\n.GProuteResultsDetailsInstruction {\n display: inline-block;\n}\n\n.GProuteResultsDetailsNumber {\n font-weight: bold;\n text-align: right;\n vertical-align: top;\n}\n\n.GProuteExclusionsOptions {\n gap: 0.5rem;\n color: var(--text-label-grey);\n}\n\n/* Mode Mobile */\n\n@media (max-width: 576px) {\n .gpf-mobile-fullscreen div[id^=\"GProuteResultsDetails-\"] {\n max-width: unset;\n }\n}",".gpf-widget-padding {\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.gpf-widget-color {\n background-color: var(--background-default-grey);\n}\n\n.gpf-panel__items_searchengine,\n.GPlabelTitle {\n color: var(--text-action-high-blue-france);\n border-bottom: 1px solid var(--grey-900-175);\n padding: 12px;\n}\n\n\n.gpf-panel__items.GPautoCompleteProposal {\n height: 45px;\n box-sizing: border-box;\n margin-bottom: 0;\n}\n\n.GPlabelTitle {\n background-color: var(--background-open-blue-france);\n font-size: 1.0em;\n margin-bottom: 0;\n}\n\ndialog[id^=GPcoordinateSearchPanel],\ndialog[id^=GPadvancedSearchPanel] {\n max-height: unset;\n}\n\nselect[name^=\"inputSex\"].gpf-select {\n padding: unset;\n}\n\ninput[name^=\"inputSex\"].gpf-input {\n padding: unset;\n}\n\nbutton[id^=GPsearchInputReset] {\n width: 40px;\n height: 40px;\n}\n\n[id^=\"GPshowSearchDiv\"] {\n flex-direction: row-reverse;\n}\n\n[id^=\"GPsearchEngine-\"] {\n flex-direction: column;\n}\n\n[id^=\"GPsearchEngine-\"].gpf-widget-padding {\n align-items: center;\n}\n\ndiv.GPbuttonsContainer > button {\n width: 40px;\n}\n\n.GPsearchFirstLineWrapper {\n height: 40px;\n}\n\n.gpf-widget-padding > .GPsearchFirstLineWrapper {\n margin: 0.5rem 0;\n}\n\n.GPbuttonsContainer {\n height: 56px;\n padding-left: 10px;\n}\n\n.GPsearchRadioContainer {\n display: flex;\n flex-direction: row;\n background-color: var(--background-default-grey);\n white-space: nowrap;\n max-height: 0;\n overflow: clip;\n transition: max-height 0.3s;\n gap: 1rem;\n}\n\n[id^=\"GPsearchEngine-\"]:has([id^=\"GPshowSearchByCoordinate-\"][aria-pressed=\"true\"]) > .GPsearchRadioContainer,\n[id^=\"GPsearchEngine-\"]:focus-within > .GPsearchRadioContainer,\n[id^=\"GPsearchEngine-\"]:hover > .GPsearchRadioContainer {\n max-height: 3rem;\n}\n\n.GPsearchRadioElements {\n display: flex;\n flex-direction: row;\n gap: 1rem;\n}\n\n.GPshowAdvancedSearch {\n color: var(--text-action-high-blue-france);\n text-decoration: underline;\n cursor: pointer;\n display: flex;\n align-items: center;\n}\n\n.gpf-btn-icon-search {\n background-image: url(\"img/dsfr/search-line.svg\");\n background-repeat: no-repeat;\n background-position: center center;\n /* cas particulier ou on n'utilise pas la class gpf-icon-button pour la largeur à cause du DOM du control*/\n width: 40px;\n}\n\nform[id^=GPsearchInput-] {\n margin-left: 8px;\n width: 300px;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"][aria-pressed=\"false\"] + form[id^=GPsearchInput-] {\n max-width: 300px;\n border: none;\n}\n\nbutton[id^=\"GPshowSearchEnginePicto-\"] {\n border-radius: 0 0.25rem 0 0;\n}\n\n.gpf-btn-icon-search-advanced::after {\n -webkit-mask: url(\"img/dsfr/recherche-avancee.svg\") center no-repeat;\n mask: url(\"img/dsfr/recherche-avancee.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-search-geolocate::after {\n -webkit-mask: url(\"img/dsfr/localiser.svg\") center no-repeat;\n mask: url(\"img/dsfr/localiser.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-search-coordinate::after {\n -webkit-mask: url(\"img/dsfr/coordonnees.svg\") center no-repeat;\n mask: url(\"img/dsfr/coordonnees.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-search-reset {\n background-position: -25px center;\n}\n\ndialog[id^=GPcoordinateSearchPanel],\ndialog[id^=\"GPadvancedSearchPanel\"] {\n position: absolute;\n top: 66px;\n width: inherit;\n}\n\n/* Autocomplete list / geocode results */\n\n[id^=\"GPautocompleteResults-\"] {\n border: 1px solid var(--background-open-blue-france);\n}\n\ndiv[id^=GPautoCompleteList],\ndialog[id^=GPgeocodeResultsList] {\n width: 320px;\n position: absolute;\n height: fit-content;\n background-color: var(--background-default-grey);\n max-height: unset;\n}\n\ndiv[id^=GPautoCompleteList] {\n top: 42px;\n margin-left: 2px;\n}\n\n.position-container-top-left [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-bottom-left [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-top-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-bottom-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList] {\n width: 340px;\n position: relative;\n top: unset;\n margin-left: 8px;\n}\n\n.position-container-top-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList],\n.position-container-bottom-right [id^=\"GPsearchEngine-\"] > div[id^=GPautoCompleteList] {\n margin-right: 10px;\n}\n\n.gpf-widget-padding > div[id^=GPautoCompleteList] {\n top: 100%;\n width: 100%;\n margin: 0;\n}\n\ndialog[id^=GPgeocodeResultsList] {\n position: absolute;\n top: 55px;\n border-radius: 4px;\n overflow: hidden;\n}\n\ndiv[id^=GPgeocodeResults-] {\n width: 100%;\n position: relative;\n background-color: var(--background-default-grey);\n max-height: 240px;\n overflow-y: auto;\n}\n\n[id^=\"GPautocompleteResultsSuggest\"],\n[id^=\"GPautocompleteResultsLocation\"] {\n height: 225px;\n}\n\n/* Mode Mobile */\n@media (max-width: 576px) {\n\n .gpf-widget-padding > .GPsearchFirstLineWrapper {\n flex-direction: column;\n height: fit-content;\n }\n\n .GPsearchRadioContainer {\n flex-direction: column;\n align-items: center;\n }\n\n dialog[id^=GPcoordinateSearchPanel],\n dialog[id^=\"GPadvancedSearchPanel\"] {\n position: relative;\n top: unset;\n margin-left: unset;\n }\n\n .GPsearchRadioContainer {\n gap: 0;\n margin: 0 8px;\n }\n\n form[id^=GPsearchInput-] {\n margin-left: 0;\n }\n\n [id^=\"GPsearchEngine-\"]:has([id^=\"GPshowSearchByCoordinate-\"][aria-pressed=\"true\"]) > .GPsearchRadioContainer,\n [id^=\"GPsearchEngine-\"]:focus-within > .GPsearchRadioContainer,\n [id^=\"GPsearchEngine-\"]:hover > .GPsearchRadioContainer {\n max-height: 4rem;\n }\n}\n",".gpf-btn-icon-toolbox {\n background-repeat: no-repeat;\n background-image: url(\"img/GPtoolBoxMeasureOpen.png\");\n background-position: 3px center;\n}",".gpf-btn-icon-zoom-in {\n height: inherit;\n width: inherit;\n}\n\n.gpf-btn-icon-zoom-in::after {\n -webkit-mask: url(\"img/dsfr/zoom-in.svg\") center no-repeat;\n mask: url(\"img/dsfr/zoom-in.svg\") center no-repeat;\n}\n\n.gpf-btn-icon-zoom-out {\n height: inherit;\n width: inherit;\n}\n\n.gpf-btn-icon-zoom-out::after {\n -webkit-mask: url(\"img/dsfr/zoom-out.svg\") center no-repeat;\n mask: url(\"img/dsfr/zoom-out.svg\") center no-repeat;\n}\n","/* surcharge en mode dsfr */\n.ol-custom-full-screen button {\n height: 40px;\n width: 40px;\n background-position: center center;\n background-repeat: no-repeat;\n}\n.ol-custom-full-screen button.ol-custom-full-screen-false::after {\n -webkit-mask: url(\"img/dsfr/fullscreen.svg\") center no-repeat;\n mask: url(\"img/dsfr/fullscreen.svg\") center no-repeat;\n}\n.ol-custom-full-screen button.ol-custom-full-screen-true::after {\n -webkit-mask: url(\"img/dsfr/fullscreen-off.svg\") center no-repeat;\n mask: url(\"img/dsfr/fullscreen-off.svg\") center no-repeat;\n}",".gpf-btn-icon-overviewmap::after {\n -webkit-mask: url(\"img/overviewmap.svg\") center no-repeat;\n mask: url(\"img/overviewmap.svg\") center no-repeat;\n}\n\n.ol-overviewmap:has(> .gpf-btn-icon[aria-pressed=\"true\"])::after {\n transform: translateY(-100%);\n}\n\n.ol-overviewmap:not(.ol-collapsed) {\n background: unset;\n}",".gpf-btn-icon-legends::after {\n -webkit-mask: url(\"img/dsfr/legends.svg\") center no-repeat;\n mask: url(\"img/dsfr/legends.svg\") center no-repeat;\n}\n\n.gpf-btn-header-legends {\n z-index: 2;\n position: absolute;\n width: 26px;\n height: 26px;\n}\n\n.gpf-btn-icon-header-legends {\n background-image: url(\"img/dsfr/header-legends.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n}\n\n.gpf-panel__body_legends {\n overflow: auto;\n max-height: 300px !important;\n}\n\n.gpf-panel__title_legends {\n color: #101092;\n padding: 12px 15px;\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n margin: 0;\n right: -16px;\n}\n.gpf-panel__header_legends {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-content: center;\n background: #E3E3FD;\n height: 48px;\n}\n\nbutton[id^=GPcollapseLegend_ID_] {\n position: absolute;\n top: 8px;\n right: 0;\n}\n\n.gpf-btn-icon-legends-collapse {\n box-shadow: none;\n}\n\n.gpf-btn-icon-legends-collapse::after {\n -webkit-mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n mask: url(\"img/dsfr/collapse.svg\") center no-repeat;\n transition: transform 0.2s ease-out 0s;\n}\n\n.gpf-btn-icon-legends-collapse[aria-pressed=\"true\"]::after {\n box-shadow: none;\n transform: rotate(180deg);\n}\n\n.legend-entry-container {\n position: relative;\n top: 0;\n border-bottom: 1px solid var(--border-default-grey);\n overflow: hidden;\n}\n\n.legend-entry-container {\n background-color: var(--background-overlap-grey);\n}\n\n.gpf-label-legends-name {\n width: calc(100% - 40px);\n line-height: 56px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding-left: 4px;\n}\n\nbutton[id^=GPcollapseLegend_ID_][aria-pressed=\"true\"] + .legend-entry-image {\n opacity: 1;\n}\n\nbutton[id^=GPcollapseLegend_ID_][aria-pressed=\"true\"] + .legend-entry-image {\n max-height: 300px;\n overflow: auto;\n border-top: 1px solid var(--border-default-grey);\n padding: 10px 0;\n}\n\n.legend-entry-image {\n display: block;\n max-height: 0;\n opacity: 0;\n transition: max-height 0.5s ease-out 0s, opacity 0.5s ease-out 0s;\n}\n\n.legends-entries {\n padding: 0 16px;\n}\n",".gpf-btn-icon-catalog::after {\n -webkit-mask: url(\"img/dsfr/catalog.svg\") center no-repeat;\n mask: url(\"img/dsfr/catalog.svg\") center no-repeat;\n}\n\n/* Mode mobile doit prendre le dessus */\n\n@media (max-width: 576px) {\n .gpf-mobile-fullscreen .GPtabContent {\n max-height: unset !important;\n height: 100vh;\n }\n}",".gpf-btn-icon-territories::after {\n -webkit-mask: url(\"img/dsfr/territories.svg\") center no-repeat;\n mask: url(\"img/dsfr/territories.svg\") center no-repeat;\n}\n\n.gpf-btn-header-territories {\n z-index: 2;\n position: absolute;\n width: 26px;\n height: 26px;\n}\n\n.gpf-btn-icon-header-territories {\n background-image: url(\"img/dsfr/header-territories.svg\");\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n}\n\n.gpf-panel__body_territories {\n overflow: auto;\n max-height: 300px;\n}\n\n.gpf-panel__title_territories {\n color: #101092;\n padding: 12px 15px;\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n margin: 0;\n right: -16px;\n}\n.gpf-panel__header_territories {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-content: center;\n background: #E3E3FD;\n height: 48px;\n}\n\n#GPterritoriesPanelClose {\n top: 0;\n right: 0;\n}\n\n/* surchage tile */\n.gpf-tile {\n height: 150px;\n width: 150px;\n}\n.tiles-reduce div.fr-tile {\n height: unset;\n width: unset;\n padding: unset;\n}\n.fr-tile:hover {\n background-color: var(--background-contrast-grey);\n}\n.fr-tile__title::before {\n background-image: unset;\n}\n.gpf-tile__header {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.territories-entries {\n display: grid;\n}\n/* direction */\ndialog.tiles-direction { }\n.territories-entries.tiles-direction {}\n\n/* nombre de tuiles */\n.tiles-direction.tiles-0 {\n max-height: none !important;\n grid-template-columns: repeat(3, 1fr);\n}\n.tiles-direction.tiles-1 {\n grid-template-columns: repeat(1, 1fr);\n}\n.tiles-direction.tiles-2 {\n grid-template-columns: repeat(2, 1fr);\n}\n.tiles-direction.tiles-3 {\n grid-template-columns: repeat(3, 1fr);\n}\n.tiles-direction.tiles-4 {\n grid-template-columns: repeat(4, 1fr);\n}\n\ndiv.fr-tile div.fr-tile__header div.fr-tile__icon,\ndiv.fr-tile div.fr-tile__header div.fr-tile__thumbnail {\n display: block;\n}\n\n/* reduce */\n.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__icon,\n.tiles-reduce div.fr-tile div.fr-tile__header div.fr-tile__thumbnail {\n display: none;\n}\n\n.fr-tile__icon {\n /* background-image: url(\"img/dsfr/territories-small.svg\"); */\n background-repeat: no-repeat;\n background-size: auto auto;\n background-position: center center;\n height: 50px;\n width: 50px;\n}\n\n.tiles-thumbnail div.fr-tile div.fr-tile__header div.fr-tile__icon {\n display: none;\n}\n.tiles-icon div.fr-tile div.fr-tile__header div.fr-tile__thumbnail {\n display: none;\n}\n\n/* affichage plein écran sur petit écran */\n@media (max-width: 576px) {\n /* si 4 tuiles de large, on force 3 tuiles de large */\n .tiles-direction.tiles-4 {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n\n/* sur tout petit écran, on force 2 colonnes max */\n@media (max-width: 382px) {\n .tiles-direction.tiles-0 {\n grid-template-columns: repeat(2, 1fr);\n }\n .tiles-direction.tiles-3 {\n grid-template-columns: repeat(2, 1fr);\n }\n .tiles-direction.tiles-4 {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n","button[id^=\"GPshowControlListPicto-\"][aria-pressed=\"true\"] + dialog {\n width: 370px;\n}\n\ndiv[id^=\"GPcontrolList-\"] .GPshowOpen > span {\n font-size: 32px;\n position: absolute;\n transform: translate(-5px, -2px);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content {\n display: flex;\n flex-direction: column;\n padding: 0 1.5rem;\n overflow: auto;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content:not(:has(~ .gpf-panel__footer)) {\n padding-bottom: 2rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div {\n display: flex;\n flex-direction: row;\n column-gap: 1rem;\n align-items: center;\n padding: 0.5rem 0.5rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div:hover {\n background-color: var(--hover);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div:hover > button {\n background-color: var(--hover);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button {\n height: 40px;\n width: 40px;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > button::after {\n background-color: var(--text-default-grey);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > div {\n display: flex;\n flex-direction: column;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__content > div > div > span:nth-child(2) {\n color: var(--text-mention-grey);\n font-size: 0.75rem;\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__footer {\n padding: 1rem 2rem 2rem 2rem;\n background-color: var(--background-lifted-grey);\n}\n\ndialog[id^=\"GPcontrolListPanel-\"] .gpf-panel__footer > button {\n width: 100%;\n justify-content: center;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/package/geopf-extensions-openlayers-1.0.0-beta.1-318.tgz b/dist/package/geopf-extensions-openlayers-1.0.0-beta.1-318.tgz new file mode 100644 index 00000000..a1235d52 Binary files /dev/null and b/dist/package/geopf-extensions-openlayers-1.0.0-beta.1-318.tgz differ diff --git a/dist/package/geopf-extensions-openlayers.tgz b/dist/package/geopf-extensions-openlayers.tgz index 6fadd146..a1235d52 100644 Binary files a/dist/package/geopf-extensions-openlayers.tgz and b/dist/package/geopf-extensions-openlayers.tgz differ diff --git a/dist/package/package.json b/dist/package/package.json index 13aa0982..b55acf5c 100644 --- a/dist/package/package.json +++ b/dist/package/package.json @@ -1,8 +1,8 @@ { "name": "geopf-extensions-openlayers", "description": "French Geoportal Extensions for OpenLayers libraries", - "version": "1.0.0-beta.1-317", - "date": "03/01/2025", + "version": "1.0.0-beta.1-318", + "date": "06/01/2025", "module": "src/index.js", "directories": {}, "engines": { diff --git a/dist/package/src/packages/CSS/Controls/SearchEngine/DSFRsearchEngineStyle.css b/dist/package/src/packages/CSS/Controls/SearchEngine/DSFRsearchEngineStyle.css index 78c4072f..a83be4ee 100644 --- a/dist/package/src/packages/CSS/Controls/SearchEngine/DSFRsearchEngineStyle.css +++ b/dist/package/src/packages/CSS/Controls/SearchEngine/DSFRsearchEngineStyle.css @@ -18,11 +18,13 @@ .gpf-panel__items.GPautoCompleteProposal { height: 45px; box-sizing: border-box; + margin-bottom: 0; } .GPlabelTitle { background-color: var(--background-open-blue-france); font-size: 1.0em; + margin-bottom: 0; } dialog[id^=GPcoordinateSearchPanel], diff --git a/dist/package/src/packages/CSS/Controls/SearchEngine/GPFsearchEngine.css b/dist/package/src/packages/CSS/Controls/SearchEngine/GPFsearchEngine.css index a8587c8d..eef32bdd 100644 --- a/dist/package/src/packages/CSS/Controls/SearchEngine/GPFsearchEngine.css +++ b/dist/package/src/packages/CSS/Controls/SearchEngine/GPFsearchEngine.css @@ -141,6 +141,7 @@ input[id^=GPadvancedSearchSubmit] { .GPlabelTitle { font-weight: bold; + margin-bottom: 0; } [id^="GPautocompleteResults-"] { diff --git a/dist/package/src/packages/CSS/Controls/SearchEngine/GPFsearchEngineStyle.css b/dist/package/src/packages/CSS/Controls/SearchEngine/GPFsearchEngineStyle.css index 2422d7bb..787fa52b 100644 --- a/dist/package/src/packages/CSS/Controls/SearchEngine/GPFsearchEngineStyle.css +++ b/dist/package/src/packages/CSS/Controls/SearchEngine/GPFsearchEngineStyle.css @@ -5,6 +5,24 @@ align-items: center; } +.position-container-top-left [id^="GPsearchEngine-"], +.position-container-bottom-left [id^="GPsearchEngine-"], +.position-container-top-right [id^="GPsearchEngine-"], +.position-container-bottom-right [id^="GPsearchEngine-"] { + flex-direction: column; + align-items: flex-start; + height: 32px; +} + +.position-container-top-left [id^="GPsearchEngine-"] > div[id^=GPautoCompleteList], +.position-container-bottom-left [id^="GPsearchEngine-"] > div[id^=GPautoCompleteList], +.position-container-top-right [id^="GPsearchEngine-"] > div[id^=GPautoCompleteList], +.position-container-bottom-right [id^="GPsearchEngine-"] > div[id^=GPautoCompleteList] { + width: 340px; + position: relative; + top: unset; +} + .GPshowSearchEnginePicto { background-image: url('data:image/png;base64,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YWMxMWEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ZDIyMjI3NzYtNzg5YS00NzdiLTgxNWEtYjMyMTgwMTQ1NTQwIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MDVmZGI3NTYtYjAzNi00NDZmLTkwNGYtOTIwZTg5NTUzNjZlIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzEzNTM5NTY4NjIxOTY4IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTlmNGRjNGYtYmM1My00YjcyLTkxOTktYWU4ZDM1YThjNTBjIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wNC0xNVQxOToxNjo1MyswMjowMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZmQ3MGZkYi0yMDBhLTQ3YjYtOGI3Yi05M2Q5NGZkZjI4OWMiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDE3OjEyOjQ4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Plysf0sAAAAGYktHRAAAAAAAkX5LGK0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfoBBMPDDAA31VjAAAI9klEQVR42u2bf2xVZxnHP0/DKFsBIaXLcCPImNMmduLUlSrMDFAzN0WXYXCTkDpDR3AcRWIHMxH+WMZ+oDtGaF2M+xHd0HUzusURl7rgxhioBIJmXUC21TF/QAeza8eK7vGP85z2vefe295z7mm5ac6T3Nx73vO+57nnOc/3+fkeyCijjDLKKKOMKoRU9WOqOj2TREYZxQfPJFV9VVXfUNX6TCIZZRQPQK0a0AFVrUrxuptUdeUY/P9mVW0eP0/E3wT+yjHg0xx80n8gV6rqL1T1dVUdUNVjqrpDVReOguVvU9U9qlrrjNfaWJuqTkqBzzmqeqMBpcYZrzEl7zUALUnx3maqap/JrnqUAaSqquMEPDPB7wP/GPjVo8xLg088kuEUDfghcPMw69uBW0Tkv2kACHjbDv8B/Nx+3wjMtN/VIjJQLoCAH9nhm8Be+90IXA18CHhKRD6XolI/BKywwztEZOMogeccIJTPRBE5k6KCTQJ+AMwDrgWvx8ZrgSeBA8C3wDudIs8cuYG3cZTAkyM38M6kAaB2oMUO/wU8ArwGXATcAJxv57aLyJoUHv4S4OkRpi0Rkc4y+dQD3yxwaiqwDKgClorIEykp9SXAYWfof8B0EelNETjXAxuAyyOn9gNbROTRlAA0ooEDbyAlpS4oN/B6UwTOsHID79FEAFLVK4Fddvg0cL2I/Mc5/x6gAwjDnIUi8lwZCtAIPAZc6Ay/Zf+vxhk7BlwnIvsS8pljHnWa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'); background-repeat: no-repeat; @@ -66,6 +84,10 @@ background-position: 0 center; } +.gpf-select { + background-color: #FFF; +} + button[id^="GPshowSearchEnginePicto-"][aria-pressed="false"] + form[id^=GPsearchInput-] { max-width: 0px; border: none; diff --git a/dist/package/src/packages/CSS/GPFgeneralWidget.css b/dist/package/src/packages/CSS/GPFgeneralWidget.css index 8985ef73..cc87eaa8 100644 --- a/dist/package/src/packages/CSS/GPFgeneralWidget.css +++ b/dist/package/src/packages/CSS/GPFgeneralWidget.css @@ -407,6 +407,7 @@ input.GPsubmit:hover { white-space: nowrap; text-overflow:ellipsis; cursor: pointer; + margin-bottom: 0; } .GPautoCompleteProposal:hover { diff --git a/dist/package/src/packages/Controls/SearchEngine/SearchEngineDOM.d.ts b/dist/package/src/packages/Controls/SearchEngine/SearchEngineDOM.d.ts index 96c0acd6..d3cce2e8 100644 --- a/dist/package/src/packages/Controls/SearchEngine/SearchEngineDOM.d.ts +++ b/dist/package/src/packages/Controls/SearchEngine/SearchEngineDOM.d.ts @@ -21,10 +21,10 @@ declare namespace SearchEngineDOM { function _createCoordinateSearchPanelElement(): DOMElement; function _createCoordinateSearchPanelDivElement(): HTMLDivElement; function _createAutoCompleteListElement(): DOMElement; - function _createAutoCompletedLocationContainer(): HTMLSelectElement; + function _createAutoCompletedLocationContainer(): HTMLDivElement; function _createAutoCompletedLocationTitleElement(): void; function _createAutoCompletedLocationElement(location: Object, id: number): void; - function _createSearchedSuggestContainer(): HTMLSelectElement; + function _createSearchedSuggestContainer(): HTMLDivElement; function _createSearchedSuggestTitleElement(): void; function _createSearchedSuggestElement(suggest: Object, id: number): void; function _createAdvancedSearchPanelHeaderElement(): DOMElement; diff --git a/dist/package/src/packages/Controls/SearchEngine/SearchEngineDOM.d.ts.map b/dist/package/src/packages/Controls/SearchEngine/SearchEngineDOM.d.ts.map index f69bcc4c..5d19a070 100644 --- a/dist/package/src/packages/Controls/SearchEngine/SearchEngineDOM.d.ts.map +++ b/dist/package/src/packages/Controls/SearchEngine/SearchEngineDOM.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SearchEngineDOM.d.ts","sourceRoot":"","sources":["../../../../../src/packages/Controls/SearchEngine/SearchEngineDOM.js"],"names":[],"mappings":";;IAWc,qCAGT;IAO6B,wCAFjB,UAAU,CAOtB;IAUyB,oCAFb,UAAU,CAMtB;IAOqC,oEAFzB,UAAU,CAkFtB;IAQ2B,yDAFf,UAAU,CA6ItB;IAE2B,wDAqB3B;IAGuB,iDAIvB;IAEyB,mDAIzB;IAEuB,iDAIvB;IAEsB,kDAoFtB;IAOkC,6CAFtB,UAAU,CAuDtB;IAO6B,wCAFjB,UAAU,CAwBtB;IAOsC,iDAF1B,UAAU,CAgDtB;IAiBmC,8CAFvB,UAAU,CAatB;IAEsC,gEAItC;IAU8B,yCAFlB,UAAU,CActB;IAEiC,2DAIjC;IAU4B,uCAFhB,UAAU,CAYtB;IAWqC,gDAFzB,UAAU,CAatB;IAEwC,kEAIxC;IAWgC,2CAFpB,UAAU,CA0BtB;IAED,oEAOC;IACD,0DAMC;IAWqC,uDAH3B,MAAM,oBA0BhB;IAED,8DAOC;IACD,oDAMC;IAU+B,gDAHrB,MAAM,oBA0BhB;IASyC,oDAF7B,UAAU,CAkEtB;IAOuC,oEAJ7B,MAAM,EAAE,GAEN,UAAU,CAwDtB;IAMsC,qDAH5B,MAAM,EAAE,GACN,UAAU,CAwCtB;IAKuC,kDAF3B,UAAU,CAUtB;IAOyC,oDAF7B,UAAU,CAMtB;IAW0C,mFAF9B,UAAU,CAUtB;IAgB6C,uEAR3C;QAAiC,IAAI;QACJ,IAAI;QACJ,KAAK;QACL,WAAW;QACX,KAAK;KAEtC,GAAU,UAAU,CA4EtB;IASoC,+CAFxB,UAAU,CAuCtB;IAOkC,6CAFtB,UAAU,CAgCtB;IAYgC,kDAHtB,MAAM,oBAiBhB;IAMD,qEA4DC;IACD,oEAcC;IAED,8DAIC;IAED,wEAKC;IACD,mFAyBC;IAED,sEAKC;IACD,+EAyBC;IAED;;;;OAIG;IACH,4DAFa,UAAU,CActB;IACD;;;;OAIG;IACH,4DAFa,UAAU,CAuCtB;IACD,6DA8CC;IACD;;;;OAIG;IACH,4DAFa,UAAU,CActB;IACD;;;;OAIG;IACH,4DAFa,UAAU,CAuCtB;IACD,6DA8CC;IAED;;;OAGG;IACH,iDAFa,UAAU,CAStB"} \ No newline at end of file +{"version":3,"file":"SearchEngineDOM.d.ts","sourceRoot":"","sources":["../../../../../src/packages/Controls/SearchEngine/SearchEngineDOM.js"],"names":[],"mappings":";;IAWc,qCAGT;IAO6B,wCAFjB,UAAU,CAOtB;IAUyB,oCAFb,UAAU,CAMtB;IAOqC,oEAFzB,UAAU,CAkFtB;IAQ2B,yDAFf,UAAU,CA6ItB;IAE2B,wDAqB3B;IAGuB,iDAIvB;IAEyB,mDAIzB;IAEuB,iDAIvB;IAEsB,kDAoFtB;IAOkC,6CAFtB,UAAU,CAuDtB;IAO6B,wCAFjB,UAAU,CAwBtB;IAOsC,iDAF1B,UAAU,CAgDtB;IAiBmC,8CAFvB,UAAU,CAatB;IAEsC,gEAItC;IAU8B,yCAFlB,UAAU,CActB;IAEiC,2DAIjC;IAU4B,uCAFhB,UAAU,CAYtB;IAWqC,gDAFzB,UAAU,CAatB;IAEwC,kEAIxC;IAWgC,2CAFpB,UAAU,CA0BtB;IAED,iEAOC;IACD,0DAMC;IAWqC,uDAH3B,MAAM,oBA0BhB;IAED,2DAOC;IACD,oDAMC;IAU+B,gDAHrB,MAAM,oBA0BhB;IASyC,oDAF7B,UAAU,CAkEtB;IAOuC,oEAJ7B,MAAM,EAAE,GAEN,UAAU,CAwDtB;IAMsC,qDAH5B,MAAM,EAAE,GACN,UAAU,CAwCtB;IAKuC,kDAF3B,UAAU,CAUtB;IAOyC,oDAF7B,UAAU,CAMtB;IAW0C,mFAF9B,UAAU,CAUtB;IAgB6C,uEAR3C;QAAiC,IAAI;QACJ,IAAI;QACJ,KAAK;QACL,WAAW;QACX,KAAK;KAEtC,GAAU,UAAU,CA4EtB;IASoC,+CAFxB,UAAU,CAuCtB;IAOkC,6CAFtB,UAAU,CAgCtB;IAYgC,kDAHtB,MAAM,oBAiBhB;IAMD,qEA4DC;IACD,oEAcC;IAED,8DAIC;IAED,wEAKC;IACD,mFAyBC;IAED,sEAKC;IACD,+EAyBC;IAED;;;;OAIG;IACH,4DAFa,UAAU,CActB;IACD;;;;OAIG;IACH,4DAFa,UAAU,CAuCtB;IACD,6DA8CC;IACD;;;;OAIG;IACH,4DAFa,UAAU,CActB;IACD;;;;OAIG;IACH,4DAFa,UAAU,CAuCtB;IACD,6DA8CC;IAED;;;OAGG;IACH,iDAFa,UAAU,CAStB"} \ No newline at end of file diff --git a/dist/package/src/packages/Controls/SearchEngine/SearchEngineDOM.js b/dist/package/src/packages/Controls/SearchEngine/SearchEngineDOM.js index bc8f3be2..1de25a5c 100644 --- a/dist/package/src/packages/Controls/SearchEngine/SearchEngineDOM.js +++ b/dist/package/src/packages/Controls/SearchEngine/SearchEngineDOM.js @@ -690,7 +690,7 @@ var SearchEngineDOM = { }, _createAutoCompletedLocationContainer () { - var container = document.createElement("select"); + var container = document.createElement("div"); container.id = this._addUID("GPautocompleteResultsLocation"); container.className = "GPelementHidden gpf-hidden gpf-select"; container.size = 20; @@ -699,7 +699,7 @@ var SearchEngineDOM = { }, _createAutoCompletedLocationTitleElement () { var container = document.getElementById(this._addUID("GPautocompleteResultsLocation")); - var label = document.createElement("option"); + var label = document.createElement("p"); label.className = "GPlabel GPlabelTitle gpf-label fr-label"; label.innerHTML = "Lieux et adresses"; container.appendChild(label); @@ -720,7 +720,7 @@ var SearchEngineDOM = { var container = document.getElementById(this._addUID("GPautocompleteResultsLocation")); - var div = document.createElement("option"); + var div = document.createElement("p"); div.id = this._addUID("AutoCompletedLocation_" + id); div.className = "GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine"; var value = GeocodeUtils.getSuggestedLocationFreeform(location); @@ -740,7 +740,7 @@ var SearchEngineDOM = { }, _createSearchedSuggestContainer () { - var container = document.createElement("select"); + var container = document.createElement("div"); container.id = this._addUID("GPautocompleteResultsSuggest"); container.className = "GPelementHidden gpf-hidden gpf-select"; container.size = 6; @@ -749,7 +749,7 @@ var SearchEngineDOM = { }, _createSearchedSuggestTitleElement () { var container = document.getElementById(this._addUID("GPautocompleteResultsSuggest")); - var label = document.createElement("option"); + var label = document.createElement("p"); label.className = "GPlabel GPlabelTitle gpf-label fr-label"; label.innerHTML = "Cartes et données"; container.appendChild(label); @@ -769,7 +769,7 @@ var SearchEngineDOM = { var container = document.getElementById(this._addUID("GPautocompleteResultsSuggest")); - var div = document.createElement("option"); + var div = document.createElement("p"); div.id = this._addUID("AutoCompletedSuggest_" + id); div.className = "GPautoCompleteProposal gpf-panel__items gpf-panel__items_searchengine"; div.innerHTML = suggest.title + " (" + suggest.service + ")"; diff --git a/dist/src/packages/Controls/SearchEngine/SearchEngineDOM.d.ts b/dist/src/packages/Controls/SearchEngine/SearchEngineDOM.d.ts index 96c0acd6..d3cce2e8 100644 --- a/dist/src/packages/Controls/SearchEngine/SearchEngineDOM.d.ts +++ b/dist/src/packages/Controls/SearchEngine/SearchEngineDOM.d.ts @@ -21,10 +21,10 @@ declare namespace SearchEngineDOM { function _createCoordinateSearchPanelElement(): DOMElement; function _createCoordinateSearchPanelDivElement(): HTMLDivElement; function _createAutoCompleteListElement(): DOMElement; - function _createAutoCompletedLocationContainer(): HTMLSelectElement; + function _createAutoCompletedLocationContainer(): HTMLDivElement; function _createAutoCompletedLocationTitleElement(): void; function _createAutoCompletedLocationElement(location: Object, id: number): void; - function _createSearchedSuggestContainer(): HTMLSelectElement; + function _createSearchedSuggestContainer(): HTMLDivElement; function _createSearchedSuggestTitleElement(): void; function _createSearchedSuggestElement(suggest: Object, id: number): void; function _createAdvancedSearchPanelHeaderElement(): DOMElement; diff --git a/dist/src/packages/Controls/SearchEngine/SearchEngineDOM.d.ts.map b/dist/src/packages/Controls/SearchEngine/SearchEngineDOM.d.ts.map index f69bcc4c..5d19a070 100644 --- a/dist/src/packages/Controls/SearchEngine/SearchEngineDOM.d.ts.map +++ b/dist/src/packages/Controls/SearchEngine/SearchEngineDOM.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SearchEngineDOM.d.ts","sourceRoot":"","sources":["../../../../../src/packages/Controls/SearchEngine/SearchEngineDOM.js"],"names":[],"mappings":";;IAWc,qCAGT;IAO6B,wCAFjB,UAAU,CAOtB;IAUyB,oCAFb,UAAU,CAMtB;IAOqC,oEAFzB,UAAU,CAkFtB;IAQ2B,yDAFf,UAAU,CA6ItB;IAE2B,wDAqB3B;IAGuB,iDAIvB;IAEyB,mDAIzB;IAEuB,iDAIvB;IAEsB,kDAoFtB;IAOkC,6CAFtB,UAAU,CAuDtB;IAO6B,wCAFjB,UAAU,CAwBtB;IAOsC,iDAF1B,UAAU,CAgDtB;IAiBmC,8CAFvB,UAAU,CAatB;IAEsC,gEAItC;IAU8B,yCAFlB,UAAU,CActB;IAEiC,2DAIjC;IAU4B,uCAFhB,UAAU,CAYtB;IAWqC,gDAFzB,UAAU,CAatB;IAEwC,kEAIxC;IAWgC,2CAFpB,UAAU,CA0BtB;IAED,oEAOC;IACD,0DAMC;IAWqC,uDAH3B,MAAM,oBA0BhB;IAED,8DAOC;IACD,oDAMC;IAU+B,gDAHrB,MAAM,oBA0BhB;IASyC,oDAF7B,UAAU,CAkEtB;IAOuC,oEAJ7B,MAAM,EAAE,GAEN,UAAU,CAwDtB;IAMsC,qDAH5B,MAAM,EAAE,GACN,UAAU,CAwCtB;IAKuC,kDAF3B,UAAU,CAUtB;IAOyC,oDAF7B,UAAU,CAMtB;IAW0C,mFAF9B,UAAU,CAUtB;IAgB6C,uEAR3C;QAAiC,IAAI;QACJ,IAAI;QACJ,KAAK;QACL,WAAW;QACX,KAAK;KAEtC,GAAU,UAAU,CA4EtB;IASoC,+CAFxB,UAAU,CAuCtB;IAOkC,6CAFtB,UAAU,CAgCtB;IAYgC,kDAHtB,MAAM,oBAiBhB;IAMD,qEA4DC;IACD,oEAcC;IAED,8DAIC;IAED,wEAKC;IACD,mFAyBC;IAED,sEAKC;IACD,+EAyBC;IAED;;;;OAIG;IACH,4DAFa,UAAU,CActB;IACD;;;;OAIG;IACH,4DAFa,UAAU,CAuCtB;IACD,6DA8CC;IACD;;;;OAIG;IACH,4DAFa,UAAU,CActB;IACD;;;;OAIG;IACH,4DAFa,UAAU,CAuCtB;IACD,6DA8CC;IAED;;;OAGG;IACH,iDAFa,UAAU,CAStB"} \ No newline at end of file +{"version":3,"file":"SearchEngineDOM.d.ts","sourceRoot":"","sources":["../../../../../src/packages/Controls/SearchEngine/SearchEngineDOM.js"],"names":[],"mappings":";;IAWc,qCAGT;IAO6B,wCAFjB,UAAU,CAOtB;IAUyB,oCAFb,UAAU,CAMtB;IAOqC,oEAFzB,UAAU,CAkFtB;IAQ2B,yDAFf,UAAU,CA6ItB;IAE2B,wDAqB3B;IAGuB,iDAIvB;IAEyB,mDAIzB;IAEuB,iDAIvB;IAEsB,kDAoFtB;IAOkC,6CAFtB,UAAU,CAuDtB;IAO6B,wCAFjB,UAAU,CAwBtB;IAOsC,iDAF1B,UAAU,CAgDtB;IAiBmC,8CAFvB,UAAU,CAatB;IAEsC,gEAItC;IAU8B,yCAFlB,UAAU,CActB;IAEiC,2DAIjC;IAU4B,uCAFhB,UAAU,CAYtB;IAWqC,gDAFzB,UAAU,CAatB;IAEwC,kEAIxC;IAWgC,2CAFpB,UAAU,CA0BtB;IAED,iEAOC;IACD,0DAMC;IAWqC,uDAH3B,MAAM,oBA0BhB;IAED,2DAOC;IACD,oDAMC;IAU+B,gDAHrB,MAAM,oBA0BhB;IASyC,oDAF7B,UAAU,CAkEtB;IAOuC,oEAJ7B,MAAM,EAAE,GAEN,UAAU,CAwDtB;IAMsC,qDAH5B,MAAM,EAAE,GACN,UAAU,CAwCtB;IAKuC,kDAF3B,UAAU,CAUtB;IAOyC,oDAF7B,UAAU,CAMtB;IAW0C,mFAF9B,UAAU,CAUtB;IAgB6C,uEAR3C;QAAiC,IAAI;QACJ,IAAI;QACJ,KAAK;QACL,WAAW;QACX,KAAK;KAEtC,GAAU,UAAU,CA4EtB;IASoC,+CAFxB,UAAU,CAuCtB;IAOkC,6CAFtB,UAAU,CAgCtB;IAYgC,kDAHtB,MAAM,oBAiBhB;IAMD,qEA4DC;IACD,oEAcC;IAED,8DAIC;IAED,wEAKC;IACD,mFAyBC;IAED,sEAKC;IACD,+EAyBC;IAED;;;;OAIG;IACH,4DAFa,UAAU,CActB;IACD;;;;OAIG;IACH,4DAFa,UAAU,CAuCtB;IACD,6DA8CC;IACD;;;;OAIG;IACH,4DAFa,UAAU,CActB;IACD;;;;OAIG;IACH,4DAFa,UAAU,CAuCtB;IACD,6DA8CC;IAED;;;OAGG;IACH,iDAFa,UAAU,CAStB"} \ No newline at end of file diff --git a/jsdoc/EventEditor.html b/jsdoc/EventEditor.html index defaacc9..a81cb1fe 100644 --- a/jsdoc/EventEditor.html +++ b/jsdoc/EventEditor.html @@ -6484,7 +6484,7 @@

    static Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time) diff --git a/jsdoc/PanelDOM.html b/jsdoc/PanelDOM.html index 2c28e454..c719299e 100644 --- a/jsdoc/PanelDOM.html +++ b/jsdoc/PanelDOM.html @@ -6504,7 +6504,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/global.html b/jsdoc/global.html index af431933..2fac8df4 100644 --- a/jsdoc/global.html +++ b/jsdoc/global.html @@ -9808,7 +9808,7 @@

    Properties
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:49 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/index.html b/jsdoc/index.html index 86f132c4..c6891dbf 100644 --- a/jsdoc/index.html +++ b/jsdoc/index.html @@ -6123,7 +6123,7 @@

    Geoportal Controls

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:49 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-ButtonExport.html b/jsdoc/module-ButtonExport.html index a1e1458f..c9a8bd45 100644 --- a/jsdoc/module-ButtonExport.html +++ b/jsdoc/module-ButtonExport.html @@ -6215,7 +6215,7 @@
    Example
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-Catalog.html b/jsdoc/module-Catalog.html index 78cfd290..867ccac9 100644 --- a/jsdoc/module-Catalog.html +++ b/jsdoc/module-Catalog.html @@ -6739,7 +6739,7 @@
    Example
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-ColorUtils.html b/jsdoc/module-ColorUtils.html index 4d413386..449f966d 100644 --- a/jsdoc/module-ColorUtils.html +++ b/jsdoc/module-ColorUtils.html @@ -6604,7 +6604,7 @@
    Returns:
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-ControlList.html b/jsdoc/module-ControlList.html index b0f44a6e..81868621 100644 --- a/jsdoc/module-ControlList.html +++ b/jsdoc/module-ControlList.html @@ -6058,7 +6058,7 @@

    Example

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-Drawing.html b/jsdoc/module-Drawing.html index 78ddc9c8..bafcfd03 100644 --- a/jsdoc/module-Drawing.html +++ b/jsdoc/module-Drawing.html @@ -6058,7 +6058,7 @@

    Example

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-ElevationPath.html b/jsdoc/module-ElevationPath.html index d985cfc5..79a5e693 100644 --- a/jsdoc/module-ElevationPath.html +++ b/jsdoc/module-ElevationPath.html @@ -6338,7 +6338,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-GPXExtended.html b/jsdoc/module-GPXExtended.html index 14513411..f6498154 100644 --- a/jsdoc/module-GPXExtended.html +++ b/jsdoc/module-GPXExtended.html @@ -6058,7 +6058,7 @@

    Example

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-GeoJSONExtended.html b/jsdoc/module-GeoJSONExtended.html index 36d7e1a5..3e1df521 100644 --- a/jsdoc/module-GeoJSONExtended.html +++ b/jsdoc/module-GeoJSONExtended.html @@ -6058,7 +6058,7 @@

    Example

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-GeoportalAttribution.html b/jsdoc/module-GeoportalAttribution.html index 497655d3..8a54c096 100644 --- a/jsdoc/module-GeoportalAttribution.html +++ b/jsdoc/module-GeoportalAttribution.html @@ -6195,7 +6195,7 @@
    Properties:
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-GeoportalFullScreen.html b/jsdoc/module-GeoportalFullScreen.html index 92a699c9..665b8e43 100644 --- a/jsdoc/module-GeoportalFullScreen.html +++ b/jsdoc/module-GeoportalFullScreen.html @@ -6058,7 +6058,7 @@

    Example

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-GeoportalOverviewMap.html b/jsdoc/module-GeoportalOverviewMap.html index 396ceb8d..0a9011dc 100644 --- a/jsdoc/module-GeoportalOverviewMap.html +++ b/jsdoc/module-GeoportalOverviewMap.html @@ -6133,7 +6133,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-GeoportalZoom.html b/jsdoc/module-GeoportalZoom.html index ebd9e215..24642c55 100644 --- a/jsdoc/module-GeoportalZoom.html +++ b/jsdoc/module-GeoportalZoom.html @@ -6204,7 +6204,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-GetFeatureInfo.html b/jsdoc/module-GetFeatureInfo.html index 9428b3e9..b8f495b2 100644 --- a/jsdoc/module-GetFeatureInfo.html +++ b/jsdoc/module-GetFeatureInfo.html @@ -6058,7 +6058,7 @@

    Example

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-Gp.html b/jsdoc/module-Gp.html index 48e6b1b2..a71cfbd1 100644 --- a/jsdoc/module-Gp.html +++ b/jsdoc/module-Gp.html @@ -7011,7 +7011,7 @@

    static,consta
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-Helper.html b/jsdoc/module-Helper.html index a811e181..fd17c577 100644 --- a/jsdoc/module-Helper.html +++ b/jsdoc/module-Helper.html @@ -6458,7 +6458,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-Isocurve.html b/jsdoc/module-Isocurve.html index c56b84a0..68df3aeb 100644 --- a/jsdoc/module-Isocurve.html +++ b/jsdoc/module-Isocurve.html @@ -6338,7 +6338,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-KMLExtended.html b/jsdoc/module-KMLExtended.html index 9036b561..36bd2b8a 100644 --- a/jsdoc/module-KMLExtended.html +++ b/jsdoc/module-KMLExtended.html @@ -6058,7 +6058,7 @@

    Example

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-LayerImport.html b/jsdoc/module-LayerImport.html index b13f80d8..fc64ced7 100644 --- a/jsdoc/module-LayerImport.html +++ b/jsdoc/module-LayerImport.html @@ -6058,7 +6058,7 @@

    Example

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-LayerMapBox.html b/jsdoc/module-LayerMapBox.html index 29ea2c52..ee53f6a6 100644 --- a/jsdoc/module-LayerMapBox.html +++ b/jsdoc/module-LayerMapBox.html @@ -6058,7 +6058,7 @@

    Example

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-LayerSwitcher.html b/jsdoc/module-LayerSwitcher.html index 5aff42e1..bea0bffe 100644 --- a/jsdoc/module-LayerSwitcher.html +++ b/jsdoc/module-LayerSwitcher.html @@ -7274,7 +7274,7 @@
    Example
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-LayerUtils.html b/jsdoc/module-LayerUtils.html index 418d301e..4abde672 100644 --- a/jsdoc/module-LayerUtils.html +++ b/jsdoc/module-LayerUtils.html @@ -6630,7 +6630,7 @@
    Returns:
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-LayerWFS.html b/jsdoc/module-LayerWFS.html index 7281a1f0..18544093 100644 --- a/jsdoc/module-LayerWFS.html +++ b/jsdoc/module-LayerWFS.html @@ -6058,7 +6058,7 @@

    Example

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-LayerWMS.html b/jsdoc/module-LayerWMS.html index 66b03d71..298c0b9f 100644 --- a/jsdoc/module-LayerWMS.html +++ b/jsdoc/module-LayerWMS.html @@ -6058,7 +6058,7 @@

    Example

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-LayerWMTS.html b/jsdoc/module-LayerWMTS.html index adddf2a0..5c0b5ecb 100644 --- a/jsdoc/module-LayerWMTS.html +++ b/jsdoc/module-LayerWMTS.html @@ -6058,7 +6058,7 @@

    Example

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-Legends.html b/jsdoc/module-Legends.html index f065944d..93aa1816 100644 --- a/jsdoc/module-Legends.html +++ b/jsdoc/module-Legends.html @@ -6058,7 +6058,7 @@

    Example

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-LocationSelector.html b/jsdoc/module-LocationSelector.html index 6c92e289..53878bd5 100644 --- a/jsdoc/module-LocationSelector.html +++ b/jsdoc/module-LocationSelector.html @@ -6058,7 +6058,7 @@

    Example

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-LoggerByDefault.html b/jsdoc/module-LoggerByDefault.html index 4394e5ab..ec49087a 100644 --- a/jsdoc/module-LoggerByDefault.html +++ b/jsdoc/module-LoggerByDefault.html @@ -6346,7 +6346,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-MathUtils.html b/jsdoc/module-MathUtils.html index c7d15fcd..a5b6c80b 100644 --- a/jsdoc/module-MathUtils.html +++ b/jsdoc/module-MathUtils.html @@ -7745,7 +7745,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-MousePosition.html b/jsdoc/module-MousePosition.html index 716cb5d0..43dafd28 100644 --- a/jsdoc/module-MousePosition.html +++ b/jsdoc/module-MousePosition.html @@ -6058,7 +6058,7 @@

    Example

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-Parser.html b/jsdoc/module-Parser.html index 5bb40865..03b02473 100644 --- a/jsdoc/module-Parser.html +++ b/jsdoc/module-Parser.html @@ -6057,7 +6057,7 @@

    Example

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-ProxyUtils.html b/jsdoc/module-ProxyUtils.html index 60c3c9d0..aa8e94d2 100644 --- a/jsdoc/module-ProxyUtils.html +++ b/jsdoc/module-ProxyUtils.html @@ -6303,7 +6303,7 @@
    Returns:
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-Register.html b/jsdoc/module-Register.html index 40ba3dd7..2dd5ec8e 100644 --- a/jsdoc/module-Register.html +++ b/jsdoc/module-Register.html @@ -6723,7 +6723,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-ReverseGeocode.html b/jsdoc/module-ReverseGeocode.html index c81d0601..9c3bc607 100644 --- a/jsdoc/module-ReverseGeocode.html +++ b/jsdoc/module-ReverseGeocode.html @@ -6397,7 +6397,7 @@

    Example
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-Route.html b/jsdoc/module-Route.html index 88186121..dbe828ba 100644 --- a/jsdoc/module-Route.html +++ b/jsdoc/module-Route.html @@ -6360,7 +6360,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-Search.html b/jsdoc/module-Search.html index cd4f4574..d439bb69 100644 --- a/jsdoc/module-Search.html +++ b/jsdoc/module-Search.html @@ -8738,7 +8738,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-SearchEngine.html b/jsdoc/module-SearchEngine.html index ca368225..969f3db3 100644 --- a/jsdoc/module-SearchEngine.html +++ b/jsdoc/module-SearchEngine.html @@ -6980,7 +6980,7 @@

    Example
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/module-Territories.html b/jsdoc/module-Territories.html index 36a68223..7a9bef27 100644 --- a/jsdoc/module-Territories.html +++ b/jsdoc/module-Territories.html @@ -6058,7 +6058,7 @@

    Example

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.Catalog.html b/jsdoc/ol.control.Catalog.html index 4518efdc..1fbc3eb2 100644 --- a/jsdoc/ol.control.Catalog.html +++ b/jsdoc/ol.control.Catalog.html @@ -6802,7 +6802,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.ControlList.html b/jsdoc/ol.control.ControlList.html index 47d30115..a0c3cdee 100644 --- a/jsdoc/ol.control.ControlList.html +++ b/jsdoc/ol.control.ControlList.html @@ -6698,7 +6698,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.Drawing.html b/jsdoc/ol.control.Drawing.html index ec638071..ed0b1078 100644 --- a/jsdoc/ol.control.Drawing.html +++ b/jsdoc/ol.control.Drawing.html @@ -9389,7 +9389,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.ElevationPath.html b/jsdoc/ol.control.ElevationPath.html index 7add0feb..26485e0b 100644 --- a/jsdoc/ol.control.ElevationPath.html +++ b/jsdoc/ol.control.ElevationPath.html @@ -9044,7 +9044,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.Export.html b/jsdoc/ol.control.Export.html index 67d65d68..d08d5b6a 100644 --- a/jsdoc/ol.control.Export.html +++ b/jsdoc/ol.control.Export.html @@ -7714,7 +7714,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.GeoportalAttribution.html b/jsdoc/ol.control.GeoportalAttribution.html index c4bf9f45..a3c7c3a0 100644 --- a/jsdoc/ol.control.GeoportalAttribution.html +++ b/jsdoc/ol.control.GeoportalAttribution.html @@ -6277,7 +6277,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.GeoportalFullScreen.html b/jsdoc/ol.control.GeoportalFullScreen.html index fb8d52c0..bd84cd1b 100644 --- a/jsdoc/ol.control.GeoportalFullScreen.html +++ b/jsdoc/ol.control.GeoportalFullScreen.html @@ -6346,7 +6346,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.GeoportalMousePosition.html b/jsdoc/ol.control.GeoportalMousePosition.html index f1660f9d..dd446346 100644 --- a/jsdoc/ol.control.GeoportalMousePosition.html +++ b/jsdoc/ol.control.GeoportalMousePosition.html @@ -8850,7 +8850,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.GeoportalOverviewMap.html b/jsdoc/ol.control.GeoportalOverviewMap.html index 4f23c2bb..b051df72 100644 --- a/jsdoc/ol.control.GeoportalOverviewMap.html +++ b/jsdoc/ol.control.GeoportalOverviewMap.html @@ -6346,7 +6346,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.GeoportalZoom.html b/jsdoc/ol.control.GeoportalZoom.html index fb56cc08..28082707 100644 --- a/jsdoc/ol.control.GeoportalZoom.html +++ b/jsdoc/ol.control.GeoportalZoom.html @@ -6346,7 +6346,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.GetFeatureInfo.html b/jsdoc/ol.control.GetFeatureInfo.html index a4c6a148..61631bb1 100644 --- a/jsdoc/ol.control.GetFeatureInfo.html +++ b/jsdoc/ol.control.GetFeatureInfo.html @@ -7233,7 +7233,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.Isocurve.html b/jsdoc/ol.control.Isocurve.html index 949b9535..6e155379 100644 --- a/jsdoc/ol.control.Isocurve.html +++ b/jsdoc/ol.control.Isocurve.html @@ -8519,7 +8519,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.LayerImport.html b/jsdoc/ol.control.LayerImport.html index ee085ada..ce4083c6 100644 --- a/jsdoc/ol.control.LayerImport.html +++ b/jsdoc/ol.control.LayerImport.html @@ -7873,7 +7873,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.LayerSwitcher.html b/jsdoc/ol.control.LayerSwitcher.html index d714f5f7..723ab6a4 100644 --- a/jsdoc/ol.control.LayerSwitcher.html +++ b/jsdoc/ol.control.LayerSwitcher.html @@ -8347,7 +8347,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:35 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.Legends.html b/jsdoc/ol.control.Legends.html index 284d8a85..5668ad42 100644 --- a/jsdoc/ol.control.Legends.html +++ b/jsdoc/ol.control.Legends.html @@ -7233,7 +7233,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.LocationSelector.html b/jsdoc/ol.control.LocationSelector.html index 20b1281a..4ad6e270 100644 --- a/jsdoc/ol.control.LocationSelector.html +++ b/jsdoc/ol.control.LocationSelector.html @@ -8038,7 +8038,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.MeasureArea.html b/jsdoc/ol.control.MeasureArea.html index ae40a0df..1c3b3e70 100644 --- a/jsdoc/ol.control.MeasureArea.html +++ b/jsdoc/ol.control.MeasureArea.html @@ -6743,7 +6743,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.MeasureAzimuth.html b/jsdoc/ol.control.MeasureAzimuth.html index d0c7231d..5d611c79 100644 --- a/jsdoc/ol.control.MeasureAzimuth.html +++ b/jsdoc/ol.control.MeasureAzimuth.html @@ -6941,7 +6941,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.MeasureLength.html b/jsdoc/ol.control.MeasureLength.html index 9368f138..b21b2d88 100644 --- a/jsdoc/ol.control.MeasureLength.html +++ b/jsdoc/ol.control.MeasureLength.html @@ -6777,7 +6777,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.ReverseGeocode.html b/jsdoc/ol.control.ReverseGeocode.html index 425fdfbd..bb7779e2 100644 --- a/jsdoc/ol.control.ReverseGeocode.html +++ b/jsdoc/ol.control.ReverseGeocode.html @@ -7171,7 +7171,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.Route.html b/jsdoc/ol.control.Route.html index 6dd21c04..c37583f3 100644 --- a/jsdoc/ol.control.Route.html +++ b/jsdoc/ol.control.Route.html @@ -8268,7 +8268,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.SearchEngine.html b/jsdoc/ol.control.SearchEngine.html index 397bfb51..acd6fdec 100644 --- a/jsdoc/ol.control.SearchEngine.html +++ b/jsdoc/ol.control.SearchEngine.html @@ -8922,7 +8922,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.control.Territories.html b/jsdoc/ol.control.Territories.html index 944bd4a1..dfcdcb54 100644 --- a/jsdoc/ol.control.Territories.html +++ b/jsdoc/ol.control.Territories.html @@ -7447,7 +7447,7 @@

    Example
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.format.GPXExtended.html b/jsdoc/ol.format.GPXExtended.html index 5aedbb33..baab2d83 100644 --- a/jsdoc/ol.format.GPXExtended.html +++ b/jsdoc/ol.format.GPXExtended.html @@ -7079,7 +7079,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.format.GeoJSONExtended.html b/jsdoc/ol.format.GeoJSONExtended.html index 78036a0c..ff0e3421 100644 --- a/jsdoc/ol.format.GeoJSONExtended.html +++ b/jsdoc/ol.format.GeoJSONExtended.html @@ -6685,7 +6685,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.format.KMLExtended.html b/jsdoc/ol.format.KMLExtended.html index fec6cbc5..00e0d0eb 100644 --- a/jsdoc/ol.format.KMLExtended.html +++ b/jsdoc/ol.format.KMLExtended.html @@ -6984,7 +6984,7 @@

    Returns:
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.layer.GeoportalMapBox.html b/jsdoc/ol.layer.GeoportalMapBox.html index e3088fa4..46290a37 100644 --- a/jsdoc/ol.layer.GeoportalMapBox.html +++ b/jsdoc/ol.layer.GeoportalMapBox.html @@ -7225,7 +7225,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.layer.GeoportalWFS.html b/jsdoc/ol.layer.GeoportalWFS.html index a4160358..ddc1b48e 100644 --- a/jsdoc/ol.layer.GeoportalWFS.html +++ b/jsdoc/ol.layer.GeoportalWFS.html @@ -6958,7 +6958,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.layer.GeoportalWMS.html b/jsdoc/ol.layer.GeoportalWMS.html index 677ba497..8e364bdc 100644 --- a/jsdoc/ol.layer.GeoportalWMS.html +++ b/jsdoc/ol.layer.GeoportalWMS.html @@ -6921,7 +6921,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.layer.GeoportalWMTS.html b/jsdoc/ol.layer.GeoportalWMTS.html index 60f6b81a..247fe6e1 100644 --- a/jsdoc/ol.layer.GeoportalWMTS.html +++ b/jsdoc/ol.layer.GeoportalWMTS.html @@ -7127,7 +7127,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.source.GeoportalWFS.html b/jsdoc/ol.source.GeoportalWFS.html index bc87bc8d..018aa520 100644 --- a/jsdoc/ol.source.GeoportalWFS.html +++ b/jsdoc/ol.source.GeoportalWFS.html @@ -6500,7 +6500,7 @@

    Extends

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.source.GeoportalWMS.html b/jsdoc/ol.source.GeoportalWMS.html index 5c3cfa96..dd4d5598 100644 --- a/jsdoc/ol.source.GeoportalWMS.html +++ b/jsdoc/ol.source.GeoportalWMS.html @@ -6468,7 +6468,7 @@

    Extends

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.source.GeoportalWMTS.html b/jsdoc/ol.source.GeoportalWMTS.html index 3359e78f..1fbce226 100644 --- a/jsdoc/ol.source.GeoportalWMTS.html +++ b/jsdoc/ol.source.GeoportalWMTS.html @@ -6468,7 +6468,7 @@

    Extends

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.source.WMTSExtended.html b/jsdoc/ol.source.WMTSExtended.html index ec01f648..422f688f 100644 --- a/jsdoc/ol.source.WMTSExtended.html +++ b/jsdoc/ol.source.WMTSExtended.html @@ -6340,7 +6340,7 @@
    Returns:
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.style.Editor.html b/jsdoc/ol.style.Editor.html index 71f0a661..1775c069 100644 --- a/jsdoc/ol.style.Editor.html +++ b/jsdoc/ol.style.Editor.html @@ -7180,7 +7180,7 @@
    Returns:
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.style.editor.Filter.html b/jsdoc/ol.style.editor.Filter.html index 29d0bc57..920bb12d 100644 --- a/jsdoc/ol.style.editor.Filter.html +++ b/jsdoc/ol.style.editor.Filter.html @@ -6442,7 +6442,7 @@
    Returns:
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.style.editor.Group.html b/jsdoc/ol.style.editor.Group.html index 20f5a798..a9200ce2 100644 --- a/jsdoc/ol.style.editor.Group.html +++ b/jsdoc/ol.style.editor.Group.html @@ -6418,7 +6418,7 @@
    Returns:
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.style.editor.Layer.html b/jsdoc/ol.style.editor.Layer.html index 697be3b3..eda947a7 100644 --- a/jsdoc/ol.style.editor.Layer.html +++ b/jsdoc/ol.style.editor.Layer.html @@ -7272,7 +7272,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.style.editor.Legend.html b/jsdoc/ol.style.editor.Legend.html index c00ec4bc..a4c4f268 100644 --- a/jsdoc/ol.style.editor.Legend.html +++ b/jsdoc/ol.style.editor.Legend.html @@ -7243,7 +7243,7 @@

    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.style.editor.Search.html b/jsdoc/ol.style.editor.Search.html index 9267930d..9705636d 100644 --- a/jsdoc/ol.style.editor.Search.html +++ b/jsdoc/ol.style.editor.Search.html @@ -6446,7 +6446,7 @@

    Returns:
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.style.editor.Style.html b/jsdoc/ol.style.editor.Style.html index 925fe9f0..a18c63c2 100644 --- a/jsdoc/ol.style.editor.Style.html +++ b/jsdoc/ol.style.editor.Style.html @@ -6444,7 +6444,7 @@
    Returns:
    Geoportail - Copyright (c) IGN, released under the CECILL-B license
    - Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:22:50 GMT+0000 (Coordinated Universal Time) + Documentation generated by JSDoc 3.6.11 on Tue Jan 07 2025 14:24:36 GMT+0000 (Coordinated Universal Time)
    diff --git a/jsdoc/ol.style.editor.Theme.html b/jsdoc/ol.style.editor.Theme.html index fcffb0c8..bc40e0f4 100644 --- a/jsdoc/ol.style.editor.Theme.html +++ b/jsdoc/ol.style.editor.Theme.html @@ -6456,7 +6456,7 @@
    Returns: